Browse Source

* enable intercepting passes on tinlinenode(in_new_x); these cannot be
generated from Pascal source code, but they will be generated by the
JVM backend to construct new array instances

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

Jonas Maebe 14 years ago
parent
commit
f47689a5fe
2 changed files with 21 additions and 0 deletions
  1. 9 0
      compiler/ncginl.pas
  2. 12 0
      compiler/ninl.pas

+ 9 - 0
compiler/ncginl.pas

@@ -57,6 +57,7 @@ interface
           procedure second_rox; virtual;
           procedure second_sar; virtual;
           procedure second_bsfbsr; virtual;
+          procedure second_new; virtual;
        end;
 
 implementation
@@ -173,6 +174,8 @@ implementation
             in_bsf_x,
             in_bsr_x:
                second_BsfBsr;
+            in_new_x:
+               second_new;
             else internalerror(9);
          end;
       end;
@@ -827,6 +830,12 @@ implementation
     end;
 
 
+    procedure tcginlinenode.second_new;
+      begin
+        internalerror(2011012202);
+      end;
+
+
 begin
    cinlinenode:=tcginlinenode;
 end.

+ 12 - 0
compiler/ninl.pas

@@ -66,6 +66,10 @@ interface
           function first_int_real: tnode; virtual;
           function first_abs_long: tnode; virtual;
           function first_setlength: tnode; virtual;
+          { This one by default generates an internal error, because such
+            nodes are not generated by the parser. It's however used internally
+            by the JVM backend to create new dynamic arrays. }
+          function first_new: tnode; virtual;
         private
           function handle_str: tnode;
           function handle_reset_rewrite_typed: tnode;
@@ -3215,6 +3219,8 @@ implementation
          in_bsf_x,
          in_bsr_x:
            expectloc:=LOC_REGISTER;
+         in_new_x:
+           result:=first_new;
          else
            internalerror(89);
           end;
@@ -3416,6 +3422,12 @@ implementation
         result:=newblock;
       end;
 
+     function tinlinenode.first_new: tnode;
+       begin
+         internalerror(2011012201);
+         result:=nil;
+       end;
+
      function tinlinenode.first_pack_unpack: tnode;
        var
          loopstatement    : tstatementnode;