Bug 883333, part 2 - Rearrange statement parsers to the order they appear in the ES6 draft. r=Waldo.

--HG--
extra : rebase_source : cb0f15ae7d085a95879e26a52102ac1d1ed16c60
This commit is contained in:
Jason Orendorff 2013-06-21 08:17:58 -05:00
parent 65f267b64a
commit 2f1998b57c
4 changed files with 633 additions and 635 deletions

View File

@ -199,35 +199,37 @@ class FullParseHandler
return new_<UnaryNode>(PNK_SEMI, JSOP_NOP, TokenPos::make(expr->pn_pos.begin, end), expr);
}
ParseNode *newCaseOrDefault(uint32_t begin, ParseNode *expr, ParseNode *body) {
TokenPos pos = TokenPos::make(begin, body->pn_pos.end);
return new_<BinaryNode>(expr ? PNK_CASE : PNK_DEFAULT, JSOP_NOP, pos, expr, body);
}
ParseNode *newContinue(PropertyName *label, uint32_t begin, uint32_t end) {
return new_<ContinueStatement>(label, begin, end);
}
ParseNode *newBreak(PropertyName *label, uint32_t begin, uint32_t end) {
return new_<BreakStatement>(label, begin, end);
}
ParseNode *newReturnStatement(ParseNode *expr, const TokenPos &pos) {
JS_ASSERT_IF(expr, pos.encloses(expr->pn_pos));
return new_<UnaryNode>(PNK_RETURN, JSOP_RETURN, pos, expr);
}
ParseNode *newLabeledStatement(PropertyName *label, ParseNode *stmt, uint32_t begin) {
return new_<LabeledStatement>(label, stmt, begin);
}
ParseNode *newThrowStatement(ParseNode *expr, const TokenPos &pos) {
JS_ASSERT(pos.encloses(expr->pn_pos));
return new_<UnaryNode>(PNK_THROW, JSOP_THROW, pos, expr);
}
ParseNode *newLabeledStatement(PropertyName *label, ParseNode *stmt, uint32_t begin) {
return new_<LabeledStatement>(label, stmt, begin);
}
ParseNode *newCaseOrDefault(uint32_t begin, ParseNode *expr, ParseNode *body) {
TokenPos pos = TokenPos::make(begin, body->pn_pos.end);
return new_<BinaryNode>(expr ? PNK_CASE : PNK_DEFAULT, JSOP_NOP, pos, expr, body);
}
ParseNode *newBreak(PropertyName *label, uint32_t begin, uint32_t end) {
return new_<BreakStatement>(label, begin, end);
}
ParseNode *newContinue(PropertyName *label, uint32_t begin, uint32_t end) {
return new_<ContinueStatement>(label, begin, end);
}
ParseNode *newDebuggerStatement(const TokenPos &pos) {
return new_<DebuggerStatement>(pos);
}
ParseNode *newPropertyAccess(ParseNode *pn, PropertyName *name, uint32_t end) {
return new_<PropertyAccess>(pn, name, pn->pn_pos.begin, end);
}

File diff suppressed because it is too large Load Diff

View File

@ -417,11 +417,11 @@ struct Parser : private AutoGCRooter, public StrictModeGetter
Node functionExpr();
Node statements();
Node switchStatement();
Node forStatement();
Node switchStatement();
Node withStatement();
Node labeledStatement();
Node tryStatement();
Node withStatement();
#if JS_HAS_BLOCK_SCOPE
Node letStatement();
#endif

View File

@ -106,27 +106,23 @@ class SyntaxParseHandler
return expr == NodeString ? NodeStringExprStatement : NodeGeneric;
}
Node newCaseOrDefault(uint32_t begin, Node expr, Node body) { return NodeGeneric; }
Node newContinue(PropertyName *label, uint32_t begin, uint32_t end) { return NodeGeneric; }
Node newBreak(PropertyName *label, uint32_t begin, uint32_t end) { return NodeGeneric; }
Node newReturnStatement(Node expr, const TokenPos &pos) { return NodeGeneric; }
Node newThrowStatement(Node expr, const TokenPos &pos) { return NodeGeneric; }
Node newLabeledStatement(PropertyName *label, Node stmt, uint32_t begin) {
return NodeGeneric;
}
Node newCaseOrDefault(uint32_t begin, Node expr, Node body) {
return NodeGeneric;
}
Node newBreak(PropertyName *label, uint32_t begin, uint32_t end) {
return NodeGeneric;
}
Node newContinue(PropertyName *label, uint32_t begin, uint32_t end) {
return NodeGeneric;
}
Node newThrowStatement(Node expr, const TokenPos &pos) { return NodeGeneric; }
Node newDebuggerStatement(const TokenPos &pos) { return NodeGeneric; }
Node newPropertyAccess(Node pn, PropertyName *name, uint32_t end)
{
Node newPropertyAccess(Node pn, PropertyName *name, uint32_t end) {
lastAtom = name;
return NodeGetProp;
}
Node newPropertyByValue(Node pn, Node kid, uint32_t end) { return NodeLValue; }
bool addCatchBlock(Node catchList, Node letBlock,