Implement the (or) function too

The (or) function is to be constructed similarly to (and), so refactor
the compile_and_operator function to handle or aswell.

Signed-off-by: Gergely Nagy <algernon@madhouse-project.org>
This commit is contained in:
Gergely Nagy 2013-04-08 00:00:20 +02:00
parent f03b538787
commit 1b7d145c65
2 changed files with 14 additions and 2 deletions

View File

@ -547,13 +547,16 @@ class HyASTCompiler(object):
col_offset=operator.start_column)
@builds("and")
@builds("or")
@checkargs(min=2)
def compile_and_operator(self, expression):
def compile_logical_or_and_and_operator(self, expression):
ops = {"and": ast.And,
"or": ast.Or}
operator = expression.pop(0)
values = []
for child in expression:
values.append (self.compile(child))
return ast.BoolOp(op=ast.And(),
return ast.BoolOp(op=ops[operator](),
lineno=operator.start_line,
col_offset=operator.start_column,
values=values)

View File

@ -413,6 +413,15 @@
(assert (= and123 3))
(assert (= and-false False))))
(defn test-or []
"NATIVE: test the or function"
(let [[or-all-true (or 1 2 3 True "string")]
[or-some-true (or False "hello")]
[or-none-true (or False False)]]
(assert (= or-all-true 1))
(assert (= or-some-true "hello"))
(assert (= or-none-true False))))
; FEATURE: native hy-eval
;
; - related to bug #64