Browse Source

--- Merging r31458 into '.':
C tests/test/jvm/testall.bat
C tests/test/jvm/testall.sh
A tests/test/jvm/tformalclass.pp
U compiler/htypechk.pas
--- Recording mergeinfo for merge of r31458 into '.':
U .

# revisions: 31458

git-svn-id: branches/fixes_3_0@31984 -

joost 9 years ago
parent
commit
0f73688ecb

+ 1 - 0
.gitattributes

@@ -11064,6 +11064,7 @@ tests/test/jvm/testall.sh svneol=native#text/plain
 tests/test/jvm/testansi.pp svneol=native#text/plain
 tests/test/jvm/testansi.pp svneol=native#text/plain
 tests/test/jvm/testintf.pp svneol=native#text/plain
 tests/test/jvm/testintf.pp svneol=native#text/plain
 tests/test/jvm/testshort.pp svneol=native#text/plain
 tests/test/jvm/testshort.pp svneol=native#text/plain
+tests/test/jvm/tformalclass.pp svneol=native#text/plain
 tests/test/jvm/tformalpara.pp svneol=native#text/plain
 tests/test/jvm/tformalpara.pp svneol=native#text/plain
 tests/test/jvm/tinitvar.pp svneol=native#text/plain
 tests/test/jvm/tinitvar.pp svneol=native#text/plain
 tests/test/jvm/tint.pp svneol=native#text/plain
 tests/test/jvm/tint.pp svneol=native#text/plain

+ 8 - 5
compiler/htypechk.pas

@@ -2594,7 +2594,8 @@ implementation
         paraidx  : integer;
         paraidx  : integer;
         currparanr : byte;
         currparanr : byte;
         rfh,rth  : double;
         rfh,rth  : double;
-        objdef   : tobjectdef;
+        obj_from,
+        obj_to   : tobjectdef;
         def_from,
         def_from,
         def_to   : tdef;
         def_to   : tdef;
         currpt,
         currpt,
@@ -2760,13 +2761,15 @@ implementation
                   def_is_related(tobjectdef(def_from),tobjectdef(def_to)) then
                   def_is_related(tobjectdef(def_from),tobjectdef(def_to)) then
                  begin
                  begin
                    eq:=te_convert_l1;
                    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
                      begin
-                       if objdef=def_to then
+                       if obj_from=obj_to then
                          break;
                          break;
                        hp^.ordinal_distance:=hp^.ordinal_distance+1;
                        hp^.ordinal_distance:=hp^.ordinal_distance+1;
-                       objdef:=objdef.childof;
+                       obj_from:=obj_from.childof;
                      end;
                      end;
                  end
                  end
                { compare_defs_ext compares sets and array constructors very poorly because
                { compare_defs_ext compares sets and array constructors very poorly because

+ 6 - 0
tests/test/jvm/testall.bat

@@ -314,3 +314,9 @@ ppcjvm -O2 -g -B  -CTinitlocals tsetstring
 if %errorlevel% neq 0 exit /b %errorlevel%
 if %errorlevel% neq 0 exit /b %errorlevel%
 java -Dfile.encoding=UTF-8 -cp ..\..\..\rtl\units\jvm-java;. tsetstring
 java -Dfile.encoding=UTF-8 -cp ..\..\..\rtl\units\jvm-java;. tsetstring
 if %errorlevel% neq 0 exit /b %errorlevel%
 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%

+ 3 - 0
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
 java -Dfile.encoding=UTF-8 -cp ../../../rtl/units/$RTLDIR:. tprop6a
 $PPC -O2 -g -B -Sa tsetstring
 $PPC -O2 -g -B -Sa tsetstring
 java -Dfile.encoding=UTF-8 -cp ../../../rtl/units/$RTLDIR:. 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

+ 18 - 0
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.