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 } }
function jse_run($flags = JSE_ACCEL) { // interrupt every 1000 low-level statements if ($flags & JSE_TICKS) { register_tick_function(array("jsrt", "tick_safe")); declare (ticks=1000); } #-- check for accelerator/assembler presence if ($flags & JSE_ACCEL && class_exists("jsa") && class_exists("jsrt")) { eval(jsa::assemble(NULL, $flags & JSE_TICKS)); } else { jsi::run(); } #-- clean up if ($flags & JSE_TICKS) { unregister_tick_function(array("jsrt", "tick_safe")); declare (ticks=0); } }