From b158bf7bd537f0ae8dc520df90bbb99bc2146efe Mon Sep 17 00:00:00 2001 From: asiva Date: Sat, 8 Feb 2020 21:42:07 +0000 Subject: [PATCH] [VM/Libraries] Turn on NNBD versions of dart:io and dart:_http libraries MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Turn on NNBD versions of dart:io and dart:_http libraries - Fix an unimplemented section in Class::InvokeSetter Change-Id: I5343a76e62c0bacaddd9b1859bef5119d80bc5ac Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/134884 Commit-Queue: Siva Annamalai Reviewed-by: Régis Crelier --- runtime/vm/object.cc | 31 +++++++++---------------------- sdk_nnbd/lib/libraries.json | 32 ++++++++++++++++---------------- sdk_nnbd/lib/libraries.yaml | 32 ++++++++++++++++---------------- 3 files changed, 41 insertions(+), 54 deletions(-) diff --git a/runtime/vm/object.cc b/runtime/vm/object.cc index aa260d738b7..d1ba5f5acec 100644 --- a/runtime/vm/object.cc +++ b/runtime/vm/object.cc @@ -3914,8 +3914,7 @@ RawObject* Class::InvokeSetter(const String& setter_name, } AbstractType& parameter_type = AbstractType::Handle(zone); - AbstractType& argument_type = - AbstractType::Handle(zone, value.GetType(Heap::kOld)); + NNBDMode mode = nnbd_mode(); if (field.IsNull()) { const Function& setter = @@ -3933,14 +3932,9 @@ RawObject* Class::InvokeSetter(const String& setter_name, InvocationMirror::kSetter); } parameter_type = setter.ParameterTypeAt(0); - if (nnbd_mode() != NNBDMode::kLegacyLib) { - // TODO(regis): Make type check nullability aware. - UNIMPLEMENTED(); - } - if (!argument_type.IsNullType() && !parameter_type.IsDynamicType() && - !value.IsInstanceOf(nnbd_mode(), parameter_type, - Object::null_type_arguments(), - Object::null_type_arguments())) { + if (!value.RuntimeTypeIsSubtypeOf(mode, parameter_type, + Object::null_type_arguments(), + Object::null_type_arguments())) { const String& argument_name = String::Handle(zone, setter.ParameterNameAt(0)); return ThrowTypeError(setter.token_pos(), value, parameter_type, @@ -3961,14 +3955,9 @@ RawObject* Class::InvokeSetter(const String& setter_name, } parameter_type = field.type(); - if (nnbd_mode() != NNBDMode::kLegacyLib) { - // TODO(regis): Make type check nullability aware. - UNIMPLEMENTED(); - } - if (!argument_type.IsNullType() && !parameter_type.IsDynamicType() && - !value.IsInstanceOf(nnbd_mode(), parameter_type, - Object::null_type_arguments(), - Object::null_type_arguments())) { + if (!value.RuntimeTypeIsSubtypeOf(mode, parameter_type, + Object::null_type_arguments(), + Object::null_type_arguments())) { const String& argument_name = String::Handle(zone, field.name()); return ThrowTypeError(field.token_pos(), value, parameter_type, argument_name); @@ -17427,8 +17416,6 @@ bool Instance::IsInstanceOf( ASSERT(other.IsFinalized()); ASSERT(!other.IsDynamicType()); ASSERT(!other.IsTypeRef()); // Must be dereferenced at compile time. - // Note that Object::sentinel() has Null class, but !IsNull(). - ASSERT(raw() != Object::sentinel().raw()); if (IsNull()) { if (mode == NNBDMode::kOptedInLib) { // Compute NNBD_SUBTYPE(Null, other), either in weak or strong mode. @@ -17460,8 +17447,6 @@ bool Instance::IsAssignableTo( ASSERT(other.IsFinalized()); ASSERT(!other.IsDynamicType()); ASSERT(!other.IsTypeRef()); // Must be dereferenced at compile time. - // Note that Object::sentinel() has Null class, but !IsNull(). - ASSERT(raw() != Object::sentinel().raw()); // In weak mode type casts, whether in legacy or opted-in libraries, the null // instance is detected and handled in inlined code and therefore cannot be // encountered here as a Dart null receiver. @@ -17545,6 +17530,8 @@ bool Instance::RuntimeTypeIsSubtypeOf( ASSERT(other.IsFinalized()); ASSERT(!other.IsDynamicType()); ASSERT(!other.IsTypeRef()); // Must be dereferenced at compile time. + // Note that Object::sentinel() has Null class, but !IsNull(). + ASSERT(raw() != Object::sentinel().raw()); // Instance may not have runtimeType dynamic, void, or Never. if (other.IsTopType(mode)) { return true; diff --git a/sdk_nnbd/lib/libraries.json b/sdk_nnbd/lib/libraries.json index 7602d80d9bd..a54b73ff98d 100644 --- a/sdk_nnbd/lib/libraries.json +++ b/sdk_nnbd/lib/libraries.json @@ -97,25 +97,25 @@ ] }, "_http": { - "uri": "../../sdk/lib/_http/http.dart" + "uri": "_http/http.dart" }, "io": { - "uri": "../../sdk/lib/io/io.dart", + "uri": "io/io.dart", "patches": [ - "../../sdk/lib/_internal/vm/bin/common_patch.dart", - "../../sdk/lib/_internal/vm/bin/directory_patch.dart", - "../../sdk/lib/_internal/vm/bin/eventhandler_patch.dart", - "../../sdk/lib/_internal/vm/bin/file_patch.dart", - "../../sdk/lib/_internal/vm/bin/file_system_entity_patch.dart", - "../../sdk/lib/_internal/vm/bin/filter_patch.dart", - "../../sdk/lib/_internal/vm/bin/io_service_patch.dart", - "../../sdk/lib/_internal/vm/bin/namespace_patch.dart", - "../../sdk/lib/_internal/vm/bin/platform_patch.dart", - "../../sdk/lib/_internal/vm/bin/process_patch.dart", - "../../sdk/lib/_internal/vm/bin/socket_patch.dart", - "../../sdk/lib/_internal/vm/bin/stdio_patch.dart", - "../../sdk/lib/_internal/vm/bin/secure_socket_patch.dart", - "../../sdk/lib/_internal/vm/bin/sync_socket_patch.dart" + "_internal/vm/bin/common_patch.dart", + "_internal/vm/bin/directory_patch.dart", + "_internal/vm/bin/eventhandler_patch.dart", + "_internal/vm/bin/file_patch.dart", + "_internal/vm/bin/file_system_entity_patch.dart", + "_internal/vm/bin/filter_patch.dart", + "_internal/vm/bin/io_service_patch.dart", + "_internal/vm/bin/namespace_patch.dart", + "_internal/vm/bin/platform_patch.dart", + "_internal/vm/bin/process_patch.dart", + "_internal/vm/bin/socket_patch.dart", + "_internal/vm/bin/stdio_patch.dart", + "_internal/vm/bin/secure_socket_patch.dart", + "_internal/vm/bin/sync_socket_patch.dart" ] }, "isolate": { diff --git a/sdk_nnbd/lib/libraries.yaml b/sdk_nnbd/lib/libraries.yaml index 986b024de15..2ba3e0912dc 100644 --- a/sdk_nnbd/lib/libraries.yaml +++ b/sdk_nnbd/lib/libraries.yaml @@ -100,25 +100,25 @@ vm: - "_internal/vm/lib/wasm_patch.dart" _http: - uri: "../../sdk/lib/_http/http.dart" + uri: "_http/http.dart" io: - uri: "../../sdk/lib/io/io.dart" + uri: "io/io.dart" patches: - - "../../sdk/lib/_internal/vm/bin/common_patch.dart" - - "../../sdk/lib/_internal/vm/bin/directory_patch.dart" - - "../../sdk/lib/_internal/vm/bin/eventhandler_patch.dart" - - "../../sdk/lib/_internal/vm/bin/file_patch.dart" - - "../../sdk/lib/_internal/vm/bin/file_system_entity_patch.dart" - - "../../sdk/lib/_internal/vm/bin/filter_patch.dart" - - "../../sdk/lib/_internal/vm/bin/io_service_patch.dart" - - "../../sdk/lib/_internal/vm/bin/namespace_patch.dart" - - "../../sdk/lib/_internal/vm/bin/platform_patch.dart" - - "../../sdk/lib/_internal/vm/bin/process_patch.dart" - - "../../sdk/lib/_internal/vm/bin/socket_patch.dart" - - "../../sdk/lib/_internal/vm/bin/stdio_patch.dart" - - "../../sdk/lib/_internal/vm/bin/secure_socket_patch.dart" - - "../../sdk/lib/_internal/vm/bin/sync_socket_patch.dart" + - "_internal/vm/bin/common_patch.dart" + - "_internal/vm/bin/directory_patch.dart" + - "_internal/vm/bin/eventhandler_patch.dart" + - "_internal/vm/bin/file_patch.dart" + - "_internal/vm/bin/file_system_entity_patch.dart" + - "_internal/vm/bin/filter_patch.dart" + - "_internal/vm/bin/io_service_patch.dart" + - "_internal/vm/bin/namespace_patch.dart" + - "_internal/vm/bin/platform_patch.dart" + - "_internal/vm/bin/process_patch.dart" + - "_internal/vm/bin/socket_patch.dart" + - "_internal/vm/bin/stdio_patch.dart" + - "_internal/vm/bin/secure_socket_patch.dart" + - "_internal/vm/bin/sync_socket_patch.dart" isolate: uri: "isolate/isolate.dart"