Browse Source

+ introduced TWasmObjSection.IsCode and .IsData

Nikolay Nikolov 3 years ago
parent
commit
eea8f32772
1 changed files with 23 additions and 3 deletions
  1. 23 3
      compiler/ogwasm.pas

+ 23 - 3
compiler/ogwasm.pas

@@ -43,6 +43,9 @@ interface
       { TWasmObjSection }
       { TWasmObjSection }
 
 
       TWasmObjSection = class(TObjSection)
       TWasmObjSection = class(TObjSection)
+      public
+        function IsCode: Boolean;
+        function IsData: Boolean;
       end;
       end;
 
 
       { TWasmObjData }
       { TWasmObjData }
@@ -74,6 +77,23 @@ interface
 
 
 implementation
 implementation
 
 
+{****************************************************************************
+                              TWasmObjSection
+****************************************************************************}
+
+    function TWasmObjSection.IsCode: Boolean;
+      const
+        CodePrefix = '.text';
+      begin
+        result:=(Length(Name)>=Length(CodePrefix)) and
+          (Copy(Name,1,Length(CodePrefix))=CodePrefix);
+      end;
+
+    function TWasmObjSection.IsData: Boolean;
+      begin
+        result:=not IsCode;
+      end;
+
 {****************************************************************************
 {****************************************************************************
                                 TWasmObjData
                                 TWasmObjData
 ****************************************************************************}
 ****************************************************************************}
@@ -244,7 +264,7 @@ implementation
     function TWasmObjOutput.writeData(Data:TObjData):boolean;
     function TWasmObjOutput.writeData(Data:TObjData):boolean;
       var
       var
         i: Integer;
         i: Integer;
-        objsec: TObjSection;
+        objsec: TWasmObjSection;
       begin
       begin
         Writer.write(WasmModuleMagic,SizeOf(WasmModuleMagic));
         Writer.write(WasmModuleMagic,SizeOf(WasmModuleMagic));
         Writer.write(WasmVersion,SizeOf(WasmVersion));
         Writer.write(WasmVersion,SizeOf(WasmVersion));
@@ -252,8 +272,8 @@ implementation
         Writeln('ObjSectionList:');
         Writeln('ObjSectionList:');
         for i:=0 to Data.ObjSectionList.Count-1 do
         for i:=0 to Data.ObjSectionList.Count-1 do
           begin
           begin
-            objsec:=TObjSection(Data.ObjSectionList[i]);
-            Writeln(objsec.Name, ' Size=', objsec.Size, ' MemPos=', objsec.MemPos, ' Data.Size=', objsec.Data.size, ' DataPos=', objsec.DataPos);
+            objsec:=TWasmObjSection(Data.ObjSectionList[i]);
+            Writeln(objsec.Name, ' IsCode=', objsec.IsCode, ' IsData=', objsec.IsData, ' Size=', objsec.Size, ' MemPos=', objsec.MemPos, ' Data.Size=', objsec.Data.size, ' DataPos=', objsec.DataPos);
           end;
           end;
 
 
         result:=true;
         result:=true;