2
0
Эх сурвалжийг харах

+ handle tai_local in the internal asm writer and store the locals in the
wasm obj extra symbol data object

Nikolay Nikolov 3 жил өмнө
parent
commit
7e53fecd09

+ 2 - 0
compiler/assemble.pas

@@ -1841,6 +1841,8 @@ Implementation
                TWasmObjData(ObjData).DeclareImportModule(tai_import_module(hp));
                TWasmObjData(ObjData).DeclareImportModule(tai_import_module(hp));
              ait_import_name:
              ait_import_name:
                TWasmObjData(ObjData).DeclareImportName(tai_import_name(hp));
                TWasmObjData(ObjData).DeclareImportName(tai_import_name(hp));
+             ait_local:
+               TWasmObjData(ObjData).DeclareLocal(tai_local(hp));
 {$endif WASM}
 {$endif WASM}
              else
              else
                ;
                ;

+ 19 - 1
compiler/ogwasm.pas

@@ -46,7 +46,9 @@ interface
         TypeIdx: Integer;
         TypeIdx: Integer;
         ImportModule: string;
         ImportModule: string;
         ImportName: string;
         ImportName: string;
+        Locals: array of TWasmBasicType;
         constructor Create(HashObjectList: TFPHashObjectList; const s: TSymStr);
         constructor Create(HashObjectList: TFPHashObjectList; const s: TSymStr);
+        procedure AddLocal(bastyp: TWasmBasicType);
       end;
       end;
 
 
       { TWasmObjSection }
       { TWasmObjSection }
@@ -65,6 +67,7 @@ interface
       private
       private
         FFuncTypes: array of TWasmFuncType;
         FFuncTypes: array of TWasmFuncType;
         FObjSymbolsExtraDataList: TFPHashObjectList;
         FObjSymbolsExtraDataList: TFPHashObjectList;
+        FLastFuncName: string;
 
 
         function is_smart_section(atype:TAsmSectiontype):boolean;
         function is_smart_section(atype:TAsmSectiontype):boolean;
         function sectionname_gas(atype:TAsmSectiontype;const aname:string;aorder:TAsmSectionOrder):string;
         function sectionname_gas(atype:TAsmSectiontype;const aname:string;aorder:TAsmSectionOrder):string;
@@ -78,6 +81,7 @@ interface
         procedure DeclareFuncType(ft: tai_functype);
         procedure DeclareFuncType(ft: tai_functype);
         procedure DeclareImportModule(aim: tai_import_module);
         procedure DeclareImportModule(aim: tai_import_module);
         procedure DeclareImportName(ain: tai_import_name);
         procedure DeclareImportName(ain: tai_import_name);
+        procedure DeclareLocal(al: tai_local);
       end;
       end;
 
 
       { TWasmObjOutput }
       { TWasmObjOutput }
@@ -124,6 +128,12 @@ implementation
         TypeIdx:=-1;
         TypeIdx:=-1;
       end;
       end;
 
 
+    procedure TWasmObjSymbolExtraData.AddLocal(bastyp: TWasmBasicType);
+      begin
+        SetLength(Locals,Length(Locals)+1);
+        Locals[High(Locals)]:=bastyp;
+      end;
+
 {****************************************************************************
 {****************************************************************************
                               TWasmObjSection
                               TWasmObjSection
 ****************************************************************************}
 ****************************************************************************}
@@ -343,8 +353,8 @@ implementation
         i: Integer;
         i: Integer;
         ObjSymExtraData: TWasmObjSymbolExtraData;
         ObjSymExtraData: TWasmObjSymbolExtraData;
       begin
       begin
+        FLastFuncName:=ft.funcname;
         i:=AddFuncType(ft.functype);
         i:=AddFuncType(ft.functype);
-
         ObjSymExtraData:=AddOrCreateObjSymbolExtraData(ft.funcname);
         ObjSymExtraData:=AddOrCreateObjSymbolExtraData(ft.funcname);
         ObjSymExtraData.TypeIdx:=i;
         ObjSymExtraData.TypeIdx:=i;
       end;
       end;
@@ -365,6 +375,14 @@ implementation
         ObjSymExtraData.ImportName:=ain.importname;
         ObjSymExtraData.ImportName:=ain.importname;
       end;
       end;
 
 
+    procedure TWasmObjData.DeclareLocal(al: tai_local);
+      var
+        ObjSymExtraData: TWasmObjSymbolExtraData;
+      begin
+        ObjSymExtraData:=TWasmObjSymbolExtraData(FObjSymbolsExtraDataList.Find(FLastFuncName));
+        ObjSymExtraData.AddLocal(al.bastyp);
+      end;
+
 {****************************************************************************
 {****************************************************************************
                                TWasmObjOutput
                                TWasmObjOutput
 ****************************************************************************}
 ****************************************************************************}