From f921ce08c5d4a40098bb0e2065e38f70c65adeb6 Mon Sep 17 00:00:00 2001 From: Nat Quayle Nelson Date: Wed, 4 Aug 2021 16:48:03 -0600 Subject: [PATCH] pass reflection and expression evaluation to macro evaluator --- kiss/src/kiss/Helpers.hx | 3 +++ kiss/src/kiss/Kiss.hx | 2 +- kiss/src/kiss/KissInterp.hx | 1 + 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/kiss/src/kiss/Helpers.hx b/kiss/src/kiss/Helpers.hx index be63106f..dd5cfcf7 100644 --- a/kiss/src/kiss/Helpers.hx +++ b/kiss/src/kiss/Helpers.hx @@ -334,6 +334,9 @@ class Helpers { for (name => value in k.macroVars) { interp.variables.set(name, value); } + // This is kind of a big deal: + interp.variables.set("eval", Helpers.runAtCompileTimeDynamic.bind(_, k)); + interps.push(interp); } else { interps.push(new Cloner().clone(interps[-1])); diff --git a/kiss/src/kiss/Kiss.hx b/kiss/src/kiss/Kiss.hx index 7f8b9f49..a6760cde 100644 --- a/kiss/src/kiss/Kiss.hx +++ b/kiss/src/kiss/Kiss.hx @@ -58,6 +58,7 @@ class Kiss { // Helpful built-in aliases // These ones might conflict with a programmer's variable names, so they only apply in call expressions: callAliases: [ + // TODO some of these probably won't conflict, and could be passed as functions for a number of reasons "print" => Symbol("Prelude.print"), "sort" => Symbol("Prelude.sort"), "groups" => Symbol("Prelude.groups"), @@ -106,7 +107,6 @@ class Kiss { macroVars: new Map() }; - // Helpful aliases return k; } diff --git a/kiss/src/kiss/KissInterp.hx b/kiss/src/kiss/KissInterp.hx index 17fa01b3..a1aa863c 100644 --- a/kiss/src/kiss/KissInterp.hx +++ b/kiss/src/kiss/KissInterp.hx @@ -19,6 +19,7 @@ class KissInterp extends Interp { this.nullForUnknownVar = nullForUnknownVar; + variables.set("Reflect", Reflect); variables.set("Prelude", Prelude); variables.set("Lambda", Lambda); variables.set("Std", Std);