From 6eacf63b533f373bbd8b6de44f5458c931a130dc Mon Sep 17 00:00:00 2001 From: Konrad Hinsen Date: Wed, 5 Jun 2013 11:41:58 +0200 Subject: [PATCH] Provide both eval-and-compile and eval-when-compile --- hy/compiler.py | 12 ++++++++++-- tests/native_tests/native_macros.hy | 9 +++++++++ 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/hy/compiler.py b/hy/compiler.py index 9fba8cc..1bbeb25 100644 --- a/hy/compiler.py +++ b/hy/compiler.py @@ -1664,8 +1664,8 @@ class HyASTCompiler(object): return ret - @builds("eval_when_compile") - def compile_eval_when_compile(self, expression): + @builds("eval_and_compile") + def compile_eval_and_compile(self, expression): expression[0] = HySymbol("progn") hy.importer.hy_eval(expression, compile_time_ns(self.module_name), @@ -1673,6 +1673,14 @@ class HyASTCompiler(object): expression.pop(0) return self._compile_branch(expression) + @builds("eval_when_compile") + def compile_eval_when_compile(self, expression): + expression[0] = HySymbol("progn") + hy.importer.hy_eval(expression, + compile_time_ns(self.module_name), + self.module_name) + return Result() + @builds(HyInteger) def compile_integer(self, number): return ast.Num(n=int(number), diff --git a/tests/native_tests/native_macros.hy b/tests/native_tests/native_macros.hy index 01b301b..e21d80e 100644 --- a/tests/native_tests/native_macros.hy +++ b/tests/native_tests/native_macros.hy @@ -45,3 +45,12 @@ (defn test-fn-calling-macro [] "NATIVE: test macro calling a plain function" (assert (= 3 (bar 1 2)))) + +; Macro that checks a variable defined at compile or load time +(setv phase "load") +(eval-when-compile + (setv phase "compile")) +(defmacro phase-when-compiling [] phase) +(assert (= phase "load")) +(assert (= (phase-when-compiling) "compile")) +