author | Eric Faust <efaustbmo@gmail.com> |
Fri, 27 Apr 2018 15:02:31 -0700 | |
changeset 416155 | 598418d95c96a8edbd3ba2d2f6f231ed37c1d02a |
parent 416154 | 9b20e7b26c0db98cd184f9289b32cca17996b7ed |
child 416156 | 60bdf6086590f974614e0b1d202ff4849f5a2c45 |
push id | 33917 |
push user | apavel@mozilla.com |
push date | Sat, 28 Apr 2018 17:30:55 +0000 |
treeherder | mozilla-central@08f68e2c892c [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | Waldo |
bugs | 1451826 |
milestone | 61.0a1 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
--- a/js/src/frontend/BytecodeEmitter.cpp +++ b/js/src/frontend/BytecodeEmitter.cpp @@ -2136,17 +2136,17 @@ class ForOfLoopControl : public LoopCont return false; } return true; } }; BytecodeEmitter::BytecodeEmitter(BytecodeEmitter* parent, - const EitherParser<FullParseHandler>& parser, SharedContext* sc, + const EitherParser& parser, SharedContext* sc, HandleScript script, Handle<LazyScript*> lazyScript, uint32_t lineNum, EmitterMode emitterMode) : sc(sc), cx(sc->context), parent(parent), script(cx, script), lazyScript(cx, lazyScript), prologue(cx, lineNum), @@ -2176,17 +2176,17 @@ BytecodeEmitter::BytecodeEmitter(Bytecod emitterMode(emitterMode), scriptStartOffsetSet(false), functionBodyEndPosSet(false) { MOZ_ASSERT_IF(emitterMode == LazyFunction, lazyScript); } BytecodeEmitter::BytecodeEmitter(BytecodeEmitter* parent, - const EitherParser<FullParseHandler>& parser, SharedContext* sc, + const EitherParser& parser, SharedContext* sc, HandleScript script, Handle<LazyScript*> lazyScript, TokenPos bodyPosition, EmitterMode emitterMode) : BytecodeEmitter(parent, parser, sc, script, lazyScript, parser.errorReporter().lineAt(bodyPosition.begin), emitterMode) { setScriptStartOffsetIfUnset(bodyPosition); setFunctionBodyEndPos(bodyPosition);
--- a/js/src/frontend/BytecodeEmitter.h +++ b/js/src/frontend/BytecodeEmitter.h @@ -215,17 +215,17 @@ struct MOZ_STACK_CLASS BytecodeEmitter EmitSection(JSContext* cx, uint32_t lineNum) : code(cx), notes(cx), lastNoteOffset(0), currentLine(lineNum), lastColumn(0), lastTarget{ -1 - ptrdiff_t(JSOP_JUMPTARGET_LENGTH) } {} }; EmitSection prologue, main, *current; - EitherParser<FullParseHandler> parser; + EitherParser parser; PooledMapPtr<AtomIndexMap> atomIndices; /* literals indexed for mapping */ unsigned firstLine; /* first line, for JSScript::initFromEmitter */ uint32_t maxFixedSlots; /* maximum number of fixed frame slots so far */ uint32_t maxStackDepth; /* maximum number of expression stack slots so far */ int32_t stackDepth; /* current stack depth in script frame */ @@ -290,39 +290,39 @@ struct MOZ_STACK_CLASS BytecodeEmitter bool functionBodyEndPosSet; /* * Note that BytecodeEmitters are magic: they own the arena "top-of-stack" * space above their tempMark points. This means that you cannot alloc from * tempLifoAlloc and save the pointer beyond the next BytecodeEmitter * destruction. */ - BytecodeEmitter(BytecodeEmitter* parent, const EitherParser<FullParseHandler>& parser, + BytecodeEmitter(BytecodeEmitter* parent, const EitherParser& parser, SharedContext* sc, HandleScript script, Handle<LazyScript*> lazyScript, uint32_t lineNum, EmitterMode emitterMode = Normal); template<typename CharT> BytecodeEmitter(BytecodeEmitter* parent, Parser<FullParseHandler, CharT>* parser, SharedContext* sc, HandleScript script, Handle<LazyScript*> lazyScript, uint32_t lineNum, EmitterMode emitterMode = Normal) - : BytecodeEmitter(parent, EitherParser<FullParseHandler>(parser), sc, script, lazyScript, + : BytecodeEmitter(parent, EitherParser(parser), sc, script, lazyScript, lineNum, emitterMode) {} // An alternate constructor that uses a TokenPos for the starting // line and that sets functionBodyEndPos as well. - BytecodeEmitter(BytecodeEmitter* parent, const EitherParser<FullParseHandler>& parser, + BytecodeEmitter(BytecodeEmitter* parent, const EitherParser& parser, SharedContext* sc, HandleScript script, Handle<LazyScript*> lazyScript, TokenPos bodyPosition, EmitterMode emitterMode = Normal); template<typename CharT> BytecodeEmitter(BytecodeEmitter* parent, Parser<FullParseHandler, CharT>* parser, SharedContext* sc, HandleScript script, Handle<LazyScript*> lazyScript, TokenPos bodyPosition, EmitterMode emitterMode = Normal) - : BytecodeEmitter(parent, EitherParser<FullParseHandler>(parser), sc, script, lazyScript, + : BytecodeEmitter(parent, EitherParser(parser), sc, script, lazyScript, bodyPosition, emitterMode) {} MOZ_MUST_USE bool init(); template <typename Predicate /* (NestableControl*) -> bool */> NestableControl* findInnermostNestableControl(Predicate predicate) const;
--- a/js/src/frontend/EitherParser.h +++ b/js/src/frontend/EitherParser.h @@ -65,17 +65,17 @@ template<class Parser> struct GetParser { static Parser* get(Parser* parser) { return parser; } }; template<class Parser> struct GetParseHandler { - static auto get(Parser* parser) -> decltype(&parser->handler) { + static frontend::FullParseHandler* get(Parser* parser) { return &parser->handler; } }; template<class Parser> struct GetTokenStream { static auto get(Parser* parser) -> decltype(&parser->tokenStream) { @@ -142,22 +142,22 @@ struct ErrorReporterMatcher return parser->tokenStream; } }; } // namespace detail namespace frontend { -template<class ParseHandler> class EitherParser { - mozilla::Variant<Parser<ParseHandler, char16_t>* const> parser; + // Leave this as a variant, to promote good form until 8-bit parser integration. + mozilla::Variant<Parser<FullParseHandler, char16_t>* const> parser; - using Node = typename ParseHandler::Node; + using Node = typename FullParseHandler::Node; template<template <class Parser> class GetThis, template <class This> class GetMemberFunction, typename... StoredArgs> using InvokeMemberFunction = detail::InvokeMemberFunction<GetThis, GetMemberFunction, StoredArgs...>; public: