#define njs_json_is_object(value) \
(((value)->type == NJS_OBJECT) \
+ || ((value)->type == NJS_OBJECT_SYMBOL) \
|| ((value)->type == NJS_ARRAY) \
|| ((value)->type >= NJS_REGEXP))
}
if (njs_is_undefined(value)
+ || njs_is_symbol(value)
|| njs_is_function(value)
|| !njs_is_valid(value))
{
case NJS_UNDEFINED:
case NJS_NULL:
+ case NJS_SYMBOL:
case NJS_INVALID:
case NJS_FUNCTION:
default:
{ njs_str("JSON.stringify(undefined)"),
njs_str("undefined") },
+ { njs_str("JSON.stringify(Symbol())"),
+ njs_str("undefined") },
+
{ njs_str("JSON.stringify({})"),
njs_str("{}") },
{ njs_str("JSON.stringify({a:1, b:undefined})"),
njs_str("{\"a\":1}") },
+ { njs_str("JSON.stringify({a:1, b:Symbol()})"),
+ njs_str("{\"a\":1}") },
+
{ njs_str("var o = {a:1, c:2};"
"Object.defineProperty(o, 'b', {enumerable:false, value:3});"
"JSON.stringify(o)"),
{ njs_str("JSON.stringify(RegExp())"),
njs_str("{}") },
+ { njs_str("JSON.stringify(Object(Symbol()))"),
+ njs_str("{}") },
+
+ { njs_str("var s = Object(Symbol()); s.test = 'test'; JSON.stringify(s)"),
+ njs_str("{\"test\":\"test\"}") },
+
{ njs_str("JSON.stringify(SyntaxError('e'))"),
njs_str("{}") },