Browse Source

+ support declaring wasm globals in the WebAssembly internal object writer

Nikolay Nikolov 3 years ago
parent
commit
65b4425672
1 changed files with 14 additions and 2 deletions
  1. 14 2
      compiler/ogwasm.pas

+ 14 - 2
compiler/ogwasm.pas

@@ -752,7 +752,13 @@ implementation
     procedure TWasmObjData.DeclareGlobalType(gt: tai_globaltype);
     procedure TWasmObjData.DeclareGlobalType(gt: tai_globaltype);
       var
       var
         ObjSymExtraData: TWasmObjSymbolExtraData;
         ObjSymExtraData: TWasmObjSymbolExtraData;
+        ObjSym: TObjSymbol;
       begin
       begin
+        if not gt.is_external then
+          begin
+            ObjSym:=symboldefine(gt.sym);
+            ObjSym.typ:=AT_WASM_GLOBAL;
+          end;
         ObjSymExtraData:=AddOrCreateObjSymbolExtraData(gt.globalname);
         ObjSymExtraData:=AddOrCreateObjSymbolExtraData(gt.globalname);
         ObjSymExtraData.GlobalType:=gt.gtype;
         ObjSymExtraData.GlobalType:=gt.gtype;
         ObjSymExtraData.GlobalIsImmutable:=gt.immutable;
         ObjSymExtraData.GlobalIsImmutable:=gt.immutable;
@@ -1753,8 +1759,14 @@ implementation
                       WriteUleb(FWasmSymbolTable,objsym.GlobalIndex);
                       WriteUleb(FWasmSymbolTable,objsym.GlobalIndex);
                   end
                   end
                 else
                 else
-                  {not implemented yet}
-                  internalerror(2021092705);
+                  begin
+                    WriteUleb(FWasmSymbolTable,0);
+                    if (objsym.GlobalIndex<0) then
+                      message1(asmw_e_illegal_unset_index,objsym.name)
+                    else
+                      WriteUleb(FWasmSymbolTable,objsym.GlobalIndex);
+                    WriteName(FWasmSymbolTable,objsym.Name);
+                  end;
               end
               end
             else if IsExternalFunction(objsym) then
             else if IsExternalFunction(objsym) then
               begin
               begin