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. |
} |