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

Side by Side Diff: src/d8-debug.cc

Issue 12716010: Added a version of the v8::HandleScope constructor with an Isolate and use that consistently. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Feedback. Rebased Created 7 years, 9 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 | « src/d8-debug.h ('k') | src/d8-posix.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 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
47 47
48 void PrintPrompt() { 48 void PrintPrompt() {
49 PrintPrompt(was_running); 49 PrintPrompt(was_running);
50 } 50 }
51 51
52 52
53 void HandleDebugEvent(DebugEvent event, 53 void HandleDebugEvent(DebugEvent event,
54 Handle<Object> exec_state, 54 Handle<Object> exec_state,
55 Handle<Object> event_data, 55 Handle<Object> event_data,
56 Handle<Value> data) { 56 Handle<Value> data) {
57 HandleScope scope; 57 // TODO(svenpanne) There should be a way to retrieve this in the callback.
58 Isolate* isolate = Isolate::GetCurrent();
59 HandleScope scope(isolate);
58 60
59 // Check for handled event. 61 // Check for handled event.
60 if (event != Break && event != Exception && event != AfterCompile) { 62 if (event != Break && event != Exception && event != AfterCompile) {
61 return; 63 return;
62 } 64 }
63 65
64 TryCatch try_catch; 66 TryCatch try_catch;
65 67
66 // Get the toJSONProtocol function on the event and get the JSON format. 68 // Get the toJSONProtocol function on the event and get the JSON format.
67 Local<String> to_json_fun_name = String::New("toJSONProtocol"); 69 Local<String> to_json_fun_name = String::New("toJSONProtocol");
68 Local<Function> to_json_fun = 70 Local<Function> to_json_fun =
69 Function::Cast(*event_data->Get(to_json_fun_name)); 71 Function::Cast(*event_data->Get(to_json_fun_name));
70 Local<Value> event_json = to_json_fun->Call(event_data, 0, NULL); 72 Local<Value> event_json = to_json_fun->Call(event_data, 0, NULL);
71 if (try_catch.HasCaught()) { 73 if (try_catch.HasCaught()) {
72 Shell::ReportException(&try_catch); 74 Shell::ReportException(isolate, &try_catch);
73 return; 75 return;
74 } 76 }
75 77
76 // Print the event details. 78 // Print the event details.
77 Handle<Object> details = 79 Handle<Object> details =
78 Shell::DebugMessageDetails(Handle<String>::Cast(event_json)); 80 Shell::DebugMessageDetails(Handle<String>::Cast(event_json));
79 if (try_catch.HasCaught()) { 81 if (try_catch.HasCaught()) {
80 Shell::ReportException(&try_catch); 82 Shell::ReportException(isolate, &try_catch);
81 return; 83 return;
82 } 84 }
83 String::Utf8Value str(details->Get(String::New("text"))); 85 String::Utf8Value str(details->Get(String::New("text")));
84 if (str.length() == 0) { 86 if (str.length() == 0) {
85 // Empty string is used to signal not to process this event. 87 // Empty string is used to signal not to process this event.
86 return; 88 return;
87 } 89 }
88 printf("%s\n", *str); 90 printf("%s\n", *str);
89 91
90 // Get the debug command processor. 92 // Get the debug command processor.
91 Local<String> fun_name = String::New("debugCommandProcessor"); 93 Local<String> fun_name = String::New("debugCommandProcessor");
92 Local<Function> fun = Function::Cast(*exec_state->Get(fun_name)); 94 Local<Function> fun = Function::Cast(*exec_state->Get(fun_name));
93 Local<Object> cmd_processor = 95 Local<Object> cmd_processor =
94 Object::Cast(*fun->Call(exec_state, 0, NULL)); 96 Object::Cast(*fun->Call(exec_state, 0, NULL));
95 if (try_catch.HasCaught()) { 97 if (try_catch.HasCaught()) {
96 Shell::ReportException(&try_catch); 98 Shell::ReportException(isolate, &try_catch);
97 return; 99 return;
98 } 100 }
99 101
100 static const int kBufferSize = 256; 102 static const int kBufferSize = 256;
101 bool running = false; 103 bool running = false;
102 while (!running) { 104 while (!running) {
103 char command[kBufferSize]; 105 char command[kBufferSize];
104 PrintPrompt(running); 106 PrintPrompt(running);
105 char* str = fgets(command, kBufferSize, stdin); 107 char* str = fgets(command, kBufferSize, stdin);
106 if (str == NULL) break; 108 if (str == NULL) break;
107 109
108 // Ignore empty commands. 110 // Ignore empty commands.
109 if (strlen(command) == 0) continue; 111 if (strlen(command) == 0) continue;
110 112
111 TryCatch try_catch; 113 TryCatch try_catch;
112 114
113 // Convert the debugger command to a JSON debugger request. 115 // Convert the debugger command to a JSON debugger request.
114 Handle<Value> request = 116 Handle<Value> request =
115 Shell::DebugCommandToJSONRequest(String::New(command)); 117 Shell::DebugCommandToJSONRequest(String::New(command));
116 if (try_catch.HasCaught()) { 118 if (try_catch.HasCaught()) {
117 Shell::ReportException(&try_catch); 119 Shell::ReportException(isolate, &try_catch);
118 continue; 120 continue;
119 } 121 }
120 122
121 // If undefined is returned the command was handled internally and there is 123 // If undefined is returned the command was handled internally and there is
122 // no JSON to send. 124 // no JSON to send.
123 if (request->IsUndefined()) { 125 if (request->IsUndefined()) {
124 continue; 126 continue;
125 } 127 }
126 128
127 Handle<String> fun_name; 129 Handle<String> fun_name;
128 Handle<Function> fun; 130 Handle<Function> fun;
129 // All the functions used below take one argument. 131 // All the functions used below take one argument.
130 static const int kArgc = 1; 132 static const int kArgc = 1;
131 Handle<Value> args[kArgc]; 133 Handle<Value> args[kArgc];
132 134
133 // Invoke the JavaScript to convert the debug command line to a JSON 135 // Invoke the JavaScript to convert the debug command line to a JSON
134 // request, invoke the JSON request and convert the JSON respose to a text 136 // request, invoke the JSON request and convert the JSON respose to a text
135 // representation. 137 // representation.
136 fun_name = String::New("processDebugRequest"); 138 fun_name = String::New("processDebugRequest");
137 fun = Handle<Function>::Cast(cmd_processor->Get(fun_name)); 139 fun = Handle<Function>::Cast(cmd_processor->Get(fun_name));
138 args[0] = request; 140 args[0] = request;
139 Handle<Value> response_val = fun->Call(cmd_processor, kArgc, args); 141 Handle<Value> response_val = fun->Call(cmd_processor, kArgc, args);
140 if (try_catch.HasCaught()) { 142 if (try_catch.HasCaught()) {
141 Shell::ReportException(&try_catch); 143 Shell::ReportException(isolate, &try_catch);
142 continue; 144 continue;
143 } 145 }
144 Handle<String> response = Handle<String>::Cast(response_val); 146 Handle<String> response = Handle<String>::Cast(response_val);
145 147
146 // Convert the debugger response into text details and the running state. 148 // Convert the debugger response into text details and the running state.
147 Handle<Object> response_details = Shell::DebugMessageDetails(response); 149 Handle<Object> response_details = Shell::DebugMessageDetails(response);
148 if (try_catch.HasCaught()) { 150 if (try_catch.HasCaught()) {
149 Shell::ReportException(&try_catch); 151 Shell::ReportException(isolate, &try_catch);
150 continue; 152 continue;
151 } 153 }
152 String::Utf8Value text_str(response_details->Get(String::New("text"))); 154 String::Utf8Value text_str(response_details->Get(String::New("text")));
153 if (text_str.length() > 0) { 155 if (text_str.length() > 0) {
154 printf("%s\n", *text_str); 156 printf("%s\n", *text_str);
155 } 157 }
156 running = 158 running =
157 response_details->Get(String::New("running"))->ToBoolean()->Value(); 159 response_details->Get(String::New("running"))->ToBoolean()->Value();
158 } 160 }
159 } 161 }
160 162
161 163
162 void RunRemoteDebugger(int port) { 164 void RunRemoteDebugger(Isolate* isolate, int port) {
163 RemoteDebugger debugger(port); 165 RemoteDebugger debugger(isolate, port);
164 debugger.Run(); 166 debugger.Run();
165 } 167 }
166 168
167 169
168 void RemoteDebugger::Run() { 170 void RemoteDebugger::Run() {
169 bool ok; 171 bool ok;
170 172
171 // Make sure that socket support is initialized. 173 // Make sure that socket support is initialized.
172 ok = i::Socket::SetUp(); 174 ok = i::Socket::SetUp();
173 if (!ok) { 175 if (!ok) {
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
266 head_ = head_->next(); 268 head_ = head_->next();
267 if (head_ == NULL) { 269 if (head_ == NULL) {
268 ASSERT(tail_ == result); 270 ASSERT(tail_ == result);
269 tail_ = NULL; 271 tail_ = NULL;
270 } 272 }
271 return result; 273 return result;
272 } 274 }
273 275
274 276
275 void RemoteDebugger::HandleMessageReceived(char* message) { 277 void RemoteDebugger::HandleMessageReceived(char* message) {
276 Locker lock(v8::Isolate::GetCurrent()); 278 Locker lock(isolate_);
277 HandleScope scope; 279 HandleScope scope(isolate_);
278 280
279 // Print the event details. 281 // Print the event details.
280 TryCatch try_catch; 282 TryCatch try_catch;
281 Handle<Object> details = 283 Handle<Object> details =
282 Shell::DebugMessageDetails(Handle<String>::Cast(String::New(message))); 284 Shell::DebugMessageDetails(Handle<String>::Cast(String::New(message)));
283 if (try_catch.HasCaught()) { 285 if (try_catch.HasCaught()) {
284 Shell::ReportException(&try_catch); 286 Shell::ReportException(isolate_, &try_catch);
285 PrintPrompt(); 287 PrintPrompt();
286 return; 288 return;
287 } 289 }
288 String::Utf8Value str(details->Get(String::New("text"))); 290 String::Utf8Value str(details->Get(String::New("text")));
289 if (str.length() == 0) { 291 if (str.length() == 0) {
290 // Empty string is used to signal not to process this event. 292 // Empty string is used to signal not to process this event.
291 return; 293 return;
292 } 294 }
293 if (*str != NULL) { 295 if (*str != NULL) {
294 printf("%s\n", *str); 296 printf("%s\n", *str);
295 } else { 297 } else {
296 printf("???\n"); 298 printf("???\n");
297 } 299 }
298 300
299 bool is_running = details->Get(String::New("running"))->ToBoolean()->Value(); 301 bool is_running = details->Get(String::New("running"))->ToBoolean()->Value();
300 PrintPrompt(is_running); 302 PrintPrompt(is_running);
301 } 303 }
302 304
303 305
304 void RemoteDebugger::HandleKeyboardCommand(char* command) { 306 void RemoteDebugger::HandleKeyboardCommand(char* command) {
305 Locker lock(v8::Isolate::GetCurrent()); 307 Locker lock(isolate_);
306 HandleScope scope; 308 HandleScope scope(isolate_);
307 309
308 // Convert the debugger command to a JSON debugger request. 310 // Convert the debugger command to a JSON debugger request.
309 TryCatch try_catch; 311 TryCatch try_catch;
310 Handle<Value> request = 312 Handle<Value> request =
311 Shell::DebugCommandToJSONRequest(String::New(command)); 313 Shell::DebugCommandToJSONRequest(String::New(command));
312 if (try_catch.HasCaught()) { 314 if (try_catch.HasCaught()) {
313 Shell::ReportException(&try_catch); 315 Shell::ReportException(isolate_, &try_catch);
314 PrintPrompt(); 316 PrintPrompt();
315 return; 317 return;
316 } 318 }
317 319
318 // If undefined is returned the command was handled internally and there is 320 // If undefined is returned the command was handled internally and there is
319 // no JSON to send. 321 // no JSON to send.
320 if (request->IsUndefined()) { 322 if (request->IsUndefined()) {
321 PrintPrompt(); 323 PrintPrompt();
322 return; 324 return;
323 } 325 }
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
361 // Pass the keyboard command to the main thread. 363 // Pass the keyboard command to the main thread.
362 remote_debugger_->KeyboardCommand( 364 remote_debugger_->KeyboardCommand(
363 i::SmartArrayPointer<char>(i::StrDup(command))); 365 i::SmartArrayPointer<char>(i::StrDup(command)));
364 } 366 }
365 } 367 }
366 368
367 369
368 } // namespace v8 370 } // namespace v8
369 371
370 #endif // ENABLE_DEBUGGER_SUPPORT 372 #endif // ENABLE_DEBUGGER_SUPPORT
OLDNEW
« no previous file with comments | « src/d8-debug.h ('k') | src/d8-posix.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698