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

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

Issue 9285013: Fix building with clang (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: . Created 8 years, 11 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-compiler.cc ('k') | test/cctest/test-deoptimization.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 2011 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
11 // with the distribution. 11 // with the distribution.
(...skipping 837 matching lines...) Expand 10 before | Expand all | Expand 10 after
849 static void DebugEventRemoveBreakPoint(v8::DebugEvent event, 849 static void DebugEventRemoveBreakPoint(v8::DebugEvent event,
850 v8::Handle<v8::Object> exec_state, 850 v8::Handle<v8::Object> exec_state,
851 v8::Handle<v8::Object> event_data, 851 v8::Handle<v8::Object> event_data,
852 v8::Handle<v8::Value> data) { 852 v8::Handle<v8::Value> data) {
853 v8::internal::Debug* debug = v8::internal::Isolate::Current()->debug(); 853 v8::internal::Debug* debug = v8::internal::Isolate::Current()->debug();
854 // When hitting a debug event listener there must be a break set. 854 // When hitting a debug event listener there must be a break set.
855 CHECK_NE(debug->break_id(), 0); 855 CHECK_NE(debug->break_id(), 0);
856 856
857 if (event == v8::Break) { 857 if (event == v8::Break) {
858 break_point_hit_count++; 858 break_point_hit_count++;
859 v8::Handle<v8::Function> fun(v8::Handle<v8::Function>::Cast(data)); 859 CHECK(data->IsFunction());
860 ClearBreakPoint(debug_event_remove_break_point); 860 ClearBreakPoint(debug_event_remove_break_point);
861 } 861 }
862 } 862 }
863 863
864 864
865 // Debug event handler which counts break points hit and performs a step 865 // Debug event handler which counts break points hit and performs a step
866 // afterwards. 866 // afterwards.
867 StepAction step_action = StepIn; // Step action to perform when stepping. 867 StepAction step_action = StepIn; // Step action to perform when stepping.
868 static void DebugEventStep(v8::DebugEvent event, 868 static void DebugEventStep(v8::DebugEvent event,
869 v8::Handle<v8::Object> exec_state, 869 v8::Handle<v8::Object> exec_state,
(...skipping 570 matching lines...) Expand 10 before | Expand all | Expand 10 after
1440 break_point_hit_count = 0; 1440 break_point_hit_count = 0;
1441 v8::HandleScope scope; 1441 v8::HandleScope scope;
1442 DebugLocalContext env; 1442 DebugLocalContext env;
1443 1443
1444 v8::Debug::SetDebugEventListener(DebugEventBreakPointHitCount, 1444 v8::Debug::SetDebugEventListener(DebugEventBreakPointHitCount,
1445 v8::Undefined()); 1445 v8::Undefined());
1446 v8::Local<v8::Function> foo; 1446 v8::Local<v8::Function> foo;
1447 1447
1448 // Test IC store break point with garbage collection. 1448 // Test IC store break point with garbage collection.
1449 { 1449 {
1450 v8::Local<v8::Function> bar( 1450 CompileFunction(&env, "function foo(){}", "foo");
1451 CompileFunction(&env, "function foo(){}", "foo"));
1452 foo = CompileFunction(&env, "function foo(){bar=0;}", "foo"); 1451 foo = CompileFunction(&env, "function foo(){bar=0;}", "foo");
1453 SetBreakPoint(foo, 0); 1452 SetBreakPoint(foo, 0);
1454 } 1453 }
1455 CallAndGC(env->Global(), foo); 1454 CallAndGC(env->Global(), foo);
1456 1455
1457 // Test IC load break point with garbage collection. 1456 // Test IC load break point with garbage collection.
1458 { 1457 {
1459 v8::Local<v8::Function> bar( 1458 CompileFunction(&env, "function foo(){}", "foo");
1460 CompileFunction(&env, "function foo(){}", "foo"));
1461 foo = CompileFunction(&env, "bar=1;function foo(){var x=bar;}", "foo"); 1459 foo = CompileFunction(&env, "bar=1;function foo(){var x=bar;}", "foo");
1462 SetBreakPoint(foo, 0); 1460 SetBreakPoint(foo, 0);
1463 } 1461 }
1464 CallAndGC(env->Global(), foo); 1462 CallAndGC(env->Global(), foo);
1465 1463
1466 // Test IC call break point with garbage collection. 1464 // Test IC call break point with garbage collection.
1467 { 1465 {
1468 v8::Local<v8::Function> bar( 1466 CompileFunction(&env, "function foo(){}", "foo");
1469 CompileFunction(&env, "function foo(){}", "foo"));
1470 foo = CompileFunction(&env, 1467 foo = CompileFunction(&env,
1471 "function bar(){};function foo(){bar();}", 1468 "function bar(){};function foo(){bar();}",
1472 "foo"); 1469 "foo");
1473 SetBreakPoint(foo, 0); 1470 SetBreakPoint(foo, 0);
1474 } 1471 }
1475 CallAndGC(env->Global(), foo); 1472 CallAndGC(env->Global(), foo);
1476 1473
1477 // Test return break point with garbage collection. 1474 // Test return break point with garbage collection.
1478 { 1475 {
1479 v8::Local<v8::Function> bar( 1476 CompileFunction(&env, "function foo(){}", "foo");
1480 CompileFunction(&env, "function foo(){}", "foo"));
1481 foo = CompileFunction(&env, "function foo(){}", "foo"); 1477 foo = CompileFunction(&env, "function foo(){}", "foo");
1482 SetBreakPoint(foo, 0); 1478 SetBreakPoint(foo, 0);
1483 } 1479 }
1484 CallAndGC(env->Global(), foo); 1480 CallAndGC(env->Global(), foo);
1485 1481
1486 // Test non IC break point with garbage collection. 1482 // Test non IC break point with garbage collection.
1487 { 1483 {
1488 v8::Local<v8::Function> bar( 1484 CompileFunction(&env, "function foo(){}", "foo");
1489 CompileFunction(&env, "function foo(){}", "foo"));
1490 foo = CompileFunction(&env, "function foo(){var bar=0;}", "foo"); 1485 foo = CompileFunction(&env, "function foo(){var bar=0;}", "foo");
1491 SetBreakPoint(foo, 0); 1486 SetBreakPoint(foo, 0);
1492 } 1487 }
1493 CallAndGC(env->Global(), foo); 1488 CallAndGC(env->Global(), foo);
1494 1489
1495 1490
1496 v8::Debug::SetDebugEventListener(NULL); 1491 v8::Debug::SetDebugEventListener(NULL);
1497 CheckDebuggerUnloaded(); 1492 CheckDebuggerUnloaded();
1498 } 1493 }
1499 1494
(...skipping 2244 matching lines...) Expand 10 before | Expand all | Expand 10 after
3744 // check that uncaught exceptions are still returned even if there is a break 3739 // check that uncaught exceptions are still returned even if there is a break
3745 // for them. 3740 // for them.
3746 TEST(BreakOnException) { 3741 TEST(BreakOnException) {
3747 v8::HandleScope scope; 3742 v8::HandleScope scope;
3748 DebugLocalContext env; 3743 DebugLocalContext env;
3749 env.ExposeDebug(); 3744 env.ExposeDebug();
3750 3745
3751 v8::internal::Isolate::Current()->TraceException(false); 3746 v8::internal::Isolate::Current()->TraceException(false);
3752 3747
3753 // Create functions for testing break on exception. 3748 // Create functions for testing break on exception.
3754 v8::Local<v8::Function> throws( 3749 CompileFunction(&env, "function throws(){throw 1;}", "throws");
3755 CompileFunction(&env, "function throws(){throw 1;}", "throws"));
3756 v8::Local<v8::Function> caught = 3750 v8::Local<v8::Function> caught =
3757 CompileFunction(&env, 3751 CompileFunction(&env,
3758 "function caught(){try {throws();} catch(e) {};}", 3752 "function caught(){try {throws();} catch(e) {};}",
3759 "caught"); 3753 "caught");
3760 v8::Local<v8::Function> notCaught = 3754 v8::Local<v8::Function> notCaught =
3761 CompileFunction(&env, "function notCaught(){throws();}", "notCaught"); 3755 CompileFunction(&env, "function notCaught(){throws();}", "notCaught");
3762 3756
3763 v8::V8::AddMessageListener(MessageCallbackCount); 3757 v8::V8::AddMessageListener(MessageCallbackCount);
3764 v8::Debug::SetDebugEventListener(DebugEventCounter); 3758 v8::Debug::SetDebugEventListener(DebugEventCounter);
3765 3759
(...skipping 1776 matching lines...) Expand 10 before | Expand all | Expand 10 after
5542 5536
5543 // Now set a debug message handler. 5537 // Now set a debug message handler.
5544 break_point_hit_count = 0; 5538 break_point_hit_count = 0;
5545 v8::Debug::SetMessageHandler2(MessageHandlerBreakPointHitCount); 5539 v8::Debug::SetMessageHandler2(MessageHandlerBreakPointHitCount);
5546 { 5540 {
5547 v8::HandleScope scope; 5541 v8::HandleScope scope;
5548 5542
5549 // Get the test functions again. 5543 // Get the test functions again.
5550 v8::Local<v8::Function> foo(v8::Local<v8::Function>::Cast( 5544 v8::Local<v8::Function> foo(v8::Local<v8::Function>::Cast(
5551 env->Global()->Get(v8::String::New("foo")))); 5545 env->Global()->Get(v8::String::New("foo"))));
5552 v8::Local<v8::Function> bar(v8::Local<v8::Function>::Cast(
5553 env->Global()->Get(v8::String::New("foo"))));
5554 5546
5555 foo->Call(env->Global(), 0, NULL); 5547 foo->Call(env->Global(), 0, NULL);
5556 CHECK_EQ(0, break_point_hit_count); 5548 CHECK_EQ(0, break_point_hit_count);
5557 5549
5558 // Set break points and run again. 5550 // Set break points and run again.
5559 SetBreakPoint(foo, 0); 5551 SetBreakPoint(foo, 0);
5560 SetBreakPoint(foo, 4); 5552 SetBreakPoint(foo, 4);
5561 foo->Call(env->Global(), 0, NULL); 5553 foo->Call(env->Global(), 0, NULL);
5562 CHECK_EQ(2, break_point_hit_count); 5554 CHECK_EQ(2, break_point_hit_count);
5563 } 5555 }
(...skipping 457 matching lines...) Expand 10 before | Expand all | Expand 10 after
6021 6013
6022 6014
6023 TEST(DebugGetLoadedScripts) { 6015 TEST(DebugGetLoadedScripts) {
6024 v8::HandleScope scope; 6016 v8::HandleScope scope;
6025 DebugLocalContext env; 6017 DebugLocalContext env;
6026 env.ExposeDebug(); 6018 env.ExposeDebug();
6027 6019
6028 EmptyExternalStringResource source_ext_str; 6020 EmptyExternalStringResource source_ext_str;
6029 v8::Local<v8::String> source = v8::String::NewExternal(&source_ext_str); 6021 v8::Local<v8::String> source = v8::String::NewExternal(&source_ext_str);
6030 v8::Handle<v8::Script> evil_script(v8::Script::Compile(source)); 6022 v8::Handle<v8::Script> evil_script(v8::Script::Compile(source));
6023 // "use" evil_script to make the compiler happy.
6024 (void) evil_script;
6031 Handle<i::ExternalTwoByteString> i_source( 6025 Handle<i::ExternalTwoByteString> i_source(
6032 i::ExternalTwoByteString::cast(*v8::Utils::OpenHandle(*source))); 6026 i::ExternalTwoByteString::cast(*v8::Utils::OpenHandle(*source)));
6033 // This situation can happen if source was an external string disposed 6027 // This situation can happen if source was an external string disposed
6034 // by its owner. 6028 // by its owner.
6035 i_source->set_resource(0); 6029 i_source->set_resource(0);
6036 6030
6037 bool allow_natives_syntax = i::FLAG_allow_natives_syntax; 6031 bool allow_natives_syntax = i::FLAG_allow_natives_syntax;
6038 i::FLAG_allow_natives_syntax = true; 6032 i::FLAG_allow_natives_syntax = true;
6039 CompileRun( 6033 CompileRun(
6040 "var scripts = %DebugGetLoadedScripts();" 6034 "var scripts = %DebugGetLoadedScripts();"
(...skipping 627 matching lines...) Expand 10 before | Expand all | Expand 10 after
6668 } 6662 }
6669 6663
6670 6664
6671 static void BreakMessageHandler(const v8::Debug::Message& message) { 6665 static void BreakMessageHandler(const v8::Debug::Message& message) {
6672 i::Isolate* isolate = i::Isolate::Current(); 6666 i::Isolate* isolate = i::Isolate::Current();
6673 if (message.IsEvent() && message.GetEvent() == v8::Break) { 6667 if (message.IsEvent() && message.GetEvent() == v8::Break) {
6674 // Count the number of breaks. 6668 // Count the number of breaks.
6675 break_point_hit_count++; 6669 break_point_hit_count++;
6676 6670
6677 v8::HandleScope scope; 6671 v8::HandleScope scope;
6678 v8::Handle<v8::String> json(message.GetJSON()); 6672 message.GetJSON();
6679 6673
6680 SendContinueCommand(); 6674 SendContinueCommand();
6681 } else if (message.IsEvent() && message.GetEvent() == v8::AfterCompile) { 6675 } else if (message.IsEvent() && message.GetEvent() == v8::AfterCompile) {
6682 v8::HandleScope scope; 6676 v8::HandleScope scope;
6683 6677
6684 bool is_debug_break = isolate->stack_guard()->IsDebugBreak(); 6678 bool is_debug_break = isolate->stack_guard()->IsDebugBreak();
6685 // Force DebugBreak flag while serializer is working. 6679 // Force DebugBreak flag while serializer is working.
6686 isolate->stack_guard()->DebugBreak(); 6680 isolate->stack_guard()->DebugBreak();
6687 6681
6688 // Force serialization to trigger some internal JS execution. 6682 // Force serialization to trigger some internal JS execution.
6689 v8::Handle<v8::String> json(message.GetJSON()); 6683 message.GetJSON();
6690 6684
6691 // Restore previous state. 6685 // Restore previous state.
6692 if (is_debug_break) { 6686 if (is_debug_break) {
6693 isolate->stack_guard()->DebugBreak(); 6687 isolate->stack_guard()->DebugBreak();
6694 } else { 6688 } else {
6695 isolate->stack_guard()->Continue(i::DEBUGBREAK); 6689 isolate->stack_guard()->Continue(i::DEBUGBREAK);
6696 } 6690 }
6697 } 6691 }
6698 } 6692 }
6699 6693
(...skipping 586 matching lines...) Expand 10 before | Expand all | Expand 10 after
7286 TestDebugBreakInLoop("for (;;) {", loop_bodies, "}"); 7280 TestDebugBreakInLoop("for (;;) {", loop_bodies, "}");
7287 TestDebugBreakInLoop("for (;a == 1;) {", loop_bodies, "}"); 7281 TestDebugBreakInLoop("for (;a == 1;) {", loop_bodies, "}");
7288 7282
7289 // Get rid of the debug event listener. 7283 // Get rid of the debug event listener.
7290 v8::Debug::SetDebugEventListener(NULL); 7284 v8::Debug::SetDebugEventListener(NULL);
7291 CheckDebuggerUnloaded(); 7285 CheckDebuggerUnloaded();
7292 } 7286 }
7293 7287
7294 7288
7295 #endif // ENABLE_DEBUGGER_SUPPORT 7289 #endif // ENABLE_DEBUGGER_SUPPORT
OLDNEW
« no previous file with comments | « test/cctest/test-compiler.cc ('k') | test/cctest/test-deoptimization.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698