[torque]: Fix Labels with multiple parameters
Change-Id: I37ed9115c099f3d17f23a26348a1bbf5f773ee32 Reviewed-on: https://chromium-review.googlesource.com/1056668 Reviewed-by: Daniel Clifford <danno@chromium.org> Commit-Queue: Peter Wong <peter.wm.wong@gmail.com> Cr-Commit-Position: refs/heads/master@{#53136}
This commit is contained in:
parent
5f920f770d
commit
e6238be3cb
@ -1358,6 +1358,7 @@ VisitResult ImplementationVisitor::GenerateCall(
|
||||
<< std::to_string(i + 1) << ") at " << PositionAsString(pos);
|
||||
ReportError(s.str());
|
||||
}
|
||||
j++;
|
||||
source_out() << variable->GetValueForDeclaration();
|
||||
}
|
||||
label->MarkUsed();
|
||||
|
@ -65,6 +65,33 @@ TEST(TestConstexprReturn) {
|
||||
FunctionTester ft(asm_tester.GenerateCode(), 0);
|
||||
}
|
||||
|
||||
TEST(TestGotoLabel) {
|
||||
Isolate* isolate(CcTest::InitIsolateOnce());
|
||||
CodeAssemblerTester asm_tester(isolate, 0);
|
||||
TestBuiltinsFromDSLAssembler m(asm_tester.state());
|
||||
{ m.Return(m.TestGotoLabel()); }
|
||||
FunctionTester ft(asm_tester.GenerateCode(), 0);
|
||||
ft.CheckCall(ft.true_value());
|
||||
}
|
||||
|
||||
TEST(TestGotoLabelWithOneParameter) {
|
||||
Isolate* isolate(CcTest::InitIsolateOnce());
|
||||
CodeAssemblerTester asm_tester(isolate, 0);
|
||||
TestBuiltinsFromDSLAssembler m(asm_tester.state());
|
||||
{ m.Return(m.TestGotoLabelWithOneParameter()); }
|
||||
FunctionTester ft(asm_tester.GenerateCode(), 0);
|
||||
ft.CheckCall(ft.true_value());
|
||||
}
|
||||
|
||||
TEST(TestGotoLabelWithTwoParameters) {
|
||||
Isolate* isolate(CcTest::InitIsolateOnce());
|
||||
CodeAssemblerTester asm_tester(isolate, 0);
|
||||
TestBuiltinsFromDSLAssembler m(asm_tester.state());
|
||||
{ m.Return(m.TestGotoLabelWithTwoParameters()); }
|
||||
FunctionTester ft(asm_tester.GenerateCode(), 0);
|
||||
ft.CheckCall(ft.true_value());
|
||||
}
|
||||
|
||||
} // namespace compiler
|
||||
} // namespace internal
|
||||
} // namespace v8
|
||||
|
@ -20,6 +20,21 @@ macro ElementsKindTestHelper3(kind: constexpr ElementsKind): constexpr bool {
|
||||
return ((kind == UINT8_ELEMENTS) || (kind == UINT16_ELEMENTS));
|
||||
}
|
||||
|
||||
macro LabelTestHelper1(): never
|
||||
labels Label1 {
|
||||
goto Label1;
|
||||
}
|
||||
|
||||
macro LabelTestHelper2(): never
|
||||
labels Label2(Smi) {
|
||||
goto Label2(42);
|
||||
}
|
||||
|
||||
macro LabelTestHelper3(): never
|
||||
labels Label3(String, Smi) {
|
||||
goto Label3('foo', 7);
|
||||
}
|
||||
|
||||
macro TestConstexpr1() {
|
||||
assert(convert<bool>(IsFastElementsKind(PACKED_SMI_ELEMENTS)));
|
||||
}
|
||||
@ -37,4 +52,34 @@ macro TestConstexprReturn() {
|
||||
assert(convert<bool>(!ElementsKindTestHelper3(UINT32_ELEMENTS)));
|
||||
}
|
||||
|
||||
macro TestGotoLabel(): Boolean {
|
||||
try {
|
||||
LabelTestHelper1() otherwise Label1;
|
||||
}
|
||||
label Label1 {
|
||||
return True;
|
||||
}
|
||||
}
|
||||
|
||||
macro TestGotoLabelWithOneParameter(): Boolean {
|
||||
try {
|
||||
LabelTestHelper2() otherwise Label2;
|
||||
}
|
||||
label Label2(smi: Smi) {
|
||||
assert(smi == 42);
|
||||
return True;
|
||||
}
|
||||
}
|
||||
|
||||
macro TestGotoLabelWithTwoParameters(): Boolean {
|
||||
try {
|
||||
LabelTestHelper3() otherwise Label3;
|
||||
}
|
||||
label Label3(str: String, smi: Smi) {
|
||||
assert(str == 'foo');
|
||||
assert(smi == 7);
|
||||
return True;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user