summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjoost <joost@3ad0048d-3df7-0310-abae-a5850022a9f2>2015-10-08 19:24:18 +0000
committerjoost <joost@3ad0048d-3df7-0310-abae-a5850022a9f2>2015-10-08 19:24:18 +0000
commit9f63731f3334e601f5a4b78e359355e8abb8acdc (patch)
tree8e255c92f5b4c2183266c3bf02b951d5653f333f
parent70fe11d78324777922146d05cb798753bbb8f589 (diff)
downloadfpc-9f63731f3334e601f5a4b78e359355e8abb8acdc.tar.gz
--- 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: http://svn.freepascal.org/svn/fpc/branches/fixes_3_0@31984 3ad0048d-3df7-0310-abae-a5850022a9f2
-rw-r--r--compiler/htypechk.pas13
-rw-r--r--tests/test/jvm/testall.bat6
-rwxr-xr-xtests/test/jvm/testall.sh3
-rw-r--r--tests/test/jvm/tformalclass.pp18
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.