Skip to content

Commit

Permalink
[lang] fix foreign gensym for clojure.core//
Browse files Browse the repository at this point in the history
  • Loading branch information
xificurC committed Sep 5, 2024
1 parent cd93b3e commit b554893
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 7 deletions.
2 changes: 1 addition & 1 deletion src/hyperfiddle/electric/impl/lang3.clj
Original file line number Diff line number Diff line change
Expand Up @@ -984,7 +984,7 @@
(emit u))))

(defn wrap-foreign-for-electric
([ts] (wrap-foreign-for-electric ts gensym))
([ts] (wrap-foreign-for-electric ts #(gensym (str/replace % #"/" "_"))))
([ts gen]
(letfn [(->node [u] (ts/->node ts (ts/find1 ts ::u u)))
(e->u [e] (::u (ts/->node ts e)))
Expand Down
24 changes: 18 additions & 6 deletions test/hyperfiddle/electric/impl/compiler_test.cljc
Original file line number Diff line number Diff line change
Expand Up @@ -603,18 +603,24 @@
(-> (lang/analyze-foreign (lang/-expand-all-foreign o fenv) fenv)
(lang/emit-foreign)))

(defn foreign-electrified [gen o]
(-> (lang/analyze-foreign (lang/-expand-all-foreign o fenv) fenv)
(lang/wrap-foreign-for-electric gen)))
(defn foreign-electrified
([o] (-> (lang/analyze-foreign (lang/-expand-all-foreign o fenv) fenv)
(lang/wrap-foreign-for-electric)))
([gen o]
(-> (lang/analyze-foreign (lang/-expand-all-foreign o fenv) fenv)
(lang/wrap-foreign-for-electric gen))))

(def fenv-js (merge (cljs-ana/->cljs-env) fenv {::lang/peers {:client :cljs} ::lang/curent :client}))
(defn foreign-js [o]
(-> (lang/analyze-foreign (lang/-expand-all-foreign o fenv-js) fenv-js)
(lang/emit-foreign)))

(defn foreign-electrified-js [gen o]
(-> (lang/analyze-foreign (lang/-expand-all-foreign o fenv-js) fenv-js)
(lang/wrap-foreign-for-electric gen)))
(defn foreign-electrified-js
([o] (-> (lang/analyze-foreign (lang/-expand-all-foreign o fenv-js) fenv-js)
(lang/wrap-foreign-for-electric)))
([gen o]
(-> (lang/analyze-foreign (lang/-expand-all-foreign o fenv-js) fenv-js)
(lang/wrap-foreign-for-electric gen))))

(tests
"foreign"
Expand Down Expand Up @@ -719,6 +725,9 @@
(foreign-electrified (consuming '[a]) '(foo bar baz))
:= '((fn* [a] (a a a)) hyperfiddle.electric.impl.runtime3/cannot-resolve)

;; gensym of name of clojure.core// creates an invalid symbol
(-> (foreign-electrified '(fn [x] (/ x 2))) first second first name first) := \_

(foreign-electrified nil '(fn [x] [x x]))
:= nil ; nothing to wrap, signaled as `nil`

Expand Down Expand Up @@ -775,6 +784,9 @@
(foreign-electrified-js (consuming '[a]) '(set! consuming e1))
:= '((fn* [e1] (set! consuming e1)) e1)

;; gensym of name of clojure.core// creates an invalid symbol
(-> (foreign-electrified-js '(fn [x] (/ x 2))) first second first name first) := \_

(foreign-electrified-js nil '(fn [x] [x x]))
:= nil ; nothing to wrap, signaled as `nil`

Expand Down

0 comments on commit b554893

Please sign in to comment.