From 0078d04328047de0cc9b7970bc997b2e7caca3a4 Mon Sep 17 00:00:00 2001 From: davidnolen Date: Sat, 22 Nov 2025 16:00:38 -0500 Subject: [PATCH 1/7] add :qualified-method :ast, String/.toUpperCase and String/new etc. work --- src/main/clojure/cljs/analyzer.cljc | 41 ++++++++++++++++++++--------- src/main/clojure/cljs/compiler.cljc | 8 ++++++ 2 files changed, 36 insertions(+), 13 deletions(-) diff --git a/src/main/clojure/cljs/analyzer.cljc b/src/main/clojure/cljs/analyzer.cljc index aa52f6fc9..8e81765b7 100644 --- a/src/main/clojure/cljs/analyzer.cljc +++ b/src/main/clojure/cljs/analyzer.cljc @@ -4120,6 +4120,7 @@ (select-keys lb [:name :local :arg-id :variadic? :init]))) (let [sym-meta (meta sym) sym-ns (namespace sym) + sym-name (name sym) cur-ns (str (-> env :ns :name)) ;; when compiling a macros namespace that requires itself, we need ;; to resolve calls to `my-ns.core/foo` to `my-ns.core$macros/foo` @@ -4130,21 +4131,35 @@ (not (gstring/endsWith sym-ns "$macros")) (= sym-ns (subs cur-ns 0 (- (count cur-ns) 7)))) (symbol (str sym-ns "$macros") (name sym)) - sym)]) - info (if-not (contains? sym-meta ::analyzed) + sym)])] + (if (and sym-ns + (nil? (resolve-ns-alias env sym-ns nil)) + (or (= "new" sym-name) + (string/starts-with? sym-name "."))) + (merge + {:op :qualified-method + :env env + :form sym + :class (symbol sym-ns)} + (if (= "new" sym-name) + {:kind :new + :name (symbol sym-name)} + {:kind :method + :name (symbol (subs sym-name 1))})) + (let [info (if-not (contains? sym-meta ::analyzed) (resolve-existing-var env sym) (resolve-var env sym))] - (assert (:op info) (:op info)) - (desugar-dotted-expr - (if-not (true? (:def-var env)) - (merge - (assoc ret :info info) - (select-keys info [:op :name :ns :tag]) - (when-let [const-expr (:const-expr info)] - {:const-expr const-expr})) - (let [info (resolve-var env sym)] - (merge (assoc ret :op :var :info info) - (select-keys info [:op :name :ns :tag])))))))))) + (assert (:op info) (:op info)) + (desugar-dotted-expr + (if-not (true? (:def-var env)) + (merge + (assoc ret :info info) + (select-keys info [:op :name :ns :tag]) + (when-let [const-expr (:const-expr info)] + {:const-expr const-expr})) + (let [info (resolve-var env sym)] + (merge (assoc ret :op :var :info info) + (select-keys info [:op :name :ns :tag])))))))))))) (defn excluded? #?(:cljs {:tag boolean}) diff --git a/src/main/clojure/cljs/compiler.cljc b/src/main/clojure/cljs/compiler.cljc index 8a17d17d2..a791cc2ba 100644 --- a/src/main/clojure/cljs/compiler.cljc +++ b/src/main/clojure/cljs/compiler.cljc @@ -1301,6 +1301,14 @@ (comma-sep args) "))"))) +(defmethod emit* :qualified-method + [{ctor :class :keys [args env kind name]}] + (if (= :new kind) + (emit-wrap env + (emits "(function (...args) { return Reflect.construct(" ctor ", args) })")) + (emit-wrap env + (emits "(function (x, ...args) { return Reflect.apply(" ctor ".prototype." name ", x, args) })")))) + (defmethod emit* :set! [{:keys [target val env]}] (emit-wrap env (emits "(" target " = " val ")"))) From 2ee79d2afa4ddcfde7ae4033a89fb137b615a423 Mon Sep 17 00:00:00 2001 From: davidnolen Date: Sat, 22 Nov 2025 16:16:06 -0500 Subject: [PATCH 2/7] bump mac-os runner --- .github/workflows/test.yaml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index 4420e9d0b..e43a781aa 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -5,7 +5,7 @@ jobs: # Runtime Tests runtime-test: name: Runtime Tests - runs-on: macos-14 + runs-on: macos-15 steps: - uses: actions/checkout@v2 @@ -62,7 +62,7 @@ jobs: # Lite Tests lite-test: name: Lite Tests - runs-on: macos-14 + runs-on: macos-15 steps: - uses: actions/checkout@v2 @@ -145,7 +145,7 @@ jobs: # Self-host Tests self-host-test: name: Self-host Tests - runs-on: macos-14 + runs-on: macos-15 steps: - uses: actions/checkout@v2 @@ -189,7 +189,7 @@ jobs: # Self-parity Tests self-parity-test: name: Self-parity Tests - runs-on: macos-14 + runs-on: macos-15 steps: - uses: actions/checkout@v2 @@ -233,7 +233,7 @@ jobs: # Compiler Tests compiler-test: name: Compiler Tests - runs-on: macos-14 + runs-on: macos-15 steps: - uses: actions/checkout@v2 @@ -292,7 +292,7 @@ jobs: # CLI Tests cli-test: name: CLI Tests - runs-on: macos-14 + runs-on: macos-15 steps: - uses: actions/checkout@v2 with: From 9b929f718677cde56aa4342d43e508142347bbc6 Mon Sep 17 00:00:00 2001 From: davidnolen Date: Sat, 22 Nov 2025 16:30:13 -0500 Subject: [PATCH 3/7] update action cache --- .github/workflows/test.yaml | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index e43a781aa..4d6efd89a 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -19,7 +19,7 @@ jobs: tools-deps: '1.10.1.763' - name: Cache maven - uses: actions/cache@v4 + uses: actions/cache@v4.2.0 env: cache-name: cache-maven with: @@ -29,7 +29,7 @@ jobs: ${{ runner.os }}-${{ env.cache-name }}- - name: Cache gitlibs - uses: actions/cache@v4 + uses: actions/cache@v4.2.0 env: cache-name: cache-gitlibs with: @@ -39,7 +39,7 @@ jobs: ${{ runner.os }}-${{ env.cache-name }}- # - name: Cache JSC - # uses: actions/cache@v4 + # uses: actions/cache@v4.2.0 # env: # cache-name: cache-jsc # with: @@ -76,7 +76,7 @@ jobs: tools-deps: '1.10.1.763' - name: Cache maven - uses: actions/cache@v4 + uses: actions/cache@v4.2.0 env: cache-name: cache-maven with: @@ -86,7 +86,7 @@ jobs: ${{ runner.os }}-${{ env.cache-name }}- - name: Cache gitlibs - uses: actions/cache@v4 + uses: actions/cache@v4.2.0 env: cache-name: cache-gitlibs with: @@ -96,7 +96,7 @@ jobs: ${{ runner.os }}-${{ env.cache-name }}- # - name: Cache JSC - # uses: actions/cache@v4 + # uses: actions/cache@v4.2.0 # env: # cache-name: cache-jsc # with: @@ -159,7 +159,7 @@ jobs: tools-deps: '1.10.1.763' - name: Cache maven - uses: actions/cache@v4 + uses: actions/cache@v4.2.0 env: cache-name: cache-maven with: @@ -169,7 +169,7 @@ jobs: ${{ runner.os }}-${{ env.cache-name }}- - name: Cache gitlibs - uses: actions/cache@v4 + uses: actions/cache@v4.2.0 env: cache-name: cache-gitlibs with: @@ -203,7 +203,7 @@ jobs: tools-deps: '1.10.1.763' - name: Cache maven - uses: actions/cache@v4 + uses: actions/cache@v4.2.0 env: cache-name: cache-maven with: @@ -213,7 +213,7 @@ jobs: ${{ runner.os }}-${{ env.cache-name }}- - name: Cache gitlibs - uses: actions/cache@v4 + uses: actions/cache@v4.2.0 env: cache-name: cache-gitlibs with: @@ -247,7 +247,7 @@ jobs: tools-deps: '1.10.1.763' - name: Cache maven - uses: actions/cache@v4 + uses: actions/cache@v4.2.0 env: cache-name: cache-maven with: @@ -257,7 +257,7 @@ jobs: ${{ runner.os }}-${{ env.cache-name }}- - name: Cache gitlibs - uses: actions/cache@v4 + uses: actions/cache@v4.2.0 env: cache-name: cache-gitlibs with: @@ -308,7 +308,7 @@ jobs: tools-deps: '1.10.1.763' - name: Cache maven - uses: actions/cache@v4 + uses: actions/cache@v4.2.0 env: cache-name: cache-maven with: @@ -318,7 +318,7 @@ jobs: ${{ runner.os }}-${{ env.cache-name }}- - name: Cache gitlibs - uses: actions/cache@v4 + uses: actions/cache@v4.2.0 env: cache-name: cache-gitlibs with: From 819c7e163818719f7576df2fa7422ecd8d7a2e78 Mon Sep 17 00:00:00 2001 From: davidnolen Date: Sat, 22 Nov 2025 16:42:54 -0500 Subject: [PATCH 4/7] update hashFiles call --- .github/workflows/test.yaml | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index 4d6efd89a..65a27afa6 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -24,7 +24,7 @@ jobs: cache-name: cache-maven with: path: ~/.m2 - key: ${{ runner.os }}-${{ env.cache-name }}-${{ hashFiles('**/deps.edn') }} + key: ${{ runner.os }}-${{ env.cache-name }}-${{ hashFiles('deps.edn', '*/deps.edn') }} restore-keys: | ${{ runner.os }}-${{ env.cache-name }}- @@ -34,7 +34,7 @@ jobs: cache-name: cache-gitlibs with: path: ~/.gitlibs - key: ${{ runner.os }}-${{ env.cache-name }}-${{ hashFiles('**/deps.edn') }} + key: ${{ runner.os }}-${{ env.cache-name }}-${{ hashFiles('deps.edn', '*/deps.edn') }} restore-keys: | ${{ runner.os }}-${{ env.cache-name }}- @@ -81,7 +81,7 @@ jobs: cache-name: cache-maven with: path: ~/.m2 - key: ${{ runner.os }}-${{ env.cache-name }}-${{ hashFiles('**/deps.edn') }} + key: ${{ runner.os }}-${{ env.cache-name }}-${{ hashFiles('deps.edn', '*/deps.edn') }} restore-keys: | ${{ runner.os }}-${{ env.cache-name }}- @@ -91,7 +91,7 @@ jobs: cache-name: cache-gitlibs with: path: ~/.gitlibs - key: ${{ runner.os }}-${{ env.cache-name }}-${{ hashFiles('**/deps.edn') }} + key: ${{ runner.os }}-${{ env.cache-name }}-${{ hashFiles('deps.edn', '*/deps.edn') }} restore-keys: | ${{ runner.os }}-${{ env.cache-name }}- @@ -164,7 +164,7 @@ jobs: cache-name: cache-maven with: path: ~/.m2 - key: ${{ runner.os }}-${{ env.cache-name }}-${{ hashFiles('**/deps.edn') }} + key: ${{ runner.os }}-${{ env.cache-name }}-${{ hashFiles('deps.edn', '*/deps.edn') }} restore-keys: | ${{ runner.os }}-${{ env.cache-name }}- @@ -174,7 +174,7 @@ jobs: cache-name: cache-gitlibs with: path: ~/.gitlibs - key: ${{ runner.os }}-${{ env.cache-name }}-${{ hashFiles('**/deps.edn') }} + key: ${{ runner.os }}-${{ env.cache-name }}-${{ hashFiles('deps.edn', '*/deps.edn') }} restore-keys: | ${{ runner.os }}-${{ env.cache-name }}- @@ -208,7 +208,7 @@ jobs: cache-name: cache-maven with: path: ~/.m2 - key: ${{ runner.os }}-${{ env.cache-name }}-${{ hashFiles('**/deps.edn') }} + key: ${{ runner.os }}-${{ env.cache-name }}-${{ hashFiles('deps.edn', '*/deps.edn') }} restore-keys: | ${{ runner.os }}-${{ env.cache-name }}- @@ -218,7 +218,7 @@ jobs: cache-name: cache-gitlibs with: path: ~/.gitlibs - key: ${{ runner.os }}-${{ env.cache-name }}-${{ hashFiles('**/deps.edn') }} + key: ${{ runner.os }}-${{ env.cache-name }}-${{ hashFiles('deps.edn', '*/deps.edn') }} restore-keys: | ${{ runner.os }}-${{ env.cache-name }}- @@ -252,7 +252,7 @@ jobs: cache-name: cache-maven with: path: ~/.m2 - key: ${{ runner.os }}-${{ env.cache-name }}-${{ hashFiles('**/deps.edn') }} + key: ${{ runner.os }}-${{ env.cache-name }}-${{ hashFiles('deps.edn', '*/deps.edn') }} restore-keys: | ${{ runner.os }}-${{ env.cache-name }}- @@ -262,7 +262,7 @@ jobs: cache-name: cache-gitlibs with: path: ~/.gitlibs - key: ${{ runner.os }}-${{ env.cache-name }}-${{ hashFiles('**/deps.edn') }} + key: ${{ runner.os }}-${{ env.cache-name }}-${{ hashFiles('deps.edn', '*/deps.edn') }} restore-keys: | ${{ runner.os }}-${{ env.cache-name }}- @@ -313,7 +313,7 @@ jobs: cache-name: cache-maven with: path: ~/.m2 - key: ${{ runner.os }}-${{ env.cache-name }}-${{ hashFiles('**/deps.edn') }} + key: ${{ runner.os }}-${{ env.cache-name }}-${{ hashFiles('deps.edn', '*/deps.edn') }} restore-keys: | ${{ runner.os }}-${{ env.cache-name }}- @@ -323,7 +323,7 @@ jobs: cache-name: cache-gitlibs with: path: ~/.gitlibs - key: ${{ runner.os }}-${{ env.cache-name }}-${{ hashFiles('**/deps.edn') }} + key: ${{ runner.os }}-${{ env.cache-name }}-${{ hashFiles('deps.edn', '*/deps.edn') }} restore-keys: | ${{ runner.os }}-${{ env.cache-name }}- From 4a3a8276451cfe84cf945429fc78863f05072f85 Mon Sep 17 00:00:00 2001 From: davidnolen Date: Sat, 22 Nov 2025 16:46:51 -0500 Subject: [PATCH 5/7] hashFiles might be broken on mac os --- .github/workflows/test.yaml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index 65a27afa6..e147ff588 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -5,7 +5,7 @@ jobs: # Runtime Tests runtime-test: name: Runtime Tests - runs-on: macos-15 + runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 @@ -62,7 +62,7 @@ jobs: # Lite Tests lite-test: name: Lite Tests - runs-on: macos-15 + runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 @@ -145,7 +145,7 @@ jobs: # Self-host Tests self-host-test: name: Self-host Tests - runs-on: macos-15 + runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 @@ -189,7 +189,7 @@ jobs: # Self-parity Tests self-parity-test: name: Self-parity Tests - runs-on: macos-15 + runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 @@ -233,7 +233,7 @@ jobs: # Compiler Tests compiler-test: name: Compiler Tests - runs-on: macos-15 + runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 @@ -292,7 +292,7 @@ jobs: # CLI Tests cli-test: name: CLI Tests - runs-on: macos-15 + runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 with: From 478d3afbea62ab8edfe7b8f910d1264c41f62fee Mon Sep 17 00:00:00 2001 From: davidnolen Date: Sat, 22 Nov 2025 16:51:58 -0500 Subject: [PATCH 6/7] standardize on node for running the tests --- .github/workflows/test.yaml | 30 ++---------------------------- 1 file changed, 2 insertions(+), 28 deletions(-) diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index e147ff588..b8c5ae94b 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -38,25 +38,12 @@ jobs: restore-keys: | ${{ runner.os }}-${{ env.cache-name }}- - # - name: Cache JSC - # uses: actions/cache@v4.2.0 - # env: - # cache-name: cache-jsc - # with: - # path: WebKit - # key: ${{ runner.os }}-jsc - # restore-keys: | - # ${{ runner.os }}-jsc - - name: Build tests run: clojure -M:runtime.test.build - # - name: Install JSC - # run: ./ci/install_jsc.sh - - name: Run tests run: | - /System/Library/Frameworks/JavaScriptCore.framework/Versions/A/Helpers/jsc builds/out-adv/core-advanced-test.js | tee test-out.txt + node builds/out-adv/core-advanced-test.js | tee test-out.txt grep -qxF '0 failures, 0 errors.' test-out.txt # Lite Tests @@ -95,25 +82,12 @@ jobs: restore-keys: | ${{ runner.os }}-${{ env.cache-name }}- - # - name: Cache JSC - # uses: actions/cache@v4.2.0 - # env: - # cache-name: cache-jsc - # with: - # path: WebKit - # key: ${{ runner.os }}-jsc - # restore-keys: | - # ${{ runner.os }}-jsc - - name: Build tests run: clojure -M:lite.test.build - # - name: Install JSC - # run: ./ci/install_jsc.sh - - name: Run tests run: | - /System/Library/Frameworks/JavaScriptCore.framework/Versions/A/Helpers/jsc builds/out-lite/lite-test.js | tee test-out.txt + node builds/out-lite/lite-test.js | tee test-out.txt grep -qxF '0 failures, 0 errors.' test-out.txt # Runtime Tests From f80399afbdf17f0e124ecf467720ba98c7fd3658 Mon Sep 17 00:00:00 2001 From: davidnolen Date: Sat, 22 Nov 2025 16:58:26 -0500 Subject: [PATCH 7/7] self-hosted special case --- src/main/clojure/cljs/analyzer.cljc | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/clojure/cljs/analyzer.cljc b/src/main/clojure/cljs/analyzer.cljc index 8e81765b7..91ce2f13e 100644 --- a/src/main/clojure/cljs/analyzer.cljc +++ b/src/main/clojure/cljs/analyzer.cljc @@ -4134,6 +4134,7 @@ sym)])] (if (and sym-ns (nil? (resolve-ns-alias env sym-ns nil)) + (not= ".." sym-name) ;; special case `..` macro in self-hosted (or (= "new" sym-name) (string/starts-with? sym-name "."))) (merge