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/longjump.h" | 10 #include "vm/longjump.h" |
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 Loading... | |
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) |
OLD | NEW |