Merge pull request #1773 from Kodiologist/gensymplify
Simplify gensym format
This commit is contained in:
commit
819e2121dd
3
NEWS.rst
3
NEWS.rst
@ -15,6 +15,9 @@ New Features
|
|||||||
* Added a special form `setx` to create Python 3.8 assignment expressions.
|
* Added a special form `setx` to create Python 3.8 assignment expressions.
|
||||||
* New list? function.
|
* New list? function.
|
||||||
* New tuple? function.
|
* New tuple? function.
|
||||||
|
* Gensyms now have a simpler format that's more concise when
|
||||||
|
mangled (e.g., `_hyx_XsemicolonXfooXvertical_lineX1235` is now
|
||||||
|
`_hyx_fooXUffffX1`).
|
||||||
|
|
||||||
Bug Fixes
|
Bug Fixes
|
||||||
------------------------------
|
------------------------------
|
||||||
|
@ -968,10 +968,10 @@ written without accidental variable name clashes.
|
|||||||
.. code-block:: clj
|
.. code-block:: clj
|
||||||
|
|
||||||
=> (gensym)
|
=> (gensym)
|
||||||
u':G_1235'
|
HySymbol('_G\uffff1')
|
||||||
|
|
||||||
=> (gensym "x")
|
=> (gensym "x")
|
||||||
u':x_1236'
|
HySymbol('_x\uffff2')
|
||||||
|
|
||||||
.. seealso::
|
.. seealso::
|
||||||
|
|
||||||
|
@ -214,7 +214,7 @@ Return series of accumulated sums (or other binary function results)."
|
|||||||
(instance? HySymbol s))
|
(instance? HySymbol s))
|
||||||
|
|
||||||
(import [threading [Lock]])
|
(import [threading [Lock]])
|
||||||
(setv _gensym_counter 1234)
|
(setv _gensym_counter 0)
|
||||||
(setv _gensym_lock (Lock))
|
(setv _gensym_lock (Lock))
|
||||||
|
|
||||||
(defn gensym [&optional [g "G"]]
|
(defn gensym [&optional [g "G"]]
|
||||||
@ -224,7 +224,7 @@ Return series of accumulated sums (or other binary function results)."
|
|||||||
(global _gensym_lock)
|
(global _gensym_lock)
|
||||||
(.acquire _gensym_lock)
|
(.acquire _gensym_lock)
|
||||||
(try (do (setv _gensym_counter (inc _gensym_counter))
|
(try (do (setv _gensym_counter (inc _gensym_counter))
|
||||||
(setv new_symbol (HySymbol (.format "_;{0}|{1}" g _gensym_counter))))
|
(setv new_symbol (HySymbol (.format "_{}\uffff{}" g _gensym_counter))))
|
||||||
(finally (.release _gensym_lock)))
|
(finally (.release _gensym_lock)))
|
||||||
new_symbol)
|
new_symbol)
|
||||||
|
|
||||||
|
@ -282,12 +282,12 @@ result['y in globals'] = 'y' in globals()")
|
|||||||
(import [hy.models [HySymbol]])
|
(import [hy.models [HySymbol]])
|
||||||
(setv s1 (gensym))
|
(setv s1 (gensym))
|
||||||
(assert (isinstance s1 HySymbol))
|
(assert (isinstance s1 HySymbol))
|
||||||
(assert (= 0 (.find s1 "_;G|")))
|
(assert (= 0 (.find s1 "_G\uffff")))
|
||||||
(setv s2 (gensym "xx"))
|
(setv s2 (gensym "xx"))
|
||||||
(setv s3 (gensym "xx"))
|
(setv s3 (gensym "xx"))
|
||||||
(assert (= 0 (.find s2 "_;xx|")))
|
(assert (= 0 (.find s2 "_xx\uffff")))
|
||||||
(assert (not (= s2 s3)))
|
(assert (not (= s2 s3)))
|
||||||
(assert (not (= (str s2) (str s3)))))
|
(assert (not (= (string s2) (string s3)))))
|
||||||
|
|
||||||
(defn test-identity []
|
(defn test-identity []
|
||||||
"NATIVE: testing the identity function"
|
"NATIVE: testing the identity function"
|
||||||
|
@ -166,9 +166,9 @@
|
|||||||
(setv _ast2 (hy-compile (hy-parse macro1) __name__))
|
(setv _ast2 (hy-compile (hy-parse macro1) __name__))
|
||||||
(setv s1 (to_source _ast1))
|
(setv s1 (to_source _ast1))
|
||||||
(setv s2 (to_source _ast2))
|
(setv s2 (to_source _ast2))
|
||||||
;; and make sure there is something new that starts with _;G|
|
;; and make sure there is something new that starts with _G\uffff
|
||||||
(assert (in (mangle "_;G|") s1))
|
(assert (in (mangle "_G\uffff") s1))
|
||||||
(assert (in (mangle "_;G|") s2))
|
(assert (in (mangle "_G\uffff") s2))
|
||||||
;; but make sure the two don't match each other
|
;; but make sure the two don't match each other
|
||||||
(assert (not (= s1 s2))))
|
(assert (not (= s1 s2))))
|
||||||
|
|
||||||
@ -193,8 +193,8 @@
|
|||||||
(setv _ast2 (hy-compile (hy-parse macro1) __name__))
|
(setv _ast2 (hy-compile (hy-parse macro1) __name__))
|
||||||
(setv s1 (to_source _ast1))
|
(setv s1 (to_source _ast1))
|
||||||
(setv s2 (to_source _ast2))
|
(setv s2 (to_source _ast2))
|
||||||
(assert (in (mangle "_;a|") s1))
|
(assert (in (mangle "_a\uffff") s1))
|
||||||
(assert (in (mangle "_;a|") s2))
|
(assert (in (mangle "_a\uffff") s2))
|
||||||
(assert (not (= s1 s2))))
|
(assert (not (= s1 s2))))
|
||||||
|
|
||||||
(defn test-defmacro/g! []
|
(defn test-defmacro/g! []
|
||||||
@ -217,8 +217,8 @@
|
|||||||
(setv _ast2 (hy-compile (hy-parse macro1) __name__))
|
(setv _ast2 (hy-compile (hy-parse macro1) __name__))
|
||||||
(setv s1 (to_source _ast1))
|
(setv s1 (to_source _ast1))
|
||||||
(setv s2 (to_source _ast2))
|
(setv s2 (to_source _ast2))
|
||||||
(assert (in (mangle "_;res|") s1))
|
(assert (in (mangle "_res\uffff") s1))
|
||||||
(assert (in (mangle "_;res|") s2))
|
(assert (in (mangle "_res\uffff") s2))
|
||||||
(assert (not (= s1 s2)))
|
(assert (not (= s1 s2)))
|
||||||
|
|
||||||
;; defmacro/g! didn't like numbers initially because they
|
;; defmacro/g! didn't like numbers initially because they
|
||||||
@ -247,8 +247,8 @@
|
|||||||
(setv _ast2 (hy-compile (hy-parse macro1) __name__))
|
(setv _ast2 (hy-compile (hy-parse macro1) __name__))
|
||||||
(setv s1 (to_source _ast1))
|
(setv s1 (to_source _ast1))
|
||||||
(setv s2 (to_source _ast2))
|
(setv s2 (to_source _ast2))
|
||||||
(assert (in (mangle "_;res|") s1))
|
(assert (in (mangle "_res\uffff") s1))
|
||||||
(assert (in (mangle "_;res|") s2))
|
(assert (in (mangle "_res\uffff") s2))
|
||||||
(assert (not (= s1 s2)))
|
(assert (not (= s1 s2)))
|
||||||
|
|
||||||
;; defmacro/g! didn't like numbers initially because they
|
;; defmacro/g! didn't like numbers initially because they
|
||||||
|
Loading…
Reference in New Issue
Block a user