예제 #1
0
 function block(&$bc, $use_braces = true)
 {
     static $bn = 0;
     $bn++;
     $o = "";
     #-- multiple lines in every block
     for ($pc = 0; $pc <= count($bc); $pc++) {
         if (is_array($bc[$pc])) {
             // else it is a plain value in void context
             switch ($bc[$pc][0]) {
                 case JS_FCALL:
                 case JS_ASSIGN:
                 case JS_MATH:
                 case JS_CMP:
                 case JS_VALUE:
                 case JS_VAR:
                     $o .= jsa::expr($bc[$pc]) . ";\n";
                     break;
                 case JS_VAR_STATEMENT:
                     $o .= jsa::constr_var($bc[$pc]);
                     break;
                 case JS_FOR:
                     $o .= jsa::constr_for($bc[$pc]);
                     break;
                 case JS_COND:
                     $o .= jsa::constr_cond($bc[$pc]);
                     break;
                 case JS_SWITCH:
                     $o .= jsa::constr_switch($bc[$pc]);
                     break;
                 case JS_RT:
                     $o .= jsa::constr_rt($bc[$pc]);
                     break;
                 case JS_BREAK:
                     $o .= jsa::constr_break($bc[$pc]);
                     break;
                 case JS_RETURN:
                     $o .= jsa::constr_return($bc[$pc]);
                     break;
                 case JS_FUNCDEF:
                     $o .= jsa::constr_funcdef($bc[$pc]);
                     break;
                 default:
                     if (is_array($bc[$pc])) {
                         $o .= jsa::block($bc[$pc]);
                     } else {
                         jsa::err("unknown processing code @{$pc}");
                     }
             }
         }
     }
     if ($use_braces) {
         $o = "{\n" . $o . "}\n";
     }
     return $o;
 }