Merge from mozilla-central.
This commit is contained in:
@@ -306,8 +306,8 @@ iterator_self(JSContext *cx, uintN argc, jsval *vp)
|
||||
#define JSPROP_ROPERM (JSPROP_READONLY | JSPROP_PERMANENT)
|
||||
|
||||
static JSFunctionSpec iterator_methods[] = {
|
||||
JS_FN(js_iterator_str, iterator_self, 0,0,JSPROP_ROPERM),
|
||||
JS_FN(js_next_str, iterator_next, 0,0,JSPROP_ROPERM),
|
||||
JS_FN(js_iterator_str, iterator_self, 0,JSPROP_ROPERM),
|
||||
JS_FN(js_next_str, iterator_next, 0,JSPROP_ROPERM),
|
||||
JS_FS_END
|
||||
};
|
||||
|
||||
@@ -931,7 +931,7 @@ CloseGenerator(JSContext *cx, JSObject *obj)
|
||||
* Common subroutine of generator_(next|send|throw|close) methods.
|
||||
*/
|
||||
static JSBool
|
||||
generator_op(JSContext *cx, JSGeneratorOp op, jsval *vp)
|
||||
generator_op(JSContext *cx, JSGeneratorOp op, jsval *vp, uintN argc)
|
||||
{
|
||||
JSObject *obj;
|
||||
JSGenerator *gen;
|
||||
@@ -954,7 +954,7 @@ generator_op(JSContext *cx, JSGeneratorOp op, jsval *vp)
|
||||
break;
|
||||
|
||||
case JSGENOP_SEND:
|
||||
if (!JSVAL_IS_VOID(vp[2])) {
|
||||
if (argc >= 1 && !JSVAL_IS_VOID(vp[2])) {
|
||||
js_ReportValueError(cx, JSMSG_BAD_GENERATOR_SEND,
|
||||
JSDVG_SEARCH_STACK, vp[2], NULL);
|
||||
return JS_FALSE;
|
||||
@@ -973,7 +973,7 @@ generator_op(JSContext *cx, JSGeneratorOp op, jsval *vp)
|
||||
case JSGENOP_SEND:
|
||||
return js_ThrowStopIteration(cx);
|
||||
case JSGENOP_THROW:
|
||||
JS_SetPendingException(cx, vp[2]);
|
||||
JS_SetPendingException(cx, argc >= 1 ? vp[2] : JSVAL_VOID);
|
||||
return JS_FALSE;
|
||||
default:
|
||||
JS_ASSERT(op == JSGENOP_CLOSE);
|
||||
@@ -981,7 +981,7 @@ generator_op(JSContext *cx, JSGeneratorOp op, jsval *vp)
|
||||
}
|
||||
}
|
||||
|
||||
arg = (op == JSGENOP_SEND || op == JSGENOP_THROW)
|
||||
arg = ((op == JSGENOP_SEND || op == JSGENOP_THROW) && argc != 0)
|
||||
? vp[2]
|
||||
: JSVAL_VOID;
|
||||
if (!SendToGenerator(cx, op, obj, gen, arg))
|
||||
@@ -993,33 +993,33 @@ generator_op(JSContext *cx, JSGeneratorOp op, jsval *vp)
|
||||
static JSBool
|
||||
generator_send(JSContext *cx, uintN argc, jsval *vp)
|
||||
{
|
||||
return generator_op(cx, JSGENOP_SEND, vp);
|
||||
return generator_op(cx, JSGENOP_SEND, vp, argc);
|
||||
}
|
||||
|
||||
static JSBool
|
||||
generator_next(JSContext *cx, uintN argc, jsval *vp)
|
||||
{
|
||||
return generator_op(cx, JSGENOP_NEXT, vp);
|
||||
return generator_op(cx, JSGENOP_NEXT, vp, argc);
|
||||
}
|
||||
|
||||
static JSBool
|
||||
generator_throw(JSContext *cx, uintN argc, jsval *vp)
|
||||
{
|
||||
return generator_op(cx, JSGENOP_THROW, vp);
|
||||
return generator_op(cx, JSGENOP_THROW, vp, argc);
|
||||
}
|
||||
|
||||
static JSBool
|
||||
generator_close(JSContext *cx, uintN argc, jsval *vp)
|
||||
{
|
||||
return generator_op(cx, JSGENOP_CLOSE, vp);
|
||||
return generator_op(cx, JSGENOP_CLOSE, vp, argc);
|
||||
}
|
||||
|
||||
static JSFunctionSpec generator_methods[] = {
|
||||
JS_FN(js_iterator_str, iterator_self, 0,0,JSPROP_ROPERM),
|
||||
JS_FN(js_next_str, generator_next, 0,0,JSPROP_ROPERM),
|
||||
JS_FN(js_send_str, generator_send, 1,1,JSPROP_ROPERM),
|
||||
JS_FN(js_throw_str, generator_throw, 1,1,JSPROP_ROPERM),
|
||||
JS_FN(js_close_str, generator_close, 0,0,JSPROP_ROPERM),
|
||||
JS_FN(js_iterator_str, iterator_self, 0,JSPROP_ROPERM),
|
||||
JS_FN(js_next_str, generator_next, 0,JSPROP_ROPERM),
|
||||
JS_FN(js_send_str, generator_send, 1,JSPROP_ROPERM),
|
||||
JS_FN(js_throw_str, generator_throw, 1,JSPROP_ROPERM),
|
||||
JS_FN(js_close_str, generator_close, 0,JSPROP_ROPERM),
|
||||
JS_FS_END
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user