Revert the extension of with-decorator
to setv
This is no longer necessary now that `defn` always produces a `FunctionDef`. To compensate, I've made small edits to two contrib modules and reverted a small test change.
This commit is contained in:
parent
7c203abe4d
commit
18acfe6495
1
NEWS
1
NEWS
@ -8,7 +8,6 @@ Changes from 0.12.1
|
|||||||
and `str` objects under Python 2
|
and `str` objects under Python 2
|
||||||
* Commas and underscores are allowed in numeric literals
|
* Commas and underscores are allowed in numeric literals
|
||||||
* `setv` always returns None
|
* `setv` always returns None
|
||||||
* with-decorator: Allow a `setv` form as the form to be decorated
|
|
||||||
* xor: If exactly one argument is true, return it
|
* xor: If exactly one argument is true, return it
|
||||||
* hy.core.reserved is now hy.extra.reserved
|
* hy.core.reserved is now hy.extra.reserved
|
||||||
|
|
||||||
|
@ -1686,10 +1686,6 @@ will be 4 (``1+1 + 1+1``).
|
|||||||
=> (addition 1 1)
|
=> (addition 1 1)
|
||||||
8
|
8
|
||||||
|
|
||||||
In addition to ``defn`` forms, ``with-decorator`` can be used with ``defclass``
|
|
||||||
and ``setv`` forms. In the latter case, the generated Python code uses an
|
|
||||||
ordinary function call rather than decorator syntax.
|
|
||||||
|
|
||||||
#@
|
#@
|
||||||
~~
|
~~
|
||||||
|
|
||||||
|
@ -1417,28 +1417,12 @@ class HyASTCompiler(object):
|
|||||||
def compile_decorate_expression(self, expr):
|
def compile_decorate_expression(self, expr):
|
||||||
expr.pop(0) # with-decorator
|
expr.pop(0) # with-decorator
|
||||||
fn = self.compile(expr.pop(-1))
|
fn = self.compile(expr.pop(-1))
|
||||||
if fn.stmts and isinstance(fn.stmts[-1], (ast.FunctionDef,
|
if not fn.stmts or not isinstance(fn.stmts[-1], (ast.FunctionDef,
|
||||||
ast.ClassDef)):
|
ast.ClassDef)):
|
||||||
decorators, ret, _ = self._compile_collect(expr)
|
|
||||||
fn.stmts[-1].decorator_list = (decorators +
|
|
||||||
fn.stmts[-1].decorator_list)
|
|
||||||
return ret + fn
|
|
||||||
elif fn.stmts and isinstance(fn.stmts[-1], ast.Assign):
|
|
||||||
# E.g., (with-decorator foo (setv f (fn [] 5)))
|
|
||||||
# We can't use Python's decorator syntax, but we can get the
|
|
||||||
# same effect.
|
|
||||||
decorators, ret, _ = self._compile_collect(expr)
|
|
||||||
for d in decorators:
|
|
||||||
fn.stmts[-1].value = ast.Call(func=d,
|
|
||||||
args=[fn.stmts[-1].value],
|
|
||||||
keywords=[],
|
|
||||||
starargs=None,
|
|
||||||
kwargs=None,
|
|
||||||
lineno=expr.start_line,
|
|
||||||
col_offset=expr.start_column)
|
|
||||||
return fn
|
|
||||||
else:
|
|
||||||
raise HyTypeError(expr, "Decorated a non-function")
|
raise HyTypeError(expr, "Decorated a non-function")
|
||||||
|
decorators, ret, _ = self._compile_collect(expr)
|
||||||
|
fn.stmts[-1].decorator_list = decorators + fn.stmts[-1].decorator_list
|
||||||
|
return ret + fn
|
||||||
|
|
||||||
@builds("with*")
|
@builds("with*")
|
||||||
@checkargs(min=2)
|
@checkargs(min=2)
|
||||||
|
@ -58,7 +58,7 @@
|
|||||||
(import [hy.contrib.loop [--trampoline--]])
|
(import [hy.contrib.loop [--trampoline--]])
|
||||||
(with-decorator
|
(with-decorator
|
||||||
--trampoline--
|
--trampoline--
|
||||||
(def ~g!recur-fn (fn [~@signature] ~@new-body)))
|
(defn ~g!recur-fn [~@signature] ~@new-body))
|
||||||
~g!recur-fn))
|
~g!recur-fn))
|
||||||
|
|
||||||
|
|
||||||
|
@ -110,4 +110,4 @@
|
|||||||
ret)
|
ret)
|
||||||
(do
|
(do
|
||||||
(setv [lambda-list body] (head-tail bodies))
|
(setv [lambda-list body] (head-tail bodies))
|
||||||
`(setv ~name (fn ~lambda-list ~@body)))))
|
`(setv ~name (fn* ~lambda-list ~@body)))))
|
||||||
|
@ -12,8 +12,7 @@ def test_basics():
|
|||||||
|
|
||||||
def test_stringer():
|
def test_stringer():
|
||||||
"Make sure the basics of the importer work"
|
"Make sure the basics of the importer work"
|
||||||
_ast = import_buffer_to_ast(
|
_ast = import_buffer_to_ast("(defn square [x] (* x x))", '')
|
||||||
"(defn square [x] (print \"hello\") (* x x))", '')
|
|
||||||
assert type(_ast.body[0]) == ast.FunctionDef
|
assert type(_ast.body[0]) == ast.FunctionDef
|
||||||
|
|
||||||
|
|
||||||
|
@ -28,14 +28,6 @@
|
|||||||
(assert (= cls.attr2 456)))
|
(assert (= cls.attr2 456)))
|
||||||
|
|
||||||
|
|
||||||
(defn test-decorated-setv []
|
|
||||||
(defn d [func]
|
|
||||||
(fn [] (+ (func) "z")))
|
|
||||||
(with-decorator d
|
|
||||||
(setv f (fn [] "hello")))
|
|
||||||
(assert (= (f) "helloz")))
|
|
||||||
|
|
||||||
|
|
||||||
(defn test-decorator-clobbing []
|
(defn test-decorator-clobbing []
|
||||||
"NATIVE: Tests whether nested decorators work"
|
"NATIVE: Tests whether nested decorators work"
|
||||||
(do
|
(do
|
||||||
|
Loading…
Reference in New Issue
Block a user