mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-26 19:55:39 +00:00
Bug 1319416 - Convert Parser::{cond,or}Expr1 to plain old Parser::{cond,or}Expr. r=arai
--HG-- extra : rebase_source : 57e5cbc300a1ee6e36d27169e90fc239954e11d7
This commit is contained in:
parent
0f07840ce6
commit
5a8c6c51c8
@ -8041,10 +8041,10 @@ Precedence(ParseNodeKind pnk) {
|
||||
|
||||
template <class ParseHandler, typename CharT>
|
||||
MOZ_ALWAYS_INLINE typename ParseHandler::Node
|
||||
Parser<ParseHandler, CharT>::orExpr1(InHandling inHandling, YieldHandling yieldHandling,
|
||||
TripledotHandling tripledotHandling,
|
||||
PossibleError* possibleError,
|
||||
InvokedPrediction invoked /* = PredictUninvoked */)
|
||||
Parser<ParseHandler, CharT>::orExpr(InHandling inHandling, YieldHandling yieldHandling,
|
||||
TripledotHandling tripledotHandling,
|
||||
PossibleError* possibleError,
|
||||
InvokedPrediction invoked /* = PredictUninvoked */)
|
||||
{
|
||||
// Shift-reduce parser for the binary operator part of the JS expression
|
||||
// syntax.
|
||||
@ -8058,7 +8058,7 @@ Parser<ParseHandler, CharT>::orExpr1(InHandling inHandling, YieldHandling yieldH
|
||||
for (;;) {
|
||||
pn = unaryExpr(yieldHandling, tripledotHandling, possibleError, invoked);
|
||||
if (!pn)
|
||||
return pn;
|
||||
return null();
|
||||
|
||||
// If a binary operator follows, consume it and compute the
|
||||
// corresponding operator.
|
||||
@ -8098,7 +8098,7 @@ Parser<ParseHandler, CharT>::orExpr1(InHandling inHandling, YieldHandling yieldH
|
||||
ParseNodeKind combiningPnk = kindStack[depth];
|
||||
pn = handler.appendOrCreateList(combiningPnk, nodeStack[depth], pn, pc);
|
||||
if (!pn)
|
||||
return pn;
|
||||
return null();
|
||||
}
|
||||
|
||||
if (pnk == PNK_LIMIT)
|
||||
@ -8110,20 +8110,27 @@ Parser<ParseHandler, CharT>::orExpr1(InHandling inHandling, YieldHandling yieldH
|
||||
MOZ_ASSERT(depth <= PRECEDENCE_CLASSES);
|
||||
}
|
||||
|
||||
tokenStream.ungetToken();
|
||||
|
||||
MOZ_ASSERT(depth == 0);
|
||||
return pn;
|
||||
}
|
||||
|
||||
template <class ParseHandler, typename CharT>
|
||||
MOZ_ALWAYS_INLINE typename ParseHandler::Node
|
||||
Parser<ParseHandler, CharT>::condExpr1(InHandling inHandling, YieldHandling yieldHandling,
|
||||
TripledotHandling tripledotHandling,
|
||||
PossibleError* possibleError,
|
||||
InvokedPrediction invoked /* = PredictUninvoked */)
|
||||
Parser<ParseHandler, CharT>::condExpr(InHandling inHandling, YieldHandling yieldHandling,
|
||||
TripledotHandling tripledotHandling,
|
||||
PossibleError* possibleError,
|
||||
InvokedPrediction invoked /* = PredictUninvoked */)
|
||||
{
|
||||
Node condition = orExpr1(inHandling, yieldHandling, tripledotHandling, possibleError, invoked);
|
||||
Node condition = orExpr(inHandling, yieldHandling, tripledotHandling, possibleError, invoked);
|
||||
if (!condition)
|
||||
return null();
|
||||
|
||||
if (!condition || !tokenStream.isCurrentTokenType(TOK_HOOK))
|
||||
bool matched;
|
||||
if (!tokenStream.matchToken(&matched, TOK_HOOK))
|
||||
return null();
|
||||
if (!matched)
|
||||
return condition;
|
||||
|
||||
Node thenExpr = assignExpr(InAllowed, yieldHandling, TripledotProhibited);
|
||||
@ -8136,10 +8143,6 @@ Parser<ParseHandler, CharT>::condExpr1(InHandling inHandling, YieldHandling yiel
|
||||
if (!elseExpr)
|
||||
return null();
|
||||
|
||||
// Advance to the next token; the caller is responsible for interpreting it.
|
||||
TokenKind ignored;
|
||||
if (!tokenStream.getToken(&ignored))
|
||||
return null();
|
||||
return handler.newConditional(condition, thenExpr, elseExpr);
|
||||
}
|
||||
|
||||
@ -8161,7 +8164,7 @@ Parser<ParseHandler, CharT>::assignExpr(InHandling inHandling, YieldHandling yie
|
||||
// numeric arrays, such as some Kraken benchmarks, it happens more often.)
|
||||
//
|
||||
// In such cases, we can avoid the full expression parsing route through
|
||||
// assignExpr(), condExpr1(), orExpr1(), unaryExpr(), memberExpr(), and
|
||||
// assignExpr(), condExpr(), orExpr(), unaryExpr(), memberExpr(), and
|
||||
// primaryExpr().
|
||||
|
||||
TokenKind tt;
|
||||
@ -8244,14 +8247,16 @@ Parser<ParseHandler, CharT>::assignExpr(InHandling inHandling, YieldHandling yie
|
||||
return null();
|
||||
}
|
||||
} else {
|
||||
lhs = condExpr1(inHandling, yieldHandling, tripledotHandling, &possibleErrorInner, invoked);
|
||||
if (!lhs) {
|
||||
lhs = condExpr(inHandling, yieldHandling, tripledotHandling, &possibleErrorInner, invoked);
|
||||
if (!lhs)
|
||||
return null();
|
||||
|
||||
if (!tokenStream.getToken(&tt))
|
||||
return null();
|
||||
}
|
||||
}
|
||||
|
||||
ParseNodeKind kind;
|
||||
switch (tokenStream.currentToken().type) {
|
||||
switch (tt) {
|
||||
case TOK_ASSIGN: kind = PNK_ASSIGN; break;
|
||||
case TOK_ADDASSIGN: kind = PNK_ADDASSIGN; break;
|
||||
case TOK_SUBASSIGN: kind = PNK_SUBASSIGN; break;
|
||||
|
@ -737,14 +737,14 @@ class Parser final : public ParserBase, private JS::AutoGCRooter
|
||||
InvokedPrediction invoked = PredictUninvoked);
|
||||
Node assignExprWithoutYieldOrAwait(YieldHandling yieldHandling);
|
||||
Node yieldExpression(InHandling inHandling);
|
||||
Node condExpr1(InHandling inHandling, YieldHandling yieldHandling,
|
||||
TripledotHandling tripledotHandling,
|
||||
PossibleError* possibleError,
|
||||
InvokedPrediction invoked = PredictUninvoked);
|
||||
Node orExpr1(InHandling inHandling, YieldHandling yieldHandling,
|
||||
TripledotHandling tripledotHandling,
|
||||
PossibleError* possibleError,
|
||||
InvokedPrediction invoked = PredictUninvoked);
|
||||
Node condExpr(InHandling inHandling, YieldHandling yieldHandling,
|
||||
TripledotHandling tripledotHandling,
|
||||
PossibleError* possibleError,
|
||||
InvokedPrediction invoked = PredictUninvoked);
|
||||
Node orExpr(InHandling inHandling, YieldHandling yieldHandling,
|
||||
TripledotHandling tripledotHandling,
|
||||
PossibleError* possibleError,
|
||||
InvokedPrediction invoked = PredictUninvoked);
|
||||
Node unaryExpr(YieldHandling yieldHandling, TripledotHandling tripledotHandling,
|
||||
PossibleError* possibleError = nullptr,
|
||||
InvokedPrediction invoked = PredictUninvoked);
|
||||
|
Loading…
Reference in New Issue
Block a user