Chromium Code Reviews| Index: runtime/vm/kernel_reader.cc | 
| diff --git a/runtime/vm/kernel_reader.cc b/runtime/vm/kernel_reader.cc | 
| index 05fecbfb0f7b82299bcdfcbf19f874f4ab9ae5d0..784f587226ec59dbed97985bbb5425e3a6c44618 100644 | 
| --- a/runtime/vm/kernel_reader.cc | 
| +++ b/runtime/vm/kernel_reader.cc | 
| @@ -83,6 +83,16 @@ class SimpleExpressionConverter : public ExpressionVisitor { | 
| }; | 
| +RawArray* KernelReader::MakeFunctionsArray() { | 
| + const intptr_t len = functions_.length(); | 
| + const Array& res = Array::Handle(zone_, Array::New(len, Heap::kOld)); | 
| + for (intptr_t i = 0; i < len; i++) { | 
| + res.SetAt(i, *functions_[i]); | 
| + } | 
| + return res.raw(); | 
| +} | 
| + | 
| + | 
| RawLibrary* BuildingTranslationHelper::LookupLibraryByKernelLibrary( | 
| CanonicalName* library) { | 
| return reader_->LookupLibrary(library).raw(); | 
| @@ -169,6 +179,8 @@ void KernelReader::ReadLibrary(Library* kernel_library) { | 
| toplevel_class.set_is_cycle_free(); | 
| library.set_toplevel_class(toplevel_class); | 
| + fields_.Clear(); | 
| + functions_.Clear(); | 
| ActiveClassScope active_class_scope(&active_class_, NULL, &toplevel_class); | 
| // Load toplevel fields. | 
| for (intptr_t i = 0; i < kernel_library->fields().length(); i++) { | 
| @@ -187,16 +199,19 @@ void KernelReader::ReadLibrary(Library* kernel_library) { | 
| field.SetFieldType(type); | 
| field.set_has_initializer(kernel_field->initializer() != NULL); | 
| GenerateFieldAccessors(toplevel_class, field, kernel_field); | 
| - toplevel_class.AddField(field); | 
| + fields_.Add(&field); | 
| library.AddObject(field, name); | 
| } | 
| + toplevel_class.AddFields(fields_); | 
| // Load toplevel procedures. | 
| for (intptr_t i = 0; i < kernel_library->procedures().length(); i++) { | 
| Procedure* kernel_procedure = kernel_library->procedures()[i]; | 
| - ReadProcedure(library, toplevel_class, kernel_procedure); | 
| + ReadProcedure(library, toplevel_class, kernel_procedure, NULL); | 
| 
 
Vyacheslav Egorov (Google)
2017/03/27 18:19:09
NULL is a default value. You can remove this chang
 
 | 
| } | 
| + toplevel_class.SetFunctions(Array::Handle(MakeFunctionsArray())); | 
| + | 
| const GrowableObjectArray& classes = | 
| GrowableObjectArray::Handle(I->object_store()->pending_classes()); | 
| @@ -302,6 +317,8 @@ dart::Class& KernelReader::ReadClass(const dart::Library& library, | 
| } | 
| ActiveClassScope active_class_scope(&active_class_, kernel_klass, &klass); | 
| + fields_.Clear(); | 
| + functions_.Clear(); | 
| if (library.raw() == dart::Library::InternalLibrary() && | 
| klass.Name() == Symbols::ClassID().raw()) { | 
| @@ -332,8 +349,9 @@ dart::Class& KernelReader::ReadClass(const dart::Library& library, | 
| field.set_kernel_field(kernel_field); | 
| field.set_has_initializer(kernel_field->initializer() != NULL); | 
| GenerateFieldAccessors(klass, field, kernel_field); | 
| - klass.AddField(field); | 
| + fields_.Add(&field); | 
| } | 
| + klass.AddFields(fields_); | 
| } | 
| for (intptr_t i = 0; i < kernel_klass->constructors().length(); i++) { | 
| @@ -352,7 +370,7 @@ dart::Class& KernelReader::ReadClass(const dart::Library& library, | 
| false, // is_native | 
| klass, kernel_constructor->position())); | 
| function.set_end_token_pos(kernel_constructor->end_position()); | 
| - klass.AddFunction(function); | 
| + functions_.Add(&function); | 
| function.set_kernel_function(kernel_constructor); | 
| function.set_result_type(T.ReceiverType(klass)); | 
| SetupFunctionParameters(H, T, klass, function, | 
| @@ -372,6 +390,8 @@ dart::Class& KernelReader::ReadClass(const dart::Library& library, | 
| ReadProcedure(library, klass, kernel_procedure, kernel_klass); | 
| } | 
| + klass.SetFunctions(Array::Handle(MakeFunctionsArray())); | 
| + | 
| if (!klass.is_marked_for_parsing()) { | 
| klass.set_is_marked_for_parsing(); | 
| } | 
| @@ -440,7 +460,7 @@ void KernelReader::ReadProcedure(const dart::Library& library, | 
| native_name != NULL, // is_native | 
| script_class, kernel_procedure->position())); | 
| function.set_end_token_pos(kernel_procedure->end_position()); | 
| - owner.AddFunction(function); | 
| + functions_.Add(&function); | 
| function.set_kernel_function(kernel_procedure); | 
| function.set_is_debuggable( | 
| @@ -629,7 +649,7 @@ void KernelReader::GenerateFieldAccessors(const dart::Class& klass, | 
| false, // is_external | 
| false, // is_native | 
| script_class, kernel_field->position())); | 
| - klass.AddFunction(getter); | 
| + functions_.Add(&getter); | 
| getter.set_end_token_pos(kernel_field->end_position()); | 
| getter.set_kernel_function(kernel_field); | 
| getter.set_result_type(AbstractType::Handle(Z, field.type())); | 
| @@ -648,7 +668,7 @@ void KernelReader::GenerateFieldAccessors(const dart::Class& klass, | 
| false, // is_external | 
| false, // is_native | 
| script_class, kernel_field->position())); | 
| - klass.AddFunction(setter); | 
| + functions_.Add(&setter); | 
| setter.set_end_token_pos(kernel_field->end_position()); | 
| setter.set_kernel_function(kernel_field); | 
| setter.set_result_type(Object::void_type()); |