mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-17 05:39:19 +02:00
[PATCH 174/188] update parsing of import entity
From ce1266c4fb4a1c99ca4c8463989cdb7b4baeaacd Mon Sep 17 00:00:00 2001 From: Dmitry Boyarintsev <skalogryz.lists@gmail.com> Date: Wed, 8 Apr 2020 10:25:27 -0400 git-svn-id: branches/wasm@46170 -
This commit is contained in:
parent
b710b84191
commit
50b84edd27
@ -192,16 +192,6 @@ type
|
|||||||
constructor Create;
|
constructor Create;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ TWasmImport }
|
|
||||||
|
|
||||||
TWasmImport = class(TObject)
|
|
||||||
LinkInfo : TLinkInfo;
|
|
||||||
module : string;
|
|
||||||
name : string;
|
|
||||||
fn : TWasmFunc;
|
|
||||||
function AddFunc: TWasmFunc;
|
|
||||||
end;
|
|
||||||
|
|
||||||
{ TWasmTable }
|
{ TWasmTable }
|
||||||
|
|
||||||
TWasmTable = class(TObject)
|
TWasmTable = class(TObject)
|
||||||
@ -235,6 +225,23 @@ type
|
|||||||
exportInfo : TExportInfo;
|
exportInfo : TExportInfo;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
{ TWasmImport }
|
||||||
|
|
||||||
|
TWasmImport = class(TObject)
|
||||||
|
LinkInfo : TLinkInfo;
|
||||||
|
module : string;
|
||||||
|
name : string;
|
||||||
|
fn : TWasmFunc;
|
||||||
|
mem : TWasmMemory;
|
||||||
|
glob : TWasmGlobal;
|
||||||
|
table : TWasmTable;
|
||||||
|
destructor Destroy; override;
|
||||||
|
function AddFunc: TWasmFunc;
|
||||||
|
function AddMemory: TWasmMemory;
|
||||||
|
function AddGlobal: TWasmGlobal;
|
||||||
|
function AddTable: TWasmTable;
|
||||||
|
end;
|
||||||
|
|
||||||
{ TWasmModule }
|
{ TWasmModule }
|
||||||
|
|
||||||
TWasmModule = class(TObject)
|
TWasmModule = class(TObject)
|
||||||
@ -490,12 +497,42 @@ end;
|
|||||||
|
|
||||||
{ TWasmImport }
|
{ TWasmImport }
|
||||||
|
|
||||||
|
destructor TWasmImport.Destroy;
|
||||||
|
begin
|
||||||
|
mem.Free;
|
||||||
|
fn.Free;
|
||||||
|
glob.Free;
|
||||||
|
table.Free;
|
||||||
|
inherited Destroy;
|
||||||
|
end;
|
||||||
|
|
||||||
function TWasmImport.AddFunc: TWasmFunc;
|
function TWasmImport.AddFunc: TWasmFunc;
|
||||||
begin
|
begin
|
||||||
if not Assigned(fn) then fn:= TWasmFunc.Create;
|
if not Assigned(fn) then fn:= TWasmFunc.Create;
|
||||||
Result:=fn;
|
Result:=fn;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
function TWasmImport.AddMemory: TWasmMemory;
|
||||||
|
begin
|
||||||
|
if not Assigned(mem) then
|
||||||
|
mem := TWasmMemory.Create;
|
||||||
|
Result := mem;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TWasmImport.AddGlobal: TWasmGlobal;
|
||||||
|
begin
|
||||||
|
if not Assigned(glob) then
|
||||||
|
glob := TWasmGlobal.Create;
|
||||||
|
Result := glob;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TWasmImport.AddTable: TWasmTable;
|
||||||
|
begin
|
||||||
|
if not Assigned(table) then
|
||||||
|
table := TWasmTable.Create;
|
||||||
|
Result := table;
|
||||||
|
end;
|
||||||
|
|
||||||
{ TWasmExport }
|
{ TWasmExport }
|
||||||
|
|
||||||
constructor TWasmExport.Create;
|
constructor TWasmExport.Create;
|
||||||
|
@ -578,36 +578,6 @@ begin
|
|||||||
ConsumeToken(sc, weCloseBrace);
|
ConsumeToken(sc, weCloseBrace);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
procedure ParseImport(sc: TWatScanner; dst: TWasmImport);
|
|
||||||
var
|
|
||||||
tk : TWatToken;
|
|
||||||
begin
|
|
||||||
if sc.token=weImport then
|
|
||||||
sc.Next;
|
|
||||||
|
|
||||||
if sc.token<>weString then
|
|
||||||
ErrorExpectButFound(sc, 'string');
|
|
||||||
dst.module := sc.resWasmString;
|
|
||||||
sc.Next;
|
|
||||||
|
|
||||||
if sc.token<>weString then
|
|
||||||
ErrorExpectButFound(sc, 'string');
|
|
||||||
dst.name := sc.resWasmString;
|
|
||||||
sc.Next;
|
|
||||||
|
|
||||||
ConsumeAnyOpenToken(sc, tk);
|
|
||||||
case tk of
|
|
||||||
weAsmSymbol: ;
|
|
||||||
weFunc: begin
|
|
||||||
ParseFunc(sc, dst.AddFunc);
|
|
||||||
end;
|
|
||||||
else
|
|
||||||
ErrorExpectButFound(sc, 'importdesc', TokenStr[sc.token]);
|
|
||||||
end;
|
|
||||||
ConsumeToken(sc, weCloseBrace);
|
|
||||||
end;
|
|
||||||
|
|
||||||
procedure ConsumeAsmSym(sc: TWatScanner; dst: TAsmSymList);
|
procedure ConsumeAsmSym(sc: TWatScanner; dst: TAsmSymList);
|
||||||
begin
|
begin
|
||||||
dst.Push(sc.asmCmd, sc.resText);
|
dst.Push(sc.asmCmd, sc.resText);
|
||||||
@ -662,6 +632,45 @@ begin
|
|||||||
ConsumeToken(sc, weCloseBrace);
|
ConsumeToken(sc, weCloseBrace);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure ParseImport(sc: TWatScanner; dst: TWasmImport);
|
||||||
|
var
|
||||||
|
tk : TWatToken;
|
||||||
|
begin
|
||||||
|
if sc.token=weImport then
|
||||||
|
sc.Next;
|
||||||
|
|
||||||
|
if sc.token<>weString then
|
||||||
|
ErrorExpectButFound(sc, 'string');
|
||||||
|
dst.module := sc.resWasmString;
|
||||||
|
sc.Next;
|
||||||
|
|
||||||
|
if sc.token<>weString then
|
||||||
|
ErrorExpectButFound(sc, 'string');
|
||||||
|
dst.name := sc.resWasmString;
|
||||||
|
sc.Next;
|
||||||
|
|
||||||
|
ConsumeAnyOpenToken(sc, tk);
|
||||||
|
case tk of
|
||||||
|
weAsmSymbol: ;
|
||||||
|
weFunc: begin
|
||||||
|
ParseFunc(sc, dst.AddFunc);
|
||||||
|
end;
|
||||||
|
weMemory: begin
|
||||||
|
ParseMemory(sc, dst.AddMemory);
|
||||||
|
end;
|
||||||
|
weTable: begin
|
||||||
|
ParseTable(sc, dst.AddTable);
|
||||||
|
end;
|
||||||
|
weGlobal: begin
|
||||||
|
ParseGlobal(sc, dst.AddGlobal);
|
||||||
|
end;
|
||||||
|
else
|
||||||
|
ErrorExpectButFound(sc, 'importdesc', TokenStr[sc.token]);
|
||||||
|
end;
|
||||||
|
ConsumeToken(sc, weCloseBrace);
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
procedure ParseModuleInt(sc: TWatScanner; dst: TWasmModule);
|
procedure ParseModuleInt(sc: TWatScanner; dst: TWasmModule);
|
||||||
var
|
var
|
||||||
tk : TWatToken;
|
tk : TWatToken;
|
||||||
|
Loading…
Reference in New Issue
Block a user