| 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 182 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 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 Loading... |
| 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 Loading... |
| 327 false, // is_native | 328 false, // is_native |
| 328 klass, TokenPosition::kMinSource)); | 329 klass, TokenPosition::kMinSource)); |
| 329 function.set_end_token_pos(TokenPosition::kMinSource); | 330 function.set_end_token_pos(TokenPosition::kMinSource); |
| 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 Loading... |
| 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 287 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 722 initializer_fun.set_is_debuggable(false); | 737 initializer_fun.set_is_debuggable(false); |
| 723 initializer_fun.set_is_reflectable(false); | 738 initializer_fun.set_is_reflectable(false); |
| 724 initializer_fun.set_is_inlinable(false); | 739 initializer_fun.set_is_inlinable(false); |
| 725 return new (zone) ParsedFunction(thread, initializer_fun); | 740 return new (zone) ParsedFunction(thread, initializer_fun); |
| 726 } | 741 } |
| 727 | 742 |
| 728 | 743 |
| 729 } // namespace kernel | 744 } // namespace kernel |
| 730 } // namespace dart | 745 } // namespace dart |
| 731 #endif // !defined(DART_PRECOMPILED_RUNTIME) | 746 #endif // !defined(DART_PRECOMPILED_RUNTIME) |
| OLD | NEW |