浏览代码

* when determining the type to use for checkcast, first always dereference
pointers to implicit pointer types so that afterwards we can set the
appropriate corresponding class type

git-svn-id: branches/jvmbackend@18668 -

Jonas Maebe 14 年之前
父节点
当前提交
7286e3b645
共有 1 个文件被更改,包括 3 次插入2 次删除
  1. 3 2
      compiler/jvm/njvmcnv.pas

+ 3 - 2
compiler/jvm/njvmcnv.pas

@@ -1192,10 +1192,11 @@ implementation
       else
       else
         checkdef:=node.right.resultdef;
         checkdef:=node.right.resultdef;
       { replace special types with their equivalent class type }
       { replace special types with their equivalent class type }
+      if (checkdef.typ=pointerdef) and
+         jvmimplicitpointertype(tpointerdef(checkdef).pointeddef) then
+        checkdef:=tpointerdef(checkdef).pointeddef;
       if checkdef=voidpointertype then
       if checkdef=voidpointertype then
         checkdef:=java_jlobject
         checkdef:=java_jlobject
-      else if checkdef.typ=pointerdef then
-        checkdef:=tpointerdef(checkdef).pointeddef
       else if checkdef.typ=enumdef then
       else if checkdef.typ=enumdef then
         checkdef:=tenumdef(checkdef).classdef
         checkdef:=tenumdef(checkdef).classdef
       else if checkdef.typ=setdef then
       else if checkdef.typ=setdef then