From b554893875e9f63d3e33bc9eea1852afa18215ad Mon Sep 17 00:00:00 2001 From: xificurC Date: Thu, 5 Sep 2024 16:42:20 +0200 Subject: [PATCH] [lang] fix foreign gensym for clojure.core// --- src/hyperfiddle/electric/impl/lang3.clj | 2 +- .../electric/impl/compiler_test.cljc | 24 ++++++++++++++----- 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/src/hyperfiddle/electric/impl/lang3.clj b/src/hyperfiddle/electric/impl/lang3.clj index e0c6eeeb8..fe1a1fa74 100644 --- a/src/hyperfiddle/electric/impl/lang3.clj +++ b/src/hyperfiddle/electric/impl/lang3.clj @@ -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))) diff --git a/test/hyperfiddle/electric/impl/compiler_test.cljc b/test/hyperfiddle/electric/impl/compiler_test.cljc index 9e33b78cf..cc20cdcb6 100644 --- a/test/hyperfiddle/electric/impl/compiler_test.cljc +++ b/test/hyperfiddle/electric/impl/compiler_test.cljc @@ -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" @@ -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` @@ -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`