defmacro/g! and HyObject#startswith
Currently, defmacro/g! doesn't respond well when it comes across a HyObject that doesn't respond to the instance method startswith (e.g. HyInteger, HyFloat, etc.). This updates defmacro/g! to be a little safer when searching for the gensyms it needs to create.
This commit is contained in:
parent
b5a058a3bc
commit
15ad6cb998
@ -169,7 +169,7 @@
|
||||
~@body))
|
||||
|
||||
(defmacro defmacro/g! [name args &rest body]
|
||||
(let [[syms (list (distinct (filter (fn [x] (.startswith x "g!")) (flatten body))))]]
|
||||
(let [[syms (list (distinct (filter (fn [x] (and (hasattr x "startswith") (.startswith x "g!"))) (flatten body))))]]
|
||||
`(defmacro ~name [~@args]
|
||||
(let ~(HyList (map (fn [x] `[~x (gensym (slice '~x 2))]) syms))
|
||||
~@body))))
|
||||
|
@ -188,7 +188,12 @@
|
||||
(setv s2 (to_source _ast2))
|
||||
(assert (in ":res_" s1))
|
||||
(assert (in ":res_" s2))
|
||||
(assert (not (= s1 s2))))
|
||||
(assert (not (= s1 s2)))
|
||||
|
||||
;; defmacro/g! didn't like numbers initially because they
|
||||
;; don't have a startswith method and blew up during expansion
|
||||
(setv macro2 "(defmacro/g! two-point-zero [] `(+ (float 1) 1.0))")
|
||||
(assert (import_buffer_to_ast macro2 "foo")))
|
||||
|
||||
|
||||
(defn test-if-not []
|
||||
|
Loading…
Reference in New Issue
Block a user