diff --git a/hy/compiler.py b/hy/compiler.py index e990a41..026461d 100644 --- a/hy/compiler.py +++ b/hy/compiler.py @@ -546,6 +546,18 @@ class HyASTCompiler(object): lineno=operator.start_line, col_offset=operator.start_column) + @builds("and") + @checkargs(min=2) + def compile_and_operator(self, expression): + operator = expression.pop(0) + values = [] + for child in expression: + values.append (self.compile(child)) + return ast.BoolOp(op=ast.And(), + lineno=operator.start_line, + col_offset=operator.start_column, + values=values) + @builds("=") @builds("!=") @builds("<") diff --git a/tests/native_tests/language.hy b/tests/native_tests/language.hy index 1044c41..f533a9b 100644 --- a/tests/native_tests/language.hy +++ b/tests/native_tests/language.hy @@ -406,6 +406,13 @@ (assert (= -_- "what?")))) +(defn test-and [] + "NATIVE: test the and function" + (let [[and123 (and 1 2 3)] + [and-false (and 1 False 3)]] + (assert (= and123 3)) + (assert (= and-false False)))) + ; FEATURE: native hy-eval ; ; - related to bug #64