Chromium Code Reviews| Index: runtime/lib/object.cc |
| diff --git a/runtime/lib/object.cc b/runtime/lib/object.cc |
| index bdfc43dbedda78dc6ccf4ea2bac121854d317f1d..1605ba93039305102f4f46a3a97488bc7fc83cf6 100644 |
| --- a/runtime/lib/object.cc |
| +++ b/runtime/lib/object.cc |
| @@ -169,19 +169,21 @@ DEFINE_NATIVE_ENTRY(Object_haveSameRuntimeType, 2) { |
| } |
| -DEFINE_NATIVE_ENTRY(Object_instanceOf, 3) { |
| +DEFINE_NATIVE_ENTRY(Object_instanceOf, 4) { |
| const Instance& instance = |
| Instance::CheckedHandle(zone, arguments->NativeArgAt(0)); |
| const TypeArguments& instantiator_type_arguments = |
| TypeArguments::CheckedHandle(zone, arguments->NativeArgAt(1)); |
| + const TypeArguments& function_type_arguments = |
| + TypeArguments::CheckedHandle(zone, arguments->NativeArgAt(2)); |
| const AbstractType& type = |
| - AbstractType::CheckedHandle(zone, arguments->NativeArgAt(2)); |
| + AbstractType::CheckedHandle(zone, arguments->NativeArgAt(3)); |
| ASSERT(type.IsFinalized()); |
| ASSERT(!type.IsMalformed()); |
| ASSERT(!type.IsMalbounded()); |
| Error& bound_error = Error::Handle(zone, Error::null()); |
| - const bool is_instance_of = |
| - instance.IsInstanceOf(type, instantiator_type_arguments, &bound_error); |
| + const bool is_instance_of = instance.IsInstanceOf( |
| + type, instantiator_type_arguments, function_type_arguments, &bound_error); |
| if (FLAG_trace_type_checks) { |
| const char* result_str = is_instance_of ? "true" : "false"; |
| OS::Print("Native Object.instanceOf: result %s\n", result_str); |
| @@ -218,14 +220,15 @@ DEFINE_NATIVE_ENTRY(Object_simpleInstanceOf, 2) { |
| Instance::CheckedHandle(zone, arguments->NativeArgAt(0)); |
| const AbstractType& type = |
| AbstractType::CheckedHandle(zone, arguments->NativeArgAt(1)); |
| - const TypeArguments& instantiator_type_arguments = |
| + const TypeArguments& null_type_arguments = |
| TypeArguments::Handle(TypeArguments::null()); |
| ASSERT(type.IsFinalized()); |
| ASSERT(!type.IsMalformed()); |
| ASSERT(!type.IsMalbounded()); |
| + ASSERT(type.IsInstantiated()); |
| Error& bound_error = Error::Handle(zone, Error::null()); |
| - const bool is_instance_of = |
| - instance.IsInstanceOf(type, instantiator_type_arguments, &bound_error); |
| + const bool is_instance_of = instance.IsInstanceOf( |
| + type, null_type_arguments, null_type_arguments, &bound_error); |
|
siva
2017/04/10 22:04:55
ditto question about using Object::null_type_argum
regis
2017/04/11 04:23:07
Done.
|
| if (!is_instance_of && !bound_error.IsNull()) { |
| // Throw a dynamic type error only if the instanceof test fails. |
| DartFrameIterator iterator; |
| @@ -243,20 +246,23 @@ DEFINE_NATIVE_ENTRY(Object_simpleInstanceOf, 2) { |
| } |
| -DEFINE_NATIVE_ENTRY(Object_as, 3) { |
| +DEFINE_NATIVE_ENTRY(Object_as, 4) { |
| const Instance& instance = |
| Instance::CheckedHandle(zone, arguments->NativeArgAt(0)); |
| const TypeArguments& instantiator_type_arguments = |
| TypeArguments::CheckedHandle(zone, arguments->NativeArgAt(1)); |
| + const TypeArguments& function_type_arguments = |
| + TypeArguments::CheckedHandle(zone, arguments->NativeArgAt(2)); |
| AbstractType& type = |
| - AbstractType::CheckedHandle(zone, arguments->NativeArgAt(2)); |
| + AbstractType::CheckedHandle(zone, arguments->NativeArgAt(3)); |
| ASSERT(type.IsFinalized()); |
| ASSERT(!type.IsMalformed()); |
| ASSERT(!type.IsMalbounded()); |
| Error& bound_error = Error::Handle(zone); |
| const bool is_instance_of = |
| instance.IsNull() || |
| - instance.IsInstanceOf(type, instantiator_type_arguments, &bound_error); |
| + instance.IsInstanceOf(type, instantiator_type_arguments, |
| + function_type_arguments, &bound_error); |
| if (FLAG_trace_type_checks) { |
| const char* result_str = is_instance_of ? "true" : "false"; |
| OS::Print("Object.as: result %s\n", result_str); |
| @@ -279,7 +285,8 @@ DEFINE_NATIVE_ENTRY(Object_as, 3) { |
| AbstractType::Handle(zone, instance.GetType(Heap::kNew)); |
| if (!type.IsInstantiated()) { |
| // Instantiate type before reporting the error. |
| - type = type.InstantiateFrom(instantiator_type_arguments, NULL, NULL, NULL, |
| + type = type.InstantiateFrom(instantiator_type_arguments, |
| + function_type_arguments, NULL, NULL, NULL, |
| Heap::kNew); |
| // Note that the instantiated type may be malformed. |
| } |