Browse Source

* the default Seg() handling moved to virtual methods, so that they can be overriden in the i8086 code generator

git-svn-id: branches/i8086@24070 -
nickysn 12 years ago
parent
commit
917a1eb0f2
1 changed files with 22 additions and 5 deletions
  1. 22 5
      compiler/ninl.pas

+ 22 - 5
compiler/ninl.pas

@@ -79,6 +79,9 @@ interface
           function first_assigned: tnode; virtual;
           function first_assigned: tnode; virtual;
           function first_assert: tnode; virtual;
           function first_assert: tnode; virtual;
           function first_popcnt: tnode; virtual;
           function first_popcnt: tnode; virtual;
+          { override these for Seg() support }
+          function typecheck_seg: tnode; virtual;
+          function first_seg: tnode; virtual;
 
 
         private
         private
           function handle_str: tnode;
           function handle_str: tnode;
@@ -2805,10 +2808,7 @@ implementation
 
 
               in_seg_x :
               in_seg_x :
                 begin
                 begin
-                  if target_info.system in systems_managed_vm then
-                    message(parser_e_feature_unsupported_for_vm);
-                  set_varstate(left,vs_read,[]);
-                  result:=cordconstnode.create(0,s32inttype,false);
+                  result := typecheck_seg;
                 end;
                 end;
 
 
               in_pred_x,
               in_pred_x,
@@ -3571,7 +3571,9 @@ implementation
             internalerror(2000101001);
             internalerror(2000101001);
 
 
           in_seg_x :
           in_seg_x :
-            internalerror(200104046);
+            begin
+              result:=first_seg;
+            end;
 
 
           in_settextbuf_file_x,
           in_settextbuf_file_x,
           in_reset_typedfile,
           in_reset_typedfile,
@@ -3996,6 +3998,21 @@ implementation
        end;
        end;
 
 
 
 
+     function tinlinenode.typecheck_seg: tnode;
+       begin
+         if target_info.system in systems_managed_vm then
+           message(parser_e_feature_unsupported_for_vm);
+         set_varstate(left,vs_read,[]);
+         result:=cordconstnode.create(0,s32inttype,false);
+       end;
+
+
+     function tinlinenode.first_seg: tnode;
+       begin
+         internalerror(200104046);
+       end;
+
+
      function tinlinenode.handle_box: tnode;
      function tinlinenode.handle_box: tnode;
        begin
        begin
          result:=nil;
          result:=nil;