mirror of
https://github.com/dart-lang/sdk
synced 2024-10-14 09:12:08 +00:00
Custom formatter cleanup Fix case where displaying a class constructor generated unreadable huge output. Fix case where exceptions were throw. Correct display of statics, fix indentation bugs. Add improved custom formatter test to main repro. As a drive by fix, switch hashCode to use a symbol instead of the name $identityHash as $identityHash was making custom formatter test output unstable.
BUG= R=vsm@google.com Review-Url: https://codereview.chromium.org/2703263002 .
This commit is contained in:
parent
fe294f3753
commit
a6a206062d
|
@ -39,16 +39,14 @@ define([], function() {
|
|||
let MapOfString$_MethodStats = () => (MapOfString$_MethodStats = dart.constFn(core.Map$(core.String, dart._MethodStats)))();
|
||||
let ListOfString = () => (ListOfString = dart.constFn(core.List$(core.String)))();
|
||||
let SetOfNameValuePair = () => (SetOfNameValuePair = dart.constFn(core.Set$(_debugger.NameValuePair)))();
|
||||
let ListOfNameValuePair = () => (ListOfNameValuePair = dart.constFn(core.List$(_debugger.NameValuePair)))();
|
||||
let IterableOfNameValuePair = () => (IterableOfNameValuePair = dart.constFn(core.Iterable$(_debugger.NameValuePair)))();
|
||||
let JSArrayOfNameValuePair = () => (JSArrayOfNameValuePair = dart.constFn(_interceptors.JSArray$(_debugger.NameValuePair)))();
|
||||
let MapOfdynamic$Object = () => (MapOfdynamic$Object = dart.constFn(core.Map$(dart.dynamic, core.Object)))();
|
||||
let JSArrayOfFormatter = () => (JSArrayOfFormatter = dart.constFn(_interceptors.JSArray$(_debugger.Formatter)))();
|
||||
let ListOfFormatter = () => (ListOfFormatter = dart.constFn(core.List$(_debugger.Formatter)))();
|
||||
let LinkedHashSetOfNameValuePair = () => (LinkedHashSetOfNameValuePair = dart.constFn(collection.LinkedHashSet$(_debugger.NameValuePair)))();
|
||||
let SetOfString = () => (SetOfString = dart.constFn(core.Set$(core.String)))();
|
||||
let HashMapOfString$String = () => (HashMapOfString$String = dart.constFn(collection.HashMap$(core.String, core.String)))();
|
||||
let LinkedHashMapOfString$Object = () => (LinkedHashMapOfString$Object = dart.constFn(collection.LinkedHashMap$(core.String, core.Object)))();
|
||||
let ListOfNameValuePair = () => (ListOfNameValuePair = dart.constFn(core.List$(_debugger.NameValuePair)))();
|
||||
let JSArrayOfString = () => (JSArrayOfString = dart.constFn(_interceptors.JSArray$(core.String)))();
|
||||
let JSArrayOfJsonMLFormatter = () => (JSArrayOfJsonMLFormatter = dart.constFn(_interceptors.JSArray$(_debugger.JsonMLFormatter)))();
|
||||
let JSIndexable = () => (JSIndexable = dart.constFn(_interceptors.JSIndexable$()))();
|
||||
let JSArray = () => (JSArray = dart.constFn(_interceptors.JSArray$()))();
|
||||
|
@ -57,6 +55,7 @@ define([], function() {
|
|||
let JSExtendableArray = () => (JSExtendableArray = dart.constFn(_interceptors.JSExtendableArray$()))();
|
||||
let JSUnmodifiableArray = () => (JSUnmodifiableArray = dart.constFn(_interceptors.JSUnmodifiableArray$()))();
|
||||
let ArrayIterator = () => (ArrayIterator = dart.constFn(_interceptors.ArrayIterator$()))();
|
||||
let JSArrayOfString = () => (JSArrayOfString = dart.constFn(_interceptors.JSArray$(core.String)))();
|
||||
let JSIndexableOfString = () => (JSIndexableOfString = dart.constFn(_interceptors.JSIndexable$(core.String)))();
|
||||
let MatchToString = () => (MatchToString = dart.constFn(dart.functionType(core.String, [core.Match])))();
|
||||
let StringToString = () => (StringToString = dart.constFn(dart.functionType(core.String, [core.String])))();
|
||||
|
@ -604,6 +603,7 @@ define([], function() {
|
|||
let ElementListOfElement = () => (ElementListOfElement = dart.constFn(html$.ElementList$(html$.Element)))();
|
||||
let ListOfRectangleOfnum = () => (ListOfRectangleOfnum = dart.constFn(core.List$(RectangleOfnum())))();
|
||||
let ListOfGamepad = () => (ListOfGamepad = dart.constFn(core.List$(html$.Gamepad)))();
|
||||
let SetOfString = () => (SetOfString = dart.constFn(core.Set$(core.String)))();
|
||||
let ListOfCssClassSetImpl = () => (ListOfCssClassSetImpl = dart.constFn(core.List$(html_common.CssClassSetImpl)))();
|
||||
let LinkedHashSetOfString = () => (LinkedHashSetOfString = dart.constFn(collection.LinkedHashSet$(core.String)))();
|
||||
let StringTobool = () => (StringTobool = dart.constFn(dart.functionType(core.bool, [core.String])))();
|
||||
|
@ -649,18 +649,20 @@ define([], function() {
|
|||
let dynamicToListOfString = () => (dynamicToListOfString = dart.constFn(dart.definiteFunctionType(ListOfString(), [dart.dynamic])))();
|
||||
let dynamicToList = () => (dynamicToList = dart.constFn(dart.definiteFunctionType(core.List, [dart.dynamic])))();
|
||||
let dynamicAndSetOfNameValuePairTovoid = () => (dynamicAndSetOfNameValuePairTovoid = dart.constFn(dart.definiteFunctionType(dart.void, [dart.dynamic, SetOfNameValuePair()])))();
|
||||
let TypeToString = () => (TypeToString = dart.constFn(dart.definiteFunctionType(core.String, [core.Type])))();
|
||||
let dynamicToObject = () => (dynamicToObject = dart.constFn(dart.definiteFunctionType(core.Object, [dart.dynamic])))();
|
||||
let dynamicAndSetOfNameValuePairAnddynamic__Tovoid = () => (dynamicAndSetOfNameValuePairAnddynamic__Tovoid = dart.constFn(dart.definiteFunctionType(dart.void, [dart.dynamic, SetOfNameValuePair(), dart.dynamic, core.bool], {tagTypes: dart.dynamic})))();
|
||||
let NameValuePairAndNameValuePairToint = () => (NameValuePairAndNameValuePairToint = dart.constFn(dart.definiteFunctionType(core.int, [_debugger.NameValuePair, _debugger.NameValuePair])))();
|
||||
let IterableOfNameValuePairToListOfNameValuePair = () => (IterableOfNameValuePairToListOfNameValuePair = dart.constFn(dart.definiteFunctionType(ListOfNameValuePair(), [IterableOfNameValuePair()])))();
|
||||
let dynamicAnddynamicToString = () => (dynamicAnddynamicToString = dart.constFn(dart.definiteFunctionType(core.String, [dart.dynamic, dart.dynamic])))();
|
||||
let dynamicAndStringTobool = () => (dynamicAndStringTobool = dart.constFn(dart.definiteFunctionType(core.bool, [dart.dynamic, core.String])))();
|
||||
let intAnddynamicToNull = () => (intAnddynamicToNull = dart.constFn(dart.definiteFunctionType(core.Null, [core.int, dart.dynamic])))();
|
||||
let ObjectAndObjectToObject = () => (ObjectAndObjectToObject = dart.constFn(dart.definiteFunctionType(core.Object, [core.Object, core.Object])))();
|
||||
let StringTobool$ = () => (StringTobool$ = dart.constFn(dart.definiteFunctionType(core.bool, [core.String])))();
|
||||
let dynamicToObject = () => (dynamicToObject = dart.constFn(dart.definiteFunctionType(core.Object, [dart.dynamic])))();
|
||||
let dynamicTobool$ = () => (dynamicTobool$ = dart.constFn(dart.definiteFunctionType(core.bool, [dart.dynamic])))();
|
||||
let dynamicAnddynamicToNull = () => (dynamicAnddynamicToNull = dart.constFn(dart.definiteFunctionType(core.Null, [dart.dynamic, dart.dynamic])))();
|
||||
let StringAndObjectToNull = () => (StringAndObjectToNull = dart.constFn(dart.definiteFunctionType(core.Null, [core.String, core.Object])))();
|
||||
let StringToNameValuePair = () => (StringToNameValuePair = dart.constFn(dart.definiteFunctionType(_debugger.NameValuePair, [core.String])))();
|
||||
let VoidTodynamic$ = () => (VoidTodynamic$ = dart.constFn(dart.definiteFunctionType(dart.dynamic, [])))();
|
||||
let StringTodynamic = () => (StringTodynamic = dart.constFn(dart.definiteFunctionType(dart.dynamic, [core.String])))();
|
||||
let StringAndString__Todynamic = () => (StringAndString__Todynamic = dart.constFn(dart.definiteFunctionType(dart.dynamic, [core.String, core.String], [dart.dynamic, dart.dynamic, dart.dynamic, dart.dynamic, dart.dynamic, dart.dynamic, dart.dynamic, dart.dynamic, dart.dynamic, dart.dynamic, dart.dynamic, dart.dynamic])))();
|
||||
let VoidToIsolateContext = () => (VoidToIsolateContext = dart.constFn(dart.definiteFunctionType(_foreign_helper.IsolateContext, [])))();
|
||||
let dynamicAndFunctionTodynamic = () => (dynamicAndFunctionTodynamic = dart.constFn(dart.definiteFunctionType(dart.dynamic, [dart.dynamic, core.Function])))();
|
||||
|
@ -1482,8 +1484,8 @@ define([], function() {
|
|||
dart.getIsNamedConstructor = function(value) {
|
||||
return value[dart.isNamedConstructor];
|
||||
};
|
||||
dart.getDartLibraryName = function(value) {
|
||||
return value[dart_library.dartLibraryName];
|
||||
dart.getModuleName = function(value) {
|
||||
return value[dart._moduleName];
|
||||
};
|
||||
dart.tag = function(value, t) {
|
||||
value[dart._runtimeType] = t;
|
||||
|
@ -1494,6 +1496,18 @@ define([], function() {
|
|||
dart.tagLazy = function(value, compute) {
|
||||
dart.defineLazyProperty(value, dart._runtimeType, {get: compute});
|
||||
};
|
||||
dart.getModuleNames = function() {
|
||||
return Array.from(dart._loadedModules.keys());
|
||||
};
|
||||
dart.getModuleLibraries = function(name) {
|
||||
let module = dart._loadedModules.get(name);
|
||||
if (module == null) return null;
|
||||
module[dart._moduleName] = name;
|
||||
return module;
|
||||
};
|
||||
dart.trackLibraries = function(moduleName, libraries) {
|
||||
dart._loadedModules.set(moduleName, libraries);
|
||||
};
|
||||
dart._warn = function(arg) {
|
||||
console.warn(arg);
|
||||
};
|
||||
|
@ -1636,6 +1650,9 @@ define([], function() {
|
|||
dart.definiteFunctionType = function(returnType, args, extra) {
|
||||
return dart._functionType(true, returnType, args, extra);
|
||||
};
|
||||
dart.isType = function(obj) {
|
||||
return dart._getRuntimeType(obj) === core.Type;
|
||||
};
|
||||
dart.typeName = function(type) {
|
||||
if (type === void 0) return "undefined type";
|
||||
if (type === null) return "null type";
|
||||
|
@ -2454,6 +2471,7 @@ define([], function() {
|
|||
return obj[dartx.toString]();
|
||||
}
|
||||
if (typeof obj == "function") {
|
||||
if (dart.test(dart.isType(obj))) return dart.typeName(obj);
|
||||
return "Closure: " + dart.getReifiedType(obj) + " from: " + obj;
|
||||
}
|
||||
return obj.toString();
|
||||
|
@ -2658,12 +2676,19 @@ define([], function() {
|
|||
dart.dartx = dartx;
|
||||
dart._runtimeType = Symbol("_runtimeType");
|
||||
dart.isNamedConstructor = Symbol("isNamedConstructor");
|
||||
dart._moduleName = Symbol("_moduleName");
|
||||
dart.defineLazy(dart, {
|
||||
get _lazyJSTypes() {
|
||||
return new Map();
|
||||
},
|
||||
set _lazyJSTypes(_) {}
|
||||
});
|
||||
dart.defineLazy(dart, {
|
||||
get _loadedModules() {
|
||||
return new Map();
|
||||
},
|
||||
set _loadedModules(_) {}
|
||||
});
|
||||
dart.metadata = Symbol("metadata");
|
||||
dart._typeObject = Symbol("typeObject");
|
||||
core.Object = class Object {
|
||||
|
@ -3217,9 +3242,51 @@ define([], function() {
|
|||
names: ['getProperty', 'setProperty']
|
||||
});
|
||||
_debugger.addMetadataChildren = function(object, ret) {
|
||||
ret.add(new _debugger.NameValuePair({name: _debugger.getTypeName(core.Type._check(_debugger._getType(object))), value: object, config: _debugger.JsonMLConfig.asClass}));
|
||||
ret.add(new _debugger.NameValuePair({name: "[[class]]", value: dart.getReifiedType(object), config: _debugger.JsonMLConfig.asClass}));
|
||||
};
|
||||
dart.lazyFn(_debugger.addMetadataChildren, () => dynamicAndSetOfNameValuePairTovoid());
|
||||
_debugger.addPropertiesFromSignature = function(sig, properties, object, walkPrototypeChain, opts) {
|
||||
let tagTypes = opts && 'tagTypes' in opts ? opts.tagTypes : false;
|
||||
let skippedNames = core.Set.new();
|
||||
skippedNames.add('hashCode');
|
||||
while (sig != null) {
|
||||
for (let symbol of _debugger.getOwnPropertySymbols(sig)) {
|
||||
let dartName = _debugger.symbolName(symbol);
|
||||
let dartXPrefix = 'dartx.';
|
||||
if (dart.test(dartName[dartx.startsWith](dartXPrefix))) {
|
||||
dartName = dartName[dartx.substring](dartXPrefix[dartx.length]);
|
||||
}
|
||||
if (dart.test(skippedNames.contains(dartName))) continue;
|
||||
let value = _debugger.safeGetProperty(object, symbol);
|
||||
if (dart.test(tagTypes) && _debugger._typeof(value) == 'function') {
|
||||
dart.tag(value, sig[symbol]);
|
||||
}
|
||||
properties.add(new _debugger.NameValuePair({name: dartName, value: value}));
|
||||
}
|
||||
for (let name of _debugger.getOwnPropertyNames(sig)) {
|
||||
let value = _debugger.safeGetProperty(object, name);
|
||||
if (dart.test(skippedNames.contains(name))) continue;
|
||||
if (dart.test(tagTypes) && _debugger._typeof(value) == 'function') {
|
||||
dart.tag(value, sig[name]);
|
||||
}
|
||||
properties.add(new _debugger.NameValuePair({name: name, value: value}));
|
||||
}
|
||||
if (!dart.test(walkPrototypeChain)) break;
|
||||
sig = _debugger.safeGetProperty(sig, '__proto__');
|
||||
}
|
||||
};
|
||||
dart.lazyFn(_debugger.addPropertiesFromSignature, () => dynamicAndSetOfNameValuePairAnddynamic__Tovoid());
|
||||
_debugger.sortProperties = function(properties) {
|
||||
let sortedProperties = properties[dartx.toList]();
|
||||
sortedProperties[dartx.sort](dart.fn((a, b) => {
|
||||
let aPrivate = a.name[dartx.startsWith]('_');
|
||||
let bPrivate = b.name[dartx.startsWith]('_');
|
||||
if (aPrivate != bPrivate) return dart.test(aPrivate) ? 1 : -1;
|
||||
return a.name[dartx.compareTo](b.name);
|
||||
}, NameValuePairAndNameValuePairToint()));
|
||||
return sortedProperties;
|
||||
};
|
||||
dart.lazyFn(_debugger.sortProperties, () => IterableOfNameValuePairToListOfNameValuePair());
|
||||
_debugger.getObjectTypeName = function(object) {
|
||||
let reifiedType = dart.getReifiedType(object);
|
||||
if (reifiedType == null) {
|
||||
|
@ -3228,7 +3295,7 @@ define([], function() {
|
|||
}
|
||||
return '<Error getting type name>';
|
||||
}
|
||||
return _debugger.getTypeName(core.Type._check(reifiedType));
|
||||
return _debugger.getTypeName(reifiedType);
|
||||
};
|
||||
dart.lazyFn(_debugger.getObjectTypeName, () => dynamicToString());
|
||||
_debugger.getTypeName = function(type) {
|
||||
|
@ -3236,11 +3303,7 @@ define([], function() {
|
|||
if (name == 'JSArray<dynamic>' || name == 'JSObject<Array>') return 'List<dynamic>';
|
||||
return name;
|
||||
};
|
||||
dart.lazyFn(_debugger.getTypeName, () => TypeToString());
|
||||
_debugger._getType = function(object) {
|
||||
return core.Type.is(object) ? object : dart.getReifiedType(object);
|
||||
};
|
||||
dart.fn(_debugger._getType, dynamicToObject());
|
||||
dart.lazyFn(_debugger.getTypeName, () => dynamicToString());
|
||||
const _simpleFormatter = Symbol('_simpleFormatter');
|
||||
_debugger.safePreview = function(object, config) {
|
||||
try {
|
||||
|
@ -3280,7 +3343,9 @@ define([], function() {
|
|||
this.hideName = hideName;
|
||||
}
|
||||
['=='](other) {
|
||||
return _debugger.NameValuePair.is(other) && other.name == this.name;
|
||||
if (!_debugger.NameValuePair.is(other)) return false;
|
||||
if (dart.test(this.hideName) || dart.test(dart.dload(other, 'hideName'))) return core.identical(this, other);
|
||||
return dart.equals(dart.dload(other, 'name'), this.name);
|
||||
}
|
||||
get hashCode() {
|
||||
return dart.hashCode(this.name);
|
||||
|
@ -3473,7 +3538,7 @@ define([], function() {
|
|||
});
|
||||
_debugger.isNativeJavaScriptObject = function(object) {
|
||||
let type = _debugger._typeof(object);
|
||||
return type != 'object' && type != 'function' || dart.JSObject.is(object) || html$.Node.is(object);
|
||||
return type != 'object' && type != 'function' || dart.test(dart.isJsInterop(object)) || html$.Node.is(object);
|
||||
};
|
||||
dart.lazyFn(_debugger.isNativeJavaScriptObject, () => dynamicTobool$());
|
||||
_debugger.JsonMLFormatter = class JsonMLFormatter extends core.Object {
|
||||
|
@ -3509,24 +3574,37 @@ define([], function() {
|
|||
body.addStyle('color: rgb(196, 26, 22);');
|
||||
}
|
||||
let children = this[_simpleFormatter].children(object, config);
|
||||
if (children == null) return body.toJsonML();
|
||||
for (let child of children) {
|
||||
let li = body.createChild('li');
|
||||
let nameSpan = new _debugger.JsonMLElement('span');
|
||||
nameSpan.createTextChild(dart.test(child.displayName[dartx.isNotEmpty]) ? dart.str`${child.displayName}: ` : '');
|
||||
nameSpan.setStyle('color: rgb(136, 19, 145);');
|
||||
li.setStyle("padding-left: 13px;");
|
||||
let nameSpan = null;
|
||||
let valueStyle = '';
|
||||
if (!dart.test(child.hideName)) {
|
||||
nameSpan = new _debugger.JsonMLElement('span');
|
||||
nameSpan.createTextChild(dart.test(child.displayName[dartx.isNotEmpty]) ? dart.str`${child.displayName}: ` : '');
|
||||
nameSpan.setStyle('color: rgb(136, 19, 145); margin-right: -13px');
|
||||
valueStyle = 'margin-left: 13px';
|
||||
}
|
||||
if (_debugger._typeof(child.value) == 'object' || _debugger._typeof(child.value) == 'function') {
|
||||
nameSpan.addStyle("padding-left: 13px;");
|
||||
li.appendChild(nameSpan);
|
||||
let objectTag = li.createObjectTag(child.value);
|
||||
objectTag.addAttribute('config', child.config);
|
||||
if (!dart.test(this[_simpleFormatter].hasChildren(child.value, child.config))) {
|
||||
li.setStyle("padding-left: 13px;");
|
||||
let valueSpan = new _debugger.JsonMLElement('span');
|
||||
valueSpan.setStyle(valueStyle);
|
||||
valueSpan.createObjectTag(child.value).addAttribute('config', child.config);
|
||||
if (nameSpan != null) {
|
||||
li.appendChild(nameSpan);
|
||||
}
|
||||
li.appendChild(valueSpan);
|
||||
} else {
|
||||
li.setStyle("padding-left: 13px;");
|
||||
let _ = li.createChild('span');
|
||||
_.appendChild(nameSpan);
|
||||
_.createTextChild(_debugger.safePreview(child.value, child.config));
|
||||
let line = li.createChild('span');
|
||||
if (nameSpan != null) {
|
||||
line.appendChild(nameSpan);
|
||||
}
|
||||
line.appendChild((() => {
|
||||
let _ = new _debugger.JsonMLElement('span');
|
||||
_.createTextChild(_debugger.safePreview(child.value, child.config));
|
||||
_.setStyle(valueStyle);
|
||||
return _;
|
||||
})());
|
||||
}
|
||||
}
|
||||
return body.toJsonML();
|
||||
|
@ -3549,7 +3627,7 @@ define([], function() {
|
|||
_debugger.DartFormatter = class DartFormatter extends core.Object {
|
||||
new() {
|
||||
this[_formatters] = null;
|
||||
this[_formatters] = JSArrayOfFormatter().of([new _debugger.ClassFormatter(), new _debugger.NamedConstructorFormatter(), new _debugger.MapFormatter(), new _debugger.IterableFormatter(), new _debugger.IterableSpanFormatter(), new _debugger.MapEntryFormatter(), new _debugger.StackTraceFormatter(), new _debugger.FunctionFormatter(), new _debugger.HeritageClauseFormatter(), new _debugger.LibraryModuleFormatter(), new _debugger.LibraryFormatter(), new _debugger.ObjectFormatter()]);
|
||||
this[_formatters] = JSArrayOfFormatter().of([new _debugger.ClassFormatter(), new _debugger.TypeFormatter(), new _debugger.NamedConstructorFormatter(), new _debugger.MapFormatter(), new _debugger.IterableFormatter(), new _debugger.IterableSpanFormatter(), new _debugger.MapEntryFormatter(), new _debugger.StackTraceFormatter(), new _debugger.FunctionFormatter(), new _debugger.HeritageClauseFormatter(), new _debugger.LibraryModuleFormatter(), new _debugger.LibraryFormatter(), new _debugger.ObjectFormatter()]);
|
||||
}
|
||||
preview(object, config) {
|
||||
try {
|
||||
|
@ -3613,42 +3691,14 @@ define([], function() {
|
|||
return true;
|
||||
}
|
||||
children(object) {
|
||||
let properties = LinkedHashSetOfNameValuePair().new();
|
||||
_debugger.addMetadataChildren(object, properties);
|
||||
let current = object;
|
||||
let protoChain = JSArrayOfObject().of([]);
|
||||
while (current != null && !dart.test(_debugger.isNativeJavaScriptObject(current)) && current !== Object.prototype) {
|
||||
protoChain[dartx.add](current);
|
||||
current = _debugger.safeGetProperty(current, '__proto__');
|
||||
}
|
||||
for (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 = _debugger.safeGetProperty(object, symbol);
|
||||
properties.add(new _debugger.NameValuePair({name: dartName, value: value}));
|
||||
}
|
||||
}
|
||||
for (current of protoChain) {
|
||||
let className = dart.dload(dart.getReifiedType(current), 'name');
|
||||
for (let name of _debugger.getOwnPropertyNames(current)) {
|
||||
if (dart.test(_debugger.ObjectFormatter._customNames.contains(name)) || dart.equals(name, className)) continue;
|
||||
if (dart.test(_debugger.hasMethod(object, name))) {
|
||||
continue;
|
||||
}
|
||||
let value = _debugger.safeGetProperty(object, name);
|
||||
properties.add(new _debugger.NameValuePair({name: name, value: value}));
|
||||
}
|
||||
}
|
||||
return properties.toList();
|
||||
let type = dart.getType(object);
|
||||
let ret = LinkedHashSetOfNameValuePair().new();
|
||||
let properties = SetOfNameValuePair().new();
|
||||
_debugger.addPropertiesFromSignature(dart.getFieldSig(type), properties, object, true);
|
||||
_debugger.addPropertiesFromSignature(dart.getGetterSig(type), properties, object, true);
|
||||
ret.addAll(_debugger.sortProperties(properties));
|
||||
_debugger.addMetadataChildren(object, ret);
|
||||
return ret.toList();
|
||||
}
|
||||
};
|
||||
dart.setSignature(_debugger.ObjectFormatter, {
|
||||
|
@ -3659,28 +3709,16 @@ define([], function() {
|
|||
children: dart.definiteFunctionType(core.List$(_debugger.NameValuePair), [dart.dynamic])
|
||||
})
|
||||
});
|
||||
dart.defineLazy(_debugger.ObjectFormatter, {
|
||||
get _customNames() {
|
||||
return (() => {
|
||||
let _ = SetOfString().new();
|
||||
_.add('constructor');
|
||||
_.add('prototype');
|
||||
_.add('__proto__');
|
||||
return _;
|
||||
})();
|
||||
},
|
||||
set _customNames(_) {}
|
||||
});
|
||||
_debugger.LibraryModuleFormatter = class LibraryModuleFormatter extends core.Object {
|
||||
accept(object, config) {
|
||||
return dart.getDartLibraryName(object) != null;
|
||||
return dart.getModuleName(object) != null;
|
||||
}
|
||||
hasChildren(object) {
|
||||
return true;
|
||||
}
|
||||
preview(object) {
|
||||
let libraryNames = dart.dsend(dart.getDartLibraryName(object), 'split', '/');
|
||||
if (dart.test(dart.dsend(dart.dload(libraryNames, 'length'), '>', 1))) {
|
||||
let libraryNames = dart.dsend(dart.getModuleName(object), 'split', '/');
|
||||
if (dart.test(dart.dsend(dart.dload(libraryNames, 'length'), '>', 1)) && dart.equals(dart.dload(libraryNames, 'last'), dart.dindex(libraryNames, dart.dsend(dart.dload(libraryNames, 'length'), '-', 2)))) {
|
||||
dart.dsetindex(libraryNames, dart.dsend(dart.dload(libraryNames, 'length'), '-', 1), '');
|
||||
}
|
||||
return dart.str`Library Module: ${dart.dsend(libraryNames, 'join', '/')}`;
|
||||
|
@ -3689,7 +3727,6 @@ define([], function() {
|
|||
let children = LinkedHashSetOfNameValuePair().new();
|
||||
for (let name of _debugger.getOwnPropertyNames(object)) {
|
||||
let value = _debugger.safeGetProperty(object, name);
|
||||
name = dart.str`${name[dartx.replaceAll]("__", "/")}.dart`;
|
||||
children.add(new _debugger.NameValuePair({name: name, value: new _debugger.Library(name, value), hideName: true}));
|
||||
}
|
||||
return children.toList();
|
||||
|
@ -3719,36 +3756,16 @@ define([], function() {
|
|||
}
|
||||
children(object) {
|
||||
let children = LinkedHashSetOfNameValuePair().new();
|
||||
let nonGenericProperties = LinkedHashMapOfString$Object().new();
|
||||
let objectProperties = _debugger.safeProperties(dart.dload(object, 'object'));
|
||||
dart.dsend(objectProperties, 'forEach', dart.fn((name, value) => {
|
||||
let genericTypeConstructor = dart.getGenericTypeCtor(value);
|
||||
if (genericTypeConstructor != null) {
|
||||
this.recordGenericParameters(core.String._check(name), genericTypeConstructor);
|
||||
} else {
|
||||
nonGenericProperties._set(core.String._check(name), value);
|
||||
}
|
||||
if (dart.getGenericTypeCtor(value) != null) return;
|
||||
children.add(_debugger.NameValuePair._check(dart.test(dart.isType(value)) ? this.classChild(core.String._check(name), value) : new _debugger.NameValuePair({name: core.String._check(name), value: value})));
|
||||
}, dynamicAnddynamicToNull()));
|
||||
nonGenericProperties.forEach(dart.fn((name, value) => {
|
||||
if (core.Type.is(value)) {
|
||||
children.add(_debugger.NameValuePair._check(this.classChild(name, value)));
|
||||
} else {
|
||||
children.add(new _debugger.NameValuePair({name: name, value: value}));
|
||||
}
|
||||
}, StringAndObjectToNull()));
|
||||
return children.toList();
|
||||
}
|
||||
recordGenericParameters(name, genericTypeConstructor) {
|
||||
this.genericParameters._set(name, genericTypeConstructor.toString()[dartx.split](' =>')[dartx.first][dartx.replaceAll](core.RegExp.new('[(|)]'), ''));
|
||||
}
|
||||
classChild(name, child) {
|
||||
let typeName = _debugger.getTypeName(core.Type._check(child));
|
||||
let parameterName = dart.str`${name}\$`;
|
||||
if (dart.test(this.genericParameters.keys[dartx.contains](parameterName))) {
|
||||
typeName = dart.str`${typeName}<${this.genericParameters._get(parameterName)}>`;
|
||||
_debugger.JSNative.setProperty(child, 'genericTypeName', typeName);
|
||||
}
|
||||
return new _debugger.NameValuePair({name: typeName, value: child});
|
||||
let typeName = _debugger.getTypeName(child);
|
||||
return new _debugger.NameValuePair({name: typeName, value: child, config: _debugger.JsonMLConfig.asClass});
|
||||
}
|
||||
};
|
||||
_debugger.LibraryFormatter[dart.implements] = () => [_debugger.Formatter];
|
||||
|
@ -3759,7 +3776,6 @@ define([], function() {
|
|||
hasChildren: dart.definiteFunctionType(core.bool, [dart.dynamic]),
|
||||
preview: dart.definiteFunctionType(core.String, [dart.dynamic]),
|
||||
children: dart.definiteFunctionType(core.List$(_debugger.NameValuePair), [dart.dynamic]),
|
||||
recordGenericParameters: dart.definiteFunctionType(dart.dynamic, [core.String, core.Object]),
|
||||
classChild: dart.definiteFunctionType(dart.dynamic, [core.String, core.Object])
|
||||
})
|
||||
});
|
||||
|
@ -3976,60 +3992,49 @@ define([], function() {
|
|||
});
|
||||
_debugger.ClassFormatter = class ClassFormatter extends core.Object {
|
||||
accept(object, config) {
|
||||
return core.Type.is(object) || dart.equals(config, _debugger.JsonMLConfig.asClass);
|
||||
return dart.equals(config, _debugger.JsonMLConfig.asClass);
|
||||
}
|
||||
preview(object) {
|
||||
let typeName = _debugger.safeGetProperty(object, 'genericTypeName');
|
||||
if (typeName != null) return core.String._check(typeName);
|
||||
let type = _debugger._getType(object);
|
||||
preview(type) {
|
||||
let implements$ = dart.getImplements(type);
|
||||
typeName = _debugger.getTypeName(core.Type._check(type));
|
||||
let typeName = _debugger.getTypeName(type);
|
||||
if (implements$ != null) {
|
||||
let typeNames = dart.dsend(dart.dcall(implements$), 'map', _debugger.getTypeName);
|
||||
return dart.str`${typeName} implements ${dart.dsend(typeNames, 'join', ", ")}`;
|
||||
} else {
|
||||
return core.String._check(typeName);
|
||||
return typeName;
|
||||
}
|
||||
}
|
||||
hasChildren(object) {
|
||||
return true;
|
||||
}
|
||||
children(object) {
|
||||
let type = _debugger._getType(object);
|
||||
let children = JSArrayOfNameValuePair().of([]);
|
||||
let typeName = _debugger.getTypeName(core.Type._check(_debugger._getType(object)));
|
||||
children(type) {
|
||||
let ret = LinkedHashSetOfNameValuePair().new();
|
||||
let staticProperties = SetOfNameValuePair().new();
|
||||
let staticMethods = SetOfNameValuePair().new();
|
||||
_debugger.addPropertiesFromSignature(dart.getStaticFieldSig(type), staticProperties, type, false);
|
||||
_debugger.addPropertiesFromSignature(dart.getStaticGetterSig(type), staticProperties, type, false);
|
||||
_debugger.addPropertiesFromSignature(dart.getStaticSig(type), staticMethods, type, false);
|
||||
if (dart.test(staticProperties.isNotEmpty) || dart.test(staticMethods.isNotEmpty)) {
|
||||
ret.add(new _debugger.NameValuePair({value: '[[Static members]]', hideName: true}));
|
||||
ret.addAll(_debugger.sortProperties(staticProperties));
|
||||
ret.addAll(_debugger.sortProperties(staticMethods));
|
||||
}
|
||||
let instanceMethods = SetOfNameValuePair().new();
|
||||
_debugger.addPropertiesFromSignature(dart.getMethodSig(type), instanceMethods, type.prototype, false, {tagTypes: true});
|
||||
if (dart.test(instanceMethods.isNotEmpty)) {
|
||||
ret.add(new _debugger.NameValuePair({value: '[[Instance Methods]]', hideName: true}));
|
||||
ret.addAll(_debugger.sortProperties(instanceMethods));
|
||||
}
|
||||
let typeName = _debugger.getTypeName(type);
|
||||
let mixins = dart.getMixins(type);
|
||||
if (mixins != null && dart.test(dart.dload(mixins, 'isNotEmpty'))) {
|
||||
children[dartx.add](new _debugger.NameValuePair({name: '[[Mixins]]', value: new _debugger.HeritageClause('mixins', core.List._check(mixins))}));
|
||||
ret.add(new _debugger.NameValuePair({name: '[[Mixins]]', value: new _debugger.HeritageClause('mixins', core.List._check(mixins))}));
|
||||
}
|
||||
let hiddenProperties = JSArrayOfString().of(['length', 'name', 'prototype', 'genericTypeName']);
|
||||
for (let name of _debugger.getOwnPropertyNames(object)) {
|
||||
if (dart.test(hiddenProperties[dartx.contains](name))) continue;
|
||||
let value = _debugger.safeGetProperty(object, name);
|
||||
if (value != null && dart.getIsNamedConstructor(value) != null) {
|
||||
value = new _debugger.NamedConstructor(value);
|
||||
name = dart.str`${typeName}.${name}`;
|
||||
}
|
||||
children[dartx.add](new _debugger.NameValuePair({name: name, value: value}));
|
||||
let baseProto = type.__proto__;
|
||||
if (baseProto != null && !dart.test(dart.isJsInterop(baseProto))) {
|
||||
ret.add(new _debugger.NameValuePair({name: "[[base class]]", value: baseProto, config: _debugger.JsonMLConfig.asClass}));
|
||||
}
|
||||
let hiddenPrototypeProperties = JSArrayOfString().of(['constructor', 'new', '$identityHash']);
|
||||
let prototype = object.prototype;
|
||||
if (prototype != null) {
|
||||
for (let name of _debugger.getOwnPropertyNames(prototype)) {
|
||||
if (dart.test(hiddenPrototypeProperties[dartx.contains](name))) continue;
|
||||
let func = _debugger.safeGetProperty(prototype, name);
|
||||
let constructor = _debugger.safeGetProperty(prototype, 'constructor');
|
||||
let sigObj = dart.getMethodSig(constructor);
|
||||
if (sigObj != null) {
|
||||
let value = _debugger.safeGetProperty(sigObj, name);
|
||||
if (_debugger.getTypeName(core.Type._check(dart.getReifiedType(value))) != 'Null') {
|
||||
dart.tag(func, value);
|
||||
children[dartx.add](new _debugger.NameValuePair({name: name, value: func}));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return children;
|
||||
return ret.toList();
|
||||
}
|
||||
};
|
||||
_debugger.ClassFormatter[dart.implements] = () => [_debugger.Formatter];
|
||||
|
@ -4041,11 +4046,42 @@ define([], function() {
|
|||
children: dart.definiteFunctionType(core.List$(_debugger.NameValuePair), [dart.dynamic])
|
||||
})
|
||||
});
|
||||
_debugger.TypeFormatter = class TypeFormatter extends core.Object {
|
||||
accept(object, config) {
|
||||
return core.Type.is(object);
|
||||
}
|
||||
preview(object) {
|
||||
return dart.toString(object);
|
||||
}
|
||||
hasChildren(object) {
|
||||
return false;
|
||||
}
|
||||
children(object) {
|
||||
return JSArrayOfNameValuePair().of([]);
|
||||
}
|
||||
};
|
||||
_debugger.TypeFormatter[dart.implements] = () => [_debugger.Formatter];
|
||||
dart.setSignature(_debugger.TypeFormatter, {
|
||||
methods: () => ({
|
||||
accept: dart.definiteFunctionType(core.bool, [dart.dynamic, dart.dynamic]),
|
||||
preview: dart.definiteFunctionType(core.String, [dart.dynamic]),
|
||||
hasChildren: dart.definiteFunctionType(core.bool, [dart.dynamic]),
|
||||
children: dart.definiteFunctionType(core.List$(_debugger.NameValuePair), [dart.dynamic])
|
||||
})
|
||||
});
|
||||
_debugger.registerDevtoolsFormatter = function() {
|
||||
let formatters = JSArrayOfJsonMLFormatter().of([_debugger._devtoolsFormatter]);
|
||||
dart.global.devtoolsFormatters = formatters;
|
||||
};
|
||||
dart.fn(_debugger.registerDevtoolsFormatter, VoidTodynamic$());
|
||||
_debugger.getModuleNames = function() {
|
||||
return dart.getModuleNames();
|
||||
};
|
||||
dart.fn(_debugger.getModuleNames, VoidTodynamic$());
|
||||
_debugger.getModuleLibraries = function(name) {
|
||||
return dart.getModuleLibraries(name);
|
||||
};
|
||||
dart.lazyFn(_debugger.getModuleLibraries, () => StringTodynamic());
|
||||
_foreign_helper.JS = function(typeDescription, codeTemplate, arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11) {
|
||||
if (arg0 === void 0) arg0 = null;
|
||||
if (arg1 === void 0) arg1 = null;
|
||||
|
@ -11377,6 +11413,11 @@ define([], function() {
|
|||
_js_embedded_names.TYPEDEF_PREDICATE_PROPERTY_NAME = "$$isTypedef";
|
||||
_js_embedded_names.NATIVE_SUPERCLASS_TAG_NAME = "$nativeSuperclassTag";
|
||||
_js_embedded_names.MAP_TYPE_TO_INTERCEPTOR = "mapTypeToInterceptor";
|
||||
dart.defineLazy(_js_helper, {
|
||||
get _identityHashCode() {
|
||||
return Symbol("_identityHashCode");
|
||||
}
|
||||
});
|
||||
_js_helper._Patch = class _Patch extends core.Object {
|
||||
new() {
|
||||
}
|
||||
|
@ -11396,10 +11437,10 @@ define([], function() {
|
|||
_js_helper.Primitives.mirrorInvokeCacheName = dart.notNull(_js_helper.Primitives.mirrorInvokeCacheName) + dart.str`_${id}`;
|
||||
}
|
||||
static objectHashCode(object) {
|
||||
let hash = object.$identityHash;
|
||||
let hash = object[_js_helper._identityHashCode];
|
||||
if (hash == null) {
|
||||
hash = Math.random() * 0x3fffffff | 0;
|
||||
object.$identityHash = hash;
|
||||
object[_js_helper._identityHashCode] = hash;
|
||||
}
|
||||
return hash;
|
||||
}
|
||||
|
@ -105404,6 +105445,7 @@ define([], function() {
|
|||
methods: () => ({[dartx.executeSql]: dart.definiteFunctionType(dart.void, [core.String, ListOfObject()], [web_sql.SqlStatementCallback, web_sql.SqlStatementErrorCallback])})
|
||||
});
|
||||
dart.registerExtension(dart.global.SQLTransaction, web_sql.SqlTransaction);
|
||||
dart.trackLibraries("dart_sdk", {"dart:_runtime": dart, "dart:_debugger": _debugger, "dart:_foreign_helper": _foreign_helper, "dart:_interceptors": _interceptors, "dart:_internal": _internal, "dart:_isolate_helper": _isolate_helper, "dart:_js_embedded_names": _js_embedded_names, "dart:_js_helper": _js_helper, "dart:_js_mirrors": _js_mirrors, "dart:_js_primitives": _js_primitives, "dart:_metadata": _metadata, "dart:_native_typed_data": _native_typed_data, "dart:async": async, "dart:collection": collection, "dart:convert": convert, "dart:core": core, "dart:developer": developer, "dart:io": io, "dart:isolate": isolate$, "dart:js": js, "dart:js_util": js_util, "dart:math": math, "dart:mirrors": mirrors, "dart:typed_data": typed_data, "dart:indexed_db": indexed_db, "dart:html": html$, "dart:html_common": html_common, "dart:svg": svg$, "dart:web_audio": web_audio, "dart:web_gl": web_gl, "dart:web_sql": web_sql});
|
||||
// Exports:
|
||||
return {
|
||||
dart: dart,
|
||||
|
|
|
@ -38,16 +38,14 @@ let MapOfSymbol$dynamic = () => (MapOfSymbol$dynamic = dart.constFn(core.Map$(co
|
|||
let MapOfString$_MethodStats = () => (MapOfString$_MethodStats = dart.constFn(core.Map$(core.String, dart._MethodStats)))();
|
||||
let ListOfString = () => (ListOfString = dart.constFn(core.List$(core.String)))();
|
||||
let SetOfNameValuePair = () => (SetOfNameValuePair = dart.constFn(core.Set$(_debugger.NameValuePair)))();
|
||||
let ListOfNameValuePair = () => (ListOfNameValuePair = dart.constFn(core.List$(_debugger.NameValuePair)))();
|
||||
let IterableOfNameValuePair = () => (IterableOfNameValuePair = dart.constFn(core.Iterable$(_debugger.NameValuePair)))();
|
||||
let JSArrayOfNameValuePair = () => (JSArrayOfNameValuePair = dart.constFn(_interceptors.JSArray$(_debugger.NameValuePair)))();
|
||||
let MapOfdynamic$Object = () => (MapOfdynamic$Object = dart.constFn(core.Map$(dart.dynamic, core.Object)))();
|
||||
let JSArrayOfFormatter = () => (JSArrayOfFormatter = dart.constFn(_interceptors.JSArray$(_debugger.Formatter)))();
|
||||
let ListOfFormatter = () => (ListOfFormatter = dart.constFn(core.List$(_debugger.Formatter)))();
|
||||
let LinkedHashSetOfNameValuePair = () => (LinkedHashSetOfNameValuePair = dart.constFn(collection.LinkedHashSet$(_debugger.NameValuePair)))();
|
||||
let SetOfString = () => (SetOfString = dart.constFn(core.Set$(core.String)))();
|
||||
let HashMapOfString$String = () => (HashMapOfString$String = dart.constFn(collection.HashMap$(core.String, core.String)))();
|
||||
let LinkedHashMapOfString$Object = () => (LinkedHashMapOfString$Object = dart.constFn(collection.LinkedHashMap$(core.String, core.Object)))();
|
||||
let ListOfNameValuePair = () => (ListOfNameValuePair = dart.constFn(core.List$(_debugger.NameValuePair)))();
|
||||
let JSArrayOfString = () => (JSArrayOfString = dart.constFn(_interceptors.JSArray$(core.String)))();
|
||||
let JSArrayOfJsonMLFormatter = () => (JSArrayOfJsonMLFormatter = dart.constFn(_interceptors.JSArray$(_debugger.JsonMLFormatter)))();
|
||||
let JSIndexable = () => (JSIndexable = dart.constFn(_interceptors.JSIndexable$()))();
|
||||
let JSArray = () => (JSArray = dart.constFn(_interceptors.JSArray$()))();
|
||||
|
@ -56,6 +54,7 @@ let JSFixedArray = () => (JSFixedArray = dart.constFn(_interceptors.JSFixedArray
|
|||
let JSExtendableArray = () => (JSExtendableArray = dart.constFn(_interceptors.JSExtendableArray$()))();
|
||||
let JSUnmodifiableArray = () => (JSUnmodifiableArray = dart.constFn(_interceptors.JSUnmodifiableArray$()))();
|
||||
let ArrayIterator = () => (ArrayIterator = dart.constFn(_interceptors.ArrayIterator$()))();
|
||||
let JSArrayOfString = () => (JSArrayOfString = dart.constFn(_interceptors.JSArray$(core.String)))();
|
||||
let JSIndexableOfString = () => (JSIndexableOfString = dart.constFn(_interceptors.JSIndexable$(core.String)))();
|
||||
let MatchToString = () => (MatchToString = dart.constFn(dart.functionType(core.String, [core.Match])))();
|
||||
let StringToString = () => (StringToString = dart.constFn(dart.functionType(core.String, [core.String])))();
|
||||
|
@ -603,6 +602,7 @@ let EventStreamProviderOfBeforeUnloadEvent = () => (EventStreamProviderOfBeforeU
|
|||
let ElementListOfElement = () => (ElementListOfElement = dart.constFn(html$.ElementList$(html$.Element)))();
|
||||
let ListOfRectangleOfnum = () => (ListOfRectangleOfnum = dart.constFn(core.List$(RectangleOfnum())))();
|
||||
let ListOfGamepad = () => (ListOfGamepad = dart.constFn(core.List$(html$.Gamepad)))();
|
||||
let SetOfString = () => (SetOfString = dart.constFn(core.Set$(core.String)))();
|
||||
let ListOfCssClassSetImpl = () => (ListOfCssClassSetImpl = dart.constFn(core.List$(html_common.CssClassSetImpl)))();
|
||||
let LinkedHashSetOfString = () => (LinkedHashSetOfString = dart.constFn(collection.LinkedHashSet$(core.String)))();
|
||||
let StringTobool = () => (StringTobool = dart.constFn(dart.functionType(core.bool, [core.String])))();
|
||||
|
@ -648,18 +648,20 @@ let dynamicToString = () => (dynamicToString = dart.constFn(dart.definiteFunctio
|
|||
let dynamicToListOfString = () => (dynamicToListOfString = dart.constFn(dart.definiteFunctionType(ListOfString(), [dart.dynamic])))();
|
||||
let dynamicToList = () => (dynamicToList = dart.constFn(dart.definiteFunctionType(core.List, [dart.dynamic])))();
|
||||
let dynamicAndSetOfNameValuePairTovoid = () => (dynamicAndSetOfNameValuePairTovoid = dart.constFn(dart.definiteFunctionType(dart.void, [dart.dynamic, SetOfNameValuePair()])))();
|
||||
let TypeToString = () => (TypeToString = dart.constFn(dart.definiteFunctionType(core.String, [core.Type])))();
|
||||
let dynamicToObject = () => (dynamicToObject = dart.constFn(dart.definiteFunctionType(core.Object, [dart.dynamic])))();
|
||||
let dynamicAndSetOfNameValuePairAnddynamic__Tovoid = () => (dynamicAndSetOfNameValuePairAnddynamic__Tovoid = dart.constFn(dart.definiteFunctionType(dart.void, [dart.dynamic, SetOfNameValuePair(), dart.dynamic, core.bool], {tagTypes: dart.dynamic})))();
|
||||
let NameValuePairAndNameValuePairToint = () => (NameValuePairAndNameValuePairToint = dart.constFn(dart.definiteFunctionType(core.int, [_debugger.NameValuePair, _debugger.NameValuePair])))();
|
||||
let IterableOfNameValuePairToListOfNameValuePair = () => (IterableOfNameValuePairToListOfNameValuePair = dart.constFn(dart.definiteFunctionType(ListOfNameValuePair(), [IterableOfNameValuePair()])))();
|
||||
let dynamicAnddynamicToString = () => (dynamicAnddynamicToString = dart.constFn(dart.definiteFunctionType(core.String, [dart.dynamic, dart.dynamic])))();
|
||||
let dynamicAndStringTobool = () => (dynamicAndStringTobool = dart.constFn(dart.definiteFunctionType(core.bool, [dart.dynamic, core.String])))();
|
||||
let intAnddynamicToNull = () => (intAnddynamicToNull = dart.constFn(dart.definiteFunctionType(core.Null, [core.int, dart.dynamic])))();
|
||||
let ObjectAndObjectToObject = () => (ObjectAndObjectToObject = dart.constFn(dart.definiteFunctionType(core.Object, [core.Object, core.Object])))();
|
||||
let StringTobool$ = () => (StringTobool$ = dart.constFn(dart.definiteFunctionType(core.bool, [core.String])))();
|
||||
let dynamicToObject = () => (dynamicToObject = dart.constFn(dart.definiteFunctionType(core.Object, [dart.dynamic])))();
|
||||
let dynamicTobool$ = () => (dynamicTobool$ = dart.constFn(dart.definiteFunctionType(core.bool, [dart.dynamic])))();
|
||||
let dynamicAnddynamicToNull = () => (dynamicAnddynamicToNull = dart.constFn(dart.definiteFunctionType(core.Null, [dart.dynamic, dart.dynamic])))();
|
||||
let StringAndObjectToNull = () => (StringAndObjectToNull = dart.constFn(dart.definiteFunctionType(core.Null, [core.String, core.Object])))();
|
||||
let StringToNameValuePair = () => (StringToNameValuePair = dart.constFn(dart.definiteFunctionType(_debugger.NameValuePair, [core.String])))();
|
||||
let VoidTodynamic$ = () => (VoidTodynamic$ = dart.constFn(dart.definiteFunctionType(dart.dynamic, [])))();
|
||||
let StringTodynamic = () => (StringTodynamic = dart.constFn(dart.definiteFunctionType(dart.dynamic, [core.String])))();
|
||||
let StringAndString__Todynamic = () => (StringAndString__Todynamic = dart.constFn(dart.definiteFunctionType(dart.dynamic, [core.String, core.String], [dart.dynamic, dart.dynamic, dart.dynamic, dart.dynamic, dart.dynamic, dart.dynamic, dart.dynamic, dart.dynamic, dart.dynamic, dart.dynamic, dart.dynamic, dart.dynamic])))();
|
||||
let VoidToIsolateContext = () => (VoidToIsolateContext = dart.constFn(dart.definiteFunctionType(_foreign_helper.IsolateContext, [])))();
|
||||
let dynamicAndFunctionTodynamic = () => (dynamicAndFunctionTodynamic = dart.constFn(dart.definiteFunctionType(dart.dynamic, [dart.dynamic, core.Function])))();
|
||||
|
@ -1481,8 +1483,8 @@ dart._getRuntimeType = function(value) {
|
|||
dart.getIsNamedConstructor = function(value) {
|
||||
return value[dart.isNamedConstructor];
|
||||
};
|
||||
dart.getDartLibraryName = function(value) {
|
||||
return value[dart_library.dartLibraryName];
|
||||
dart.getModuleName = function(value) {
|
||||
return value[dart._moduleName];
|
||||
};
|
||||
dart.tag = function(value, t) {
|
||||
value[dart._runtimeType] = t;
|
||||
|
@ -1493,6 +1495,18 @@ dart.tagComputed = function(value, compute) {
|
|||
dart.tagLazy = function(value, compute) {
|
||||
dart.defineLazyProperty(value, dart._runtimeType, {get: compute});
|
||||
};
|
||||
dart.getModuleNames = function() {
|
||||
return Array.from(dart._loadedModules.keys());
|
||||
};
|
||||
dart.getModuleLibraries = function(name) {
|
||||
let module = dart._loadedModules.get(name);
|
||||
if (module == null) return null;
|
||||
module[dart._moduleName] = name;
|
||||
return module;
|
||||
};
|
||||
dart.trackLibraries = function(moduleName, libraries) {
|
||||
dart._loadedModules.set(moduleName, libraries);
|
||||
};
|
||||
dart._warn = function(arg) {
|
||||
console.warn(arg);
|
||||
};
|
||||
|
@ -1635,6 +1649,9 @@ dart.functionType = function(returnType, args, extra) {
|
|||
dart.definiteFunctionType = function(returnType, args, extra) {
|
||||
return dart._functionType(true, returnType, args, extra);
|
||||
};
|
||||
dart.isType = function(obj) {
|
||||
return dart._getRuntimeType(obj) === core.Type;
|
||||
};
|
||||
dart.typeName = function(type) {
|
||||
if (type === void 0) return "undefined type";
|
||||
if (type === null) return "null type";
|
||||
|
@ -2453,6 +2470,7 @@ dart.toString = function(obj) {
|
|||
return obj[dartx.toString]();
|
||||
}
|
||||
if (typeof obj == "function") {
|
||||
if (dart.test(dart.isType(obj))) return dart.typeName(obj);
|
||||
return "Closure: " + dart.getReifiedType(obj) + " from: " + obj;
|
||||
}
|
||||
return obj.toString();
|
||||
|
@ -2657,12 +2675,19 @@ dart._extensionType = Symbol("extensionType");
|
|||
dart.dartx = dartx;
|
||||
dart._runtimeType = Symbol("_runtimeType");
|
||||
dart.isNamedConstructor = Symbol("isNamedConstructor");
|
||||
dart._moduleName = Symbol("_moduleName");
|
||||
dart.defineLazy(dart, {
|
||||
get _lazyJSTypes() {
|
||||
return new Map();
|
||||
},
|
||||
set _lazyJSTypes(_) {}
|
||||
});
|
||||
dart.defineLazy(dart, {
|
||||
get _loadedModules() {
|
||||
return new Map();
|
||||
},
|
||||
set _loadedModules(_) {}
|
||||
});
|
||||
dart.metadata = Symbol("metadata");
|
||||
dart._typeObject = Symbol("typeObject");
|
||||
core.Object = class Object {
|
||||
|
@ -3216,9 +3241,51 @@ dart.setSignature(_debugger.JSNative, {
|
|||
names: ['getProperty', 'setProperty']
|
||||
});
|
||||
_debugger.addMetadataChildren = function(object, ret) {
|
||||
ret.add(new _debugger.NameValuePair({name: _debugger.getTypeName(core.Type._check(_debugger._getType(object))), value: object, config: _debugger.JsonMLConfig.asClass}));
|
||||
ret.add(new _debugger.NameValuePair({name: "[[class]]", value: dart.getReifiedType(object), config: _debugger.JsonMLConfig.asClass}));
|
||||
};
|
||||
dart.lazyFn(_debugger.addMetadataChildren, () => dynamicAndSetOfNameValuePairTovoid());
|
||||
_debugger.addPropertiesFromSignature = function(sig, properties, object, walkPrototypeChain, opts) {
|
||||
let tagTypes = opts && 'tagTypes' in opts ? opts.tagTypes : false;
|
||||
let skippedNames = core.Set.new();
|
||||
skippedNames.add('hashCode');
|
||||
while (sig != null) {
|
||||
for (let symbol of _debugger.getOwnPropertySymbols(sig)) {
|
||||
let dartName = _debugger.symbolName(symbol);
|
||||
let dartXPrefix = 'dartx.';
|
||||
if (dart.test(dartName[dartx.startsWith](dartXPrefix))) {
|
||||
dartName = dartName[dartx.substring](dartXPrefix[dartx.length]);
|
||||
}
|
||||
if (dart.test(skippedNames.contains(dartName))) continue;
|
||||
let value = _debugger.safeGetProperty(object, symbol);
|
||||
if (dart.test(tagTypes) && _debugger._typeof(value) == 'function') {
|
||||
dart.tag(value, sig[symbol]);
|
||||
}
|
||||
properties.add(new _debugger.NameValuePair({name: dartName, value: value}));
|
||||
}
|
||||
for (let name of _debugger.getOwnPropertyNames(sig)) {
|
||||
let value = _debugger.safeGetProperty(object, name);
|
||||
if (dart.test(skippedNames.contains(name))) continue;
|
||||
if (dart.test(tagTypes) && _debugger._typeof(value) == 'function') {
|
||||
dart.tag(value, sig[name]);
|
||||
}
|
||||
properties.add(new _debugger.NameValuePair({name: name, value: value}));
|
||||
}
|
||||
if (!dart.test(walkPrototypeChain)) break;
|
||||
sig = _debugger.safeGetProperty(sig, '__proto__');
|
||||
}
|
||||
};
|
||||
dart.lazyFn(_debugger.addPropertiesFromSignature, () => dynamicAndSetOfNameValuePairAnddynamic__Tovoid());
|
||||
_debugger.sortProperties = function(properties) {
|
||||
let sortedProperties = properties[dartx.toList]();
|
||||
sortedProperties[dartx.sort](dart.fn((a, b) => {
|
||||
let aPrivate = a.name[dartx.startsWith]('_');
|
||||
let bPrivate = b.name[dartx.startsWith]('_');
|
||||
if (aPrivate != bPrivate) return dart.test(aPrivate) ? 1 : -1;
|
||||
return a.name[dartx.compareTo](b.name);
|
||||
}, NameValuePairAndNameValuePairToint()));
|
||||
return sortedProperties;
|
||||
};
|
||||
dart.lazyFn(_debugger.sortProperties, () => IterableOfNameValuePairToListOfNameValuePair());
|
||||
_debugger.getObjectTypeName = function(object) {
|
||||
let reifiedType = dart.getReifiedType(object);
|
||||
if (reifiedType == null) {
|
||||
|
@ -3227,7 +3294,7 @@ _debugger.getObjectTypeName = function(object) {
|
|||
}
|
||||
return '<Error getting type name>';
|
||||
}
|
||||
return _debugger.getTypeName(core.Type._check(reifiedType));
|
||||
return _debugger.getTypeName(reifiedType);
|
||||
};
|
||||
dart.lazyFn(_debugger.getObjectTypeName, () => dynamicToString());
|
||||
_debugger.getTypeName = function(type) {
|
||||
|
@ -3235,11 +3302,7 @@ _debugger.getTypeName = function(type) {
|
|||
if (name == 'JSArray<dynamic>' || name == 'JSObject<Array>') return 'List<dynamic>';
|
||||
return name;
|
||||
};
|
||||
dart.lazyFn(_debugger.getTypeName, () => TypeToString());
|
||||
_debugger._getType = function(object) {
|
||||
return core.Type.is(object) ? object : dart.getReifiedType(object);
|
||||
};
|
||||
dart.fn(_debugger._getType, dynamicToObject());
|
||||
dart.lazyFn(_debugger.getTypeName, () => dynamicToString());
|
||||
const _simpleFormatter = Symbol('_simpleFormatter');
|
||||
_debugger.safePreview = function(object, config) {
|
||||
try {
|
||||
|
@ -3279,7 +3342,9 @@ _debugger.NameValuePair = class NameValuePair extends core.Object {
|
|||
this.hideName = hideName;
|
||||
}
|
||||
['=='](other) {
|
||||
return _debugger.NameValuePair.is(other) && other.name == this.name;
|
||||
if (!_debugger.NameValuePair.is(other)) return false;
|
||||
if (dart.test(this.hideName) || dart.test(dart.dload(other, 'hideName'))) return core.identical(this, other);
|
||||
return dart.equals(dart.dload(other, 'name'), this.name);
|
||||
}
|
||||
get hashCode() {
|
||||
return dart.hashCode(this.name);
|
||||
|
@ -3472,7 +3537,7 @@ dart.setSignature(_debugger.JsonMLElement, {
|
|||
});
|
||||
_debugger.isNativeJavaScriptObject = function(object) {
|
||||
let type = _debugger._typeof(object);
|
||||
return type != 'object' && type != 'function' || dart.JSObject.is(object) || html$.Node.is(object);
|
||||
return type != 'object' && type != 'function' || dart.test(dart.isJsInterop(object)) || html$.Node.is(object);
|
||||
};
|
||||
dart.lazyFn(_debugger.isNativeJavaScriptObject, () => dynamicTobool$());
|
||||
_debugger.JsonMLFormatter = class JsonMLFormatter extends core.Object {
|
||||
|
@ -3508,24 +3573,37 @@ _debugger.JsonMLFormatter = class JsonMLFormatter extends core.Object {
|
|||
body.addStyle('color: rgb(196, 26, 22);');
|
||||
}
|
||||
let children = this[_simpleFormatter].children(object, config);
|
||||
if (children == null) return body.toJsonML();
|
||||
for (let child of children) {
|
||||
let li = body.createChild('li');
|
||||
let nameSpan = new _debugger.JsonMLElement('span');
|
||||
nameSpan.createTextChild(dart.test(child.displayName[dartx.isNotEmpty]) ? dart.str`${child.displayName}: ` : '');
|
||||
nameSpan.setStyle('color: rgb(136, 19, 145);');
|
||||
li.setStyle("padding-left: 13px;");
|
||||
let nameSpan = null;
|
||||
let valueStyle = '';
|
||||
if (!dart.test(child.hideName)) {
|
||||
nameSpan = new _debugger.JsonMLElement('span');
|
||||
nameSpan.createTextChild(dart.test(child.displayName[dartx.isNotEmpty]) ? dart.str`${child.displayName}: ` : '');
|
||||
nameSpan.setStyle('color: rgb(136, 19, 145); margin-right: -13px');
|
||||
valueStyle = 'margin-left: 13px';
|
||||
}
|
||||
if (_debugger._typeof(child.value) == 'object' || _debugger._typeof(child.value) == 'function') {
|
||||
nameSpan.addStyle("padding-left: 13px;");
|
||||
li.appendChild(nameSpan);
|
||||
let objectTag = li.createObjectTag(child.value);
|
||||
objectTag.addAttribute('config', child.config);
|
||||
if (!dart.test(this[_simpleFormatter].hasChildren(child.value, child.config))) {
|
||||
li.setStyle("padding-left: 13px;");
|
||||
let valueSpan = new _debugger.JsonMLElement('span');
|
||||
valueSpan.setStyle(valueStyle);
|
||||
valueSpan.createObjectTag(child.value).addAttribute('config', child.config);
|
||||
if (nameSpan != null) {
|
||||
li.appendChild(nameSpan);
|
||||
}
|
||||
li.appendChild(valueSpan);
|
||||
} else {
|
||||
li.setStyle("padding-left: 13px;");
|
||||
let _ = li.createChild('span');
|
||||
_.appendChild(nameSpan);
|
||||
_.createTextChild(_debugger.safePreview(child.value, child.config));
|
||||
let line = li.createChild('span');
|
||||
if (nameSpan != null) {
|
||||
line.appendChild(nameSpan);
|
||||
}
|
||||
line.appendChild((() => {
|
||||
let _ = new _debugger.JsonMLElement('span');
|
||||
_.createTextChild(_debugger.safePreview(child.value, child.config));
|
||||
_.setStyle(valueStyle);
|
||||
return _;
|
||||
})());
|
||||
}
|
||||
}
|
||||
return body.toJsonML();
|
||||
|
@ -3548,7 +3626,7 @@ const _formatters = Symbol('_formatters');
|
|||
_debugger.DartFormatter = class DartFormatter extends core.Object {
|
||||
new() {
|
||||
this[_formatters] = null;
|
||||
this[_formatters] = JSArrayOfFormatter().of([new _debugger.ClassFormatter(), new _debugger.NamedConstructorFormatter(), new _debugger.MapFormatter(), new _debugger.IterableFormatter(), new _debugger.IterableSpanFormatter(), new _debugger.MapEntryFormatter(), new _debugger.StackTraceFormatter(), new _debugger.FunctionFormatter(), new _debugger.HeritageClauseFormatter(), new _debugger.LibraryModuleFormatter(), new _debugger.LibraryFormatter(), new _debugger.ObjectFormatter()]);
|
||||
this[_formatters] = JSArrayOfFormatter().of([new _debugger.ClassFormatter(), new _debugger.TypeFormatter(), new _debugger.NamedConstructorFormatter(), new _debugger.MapFormatter(), new _debugger.IterableFormatter(), new _debugger.IterableSpanFormatter(), new _debugger.MapEntryFormatter(), new _debugger.StackTraceFormatter(), new _debugger.FunctionFormatter(), new _debugger.HeritageClauseFormatter(), new _debugger.LibraryModuleFormatter(), new _debugger.LibraryFormatter(), new _debugger.ObjectFormatter()]);
|
||||
}
|
||||
preview(object, config) {
|
||||
try {
|
||||
|
@ -3612,42 +3690,14 @@ _debugger.ObjectFormatter = class ObjectFormatter extends _debugger.Formatter {
|
|||
return true;
|
||||
}
|
||||
children(object) {
|
||||
let properties = LinkedHashSetOfNameValuePair().new();
|
||||
_debugger.addMetadataChildren(object, properties);
|
||||
let current = object;
|
||||
let protoChain = JSArrayOfObject().of([]);
|
||||
while (current != null && !dart.test(_debugger.isNativeJavaScriptObject(current)) && current !== Object.prototype) {
|
||||
protoChain[dartx.add](current);
|
||||
current = _debugger.safeGetProperty(current, '__proto__');
|
||||
}
|
||||
for (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 = _debugger.safeGetProperty(object, symbol);
|
||||
properties.add(new _debugger.NameValuePair({name: dartName, value: value}));
|
||||
}
|
||||
}
|
||||
for (current of protoChain) {
|
||||
let className = dart.dload(dart.getReifiedType(current), 'name');
|
||||
for (let name of _debugger.getOwnPropertyNames(current)) {
|
||||
if (dart.test(_debugger.ObjectFormatter._customNames.contains(name)) || dart.equals(name, className)) continue;
|
||||
if (dart.test(_debugger.hasMethod(object, name))) {
|
||||
continue;
|
||||
}
|
||||
let value = _debugger.safeGetProperty(object, name);
|
||||
properties.add(new _debugger.NameValuePair({name: name, value: value}));
|
||||
}
|
||||
}
|
||||
return properties.toList();
|
||||
let type = dart.getType(object);
|
||||
let ret = LinkedHashSetOfNameValuePair().new();
|
||||
let properties = SetOfNameValuePair().new();
|
||||
_debugger.addPropertiesFromSignature(dart.getFieldSig(type), properties, object, true);
|
||||
_debugger.addPropertiesFromSignature(dart.getGetterSig(type), properties, object, true);
|
||||
ret.addAll(_debugger.sortProperties(properties));
|
||||
_debugger.addMetadataChildren(object, ret);
|
||||
return ret.toList();
|
||||
}
|
||||
};
|
||||
dart.setSignature(_debugger.ObjectFormatter, {
|
||||
|
@ -3658,28 +3708,16 @@ dart.setSignature(_debugger.ObjectFormatter, {
|
|||
children: dart.definiteFunctionType(core.List$(_debugger.NameValuePair), [dart.dynamic])
|
||||
})
|
||||
});
|
||||
dart.defineLazy(_debugger.ObjectFormatter, {
|
||||
get _customNames() {
|
||||
return (() => {
|
||||
let _ = SetOfString().new();
|
||||
_.add('constructor');
|
||||
_.add('prototype');
|
||||
_.add('__proto__');
|
||||
return _;
|
||||
})();
|
||||
},
|
||||
set _customNames(_) {}
|
||||
});
|
||||
_debugger.LibraryModuleFormatter = class LibraryModuleFormatter extends core.Object {
|
||||
accept(object, config) {
|
||||
return dart.getDartLibraryName(object) != null;
|
||||
return dart.getModuleName(object) != null;
|
||||
}
|
||||
hasChildren(object) {
|
||||
return true;
|
||||
}
|
||||
preview(object) {
|
||||
let libraryNames = dart.dsend(dart.getDartLibraryName(object), 'split', '/');
|
||||
if (dart.test(dart.dsend(dart.dload(libraryNames, 'length'), '>', 1))) {
|
||||
let libraryNames = dart.dsend(dart.getModuleName(object), 'split', '/');
|
||||
if (dart.test(dart.dsend(dart.dload(libraryNames, 'length'), '>', 1)) && dart.equals(dart.dload(libraryNames, 'last'), dart.dindex(libraryNames, dart.dsend(dart.dload(libraryNames, 'length'), '-', 2)))) {
|
||||
dart.dsetindex(libraryNames, dart.dsend(dart.dload(libraryNames, 'length'), '-', 1), '');
|
||||
}
|
||||
return dart.str`Library Module: ${dart.dsend(libraryNames, 'join', '/')}`;
|
||||
|
@ -3688,7 +3726,6 @@ _debugger.LibraryModuleFormatter = class LibraryModuleFormatter extends core.Obj
|
|||
let children = LinkedHashSetOfNameValuePair().new();
|
||||
for (let name of _debugger.getOwnPropertyNames(object)) {
|
||||
let value = _debugger.safeGetProperty(object, name);
|
||||
name = dart.str`${name[dartx.replaceAll]("__", "/")}.dart`;
|
||||
children.add(new _debugger.NameValuePair({name: name, value: new _debugger.Library(name, value), hideName: true}));
|
||||
}
|
||||
return children.toList();
|
||||
|
@ -3718,36 +3755,16 @@ _debugger.LibraryFormatter = class LibraryFormatter extends core.Object {
|
|||
}
|
||||
children(object) {
|
||||
let children = LinkedHashSetOfNameValuePair().new();
|
||||
let nonGenericProperties = LinkedHashMapOfString$Object().new();
|
||||
let objectProperties = _debugger.safeProperties(dart.dload(object, 'object'));
|
||||
dart.dsend(objectProperties, 'forEach', dart.fn((name, value) => {
|
||||
let genericTypeConstructor = dart.getGenericTypeCtor(value);
|
||||
if (genericTypeConstructor != null) {
|
||||
this.recordGenericParameters(core.String._check(name), genericTypeConstructor);
|
||||
} else {
|
||||
nonGenericProperties._set(core.String._check(name), value);
|
||||
}
|
||||
if (dart.getGenericTypeCtor(value) != null) return;
|
||||
children.add(_debugger.NameValuePair._check(dart.test(dart.isType(value)) ? this.classChild(core.String._check(name), value) : new _debugger.NameValuePair({name: core.String._check(name), value: value})));
|
||||
}, dynamicAnddynamicToNull()));
|
||||
nonGenericProperties.forEach(dart.fn((name, value) => {
|
||||
if (core.Type.is(value)) {
|
||||
children.add(_debugger.NameValuePair._check(this.classChild(name, value)));
|
||||
} else {
|
||||
children.add(new _debugger.NameValuePair({name: name, value: value}));
|
||||
}
|
||||
}, StringAndObjectToNull()));
|
||||
return children.toList();
|
||||
}
|
||||
recordGenericParameters(name, genericTypeConstructor) {
|
||||
this.genericParameters._set(name, genericTypeConstructor.toString()[dartx.split](' =>')[dartx.first][dartx.replaceAll](core.RegExp.new('[(|)]'), ''));
|
||||
}
|
||||
classChild(name, child) {
|
||||
let typeName = _debugger.getTypeName(core.Type._check(child));
|
||||
let parameterName = dart.str`${name}\$`;
|
||||
if (dart.test(this.genericParameters.keys[dartx.contains](parameterName))) {
|
||||
typeName = dart.str`${typeName}<${this.genericParameters._get(parameterName)}>`;
|
||||
_debugger.JSNative.setProperty(child, 'genericTypeName', typeName);
|
||||
}
|
||||
return new _debugger.NameValuePair({name: typeName, value: child});
|
||||
let typeName = _debugger.getTypeName(child);
|
||||
return new _debugger.NameValuePair({name: typeName, value: child, config: _debugger.JsonMLConfig.asClass});
|
||||
}
|
||||
};
|
||||
_debugger.LibraryFormatter[dart.implements] = () => [_debugger.Formatter];
|
||||
|
@ -3758,7 +3775,6 @@ dart.setSignature(_debugger.LibraryFormatter, {
|
|||
hasChildren: dart.definiteFunctionType(core.bool, [dart.dynamic]),
|
||||
preview: dart.definiteFunctionType(core.String, [dart.dynamic]),
|
||||
children: dart.definiteFunctionType(core.List$(_debugger.NameValuePair), [dart.dynamic]),
|
||||
recordGenericParameters: dart.definiteFunctionType(dart.dynamic, [core.String, core.Object]),
|
||||
classChild: dart.definiteFunctionType(dart.dynamic, [core.String, core.Object])
|
||||
})
|
||||
});
|
||||
|
@ -3975,60 +3991,49 @@ dart.setSignature(_debugger.StackTraceFormatter, {
|
|||
});
|
||||
_debugger.ClassFormatter = class ClassFormatter extends core.Object {
|
||||
accept(object, config) {
|
||||
return core.Type.is(object) || dart.equals(config, _debugger.JsonMLConfig.asClass);
|
||||
return dart.equals(config, _debugger.JsonMLConfig.asClass);
|
||||
}
|
||||
preview(object) {
|
||||
let typeName = _debugger.safeGetProperty(object, 'genericTypeName');
|
||||
if (typeName != null) return core.String._check(typeName);
|
||||
let type = _debugger._getType(object);
|
||||
preview(type) {
|
||||
let implements$ = dart.getImplements(type);
|
||||
typeName = _debugger.getTypeName(core.Type._check(type));
|
||||
let typeName = _debugger.getTypeName(type);
|
||||
if (implements$ != null) {
|
||||
let typeNames = dart.dsend(dart.dcall(implements$), 'map', _debugger.getTypeName);
|
||||
return dart.str`${typeName} implements ${dart.dsend(typeNames, 'join', ", ")}`;
|
||||
} else {
|
||||
return core.String._check(typeName);
|
||||
return typeName;
|
||||
}
|
||||
}
|
||||
hasChildren(object) {
|
||||
return true;
|
||||
}
|
||||
children(object) {
|
||||
let type = _debugger._getType(object);
|
||||
let children = JSArrayOfNameValuePair().of([]);
|
||||
let typeName = _debugger.getTypeName(core.Type._check(_debugger._getType(object)));
|
||||
children(type) {
|
||||
let ret = LinkedHashSetOfNameValuePair().new();
|
||||
let staticProperties = SetOfNameValuePair().new();
|
||||
let staticMethods = SetOfNameValuePair().new();
|
||||
_debugger.addPropertiesFromSignature(dart.getStaticFieldSig(type), staticProperties, type, false);
|
||||
_debugger.addPropertiesFromSignature(dart.getStaticGetterSig(type), staticProperties, type, false);
|
||||
_debugger.addPropertiesFromSignature(dart.getStaticSig(type), staticMethods, type, false);
|
||||
if (dart.test(staticProperties.isNotEmpty) || dart.test(staticMethods.isNotEmpty)) {
|
||||
ret.add(new _debugger.NameValuePair({value: '[[Static members]]', hideName: true}));
|
||||
ret.addAll(_debugger.sortProperties(staticProperties));
|
||||
ret.addAll(_debugger.sortProperties(staticMethods));
|
||||
}
|
||||
let instanceMethods = SetOfNameValuePair().new();
|
||||
_debugger.addPropertiesFromSignature(dart.getMethodSig(type), instanceMethods, type.prototype, false, {tagTypes: true});
|
||||
if (dart.test(instanceMethods.isNotEmpty)) {
|
||||
ret.add(new _debugger.NameValuePair({value: '[[Instance Methods]]', hideName: true}));
|
||||
ret.addAll(_debugger.sortProperties(instanceMethods));
|
||||
}
|
||||
let typeName = _debugger.getTypeName(type);
|
||||
let mixins = dart.getMixins(type);
|
||||
if (mixins != null && dart.test(dart.dload(mixins, 'isNotEmpty'))) {
|
||||
children[dartx.add](new _debugger.NameValuePair({name: '[[Mixins]]', value: new _debugger.HeritageClause('mixins', core.List._check(mixins))}));
|
||||
ret.add(new _debugger.NameValuePair({name: '[[Mixins]]', value: new _debugger.HeritageClause('mixins', core.List._check(mixins))}));
|
||||
}
|
||||
let hiddenProperties = JSArrayOfString().of(['length', 'name', 'prototype', 'genericTypeName']);
|
||||
for (let name of _debugger.getOwnPropertyNames(object)) {
|
||||
if (dart.test(hiddenProperties[dartx.contains](name))) continue;
|
||||
let value = _debugger.safeGetProperty(object, name);
|
||||
if (value != null && dart.getIsNamedConstructor(value) != null) {
|
||||
value = new _debugger.NamedConstructor(value);
|
||||
name = dart.str`${typeName}.${name}`;
|
||||
}
|
||||
children[dartx.add](new _debugger.NameValuePair({name: name, value: value}));
|
||||
let baseProto = type.__proto__;
|
||||
if (baseProto != null && !dart.test(dart.isJsInterop(baseProto))) {
|
||||
ret.add(new _debugger.NameValuePair({name: "[[base class]]", value: baseProto, config: _debugger.JsonMLConfig.asClass}));
|
||||
}
|
||||
let hiddenPrototypeProperties = JSArrayOfString().of(['constructor', 'new', '$identityHash']);
|
||||
let prototype = object.prototype;
|
||||
if (prototype != null) {
|
||||
for (let name of _debugger.getOwnPropertyNames(prototype)) {
|
||||
if (dart.test(hiddenPrototypeProperties[dartx.contains](name))) continue;
|
||||
let func = _debugger.safeGetProperty(prototype, name);
|
||||
let constructor = _debugger.safeGetProperty(prototype, 'constructor');
|
||||
let sigObj = dart.getMethodSig(constructor);
|
||||
if (sigObj != null) {
|
||||
let value = _debugger.safeGetProperty(sigObj, name);
|
||||
if (_debugger.getTypeName(core.Type._check(dart.getReifiedType(value))) != 'Null') {
|
||||
dart.tag(func, value);
|
||||
children[dartx.add](new _debugger.NameValuePair({name: name, value: func}));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return children;
|
||||
return ret.toList();
|
||||
}
|
||||
};
|
||||
_debugger.ClassFormatter[dart.implements] = () => [_debugger.Formatter];
|
||||
|
@ -4040,11 +4045,42 @@ dart.setSignature(_debugger.ClassFormatter, {
|
|||
children: dart.definiteFunctionType(core.List$(_debugger.NameValuePair), [dart.dynamic])
|
||||
})
|
||||
});
|
||||
_debugger.TypeFormatter = class TypeFormatter extends core.Object {
|
||||
accept(object, config) {
|
||||
return core.Type.is(object);
|
||||
}
|
||||
preview(object) {
|
||||
return dart.toString(object);
|
||||
}
|
||||
hasChildren(object) {
|
||||
return false;
|
||||
}
|
||||
children(object) {
|
||||
return JSArrayOfNameValuePair().of([]);
|
||||
}
|
||||
};
|
||||
_debugger.TypeFormatter[dart.implements] = () => [_debugger.Formatter];
|
||||
dart.setSignature(_debugger.TypeFormatter, {
|
||||
methods: () => ({
|
||||
accept: dart.definiteFunctionType(core.bool, [dart.dynamic, dart.dynamic]),
|
||||
preview: dart.definiteFunctionType(core.String, [dart.dynamic]),
|
||||
hasChildren: dart.definiteFunctionType(core.bool, [dart.dynamic]),
|
||||
children: dart.definiteFunctionType(core.List$(_debugger.NameValuePair), [dart.dynamic])
|
||||
})
|
||||
});
|
||||
_debugger.registerDevtoolsFormatter = function() {
|
||||
let formatters = JSArrayOfJsonMLFormatter().of([_debugger._devtoolsFormatter]);
|
||||
dart.global.devtoolsFormatters = formatters;
|
||||
};
|
||||
dart.fn(_debugger.registerDevtoolsFormatter, VoidTodynamic$());
|
||||
_debugger.getModuleNames = function() {
|
||||
return dart.getModuleNames();
|
||||
};
|
||||
dart.fn(_debugger.getModuleNames, VoidTodynamic$());
|
||||
_debugger.getModuleLibraries = function(name) {
|
||||
return dart.getModuleLibraries(name);
|
||||
};
|
||||
dart.lazyFn(_debugger.getModuleLibraries, () => StringTodynamic());
|
||||
_foreign_helper.JS = function(typeDescription, codeTemplate, arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11) {
|
||||
if (arg0 === void 0) arg0 = null;
|
||||
if (arg1 === void 0) arg1 = null;
|
||||
|
@ -11376,6 +11412,11 @@ _js_embedded_names.TYPEDEF_TYPE_PROPERTY_NAME = "$typedefType";
|
|||
_js_embedded_names.TYPEDEF_PREDICATE_PROPERTY_NAME = "$$isTypedef";
|
||||
_js_embedded_names.NATIVE_SUPERCLASS_TAG_NAME = "$nativeSuperclassTag";
|
||||
_js_embedded_names.MAP_TYPE_TO_INTERCEPTOR = "mapTypeToInterceptor";
|
||||
dart.defineLazy(_js_helper, {
|
||||
get _identityHashCode() {
|
||||
return Symbol("_identityHashCode");
|
||||
}
|
||||
});
|
||||
_js_helper._Patch = class _Patch extends core.Object {
|
||||
new() {
|
||||
}
|
||||
|
@ -11395,10 +11436,10 @@ _js_helper.Primitives = class Primitives extends core.Object {
|
|||
_js_helper.Primitives.mirrorInvokeCacheName = dart.notNull(_js_helper.Primitives.mirrorInvokeCacheName) + dart.str`_${id}`;
|
||||
}
|
||||
static objectHashCode(object) {
|
||||
let hash = object.$identityHash;
|
||||
let hash = object[_js_helper._identityHashCode];
|
||||
if (hash == null) {
|
||||
hash = Math.random() * 0x3fffffff | 0;
|
||||
object.$identityHash = hash;
|
||||
object[_js_helper._identityHashCode] = hash;
|
||||
}
|
||||
return hash;
|
||||
}
|
||||
|
@ -105403,6 +105444,7 @@ dart.setSignature(web_sql.SqlTransaction, {
|
|||
methods: () => ({[dartx.executeSql]: dart.definiteFunctionType(dart.void, [core.String, ListOfObject()], [web_sql.SqlStatementCallback, web_sql.SqlStatementErrorCallback])})
|
||||
});
|
||||
dart.registerExtension(dart.global.SQLTransaction, web_sql.SqlTransaction);
|
||||
dart.trackLibraries("dart_sdk", {"dart:_runtime": dart, "dart:_debugger": _debugger, "dart:_foreign_helper": _foreign_helper, "dart:_interceptors": _interceptors, "dart:_internal": _internal, "dart:_isolate_helper": _isolate_helper, "dart:_js_embedded_names": _js_embedded_names, "dart:_js_helper": _js_helper, "dart:_js_mirrors": _js_mirrors, "dart:_js_primitives": _js_primitives, "dart:_metadata": _metadata, "dart:_native_typed_data": _native_typed_data, "dart:async": async, "dart:collection": collection, "dart:convert": convert, "dart:core": core, "dart:developer": developer, "dart:io": io, "dart:isolate": isolate$, "dart:js": js, "dart:js_util": js_util, "dart:math": math, "dart:mirrors": mirrors, "dart:typed_data": typed_data, "dart:indexed_db": indexed_db, "dart:html": html$, "dart:html_common": html_common, "dart:svg": svg$, "dart:web_audio": web_audio, "dart:web_gl": web_gl, "dart:web_sql": web_sql});
|
||||
// Exports:
|
||||
exports.dart = dart;
|
||||
exports.dartx = dartx;
|
||||
|
|
|
@ -37,16 +37,14 @@ let MapOfSymbol$dynamic = () => (MapOfSymbol$dynamic = dart.constFn(core.Map$(co
|
|||
let MapOfString$_MethodStats = () => (MapOfString$_MethodStats = dart.constFn(core.Map$(core.String, dart._MethodStats)))();
|
||||
let ListOfString = () => (ListOfString = dart.constFn(core.List$(core.String)))();
|
||||
let SetOfNameValuePair = () => (SetOfNameValuePair = dart.constFn(core.Set$(_debugger.NameValuePair)))();
|
||||
let ListOfNameValuePair = () => (ListOfNameValuePair = dart.constFn(core.List$(_debugger.NameValuePair)))();
|
||||
let IterableOfNameValuePair = () => (IterableOfNameValuePair = dart.constFn(core.Iterable$(_debugger.NameValuePair)))();
|
||||
let JSArrayOfNameValuePair = () => (JSArrayOfNameValuePair = dart.constFn(_interceptors.JSArray$(_debugger.NameValuePair)))();
|
||||
let MapOfdynamic$Object = () => (MapOfdynamic$Object = dart.constFn(core.Map$(dart.dynamic, core.Object)))();
|
||||
let JSArrayOfFormatter = () => (JSArrayOfFormatter = dart.constFn(_interceptors.JSArray$(_debugger.Formatter)))();
|
||||
let ListOfFormatter = () => (ListOfFormatter = dart.constFn(core.List$(_debugger.Formatter)))();
|
||||
let LinkedHashSetOfNameValuePair = () => (LinkedHashSetOfNameValuePair = dart.constFn(collection.LinkedHashSet$(_debugger.NameValuePair)))();
|
||||
let SetOfString = () => (SetOfString = dart.constFn(core.Set$(core.String)))();
|
||||
let HashMapOfString$String = () => (HashMapOfString$String = dart.constFn(collection.HashMap$(core.String, core.String)))();
|
||||
let LinkedHashMapOfString$Object = () => (LinkedHashMapOfString$Object = dart.constFn(collection.LinkedHashMap$(core.String, core.Object)))();
|
||||
let ListOfNameValuePair = () => (ListOfNameValuePair = dart.constFn(core.List$(_debugger.NameValuePair)))();
|
||||
let JSArrayOfString = () => (JSArrayOfString = dart.constFn(_interceptors.JSArray$(core.String)))();
|
||||
let JSArrayOfJsonMLFormatter = () => (JSArrayOfJsonMLFormatter = dart.constFn(_interceptors.JSArray$(_debugger.JsonMLFormatter)))();
|
||||
let JSIndexable = () => (JSIndexable = dart.constFn(_interceptors.JSIndexable$()))();
|
||||
let JSArray = () => (JSArray = dart.constFn(_interceptors.JSArray$()))();
|
||||
|
@ -55,6 +53,7 @@ let JSFixedArray = () => (JSFixedArray = dart.constFn(_interceptors.JSFixedArray
|
|||
let JSExtendableArray = () => (JSExtendableArray = dart.constFn(_interceptors.JSExtendableArray$()))();
|
||||
let JSUnmodifiableArray = () => (JSUnmodifiableArray = dart.constFn(_interceptors.JSUnmodifiableArray$()))();
|
||||
let ArrayIterator = () => (ArrayIterator = dart.constFn(_interceptors.ArrayIterator$()))();
|
||||
let JSArrayOfString = () => (JSArrayOfString = dart.constFn(_interceptors.JSArray$(core.String)))();
|
||||
let JSIndexableOfString = () => (JSIndexableOfString = dart.constFn(_interceptors.JSIndexable$(core.String)))();
|
||||
let MatchToString = () => (MatchToString = dart.constFn(dart.functionType(core.String, [core.Match])))();
|
||||
let StringToString = () => (StringToString = dart.constFn(dart.functionType(core.String, [core.String])))();
|
||||
|
@ -602,6 +601,7 @@ let EventStreamProviderOfBeforeUnloadEvent = () => (EventStreamProviderOfBeforeU
|
|||
let ElementListOfElement = () => (ElementListOfElement = dart.constFn(html$.ElementList$(html$.Element)))();
|
||||
let ListOfRectangleOfnum = () => (ListOfRectangleOfnum = dart.constFn(core.List$(RectangleOfnum())))();
|
||||
let ListOfGamepad = () => (ListOfGamepad = dart.constFn(core.List$(html$.Gamepad)))();
|
||||
let SetOfString = () => (SetOfString = dart.constFn(core.Set$(core.String)))();
|
||||
let ListOfCssClassSetImpl = () => (ListOfCssClassSetImpl = dart.constFn(core.List$(html_common.CssClassSetImpl)))();
|
||||
let LinkedHashSetOfString = () => (LinkedHashSetOfString = dart.constFn(collection.LinkedHashSet$(core.String)))();
|
||||
let StringTobool = () => (StringTobool = dart.constFn(dart.functionType(core.bool, [core.String])))();
|
||||
|
@ -647,18 +647,20 @@ let dynamicToString = () => (dynamicToString = dart.constFn(dart.definiteFunctio
|
|||
let dynamicToListOfString = () => (dynamicToListOfString = dart.constFn(dart.definiteFunctionType(ListOfString(), [dart.dynamic])))();
|
||||
let dynamicToList = () => (dynamicToList = dart.constFn(dart.definiteFunctionType(core.List, [dart.dynamic])))();
|
||||
let dynamicAndSetOfNameValuePairTovoid = () => (dynamicAndSetOfNameValuePairTovoid = dart.constFn(dart.definiteFunctionType(dart.void, [dart.dynamic, SetOfNameValuePair()])))();
|
||||
let TypeToString = () => (TypeToString = dart.constFn(dart.definiteFunctionType(core.String, [core.Type])))();
|
||||
let dynamicToObject = () => (dynamicToObject = dart.constFn(dart.definiteFunctionType(core.Object, [dart.dynamic])))();
|
||||
let dynamicAndSetOfNameValuePairAnddynamic__Tovoid = () => (dynamicAndSetOfNameValuePairAnddynamic__Tovoid = dart.constFn(dart.definiteFunctionType(dart.void, [dart.dynamic, SetOfNameValuePair(), dart.dynamic, core.bool], {tagTypes: dart.dynamic})))();
|
||||
let NameValuePairAndNameValuePairToint = () => (NameValuePairAndNameValuePairToint = dart.constFn(dart.definiteFunctionType(core.int, [_debugger.NameValuePair, _debugger.NameValuePair])))();
|
||||
let IterableOfNameValuePairToListOfNameValuePair = () => (IterableOfNameValuePairToListOfNameValuePair = dart.constFn(dart.definiteFunctionType(ListOfNameValuePair(), [IterableOfNameValuePair()])))();
|
||||
let dynamicAnddynamicToString = () => (dynamicAnddynamicToString = dart.constFn(dart.definiteFunctionType(core.String, [dart.dynamic, dart.dynamic])))();
|
||||
let dynamicAndStringTobool = () => (dynamicAndStringTobool = dart.constFn(dart.definiteFunctionType(core.bool, [dart.dynamic, core.String])))();
|
||||
let intAnddynamicToNull = () => (intAnddynamicToNull = dart.constFn(dart.definiteFunctionType(core.Null, [core.int, dart.dynamic])))();
|
||||
let ObjectAndObjectToObject = () => (ObjectAndObjectToObject = dart.constFn(dart.definiteFunctionType(core.Object, [core.Object, core.Object])))();
|
||||
let StringTobool$ = () => (StringTobool$ = dart.constFn(dart.definiteFunctionType(core.bool, [core.String])))();
|
||||
let dynamicToObject = () => (dynamicToObject = dart.constFn(dart.definiteFunctionType(core.Object, [dart.dynamic])))();
|
||||
let dynamicTobool$ = () => (dynamicTobool$ = dart.constFn(dart.definiteFunctionType(core.bool, [dart.dynamic])))();
|
||||
let dynamicAnddynamicToNull = () => (dynamicAnddynamicToNull = dart.constFn(dart.definiteFunctionType(core.Null, [dart.dynamic, dart.dynamic])))();
|
||||
let StringAndObjectToNull = () => (StringAndObjectToNull = dart.constFn(dart.definiteFunctionType(core.Null, [core.String, core.Object])))();
|
||||
let StringToNameValuePair = () => (StringToNameValuePair = dart.constFn(dart.definiteFunctionType(_debugger.NameValuePair, [core.String])))();
|
||||
let VoidTodynamic$ = () => (VoidTodynamic$ = dart.constFn(dart.definiteFunctionType(dart.dynamic, [])))();
|
||||
let StringTodynamic = () => (StringTodynamic = dart.constFn(dart.definiteFunctionType(dart.dynamic, [core.String])))();
|
||||
let StringAndString__Todynamic = () => (StringAndString__Todynamic = dart.constFn(dart.definiteFunctionType(dart.dynamic, [core.String, core.String], [dart.dynamic, dart.dynamic, dart.dynamic, dart.dynamic, dart.dynamic, dart.dynamic, dart.dynamic, dart.dynamic, dart.dynamic, dart.dynamic, dart.dynamic, dart.dynamic])))();
|
||||
let VoidToIsolateContext = () => (VoidToIsolateContext = dart.constFn(dart.definiteFunctionType(_foreign_helper.IsolateContext, [])))();
|
||||
let dynamicAndFunctionTodynamic = () => (dynamicAndFunctionTodynamic = dart.constFn(dart.definiteFunctionType(dart.dynamic, [dart.dynamic, core.Function])))();
|
||||
|
@ -1480,8 +1482,8 @@ dart._getRuntimeType = function(value) {
|
|||
dart.getIsNamedConstructor = function(value) {
|
||||
return value[dart.isNamedConstructor];
|
||||
};
|
||||
dart.getDartLibraryName = function(value) {
|
||||
return value[dart_library.dartLibraryName];
|
||||
dart.getModuleName = function(value) {
|
||||
return value[dart._moduleName];
|
||||
};
|
||||
dart.tag = function(value, t) {
|
||||
value[dart._runtimeType] = t;
|
||||
|
@ -1492,6 +1494,18 @@ dart.tagComputed = function(value, compute) {
|
|||
dart.tagLazy = function(value, compute) {
|
||||
dart.defineLazyProperty(value, dart._runtimeType, {get: compute});
|
||||
};
|
||||
dart.getModuleNames = function() {
|
||||
return Array.from(dart._loadedModules.keys());
|
||||
};
|
||||
dart.getModuleLibraries = function(name) {
|
||||
let module = dart._loadedModules.get(name);
|
||||
if (module == null) return null;
|
||||
module[dart._moduleName] = name;
|
||||
return module;
|
||||
};
|
||||
dart.trackLibraries = function(moduleName, libraries) {
|
||||
dart._loadedModules.set(moduleName, libraries);
|
||||
};
|
||||
dart._warn = function(arg) {
|
||||
console.warn(arg);
|
||||
};
|
||||
|
@ -1634,6 +1648,9 @@ dart.functionType = function(returnType, args, extra) {
|
|||
dart.definiteFunctionType = function(returnType, args, extra) {
|
||||
return dart._functionType(true, returnType, args, extra);
|
||||
};
|
||||
dart.isType = function(obj) {
|
||||
return dart._getRuntimeType(obj) === core.Type;
|
||||
};
|
||||
dart.typeName = function(type) {
|
||||
if (type === void 0) return "undefined type";
|
||||
if (type === null) return "null type";
|
||||
|
@ -2452,6 +2469,7 @@ dart.toString = function(obj) {
|
|||
return obj[dartx.toString]();
|
||||
}
|
||||
if (typeof obj == "function") {
|
||||
if (dart.test(dart.isType(obj))) return dart.typeName(obj);
|
||||
return "Closure: " + dart.getReifiedType(obj) + " from: " + obj;
|
||||
}
|
||||
return obj.toString();
|
||||
|
@ -2656,12 +2674,19 @@ dart._extensionType = Symbol("extensionType");
|
|||
dart.dartx = dartx;
|
||||
dart._runtimeType = Symbol("_runtimeType");
|
||||
dart.isNamedConstructor = Symbol("isNamedConstructor");
|
||||
dart._moduleName = Symbol("_moduleName");
|
||||
dart.defineLazy(dart, {
|
||||
get _lazyJSTypes() {
|
||||
return new Map();
|
||||
},
|
||||
set _lazyJSTypes(_) {}
|
||||
});
|
||||
dart.defineLazy(dart, {
|
||||
get _loadedModules() {
|
||||
return new Map();
|
||||
},
|
||||
set _loadedModules(_) {}
|
||||
});
|
||||
dart.metadata = Symbol("metadata");
|
||||
dart._typeObject = Symbol("typeObject");
|
||||
core.Object = class Object {
|
||||
|
@ -3215,9 +3240,51 @@ dart.setSignature(_debugger.JSNative, {
|
|||
names: ['getProperty', 'setProperty']
|
||||
});
|
||||
_debugger.addMetadataChildren = function(object, ret) {
|
||||
ret.add(new _debugger.NameValuePair({name: _debugger.getTypeName(core.Type._check(_debugger._getType(object))), value: object, config: _debugger.JsonMLConfig.asClass}));
|
||||
ret.add(new _debugger.NameValuePair({name: "[[class]]", value: dart.getReifiedType(object), config: _debugger.JsonMLConfig.asClass}));
|
||||
};
|
||||
dart.lazyFn(_debugger.addMetadataChildren, () => dynamicAndSetOfNameValuePairTovoid());
|
||||
_debugger.addPropertiesFromSignature = function(sig, properties, object, walkPrototypeChain, opts) {
|
||||
let tagTypes = opts && 'tagTypes' in opts ? opts.tagTypes : false;
|
||||
let skippedNames = core.Set.new();
|
||||
skippedNames.add('hashCode');
|
||||
while (sig != null) {
|
||||
for (let symbol of _debugger.getOwnPropertySymbols(sig)) {
|
||||
let dartName = _debugger.symbolName(symbol);
|
||||
let dartXPrefix = 'dartx.';
|
||||
if (dart.test(dartName[dartx.startsWith](dartXPrefix))) {
|
||||
dartName = dartName[dartx.substring](dartXPrefix[dartx.length]);
|
||||
}
|
||||
if (dart.test(skippedNames.contains(dartName))) continue;
|
||||
let value = _debugger.safeGetProperty(object, symbol);
|
||||
if (dart.test(tagTypes) && _debugger._typeof(value) == 'function') {
|
||||
dart.tag(value, sig[symbol]);
|
||||
}
|
||||
properties.add(new _debugger.NameValuePair({name: dartName, value: value}));
|
||||
}
|
||||
for (let name of _debugger.getOwnPropertyNames(sig)) {
|
||||
let value = _debugger.safeGetProperty(object, name);
|
||||
if (dart.test(skippedNames.contains(name))) continue;
|
||||
if (dart.test(tagTypes) && _debugger._typeof(value) == 'function') {
|
||||
dart.tag(value, sig[name]);
|
||||
}
|
||||
properties.add(new _debugger.NameValuePair({name: name, value: value}));
|
||||
}
|
||||
if (!dart.test(walkPrototypeChain)) break;
|
||||
sig = _debugger.safeGetProperty(sig, '__proto__');
|
||||
}
|
||||
};
|
||||
dart.lazyFn(_debugger.addPropertiesFromSignature, () => dynamicAndSetOfNameValuePairAnddynamic__Tovoid());
|
||||
_debugger.sortProperties = function(properties) {
|
||||
let sortedProperties = properties[dartx.toList]();
|
||||
sortedProperties[dartx.sort](dart.fn((a, b) => {
|
||||
let aPrivate = a.name[dartx.startsWith]('_');
|
||||
let bPrivate = b.name[dartx.startsWith]('_');
|
||||
if (aPrivate != bPrivate) return dart.test(aPrivate) ? 1 : -1;
|
||||
return a.name[dartx.compareTo](b.name);
|
||||
}, NameValuePairAndNameValuePairToint()));
|
||||
return sortedProperties;
|
||||
};
|
||||
dart.lazyFn(_debugger.sortProperties, () => IterableOfNameValuePairToListOfNameValuePair());
|
||||
_debugger.getObjectTypeName = function(object) {
|
||||
let reifiedType = dart.getReifiedType(object);
|
||||
if (reifiedType == null) {
|
||||
|
@ -3226,7 +3293,7 @@ _debugger.getObjectTypeName = function(object) {
|
|||
}
|
||||
return '<Error getting type name>';
|
||||
}
|
||||
return _debugger.getTypeName(core.Type._check(reifiedType));
|
||||
return _debugger.getTypeName(reifiedType);
|
||||
};
|
||||
dart.lazyFn(_debugger.getObjectTypeName, () => dynamicToString());
|
||||
_debugger.getTypeName = function(type) {
|
||||
|
@ -3234,11 +3301,7 @@ _debugger.getTypeName = function(type) {
|
|||
if (name == 'JSArray<dynamic>' || name == 'JSObject<Array>') return 'List<dynamic>';
|
||||
return name;
|
||||
};
|
||||
dart.lazyFn(_debugger.getTypeName, () => TypeToString());
|
||||
_debugger._getType = function(object) {
|
||||
return core.Type.is(object) ? object : dart.getReifiedType(object);
|
||||
};
|
||||
dart.fn(_debugger._getType, dynamicToObject());
|
||||
dart.lazyFn(_debugger.getTypeName, () => dynamicToString());
|
||||
const _simpleFormatter = Symbol('_simpleFormatter');
|
||||
_debugger.safePreview = function(object, config) {
|
||||
try {
|
||||
|
@ -3278,7 +3341,9 @@ _debugger.NameValuePair = class NameValuePair extends core.Object {
|
|||
this.hideName = hideName;
|
||||
}
|
||||
['=='](other) {
|
||||
return _debugger.NameValuePair.is(other) && other.name == this.name;
|
||||
if (!_debugger.NameValuePair.is(other)) return false;
|
||||
if (dart.test(this.hideName) || dart.test(dart.dload(other, 'hideName'))) return core.identical(this, other);
|
||||
return dart.equals(dart.dload(other, 'name'), this.name);
|
||||
}
|
||||
get hashCode() {
|
||||
return dart.hashCode(this.name);
|
||||
|
@ -3471,7 +3536,7 @@ dart.setSignature(_debugger.JsonMLElement, {
|
|||
});
|
||||
_debugger.isNativeJavaScriptObject = function(object) {
|
||||
let type = _debugger._typeof(object);
|
||||
return type != 'object' && type != 'function' || dart.JSObject.is(object) || html$.Node.is(object);
|
||||
return type != 'object' && type != 'function' || dart.test(dart.isJsInterop(object)) || html$.Node.is(object);
|
||||
};
|
||||
dart.lazyFn(_debugger.isNativeJavaScriptObject, () => dynamicTobool$());
|
||||
_debugger.JsonMLFormatter = class JsonMLFormatter extends core.Object {
|
||||
|
@ -3507,24 +3572,37 @@ _debugger.JsonMLFormatter = class JsonMLFormatter extends core.Object {
|
|||
body.addStyle('color: rgb(196, 26, 22);');
|
||||
}
|
||||
let children = this[_simpleFormatter].children(object, config);
|
||||
if (children == null) return body.toJsonML();
|
||||
for (let child of children) {
|
||||
let li = body.createChild('li');
|
||||
let nameSpan = new _debugger.JsonMLElement('span');
|
||||
nameSpan.createTextChild(dart.test(child.displayName[dartx.isNotEmpty]) ? dart.str`${child.displayName}: ` : '');
|
||||
nameSpan.setStyle('color: rgb(136, 19, 145);');
|
||||
li.setStyle("padding-left: 13px;");
|
||||
let nameSpan = null;
|
||||
let valueStyle = '';
|
||||
if (!dart.test(child.hideName)) {
|
||||
nameSpan = new _debugger.JsonMLElement('span');
|
||||
nameSpan.createTextChild(dart.test(child.displayName[dartx.isNotEmpty]) ? dart.str`${child.displayName}: ` : '');
|
||||
nameSpan.setStyle('color: rgb(136, 19, 145); margin-right: -13px');
|
||||
valueStyle = 'margin-left: 13px';
|
||||
}
|
||||
if (_debugger._typeof(child.value) == 'object' || _debugger._typeof(child.value) == 'function') {
|
||||
nameSpan.addStyle("padding-left: 13px;");
|
||||
li.appendChild(nameSpan);
|
||||
let objectTag = li.createObjectTag(child.value);
|
||||
objectTag.addAttribute('config', child.config);
|
||||
if (!dart.test(this[_simpleFormatter].hasChildren(child.value, child.config))) {
|
||||
li.setStyle("padding-left: 13px;");
|
||||
let valueSpan = new _debugger.JsonMLElement('span');
|
||||
valueSpan.setStyle(valueStyle);
|
||||
valueSpan.createObjectTag(child.value).addAttribute('config', child.config);
|
||||
if (nameSpan != null) {
|
||||
li.appendChild(nameSpan);
|
||||
}
|
||||
li.appendChild(valueSpan);
|
||||
} else {
|
||||
li.setStyle("padding-left: 13px;");
|
||||
let _ = li.createChild('span');
|
||||
_.appendChild(nameSpan);
|
||||
_.createTextChild(_debugger.safePreview(child.value, child.config));
|
||||
let line = li.createChild('span');
|
||||
if (nameSpan != null) {
|
||||
line.appendChild(nameSpan);
|
||||
}
|
||||
line.appendChild((() => {
|
||||
let _ = new _debugger.JsonMLElement('span');
|
||||
_.createTextChild(_debugger.safePreview(child.value, child.config));
|
||||
_.setStyle(valueStyle);
|
||||
return _;
|
||||
})());
|
||||
}
|
||||
}
|
||||
return body.toJsonML();
|
||||
|
@ -3547,7 +3625,7 @@ const _formatters = Symbol('_formatters');
|
|||
_debugger.DartFormatter = class DartFormatter extends core.Object {
|
||||
new() {
|
||||
this[_formatters] = null;
|
||||
this[_formatters] = JSArrayOfFormatter().of([new _debugger.ClassFormatter(), new _debugger.NamedConstructorFormatter(), new _debugger.MapFormatter(), new _debugger.IterableFormatter(), new _debugger.IterableSpanFormatter(), new _debugger.MapEntryFormatter(), new _debugger.StackTraceFormatter(), new _debugger.FunctionFormatter(), new _debugger.HeritageClauseFormatter(), new _debugger.LibraryModuleFormatter(), new _debugger.LibraryFormatter(), new _debugger.ObjectFormatter()]);
|
||||
this[_formatters] = JSArrayOfFormatter().of([new _debugger.ClassFormatter(), new _debugger.TypeFormatter(), new _debugger.NamedConstructorFormatter(), new _debugger.MapFormatter(), new _debugger.IterableFormatter(), new _debugger.IterableSpanFormatter(), new _debugger.MapEntryFormatter(), new _debugger.StackTraceFormatter(), new _debugger.FunctionFormatter(), new _debugger.HeritageClauseFormatter(), new _debugger.LibraryModuleFormatter(), new _debugger.LibraryFormatter(), new _debugger.ObjectFormatter()]);
|
||||
}
|
||||
preview(object, config) {
|
||||
try {
|
||||
|
@ -3611,42 +3689,14 @@ _debugger.ObjectFormatter = class ObjectFormatter extends _debugger.Formatter {
|
|||
return true;
|
||||
}
|
||||
children(object) {
|
||||
let properties = LinkedHashSetOfNameValuePair().new();
|
||||
_debugger.addMetadataChildren(object, properties);
|
||||
let current = object;
|
||||
let protoChain = JSArrayOfObject().of([]);
|
||||
while (current != null && !dart.test(_debugger.isNativeJavaScriptObject(current)) && current !== Object.prototype) {
|
||||
protoChain[dartx.add](current);
|
||||
current = _debugger.safeGetProperty(current, '__proto__');
|
||||
}
|
||||
for (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 = _debugger.safeGetProperty(object, symbol);
|
||||
properties.add(new _debugger.NameValuePair({name: dartName, value: value}));
|
||||
}
|
||||
}
|
||||
for (current of protoChain) {
|
||||
let className = dart.dload(dart.getReifiedType(current), 'name');
|
||||
for (let name of _debugger.getOwnPropertyNames(current)) {
|
||||
if (dart.test(_debugger.ObjectFormatter._customNames.contains(name)) || dart.equals(name, className)) continue;
|
||||
if (dart.test(_debugger.hasMethod(object, name))) {
|
||||
continue;
|
||||
}
|
||||
let value = _debugger.safeGetProperty(object, name);
|
||||
properties.add(new _debugger.NameValuePair({name: name, value: value}));
|
||||
}
|
||||
}
|
||||
return properties.toList();
|
||||
let type = dart.getType(object);
|
||||
let ret = LinkedHashSetOfNameValuePair().new();
|
||||
let properties = SetOfNameValuePair().new();
|
||||
_debugger.addPropertiesFromSignature(dart.getFieldSig(type), properties, object, true);
|
||||
_debugger.addPropertiesFromSignature(dart.getGetterSig(type), properties, object, true);
|
||||
ret.addAll(_debugger.sortProperties(properties));
|
||||
_debugger.addMetadataChildren(object, ret);
|
||||
return ret.toList();
|
||||
}
|
||||
};
|
||||
dart.setSignature(_debugger.ObjectFormatter, {
|
||||
|
@ -3657,28 +3707,16 @@ dart.setSignature(_debugger.ObjectFormatter, {
|
|||
children: dart.definiteFunctionType(core.List$(_debugger.NameValuePair), [dart.dynamic])
|
||||
})
|
||||
});
|
||||
dart.defineLazy(_debugger.ObjectFormatter, {
|
||||
get _customNames() {
|
||||
return (() => {
|
||||
let _ = SetOfString().new();
|
||||
_.add('constructor');
|
||||
_.add('prototype');
|
||||
_.add('__proto__');
|
||||
return _;
|
||||
})();
|
||||
},
|
||||
set _customNames(_) {}
|
||||
});
|
||||
_debugger.LibraryModuleFormatter = class LibraryModuleFormatter extends core.Object {
|
||||
accept(object, config) {
|
||||
return dart.getDartLibraryName(object) != null;
|
||||
return dart.getModuleName(object) != null;
|
||||
}
|
||||
hasChildren(object) {
|
||||
return true;
|
||||
}
|
||||
preview(object) {
|
||||
let libraryNames = dart.dsend(dart.getDartLibraryName(object), 'split', '/');
|
||||
if (dart.test(dart.dsend(dart.dload(libraryNames, 'length'), '>', 1))) {
|
||||
let libraryNames = dart.dsend(dart.getModuleName(object), 'split', '/');
|
||||
if (dart.test(dart.dsend(dart.dload(libraryNames, 'length'), '>', 1)) && dart.equals(dart.dload(libraryNames, 'last'), dart.dindex(libraryNames, dart.dsend(dart.dload(libraryNames, 'length'), '-', 2)))) {
|
||||
dart.dsetindex(libraryNames, dart.dsend(dart.dload(libraryNames, 'length'), '-', 1), '');
|
||||
}
|
||||
return dart.str`Library Module: ${dart.dsend(libraryNames, 'join', '/')}`;
|
||||
|
@ -3687,7 +3725,6 @@ _debugger.LibraryModuleFormatter = class LibraryModuleFormatter extends core.Obj
|
|||
let children = LinkedHashSetOfNameValuePair().new();
|
||||
for (let name of _debugger.getOwnPropertyNames(object)) {
|
||||
let value = _debugger.safeGetProperty(object, name);
|
||||
name = dart.str`${name[dartx.replaceAll]("__", "/")}.dart`;
|
||||
children.add(new _debugger.NameValuePair({name: name, value: new _debugger.Library(name, value), hideName: true}));
|
||||
}
|
||||
return children.toList();
|
||||
|
@ -3717,36 +3754,16 @@ _debugger.LibraryFormatter = class LibraryFormatter extends core.Object {
|
|||
}
|
||||
children(object) {
|
||||
let children = LinkedHashSetOfNameValuePair().new();
|
||||
let nonGenericProperties = LinkedHashMapOfString$Object().new();
|
||||
let objectProperties = _debugger.safeProperties(dart.dload(object, 'object'));
|
||||
dart.dsend(objectProperties, 'forEach', dart.fn((name, value) => {
|
||||
let genericTypeConstructor = dart.getGenericTypeCtor(value);
|
||||
if (genericTypeConstructor != null) {
|
||||
this.recordGenericParameters(core.String._check(name), genericTypeConstructor);
|
||||
} else {
|
||||
nonGenericProperties._set(core.String._check(name), value);
|
||||
}
|
||||
if (dart.getGenericTypeCtor(value) != null) return;
|
||||
children.add(_debugger.NameValuePair._check(dart.test(dart.isType(value)) ? this.classChild(core.String._check(name), value) : new _debugger.NameValuePair({name: core.String._check(name), value: value})));
|
||||
}, dynamicAnddynamicToNull()));
|
||||
nonGenericProperties.forEach(dart.fn((name, value) => {
|
||||
if (core.Type.is(value)) {
|
||||
children.add(_debugger.NameValuePair._check(this.classChild(name, value)));
|
||||
} else {
|
||||
children.add(new _debugger.NameValuePair({name: name, value: value}));
|
||||
}
|
||||
}, StringAndObjectToNull()));
|
||||
return children.toList();
|
||||
}
|
||||
recordGenericParameters(name, genericTypeConstructor) {
|
||||
this.genericParameters._set(name, genericTypeConstructor.toString()[dartx.split](' =>')[dartx.first][dartx.replaceAll](core.RegExp.new('[(|)]'), ''));
|
||||
}
|
||||
classChild(name, child) {
|
||||
let typeName = _debugger.getTypeName(core.Type._check(child));
|
||||
let parameterName = dart.str`${name}\$`;
|
||||
if (dart.test(this.genericParameters.keys[dartx.contains](parameterName))) {
|
||||
typeName = dart.str`${typeName}<${this.genericParameters._get(parameterName)}>`;
|
||||
_debugger.JSNative.setProperty(child, 'genericTypeName', typeName);
|
||||
}
|
||||
return new _debugger.NameValuePair({name: typeName, value: child});
|
||||
let typeName = _debugger.getTypeName(child);
|
||||
return new _debugger.NameValuePair({name: typeName, value: child, config: _debugger.JsonMLConfig.asClass});
|
||||
}
|
||||
};
|
||||
_debugger.LibraryFormatter[dart.implements] = () => [_debugger.Formatter];
|
||||
|
@ -3757,7 +3774,6 @@ dart.setSignature(_debugger.LibraryFormatter, {
|
|||
hasChildren: dart.definiteFunctionType(core.bool, [dart.dynamic]),
|
||||
preview: dart.definiteFunctionType(core.String, [dart.dynamic]),
|
||||
children: dart.definiteFunctionType(core.List$(_debugger.NameValuePair), [dart.dynamic]),
|
||||
recordGenericParameters: dart.definiteFunctionType(dart.dynamic, [core.String, core.Object]),
|
||||
classChild: dart.definiteFunctionType(dart.dynamic, [core.String, core.Object])
|
||||
})
|
||||
});
|
||||
|
@ -3974,60 +3990,49 @@ dart.setSignature(_debugger.StackTraceFormatter, {
|
|||
});
|
||||
_debugger.ClassFormatter = class ClassFormatter extends core.Object {
|
||||
accept(object, config) {
|
||||
return core.Type.is(object) || dart.equals(config, _debugger.JsonMLConfig.asClass);
|
||||
return dart.equals(config, _debugger.JsonMLConfig.asClass);
|
||||
}
|
||||
preview(object) {
|
||||
let typeName = _debugger.safeGetProperty(object, 'genericTypeName');
|
||||
if (typeName != null) return core.String._check(typeName);
|
||||
let type = _debugger._getType(object);
|
||||
preview(type) {
|
||||
let implements$ = dart.getImplements(type);
|
||||
typeName = _debugger.getTypeName(core.Type._check(type));
|
||||
let typeName = _debugger.getTypeName(type);
|
||||
if (implements$ != null) {
|
||||
let typeNames = dart.dsend(dart.dcall(implements$), 'map', _debugger.getTypeName);
|
||||
return dart.str`${typeName} implements ${dart.dsend(typeNames, 'join', ", ")}`;
|
||||
} else {
|
||||
return core.String._check(typeName);
|
||||
return typeName;
|
||||
}
|
||||
}
|
||||
hasChildren(object) {
|
||||
return true;
|
||||
}
|
||||
children(object) {
|
||||
let type = _debugger._getType(object);
|
||||
let children = JSArrayOfNameValuePair().of([]);
|
||||
let typeName = _debugger.getTypeName(core.Type._check(_debugger._getType(object)));
|
||||
children(type) {
|
||||
let ret = LinkedHashSetOfNameValuePair().new();
|
||||
let staticProperties = SetOfNameValuePair().new();
|
||||
let staticMethods = SetOfNameValuePair().new();
|
||||
_debugger.addPropertiesFromSignature(dart.getStaticFieldSig(type), staticProperties, type, false);
|
||||
_debugger.addPropertiesFromSignature(dart.getStaticGetterSig(type), staticProperties, type, false);
|
||||
_debugger.addPropertiesFromSignature(dart.getStaticSig(type), staticMethods, type, false);
|
||||
if (dart.test(staticProperties.isNotEmpty) || dart.test(staticMethods.isNotEmpty)) {
|
||||
ret.add(new _debugger.NameValuePair({value: '[[Static members]]', hideName: true}));
|
||||
ret.addAll(_debugger.sortProperties(staticProperties));
|
||||
ret.addAll(_debugger.sortProperties(staticMethods));
|
||||
}
|
||||
let instanceMethods = SetOfNameValuePair().new();
|
||||
_debugger.addPropertiesFromSignature(dart.getMethodSig(type), instanceMethods, type.prototype, false, {tagTypes: true});
|
||||
if (dart.test(instanceMethods.isNotEmpty)) {
|
||||
ret.add(new _debugger.NameValuePair({value: '[[Instance Methods]]', hideName: true}));
|
||||
ret.addAll(_debugger.sortProperties(instanceMethods));
|
||||
}
|
||||
let typeName = _debugger.getTypeName(type);
|
||||
let mixins = dart.getMixins(type);
|
||||
if (mixins != null && dart.test(dart.dload(mixins, 'isNotEmpty'))) {
|
||||
children[dartx.add](new _debugger.NameValuePair({name: '[[Mixins]]', value: new _debugger.HeritageClause('mixins', core.List._check(mixins))}));
|
||||
ret.add(new _debugger.NameValuePair({name: '[[Mixins]]', value: new _debugger.HeritageClause('mixins', core.List._check(mixins))}));
|
||||
}
|
||||
let hiddenProperties = JSArrayOfString().of(['length', 'name', 'prototype', 'genericTypeName']);
|
||||
for (let name of _debugger.getOwnPropertyNames(object)) {
|
||||
if (dart.test(hiddenProperties[dartx.contains](name))) continue;
|
||||
let value = _debugger.safeGetProperty(object, name);
|
||||
if (value != null && dart.getIsNamedConstructor(value) != null) {
|
||||
value = new _debugger.NamedConstructor(value);
|
||||
name = dart.str`${typeName}.${name}`;
|
||||
}
|
||||
children[dartx.add](new _debugger.NameValuePair({name: name, value: value}));
|
||||
let baseProto = type.__proto__;
|
||||
if (baseProto != null && !dart.test(dart.isJsInterop(baseProto))) {
|
||||
ret.add(new _debugger.NameValuePair({name: "[[base class]]", value: baseProto, config: _debugger.JsonMLConfig.asClass}));
|
||||
}
|
||||
let hiddenPrototypeProperties = JSArrayOfString().of(['constructor', 'new', '$identityHash']);
|
||||
let prototype = object.prototype;
|
||||
if (prototype != null) {
|
||||
for (let name of _debugger.getOwnPropertyNames(prototype)) {
|
||||
if (dart.test(hiddenPrototypeProperties[dartx.contains](name))) continue;
|
||||
let func = _debugger.safeGetProperty(prototype, name);
|
||||
let constructor = _debugger.safeGetProperty(prototype, 'constructor');
|
||||
let sigObj = dart.getMethodSig(constructor);
|
||||
if (sigObj != null) {
|
||||
let value = _debugger.safeGetProperty(sigObj, name);
|
||||
if (_debugger.getTypeName(core.Type._check(dart.getReifiedType(value))) != 'Null') {
|
||||
dart.tag(func, value);
|
||||
children[dartx.add](new _debugger.NameValuePair({name: name, value: func}));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return children;
|
||||
return ret.toList();
|
||||
}
|
||||
};
|
||||
_debugger.ClassFormatter[dart.implements] = () => [_debugger.Formatter];
|
||||
|
@ -4039,11 +4044,42 @@ dart.setSignature(_debugger.ClassFormatter, {
|
|||
children: dart.definiteFunctionType(core.List$(_debugger.NameValuePair), [dart.dynamic])
|
||||
})
|
||||
});
|
||||
_debugger.TypeFormatter = class TypeFormatter extends core.Object {
|
||||
accept(object, config) {
|
||||
return core.Type.is(object);
|
||||
}
|
||||
preview(object) {
|
||||
return dart.toString(object);
|
||||
}
|
||||
hasChildren(object) {
|
||||
return false;
|
||||
}
|
||||
children(object) {
|
||||
return JSArrayOfNameValuePair().of([]);
|
||||
}
|
||||
};
|
||||
_debugger.TypeFormatter[dart.implements] = () => [_debugger.Formatter];
|
||||
dart.setSignature(_debugger.TypeFormatter, {
|
||||
methods: () => ({
|
||||
accept: dart.definiteFunctionType(core.bool, [dart.dynamic, dart.dynamic]),
|
||||
preview: dart.definiteFunctionType(core.String, [dart.dynamic]),
|
||||
hasChildren: dart.definiteFunctionType(core.bool, [dart.dynamic]),
|
||||
children: dart.definiteFunctionType(core.List$(_debugger.NameValuePair), [dart.dynamic])
|
||||
})
|
||||
});
|
||||
_debugger.registerDevtoolsFormatter = function() {
|
||||
let formatters = JSArrayOfJsonMLFormatter().of([_debugger._devtoolsFormatter]);
|
||||
dart.global.devtoolsFormatters = formatters;
|
||||
};
|
||||
dart.fn(_debugger.registerDevtoolsFormatter, VoidTodynamic$());
|
||||
_debugger.getModuleNames = function() {
|
||||
return dart.getModuleNames();
|
||||
};
|
||||
dart.fn(_debugger.getModuleNames, VoidTodynamic$());
|
||||
_debugger.getModuleLibraries = function(name) {
|
||||
return dart.getModuleLibraries(name);
|
||||
};
|
||||
dart.lazyFn(_debugger.getModuleLibraries, () => StringTodynamic());
|
||||
_foreign_helper.JS = function(typeDescription, codeTemplate, arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11) {
|
||||
if (arg0 === void 0) arg0 = null;
|
||||
if (arg1 === void 0) arg1 = null;
|
||||
|
@ -11375,6 +11411,11 @@ _js_embedded_names.TYPEDEF_TYPE_PROPERTY_NAME = "$typedefType";
|
|||
_js_embedded_names.TYPEDEF_PREDICATE_PROPERTY_NAME = "$$isTypedef";
|
||||
_js_embedded_names.NATIVE_SUPERCLASS_TAG_NAME = "$nativeSuperclassTag";
|
||||
_js_embedded_names.MAP_TYPE_TO_INTERCEPTOR = "mapTypeToInterceptor";
|
||||
dart.defineLazy(_js_helper, {
|
||||
get _identityHashCode() {
|
||||
return Symbol("_identityHashCode");
|
||||
}
|
||||
});
|
||||
_js_helper._Patch = class _Patch extends core.Object {
|
||||
new() {
|
||||
}
|
||||
|
@ -11394,10 +11435,10 @@ _js_helper.Primitives = class Primitives extends core.Object {
|
|||
_js_helper.Primitives.mirrorInvokeCacheName = dart.notNull(_js_helper.Primitives.mirrorInvokeCacheName) + dart.str`_${id}`;
|
||||
}
|
||||
static objectHashCode(object) {
|
||||
let hash = object.$identityHash;
|
||||
let hash = object[_js_helper._identityHashCode];
|
||||
if (hash == null) {
|
||||
hash = Math.random() * 0x3fffffff | 0;
|
||||
object.$identityHash = hash;
|
||||
object[_js_helper._identityHashCode] = hash;
|
||||
}
|
||||
return hash;
|
||||
}
|
||||
|
@ -105402,3 +105443,4 @@ dart.setSignature(web_sql.SqlTransaction, {
|
|||
methods: () => ({[dartx.executeSql]: dart.definiteFunctionType(dart.void, [core.String, ListOfObject()], [web_sql.SqlStatementCallback, web_sql.SqlStatementErrorCallback])})
|
||||
});
|
||||
dart.registerExtension(dart.global.SQLTransaction, web_sql.SqlTransaction);
|
||||
dart.trackLibraries("dart_sdk", {"dart:_runtime": dart, "dart:_debugger": _debugger, "dart:_foreign_helper": _foreign_helper, "dart:_interceptors": _interceptors, "dart:_internal": _internal, "dart:_isolate_helper": _isolate_helper, "dart:_js_embedded_names": _js_embedded_names, "dart:_js_helper": _js_helper, "dart:_js_mirrors": _js_mirrors, "dart:_js_primitives": _js_primitives, "dart:_metadata": _metadata, "dart:_native_typed_data": _native_typed_data, "dart:async": async, "dart:collection": collection, "dart:convert": convert, "dart:core": core, "dart:developer": developer, "dart:io": io, "dart:isolate": isolate$, "dart:js": js, "dart:js_util": js_util, "dart:math": math, "dart:mirrors": mirrors, "dart:typed_data": typed_data, "dart:indexed_db": indexed_db, "dart:html": html$, "dart:html_common": html_common, "dart:svg": svg$, "dart:web_audio": web_audio, "dart:web_gl": web_gl, "dart:web_sql": web_sql});
|
||||
|
|
|
@ -17,9 +17,6 @@ dart_library =
|
|||
throw Error(message);
|
||||
}
|
||||
|
||||
const dartLibraryName = Symbol('dartLibraryName');
|
||||
dart_library.dartLibraryName = dartLibraryName;
|
||||
|
||||
const libraryImports = Symbol('libraryImports');
|
||||
dart_library.libraryImports = libraryImports;
|
||||
|
||||
|
@ -95,7 +92,7 @@ dart_library =
|
|||
// Load the library
|
||||
let loader = this;
|
||||
let library = this._library;
|
||||
library[dartLibraryName] = this._name;
|
||||
|
||||
library[libraryImports] = this._imports;
|
||||
library[loadedModule] = library;
|
||||
args.unshift(library);
|
||||
|
@ -187,9 +184,6 @@ dart_library =
|
|||
if (_bootstrapped) return;
|
||||
_bootstrapped = true;
|
||||
|
||||
// Force import of core.
|
||||
var dart_sdk = import_('dart_sdk');
|
||||
|
||||
// This import is only needed for chrome debugging. We should provide an
|
||||
// option to compile without it.
|
||||
dart_sdk._debugger.registerDevtoolsFormatter();
|
||||
|
|
|
@ -40,16 +40,14 @@ dart_library.library('dart_sdk', null, /* Imports */[
|
|||
let MapOfString$_MethodStats = () => (MapOfString$_MethodStats = dart.constFn(core.Map$(core.String, dart._MethodStats)))();
|
||||
let ListOfString = () => (ListOfString = dart.constFn(core.List$(core.String)))();
|
||||
let SetOfNameValuePair = () => (SetOfNameValuePair = dart.constFn(core.Set$(_debugger.NameValuePair)))();
|
||||
let ListOfNameValuePair = () => (ListOfNameValuePair = dart.constFn(core.List$(_debugger.NameValuePair)))();
|
||||
let IterableOfNameValuePair = () => (IterableOfNameValuePair = dart.constFn(core.Iterable$(_debugger.NameValuePair)))();
|
||||
let JSArrayOfNameValuePair = () => (JSArrayOfNameValuePair = dart.constFn(_interceptors.JSArray$(_debugger.NameValuePair)))();
|
||||
let MapOfdynamic$Object = () => (MapOfdynamic$Object = dart.constFn(core.Map$(dart.dynamic, core.Object)))();
|
||||
let JSArrayOfFormatter = () => (JSArrayOfFormatter = dart.constFn(_interceptors.JSArray$(_debugger.Formatter)))();
|
||||
let ListOfFormatter = () => (ListOfFormatter = dart.constFn(core.List$(_debugger.Formatter)))();
|
||||
let LinkedHashSetOfNameValuePair = () => (LinkedHashSetOfNameValuePair = dart.constFn(collection.LinkedHashSet$(_debugger.NameValuePair)))();
|
||||
let SetOfString = () => (SetOfString = dart.constFn(core.Set$(core.String)))();
|
||||
let HashMapOfString$String = () => (HashMapOfString$String = dart.constFn(collection.HashMap$(core.String, core.String)))();
|
||||
let LinkedHashMapOfString$Object = () => (LinkedHashMapOfString$Object = dart.constFn(collection.LinkedHashMap$(core.String, core.Object)))();
|
||||
let ListOfNameValuePair = () => (ListOfNameValuePair = dart.constFn(core.List$(_debugger.NameValuePair)))();
|
||||
let JSArrayOfString = () => (JSArrayOfString = dart.constFn(_interceptors.JSArray$(core.String)))();
|
||||
let JSArrayOfJsonMLFormatter = () => (JSArrayOfJsonMLFormatter = dart.constFn(_interceptors.JSArray$(_debugger.JsonMLFormatter)))();
|
||||
let JSIndexable = () => (JSIndexable = dart.constFn(_interceptors.JSIndexable$()))();
|
||||
let JSArray = () => (JSArray = dart.constFn(_interceptors.JSArray$()))();
|
||||
|
@ -58,6 +56,7 @@ dart_library.library('dart_sdk', null, /* Imports */[
|
|||
let JSExtendableArray = () => (JSExtendableArray = dart.constFn(_interceptors.JSExtendableArray$()))();
|
||||
let JSUnmodifiableArray = () => (JSUnmodifiableArray = dart.constFn(_interceptors.JSUnmodifiableArray$()))();
|
||||
let ArrayIterator = () => (ArrayIterator = dart.constFn(_interceptors.ArrayIterator$()))();
|
||||
let JSArrayOfString = () => (JSArrayOfString = dart.constFn(_interceptors.JSArray$(core.String)))();
|
||||
let JSIndexableOfString = () => (JSIndexableOfString = dart.constFn(_interceptors.JSIndexable$(core.String)))();
|
||||
let MatchToString = () => (MatchToString = dart.constFn(dart.functionType(core.String, [core.Match])))();
|
||||
let StringToString = () => (StringToString = dart.constFn(dart.functionType(core.String, [core.String])))();
|
||||
|
@ -605,6 +604,7 @@ dart_library.library('dart_sdk', null, /* Imports */[
|
|||
let ElementListOfElement = () => (ElementListOfElement = dart.constFn(html$.ElementList$(html$.Element)))();
|
||||
let ListOfRectangleOfnum = () => (ListOfRectangleOfnum = dart.constFn(core.List$(RectangleOfnum())))();
|
||||
let ListOfGamepad = () => (ListOfGamepad = dart.constFn(core.List$(html$.Gamepad)))();
|
||||
let SetOfString = () => (SetOfString = dart.constFn(core.Set$(core.String)))();
|
||||
let ListOfCssClassSetImpl = () => (ListOfCssClassSetImpl = dart.constFn(core.List$(html_common.CssClassSetImpl)))();
|
||||
let LinkedHashSetOfString = () => (LinkedHashSetOfString = dart.constFn(collection.LinkedHashSet$(core.String)))();
|
||||
let StringTobool = () => (StringTobool = dart.constFn(dart.functionType(core.bool, [core.String])))();
|
||||
|
@ -650,18 +650,20 @@ dart_library.library('dart_sdk', null, /* Imports */[
|
|||
let dynamicToListOfString = () => (dynamicToListOfString = dart.constFn(dart.definiteFunctionType(ListOfString(), [dart.dynamic])))();
|
||||
let dynamicToList = () => (dynamicToList = dart.constFn(dart.definiteFunctionType(core.List, [dart.dynamic])))();
|
||||
let dynamicAndSetOfNameValuePairTovoid = () => (dynamicAndSetOfNameValuePairTovoid = dart.constFn(dart.definiteFunctionType(dart.void, [dart.dynamic, SetOfNameValuePair()])))();
|
||||
let TypeToString = () => (TypeToString = dart.constFn(dart.definiteFunctionType(core.String, [core.Type])))();
|
||||
let dynamicToObject = () => (dynamicToObject = dart.constFn(dart.definiteFunctionType(core.Object, [dart.dynamic])))();
|
||||
let dynamicAndSetOfNameValuePairAnddynamic__Tovoid = () => (dynamicAndSetOfNameValuePairAnddynamic__Tovoid = dart.constFn(dart.definiteFunctionType(dart.void, [dart.dynamic, SetOfNameValuePair(), dart.dynamic, core.bool], {tagTypes: dart.dynamic})))();
|
||||
let NameValuePairAndNameValuePairToint = () => (NameValuePairAndNameValuePairToint = dart.constFn(dart.definiteFunctionType(core.int, [_debugger.NameValuePair, _debugger.NameValuePair])))();
|
||||
let IterableOfNameValuePairToListOfNameValuePair = () => (IterableOfNameValuePairToListOfNameValuePair = dart.constFn(dart.definiteFunctionType(ListOfNameValuePair(), [IterableOfNameValuePair()])))();
|
||||
let dynamicAnddynamicToString = () => (dynamicAnddynamicToString = dart.constFn(dart.definiteFunctionType(core.String, [dart.dynamic, dart.dynamic])))();
|
||||
let dynamicAndStringTobool = () => (dynamicAndStringTobool = dart.constFn(dart.definiteFunctionType(core.bool, [dart.dynamic, core.String])))();
|
||||
let intAnddynamicToNull = () => (intAnddynamicToNull = dart.constFn(dart.definiteFunctionType(core.Null, [core.int, dart.dynamic])))();
|
||||
let ObjectAndObjectToObject = () => (ObjectAndObjectToObject = dart.constFn(dart.definiteFunctionType(core.Object, [core.Object, core.Object])))();
|
||||
let StringTobool$ = () => (StringTobool$ = dart.constFn(dart.definiteFunctionType(core.bool, [core.String])))();
|
||||
let dynamicToObject = () => (dynamicToObject = dart.constFn(dart.definiteFunctionType(core.Object, [dart.dynamic])))();
|
||||
let dynamicTobool$ = () => (dynamicTobool$ = dart.constFn(dart.definiteFunctionType(core.bool, [dart.dynamic])))();
|
||||
let dynamicAnddynamicToNull = () => (dynamicAnddynamicToNull = dart.constFn(dart.definiteFunctionType(core.Null, [dart.dynamic, dart.dynamic])))();
|
||||
let StringAndObjectToNull = () => (StringAndObjectToNull = dart.constFn(dart.definiteFunctionType(core.Null, [core.String, core.Object])))();
|
||||
let StringToNameValuePair = () => (StringToNameValuePair = dart.constFn(dart.definiteFunctionType(_debugger.NameValuePair, [core.String])))();
|
||||
let VoidTodynamic$ = () => (VoidTodynamic$ = dart.constFn(dart.definiteFunctionType(dart.dynamic, [])))();
|
||||
let StringTodynamic = () => (StringTodynamic = dart.constFn(dart.definiteFunctionType(dart.dynamic, [core.String])))();
|
||||
let StringAndString__Todynamic = () => (StringAndString__Todynamic = dart.constFn(dart.definiteFunctionType(dart.dynamic, [core.String, core.String], [dart.dynamic, dart.dynamic, dart.dynamic, dart.dynamic, dart.dynamic, dart.dynamic, dart.dynamic, dart.dynamic, dart.dynamic, dart.dynamic, dart.dynamic, dart.dynamic])))();
|
||||
let VoidToIsolateContext = () => (VoidToIsolateContext = dart.constFn(dart.definiteFunctionType(_foreign_helper.IsolateContext, [])))();
|
||||
let dynamicAndFunctionTodynamic = () => (dynamicAndFunctionTodynamic = dart.constFn(dart.definiteFunctionType(dart.dynamic, [dart.dynamic, core.Function])))();
|
||||
|
@ -1483,8 +1485,8 @@ dart_library.library('dart_sdk', null, /* Imports */[
|
|||
dart.getIsNamedConstructor = function(value) {
|
||||
return value[dart.isNamedConstructor];
|
||||
};
|
||||
dart.getDartLibraryName = function(value) {
|
||||
return value[dart_library.dartLibraryName];
|
||||
dart.getModuleName = function(value) {
|
||||
return value[dart._moduleName];
|
||||
};
|
||||
dart.tag = function(value, t) {
|
||||
value[dart._runtimeType] = t;
|
||||
|
@ -1495,6 +1497,18 @@ dart_library.library('dart_sdk', null, /* Imports */[
|
|||
dart.tagLazy = function(value, compute) {
|
||||
dart.defineLazyProperty(value, dart._runtimeType, {get: compute});
|
||||
};
|
||||
dart.getModuleNames = function() {
|
||||
return Array.from(dart._loadedModules.keys());
|
||||
};
|
||||
dart.getModuleLibraries = function(name) {
|
||||
let module = dart._loadedModules.get(name);
|
||||
if (module == null) return null;
|
||||
module[dart._moduleName] = name;
|
||||
return module;
|
||||
};
|
||||
dart.trackLibraries = function(moduleName, libraries) {
|
||||
dart._loadedModules.set(moduleName, libraries);
|
||||
};
|
||||
dart._warn = function(arg) {
|
||||
console.warn(arg);
|
||||
};
|
||||
|
@ -1637,6 +1651,9 @@ dart_library.library('dart_sdk', null, /* Imports */[
|
|||
dart.definiteFunctionType = function(returnType, args, extra) {
|
||||
return dart._functionType(true, returnType, args, extra);
|
||||
};
|
||||
dart.isType = function(obj) {
|
||||
return dart._getRuntimeType(obj) === core.Type;
|
||||
};
|
||||
dart.typeName = function(type) {
|
||||
if (type === void 0) return "undefined type";
|
||||
if (type === null) return "null type";
|
||||
|
@ -2455,6 +2472,7 @@ dart_library.library('dart_sdk', null, /* Imports */[
|
|||
return obj[dartx.toString]();
|
||||
}
|
||||
if (typeof obj == "function") {
|
||||
if (dart.test(dart.isType(obj))) return dart.typeName(obj);
|
||||
return "Closure: " + dart.getReifiedType(obj) + " from: " + obj;
|
||||
}
|
||||
return obj.toString();
|
||||
|
@ -2659,12 +2677,19 @@ dart_library.library('dart_sdk', null, /* Imports */[
|
|||
dart.dartx = dartx;
|
||||
dart._runtimeType = Symbol("_runtimeType");
|
||||
dart.isNamedConstructor = Symbol("isNamedConstructor");
|
||||
dart._moduleName = Symbol("_moduleName");
|
||||
dart.defineLazy(dart, {
|
||||
get _lazyJSTypes() {
|
||||
return new Map();
|
||||
},
|
||||
set _lazyJSTypes(_) {}
|
||||
});
|
||||
dart.defineLazy(dart, {
|
||||
get _loadedModules() {
|
||||
return new Map();
|
||||
},
|
||||
set _loadedModules(_) {}
|
||||
});
|
||||
dart.metadata = Symbol("metadata");
|
||||
dart._typeObject = Symbol("typeObject");
|
||||
core.Object = class Object {
|
||||
|
@ -3218,9 +3243,51 @@ dart_library.library('dart_sdk', null, /* Imports */[
|
|||
names: ['getProperty', 'setProperty']
|
||||
});
|
||||
_debugger.addMetadataChildren = function(object, ret) {
|
||||
ret.add(new _debugger.NameValuePair({name: _debugger.getTypeName(core.Type._check(_debugger._getType(object))), value: object, config: _debugger.JsonMLConfig.asClass}));
|
||||
ret.add(new _debugger.NameValuePair({name: "[[class]]", value: dart.getReifiedType(object), config: _debugger.JsonMLConfig.asClass}));
|
||||
};
|
||||
dart.lazyFn(_debugger.addMetadataChildren, () => dynamicAndSetOfNameValuePairTovoid());
|
||||
_debugger.addPropertiesFromSignature = function(sig, properties, object, walkPrototypeChain, opts) {
|
||||
let tagTypes = opts && 'tagTypes' in opts ? opts.tagTypes : false;
|
||||
let skippedNames = core.Set.new();
|
||||
skippedNames.add('hashCode');
|
||||
while (sig != null) {
|
||||
for (let symbol of _debugger.getOwnPropertySymbols(sig)) {
|
||||
let dartName = _debugger.symbolName(symbol);
|
||||
let dartXPrefix = 'dartx.';
|
||||
if (dart.test(dartName[dartx.startsWith](dartXPrefix))) {
|
||||
dartName = dartName[dartx.substring](dartXPrefix[dartx.length]);
|
||||
}
|
||||
if (dart.test(skippedNames.contains(dartName))) continue;
|
||||
let value = _debugger.safeGetProperty(object, symbol);
|
||||
if (dart.test(tagTypes) && _debugger._typeof(value) == 'function') {
|
||||
dart.tag(value, sig[symbol]);
|
||||
}
|
||||
properties.add(new _debugger.NameValuePair({name: dartName, value: value}));
|
||||
}
|
||||
for (let name of _debugger.getOwnPropertyNames(sig)) {
|
||||
let value = _debugger.safeGetProperty(object, name);
|
||||
if (dart.test(skippedNames.contains(name))) continue;
|
||||
if (dart.test(tagTypes) && _debugger._typeof(value) == 'function') {
|
||||
dart.tag(value, sig[name]);
|
||||
}
|
||||
properties.add(new _debugger.NameValuePair({name: name, value: value}));
|
||||
}
|
||||
if (!dart.test(walkPrototypeChain)) break;
|
||||
sig = _debugger.safeGetProperty(sig, '__proto__');
|
||||
}
|
||||
};
|
||||
dart.lazyFn(_debugger.addPropertiesFromSignature, () => dynamicAndSetOfNameValuePairAnddynamic__Tovoid());
|
||||
_debugger.sortProperties = function(properties) {
|
||||
let sortedProperties = properties[dartx.toList]();
|
||||
sortedProperties[dartx.sort](dart.fn((a, b) => {
|
||||
let aPrivate = a.name[dartx.startsWith]('_');
|
||||
let bPrivate = b.name[dartx.startsWith]('_');
|
||||
if (aPrivate != bPrivate) return dart.test(aPrivate) ? 1 : -1;
|
||||
return a.name[dartx.compareTo](b.name);
|
||||
}, NameValuePairAndNameValuePairToint()));
|
||||
return sortedProperties;
|
||||
};
|
||||
dart.lazyFn(_debugger.sortProperties, () => IterableOfNameValuePairToListOfNameValuePair());
|
||||
_debugger.getObjectTypeName = function(object) {
|
||||
let reifiedType = dart.getReifiedType(object);
|
||||
if (reifiedType == null) {
|
||||
|
@ -3229,7 +3296,7 @@ dart_library.library('dart_sdk', null, /* Imports */[
|
|||
}
|
||||
return '<Error getting type name>';
|
||||
}
|
||||
return _debugger.getTypeName(core.Type._check(reifiedType));
|
||||
return _debugger.getTypeName(reifiedType);
|
||||
};
|
||||
dart.lazyFn(_debugger.getObjectTypeName, () => dynamicToString());
|
||||
_debugger.getTypeName = function(type) {
|
||||
|
@ -3237,11 +3304,7 @@ dart_library.library('dart_sdk', null, /* Imports */[
|
|||
if (name == 'JSArray<dynamic>' || name == 'JSObject<Array>') return 'List<dynamic>';
|
||||
return name;
|
||||
};
|
||||
dart.lazyFn(_debugger.getTypeName, () => TypeToString());
|
||||
_debugger._getType = function(object) {
|
||||
return core.Type.is(object) ? object : dart.getReifiedType(object);
|
||||
};
|
||||
dart.fn(_debugger._getType, dynamicToObject());
|
||||
dart.lazyFn(_debugger.getTypeName, () => dynamicToString());
|
||||
const _simpleFormatter = Symbol('_simpleFormatter');
|
||||
_debugger.safePreview = function(object, config) {
|
||||
try {
|
||||
|
@ -3281,7 +3344,9 @@ dart_library.library('dart_sdk', null, /* Imports */[
|
|||
this.hideName = hideName;
|
||||
}
|
||||
['=='](other) {
|
||||
return _debugger.NameValuePair.is(other) && other.name == this.name;
|
||||
if (!_debugger.NameValuePair.is(other)) return false;
|
||||
if (dart.test(this.hideName) || dart.test(dart.dload(other, 'hideName'))) return core.identical(this, other);
|
||||
return dart.equals(dart.dload(other, 'name'), this.name);
|
||||
}
|
||||
get hashCode() {
|
||||
return dart.hashCode(this.name);
|
||||
|
@ -3474,7 +3539,7 @@ dart_library.library('dart_sdk', null, /* Imports */[
|
|||
});
|
||||
_debugger.isNativeJavaScriptObject = function(object) {
|
||||
let type = _debugger._typeof(object);
|
||||
return type != 'object' && type != 'function' || dart.JSObject.is(object) || html$.Node.is(object);
|
||||
return type != 'object' && type != 'function' || dart.test(dart.isJsInterop(object)) || html$.Node.is(object);
|
||||
};
|
||||
dart.lazyFn(_debugger.isNativeJavaScriptObject, () => dynamicTobool$());
|
||||
_debugger.JsonMLFormatter = class JsonMLFormatter extends core.Object {
|
||||
|
@ -3510,24 +3575,37 @@ dart_library.library('dart_sdk', null, /* Imports */[
|
|||
body.addStyle('color: rgb(196, 26, 22);');
|
||||
}
|
||||
let children = this[_simpleFormatter].children(object, config);
|
||||
if (children == null) return body.toJsonML();
|
||||
for (let child of children) {
|
||||
let li = body.createChild('li');
|
||||
let nameSpan = new _debugger.JsonMLElement('span');
|
||||
nameSpan.createTextChild(dart.test(child.displayName[dartx.isNotEmpty]) ? dart.str`${child.displayName}: ` : '');
|
||||
nameSpan.setStyle('color: rgb(136, 19, 145);');
|
||||
li.setStyle("padding-left: 13px;");
|
||||
let nameSpan = null;
|
||||
let valueStyle = '';
|
||||
if (!dart.test(child.hideName)) {
|
||||
nameSpan = new _debugger.JsonMLElement('span');
|
||||
nameSpan.createTextChild(dart.test(child.displayName[dartx.isNotEmpty]) ? dart.str`${child.displayName}: ` : '');
|
||||
nameSpan.setStyle('color: rgb(136, 19, 145); margin-right: -13px');
|
||||
valueStyle = 'margin-left: 13px';
|
||||
}
|
||||
if (_debugger._typeof(child.value) == 'object' || _debugger._typeof(child.value) == 'function') {
|
||||
nameSpan.addStyle("padding-left: 13px;");
|
||||
li.appendChild(nameSpan);
|
||||
let objectTag = li.createObjectTag(child.value);
|
||||
objectTag.addAttribute('config', child.config);
|
||||
if (!dart.test(this[_simpleFormatter].hasChildren(child.value, child.config))) {
|
||||
li.setStyle("padding-left: 13px;");
|
||||
let valueSpan = new _debugger.JsonMLElement('span');
|
||||
valueSpan.setStyle(valueStyle);
|
||||
valueSpan.createObjectTag(child.value).addAttribute('config', child.config);
|
||||
if (nameSpan != null) {
|
||||
li.appendChild(nameSpan);
|
||||
}
|
||||
li.appendChild(valueSpan);
|
||||
} else {
|
||||
li.setStyle("padding-left: 13px;");
|
||||
let _ = li.createChild('span');
|
||||
_.appendChild(nameSpan);
|
||||
_.createTextChild(_debugger.safePreview(child.value, child.config));
|
||||
let line = li.createChild('span');
|
||||
if (nameSpan != null) {
|
||||
line.appendChild(nameSpan);
|
||||
}
|
||||
line.appendChild((() => {
|
||||
let _ = new _debugger.JsonMLElement('span');
|
||||
_.createTextChild(_debugger.safePreview(child.value, child.config));
|
||||
_.setStyle(valueStyle);
|
||||
return _;
|
||||
})());
|
||||
}
|
||||
}
|
||||
return body.toJsonML();
|
||||
|
@ -3550,7 +3628,7 @@ dart_library.library('dart_sdk', null, /* Imports */[
|
|||
_debugger.DartFormatter = class DartFormatter extends core.Object {
|
||||
new() {
|
||||
this[_formatters] = null;
|
||||
this[_formatters] = JSArrayOfFormatter().of([new _debugger.ClassFormatter(), new _debugger.NamedConstructorFormatter(), new _debugger.MapFormatter(), new _debugger.IterableFormatter(), new _debugger.IterableSpanFormatter(), new _debugger.MapEntryFormatter(), new _debugger.StackTraceFormatter(), new _debugger.FunctionFormatter(), new _debugger.HeritageClauseFormatter(), new _debugger.LibraryModuleFormatter(), new _debugger.LibraryFormatter(), new _debugger.ObjectFormatter()]);
|
||||
this[_formatters] = JSArrayOfFormatter().of([new _debugger.ClassFormatter(), new _debugger.TypeFormatter(), new _debugger.NamedConstructorFormatter(), new _debugger.MapFormatter(), new _debugger.IterableFormatter(), new _debugger.IterableSpanFormatter(), new _debugger.MapEntryFormatter(), new _debugger.StackTraceFormatter(), new _debugger.FunctionFormatter(), new _debugger.HeritageClauseFormatter(), new _debugger.LibraryModuleFormatter(), new _debugger.LibraryFormatter(), new _debugger.ObjectFormatter()]);
|
||||
}
|
||||
preview(object, config) {
|
||||
try {
|
||||
|
@ -3614,42 +3692,14 @@ dart_library.library('dart_sdk', null, /* Imports */[
|
|||
return true;
|
||||
}
|
||||
children(object) {
|
||||
let properties = LinkedHashSetOfNameValuePair().new();
|
||||
_debugger.addMetadataChildren(object, properties);
|
||||
let current = object;
|
||||
let protoChain = JSArrayOfObject().of([]);
|
||||
while (current != null && !dart.test(_debugger.isNativeJavaScriptObject(current)) && current !== Object.prototype) {
|
||||
protoChain[dartx.add](current);
|
||||
current = _debugger.safeGetProperty(current, '__proto__');
|
||||
}
|
||||
for (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 = _debugger.safeGetProperty(object, symbol);
|
||||
properties.add(new _debugger.NameValuePair({name: dartName, value: value}));
|
||||
}
|
||||
}
|
||||
for (current of protoChain) {
|
||||
let className = dart.dload(dart.getReifiedType(current), 'name');
|
||||
for (let name of _debugger.getOwnPropertyNames(current)) {
|
||||
if (dart.test(_debugger.ObjectFormatter._customNames.contains(name)) || dart.equals(name, className)) continue;
|
||||
if (dart.test(_debugger.hasMethod(object, name))) {
|
||||
continue;
|
||||
}
|
||||
let value = _debugger.safeGetProperty(object, name);
|
||||
properties.add(new _debugger.NameValuePair({name: name, value: value}));
|
||||
}
|
||||
}
|
||||
return properties.toList();
|
||||
let type = dart.getType(object);
|
||||
let ret = LinkedHashSetOfNameValuePair().new();
|
||||
let properties = SetOfNameValuePair().new();
|
||||
_debugger.addPropertiesFromSignature(dart.getFieldSig(type), properties, object, true);
|
||||
_debugger.addPropertiesFromSignature(dart.getGetterSig(type), properties, object, true);
|
||||
ret.addAll(_debugger.sortProperties(properties));
|
||||
_debugger.addMetadataChildren(object, ret);
|
||||
return ret.toList();
|
||||
}
|
||||
};
|
||||
dart.setSignature(_debugger.ObjectFormatter, {
|
||||
|
@ -3660,28 +3710,16 @@ dart_library.library('dart_sdk', null, /* Imports */[
|
|||
children: dart.definiteFunctionType(core.List$(_debugger.NameValuePair), [dart.dynamic])
|
||||
})
|
||||
});
|
||||
dart.defineLazy(_debugger.ObjectFormatter, {
|
||||
get _customNames() {
|
||||
return (() => {
|
||||
let _ = SetOfString().new();
|
||||
_.add('constructor');
|
||||
_.add('prototype');
|
||||
_.add('__proto__');
|
||||
return _;
|
||||
})();
|
||||
},
|
||||
set _customNames(_) {}
|
||||
});
|
||||
_debugger.LibraryModuleFormatter = class LibraryModuleFormatter extends core.Object {
|
||||
accept(object, config) {
|
||||
return dart.getDartLibraryName(object) != null;
|
||||
return dart.getModuleName(object) != null;
|
||||
}
|
||||
hasChildren(object) {
|
||||
return true;
|
||||
}
|
||||
preview(object) {
|
||||
let libraryNames = dart.dsend(dart.getDartLibraryName(object), 'split', '/');
|
||||
if (dart.test(dart.dsend(dart.dload(libraryNames, 'length'), '>', 1))) {
|
||||
let libraryNames = dart.dsend(dart.getModuleName(object), 'split', '/');
|
||||
if (dart.test(dart.dsend(dart.dload(libraryNames, 'length'), '>', 1)) && dart.equals(dart.dload(libraryNames, 'last'), dart.dindex(libraryNames, dart.dsend(dart.dload(libraryNames, 'length'), '-', 2)))) {
|
||||
dart.dsetindex(libraryNames, dart.dsend(dart.dload(libraryNames, 'length'), '-', 1), '');
|
||||
}
|
||||
return dart.str`Library Module: ${dart.dsend(libraryNames, 'join', '/')}`;
|
||||
|
@ -3690,7 +3728,6 @@ dart_library.library('dart_sdk', null, /* Imports */[
|
|||
let children = LinkedHashSetOfNameValuePair().new();
|
||||
for (let name of _debugger.getOwnPropertyNames(object)) {
|
||||
let value = _debugger.safeGetProperty(object, name);
|
||||
name = dart.str`${name[dartx.replaceAll]("__", "/")}.dart`;
|
||||
children.add(new _debugger.NameValuePair({name: name, value: new _debugger.Library(name, value), hideName: true}));
|
||||
}
|
||||
return children.toList();
|
||||
|
@ -3720,36 +3757,16 @@ dart_library.library('dart_sdk', null, /* Imports */[
|
|||
}
|
||||
children(object) {
|
||||
let children = LinkedHashSetOfNameValuePair().new();
|
||||
let nonGenericProperties = LinkedHashMapOfString$Object().new();
|
||||
let objectProperties = _debugger.safeProperties(dart.dload(object, 'object'));
|
||||
dart.dsend(objectProperties, 'forEach', dart.fn((name, value) => {
|
||||
let genericTypeConstructor = dart.getGenericTypeCtor(value);
|
||||
if (genericTypeConstructor != null) {
|
||||
this.recordGenericParameters(core.String._check(name), genericTypeConstructor);
|
||||
} else {
|
||||
nonGenericProperties._set(core.String._check(name), value);
|
||||
}
|
||||
if (dart.getGenericTypeCtor(value) != null) return;
|
||||
children.add(_debugger.NameValuePair._check(dart.test(dart.isType(value)) ? this.classChild(core.String._check(name), value) : new _debugger.NameValuePair({name: core.String._check(name), value: value})));
|
||||
}, dynamicAnddynamicToNull()));
|
||||
nonGenericProperties.forEach(dart.fn((name, value) => {
|
||||
if (core.Type.is(value)) {
|
||||
children.add(_debugger.NameValuePair._check(this.classChild(name, value)));
|
||||
} else {
|
||||
children.add(new _debugger.NameValuePair({name: name, value: value}));
|
||||
}
|
||||
}, StringAndObjectToNull()));
|
||||
return children.toList();
|
||||
}
|
||||
recordGenericParameters(name, genericTypeConstructor) {
|
||||
this.genericParameters._set(name, genericTypeConstructor.toString()[dartx.split](' =>')[dartx.first][dartx.replaceAll](core.RegExp.new('[(|)]'), ''));
|
||||
}
|
||||
classChild(name, child) {
|
||||
let typeName = _debugger.getTypeName(core.Type._check(child));
|
||||
let parameterName = dart.str`${name}\$`;
|
||||
if (dart.test(this.genericParameters.keys[dartx.contains](parameterName))) {
|
||||
typeName = dart.str`${typeName}<${this.genericParameters._get(parameterName)}>`;
|
||||
_debugger.JSNative.setProperty(child, 'genericTypeName', typeName);
|
||||
}
|
||||
return new _debugger.NameValuePair({name: typeName, value: child});
|
||||
let typeName = _debugger.getTypeName(child);
|
||||
return new _debugger.NameValuePair({name: typeName, value: child, config: _debugger.JsonMLConfig.asClass});
|
||||
}
|
||||
};
|
||||
_debugger.LibraryFormatter[dart.implements] = () => [_debugger.Formatter];
|
||||
|
@ -3760,7 +3777,6 @@ dart_library.library('dart_sdk', null, /* Imports */[
|
|||
hasChildren: dart.definiteFunctionType(core.bool, [dart.dynamic]),
|
||||
preview: dart.definiteFunctionType(core.String, [dart.dynamic]),
|
||||
children: dart.definiteFunctionType(core.List$(_debugger.NameValuePair), [dart.dynamic]),
|
||||
recordGenericParameters: dart.definiteFunctionType(dart.dynamic, [core.String, core.Object]),
|
||||
classChild: dart.definiteFunctionType(dart.dynamic, [core.String, core.Object])
|
||||
})
|
||||
});
|
||||
|
@ -3977,60 +3993,49 @@ dart_library.library('dart_sdk', null, /* Imports */[
|
|||
});
|
||||
_debugger.ClassFormatter = class ClassFormatter extends core.Object {
|
||||
accept(object, config) {
|
||||
return core.Type.is(object) || dart.equals(config, _debugger.JsonMLConfig.asClass);
|
||||
return dart.equals(config, _debugger.JsonMLConfig.asClass);
|
||||
}
|
||||
preview(object) {
|
||||
let typeName = _debugger.safeGetProperty(object, 'genericTypeName');
|
||||
if (typeName != null) return core.String._check(typeName);
|
||||
let type = _debugger._getType(object);
|
||||
preview(type) {
|
||||
let implements$ = dart.getImplements(type);
|
||||
typeName = _debugger.getTypeName(core.Type._check(type));
|
||||
let typeName = _debugger.getTypeName(type);
|
||||
if (implements$ != null) {
|
||||
let typeNames = dart.dsend(dart.dcall(implements$), 'map', _debugger.getTypeName);
|
||||
return dart.str`${typeName} implements ${dart.dsend(typeNames, 'join', ", ")}`;
|
||||
} else {
|
||||
return core.String._check(typeName);
|
||||
return typeName;
|
||||
}
|
||||
}
|
||||
hasChildren(object) {
|
||||
return true;
|
||||
}
|
||||
children(object) {
|
||||
let type = _debugger._getType(object);
|
||||
let children = JSArrayOfNameValuePair().of([]);
|
||||
let typeName = _debugger.getTypeName(core.Type._check(_debugger._getType(object)));
|
||||
children(type) {
|
||||
let ret = LinkedHashSetOfNameValuePair().new();
|
||||
let staticProperties = SetOfNameValuePair().new();
|
||||
let staticMethods = SetOfNameValuePair().new();
|
||||
_debugger.addPropertiesFromSignature(dart.getStaticFieldSig(type), staticProperties, type, false);
|
||||
_debugger.addPropertiesFromSignature(dart.getStaticGetterSig(type), staticProperties, type, false);
|
||||
_debugger.addPropertiesFromSignature(dart.getStaticSig(type), staticMethods, type, false);
|
||||
if (dart.test(staticProperties.isNotEmpty) || dart.test(staticMethods.isNotEmpty)) {
|
||||
ret.add(new _debugger.NameValuePair({value: '[[Static members]]', hideName: true}));
|
||||
ret.addAll(_debugger.sortProperties(staticProperties));
|
||||
ret.addAll(_debugger.sortProperties(staticMethods));
|
||||
}
|
||||
let instanceMethods = SetOfNameValuePair().new();
|
||||
_debugger.addPropertiesFromSignature(dart.getMethodSig(type), instanceMethods, type.prototype, false, {tagTypes: true});
|
||||
if (dart.test(instanceMethods.isNotEmpty)) {
|
||||
ret.add(new _debugger.NameValuePair({value: '[[Instance Methods]]', hideName: true}));
|
||||
ret.addAll(_debugger.sortProperties(instanceMethods));
|
||||
}
|
||||
let typeName = _debugger.getTypeName(type);
|
||||
let mixins = dart.getMixins(type);
|
||||
if (mixins != null && dart.test(dart.dload(mixins, 'isNotEmpty'))) {
|
||||
children[dartx.add](new _debugger.NameValuePair({name: '[[Mixins]]', value: new _debugger.HeritageClause('mixins', core.List._check(mixins))}));
|
||||
ret.add(new _debugger.NameValuePair({name: '[[Mixins]]', value: new _debugger.HeritageClause('mixins', core.List._check(mixins))}));
|
||||
}
|
||||
let hiddenProperties = JSArrayOfString().of(['length', 'name', 'prototype', 'genericTypeName']);
|
||||
for (let name of _debugger.getOwnPropertyNames(object)) {
|
||||
if (dart.test(hiddenProperties[dartx.contains](name))) continue;
|
||||
let value = _debugger.safeGetProperty(object, name);
|
||||
if (value != null && dart.getIsNamedConstructor(value) != null) {
|
||||
value = new _debugger.NamedConstructor(value);
|
||||
name = dart.str`${typeName}.${name}`;
|
||||
}
|
||||
children[dartx.add](new _debugger.NameValuePair({name: name, value: value}));
|
||||
let baseProto = type.__proto__;
|
||||
if (baseProto != null && !dart.test(dart.isJsInterop(baseProto))) {
|
||||
ret.add(new _debugger.NameValuePair({name: "[[base class]]", value: baseProto, config: _debugger.JsonMLConfig.asClass}));
|
||||
}
|
||||
let hiddenPrototypeProperties = JSArrayOfString().of(['constructor', 'new', '$identityHash']);
|
||||
let prototype = object.prototype;
|
||||
if (prototype != null) {
|
||||
for (let name of _debugger.getOwnPropertyNames(prototype)) {
|
||||
if (dart.test(hiddenPrototypeProperties[dartx.contains](name))) continue;
|
||||
let func = _debugger.safeGetProperty(prototype, name);
|
||||
let constructor = _debugger.safeGetProperty(prototype, 'constructor');
|
||||
let sigObj = dart.getMethodSig(constructor);
|
||||
if (sigObj != null) {
|
||||
let value = _debugger.safeGetProperty(sigObj, name);
|
||||
if (_debugger.getTypeName(core.Type._check(dart.getReifiedType(value))) != 'Null') {
|
||||
dart.tag(func, value);
|
||||
children[dartx.add](new _debugger.NameValuePair({name: name, value: func}));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return children;
|
||||
return ret.toList();
|
||||
}
|
||||
};
|
||||
_debugger.ClassFormatter[dart.implements] = () => [_debugger.Formatter];
|
||||
|
@ -4042,11 +4047,42 @@ dart_library.library('dart_sdk', null, /* Imports */[
|
|||
children: dart.definiteFunctionType(core.List$(_debugger.NameValuePair), [dart.dynamic])
|
||||
})
|
||||
});
|
||||
_debugger.TypeFormatter = class TypeFormatter extends core.Object {
|
||||
accept(object, config) {
|
||||
return core.Type.is(object);
|
||||
}
|
||||
preview(object) {
|
||||
return dart.toString(object);
|
||||
}
|
||||
hasChildren(object) {
|
||||
return false;
|
||||
}
|
||||
children(object) {
|
||||
return JSArrayOfNameValuePair().of([]);
|
||||
}
|
||||
};
|
||||
_debugger.TypeFormatter[dart.implements] = () => [_debugger.Formatter];
|
||||
dart.setSignature(_debugger.TypeFormatter, {
|
||||
methods: () => ({
|
||||
accept: dart.definiteFunctionType(core.bool, [dart.dynamic, dart.dynamic]),
|
||||
preview: dart.definiteFunctionType(core.String, [dart.dynamic]),
|
||||
hasChildren: dart.definiteFunctionType(core.bool, [dart.dynamic]),
|
||||
children: dart.definiteFunctionType(core.List$(_debugger.NameValuePair), [dart.dynamic])
|
||||
})
|
||||
});
|
||||
_debugger.registerDevtoolsFormatter = function() {
|
||||
let formatters = JSArrayOfJsonMLFormatter().of([_debugger._devtoolsFormatter]);
|
||||
dart.global.devtoolsFormatters = formatters;
|
||||
};
|
||||
dart.fn(_debugger.registerDevtoolsFormatter, VoidTodynamic$());
|
||||
_debugger.getModuleNames = function() {
|
||||
return dart.getModuleNames();
|
||||
};
|
||||
dart.fn(_debugger.getModuleNames, VoidTodynamic$());
|
||||
_debugger.getModuleLibraries = function(name) {
|
||||
return dart.getModuleLibraries(name);
|
||||
};
|
||||
dart.lazyFn(_debugger.getModuleLibraries, () => StringTodynamic());
|
||||
_foreign_helper.JS = function(typeDescription, codeTemplate, arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11) {
|
||||
if (arg0 === void 0) arg0 = null;
|
||||
if (arg1 === void 0) arg1 = null;
|
||||
|
@ -11378,6 +11414,11 @@ dart_library.library('dart_sdk', null, /* Imports */[
|
|||
_js_embedded_names.TYPEDEF_PREDICATE_PROPERTY_NAME = "$$isTypedef";
|
||||
_js_embedded_names.NATIVE_SUPERCLASS_TAG_NAME = "$nativeSuperclassTag";
|
||||
_js_embedded_names.MAP_TYPE_TO_INTERCEPTOR = "mapTypeToInterceptor";
|
||||
dart.defineLazy(_js_helper, {
|
||||
get _identityHashCode() {
|
||||
return Symbol("_identityHashCode");
|
||||
}
|
||||
});
|
||||
_js_helper._Patch = class _Patch extends core.Object {
|
||||
new() {
|
||||
}
|
||||
|
@ -11397,10 +11438,10 @@ dart_library.library('dart_sdk', null, /* Imports */[
|
|||
_js_helper.Primitives.mirrorInvokeCacheName = dart.notNull(_js_helper.Primitives.mirrorInvokeCacheName) + dart.str`_${id}`;
|
||||
}
|
||||
static objectHashCode(object) {
|
||||
let hash = object.$identityHash;
|
||||
let hash = object[_js_helper._identityHashCode];
|
||||
if (hash == null) {
|
||||
hash = Math.random() * 0x3fffffff | 0;
|
||||
object.$identityHash = hash;
|
||||
object[_js_helper._identityHashCode] = hash;
|
||||
}
|
||||
return hash;
|
||||
}
|
||||
|
@ -105405,6 +105446,7 @@ dart_library.library('dart_sdk', null, /* Imports */[
|
|||
methods: () => ({[dartx.executeSql]: dart.definiteFunctionType(dart.void, [core.String, ListOfObject()], [web_sql.SqlStatementCallback, web_sql.SqlStatementErrorCallback])})
|
||||
});
|
||||
dart.registerExtension(dart.global.SQLTransaction, web_sql.SqlTransaction);
|
||||
dart.trackLibraries("dart_sdk", {"dart:_runtime": dart, "dart:_debugger": _debugger, "dart:_foreign_helper": _foreign_helper, "dart:_interceptors": _interceptors, "dart:_internal": _internal, "dart:_isolate_helper": _isolate_helper, "dart:_js_embedded_names": _js_embedded_names, "dart:_js_helper": _js_helper, "dart:_js_mirrors": _js_mirrors, "dart:_js_primitives": _js_primitives, "dart:_metadata": _metadata, "dart:_native_typed_data": _native_typed_data, "dart:async": async, "dart:collection": collection, "dart:convert": convert, "dart:core": core, "dart:developer": developer, "dart:io": io, "dart:isolate": isolate$, "dart:js": js, "dart:js_util": js_util, "dart:math": math, "dart:mirrors": mirrors, "dart:typed_data": typed_data, "dart:indexed_db": indexed_db, "dart:html": html$, "dart:html_common": html_common, "dart:svg": svg$, "dart:web_audio": web_audio, "dart:web_gl": web_gl, "dart:web_sql": web_sql});
|
||||
// Exports:
|
||||
exports.dart = dart;
|
||||
exports.dartx = dartx;
|
||||
|
|
Binary file not shown.
|
@ -192,7 +192,7 @@ class CodeGenerator extends GeneralizingAstVisitor
|
|||
_libraryRoot += separator;
|
||||
}
|
||||
|
||||
var module = _emitModule(compilationUnits);
|
||||
var module = _emitModule(compilationUnits, unit.name);
|
||||
var dartApiSummary = _summarizeModule(compilationUnits);
|
||||
|
||||
return new JSModuleFile(unit.name, errors, options, module, dartApiSummary);
|
||||
|
@ -238,7 +238,7 @@ class CodeGenerator extends GeneralizingAstVisitor
|
|||
return bundle.toBuffer();
|
||||
}
|
||||
|
||||
JS.Program _emitModule(List<CompilationUnit> compilationUnits) {
|
||||
JS.Program _emitModule(List<CompilationUnit> compilationUnits, String name) {
|
||||
if (_moduleItems.isNotEmpty) {
|
||||
throw new StateError('Can only call emitModule once.');
|
||||
}
|
||||
|
@ -321,6 +321,11 @@ class CodeGenerator extends GeneralizingAstVisitor
|
|||
// hoisted definitions.
|
||||
items.addAll(_typeTable.discharge());
|
||||
|
||||
// Track the module name for each library in the module.
|
||||
// This data is only required for debugging.
|
||||
_moduleItems.add(js.statement('#.trackLibraries(#, #);',
|
||||
[_runtimeModule, js.string(name), _librariesDebuggerObject()]));
|
||||
|
||||
// Add the module's code (produced by visiting compilation units, above)
|
||||
_copyAndFlattenBlocks(items, _moduleItems);
|
||||
|
||||
|
@ -328,6 +333,17 @@ class CodeGenerator extends GeneralizingAstVisitor
|
|||
return new JS.Program(items, name: _buildUnit.name);
|
||||
}
|
||||
|
||||
JS.ObjectInitializer _librariesDebuggerObject() {
|
||||
var properties = <JS.Property>[];
|
||||
_libraries.forEach((library, value) {
|
||||
// TODO(jacobr): we could specify a short library name instead of the
|
||||
// full library uri if we wanted to save space.
|
||||
properties.add(new JS.Property(
|
||||
js.string(jsLibraryDebuggerName(_libraryRoot, library)), value));
|
||||
});
|
||||
return new JS.ObjectInitializer(properties);
|
||||
}
|
||||
|
||||
List<String> _getJSName(Element e) {
|
||||
if (e.library == null ||
|
||||
findAnnotation(e.library, isPublicJSAnnotation) == null) {
|
||||
|
@ -458,6 +474,7 @@ class CodeGenerator extends GeneralizingAstVisitor
|
|||
imports.add(new JS.NameSpecifier(_runtimeModule));
|
||||
imports.add(new JS.NameSpecifier(_extensionSymbolsModule));
|
||||
}
|
||||
|
||||
items.add(new JS.ImportDeclaration(
|
||||
namedImports: imports, from: js.string(module, "'")));
|
||||
});
|
||||
|
@ -5857,6 +5874,44 @@ String jsLibraryName(String libraryRoot, LibraryElement library) {
|
|||
return pathToJSIdentifier(qualifiedPath);
|
||||
}
|
||||
|
||||
/// Debugger friendly name for a Dart Library.
|
||||
String jsLibraryDebuggerName(String libraryRoot, LibraryElement library) {
|
||||
var uri = library.source.uri;
|
||||
// For package: and dart: uris show the entire
|
||||
if (uri.scheme == 'dart' || uri.scheme == 'package') return uri.toString();
|
||||
|
||||
if (!uri.toFilePath().startsWith(libraryRoot)) {
|
||||
throw 'Invalid library root. $libraryRoot does not contain ${uri
|
||||
.toFilePath()}';
|
||||
}
|
||||
// Relative path to the library.
|
||||
return uri.path.substring(libraryRoot.length);
|
||||
}
|
||||
|
||||
String jsDebuggingLibraryName(String libraryRoot, LibraryElement library) {
|
||||
var uri = library.source.uri;
|
||||
if (uri.scheme == 'dart') {
|
||||
return uri.path;
|
||||
}
|
||||
// TODO(vsm): This is not necessarily unique if '__' appears in a file name.
|
||||
var separator = '__';
|
||||
String qualifiedPath;
|
||||
if (uri.scheme == 'package') {
|
||||
// Strip the package name.
|
||||
// TODO(vsm): This is not unique if an escaped '/'appears in a filename.
|
||||
// E.g., "foo/bar.dart" and "foo$47bar.dart" would collide.
|
||||
qualifiedPath = uri.pathSegments.skip(1).join(separator);
|
||||
} else if (uri.toFilePath().startsWith(libraryRoot)) {
|
||||
qualifiedPath =
|
||||
uri.path.substring(libraryRoot.length).replaceAll('/', separator);
|
||||
} else {
|
||||
// We don't have a unique name.
|
||||
throw 'Invalid library root. $libraryRoot does not contain ${uri
|
||||
.toFilePath()}';
|
||||
}
|
||||
return pathToJSIdentifier(qualifiedPath);
|
||||
}
|
||||
|
||||
/// Shorthand for identifier-like property names.
|
||||
/// For now, we emit them as strings and the printer restores them to
|
||||
/// identifiers if it can.
|
||||
|
|
|
@ -11,6 +11,10 @@ define(['dart_sdk', 'async_helper', 'expect', 'unittest', 'is', 'require'],
|
|||
let mochaOnError = window.onerror;
|
||||
dart_sdk.dart.trapRuntimeErrors(false);
|
||||
dart_sdk._isolate_helper.startRootIsolate(function() {}, []);
|
||||
// Make it easier to debug test failures and required for formatter test that
|
||||
// assumes custom formatters are enabled.
|
||||
dart_sdk._debugger.registerDevtoolsFormatter();
|
||||
|
||||
let html_config = unittest.html_config;
|
||||
// Test attributes are a list of strings, or a string for a single
|
||||
// attribute. Valid attributes are:
|
||||
|
@ -184,7 +188,6 @@ define(['dart_sdk', 'async_helper', 'expect', 'unittest', 'is', 'require'],
|
|||
'generic_is_check_test': fail,
|
||||
'getter_closure_execution_order_test': fail,
|
||||
'gc_test': 'slow',
|
||||
'hash_code_mangling_test': fail,
|
||||
'identical_closure2_test': fail,
|
||||
'infinite_switch_label_test': fail,
|
||||
'infinity_test': fail,
|
||||
|
|
|
@ -89,6 +89,7 @@ define(['dart_sdk'], function(dart_sdk) {
|
|||
statics: () => ({measureFor: dart.definiteFunctionType(core.double, [core.Function, core.int])}),
|
||||
names: ['measureFor']
|
||||
});
|
||||
dart.trackLibraries("BenchmarkBase", {"BenchmarkBase.dart": BenchmarkBase$});
|
||||
// Exports:
|
||||
return {
|
||||
BenchmarkBase: BenchmarkBase$
|
||||
|
|
|
@ -69,6 +69,7 @@ define(['dart_sdk'], function(dart_sdk) {
|
|||
dart.dsend(f(), 'then', async_helper.asyncSuccess);
|
||||
};
|
||||
dart.fn(async_helper.asyncTest, FnTovoid());
|
||||
dart.trackLibraries("async_helper", {"async_helper.dart": async_helper});
|
||||
// Exports:
|
||||
return {
|
||||
async_helper: async_helper
|
||||
|
|
|
@ -117,3 +117,4 @@ closure.some_top_level_constant = "abc";
|
|||
closure.some_top_level_final = "abc";
|
||||
/** @type {string} */
|
||||
closure.some_top_level_var = "abc";
|
||||
dart.trackLibraries("closure", {"closure.dart": closure});
|
||||
|
|
|
@ -80,6 +80,7 @@ define(['dart_sdk'], function(dart_sdk) {
|
|||
dart.throw(new core.StateError('The spread function cannot be called, ' + 'it should be compiled away.'));
|
||||
};
|
||||
dart.fn(src__varargs.spread, dynamicTodynamic());
|
||||
dart.trackLibraries("destructuring", {"destructuring.dart": destructuring, "package:js/src/varargs.dart": src__varargs});
|
||||
// Exports:
|
||||
return {
|
||||
destructuring: destructuring,
|
||||
|
|
|
@ -45,3 +45,4 @@ dart.defineLazy(es6_modules, {
|
|||
},
|
||||
set lazyMutable(_) {}
|
||||
});
|
||||
dart.trackLibraries("es6_modules", {"es6_modules.dart": es6_modules});
|
||||
|
|
|
@ -15,6 +15,7 @@ define(['dart_sdk'], function(dart_sdk) {
|
|||
core.print(dart.map(['1', 2, null, 4, '5', 6], core.String, core.int));
|
||||
};
|
||||
dart.fn(map_keys.main, VoidTodynamic());
|
||||
dart.trackLibraries("map_keys", {"map_keys.dart": map_keys});
|
||||
// Exports:
|
||||
return {
|
||||
map_keys: map_keys
|
||||
|
|
|
@ -49,5 +49,6 @@ dart.defineLazy(node_modules, {
|
|||
},
|
||||
set lazyMutable(_) {}
|
||||
});
|
||||
dart.trackLibraries("node_modules", {"node_modules.dart": node_modules});
|
||||
// Exports:
|
||||
exports.node_modules = node_modules;
|
||||
|
|
|
@ -12,6 +12,7 @@ define(['dart_sdk'], function(dart_sdk) {
|
|||
core.print(dart.str`hello ${name}`);
|
||||
};
|
||||
dart.fn(script.main, ListOfStringTovoid());
|
||||
dart.trackLibraries("script", {"script.dart": script});
|
||||
// Exports:
|
||||
return {
|
||||
script: script
|
||||
|
|
|
@ -123,6 +123,7 @@ define(['dart_sdk'], function(dart_sdk) {
|
|||
return html.CanvasRenderingContext2D.as(painter.canvas[dartx.getContext]('2d'));
|
||||
}
|
||||
});
|
||||
dart.trackLibraries("sunflower", {"sunflower.dart": sunflower, "circle.dart": circle, "painter.dart": painter});
|
||||
// Exports:
|
||||
return {
|
||||
sunflower: sunflower,
|
||||
|
|
|
@ -26,6 +26,7 @@ define(['dart_sdk'], function(dart_sdk) {
|
|||
dart.throw(new core.StateError('The spread function cannot be called, ' + 'it should be compiled away.'));
|
||||
};
|
||||
dart.fn(src__varargs.spread, dynamicTodynamic());
|
||||
dart.trackLibraries("varargs", {"varargs.dart": varargs, "package:js/src/varargs.dart": src__varargs});
|
||||
// Exports:
|
||||
return {
|
||||
varargs: varargs,
|
||||
|
|
|
@ -882,6 +882,12 @@ String _toString(obj) {
|
|||
return JS('String', '#[dartx.toString]()', obj);
|
||||
}
|
||||
if (JS('bool', 'typeof # == "function"', obj)) {
|
||||
// If the function is a Type object, we should just display the type name.
|
||||
// Regular Dart code should typically get wrapped type objects instead of
|
||||
// raw type (aka JS constructor) objects however raw type objects can be
|
||||
// exposed to Dart code via JS interop or debugging tools.
|
||||
if (isType(obj)) return typeName(obj);
|
||||
|
||||
return JS(
|
||||
'String', r'"Closure: " + # + " from: " + #', getReifiedType(obj), obj);
|
||||
}
|
||||
|
|
|
@ -74,6 +74,8 @@ lazyFn(closure, computeType) {
|
|||
final _runtimeType = JS('', 'Symbol("_runtimeType")');
|
||||
final isNamedConstructor = JS('', 'Symbol("isNamedConstructor")');
|
||||
|
||||
final _moduleName = JS('', 'Symbol("_moduleName")');
|
||||
|
||||
_checkPrimitiveType(obj) {
|
||||
// TODO(jmesserly): JS is used to prevent type literal wrapping. Is there a
|
||||
// better way we can handle this? (sra: It is super dodgy that the values
|
||||
|
@ -187,9 +189,9 @@ unwrapType(WrappedType obj) => obj._wrappedType;
|
|||
|
||||
_getRuntimeType(value) => JS('', '#[#]', value, _runtimeType);
|
||||
getIsNamedConstructor(value) => JS('', '#[#]', value, isNamedConstructor);
|
||||
// TODO(bmilligan): Define the symbol in rtti.dart instead of dart_library.js
|
||||
// and get rid of the call to dart_library in the JS here.
|
||||
getDartLibraryName(value) => JS('', '#[dart_library.dartLibraryName]', value);
|
||||
|
||||
/// Return the module name for a raw library object.
|
||||
getModuleName(value) => JS('', '#[#]', value, _moduleName);
|
||||
|
||||
/// Tag the runtime type of [value] to be type [t].
|
||||
void tag(value, t) {
|
||||
|
@ -204,3 +206,22 @@ void tagLazy(value, compute) {
|
|||
JS('', '#(#, #, { get: # })', defineLazyProperty, value, _runtimeType,
|
||||
compute);
|
||||
}
|
||||
|
||||
var _loadedModules = JS('', 'new Map()');
|
||||
|
||||
List getModuleNames() {
|
||||
return JS('', 'Array.from(#.keys())', _loadedModules);
|
||||
}
|
||||
|
||||
/// Return all library objects in the specified module.
|
||||
getModuleLibraries(String name) {
|
||||
var module = JS('', '#.get(#)', _loadedModules, name);
|
||||
if (module == null) return null;
|
||||
JS('', '#[#] = #', module, _moduleName, name);
|
||||
return module;
|
||||
}
|
||||
|
||||
/// Track all libraries
|
||||
void trackLibraries(String moduleName, libraries) {
|
||||
JS('', '#.set(#, #)', _loadedModules, moduleName, libraries);
|
||||
}
|
|
@ -513,6 +513,12 @@ functionType(returnType, args, extra) =>
|
|||
definiteFunctionType(returnType, args, extra) =>
|
||||
_functionType(true, returnType, args, extra);
|
||||
|
||||
bool isType(obj) => JS(
|
||||
'',
|
||||
'''(() => {
|
||||
return $_getRuntimeType($obj) === $Type;
|
||||
})()''');
|
||||
|
||||
String typeName(type) => JS(
|
||||
'',
|
||||
'''(() => {
|
||||
|
@ -698,8 +704,8 @@ _isTop(type) {
|
|||
if (JS('bool', '# === #', getGenericClass(type), getGenericClass(FutureOr))) {
|
||||
return _isTop(JS('', '#[0]', getGenericArgs(type)));
|
||||
}
|
||||
return JS('bool', '# == # || # == # || # == #',
|
||||
type, Object, type, dynamic, type, _void);
|
||||
return JS('bool', '# == # || # == # || # == #', type, Object, type, dynamic,
|
||||
type, _void);
|
||||
}
|
||||
|
||||
_isSubtype(t1, t2, isCovariant) => JS(
|
||||
|
|
|
@ -53,11 +53,68 @@ class JSNative {
|
|||
|
||||
void addMetadataChildren(object, Set<NameValuePair> ret) {
|
||||
ret.add(new NameValuePair(
|
||||
name: getTypeName(_getType(object)),
|
||||
value: object,
|
||||
name: "[[class]]",
|
||||
value: dart.getReifiedType(object),
|
||||
config: JsonMLConfig.asClass));
|
||||
}
|
||||
|
||||
/// Add properties from a signature definition [sig] for [object].
|
||||
/// Walk the prototype chain if [walkProtypeChain] is set.
|
||||
/// Tag types on function typed properties of [object] if [tagTypes] is set.
|
||||
///
|
||||
void addPropertiesFromSignature(
|
||||
sig, Set<NameValuePair> properties, object, bool walkPrototypeChain,
|
||||
{tagTypes: false}) {
|
||||
// Including these property names doesn't add any value and just clutters
|
||||
// the debugger output.
|
||||
// TODO(jacobr): consider adding runtimeType to this list.
|
||||
var skippedNames = new Set()..add('hashCode');
|
||||
|
||||
while (sig != null) {
|
||||
for (var symbol in getOwnPropertySymbols(sig)) {
|
||||
var dartName = symbolName(symbol);
|
||||
String dartXPrefix = 'dartx.';
|
||||
if (dartName.startsWith(dartXPrefix)) {
|
||||
dartName = dartName.substring(dartXPrefix.length);
|
||||
}
|
||||
if (skippedNames.contains(dartName)) continue;
|
||||
var value = safeGetProperty(object, symbol);
|
||||
// Tag the function with its runtime type.
|
||||
if (tagTypes && _typeof(value) == 'function') {
|
||||
dart.tag(value, JS('', '#[#]', sig, symbol));
|
||||
}
|
||||
properties.add(new NameValuePair(name: dartName, value: value));
|
||||
}
|
||||
|
||||
for (var name in getOwnPropertyNames(sig)) {
|
||||
var value = safeGetProperty(object, name);
|
||||
if (skippedNames.contains(name)) continue;
|
||||
// Tag the function with its runtime type.
|
||||
if (tagTypes && _typeof(value) == 'function') {
|
||||
dart.tag(value, JS('', '#[#]', sig, name));
|
||||
}
|
||||
properties.add(new NameValuePair(name: name, value: value));
|
||||
}
|
||||
|
||||
if (!walkPrototypeChain) break;
|
||||
|
||||
sig = safeGetProperty(sig, '__proto__');
|
||||
}
|
||||
}
|
||||
|
||||
/// Sort properties sorting public names before private names.
|
||||
List<NameValuePair> sortProperties(Iterable<NameValuePair> properties) {
|
||||
var sortedProperties = properties.toList();
|
||||
|
||||
sortedProperties.sort((a, b) {
|
||||
var aPrivate = a.name.startsWith('_');
|
||||
var bPrivate = b.name.startsWith('_');
|
||||
if (aPrivate != bPrivate) return aPrivate ? 1 : -1;
|
||||
return a.name.compareTo(b.name);
|
||||
});
|
||||
return sortedProperties;
|
||||
}
|
||||
|
||||
String getObjectTypeName(object) {
|
||||
var reifiedType = dart.getReifiedType(object);
|
||||
if (reifiedType == null) {
|
||||
|
@ -69,7 +126,7 @@ String getObjectTypeName(object) {
|
|||
return getTypeName(reifiedType);
|
||||
}
|
||||
|
||||
String getTypeName(Type type) {
|
||||
String getTypeName(type) {
|
||||
var name = dart.typeName(type);
|
||||
// Hack to cleanup names for List<dynamic>
|
||||
// TODO(jacobr): it would be nice if there was a way we could distinguish
|
||||
|
@ -80,9 +137,6 @@ String getTypeName(Type type) {
|
|||
return name;
|
||||
}
|
||||
|
||||
Object _getType(object) =>
|
||||
object is Type ? object : dart.getReifiedType(object);
|
||||
|
||||
String safePreview(object, config) {
|
||||
try {
|
||||
var preview = _devtoolsFormatter._simpleFormatter.preview(object, config);
|
||||
|
@ -117,7 +171,12 @@ class NameValuePair {
|
|||
|
||||
// Define equality and hashCode so that NameValuePair can be used
|
||||
// in a Set to dedupe entries with duplicate names.
|
||||
operator ==(other) => other is NameValuePair && other.name == name;
|
||||
bool operator ==(other) {
|
||||
if (other is! NameValuePair) return false;
|
||||
if (this.hideName || other.hideName) return identical(this, other);
|
||||
return other.name == name;
|
||||
}
|
||||
|
||||
int get hashCode => name.hashCode;
|
||||
|
||||
final String name;
|
||||
|
@ -269,7 +328,7 @@ bool isNativeJavaScriptObject(object) {
|
|||
// Treat Node objects as a native JavaScript type as the regular DOM render
|
||||
// in devtools is superior to the dart specific view.
|
||||
return (type != 'object' && type != 'function') ||
|
||||
object is dart.JSObject ||
|
||||
dart.isJsInterop(object) ||
|
||||
object is html.Node;
|
||||
}
|
||||
|
||||
|
@ -328,27 +387,41 @@ class JsonMLFormatter {
|
|||
body.addStyle('color: rgb(196, 26, 22);');
|
||||
}
|
||||
var children = _simpleFormatter.children(object, config);
|
||||
if (children == null) return body.toJsonML();
|
||||
for (NameValuePair child in children) {
|
||||
var li = body.createChild('li');
|
||||
var nameSpan = new JsonMLElement('span')
|
||||
..createTextChild(
|
||||
child.displayName.isNotEmpty ? '${child.displayName}: ' : '')
|
||||
..setStyle('color: rgb(136, 19, 145);');
|
||||
li.setStyle("padding-left: 13px;");
|
||||
|
||||
// The value is indented when it is on a different line from the name
|
||||
// by setting right padding of the name to -13px and the padding of the
|
||||
// value to 13px.
|
||||
JsonMLElement nameSpan;
|
||||
var valueStyle = '';
|
||||
if (!child.hideName) {
|
||||
nameSpan = new JsonMLElement('span')
|
||||
..createTextChild(
|
||||
child.displayName.isNotEmpty ? '${child.displayName}: ' : '')
|
||||
..setStyle('color: rgb(136, 19, 145); margin-right: -13px');
|
||||
valueStyle = 'margin-left: 13px';
|
||||
}
|
||||
|
||||
if (_typeof(child.value) == 'object' ||
|
||||
_typeof(child.value) == 'function') {
|
||||
nameSpan.addStyle("padding-left: 13px;");
|
||||
|
||||
li.appendChild(nameSpan);
|
||||
var objectTag = li.createObjectTag(child.value);
|
||||
objectTag.addAttribute('config', child.config);
|
||||
if (!_simpleFormatter.hasChildren(child.value, child.config)) {
|
||||
li.setStyle("padding-left: 13px;");
|
||||
var valueSpan = new JsonMLElement('span')..setStyle(valueStyle);
|
||||
valueSpan.createObjectTag(child.value)
|
||||
..addAttribute('config', child.config);
|
||||
if (nameSpan != null) {
|
||||
li.appendChild(nameSpan);
|
||||
}
|
||||
li.appendChild(valueSpan);
|
||||
} else {
|
||||
li.setStyle("padding-left: 13px;");
|
||||
li.createChild('span')
|
||||
..appendChild(nameSpan)
|
||||
..createTextChild(safePreview(child.value, child.config));
|
||||
var line = li.createChild('span');
|
||||
if (nameSpan != null) {
|
||||
line.appendChild(nameSpan);
|
||||
}
|
||||
line.appendChild(new JsonMLElement('span')
|
||||
..createTextChild(safePreview(child.value, child.config))
|
||||
..setStyle(valueStyle));
|
||||
}
|
||||
}
|
||||
return body.toJsonML();
|
||||
|
@ -370,6 +443,7 @@ class DartFormatter {
|
|||
// precedence.
|
||||
_formatters = [
|
||||
new ClassFormatter(),
|
||||
new TypeFormatter(),
|
||||
new NamedConstructorFormatter(),
|
||||
new MapFormatter(),
|
||||
new IterableFormatter(),
|
||||
|
@ -437,10 +511,6 @@ class DartFormatter {
|
|||
|
||||
/// Default formatter for Dart Objects.
|
||||
class ObjectFormatter extends Formatter {
|
||||
static Set<String> _customNames = new Set()
|
||||
..add('constructor')
|
||||
..add('prototype')
|
||||
..add('__proto__');
|
||||
bool accept(object, config) => !isNativeJavaScriptObject(object);
|
||||
|
||||
String preview(object) => getObjectTypeName(object);
|
||||
|
@ -448,76 +518,34 @@ class ObjectFormatter extends Formatter {
|
|||
bool hasChildren(object) => true;
|
||||
|
||||
List<NameValuePair> children(object) {
|
||||
var properties = new LinkedHashSet<NameValuePair>();
|
||||
// Set of property names used to avoid duplicates.
|
||||
addMetadataChildren(object, properties);
|
||||
|
||||
var current = object;
|
||||
|
||||
var protoChain = <Object>[];
|
||||
while (current != null &&
|
||||
!isNativeJavaScriptObject(current) &&
|
||||
JS("bool", "# !== Object.prototype", current)) {
|
||||
protoChain.add(current);
|
||||
current = safeGetProperty(current, '__proto__');
|
||||
}
|
||||
|
||||
// We walk the prototype chain for symbol properties because they take
|
||||
// priority and are accessed instead of Dart properties according to Dart
|
||||
// calling conventions.
|
||||
// TODO(jacobr): where possible use the data stored by dart.setSignature
|
||||
// instead of walking the JavaScript object directly.
|
||||
for (current in protoChain) {
|
||||
for (var symbol in getOwnPropertySymbols(current)) {
|
||||
var dartName = symbolName(symbol);
|
||||
if (hasMethod(object, dartName)) {
|
||||
continue;
|
||||
}
|
||||
// TODO(jacobr): find a cleaner solution than checking for dartx
|
||||
String dartXPrefix = 'dartx.';
|
||||
if (dartName.startsWith(dartXPrefix)) {
|
||||
dartName = dartName.substring(dartXPrefix.length);
|
||||
} else if (!dartName.startsWith('_')) {
|
||||
// Dart method extension names should either be from dartx or should
|
||||
// start with an _
|
||||
continue;
|
||||
}
|
||||
var value = safeGetProperty(object, symbol);
|
||||
properties.add(new NameValuePair(name: dartName, value: value));
|
||||
}
|
||||
}
|
||||
|
||||
for (current in protoChain) {
|
||||
// TODO(jacobr): optionally distinguish properties and fields so that
|
||||
// it is safe to expand untrusted objects without side effects.
|
||||
var className = dart.getReifiedType(current).name;
|
||||
for (var name in getOwnPropertyNames(current)) {
|
||||
if (_customNames.contains(name) || name == className) continue;
|
||||
if (hasMethod(object, name)) {
|
||||
continue;
|
||||
}
|
||||
var value = safeGetProperty(object, name);
|
||||
properties.add(new NameValuePair(name: name, value: value));
|
||||
}
|
||||
}
|
||||
|
||||
return properties.toList();
|
||||
var type = dart.getType(object);
|
||||
var ret = new LinkedHashSet<NameValuePair>();
|
||||
// We use a Set rather than a List to avoid duplicates.
|
||||
var properties = new Set<NameValuePair>();
|
||||
addPropertiesFromSignature(
|
||||
dart.getFieldSig(type), properties, object, true);
|
||||
addPropertiesFromSignature(
|
||||
dart.getGetterSig(type), properties, object, true);
|
||||
ret.addAll(sortProperties(properties));
|
||||
addMetadataChildren(object, ret);
|
||||
return ret.toList();
|
||||
}
|
||||
}
|
||||
|
||||
/// Formatter for module Dart Library objects.
|
||||
class LibraryModuleFormatter implements Formatter {
|
||||
accept(object, config) => dart.getDartLibraryName(object) != null;
|
||||
accept(object, config) => dart.getModuleName(object) != null;
|
||||
|
||||
bool hasChildren(object) => true;
|
||||
|
||||
String preview(object) {
|
||||
var libraryNames = dart.getDartLibraryName(object).split('/');
|
||||
var libraryNames = dart.getModuleName(object).split('/');
|
||||
// Library names are received with a repeat directory name, so strip the
|
||||
// last directory entry here to make the path cleaner. For example, the
|
||||
// library "third_party/dart/utf/utf" shoud display as
|
||||
// "third_party/dart/utf/".
|
||||
if (libraryNames.length > 1) {
|
||||
if (libraryNames.length > 1 &&
|
||||
libraryNames.last == libraryNames[libraryNames.length - 2]) {
|
||||
libraryNames[libraryNames.length - 1] = '';
|
||||
}
|
||||
return 'Library Module: ${libraryNames.join('/')}';
|
||||
|
@ -527,9 +555,6 @@ class LibraryModuleFormatter implements Formatter {
|
|||
var children = new LinkedHashSet<NameValuePair>();
|
||||
for (var name in getOwnPropertyNames(object)) {
|
||||
var value = safeGetProperty(object, name);
|
||||
// Replace __ with / to make file paths more readable. Then
|
||||
// 'src__result__error' becomes 'src/result/error'.
|
||||
name = '${name.replaceAll("__", "/")}.dart';
|
||||
children.add(new NameValuePair(
|
||||
name: name, value: new Library(name, value), hideName: true));
|
||||
}
|
||||
|
@ -547,51 +572,26 @@ class LibraryFormatter implements Formatter {
|
|||
String preview(object) => object.name;
|
||||
|
||||
List<NameValuePair> children(object) {
|
||||
// Maintain library member order rather than sorting members as is the
|
||||
// case for class members.
|
||||
var children = new LinkedHashSet<NameValuePair>();
|
||||
var nonGenericProperties = new LinkedHashMap<String, Object>();
|
||||
var objectProperties = safeProperties(object.object);
|
||||
objectProperties.forEach((name, value) {
|
||||
var genericTypeConstructor = dart.getGenericTypeCtor(value);
|
||||
if (genericTypeConstructor != null) {
|
||||
recordGenericParameters(name, genericTypeConstructor);
|
||||
} else {
|
||||
nonGenericProperties[name] = value;
|
||||
}
|
||||
});
|
||||
nonGenericProperties.forEach((name, value) {
|
||||
if (value is Type) {
|
||||
children.add(classChild(name, value));
|
||||
} else {
|
||||
children.add(new NameValuePair(name: name, value: value));
|
||||
}
|
||||
// Skip the generic constructors for each class as users are only
|
||||
// interested in seeing the actual classes.
|
||||
if (dart.getGenericTypeCtor(value) != null) return;
|
||||
|
||||
children.add(dart.isType(value)
|
||||
? classChild(name, value)
|
||||
: new NameValuePair(name: name, value: value));
|
||||
});
|
||||
return children.toList();
|
||||
}
|
||||
|
||||
recordGenericParameters(String name, Object genericTypeConstructor) {
|
||||
// Using JS toString() eliminates the leading metadata that is generated
|
||||
// with the toString function provided in operations.dart.
|
||||
// Splitting by => and taking the first element gives the list of
|
||||
// arguments in the constructor.
|
||||
genericParameters[name] =
|
||||
JS('String', '#.toString()', genericTypeConstructor)
|
||||
.split(' =>')
|
||||
.first
|
||||
.replaceAll(new RegExp(r'[(|)]'), '');
|
||||
}
|
||||
|
||||
classChild(String name, Object child) {
|
||||
var typeName = getTypeName(child);
|
||||
// Generic class names are generated with a $ at the end, so the
|
||||
// corresponding non-generic class can be identified by adding $.
|
||||
var parameterName = '$name\$';
|
||||
if (genericParameters.keys.contains(parameterName)) {
|
||||
typeName = '$typeName<${genericParameters[parameterName]}>';
|
||||
// TODO(bmilligan): Add a symbol to classes with generic types at their
|
||||
// creation so they can be recognized independently by the debugger.
|
||||
JSNative.setProperty(child, 'genericTypeName', typeName);
|
||||
}
|
||||
return new NameValuePair(name: typeName, value: child);
|
||||
return new NameValuePair(
|
||||
name: typeName, value: child, config: JsonMLConfig.asClass);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -770,14 +770,11 @@ class StackTraceFormatter implements Formatter {
|
|||
}
|
||||
|
||||
class ClassFormatter implements Formatter {
|
||||
accept(object, config) => object is Type || config == JsonMLConfig.asClass;
|
||||
accept(object, config) => config == JsonMLConfig.asClass;
|
||||
|
||||
String preview(object) {
|
||||
var typeName = safeGetProperty(object, 'genericTypeName');
|
||||
if (typeName != null) return typeName;
|
||||
var type = _getType(object);
|
||||
String preview(type) {
|
||||
var implements = dart.getImplements(type);
|
||||
typeName = getTypeName(type);
|
||||
var typeName = getTypeName(type);
|
||||
if (implements != null) {
|
||||
var typeNames = implements().map(getTypeName);
|
||||
return '${typeName} implements ${typeNames.join(", ")}';
|
||||
|
@ -788,60 +785,86 @@ class ClassFormatter implements Formatter {
|
|||
|
||||
bool hasChildren(object) => true;
|
||||
|
||||
List<NameValuePair> children(object) {
|
||||
List<NameValuePair> children(type) {
|
||||
// TODO(jacobr): add other entries describing the class such as
|
||||
// links to the superclass, mixins, implemented interfaces, and methods.
|
||||
var type = _getType(object);
|
||||
var children = <NameValuePair>[];
|
||||
var typeName = getTypeName(_getType(object));
|
||||
// implemented interfaces, and methods.
|
||||
var ret = new LinkedHashSet<NameValuePair>();
|
||||
|
||||
var staticProperties = new Set<NameValuePair>();
|
||||
var staticMethods = new Set<NameValuePair>();
|
||||
// Static fields and properties.
|
||||
addPropertiesFromSignature(
|
||||
dart.getStaticFieldSig(type), staticProperties, type, false);
|
||||
addPropertiesFromSignature(
|
||||
dart.getStaticGetterSig(type), staticProperties, type, false);
|
||||
// static methods.
|
||||
addPropertiesFromSignature(
|
||||
dart.getStaticSig(type), staticMethods, type, false);
|
||||
|
||||
if (staticProperties.isNotEmpty || staticMethods.isNotEmpty) {
|
||||
ret
|
||||
..add(new NameValuePair(value: '[[Static members]]', hideName: true))
|
||||
..addAll(sortProperties(staticProperties))
|
||||
..addAll(sortProperties(staticMethods));
|
||||
}
|
||||
|
||||
// instance methods.
|
||||
var instanceMethods = new Set<NameValuePair>();
|
||||
// Instance methods are defined on the prototype not the constructor object.
|
||||
addPropertiesFromSignature(dart.getMethodSig(type), instanceMethods,
|
||||
JS('', '#.prototype', type), false,
|
||||
tagTypes: true);
|
||||
if (instanceMethods.isNotEmpty) {
|
||||
ret
|
||||
..add(new NameValuePair(value: '[[Instance Methods]]', hideName: true))
|
||||
..addAll(sortProperties(instanceMethods));
|
||||
}
|
||||
|
||||
var typeName = getTypeName(type);
|
||||
var mixins = dart.getMixins(type);
|
||||
if (mixins != null && mixins.isNotEmpty) {
|
||||
children.add(new NameValuePair(
|
||||
ret.add(new NameValuePair(
|
||||
name: '[[Mixins]]', value: new HeritageClause('mixins', mixins)));
|
||||
}
|
||||
|
||||
var hiddenProperties = ['length', 'name', 'prototype', 'genericTypeName'];
|
||||
// Addition of NameValuePairs for static variables and named constructors.
|
||||
for (var name in getOwnPropertyNames(object)) {
|
||||
// TODO(bmilligan): Perform more principled checks to filter out spurious
|
||||
// members.
|
||||
if (hiddenProperties.contains(name)) continue;
|
||||
var value = safeGetProperty(object, name);
|
||||
if (value != null && dart.getIsNamedConstructor(value) != null) {
|
||||
value = new NamedConstructor(value);
|
||||
name = '${typeName}.$name';
|
||||
}
|
||||
children.add(new NameValuePair(name: name, value: value));
|
||||
var baseProto = JS('', '#.__proto__', type);
|
||||
if (baseProto != null && !dart.isJsInterop(baseProto)) {
|
||||
ret.add(new NameValuePair(
|
||||
name: "[[base class]]",
|
||||
value: baseProto,
|
||||
config: JsonMLConfig.asClass));
|
||||
}
|
||||
|
||||
// TODO(bmilligan): Replace the hard coding of $identityHash.
|
||||
var hiddenPrototypeProperties = ['constructor', 'new', r'$identityHash'];
|
||||
// Addition of class methods.
|
||||
var prototype = JS('var', '#["prototype"]', object);
|
||||
if (prototype != null) {
|
||||
for (var name in getOwnPropertyNames(prototype)) {
|
||||
if (hiddenPrototypeProperties.contains(name)) continue;
|
||||
// Simulate dart.bind by using dart.tag and tear off the function
|
||||
// so it will be recognized by the FunctionFormatter.
|
||||
var function = safeGetProperty(prototype, name);
|
||||
var constructor = safeGetProperty(prototype, 'constructor');
|
||||
var sigObj = dart.getMethodSig(constructor);
|
||||
if (sigObj != null) {
|
||||
var value = safeGetProperty(sigObj, name);
|
||||
if (getTypeName(dart.getReifiedType(value)) != 'Null') {
|
||||
dart.tag(function, value);
|
||||
children.add(new NameValuePair(name: name, value: function));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return children;
|
||||
// TODO(jacobr): add back fields for named constructors.
|
||||
return ret.toList();
|
||||
}
|
||||
}
|
||||
|
||||
class TypeFormatter implements Formatter {
|
||||
accept(object, config) => object is Type;
|
||||
|
||||
String preview(object) => object.toString();
|
||||
|
||||
bool hasChildren(object) => false;
|
||||
|
||||
List<NameValuePair> children(object) => [];
|
||||
}
|
||||
|
||||
/// This entry point is automatically invoked by the code generated by
|
||||
/// Dart Dev Compiler
|
||||
registerDevtoolsFormatter() {
|
||||
var formatters = [_devtoolsFormatter];
|
||||
JS('', 'dart.global.devtoolsFormatters = #', formatters);
|
||||
}
|
||||
|
||||
// Expose these methods here to facilitate writing debugger tests.
|
||||
// If export worked for private SDK libraries we could just export
|
||||
// these methods from dart:_runtime.
|
||||
|
||||
getModuleNames() {
|
||||
return dart.getModuleNames();
|
||||
}
|
||||
|
||||
getModuleLibraries(String name) {
|
||||
return dart.getModuleLibraries(name);
|
||||
}
|
||||
|
|
|
@ -25,6 +25,8 @@ part 'regexp_helper.dart';
|
|||
part 'string_helper.dart';
|
||||
part 'js_rti.dart';
|
||||
|
||||
final _identityHashCode = JS('', 'Symbol("_identityHashCode")');
|
||||
|
||||
class _Patch {
|
||||
const _Patch();
|
||||
}
|
||||
|
@ -57,10 +59,10 @@ class Primitives {
|
|||
}
|
||||
|
||||
static int objectHashCode(object) {
|
||||
int hash = JS('int|Null', r'#.$identityHash', object);
|
||||
int hash = JS('int|Null', r'#[#]', object, _identityHashCode);
|
||||
if (hash == null) {
|
||||
hash = JS('int', '(Math.random() * 0x3fffffff) | 0');
|
||||
JS('void', r'#.$identityHash = #', object, hash);
|
||||
JS('void', r'#[#] = #', object, _identityHashCode, hash);
|
||||
}
|
||||
return JS('int', '#', hash);
|
||||
}
|
||||
|
|
8816
tests/lib_strong/html/debugger_test.dart
Normal file
8816
tests/lib_strong/html/debugger_test.dart
Normal file
File diff suppressed because it is too large
Load diff
Loading…
Reference in a new issue