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

Side by Side Diff: dart/runtime/bin/main.cc

Issue 59073003: Version 0.8.10.4 (Closed) Base URL: http://dart.googlecode.com/svn/trunk/
Patch Set: Created 7 years, 1 month 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 | Annotate | Revision Log
« no previous file with comments | « dart/runtime/bin/builtin.dart ('k') | dart/runtime/bin/socket_patch.dart » ('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) 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_debugger_api.h" 10 #include "include/dart_debugger_api.h"
(...skipping 879 matching lines...) Expand 10 before | Expand all | Expand 10 after
890 } 890 }
891 891
892 // Write the magic number to indicate file is a script snapshot. 892 // Write the magic number to indicate file is a script snapshot.
893 DartUtils::WriteMagicNumber(snapshot_file); 893 DartUtils::WriteMagicNumber(snapshot_file);
894 894
895 // Now write the snapshot out to specified file. 895 // Now write the snapshot out to specified file.
896 bool bytes_written = snapshot_file->WriteFully(buffer, size); 896 bool bytes_written = snapshot_file->WriteFully(buffer, size);
897 ASSERT(bytes_written); 897 ASSERT(bytes_written);
898 delete snapshot_file; 898 delete snapshot_file;
899 } else { 899 } else {
900 // Lookup the library of the root script.
901 Dart_Handle root_lib = Dart_RootLibrary();
902 // Import the root library into the builtin library so that we can easily
903 // lookup the main entry point exported from the root library.
904 Dart_Handle builtin_lib =
905 Builtin::LoadAndCheckLibrary(Builtin::kBuiltinLibrary);
906 result = Dart_LibraryImportLibrary(builtin_lib, root_lib, Dart_Null());
907
900 if (has_compile_all) { 908 if (has_compile_all) {
901 result = Dart_CompileAll(); 909 result = Dart_CompileAll();
902 if (Dart_IsError(result)) { 910 if (Dart_IsError(result)) {
903 return DartErrorExit(result); 911 return DartErrorExit(result);
904 } 912 }
905 } 913 }
906 914
907 if (has_check_function_fingerprints) { 915 if (has_check_function_fingerprints) {
908 result = Dart_CheckFunctionFingerprints(); 916 result = Dart_CheckFunctionFingerprints();
909 if (Dart_IsError(result)) { 917 if (Dart_IsError(result)) {
910 return DartErrorExit(result); 918 return DartErrorExit(result);
911 } 919 }
912 } 920 }
913 921
914 // Lookup the library of the root script. 922 if (Dart_IsNull(root_lib)) {
915 Dart_Handle library = Dart_RootLibrary();
916 if (Dart_IsNull(library)) {
917 return ErrorExit(kErrorExitCode, 923 return ErrorExit(kErrorExitCode,
918 "Unable to find root library for '%s'\n", 924 "Unable to find root library for '%s'\n",
919 script_name); 925 script_name);
920 } 926 }
921 // Set debug breakpoint if specified on the command line.
922 if (breakpoint_at != NULL) {
923 result = SetBreakpoint(breakpoint_at, library);
924 if (Dart_IsError(result)) {
925 return ErrorExit(kErrorExitCode,
926 "Error setting breakpoint at '%s': %s\n",
927 breakpoint_at,
928 Dart_GetError(result));
929 }
930 }
931 if (has_print_script) { 927 if (has_print_script) {
932 result = GenerateScriptSource(); 928 result = GenerateScriptSource();
933 if (Dart_IsError(result)) { 929 if (Dart_IsError(result)) {
934 return DartErrorExit(result); 930 return DartErrorExit(result);
935 } 931 }
936 } else { 932 } else {
937 // Lookup and invoke the top level main function. 933 // The helper function _getMainClosure creates a closure for the main
938 // The top-level function may accept up to two arguments: 934 // entry point which is either explicitly or implictly exported from the
939 // main(List<String> args, var message). 935 // root library.
940 // However most commonly it either accepts one (the args list) or 936 Dart_Handle main_closure = Dart_Invoke(
941 // none. 937 builtin_lib, Dart_NewStringFromCString("_getMainClosure"), 0, NULL);
942 // If the message is optional, main(args, [message]), it is invoked with 938 if (Dart_IsError(main_closure)) {
943 // one argument only. 939 return DartErrorExit(result);
944 Dart_Handle main_args[2]; 940 }
945 main_args[0] = CreateRuntimeOptions(&dart_options); 941
946 main_args[1] = Dart_Null(); 942 // Set debug breakpoint if specified on the command line before calling
947 // First try with 1 argument. 943 // the main function.
948 result = Dart_Invoke(library, DartUtils::NewString("main"), 1, main_args); 944 if (breakpoint_at != NULL) {
949 // TODO(iposva): Return a special error type for mismatched argument 945 result = SetBreakpoint(breakpoint_at, root_lib);
950 // counts from Dart_Invoke to avoid the string comparison. 946 if (Dart_IsError(result)) {
951 const char* expected_error = "Dart_Invoke: wrong argument count for " 947 return ErrorExit(kErrorExitCode,
952 "function 'main': "; 948 "Error setting breakpoint at '%s': %s\n",
953 intptr_t length = strlen(expected_error); 949 breakpoint_at,
954 if (Dart_IsError(result) && 950 Dart_GetError(result));
955 strncmp(expected_error, Dart_GetError(result), length) == 0) {
956 // Try with two arguments.
957 result =
958 Dart_Invoke(library, DartUtils::NewString("main"), 2, main_args);
959 if (Dart_IsError(result) &&
960 strncmp(expected_error, Dart_GetError(result), length) == 0) {
961 // Finally try with 0 arguments.
962 result = Dart_Invoke(library, DartUtils::NewString("main"), 0, NULL);
963 } 951 }
964 } 952 }
953
954 // Call _startIsolate in the isolate library to enable dispatching the
955 // initial startup message.
956 Dart_Handle isolate_args[2];
957 isolate_args[0] = main_closure;
958 isolate_args[1] = Dart_True();
959
960 Dart_Handle isolate_lib = Dart_LookupLibrary(
961 Dart_NewStringFromCString("dart:isolate"));
962 result = Dart_Invoke(isolate_lib,
963 Dart_NewStringFromCString("_startIsolate"),
964 2, isolate_args);
965
966 // Setup the arguments in the initial startup message and leave the
967 // replyTo and message fields empty.
968 Dart_Handle initial_startup_msg = Dart_NewList(3);
969 result = Dart_ListSetAt(initial_startup_msg, 1,
970 CreateRuntimeOptions(&dart_options));
965 if (Dart_IsError(result)) { 971 if (Dart_IsError(result)) {
966 return DartErrorExit(result); 972 return DartErrorExit(result);
967 } 973 }
974 Dart_Port main_port = Dart_GetMainPortId();
975 bool posted = Dart_Post(main_port, initial_startup_msg);
976 if (!posted) {
977 return ErrorExit(kErrorExitCode,
978 "Failed posting startup message to main "
979 "isolate control port.");
980 }
968 981
969 // Keep handling messages until the last active receive port is closed. 982 // Keep handling messages until the last active receive port is closed.
970 result = Dart_RunLoop(); 983 result = Dart_RunLoop();
971 if (Dart_IsError(result)) { 984 if (Dart_IsError(result)) {
972 return DartErrorExit(result); 985 return DartErrorExit(result);
973 } 986 }
974 } 987 }
975 } 988 }
976 989
977 Dart_ExitScope(); 990 Dart_ExitScope();
(...skipping 22 matching lines...) Expand all
1000 1013
1001 return Process::GlobalExitCode(); 1014 return Process::GlobalExitCode();
1002 } 1015 }
1003 1016
1004 } // namespace bin 1017 } // namespace bin
1005 } // namespace dart 1018 } // namespace dart
1006 1019
1007 int main(int argc, char** argv) { 1020 int main(int argc, char** argv) {
1008 return dart::bin::main(argc, argv); 1021 return dart::bin::main(argc, argv);
1009 } 1022 }
OLDNEW
« no previous file with comments | « dart/runtime/bin/builtin.dart ('k') | dart/runtime/bin/socket_patch.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698