Back out Bug 1113378 for a jsreftest failure on a CLOSED TREE.

This commit is contained in:
Sean Stangl 2015-01-14 14:17:21 -08:00
Родитель eb50bb4cde
Коммит 91b02b4017
5 изменённых файлов: 32 добавлений и 56 удалений

Просмотреть файл

@ -601,9 +601,6 @@ class FullParseHandler
pn->setInParens(true);
return pn;
}
ParseNode *setLikelyIIFE(ParseNode *pn) {
return setInParens(pn);
}
void setPrologue(ParseNode *pn) {
pn->pn_prologue = true;
}

Просмотреть файл

@ -511,7 +511,6 @@ class ParseNode
/* Boolean attributes. */
bool isInParens() const { return pn_parens; }
bool isLikelyIIFE() const { return isInParens(); }
void setInParens(bool enabled) { pn_parens = enabled; }
bool isUsed() const { return pn_used; }
void setUsed(bool enabled) { pn_used = enabled; }

Просмотреть файл

@ -2153,7 +2153,7 @@ template <typename ParseHandler>
typename ParseHandler::Node
Parser<ParseHandler>::functionDef(HandlePropertyName funName,
FunctionType type, FunctionSyntaxKind kind,
GeneratorKind generatorKind, InvokedPrediction invoked)
GeneratorKind generatorKind)
{
MOZ_ASSERT_IF(kind == Statement, funName);
@ -2162,9 +2162,6 @@ Parser<ParseHandler>::functionDef(HandlePropertyName funName,
if (!pn)
return null();
if (invoked)
pn = handler.setLikelyIIFE(pn);
bool bodyProcessed;
if (!checkFunctionDefinition(funName, &pn, kind, &bodyProcessed))
return null();
@ -2324,13 +2321,6 @@ Parser<FullParseHandler>::functionArgsAndBody(ParseNode *pn, HandleFunction fun,
// Try a syntax parse for this inner function.
do {
// If we're assuming this function is an IIFE, always perform a full
// parse to avoid the overhead of a lazy syntax-only parse. Although
// the prediction may be incorrect, IIFEs are common enough that it
// pays off for lots of code.
if (pn->isLikelyIIFE())
break;
Parser<SyntaxParseHandler> *parser = handler.syntaxParser;
if (!parser)
break;
@ -2645,7 +2635,7 @@ Parser<ParseHandler>::functionStmt()
template <typename ParseHandler>
typename ParseHandler::Node
Parser<ParseHandler>::functionExpr(InvokedPrediction invoked)
Parser<ParseHandler>::functionExpr()
{
MOZ_ASSERT(tokenStream.isCurrentTokenType(TOK_FUNCTION));
@ -2671,7 +2661,7 @@ Parser<ParseHandler>::functionExpr(InvokedPrediction invoked)
tokenStream.ungetToken();
}
return functionDef(name, Normal, Expression, generatorKind, invoked);
return functionDef(name, Normal, Expression, generatorKind);
}
/*
@ -4413,10 +4403,10 @@ Parser<SyntaxParseHandler>::exportDeclaration()
template <typename ParseHandler>
typename ParseHandler::Node
Parser<ParseHandler>::expressionStatement(InvokedPrediction invoked)
Parser<ParseHandler>::expressionStatement()
{
tokenStream.ungetToken();
Node pnexpr = expr(invoked);
Node pnexpr = expr();
if (!pnexpr)
return null();
if (!MatchOrInsertSemicolon(tokenStream))
@ -5894,9 +5884,6 @@ Parser<ParseHandler>::statement(bool canHaveDirectives)
return expressionStatement();
}
case TOK_NEW:
return expressionStatement(PredictInvoked);
default:
return expressionStatement();
}
@ -5904,9 +5891,9 @@ Parser<ParseHandler>::statement(bool canHaveDirectives)
template <typename ParseHandler>
typename ParseHandler::Node
Parser<ParseHandler>::expr(InvokedPrediction invoked)
Parser<ParseHandler>::expr()
{
Node pn = assignExpr(invoked);
Node pn = assignExpr();
if (!pn)
return null();
@ -6028,7 +6015,7 @@ Precedence(ParseNodeKind pnk) {
template <typename ParseHandler>
MOZ_ALWAYS_INLINE typename ParseHandler::Node
Parser<ParseHandler>::orExpr1(InvokedPrediction invoked)
Parser<ParseHandler>::orExpr1()
{
// Shift-reduce parser for the left-associative binary operator part of
// the JS syntax.
@ -6044,7 +6031,7 @@ Parser<ParseHandler>::orExpr1(InvokedPrediction invoked)
Node pn;
for (;;) {
pn = unaryExpr(invoked);
pn = unaryExpr();
if (!pn)
return pn;
@ -6094,9 +6081,9 @@ Parser<ParseHandler>::orExpr1(InvokedPrediction invoked)
template <typename ParseHandler>
MOZ_ALWAYS_INLINE typename ParseHandler::Node
Parser<ParseHandler>::condExpr1(InvokedPrediction invoked)
Parser<ParseHandler>::condExpr1()
{
Node condition = orExpr1(invoked);
Node condition = orExpr1();
if (!condition || !tokenStream.isCurrentTokenType(TOK_HOOK))
return condition;
@ -6195,7 +6182,7 @@ Parser<SyntaxParseHandler>::checkAndMarkAsAssignmentLhs(Node pn, AssignmentFlavo
template <typename ParseHandler>
typename ParseHandler::Node
Parser<ParseHandler>::assignExpr(InvokedPrediction invoked)
Parser<ParseHandler>::assignExpr()
{
JS_CHECK_RECURSION(context, return null());
@ -6247,7 +6234,7 @@ Parser<ParseHandler>::assignExpr(InvokedPrediction invoked)
TokenStream::Position start(keepAtoms);
tokenStream.tell(&start);
Node lhs = condExpr1(invoked);
Node lhs = condExpr1();
if (!lhs)
return null();
@ -6353,7 +6340,7 @@ Parser<ParseHandler>::unaryOpExpr(ParseNodeKind kind, JSOp op, uint32_t begin)
template <typename ParseHandler>
typename ParseHandler::Node
Parser<ParseHandler>::unaryExpr(InvokedPrediction invoked)
Parser<ParseHandler>::unaryExpr()
{
Node pn, pn2;
@ -6411,7 +6398,7 @@ Parser<ParseHandler>::unaryExpr(InvokedPrediction invoked)
}
default:
pn = memberExpr(tt, /* allowCallSyntax = */ true, invoked);
pn = memberExpr(tt, true);
if (!pn)
return null();
@ -7514,7 +7501,7 @@ Parser<ParseHandler>::argumentList(Node listNode, bool *isSpread)
template <typename ParseHandler>
typename ParseHandler::Node
Parser<ParseHandler>::memberExpr(TokenKind tt, bool allowCallSyntax, InvokedPrediction invoked)
Parser<ParseHandler>::memberExpr(TokenKind tt, bool allowCallSyntax)
{
MOZ_ASSERT(tokenStream.isCurrentTokenType(tt));
@ -7530,7 +7517,7 @@ Parser<ParseHandler>::memberExpr(TokenKind tt, bool allowCallSyntax, InvokedPred
if (!tokenStream.getToken(&tt, TokenStream::Operand))
return null();
Node ctorExpr = memberExpr(tt, false, PredictInvoked);
Node ctorExpr = memberExpr(tt, false);
if (!ctorExpr)
return null();
@ -7547,7 +7534,7 @@ Parser<ParseHandler>::memberExpr(TokenKind tt, bool allowCallSyntax, InvokedPred
handler.setOp(lhs, JSOP_SPREADNEW);
}
} else {
lhs = primaryExpr(tt, invoked);
lhs = primaryExpr(tt);
if (!lhs)
return null();
}
@ -8139,14 +8126,14 @@ Parser<ParseHandler>::methodDefinition(Node literal, Node propname, FunctionType
template <typename ParseHandler>
typename ParseHandler::Node
Parser<ParseHandler>::primaryExpr(TokenKind tt, InvokedPrediction invoked)
Parser<ParseHandler>::primaryExpr(TokenKind tt)
{
MOZ_ASSERT(tokenStream.isCurrentTokenType(tt));
JS_CHECK_RECURSION(context, return null());
switch (tt) {
case TOK_FUNCTION:
return functionExpr(invoked);
return functionExpr();
case TOK_LB:
return arrayInitializer();
@ -8280,7 +8267,7 @@ Parser<ParseHandler>::parenExprOrGeneratorComprehension()
*/
bool oldParsingForInit = pc->parsingForInit;
pc->parsingForInit = false;
Node pn = expr(PredictInvoked);
Node pn = expr();
pc->parsingForInit = oldParsingForInit;
if (!pn)
@ -8358,7 +8345,7 @@ Parser<ParseHandler>::exprInParens()
*/
bool oldParsingForInit = pc->parsingForInit;
pc->parsingForInit = false;
Node pn = expr(PredictInvoked);
Node pn = expr();
pc->parsingForInit = oldParsingForInit;
if (!pn)

Просмотреть файл

@ -518,9 +518,6 @@ class Parser : private JS::AutoGCRooter, public StrictModeGetter
return tokenStream.options();
}
private:
enum InvokedPrediction { PredictUninvoked = false, PredictInvoked = true };
private:
/*
* JS parsers, from lowest to highest precedence.
@ -539,7 +536,7 @@ class Parser : private JS::AutoGCRooter, public StrictModeGetter
* suffix) and a never-inlined version (with an 'n' suffix).
*/
Node functionStmt();
Node functionExpr(InvokedPrediction invoked = PredictUninvoked);
Node functionExpr();
Node statements();
Node blockStatement();
@ -561,20 +558,19 @@ class Parser : private JS::AutoGCRooter, public StrictModeGetter
Node letStatement();
Node importDeclaration();
Node exportDeclaration();
Node expressionStatement(InvokedPrediction invoked = PredictUninvoked);
Node expressionStatement();
Node variables(ParseNodeKind kind, bool *psimple = nullptr,
StaticBlockObject *blockObj = nullptr,
VarContext varContext = HoistVars);
Node expr(InvokedPrediction invoked = PredictUninvoked);
Node assignExpr(InvokedPrediction invoked = PredictUninvoked);
Node expr();
Node assignExpr();
Node assignExprWithoutYield(unsigned err);
Node yieldExpression();
Node condExpr1(InvokedPrediction invoked = PredictUninvoked);
Node orExpr1(InvokedPrediction invoked = PredictUninvoked);
Node unaryExpr(InvokedPrediction invoked = PredictUninvoked);
Node memberExpr(TokenKind tt, bool allowCallSyntax,
InvokedPrediction invoked = PredictUninvoked);
Node primaryExpr(TokenKind tt, InvokedPrediction invoked = PredictUninvoked);
Node condExpr1();
Node orExpr1();
Node unaryExpr();
Node memberExpr(TokenKind tt, bool allowCallSyntax);
Node primaryExpr(TokenKind tt);
Node parenExprOrGeneratorComprehension();
Node exprInParens();
@ -588,7 +584,7 @@ class Parser : private JS::AutoGCRooter, public StrictModeGetter
bool *hasRest);
Node functionDef(HandlePropertyName name, FunctionType type, FunctionSyntaxKind kind,
GeneratorKind generatorKind, InvokedPrediction invoked = PredictUninvoked);
GeneratorKind generatorKind);
bool functionArgsAndBody(Node pn, HandleFunction fun,
FunctionType type, FunctionSyntaxKind kind,
GeneratorKind generatorKind,

Просмотреть файл

@ -231,9 +231,6 @@ class SyntaxParseHandler
// strict mode parsing.
return (pn == NodeString) ? NodeGeneric : pn;
}
Node setLikelyIIFE(Node pn) {
return pn; // Remain in syntax-parse mode.
}
void setPrologue(Node pn) {}
bool isConstant(Node pn) { return false; }