OLD | NEW |
1 // Copyright 2007-2008 the V8 project authors. All rights reserved. | 1 // Copyright 2007-2008 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 3282 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3293 public: | 3293 public: |
3294 void Run(); | 3294 void Run(); |
3295 }; | 3295 }; |
3296 | 3296 |
3297 class DebuggerThread : public v8::internal::Thread { | 3297 class DebuggerThread : public v8::internal::Thread { |
3298 public: | 3298 public: |
3299 void Run(); | 3299 void Run(); |
3300 }; | 3300 }; |
3301 | 3301 |
3302 | 3302 |
| 3303 static v8::Handle<v8::Value> ThreadedAtBarrier1(const v8::Arguments& args) { |
| 3304 threaded_debugging_barriers.barrier_1.Wait(); |
| 3305 return v8::Undefined(); |
| 3306 } |
| 3307 |
| 3308 |
3303 static void ThreadedMessageHandler(const uint16_t* message, int length, | 3309 static void ThreadedMessageHandler(const uint16_t* message, int length, |
3304 void *data) { | 3310 void *data) { |
3305 static char print_buffer[1000]; | 3311 static char print_buffer[1000]; |
3306 Utf16ToAscii(message, length, print_buffer); | 3312 Utf16ToAscii(message, length, print_buffer); |
3307 if (IsBreakEventMessage(print_buffer)) { | 3313 if (IsBreakEventMessage(print_buffer)) { |
3308 threaded_debugging_barriers.barrier_2.Wait(); | 3314 threaded_debugging_barriers.barrier_2.Wait(); |
3309 } | 3315 } |
3310 printf("%s\n", print_buffer); | 3316 printf("%s\n", print_buffer); |
3311 fflush(stdout); | 3317 fflush(stdout); |
3312 } | 3318 } |
3313 | 3319 |
3314 | 3320 |
3315 void V8Thread::Run() { | 3321 void V8Thread::Run() { |
3316 const char* source_1 = | 3322 const char* source = |
3317 "flag = true;\n" | 3323 "flag = true;\n" |
3318 "function bar( new_value ) {\n" | 3324 "function bar( new_value ) {\n" |
3319 " flag = new_value;\n" | 3325 " flag = new_value;\n" |
3320 " return \"Return from bar(\" + new_value + \")\";\n" | 3326 " return \"Return from bar(\" + new_value + \")\";\n" |
3321 "}\n" | 3327 "}\n" |
3322 "\n" | 3328 "\n" |
3323 "function foo() {\n" | 3329 "function foo() {\n" |
3324 " var x = 1;\n" | 3330 " var x = 1;\n" |
3325 " while ( flag == true ) {\n" | 3331 " while ( flag == true ) {\n" |
| 3332 " if ( x == 1 ) {\n" |
| 3333 " ThreadedAtBarrier1();\n" |
| 3334 " }\n" |
3326 " x = x + 1;\n" | 3335 " x = x + 1;\n" |
3327 " }\n" | 3336 " }\n" |
3328 "}\n" | 3337 "}\n" |
3329 "\n"; | 3338 "\n" |
3330 const char* source_2 = "foo();\n"; | 3339 "foo();\n"; |
3331 | 3340 |
3332 v8::HandleScope scope; | 3341 v8::HandleScope scope; |
3333 DebugLocalContext env; | 3342 DebugLocalContext env; |
3334 v8::Debug::SetMessageHandler(&ThreadedMessageHandler); | 3343 v8::Debug::SetMessageHandler(&ThreadedMessageHandler); |
| 3344 v8::Handle<v8::ObjectTemplate> global_template = v8::ObjectTemplate::New(); |
| 3345 global_template->Set(v8::String::New("ThreadedAtBarrier1"), |
| 3346 v8::FunctionTemplate::New(ThreadedAtBarrier1)); |
| 3347 v8::Handle<v8::Context> context = v8::Context::New(NULL, global_template); |
| 3348 v8::Context::Scope context_scope(context); |
3335 | 3349 |
3336 CompileRun(source_1); | 3350 CompileRun(source); |
3337 threaded_debugging_barriers.barrier_1.Wait(); | |
3338 CompileRun(source_2); | |
3339 } | 3351 } |
3340 | 3352 |
3341 void DebuggerThread::Run() { | 3353 void DebuggerThread::Run() { |
3342 const int kBufSize = 1000; | 3354 const int kBufSize = 1000; |
3343 uint16_t buffer[kBufSize]; | 3355 uint16_t buffer[kBufSize]; |
3344 | 3356 |
3345 const char* command_1 = "{\"seq\":102," | 3357 const char* command_1 = "{\"seq\":102," |
3346 "\"type\":\"request\"," | 3358 "\"type\":\"request\"," |
3347 "\"command\":\"evaluate\"," | 3359 "\"command\":\"evaluate\"," |
3348 "\"arguments\":{\"expression\":\"bar(false)\"}}"; | 3360 "\"arguments\":{\"expression\":\"bar(false)\"}}"; |
(...skipping 729 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4078 bool allow_natives_syntax = i::FLAG_allow_natives_syntax; | 4090 bool allow_natives_syntax = i::FLAG_allow_natives_syntax; |
4079 i::FLAG_allow_natives_syntax = true; | 4091 i::FLAG_allow_natives_syntax = true; |
4080 CompileRun( | 4092 CompileRun( |
4081 "var scripts = %DebugGetLoadedScripts();" | 4093 "var scripts = %DebugGetLoadedScripts();" |
4082 "for (var i = 0; i < scripts.length; ++i) {" | 4094 "for (var i = 0; i < scripts.length; ++i) {" |
4083 " scripts[i].line_ends;" | 4095 " scripts[i].line_ends;" |
4084 "}"); | 4096 "}"); |
4085 // Must not crash while accessing line_ends. | 4097 // Must not crash while accessing line_ends. |
4086 i::FLAG_allow_natives_syntax = allow_natives_syntax; | 4098 i::FLAG_allow_natives_syntax = allow_natives_syntax; |
4087 } | 4099 } |
OLD | NEW |