diff options
-rw-r--r-- | compiler/htypechk.pas | 13 | ||||
-rw-r--r-- | tests/test/jvm/testall.bat | 6 | ||||
-rwxr-xr-x | tests/test/jvm/testall.sh | 3 | ||||
-rw-r--r-- | tests/test/jvm/tformalclass.pp | 18 |
4 files changed, 35 insertions, 5 deletions
diff --git a/compiler/htypechk.pas b/compiler/htypechk.pas index 2d93bc4ec3..2672e44c65 100644 --- a/compiler/htypechk.pas +++ b/compiler/htypechk.pas @@ -2594,7 +2594,8 @@ implementation paraidx : integer; currparanr : byte; rfh,rth : double; - objdef : tobjectdef; + obj_from, + obj_to : tobjectdef; def_from, def_to : tdef; currpt, @@ -2760,13 +2761,15 @@ implementation def_is_related(tobjectdef(def_from),tobjectdef(def_to)) then begin eq:=te_convert_l1; - objdef:=tobjectdef(def_from); - while assigned(objdef) do + { resolve anonymous external class definitions } + obj_from:=find_real_class_definition(tobjectdef(def_from),false); + obj_to:=find_real_class_definition(tobjectdef(def_to),false); + while assigned(obj_from) do begin - if objdef=def_to then + if obj_from=obj_to then break; hp^.ordinal_distance:=hp^.ordinal_distance+1; - objdef:=objdef.childof; + obj_from:=obj_from.childof; end; end { compare_defs_ext compares sets and array constructors very poorly because diff --git a/tests/test/jvm/testall.bat b/tests/test/jvm/testall.bat index cd51c745c1..61863f87d0 100644 --- a/tests/test/jvm/testall.bat +++ b/tests/test/jvm/testall.bat @@ -314,3 +314,9 @@ ppcjvm -O2 -g -B -CTinitlocals tsetstring if %errorlevel% neq 0 exit /b %errorlevel% java -Dfile.encoding=UTF-8 -cp ..\..\..\rtl\units\jvm-java;. tsetstring if %errorlevel% neq 0 exit /b %errorlevel% +ppcjvm -O2 -g -B -Sa tnestcallpass1 +if %errorlevel% neq 0 exit /b %errorlevel% +ppcjvm -O2 -g -B -CTinitlocals tformalclass +if %errorlevel% neq 0 exit /b %errorlevel% +java -Dfile.encoding=UTF-8 -cp ..\..\..\rtl\units\jvm-java;. tformalclass +if %errorlevel% neq 0 exit /b %errorlevel% diff --git a/tests/test/jvm/testall.sh b/tests/test/jvm/testall.sh index bb8a1e227d..e5d191d762 100755 --- a/tests/test/jvm/testall.sh +++ b/tests/test/jvm/testall.sh @@ -184,3 +184,6 @@ $PPC -O2 -g -B -Sa tprop6a -CTautosetterprefix=Set -CTautogetterprefix=Get java -Dfile.encoding=UTF-8 -cp ../../../rtl/units/$RTLDIR:. tprop6a $PPC -O2 -g -B -Sa tsetstring java -Dfile.encoding=UTF-8 -cp ../../../rtl/units/$RTLDIR:. tsetstring +$PPC -O2 -g -B -Sa tnestcallpass1 +$PPC -O2 -g -B -Sa tformalclass +java -Dfile.encoding=UTF-8 -cp ../../../rtl/units/$RTLDIR:. tformalclass diff --git a/tests/test/jvm/tformalclass.pp b/tests/test/jvm/tformalclass.pp new file mode 100644 index 0000000000..d094492b24 --- /dev/null +++ b/tests/test/jvm/tformalclass.pp @@ -0,0 +1,18 @@ +program tformalclass; + +{$macro on} +{$ifdef java} +{$define sdkunit:=jdk15} +{$else} +{$define sdkunit:=androidr14} +{$endif} + +uses + sdkunit; + +var + a: system.jlstring; +begin + a:='abc'; + jlsystem.fout.println(a); +end. |