Index: runtime/vm/flow_graph_builder.cc |
=================================================================== |
--- runtime/vm/flow_graph_builder.cc (revision 32446) |
+++ runtime/vm/flow_graph_builder.cc (working copy) |
@@ -2169,8 +2169,8 @@ |
void EffectGraphVisitor::VisitArrayNode(ArrayNode* node) { |
- const AbstractTypeArguments& type_args = |
- AbstractTypeArguments::ZoneHandle(node->type().arguments()); |
+ const TypeArguments& type_args = |
+ TypeArguments::ZoneHandle(node->type().arguments()); |
Value* element_type = BuildInstantiatedTypeArguments(node->token_pos(), |
type_args); |
Value* num_elements = |
@@ -2489,46 +2489,21 @@ |
} |
-Value* EffectGraphVisitor::BuildObjectAllocation( |
- ConstructorCallNode* node) { |
+Value* EffectGraphVisitor::BuildObjectAllocation(ConstructorCallNode* node) { |
const Class& cls = Class::ZoneHandle(node->constructor().Owner()); |
const bool requires_type_arguments = cls.NumTypeArguments() > 0; |
- // In checked mode, if the type arguments are uninstantiated, they may need to |
- // be checked against declared bounds at run time. |
- Definition* allocation = NULL; |
- if (FLAG_enable_type_checks && |
- requires_type_arguments && |
- !node->type_arguments().IsNull() && |
- !node->type_arguments().IsInstantiated() && |
- node->type_arguments().IsBounded()) { |
- ZoneGrowableArray<PushArgumentInstr*>* allocate_arguments = |
- new ZoneGrowableArray<PushArgumentInstr*>(4); |
- // Argument 1: Empty argument slot for return value. |
- Value* null_val = Bind(new ConstantInstr(Object::ZoneHandle())); |
- allocate_arguments->Add(PushArgument(null_val)); |
- // Argument 2: Class. |
- Value* cls_val = |
- Bind(new ConstantInstr(Class::ZoneHandle(node->constructor().Owner()))); |
- allocate_arguments->Add(PushArgument(cls_val)); |
- // Build arguments 3 and 4. |
+ ZoneGrowableArray<PushArgumentInstr*>* allocate_arguments = |
+ new ZoneGrowableArray<PushArgumentInstr*>(); |
+ if (requires_type_arguments) { |
BuildConstructorTypeArguments(node, allocate_arguments); |
+ } |
- // The uninstantiated type arguments cannot be verified to be within their |
- // bounds at compile time, so verify them at runtime. |
- allocation = new AllocateObjectWithBoundsCheckInstr(node); |
- } else { |
- ZoneGrowableArray<PushArgumentInstr*>* allocate_arguments = |
- new ZoneGrowableArray<PushArgumentInstr*>(); |
- if (requires_type_arguments) { |
- BuildConstructorTypeArguments(node, allocate_arguments); |
- } |
+ Definition* allocation = new AllocateObjectInstr( |
+ node->token_pos(), |
+ Class::ZoneHandle(node->constructor().Owner()), |
+ allocate_arguments); |
- allocation = new AllocateObjectInstr( |
- node->token_pos(), |
- Class::ZoneHandle(node->constructor().Owner()), |
- allocate_arguments); |
- } |
return Bind(allocation); |
} |
@@ -2649,7 +2624,7 @@ |
Value* instantiator) { |
if (instantiator_class.NumTypeParameters() == 0) { |
// The type arguments are compile time constants. |
- AbstractTypeArguments& type_arguments = AbstractTypeArguments::ZoneHandle(); |
+ TypeArguments& type_arguments = TypeArguments::ZoneHandle(); |
// Type is temporary. Only its type arguments are preserved. |
Type& type = Type::Handle( |
Type::New(instantiator_class, type_arguments, token_pos, Heap::kNew)); |
@@ -2678,9 +2653,9 @@ |
instantiator = BuildInstantiator(); |
} |
// The instantiator is the receiver of the caller, which is not a factory. |
- // The receiver cannot be null; extract its AbstractTypeArguments object. |
+ // The receiver cannot be null; extract its TypeArguments object. |
// Note that in the factory case, the instantiator is the first parameter |
- // of the factory, i.e. already an AbstractTypeArguments object. |
+ // of the factory, i.e. already a TypeArguments object. |
intptr_t type_arguments_field_offset = |
instantiator_class.type_arguments_field_offset(); |
ASSERT(type_arguments_field_offset != Class::kNoTypeArguments); |
@@ -2694,7 +2669,7 @@ |
Value* EffectGraphVisitor::BuildInstantiatedTypeArguments( |
intptr_t token_pos, |
- const AbstractTypeArguments& type_arguments) { |
+ const TypeArguments& type_arguments) { |
if (type_arguments.IsNull() || type_arguments.IsInstantiated()) { |
return Bind(new ConstantInstr(type_arguments)); |
} |