njs_value_t *value, *name, *desc, lvalue;
if (!njs_is_object(njs_arg(args, nargs, 1))) {
- njs_type_error(vm, "cannot convert %s argument to object",
- njs_type_string(njs_arg(args, nargs, 1)->type));
- return NJS_ERROR;
- }
-
- value = njs_argument(args, 1);
-
- if (!njs_object(value)->extensible) {
- njs_type_error(vm, "object is not extensible");
+ njs_type_error(vm, "Object.defineProperty is called on non-object");
return NJS_ERROR;
}
return NJS_ERROR;
}
+ value = njs_argument(args, 1);
name = njs_lvalue_arg(&lvalue, args, nargs, 2);
ret = njs_object_prop_define(vm, value, name, desc,
njs_object_prop_t *prop;
if (!njs_is_object(njs_arg(args, nargs, 1))) {
- njs_type_error(vm, "cannot convert %s argument to object",
- njs_type_string(njs_arg(args, nargs, 1)->type));
+ njs_type_error(vm, "Object.defineProperties is called on non-object");
return NJS_ERROR;
}
value = njs_argument(args, 1);
- if (!njs_object(value)->extensible) {
- njs_type_error(vm, "object is not extensible");
- return NJS_ERROR;
- }
-
desc = njs_arg(args, nargs, 2);
if (!njs_is_object(desc)) {
njs_str("2") },
{ njs_str("var o = {}; Object.defineProperty()"),
- njs_str("TypeError: cannot convert undefined argument to object") },
+ njs_str("TypeError: Object.defineProperty is called on non-object") },
{ njs_str("var o = {}; Object.defineProperty(o)"),
njs_str("TypeError: descriptor is not an object") },
njs_str("true") },
{ njs_str("Object.defineProperties()"),
- njs_str("TypeError: cannot convert undefined argument to object") },
+ njs_str("TypeError: Object.defineProperties is called on non-object") },
{ njs_str("Object.defineProperties(1, {})"),
- njs_str("TypeError: cannot convert number argument to object") },
+ njs_str("TypeError: Object.defineProperties is called on non-object") },
{ njs_str("Object.defineProperties({}, 1)"),
njs_str("TypeError: descriptor is not an object") },
+ { njs_str("Object.defineProperties(Object.freeze({b:1}), {b:{value:1}}).b"),
+ njs_str("1") },
+
+ { njs_str("Object.defineProperties(Object.freeze({b:1}), {b:{value:2}})"),
+ njs_str("TypeError: Cannot redefine property: \"b\"") },
+
+ { njs_str("Object.defineProperties(Object.freeze({b:1}), {c:{value:1}})"),
+ njs_str("TypeError: Cannot add property \"c\", object is not extensible") },
+
{ njs_str("var o = {a:1}; o.hasOwnProperty('a')"),
njs_str("true") },
njs_str("name,length") },
{ njs_str("Object.defineProperty(Object.freeze({}), 'b', {})"),
- njs_str("TypeError: object is not extensible") },
+ njs_str("TypeError: Cannot add property \"b\", object is not extensible") },
{ njs_str("Object.defineProperties(Object.freeze({}), {b:{}})"),
- njs_str("TypeError: object is not extensible") },
+ njs_str("TypeError: Cannot add property \"b\", object is not extensible") },
{ njs_str("Object.freeze()"),
njs_str("undefined") },
{ njs_str("var a = Object.freeze([1,2]);"
"Object.defineProperty(a, 'a', {value:1}).a"),
- njs_str("TypeError: object is not extensible") },
+ njs_str("TypeError: Cannot add property \"a\", object is not extensible") },
{ njs_str("var a = [1,2]; a.a = 1; Object.freeze(a); delete a.a"),
njs_str("TypeError: Cannot delete property \"a\" of array") },
{ njs_str("var f = Object.freeze(function() {});"
"Object.defineProperty(f, 'a', {value:1}).a"),
- njs_str("TypeError: object is not extensible") },
+ njs_str("TypeError: Cannot add property \"a\", object is not extensible") },
{ njs_str("var f = function() {}; f.a = 1; Object.freeze(f); delete f.a"),
njs_str("TypeError: Cannot delete property \"a\" of function") },
{ njs_str("var d = Object.freeze(new Date(''));"
"Object.defineProperty(d, 'a', {value:1}).a"),
- njs_str("TypeError: object is not extensible") },
+ njs_str("TypeError: Cannot add property \"a\", object is not extensible") },
{ njs_str("var d = new Date(''); d.a = 1; Object.freeze(d);"
"delete d.a"),
{ njs_str("var r = Object.freeze(new RegExp(''));"
"Object.defineProperty(r, 'a', {value:1}).a"),
- njs_str("TypeError: object is not extensible") },
+ njs_str("TypeError: Cannot add property \"a\", object is not extensible") },
{ njs_str("var r = new RegExp(''); r.a = 1; Object.freeze(r); delete r.a"),
njs_str("TypeError: Cannot delete property \"a\" of regexp") },
{ njs_str("var o = Object.preventExtensions({a:1});"
"Object.defineProperty(o, 'b', {value:1})"),
- njs_str("TypeError: object is not extensible") },
+ njs_str("TypeError: Cannot add property \"b\", object is not extensible") },
{ njs_str("var o = Object.preventExtensions({a:1});"
"Object.defineProperties(o, {b:{value:1}})"),
- njs_str("TypeError: object is not extensible") },
+ njs_str("TypeError: Cannot add property \"b\", object is not extensible") },
{ njs_str("var o = Object.preventExtensions({a:1}); o.a = 2; o.a"),
njs_str("2") },
{ njs_str("Object.isExtensible([])"),
njs_str("true") },
+ { njs_str("var arrObj = [];Object.preventExtensions(arrObj); arrObj[1] = 1"),
+ njs_str("TypeError: Cannot add property \"1\", object is not extensible") },
+
+ { njs_str("var arrObj = [1,2];Object.preventExtensions(arrObj); arrObj[1] = 1"),
+ njs_str("1") },
+
{ njs_str("Object.isExtensible(function() {})"),
njs_str("true") },