Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
90 changes: 32 additions & 58 deletions .github/workflows/test.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ jobs:
# Runtime Tests
runtime-test:
name: Runtime Tests
runs-on: macos-14
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2

Expand All @@ -19,50 +19,37 @@ 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:
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 }}-
- name: Cache gitlibs
uses: actions/cache@v4
uses: actions/cache@v4.2.0
env:
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 }}-
# - name: Cache JSC
# uses: actions/cache@v4
# 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
lite-test:
name: Lite Tests
runs-on: macos-14
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2

Expand All @@ -76,44 +63,31 @@ 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:
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 }}-
- name: Cache gitlibs
uses: actions/cache@v4
uses: actions/cache@v4.2.0
env:
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 }}-
# - name: Cache JSC
# uses: actions/cache@v4
# 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
Expand Down Expand Up @@ -145,7 +119,7 @@ jobs:
# Self-host Tests
self-host-test:
name: Self-host Tests
runs-on: macos-14
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2

Expand All @@ -159,22 +133,22 @@ 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:
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 }}-
- name: Cache gitlibs
uses: actions/cache@v4
uses: actions/cache@v4.2.0
env:
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 }}-
Expand All @@ -189,7 +163,7 @@ jobs:
# Self-parity Tests
self-parity-test:
name: Self-parity Tests
runs-on: macos-14
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2

Expand All @@ -203,22 +177,22 @@ 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:
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 }}-
- name: Cache gitlibs
uses: actions/cache@v4
uses: actions/cache@v4.2.0
env:
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 }}-
Expand All @@ -233,7 +207,7 @@ jobs:
# Compiler Tests
compiler-test:
name: Compiler Tests
runs-on: macos-14
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2

Expand All @@ -247,22 +221,22 @@ 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:
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 }}-
- name: Cache gitlibs
uses: actions/cache@v4
uses: actions/cache@v4.2.0
env:
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 }}-
Expand Down Expand Up @@ -292,7 +266,7 @@ jobs:
# CLI Tests
cli-test:
name: CLI Tests
runs-on: macos-14
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
with:
Expand All @@ -308,22 +282,22 @@ 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:
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 }}-
- name: Cache gitlibs
uses: actions/cache@v4
uses: actions/cache@v4.2.0
env:
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 }}-
Expand Down
42 changes: 29 additions & 13 deletions src/main/clojure/cljs/analyzer.cljc
Original file line number Diff line number Diff line change
Expand Up @@ -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`
Expand All @@ -4130,21 +4131,36 @@
(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))
(not= ".." sym-name) ;; special case `..` macro in self-hosted
(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})
Expand Down
8 changes: 8 additions & 0 deletions src/main/clojure/cljs/compiler.cljc
Original file line number Diff line number Diff line change
Expand Up @@ -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 ")")))
Expand Down
Loading