mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-13 21:35:39 +00:00
Bug 532823: fix slot computation for JSOP_NAME accessing outer vars defined in trace entry frame, r=bz
This commit is contained in:
parent
61d4096a55
commit
6500db42b9
@ -3301,7 +3301,9 @@ GetFromClosure(JSContext* cx, JSObject* call, const ClosureVarInfo* cv, double*
|
||||
|
||||
struct ArgClosureTraits
|
||||
{
|
||||
static inline uint32 adj_slot(JSStackFrame* fp, uint32 slot) { return fp->argc + slot; }
|
||||
static inline uint32 adj_slot(JSStackFrame* fp, uint32 slot) { return 2 + slot; }
|
||||
|
||||
// See also UpvarArgTraits.
|
||||
static inline jsval* slots(JSStackFrame* fp) { return fp->argv; }
|
||||
private:
|
||||
ArgClosureTraits();
|
||||
@ -3316,7 +3318,9 @@ GetClosureArg(JSContext* cx, JSObject* callee, const ClosureVarInfo* cv, double*
|
||||
struct VarClosureTraits
|
||||
{
|
||||
static inline uint32 adj_slot(JSStackFrame* fp, uint32 slot) { return slot; }
|
||||
static inline jsval* slots(JSStackFrame* fp) { return fp->slots; }
|
||||
|
||||
// See also UpvarVarTraits.
|
||||
static inline jsval* slots(JSStackFrame* fp) { return 3 + fp->argc + fp->slots; }
|
||||
private:
|
||||
VarClosureTraits();
|
||||
};
|
||||
|
23
js/src/trace-test/tests/basic/bug532823.js
Normal file
23
js/src/trace-test/tests/basic/bug532823.js
Normal file
@ -0,0 +1,23 @@
|
||||
function loop(f) {
|
||||
var p;
|
||||
for (var i = 0; i < 10; ++i) {
|
||||
p = f();
|
||||
}
|
||||
return p;
|
||||
}
|
||||
|
||||
function f(j, k) {
|
||||
var g = function() { return k; }
|
||||
|
||||
var ans = '';
|
||||
|
||||
for (k = 0; k < 5; ++k) {
|
||||
ans += loop(g);
|
||||
}
|
||||
return ans;
|
||||
}
|
||||
|
||||
var t0 = new Date;
|
||||
var actual = f(1);
|
||||
|
||||
assertEq(actual, '01234');
|
Loading…
Reference in New Issue
Block a user