Browse Source

* support anonymous procvar definitions for jvm outside parameter lists (in a
parameter list they represent nested procvars, which aren't supported yet)

git-svn-id: trunk@32454 -

Jonas Maebe 9 years ago
parent
commit
c4b347c271
5 changed files with 31 additions and 1 deletions
  1. 1 0
      .gitattributes
  2. 4 1
      compiler/jvm/pjvm.pas
  3. 4 0
      tests/test/jvm/testall.bat
  4. 2 0
      tests/test/jvm/testall.sh
  5. 20 0
      tests/test/jvm/tprocvaranon.pp

+ 1 - 0
.gitattributes

@@ -11566,6 +11566,7 @@ tests/test/jvm/tnestproc.pp svneol=native#text/plain
 tests/test/jvm/topovl.pp svneol=native#text/plain
 tests/test/jvm/toverload.pp svneol=native#text/plain
 tests/test/jvm/toverload2.pp svneol=native#text/plain
+tests/test/jvm/tprocvaranon.pp svneol=native#text/plain
 tests/test/jvm/tprop.pp svneol=native#text/plain
 tests/test/jvm/tprop2.pp svneol=native#text/plain
 tests/test/jvm/tprop3.pp svneol=native#text/plain

+ 4 - 1
compiler/jvm/pjvm.pas

@@ -475,7 +475,10 @@ implementation
           FpcBaseNestedProcVarType, pass nestedfpstruct to constructor and
           copy it }
         if name='' then
-          internalerror(2011071901);
+          begin
+            if is_nested_pd(tabstractprocdef(def)) then
+              internalerror(2011071901);
+          end;
 
         setup_for_new_class('jvm_pvar_class',sstate,islocal,oldsymtablestack);
 

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

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

+ 2 - 0
tests/test/jvm/testall.sh

@@ -187,3 +187,5 @@ 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
+$PPC -O2 -g -B -Sa tprocvaranon
+java -Dfile.encoding=UTF-8 -cp ../../../rtl/units/$RTLDIR:. tprocvaranon

+ 20 - 0
tests/test/jvm/tprocvaranon.pp

@@ -0,0 +1,20 @@
+program tprocvaranon;
+
+type
+  tprocvaranonrec = record
+    p: function: longint;
+  end;
+
+function test: longint;
+begin
+  test:=123;
+end;
+
+var
+  r: tprocvaranonrec;
+begin
+ r.p:=@test;
+ if r.p()<>123 then
+   halt(1);
+end.
+