From 329d46f50b35e34737ebd2025763e6d6b1ccaf43 Mon Sep 17 00:00:00 2001 From: Nat Quayle Nelson Date: Thu, 11 Nov 2021 14:29:31 -0700 Subject: [PATCH] Fix exprCase for new macro expansion system --- kiss/src/kiss/Helpers.hx | 5 ++++- kiss/src/kiss/Macros.hx | 7 ++++--- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/kiss/src/kiss/Helpers.hx b/kiss/src/kiss/Helpers.hx index f44a53dc..df44c3ab 100644 --- a/kiss/src/kiss/Helpers.hx +++ b/kiss/src/kiss/Helpers.hx @@ -402,6 +402,7 @@ class Helpers { ReaderExpDef: ReaderExpDef } }); + interp.variables.set("k", k.forMacroEval()); interp.variables.set("Macros", Macros); for (name => value in k.macroVars) { interp.variables.set(name, value); @@ -431,8 +432,10 @@ class Helpers { interp.variables.set("eval", innerRunAtCompileTimeDynamic); interp.variables.set("Helpers", { - evalUnquotes: evalUnquotes.bind(_, innerRunAtCompileTime) + evalUnquotes: evalUnquotes.bind(_, innerRunAtCompileTime), + runAtCompileTime: innerRunAtCompileTime }); + interp.variables.set("__interp__", interp); if (args != null) { for (arg => value in args) { diff --git a/kiss/src/kiss/Macros.hx b/kiss/src/kiss/Macros.hx index 58c41223..c2d3b2dd 100644 --- a/kiss/src/kiss/Macros.hx +++ b/kiss/src/kiss/Macros.hx @@ -473,6 +473,7 @@ class Macros { } catch (error:CompileError) { throw error; } catch (error:Dynamic) { + // TODO this could print the hscript, with some refactoring throw CompileError.fromExp(wholeExp, 'Macro expansion error: $error'); }; }; @@ -932,7 +933,7 @@ class Macros { throw CompileError.fromExp(wholeExp, 'expression ${toMatch.def.toString()} matches no pattern in exprCase'); }; - return b.call(b.symbol("Macros.exprCase"), [b.str(functionKey), toMatch, b.symbol("k")]); + return b.call(b.symbol("Macros.exprCase"), [b.str(functionKey), toMatch, b.symbol("__interp__")]); }; // Maybe the NEW wildest code in Kiss? @@ -1043,8 +1044,8 @@ class Macros { static var exprCaseFunctions:MapReaderExp> = []; - public static function exprCase(id:String, toMatchValue:ReaderExp, k:KissState):ReaderExp { - return Helpers.runAtCompileTime(exprCaseFunctions[id](toMatchValue), k); + public static function exprCase(id:String, toMatchValue:ReaderExp, i:KissInterp):ReaderExp { + return i.variables["Helpers"].runAtCompileTime(exprCaseFunctions[id](toMatchValue)); } static function matchExpr(pattern:ReaderExp, instance:ReaderExp):Bool {