OLD | NEW |
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, 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 <stdlib.h> | 5 #include <stdlib.h> |
6 #include <string.h> | 6 #include <string.h> |
7 #include <stdio.h> | 7 #include <stdio.h> |
8 | 8 |
9 #include "include/dart_api.h" | 9 #include "include/dart_api.h" |
10 #include "include/dart_tools_api.h" | 10 #include "include/dart_tools_api.h" |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
77 kScript, | 77 kScript, |
78 kAppAOT, | 78 kAppAOT, |
79 kAppJIT, | 79 kAppJIT, |
80 }; | 80 }; |
81 static SnapshotKind gen_snapshot_kind = kNone; | 81 static SnapshotKind gen_snapshot_kind = kNone; |
82 static const char* snapshot_deps_filename = NULL; | 82 static const char* snapshot_deps_filename = NULL; |
83 #if !defined(DART_PRECOMPILED_RUNTIME) | 83 #if !defined(DART_PRECOMPILED_RUNTIME) |
84 DFE dfe; | 84 DFE dfe; |
85 #endif | 85 #endif |
86 | 86 |
| 87 // Value of the --save-compilation-trace flag. |
| 88 // (This pointer points into an argv buffer and does not need to be |
| 89 // free'd.) |
| 90 static const char* save_compilation_trace_filename = NULL; |
| 91 |
| 92 // Value of the --load-compilation-trace flag. |
| 93 // (This pointer points into an argv buffer and does not need to be |
| 94 // free'd.) |
| 95 static const char* load_compilation_trace_filename = NULL; |
| 96 |
87 // Value of the --save-feedback flag. | 97 // Value of the --save-feedback flag. |
88 // (This pointer points into an argv buffer and does not need to be | 98 // (This pointer points into an argv buffer and does not need to be |
89 // free'd.) | 99 // free'd.) |
90 static const char* save_feedback_filename = NULL; | 100 static const char* save_feedback_filename = NULL; |
91 | 101 |
92 // Value of the --load-feedback flag. | 102 // Value of the --load-feedback flag. |
93 // (This pointer points into an argv buffer and does not need to be | 103 // (This pointer points into an argv buffer and does not need to be |
94 // free'd.) | 104 // free'd.) |
95 static const char* load_feedback_filename = NULL; | 105 static const char* load_feedback_filename = NULL; |
96 | 106 |
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
200 CommandLineOptions* vm_options) { | 210 CommandLineOptions* vm_options) { |
201 ASSERT(arg != NULL); | 211 ASSERT(arg != NULL); |
202 if (*arg == '-') { | 212 if (*arg == '-') { |
203 return false; | 213 return false; |
204 } | 214 } |
205 commandline_packages_file = arg; | 215 commandline_packages_file = arg; |
206 return true; | 216 return true; |
207 } | 217 } |
208 | 218 |
209 | 219 |
| 220 static bool ProcessSaveCompilationTraceOption(const char* arg, |
| 221 CommandLineOptions* vm_options) { |
| 222 ASSERT(arg != NULL); |
| 223 if (*arg == '-') { |
| 224 return false; |
| 225 } |
| 226 save_compilation_trace_filename = arg; |
| 227 return true; |
| 228 } |
| 229 |
| 230 |
| 231 static bool ProcessLoadCompilationTraceOption(const char* arg, |
| 232 CommandLineOptions* vm_options) { |
| 233 ASSERT(arg != NULL); |
| 234 if (*arg == '-') { |
| 235 return false; |
| 236 } |
| 237 load_compilation_trace_filename = arg; |
| 238 return true; |
| 239 } |
| 240 |
| 241 |
210 static bool ProcessSaveFeedbackOption(const char* arg, | 242 static bool ProcessSaveFeedbackOption(const char* arg, |
211 CommandLineOptions* vm_options) { | 243 CommandLineOptions* vm_options) { |
212 ASSERT(arg != NULL); | 244 ASSERT(arg != NULL); |
213 if (*arg == '-') { | 245 if (*arg == '-') { |
214 return false; | 246 return false; |
215 } | 247 } |
216 save_feedback_filename = arg; | 248 save_feedback_filename = arg; |
217 return true; | 249 return true; |
218 } | 250 } |
219 | 251 |
(...skipping 368 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
588 {"--dfe=", ProcessFrontendOption}, | 620 {"--dfe=", ProcessFrontendOption}, |
589 {"--platform=", ProcessPlatformOption}, | 621 {"--platform=", ProcessPlatformOption}, |
590 #endif | 622 #endif |
591 {"--enable-vm-service", ProcessEnableVmServiceOption}, | 623 {"--enable-vm-service", ProcessEnableVmServiceOption}, |
592 {"--disable-service-origin-check", ProcessDisableServiceOriginCheckOption}, | 624 {"--disable-service-origin-check", ProcessDisableServiceOriginCheckOption}, |
593 {"--observe", ProcessObserveOption}, | 625 {"--observe", ProcessObserveOption}, |
594 {"--snapshot=", ProcessSnapshotFilenameOption}, | 626 {"--snapshot=", ProcessSnapshotFilenameOption}, |
595 {"--snapshot-kind=", ProcessSnapshotKindOption}, | 627 {"--snapshot-kind=", ProcessSnapshotKindOption}, |
596 {"--snapshot-depfile=", ProcessSnapshotDepsFilenameOption}, | 628 {"--snapshot-depfile=", ProcessSnapshotDepsFilenameOption}, |
597 {"--use-blobs", ProcessUseBlobsOption}, | 629 {"--use-blobs", ProcessUseBlobsOption}, |
| 630 {"--save-compilation-trace=", ProcessSaveCompilationTraceOption}, |
| 631 {"--load-compilation-trace=", ProcessLoadCompilationTraceOption}, |
598 {"--save-feedback=", ProcessSaveFeedbackOption}, | 632 {"--save-feedback=", ProcessSaveFeedbackOption}, |
599 {"--load-feedback=", ProcessLoadFeedbackOption}, | 633 {"--load-feedback=", ProcessLoadFeedbackOption}, |
600 {"--trace-loading", ProcessTraceLoadingOption}, | 634 {"--trace-loading", ProcessTraceLoadingOption}, |
601 {"--hot-reload-test-mode", ProcessHotReloadTestModeOption}, | 635 {"--hot-reload-test-mode", ProcessHotReloadTestModeOption}, |
602 {"--hot-reload-rollback-test-mode", ProcessHotReloadRollbackTestModeOption}, | 636 {"--hot-reload-rollback-test-mode", ProcessHotReloadRollbackTestModeOption}, |
603 {"--short_socket_read", ProcessShortSocketReadOption}, | 637 {"--short_socket_read", ProcessShortSocketReadOption}, |
604 {"--short_socket_write", ProcessShortSocketWriteOption}, | 638 {"--short_socket_write", ProcessShortSocketWriteOption}, |
605 #if !defined(HOST_OS_MACOS) | 639 #if !defined(HOST_OS_MACOS) |
606 {"--root-certs-file=", ProcessRootCertsFileOption}, | 640 {"--root-certs-file=", ProcessRootCertsFileOption}, |
607 {"--root-certs-cache=", ProcessRootCertsCacheOption}, | 641 {"--root-certs-cache=", ProcessRootCertsCacheOption}, |
(...skipping 789 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1397 if (file == NULL) { | 1431 if (file == NULL) { |
1398 ErrorExit(kErrorExitCode, "Unable to open file %s\n", filename); | 1432 ErrorExit(kErrorExitCode, "Unable to open file %s\n", filename); |
1399 } | 1433 } |
1400 if (!file->WriteFully(buffer, size)) { | 1434 if (!file->WriteFully(buffer, size)) { |
1401 ErrorExit(kErrorExitCode, "Unable to write file %s\n", filename); | 1435 ErrorExit(kErrorExitCode, "Unable to write file %s\n", filename); |
1402 } | 1436 } |
1403 file->Release(); | 1437 file->Release(); |
1404 } | 1438 } |
1405 | 1439 |
1406 | 1440 |
| 1441 static void ReadFile(const char* filename, uint8_t** buffer, intptr_t* size) { |
| 1442 File* file = File::Open(filename, File::kRead); |
| 1443 if (file == NULL) { |
| 1444 ErrorExit(kErrorExitCode, "Unable to open file %s\n", filename); |
| 1445 } |
| 1446 *size = file->Length(); |
| 1447 *buffer = reinterpret_cast<uint8_t*>(malloc(*size)); |
| 1448 if (!file->ReadFully(*buffer, *size)) { |
| 1449 ErrorExit(kErrorExitCode, "Unable to read file %s\n", filename); |
| 1450 } |
| 1451 file->Release(); |
| 1452 } |
| 1453 |
| 1454 |
1407 bool RunMainIsolate(const char* script_name, CommandLineOptions* dart_options) { | 1455 bool RunMainIsolate(const char* script_name, CommandLineOptions* dart_options) { |
1408 // Call CreateIsolateAndSetup which creates an isolate and loads up | 1456 // Call CreateIsolateAndSetup which creates an isolate and loads up |
1409 // the specified application script. | 1457 // the specified application script. |
1410 char* error = NULL; | 1458 char* error = NULL; |
1411 bool is_main_isolate = true; | 1459 bool is_main_isolate = true; |
1412 int exit_code = 0; | 1460 int exit_code = 0; |
1413 char* isolate_name = BuildIsolateName(script_name, "main"); | 1461 char* isolate_name = BuildIsolateName(script_name, "main"); |
1414 Dart_Isolate isolate = CreateIsolateAndSetupHelper( | 1462 Dart_Isolate isolate = CreateIsolateAndSetupHelper( |
1415 is_main_isolate, script_name, "main", commandline_package_root, | 1463 is_main_isolate, script_name, "main", commandline_package_root, |
1416 commandline_packages_file, NULL, &error, &exit_code); | 1464 commandline_packages_file, NULL, &error, &exit_code); |
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1540 } | 1588 } |
1541 | 1589 |
1542 if (gen_snapshot_kind == kAppAOT) { | 1590 if (gen_snapshot_kind == kAppAOT) { |
1543 GenerateAppAOTSnapshot(); | 1591 GenerateAppAOTSnapshot(); |
1544 } else { | 1592 } else { |
1545 if (Dart_IsNull(root_lib)) { | 1593 if (Dart_IsNull(root_lib)) { |
1546 ErrorExit(kErrorExitCode, "Unable to find root library for '%s'\n", | 1594 ErrorExit(kErrorExitCode, "Unable to find root library for '%s'\n", |
1547 script_name); | 1595 script_name); |
1548 } | 1596 } |
1549 | 1597 |
1550 if (gen_snapshot_kind == kAppJIT) Dart_SortClasses(); | 1598 if (gen_snapshot_kind == kAppJIT) { |
| 1599 result = Dart_SortClasses(); |
| 1600 CHECK_RESULT(result); |
| 1601 } |
| 1602 |
| 1603 if (load_compilation_trace_filename != NULL) { |
| 1604 uint8_t* buffer = NULL; |
| 1605 intptr_t size = 0; |
| 1606 ReadFile(load_compilation_trace_filename, &buffer, &size); |
| 1607 result = Dart_LoadCompilationTrace(buffer, size); |
| 1608 CHECK_RESULT(result); |
| 1609 } |
1551 | 1610 |
1552 // The helper function _getMainClosure creates a closure for the main | 1611 // The helper function _getMainClosure creates a closure for the main |
1553 // entry point which is either explicitly or implictly exported from the | 1612 // entry point which is either explicitly or implictly exported from the |
1554 // root library. | 1613 // root library. |
1555 Dart_Handle main_closure = | 1614 Dart_Handle main_closure = |
1556 Dart_Invoke(isolate_data->builtin_lib(), | 1615 Dart_Invoke(isolate_data->builtin_lib(), |
1557 Dart_NewStringFromCString("_getMainClosure"), 0, NULL); | 1616 Dart_NewStringFromCString("_getMainClosure"), 0, NULL); |
1558 CHECK_RESULT(main_closure); | 1617 CHECK_RESULT(main_closure); |
1559 | 1618 |
1560 // Call _startIsolate in the isolate library to enable dispatching the | 1619 // Call _startIsolate in the isolate library to enable dispatching the |
(...skipping 17 matching lines...) Expand all Loading... |
1578 if (!Dart_IsCompilationError(result)) { | 1637 if (!Dart_IsCompilationError(result)) { |
1579 Snapshot::GenerateAppJIT(snapshot_filename); | 1638 Snapshot::GenerateAppJIT(snapshot_filename); |
1580 } | 1639 } |
1581 } | 1640 } |
1582 CHECK_RESULT(result); | 1641 CHECK_RESULT(result); |
1583 | 1642 |
1584 if (save_feedback_filename != NULL) { | 1643 if (save_feedback_filename != NULL) { |
1585 uint8_t* buffer = NULL; | 1644 uint8_t* buffer = NULL; |
1586 intptr_t size = 0; | 1645 intptr_t size = 0; |
1587 result = Dart_SaveJITFeedback(&buffer, &size); | 1646 result = Dart_SaveJITFeedback(&buffer, &size); |
1588 if (Dart_IsError(result)) { | 1647 CHECK_RESULT(result); |
1589 ErrorExit(kErrorExitCode, "%s\n", Dart_GetError(result)); | |
1590 } | |
1591 WriteFile(save_feedback_filename, buffer, size); | 1648 WriteFile(save_feedback_filename, buffer, size); |
1592 } | 1649 } |
| 1650 |
| 1651 if (save_compilation_trace_filename != NULL) { |
| 1652 uint8_t* buffer = NULL; |
| 1653 intptr_t size = 0; |
| 1654 result = Dart_SaveCompilationTrace(&buffer, &size); |
| 1655 CHECK_RESULT(result); |
| 1656 WriteFile(save_compilation_trace_filename, buffer, size); |
| 1657 } |
1593 } | 1658 } |
1594 } | 1659 } |
1595 | 1660 |
1596 if (snapshot_deps_filename != NULL) { | 1661 if (snapshot_deps_filename != NULL) { |
1597 Loader::ResolveDependenciesAsFilePaths(); | 1662 Loader::ResolveDependenciesAsFilePaths(); |
1598 IsolateData* isolate_data = | 1663 IsolateData* isolate_data = |
1599 reinterpret_cast<IsolateData*>(Dart_IsolateData(isolate)); | 1664 reinterpret_cast<IsolateData*>(Dart_IsolateData(isolate)); |
1600 ASSERT(isolate_data != NULL); | 1665 ASSERT(isolate_data != NULL); |
1601 MallocGrowableArray<char*>* dependencies = isolate_data->dependencies(); | 1666 MallocGrowableArray<char*>* dependencies = isolate_data->dependencies(); |
1602 ASSERT(dependencies != NULL); | 1667 ASSERT(dependencies != NULL); |
(...skipping 272 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1875 Platform::Exit(Process::GlobalExitCode()); | 1940 Platform::Exit(Process::GlobalExitCode()); |
1876 } | 1941 } |
1877 | 1942 |
1878 } // namespace bin | 1943 } // namespace bin |
1879 } // namespace dart | 1944 } // namespace dart |
1880 | 1945 |
1881 int main(int argc, char** argv) { | 1946 int main(int argc, char** argv) { |
1882 dart::bin::main(argc, argv); | 1947 dart::bin::main(argc, argv); |
1883 UNREACHABLE(); | 1948 UNREACHABLE(); |
1884 } | 1949 } |
OLD | NEW |