mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-09-04 07:50:17 +02:00
+ support if,block,loop,else,end_if,end_block,end_loop in TWasmValidationStacks.Validate
This commit is contained in:
parent
472f9be9a6
commit
13f58fe343
@ -639,6 +639,8 @@ uses
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
var
|
||||||
|
frame: TWasmControlFrame;
|
||||||
begin
|
begin
|
||||||
case a.opcode of
|
case a.opcode of
|
||||||
a_nop:
|
a_nop:
|
||||||
@ -1036,6 +1038,52 @@ uses
|
|||||||
PopVals(a.oper[0]^.functype.params);
|
PopVals(a.oper[0]^.functype.params);
|
||||||
PushVals(a.oper[0]^.functype.results);
|
PushVals(a.oper[0]^.functype.results);
|
||||||
end;
|
end;
|
||||||
|
a_if,
|
||||||
|
a_block,
|
||||||
|
a_loop:
|
||||||
|
begin
|
||||||
|
if a.opcode=a_if then
|
||||||
|
PopVal(wbt_i32);
|
||||||
|
if a.ops>1 then
|
||||||
|
internalerror(2024022510);
|
||||||
|
if a.ops=0 then
|
||||||
|
PushCtrl(a.opcode,[],[])
|
||||||
|
else
|
||||||
|
begin
|
||||||
|
if a.oper[0]^.typ<>top_functype then
|
||||||
|
internalerror(2024022511);
|
||||||
|
PopVals(a.oper[0]^.functype.params);
|
||||||
|
PushCtrl(a.opcode,a.oper[0]^.functype.params,a.oper[0]^.functype.results);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
a_else:
|
||||||
|
begin
|
||||||
|
frame:=PopCtrl;
|
||||||
|
if frame.opcode<>a_if then
|
||||||
|
internalerror(2024022512);
|
||||||
|
PushCtrl(a_else,frame.start_types,frame.end_types);
|
||||||
|
end;
|
||||||
|
a_end_if:
|
||||||
|
begin
|
||||||
|
frame:=PopCtrl;
|
||||||
|
if (frame.opcode<>a_if) and (frame.opcode<>a_else) then
|
||||||
|
internalerror(2024022513);
|
||||||
|
PushVals(frame.end_types);
|
||||||
|
end;
|
||||||
|
a_end_block:
|
||||||
|
begin
|
||||||
|
frame:=PopCtrl;
|
||||||
|
if frame.opcode<>a_block then
|
||||||
|
internalerror(2024022514);
|
||||||
|
PushVals(frame.end_types);
|
||||||
|
end;
|
||||||
|
a_end_loop:
|
||||||
|
begin
|
||||||
|
frame:=PopCtrl;
|
||||||
|
if frame.opcode<>a_loop then
|
||||||
|
internalerror(2024022515);
|
||||||
|
PushVals(frame.end_types);
|
||||||
|
end;
|
||||||
else
|
else
|
||||||
internalerror(2024030502);
|
internalerror(2024030502);
|
||||||
end;
|
end;
|
||||||
|
Loading…
Reference in New Issue
Block a user