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

Side by Side Diff: samples/lineprocessor.cc

Issue 286903004: Remove usage of Locker/Unlocker where possible. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 6 years, 7 months 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 | « no previous file | src/d8.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 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
62 * and print converted lines to output itself. This a sample script: 62 * and print converted lines to output itself. This a sample script:
63 63
64 while (true) { 64 while (true) {
65 var line = read_line(); 65 var line = read_line();
66 if (!line) { 66 if (!line) {
67 break; 67 break;
68 } 68 }
69 var res = line + " | " + line; 69 var res = line + " | " + line;
70 print(res); 70 print(res);
71 } 71 }
72
73 *
74 * When run with "-p" argument, the program starts V8 Debugger Agent and
75 * allows remote debugger to attach and debug JavaScript code.
76 *
77 * Interesting aspects:
78 * 1. Wait for remote debugger to attach
79 * Normally the program compiles custom script and immediately runs it.
80 * If programmer needs to debug script from the very beginning, he should
81 * run this sample program with "--wait-for-connection" command line parameter.
82 * This way V8 will suspend on the first statement and wait for
83 * debugger to attach.
84 *
85 * 2. Unresponsive V8
86 * V8 Debugger Agent holds a connection with remote debugger, but it does
87 * respond only when V8 is running some script. In particular, when this program
88 * is waiting for input, all requests from debugger get deferred until V8
89 * is called again. See how "--callback" command-line parameter in this sample
90 * fixes this issue.
91 */ 72 */
92 73
93 enum MainCycleType { 74 enum MainCycleType {
94 CycleInCpp, 75 CycleInCpp,
95 CycleInJs 76 CycleInJs
96 }; 77 };
97 78
98 const char* ToCString(const v8::String::Utf8Value& value); 79 const char* ToCString(const v8::String::Utf8Value& value);
99 void ReportException(v8::Isolate* isolate, v8::TryCatch* handler); 80 void ReportException(v8::Isolate* isolate, v8::TryCatch* handler);
100 v8::Handle<v8::String> ReadFile(v8::Isolate* isolate, const char* name); 81 v8::Handle<v8::String> ReadFile(v8::Isolate* isolate, const char* name);
101 v8::Handle<v8::String> ReadLine(); 82 v8::Handle<v8::String> ReadLine();
102 83
103 void Print(const v8::FunctionCallbackInfo<v8::Value>& args); 84 void Print(const v8::FunctionCallbackInfo<v8::Value>& args);
104 void ReadLine(const v8::FunctionCallbackInfo<v8::Value>& args); 85 void ReadLine(const v8::FunctionCallbackInfo<v8::Value>& args);
105 bool RunCppCycle(v8::Handle<v8::Script> script, 86 bool RunCppCycle(v8::Handle<v8::Script> script,
106 v8::Local<v8::Context> context, 87 v8::Local<v8::Context> context,
107 bool report_exceptions); 88 bool report_exceptions);
108 89
109 90
110 v8::Persistent<v8::Context> debug_message_context; 91 v8::Persistent<v8::Context> debug_message_context;
111 92
112 int RunMain(int argc, char* argv[]) { 93 int RunMain(int argc, char* argv[]) {
113 v8::V8::SetFlagsFromCommandLine(&argc, argv, true); 94 v8::V8::SetFlagsFromCommandLine(&argc, argv, true);
114 v8::Isolate* isolate = v8::Isolate::New(); 95 v8::Isolate* isolate = v8::Isolate::New();
115 v8::Isolate::Scope isolate_scope(isolate); 96 v8::Isolate::Scope isolate_scope(isolate);
116 v8::Locker locker(isolate);
117 v8::HandleScope handle_scope(isolate); 97 v8::HandleScope handle_scope(isolate);
118 98
119 v8::Handle<v8::String> script_source; 99 v8::Handle<v8::String> script_source;
120 v8::Handle<v8::Value> script_name; 100 v8::Handle<v8::Value> script_name;
121 int script_param_counter = 0; 101 int script_param_counter = 0;
122 102
123 MainCycleType cycle_type = CycleInCpp; 103 MainCycleType cycle_type = CycleInCpp;
124 104
125 for (int i = 1; i < argc; i++) { 105 for (int i = 1; i < argc; i++) {
126 const char* str = argv[i]; 106 const char* str = argv[i];
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
217 // All is already done. 197 // All is already done.
218 } 198 }
219 return 0; 199 return 0;
220 } 200 }
221 201
222 202
223 bool RunCppCycle(v8::Handle<v8::Script> script, 203 bool RunCppCycle(v8::Handle<v8::Script> script,
224 v8::Local<v8::Context> context, 204 v8::Local<v8::Context> context,
225 bool report_exceptions) { 205 bool report_exceptions) {
226 v8::Isolate* isolate = context->GetIsolate(); 206 v8::Isolate* isolate = context->GetIsolate();
227 v8::Locker lock(isolate);
228 207
229 v8::Handle<v8::String> fun_name = 208 v8::Handle<v8::String> fun_name =
230 v8::String::NewFromUtf8(isolate, "ProcessLine"); 209 v8::String::NewFromUtf8(isolate, "ProcessLine");
231 v8::Handle<v8::Value> process_val = context->Global()->Get(fun_name); 210 v8::Handle<v8::Value> process_val = context->Global()->Get(fun_name);
232 211
233 // If there is no Process function, or if it is not a function, 212 // If there is no Process function, or if it is not a function,
234 // bail out 213 // bail out
235 if (!process_val->IsFunction()) { 214 if (!process_val->IsFunction()) {
236 printf("Error: Script does not declare 'ProcessLine' global function.\n"); 215 printf("Error: Script does not declare 'ProcessLine' global function.\n");
237 return 1; 216 return 1;
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after
375 args.GetReturnValue().Set(ReadLine()); 354 args.GetReturnValue().Set(ReadLine());
376 } 355 }
377 356
378 357
379 v8::Handle<v8::String> ReadLine() { 358 v8::Handle<v8::String> ReadLine() {
380 const int kBufferSize = 1024 + 1; 359 const int kBufferSize = 1024 + 1;
381 char buffer[kBufferSize]; 360 char buffer[kBufferSize];
382 361
383 char* res; 362 char* res;
384 { 363 {
385 v8::Unlocker unlocker(v8::Isolate::GetCurrent());
386 res = fgets(buffer, kBufferSize, stdin); 364 res = fgets(buffer, kBufferSize, stdin);
387 } 365 }
388 v8::Isolate* isolate = v8::Isolate::GetCurrent(); 366 v8::Isolate* isolate = v8::Isolate::GetCurrent();
389 if (res == NULL) { 367 if (res == NULL) {
390 v8::Handle<v8::Primitive> t = v8::Undefined(isolate); 368 v8::Handle<v8::Primitive> t = v8::Undefined(isolate);
391 return v8::Handle<v8::String>::Cast(t); 369 return v8::Handle<v8::String>::Cast(t);
392 } 370 }
393 // Remove newline char 371 // Remove newline char
394 for (char* pos = buffer; *pos != '\0'; pos++) { 372 for (char* pos = buffer; *pos != '\0'; pos++) {
395 if (*pos == '\n') { 373 if (*pos == '\n') {
396 *pos = '\0'; 374 *pos = '\0';
397 break; 375 break;
398 } 376 }
399 } 377 }
400 return v8::String::NewFromUtf8(isolate, buffer); 378 return v8::String::NewFromUtf8(isolate, buffer);
401 } 379 }
OLDNEW
« no previous file with comments | « no previous file | src/d8.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698