Backed out changeset 238e8b557e4f: causing tjss orange
authorDavid Mandelin <dmandelin@mozilla.com>
Fri, 14 Aug 2009 19:17:00 -0700
changeset 31840 72a50720cd40ce04047d1c80931079d9711eb52f
parent 31839 fc0bfd8bf9e92097b93d2ee9f17425422198ed8c
child 31841 0709d3c94bfcb0128bf635c6a72e3a51e6bac3ff
push id8746
push userrsayre@mozilla.com
push dateTue, 25 Aug 2009 16:53:43 +0000
treeherdermozilla-central@189759c41621 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
milestone1.9.3a1pre
backs out238e8b557e4fb30b3fcb450302f25da1a9012772
Backed out changeset 238e8b557e4f: causing tjss orange
js/src/jsbuiltins.h
js/src/jsinterp.cpp
js/src/jsops.cpp
js/src/jstracer.cpp
js/src/jstracer.h
js/src/trace-test/tests/basic/name-inactive-del.js
js/src/trace-test/tests/basic/name-inactive-eval-del.js
js/src/trace-test/tests/basic/name-inactive-inferflags.js
js/src/trace-test/tests/basic/name-inactive.js
--- a/js/src/jsbuiltins.h
+++ b/js/src/jsbuiltins.h
@@ -111,18 +111,16 @@ struct JSTraceableNative {
 #define  _JS_F64_RETSIZE    nanojit::ARGSIZE_F
 #define  _JS_PTR_ARGSIZE    nanojit::ARGSIZE_LO
 #if defined AVMPLUS_64BIT
 # define _JS_PTR_RETSIZE    nanojit::ARGSIZE_Q
 #else
 # define _JS_PTR_RETSIZE    nanojit::ARGSIZE_LO
 #endif
 
-class ClosureVarInfo;
-
 /*
  * Supported types for builtin functions.
  *
  * Types with -- for the two string fields are not permitted as argument types
  * in JS_DEFINE_TRCINFO.
  *
  * There are three kinds of traceable-native error handling.
  *
@@ -212,17 +210,16 @@ class ClosureVarInfo;
                                                                                   JSTN_CONSTRUCTOR)
 #define _JS_CTYPE_REGEXP            _JS_CTYPE(JSObject *,             _JS_PTR, "","r", INFALLIBLE)
 #define _JS_CTYPE_SCOPEPROP         _JS_CTYPE(JSScopeProperty *,      _JS_PTR, --, --, INFALLIBLE)
 #define _JS_CTYPE_SIDEEXIT          _JS_CTYPE(SideExit *,             _JS_PTR, --, --, INFALLIBLE)
 #define _JS_CTYPE_INTERPSTATE       _JS_CTYPE(InterpState *,          _JS_PTR, --, --, INFALLIBLE)
 #define _JS_CTYPE_FRAGMENT          _JS_CTYPE(nanojit::Fragment *,    _JS_PTR, --, --, INFALLIBLE)
 #define _JS_CTYPE_CLASS             _JS_CTYPE(JSClass *,              _JS_PTR, --, --, INFALLIBLE)
 #define _JS_CTYPE_DOUBLEPTR         _JS_CTYPE(double *,               _JS_PTR, --, --, INFALLIBLE)
-#define _JS_CTYPE_CVIPTR            _JS_CTYPE(const ClosureVarInfo *, _JS_PTR, --, --, INFALLIBLE)
 
 #define _JS_EXPAND(tokens)  tokens
 
 #define _JS_CTYPE_TYPE2(t,s,p,a,f)      t
 #define _JS_CTYPE_TYPE(tyname)          _JS_EXPAND(_JS_CTYPE_TYPE2    _JS_CTYPE_##tyname)
 #define _JS_CTYPE_RETSIZE2(t,s,p,a,f)   s##_RETSIZE
 #define _JS_CTYPE_RETSIZE(tyname)       _JS_EXPAND(_JS_CTYPE_RETSIZE2 _JS_CTYPE_##tyname)
 #define _JS_CTYPE_ARGSIZE2(t,s,p,a,f)   s##_ARGSIZE
--- a/js/src/jsinterp.cpp
+++ b/js/src/jsinterp.cpp
@@ -3016,17 +3016,17 @@ js_Interpret(JSContext *cx)
         switchOp = intN(op) | switchMask;
       do_switch:
         switch (switchOp) {
 #endif
 
 /********************** Here we include the operations ***********************/
 #include "jsops.cpp"
 /*****************************************************************************/
-
+              
 #if !JS_THREADED_INTERP
           default:
 #endif
 #ifndef JS_TRACER
         bad_opcode:
 #endif
           {
             char numBuf[12];
--- a/js/src/jsops.cpp
+++ b/js/src/jsops.cpp
@@ -34,17 +34,17 @@
  * decision by deleting the provisions above and replace them with the notice
  * and other provisions required by the GPL or the LGPL. If you do not delete
  * the provisions above, a recipient may use your version of this file under
  * the terms of any one of the MPL, the GPL or the LGPL.
  *
  * ***** END LICENSE BLOCK ***** */
 
 /* This file needs to be included in possibly multiple places. */
-
+            
 #if JS_THREADED_INTERP
   interrupt:
 #else /* !JS_THREADED_INTERP */
           case -1:
             JS_ASSERT(switchMask == -1);
 #endif /* !JS_THREADED_INTERP */
           {
             bool moreInterrupts = false;
--- a/js/src/jstracer.cpp
+++ b/js/src/jstracer.cpp
@@ -2388,44 +2388,40 @@ struct UpvarStackTraits {
 };
 
 uint32 JS_FASTCALL
 GetUpvarStackOnTrace(JSContext* cx, uint32 upvarLevel, int32 slot, uint32 callDepth, double* result)
 {
     return GetUpvarOnTrace<UpvarStackTraits>(cx, upvarLevel, slot, callDepth, result);
 }
 
-// Parameters needed to access a value from a closure on trace.
-struct ClosureVarInfo
-{
-    jsid     id;
-    uint32   scopeIndex;
-    uint32   slot;
-    uint32   callDepth;
-    uint32   resolveFlags;
-};
-
 /*
  * Generic function to read upvars from Call objects of active heavyweight functions.
  *     callee       Callee Function object in which the upvar is accessed.
+ *     scopeIndex   Number of parent steps to make from |callee| to find upvar definition.
+ *                  This must be at least 1 because |callee| is a Function and we must reach a Call.
+ *     slot         Slot in Call object to read.
+ *     callDepth    callDepth of current point relative to trace entry.
  */
 template<typename T>
 inline uint32
-GetFromClosure(JSContext* cx, JSObject* callee, const ClosureVarInfo* cv, double* result)
-{
-    JS_ASSERT(cv->scopeIndex >= 1);
+GetFromClosure(JSContext* cx, JSObject* callee, uint32 scopeIndex, uint32 slot, uint32 callDepth,
+               double* result)
+{
+    JS_ASSERT(scopeIndex >= 1);
     JS_ASSERT(OBJ_GET_CLASS(cx, callee) == &js_FunctionClass);
     JSObject* call = callee;
-    for (uint32 i = 0; i < cv->scopeIndex; ++i)
+
+    for (uint32 i = 0; i < scopeIndex; ++i)
         call = OBJ_GET_PARENT(cx, call);
 
     JS_ASSERT(OBJ_GET_CLASS(cx, call) == &js_CallClass);
 
     InterpState* state = cx->interpState;
-    FrameInfo** fip = state->rp + cv->callDepth;
+    FrameInfo** fip = state->rp + callDepth;
     while (--fip >= state->callstackBase) {
         FrameInfo* fi = *fip;
         if (fi->callee == call) {
             // This is not reachable as long as JSOP_LAMBDA is not traced:
             // - The upvar is found at this point only if the upvar was defined on a frame that was
             //   entered on this trace.
             // - The upvar definition must be (dynamically, and thus on trace) before the definition
             //   of the function that uses the upvar.
@@ -2433,68 +2429,60 @@ GetFromClosure(JSContext* cx, JSObject* 
             //   is on the trace.
             JS_NOT_REACHED("JSOP_NAME variable found in outer trace");
         }
     }
 
     /*
      * Here we specifically want to check the call object of the trace entry frame.
      */
-    uint32 slot = cv->slot;
     VOUCH_DOES_NOT_REQUIRE_STACK();
     if (cx->fp->callobj == call) {
         slot = T::adj_slot(cx->fp, slot);
         *result = state->stackBase[slot];
         return state->callstackBase[0]->get_typemap()[slot];
     }
 
     JSStackFrame* fp = (JSStackFrame*) call->getPrivate();
-    jsval v;
-    if (fp) {
-        v = T::slots(fp)[slot];
-    } else {
-        JS_ASSERT(cv->resolveFlags != JSRESOLVE_INFER);
-        JSAutoResolveFlags rf(cx, cv->resolveFlags);
-#ifdef DEBUG
-        JSBool rv =
-#endif
-            js_GetPropertyHelper(cx, call, cv->id, JS_FALSE, &v);
-        JS_ASSERT(rv);
-    }
+    if (!fp)
+        return TT_INVALID;
+    jsval v = T::slots(fp)[slot];
     JSTraceType type = getCoercedType(v);
     ValueToNative(cx, v, type, result);
     return type;
 }
 
 struct ArgClosureTraits
 {
     static inline uint32 adj_slot(JSStackFrame* fp, uint32 slot) { return fp->argc + slot; }
     static inline jsval* slots(JSStackFrame* fp) { return fp->argv; }
 private:
     ArgClosureTraits();
 };
 
 uint32 JS_FASTCALL
-GetClosureArg(JSContext* cx, JSObject* callee, const ClosureVarInfo* cv, double* result)
-{
-    return GetFromClosure<ArgClosureTraits>(cx, callee, cv, result);
+GetClosureArg(JSContext* cx, JSObject* callee, uint32 scopeIndex, uint32 slot, uint32 callDepth,
+              double* result)
+{
+    return GetFromClosure<ArgClosureTraits>(cx, callee, scopeIndex, slot, callDepth, result);
 }
 
 struct VarClosureTraits
 {
     static inline uint32 adj_slot(JSStackFrame* fp, uint32 slot) { return slot; }
     static inline jsval* slots(JSStackFrame* fp) { return fp->slots; }
 private:
     VarClosureTraits();
 };
 
 uint32 JS_FASTCALL
-GetClosureVar(JSContext* cx, JSObject* callee, const ClosureVarInfo* cv, double* result)
-{
-    return GetFromClosure<VarClosureTraits>(cx, callee, cv, result);
+GetClosureVar(JSContext* cx, JSObject* callee, uint32 scopeIndex, uint32 slot, uint32 callDepth,
+              double* result)
+{
+    return GetFromClosure<VarClosureTraits>(cx, callee, scopeIndex, slot, callDepth, result);
 }
 
 /**
  * Box the given native stack frame into the virtual machine stack. This
  * is infallible.
  *
  * @param callDepth the distance between the entry frame into our trace and
  *                  cx->fp when we make this call.  If this is not called as a
@@ -3648,17 +3636,17 @@ class SlotMap : public SlotVisitorBase
             }
         }
     }
   private:
     TypeCheckResult
     checkType(unsigned i, JSTraceType t)
     {
         debug_only_printf(LC_TMTracer,
-                          "checkType slot %d: interp=%c typemap=%c isNum=%d promoteInt=%d\n",
+                          "checkType slot %d: interp=%c typemap=%c isNum=%d promoteInt=%d\n", 
                           i,
                           typeChar[getCoercedType(*slots[i].v)],
                           typeChar[t],
                           isNumber(*slots[i].v),
                           slots[i].promoteInt);
         switch (t) {
           case TT_INT32:
             if (!isNumber(*slots[i].v))
@@ -6816,18 +6804,20 @@ TraceRecorder::frameIfInRange(JSObject* 
             return ofp;
         }
         if (!(fp = fp->down))
             break;
     }
     return NULL;
 }
 
-JS_DEFINE_CALLINFO_4(extern, UINT32, GetClosureVar, CONTEXT, OBJECT, CVIPTR, DOUBLEPTR, 0, 0)
-JS_DEFINE_CALLINFO_4(extern, UINT32, GetClosureArg, CONTEXT, OBJECT, CVIPTR, DOUBLEPTR, 0, 0)
+JS_DEFINE_CALLINFO_6(extern, UINT32, GetClosureVar, CONTEXT, OBJECT, UINT32,
+                     UINT32, UINT32, DOUBLEPTR, 0, 0)
+JS_DEFINE_CALLINFO_6(extern, UINT32, GetClosureArg, CONTEXT, OBJECT, UINT32,
+                     UINT32, UINT32, DOUBLEPTR, 0, 0)
 
 /*
  * Search the scope chain for a property lookup operation at the current PC and
  * generate LIR to access the given property. Return JSRS_CONTINUE on success,
  * otherwise abort and return JSRS_STOP. There are 3 outparams:
  *
  *     vp           the address of the current property value
  *     ins          LIR instruction representing the property value on trace
@@ -6866,120 +6856,94 @@ TraceRecorder::scopeChainProp(JSObject* 
         obj2->dropProperty(cx, prop);
         nr.tracked = true;
         return JSRS_CONTINUE;
     }
 
     if (wasDeepAborted())
         ABORT_TRACE("deep abort from property lookup");
 
-    if (obj == obj2 && OBJ_GET_CLASS(cx, obj) == &js_CallClass)
-        return callProp(obj, obj2, prop, ATOM_TO_JSID(atom), vp, ins, nr);
+    if (obj == obj2 && OBJ_GET_CLASS(cx, obj) == &js_CallClass) {
+        JSStackFrame* cfp = (JSStackFrame*) obj->getPrivate();
+        if (cfp) {
+            JSScopeProperty* sprop = (JSScopeProperty*) prop;
+
+            uint32 setflags = (js_CodeSpec[*cx->fp->regs->pc].format & (JOF_SET | JOF_INCDEC | JOF_FOR));
+            if (setflags && (sprop->attrs & JSPROP_READONLY))
+                ABORT_TRACE("writing to a read-only property");
+
+            uintN slot = sprop->shortid;
+
+            vp = NULL;
+            uintN upvar_slot = SPROP_INVALID_SLOT;
+            if (sprop->getter == js_GetCallArg) {
+                JS_ASSERT(slot < cfp->fun->nargs);
+                vp = &cfp->argv[slot];
+                upvar_slot = slot;
+            } else if (sprop->getter == js_GetCallVar) {
+                JS_ASSERT(slot < cfp->script->nslots);
+                vp = &cfp->slots[slot];
+                upvar_slot = cx->fp->fun->nargs + slot;
+            }
+            obj2->dropProperty(cx, prop);
+            if (!vp)
+                ABORT_TRACE("dynamic property of Call object");
+
+            if (frameIfInRange(obj)) {
+                // At this point we are guaranteed to be looking at an active call object
+                // whose properties are stored in the corresponding JSStackFrame.
+                ins = get(vp);
+                nr.tracked = true;
+                return JSRS_CONTINUE;
+            }
+
+            // Compute number of scope chain links to result.
+            jsint scopeIndex = 0;
+            JSObject* tmp = JSVAL_TO_OBJECT(cx->fp->argv[-2]);
+            while (tmp != obj) {
+                tmp = OBJ_GET_PARENT(cx, tmp);
+                scopeIndex++;
+            }
+            JS_ASSERT(scopeIndex >= 1);
+
+            LIns* callee_ins = get(&cx->fp->argv[-2]);
+            LIns* outp = lir->insAlloc(sizeof(double));
+            LIns* args[] = {
+                outp,
+                INS_CONST(callDepth),
+                INS_CONST(slot),
+                INS_CONST(scopeIndex),
+                callee_ins,
+                cx_ins
+            };
+            const CallInfo* ci;
+            if (sprop->getter == js_GetCallArg)
+                ci = &GetClosureArg_ci;
+            else
+                ci = &GetClosureVar_ci;
+
+            LIns* call_ins = lir->insCall(ci, args);
+            JSTraceType type = getCoercedType(*vp);
+            guard(true,
+                  addName(lir->ins2(LIR_eq, call_ins, lir->insImm(type)),
+                          "guard(type-stable name access)"),
+                  BRANCH_EXIT);
+            ins = stackLoad(outp, type);
+            nr.tracked = false;
+            nr.obj = obj;
+            nr.scopeIndex = scopeIndex;
+            nr.sprop = sprop;
+            return JSRS_CONTINUE;
+        }
+    }
 
     obj2->dropProperty(cx, prop);
     ABORT_TRACE("fp->scopeChain is not global or active call object");
 }
 
-/*
- * Generate LIR to access a property of a Call object.
- */
-JS_REQUIRES_STACK JSRecordingStatus
-TraceRecorder::callProp(JSObject* obj, JSObject* obj2, JSProperty* prop, jsid id, jsval*& vp, 
-                        LIns*& ins, NameResult& nr)
-{
-    JSScopeProperty *sprop = (JSScopeProperty*) prop;
-
-    uint32 setflags = (js_CodeSpec[*cx->fp->regs->pc].format & (JOF_SET | JOF_INCDEC | JOF_FOR));
-    if (setflags && (sprop->attrs & JSPROP_READONLY))
-        ABORT_TRACE("writing to a read-only property");
-
-    uintN slot = sprop->shortid;
-
-    vp = NULL;
-    uintN upvar_slot = SPROP_INVALID_SLOT;
-    JSStackFrame* cfp = (JSStackFrame*) obj->getPrivate();
-    if (cfp) {
-        if (sprop->getter == js_GetCallArg) {
-            JS_ASSERT(slot < cfp->fun->nargs);
-            vp = &cfp->argv[slot];
-            upvar_slot = slot;
-            nr.v = *vp;
-        } else if (sprop->getter == js_GetCallVar) {
-            JS_ASSERT(slot < cfp->script->nslots);
-            vp = &cfp->slots[slot];
-            upvar_slot = cx->fp->fun->nargs + slot;
-            nr.v = *vp;
-        } else {
-            ABORT_TRACE("dynamic property of Call object");
-        }
-        obj2->dropProperty(cx, prop);
-
-        if (frameIfInRange(obj)) {
-            // At this point we are guaranteed to be looking at an active call oject
-            // whose properties are stored in the corresponding JSStackFrame.
-            ins = get(vp);
-            nr.tracked = true;
-            return JSRS_CONTINUE;
-        }
-    } else {
-#ifdef DEBUG
-        JSBool rv =
-#endif
-            js_GetPropertyHelper(cx, obj, sprop->id, JS_FALSE, &nr.v);
-        JS_ASSERT(rv);
-        obj2->dropProperty(cx, prop);
-    }
-
-    // Compute number of scope chain links to result.
-    jsint scopeIndex = 0;
-    JSObject* tmp = JSVAL_TO_OBJECT(cx->fp->argv[-2]);
-    while (tmp != obj) {
-        tmp = OBJ_GET_PARENT(cx, tmp);
-        scopeIndex++;
-    }
-    JS_ASSERT(scopeIndex >= 1);
-
-    LIns* cv_ins = lir_buf_writer->insSkip(sizeof(ClosureVarInfo));
-    ClosureVarInfo* cv = (ClosureVarInfo*) cv_ins->payload();
-    cv->id = id;
-    cv->scopeIndex = scopeIndex;
-    cv->slot = slot;
-    cv->callDepth = callDepth;
-    cv->resolveFlags = cx->resolveFlags == JSRESOLVE_INFER
-                     ? js_InferFlags(cx, 0)
-                     : cx->resolveFlags;
-
-    LIns* callee_ins = get(&cx->fp->argv[-2]);
-    LIns* outp = lir->insAlloc(sizeof(double));
-    LIns* args[] = {
-        outp,
-        INS_CONSTPTR(cv),
-        callee_ins,
-        cx_ins
-    };
-    const CallInfo* ci;
-    if (sprop->getter == js_GetCallArg)
-        ci = &GetClosureArg_ci;
-    else
-        ci = &GetClosureVar_ci;
-
-    LIns* call_ins = lir->insCall(ci, args);
-    JSTraceType type = getCoercedType(nr.v);
-    guard(true,
-          addName(lir->ins2(LIR_eq, call_ins, lir->insImm(type)),
-                  "guard(type-stable name access)"),
-          BRANCH_EXIT);
-    ins = stackLoad(outp, type);
-    nr.tracked = false;
-    nr.obj = obj;
-    nr.scopeIndex = scopeIndex;
-    nr.sprop = sprop;
-    return JSRS_CONTINUE;
-}
-
 JS_REQUIRES_STACK LIns*
 TraceRecorder::arg(unsigned n)
 {
     return get(&argval(n));
 }
 
 JS_REQUIRES_STACK void
 TraceRecorder::arg(unsigned n, LIns* i)
@@ -9647,33 +9611,32 @@ TraceRecorder::record_JSOP_DECELEM()
 
 JS_REQUIRES_STACK JSRecordingStatus
 TraceRecorder::incName(jsint incr, bool pre)
 {
     jsval* vp;
     LIns* v_ins;
     LIns* v_after;
     NameResult nr;
-
+    
     CHECK_STATUS(name(vp, v_ins, nr));
-    jsval v = nr.tracked ? *vp : nr.v;
-    CHECK_STATUS(incHelper(v, v_ins, v_after, incr));
+    CHECK_STATUS(incHelper(*vp, v_ins, v_after, incr));
     LIns* v_result = pre ? v_after : v_ins;
     if (nr.tracked) {
         set(vp, v_after);
         stack(0, v_result);
         return JSRS_CONTINUE;
     }
 
     if (OBJ_GET_CLASS(cx, nr.obj) != &js_CallClass)
         ABORT_TRACE("incName on unsupported object class");
     LIns* callobj_ins = get(&cx->fp->argv[-2]);
     for (jsint i = 0; i < nr.scopeIndex; ++i)
         callobj_ins = stobj_get_parent(callobj_ins);
-    CHECK_STATUS(setCallProp(nr.obj, callobj_ins, nr.sprop, v_after, v));
+    CHECK_STATUS(setCallProp(nr.obj, callobj_ins, nr.sprop, v_after, *vp));
     stack(0, v_result);
     return JSRS_CONTINUE;
 }
 
 JS_REQUIRES_STACK JSRecordingStatus
 TraceRecorder::record_JSOP_NAMEINC()
 {
     return incName(1, false);
--- a/js/src/jstracer.h
+++ b/js/src/jstracer.h
@@ -691,26 +691,24 @@ class TraceRecorder : public avmplus::GC
     JS_REQUIRES_STACK jsval& varval(unsigned n) const;
     JS_REQUIRES_STACK jsval& stackval(int n) const;
 
     struct NameResult {
         // |tracked| is true iff the result of the name lookup is a variable that
         // is already in the tracker. The rest of the fields are set only if
         // |tracked| is false.
         bool             tracked;
-        jsval            v;              // current property value
         JSObject         *obj;           // Call object where name was found
         jsint            scopeIndex;     // scope chain links from callee to obj
         JSScopeProperty  *sprop;         // sprop name was resolved to
     };
 
     JS_REQUIRES_STACK nanojit::LIns* scopeChain() const;
     JS_REQUIRES_STACK JSStackFrame* frameIfInRange(JSObject* obj, unsigned* depthp = NULL) const;
     JS_REQUIRES_STACK JSRecordingStatus scopeChainProp(JSObject* obj, jsval*& vp, nanojit::LIns*& ins, NameResult& nr);
-    JS_REQUIRES_STACK JSRecordingStatus callProp(JSObject* obj, JSObject* obj2, JSProperty* sprop, jsid id, jsval*& vp, nanojit::LIns*& ins, NameResult& nr);
 
     JS_REQUIRES_STACK nanojit::LIns* arg(unsigned n);
     JS_REQUIRES_STACK void arg(unsigned n, nanojit::LIns* i);
     JS_REQUIRES_STACK nanojit::LIns* var(unsigned n);
     JS_REQUIRES_STACK void var(unsigned n, nanojit::LIns* i);
     JS_REQUIRES_STACK nanojit::LIns* upvar(JSScript* script, JSUpvarArray* uva, uintN index, jsval& v);
     nanojit::LIns* stackLoad(nanojit::LIns* addr, uint8 type);
     JS_REQUIRES_STACK nanojit::LIns* stack(int n);
@@ -727,17 +725,17 @@ class TraceRecorder : public avmplus::GC
     JS_REQUIRES_STACK JSRecordingStatus ifop();
     JS_REQUIRES_STACK JSRecordingStatus switchop();
 #ifdef NANOJIT_IA32
     JS_REQUIRES_STACK JSRecordingStatus tableswitch();
 #endif
     JS_REQUIRES_STACK JSRecordingStatus inc(jsval& v, jsint incr, bool pre = true);
     JS_REQUIRES_STACK JSRecordingStatus inc(jsval v, nanojit::LIns*& v_ins, jsint incr,
                                             bool pre = true);
-    JS_REQUIRES_STACK JSRecordingStatus incHelper(jsval v, nanojit::LIns* v_ins,
+    JS_REQUIRES_STACK JSRecordingStatus incHelper(jsval v, nanojit::LIns* v_ins, 
                                                   nanojit::LIns*& v_after, jsint incr);
     JS_REQUIRES_STACK JSRecordingStatus incProp(jsint incr, bool pre = true);
     JS_REQUIRES_STACK JSRecordingStatus incElem(jsint incr, bool pre = true);
     JS_REQUIRES_STACK JSRecordingStatus incName(jsint incr, bool pre = true);
 
     JS_REQUIRES_STACK void strictEquality(bool equal, bool cmpCase);
     JS_REQUIRES_STACK JSRecordingStatus equality(bool negate, bool tryBranchAfterCond);
     JS_REQUIRES_STACK JSRecordingStatus equalityHelper(jsval l, jsval r,
deleted file mode 100644
--- a/js/src/trace-test/tests/basic/name-inactive-del.js
+++ /dev/null
@@ -1,28 +0,0 @@
-function mp(g) {
-  var ans = '';
-  for (var i = 0; i < 5; ++i) {
-    ans += g();
-  }
-
-  return ans;
-}
-
-function f() {
-  var k = 5;
-
-  function g() {
-    return k;
-  }
-
-  ans = '';
-
-  k = 6;
-  ans += mp(g);
-
-  delete k;
-  ans += mp(g);
-
-  return ans;
-}
-
-assertEq(f(), '6666666666');
deleted file mode 100644
--- a/js/src/trace-test/tests/basic/name-inactive-eval-del.js
+++ /dev/null
@@ -1,10 +0,0 @@
-function mp(g) {
-  ans = ''
-  for (var i = 0; i < 5; ++i) {
-    ans += g();
-  }
-  return ans;
-}
-
-var f = eval("(function() { var k = 5; function g() { return k; } k = 6; mp(g); delete k; return mp(g); })");
-assertEq(f(), "66666");
deleted file mode 100644
--- a/js/src/trace-test/tests/basic/name-inactive-inferflags.js
+++ /dev/null
@@ -1,18 +0,0 @@
-function addAccumulations(f) {
-  var a = f();
-  var b = f();
-  return a() + b();
-}
-
-function loopingAccumulator() {
-  var x = 0;
-  return function () {
-    for (var i = 0; i < 10; ++i) {
-      ++x;
-    }
-    return x;
-  }
-}
-
-var x = addAccumulations(loopingAccumulator);
-assertEq(x, 20);
deleted file mode 100644
--- a/js/src/trace-test/tests/basic/name-inactive.js
+++ /dev/null
@@ -1,20 +0,0 @@
-function f(k) {
-  function g(j) {
-    return j + k;
-  }
-  return g;
-}
-
-g = f(10);
-var ans = '';
-for (var i = 0; i < 5; ++i) {
-  ans += g(i) + ',';
-}
-
-assertEq(ans, '10,11,12,13,14,');
-
-checkStats({
-    recorderStarted: 1,
-    recorderAborted: 0,
-    traceTriggered: 1
-});