浏览代码

+ handle the import_module and import_name directives in the internal
assembler and store them as obj symbol extra data

Nikolay Nikolov 3 年之前
父节点
当前提交
050519f16f
共有 2 个文件被更改,包括 24 次插入0 次删除
  1. 4 0
      compiler/assemble.pas
  2. 20 0
      compiler/ogwasm.pas

+ 4 - 0
compiler/assemble.pas

@@ -1837,6 +1837,10 @@ Implementation
 {$ifdef WASM}
 {$ifdef WASM}
              ait_functype:
              ait_functype:
                TWasmObjData(ObjData).DeclareFuncType(tai_functype(hp));
                TWasmObjData(ObjData).DeclareFuncType(tai_functype(hp));
+             ait_import_module:
+               TWasmObjData(ObjData).DeclareImportModule(tai_import_module(hp));
+             ait_import_name:
+               TWasmObjData(ObjData).DeclareImportName(tai_import_name(hp));
 {$endif WASM}
 {$endif WASM}
              else
              else
                ;
                ;

+ 20 - 0
compiler/ogwasm.pas

@@ -44,6 +44,8 @@ interface
 
 
       TWasmObjSymbolExtraData = class(TFPHashObject)
       TWasmObjSymbolExtraData = class(TFPHashObject)
         TypeIdx: Integer;
         TypeIdx: Integer;
+        ImportModule: string;
+        ImportName: string;
         constructor Create(HashObjectList: TFPHashObjectList; const s: TSymStr);
         constructor Create(HashObjectList: TFPHashObjectList; const s: TSymStr);
       end;
       end;
 
 
@@ -74,6 +76,8 @@ interface
         function AddOrCreateObjSymbolExtraData(const symname:TSymStr): TWasmObjSymbolExtraData;
         function AddOrCreateObjSymbolExtraData(const symname:TSymStr): TWasmObjSymbolExtraData;
         function AddFuncType(wft: TWasmFuncType): integer;
         function AddFuncType(wft: TWasmFuncType): integer;
         procedure DeclareFuncType(ft: tai_functype);
         procedure DeclareFuncType(ft: tai_functype);
+        procedure DeclareImportModule(aim: tai_import_module);
+        procedure DeclareImportName(ain: tai_import_name);
       end;
       end;
 
 
       { TWasmObjOutput }
       { TWasmObjOutput }
@@ -345,6 +349,22 @@ implementation
         ObjSymExtraData.TypeIdx:=i;
         ObjSymExtraData.TypeIdx:=i;
       end;
       end;
 
 
+    procedure TWasmObjData.DeclareImportModule(aim: tai_import_module);
+      var
+        ObjSymExtraData: TWasmObjSymbolExtraData;
+      begin
+        ObjSymExtraData:=AddOrCreateObjSymbolExtraData(aim.symname);
+        ObjSymExtraData.ImportModule:=aim.importmodule;
+      end;
+
+    procedure TWasmObjData.DeclareImportName(ain: tai_import_name);
+      var
+        ObjSymExtraData: TWasmObjSymbolExtraData;
+      begin
+        ObjSymExtraData:=AddOrCreateObjSymbolExtraData(ain.symname);
+        ObjSymExtraData.ImportName:=ain.importname;
+      end;
+
 {****************************************************************************
 {****************************************************************************
                                TWasmObjOutput
                                TWasmObjOutput
 ****************************************************************************}
 ****************************************************************************}