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()); |