Bug 1472031 - Introduce a drainCharBufferIntoAtom function to clear charBuffer and create an atom from the chars that were in it. r=arai

--HG--
extra : rebase_source : bd8f3114f8704b7a266ccf21d4c110fe28ab77f1
This commit is contained in:
Jeff Walden 2018-06-28 15:31:13 -07:00
Родитель da3129de0b
Коммит 7ed2b26ceb
2 изменённых файлов: 16 добавлений и 11 удалений

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

@ -1431,20 +1431,18 @@ TokenStreamSpecific<CharT, AnyCharsAccess>::identifierName(TokenStart start,
}
}
const CharT* chars;
size_t length;
if (escaping == IdentifierEscapes::SawUnicodeEscape) {
JSAtom* atom;
if (MOZ_UNLIKELY(escaping == IdentifierEscapes::SawUnicodeEscape)) {
// Identifiers containing Unicode escapes have to be converted into
// tokenbuf before atomizing.
if (!putIdentInCharBuffer(identStart))
return false;
chars = charBuffer.begin();
length = charBuffer.length();
atom = drainCharBufferIntoAtom(anyCharsAccess().cx);
} else {
// Escape-free identifiers can be created directly from sourceUnits.
chars = identStart;
length = sourceUnits.addressOfNextCodeUnit() - identStart;
const CharT* chars = identStart;
size_t length = sourceUnits.addressOfNextCodeUnit() - identStart;
// Represent reserved words lacking escapes as reserved word tokens.
if (const ReservedWordInfo* rw = FindReservedWord(chars, length)) {
@ -1452,9 +1450,9 @@ TokenStreamSpecific<CharT, AnyCharsAccess>::identifierName(TokenStart start,
newSimpleToken(rw->tokentype, start, modifier, out);
return true;
}
}
JSAtom* atom = atomizeChars(anyCharsAccess().cx, chars, length);
atom = atomizeChars(anyCharsAccess().cx, chars, length);
}
if (!atom)
return false;
@ -2612,7 +2610,7 @@ TokenStreamSpecific<CharT, AnyCharsAccess>::getStringOrTemplateToken(char untilC
return false;
}
JSAtom* atom = atomizeChars(anyCharsAccess().cx, charBuffer.begin(), charBuffer.length());
JSAtom* atom = drainCharBufferIntoAtom(anyCharsAccess().cx);
if (!atom)
return false;

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

@ -1105,6 +1105,12 @@ class TokenStreamCharsShared
return mozilla::IsAscii(unit);
}
JSAtom* drainCharBufferIntoAtom(JSContext* cx) {
JSAtom* atom = AtomizeChars(cx, charBuffer.begin(), charBuffer.length());
charBuffer.clear();
return atom;
}
public:
CharBuffer& getCharBuffer() { return charBuffer; }
};
@ -1538,6 +1544,7 @@ class MOZ_STACK_CLASS TokenStreamSpecific
using CharsBase::consumeKnownCodeUnit;
using GeneralCharsBase::consumeRestOfSingleLineComment;
using TokenStreamCharsShared::copyCharBufferTo;
using TokenStreamCharsShared::drainCharBufferIntoAtom;
using CharsBase::fillCharBufferWithTemplateStringContents;
using SpecializedCharsBase::getCodePoint;
using GeneralCharsBase::getCodeUnit;
@ -1662,7 +1669,7 @@ class MOZ_STACK_CLASS TokenStreamSpecific
if (!fillCharBufferWithTemplateStringContents(cur, end))
return nullptr;
return atomizeChars(anyChars.cx, charBuffer.begin(), charBuffer.length());
return drainCharBufferIntoAtom(anyChars.cx);
}
private: