зеркало из https://github.com/mozilla/gecko-dev.git
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:
Родитель
da3129de0b
Коммит
7ed2b26ceb
|
@ -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:
|
||||
|
|
Загрузка…
Ссылка в новой задаче