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

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

Issue 2514373002: VM: [Kernel] Cherry-pick from dart-lang/kernel_sdk (Closed)
Patch Set: Created 4 years 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/class_finalizer.cc ('k') | runtime/vm/object.cc » ('j') | 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 152 matching lines...) Expand 10 before | Expand all | Expand 10 after
163 Script& script = 163 Script& script =
164 Script::Handle(Z, Script::New(Symbols::KernelScriptUri(), 164 Script::Handle(Z, Script::New(Symbols::KernelScriptUri(),
165 Symbols::Empty(), RawScript::kScriptTag)); 165 Symbols::Empty(), RawScript::kScriptTag));
166 script.SetLocationOffset(0, 0); 166 script.SetLocationOffset(0, 0);
167 script.Tokenize(H.DartString("nop() {}")); 167 script.Tokenize(H.DartString("nop() {}"));
168 dart::Class& toplevel_class = dart::Class::Handle( 168 dart::Class& toplevel_class = dart::Class::Handle(
169 Z, dart::Class::New(library, Symbols::TopLevel(), script, 169 Z, dart::Class::New(library, Symbols::TopLevel(), script,
170 TokenPosition::kNoSource)); 170 TokenPosition::kNoSource));
171 toplevel_class.set_is_cycle_free(); 171 toplevel_class.set_is_cycle_free();
172 library.set_toplevel_class(toplevel_class); 172 library.set_toplevel_class(toplevel_class);
173 if (bootstrapping_) {
174 GrowableObjectArray::Handle(Z, I->object_store()->pending_classes())
175 .Add(toplevel_class, Heap::kOld);
176 }
177 173
178 ActiveClassScope active_class_scope(&active_class_, NULL, &toplevel_class); 174 ActiveClassScope active_class_scope(&active_class_, NULL, &toplevel_class);
179 // Load toplevel fields. 175 // Load toplevel fields.
180 for (intptr_t i = 0; i < kernel_library->fields().length(); i++) { 176 for (intptr_t i = 0; i < kernel_library->fields().length(); i++) {
181 Field* kernel_field = kernel_library->fields()[i]; 177 Field* kernel_field = kernel_library->fields()[i];
182 178
183 ActiveMemberScope active_member_scope(&active_class_, kernel_field); 179 ActiveMemberScope active_member_scope(&active_class_, kernel_field);
184 const dart::String& name = H.DartFieldName(kernel_field->name()); 180 const dart::String& name = H.DartFieldName(kernel_field->name());
185 dart::Field& field = dart::Field::Handle( 181 dart::Field& field = dart::Field::Handle(
186 Z, dart::Field::NewTopLevel(name, kernel_field->IsFinal(), 182 Z, dart::Field::NewTopLevel(name, kernel_field->IsFinal(),
(...skipping 13 matching lines...) Expand all
200 Procedure* kernel_procedure = kernel_library->procedures()[i]; 196 Procedure* kernel_procedure = kernel_library->procedures()[i];
201 ReadProcedure(library, toplevel_class, kernel_procedure); 197 ReadProcedure(library, toplevel_class, kernel_procedure);
202 } 198 }
203 199
204 const GrowableObjectArray& classes = 200 const GrowableObjectArray& classes =
205 GrowableObjectArray::Handle(I->object_store()->pending_classes()); 201 GrowableObjectArray::Handle(I->object_store()->pending_classes());
206 202
207 // Load all classes. 203 // Load all classes.
208 for (intptr_t i = 0; i < kernel_library->classes().length(); i++) { 204 for (intptr_t i = 0; i < kernel_library->classes().length(); i++) {
209 Class* kernel_klass = kernel_library->classes()[i]; 205 Class* kernel_klass = kernel_library->classes()[i];
210 classes.Add(ReadClass(library, kernel_klass), Heap::kOld); 206 classes.Add(ReadClass(library, kernel_klass), Heap::kOld);
Kevin Millikin (Google) 2016/11/21 15:00:11 When bootstrapping, ReadClass is also adding class
kustermann 2016/11/21 15:30:05 Good point. Done.
211 } 207 }
208
209 classes.Add(toplevel_class, Heap::kOld);
212 } 210 }
213 211
214 212
215 void KernelReader::ReadPreliminaryClass(dart::Class* klass, 213 void KernelReader::ReadPreliminaryClass(dart::Class* klass,
216 Class* kernel_klass) { 214 Class* kernel_klass) {
217 ASSERT(kernel_klass->IsNormalClass()); 215 ASSERT(kernel_klass->IsNormalClass());
218 NormalClass* kernel_normal_class = NormalClass::Cast(kernel_klass); 216 NormalClass* kernel_normal_class = NormalClass::Cast(kernel_klass);
219 217
220 ActiveClassScope active_class_scope(&active_class_, kernel_klass, klass); 218 ActiveClassScope active_class_scope(&active_class_, kernel_klass, klass);
221 219
(...skipping 416 matching lines...) Expand 10 before | Expand all | Expand 10 after
638 TokenPosition pos(0); 636 TokenPosition pos(0);
639 Script& script = Script::Handle( 637 Script& script = Script::Handle(
640 Z, Script::New(Symbols::KernelScriptUri(), Symbols::Empty(), 638 Z, Script::New(Symbols::KernelScriptUri(), Symbols::Empty(),
641 RawScript::kScriptTag)); 639 RawScript::kScriptTag));
642 handle->set_script(script); 640 handle->set_script(script);
643 } 641 }
644 // Insert the class in the cache before calling ReadPreliminaryClass so 642 // Insert the class in the cache before calling ReadPreliminaryClass so
645 // we do not risk allocating the class again by calling LookupClass 643 // we do not risk allocating the class again by calling LookupClass
646 // recursively from ReadPreliminaryClass for the same class. 644 // recursively from ReadPreliminaryClass for the same class.
647 classes_.Insert(klass, handle); 645 classes_.Insert(klass, handle);
648 if (!handle->is_type_finalized()) { 646 if (!handle->is_cycle_free()) {
649 ReadPreliminaryClass(handle, klass); 647 ReadPreliminaryClass(handle, klass);
650 } 648 }
651 } 649 }
652 return *handle; 650 return *handle;
653 } 651 }
654 652
655 653
656 RawFunction::Kind KernelReader::GetFunctionType(Procedure* kernel_procedure) { 654 RawFunction::Kind KernelReader::GetFunctionType(Procedure* kernel_procedure) {
657 intptr_t lookuptable[] = { 655 intptr_t lookuptable[] = {
658 RawFunction::kRegularFunction, // Procedure::kMethod 656 RawFunction::kRegularFunction, // Procedure::kMethod
659 RawFunction::kGetterFunction, // Procedure::kGetter 657 RawFunction::kGetterFunction, // Procedure::kGetter
660 RawFunction::kSetterFunction, // Procedure::kSetter 658 RawFunction::kSetterFunction, // Procedure::kSetter
661 RawFunction::kRegularFunction, // Procedure::kOperator 659 RawFunction::kRegularFunction, // Procedure::kOperator
662 RawFunction::kConstructor, // Procedure::kFactory 660 RawFunction::kConstructor, // Procedure::kFactory
663 }; 661 };
664 intptr_t kind = static_cast<int>(kernel_procedure->kind()); 662 intptr_t kind = static_cast<int>(kernel_procedure->kind());
665 if (kind == Procedure::kIncompleteProcedure) { 663 if (kind == Procedure::kIncompleteProcedure) {
666 return RawFunction::kSignatureFunction; 664 return RawFunction::kSignatureFunction;
667 } else { 665 } else {
668 ASSERT(0 <= kind && kind <= Procedure::kFactory); 666 ASSERT(0 <= kind && kind <= Procedure::kFactory);
669 return static_cast<RawFunction::Kind>(lookuptable[kind]); 667 return static_cast<RawFunction::Kind>(lookuptable[kind]);
670 } 668 }
671 } 669 }
672 670
673 671
674 } // namespace kernel 672 } // namespace kernel
675 } // namespace dart 673 } // namespace dart
676 #endif // !defined(DART_PRECOMPILED_RUNTIME) 674 #endif // !defined(DART_PRECOMPILED_RUNTIME)
OLDNEW
« no previous file with comments | « runtime/vm/class_finalizer.cc ('k') | runtime/vm/object.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698