Index: runtime/vm/flow_graph_builder.cc |
diff --git a/runtime/vm/flow_graph_builder.cc b/runtime/vm/flow_graph_builder.cc |
index 946978ea8f44ebdae6d7b26b1e5cb2c53e1a111a..96ccbae3562bb5b7cee53b84b8a0d4e22f4f8a7d 100644 |
--- a/runtime/vm/flow_graph_builder.cc |
+++ b/runtime/vm/flow_graph_builder.cc |
@@ -1140,10 +1140,12 @@ void EffectGraphVisitor::VisitReturnNode(ReturnNode* node) { |
Z, isolate()->object_store()->async_clear_thread_stack_trace()); |
ZoneGrowableArray<PushArgumentInstr*>* no_arguments = |
new (Z) ZoneGrowableArray<PushArgumentInstr*>(0); |
- StaticCallInstr* call_async_clear_thread_stack_trace = new (Z) |
- StaticCallInstr(node->token_pos().ToSynthetic(), |
- async_clear_thread_stack_trace, Object::null_array(), |
- no_arguments, owner()->ic_data_array()); |
+ const int kTypeArgsLen = 0; |
+ StaticCallInstr* call_async_clear_thread_stack_trace = |
+ new (Z) StaticCallInstr(node->token_pos().ToSynthetic(), |
+ async_clear_thread_stack_trace, kTypeArgsLen, |
+ Object::null_array(), no_arguments, |
+ owner()->ic_data_array()); |
Do(call_async_clear_thread_stack_trace); |
} |
@@ -1175,8 +1177,9 @@ void EffectGraphVisitor::VisitReturnNode(ReturnNode* node) { |
const Function& complete_on_async_return = Function::ZoneHandle( |
Z, isolate()->object_store()->complete_on_async_return()); |
ASSERT(!complete_on_async_return.IsNull()); |
+ const int kTypeArgsLen = 0; |
StaticCallInstr* call = new (Z) StaticCallInstr( |
- node->token_pos().ToSynthetic(), complete_on_async_return, |
+ node->token_pos().ToSynthetic(), complete_on_async_return, kTypeArgsLen, |
Object::null_array(), arguments, owner()->ic_data_array()); |
Do(call); |
@@ -1363,10 +1366,11 @@ void EffectGraphVisitor::VisitBinaryOpNode(BinaryOpNode* node) { |
arguments->Add(push_left); |
arguments->Add(push_right); |
const String& name = Symbols::Token(node->kind()); |
+ const intptr_t kTypeArgsLen = 0; |
const intptr_t kNumArgsChecked = 2; |
InstanceCallInstr* call = new (Z) InstanceCallInstr( |
- node->token_pos(), name, node->kind(), arguments, Object::null_array(), |
- kNumArgsChecked, owner()->ic_data_array()); |
+ node->token_pos(), name, node->kind(), arguments, kTypeArgsLen, |
+ Object::null_array(), kNumArgsChecked, owner()->ic_data_array()); |
ReturnDefinition(call); |
} |
@@ -1524,11 +1528,12 @@ void EffectGraphVisitor::BuildTypeTest(ComparisonNode* node) { |
arguments->Add(push_left); |
Value* type_const = Bind(new (Z) ConstantInstr(type)); |
arguments->Add(PushArgument(type_const)); |
+ const intptr_t kTypeArgsLen = 0; |
const intptr_t kNumArgsChecked = 2; |
Definition* result = new (Z) InstanceCallInstr( |
node->token_pos(), |
Library::PrivateCoreLibName(Symbols::_simpleInstanceOf()), node->kind(), |
- arguments, |
+ arguments, kTypeArgsLen, |
Object::null_array(), // No argument names. |
kNumArgsChecked, owner()->ic_data_array()); |
if (negate_result) { |
@@ -1549,10 +1554,11 @@ void EffectGraphVisitor::BuildTypeTest(ComparisonNode* node) { |
arguments->Add(push_function_type_args); |
Value* type_const = Bind(new (Z) ConstantInstr(type)); |
arguments->Add(PushArgument(type_const)); |
+ const intptr_t kTypeArgsLen = 0; |
const intptr_t kNumArgsChecked = 1; |
Definition* result = new (Z) InstanceCallInstr( |
node->token_pos(), Library::PrivateCoreLibName(Symbols::_instanceOf()), |
- node->kind(), arguments, |
+ node->kind(), arguments, kTypeArgsLen, |
Object::null_array(), // No argument names. |
kNumArgsChecked, owner()->ic_data_array()); |
if (negate_result) { |
@@ -1587,10 +1593,11 @@ void EffectGraphVisitor::BuildTypeCast(ComparisonNode* node) { |
arguments->Add(push_function_type_args); |
Value* type_arg = Bind(new (Z) ConstantInstr(type)); |
arguments->Add(PushArgument(type_arg)); |
+ const int kTypeArgsLen = 0; |
const intptr_t kNumArgsChecked = 1; |
InstanceCallInstr* call = new (Z) InstanceCallInstr( |
node->token_pos(), Library::PrivateCoreLibName(Symbols::_as()), |
- node->kind(), arguments, |
+ node->kind(), arguments, kTypeArgsLen, |
Object::null_array(), // No argument names. |
kNumArgsChecked, owner()->ic_data_array()); |
ReturnDefinition(call); |
@@ -1664,12 +1671,13 @@ void EffectGraphVisitor::VisitComparisonNode(ComparisonNode* node) { |
PushArgumentInstr* push_right = PushArgument(for_right_value.value()); |
arguments->Add(push_right); |
+ const intptr_t kTypeArgsLen = 0; |
const intptr_t kNumArgsChecked = 2; |
Definition* result = new (Z) |
InstanceCallInstr(node->token_pos(), Symbols::EqualOperator(), |
Token::kEQ, // Result is negated later for kNE. |
- arguments, Object::null_array(), kNumArgsChecked, |
- owner()->ic_data_array()); |
+ arguments, kTypeArgsLen, Object::null_array(), |
+ kNumArgsChecked, owner()->ic_data_array()); |
if (node->kind() == Token::kNE) { |
Isolate* isolate = Isolate::Current(); |
if (isolate->type_checks() || isolate->asserts()) { |
@@ -1699,9 +1707,10 @@ void EffectGraphVisitor::VisitComparisonNode(ComparisonNode* node) { |
arguments->Add(push_right); |
ASSERT(Token::IsRelationalOperator(node->kind())); |
+ const intptr_t kTypeArgsLen = 0; |
InstanceCallInstr* comp = new (Z) InstanceCallInstr( |
node->token_pos(), Symbols::Token(node->kind()), node->kind(), arguments, |
- Object::null_array(), 2, owner()->ic_data_array()); |
+ kTypeArgsLen, Object::null_array(), 2, owner()->ic_data_array()); |
ReturnDefinition(comp); |
} |
@@ -1730,9 +1739,10 @@ void EffectGraphVisitor::VisitUnaryOpNode(UnaryOpNode* node) { |
ZoneGrowableArray<PushArgumentInstr*>* arguments = |
new (Z) ZoneGrowableArray<PushArgumentInstr*>(1); |
arguments->Add(push_value); |
+ const intptr_t kTypeArgsLen = 0; |
InstanceCallInstr* call = new (Z) InstanceCallInstr( |
node->token_pos(), Symbols::Token(node->kind()), node->kind(), arguments, |
- Object::null_array(), 1, owner()->ic_data_array()); |
+ kTypeArgsLen, Object::null_array(), 1, owner()->ic_data_array()); |
ReturnDefinition(call); |
} |
@@ -2279,6 +2289,7 @@ void EffectGraphVisitor::VisitStringInterpolateNode( |
Append(for_argument); |
PushArgumentInstr* push_arg = PushArgument(for_argument.value()); |
values->Add(push_arg); |
+ const int kTypeArgsLen = 0; |
const int kNumberOfArguments = 1; |
const Array& kNoArgumentNames = Object::null_array(); |
const Class& cls = |
@@ -2287,10 +2298,10 @@ void EffectGraphVisitor::VisitStringInterpolateNode( |
const Function& function = Function::ZoneHandle( |
Z, Resolver::ResolveStatic( |
cls, Library::PrivateCoreLibName(Symbols::InterpolateSingle()), |
- kNumberOfArguments, kNoArgumentNames)); |
- StaticCallInstr* call = |
- new (Z) StaticCallInstr(node->token_pos(), function, kNoArgumentNames, |
- values, owner()->ic_data_array()); |
+ kTypeArgsLen, kNumberOfArguments, kNoArgumentNames)); |
+ StaticCallInstr* call = new (Z) |
+ StaticCallInstr(node->token_pos(), function, kTypeArgsLen, |
+ kNoArgumentNames, values, owner()->ic_data_array()); |
ReturnDefinition(call); |
return; |
} |
@@ -2421,6 +2432,27 @@ void EffectGraphVisitor::VisitClosureNode(ClosureNode* node) { |
} |
+void EffectGraphVisitor::BuildPushTypeArguments( |
+ const ArgumentListNode& node, |
+ ZoneGrowableArray<PushArgumentInstr*>* values) { |
+ if (node.type_args_len() > 0) { |
+ Value* type_args_val; |
+ if (node.type_args_var() != NULL) { |
+ type_args_val = |
+ Bind(new (Z) LoadLocalInstr(*node.type_args_var(), node.token_pos())); |
+ } else { |
+ const TypeArguments& type_args = node.type_arguments(); |
+ ASSERT(!type_args.IsNull() && |
+ (type_args.Length() == node.type_args_len())); |
+ type_args_val = |
+ BuildInstantiatedTypeArguments(node.token_pos(), type_args); |
+ } |
+ PushArgumentInstr* push_type_args = PushArgument(type_args_val); |
+ values->Add(push_type_args); |
+ } |
+} |
+ |
+ |
void EffectGraphVisitor::BuildPushArguments( |
const ArgumentListNode& node, |
ZoneGrowableArray<PushArgumentInstr*>* values) { |
@@ -2478,22 +2510,27 @@ void ValueGraphVisitor::VisitInstanceCallNode(InstanceCallNode* node) { |
void EffectGraphVisitor::VisitInstanceCallNode(InstanceCallNode* node) { |
- ValueGraphVisitor for_receiver(owner()); |
- node->receiver()->Visit(&for_receiver); |
- Append(for_receiver); |
if (node->is_conditional()) { |
+ ValueGraphVisitor for_receiver(owner()); |
+ node->receiver()->Visit(&for_receiver); |
+ Append(for_receiver); |
Do(BuildStoreExprTemp(for_receiver.value(), node->token_pos())); |
BuildInstanceCallConditional(node); |
} else { |
+ ZoneGrowableArray<PushArgumentInstr*>* arguments = |
+ new (Z) ZoneGrowableArray<PushArgumentInstr*>( |
+ node->arguments()->LengthWithTypeArgs() + 1); |
+ BuildPushTypeArguments(*node->arguments(), arguments); |
+ ValueGraphVisitor for_receiver(owner()); |
+ node->receiver()->Visit(&for_receiver); |
+ Append(for_receiver); |
PushArgumentInstr* push_receiver = PushArgument(for_receiver.value()); |
- ZoneGrowableArray<PushArgumentInstr*>* arguments = new (Z) |
- ZoneGrowableArray<PushArgumentInstr*>(node->arguments()->length() + 1); |
arguments->Add(push_receiver); |
- |
BuildPushArguments(*node->arguments(), arguments); |
InstanceCallInstr* call = new (Z) InstanceCallInstr( |
node->token_pos(), node->function_name(), Token::kILLEGAL, arguments, |
- node->arguments()->names(), 1, owner()->ic_data_array()); |
+ node->arguments()->type_args_len(), node->arguments()->names(), 1, |
+ owner()->ic_data_array()); |
ReturnDefinition(call); |
} |
} |
@@ -2502,12 +2539,14 @@ void EffectGraphVisitor::VisitInstanceCallNode(InstanceCallNode* node) { |
// <Expression> ::= StaticCall { function: Function |
// arguments: <ArgumentList> } |
void EffectGraphVisitor::VisitStaticCallNode(StaticCallNode* node) { |
- ZoneGrowableArray<PushArgumentInstr*>* arguments = new (Z) |
- ZoneGrowableArray<PushArgumentInstr*>(node->arguments()->length()); |
+ ZoneGrowableArray<PushArgumentInstr*>* arguments = |
+ new (Z) ZoneGrowableArray<PushArgumentInstr*>( |
+ node->arguments()->LengthWithTypeArgs()); |
+ BuildPushTypeArguments(*node->arguments(), arguments); |
BuildPushArguments(*node->arguments(), arguments); |
StaticCallInstr* call = new (Z) StaticCallInstr( |
- node->token_pos(), node->function(), node->arguments()->names(), |
- arguments, owner()->ic_data_array()); |
+ node->token_pos(), node->function(), node->arguments()->type_args_len(), |
+ node->arguments()->names(), arguments, owner()->ic_data_array()); |
if (node->function().recognized_kind() != MethodRecognizer::kUnknown) { |
call->set_result_cid(MethodRecognizer::ResultCid(node->function())); |
} |
@@ -2517,15 +2556,17 @@ void EffectGraphVisitor::VisitStaticCallNode(StaticCallNode* node) { |
void EffectGraphVisitor::BuildClosureCall(ClosureCallNode* node, |
bool result_needed) { |
+ ZoneGrowableArray<PushArgumentInstr*>* arguments = |
+ new (Z) ZoneGrowableArray<PushArgumentInstr*>( |
+ node->arguments()->LengthWithTypeArgs() + 1); |
+ BuildPushTypeArguments(*node->arguments(), arguments); |
+ |
ValueGraphVisitor for_closure(owner()); |
node->closure()->Visit(&for_closure); |
Append(for_closure); |
- |
Value* closure_value = for_closure.value(); |
LocalVariable* tmp_var = EnterTempLocalScope(closure_value); |
- ZoneGrowableArray<PushArgumentInstr*>* arguments = new (Z) |
- ZoneGrowableArray<PushArgumentInstr*>(node->arguments()->length()); |
Value* closure_val = |
Bind(new (Z) LoadLocalInstr(*tmp_var, node->token_pos())); |
PushArgumentInstr* push_closure = PushArgument(closure_val); |
@@ -2603,9 +2644,10 @@ void EffectGraphVisitor::BuildConstructorCall( |
arguments->Add(push_alloc_value); |
BuildPushArguments(*node->arguments(), arguments); |
+ const intptr_t kTypeArgsLen = 0; |
Do(new (Z) StaticCallInstr(node->token_pos(), node->constructor(), |
- node->arguments()->names(), arguments, |
- owner()->ic_data_array())); |
+ kTypeArgsLen, node->arguments()->names(), |
+ arguments, owner()->ic_data_array())); |
} |
@@ -2643,9 +2685,10 @@ void EffectGraphVisitor::VisitConstructorCallNode(ConstructorCallNode* node) { |
arguments->Add(push_type_arguments); |
ASSERT(arguments->length() == 1); |
BuildPushArguments(*node->arguments(), arguments); |
+ const int kTypeArgsLen = 0; |
StaticCallInstr* call = new (Z) StaticCallInstr( |
- node->token_pos(), node->constructor(), node->arguments()->names(), |
- arguments, owner()->ic_data_array()); |
+ node->token_pos(), node->constructor(), kTypeArgsLen, |
+ node->arguments()->names(), arguments, owner()->ic_data_array()); |
const intptr_t result_cid = GetResultCidOfListFactory(node); |
if (result_cid != kDynamicCid) { |
call->set_result_cid(result_cid); |
@@ -2875,9 +2918,10 @@ void EffectGraphVisitor::VisitInstanceGetterNode(InstanceGetterNode* node) { |
arguments->Add(push_receiver); |
const String& name = |
String::ZoneHandle(Z, Field::GetterSymbol(node->field_name())); |
- InstanceCallInstr* call = new (Z) |
- InstanceCallInstr(node->token_pos(), name, Token::kGET, arguments, |
- Object::null_array(), 1, owner()->ic_data_array()); |
+ const intptr_t kTypeArgsLen = 0; |
+ InstanceCallInstr* call = new (Z) InstanceCallInstr( |
+ node->token_pos(), name, Token::kGET, arguments, kTypeArgsLen, |
+ Object::null_array(), 1, owner()->ic_data_array()); |
ReturnDefinition(call); |
} |
} |
@@ -2937,10 +2981,11 @@ void EffectGraphVisitor::VisitInstanceSetterNode(InstanceSetterNode* node) { |
BuildInstanceSetterArguments(node, arguments, kResultNotNeeded); |
const String& name = |
String::ZoneHandle(Z, Field::SetterSymbol(node->field_name())); |
+ const int kTypeArgsLen = 0; |
const intptr_t kNumArgsChecked = 1; // Do not check value type. |
InstanceCallInstr* call = new (Z) InstanceCallInstr( |
- token_pos, name, Token::kSET, arguments, Object::null_array(), |
- kNumArgsChecked, owner()->ic_data_array()); |
+ token_pos, name, Token::kSET, arguments, kTypeArgsLen, |
+ Object::null_array(), kNumArgsChecked, owner()->ic_data_array()); |
ReturnDefinition(call); |
} |
@@ -2981,10 +3026,11 @@ void ValueGraphVisitor::VisitInstanceSetterNode(InstanceSetterNode* node) { |
BuildInstanceSetterArguments(node, arguments, kResultNeeded); |
const String& name = |
String::ZoneHandle(Z, Field::SetterSymbol(node->field_name())); |
+ const intptr_t kTypeArgsLen = 0; |
const intptr_t kNumArgsChecked = 1; // Do not check value type. |
Do(new (Z) InstanceCallInstr(token_pos, name, Token::kSET, arguments, |
- Object::null_array(), kNumArgsChecked, |
- owner()->ic_data_array())); |
+ kTypeArgsLen, Object::null_array(), |
+ kNumArgsChecked, owner()->ic_data_array())); |
ReturnDefinition(BuildLoadExprTemp(token_pos)); |
} |
@@ -3046,8 +3092,9 @@ void EffectGraphVisitor::VisitStaticGetterNode(StaticGetterNode* node) { |
} |
} |
ASSERT(!getter_function.IsNull()); |
+ const intptr_t kTypeArgsLen = 0; |
StaticCallInstr* call = |
- new (Z) StaticCallInstr(node->token_pos(), getter_function, |
+ new (Z) StaticCallInstr(node->token_pos(), getter_function, kTypeArgsLen, |
Object::null_array(), // No names |
arguments, owner()->ic_data_array()); |
ReturnDefinition(call); |
@@ -3108,8 +3155,8 @@ void EffectGraphVisitor::BuildStaticSetter(StaticSetterNode* node, |
value = for_value.value(); |
} |
arguments->Add(PushArgument(value)); |
- |
- call = new (Z) StaticCallInstr(token_pos, setter_function, |
+ const intptr_t kTypeArgsLen = 0; |
+ call = new (Z) StaticCallInstr(token_pos, setter_function, kTypeArgsLen, |
Object::null_array(), // No names. |
arguments, owner()->ic_data_array()); |
} |
@@ -3555,18 +3602,20 @@ void EffectGraphVisitor::VisitLoadIndexedNode(LoadIndexedNode* node) { |
Append(for_index); |
arguments->Add(PushArgument(for_index.value())); |
+ const intptr_t kTypeArgsLen = 0; |
if (super_function != NULL) { |
// Generate static call to super operator. |
StaticCallInstr* load = new (Z) StaticCallInstr( |
- node->token_pos(), *super_function, Object::null_array(), arguments, |
- owner()->ic_data_array()); |
+ node->token_pos(), *super_function, kTypeArgsLen, Object::null_array(), |
+ arguments, owner()->ic_data_array()); |
ReturnDefinition(load); |
} else { |
// Generate dynamic call to index operator. |
const intptr_t checked_argument_count = 1; |
InstanceCallInstr* load = new (Z) InstanceCallInstr( |
node->token_pos(), Symbols::IndexToken(), Token::kINDEX, arguments, |
- Object::null_array(), checked_argument_count, owner()->ic_data_array()); |
+ kTypeArgsLen, Object::null_array(), checked_argument_count, |
+ owner()->ic_data_array()); |
ReturnDefinition(load); |
} |
} |
@@ -3626,12 +3675,13 @@ Definition* EffectGraphVisitor::BuildStoreIndexedValues(StoreIndexedNode* node, |
} |
arguments->Add(PushArgument(value)); |
+ const intptr_t kTypeArgsLen = 0; |
if (super_function != NULL) { |
// Generate static call to super operator []=. |
- StaticCallInstr* store = new (Z) |
- StaticCallInstr(token_pos, *super_function, Object::null_array(), |
- arguments, owner()->ic_data_array()); |
+ StaticCallInstr* store = new (Z) StaticCallInstr( |
+ token_pos, *super_function, kTypeArgsLen, Object::null_array(), |
+ arguments, owner()->ic_data_array()); |
if (result_is_needed) { |
Do(store); |
return BuildLoadExprTemp(token_pos); |
@@ -3643,7 +3693,8 @@ Definition* EffectGraphVisitor::BuildStoreIndexedValues(StoreIndexedNode* node, |
const intptr_t checked_argument_count = 2; // Do not check for value type. |
InstanceCallInstr* store = new (Z) InstanceCallInstr( |
token_pos, Symbols::AssignIndexToken(), Token::kASSIGN_INDEX, arguments, |
- Object::null_array(), checked_argument_count, owner()->ic_data_array()); |
+ kTypeArgsLen, Object::null_array(), checked_argument_count, |
+ owner()->ic_data_array()); |
if (result_is_needed) { |
Do(store); |
return BuildLoadExprTemp(token_pos); |
@@ -3813,10 +3864,12 @@ void EffectGraphVisitor::VisitSequenceNode(SequenceNode* node) { |
Z, isolate()->object_store()->async_set_thread_stack_trace()); |
ASSERT(!async_set_thread_stack_trace.IsNull()); |
// Call _asyncSetThreadStackTrace |
- StaticCallInstr* call_async_set_thread_stack_trace = new (Z) |
- StaticCallInstr(node->token_pos().ToSynthetic(), |
- async_set_thread_stack_trace, Object::null_array(), |
- arguments, owner()->ic_data_array()); |
+ const intptr_t kTypeArgsLen = 0; |
+ StaticCallInstr* call_async_set_thread_stack_trace = |
+ new (Z) StaticCallInstr(node->token_pos().ToSynthetic(), |
+ async_set_thread_stack_trace, kTypeArgsLen, |
+ Object::null_array(), arguments, |
+ owner()->ic_data_array()); |
Do(call_async_set_thread_stack_trace); |
} |
@@ -4150,9 +4203,10 @@ StaticCallInstr* EffectGraphVisitor::BuildStaticNoSuchMethodCall( |
args_pos, method_name, *method_arguments, temp, is_super_invocation); |
// Make sure we resolve to a compatible noSuchMethod, otherwise call |
// noSuchMethod of class Object. |
+ const int kTypeArgsLen = 0; |
const int kNumArguments = 2; |
- ArgumentsDescriptor args_desc( |
- Array::ZoneHandle(Z, ArgumentsDescriptor::New(kNumArguments))); |
+ ArgumentsDescriptor args_desc(Array::ZoneHandle( |
+ Z, ArgumentsDescriptor::New(kTypeArgsLen, kNumArguments))); |
Function& no_such_method_func = Function::ZoneHandle( |
Z, Resolver::ResolveDynamicForReceiverClass( |
target_class, Symbols::NoSuchMethod(), args_desc)); |
@@ -4167,9 +4221,9 @@ StaticCallInstr* EffectGraphVisitor::BuildStaticNoSuchMethodCall( |
ZoneGrowableArray<PushArgumentInstr*>* push_arguments = |
new (Z) ZoneGrowableArray<PushArgumentInstr*>(2); |
BuildPushArguments(*args, push_arguments); |
- return new (Z) |
- StaticCallInstr(args_pos, no_such_method_func, Object::null_array(), |
- push_arguments, owner()->ic_data_array()); |
+ return new (Z) StaticCallInstr(args_pos, no_such_method_func, kTypeArgsLen, |
+ Object::null_array(), push_arguments, |
+ owner()->ic_data_array()); |
} |
@@ -4227,12 +4281,13 @@ StaticCallInstr* EffectGraphVisitor::BuildThrowNoSuchMethodError( |
const Class& cls = |
Class::Handle(Z, core_lib.LookupClass(Symbols::NoSuchMethodError())); |
ASSERT(!cls.IsNull()); |
+ const intptr_t kTypeArgsLen = 0; |
const Function& func = Function::ZoneHandle( |
Z, Resolver::ResolveStatic( |
cls, Library::PrivateCoreLibName(Symbols::ThrowNew()), |
- arguments->length(), Object::null_array())); |
+ kTypeArgsLen, arguments->length(), Object::null_array())); |
ASSERT(!func.IsNull()); |
- return new (Z) StaticCallInstr(token_pos, func, |
+ return new (Z) StaticCallInstr(token_pos, func, kTypeArgsLen, |
Object::null_array(), // No names. |
arguments, owner()->ic_data_array()); |
} |