Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(139)

Side by Side Diff: runtime/vm/kernel_reader.cc

Issue 2777963002: VM [KERNEL] Fix performance issue in KernelReader (Closed)
Patch Set: Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « runtime/vm/kernel_reader.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 #include "vm/kernel_reader.h" 5 #include "vm/kernel_reader.h"
6 6
7 #include <string.h> 7 #include <string.h>
8 8
9 #include "vm/dart_api_impl.h" 9 #include "vm/dart_api_impl.h"
10 #include "vm/longjump.h" 10 #include "vm/longjump.h"
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
76 dart::Zone* zone() const { return zone_; } 76 dart::Zone* zone() const { return zone_; }
77 77
78 private: 78 private:
79 TranslationHelper translation_helper_; 79 TranslationHelper translation_helper_;
80 dart::Zone* zone_; 80 dart::Zone* zone_;
81 bool is_simple_; 81 bool is_simple_;
82 dart::Instance* simple_value_; 82 dart::Instance* simple_value_;
83 }; 83 };
84 84
85 85
86 RawArray* KernelReader::MakeFunctionsArray(
87 GrowableArray<const dart::Function*>* functions) {
88 const intptr_t len = functions->length();
89 const Array& res = Array::Handle(zone_, Array::New(len, Heap::kOld));
90 for (intptr_t i = 0; i < len; i++) {
91 res.SetAt(i, *functions->At(i));
92 }
93 return res.raw();
94 }
95
96
86 RawLibrary* BuildingTranslationHelper::LookupLibraryByKernelLibrary( 97 RawLibrary* BuildingTranslationHelper::LookupLibraryByKernelLibrary(
87 CanonicalName* library) { 98 CanonicalName* library) {
88 return reader_->LookupLibrary(library).raw(); 99 return reader_->LookupLibrary(library).raw();
89 } 100 }
90 101
91 102
92 RawClass* BuildingTranslationHelper::LookupClassByKernelClass( 103 RawClass* BuildingTranslationHelper::LookupClassByKernelClass(
93 CanonicalName* klass) { 104 CanonicalName* klass) {
94 return reader_->LookupClass(klass).raw(); 105 return reader_->LookupClass(klass).raw();
95 } 106 }
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
162 // Setup toplevel class (which contains library fields/procedures). 173 // Setup toplevel class (which contains library fields/procedures).
163 174
164 Script& script = ScriptAt(kernel_library->source_uri_index(), 175 Script& script = ScriptAt(kernel_library->source_uri_index(),
165 kernel_library->import_uri()); 176 kernel_library->import_uri());
166 dart::Class& toplevel_class = dart::Class::Handle( 177 dart::Class& toplevel_class = dart::Class::Handle(
167 Z, dart::Class::New(library, Symbols::TopLevel(), script, 178 Z, dart::Class::New(library, Symbols::TopLevel(), script,
168 TokenPosition::kNoSource)); 179 TokenPosition::kNoSource));
169 toplevel_class.set_is_cycle_free(); 180 toplevel_class.set_is_cycle_free();
170 library.set_toplevel_class(toplevel_class); 181 library.set_toplevel_class(toplevel_class);
171 182
183 GrowableArray<const dart::Function*> functions;
Vyacheslav Egorov (Google) 2017/03/27 17:31:55 Maybe make functions_ and fields_ members of the
Dmitry Olshansky 2017/03/27 18:08:47 Done.
184 intptr_t num_fields = kernel_library->fields().length();
185 GrowableArray<const dart::Field*> fields(num_fields);
172 ActiveClassScope active_class_scope(&active_class_, NULL, &toplevel_class); 186 ActiveClassScope active_class_scope(&active_class_, NULL, &toplevel_class);
173 // Load toplevel fields. 187 // Load toplevel fields.
174 for (intptr_t i = 0; i < kernel_library->fields().length(); i++) { 188 for (intptr_t i = 0; i < num_fields; i++) {
175 Field* kernel_field = kernel_library->fields()[i]; 189 Field* kernel_field = kernel_library->fields()[i];
176 190
177 ActiveMemberScope active_member_scope(&active_class_, kernel_field); 191 ActiveMemberScope active_member_scope(&active_class_, kernel_field);
178 const dart::String& name = H.DartFieldName(kernel_field->name()); 192 const dart::String& name = H.DartFieldName(kernel_field->name());
179 const Object& script_class = 193 const Object& script_class =
180 ClassForScriptAt(toplevel_class, kernel_field->source_uri_index()); 194 ClassForScriptAt(toplevel_class, kernel_field->source_uri_index());
181 dart::Field& field = dart::Field::Handle( 195 dart::Field& field = dart::Field::Handle(
182 Z, dart::Field::NewTopLevel(name, kernel_field->IsFinal(), 196 Z, dart::Field::NewTopLevel(name, kernel_field->IsFinal(),
183 kernel_field->IsConst(), script_class, 197 kernel_field->IsConst(), script_class,
184 kernel_field->position())); 198 kernel_field->position()));
185 field.set_kernel_field(kernel_field); 199 field.set_kernel_field(kernel_field);
186 const AbstractType& type = T.TranslateType(kernel_field->type()); 200 const AbstractType& type = T.TranslateType(kernel_field->type());
187 field.SetFieldType(type); 201 field.SetFieldType(type);
188 field.set_has_initializer(kernel_field->initializer() != NULL); 202 field.set_has_initializer(kernel_field->initializer() != NULL);
189 GenerateFieldAccessors(toplevel_class, field, kernel_field); 203 GenerateFieldAccessors(toplevel_class, field, kernel_field, &functions);
190 toplevel_class.AddField(field); 204 fields.Add(&field);
191 library.AddObject(field, name); 205 library.AddObject(field, name);
192 } 206 }
207 toplevel_class.AddFields(fields);
193 208
194 // Load toplevel procedures. 209 // Load toplevel procedures.
195 for (intptr_t i = 0; i < kernel_library->procedures().length(); i++) { 210 for (intptr_t i = 0; i < kernel_library->procedures().length(); i++) {
196 Procedure* kernel_procedure = kernel_library->procedures()[i]; 211 Procedure* kernel_procedure = kernel_library->procedures()[i];
197 ReadProcedure(library, toplevel_class, kernel_procedure); 212 ReadProcedure(library, toplevel_class, kernel_procedure, NULL, &functions);
198 } 213 }
199 214
215 toplevel_class.SetFunctions(Array::Handle(MakeFunctionsArray(&functions)));
216
200 const GrowableObjectArray& classes = 217 const GrowableObjectArray& classes =
201 GrowableObjectArray::Handle(I->object_store()->pending_classes()); 218 GrowableObjectArray::Handle(I->object_store()->pending_classes());
202 219
203 // Load all classes. 220 // Load all classes.
204 for (intptr_t i = 0; i < kernel_library->classes().length(); i++) { 221 for (intptr_t i = 0; i < kernel_library->classes().length(); i++) {
205 Class* kernel_klass = kernel_library->classes()[i]; 222 Class* kernel_klass = kernel_library->classes()[i];
206 classes.Add(ReadClass(library, toplevel_class, kernel_klass), Heap::kOld); 223 classes.Add(ReadClass(library, toplevel_class, kernel_klass), Heap::kOld);
207 } 224 }
208 225
209 classes.Add(toplevel_class, Heap::kOld); 226 classes.Add(toplevel_class, Heap::kOld);
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
295 klass.set_script(ScriptAt(kernel_klass->source_uri_index())); 312 klass.set_script(ScriptAt(kernel_klass->source_uri_index()));
296 } 313 }
297 if (klass.token_pos() == TokenPosition::kNoSource) { 314 if (klass.token_pos() == TokenPosition::kNoSource) {
298 klass.set_token_pos(kernel_klass->position()); 315 klass.set_token_pos(kernel_klass->position());
299 } 316 }
300 if (!klass.is_cycle_free()) { 317 if (!klass.is_cycle_free()) {
301 ReadPreliminaryClass(&klass, kernel_klass); 318 ReadPreliminaryClass(&klass, kernel_klass);
302 } 319 }
303 320
304 ActiveClassScope active_class_scope(&active_class_, kernel_klass, &klass); 321 ActiveClassScope active_class_scope(&active_class_, kernel_klass, &klass);
322 GrowableArray<const dart::Function*> functions;
305 323
306 if (library.raw() == dart::Library::InternalLibrary() && 324 if (library.raw() == dart::Library::InternalLibrary() &&
307 klass.Name() == Symbols::ClassID().raw()) { 325 klass.Name() == Symbols::ClassID().raw()) {
308 // If this is a dart:internal.ClassID class ignore field declarations 326 // If this is a dart:internal.ClassID class ignore field declarations
309 // contained in the Kernel file and instead inject our own const 327 // contained in the Kernel file and instead inject our own const
310 // fields. 328 // fields.
311 klass.InjectCIDFields(); 329 klass.InjectCIDFields();
312 } else { 330 } else {
313 for (intptr_t i = 0; i < kernel_klass->fields().length(); i++) { 331 intptr_t num_fields = kernel_klass->fields().length();
332 GrowableArray<const dart::Field*> fields(num_fields);
333 for (intptr_t i = 0; i < num_fields; i++) {
314 Field* kernel_field = kernel_klass->fields()[i]; 334 Field* kernel_field = kernel_klass->fields()[i];
315 ActiveMemberScope active_member_scope(&active_class_, kernel_field); 335 ActiveMemberScope active_member_scope(&active_class_, kernel_field);
316 336
317 const dart::String& name = H.DartFieldName(kernel_field->name()); 337 const dart::String& name = H.DartFieldName(kernel_field->name());
318 const AbstractType& type = 338 const AbstractType& type =
319 T.TranslateTypeWithoutFinalization(kernel_field->type()); 339 T.TranslateTypeWithoutFinalization(kernel_field->type());
320 const Object& script_class = 340 const Object& script_class =
321 ClassForScriptAt(klass, kernel_field->source_uri_index()); 341 ClassForScriptAt(klass, kernel_field->source_uri_index());
322 dart::Field& field = dart::Field::Handle( 342 dart::Field& field = dart::Field::Handle(
323 Z, 343 Z,
324 dart::Field::New(name, kernel_field->IsStatic(), 344 dart::Field::New(name, kernel_field->IsStatic(),
325 // In the VM all const fields are implicitly final 345 // In the VM all const fields are implicitly final
326 // whereas in Kernel they are not final because they 346 // whereas in Kernel they are not final because they
327 // are not explicitly declared that way. 347 // are not explicitly declared that way.
328 kernel_field->IsFinal() || kernel_field->IsConst(), 348 kernel_field->IsFinal() || kernel_field->IsConst(),
329 kernel_field->IsConst(), 349 kernel_field->IsConst(),
330 false, // is_reflectable 350 false, // is_reflectable
331 script_class, type, kernel_field->position())); 351 script_class, type, kernel_field->position()));
332 field.set_kernel_field(kernel_field); 352 field.set_kernel_field(kernel_field);
333 field.set_has_initializer(kernel_field->initializer() != NULL); 353 field.set_has_initializer(kernel_field->initializer() != NULL);
334 GenerateFieldAccessors(klass, field, kernel_field); 354 GenerateFieldAccessors(klass, field, kernel_field, &functions);
335 klass.AddField(field); 355 fields.Add(&field);
336 } 356 }
357 klass.AddFields(fields);
337 } 358 }
338 359
339 for (intptr_t i = 0; i < kernel_klass->constructors().length(); i++) { 360 for (intptr_t i = 0; i < kernel_klass->constructors().length(); i++) {
340 Constructor* kernel_constructor = kernel_klass->constructors()[i]; 361 Constructor* kernel_constructor = kernel_klass->constructors()[i];
341 ActiveMemberScope active_member_scope(&active_class_, kernel_constructor); 362 ActiveMemberScope active_member_scope(&active_class_, kernel_constructor);
342 ActiveFunctionScope active_function_scope(&active_class_, 363 ActiveFunctionScope active_function_scope(&active_class_,
343 kernel_constructor->function()); 364 kernel_constructor->function());
344 365
345 const dart::String& name = H.DartConstructorName(kernel_constructor); 366 const dart::String& name = H.DartConstructorName(kernel_constructor);
346 Function& function = dart::Function::ZoneHandle( 367 Function& function = dart::Function::ZoneHandle(
347 Z, dart::Function::New(name, RawFunction::kConstructor, 368 Z, dart::Function::New(name, RawFunction::kConstructor,
348 false, // is_static 369 false, // is_static
349 kernel_constructor->IsConst(), 370 kernel_constructor->IsConst(),
350 false, // is_abstract 371 false, // is_abstract
351 kernel_constructor->IsExternal(), 372 kernel_constructor->IsExternal(),
352 false, // is_native 373 false, // is_native
353 klass, kernel_constructor->position())); 374 klass, kernel_constructor->position()));
354 function.set_end_token_pos(kernel_constructor->end_position()); 375 function.set_end_token_pos(kernel_constructor->end_position());
355 klass.AddFunction(function); 376 functions.Add(&function);
356 function.set_kernel_function(kernel_constructor); 377 function.set_kernel_function(kernel_constructor);
357 function.set_result_type(T.ReceiverType(klass)); 378 function.set_result_type(T.ReceiverType(klass));
358 SetupFunctionParameters(H, T, klass, function, 379 SetupFunctionParameters(H, T, klass, function,
359 kernel_constructor->function(), 380 kernel_constructor->function(),
360 true, // is_method 381 true, // is_method
361 false); // is_closure 382 false); // is_closure
362 383
363 if (FLAG_enable_mirrors) { 384 if (FLAG_enable_mirrors) {
364 library.AddFunctionMetadata(function, TokenPosition::kNoSource, 385 library.AddFunctionMetadata(function, TokenPosition::kNoSource,
365 kernel_constructor); 386 kernel_constructor);
366 } 387 }
367 } 388 }
368 389
369 for (intptr_t i = 0; i < kernel_klass->procedures().length(); i++) { 390 for (intptr_t i = 0; i < kernel_klass->procedures().length(); i++) {
370 Procedure* kernel_procedure = kernel_klass->procedures()[i]; 391 Procedure* kernel_procedure = kernel_klass->procedures()[i];
371 ActiveMemberScope active_member_scope(&active_class_, kernel_procedure); 392 ActiveMemberScope active_member_scope(&active_class_, kernel_procedure);
372 ReadProcedure(library, klass, kernel_procedure, kernel_klass); 393 ReadProcedure(library, klass, kernel_procedure, kernel_klass, &functions);
373 } 394 }
374 395
396 klass.SetFunctions(Array::Handle(MakeFunctionsArray(&functions)));
397
375 if (!klass.is_marked_for_parsing()) { 398 if (!klass.is_marked_for_parsing()) {
376 klass.set_is_marked_for_parsing(); 399 klass.set_is_marked_for_parsing();
377 } 400 }
378 401
379 if (FLAG_enable_mirrors) { 402 if (FLAG_enable_mirrors) {
380 library.AddClassMetadata(klass, toplevel_class, TokenPosition::kNoSource, 403 library.AddClassMetadata(klass, toplevel_class, TokenPosition::kNoSource,
381 kernel_klass); 404 kernel_klass);
382 } 405 }
383 406
384 return klass; 407 return klass;
385 } 408 }
386 409
387 410
388 void KernelReader::ReadProcedure(const dart::Library& library, 411 void KernelReader::ReadProcedure(
389 const dart::Class& owner, 412 const dart::Library& library,
390 Procedure* kernel_procedure, 413 const dart::Class& owner,
391 Class* kernel_klass) { 414 Procedure* kernel_procedure,
415 Class* kernel_klass,
416 GrowableArray<const dart::Function*>* functions) {
392 ActiveClassScope active_class_scope(&active_class_, kernel_klass, &owner); 417 ActiveClassScope active_class_scope(&active_class_, kernel_klass, &owner);
393 ActiveMemberScope active_member_scope(&active_class_, kernel_procedure); 418 ActiveMemberScope active_member_scope(&active_class_, kernel_procedure);
394 ActiveFunctionScope active_function_scope(&active_class_, 419 ActiveFunctionScope active_function_scope(&active_class_,
395 kernel_procedure->function()); 420 kernel_procedure->function());
396 421
397 const dart::String& name = H.DartProcedureName(kernel_procedure); 422 const dart::String& name = H.DartProcedureName(kernel_procedure);
398 bool is_method = kernel_klass != NULL && !kernel_procedure->IsStatic(); 423 bool is_method = kernel_klass != NULL && !kernel_procedure->IsStatic();
399 bool is_abstract = kernel_procedure->IsAbstract(); 424 bool is_abstract = kernel_procedure->IsAbstract();
400 bool is_external = kernel_procedure->IsExternal(); 425 bool is_external = kernel_procedure->IsExternal();
401 dart::String* native_name = NULL; 426 dart::String* native_name = NULL;
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
433 const Object& script_class = 458 const Object& script_class =
434 ClassForScriptAt(owner, kernel_procedure->source_uri_index()); 459 ClassForScriptAt(owner, kernel_procedure->source_uri_index());
435 dart::Function& function = dart::Function::ZoneHandle( 460 dart::Function& function = dart::Function::ZoneHandle(
436 Z, Function::New(name, GetFunctionType(kernel_procedure), 461 Z, Function::New(name, GetFunctionType(kernel_procedure),
437 !is_method, // is_static 462 !is_method, // is_static
438 false, // is_const 463 false, // is_const
439 is_abstract, is_external, 464 is_abstract, is_external,
440 native_name != NULL, // is_native 465 native_name != NULL, // is_native
441 script_class, kernel_procedure->position())); 466 script_class, kernel_procedure->position()));
442 function.set_end_token_pos(kernel_procedure->end_position()); 467 function.set_end_token_pos(kernel_procedure->end_position());
443 owner.AddFunction(function); 468 functions->Add(&function);
444 function.set_kernel_function(kernel_procedure); 469 function.set_kernel_function(kernel_procedure);
445 470
446 function.set_is_debuggable( 471 function.set_is_debuggable(
447 kernel_procedure->function()->dart_async_marker() == FunctionNode::kSync); 472 kernel_procedure->function()->dart_async_marker() == FunctionNode::kSync);
448 switch (kernel_procedure->function()->dart_async_marker()) { 473 switch (kernel_procedure->function()->dart_async_marker()) {
449 case FunctionNode::kSyncStar: 474 case FunctionNode::kSyncStar:
450 function.set_modifier(RawFunction::kSyncGen); 475 function.set_modifier(RawFunction::kSyncGen);
451 break; 476 break;
452 case FunctionNode::kAsync: 477 case FunctionNode::kAsync:
453 function.set_modifier(RawFunction::kAsync); 478 function.set_modifier(RawFunction::kAsync);
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
567 script.set_debug_positions(array_object); 592 script.set_debug_positions(array_object);
568 593
569 // Create yield_positions array for the script. 594 // Create yield_positions array for the script.
570 array_object ^= AsSortedDuplicateFreeArray( 595 array_object ^= AsSortedDuplicateFreeArray(
571 source_uri_index, &program_->yield_token_positions); 596 source_uri_index, &program_->yield_token_positions);
572 script.set_yield_positions(array_object); 597 script.set_yield_positions(array_object);
573 } 598 }
574 return script; 599 return script;
575 } 600 }
576 601
577 void KernelReader::GenerateFieldAccessors(const dart::Class& klass, 602 void KernelReader::GenerateFieldAccessors(
578 const dart::Field& field, 603 const dart::Class& klass,
579 Field* kernel_field) { 604 const dart::Field& field,
605 Field* kernel_field,
606 GrowableArray<const dart::Function*>* functions) {
580 if (kernel_field->IsStatic() && kernel_field->initializer() == NULL) { 607 if (kernel_field->IsStatic() && kernel_field->initializer() == NULL) {
581 // Static fields without an initializer are implicitly initialized to null. 608 // Static fields without an initializer are implicitly initialized to null.
582 // We do not need a getter. 609 // We do not need a getter.
583 field.SetStaticValue(Instance::Handle(Z), true); 610 field.SetStaticValue(Instance::Handle(Z), true);
584 return; 611 return;
585 } 612 }
586 if (kernel_field->initializer() != NULL) { 613 if (kernel_field->initializer() != NULL) {
587 SimpleExpressionConverter converter(H.thread()); 614 SimpleExpressionConverter converter(H.thread());
588 const bool has_simple_initializer = 615 const bool has_simple_initializer =
589 converter.IsSimple(kernel_field->initializer()); 616 converter.IsSimple(kernel_field->initializer());
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
622 // The functions created by the parser have is_const for static fields 649 // The functions created by the parser have is_const for static fields
623 // that are const (not just final) and they have is_const for 650 // that are const (not just final) and they have is_const for
624 // non-static 651 // non-static
625 // fields that are final. 652 // fields that are final.
626 kernel_field->IsStatic() ? kernel_field->IsConst() 653 kernel_field->IsStatic() ? kernel_field->IsConst()
627 : kernel_field->IsFinal(), 654 : kernel_field->IsFinal(),
628 false, // is_abstract 655 false, // is_abstract
629 false, // is_external 656 false, // is_external
630 false, // is_native 657 false, // is_native
631 script_class, kernel_field->position())); 658 script_class, kernel_field->position()));
632 klass.AddFunction(getter); 659 functions->Add(&getter);
633 getter.set_end_token_pos(kernel_field->end_position()); 660 getter.set_end_token_pos(kernel_field->end_position());
634 getter.set_kernel_function(kernel_field); 661 getter.set_kernel_function(kernel_field);
635 getter.set_result_type(AbstractType::Handle(Z, field.type())); 662 getter.set_result_type(AbstractType::Handle(Z, field.type()));
636 getter.set_is_debuggable(false); 663 getter.set_is_debuggable(false);
637 SetupFieldAccessorFunction(klass, getter); 664 SetupFieldAccessorFunction(klass, getter);
638 665
639 if (!kernel_field->IsStatic() && !kernel_field->IsFinal()) { 666 if (!kernel_field->IsStatic() && !kernel_field->IsFinal()) {
640 // Only static fields can be const. 667 // Only static fields can be const.
641 ASSERT(!kernel_field->IsConst()); 668 ASSERT(!kernel_field->IsConst());
642 const dart::String& setter_name = H.DartSetterName(kernel_field->name()); 669 const dart::String& setter_name = H.DartSetterName(kernel_field->name());
643 Function& setter = Function::ZoneHandle( 670 Function& setter = Function::ZoneHandle(
644 Z, Function::New(setter_name, RawFunction::kImplicitSetter, 671 Z, Function::New(setter_name, RawFunction::kImplicitSetter,
645 false, // is_static 672 false, // is_static
646 false, // is_const 673 false, // is_const
647 false, // is_abstract 674 false, // is_abstract
648 false, // is_external 675 false, // is_external
649 false, // is_native 676 false, // is_native
650 script_class, kernel_field->position())); 677 script_class, kernel_field->position()));
651 klass.AddFunction(setter); 678 functions->Add(&setter);
652 setter.set_end_token_pos(kernel_field->end_position()); 679 setter.set_end_token_pos(kernel_field->end_position());
653 setter.set_kernel_function(kernel_field); 680 setter.set_kernel_function(kernel_field);
654 setter.set_result_type(Object::void_type()); 681 setter.set_result_type(Object::void_type());
655 setter.set_is_debuggable(false); 682 setter.set_is_debuggable(false);
656 SetupFieldAccessorFunction(klass, setter); 683 SetupFieldAccessorFunction(klass, setter);
657 } 684 }
658 } 685 }
659 686
660 687
661 void KernelReader::SetupFunctionParameters(TranslationHelper translation_helper, 688 void KernelReader::SetupFunctionParameters(TranslationHelper translation_helper,
(...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after
839 initializer_fun.set_is_debuggable(false); 866 initializer_fun.set_is_debuggable(false);
840 initializer_fun.set_is_reflectable(false); 867 initializer_fun.set_is_reflectable(false);
841 initializer_fun.set_is_inlinable(false); 868 initializer_fun.set_is_inlinable(false);
842 return new (zone) ParsedFunction(thread, initializer_fun); 869 return new (zone) ParsedFunction(thread, initializer_fun);
843 } 870 }
844 871
845 872
846 } // namespace kernel 873 } // namespace kernel
847 } // namespace dart 874 } // namespace dart
848 #endif // !defined(DART_PRECOMPILED_RUNTIME) 875 #endif // !defined(DART_PRECOMPILED_RUNTIME)
OLDNEW
« no previous file with comments | « runtime/vm/kernel_reader.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698