njs_array_t *array;
njs_value_t key, retval;
njs_object_prop_t _prop;
- njs_object_prop_t *prop = &_prop, *prev, *obj_prop;
+ njs_object_prop_t *prop, *prev, *obj_prop;
njs_property_query_t pq;
-again:
-
set_enumerable = 1;
set_configurable = 1;
set_writable = 1;
-
- njs_property_query_init(&pq, NJS_PROPERTY_QUERY_SET, 1);
-
- ret = (flags & NJS_OBJECT_PROP_CREATE)
- ? NJS_DECLINED
- : njs_property_query(vm, &pq, object, atom_id);
-
- if (njs_slow_path(ret == NJS_ERROR)) {
- return ret;
- }
+ prop = &_prop;
switch (njs_prop_type(flags)) {
case NJS_OBJECT_PROP_DESCRIPTOR:
break;
}
+again:
+
+ njs_property_query_init(&pq, NJS_PROPERTY_QUERY_SET, 1);
+
+ ret = (flags & NJS_OBJECT_PROP_CREATE)
+ ? NJS_DECLINED
+ : njs_property_query(vm, &pq, object, atom_id);
+
+ if (njs_slow_path(ret == NJS_ERROR)) {
+ return ret;
+ }
+
if (njs_fast_path(ret == NJS_DECLINED)) {
set_prop:
"njs.dump(arr)"),
njs_str("[1,'[Getter]']") },
+ { njs_str("var a = [1], n = 0;"
+ "Object.defineProperty(a, 0, {"
+ " get get() { n++; a.unshift(0); return function() {}; }});"
+ "n"),
+ njs_str("1") },
+
+ { njs_str("var a = [1], n = 0;"
+ "Object.defineProperty(a, 'length', {"
+ " get writable() { n++; return false; }});"
+ "n"),
+ njs_str("1") },
+
{ njs_str("Object.defineProperties()"),
njs_str("TypeError: Object.defineProperties is called on non-object") },