Index: dart/tests/standalone/debugger/local_function_test.dart |
=================================================================== |
--- dart/tests/standalone/debugger/local_function_test.dart (revision 31530) |
+++ dart/tests/standalone/debugger/local_function_test.dart (working copy) |
@@ -14,16 +14,38 @@ |
// Check that if a breakpoint is requested on the line containing the |
// one-liner with a local function below, the breakpoint gets set in |
// the outer function. |
-foo(x) => (n) => x * n; |
+foo(x) => (n) => x * n; // Breakpoint 1 on this line. |
// Check that if a breakpoint is requested on the line "return n*x" |
// below, the breakpoint is set in the local function (closure). |
bar(x) { |
return (n) { |
- return n * x; |
+ return n * x; // Breakpoint 2 on this line. |
}; |
} |
+// Check that setting a breakpoint works in the case where the |
+// class has not been parsed yet. |
+// No reference to class C must appear in main(), so that the class is not |
+// yet parsed when the breakpoint in the closure nested in the constructor |
+// is set. |
+class C { |
+ var closure; |
+ C() { |
+ closure = () { |
+ var z = 10; // Breakpoint 3 on this line. |
+ z = z * 2; |
+ return z; |
+ }; |
+ } |
+} |
+ |
+checkBpInLazilyParsedClass() { |
+ var c = new C(); |
+ c.closure(); // Expected to hit breakpoint. |
+} |
+ |
+ |
main(List<String> arguments) { |
if (RunScript(testScript, arguments)) return; |
print("Hello from debuggee"); |
@@ -31,16 +53,20 @@ |
print(f(5)); |
var b = bar(10); |
print(b(10)); // Hits breakpoint. |
+ checkBpInLazilyParsedClass(); |
} |
// Expected debugger events and commands. |
var testScript = [ |
MatchFrame(0, "main"), // Top frame in trace is function "main". |
- SetBreakpoint(17), // Set breakpoint in function foo. |
- SetBreakpoint(23), // Set breakpoint in local function inside bar. |
+ SetBreakpoint(17), // Breakpoint 1 in function foo. |
+ SetBreakpoint(23), // Breakpoint 2 in local function inside bar. |
+ SetBreakpoint(36), // Breakpoint 3 in local function inside constructor C. |
Resume(), |
MatchFrames(["foo", "main"]), |
Resume(), |
MatchFrames(["<anonymous closure>", "main"]), |
- Resume() |
+ Resume(), |
+ MatchFrames(["C.<anonymous closure>", "checkBpInLazilyParsedClass"]), |
+ Resume(), |
]; |