[JAEGER] Merge from tracemonkey.

This commit is contained in:
David Mandelin
2010-08-11 11:23:29 -07:00
15 changed files with 740 additions and 606 deletions

View File

@@ -1380,14 +1380,13 @@ array_toString(JSContext *cx, uintN argc, Value *vp)
if (!cx->stack().pushInvokeArgs(cx, 0, args))
return false;
Value *sp = args.getvp();
sp[0] = join;
sp[1].setObject(*obj);
args.callee() = join;
args.thisv().setObject(*obj);
/* Do the call. */
if (!Invoke(cx, args, 0))
return false;
*vp = *args.getvp();
*vp = args.rval();
return true;
}
@@ -1731,18 +1730,17 @@ sort_compare(void *arg, const void *a, const void *b, int *result)
if (!JS_CHECK_OPERATION_LIMIT(cx))
return JS_FALSE;
Value *invokevp = ca->args.getvp();
Value *sp = invokevp;
*sp++ = ca->fval;
*sp++ = NullValue();
*sp++ = *av;
*sp++ = *bv;
CallArgs &args = ca->args;
args.callee() = ca->fval;
args.thisv().setNull();
args[0] = *av;
args[1] = *bv;
if (!Invoke(cx, ca->args, 0))
return JS_FALSE;
jsdouble cmp;
if (!ValueToNumber(cx, *invokevp, &cmp))
if (!ValueToNumber(cx, args.rval(), &cmp))
return JS_FALSE;
/* Clamp cmp to -1, 0, 1. */
@@ -2778,7 +2776,6 @@ array_extra(JSContext *cx, ArrayExtraMode mode, uintN argc, Value *vp)
MUST_FLOW_THROUGH("out");
JSBool ok = JS_TRUE;
JSBool cond;
Value *invokevp = args.getvp();
Value calleev, thisv, objv;
calleev.setObject(*callable);
@@ -2796,18 +2793,16 @@ array_extra(JSContext *cx, ArrayExtraMode mode, uintN argc, Value *vp)
/*
* Push callable and 'this', then args. We must do this for every
* iteration around the loop since js_Invoke uses invokevp[0] for return
* value storage, while some native functions use invokevp[1] for local
* rooting.
* iteration around the loop since Invoke clobbers its arguments.
*/
Value *sp = invokevp;
*sp++ = calleev;
*sp++ = thisv;
args.callee() = calleev;
args.thisv() = thisv;
Value *sp = args.argv();
if (REDUCE_MODE(mode))
*sp++ = *vp;
*sp++ = tvr.value();
sp++->setInt32(i);
*sp++ = objv;
sp[0] = tvr.value();
sp[1].setInt32(i);
sp[2] = objv;
/* Do the call. */
ok = Invoke(cx, args, 0);
@@ -2815,7 +2810,7 @@ array_extra(JSContext *cx, ArrayExtraMode mode, uintN argc, Value *vp)
break;
if (mode > MAP)
cond = js_ValueToBoolean(*invokevp);
cond = js_ValueToBoolean(args.rval());
#ifdef __GNUC__ /* quell GCC overwarning */
else
cond = JS_FALSE;
@@ -2826,10 +2821,10 @@ array_extra(JSContext *cx, ArrayExtraMode mode, uintN argc, Value *vp)
break;
case REDUCE:
case REDUCE_RIGHT:
*vp = *invokevp;
*vp = args.rval();
break;
case MAP:
ok = SetArrayElement(cx, newarr, i, *invokevp);
ok = SetArrayElement(cx, newarr, i, args.rval());
if (!ok)
goto out;
break;