diff options
| author | Joel Martin <github@martintribe.org> | 2014-04-23 21:59:50 -0500 |
|---|---|---|
| committer | Joel Martin <github@martintribe.org> | 2014-04-23 21:59:50 -0500 |
| commit | 6301e0b6374cecc5599665be14d6ddc6a31ce1e8 (patch) | |
| tree | dbf1dc2ff6c682fd87c72a7907e7f6e59c8d4c03 /php/step6_file.php | |
| parent | 89bd4de1e2704c1bc562788b2c5e4fc08b71a538 (diff) | |
| download | mal-6301e0b6374cecc5599665be14d6ddc6a31ce1e8.tar.gz mal-6301e0b6374cecc5599665be14d6ddc6a31ce1e8.zip | |
All: TCO let* and quasiquote.
Diffstat (limited to 'php/step6_file.php')
| -rw-r--r-- | php/step6_file.php | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/php/step6_file.php b/php/step6_file.php index b7cdcc3..1e83c28 100644 --- a/php/step6_file.php +++ b/php/step6_file.php @@ -56,11 +56,13 @@ function MAL_EVAL($ast, $env) { for ($i=0; $i < count($a1); $i+=2) { $let_env->set($a1[$i]->value, MAL_EVAL($a1[$i+1], $let_env)); } - return MAL_EVAL($ast[2], $let_env); + $ast = $ast[2]; + $env = $let_env; + break; // Continue loop (TCO) case "do": eval_ast($ast->slice(1, -1), $env); $ast = $ast[count($ast)-1]; - break; + break; // Continue loop (TCO) case "if": $cond = MAL_EVAL($ast[1], $env); if ($cond === NULL || $cond === false) { @@ -69,7 +71,7 @@ function MAL_EVAL($ast, $env) { } else { $ast = $ast[2]; } - break; + break; // Continue loop (TCO) case "fn*": return _function('MAL_EVAL', 'native', $ast[2], $env, $ast[1]); @@ -80,6 +82,7 @@ function MAL_EVAL($ast, $env) { if ($f->type === 'native') { $ast = $f->ast; $env = $f->gen_env($args); + // Continue loop (TCO) } else { return $f->apply($args); } |
