Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2015, 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/precompiler.h" | 5 #include "vm/precompiler.h" |
| 6 | 6 |
| 7 #include "vm/aot_optimizer.h" | 7 #include "vm/aot_optimizer.h" |
| 8 #include "vm/assembler.h" | 8 #include "vm/assembler.h" |
| 9 #include "vm/ast_printer.h" | 9 #include "vm/ast_printer.h" |
| 10 #include "vm/branch_optimizer.h" | 10 #include "vm/branch_optimizer.h" |
| (...skipping 328 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 339 return true; | 339 return true; |
| 340 } | 340 } |
| 341 | 341 |
| 342 | 342 |
| 343 Precompiler::Precompiler(Thread* thread) | 343 Precompiler::Precompiler(Thread* thread) |
| 344 : thread_(thread), | 344 : thread_(thread), |
| 345 zone_(NULL), | 345 zone_(NULL), |
| 346 isolate_(thread->isolate()), | 346 isolate_(thread->isolate()), |
| 347 jit_feedback_(NULL), | 347 jit_feedback_(NULL), |
| 348 changed_(false), | 348 changed_(false), |
| 349 retain_root_library_caches_(false), | |
| 349 function_count_(0), | 350 function_count_(0), |
| 350 class_count_(0), | 351 class_count_(0), |
| 351 selector_count_(0), | 352 selector_count_(0), |
| 352 dropped_function_count_(0), | 353 dropped_function_count_(0), |
| 353 dropped_field_count_(0), | 354 dropped_field_count_(0), |
| 354 dropped_class_count_(0), | 355 dropped_class_count_(0), |
| 355 dropped_typearg_count_(0), | 356 dropped_typearg_count_(0), |
| 356 dropped_type_count_(0), | 357 dropped_type_count_(0), |
| 357 dropped_library_count_(0), | 358 dropped_library_count_(0), |
| 358 libraries_(GrowableObjectArray::Handle(I->object_store()->libraries())), | 359 libraries_(GrowableObjectArray::Handle(I->object_store()->libraries())), |
| (...skipping 323 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 682 {"dart:isolate", "::", "_runPendingImmediateCallback"}, | 683 {"dart:isolate", "::", "_runPendingImmediateCallback"}, |
| 683 #endif // !PRODUCT | 684 #endif // !PRODUCT |
| 684 // Fields | 685 // Fields |
| 685 {"dart:core", "Error", "_stackTrace"}, | 686 {"dart:core", "Error", "_stackTrace"}, |
| 686 {"dart:math", "_Random", "_state"}, | 687 {"dart:math", "_Random", "_state"}, |
| 687 {NULL, NULL, NULL} // Must be terminated with NULL entries. | 688 {NULL, NULL, NULL} // Must be terminated with NULL entries. |
| 688 }; | 689 }; |
| 689 | 690 |
| 690 AddEntryPoints(vm_entry_points); | 691 AddEntryPoints(vm_entry_points); |
| 691 AddEntryPoints(embedder_entry_points); | 692 AddEntryPoints(embedder_entry_points); |
| 693 const Library& lib = Library::Handle(I->object_store()->root_library()); | |
| 694 const String& name = String::Handle(String::New("main")); | |
| 695 const Object& main_closure = Object::Handle(lib.GetFunctionClosure(name)); | |
|
rmacnak
2017/06/15 01:48:54
Propagate if error
siva
2017/06/15 17:34:41
Done.
| |
| 696 if (main_closure.IsClosure()) { | |
| 697 if (lib.LookupLocalFunction(name) == Function::null()) { | |
| 698 // Check whether the function is in exported namespace of library, in | |
| 699 // this case we have to retain the root library caches. | |
| 700 if (lib.LookupFunctionAllowPrivate(name) != Function::null() || | |
| 701 lib.LookupReExport(name) != Object::null()) { | |
| 702 retain_root_library_caches_ = true; | |
| 703 } | |
| 704 } | |
| 705 AddConstObject(Closure::Cast(main_closure)); | |
| 706 } | |
| 692 } | 707 } |
| 693 | 708 |
| 694 | 709 |
| 695 void Precompiler::AddEntryPoints(Dart_QualifiedFunctionName entry_points[]) { | 710 void Precompiler::AddEntryPoints(Dart_QualifiedFunctionName entry_points[]) { |
| 696 Library& lib = Library::Handle(Z); | 711 Library& lib = Library::Handle(Z); |
| 697 Class& cls = Class::Handle(Z); | 712 Class& cls = Class::Handle(Z); |
| 698 Function& func = Function::Handle(Z); | 713 Function& func = Function::Handle(Z); |
| 699 Field& field = Field::Handle(Z); | 714 Field& field = Field::Handle(Z); |
| 700 String& library_uri = String::Handle(Z); | 715 String& library_uri = String::Handle(Z); |
| 701 String& class_name = String::Handle(Z); | 716 String& class_name = String::Handle(Z); |
| (...skipping 1319 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2021 continue; | 2036 continue; |
| 2022 } | 2037 } |
| 2023 } else if (entry.IsLibraryPrefix()) { | 2038 } else if (entry.IsLibraryPrefix()) { |
| 2024 // Always drop. | 2039 // Always drop. |
| 2025 } else { | 2040 } else { |
| 2026 FATAL1("Unexpected library entry: %s", entry.ToCString()); | 2041 FATAL1("Unexpected library entry: %s", entry.ToCString()); |
| 2027 } | 2042 } |
| 2028 dict.SetAt(j, Object::null_object()); | 2043 dict.SetAt(j, Object::null_object()); |
| 2029 } | 2044 } |
| 2030 lib.RehashDictionary(dict, used * 4 / 3 + 1); | 2045 lib.RehashDictionary(dict, used * 4 / 3 + 1); |
| 2031 lib.DropDependenciesAndCaches(); | 2046 if (!(retain_root_library_caches_ && |
| 2047 (lib.raw() == I->object_store()->root_library()))) { | |
| 2048 lib.DropDependenciesAndCaches(); | |
| 2049 } | |
| 2032 } | 2050 } |
| 2033 } | 2051 } |
| 2034 | 2052 |
| 2035 | 2053 |
| 2036 void Precompiler::DropClasses() { | 2054 void Precompiler::DropClasses() { |
| 2037 Class& cls = Class::Handle(Z); | 2055 Class& cls = Class::Handle(Z); |
| 2038 Array& constants = Array::Handle(Z); | 2056 Array& constants = Array::Handle(Z); |
| 2039 | 2057 |
| 2040 #if defined(DEBUG) | 2058 #if defined(DEBUG) |
| 2041 // We are about to remove classes from the class table. For this to be safe, | 2059 // We are about to remove classes from the class table. For this to be safe, |
| (...skipping 1322 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 3364 | 3382 |
| 3365 ASSERT(FLAG_precompiled_mode); | 3383 ASSERT(FLAG_precompiled_mode); |
| 3366 const bool optimized = function.IsOptimizable(); // False for natives. | 3384 const bool optimized = function.IsOptimizable(); // False for natives. |
| 3367 DartPrecompilationPipeline pipeline(zone, field_type_map); | 3385 DartPrecompilationPipeline pipeline(zone, field_type_map); |
| 3368 return PrecompileFunctionHelper(precompiler, &pipeline, function, optimized); | 3386 return PrecompileFunctionHelper(precompiler, &pipeline, function, optimized); |
| 3369 } | 3387 } |
| 3370 | 3388 |
| 3371 #endif // DART_PRECOMPILER | 3389 #endif // DART_PRECOMPILER |
| 3372 | 3390 |
| 3373 } // namespace dart | 3391 } // namespace dart |
| OLD | NEW |