Chromium Code Reviews| Index: runtime/vm/parser.cc |
| diff --git a/runtime/vm/parser.cc b/runtime/vm/parser.cc |
| index f2a6422d17c4e74fda206aa5d0cef4d6bd4d472c..6b4aa4e506659530ba4fd185da49dec49bd357a1 100644 |
| --- a/runtime/vm/parser.cc |
| +++ b/runtime/vm/parser.cc |
| @@ -981,7 +981,7 @@ RawObject* Parser::ParseFunctionParameters(const Function& func) { |
| const int param_cnt = params.num_fixed_parameters + |
| params.num_optional_parameters; |
| const Array& param_descriptor = |
| - Array::Handle(Array::New(param_cnt * kParameterEntrySize)); |
| + Array::Handle(Array::New(param_cnt * kParameterEntrySize, Heap::kOld)); |
| for (int i = 0, j = 0; i < param_cnt; i++, j += kParameterEntrySize) { |
| param_descriptor.SetAt(j + kParameterIsFinalOffset, |
| param[i].is_final ? Bool::True() : Bool::False()); |
| @@ -1518,7 +1518,7 @@ SequenceNode* Parser::ParseConstructorClosure(const Function& func) { |
| if (func.HasOptionalNamedParameters()) { |
| const Array& arg_names = |
| - Array::ZoneHandle(Array::New(func.NumOptionalParameters())); |
| + Array::ZoneHandle(Array::New(func.NumOptionalParameters(), Heap::kOld)); |
| for (intptr_t i = 0; i < arg_names.Length(); i++) { |
| intptr_t index = func.num_fixed_parameters() + i; |
| arg_names.SetAt(i, String::Handle(func.ParameterNameAt(index))); |
| @@ -5340,7 +5340,7 @@ void Parser::ParseInterfaceList(const Class& cls) { |
| TRACE_PARSER("ParseInterfaceList"); |
| ASSERT(CurrentToken() == Token::kIMPLEMENTS); |
| const GrowableObjectArray& all_interfaces = |
| - GrowableObjectArray::Handle(Z, GrowableObjectArray::New()); |
| + GrowableObjectArray::Handle(Z, GrowableObjectArray::New(Heap::kOld)); |
| AbstractType& interface = AbstractType::Handle(Z); |
| // First get all the interfaces already implemented by class. |
| Array& cls_interfaces = Array::Handle(Z, cls.interfaces()); |
| @@ -5369,7 +5369,7 @@ RawAbstractType* Parser::ParseMixins(const AbstractType& super_type) { |
| TRACE_PARSER("ParseMixins"); |
| ASSERT(CurrentToken() == Token::kWITH); |
| const GrowableObjectArray& mixin_types = |
| - GrowableObjectArray::Handle(Z, GrowableObjectArray::New()); |
| + GrowableObjectArray::Handle(Z, GrowableObjectArray::New(Heap::kOld)); |
| AbstractType& mixin_type = AbstractType::Handle(Z); |
| do { |
| ConsumeToken(); |
| @@ -5874,6 +5874,7 @@ void Parser::ParseIdentList(GrowableObjectArray* names) { |
| void Parser::ParseLibraryImportExport(const Object& tl_owner, |
| TokenPosition metadata_pos) { |
| + ASSERT(Thread::Current()->IsMutatorThread()); |
| bool is_import = (CurrentToken() == Token::kIMPORT); |
| bool is_export = (CurrentToken() == Token::kEXPORT); |
| ASSERT(is_import || is_export); |
| @@ -8385,7 +8386,8 @@ CaseNode* Parser::ParseCaseClause(LocalVariable* switch_expr_value, |
| ArgumentListNode* arguments = new(Z) ArgumentListNode(TokenPos()); |
| arguments->Add(new(Z) LiteralNode( |
| TokenPos(), |
| - Integer::ZoneHandle(Z, Integer::New(TokenPos().value())))); |
| + Integer::ZoneHandle(Z, Integer::New(TokenPos().value(), |
| + Heap::kOld)))); |
| current_block_->statements->Add( |
| MakeStaticCall(Symbols::FallThroughError(), |
| Library::PrivateCoreLibName(Symbols::ThrowNew()), |
| @@ -9164,9 +9166,9 @@ AstNode* Parser::MakeStaticCall(const String& cls_name, |
| AstNode* Parser::MakeAssertCall(TokenPosition begin, TokenPosition end) { |
| ArgumentListNode* arguments = new(Z) ArgumentListNode(begin); |
| arguments->Add(new(Z) LiteralNode(begin, |
| - Integer::ZoneHandle(Z, Integer::New(begin.value())))); |
| + Integer::ZoneHandle(Z, Integer::New(begin.value(), Heap::kOld)))); |
| arguments->Add(new(Z) LiteralNode(end, |
| - Integer::ZoneHandle(Z, Integer::New(end.value())))); |
| + Integer::ZoneHandle(Z, Integer::New(end.value(), Heap::kOld)))); |
| return MakeStaticCall(Symbols::AssertionError(), |
| Library::PrivateCoreLibName(Symbols::ThrowNew()), |
| arguments); |
| @@ -10469,7 +10471,8 @@ AstNode* Parser::ThrowTypeError(TokenPosition type_pos, |
| } |
| // Location argument. |
| arguments->Add(new(Z) LiteralNode( |
| - type_pos, Integer::ZoneHandle(Z, Integer::New(type_pos.value())))); |
| + type_pos, Integer::ZoneHandle(Z, Integer::New(type_pos.value(), |
| + Heap::kOld)))); |
| // Src value argument. |
| arguments->Add(new(Z) LiteralNode(type_pos, Object::null_instance())); |
| // Dst type argument. |
| @@ -11697,7 +11700,7 @@ AstNode* Parser::ParseSelectors(AstNode* primary, bool is_cascade) { |
| } else if (primary_node->primary().IsClass()) { |
| const Class& type_class = Class::Cast(primary_node->primary()); |
| AbstractType& type = Type::ZoneHandle(Z, Type::New( |
| - type_class, TypeArguments::Handle(Z), primary_pos)); |
| + type_class, TypeArguments::Handle(Z), primary_pos, Heap::kOld)); |
|
siva
2016/06/09 20:51:41
Type::New by default allocates in the kOld, but th
|
| type ^= ClassFinalizer::FinalizeType( |
| current_class(), type, ClassFinalizer::kCanonicalize); |
| // Type may be malbounded, but not malformed. |
| @@ -11723,7 +11726,7 @@ AstNode* Parser::ParseSelectors(AstNode* primary, bool is_cascade) { |
| } else if (primary_node->primary().IsClass()) { |
| const Class& type_class = Class::Cast(primary_node->primary()); |
| AbstractType& type = Type::ZoneHandle(Z, Type::New( |
| - type_class, TypeArguments::Handle(Z), primary_pos)); |
| + type_class, TypeArguments::Handle(Z), primary_pos, Heap::kOld)); |
| type = ClassFinalizer::FinalizeType( |
| current_class(), type, ClassFinalizer::kCanonicalize); |
| // Type may be malbounded, but not malformed. |
| @@ -12096,8 +12099,8 @@ const AbstractType* Parser::ReceiverType(const Class& cls) { |
| if (!type.IsNull()) { |
| return &type; |
| } |
| - type = Type::New(cls, |
| - TypeArguments::Handle(Z, cls.type_parameters()), cls.token_pos()); |
| + type = Type::New(cls, TypeArguments::Handle(Z, cls.type_parameters()), |
| + cls.token_pos(), Heap::kOld); |
| if (cls.is_type_finalized()) { |
| type ^= ClassFinalizer::FinalizeType( |
| cls, type, ClassFinalizer::kCanonicalizeWellFormed); |
| @@ -12121,6 +12124,7 @@ bool Parser::IsInstantiatorRequired() const { |
| void Parser::InsertCachedConstantValue(const String& url, |
| TokenPosition token_pos, |
| const Instance& value) { |
| + ASSERT(Thread::Current()->IsMutatorThread()); |
| Isolate* isolate = Isolate::Current(); |
| ConstantPosKey key(url, token_pos); |
| if (isolate->object_store()->compile_time_constants() == Array::null()) { |
| @@ -12617,7 +12621,8 @@ AstNode* Parser::ResolveIdent(TokenPosition ident_pos, |
| } else if (primary->primary().IsClass()) { |
| const Class& type_class = Class::Cast(primary->primary()); |
| AbstractType& type = Type::ZoneHandle(Z, |
| - Type::New(type_class, TypeArguments::Handle(Z), primary_pos)); |
| + Type::New(type_class, TypeArguments::Handle(Z), primary_pos, |
| + Heap::kOld)); |
| type ^= ClassFinalizer::FinalizeType( |
| current_class(), type, ClassFinalizer::kCanonicalize); |
| // Type may be malbounded, but not malformed. |
| @@ -12748,7 +12753,7 @@ RawAbstractType* Parser::ParseType( |
| return Type::DynamicType(); |
| } |
| AbstractType& type = AbstractType::Handle( |
| - Z, Type::New(type_class, type_arguments, ident_pos)); |
| + Z, Type::New(type_class, type_arguments, ident_pos, Heap::kOld)); |
| if (finalization >= ClassFinalizer::kResolveTypeParameters) { |
| ResolveTypeFromClass(current_class(), finalization, &type); |
| if (finalization >= ClassFinalizer::kCanonicalize) { |
| @@ -12831,7 +12836,7 @@ AstNode* Parser::ParseListLiteral(TokenPosition type_pos, |
| ASSERT(list_type_arguments.IsNull() || (list_type_arguments.Length() == 1)); |
| const Class& array_class = Class::Handle(Z, I->object_store()->array_class()); |
| Type& type = Type::ZoneHandle(Z, |
| - Type::New(array_class, list_type_arguments, type_pos)); |
| + Type::New(array_class, list_type_arguments, type_pos, Heap::kOld)); |
| type ^= ClassFinalizer::FinalizeType( |
| current_class(), type, ClassFinalizer::kCanonicalize); |
| GrowableArray<AstNode*> element_list; |
| @@ -12923,7 +12928,7 @@ AstNode* Parser::ParseListLiteral(TokenPosition type_pos, |
| if (!factory_type_args.IsNull() && (factory_class.NumTypeArguments() > 1)) { |
| ASSERT(factory_type_args.Length() == 1); |
| Type& factory_type = Type::Handle(Z, Type::New( |
| - factory_class, factory_type_args, type_pos, Heap::kNew)); |
| + factory_class, factory_type_args, type_pos, Heap::kOld)); |
| factory_type ^= ClassFinalizer::FinalizeType( |
| current_class(), factory_type, ClassFinalizer::kFinalize); |
| factory_type_args = factory_type.arguments(); |
| @@ -13185,7 +13190,7 @@ AstNode* Parser::ParseMapLiteral(TokenPosition type_pos, |
| if (!factory_type_args.IsNull() && (factory_class.NumTypeArguments() > 2)) { |
| ASSERT(factory_type_args.Length() == 2); |
| Type& factory_type = Type::Handle(Z, Type::New( |
| - factory_class, factory_type_args, type_pos, Heap::kNew)); |
| + factory_class, factory_type_args, type_pos, Heap::kOld)); |
| factory_type ^= ClassFinalizer::FinalizeType( |
| current_class(), factory_type, ClassFinalizer::kFinalize); |
| factory_type_args = factory_type.arguments(); |
| @@ -13639,7 +13644,8 @@ AstNode* Parser::ParseNewOperator(Token::Kind op_kind) { |
| } |
| ArgumentListNode* error_arguments = new(Z) ArgumentListNode(type_pos); |
| error_arguments->Add(new(Z) LiteralNode( |
| - TokenPos(), Integer::ZoneHandle(Z, Integer::New(type_pos.value())))); |
| + TokenPos(), Integer::ZoneHandle(Z, Integer::New(type_pos.value(), |
| + Heap::kOld)))); |
| error_arguments->Add(new(Z) LiteralNode( |
| TokenPos(), String::ZoneHandle(Z, type_class_name.raw()))); |
| result->AddNode( |