}
-#define njs_is_object_or_array(value) \
- (((value)->type == NJS_OBJECT) || ((value)->type == NJS_ARRAY))
+#define njs_json_is_object(value) \
+ (((value)->type == NJS_OBJECT) \
+ || ((value)->type == NJS_ARRAY) \
+ || ((value)->type >= NJS_REGEXP))
#define njs_json_stringify_append(str, len) \
njs_json_stringify_append_key(&prop->name);
- if (njs_is_object_or_array(&prop->value)) {
+ if (njs_json_is_object(&prop->value)) {
state = njs_json_push_stringify_state(vm, stringify,
&prop->value);
if (state == NULL) {
return njs_json_stringify_replacer(vm, stringify, NULL, value);
}
- if (njs_is_object_or_array(value)) {
+ if (njs_json_is_object(value)) {
state = njs_json_push_stringify_state(vm, stringify, value);
if (state == NULL) {
return NXT_ERROR;
case NJS_JSON_ARRAY_REPLACED:
state->type = NJS_JSON_ARRAY_CONTINUE;
- if (njs_is_object_or_array(&stringify->retval)) {
+ if (njs_json_is_object(&stringify->retval)) {
state = njs_json_push_stringify_state(vm, stringify,
&stringify->retval);
if (state == NULL) {
{ nxt_string("JSON.stringify({a:{}, b:[function(v){}]})"),
nxt_string("{\"a\":{},\"b\":[null]}") },
+ { nxt_string("JSON.stringify(RegExp())"),
+ nxt_string("{}") },
+
/* Ignoring named properties of an array. */
{ nxt_string("var a = [1,2]; a.a = 1;"