Code review changes for r31644.

R=rnystrom@google.com
BUG=

Review URL: https://codereview.chromium.org//132223003

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart/pkg/stack_trace@31679 260f80e4-7a28-3924-810f-c04153c831b5
diff --git a/pkgs/stack_trace/lib/src/frame.dart b/pkgs/stack_trace/lib/src/frame.dart
index 8544c78..7b9c7b1 100644
--- a/pkgs/stack_trace/lib/src/frame.dart
+++ b/pkgs/stack_trace/lib/src/frame.dart
@@ -11,14 +11,14 @@
 
 // #1      Foo._bar (file:///home/nweiz/code/stuff.dart:42:21)
 final _vmFrame = new RegExp(
-    r'^#\d+\s+([^\s].*) \((.+?):(\d+)(?::(\d+))?\)$');
+    r'^#\d+\s+(\S.*) \((.+?):(\d+)(?::(\d+))?\)$');
 
 //     at VW.call$0 (http://pub.dartlang.org/stuff.dart.js:560:28)
 //     at VW.call$0 (eval as fn
 //         (http://pub.dartlang.org/stuff.dart.js:560:28), efn:3:28)
 //     at http://pub.dartlang.org/stuff.dart.js:560:28
 final _v8Frame = new RegExp(
-    r'^\s*at (?:([^\s].*?)(?: \[as [^\]]+\])? \((.*)\)|(.*))$');
+    r'^\s*at (?:(\S.*?)(?: \[as [^\]]+\])? \((.*)\)|(.*))$');
 
 // http://pub.dartlang.org/stuff.dart.js:560:28
 final _v8UrlLocation = new RegExp(r'^(.*):(\d+):(\d+)$');
@@ -28,7 +28,7 @@
 // eval as function (eval as otherFunction
 //     (http://pub.dartlang.org/stuff.dart.js:560:28))
 final _v8EvalLocation = new RegExp(
-    r'^eval at (?:[^\s].*?) \((.*)\)(?:, .*?:\d+:\d+)?$');
+    r'^eval at (?:\S.*?) \((.*)\)(?:, .*?:\d+:\d+)?$');
 
 // foo$bar$0@http://pub.dartlang.org/stuff.dart.js:560:28
 // http://pub.dartlang.org/stuff.dart.js:560:28
@@ -43,7 +43,7 @@
 // foo/bar.dart 10:11 in Foo._bar
 // http://dartlang.org/foo/bar.dart in Foo._bar
 final _friendlyFrame = new RegExp(
-    r'^([^\s]+)(?: (\d+)(?::(\d+))?)?\s+([^\d][^\s]*)$');
+    r'^(\S+)(?: (\d+)(?::(\d+))?)?\s+([^\d]\S*)$');
 
 final _initialDot = new RegExp(r"^\.");
 
@@ -154,8 +154,10 @@
     // nesting for each eval performed on that line.
     parseLocation(location, member) {
       var evalMatch = _v8EvalLocation.firstMatch(location);
-      if (evalMatch != null) return parseLocation(evalMatch[1], member);
-      
+      while (evalMatch != null) {
+        location = evalMatch[1];
+        evalMatch = _v8EvalLocation.firstMatch(location);
+      }
 
       var urlMatch = _v8UrlLocation.firstMatch(location);
       if (urlMatch == null) {