Index: test/cctest/test-debug.cc |
=================================================================== |
--- test/cctest/test-debug.cc (revision 1693) |
+++ test/cctest/test-debug.cc (working copy) |
@@ -498,7 +498,7 @@ |
// --- |
-// Source for The JavaScript function which picks out the function name on the |
+// Source for The JavaScript function which picks out the function name of the |
// top frame. |
const char* frame_function_name_source = |
"function frame_function_name(exec_state) {" |
@@ -507,6 +507,24 @@ |
v8::Local<v8::Function> frame_function_name; |
+// Source for The JavaScript function which picks out the source line for the |
+// top frame. |
+const char* frame_source_line_source = |
+ "function frame_source_line(exec_state) {" |
+ " return exec_state.frame(0).sourceLine();" |
+ "}"; |
+v8::Local<v8::Function> frame_source_line; |
+ |
+ |
+// Source for The JavaScript function which picks out the source column for the |
+// top frame. |
+const char* frame_source_column_source = |
+ "function frame_source_column(exec_state) {" |
+ " return exec_state.frame(0).sourceColumn();" |
+ "}"; |
+v8::Local<v8::Function> frame_source_column; |
+ |
+ |
// Source for The JavaScript function which returns the number of frames. |
static const char* frame_count_source = |
"function frame_count(exec_state) {" |
@@ -518,6 +536,10 @@ |
// Global variable to store the last function hit - used by some tests. |
char last_function_hit[80]; |
+// Global variables to store the last source position - used by some tests. |
+int last_source_line = -1; |
+int last_source_column = -1; |
+ |
// Debug event handler which counts the break points which have been hit. |
int break_point_hit_count = 0; |
static void DebugEventBreakPointHitCount(v8::DebugEvent event, |
@@ -544,6 +566,26 @@ |
function_name->WriteAscii(last_function_hit); |
} |
} |
+ |
+ if (!frame_source_line.IsEmpty()) { |
+ // Get the source line. |
+ const int argc = 1; |
+ v8::Handle<v8::Value> argv[argc] = { exec_state }; |
+ v8::Handle<v8::Value> result = frame_source_line->Call(exec_state, |
+ argc, argv); |
+ CHECK(result->IsNumber()); |
+ last_source_line = result->Int32Value(); |
+ } |
+ |
+ if (!frame_source_column.IsEmpty()) { |
+ // Get the source column. |
+ const int argc = 1; |
+ v8::Handle<v8::Value> argv[argc] = { exec_state }; |
+ v8::Handle<v8::Value> result = frame_source_column->Call(exec_state, |
+ argc, argv); |
+ CHECK(result->IsNumber()); |
+ last_source_column = result->Int32Value(); |
+ } |
} |
} |
@@ -994,6 +1036,17 @@ |
break_point_hit_count = 0; |
v8::HandleScope scope; |
DebugLocalContext env; |
+ |
+ // Create a functions for checking the source line and column when hitting |
+ // a break point. |
+ frame_source_line = CompileFunction(&env, |
+ frame_source_line_source, |
+ "frame_source_line"); |
+ frame_source_column = CompileFunction(&env, |
+ frame_source_column_source, |
+ "frame_source_column"); |
+ |
+ |
v8::Debug::SetDebugEventListener(DebugEventBreakPointHitCount, |
v8::Undefined()); |
v8::Script::Compile(v8::String::New("function foo(){}"))->Run(); |
@@ -1008,8 +1061,12 @@ |
int bp = SetBreakPoint(foo, 0); |
foo->Call(env->Global(), 0, NULL); |
CHECK_EQ(1, break_point_hit_count); |
+ CHECK_EQ(0, last_source_line); |
+ CHECK_EQ(16, last_source_column); |
foo->Call(env->Global(), 0, NULL); |
CHECK_EQ(2, break_point_hit_count); |
+ CHECK_EQ(0, last_source_line); |
+ CHECK_EQ(16, last_source_column); |
// Run without breakpoints. |
ClearBreakPoint(bp); |
@@ -3663,15 +3720,6 @@ |
} |
-// Source for a JavaScript function which returns the source line for the top |
-// frame. |
-static const char* frame_source_line_source = |
- "function frame_source_line(exec_state) {" |
- " return exec_state.frame(0).sourceLine();" |
- "}"; |
-v8::Handle<v8::Function> frame_source_line; |
- |
- |
// Source for a JavaScript function which returns the data parameter of a |
// function called in the context of the debugger. If no data parameter is |
// passed it throws an exception. |