From 7abc47233680bb5305c3daef92b4c1adf15cbf6d Mon Sep 17 00:00:00 2001 From: "Paul R. Tagliamonte" Date: Fri, 5 Apr 2013 21:53:44 -0400 Subject: [PATCH] Implementing `let' --- hy/core/bootstrap.py | 16 ++++++++++++++++ tests/native_tests/language.hy | 5 +++++ 2 files changed, 21 insertions(+) diff --git a/hy/core/bootstrap.py b/hy/core/bootstrap.py index 9d46289..e77fb02 100644 --- a/hy/core/bootstrap.py +++ b/hy/core/bootstrap.py @@ -114,3 +114,19 @@ def rest_macro(tree): return HyExpression([HySymbol('slice'), ret, HyInteger(1)]) + + +@macro("let") +def let_macro(tree): + tree.pop(0) # "let" + ret = tree.pop(0) # vars + # tree is now the body + expr = HyExpression([HySymbol("fn"), HyList([])]) + + for var in ret: + expr.append(HyExpression([HySymbol("setf"), var[0], var[1]])) + + for stmt in tree: + expr.append(stmt) + + return HyExpression([expr]) diff --git a/tests/native_tests/language.hy b/tests/native_tests/language.hy index 83ab1c4..4366d06 100644 --- a/tests/native_tests/language.hy +++ b/tests/native_tests/language.hy @@ -294,6 +294,11 @@ (assert (= (fn-test) 2))) +(defn test-let [] + "NATIVE: test let works rightish" + (assert (= (let [[x 1] [y 2] [z 3]] (+ x y z)) 6))) + + ; FEATURE: native hy-eval ; ; - related to bug #64