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

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

Issue 11442024: Unify specification of file open, close, and write callbacks. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 8 years 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 | « runtime/bin/gen_snapshot.cc ('k') | runtime/bin/run_vm_tests.cc » ('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 23 matching lines...) Expand all
34 34
35 // Global state that indicates whether pprof symbol information is 35 // Global state that indicates whether pprof symbol information is
36 // to be generated or not. 36 // to be generated or not.
37 static const char* generate_pprof_symbols_filename = NULL; 37 static const char* generate_pprof_symbols_filename = NULL;
38 38
39 39
40 // Global state that stores a pointer to the application script snapshot. 40 // Global state that stores a pointer to the application script snapshot.
41 static bool use_script_snapshot = false; 41 static bool use_script_snapshot = false;
42 static File* snapshot_file = NULL; 42 static File* snapshot_file = NULL;
43 43
44
44 // Global state that indicates whether there is a debug breakpoint. 45 // Global state that indicates whether there is a debug breakpoint.
45 // This pointer points into an argv buffer and does not need to be 46 // This pointer points into an argv buffer and does not need to be
46 // free'd. 47 // free'd.
47 static const char* breakpoint_at = NULL; 48 static const char* breakpoint_at = NULL;
48 49
49 50
50 // Global state that indicates whether we should open a connection 51 // Global state that indicates whether we should open a connection
51 // and listen for a debugger to connect. 52 // and listen for a debugger to connect.
52 static bool start_debugger = false; 53 static bool start_debugger = false;
53 static const int DEFAULT_DEBUG_PORT = 5858; 54 static const int DEFAULT_DEBUG_PORT = 5858;
(...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after
220 if (strncmp(option, name, length) == 0) { 221 if (strncmp(option, name, length) == 0) {
221 return main_options[i].process(option + length); 222 return main_options[i].process(option + length);
222 } 223 }
223 i += 1; 224 i += 1;
224 name = main_options[i].option_name; 225 name = main_options[i].option_name;
225 } 226 }
226 return false; 227 return false;
227 } 228 }
228 229
229 230
230 static void WriteToPerfEventsFile(const char* buffer, int64_t num_bytes) { 231 static void* OpenFile(const char* name) {
231 ASSERT(perf_events_symbols_file != NULL); 232 File* file = File::Open(name, File::kWriteTruncate);
232 perf_events_symbols_file->WriteFully(buffer, num_bytes); 233 ASSERT(file != NULL);
234 return reinterpret_cast<void*>(file);
233 } 235 }
234 236
237
238 static void WriteFile(const void* buffer, intptr_t num_bytes, void* stream) {
239 ASSERT(stream != NULL);
240 File* file_stream = reinterpret_cast<File*>(stream);
241 bool bytes_written = file_stream->WriteFully(buffer, num_bytes);
242 ASSERT(bytes_written);
243 }
244
245
246 static void CloseFile(void* stream) {
247 delete reinterpret_cast<File*>(stream);
248 }
249
250
235 // Convert all the arguments to UTF8. On Windows, the arguments are 251 // Convert all the arguments to UTF8. On Windows, the arguments are
236 // encoded in the current code page and not UTF8. 252 // encoded in the current code page and not UTF8.
237 // 253 //
238 // Returns true if the arguments are converted. In that case 254 // Returns true if the arguments are converted. In that case
239 // each of the arguments need to be deallocated using free. 255 // each of the arguments need to be deallocated using free.
240 static bool Utf8ConvertArgv(int argc, char** argv) { 256 static bool Utf8ConvertArgv(int argc, char** argv) {
241 bool result = false; 257 bool result = false;
242 for (int i = 0; i < argc; i++) { 258 for (int i = 0; i < argc; i++) {
243 char* arg = argv[i]; 259 char* arg = argv[i];
244 argv[i] = StringUtils::SystemStringToUtf8(arg); 260 argv[i] = StringUtils::SystemStringToUtf8(arg);
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
284 if ((strncmp(argv[i], kPrintFlags1, strlen(kPrintFlags1)) == 0) || 300 if ((strncmp(argv[i], kPrintFlags1, strlen(kPrintFlags1)) == 0) ||
285 (strncmp(argv[i], kPrintFlags2, strlen(kPrintFlags2)) == 0)) { 301 (strncmp(argv[i], kPrintFlags2, strlen(kPrintFlags2)) == 0)) {
286 *print_flags_seen = true; 302 *print_flags_seen = true;
287 } 303 }
288 vm_options->AddArgument(argv[i]); 304 vm_options->AddArgument(argv[i]);
289 i++; 305 i++;
290 } 306 }
291 } 307 }
292 308
293 if (perf_events_symbols_file != NULL) { 309 if (perf_events_symbols_file != NULL) {
294 Dart_InitPerfEventsSupport(&WriteToPerfEventsFile); 310 Dart_InitPerfEventsSupport(perf_events_symbols_file);
295 } 311 }
296 312
297 if (generate_pprof_symbols_filename != NULL) { 313 if (generate_pprof_symbols_filename != NULL) {
298 Dart_InitPprofSupport(); 314 Dart_InitPprofSupport();
299 } 315 }
300 316
301 // Get the script name. 317 // Get the script name.
302 if (i < argc) { 318 if (i < argc) {
303 *script_name = argv[i]; 319 *script_name = argv[i];
304 i++; 320 i++;
(...skipping 378 matching lines...) Expand 10 before | Expand all | Expand 10 after
683 return 0; 699 return 0;
684 } else { 700 } else {
685 PrintUsage(); 701 PrintUsage();
686 return kErrorExitCode; 702 return kErrorExitCode;
687 } 703 }
688 } 704 }
689 705
690 Dart_SetVMFlags(vm_options.count(), vm_options.arguments()); 706 Dart_SetVMFlags(vm_options.count(), vm_options.arguments());
691 707
692 // Initialize the Dart VM. 708 // Initialize the Dart VM.
693 if (!Dart_Initialize(CreateIsolateAndSetup, 709 if (!Dart_Initialize(CreateIsolateAndSetup, NULL, NULL, ShutdownIsolate,
694 NULL, 710 OpenFile, WriteFile, CloseFile)) {
695 NULL,
696 ShutdownIsolate)) {
697 fprintf(stderr, "%s", "VM initialization failed\n"); 711 fprintf(stderr, "%s", "VM initialization failed\n");
698 fflush(stderr); 712 fflush(stderr);
699 return kErrorExitCode; 713 return kErrorExitCode;
700 } 714 }
701 715
702 DartUtils::SetOriginalWorkingDirectory(); 716 DartUtils::SetOriginalWorkingDirectory();
703 717
704 // Start the debugger wire protocol handler if necessary. 718 // Start the debugger wire protocol handler if necessary.
705 if (start_debugger) { 719 if (start_debugger) {
706 ASSERT(debug_port != 0); 720 ASSERT(debug_port != 0);
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
775 Dart_ShutdownIsolate(); 789 Dart_ShutdownIsolate();
776 // Terminate process exit-code handler. 790 // Terminate process exit-code handler.
777 Process::TerminateExitCodeHandler(); 791 Process::TerminateExitCodeHandler();
778 // Free copied argument strings if converted. 792 // Free copied argument strings if converted.
779 if (argv_converted) { 793 if (argv_converted) {
780 for (int i = 0; i < argc; i++) free(argv[i]); 794 for (int i = 0; i < argc; i++) free(argv[i]);
781 } 795 }
782 796
783 return 0; 797 return 0;
784 } 798 }
OLDNEW
« no previous file with comments | « runtime/bin/gen_snapshot.cc ('k') | runtime/bin/run_vm_tests.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698