Fixing (with)'s syntax to be more hyish.
This commit is contained in:
parent
4debdf63ea
commit
4db9446197
3
NEWS
3
NEWS
@ -11,6 +11,9 @@ Changes from Hy 0.9.4
|
|||||||
(catch [Exception] BODY)
|
(catch [Exception] BODY)
|
||||||
(catch [e Exception] BODY)
|
(catch [e Exception] BODY)
|
||||||
(catch [e [Exception1 Exception2]] BODY)
|
(catch [e [Exception1 Exception2]] BODY)
|
||||||
|
* With's syntax was fixed to match the rest of the code. It's now: (PT)
|
||||||
|
(with [name context-managed-fn] BODY)
|
||||||
|
(with [context-managed-fn] BODY)
|
||||||
|
|
||||||
[ Language Changes ]
|
[ Language Changes ]
|
||||||
|
|
||||||
|
@ -456,12 +456,21 @@ class HyASTCompiler(object):
|
|||||||
fn.decorator_list = [self.compile(x) for x in expr]
|
fn.decorator_list = [self.compile(x) for x in expr]
|
||||||
return fn
|
return fn
|
||||||
|
|
||||||
@builds("with_as")
|
@builds("with")
|
||||||
@checkargs(min=2)
|
@checkargs(min=2)
|
||||||
def compile_with_as_expression(self, expr):
|
def compile_with_expression(self, expr):
|
||||||
expr.pop(0) # with-as
|
expr.pop(0) # with
|
||||||
ctx = self.compile(expr.pop(0))
|
|
||||||
thing = self._storeize(self.compile(expr.pop(0)))
|
args = expr.pop(0)
|
||||||
|
if len(args) > 2 or len(args) < 1:
|
||||||
|
raise TypeError("with needs [arg (expr)] or [(expr)]")
|
||||||
|
|
||||||
|
args.reverse()
|
||||||
|
ctx = self.compile(args.pop(0))
|
||||||
|
|
||||||
|
thing = None
|
||||||
|
if args != []:
|
||||||
|
thing = self._storeize(self.compile(args.pop(0)))
|
||||||
|
|
||||||
ret = ast.With(context_expr=ctx,
|
ret = ast.With(context_expr=ctx,
|
||||||
lineno=expr.start_line,
|
lineno=expr.start_line,
|
||||||
|
@ -252,6 +252,13 @@ def test_ast_bad_assoc():
|
|||||||
cant_compile("(assoc 1 2 3 4)")
|
cant_compile("(assoc 1 2 3 4)")
|
||||||
|
|
||||||
|
|
||||||
|
def test_ast_bad_with():
|
||||||
|
"Make sure AST can't compile invalid with"
|
||||||
|
cant_compile("(with)")
|
||||||
|
cant_compile("(with [])")
|
||||||
|
cant_compile("(with [] (pass))")
|
||||||
|
|
||||||
|
|
||||||
def test_ast_valid_while():
|
def test_ast_valid_while():
|
||||||
"Make sure AST can't compile invalid while"
|
"Make sure AST can't compile invalid while"
|
||||||
hy_compile(tokenize("(while foo bar)"))
|
hy_compile(tokenize("(while foo bar)"))
|
||||||
|
@ -293,8 +293,8 @@
|
|||||||
|
|
||||||
(defn test-context []
|
(defn test-context []
|
||||||
"NATIVE: test with"
|
"NATIVE: test with"
|
||||||
(with-as (open "README.md" "r") fd
|
(with [fd (open "README.md" "r")] (pass))
|
||||||
(pass)))
|
(with [(open "README.md" "r")] (pass)))
|
||||||
|
|
||||||
|
|
||||||
(defn test-for-doodle []
|
(defn test-for-doodle []
|
||||||
|
Loading…
Reference in New Issue
Block a user