From 61829b126b59452348f2a996ceaf72f50742614a Mon Sep 17 00:00:00 2001 From: David Nolen Date: Thu, 5 Jun 2025 15:29:20 -0400 Subject: [PATCH 1/2] * allow numbers to be optimized wtih calls to str * fixes invoke to cljs.core/str in protocol fns * add another trivial dce test w/ a protocol fn --- src/main/clojure/cljs/core.cljc | 4 ++-- src/test/cljs_build/trivial/core2.cljs | 3 +++ src/test/clojure/cljs/build_api_tests.clj | 13 +++++++++++++ 3 files changed, 18 insertions(+), 2 deletions(-) create mode 100644 src/test/cljs_build/trivial/core2.cljs diff --git a/src/main/clojure/cljs/core.cljc b/src/main/clojure/cljs/core.cljc index 72f4654270..5bfec2d8e6 100644 --- a/src/main/clojure/cljs/core.cljc +++ b/src/main/clojure/cljs/core.cljc @@ -852,12 +852,12 @@ (core/defmacro str ([] "") ([x] - (if (typed-expr? &env x '#{string}) + (if (typed-expr? &env x '#{string number}) x (string-expr (core/list 'js* "cljs.core.str.cljs$core$IFn$_invoke$arity$1(~{})" x)))) ([x & ys] (core/let [interpolate (core/fn [x] - (if (typed-expr? &env x '#{string clj-nil}) + (if (typed-expr? &env x '#{string number clj-nil}) "~{}" "cljs.core.str.cljs$core$IFn$_invoke$arity$1(~{})")) strs (core/->> (core/list* x ys) diff --git a/src/test/cljs_build/trivial/core2.cljs b/src/test/cljs_build/trivial/core2.cljs new file mode 100644 index 0000000000..5e2f4fb0d4 --- /dev/null +++ b/src/test/cljs_build/trivial/core2.cljs @@ -0,0 +1,3 @@ +(ns trivial.core2) + +(. js/console (-lookup 1 2)) diff --git a/src/test/clojure/cljs/build_api_tests.clj b/src/test/clojure/cljs/build_api_tests.clj index e788c1ace0..f65c1580f0 100644 --- a/src/test/clojure/cljs/build_api_tests.clj +++ b/src/test/clojure/cljs/build_api_tests.clj @@ -720,6 +720,19 @@ (build/build (build/inputs (io/file inputs "trivial/core.cljs")) opts cenv) (is (< (.length out-file) 10000)))) +(deftest trivial-output-size-protocol + (let [out (.getPath (io/file (test/tmp-dir) "trivial-output-protocol-test-out")) + out-file (io/file out "main.js") + {:keys [inputs opts]} {:inputs (str (io/file "src" "test" "cljs_build")) + :opts {:main 'trivial.core2 + :output-dir out + :output-to (.getPath out-file) + :optimizations :advanced}} + cenv (env/default-compiler-env)] + (test/delete-out-files out) + (build/build (build/inputs (io/file inputs "trivial/core2.cljs")) opts cenv) + (is (< (.length out-file) 10000)))) + (deftest cljs-3255-nil-inputs-build (let [out (.getPath (io/file (test/tmp-dir) "3255-test-out")) out-file (io/file out "main.js") From 3aa7dcedb2be3c158f48a17c363e33c19ffb8d92 Mon Sep 17 00:00:00 2001 From: David Nolen Date: Thu, 5 Jun 2025 15:45:14 -0400 Subject: [PATCH 2/2] * revert str change * just avoid call to str altogether --- src/main/clojure/cljs/core.cljc | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/clojure/cljs/core.cljc b/src/main/clojure/cljs/core.cljc index 5bfec2d8e6..8418c5eca3 100644 --- a/src/main/clojure/cljs/core.cljc +++ b/src/main/clojure/cljs/core.cljc @@ -852,12 +852,12 @@ (core/defmacro str ([] "") ([x] - (if (typed-expr? &env x '#{string number}) + (if (typed-expr? &env x '#{string}) x (string-expr (core/list 'js* "cljs.core.str.cljs$core$IFn$_invoke$arity$1(~{})" x)))) ([x & ys] (core/let [interpolate (core/fn [x] - (if (typed-expr? &env x '#{string number clj-nil}) + (if (typed-expr? &env x '#{string clj-nil}) "~{}" "cljs.core.str.cljs$core$IFn$_invoke$arity$1(~{})")) strs (core/->> (core/list* x ys) @@ -3287,9 +3287,9 @@ argseq#)))) (if (:macro meta) `(throw (js/Error. - (str "Invalid arity: " (- (alength (js-arguments)) 2)))) + (.join (array "Invalid arity: " (- (alength (js-arguments)) 2)) ""))) `(throw (js/Error. - (str "Invalid arity: " (alength (js-arguments)))))))))) + (.join (array "Invalid arity: " (alength (js-arguments))) "")))))))) ~@(map #(fn-method name %) fdecl) ;; optimization properties (set! (. ~name ~'-cljs$lang$maxFixedArity) ~maxfa)