function expr(&$bc) { $o = ""; if (is_array($bc)) { $type = $bc[0]; switch ($type) { case JS_ASSIGN: return jsa::assign($bc); case JS_MATH: return jsa::math($bc); case JS_CMP: return jsa::cmp($bc); case JS_STR: return 'jsrt::ref(' . jsa::expr($bc[1]) . ')'; case JS_VALUE: return 'jsrt::ref(' . jsa::expr($bc[1]) . ')'; case JS_VAR: return jsa::variable($bc); case JS_FCALL: return jsa::fcall($bc); default: jsa::err("expression fault <<" . substr(serialize($bc), 0, 128) . ">>"); } } else { return $bc; // must be literal value } }