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:
parent
f03b538787
commit
1b7d145c65
@ -547,13 +547,16 @@ class HyASTCompiler(object):
|
|||||||
col_offset=operator.start_column)
|
col_offset=operator.start_column)
|
||||||
|
|
||||||
@builds("and")
|
@builds("and")
|
||||||
|
@builds("or")
|
||||||
@checkargs(min=2)
|
@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)
|
operator = expression.pop(0)
|
||||||
values = []
|
values = []
|
||||||
for child in expression:
|
for child in expression:
|
||||||
values.append (self.compile(child))
|
values.append (self.compile(child))
|
||||||
return ast.BoolOp(op=ast.And(),
|
return ast.BoolOp(op=ops[operator](),
|
||||||
lineno=operator.start_line,
|
lineno=operator.start_line,
|
||||||
col_offset=operator.start_column,
|
col_offset=operator.start_column,
|
||||||
values=values)
|
values=values)
|
||||||
|
@ -413,6 +413,15 @@
|
|||||||
(assert (= and123 3))
|
(assert (= and123 3))
|
||||||
(assert (= and-false False))))
|
(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
|
; FEATURE: native hy-eval
|
||||||
;
|
;
|
||||||
; - related to bug #64
|
; - related to bug #64
|
||||||
|
Loading…
x
Reference in New Issue
Block a user