+ handle tai_local in the internal asm writer and store the locals in the

wasm obj extra symbol data object
This commit is contained in:
Nikolay Nikolov 2021-09-25 16:00:09 +03:00
parent 050519f16f
commit 7e53fecd09
2 changed files with 21 additions and 1 deletions

View File

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

View File

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