소스 검색

+ 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}
              ait_functype:
                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}
              else
                ;

+ 20 - 0
compiler/ogwasm.pas

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