mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-12 08:06:07 +02:00
* fixed the stack tracking in twasmaddnode.second_addboolean
git-svn-id: branches/wasm@48044 -
This commit is contained in:
parent
bfe4d44aef
commit
2212bd5f3c
@ -263,6 +263,7 @@ interface
|
|||||||
secondpass(left);
|
secondpass(left);
|
||||||
current_asmdata.CurrAsmList.Concat(taicpu.op_functype(a_if,TWasmFuncType.Create([],[wbt_i32])));
|
current_asmdata.CurrAsmList.Concat(taicpu.op_functype(a_if,TWasmFuncType.Create([],[wbt_i32])));
|
||||||
thlcgwasm(hlcg).incblock;
|
thlcgwasm(hlcg).incblock;
|
||||||
|
thlcgwasm(hlcg).decstack(current_asmdata.CurrAsmList,1);
|
||||||
|
|
||||||
case nodetype of
|
case nodetype of
|
||||||
andn :
|
andn :
|
||||||
@ -272,6 +273,7 @@ interface
|
|||||||
secondpass(right);
|
secondpass(right);
|
||||||
|
|
||||||
current_asmdata.CurrAsmList.Concat( taicpu.op_none(a_else) );
|
current_asmdata.CurrAsmList.Concat( taicpu.op_none(a_else) );
|
||||||
|
thlcgwasm(hlcg).decstack(current_asmdata.CurrAsmList,1);
|
||||||
|
|
||||||
// inside of ELSE (the condition evaluated as false)
|
// inside of ELSE (the condition evaluated as false)
|
||||||
// for "and" must end evaluation immediately
|
// for "and" must end evaluation immediately
|
||||||
@ -284,8 +286,10 @@ interface
|
|||||||
// inside of IF (the condition evaluated as true)
|
// inside of IF (the condition evaluated as true)
|
||||||
// for "or" must end evalaution immediately - satified!
|
// for "or" must end evalaution immediately - satified!
|
||||||
current_asmdata.CurrAsmList.Concat( taicpu.op_const(a_i32_const, 1) );
|
current_asmdata.CurrAsmList.Concat( taicpu.op_const(a_i32_const, 1) );
|
||||||
|
thlcgwasm(hlcg).incstack(current_asmdata.CurrAsmList,1);
|
||||||
|
|
||||||
current_asmdata.CurrAsmList.Concat( taicpu.op_none(a_else) );
|
current_asmdata.CurrAsmList.Concat( taicpu.op_none(a_else) );
|
||||||
|
thlcgwasm(hlcg).decstack(current_asmdata.CurrAsmList,1);
|
||||||
// inside of ELSE (the condition evaluated as false)
|
// inside of ELSE (the condition evaluated as false)
|
||||||
// for "or" must evaluate the right part
|
// for "or" must evaluate the right part
|
||||||
secondpass(right);
|
secondpass(right);
|
||||||
@ -297,9 +301,6 @@ interface
|
|||||||
else
|
else
|
||||||
Internalerror(2019091902);
|
Internalerror(2019091902);
|
||||||
end;
|
end;
|
||||||
// todo: need to reset location to the stack?
|
|
||||||
|
|
||||||
//Internalerror(2019091901);
|
|
||||||
end else
|
end else
|
||||||
inherited;
|
inherited;
|
||||||
end;
|
end;
|
||||||
|
Loading…
Reference in New Issue
Block a user