mirror of
https://github.com/i-net-software/JWebAssembly.git
synced 2025-03-15 02:44:47 +01:00
fix CONTINUE in a CATCH block
This commit is contained in:
parent
4722445f24
commit
855713a519
@ -1246,6 +1246,7 @@ class BranchManager {
|
||||
calculate( tryNode, parsedOperations.subList( 0, idx ) );
|
||||
|
||||
BranchNode catchNode = new BranchNode( catchPos, endPos, WasmBlockOperator.CATCH, WasmBlockOperator.END, 0 );
|
||||
catchNode.tryPos = startPos;
|
||||
parent.add( catchNode );
|
||||
|
||||
// Create a block/end structure for every CATCH without the first CATCH
|
||||
@ -1419,7 +1420,7 @@ class BranchManager {
|
||||
int startPos = parent.startPos;
|
||||
while( parent != null && parent.endPos < gotoEndPos ) {
|
||||
deep++;
|
||||
startPos = parent.startPos;
|
||||
startPos = parent.startOp == WasmBlockOperator.CATCH ? parent.tryPos : parent.startPos;
|
||||
parent = parent.parent;
|
||||
}
|
||||
|
||||
@ -1727,6 +1728,10 @@ class BranchManager {
|
||||
*/
|
||||
private int startIdx;
|
||||
|
||||
/**
|
||||
* Position of related TRY block for CATCH block.
|
||||
*/
|
||||
private int tryPos;
|
||||
|
||||
/**
|
||||
* Create a new description.
|
||||
|
@ -60,6 +60,7 @@ public class Exceptions extends AbstractBaseTest {
|
||||
addParam( list, script, "tryReturn" );
|
||||
addParam( list, script, "whileTrueTryFinally" );
|
||||
addParam( list, script, "ifMultipleInFinally" );
|
||||
addParam( list, script, "catchWithContinue" );
|
||||
}
|
||||
rule.setTestParameters( list );
|
||||
rule.setProperty( JWebAssembly.WASM_USE_EH, "true" );
|
||||
@ -292,6 +293,21 @@ public class Exceptions extends AbstractBaseTest {
|
||||
return pos;
|
||||
}
|
||||
|
||||
@Export
|
||||
static private int catchWithContinue() {
|
||||
int val = 0;
|
||||
|
||||
for( int i = 0; i < 10; i++ ) {
|
||||
try {
|
||||
val = 42;
|
||||
} catch( Throwable ex ) {
|
||||
continue;
|
||||
}
|
||||
val = 13;
|
||||
}
|
||||
return val;
|
||||
}
|
||||
|
||||
// @Export
|
||||
// static int npe() {
|
||||
// Object obj = new NullPointerException();
|
||||
|
Loading…
x
Reference in New Issue
Block a user