[PATCH 181/188] using assembler parameters

From 351ab862f931830be30643473e2d073092e1de40 Mon Sep 17 00:00:00 2001
From: Dmitry Boyarintsev <skalogryz.lists@gmail.com>
Date: Wed, 8 Apr 2020 13:15:49 -0400

git-svn-id: branches/wasm@46177 -
This commit is contained in:
nickysn 2020-08-03 13:02:12 +00:00
parent dbde36f012
commit ba7661e6f2

View File

@ -6,34 +6,34 @@ uses
SysUtils, Classes, watparser, watscanner, wasmmodule, wasmbinwriter,
wasmnormalize;
procedure Traverse(p: TWatScanner);
begin
while p.Next do begin
write(p.token,' ', p.resText);
if p.token = weInstr then
write('; inst = $', IntToHex(p.instrCode,2))
else if p.token = weError then begin
writeln('offset = ',p.ofs,' ',p.resText);
break;
end;
writeln;
type
TAsmParams = record
SrcFile : string;
Reloc : Boolean;
DstObjFile : string;
end;
procedure DefaultParams(out p: TAsmParams);
begin
p.SrcFile := '';
p.Reloc := true;
p.DstObjFile := '';
end;
procedure WriteBin(const fndst: string; m: TWasmModule; WriteReloc: Boolean);
procedure WriteBin(const p: TAsmParams; m: TWasmModule);
var
f : TFileStream;
begin
f := TFileStream.Create(fndst, fmCreate);
f := TFileStream.Create(p.DstObjFile, fmCreate);
try
Normalize(m);
WriteModule(m, f, WriteReloc, WriteReloc);
WriteModule(m, f, p.Reloc, p.Reloc);
finally
f.Free;
end;
end;
procedure Run(const fn: string; const doTraverse: Boolean; doReloc: Boolean);
procedure Run(const prm: TAsmParams);
var
st : TFileStream;
s : string;
@ -41,22 +41,18 @@ var
m : TWasmModule;
err : string;
begin
st := TFileStream.Create(fn, fmOpenRead or fmShareDenyNone);
st := TFileStream.Create(prm.SrcFile, fmOpenRead or fmShareDenyNone);
p := TWatScanner.Create;
try
SetLength(s, st.Size);
if length(s)>0 then st.Read(s[1], length(s));
p.SetSource(s);
if doTraverse then begin
Traverse(p);
Exit;
end;
m := TWasmModule.Create;
try
if not ParseModule(p, m, err) then
writeln('Error: ', err)
else
WriteBin( ChangeFileExt(fn,'.wasm'), m, doReloc);
WriteBin(prm, m);
finally
m.Free;
end;
@ -66,13 +62,7 @@ begin
end;
end;
var
gFn : string;
gCommand : string = '';
gReloc : Boolean = true;
gCatch : Boolean = false;
procedure ParseParams;
procedure ParseParams(var p: TAsmParams);
var
i : integer;
s : string;
@ -83,39 +73,39 @@ begin
s := ParamStr(i);
if (s<>'') and (s[1]='-') then begin
ls := AnsiLowerCase(s);
if ls = '-noreloc' then gReloc := false
else if ls = '-catch' then gCatch := true
else gCommand:=ls;
if ls = '-o' then begin
inc(i);
if (i<=ParamCount) then
p.DstObjFile:=ParamStr(i);
end;
end else
gFn := s;
p.SrcFile := s;
inc(i);
end;
if (p.SrcFile<>'') and (p.DstObjFile = '') then
p.DstObjFile := ChangeFileExt(p.SrcFile, '.wasm')
end;
var
prm : TAsmParams;
begin
ParseParams;
if (gFn='') then begin
writeln('please sepcify the input .wat file');
writeln('other use:');
writeln(' -compile %inpfn%');
writeln(' -noreloc - prevents relocation information from being written');
writeln(' -traverse %inpfn%');
DefaultParams(prm);
ParseParams(prm);
if (prm.SrcFile='') then begin
writeln('please specify the input .wat file');
exit;
end;
if not FileExists(gFn) then begin
writeln('file doesn''t exist: ', gFn);
if not FileExists(prm.SrcFile) then begin
writeln('file doesn''t exist: ', prm.SrcFile);
exit;
end;
if gCatch then
try
Run(gFn, gCommand = '-traverse', gReloc);
except
on e: exception do
writeln(e.message);
end
else
Run(gFn, gCommand = '-traverse', gReloc);
try
Run(prm);
except
on e: exception do
writeln(e.message);
end
end.