Merge.
authorAndreas Gal <gal@mozilla.com>
Tue, 03 Feb 2009 23:57:34 -0800
changeset 24621 a2108d986104f3476268ecec6c3266a8d78e0222
parent 24616 4ed96133d9cbd7cda555d2a9ef481090816eb759 (current diff)
parent 24620 06dbba36f4e18ffa00eab6dd0bd13767ce70cebd (diff)
child 24622 75594d462f1b1fb2fb6967fddeb936836e21a305
push id5132
push userrsayre@mozilla.com
push dateWed, 04 Feb 2009 20:48:09 +0000
treeherdermozilla-central@76ca30e94e5c [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
milestone1.9.2a1pre
Merge.
js/src/jsdbgapi.cpp
--- a/js/src/jsdbgapi.cpp
+++ b/js/src/jsdbgapi.cpp
@@ -1237,46 +1237,39 @@ JS_SetDestroyScriptHook(JSRuntime *rt, J
 
 JS_PUBLIC_API(JSBool)
 JS_EvaluateUCInStackFrame(JSContext *cx, JSStackFrame *fp,
                           const jschar *chars, uintN length,
                           const char *filename, uintN lineno,
                           jsval *rval)
 {
     JSObject *scobj;
-    JSScript *script, *oldscript;
-    JSStackFrame **disp, *displaySave;
+    JSScript *script;
     JSBool ok;
 
     scobj = JS_GetFrameScopeChain(cx, fp);
     if (!scobj)
         return JS_FALSE;
 
-    oldscript = fp->script;
+    /*
+     * NB: This function breaks the assumption that the compiler can see all
+     * calls and properly compute a static depth. In order to get around this,
+     * we use a static depth that will cause us not to attempt to optimize
+     * variable references made by this frame.
+     */
     script = js_CompileScript(cx, scobj, fp, JS_StackFramePrincipals(cx, fp),
                               TCF_COMPILE_N_GO |
-                              TCF_PUT_STATIC_DEPTH(oldscript->staticDepth + 1),
+                              TCF_PUT_STATIC_DEPTH(JS_DISPLAY_SIZE),
                               chars, length, NULL,
                               filename, lineno);
     if (!script)
         return JS_FALSE;
 
-    /* Ensure that the display is up to date for this particular stack frame. */
-    if (oldscript->staticDepth < JS_DISPLAY_SIZE) {
-        disp = &cx->display[oldscript->staticDepth];
-        displaySave = *disp;
-        *disp = fp;
-    } else {
-        disp = NULL;
-        displaySave = NULL;
-    }
     ok = js_Execute(cx, scobj, script, fp, JSFRAME_DEBUGGER | JSFRAME_EVAL,
                     rval);
-    if (disp)
-        *disp = displaySave;
     js_DestroyScript(cx, script);
     return ok;
 }
 
 JS_PUBLIC_API(JSBool)
 JS_EvaluateInStackFrame(JSContext *cx, JSStackFrame *fp,
                         const char *bytes, uintN length,
                         const char *filename, uintN lineno,
--- a/js/src/jsemit.cpp
+++ b/js/src/jsemit.cpp
@@ -1887,17 +1887,17 @@ BindNameToSlot(JSContext *cx, JSCodeGene
                 return JS_TRUE;
 
             /*
              * We are compiling eval or debug script inside a function frame
              * and the scope chain matches function's variable object.
              * Optimize access to function's arguments and variable and the
              * arguments object.
              */
-            if (PN_OP(pn) != JSOP_NAME || cg->staticDepth > JS_DISPLAY_SIZE)
+            if (PN_OP(pn) != JSOP_NAME || cg->staticDepth >= JS_DISPLAY_SIZE)
                 goto arguments_check;
             localKind = js_LookupLocal(cx, caller->fun, atom, &index);
             if (localKind == JSLOCAL_NONE)
                 goto arguments_check;
 
             /*
              * Don't generate upvars on the left side of a for loop. See
              * bug 470758.