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:
Jacob Richman 2017-02-28 17:47:53 -08:00
parent fe294f3753
commit a6a206062d
24 changed files with 9890 additions and 786 deletions

View file

@ -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,

View file

@ -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;

View file

@ -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});

View file

@ -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();

View file

@ -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.

View file

@ -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.

View file

@ -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,

View file

@ -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$

View file

@ -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

View file

@ -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});

View file

@ -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,

View file

@ -45,3 +45,4 @@ dart.defineLazy(es6_modules, {
},
set lazyMutable(_) {}
});
dart.trackLibraries("es6_modules", {"es6_modules.dart": es6_modules});

View file

@ -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

View file

@ -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;

View file

@ -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

View file

@ -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,

View file

@ -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,

View file

@ -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);
}

View file

@ -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);
}

View file

@ -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(

View file

@ -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);
}

View file

@ -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);
}

File diff suppressed because it is too large Load diff