浏览代码

+ g_set_addr_nonbitpacked_record_field_ref() thlcgobj method to make a
reference pointing to the base address of a record point to a field
of that same record

git-svn-id: trunk@31641 -

Jonas Maebe 10 年之前
父节点
当前提交
9ee2a0f71c
共有 1 个文件被更改,包括 9 次插入0 次删除
  1. 9 0
      compiler/hlcgobj.pas

+ 9 - 0
compiler/hlcgobj.pas

@@ -539,6 +539,9 @@ unit hlcgobj;
             reference if necessary }
             reference if necessary }
           procedure g_ptrtypecast_ref(list: TAsmList; fromdef, todef: tpointerdef; var ref: treference); virtual;
           procedure g_ptrtypecast_ref(list: TAsmList; fromdef, todef: tpointerdef; var ref: treference); virtual;
 
 
+          { update a reference pointing to the start address of a record so it
+            refers to the indicated field }
+          procedure g_set_addr_nonbitpacked_record_field_ref(list: TAsmList; recdef: trecorddef; field: tfieldvarsym; var recref: treference); virtual;
 
 
           { routines migrated from ncgutil }
           { routines migrated from ncgutil }
 
 
@@ -3835,6 +3838,12 @@ implementation
       { nothing to do }
       { nothing to do }
     end;
     end;
 
 
+  procedure thlcgobj.g_set_addr_nonbitpacked_record_field_ref(list: TAsmList; recdef: trecorddef; field: tfieldvarsym; var recref: treference);
+    begin
+      inc(recref.offset,field.fieldoffset);
+      recref.alignment:=newalignment(recref.alignment,field.fieldoffset);
+    end;
+
   procedure thlcgobj.location_force_reg(list: TAsmList; var l: tlocation; src_size, dst_size: tdef; maybeconst: boolean);
   procedure thlcgobj.location_force_reg(list: TAsmList; var l: tlocation; src_size, dst_size: tdef; maybeconst: boolean);
     var
     var
       hregister,
       hregister,