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

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

Issue 2632253002: VM: [Kernel] Partial support for metadata annotations (Closed)
Patch Set: Address comments Created 3 years, 11 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') | runtime/vm/kernel_to_il.h » ('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 182 matching lines...) Expand 10 before | Expand all | Expand 10 after
193 Procedure* kernel_procedure = kernel_library->procedures()[i]; 193 Procedure* kernel_procedure = kernel_library->procedures()[i];
194 ReadProcedure(library, toplevel_class, kernel_procedure); 194 ReadProcedure(library, toplevel_class, kernel_procedure);
195 } 195 }
196 196
197 const GrowableObjectArray& classes = 197 const GrowableObjectArray& classes =
198 GrowableObjectArray::Handle(I->object_store()->pending_classes()); 198 GrowableObjectArray::Handle(I->object_store()->pending_classes());
199 199
200 // Load all classes. 200 // Load all classes.
201 for (intptr_t i = 0; i < kernel_library->classes().length(); i++) { 201 for (intptr_t i = 0; i < kernel_library->classes().length(); i++) {
202 Class* kernel_klass = kernel_library->classes()[i]; 202 Class* kernel_klass = kernel_library->classes()[i];
203 classes.Add(ReadClass(library, kernel_klass), Heap::kOld); 203 classes.Add(ReadClass(library, toplevel_class, kernel_klass), Heap::kOld);
204 } 204 }
205 205
206 classes.Add(toplevel_class, Heap::kOld); 206 classes.Add(toplevel_class, Heap::kOld);
207 } 207 }
208 208
209 209
210 void KernelReader::ReadPreliminaryClass(dart::Class* klass, 210 void KernelReader::ReadPreliminaryClass(dart::Class* klass,
211 Class* kernel_klass) { 211 Class* kernel_klass) {
212 ASSERT(kernel_klass->IsNormalClass()); 212 ASSERT(kernel_klass->IsNormalClass());
213 NormalClass* kernel_normal_class = NormalClass::Cast(kernel_klass); 213 NormalClass* kernel_normal_class = NormalClass::Cast(kernel_klass);
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
274 T.TranslateTypeWithoutFinalization(kernel_interface_type); 274 T.TranslateTypeWithoutFinalization(kernel_interface_type);
275 if (type.IsMalformed()) H.ReportError("Malformed interface type."); 275 if (type.IsMalformed()) H.ReportError("Malformed interface type.");
276 interfaces.SetAt(i, type); 276 interfaces.SetAt(i, type);
277 } 277 }
278 klass->set_interfaces(interfaces); 278 klass->set_interfaces(interfaces);
279 if (kernel_klass->is_abstract()) klass->set_is_abstract(); 279 if (kernel_klass->is_abstract()) klass->set_is_abstract();
280 } 280 }
281 281
282 282
283 dart::Class& KernelReader::ReadClass(const dart::Library& library, 283 dart::Class& KernelReader::ReadClass(const dart::Library& library,
284 const dart::Class& toplevel_class,
284 Class* kernel_klass) { 285 Class* kernel_klass) {
285 // This will trigger a call to [ReadPreliminaryClass] if not already done. 286 // This will trigger a call to [ReadPreliminaryClass] if not already done.
286 dart::Class& klass = LookupClass(kernel_klass); 287 dart::Class& klass = LookupClass(kernel_klass);
287 288
288 ActiveClassScope active_class_scope(&active_class_, kernel_klass, &klass); 289 ActiveClassScope active_class_scope(&active_class_, kernel_klass, &klass);
289 290
290 for (intptr_t i = 0; i < kernel_klass->fields().length(); i++) { 291 for (intptr_t i = 0; i < kernel_klass->fields().length(); i++) {
291 Field* kernel_field = kernel_klass->fields()[i]; 292 Field* kernel_field = kernel_klass->fields()[i];
292 ActiveMemberScope active_member_scope(&active_class_, kernel_field); 293 ActiveMemberScope active_member_scope(&active_class_, kernel_field);
293 294
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
327 false, // is_native 328 false, // is_native
328 klass, kernel_constructor->position())); 329 klass, kernel_constructor->position()));
329 function.set_end_token_pos(kernel_constructor->end_position()); 330 function.set_end_token_pos(kernel_constructor->end_position());
330 klass.AddFunction(function); 331 klass.AddFunction(function);
331 function.set_kernel_function(kernel_constructor); 332 function.set_kernel_function(kernel_constructor);
332 function.set_result_type(T.ReceiverType(klass)); 333 function.set_result_type(T.ReceiverType(klass));
333 SetupFunctionParameters(H, T, klass, function, 334 SetupFunctionParameters(H, T, klass, function,
334 kernel_constructor->function(), 335 kernel_constructor->function(),
335 true, // is_method 336 true, // is_method
336 false); // is_closure 337 false); // is_closure
338
339 if (FLAG_enable_mirrors) {
340 library.AddFunctionMetadata(function, TokenPosition::kNoSource,
341 kernel_constructor);
342 }
337 } 343 }
338 344
339 for (intptr_t i = 0; i < kernel_klass->procedures().length(); i++) { 345 for (intptr_t i = 0; i < kernel_klass->procedures().length(); i++) {
340 Procedure* kernel_procedure = kernel_klass->procedures()[i]; 346 Procedure* kernel_procedure = kernel_klass->procedures()[i];
341 ActiveMemberScope active_member_scope(&active_class_, kernel_procedure); 347 ActiveMemberScope active_member_scope(&active_class_, kernel_procedure);
342 ReadProcedure(library, klass, kernel_procedure, kernel_klass); 348 ReadProcedure(library, klass, kernel_procedure, kernel_klass);
343 } 349 }
344 350
345 if (!klass.is_marked_for_parsing()) { 351 if (!klass.is_marked_for_parsing()) {
346 klass.set_is_marked_for_parsing(); 352 klass.set_is_marked_for_parsing();
347 } 353 }
348 354
355 if (FLAG_enable_mirrors) {
356 library.AddClassMetadata(klass, toplevel_class, TokenPosition::kNoSource,
357 kernel_klass);
358 }
359
349 return klass; 360 return klass;
350 } 361 }
351 362
352 363
353 void KernelReader::ReadProcedure(const dart::Library& library, 364 void KernelReader::ReadProcedure(const dart::Library& library,
354 const dart::Class& owner, 365 const dart::Class& owner,
355 Procedure* kernel_procedure, 366 Procedure* kernel_procedure,
356 Class* kernel_klass) { 367 Class* kernel_klass) {
357 ActiveClassScope active_class_scope(&active_class_, kernel_klass, &owner); 368 ActiveClassScope active_class_scope(&active_class_, kernel_klass, &owner);
358 ActiveMemberScope active_member_scope(&active_class_, kernel_procedure); 369 ActiveMemberScope active_member_scope(&active_class_, kernel_procedure);
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
415 SetupFunctionParameters(H, T, owner, function, kernel_procedure->function(), 426 SetupFunctionParameters(H, T, owner, function, kernel_procedure->function(),
416 is_method, 427 is_method,
417 false); // is_closure 428 false); // is_closure
418 429
419 if (kernel_klass == NULL) { 430 if (kernel_klass == NULL) {
420 library.AddObject(function, name); 431 library.AddObject(function, name);
421 ASSERT(!Object::Handle(Z, library.LookupObjectAllowPrivate( 432 ASSERT(!Object::Handle(Z, library.LookupObjectAllowPrivate(
422 H.DartProcedureName(kernel_procedure))) 433 H.DartProcedureName(kernel_procedure)))
423 .IsNull()); 434 .IsNull());
424 } 435 }
436 if (FLAG_enable_mirrors) {
437 library.AddFunctionMetadata(function, TokenPosition::kNoSource,
438 kernel_procedure);
439 }
425 } 440 }
426 441
427 const Object& KernelReader::ClassForScriptAt(const dart::Class& klass, 442 const Object& KernelReader::ClassForScriptAt(const dart::Class& klass,
428 intptr_t source_uri_index) { 443 intptr_t source_uri_index) {
429 Script& correct_script = ScriptAt(source_uri_index); 444 Script& correct_script = ScriptAt(source_uri_index);
430 if (klass.script() != correct_script.raw()) { 445 if (klass.script() != correct_script.raw()) {
431 // TODO(jensj): We could probably cache this so we don't create 446 // TODO(jensj): We could probably cache this so we don't create
432 // new PatchClasses all the time 447 // new PatchClasses all the time
433 return PatchClass::ZoneHandle(Z, PatchClass::New(klass, correct_script)); 448 return PatchClass::ZoneHandle(Z, PatchClass::New(klass, correct_script));
434 } 449 }
(...skipping 290 matching lines...) Expand 10 before | Expand all | Expand 10 after
725 initializer_fun.set_is_debuggable(false); 740 initializer_fun.set_is_debuggable(false);
726 initializer_fun.set_is_reflectable(false); 741 initializer_fun.set_is_reflectable(false);
727 initializer_fun.set_is_inlinable(false); 742 initializer_fun.set_is_inlinable(false);
728 return new (zone) ParsedFunction(thread, initializer_fun); 743 return new (zone) ParsedFunction(thread, initializer_fun);
729 } 744 }
730 745
731 746
732 } // namespace kernel 747 } // namespace kernel
733 } // namespace dart 748 } // namespace dart
734 #endif // !defined(DART_PRECOMPILED_RUNTIME) 749 #endif // !defined(DART_PRECOMPILED_RUNTIME)
OLDNEW
« no previous file with comments | « runtime/vm/kernel_reader.h ('k') | runtime/vm/kernel_to_il.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698