| OLD | NEW |
| 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/kernel_binary.h" | 10 #include "vm/kernel_binary.h" |
| (...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 195 return dart::Library::Handle(Z); | 195 return dart::Library::Handle(Z); |
| 196 } | 196 } |
| 197 | 197 |
| 198 NameIndex main_library = H.EnclosingName(main); | 198 NameIndex main_library = H.EnclosingName(main); |
| 199 dart::Library& library = LookupLibrary(main_library); | 199 dart::Library& library = LookupLibrary(main_library); |
| 200 // Sanity check that we can find the main entrypoint. | 200 // Sanity check that we can find the main entrypoint. |
| 201 Object& main_obj = Object::Handle( | 201 Object& main_obj = Object::Handle( |
| 202 Z, library.LookupObjectAllowPrivate(H.DartSymbol("main"))); | 202 Z, library.LookupObjectAllowPrivate(H.DartSymbol("main"))); |
| 203 ASSERT(!main_obj.IsNull()); | 203 ASSERT(!main_obj.IsNull()); |
| 204 | 204 |
| 205 Function& to_patch = Function::Handle( |
| 206 Z, builtin_library.LookupFunctionAllowPrivate( |
| 207 dart::String::Handle(dart::String::New("_getMainClosure")))); |
| 208 |
| 209 Procedure* procedure = |
| 210 reinterpret_cast<Procedure*>(to_patch.kernel_function()); |
| 211 // If dart:_builtin was not compiled from Kernel at all it does not need |
| 212 // to be patched. |
| 213 if (procedure != NULL) { |
| 214 // We will handle the StaticGet specially and will not use the name. |
| 215 // Note that we pass "true" in cannot_stream to avoid trying to stream |
| 216 // a non-existing part of the binary. |
| 217 // |
| 218 // TODO(kmillikin): we are leaking the new function body. Find a way to |
| 219 // deallocate it. |
| 220 procedure->function()->ReplaceBody( |
| 221 new ReturnStatement(new StaticGet(NameIndex(), false), false)); |
| 222 } |
| 205 return library; | 223 return library; |
| 206 } | 224 } |
| 207 } | 225 } |
| 208 | 226 |
| 209 // Either class finalization failed or we caught a compile error. | 227 // Either class finalization failed or we caught a compile error. |
| 210 // In both cases sticky error would be set. | 228 // In both cases sticky error would be set. |
| 211 Error& error = Error::Handle(Z); | 229 Error& error = Error::Handle(Z); |
| 212 error = thread_->sticky_error(); | 230 error = thread_->sticky_error(); |
| 213 thread_->clear_sticky_error(); | 231 thread_->clear_sticky_error(); |
| 214 return error; | 232 return error; |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 246 Field* kernel_field = kernel_library->fields()[i]; | 264 Field* kernel_field = kernel_library->fields()[i]; |
| 247 | 265 |
| 248 ActiveMemberScope active_member_scope(&active_class_, kernel_field); | 266 ActiveMemberScope active_member_scope(&active_class_, kernel_field); |
| 249 const dart::String& name = H.DartFieldName(kernel_field->name()); | 267 const dart::String& name = H.DartFieldName(kernel_field->name()); |
| 250 const Object& script_class = | 268 const Object& script_class = |
| 251 ClassForScriptAt(toplevel_class, kernel_field->source_uri_index()); | 269 ClassForScriptAt(toplevel_class, kernel_field->source_uri_index()); |
| 252 dart::Field& field = dart::Field::Handle( | 270 dart::Field& field = dart::Field::Handle( |
| 253 Z, dart::Field::NewTopLevel(name, kernel_field->IsFinal(), | 271 Z, dart::Field::NewTopLevel(name, kernel_field->IsFinal(), |
| 254 kernel_field->IsConst(), script_class, | 272 kernel_field->IsConst(), script_class, |
| 255 kernel_field->position())); | 273 kernel_field->position())); |
| 256 field.set_kernel_offset(kernel_field->kernel_offset()); | 274 field.set_kernel_field(kernel_field); |
| 257 const AbstractType& type = T.TranslateType(kernel_field->type()); | 275 const AbstractType& type = T.TranslateType(kernel_field->type()); |
| 258 field.SetFieldType(type); | 276 field.SetFieldType(type); |
| 259 field.set_has_initializer(kernel_field->initializer() != NULL); | 277 field.set_has_initializer(kernel_field->initializer() != NULL); |
| 260 GenerateFieldAccessors(toplevel_class, field, kernel_field); | 278 GenerateFieldAccessors(toplevel_class, field, kernel_field); |
| 261 fields_.Add(&field); | 279 fields_.Add(&field); |
| 262 library.AddObject(field, name); | 280 library.AddObject(field, name); |
| 263 } | 281 } |
| 264 toplevel_class.AddFields(fields_); | 282 toplevel_class.AddFields(fields_); |
| 265 | 283 |
| 266 // Load toplevel procedures. | 284 // Load toplevel procedures. |
| (...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 398 dart::Field& field = dart::Field::Handle( | 416 dart::Field& field = dart::Field::Handle( |
| 399 Z, | 417 Z, |
| 400 dart::Field::New(name, kernel_field->IsStatic(), | 418 dart::Field::New(name, kernel_field->IsStatic(), |
| 401 // In the VM all const fields are implicitly final | 419 // In the VM all const fields are implicitly final |
| 402 // whereas in Kernel they are not final because they | 420 // whereas in Kernel they are not final because they |
| 403 // are not explicitly declared that way. | 421 // are not explicitly declared that way. |
| 404 kernel_field->IsFinal() || kernel_field->IsConst(), | 422 kernel_field->IsFinal() || kernel_field->IsConst(), |
| 405 kernel_field->IsConst(), | 423 kernel_field->IsConst(), |
| 406 false, // is_reflectable | 424 false, // is_reflectable |
| 407 script_class, type, kernel_field->position())); | 425 script_class, type, kernel_field->position())); |
| 408 field.set_kernel_offset(kernel_field->kernel_offset()); | 426 field.set_kernel_field(kernel_field); |
| 409 field.set_has_initializer(kernel_field->initializer() != NULL); | 427 field.set_has_initializer(kernel_field->initializer() != NULL); |
| 410 GenerateFieldAccessors(klass, field, kernel_field); | 428 GenerateFieldAccessors(klass, field, kernel_field); |
| 411 fields_.Add(&field); | 429 fields_.Add(&field); |
| 412 } | 430 } |
| 413 klass.AddFields(fields_); | 431 klass.AddFields(fields_); |
| 414 } | 432 } |
| 415 | 433 |
| 416 for (intptr_t i = 0; i < kernel_klass->constructors().length(); i++) { | 434 for (intptr_t i = 0; i < kernel_klass->constructors().length(); i++) { |
| 417 Constructor* kernel_constructor = kernel_klass->constructors()[i]; | 435 Constructor* kernel_constructor = kernel_klass->constructors()[i]; |
| 418 ActiveMemberScope active_member_scope(&active_class_, kernel_constructor); | 436 ActiveMemberScope active_member_scope(&active_class_, kernel_constructor); |
| 419 | 437 |
| 420 const dart::String& name = | 438 const dart::String& name = |
| 421 H.DartConstructorName(kernel_constructor->canonical_name()); | 439 H.DartConstructorName(kernel_constructor->canonical_name()); |
| 422 Function& function = dart::Function::ZoneHandle( | 440 Function& function = dart::Function::ZoneHandle( |
| 423 Z, dart::Function::New(name, RawFunction::kConstructor, | 441 Z, dart::Function::New(name, RawFunction::kConstructor, |
| 424 false, // is_static | 442 false, // is_static |
| 425 kernel_constructor->IsConst(), | 443 kernel_constructor->IsConst(), |
| 426 false, // is_abstract | 444 false, // is_abstract |
| 427 kernel_constructor->IsExternal(), | 445 kernel_constructor->IsExternal(), |
| 428 false, // is_native | 446 false, // is_native |
| 429 klass, kernel_constructor->position())); | 447 klass, kernel_constructor->position())); |
| 430 function.set_end_token_pos(kernel_constructor->end_position()); | 448 function.set_end_token_pos(kernel_constructor->end_position()); |
| 431 functions_.Add(&function); | 449 functions_.Add(&function); |
| 432 function.set_kernel_offset(kernel_constructor->kernel_offset()); | 450 function.set_kernel_function(kernel_constructor); |
| 433 function.set_result_type(T.ReceiverType(klass)); | 451 function.set_result_type(T.ReceiverType(klass)); |
| 434 SetupFunctionParameters(H, T, klass, function, | 452 SetupFunctionParameters(H, T, klass, function, |
| 435 kernel_constructor->function(), | 453 kernel_constructor->function(), |
| 436 true, // is_method | 454 true, // is_method |
| 437 false); // is_closure | 455 false); // is_closure |
| 438 | 456 |
| 439 if (FLAG_enable_mirrors) { | 457 if (FLAG_enable_mirrors) { |
| 440 library.AddFunctionMetadata(function, TokenPosition::kNoSource, | 458 library.AddFunctionMetadata(function, TokenPosition::kNoSource, |
| 441 kernel_constructor->kernel_offset()); | 459 kernel_constructor); |
| 442 } | 460 } |
| 443 } | 461 } |
| 444 | 462 |
| 445 for (intptr_t i = 0; i < kernel_klass->procedures().length(); i++) { | 463 for (intptr_t i = 0; i < kernel_klass->procedures().length(); i++) { |
| 446 Procedure* kernel_procedure = kernel_klass->procedures()[i]; | 464 Procedure* kernel_procedure = kernel_klass->procedures()[i]; |
| 447 ActiveMemberScope active_member_scope(&active_class_, kernel_procedure); | 465 ActiveMemberScope active_member_scope(&active_class_, kernel_procedure); |
| 448 ReadProcedure(library, klass, kernel_procedure, kernel_klass); | 466 ReadProcedure(library, klass, kernel_procedure, kernel_klass); |
| 449 } | 467 } |
| 450 | 468 |
| 451 klass.SetFunctions(Array::Handle(MakeFunctionsArray())); | 469 klass.SetFunctions(Array::Handle(MakeFunctionsArray())); |
| 452 | 470 |
| 453 if (!klass.is_marked_for_parsing()) { | 471 if (!klass.is_marked_for_parsing()) { |
| 454 klass.set_is_marked_for_parsing(); | 472 klass.set_is_marked_for_parsing(); |
| 455 } | 473 } |
| 456 | 474 |
| 457 if (FLAG_enable_mirrors) { | 475 if (FLAG_enable_mirrors) { |
| 458 library.AddClassMetadata(klass, toplevel_class, TokenPosition::kNoSource, | 476 library.AddClassMetadata(klass, toplevel_class, TokenPosition::kNoSource, |
| 459 kernel_klass->kernel_offset()); | 477 kernel_klass); |
| 460 } | 478 } |
| 461 | 479 |
| 462 return klass; | 480 return klass; |
| 463 } | 481 } |
| 464 | 482 |
| 465 | 483 |
| 466 void KernelReader::ReadProcedure(const dart::Library& library, | 484 void KernelReader::ReadProcedure(const dart::Library& library, |
| 467 const dart::Class& owner, | 485 const dart::Class& owner, |
| 468 Procedure* kernel_procedure, | 486 Procedure* kernel_procedure, |
| 469 Class* kernel_klass) { | 487 Class* kernel_klass) { |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 508 ClassForScriptAt(owner, kernel_procedure->source_uri_index()); | 526 ClassForScriptAt(owner, kernel_procedure->source_uri_index()); |
| 509 dart::Function& function = dart::Function::ZoneHandle( | 527 dart::Function& function = dart::Function::ZoneHandle( |
| 510 Z, Function::New(name, GetFunctionType(kernel_procedure), | 528 Z, Function::New(name, GetFunctionType(kernel_procedure), |
| 511 !is_method, // is_static | 529 !is_method, // is_static |
| 512 false, // is_const | 530 false, // is_const |
| 513 is_abstract, is_external, | 531 is_abstract, is_external, |
| 514 native_name != NULL, // is_native | 532 native_name != NULL, // is_native |
| 515 script_class, kernel_procedure->position())); | 533 script_class, kernel_procedure->position())); |
| 516 function.set_end_token_pos(kernel_procedure->end_position()); | 534 function.set_end_token_pos(kernel_procedure->end_position()); |
| 517 functions_.Add(&function); | 535 functions_.Add(&function); |
| 518 function.set_kernel_offset(kernel_procedure->kernel_offset()); | 536 function.set_kernel_function(kernel_procedure); |
| 519 | 537 |
| 520 function.set_is_debuggable( | 538 function.set_is_debuggable( |
| 521 kernel_procedure->function()->dart_async_marker() == FunctionNode::kSync); | 539 kernel_procedure->function()->dart_async_marker() == FunctionNode::kSync); |
| 522 switch (kernel_procedure->function()->dart_async_marker()) { | 540 switch (kernel_procedure->function()->dart_async_marker()) { |
| 523 case FunctionNode::kSyncStar: | 541 case FunctionNode::kSyncStar: |
| 524 function.set_modifier(RawFunction::kSyncGen); | 542 function.set_modifier(RawFunction::kSyncGen); |
| 525 break; | 543 break; |
| 526 case FunctionNode::kAsync: | 544 case FunctionNode::kAsync: |
| 527 function.set_modifier(RawFunction::kAsync); | 545 function.set_modifier(RawFunction::kAsync); |
| 528 function.set_is_inlinable(!FLAG_causal_async_stacks); | 546 function.set_is_inlinable(!FLAG_causal_async_stacks); |
| (...skipping 18 matching lines...) Expand all Loading... |
| 547 | 565 |
| 548 if (kernel_klass == NULL) { | 566 if (kernel_klass == NULL) { |
| 549 library.AddObject(function, name); | 567 library.AddObject(function, name); |
| 550 ASSERT(!Object::Handle( | 568 ASSERT(!Object::Handle( |
| 551 Z, library.LookupObjectAllowPrivate( | 569 Z, library.LookupObjectAllowPrivate( |
| 552 H.DartProcedureName(kernel_procedure->canonical_name()))) | 570 H.DartProcedureName(kernel_procedure->canonical_name()))) |
| 553 .IsNull()); | 571 .IsNull()); |
| 554 } | 572 } |
| 555 if (FLAG_enable_mirrors) { | 573 if (FLAG_enable_mirrors) { |
| 556 library.AddFunctionMetadata(function, TokenPosition::kNoSource, | 574 library.AddFunctionMetadata(function, TokenPosition::kNoSource, |
| 557 kernel_procedure->kernel_offset()); | 575 kernel_procedure); |
| 558 } | 576 } |
| 559 } | 577 } |
| 560 | 578 |
| 561 const Object& KernelReader::ClassForScriptAt(const dart::Class& klass, | 579 const Object& KernelReader::ClassForScriptAt(const dart::Class& klass, |
| 562 intptr_t source_uri_index) { | 580 intptr_t source_uri_index) { |
| 563 Script& correct_script = ScriptAt(source_uri_index); | 581 Script& correct_script = ScriptAt(source_uri_index); |
| 564 if (klass.script() != correct_script.raw()) { | 582 if (klass.script() != correct_script.raw()) { |
| 565 // TODO(jensj): We could probably cache this so we don't create | 583 // TODO(jensj): We could probably cache this so we don't create |
| 566 // new PatchClasses all the time | 584 // new PatchClasses all the time |
| 567 return PatchClass::ZoneHandle(Z, PatchClass::New(klass, correct_script)); | 585 return PatchClass::ZoneHandle(Z, PatchClass::New(klass, correct_script)); |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 617 intptr_t uri_size = program_->source_table().UriSizeFor(index); | 635 intptr_t uri_size = program_->source_table().UriSizeFor(index); |
| 618 dart::String& uri_string = H.DartString(uri_buffer, uri_size, Heap::kOld); | 636 dart::String& uri_string = H.DartString(uri_buffer, uri_size, Heap::kOld); |
| 619 dart::String& import_uri_string = | 637 dart::String& import_uri_string = |
| 620 import_uri == -1 ? uri_string : H.DartString(import_uri, Heap::kOld); | 638 import_uri == -1 ? uri_string : H.DartString(import_uri, Heap::kOld); |
| 621 uint8_t* source_buffer = program_->source_table().SourceCodeFor(index); | 639 uint8_t* source_buffer = program_->source_table().SourceCodeFor(index); |
| 622 intptr_t source_size = program_->source_table().SourceCodeSizeFor(index); | 640 intptr_t source_size = program_->source_table().SourceCodeSizeFor(index); |
| 623 dart::String& source_code = | 641 dart::String& source_code = |
| 624 H.DartString(source_buffer, source_size, Heap::kOld); | 642 H.DartString(source_buffer, source_size, Heap::kOld); |
| 625 script = Script::New(import_uri_string, uri_string, source_code, | 643 script = Script::New(import_uri_string, uri_string, source_code, |
| 626 RawScript::kKernelTag); | 644 RawScript::kKernelTag); |
| 627 script.set_kernel_data(program_->libraries()[0]->kernel_data()); | |
| 628 script.set_kernel_data_size(program_->libraries()[0]->kernel_data_size()); | |
| 629 script.set_kernel_string_offsets(H.string_offsets()); | 645 script.set_kernel_string_offsets(H.string_offsets()); |
| 630 script.set_kernel_string_data(H.string_data()); | 646 script.set_kernel_string_data(H.string_data()); |
| 631 script.set_kernel_canonical_names(H.canonical_names()); | 647 script.set_kernel_canonical_names(H.canonical_names()); |
| 632 scripts_.SetAt(index, script); | 648 scripts_.SetAt(index, script); |
| 633 | 649 |
| 634 // Create line_starts array for the script. | 650 // Create line_starts array for the script. |
| 635 intptr_t* line_starts = program_->source_table().LineStartsFor(index); | 651 intptr_t* line_starts = program_->source_table().LineStartsFor(index); |
| 636 intptr_t line_count = program_->source_table().LineCountFor(index); | 652 intptr_t line_count = program_->source_table().LineCountFor(index); |
| 637 Array& array_object = Array::Handle(Z, Array::New(line_count, Heap::kOld)); | 653 Array& array_object = Array::Handle(Z, Array::New(line_count, Heap::kOld)); |
| 638 Smi& value = Smi::Handle(Z); | 654 Smi& value = Smi::Handle(Z); |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 706 // non-static | 722 // non-static |
| 707 // fields that are final. | 723 // fields that are final. |
| 708 kernel_field->IsStatic() ? kernel_field->IsConst() | 724 kernel_field->IsStatic() ? kernel_field->IsConst() |
| 709 : kernel_field->IsFinal(), | 725 : kernel_field->IsFinal(), |
| 710 false, // is_abstract | 726 false, // is_abstract |
| 711 false, // is_external | 727 false, // is_external |
| 712 false, // is_native | 728 false, // is_native |
| 713 script_class, kernel_field->position())); | 729 script_class, kernel_field->position())); |
| 714 functions_.Add(&getter); | 730 functions_.Add(&getter); |
| 715 getter.set_end_token_pos(kernel_field->end_position()); | 731 getter.set_end_token_pos(kernel_field->end_position()); |
| 716 getter.set_kernel_offset(kernel_field->kernel_offset()); | 732 getter.set_kernel_function(kernel_field); |
| 717 getter.set_result_type(AbstractType::Handle(Z, field.type())); | 733 getter.set_result_type(AbstractType::Handle(Z, field.type())); |
| 718 getter.set_is_debuggable(false); | 734 getter.set_is_debuggable(false); |
| 719 SetupFieldAccessorFunction(klass, getter); | 735 SetupFieldAccessorFunction(klass, getter); |
| 720 | 736 |
| 721 if (!kernel_field->IsStatic() && !kernel_field->IsFinal()) { | 737 if (!kernel_field->IsStatic() && !kernel_field->IsFinal()) { |
| 722 // Only static fields can be const. | 738 // Only static fields can be const. |
| 723 ASSERT(!kernel_field->IsConst()); | 739 ASSERT(!kernel_field->IsConst()); |
| 724 const dart::String& setter_name = | 740 const dart::String& setter_name = |
| 725 H.DartSetterName(kernel_field->canonical_name()); | 741 H.DartSetterName(kernel_field->canonical_name()); |
| 726 Function& setter = Function::ZoneHandle( | 742 Function& setter = Function::ZoneHandle( |
| 727 Z, Function::New(setter_name, RawFunction::kImplicitSetter, | 743 Z, Function::New(setter_name, RawFunction::kImplicitSetter, |
| 728 false, // is_static | 744 false, // is_static |
| 729 false, // is_const | 745 false, // is_const |
| 730 false, // is_abstract | 746 false, // is_abstract |
| 731 false, // is_external | 747 false, // is_external |
| 732 false, // is_native | 748 false, // is_native |
| 733 script_class, kernel_field->position())); | 749 script_class, kernel_field->position())); |
| 734 functions_.Add(&setter); | 750 functions_.Add(&setter); |
| 735 setter.set_end_token_pos(kernel_field->end_position()); | 751 setter.set_end_token_pos(kernel_field->end_position()); |
| 736 setter.set_kernel_offset(kernel_field->kernel_offset()); | 752 setter.set_kernel_function(kernel_field); |
| 737 setter.set_result_type(Object::void_type()); | 753 setter.set_result_type(Object::void_type()); |
| 738 setter.set_is_debuggable(false); | 754 setter.set_is_debuggable(false); |
| 739 SetupFieldAccessorFunction(klass, setter); | 755 SetupFieldAccessorFunction(klass, setter); |
| 740 } | 756 } |
| 741 } | 757 } |
| 742 | 758 |
| 743 | 759 |
| 744 void KernelReader::SetupFunctionParameters(TranslationHelper translation_helper, | 760 void KernelReader::SetupFunctionParameters(TranslationHelper translation_helper, |
| 745 DartTypeTranslator type_translator, | 761 DartTypeTranslator type_translator, |
| 746 const dart::Class& klass, | 762 const dart::Class& klass, |
| (...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 893 } else { | 909 } else { |
| 894 ASSERT(0 <= kind && kind <= Procedure::kFactory); | 910 ASSERT(0 <= kind && kind <= Procedure::kFactory); |
| 895 return static_cast<RawFunction::Kind>(lookuptable[kind]); | 911 return static_cast<RawFunction::Kind>(lookuptable[kind]); |
| 896 } | 912 } |
| 897 } | 913 } |
| 898 | 914 |
| 899 | 915 |
| 900 ParsedFunction* ParseStaticFieldInitializer(Zone* zone, | 916 ParsedFunction* ParseStaticFieldInitializer(Zone* zone, |
| 901 const dart::Field& field) { | 917 const dart::Field& field) { |
| 902 Thread* thread = Thread::Current(); | 918 Thread* thread = Thread::Current(); |
| 919 kernel::Field* kernel_field = kernel::Field::Cast( |
| 920 reinterpret_cast<kernel::Node*>(field.kernel_field())); |
| 903 | 921 |
| 904 dart::String& init_name = dart::String::Handle(zone, field.name()); | 922 dart::String& init_name = dart::String::Handle(zone, field.name()); |
| 905 init_name = Symbols::FromConcat(thread, Symbols::InitPrefix(), init_name); | 923 init_name = Symbols::FromConcat(thread, Symbols::InitPrefix(), init_name); |
| 906 | 924 |
| 907 // Create a static initializer. | 925 // Create a static initializer. |
| 908 const Object& owner = Object::Handle(field.RawOwner()); | 926 const Object& owner = Object::Handle(field.RawOwner()); |
| 909 const Function& initializer_fun = Function::ZoneHandle( | 927 const Function& initializer_fun = Function::ZoneHandle( |
| 910 zone, | 928 zone, |
| 911 dart::Function::New(init_name, RawFunction::kImplicitStaticFinalGetter, | 929 dart::Function::New(init_name, RawFunction::kImplicitStaticFinalGetter, |
| 912 true, // is_static | 930 true, // is_static |
| 913 false, // is_const | 931 false, // is_const |
| 914 false, // is_abstract | 932 false, // is_abstract |
| 915 false, // is_external | 933 false, // is_external |
| 916 false, // is_native | 934 false, // is_native |
| 917 owner, TokenPosition::kNoSource)); | 935 owner, TokenPosition::kNoSource)); |
| 918 initializer_fun.set_kernel_offset(field.kernel_offset()); | 936 initializer_fun.set_kernel_function(kernel_field); |
| 919 initializer_fun.set_result_type(AbstractType::Handle(zone, field.type())); | 937 initializer_fun.set_result_type(AbstractType::Handle(zone, field.type())); |
| 920 initializer_fun.set_is_debuggable(false); | 938 initializer_fun.set_is_debuggable(false); |
| 921 initializer_fun.set_is_reflectable(false); | 939 initializer_fun.set_is_reflectable(false); |
| 922 initializer_fun.set_is_inlinable(false); | 940 initializer_fun.set_is_inlinable(false); |
| 923 return new (zone) ParsedFunction(thread, initializer_fun); | 941 return new (zone) ParsedFunction(thread, initializer_fun); |
| 924 } | 942 } |
| 925 | 943 |
| 926 | 944 |
| 927 } // namespace kernel | 945 } // namespace kernel |
| 928 } // namespace dart | 946 } // namespace dart |
| 929 #endif // !defined(DART_PRECOMPILED_RUNTIME) | 947 #endif // !defined(DART_PRECOMPILED_RUNTIME) |
| OLD | NEW |