author | Alan Dipert
<alan@dipert.org> 2020-06-19 03:32:05 UTC |
committer | Alan Dipert
<alan@dipert.org> 2020-06-19 03:32:05 UTC |
parent | fd4932a86fa478a7ceca4bcbfab9fdbe8d33cfab |
boot.lisp | +4 | -4 |
jacl.js | +14 | -6 |
diff --git a/boot.lisp b/boot.lisp index 0e35f13..cd137e7 100644 --- a/boot.lisp +++ b/boot.lisp @@ -27,14 +27,14 @@ (\. *package* (|exportSymbol| (\. 'defmacro |name|))) (%js "(~{}.setMacro().fvalue = ~{})" 'defmacro - (%lambda (env form name params &rest body) + (%lambda nil (env form name params &rest body) `(jacl:%progn (jacl:%js "(~{}.setMacro().fvalue = ~{})" ',name ;; TODO Macro lambda list parsing. Also, consider ;; incorportating a symbol's package into the name of its ;; generated local. - (jacl:%lambda (jacl::&environment jacl::&whole ,@params) + (jacl:%lambda nil (jacl::&environment jacl::&whole ,@params) ,@body)) ',name))) @@ -43,7 +43,7 @@ `(jacl:%progn (jacl:%js "(~{}.fvalue = ~{})" ',name - (jacl:%lambda ,params ,@body)) + (jacl:%lambda nil ,params ,@body)) ',name)) (defun %export (symbol &optional (package *package*)) @@ -273,7 +273,7 @@ (%export 'lambda) (defmacro lambda (params &rest body) - `(jacl:%lambda ,params ,@body)) + `(jacl:%lambda nil ,params ,@body)) (%export 'list) (defun list (&rest objects) diff --git a/jacl.js b/jacl.js index 55d0ede..c6977bd 100644 --- a/jacl.js +++ b/jacl.js @@ -792,7 +792,7 @@ const munge = s => { const mungeSym = (sym, prefix = '') => { prefix = prefix !== '' ? (prefix + '_') : ''; - if (sym.packageName === undefined || PACKAGE.val().name === sym.packageName) { + if (sym.packageName === undefined) { return prefix + munge(sym.name); } else { return prefix + munge(sym.packageName) + '$' + munge(sym.name); @@ -1283,7 +1283,7 @@ const analyzeSpecials = new Map([ return node; }], [JACLPKG.intern('%LAMBDA'), (env, parent, form) => { - let [, list, ...body] = form; + let [, name, list, ...body] = form; let declarations = []; if (body.length > 0 && List.isProperList(body[0]) @@ -1291,8 +1291,16 @@ const analyzeSpecials = new Map([ declarations = List.toArray(List.rest(body[0])); body = body.slice(1); } - node = makeNode('lambda', { env: env, parent: parent, form: form, declarations: declarations }); - const { lambdaList, initforms, bodyEnv } = analyzeLambdaList(env.withContext('expr'), node, list, false); + node = makeNode('lambda', { + env: env, + parent: parent, + form: form, + name: name, + declarations: declarations + }); + const { lambdaList, initforms, bodyEnv } = analyzeLambdaList( + env.withContext('expr'), node, list, false + ); node.lambdaList = lambdaList; node = merge(node, analyzeBlock(bodyEnv, node, body)); node.children = [...node.children, ...initforms]; @@ -1854,9 +1862,9 @@ const emitNode = (print, node) => { } case 'lambda': { if (node.declarations.find(x => List.first(x) === JACLPKG.intern('ASYNC'))) { - print('(async function('); + print(`(async function ${mungeSym(node.name)}(`); } else { - print('(function('); + print(`(function ${mungeSym(node.name)}(`); } // Emit required argument names // TODO Move lambda list production to a function for use by macro ll,