Skip to content

Commit bea1fe2

Browse files
committed
Partial fix for #963
1 parent a0f8cf9 commit bea1fe2

File tree

1 file changed

+16
-5
lines changed

1 file changed

+16
-5
lines changed

src/sci/impl/analyzer.cljc

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1542,22 +1542,33 @@
15421542
(interop/invoke-static-method ctx bindings class method children))
15431543
nil)))))
15441544
#?@(:clj [(and f-meta (:sci.impl.analyzer/interop f-meta))
1545-
(let [[obj & children] (analyze-children ctx (rest expr))
1545+
(let [[obj & args] (analyze-children ctx (rest expr))
15461546
meth (-> (second f)
15471547
str
15481548
(subs 1))
15491549
clazz (first f)
1550-
children (into-array Object children)
1551-
child-count (count children)
1550+
args (object-array args)
1551+
arg-count (count args)
15521552
stack (assoc m
15531553
:ns @utils/current-ns
15541554
:file @utils/current-file
1555-
:sci.impl/f-meta f-meta)]
1555+
:sci.impl/f-meta f-meta)
1556+
^"[Ljava.lang.Class;" arg-types (when (pos? arg-count)
1557+
(make-array Class arg-count))
1558+
has-types? (volatile! nil)]
1559+
(when arg-types
1560+
(areduce args idx _ret nil
1561+
(let [arg (aget args idx)
1562+
arg-meta (meta arg)]
1563+
(when-let [t (:tag arg-meta)]
1564+
(when-let [t (interop/resolve-type-hint ctx t)]
1565+
(do (vreset! has-types? true)
1566+
(aset arg-types idx t)))))))
15561567
(sci.impl.types/->Node
15571568
(let [obj (sci.impl.types/eval obj ctx bindings)]
15581569
(interop/invoke-instance-method ctx bindings obj clazz
15591570
meth
1560-
children child-count nil))
1571+
args arg-count arg-types))
15611572
stack))])
15621573
#?@(:clj [(and f-meta (:sci.impl.analyzer/invoke-constructor f-meta))
15631574
(invoke-constructor-node ctx (first f) (rest expr))])

0 commit comments

Comments
 (0)