☠☠ backed out by 3b7a4d9da546 ☠ ☠ | |
author | Boris Zbarsky <bzbarsky@mit.edu> |
Fri, 20 Mar 2015 21:34:18 -0400 | |
changeset 263679 | 8066b21e74a00e4613ddbf27d70777c95dd27c69 |
parent 263678 | 151e4cdb34cfe930c221bb2e84377e3f260c5414 |
child 263680 | 7be39afdf528795236b3d2bd82ff796947e195a7 |
push id | 4718 |
push user | raliiev@mozilla.com |
push date | Mon, 11 May 2015 18:39:53 +0000 |
treeherder | mozilla-beta@c20c4ef55f08 [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | luke |
bugs | 1145491 |
milestone | 39.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
|
js/src/jit/BytecodeAnalysis.cpp | file | annotate | diff | comparison | revisions | |
js/src/vm/ScopeObject.cpp | file | annotate | diff | comparison | revisions |
--- a/js/src/jit/BytecodeAnalysis.cpp +++ b/js/src/jit/BytecodeAnalysis.cpp @@ -146,28 +146,36 @@ BytecodeAnalysis::init(TempAllocator &al if (catchFinallyRanges[i].contains(offset)) infos_[offset].loopEntryInCatchOrFinally = true; } break; case JSOP_GETNAME: case JSOP_BINDNAME: case JSOP_SETNAME: + case JSOP_STRICTSETNAME: case JSOP_DELNAME: case JSOP_GETALIASEDVAR: case JSOP_SETALIASEDVAR: case JSOP_LAMBDA: case JSOP_LAMBDA_ARROW: case JSOP_DEFFUN: case JSOP_DEFVAR: case JSOP_DEFCONST: case JSOP_SETCONST: usesScopeChain_ = true; break; + case JSOP_GETGNAME: + case JSOP_SETGNAME: + case JSOP_STRICTSETGNAME: + if (script_->hasPollutedGlobalScope()) + usesScopeChain_ = true; + break; + case JSOP_FINALLY: hasTryFinally_ = true; break; case JSOP_SETARG: hasSetArg_ = true; break;
--- a/js/src/vm/ScopeObject.cpp +++ b/js/src/vm/ScopeObject.cpp @@ -2563,19 +2563,29 @@ RemoveReferencedNames(JSContext *cx, Han // care about entraining variables unnecessarily. for (jsbytecode *pc = script->code(); pc != script->codeEnd(); pc += GetBytecodeLength(pc)) { PropertyName *name; switch (JSOp(*pc)) { case JSOP_GETNAME: case JSOP_SETNAME: + case JSOP_STRICTSETNAME: name = script->getName(pc); break; + case JSOP_GETGNAME: + case JSOP_SETGNAME: + case JSOP_STRICTSETGNAME: + if (script->hasPollutedGlobalScope()) + name = script->getName(pc); + else + name = nullptr; + break; + case JSOP_GETALIASEDVAR: case JSOP_SETALIASEDVAR: name = ScopeCoordinateName(cx->runtime()->scopeCoordinateNameCache, script, pc); break; default: name = nullptr; break;