clone the macro evaluation interpreter between stack frames

This commit is contained in:
2021-08-04 14:19:40 -06:00
parent 254007066a
commit f6894148a0

View File

@@ -11,6 +11,7 @@ import kiss.CompileError;
import kiss.Kiss; import kiss.Kiss;
import kiss.SpecialForms; import kiss.SpecialForms;
import kiss.Prelude; import kiss.Prelude;
import kiss.cloner.Cloner;
import uuid.Uuid; import uuid.Uuid;
import sys.io.Process; import sys.io.Process;
@@ -332,12 +333,10 @@ class Helpers {
interp.variables.set("Macros", Macros); interp.variables.set("Macros", Macros);
interps.push(interp); interps.push(interp);
} else { } else {
interps.push(interps[-1]); interps.push(new Cloner().clone(interps[-1]));
} }
var parsed = parser.parseString(code); var parsed = parser.parseString(code);
// TODO if an internal evaluation ever needs to end before its outer evaluation is done,
// this will cause problems because the old args will be overwritten and lost
interps[-1].variables.set("__args__", args); // trippy interps[-1].variables.set("__args__", args); // trippy
if (args != null) { if (args != null) {
for (arg => value in args) { for (arg => value in args) {