Fix early returns. Close #83
This commit is contained in:
parent
5ff40c5e30
commit
5336b2f71a
@ -762,12 +762,27 @@ class HyASTCompiler(object):
|
||||
expression.pop(0) # fn
|
||||
|
||||
ret_status = self.returnable
|
||||
self.returnable = True
|
||||
|
||||
self.anon_fn_count += 1
|
||||
name = "_hy_anon_fn_%d" % (self.anon_fn_count)
|
||||
sig = expression.pop(0)
|
||||
|
||||
body = []
|
||||
if expression != []:
|
||||
self.returnable = True
|
||||
tailop = self.compile(expression.pop(-1))
|
||||
self.returnable = False
|
||||
for el in expression:
|
||||
body.append(self.compile(el))
|
||||
body.append(tailop)
|
||||
|
||||
if body == []:
|
||||
body = [ast.Pass(lineno=expression.start_line,
|
||||
col_offset=expression.start_column)]
|
||||
|
||||
self.returnable = True
|
||||
body = self._code_branch(body)
|
||||
|
||||
ret = ast.FunctionDef(
|
||||
name=name,
|
||||
lineno=expression.start_line,
|
||||
@ -785,8 +800,7 @@ class HyASTCompiler(object):
|
||||
kwonlyargs=[],
|
||||
kw_defaults=[],
|
||||
defaults=[]),
|
||||
body=self._code_branch([
|
||||
self.compile(x) for x in expression]),
|
||||
body=body,
|
||||
decorator_list=[])
|
||||
|
||||
self.returnable = ret_status
|
||||
|
@ -427,6 +427,7 @@
|
||||
(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")]
|
||||
@ -436,6 +437,17 @@
|
||||
(assert (= or-some-true "hello"))
|
||||
(assert (= or-none-true False))))
|
||||
|
||||
|
||||
(defn test-if-return-branching []
|
||||
"NATIVE: test the if return branching"
|
||||
; thanks, algernon
|
||||
(assert (= 1 (let [[x 1]
|
||||
[y 2]]
|
||||
(if true
|
||||
2)
|
||||
1))))
|
||||
|
||||
|
||||
; FEATURE: native hy-eval
|
||||
;
|
||||
; - related to bug #64
|
||||
|
Loading…
x
Reference in New Issue
Block a user