Bug 1459384 - Make FinishToken into a member function, not a lambda. r=arai

--HG--
extra : rebase_source : b96aae0b3d04555edb03c772358f04bcfff217e7
This commit is contained in:
Jeff Walden 2018-05-03 22:02:33 -07:00
Родитель 1ff4a82056
Коммит 0c6a64819c
2 изменённых файлов: 51 добавлений и 42 удалений

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

@ -1638,6 +1638,26 @@ TokenStreamSpecific<CharT, AnyCharsAccess>::decimalNumber(int c, Token* tp,
return true; return true;
} }
template<typename CharT, class AnyCharsAccess>
void
GeneralTokenStreamChars<CharT, AnyCharsAccess>::finishToken(TokenKind* kind, Token* token,
TokenStreamShared::Modifier modifier)
{
anyCharsAccess().flags.isDirtyLine = true;
token->pos.end = sourceUnits.offset();
#ifdef DEBUG
// Save the modifier used to get this token, so that if an ungetToken()
// occurs and then the token is re-gotten (or peeked, etc.), we can assert
// that both gets have used the same modifiers.
token->modifier = modifier;
token->modifierException = TokenStreamShared::NoException;
#endif
MOZ_ASSERT(IsTokenSane(token));
*kind = token->type;
}
template<typename CharT, class AnyCharsAccess> template<typename CharT, class AnyCharsAccess>
MOZ_MUST_USE bool MOZ_MUST_USE bool
TokenStreamSpecific<CharT, AnyCharsAccess>::getTokenInternal(TokenKind* const ttp, TokenStreamSpecific<CharT, AnyCharsAccess>::getTokenInternal(TokenKind* const ttp,
@ -1646,20 +1666,6 @@ TokenStreamSpecific<CharT, AnyCharsAccess>::getTokenInternal(TokenKind* const tt
// Assume we'll fail. Success cases will overwrite this in |FinishToken|. // Assume we'll fail. Success cases will overwrite this in |FinishToken|.
MOZ_MAKE_MEM_UNDEFINED(ttp, sizeof(*ttp)); MOZ_MAKE_MEM_UNDEFINED(ttp, sizeof(*ttp));
auto FinishToken = [this](TokenKind* ttp, Modifier modifier, Token* tp) {
this->anyCharsAccess().flags.isDirtyLine = true;
tp->pos.end = this->sourceUnits.offset();
#ifdef DEBUG
// Save the modifier used to get this token, so that if an ungetToken()
// occurs and then the token is re-gotten (or peeked, etc.), we can assert
// that both gets have used the same modifiers.
tp->modifier = modifier;
tp->modifierException = NoException;
#endif
MOZ_ASSERT(IsTokenSane(tp));
*ttp = tp->type;
};
// Check if in the middle of a template string. Have to get this out of // Check if in the middle of a template string. Have to get this out of
// the way first. // the way first.
if (MOZ_UNLIKELY(modifier == TemplateTail)) { if (MOZ_UNLIKELY(modifier == TemplateTail)) {
@ -1667,7 +1673,7 @@ TokenStreamSpecific<CharT, AnyCharsAccess>::getTokenInternal(TokenKind* const tt
if (!getStringOrTemplateToken('`', &tp)) if (!getStringOrTemplateToken('`', &tp))
return false; return false;
FinishToken(ttp, modifier, tp); finishToken(ttp, tp, modifier);
return true; return true;
} }
@ -1679,7 +1685,7 @@ TokenStreamSpecific<CharT, AnyCharsAccess>::getTokenInternal(TokenKind* const tt
Token* tp = newToken(start); Token* tp = newToken(start);
tp->type = TokenKind::Eof; tp->type = TokenKind::Eof;
anyCharsAccess().flags.isEOF = true; anyCharsAccess().flags.isEOF = true;
FinishToken(ttp, modifier, tp); finishToken(ttp, tp, modifier);
return true; return true;
} }
@ -1722,7 +1728,7 @@ TokenStreamSpecific<CharT, AnyCharsAccess>::getTokenInternal(TokenKind* const tt
if (!identifierName(tp, identStart, IdentifierEscapes::None)) if (!identifierName(tp, identStart, IdentifierEscapes::None))
return false; return false;
FinishToken(ttp, modifier, tp); finishToken(ttp, tp, modifier);
return true; return true;
} }
@ -1734,7 +1740,7 @@ TokenStreamSpecific<CharT, AnyCharsAccess>::getTokenInternal(TokenKind* const tt
if (!identifierName(tp, identStart, IdentifierEscapes::None)) if (!identifierName(tp, identStart, IdentifierEscapes::None))
return false; return false;
FinishToken(ttp, modifier, tp); finishToken(ttp, tp, modifier);
return true; return true;
} }
@ -1770,7 +1776,7 @@ TokenStreamSpecific<CharT, AnyCharsAccess>::getTokenInternal(TokenKind* const tt
TokenStart start(sourceUnits, -1); TokenStart start(sourceUnits, -1);
Token* tp = newToken(start); Token* tp = newToken(start);
tp->type = TokenKind(c1kind); tp->type = TokenKind(c1kind);
FinishToken(ttp, modifier, tp); finishToken(ttp, tp, modifier);
return true; return true;
} }
@ -1791,7 +1797,7 @@ TokenStreamSpecific<CharT, AnyCharsAccess>::getTokenInternal(TokenKind* const tt
return false; return false;
} }
FinishToken(ttp, modifier, tp); finishToken(ttp, tp, modifier);
return true; return true;
} }
@ -1805,7 +1811,7 @@ TokenStreamSpecific<CharT, AnyCharsAccess>::getTokenInternal(TokenKind* const tt
if (!decimalNumber(c, tp, numStart)) if (!decimalNumber(c, tp, numStart))
return false; return false;
FinishToken(ttp, modifier, tp); finishToken(ttp, tp, modifier);
return true; return true;
} }
@ -1816,7 +1822,7 @@ TokenStreamSpecific<CharT, AnyCharsAccess>::getTokenInternal(TokenKind* const tt
if (!getStringOrTemplateToken(static_cast<char>(c), &tp)) if (!getStringOrTemplateToken(static_cast<char>(c), &tp))
return false; return false;
FinishToken(ttp, modifier, tp); finishToken(ttp, tp, modifier);
return true; return true;
} }
@ -1910,7 +1916,7 @@ TokenStreamSpecific<CharT, AnyCharsAccess>::getTokenInternal(TokenKind* const tt
if (!decimalNumber(c, tp, numStart)) if (!decimalNumber(c, tp, numStart))
return false; return false;
FinishToken(ttp, modifier, tp); finishToken(ttp, tp, modifier);
return true; return true;
} }
@ -1923,7 +1929,7 @@ TokenStreamSpecific<CharT, AnyCharsAccess>::getTokenInternal(TokenKind* const tt
if (!decimalNumber(c, tp, numStart)) if (!decimalNumber(c, tp, numStart))
return false; return false;
FinishToken(ttp, modifier, tp); finishToken(ttp, tp, modifier);
return true; return true;
} }
ungetCharIgnoreEOL(c); ungetCharIgnoreEOL(c);
@ -1967,7 +1973,7 @@ TokenStreamSpecific<CharT, AnyCharsAccess>::getTokenInternal(TokenKind* const tt
tp->type = TokenKind::Number; tp->type = TokenKind::Number;
tp->setNumber(dval, NoDecimal); tp->setNumber(dval, NoDecimal);
FinishToken(ttp, modifier, tp); finishToken(ttp, tp, modifier);
return true; return true;
} }
@ -1985,20 +1991,20 @@ TokenStreamSpecific<CharT, AnyCharsAccess>::getTokenInternal(TokenKind* const tt
if (!decimalNumber('.', tp, numStart)) if (!decimalNumber('.', tp, numStart))
return false; return false;
FinishToken(ttp, modifier, tp); finishToken(ttp, tp, modifier);
return true; return true;
} }
if (c == '.') { if (c == '.') {
if (matchChar('.')) { if (matchChar('.')) {
tp->type = TokenKind::TripleDot; tp->type = TokenKind::TripleDot;
FinishToken(ttp, modifier, tp); finishToken(ttp, tp, modifier);
return true; return true;
} }
} }
ungetCharIgnoreEOL(c); ungetCharIgnoreEOL(c);
tp->type = TokenKind::Dot; tp->type = TokenKind::Dot;
FinishToken(ttp, modifier, tp); finishToken(ttp, tp, modifier);
return true; return true;
case '=': case '=':
@ -2008,7 +2014,7 @@ TokenStreamSpecific<CharT, AnyCharsAccess>::getTokenInternal(TokenKind* const tt
tp->type = TokenKind::Arrow; tp->type = TokenKind::Arrow;
else else
tp->type = TokenKind::Assign; tp->type = TokenKind::Assign;
FinishToken(ttp, modifier, tp); finishToken(ttp, tp, modifier);
return true; return true;
case '+': case '+':
@ -2016,7 +2022,7 @@ TokenStreamSpecific<CharT, AnyCharsAccess>::getTokenInternal(TokenKind* const tt
tp->type = TokenKind::Inc; tp->type = TokenKind::Inc;
else else
tp->type = matchChar('=') ? TokenKind::AddAssign : TokenKind::Add; tp->type = matchChar('=') ? TokenKind::AddAssign : TokenKind::Add;
FinishToken(ttp, modifier, tp); finishToken(ttp, tp, modifier);
return true; return true;
case '\\': { case '\\': {
@ -2028,7 +2034,7 @@ TokenStreamSpecific<CharT, AnyCharsAccess>::getTokenInternal(TokenKind* const tt
return false; return false;
} }
FinishToken(ttp, modifier, tp); finishToken(ttp, tp, modifier);
return true; return true;
} }
@ -2050,12 +2056,12 @@ TokenStreamSpecific<CharT, AnyCharsAccess>::getTokenInternal(TokenKind* const tt
#endif #endif
else else
tp->type = matchChar('=') ? TokenKind::BitOrAssign : TokenKind::BitOr; tp->type = matchChar('=') ? TokenKind::BitOrAssign : TokenKind::BitOr;
FinishToken(ttp, modifier, tp); finishToken(ttp, tp, modifier);
return true; return true;
case '^': case '^':
tp->type = matchChar('=') ? TokenKind::BitXorAssign : TokenKind::BitXor; tp->type = matchChar('=') ? TokenKind::BitXorAssign : TokenKind::BitXor;
FinishToken(ttp, modifier, tp); finishToken(ttp, tp, modifier);
return true; return true;
case '&': case '&':
@ -2063,7 +2069,7 @@ TokenStreamSpecific<CharT, AnyCharsAccess>::getTokenInternal(TokenKind* const tt
tp->type = TokenKind::And; tp->type = TokenKind::And;
else else
tp->type = matchChar('=') ? TokenKind::BitAndAssign : TokenKind::BitAnd; tp->type = matchChar('=') ? TokenKind::BitAndAssign : TokenKind::BitAnd;
FinishToken(ttp, modifier, tp); finishToken(ttp, tp, modifier);
return true; return true;
case '!': case '!':
@ -2071,7 +2077,7 @@ TokenStreamSpecific<CharT, AnyCharsAccess>::getTokenInternal(TokenKind* const tt
tp->type = matchChar('=') ? TokenKind::StrictNe : TokenKind::Ne; tp->type = matchChar('=') ? TokenKind::StrictNe : TokenKind::Ne;
else else
tp->type = TokenKind::Not; tp->type = TokenKind::Not;
FinishToken(ttp, modifier, tp); finishToken(ttp, tp, modifier);
return true; return true;
case '<': case '<':
@ -2093,7 +2099,7 @@ TokenStreamSpecific<CharT, AnyCharsAccess>::getTokenInternal(TokenKind* const tt
} else { } else {
tp->type = matchChar('=') ? TokenKind::Le : TokenKind::Lt; tp->type = matchChar('=') ? TokenKind::Le : TokenKind::Lt;
} }
FinishToken(ttp, modifier, tp); finishToken(ttp, tp, modifier);
return true; return true;
case '>': case '>':
@ -2105,7 +2111,7 @@ TokenStreamSpecific<CharT, AnyCharsAccess>::getTokenInternal(TokenKind* const tt
} else { } else {
tp->type = matchChar('=') ? TokenKind::Ge : TokenKind::Gt; tp->type = matchChar('=') ? TokenKind::Ge : TokenKind::Gt;
} }
FinishToken(ttp, modifier, tp); finishToken(ttp, tp, modifier);
return true; return true;
case '*': case '*':
@ -2113,7 +2119,7 @@ TokenStreamSpecific<CharT, AnyCharsAccess>::getTokenInternal(TokenKind* const tt
tp->type = matchChar('=') ? TokenKind::PowAssign : TokenKind::Pow; tp->type = matchChar('=') ? TokenKind::PowAssign : TokenKind::Pow;
else else
tp->type = matchChar('=') ? TokenKind::MulAssign : TokenKind::Mul; tp->type = matchChar('=') ? TokenKind::MulAssign : TokenKind::Mul;
FinishToken(ttp, modifier, tp); finishToken(ttp, tp, modifier);
return true; return true;
case '/': case '/':
@ -2228,17 +2234,17 @@ TokenStreamSpecific<CharT, AnyCharsAccess>::getTokenInternal(TokenKind* const tt
tp->type = TokenKind::RegExp; tp->type = TokenKind::RegExp;
tp->setRegExpFlags(reflags); tp->setRegExpFlags(reflags);
FinishToken(ttp, modifier, tp); finishToken(ttp, tp, modifier);
return true; return true;
} }
tp->type = matchChar('=') ? TokenKind::DivAssign : TokenKind::Div; tp->type = matchChar('=') ? TokenKind::DivAssign : TokenKind::Div;
FinishToken(ttp, modifier, tp); finishToken(ttp, tp, modifier);
return true; return true;
case '%': case '%':
tp->type = matchChar('=') ? TokenKind::ModAssign : TokenKind::Mod; tp->type = matchChar('=') ? TokenKind::ModAssign : TokenKind::Mod;
FinishToken(ttp, modifier, tp); finishToken(ttp, tp, modifier);
return true; return true;
case '-': case '-':
@ -2256,7 +2262,7 @@ TokenStreamSpecific<CharT, AnyCharsAccess>::getTokenInternal(TokenKind* const tt
} else { } else {
tp->type = matchChar('=') ? TokenKind::SubAssign : TokenKind::Sub; tp->type = matchChar('=') ? TokenKind::SubAssign : TokenKind::Sub;
} }
FinishToken(ttp, modifier, tp); finishToken(ttp, tp, modifier);
return true; return true;
default: default:

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

@ -1095,6 +1095,8 @@ class GeneralTokenStreamChars
MOZ_COLD bool badToken(); MOZ_COLD bool badToken();
void finishToken(TokenKind* kind, Token* token, TokenStreamShared::Modifier modifier);
int32_t getCharIgnoreEOL(); int32_t getCharIgnoreEOL();
void ungetChar(int32_t c); void ungetChar(int32_t c);
@ -1242,6 +1244,7 @@ class MOZ_STACK_CLASS TokenStreamSpecific
using GeneralCharsBase::badToken; using GeneralCharsBase::badToken;
using GeneralCharsBase::consumeRestOfSingleLineComment; using GeneralCharsBase::consumeRestOfSingleLineComment;
using CharsSharedBase::copyTokenbufTo; using CharsSharedBase::copyTokenbufTo;
using GeneralCharsBase::finishToken;
using GeneralCharsBase::getCharIgnoreEOL; using GeneralCharsBase::getCharIgnoreEOL;
using CharsBase::matchMultiUnitCodePoint; using CharsBase::matchMultiUnitCodePoint;
using GeneralCharsBase::newToken; using GeneralCharsBase::newToken;