From 0246f7e76f654c822cfa31d0a588ccd12265bdc9 Mon Sep 17 00:00:00 2001 From: Antonin Hildebrand Date: Sat, 5 Mar 2022 20:41:34 +0100 Subject: [PATCH] bump clojurescript and fix goog.object require regression https://clojurescript.org/news/2021-11-04-release#_google_closure_library_goog_module_global_access --- deps.edn | 2 +- project.clj | 2 +- src/lib/oops/codegen.clj | 6 +++--- src/lib/oops/core.cljs | 10 ++++++++++ test/transcripts/expected/gcall_static_goog.js | 6 +++--- test/transcripts/expected/oapply_static_goog.js | 7 ++++--- test/transcripts/expected/ocall_static_goog.js | 12 ++++++------ test/transcripts/expected/oget_static_goog.js | 4 ++-- test/transcripts/expected/oset_static_goog.js | 10 +++++----- 9 files changed, 35 insertions(+), 24 deletions(-) diff --git a/deps.edn b/deps.edn index fcc806d..7c19838 100644 --- a/deps.edn +++ b/deps.edn @@ -1,4 +1,4 @@ {:paths ["src/lib"] :deps {org.clojure/clojure {:mvn/version "1.10.3"} - org.clojure/clojurescript {:mvn/version "1.10.844"} + org.clojure/clojurescript {:mvn/version "1.11.4"} binaryage/env-config {:mvn/version "0.2.2"}}} diff --git a/project.clj b/project.clj index 90d2074..d65c369 100644 --- a/project.clj +++ b/project.clj @@ -1,4 +1,4 @@ -(def clojurescript-version (or (System/getenv "CANARY_CLOJURESCRIPT_VERSION") "1.10.844")) +(def clojurescript-version (or (System/getenv "CANARY_CLOJURESCRIPT_VERSION") "1.11.4")) (def required-deps [['binaryage/env-config "0.2.2"]]) (def provided-deps diff --git a/src/lib/oops/codegen.clj b/src/lib/oops/codegen.clj index 6c81b79..db15031 100644 --- a/src/lib/oops/codegen.clj +++ b/src/lib/oops/codegen.clj @@ -65,12 +65,12 @@ (defn gen-key-get [obj key] (case (config/key-get-mode) :core `(~'js* "(~{}[~{}])" ~obj ~key) ; using aget could raise a warning, see CLJS-2148 - :goog `(goog.object/get ~obj ~key))) + :goog `(oops.core/gobj-get ~obj ~key))) (defn gen-key-set [obj key val] (case (config/key-set-mode) :core `(~'js* "(~{}[~{}] = ~{})" ~obj ~key ~val) ; using aset could raise a warning, see CLJS-2148 - :goog `(goog.object/set ~obj ~key ~val))) + :goog `(oops.core/gobj-set ~obj ~key ~val))) (defn gen-dynamic-object-access-validation-wrapper [obj-sym mode key push? check-key-read? check-key-write? body] (debug-assert (symbol? obj-sym)) @@ -297,7 +297,7 @@ (debug-assert (symbol? obj-sym)) (debug-assert (symbol? mode-sym)) `(if (and (= ~mode-sym ~dot-access) - (not (goog.object/containsKey ~obj-sym ~key))) + (not (oops.core/gobj-containsKey ~obj-sym ~key))) ~(gen-report-if-needed :missing-object-key `{:obj (oops.state/get-target-object) :key ~key :path (oops.state/get-key-path-str)}) diff --git a/src/lib/oops/core.cljs b/src/lib/oops/core.cljs index f127248..f47ba82 100644 --- a/src/lib/oops/core.cljs +++ b/src/lib/oops/core.cljs @@ -35,6 +35,16 @@ ; -- runtime support for macros --------------------------------------------------------------------------------------------- +; work around https://clojurescript.org/news/2021-11-04-release#_google_closure_library_goog_module_global_access +(defn gobj-get [obj key] + (goog.object/get obj key)) + +(defn gobj-set [obj key val] + (goog.object/set obj key val)) + +(defn gobj-containsKey [obj key] + (goog.object/containsKey obj key)) + (defn ^boolean validate-object-access-dynamically [obj mode key push? check-key-read? check-key-write?] (runtime/validate-object-access-dynamically obj mode key push? check-key-read? check-key-write?)) diff --git a/test/transcripts/expected/gcall_static_goog.js b/test/transcripts/expected/gcall_static_goog.js index 3895b8e..67df290 100644 --- a/test/transcripts/expected/gcall_static_goog.js +++ b/test/transcripts/expected/gcall_static_goog.js @@ -18,7 +18,7 @@ // (gcall "f" "p1" "p2")) // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -var call_info_1 = [goog.global, goog.object$get(goog$global, "f")], +var call_info_1 = [goog.global, module.contents$goog.object_get.call(null, goog.global, "f")], fn_1 = call_info_1[1]; null != fn_1 && fn_1.call(call_info_1[0], "p1", "p2"); @@ -27,7 +27,7 @@ null != fn_1 && fn_1.call(call_info_1[0], "p1", "p2"); // (gcall "a.f" "p1" "p2")) // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -var call_info_2, target_obj_1 = goog.object.get(goog.global, "a"); -call_info_2 = [target_obj_1, goog.object$get(target_obj_1, "f")]; +var call_info_2, target_obj_1 = module$contents$goog.object_get.call(null, goog.global, "a"); +call_info_2 = [target_obj_1, module$contents$goog$object_get.call(null, target_obj_1, "f")]; var fn_2 = call_info_2[1]; null != fn_2 && fn_2.call(call_info_2[0], "p1", "p2"); diff --git a/test/transcripts/expected/oapply_static_goog.js b/test/transcripts/expected/oapply_static_goog.js index 746522f..2e7fa10 100644 --- a/test/transcripts/expected/oapply_static_goog.js +++ b/test/transcripts/expected/oapply_static_goog.js @@ -23,7 +23,7 @@ var target_obj_1 = { return 42 } }, - call_info_1 = [target_obj_1, goog.object.get(target_obj_1, "f")], + call_info_1 = [target_obj_1, module$contents$goog$object_get.call(null, target_obj_1, "f")], fn_1 = call_info_1[1]; null != fn_1 && fn_1.apply(call_info_1[0], oops.helpers.to_native_array()); @@ -32,13 +32,14 @@ null != fn_1 && fn_1.apply(call_info_1[0], oops.helpers.to_native_array()); // (oapply #js {"a" #js {"f" (fn [] 42)}} "a.f" ["p1" "p2"])) // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -var call_info_2, target_obj_2 = goog.object.get({ +var call_info_2, target_obj_2; +target_obj_2 = module$contents$goog.object_get.call(null, { a: { f: function() { return 42 } } }, "a"); -call_info_2 = [target_obj_2, goog.object.get(target_obj_2, "f")]; +call_info_2 = [target_obj_2, module.contents$goog$object_get.call(null, target_obj_2, "f")]; var fn_2 = call_info_2[1]; null != fn_2 && fn_2.apply(call_info_2[0], oops.helpers.to_native_array()); diff --git a/test/transcripts/expected/ocall_static_goog.js b/test/transcripts/expected/ocall_static_goog.js index f40aad6..616dca6 100644 --- a/test/transcripts/expected/ocall_static_goog.js +++ b/test/transcripts/expected/ocall_static_goog.js @@ -23,7 +23,7 @@ var target_obj_1 = { return 42 } }, - call_info_1 = [target_obj_1, goog.object.get(target_obj_1, "f")], + call_info_1 = [target_obj_1, oops.core.gobj_get(target_obj_1, "f")], fn_1 = call_info_1[1]; null != fn_1 && fn_1.call(call_info_1[0], "p1", "p2"); @@ -32,14 +32,14 @@ null != fn_1 && fn_1.call(call_info_1[0], "p1", "p2"); // (ocall #js {"a" #js {"f" (fn [] 42)}} "a.f" "p1" "p2")) // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -var call_info_2, target_obj_2 = goog.object.get({ +var call_info_2, target_obj_2 = oops.core.gobj_get({ a: { f: function() { return 42 } } }, "a"); -call_info_2 = [target_obj_2, goog.object.get(target_obj_2, "f")]; +call_info_2 = [target_obj_2, oops.core.gobj_get(target_obj_2, "f")]; var fn_2 = call_info_2[1]; null != fn_2 && fn_2.call(call_info_2[0], "p1", "p2"); @@ -51,7 +51,7 @@ null != fn_2 && fn_2.call(call_info_2[0], "p1", "p2"); // (ocall "g" 2 3)))) // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -var target_obj_3, call_info_3, target_obj_4 = goog.object.get({ +var target_obj_3, call_info_3, target_obj_4 = oops.core.gobj_get({ e: { f: function(x13) { return { @@ -62,9 +62,9 @@ var target_obj_3, call_info_3, target_obj_4 = goog.object.get({ } } }, "e"); -call_info_3 = [target_obj_4, goog.object.get(target_obj_4, "f")]; +call_info_3 = [target_obj_4, oops.core.gobj_get(target_obj_4, "f")]; var fn_3 = call_info_3[1]; target_obj_3 = null != fn_3 ? fn_3.call(call_info_3[0], 1) : null; -var call_info_4 = [target_obj_3, goog.object.get(target_obj_3, "g")], +var call_info_4 = [target_obj_3, oops.core.gobj_get(target_obj_3, "g")], fn_4 = call_info_4[1]; null != fn_4 && fn_4.call(call_info_4[0], 2, 3); diff --git a/test/transcripts/expected/oget_static_goog.js b/test/transcripts/expected/oget_static_goog.js index e136b67..04c9bd9 100644 --- a/test/transcripts/expected/oget_static_goog.js +++ b/test/transcripts/expected/oget_static_goog.js @@ -62,7 +62,7 @@ // (.log js/console (oget #js {"key" "val"} "key"))) // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -console.log(goog.object.get({ +console.log(module$contents$goog$object_get.call(null, { key: "val" }, "key")); @@ -71,6 +71,6 @@ console.log(goog.object.get({ // (.log js/console (oget #js {"key" "val"} "xxx"))) // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -console.log(goog.object.get({ +console.log(module$contents$goog$object_get.call(null, { key: "val" }, "xxx")); diff --git a/test/transcripts/expected/oset_static_goog.js b/test/transcripts/expected/oset_static_goog.js index ce5289e..29ea1f7 100644 --- a/test/transcripts/expected/oset_static_goog.js +++ b/test/transcripts/expected/oset_static_goog.js @@ -19,8 +19,8 @@ // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ var target_obj_1 = window, - next_obj_1 = goog.object.get(target_obj_1, "k1"); -(null == next_obj_1 ? oops.core.punch_key_dynamically_BANG_.cljs.core.IFn$_invoke$arity$4$ ? oops.core.punch_key_dynamically_BANG_.cljs.core.IFn$_invoke$arity$4$(target_obj_1, "k1") : oops.core.punch_key_dynamically_BANG_.call(null, target_obj_1, "k1") : next_obj_1).k2 = "val"; + next_obj_1 = module$contents$goog.object_get.call(null, target_obj_1, "k1"); +(null == next_obj_1 ? oops.core.punch_key_dynamically_BANG_.cljs.core$IFn$_invoke$arity$4$ ? oops.core.punch_key_dynamically_BANG_.cljs.core.IFn$_invoke$arity$4$(target_obj_1, "k1") : oops.core.punch_key_dynamically_BANG_.call(null, target_obj_1, "k1") : next_obj_1).k2 = "val"; // SNIPPET #2: // (testing "oset! expansion with macro-generated params should be static" @@ -28,12 +28,12 @@ var target_obj_1 = window, // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ var target_obj_2 = window, - next_obj_2 = goog.object.get(target_obj_2, "k1"); -(null == next_obj_2 ? oops.core.punch_key_dynamically_BANG_.cljs.core.IFn$_invoke$arity$4$ ? oops.core.punch_key_dynamically_BANG_.cljs.core.IFn$_invoke$arity$4$(target_obj_2, "k1") : oops.core.punch_key_dynamically_BANG_.call(null, target_obj_2, "k1") : next_obj_2).k2 = "val"; + next_obj_2 = module$contents$goog.object_get.call(null, target_obj_2, "k1"); +(null == next_obj_2 ? oops.core.punch_key_dynamically_BANG_.cljs.core$IFn$_invoke$arity$4$ ? oops.core.punch_key_dynamically_BANG_.cljs.core.IFn$_invoke$arity$4$(target_obj_2, "k1") : oops.core.punch_key_dynamically_BANG_.call(null, target_obj_2, "k1") : next_obj_2).k2 = "val"; // SNIPPET #3: // (testing "static oset! expansion without punching" // (oset! js/window "k1.k2" "val")) // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -goog.object.get(window, "k1").k2 = "val"; +module$contents$goog$object_get.call(null, window, "k1").k2 = "val";