Skip to content

Commit e6fed02

Browse files
committed
added back checkCasts before invokeInterface calls
1 parent 8fb9bdd commit e6fed02

File tree

3 files changed

+7
-2
lines changed

3 files changed

+7
-2
lines changed

src/clj/clojure/core_proxy.clj

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@
6262
(. gen (dup))
6363
(. gen (ifNull else-label))
6464
;if found
65+
(.checkCast gen ifn-type)
6566
(. gen (loadThis))
6667
;box args
6768
(dotimes [i (count ptypes)]
@@ -125,6 +126,7 @@
125126
(. gen (loadThis))
126127
(. gen (dup))
127128
(. gen (getField ctype fmap imap-type))
129+
(.checkCast gen (totype clojure.lang.IPersistentCollection))
128130
(. gen (loadArgs))
129131
(. gen (invokeInterface (totype clojure.lang.IPersistentCollection)
130132
(. Method (getMethod "clojure.lang.IPersistentCollection cons(Object)"))))

src/clj/clojure/genclass.clj

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -181,6 +181,7 @@
181181
(when is-overload
182182
(. gen (mark found-label)))
183183
;if found
184+
(.checkCast gen ifn-type)
184185
(when-not as-static
185186
(. gen (loadThis)))
186187
;box args
@@ -274,6 +275,7 @@
274275
(emit-get-var gen init-name)
275276
(. gen dup)
276277
(. gen ifNull no-init-label)
278+
(.checkCast gen ifn-type)
277279
;box init args
278280
(dotimes [i (count pclasses)]
279281
(. gen (loadArg i))
@@ -386,6 +388,7 @@
386388
(emit-get-var gen main-name)
387389
(. gen dup)
388390
(. gen ifNull no-main-label)
391+
(.checkCast gen ifn-type)
389392
(. gen loadArgs)
390393
(. gen (invokeStatic rt-type (. Method (getMethod "clojure.lang.ISeq seq(Object)"))))
391394
(. gen (invokeInterface ifn-type (new Method "applyTo" obj-type

src/jvm/clojure/lang/Compiler.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1155,7 +1155,7 @@ public void emitUnboxed(C context, FnExpr fn, GeneratorAdapter gen){
11551155
{
11561156
Type type = Type.getType(method.getDeclaringClass());
11571157
target.emit(C.EXPRESSION, fn, gen);
1158-
if(!method.getDeclaringClass().isInterface())
1158+
//if(!method.getDeclaringClass().isInterface())
11591159
gen.checkCast(type);
11601160
MethodExpr.emitTypedArgs(fn, gen, method.getParameterTypes(), args);
11611161
if(context == C.RETURN)
@@ -1179,7 +1179,7 @@ public void emit(C context, FnExpr fn, GeneratorAdapter gen){
11791179
{
11801180
Type type = Type.getType(method.getDeclaringClass());
11811181
target.emit(C.EXPRESSION, fn, gen);
1182-
if(!method.getDeclaringClass().isInterface())
1182+
//if(!method.getDeclaringClass().isInterface())
11831183
gen.checkCast(type);
11841184
MethodExpr.emitTypedArgs(fn, gen, method.getParameterTypes(), args);
11851185
if(context == C.RETURN)

0 commit comments

Comments
 (0)