Browse Source

+ tabstractrecordsymtable.findfieldbyoffset() method to get the (first, in
case of variant records) fieldvarsym corresponding to the given offset

git-svn-id: branches/hlcgllvm@28321 -

Jonas Maebe 11 years ago
parent
commit
dedf7e9384
1 changed files with 20 additions and 0 deletions
  1. 20 0
      compiler/symtable.pas

+ 20 - 0
compiler/symtable.pas

@@ -102,6 +102,7 @@ interface
           procedure alignrecord(fieldoffset:asizeint;varalign:shortint);
           procedure addfield(sym:tfieldvarsym;vis:tvisibility);
           procedure addfieldlist(list: tfpobjectlist; maybereorder: boolean);
+          function findfieldbyoffset(offset:asizeint): tfieldvarsym;
           procedure addalignmentpadding;
           procedure insertdef(def:TDefEntry);override;
           function is_packed: boolean;
@@ -1239,6 +1240,25 @@ implementation
       end;
 
 
+    function tabstractrecordsymtable.findfieldbyoffset(offset: asizeint): tfieldvarsym;
+      var
+        i: longint;
+        sym: tsym;
+      begin
+        for i:=0 to SymList.count-1 do
+          begin
+            sym:=tsym(symlist[i]);
+            if (sym.typ=fieldvarsym) and
+               (tfieldvarsym(sym).fieldoffset=offset) then
+              begin
+                result:=tfieldvarsym(sym);
+                exit;
+              end;
+          end;
+        result:=nil;
+      end;
+
+
     procedure tabstractrecordsymtable.addalignmentpadding;
       var
         padded_datasize: asizeint;