function compile($expr, &$oob) { global $ENVIRONMENT; if (is_array($expr)) { switch ($expr[0] . "") { case "def": return compile_def($expr, $oob); case "define": return compile_def($expr, $oob); case "fn": return compile_fn($expr, $oob); case "λ": return compile_fn($expr, $oob); case "do": return compile_do($expr, $oob); case "«": compile_php($expr, $oob); return null; case "function": return compile_function($expr, $oob); case "macro": compile_macro($expr, $oob); return null; case "if": return compile_if($expr, $oob); case "quote": return var_export($expr[1], true); case "env": return compile_env($expr, $oob); case "inline": return compile_inline($expr, $oob); case "let": return compile_let($expr, $oob); case "recur": return compile_recur($expr, $oob); case "set!": return compile_set($expr, $oob); case "ref": return compile_ref($expr, $oob); case "-": case "*": case "/": case "+": return compile_math($expr, $oob); default: return compile_call($expr, $oob); } } else { if (is_symbol($expr)) { if ($expr . "" == "true") { return "true"; } if ($expr . "" == "false") { return "false"; } if ($expr . "" == "nil") { return "null"; } $p = count($oob["locals"]) - 1; if (is_array($oob["locals"][$p]) && in_array($expr, $oob["locals"][$p])) { return compile(array(symbol("env"), $expr), $oob); } //$expr=mangle($expr); return "(" . $ENVIRONMENT . "[\"" . symbol_str($expr) . "\"] ? \$" . mangle(symbol_str($expr)) . " : \$GLOBALS[\"" . mangle(symbol_str($expr)) . "\"])"; } if (is_string($expr)) { return "\"" . $expr . "\""; } if ($expr == 0) { return "0"; } if ($expr == null) { return "null"; } return $expr . ""; } }
function _compile_if($arguments, $elseif = false, $while = false) { $this->internal('compile_if'); return compile_if($arguments, $elseif, $while, $this); }