Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(21)

Unified Diff: lib/runtime/dart_sdk.js

Issue 1997473007: Fix debugger (Closed) Base URL: git@github.com:dart-lang/dev_compiler.git@master
Patch Set: Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
Download patch
« no previous file with comments | « no previous file | tool/input_sdk/private/ddc_runtime/rtti.dart » ('j') | tool/input_sdk/private/debugger.dart » ('J')
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: lib/runtime/dart_sdk.js
diff --git a/lib/runtime/dart_sdk.js b/lib/runtime/dart_sdk.js
index 934aca9aa5b11a4c1772babc1a2d3c7f43c340f0..e76c9c8afbb11a36f082317877f9217fbe5ecc83 100644
--- a/lib/runtime/dart_sdk.js
+++ b/lib/runtime/dart_sdk.js
@@ -693,6 +693,9 @@ dart_library.library('dart_sdk', null, /* Imports */[
if (result === Function) {
return dart.jsobject;
}
+ if (result == null) {
+ return dart.jsobject;
+ }
return result;
};
dart.wrapType = function(type) {
@@ -1445,10 +1448,6 @@ dart_library.library('dart_sdk', null, /* Imports */[
return typeof object;
};
dart.lazyFn(_debugger._typeof, () => [core.String, [dart.dynamic]]);
- _debugger._instanceof = function(object, clazz) {
- return object instanceof clazz;
- };
- dart.lazyFn(_debugger._instanceof, () => [core.bool, [dart.dynamic, dart.dynamic]]);
_debugger.getOwnPropertyNames = function(object) {
return dart.list(Object.getOwnPropertyNames(object), core.String);
};
@@ -1472,11 +1471,6 @@ dart_library.library('dart_sdk', null, /* Imports */[
}),
names: ['getProperty', 'setProperty']
});
- _debugger.isRegularDartObject = function(object) {
- if (_debugger._typeof(object) == 'function') return false;
- return _debugger._instanceof(object, core.Object);
- };
- dart.lazyFn(_debugger.isRegularDartObject, () => [core.bool, [dart.dynamic]]);
_debugger.getObjectTypeName = function(object) {
let reifiedType = dart.getReifiedType(object);
if (reifiedType == null) {
@@ -1501,7 +1495,7 @@ dart_library.library('dart_sdk', null, /* Imports */[
if (preview != null) return preview;
return dart.toString(object);
} catch (e) {
- return '<Exception thrown>';
+ return dart.str`<Exception thrown> ${e}`;
}
};
@@ -1530,6 +1524,12 @@ dart_library.library('dart_sdk', null, /* Imports */[
this.value = value;
this.skipDart = skipDart == true;
}
+ ['=='](other) {
+ return dart.is(other, _debugger.NameValuePair) && other.name == this.name;
+ }
+ get hashCode() {
+ return dart.hashCode(this.name);
+ }
};
dart.setSignature(_debugger.NameValuePair, {
constructors: () => ({new: [_debugger.NameValuePair, [], {name: core.String, value: core.Object, skipDart: core.bool}]})
@@ -1620,12 +1620,19 @@ dart_library.library('dart_sdk', null, /* Imports */[
toJsonML: [dart.dynamic, []]
})
});
+ _debugger.isNativeJavaScriptObject = function(object) {
+ let type = _debugger._typeof(object);
+ return type != 'object' && type != 'function' || dart.is(object, dart.JSObject) || dart.is(object, html$.Node);
+ };
+ dart.lazyFn(_debugger.isNativeJavaScriptObject, () => [core.bool, [dart.dynamic]]);
_debugger.JsonMLFormatter = class JsonMLFormatter extends core.Object {
new(simpleFormatter) {
this[_simpleFormatter] = simpleFormatter;
}
header(object, config) {
- if (core.identical(config, _debugger.skipDartConfig)) return null;
+ if (core.identical(config, _debugger.skipDartConfig) || dart.test(_debugger.isNativeJavaScriptObject(object))) {
+ return null;
+ }
let c = this[_simpleFormatter].preview(object);
if (c == null) return null;
let element = new _debugger.JsonMLElement('span');
@@ -1681,27 +1688,45 @@ dart_library.library('dart_sdk', null, /* Imports */[
this[_formatters] = dart.list([new _debugger.FunctionFormatter(), new _debugger.MapFormatter(), new _debugger.IterableFormatter(), new _debugger.MapEntryFormatter(), new _debugger.ClassMetadataFormatter(), new _debugger.HeritageClauseFormatter(), new _debugger.ObjectFormatter()], _debugger.Formatter);
}
preview(object) {
- if (object == null) return 'null';
- if (typeof object == 'number') return dart.toString(object);
- if (typeof object == 'string') return dart.str`"${object}"`;
- for (let formatter of this[_formatters]) {
- if (dart.test(formatter.accept(object))) return formatter.preview(object);
+ try {
+ if (object == null || typeof object == 'number' || typeof object == 'string' || dart.test(_debugger.isNativeJavaScriptObject(object))) {
+ return dart.toString(object);
+ }
+ for (let formatter of this[_formatters]) {
+ if (dart.test(formatter.accept(object))) return formatter.preview(object);
+ }
+ } catch (e) {
+ let trace = dart.stackTrace(e);
+ html$.window[dartx.console].error(dart.str`Caught exception ${e}\n trace:\n${trace}`);
}
+
return null;
}
hasChildren(object) {
if (object == null) return false;
- for (let formatter of this[_formatters]) {
- if (dart.test(formatter.accept(object))) return formatter.hasChildren(object);
+ try {
+ for (let formatter of this[_formatters]) {
+ if (dart.test(formatter.accept(object))) return formatter.hasChildren(object);
+ }
+ } catch (e) {
+ let trace = dart.stackTrace(e);
+ html$.window[dartx.console].error(dart.str`[hasChildren] Caught exception ${e}\n trace:\n${trace}`);
}
+
return false;
}
children(object) {
- if (object != null) {
- for (let formatter of this[_formatters]) {
- if (dart.test(formatter.accept(object))) return formatter.children(object);
+ try {
+ if (object != null) {
+ for (let formatter of this[_formatters]) {
+ if (dart.test(formatter.accept(object))) return formatter.children(object);
+ }
}
+ } catch (e) {
+ let trace = dart.stackTrace(e);
+ html$.window[dartx.console].error(dart.str`Caught exception ${e}\n trace:\n${trace}`);
}
+
return dart.list([], _debugger.NameValuePair);
}
};
@@ -1713,10 +1738,9 @@ dart_library.library('dart_sdk', null, /* Imports */[
children: [core.List$(_debugger.NameValuePair), [dart.dynamic]]
})
});
- const _addMembers = Symbol('_addMembers');
_debugger.ObjectFormatter = class ObjectFormatter extends _debugger.Formatter {
accept(object) {
- return _debugger.isRegularDartObject(object);
+ return !dart.notNull(_debugger.isNativeJavaScriptObject(object));
}
preview(object) {
return _debugger.getObjectTypeName(object);
@@ -1724,50 +1748,58 @@ dart_library.library('dart_sdk', null, /* Imports */[
hasChildren(object) {
return true;
}
- [_addMembers](current, object, properties) {
- let className = dart.dload(dart.getReifiedType(current), 'name');
- for (let name of _debugger.getOwnPropertyNames(current)) {
- if (name == 'constructor' || name == '__proto__' || dart.equals(name, className)) continue;
- if (dart.test(_debugger.hasMethod(object, name))) {
- continue;
- }
- let value = null;
- try {
- value = _debugger.JSNative.getProperty(object, name);
- } catch (e) {
- value = '<Exception thrown>';
- }
+ children(object) {
+ let properties = collection.LinkedHashSet$(_debugger.NameValuePair).new();
+ this.addMetadataChildren(object, properties);
+ let protoChain = dart.list([], core.Object);
+ let current = object;
+ while (current != null && !dart.test(_debugger.isNativeJavaScriptObject(current)) && current !== Object.prototype) {
+ protoChain[dartx.add](current);
+ current = _debugger.JSNative.getProperty(current, '__proto__');
+ }
+ for (/* Unimplemented unknown name */current of protoChain) {
+ for (let symbol of _debugger.getOwnPropertySymbols(current)) {
+ let dartName = _debugger.symbolName(symbol);
+ if (dart.test(_debugger.hasMethod(object, dartName))) {
+ continue;
+ }
+ let dartXPrefix = 'dartx.';
+ if (dart.test(dartName[dartx.startsWith](dartXPrefix))) {
+ dartName = dartName[dartx.substring](dartXPrefix[dartx.length]);
+ } else if (!dart.test(dartName[dartx.startsWith]('_'))) {
+ continue;
+ }
+ let value = null;
+ try {
+ value = _debugger.JSNative.getProperty(object, symbol);
+ } catch (e) {
+ value = dart.str`<Exception thrown> ${e}`;
+ }
- properties[dartx.add](new _debugger.NameValuePair({name: name, value: value}));
- }
- for (let symbol of _debugger.getOwnPropertySymbols(current)) {
- let dartName = _debugger.symbolName(symbol);
- if (dart.test(_debugger.hasMethod(object, dartName))) {
- continue;
- }
- let value = null;
- try {
- value = _debugger.JSNative.getProperty(object, symbol);
- } catch (e) {
- value = '<Exception thrown>';
+ properties.add(new _debugger.NameValuePair({name: dartName, value: value}));
}
-
- properties[dartx.add](new _debugger.NameValuePair({name: dartName, value: value}));
}
- let base = _debugger.JSNative.getProperty(current, '__proto__');
- if (base == null) return;
- if (dart.test(_debugger.isRegularDartObject(base))) {
- this[_addMembers](base, object, properties);
+ for (/* Unimplemented unknown name */current of protoChain) {
+ let className = dart.dload(dart.getReifiedType(current), 'name');
+ for (let name of _debugger.getOwnPropertyNames(current)) {
+ if (dart.test(dart.dsend(/* Unimplemented unknown name */customNames, 'contains', name)) || dart.equals(name, className)) continue;
+ if (dart.test(_debugger.hasMethod(object, name))) {
+ continue;
+ }
+ let value = null;
+ try {
+ value = _debugger.JSNative.getProperty(object, name);
+ } catch (e) {
+ value = dart.str`<Exception thrown> ${e}`;
+ }
+
+ properties.add(new _debugger.NameValuePair({name: name, value: value}));
+ }
}
- }
- children(object) {
- let properties = dart.list([], _debugger.NameValuePair);
- this.addMetadataChildren(object, properties);
- this[_addMembers](object, object, properties);
- return properties;
+ return properties.toList();
}
addMetadataChildren(object, ret) {
- ret[dartx.add](new _debugger.NameValuePair({name: '[[class]]', value: new _debugger.ClassMetadata(object)}));
+ ret.add(new _debugger.NameValuePair({name: '[[class]]', value: new _debugger.ClassMetadata(object)}));
}
};
dart.setSignature(_debugger.ObjectFormatter, {
@@ -1775,9 +1807,8 @@ dart_library.library('dart_sdk', null, /* Imports */[
accept: [core.bool, [dart.dynamic]],
preview: [core.String, [dart.dynamic]],
hasChildren: [core.bool, [dart.dynamic]],
- [_addMembers]: [dart.dynamic, [dart.dynamic, dart.dynamic, core.List$(_debugger.NameValuePair)]],
children: [core.List$(_debugger.NameValuePair), [dart.dynamic]],
- addMetadataChildren: [dart.dynamic, [dart.dynamic, core.List$(_debugger.NameValuePair)]]
+ addMetadataChildren: [dart.dynamic, [dart.dynamic, core.Set$(_debugger.NameValuePair)]]
})
});
_debugger.FunctionFormatter = class FunctionFormatter extends _debugger.Formatter {
@@ -1816,14 +1847,13 @@ dart_library.library('dart_sdk', null, /* Imports */[
}
children(object) {
let map = dart.as(object, core.Map);
- let keys = map[dartx.keys][dartx.toList]();
- let entries = dart.list([], _debugger.NameValuePair);
+ let entries = collection.LinkedHashSet$(_debugger.NameValuePair).new();
map[dartx.forEach](dart.fn((key, value) => {
let entryWrapper = new _debugger.MapEntry({key: dart.as(key, core.String), value: value});
- entries[dartx.add](new _debugger.NameValuePair({name: dart.toString(entries[dartx.length]), value: entryWrapper}));
+ entries.add(new _debugger.NameValuePair({name: dart.toString(entries.length), value: entryWrapper}));
}, dart.void, [dart.dynamic, dart.dynamic]));
this.addMetadataChildren(object, entries);
- return entries;
+ return entries.toList();
}
};
_debugger.IterableFormatter = class IterableFormatter extends _debugger.ObjectFormatter {
@@ -1845,18 +1875,18 @@ dart_library.library('dart_sdk', null, /* Imports */[
}
children(object) {
let iterable = dart.as(object, core.Iterable);
- let ret = dart.list([], _debugger.NameValuePair);
+ let ret = collection.LinkedHashSet$(_debugger.NameValuePair).new();
let i = 0;
for (let entry of iterable) {
if (i > dart.notNull(_debugger.maxIterableChildrenToDisplay)) {
- ret[dartx.add](new _debugger.NameValuePair({name: 'Warning', value: 'Truncated Iterable display'}));
+ ret.add(new _debugger.NameValuePair({name: 'Warning', value: 'Truncated Iterable display'}));
break;
}
- ret[dartx.add](new _debugger.NameValuePair({name: dart.toString(i), value: entry}));
+ ret.add(new _debugger.NameValuePair({name: dart.toString(i), value: entry}));
i++;
}
this.addMetadataChildren(object, ret);
- return ret;
+ return ret.toList();
}
};
const _getType = Symbol('_getType');
@@ -1884,8 +1914,8 @@ dart_library.library('dart_sdk', null, /* Imports */[
ret[dartx.add](new _debugger.NameValuePair({name: '[[Implements]]', value: new _debugger.HeritageClause('implements', dart.as(dart.dcall(implements$), core.List))}));
}
let mixins = dart.getMixins(type);
- if (mixins != null) {
- ret[dartx.add](new _debugger.NameValuePair({name: '[[Mixins]]', value: new _debugger.HeritageClause('mixins', dart.as(dart.dcall(mixins), core.List))}));
+ if (mixins != null && dart.test(dart.dload(mixins, 'isNotEmpty'))) {
+ ret[dartx.add](new _debugger.NameValuePair({name: '[[Mixins]]', value: new _debugger.HeritageClause('mixins', dart.as(mixins, core.List))}));
}
ret[dartx.add](new _debugger.NameValuePair({name: '[[JavaScript View]]', value: entry.object, skipDart: true}));
if (!dart.is(entry.object, core.Type)) {
« no previous file with comments | « no previous file | tool/input_sdk/private/ddc_runtime/rtti.dart » ('j') | tool/input_sdk/private/debugger.dart » ('J')

Powered by Google App Engine
This is Rietveld 408576698