| Index: runtime/vm/flow_graph_builder.cc
|
| ===================================================================
|
| --- runtime/vm/flow_graph_builder.cc (revision 36738)
|
| +++ runtime/vm/flow_graph_builder.cc (working copy)
|
| @@ -46,6 +46,8 @@
|
| DECLARE_FLAG(bool, silent_warnings);
|
| DECLARE_FLAG(bool, warning_as_error);
|
|
|
| +// Quick access to the locally defined isolate() method.
|
| +#define I (isolate())
|
|
|
| // TODO(srdjan): Allow compiler to add constants as they are encountered in
|
| // the compilation.
|
| @@ -746,7 +748,7 @@
|
| Value* context = Bind(new CurrentContextInstr());
|
| while (delta-- > 0) {
|
| context = Bind(new LoadFieldInstr(
|
| - context, Context::parent_offset(), Type::ZoneHandle(),
|
| + context, Context::parent_offset(), Type::ZoneHandle(I, Type::null()),
|
| Scanner::kNoSourcePos));
|
| }
|
| Value* tmp_val = Bind(new LoadLocalInstr(*tmp_var));
|
| @@ -774,7 +776,7 @@
|
| Value* context = Bind(new CurrentContextInstr());
|
| while (delta-- > 0) {
|
| context = Bind(new LoadFieldInstr(
|
| - context, Context::parent_offset(), Type::ZoneHandle(),
|
| + context, Context::parent_offset(), Type::ZoneHandle(I, Type::null()),
|
| Scanner::kNoSourcePos));
|
| }
|
| return new LoadFieldInstr(context,
|
| @@ -1021,7 +1023,7 @@
|
| // However, factories may create an instance of the wrong type.
|
| if (!is_implicit_dynamic_getter && !function.IsConstructor()) {
|
| const AbstractType& dst_type =
|
| - AbstractType::ZoneHandle(function.result_type());
|
| + AbstractType::ZoneHandle(I, function.result_type());
|
| return_value = BuildAssignableValue(node->value()->token_pos(),
|
| return_value,
|
| dst_type,
|
| @@ -1064,7 +1066,7 @@
|
| ReturnDefinition(new ConstantInstr(type));
|
| } else {
|
| const Class& instantiator_class = Class::ZoneHandle(
|
| - owner()->parsed_function()->function().Owner());
|
| + I, owner()->parsed_function()->function().Owner());
|
| Value* instantiator_value = BuildInstantiatorTypeArguments(
|
| node->token_pos(), instantiator_class, NULL);
|
| ReturnDefinition(new InstantiateTypeInstr(
|
| @@ -1201,7 +1203,7 @@
|
| new ZoneGrowableArray<PushArgumentInstr*>(2);
|
| arguments->Add(push_left);
|
| arguments->Add(push_right);
|
| - const String& name = String::ZoneHandle(Symbols::New(node->TokenName()));
|
| + const String& name = String::ZoneHandle(I, Symbols::New(node->TokenName()));
|
| const intptr_t kNumArgsChecked = 2;
|
| InstanceCallInstr* call = new InstanceCallInstr(node->token_pos(),
|
| name,
|
| @@ -1268,7 +1270,7 @@
|
| return Library::PrivateCoreLibName(Symbols::_leftShiftWithMask32());
|
| }
|
| UNIMPLEMENTED();
|
| - return String::ZoneHandle();
|
| + return String::ZoneHandle(Isolate::Current(), String::null());
|
| }
|
|
|
|
|
| @@ -1290,7 +1292,7 @@
|
| PushArgumentInstr* push_right = PushArgument(for_right_value.value());
|
|
|
| Value* mask_value = Bind(new ConstantInstr(
|
| - Integer::ZoneHandle(Integer::New(node->mask32(), Heap::kOld))));
|
| + Integer::ZoneHandle(I, Integer::New(node->mask32(), Heap::kOld))));
|
| PushArgumentInstr* push_mask = PushArgument(mask_value);
|
|
|
| ZoneGrowableArray<PushArgumentInstr*>* arguments =
|
| @@ -1316,7 +1318,7 @@
|
| PushArgumentInstr** push_instantiator_result,
|
| PushArgumentInstr** push_instantiator_type_arguments_result) {
|
| const Class& instantiator_class = Class::Handle(
|
| - owner()->parsed_function()->function().Owner());
|
| + I, owner()->parsed_function()->function().Owner());
|
| // Since called only when type tested against is not instantiated.
|
| ASSERT(instantiator_class.NumTypeParameters() > 0);
|
| Value* instantiator_type_arguments = NULL;
|
| @@ -1346,7 +1348,7 @@
|
| Value* instantiator = NULL;
|
| Value* instantiator_type_arguments = NULL;
|
| const Class& instantiator_class = Class::Handle(
|
| - owner()->parsed_function()->function().Owner());
|
| + I, owner()->parsed_function()->function().Owner());
|
| // Since called only when type tested against is not instantiated.
|
| ASSERT(instantiator_class.NumTypeParameters() > 0);
|
| instantiator = BuildInstantiator(instantiator_class);
|
| @@ -1368,7 +1370,7 @@
|
|
|
|
|
| Value* EffectGraphVisitor::BuildNullValue() {
|
| - return Bind(new ConstantInstr(Object::ZoneHandle()));
|
| + return Bind(new ConstantInstr(Object::ZoneHandle(I, Object::null())));
|
| }
|
|
|
|
|
| @@ -1449,7 +1451,7 @@
|
| ASSERT(type.IsFinalized() && !type.IsMalformedOrMalbounded());
|
| const bool negate_result = (node->kind() == Token::kISNOT);
|
| // All objects are instances of type T if Object type is a subtype of type T.
|
| - const Type& object_type = Type::Handle(Type::ObjectType());
|
| + const Type& object_type = Type::Handle(I, Type::ObjectType());
|
| if (type.IsInstantiated() && object_type.IsSubtypeOf(type, NULL)) {
|
| // Must evaluate left side.
|
| EffectGraphVisitor for_left_value(owner());
|
| @@ -1518,7 +1520,7 @@
|
| node->left()->Visit(&for_value);
|
| Append(for_value);
|
| const String& dst_name = String::ZoneHandle(
|
| - Symbols::New(Exceptions::kCastErrorDstName));
|
| + I, Symbols::New(Exceptions::kCastErrorDstName));
|
| if (CanSkipTypeCheck(node->token_pos(),
|
| for_value.value(),
|
| type,
|
| @@ -1665,7 +1667,8 @@
|
| ASSERT(Token::IsRelationalOperator(node->kind()));
|
| InstanceCallInstr* comp =
|
| new InstanceCallInstr(node->token_pos(),
|
| - String::ZoneHandle(Symbols::New(node->TokenName())),
|
| + String::ZoneHandle(
|
| + I, Symbols::New(node->TokenName())),
|
| node->kind(),
|
| arguments,
|
| Object::null_array(),
|
| @@ -1700,7 +1703,8 @@
|
| arguments->Add(push_value);
|
| InstanceCallInstr* call =
|
| new InstanceCallInstr(node->token_pos(),
|
| - String::ZoneHandle(Symbols::New(node->TokenName())),
|
| + String::ZoneHandle(
|
| + I, Symbols::New(node->TokenName())),
|
| node->kind(),
|
| arguments,
|
| Object::null_array(),
|
| @@ -2101,7 +2105,7 @@
|
| OS::SNPrint(name, 64, ":tmp_local%" Pd, index);
|
| LocalVariable* var =
|
| new LocalVariable(0,
|
| - String::ZoneHandle(Symbols::New(name)),
|
| + String::ZoneHandle(I, Symbols::New(name)),
|
| *value->Type()->ToAbstractType());
|
| var->set_index(index);
|
| return var;
|
| @@ -2175,11 +2179,11 @@
|
|
|
| void EffectGraphVisitor::VisitArrayNode(ArrayNode* node) {
|
| const TypeArguments& type_args =
|
| - TypeArguments::ZoneHandle(node->type().arguments());
|
| + TypeArguments::ZoneHandle(I, node->type().arguments());
|
| Value* element_type = BuildInstantiatedTypeArguments(node->token_pos(),
|
| type_args);
|
| Value* num_elements =
|
| - Bind(new ConstantInstr(Smi::ZoneHandle(Smi::New(node->length()))));
|
| + Bind(new ConstantInstr(Smi::ZoneHandle(I, Smi::New(node->length()))));
|
| CreateArrayInstr* create = new CreateArrayInstr(node->token_pos(),
|
| element_type,
|
| num_elements);
|
| @@ -2190,7 +2194,7 @@
|
| const intptr_t deopt_id = Isolate::kNoDeoptId;
|
| for (int i = 0; i < node->length(); ++i) {
|
| Value* array = Bind(new LoadLocalInstr(*tmp_var));
|
| - Value* index = Bind(new ConstantInstr(Smi::ZoneHandle(Smi::New(i))));
|
| + Value* index = Bind(new ConstantInstr(Smi::ZoneHandle(I, Smi::New(i))));
|
| ValueGraphVisitor for_value(owner());
|
| node->ElementAt(i)->Visit(&for_value);
|
| Append(for_value);
|
| @@ -2226,7 +2230,7 @@
|
|
|
| if (function.IsImplicitStaticClosureFunction()) {
|
| const Instance& closure =
|
| - Instance::ZoneHandle(function.ImplicitStaticClosure());
|
| + Instance::ZoneHandle(I, function.ImplicitStaticClosure());
|
| ReturnDefinition(new ConstantInstr(closure));
|
| return;
|
| }
|
| @@ -2237,12 +2241,12 @@
|
| if (function.context_scope() == ContextScope::null()) {
|
| ASSERT(!is_implicit);
|
| const ContextScope& context_scope = ContextScope::ZoneHandle(
|
| - node->scope()->PreserveOuterScope(owner()->context_level()));
|
| + I, node->scope()->PreserveOuterScope(owner()->context_level()));
|
| ASSERT(!function.HasCode());
|
| ASSERT(function.context_scope() == ContextScope::null());
|
| function.set_context_scope(context_scope);
|
| const Class& cls = Class::Handle(
|
| - owner()->parsed_function()->function().Owner());
|
| + I, owner()->parsed_function()->function().Owner());
|
| // The closure is now properly setup, add it to the lookup table.
|
| // It is possible that the compiler creates more than one function
|
| // object for the same closure, e.g. when inlining nodes from
|
| @@ -2254,7 +2258,7 @@
|
| // parent, and one with a closurized parent function.
|
|
|
| const Function& found_func = Function::Handle(
|
| - cls.LookupClosureFunction(function.token_pos()));
|
| + I, cls.LookupClosureFunction(function.token_pos()));
|
|
|
| if (found_func.IsNull() ||
|
| (found_func.token_pos() != function.token_pos()) ||
|
| @@ -2269,7 +2273,7 @@
|
|
|
| // The function type of a closure may have type arguments. In that case,
|
| // pass the type arguments of the instantiator.
|
| - const Class& cls = Class::ZoneHandle(function.signature_class());
|
| + const Class& cls = Class::ZoneHandle(I, function.signature_class());
|
| ASSERT(!cls.IsNull());
|
| const bool requires_type_arguments = cls.NumTypeArguments() > 0;
|
| Value* type_arguments = NULL;
|
| @@ -2278,7 +2282,7 @@
|
| Closure::type_arguments_offset());
|
| ASSERT(cls.instance_size() == Closure::InstanceSize());
|
| const Class& instantiator_class = Class::Handle(
|
| - owner()->parsed_function()->function().Owner());
|
| + I, owner()->parsed_function()->function().Owner());
|
| type_arguments = BuildInstantiatorTypeArguments(node->token_pos(),
|
| instantiator_class,
|
| NULL);
|
| @@ -2294,7 +2298,7 @@
|
| // Store function.
|
| Value* closure_tmp_val = Bind(new LoadLocalInstr(*closure_tmp_var));
|
| Value* func_val =
|
| - Bind(new ConstantInstr(Function::ZoneHandle(function.raw())));
|
| + Bind(new ConstantInstr(Function::ZoneHandle(I, function.raw())));
|
| Do(new StoreInstanceFieldInstr(Closure::function_offset(),
|
| closure_tmp_val,
|
| func_val,
|
| @@ -2451,19 +2455,20 @@
|
| ASSERT(owner()->parsed_function()->saved_current_context_var() != NULL);
|
| BuildSaveContext(*owner()->parsed_function()->saved_current_context_var());
|
| closure_val = Bind(new LoadLocalInstr(*tmp_var));
|
| - LoadFieldInstr* context_load = new LoadFieldInstr(closure_val,
|
| - Closure::context_offset(),
|
| - AbstractType::ZoneHandle(),
|
| - node->token_pos());
|
| + LoadFieldInstr* context_load = new LoadFieldInstr(
|
| + closure_val,
|
| + Closure::context_offset(),
|
| + AbstractType::ZoneHandle(I, AbstractType::null()),
|
| + node->token_pos());
|
| context_load->set_is_immutable(true);
|
| Value* context_val = Bind(context_load);
|
| AddInstruction(new StoreContextInstr(context_val));
|
| closure_val = Bind(new LoadLocalInstr(*tmp_var));
|
| - LoadFieldInstr* function_load =
|
| - new LoadFieldInstr(closure_val,
|
| - Closure::function_offset(),
|
| - AbstractType::ZoneHandle(),
|
| - node->token_pos());
|
| + LoadFieldInstr* function_load = new LoadFieldInstr(
|
| + closure_val,
|
| + Closure::function_offset(),
|
| + AbstractType::ZoneHandle(I, AbstractType::null()),
|
| + node->token_pos());
|
| function_load->set_is_immutable(true);
|
| Value* function_val = Bind(function_load);
|
| Definition* closure_call =
|
| @@ -2503,7 +2508,7 @@
|
|
|
|
|
| Value* EffectGraphVisitor::BuildObjectAllocation(ConstructorCallNode* node) {
|
| - const Class& cls = Class::ZoneHandle(node->constructor().Owner());
|
| + const Class& cls = Class::ZoneHandle(I, node->constructor().Owner());
|
| const bool cls_is_parameterized = cls.NumTypeArguments() > 0;
|
|
|
| ZoneGrowableArray<PushArgumentInstr*>* allocate_arguments =
|
| @@ -2516,7 +2521,7 @@
|
|
|
| Definition* allocation = new AllocateObjectInstr(
|
| node->token_pos(),
|
| - Class::ZoneHandle(node->constructor().Owner()),
|
| + Class::ZoneHandle(I, node->constructor().Owner()),
|
| allocate_arguments);
|
|
|
| return Bind(allocation);
|
| @@ -2527,7 +2532,7 @@
|
| ConstructorCallNode* node,
|
| PushArgumentInstr* push_alloc_value) {
|
| Value* ctor_arg = Bind(
|
| - new ConstantInstr(Smi::ZoneHandle(Smi::New(Function::kCtorPhaseAll))));
|
| + new ConstantInstr(Smi::ZoneHandle(I, Smi::New(Function::kCtorPhaseAll))));
|
| PushArgumentInstr* push_ctor_arg = PushArgument(ctor_arg);
|
|
|
| ZoneGrowableArray<PushArgumentInstr*>* arguments =
|
| @@ -2611,7 +2616,7 @@
|
| Value* EffectGraphVisitor::BuildInstantiator(const Class& instantiator_class) {
|
| ASSERT(instantiator_class.NumTypeParameters() > 0);
|
| Function& outer_function =
|
| - Function::Handle(owner()->parsed_function()->function().raw());
|
| + Function::Handle(I, owner()->parsed_function()->function().raw());
|
| while (outer_function.IsLocalFunction()) {
|
| outer_function = outer_function.parent_function();
|
| }
|
| @@ -2634,9 +2639,11 @@
|
| Value* instantiator) {
|
| if (instantiator_class.NumTypeParameters() == 0) {
|
| // The type arguments are compile time constants.
|
| - TypeArguments& type_arguments = TypeArguments::ZoneHandle();
|
| + TypeArguments& type_arguments =
|
| + TypeArguments::ZoneHandle(I, TypeArguments::null());
|
| // Type is temporary. Only its type arguments are preserved.
|
| Type& type = Type::Handle(
|
| + I,
|
| Type::New(instantiator_class, type_arguments, token_pos, Heap::kNew));
|
| type ^= ClassFinalizer::FinalizeType(
|
| instantiator_class, type, ClassFinalizer::kFinalize);
|
| @@ -2646,7 +2653,7 @@
|
| return Bind(new ConstantInstr(type_arguments));
|
| }
|
| Function& outer_function =
|
| - Function::Handle(owner()->parsed_function()->function().raw());
|
| + Function::Handle(I, owner()->parsed_function()->function().raw());
|
| while (outer_function.IsLocalFunction()) {
|
| outer_function = outer_function.parent_function();
|
| }
|
| @@ -2672,7 +2679,7 @@
|
| return Bind(new LoadFieldInstr(
|
| instantiator,
|
| type_arguments_field_offset,
|
| - Type::ZoneHandle(), // Not an instance, no type.
|
| + Type::ZoneHandle(I, Type::null()), // Not an instance, no type.
|
| Scanner::kNoSourcePos));
|
| }
|
|
|
| @@ -2685,7 +2692,7 @@
|
| }
|
| // The type arguments are uninstantiated.
|
| const Class& instantiator_class = Class::ZoneHandle(
|
| - owner()->parsed_function()->function().Owner());
|
| + I, owner()->parsed_function()->function().Owner());
|
| Value* instantiator_value =
|
| BuildInstantiatorTypeArguments(token_pos, instantiator_class, NULL);
|
| const bool use_instantiator_type_args =
|
| @@ -2735,7 +2742,7 @@
|
| new ZoneGrowableArray<PushArgumentInstr*>(1);
|
| arguments->Add(push_receiver);
|
| const String& name =
|
| - String::ZoneHandle(Field::GetterSymbol(node->field_name()));
|
| + String::ZoneHandle(I, Field::GetterSymbol(node->field_name()));
|
| InstanceCallInstr* call = new InstanceCallInstr(
|
| node->token_pos(),
|
| name,
|
| @@ -2775,7 +2782,7 @@
|
| new ZoneGrowableArray<PushArgumentInstr*>(2);
|
| BuildInstanceSetterArguments(node, arguments, kResultNotNeeded);
|
| const String& name =
|
| - String::ZoneHandle(Field::SetterSymbol(node->field_name()));
|
| + String::ZoneHandle(I, Field::SetterSymbol(node->field_name()));
|
| InstanceCallInstr* call = new InstanceCallInstr(node->token_pos(),
|
| name,
|
| Token::kSET,
|
| @@ -2792,7 +2799,7 @@
|
| new ZoneGrowableArray<PushArgumentInstr*>(2);
|
| BuildInstanceSetterArguments(node, arguments, kResultNeeded);
|
| const String& name =
|
| - String::ZoneHandle(Field::SetterSymbol(node->field_name()));
|
| + String::ZoneHandle(I, Field::SetterSymbol(node->field_name()));
|
| Do(new InstanceCallInstr(node->token_pos(),
|
| name,
|
| Token::kSET,
|
| @@ -2806,10 +2813,10 @@
|
|
|
| void EffectGraphVisitor::VisitStaticGetterNode(StaticGetterNode* node) {
|
| const String& getter_name =
|
| - String::ZoneHandle(Field::GetterSymbol(node->field_name()));
|
| + String::ZoneHandle(I, Field::GetterSymbol(node->field_name()));
|
| ZoneGrowableArray<PushArgumentInstr*>* arguments =
|
| new ZoneGrowableArray<PushArgumentInstr*>();
|
| - Function& getter_function = Function::ZoneHandle();
|
| + Function& getter_function = Function::ZoneHandle(I, Function::null());
|
| if (node->is_super_getter()) {
|
| // Statically resolved instance getter, i.e. "super getter".
|
| ASSERT(node->receiver() != NULL);
|
| @@ -2878,7 +2885,7 @@
|
| void EffectGraphVisitor::BuildStaticSetter(StaticSetterNode* node,
|
| bool result_is_needed) {
|
| const String& setter_name =
|
| - String::ZoneHandle(Field::SetterSymbol(node->field_name()));
|
| + String::ZoneHandle(I, Field::SetterSymbol(node->field_name()));
|
| ZoneGrowableArray<PushArgumentInstr*>* arguments =
|
| new ZoneGrowableArray<PushArgumentInstr*>(1);
|
| // A super setter is an instance setter whose setter function is
|
| @@ -2886,7 +2893,7 @@
|
| // Unlike a static getter, a super getter has a receiver parameter.
|
| const bool is_super_setter = (node->receiver() != NULL);
|
| Function& setter_function =
|
| - Function::ZoneHandle(is_super_setter
|
| + Function::ZoneHandle(I, is_super_setter
|
| ? Resolver::ResolveDynamicAnyArgs(node->cls(), setter_name)
|
| : node->cls().LookupStaticFunction(setter_name));
|
| StaticCallInstr* call;
|
| @@ -3020,7 +3027,7 @@
|
| LoadFieldInstr* load = new LoadFieldInstr(
|
| receiver,
|
| String::length_offset(),
|
| - Type::ZoneHandle(Type::SmiType()),
|
| + Type::ZoneHandle(I, Type::SmiType()),
|
| node->token_pos());
|
| load->set_result_cid(kSmiCid);
|
| load->set_recognized_kind(MethodRecognizer::kStringBaseLength);
|
| @@ -3028,7 +3035,8 @@
|
| return ReturnDefinition(load);
|
| }
|
| ASSERT(kind == MethodRecognizer::kStringBaseIsEmpty);
|
| - Value* zero_val = Bind(new ConstantInstr(Smi::ZoneHandle(Smi::New(0))));
|
| + Value* zero_val = Bind(new ConstantInstr(
|
| + Smi::ZoneHandle(I, Smi::New(0))));
|
| Value* load_val = Bind(load);
|
| StrictCompareInstr* compare =
|
| new StrictCompareInstr(node->token_pos(),
|
| @@ -3046,7 +3054,7 @@
|
| LoadFieldInstr* load = new LoadFieldInstr(
|
| receiver,
|
| OffsetForLengthGetter(kind),
|
| - Type::ZoneHandle(Type::SmiType()),
|
| + Type::ZoneHandle(I, Type::SmiType()),
|
| node->token_pos());
|
| load->set_is_immutable(kind != MethodRecognizer::kGrowableArrayLength);
|
| load->set_result_cid(kSmiCid);
|
| @@ -3064,14 +3072,14 @@
|
| LoadFieldInstr* data_load = new LoadFieldInstr(
|
| receiver,
|
| Array::data_offset(),
|
| - Type::ZoneHandle(Type::DynamicType()),
|
| + Type::ZoneHandle(I, Type::DynamicType()),
|
| node->token_pos());
|
| data_load->set_result_cid(kArrayCid);
|
| Value* data = Bind(data_load);
|
| LoadFieldInstr* length_load = new LoadFieldInstr(
|
| data,
|
| Array::length_offset(),
|
| - Type::ZoneHandle(Type::SmiType()),
|
| + Type::ZoneHandle(I, Type::SmiType()),
|
| node->token_pos());
|
| length_load->set_result_cid(kSmiCid);
|
| length_load->set_recognized_kind(MethodRecognizer::kObjectArrayLength);
|
| @@ -3142,7 +3150,7 @@
|
| LoadFieldInstr* load = new LoadFieldInstr(
|
| for_instance.value(),
|
| &node->field(),
|
| - AbstractType::ZoneHandle(node->field().type()),
|
| + AbstractType::ZoneHandle(I, node->field().type()),
|
| node->token_pos());
|
| if (node->field().guarded_cid() != kIllegalCid) {
|
| if (!node->field().is_nullable() ||
|
| @@ -3165,8 +3173,9 @@
|
| Append(for_value);
|
| Value* store_value = for_value.value();
|
| if (FLAG_enable_type_checks) {
|
| - const AbstractType& type = AbstractType::ZoneHandle(node->field().type());
|
| - const String& dst_name = String::ZoneHandle(node->field().name());
|
| + const AbstractType& type =
|
| + AbstractType::ZoneHandle(I, node->field().type());
|
| + const String& dst_name = String::ZoneHandle(I, node->field().name());
|
| store_value = BuildAssignableValue(node->value()->token_pos(),
|
| store_value,
|
| type,
|
| @@ -3175,9 +3184,7 @@
|
|
|
| store_value = Bind(BuildStoreExprTemp(store_value));
|
| GuardFieldInstr* guard =
|
| - new GuardFieldInstr(store_value,
|
| - node->field(),
|
| - Isolate::Current()->GetNextDeoptId());
|
| + new GuardFieldInstr(store_value, node->field(), I->GetNextDeoptId());
|
| AddInstruction(guard);
|
|
|
| store_value = Bind(BuildLoadExprTemp());
|
| @@ -3197,7 +3204,7 @@
|
| ASSERT(node->field().value() != Object::sentinel().raw());
|
| ASSERT(node->field().value() != Object::transition_sentinel().raw());
|
| Definition* result =
|
| - new ConstantInstr(Instance::ZoneHandle(node->field().value()));
|
| + new ConstantInstr(Instance::ZoneHandle(I, node->field().value()));
|
| return ReturnDefinition(result);
|
| }
|
| Value* field_value = Bind(new ConstantInstr(node->field()));
|
| @@ -3244,8 +3251,8 @@
|
| if (node->IsSuperLoad()) {
|
| // Resolve the load indexed operator in the super class.
|
| super_function = &Function::ZoneHandle(
|
| - Resolver::ResolveDynamicAnyArgs(node->super_class(),
|
| - Symbols::IndexToken()));
|
| + I, Resolver::ResolveDynamicAnyArgs(node->super_class(),
|
| + Symbols::IndexToken()));
|
| if (super_function->IsNull()) {
|
| // Could not resolve super operator. Generate call noSuchMethod() of the
|
| // super class instead.
|
| @@ -3305,8 +3312,8 @@
|
| if (node->IsSuperStore()) {
|
| // Resolve the store indexed operator in the super class.
|
| super_function = &Function::ZoneHandle(
|
| - Resolver::ResolveDynamicAnyArgs(node->super_class(),
|
| - Symbols::AssignIndexToken()));
|
| + I, Resolver::ResolveDynamicAnyArgs(node->super_class(),
|
| + Symbols::AssignIndexToken()));
|
| if (super_function->IsNull()) {
|
| // Could not resolve super operator. Generate call noSuchMethod() of the
|
| // super class instead.
|
| @@ -3373,7 +3380,7 @@
|
| // Generate dynamic call to operator []=.
|
| const intptr_t checked_argument_count = 3;
|
| const String& name =
|
| - String::ZoneHandle(Symbols::New(Token::Str(Token::kASSIGN_INDEX)));
|
| + String::ZoneHandle(I, Symbols::New(Token::Str(Token::kASSIGN_INDEX)));
|
| InstanceCallInstr* store =
|
| new InstanceCallInstr(node->token_pos(),
|
| name,
|
| @@ -3415,7 +3422,8 @@
|
| context = Bind(
|
| new LoadFieldInstr(context,
|
| Context::parent_offset(),
|
| - Type::ZoneHandle(), // Not an instance, no type.
|
| + // Not an instance, no type.
|
| + Type::ZoneHandle(I, Type::null()),
|
| Scanner::kNoSourcePos));
|
| }
|
| AddInstruction(new StoreContextInstr(context));
|
| @@ -3454,7 +3462,8 @@
|
| if (MustSaveRestoreContext(node)) {
|
| BuildSaveContext(
|
| *owner()->parsed_function()->saved_entry_context_var());
|
| - parent_context = Bind(new ConstantInstr(Object::ZoneHandle()));
|
| + parent_context = Bind(
|
| + new ConstantInstr(Object::ZoneHandle(I, Object::null())));
|
| } else {
|
| parent_context = Bind(new CurrentContextInstr());
|
| }
|
| @@ -3484,7 +3493,7 @@
|
| LocalVariable* temp_local = new LocalVariable(
|
| 0, // Token index.
|
| temp_name,
|
| - Type::ZoneHandle(Type::DynamicType())); // Type.
|
| + Type::ZoneHandle(I, Type::DynamicType())); // Type.
|
| temp_local->set_index(param_frame_index);
|
|
|
| // Copy parameter from local frame to current context.
|
| @@ -3493,8 +3502,8 @@
|
| // Write NULL to the source location to detect buggy accesses and
|
| // allow GC of passed value if it gets overwritten by a new value in
|
| // the function.
|
| - Value* null_constant =
|
| - Bind(new ConstantInstr(Object::ZoneHandle()));
|
| + Value* null_constant = Bind(new ConstantInstr(
|
| + Object::ZoneHandle(I, Object::null())));
|
| Do(BuildStoreLocal(*temp_local, null_constant));
|
| }
|
| }
|
| @@ -3508,7 +3517,7 @@
|
| *owner()->parsed_function()->saved_entry_context_var());
|
| AddInstruction(
|
| new StoreContextInstr(Bind(new ConstantInstr(Object::ZoneHandle(
|
| - Isolate::Current()->object_store()->empty_context())))));
|
| + I, I->object_store()->empty_context())))));
|
| }
|
|
|
| // This check may be deleted if the generated code is leaf.
|
| @@ -3699,8 +3708,8 @@
|
| }
|
| ASSERT(!for_finally.is_open());
|
|
|
| - const Array& types = Array::ZoneHandle(Array::New(1, Heap::kOld));
|
| - types.SetAt(0, Type::Handle(Type::DynamicType()));
|
| + const Array& types = Array::ZoneHandle(I, Array::New(1, Heap::kOld));
|
| + types.SetAt(0, Type::Handle(I, Type::DynamicType()));
|
| CatchBlockEntryInstr* finally_entry =
|
| new CatchBlockEntryInstr(owner()->AllocateBlockId(),
|
| original_handler_index,
|
| @@ -3743,6 +3752,7 @@
|
| temp,
|
| is_super_invocation);
|
| const Function& no_such_method_func = Function::ZoneHandle(
|
| + I,
|
| Resolver::ResolveDynamicAnyArgs(target_class, Symbols::NoSuchMethod()));
|
| // We are guaranteed to find noSuchMethod of class Object.
|
| ASSERT(!no_such_method_func.IsNull());
|
| @@ -3769,8 +3779,9 @@
|
| // TODO(regis): For now, we pass a class literal of the unresolved
|
| // method's owner, but this is not specified and will probably change.
|
| Type& type = Type::ZoneHandle(
|
| + I,
|
| Type::New(function_class,
|
| - TypeArguments::Handle(),
|
| + TypeArguments::Handle(I, TypeArguments::null()),
|
| token_pos,
|
| Heap::kOld));
|
| type ^= ClassFinalizer::FinalizeType(
|
| @@ -3778,21 +3789,23 @@
|
| Value* receiver_value = Bind(new ConstantInstr(type));
|
| arguments->Add(PushArgument(receiver_value));
|
| // String memberName.
|
| - const String& member_name = String::ZoneHandle(Symbols::New(function_name));
|
| + const String& member_name =
|
| + String::ZoneHandle(I, Symbols::New(function_name));
|
| Value* member_name_value = Bind(new ConstantInstr(member_name));
|
| arguments->Add(PushArgument(member_name_value));
|
| // Smi invocation_type.
|
| Value* invocation_type_value = Bind(new ConstantInstr(
|
| - Smi::ZoneHandle(Smi::New(invocation_type))));
|
| + Smi::ZoneHandle(I, Smi::New(invocation_type))));
|
| arguments->Add(PushArgument(invocation_type_value));
|
| // List arguments.
|
| if (function_arguments == NULL) {
|
| - Value* arguments_value = Bind(new ConstantInstr(Array::ZoneHandle()));
|
| + Value* arguments_value = Bind(
|
| + new ConstantInstr(Array::ZoneHandle(I, Array::null())));
|
| arguments->Add(PushArgument(arguments_value));
|
| } else {
|
| ValueGraphVisitor array_val(owner());
|
| ArrayNode* array =
|
| - new ArrayNode(token_pos, Type::ZoneHandle(Type::ArrayType()),
|
| + new ArrayNode(token_pos, Type::ZoneHandle(I, Type::ArrayType()),
|
| function_arguments->nodes());
|
| array->Visit(&array_val);
|
| Append(array_val);
|
| @@ -3800,21 +3813,22 @@
|
| }
|
| // List argumentNames.
|
| ConstantInstr* cinstr = new ConstantInstr(
|
| - (function_arguments == NULL) ? Array::ZoneHandle()
|
| + (function_arguments == NULL) ? Array::ZoneHandle(I, Array::null())
|
| : function_arguments->names());
|
| Value* argument_names_value = Bind(cinstr);
|
| arguments->Add(PushArgument(argument_names_value));
|
|
|
| // List existingArgumentNames.
|
| Value* existing_argument_names_value =
|
| - Bind(new ConstantInstr(Array::ZoneHandle()));
|
| + Bind(new ConstantInstr(Array::ZoneHandle(I, Array::null())));
|
| arguments->Add(PushArgument(existing_argument_names_value));
|
| // Resolve and call NoSuchMethodError._throwNew.
|
| - const Library& core_lib = Library::Handle(Library::CoreLibrary());
|
| + const Library& core_lib = Library::Handle(I, Library::CoreLibrary());
|
| const Class& cls = Class::Handle(
|
| - core_lib.LookupClass(Symbols::NoSuchMethodError()));
|
| + I, core_lib.LookupClass(Symbols::NoSuchMethodError()));
|
| ASSERT(!cls.IsNull());
|
| const Function& func = Function::ZoneHandle(
|
| + I,
|
| Resolver::ResolveStatic(cls,
|
| Library::PrivateCoreLibName(Symbols::ThrowNew()),
|
| arguments->length(),
|
| @@ -3858,7 +3872,8 @@
|
| // so that the fragment is not closed in the middle of an expression.
|
| void ValueGraphVisitor::VisitThrowNode(ThrowNode* node) {
|
| BuildThrowNode(node);
|
| - ReturnDefinition(new ConstantInstr(Instance::ZoneHandle()));
|
| + ReturnDefinition(new ConstantInstr(
|
| + Instance::ZoneHandle(I, Instance::null())));
|
| }
|
|
|
|
|
| @@ -3945,13 +3960,15 @@
|
| va_list args;
|
| va_start(args, format);
|
| const Error& error = Error::Handle(
|
| - LanguageError::NewFormattedV(Error::Handle(), // No previous error.
|
| - Script::Handle(function.script()),
|
| - token_pos, LanguageError::kWarning,
|
| - Heap::kNew, format, args));
|
| + I,
|
| + LanguageError::NewFormattedV(
|
| + Error::Handle(I, Error::null()), // No previous error.
|
| + Script::Handle(I, function.script()),
|
| + token_pos, LanguageError::kWarning,
|
| + Heap::kNew, format, args));
|
| va_end(args);
|
| if (FLAG_warning_as_error) {
|
| - Isolate::Current()->long_jump_base()->Jump(1, error);
|
| + I->long_jump_base()->Jump(1, error);
|
| UNREACHABLE();
|
| } else {
|
| OS::Print("%s", error.ToErrorCString());
|
| @@ -3962,15 +3979,17 @@
|
| void FlowGraphBuilder::Bailout(const char* reason) const {
|
| const Function& function = parsed_function_->function();
|
| const Error& error = Error::Handle(
|
| - LanguageError::NewFormatted(Error::Handle(), // No previous error.
|
| - Script::Handle(function.script()),
|
| - function.token_pos(),
|
| - LanguageError::kBailout,
|
| - Heap::kNew,
|
| - "FlowGraphBuilder Bailout: %s %s",
|
| - String::Handle(function.name()).ToCString(),
|
| - reason));
|
| - Isolate::Current()->long_jump_base()->Jump(1, error);
|
| + I,
|
| + LanguageError::NewFormatted(
|
| + Error::Handle(I, Error::null()), // No previous error.
|
| + Script::Handle(I, function.script()),
|
| + function.token_pos(),
|
| + LanguageError::kBailout,
|
| + Heap::kNew,
|
| + "FlowGraphBuilder Bailout: %s %s",
|
| + String::Handle(I, function.name()).ToCString(),
|
| + reason));
|
| + I->long_jump_base()->Jump(1, error);
|
| UNREACHABLE();
|
| }
|
|
|
|
|