Skip to content

Commit 78f35bc

Browse files
authored
add :qualified-method :ast, String/.toUpperCase and String/new etc. work (#289)
* add :qualified-method :ast, String/.toUpperCase and String/new etc. work * self-hosted special case * fix busted actions, switch to ubuntu and node
1 parent 7c718ad commit 78f35bc

File tree

3 files changed

+69
-71
lines changed

3 files changed

+69
-71
lines changed

.github/workflows/test.yaml

Lines changed: 32 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ jobs:
55
# Runtime Tests
66
runtime-test:
77
name: Runtime Tests
8-
runs-on: macos-14
8+
runs-on: ubuntu-latest
99
steps:
1010
- uses: actions/checkout@v2
1111

@@ -19,50 +19,37 @@ jobs:
1919
tools-deps: '1.10.1.763'
2020

2121
- name: Cache maven
22-
uses: actions/cache@v4
22+
uses: actions/cache@v4.2.0
2323
env:
2424
cache-name: cache-maven
2525
with:
2626
path: ~/.m2
27-
key: ${{ runner.os }}-${{ env.cache-name }}-${{ hashFiles('**/deps.edn') }}
27+
key: ${{ runner.os }}-${{ env.cache-name }}-${{ hashFiles('deps.edn', '*/deps.edn') }}
2828
restore-keys: |
2929
${{ runner.os }}-${{ env.cache-name }}-
3030
3131
- name: Cache gitlibs
32-
uses: actions/cache@v4
32+
uses: actions/cache@v4.2.0
3333
env:
3434
cache-name: cache-gitlibs
3535
with:
3636
path: ~/.gitlibs
37-
key: ${{ runner.os }}-${{ env.cache-name }}-${{ hashFiles('**/deps.edn') }}
37+
key: ${{ runner.os }}-${{ env.cache-name }}-${{ hashFiles('deps.edn', '*/deps.edn') }}
3838
restore-keys: |
3939
${{ runner.os }}-${{ env.cache-name }}-
4040
41-
# - name: Cache JSC
42-
# uses: actions/cache@v4
43-
# env:
44-
# cache-name: cache-jsc
45-
# with:
46-
# path: WebKit
47-
# key: ${{ runner.os }}-jsc
48-
# restore-keys: |
49-
# ${{ runner.os }}-jsc
50-
5141
- name: Build tests
5242
run: clojure -M:runtime.test.build
5343

54-
# - name: Install JSC
55-
# run: ./ci/install_jsc.sh
56-
5744
- name: Run tests
5845
run: |
59-
/System/Library/Frameworks/JavaScriptCore.framework/Versions/A/Helpers/jsc builds/out-adv/core-advanced-test.js | tee test-out.txt
46+
node builds/out-adv/core-advanced-test.js | tee test-out.txt
6047
grep -qxF '0 failures, 0 errors.' test-out.txt
6148
6249
# Lite Tests
6350
lite-test:
6451
name: Lite Tests
65-
runs-on: macos-14
52+
runs-on: ubuntu-latest
6653
steps:
6754
- uses: actions/checkout@v2
6855

@@ -76,44 +63,31 @@ jobs:
7663
tools-deps: '1.10.1.763'
7764

7865
- name: Cache maven
79-
uses: actions/cache@v4
66+
uses: actions/cache@v4.2.0
8067
env:
8168
cache-name: cache-maven
8269
with:
8370
path: ~/.m2
84-
key: ${{ runner.os }}-${{ env.cache-name }}-${{ hashFiles('**/deps.edn') }}
71+
key: ${{ runner.os }}-${{ env.cache-name }}-${{ hashFiles('deps.edn', '*/deps.edn') }}
8572
restore-keys: |
8673
${{ runner.os }}-${{ env.cache-name }}-
8774
8875
- name: Cache gitlibs
89-
uses: actions/cache@v4
76+
uses: actions/cache@v4.2.0
9077
env:
9178
cache-name: cache-gitlibs
9279
with:
9380
path: ~/.gitlibs
94-
key: ${{ runner.os }}-${{ env.cache-name }}-${{ hashFiles('**/deps.edn') }}
81+
key: ${{ runner.os }}-${{ env.cache-name }}-${{ hashFiles('deps.edn', '*/deps.edn') }}
9582
restore-keys: |
9683
${{ runner.os }}-${{ env.cache-name }}-
9784
98-
# - name: Cache JSC
99-
# uses: actions/cache@v4
100-
# env:
101-
# cache-name: cache-jsc
102-
# with:
103-
# path: WebKit
104-
# key: ${{ runner.os }}-jsc
105-
# restore-keys: |
106-
# ${{ runner.os }}-jsc
107-
10885
- name: Build tests
10986
run: clojure -M:lite.test.build
11087

111-
# - name: Install JSC
112-
# run: ./ci/install_jsc.sh
113-
11488
- name: Run tests
11589
run: |
116-
/System/Library/Frameworks/JavaScriptCore.framework/Versions/A/Helpers/jsc builds/out-lite/lite-test.js | tee test-out.txt
90+
node builds/out-lite/lite-test.js | tee test-out.txt
11791
grep -qxF '0 failures, 0 errors.' test-out.txt
11892
11993
# Runtime Tests
@@ -145,7 +119,7 @@ jobs:
145119
# Self-host Tests
146120
self-host-test:
147121
name: Self-host Tests
148-
runs-on: macos-14
122+
runs-on: ubuntu-latest
149123
steps:
150124
- uses: actions/checkout@v2
151125

@@ -159,22 +133,22 @@ jobs:
159133
tools-deps: '1.10.1.763'
160134

161135
- name: Cache maven
162-
uses: actions/cache@v4
136+
uses: actions/cache@v4.2.0
163137
env:
164138
cache-name: cache-maven
165139
with:
166140
path: ~/.m2
167-
key: ${{ runner.os }}-${{ env.cache-name }}-${{ hashFiles('**/deps.edn') }}
141+
key: ${{ runner.os }}-${{ env.cache-name }}-${{ hashFiles('deps.edn', '*/deps.edn') }}
168142
restore-keys: |
169143
${{ runner.os }}-${{ env.cache-name }}-
170144
171145
- name: Cache gitlibs
172-
uses: actions/cache@v4
146+
uses: actions/cache@v4.2.0
173147
env:
174148
cache-name: cache-gitlibs
175149
with:
176150
path: ~/.gitlibs
177-
key: ${{ runner.os }}-${{ env.cache-name }}-${{ hashFiles('**/deps.edn') }}
151+
key: ${{ runner.os }}-${{ env.cache-name }}-${{ hashFiles('deps.edn', '*/deps.edn') }}
178152
restore-keys: |
179153
${{ runner.os }}-${{ env.cache-name }}-
180154
@@ -189,7 +163,7 @@ jobs:
189163
# Self-parity Tests
190164
self-parity-test:
191165
name: Self-parity Tests
192-
runs-on: macos-14
166+
runs-on: ubuntu-latest
193167
steps:
194168
- uses: actions/checkout@v2
195169

@@ -203,22 +177,22 @@ jobs:
203177
tools-deps: '1.10.1.763'
204178

205179
- name: Cache maven
206-
uses: actions/cache@v4
180+
uses: actions/cache@v4.2.0
207181
env:
208182
cache-name: cache-maven
209183
with:
210184
path: ~/.m2
211-
key: ${{ runner.os }}-${{ env.cache-name }}-${{ hashFiles('**/deps.edn') }}
185+
key: ${{ runner.os }}-${{ env.cache-name }}-${{ hashFiles('deps.edn', '*/deps.edn') }}
212186
restore-keys: |
213187
${{ runner.os }}-${{ env.cache-name }}-
214188
215189
- name: Cache gitlibs
216-
uses: actions/cache@v4
190+
uses: actions/cache@v4.2.0
217191
env:
218192
cache-name: cache-gitlibs
219193
with:
220194
path: ~/.gitlibs
221-
key: ${{ runner.os }}-${{ env.cache-name }}-${{ hashFiles('**/deps.edn') }}
195+
key: ${{ runner.os }}-${{ env.cache-name }}-${{ hashFiles('deps.edn', '*/deps.edn') }}
222196
restore-keys: |
223197
${{ runner.os }}-${{ env.cache-name }}-
224198
@@ -233,7 +207,7 @@ jobs:
233207
# Compiler Tests
234208
compiler-test:
235209
name: Compiler Tests
236-
runs-on: macos-14
210+
runs-on: ubuntu-latest
237211
steps:
238212
- uses: actions/checkout@v2
239213

@@ -247,22 +221,22 @@ jobs:
247221
tools-deps: '1.10.1.763'
248222

249223
- name: Cache maven
250-
uses: actions/cache@v4
224+
uses: actions/cache@v4.2.0
251225
env:
252226
cache-name: cache-maven
253227
with:
254228
path: ~/.m2
255-
key: ${{ runner.os }}-${{ env.cache-name }}-${{ hashFiles('**/deps.edn') }}
229+
key: ${{ runner.os }}-${{ env.cache-name }}-${{ hashFiles('deps.edn', '*/deps.edn') }}
256230
restore-keys: |
257231
${{ runner.os }}-${{ env.cache-name }}-
258232
259233
- name: Cache gitlibs
260-
uses: actions/cache@v4
234+
uses: actions/cache@v4.2.0
261235
env:
262236
cache-name: cache-gitlibs
263237
with:
264238
path: ~/.gitlibs
265-
key: ${{ runner.os }}-${{ env.cache-name }}-${{ hashFiles('**/deps.edn') }}
239+
key: ${{ runner.os }}-${{ env.cache-name }}-${{ hashFiles('deps.edn', '*/deps.edn') }}
266240
restore-keys: |
267241
${{ runner.os }}-${{ env.cache-name }}-
268242
@@ -292,7 +266,7 @@ jobs:
292266
# CLI Tests
293267
cli-test:
294268
name: CLI Tests
295-
runs-on: macos-14
269+
runs-on: ubuntu-latest
296270
steps:
297271
- uses: actions/checkout@v2
298272
with:
@@ -308,22 +282,22 @@ jobs:
308282
tools-deps: '1.10.1.763'
309283

310284
- name: Cache maven
311-
uses: actions/cache@v4
285+
uses: actions/cache@v4.2.0
312286
env:
313287
cache-name: cache-maven
314288
with:
315289
path: ~/.m2
316-
key: ${{ runner.os }}-${{ env.cache-name }}-${{ hashFiles('**/deps.edn') }}
290+
key: ${{ runner.os }}-${{ env.cache-name }}-${{ hashFiles('deps.edn', '*/deps.edn') }}
317291
restore-keys: |
318292
${{ runner.os }}-${{ env.cache-name }}-
319293
320294
- name: Cache gitlibs
321-
uses: actions/cache@v4
295+
uses: actions/cache@v4.2.0
322296
env:
323297
cache-name: cache-gitlibs
324298
with:
325299
path: ~/.gitlibs
326-
key: ${{ runner.os }}-${{ env.cache-name }}-${{ hashFiles('**/deps.edn') }}
300+
key: ${{ runner.os }}-${{ env.cache-name }}-${{ hashFiles('deps.edn', '*/deps.edn') }}
327301
restore-keys: |
328302
${{ runner.os }}-${{ env.cache-name }}-
329303

src/main/clojure/cljs/analyzer.cljc

Lines changed: 29 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4120,6 +4120,7 @@
41204120
(select-keys lb [:name :local :arg-id :variadic? :init])))
41214121
(let [sym-meta (meta sym)
41224122
sym-ns (namespace sym)
4123+
sym-name (name sym)
41234124
cur-ns (str (-> env :ns :name))
41244125
;; when compiling a macros namespace that requires itself, we need
41254126
;; to resolve calls to `my-ns.core/foo` to `my-ns.core$macros/foo`
@@ -4130,21 +4131,36 @@
41304131
(not (gstring/endsWith sym-ns "$macros"))
41314132
(= sym-ns (subs cur-ns 0 (- (count cur-ns) 7))))
41324133
(symbol (str sym-ns "$macros") (name sym))
4133-
sym)])
4134-
info (if-not (contains? sym-meta ::analyzed)
4134+
sym)])]
4135+
(if (and sym-ns
4136+
(nil? (resolve-ns-alias env sym-ns nil))
4137+
(not= ".." sym-name) ;; special case `..` macro in self-hosted
4138+
(or (= "new" sym-name)
4139+
(string/starts-with? sym-name ".")))
4140+
(merge
4141+
{:op :qualified-method
4142+
:env env
4143+
:form sym
4144+
:class (symbol sym-ns)}
4145+
(if (= "new" sym-name)
4146+
{:kind :new
4147+
:name (symbol sym-name)}
4148+
{:kind :method
4149+
:name (symbol (subs sym-name 1))}))
4150+
(let [info (if-not (contains? sym-meta ::analyzed)
41354151
(resolve-existing-var env sym)
41364152
(resolve-var env sym))]
4137-
(assert (:op info) (:op info))
4138-
(desugar-dotted-expr
4139-
(if-not (true? (:def-var env))
4140-
(merge
4141-
(assoc ret :info info)
4142-
(select-keys info [:op :name :ns :tag])
4143-
(when-let [const-expr (:const-expr info)]
4144-
{:const-expr const-expr}))
4145-
(let [info (resolve-var env sym)]
4146-
(merge (assoc ret :op :var :info info)
4147-
(select-keys info [:op :name :ns :tag]))))))))))
4153+
(assert (:op info) (:op info))
4154+
(desugar-dotted-expr
4155+
(if-not (true? (:def-var env))
4156+
(merge
4157+
(assoc ret :info info)
4158+
(select-keys info [:op :name :ns :tag])
4159+
(when-let [const-expr (:const-expr info)]
4160+
{:const-expr const-expr}))
4161+
(let [info (resolve-var env sym)]
4162+
(merge (assoc ret :op :var :info info)
4163+
(select-keys info [:op :name :ns :tag]))))))))))))
41484164

41494165
(defn excluded?
41504166
#?(:cljs {:tag boolean})

src/main/clojure/cljs/compiler.cljc

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1301,6 +1301,14 @@
13011301
(comma-sep args)
13021302
"))")))
13031303

1304+
(defmethod emit* :qualified-method
1305+
[{ctor :class :keys [args env kind name]}]
1306+
(if (= :new kind)
1307+
(emit-wrap env
1308+
(emits "(function (...args) { return Reflect.construct(" ctor ", args) })"))
1309+
(emit-wrap env
1310+
(emits "(function (x, ...args) { return Reflect.apply(" ctor ".prototype." name ", x, args) })"))))
1311+
13041312
(defmethod emit* :set!
13051313
[{:keys [target val env]}]
13061314
(emit-wrap env (emits "(" target " = " val ")")))

0 commit comments

Comments
 (0)