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 <stdio.h> | 5 #include <stdio.h> |
6 #include <stdlib.h> | 6 #include <stdlib.h> |
7 #include <string.h> | 7 #include <string.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 564 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
575 if (commandline_root_certs_file != NULL) { | 575 if (commandline_root_certs_file != NULL) { |
576 Log::PrintErr( | 576 Log::PrintErr( |
577 "Only one of --root-certs-file and --root-certs-cache " | 577 "Only one of --root-certs-file and --root-certs-cache " |
578 "may be specified"); | 578 "may be specified"); |
579 return false; | 579 return false; |
580 } | 580 } |
581 commandline_root_certs_cache = arg; | 581 commandline_root_certs_cache = arg; |
582 return true; | 582 return true; |
583 } | 583 } |
584 | 584 |
| 585 const char* commandline_namespace = NULL; |
| 586 static bool ProcessNamespaceOption(const char* arg, |
| 587 CommandLineOptions* vm_options) { |
| 588 ASSERT(arg != NULL); |
| 589 if (*arg == '-') { |
| 590 return false; |
| 591 } |
| 592 if (commandline_namespace != NULL) { |
| 593 Log::PrintErr("Only one --namespace argument is allowed."); |
| 594 return false; |
| 595 } |
| 596 commandline_namespace = arg; |
| 597 return true; |
| 598 } |
| 599 |
585 static struct { | 600 static struct { |
586 const char* option_name; | 601 const char* option_name; |
587 bool (*process)(const char* option, CommandLineOptions* vm_options); | 602 bool (*process)(const char* option, CommandLineOptions* vm_options); |
588 } main_options[] = { | 603 } main_options[] = { |
589 // Standard options shared with dart2js. | 604 // Standard options shared with dart2js. |
590 {"-D", ProcessEnvironmentOption}, | 605 {"-D", ProcessEnvironmentOption}, |
591 {"-h", ProcessHelpOption}, | 606 {"-h", ProcessHelpOption}, |
592 {"--help", ProcessHelpOption}, | 607 {"--help", ProcessHelpOption}, |
593 {"--packages=", ProcessPackagesOption}, | 608 {"--packages=", ProcessPackagesOption}, |
594 {"--package-root=", ProcessPackageRootOption}, | 609 {"--package-root=", ProcessPackageRootOption}, |
(...skipping 21 matching lines...) Expand all Loading... |
616 {"--load-compilation-trace=", ProcessLoadCompilationTraceOption}, | 631 {"--load-compilation-trace=", ProcessLoadCompilationTraceOption}, |
617 {"--save-feedback=", ProcessSaveFeedbackOption}, | 632 {"--save-feedback=", ProcessSaveFeedbackOption}, |
618 {"--load-feedback=", ProcessLoadFeedbackOption}, | 633 {"--load-feedback=", ProcessLoadFeedbackOption}, |
619 {"--trace-loading", ProcessTraceLoadingOption}, | 634 {"--trace-loading", ProcessTraceLoadingOption}, |
620 {"--hot-reload-test-mode", ProcessHotReloadTestModeOption}, | 635 {"--hot-reload-test-mode", ProcessHotReloadTestModeOption}, |
621 {"--hot-reload-rollback-test-mode", ProcessHotReloadRollbackTestModeOption}, | 636 {"--hot-reload-rollback-test-mode", ProcessHotReloadRollbackTestModeOption}, |
622 {"--short_socket_read", ProcessShortSocketReadOption}, | 637 {"--short_socket_read", ProcessShortSocketReadOption}, |
623 {"--short_socket_write", ProcessShortSocketWriteOption}, | 638 {"--short_socket_write", ProcessShortSocketWriteOption}, |
624 {"--root-certs-file=", ProcessRootCertsFileOption}, | 639 {"--root-certs-file=", ProcessRootCertsFileOption}, |
625 {"--root-certs-cache=", ProcessRootCertsCacheOption}, | 640 {"--root-certs-cache=", ProcessRootCertsCacheOption}, |
| 641 {"--namespace=", ProcessNamespaceOption}, |
626 {NULL, NULL}}; | 642 {NULL, NULL}}; |
627 | 643 |
628 static bool ProcessMainOptions(const char* option, | 644 static bool ProcessMainOptions(const char* option, |
629 CommandLineOptions* vm_options) { | 645 CommandLineOptions* vm_options) { |
630 int i = 0; | 646 int i = 0; |
631 const char* name = main_options[0].option_name; | 647 const char* name = main_options[0].option_name; |
632 int option_length = strlen(option); | 648 int option_length = strlen(option); |
633 while (name != NULL) { | 649 while (name != NULL) { |
634 int length = strlen(name); | 650 int length = strlen(name); |
635 if ((option_length >= length) && (strncmp(option, name, length) == 0)) { | 651 if ((option_length >= length) && (strncmp(option, name, length) == 0)) { |
(...skipping 269 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
905 CHECK_RESULT(result); | 921 CHECK_RESULT(result); |
906 | 922 |
907 // Setup package root if specified. | 923 // Setup package root if specified. |
908 result = DartUtils::SetupPackageRoot(package_root, packages_config); | 924 result = DartUtils::SetupPackageRoot(package_root, packages_config); |
909 CHECK_RESULT(result); | 925 CHECK_RESULT(result); |
910 | 926 |
911 result = Dart_SetEnvironmentCallback(EnvironmentCallback); | 927 result = Dart_SetEnvironmentCallback(EnvironmentCallback); |
912 CHECK_RESULT(result); | 928 CHECK_RESULT(result); |
913 | 929 |
914 if (isolate_run_app_snapshot) { | 930 if (isolate_run_app_snapshot) { |
915 result = DartUtils::SetupIOLibrary(script_uri); | 931 result = DartUtils::SetupIOLibrary(commandline_namespace, script_uri); |
916 CHECK_RESULT(result); | 932 CHECK_RESULT(result); |
917 Loader::InitForSnapshot(script_uri); | 933 Loader::InitForSnapshot(script_uri); |
918 #if !defined(DART_PRECOMPILED_RUNTIME) | 934 #if !defined(DART_PRECOMPILED_RUNTIME) |
919 if (is_main_isolate) { | 935 if (is_main_isolate) { |
920 // Find the canonical uri of the app snapshot. We'll use this to decide if | 936 // Find the canonical uri of the app snapshot. We'll use this to decide if |
921 // other isolates should use the app snapshot or the core snapshot. | 937 // other isolates should use the app snapshot or the core snapshot. |
922 const char* resolved_script_uri = NULL; | 938 const char* resolved_script_uri = NULL; |
923 result = Dart_StringToCString( | 939 result = Dart_StringToCString( |
924 DartUtils::ResolveScript(Dart_NewStringFromCString(script_uri)), | 940 DartUtils::ResolveScript(Dart_NewStringFromCString(script_uri)), |
925 &resolved_script_uri); | 941 &resolved_script_uri); |
(...skipping 15 matching lines...) Expand all Loading... |
941 // relative URIs and perform other related tasks. We need Loader to be | 957 // relative URIs and perform other related tasks. We need Loader to be |
942 // initialized for this to work because loading from Kernel binary | 958 // initialized for this to work because loading from Kernel binary |
943 // bypasses normal source code loading paths that initialize it. | 959 // bypasses normal source code loading paths that initialize it. |
944 Loader::InitForSnapshot(script_uri); | 960 Loader::InitForSnapshot(script_uri); |
945 } | 961 } |
946 | 962 |
947 Dart_TimelineEvent("LoadScript", Dart_TimelineGetMicros(), | 963 Dart_TimelineEvent("LoadScript", Dart_TimelineGetMicros(), |
948 Dart_GetMainPortId(), Dart_Timeline_Event_Async_End, 0, | 964 Dart_GetMainPortId(), Dart_Timeline_Event_Async_End, 0, |
949 NULL, NULL); | 965 NULL, NULL); |
950 | 966 |
951 result = DartUtils::SetupIOLibrary(script_uri); | 967 result = DartUtils::SetupIOLibrary(commandline_namespace, script_uri); |
952 CHECK_RESULT(result); | 968 CHECK_RESULT(result); |
953 } | 969 } |
954 | 970 |
955 // Make the isolate runnable so that it is ready to handle messages. | 971 // Make the isolate runnable so that it is ready to handle messages. |
956 Dart_ExitScope(); | 972 Dart_ExitScope(); |
957 Dart_ExitIsolate(); | 973 Dart_ExitIsolate(); |
958 bool retval = Dart_IsolateMakeRunnable(isolate); | 974 bool retval = Dart_IsolateMakeRunnable(isolate); |
959 if (!retval) { | 975 if (!retval) { |
960 *error = strdup("Invalid isolate state - Unable to make it runnable"); | 976 *error = strdup("Invalid isolate state - Unable to make it runnable"); |
961 Dart_EnterIsolate(isolate); | 977 Dart_EnterIsolate(isolate); |
(...skipping 351 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1313 " (default port number is 8181, default bind address is localhost).\n" | 1329 " (default port number is 8181, default bind address is localhost).\n" |
1314 #if !defined(HOST_OS_MACOS) | 1330 #if !defined(HOST_OS_MACOS) |
1315 "\n" | 1331 "\n" |
1316 "--root-certs-file=<path>\n" | 1332 "--root-certs-file=<path>\n" |
1317 " The path to a file containing the trusted root certificates to use for\n" | 1333 " The path to a file containing the trusted root certificates to use for\n" |
1318 " secure socket connections.\n" | 1334 " secure socket connections.\n" |
1319 "--root-certs-cache=<path>\n" | 1335 "--root-certs-cache=<path>\n" |
1320 " The path to a cache directory containing the trusted root certificates to\n" | 1336 " The path to a cache directory containing the trusted root certificates to\n" |
1321 " use for secure socket connections.\n" | 1337 " use for secure socket connections.\n" |
1322 #endif // !defined(HOST_OS_MACOS) | 1338 #endif // !defined(HOST_OS_MACOS) |
| 1339 #if defined(HOST_OS_LINUX) |
| 1340 "--namespace=<path>\n" |
| 1341 " The path to a directory that dart:io calls will treat as the root of the\n" |
| 1342 " filesystem.\n" |
| 1343 #endif // defined(HOST_OS_LINUX) |
1323 "\n" | 1344 "\n" |
1324 "The following options are only used for VM development and may\n" | 1345 "The following options are only used for VM development and may\n" |
1325 "be changed in any future version:\n"); | 1346 "be changed in any future version:\n"); |
1326 const char* print_flags = "--print_flags"; | 1347 const char* print_flags = "--print_flags"; |
1327 Dart_SetVMFlags(1, &print_flags); | 1348 Dart_SetVMFlags(1, &print_flags); |
1328 } | 1349 } |
1329 } | 1350 } |
1330 // clang-format on | 1351 // clang-format on |
1331 | 1352 |
1332 char* BuildIsolateName(const char* script_name, const char* func_name) { | 1353 char* BuildIsolateName(const char* script_name, const char* func_name) { |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1376 } | 1397 } |
1377 } | 1398 } |
1378 | 1399 |
1379 static bool FileModifiedCallback(const char* url, int64_t since) { | 1400 static bool FileModifiedCallback(const char* url, int64_t since) { |
1380 if (strncmp(url, "file:///", 8) == 0) { | 1401 if (strncmp(url, "file:///", 8) == 0) { |
1381 // If it isn't a file on local disk, we don't know if it has been | 1402 // If it isn't a file on local disk, we don't know if it has been |
1382 // modified. | 1403 // modified. |
1383 return true; | 1404 return true; |
1384 } | 1405 } |
1385 int64_t data[File::kStatSize]; | 1406 int64_t data[File::kStatSize]; |
1386 File::Stat(url + 7, data); | 1407 File::Stat(NULL, url + 7, data); |
1387 if (data[File::kType] == File::kDoesNotExist) { | 1408 if (data[File::kType] == File::kDoesNotExist) { |
1388 return true; | 1409 return true; |
1389 } | 1410 } |
1390 bool modified = data[File::kModifiedTime] > since; | 1411 bool modified = data[File::kModifiedTime] > since; |
1391 return modified; | 1412 return modified; |
1392 } | 1413 } |
1393 | 1414 |
1394 static void EmbedderInformationCallback(Dart_EmbedderInformation* info) { | 1415 static void EmbedderInformationCallback(Dart_EmbedderInformation* info) { |
1395 info->version = DART_EMBEDDER_INFORMATION_CURRENT_VERSION; | 1416 info->version = DART_EMBEDDER_INFORMATION_CURRENT_VERSION; |
1396 info->name = "Dart VM"; | 1417 info->name = "Dart VM"; |
(...skipping 12 matching lines...) Expand all Loading... |
1409 if (Dart_IsError(result)) { \ | 1430 if (Dart_IsError(result)) { \ |
1410 const int exit_code = Dart_IsCompilationError(result) \ | 1431 const int exit_code = Dart_IsCompilationError(result) \ |
1411 ? kCompilationErrorExitCode \ | 1432 ? kCompilationErrorExitCode \ |
1412 : kErrorExitCode; \ | 1433 : kErrorExitCode; \ |
1413 ErrorExit(exit_code, "%s\n", Dart_GetError(result)); \ | 1434 ErrorExit(exit_code, "%s\n", Dart_GetError(result)); \ |
1414 } | 1435 } |
1415 | 1436 |
1416 static void WriteFile(const char* filename, | 1437 static void WriteFile(const char* filename, |
1417 const uint8_t* buffer, | 1438 const uint8_t* buffer, |
1418 const intptr_t size) { | 1439 const intptr_t size) { |
1419 File* file = File::Open(filename, File::kWriteTruncate); | 1440 File* file = File::Open(NULL, filename, File::kWriteTruncate); |
1420 if (file == NULL) { | 1441 if (file == NULL) { |
1421 ErrorExit(kErrorExitCode, "Unable to open file %s\n", filename); | 1442 ErrorExit(kErrorExitCode, "Unable to open file %s\n", filename); |
1422 } | 1443 } |
1423 if (!file->WriteFully(buffer, size)) { | 1444 if (!file->WriteFully(buffer, size)) { |
1424 ErrorExit(kErrorExitCode, "Unable to write file %s\n", filename); | 1445 ErrorExit(kErrorExitCode, "Unable to write file %s\n", filename); |
1425 } | 1446 } |
1426 file->Release(); | 1447 file->Release(); |
1427 } | 1448 } |
1428 | 1449 |
1429 static void ReadFile(const char* filename, uint8_t** buffer, intptr_t* size) { | 1450 static void ReadFile(const char* filename, uint8_t** buffer, intptr_t* size) { |
1430 File* file = File::Open(filename, File::kRead); | 1451 File* file = File::Open(NULL, filename, File::kRead); |
1431 if (file == NULL) { | 1452 if (file == NULL) { |
1432 ErrorExit(kErrorExitCode, "Unable to open file %s\n", filename); | 1453 ErrorExit(kErrorExitCode, "Unable to open file %s\n", filename); |
1433 } | 1454 } |
1434 *size = file->Length(); | 1455 *size = file->Length(); |
1435 *buffer = reinterpret_cast<uint8_t*>(malloc(*size)); | 1456 *buffer = reinterpret_cast<uint8_t*>(malloc(*size)); |
1436 if (!file->ReadFully(*buffer, *size)) { | 1457 if (!file->ReadFully(*buffer, *size)) { |
1437 ErrorExit(kErrorExitCode, "Unable to read file %s\n", filename); | 1458 ErrorExit(kErrorExitCode, "Unable to read file %s\n", filename); |
1438 } | 1459 } |
1439 file->Release(); | 1460 file->Release(); |
1440 } | 1461 } |
(...skipping 19 matching lines...) Expand all Loading... |
1460 {"dart:io", "HandshakeException", "HandshakeException."}, | 1481 {"dart:io", "HandshakeException", "HandshakeException."}, |
1461 {"dart:io", "Link", "Link."}, | 1482 {"dart:io", "Link", "Link."}, |
1462 {"dart:io", "OSError", "OSError."}, | 1483 {"dart:io", "OSError", "OSError."}, |
1463 {"dart:io", "TlsException", "TlsException."}, | 1484 {"dart:io", "TlsException", "TlsException."}, |
1464 {"dart:io", "X509Certificate", "X509Certificate._"}, | 1485 {"dart:io", "X509Certificate", "X509Certificate._"}, |
1465 {"dart:io", "_ExternalBuffer", "get:end"}, | 1486 {"dart:io", "_ExternalBuffer", "get:end"}, |
1466 {"dart:io", "_ExternalBuffer", "get:start"}, | 1487 {"dart:io", "_ExternalBuffer", "get:start"}, |
1467 {"dart:io", "_ExternalBuffer", "set:data"}, | 1488 {"dart:io", "_ExternalBuffer", "set:data"}, |
1468 {"dart:io", "_ExternalBuffer", "set:end"}, | 1489 {"dart:io", "_ExternalBuffer", "set:end"}, |
1469 {"dart:io", "_ExternalBuffer", "set:start"}, | 1490 {"dart:io", "_ExternalBuffer", "set:start"}, |
| 1491 {"dart:io", "_Namespace", "_setupNamespace"}, |
1470 {"dart:io", "_Platform", "set:_nativeScript"}, | 1492 {"dart:io", "_Platform", "set:_nativeScript"}, |
1471 {"dart:io", "_ProcessStartStatus", "set:_errorCode"}, | 1493 {"dart:io", "_ProcessStartStatus", "set:_errorCode"}, |
1472 {"dart:io", "_ProcessStartStatus", "set:_errorMessage"}, | 1494 {"dart:io", "_ProcessStartStatus", "set:_errorMessage"}, |
1473 {"dart:io", "_SecureFilterImpl", "get:ENCRYPTED_SIZE"}, | 1495 {"dart:io", "_SecureFilterImpl", "get:ENCRYPTED_SIZE"}, |
1474 {"dart:io", "_SecureFilterImpl", "get:SIZE"}, | 1496 {"dart:io", "_SecureFilterImpl", "get:SIZE"}, |
1475 {"dart:io", "_SecureFilterImpl", "get:buffers"}, | 1497 {"dart:io", "_SecureFilterImpl", "get:buffers"}, |
1476 {"dart:isolate", "::", "_getIsolateScheduleImmediateClosure"}, | 1498 {"dart:isolate", "::", "_getIsolateScheduleImmediateClosure"}, |
1477 {"dart:isolate", "::", "_setupHooks"}, | 1499 {"dart:isolate", "::", "_setupHooks"}, |
1478 {"dart:isolate", "::", "_startMainIsolate"}, | 1500 {"dart:isolate", "::", "_startMainIsolate"}, |
1479 {"dart:vmservice_io", "::", "main"}, | 1501 {"dart:vmservice_io", "::", "main"}, |
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1579 Dart_ExitScope(); | 1601 Dart_ExitScope(); |
1580 // Shutdown the isolate. | 1602 // Shutdown the isolate. |
1581 Dart_ShutdownIsolate(); | 1603 Dart_ShutdownIsolate(); |
1582 return false; | 1604 return false; |
1583 } | 1605 } |
1584 | 1606 |
1585 if (gen_snapshot_kind == kAppAOT) { | 1607 if (gen_snapshot_kind == kAppAOT) { |
1586 uint8_t* feedback_buffer = NULL; | 1608 uint8_t* feedback_buffer = NULL; |
1587 intptr_t feedback_length = 0; | 1609 intptr_t feedback_length = 0; |
1588 if (load_feedback_filename != NULL) { | 1610 if (load_feedback_filename != NULL) { |
1589 File* file = File::Open(load_feedback_filename, File::kRead); | 1611 File* file = File::Open(NULL, load_feedback_filename, File::kRead); |
1590 if (file == NULL) { | 1612 if (file == NULL) { |
1591 ErrorExit(kErrorExitCode, "Failed to read JIT feedback.\n"); | 1613 ErrorExit(kErrorExitCode, "Failed to read JIT feedback.\n"); |
1592 } | 1614 } |
1593 feedback_length = file->Length(); | 1615 feedback_length = file->Length(); |
1594 feedback_buffer = reinterpret_cast<uint8_t*>(malloc(feedback_length)); | 1616 feedback_buffer = reinterpret_cast<uint8_t*>(malloc(feedback_length)); |
1595 if (!file->ReadFully(feedback_buffer, feedback_length)) { | 1617 if (!file->ReadFully(feedback_buffer, feedback_length)) { |
1596 ErrorExit(kErrorExitCode, "Failed to read JIT feedback.\n"); | 1618 ErrorExit(kErrorExitCode, "Failed to read JIT feedback.\n"); |
1597 } | 1619 } |
1598 file->Release(); | 1620 file->Release(); |
1599 } | 1621 } |
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1688 } | 1710 } |
1689 } | 1711 } |
1690 | 1712 |
1691 if (snapshot_deps_filename != NULL) { | 1713 if (snapshot_deps_filename != NULL) { |
1692 Loader::ResolveDependenciesAsFilePaths(); | 1714 Loader::ResolveDependenciesAsFilePaths(); |
1693 IsolateData* isolate_data = | 1715 IsolateData* isolate_data = |
1694 reinterpret_cast<IsolateData*>(Dart_IsolateData(isolate)); | 1716 reinterpret_cast<IsolateData*>(Dart_IsolateData(isolate)); |
1695 ASSERT(isolate_data != NULL); | 1717 ASSERT(isolate_data != NULL); |
1696 MallocGrowableArray<char*>* dependencies = isolate_data->dependencies(); | 1718 MallocGrowableArray<char*>* dependencies = isolate_data->dependencies(); |
1697 ASSERT(dependencies != NULL); | 1719 ASSERT(dependencies != NULL); |
1698 File* file = File::Open(snapshot_deps_filename, File::kWriteTruncate); | 1720 File* file = File::Open(NULL, snapshot_deps_filename, File::kWriteTruncate); |
1699 if (file == NULL) { | 1721 if (file == NULL) { |
1700 ErrorExit(kErrorExitCode, | 1722 ErrorExit(kErrorExitCode, |
1701 "Error: Unable to open snapshot depfile: %s\n\n", | 1723 "Error: Unable to open snapshot depfile: %s\n\n", |
1702 snapshot_deps_filename); | 1724 snapshot_deps_filename); |
1703 } | 1725 } |
1704 bool success = true; | 1726 bool success = true; |
1705 success &= file->Print("%s: ", snapshot_filename); | 1727 success &= file->Print("%s: ", snapshot_filename); |
1706 for (intptr_t i = 0; i < dependencies->length(); i++) { | 1728 for (intptr_t i = 0; i < dependencies->length(); i++) { |
1707 char* dep = dependencies->At(i); | 1729 char* dep = dependencies->At(i); |
1708 success &= file->Print("%s ", dep); | 1730 success &= file->Print("%s ", dep); |
(...skipping 213 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1922 Platform::Exit(Process::GlobalExitCode()); | 1944 Platform::Exit(Process::GlobalExitCode()); |
1923 } | 1945 } |
1924 | 1946 |
1925 } // namespace bin | 1947 } // namespace bin |
1926 } // namespace dart | 1948 } // namespace dart |
1927 | 1949 |
1928 int main(int argc, char** argv) { | 1950 int main(int argc, char** argv) { |
1929 dart::bin::main(argc, argv); | 1951 dart::bin::main(argc, argv); |
1930 UNREACHABLE(); | 1952 UNREACHABLE(); |
1931 } | 1953 } |
OLD | NEW |