Index: runtime/bin/vmservice/observatory/lib/src/service/object.dart |
diff --git a/runtime/bin/vmservice/observatory/lib/src/service/object.dart b/runtime/bin/vmservice/observatory/lib/src/service/object.dart |
index d1bad5f5cfbba99a9d9af8b62ad71f2831d6c61f..5db56bd3b840c44ea59d0e90732d06279f71f224 100644 |
--- a/runtime/bin/vmservice/observatory/lib/src/service/object.dart |
+++ b/runtime/bin/vmservice/observatory/lib/src/service/object.dart |
@@ -34,6 +34,17 @@ abstract class ServiceObject extends Observable { |
@reflectable String get serviceType => _serviceType; |
String _serviceType; |
+ bool get isBool => serviceType == 'Bool'; |
+ bool get isDouble => serviceType == 'Double'; |
+ bool get isError => serviceType == 'Error'; |
+ bool get isInstance => serviceType == 'Instance'; |
+ bool get isInt => serviceType == 'Smi' || serviceType == 'Mint' || serviceType == 'Bigint'; |
+ bool get isList => serviceType == 'GrowableObjectArray' || serviceType == 'Array'; |
+ bool get isNull => serviceType == 'Null' && id == 'objects/null'; |
+ bool get isPsuedoNull => serviceType == 'Null' && id != 'objects/null'; |
+ bool get isString => serviceType == 'String'; |
+ bool get isType => serviceType == 'Type'; |
Cutch
2014/08/28 14:46:05
Should these be on Instance and not ServiceObject?
rmacnak
2014/08/28 19:41:05
I think it makes sense to ask these questions of a
|
+ |
/// The complete service url of this object. |
@reflectable String get link => _owner.relativeLink(_id); |
@@ -82,6 +93,19 @@ abstract class ServiceObject extends Observable { |
case 'Function': |
obj = new ServiceFunction._empty(owner); |
break; |
+ case 'Array': |
+ case 'Bigint': |
+ case 'Bool': |
+ case 'Double': |
+ case 'GrowableObjectArray': |
+ case 'Instance': |
+ case 'Mint': |
+ case 'Null': |
+ case 'Smi': |
+ case 'String': |
+ case 'Type': |
+ obj = new Instance._empty(owner); |
+ break; |
case 'Isolate': |
obj = new Isolate._empty(owner.vm); |
break; |
@@ -1115,7 +1139,7 @@ class DartError extends ServiceObject { |
@observable String kind; |
@observable String message; |
- @observable ServiceMap exception; |
+ @observable Instance exception; |
@observable ServiceMap stacktrace; |
void _update(ObservableMap map, bool mapIsRef) { |
@@ -1395,6 +1419,54 @@ class Class extends ServiceObject with Coverage { |
String toString() => 'Class($vmName)'; |
} |
+class Instance extends ServiceObject { |
+ @observable Class clazz; |
+ @observable String valueAsString; |
+ @observable int size; |
+ @observable ServiceFunction closureFunc; // If a closure. |
+ @observable String name; // If a Type. |
+ |
+ @observable var type_class; |
Cutch
2014/08/28 14:46:05
typeClass
rmacnak
2014/08/28 19:41:05
Fixed
|
+ @observable var length; |
+ @observable var fields; |
+ @observable var nativeFields; |
+ @observable var elements; |
+ @observable var user_name; |
Cutch
2014/08/28 14:46:05
userName
rmacnak
2014/08/28 19:41:05
Fixed
|
+ |
+ bool get isClosure => closureFunc != null; |
+ |
+ Instance._empty(ServiceObjectOwner owner) : super._empty(owner); |
+ |
+ void _update(ObservableMap map, bool mapIsRef) { |
+ // Extract full properties. |
+ _upgradeCollection(map, isolate); |
+ |
+ clazz = map['class']; |
+ valueAsString = map['valueAsString']; |
+ size = map['size']; |
+ closureFunc = map['closureFunc']; |
+ name = map['name']; |
+ |
+ if (mapIsRef) { |
+ return; |
+ } |
+ |
+ nativeFields = map['nativeFields']; |
+ fields = map['fields']; |
+ length = map['length']; |
+ elements = map['elements']; |
+ type_class = map['type_class']; |
+ user_name = map['user_name']; |
+ |
+ // We are fully loaded. |
+ _loaded = true; |
+ } |
+ |
+ String get shortName => valueAsString != null ? valueAsString : 'a ${clazz.name}'; |
+ |
+ String toString() => 'Instance($shortName)'; |
+} |
+ |
// TODO(koda): Sync this with VM. |
class FunctionKind { |
final String _strValue; |
@@ -2221,8 +2293,7 @@ class Socket extends ServiceObject { |
// Convert any ServiceMaps representing a null instance into an actual null. |
_convertNull(obj) { |
- if (obj is ServiceMap && |
- obj.serviceType == 'Null') { |
+ if (obj.isNull) { |
return null; |
} |
return obj; |