[parser] removed redundant undefined check of for-of iterator
Removed a redundant check: If completion is not normal, then #iterator cannot be undefined. Review-Url: https://codereview.chromium.org/2533803002 Cr-Commit-Position: refs/heads/master@{#41321}
This commit is contained in:
parent
e0d608a2b1
commit
08931d45ba
@ -5461,7 +5461,7 @@ Statement* Parser::FinalizeForOfStatement(ForOfStatement* loop,
|
||||
// %ReThrow(e);
|
||||
// }
|
||||
// } finally {
|
||||
// if (!(completion === kNormalCompletion || IS_UNDEFINED(#iterator))) {
|
||||
// if (!(completion === kNormalCompletion)) {
|
||||
// #BuildIteratorCloseForCompletion(#iterator, completion)
|
||||
// }
|
||||
// }
|
||||
@ -5472,18 +5472,13 @@ Statement* Parser::FinalizeForOfStatement(ForOfStatement* loop,
|
||||
|
||||
const int nopos = kNoSourcePosition;
|
||||
|
||||
// !(completion === kNormalCompletion || IS_UNDEFINED(#iterator))
|
||||
// !(completion === kNormalCompletion)
|
||||
Expression* closing_condition;
|
||||
{
|
||||
Expression* lhs = factory()->NewCompareOperation(
|
||||
Expression* cmp = factory()->NewCompareOperation(
|
||||
Token::EQ_STRICT, factory()->NewVariableProxy(var_completion),
|
||||
factory()->NewSmiLiteral(Parser::kNormalCompletion, nopos), nopos);
|
||||
Expression* rhs = factory()->NewCompareOperation(
|
||||
Token::EQ_STRICT, factory()->NewVariableProxy(loop->iterator()),
|
||||
factory()->NewUndefinedLiteral(nopos), nopos);
|
||||
closing_condition = factory()->NewUnaryOperation(
|
||||
Token::NOT, factory()->NewBinaryOperation(Token::OR, lhs, rhs, nopos),
|
||||
nopos);
|
||||
closing_condition = factory()->NewUnaryOperation(Token::NOT, cmp, nopos);
|
||||
}
|
||||
|
||||
Block* final_loop = factory()->NewBlock(nullptr, 2, false, nopos);
|
||||
|
@ -11,7 +11,7 @@ snippet: "
|
||||
"
|
||||
frame size: 15
|
||||
parameter count: 1
|
||||
bytecode array length: 274
|
||||
bytecode array length: 268
|
||||
bytecodes: [
|
||||
/* 30 E> */ B(StackCheck),
|
||||
B(LdaZero),
|
||||
@ -71,24 +71,21 @@ bytecodes: [
|
||||
B(Star), R(11),
|
||||
B(LdaZero),
|
||||
B(TestEqualStrict), R(4), U8(15),
|
||||
B(JumpIfTrue), U8(119),
|
||||
B(LdaUndefined),
|
||||
B(TestEqualStrict), R(2), U8(16),
|
||||
B(JumpIfTrue), U8(113),
|
||||
B(LdaNamedProperty), R(2), U8(7), U8(17),
|
||||
B(LdaNamedProperty), R(2), U8(7), U8(16),
|
||||
B(Star), R(6),
|
||||
B(LdaNull),
|
||||
B(TestEqual), R(6), U8(19),
|
||||
B(TestEqual), R(6), U8(18),
|
||||
B(JumpIfFalse), U8(4),
|
||||
B(Jump), U8(99),
|
||||
B(LdaSmi), U8(1),
|
||||
B(TestEqualStrict), R(4), U8(20),
|
||||
B(TestEqualStrict), R(4), U8(19),
|
||||
B(JumpIfFalse), U8(67),
|
||||
B(Ldar), R(6),
|
||||
B(TypeOf),
|
||||
B(Star), R(12),
|
||||
B(LdaConstant), U8(8),
|
||||
B(TestEqualStrict), R(12), U8(21),
|
||||
B(TestEqualStrict), R(12), U8(20),
|
||||
B(JumpIfFalse), U8(4),
|
||||
B(Jump), U8(18),
|
||||
B(Wide), B(LdaSmi), U16(130),
|
||||
@ -147,7 +144,7 @@ constant pool: [
|
||||
handlers: [
|
||||
[7, 120, 126],
|
||||
[10, 84, 86],
|
||||
[201, 211, 213],
|
||||
[195, 205, 207],
|
||||
]
|
||||
|
||||
---
|
||||
@ -157,7 +154,7 @@ snippet: "
|
||||
"
|
||||
frame size: 16
|
||||
parameter count: 1
|
||||
bytecode array length: 285
|
||||
bytecode array length: 279
|
||||
bytecodes: [
|
||||
/* 30 E> */ B(StackCheck),
|
||||
/* 42 S> */ B(LdaConstant), U8(0),
|
||||
@ -218,24 +215,21 @@ bytecodes: [
|
||||
B(Star), R(12),
|
||||
B(LdaZero),
|
||||
B(TestEqualStrict), R(5), U8(15),
|
||||
B(JumpIfTrue), U8(119),
|
||||
B(LdaUndefined),
|
||||
B(TestEqualStrict), R(3), U8(16),
|
||||
B(JumpIfTrue), U8(113),
|
||||
B(LdaNamedProperty), R(3), U8(7), U8(17),
|
||||
B(LdaNamedProperty), R(3), U8(7), U8(16),
|
||||
B(Star), R(7),
|
||||
B(LdaNull),
|
||||
B(TestEqual), R(7), U8(19),
|
||||
B(TestEqual), R(7), U8(18),
|
||||
B(JumpIfFalse), U8(4),
|
||||
B(Jump), U8(99),
|
||||
B(LdaSmi), U8(1),
|
||||
B(TestEqualStrict), R(5), U8(20),
|
||||
B(TestEqualStrict), R(5), U8(19),
|
||||
B(JumpIfFalse), U8(67),
|
||||
B(Ldar), R(7),
|
||||
B(TypeOf),
|
||||
B(Star), R(13),
|
||||
B(LdaConstant), U8(8),
|
||||
B(TestEqualStrict), R(13), U8(21),
|
||||
B(TestEqualStrict), R(13), U8(20),
|
||||
B(JumpIfFalse), U8(4),
|
||||
B(Jump), U8(18),
|
||||
B(Wide), B(LdaSmi), U16(130),
|
||||
@ -299,7 +293,7 @@ constant pool: [
|
||||
handlers: [
|
||||
[11, 120, 126],
|
||||
[14, 84, 86],
|
||||
[202, 212, 214],
|
||||
[196, 206, 208],
|
||||
]
|
||||
|
||||
---
|
||||
@ -311,7 +305,7 @@ snippet: "
|
||||
"
|
||||
frame size: 15
|
||||
parameter count: 1
|
||||
bytecode array length: 292
|
||||
bytecode array length: 286
|
||||
bytecodes: [
|
||||
/* 30 E> */ B(StackCheck),
|
||||
B(LdaZero),
|
||||
@ -379,24 +373,21 @@ bytecodes: [
|
||||
B(Star), R(11),
|
||||
B(LdaZero),
|
||||
B(TestEqualStrict), R(4), U8(17),
|
||||
B(JumpIfTrue), U8(119),
|
||||
B(LdaUndefined),
|
||||
B(TestEqualStrict), R(2), U8(18),
|
||||
B(JumpIfTrue), U8(113),
|
||||
B(LdaNamedProperty), R(2), U8(7), U8(19),
|
||||
B(LdaNamedProperty), R(2), U8(7), U8(18),
|
||||
B(Star), R(6),
|
||||
B(LdaNull),
|
||||
B(TestEqual), R(6), U8(21),
|
||||
B(TestEqual), R(6), U8(20),
|
||||
B(JumpIfFalse), U8(4),
|
||||
B(Jump), U8(99),
|
||||
B(LdaSmi), U8(1),
|
||||
B(TestEqualStrict), R(4), U8(22),
|
||||
B(TestEqualStrict), R(4), U8(21),
|
||||
B(JumpIfFalse), U8(67),
|
||||
B(Ldar), R(6),
|
||||
B(TypeOf),
|
||||
B(Star), R(12),
|
||||
B(LdaConstant), U8(8),
|
||||
B(TestEqualStrict), R(12), U8(23),
|
||||
B(TestEqualStrict), R(12), U8(22),
|
||||
B(JumpIfFalse), U8(4),
|
||||
B(Jump), U8(18),
|
||||
B(Wide), B(LdaSmi), U16(130),
|
||||
@ -455,7 +446,7 @@ constant pool: [
|
||||
handlers: [
|
||||
[7, 138, 144],
|
||||
[10, 102, 104],
|
||||
[219, 229, 231],
|
||||
[213, 223, 225],
|
||||
]
|
||||
|
||||
---
|
||||
@ -465,7 +456,7 @@ snippet: "
|
||||
"
|
||||
frame size: 14
|
||||
parameter count: 1
|
||||
bytecode array length: 299
|
||||
bytecode array length: 293
|
||||
bytecodes: [
|
||||
/* 30 E> */ B(StackCheck),
|
||||
/* 42 S> */ B(CreateObjectLiteral), U8(0), U8(0), U8(1), R(8),
|
||||
@ -530,24 +521,21 @@ bytecodes: [
|
||||
B(Star), R(10),
|
||||
B(LdaZero),
|
||||
B(TestEqualStrict), R(3), U8(19),
|
||||
B(JumpIfTrue), U8(119),
|
||||
B(LdaUndefined),
|
||||
B(TestEqualStrict), R(1), U8(20),
|
||||
B(JumpIfTrue), U8(113),
|
||||
B(LdaNamedProperty), R(1), U8(9), U8(21),
|
||||
B(LdaNamedProperty), R(1), U8(9), U8(20),
|
||||
B(Star), R(5),
|
||||
B(LdaNull),
|
||||
B(TestEqual), R(5), U8(23),
|
||||
B(TestEqual), R(5), U8(22),
|
||||
B(JumpIfFalse), U8(4),
|
||||
B(Jump), U8(99),
|
||||
B(LdaSmi), U8(1),
|
||||
B(TestEqualStrict), R(3), U8(24),
|
||||
B(TestEqualStrict), R(3), U8(23),
|
||||
B(JumpIfFalse), U8(67),
|
||||
B(Ldar), R(5),
|
||||
B(TypeOf),
|
||||
B(Star), R(11),
|
||||
B(LdaConstant), U8(10),
|
||||
B(TestEqualStrict), R(11), U8(25),
|
||||
B(TestEqualStrict), R(11), U8(24),
|
||||
B(JumpIfFalse), U8(4),
|
||||
B(Jump), U8(18),
|
||||
B(Wide), B(LdaSmi), U16(130),
|
||||
@ -613,6 +601,6 @@ constant pool: [
|
||||
handlers: [
|
||||
[15, 134, 140],
|
||||
[18, 98, 100],
|
||||
[216, 226, 228],
|
||||
[210, 220, 222],
|
||||
]
|
||||
|
||||
|
@ -277,7 +277,7 @@ snippet: "
|
||||
"
|
||||
frame size: 17
|
||||
parameter count: 1
|
||||
bytecode array length: 783
|
||||
bytecode array length: 771
|
||||
bytecodes: [
|
||||
B(Ldar), R(new_target),
|
||||
B(JumpIfUndefined), U8(28),
|
||||
@ -332,7 +332,7 @@ bytecodes: [
|
||||
B(Star), R(5),
|
||||
B(LdaZero),
|
||||
B(Star), R(4),
|
||||
B(JumpConstant), U8(19),
|
||||
B(JumpConstant), U8(18),
|
||||
B(Ldar), R(9),
|
||||
/* 11 E> */ B(Throw),
|
||||
B(Ldar), R(closure),
|
||||
@ -471,29 +471,24 @@ bytecodes: [
|
||||
B(JumpIfTrueConstant), U8(17),
|
||||
B(LdaContextSlot), R(1), U8(7), U8(0),
|
||||
B(Star), R(10),
|
||||
B(LdaUndefined),
|
||||
B(TestEqualStrict), R(10), U8(16),
|
||||
B(JumpIfTrueConstant), U8(18),
|
||||
B(LdaContextSlot), R(1), U8(7), U8(0),
|
||||
B(Star), R(10),
|
||||
B(LdaNamedProperty), R(10), U8(12), U8(17),
|
||||
B(LdaNamedProperty), R(10), U8(12), U8(16),
|
||||
B(StaContextSlot), R(1), U8(11), U8(0),
|
||||
B(LdaContextSlot), R(1), U8(11), U8(0),
|
||||
B(Star), R(10),
|
||||
B(LdaNull),
|
||||
B(TestEqual), R(10), U8(19),
|
||||
B(TestEqual), R(10), U8(18),
|
||||
B(JumpIfFalse), U8(4),
|
||||
B(JumpConstant), U8(16),
|
||||
B(LdaContextSlot), R(1), U8(9), U8(0),
|
||||
B(Star), R(10),
|
||||
B(LdaSmi), U8(1),
|
||||
B(TestEqualStrict), R(10), U8(20),
|
||||
B(TestEqualStrict), R(10), U8(19),
|
||||
B(JumpIfFalse), U8(75),
|
||||
B(LdaContextSlot), R(1), U8(11), U8(0),
|
||||
B(TypeOf),
|
||||
B(Star), R(10),
|
||||
B(LdaConstant), U8(13),
|
||||
B(TestEqualStrict), R(10), U8(21),
|
||||
B(TestEqualStrict), R(10), U8(20),
|
||||
B(JumpIfFalse), U8(4),
|
||||
B(Jump), U8(18),
|
||||
B(Wide), B(LdaSmi), U16(130),
|
||||
@ -625,14 +620,13 @@ constant pool: [
|
||||
ONE_BYTE_INTERNALIZED_STRING_TYPE [""],
|
||||
FIXED_ARRAY_TYPE,
|
||||
Smi [133],
|
||||
Smi [173],
|
||||
Smi [161],
|
||||
Smi [593],
|
||||
Smi [581],
|
||||
]
|
||||
handlers: [
|
||||
[46, 702, 708],
|
||||
[46, 690, 696],
|
||||
[143, 438, 444],
|
||||
[146, 394, 396],
|
||||
[554, 570, 572],
|
||||
[542, 558, 560],
|
||||
]
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user