☠☠ backed out by bfc988bd3c77 ☠ ☠ | |
author | Shu-yu Guo <shu@rfrn.org> |
Fri, 19 Jun 2015 01:21:13 -0700 | |
changeset 249746 | b32fcdc115b6bdbb64f399760e42ae6d4b81deb5 |
parent 249745 | d6603b3fcea44d32f2cb9602762212ce26cce0ce |
child 249747 | 18c025c16bed1e10370d629233a6b71ac0782bd6 |
push id | 28936 |
push user | ryanvm@gmail.com |
push date | Fri, 19 Jun 2015 20:34:42 +0000 |
treeherder | mozilla-central@c319f262ce3e [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | luke |
bugs | 1165486 |
milestone | 41.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/builtin/Eval.cpp +++ b/js/src/builtin/Eval.cpp @@ -351,17 +351,17 @@ EvalKernel(JSContext* cx, const CallArgs return false; const char16_t* chars = linearChars.twoByteRange().start().get(); SourceBufferHolder::Ownership ownership = linearChars.maybeGiveOwnershipToCaller() ? SourceBufferHolder::GiveOwnership : SourceBufferHolder::NoOwnership; SourceBufferHolder srcBuf(chars, linearStr->length(), ownership); JSScript* compiled = frontend::CompileScript(cx, &cx->tempLifoAlloc(), - scopeobj, callerScript, staticScope, + scopeobj, staticScope, callerScript, options, srcBuf, linearStr, staticLevel); if (!compiled) return false; if (compiled->strict()) staticScope->setStrict(); esg.setNewScript(compiled); @@ -437,17 +437,17 @@ js::DirectEvalStringFromIon(JSContext* c return false; const char16_t* chars = linearChars.twoByteRange().start().get(); SourceBufferHolder::Ownership ownership = linearChars.maybeGiveOwnershipToCaller() ? SourceBufferHolder::GiveOwnership : SourceBufferHolder::NoOwnership; SourceBufferHolder srcBuf(chars, linearStr->length(), ownership); JSScript* compiled = frontend::CompileScript(cx, &cx->tempLifoAlloc(), - scopeobj, callerScript, staticScope, + scopeobj, staticScope, callerScript, options, srcBuf, linearStr, staticLevel); if (!compiled) return false; if (compiled->strict()) staticScope->setStrict(); esg.setNewScript(compiled);
--- a/js/src/frontend/BytecodeCompiler.cpp +++ b/js/src/frontend/BytecodeCompiler.cpp @@ -205,18 +205,18 @@ frontend::CreateScriptSourceObject(Exclu return nullptr; } return sso; } JSScript* frontend::CompileScript(ExclusiveContext* cx, LifoAlloc* alloc, HandleObject scopeChain, + Handle<ScopeObject*> enclosingStaticScope, HandleScript evalCaller, - Handle<StaticEvalObject*> evalStaticScope, const ReadOnlyCompileOptions& options, SourceBufferHolder& srcBuf, JSString* source_ /* = nullptr */, unsigned staticLevel /* = 0 */, SourceCompressionTask* extraSct /* = nullptr */) { MOZ_ASSERT(srcBuf.get()); @@ -279,32 +279,32 @@ frontend::CompileScript(ExclusiveContext parser.sct = sct; parser.ss = ss; if (!parser.checkOptions()) return nullptr; bool savedCallerFun = evalCaller && evalCaller->functionOrCallerFunction(); Directives directives(options.strictOption); - GlobalSharedContext globalsc(cx, directives, evalStaticScope, options.extraWarningsOption); + GlobalSharedContext globalsc(cx, directives, enclosingStaticScope, options.extraWarningsOption); - Rooted<JSScript*> script(cx, JSScript::Create(cx, evalStaticScope, savedCallerFun, + Rooted<JSScript*> script(cx, JSScript::Create(cx, enclosingStaticScope, savedCallerFun, options, staticLevel, sourceObject, 0, srcBuf.length())); if (!script) return nullptr; bool insideNonGlobalEval = - evalStaticScope && evalStaticScope->enclosingScopeForStaticScopeIter(); + enclosingStaticScope && enclosingStaticScope->is<StaticEvalObject>() && + enclosingStaticScope->as<StaticEvalObject>().enclosingScopeForStaticScopeIter(); BytecodeEmitter::EmitterMode emitterMode = options.selfHostingMode ? BytecodeEmitter::SelfHosting : BytecodeEmitter::Normal; BytecodeEmitter bce(/* parent = */ nullptr, &parser, &globalsc, script, /* lazyScript = */ nullptr, options.forEval, - evalCaller, insideNonGlobalEval, - options.lineno, emitterMode); + evalCaller, insideNonGlobalEval, options.lineno, emitterMode); if (!bce.init()) return nullptr; // Syntax parsing may cause us to restart processing of top level // statements in the script. Use Maybe<> so that the parse context can be // reset when this occurs. Maybe<ParseContext<FullParseHandler> > pc;
--- a/js/src/frontend/BytecodeCompiler.h +++ b/js/src/frontend/BytecodeCompiler.h @@ -12,28 +12,27 @@ class JSLinearString; namespace js { class AutoNameVector; class LazyScript; class LifoAlloc; class ScriptSourceObject; -class StaticEvalObject; +class ScopeObject; struct SourceCompressionTask; namespace frontend { JSScript* CompileScript(ExclusiveContext* cx, LifoAlloc* alloc, - HandleObject scopeChain, HandleScript evalCaller, - Handle<StaticEvalObject*> evalStaticScope, - const ReadOnlyCompileOptions& options, SourceBufferHolder& srcBuf, - JSString* source_ = nullptr, unsigned staticLevel = 0, - SourceCompressionTask* extraSct = nullptr); + HandleObject scopeChain, Handle<ScopeObject*> enclosingStaticScope, + HandleScript evalCaller, const ReadOnlyCompileOptions& options, + SourceBufferHolder& srcBuf, JSString* source_ = nullptr, + unsigned staticLevel = 0, SourceCompressionTask* extraSct = nullptr); bool CompileLazyFunction(JSContext* cx, Handle<LazyScript*> lazy, const char16_t* chars, size_t length); /* * enclosingStaticScope is a static enclosing scope (e.g. a StaticWithObject). * Must be null if the enclosing scope is a global. */
--- a/js/src/frontend/BytecodeEmitter.cpp +++ b/js/src/frontend/BytecodeEmitter.cpp @@ -764,17 +764,17 @@ BytecodeEmitter::enclosingStaticScope() if (staticScope) return staticScope; if (!sc->isFunctionBox()) { MOZ_ASSERT(!parent); // Top-level eval scripts have a placeholder static scope so that // StaticScopeIter may iterate through evals. - return sc->asGlobalSharedContext()->evalStaticScope(); + return sc->asGlobalSharedContext()->topStaticScope(); } return sc->asFunctionBox()->function(); } #ifdef DEBUG static bool AllLocalsAliased(StaticBlockObject& obj)
--- a/js/src/frontend/BytecodeEmitter.h +++ b/js/src/frontend/BytecodeEmitter.h @@ -17,17 +17,17 @@ #include "frontend/ParseMaps.h" #include "frontend/Parser.h" #include "frontend/SharedContext.h" #include "frontend/SourceNotes.h" namespace js { -class StaticEvalObject; +class ScopeObject; namespace frontend { class FullParseHandler; class ObjectBox; class ParseNode; template <typename ParseHandler> class Parser; class SharedContext;
--- a/js/src/frontend/SharedContext.h +++ b/js/src/frontend/SharedContext.h @@ -253,31 +253,31 @@ class SharedContext } MOZ_CRASH("Unknown AllowedSyntax query"); } }; class GlobalSharedContext : public SharedContext { private: - Handle<StaticEvalObject*> staticEvalScope_; + Handle<ScopeObject*> topStaticScope_; public: GlobalSharedContext(ExclusiveContext* cx, - Directives directives, Handle<StaticEvalObject*> staticEvalScope, + Directives directives, Handle<ScopeObject*> topStaticScope, bool extraWarnings) : SharedContext(cx, directives, extraWarnings), - staticEvalScope_(staticEvalScope) + topStaticScope_(topStaticScope) {} ObjectBox* toObjectBox() { return nullptr; } - HandleObject evalStaticScope() const { return staticEvalScope_; } + HandleObject topStaticScope() const { return topStaticScope_; } bool allowSyntax(AllowedSyntax allowed) const { - StaticScopeIter<CanGC> it(context, staticEvalScope_); + StaticScopeIter<CanGC> it(context, topStaticScope_); for (; !it.done(); it++) { if (it.type() == StaticScopeIter<CanGC>::Function && !it.fun().isArrow()) { return FunctionAllowsSyntax(&it.fun(), allowed); } } return false;
--- a/js/src/vm/Debugger.cpp +++ b/js/src/vm/Debugger.cpp @@ -6270,18 +6270,18 @@ EvaluateInEnv(JSContext* cx, Handle<Env* .setForEval(true) .setNoScriptRval(false) .setFileAndLine(filename, lineno) .setCanLazilyParse(false) .setIntroductionType("debugger eval") .maybeMakeStrictMode(frame ? frame.script()->strict() : false); RootedScript callerScript(cx, frame ? frame.script() : nullptr); SourceBufferHolder srcBuf(chars.start().get(), chars.length(), SourceBufferHolder::NoOwnership); - RootedScript script(cx, frontend::CompileScript(cx, &cx->tempLifoAlloc(), env, callerScript, - staticScope, options, srcBuf, + RootedScript script(cx, frontend::CompileScript(cx, &cx->tempLifoAlloc(), env, staticScope, + callerScript, options, srcBuf, /* source = */ nullptr, /* staticLevel = */ frame ? 1 : 0)); if (!script) return false; if (script->strict()) staticScope->setStrict();