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

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

Issue 2781893004: Remove definitions from Kernel canonical names. (Closed)
Patch Set: Small cleanups before review. 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
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 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
127 ReadLibrary(kernel_library); 127 ReadLibrary(kernel_library);
128 } 128 }
129 129
130 for (intptr_t i = 0; i < length; i++) { 130 for (intptr_t i = 0; i < length; i++) {
131 dart::Library& library = 131 dart::Library& library =
132 LookupLibrary(program_->libraries()[i]->canonical_name()); 132 LookupLibrary(program_->libraries()[i]->canonical_name());
133 if (!library.Loaded()) library.SetLoaded(); 133 if (!library.Loaded()) library.SetLoaded();
134 } 134 }
135 135
136 if (ClassFinalizer::ProcessPendingClasses(/*from_kernel=*/true)) { 136 if (ClassFinalizer::ProcessPendingClasses(/*from_kernel=*/true)) {
137 Procedure* main = program_->main_method(); 137 CanonicalName* main = program_->main_method();
138 Library* kernel_main_library = Library::Cast(main->parent()); 138 dart::Library& library = LookupLibrary(main->Enclosing());
Kevin Millikin (Google) 2017/03/29 11:50:30 Maybe 'EnclosingName' because otherwise this reads
139 dart::Library& library =
140 LookupLibrary(kernel_main_library->canonical_name());
141 139
142 // Sanity check that we can find the main entrypoint. 140 // Sanity check that we can find the main entrypoint.
143 Object& main_obj = Object::Handle( 141 Object& main_obj = Object::Handle(
144 Z, library.LookupObjectAllowPrivate(H.DartSymbol("main"))); 142 Z, library.LookupObjectAllowPrivate(H.DartSymbol("main")));
145 ASSERT(!main_obj.IsNull()); 143 ASSERT(!main_obj.IsNull());
146 return library; 144 return library;
147 } 145 }
148 } 146 }
149 147
150 // Either class finalization failed or we caught a compile error. 148 // Either class finalization failed or we caught a compile error.
(...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after
353 } 351 }
354 klass.AddFields(fields_); 352 klass.AddFields(fields_);
355 } 353 }
356 354
357 for (intptr_t i = 0; i < kernel_klass->constructors().length(); i++) { 355 for (intptr_t i = 0; i < kernel_klass->constructors().length(); i++) {
358 Constructor* kernel_constructor = kernel_klass->constructors()[i]; 356 Constructor* kernel_constructor = kernel_klass->constructors()[i];
359 ActiveMemberScope active_member_scope(&active_class_, kernel_constructor); 357 ActiveMemberScope active_member_scope(&active_class_, kernel_constructor);
360 ActiveFunctionScope active_function_scope(&active_class_, 358 ActiveFunctionScope active_function_scope(&active_class_,
361 kernel_constructor->function()); 359 kernel_constructor->function());
362 360
363 const dart::String& name = H.DartConstructorName(kernel_constructor); 361 const dart::String& name =
362 H.DartConstructorName(kernel_constructor->canonical_name());
364 Function& function = dart::Function::ZoneHandle( 363 Function& function = dart::Function::ZoneHandle(
365 Z, dart::Function::New(name, RawFunction::kConstructor, 364 Z, dart::Function::New(name, RawFunction::kConstructor,
366 false, // is_static 365 false, // is_static
367 kernel_constructor->IsConst(), 366 kernel_constructor->IsConst(),
368 false, // is_abstract 367 false, // is_abstract
369 kernel_constructor->IsExternal(), 368 kernel_constructor->IsExternal(),
370 false, // is_native 369 false, // is_native
371 klass, kernel_constructor->position())); 370 klass, kernel_constructor->position()));
372 function.set_end_token_pos(kernel_constructor->end_position()); 371 function.set_end_token_pos(kernel_constructor->end_position());
373 functions_.Add(&function); 372 functions_.Add(&function);
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
407 406
408 void KernelReader::ReadProcedure(const dart::Library& library, 407 void KernelReader::ReadProcedure(const dart::Library& library,
409 const dart::Class& owner, 408 const dart::Class& owner,
410 Procedure* kernel_procedure, 409 Procedure* kernel_procedure,
411 Class* kernel_klass) { 410 Class* kernel_klass) {
412 ActiveClassScope active_class_scope(&active_class_, kernel_klass, &owner); 411 ActiveClassScope active_class_scope(&active_class_, kernel_klass, &owner);
413 ActiveMemberScope active_member_scope(&active_class_, kernel_procedure); 412 ActiveMemberScope active_member_scope(&active_class_, kernel_procedure);
414 ActiveFunctionScope active_function_scope(&active_class_, 413 ActiveFunctionScope active_function_scope(&active_class_,
415 kernel_procedure->function()); 414 kernel_procedure->function());
416 415
417 const dart::String& name = H.DartProcedureName(kernel_procedure); 416 const dart::String& name =
417 H.DartProcedureName(kernel_procedure->canonical_name());
418 bool is_method = kernel_klass != NULL && !kernel_procedure->IsStatic(); 418 bool is_method = kernel_klass != NULL && !kernel_procedure->IsStatic();
419 bool is_abstract = kernel_procedure->IsAbstract(); 419 bool is_abstract = kernel_procedure->IsAbstract();
420 bool is_external = kernel_procedure->IsExternal(); 420 bool is_external = kernel_procedure->IsExternal();
421 dart::String* native_name = NULL; 421 dart::String* native_name = NULL;
422 if (is_external) { 422 if (is_external) {
423 // Maybe it has a native implementation, which is not external as far as 423 // Maybe it has a native implementation, which is not external as far as
424 // the VM is concerned because it does have an implementation. Check for 424 // the VM is concerned because it does have an implementation. Check for
425 // an ExternalName annotation and extract the string from it. 425 // an ExternalName annotation and extract the string from it.
426 for (int i = 0; i < kernel_procedure->annotations().length(); ++i) { 426 for (int i = 0; i < kernel_procedure->annotations().length(); ++i) {
427 Expression* annotation = kernel_procedure->annotations()[i]; 427 Expression* annotation = kernel_procedure->annotations()[i];
428 if (!annotation->IsConstructorInvocation()) continue; 428 if (!annotation->IsConstructorInvocation()) continue;
429 ConstructorInvocation* invocation = 429 ConstructorInvocation* invocation =
430 ConstructorInvocation::Cast(annotation); 430 ConstructorInvocation::Cast(annotation);
431 Class* annotation_class = Class::Cast(invocation->target()->parent()); 431 CanonicalName* annotation_class = invocation->target()->Enclosing();
432 ASSERT(annotation_class->IsClass());
432 String* class_name = annotation_class->name(); 433 String* class_name = annotation_class->name();
433 // Just compare by name, do not generate the annotation class. 434 // Just compare by name, do not generate the annotation class.
434 int length = sizeof("ExternalName") - 1; 435 int length = sizeof("ExternalName") - 1;
435 if (class_name->size() != length) continue; 436 if (class_name->size() != length) continue;
436 if (memcmp(class_name->buffer(), "ExternalName", length) != 0) continue; 437 if (memcmp(class_name->buffer(), "ExternalName", length) != 0) continue;
438 ASSERT(annotation_class->parent()->IsLibrary());
437 String* library_name = annotation_class->parent()->name(); 439 String* library_name = annotation_class->parent()->name();
438 length = sizeof("dart._internal") - 1; 440 length = sizeof("dart:_internal") - 1;
439 if (library_name->size() != length) continue; 441 if (library_name->size() != length) continue;
440 if (memcmp(library_name->buffer(), "dart._internal", length) != 0) { 442 if (memcmp(library_name->buffer(), "dart:_internal", length) != 0) {
441 continue; 443 continue;
442 } 444 }
443 445
444 is_external = false; 446 is_external = false;
445 ASSERT(invocation->arguments()->positional().length() == 1 && 447 ASSERT(invocation->arguments()->positional().length() == 1 &&
446 invocation->arguments()->named().length() == 0); 448 invocation->arguments()->named().length() == 0);
447 StringLiteral* literal = 449 StringLiteral* literal =
448 StringLiteral::Cast(invocation->arguments()->positional()[0]); 450 StringLiteral::Cast(invocation->arguments()->positional()[0]);
449 native_name = &H.DartSymbol(literal->value()); 451 native_name = &H.DartSymbol(literal->value());
450 break; 452 break;
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
486 if (native_name != NULL) { 488 if (native_name != NULL) {
487 function.set_native_name(*native_name); 489 function.set_native_name(*native_name);
488 } 490 }
489 491
490 SetupFunctionParameters(H, T, owner, function, kernel_procedure->function(), 492 SetupFunctionParameters(H, T, owner, function, kernel_procedure->function(),
491 is_method, 493 is_method,
492 false); // is_closure 494 false); // is_closure
493 495
494 if (kernel_klass == NULL) { 496 if (kernel_klass == NULL) {
495 library.AddObject(function, name); 497 library.AddObject(function, name);
496 ASSERT(!Object::Handle(Z, library.LookupObjectAllowPrivate( 498 ASSERT(!Object::Handle(
497 H.DartProcedureName(kernel_procedure))) 499 Z, library.LookupObjectAllowPrivate(
500 H.DartProcedureName(kernel_procedure->canonical_name())))
498 .IsNull()); 501 .IsNull());
499 } 502 }
500 if (FLAG_enable_mirrors) { 503 if (FLAG_enable_mirrors) {
501 library.AddFunctionMetadata(function, TokenPosition::kNoSource, 504 library.AddFunctionMetadata(function, TokenPosition::kNoSource,
502 kernel_procedure); 505 kernel_procedure);
503 } 506 }
504 } 507 }
505 508
506 const Object& KernelReader::ClassForScriptAt(const dart::Class& klass, 509 const Object& KernelReader::ClassForScriptAt(const dart::Class& klass,
507 intptr_t source_uri_index) { 510 intptr_t source_uri_index) {
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after
622 // Note: optimizer relies on DoubleInitialized bit in its field-unboxing 625 // Note: optimizer relies on DoubleInitialized bit in its field-unboxing
623 // heuristics. See JitOptimizer::VisitStoreInstanceField for more details. 626 // heuristics. See JitOptimizer::VisitStoreInstanceField for more details.
624 field.RecordStore(converter.SimpleValue()); 627 field.RecordStore(converter.SimpleValue());
625 if (!converter.SimpleValue().IsNull() && 628 if (!converter.SimpleValue().IsNull() &&
626 converter.SimpleValue().IsDouble()) { 629 converter.SimpleValue().IsDouble()) {
627 field.set_is_double_initialized(true); 630 field.set_is_double_initialized(true);
628 } 631 }
629 } 632 }
630 } 633 }
631 634
632 const dart::String& getter_name = H.DartGetterName(kernel_field->name()); 635 const dart::String& getter_name =
636 H.DartGetterName(kernel_field->canonical_name());
633 const Object& script_class = 637 const Object& script_class =
634 ClassForScriptAt(klass, kernel_field->source_uri_index()); 638 ClassForScriptAt(klass, kernel_field->source_uri_index());
635 Function& getter = Function::ZoneHandle( 639 Function& getter = Function::ZoneHandle(
636 Z, 640 Z,
637 Function::New( 641 Function::New(
638 getter_name, 642 getter_name,
639 kernel_field->IsStatic() ? RawFunction::kImplicitStaticFinalGetter 643 kernel_field->IsStatic() ? RawFunction::kImplicitStaticFinalGetter
640 : RawFunction::kImplicitGetter, 644 : RawFunction::kImplicitGetter,
641 kernel_field->IsStatic(), 645 kernel_field->IsStatic(),
642 // The functions created by the parser have is_const for static fields 646 // The functions created by the parser have is_const for static fields
643 // that are const (not just final) and they have is_const for 647 // that are const (not just final) and they have is_const for
644 // non-static 648 // non-static
645 // fields that are final. 649 // fields that are final.
646 kernel_field->IsStatic() ? kernel_field->IsConst() 650 kernel_field->IsStatic() ? kernel_field->IsConst()
647 : kernel_field->IsFinal(), 651 : kernel_field->IsFinal(),
648 false, // is_abstract 652 false, // is_abstract
649 false, // is_external 653 false, // is_external
650 false, // is_native 654 false, // is_native
651 script_class, kernel_field->position())); 655 script_class, kernel_field->position()));
652 functions_.Add(&getter); 656 functions_.Add(&getter);
653 getter.set_end_token_pos(kernel_field->end_position()); 657 getter.set_end_token_pos(kernel_field->end_position());
654 getter.set_kernel_function(kernel_field); 658 getter.set_kernel_function(kernel_field);
655 getter.set_result_type(AbstractType::Handle(Z, field.type())); 659 getter.set_result_type(AbstractType::Handle(Z, field.type()));
656 getter.set_is_debuggable(false); 660 getter.set_is_debuggable(false);
657 SetupFieldAccessorFunction(klass, getter); 661 SetupFieldAccessorFunction(klass, getter);
658 662
659 if (!kernel_field->IsStatic() && !kernel_field->IsFinal()) { 663 if (!kernel_field->IsStatic() && !kernel_field->IsFinal()) {
660 // Only static fields can be const. 664 // Only static fields can be const.
661 ASSERT(!kernel_field->IsConst()); 665 ASSERT(!kernel_field->IsConst());
662 const dart::String& setter_name = H.DartSetterName(kernel_field->name()); 666 const dart::String& setter_name =
667 H.DartSetterName(kernel_field->canonical_name());
663 Function& setter = Function::ZoneHandle( 668 Function& setter = Function::ZoneHandle(
664 Z, Function::New(setter_name, RawFunction::kImplicitSetter, 669 Z, Function::New(setter_name, RawFunction::kImplicitSetter,
665 false, // is_static 670 false, // is_static
666 false, // is_const 671 false, // is_const
667 false, // is_abstract 672 false, // is_abstract
668 false, // is_external 673 false, // is_external
669 false, // is_native 674 false, // is_native
670 script_class, kernel_field->position())); 675 script_class, kernel_field->position()));
671 functions_.Add(&setter); 676 functions_.Add(&setter);
672 setter.set_end_token_pos(kernel_field->end_position()); 677 setter.set_end_token_pos(kernel_field->end_position());
(...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after
859 initializer_fun.set_is_debuggable(false); 864 initializer_fun.set_is_debuggable(false);
860 initializer_fun.set_is_reflectable(false); 865 initializer_fun.set_is_reflectable(false);
861 initializer_fun.set_is_inlinable(false); 866 initializer_fun.set_is_inlinable(false);
862 return new (zone) ParsedFunction(thread, initializer_fun); 867 return new (zone) ParsedFunction(thread, initializer_fun);
863 } 868 }
864 869
865 870
866 } // namespace kernel 871 } // namespace kernel
867 } // namespace dart 872 } // namespace dart
868 #endif // !defined(DART_PRECOMPILED_RUNTIME) 873 #endif // !defined(DART_PRECOMPILED_RUNTIME)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698