Index: runtime/observatory/lib/src/service/object.dart |
diff --git a/runtime/observatory/lib/src/service/object.dart b/runtime/observatory/lib/src/service/object.dart |
index d2f44d9ac82824df9ad02a6eecb11cb42b63f329..dadf631777f1efadaa2d00e4c34c556d39757625 100644 |
--- a/runtime/observatory/lib/src/service/object.dart |
+++ b/runtime/observatory/lib/src/service/object.dart |
@@ -927,6 +927,8 @@ abstract class VM extends ServiceObjectOwner implements M.VM { |
} |
class FakeVM extends VM { |
+ String get displayName => name; |
+ |
final Map _responses = {}; |
FakeVM(Map responses) { |
if (responses == null) { |
@@ -1851,16 +1853,29 @@ class ServiceMap extends ServiceObject implements ObservableMap { |
String toString() => "ServiceMap($_map)"; |
} |
+M.ErrorKind stringToErrorKind(String value) { |
+ switch(value) { |
+ case 'UnhandledException': return M.ErrorKind.UnhandledException; |
+ case 'LanguageError': return M.ErrorKind.UnhandledException; |
+ case 'InternalError': return M.ErrorKind.InternalError; |
+ case 'TerminationError': return M.ErrorKind.TerminationError; |
+ } |
+ Logger.root.severe('Unrecognized error kind: $value'); |
+ throw new FallThroughError(); |
+} |
+ |
/// A [DartError] is peered to a Dart Error object. |
-class DartError extends ServiceObject { |
+class DartError extends ServiceObject implements M.Error { |
DartError._empty(ServiceObject owner) : super._empty(owner); |
+ M.ErrorKind kind; |
@observable String message; |
@observable Instance exception; |
@observable Instance stacktrace; |
void _update(ObservableMap map, bool mapIsRef) { |
message = map['message']; |
+ kind = stringToErrorKind(map['kind']); |
exception = new ServiceObject._fromMap(owner, map['exception']); |
stacktrace = new ServiceObject._fromMap(owner, map['stacktrace']); |
name = 'DartError($message)'; |
@@ -1916,13 +1931,15 @@ class ServiceEvent extends ServiceObject { |
@observable String kind; |
@observable DateTime timestamp; |
+ List<M.Breakpoint> pauseBreakpoints; |
@observable Breakpoint breakpoint; |
@observable Frame topFrame; |
+ @observable DartError error; |
@observable String extensionRPC; |
@observable Instance exception; |
@observable Instance reloadError; |
@observable bool atAsyncSuspension; |
- @observable ServiceObject inspectee; |
+ @observable Instance inspectee; |
@observable ByteData data; |
@observable int count; |
@observable String reason; |
@@ -1960,13 +1977,16 @@ class ServiceEvent extends ServiceObject { |
if (map['breakpoint'] != null) { |
breakpoint = map['breakpoint']; |
} |
- // TODO(turnidge): Expose the full list of breakpoints. For now |
- // we just pretend like there is only one active breakpoint. |
if (map['pauseBreakpoints'] != null) { |
- var pauseBpts = map['pauseBreakpoints']; |
- if (pauseBpts.length > 0) { |
- breakpoint = pauseBpts[0]; |
+ pauseBreakpoints = map['pauseBreakpoints']; |
+ if (pauseBreakpoints.length > 0) { |
+ breakpoint = pauseBreakpoints[0]; |
} |
+ } else { |
+ pauseBreakpoints = const []; |
+ } |
+ if (map['error'] != null) { |
+ error = map['error']; |
} |
if (map['extensionRPC'] != null) { |
extensionRPC = map['extensionRPC']; |
@@ -2243,7 +2263,7 @@ class Class extends HeapObject implements M.ClassRef { |
@observable SourceLocation location; |
- @observable ServiceMap error; |
+ @observable DartError error; |
@observable int vmCid; |
final Allocations newSpace = new Allocations(); |
@@ -2370,7 +2390,7 @@ class Class extends HeapObject implements M.ClassRef { |
String toString() => 'Class($vmName)'; |
} |
-class Instance extends HeapObject { |
+class Instance extends HeapObject implements M.InstanceRef { |
@observable String kind; |
@observable String valueAsString; // If primitive. |
@observable bool valueAsStringIsTruncated; |