t = $t; $this->p = $p; } public function __isset($key) { return ( (is_array($this->t) && isset($this->t[$key])) || (is_object($this->t) && isset($this->t->$key)) || (is_array($this->p) && isset($this->p[$key])) || (is_object($this->p) && isset($this->p->$key))); } public function __get($key) { if (is_array($this->t) && isset($this->t[$key])) return $this->t[$key]; if (is_object($this->t) && isset($this->t->$key)) return $this->t->$key; if (is_array($this->p) && isset($this->p[$key])) return $this->p[$key]; if (is_object($this->p) && isset($this->p->$key)) return $this->p->$key; return null; } } } if (!class_exists('_LF', false)) { class _LF { public $f; public function __construct($f) { $this->f = $f; } public function __invoke() { return call_user_func_array($this->f, func_get_args()); } public function __toString() { return '<>'; } } } if (!class_exists('_LL', false)) { class _LL { public function __invoke($libname) { switch ($libname) { case 'std': return array( 'count' => new _LF('count'), 'join' => new _LF('implode'), ); default: throw new Exception('No such library: ' . $libname); } } } } if (!is_callable('_r')) { function _r($context, $key) { if ($key === '.') return $context; if ($key === 'library') return new _LL; if (is_array($context)) { if (isset($context[$key])) return $context[$key]; } if (is_object($context)) { if (isset($context->$key)) return $context->$key; } return null; } } if (!is_callable('_in')) { function _in($elem, $list) { if (is_array($list)) { return in_array($elem, $list); } return false; } } if (!is_callable('_f')) { function _f($val) { if (is_array($val)) { return implode(' ', $val); } return (string)$val; } } if (!is_callable('_call')) { function _call($func, $args) { if ($func instanceof FunctionPointer || $func instanceof _LL || $func instanceof _LF) { return call_user_func_array($func, $args); } return null; } }