author | Alan Dipert
<alan@dipert.org> 2020-01-30 00:37:14 UTC |
committer | Alan Dipert
<alan@dipert.org> 2020-01-30 00:37:14 UTC |
parent | 989e40a1a7aa0892731ab7abca943602e55ebda0 |
jacl.js | +8 | -4 |
diff --git a/jacl.js b/jacl.js index e4161d7..80576a0 100644 --- a/jacl.js +++ b/jacl.js @@ -1373,9 +1373,10 @@ const analyzeSpecials = new Map([ [JACLPKG.intern('%IF'), (env, parent, form) => { if ([...form].length < 4) throw new Error(`IF requires at least 3 args`); const [, pred, expr0, expr1] = form; + const childEnv = env.context === 'return' ? env.withContext('expr') : env; const testNode = analyze(env.withContext('expr'), null, pred), - thenNode = analyze(env, null, expr0), - elseNode = analyze(env, null, expr1); + thenNode = analyze(childEnv, null, expr0), + elseNode = analyze(childEnv, null, expr1); const node = makeNode('if', { env: env, parent: parent, @@ -1847,7 +1848,10 @@ const emitNode = (print, node) => { print(')'); if (context !== 'expr') print(';\n'); break; - case 'if': + case 'if': { + if (context === 'return') { + print('return '); + } if (context === 'expr' || context === 'return') { print('(('); emitNode(print, node.testNode); @@ -1866,7 +1870,7 @@ const emitNode = (print, node) => { print('\n'); } break; - case 'tagbody': { + } case 'tagbody': { if (context === 'return') print('return '); if (context === 'return' || context === 'expr') { print('(function()\n');