public function execute(Runtime $vm) { $text = preg_replace_callback("/__(@?[a-z][a-z0-9_]*?)__/i", function ($var) use($vm) { if ($var[1][0] == '@') { $var[1] = substr($var[1], 1); $varValue = true; } $value = $vm->get($var[1]); if (is_null($value)) { /* variable is not found, we ignore it */ return $var[0]; } $result = $vm->getValue($value); if (!empty($varValue)) { $result = var_export($result, true); } if (is_object($result) && is_callable(array($result, '__toString'))) { $result = (string) $result; } if (!is_scalar($result)) { throw new \RuntimeException("Only scalar values may be replaced. Use @ to get the string representation."); } return $result; }, $this->args); if ($this->isString()) { return $vm->printIndented($text, $this); } return $vm->doPrint($text); }
public function functionPrint(array $args, Runtime $vm) { return $vm->doPrint($args[0]); }