function expr(&$bc) { if (is_array($bc)) { switch ($bc[0]) { case JS_ASSIGN: return jsi::assign($bc); break; case JS_MATH: return jsi::math($bc); break; case JS_CMP: return jsi::cmp($bc); break; case JS_VALUE: $bc = $bc[1]; return jsi::expr($bc); break; case JS_VAR: return jsi::get_var($bc); break; case JS_FCALL: return jsi::fcall($bc); break; default: jsi::err("expression fault <<" . substr(serialize($bc), 0, 128) . ">>"); } } else { return $bc; // must be direct 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); } }