mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 1243626 - Baldr: tweak block text format (r=bbouvier)
This commit is contained in:
parent
2adafba403
commit
db8de9d9e1
@ -476,11 +476,6 @@ class WasmTokenStream
|
||||
} while (*cur_++ != '"');
|
||||
return WasmToken(WasmToken::Text, begin, cur_);
|
||||
|
||||
case 'b':
|
||||
if (consume(end_, MOZ_UTF16("lock")))
|
||||
return WasmToken(WasmToken::Block, begin, cur_);
|
||||
break;
|
||||
|
||||
case '$':
|
||||
while (cur_ != end_ && IsNameAfterDollar(*cur_))
|
||||
cur_++;
|
||||
@ -505,6 +500,11 @@ class WasmTokenStream
|
||||
return WasmToken(u32.value(), begin, cur_);
|
||||
}
|
||||
|
||||
case 'b':
|
||||
if (consume(end_, MOZ_UTF16("lock")))
|
||||
return WasmToken(WasmToken::Block, begin, cur_);
|
||||
break;
|
||||
|
||||
case 'e':
|
||||
if (consume(end_, MOZ_UTF16("xport")))
|
||||
return WasmToken(WasmToken::Export, begin, cur_);
|
||||
@ -661,7 +661,39 @@ struct WasmParseContext
|
||||
};
|
||||
|
||||
static WasmAstExpr*
|
||||
ParseExpr(WasmParseContext& c);
|
||||
ParseExprInsideParens(WasmParseContext& c);
|
||||
|
||||
static WasmAstExpr*
|
||||
ParseExpr(WasmParseContext& c)
|
||||
{
|
||||
if (!c.ts.match(WasmToken::OpenParen, c.error))
|
||||
return nullptr;
|
||||
|
||||
WasmAstExpr* expr = ParseExprInsideParens(c);
|
||||
if (!expr)
|
||||
return nullptr;
|
||||
|
||||
if (!c.ts.match(WasmToken::CloseParen, c.error))
|
||||
return nullptr;
|
||||
|
||||
return expr;
|
||||
}
|
||||
|
||||
static WasmAstBlock*
|
||||
ParseBlock(WasmParseContext& c)
|
||||
{
|
||||
WasmAstExprVector exprs(c.lifo);
|
||||
|
||||
while (c.ts.getIf(WasmToken::OpenParen)) {
|
||||
WasmAstExpr* expr = ParseExprInsideParens(c);
|
||||
if (!expr || !exprs.append(expr))
|
||||
return nullptr;
|
||||
if (!c.ts.match(WasmToken::CloseParen, c.error))
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
return new(c.lifo) WasmAstBlock(Move(exprs));
|
||||
}
|
||||
|
||||
static WasmAstConst*
|
||||
ParseConst(WasmParseContext& c, WasmToken constToken)
|
||||
@ -703,27 +735,6 @@ ParseSetLocal(WasmParseContext& c)
|
||||
return new(c.lifo) WasmAstSetLocal(localIndex.integer(), *value);
|
||||
}
|
||||
|
||||
static WasmAstBlock*
|
||||
ParseBlock(WasmParseContext& c)
|
||||
{
|
||||
WasmToken numExprs;
|
||||
if (!c.ts.match(WasmToken::Integer, &numExprs, c.error))
|
||||
return nullptr;
|
||||
|
||||
WasmAstExprVector exprs(c.lifo);
|
||||
if (!exprs.reserve(numExprs.integer()))
|
||||
return nullptr;
|
||||
|
||||
for (uint32_t i = 0; i < numExprs.integer(); i++) {
|
||||
WasmAstExpr* value = ParseExpr(c);
|
||||
if (!value)
|
||||
return nullptr;
|
||||
exprs.infallibleAppend(value);
|
||||
}
|
||||
|
||||
return new(c.lifo) WasmAstBlock(Move(exprs));
|
||||
}
|
||||
|
||||
static WasmAstExpr*
|
||||
ParseExprInsideParens(WasmParseContext& c)
|
||||
{
|
||||
@ -746,22 +757,6 @@ ParseExprInsideParens(WasmParseContext& c)
|
||||
}
|
||||
}
|
||||
|
||||
static WasmAstExpr*
|
||||
ParseExpr(WasmParseContext& c)
|
||||
{
|
||||
if (!c.ts.match(WasmToken::OpenParen, c.error))
|
||||
return nullptr;
|
||||
|
||||
WasmAstExpr* expr = ParseExprInsideParens(c);
|
||||
if (!expr)
|
||||
return nullptr;
|
||||
|
||||
if (!c.ts.match(WasmToken::CloseParen, c.error))
|
||||
return nullptr;
|
||||
|
||||
return expr;
|
||||
}
|
||||
|
||||
static WasmAstFunc*
|
||||
ParseFunc(WasmParseContext& c, WasmAstModule* module)
|
||||
{
|
||||
|
@ -130,20 +130,17 @@ assertErrorMessage(() => wasmEvalText('(module (func (local i64)))'), Error, /NY
|
||||
// ----------------------------------------------------------------------------
|
||||
// blocks
|
||||
|
||||
assertThrowsInstanceOf(() => wasmEvalText('(module (block))'), Error);
|
||||
assertThrowsInstanceOf(() => wasmEvalText('(module (block -1 (i32.const 42)))'), Error);
|
||||
assertEq(wasmEvalText('(module (func (block 0)) (export "" 0))')(), undefined);
|
||||
assertEq(wasmEvalText('(module (func (block)) (export "" 0))')(), undefined);
|
||||
|
||||
assertErrorMessage(() => wasmEvalText('(module (func (result i32) (block 0)))'), Error, mismatchError("void", "i32"));
|
||||
assertErrorMessage(() => wasmEvalText('(module (func (result i32) (block 1 (block 0))))'), Error, mismatchError("void", "i32"));
|
||||
assertErrorMessage(() => wasmEvalText('(module (func (local i32) (set_local 0 (block 0))))'), Error, mismatchError("void", "i32"));
|
||||
assertErrorMessage(() => wasmEvalText('(module (func (result i32) (block)))'), Error, mismatchError("void", "i32"));
|
||||
assertErrorMessage(() => wasmEvalText('(module (func (result i32) (block (block))))'), Error, mismatchError("void", "i32"));
|
||||
assertErrorMessage(() => wasmEvalText('(module (func (local i32) (set_local 0 (block))))'), Error, mismatchError("void", "i32"));
|
||||
|
||||
assertThrowsInstanceOf(() => wasmEvalText('(module (block 1))'), Error);
|
||||
assertEq(wasmEvalText('(module (func (block 1 (block 0))) (export "" 0))')(), undefined);
|
||||
assertEq(wasmEvalText('(module (func (result i32) (block 1 (i32.const 42))) (export "" 0))')(), 42);
|
||||
assertEq(wasmEvalText('(module (func (result i32) (block 1 (block 1 (i32.const 42)))) (export "" 0))')(), 42);
|
||||
assertErrorMessage(() => wasmEvalText('(module (func (result f32) (block 1 (i32.const 0))))'), Error, mismatchError("i32", "f32"));
|
||||
assertEq(wasmEvalText('(module (func (block (block))) (export "" 0))')(), undefined);
|
||||
assertEq(wasmEvalText('(module (func (result i32) (block (i32.const 42))) (export "" 0))')(), 42);
|
||||
assertEq(wasmEvalText('(module (func (result i32) (block (block (i32.const 42)))) (export "" 0))')(), 42);
|
||||
assertErrorMessage(() => wasmEvalText('(module (func (result f32) (block (i32.const 0))))'), Error, mismatchError("i32", "f32"));
|
||||
|
||||
assertEq(wasmEvalText('(module (func (result i32) (block 2 (i32.const 13) (block 1 (i32.const 42)))) (export "" 0))')(), 42);
|
||||
assertErrorMessage(() => wasmEvalText('(module (func (result f32) (param f32) (block 2 (get_local 0) (i32.const 0))))'), Error, mismatchError("i32", "f32"));
|
||||
assertEq(wasmEvalText('(module (func (result i32) (block (i32.const 13) (block (i32.const 42)))) (export "" 0))')(), 42);
|
||||
assertErrorMessage(() => wasmEvalText('(module (func (result f32) (param f32) (block (get_local 0) (i32.const 0))))'), Error, mismatchError("i32", "f32"));
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user