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

Side by Side Diff: test/cctest/test-debug.cc

Issue 148503002: A64: Synchronize with r15545. (Closed) Base URL: https://v8.googlecode.com/svn/branches/experimental/a64
Patch Set: Created 6 years, 10 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 | « test/cctest/test-date.cc ('k') | test/cctest/test-disasm-a64.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 491 matching lines...) Expand 10 before | Expand all | Expand 10 after
502 502
503 // Create function and set the break point. 503 // Create function and set the break point.
504 Handle<v8::internal::JSFunction> fun = v8::Utils::OpenHandle( 504 Handle<v8::internal::JSFunction> fun = v8::Utils::OpenHandle(
505 *CompileFunction(env, source, name)); 505 *CompileFunction(env, source, name));
506 int bp = SetBreakPoint(fun, position); 506 int bp = SetBreakPoint(fun, position);
507 507
508 // Check that the debug break function is as expected. 508 // Check that the debug break function is as expected.
509 Handle<v8::internal::SharedFunctionInfo> shared(fun->shared()); 509 Handle<v8::internal::SharedFunctionInfo> shared(fun->shared());
510 CHECK(Debug::HasDebugInfo(shared)); 510 CHECK(Debug::HasDebugInfo(shared));
511 TestBreakLocationIterator it1(Debug::GetDebugInfo(shared)); 511 TestBreakLocationIterator it1(Debug::GetDebugInfo(shared));
512 it1.FindBreakLocationFromPosition(position); 512 it1.FindBreakLocationFromPosition(position, v8::internal::STATEMENT_ALIGNED);
513 v8::internal::RelocInfo::Mode actual_mode = it1.it()->rinfo()->rmode(); 513 v8::internal::RelocInfo::Mode actual_mode = it1.it()->rinfo()->rmode();
514 if (actual_mode == v8::internal::RelocInfo::CODE_TARGET_WITH_ID) { 514 if (actual_mode == v8::internal::RelocInfo::CODE_TARGET_WITH_ID) {
515 actual_mode = v8::internal::RelocInfo::CODE_TARGET; 515 actual_mode = v8::internal::RelocInfo::CODE_TARGET;
516 } 516 }
517 CHECK_EQ(mode, actual_mode); 517 CHECK_EQ(mode, actual_mode);
518 if (mode != v8::internal::RelocInfo::JS_RETURN) { 518 if (mode != v8::internal::RelocInfo::JS_RETURN) {
519 CHECK_EQ(debug_break, 519 CHECK_EQ(debug_break,
520 Code::GetCodeFromTargetAddress(it1.it()->rinfo()->target_address())); 520 Code::GetCodeFromTargetAddress(it1.it()->rinfo()->target_address()));
521 } else { 521 } else {
522 CHECK(Debug::IsDebugBreakAtReturn(it1.it()->rinfo())); 522 CHECK(Debug::IsDebugBreakAtReturn(it1.it()->rinfo()));
523 } 523 }
524 524
525 // Clear the break point and check that the debug break function is no longer 525 // Clear the break point and check that the debug break function is no longer
526 // there 526 // there
527 ClearBreakPoint(bp); 527 ClearBreakPoint(bp);
528 CHECK(!debug->HasDebugInfo(shared)); 528 CHECK(!debug->HasDebugInfo(shared));
529 CHECK(debug->EnsureDebugInfo(shared, fun)); 529 CHECK(debug->EnsureDebugInfo(shared, fun));
530 TestBreakLocationIterator it2(Debug::GetDebugInfo(shared)); 530 TestBreakLocationIterator it2(Debug::GetDebugInfo(shared));
531 it2.FindBreakLocationFromPosition(position); 531 it2.FindBreakLocationFromPosition(position, v8::internal::STATEMENT_ALIGNED);
532 actual_mode = it2.it()->rinfo()->rmode(); 532 actual_mode = it2.it()->rinfo()->rmode();
533 if (actual_mode == v8::internal::RelocInfo::CODE_TARGET_WITH_ID) { 533 if (actual_mode == v8::internal::RelocInfo::CODE_TARGET_WITH_ID) {
534 actual_mode = v8::internal::RelocInfo::CODE_TARGET; 534 actual_mode = v8::internal::RelocInfo::CODE_TARGET;
535 } 535 }
536 CHECK_EQ(mode, actual_mode); 536 CHECK_EQ(mode, actual_mode);
537 if (mode == v8::internal::RelocInfo::JS_RETURN) { 537 if (mode == v8::internal::RelocInfo::JS_RETURN) {
538 CHECK(!Debug::IsDebugBreakAtReturn(it2.it()->rinfo())); 538 CHECK(!Debug::IsDebugBreakAtReturn(it2.it()->rinfo()));
539 } 539 }
540 } 540 }
541 541
(...skipping 271 matching lines...) Expand 10 before | Expand all | Expand 10 after
813 // For this debug event handler to work the following two global varaibles 813 // For this debug event handler to work the following two global varaibles
814 // must be initialized. 814 // must be initialized.
815 // checks: An array of expressions and expected results 815 // checks: An array of expressions and expected results
816 // evaluate_check_function: A JavaScript function (see below) 816 // evaluate_check_function: A JavaScript function (see below)
817 817
818 // Structure for holding checks to do. 818 // Structure for holding checks to do.
819 struct EvaluateCheck { 819 struct EvaluateCheck {
820 const char* expr; // An expression to evaluate when a break point is hit. 820 const char* expr; // An expression to evaluate when a break point is hit.
821 v8::Handle<v8::Value> expected; // The expected result. 821 v8::Handle<v8::Value> expected; // The expected result.
822 }; 822 };
823
824
823 // Array of checks to do. 825 // Array of checks to do.
824 struct EvaluateCheck* checks = NULL; 826 struct EvaluateCheck* checks = NULL;
825 // Source for The JavaScript function which can do the evaluation when a break 827 // Source for The JavaScript function which can do the evaluation when a break
826 // point is hit. 828 // point is hit.
827 const char* evaluate_check_source = 829 const char* evaluate_check_source =
828 "function evaluate_check(exec_state, expr, expected) {" 830 "function evaluate_check(exec_state, expr, expected) {"
829 " return exec_state.frame(0).evaluate(expr).value() === expected;" 831 " return exec_state.frame(0).evaluate(expr).value() === expected;"
830 "}"; 832 "}";
831 v8::Local<v8::Function> evaluate_check_function; 833 v8::Local<v8::Function> evaluate_check_function;
832 834
(...skipping 553 matching lines...) Expand 10 before | Expand all | Expand 10 after
1386 v8::Local<v8::Function> f, 1388 v8::Local<v8::Function> f,
1387 int break_point_count, 1389 int break_point_count,
1388 int call_count) { 1390 int call_count) {
1389 break_point_hit_count = 0; 1391 break_point_hit_count = 0;
1390 for (int i = 0; i < call_count; i++) { 1392 for (int i = 0; i < call_count; i++) {
1391 f->Call(recv, 0, NULL); 1393 f->Call(recv, 0, NULL);
1392 CHECK_EQ((i + 1) * break_point_count, break_point_hit_count); 1394 CHECK_EQ((i + 1) * break_point_count, break_point_hit_count);
1393 } 1395 }
1394 } 1396 }
1395 1397
1398
1396 // Test GC during break point processing. 1399 // Test GC during break point processing.
1397 TEST(GCDuringBreakPointProcessing) { 1400 TEST(GCDuringBreakPointProcessing) {
1398 break_point_hit_count = 0; 1401 break_point_hit_count = 0;
1399 DebugLocalContext env; 1402 DebugLocalContext env;
1400 v8::HandleScope scope(env->GetIsolate()); 1403 v8::HandleScope scope(env->GetIsolate());
1401 1404
1402 v8::Debug::SetDebugEventListener(DebugEventBreakPointCollectGarbage, 1405 v8::Debug::SetDebugEventListener(DebugEventBreakPointCollectGarbage,
1403 v8::Undefined()); 1406 v8::Undefined());
1404 v8::Local<v8::Function> foo; 1407 v8::Local<v8::Function> foo;
1405 1408
(...skipping 1113 matching lines...) Expand 10 before | Expand all | Expand 10 after
2519 v8::Debug::SetDebugEventListener(NULL); 2522 v8::Debug::SetDebugEventListener(NULL);
2520 CheckDebuggerUnloaded(); 2523 CheckDebuggerUnloaded();
2521 } 2524 }
2522 2525
2523 2526
2524 int debugEventCount = 0; 2527 int debugEventCount = 0;
2525 static void CheckDebugEvent(const v8::Debug::EventDetails& eventDetails) { 2528 static void CheckDebugEvent(const v8::Debug::EventDetails& eventDetails) {
2526 if (eventDetails.GetEvent() == v8::Break) ++debugEventCount; 2529 if (eventDetails.GetEvent() == v8::Break) ++debugEventCount;
2527 } 2530 }
2528 2531
2532
2529 // Test that the conditional breakpoints work event if code generation from 2533 // Test that the conditional breakpoints work event if code generation from
2530 // strings is prohibited in the debugee context. 2534 // strings is prohibited in the debugee context.
2531 TEST(ConditionalBreakpointWithCodeGenerationDisallowed) { 2535 TEST(ConditionalBreakpointWithCodeGenerationDisallowed) {
2532 DebugLocalContext env; 2536 DebugLocalContext env;
2533 v8::HandleScope scope(env->GetIsolate()); 2537 v8::HandleScope scope(env->GetIsolate());
2534 env.ExposeDebug(); 2538 env.ExposeDebug();
2535 2539
2536 v8::Debug::SetDebugEventListener2(CheckDebugEvent); 2540 v8::Debug::SetDebugEventListener2(CheckDebugEvent);
2537 2541
2538 v8::Local<v8::Function> foo = CompileFunction(&env, 2542 v8::Local<v8::Function> foo = CompileFunction(&env,
(...skipping 25 matching lines...) Expand all
2564 v8::HandleScope handleScope(v8::Isolate::GetCurrent()); 2568 v8::HandleScope handleScope(v8::Isolate::GetCurrent());
2565 2569
2566 v8::Handle<v8::Value> args[] = { eventDetails.GetExecutionState() }; 2570 v8::Handle<v8::Value> args[] = { eventDetails.GetExecutionState() };
2567 CHECK(checkGlobalEvalFunction->Call( 2571 CHECK(checkGlobalEvalFunction->Call(
2568 eventDetails.GetEventContext()->Global(), 1, args)->IsTrue()); 2572 eventDetails.GetEventContext()->Global(), 1, args)->IsTrue());
2569 CHECK(checkFrameEvalFunction->Call( 2573 CHECK(checkFrameEvalFunction->Call(
2570 eventDetails.GetEventContext()->Global(), 1, args)->IsTrue()); 2574 eventDetails.GetEventContext()->Global(), 1, args)->IsTrue());
2571 } 2575 }
2572 } 2576 }
2573 2577
2578
2574 // Test that the evaluation of expressions when a break point is hit generates 2579 // Test that the evaluation of expressions when a break point is hit generates
2575 // the correct results in case code generation from strings is disallowed in the 2580 // the correct results in case code generation from strings is disallowed in the
2576 // debugee context. 2581 // debugee context.
2577 TEST(DebugEvaluateWithCodeGenerationDisallowed) { 2582 TEST(DebugEvaluateWithCodeGenerationDisallowed) {
2578 DebugLocalContext env; 2583 DebugLocalContext env;
2579 v8::HandleScope scope(env->GetIsolate()); 2584 v8::HandleScope scope(env->GetIsolate());
2580 env.ExposeDebug(); 2585 env.ExposeDebug();
2581 2586
2582 v8::Debug::SetDebugEventListener2(CheckDebugEval); 2587 v8::Debug::SetDebugEventListener2(CheckDebugEval);
2583 2588
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
2618 int AsciiToUtf16(const char* input_buffer, uint16_t* output_buffer) { 2623 int AsciiToUtf16(const char* input_buffer, uint16_t* output_buffer) {
2619 int i; 2624 int i;
2620 for (i = 0; input_buffer[i] != '\0'; ++i) { 2625 for (i = 0; input_buffer[i] != '\0'; ++i) {
2621 // ASCII does not use chars > 127, but be careful anyway. 2626 // ASCII does not use chars > 127, but be careful anyway.
2622 output_buffer[i] = static_cast<unsigned char>(input_buffer[i]); 2627 output_buffer[i] = static_cast<unsigned char>(input_buffer[i]);
2623 } 2628 }
2624 output_buffer[i] = 0; 2629 output_buffer[i] = 0;
2625 return i; 2630 return i;
2626 } 2631 }
2627 2632
2633
2628 // Copies a 16-bit string to a C string by dropping the high byte of 2634 // Copies a 16-bit string to a C string by dropping the high byte of
2629 // each character. Does not check for buffer overflow. 2635 // each character. Does not check for buffer overflow.
2630 // Can be used in any thread. Requires string length as an input. 2636 // Can be used in any thread. Requires string length as an input.
2631 int Utf16ToAscii(const uint16_t* input_buffer, int length, 2637 int Utf16ToAscii(const uint16_t* input_buffer, int length,
2632 char* output_buffer, int output_len = -1) { 2638 char* output_buffer, int output_len = -1) {
2633 if (output_len >= 0) { 2639 if (output_len >= 0) {
2634 if (length > output_len - 1) { 2640 if (length > output_len - 1) {
2635 length = output_len - 1; 2641 length = output_len - 1;
2636 } 2642 }
2637 } 2643 }
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
2705 EvaluateResult* array_item = process_debug_messages_data.current(); 2711 EvaluateResult* array_item = process_debug_messages_data.current();
2706 2712
2707 bool res = GetEvaluateStringResult(print_buffer, 2713 bool res = GetEvaluateStringResult(print_buffer,
2708 array_item->buffer, 2714 array_item->buffer,
2709 EvaluateResult::kBufferSize); 2715 EvaluateResult::kBufferSize);
2710 if (res) { 2716 if (res) {
2711 process_debug_messages_data.next(); 2717 process_debug_messages_data.next();
2712 } 2718 }
2713 } 2719 }
2714 2720
2721
2715 // Test that the evaluation of expressions works even from ProcessDebugMessages 2722 // Test that the evaluation of expressions works even from ProcessDebugMessages
2716 // i.e. with empty stack. 2723 // i.e. with empty stack.
2717 TEST(DebugEvaluateWithoutStack) { 2724 TEST(DebugEvaluateWithoutStack) {
2718 v8::Debug::SetMessageHandler(DebugProcessDebugMessagesHandler); 2725 v8::Debug::SetMessageHandler(DebugProcessDebugMessagesHandler);
2719 2726
2720 DebugLocalContext env; 2727 DebugLocalContext env;
2721 v8::HandleScope scope(env->GetIsolate()); 2728 v8::HandleScope scope(env->GetIsolate());
2722 2729
2723 const char* source = 2730 const char* source =
2724 "var v1 = 'Pinguin';\n function getAnimal() { return 'Capy' + 'bara'; }"; 2731 "var v1 = 'Pinguin';\n function getAnimal() { return 'Capy' + 'bara'; }";
(...skipping 1409 matching lines...) Expand 10 before | Expand all | Expand 10 after
4134 CHECK_EQ(StrLength(expected_step_sequence), 4141 CHECK_EQ(StrLength(expected_step_sequence),
4135 break_point_hit_count); 4142 break_point_hit_count);
4136 4143
4137 // Get rid of the debug event listener. 4144 // Get rid of the debug event listener.
4138 v8::Debug::SetDebugEventListener(NULL); 4145 v8::Debug::SetDebugEventListener(NULL);
4139 CheckDebuggerUnloaded(); 4146 CheckDebuggerUnloaded();
4140 } 4147 }
4141 4148
4142 4149
4143 TEST(DebugBreak) { 4150 TEST(DebugBreak) {
4151 i::FLAG_stress_compaction = false;
4144 #ifdef VERIFY_HEAP 4152 #ifdef VERIFY_HEAP
4145 i::FLAG_verify_heap = true; 4153 i::FLAG_verify_heap = true;
4146 #endif 4154 #endif
4147 DebugLocalContext env; 4155 DebugLocalContext env;
4148 v8::HandleScope scope(env->GetIsolate()); 4156 v8::HandleScope scope(env->GetIsolate());
4149 4157
4150 // Register a debug event listener which sets the break flag and counts. 4158 // Register a debug event listener which sets the break flag and counts.
4151 v8::Debug::SetDebugEventListener(DebugEventBreak); 4159 v8::Debug::SetDebugEventListener(DebugEventBreak);
4152 4160
4153 // Create a function for testing stepping. 4161 // Create a function for testing stepping.
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
4257 v8::Context::New(isolate, &extensions); 4265 v8::Context::New(isolate, &extensions);
4258 } 4266 }
4259 // Check that no DebugBreak events occured during the context creation. 4267 // Check that no DebugBreak events occured during the context creation.
4260 CHECK_EQ(0, break_point_hit_count); 4268 CHECK_EQ(0, break_point_hit_count);
4261 4269
4262 // Get rid of the debug event listener. 4270 // Get rid of the debug event listener.
4263 v8::Debug::SetDebugEventListener(NULL); 4271 v8::Debug::SetDebugEventListener(NULL);
4264 CheckDebuggerUnloaded(); 4272 CheckDebuggerUnloaded();
4265 } 4273 }
4266 4274
4275
4267 static void NamedEnum(const v8::PropertyCallbackInfo<v8::Array>& info) { 4276 static void NamedEnum(const v8::PropertyCallbackInfo<v8::Array>& info) {
4268 v8::Handle<v8::Array> result = v8::Array::New(3); 4277 v8::Handle<v8::Array> result = v8::Array::New(3);
4269 result->Set(v8::Integer::New(0), v8::String::New("a")); 4278 result->Set(v8::Integer::New(0), v8::String::New("a"));
4270 result->Set(v8::Integer::New(1), v8::String::New("b")); 4279 result->Set(v8::Integer::New(1), v8::String::New("b"));
4271 result->Set(v8::Integer::New(2), v8::String::New("c")); 4280 result->Set(v8::Integer::New(2), v8::String::New("c"));
4272 info.GetReturnValue().Set(result); 4281 info.GetReturnValue().Set(result);
4273 } 4282 }
4274 4283
4275 4284
4276 static void IndexedEnum(const v8::PropertyCallbackInfo<v8::Array>& info) { 4285 static void IndexedEnum(const v8::PropertyCallbackInfo<v8::Array>& info) {
(...skipping 424 matching lines...) Expand 10 before | Expand all | Expand 10 after
4701 bool invalid_; 4710 bool invalid_;
4702 }; 4711 };
4703 4712
4704 ThreadBarrier::ThreadBarrier(int num_threads) 4713 ThreadBarrier::ThreadBarrier(int num_threads)
4705 : num_threads_(num_threads), num_blocked_(0) { 4714 : num_threads_(num_threads), num_blocked_(0) {
4706 lock_ = OS::CreateMutex(); 4715 lock_ = OS::CreateMutex();
4707 sem_ = OS::CreateSemaphore(0); 4716 sem_ = OS::CreateSemaphore(0);
4708 invalid_ = false; // A barrier may only be used once. Then it is invalid. 4717 invalid_ = false; // A barrier may only be used once. Then it is invalid.
4709 } 4718 }
4710 4719
4720
4711 // Do not call, due to race condition with Wait(). 4721 // Do not call, due to race condition with Wait().
4712 // Could be resolved with Pthread condition variables. 4722 // Could be resolved with Pthread condition variables.
4713 ThreadBarrier::~ThreadBarrier() { 4723 ThreadBarrier::~ThreadBarrier() {
4714 lock_->Lock(); 4724 lock_->Lock();
4715 delete lock_; 4725 delete lock_;
4716 delete sem_; 4726 delete sem_;
4717 } 4727 }
4718 4728
4729
4719 void ThreadBarrier::Wait() { 4730 void ThreadBarrier::Wait() {
4720 lock_->Lock(); 4731 lock_->Lock();
4721 CHECK(!invalid_); 4732 CHECK(!invalid_);
4722 if (num_blocked_ == num_threads_ - 1) { 4733 if (num_blocked_ == num_threads_ - 1) {
4723 // Signal and unblock all waiting threads. 4734 // Signal and unblock all waiting threads.
4724 for (int i = 0; i < num_threads_ - 1; ++i) { 4735 for (int i = 0; i < num_threads_ - 1; ++i) {
4725 sem_->Signal(); 4736 sem_->Signal();
4726 } 4737 }
4727 invalid_ = true; 4738 invalid_ = true;
4728 printf("BARRIER\n\n"); 4739 printf("BARRIER\n\n");
4729 fflush(stdout); 4740 fflush(stdout);
4730 lock_->Unlock(); 4741 lock_->Unlock();
4731 } else { // Wait for the semaphore. 4742 } else { // Wait for the semaphore.
4732 ++num_blocked_; 4743 ++num_blocked_;
4733 lock_->Unlock(); // Potential race condition with destructor because 4744 lock_->Unlock(); // Potential race condition with destructor because
4734 sem_->Wait(); // these two lines are not atomic. 4745 sem_->Wait(); // these two lines are not atomic.
4735 } 4746 }
4736 } 4747 }
4737 4748
4749
4738 // A set containing enough barriers and semaphores for any of the tests. 4750 // A set containing enough barriers and semaphores for any of the tests.
4739 class Barriers { 4751 class Barriers {
4740 public: 4752 public:
4741 Barriers(); 4753 Barriers();
4742 void Initialize(); 4754 void Initialize();
4743 ThreadBarrier barrier_1; 4755 ThreadBarrier barrier_1;
4744 ThreadBarrier barrier_2; 4756 ThreadBarrier barrier_2;
4745 ThreadBarrier barrier_3; 4757 ThreadBarrier barrier_3;
4746 ThreadBarrier barrier_4; 4758 ThreadBarrier barrier_4;
4747 ThreadBarrier barrier_5; 4759 ThreadBarrier barrier_5;
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
4837 const char* source_line = "\"sourceLine\":"; 4849 const char* source_line = "\"sourceLine\":";
4838 char* pos = strstr(message, source_line); 4850 char* pos = strstr(message, source_line);
4839 if (pos == NULL) { 4851 if (pos == NULL) {
4840 return -1; 4852 return -1;
4841 } 4853 }
4842 int res = -1; 4854 int res = -1;
4843 res = StringToInt(pos + strlen(source_line)); 4855 res = StringToInt(pos + strlen(source_line));
4844 return res; 4856 return res;
4845 } 4857 }
4846 4858
4859
4847 /* Test MessageQueues */ 4860 /* Test MessageQueues */
4848 /* Tests the message queues that hold debugger commands and 4861 /* Tests the message queues that hold debugger commands and
4849 * response messages to the debugger. Fills queues and makes 4862 * response messages to the debugger. Fills queues and makes
4850 * them grow. 4863 * them grow.
4851 */ 4864 */
4852 Barriers message_queue_barriers; 4865 Barriers message_queue_barriers;
4853 4866
4854 // This is the debugger thread, that executes no v8 calls except 4867 // This is the debugger thread, that executes no v8 calls except
4855 // placing JSON debugger commands in the queue. 4868 // placing JSON debugger commands in the queue.
4856 class MessageQueueDebuggerThread : public v8::internal::Thread { 4869 class MessageQueueDebuggerThread : public v8::internal::Thread {
(...skipping 11 matching lines...) Expand all
4868 // Lets test script wait until break occurs to send commands. 4881 // Lets test script wait until break occurs to send commands.
4869 // Signals when a break is reported. 4882 // Signals when a break is reported.
4870 message_queue_barriers.semaphore_2->Signal(); 4883 message_queue_barriers.semaphore_2->Signal();
4871 } 4884 }
4872 4885
4873 // Allow message handler to block on a semaphore, to test queueing of 4886 // Allow message handler to block on a semaphore, to test queueing of
4874 // messages while blocked. 4887 // messages while blocked.
4875 message_queue_barriers.semaphore_1->Wait(); 4888 message_queue_barriers.semaphore_1->Wait();
4876 } 4889 }
4877 4890
4891
4878 void MessageQueueDebuggerThread::Run() { 4892 void MessageQueueDebuggerThread::Run() {
4879 const int kBufferSize = 1000; 4893 const int kBufferSize = 1000;
4880 uint16_t buffer_1[kBufferSize]; 4894 uint16_t buffer_1[kBufferSize];
4881 uint16_t buffer_2[kBufferSize]; 4895 uint16_t buffer_2[kBufferSize];
4882 const char* command_1 = 4896 const char* command_1 =
4883 "{\"seq\":117," 4897 "{\"seq\":117,"
4884 "\"type\":\"request\"," 4898 "\"type\":\"request\","
4885 "\"command\":\"evaluate\"," 4899 "\"command\":\"evaluate\","
4886 "\"arguments\":{\"expression\":\"1+2\"}}"; 4900 "\"arguments\":{\"expression\":\"1+2\"}}";
4887 const char* command_2 = 4901 const char* command_2 =
(...skipping 279 matching lines...) Expand 10 before | Expand all | Expand 10 after
5167 global_template->Set(v8::String::New("ThreadedAtBarrier1"), 5181 global_template->Set(v8::String::New("ThreadedAtBarrier1"),
5168 v8::FunctionTemplate::New(ThreadedAtBarrier1)); 5182 v8::FunctionTemplate::New(ThreadedAtBarrier1));
5169 v8::Handle<v8::Context> context = v8::Context::New(v8::Isolate::GetCurrent(), 5183 v8::Handle<v8::Context> context = v8::Context::New(v8::Isolate::GetCurrent(),
5170 NULL, 5184 NULL,
5171 global_template); 5185 global_template);
5172 v8::Context::Scope context_scope(context); 5186 v8::Context::Scope context_scope(context);
5173 5187
5174 CompileRun(source); 5188 CompileRun(source);
5175 } 5189 }
5176 5190
5191
5177 void DebuggerThread::Run() { 5192 void DebuggerThread::Run() {
5178 const int kBufSize = 1000; 5193 const int kBufSize = 1000;
5179 uint16_t buffer[kBufSize]; 5194 uint16_t buffer[kBufSize];
5180 5195
5181 const char* command_1 = "{\"seq\":102," 5196 const char* command_1 = "{\"seq\":102,"
5182 "\"type\":\"request\"," 5197 "\"type\":\"request\","
5183 "\"command\":\"evaluate\"," 5198 "\"command\":\"evaluate\","
5184 "\"arguments\":{\"expression\":\"bar(false)\"}}"; 5199 "\"arguments\":{\"expression\":\"bar(false)\"}}";
5185 const char* command_2 = "{\"seq\":103," 5200 const char* command_2 = "{\"seq\":103,"
5186 "\"type\":\"request\"," 5201 "\"type\":\"request\","
(...skipping 14 matching lines...) Expand all
5201 // Create a V8 environment 5216 // Create a V8 environment
5202 threaded_debugging_barriers.Initialize(); 5217 threaded_debugging_barriers.Initialize();
5203 5218
5204 v8_thread.Start(); 5219 v8_thread.Start();
5205 debugger_thread.Start(); 5220 debugger_thread.Start();
5206 5221
5207 v8_thread.Join(); 5222 v8_thread.Join();
5208 debugger_thread.Join(); 5223 debugger_thread.Join();
5209 } 5224 }
5210 5225
5226
5211 /* Test RecursiveBreakpoints */ 5227 /* Test RecursiveBreakpoints */
5212 /* In this test, the debugger evaluates a function with a breakpoint, after 5228 /* In this test, the debugger evaluates a function with a breakpoint, after
5213 * hitting a breakpoint in another function. We do this with both values 5229 * hitting a breakpoint in another function. We do this with both values
5214 * of the flag enabling recursive breakpoints, and verify that the second 5230 * of the flag enabling recursive breakpoints, and verify that the second
5215 * breakpoint is hit when enabled, and missed when disabled. 5231 * breakpoint is hit when enabled, and missed when disabled.
5216 */ 5232 */
5217 5233
5218 class BreakpointsV8Thread : public v8::internal::Thread { 5234 class BreakpointsV8Thread : public v8::internal::Thread {
5219 public: 5235 public:
5220 BreakpointsV8Thread() : Thread("BreakpointsV8Thread") { } 5236 BreakpointsV8Thread() : Thread("BreakpointsV8Thread") { }
(...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after
5392 // 8: Evaluate dog() with breaks disabled. 5408 // 8: Evaluate dog() with breaks disabled.
5393 v8::Debug::SendCommand(buffer, AsciiToUtf16(command_7, buffer)); 5409 v8::Debug::SendCommand(buffer, AsciiToUtf16(command_7, buffer));
5394 // Evaluate dog() finishes. 5410 // Evaluate dog() finishes.
5395 breakpoints_barriers->semaphore_1->Wait(); 5411 breakpoints_barriers->semaphore_1->Wait();
5396 // Must have result 116. 5412 // Must have result 116.
5397 CHECK_EQ(116, evaluate_int_result); 5413 CHECK_EQ(116, evaluate_int_result);
5398 // 9: Continue evaluation of source2, reach end. 5414 // 9: Continue evaluation of source2, reach end.
5399 v8::Debug::SendCommand(buffer, AsciiToUtf16(command_8, buffer)); 5415 v8::Debug::SendCommand(buffer, AsciiToUtf16(command_8, buffer));
5400 } 5416 }
5401 5417
5418
5402 void TestRecursiveBreakpointsGeneric(bool global_evaluate) { 5419 void TestRecursiveBreakpointsGeneric(bool global_evaluate) {
5403 i::FLAG_debugger_auto_break = true; 5420 i::FLAG_debugger_auto_break = true;
5404 5421
5405 BreakpointsDebuggerThread breakpoints_debugger_thread(global_evaluate); 5422 BreakpointsDebuggerThread breakpoints_debugger_thread(global_evaluate);
5406 BreakpointsV8Thread breakpoints_v8_thread; 5423 BreakpointsV8Thread breakpoints_v8_thread;
5407 5424
5408 // Create a V8 environment 5425 // Create a V8 environment
5409 Barriers stack_allocated_breakpoints_barriers; 5426 Barriers stack_allocated_breakpoints_barriers;
5410 stack_allocated_breakpoints_barriers.Initialize(); 5427 stack_allocated_breakpoints_barriers.Initialize();
5411 breakpoints_barriers = &stack_allocated_breakpoints_barriers; 5428 breakpoints_barriers = &stack_allocated_breakpoints_barriers;
5412 5429
5413 breakpoints_v8_thread.Start(); 5430 breakpoints_v8_thread.Start();
5414 breakpoints_debugger_thread.Start(); 5431 breakpoints_debugger_thread.Start();
5415 5432
5416 breakpoints_v8_thread.Join(); 5433 breakpoints_v8_thread.Join();
5417 breakpoints_debugger_thread.Join(); 5434 breakpoints_debugger_thread.Join();
5418 } 5435 }
5419 5436
5437
5420 TEST(RecursiveBreakpoints) { 5438 TEST(RecursiveBreakpoints) {
5421 TestRecursiveBreakpointsGeneric(false); 5439 TestRecursiveBreakpointsGeneric(false);
5422 } 5440 }
5423 5441
5442
5424 TEST(RecursiveBreakpointsGlobal) { 5443 TEST(RecursiveBreakpointsGlobal) {
5425 TestRecursiveBreakpointsGeneric(true); 5444 TestRecursiveBreakpointsGeneric(true);
5426 } 5445 }
5427 5446
5428 5447
5429 static void DummyDebugEventListener(v8::DebugEvent event, 5448 static void DummyDebugEventListener(v8::DebugEvent event,
5430 v8::Handle<v8::Object> exec_state, 5449 v8::Handle<v8::Object> exec_state,
5431 v8::Handle<v8::Object> event_data, 5450 v8::Handle<v8::Object> event_data,
5432 v8::Handle<v8::Value> data) { 5451 v8::Handle<v8::Value> data) {
5433 } 5452 }
(...skipping 828 matching lines...) Expand 10 before | Expand all | Expand 10 after
6262 } 6281 }
6263 6282
6264 6283
6265 // Test which creates two contexts and sets different embedder data on each. 6284 // Test which creates two contexts and sets different embedder data on each.
6266 // Checks that this data is set correctly and that when the debug message 6285 // Checks that this data is set correctly and that when the debug message
6267 // handler is called the expected context is the one active. 6286 // handler is called the expected context is the one active.
6268 TEST(ContextData) { 6287 TEST(ContextData) {
6269 v8::Isolate* isolate = v8::Isolate::GetCurrent(); 6288 v8::Isolate* isolate = v8::Isolate::GetCurrent();
6270 v8::HandleScope scope(isolate); 6289 v8::HandleScope scope(isolate);
6271 6290
6272 v8::Debug::SetMessageHandler2(ContextCheckMessageHandler);
6273
6274 // Create two contexts. 6291 // Create two contexts.
6275 v8::Handle<v8::Context> context_1; 6292 v8::Handle<v8::Context> context_1;
6276 v8::Handle<v8::Context> context_2; 6293 v8::Handle<v8::Context> context_2;
6277 v8::Handle<v8::ObjectTemplate> global_template = 6294 v8::Handle<v8::ObjectTemplate> global_template =
6278 v8::Handle<v8::ObjectTemplate>(); 6295 v8::Handle<v8::ObjectTemplate>();
6279 v8::Handle<v8::Value> global_object = v8::Handle<v8::Value>(); 6296 v8::Handle<v8::Value> global_object = v8::Handle<v8::Value>();
6280 context_1 = v8::Context::New(isolate, NULL, global_template, global_object); 6297 context_1 = v8::Context::New(isolate, NULL, global_template, global_object);
6281 context_2 = v8::Context::New(isolate, NULL, global_template, global_object); 6298 context_2 = v8::Context::New(isolate, NULL, global_template, global_object);
6282 6299
6300 v8::Debug::SetMessageHandler2(ContextCheckMessageHandler);
6301
6283 // Default data value is undefined. 6302 // Default data value is undefined.
6284 CHECK(context_1->GetEmbedderData(0)->IsUndefined()); 6303 CHECK(context_1->GetEmbedderData(0)->IsUndefined());
6285 CHECK(context_2->GetEmbedderData(0)->IsUndefined()); 6304 CHECK(context_2->GetEmbedderData(0)->IsUndefined());
6286 6305
6287 // Set and check different data values. 6306 // Set and check different data values.
6288 v8::Handle<v8::String> data_1 = v8::String::New("1"); 6307 v8::Handle<v8::String> data_1 = v8::String::New("1");
6289 v8::Handle<v8::String> data_2 = v8::String::New("2"); 6308 v8::Handle<v8::String> data_2 = v8::String::New("2");
6290 context_1->SetEmbedderData(0, data_1); 6309 context_1->SetEmbedderData(0, data_1);
6291 context_2->SetEmbedderData(0, data_2); 6310 context_2->SetEmbedderData(0, data_2);
6292 CHECK(context_1->GetEmbedderData(0)->StrictEquals(data_1)); 6311 CHECK(context_1->GetEmbedderData(0)->StrictEquals(data_1));
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after
6430 6449
6431 // Check that there was only one break event. Matching RegExp should not 6450 // Check that there was only one break event. Matching RegExp should not
6432 // cause Break events. 6451 // cause Break events.
6433 CHECK_EQ(1, break_point_hit_count); 6452 CHECK_EQ(1, break_point_hit_count);
6434 CHECK_EQ("f", last_function_hit); 6453 CHECK_EQ("f", last_function_hit);
6435 } 6454 }
6436 #endif // V8_INTERPRETED_REGEXP 6455 #endif // V8_INTERPRETED_REGEXP
6437 6456
6438 6457
6439 // Common part of EvalContextData and NestedBreakEventContextData tests. 6458 // Common part of EvalContextData and NestedBreakEventContextData tests.
6440 static void ExecuteScriptForContextCheck() { 6459 static void ExecuteScriptForContextCheck(
6460 v8::Debug::MessageHandler2 message_handler) {
6441 // Create a context. 6461 // Create a context.
6442 v8::Handle<v8::Context> context_1; 6462 v8::Handle<v8::Context> context_1;
6443 v8::Handle<v8::ObjectTemplate> global_template = 6463 v8::Handle<v8::ObjectTemplate> global_template =
6444 v8::Handle<v8::ObjectTemplate>(); 6464 v8::Handle<v8::ObjectTemplate>();
6445 context_1 = 6465 context_1 =
6446 v8::Context::New(v8::Isolate::GetCurrent(), NULL, global_template); 6466 v8::Context::New(v8::Isolate::GetCurrent(), NULL, global_template);
6447 6467
6468 v8::Debug::SetMessageHandler2(message_handler);
6469
6448 // Default data value is undefined. 6470 // Default data value is undefined.
6449 CHECK(context_1->GetEmbedderData(0)->IsUndefined()); 6471 CHECK(context_1->GetEmbedderData(0)->IsUndefined());
6450 6472
6451 // Set and check a data value. 6473 // Set and check a data value.
6452 v8::Handle<v8::String> data_1 = v8::String::New("1"); 6474 v8::Handle<v8::String> data_1 = v8::String::New("1");
6453 context_1->SetEmbedderData(0, data_1); 6475 context_1->SetEmbedderData(0, data_1);
6454 CHECK(context_1->GetEmbedderData(0)->StrictEquals(data_1)); 6476 CHECK(context_1->GetEmbedderData(0)->StrictEquals(data_1));
6455 6477
6456 // Simple test function with eval that causes a break. 6478 // Simple test function with eval that causes a break.
6457 const char* source = "function f() { eval('debugger;'); }"; 6479 const char* source = "function f() { eval('debugger;'); }";
6458 6480
6459 // Enter and run function in the context. 6481 // Enter and run function in the context.
6460 { 6482 {
6461 v8::Context::Scope context_scope(context_1); 6483 v8::Context::Scope context_scope(context_1);
6462 expected_context = context_1; 6484 expected_context = context_1;
6463 expected_context_data = data_1; 6485 expected_context_data = data_1;
6464 v8::Local<v8::Function> f = CompileFunction(source, "f"); 6486 v8::Local<v8::Function> f = CompileFunction(source, "f");
6465 f->Call(context_1->Global(), 0, NULL); 6487 f->Call(context_1->Global(), 0, NULL);
6466 } 6488 }
6489
6490 v8::Debug::SetMessageHandler2(NULL);
6467 } 6491 }
6468 6492
6469 6493
6470 // Test which creates a context and sets embedder data on it. Checks that this 6494 // Test which creates a context and sets embedder data on it. Checks that this
6471 // data is set correctly and that when the debug message handler is called for 6495 // data is set correctly and that when the debug message handler is called for
6472 // break event in an eval statement the expected context is the one returned by 6496 // break event in an eval statement the expected context is the one returned by
6473 // Message.GetEventContext. 6497 // Message.GetEventContext.
6474 TEST(EvalContextData) { 6498 TEST(EvalContextData) {
6475 v8::HandleScope scope(v8::Isolate::GetCurrent()); 6499 v8::HandleScope scope(v8::Isolate::GetCurrent());
6476 v8::Debug::SetMessageHandler2(ContextCheckMessageHandler);
6477 6500
6478 ExecuteScriptForContextCheck(); 6501 ExecuteScriptForContextCheck(ContextCheckMessageHandler);
6479 6502
6480 // One time compile event and one time break event. 6503 // One time compile event and one time break event.
6481 CHECK_GT(message_handler_hit_count, 2); 6504 CHECK_GT(message_handler_hit_count, 2);
6482 v8::Debug::SetMessageHandler2(NULL);
6483 CheckDebuggerUnloaded(); 6505 CheckDebuggerUnloaded();
6484 } 6506 }
6485 6507
6486 6508
6487 static bool sent_eval = false; 6509 static bool sent_eval = false;
6488 static int break_count = 0; 6510 static int break_count = 0;
6489 static int continue_command_send_count = 0; 6511 static int continue_command_send_count = 0;
6490 // Check that the expected context is the one generating the debug event 6512 // Check that the expected context is the one generating the debug event
6491 // including the case of nested break event. 6513 // including the case of nested break event.
6492 static void DebugEvalContextCheckMessageHandler( 6514 static void DebugEvalContextCheckMessageHandler(
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
6531 } 6553 }
6532 } 6554 }
6533 6555
6534 6556
6535 // Tests that context returned for break event is correct when the event occurs 6557 // Tests that context returned for break event is correct when the event occurs
6536 // in 'evaluate' debugger request. 6558 // in 'evaluate' debugger request.
6537 TEST(NestedBreakEventContextData) { 6559 TEST(NestedBreakEventContextData) {
6538 v8::HandleScope scope(v8::Isolate::GetCurrent()); 6560 v8::HandleScope scope(v8::Isolate::GetCurrent());
6539 break_count = 0; 6561 break_count = 0;
6540 message_handler_hit_count = 0; 6562 message_handler_hit_count = 0;
6541 v8::Debug::SetMessageHandler2(DebugEvalContextCheckMessageHandler);
6542 6563
6543 ExecuteScriptForContextCheck(); 6564 ExecuteScriptForContextCheck(DebugEvalContextCheckMessageHandler);
6544 6565
6545 // One time compile event and two times break event. 6566 // One time compile event and two times break event.
6546 CHECK_GT(message_handler_hit_count, 3); 6567 CHECK_GT(message_handler_hit_count, 3);
6547 6568
6548 // One break from the source and another from the evaluate request. 6569 // One break from the source and another from the evaluate request.
6549 CHECK_EQ(break_count, 2); 6570 CHECK_EQ(break_count, 2);
6550 v8::Debug::SetMessageHandler2(NULL);
6551 CheckDebuggerUnloaded(); 6571 CheckDebuggerUnloaded();
6552 } 6572 }
6553 6573
6554 6574
6555 // Debug event listener which counts the script collected events. 6575 // Debug event listener which counts the script collected events.
6556 int script_collected_count = 0; 6576 int script_collected_count = 0;
6557 static void DebugEventScriptCollectedEvent(v8::DebugEvent event, 6577 static void DebugEventScriptCollectedEvent(v8::DebugEvent event,
6558 v8::Handle<v8::Object> exec_state, 6578 v8::Handle<v8::Object> exec_state,
6559 v8::Handle<v8::Object> event_data, 6579 v8::Handle<v8::Object> event_data,
6560 v8::Handle<v8::Value> data) { 6580 v8::Handle<v8::Value> data) {
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
6607 script_collected_message_count++; 6627 script_collected_message_count++;
6608 v8::Handle<v8::Context> context = message.GetEventContext(); 6628 v8::Handle<v8::Context> context = message.GetEventContext();
6609 CHECK(context.IsEmpty()); 6629 CHECK(context.IsEmpty());
6610 } 6630 }
6611 } 6631 }
6612 6632
6613 6633
6614 // Test that GetEventContext doesn't fail and return empty handle for 6634 // Test that GetEventContext doesn't fail and return empty handle for
6615 // ScriptCollected events. 6635 // ScriptCollected events.
6616 TEST(ScriptCollectedEventContext) { 6636 TEST(ScriptCollectedEventContext) {
6637 i::FLAG_stress_compaction = false;
6617 v8::Isolate* isolate = v8::Isolate::GetCurrent(); 6638 v8::Isolate* isolate = v8::Isolate::GetCurrent();
6618 v8::internal::Debug* debug = 6639 v8::internal::Debug* debug =
6619 reinterpret_cast<v8::internal::Isolate*>(isolate)->debug(); 6640 reinterpret_cast<v8::internal::Isolate*>(isolate)->debug();
6620 script_collected_message_count = 0; 6641 script_collected_message_count = 0;
6621 v8::HandleScope scope(isolate); 6642 v8::HandleScope scope(isolate);
6622 6643
6623 v8::Persistent<v8::Context> context; 6644 v8::Persistent<v8::Context> context;
6624 { 6645 {
6625 v8::HandleScope scope(isolate); 6646 v8::HandleScope scope(isolate);
6626 context.Reset(isolate, v8::Context::New(isolate)); 6647 context.Reset(isolate, v8::Context::New(isolate));
(...skipping 237 matching lines...) Expand 10 before | Expand all | Expand 10 after
6864 CheckDebuggerUnloaded(); 6885 CheckDebuggerUnloaded();
6865 } 6886 }
6866 6887
6867 6888
6868 static int counting_message_handler_counter; 6889 static int counting_message_handler_counter;
6869 6890
6870 static void CountingMessageHandler(const v8::Debug::Message& message) { 6891 static void CountingMessageHandler(const v8::Debug::Message& message) {
6871 counting_message_handler_counter++; 6892 counting_message_handler_counter++;
6872 } 6893 }
6873 6894
6895
6874 // Test that debug messages get processed when ProcessDebugMessages is called. 6896 // Test that debug messages get processed when ProcessDebugMessages is called.
6875 TEST(ProcessDebugMessages) { 6897 TEST(ProcessDebugMessages) {
6876 DebugLocalContext env; 6898 DebugLocalContext env;
6877 v8::HandleScope scope(env->GetIsolate()); 6899 v8::HandleScope scope(env->GetIsolate());
6878 6900
6879 counting_message_handler_counter = 0; 6901 counting_message_handler_counter = 0;
6880 6902
6881 v8::Debug::SetMessageHandler2(CountingMessageHandler); 6903 v8::Debug::SetMessageHandler2(CountingMessageHandler);
6882 6904
6883 const int kBufferSize = 1000; 6905 const int kBufferSize = 1000;
(...skipping 219 matching lines...) Expand 10 before | Expand all | Expand 10 after
7103 CHECK_EQ(*context1, *context2); 7125 CHECK_EQ(*context1, *context2);
7104 } 7126 }
7105 7127
7106 7128
7107 static v8::Handle<v8::Value> expected_callback_data; 7129 static v8::Handle<v8::Value> expected_callback_data;
7108 static void DebugEventContextChecker(const v8::Debug::EventDetails& details) { 7130 static void DebugEventContextChecker(const v8::Debug::EventDetails& details) {
7109 CHECK(details.GetEventContext() == expected_context); 7131 CHECK(details.GetEventContext() == expected_context);
7110 CHECK_EQ(expected_callback_data, details.GetCallbackData()); 7132 CHECK_EQ(expected_callback_data, details.GetCallbackData());
7111 } 7133 }
7112 7134
7135
7113 // Check that event details contain context where debug event occured. 7136 // Check that event details contain context where debug event occured.
7114 TEST(DebugEventContext) { 7137 TEST(DebugEventContext) {
7115 v8::Isolate* isolate = v8::Isolate::GetCurrent(); 7138 v8::Isolate* isolate = v8::Isolate::GetCurrent();
7116 v8::HandleScope scope(isolate); 7139 v8::HandleScope scope(isolate);
7117 expected_callback_data = v8::Int32::New(2010); 7140 expected_callback_data = v8::Int32::New(2010);
7141 expected_context = v8::Context::New(isolate);
7118 v8::Debug::SetDebugEventListener2(DebugEventContextChecker, 7142 v8::Debug::SetDebugEventListener2(DebugEventContextChecker,
7119 expected_callback_data); 7143 expected_callback_data);
7120 expected_context = v8::Context::New(isolate);
7121 v8::Context::Scope context_scope(expected_context); 7144 v8::Context::Scope context_scope(expected_context);
7122 v8::Script::Compile(v8::String::New("(function(){debugger;})();"))->Run(); 7145 v8::Script::Compile(v8::String::New("(function(){debugger;})();"))->Run();
7123 expected_context.Clear(); 7146 expected_context.Clear();
7124 v8::Debug::SetDebugEventListener(NULL); 7147 v8::Debug::SetDebugEventListener(NULL);
7125 expected_context_data = v8::Handle<v8::Value>(); 7148 expected_context_data = v8::Handle<v8::Value>();
7126 CheckDebuggerUnloaded(); 7149 CheckDebuggerUnloaded();
7127 } 7150 }
7128 7151
7129 7152
7130 static void* expected_break_data; 7153 static void* expected_break_data;
(...skipping 441 matching lines...) Expand 10 before | Expand all | Expand 10 after
7572 TEST(LiveEditDisabled) { 7595 TEST(LiveEditDisabled) {
7573 v8::internal::FLAG_allow_natives_syntax = true; 7596 v8::internal::FLAG_allow_natives_syntax = true;
7574 LocalContext env; 7597 LocalContext env;
7575 v8::HandleScope scope(env->GetIsolate()); 7598 v8::HandleScope scope(env->GetIsolate());
7576 v8::Debug::SetLiveEditEnabled(false); 7599 v8::Debug::SetLiveEditEnabled(false);
7577 CompileRun("%LiveEditCompareStrings('', '')"); 7600 CompileRun("%LiveEditCompareStrings('', '')");
7578 } 7601 }
7579 7602
7580 7603
7581 #endif // ENABLE_DEBUGGER_SUPPORT 7604 #endif // ENABLE_DEBUGGER_SUPPORT
OLDNEW
« no previous file with comments | « test/cctest/test-date.cc ('k') | test/cctest/test-disasm-a64.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698