| Index: src/json-stringifier.h
|
| diff --git a/src/json-stringifier.h b/src/json-stringifier.h
|
| index 8172b7080c2559fcceae010dc02c319706884c9b..05f4231f41ca62869049e7a708f35e0580953f87 100644
|
| --- a/src/json-stringifier.h
|
| +++ b/src/json-stringifier.h
|
| @@ -33,11 +33,6 @@ class BasicJsonStringifier BASE_EMBEDDED {
|
| Handle<Object> object,
|
| Handle<Object> key);
|
|
|
| - Result SerializeGeneric(Handle<Object> object,
|
| - Handle<Object> key,
|
| - bool deferred_comma,
|
| - bool deferred_key);
|
| -
|
| // Entry point to serialize the object.
|
| INLINE(Result SerializeObject(Handle<Object> obj)) {
|
| return Serialize_<false>(obj, false, factory()->empty_string());
|
| @@ -363,21 +358,23 @@ BasicJsonStringifier::Result BasicJsonStringifier::Serialize_(
|
| return UNCHANGED;
|
| }
|
| case JS_ARRAY_TYPE:
|
| - if (object->IsAccessCheckNeeded()) break;
|
| if (deferred_string_key) SerializeDeferredKey(comma, key);
|
| return SerializeJSArray(Handle<JSArray>::cast(object));
|
| case JS_VALUE_TYPE:
|
| if (deferred_string_key) SerializeDeferredKey(comma, key);
|
| return SerializeJSValue(Handle<JSValue>::cast(object));
|
| + case SIMD128_VALUE_TYPE:
|
| + case SYMBOL_TYPE:
|
| + return UNCHANGED;
|
| default:
|
| if (object->IsString()) {
|
| if (deferred_string_key) SerializeDeferredKey(comma, key);
|
| SerializeString(Handle<String>::cast(object));
|
| return SUCCESS;
|
| - } else if (object->IsJSReceiver()) {
|
| + } else {
|
| + DCHECK(object->IsJSReceiver());
|
| if (object->IsCallable()) return UNCHANGED;
|
| // Go to slow path for global proxy and objects requiring access checks.
|
| - if (object->IsAccessCheckNeeded() || object->IsJSGlobalProxy()) break;
|
| if (deferred_string_key) SerializeDeferredKey(comma, key);
|
| if (object->IsJSProxy()) {
|
| return SerializeJSProxy(Handle<JSProxy>::cast(object));
|
| @@ -386,30 +383,8 @@ BasicJsonStringifier::Result BasicJsonStringifier::Serialize_(
|
| }
|
| }
|
|
|
| - return SerializeGeneric(object, key, comma, deferred_string_key);
|
| -}
|
| -
|
| -
|
| -BasicJsonStringifier::Result BasicJsonStringifier::SerializeGeneric(
|
| - Handle<Object> object,
|
| - Handle<Object> key,
|
| - bool deferred_comma,
|
| - bool deferred_key) {
|
| - Handle<JSFunction> fun = isolate_->json_serialize_adapter();
|
| - Handle<Object> indent(Smi::FromInt(indent_), isolate_);
|
| - Handle<Object> argv[] = {key, object, indent, gap_string_};
|
| - Handle<Object> result;
|
| - ASSIGN_RETURN_ON_EXCEPTION_VALUE(
|
| - isolate_, result,
|
| - Execution::Call(isolate_, fun, object, arraysize(argv), argv), EXCEPTION);
|
| - if (result->IsUndefined()) return UNCHANGED;
|
| - if (deferred_key) {
|
| - if (key->IsSmi()) key = factory()->NumberToString(key);
|
| - SerializeDeferredKey(deferred_comma, key);
|
| - }
|
| -
|
| - builder_.AppendString(Handle<String>::cast(result));
|
| - return SUCCESS;
|
| + UNREACHABLE();
|
| + return UNCHANGED;
|
| }
|
|
|
|
|
| @@ -433,8 +408,6 @@ BasicJsonStringifier::Result BasicJsonStringifier::SerializeJSValue(
|
| builder_.AppendCString(value->IsTrue() ? "true" : "false");
|
| } else {
|
| // ES6 24.3.2.1 step 10.c, serialize as an ordinary JSObject.
|
| - CHECK(!object->IsAccessCheckNeeded());
|
| - CHECK(!object->IsJSGlobalProxy());
|
| return SerializeJSObject(object);
|
| }
|
| return SUCCESS;
|
| @@ -471,6 +444,7 @@ BasicJsonStringifier::Result BasicJsonStringifier::SerializeJSArray(
|
| if (stack_push != SUCCESS) return stack_push;
|
| uint32_t length = 0;
|
| CHECK(object->length()->ToArrayLength(&length));
|
| + DCHECK(!object->IsAccessCheckNeeded());
|
| builder_.AppendCharacter('[');
|
| Indent();
|
| switch (object->GetElementsKind()) {
|
| @@ -561,12 +535,12 @@ BasicJsonStringifier::Result BasicJsonStringifier::SerializeJSObject(
|
| HandleScope handle_scope(isolate_);
|
| Result stack_push = StackPush(object);
|
| if (stack_push != SUCCESS) return stack_push;
|
| - DCHECK(!object->IsJSGlobalProxy() && !object->IsJSGlobalObject());
|
|
|
| if (object->map()->instance_type() > LAST_CUSTOM_ELEMENTS_RECEIVER &&
|
| object->HasFastProperties() &&
|
| Handle<JSObject>::cast(object)->elements()->length() == 0) {
|
| DCHECK(object->IsJSObject());
|
| + DCHECK(!object->IsJSGlobalProxy());
|
| Handle<JSObject> js_obj = Handle<JSObject>::cast(object);
|
| DCHECK(!js_obj->HasIndexedInterceptor());
|
| DCHECK(!js_obj->HasNamedInterceptor());
|
|
|