Version 0.8.10.4
svn merge -c 29753 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
svn merge -c 29770 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
svn merge -c 29789 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
svn merge -c 29798 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
svn merge -c 29812 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
svn merge -c 29814 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
svn merge -c 29816 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
svn merge -c 29817 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
svn merge -c 29818 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
svn merge -c 29819 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
svn merge -c 29820 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
svn merge -c 29821 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
svn merge -c 29822 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
svn merge -c 29823 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
svn merge -c 29824 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
svn merge -c 29825 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
svn merge -c 29826 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
svn merge -c 29827 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
svn merge -c 29828 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
svn merge -c 29830 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
svn merge -c 29831 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
svn merge -c 29833 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
svn merge -c 29835 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
svn merge -c 29836 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
svn merge -c 29837 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
svn merge -c 29838 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
svn merge -c 29839 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
svn merge -c 29840 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
svn merge -c 29841 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
svn merge -c 29844 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
svn merge -c 29846 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
svn merge -c 29847 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
svn merge -c 29849 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
svn merge -c 29850 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
svn merge -c 29852 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
svn merge -c 29855 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
svn merge -c 29856 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
svn merge -c 29858 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
svn merge -c 29859 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
svn merge -c 29860 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
svn merge -c 29862 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
svn merge -c 29864 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
svn merge -c 29865 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
svn merge -c 29868 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
svn merge -c 29870 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
svn merge -c 29873 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
svn merge -c 29877 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
R=kasperl@google.com
Review URL: https://codereview.chromium.org//59073003
git-svn-id: http://dart.googlecode.com/svn/trunk@29892 260f80e4-7a28-3924-810f-c04153c831b5
diff --git a/pkg/custom_element/lib/custom_element.dart b/pkg/custom_element/lib/custom_element.dart
index 7bdb00c..ab285ae 100644
--- a/pkg/custom_element/lib/custom_element.dart
+++ b/pkg/custom_element/lib/custom_element.dart
@@ -35,7 +35,6 @@
/** The web component element wrapped by this class. */
Element _host;
List _shadowRoots;
- _AttributeMap _attributes;
/**
* Shadow roots generated by dwc for each custom element, indexed by the
@@ -107,7 +106,8 @@
void leftView() {}
/** Invoked when any attribute of the component is modified. */
- void attributeChanged(String name, String oldValue) {}
+ void attributeChanged(String name, String oldValue, String newValue) =>
+ host.attributeChanged(name, oldValue, newValue);
// TODO(efortuna): Update these when we decide what to do with these
// properties.
@@ -155,7 +155,7 @@
String get nodeName => host.nodeName;
- Document get document => host.document;
+ Document get ownerDocument => host.ownerDocument;
Node get previousNode => host.previousNode;
@@ -173,12 +173,9 @@
Node insertAllBefore(Iterable<Node> newChild, Node refChild) =>
host.insertAllBefore(newChild, refChild);
- Map<String, String> get attributes {
- if (_attributes == null) _attributes = new _AttributeMap(this);
- return _attributes;
- }
+ Map<String, String> get attributes => host.attributes;
set attributes(Map<String, String> value) {
- (attributes as _AttributeMap)._replaceAll(value);
+ host.attributes = value;
}
List<Element> get elements => host.children;
@@ -237,12 +234,6 @@
String get id => host.id;
set id(String v) { host.id = v; }
- String get innerHTML => host.innerHtml;
-
- void set innerHTML(String v) {
- host.innerHtml = v;
- }
-
String get innerHtml => host.innerHtml;
void set innerHtml(String v) {
host.innerHtml = v;
@@ -253,10 +244,6 @@
host.setInnerHtml(html, validator: validator, treeSanitizer: treeSanitizer);
}
- void set unsafeInnerHtml(String html) {
- host.unsafeInnerHtml = html;
- }
-
DocumentFragment createFragment(String html,
{NodeValidator validator, NodeTreeSanitizer treeSanitizer}) =>
host.createFragment(html,
@@ -359,9 +346,16 @@
void requestPointerLock() { host.requestPointerLock(); }
- Element query(String selectors) => host.query(selectors);
+ Element querySelector(String selectors) => host.querySelector(selectors);
- ElementList queryAll(String selectors) => host.queryAll(selectors);
+ ElementList querySelectorAll(String selectors) =>
+ host.querySelectorAll(selectors);
+
+ @deprecated
+ Element query(String selectors) => host.querySelector(selectors);
+
+ @deprecated
+ ElementList queryAll(String selectors) => host.querySelectorAll(selectors);
String get className => host.className;
set className(String value) { host.className = value; }
@@ -423,16 +417,16 @@
int get nodeType => host.nodeType;
- void $dom_addEventListener(String type, EventListener listener,
- [bool useCapture]) {
- host.$dom_addEventListener(type, listener, useCapture);
+ void addEventListener(String type, EventListener listener,
+ [bool useCapture]) {
+ host.addEventListener(type, listener, useCapture);
}
bool dispatchEvent(Event event) => host.dispatchEvent(event);
- void $dom_removeEventListener(String type, EventListener listener,
- [bool useCapture]) {
- host.$dom_removeEventListener(type, listener, useCapture);
+ void removeEventListener(String type, EventListener listener,
+ [bool useCapture]) {
+ host.removeEventListener(type, listener, useCapture);
}
get xtag => host.xtag;
diff --git a/pkg/pkg.status b/pkg/pkg.status
index c14883e..a86c987 100644
--- a/pkg/pkg.status
+++ b/pkg/pkg.status
@@ -304,14 +304,6 @@
source_maps/test/parser_test: Pass, Timeout # Issue 13719: Please triage this failure.
polymer_expressions/test/bindings_test: Fail, Pass # Issue 14445.
-[ $compiler == dartanalyzer ]
-# pkg issue 13944; Missing inherited member 'Observable._mirror'
-custom_element/test/analyzer_test: fail
-
-[ $compiler == dart2analyzer ]
-# pkg issue 13944; Missing inherited members: 'ListChangeRecord.addedCount' and 'ListChangeRecord.removedCount'
-custom_element/test/analyzer_test: fail
-
[ $compiler == dartanalyzer || $compiler == dart2analyzer ]
docgen/test/single_library_test: StaticWarning
http_server/test/http_body_test: StaticWarning
diff --git a/pkg/polymer/example/component/news/web/index.html b/pkg/polymer/example/component/news/web/index.html
index 8dda8f59..b9e56c9 100644
--- a/pkg/polymer/example/component/news/web/index.html
+++ b/pkg/polymer/example/component/news/web/index.html
@@ -18,7 +18,7 @@
<li><a href="//example.com/stories/4">Awesome story</a></li>
<li class="breaking"><a href="//example.com/stories/5">Horrible story</a></li>
</ul>
- <script type="application/dart">import 'package:polymer/init.dart';</script>
+ <script type="application/dart">export 'package:polymer/init.dart';</script>
<script src='packages/browser/dart.js'></script>
</body>
</html>
diff --git a/pkg/polymer/lib/boot.js b/pkg/polymer/lib/boot.js
index 0cb6714..d4a0f8f 100644
--- a/pkg/polymer/lib/boot.js
+++ b/pkg/polymer/lib/boot.js
@@ -5,7 +5,7 @@
(function() {
console.error('"boot.js" is now deprecated. Instead, you can initialize '
+ 'your polymer application by adding the following tags: \'' +
- + '<script type="application/dart">import "package:polymer/init.dart";'
+ + '<script type="application/dart">export "package:polymer/init.dart";'
+ '</script><script src="packages/browser/dart.js"></script>\'. '
+ 'Make sure these script tags come after all HTML imports.');
})();
diff --git a/pkg/polymer/lib/src/build/linter.dart b/pkg/polymer/lib/src/build/linter.dart
index 317765f..f186d31 100644
--- a/pkg/polymer/lib/src/build/linter.dart
+++ b/pkg/polymer/lib/src/build/linter.dart
@@ -544,7 +544,7 @@
const String USE_INIT_DART =
'To run a polymer applications, you need to call "initPolymer". You can '
'either include a generic script tag that does this for you:'
- '\'<script type="application/dart">import "package:polymer/init.dart";'
+ '\'<script type="application/dart">export "package:polymer/init.dart";'
'</script>\' or add your own script tag and call that function. '
'Make sure the script tag is placed after all HTML imports.';
@@ -556,7 +556,7 @@
'"boot.js" is now deprecated. Instead, you can initialize your polymer '
'application by calling "initPolymer()" in your main. If you don\'t have a '
'main, then you can include our generic main by adding the following '
- 'script tag to your page: \'<script type="application/dart">import '
+ 'script tag to your page: \'<script type="application/dart">export '
'"package:polymer/init.dart";</script>\'. Additionally you need to '
'include: \'<script src="packages/browser/dart.js"></script>\' in the page '
'too. Make sure these script tags come after all HTML imports.';
diff --git a/pkg/polymer/lib/src/build/script_compactor.dart b/pkg/polymer/lib/src/build/script_compactor.dart
index bfb2c56..e869a2c 100644
--- a/pkg/polymer/lib/src/build/script_compactor.dart
+++ b/pkg/polymer/lib/src/build/script_compactor.dart
@@ -81,10 +81,7 @@
mainScriptTag.attributes['src'] =
path.url.basename(bootstrapId.path);
- // TODO(sigmund): stop renaming the file (see dartbug.com/14554)
- var modifiedMainId = mainLibraryId.addExtension('_modified.dart');
-
- libraries.add(modifiedMainId);
+ libraries.add(mainLibraryId);
var urls = libraries.map((id) => assetUrlFor(id, bootstrapId, logger))
.where((url) => url != null).toList();
var buffer = new StringBuffer()..writeln(MAIN_HEADER);
@@ -98,17 +95,12 @@
..writeln(' configureForDeployment([')
..writeAll(urls.map((url) => " '$url',\n"))
..writeln(' ]);')
- ..writeln(' i${i - 1}.polymerMainWrapper();')
+ ..writeln(' i${i - 1}.main();')
..writeln('}');
transform.addOutput(new Asset.fromString(
bootstrapId, buffer.toString()));
transform.addOutput(new Asset.fromString(id, document.outerHtml));
-
- return transform.readInputAsString(mainLibraryId).then((contents) {
- transform.addOutput(new Asset.fromString(modifiedMainId,
- '$contents\n\npolymerMainWrapper() => main();\n'));
- });
});
});
}
diff --git a/pkg/polymer/test/build/all_phases_test.dart b/pkg/polymer/test/build/all_phases_test.dart
index 4b6b759..bb39a85 100644
--- a/pkg/polymer/test/build/all_phases_test.dart
+++ b/pkg/polymer/test/build/all_phases_test.dart
@@ -45,18 +45,16 @@
'a|web/test.html_bootstrap.dart':
'''$MAIN_HEADER
- import 'a.dart_modified.dart' as i0;
+ import 'a.dart' as i0;
void main() {
configureForDeployment([
- 'a.dart_modified.dart',
+ 'a.dart',
]);
- i0.polymerMainWrapper();
+ i0.main();
}
'''.replaceAll('\n ', '\n'),
'a|web/a.dart': _sampleObservableOutput('A', 'foo'),
- 'a|web/a.dart_modified.dart':
- _sampleObservableOutput('A', 'foo', includeMain: true),
});
testPhases('single inline script', phases, {
@@ -75,19 +73,17 @@
'a|web/test.html_bootstrap.dart':
'''$MAIN_HEADER
- import 'test.html.0.dart_modified.dart' as i0;
+ import 'test.html.0.dart' as i0;
void main() {
configureForDeployment([
- 'test.html.0.dart_modified.dart',
+ 'test.html.0.dart',
]);
- i0.polymerMainWrapper();
+ i0.main();
}
'''.replaceAll('\n ', '\n'),
'a|web/test.html.0.dart':
_sampleObservableOutput("B", "bar"),
- 'a|web/test.html.0.dart_modified.dart':
- _sampleObservableOutput("B", "bar", includeMain: true),
});
testPhases('several scripts', phases, {
@@ -119,18 +115,16 @@
'a|web/test.html_bootstrap.dart':
'''$MAIN_HEADER
- import 'a.dart_modified.dart' as i0;
+ import 'a.dart' as i0;
void main() {
configureForDeployment([
- 'a.dart_modified.dart',
+ 'a.dart',
]);
- i0.polymerMainWrapper();
+ i0.main();
}
'''.replaceAll('\n ', '\n'),
'a|web/a.dart': _sampleObservableOutput('A', 'foo'),
- 'a|web/a.dart_modified.dart':
- _sampleObservableOutput('A', 'foo', includeMain: true),
'a|web/test.html.0.dart': _sampleObservableOutput("B", "bar"),
'a|web/test.html.1.dart': _sampleObservableOutput("C", "car"),
});
@@ -160,19 +154,17 @@
'a|web/index.html_bootstrap.dart':
'''$MAIN_HEADER
import 'test2.html.0.dart' as i0;
- import 'b.dart_modified.dart' as i1;
+ import 'b.dart' as i1;
void main() {
configureForDeployment([
'test2.html.0.dart',
- 'b.dart_modified.dart',
+ 'b.dart',
]);
- i1.polymerMainWrapper();
+ i1.main();
}
'''.replaceAll('\n ', '\n'),
'a|web/test2.html.0.dart': _sampleObservableOutput("A", "foo"),
- 'a|web/test2.html.0.dart_modified.dart':
- _sampleObservableOutput("A", "foo", includeMain: true),
'a|web/b.dart': _sampleObservableOutput('B', 'bar'),
});
}
@@ -198,5 +190,4 @@
"__\$$field = notifyPropertyChange(#$field, __\$$field, value); "
"}\n"
" $className($field) : __\$$field = $field;\n"
- "}\n"
- "${includeMain ? '\n\npolymerMainWrapper() => main();\n' : ''}";
+ "}\n";
diff --git a/pkg/polymer/test/build/script_compactor_test.dart b/pkg/polymer/test/build/script_compactor_test.dart
index 946c90d..e3ec79c 100644
--- a/pkg/polymer/test/build/script_compactor_test.dart
+++ b/pkg/polymer/test/build/script_compactor_test.dart
@@ -46,19 +46,16 @@
'a|web/test.html_bootstrap.dart':
'''$MAIN_HEADER
- import 'a.dart_modified.dart' as i0;
+ import 'a.dart' as i0;
void main() {
configureForDeployment([
- 'a.dart_modified.dart',
+ 'a.dart',
]);
- i0.polymerMainWrapper();
+ i0.main();
}
'''.replaceAll('\n ', '\n'),
'a|web/a.dart': 'library a;\nmain(){}',
- 'a|web/a.dart_modified.dart':
- 'library a;\nmain(){}'
- '\n\npolymerMainWrapper() => main();\n',
});
testPhases('several scripts', phases, {
@@ -83,16 +80,16 @@
import 'a.dart' as i0;
import 'b.dart' as i1;
import 'c.dart' as i2;
- import 'd.dart_modified.dart' as i3;
+ import 'd.dart' as i3;
void main() {
configureForDeployment([
'a.dart',
'b.dart',
'c.dart',
- 'd.dart_modified.dart',
+ 'd.dart',
]);
- i3.polymerMainWrapper();
+ i3.main();
}
'''.replaceAll('\n ', '\n'),
});
diff --git a/pkg/shadow_dom/lib/shadow_dom.debug.js b/pkg/shadow_dom/lib/shadow_dom.debug.js
index 2622ea3..5ed6ecf 100644
--- a/pkg/shadow_dom/lib/shadow_dom.debug.js
+++ b/pkg/shadow_dom/lib/shadow_dom.debug.js
@@ -1884,7 +1884,7 @@
// 1.
if (isShadowRoot(node))
- return getInsertionParent(node) || scope.getHostForShadowRoot(node);
+ return getInsertionParent(node) || node.host;
// 2.
var eventParents = scope.eventParentsTable.get(node);
@@ -1980,7 +1980,7 @@
ancestor = calculateParents(ancestor, context, ancestors); // 3.4.7.
}
if (isShadowRoot(target)) // 3.5.
- target = scope.getHostForShadowRoot(target);
+ target = target.host;
else
target = target.parentNode; // 3.6.
}
@@ -2009,10 +2009,8 @@
function enclosedBy(a, b) {
if (a === b)
return true;
- if (a instanceof wrappers.ShadowRoot) {
- var host = scope.getHostForShadowRoot(a);
- return enclosedBy(rootOfNode(host), b);
- }
+ if (a instanceof wrappers.ShadowRoot)
+ return enclosedBy(rootOfNode(a.host), b);
return false;
}
@@ -2434,7 +2432,7 @@
function getTargetToListenAt(wrapper) {
if (wrapper instanceof wrappers.ShadowRoot)
- wrapper = scope.getHostForShadowRoot(wrapper);
+ wrapper = wrapper.host;
return unwrap(wrapper);
}
@@ -2671,11 +2669,13 @@
}
var nodes = [];
- var firstChild;
- while (firstChild = node.firstChild) {
- node.removeChild(firstChild);
- nodes.push(firstChild);
- firstChild.parentNode_ = parentNode;
+ for (var child = node.firstChild; child; child = child.nextSibling) {
+ nodes.push(child);
+ }
+
+ for (var i = nodes.length - 1; i >= 0; i--) {
+ node.removeChild(nodes[i]);
+ nodes[i].parentNode_ = parentNode;
}
for (var i = 0; i < nodes.length; i++) {
@@ -2825,12 +2825,28 @@
this.previousSibling_ = undefined;
};
+ var OriginalDocumentFragment = window.DocumentFragment;
var originalAppendChild = OriginalNode.prototype.appendChild;
- var originalInsertBefore = OriginalNode.prototype.insertBefore;
- var originalReplaceChild = OriginalNode.prototype.replaceChild;
- var originalRemoveChild = OriginalNode.prototype.removeChild;
var originalCompareDocumentPosition =
OriginalNode.prototype.compareDocumentPosition;
+ var originalInsertBefore = OriginalNode.prototype.insertBefore;
+ var originalRemoveChild = OriginalNode.prototype.removeChild;
+ var originalReplaceChild = OriginalNode.prototype.replaceChild;
+
+ var isIe = /Trident/.test(navigator.userAgent);
+
+ var removeChildOriginalHelper = isIe ?
+ function(parent, child) {
+ try {
+ originalRemoveChild.call(parent, child);
+ } catch (ex) {
+ if (!(parent instanceof OriginalDocumentFragment))
+ throw ex;
+ }
+ } :
+ function(parent, child) {
+ originalRemoveChild.call(parent, child);
+ };
Node.prototype = Object.create(EventTarget.prototype);
mixin(Node.prototype, {
@@ -2906,8 +2922,20 @@
removeChild: function(childWrapper) {
assertIsNodeWrapper(childWrapper);
if (childWrapper.parentNode !== this) {
- // TODO(arv): DOMException
- throw new Error('NotFoundError');
+ // IE has invalid DOM trees at times.
+ var found = false;
+ var childNodes = this.childNodes;
+ for (var ieChild = this.firstChild; ieChild;
+ ieChild = ieChild.nextSibling) {
+ if (ieChild === childWrapper) {
+ found = true;
+ break;
+ }
+ }
+ if (!found) {
+ // TODO(arv): DOMException
+ throw new Error('NotFoundError');
+ }
}
var childNode = unwrap(childWrapper);
@@ -2923,7 +2951,7 @@
var parentNode = childNode.parentNode;
if (parentNode)
- originalRemoveChild.call(parentNode, childNode);
+ removeChildOriginalHelper(parentNode, childNode);
if (thisFirstChild === childWrapper)
this.firstChild_ = childWrapperNextSibling;
@@ -2939,7 +2967,7 @@
childWrapper.previousSibling_ = childWrapper.nextSibling_ =
childWrapper.parentNode_ = undefined;
} else {
- originalRemoveChild.call(this.impl, childNode);
+ removeChildOriginalHelper(this.impl, childNode);
}
return childWrapper;
@@ -3726,12 +3754,13 @@
}
var node = unwrap(document.createElement('img'));
+ HTMLElement.call(this, node);
+ rewrap(node, this);
+
if (width !== undefined)
node.width = width;
if (height !== undefined)
node.height = height;
- HTMLElement.call(this, node);
- rewrap(node, this);
}
Image.prototype = HTMLImageElement.prototype;
@@ -3858,6 +3887,136 @@
(function(scope) {
'use strict';
+ var HTMLElement = scope.wrappers.HTMLElement;
+ var registerWrapper = scope.registerWrapper;
+
+ var OriginalHTMLMediaElement = window.HTMLMediaElement;
+
+ function HTMLMediaElement(node) {
+ HTMLElement.call(this, node);
+ }
+ HTMLMediaElement.prototype = Object.create(HTMLElement.prototype);
+
+ registerWrapper(OriginalHTMLMediaElement, HTMLMediaElement,
+ document.createElement('audio'));
+
+ scope.wrappers.HTMLMediaElement = HTMLMediaElement;
+})(this.ShadowDOMPolyfill);
+
+// Copyright 2013 The Polymer Authors. All rights reserved.
+// Use of this source code is goverened by a BSD-style
+// license that can be found in the LICENSE file.
+
+(function(scope) {
+ 'use strict';
+
+ var HTMLMediaElement = scope.wrappers.HTMLMediaElement;
+ var registerWrapper = scope.registerWrapper;
+ var unwrap = scope.unwrap;
+ var rewrap = scope.rewrap;
+
+ var OriginalHTMLAudioElement = window.HTMLAudioElement;
+
+ function HTMLAudioElement(node) {
+ HTMLMediaElement.call(this, node);
+ }
+ HTMLAudioElement.prototype = Object.create(HTMLMediaElement.prototype);
+
+ registerWrapper(OriginalHTMLAudioElement, HTMLAudioElement,
+ document.createElement('audio'));
+
+ function Audio(src) {
+ if (!(this instanceof Audio)) {
+ throw new TypeError(
+ 'DOM object constructor cannot be called as a function.');
+ }
+
+ var node = unwrap(document.createElement('audio'));
+ HTMLMediaElement.call(this, node);
+ rewrap(node, this);
+
+ node.setAttribute('preload', 'auto');
+ if (src !== undefined)
+ node.setAttribute('src', src);
+ }
+
+ Audio.prototype = HTMLAudioElement.prototype;
+
+ scope.wrappers.HTMLAudioElement = HTMLAudioElement;
+ scope.wrappers.Audio = Audio;
+})(this.ShadowDOMPolyfill);
+
+// Copyright 2013 The Polymer Authors. All rights reserved.
+// Use of this source code is goverened by a BSD-style
+// license that can be found in the LICENSE file.
+
+(function(scope) {
+ 'use strict';
+
+ var HTMLElement = scope.wrappers.HTMLElement;
+ var mixin = scope.mixin;
+ var registerWrapper = scope.registerWrapper;
+ var rewrap = scope.rewrap;
+ var unwrap = scope.unwrap;
+ var wrap = scope.wrap;
+
+ var OriginalHTMLOptionElement = window.HTMLOptionElement;
+
+ function trimText(s) {
+ return s.replace(/\s+/g, ' ').trim();
+ }
+
+ function HTMLOptionElement(node) {
+ HTMLElement.call(this, node);
+ }
+ HTMLOptionElement.prototype = Object.create(HTMLElement.prototype);
+ mixin(HTMLOptionElement.prototype, {
+ get text() {
+ return trimText(this.textContent);
+ },
+ set text(value) {
+ this.textContent = trimText(String(value));
+ },
+ get form() {
+ return wrap(unwrap(this).form);
+ }
+ });
+
+ registerWrapper(OriginalHTMLOptionElement, HTMLOptionElement,
+ document.createElement('option'));
+
+ function Option(text, value, defaultSelected, selected) {
+ if (!(this instanceof Option)) {
+ throw new TypeError(
+ 'DOM object constructor cannot be called as a function.');
+ }
+
+ var node = unwrap(document.createElement('option'));
+ HTMLElement.call(this, node);
+ rewrap(node, this);
+
+ if (text !== undefined)
+ node.text = text;
+ if (value !== undefined)
+ node.setAttribute('value', value);
+ if (defaultSelected === true)
+ node.setAttribute('selected', '');
+ node.selected = selected === true;
+ }
+
+ Option.prototype = HTMLOptionElement.prototype;
+
+ scope.wrappers.HTMLOptionElement = HTMLOptionElement;
+ scope.wrappers.Option = Option;
+})(this.ShadowDOMPolyfill);
+
+// Copyright 2013 The Polymer Authors. All rights reserved.
+// Use of this source code is goverened by a BSD-style
+// license that can be found in the LICENSE file.
+
+(function(scope) {
+ 'use strict';
+
var HTMLContentElement = scope.wrappers.HTMLContentElement;
var HTMLElement = scope.wrappers.HTMLElement;
var HTMLShadowElement = scope.wrappers.HTMLShadowElement;
@@ -4037,6 +4196,10 @@
return nextOlderShadowTreeTable.get(this) || null;
},
+ get host() {
+ return shadowHostTable.get(this) || null;
+ },
+
invalidateShadowRenderer: function() {
return shadowHostTable.get(this).invalidateShadowRenderer();
},
@@ -4051,9 +4214,6 @@
});
scope.wrappers.ShadowRoot = ShadowRoot;
- scope.getHostForShadowRoot = function(node) {
- return shadowHostTable.get(node);
- };
})(this.ShadowDOMPolyfill);
// Copyright 2013 The Polymer Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
@@ -4068,7 +4228,6 @@
var Node = scope.wrappers.Node;
var ShadowRoot = scope.wrappers.ShadowRoot;
var assert = scope.assert;
- var getHostForShadowRoot = scope.getHostForShadowRoot;
var mixin = scope.mixin;
var muteMutationEvents = scope.muteMutationEvents;
var oneOf = scope.oneOf;
@@ -4310,7 +4469,7 @@
}
function getRendererForShadowRoot(shadowRoot) {
- return getRendererForHost(getHostForShadowRoot(shadowRoot));
+ return getRendererForHost(shadowRoot.host);
}
var spliceDiff = new ArraySplice();
@@ -4739,7 +4898,7 @@
'HTMLLabelElement',
'HTMLLegendElement',
'HTMLObjectElement',
- 'HTMLOptionElement',
+ // HTMLOptionElement is handled in HTMLOptionElement.js
'HTMLOutputElement',
'HTMLSelectElement',
'HTMLTextAreaElement',
@@ -4924,13 +5083,19 @@
};
});
- var nativeConstructor = originalRegister.call(unwrap(this), tagName,
- object.extends ? {prototype: newPrototype, extends: object.extends} :
- {prototype: newPrototype});
+ var p = {prototype: newPrototype};
+ if (object.extends)
+ p.extends = object.extends;
+ var nativeConstructor = originalRegister.call(unwrap(this), tagName, p);
function GeneratedWrapper(node) {
- if (!node)
- return document.createElement(tagName);
+ if (!node) {
+ if (object.extends) {
+ return document.createElement(object.extends, tagName);
+ } else {
+ return document.createElement(tagName);
+ }
+ }
this.impl = node;
}
GeneratedWrapper.prototype = prototype;
@@ -5304,7 +5469,6 @@
'a': 'HTMLAnchorElement',
'applet': 'HTMLAppletElement',
'area': 'HTMLAreaElement',
- 'audio': 'HTMLAudioElement',
'br': 'HTMLBRElement',
'base': 'HTMLBaseElement',
'body': 'HTMLBodyElement',
@@ -5333,7 +5497,6 @@
'link': 'HTMLLinkElement',
'map': 'HTMLMapElement',
'marquee': 'HTMLMarqueeElement',
- // 'media', Covered by audio and video
'menu': 'HTMLMenuElement',
'menuitem': 'HTMLMenuItemElement',
'meta': 'HTMLMetaElement',
@@ -5477,10 +5640,10 @@
/*
This is a limited shim for ShadowDOM css styling.
https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/shadow/index.html#styles
-
- The intention here is to support only the styling features which can be
- relatively simply implemented. The goal is to allow users to avoid the
- most obvious pitfalls and do so without compromising performance significantly.
+
+ The intention here is to support only the styling features which can be
+ relatively simply implemented. The goal is to allow users to avoid the
+ most obvious pitfalls and do so without compromising performance significantly.
For ShadowDOM styling that's not covered here, a set of best practices
can be provided that should allow users to accomplish more complex styling.
@@ -5489,57 +5652,57 @@
Shimmed features:
- * @host: ShadowDOM allows styling of the shadowRoot's host element using the
- @host rule. To shim this feature, the @host styles are reformatted and
+ * @host: ShadowDOM allows styling of the shadowRoot's host element using the
+ @host rule. To shim this feature, the @host styles are reformatted and
prefixed with a given scope name and promoted to a document level stylesheet.
For example, given a scope name of .foo, a rule like this:
-
+
@host {
* {
background: red;
}
}
-
+
becomes:
-
+
.foo {
background: red;
}
-
- * encapsultion: Styles defined within ShadowDOM, apply only to
+
+ * encapsultion: Styles defined within ShadowDOM, apply only to
dom inside the ShadowDOM. Polymer uses one of two techniques to imlement
this feature.
-
- By default, rules are prefixed with the host element tag name
+
+ By default, rules are prefixed with the host element tag name
as a descendant selector. This ensures styling does not leak out of the 'top'
of the element's ShadowDOM. For example,
div {
font-weight: bold;
}
-
+
becomes:
x-foo div {
font-weight: bold;
}
-
+
becomes:
- Alternatively, if Platform.ShadowCSS.strictStyling is set to true then
+ Alternatively, if Platform.ShadowCSS.strictStyling is set to true then
selectors are scoped by adding an attribute selector suffix to each
- simple selector that contains the host element tag name. Each element
- in the element's ShadowDOM template is also given the scope attribute.
+ simple selector that contains the host element tag name. Each element
+ in the element's ShadowDOM template is also given the scope attribute.
Thus, these rules match only elements that have the scope attribute.
For example, given a scope name of x-foo, a rule like this:
-
+
div {
font-weight: bold;
}
-
+
becomes:
-
+
div[x-foo] {
font-weight: bold;
}
@@ -5571,39 +5734,39 @@
becomes:
- x-foo [part=special] { ... }
-
+ x-foo [part=special] { ... }
+
Unaddressed ShadowDOM styling features:
-
+
* upper/lower bound encapsulation: Styles which are defined outside a
shadowRoot should not cross the ShadowDOM boundary and should not apply
inside a shadowRoot.
- This styling behavior is not emulated. Some possible ways to do this that
+ This styling behavior is not emulated. Some possible ways to do this that
were rejected due to complexity and/or performance concerns include: (1) reset
every possible property for every possible selector for a given scope name;
(2) re-implement css in javascript.
-
+
As an alternative, users should make sure to use selectors
specific to the scope in which they are working.
-
+
* ::distributed: This behavior is not emulated. It's often not necessary
to style the contents of a specific insertion point and instead, descendants
- of the host element can be styled selectively. Users can also create an
+ of the host element can be styled selectively. Users can also create an
extra node around an insertion point and style that node's contents
via descendent selectors. For example, with a shadowRoot like this:
-
+
<style>
content::-webkit-distributed(div) {
background: red;
}
</style>
<content></content>
-
+
could become:
-
+
<style>
- / *@polyfill .content-container div * /
+ / *@polyfill .content-container div * /
content::-webkit-distributed(div) {
background: red;
}
@@ -5611,9 +5774,9 @@
<div class="content-container">
<content></content>
</div>
-
+
Note the use of @polyfill in the comment above a ShadowDOM specific style
- declaration. This is a directive to the styling shim to use the selector
+ declaration. This is a directive to the styling shim to use the selector
in comments in lieu of the next selector when running under polyfill.
*/
(function(scope) {
@@ -5649,7 +5812,7 @@
root.shimmedStyle = def.shimmedStyle;
}
// remove existing style elements
- for (var i=0, l=def.rootStyles.length, s; (i<l) && (s=def.rootStyles[i]);
+ for (var i=0, l=def.rootStyles.length, s; (i<l) && (s=def.rootStyles[i]);
i++) {
s.parentNode.removeChild(s);
}
@@ -5693,14 +5856,14 @@
/*
* Process styles to convert native ShadowDOM rules that will trip
* up the css parser; we rely on decorating the stylesheet with comments.
- *
+ *
* For example, we convert this rule:
- *
+ *
* (comment start) @polyfill :host menu-item (comment end)
* shadow::-webkit-distributed(menu-item) {
- *
+ *
* to this:
- *
+ *
* scopeName menu-item {
*
**/
@@ -5719,14 +5882,14 @@
},
/*
* Process styles to add rules which will only apply under the polyfill
- *
+ *
* For example, we convert this rule:
- *
- * (comment start) @polyfill-rule :host menu-item {
+ *
+ * (comment start) @polyfill-rule :host menu-item {
* ... } (comment end)
- *
+ *
* to this:
- *
+ *
* scopeName menu-item {...}
*
**/
@@ -5745,15 +5908,15 @@
},
/*
* Process styles to add rules which will only apply under the polyfill
- * and do not process via CSSOM. (CSSOM is destructive to rules on rare
+ * and do not process via CSSOM. (CSSOM is destructive to rules on rare
* occasions, e.g. -webkit-calc on Safari.)
* For example, we convert this rule:
- *
- * (comment start) @polyfill-unscoped-rule menu-item {
+ *
+ * (comment start) @polyfill-unscoped-rule menu-item {
* ... } (comment end)
- *
+ *
* to this:
- *
+ *
* menu-item {...}
*
**/
@@ -5792,7 +5955,7 @@
return self.scopeHostCss(p1, name, typeExtension);
});
cssText = rulesToCss(this.findAtHostRules(cssToRules(cssText),
- new RegExp('^' + name + selectorReSuffix, 'm')));
+ this.makeScopeMatcher(name, typeExtension)));
return cssText;
},
scopeHostCss: function(cssText, name, typeExtension) {
@@ -5819,10 +5982,10 @@
return r.join(', ');
},
// consider styles that do not include component name in the selector to be
- // unscoped and in need of promotion;
+ // unscoped and in need of promotion;
// for convenience, also consider keyframe rules this way.
findAtHostRules: function(cssRules, matcher) {
- return Array.prototype.filter.call(cssRules,
+ return Array.prototype.filter.call(cssRules,
this.isHostRule.bind(this, matcher));
},
isHostRule: function(matcher, cssRule) {
@@ -5831,11 +5994,11 @@
(cssRule.type == CSSRule.WEBKIT_KEYFRAMES_RULE);
},
/* Ensure styles are scoped. Pseudo-scoping takes a rule like:
- *
- * .foo {... }
- *
+ *
+ * .foo {... }
+ *
* and converts this to
- *
+ *
* scopeName .foo { ... }
*/
shimScoping: function(styles, name, typeExtension) {
@@ -5866,15 +6029,28 @@
* to
*
* scopeName.foo > .bar, .foo scopeName > .bar { }
- * TODO(sorvell): file bug since native impl does not do the former yet.
- * http://jsbin.com/OganOCI/2/edit
+ *
+ * and
+ *
+ * :host(.foo:host) .bar { ... }
+ *
+ * to
+ *
+ * scopeName.foo .bar { ... }
*/
convertColonHost: function(cssText) {
// p1 = :host, p2 = contents of (), p3 rest of rule
return cssText.replace(cssColonHostRe, function(m, p1, p2, p3) {
- return p2 ? polyfillHostNoCombinator + p2 + p3 + ', '
- + p2 + ' ' + p1 + p3 :
- p1 + p3;
+ p1 = polyfillHostNoCombinator;
+ if (p2) {
+ if (p2.match(polyfillHost)) {
+ return p1 + p2.replace(polyfillHost, '') + p3;
+ } else {
+ return p1 + p2 + p3 + ', ' + p2 + ' ' + p1 + p3;
+ }
+ } else {
+ return p1 + p3;
+ }
});
},
/*
@@ -5888,7 +6064,7 @@
var cssText = '';
Array.prototype.forEach.call(cssRules, function(rule) {
if (rule.selectorText && (rule.style && rule.style.cssText)) {
- cssText += this.scopeSelector(rule.selectorText, name, typeExtension,
+ cssText += this.scopeSelector(rule.selectorText, name, typeExtension,
this.strictStyling) + ' {\n\t';
cssText += this.propertiesFromRule(rule) + '\n}\n\n';
} else if (rule.media) {
@@ -5914,10 +6090,13 @@
return r.join(', ');
},
selectorNeedsScoping: function(selector, name, typeExtension) {
- var matchScope = typeExtension ? name : '\\[is=' + name + '\\]';
- var re = new RegExp('^(' + matchScope + ')' + selectorReSuffix, 'm');
+ var re = this.makeScopeMatcher(name, typeExtension);
return !selector.match(re);
},
+ makeScopeMatcher: function(name, typeExtension) {
+ var matchScope = typeExtension ? '\\[is=[\'"]?' + name + '[\'"]?\\]' : name;
+ return new RegExp('^(' + matchScope + ')' + selectorReSuffix, 'm');
+ },
// scope via name and [is=name]
applySimpleSelectorScope: function(selector, name, typeExtension) {
var scoper = typeExtension ? '[is=' + name + ']' : name;
@@ -5956,7 +6135,7 @@
// TODO(sorvell): Chrome cssom incorrectly removes quotes from the content
// property. (https://code.google.com/p/chromium/issues/detail?id=247231)
if (rule.style.content && !rule.style.content.match(/['"]+/)) {
- properties = 'content: \'' + rule.style.content + '\';\n' +
+ properties = 'content: \'' + rule.style.content + '\';\n' +
rule.style.cssText.replace(/content:[^;]*;/g, '');
}
return properties;
@@ -6042,5 +6221,4 @@
scope.ShadowCSS = ShadowCSS;
})(window.Platform);
-
}
\ No newline at end of file
diff --git a/pkg/shadow_dom/lib/shadow_dom.min.js b/pkg/shadow_dom/lib/shadow_dom.min.js
index 3f339be..c9b57af 100644
--- a/pkg/shadow_dom/lib/shadow_dom.min.js
+++ b/pkg/shadow_dom/lib/shadow_dom.min.js
@@ -1,3 +1,3 @@
-if(!HTMLElement.prototype.createShadowRoot||window.__forceShadowDomPolyfill){!function(){Element.prototype.webkitCreateShadowRoot&&(Element.prototype.webkitCreateShadowRoot=function(){return window.ShadowDOMPolyfill.wrapIfNeeded(this).createShadowRoot()})}(),function(a){"use strict";function b(){function a(a){b=a}if("function"!=typeof Object.observe||"function"!=typeof Array.observe)return!1;var b=[],c={};if(Object.observe(c,a),c.id=1,c.id=2,delete c.id,Object.deliverChangeRecords(a),3!==b.length)return!1;if("new"==b[0].type&&"updated"==b[1].type&&"deleted"==b[2].type)F="new",G="updated",H="reconfigured",I="deleted";else if("add"!=b[0].type||"update"!=b[1].type||"delete"!=b[2].type)return console.error("Unexpected change record names for Object.observe. Using dirty-checking instead"),!1;return Object.unobserve(c,a),c=[0],Array.observe(c,a),c[1]=1,c.length=0,Object.deliverChangeRecords(a),2!=b.length?!1:b[0].type!=J||b[1].type!=J?!1:(Array.unobserve(c,a),!0)}function c(){if(a.document&&"securityPolicy"in a.document&&!a.document.securityPolicy.allowsEval)return!1;try{var b=new Function("","return true;");return b()}catch(c){return!1}}function d(a){return+a===a>>>0}function e(a){return+a}function f(a){return a===Object(a)}function g(a,b){return a===b?0!==a||1/a===1/b:M(a)&&M(b)?!0:a!==a&&b!==b}function h(a){return"string"!=typeof a?!1:(a=a.trim(),""==a?!0:"."==a[0]?!1:U.test(a))}function i(a,b){if(b!==V)throw Error("Use Path.get to retrieve path objects");return""==a.trim()?this:d(a)?(this.push(a),this):(a.split(/\s*\.\s*/).filter(function(a){return a}).forEach(function(a){this.push(a)},this),L&&!K&&this.length&&(this.getValueFrom=this.compiledGetValueFromFn()),void 0)}function j(a){if(a instanceof i)return a;null==a&&(a=""),"string"!=typeof a&&(a=String(a));var b=W[a];if(b)return b;if(!h(a))return X;var b=new i(a,V);return W[a]=b,b}function k(b){for(var c=0;Y>c&&b.check();)b.report(),c++;a.testingExposeCycleCount&&(a.dirtyCheckCycleCount=c)}function l(a){for(var b in a)return!1;return!0}function m(a){return l(a.added)&&l(a.removed)&&l(a.changed)}function n(a,b){var c={},d={},e={};for(var f in b){var g=a[f];(void 0===g||g!==b[f])&&(f in a?g!==b[f]&&(e[f]=g):d[f]=void 0)}for(var f in a)f in b||(c[f]=a[f]);return Array.isArray(a)&&a.length!==b.length&&(e.length=a.length),{added:c,removed:d,changed:e}}function o(a,b){var c=b||(Array.isArray(a)?[]:{});for(var d in a)c[d]=a[d];return Array.isArray(a)&&(c.length=a.length),c}function p(a,b,c,d){if(this.closed=!1,this.object=a,this.callback=b,this.target=c,this.token=d,this.reporting=!0,K){var e=this;this.boundInternalCallback=function(a){e.internalCallback(a)}}q(this)}function q(a){$&&(Z.push(a),p._allObserversCount++)}function r(a,b,c,d){p.call(this,a,b,c,d),this.connect(),this.sync(!0)}function s(a,b,c,d){if(!Array.isArray(a))throw Error("Provided object is not an Array");r.call(this,a,b,c,d)}function t(a){this.arr=[],this.callback=a,this.isObserved=!0}function u(a,b,c,d,e,g,h){var b=b instanceof i?b:j(b);return b&&b.length&&f(a)?(p.call(this,a,c,d,e),this.valueFn=g,this.setValueFn=h,this.path=b,this.connect(),this.sync(!0),void 0):(this.value_=b?b.getValueFrom(a):void 0,this.value=g?g(this.value_):this.value_,this.closed=!0,void 0)}function v(a,b,c,d){p.call(this,void 0,a,b,c),this.valueFn=d,this.observed=[],this.values=[],this.value=void 0,this.oldValue=void 0,this.oldValues=void 0,this.changeFlags=void 0,this.started=!1}function w(a,b){if("function"==typeof Object.observe){var c=Object.getNotifier(a);return function(d,e){var f={object:a,type:d,name:b};2===arguments.length&&(f.oldValue=e),c.notify(f)}}}function x(a,b,c){for(var d={},e={},f=0;f<b.length;f++){var g=b[f];db[g.type]?(g.name in c||(c[g.name]=g.oldValue),g.type!=G&&(g.type!=F?g.name in d?(delete d[g.name],delete c[g.name]):e[g.name]=!0:g.name in e?delete e[g.name]:d[g.name]=!0)):(console.error("Unknown changeRecord type: "+g.type),console.error(g))}for(var h in d)d[h]=a[h];for(var h in e)e[h]=void 0;var i={};for(var h in c)if(!(h in d||h in e)){var j=a[h];c[h]!==j&&(i[h]=j)}return{added:d,removed:e,changed:i}}function y(a,b,c){return{index:a,removed:b,addedCount:c}}function z(){}function A(a,b,c,d,e,f){return ib.calcSplices(a,b,c,d,e,f)}function B(a,b,c,d){return c>b||a>d?-1:b==c||d==a?0:c>a?d>b?b-c:d-c:b>d?d-a:b-a}function C(a,b,c,d){for(var e=y(b,c,d),f=!1,g=0,h=0;h<a.length;h++){var i=a[h];if(i.index+=g,!f){var j=B(e.index,e.index+e.removed.length,i.index,i.index+i.addedCount);if(j>=0){a.splice(h,1),h--,g-=i.addedCount-i.removed.length,e.addedCount+=i.addedCount-j;var k=e.removed.length+i.removed.length-j;if(e.addedCount||k){var c=i.removed;if(e.index<i.index){var l=e.removed.slice(0,i.index-e.index);Array.prototype.push.apply(l,c),c=l}if(e.index+e.removed.length>i.index+i.addedCount){var m=e.removed.slice(i.index+i.addedCount-e.index);Array.prototype.push.apply(c,m)}e.removed=c,i.index<e.index&&(e.index=i.index)}else f=!0}else if(e.index<i.index){f=!0,a.splice(h,0,e),h++;var n=e.addedCount-e.removed.length;i.index+=n,g+=n}}}f||a.push(e)}function D(a,b){for(var c=[],f=0;f<b.length;f++){var g=b[f];switch(g.type){case J:C(c,g.index,g.removed.slice(),g.addedCount);break;case F:case G:case I:if(!d(g.name))continue;var h=e(g.name);if(0>h)continue;C(c,h,[g.oldValue],1);break;default:console.error("Unexpected record type: "+JSON.stringify(g))}}return c}function E(a,b){var c=[];return D(a,b).forEach(function(b){return 1==b.addedCount&&1==b.removed.length?(b.removed[0]!==a[b.index]&&c.push(b),void 0):(c=c.concat(A(a,b.index,b.index+b.addedCount,b.removed,0,b.removed.length)),void 0)}),c}var F="add",G="update",H="reconfigure",I="delete",J="splice",K=b(),L=c(),M=a.Number.isNaN||function(b){return"number"==typeof b&&a.isNaN(b)},N="__proto__"in{}?function(a){return a}:function(a){var b=a.__proto__;if(!b)return a;var c=Object.create(b);return Object.getOwnPropertyNames(a).forEach(function(b){Object.defineProperty(c,b,Object.getOwnPropertyDescriptor(a,b))}),c},O="[$_a-zA-Z]",P="[$_a-zA-Z0-9]",Q=O+"+"+P+"*",R="(?:[0-9]|[1-9]+[0-9]+)",S="(?:"+Q+"|"+R+")",T="(?:"+S+")(?:\\s*\\.\\s*"+S+")*",U=new RegExp("^"+T+"$"),V={},W={};i.get=j,i.prototype=N({__proto__:[],valid:!0,toString:function(){return this.join(".")},getValueFrom:function(a,b){for(var c=0;c<this.length;c++){if(null==a)return;b&&b.observe(a),a=a[this[c]]}return a},compiledGetValueFromFn:function(){var a=this.map(function(a){return d(a)?'["'+a+'"]':"."+a}),b="",c="obj";b+="if (obj != null";for(var e=0;e<this.length-1;e++)this[e],c+=a[e],b+=" &&\n "+c+" != null";return b+=")\n",c+=a[e],b+=" return "+c+";\nelse\n return undefined;",new Function("obj",b)},setValueFrom:function(a,b){if(!this.length)return!1;for(var c=0;c<this.length-1;c++){if(!f(a))return!1;a=a[this[c]]}return f(a)?(a[this[c]]=b,!0):!1}});var X=new i("",V);X.valid=!1,X.getValueFrom=X.setValueFrom=function(){};var Y=1e3;p.prototype={internalCallback:function(a){this.closed||this.reporting&&this.check(a)&&(this.report(),this.testingResults&&(this.testingResults.anyChanged=!0))},close:function(){this.closed||(this.object&&"function"==typeof this.object.close&&this.object.close(),this.disconnect(),this.object=void 0,this.closed=!0)},deliver:function(a){this.closed||(K?(this.testingResults=a,Object.deliverChangeRecords(this.boundInternalCallback),this.testingResults=void 0):k(this))},report:function(){this.reporting&&(this.sync(!1),this.callback&&(this.reportArgs.push(this.token),this.invokeCallback(this.reportArgs)),this.reportArgs=void 0)},invokeCallback:function(a){try{this.callback.apply(this.target,a)}catch(b){p._errorThrownDuringCallback=!0,console.error("Exception caught during observer callback: "+(b.stack||b))}},reset:function(){this.closed||(K&&(this.reporting=!1,Object.deliverChangeRecords(this.boundInternalCallback),this.reporting=!0),this.sync(!0))}};var Z,$=!K||a.forceCollectObservers;p._allObserversCount=0,$&&(Z=[]);var _=!1,ab="function"==typeof Object.deliverAllChangeRecords;a.Platform=a.Platform||{},a.Platform.performMicrotaskCheckpoint=function(){if(!_){if(ab)return Object.deliverAllChangeRecords(),void 0;if($){_=!0;var b=0,c={};do{b++;var d=Z;Z=[],c.anyChanged=!1;for(var e=0;e<d.length;e++){var f=d[e];f.closed||(K?f.deliver(c):f.check()&&(c.anyChanged=!0,f.report()),Z.push(f))}}while(Y>b&&c.anyChanged);a.testingExposeCycleCount&&(a.dirtyCheckCycleCount=b),p._allObserversCount=Z.length,_=!1}}},$&&(a.Platform.clearObservers=function(){Z=[]}),r.prototype=N({__proto__:p.prototype,connect:function(){K&&Object.observe(this.object,this.boundInternalCallback)},sync:function(){K||(this.oldObject=o(this.object))},check:function(a){var b,c;if(K){if(!a)return!1;c={},b=x(this.object,a,c)}else c=this.oldObject,b=n(this.object,this.oldObject);return m(b)?!1:(this.reportArgs=[b.added||{},b.removed||{},b.changed||{}],this.reportArgs.push(function(a){return c[a]}),!0)},disconnect:function(){K?this.object&&Object.unobserve(this.object,this.boundInternalCallback):this.oldObject=void 0}}),s.prototype=N({__proto__:r.prototype,connect:function(){K&&Array.observe(this.object,this.boundInternalCallback)},sync:function(){K||(this.oldObject=this.object.slice())},check:function(a){var b;if(K){if(!a)return!1;b=E(this.object,a)}else b=A(this.object,0,this.object.length,this.oldObject,0,this.oldObject.length);return b&&b.length?(this.reportArgs=[b],!0):!1}}),s.applySplices=function(a,b,c){c.forEach(function(c){for(var d=[c.index,c.removed.length],e=c.index;e<c.index+c.addedCount;)d.push(b[e]),e++;Array.prototype.splice.apply(a,d)})};var bb=Object.getPrototypeOf({}),cb=Object.getPrototypeOf([]);t.prototype={reset:function(){this.isObserved=!this.isObserved},observe:function(a){if(f(a)&&a!==bb&&a!==cb){var b=this.arr.indexOf(a);b>=0&&this.arr[b+1]===this.isObserved||(0>b&&(b=this.arr.length,this.arr[b]=a,Object.observe(a,this.callback)),this.arr[b+1]=this.isObserved,this.observe(Object.getPrototypeOf(a)))}},cleanup:function(){for(var a=0,b=0,c=this.isObserved;b<this.arr.length;){var d=this.arr[b];this.arr[b+1]==c?(b>a&&(this.arr[a]=d,this.arr[a+1]=c),a+=2):Object.unobserve(d,this.callback),b+=2}this.arr.length=a}},u.prototype=N({__proto__:p.prototype,connect:function(){K&&(this.observedSet=new t(this.boundInternalCallback))},disconnect:function(){this.value=void 0,this.value_=void 0,this.observedSet&&(this.observedSet.reset(),this.observedSet.cleanup(),this.observedSet=void 0)},check:function(){return this.observedSet&&this.observedSet.reset(),this.value_=this.path.getValueFrom(this.object,this.observedSet),this.observedSet&&this.observedSet.cleanup(),g(this.value_,this.oldValue_)?!1:(this.value=this.valueFn?this.valueFn(this.value_):this.value_,this.reportArgs=[this.value,this.oldValue],!0)},sync:function(a){a&&(this.observedSet&&this.observedSet.reset(),this.value_=this.path.getValueFrom(this.object,this.observedSet),this.value=this.valueFn?this.valueFn(this.value_):this.value_,this.observedSet&&this.observedSet.cleanup()),this.oldValue_=this.value_,this.oldValue=this.value},setValue:function(a){this.path&&("function"==typeof this.setValueFn&&(a=this.setValueFn(a)),this.path.setValueFrom(this.object,a))}}),v.prototype=N({__proto__:u.prototype,addPath:function(a,b){if(this.started)throw Error("Cannot add more paths once started.");var b=b instanceof i?b:j(b),c=b?b.getValueFrom(a):void 0;this.observed.push(a,b),this.values.push(c)},start:function(){this.started=!0,this.connect(),this.sync(!0)},getValues:function(){this.observedSet&&this.observedSet.reset();for(var a=!1,b=0;b<this.observed.length;b+=2){var c=this.observed[b+1];if(c){var d=this.observed[b],e=c.getValueFrom(d,this.observedSet),f=this.values[b/2];if(!g(e,f)){if(!a&&!this.valueFn){this.oldValues=this.oldValues||[],this.changeFlags=this.changeFlags||[];for(var h=0;h<this.values.length;h++)this.oldValues[h]=this.values[h],this.changeFlags[h]=!1}this.valueFn||(this.changeFlags[b/2]=!0),this.values[b/2]=e,a=!0}}}return this.observedSet&&this.observedSet.cleanup(),a},check:function(){if(this.getValues()){if(this.valueFn){if(this.value=this.valueFn(this.values),g(this.value,this.oldValue))return!1;this.reportArgs=[this.value,this.oldValue]}else this.reportArgs=[this.values,this.oldValues,this.changeFlags,this.observed];return!0}},sync:function(a){a&&(this.getValues(),this.valueFn&&(this.value=this.valueFn(this.values))),this.valueFn&&(this.oldValue=this.value)},close:function(){if(this.observed){for(var a=0;a<this.observed.length;a+=2){var b=this.observed[a];b&&"function"==typeof b.close&&b.close()}this.observed=void 0,this.values=void 0}p.prototype.close.call(this)}});var db={};db[F]=!0,db[G]=!0,db[I]=!0,u.defineProperty=function(a,b,c){var d=c.object,e=j(c.path),f=w(a,b),g=new u(d,c.path,function(a,b){f&&f(G,b)});return Object.defineProperty(a,b,{get:function(){return e.getValueFrom(d)},set:function(a){e.setValueFrom(d,a)},configurable:!0}),{close:function(){var c=e.getValueFrom(d);f&&g.deliver(),g.close(),Object.defineProperty(a,b,{value:c,writable:!0,configurable:!0})}}};var eb=0,fb=1,gb=2,hb=3;z.prototype={calcEditDistances:function(a,b,c,d,e,f){for(var g=f-e+1,h=c-b+1,i=new Array(g),j=0;g>j;j++)i[j]=new Array(h),i[j][0]=j;for(var k=0;h>k;k++)i[0][k]=k;for(var j=1;g>j;j++)for(var k=1;h>k;k++)if(this.equals(a[b+k-1],d[e+j-1]))i[j][k]=i[j-1][k-1];else{var l=i[j-1][k]+1,m=i[j][k-1]+1;i[j][k]=m>l?l:m}return i},spliceOperationsFromEditDistances:function(a){for(var b=a.length-1,c=a[0].length-1,d=a[b][c],e=[];b>0||c>0;)if(0!=b)if(0!=c){var f,g=a[b-1][c-1],h=a[b-1][c],i=a[b][c-1];f=i>h?g>h?h:g:g>i?i:g,f==g?(g==d?e.push(eb):(e.push(fb),d=g),b--,c--):f==h?(e.push(hb),b--,d=h):(e.push(gb),c--,d=i)}else e.push(hb),b--;else e.push(gb),c--;return e.reverse(),e},calcSplices:function(a,b,c,d,e,f){var g=0,h=0,i=Math.min(c-b,f-e);if(0==b&&0==e&&(g=this.sharedPrefix(a,d,i)),c==a.length&&f==d.length&&(h=this.sharedSuffix(a,d,i-g)),b+=g,e+=g,c-=h,f-=h,0==c-b&&0==f-e)return[];if(b==c){for(var j=y(b,[],0);f>e;)j.removed.push(d[e++]);return[j]}if(e==f)return[y(b,[],c-b)];for(var k=this.spliceOperationsFromEditDistances(this.calcEditDistances(a,b,c,d,e,f)),j=void 0,l=[],m=b,n=e,o=0;o<k.length;o++)switch(k[o]){case eb:j&&(l.push(j),j=void 0),m++,n++;break;case fb:j||(j=y(m,[],0)),j.addedCount++,m++,j.removed.push(d[n]),n++;break;case gb:j||(j=y(m,[],0)),j.addedCount++,m++;break;case hb:j||(j=y(m,[],0)),j.removed.push(d[n]),n++}return j&&l.push(j),l},sharedPrefix:function(a,b,c){for(var d=0;c>d;d++)if(!this.equals(a[d],b[d]))return d;return c},sharedSuffix:function(a,b,c){for(var d=a.length,e=b.length,f=0;c>f&&this.equals(a[--d],b[--e]);)f++;return f},calculateSplices:function(a,b){return this.calcSplices(a,0,a.length,b,0,b.length)},equals:function(a,b){return a===b}};var ib=new z;a.Observer=p,a.Observer.hasObjectObserve=K,a.ArrayObserver=s,a.ArrayObserver.calculateSplices=function(a,b){return ib.calculateSplices(a,b)},a.ArraySplice=z,a.ObjectObserver=r,a.PathObserver=u,a.CompoundPathObserver=v,a.Path=i,a.Observer.changeRecordTypes={add:F,update:G,reconfigure:H,"delete":I,splice:J}}("undefined"!=typeof global&&global?global:this),"undefined"==typeof WeakMap&&!function(){var a=Object.defineProperty,b=Date.now()%1e9,c=function(){this.name="__st"+(1e9*Math.random()>>>0)+(b++ +"__")};c.prototype={set:function(b,c){var d=b[this.name];d&&d[0]===b?d[1]=c:a(b,this.name,{value:[b,c],writable:!0})},get:function(a){var b;return(b=a[this.name])&&b[0]===a?b[1]:void 0},"delete":function(a){this.set(a,void 0)}},window.WeakMap=c}();var ShadowDOMPolyfill={};!function(a){"use strict";function b(a){if(!a)throw new Error("Assertion failed")}function c(a,b){return Object.getOwnPropertyNames(b).forEach(function(c){Object.defineProperty(a,c,Object.getOwnPropertyDescriptor(b,c))}),a}function d(a,b){return Object.getOwnPropertyNames(b).forEach(function(c){switch(c){case"arguments":case"caller":case"length":case"name":case"prototype":case"toString":return}Object.defineProperty(a,c,Object.getOwnPropertyDescriptor(b,c))}),a}function e(a,b){for(var c=0;c<b.length;c++)if(b[c]in a)return b[c]}function f(a){var b=a.__proto__||Object.getPrototypeOf(a),c=D.get(b);if(c)return c;var d=f(b),e=s(d);return p(b,e,a),e}function g(a,b){n(a,b,!0)}function h(a,b){n(b,a,!1)}function i(a){return/^on[a-z]+$/.test(a)}function j(a){return/^\w[a-zA-Z_0-9]*$/.test(a)}function k(a){return G&&j(a)?new Function("return this.impl."+a):function(){return this.impl[a]}}function l(a){return G&&j(a)?new Function("v","this.impl."+a+" = v"):function(b){this.impl[a]=b}}function m(a){return G&&j(a)?new Function("return this.impl."+a+".apply(this.impl, arguments)"):function(){return this.impl[a].apply(this.impl,arguments)}}function n(b,c,d){Object.getOwnPropertyNames(b).forEach(function(e){if(!(e in c)){J&&b.__lookupGetter__(e);var f;try{f=Object.getOwnPropertyDescriptor(b,e)}catch(g){f=K}var h,j;if(d&&"function"==typeof f.value)return c[e]=m(e),void 0;var n=i(e);h=n?a.getEventHandlerGetter(e):k(e),(f.writable||f.set)&&(j=n?a.getEventHandlerSetter(e):l(e)),Object.defineProperty(c,e,{get:h,set:j,configurable:f.configurable,enumerable:f.enumerable})}})}function o(a,b,c){var e=a.prototype;p(e,b,c),d(b,a)}function p(a,c,d){var e=c.prototype;b(void 0===D.get(a)),D.set(a,c),E.set(e,a),g(a,e),d&&h(e,d)}function q(a,b){return D.get(b.prototype)===a}function r(a){var b=Object.getPrototypeOf(a),c=f(b),d=s(c);return p(b,d,a),d}function s(a){function b(b){a.call(this,b)}return b.prototype=Object.create(a.prototype),b.prototype.constructor=b,b}function t(a){return a instanceof F.EventTarget||a instanceof F.Event||a instanceof F.Range||a instanceof F.DOMImplementation||a instanceof F.CanvasRenderingContext2D||F.WebGLRenderingContext&&a instanceof F.WebGLRenderingContext}function u(a){return a instanceof N||a instanceof M||a instanceof O||a instanceof P||a instanceof L||a instanceof Q||R&&a instanceof R}function v(a){return null===a?null:(b(u(a)),a.polymerWrapper_||(a.polymerWrapper_=new(f(a))(a)))}function w(a){return null===a?null:(b(t(a)),a.impl)}function x(a){return a&&t(a)?w(a):a}function y(a){return a&&!t(a)?v(a):a}function z(a,c){null!==c&&(b(u(a)),b(void 0===c||t(c)),a.polymerWrapper_=c)}function A(a,b,c){Object.defineProperty(a.prototype,b,{get:c,configurable:!0,enumerable:!0})}function B(a,b){A(a,b,function(){return v(this.impl[b])})}function C(a,b){a.forEach(function(a){b.forEach(function(b){a.prototype[b]=function(){var a=y(this);return a[b].apply(a,arguments)}})})}var D=new WeakMap,E=new WeakMap,F=Object.create(null),G=!("securityPolicy"in document)||document.securityPolicy.allowsEval;if(G)try{var H=new Function("","return true;");G=H()}catch(I){G=!1}Object.getOwnPropertyNames(window);var J=/Firefox/.test(navigator.userAgent),K={get:function(){},set:function(){},configurable:!0,enumerable:!0},L=window.DOMImplementation,M=window.Event,N=window.Node,O=window.Window,P=window.Range,Q=window.CanvasRenderingContext2D,R=window.WebGLRenderingContext;a.assert=b,a.constructorTable=D,a.defineGetter=A,a.defineWrapGetter=B,a.forwardMethodsToWrapper=C,a.isWrapperFor=q,a.mixin=c,a.nativePrototypeTable=E,a.oneOf=e,a.registerObject=r,a.registerWrapper=o,a.rewrap=z,a.unwrap=w,a.unwrapIfNeeded=x,a.wrap=v,a.wrapIfNeeded=y,a.wrappers=F}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){return a instanceof O.ShadowRoot}function c(a){var b=a.localName;return"content"===b||"shadow"===b}function d(a){return!!a.shadowRoot}function e(a){var b;return a.parentNode||(b=a.defaultView)&&N(b)||null}function f(f,g,h){if(h.length)return h.shift();if(b(f))return j(f)||a.getHostForShadowRoot(f);var i=a.eventParentsTable.get(f);if(i){for(var k=1;k<i.length;k++)h[k-1]=i[k];return i[0]}if(g&&c(f)){var l=f.parentNode;if(l&&d(l))for(var m=a.getShadowTrees(l),n=j(g),k=0;k<m.length;k++)if(m[k].contains(n))return n}return e(f)}function g(a){for(var d=[],e=a,g=[],i=[];e;){var j=null;if(c(e)){j=h(d);var k=d[d.length-1]||e;d.push(k)}else d.length||d.push(e);var l=d[d.length-1];g.push({target:l,currentTarget:e}),b(e)&&d.pop(),e=f(e,j,i)}return g}function h(a){for(var b=a.length-1;b>=0;b--)if(!c(a[b]))return a[b];return null}function i(d,e){for(var g=[];d;){for(var i=[],j=e,l=void 0;j;){var n=null;if(i.length){if(c(j)&&(n=h(i),k(l))){var o=i[i.length-1];i.push(o)}}else i.push(j);if(m(j,d))return i[i.length-1];b(j)&&i.pop(),l=j,j=f(j,n,g)}d=b(d)?a.getHostForShadowRoot(d):d.parentNode}}function j(b){return a.insertionParentTable.get(b)}function k(a){return j(a)}function l(a){for(var b;b=a.parentNode;)a=b;return a}function m(a,b){return l(a)===l(b)}function n(b,c){if(b===c)return!0;if(b instanceof O.ShadowRoot){var d=a.getHostForShadowRoot(b);return n(l(d),c)}return!1}function o(){Z++}function p(){Z--}function q(b){if(!Q.get(b)){if(Q.set(b,!0),b instanceof $){if(Z)return}else a.renderAllPending();var c=N(b.target),d=N(b);return r(d,c)}}function r(a,b){var c=g(b);return"load"===a.type&&2===c.length&&c[0].target instanceof O.Document&&c.shift(),Y.set(a,c),s(a,c)&&t(a,c)&&u(a,c),U.set(a,x.NONE),S.set(a,null),a.defaultPrevented}function s(a,b){for(var c,d=b.length-1;d>0;d--){var e=b[d].target,f=b[d].currentTarget;if(e!==f&&(c=x.CAPTURING_PHASE,!v(b[d],a,c)))return!1}return!0}function t(a,b){var c=x.AT_TARGET;return v(b[0],a,c)}function u(a,b){for(var c,d=a.bubbles,e=1;e<b.length;e++){var f=b[e].target,g=b[e].currentTarget;if(f===g)c=x.AT_TARGET;else{if(!d||W.get(a))continue;c=x.BUBBLING_PHASE}if(!v(b[e],a,c))return}}function v(a,b,c){var d=a.target,e=a.currentTarget,f=P.get(e);if(!f)return!0;if("relatedTarget"in b){var g=M(b);if(g.relatedTarget){var h=N(g.relatedTarget),j=i(e,h);if(j===d)return!0;T.set(b,j)}}U.set(b,c);var k=b.type,l=!1;R.set(b,d),S.set(b,e);for(var m=0;m<f.length;m++){var n=f[m];if(n.removed)l=!0;else if(!(n.type!==k||!n.capture&&c===x.CAPTURING_PHASE||n.capture&&c===x.BUBBLING_PHASE))try{if("function"==typeof n.handler?n.handler.call(e,b):n.handler.handleEvent(b),W.get(b))return!1}catch(o){window.onerror?window.onerror(o.message):console.error(o,o.stack)}}if(l){var p=f.slice();f.length=0;for(var m=0;m<p.length;m++)p[m].removed||f.push(p[m])}return!V.get(b)}function w(a,b,c){this.type=a,this.handler=b,this.capture=Boolean(c)}function x(a,b){return a instanceof _?(this.impl=a,void 0):N(B(_,"Event",a,b))}function y(a){return a&&a.relatedTarget?Object.create(a,{relatedTarget:{value:M(a.relatedTarget)}}):a}function z(a,b,c){var d=window[a],e=function(b,c){return b instanceof d?(this.impl=b,void 0):N(B(d,a,b,c))};return e.prototype=Object.create(b.prototype),c&&K(e.prototype,c),d&&(d.prototype["init"+a]?L(d,e,document.createEvent(a)):L(d,e,new d("temp"))),e}function A(a,b){return function(){arguments[b]=M(arguments[b]);var c=M(this);c[a].apply(c,arguments)}}function B(a,b,c,d){if(jb)return new a(c,y(d));var e=M(document.createEvent(b)),f=ib[b],g=[c];return Object.keys(f).forEach(function(a){var b=null!=d&&a in d?d[a]:f[a];"relatedTarget"===a&&(b=M(b)),g.push(b)}),e["init"+b].apply(e,g),e}function C(a){return"function"==typeof a?!0:a&&a.handleEvent}function D(a){this.impl=a}function E(b){return b instanceof O.ShadowRoot&&(b=a.getHostForShadowRoot(b)),M(b)}function F(a){J(a,mb)}function G(b,c,d,e){a.renderAllPending();for(var f=N(nb.call(c.impl,d,e)),h=g(f,this),i=0;i<h.length;i++){var j=h[i];if(j.currentTarget===b)return j.target}return null}function H(a){return function(){var b=X.get(this);return b&&b[a]&&b[a].value||null}}function I(a){var b=a.slice(2);return function(c){var d=X.get(this);d||(d=Object.create(null),X.set(this,d));var e=d[a];if(e&&this.removeEventListener(b,e.wrapped,!1),"function"==typeof c){var f=function(b){var d=c.call(this,b);d===!1?b.preventDefault():"onbeforeunload"===a&&"string"==typeof d&&(b.returnValue=d)};this.addEventListener(b,f,!1),d[a]={value:c,wrapped:f}}}}var J=a.forwardMethodsToWrapper,K=a.mixin,L=a.registerWrapper,M=a.unwrap,N=a.wrap,O=a.wrappers;new WeakMap;var P=new WeakMap,Q=new WeakMap,R=new WeakMap,S=new WeakMap,T=new WeakMap,U=new WeakMap,V=new WeakMap,W=new WeakMap,X=new WeakMap,Y=new WeakMap,Z=0,$=window.MutationEvent;w.prototype={equals:function(a){return this.handler===a.handler&&this.type===a.type&&this.capture===a.capture},get removed(){return null===this.handler},remove:function(){this.handler=null}};var _=window.Event;x.prototype={get target(){return R.get(this)},get currentTarget(){return S.get(this)},get eventPhase(){return U.get(this)},get path(){var a=new O.NodeList,b=Y.get(this);if(b){for(var c=0,d=b.length-1,e=l(S.get(this)),f=0;d>=f;f++){var g=b[f].currentTarget,h=l(g);n(e,h)&&(f!==d||g instanceof O.Node)&&(a[c++]=g)}a.length=c}return a},stopPropagation:function(){V.set(this,!0)},stopImmediatePropagation:function(){V.set(this,!0),W.set(this,!0)}},L(_,x,document.createEvent("Event"));var ab=z("UIEvent",x),bb=z("CustomEvent",x),cb={get relatedTarget(){return T.get(this)||N(M(this).relatedTarget)}},db=K({initMouseEvent:A("initMouseEvent",14)},cb),eb=K({initFocusEvent:A("initFocusEvent",5)},cb),fb=z("MouseEvent",ab,db),gb=z("FocusEvent",ab,eb),hb=z("MutationEvent",x,{initMutationEvent:A("initMutationEvent",3),get relatedNode(){return N(this.impl.relatedNode)}}),ib=Object.create(null),jb=function(){try{new window.MouseEvent("click")}catch(a){return!1}return!0}();if(!jb){var kb=function(a,b,c){if(c){var d=ib[c];b=K(K({},d),b)}ib[a]=b};kb("Event",{bubbles:!1,cancelable:!1}),kb("CustomEvent",{detail:null},"Event"),kb("UIEvent",{view:null,detail:0},"Event"),kb("MouseEvent",{screenX:0,screenY:0,clientX:0,clientY:0,ctrlKey:!1,altKey:!1,shiftKey:!1,metaKey:!1,button:0,relatedTarget:null},"UIEvent"),kb("FocusEvent",{relatedTarget:null},"UIEvent")}var lb=window.EventTarget,mb=["addEventListener","removeEventListener","dispatchEvent"];[Node,Window].forEach(function(a){var b=a.prototype;mb.forEach(function(a){Object.defineProperty(b,a+"_",{value:b[a]})})}),D.prototype={addEventListener:function(a,b,c){if(C(b)){var d=new w(a,b,c),e=P.get(this);if(e){for(var f=0;f<e.length;f++)if(d.equals(e[f]))return}else e=[],P.set(this,e);e.push(d);var g=E(this);g.addEventListener_(a,q,!0)}},removeEventListener:function(a,b,c){c=Boolean(c);var d=P.get(this);if(d){for(var e=0,f=!1,g=0;g<d.length;g++)d[g].type===a&&d[g].capture===c&&(e++,d[g].handler===b&&(f=!0,d[g].remove()));if(f&&1===e){var h=E(this);h.removeEventListener_(a,q,!0)}}},dispatchEvent:function(a){var b=E(this),c=M(a);return Q.set(c,!1),b.dispatchEvent_(c)}},lb&&L(lb,D);var nb=document.elementFromPoint;a.adjustRelatedTarget=i,a.elementFromPoint=G,a.getEventHandlerGetter=H,a.getEventHandlerSetter=I,a.muteMutationEvents=o,a.unmuteMutationEvents=p,a.wrapEventTargetMethods=F,a.wrappers.CustomEvent=bb,a.wrappers.Event=x,a.wrappers.EventTarget=D,a.wrappers.FocusEvent=gb,a.wrappers.MouseEvent=fb,a.wrappers.MutationEvent=hb,a.wrappers.UIEvent=ab}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a,b){Object.defineProperty(a,b,{enumerable:!1})}function c(){this.length=0,b(this,"length")}function d(a){if(null==a)return a;for(var b=new c,d=0,e=a.length;e>d;d++)b[d]=f(a[d]);return b.length=e,b}function e(a,b){a.prototype[b]=function(){return d(this.impl[b].apply(this.impl,arguments))}}var f=a.wrap;c.prototype={item:function(a){return this[a]}},b(c.prototype,"item"),a.wrappers.NodeList=c,a.addWrapNodeListMethod=e,a.wrapNodeList=d}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){o(a instanceof k)}function c(a,b,c,d){if(!(a instanceof DocumentFragment))return a.parentNode&&a.parentNode.removeChild(a),a.parentNode_=b,a.previousSibling_=c,a.nextSibling_=d,c&&(c.nextSibling_=a),d&&(d.previousSibling_=a),[a];for(var e,f=[];e=a.firstChild;)a.removeChild(e),f.push(e),e.parentNode_=b;for(var g=0;g<f.length;g++)f[g].previousSibling_=f[g-1]||c,f[g].nextSibling_=f[g+1]||d;return c&&(c.nextSibling_=f[0]),d&&(d.previousSibling_=f[f.length-1]),f}function d(a){if(a instanceof DocumentFragment){for(var b=[],c=0,d=a.firstChild;d;d=d.nextSibling)b[c++]=d;return b}return[a]}function e(a){for(var b=0;b<a.length;b++)a[b].nodeWasAdded_()}function f(a,b){var c=a.nodeType===k.DOCUMENT_NODE?a:a.ownerDocument;c!==b.ownerDocument&&c.adoptNode(b)}function g(b,c){if(c.length){var d=b.ownerDocument;if(d!==c[0].ownerDocument)for(var e=0;e<c.length;e++)a.adoptNodeNoRemove(c[e],d)}}function h(a,b){g(a,b);var c=b.length;if(1===c)return r(b[0]);for(var d=r(a.ownerDocument.createDocumentFragment()),e=0;c>e;e++)d.appendChild(r(b[e]));return d}function i(a){if(a.invalidateShadowRenderer()){for(var b=a.firstChild;b;){o(b.parentNode===a);var c=b.nextSibling,d=r(b),e=d.parentNode;e&&y.call(e,d),b.previousSibling_=b.nextSibling_=b.parentNode_=null,b=c}a.firstChild_=a.lastChild_=null}else for(var c,f=r(a),g=f.firstChild;g;)c=g.nextSibling,y.call(f,g),g=c}function j(a){var b=a.parentNode;return b&&b.invalidateShadowRenderer()}function k(a){o(a instanceof u),l.call(this,a),this.parentNode_=void 0,this.firstChild_=void 0,this.lastChild_=void 0,this.nextSibling_=void 0,this.previousSibling_=void 0}var l=a.wrappers.EventTarget,m=a.wrappers.NodeList,n=a.defineWrapGetter,o=a.assert,p=a.mixin,q=a.registerWrapper,r=a.unwrap,s=a.wrap,t=a.wrapIfNeeded,u=window.Node,v=u.prototype.appendChild,w=u.prototype.insertBefore,x=u.prototype.replaceChild,y=u.prototype.removeChild,z=u.prototype.compareDocumentPosition;k.prototype=Object.create(l.prototype),p(k.prototype,{appendChild:function(a){b(a);var g;if(this.invalidateShadowRenderer()||j(a)){var i=this.lastChild,k=null;g=c(a,this,i,k),this.lastChild_=g[g.length-1],i||(this.firstChild_=g[0]),v.call(this.impl,h(this,g))}else g=d(a),f(this,a),v.call(this.impl,r(a));return e(g),a},insertBefore:function(a,i){if(!i)return this.appendChild(a);b(a),b(i),o(i.parentNode===this);var k;if(this.invalidateShadowRenderer()||j(a)){var l=i.previousSibling,m=i;k=c(a,this,l,m),this.firstChild===i&&(this.firstChild_=k[0]);var n=r(i),p=n.parentNode;p?w.call(p,h(this,k),n):g(this,k)}else k=d(a),f(this,a),w.call(this.impl,r(a),r(i));return e(k),a},removeChild:function(a){if(b(a),a.parentNode!==this)throw new Error("NotFoundError");var c=r(a);if(this.invalidateShadowRenderer()){var d=this.firstChild,e=this.lastChild,f=a.nextSibling,g=a.previousSibling,h=c.parentNode;h&&y.call(h,c),d===a&&(this.firstChild_=f),e===a&&(this.lastChild_=g),g&&(g.nextSibling_=f),f&&(f.previousSibling_=g),a.previousSibling_=a.nextSibling_=a.parentNode_=void 0}else y.call(this.impl,c);return a},replaceChild:function(a,g){if(b(a),b(g),g.parentNode!==this)throw new Error("NotFoundError");var i,k=r(g);if(this.invalidateShadowRenderer()||j(a)){var l=g.previousSibling,m=g.nextSibling;m===a&&(m=a.nextSibling),i=c(a,this,l,m),this.firstChild===g&&(this.firstChild_=i[0]),this.lastChild===g&&(this.lastChild_=i[i.length-1]),g.previousSibling_=g.nextSibling_=g.parentNode_=void 0,k.parentNode&&x.call(k.parentNode,h(this,i),k)}else i=d(a),f(this,a),x.call(this.impl,r(a),k);return e(i),g},nodeWasAdded_:function(){for(var a=this.firstChild;a;a=a.nextSibling)a.nodeWasAdded_()},hasChildNodes:function(){return null!==this.firstChild},get parentNode(){return void 0!==this.parentNode_?this.parentNode_:s(this.impl.parentNode)},get firstChild(){return void 0!==this.firstChild_?this.firstChild_:s(this.impl.firstChild)},get lastChild(){return void 0!==this.lastChild_?this.lastChild_:s(this.impl.lastChild)},get nextSibling(){return void 0!==this.nextSibling_?this.nextSibling_:s(this.impl.nextSibling)},get previousSibling(){return void 0!==this.previousSibling_?this.previousSibling_:s(this.impl.previousSibling)},get parentElement(){for(var a=this.parentNode;a&&a.nodeType!==k.ELEMENT_NODE;)a=a.parentNode;return a},get textContent(){for(var a="",b=this.firstChild;b;b=b.nextSibling)a+=b.textContent;return a},set textContent(a){if(this.invalidateShadowRenderer()){if(i(this),""!==a){var b=this.impl.ownerDocument.createTextNode(a);this.appendChild(b)}}else this.impl.textContent=a},get childNodes(){for(var a=new m,b=0,c=this.firstChild;c;c=c.nextSibling)a[b++]=c;return a.length=b,a},cloneNode:function(a){if(!this.invalidateShadowRenderer())return s(this.impl.cloneNode(a));var b=s(this.impl.cloneNode(!1));if(a)for(var c=this.firstChild;c;c=c.nextSibling)b.appendChild(c.cloneNode(!0));
-return b},contains:function(a){if(!a)return!1;if(a=t(a),a===this)return!0;var b=a.parentNode;return b?this.contains(b):!1},compareDocumentPosition:function(a){return z.call(this.impl,r(a))}}),n(k,"ownerDocument"),q(u,k,document.createDocumentFragment()),delete k.prototype.querySelector,delete k.prototype.querySelectorAll,k.prototype=p(Object.create(l.prototype),k.prototype),a.wrappers.Node=k}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a,c){for(var d,e=a.firstElementChild;e;){if(e.matches(c))return e;if(d=b(e,c))return d;e=e.nextElementSibling}return null}function c(a,b,d){for(var e=a.firstElementChild;e;)e.matches(b)&&(d[d.length++]=e),c(e,b,d),e=e.nextElementSibling;return d}var d={querySelector:function(a){return b(this,a)},querySelectorAll:function(a){return c(this,a,new NodeList)}},e={getElementsByTagName:function(a){return this.querySelectorAll(a)},getElementsByClassName:function(a){return this.querySelectorAll("."+a)},getElementsByTagNameNS:function(a,b){if("*"===a)return this.getElementsByTagName(b);for(var c=new NodeList,d=this.getElementsByTagName(b),e=0,f=0;e<d.length;e++)d[e].namespaceURI===a&&(c[f++]=d[e]);return c.length=f,c}};a.GetElementsByInterface=e,a.SelectorsInterface=d}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){for(;a&&a.nodeType!==Node.ELEMENT_NODE;)a=a.nextSibling;return a}function c(a){for(;a&&a.nodeType!==Node.ELEMENT_NODE;)a=a.previousSibling;return a}var d=a.wrappers.NodeList,e={get firstElementChild(){return b(this.firstChild)},get lastElementChild(){return c(this.lastChild)},get childElementCount(){for(var a=0,b=this.firstElementChild;b;b=b.nextElementSibling)a++;return a},get children(){for(var a=new d,b=0,c=this.firstElementChild;c;c=c.nextElementSibling)a[b++]=c;return a.length=b,a}},f={get nextElementSibling(){return b(this.nextSibling)},get previousElementSibling(){return c(this.previousSibling)}};a.ChildNodeInterface=f,a.ParentNodeInterface=e}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){d.call(this,a)}var c=a.ChildNodeInterface,d=a.wrappers.Node,e=a.mixin,f=a.registerWrapper,g=window.CharacterData;b.prototype=Object.create(d.prototype),e(b.prototype,{get textContent(){return this.data},set textContent(a){this.data=a}}),e(b.prototype,c),f(g,b,document.createTextNode("")),a.wrappers.CharacterData=b}(this.ShadowDOMPolyfill),function(a){"use strict";function b(b,c){var d=b.parentNode;if(d&&d.shadowRoot){var e=a.getRendererForHost(d);e.dependsOnAttribute(c)&&e.invalidate()}}function c(a){g.call(this,a)}function d(a,c,d){var e=d||c;Object.defineProperty(a,c,{get:function(){return this.impl[c]},set:function(a){this.impl[c]=a,b(this,e)},configurable:!0,enumerable:!0})}var e=a.ChildNodeInterface,f=a.GetElementsByInterface,g=a.wrappers.Node,h=a.ParentNodeInterface,i=a.SelectorsInterface;a.addWrapNodeListMethod;var j=a.mixin,k=a.oneOf,l=a.registerWrapper,m=a.wrappers,n=window.Element,o=k(n.prototype,["matches","mozMatchesSelector","msMatchesSelector","webkitMatchesSelector"]),p=n.prototype[o];c.prototype=Object.create(g.prototype),j(c.prototype,{createShadowRoot:function(){var b=new m.ShadowRoot(this);this.impl.polymerShadowRoot_=b;var c=a.getRendererForHost(this);return c.invalidate(),b},get shadowRoot(){return this.impl.polymerShadowRoot_||null},setAttribute:function(a,c){this.impl.setAttribute(a,c),b(this,a)},removeAttribute:function(a){this.impl.removeAttribute(a),b(this,a)},matches:function(a){return p.call(this.impl,a)}}),c.prototype[o]=function(a){return this.matches(a)},n.prototype.webkitCreateShadowRoot&&(c.prototype.webkitCreateShadowRoot=c.prototype.createShadowRoot),d(c.prototype,"id"),d(c.prototype,"className","class"),j(c.prototype,e),j(c.prototype,f),j(c.prototype,h),j(c.prototype,i),l(n,c),a.matchesName=o,a.wrappers.Element=c}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){switch(a){case"&":return"&";case"<":return"<";case'"':return"""}}function c(a){return a.replace(r,b)}function d(a){switch(a.nodeType){case Node.ELEMENT_NODE:for(var b,d=a.tagName.toLowerCase(),f="<"+d,g=a.attributes,h=0;b=g[h];h++)f+=" "+b.name+'="'+c(b.value)+'"';return f+=">",s[d]?f:f+e(a)+"</"+d+">";case Node.TEXT_NODE:return c(a.nodeValue);case Node.COMMENT_NODE:return"<!--"+c(a.nodeValue)+"-->";default:throw console.error(a),new Error("not implemented")}}function e(a){for(var b="",c=a.firstChild;c;c=c.nextSibling)b+=d(c);return b}function f(a,b,c){var d=c||"div";a.textContent="";var e=p(a.ownerDocument.createElement(d));e.innerHTML=b;for(var f;f=e.firstChild;)a.appendChild(q(f))}function g(a){l.call(this,a)}function h(b){return function(){return a.renderAllPending(),this.impl[b]}}function i(a){m(g,a,h(a))}function j(b){Object.defineProperty(g.prototype,b,{get:h(b),set:function(c){a.renderAllPending(),this.impl[b]=c},configurable:!0,enumerable:!0})}function k(b){Object.defineProperty(g.prototype,b,{value:function(){return a.renderAllPending(),this.impl[b].apply(this.impl,arguments)},configurable:!0,enumerable:!0})}var l=a.wrappers.Element,m=a.defineGetter,n=a.mixin,o=a.registerWrapper,p=a.unwrap,q=a.wrap,r=/&|<|"/g,s={area:!0,base:!0,br:!0,col:!0,command:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0},t=window.HTMLElement;g.prototype=Object.create(l.prototype),n(g.prototype,{get innerHTML(){return e(this)},set innerHTML(a){this.invalidateShadowRenderer()?f(this,a,this.tagName):this.impl.innerHTML=a},get outerHTML(){return d(this)},set outerHTML(a){var b=this.parentNode;b&&(b.invalidateShadowRenderer(),this.impl.outerHTML=a)}}),["clientHeight","clientLeft","clientTop","clientWidth","offsetHeight","offsetLeft","offsetTop","offsetWidth","scrollHeight","scrollWidth"].forEach(i),["scrollLeft","scrollTop"].forEach(j),["getBoundingClientRect","getClientRects","scrollIntoView"].forEach(k),o(t,g,document.createElement("b")),a.wrappers.HTMLElement=g,a.getInnerHTML=e,a.setInnerHTML=f}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){c.call(this,a)}var c=a.wrappers.HTMLElement,d=a.mixin,e=a.registerWrapper,f=a.wrap,g=window.HTMLCanvasElement;b.prototype=Object.create(c.prototype),d(b.prototype,{getContext:function(){var a=this.impl.getContext.apply(this.impl,arguments);return a&&f(a)}}),e(g,b,document.createElement("canvas")),a.wrappers.HTMLCanvasElement=b}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){c.call(this,a)}var c=a.wrappers.HTMLElement,d=a.mixin,e=a.registerWrapper,f=window.HTMLContentElement;b.prototype=Object.create(c.prototype),d(b.prototype,{get select(){return this.getAttribute("select")},set select(a){this.setAttribute("select",a)},setAttribute:function(a,b){c.prototype.setAttribute.call(this,a,b),"select"===String(a).toLowerCase()&&this.invalidateShadowRenderer(!0)}}),f&&e(f,b),a.wrappers.HTMLContentElement=b}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){d.call(this,a)}function c(a,b){if(!(this instanceof c))throw new TypeError("DOM object constructor cannot be called as a function.");var e=f(document.createElement("img"));void 0!==a&&(e.width=a),void 0!==b&&(e.height=b),d.call(this,e),g(e,this)}var d=a.wrappers.HTMLElement,e=a.registerWrapper,f=a.unwrap,g=a.rewrap,h=window.HTMLImageElement;b.prototype=Object.create(d.prototype),e(h,b,document.createElement("img")),c.prototype=b.prototype,a.wrappers.HTMLImageElement=b,a.wrappers.Image=c}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){c.call(this,a)}var c=a.wrappers.HTMLElement,d=a.mixin,e=a.registerWrapper,f=window.HTMLShadowElement;b.prototype=Object.create(c.prototype),d(b.prototype,{}),f&&e(f,b),a.wrappers.HTMLShadowElement=b}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){if(!a.defaultView)return a;var b=o.get(a);if(!b){for(b=a.implementation.createHTMLDocument("");b.lastChild;)b.removeChild(b.lastChild);o.set(a,b)}return b}function c(a){var c,d=b(a.ownerDocument),e=l(d.createDocumentFragment());for(h();c=a.firstChild;)e.appendChild(c);return k(),e}function d(a){if(e.call(this,a),!p){var b=c(a);n.set(this,m(b))}}var e=a.wrappers.HTMLElement,f=a.getInnerHTML,g=a.mixin,h=a.muteMutationEvents,i=a.registerWrapper,j=a.setInnerHTML,k=a.unmuteMutationEvents,l=a.unwrap,m=a.wrap,n=new WeakMap,o=new WeakMap,p=window.HTMLTemplateElement;d.prototype=Object.create(e.prototype),g(d.prototype,{get content(){return p?m(this.impl.content):n.get(this)},get innerHTML(){return f(this.content)},set innerHTML(a){j(this.content,a)}}),p&&i(p,d),a.wrappers.HTMLTemplateElement=d}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){switch(a.localName){case"content":return new c(a);case"shadow":return new e(a);case"template":return new f(a)}d.call(this,a)}var c=a.wrappers.HTMLContentElement,d=a.wrappers.HTMLElement,e=a.wrappers.HTMLShadowElement,f=a.wrappers.HTMLTemplateElement;a.mixin;var g=a.registerWrapper,h=window.HTMLUnknownElement;b.prototype=Object.create(d.prototype),g(h,b),a.wrappers.HTMLUnknownElement=b}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){this.impl=a}var c=a.mixin,d=a.registerWrapper,e=a.unwrap,f=a.unwrapIfNeeded,g=a.wrap,h=window.CanvasRenderingContext2D;c(b.prototype,{get canvas(){return g(this.impl.canvas)},drawImage:function(){arguments[0]=f(arguments[0]),this.impl.drawImage.apply(this.impl,arguments)},createPattern:function(){return arguments[0]=e(arguments[0]),this.impl.createPattern.apply(this.impl,arguments)}}),d(h,b),a.wrappers.CanvasRenderingContext2D=b}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){this.impl=a}var c=a.mixin,d=a.registerWrapper,e=a.unwrapIfNeeded,f=a.wrap,g=window.WebGLRenderingContext;g&&(c(b.prototype,{get canvas(){return f(this.impl.canvas)},texImage2D:function(){arguments[5]=e(arguments[5]),this.impl.texImage2D.apply(this.impl,arguments)},texSubImage2D:function(){arguments[6]=e(arguments[6]),this.impl.texSubImage2D.apply(this.impl,arguments)}}),d(g,b),a.wrappers.WebGLRenderingContext=b)}(this.ShadowDOMPolyfill),function(a){"use strict";var b=a.GetElementsByInterface,c=a.ParentNodeInterface,d=a.SelectorsInterface,e=a.mixin,f=a.registerObject,g=f(document.createDocumentFragment());e(g.prototype,c),e(g.prototype,d),e(g.prototype,b);var h=f(document.createTextNode("")),i=f(document.createComment(""));a.wrappers.Comment=i,a.wrappers.DocumentFragment=g,a.wrappers.Text=h}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){var b=i(a.impl.ownerDocument.createDocumentFragment());c.call(this,b),g(b,this);var d=a.shadowRoot;k.set(this,d),j.set(this,a)}var c=a.wrappers.DocumentFragment,d=a.elementFromPoint,e=a.getInnerHTML,f=a.mixin,g=a.rewrap,h=a.setInnerHTML,i=a.unwrap,j=new WeakMap,k=new WeakMap;b.prototype=Object.create(c.prototype),f(b.prototype,{get innerHTML(){return e(this)},set innerHTML(a){h(this,a),this.invalidateShadowRenderer()},get olderShadowRoot(){return k.get(this)||null},invalidateShadowRenderer:function(){return j.get(this).invalidateShadowRenderer()},elementFromPoint:function(a,b){return d(this,this.ownerDocument,a,b)},getElementById:function(a){return this.querySelector("#"+a)}}),a.wrappers.ShadowRoot=b,a.getHostForShadowRoot=function(a){return j.get(a)}}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){a.previousSibling_=a.previousSibling,a.nextSibling_=a.nextSibling,a.parentNode_=a.parentNode}function c(a,c,e){var f=G(a),g=G(c),h=e?G(e):null;if(d(c),b(c),e)a.firstChild===e&&(a.firstChild_=e),e.previousSibling_=e.previousSibling;else{a.lastChild_=a.lastChild,a.lastChild===a.firstChild&&(a.firstChild_=a.firstChild);var i=H(f.lastChild);i&&(i.nextSibling_=i.nextSibling)}f.insertBefore(g,h)}function d(a){var c=G(a),d=c.parentNode;if(d){var e=H(d);b(a),a.previousSibling&&(a.previousSibling.nextSibling_=a),a.nextSibling&&(a.nextSibling.previousSibling_=a),e.lastChild===a&&(e.lastChild_=a),e.firstChild===a&&(e.firstChild_=a),d.removeChild(c)}}function e(a,b){g(b).push(a),x(a,b);var c=J.get(a);c||J.set(a,c=[]),c.push(b)}function f(a){I.set(a,[])}function g(a){return I.get(a)}function h(a){for(var b=[],c=0,d=a.firstChild;d;d=d.nextSibling)b[c++]=d;return b}function i(a,b,c){for(var d=a.firstChild;d;d=d.nextSibling)if(b(d)){if(c(d)===!1)return}else i(d,b,c)}function j(a,b){var c=b.getAttribute("select");if(!c)return!0;if(c=c.trim(),!c)return!0;if(!(a instanceof y))return!1;if(!M.test(c))return!1;if(":"===c[0]&&!N.test(c))return!1;try{return a.matches(c)}catch(d){return!1}}function k(){for(var a=0;a<P.length;a++)P[a].render();P=[]}function l(){F=null,k()}function m(a){var b=L.get(a);return b||(b=new q(a),L.set(a,b)),b}function n(a){for(;a;a=a.parentNode)if(a instanceof C)return a;return null}function o(a){return m(D(a))}function p(a){this.skip=!1,this.node=a,this.childNodes=[]}function q(a){this.host=a,this.dirty=!1,this.invalidateAttributes(),this.associateNode(a)}function r(a){return a instanceof z}function s(a){return a instanceof z}function t(a){return a instanceof A}function u(a){return a instanceof A}function v(a){return a.shadowRoot}function w(a){for(var b=[],c=a.shadowRoot;c;c=c.olderShadowRoot)b.push(c);return b}function x(a,b){K.set(a,b)}var y=a.wrappers.Element,z=a.wrappers.HTMLContentElement,A=a.wrappers.HTMLShadowElement,B=a.wrappers.Node,C=a.wrappers.ShadowRoot;a.assert;var D=a.getHostForShadowRoot;a.mixin,a.muteMutationEvents;var E=a.oneOf;a.unmuteMutationEvents;var F,G=a.unwrap,H=a.wrap,I=new WeakMap,J=new WeakMap,K=new WeakMap,L=new WeakMap,M=/^[*.:#[a-zA-Z_|]/,N=new RegExp("^:("+["link","visited","target","enabled","disabled","checked","indeterminate","nth-child","nth-last-child","nth-of-type","nth-last-of-type","first-child","last-child","first-of-type","last-of-type","only-of-type"].join("|")+")"),O=E(window,["requestAnimationFrame","mozRequestAnimationFrame","webkitRequestAnimationFrame","setTimeout"]),P=[],Q=new ArraySplice;Q.equals=function(a,b){return G(a.node)===b},p.prototype={append:function(a){var b=new p(a);return this.childNodes.push(b),b},sync:function(a){if(!this.skip){for(var b=this.node,e=this.childNodes,f=h(G(b)),g=a||new WeakMap,i=Q.calculateSplices(e,f),j=0,k=0,l=0,m=0;m<i.length;m++){for(var n=i[m];l<n.index;l++)k++,e[j++].sync(g);for(var o=n.removed.length,p=0;o>p;p++){var q=H(f[k++]);g.get(q)||d(q)}for(var r=n.addedCount,s=f[k]&&H(f[k]),p=0;r>p;p++){var t=e[j++],u=t.node;c(b,u,s),g.set(u,!0),t.sync(g)}l+=r}for(var m=l;m<e.length;m++)e[m].sync(g)}}},q.prototype={render:function(a){if(this.dirty){this.invalidateAttributes(),this.treeComposition();var b=this.host,c=b.shadowRoot;this.associateNode(b);for(var d=!e,e=a||new p(b),f=c.firstChild;f;f=f.nextSibling)this.renderNode(c,e,f,!1);d&&e.sync(),this.dirty=!1}},invalidate:function(){if(!this.dirty){if(this.dirty=!0,P.push(this),F)return;F=window[O](l,0)}},renderNode:function(a,b,c,d){if(v(c)){b=b.append(c);var e=m(c);e.dirty=!0,e.render(b)}else r(c)?this.renderInsertionPoint(a,b,c,d):t(c)?this.renderShadowInsertionPoint(a,b,c):this.renderAsAnyDomTree(a,b,c,d)},renderAsAnyDomTree:function(a,b,c,d){if(b=b.append(c),v(c)){var e=m(c);b.skip=!e.dirty,e.render(b)}else for(var f=c.firstChild;f;f=f.nextSibling)this.renderNode(a,b,f,d)},renderInsertionPoint:function(a,b,c,d){var e=g(c);if(e.length){this.associateNode(c);for(var f=0;f<e.length;f++){var h=e[f];r(h)&&d?this.renderInsertionPoint(a,b,h,d):this.renderAsAnyDomTree(a,b,h,d)}}else this.renderFallbackContent(a,b,c);this.associateNode(c.parentNode)},renderShadowInsertionPoint:function(a,b,c){var d=a.olderShadowRoot;if(d){x(d,c),this.associateNode(c.parentNode);for(var e=d.firstChild;e;e=e.nextSibling)this.renderNode(d,b,e,!0)}else this.renderFallbackContent(a,b,c)},renderFallbackContent:function(a,b,c){this.associateNode(c),this.associateNode(c.parentNode);for(var d=c.firstChild;d;d=d.nextSibling)this.renderAsAnyDomTree(a,b,d,!1)},invalidateAttributes:function(){this.attributes=Object.create(null)},updateDependentAttributes:function(a){if(a){var b=this.attributes;/\.\w+/.test(a)&&(b["class"]=!0),/#\w+/.test(a)&&(b.id=!0),a.replace(/\[\s*([^\s=\|~\]]+)/g,function(a,c){b[c]=!0})}},dependsOnAttribute:function(a){return this.attributes[a]},distribute:function(a,b){var c=this;i(a,s,function(a){f(a),c.updateDependentAttributes(a.getAttribute("select"));for(var d=0;d<b.length;d++){var g=b[d];void 0!==g&&j(g,a)&&(e(g,a),b[d]=void 0)}})},treeComposition:function(){for(var a=this.host,b=a.shadowRoot,c=[],d=a.firstChild;d;d=d.nextSibling)if(r(d)){var e=g(d);e&&e.length||(e=h(d)),c.push.apply(c,e)}else c.push(d);for(var f,j;b;){if(f=void 0,i(b,u,function(a){return f=a,!1}),j=f,this.distribute(b,c),j){var k=b.olderShadowRoot;if(k){b=k,x(b,j);continue}break}break}},associateNode:function(a){a.impl.polymerShadowRenderer_=this}},B.prototype.invalidateShadowRenderer=function(){var a=this.impl.polymerShadowRenderer_;return a?(a.invalidate(),!0):!1},z.prototype.getDistributedNodes=function(){return k(),g(this)},A.prototype.nodeWasAdded_=z.prototype.nodeWasAdded_=function(){this.invalidateShadowRenderer();var a,b=n(this);b&&(a=o(b)),this.impl.polymerShadowRenderer_=a,a&&a.invalidate()},a.eventParentsTable=J,a.getRendererForHost=m,a.getShadowTrees=w,a.insertionParentTable=K,a.renderAllPending=k,a.visual={insertBefore:c,remove:d}}(this.ShadowDOMPolyfill),function(a){"use strict";function b(b){if(window[b]){d(!a.wrappers[b]);var i=function(a){c.call(this,a)};i.prototype=Object.create(c.prototype),e(i.prototype,{get form(){return h(g(this).form)}}),f(window[b],i,document.createElement(b.slice(4,-7))),a.wrappers[b]=i}}var c=a.wrappers.HTMLElement,d=a.assert,e=a.mixin,f=a.registerWrapper,g=a.unwrap,h=a.wrap,i=["HTMLButtonElement","HTMLFieldSetElement","HTMLInputElement","HTMLKeygenElement","HTMLLabelElement","HTMLLegendElement","HTMLObjectElement","HTMLOptionElement","HTMLOutputElement","HTMLSelectElement","HTMLTextAreaElement"];i.forEach(b)}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){k.call(this,a)}function c(a){var c=document[a];b.prototype[a]=function(){return v(c.apply(this.impl,arguments))}}function d(a,b){y.call(b.impl,u(a)),e(a,b)}function e(a,b){a.shadowRoot&&b.adoptNode(a.shadowRoot),a instanceof n&&f(a,b);for(var c=a.firstChild;c;c=c.nextSibling)e(c,b)}function f(a,b){var c=a.olderShadowRoot;c&&b.adoptNode(c)}function g(a){this.impl=a}function h(a,b){var c=document.implementation[b];a.prototype[b]=function(){return v(c.apply(this.impl,arguments))}}function i(a,b){var c=document.implementation[b];a.prototype[b]=function(){return c.apply(this.impl,arguments)}}var j=a.GetElementsByInterface,k=a.wrappers.Node,l=a.ParentNodeInterface,m=a.SelectorsInterface,n=a.wrappers.ShadowRoot,o=a.defineWrapGetter,p=a.elementFromPoint,q=a.forwardMethodsToWrapper,r=a.matchesName,s=a.mixin,t=a.registerWrapper,u=a.unwrap,v=a.wrap,w=a.wrapEventTargetMethods;a.wrapNodeList;var x=new WeakMap;b.prototype=Object.create(k.prototype),o(b,"documentElement"),o(b,"body"),o(b,"head"),["createComment","createDocumentFragment","createElement","createElementNS","createEvent","createEventNS","createRange","createTextNode","getElementById"].forEach(c);var y=document.adoptNode;if(s(b.prototype,{adoptNode:function(a){return a.parentNode&&a.parentNode.removeChild(a),d(a,this),a},elementFromPoint:function(a,b){return p(this,this,a,b)}}),document.register){var z=document.register;b.prototype.register=function(b,c){function d(a){return a?(this.impl=a,void 0):document.createElement(b)}var e=c.prototype;if(a.nativePrototypeTable.get(e))throw new Error("NotSupportedError");for(var f,g=Object.getPrototypeOf(e),h=[];g&&!(f=a.nativePrototypeTable.get(g));)h.push(g),g=Object.getPrototypeOf(g);if(!f)throw new Error("NotSupportedError");for(var i=Object.create(f),j=h.length-1;j>=0;j--)i=Object.create(i);return["createdCallback","enteredViewCallback","leftViewCallback","attributeChangedCallback"].forEach(function(a){var b=e[a];b&&(i[a]=function(){b.apply(v(this),arguments)})}),z.call(u(this),b,c.extends?{prototype:i,"extends":c.extends}:{prototype:i}),d.prototype=e,d.prototype.constructor=d,a.constructorTable.set(i,d),a.nativePrototypeTable.set(e,i),d},q([window.HTMLDocument||window.Document],["register"])}q([window.HTMLBodyElement,window.HTMLDocument||window.Document,window.HTMLHeadElement,window.HTMLHtmlElement],["appendChild","compareDocumentPosition","contains","getElementsByClassName","getElementsByTagName","getElementsByTagNameNS","insertBefore","querySelector","querySelectorAll","removeChild","replaceChild",r]),q([window.HTMLDocument||window.Document],["adoptNode","contains","createComment","createDocumentFragment","createElement","createElementNS","createEvent","createEventNS","createRange","createTextNode","elementFromPoint","getElementById"]),s(b.prototype,j),s(b.prototype,l),s(b.prototype,m),s(b.prototype,{get implementation(){var a=x.get(this);return a?a:(a=new g(u(this).implementation),x.set(this,a),a)}}),t(window.Document,b,document.implementation.createHTMLDocument("")),window.HTMLDocument&&t(window.HTMLDocument,b),w([window.HTMLBodyElement,window.HTMLDocument||window.Document,window.HTMLHeadElement]),h(g,"createDocumentType"),h(g,"createDocument"),h(g,"createHTMLDocument"),i(g,"hasFeature"),t(window.DOMImplementation,g),q([window.DOMImplementation],["createDocumentType","createDocument","createHTMLDocument","hasFeature"]),a.adoptNodeNoRemove=d,a.wrappers.DOMImplementation=g,a.wrappers.Document=b}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){c.call(this,a)}var c=a.wrappers.EventTarget,d=a.mixin,e=a.registerWrapper,f=a.unwrap,g=a.unwrapIfNeeded,h=a.wrap,i=a.renderAllPending,j=window.Window;b.prototype=Object.create(c.prototype);var k=window.getComputedStyle;j.prototype.getComputedStyle=function(a,b){return i(),k.call(this||window,g(a),b)},["addEventListener","removeEventListener","dispatchEvent"].forEach(function(a){j.prototype[a]=function(){var b=h(this||window);return b[a].apply(b,arguments)}}),d(b.prototype,{getComputedStyle:function(a,b){return k.call(f(this),g(a),b)}}),e(j,b),a.wrappers.Window=b}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){this.impl=a}function c(a){return new b(a)}function d(a){return a.map(c)}function e(a){var b=this;this.impl=new k(function(c){a.call(b,d(c),b)})}var f=a.defineGetter,g=a.defineWrapGetter,h=a.registerWrapper,i=a.unwrapIfNeeded,j=a.wrapNodeList;a.wrappers;var k=window.MutationObserver||window.WebKitMutationObserver;if(k){var l=window.MutationRecord;b.prototype={get addedNodes(){return j(this.impl.addedNodes)},get removedNodes(){return j(this.impl.removedNodes)}},["target","previousSibling","nextSibling"].forEach(function(a){g(b,a)}),["type","attributeName","attributeNamespace","oldValue"].forEach(function(a){f(b,a,function(){return this.impl[a]})}),l&&h(l,b),window.Node,e.prototype={observe:function(a,b){this.impl.observe(i(a),b)},disconnect:function(){this.impl.disconnect()},takeRecords:function(){return d(this.impl.takeRecords())}},a.wrappers.MutationObserver=e,a.wrappers.MutationRecord=b}}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){this.impl=a}var c=a.registerWrapper,d=a.unwrap,e=a.unwrapIfNeeded,f=a.wrap,g=window.Range;b.prototype={get startContainer(){return f(this.impl.startContainer)},get endContainer(){return f(this.impl.endContainer)},get commonAncestorContainer(){return f(this.impl.commonAncestorContainer)},setStart:function(a,b){this.impl.setStart(e(a),b)},setEnd:function(a,b){this.impl.setEnd(e(a),b)},setStartBefore:function(a){this.impl.setStartBefore(e(a))},setStartAfter:function(a){this.impl.setStartAfter(e(a))},setEndBefore:function(a){this.impl.setEndBefore(e(a))},setEndAfter:function(a){this.impl.setEndAfter(e(a))},selectNode:function(a){this.impl.selectNode(e(a))},selectNodeContents:function(a){this.impl.selectNodeContents(e(a))},compareBoundaryPoints:function(a,b){return this.impl.compareBoundaryPoints(a,d(b))},extractContents:function(){return f(this.impl.extractContents())},cloneContents:function(){return f(this.impl.cloneContents())},insertNode:function(a){this.impl.insertNode(e(a))},surroundContents:function(a){this.impl.surroundContents(e(a))},cloneRange:function(){return f(this.impl.cloneRange())},isPointInRange:function(a,b){return this.impl.isPointInRange(e(a),b)},comparePoint:function(a,b){return this.impl.comparePoint(e(a),b)},intersectsNode:function(a){return this.impl.intersectsNode(e(a))}},g.prototype.createContextualFragment&&(b.prototype.createContextualFragment=function(a){return f(this.impl.createContextualFragment(a))}),c(window.Range,b),a.wrappers.Range=b}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){var b=c[a],d=window[b];if(d){var e=document.createElement(a),f=e.constructor;window[b]=f}}a.isWrapperFor;var c={a:"HTMLAnchorElement",applet:"HTMLAppletElement",area:"HTMLAreaElement",audio:"HTMLAudioElement",br:"HTMLBRElement",base:"HTMLBaseElement",body:"HTMLBodyElement",button:"HTMLButtonElement",dl:"HTMLDListElement",datalist:"HTMLDataListElement",data:"HTMLDataElement",dir:"HTMLDirectoryElement",div:"HTMLDivElement",embed:"HTMLEmbedElement",fieldset:"HTMLFieldSetElement",font:"HTMLFontElement",form:"HTMLFormElement",frame:"HTMLFrameElement",frameset:"HTMLFrameSetElement",hr:"HTMLHRElement",head:"HTMLHeadElement",h1:"HTMLHeadingElement",html:"HTMLHtmlElement",iframe:"HTMLIFrameElement",input:"HTMLInputElement",li:"HTMLLIElement",label:"HTMLLabelElement",legend:"HTMLLegendElement",link:"HTMLLinkElement",map:"HTMLMapElement",marquee:"HTMLMarqueeElement",menu:"HTMLMenuElement",menuitem:"HTMLMenuItemElement",meta:"HTMLMetaElement",meter:"HTMLMeterElement",del:"HTMLModElement",ol:"HTMLOListElement",object:"HTMLObjectElement",optgroup:"HTMLOptGroupElement",option:"HTMLOptionElement",output:"HTMLOutputElement",p:"HTMLParagraphElement",param:"HTMLParamElement",pre:"HTMLPreElement",progress:"HTMLProgressElement",q:"HTMLQuoteElement",script:"HTMLScriptElement",select:"HTMLSelectElement",source:"HTMLSourceElement",span:"HTMLSpanElement",style:"HTMLStyleElement",time:"HTMLTimeElement",caption:"HTMLTableCaptionElement",col:"HTMLTableColElement",table:"HTMLTableElement",tr:"HTMLTableRowElement",thead:"HTMLTableSectionElement",tbody:"HTMLTableSectionElement",textarea:"HTMLTextAreaElement",track:"HTMLTrackElement",title:"HTMLTitleElement",ul:"HTMLUListElement",video:"HTMLVideoElement"};Object.keys(c).forEach(b),Object.getOwnPropertyNames(a.wrappers).forEach(function(b){window[b]=a.wrappers[b]}),a.knownElements=c}(this.ShadowDOMPolyfill),function(){var a=window.ShadowDOMPolyfill;a.wrap,Object.defineProperties(HTMLElement.prototype,{webkitShadowRoot:{get:function(){return this.shadowRoot}}}),HTMLElement.prototype.webkitCreateShadowRoot=HTMLElement.prototype.createShadowRoot,window.dartExperimentalFixupGetTag=function(b){function c(a){if(a instanceof d)return"NodeList";if(a instanceof e)return"ShadowRoot";if(window.MutationRecord&&a instanceof MutationRecord)return"MutationRecord";if(window.MutationObserver&&a instanceof MutationObserver)return"MutationObserver";if(a instanceof HTMLTemplateElement)return"HTMLTemplateElement";var c=f(a);if(a!==c){var g=a.constructor;if(g===c.constructor){var h=g._ShadowDOMPolyfill$cacheTag_;return h||(h=Object.prototype.toString.call(c),h=h.substring(8,h.length-1),g._ShadowDOMPolyfill$cacheTag_=h),h}a=c}return b(a)}var d=a.wrappers.NodeList,e=a.wrappers.ShadowRoot,f=a.unwrapIfNeeded;return c}}();var Platform={};!function(a){function b(a,b){var c="";return Array.prototype.forEach.call(a,function(a){c+=a.textContent+"\n\n"}),b||(c=c.replace(n,"")),c}function c(a){var b=document.createElement("style");return b.textContent=a,b}function d(a){var b=c(a);document.head.appendChild(b);var d=b.sheet.cssRules;return b.parentNode.removeChild(b),d}function e(a){for(var b=0,c=[];b<a.length;b++)c.push(a[b].cssText);return c.join("\n\n")}function f(a){a&&g().appendChild(document.createTextNode(a))}function g(){return h||(h=document.createElement("style"),h.setAttribute("ShadowCSSShim","")),h}var h,i={strictStyling:!1,registry:{},shimStyling:function(a,b,d){var e=this.isTypeExtension(d),g=this.registerDefinition(a,b,d);this.strictStyling&&this.applyScopeToContent(a,b),this.insertPolyfillDirectives(g.rootStyles),this.insertPolyfillRules(g.rootStyles);var h=this.stylesToShimmedCssText(g.scopeStyles,b,e);h+=this.extractPolyfillUnscopedRules(g.rootStyles),g.shimmedStyle=c(h),a&&(a.shimmedStyle=g.shimmedStyle);for(var i,j=0,k=g.rootStyles.length;k>j&&(i=g.rootStyles[j]);j++)i.parentNode.removeChild(i);f(h)},registerDefinition:function(a,b,c){var d=this.registry[b]={root:a,name:b,extendsName:c},e=a?a.querySelectorAll("style"):[];e=e?Array.prototype.slice.call(e,0):[],d.rootStyles=e,d.scopeStyles=d.rootStyles;var f=this.registry[d.extendsName];return!f||a&&!a.querySelector("shadow")||(d.scopeStyles=f.scopeStyles.concat(d.scopeStyles)),d},isTypeExtension:function(a){return a&&a.indexOf("-")<0},applyScopeToContent:function(a,b){a&&(Array.prototype.forEach.call(a.querySelectorAll("*"),function(a){a.setAttribute(b,"")}),Array.prototype.forEach.call(a.querySelectorAll("template"),function(a){this.applyScopeToContent(a.content,b)},this))},insertPolyfillDirectives:function(a){a&&Array.prototype.forEach.call(a,function(a){a.textContent=this.insertPolyfillDirectivesInCssText(a.textContent)},this)},insertPolyfillDirectivesInCssText:function(a){return a.replace(o,function(a,b){return b.slice(0,-2)+"{"})},insertPolyfillRules:function(a){a&&Array.prototype.forEach.call(a,function(a){a.textContent=this.insertPolyfillRulesInCssText(a.textContent)},this)},insertPolyfillRulesInCssText:function(a){return a.replace(p,function(a,b){return b.slice(0,-1)})},extractPolyfillUnscopedRules:function(a){var b="";return a&&Array.prototype.forEach.call(a,function(a){b+=this.extractPolyfillUnscopedRulesFromCssText(a.textContent)+"\n\n"},this),b},extractPolyfillUnscopedRulesFromCssText:function(a){for(var b,c="";b=q.exec(a);)c+=b[1].slice(0,-1)+"\n\n";return c},stylesToShimmedCssText:function(a,b,c){return this.shimAtHost(a,b,c)+this.shimScoping(a,b,c)},shimAtHost:function(a,b,c){return a?this.convertAtHostStyles(a,b,c):void 0},convertAtHostStyles:function(a,c,f){var g=b(a),h=this;return g=g.replace(j,function(a,b){return h.scopeHostCss(b,c,f)}),g=e(this.findAtHostRules(d(g),new RegExp("^"+c+u,"m")))},scopeHostCss:function(a,b,c){var d=this;return a.replace(k,function(a,e,f){return d.scopeHostSelector(e,b,c)+" "+f+"\n "})},scopeHostSelector:function(a,b,c){var d=[],e=a.split(","),f="[is="+b+"]";return e.forEach(function(a){a=a.trim(),a.match(l)?a=a.replace(l,c?f+"$1$3":b+"$1$3"):a.match(m)&&(a=c?f+a:b+a),d.push(a)},this),d.join(", ")},findAtHostRules:function(a,b){return Array.prototype.filter.call(a,this.isHostRule.bind(this,b))},isHostRule:function(a,b){return b.selectorText&&b.selectorText.match(a)||b.cssRules&&this.findAtHostRules(b.cssRules,a).length||b.type==CSSRule.WEBKIT_KEYFRAMES_RULE},shimScoping:function(a,b,c){return a?this.convertScopedStyles(a,b,c):void 0},convertScopedStyles:function(a,c,e){var f=b(a).replace(j,"");f=this.insertPolyfillHostInCssText(f),f=this.convertColonHost(f),f=this.convertPseudos(f),f=this.convertParts(f),f=this.convertCombinators(f);var g=d(f);return f=this.scopeRules(g,c,e)},convertPseudos:function(a){return a.replace(r," [pseudo=$1]")},convertParts:function(a){return a.replace(s," [part=$1]")},convertColonHost:function(a){return a.replace(t,function(a,b,c,d){return c?y+c+d+", "+c+" "+b+d:b+d})},convertCombinators:function(a){return a.replace("^^"," ").replace("^"," ")},scopeRules:function(a,b,c){var d="";return Array.prototype.forEach.call(a,function(a){a.selectorText&&a.style&&a.style.cssText?(d+=this.scopeSelector(a.selectorText,b,c,this.strictStyling)+" {\n ",d+=this.propertiesFromRule(a)+"\n}\n\n"):a.media?(d+="@media "+a.media.mediaText+" {\n",d+=this.scopeRules(a.cssRules,b),d+="\n}\n\n"):a.cssText&&(d+=a.cssText+"\n\n")},this),d},scopeSelector:function(a,b,c,d){var e=[],f=a.split(",");return f.forEach(function(a){a=a.trim(),this.selectorNeedsScoping(a,b,c)&&(a=d?this.applyStrictSelectorScope(a,b):this.applySimpleSelectorScope(a,b,c)),e.push(a)},this),e.join(", ")
-},selectorNeedsScoping:function(a,b,c){var d=c?b:"\\[is="+b+"\\]",e=new RegExp("^("+d+")"+u,"m");return!a.match(e)},applySimpleSelectorScope:function(a,b,c){var d=c?"[is="+b+"]":b;return a.match(z)?(a=a.replace(y,d),a.replace(z,d+" ")):d+" "+a},applyStrictSelectorScope:function(a,b){var c=[" ",">","+","~"],d=a,e="["+b+"]";return c.forEach(function(a){var b=d.split(a);d=b.map(function(a){var b=a.trim().replace(z,"");return b&&c.indexOf(b)<0&&b.indexOf(e)<0&&(a=b.replace(/([^:]*)(:*)(.*)/,"$1"+e+"$2$3")),a}).join(a)}),d},insertPolyfillHostInCssText:function(a){return a.replace(v,x).replace(w,x)},propertiesFromRule:function(a){var b=a.style.cssText;return a.style.content&&!a.style.content.match(/['"]+/)&&(b="content: '"+a.style.content+"';\n"+a.style.cssText.replace(/content:[^;]*;/g,"")),b}},j=/@host[^{]*{(([^}]*?{[^{]*?}[\s\S]*?)+)}/gim,k=/([^{]*)({[\s\S]*?})/gim,l=/(.*)((?:\*)|(?:\:scope))(.*)/,m=/^[.\[:]/,n=/\/\*[^*]*\*+([^/*][^*]*\*+)*\//gim,o=/\/\*\s*@polyfill ([^*]*\*+([^/*][^*]*\*+)*\/)([^{]*?){/gim,p=/\/\*\s@polyfill-rule([^*]*\*+([^/*][^*]*\*+)*)\//gim,q=/\/\*\s@polyfill-unscoped-rule([^*]*\*+([^/*][^*]*\*+)*)\//gim,r=/::(x-[^\s{,(]*)/gim,s=/::part\(([^)]*)\)/gim,t=/(-host)(?:\(([^)]*)\))?([^,{]*)/gim,u="([>\\s~+[.,{:][\\s\\S]*)?$",v=/@host/gim,w=/\:host/gim,x="-host",y="-host-no-combinator",z=/-host/gim;if(window.ShadowDOMPolyfill){f("style { display: none !important; }\n");var A=document.querySelector("head");A.insertBefore(g(),A.childNodes[0])}a.ShadowCSS=i}(window.Platform)}
\ No newline at end of file
+if(!HTMLElement.prototype.createShadowRoot||window.__forceShadowDomPolyfill){!function(){Element.prototype.webkitCreateShadowRoot&&(Element.prototype.webkitCreateShadowRoot=function(){return window.ShadowDOMPolyfill.wrapIfNeeded(this).createShadowRoot()})}(),function(a){"use strict";function b(){function a(a){b=a}if("function"!=typeof Object.observe||"function"!=typeof Array.observe)return!1;var b=[],c={};if(Object.observe(c,a),c.id=1,c.id=2,delete c.id,Object.deliverChangeRecords(a),3!==b.length)return!1;if("new"==b[0].type&&"updated"==b[1].type&&"deleted"==b[2].type)F="new",G="updated",H="reconfigured",I="deleted";else if("add"!=b[0].type||"update"!=b[1].type||"delete"!=b[2].type)return console.error("Unexpected change record names for Object.observe. Using dirty-checking instead"),!1;return Object.unobserve(c,a),c=[0],Array.observe(c,a),c[1]=1,c.length=0,Object.deliverChangeRecords(a),2!=b.length?!1:b[0].type!=J||b[1].type!=J?!1:(Array.unobserve(c,a),!0)}function c(){if(a.document&&"securityPolicy"in a.document&&!a.document.securityPolicy.allowsEval)return!1;try{var b=new Function("","return true;");return b()}catch(c){return!1}}function d(a){return+a===a>>>0}function e(a){return+a}function f(a){return a===Object(a)}function g(a,b){return a===b?0!==a||1/a===1/b:M(a)&&M(b)?!0:a!==a&&b!==b}function h(a){return"string"!=typeof a?!1:(a=a.trim(),""==a?!0:"."==a[0]?!1:U.test(a))}function i(a,b){if(b!==V)throw Error("Use Path.get to retrieve path objects");return""==a.trim()?this:d(a)?(this.push(a),this):(a.split(/\s*\.\s*/).filter(function(a){return a}).forEach(function(a){this.push(a)},this),L&&!K&&this.length&&(this.getValueFrom=this.compiledGetValueFromFn()),void 0)}function j(a){if(a instanceof i)return a;null==a&&(a=""),"string"!=typeof a&&(a=String(a));var b=W[a];if(b)return b;if(!h(a))return X;var b=new i(a,V);return W[a]=b,b}function k(b){for(var c=0;Y>c&&b.check();)b.report(),c++;a.testingExposeCycleCount&&(a.dirtyCheckCycleCount=c)}function l(a){for(var b in a)return!1;return!0}function m(a){return l(a.added)&&l(a.removed)&&l(a.changed)}function n(a,b){var c={},d={},e={};for(var f in b){var g=a[f];(void 0===g||g!==b[f])&&(f in a?g!==b[f]&&(e[f]=g):d[f]=void 0)}for(var f in a)f in b||(c[f]=a[f]);return Array.isArray(a)&&a.length!==b.length&&(e.length=a.length),{added:c,removed:d,changed:e}}function o(a,b){var c=b||(Array.isArray(a)?[]:{});for(var d in a)c[d]=a[d];return Array.isArray(a)&&(c.length=a.length),c}function p(a,b,c,d){if(this.closed=!1,this.object=a,this.callback=b,this.target=c,this.token=d,this.reporting=!0,K){var e=this;this.boundInternalCallback=function(a){e.internalCallback(a)}}q(this)}function q(a){$&&(Z.push(a),p._allObserversCount++)}function r(a,b,c,d){p.call(this,a,b,c,d),this.connect(),this.sync(!0)}function s(a,b,c,d){if(!Array.isArray(a))throw Error("Provided object is not an Array");r.call(this,a,b,c,d)}function t(a){this.arr=[],this.callback=a,this.isObserved=!0}function u(a,b,c,d,e,g,h){var b=b instanceof i?b:j(b);return b&&b.length&&f(a)?(p.call(this,a,c,d,e),this.valueFn=g,this.setValueFn=h,this.path=b,this.connect(),this.sync(!0),void 0):(this.value_=b?b.getValueFrom(a):void 0,this.value=g?g(this.value_):this.value_,this.closed=!0,void 0)}function v(a,b,c,d){p.call(this,void 0,a,b,c),this.valueFn=d,this.observed=[],this.values=[],this.value=void 0,this.oldValue=void 0,this.oldValues=void 0,this.changeFlags=void 0,this.started=!1}function w(a,b){if("function"==typeof Object.observe){var c=Object.getNotifier(a);return function(d,e){var f={object:a,type:d,name:b};2===arguments.length&&(f.oldValue=e),c.notify(f)}}}function x(a,b,c){for(var d={},e={},f=0;f<b.length;f++){var g=b[f];db[g.type]?(g.name in c||(c[g.name]=g.oldValue),g.type!=G&&(g.type!=F?g.name in d?(delete d[g.name],delete c[g.name]):e[g.name]=!0:g.name in e?delete e[g.name]:d[g.name]=!0)):(console.error("Unknown changeRecord type: "+g.type),console.error(g))}for(var h in d)d[h]=a[h];for(var h in e)e[h]=void 0;var i={};for(var h in c)if(!(h in d||h in e)){var j=a[h];c[h]!==j&&(i[h]=j)}return{added:d,removed:e,changed:i}}function y(a,b,c){return{index:a,removed:b,addedCount:c}}function z(){}function A(a,b,c,d,e,f){return ib.calcSplices(a,b,c,d,e,f)}function B(a,b,c,d){return c>b||a>d?-1:b==c||d==a?0:c>a?d>b?b-c:d-c:b>d?d-a:b-a}function C(a,b,c,d){for(var e=y(b,c,d),f=!1,g=0,h=0;h<a.length;h++){var i=a[h];if(i.index+=g,!f){var j=B(e.index,e.index+e.removed.length,i.index,i.index+i.addedCount);if(j>=0){a.splice(h,1),h--,g-=i.addedCount-i.removed.length,e.addedCount+=i.addedCount-j;var k=e.removed.length+i.removed.length-j;if(e.addedCount||k){var c=i.removed;if(e.index<i.index){var l=e.removed.slice(0,i.index-e.index);Array.prototype.push.apply(l,c),c=l}if(e.index+e.removed.length>i.index+i.addedCount){var m=e.removed.slice(i.index+i.addedCount-e.index);Array.prototype.push.apply(c,m)}e.removed=c,i.index<e.index&&(e.index=i.index)}else f=!0}else if(e.index<i.index){f=!0,a.splice(h,0,e),h++;var n=e.addedCount-e.removed.length;i.index+=n,g+=n}}}f||a.push(e)}function D(a,b){for(var c=[],f=0;f<b.length;f++){var g=b[f];switch(g.type){case J:C(c,g.index,g.removed.slice(),g.addedCount);break;case F:case G:case I:if(!d(g.name))continue;var h=e(g.name);if(0>h)continue;C(c,h,[g.oldValue],1);break;default:console.error("Unexpected record type: "+JSON.stringify(g))}}return c}function E(a,b){var c=[];return D(a,b).forEach(function(b){return 1==b.addedCount&&1==b.removed.length?(b.removed[0]!==a[b.index]&&c.push(b),void 0):(c=c.concat(A(a,b.index,b.index+b.addedCount,b.removed,0,b.removed.length)),void 0)}),c}var F="add",G="update",H="reconfigure",I="delete",J="splice",K=b(),L=c(),M=a.Number.isNaN||function(b){return"number"==typeof b&&a.isNaN(b)},N="__proto__"in{}?function(a){return a}:function(a){var b=a.__proto__;if(!b)return a;var c=Object.create(b);return Object.getOwnPropertyNames(a).forEach(function(b){Object.defineProperty(c,b,Object.getOwnPropertyDescriptor(a,b))}),c},O="[$_a-zA-Z]",P="[$_a-zA-Z0-9]",Q=O+"+"+P+"*",R="(?:[0-9]|[1-9]+[0-9]+)",S="(?:"+Q+"|"+R+")",T="(?:"+S+")(?:\\s*\\.\\s*"+S+")*",U=new RegExp("^"+T+"$"),V={},W={};i.get=j,i.prototype=N({__proto__:[],valid:!0,toString:function(){return this.join(".")},getValueFrom:function(a,b){for(var c=0;c<this.length;c++){if(null==a)return;b&&b.observe(a),a=a[this[c]]}return a},compiledGetValueFromFn:function(){var a=this.map(function(a){return d(a)?'["'+a+'"]':"."+a}),b="",c="obj";b+="if (obj != null";for(var e=0;e<this.length-1;e++)this[e],c+=a[e],b+=" &&\n "+c+" != null";return b+=")\n",c+=a[e],b+=" return "+c+";\nelse\n return undefined;",new Function("obj",b)},setValueFrom:function(a,b){if(!this.length)return!1;for(var c=0;c<this.length-1;c++){if(!f(a))return!1;a=a[this[c]]}return f(a)?(a[this[c]]=b,!0):!1}});var X=new i("",V);X.valid=!1,X.getValueFrom=X.setValueFrom=function(){};var Y=1e3;p.prototype={internalCallback:function(a){this.closed||this.reporting&&this.check(a)&&(this.report(),this.testingResults&&(this.testingResults.anyChanged=!0))},close:function(){this.closed||(this.object&&"function"==typeof this.object.close&&this.object.close(),this.disconnect(),this.object=void 0,this.closed=!0)},deliver:function(a){this.closed||(K?(this.testingResults=a,Object.deliverChangeRecords(this.boundInternalCallback),this.testingResults=void 0):k(this))},report:function(){this.reporting&&(this.sync(!1),this.callback&&(this.reportArgs.push(this.token),this.invokeCallback(this.reportArgs)),this.reportArgs=void 0)},invokeCallback:function(a){try{this.callback.apply(this.target,a)}catch(b){p._errorThrownDuringCallback=!0,console.error("Exception caught during observer callback: "+(b.stack||b))}},reset:function(){this.closed||(K&&(this.reporting=!1,Object.deliverChangeRecords(this.boundInternalCallback),this.reporting=!0),this.sync(!0))}};var Z,$=!K||a.forceCollectObservers;p._allObserversCount=0,$&&(Z=[]);var _=!1,ab="function"==typeof Object.deliverAllChangeRecords;a.Platform=a.Platform||{},a.Platform.performMicrotaskCheckpoint=function(){if(!_){if(ab)return Object.deliverAllChangeRecords(),void 0;if($){_=!0;var b=0,c={};do{b++;var d=Z;Z=[],c.anyChanged=!1;for(var e=0;e<d.length;e++){var f=d[e];f.closed||(K?f.deliver(c):f.check()&&(c.anyChanged=!0,f.report()),Z.push(f))}}while(Y>b&&c.anyChanged);a.testingExposeCycleCount&&(a.dirtyCheckCycleCount=b),p._allObserversCount=Z.length,_=!1}}},$&&(a.Platform.clearObservers=function(){Z=[]}),r.prototype=N({__proto__:p.prototype,connect:function(){K&&Object.observe(this.object,this.boundInternalCallback)},sync:function(){K||(this.oldObject=o(this.object))},check:function(a){var b,c;if(K){if(!a)return!1;c={},b=x(this.object,a,c)}else c=this.oldObject,b=n(this.object,this.oldObject);return m(b)?!1:(this.reportArgs=[b.added||{},b.removed||{},b.changed||{}],this.reportArgs.push(function(a){return c[a]}),!0)},disconnect:function(){K?this.object&&Object.unobserve(this.object,this.boundInternalCallback):this.oldObject=void 0}}),s.prototype=N({__proto__:r.prototype,connect:function(){K&&Array.observe(this.object,this.boundInternalCallback)},sync:function(){K||(this.oldObject=this.object.slice())},check:function(a){var b;if(K){if(!a)return!1;b=E(this.object,a)}else b=A(this.object,0,this.object.length,this.oldObject,0,this.oldObject.length);return b&&b.length?(this.reportArgs=[b],!0):!1}}),s.applySplices=function(a,b,c){c.forEach(function(c){for(var d=[c.index,c.removed.length],e=c.index;e<c.index+c.addedCount;)d.push(b[e]),e++;Array.prototype.splice.apply(a,d)})};var bb=Object.getPrototypeOf({}),cb=Object.getPrototypeOf([]);t.prototype={reset:function(){this.isObserved=!this.isObserved},observe:function(a){if(f(a)&&a!==bb&&a!==cb){var b=this.arr.indexOf(a);b>=0&&this.arr[b+1]===this.isObserved||(0>b&&(b=this.arr.length,this.arr[b]=a,Object.observe(a,this.callback)),this.arr[b+1]=this.isObserved,this.observe(Object.getPrototypeOf(a)))}},cleanup:function(){for(var a=0,b=0,c=this.isObserved;b<this.arr.length;){var d=this.arr[b];this.arr[b+1]==c?(b>a&&(this.arr[a]=d,this.arr[a+1]=c),a+=2):Object.unobserve(d,this.callback),b+=2}this.arr.length=a}},u.prototype=N({__proto__:p.prototype,connect:function(){K&&(this.observedSet=new t(this.boundInternalCallback))},disconnect:function(){this.value=void 0,this.value_=void 0,this.observedSet&&(this.observedSet.reset(),this.observedSet.cleanup(),this.observedSet=void 0)},check:function(){return this.observedSet&&this.observedSet.reset(),this.value_=this.path.getValueFrom(this.object,this.observedSet),this.observedSet&&this.observedSet.cleanup(),g(this.value_,this.oldValue_)?!1:(this.value=this.valueFn?this.valueFn(this.value_):this.value_,this.reportArgs=[this.value,this.oldValue],!0)},sync:function(a){a&&(this.observedSet&&this.observedSet.reset(),this.value_=this.path.getValueFrom(this.object,this.observedSet),this.value=this.valueFn?this.valueFn(this.value_):this.value_,this.observedSet&&this.observedSet.cleanup()),this.oldValue_=this.value_,this.oldValue=this.value},setValue:function(a){this.path&&("function"==typeof this.setValueFn&&(a=this.setValueFn(a)),this.path.setValueFrom(this.object,a))}}),v.prototype=N({__proto__:u.prototype,addPath:function(a,b){if(this.started)throw Error("Cannot add more paths once started.");var b=b instanceof i?b:j(b),c=b?b.getValueFrom(a):void 0;this.observed.push(a,b),this.values.push(c)},start:function(){this.started=!0,this.connect(),this.sync(!0)},getValues:function(){this.observedSet&&this.observedSet.reset();for(var a=!1,b=0;b<this.observed.length;b+=2){var c=this.observed[b+1];if(c){var d=this.observed[b],e=c.getValueFrom(d,this.observedSet),f=this.values[b/2];if(!g(e,f)){if(!a&&!this.valueFn){this.oldValues=this.oldValues||[],this.changeFlags=this.changeFlags||[];for(var h=0;h<this.values.length;h++)this.oldValues[h]=this.values[h],this.changeFlags[h]=!1}this.valueFn||(this.changeFlags[b/2]=!0),this.values[b/2]=e,a=!0}}}return this.observedSet&&this.observedSet.cleanup(),a},check:function(){if(this.getValues()){if(this.valueFn){if(this.value=this.valueFn(this.values),g(this.value,this.oldValue))return!1;this.reportArgs=[this.value,this.oldValue]}else this.reportArgs=[this.values,this.oldValues,this.changeFlags,this.observed];return!0}},sync:function(a){a&&(this.getValues(),this.valueFn&&(this.value=this.valueFn(this.values))),this.valueFn&&(this.oldValue=this.value)},close:function(){if(this.observed){for(var a=0;a<this.observed.length;a+=2){var b=this.observed[a];b&&"function"==typeof b.close&&b.close()}this.observed=void 0,this.values=void 0}p.prototype.close.call(this)}});var db={};db[F]=!0,db[G]=!0,db[I]=!0,u.defineProperty=function(a,b,c){var d=c.object,e=j(c.path),f=w(a,b),g=new u(d,c.path,function(a,b){f&&f(G,b)});return Object.defineProperty(a,b,{get:function(){return e.getValueFrom(d)},set:function(a){e.setValueFrom(d,a)},configurable:!0}),{close:function(){var c=e.getValueFrom(d);f&&g.deliver(),g.close(),Object.defineProperty(a,b,{value:c,writable:!0,configurable:!0})}}};var eb=0,fb=1,gb=2,hb=3;z.prototype={calcEditDistances:function(a,b,c,d,e,f){for(var g=f-e+1,h=c-b+1,i=new Array(g),j=0;g>j;j++)i[j]=new Array(h),i[j][0]=j;for(var k=0;h>k;k++)i[0][k]=k;for(var j=1;g>j;j++)for(var k=1;h>k;k++)if(this.equals(a[b+k-1],d[e+j-1]))i[j][k]=i[j-1][k-1];else{var l=i[j-1][k]+1,m=i[j][k-1]+1;i[j][k]=m>l?l:m}return i},spliceOperationsFromEditDistances:function(a){for(var b=a.length-1,c=a[0].length-1,d=a[b][c],e=[];b>0||c>0;)if(0!=b)if(0!=c){var f,g=a[b-1][c-1],h=a[b-1][c],i=a[b][c-1];f=i>h?g>h?h:g:g>i?i:g,f==g?(g==d?e.push(eb):(e.push(fb),d=g),b--,c--):f==h?(e.push(hb),b--,d=h):(e.push(gb),c--,d=i)}else e.push(hb),b--;else e.push(gb),c--;return e.reverse(),e},calcSplices:function(a,b,c,d,e,f){var g=0,h=0,i=Math.min(c-b,f-e);if(0==b&&0==e&&(g=this.sharedPrefix(a,d,i)),c==a.length&&f==d.length&&(h=this.sharedSuffix(a,d,i-g)),b+=g,e+=g,c-=h,f-=h,0==c-b&&0==f-e)return[];if(b==c){for(var j=y(b,[],0);f>e;)j.removed.push(d[e++]);return[j]}if(e==f)return[y(b,[],c-b)];for(var k=this.spliceOperationsFromEditDistances(this.calcEditDistances(a,b,c,d,e,f)),j=void 0,l=[],m=b,n=e,o=0;o<k.length;o++)switch(k[o]){case eb:j&&(l.push(j),j=void 0),m++,n++;break;case fb:j||(j=y(m,[],0)),j.addedCount++,m++,j.removed.push(d[n]),n++;break;case gb:j||(j=y(m,[],0)),j.addedCount++,m++;break;case hb:j||(j=y(m,[],0)),j.removed.push(d[n]),n++}return j&&l.push(j),l},sharedPrefix:function(a,b,c){for(var d=0;c>d;d++)if(!this.equals(a[d],b[d]))return d;return c},sharedSuffix:function(a,b,c){for(var d=a.length,e=b.length,f=0;c>f&&this.equals(a[--d],b[--e]);)f++;return f},calculateSplices:function(a,b){return this.calcSplices(a,0,a.length,b,0,b.length)},equals:function(a,b){return a===b}};var ib=new z;a.Observer=p,a.Observer.hasObjectObserve=K,a.ArrayObserver=s,a.ArrayObserver.calculateSplices=function(a,b){return ib.calculateSplices(a,b)},a.ArraySplice=z,a.ObjectObserver=r,a.PathObserver=u,a.CompoundPathObserver=v,a.Path=i,a.Observer.changeRecordTypes={add:F,update:G,reconfigure:H,"delete":I,splice:J}}("undefined"!=typeof global&&global?global:this),"undefined"==typeof WeakMap&&!function(){var a=Object.defineProperty,b=Date.now()%1e9,c=function(){this.name="__st"+(1e9*Math.random()>>>0)+(b++ +"__")};c.prototype={set:function(b,c){var d=b[this.name];d&&d[0]===b?d[1]=c:a(b,this.name,{value:[b,c],writable:!0})},get:function(a){var b;return(b=a[this.name])&&b[0]===a?b[1]:void 0},"delete":function(a){this.set(a,void 0)}},window.WeakMap=c}();var ShadowDOMPolyfill={};!function(a){"use strict";function b(a){if(!a)throw new Error("Assertion failed")}function c(a,b){return Object.getOwnPropertyNames(b).forEach(function(c){Object.defineProperty(a,c,Object.getOwnPropertyDescriptor(b,c))}),a}function d(a,b){return Object.getOwnPropertyNames(b).forEach(function(c){switch(c){case"arguments":case"caller":case"length":case"name":case"prototype":case"toString":return}Object.defineProperty(a,c,Object.getOwnPropertyDescriptor(b,c))}),a}function e(a,b){for(var c=0;c<b.length;c++)if(b[c]in a)return b[c]}function f(a){var b=a.__proto__||Object.getPrototypeOf(a),c=D.get(b);if(c)return c;var d=f(b),e=s(d);return p(b,e,a),e}function g(a,b){n(a,b,!0)}function h(a,b){n(b,a,!1)}function i(a){return/^on[a-z]+$/.test(a)}function j(a){return/^\w[a-zA-Z_0-9]*$/.test(a)}function k(a){return G&&j(a)?new Function("return this.impl."+a):function(){return this.impl[a]}}function l(a){return G&&j(a)?new Function("v","this.impl."+a+" = v"):function(b){this.impl[a]=b}}function m(a){return G&&j(a)?new Function("return this.impl."+a+".apply(this.impl, arguments)"):function(){return this.impl[a].apply(this.impl,arguments)}}function n(b,c,d){Object.getOwnPropertyNames(b).forEach(function(e){if(!(e in c)){J&&b.__lookupGetter__(e);var f;try{f=Object.getOwnPropertyDescriptor(b,e)}catch(g){f=K}var h,j;if(d&&"function"==typeof f.value)return c[e]=m(e),void 0;var n=i(e);h=n?a.getEventHandlerGetter(e):k(e),(f.writable||f.set)&&(j=n?a.getEventHandlerSetter(e):l(e)),Object.defineProperty(c,e,{get:h,set:j,configurable:f.configurable,enumerable:f.enumerable})}})}function o(a,b,c){var e=a.prototype;p(e,b,c),d(b,a)}function p(a,c,d){var e=c.prototype;b(void 0===D.get(a)),D.set(a,c),E.set(e,a),g(a,e),d&&h(e,d)}function q(a,b){return D.get(b.prototype)===a}function r(a){var b=Object.getPrototypeOf(a),c=f(b),d=s(c);return p(b,d,a),d}function s(a){function b(b){a.call(this,b)}return b.prototype=Object.create(a.prototype),b.prototype.constructor=b,b}function t(a){return a instanceof F.EventTarget||a instanceof F.Event||a instanceof F.Range||a instanceof F.DOMImplementation||a instanceof F.CanvasRenderingContext2D||F.WebGLRenderingContext&&a instanceof F.WebGLRenderingContext}function u(a){return a instanceof N||a instanceof M||a instanceof O||a instanceof P||a instanceof L||a instanceof Q||R&&a instanceof R}function v(a){return null===a?null:(b(u(a)),a.polymerWrapper_||(a.polymerWrapper_=new(f(a))(a)))}function w(a){return null===a?null:(b(t(a)),a.impl)}function x(a){return a&&t(a)?w(a):a}function y(a){return a&&!t(a)?v(a):a}function z(a,c){null!==c&&(b(u(a)),b(void 0===c||t(c)),a.polymerWrapper_=c)}function A(a,b,c){Object.defineProperty(a.prototype,b,{get:c,configurable:!0,enumerable:!0})}function B(a,b){A(a,b,function(){return v(this.impl[b])})}function C(a,b){a.forEach(function(a){b.forEach(function(b){a.prototype[b]=function(){var a=y(this);return a[b].apply(a,arguments)}})})}var D=new WeakMap,E=new WeakMap,F=Object.create(null),G=!("securityPolicy"in document)||document.securityPolicy.allowsEval;if(G)try{var H=new Function("","return true;");G=H()}catch(I){G=!1}Object.getOwnPropertyNames(window);var J=/Firefox/.test(navigator.userAgent),K={get:function(){},set:function(){},configurable:!0,enumerable:!0},L=window.DOMImplementation,M=window.Event,N=window.Node,O=window.Window,P=window.Range,Q=window.CanvasRenderingContext2D,R=window.WebGLRenderingContext;a.assert=b,a.constructorTable=D,a.defineGetter=A,a.defineWrapGetter=B,a.forwardMethodsToWrapper=C,a.isWrapperFor=q,a.mixin=c,a.nativePrototypeTable=E,a.oneOf=e,a.registerObject=r,a.registerWrapper=o,a.rewrap=z,a.unwrap=w,a.unwrapIfNeeded=x,a.wrap=v,a.wrapIfNeeded=y,a.wrappers=F}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){return a instanceof O.ShadowRoot}function c(a){var b=a.localName;return"content"===b||"shadow"===b}function d(a){return!!a.shadowRoot}function e(a){var b;return a.parentNode||(b=a.defaultView)&&N(b)||null}function f(f,g,h){if(h.length)return h.shift();if(b(f))return j(f)||f.host;var i=a.eventParentsTable.get(f);if(i){for(var k=1;k<i.length;k++)h[k-1]=i[k];return i[0]}if(g&&c(f)){var l=f.parentNode;if(l&&d(l))for(var m=a.getShadowTrees(l),n=j(g),k=0;k<m.length;k++)if(m[k].contains(n))return n}return e(f)}function g(a){for(var d=[],e=a,g=[],i=[];e;){var j=null;if(c(e)){j=h(d);var k=d[d.length-1]||e;d.push(k)}else d.length||d.push(e);var l=d[d.length-1];g.push({target:l,currentTarget:e}),b(e)&&d.pop(),e=f(e,j,i)}return g}function h(a){for(var b=a.length-1;b>=0;b--)if(!c(a[b]))return a[b];return null}function i(a,d){for(var e=[];a;){for(var g=[],i=d,j=void 0;i;){var l=null;if(g.length){if(c(i)&&(l=h(g),k(j))){var n=g[g.length-1];g.push(n)}}else g.push(i);if(m(i,a))return g[g.length-1];b(i)&&g.pop(),j=i,i=f(i,l,e)}a=b(a)?a.host:a.parentNode}}function j(b){return a.insertionParentTable.get(b)}function k(a){return j(a)}function l(a){for(var b;b=a.parentNode;)a=b;return a}function m(a,b){return l(a)===l(b)}function n(a,b){return a===b?!0:a instanceof O.ShadowRoot?n(l(a.host),b):!1}function o(){Z++}function p(){Z--}function q(b){if(!Q.get(b)){if(Q.set(b,!0),b instanceof $){if(Z)return}else a.renderAllPending();var c=N(b.target),d=N(b);return r(d,c)}}function r(a,b){var c=g(b);return"load"===a.type&&2===c.length&&c[0].target instanceof O.Document&&c.shift(),Y.set(a,c),s(a,c)&&t(a,c)&&u(a,c),U.set(a,x.NONE),S.set(a,null),a.defaultPrevented}function s(a,b){for(var c,d=b.length-1;d>0;d--){var e=b[d].target,f=b[d].currentTarget;if(e!==f&&(c=x.CAPTURING_PHASE,!v(b[d],a,c)))return!1}return!0}function t(a,b){var c=x.AT_TARGET;return v(b[0],a,c)}function u(a,b){for(var c,d=a.bubbles,e=1;e<b.length;e++){var f=b[e].target,g=b[e].currentTarget;if(f===g)c=x.AT_TARGET;else{if(!d||W.get(a))continue;c=x.BUBBLING_PHASE}if(!v(b[e],a,c))return}}function v(a,b,c){var d=a.target,e=a.currentTarget,f=P.get(e);if(!f)return!0;if("relatedTarget"in b){var g=M(b);if(g.relatedTarget){var h=N(g.relatedTarget),j=i(e,h);if(j===d)return!0;T.set(b,j)}}U.set(b,c);var k=b.type,l=!1;R.set(b,d),S.set(b,e);for(var m=0;m<f.length;m++){var n=f[m];if(n.removed)l=!0;else if(!(n.type!==k||!n.capture&&c===x.CAPTURING_PHASE||n.capture&&c===x.BUBBLING_PHASE))try{if("function"==typeof n.handler?n.handler.call(e,b):n.handler.handleEvent(b),W.get(b))return!1}catch(o){window.onerror?window.onerror(o.message):console.error(o,o.stack)}}if(l){var p=f.slice();f.length=0;for(var m=0;m<p.length;m++)p[m].removed||f.push(p[m])}return!V.get(b)}function w(a,b,c){this.type=a,this.handler=b,this.capture=Boolean(c)}function x(a,b){return a instanceof _?(this.impl=a,void 0):N(B(_,"Event",a,b))}function y(a){return a&&a.relatedTarget?Object.create(a,{relatedTarget:{value:M(a.relatedTarget)}}):a}function z(a,b,c){var d=window[a],e=function(b,c){return b instanceof d?(this.impl=b,void 0):N(B(d,a,b,c))};return e.prototype=Object.create(b.prototype),c&&K(e.prototype,c),d&&(d.prototype["init"+a]?L(d,e,document.createEvent(a)):L(d,e,new d("temp"))),e}function A(a,b){return function(){arguments[b]=M(arguments[b]);var c=M(this);c[a].apply(c,arguments)}}function B(a,b,c,d){if(jb)return new a(c,y(d));var e=M(document.createEvent(b)),f=ib[b],g=[c];return Object.keys(f).forEach(function(a){var b=null!=d&&a in d?d[a]:f[a];"relatedTarget"===a&&(b=M(b)),g.push(b)}),e["init"+b].apply(e,g),e}function C(a){return"function"==typeof a?!0:a&&a.handleEvent}function D(a){this.impl=a}function E(a){return a instanceof O.ShadowRoot&&(a=a.host),M(a)}function F(a){J(a,mb)}function G(b,c,d,e){a.renderAllPending();for(var f=N(nb.call(c.impl,d,e)),h=g(f,this),i=0;i<h.length;i++){var j=h[i];if(j.currentTarget===b)return j.target}return null}function H(a){return function(){var b=X.get(this);return b&&b[a]&&b[a].value||null}}function I(a){var b=a.slice(2);return function(c){var d=X.get(this);d||(d=Object.create(null),X.set(this,d));var e=d[a];if(e&&this.removeEventListener(b,e.wrapped,!1),"function"==typeof c){var f=function(b){var d=c.call(this,b);d===!1?b.preventDefault():"onbeforeunload"===a&&"string"==typeof d&&(b.returnValue=d)};this.addEventListener(b,f,!1),d[a]={value:c,wrapped:f}}}}var J=a.forwardMethodsToWrapper,K=a.mixin,L=a.registerWrapper,M=a.unwrap,N=a.wrap,O=a.wrappers;new WeakMap;var P=new WeakMap,Q=new WeakMap,R=new WeakMap,S=new WeakMap,T=new WeakMap,U=new WeakMap,V=new WeakMap,W=new WeakMap,X=new WeakMap,Y=new WeakMap,Z=0,$=window.MutationEvent;w.prototype={equals:function(a){return this.handler===a.handler&&this.type===a.type&&this.capture===a.capture},get removed(){return null===this.handler},remove:function(){this.handler=null}};var _=window.Event;x.prototype={get target(){return R.get(this)},get currentTarget(){return S.get(this)},get eventPhase(){return U.get(this)},get path(){var a=new O.NodeList,b=Y.get(this);if(b){for(var c=0,d=b.length-1,e=l(S.get(this)),f=0;d>=f;f++){var g=b[f].currentTarget,h=l(g);n(e,h)&&(f!==d||g instanceof O.Node)&&(a[c++]=g)}a.length=c}return a},stopPropagation:function(){V.set(this,!0)},stopImmediatePropagation:function(){V.set(this,!0),W.set(this,!0)}},L(_,x,document.createEvent("Event"));var ab=z("UIEvent",x),bb=z("CustomEvent",x),cb={get relatedTarget(){return T.get(this)||N(M(this).relatedTarget)}},db=K({initMouseEvent:A("initMouseEvent",14)},cb),eb=K({initFocusEvent:A("initFocusEvent",5)},cb),fb=z("MouseEvent",ab,db),gb=z("FocusEvent",ab,eb),hb=z("MutationEvent",x,{initMutationEvent:A("initMutationEvent",3),get relatedNode(){return N(this.impl.relatedNode)}}),ib=Object.create(null),jb=function(){try{new window.MouseEvent("click")}catch(a){return!1}return!0}();if(!jb){var kb=function(a,b,c){if(c){var d=ib[c];b=K(K({},d),b)}ib[a]=b};kb("Event",{bubbles:!1,cancelable:!1}),kb("CustomEvent",{detail:null},"Event"),kb("UIEvent",{view:null,detail:0},"Event"),kb("MouseEvent",{screenX:0,screenY:0,clientX:0,clientY:0,ctrlKey:!1,altKey:!1,shiftKey:!1,metaKey:!1,button:0,relatedTarget:null},"UIEvent"),kb("FocusEvent",{relatedTarget:null},"UIEvent")}var lb=window.EventTarget,mb=["addEventListener","removeEventListener","dispatchEvent"];[Node,Window].forEach(function(a){var b=a.prototype;mb.forEach(function(a){Object.defineProperty(b,a+"_",{value:b[a]})})}),D.prototype={addEventListener:function(a,b,c){if(C(b)){var d=new w(a,b,c),e=P.get(this);if(e){for(var f=0;f<e.length;f++)if(d.equals(e[f]))return}else e=[],P.set(this,e);e.push(d);var g=E(this);g.addEventListener_(a,q,!0)}},removeEventListener:function(a,b,c){c=Boolean(c);var d=P.get(this);if(d){for(var e=0,f=!1,g=0;g<d.length;g++)d[g].type===a&&d[g].capture===c&&(e++,d[g].handler===b&&(f=!0,d[g].remove()));if(f&&1===e){var h=E(this);h.removeEventListener_(a,q,!0)}}},dispatchEvent:function(a){var b=E(this),c=M(a);return Q.set(c,!1),b.dispatchEvent_(c)}},lb&&L(lb,D);var nb=document.elementFromPoint;a.adjustRelatedTarget=i,a.elementFromPoint=G,a.getEventHandlerGetter=H,a.getEventHandlerSetter=I,a.muteMutationEvents=o,a.unmuteMutationEvents=p,a.wrapEventTargetMethods=F,a.wrappers.CustomEvent=bb,a.wrappers.Event=x,a.wrappers.EventTarget=D,a.wrappers.FocusEvent=gb,a.wrappers.MouseEvent=fb,a.wrappers.MutationEvent=hb,a.wrappers.UIEvent=ab}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a,b){Object.defineProperty(a,b,{enumerable:!1})}function c(){this.length=0,b(this,"length")}function d(a){if(null==a)return a;for(var b=new c,d=0,e=a.length;e>d;d++)b[d]=f(a[d]);return b.length=e,b}function e(a,b){a.prototype[b]=function(){return d(this.impl[b].apply(this.impl,arguments))}}var f=a.wrap;c.prototype={item:function(a){return this[a]}},b(c.prototype,"item"),a.wrappers.NodeList=c,a.addWrapNodeListMethod=e,a.wrapNodeList=d}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){o(a instanceof k)}function c(a,b,c,d){if(!(a instanceof DocumentFragment))return a.parentNode&&a.parentNode.removeChild(a),a.parentNode_=b,a.previousSibling_=c,a.nextSibling_=d,c&&(c.nextSibling_=a),d&&(d.previousSibling_=a),[a];for(var e=[],f=a.firstChild;f;f=f.nextSibling)e.push(f);for(var g=e.length-1;g>=0;g--)a.removeChild(e[g]),e[g].parentNode_=b;for(var g=0;g<e.length;g++)e[g].previousSibling_=e[g-1]||c,e[g].nextSibling_=e[g+1]||d;return c&&(c.nextSibling_=e[0]),d&&(d.previousSibling_=e[e.length-1]),e}function d(a){if(a instanceof DocumentFragment){for(var b=[],c=0,d=a.firstChild;d;d=d.nextSibling)b[c++]=d;return b}return[a]}function e(a){for(var b=0;b<a.length;b++)a[b].nodeWasAdded_()}function f(a,b){var c=a.nodeType===k.DOCUMENT_NODE?a:a.ownerDocument;c!==b.ownerDocument&&c.adoptNode(b)}function g(b,c){if(c.length){var d=b.ownerDocument;if(d!==c[0].ownerDocument)for(var e=0;e<c.length;e++)a.adoptNodeNoRemove(c[e],d)}}function h(a,b){g(a,b);var c=b.length;if(1===c)return r(b[0]);for(var d=r(a.ownerDocument.createDocumentFragment()),e=0;c>e;e++)d.appendChild(r(b[e]));return d}function i(a){if(a.invalidateShadowRenderer()){for(var b=a.firstChild;b;){o(b.parentNode===a);var c=b.nextSibling,d=r(b),e=d.parentNode;e&&z.call(e,d),b.previousSibling_=b.nextSibling_=b.parentNode_=null,b=c}a.firstChild_=a.lastChild_=null}else for(var c,f=r(a),g=f.firstChild;g;)c=g.nextSibling,z.call(f,g),g=c}function j(a){var b=a.parentNode;return b&&b.invalidateShadowRenderer()}function k(a){o(a instanceof u),l.call(this,a),this.parentNode_=void 0,this.firstChild_=void 0,this.lastChild_=void 0,this.nextSibling_=void 0,this.previousSibling_=void 0}var l=a.wrappers.EventTarget,m=a.wrappers.NodeList,n=a.defineWrapGetter,o=a.assert,p=a.mixin,q=a.registerWrapper,r=a.unwrap,s=a.wrap,t=a.wrapIfNeeded,u=window.Node,v=window.DocumentFragment,w=u.prototype.appendChild,x=u.prototype.compareDocumentPosition,y=u.prototype.insertBefore,z=u.prototype.removeChild,A=u.prototype.replaceChild,B=/Trident/.test(navigator.userAgent),C=B?function(a,b){try{z.call(a,b)}catch(c){if(!(a instanceof v))throw c}}:function(a,b){z.call(a,b)};k.prototype=Object.create(l.prototype),p(k.prototype,{appendChild:function(a){b(a);var g;if(this.invalidateShadowRenderer()||j(a)){var i=this.lastChild,k=null;g=c(a,this,i,k),this.lastChild_=g[g.length-1],i||(this.firstChild_=g[0]),w.call(this.impl,h(this,g))}else g=d(a),f(this,a),w.call(this.impl,r(a));return e(g),a},insertBefore:function(a,i){if(!i)return this.appendChild(a);b(a),b(i),o(i.parentNode===this);var k;if(this.invalidateShadowRenderer()||j(a)){var l=i.previousSibling,m=i;k=c(a,this,l,m),this.firstChild===i&&(this.firstChild_=k[0]);var n=r(i),p=n.parentNode;p?y.call(p,h(this,k),n):g(this,k)}else k=d(a),f(this,a),y.call(this.impl,r(a),r(i));return e(k),a},removeChild:function(a){if(b(a),a.parentNode!==this){var c=!1;this.childNodes;for(var d=this.firstChild;d;d=d.nextSibling)if(d===a){c=!0;break}if(!c)throw new Error("NotFoundError")}var e=r(a);if(this.invalidateShadowRenderer()){var f=this.firstChild,g=this.lastChild,h=a.nextSibling,i=a.previousSibling,j=e.parentNode;j&&C(j,e),f===a&&(this.firstChild_=h),g===a&&(this.lastChild_=i),i&&(i.nextSibling_=h),h&&(h.previousSibling_=i),a.previousSibling_=a.nextSibling_=a.parentNode_=void 0}else C(this.impl,e);return a},replaceChild:function(a,g){if(b(a),b(g),g.parentNode!==this)throw new Error("NotFoundError");var i,k=r(g);if(this.invalidateShadowRenderer()||j(a)){var l=g.previousSibling,m=g.nextSibling;m===a&&(m=a.nextSibling),i=c(a,this,l,m),this.firstChild===g&&(this.firstChild_=i[0]),this.lastChild===g&&(this.lastChild_=i[i.length-1]),g.previousSibling_=g.nextSibling_=g.parentNode_=void 0,k.parentNode&&A.call(k.parentNode,h(this,i),k)}else i=d(a),f(this,a),A.call(this.impl,r(a),k);return e(i),g},nodeWasAdded_:function(){for(var a=this.firstChild;a;a=a.nextSibling)a.nodeWasAdded_()},hasChildNodes:function(){return null!==this.firstChild},get parentNode(){return void 0!==this.parentNode_?this.parentNode_:s(this.impl.parentNode)},get firstChild(){return void 0!==this.firstChild_?this.firstChild_:s(this.impl.firstChild)},get lastChild(){return void 0!==this.lastChild_?this.lastChild_:s(this.impl.lastChild)},get nextSibling(){return void 0!==this.nextSibling_?this.nextSibling_:s(this.impl.nextSibling)},get previousSibling(){return void 0!==this.previousSibling_?this.previousSibling_:s(this.impl.previousSibling)},get parentElement(){for(var a=this.parentNode;a&&a.nodeType!==k.ELEMENT_NODE;)a=a.parentNode;return a},get textContent(){for(var a="",b=this.firstChild;b;b=b.nextSibling)a+=b.textContent;return a},set textContent(a){if(this.invalidateShadowRenderer()){if(i(this),""!==a){var b=this.impl.ownerDocument.createTextNode(a);this.appendChild(b)}}else this.impl.textContent=a},get childNodes(){for(var a=new m,b=0,c=this.firstChild;c;c=c.nextSibling)a[b++]=c;
+return a.length=b,a},cloneNode:function(a){if(!this.invalidateShadowRenderer())return s(this.impl.cloneNode(a));var b=s(this.impl.cloneNode(!1));if(a)for(var c=this.firstChild;c;c=c.nextSibling)b.appendChild(c.cloneNode(!0));return b},contains:function(a){if(!a)return!1;if(a=t(a),a===this)return!0;var b=a.parentNode;return b?this.contains(b):!1},compareDocumentPosition:function(a){return x.call(this.impl,r(a))}}),n(k,"ownerDocument"),q(u,k,document.createDocumentFragment()),delete k.prototype.querySelector,delete k.prototype.querySelectorAll,k.prototype=p(Object.create(l.prototype),k.prototype),a.wrappers.Node=k}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a,c){for(var d,e=a.firstElementChild;e;){if(e.matches(c))return e;if(d=b(e,c))return d;e=e.nextElementSibling}return null}function c(a,b,d){for(var e=a.firstElementChild;e;)e.matches(b)&&(d[d.length++]=e),c(e,b,d),e=e.nextElementSibling;return d}var d={querySelector:function(a){return b(this,a)},querySelectorAll:function(a){return c(this,a,new NodeList)}},e={getElementsByTagName:function(a){return this.querySelectorAll(a)},getElementsByClassName:function(a){return this.querySelectorAll("."+a)},getElementsByTagNameNS:function(a,b){if("*"===a)return this.getElementsByTagName(b);for(var c=new NodeList,d=this.getElementsByTagName(b),e=0,f=0;e<d.length;e++)d[e].namespaceURI===a&&(c[f++]=d[e]);return c.length=f,c}};a.GetElementsByInterface=e,a.SelectorsInterface=d}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){for(;a&&a.nodeType!==Node.ELEMENT_NODE;)a=a.nextSibling;return a}function c(a){for(;a&&a.nodeType!==Node.ELEMENT_NODE;)a=a.previousSibling;return a}var d=a.wrappers.NodeList,e={get firstElementChild(){return b(this.firstChild)},get lastElementChild(){return c(this.lastChild)},get childElementCount(){for(var a=0,b=this.firstElementChild;b;b=b.nextElementSibling)a++;return a},get children(){for(var a=new d,b=0,c=this.firstElementChild;c;c=c.nextElementSibling)a[b++]=c;return a.length=b,a}},f={get nextElementSibling(){return b(this.nextSibling)},get previousElementSibling(){return c(this.previousSibling)}};a.ChildNodeInterface=f,a.ParentNodeInterface=e}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){d.call(this,a)}var c=a.ChildNodeInterface,d=a.wrappers.Node,e=a.mixin,f=a.registerWrapper,g=window.CharacterData;b.prototype=Object.create(d.prototype),e(b.prototype,{get textContent(){return this.data},set textContent(a){this.data=a}}),e(b.prototype,c),f(g,b,document.createTextNode("")),a.wrappers.CharacterData=b}(this.ShadowDOMPolyfill),function(a){"use strict";function b(b,c){var d=b.parentNode;if(d&&d.shadowRoot){var e=a.getRendererForHost(d);e.dependsOnAttribute(c)&&e.invalidate()}}function c(a){g.call(this,a)}function d(a,c,d){var e=d||c;Object.defineProperty(a,c,{get:function(){return this.impl[c]},set:function(a){this.impl[c]=a,b(this,e)},configurable:!0,enumerable:!0})}var e=a.ChildNodeInterface,f=a.GetElementsByInterface,g=a.wrappers.Node,h=a.ParentNodeInterface,i=a.SelectorsInterface;a.addWrapNodeListMethod;var j=a.mixin,k=a.oneOf,l=a.registerWrapper,m=a.wrappers,n=window.Element,o=k(n.prototype,["matches","mozMatchesSelector","msMatchesSelector","webkitMatchesSelector"]),p=n.prototype[o];c.prototype=Object.create(g.prototype),j(c.prototype,{createShadowRoot:function(){var b=new m.ShadowRoot(this);this.impl.polymerShadowRoot_=b;var c=a.getRendererForHost(this);return c.invalidate(),b},get shadowRoot(){return this.impl.polymerShadowRoot_||null},setAttribute:function(a,c){this.impl.setAttribute(a,c),b(this,a)},removeAttribute:function(a){this.impl.removeAttribute(a),b(this,a)},matches:function(a){return p.call(this.impl,a)}}),c.prototype[o]=function(a){return this.matches(a)},n.prototype.webkitCreateShadowRoot&&(c.prototype.webkitCreateShadowRoot=c.prototype.createShadowRoot),d(c.prototype,"id"),d(c.prototype,"className","class"),j(c.prototype,e),j(c.prototype,f),j(c.prototype,h),j(c.prototype,i),l(n,c),a.matchesName=o,a.wrappers.Element=c}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){switch(a){case"&":return"&";case"<":return"<";case'"':return"""}}function c(a){return a.replace(r,b)}function d(a){switch(a.nodeType){case Node.ELEMENT_NODE:for(var b,d=a.tagName.toLowerCase(),f="<"+d,g=a.attributes,h=0;b=g[h];h++)f+=" "+b.name+'="'+c(b.value)+'"';return f+=">",s[d]?f:f+e(a)+"</"+d+">";case Node.TEXT_NODE:return c(a.nodeValue);case Node.COMMENT_NODE:return"<!--"+c(a.nodeValue)+"-->";default:throw console.error(a),new Error("not implemented")}}function e(a){for(var b="",c=a.firstChild;c;c=c.nextSibling)b+=d(c);return b}function f(a,b,c){var d=c||"div";a.textContent="";var e=p(a.ownerDocument.createElement(d));e.innerHTML=b;for(var f;f=e.firstChild;)a.appendChild(q(f))}function g(a){l.call(this,a)}function h(b){return function(){return a.renderAllPending(),this.impl[b]}}function i(a){m(g,a,h(a))}function j(b){Object.defineProperty(g.prototype,b,{get:h(b),set:function(c){a.renderAllPending(),this.impl[b]=c},configurable:!0,enumerable:!0})}function k(b){Object.defineProperty(g.prototype,b,{value:function(){return a.renderAllPending(),this.impl[b].apply(this.impl,arguments)},configurable:!0,enumerable:!0})}var l=a.wrappers.Element,m=a.defineGetter,n=a.mixin,o=a.registerWrapper,p=a.unwrap,q=a.wrap,r=/&|<|"/g,s={area:!0,base:!0,br:!0,col:!0,command:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0},t=window.HTMLElement;g.prototype=Object.create(l.prototype),n(g.prototype,{get innerHTML(){return e(this)},set innerHTML(a){this.invalidateShadowRenderer()?f(this,a,this.tagName):this.impl.innerHTML=a},get outerHTML(){return d(this)},set outerHTML(a){var b=this.parentNode;b&&(b.invalidateShadowRenderer(),this.impl.outerHTML=a)}}),["clientHeight","clientLeft","clientTop","clientWidth","offsetHeight","offsetLeft","offsetTop","offsetWidth","scrollHeight","scrollWidth"].forEach(i),["scrollLeft","scrollTop"].forEach(j),["getBoundingClientRect","getClientRects","scrollIntoView"].forEach(k),o(t,g,document.createElement("b")),a.wrappers.HTMLElement=g,a.getInnerHTML=e,a.setInnerHTML=f}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){c.call(this,a)}var c=a.wrappers.HTMLElement,d=a.mixin,e=a.registerWrapper,f=a.wrap,g=window.HTMLCanvasElement;b.prototype=Object.create(c.prototype),d(b.prototype,{getContext:function(){var a=this.impl.getContext.apply(this.impl,arguments);return a&&f(a)}}),e(g,b,document.createElement("canvas")),a.wrappers.HTMLCanvasElement=b}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){c.call(this,a)}var c=a.wrappers.HTMLElement,d=a.mixin,e=a.registerWrapper,f=window.HTMLContentElement;b.prototype=Object.create(c.prototype),d(b.prototype,{get select(){return this.getAttribute("select")},set select(a){this.setAttribute("select",a)},setAttribute:function(a,b){c.prototype.setAttribute.call(this,a,b),"select"===String(a).toLowerCase()&&this.invalidateShadowRenderer(!0)}}),f&&e(f,b),a.wrappers.HTMLContentElement=b}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){d.call(this,a)}function c(a,b){if(!(this instanceof c))throw new TypeError("DOM object constructor cannot be called as a function.");var e=f(document.createElement("img"));d.call(this,e),g(e,this),void 0!==a&&(e.width=a),void 0!==b&&(e.height=b)}var d=a.wrappers.HTMLElement,e=a.registerWrapper,f=a.unwrap,g=a.rewrap,h=window.HTMLImageElement;b.prototype=Object.create(d.prototype),e(h,b,document.createElement("img")),c.prototype=b.prototype,a.wrappers.HTMLImageElement=b,a.wrappers.Image=c}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){c.call(this,a)}var c=a.wrappers.HTMLElement,d=a.mixin,e=a.registerWrapper,f=window.HTMLShadowElement;b.prototype=Object.create(c.prototype),d(b.prototype,{}),f&&e(f,b),a.wrappers.HTMLShadowElement=b}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){if(!a.defaultView)return a;var b=o.get(a);if(!b){for(b=a.implementation.createHTMLDocument("");b.lastChild;)b.removeChild(b.lastChild);o.set(a,b)}return b}function c(a){var c,d=b(a.ownerDocument),e=l(d.createDocumentFragment());for(h();c=a.firstChild;)e.appendChild(c);return k(),e}function d(a){if(e.call(this,a),!p){var b=c(a);n.set(this,m(b))}}var e=a.wrappers.HTMLElement,f=a.getInnerHTML,g=a.mixin,h=a.muteMutationEvents,i=a.registerWrapper,j=a.setInnerHTML,k=a.unmuteMutationEvents,l=a.unwrap,m=a.wrap,n=new WeakMap,o=new WeakMap,p=window.HTMLTemplateElement;d.prototype=Object.create(e.prototype),g(d.prototype,{get content(){return p?m(this.impl.content):n.get(this)},get innerHTML(){return f(this.content)},set innerHTML(a){j(this.content,a)}}),p&&i(p,d),a.wrappers.HTMLTemplateElement=d}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){c.call(this,a)}var c=a.wrappers.HTMLElement,d=a.registerWrapper,e=window.HTMLMediaElement;b.prototype=Object.create(c.prototype),d(e,b,document.createElement("audio")),a.wrappers.HTMLMediaElement=b}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){d.call(this,a)}function c(a){if(!(this instanceof c))throw new TypeError("DOM object constructor cannot be called as a function.");var b=f(document.createElement("audio"));d.call(this,b),g(b,this),b.setAttribute("preload","auto"),void 0!==a&&b.setAttribute("src",a)}var d=a.wrappers.HTMLMediaElement,e=a.registerWrapper,f=a.unwrap,g=a.rewrap,h=window.HTMLAudioElement;b.prototype=Object.create(d.prototype),e(h,b,document.createElement("audio")),c.prototype=b.prototype,a.wrappers.HTMLAudioElement=b,a.wrappers.Audio=c}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){return a.replace(/\s+/g," ").trim()}function c(a){e.call(this,a)}function d(a,b,c,f){if(!(this instanceof d))throw new TypeError("DOM object constructor cannot be called as a function.");var g=i(document.createElement("option"));e.call(this,g),h(g,this),void 0!==a&&(g.text=a),void 0!==b&&g.setAttribute("value",b),c===!0&&g.setAttribute("selected",""),g.selected=f===!0}var e=a.wrappers.HTMLElement,f=a.mixin,g=a.registerWrapper,h=a.rewrap,i=a.unwrap,j=a.wrap,k=window.HTMLOptionElement;c.prototype=Object.create(e.prototype),f(c.prototype,{get text(){return b(this.textContent)},set text(a){this.textContent=b(String(a))},get form(){return j(i(this).form)}}),g(k,c,document.createElement("option")),d.prototype=c.prototype,a.wrappers.HTMLOptionElement=c,a.wrappers.Option=d}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){switch(a.localName){case"content":return new c(a);case"shadow":return new e(a);case"template":return new f(a)}d.call(this,a)}var c=a.wrappers.HTMLContentElement,d=a.wrappers.HTMLElement,e=a.wrappers.HTMLShadowElement,f=a.wrappers.HTMLTemplateElement;a.mixin;var g=a.registerWrapper,h=window.HTMLUnknownElement;b.prototype=Object.create(d.prototype),g(h,b),a.wrappers.HTMLUnknownElement=b}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){this.impl=a}var c=a.mixin,d=a.registerWrapper,e=a.unwrap,f=a.unwrapIfNeeded,g=a.wrap,h=window.CanvasRenderingContext2D;c(b.prototype,{get canvas(){return g(this.impl.canvas)},drawImage:function(){arguments[0]=f(arguments[0]),this.impl.drawImage.apply(this.impl,arguments)},createPattern:function(){return arguments[0]=e(arguments[0]),this.impl.createPattern.apply(this.impl,arguments)}}),d(h,b),a.wrappers.CanvasRenderingContext2D=b}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){this.impl=a}var c=a.mixin,d=a.registerWrapper,e=a.unwrapIfNeeded,f=a.wrap,g=window.WebGLRenderingContext;g&&(c(b.prototype,{get canvas(){return f(this.impl.canvas)},texImage2D:function(){arguments[5]=e(arguments[5]),this.impl.texImage2D.apply(this.impl,arguments)},texSubImage2D:function(){arguments[6]=e(arguments[6]),this.impl.texSubImage2D.apply(this.impl,arguments)}}),d(g,b),a.wrappers.WebGLRenderingContext=b)}(this.ShadowDOMPolyfill),function(a){"use strict";var b=a.GetElementsByInterface,c=a.ParentNodeInterface,d=a.SelectorsInterface,e=a.mixin,f=a.registerObject,g=f(document.createDocumentFragment());e(g.prototype,c),e(g.prototype,d),e(g.prototype,b);var h=f(document.createTextNode("")),i=f(document.createComment(""));a.wrappers.Comment=i,a.wrappers.DocumentFragment=g,a.wrappers.Text=h}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){var b=i(a.impl.ownerDocument.createDocumentFragment());c.call(this,b),g(b,this);var d=a.shadowRoot;k.set(this,d),j.set(this,a)}var c=a.wrappers.DocumentFragment,d=a.elementFromPoint,e=a.getInnerHTML,f=a.mixin,g=a.rewrap,h=a.setInnerHTML,i=a.unwrap,j=new WeakMap,k=new WeakMap;b.prototype=Object.create(c.prototype),f(b.prototype,{get innerHTML(){return e(this)},set innerHTML(a){h(this,a),this.invalidateShadowRenderer()},get olderShadowRoot(){return k.get(this)||null},get host(){return j.get(this)||null},invalidateShadowRenderer:function(){return j.get(this).invalidateShadowRenderer()},elementFromPoint:function(a,b){return d(this,this.ownerDocument,a,b)},getElementById:function(a){return this.querySelector("#"+a)}}),a.wrappers.ShadowRoot=b}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){a.previousSibling_=a.previousSibling,a.nextSibling_=a.nextSibling,a.parentNode_=a.parentNode}function c(a,c,e){var f=F(a),g=F(c),h=e?F(e):null;if(d(c),b(c),e)a.firstChild===e&&(a.firstChild_=e),e.previousSibling_=e.previousSibling;else{a.lastChild_=a.lastChild,a.lastChild===a.firstChild&&(a.firstChild_=a.firstChild);var i=G(f.lastChild);i&&(i.nextSibling_=i.nextSibling)}f.insertBefore(g,h)}function d(a){var c=F(a),d=c.parentNode;if(d){var e=G(d);b(a),a.previousSibling&&(a.previousSibling.nextSibling_=a),a.nextSibling&&(a.nextSibling.previousSibling_=a),e.lastChild===a&&(e.lastChild_=a),e.firstChild===a&&(e.firstChild_=a),d.removeChild(c)}}function e(a,b){g(b).push(a),x(a,b);var c=I.get(a);c||I.set(a,c=[]),c.push(b)}function f(a){H.set(a,[])}function g(a){return H.get(a)}function h(a){for(var b=[],c=0,d=a.firstChild;d;d=d.nextSibling)b[c++]=d;return b}function i(a,b,c){for(var d=a.firstChild;d;d=d.nextSibling)if(b(d)){if(c(d)===!1)return}else i(d,b,c)}function j(a,b){var c=b.getAttribute("select");if(!c)return!0;if(c=c.trim(),!c)return!0;if(!(a instanceof y))return!1;if(!L.test(c))return!1;if(":"===c[0]&&!M.test(c))return!1;try{return a.matches(c)}catch(d){return!1}}function k(){for(var a=0;a<O.length;a++)O[a].render();O=[]}function l(){E=null,k()}function m(a){var b=K.get(a);return b||(b=new q(a),K.set(a,b)),b}function n(a){for(;a;a=a.parentNode)if(a instanceof C)return a;return null}function o(a){return m(a.host)}function p(a){this.skip=!1,this.node=a,this.childNodes=[]}function q(a){this.host=a,this.dirty=!1,this.invalidateAttributes(),this.associateNode(a)}function r(a){return a instanceof z}function s(a){return a instanceof z}function t(a){return a instanceof A}function u(a){return a instanceof A}function v(a){return a.shadowRoot}function w(a){for(var b=[],c=a.shadowRoot;c;c=c.olderShadowRoot)b.push(c);return b}function x(a,b){J.set(a,b)}var y=a.wrappers.Element,z=a.wrappers.HTMLContentElement,A=a.wrappers.HTMLShadowElement,B=a.wrappers.Node,C=a.wrappers.ShadowRoot;a.assert,a.mixin,a.muteMutationEvents;var D=a.oneOf;a.unmuteMutationEvents;var E,F=a.unwrap,G=a.wrap,H=new WeakMap,I=new WeakMap,J=new WeakMap,K=new WeakMap,L=/^[*.:#[a-zA-Z_|]/,M=new RegExp("^:("+["link","visited","target","enabled","disabled","checked","indeterminate","nth-child","nth-last-child","nth-of-type","nth-last-of-type","first-child","last-child","first-of-type","last-of-type","only-of-type"].join("|")+")"),N=D(window,["requestAnimationFrame","mozRequestAnimationFrame","webkitRequestAnimationFrame","setTimeout"]),O=[],P=new ArraySplice;P.equals=function(a,b){return F(a.node)===b},p.prototype={append:function(a){var b=new p(a);return this.childNodes.push(b),b},sync:function(a){if(!this.skip){for(var b=this.node,e=this.childNodes,f=h(F(b)),g=a||new WeakMap,i=P.calculateSplices(e,f),j=0,k=0,l=0,m=0;m<i.length;m++){for(var n=i[m];l<n.index;l++)k++,e[j++].sync(g);for(var o=n.removed.length,p=0;o>p;p++){var q=G(f[k++]);g.get(q)||d(q)}for(var r=n.addedCount,s=f[k]&&G(f[k]),p=0;r>p;p++){var t=e[j++],u=t.node;c(b,u,s),g.set(u,!0),t.sync(g)}l+=r}for(var m=l;m<e.length;m++)e[m].sync(g)}}},q.prototype={render:function(a){if(this.dirty){this.invalidateAttributes(),this.treeComposition();var b=this.host,c=b.shadowRoot;this.associateNode(b);for(var d=!e,e=a||new p(b),f=c.firstChild;f;f=f.nextSibling)this.renderNode(c,e,f,!1);d&&e.sync(),this.dirty=!1}},invalidate:function(){if(!this.dirty){if(this.dirty=!0,O.push(this),E)return;E=window[N](l,0)}},renderNode:function(a,b,c,d){if(v(c)){b=b.append(c);var e=m(c);e.dirty=!0,e.render(b)}else r(c)?this.renderInsertionPoint(a,b,c,d):t(c)?this.renderShadowInsertionPoint(a,b,c):this.renderAsAnyDomTree(a,b,c,d)},renderAsAnyDomTree:function(a,b,c,d){if(b=b.append(c),v(c)){var e=m(c);b.skip=!e.dirty,e.render(b)}else for(var f=c.firstChild;f;f=f.nextSibling)this.renderNode(a,b,f,d)},renderInsertionPoint:function(a,b,c,d){var e=g(c);if(e.length){this.associateNode(c);for(var f=0;f<e.length;f++){var h=e[f];r(h)&&d?this.renderInsertionPoint(a,b,h,d):this.renderAsAnyDomTree(a,b,h,d)}}else this.renderFallbackContent(a,b,c);this.associateNode(c.parentNode)},renderShadowInsertionPoint:function(a,b,c){var d=a.olderShadowRoot;if(d){x(d,c),this.associateNode(c.parentNode);for(var e=d.firstChild;e;e=e.nextSibling)this.renderNode(d,b,e,!0)}else this.renderFallbackContent(a,b,c)},renderFallbackContent:function(a,b,c){this.associateNode(c),this.associateNode(c.parentNode);for(var d=c.firstChild;d;d=d.nextSibling)this.renderAsAnyDomTree(a,b,d,!1)},invalidateAttributes:function(){this.attributes=Object.create(null)},updateDependentAttributes:function(a){if(a){var b=this.attributes;/\.\w+/.test(a)&&(b["class"]=!0),/#\w+/.test(a)&&(b.id=!0),a.replace(/\[\s*([^\s=\|~\]]+)/g,function(a,c){b[c]=!0})}},dependsOnAttribute:function(a){return this.attributes[a]},distribute:function(a,b){var c=this;i(a,s,function(a){f(a),c.updateDependentAttributes(a.getAttribute("select"));for(var d=0;d<b.length;d++){var g=b[d];void 0!==g&&j(g,a)&&(e(g,a),b[d]=void 0)}})},treeComposition:function(){for(var a=this.host,b=a.shadowRoot,c=[],d=a.firstChild;d;d=d.nextSibling)if(r(d)){var e=g(d);e&&e.length||(e=h(d)),c.push.apply(c,e)}else c.push(d);for(var f,j;b;){if(f=void 0,i(b,u,function(a){return f=a,!1}),j=f,this.distribute(b,c),j){var k=b.olderShadowRoot;if(k){b=k,x(b,j);continue}break}break}},associateNode:function(a){a.impl.polymerShadowRenderer_=this}},B.prototype.invalidateShadowRenderer=function(){var a=this.impl.polymerShadowRenderer_;return a?(a.invalidate(),!0):!1},z.prototype.getDistributedNodes=function(){return k(),g(this)},A.prototype.nodeWasAdded_=z.prototype.nodeWasAdded_=function(){this.invalidateShadowRenderer();var a,b=n(this);b&&(a=o(b)),this.impl.polymerShadowRenderer_=a,a&&a.invalidate()},a.eventParentsTable=I,a.getRendererForHost=m,a.getShadowTrees=w,a.insertionParentTable=J,a.renderAllPending=k,a.visual={insertBefore:c,remove:d}}(this.ShadowDOMPolyfill),function(a){"use strict";function b(b){if(window[b]){d(!a.wrappers[b]);var i=function(a){c.call(this,a)};i.prototype=Object.create(c.prototype),e(i.prototype,{get form(){return h(g(this).form)}}),f(window[b],i,document.createElement(b.slice(4,-7))),a.wrappers[b]=i}}var c=a.wrappers.HTMLElement,d=a.assert,e=a.mixin,f=a.registerWrapper,g=a.unwrap,h=a.wrap,i=["HTMLButtonElement","HTMLFieldSetElement","HTMLInputElement","HTMLKeygenElement","HTMLLabelElement","HTMLLegendElement","HTMLObjectElement","HTMLOutputElement","HTMLSelectElement","HTMLTextAreaElement"];i.forEach(b)}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){k.call(this,a)}function c(a){var c=document[a];b.prototype[a]=function(){return v(c.apply(this.impl,arguments))}}function d(a,b){y.call(b.impl,u(a)),e(a,b)}function e(a,b){a.shadowRoot&&b.adoptNode(a.shadowRoot),a instanceof n&&f(a,b);for(var c=a.firstChild;c;c=c.nextSibling)e(c,b)}function f(a,b){var c=a.olderShadowRoot;c&&b.adoptNode(c)}function g(a){this.impl=a}function h(a,b){var c=document.implementation[b];a.prototype[b]=function(){return v(c.apply(this.impl,arguments))}}function i(a,b){var c=document.implementation[b];a.prototype[b]=function(){return c.apply(this.impl,arguments)}}var j=a.GetElementsByInterface,k=a.wrappers.Node,l=a.ParentNodeInterface,m=a.SelectorsInterface,n=a.wrappers.ShadowRoot,o=a.defineWrapGetter,p=a.elementFromPoint,q=a.forwardMethodsToWrapper,r=a.matchesName,s=a.mixin,t=a.registerWrapper,u=a.unwrap,v=a.wrap,w=a.wrapEventTargetMethods;a.wrapNodeList;var x=new WeakMap;b.prototype=Object.create(k.prototype),o(b,"documentElement"),o(b,"body"),o(b,"head"),["createComment","createDocumentFragment","createElement","createElementNS","createEvent","createEventNS","createRange","createTextNode","getElementById"].forEach(c);var y=document.adoptNode;if(s(b.prototype,{adoptNode:function(a){return a.parentNode&&a.parentNode.removeChild(a),d(a,this),a},elementFromPoint:function(a,b){return p(this,this,a,b)}}),document.register){var z=document.register;b.prototype.register=function(b,c){function d(a){return a?(this.impl=a,void 0):c.extends?document.createElement(c.extends,b):document.createElement(b)}var e=c.prototype;if(a.nativePrototypeTable.get(e))throw new Error("NotSupportedError");for(var f,g=Object.getPrototypeOf(e),h=[];g&&!(f=a.nativePrototypeTable.get(g));)h.push(g),g=Object.getPrototypeOf(g);if(!f)throw new Error("NotSupportedError");for(var i=Object.create(f),j=h.length-1;j>=0;j--)i=Object.create(i);["createdCallback","enteredViewCallback","leftViewCallback","attributeChangedCallback"].forEach(function(a){var b=e[a];b&&(i[a]=function(){b.apply(v(this),arguments)})});var k={prototype:i};return c.extends&&(k.extends=c.extends),z.call(u(this),b,k),d.prototype=e,d.prototype.constructor=d,a.constructorTable.set(i,d),a.nativePrototypeTable.set(e,i),d},q([window.HTMLDocument||window.Document],["register"])}q([window.HTMLBodyElement,window.HTMLDocument||window.Document,window.HTMLHeadElement,window.HTMLHtmlElement],["appendChild","compareDocumentPosition","contains","getElementsByClassName","getElementsByTagName","getElementsByTagNameNS","insertBefore","querySelector","querySelectorAll","removeChild","replaceChild",r]),q([window.HTMLDocument||window.Document],["adoptNode","contains","createComment","createDocumentFragment","createElement","createElementNS","createEvent","createEventNS","createRange","createTextNode","elementFromPoint","getElementById"]),s(b.prototype,j),s(b.prototype,l),s(b.prototype,m),s(b.prototype,{get implementation(){var a=x.get(this);return a?a:(a=new g(u(this).implementation),x.set(this,a),a)}}),t(window.Document,b,document.implementation.createHTMLDocument("")),window.HTMLDocument&&t(window.HTMLDocument,b),w([window.HTMLBodyElement,window.HTMLDocument||window.Document,window.HTMLHeadElement]),h(g,"createDocumentType"),h(g,"createDocument"),h(g,"createHTMLDocument"),i(g,"hasFeature"),t(window.DOMImplementation,g),q([window.DOMImplementation],["createDocumentType","createDocument","createHTMLDocument","hasFeature"]),a.adoptNodeNoRemove=d,a.wrappers.DOMImplementation=g,a.wrappers.Document=b}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){c.call(this,a)}var c=a.wrappers.EventTarget,d=a.mixin,e=a.registerWrapper,f=a.unwrap,g=a.unwrapIfNeeded,h=a.wrap,i=a.renderAllPending,j=window.Window;b.prototype=Object.create(c.prototype);var k=window.getComputedStyle;j.prototype.getComputedStyle=function(a,b){return i(),k.call(this||window,g(a),b)},["addEventListener","removeEventListener","dispatchEvent"].forEach(function(a){j.prototype[a]=function(){var b=h(this||window);return b[a].apply(b,arguments)}}),d(b.prototype,{getComputedStyle:function(a,b){return k.call(f(this),g(a),b)}}),e(j,b),a.wrappers.Window=b}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){this.impl=a}function c(a){return new b(a)}function d(a){return a.map(c)}function e(a){var b=this;this.impl=new k(function(c){a.call(b,d(c),b)})}var f=a.defineGetter,g=a.defineWrapGetter,h=a.registerWrapper,i=a.unwrapIfNeeded,j=a.wrapNodeList;a.wrappers;var k=window.MutationObserver||window.WebKitMutationObserver;if(k){var l=window.MutationRecord;b.prototype={get addedNodes(){return j(this.impl.addedNodes)},get removedNodes(){return j(this.impl.removedNodes)}},["target","previousSibling","nextSibling"].forEach(function(a){g(b,a)}),["type","attributeName","attributeNamespace","oldValue"].forEach(function(a){f(b,a,function(){return this.impl[a]})}),l&&h(l,b),window.Node,e.prototype={observe:function(a,b){this.impl.observe(i(a),b)},disconnect:function(){this.impl.disconnect()},takeRecords:function(){return d(this.impl.takeRecords())}},a.wrappers.MutationObserver=e,a.wrappers.MutationRecord=b}}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){this.impl=a}var c=a.registerWrapper,d=a.unwrap,e=a.unwrapIfNeeded,f=a.wrap,g=window.Range;b.prototype={get startContainer(){return f(this.impl.startContainer)},get endContainer(){return f(this.impl.endContainer)},get commonAncestorContainer(){return f(this.impl.commonAncestorContainer)},setStart:function(a,b){this.impl.setStart(e(a),b)},setEnd:function(a,b){this.impl.setEnd(e(a),b)},setStartBefore:function(a){this.impl.setStartBefore(e(a))},setStartAfter:function(a){this.impl.setStartAfter(e(a))},setEndBefore:function(a){this.impl.setEndBefore(e(a))},setEndAfter:function(a){this.impl.setEndAfter(e(a))},selectNode:function(a){this.impl.selectNode(e(a))},selectNodeContents:function(a){this.impl.selectNodeContents(e(a))},compareBoundaryPoints:function(a,b){return this.impl.compareBoundaryPoints(a,d(b))},extractContents:function(){return f(this.impl.extractContents())},cloneContents:function(){return f(this.impl.cloneContents())},insertNode:function(a){this.impl.insertNode(e(a))},surroundContents:function(a){this.impl.surroundContents(e(a))},cloneRange:function(){return f(this.impl.cloneRange())},isPointInRange:function(a,b){return this.impl.isPointInRange(e(a),b)},comparePoint:function(a,b){return this.impl.comparePoint(e(a),b)},intersectsNode:function(a){return this.impl.intersectsNode(e(a))}},g.prototype.createContextualFragment&&(b.prototype.createContextualFragment=function(a){return f(this.impl.createContextualFragment(a))}),c(window.Range,b),a.wrappers.Range=b}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){var b=c[a],d=window[b];if(d){var e=document.createElement(a),f=e.constructor;window[b]=f}}a.isWrapperFor;var c={a:"HTMLAnchorElement",applet:"HTMLAppletElement",area:"HTMLAreaElement",br:"HTMLBRElement",base:"HTMLBaseElement",body:"HTMLBodyElement",button:"HTMLButtonElement",dl:"HTMLDListElement",datalist:"HTMLDataListElement",data:"HTMLDataElement",dir:"HTMLDirectoryElement",div:"HTMLDivElement",embed:"HTMLEmbedElement",fieldset:"HTMLFieldSetElement",font:"HTMLFontElement",form:"HTMLFormElement",frame:"HTMLFrameElement",frameset:"HTMLFrameSetElement",hr:"HTMLHRElement",head:"HTMLHeadElement",h1:"HTMLHeadingElement",html:"HTMLHtmlElement",iframe:"HTMLIFrameElement",input:"HTMLInputElement",li:"HTMLLIElement",label:"HTMLLabelElement",legend:"HTMLLegendElement",link:"HTMLLinkElement",map:"HTMLMapElement",marquee:"HTMLMarqueeElement",menu:"HTMLMenuElement",menuitem:"HTMLMenuItemElement",meta:"HTMLMetaElement",meter:"HTMLMeterElement",del:"HTMLModElement",ol:"HTMLOListElement",object:"HTMLObjectElement",optgroup:"HTMLOptGroupElement",option:"HTMLOptionElement",output:"HTMLOutputElement",p:"HTMLParagraphElement",param:"HTMLParamElement",pre:"HTMLPreElement",progress:"HTMLProgressElement",q:"HTMLQuoteElement",script:"HTMLScriptElement",select:"HTMLSelectElement",source:"HTMLSourceElement",span:"HTMLSpanElement",style:"HTMLStyleElement",time:"HTMLTimeElement",caption:"HTMLTableCaptionElement",col:"HTMLTableColElement",table:"HTMLTableElement",tr:"HTMLTableRowElement",thead:"HTMLTableSectionElement",tbody:"HTMLTableSectionElement",textarea:"HTMLTextAreaElement",track:"HTMLTrackElement",title:"HTMLTitleElement",ul:"HTMLUListElement",video:"HTMLVideoElement"};Object.keys(c).forEach(b),Object.getOwnPropertyNames(a.wrappers).forEach(function(b){window[b]=a.wrappers[b]}),a.knownElements=c}(this.ShadowDOMPolyfill),function(){var a=window.ShadowDOMPolyfill;a.wrap,Object.defineProperties(HTMLElement.prototype,{webkitShadowRoot:{get:function(){return this.shadowRoot}}}),HTMLElement.prototype.webkitCreateShadowRoot=HTMLElement.prototype.createShadowRoot,window.dartExperimentalFixupGetTag=function(b){function c(a){if(a instanceof d)return"NodeList";if(a instanceof e)return"ShadowRoot";if(window.MutationRecord&&a instanceof MutationRecord)return"MutationRecord";if(window.MutationObserver&&a instanceof MutationObserver)return"MutationObserver";if(a instanceof HTMLTemplateElement)return"HTMLTemplateElement";var c=f(a);if(a!==c){var g=a.constructor;if(g===c.constructor){var h=g._ShadowDOMPolyfill$cacheTag_;return h||(h=Object.prototype.toString.call(c),h=h.substring(8,h.length-1),g._ShadowDOMPolyfill$cacheTag_=h),h}a=c}return b(a)}var d=a.wrappers.NodeList,e=a.wrappers.ShadowRoot,f=a.unwrapIfNeeded;return c}}();var Platform={};!function(a){function b(a,b){var c="";return Array.prototype.forEach.call(a,function(a){c+=a.textContent+"\n\n"}),b||(c=c.replace(n,"")),c}function c(a){var b=document.createElement("style");return b.textContent=a,b}function d(a){var b=c(a);document.head.appendChild(b);var d=b.sheet.cssRules;return b.parentNode.removeChild(b),d}function e(a){for(var b=0,c=[];b<a.length;b++)c.push(a[b].cssText);return c.join("\n\n")}function f(a){a&&g().appendChild(document.createTextNode(a))}function g(){return h||(h=document.createElement("style"),h.setAttribute("ShadowCSSShim","")),h}var h,i={strictStyling:!1,registry:{},shimStyling:function(a,b,d){var e=this.isTypeExtension(d),g=this.registerDefinition(a,b,d);this.strictStyling&&this.applyScopeToContent(a,b),this.insertPolyfillDirectives(g.rootStyles),this.insertPolyfillRules(g.rootStyles);var h=this.stylesToShimmedCssText(g.scopeStyles,b,e);h+=this.extractPolyfillUnscopedRules(g.rootStyles),g.shimmedStyle=c(h),a&&(a.shimmedStyle=g.shimmedStyle);for(var i,j=0,k=g.rootStyles.length;k>j&&(i=g.rootStyles[j]);j++)i.parentNode.removeChild(i);f(h)},registerDefinition:function(a,b,c){var d=this.registry[b]={root:a,name:b,extendsName:c},e=a?a.querySelectorAll("style"):[];e=e?Array.prototype.slice.call(e,0):[],d.rootStyles=e,d.scopeStyles=d.rootStyles;var f=this.registry[d.extendsName];return!f||a&&!a.querySelector("shadow")||(d.scopeStyles=f.scopeStyles.concat(d.scopeStyles)),d},isTypeExtension:function(a){return a&&a.indexOf("-")<0},applyScopeToContent:function(a,b){a&&(Array.prototype.forEach.call(a.querySelectorAll("*"),function(a){a.setAttribute(b,"")}),Array.prototype.forEach.call(a.querySelectorAll("template"),function(a){this.applyScopeToContent(a.content,b)},this))},insertPolyfillDirectives:function(a){a&&Array.prototype.forEach.call(a,function(a){a.textContent=this.insertPolyfillDirectivesInCssText(a.textContent)},this)},insertPolyfillDirectivesInCssText:function(a){return a.replace(o,function(a,b){return b.slice(0,-2)+"{"})},insertPolyfillRules:function(a){a&&Array.prototype.forEach.call(a,function(a){a.textContent=this.insertPolyfillRulesInCssText(a.textContent)},this)},insertPolyfillRulesInCssText:function(a){return a.replace(p,function(a,b){return b.slice(0,-1)})},extractPolyfillUnscopedRules:function(a){var b="";return a&&Array.prototype.forEach.call(a,function(a){b+=this.extractPolyfillUnscopedRulesFromCssText(a.textContent)+"\n\n"},this),b},extractPolyfillUnscopedRulesFromCssText:function(a){for(var b,c="";b=q.exec(a);)c+=b[1].slice(0,-1)+"\n\n";return c},stylesToShimmedCssText:function(a,b,c){return this.shimAtHost(a,b,c)+this.shimScoping(a,b,c)},shimAtHost:function(a,b,c){return a?this.convertAtHostStyles(a,b,c):void 0},convertAtHostStyles:function(a,c,f){var g=b(a),h=this;return g=g.replace(j,function(a,b){return h.scopeHostCss(b,c,f)}),g=e(this.findAtHostRules(d(g),this.makeScopeMatcher(c,f)))
+},scopeHostCss:function(a,b,c){var d=this;return a.replace(k,function(a,e,f){return d.scopeHostSelector(e,b,c)+" "+f+"\n "})},scopeHostSelector:function(a,b,c){var d=[],e=a.split(","),f="[is="+b+"]";return e.forEach(function(a){a=a.trim(),a.match(l)?a=a.replace(l,c?f+"$1$3":b+"$1$3"):a.match(m)&&(a=c?f+a:b+a),d.push(a)},this),d.join(", ")},findAtHostRules:function(a,b){return Array.prototype.filter.call(a,this.isHostRule.bind(this,b))},isHostRule:function(a,b){return b.selectorText&&b.selectorText.match(a)||b.cssRules&&this.findAtHostRules(b.cssRules,a).length||b.type==CSSRule.WEBKIT_KEYFRAMES_RULE},shimScoping:function(a,b,c){return a?this.convertScopedStyles(a,b,c):void 0},convertScopedStyles:function(a,c,e){var f=b(a).replace(j,"");f=this.insertPolyfillHostInCssText(f),f=this.convertColonHost(f),f=this.convertPseudos(f),f=this.convertParts(f),f=this.convertCombinators(f);var g=d(f);return f=this.scopeRules(g,c,e)},convertPseudos:function(a){return a.replace(r," [pseudo=$1]")},convertParts:function(a){return a.replace(s," [part=$1]")},convertColonHost:function(a){return a.replace(t,function(a,b,c,d){return b=y,c?c.match(x)?b+c.replace(x,"")+d:b+c+d+", "+c+" "+b+d:b+d})},convertCombinators:function(a){return a.replace("^^"," ").replace("^"," ")},scopeRules:function(a,b,c){var d="";return Array.prototype.forEach.call(a,function(a){a.selectorText&&a.style&&a.style.cssText?(d+=this.scopeSelector(a.selectorText,b,c,this.strictStyling)+" {\n ",d+=this.propertiesFromRule(a)+"\n}\n\n"):a.media?(d+="@media "+a.media.mediaText+" {\n",d+=this.scopeRules(a.cssRules,b),d+="\n}\n\n"):a.cssText&&(d+=a.cssText+"\n\n")},this),d},scopeSelector:function(a,b,c,d){var e=[],f=a.split(",");return f.forEach(function(a){a=a.trim(),this.selectorNeedsScoping(a,b,c)&&(a=d?this.applyStrictSelectorScope(a,b):this.applySimpleSelectorScope(a,b,c)),e.push(a)},this),e.join(", ")},selectorNeedsScoping:function(a,b,c){var d=this.makeScopeMatcher(b,c);return!a.match(d)},makeScopeMatcher:function(a,b){var c=b?"\\[is=['\"]?"+a+"['\"]?\\]":a;return new RegExp("^("+c+")"+u,"m")},applySimpleSelectorScope:function(a,b,c){var d=c?"[is="+b+"]":b;return a.match(z)?(a=a.replace(y,d),a.replace(z,d+" ")):d+" "+a},applyStrictSelectorScope:function(a,b){var c=[" ",">","+","~"],d=a,e="["+b+"]";return c.forEach(function(a){var b=d.split(a);d=b.map(function(a){var b=a.trim().replace(z,"");return b&&c.indexOf(b)<0&&b.indexOf(e)<0&&(a=b.replace(/([^:]*)(:*)(.*)/,"$1"+e+"$2$3")),a}).join(a)}),d},insertPolyfillHostInCssText:function(a){return a.replace(v,x).replace(w,x)},propertiesFromRule:function(a){var b=a.style.cssText;return a.style.content&&!a.style.content.match(/['"]+/)&&(b="content: '"+a.style.content+"';\n"+a.style.cssText.replace(/content:[^;]*;/g,"")),b}},j=/@host[^{]*{(([^}]*?{[^{]*?}[\s\S]*?)+)}/gim,k=/([^{]*)({[\s\S]*?})/gim,l=/(.*)((?:\*)|(?:\:scope))(.*)/,m=/^[.\[:]/,n=/\/\*[^*]*\*+([^/*][^*]*\*+)*\//gim,o=/\/\*\s*@polyfill ([^*]*\*+([^/*][^*]*\*+)*\/)([^{]*?){/gim,p=/\/\*\s@polyfill-rule([^*]*\*+([^/*][^*]*\*+)*)\//gim,q=/\/\*\s@polyfill-unscoped-rule([^*]*\*+([^/*][^*]*\*+)*)\//gim,r=/::(x-[^\s{,(]*)/gim,s=/::part\(([^)]*)\)/gim,t=/(-host)(?:\(([^)]*)\))?([^,{]*)/gim,u="([>\\s~+[.,{:][\\s\\S]*)?$",v=/@host/gim,w=/\:host/gim,x="-host",y="-host-no-combinator",z=/-host/gim;if(window.ShadowDOMPolyfill){f("style { display: none !important; }\n");var A=document.querySelector("head");A.insertBefore(g(),A.childNodes[0])}a.ShadowCSS=i}(window.Platform)}
\ No newline at end of file
diff --git a/pkg/shadow_dom/lib/src/platform/ShadowCSS.js b/pkg/shadow_dom/lib/src/platform/ShadowCSS.js
deleted file mode 100644
index 49fde56..0000000
--- a/pkg/shadow_dom/lib/src/platform/ShadowCSS.js
+++ /dev/null
@@ -1,574 +0,0 @@
-/*
- * Copyright 2012 The Polymer Authors. All rights reserved.
- * Use of this source code is governed by a BSD-style
- * license that can be found in the LICENSE file.
- */
-
-/*
- This is a limited shim for ShadowDOM css styling.
- https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/shadow/index.html#styles
-
- The intention here is to support only the styling features which can be
- relatively simply implemented. The goal is to allow users to avoid the
- most obvious pitfalls and do so without compromising performance significantly.
- For ShadowDOM styling that's not covered here, a set of best practices
- can be provided that should allow users to accomplish more complex styling.
-
- The following is a list of specific ShadowDOM styling features and a brief
- discussion of the approach used to shim.
-
- Shimmed features:
-
- * @host: ShadowDOM allows styling of the shadowRoot's host element using the
- @host rule. To shim this feature, the @host styles are reformatted and
- prefixed with a given scope name and promoted to a document level stylesheet.
- For example, given a scope name of .foo, a rule like this:
-
- @host {
- * {
- background: red;
- }
- }
-
- becomes:
-
- .foo {
- background: red;
- }
-
- * encapsultion: Styles defined within ShadowDOM, apply only to
- dom inside the ShadowDOM. Polymer uses one of two techniques to imlement
- this feature.
-
- By default, rules are prefixed with the host element tag name
- as a descendant selector. This ensures styling does not leak out of the 'top'
- of the element's ShadowDOM. For example,
-
- div {
- font-weight: bold;
- }
-
- becomes:
-
- x-foo div {
- font-weight: bold;
- }
-
- becomes:
-
-
- Alternatively, if Platform.ShadowCSS.strictStyling is set to true then
- selectors are scoped by adding an attribute selector suffix to each
- simple selector that contains the host element tag name. Each element
- in the element's ShadowDOM template is also given the scope attribute.
- Thus, these rules match only elements that have the scope attribute.
- For example, given a scope name of x-foo, a rule like this:
-
- div {
- font-weight: bold;
- }
-
- becomes:
-
- div[x-foo] {
- font-weight: bold;
- }
-
- Note that elements that are dynamically added to a scope must have the scope
- selector added to them manually.
-
- * ::pseudo: These rules are converted to rules that take advantage of the
- pseudo attribute. For example, a shadowRoot like this inside an x-foo
-
- <div pseudo="x-special">Special</div>
-
- with a rule like this:
-
- x-foo::x-special { ... }
-
- becomes:
-
- x-foo [pseudo=x-special] { ... }
-
- * ::part(): These rules are converted to rules that take advantage of the
- part attribute. For example, a shadowRoot like this inside an x-foo
-
- <div part="special">Special</div>
-
- with a rule like this:
-
- x-foo::part(special) { ... }
-
- becomes:
-
- x-foo [part=special] { ... }
-
- Unaddressed ShadowDOM styling features:
-
- * upper/lower bound encapsulation: Styles which are defined outside a
- shadowRoot should not cross the ShadowDOM boundary and should not apply
- inside a shadowRoot.
-
- This styling behavior is not emulated. Some possible ways to do this that
- were rejected due to complexity and/or performance concerns include: (1) reset
- every possible property for every possible selector for a given scope name;
- (2) re-implement css in javascript.
-
- As an alternative, users should make sure to use selectors
- specific to the scope in which they are working.
-
- * ::distributed: This behavior is not emulated. It's often not necessary
- to style the contents of a specific insertion point and instead, descendants
- of the host element can be styled selectively. Users can also create an
- extra node around an insertion point and style that node's contents
- via descendent selectors. For example, with a shadowRoot like this:
-
- <style>
- content::-webkit-distributed(div) {
- background: red;
- }
- </style>
- <content></content>
-
- could become:
-
- <style>
- / *@polyfill .content-container div * /
- content::-webkit-distributed(div) {
- background: red;
- }
- </style>
- <div class="content-container">
- <content></content>
- </div>
-
- Note the use of @polyfill in the comment above a ShadowDOM specific style
- declaration. This is a directive to the styling shim to use the selector
- in comments in lieu of the next selector when running under polyfill.
-*/
-(function(scope) {
-
-var ShadowCSS = {
- strictStyling: false,
- registry: {},
- // Shim styles for a given root associated with a name and extendsName
- // 1. cache root styles by name
- // 2. optionally tag root nodes with scope name
- // 3. shim polyfill directives /* @polyfill */ and /* @polyfill-rule */
- // 4. shim @host and scoping
- shimStyling: function(root, name, extendsName) {
- var typeExtension = this.isTypeExtension(extendsName);
- // use caching to make working with styles nodes easier and to facilitate
- // lookup of extendee
- var def = this.registerDefinition(root, name, extendsName);
- // find styles and apply shimming...
- if (this.strictStyling) {
- this.applyScopeToContent(root, name);
- }
- // insert @polyfill and @polyfill-rule rules into style elements
- // scoping process takes care of shimming these
- this.insertPolyfillDirectives(def.rootStyles);
- this.insertPolyfillRules(def.rootStyles);
- var cssText = this.stylesToShimmedCssText(def.scopeStyles, name,
- typeExtension);
- // note: we only need to do rootStyles since these are unscoped.
- cssText += this.extractPolyfillUnscopedRules(def.rootStyles);
- // provide shimmedStyle for user extensibility
- def.shimmedStyle = cssTextToStyle(cssText);
- if (root) {
- root.shimmedStyle = def.shimmedStyle;
- }
- // remove existing style elements
- for (var i=0, l=def.rootStyles.length, s; (i<l) && (s=def.rootStyles[i]);
- i++) {
- s.parentNode.removeChild(s);
- }
- // add style to document
- addCssToDocument(cssText);
- },
- registerDefinition: function(root, name, extendsName) {
- var def = this.registry[name] = {
- root: root,
- name: name,
- extendsName: extendsName
- }
- var styles = root ? root.querySelectorAll('style') : [];
- styles = styles ? Array.prototype.slice.call(styles, 0) : [];
- def.rootStyles = styles;
- def.scopeStyles = def.rootStyles;
- var extendee = this.registry[def.extendsName];
- if (extendee && (!root || root.querySelector('shadow'))) {
- def.scopeStyles = extendee.scopeStyles.concat(def.scopeStyles);
- }
- return def;
- },
- isTypeExtension: function(extendsName) {
- return extendsName && extendsName.indexOf('-') < 0;
- },
- applyScopeToContent: function(root, name) {
- if (root) {
- // add the name attribute to each node in root.
- Array.prototype.forEach.call(root.querySelectorAll('*'),
- function(node) {
- node.setAttribute(name, '');
- });
- // and template contents too
- Array.prototype.forEach.call(root.querySelectorAll('template'),
- function(template) {
- this.applyScopeToContent(template.content, name);
- },
- this);
- }
- },
- /*
- * Process styles to convert native ShadowDOM rules that will trip
- * up the css parser; we rely on decorating the stylesheet with comments.
- *
- * For example, we convert this rule:
- *
- * (comment start) @polyfill :host menu-item (comment end)
- * shadow::-webkit-distributed(menu-item) {
- *
- * to this:
- *
- * scopeName menu-item {
- *
- **/
- insertPolyfillDirectives: function(styles) {
- if (styles) {
- Array.prototype.forEach.call(styles, function(s) {
- s.textContent = this.insertPolyfillDirectivesInCssText(s.textContent);
- }, this);
- }
- },
- insertPolyfillDirectivesInCssText: function(cssText) {
- return cssText.replace(cssPolyfillCommentRe, function(match, p1) {
- // remove end comment delimiter and add block start
- return p1.slice(0, -2) + '{';
- });
- },
- /*
- * Process styles to add rules which will only apply under the polyfill
- *
- * For example, we convert this rule:
- *
- * (comment start) @polyfill-rule :host menu-item {
- * ... } (comment end)
- *
- * to this:
- *
- * scopeName menu-item {...}
- *
- **/
- insertPolyfillRules: function(styles) {
- if (styles) {
- Array.prototype.forEach.call(styles, function(s) {
- s.textContent = this.insertPolyfillRulesInCssText(s.textContent);
- }, this);
- }
- },
- insertPolyfillRulesInCssText: function(cssText) {
- return cssText.replace(cssPolyfillRuleCommentRe, function(match, p1) {
- // remove end comment delimiter
- return p1.slice(0, -1);
- });
- },
- /*
- * Process styles to add rules which will only apply under the polyfill
- * and do not process via CSSOM. (CSSOM is destructive to rules on rare
- * occasions, e.g. -webkit-calc on Safari.)
- * For example, we convert this rule:
- *
- * (comment start) @polyfill-unscoped-rule menu-item {
- * ... } (comment end)
- *
- * to this:
- *
- * menu-item {...}
- *
- **/
- extractPolyfillUnscopedRules: function(styles) {
- var cssText = '';
- if (styles) {
- Array.prototype.forEach.call(styles, function(s) {
- cssText += this.extractPolyfillUnscopedRulesFromCssText(
- s.textContent) + '\n\n';
- }, this);
- }
- return cssText;
- },
- extractPolyfillUnscopedRulesFromCssText: function(cssText) {
- var r = '', matches;
- while (matches = cssPolyfillUnscopedRuleCommentRe.exec(cssText)) {
- r += matches[1].slice(0, -1) + '\n\n';
- }
- return r;
- },
- // apply @host and scope shimming
- stylesToShimmedCssText: function(styles, name, typeExtension) {
- return this.shimAtHost(styles, name, typeExtension) +
- this.shimScoping(styles, name, typeExtension);
- },
- // form: @host { .foo { declarations } }
- // becomes: scopeName.foo { declarations }
- shimAtHost: function(styles, name, typeExtension) {
- if (styles) {
- return this.convertAtHostStyles(styles, name, typeExtension);
- }
- },
- convertAtHostStyles: function(styles, name, typeExtension) {
- var cssText = stylesToCssText(styles), self = this;
- cssText = cssText.replace(hostRuleRe, function(m, p1) {
- return self.scopeHostCss(p1, name, typeExtension);
- });
- cssText = rulesToCss(this.findAtHostRules(cssToRules(cssText),
- new RegExp('^' + name + selectorReSuffix, 'm')));
- return cssText;
- },
- scopeHostCss: function(cssText, name, typeExtension) {
- var self = this;
- return cssText.replace(selectorRe, function(m, p1, p2) {
- return self.scopeHostSelector(p1, name, typeExtension) + ' ' + p2 + '\n\t';
- });
- },
- // supports scopig by name and [is=name] syntax
- scopeHostSelector: function(selector, name, typeExtension) {
- var r = [], parts = selector.split(','), is = '[is=' + name + ']';
- parts.forEach(function(p) {
- p = p.trim();
- // selector: *|:scope -> name
- if (p.match(hostElementRe)) {
- p = p.replace(hostElementRe, typeExtension ? is + '$1$3' :
- name + '$1$3');
- // selector: .foo -> name.foo (OR) [bar] -> name[bar]
- } else if (p.match(hostFixableRe)) {
- p = typeExtension ? is + p : name + p;
- }
- r.push(p);
- }, this);
- return r.join(', ');
- },
- // consider styles that do not include component name in the selector to be
- // unscoped and in need of promotion;
- // for convenience, also consider keyframe rules this way.
- findAtHostRules: function(cssRules, matcher) {
- return Array.prototype.filter.call(cssRules,
- this.isHostRule.bind(this, matcher));
- },
- isHostRule: function(matcher, cssRule) {
- return (cssRule.selectorText && cssRule.selectorText.match(matcher)) ||
- (cssRule.cssRules && this.findAtHostRules(cssRule.cssRules, matcher).length) ||
- (cssRule.type == CSSRule.WEBKIT_KEYFRAMES_RULE);
- },
- /* Ensure styles are scoped. Pseudo-scoping takes a rule like:
- *
- * .foo {... }
- *
- * and converts this to
- *
- * scopeName .foo { ... }
- */
- shimScoping: function(styles, name, typeExtension) {
- if (styles) {
- return this.convertScopedStyles(styles, name, typeExtension);
- }
- },
- convertScopedStyles: function(styles, name, typeExtension) {
- var cssText = stylesToCssText(styles).replace(hostRuleRe, '');
- cssText = this.insertPolyfillHostInCssText(cssText);
- cssText = this.convertColonHost(cssText);
- cssText = this.convertPseudos(cssText);
- cssText = this.convertParts(cssText);
- cssText = this.convertCombinators(cssText);
- var rules = cssToRules(cssText);
- cssText = this.scopeRules(rules, name, typeExtension);
- return cssText;
- },
- convertPseudos: function(cssText) {
- return cssText.replace(cssPseudoRe, ' [pseudo=$1]');
- },
- convertParts: function(cssText) {
- return cssText.replace(cssPartRe, ' [part=$1]');
- },
- /*
- * convert a rule like :host(.foo) > .bar { }
- *
- * to
- *
- * scopeName.foo > .bar, .foo scopeName > .bar { }
- * TODO(sorvell): file bug since native impl does not do the former yet.
- * http://jsbin.com/OganOCI/2/edit
- */
- convertColonHost: function(cssText) {
- // p1 = :host, p2 = contents of (), p3 rest of rule
- return cssText.replace(cssColonHostRe, function(m, p1, p2, p3) {
- return p2 ? polyfillHostNoCombinator + p2 + p3 + ', '
- + p2 + ' ' + p1 + p3 :
- p1 + p3;
- });
- },
- /*
- * Convert ^ and ^^ combinators by replacing with space.
- */
- convertCombinators: function(cssText) {
- return cssText.replace('^^', ' ').replace('^', ' ');
- },
- // change a selector like 'div' to 'name div'
- scopeRules: function(cssRules, name, typeExtension) {
- var cssText = '';
- Array.prototype.forEach.call(cssRules, function(rule) {
- if (rule.selectorText && (rule.style && rule.style.cssText)) {
- cssText += this.scopeSelector(rule.selectorText, name, typeExtension,
- this.strictStyling) + ' {\n\t';
- cssText += this.propertiesFromRule(rule) + '\n}\n\n';
- } else if (rule.media) {
- cssText += '@media ' + rule.media.mediaText + ' {\n';
- cssText += this.scopeRules(rule.cssRules, name);
- cssText += '\n}\n\n';
- } else if (rule.cssText) {
- cssText += rule.cssText + '\n\n';
- }
- }, this);
- return cssText;
- },
- scopeSelector: function(selector, name, typeExtension, strict) {
- var r = [], parts = selector.split(',');
- parts.forEach(function(p) {
- p = p.trim();
- if (this.selectorNeedsScoping(p, name, typeExtension)) {
- p = strict ? this.applyStrictSelectorScope(p, name) :
- this.applySimpleSelectorScope(p, name, typeExtension);
- }
- r.push(p);
- }, this);
- return r.join(', ');
- },
- selectorNeedsScoping: function(selector, name, typeExtension) {
- var matchScope = typeExtension ? name : '\\[is=' + name + '\\]';
- var re = new RegExp('^(' + matchScope + ')' + selectorReSuffix, 'm');
- return !selector.match(re);
- },
- // scope via name and [is=name]
- applySimpleSelectorScope: function(selector, name, typeExtension) {
- var scoper = typeExtension ? '[is=' + name + ']' : name;
- if (selector.match(polyfillHostRe)) {
- selector = selector.replace(polyfillHostNoCombinator, scoper);
- return selector.replace(polyfillHostRe, scoper + ' ');
- } else {
- return scoper + ' ' + selector;
- }
- },
- // return a selector with [name] suffix on each simple selector
- // e.g. .foo.bar > .zot becomes .foo[name].bar[name] > .zot[name]
- applyStrictSelectorScope: function(selector, name) {
- var splits = [' ', '>', '+', '~'],
- scoped = selector,
- attrName = '[' + name + ']';
- splits.forEach(function(sep) {
- var parts = scoped.split(sep);
- scoped = parts.map(function(p) {
- // remove :host since it should be unnecessary
- var t = p.trim().replace(polyfillHostRe, '');
- if (t && (splits.indexOf(t) < 0) && (t.indexOf(attrName) < 0)) {
- p = t.replace(/([^:]*)(:*)(.*)/, '$1' + attrName + '$2$3')
- }
- return p;
- }).join(sep);
- });
- return scoped;
- },
- insertPolyfillHostInCssText: function(selector) {
- return selector.replace(hostRe, polyfillHost).replace(colonHostRe,
- polyfillHost);
- },
- propertiesFromRule: function(rule) {
- var properties = rule.style.cssText;
- // TODO(sorvell): Chrome cssom incorrectly removes quotes from the content
- // property. (https://code.google.com/p/chromium/issues/detail?id=247231)
- if (rule.style.content && !rule.style.content.match(/['"]+/)) {
- properties = 'content: \'' + rule.style.content + '\';\n' +
- rule.style.cssText.replace(/content:[^;]*;/g, '');
- }
- return properties;
- }
-};
-
-var hostRuleRe = /@host[^{]*{(([^}]*?{[^{]*?}[\s\S]*?)+)}/gim,
- selectorRe = /([^{]*)({[\s\S]*?})/gim,
- hostElementRe = /(.*)((?:\*)|(?:\:scope))(.*)/,
- hostFixableRe = /^[.\[:]/,
- cssCommentRe = /\/\*[^*]*\*+([^/*][^*]*\*+)*\//gim,
- cssPolyfillCommentRe = /\/\*\s*@polyfill ([^*]*\*+([^/*][^*]*\*+)*\/)([^{]*?){/gim,
- cssPolyfillRuleCommentRe = /\/\*\s@polyfill-rule([^*]*\*+([^/*][^*]*\*+)*)\//gim,
- cssPolyfillUnscopedRuleCommentRe = /\/\*\s@polyfill-unscoped-rule([^*]*\*+([^/*][^*]*\*+)*)\//gim,
- cssPseudoRe = /::(x-[^\s{,(]*)/gim,
- cssPartRe = /::part\(([^)]*)\)/gim,
- // note: :host pre-processed to -host.
- cssColonHostRe = /(-host)(?:\(([^)]*)\))?([^,{]*)/gim,
- selectorReSuffix = '([>\\s~+\[.,{:][\\s\\S]*)?$',
- hostRe = /@host/gim,
- colonHostRe = /\:host/gim,
- polyfillHost = '-host',
- /* host name without combinator */
- polyfillHostNoCombinator = '-host-no-combinator',
- polyfillHostRe = /-host/gim;
-
-function stylesToCssText(styles, preserveComments) {
- var cssText = '';
- Array.prototype.forEach.call(styles, function(s) {
- cssText += s.textContent + '\n\n';
- });
- // strip comments for easier processing
- if (!preserveComments) {
- cssText = cssText.replace(cssCommentRe, '');
- }
- return cssText;
-}
-
-function cssTextToStyle(cssText) {
- var style = document.createElement('style');
- style.textContent = cssText;
- return style;
-}
-
-function cssToRules(cssText) {
- var style = cssTextToStyle(cssText);
- document.head.appendChild(style);
- var rules = style.sheet.cssRules;
- style.parentNode.removeChild(style);
- return rules;
-}
-
-function rulesToCss(cssRules) {
- for (var i=0, css=[]; i < cssRules.length; i++) {
- css.push(cssRules[i].cssText);
- }
- return css.join('\n\n');
-}
-
-function addCssToDocument(cssText) {
- if (cssText) {
- getSheet().appendChild(document.createTextNode(cssText));
- }
-}
-
-var sheet;
-function getSheet() {
- if (!sheet) {
- sheet = document.createElement("style");
- sheet.setAttribute('ShadowCSSShim', '');
- }
- return sheet;
-}
-
-// add polyfill stylesheet to document
-if (window.ShadowDOMPolyfill) {
- addCssToDocument('style { display: none !important; }\n');
- var head = document.querySelector('head');
- head.insertBefore(getSheet(), head.childNodes[0]);
-}
-
-// exports
-scope.ShadowCSS = ShadowCSS;
-
-})(window.Platform);
diff --git a/pkg/shadow_dom/tool/build.json b/pkg/shadow_dom/tool/build.json
index 7834f81..8c2b7be 100644
--- a/pkg/shadow_dom/tool/build.json
+++ b/pkg/shadow_dom/tool/build.json
@@ -4,6 +4,6 @@
"../../../third_party/polymer/ShadowDOM/build.json",
"../lib/src/platform/patches-shadowdom-polyfill.js",
"../lib/src/platform/platform-init.js",
- "../lib/src/platform/ShadowCSS.js",
+ "../../../third_party/polymer/platform/src/ShadowCSS.js",
"build/end-if.js"
]
diff --git a/pkg/shadow_dom/tool/build.sh b/pkg/shadow_dom/tool/build.sh
index b10ebe7..10cd859 100755
--- a/pkg/shadow_dom/tool/build.sh
+++ b/pkg/shadow_dom/tool/build.sh
@@ -16,7 +16,9 @@
POLYMER_REMOTE=https://github.com/Polymer
POLYMER_DIR=../../../third_party/polymer
-for NAME in ShadowDOM observe-js WeakMap; do
+NEWLINE=$'\n'
+REVISIONS=""
+for NAME in ShadowDOM observe-js WeakMap platform; do
GIT_REMOTE="$POLYMER_REMOTE/$NAME.git"
GIT_DIR="$POLYMER_DIR/$NAME"
echo "*** Syncing $GIT_DIR from $GIT_REMOTE"
@@ -28,6 +30,9 @@
else
git clone $GIT_REMOTE $GIT_DIR
fi
+ pushd $GIT_DIR > /dev/null
+ REVISIONS="$REVISIONS $NEWLINE $NAME is at revision `git rev-parse HEAD`"
+ popd
done
echo '*** Installing NPM prerequisites'
@@ -35,3 +40,5 @@
echo '*** Running grunt'
grunt
+
+echo "*** Revision hash to use in commit message: $REVISIONS"
diff --git a/runtime/bin/builtin.dart b/runtime/bin/builtin.dart
index 7546f40..8d8145e 100644
--- a/runtime/bin/builtin.dart
+++ b/runtime/bin/builtin.dart
@@ -4,6 +4,13 @@
library builtin;
import 'dart:io';
+// import 'root_library'; happens here from C Code
+
+// The root library (aka the script) is imported into this library. The
+// standalone embedder uses this to lookup the main entrypoint in the
+// root library's namespace.
+Function _getMainClosure() => main;
+
// Corelib 'print' implementation.
void _print(arg) {
diff --git a/runtime/bin/main.cc b/runtime/bin/main.cc
index fae077d..62af0f3 100644
--- a/runtime/bin/main.cc
+++ b/runtime/bin/main.cc
@@ -897,6 +897,14 @@
ASSERT(bytes_written);
delete snapshot_file;
} else {
+ // Lookup the library of the root script.
+ Dart_Handle root_lib = Dart_RootLibrary();
+ // Import the root library into the builtin library so that we can easily
+ // lookup the main entry point exported from the root library.
+ Dart_Handle builtin_lib =
+ Builtin::LoadAndCheckLibrary(Builtin::kBuiltinLibrary);
+ result = Dart_LibraryImportLibrary(builtin_lib, root_lib, Dart_Null());
+
if (has_compile_all) {
result = Dart_CompileAll();
if (Dart_IsError(result)) {
@@ -911,60 +919,65 @@
}
}
- // Lookup the library of the root script.
- Dart_Handle library = Dart_RootLibrary();
- if (Dart_IsNull(library)) {
+ if (Dart_IsNull(root_lib)) {
return ErrorExit(kErrorExitCode,
"Unable to find root library for '%s'\n",
script_name);
}
- // Set debug breakpoint if specified on the command line.
- if (breakpoint_at != NULL) {
- result = SetBreakpoint(breakpoint_at, library);
- if (Dart_IsError(result)) {
- return ErrorExit(kErrorExitCode,
- "Error setting breakpoint at '%s': %s\n",
- breakpoint_at,
- Dart_GetError(result));
- }
- }
if (has_print_script) {
result = GenerateScriptSource();
if (Dart_IsError(result)) {
return DartErrorExit(result);
}
} else {
- // Lookup and invoke the top level main function.
- // The top-level function may accept up to two arguments:
- // main(List<String> args, var message).
- // However most commonly it either accepts one (the args list) or
- // none.
- // If the message is optional, main(args, [message]), it is invoked with
- // one argument only.
- Dart_Handle main_args[2];
- main_args[0] = CreateRuntimeOptions(&dart_options);
- main_args[1] = Dart_Null();
- // First try with 1 argument.
- result = Dart_Invoke(library, DartUtils::NewString("main"), 1, main_args);
- // TODO(iposva): Return a special error type for mismatched argument
- // counts from Dart_Invoke to avoid the string comparison.
- const char* expected_error = "Dart_Invoke: wrong argument count for "
- "function 'main': ";
- intptr_t length = strlen(expected_error);
- if (Dart_IsError(result) &&
- strncmp(expected_error, Dart_GetError(result), length) == 0) {
- // Try with two arguments.
- result =
- Dart_Invoke(library, DartUtils::NewString("main"), 2, main_args);
- if (Dart_IsError(result) &&
- strncmp(expected_error, Dart_GetError(result), length) == 0) {
- // Finally try with 0 arguments.
- result = Dart_Invoke(library, DartUtils::NewString("main"), 0, NULL);
+ // The helper function _getMainClosure creates a closure for the main
+ // entry point which is either explicitly or implictly exported from the
+ // root library.
+ Dart_Handle main_closure = Dart_Invoke(
+ builtin_lib, Dart_NewStringFromCString("_getMainClosure"), 0, NULL);
+ if (Dart_IsError(main_closure)) {
+ return DartErrorExit(result);
+ }
+
+ // Set debug breakpoint if specified on the command line before calling
+ // the main function.
+ if (breakpoint_at != NULL) {
+ result = SetBreakpoint(breakpoint_at, root_lib);
+ if (Dart_IsError(result)) {
+ return ErrorExit(kErrorExitCode,
+ "Error setting breakpoint at '%s': %s\n",
+ breakpoint_at,
+ Dart_GetError(result));
}
}
+
+ // Call _startIsolate in the isolate library to enable dispatching the
+ // initial startup message.
+ Dart_Handle isolate_args[2];
+ isolate_args[0] = main_closure;
+ isolate_args[1] = Dart_True();
+
+ Dart_Handle isolate_lib = Dart_LookupLibrary(
+ Dart_NewStringFromCString("dart:isolate"));
+ result = Dart_Invoke(isolate_lib,
+ Dart_NewStringFromCString("_startIsolate"),
+ 2, isolate_args);
+
+ // Setup the arguments in the initial startup message and leave the
+ // replyTo and message fields empty.
+ Dart_Handle initial_startup_msg = Dart_NewList(3);
+ result = Dart_ListSetAt(initial_startup_msg, 1,
+ CreateRuntimeOptions(&dart_options));
if (Dart_IsError(result)) {
return DartErrorExit(result);
}
+ Dart_Port main_port = Dart_GetMainPortId();
+ bool posted = Dart_Post(main_port, initial_startup_msg);
+ if (!posted) {
+ return ErrorExit(kErrorExitCode,
+ "Failed posting startup message to main "
+ "isolate control port.");
+ }
// Keep handling messages until the last active receive port is closed.
result = Dart_RunLoop();
diff --git a/runtime/bin/socket_patch.dart b/runtime/bin/socket_patch.dart
index 2c1990d..e57d193 100644
--- a/runtime/bin/socket_patch.dart
+++ b/runtime/bin/socket_patch.dart
@@ -814,7 +814,7 @@
List<int> read([int len]) {
if (_isMacOSTerminalInput) {
- var available = available();
+ var available = this.available();
if (available == 0) return null;
var data = _socket.read(len);
if (data == null || data.length < available) {
diff --git a/runtime/bin/vmservice/client/web/index.html b/runtime/bin/vmservice/client/web/index.html
index c2dbabd..48a9cbd 100644
--- a/runtime/bin/vmservice/client/web/index.html
+++ b/runtime/bin/vmservice/client/web/index.html
@@ -5,11 +5,7 @@
<link type="text/css" rel="stylesheet"
href="bootstrap_css/css/bootstrap.min.css" />
<link rel="import" href="packages/observatory/observatory_elements.html">
- <script type='application/dart'>
- import 'package:polymer/init.dart';
- // this export won't be needed after we fix issue 14542
- export 'package:polymer/init.dart';
- </script>
+ <script type='application/dart'>export 'package:polymer/init.dart';</script>
<script src="packages/browser/dart.js"></script>
</head>
<body>
diff --git a/runtime/include/dart_api.h b/runtime/include/dart_api.h
index 6fe83fe..c346ea4 100755
--- a/runtime/include/dart_api.h
+++ b/runtime/include/dart_api.h
@@ -2154,8 +2154,7 @@
/* TODO(turnidge): Finish documenting this section. */
typedef enum {
- Dart_kLibraryTag = 0,
- Dart_kImportTag,
+ Dart_kImportTag = 0,
Dart_kSourceTag,
Dart_kCanonicalizeUrl
} Dart_LibraryTag;
diff --git a/runtime/lib/collection_patch.dart b/runtime/lib/collection_patch.dart
index cdee5c4..81aa289 100644
--- a/runtime/lib/collection_patch.dart
+++ b/runtime/lib/collection_patch.dart
@@ -562,7 +562,7 @@
bool contains(Object object) {
int index = _hashCode(object) & (_buckets.length - 1);
- HashSetEntry entry = _buckets[index];
+ _HashSetEntry entry = _buckets[index];
while (entry != null) {
if (_equals(entry.key, object)) return true;
entry = entry.next;
@@ -572,7 +572,7 @@
E lookup(Object object) {
int index = _hashCode(object) & (_buckets.length - 1);
- HashSetEntry entry = _buckets[index];
+ _HashSetEntry entry = _buckets[index];
while (entry != null) {
var key = entry.key;
if (_equals(key, object)) return key;
@@ -586,7 +586,7 @@
bool add(E element) {
int hashCode = _hashCode(element);
int index = hashCode & (_buckets.length - 1);
- HashSetEntry entry = _buckets[index];
+ _HashSetEntry entry = _buckets[index];
while (entry != null) {
if (_equals(entry.key, element)) return false;
entry = entry.next;
@@ -641,8 +641,8 @@
void _filterWhere(bool test(E element), bool removeMatching) {
int length = _buckets.length;
for (int index = 0; index < length; index++) {
- HashSetEntry entry = _buckets[index];
- HashSetEntry previous = null;
+ _HashSetEntry entry = _buckets[index];
+ _HashSetEntry previous = null;
while (entry != null) {
int modificationCount = _modificationCount;
bool testResult = test(entry.key);
@@ -650,7 +650,7 @@
throw new ConcurrentModificationError(this);
}
if (testResult == removeMatching) {
- HashSetEntry next = entry.remove();
+ _HashSetEntry next = entry.remove();
if (previous == null) {
_buckets[index] = next;
} else {
diff --git a/runtime/lib/growable_array.dart b/runtime/lib/growable_array.dart
index d3f76db6..c3e6204 100644
--- a/runtime/lib/growable_array.dart
+++ b/runtime/lib/growable_array.dart
@@ -114,7 +114,7 @@
List<T> sublist(int start, [int end]) {
Arrays.indicesCheck(this, start, end);
- if (end == null) end = length;
+ if (end == null) end = this.length;
int length = end - start;
if (start == end) return <T>[];
List list = new _GrowableList<T>.withCapacity(length);
diff --git a/runtime/lib/isolate.cc b/runtime/lib/isolate.cc
index df716fc..f900083 100644
--- a/runtime/lib/isolate.cc
+++ b/runtime/lib/isolate.cc
@@ -266,6 +266,12 @@
if (port.IsError()) {
Exceptions::PropagateError(Error::Cast(port));
}
+
+ // The control port is being accessed as a regular port from Dart code. This
+ // is most likely due to the _startIsolate code in dart:isolate. Account for
+ // this by increasing the number of open control ports.
+ isolate->message_handler()->increment_control_ports();
+
return port.raw();
}
diff --git a/runtime/lib/isolate_patch.dart b/runtime/lib/isolate_patch.dart
index 2a08763..99d0d69 100644
--- a/runtime/lib/isolate_patch.dart
+++ b/runtime/lib/isolate_patch.dart
@@ -110,13 +110,8 @@
class _SendPortImpl implements SendPort {
/*--- public interface ---*/
- void send(var message, [SendPort replyTo = null]) {
- this._sendNow(message, replyTo);
- }
-
- void _sendNow(var message, SendPort replyTo) {
- int replyId = (replyTo == null) ? 0 : replyTo._id;
- _sendInternal(_id, replyId, message);
+ void send(var message) {
+ _sendInternal(_id, 0, message);
}
bool operator==(var other) {
@@ -145,6 +140,7 @@
// Forward the implementation of sending messages to the VM. Only port ids
// are being handed to the VM.
+ // TODO(14731): Remove replyId argument.
static _sendInternal(int sendId, int replyId, var message)
native "SendPortImpl_sendInternal_";
@@ -178,8 +174,10 @@
keepAlivePort.close();
SendPort replyTo = message[0];
- // TODO(floitsch): don't send ok-message if we can't find the entry point.
- replyTo.send("started");
+ if (replyTo != null) {
+ // TODO(floitsch): don't send ok-message if we can't find the entry point.
+ replyTo.send("started");
+ }
if (isSpawnUri) {
assert(message.length == 3);
List<String> args = message[1];
diff --git a/runtime/lib/mirrors_impl.dart b/runtime/lib/mirrors_impl.dart
index 6f76866..a2ab082 100644
--- a/runtime/lib/mirrors_impl.dart
+++ b/runtime/lib/mirrors_impl.dart
@@ -49,9 +49,10 @@
void clear() => _throw();
}
-// These values are allowed to be passed directly over the wire.
-bool _isSimpleValue(var value) {
- return (value == null || value is num || value is String || value is bool);
+class _InternalMirrorError {
+ const _InternalMirrorError(String this._msg);
+ String toString() => _msg;
+ final String _msg;
}
Map _filterMap(Map<Symbol, dynamic> old_map, bool filter(Symbol key, value)) {
@@ -216,19 +217,6 @@
value);
return reflect(value);
}
-
- static _validateArgument(int i, Object arg)
- {
- if (arg is Mirror) {
- if (arg is! InstanceMirror) {
- throw new MirrorException(
- 'positional argument $i ($arg) was not an InstanceMirror');
- }
- } else if (!_isSimpleValue(arg)) {
- throw new MirrorException(
- 'positional argument $i ($arg) was not a simple value');
- }
- }
}
class _LocalInstanceMirrorImpl extends _LocalObjectMirrorImpl
@@ -1252,7 +1240,7 @@
} else {
var parts = MirrorSystem.getName(simpleName).split('.');
if (parts.length > 2) {
- throw new MirrorException(
+ throw new _InternalMirrorError(
'Internal error in MethodMirror.constructorName: '
'malformed name <$simpleName>');
} else if (parts.length == 2) {
diff --git a/runtime/lib/simd128.cc b/runtime/lib/simd128.cc
index d2aaf68..2bda632 100644
--- a/runtime/lib/simd128.cc
+++ b/runtime/lib/simd128.cc
@@ -54,8 +54,8 @@
}
-DEFINE_NATIVE_ENTRY(Float32x4_fromUint32x4Bits, 2) {
- GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, v, arguments->NativeArgAt(1));
+DEFINE_NATIVE_ENTRY(Float32x4_fromInt32x4Bits, 2) {
+ GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, v, arguments->NativeArgAt(1));
return Float32x4::New(v.value());
}
@@ -122,7 +122,7 @@
uint32_t _y = a.y() < b.y() ? 0xFFFFFFFF : 0x0;
uint32_t _z = a.z() < b.z() ? 0xFFFFFFFF : 0x0;
uint32_t _w = a.w() < b.w() ? 0xFFFFFFFF : 0x0;
- return Uint32x4::New(_x, _y, _z, _w);
+ return Int32x4::New(_x, _y, _z, _w);
}
@@ -133,7 +133,7 @@
uint32_t _y = a.y() <= b.y() ? 0xFFFFFFFF : 0x0;
uint32_t _z = a.z() <= b.z() ? 0xFFFFFFFF : 0x0;
uint32_t _w = a.w() <= b.w() ? 0xFFFFFFFF : 0x0;
- return Uint32x4::New(_x, _y, _z, _w);
+ return Int32x4::New(_x, _y, _z, _w);
}
@@ -144,7 +144,7 @@
uint32_t _y = a.y() > b.y() ? 0xFFFFFFFF : 0x0;
uint32_t _z = a.z() > b.z() ? 0xFFFFFFFF : 0x0;
uint32_t _w = a.w() > b.w() ? 0xFFFFFFFF : 0x0;
- return Uint32x4::New(_x, _y, _z, _w);
+ return Int32x4::New(_x, _y, _z, _w);
}
@@ -155,7 +155,7 @@
uint32_t _y = a.y() >= b.y() ? 0xFFFFFFFF : 0x0;
uint32_t _z = a.z() >= b.z() ? 0xFFFFFFFF : 0x0;
uint32_t _w = a.w() >= b.w() ? 0xFFFFFFFF : 0x0;
- return Uint32x4::New(_x, _y, _z, _w);
+ return Int32x4::New(_x, _y, _z, _w);
}
@@ -166,7 +166,7 @@
uint32_t _y = a.y() == b.y() ? 0xFFFFFFFF : 0x0;
uint32_t _z = a.z() == b.z() ? 0xFFFFFFFF : 0x0;
uint32_t _w = a.w() == b.w() ? 0xFFFFFFFF : 0x0;
- return Uint32x4::New(_x, _y, _z, _w);
+ return Int32x4::New(_x, _y, _z, _w);
}
@@ -177,7 +177,7 @@
uint32_t _y = a.y() != b.y() ? 0xFFFFFFFF : 0x0;
uint32_t _z = a.z() != b.z() ? 0xFFFFFFFF : 0x0;
uint32_t _w = a.w() != b.w() ? 0xFFFFFFFF : 0x0;
- return Uint32x4::New(_x, _y, _z, _w);
+ return Int32x4::New(_x, _y, _z, _w);
}
@@ -260,8 +260,8 @@
}
-DEFINE_NATIVE_ENTRY(Uint32x4_getSignMask, 1) {
- GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, self, arguments->NativeArgAt(0));
+DEFINE_NATIVE_ENTRY(Int32x4_getSignMask, 1) {
+ GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, self, arguments->NativeArgAt(0));
uint32_t mx = (self.x() & 0x80000000) >> 31;
uint32_t my = (self.y() & 0x80000000) >> 31;
uint32_t mz = (self.z() & 0x80000000) >> 31;
@@ -399,311 +399,311 @@
}
-DEFINE_NATIVE_ENTRY(Uint32x4_fromInts, 5) {
+DEFINE_NATIVE_ENTRY(Int32x4_fromInts, 5) {
ASSERT(AbstractTypeArguments::CheckedHandle(
arguments->NativeArgAt(0)).IsNull());
GET_NON_NULL_NATIVE_ARGUMENT(Integer, x, arguments->NativeArgAt(1));
GET_NON_NULL_NATIVE_ARGUMENT(Integer, y, arguments->NativeArgAt(2));
GET_NON_NULL_NATIVE_ARGUMENT(Integer, z, arguments->NativeArgAt(3));
GET_NON_NULL_NATIVE_ARGUMENT(Integer, w, arguments->NativeArgAt(4));
- uint32_t _x = static_cast<uint32_t>(x.AsInt64Value() & 0xFFFFFFFF);
- uint32_t _y = static_cast<uint32_t>(y.AsInt64Value() & 0xFFFFFFFF);
- uint32_t _z = static_cast<uint32_t>(z.AsInt64Value() & 0xFFFFFFFF);
- uint32_t _w = static_cast<uint32_t>(w.AsInt64Value() & 0xFFFFFFFF);
- return Uint32x4::New(_x, _y, _z, _w);
+ int32_t _x = static_cast<int32_t>(x.AsInt64Value() & 0xFFFFFFFF);
+ int32_t _y = static_cast<int32_t>(y.AsInt64Value() & 0xFFFFFFFF);
+ int32_t _z = static_cast<int32_t>(z.AsInt64Value() & 0xFFFFFFFF);
+ int32_t _w = static_cast<int32_t>(w.AsInt64Value() & 0xFFFFFFFF);
+ return Int32x4::New(_x, _y, _z, _w);
}
-DEFINE_NATIVE_ENTRY(Uint32x4_fromBools, 5) {
+DEFINE_NATIVE_ENTRY(Int32x4_fromBools, 5) {
ASSERT(AbstractTypeArguments::CheckedHandle(
arguments->NativeArgAt(0)).IsNull());
GET_NON_NULL_NATIVE_ARGUMENT(Bool, x, arguments->NativeArgAt(1));
GET_NON_NULL_NATIVE_ARGUMENT(Bool, y, arguments->NativeArgAt(2));
GET_NON_NULL_NATIVE_ARGUMENT(Bool, z, arguments->NativeArgAt(3));
GET_NON_NULL_NATIVE_ARGUMENT(Bool, w, arguments->NativeArgAt(4));
- uint32_t _x = x.value() ? 0xFFFFFFFF : 0x0;
- uint32_t _y = y.value() ? 0xFFFFFFFF : 0x0;
- uint32_t _z = z.value() ? 0xFFFFFFFF : 0x0;
- uint32_t _w = w.value() ? 0xFFFFFFFF : 0x0;
- return Uint32x4::New(_x, _y, _z, _w);
+ int32_t _x = x.value() ? 0xFFFFFFFF : 0x0;
+ int32_t _y = y.value() ? 0xFFFFFFFF : 0x0;
+ int32_t _z = z.value() ? 0xFFFFFFFF : 0x0;
+ int32_t _w = w.value() ? 0xFFFFFFFF : 0x0;
+ return Int32x4::New(_x, _y, _z, _w);
}
-DEFINE_NATIVE_ENTRY(Uint32x4_fromFloat32x4Bits, 2) {
+DEFINE_NATIVE_ENTRY(Int32x4_fromFloat32x4Bits, 2) {
GET_NON_NULL_NATIVE_ARGUMENT(Float32x4, v, arguments->NativeArgAt(1));
- return Uint32x4::New(v.value());
+ return Int32x4::New(v.value());
}
-DEFINE_NATIVE_ENTRY(Uint32x4_or, 2) {
- GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, self, arguments->NativeArgAt(0));
- GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, other, arguments->NativeArgAt(1));
- uint32_t _x = self.x() | other.x();
- uint32_t _y = self.y() | other.y();
- uint32_t _z = self.z() | other.z();
- uint32_t _w = self.w() | other.w();
- return Uint32x4::New(_x, _y, _z, _w);
+DEFINE_NATIVE_ENTRY(Int32x4_or, 2) {
+ GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, self, arguments->NativeArgAt(0));
+ GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, other, arguments->NativeArgAt(1));
+ int32_t _x = self.x() | other.x();
+ int32_t _y = self.y() | other.y();
+ int32_t _z = self.z() | other.z();
+ int32_t _w = self.w() | other.w();
+ return Int32x4::New(_x, _y, _z, _w);
}
-DEFINE_NATIVE_ENTRY(Uint32x4_and, 2) {
- GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, self, arguments->NativeArgAt(0));
- GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, other, arguments->NativeArgAt(1));
- uint32_t _x = self.x() & other.x();
- uint32_t _y = self.y() & other.y();
- uint32_t _z = self.z() & other.z();
- uint32_t _w = self.w() & other.w();
- return Uint32x4::New(_x, _y, _z, _w);
+DEFINE_NATIVE_ENTRY(Int32x4_and, 2) {
+ GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, self, arguments->NativeArgAt(0));
+ GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, other, arguments->NativeArgAt(1));
+ int32_t _x = self.x() & other.x();
+ int32_t _y = self.y() & other.y();
+ int32_t _z = self.z() & other.z();
+ int32_t _w = self.w() & other.w();
+ return Int32x4::New(_x, _y, _z, _w);
}
-DEFINE_NATIVE_ENTRY(Uint32x4_xor, 2) {
- GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, self, arguments->NativeArgAt(0));
- GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, other, arguments->NativeArgAt(1));
- uint32_t _x = self.x() ^ other.x();
- uint32_t _y = self.y() ^ other.y();
- uint32_t _z = self.z() ^ other.z();
- uint32_t _w = self.w() ^ other.w();
- return Uint32x4::New(_x, _y, _z, _w);
+DEFINE_NATIVE_ENTRY(Int32x4_xor, 2) {
+ GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, self, arguments->NativeArgAt(0));
+ GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, other, arguments->NativeArgAt(1));
+ int32_t _x = self.x() ^ other.x();
+ int32_t _y = self.y() ^ other.y();
+ int32_t _z = self.z() ^ other.z();
+ int32_t _w = self.w() ^ other.w();
+ return Int32x4::New(_x, _y, _z, _w);
}
-DEFINE_NATIVE_ENTRY(Uint32x4_add, 2) {
- GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, self, arguments->NativeArgAt(0));
- GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, other, arguments->NativeArgAt(1));
- uint32_t _x = self.x() + other.x();
- uint32_t _y = self.y() + other.y();
- uint32_t _z = self.z() + other.z();
- uint32_t _w = self.w() + other.w();
- return Uint32x4::New(_x, _y, _z, _w);
+DEFINE_NATIVE_ENTRY(Int32x4_add, 2) {
+ GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, self, arguments->NativeArgAt(0));
+ GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, other, arguments->NativeArgAt(1));
+ int32_t _x = self.x() + other.x();
+ int32_t _y = self.y() + other.y();
+ int32_t _z = self.z() + other.z();
+ int32_t _w = self.w() + other.w();
+ return Int32x4::New(_x, _y, _z, _w);
}
-DEFINE_NATIVE_ENTRY(Uint32x4_sub, 2) {
- GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, self, arguments->NativeArgAt(0));
- GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, other, arguments->NativeArgAt(1));
- uint32_t _x = self.x() - other.x();
- uint32_t _y = self.y() - other.y();
- uint32_t _z = self.z() - other.z();
- uint32_t _w = self.w() - other.w();
- return Uint32x4::New(_x, _y, _z, _w);
+DEFINE_NATIVE_ENTRY(Int32x4_sub, 2) {
+ GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, self, arguments->NativeArgAt(0));
+ GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, other, arguments->NativeArgAt(1));
+ int32_t _x = self.x() - other.x();
+ int32_t _y = self.y() - other.y();
+ int32_t _z = self.z() - other.z();
+ int32_t _w = self.w() - other.w();
+ return Int32x4::New(_x, _y, _z, _w);
}
-DEFINE_NATIVE_ENTRY(Uint32x4_getX, 1) {
- GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, self, arguments->NativeArgAt(0));
- uint32_t value = self.x();
+DEFINE_NATIVE_ENTRY(Int32x4_getX, 1) {
+ GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, self, arguments->NativeArgAt(0));
+ int32_t value = self.x();
return Integer::New(value);
}
-DEFINE_NATIVE_ENTRY(Uint32x4_getY, 1) {
- GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, self, arguments->NativeArgAt(0));
- uint32_t value = self.y();
+DEFINE_NATIVE_ENTRY(Int32x4_getY, 1) {
+ GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, self, arguments->NativeArgAt(0));
+ int32_t value = self.y();
return Integer::New(value);
}
-DEFINE_NATIVE_ENTRY(Uint32x4_getZ, 1) {
- GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, self, arguments->NativeArgAt(0));
- uint32_t value = self.z();
+DEFINE_NATIVE_ENTRY(Int32x4_getZ, 1) {
+ GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, self, arguments->NativeArgAt(0));
+ int32_t value = self.z();
return Integer::New(value);
}
-DEFINE_NATIVE_ENTRY(Uint32x4_getW, 1) {
- GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, self, arguments->NativeArgAt(0));
- uint32_t value = self.w();
+DEFINE_NATIVE_ENTRY(Int32x4_getW, 1) {
+ GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, self, arguments->NativeArgAt(0));
+ int32_t value = self.w();
return Integer::New(value);
}
-DEFINE_NATIVE_ENTRY(Uint32x4_shuffle, 2) {
- GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, self, arguments->NativeArgAt(0));
+DEFINE_NATIVE_ENTRY(Int32x4_shuffle, 2) {
+ GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, self, arguments->NativeArgAt(0));
GET_NON_NULL_NATIVE_ARGUMENT(Integer, mask, arguments->NativeArgAt(1));
int64_t m = mask.AsInt64Value();
ThrowMaskRangeException(m);
- uint32_t data[4] = { self.x(), self.y(), self.z(), self.w() };
- uint32_t _x = data[m & 0x3];
- uint32_t _y = data[(m >> 2) & 0x3];
- uint32_t _z = data[(m >> 4) & 0x3];
- uint32_t _w = data[(m >> 6) & 0x3];
- return Uint32x4::New(_x, _y, _z, _w);
+ int32_t data[4] = { self.x(), self.y(), self.z(), self.w() };
+ int32_t _x = data[m & 0x3];
+ int32_t _y = data[(m >> 2) & 0x3];
+ int32_t _z = data[(m >> 4) & 0x3];
+ int32_t _w = data[(m >> 6) & 0x3];
+ return Int32x4::New(_x, _y, _z, _w);
}
-DEFINE_NATIVE_ENTRY(Uint32x4_shuffleMix, 3) {
- GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, self, arguments->NativeArgAt(0));
- GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, zw, arguments->NativeArgAt(1));
+DEFINE_NATIVE_ENTRY(Int32x4_shuffleMix, 3) {
+ GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, self, arguments->NativeArgAt(0));
+ GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, zw, arguments->NativeArgAt(1));
GET_NON_NULL_NATIVE_ARGUMENT(Integer, mask, arguments->NativeArgAt(2));
int64_t m = mask.AsInt64Value();
ThrowMaskRangeException(m);
- uint32_t data[4] = { self.x(), self.y(), self.z(), self.w() };
- uint32_t zw_data[4] = { zw.x(), zw.y(), zw.z(), zw.w() };
- uint32_t _x = data[m & 0x3];
- uint32_t _y = data[(m >> 2) & 0x3];
- uint32_t _z = zw_data[(m >> 4) & 0x3];
- uint32_t _w = zw_data[(m >> 6) & 0x3];
- return Uint32x4::New(_x, _y, _z, _w);
+ int32_t data[4] = { self.x(), self.y(), self.z(), self.w() };
+ int32_t zw_data[4] = { zw.x(), zw.y(), zw.z(), zw.w() };
+ int32_t _x = data[m & 0x3];
+ int32_t _y = data[(m >> 2) & 0x3];
+ int32_t _z = zw_data[(m >> 4) & 0x3];
+ int32_t _w = zw_data[(m >> 6) & 0x3];
+ return Int32x4::New(_x, _y, _z, _w);
}
-DEFINE_NATIVE_ENTRY(Uint32x4_setX, 2) {
- GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, self, arguments->NativeArgAt(0));
+DEFINE_NATIVE_ENTRY(Int32x4_setX, 2) {
+ GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, self, arguments->NativeArgAt(0));
GET_NON_NULL_NATIVE_ARGUMENT(Integer, x, arguments->NativeArgAt(1));
- uint32_t _x = static_cast<uint32_t>(x.AsInt64Value() & 0xFFFFFFFF);
- uint32_t _y = self.y();
- uint32_t _z = self.z();
- uint32_t _w = self.w();
- return Uint32x4::New(_x, _y, _z, _w);
+ int32_t _x = static_cast<int32_t>(x.AsInt64Value() & 0xFFFFFFFF);
+ int32_t _y = self.y();
+ int32_t _z = self.z();
+ int32_t _w = self.w();
+ return Int32x4::New(_x, _y, _z, _w);
}
-DEFINE_NATIVE_ENTRY(Uint32x4_setY, 2) {
- GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, self, arguments->NativeArgAt(0));
+DEFINE_NATIVE_ENTRY(Int32x4_setY, 2) {
+ GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, self, arguments->NativeArgAt(0));
GET_NON_NULL_NATIVE_ARGUMENT(Integer, y, arguments->NativeArgAt(1));
- uint32_t _x = self.x();
- uint32_t _y = static_cast<uint32_t>(y.AsInt64Value() & 0xFFFFFFFF);
- uint32_t _z = self.z();
- uint32_t _w = self.w();
- return Uint32x4::New(_x, _y, _z, _w);
+ int32_t _x = self.x();
+ int32_t _y = static_cast<int32_t>(y.AsInt64Value() & 0xFFFFFFFF);
+ int32_t _z = self.z();
+ int32_t _w = self.w();
+ return Int32x4::New(_x, _y, _z, _w);
}
-DEFINE_NATIVE_ENTRY(Uint32x4_setZ, 2) {
- GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, self, arguments->NativeArgAt(0));
+DEFINE_NATIVE_ENTRY(Int32x4_setZ, 2) {
+ GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, self, arguments->NativeArgAt(0));
GET_NON_NULL_NATIVE_ARGUMENT(Integer, z, arguments->NativeArgAt(1));
- uint32_t _x = self.x();
- uint32_t _y = self.y();
- uint32_t _z = static_cast<uint32_t>(z.AsInt64Value() & 0xFFFFFFFF);
- uint32_t _w = self.w();
- return Uint32x4::New(_x, _y, _z, _w);
+ int32_t _x = self.x();
+ int32_t _y = self.y();
+ int32_t _z = static_cast<int32_t>(z.AsInt64Value() & 0xFFFFFFFF);
+ int32_t _w = self.w();
+ return Int32x4::New(_x, _y, _z, _w);
}
-DEFINE_NATIVE_ENTRY(Uint32x4_setW, 2) {
- GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, self, arguments->NativeArgAt(0));
+DEFINE_NATIVE_ENTRY(Int32x4_setW, 2) {
+ GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, self, arguments->NativeArgAt(0));
GET_NON_NULL_NATIVE_ARGUMENT(Integer, w, arguments->NativeArgAt(1));
- uint32_t _x = self.x();
- uint32_t _y = self.y();
- uint32_t _z = self.z();
- uint32_t _w = static_cast<uint32_t>(w.AsInt64Value() & 0xFFFFFFFF);
- return Uint32x4::New(_x, _y, _z, _w);
+ int32_t _x = self.x();
+ int32_t _y = self.y();
+ int32_t _z = self.z();
+ int32_t _w = static_cast<int32_t>(w.AsInt64Value() & 0xFFFFFFFF);
+ return Int32x4::New(_x, _y, _z, _w);
}
-DEFINE_NATIVE_ENTRY(Uint32x4_getFlagX, 1) {
- GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, self, arguments->NativeArgAt(0));
- uint32_t value = self.x();
+DEFINE_NATIVE_ENTRY(Int32x4_getFlagX, 1) {
+ GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, self, arguments->NativeArgAt(0));
+ int32_t value = self.x();
return Bool::Get(value != 0).raw();
}
-DEFINE_NATIVE_ENTRY(Uint32x4_getFlagY, 1) {
- GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, self, arguments->NativeArgAt(0));
- uint32_t value = self.y();
+DEFINE_NATIVE_ENTRY(Int32x4_getFlagY, 1) {
+ GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, self, arguments->NativeArgAt(0));
+ int32_t value = self.y();
return Bool::Get(value != 0).raw();
}
-DEFINE_NATIVE_ENTRY(Uint32x4_getFlagZ, 1) {
- GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, self, arguments->NativeArgAt(0));
- uint32_t value = self.z();
+DEFINE_NATIVE_ENTRY(Int32x4_getFlagZ, 1) {
+ GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, self, arguments->NativeArgAt(0));
+ int32_t value = self.z();
return Bool::Get(value != 0).raw();
}
-DEFINE_NATIVE_ENTRY(Uint32x4_getFlagW, 1) {
- GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, self, arguments->NativeArgAt(0));
- uint32_t value = self.w();
+DEFINE_NATIVE_ENTRY(Int32x4_getFlagW, 1) {
+ GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, self, arguments->NativeArgAt(0));
+ int32_t value = self.w();
return Bool::Get(value != 0).raw();
}
-DEFINE_NATIVE_ENTRY(Uint32x4_setFlagX, 2) {
- GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, self, arguments->NativeArgAt(0));
+DEFINE_NATIVE_ENTRY(Int32x4_setFlagX, 2) {
+ GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, self, arguments->NativeArgAt(0));
GET_NON_NULL_NATIVE_ARGUMENT(Bool, flagX, arguments->NativeArgAt(1));
- uint32_t _x = self.x();
- uint32_t _y = self.y();
- uint32_t _z = self.z();
- uint32_t _w = self.w();
+ int32_t _x = self.x();
+ int32_t _y = self.y();
+ int32_t _z = self.z();
+ int32_t _w = self.w();
_x = flagX.raw() == Bool::True().raw() ? 0xFFFFFFFF : 0x0;
- return Uint32x4::New(_x, _y, _z, _w);
+ return Int32x4::New(_x, _y, _z, _w);
}
-DEFINE_NATIVE_ENTRY(Uint32x4_setFlagY, 2) {
- GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, self, arguments->NativeArgAt(0));
+DEFINE_NATIVE_ENTRY(Int32x4_setFlagY, 2) {
+ GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, self, arguments->NativeArgAt(0));
GET_NON_NULL_NATIVE_ARGUMENT(Bool, flagY, arguments->NativeArgAt(1));
- uint32_t _x = self.x();
- uint32_t _y = self.y();
- uint32_t _z = self.z();
- uint32_t _w = self.w();
+ int32_t _x = self.x();
+ int32_t _y = self.y();
+ int32_t _z = self.z();
+ int32_t _w = self.w();
_y = flagY.raw() == Bool::True().raw() ? 0xFFFFFFFF : 0x0;
- return Uint32x4::New(_x, _y, _z, _w);
+ return Int32x4::New(_x, _y, _z, _w);
}
-DEFINE_NATIVE_ENTRY(Uint32x4_setFlagZ, 2) {
- GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, self, arguments->NativeArgAt(0));
+DEFINE_NATIVE_ENTRY(Int32x4_setFlagZ, 2) {
+ GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, self, arguments->NativeArgAt(0));
GET_NON_NULL_NATIVE_ARGUMENT(Bool, flagZ, arguments->NativeArgAt(1));
- uint32_t _x = self.x();
- uint32_t _y = self.y();
- uint32_t _z = self.z();
- uint32_t _w = self.w();
+ int32_t _x = self.x();
+ int32_t _y = self.y();
+ int32_t _z = self.z();
+ int32_t _w = self.w();
_z = flagZ.raw() == Bool::True().raw() ? 0xFFFFFFFF : 0x0;
- return Uint32x4::New(_x, _y, _z, _w);
+ return Int32x4::New(_x, _y, _z, _w);
}
-DEFINE_NATIVE_ENTRY(Uint32x4_setFlagW, 2) {
- GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, self, arguments->NativeArgAt(0));
+DEFINE_NATIVE_ENTRY(Int32x4_setFlagW, 2) {
+ GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, self, arguments->NativeArgAt(0));
GET_NON_NULL_NATIVE_ARGUMENT(Bool, flagW, arguments->NativeArgAt(1));
- uint32_t _x = self.x();
- uint32_t _y = self.y();
- uint32_t _z = self.z();
- uint32_t _w = self.w();
+ int32_t _x = self.x();
+ int32_t _y = self.y();
+ int32_t _z = self.z();
+ int32_t _w = self.w();
_w = flagW.raw() == Bool::True().raw() ? 0xFFFFFFFF : 0x0;
- return Uint32x4::New(_x, _y, _z, _w);
+ return Int32x4::New(_x, _y, _z, _w);
}
-// Used to convert between uint32_t and float32 without breaking strict
+// Used to convert between int32_t and float32 without breaking strict
// aliasing rules.
-union float32_uint32 {
+union float32_int32 {
float f;
- uint32_t u;
- float32_uint32(float v) {
+ int32_t u;
+ float32_int32(float v) {
f = v;
}
- float32_uint32(uint32_t v) {
+ float32_int32(int32_t v) {
u = v;
}
};
-DEFINE_NATIVE_ENTRY(Uint32x4_select, 3) {
- GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, self, arguments->NativeArgAt(0));
+DEFINE_NATIVE_ENTRY(Int32x4_select, 3) {
+ GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, self, arguments->NativeArgAt(0));
GET_NON_NULL_NATIVE_ARGUMENT(Float32x4, tv, arguments->NativeArgAt(1));
GET_NON_NULL_NATIVE_ARGUMENT(Float32x4, fv, arguments->NativeArgAt(2));
- uint32_t _maskX = self.x();
- uint32_t _maskY = self.y();
- uint32_t _maskZ = self.z();
- uint32_t _maskW = self.w();
+ int32_t _maskX = self.x();
+ int32_t _maskY = self.y();
+ int32_t _maskZ = self.z();
+ int32_t _maskW = self.w();
// Extract floats and interpret them as masks.
- float32_uint32 tvx(tv.x());
- float32_uint32 tvy(tv.y());
- float32_uint32 tvz(tv.z());
- float32_uint32 tvw(tv.w());
- float32_uint32 fvx(fv.x());
- float32_uint32 fvy(fv.y());
- float32_uint32 fvz(fv.z());
- float32_uint32 fvw(fv.w());
+ float32_int32 tvx(tv.x());
+ float32_int32 tvy(tv.y());
+ float32_int32 tvz(tv.z());
+ float32_int32 tvw(tv.w());
+ float32_int32 fvx(fv.x());
+ float32_int32 fvy(fv.y());
+ float32_int32 fvz(fv.z());
+ float32_int32 fvw(fv.w());
// Perform select.
- float32_uint32 tempX((_maskX & tvx.u) | (~_maskX & fvx.u));
- float32_uint32 tempY((_maskY & tvy.u) | (~_maskY & fvy.u));
- float32_uint32 tempZ((_maskZ & tvz.u) | (~_maskZ & fvz.u));
- float32_uint32 tempW((_maskW & tvw.u) | (~_maskW & fvw.u));
+ float32_int32 tempX((_maskX & tvx.u) | (~_maskX & fvx.u));
+ float32_int32 tempY((_maskY & tvy.u) | (~_maskY & fvy.u));
+ float32_int32 tempZ((_maskZ & tvz.u) | (~_maskZ & fvz.u));
+ float32_int32 tempW((_maskW & tvw.u) | (~_maskW & fvw.u));
return Float32x4::New(tempX.f, tempY.f, tempZ.f, tempW.f);
}
diff --git a/runtime/lib/string_patch.dart b/runtime/lib/string_patch.dart
index 5339da4..9d5111b 100644
--- a/runtime/lib/string_patch.dart
+++ b/runtime/lib/string_patch.dart
@@ -468,8 +468,8 @@
List<String> split(Pattern pattern) {
if ((pattern is String) && pattern.isEmpty) {
- List<String> result = new List<String>(length);
- for (int i = 0; i < length; i++) {
+ List<String> result = new List<String>(this.length);
+ for (int i = 0; i < this.length; i++) {
result[i] = this[i];
}
return result;
diff --git a/runtime/lib/typed_data.cc b/runtime/lib/typed_data.cc
index b671aef..703a7f9 100644
--- a/runtime/lib/typed_data.cc
+++ b/runtime/lib/typed_data.cc
@@ -296,7 +296,7 @@
TYPED_DATA_NATIVES(GetFloat32, SetFloat32, Double, value, 4)
TYPED_DATA_NATIVES(GetFloat64, SetFloat64, Double, value, 8)
TYPED_DATA_NATIVES(GetFloat32x4, SetFloat32x4, Float32x4, value, 16)
-TYPED_DATA_NATIVES(GetUint32x4, SetUint32x4, Uint32x4, value, 16)
+TYPED_DATA_NATIVES(GetInt32x4, SetInt32x4, Int32x4, value, 16)
DEFINE_NATIVE_ENTRY(ByteData_ToEndianInt16, 2) {
diff --git a/runtime/lib/typed_data.dart b/runtime/lib/typed_data.dart
index 27a41f5..d97e4fe 100644
--- a/runtime/lib/typed_data.dart
+++ b/runtime/lib/typed_data.dart
@@ -244,22 +244,22 @@
}
-patch class Uint32x4List {
- /* patch */ factory Uint32x4List(int length) {
- return new _Uint32x4Array(length);
+patch class Int32x4List {
+ /* patch */ factory Int32x4List(int length) {
+ return new _Int32x4Array(length);
}
- /* patch */ factory Uint32x4List.fromList(List<Uint32x4> elements) {
- var result = new _Uint32x4Array(elements.length);
+ /* patch */ factory Int32x4List.fromList(List<Int32x4> elements) {
+ var result = new _Int32x4Array(elements.length);
for (int i = 0; i < elements.length; i++) {
result[i] = elements[i];
}
return result;
}
- /* patch */ factory Uint32x4List.view(ByteBuffer buffer,
+ /* patch */ factory Int32x4List.view(ByteBuffer buffer,
[int offsetInBytes = 0, int length]) {
- return new _Uint32x4ArrayView(buffer, offsetInBytes, length);
+ return new _Int32x4ArrayView(buffer, offsetInBytes, length);
}
}
@@ -274,21 +274,21 @@
/* patch */ factory Float32x4.zero() {
return new _Float32x4.zero();
}
- /* patch */ factory Float32x4.fromUint32x4Bits(Uint32x4 x) {
- return new _Float32x4.fromUint32x4Bits(x);
+ /* patch */ factory Float32x4.fromInt32x4Bits(Int32x4 x) {
+ return new _Float32x4.fromInt32x4Bits(x);
}
}
-patch class Uint32x4 {
- /* patch */ factory Uint32x4(int x, int y, int z, int w) {
- return new _Uint32x4(x, y, z, w);
+patch class Int32x4 {
+ /* patch */ factory Int32x4(int x, int y, int z, int w) {
+ return new _Int32x4(x, y, z, w);
}
- /* patch */ factory Uint32x4.bool(bool x, bool y, bool z, bool w) {
- return new _Uint32x4.bool(x, y, z, w);
+ /* patch */ factory Int32x4.bool(bool x, bool y, bool z, bool w) {
+ return new _Int32x4.bool(x, y, z, w);
}
- /* patch */ factory Uint32x4.fromFloat32x4Bits(Float32x4 x) {
- return new _Uint32x4.fromFloat32x4Bits(x);
+ /* patch */ factory Int32x4.fromFloat32x4Bits(Float32x4 x) {
+ return new _Int32x4.fromFloat32x4Bits(x);
}
}
@@ -511,7 +511,7 @@
}
List sublist(int start, [int end]) {
- if (end == null) end = length;
+ if (end == null) end = this.length;
int length = end - start;
_rangeCheck(this.length, start, length);
List result = _createList(length);
@@ -611,9 +611,9 @@
void _setFloat32x4(int offsetInBytes, Float32x4 value)
native "TypedData_SetFloat32x4";
- Uint32x4 _getUint32x4(int offsetInBytes) native "TypedData_GetUint32x4";
- void _setUint32x4(int offsetInBytes, Uint32x4 value)
- native "TypedData_SetUint32x4";
+ Int32x4 _getInt32x4(int offsetInBytes) native "TypedData_GetInt32x4";
+ void _setInt32x4(int offsetInBytes, Int32x4 value)
+ native "TypedData_SetInt32x4";
}
@@ -1342,64 +1342,64 @@
}
-class _Uint32x4Array extends _TypedList implements Uint32x4List {
+class _Int32x4Array extends _TypedList implements Int32x4List {
// Factory constructors.
- factory _Uint32x4Array(int length) {
+ factory _Int32x4Array(int length) {
return _new(length);
}
- factory _Uint32x4Array.view(ByteBuffer buffer,
+ factory _Int32x4Array.view(ByteBuffer buffer,
[int offsetInBytes = 0, int length]) {
if (length == null) {
length = (buffer.lengthInBytes - offsetInBytes) ~/
- Uint32x4List.BYTES_PER_ELEMENT;
+ Int32x4List.BYTES_PER_ELEMENT;
}
- return new _Uint32x4ArrayView(buffer, offsetInBytes, length);
+ return new _Int32x4ArrayView(buffer, offsetInBytes, length);
}
- Uint32x4 operator[](int index) {
+ Int32x4 operator[](int index) {
if (index < 0 || index >= length) {
_throwRangeError(index, length);
}
- return _getIndexedUint32x4(index);
+ return _getIndexedInt32x4(index);
}
- void operator[]=(int index, Uint32x4 value) {
+ void operator[]=(int index, Int32x4 value) {
if (index < 0 || index >= length) {
_throwRangeError(index, length);
}
- _setIndexedUint32x4(index, value);
+ _setIndexedInt32x4(index, value);
}
- Iterator<Uint32x4> get iterator {
- return new _TypedListIterator<Uint32x4>(this);
+ Iterator<Int32x4> get iterator {
+ return new _TypedListIterator<Int32x4>(this);
}
// Method(s) implementing the TypedData interface.
int get elementSizeInBytes {
- return Uint32x4List.BYTES_PER_ELEMENT;
+ return Int32x4List.BYTES_PER_ELEMENT;
}
// Internal utility methods.
- _Uint32x4Array _createList(int length) {
+ _Int32x4Array _createList(int length) {
return _new(length);
}
- Uint32x4 _getIndexedUint32x4(int index) {
- return _getUint32x4(index * Uint32x4List.BYTES_PER_ELEMENT);
+ Int32x4 _getIndexedInt32x4(int index) {
+ return _getInt32x4(index * Int32x4List.BYTES_PER_ELEMENT);
}
- void _setIndexedUint32x4(int index, Uint32x4 value) {
- _setUint32x4(index * Uint32x4List.BYTES_PER_ELEMENT, value);
+ void _setIndexedInt32x4(int index, Int32x4 value) {
+ _setInt32x4(index * Int32x4List.BYTES_PER_ELEMENT, value);
}
- static _Uint32x4Array _new(int length) native "TypedData_Uint32x4Array_new";
+ static _Int32x4Array _new(int length) native "TypedData_Int32x4Array_new";
}
@@ -2038,58 +2038,58 @@
}
-class _ExternalUint32x4Array extends _TypedList implements Uint32x4List {
+class _ExternalInt32x4Array extends _TypedList implements Int32x4List {
// Factory constructors.
- factory _ExternalUint32x4Array(int length) {
+ factory _ExternalInt32x4Array(int length) {
return _new(length);
}
// Method(s) implementing the List interface.
- Uint32x4 operator[](int index) {
+ Int32x4 operator[](int index) {
if (index < 0 || index >= length) {
_throwRangeError(index, length);
}
- return _getIndexedUint32x4(index);
+ return _getIndexedInt32x4(index);
}
- void operator[]=(int index, Uint32x4 value) {
+ void operator[]=(int index, Int32x4 value) {
if (index < 0 || index >= length) {
_throwRangeError(index, length);
}
- _setIndexedUint32x4(index, value);
+ _setIndexedInt32x4(index, value);
}
- Iterator<Uint32x4> get iterator {
- return new _TypedListIterator<Uint32x4>(this);
+ Iterator<Int32x4> get iterator {
+ return new _TypedListIterator<Int32x4>(this);
}
// Method(s) implementing the TypedData interface.
int get elementSizeInBytes {
- return Uint32x4List.BYTES_PER_ELEMENT;
+ return Int32x4List.BYTES_PER_ELEMENT;
}
// Internal utility methods.
- Uint32x4List _createList(int length) {
- return new Uint32x4List(length);
+ Int32x4List _createList(int length) {
+ return new Int32x4List(length);
}
- Uint32x4 _getIndexedUint32x4(int index) {
- return _getUint32x4(index * Uint32x4List.BYTES_PER_ELEMENT);
+ Int32x4 _getIndexedInt32x4(int index) {
+ return _getInt32x4(index * Int32x4List.BYTES_PER_ELEMENT);
}
- void _setIndexedUint32x4(int index, Uint32x4 value) {
- _setUint32x4(index * Uint32x4List.BYTES_PER_ELEMENT, value);
+ void _setIndexedInt32x4(int index, Int32x4 value) {
+ _setInt32x4(index * Int32x4List.BYTES_PER_ELEMENT, value);
}
- static _ExternalUint32x4Array _new(int length) native
- "ExternalTypedData_Uint32x4Array_new";
+ static _ExternalInt32x4Array _new(int length) native
+ "ExternalTypedData_Int32x4Array_new";
}
@@ -2098,8 +2098,8 @@
native "Float32x4_fromDoubles";
factory _Float32x4.splat(double v) native "Float32x4_splat";
factory _Float32x4.zero() native "Float32x4_zero";
- factory _Float32x4.fromUint32x4Bits(Uint32x4 x)
- native "Float32x4_fromUint32x4Bits";
+ factory _Float32x4.fromInt32x4Bits(Int32x4 x)
+ native "Float32x4_fromInt32x4Bits";
Float32x4 operator +(Float32x4 other) {
return _add(other);
}
@@ -2120,31 +2120,31 @@
return _div(other);
}
Float32x4 _div(Float32x4 other) native "Float32x4_div";
- Uint32x4 lessThan(Float32x4 other) {
+ Int32x4 lessThan(Float32x4 other) {
return _cmplt(other);
}
- Uint32x4 _cmplt(Float32x4 other) native "Float32x4_cmplt";
- Uint32x4 lessThanOrEqual(Float32x4 other) {
+ Int32x4 _cmplt(Float32x4 other) native "Float32x4_cmplt";
+ Int32x4 lessThanOrEqual(Float32x4 other) {
return _cmplte(other);
}
- Uint32x4 _cmplte(Float32x4 other) native "Float32x4_cmplte";
- Uint32x4 greaterThan(Float32x4 other) {
+ Int32x4 _cmplte(Float32x4 other) native "Float32x4_cmplte";
+ Int32x4 greaterThan(Float32x4 other) {
return _cmpgt(other);
}
- Uint32x4 _cmpgt(Float32x4 other) native "Float32x4_cmpgt";
- Uint32x4 greaterThanOrEqual(Float32x4 other) {
+ Int32x4 _cmpgt(Float32x4 other) native "Float32x4_cmpgt";
+ Int32x4 greaterThanOrEqual(Float32x4 other) {
return _cmpgte(other);
}
- Uint32x4 _cmpgte(Float32x4 other) native "Float32x4_cmpgte";
- Uint32x4 equal(Float32x4 other) {
+ Int32x4 _cmpgte(Float32x4 other) native "Float32x4_cmpgte";
+ Int32x4 equal(Float32x4 other) {
return _cmpequal(other);
}
- Uint32x4 _cmpequal(Float32x4 other)
+ Int32x4 _cmpequal(Float32x4 other)
native "Float32x4_cmpequal";
- Uint32x4 notEqual(Float32x4 other) {
+ Int32x4 notEqual(Float32x4 other) {
return _cmpnequal(other);
}
- Uint32x4 _cmpnequal(Float32x4 other)
+ Int32x4 _cmpnequal(Float32x4 other)
native "Float32x4_cmpnequal";
Float32x4 scale(double s) {
return _scale(s);
@@ -2197,59 +2197,59 @@
}
-class _Uint32x4 implements Uint32x4 {
- factory _Uint32x4(int x, int y, int z, int w)
- native "Uint32x4_fromInts";
- factory _Uint32x4.bool(bool x, bool y, bool z, bool w)
- native "Uint32x4_fromBools";
- factory _Uint32x4.fromFloat32x4Bits(Float32x4 x)
- native "Uint32x4_fromFloat32x4Bits";
- Uint32x4 operator |(Uint32x4 other) {
+class _Int32x4 implements Int32x4 {
+ factory _Int32x4(int x, int y, int z, int w)
+ native "Int32x4_fromInts";
+ factory _Int32x4.bool(bool x, bool y, bool z, bool w)
+ native "Int32x4_fromBools";
+ factory _Int32x4.fromFloat32x4Bits(Float32x4 x)
+ native "Int32x4_fromFloat32x4Bits";
+ Int32x4 operator |(Int32x4 other) {
return _or(other);
}
- Uint32x4 _or(Uint32x4 other) native "Uint32x4_or";
- Uint32x4 operator &(Uint32x4 other) {
+ Int32x4 _or(Int32x4 other) native "Int32x4_or";
+ Int32x4 operator &(Int32x4 other) {
return _and(other);
}
- Uint32x4 _and(Uint32x4 other) native "Uint32x4_and";
- Uint32x4 operator ^(Uint32x4 other) {
+ Int32x4 _and(Int32x4 other) native "Int32x4_and";
+ Int32x4 operator ^(Int32x4 other) {
return _xor(other);
}
- Uint32x4 _xor(Uint32x4 other) native "Uint32x4_xor";
- Uint32x4 operator +(Uint32x4 other) {
+ Int32x4 _xor(Int32x4 other) native "Int32x4_xor";
+ Int32x4 operator +(Int32x4 other) {
return _add(other);
}
- Uint32x4 _add(Uint32x4 other) native "Uint32x4_add";
- Uint32x4 operator -(Uint32x4 other) {
+ Int32x4 _add(Int32x4 other) native "Int32x4_add";
+ Int32x4 operator -(Int32x4 other) {
return _sub(other);
}
- Uint32x4 _sub(Uint32x4 other) native "Uint32x4_sub";
- int get x native "Uint32x4_getX";
- int get y native "Uint32x4_getY";
- int get z native "Uint32x4_getZ";
- int get w native "Uint32x4_getW";
- int get signMask native "Uint32x4_getSignMask";
- Uint32x4 shuffle(int mask) native "Uint32x4_shuffle";
- Uint32x4 shuffleMix(Uint32x4 zw, int mask) native "Uint32x4_shuffleMix";
- Uint32x4 withX(int x) native "Uint32x4_setX";
- Uint32x4 withY(int y) native "Uint32x4_setY";
- Uint32x4 withZ(int z) native "Uint32x4_setZ";
- Uint32x4 withW(int w) native "Uint32x4_setW";
- bool get flagX native "Uint32x4_getFlagX";
- bool get flagY native "Uint32x4_getFlagY";
- bool get flagZ native "Uint32x4_getFlagZ";
- bool get flagW native "Uint32x4_getFlagW";
- Uint32x4 withFlagX(bool x) native "Uint32x4_setFlagX";
- Uint32x4 withFlagY(bool y) native "Uint32x4_setFlagY";
- Uint32x4 withFlagZ(bool z) native "Uint32x4_setFlagZ";
- Uint32x4 withFlagW(bool w) native "Uint32x4_setFlagW";
+ Int32x4 _sub(Int32x4 other) native "Int32x4_sub";
+ int get x native "Int32x4_getX";
+ int get y native "Int32x4_getY";
+ int get z native "Int32x4_getZ";
+ int get w native "Int32x4_getW";
+ int get signMask native "Int32x4_getSignMask";
+ Int32x4 shuffle(int mask) native "Int32x4_shuffle";
+ Int32x4 shuffleMix(Int32x4 zw, int mask) native "Int32x4_shuffleMix";
+ Int32x4 withX(int x) native "Int32x4_setX";
+ Int32x4 withY(int y) native "Int32x4_setY";
+ Int32x4 withZ(int z) native "Int32x4_setZ";
+ Int32x4 withW(int w) native "Int32x4_setW";
+ bool get flagX native "Int32x4_getFlagX";
+ bool get flagY native "Int32x4_getFlagY";
+ bool get flagZ native "Int32x4_getFlagZ";
+ bool get flagW native "Int32x4_getFlagW";
+ Int32x4 withFlagX(bool x) native "Int32x4_setFlagX";
+ Int32x4 withFlagY(bool y) native "Int32x4_setFlagY";
+ Int32x4 withFlagZ(bool z) native "Int32x4_setFlagZ";
+ Int32x4 withFlagW(bool w) native "Int32x4_setFlagW";
Float32x4 select(Float32x4 trueValue,
Float32x4 falseValue) {
return _select(trueValue, falseValue);
}
Float32x4 _select(Float32x4 trueValue,
Float32x4 falseValue)
- native "Uint32x4_select";
+ native "Int32x4_select";
}
class _TypedListIterator<E> implements Iterator<E> {
@@ -2925,54 +2925,54 @@
}
-class _Uint32x4ArrayView extends _TypedListView implements Uint32x4List {
+class _Int32x4ArrayView extends _TypedListView implements Int32x4List {
// Constructor.
- _Uint32x4ArrayView(ByteBuffer buffer, [int _offsetInBytes = 0, int _length])
+ _Int32x4ArrayView(ByteBuffer buffer, [int _offsetInBytes = 0, int _length])
: super(buffer, _offsetInBytes,
_defaultIfNull(_length,
((buffer.lengthInBytes - _offsetInBytes) ~/
- Uint32x4List.BYTES_PER_ELEMENT))) {
+ Int32x4List.BYTES_PER_ELEMENT))) {
_rangeCheck(buffer.lengthInBytes,
offsetInBytes,
- length * Uint32x4List.BYTES_PER_ELEMENT);
- _offsetAlignmentCheck(_offsetInBytes, Uint32x4List.BYTES_PER_ELEMENT);
+ length * Int32x4List.BYTES_PER_ELEMENT);
+ _offsetAlignmentCheck(_offsetInBytes, Int32x4List.BYTES_PER_ELEMENT);
}
// Method(s) implementing List interface.
- Uint32x4 operator[](int index) {
+ Int32x4 operator[](int index) {
if (index < 0 || index >= length) {
_throwRangeError(index, length);
}
- return _typedData._getUint32x4(offsetInBytes +
- (index * Uint32x4List.BYTES_PER_ELEMENT));
+ return _typedData._getInt32x4(offsetInBytes +
+ (index * Int32x4List.BYTES_PER_ELEMENT));
}
- void operator[]=(int index, Uint32x4 value) {
+ void operator[]=(int index, Int32x4 value) {
if (index < 0 || index >= length) {
_throwRangeError(index, length);
}
- _typedData._setUint32x4(offsetInBytes +
- (index * Uint32x4List.BYTES_PER_ELEMENT), value);
+ _typedData._setInt32x4(offsetInBytes +
+ (index * Int32x4List.BYTES_PER_ELEMENT), value);
}
- Iterator<Uint32x4> get iterator {
- return new _TypedListIterator<Uint32x4>(this);
+ Iterator<Int32x4> get iterator {
+ return new _TypedListIterator<Int32x4>(this);
}
// Method(s) implementing TypedData interface.
int get elementSizeInBytes {
- return Uint32x4List.BYTES_PER_ELEMENT;
+ return Int32x4List.BYTES_PER_ELEMENT;
}
// Internal utility methods.
- Uint32x4List _createList(int length) {
- return new Uint32x4List(length);
+ Int32x4List _createList(int length) {
+ return new Int32x4List(length);
}
}
diff --git a/runtime/platform/globals.h b/runtime/platform/globals.h
index f3dbb88..7ee14fb 100644
--- a/runtime/platform/globals.h
+++ b/runtime/platform/globals.h
@@ -81,7 +81,7 @@
storage[3] = v[3];
return *this;
}
- simd128_value_t& readFrom(const uint32_t* v) {
+ simd128_value_t& readFrom(const int32_t* v) {
const float* vv = reinterpret_cast<const float*>(v);
storage[0] = vv[0];
storage[1] = vv[1];
@@ -99,7 +99,7 @@
v[2] = storage[2];
v[3] = storage[3];
}
- void writeTo(uint32_t* v) {
+ void writeTo(int32_t* v) {
float* vv = reinterpret_cast<float*>(v);
vv[0] = storage[0];
vv[1] = storage[1];
diff --git a/runtime/vm/bootstrap_natives.h b/runtime/vm/bootstrap_natives.h
index 550efdd..95f39c4 100644
--- a/runtime/vm/bootstrap_natives.h
+++ b/runtime/vm/bootstrap_natives.h
@@ -144,7 +144,7 @@
V(TypedData_Float32Array_new, 1) \
V(TypedData_Float64Array_new, 1) \
V(TypedData_Float32x4Array_new, 1) \
- V(TypedData_Uint32x4Array_new, 1) \
+ V(TypedData_Int32x4Array_new, 1) \
V(ExternalTypedData_Int8Array_new, 1) \
V(ExternalTypedData_Uint8Array_new, 1) \
V(ExternalTypedData_Uint8ClampedArray_new, 1) \
@@ -157,7 +157,7 @@
V(ExternalTypedData_Float32Array_new, 1) \
V(ExternalTypedData_Float64Array_new, 1) \
V(ExternalTypedData_Float32x4Array_new, 1) \
- V(ExternalTypedData_Uint32x4Array_new, 1) \
+ V(ExternalTypedData_Int32x4Array_new, 1) \
V(TypedData_length, 1) \
V(TypedData_setRange, 5) \
V(TypedData_GetInt8, 2) \
@@ -182,8 +182,8 @@
V(TypedData_SetFloat64, 3) \
V(TypedData_GetFloat32x4, 2) \
V(TypedData_SetFloat32x4, 3) \
- V(TypedData_GetUint32x4, 2) \
- V(TypedData_SetUint32x4, 3) \
+ V(TypedData_GetInt32x4, 2) \
+ V(TypedData_SetInt32x4, 3) \
V(ByteData_ToEndianInt16, 2) \
V(ByteData_ToEndianUint16, 2) \
V(ByteData_ToEndianInt32, 2) \
@@ -194,7 +194,7 @@
V(ByteData_ToEndianFloat64, 2) \
V(Float32x4_fromDoubles, 5) \
V(Float32x4_splat, 2) \
- V(Float32x4_fromUint32x4Bits, 2) \
+ V(Float32x4_fromInt32x4Bits, 2) \
V(Float32x4_zero, 1) \
V(Float32x4_add, 2) \
V(Float32x4_negate, 1) \
@@ -226,34 +226,34 @@
V(Float32x4_sqrt, 1) \
V(Float32x4_reciprocal, 1) \
V(Float32x4_reciprocalSqrt, 1) \
- V(Uint32x4_fromInts, 5) \
- V(Uint32x4_fromBools, 5) \
- V(Uint32x4_fromFloat32x4Bits, 2) \
- V(Uint32x4_or, 2) \
- V(Uint32x4_and, 2) \
- V(Uint32x4_xor, 2) \
- V(Uint32x4_add, 2) \
- V(Uint32x4_sub, 2) \
- V(Uint32x4_getX, 1) \
- V(Uint32x4_getY, 1) \
- V(Uint32x4_getZ, 1) \
- V(Uint32x4_getW, 1) \
- V(Uint32x4_setX, 2) \
- V(Uint32x4_setY, 2) \
- V(Uint32x4_setZ, 2) \
- V(Uint32x4_setW, 2) \
- V(Uint32x4_getSignMask, 1) \
- V(Uint32x4_shuffle, 2) \
- V(Uint32x4_shuffleMix, 3) \
- V(Uint32x4_getFlagX, 1) \
- V(Uint32x4_getFlagY, 1) \
- V(Uint32x4_getFlagZ, 1) \
- V(Uint32x4_getFlagW, 1) \
- V(Uint32x4_setFlagX, 2) \
- V(Uint32x4_setFlagY, 2) \
- V(Uint32x4_setFlagZ, 2) \
- V(Uint32x4_setFlagW, 2) \
- V(Uint32x4_select, 3) \
+ V(Int32x4_fromInts, 5) \
+ V(Int32x4_fromBools, 5) \
+ V(Int32x4_fromFloat32x4Bits, 2) \
+ V(Int32x4_or, 2) \
+ V(Int32x4_and, 2) \
+ V(Int32x4_xor, 2) \
+ V(Int32x4_add, 2) \
+ V(Int32x4_sub, 2) \
+ V(Int32x4_getX, 1) \
+ V(Int32x4_getY, 1) \
+ V(Int32x4_getZ, 1) \
+ V(Int32x4_getW, 1) \
+ V(Int32x4_setX, 2) \
+ V(Int32x4_setY, 2) \
+ V(Int32x4_setZ, 2) \
+ V(Int32x4_setW, 2) \
+ V(Int32x4_getSignMask, 1) \
+ V(Int32x4_shuffle, 2) \
+ V(Int32x4_shuffleMix, 3) \
+ V(Int32x4_getFlagX, 1) \
+ V(Int32x4_getFlagY, 1) \
+ V(Int32x4_getFlagZ, 1) \
+ V(Int32x4_getFlagW, 1) \
+ V(Int32x4_setFlagX, 2) \
+ V(Int32x4_setFlagY, 2) \
+ V(Int32x4_setFlagZ, 2) \
+ V(Int32x4_setFlagW, 2) \
+ V(Int32x4_select, 3) \
V(Isolate_mainPort, 0) \
V(Isolate_spawnFunction, 1) \
V(Isolate_spawnUri, 1) \
diff --git a/runtime/vm/dart_api_message.cc b/runtime/vm/dart_api_message.cc
index 0208c40..f8d7794 100644
--- a/runtime/vm/dart_api_message.cc
+++ b/runtime/vm/dart_api_message.cc
@@ -291,11 +291,12 @@
if (type != Dart_TypedData_kInvalid) {
object->type =
static_cast<Dart_CObject_Type>(Dart_CObject_Internal::kView);
- ReadObjectImpl(); // Skip type arguments.
+ Dart_CObject_Internal* cls =
+ reinterpret_cast<Dart_CObject_Internal*>(ReadObjectImpl());
+ ASSERT(cls == object->cls);
object->internal.as_view.buffer = ReadObjectImpl();
object->internal.as_view.offset_in_bytes = ReadSmiValue();
object->internal.as_view.length = ReadSmiValue();
- ReadObjectImpl(); // Skip last field.
// The buffer is fully read now as typed data objects are
// serialized in-line.
@@ -317,7 +318,9 @@
}
} else if (strcmp("dart:isolate", library_uri) == 0 &&
strncmp("_SendPortImpl@", class_name, 14) == 0) {
- ReadObjectImpl(); // Skip type arguments.
+ Dart_CObject_Internal* cls =
+ reinterpret_cast<Dart_CObject_Internal*>(ReadObjectImpl());
+ ASSERT(cls == object->cls);
// Read the port id.
Dart_CObject* port = ReadObjectImpl();
if (port->type == Dart_CObject_kInt32) {
@@ -327,7 +330,6 @@
object->type = Dart_CObject_kSendPort;
object->value.as_send_port = port->value.as_int64;
}
- ReadObjectImpl(); // Skip last field.
} else {
// TODO(sgjesse): Handle other instances. Currently this will
// skew the reading as the fields of the instance is not read.
diff --git a/runtime/vm/debugger.cc b/runtime/vm/debugger.cc
index 5e023b4..884706e 100644
--- a/runtime/vm/debugger.cc
+++ b/runtime/vm/debugger.cc
@@ -1484,6 +1484,11 @@
void Debugger::OneTimeBreakAtEntry(const Function& target_function) {
InstrumentForStepping(target_function);
+ if (target_function.HasImplicitClosureFunction()) {
+ const Function& closure_func =
+ Function::Handle(target_function.ImplicitClosureFunction());
+ InstrumentForStepping(closure_func);
+ }
}
diff --git a/runtime/vm/deferred_objects.cc b/runtime/vm/deferred_objects.cc
index 76f5be7..5a6412d 100644
--- a/runtime/vm/deferred_objects.cc
+++ b/runtime/vm/deferred_objects.cc
@@ -54,17 +54,17 @@
}
-void DeferredUint32x4::Materialize() {
- RawUint32x4** uint32x4_slot = reinterpret_cast<RawUint32x4**>(slot());
- RawUint32x4* raw_uint32x4 = Uint32x4::New(value());
- *uint32x4_slot = raw_uint32x4;
+void DeferredInt32x4::Materialize() {
+ RawInt32x4** int32x4_slot = reinterpret_cast<RawInt32x4**>(slot());
+ RawInt32x4* raw_int32x4 = Int32x4::New(value());
+ *int32x4_slot = raw_int32x4;
if (FLAG_trace_deoptimization_verbose) {
- uint32_t x = raw_uint32x4->x();
- uint32_t y = raw_uint32x4->y();
- uint32_t z = raw_uint32x4->z();
- uint32_t w = raw_uint32x4->w();
- OS::PrintErr("materializing Uint32x4 at %" Px ": %x,%x,%x,%x\n",
+ uint32_t x = raw_int32x4->x();
+ uint32_t y = raw_int32x4->y();
+ uint32_t z = raw_int32x4->z();
+ uint32_t w = raw_int32x4->w();
+ OS::PrintErr("materializing Int32x4 at %" Px ": %x,%x,%x,%x\n",
reinterpret_cast<uword>(slot()), x, y, z, w);
}
}
diff --git a/runtime/vm/deferred_objects.h b/runtime/vm/deferred_objects.h
index 7e2c3c9..ae2e29f 100644
--- a/runtime/vm/deferred_objects.h
+++ b/runtime/vm/deferred_objects.h
@@ -86,9 +86,9 @@
};
-class DeferredUint32x4 : public DeferredSlot {
+class DeferredInt32x4 : public DeferredSlot {
public:
- DeferredUint32x4(simd128_value_t value, RawInstance** slot,
+ DeferredInt32x4(simd128_value_t value, RawInstance** slot,
DeferredSlot* next)
: DeferredSlot(slot, next), value_(value) { }
@@ -99,7 +99,7 @@
private:
const simd128_value_t value_;
- DISALLOW_COPY_AND_ASSIGN(DeferredUint32x4);
+ DISALLOW_COPY_AND_ASSIGN(DeferredInt32x4);
};
diff --git a/runtime/vm/deopt_instructions.cc b/runtime/vm/deopt_instructions.cc
index c5266d1..ea2e147 100644
--- a/runtime/vm/deopt_instructions.cc
+++ b/runtime/vm/deopt_instructions.cc
@@ -190,7 +190,7 @@
case DeoptInstr::kDoubleStackSlot:
case DeoptInstr::kInt64StackSlot:
case DeoptInstr::kFloat32x4StackSlot:
- case DeoptInstr::kUint32x4StackSlot:
+ case DeoptInstr::kInt32x4StackSlot:
case DeoptInstr::kPp:
case DeoptInstr::kCallerPp:
case DeoptInstr::kMaterializedObjectRef:
@@ -200,7 +200,7 @@
case DeoptInstr::kFpuRegister:
case DeoptInstr::kInt64FpuRegister:
case DeoptInstr::kFloat32x4FpuRegister:
- case DeoptInstr::kUint32x4FpuRegister:
+ case DeoptInstr::kInt32x4FpuRegister:
// TODO(turnidge): Sometimes we encounter a deopt instruction
// with a register source while deoptimizing frames during
// debugging but we haven't saved our register set. This
@@ -506,15 +506,15 @@
};
-class DeoptUint32x4StackSlotInstr : public DeoptInstr {
+class DeoptInt32x4StackSlotInstr : public DeoptInstr {
public:
- explicit DeoptUint32x4StackSlotInstr(intptr_t source_index)
+ explicit DeoptInt32x4StackSlotInstr(intptr_t source_index)
: stack_slot_index_(source_index) {
ASSERT(stack_slot_index_ >= 0);
}
virtual intptr_t source_index() const { return stack_slot_index_; }
- virtual DeoptInstr::Kind kind() const { return kUint32x4StackSlot; }
+ virtual DeoptInstr::Kind kind() const { return kInt32x4StackSlot; }
virtual const char* ToCString() const {
return Isolate::Current()->current_zone()->PrintToString(
@@ -527,14 +527,14 @@
simd128_value_t* source_addr = reinterpret_cast<simd128_value_t*>(
deopt_context->GetSourceFrameAddressAt(source_index));
*reinterpret_cast<RawSmi**>(dest_addr) = Smi::New(0);
- deopt_context->DeferUint32x4Materialization(
- *source_addr, reinterpret_cast<RawUint32x4**>(dest_addr));
+ deopt_context->DeferInt32x4Materialization(
+ *source_addr, reinterpret_cast<RawInt32x4**>(dest_addr));
}
private:
const intptr_t stack_slot_index_; // First argument is 0, always >= 0.
- DISALLOW_COPY_AND_ASSIGN(DeoptUint32x4StackSlotInstr);
+ DISALLOW_COPY_AND_ASSIGN(DeoptInt32x4StackSlotInstr);
};
@@ -744,13 +744,13 @@
// Deoptimization instruction moving an XMM register.
-class DeoptUint32x4FpuRegisterInstr: public DeoptInstr {
+class DeoptInt32x4FpuRegisterInstr: public DeoptInstr {
public:
- explicit DeoptUint32x4FpuRegisterInstr(intptr_t reg_as_int)
+ explicit DeoptInt32x4FpuRegisterInstr(intptr_t reg_as_int)
: reg_(static_cast<FpuRegister>(reg_as_int)) {}
virtual intptr_t source_index() const { return static_cast<intptr_t>(reg_); }
- virtual DeoptInstr::Kind kind() const { return kUint32x4FpuRegister; }
+ virtual DeoptInstr::Kind kind() const { return kInt32x4FpuRegister; }
virtual const char* ToCString() const {
return Isolate::Current()->current_zone()->PrintToString(
@@ -760,14 +760,14 @@
void Execute(DeoptContext* deopt_context, intptr_t* dest_addr) {
simd128_value_t value = deopt_context->FpuRegisterValueAsSimd128(reg_);
*reinterpret_cast<RawSmi**>(dest_addr) = Smi::New(0);
- deopt_context->DeferUint32x4Materialization(
- value, reinterpret_cast<RawUint32x4**>(dest_addr));
+ deopt_context->DeferInt32x4Materialization(
+ value, reinterpret_cast<RawInt32x4**>(dest_addr));
}
private:
const FpuRegister reg_;
- DISALLOW_COPY_AND_ASSIGN(DeoptUint32x4FpuRegisterInstr);
+ DISALLOW_COPY_AND_ASSIGN(DeoptInt32x4FpuRegisterInstr);
};
@@ -1069,8 +1069,8 @@
case kInt64StackSlot: return new DeoptInt64StackSlotInstr(source_index);
case kFloat32x4StackSlot:
return new DeoptFloat32x4StackSlotInstr(source_index);
- case kUint32x4StackSlot:
- return new DeoptUint32x4StackSlotInstr(source_index);
+ case kInt32x4StackSlot:
+ return new DeoptInt32x4StackSlotInstr(source_index);
case kRetAddress: return new DeoptRetAddressInstr(source_index);
case kConstant: return new DeoptConstantInstr(source_index);
case kRegister: return new DeoptRegisterInstr(source_index);
@@ -1078,8 +1078,8 @@
case kInt64FpuRegister: return new DeoptInt64FpuRegisterInstr(source_index);
case kFloat32x4FpuRegister:
return new DeoptFloat32x4FpuRegisterInstr(source_index);
- case kUint32x4FpuRegister:
- return new DeoptUint32x4FpuRegisterInstr(source_index);
+ case kInt32x4FpuRegister:
+ return new DeoptInt32x4FpuRegisterInstr(source_index);
case kPcMarker: return new DeoptPcMarkerInstr(source_index);
case kPp: return new DeoptPpInstr(source_index);
case kCallerFp: return new DeoptCallerFpInstr();
@@ -1214,8 +1214,8 @@
} else if (value->definition()->representation() == kUnboxedFloat32x4) {
deopt_instr = new DeoptFloat32x4FpuRegisterInstr(source_loc.fpu_reg());
} else {
- ASSERT(value->definition()->representation() == kUnboxedUint32x4);
- deopt_instr = new DeoptUint32x4FpuRegisterInstr(source_loc.fpu_reg());
+ ASSERT(value->definition()->representation() == kUnboxedInt32x4);
+ deopt_instr = new DeoptInt32x4FpuRegisterInstr(source_loc.fpu_reg());
}
} else if (source_loc.IsStackSlot()) {
ASSERT(value->definition()->representation() == kTagged);
@@ -1234,8 +1234,8 @@
if (value->definition()->representation() == kUnboxedFloat32x4) {
deopt_instr = new DeoptFloat32x4StackSlotInstr(source_index);
} else {
- ASSERT(value->definition()->representation() == kUnboxedUint32x4);
- deopt_instr = new DeoptUint32x4StackSlotInstr(source_index);
+ ASSERT(value->definition()->representation() == kUnboxedInt32x4);
+ deopt_instr = new DeoptInt32x4StackSlotInstr(source_index);
}
} else if (source_loc.IsInvalid() &&
value->definition()->IsMaterializeObject()) {
diff --git a/runtime/vm/deopt_instructions.h b/runtime/vm/deopt_instructions.h
index 36b1b7f..f55c120 100644
--- a/runtime/vm/deopt_instructions.h
+++ b/runtime/vm/deopt_instructions.h
@@ -134,9 +134,9 @@
deferred_boxes_);
}
- void DeferUint32x4Materialization(simd128_value_t value,
- RawUint32x4** slot) {
- deferred_boxes_ = new DeferredUint32x4(
+ void DeferInt32x4Materialization(simd128_value_t value,
+ RawInt32x4** slot) {
+ deferred_boxes_ = new DeferredInt32x4(
value,
reinterpret_cast<RawInstance**>(slot),
deferred_boxes_);
@@ -210,12 +210,12 @@
kFpuRegister,
kInt64FpuRegister,
kFloat32x4FpuRegister,
- kUint32x4FpuRegister,
+ kInt32x4FpuRegister,
kStackSlot,
kDoubleStackSlot,
kInt64StackSlot,
kFloat32x4StackSlot,
- kUint32x4StackSlot,
+ kInt32x4StackSlot,
kPcMarker,
kPp,
kCallerFp,
diff --git a/runtime/vm/flow_graph_allocator.cc b/runtime/vm/flow_graph_allocator.cc
index ab2d296..f40c175 100644
--- a/runtime/vm/flow_graph_allocator.cc
+++ b/runtime/vm/flow_graph_allocator.cc
@@ -605,7 +605,7 @@
if ((instr->representation() == kUnboxedDouble) ||
(instr->representation() == kUnboxedMint) ||
(instr->representation() == kUnboxedFloat32x4) ||
- (instr->representation() == kUnboxedUint32x4)) {
+ (instr->representation() == kUnboxedInt32x4)) {
return Location::kFpuRegister;
} else {
return Location::kRegister;
@@ -1601,7 +1601,7 @@
// parallel move resolution.
const bool need_quad = (register_kind_ == Location::kFpuRegister) &&
((range->representation() == kUnboxedFloat32x4) ||
- (range->representation() == kUnboxedUint32x4));
+ (range->representation() == kUnboxedInt32x4));
// Search for a free spill slot among allocated: the value in it should be
// dead and its type should match (e.g. it should not be a part of the quad if
@@ -1650,7 +1650,7 @@
Location location;
if ((range->representation() == kUnboxedFloat32x4) ||
- (range->representation() == kUnboxedUint32x4)) {
+ (range->representation() == kUnboxedInt32x4)) {
ASSERT(need_quad);
location = Location::QuadStackSlot(slot_idx);
} else {
diff --git a/runtime/vm/flow_graph_builder.cc b/runtime/vm/flow_graph_builder.cc
index 296c27a..b231788 100644
--- a/runtime/vm/flow_graph_builder.cc
+++ b/runtime/vm/flow_graph_builder.cc
@@ -2241,7 +2241,7 @@
case kTypedDataFloat32ArrayCid:
case kTypedDataFloat64ArrayCid:
case kTypedDataFloat32x4ArrayCid:
- case kTypedDataUint32x4ArrayCid:
+ case kTypedDataInt32x4ArrayCid:
return function_class.id();
default:
return kDynamicCid; // Unknown.
diff --git a/runtime/vm/flow_graph_compiler.cc b/runtime/vm/flow_graph_compiler.cc
index 199b4f3..a7affc9 100644
--- a/runtime/vm/flow_graph_compiler.cc
+++ b/runtime/vm/flow_graph_compiler.cc
@@ -84,8 +84,8 @@
Isolate::Current()->object_store()->double_class())),
float32x4_class_(Class::ZoneHandle(
Isolate::Current()->object_store()->float32x4_class())),
- uint32x4_class_(Class::ZoneHandle(
- Isolate::Current()->object_store()->uint32x4_class())),
+ int32x4_class_(Class::ZoneHandle(
+ Isolate::Current()->object_store()->int32x4_class())),
list_class_(Class::ZoneHandle(
Library::Handle(Library::CoreLibrary()).
LookupClass(Symbols::List()))),
@@ -505,7 +505,7 @@
it.SetCurrentLocation(Location::DoubleStackSlot(index));
break;
case kUnboxedFloat32x4:
- case kUnboxedUint32x4:
+ case kUnboxedInt32x4:
it.SetCurrentLocation(Location::QuadStackSlot(index));
break;
default:
diff --git a/runtime/vm/flow_graph_compiler.h b/runtime/vm/flow_graph_compiler.h
index 18c9028..debf138 100644
--- a/runtime/vm/flow_graph_compiler.h
+++ b/runtime/vm/flow_graph_compiler.h
@@ -429,7 +429,7 @@
const Class& double_class() const { return double_class_; }
const Class& float32x4_class() const { return float32x4_class_; }
- const Class& uint32x4_class() const { return uint32x4_class_; }
+ const Class& int32x4_class() const { return int32x4_class_; }
void SaveLiveRegisters(LocationSummary* locs);
void RestoreLiveRegisters(LocationSummary* locs);
@@ -598,7 +598,7 @@
const Class& double_class_;
const Class& float32x4_class_;
- const Class& uint32x4_class_;
+ const Class& int32x4_class_;
const Class& list_class_;
ParallelMoveResolver parallel_move_resolver_;
diff --git a/runtime/vm/flow_graph_optimizer.cc b/runtime/vm/flow_graph_optimizer.cc
index cda4032..378d474 100644
--- a/runtime/vm/flow_graph_optimizer.cc
+++ b/runtime/vm/flow_graph_optimizer.cc
@@ -393,13 +393,13 @@
converted = new UnboxFloat32x4Instr(use->CopyWithType(), deopt_id);
} else if ((from == kUnboxedFloat32x4) && (to == kTagged)) {
converted = new BoxFloat32x4Instr(use->CopyWithType());
- } else if ((from == kTagged) && (to == kUnboxedUint32x4)) {
- ASSERT((deopt_target != NULL) || (use->Type()->ToCid() == kUint32x4Cid));
+ } else if ((from == kTagged) && (to == kUnboxedInt32x4)) {
+ ASSERT((deopt_target != NULL) || (use->Type()->ToCid() == kInt32x4Cid));
const intptr_t deopt_id = (deopt_target != NULL) ?
deopt_target->DeoptimizationTarget() : Isolate::kNoDeoptId;
- converted = new UnboxUint32x4Instr(use->CopyWithType(), deopt_id);
- } else if ((from == kUnboxedUint32x4) && (to == kTagged)) {
- converted = new BoxUint32x4Instr(use->CopyWithType());
+ converted = new UnboxInt32x4Instr(use->CopyWithType(), deopt_id);
+ } else if ((from == kUnboxedInt32x4) && (to == kTagged)) {
+ converted = new BoxInt32x4Instr(use->CopyWithType());
} else {
// We have failed to find a suitable conversion instruction.
// Insert two "dummy" conversion instructions with the correct
@@ -412,8 +412,8 @@
Definition* boxed = NULL;
if (from == kUnboxedDouble) {
boxed = new BoxDoubleInstr(use->CopyWithType());
- } else if (from == kUnboxedUint32x4) {
- boxed = new BoxUint32x4Instr(use->CopyWithType());
+ } else if (from == kUnboxedInt32x4) {
+ boxed = new BoxInt32x4Instr(use->CopyWithType());
} else if (from == kUnboxedFloat32x4) {
boxed = new BoxFloat32x4Instr(use->CopyWithType());
} else if (from == kUnboxedMint) {
@@ -426,8 +426,8 @@
Value* to_value = new Value(boxed);
if (to == kUnboxedDouble) {
converted = new UnboxDoubleInstr(to_value, deopt_id);
- } else if (to == kUnboxedUint32x4) {
- converted = new UnboxUint32x4Instr(to_value, deopt_id);
+ } else if (to == kUnboxedInt32x4) {
+ converted = new UnboxInt32x4Instr(to_value, deopt_id);
} else if (to == kUnboxedFloat32x4) {
converted = new UnboxFloat32x4Instr(to_value, deopt_id);
} else if (to == kUnboxedMint) {
@@ -492,9 +492,9 @@
unboxed = kUnboxedFloat32x4;
}
break;
- case kUint32x4Cid:
+ case kInt32x4Cid:
if (ShouldInlineSimd()) {
- unboxed = kUnboxedUint32x4;
+ unboxed = kUnboxedInt32x4;
}
break;
}
@@ -510,7 +510,7 @@
void FlowGraphOptimizer::SelectRepresentations() {
// Convervatively unbox all phis that were proven to be of Double,
- // Float32x4, or Uint32x4 type.
+ // Float32x4, or Int32x4 type.
for (intptr_t i = 0; i < block_order_.length(); ++i) {
JoinEntryInstr* join_entry = block_order_[i]->AsJoinEntry();
if (join_entry != NULL) {
@@ -812,9 +812,9 @@
case MethodRecognizer::kFloat32x4ArraySetIndexed:
return kTypedDataFloat32x4ArrayCid;
- case MethodRecognizer::kUint32x4ArrayGetIndexed:
- case MethodRecognizer::kUint32x4ArraySetIndexed:
- return kTypedDataUint32x4ArrayCid;
+ case MethodRecognizer::kInt32x4ArrayGetIndexed:
+ case MethodRecognizer::kInt32x4ArraySetIndexed:
+ return kTypedDataInt32x4ArrayCid;
default:
break;
@@ -976,7 +976,7 @@
: kEmitStoreBarrier;
if (!value_check.IsNull()) {
// No store barrier needed because checked value is a smi, an unboxed mint,
- // an unboxed double, an unboxed Float32x4, or unboxed Uint32x4.
+ // an unboxed double, an unboxed Float32x4, or unboxed Int32x4.
needs_store_barrier = kNoStoreBarrier;
Instruction* check =
GetCheckClass(stored_value, value_check, call->deopt_id());
@@ -1122,10 +1122,10 @@
return InlineByteArrayViewLoad(call, receiver, receiver_cid,
kTypedDataFloat32x4ArrayCid,
ic_data, entry, last);
- case MethodRecognizer::kByteArrayBaseGetUint32x4:
+ case MethodRecognizer::kByteArrayBaseGetInt32x4:
if (!ShouldInlineSimd()) return false;
return InlineByteArrayViewLoad(call, receiver, receiver_cid,
- kTypedDataUint32x4ArrayCid,
+ kTypedDataInt32x4ArrayCid,
ic_data, entry, last);
default:
return false;
@@ -1370,8 +1370,8 @@
operands_type = kDoubleCid;
} else if (HasOnlyTwoOf(ic_data, kFloat32x4Cid)) {
operands_type = kFloat32x4Cid;
- } else if (HasOnlyTwoOf(ic_data, kUint32x4Cid)) {
- operands_type = kUint32x4Cid;
+ } else if (HasOnlyTwoOf(ic_data, kInt32x4Cid)) {
+ operands_type = kInt32x4Cid;
} else {
return false;
}
@@ -1415,8 +1415,8 @@
operands_type = kSmiCid;
} else if (HasTwoMintOrSmi(ic_data)) {
operands_type = kMintCid;
- } else if (HasOnlyTwoOf(ic_data, kUint32x4Cid)) {
- operands_type = kUint32x4Cid;
+ } else if (HasOnlyTwoOf(ic_data, kInt32x4Cid)) {
+ operands_type = kInt32x4Cid;
} else {
return false;
}
@@ -1490,8 +1490,8 @@
}
} else if (operands_type == kFloat32x4Cid) {
return InlineFloat32x4BinaryOp(call, op_kind);
- } else if (operands_type == kUint32x4Cid) {
- return InlineUint32x4BinaryOp(call, op_kind);
+ } else if (operands_type == kInt32x4Cid) {
+ return InlineInt32x4BinaryOp(call, op_kind);
} else if (op_kind == Token::kMOD) {
// TODO(vegorov): implement fast path code for modulo.
ASSERT(operands_type == kSmiCid);
@@ -1755,7 +1755,7 @@
}
-bool FlowGraphOptimizer::InlineUint32x4Getter(InstanceCallInstr* call,
+bool FlowGraphOptimizer::InlineInt32x4Getter(InstanceCallInstr* call,
MethodRecognizer::Kind getter) {
if (!ShouldInlineSimd()) {
return false;
@@ -1767,15 +1767,15 @@
call->env(),
call);
intptr_t mask = 0;
- if ((getter == MethodRecognizer::kUint32x4Shuffle) ||
- (getter == MethodRecognizer::kUint32x4ShuffleMix)) {
+ if ((getter == MethodRecognizer::kInt32x4Shuffle) ||
+ (getter == MethodRecognizer::kInt32x4ShuffleMix)) {
// Extract shuffle mask.
Definition* mask_definition = NULL;
- if (getter == MethodRecognizer::kUint32x4Shuffle) {
+ if (getter == MethodRecognizer::kInt32x4Shuffle) {
ASSERT(call->ArgumentCount() == 2);
mask_definition = call->ArgumentAt(1);
} else {
- ASSERT(getter == MethodRecognizer::kUint32x4ShuffleMix);
+ ASSERT(getter == MethodRecognizer::kInt32x4ShuffleMix);
ASSERT(call->ArgumentCount() == 3);
mask_definition = call->ArgumentAt(2);
}
@@ -1795,14 +1795,14 @@
return false;
}
}
- if (getter == MethodRecognizer::kUint32x4GetSignMask) {
+ if (getter == MethodRecognizer::kInt32x4GetSignMask) {
Simd32x4GetSignMaskInstr* instr = new Simd32x4GetSignMaskInstr(
getter,
new Value(call->ArgumentAt(0)),
call->deopt_id());
ReplaceCall(call, instr);
return true;
- } else if (getter == MethodRecognizer::kUint32x4ShuffleMix) {
+ } else if (getter == MethodRecognizer::kInt32x4ShuffleMix) {
Simd32x4ShuffleMixInstr* instr = new Simd32x4ShuffleMixInstr(
getter,
new Value(call->ArgumentAt(0)),
@@ -1811,7 +1811,7 @@
call->deopt_id());
ReplaceCall(call, instr);
return true;
- } else if (getter == MethodRecognizer::kUint32x4Shuffle) {
+ } else if (getter == MethodRecognizer::kInt32x4Shuffle) {
Simd32x4ShuffleInstr* instr = new Simd32x4ShuffleInstr(
getter,
new Value(call->ArgumentAt(0)),
@@ -1820,7 +1820,7 @@
ReplaceCall(call, instr);
return true;
} else {
- Uint32x4GetFlagInstr* instr = new Uint32x4GetFlagInstr(
+ Int32x4GetFlagInstr* instr = new Int32x4GetFlagInstr(
getter,
new Value(call->ArgumentAt(0)),
call->deopt_id());
@@ -1862,7 +1862,7 @@
}
-bool FlowGraphOptimizer::InlineUint32x4BinaryOp(InstanceCallInstr* call,
+bool FlowGraphOptimizer::InlineInt32x4BinaryOp(InstanceCallInstr* call,
Token::Kind op_kind) {
if (!ShouldInlineSimd()) {
return false;
@@ -1885,10 +1885,10 @@
call->env(),
call);
// Replace call.
- BinaryUint32x4OpInstr* uint32x4_bin_op =
- new BinaryUint32x4OpInstr(op_kind, new Value(left), new Value(right),
+ BinaryInt32x4OpInstr* int32x4_bin_op =
+ new BinaryInt32x4OpInstr(op_kind, new Value(left), new Value(right),
call->deopt_id());
- ReplaceCall(call, uint32x4_bin_op);
+ ReplaceCall(call, int32x4_bin_op);
return true;
}
@@ -1987,7 +1987,7 @@
case kTypedDataFloat32ArrayCid:
case kTypedDataFloat64ArrayCid:
case kTypedDataFloat32x4ArrayCid:
- case kTypedDataUint32x4ArrayCid:
+ case kTypedDataInt32x4ArrayCid:
return true;
default:
return false;
@@ -2161,8 +2161,8 @@
return BuildByteArrayViewLoad(call, kTypedDataFloat64ArrayCid);
case MethodRecognizer::kByteArrayBaseGetFloat32x4:
return BuildByteArrayViewLoad(call, kTypedDataFloat32x4ArrayCid);
- case MethodRecognizer::kByteArrayBaseGetUint32x4:
- return BuildByteArrayViewLoad(call, kTypedDataUint32x4ArrayCid);
+ case MethodRecognizer::kByteArrayBaseGetInt32x4:
+ return BuildByteArrayViewLoad(call, kTypedDataInt32x4ArrayCid);
// ByteArray setters.
case MethodRecognizer::kByteArrayBaseSetInt8:
@@ -2183,8 +2183,8 @@
return BuildByteArrayViewStore(call, kTypedDataFloat64ArrayCid);
case MethodRecognizer::kByteArrayBaseSetFloat32x4:
return BuildByteArrayViewStore(call, kTypedDataFloat32x4ArrayCid);
- case MethodRecognizer::kByteArrayBaseSetUint32x4:
- return BuildByteArrayViewStore(call, kTypedDataUint32x4ArrayCid);
+ case MethodRecognizer::kByteArrayBaseSetInt32x4:
+ return BuildByteArrayViewStore(call, kTypedDataInt32x4ArrayCid);
default:
// Unsupported method.
return false;
@@ -2195,8 +2195,8 @@
return TryInlineFloat32x4Method(call, recognized_kind);
}
- if ((class_ids[0] == kUint32x4Cid) && (ic_data.NumberOfChecks() == 1)) {
- return TryInlineUint32x4Method(call, recognized_kind);
+ if ((class_ids[0] == kInt32x4Cid) && (ic_data.NumberOfChecks() == 1)) {
+ return TryInlineInt32x4Method(call, recognized_kind);
}
if (recognized_kind == MethodRecognizer::kIntegerLeftShiftWithMask32) {
@@ -2288,9 +2288,9 @@
call->deopt_id());
ReplaceCall(call, con);
return true;
- } else if (recognized_kind == MethodRecognizer::kFloat32x4FromUint32x4Bits) {
- Uint32x4ToFloat32x4Instr* cast =
- new Uint32x4ToFloat32x4Instr(new Value(call->ArgumentAt(1)),
+ } else if (recognized_kind == MethodRecognizer::kFloat32x4FromInt32x4Bits) {
+ Int32x4ToFloat32x4Instr* cast =
+ new Int32x4ToFloat32x4Instr(new Value(call->ArgumentAt(1)),
call->deopt_id());
ReplaceCall(call, cast);
return true;
@@ -2299,14 +2299,14 @@
}
-bool FlowGraphOptimizer::TryInlineUint32x4Constructor(
+bool FlowGraphOptimizer::TryInlineInt32x4Constructor(
StaticCallInstr* call,
MethodRecognizer::Kind recognized_kind) {
if (!ShouldInlineSimd()) {
return false;
}
- if (recognized_kind == MethodRecognizer::kUint32x4BoolConstructor) {
- Uint32x4BoolConstructorInstr* con = new Uint32x4BoolConstructorInstr(
+ if (recognized_kind == MethodRecognizer::kInt32x4BoolConstructor) {
+ Int32x4BoolConstructorInstr* con = new Int32x4BoolConstructorInstr(
new Value(call->ArgumentAt(1)),
new Value(call->ArgumentAt(2)),
new Value(call->ArgumentAt(3)),
@@ -2314,9 +2314,9 @@
call->deopt_id());
ReplaceCall(call, con);
return true;
- } else if (recognized_kind == MethodRecognizer::kUint32x4FromFloat32x4Bits) {
- Float32x4ToUint32x4Instr* cast =
- new Float32x4ToUint32x4Instr(new Value(call->ArgumentAt(1)),
+ } else if (recognized_kind == MethodRecognizer::kInt32x4FromFloat32x4Bits) {
+ Float32x4ToInt32x4Instr* cast =
+ new Float32x4ToInt32x4Instr(new Value(call->ArgumentAt(1)),
call->deopt_id());
ReplaceCall(call, cast);
return true;
@@ -2480,7 +2480,7 @@
}
-bool FlowGraphOptimizer::TryInlineUint32x4Method(
+bool FlowGraphOptimizer::TryInlineInt32x4Method(
InstanceCallInstr* call,
MethodRecognizer::Kind recognized_kind) {
if (!ShouldInlineSimd()) {
@@ -2488,18 +2488,18 @@
}
ASSERT(call->HasICData());
switch (recognized_kind) {
- case MethodRecognizer::kUint32x4ShuffleMix:
- case MethodRecognizer::kUint32x4Shuffle:
- case MethodRecognizer::kUint32x4GetFlagX:
- case MethodRecognizer::kUint32x4GetFlagY:
- case MethodRecognizer::kUint32x4GetFlagZ:
- case MethodRecognizer::kUint32x4GetFlagW:
- case MethodRecognizer::kUint32x4GetSignMask:
- ASSERT(call->ic_data()->HasReceiverClassId(kUint32x4Cid));
+ case MethodRecognizer::kInt32x4ShuffleMix:
+ case MethodRecognizer::kInt32x4Shuffle:
+ case MethodRecognizer::kInt32x4GetFlagX:
+ case MethodRecognizer::kInt32x4GetFlagY:
+ case MethodRecognizer::kInt32x4GetFlagZ:
+ case MethodRecognizer::kInt32x4GetFlagW:
+ case MethodRecognizer::kInt32x4GetSignMask:
+ ASSERT(call->ic_data()->HasReceiverClassId(kInt32x4Cid));
ASSERT(call->ic_data()->HasOneTarget());
- return InlineUint32x4Getter(call, recognized_kind);
+ return InlineInt32x4Getter(call, recognized_kind);
- case MethodRecognizer::kUint32x4Select: {
+ case MethodRecognizer::kInt32x4Select: {
Definition* mask = call->ArgumentAt(0);
Definition* trueValue = call->ArgumentAt(1);
Definition* falseValue = call->ArgumentAt(2);
@@ -2510,7 +2510,7 @@
call->deopt_id(),
call->env(),
call);
- Uint32x4SelectInstr* select = new Uint32x4SelectInstr(
+ Int32x4SelectInstr* select = new Int32x4SelectInstr(
new Value(mask),
new Value(trueValue),
new Value(falseValue),
@@ -2518,10 +2518,10 @@
ReplaceCall(call, select);
return true;
}
- case MethodRecognizer::kUint32x4WithFlagX:
- case MethodRecognizer::kUint32x4WithFlagY:
- case MethodRecognizer::kUint32x4WithFlagZ:
- case MethodRecognizer::kUint32x4WithFlagW: {
+ case MethodRecognizer::kInt32x4WithFlagX:
+ case MethodRecognizer::kInt32x4WithFlagY:
+ case MethodRecognizer::kInt32x4WithFlagZ:
+ case MethodRecognizer::kInt32x4WithFlagW: {
Definition* left = call->ArgumentAt(0);
Definition* flag = call->ArgumentAt(1);
// Type check left.
@@ -2531,7 +2531,7 @@
call->deopt_id(),
call->env(),
call);
- Uint32x4SetFlagInstr* setFlag = new Uint32x4SetFlagInstr(
+ Int32x4SetFlagInstr* setFlag = new Int32x4SetFlagInstr(
recognized_kind,
new Value(left),
new Value(flag),
@@ -2675,7 +2675,7 @@
bool FlowGraphOptimizer::BuildByteArrayViewLoad(InstanceCallInstr* call,
intptr_t view_cid) {
bool simd_view = (view_cid == kTypedDataFloat32x4ArrayCid) ||
- (view_cid == kTypedDataUint32x4ArrayCid);
+ (view_cid == kTypedDataInt32x4ArrayCid);
if (simd_view && !ShouldInlineSimd()) {
return false;
}
@@ -2725,7 +2725,7 @@
bool FlowGraphOptimizer::BuildByteArrayViewStore(InstanceCallInstr* call,
intptr_t view_cid) {
bool simd_view = (view_cid == kTypedDataFloat32x4ArrayCid) ||
- (view_cid == kTypedDataUint32x4ArrayCid);
+ (view_cid == kTypedDataInt32x4ArrayCid);
if (simd_view && !ShouldInlineSimd()) {
return false;
}
@@ -2780,14 +2780,14 @@
value_check.AddReceiverCheck(kDoubleCid, target);
break;
}
- case kTypedDataUint32x4ArrayCid: {
- // Check that value is always Uint32x4.
+ case kTypedDataInt32x4ArrayCid: {
+ // Check that value is always Int32x4.
value_check = ICData::New(flow_graph_->parsed_function().function(),
call->function_name(),
Object::empty_array(), // Dummy args. descr.
Isolate::kNoDeoptId,
1);
- value_check.AddReceiverCheck(kUint32x4Cid, target);
+ value_check.AddReceiverCheck(kInt32x4Cid, target);
break;
}
case kTypedDataFloat32x4ArrayCid: {
@@ -3136,8 +3136,8 @@
(recognized_kind == MethodRecognizer::kFloat32x4Splat) ||
(recognized_kind == MethodRecognizer::kFloat32x4Constructor)) {
TryInlineFloat32x4Constructor(call, recognized_kind);
- } else if (recognized_kind == MethodRecognizer::kUint32x4BoolConstructor) {
- TryInlineUint32x4Constructor(call, recognized_kind);
+ } else if (recognized_kind == MethodRecognizer::kInt32x4BoolConstructor) {
+ TryInlineInt32x4Constructor(call, recognized_kind);
} else if (recognized_kind == MethodRecognizer::kObjectConstructor) {
// Remove the original push arguments.
for (intptr_t i = 0; i < call->ArgumentCount(); ++i) {
@@ -6992,40 +6992,40 @@
}
-void ConstantPropagator::VisitFloat32x4ToUint32x4(
- Float32x4ToUint32x4Instr* instr) {
+void ConstantPropagator::VisitFloat32x4ToInt32x4(
+ Float32x4ToInt32x4Instr* instr) {
SetValue(instr, non_constant_);
}
-void ConstantPropagator::VisitUint32x4BoolConstructor(
- Uint32x4BoolConstructorInstr* instr) {
+void ConstantPropagator::VisitInt32x4BoolConstructor(
+ Int32x4BoolConstructorInstr* instr) {
SetValue(instr, non_constant_);
}
-void ConstantPropagator::VisitUint32x4GetFlag(Uint32x4GetFlagInstr* instr) {
+void ConstantPropagator::VisitInt32x4GetFlag(Int32x4GetFlagInstr* instr) {
SetValue(instr, non_constant_);
}
-void ConstantPropagator::VisitUint32x4SetFlag(Uint32x4SetFlagInstr* instr) {
+void ConstantPropagator::VisitInt32x4SetFlag(Int32x4SetFlagInstr* instr) {
SetValue(instr, non_constant_);
}
-void ConstantPropagator::VisitUint32x4Select(Uint32x4SelectInstr* instr) {
+void ConstantPropagator::VisitInt32x4Select(Int32x4SelectInstr* instr) {
SetValue(instr, non_constant_);
}
-void ConstantPropagator::VisitUint32x4ToFloat32x4(
- Uint32x4ToFloat32x4Instr* instr) {
+void ConstantPropagator::VisitInt32x4ToFloat32x4(
+ Int32x4ToFloat32x4Instr* instr) {
SetValue(instr, non_constant_);
}
-void ConstantPropagator::VisitBinaryUint32x4Op(BinaryUint32x4OpInstr* instr) {
+void ConstantPropagator::VisitBinaryInt32x4Op(BinaryInt32x4OpInstr* instr) {
SetValue(instr, non_constant_);
}
@@ -7097,7 +7097,7 @@
}
-void ConstantPropagator::VisitUnboxUint32x4(UnboxUint32x4Instr* instr) {
+void ConstantPropagator::VisitUnboxInt32x4(UnboxInt32x4Instr* instr) {
const Object& value = instr->value()->definition()->constant_value();
if (IsNonConstant(value)) {
SetValue(instr, non_constant_);
@@ -7108,7 +7108,7 @@
}
-void ConstantPropagator::VisitBoxUint32x4(BoxUint32x4Instr* instr) {
+void ConstantPropagator::VisitBoxInt32x4(BoxInt32x4Instr* instr) {
const Object& value = instr->value()->definition()->constant_value();
if (IsNonConstant(value)) {
SetValue(instr, non_constant_);
diff --git a/runtime/vm/flow_graph_optimizer.h b/runtime/vm/flow_graph_optimizer.h
index 2940c6b..bd26fdd 100644
--- a/runtime/vm/flow_graph_optimizer.h
+++ b/runtime/vm/flow_graph_optimizer.h
@@ -110,11 +110,11 @@
bool TryInlineInstanceMethod(InstanceCallInstr* call);
bool TryInlineFloat32x4Constructor(StaticCallInstr* call,
MethodRecognizer::Kind recognized_kind);
- bool TryInlineUint32x4Constructor(StaticCallInstr* call,
+ bool TryInlineInt32x4Constructor(StaticCallInstr* call,
MethodRecognizer::Kind recognized_kind);
bool TryInlineFloat32x4Method(InstanceCallInstr* call,
MethodRecognizer::Kind recognized_kind);
- bool TryInlineUint32x4Method(InstanceCallInstr* call,
+ bool TryInlineInt32x4Method(InstanceCallInstr* call,
MethodRecognizer::Kind recognized_kind);
void ReplaceWithInstanceOf(InstanceCallInstr* instr);
void ReplaceWithTypeCast(InstanceCallInstr* instr);
@@ -187,11 +187,11 @@
bool InlineFloat32x4Getter(InstanceCallInstr* call,
MethodRecognizer::Kind getter);
- bool InlineUint32x4Getter(InstanceCallInstr* call,
+ bool InlineInt32x4Getter(InstanceCallInstr* call,
MethodRecognizer::Kind getter);
bool InlineFloat32x4BinaryOp(InstanceCallInstr* call,
Token::Kind op_kind);
- bool InlineUint32x4BinaryOp(InstanceCallInstr* call,
+ bool InlineInt32x4BinaryOp(InstanceCallInstr* call,
Token::Kind op_kind);
void InlineImplicitInstanceGetter(InstanceCallInstr* call);
diff --git a/runtime/vm/flow_graph_type_propagator.cc b/runtime/vm/flow_graph_type_propagator.cc
index 6dc3a61..9c4a1f4 100644
--- a/runtime/vm/flow_graph_type_propagator.cc
+++ b/runtime/vm/flow_graph_type_propagator.cc
@@ -1056,8 +1056,8 @@
(op_kind() == MethodRecognizer::kFloat32x4ShuffleW)) {
return CompileType::FromCid(kDoubleCid);
}
- if ((op_kind() == MethodRecognizer::kUint32x4Shuffle)) {
- return CompileType::FromCid(kUint32x4Cid);
+ if ((op_kind() == MethodRecognizer::kInt32x4Shuffle)) {
+ return CompileType::FromCid(kInt32x4Cid);
}
ASSERT((op_kind() == MethodRecognizer::kFloat32x4Shuffle));
return CompileType::FromCid(kFloat32x4Cid);
@@ -1065,8 +1065,8 @@
CompileType Simd32x4ShuffleMixInstr::ComputeType() const {
- if (op_kind() == MethodRecognizer::kUint32x4ShuffleMix) {
- return CompileType::FromCid(kUint32x4Cid);
+ if (op_kind() == MethodRecognizer::kInt32x4ShuffleMix) {
+ return CompileType::FromCid(kInt32x4Cid);
}
ASSERT((op_kind() == MethodRecognizer::kFloat32x4ShuffleMix));
return CompileType::FromCid(kFloat32x4Cid);
@@ -1094,7 +1094,7 @@
CompileType Float32x4ComparisonInstr::ComputeType() const {
- return CompileType::FromCid(kUint32x4Cid);
+ return CompileType::FromCid(kInt32x4Cid);
}
@@ -1128,38 +1128,38 @@
}
-CompileType Float32x4ToUint32x4Instr::ComputeType() const {
- return CompileType::FromCid(kUint32x4Cid);
+CompileType Float32x4ToInt32x4Instr::ComputeType() const {
+ return CompileType::FromCid(kInt32x4Cid);
}
-CompileType Uint32x4BoolConstructorInstr::ComputeType() const {
- return CompileType::FromCid(kUint32x4Cid);
+CompileType Int32x4BoolConstructorInstr::ComputeType() const {
+ return CompileType::FromCid(kInt32x4Cid);
}
-CompileType Uint32x4GetFlagInstr::ComputeType() const {
+CompileType Int32x4GetFlagInstr::ComputeType() const {
return CompileType::FromCid(kBoolCid);
}
-CompileType Uint32x4SelectInstr::ComputeType() const {
+CompileType Int32x4SelectInstr::ComputeType() const {
return CompileType::FromCid(kFloat32x4Cid);
}
-CompileType Uint32x4SetFlagInstr::ComputeType() const {
- return CompileType::FromCid(kUint32x4Cid);
+CompileType Int32x4SetFlagInstr::ComputeType() const {
+ return CompileType::FromCid(kInt32x4Cid);
}
-CompileType Uint32x4ToFloat32x4Instr::ComputeType() const {
+CompileType Int32x4ToFloat32x4Instr::ComputeType() const {
return CompileType::FromCid(kFloat32x4Cid);
}
-CompileType BinaryUint32x4OpInstr::ComputeType() const {
- return CompileType::FromCid(kUint32x4Cid);
+CompileType BinaryInt32x4OpInstr::ComputeType() const {
+ return CompileType::FromCid(kInt32x4Cid);
}
@@ -1193,13 +1193,13 @@
}
-CompileType UnboxUint32x4Instr::ComputeType() const {
- return CompileType::FromCid(kUint32x4Cid);
+CompileType UnboxInt32x4Instr::ComputeType() const {
+ return CompileType::FromCid(kInt32x4Cid);
}
-CompileType BoxUint32x4Instr::ComputeType() const {
- return CompileType::FromCid(kUint32x4Cid);
+CompileType BoxInt32x4Instr::ComputeType() const {
+ return CompileType::FromCid(kInt32x4Cid);
}
diff --git a/runtime/vm/freelist.h b/runtime/vm/freelist.h
index 072348a..8ec1ac4 100644
--- a/runtime/vm/freelist.h
+++ b/runtime/vm/freelist.h
@@ -43,6 +43,7 @@
FakeInstance() { }
static cpp_vtable vtable() { return 0; }
static intptr_t InstanceSize() { return 0; }
+ static intptr_t NextFieldOffset() { return -kWordSize; }
static const ClassId kClassId = kFreeListElement;
static bool IsInstance() { return true; }
diff --git a/runtime/vm/il_printer.cc b/runtime/vm/il_printer.cc
index cfeca9b..202bb3c 100644
--- a/runtime/vm/il_printer.cc
+++ b/runtime/vm/il_printer.cc
@@ -625,8 +625,8 @@
if (op_kind() == MethodRecognizer::kFloat32x4GetSignMask) {
f->Print("Float32x4.getSignMask ");
} else {
- ASSERT(op_kind() == MethodRecognizer::kUint32x4GetSignMask);
- f->Print("Uint32x4.getSignMask ");
+ ASSERT(op_kind() == MethodRecognizer::kInt32x4GetSignMask);
+ f->Print("Int32x4.getSignMask ");
}
value()->PrintTo(f);
}
@@ -707,8 +707,8 @@
}
-void Float32x4ToUint32x4Instr::PrintOperandsTo(BufferFormatter* f) const {
- f->Print("Float32x4.toUint32x4 ");
+void Float32x4ToInt32x4Instr::PrintOperandsTo(BufferFormatter* f) const {
+ f->Print("Float32x4.toInt32x4 ");
left()->PrintTo(f);
}
@@ -716,8 +716,8 @@
-void Uint32x4BoolConstructorInstr::PrintOperandsTo(BufferFormatter* f) const {
- f->Print("Uint32x4.bool(");
+void Int32x4BoolConstructorInstr::PrintOperandsTo(BufferFormatter* f) const {
+ f->Print("Int32x4.bool(");
value0()->PrintTo(f);
f->Print(", ");
value1()->PrintTo(f);
@@ -729,22 +729,22 @@
}
-void Uint32x4GetFlagInstr::PrintOperandsTo(BufferFormatter* f) const {
- f->Print("Uint32x4.%s ", MethodRecognizer::KindToCString(op_kind()));
+void Int32x4GetFlagInstr::PrintOperandsTo(BufferFormatter* f) const {
+ f->Print("Int32x4.%s ", MethodRecognizer::KindToCString(op_kind()));
value()->PrintTo(f);
}
-void Uint32x4SetFlagInstr::PrintOperandsTo(BufferFormatter* f) const {
- f->Print("Uint32x4.%s ", MethodRecognizer::KindToCString(op_kind()));
+void Int32x4SetFlagInstr::PrintOperandsTo(BufferFormatter* f) const {
+ f->Print("Int32x4.%s ", MethodRecognizer::KindToCString(op_kind()));
value()->PrintTo(f);
f->Print(", ");
flagValue()->PrintTo(f);
}
-void Uint32x4SelectInstr::PrintOperandsTo(BufferFormatter* f) const {
- f->Print("Uint32x4.select ");
+void Int32x4SelectInstr::PrintOperandsTo(BufferFormatter* f) const {
+ f->Print("Int32x4.select ");
mask()->PrintTo(f);
f->Print(", ");
trueValue()->PrintTo(f);
@@ -753,13 +753,13 @@
}
-void Uint32x4ToFloat32x4Instr::PrintOperandsTo(BufferFormatter* f) const {
- f->Print("Uint32x4.toFloat32x4 ");
+void Int32x4ToFloat32x4Instr::PrintOperandsTo(BufferFormatter* f) const {
+ f->Print("Int32x4.toFloat32x4 ");
left()->PrintTo(f);
}
-void BinaryUint32x4OpInstr::PrintOperandsTo(BufferFormatter* f) const {
+void BinaryInt32x4OpInstr::PrintOperandsTo(BufferFormatter* f) const {
f->Print("%s, ", Token::Str(op_kind()));
left()->PrintTo(f);
f->Print(", ");
diff --git a/runtime/vm/intermediate_language.cc b/runtime/vm/intermediate_language.cc
index 50e3caf..52f7fb0 100644
--- a/runtime/vm/intermediate_language.cc
+++ b/runtime/vm/intermediate_language.cc
@@ -1517,15 +1517,15 @@
}
-Definition* BoxUint32x4Instr::Canonicalize(FlowGraph* flow_graph) {
+Definition* BoxInt32x4Instr::Canonicalize(FlowGraph* flow_graph) {
if (input_use_list() == NULL) {
// Environments can accomodate any representation. No need to box.
return value()->definition();
}
- // Fold away BoxUint32x4(UnboxUint32x4(v)).
- UnboxUint32x4Instr* defn = value()->definition()->AsUnboxUint32x4();
- if ((defn != NULL) && (defn->value()->Type()->ToCid() == kUint32x4Cid)) {
+ // Fold away BoxInt32x4(UnboxInt32x4(v)).
+ UnboxInt32x4Instr* defn = value()->definition()->AsUnboxInt32x4();
+ if ((defn != NULL) && (defn->value()->Type()->ToCid() == kInt32x4Cid)) {
return defn->value()->definition();
}
@@ -1533,9 +1533,9 @@
}
-Definition* UnboxUint32x4Instr::Canonicalize(FlowGraph* flow_graph) {
- // Fold away UnboxUint32x4(BoxUint32x4(v)).
- BoxUint32x4Instr* defn = value()->definition()->AsBoxUint32x4();
+Definition* UnboxInt32x4Instr::Canonicalize(FlowGraph* flow_graph) {
+ // Fold away UnboxInt32x4(BoxInt32x4(v)).
+ BoxInt32x4Instr* defn = value()->definition()->AsBoxInt32x4();
return (defn != NULL) ? defn->value()->definition() : this;
}
diff --git a/runtime/vm/intermediate_language.h b/runtime/vm/intermediate_language.h
index b4e6878..ea91a10 100644
--- a/runtime/vm/intermediate_language.h
+++ b/runtime/vm/intermediate_language.h
@@ -53,7 +53,7 @@
V(_TypedList, _getFloat32, ByteArrayBaseGetFloat32, 185163470) \
V(_TypedList, _getFloat64, ByteArrayBaseGetFloat64, 1356392173) \
V(_TypedList, _getFloat32x4, ByteArrayBaseGetFloat32x4, 1239681356) \
- V(_TypedList, _getUint32x4, ByteArrayBaseGetUint32x4, 1499091330) \
+ V(_TypedList, _getInt32x4, ByteArrayBaseGetInt32x4, 163795162) \
V(_TypedList, _setInt8, ByteArrayBaseSetInt8, 1443265945) \
V(_TypedList, _setUint8, ByteArrayBaseSetUint8, 1864204733) \
V(_TypedList, _setInt16, ByteArrayBaseSetInt16, 1807419109) \
@@ -63,7 +63,7 @@
V(_TypedList, _setFloat32, ByteArrayBaseSetFloat32, 1457395244) \
V(_TypedList, _setFloat64, ByteArrayBaseSetFloat64, 49127618) \
V(_TypedList, _setFloat32x4, ByteArrayBaseSetFloat32x4, 1261559935) \
- V(_TypedList, _setUint32x4, ByteArrayBaseSetUint32x4, 691480480) \
+ V(_TypedList, _setInt32x4, ByteArrayBaseSetInt32x4, 1871750680) \
V(_GrowableList, get:length, GrowableArrayLength, 1654225242) \
V(_GrowableList, get:_capacity, GrowableArrayCapacity, 817090003) \
V(_GrowableList, _setData, GrowableArraySetData, 1375509957) \
@@ -92,8 +92,8 @@
V(Float32x4, Float32x4., Float32x4Constructor, 786169160) \
V(Float32x4, Float32x4.zero, Float32x4Zero, 1589383280) \
V(Float32x4, Float32x4.splat, Float32x4Splat, 62513275) \
- V(Float32x4, Float32x4.fromUint32x4Bits, Float32x4FromUint32x4Bits, \
- 770033146) \
+ V(Float32x4, Float32x4.fromInt32x4Bits, Float32x4FromInt32x4Bits, \
+ 1933861675) \
V(_Float32x4, shuffle, Float32x4Shuffle, 1178727105) \
V(_Float32x4, shuffleMix, Float32x4ShuffleMix, 927956119) \
V(_Float32x4, get:x, Float32x4ShuffleX, 1351717838) \
@@ -101,12 +101,12 @@
V(_Float32x4, get:z, Float32x4ShuffleZ, 2144923721) \
V(_Float32x4, get:w, Float32x4ShuffleW, 1447699119) \
V(_Float32x4, get:signMask, Float32x4GetSignMask, 1198849347) \
- V(_Float32x4, _cmpequal, Float32x4Equal, 2141256163) \
- V(_Float32x4, _cmpgt, Float32x4GreaterThan, 696292270) \
- V(_Float32x4, _cmpgte, Float32x4GreaterThanOrEqual, 1199333164) \
- V(_Float32x4, _cmplt, Float32x4LessThan, 943396590) \
- V(_Float32x4, _cmplte, Float32x4LessThanOrEqual, 57211241) \
- V(_Float32x4, _cmpnequal, Float32x4NotEqual, 1234888884) \
+ V(_Float32x4, _cmpequal, Float32x4Equal, 1944929844) \
+ V(_Float32x4, _cmpgt, Float32x4GreaterThan, 499965951) \
+ V(_Float32x4, _cmpgte, Float32x4GreaterThanOrEqual, 1003006845) \
+ V(_Float32x4, _cmplt, Float32x4LessThan, 747070271) \
+ V(_Float32x4, _cmplte, Float32x4LessThanOrEqual, 2008368570) \
+ V(_Float32x4, _cmpnequal, Float32x4NotEqual, 1038562565) \
V(_Float32x4, _min, Float32x4Min, 1166664658) \
V(_Float32x4, _max, Float32x4Max, 343968921) \
V(_Float32x4, _scale, Float32x4Scale, 803505531) \
@@ -120,21 +120,21 @@
V(_Float32x4, withY, Float32x4WithY, 1806065938) \
V(_Float32x4, withZ, Float32x4WithZ, 320659034) \
V(_Float32x4, withW, Float32x4WithW, 1108437255) \
- V(Uint32x4, Uint32x4.bool, Uint32x4BoolConstructor, 517444095) \
- V(Uint32x4, Uint32x4.fromFloat32x4Bits, Uint32x4FromFloat32x4Bits, \
- 1080034855) \
- V(_Uint32x4, get:flagX, Uint32x4GetFlagX, 1674696792) \
- V(_Uint32x4, get:flagY, Uint32x4GetFlagY, 2013200152) \
- V(_Uint32x4, get:flagZ, Uint32x4GetFlagZ, 944733935) \
- V(_Uint32x4, get:flagW, Uint32x4GetFlagW, 22746169) \
- V(_Uint32x4, get:signMask, Uint32x4GetSignMask, 1858144083) \
- V(_Uint32x4, shuffle, Uint32x4Shuffle, 146209630) \
- V(_Uint32x4, shuffleMix, Uint32x4ShuffleMix, 1251494596) \
- V(_Uint32x4, select, Uint32x4Select, 72244182) \
- V(_Uint32x4, withFlagX, Uint32x4WithFlagX, 1475542073) \
- V(_Uint32x4, withFlagY, Uint32x4WithFlagY, 830610988) \
- V(_Uint32x4, withFlagZ, Uint32x4WithFlagZ, 1714792414) \
- V(_Uint32x4, withFlagW, Uint32x4WithFlagW, 1516924162) \
+ V(Int32x4, Int32x4.bool, Int32x4BoolConstructor, 1477593884) \
+ V(Int32x4, Int32x4.fromFloat32x4Bits, Int32x4FromFloat32x4Bits, \
+ 1955567428) \
+ V(_Int32x4, get:flagX, Int32x4GetFlagX, 729235803) \
+ V(_Int32x4, get:flagY, Int32x4GetFlagY, 430840849) \
+ V(_Int32x4, get:flagZ, Int32x4GetFlagZ, 1981076496) \
+ V(_Int32x4, get:flagW, Int32x4GetFlagW, 629356099) \
+ V(_Int32x4, get:signMask, Int32x4GetSignMask, 1598787746) \
+ V(_Int32x4, shuffle, Int32x4Shuffle, 599391160) \
+ V(_Int32x4, shuffleMix, Int32x4ShuffleMix, 1491641197) \
+ V(_Int32x4, select, Int32x4Select, 598942806) \
+ V(_Int32x4, withFlagX, Int32x4WithFlagX, 63248661) \
+ V(_Int32x4, withFlagY, Int32x4WithFlagY, 1498755850) \
+ V(_Int32x4, withFlagZ, Int32x4WithFlagZ, 457856832) \
+ V(_Int32x4, withFlagW, Int32x4WithFlagW, 690638779) \
V(_List, [], ObjectArrayGetIndexed, 1079829188) \
V(_List, []=, ObjectArraySetIndexed, 748954698) \
V(_ImmutableList, [], ImmutableArrayGetIndexed, 25983597) \
@@ -166,8 +166,8 @@
V(_Uint32Array, []=, Uint32ArraySetIndexed, 1980947178) \
V(_Float32x4Array, [], Float32x4ArrayGetIndexed, 1901126825) \
V(_Float32x4Array, []=, Float32x4ArraySetIndexed, 1419416331) \
- V(_Uint32x4Array, [], Uint32x4ArrayGetIndexed, 1340743913) \
- V(_Uint32x4Array, []=, Uint32x4ArraySetIndexed, 1326924628) \
+ V(_Int32x4Array, [], Int32x4ArrayGetIndexed, 1675579883) \
+ V(_Int32x4Array, []=, Int32x4ArraySetIndexed, 809970636) \
// A list of core function that should always be inlined.
@@ -192,7 +192,7 @@
V(_TypedList, _getFloat32, ByteArrayBaseGetFloat32, 185163470) \
V(_TypedList, _getFloat64, ByteArrayBaseGetFloat64, 1356392173) \
V(_TypedList, _getFloat32x4, ByteArrayBaseGetFloat32x4, 1239681356) \
- V(_TypedList, _getUint32x4, ByteArrayBaseGetUint32x4, 1499091330) \
+ V(_TypedList, _getInt32x4, ByteArrayBaseGetInt32x4, 163795162) \
// Class that recognizes the name and owner of a function and returns the
// corresponding enum. See RECOGNIZED_LIST above for list of recognizable
@@ -660,8 +660,8 @@
M(BoxDouble) \
M(BoxFloat32x4) \
M(UnboxFloat32x4) \
- M(BoxUint32x4) \
- M(UnboxUint32x4) \
+ M(BoxInt32x4) \
+ M(UnboxInt32x4) \
M(UnboxInteger) \
M(BoxInteger) \
M(BinaryMintOp) \
@@ -688,14 +688,14 @@
M(Float32x4ZeroArg) \
M(Float32x4Clamp) \
M(Float32x4With) \
- M(Float32x4ToUint32x4) \
+ M(Float32x4ToInt32x4) \
M(MaterializeObject) \
- M(Uint32x4BoolConstructor) \
- M(Uint32x4GetFlag) \
- M(Uint32x4Select) \
- M(Uint32x4SetFlag) \
- M(Uint32x4ToFloat32x4) \
- M(BinaryUint32x4Op) \
+ M(Int32x4BoolConstructor) \
+ M(Int32x4GetFlag) \
+ M(Int32x4Select) \
+ M(Int32x4SetFlag) \
+ M(Int32x4ToFloat32x4) \
+ M(BinaryInt32x4Op) \
#define FORWARD_DECLARATION(type) class type##Instr;
@@ -960,7 +960,7 @@
friend class UnboxIntegerInstr;
friend class UnboxDoubleInstr;
friend class UnboxFloat32x4Instr;
- friend class UnboxUint32x4Instr;
+ friend class UnboxInt32x4Instr;
friend class BinaryDoubleOpInstr;
friend class BinaryFloat32x4OpInstr;
friend class Float32x4ZeroInstr;
@@ -976,13 +976,13 @@
friend class Float32x4ZeroArgInstr;
friend class Float32x4ClampInstr;
friend class Float32x4WithInstr;
- friend class Float32x4ToUint32x4Instr;
- friend class Uint32x4BoolConstructorInstr;
- friend class Uint32x4GetFlagInstr;
- friend class Uint32x4SetFlagInstr;
- friend class Uint32x4SelectInstr;
- friend class Uint32x4ToFloat32x4Instr;
- friend class BinaryUint32x4OpInstr;
+ friend class Float32x4ToInt32x4Instr;
+ friend class Int32x4BoolConstructorInstr;
+ friend class Int32x4GetFlagInstr;
+ friend class Int32x4SetFlagInstr;
+ friend class Int32x4SelectInstr;
+ friend class Int32x4ToFloat32x4Instr;
+ friend class BinaryInt32x4OpInstr;
friend class BinaryMintOpInstr;
friend class BinarySmiOpInstr;
friend class UnarySmiOpInstr;
@@ -4571,9 +4571,9 @@
};
-class BoxUint32x4Instr : public TemplateDefinition<1> {
+class BoxInt32x4Instr : public TemplateDefinition<1> {
public:
- explicit BoxUint32x4Instr(Value* value) {
+ explicit BoxInt32x4Instr(Value* value) {
SetInputAt(0, value);
}
@@ -4583,10 +4583,10 @@
virtual Representation RequiredInputRepresentation(intptr_t idx) const {
ASSERT(idx == 0);
- return kUnboxedUint32x4;
+ return kUnboxedInt32x4;
}
- DECLARE_INSTRUCTION(BoxUint32x4)
+ DECLARE_INSTRUCTION(BoxInt32x4)
virtual CompileType ComputeType() const;
virtual bool AllowsCSE() const { return true; }
@@ -4599,7 +4599,7 @@
Definition* Canonicalize(FlowGraph* flow_graph);
private:
- DISALLOW_COPY_AND_ASSIGN(BoxUint32x4Instr);
+ DISALLOW_COPY_AND_ASSIGN(BoxInt32x4Instr);
};
@@ -4702,9 +4702,9 @@
};
-class UnboxUint32x4Instr : public TemplateDefinition<1> {
+class UnboxInt32x4Instr : public TemplateDefinition<1> {
public:
- UnboxUint32x4Instr(Value* value, intptr_t deopt_id) {
+ UnboxInt32x4Instr(Value* value, intptr_t deopt_id) {
SetInputAt(0, value);
deopt_id_ = deopt_id;
}
@@ -4712,11 +4712,11 @@
Value* value() const { return inputs_[0]; }
virtual bool CanDeoptimize() const {
- return (value()->Type()->ToCid() != kUint32x4Cid);
+ return (value()->Type()->ToCid() != kInt32x4Cid);
}
virtual Representation representation() const {
- return kUnboxedUint32x4;
+ return kUnboxedInt32x4;
}
virtual bool AllowsCSE() const { return true; }
@@ -4724,7 +4724,7 @@
virtual EffectSet Dependencies() const { return EffectSet::None(); }
virtual bool AttributesEqual(Instruction* other) const { return true; }
- DECLARE_INSTRUCTION(UnboxUint32x4)
+ DECLARE_INSTRUCTION(UnboxInt32x4)
virtual CompileType ComputeType() const;
virtual bool MayThrow() const { return false; }
@@ -4732,7 +4732,7 @@
Definition* Canonicalize(FlowGraph* flow_graph);
private:
- DISALLOW_COPY_AND_ASSIGN(UnboxUint32x4Instr);
+ DISALLOW_COPY_AND_ASSIGN(UnboxInt32x4Instr);
};
@@ -5021,8 +5021,8 @@
(op_kind_ == MethodRecognizer::kFloat32x4ShuffleW)) {
return kUnboxedDouble;
}
- if ((op_kind_ == MethodRecognizer::kUint32x4Shuffle)) {
- return kUnboxedUint32x4;
+ if ((op_kind_ == MethodRecognizer::kInt32x4Shuffle)) {
+ return kUnboxedInt32x4;
}
ASSERT((op_kind_ == MethodRecognizer::kFloat32x4Shuffle));
return kUnboxedFloat32x4;
@@ -5037,8 +5037,8 @@
(op_kind_ == MethodRecognizer::kFloat32x4Shuffle)) {
return kUnboxedFloat32x4;
}
- ASSERT((op_kind_ == MethodRecognizer::kUint32x4Shuffle));
- return kUnboxedUint32x4;
+ ASSERT((op_kind_ == MethodRecognizer::kInt32x4Shuffle));
+ return kUnboxedInt32x4;
}
virtual intptr_t DeoptimizationTarget() const {
@@ -5090,8 +5090,8 @@
virtual bool CanDeoptimize() const { return false; }
virtual Representation representation() const {
- if (op_kind() == MethodRecognizer::kUint32x4ShuffleMix) {
- return kUnboxedUint32x4;
+ if (op_kind() == MethodRecognizer::kInt32x4ShuffleMix) {
+ return kUnboxedInt32x4;
}
ASSERT(op_kind() == MethodRecognizer::kFloat32x4ShuffleMix);
return kUnboxedFloat32x4;
@@ -5099,8 +5099,8 @@
virtual Representation RequiredInputRepresentation(intptr_t idx) const {
ASSERT((idx == 0) || (idx == 1));
- if (op_kind() == MethodRecognizer::kUint32x4ShuffleMix) {
- return kUnboxedUint32x4;
+ if (op_kind() == MethodRecognizer::kInt32x4ShuffleMix) {
+ return kUnboxedInt32x4;
}
ASSERT(op_kind() == MethodRecognizer::kFloat32x4ShuffleMix);
return kUnboxedFloat32x4;
@@ -5288,7 +5288,7 @@
virtual bool CanDeoptimize() const { return false; }
virtual Representation representation() const {
- return kUnboxedUint32x4;
+ return kUnboxedInt32x4;
}
virtual Representation RequiredInputRepresentation(intptr_t idx) const {
@@ -5634,9 +5634,9 @@
};
-class Float32x4ToUint32x4Instr : public TemplateDefinition<1> {
+class Float32x4ToInt32x4Instr : public TemplateDefinition<1> {
public:
- Float32x4ToUint32x4Instr(Value* left, intptr_t deopt_id) {
+ Float32x4ToInt32x4Instr(Value* left, intptr_t deopt_id) {
SetInputAt(0, left);
deopt_id_ = deopt_id;
}
@@ -5648,7 +5648,7 @@
virtual bool CanDeoptimize() const { return false; }
virtual Representation representation() const {
- return kUnboxedUint32x4;
+ return kUnboxedInt32x4;
}
virtual Representation RequiredInputRepresentation(intptr_t idx) const {
@@ -5662,7 +5662,7 @@
return deopt_id_;
}
- DECLARE_INSTRUCTION(Float32x4ToUint32x4)
+ DECLARE_INSTRUCTION(Float32x4ToInt32x4)
virtual CompileType ComputeType() const;
virtual bool AllowsCSE() const { return true; }
@@ -5673,13 +5673,13 @@
virtual bool MayThrow() const { return false; }
private:
- DISALLOW_COPY_AND_ASSIGN(Float32x4ToUint32x4Instr);
+ DISALLOW_COPY_AND_ASSIGN(Float32x4ToInt32x4Instr);
};
-class Uint32x4BoolConstructorInstr : public TemplateDefinition<4> {
+class Int32x4BoolConstructorInstr : public TemplateDefinition<4> {
public:
- Uint32x4BoolConstructorInstr(Value* value0, Value* value1, Value* value2,
+ Int32x4BoolConstructorInstr(Value* value0, Value* value1, Value* value2,
Value* value3, intptr_t deopt_id) {
SetInputAt(0, value0);
SetInputAt(1, value1);
@@ -5698,7 +5698,7 @@
virtual bool CanDeoptimize() const { return false; }
virtual Representation representation() const {
- return kUnboxedUint32x4;
+ return kUnboxedInt32x4;
}
virtual Representation RequiredInputRepresentation(intptr_t idx) const {
@@ -5712,7 +5712,7 @@
return deopt_id_;
}
- DECLARE_INSTRUCTION(Uint32x4BoolConstructor)
+ DECLARE_INSTRUCTION(Int32x4BoolConstructor)
virtual CompileType ComputeType() const;
virtual bool AllowsCSE() const { return true; }
@@ -5723,13 +5723,13 @@
virtual bool MayThrow() const { return false; }
private:
- DISALLOW_COPY_AND_ASSIGN(Uint32x4BoolConstructorInstr);
+ DISALLOW_COPY_AND_ASSIGN(Int32x4BoolConstructorInstr);
};
-class Uint32x4GetFlagInstr : public TemplateDefinition<1> {
+class Int32x4GetFlagInstr : public TemplateDefinition<1> {
public:
- Uint32x4GetFlagInstr(MethodRecognizer::Kind op_kind, Value* value,
+ Int32x4GetFlagInstr(MethodRecognizer::Kind op_kind, Value* value,
intptr_t deopt_id)
: op_kind_(op_kind) {
SetInputAt(0, value);
@@ -5750,7 +5750,7 @@
virtual Representation RequiredInputRepresentation(intptr_t idx) const {
ASSERT(idx == 0);
- return kUnboxedUint32x4;
+ return kUnboxedInt32x4;
}
virtual intptr_t DeoptimizationTarget() const {
@@ -5759,14 +5759,14 @@
return deopt_id_;
}
- DECLARE_INSTRUCTION(Uint32x4GetFlag)
+ DECLARE_INSTRUCTION(Int32x4GetFlag)
virtual CompileType ComputeType() const;
virtual bool AllowsCSE() const { return true; }
virtual EffectSet Effects() const { return EffectSet::None(); }
virtual EffectSet Dependencies() const { return EffectSet::None(); }
virtual bool AttributesEqual(Instruction* other) const {
- return op_kind() == other->AsUint32x4GetFlag()->op_kind();
+ return op_kind() == other->AsInt32x4GetFlag()->op_kind();
}
virtual bool MayThrow() const { return false; }
@@ -5774,7 +5774,7 @@
private:
const MethodRecognizer::Kind op_kind_;
- DISALLOW_COPY_AND_ASSIGN(Uint32x4GetFlagInstr);
+ DISALLOW_COPY_AND_ASSIGN(Int32x4GetFlagInstr);
};
@@ -5803,8 +5803,8 @@
if (op_kind_ == MethodRecognizer::kFloat32x4GetSignMask) {
return kUnboxedFloat32x4;
}
- ASSERT(op_kind_ == MethodRecognizer::kUint32x4GetSignMask);
- return kUnboxedUint32x4;
+ ASSERT(op_kind_ == MethodRecognizer::kInt32x4GetSignMask);
+ return kUnboxedInt32x4;
}
virtual intptr_t DeoptimizationTarget() const {
@@ -5832,9 +5832,9 @@
};
-class Uint32x4SelectInstr : public TemplateDefinition<3> {
+class Int32x4SelectInstr : public TemplateDefinition<3> {
public:
- Uint32x4SelectInstr(Value* mask, Value* trueValue, Value* falseValue,
+ Int32x4SelectInstr(Value* mask, Value* trueValue, Value* falseValue,
intptr_t deopt_id) {
SetInputAt(0, mask);
SetInputAt(1, trueValue);
@@ -5857,7 +5857,7 @@
virtual Representation RequiredInputRepresentation(intptr_t idx) const {
ASSERT((idx == 0) || (idx == 1) || (idx == 2));
if (idx == 0) {
- return kUnboxedUint32x4;
+ return kUnboxedInt32x4;
}
return kUnboxedFloat32x4;
}
@@ -5868,7 +5868,7 @@
return deopt_id_;
}
- DECLARE_INSTRUCTION(Uint32x4Select)
+ DECLARE_INSTRUCTION(Int32x4Select)
virtual CompileType ComputeType() const;
virtual bool AllowsCSE() const { return true; }
@@ -5879,13 +5879,13 @@
virtual bool MayThrow() const { return false; }
private:
- DISALLOW_COPY_AND_ASSIGN(Uint32x4SelectInstr);
+ DISALLOW_COPY_AND_ASSIGN(Int32x4SelectInstr);
};
-class Uint32x4SetFlagInstr : public TemplateDefinition<2> {
+class Int32x4SetFlagInstr : public TemplateDefinition<2> {
public:
- Uint32x4SetFlagInstr(MethodRecognizer::Kind op_kind, Value* value,
+ Int32x4SetFlagInstr(MethodRecognizer::Kind op_kind, Value* value,
Value* flagValue, intptr_t deopt_id)
: op_kind_(op_kind) {
SetInputAt(0, value);
@@ -5903,7 +5903,7 @@
virtual bool CanDeoptimize() const { return false; }
virtual Representation representation() const {
- return kUnboxedUint32x4;
+ return kUnboxedInt32x4;
}
virtual Representation RequiredInputRepresentation(intptr_t idx) const {
@@ -5911,7 +5911,7 @@
if (idx == 1) {
return kTagged;
}
- return kUnboxedUint32x4;
+ return kUnboxedInt32x4;
}
virtual intptr_t DeoptimizationTarget() const {
@@ -5920,14 +5920,14 @@
return deopt_id_;
}
- DECLARE_INSTRUCTION(Uint32x4SetFlag)
+ DECLARE_INSTRUCTION(Int32x4SetFlag)
virtual CompileType ComputeType() const;
virtual bool AllowsCSE() const { return true; }
virtual EffectSet Effects() const { return EffectSet::None(); }
virtual EffectSet Dependencies() const { return EffectSet::None(); }
virtual bool AttributesEqual(Instruction* other) const {
- return op_kind() == other->AsUint32x4SetFlag()->op_kind();
+ return op_kind() == other->AsInt32x4SetFlag()->op_kind();
}
virtual bool MayThrow() const { return false; }
@@ -5935,13 +5935,13 @@
private:
const MethodRecognizer::Kind op_kind_;
- DISALLOW_COPY_AND_ASSIGN(Uint32x4SetFlagInstr);
+ DISALLOW_COPY_AND_ASSIGN(Int32x4SetFlagInstr);
};
-class Uint32x4ToFloat32x4Instr : public TemplateDefinition<1> {
+class Int32x4ToFloat32x4Instr : public TemplateDefinition<1> {
public:
- Uint32x4ToFloat32x4Instr(Value* left, intptr_t deopt_id) {
+ Int32x4ToFloat32x4Instr(Value* left, intptr_t deopt_id) {
SetInputAt(0, left);
deopt_id_ = deopt_id;
}
@@ -5958,7 +5958,7 @@
virtual Representation RequiredInputRepresentation(intptr_t idx) const {
ASSERT(idx == 0);
- return kUnboxedUint32x4;
+ return kUnboxedInt32x4;
}
virtual intptr_t DeoptimizationTarget() const {
@@ -5967,7 +5967,7 @@
return deopt_id_;
}
- DECLARE_INSTRUCTION(Uint32x4ToFloat32x4)
+ DECLARE_INSTRUCTION(Int32x4ToFloat32x4)
virtual CompileType ComputeType() const;
virtual bool AllowsCSE() const { return true; }
@@ -5978,13 +5978,13 @@
virtual bool MayThrow() const { return false; }
private:
- DISALLOW_COPY_AND_ASSIGN(Uint32x4ToFloat32x4Instr);
+ DISALLOW_COPY_AND_ASSIGN(Int32x4ToFloat32x4Instr);
};
-class BinaryUint32x4OpInstr : public TemplateDefinition<2> {
+class BinaryInt32x4OpInstr : public TemplateDefinition<2> {
public:
- BinaryUint32x4OpInstr(Token::Kind op_kind,
+ BinaryInt32x4OpInstr(Token::Kind op_kind,
Value* left,
Value* right,
intptr_t deopt_id)
@@ -6004,12 +6004,12 @@
virtual bool CanDeoptimize() const { return false; }
virtual Representation representation() const {
- return kUnboxedUint32x4;
+ return kUnboxedInt32x4;
}
virtual Representation RequiredInputRepresentation(intptr_t idx) const {
ASSERT((idx == 0) || (idx == 1));
- return kUnboxedUint32x4;
+ return kUnboxedInt32x4;
}
virtual intptr_t DeoptimizationTarget() const {
@@ -6018,14 +6018,14 @@
return deopt_id_;
}
- DECLARE_INSTRUCTION(BinaryUint32x4Op)
+ DECLARE_INSTRUCTION(BinaryInt32x4Op)
virtual CompileType ComputeType() const;
virtual bool AllowsCSE() const { return true; }
virtual EffectSet Effects() const { return EffectSet::None(); }
virtual EffectSet Dependencies() const { return EffectSet::None(); }
virtual bool AttributesEqual(Instruction* other) const {
- return op_kind() == other->AsBinaryUint32x4Op()->op_kind();
+ return op_kind() == other->AsBinaryInt32x4Op()->op_kind();
}
virtual bool MayThrow() const { return false; }
@@ -6033,7 +6033,7 @@
private:
const Token::Kind op_kind_;
- DISALLOW_COPY_AND_ASSIGN(BinaryUint32x4OpInstr);
+ DISALLOW_COPY_AND_ASSIGN(BinaryInt32x4OpInstr);
};
class BinaryMintOpInstr : public TemplateDefinition<2> {
diff --git a/runtime/vm/intermediate_language_arm.cc b/runtime/vm/intermediate_language_arm.cc
index 3c613e8..43ab8a1 100644
--- a/runtime/vm/intermediate_language_arm.cc
+++ b/runtime/vm/intermediate_language_arm.cc
@@ -979,8 +979,8 @@
return CompileType::FromCid(kDoubleCid);
case kTypedDataFloat32x4ArrayCid:
return CompileType::FromCid(kFloat32x4Cid);
- case kTypedDataUint32x4ArrayCid:
- return CompileType::FromCid(kUint32x4Cid);
+ case kTypedDataInt32x4ArrayCid:
+ return CompileType::FromCid(kInt32x4Cid);
case kTypedDataInt8ArrayCid:
case kTypedDataUint8ArrayCid:
@@ -1030,8 +1030,8 @@
case kTypedDataFloat32ArrayCid:
case kTypedDataFloat64ArrayCid:
return kUnboxedDouble;
- case kTypedDataUint32x4ArrayCid:
- return kUnboxedUint32x4;
+ case kTypedDataInt32x4ArrayCid:
+ return kUnboxedInt32x4;
case kTypedDataFloat32x4ArrayCid:
return kUnboxedFloat32x4;
default:
@@ -1053,7 +1053,7 @@
locs->set_in(1, Location::WritableRegister());
if ((representation() == kUnboxedDouble) ||
(representation() == kUnboxedFloat32x4) ||
- (representation() == kUnboxedUint32x4)) {
+ (representation() == kUnboxedInt32x4)) {
locs->set_out(Location::RequiresFpuRegister());
} else {
locs->set_out(Location::RequiresRegister());
@@ -1106,7 +1106,7 @@
if ((representation() == kUnboxedDouble) ||
(representation() == kUnboxedMint) ||
(representation() == kUnboxedFloat32x4) ||
- (representation() == kUnboxedUint32x4)) {
+ (representation() == kUnboxedInt32x4)) {
QRegister result = locs()->out().fpu_reg();
DRegister dresult0 = EvenDRegisterOf(result);
DRegister dresult1 = OddDRegisterOf(result);
@@ -1131,7 +1131,7 @@
element_address = Address(index.reg(), 0);
__ vldrd(dresult0, element_address);
break;
- case kTypedDataUint32x4ArrayCid:
+ case kTypedDataInt32x4ArrayCid:
case kTypedDataFloat32x4ArrayCid:
__ add(index.reg(), index.reg(), ShifterOperand(array));
__ LoadDFromOffset(dresult0, index.reg(), 0);
@@ -1217,8 +1217,8 @@
return kUnboxedDouble;
case kTypedDataFloat32x4ArrayCid:
return kUnboxedFloat32x4;
- case kTypedDataUint32x4ArrayCid:
- return kUnboxedUint32x4;
+ case kTypedDataInt32x4ArrayCid:
+ return kUnboxedInt32x4;
default:
UNREACHABLE();
return kTagged;
@@ -1256,7 +1256,7 @@
break;
case kTypedDataFloat32ArrayCid:
case kTypedDataFloat64ArrayCid: // TODO(srdjan): Support Float64 constants.
- case kTypedDataUint32x4ArrayCid:
+ case kTypedDataInt32x4ArrayCid:
case kTypedDataFloat32x4ArrayCid:
locs->set_in(2, Location::RequiresFpuRegister());
break;
@@ -1397,7 +1397,7 @@
__ StoreDToOffset(in2, index.reg(), 0);
break;
}
- case kTypedDataUint32x4ArrayCid:
+ case kTypedDataInt32x4ArrayCid:
case kTypedDataFloat32x4ArrayCid: {
QRegister in = locs()->in(2).fpu_reg();
DRegister din0 = EvenDRegisterOf(in);
@@ -1523,7 +1523,7 @@
__ CompareImmediate(value_cid_reg, kNullCid);
__ b(&no_fixed_length, EQ);
// Check for typed data array.
- __ CompareImmediate(value_cid_reg, kTypedDataUint32x4ArrayCid);
+ __ CompareImmediate(value_cid_reg, kTypedDataInt32x4ArrayCid);
__ b(&no_fixed_length, GT);
__ CompareImmediate(value_cid_reg, kTypedDataInt8ArrayCid);
// Could still be a regular array.
@@ -1603,7 +1603,7 @@
__ CompareImmediate(value_cid_reg, kNullCid);
__ b(&no_fixed_length, EQ);
// Check for typed data array.
- __ CompareImmediate(value_cid_reg, kTypedDataUint32x4ArrayCid);
+ __ CompareImmediate(value_cid_reg, kTypedDataInt32x4ArrayCid);
__ b(&no_fixed_length, GT);
__ CompareImmediate(value_cid_reg, kTypedDataInt8ArrayCid);
// Could still be a regular array.
@@ -2886,7 +2886,7 @@
}
-LocationSummary* BoxUint32x4Instr::MakeLocationSummary() const {
+LocationSummary* BoxInt32x4Instr::MakeLocationSummary() const {
const intptr_t kNumInputs = 1;
const intptr_t kNumTemps = 0;
LocationSummary* summary =
@@ -2899,18 +2899,18 @@
}
-class BoxUint32x4SlowPath : public SlowPathCode {
+class BoxInt32x4SlowPath : public SlowPathCode {
public:
- explicit BoxUint32x4SlowPath(BoxUint32x4Instr* instruction)
+ explicit BoxInt32x4SlowPath(BoxInt32x4Instr* instruction)
: instruction_(instruction) { }
virtual void EmitNativeCode(FlowGraphCompiler* compiler) {
- __ Comment("BoxUint32x4SlowPath");
+ __ Comment("BoxInt32x4SlowPath");
__ Bind(entry_label());
- const Class& uint32x4_class = compiler->uint32x4_class();
+ const Class& int32x4_class = compiler->int32x4_class();
const Code& stub =
- Code::Handle(StubCode::GetAllocationStubForClass(uint32x4_class));
- const ExternalLabel label(uint32x4_class.ToCString(), stub.EntryPoint());
+ Code::Handle(StubCode::GetAllocationStubForClass(int32x4_class));
+ const ExternalLabel label(int32x4_class.ToCString(), stub.EntryPoint());
LocationSummary* locs = instruction_->locs();
locs->live_registers()->Remove(locs->out());
@@ -2927,12 +2927,12 @@
}
private:
- BoxUint32x4Instr* instruction_;
+ BoxInt32x4Instr* instruction_;
};
-void BoxUint32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) {
- BoxUint32x4SlowPath* slow_path = new BoxUint32x4SlowPath(this);
+void BoxInt32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) {
+ BoxInt32x4SlowPath* slow_path = new BoxInt32x4SlowPath(this);
compiler->AddSlowPathCode(slow_path);
Register out_reg = locs()->out().reg();
@@ -2940,21 +2940,21 @@
DRegister value_even = EvenDRegisterOf(value);
DRegister value_odd = OddDRegisterOf(value);
- __ TryAllocate(compiler->uint32x4_class(),
+ __ TryAllocate(compiler->int32x4_class(),
slow_path->entry_label(),
out_reg);
__ Bind(slow_path->exit_label());
__ StoreDToOffset(value_even, out_reg,
- Uint32x4::value_offset() - kHeapObjectTag);
+ Int32x4::value_offset() - kHeapObjectTag);
__ StoreDToOffset(value_odd, out_reg,
- Uint32x4::value_offset() + 2*kWordSize - kHeapObjectTag);
+ Int32x4::value_offset() + 2*kWordSize - kHeapObjectTag);
}
-LocationSummary* UnboxUint32x4Instr::MakeLocationSummary() const {
+LocationSummary* UnboxInt32x4Instr::MakeLocationSummary() const {
const intptr_t value_cid = value()->Type()->ToCid();
const intptr_t kNumInputs = 1;
- const intptr_t kNumTemps = value_cid == kUint32x4Cid ? 0 : 1;
+ const intptr_t kNumTemps = value_cid == kInt32x4Cid ? 0 : 1;
LocationSummary* summary =
new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall);
summary->set_in(0, Location::RequiresRegister());
@@ -2967,26 +2967,26 @@
}
-void UnboxUint32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) {
+void UnboxInt32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) {
const intptr_t value_cid = value()->Type()->ToCid();
const Register value = locs()->in(0).reg();
const QRegister result = locs()->out().fpu_reg();
- if (value_cid != kUint32x4Cid) {
+ if (value_cid != kInt32x4Cid) {
const Register temp = locs()->temp(0).reg();
Label* deopt = compiler->AddDeoptStub(deopt_id_, kDeoptCheckClass);
__ tst(value, ShifterOperand(kSmiTagMask));
__ b(deopt, EQ);
- __ CompareClassId(value, kUint32x4Cid, temp);
+ __ CompareClassId(value, kInt32x4Cid, temp);
__ b(deopt, NE);
}
const DRegister result_even = EvenDRegisterOf(result);
const DRegister result_odd = OddDRegisterOf(result);
__ LoadDFromOffset(result_even, value,
- Uint32x4::value_offset() - kHeapObjectTag);
+ Int32x4::value_offset() - kHeapObjectTag);
__ LoadDFromOffset(result_odd, value,
- Uint32x4::value_offset() + 2*kWordSize - kHeapObjectTag);
+ Int32x4::value_offset() + 2*kWordSize - kHeapObjectTag);
}
@@ -3091,7 +3091,7 @@
__ vdup(kWord, result, dvalue1, 1);
__ vcvtds(dresult0, sresult0);
break;
- case MethodRecognizer::kUint32x4Shuffle:
+ case MethodRecognizer::kInt32x4Shuffle:
case MethodRecognizer::kFloat32x4Shuffle:
if (mask_ == 0x00) {
__ vdup(kWord, result, dvalue0, 0);
@@ -3155,7 +3155,7 @@
switch (op_kind()) {
case MethodRecognizer::kFloat32x4ShuffleMix:
- case MethodRecognizer::kUint32x4ShuffleMix:
+ case MethodRecognizer::kInt32x4ShuffleMix:
// TODO(zra): Investigate better instruction sequences for shuffle masks.
SRegister left_svalues[4];
SRegister right_svalues[4];
@@ -3524,7 +3524,7 @@
}
-LocationSummary* Float32x4ToUint32x4Instr::MakeLocationSummary() const {
+LocationSummary* Float32x4ToInt32x4Instr::MakeLocationSummary() const {
const intptr_t kNumInputs = 1;
const intptr_t kNumTemps = 0;
LocationSummary* summary =
@@ -3535,7 +3535,7 @@
}
-void Float32x4ToUint32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) {
+void Float32x4ToInt32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) {
QRegister value = locs()->in(0).fpu_reg();
QRegister result = locs()->out().fpu_reg();
@@ -3545,7 +3545,7 @@
}
-LocationSummary* Uint32x4BoolConstructorInstr::MakeLocationSummary() const {
+LocationSummary* Int32x4BoolConstructorInstr::MakeLocationSummary() const {
const intptr_t kNumInputs = 4;
const intptr_t kNumTemps = 1;
LocationSummary* summary =
@@ -3561,7 +3561,7 @@
}
-void Uint32x4BoolConstructorInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+void Int32x4BoolConstructorInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
Register v0 = locs()->in(0).reg();
Register v1 = locs()->in(1).reg();
Register v2 = locs()->in(2).reg();
@@ -3592,7 +3592,7 @@
}
-LocationSummary* Uint32x4GetFlagInstr::MakeLocationSummary() const {
+LocationSummary* Int32x4GetFlagInstr::MakeLocationSummary() const {
const intptr_t kNumInputs = 1;
const intptr_t kNumTemps = 0;
LocationSummary* summary =
@@ -3604,7 +3604,7 @@
}
-void Uint32x4GetFlagInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+void Int32x4GetFlagInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
QRegister value = locs()->in(0).fpu_reg();
Register result = locs()->out().reg();
@@ -3616,16 +3616,16 @@
SRegister svalue3 = OddSRegisterOf(dvalue1);
switch (op_kind()) {
- case MethodRecognizer::kUint32x4GetFlagX:
+ case MethodRecognizer::kInt32x4GetFlagX:
__ vmovrs(result, svalue0);
break;
- case MethodRecognizer::kUint32x4GetFlagY:
+ case MethodRecognizer::kInt32x4GetFlagY:
__ vmovrs(result, svalue1);
break;
- case MethodRecognizer::kUint32x4GetFlagZ:
+ case MethodRecognizer::kInt32x4GetFlagZ:
__ vmovrs(result, svalue2);
break;
- case MethodRecognizer::kUint32x4GetFlagW:
+ case MethodRecognizer::kInt32x4GetFlagW:
__ vmovrs(result, svalue3);
break;
default: UNREACHABLE();
@@ -3637,7 +3637,7 @@
}
-LocationSummary* Uint32x4SelectInstr::MakeLocationSummary() const {
+LocationSummary* Int32x4SelectInstr::MakeLocationSummary() const {
const intptr_t kNumInputs = 3;
const intptr_t kNumTemps = 1;
LocationSummary* summary =
@@ -3651,7 +3651,7 @@
}
-void Uint32x4SelectInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+void Int32x4SelectInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
QRegister mask = locs()->in(0).fpu_reg();
QRegister trueValue = locs()->in(1).fpu_reg();
QRegister falseValue = locs()->in(2).fpu_reg();
@@ -3672,7 +3672,7 @@
}
-LocationSummary* Uint32x4SetFlagInstr::MakeLocationSummary() const {
+LocationSummary* Int32x4SetFlagInstr::MakeLocationSummary() const {
const intptr_t kNumInputs = 2;
const intptr_t kNumTemps = 0;
LocationSummary* summary =
@@ -3685,7 +3685,7 @@
}
-void Uint32x4SetFlagInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+void Int32x4SetFlagInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
QRegister mask = locs()->in(0).fpu_reg();
Register flag = locs()->in(1).reg();
QRegister result = locs()->out().fpu_reg();
@@ -3705,16 +3705,16 @@
__ LoadImmediate(TMP, 0xffffffff, EQ);
__ LoadImmediate(TMP, 0, NE);
switch (op_kind()) {
- case MethodRecognizer::kUint32x4WithFlagX:
+ case MethodRecognizer::kInt32x4WithFlagX:
__ vmovsr(sresult0, TMP);
break;
- case MethodRecognizer::kUint32x4WithFlagY:
+ case MethodRecognizer::kInt32x4WithFlagY:
__ vmovsr(sresult1, TMP);
break;
- case MethodRecognizer::kUint32x4WithFlagZ:
+ case MethodRecognizer::kInt32x4WithFlagZ:
__ vmovsr(sresult2, TMP);
break;
- case MethodRecognizer::kUint32x4WithFlagW:
+ case MethodRecognizer::kInt32x4WithFlagW:
__ vmovsr(sresult3, TMP);
break;
default: UNREACHABLE();
@@ -3722,7 +3722,7 @@
}
-LocationSummary* Uint32x4ToFloat32x4Instr::MakeLocationSummary() const {
+LocationSummary* Int32x4ToFloat32x4Instr::MakeLocationSummary() const {
const intptr_t kNumInputs = 1;
const intptr_t kNumTemps = 0;
LocationSummary* summary =
@@ -3733,7 +3733,7 @@
}
-void Uint32x4ToFloat32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) {
+void Int32x4ToFloat32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) {
QRegister value = locs()->in(0).fpu_reg();
QRegister result = locs()->out().fpu_reg();
@@ -3743,7 +3743,7 @@
}
-LocationSummary* BinaryUint32x4OpInstr::MakeLocationSummary() const {
+LocationSummary* BinaryInt32x4OpInstr::MakeLocationSummary() const {
const intptr_t kNumInputs = 2;
const intptr_t kNumTemps = 0;
LocationSummary* summary =
@@ -3755,7 +3755,7 @@
}
-void BinaryUint32x4OpInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+void BinaryInt32x4OpInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
QRegister left = locs()->in(0).fpu_reg();
QRegister right = locs()->in(1).fpu_reg();
QRegister result = locs()->out().fpu_reg();
diff --git a/runtime/vm/intermediate_language_ia32.cc b/runtime/vm/intermediate_language_ia32.cc
index ba97036..160fe52 100644
--- a/runtime/vm/intermediate_language_ia32.cc
+++ b/runtime/vm/intermediate_language_ia32.cc
@@ -1050,8 +1050,8 @@
return CompileType::FromCid(kDoubleCid);
case kTypedDataFloat32x4ArrayCid:
return CompileType::FromCid(kFloat32x4Cid);
- case kTypedDataUint32x4ArrayCid:
- return CompileType::FromCid(kUint32x4Cid);
+ case kTypedDataInt32x4ArrayCid:
+ return CompileType::FromCid(kInt32x4Cid);
case kTypedDataInt8ArrayCid:
case kTypedDataUint8ArrayCid:
@@ -1103,8 +1103,8 @@
return kUnboxedDouble;
case kTypedDataFloat32x4ArrayCid:
return kUnboxedFloat32x4;
- case kTypedDataUint32x4ArrayCid:
- return kUnboxedUint32x4;
+ case kTypedDataInt32x4ArrayCid:
+ return kUnboxedInt32x4;
default:
UNIMPLEMENTED();
return kTagged;
@@ -1130,7 +1130,7 @@
}
if ((representation() == kUnboxedDouble) ||
(representation() == kUnboxedFloat32x4) ||
- (representation() == kUnboxedUint32x4)) {
+ (representation() == kUnboxedInt32x4)) {
locs->set_out(Location::RequiresFpuRegister());
} else {
locs->set_out(Location::RequiresRegister());
@@ -1163,7 +1163,7 @@
if ((representation() == kUnboxedDouble) ||
(representation() == kUnboxedMint) ||
(representation() == kUnboxedFloat32x4) ||
- (representation() == kUnboxedUint32x4)) {
+ (representation() == kUnboxedInt32x4)) {
XmmRegister result = locs()->out().fpu_reg();
if ((index_scale() == 1) && index.IsRegister()) {
__ SmiUntag(index.reg());
@@ -1185,7 +1185,7 @@
case kTypedDataFloat64ArrayCid:
__ movsd(result, element_address);
break;
- case kTypedDataUint32x4ArrayCid:
+ case kTypedDataInt32x4ArrayCid:
case kTypedDataFloat32x4ArrayCid:
__ movups(result, element_address);
break;
@@ -1272,8 +1272,8 @@
return kUnboxedDouble;
case kTypedDataFloat32x4ArrayCid:
return kUnboxedFloat32x4;
- case kTypedDataUint32x4ArrayCid:
- return kUnboxedUint32x4;
+ case kTypedDataInt32x4ArrayCid:
+ return kUnboxedInt32x4;
default:
UNIMPLEMENTED();
return kTagged;
@@ -1334,7 +1334,7 @@
// TODO(srdjan): Support Float64 constants.
locs->set_in(2, Location::RequiresFpuRegister());
break;
- case kTypedDataUint32x4ArrayCid:
+ case kTypedDataInt32x4ArrayCid:
case kTypedDataFloat32x4ArrayCid:
locs->set_in(2, Location::RequiresFpuRegister());
break;
@@ -1455,7 +1455,7 @@
case kTypedDataFloat64ArrayCid:
__ movsd(element_address, locs()->in(2).fpu_reg());
break;
- case kTypedDataUint32x4ArrayCid:
+ case kTypedDataInt32x4ArrayCid:
case kTypedDataFloat32x4ArrayCid:
__ movups(element_address, locs()->in(2).fpu_reg());
break;
@@ -1585,7 +1585,7 @@
__ cmpl(value_cid_reg, Immediate(kNullCid));
__ j(EQUAL, &no_fixed_length, Assembler::kNearJump);
// Check for typed data array.
- __ cmpl(value_cid_reg, Immediate(kTypedDataUint32x4ArrayCid));
+ __ cmpl(value_cid_reg, Immediate(kTypedDataInt32x4ArrayCid));
// Not a typed array or a regular array.
__ j(GREATER, &no_fixed_length, Assembler::kNearJump);
__ cmpl(value_cid_reg, Immediate(kTypedDataInt8ArrayCid));
@@ -1672,7 +1672,7 @@
__ cmpl(value_cid_reg, Immediate(kNullCid));
__ j(EQUAL, &no_fixed_length, Assembler::kNearJump);
// Check for typed data array.
- __ cmpl(value_cid_reg, Immediate(kTypedDataUint32x4ArrayCid));
+ __ cmpl(value_cid_reg, Immediate(kTypedDataInt32x4ArrayCid));
// Not a typed array or a regular array.
__ j(GREATER, &no_fixed_length, Assembler::kNearJump);
__ cmpl(value_cid_reg, Immediate(kTypedDataInt8ArrayCid));
@@ -2984,7 +2984,7 @@
}
-LocationSummary* BoxUint32x4Instr::MakeLocationSummary() const {
+LocationSummary* BoxInt32x4Instr::MakeLocationSummary() const {
const intptr_t kNumInputs = 1;
const intptr_t kNumTemps = 0;
LocationSummary* summary =
@@ -2997,18 +2997,18 @@
}
-class BoxUint32x4SlowPath : public SlowPathCode {
+class BoxInt32x4SlowPath : public SlowPathCode {
public:
- explicit BoxUint32x4SlowPath(BoxUint32x4Instr* instruction)
+ explicit BoxInt32x4SlowPath(BoxInt32x4Instr* instruction)
: instruction_(instruction) { }
virtual void EmitNativeCode(FlowGraphCompiler* compiler) {
- __ Comment("BoxUint32x4SlowPath");
+ __ Comment("BoxInt32x4SlowPath");
__ Bind(entry_label());
- const Class& uint32x4_class = compiler->uint32x4_class();
+ const Class& int32x4_class = compiler->int32x4_class();
const Code& stub =
- Code::Handle(StubCode::GetAllocationStubForClass(uint32x4_class));
- const ExternalLabel label(uint32x4_class.ToCString(), stub.EntryPoint());
+ Code::Handle(StubCode::GetAllocationStubForClass(int32x4_class));
+ const ExternalLabel label(int32x4_class.ToCString(), stub.EntryPoint());
LocationSummary* locs = instruction_->locs();
locs->live_registers()->Remove(locs->out());
@@ -3025,30 +3025,30 @@
}
private:
- BoxUint32x4Instr* instruction_;
+ BoxInt32x4Instr* instruction_;
};
-void BoxUint32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) {
- BoxUint32x4SlowPath* slow_path = new BoxUint32x4SlowPath(this);
+void BoxInt32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) {
+ BoxInt32x4SlowPath* slow_path = new BoxInt32x4SlowPath(this);
compiler->AddSlowPathCode(slow_path);
Register out_reg = locs()->out().reg();
XmmRegister value = locs()->in(0).fpu_reg();
- __ TryAllocate(compiler->uint32x4_class(),
+ __ TryAllocate(compiler->int32x4_class(),
slow_path->entry_label(),
Assembler::kFarJump,
out_reg);
__ Bind(slow_path->exit_label());
- __ movups(FieldAddress(out_reg, Uint32x4::value_offset()), value);
+ __ movups(FieldAddress(out_reg, Int32x4::value_offset()), value);
}
-LocationSummary* UnboxUint32x4Instr::MakeLocationSummary() const {
+LocationSummary* UnboxInt32x4Instr::MakeLocationSummary() const {
const intptr_t value_cid = value()->Type()->ToCid();
const intptr_t kNumInputs = 1;
- const intptr_t kNumTemps = value_cid == kUint32x4Cid ? 0 : 1;
+ const intptr_t kNumTemps = value_cid == kInt32x4Cid ? 0 : 1;
LocationSummary* summary =
new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall);
summary->set_in(0, Location::RequiresRegister());
@@ -3061,20 +3061,20 @@
}
-void UnboxUint32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) {
+void UnboxInt32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) {
const intptr_t value_cid = value()->Type()->ToCid();
const Register value = locs()->in(0).reg();
const XmmRegister result = locs()->out().fpu_reg();
- if (value_cid != kUint32x4Cid) {
+ if (value_cid != kInt32x4Cid) {
const Register temp = locs()->temp(0).reg();
Label* deopt = compiler->AddDeoptStub(deopt_id_, kDeoptCheckClass);
__ testl(value, Immediate(kSmiTagMask));
__ j(ZERO, deopt);
- __ CompareClassId(value, kUint32x4Cid, temp);
+ __ CompareClassId(value, kInt32x4Cid, temp);
__ j(NOT_EQUAL, deopt);
}
- __ movups(result, FieldAddress(value, Uint32x4::value_offset()));
+ __ movups(result, FieldAddress(value, Int32x4::value_offset()));
}
@@ -3169,7 +3169,7 @@
__ cvtss2sd(value, value);
break;
case MethodRecognizer::kFloat32x4Shuffle:
- case MethodRecognizer::kUint32x4Shuffle:
+ case MethodRecognizer::kInt32x4Shuffle:
__ shufps(value, value, Immediate(mask_));
break;
default: UNREACHABLE();
@@ -3196,7 +3196,7 @@
ASSERT(locs()->out().fpu_reg() == left);
switch (op_kind()) {
case MethodRecognizer::kFloat32x4ShuffleMix:
- case MethodRecognizer::kUint32x4ShuffleMix:
+ case MethodRecognizer::kInt32x4ShuffleMix:
__ shufps(left, right, Immediate(mask_));
break;
default: UNREACHABLE();
@@ -3549,7 +3549,7 @@
}
-LocationSummary* Float32x4ToUint32x4Instr::MakeLocationSummary() const {
+LocationSummary* Float32x4ToInt32x4Instr::MakeLocationSummary() const {
const intptr_t kNumInputs = 1;
const intptr_t kNumTemps = 0;
LocationSummary* summary =
@@ -3560,12 +3560,12 @@
}
-void Float32x4ToUint32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) {
+void Float32x4ToInt32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) {
// NOP.
}
-LocationSummary* Uint32x4BoolConstructorInstr::MakeLocationSummary() const {
+LocationSummary* Int32x4BoolConstructorInstr::MakeLocationSummary() const {
const intptr_t kNumInputs = 4;
const intptr_t kNumTemps = 0;
LocationSummary* summary =
@@ -3579,7 +3579,7 @@
}
-void Uint32x4BoolConstructorInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+void Int32x4BoolConstructorInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
Register v0 = locs()->in(0).reg();
Register v1 = locs()->in(1).reg();
Register v2 = locs()->in(2).reg();
@@ -3627,7 +3627,7 @@
}
-LocationSummary* Uint32x4GetFlagInstr::MakeLocationSummary() const {
+LocationSummary* Int32x4GetFlagInstr::MakeLocationSummary() const {
const intptr_t kNumInputs = 1;
const intptr_t kNumTemps = 0;
LocationSummary* summary =
@@ -3638,7 +3638,7 @@
}
-void Uint32x4GetFlagInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+void Int32x4GetFlagInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
XmmRegister value = locs()->in(0).fpu_reg();
Register result = locs()->out().reg();
Label done;
@@ -3647,16 +3647,16 @@
// Move value to stack.
__ movups(Address(ESP, 0), value);
switch (op_kind()) {
- case MethodRecognizer::kUint32x4GetFlagX:
+ case MethodRecognizer::kInt32x4GetFlagX:
__ movl(result, Address(ESP, 0));
break;
- case MethodRecognizer::kUint32x4GetFlagY:
+ case MethodRecognizer::kInt32x4GetFlagY:
__ movl(result, Address(ESP, 4));
break;
- case MethodRecognizer::kUint32x4GetFlagZ:
+ case MethodRecognizer::kInt32x4GetFlagZ:
__ movl(result, Address(ESP, 8));
break;
- case MethodRecognizer::kUint32x4GetFlagW:
+ case MethodRecognizer::kInt32x4GetFlagW:
__ movl(result, Address(ESP, 12));
break;
default: UNREACHABLE();
@@ -3672,7 +3672,7 @@
}
-LocationSummary* Uint32x4SelectInstr::MakeLocationSummary() const {
+LocationSummary* Int32x4SelectInstr::MakeLocationSummary() const {
const intptr_t kNumInputs = 3;
const intptr_t kNumTemps = 1;
LocationSummary* summary =
@@ -3686,7 +3686,7 @@
}
-void Uint32x4SelectInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+void Int32x4SelectInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
XmmRegister mask = locs()->in(0).fpu_reg();
XmmRegister trueValue = locs()->in(1).fpu_reg();
XmmRegister falseValue = locs()->in(2).fpu_reg();
@@ -3706,7 +3706,7 @@
}
-LocationSummary* Uint32x4SetFlagInstr::MakeLocationSummary() const {
+LocationSummary* Int32x4SetFlagInstr::MakeLocationSummary() const {
const intptr_t kNumInputs = 2;
const intptr_t kNumTemps = 0;
LocationSummary* summary =
@@ -3718,7 +3718,7 @@
}
-void Uint32x4SetFlagInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+void Int32x4SetFlagInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
XmmRegister mask = locs()->in(0).fpu_reg();
Register flag = locs()->in(1).reg();
ASSERT(mask == locs()->out().fpu_reg());
@@ -3729,25 +3729,25 @@
__ CompareObject(flag, Bool::True());
__ j(NOT_EQUAL, &falsePath);
switch (op_kind()) {
- case MethodRecognizer::kUint32x4WithFlagX:
+ case MethodRecognizer::kInt32x4WithFlagX:
__ movl(Address(ESP, 0), Immediate(0xFFFFFFFF));
__ jmp(&exitPath);
__ Bind(&falsePath);
__ movl(Address(ESP, 0), Immediate(0x0));
break;
- case MethodRecognizer::kUint32x4WithFlagY:
+ case MethodRecognizer::kInt32x4WithFlagY:
__ movl(Address(ESP, 4), Immediate(0xFFFFFFFF));
__ jmp(&exitPath);
__ Bind(&falsePath);
__ movl(Address(ESP, 4), Immediate(0x0));
break;
- case MethodRecognizer::kUint32x4WithFlagZ:
+ case MethodRecognizer::kInt32x4WithFlagZ:
__ movl(Address(ESP, 8), Immediate(0xFFFFFFFF));
__ jmp(&exitPath);
__ Bind(&falsePath);
__ movl(Address(ESP, 8), Immediate(0x0));
break;
- case MethodRecognizer::kUint32x4WithFlagW:
+ case MethodRecognizer::kInt32x4WithFlagW:
__ movl(Address(ESP, 12), Immediate(0xFFFFFFFF));
__ jmp(&exitPath);
__ Bind(&falsePath);
@@ -3762,7 +3762,7 @@
}
-LocationSummary* Uint32x4ToFloat32x4Instr::MakeLocationSummary() const {
+LocationSummary* Int32x4ToFloat32x4Instr::MakeLocationSummary() const {
const intptr_t kNumInputs = 1;
const intptr_t kNumTemps = 0;
LocationSummary* summary =
@@ -3773,12 +3773,12 @@
}
-void Uint32x4ToFloat32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) {
+void Int32x4ToFloat32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) {
// NOP.
}
-LocationSummary* BinaryUint32x4OpInstr::MakeLocationSummary() const {
+LocationSummary* BinaryInt32x4OpInstr::MakeLocationSummary() const {
const intptr_t kNumInputs = 2;
const intptr_t kNumTemps = 0;
LocationSummary* summary =
@@ -3790,7 +3790,7 @@
}
-void BinaryUint32x4OpInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+void BinaryInt32x4OpInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
XmmRegister left = locs()->in(0).fpu_reg();
XmmRegister right = locs()->in(1).fpu_reg();
ASSERT(left == locs()->out().fpu_reg());
diff --git a/runtime/vm/intermediate_language_mips.cc b/runtime/vm/intermediate_language_mips.cc
index ae873ee..77e0ffc 100644
--- a/runtime/vm/intermediate_language_mips.cc
+++ b/runtime/vm/intermediate_language_mips.cc
@@ -1039,8 +1039,8 @@
return CompileType::FromCid(kDoubleCid);
case kTypedDataFloat32x4ArrayCid:
return CompileType::FromCid(kFloat32x4Cid);
- case kTypedDataUint32x4ArrayCid:
- return CompileType::FromCid(kUint32x4Cid);
+ case kTypedDataInt32x4ArrayCid:
+ return CompileType::FromCid(kInt32x4Cid);
case kTypedDataInt8ArrayCid:
case kTypedDataUint8ArrayCid:
@@ -1090,8 +1090,8 @@
case kTypedDataFloat32ArrayCid:
case kTypedDataFloat64ArrayCid:
return kUnboxedDouble;
- case kTypedDataUint32x4ArrayCid:
- return kUnboxedUint32x4;
+ case kTypedDataInt32x4ArrayCid:
+ return kUnboxedInt32x4;
case kTypedDataFloat32x4ArrayCid:
return kUnboxedFloat32x4;
default:
@@ -1113,7 +1113,7 @@
locs->set_in(1, Location::WritableRegister());
if ((representation() == kUnboxedDouble) ||
(representation() == kUnboxedFloat32x4) ||
- (representation() == kUnboxedUint32x4)) {
+ (representation() == kUnboxedInt32x4)) {
locs->set_out(Location::RequiresFpuRegister());
} else {
locs->set_out(Location::RequiresRegister());
@@ -1173,7 +1173,7 @@
if ((representation() == kUnboxedDouble) ||
(representation() == kUnboxedMint) ||
(representation() == kUnboxedFloat32x4) ||
- (representation() == kUnboxedUint32x4)) {
+ (representation() == kUnboxedInt32x4)) {
DRegister result = locs()->out().fpu_reg();
switch (class_id()) {
case kTypedDataInt32ArrayCid:
@@ -1191,7 +1191,7 @@
__ LoadDFromOffset(result, index.reg(),
FlowGraphCompiler::DataOffsetFor(class_id()) - kHeapObjectTag);
break;
- case kTypedDataUint32x4ArrayCid:
+ case kTypedDataInt32x4ArrayCid:
case kTypedDataFloat32x4ArrayCid:
UNIMPLEMENTED();
break;
@@ -1275,8 +1275,8 @@
return kUnboxedDouble;
case kTypedDataFloat32x4ArrayCid:
return kUnboxedFloat32x4;
- case kTypedDataUint32x4ArrayCid:
- return kUnboxedUint32x4;
+ case kTypedDataInt32x4ArrayCid:
+ return kUnboxedInt32x4;
default:
UNIMPLEMENTED();
return kTagged;
@@ -1318,7 +1318,7 @@
locs->AddTemp(Location::RequiresFpuRegister());
// Fall through.
case kTypedDataFloat64ArrayCid: // TODO(srdjan): Support Float64 constants.
- case kTypedDataUint32x4ArrayCid:
+ case kTypedDataInt32x4ArrayCid:
case kTypedDataFloat32x4ArrayCid:
locs->set_in(2, Location::RequiresFpuRegister());
break;
@@ -1458,7 +1458,7 @@
__ StoreDToOffset(locs()->in(2).fpu_reg(), index.reg(),
FlowGraphCompiler::DataOffsetFor(class_id()) - kHeapObjectTag);
break;
- case kTypedDataUint32x4ArrayCid:
+ case kTypedDataInt32x4ArrayCid:
case kTypedDataFloat32x4ArrayCid:
UNIMPLEMENTED();
break;
@@ -1586,7 +1586,7 @@
__ BranchSignedLess(CMPRES1, 0, &skip_length_check);
__ BranchEqual(value_cid_reg, kNullCid, &no_fixed_length);
// Check for typed data array.
- __ BranchSignedGreater(value_cid_reg, kTypedDataUint32x4ArrayCid,
+ __ BranchSignedGreater(value_cid_reg, kTypedDataInt32x4ArrayCid,
&no_fixed_length);
__ BranchSignedLess(value_cid_reg, kTypedDataInt8ArrayCid,
&check_array);
@@ -1662,7 +1662,7 @@
Label check_array, length_set, no_fixed_length;
__ BranchEqual(value_cid_reg, kNullCid, &no_fixed_length);
// Check for typed data array.
- __ BranchSignedGreater(value_cid_reg, kTypedDataUint32x4ArrayCid,
+ __ BranchSignedGreater(value_cid_reg, kTypedDataInt32x4ArrayCid,
&no_fixed_length);
__ BranchSignedLess(value_cid_reg, kTypedDataInt8ArrayCid,
&check_array);
@@ -2910,24 +2910,24 @@
}
-LocationSummary* BoxUint32x4Instr::MakeLocationSummary() const {
+LocationSummary* BoxInt32x4Instr::MakeLocationSummary() const {
UNIMPLEMENTED();
return NULL;
}
-void BoxUint32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) {
+void BoxInt32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) {
UNIMPLEMENTED();
}
-LocationSummary* UnboxUint32x4Instr::MakeLocationSummary() const {
+LocationSummary* UnboxInt32x4Instr::MakeLocationSummary() const {
UNIMPLEMENTED();
return NULL;
}
-void UnboxUint32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) {
+void UnboxInt32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) {
UNIMPLEMENTED();
}
@@ -3102,35 +3102,35 @@
}
-LocationSummary* Float32x4ToUint32x4Instr::MakeLocationSummary() const {
+LocationSummary* Float32x4ToInt32x4Instr::MakeLocationSummary() const {
UNIMPLEMENTED();
return NULL;
}
-void Float32x4ToUint32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) {
+void Float32x4ToInt32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) {
UNIMPLEMENTED();
}
-LocationSummary* Uint32x4BoolConstructorInstr::MakeLocationSummary() const {
+LocationSummary* Int32x4BoolConstructorInstr::MakeLocationSummary() const {
UNIMPLEMENTED();
return NULL;
}
-void Uint32x4BoolConstructorInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+void Int32x4BoolConstructorInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
UNIMPLEMENTED();
}
-LocationSummary* Uint32x4GetFlagInstr::MakeLocationSummary() const {
+LocationSummary* Int32x4GetFlagInstr::MakeLocationSummary() const {
UNIMPLEMENTED();
return NULL;
}
-void Uint32x4GetFlagInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+void Int32x4GetFlagInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
UNIMPLEMENTED();
}
@@ -3146,46 +3146,46 @@
}
-LocationSummary* Uint32x4SelectInstr::MakeLocationSummary() const {
+LocationSummary* Int32x4SelectInstr::MakeLocationSummary() const {
UNIMPLEMENTED();
return NULL;
}
-void Uint32x4SelectInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+void Int32x4SelectInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
UNIMPLEMENTED();
}
-LocationSummary* Uint32x4SetFlagInstr::MakeLocationSummary() const {
+LocationSummary* Int32x4SetFlagInstr::MakeLocationSummary() const {
UNIMPLEMENTED();
return NULL;
}
-void Uint32x4SetFlagInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+void Int32x4SetFlagInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
UNIMPLEMENTED();
}
-LocationSummary* Uint32x4ToFloat32x4Instr::MakeLocationSummary() const {
+LocationSummary* Int32x4ToFloat32x4Instr::MakeLocationSummary() const {
UNIMPLEMENTED();
return NULL;
}
-void Uint32x4ToFloat32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) {
+void Int32x4ToFloat32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) {
UNIMPLEMENTED();
}
-LocationSummary* BinaryUint32x4OpInstr::MakeLocationSummary() const {
+LocationSummary* BinaryInt32x4OpInstr::MakeLocationSummary() const {
UNIMPLEMENTED();
return NULL;
}
-void BinaryUint32x4OpInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+void BinaryInt32x4OpInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
UNIMPLEMENTED();
}
diff --git a/runtime/vm/intermediate_language_x64.cc b/runtime/vm/intermediate_language_x64.cc
index fcf2db7..e2dfa5d 100644
--- a/runtime/vm/intermediate_language_x64.cc
+++ b/runtime/vm/intermediate_language_x64.cc
@@ -1035,8 +1035,8 @@
return CompileType::FromCid(kDoubleCid);
case kTypedDataFloat32x4ArrayCid:
return CompileType::FromCid(kFloat32x4Cid);
- case kTypedDataUint32x4ArrayCid:
- return CompileType::FromCid(kUint32x4Cid);
+ case kTypedDataInt32x4ArrayCid:
+ return CompileType::FromCid(kInt32x4Cid);
case kTypedDataInt8ArrayCid:
case kTypedDataUint8ArrayCid:
@@ -1077,8 +1077,8 @@
case kTypedDataFloat32ArrayCid:
case kTypedDataFloat64ArrayCid:
return kUnboxedDouble;
- case kTypedDataUint32x4ArrayCid:
- return kUnboxedUint32x4;
+ case kTypedDataInt32x4ArrayCid:
+ return kUnboxedInt32x4;
case kTypedDataFloat32x4ArrayCid:
return kUnboxedFloat32x4;
default:
@@ -1109,7 +1109,7 @@
}
if ((representation() == kUnboxedDouble) ||
(representation() == kUnboxedFloat32x4) ||
- (representation() == kUnboxedUint32x4)) {
+ (representation() == kUnboxedInt32x4)) {
locs->set_out(Location::RequiresFpuRegister());
} else {
locs->set_out(Location::RequiresRegister());
@@ -1144,7 +1144,7 @@
if ((representation() == kUnboxedDouble) ||
(representation() == kUnboxedFloat32x4) ||
- (representation() == kUnboxedUint32x4)) {
+ (representation() == kUnboxedInt32x4)) {
if ((index_scale() == 1) && index.IsRegister()) {
__ SmiUntag(index.reg());
}
@@ -1158,7 +1158,7 @@
} else if (class_id() == kTypedDataFloat64ArrayCid) {
__ movsd(result, element_address);
} else {
- ASSERT((class_id() == kTypedDataUint32x4ArrayCid) ||
+ ASSERT((class_id() == kTypedDataInt32x4ArrayCid) ||
(class_id() == kTypedDataFloat32x4ArrayCid));
__ movups(result, element_address);
}
@@ -1230,8 +1230,8 @@
return kUnboxedDouble;
case kTypedDataFloat32x4ArrayCid:
return kUnboxedFloat32x4;
- case kTypedDataUint32x4ArrayCid:
- return kUnboxedUint32x4;
+ case kTypedDataInt32x4ArrayCid:
+ return kUnboxedInt32x4;
default:
UNIMPLEMENTED();
return kTagged;
@@ -1289,7 +1289,7 @@
// TODO(srdjan): Support Float64 constants.
locs->set_in(2, Location::RequiresFpuRegister());
break;
- case kTypedDataUint32x4ArrayCid:
+ case kTypedDataInt32x4ArrayCid:
case kTypedDataFloat32x4ArrayCid:
locs->set_in(2, Location::RequiresFpuRegister());
break;
@@ -1407,7 +1407,7 @@
case kTypedDataFloat64ArrayCid:
__ movsd(element_address, locs()->in(2).fpu_reg());
break;
- case kTypedDataUint32x4ArrayCid:
+ case kTypedDataInt32x4ArrayCid:
case kTypedDataFloat32x4ArrayCid:
__ movups(element_address, locs()->in(2).fpu_reg());
break;
@@ -1542,7 +1542,7 @@
__ j(EQUAL, &no_fixed_length, Assembler::kNearJump);
// Check for typed data array.
__ CompareImmediate(
- value_cid_reg, Immediate(kTypedDataUint32x4ArrayCid), PP);
+ value_cid_reg, Immediate(kTypedDataInt32x4ArrayCid), PP);
// Not a typed array or a regular array.
__ j(GREATER, &no_fixed_length, Assembler::kNearJump);
__ CompareImmediate(
@@ -1622,7 +1622,7 @@
__ j(EQUAL, &no_fixed_length, Assembler::kNearJump);
// Check for typed data array.
__ CompareImmediate(value_cid_reg,
- Immediate(kTypedDataUint32x4ArrayCid), PP);
+ Immediate(kTypedDataInt32x4ArrayCid), PP);
// Not a typed array or a regular array.
__ j(GREATER, &no_fixed_length);
__ CompareImmediate(
@@ -3006,7 +3006,7 @@
}
-LocationSummary* BoxUint32x4Instr::MakeLocationSummary() const {
+LocationSummary* BoxInt32x4Instr::MakeLocationSummary() const {
const intptr_t kNumInputs = 1;
const intptr_t kNumTemps = 0;
LocationSummary* summary =
@@ -3019,18 +3019,18 @@
}
-class BoxUint32x4SlowPath : public SlowPathCode {
+class BoxInt32x4SlowPath : public SlowPathCode {
public:
- explicit BoxUint32x4SlowPath(BoxUint32x4Instr* instruction)
+ explicit BoxInt32x4SlowPath(BoxInt32x4Instr* instruction)
: instruction_(instruction) { }
virtual void EmitNativeCode(FlowGraphCompiler* compiler) {
- __ Comment("BoxUint32x4SlowPath");
+ __ Comment("BoxInt32x4SlowPath");
__ Bind(entry_label());
- const Class& uint32x4_class = compiler->uint32x4_class();
+ const Class& int32x4_class = compiler->int32x4_class();
const Code& stub =
- Code::Handle(StubCode::GetAllocationStubForClass(uint32x4_class));
- const ExternalLabel label(uint32x4_class.ToCString(), stub.EntryPoint());
+ Code::Handle(StubCode::GetAllocationStubForClass(int32x4_class));
+ const ExternalLabel label(int32x4_class.ToCString(), stub.EntryPoint());
LocationSummary* locs = instruction_->locs();
locs->live_registers()->Remove(locs->out());
@@ -3047,28 +3047,28 @@
}
private:
- BoxUint32x4Instr* instruction_;
+ BoxInt32x4Instr* instruction_;
};
-void BoxUint32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) {
- BoxUint32x4SlowPath* slow_path = new BoxUint32x4SlowPath(this);
+void BoxInt32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) {
+ BoxInt32x4SlowPath* slow_path = new BoxInt32x4SlowPath(this);
compiler->AddSlowPathCode(slow_path);
Register out_reg = locs()->out().reg();
XmmRegister value = locs()->in(0).fpu_reg();
- __ TryAllocate(compiler->uint32x4_class(),
+ __ TryAllocate(compiler->int32x4_class(),
slow_path->entry_label(),
Assembler::kFarJump,
out_reg,
PP);
__ Bind(slow_path->exit_label());
- __ movups(FieldAddress(out_reg, Uint32x4::value_offset()), value);
+ __ movups(FieldAddress(out_reg, Int32x4::value_offset()), value);
}
-LocationSummary* UnboxUint32x4Instr::MakeLocationSummary() const {
+LocationSummary* UnboxInt32x4Instr::MakeLocationSummary() const {
const intptr_t kNumInputs = 1;
const intptr_t kNumTemps = 0;
LocationSummary* summary =
@@ -3079,19 +3079,19 @@
}
-void UnboxUint32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) {
+void UnboxInt32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) {
const intptr_t value_cid = value()->Type()->ToCid();
const Register value = locs()->in(0).reg();
const XmmRegister result = locs()->out().fpu_reg();
- if (value_cid != kUint32x4Cid) {
+ if (value_cid != kInt32x4Cid) {
Label* deopt = compiler->AddDeoptStub(deopt_id_, kDeoptCheckClass);
__ testq(value, Immediate(kSmiTagMask));
__ j(ZERO, deopt);
- __ CompareClassId(value, kUint32x4Cid);
+ __ CompareClassId(value, kInt32x4Cid);
__ j(NOT_EQUAL, deopt);
}
- __ movups(result, FieldAddress(value, Uint32x4::value_offset()));
+ __ movups(result, FieldAddress(value, Int32x4::value_offset()));
}
@@ -3185,7 +3185,7 @@
__ cvtss2sd(value, value);
break;
case MethodRecognizer::kFloat32x4Shuffle:
- case MethodRecognizer::kUint32x4Shuffle:
+ case MethodRecognizer::kInt32x4Shuffle:
__ shufps(value, value, Immediate(mask_));
break;
default: UNREACHABLE();
@@ -3212,7 +3212,7 @@
ASSERT(locs()->out().fpu_reg() == left);
switch (op_kind()) {
case MethodRecognizer::kFloat32x4ShuffleMix:
- case MethodRecognizer::kUint32x4ShuffleMix:
+ case MethodRecognizer::kInt32x4ShuffleMix:
__ shufps(left, right, Immediate(mask_));
break;
default: UNREACHABLE();
@@ -3565,7 +3565,7 @@
}
-LocationSummary* Float32x4ToUint32x4Instr::MakeLocationSummary() const {
+LocationSummary* Float32x4ToInt32x4Instr::MakeLocationSummary() const {
const intptr_t kNumInputs = 1;
const intptr_t kNumTemps = 0;
LocationSummary* summary =
@@ -3576,12 +3576,12 @@
}
-void Float32x4ToUint32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) {
+void Float32x4ToInt32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) {
// NOP.
}
-LocationSummary* Uint32x4BoolConstructorInstr::MakeLocationSummary() const {
+LocationSummary* Int32x4BoolConstructorInstr::MakeLocationSummary() const {
const intptr_t kNumInputs = 4;
const intptr_t kNumTemps = 1;
LocationSummary* summary =
@@ -3596,7 +3596,7 @@
}
-void Uint32x4BoolConstructorInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+void Int32x4BoolConstructorInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
Register v0 = locs()->in(0).reg();
Register v1 = locs()->in(1).reg();
Register v2 = locs()->in(2).reg();
@@ -3650,7 +3650,7 @@
}
-LocationSummary* Uint32x4GetFlagInstr::MakeLocationSummary() const {
+LocationSummary* Int32x4GetFlagInstr::MakeLocationSummary() const {
const intptr_t kNumInputs = 1;
const intptr_t kNumTemps = 0;
LocationSummary* summary =
@@ -3661,7 +3661,7 @@
}
-void Uint32x4GetFlagInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+void Int32x4GetFlagInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
XmmRegister value = locs()->in(0).fpu_reg();
Register result = locs()->out().reg();
Label done;
@@ -3670,16 +3670,16 @@
// Move value to stack.
__ movups(Address(RSP, 0), value);
switch (op_kind()) {
- case MethodRecognizer::kUint32x4GetFlagX:
+ case MethodRecognizer::kInt32x4GetFlagX:
__ movl(result, Address(RSP, 0));
break;
- case MethodRecognizer::kUint32x4GetFlagY:
+ case MethodRecognizer::kInt32x4GetFlagY:
__ movl(result, Address(RSP, 4));
break;
- case MethodRecognizer::kUint32x4GetFlagZ:
+ case MethodRecognizer::kInt32x4GetFlagZ:
__ movl(result, Address(RSP, 8));
break;
- case MethodRecognizer::kUint32x4GetFlagW:
+ case MethodRecognizer::kInt32x4GetFlagW:
__ movl(result, Address(RSP, 12));
break;
default: UNREACHABLE();
@@ -3695,7 +3695,7 @@
}
-LocationSummary* Uint32x4SelectInstr::MakeLocationSummary() const {
+LocationSummary* Int32x4SelectInstr::MakeLocationSummary() const {
const intptr_t kNumInputs = 3;
const intptr_t kNumTemps = 1;
LocationSummary* summary =
@@ -3709,7 +3709,7 @@
}
-void Uint32x4SelectInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+void Int32x4SelectInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
XmmRegister mask = locs()->in(0).fpu_reg();
XmmRegister trueValue = locs()->in(1).fpu_reg();
XmmRegister falseValue = locs()->in(2).fpu_reg();
@@ -3729,7 +3729,7 @@
}
-LocationSummary* Uint32x4SetFlagInstr::MakeLocationSummary() const {
+LocationSummary* Int32x4SetFlagInstr::MakeLocationSummary() const {
const intptr_t kNumInputs = 2;
const intptr_t kNumTemps = 1;
LocationSummary* summary =
@@ -3742,7 +3742,7 @@
}
-void Uint32x4SetFlagInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+void Int32x4SetFlagInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
XmmRegister mask = locs()->in(0).fpu_reg();
Register flag = locs()->in(1).reg();
Register temp = locs()->temp(0).reg();
@@ -3754,7 +3754,7 @@
__ CompareObject(flag, Bool::True(), PP);
__ j(NOT_EQUAL, &falsePath);
switch (op_kind()) {
- case MethodRecognizer::kUint32x4WithFlagX:
+ case MethodRecognizer::kInt32x4WithFlagX:
__ LoadImmediate(temp, Immediate(0xFFFFFFFF), PP);
__ movl(Address(RSP, 0), temp);
__ jmp(&exitPath);
@@ -3762,7 +3762,7 @@
__ LoadImmediate(temp, Immediate(0x0), PP);
__ movl(Address(RSP, 0), temp);
break;
- case MethodRecognizer::kUint32x4WithFlagY:
+ case MethodRecognizer::kInt32x4WithFlagY:
__ LoadImmediate(temp, Immediate(0xFFFFFFFF), PP);
__ movl(Address(RSP, 4), temp);
__ jmp(&exitPath);
@@ -3770,7 +3770,7 @@
__ LoadImmediate(temp, Immediate(0x0), PP);
__ movl(Address(RSP, 4), temp);
break;
- case MethodRecognizer::kUint32x4WithFlagZ:
+ case MethodRecognizer::kInt32x4WithFlagZ:
__ LoadImmediate(temp, Immediate(0xFFFFFFFF), PP);
__ movl(Address(RSP, 8), temp);
__ jmp(&exitPath);
@@ -3778,7 +3778,7 @@
__ LoadImmediate(temp, Immediate(0x0), PP);
__ movl(Address(RSP, 8), temp);
break;
- case MethodRecognizer::kUint32x4WithFlagW:
+ case MethodRecognizer::kInt32x4WithFlagW:
__ LoadImmediate(temp, Immediate(0xFFFFFFFF), PP);
__ movl(Address(RSP, 12), temp);
__ jmp(&exitPath);
@@ -3795,7 +3795,7 @@
}
-LocationSummary* Uint32x4ToFloat32x4Instr::MakeLocationSummary() const {
+LocationSummary* Int32x4ToFloat32x4Instr::MakeLocationSummary() const {
const intptr_t kNumInputs = 1;
const intptr_t kNumTemps = 0;
LocationSummary* summary =
@@ -3806,12 +3806,12 @@
}
-void Uint32x4ToFloat32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) {
+void Int32x4ToFloat32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) {
// NOP.
}
-LocationSummary* BinaryUint32x4OpInstr::MakeLocationSummary() const {
+LocationSummary* BinaryInt32x4OpInstr::MakeLocationSummary() const {
const intptr_t kNumInputs = 2;
const intptr_t kNumTemps = 0;
LocationSummary* summary =
@@ -3823,7 +3823,7 @@
}
-void BinaryUint32x4OpInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+void BinaryInt32x4OpInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
XmmRegister left = locs()->in(0).fpu_reg();
XmmRegister right = locs()->in(1).fpu_reg();
ASSERT(left == locs()->out().fpu_reg());
diff --git a/runtime/vm/intrinsifier.h b/runtime/vm/intrinsifier.h
index cc80d32..bfba629 100644
--- a/runtime/vm/intrinsifier.h
+++ b/runtime/vm/intrinsifier.h
@@ -119,7 +119,7 @@
V(_Float32Array, _new, TypedData_Float32Array_new, 1931183334) \
V(_Float64Array, _new, TypedData_Float64Array_new, 2119419798) \
V(_Float32x4Array, _new, TypedData_Float32x4Array_new, 435301615) \
- V(_Uint32x4Array, _new, TypedData_Uint32x4Array_new, 71945244) \
+ V(_Int32x4Array, _new, TypedData_Int32x4Array_new, 1734048395) \
V(_Int8Array, ., TypedData_Int8Array_factory, 810750844) \
V(_Uint8Array, ., TypedData_Uint8Array_factory, 1246070930) \
V(_Uint8ClampedArray, ., TypedData_Uint8ClampedArray_factory, 1882603960) \
@@ -132,7 +132,7 @@
V(_Float32Array, ., TypedData_Float32Array_factory, 1986018007) \
V(_Float64Array, ., TypedData_Float64Array_factory, 1863852388) \
V(_Float32x4Array, ., TypedData_Float32x4Array_factory, 1144749257) \
- V(_Uint32x4Array, ., TypedData_Uint32x4Array_factory, 966782236) \
+ V(_Int32x4Array, ., TypedData_Int32x4Array_factory, 1189356537) \
// TODO(srdjan): Implement _FixedSizeArrayIterator, get:current and
diff --git a/runtime/vm/isolate.cc b/runtime/vm/isolate.cc
index 49eb208..37b6dbe 100644
--- a/runtime/vm/isolate.cc
+++ b/runtime/vm/isolate.cc
@@ -535,10 +535,6 @@
args.SetAt(0, Instance::Handle(func.ImplicitStaticClosure()));
args.SetAt(1, is_spawn_uri ? Bool::True() : Bool::False());
- // Dispatching through _startIsolate will open a control port as a live
- // port. Account for this by increasing the number of open control ports.
- isolate->message_handler()->increment_control_ports();
-
const Library& lib = Library::Handle(Library::IsolateLibrary());
const String& entry_name = String::Handle(String::New("_startIsolate"));
const Function& entry_point =
diff --git a/runtime/vm/isolate.h b/runtime/vm/isolate.h
index bd3d0be..35e6613 100644
--- a/runtime/vm/isolate.h
+++ b/runtime/vm/isolate.h
@@ -48,7 +48,7 @@
class RawInteger;
class RawError;
class RawFloat32x4;
-class RawUint32x4;
+class RawInt32x4;
class Simulator;
class StackResource;
class StackZone;
diff --git a/runtime/vm/locations.h b/runtime/vm/locations.h
index 8e34046..6d93f71 100644
--- a/runtime/vm/locations.h
+++ b/runtime/vm/locations.h
@@ -22,7 +22,7 @@
kUnboxedDouble,
kUnboxedMint,
kUnboxedFloat32x4,
- kUnboxedUint32x4,
+ kUnboxedInt32x4,
kNumRepresentations
};
diff --git a/runtime/vm/object.cc b/runtime/vm/object.cc
index 98a8c9c..b097151 100644
--- a/runtime/vm/object.cc
+++ b/runtime/vm/object.cc
@@ -480,7 +480,7 @@
cls.raw_ = class_class_;
cls.set_handle_vtable(fake.vtable());
cls.set_instance_size(Class::InstanceSize());
- cls.set_next_field_offset(Class::InstanceSize());
+ cls.set_next_field_offset(Class::NextFieldOffset());
cls.set_id(Class::kClassId);
cls.set_state_bits(0);
cls.set_is_finalized();
@@ -1148,13 +1148,13 @@
CLASS_LIST_TYPED_DATA(REGISTER_EXT_TYPED_DATA_CLASS);
#undef REGISTER_EXT_TYPED_DATA_CLASS
- // Register Float32x4 and Uint32x4 in the object store.
+ // Register Float32x4 and Int32x4 in the object store.
cls = Class::New<Float32x4>();
object_store->set_float32x4_class(cls);
RegisterPrivateClass(cls, Symbols::_Float32x4(), lib);
- cls = Class::New<Uint32x4>();
- object_store->set_uint32x4_class(cls);
- RegisterPrivateClass(cls, Symbols::_Uint32x4(), lib);
+ cls = Class::New<Int32x4>();
+ object_store->set_int32x4_class(cls);
+ RegisterPrivateClass(cls, Symbols::_Int32x4(), lib);
cls = Class::New<Instance>(kIllegalCid);
RegisterClass(cls, Symbols::Float32x4(), lib);
@@ -1166,13 +1166,13 @@
object_store->set_float32x4_type(type);
cls = Class::New<Instance>(kIllegalCid);
- RegisterClass(cls, Symbols::Uint32x4(), lib);
+ RegisterClass(cls, Symbols::Int32x4(), lib);
cls.set_num_type_arguments(0);
cls.set_num_own_type_arguments(0);
cls.set_is_prefinalized();
pending_classes.Add(cls);
type = Type::NewNonParameterizedType(cls);
- object_store->set_uint32x4_type(type);
+ object_store->set_int32x4_type(type);
object_store->set_typed_data_classes(typed_data_classes);
@@ -1308,8 +1308,8 @@
cls = Class::New<Float32x4>();
object_store->set_float32x4_class(cls);
- cls = Class::New<Uint32x4>();
- object_store->set_uint32x4_class(cls);
+ cls = Class::New<Int32x4>();
+ object_store->set_int32x4_class(cls);
#define REGISTER_TYPED_DATA_CLASS(clazz) \
cls = Class::NewTypedDataClass(kTypedData##clazz##Cid);
@@ -1534,8 +1534,8 @@
return Symbols::List().raw();
case kFloat32x4Cid:
return Symbols::Float32x4().raw();
- case kUint32x4Cid:
- return Symbols::Uint32x4().raw();
+ case kInt32x4Cid:
+ return Symbols::Int32x4().raw();
case kTypedDataInt8ArrayCid:
case kExternalTypedDataInt8ArrayCid:
return Symbols::Int8List().raw();
@@ -1662,7 +1662,7 @@
FakeObject fake;
result.set_handle_vtable(fake.vtable());
result.set_instance_size(FakeObject::InstanceSize());
- result.set_next_field_offset(FakeObject::InstanceSize());
+ result.set_next_field_offset(FakeObject::NextFieldOffset());
ASSERT((FakeObject::kClassId != kInstanceCid));
result.set_id(FakeObject::kClassId);
result.set_state_bits(0);
@@ -2032,7 +2032,8 @@
intptr_t offset = 0;
intptr_t type_args_field_offset = kNoTypeArguments;
if (super.IsNull()) {
- offset = sizeof(RawObject);
+ offset = Instance::NextFieldOffset();
+ ASSERT(offset > 0);
} else {
ASSERT(super.is_finalized() || super.is_prefinalized());
type_args_field_offset = super.type_arguments_field_offset();
@@ -2056,7 +2057,7 @@
}
}
set_type_arguments_field_offset(type_args_field_offset);
- ASSERT(offset != 0);
+ ASSERT(offset > 0);
Field& field = Field::Handle();
intptr_t len = flds.Length();
for (intptr_t i = 0; i < len; i++) {
@@ -2394,7 +2395,7 @@
ASSERT(fake.IsInstance());
result.set_handle_vtable(fake.vtable());
result.set_instance_size(FakeInstance::InstanceSize());
- result.set_next_field_offset(FakeInstance::InstanceSize());
+ result.set_next_field_offset(FakeInstance::NextFieldOffset());
result.set_id(index);
result.set_state_bits(0);
result.set_type_arguments_field_offset_in_words(kNoTypeArguments);
@@ -2426,7 +2427,7 @@
const Class& result = Class::Handle(New(name, script, token_pos));
// Instances of a signature class can only be closures.
result.set_instance_size(Closure::InstanceSize());
- result.set_next_field_offset(Closure::InstanceSize());
+ result.set_next_field_offset(Closure::NextFieldOffset());
// Signature classes extend the _FunctionImpl class.
result.set_super_type(Type::Handle(
Isolate::Current()->object_store()->function_impl_type()));
@@ -2498,7 +2499,7 @@
cls.set_super_type(Type::Handle(Type::ObjectType()));
// Compute instance size. First word contains a pointer to a properly
// sized typed array once the first native field has been set.
- intptr_t instance_size = sizeof(RawObject) + kWordSize;
+ intptr_t instance_size = sizeof(RawInstance) + kWordSize;
cls.set_instance_size(RoundedAllocationSize(instance_size));
cls.set_next_field_offset(instance_size);
cls.set_num_native_fields(field_count);
@@ -2526,7 +2527,7 @@
}
Class& result = Class::Handle(New<String>(class_id));
result.set_instance_size(instance_size);
- result.set_next_field_offset(instance_size);
+ result.set_next_field_offset(String::NextFieldOffset());
result.set_is_prefinalized();
return result.raw();
}
@@ -2537,7 +2538,7 @@
intptr_t instance_size = TypedData::InstanceSize();
Class& result = Class::Handle(New<TypedData>(class_id));
result.set_instance_size(instance_size);
- result.set_next_field_offset(instance_size);
+ result.set_next_field_offset(TypedData::NextFieldOffset());
result.set_is_prefinalized();
return result.raw();
}
@@ -2547,7 +2548,7 @@
ASSERT(RawObject::IsTypedDataViewClassId(class_id));
Class& result = Class::Handle(New<Instance>(class_id));
result.set_instance_size(0);
- result.set_next_field_offset(0);
+ result.set_next_field_offset(-kWordSize);
return result.raw();
}
@@ -2557,7 +2558,7 @@
intptr_t instance_size = ExternalTypedData::InstanceSize();
Class& result = Class::Handle(New<ExternalTypedData>(class_id));
result.set_instance_size(instance_size);
- result.set_next_field_offset(instance_size);
+ result.set_next_field_offset(ExternalTypedData::NextFieldOffset());
result.set_is_prefinalized();
return result.raw();
}
@@ -2736,157 +2737,179 @@
// type T by class 'other' parameterized with 'other_type_arguments'.
// This class and class 'other' do not need to be finalized, however, they must
// be resolved as well as their interfaces.
-bool Class::TypeTest(
- TypeTestKind test_kind,
+bool Class::TypeTestNonRecursive(
+ const Class& cls,
+ Class::TypeTestKind test_kind,
const AbstractTypeArguments& type_arguments,
const Class& other,
const AbstractTypeArguments& other_type_arguments,
- Error* bound_error) const {
- ASSERT(!IsVoidClass());
- // Check for DynamicType.
- // Each occurrence of DynamicType in type T is interpreted as the dynamic
- // type, a supertype of all types.
- if (other.IsDynamicClass()) {
- return true;
- }
- // In the case of a subtype test, each occurrence of DynamicType in type S is
- // interpreted as the bottom type, a subtype of all types.
- // However, DynamicType is not more specific than any type.
- if (IsDynamicClass()) {
- return test_kind == kIsSubtypeOf;
- }
- // Check for NullType, which is only a subtype of ObjectType, of DynamicType,
- // or of itself, and which is more specific than any type.
- if (IsNullClass()) {
- // We already checked for other.IsDynamicClass() above.
- return (test_kind == kIsMoreSpecificThan) ||
- other.IsObjectClass() || other.IsNullClass();
- }
- // Check for ObjectType. Any type that is not NullType or DynamicType (already
- // checked above), is more specific than ObjectType.
- if (other.IsObjectClass()) {
- return true;
- }
- // Check for reflexivity.
- if (raw() == other.raw()) {
- const intptr_t len = NumTypeArguments();
- if (len == 0) {
+ Error* bound_error) {
+ // Use the thsi object as if it was the receiver of this method, but instead
+ // of recursing reset it to the super class and loop.
+ Class& thsi = Class::Handle(cls.raw());
+ while (true) {
+ ASSERT(!thsi.IsVoidClass());
+ // Check for DynamicType.
+ // Each occurrence of DynamicType in type T is interpreted as the dynamic
+ // type, a supertype of all types.
+ if (other.IsDynamicClass()) {
return true;
}
- // Since we do not truncate the type argument vector of a subclass (see
- // below), we only check a prefix of the proper length.
- // Check for covariance.
- if (other_type_arguments.IsNull() || other_type_arguments.IsRaw(len)) {
+ // In the case of a subtype test, each occurrence of DynamicType in type S
+ // is interpreted as the bottom type, a subtype of all types.
+ // However, DynamicType is not more specific than any type.
+ if (thsi.IsDynamicClass()) {
+ return test_kind == Class::kIsSubtypeOf;
+ }
+ // Check for NullType, which is only a subtype of ObjectType, of
+ // DynamicType, or of itself, and which is more specific than any type.
+ if (thsi.IsNullClass()) {
+ // We already checked for other.IsDynamicClass() above.
+ return (test_kind == Class::kIsMoreSpecificThan) ||
+ other.IsObjectClass() || other.IsNullClass();
+ }
+ // Check for ObjectType. Any type that is not NullType or DynamicType
+ // (already checked above), is more specific than ObjectType.
+ if (other.IsObjectClass()) {
return true;
}
- if (type_arguments.IsNull() || type_arguments.IsRaw(len)) {
- // Other type can't be more specific than this one because for that
- // it would have to have all dynamic type arguments which is checked
- // above.
- return test_kind == kIsSubtypeOf;
- }
- return type_arguments.TypeTest(test_kind,
- other_type_arguments,
- len,
- bound_error);
- }
- const bool other_is_function_class = other.IsFunctionClass();
- if (other.IsSignatureClass() || other_is_function_class) {
- const Function& other_fun = Function::Handle(other.signature_function());
- if (IsSignatureClass()) {
- if (other_is_function_class) {
+ // Check for reflexivity.
+ if (thsi.raw() == other.raw()) {
+ const intptr_t len = thsi.NumTypeArguments();
+ if (len == 0) {
return true;
}
- // Check for two function types.
- const Function& fun = Function::Handle(signature_function());
- return fun.TypeTest(test_kind,
- type_arguments,
- other_fun,
- other_type_arguments,
- bound_error);
- }
- // Check if type S has a call() method of function type T.
- Function& function =
- Function::Handle(LookupDynamicFunction(Symbols::Call()));
- if (function.IsNull()) {
- // Walk up the super_class chain.
- Class& cls = Class::Handle(SuperClass());
- while (!cls.IsNull() && function.IsNull()) {
- function = cls.LookupDynamicFunction(Symbols::Call());
- cls = cls.SuperClass();
+ // Since we do not truncate the type argument vector of a subclass (see
+ // below), we only check a prefix of the proper length.
+ // Check for covariance.
+ if (other_type_arguments.IsNull() || other_type_arguments.IsRaw(len)) {
+ return true;
}
+ if (type_arguments.IsNull() || type_arguments.IsRaw(len)) {
+ // Other type can't be more specific than this one because for that
+ // it would have to have all dynamic type arguments which is checked
+ // above.
+ return test_kind == Class::kIsSubtypeOf;
+ }
+ return type_arguments.TypeTest(test_kind,
+ other_type_arguments,
+ len,
+ bound_error);
}
- if (!function.IsNull()) {
- if (other_is_function_class ||
- function.TypeTest(test_kind,
+ const bool other_is_function_class = other.IsFunctionClass();
+ if (other.IsSignatureClass() || other_is_function_class) {
+ const Function& other_fun = Function::Handle(other.signature_function());
+ if (thsi.IsSignatureClass()) {
+ if (other_is_function_class) {
+ return true;
+ }
+ // Check for two function types.
+ const Function& fun = Function::Handle(thsi.signature_function());
+ return fun.TypeTest(test_kind,
type_arguments,
other_fun,
other_type_arguments,
- bound_error)) {
- return true;
+ bound_error);
+ }
+ // Check if type S has a call() method of function type T.
+ Function& function =
+ Function::Handle(thsi.LookupDynamicFunction(Symbols::Call()));
+ if (function.IsNull()) {
+ // Walk up the super_class chain.
+ Class& cls = Class::Handle(thsi.SuperClass());
+ while (!cls.IsNull() && function.IsNull()) {
+ function = cls.LookupDynamicFunction(Symbols::Call());
+ cls = cls.SuperClass();
+ }
+ }
+ if (!function.IsNull()) {
+ if (other_is_function_class ||
+ function.TypeTest(test_kind,
+ type_arguments,
+ other_fun,
+ other_type_arguments,
+ bound_error)) {
+ return true;
+ }
}
}
- }
- // Check for 'direct super type' specified in the implements clause
- // and check for transitivity at the same time.
- Array& interfaces = Array::Handle(this->interfaces());
- AbstractType& interface = AbstractType::Handle();
- Class& interface_class = Class::Handle();
- AbstractTypeArguments& interface_args = AbstractTypeArguments::Handle();
- Error& error = Error::Handle();
- for (intptr_t i = 0; i < interfaces.Length(); i++) {
- interface ^= interfaces.At(i);
- if (!interface.IsFinalized()) {
- // We may be checking bounds at finalization time. Skipping this
- // unfinalized interface will postpone bound checking to run time.
- continue;
- }
- error = Error::null();
- if (interface.IsMalboundedWithError(&error)) {
- // Return the first bound error to the caller if it requests it.
- if ((bound_error != NULL) && bound_error->IsNull()) {
- ASSERT(!error.IsNull());
- *bound_error = error.raw();
+ // Check for 'direct super type' specified in the implements clause
+ // and check for transitivity at the same time.
+ Array& interfaces = Array::Handle(thsi.interfaces());
+ AbstractType& interface = AbstractType::Handle();
+ Class& interface_class = Class::Handle();
+ AbstractTypeArguments& interface_args = AbstractTypeArguments::Handle();
+ Error& error = Error::Handle();
+ for (intptr_t i = 0; i < interfaces.Length(); i++) {
+ interface ^= interfaces.At(i);
+ if (!interface.IsFinalized()) {
+ // We may be checking bounds at finalization time. Skipping this
+ // unfinalized interface will postpone bound checking to run time.
+ continue;
}
- continue; // Another interface may work better.
- }
- interface_class = interface.type_class();
- interface_args = interface.arguments();
- if (!interface_args.IsNull() && !interface_args.IsInstantiated()) {
- // This type class implements an interface that is parameterized with
- // generic type(s), e.g. it implements List<T>.
- // The uninstantiated type T must be instantiated using the type
- // parameters of this type before performing the type test.
- // The type arguments of this type that are referred to by the type
- // parameters of the interface are at the end of the type vector,
- // after the type arguments of the super type of this type.
- // The index of the type parameters is adjusted upon finalization.
error = Error::null();
- interface_args = interface_args.InstantiateFrom(type_arguments, &error);
- if (!error.IsNull()) {
+ if (interface.IsMalboundedWithError(&error)) {
// Return the first bound error to the caller if it requests it.
if ((bound_error != NULL) && bound_error->IsNull()) {
+ ASSERT(!error.IsNull());
*bound_error = error.raw();
}
continue; // Another interface may work better.
}
+ interface_class = interface.type_class();
+ interface_args = interface.arguments();
+ if (!interface_args.IsNull() && !interface_args.IsInstantiated()) {
+ // This type class implements an interface that is parameterized with
+ // generic type(s), e.g. it implements List<T>.
+ // The uninstantiated type T must be instantiated using the type
+ // parameters of this type before performing the type test.
+ // The type arguments of this type that are referred to by the type
+ // parameters of the interface are at the end of the type vector,
+ // after the type arguments of the super type of this type.
+ // The index of the type parameters is adjusted upon finalization.
+ error = Error::null();
+ interface_args = interface_args.InstantiateFrom(type_arguments, &error);
+ if (!error.IsNull()) {
+ // Return the first bound error to the caller if it requests it.
+ if ((bound_error != NULL) && bound_error->IsNull()) {
+ *bound_error = error.raw();
+ }
+ continue; // Another interface may work better.
+ }
+ }
+ if (interface_class.TypeTest(test_kind,
+ interface_args,
+ other,
+ other_type_arguments,
+ bound_error)) {
+ return true;
+ }
}
- if (interface_class.TypeTest(test_kind,
- interface_args,
- other,
- other_type_arguments,
- bound_error)) {
- return true;
+ // "Recurse" up the class hierarchy until we have reached the top.
+ thsi = thsi.SuperClass();
+ if (thsi.IsNull()) {
+ return false;
}
}
- const Class& super_class = Class::Handle(SuperClass());
- if (super_class.IsNull()) {
- return false;
- }
- // Instead of truncating the type argument vector to the length of the super
- // type argument vector, we make sure that the code works with a vector that
- // is longer than necessary.
- return super_class.TypeTest(test_kind,
+ UNREACHABLE();
+ return false;
+}
+
+
+// If test_kind == kIsSubtypeOf, checks if type S is a subtype of type T.
+// If test_kind == kIsMoreSpecificThan, checks if S is more specific than T.
+// Type S is specified by this class parameterized with 'type_arguments', and
+// type T by class 'other' parameterized with 'other_type_arguments'.
+// This class and class 'other' do not need to be finalized, however, they must
+// be resolved as well as their interfaces.
+bool Class::TypeTest(
+ TypeTestKind test_kind,
+ const AbstractTypeArguments& type_arguments,
+ const Class& other,
+ const AbstractTypeArguments& other_type_arguments,
+ Error* bound_error) const {
+ return TypeTestNonRecursive(*this,
+ test_kind,
type_arguments,
other,
other_type_arguments,
@@ -10829,7 +10852,7 @@
ASSERT(instance_size != 0);
uword this_addr = reinterpret_cast<uword>(this->raw_ptr());
uword other_addr = reinterpret_cast<uword>(other.raw_ptr());
- for (intptr_t offset = sizeof(RawObject);
+ for (intptr_t offset = Instance::NextFieldOffset();
offset < instance_size;
offset += kWordSize) {
if ((*reinterpret_cast<RawObject**>(this_addr + offset)) !=
@@ -11409,9 +11432,9 @@
}
-bool AbstractType::IsUint32x4Type() const {
+bool AbstractType::IsInt32x4Type() const {
return HasResolvedTypeClass() &&
- (type_class() == Type::Handle(Type::Uint32x4()).type_class());
+ (type_class() == Type::Handle(Type::Int32x4()).type_class());
}
@@ -11574,8 +11597,8 @@
}
-RawType* Type::Uint32x4() {
- return Isolate::Current()->object_store()->uint32x4_type();
+RawType* Type::Int32x4() {
+ return Isolate::Current()->object_store()->int32x4_type();
}
@@ -15052,14 +15075,14 @@
}
-RawUint32x4* Uint32x4::New(uint32_t v0, uint32_t v1, uint32_t v2, uint32_t v3,
- Heap::Space space) {
- ASSERT(Isolate::Current()->object_store()->uint32x4_class() !=
+RawInt32x4* Int32x4::New(int32_t v0, int32_t v1, int32_t v2, int32_t v3,
+ Heap::Space space) {
+ ASSERT(Isolate::Current()->object_store()->int32x4_class() !=
Class::null());
- Uint32x4& result = Uint32x4::Handle();
+ Int32x4& result = Int32x4::Handle();
{
- RawObject* raw = Object::Allocate(Uint32x4::kClassId,
- Uint32x4::InstanceSize(),
+ RawObject* raw = Object::Allocate(Int32x4::kClassId,
+ Int32x4::InstanceSize(),
space);
NoGCScope no_gc;
result ^= raw;
@@ -15072,13 +15095,13 @@
}
-RawUint32x4* Uint32x4::New(simd128_value_t value, Heap::Space space) {
- ASSERT(Isolate::Current()->object_store()->float32x4_class() !=
+RawInt32x4* Int32x4::New(simd128_value_t value, Heap::Space space) {
+ ASSERT(Isolate::Current()->object_store()->int32x4_class() !=
Class::null());
- Uint32x4& result = Uint32x4::Handle();
+ Int32x4& result = Int32x4::Handle();
{
- RawObject* raw = Object::Allocate(Uint32x4::kClassId,
- Uint32x4::InstanceSize(),
+ RawObject* raw = Object::Allocate(Int32x4::kClassId,
+ Int32x4::InstanceSize(),
space);
NoGCScope no_gc;
result ^= raw;
@@ -15088,62 +15111,62 @@
}
-void Uint32x4::set_x(uint32_t value) const {
+void Int32x4::set_x(int32_t value) const {
raw_ptr()->value_[0] = value;
}
-void Uint32x4::set_y(uint32_t value) const {
+void Int32x4::set_y(int32_t value) const {
raw_ptr()->value_[1] = value;
}
-void Uint32x4::set_z(uint32_t value) const {
+void Int32x4::set_z(int32_t value) const {
raw_ptr()->value_[2] = value;
}
-void Uint32x4::set_w(uint32_t value) const {
+void Int32x4::set_w(int32_t value) const {
raw_ptr()->value_[3] = value;
}
-uint32_t Uint32x4::x() const {
+int32_t Int32x4::x() const {
return raw_ptr()->value_[0];
}
-uint32_t Uint32x4::y() const {
+int32_t Int32x4::y() const {
return raw_ptr()->value_[1];
}
-uint32_t Uint32x4::z() const {
+int32_t Int32x4::z() const {
return raw_ptr()->value_[2];
}
-uint32_t Uint32x4::w() const {
+int32_t Int32x4::w() const {
return raw_ptr()->value_[3];
}
-simd128_value_t Uint32x4::value() const {
+simd128_value_t Int32x4::value() const {
return simd128_value_t().readFrom(&raw_ptr()->value_[0]);
}
-void Uint32x4::set_value(simd128_value_t value) const {
+void Int32x4::set_value(simd128_value_t value) const {
value.writeTo(&raw_ptr()->value_[0]);
}
-const char* Uint32x4::ToCString() const {
+const char* Int32x4::ToCString() const {
const char* kFormat = "[%08x, %08x, %08x, %08x]";
- uint32_t _x = x();
- uint32_t _y = y();
- uint32_t _z = z();
- uint32_t _w = w();
+ int32_t _x = x();
+ int32_t _y = y();
+ int32_t _z = z();
+ int32_t _w = w();
// Calculate the size of the string.
intptr_t len = OS::SNPrint(NULL, 0, kFormat, _x, _y, _z, _w) + 1;
char* chars = Isolate::Current()->current_zone()->Alloc<char>(len);
@@ -15152,7 +15175,7 @@
}
-void Uint32x4::PrintToJSONStream(JSONStream* stream, bool ref) const {
+void Int32x4::PrintToJSONStream(JSONStream* stream, bool ref) const {
JSONObject jsobj(stream);
}
@@ -15170,7 +15193,7 @@
4, // kTypedDataFloat32ArrayCid.
8, // kTypedDataFloat64ArrayCid.
16, // kTypedDataFloat32x4ArrayCid.
- 16, // kTypedDataUint32x4ArrayCid.
+ 16, // kTypedDataInt32x4ArrayCid.
};
diff --git a/runtime/vm/object.h b/runtime/vm/object.h
index 281062a..2b48af2 100644
--- a/runtime/vm/object.h
+++ b/runtime/vm/object.h
@@ -201,6 +201,9 @@
ASSERT(raw() != null()); \
return raw()->ptr(); \
} \
+ static intptr_t NextFieldOffset() { \
+ return -kWordSize; \
+ } \
SNAPSHOT_READER_SUPPORT(object) \
friend class Isolate; \
friend class StackFrame; \
@@ -528,6 +531,11 @@
RawObject* raw_; // The raw object reference.
private:
+ static intptr_t NextFieldOffset() {
+ // Indicates this class cannot be extended by dart code.
+ return -kWordSize;
+ }
+
static void InitializeObject(uword address, intptr_t id, intptr_t size);
static void RegisterClass(const Class& cls,
@@ -655,7 +663,8 @@
set_next_field_offset_in_words(value_in_bytes / kWordSize);
}
void set_next_field_offset_in_words(intptr_t value) const {
- ASSERT((Utils::IsAligned((value * kWordSize), kObjectAlignment) &&
+ ASSERT((value == -1) ||
+ (Utils::IsAligned((value * kWordSize), kObjectAlignment) &&
(value == raw_ptr()->instance_size_in_words_)) ||
(!Utils::IsAligned((value * kWordSize), kObjectAlignment) &&
((value + 1) == raw_ptr()->instance_size_in_words_)));
@@ -1083,6 +1092,7 @@
RawFunction* CreateInvocationDispatcher(const String& target_name,
const Array& args_desc,
RawFunction::Kind kind) const;
+
void CalculateFieldOffsets() const;
// Initial value for the cached number of type arguments.
@@ -1121,6 +1131,14 @@
const AbstractTypeArguments& other_type_arguments,
Error* bound_error) const;
+ static bool TypeTestNonRecursive(
+ const Class& cls,
+ TypeTestKind test_kind,
+ const AbstractTypeArguments& type_arguments,
+ const Class& other,
+ const AbstractTypeArguments& other_type_arguments,
+ Error* bound_error);
+
FINAL_HEAP_OBJECT_IMPLEMENTATION(Class, Object);
friend class AbstractType;
friend class Instance;
@@ -1144,6 +1162,7 @@
static intptr_t InstanceSize() {
return RoundedAllocationSize(sizeof(RawUnresolvedClass));
}
+
static RawUnresolvedClass* New(const LibraryPrefix& library_prefix,
const String& ident,
intptr_t token_pos);
@@ -1384,6 +1403,7 @@
const AbstractTypeArguments& value) const;
void set_instantiator_type_arguments(
const AbstractTypeArguments& value) const;
+
static RawInstantiatedTypeArguments* New();
FINAL_HEAP_OBJECT_IMPLEMENTATION(InstantiatedTypeArguments,
@@ -1408,6 +1428,7 @@
private:
void set_patched_class(const Class& value) const;
void set_source_class(const Class& value) const;
+
static RawPatchClass* New();
FINAL_HEAP_OBJECT_IMPLEMENTATION(PatchClass, Object);
@@ -1859,7 +1880,6 @@
return kind() == RawFunction::kSignatureFunction;
}
-
static intptr_t InstanceSize() {
return RoundedAllocationSize(sizeof(RawFunction));
}
@@ -1946,6 +1966,7 @@
void set_num_optional_parameters(intptr_t value) const; // Encoded value.
void set_kind_tag(intptr_t value) const;
void set_data(const Object& value) const;
+
static RawFunction* New();
void BuildSignatureParameters(bool instantiate,
@@ -2212,6 +2233,7 @@
void set_kind_bits(intptr_t value) const {
raw_ptr()->kind_bits_ = static_cast<uint8_t>(value);
}
+
static RawField* New();
FINAL_HEAP_OBJECT_IMPLEMENTATION(Field, Object);
@@ -2378,6 +2400,7 @@
void set_source(const String& value) const;
void set_kind(RawScript::Kind value) const;
void set_tokens(const TokenStream& value) const;
+
static RawScript* New();
FINAL_HEAP_OBJECT_IMPLEMENTATION(Script, Object);
@@ -2592,6 +2615,7 @@
private:
static const int kInitialImportsCapacity = 4;
static const int kImportsCapacityIncrement = 8;
+
static RawLibrary* New();
void set_num_imports(intptr_t value) const {
@@ -2654,6 +2678,7 @@
void set_name(const String& value) const;
void set_imports(const Array& value) const;
void set_num_imports(intptr_t value) const;
+
static RawLibraryPrefix* New();
FINAL_HEAP_OBJECT_IMPLEMENTATION(LibraryPrefix, Object);
@@ -2679,6 +2704,7 @@
static RawNamespace* New(const Library& library,
const Array& show_names,
const Array& hide_names);
+
private:
static RawNamespace* New();
@@ -2988,6 +3014,7 @@
static const intptr_t kMaxHandlers = 1024 * 1024;
void set_handled_types_data(const Array& value) const;
+
FINAL_HEAP_OBJECT_IMPLEMENTATION(ExceptionHandlers, Object);
friend class Class;
};
@@ -3745,6 +3772,7 @@
private:
void set_message(const String& message) const;
+
static RawApiError* New();
FINAL_HEAP_OBJECT_IMPLEMENTATION(ApiError, Error);
@@ -3770,6 +3798,7 @@
private:
void set_message(const String& message) const;
+
static RawLanguageError* New();
FINAL_HEAP_OBJECT_IMPLEMENTATION(LanguageError, Error);
@@ -3913,10 +3942,16 @@
}
bool IsValidFieldOffset(int offset) const;
+ static intptr_t NextFieldOffset() {
+ return sizeof(RawInstance);
+ }
+
// TODO(iposva): Determine if this gets in the way of Smi.
HEAP_OBJECT_IMPLEMENTATION(Instance, Object);
friend class Class;
friend class Closure;
+ friend class SnapshotWriter;
+ friend class StubCode;
friend class TypedDataView;
};
@@ -4007,8 +4042,8 @@
// Check if this type represents the 'Float32x4' type.
bool IsFloat32x4Type() const;
- // Check if this type represents the 'Uint32x4' type.
- bool IsUint32x4Type() const;
+ // Check if this type represents the 'Int32x4' type.
+ bool IsInt32x4Type() const;
// Check if this type represents the 'num' type.
bool IsNumberType() const;
@@ -4129,8 +4164,8 @@
// The 'Float32x4' type.
static RawType* Float32x4();
- // The 'Uint32x4' type.
- static RawType* Uint32x4();
+ // The 'Int32x4' type.
+ static RawType* Int32x4();
// The 'num' type.
static RawType* Number();
@@ -4225,6 +4260,7 @@
void set_name(const String& value) const;
void set_token_pos(intptr_t token_pos) const;
void set_type_state(int8_t state) const;
+
static RawTypeParameter* New();
FINAL_HEAP_OBJECT_IMPLEMENTATION(TypeParameter, AbstractType);
@@ -4478,11 +4514,17 @@
}
private:
+ static intptr_t NextFieldOffset() {
+ // Indicates this class cannot be extended by dart code.
+ return -kWordSize;
+ }
+
static intptr_t ValueFromRaw(uword raw_value) {
intptr_t value = raw_value;
ASSERT((value & kSmiTagMask) == kSmiTag);
return (value >> kSmiTagShift);
}
+
static cpp_vtable handle_vtable_;
Smi() : Integer() {}
@@ -5201,6 +5243,11 @@
intptr_t tags,
Snapshot::Kind kind);
+ static intptr_t NextFieldOffset() {
+ // Indicates this class cannot be extended by dart code.
+ return -kWordSize;
+ }
+
friend class Class;
friend class String;
friend class SnapshotReader;
@@ -5267,6 +5314,11 @@
intptr_t tags,
Snapshot::Kind kind);
+ static intptr_t NextFieldOffset() {
+ // Indicates this class cannot be extended by dart code.
+ return -kWordSize;
+ }
+
friend class Class;
friend class String;
friend class SnapshotReader;
@@ -5436,6 +5488,11 @@
}
private:
+ static intptr_t NextFieldOffset() {
+ // Indicates this class cannot be extended by dart code.
+ return -kWordSize;
+ }
+
static RawImmutableArray* raw(const Array& array) {
return reinterpret_cast<RawImmutableArray*>(array.raw());
}
@@ -5594,36 +5651,36 @@
};
-class Uint32x4 : public Instance {
+class Int32x4 : public Instance {
public:
- static RawUint32x4* New(uint32_t value0, uint32_t value1, uint32_t value2,
- uint32_t value3, Heap::Space space = Heap::kNew);
- static RawUint32x4* New(simd128_value_t value,
+ static RawInt32x4* New(int32_t value0, int32_t value1, int32_t value2,
+ int32_t value3, Heap::Space space = Heap::kNew);
+ static RawInt32x4* New(simd128_value_t value,
Heap::Space space = Heap::kNew);
- uint32_t x() const;
- uint32_t y() const;
- uint32_t z() const;
- uint32_t w() const;
+ int32_t x() const;
+ int32_t y() const;
+ int32_t z() const;
+ int32_t w() const;
- void set_x(uint32_t x) const;
- void set_y(uint32_t y) const;
- void set_z(uint32_t z) const;
- void set_w(uint32_t w) const;
+ void set_x(int32_t x) const;
+ void set_y(int32_t y) const;
+ void set_z(int32_t z) const;
+ void set_w(int32_t w) const;
simd128_value_t value() const;
void set_value(simd128_value_t value) const;
static intptr_t InstanceSize() {
- return RoundedAllocationSize(sizeof(RawUint32x4));
+ return RoundedAllocationSize(sizeof(RawInt32x4));
}
static intptr_t value_offset() {
- return OFFSET_OF(RawUint32x4, value_);
+ return OFFSET_OF(RawInt32x4, value_);
}
private:
- FINAL_HEAP_OBJECT_IMPLEMENTATION(Uint32x4, Instance);
+ FINAL_HEAP_OBJECT_IMPLEMENTATION(Int32x4, Instance);
friend class Class;
};
@@ -5675,7 +5732,7 @@
TYPED_GETTER_SETTER(Float32, float)
TYPED_GETTER_SETTER(Float64, double)
TYPED_GETTER_SETTER(Float32x4, simd128_value_t)
- TYPED_GETTER_SETTER(Uint32x4, simd128_value_t)
+ TYPED_GETTER_SETTER(Int32x4, simd128_value_t)
#undef TYPED_GETTER_SETTER
@@ -5809,7 +5866,7 @@
TYPED_GETTER_SETTER(Float32, float)
TYPED_GETTER_SETTER(Float64, double)
TYPED_GETTER_SETTER(Float32x4, simd128_value_t)
- TYPED_GETTER_SETTER(Uint32x4, simd128_value_t);
+ TYPED_GETTER_SETTER(Int32x4, simd128_value_t);
#undef TYPED_GETTER_SETTER
@@ -5907,7 +5964,7 @@
}
static intptr_t NumberOfFields() {
- return (kLengthOffset - kTypeArguments);
+ return kLengthOffset;
}
static intptr_t data_offset() {
@@ -5931,10 +5988,9 @@
private:
enum {
- kTypeArguments = 1,
- kDataOffset = 2,
- kOffsetInBytesOffset = 3,
- kLengthOffset = 4,
+ kDataOffset = 1,
+ kOffsetInBytesOffset = 2,
+ kLengthOffset = 3,
};
};
@@ -6007,6 +6063,10 @@
const Context& value) {
closure.StorePointer(ContextAddr(closure), value.raw());
}
+ static intptr_t NextFieldOffset() {
+ // Indicates this class cannot be extended by dart code.
+ return -kWordSize;
+ }
friend class Class;
};
diff --git a/runtime/vm/object_store.cc b/runtime/vm/object_store.cc
index a5dddc1..4ec3410 100644
--- a/runtime/vm/object_store.cc
+++ b/runtime/vm/object_store.cc
@@ -41,7 +41,7 @@
immutable_array_class_(Class::null()),
growable_object_array_class_(Class::null()),
float32x4_class_(Class::null()),
- uint32x4_class_(Class::null()),
+ int32x4_class_(Class::null()),
typed_data_classes_(Array::null()),
error_class_(Class::null()),
stacktrace_class_(Class::null()),
diff --git a/runtime/vm/object_store.h b/runtime/vm/object_store.h
index 2bc8cc5..1f51483 100644
--- a/runtime/vm/object_store.h
+++ b/runtime/vm/object_store.h
@@ -195,15 +195,15 @@
RawType* float32x4_type() const { return float32x4_type_; }
void set_float32x4_type(const Type& value) { float32x4_type_ = value.raw(); }
- RawClass* uint32x4_class() const {
- return uint32x4_class_;
+ RawClass* int32x4_class() const {
+ return int32x4_class_;
}
- void set_uint32x4_class(const Class& value) {
- uint32x4_class_ = value.raw();
+ void set_int32x4_class(const Class& value) {
+ int32x4_class_ = value.raw();
}
- RawType* uint32x4_type() const { return uint32x4_type_; }
- void set_uint32x4_type(const Type& value) { uint32x4_type_ = value.raw(); }
+ RawType* int32x4_type() const { return int32x4_type_; }
+ void set_int32x4_type(const Type& value) { int32x4_type_ = value.raw(); }
RawArray* typed_data_classes() const {
return typed_data_classes_;
@@ -441,7 +441,7 @@
RawClass* double_class_;
RawType* double_type_;
RawType* float32x4_type_;
- RawType* uint32x4_type_;
+ RawType* int32x4_type_;
RawType* string_type_;
RawClass* one_byte_string_class_;
RawClass* two_byte_string_class_;
@@ -454,7 +454,7 @@
RawClass* immutable_array_class_;
RawClass* growable_object_array_class_;
RawClass* float32x4_class_;
- RawClass* uint32x4_class_;
+ RawClass* int32x4_class_;
RawArray* typed_data_classes_;
RawClass* error_class_;
RawClass* stacktrace_class_;
diff --git a/runtime/vm/parser.cc b/runtime/vm/parser.cc
index 91023c5..bf8ccaa 100644
--- a/runtime/vm/parser.cc
+++ b/runtime/vm/parser.cc
@@ -4839,8 +4839,8 @@
RawObject* Parser::CallLibraryTagHandler(Dart_LibraryTag tag,
- intptr_t token_pos,
- const String& url) {
+ intptr_t token_pos,
+ const String& url) {
Dart_LibraryTagHandler handler = isolate()->library_tag_handler();
if (handler == NULL) {
if (url.StartsWith(Symbols::DartScheme())) {
@@ -5408,10 +5408,8 @@
TRACE_PARSER("ParseVariableDeclaration");
ASSERT(IsIdentifier());
const intptr_t ident_pos = TokenPos();
- LocalVariable* variable =
- new LocalVariable(ident_pos, *CurrentLiteral(), type);
- ASSERT(current_block_ != NULL);
- ASSERT(current_block_->scope != NULL);
+ const String& ident = *CurrentLiteral();
+ LocalVariable* variable = new LocalVariable(ident_pos, ident, type);
ConsumeToken(); // Variable identifier.
AstNode* initialization = NULL;
if (CurrentToken() == Token::kASSIGN) {
@@ -5432,6 +5430,27 @@
AstNode* null_expr = new LiteralNode(ident_pos, Instance::ZoneHandle());
initialization = new StoreLocalNode(ident_pos, variable, null_expr);
}
+
+ ASSERT(current_block_ != NULL);
+ const intptr_t previous_pos =
+ current_block_->scope->PreviousReferencePos(ident);
+ if (previous_pos >= 0) {
+ ASSERT(!script_.IsNull());
+ if (previous_pos > ident_pos) {
+ ErrorMsg(ident_pos,
+ "initializer of '%s' may not refer to itself",
+ ident.ToCString());
+
+ } else {
+ intptr_t line_number;
+ script_.GetTokenLocation(previous_pos, &line_number, NULL);
+ ErrorMsg(ident_pos,
+ "identifier '%s' previously used in line %" Pd "",
+ ident.ToCString(),
+ line_number);
+ }
+ }
+
// Add variable to scope after parsing the initalizer expression.
// The expression must not be able to refer to the variable.
if (!current_block_->scope->AddVariable(variable)) {
@@ -5546,8 +5565,24 @@
(LookaheadToken(1) != Token::kLPAREN)) {
result_type = ParseType(ClassFinalizer::kCanonicalize);
}
+ const intptr_t name_pos = TokenPos();
variable_name = ExpectIdentifier("function name expected");
function_name = variable_name;
+
+ // Check that the function name has not been referenced
+ // before this declaration.
+ ASSERT(current_block_ != NULL);
+ const intptr_t previous_pos =
+ current_block_->scope->PreviousReferencePos(*function_name);
+ if (previous_pos >= 0) {
+ ASSERT(!script_.IsNull());
+ intptr_t line_number;
+ script_.GetTokenLocation(previous_pos, &line_number, NULL);
+ ErrorMsg(name_pos,
+ "identifier '%s' previously used in line %" Pd "",
+ function_name->ToCString(),
+ line_number);
+ }
}
if (CurrentToken() != Token::kLPAREN) {
@@ -8918,6 +8953,9 @@
TRACE_PARSER("ResolveIdentInLocalScope");
// First try to find the identifier in the nested local scopes.
LocalVariable* local = LookupLocalScope(ident);
+ if (current_block_ != NULL) {
+ current_block_->scope->AddReferencedName(ident_pos, ident);
+ }
if (local != NULL) {
if (node != NULL) {
if (local->IsConst()) {
@@ -9262,6 +9300,11 @@
}
QualIdent type_name;
if (finalization == ClassFinalizer::kIgnore) {
+ if (!is_top_level_ && (current_block_ != NULL)) {
+ // Add the library prefix or type class name to the list of referenced
+ // names of this scope, even if the type is ignored.
+ current_block_->scope->AddReferencedName(TokenPos(), *CurrentLiteral());
+ }
SkipQualIdent();
} else {
ParseQualIdent(&type_name);
diff --git a/runtime/vm/raw_object.cc b/runtime/vm/raw_object.cc
index 95ce178..361006f 100644
--- a/runtime/vm/raw_object.cc
+++ b/runtime/vm/raw_object.cc
@@ -742,11 +742,11 @@
}
-intptr_t RawUint32x4::VisitUint32x4Pointers(
- RawUint32x4* raw_obj,
+intptr_t RawInt32x4::VisitInt32x4Pointers(
+ RawInt32x4* raw_obj,
ObjectPointerVisitor* visitor) {
ASSERT(raw_obj->IsHeapObject());
- return Uint32x4::InstanceSize();
+ return Int32x4::InstanceSize();
}
diff --git a/runtime/vm/raw_object.h b/runtime/vm/raw_object.h
index 0eb68b8..0d17902 100644
--- a/runtime/vm/raw_object.h
+++ b/runtime/vm/raw_object.h
@@ -68,7 +68,7 @@
V(WeakProperty) \
V(MirrorReference) \
V(Float32x4) \
- V(Uint32x4) \
+ V(Int32x4) \
#define CLASS_LIST_ARRAYS(V) \
V(Array) \
@@ -94,7 +94,7 @@
V(Float32Array) \
V(Float64Array) \
V(Float32x4Array) \
- V(Uint32x4Array) \
+ V(Int32x4Array) \
#define CLASS_LIST_FOR_HANDLES(V) \
CLASS_LIST_NO_OBJECT_NOR_STRING_NOR_ARRAY(V) \
@@ -1412,17 +1412,17 @@
};
-class RawUint32x4 : public RawInstance {
- RAW_HEAP_OBJECT_IMPLEMENTATION(Uint32x4);
+class RawInt32x4 : public RawInstance {
+ RAW_HEAP_OBJECT_IMPLEMENTATION(Int32x4);
- uint32_t value_[4];
+ int32_t value_[4];
friend class SnapshotReader;
public:
- uint32_t x() const { return value_[0]; }
- uint32_t y() const { return value_[1]; }
- uint32_t z() const { return value_[2]; }
- uint32_t w() const { return value_[3]; }
+ int32_t x() const { return value_[0]; }
+ int32_t y() const { return value_[1]; }
+ int32_t z() const { return value_[2]; }
+ int32_t w() const { return value_[3]; }
};
@@ -1650,10 +1650,10 @@
kTypedDataFloat32ArrayCid == kTypedDataInt8ArrayCid + 9 &&
kTypedDataFloat64ArrayCid == kTypedDataInt8ArrayCid + 10 &&
kTypedDataFloat32x4ArrayCid == kTypedDataInt8ArrayCid + 11 &&
- kTypedDataUint32x4ArrayCid == kTypedDataInt8ArrayCid + 12 &&
+ kTypedDataInt32x4ArrayCid == kTypedDataInt8ArrayCid + 12 &&
kTypedDataInt8ArrayViewCid == kTypedDataInt8ArrayCid + 13);
return (index >= kTypedDataInt8ArrayCid &&
- index <= kTypedDataUint32x4ArrayCid);
+ index <= kTypedDataInt32x4ArrayCid);
}
@@ -1670,7 +1670,7 @@
kTypedDataFloat32ArrayViewCid == kTypedDataInt8ArrayViewCid + 9 &&
kTypedDataFloat64ArrayViewCid == kTypedDataInt8ArrayViewCid + 10 &&
kTypedDataFloat32x4ArrayViewCid == kTypedDataInt8ArrayViewCid + 11 &&
- kTypedDataUint32x4ArrayViewCid == kTypedDataInt8ArrayViewCid + 12 &&
+ kTypedDataInt32x4ArrayViewCid == kTypedDataInt8ArrayViewCid + 12 &&
kByteDataViewCid == kTypedDataInt8ArrayViewCid + 13 &&
kExternalTypedDataInt8ArrayCid == kTypedDataInt8ArrayViewCid + 14);
return (index >= kTypedDataInt8ArrayViewCid &&
@@ -1702,11 +1702,11 @@
kExternalTypedDataInt8ArrayCid + 10) &&
(kExternalTypedDataFloat32x4ArrayCid ==
kExternalTypedDataInt8ArrayCid + 11) &&
- (kExternalTypedDataUint32x4ArrayCid ==
+ (kExternalTypedDataInt32x4ArrayCid ==
kExternalTypedDataInt8ArrayCid + 12) &&
(kNullCid == kExternalTypedDataInt8ArrayCid + 13));
return (index >= kExternalTypedDataInt8ArrayCid &&
- index <= kExternalTypedDataUint32x4ArrayCid);
+ index <= kExternalTypedDataInt32x4ArrayCid);
}
diff --git a/runtime/vm/raw_object_snapshot.cc b/runtime/vm/raw_object_snapshot.cc
index 27ad524..db525ec 100644
--- a/runtime/vm/raw_object_snapshot.cc
+++ b/runtime/vm/raw_object_snapshot.cc
@@ -2227,7 +2227,7 @@
}
-RawUint32x4* Uint32x4::ReadFrom(SnapshotReader* reader,
+RawInt32x4* Int32x4::ReadFrom(SnapshotReader* reader,
intptr_t object_id,
intptr_t tags,
Snapshot::Kind kind) {
@@ -2239,12 +2239,12 @@
uint32_t value3 = reader->Read<uint32_t>();
// Create a Float32x4 object.
- Uint32x4& simd = Uint32x4::ZoneHandle(reader->isolate(), Uint32x4::null());
+ Int32x4& simd = Int32x4::ZoneHandle(reader->isolate(), Int32x4::null());
if (kind == Snapshot::kFull) {
- simd = reader->NewUint32x4(value0, value1, value2, value3);
+ simd = reader->NewInt32x4(value0, value1, value2, value3);
} else {
- simd = Uint32x4::New(value0, value1, value2, value3, HEAP_SPACE(kind));
+ simd = Int32x4::New(value0, value1, value2, value3, HEAP_SPACE(kind));
}
reader->AddBackRef(object_id, &simd, kIsDeserialized);
// Set the object tags.
@@ -2253,7 +2253,7 @@
}
-void RawUint32x4::WriteTo(SnapshotWriter* writer,
+void RawInt32x4::WriteTo(SnapshotWriter* writer,
intptr_t object_id,
Snapshot::Kind kind) {
ASSERT(writer != NULL);
@@ -2262,7 +2262,7 @@
writer->WriteInlinedObjectHeader(object_id);
// Write out the class and tags information.
- writer->WriteIndexedObject(kUint32x4Cid);
+ writer->WriteIndexedObject(kInt32x4Cid);
writer->WriteIntptrValue(writer->GetObjectTags(this));
// Write out the mask values.
diff --git a/runtime/vm/scopes.cc b/runtime/vm/scopes.cc
index cac6212..baa8f96 100644
--- a/runtime/vm/scopes.cc
+++ b/runtime/vm/scopes.cc
@@ -30,7 +30,8 @@
begin_token_pos_(0),
end_token_pos_(0),
variables_(),
- labels_() {
+ labels_(),
+ referenced_() {
// Hook this node into the children of the parent, unless the parent has a
// different function_level, since the local scope of a nested function can
// be discarded after it has been parsed.
@@ -82,6 +83,48 @@
}
+NameReference* LocalScope::FindReference(const String& name) const {
+ intptr_t num_references = referenced_.length();
+ for (intptr_t i = 0; i < num_references; i++) {
+ if (name.Equals(referenced_[i]->name())) {
+ return referenced_[i];
+ }
+ }
+ return NULL;
+}
+
+
+void LocalScope::AddReferencedName(intptr_t token_pos,
+ const String& name) {
+ if (LocalLookupVariable(name) != NULL) {
+ return;
+ }
+ NameReference* ref = FindReference(name);
+ if (ref != NULL) {
+ ref->set_token_pos(token_pos);
+ return;
+ }
+ ref = new NameReference(token_pos, name);
+ referenced_.Add(ref);
+ // Add name reference in innermost enclosing scopes that do not
+ // define a local variable with this name.
+ LocalScope* scope = this->parent();
+ while (scope != NULL && (scope->LocalLookupVariable(name) == NULL)) {
+ scope->referenced_.Add(ref);
+ scope = scope->parent();
+ }
+}
+
+
+intptr_t LocalScope::PreviousReferencePos(const String& name) const {
+ NameReference* ref = FindReference(name);
+ if (ref != NULL) {
+ return ref->token_pos();
+ }
+ return -1;
+}
+
+
void LocalScope::AllocateContextVariable(LocalVariable* variable,
LocalScope** context_owner) {
ASSERT(variable->is_captured());
diff --git a/runtime/vm/scopes.h b/runtime/vm/scopes.h
index a8b8d70..9227dea 100644
--- a/runtime/vm/scopes.h
+++ b/runtime/vm/scopes.h
@@ -117,6 +117,21 @@
};
+class NameReference : public ZoneAllocated {
+ public:
+ NameReference(intptr_t token_pos, const String& name)
+ : token_pos_(token_pos),
+ name_(name) {
+ }
+ const String& name() const { return name_; }
+ intptr_t token_pos() const { return token_pos_; }
+ void set_token_pos(intptr_t value) { token_pos_ = value; }
+ private:
+ intptr_t token_pos_;
+ const String& name_;
+};
+
+
class SourceLabel : public ZoneAllocated {
public:
enum Kind {
@@ -306,6 +321,12 @@
// this local scope.
int NumCapturedVariables() const;
+ // Add a reference to the given name into this scope and the enclosing
+ // scopes that do not have a local variable declaration for this name
+ // already.
+ void AddReferencedName(intptr_t token_pos, const String& name);
+ intptr_t PreviousReferencePos(const String& name) const;
+
// Allocate both captured and non-captured variables declared in this scope
// and in its children scopes of the same function level. Allocating means
// assigning a frame slot index or a context slot index.
@@ -354,6 +375,8 @@
void CollectLocalVariables(GrowableArray<VarDesc>* vars, int16_t* scope_id);
+ NameReference* FindReference(const String& name) const;
+
static const int kUnitializedContextLevel = INT_MIN;
LocalScope* parent_;
LocalScope* child_;
@@ -367,6 +390,10 @@
GrowableArray<LocalVariable*> variables_;
GrowableArray<SourceLabel*> labels_;
+ // List of names referenced in this scope and its children that
+ // are not resolved to local variables.
+ GrowableArray<NameReference*> referenced_;
+
DISALLOW_COPY_AND_ASSIGN(LocalScope);
};
diff --git a/runtime/vm/snapshot.cc b/runtime/vm/snapshot.cc
index 5584104..c05a8fa 100644
--- a/runtime/vm/snapshot.cc
+++ b/runtime/vm/snapshot.cc
@@ -32,7 +32,7 @@
static bool IsObjectStoreClassId(intptr_t class_id) {
// Check if this is a class which is stored in the object store.
return (class_id == kObjectCid ||
- (class_id >= kInstanceCid && class_id <= kUint32x4Cid) ||
+ (class_id >= kInstanceCid && class_id <= kInt32x4Cid) ||
class_id == kArrayCid ||
class_id == kImmutableArrayCid ||
RawObject::IsStringClassId(class_id) ||
@@ -622,13 +622,13 @@
}
-RawUint32x4* SnapshotReader::NewUint32x4(uint32_t v0, uint32_t v1, uint32_t v2,
+RawInt32x4* SnapshotReader::NewInt32x4(uint32_t v0, uint32_t v1, uint32_t v2,
uint32_t v3) {
ASSERT(kind_ == Snapshot::kFull);
ASSERT(isolate()->no_gc_scope_depth() != 0);
- cls_ = object_store()->uint32x4_class();
- RawUint32x4* obj = reinterpret_cast<RawUint32x4*>(
- AllocateUninitialized(cls_, Uint32x4::InstanceSize()));
+ cls_ = object_store()->int32x4_class();
+ RawInt32x4* obj = reinterpret_cast<RawInt32x4*>(
+ AllocateUninitialized(cls_, Int32x4::InstanceSize()));
obj->ptr()->value_[0] = v0;
obj->ptr()->value_[1] = v1;
obj->ptr()->value_[2] = v2;
@@ -790,30 +790,39 @@
ASSERT(!cls_.IsNull());
instance_size = cls_.instance_size();
}
- intptr_t offset = Object::InstanceSize();
+ intptr_t next_field_offset = cls_.next_field_offset();
+ intptr_t type_argument_field_offset = cls_.type_arguments_field_offset();
+ ASSERT(next_field_offset > 0);
+ // Instance::NextFieldOffset() returns the offset of the first field in
+ // a Dart object.
+ intptr_t offset = Instance::NextFieldOffset();
intptr_t result_cid = result->GetClassId();
- while (offset < instance_size) {
+ while (offset < next_field_offset) {
obj_ = ReadObjectRef();
result->SetFieldAtOffset(offset, obj_);
- if (kind_ == Snapshot::kMessage) {
+ if ((offset != type_argument_field_offset) &&
+ (kind_ == Snapshot::kMessage)) {
// TODO(fschneider): Consider hoisting these lookups out of the loop.
// This would involve creating a handle, since cls_ can't be reused
// across the call to ReadObjectRef.
cls_ = isolate()->class_table()->At(result_cid);
array_ = cls_.OffsetToFieldMap();
field_ ^= array_.At(offset >> kWordSizeLog2);
- // Entries can be null because offset can be outside of instance fields
- // due to rounded allocation size.
- if (!field_.IsNull()) {
- ASSERT(field_.Offset() == offset);
- field_.UpdateGuardedCidAndLength(obj_);
- }
+ ASSERT(!field_.IsNull());
+ ASSERT(field_.Offset() == offset);
+ field_.UpdateGuardedCidAndLength(obj_);
}
// TODO(fschneider): Verify the guarded cid and length for other kinds of
// snapshot (kFull, kScript) with asserts.
offset += kWordSize;
}
if (kind_ == Snapshot::kFull) {
+ // We create an uninitialized object in the case of full snapshots, so
+ // we need to initialize any remaining padding area with the Null object.
+ while (offset < instance_size) {
+ result->SetFieldAtOffset(offset, Object::null_object());
+ offset += kWordSize;
+ }
result->SetCreatedFromSnapshot();
} else if (result->IsCanonical()) {
*result = result->CheckAndCanonicalize(NULL);
@@ -1387,9 +1396,9 @@
CheckIfSerializable(cls);
// Object is regular dart instance.
- intptr_t instance_size =
- cls->ptr()->instance_size_in_words_ << kWordSizeLog2;
- ASSERT(instance_size != 0);
+ intptr_t next_field_offset =
+ cls->ptr()->next_field_offset_in_words_ << kWordSizeLog2;
+ ASSERT(next_field_offset > 0);
// Write out the serialization header value for this object.
WriteInlinedObjectHeader(object_id);
@@ -1404,8 +1413,10 @@
WriteObjectImpl(cls);
// Write out all the fields for the object.
- intptr_t offset = Object::InstanceSize();
- while (offset < instance_size) {
+ // Instance::NextFieldOffset() returns the offset of the first field in
+ // a Dart object.
+ intptr_t offset = Instance::NextFieldOffset();
+ while (offset < next_field_offset) {
WriteObjectRef(*reinterpret_cast<RawObject**>(
reinterpret_cast<uword>(raw->ptr()) + offset));
offset += kWordSize;
diff --git a/runtime/vm/snapshot.h b/runtime/vm/snapshot.h
index ff65e52..4288f1d 100644
--- a/runtime/vm/snapshot.h
+++ b/runtime/vm/snapshot.h
@@ -45,7 +45,7 @@
class RawFunction;
class RawGrowableObjectArray;
class RawFloat32x4;
-class RawUint32x4;
+class RawInt32x4;
class RawImmutableArray;
class RawLanguageError;
class RawLibrary;
@@ -271,7 +271,7 @@
RawLiteralToken* NewLiteralToken();
RawGrowableObjectArray* NewGrowableObjectArray();
RawFloat32x4* NewFloat32x4(float v0, float v1, float v2, float v3);
- RawUint32x4* NewUint32x4(uint32_t v0, uint32_t v1, uint32_t v2, uint32_t v3);
+ RawInt32x4* NewInt32x4(uint32_t v0, uint32_t v1, uint32_t v2, uint32_t v3);
RawApiError* NewApiError();
RawLanguageError* NewLanguageError();
RawObject* NewInteger(int64_t value);
diff --git a/runtime/vm/stub_code_arm.cc b/runtime/vm/stub_code_arm.cc
index 768ca07..46dfb04 100644
--- a/runtime/vm/stub_code_arm.cc
+++ b/runtime/vm/stub_code_arm.cc
@@ -1165,13 +1165,13 @@
if (instance_size < (kInlineInstanceSize * kWordSize)) {
// Check if the object contains any non-header fields.
// Small objects are initialized using a consecutive set of writes.
- for (intptr_t current_offset = sizeof(RawObject);
+ for (intptr_t current_offset = Instance::NextFieldOffset();
current_offset < instance_size;
current_offset += kWordSize) {
__ StoreToOffset(kWord, R0, R2, current_offset);
}
} else {
- __ add(R4, R2, ShifterOperand(sizeof(RawObject)));
+ __ add(R4, R2, ShifterOperand(Instance::NextFieldOffset()));
// Loop until the whole object is initialized.
// R0: raw null.
// R2: new object.
diff --git a/runtime/vm/stub_code_ia32.cc b/runtime/vm/stub_code_ia32.cc
index 5e83dd6..a0cd794 100644
--- a/runtime/vm/stub_code_ia32.cc
+++ b/runtime/vm/stub_code_ia32.cc
@@ -1195,13 +1195,13 @@
if (instance_size < (kInlineInstanceSize * kWordSize)) {
// Check if the object contains any non-header fields.
// Small objects are initialized using a consecutive set of writes.
- for (intptr_t current_offset = sizeof(RawObject);
+ for (intptr_t current_offset = Instance::NextFieldOffset();
current_offset < instance_size;
current_offset += kWordSize) {
__ movl(Address(EAX, current_offset), raw_null);
}
} else {
- __ leal(ECX, Address(EAX, sizeof(RawObject)));
+ __ leal(ECX, Address(EAX, Instance::NextFieldOffset()));
// Loop until the whole object is initialized.
// EAX: new object.
// EBX: next object start.
diff --git a/runtime/vm/stub_code_mips.cc b/runtime/vm/stub_code_mips.cc
index 4ddc9b0..f4eb818 100644
--- a/runtime/vm/stub_code_mips.cc
+++ b/runtime/vm/stub_code_mips.cc
@@ -1344,13 +1344,13 @@
if (instance_size < (kInlineInstanceSize * kWordSize)) {
// Check if the object contains any non-header fields.
// Small objects are initialized using a consecutive set of writes.
- for (intptr_t current_offset = sizeof(RawObject);
+ for (intptr_t current_offset = Instance::NextFieldOffset();
current_offset < instance_size;
current_offset += kWordSize) {
__ sw(T7, Address(T2, current_offset));
}
} else {
- __ addiu(T4, T2, Immediate(sizeof(RawObject)));
+ __ addiu(T4, T2, Immediate(Instance::NextFieldOffset()));
// Loop until the whole object is initialized.
// T2: new object.
// T3: next object start.
diff --git a/runtime/vm/stub_code_x64.cc b/runtime/vm/stub_code_x64.cc
index 31abeec..49eec4b 100644
--- a/runtime/vm/stub_code_x64.cc
+++ b/runtime/vm/stub_code_x64.cc
@@ -1187,13 +1187,13 @@
if (instance_size < (kInlineInstanceSize * kWordSize)) {
// Check if the object contains any non-header fields.
// Small objects are initialized using a consecutive set of writes.
- for (intptr_t current_offset = sizeof(RawObject);
+ for (intptr_t current_offset = Instance::NextFieldOffset();
current_offset < instance_size;
current_offset += kWordSize) {
__ movq(Address(RAX, current_offset), R12);
}
} else {
- __ leaq(RCX, Address(RAX, sizeof(RawObject)));
+ __ leaq(RCX, Address(RAX, Instance::NextFieldOffset()));
// Loop until the whole object is initialized.
// RAX: new object.
// RBX: next object start.
diff --git a/runtime/vm/symbols.h b/runtime/vm/symbols.h
index a9a3095..fbafada 100644
--- a/runtime/vm/symbols.h
+++ b/runtime/vm/symbols.h
@@ -133,9 +133,9 @@
V(Int, "int") \
V(Double, "double") \
V(_Float32x4, "_Float32x4") \
- V(_Uint32x4, "_Uint32x4") \
+ V(_Int32x4, "_Int32x4") \
V(Float32x4, "Float32x4") \
- V(Uint32x4, "Uint32x4") \
+ V(Int32x4, "Int32x4") \
V(Int8List, "Int8List") \
V(Int8ListFactory, "Int8List.") \
V(Uint8List, "Uint8List") \
@@ -156,8 +156,8 @@
V(Uint64ListFactory, "Uint64List.") \
V(Float32x4List, "Float32x4List") \
V(Float32x4ListFactory, "Float32x4List.") \
- V(Uint32x4List, "Uint32x4List") \
- V(Uint32x4ListFactory, "Uint32x4List.") \
+ V(Int32x4List, "Int32x4List") \
+ V(Int32x4ListFactory, "Int32x4List.") \
V(Float32List, "Float32List") \
V(Float32ListFactory, "Float32List.") \
V(Float64List, "Float64List") \
@@ -182,8 +182,8 @@
V(_Uint64ArrayFactory, "_Uint64Array.") \
V(_Float32x4Array, "_Float32x4Array") \
V(_Float32x4ArrayFactory, "_Float32x4Array.") \
- V(_Uint32x4Array, "_Uint32x4Array") \
- V(_Uint32x4ArrayFactory, "_Uint32x4Array.") \
+ V(_Int32x4Array, "_Int32x4Array") \
+ V(_Int32x4ArrayFactory, "_Int32x4Array.") \
V(_Float32Array, "_Float32Array") \
V(_Float32ArrayFactory, "_Float32Array.") \
V(_Float64Array, "_Float64Array") \
@@ -200,7 +200,7 @@
V(_Float32ArrayView, "_Float32ArrayView") \
V(_Float64ArrayView, "_Float64ArrayView") \
V(_Float32x4ArrayView, "_Float32x4ArrayView") \
- V(_Uint32x4ArrayView, "_Uint32x4ArrayView") \
+ V(_Int32x4ArrayView, "_Int32x4ArrayView") \
V(_ExternalInt8Array, "_ExternalInt8Array") \
V(_ExternalUint8Array, "_ExternalUint8Array") \
V(_ExternalUint8ClampedArray, "_ExternalUint8ClampedArray") \
@@ -211,7 +211,7 @@
V(_ExternalInt64Array, "_ExternalInt64Array") \
V(_ExternalUint64Array, "_ExternalUint64Array") \
V(_ExternalFloat32x4Array, "_ExternalFloat32x4Array") \
- V(_ExternalUint32x4Array, "_ExternalUint32x4Array") \
+ V(_ExternalInt32x4Array, "_ExternalInt32x4Array") \
V(_ExternalFloat32Array, "_ExternalFloat32Array") \
V(_ExternalFloat64Array, "_ExternalFloat64Array") \
V(ByteData, "ByteData") \
diff --git a/sdk/lib/_internal/compiler/implementation/compiler.dart b/sdk/lib/_internal/compiler/implementation/compiler.dart
index 067ee88..e0de9ff 100644
--- a/sdk/lib/_internal/compiler/implementation/compiler.dart
+++ b/sdk/lib/_internal/compiler/implementation/compiler.dart
@@ -416,7 +416,9 @@
LibraryElement jsHelperLibrary;
LibraryElement interceptorsLibrary;
LibraryElement foreignLibrary;
+
LibraryElement mainApp;
+ FunctionElement mainFunction;
/// Initialized when dart:mirrors is loaded.
LibraryElement mirrorsLibrary;
@@ -1025,7 +1027,7 @@
void compileLoadedLibraries() {
Element main = null;
if (mainApp != null) {
- main = mainApp.find(MAIN);
+ main = mainApp.findExported(MAIN);
if (main == null) {
if (!analyzeOnly) {
// Allow analyze only of libraries with no main.
@@ -1042,14 +1044,19 @@
"Use '--analyze-all' to analyze all code in the library."});
}
} else {
- if (!main.isFunction()) {
+ if (main.isErroneous()) {
+ reportFatalError(
+ main,
+ MessageKind.GENERIC,
+ {'text': "Error: Cannot determine which '$MAIN' to use."});
+ } else if (!main.isFunction()) {
reportFatalError(
main,
MessageKind.GENERIC,
{'text': "Error: '$MAIN' is not a function."});
}
- FunctionElement mainMethod = main;
- FunctionSignature parameters = mainMethod.computeSignature(this);
+ mainFunction = main;
+ FunctionSignature parameters = mainFunction.computeSignature(this);
if (parameters.parameterCount > 2) {
int index = 0;
parameters.forEachParameter((Element parameter) {
@@ -1110,7 +1117,7 @@
if (hasIsolateSupport()) {
enqueuer.codegen.addToWorkList(
isolateHelperLibrary.find(Compiler.START_ROOT_ISOLATE));
- enqueuer.codegen.registerGetOfStaticFunction(mainApp.find(MAIN));
+ enqueuer.codegen.registerGetOfStaticFunction(main);
}
if (enabledNoSuchMethod) {
backend.enableNoSuchMethod(enqueuer.codegen);
diff --git a/sdk/lib/_internal/compiler/implementation/dart_backend/placeholder_collector.dart b/sdk/lib/_internal/compiler/implementation/dart_backend/placeholder_collector.dart
index 1deab48..be1ffda 100644
--- a/sdk/lib/_internal/compiler/implementation/dart_backend/placeholder_collector.dart
+++ b/sdk/lib/_internal/compiler/implementation/dart_backend/placeholder_collector.dart
@@ -163,7 +163,7 @@
TreeElements treeElements;
LibraryElement get coreLibrary => compiler.coreLibrary;
- FunctionElement get entryFunction => compiler.mainApp.find(Compiler.MAIN);
+ FunctionElement get entryFunction => compiler.mainFunction;
DartBackend get backend => compiler.backend;
get currentFunctionScope => functionScopes.putIfAbsent(
diff --git a/sdk/lib/_internal/compiler/implementation/elements/elements.dart b/sdk/lib/_internal/compiler/implementation/elements/elements.dart
index 8af9dfc..f994bf4 100644
--- a/sdk/lib/_internal/compiler/implementation/elements/elements.dart
+++ b/sdk/lib/_internal/compiler/implementation/elements/elements.dart
@@ -694,6 +694,7 @@
Element find(String elementName);
Element findLocal(String elementName);
+ Element findExported(String elementName);
void forEachExport(f(Element element));
bool hasLibraryName();
diff --git a/sdk/lib/_internal/compiler/implementation/elements/modelx.dart b/sdk/lib/_internal/compiler/implementation/elements/modelx.dart
index 56a35e9..1bb6491 100644
--- a/sdk/lib/_internal/compiler/implementation/elements/modelx.dart
+++ b/sdk/lib/_internal/compiler/implementation/elements/modelx.dart
@@ -902,6 +902,14 @@
return result;
}
+ Element findExported(String elementName) {
+ for (Link link = exports; !link.isEmpty; link = link.tail) {
+ Element element = link.head;
+ if (element.name == elementName) return element;
+ }
+ return null;
+ }
+
void forEachExport(f(Element element)) {
exports.forEach((Element e) => f(e));
}
diff --git a/sdk/lib/_internal/compiler/implementation/js_backend/backend.dart b/sdk/lib/_internal/compiler/implementation/js_backend/backend.dart
index cdceeec..2fb385f 100644
--- a/sdk/lib/_internal/compiler/implementation/js_backend/backend.dart
+++ b/sdk/lib/_internal/compiler/implementation/js_backend/backend.dart
@@ -1109,7 +1109,6 @@
analyzeTypeArgument(type, argument);
});
}
- // TODO(ngeoffray): Also handle T a (in checked mode).
}
void registerClassUsingVariableExpression(ClassElement cls) {
diff --git a/sdk/lib/_internal/compiler/implementation/js_emitter/code_emitter_task.dart b/sdk/lib/_internal/compiler/implementation/js_emitter/code_emitter_task.dart
index 6205fed..dd2d293 100644
--- a/sdk/lib/_internal/compiler/implementation/js_emitter/code_emitter_task.dart
+++ b/sdk/lib/_internal/compiler/implementation/js_emitter/code_emitter_task.dart
@@ -959,7 +959,7 @@
emitMain(CodeBuffer buffer) {
if (compiler.isMockCompilation) return;
- Element main = compiler.mainApp.find(Compiler.MAIN);
+ Element main = compiler.mainFunction;
String mainCall = null;
if (compiler.hasIsolateSupport()) {
Element isolateMain =
diff --git a/sdk/lib/_internal/compiler/implementation/ssa/builder.dart b/sdk/lib/_internal/compiler/implementation/ssa/builder.dart
index 2519c4f..9fc4daf 100644
--- a/sdk/lib/_internal/compiler/implementation/ssa/builder.dart
+++ b/sdk/lib/_internal/compiler/implementation/ssa/builder.dart
@@ -2024,6 +2024,8 @@
push(attachPosition(instruction, node));
}
+ HInstruction peek() => stack.last;
+
HInstruction pop() {
return stack.removeLast();
}
@@ -4519,6 +4521,17 @@
}
}
+ void setRtiIfNeeded(HInstruction object, Node node) {
+ InterfaceType type = elements.getType(node);
+ if (!backend.classNeedsRti(type.element) || type.treatAsRaw) return;
+ List<HInstruction> arguments = <HInstruction>[];
+ for (DartType argument in type.typeArguments) {
+ arguments.add(analyzeTypeArgument(argument));
+ }
+ callSetRuntimeTypeInfo(type.element, arguments, object);
+ compiler.enqueuer.codegen.registerInstantiatedType(type, elements);
+ }
+
visitLiteralList(LiteralList node) {
HInstruction instruction;
@@ -4534,6 +4547,7 @@
}
instruction = buildLiteralList(inputs);
add(instruction);
+ setRtiIfNeeded(instruction, node);
}
TypeMask type =
@@ -4736,6 +4750,7 @@
add(keyValuePairs);
TypeMask mapType = new TypeMask.nonNullSubtype(backend.mapLiteralClass);
pushInvokeStatic(node, backend.getMapMaker(), [keyValuePairs], mapType);
+ setRtiIfNeeded(peek(), node);
}
visitLiteralMapEntry(LiteralMapEntry node) {
diff --git a/sdk/lib/_internal/compiler/implementation/ssa/optimize.dart b/sdk/lib/_internal/compiler/implementation/ssa/optimize.dart
index 6b83cda..c9878c9 100644
--- a/sdk/lib/_internal/compiler/implementation/ssa/optimize.dart
+++ b/sdk/lib/_internal/compiler/implementation/ssa/optimize.dart
@@ -1508,14 +1508,14 @@
HInstruction input = instruction.expression;
for (HIf ifUser in ifUsers) {
changeUsesDominatedBy(ifUser.thenBlock, input, convertedType);
- // TODO(ngeoffray): Also change uses for the else block on a HType
- // that knows it is not of a specific Type.
+ // TODO(ngeoffray): Also change uses for the else block on a type
+ // that knows it is not of a specific type.
}
for (HIf ifUser in notIfUsers) {
changeUsesDominatedBy(ifUser.elseBlock, input, convertedType);
- // TODO(ngeoffray): Also change uses for the then block on a HType
- // that knows it is not of a specific Type.
+ // TODO(ngeoffray): Also change uses for the then block on a type
+ // that knows it is not of a specific type.
}
}
}
diff --git a/sdk/lib/_internal/lib/async_patch.dart b/sdk/lib/_internal/lib/async_patch.dart
index 07b1cd2..8d6bb26 100644
--- a/sdk/lib/_internal/lib/async_patch.dart
+++ b/sdk/lib/_internal/lib/async_patch.dart
@@ -35,7 +35,7 @@
}
// TODO(ahe): This should not only apply to this isolate.
-final _loadedLibraries = <String, Completer<bool>>{};
+final Map<String, Future<bool>> _loadedLibraries = <String, Future<bool>>{};
Future<bool> _load(String libraryName, String uri) {
// TODO(ahe): Validate libraryName. Kasper points out that you want
diff --git a/sdk/lib/_internal/lib/isolate_helper.dart b/sdk/lib/_internal/lib/isolate_helper.dart
index bf3caa2..d13871b 100644
--- a/sdk/lib/_internal/lib/isolate_helper.dart
+++ b/sdk/lib/_internal/lib/isolate_helper.dart
@@ -729,7 +729,7 @@
const _NativeJsSendPort(this._receivePort, int isolateId) : super(isolateId);
- void send(var message, [SendPort replyTo]) {
+ void send(var message) {
_waitForPendingPorts(message, () {
// Check that the isolate still runs and the port is still open
final isolate = _globalState.isolates[_isolateId];
@@ -775,7 +775,7 @@
const _WorkerSendPort(this._workerId, int isolateId, this._receivePortId)
: super(isolateId);
- void send(var message, [SendPort replyTo]) {
+ void send(var message) {
_waitForPendingPorts(message, () {
final workerMessage = _serializeMessage({
'command': 'message',
@@ -846,9 +846,9 @@
_idCount++;
}
- void send(var message, [SendPort replyTo]) {
+ void send(var message) {
if (_port != null) {
- _port.send(message, replyTo);
+ _port.send(message);
} else {
pending.add(message);
}
diff --git a/sdk/lib/html/dart2js/html_dart2js.dart b/sdk/lib/html/dart2js/html_dart2js.dart
index c2a2227..0987614 100644
--- a/sdk/lib/html/dart2js/html_dart2js.dart
+++ b/sdk/lib/html/dart2js/html_dart2js.dart
@@ -9664,6 +9664,11 @@
@DomName('Element.namespaceUri')
String get namespaceUri => _namespaceUri;
+ /**
+ * The string representation of this element.
+ *
+ * This is equivalent to reading the [localName] property.
+ */
String toString() => localName;
/**
@@ -11088,10 +11093,26 @@
@DocsEditable()
void _removeAttributeNS(String namespaceURI, String localName) native;
+ /**
+ * Scrolls the element by a number of lines.
+ *
+ * ## Other resources
+ *
+ * * [scrollByLines]
+ * (http://docs.webplatform.org/wiki/dom/methods/scrollByLines) from WebPlatform.org.
+ */
@DomName('Element.scrollByLines')
@DocsEditable()
void scrollByLines(int lines) native;
+ /**
+ * Scrolls the element by a number of pages.
+ *
+ * ## Other resources
+ *
+ * * [scrollByPages]
+ * (http://docs.webplatform.org/wiki/dom/methods/scrollByPages) from WebPlatform.org.
+ */
@DomName('Element.scrollByPages')
@DocsEditable()
void scrollByPages(int pages) native;
@@ -11117,6 +11138,17 @@
void setAttributeNS(String namespaceURI, String qualifiedName, String value) native;
@JSName('webkitGetRegionFlowRanges')
+ /**
+ * Returns an array of ranges of fragments in the flow.
+ *
+ * ## Other resources
+ *
+ * * [CSS regions and exclusions tutorial]
+ * (http://www.html5rocks.com/en/tutorials/regions/adobe/) from HTML5Rocks.
+ * * [Regions](http://html.adobe.com/webplatform/layout/regions/) from Adobe.
+ * * [CSS regions specification]
+ * (http://www.w3.org/TR/css3-regions/) from W3C.
+ */
@DomName('Element.webkitGetRegionFlowRanges')
@DocsEditable()
@SupportedBrowser(SupportedBrowser.CHROME)
@@ -11128,6 +11160,17 @@
List<Range> getRegionFlowRanges() native;
@JSName('webkitRequestFullscreen')
+ /**
+ * Displays this element fullscreen.
+ *
+ * ## Other resources
+ *
+ * * [Using the full-screen API]
+ * (http://docs.webplatform.org/wiki/tutorials/using_the_full-screen_api)
+ * tutorial from WebPlatform.org.
+ * * [Fullscreen specification]
+ * (http://www.w3.org/TR/fullscreen/) from W3C.
+ */
@DomName('Element.webkitRequestFullscreen')
@DocsEditable()
@SupportedBrowser(SupportedBrowser.CHROME)
@@ -11137,6 +11180,18 @@
void requestFullscreen() native;
@JSName('webkitRequestPointerLock')
+ /**
+ * Locks the mouse pointer to this element.
+ *
+ * ## Other resources
+ *
+ * * [Pointer lock and first person shooter controls]
+ * (http://www.html5rocks.com/en/tutorials/pointerlock/intro/) tutorial from
+ * HTML5Rocks.
+ *
+ * * [Pointer lock specification]
+ * (http://www.w3.org/TR/pointerlock/) from W3C.
+ */
@DomName('Element.webkitRequestPointerLock')
@DocsEditable()
@SupportedBrowser(SupportedBrowser.CHROME)
diff --git a/sdk/lib/html/dartium/html_dartium.dart b/sdk/lib/html/dartium/html_dartium.dart
index 85ca975..bb278e1a 100644
--- a/sdk/lib/html/dartium/html_dartium.dart
+++ b/sdk/lib/html/dartium/html_dartium.dart
@@ -10054,6 +10054,11 @@
@DomName('Element.namespaceUri')
String get namespaceUri => _namespaceUri;
+ /**
+ * The string representation of this element.
+ *
+ * This is equivalent to reading the [localName] property.
+ */
String toString() => localName;
/**
@@ -11234,10 +11239,26 @@
@DocsEditable()
void _removeAttributeNS(String namespaceURI, String localName) native "Element_removeAttributeNS_Callback";
+ /**
+ * Scrolls the element by a number of lines.
+ *
+ * ## Other resources
+ *
+ * * [scrollByLines]
+ * (http://docs.webplatform.org/wiki/dom/methods/scrollByLines) from WebPlatform.org.
+ */
@DomName('Element.scrollByLines')
@DocsEditable()
void scrollByLines(int lines) native "Element_scrollByLines_Callback";
+ /**
+ * Scrolls the element by a number of pages.
+ *
+ * ## Other resources
+ *
+ * * [scrollByPages]
+ * (http://docs.webplatform.org/wiki/dom/methods/scrollByPages) from WebPlatform.org.
+ */
@DomName('Element.scrollByPages')
@DocsEditable()
void scrollByPages(int pages) native "Element_scrollByPages_Callback";
@@ -11276,6 +11297,17 @@
@DocsEditable()
void setAttributeNS(String namespaceURI, String qualifiedName, String value) native "Element_setAttributeNS_Callback";
+ /**
+ * Returns an array of ranges of fragments in the flow.
+ *
+ * ## Other resources
+ *
+ * * [CSS regions and exclusions tutorial]
+ * (http://www.html5rocks.com/en/tutorials/regions/adobe/) from HTML5Rocks.
+ * * [Regions](http://html.adobe.com/webplatform/layout/regions/) from Adobe.
+ * * [CSS regions specification]
+ * (http://www.w3.org/TR/css3-regions/) from W3C.
+ */
@DomName('Element.webkitGetRegionFlowRanges')
@DocsEditable()
@SupportedBrowser(SupportedBrowser.CHROME)
@@ -11290,6 +11322,17 @@
// http://dev.w3.org/2006/webapi/selectors-api2/#matches
bool matches(String selectors) native "Element_webkitMatchesSelector_Callback";
+ /**
+ * Displays this element fullscreen.
+ *
+ * ## Other resources
+ *
+ * * [Using the full-screen API]
+ * (http://docs.webplatform.org/wiki/tutorials/using_the_full-screen_api)
+ * tutorial from WebPlatform.org.
+ * * [Fullscreen specification]
+ * (http://www.w3.org/TR/fullscreen/) from W3C.
+ */
@DomName('Element.webkitRequestFullscreen')
@DocsEditable()
@SupportedBrowser(SupportedBrowser.CHROME)
@@ -11298,6 +11341,18 @@
// https://dvcs.w3.org/hg/fullscreen/raw-file/tip/Overview.html#dom-element-requestfullscreen
void requestFullscreen() native "Element_webkitRequestFullscreen_Callback";
+ /**
+ * Locks the mouse pointer to this element.
+ *
+ * ## Other resources
+ *
+ * * [Pointer lock and first person shooter controls]
+ * (http://www.html5rocks.com/en/tutorials/pointerlock/intro/) tutorial from
+ * HTML5Rocks.
+ *
+ * * [Pointer lock specification]
+ * (http://www.w3.org/TR/pointerlock/) from W3C.
+ */
@DomName('Element.webkitRequestPointerLock')
@DocsEditable()
@SupportedBrowser(SupportedBrowser.CHROME)
diff --git a/sdk/lib/isolate/isolate.dart b/sdk/lib/isolate/isolate.dart
index f7d1aed..6440bc4 100644
--- a/sdk/lib/isolate/isolate.dart
+++ b/sdk/lib/isolate/isolate.dart
@@ -98,10 +98,8 @@
* is also possible to send object instances (which would be copied in the
* process). This is currently only supported by the dartvm. For now, the
* dart2js compiler only supports the restricted messages described above.
- *
- * The second argument [replyTo] is deprecated and its value is ignored.
*/
- void send(var message, [SendPort replyTo]);
+ void send(var message);
/**
* Tests whether [other] is a [SendPort] pointing to the same
diff --git a/sdk/lib/typed_data/dart2js/typed_data_dart2js.dart b/sdk/lib/typed_data/dart2js/typed_data_dart2js.dart
index e354001..2d0241b 100644
--- a/sdk/lib/typed_data/dart2js/typed_data_dart2js.dart
+++ b/sdk/lib/typed_data/dart2js/typed_data_dart2js.dart
@@ -795,9 +795,9 @@
}
-class Uint32x4List
- extends Object with ListMixin<Uint32x4>, FixedLengthListMixin<Uint32x4>
- implements List<Uint32x4>, TypedData {
+class Int32x4List
+ extends Object with ListMixin<Int32x4>, FixedLengthListMixin<Int32x4>
+ implements List<Int32x4>, TypedData {
final Uint32List _storage;
@@ -835,11 +835,11 @@
return end;
}
- Uint32x4List(int length) : _storage = new Uint32List(length*4);
+ Int32x4List(int length) : _storage = new Uint32List(length*4);
- Uint32x4List._externalStorage(Uint32List storage) : _storage = storage;
+ Int32x4List._externalStorage(Uint32List storage) : _storage = storage;
- Uint32x4List._slowFromList(List<Uint32x4> list)
+ Int32x4List._slowFromList(List<Int32x4> list)
: _storage = new Uint32List(list.length * 4) {
for (int i = 0; i < list.length; i++) {
var e = list[i];
@@ -850,17 +850,17 @@
}
}
- factory Uint32x4List.fromList(List<Uint32x4> list) {
- if (list is Uint32x4List) {
- Uint32x4List nativeList = list as Uint32x4List;
- return new Uint32x4List._externalStorage(
+ factory Int32x4List.fromList(List<Int32x4> list) {
+ if (list is Int32x4List) {
+ Int32x4List nativeList = list as Int32x4List;
+ return new Int32x4List._externalStorage(
new Uint32List.fromList(nativeList._storage));
} else {
- return new Uint32x4List._slowFromList(list);
+ return new Int32x4List._slowFromList(list);
}
}
- Uint32x4List.view(ByteBuffer buffer,
+ Int32x4List.view(ByteBuffer buffer,
[int byteOffset = 0, int length])
: _storage = new Uint32List.view(buffer, byteOffset, length);
@@ -868,16 +868,16 @@
int get length => _storage.length ~/ 4;
- Uint32x4 operator[](int index) {
+ Int32x4 operator[](int index) {
_checkIndex(index, length);
int _x = _storage[(index*4)+0];
int _y = _storage[(index*4)+1];
int _z = _storage[(index*4)+2];
int _w = _storage[(index*4)+3];
- return new Uint32x4(_x, _y, _z, _w);
+ return new Int32x4(_x, _y, _z, _w);
}
- void operator[]=(int index, Uint32x4 value) {
+ void operator[]=(int index, Int32x4 value) {
_checkIndex(index, length);
_storage[(index*4)+0] = value._storage[0];
_storage[(index*4)+1] = value._storage[1];
@@ -885,9 +885,9 @@
_storage[(index*4)+3] = value._storage[3];
}
- List<Uint32x4> sublist(int start, [int end]) {
+ List<Int32x4> sublist(int start, [int end]) {
end = _checkSublistArguments(start, end, length);
- return new Uint32x4List._externalStorage(_storage.sublist(start*4, end*4));
+ return new Int32x4List._externalStorage(_storage.sublist(start*4, end*4));
}
}
@@ -909,7 +909,7 @@
}
Float32x4.zero();
/// Returns a bit-wise copy of [x] as a Float32x4.
- Float32x4.fromUint32x4Bits(Uint32x4 x) {
+ Float32x4.fromInt32x4Bits(Int32x4 x) {
var view = new Float32List.view(x._storage.buffer);
_storage[0] = view[0];
_storage[1] = view[1];
@@ -963,72 +963,72 @@
}
/// Relational less than.
- Uint32x4 lessThan(Float32x4 other) {
+ Int32x4 lessThan(Float32x4 other) {
bool _cx = _storage[0] < other._storage[0];
bool _cy = _storage[1] < other._storage[1];
bool _cz = _storage[2] < other._storage[2];
bool _cw = _storage[3] < other._storage[3];
- return new Uint32x4(_cx == true ? 0xFFFFFFFF : 0x0,
+ return new Int32x4(_cx == true ? 0xFFFFFFFF : 0x0,
_cy == true ? 0xFFFFFFFF : 0x0,
_cz == true ? 0xFFFFFFFF : 0x0,
_cw == true ? 0xFFFFFFFF : 0x0);
}
/// Relational less than or equal.
- Uint32x4 lessThanOrEqual(Float32x4 other) {
+ Int32x4 lessThanOrEqual(Float32x4 other) {
bool _cx = _storage[0] <= other._storage[0];
bool _cy = _storage[1] <= other._storage[1];
bool _cz = _storage[2] <= other._storage[2];
bool _cw = _storage[3] <= other._storage[3];
- return new Uint32x4(_cx == true ? 0xFFFFFFFF : 0x0,
+ return new Int32x4(_cx == true ? 0xFFFFFFFF : 0x0,
_cy == true ? 0xFFFFFFFF : 0x0,
_cz == true ? 0xFFFFFFFF : 0x0,
_cw == true ? 0xFFFFFFFF : 0x0);
}
/// Relational greater than.
- Uint32x4 greaterThan(Float32x4 other) {
+ Int32x4 greaterThan(Float32x4 other) {
bool _cx = _storage[0] > other._storage[0];
bool _cy = _storage[1] > other._storage[1];
bool _cz = _storage[2] > other._storage[2];
bool _cw = _storage[3] > other._storage[3];
- return new Uint32x4(_cx == true ? 0xFFFFFFFF : 0x0,
+ return new Int32x4(_cx == true ? 0xFFFFFFFF : 0x0,
_cy == true ? 0xFFFFFFFF : 0x0,
_cz == true ? 0xFFFFFFFF : 0x0,
_cw == true ? 0xFFFFFFFF : 0x0);
}
/// Relational greater than or equal.
- Uint32x4 greaterThanOrEqual(Float32x4 other) {
+ Int32x4 greaterThanOrEqual(Float32x4 other) {
bool _cx = _storage[0] >= other._storage[0];
bool _cy = _storage[1] >= other._storage[1];
bool _cz = _storage[2] >= other._storage[2];
bool _cw = _storage[3] >= other._storage[3];
- return new Uint32x4(_cx == true ? 0xFFFFFFFF : 0x0,
+ return new Int32x4(_cx == true ? 0xFFFFFFFF : 0x0,
_cy == true ? 0xFFFFFFFF : 0x0,
_cz == true ? 0xFFFFFFFF : 0x0,
_cw == true ? 0xFFFFFFFF : 0x0);
}
/// Relational equal.
- Uint32x4 equal(Float32x4 other) {
+ Int32x4 equal(Float32x4 other) {
bool _cx = _storage[0] == other._storage[0];
bool _cy = _storage[1] == other._storage[1];
bool _cz = _storage[2] == other._storage[2];
bool _cw = _storage[3] == other._storage[3];
- return new Uint32x4(_cx == true ? 0xFFFFFFFF : 0x0,
+ return new Int32x4(_cx == true ? 0xFFFFFFFF : 0x0,
_cy == true ? 0xFFFFFFFF : 0x0,
_cz == true ? 0xFFFFFFFF : 0x0,
_cw == true ? 0xFFFFFFFF : 0x0);
}
/// Relational not-equal.
- Uint32x4 notEqual(Float32x4 other) {
+ Int32x4 notEqual(Float32x4 other) {
bool _cx = _storage[0] != other._storage[0];
bool _cy = _storage[1] != other._storage[1];
bool _cz = _storage[2] != other._storage[2];
bool _cw = _storage[3] != other._storage[3];
- return new Uint32x4(_cx == true ? 0xFFFFFFFF : 0x0,
+ return new Int32x4(_cx == true ? 0xFFFFFFFF : 0x0,
_cy == true ? 0xFFFFFFFF : 0x0,
_cz == true ? 0xFFFFFFFF : 0x0,
_cw == true ? 0xFFFFFFFF : 0x0);
@@ -1472,25 +1472,25 @@
}
-class Uint32x4 {
- final _storage = new Uint32List(4);
+class Int32x4 {
+ final _storage = new Int32List(4);
- Uint32x4(int x, int y, int z, int w) {
+ Int32x4(int x, int y, int z, int w) {
_storage[0] = x;
_storage[1] = y;
_storage[2] = z;
_storage[3] = w;
}
- Uint32x4.bool(bool x, bool y, bool z, bool w) {
+ Int32x4.bool(bool x, bool y, bool z, bool w) {
_storage[0] = x == true ? 0xFFFFFFFF : 0x0;
_storage[1] = y == true ? 0xFFFFFFFF : 0x0;
_storage[2] = z == true ? 0xFFFFFFFF : 0x0;
_storage[3] = w == true ? 0xFFFFFFFF : 0x0;
}
- /// Returns a bit-wise copy of [x] as a Uint32x4.
- Uint32x4.fromFloat32x4Bits(Float32x4 x) {
+ /// Returns a bit-wise copy of [x] as a Int32x4.
+ Int32x4.fromFloat32x4Bits(Float32x4 x) {
var view = new Uint32List.view(x._storage.buffer);
_storage[0] = view[0];
_storage[1] = view[1];
@@ -1499,34 +1499,34 @@
}
/// The bit-wise or operator.
- Uint32x4 operator|(Uint32x4 other) {
+ Int32x4 operator|(Int32x4 other) {
int _x = _storage[0] | other._storage[0];
int _y = _storage[1] | other._storage[1];
int _z = _storage[2] | other._storage[2];
int _w = _storage[3] | other._storage[3];
- return new Uint32x4(_x, _y, _z, _w);
+ return new Int32x4(_x, _y, _z, _w);
}
/// The bit-wise and operator.
- Uint32x4 operator&(Uint32x4 other) {
+ Int32x4 operator&(Int32x4 other) {
int _x = _storage[0] & other._storage[0];
int _y = _storage[1] & other._storage[1];
int _z = _storage[2] & other._storage[2];
int _w = _storage[3] & other._storage[3];
- return new Uint32x4(_x, _y, _z, _w);
+ return new Int32x4(_x, _y, _z, _w);
}
/// The bit-wise xor operator.
- Uint32x4 operator^(Uint32x4 other) {
+ Int32x4 operator^(Int32x4 other) {
int _x = _storage[0] ^ other._storage[0];
int _y = _storage[1] ^ other._storage[1];
int _z = _storage[2] ^ other._storage[2];
int _w = _storage[3] ^ other._storage[3];
- return new Uint32x4(_x, _y, _z, _w);
+ return new Int32x4(_x, _y, _z, _w);
}
- Uint32x4 operator+(Uint32x4 other) {
- var r = new Uint32x4(0, 0, 0, 0);
+ Int32x4 operator+(Int32x4 other) {
+ var r = new Int32x4(0, 0, 0, 0);
r._storage[0] = (_storage[0] + other._storage[0]);
r._storage[1] = (_storage[1] + other._storage[1]);
r._storage[2] = (_storage[2] + other._storage[2]);
@@ -1534,8 +1534,8 @@
return r;
}
- Uint32x4 operator-(Uint32x4 other) {
- var r = new Uint32x4(0, 0, 0, 0);
+ Int32x4 operator-(Int32x4 other) {
+ var r = new Int32x4(0, 0, 0, 0);
r._storage[0] = (_storage[0] - other._storage[0]);
r._storage[1] = (_storage[1] - other._storage[1]);
r._storage[2] = (_storage[2] - other._storage[2]);
@@ -1820,7 +1820,7 @@
static const int WWWW = 0xFF;
/// Shuffle the lane values. [mask] must be one of the 256 shuffle constants.
- Uint32x4 shuffle(int mask) {
+ Int32x4 shuffle(int mask) {
if ((mask < 0) || (mask > 255)) {
throw new RangeError('mask $mask must be in the range [0..256)');
}
@@ -1828,13 +1828,13 @@
int _y = _storage[(mask >> 2) & 0x3];
int _z = _storage[(mask >> 4) & 0x3];
int _w = _storage[(mask >> 6) & 0x3];
- return new Uint32x4(_x, _y, _z, _w);
+ return new Int32x4(_x, _y, _z, _w);
}
/// Shuffle the lane values in [this] and [other]. The returned
- /// Uint32x4 will have XY lanes from [this] and ZW lanes from [other].
+ /// Int32x4 will have XY lanes from [this] and ZW lanes from [other].
/// Uses the same [mask] as [shuffle].
- Uint32x4 shuffleMix(Uint32x4 other, int mask) {
+ Int32x4 shuffleMix(Int32x4 other, int mask) {
if ((mask < 0) || (mask > 255)) {
throw new RangeError('mask $mask must be in the range [0..256)');
}
@@ -1842,43 +1842,43 @@
int _y = _storage[(mask >> 2) & 0x3];
int _z = other._storage[(mask >> 4) & 0x3];
int _w = other._storage[(mask >> 6) & 0x3];
- return new Uint32x4(_x, _y, _z, _w);
+ return new Int32x4(_x, _y, _z, _w);
}
- /// Returns a new [Uint32x4] copied from [this] with a new x value.
- Uint32x4 withX(int x) {
+ /// Returns a new [Int32x4] copied from [this] with a new x value.
+ Int32x4 withX(int x) {
int _x = x;
int _y = _storage[1];
int _z = _storage[2];
int _w = _storage[3];
- return new Uint32x4(_x, _y, _z, _w);
+ return new Int32x4(_x, _y, _z, _w);
}
- /// Returns a new [Uint32x4] copied from [this] with a new y value.
- Uint32x4 withY(int y) {
+ /// Returns a new [Int32x4] copied from [this] with a new y value.
+ Int32x4 withY(int y) {
int _x = _storage[0];
int _y = y;
int _z = _storage[2];
int _w = _storage[3];
- return new Uint32x4(_x, _y, _z, _w);
+ return new Int32x4(_x, _y, _z, _w);
}
- /// Returns a new [Uint32x4] copied from [this] with a new z value.
- Uint32x4 withZ(int z) {
+ /// Returns a new [Int32x4] copied from [this] with a new z value.
+ Int32x4 withZ(int z) {
int _x = _storage[0];
int _y = _storage[1];
int _z = z;
int _w = _storage[3];
- return new Uint32x4(_x, _y, _z, _w);
+ return new Int32x4(_x, _y, _z, _w);
}
- /// Returns a new [Uint32x4] copied from [this] with a new w value.
- Uint32x4 withW(int w) {
+ /// Returns a new [Int32x4] copied from [this] with a new w value.
+ Int32x4 withW(int w) {
int _x = _storage[0];
int _y = _storage[1];
int _z = _storage[2];
int _w = w;
- return new Uint32x4(_x, _y, _z, _w);
+ return new Int32x4(_x, _y, _z, _w);
}
/// Extracted x value. Returns false for 0, true for any other value.
@@ -1890,48 +1890,48 @@
/// Extracted w value. Returns false for 0, true for any other value.
bool get flagW => _storage[3] != 0x0;
- /// Returns a new [Uint32x4] copied from [this] with a new x value.
- Uint32x4 withFlagX(bool x) {
+ /// Returns a new [Int32x4] copied from [this] with a new x value.
+ Int32x4 withFlagX(bool x) {
int _x = x == true ? 0xFFFFFFFF : 0x0;
int _y = _storage[1];
int _z = _storage[2];
int _w = _storage[3];
- return new Uint32x4(_x, _y, _z, _w);
+ return new Int32x4(_x, _y, _z, _w);
}
- /// Returns a new [Uint32x4] copied from [this] with a new y value.
- Uint32x4 withFlagY(bool y) {
+ /// Returns a new [Int32x4] copied from [this] with a new y value.
+ Int32x4 withFlagY(bool y) {
int _x = _storage[0];
int _y = y == true ? 0xFFFFFFFF : 0x0;
int _z = _storage[2];
int _w = _storage[3];
- return new Uint32x4(_x, _y, _z, _w);
+ return new Int32x4(_x, _y, _z, _w);
}
- /// Returns a new [Uint32x4] copied from [this] with a new z value.
- Uint32x4 withFlagZ(bool z) {
+ /// Returns a new [Int32x4] copied from [this] with a new z value.
+ Int32x4 withFlagZ(bool z) {
int _x = _storage[0];
int _y = _storage[1];
int _z = z == true ? 0xFFFFFFFF : 0x0;
int _w = _storage[3];
- return new Uint32x4(_x, _y, _z, _w);
+ return new Int32x4(_x, _y, _z, _w);
}
- /// Returns a new [Uint32x4] copied from [this] with a new w value.
- Uint32x4 withFlagW(bool w) {
+ /// Returns a new [Int32x4] copied from [this] with a new w value.
+ Int32x4 withFlagW(bool w) {
int _x = _storage[0];
int _y = _storage[1];
int _z = _storage[2];
int _w = w == true ? 0xFFFFFFFF : 0x0;
- return new Uint32x4(_x, _y, _z, _w);
+ return new Int32x4(_x, _y, _z, _w);
}
/// Merge [trueValue] and [falseValue] based on [this]' bit mask:
/// Select bit from [trueValue] when bit in [this] is on.
/// Select bit from [falseValue] when bit in [this] is off.
Float32x4 select(Float32x4 trueValue, Float32x4 falseValue) {
- var trueView = new Uint32List.view(trueValue._storage.buffer);
- var falseView = new Uint32List.view(falseValue._storage.buffer);
+ var trueView = new Int32List.view(trueValue._storage.buffer);
+ var falseView = new Int32List.view(falseValue._storage.buffer);
int cmx = _storage[0];
int cmy = _storage[1];
int cmz = _storage[2];
@@ -1949,7 +1949,7 @@
int _z = (cmz & stz) | (~cmz & sfz);
int _w = (cmw & stw) | (~cmw & sfw);
var r = new Float32x4(0.0, 0.0, 0.0, 0.0);
- var rView = new Uint32List.view(r._storage.buffer);
+ var rView = new Int32List.view(r._storage.buffer);
rView[0] = _x;
rView[1] = _y;
rView[2] = _z;
diff --git a/sdk/lib/typed_data/typed_data.dart b/sdk/lib/typed_data/typed_data.dart
index d23d384..4464fea 100644
--- a/sdk/lib/typed_data/typed_data.dart
+++ b/sdk/lib/typed_data/typed_data.dart
@@ -827,26 +827,26 @@
/**
- * A fixed-length list of Uint32x4 numbers that is viewable as a
+ * A fixed-length list of Int32x4 numbers that is viewable as a
* [TypedData]. For long lists, this implementation will be considerably more
* space- and time-efficient than the default [List] implementation.
*/
-abstract class Uint32x4List implements List<Uint32x4>, TypedData {
+abstract class Int32x4List implements List<Int32x4>, TypedData {
/**
- * Creates a [Uint32x4List] of the specified length (in elements),
+ * Creates a [Int32x4List] of the specified length (in elements),
* all of whose elements are initially zero.
*/
- external factory Uint32x4List(int length);
+ external factory Int32x4List(int length);
/**
- * Creates a [Uint32x4List] with the same size as the [elements] list
+ * Creates a [Int32x4List] with the same size as the [elements] list
* and copies over the elements.
*/
- external factory Uint32x4List.fromList(List<Uint32x4> elements);
+ external factory Int32x4List.fromList(List<Int32x4> elements);
/**
- * Creates a [Uint32x4List] _view_ of the specified region in the specified
- * byte buffer. Changes in the [Uint32x4List] will be visible in the byte
+ * Creates a [Int32x4List] _view_ of the specified region in the specified
+ * byte buffer. Changes in the [Int32x4List] will be visible in the byte
* buffer and vice versa. If the [offsetInBytes] index of the region is not
* specified, it defaults to zero (the first byte in the byte buffer).
* If the length is not specified, it defaults to null, which indicates
@@ -859,7 +859,7 @@
* Throws [ArgumentError] if [offsetInBytes] is not a multiple of
* BYTES_PER_ELEMENT.
*/
- external factory Uint32x4List.view(ByteBuffer buffer,
+ external factory Int32x4List.view(ByteBuffer buffer,
[int offsetInBytes = 0, int length]);
static const int BYTES_PER_ELEMENT = 16;
@@ -875,7 +875,7 @@
external factory Float32x4(double x, double y, double z, double w);
external factory Float32x4.splat(double v);
external factory Float32x4.zero();
- external factory Float32x4.fromUint32x4Bits(Uint32x4 x);
+ external factory Float32x4.fromInt32x4Bits(Int32x4 x);
/// Addition operator.
Float32x4 operator+(Float32x4 other);
@@ -889,17 +889,17 @@
Float32x4 operator/(Float32x4 other);
/// Relational less than.
- Uint32x4 lessThan(Float32x4 other);
+ Int32x4 lessThan(Float32x4 other);
/// Relational less than or equal.
- Uint32x4 lessThanOrEqual(Float32x4 other);
+ Int32x4 lessThanOrEqual(Float32x4 other);
/// Relational greater than.
- Uint32x4 greaterThan(Float32x4 other);
+ Int32x4 greaterThan(Float32x4 other);
/// Relational greater than or equal.
- Uint32x4 greaterThanOrEqual(Float32x4 other);
+ Int32x4 greaterThanOrEqual(Float32x4 other);
/// Relational equal.
- Uint32x4 equal(Float32x4 other);
+ Int32x4 equal(Float32x4 other);
/// Relational not-equal.
- Uint32x4 notEqual(Float32x4 other);
+ Int32x4 notEqual(Float32x4 other);
/// Returns a copy of [this] each lane being scaled by [s].
Float32x4 scale(double s);
@@ -1214,25 +1214,25 @@
/**
- * Interface of Dart Uint32x4 and operations.
- * Uint32x4 stores 4 32-bit bit-masks in "lanes".
+ * Interface of Dart Int32x4 and operations.
+ * Int32x4 stores 4 32-bit bit-masks in "lanes".
* The lanes are "x", "y", "z", and "w" respectively.
*/
-abstract class Uint32x4 {
- external factory Uint32x4(int x, int y, int z, int w);
- external factory Uint32x4.bool(bool x, bool y, bool z, bool w);
- external factory Uint32x4.fromFloat32x4Bits(Float32x4 x);
+abstract class Int32x4 {
+ external factory Int32x4(int x, int y, int z, int w);
+ external factory Int32x4.bool(bool x, bool y, bool z, bool w);
+ external factory Int32x4.fromFloat32x4Bits(Float32x4 x);
/// The bit-wise or operator.
- Uint32x4 operator|(Uint32x4 other);
+ Int32x4 operator|(Int32x4 other);
/// The bit-wise and operator.
- Uint32x4 operator&(Uint32x4 other);
+ Int32x4 operator&(Int32x4 other);
/// The bit-wise xor operator.
- Uint32x4 operator^(Uint32x4 other);
+ Int32x4 operator^(Int32x4 other);
/// Addition operator.
- Uint32x4 operator+(Uint32x4 other);
+ Int32x4 operator+(Int32x4 other);
/// Subtraction operator.
- Uint32x4 operator-(Uint32x4 other);
+ Int32x4 operator-(Int32x4 other);
/// Extract 32-bit mask from x lane.
int get x;
@@ -1505,21 +1505,21 @@
static const int WWWW = 0xFF;
/// Shuffle the lane values. [mask] must be one of the 256 shuffle constants.
- Uint32x4 shuffle(int mask);
+ Int32x4 shuffle(int mask);
/// Shuffle the lane values in [this] and [other]. The returned
- /// Uint32x4 will have XY lanes from [this] and ZW lanes from [other].
+ /// Int32x4 will have XY lanes from [this] and ZW lanes from [other].
/// Uses the same [mask] as [shuffle].
- Uint32x4 shuffleMix(Uint32x4 other, int mask);
+ Int32x4 shuffleMix(Int32x4 other, int mask);
- /// Returns a new [Uint32x4] copied from [this] with a new x value.
- Uint32x4 withX(int x);
- /// Returns a new [Uint32x4] copied from [this] with a new y value.
- Uint32x4 withY(int y);
- /// Returns a new [Uint32x4] copied from [this] with a new z value.
- Uint32x4 withZ(int z);
- /// Returns a new [Uint32x4] copied from [this] with a new w value.
- Uint32x4 withW(int w);
+ /// Returns a new [Int32x4] copied from [this] with a new x value.
+ Int32x4 withX(int x);
+ /// Returns a new [Int32x4] copied from [this] with a new y value.
+ Int32x4 withY(int y);
+ /// Returns a new [Int32x4] copied from [this] with a new z value.
+ Int32x4 withZ(int z);
+ /// Returns a new [Int32x4] copied from [this] with a new w value.
+ Int32x4 withW(int w);
/// Extracted x value. Returns false for 0, true for any other value.
bool get flagX;
@@ -1530,14 +1530,14 @@
/// Extracted w value. Returns false for 0, true for any other value.
bool get flagW;
- /// Returns a new [Uint32x4] copied from [this] with a new x value.
- Uint32x4 withFlagX(bool x);
- /// Returns a new [Uint32x4] copied from [this] with a new y value.
- Uint32x4 withFlagY(bool y);
- /// Returns a new [Uint32x4] copied from [this] with a new z value.
- Uint32x4 withFlagZ(bool z);
- /// Returns a new [Uint32x4] copied from [this] with a new w value.
- Uint32x4 withFlagW(bool w);
+ /// Returns a new [Int32x4] copied from [this] with a new x value.
+ Int32x4 withFlagX(bool x);
+ /// Returns a new [Int32x4] copied from [this] with a new y value.
+ Int32x4 withFlagY(bool y);
+ /// Returns a new [Int32x4] copied from [this] with a new z value.
+ Int32x4 withFlagZ(bool z);
+ /// Returns a new [Int32x4] copied from [this] with a new w value.
+ Int32x4 withFlagW(bool w);
/// Merge [trueValue] and [falseValue] based on [this]' bit mask:
/// Select bit from [trueValue] when bit in [this] is on.
diff --git a/tests/co19/co19-analyzer.status b/tests/co19/co19-analyzer.status
index 35f46d2..d45b668 100644
--- a/tests/co19/co19-analyzer.status
+++ b/tests/co19/co19-analyzer.status
@@ -28,11 +28,7 @@
Language/07_Classes/1_Instance_Methods_A07_t02: MissingStaticWarning
# TBF: Static members should not be accessible via subclasses.
-Language/07_Classes/7_Static_Methods_A01_t03: MissingStaticWarning
Language/07_Classes/9_Superclasses/1_Inheritance_and_Overriding_A01_t05: MissingStaticWarning
-Language/08_Interfaces/5_Superinterfaces/1_Inheritance_and_Overriding_A01_t02: MissingStaticWarning
-
-
# co19 issue #442, undefined name "Expect"
Language/15_Types/4_Interface_Types_A08_t03: fail, OK
@@ -262,8 +258,6 @@
Language/12_Expressions/04_Booleans/1_Boolean_Conversion_A01_t02: MissingStaticWarning
Language/12_Expressions/15_Method_Invocation/2_Cascaded_Invocation_A01_t19: MissingStaticWarning
-Language/12_Expressions/15_Method_Invocation/3_Static_Invocation_A03_t02: MissingStaticWarning
-Language/12_Expressions/15_Method_Invocation/3_Static_Invocation_A04_t09: MissingStaticWarning
Language/12_Expressions/19_Conditional_A01_t14: MissingStaticWarning
Language/12_Expressions/20_Logical_Boolean_Expressions_A01_t10: MissingStaticWarning
Language/12_Expressions/20_Logical_Boolean_Expressions_A01_t11: MissingStaticWarning
@@ -295,9 +289,19 @@
Language/05_Variables/05_Variables_A06_t01: MissingCompileTimeError # co19-roll r651: Please triage this failure
Language/05_Variables/05_Variables_A06_t02: MissingCompileTimeError # co19-roll r651: Please triage this failure
Language/05_Variables/05_Variables_A06_t03: MissingCompileTimeError # co19-roll r651: Please triage this failure
-Language/07_Classes/8_Static_Variables_A01_t01: MissingStaticWarning # co19-roll r651: Please triage this failure
Language/12_Expressions/01_Constants_A20_t04: CompileTimeError # co19-roll r651: Please triage this failure
Language/12_Expressions/04_Booleans/1_Boolean_Conversion_A01_t03: MissingStaticWarning # co19-roll r651: Please triage this failure
Language/12_Expressions/14_Function_Invocation/3_Unqualified_Invocation_A01_t13: CompileTimeError # co19-roll r651: Please triage this failure
Language/12_Expressions/14_Function_Invocation/3_Unqualified_Invocation_A01_t17: MissingCompileTimeError # co19-roll r651: Please triage this failure
Language/12_Expressions/14_Function_Invocation/3_Unqualified_Invocation_A01_t18: MissingCompileTimeError # co19-roll r651: Please triage this failure
+
+# co19 issue 656
+LibTest/typed_data/Uint32x4/*: Skip # co19 issue 656
+LibTest/typed_data/Float32x4/Float32x4.fromUint32x4Bits_A01_t01: Skip # co19 issue 656
+LibTest/typed_data/Float32x4/Float32x4.fromUint32x4Bits_A01_t02: Skip # co19 issue 656
+LibTest/typed_data/Float32x4/equal_A01_t01: Skip # co19 issue 656
+LibTest/typed_data/Float32x4/notEqual_A01_t01: Skip # co19 issue 656
+LibTest/typed_data/Float32x4/greaterThan_A01_t01: Skip # co19 issue 656
+LibTest/typed_data/Float32x4/greaterThanOrEqual_A01_t01: Skip # co19 issue 656
+LibTest/typed_data/Float32x4/lessThan_A01_t01: Skip # co19 issue 656
+LibTest/typed_data/Float32x4/lessThanOrEqual_A01_t01: Skip # co19 issue 656
diff --git a/tests/co19/co19-co19.status b/tests/co19/co19-co19.status
index 8a2c9ec..91fe674 100644
--- a/tests/co19/co19-co19.status
+++ b/tests/co19/co19-co19.status
@@ -59,6 +59,7 @@
Language/07_Classes/6_Constructors/3_Constant_Constructors_A05_t04: fail, pass, ok # co19 issue 634
Language/12_Expressions/12_Instance_Creation/2_Const_A09_t02: fail, pass, ok # co19 issue 634
Language/12_Expressions/12_Instance_Creation/2_Const_A09_t03: fail, pass, ok # co19 issue 634
+Language/12_Expressions/30_Identifier_Reference_A02_t01: fail, pass, ok # co19 issue 649
Language/05_Variables/05_Variables_A06_t01: fail, pass, ok # co19 issue 624
Language/05_Variables/05_Variables_A06_t02: fail, pass, ok # co19 issue 624
@@ -68,14 +69,12 @@
Language/05_Variables/05_Variables_A06_t06: fail, pass, ok # co19 issue 624
Language/07_Classes/6_Constructors/1_Generative_Constructors_A12_t02: fail # co19-roll r587: Please triage this failure
Language/07_Classes/6_Constructors/1_Generative_Constructors_A20_t02: fail # co19-roll r587: Please triage this failure
-Language/05_Variables/05_Variables_A11_t01: Fail, MissingCompileTimeError # co19-roll r641: Please triage this failure
# Maybe we should wait until isolate library is sealed before triaging these.
LibTest/isolate/isolate_api/spawnFunction_A04_t01: fail, timeout # co19-roll r546: Please triage this failure
LibTest/isolate/isolate_api/streamSpawnFunction_A02_t01: fail, timeout # co19-roll r546: Please triage this failure
Language/12_Expressions/18_Assignment_A04_t09: RuntimeError # co19-roll r607: Please triage this failure
-Language/13_Statements/04_Local_Function_Declaration_A04_t01: Fail, MissingCompileTimeError # co19-roll r607: Please triage this failure
LibTest/collection/LinkedList/forEach_A02_t01: RuntimeError # co19-roll r607: Please triage this failure
LibTest/core/Invocation/namedArguments_A01_t01: RuntimeError # co19-roll r607: Please triage this failure
LibTest/core/Symbol/Symbol_A01_t04: RuntimeError # co19-roll r607: Please triage this failure
@@ -96,6 +95,8 @@
[ $runtime == vm || $runtime == dartium || $compiler == dart2js ]
+Language/14_Libraries_and_Scripts/4_Scripts_A03_t02: FAIL, OK # co19 issue 654
+
LibTest/math/acos_A01_t01: PASS, FAIL, OK # co19 issue 44
LibTest/math/asin_A01_t01: PASS, FAIL, OK # co19 issue 44
LibTest/math/atan_A01_t01: PASS, FAIL, OK # co19 issue 44
diff --git a/tests/co19/co19-dart2dart.status b/tests/co19/co19-dart2dart.status
index b4e5863..4a38fb1 100644
--- a/tests/co19/co19-dart2dart.status
+++ b/tests/co19/co19-dart2dart.status
@@ -10,6 +10,8 @@
Language/07_Classes/07_Classes_A13_t08: Fail # Missing CT error on member with same name a type parameter
Language/07_Classes/07_Classes_A13_t09: Fail # Missing CT error on member with same name a type parameter
+Language/13_Statements/04_Local_Function_Declaration_A04_t01: Fail, MissingCompileTimeError # co19-roll r607: Please triage this failure
+
LibTest/async/Stream/Stream.periodic_A01_t01: Pass, Fail # Issue 12562.
LibTest/core/Symbol/Symbol_A01_t02: CompileTimeError # co19-roll r607: Please triage this failure
@@ -72,6 +74,17 @@
LibTest/typed_data/Float32x4/withZWInXY_A01_t01: Fail # co19 issue 650
LibTest/typed_data/Float32x4/interleaveXY_A01_t01: Fail # co19 issue 650
LibTest/typed_data/Float32x4/interleaveXYPairs_A01_t01: Fail # co19 issue 650
+LibTest/typed_data/Uint32x4/*: Skip # co19 issue 656
+LibTest/typed_data/Float32x4/Float32x4.fromUint32x4Bits_A01_t01: Skip # co19 issue 656
+LibTest/typed_data/Float32x4/Float32x4.fromUint32x4Bits_A01_t02: Skip # co19 issue 656
+LibTest/typed_data/Float32x4/equal_A01_t01: Skip # co19 issue 656
+LibTest/typed_data/Float32x4/notEqual_A01_t01: Skip # co19 issue 656
+LibTest/typed_data/Float32x4/greaterThan_A01_t01: Skip # co19 issue 656
+LibTest/typed_data/Float32x4/greaterThanOrEqual_A01_t01: Skip # co19 issue 656
+LibTest/typed_data/Float32x4/lessThan_A01_t01: Skip # co19 issue 656
+LibTest/typed_data/Float32x4/lessThanOrEqual_A01_t01: Skip # co19 issue 656
+
+Language/14_Libraries_and_Scripts/4_Scripts_A03_t02: Fail # co19 issue 654
[ $compiler == dart2dart && $system == windows ]
@@ -101,6 +114,7 @@
Language/03_Overview/1_Scoping_A02_t28: Fail # co19-roll r559: Please triage this failure
Language/05_Variables/05_Variables_A05_t01: fail # co19-roll r546: Please triage this failure
Language/05_Variables/05_Variables_A05_t02: fail # co19-roll r546: Please triage this failure
+Language/05_Variables/05_Variables_A11_t01: fail
Language/07_Classes/1_Instance_Methods_A01_t01: Fail # co19-roll r559: Please triage this failure
Language/07_Classes/1_Instance_Methods_A01_t02: Fail # co19-roll r559: Please triage this failure
Language/07_Classes/4_Abstract_Instance_Members_A03_t01: Fail # co19-roll r559: Please triage this failure
diff --git a/tests/co19/co19-dart2js.status b/tests/co19/co19-dart2js.status
index 1a5e702..d7b2a5e 100644
--- a/tests/co19/co19-dart2js.status
+++ b/tests/co19/co19-dart2js.status
@@ -14,6 +14,7 @@
# Crashes first, please. Then untriaged bugs. There is a section below
# for co19 bugs.
[ $compiler == dart2js ]
+Language/13_Statements/04_Local_Function_Declaration_A04_t01: Fail, MissingCompileTimeError # co19-roll r607: Please triage this failure
Language/07_Classes/07_Classes_A13_t02: Fail # Missing CT error on member with same name a type parameter
Language/07_Classes/07_Classes_A13_t03: Fail # Missing CT error on member with same name a type parameter
Language/07_Classes/07_Classes_A13_t05: Fail # Missing CT error on member with same name a type parameter
@@ -23,6 +24,7 @@
Language/03_Overview/1_Scoping_A02_t05: CompileTimeError # TODO(ahe): Please triage this failure.
Language/03_Overview/1_Scoping_A02_t06: CompileTimeError # TODO(ahe): Please triage this failure.
Language/05_Variables/1_Evaluation_of_Implicit_Variable_Getters_A01_t02: fail # co19-roll r576: Please triage this failure
+Language/05_Variables/05_Variables_A11_t01: fail
LibTest/core/double/INFINITY_A01_t04: RuntimeError # TODO(ahe): Please triage this failure.
LibTest/core/double/NEGATIVE_INFINITY_A01_t04: RuntimeError # TODO(ahe): Please triage this failure.
LibTest/core/List/List_A03_t01: RuntimeError # TODO(kasperl): Please triage this failure.
@@ -58,6 +60,15 @@
LibTest/typed_data/Float32x4/withZWInXY_A01_t01: Fail # co19 issue 650
LibTest/typed_data/Float32x4/interleaveXY_A01_t01: Fail # co19 issue 650
LibTest/typed_data/Float32x4/interleaveXYPairs_A01_t01: Fail # co19 issue 650
+LibTest/typed_data/Uint32x4/*: Skip # co19 issue 656
+LibTest/typed_data/Float32x4/Float32x4.fromUint32x4Bits_A01_t01: Skip # co19 issue 656
+LibTest/typed_data/Float32x4/Float32x4.fromUint32x4Bits_A01_t02: Skip # co19 issue 656
+LibTest/typed_data/Float32x4/equal_A01_t01: Skip # co19 issue 656
+LibTest/typed_data/Float32x4/notEqual_A01_t01: Skip # co19 issue 656
+LibTest/typed_data/Float32x4/greaterThan_A01_t01: Skip # co19 issue 656
+LibTest/typed_data/Float32x4/greaterThanOrEqual_A01_t01: Skip # co19 issue 656
+LibTest/typed_data/Float32x4/lessThan_A01_t01: Skip # co19 issue 656
+LibTest/typed_data/Float32x4/lessThanOrEqual_A01_t01: Skip # co19 issue 656
[ $compiler == dart2js && $runtime != ie9 ]
LibTest/typed_data/ByteData/ByteData_A02_t01: fail # co19-roll r576: Please triage this failure
@@ -513,9 +524,6 @@
[ $compiler == dart2js && $checked ]
Language/12_Expressions/03_Numbers_A05_t02: fail # co19-roll r546: Please triage this failure
-Language/12_Expressions/06_Lists_A09_t01: fail # co19-roll r546: Please triage this failure
-Language/12_Expressions/06_Lists_A09_t04: fail # co19-roll r546: Please triage this failure
-Language/12_Expressions/07_Maps_A10_t05: fail # co19-roll r546: Please triage this failure
Language/12_Expressions/12_Instance_Creation/1_New_A12_t02: fail # co19-roll r546: Please triage this failure
Language/12_Expressions/19_Conditional_A04_t03: fail # co19-roll r546: Please triage this failure
Language/12_Expressions/20_Logical_Boolean_Expressions_A03_t01: fail # co19-roll r546: Please triage this failure
diff --git a/tests/co19/co19-dartium.status b/tests/co19/co19-dartium.status
index 5f96286..d816a73 100644
--- a/tests/co19/co19-dartium.status
+++ b/tests/co19/co19-dartium.status
@@ -6,10 +6,10 @@
*: Skip # running co19 tests on content_shell would make our dartium cycle-times very long
[ $compiler == none && $runtime == dartium ]
+Language/13_Statements/04_Local_Function_Declaration_A04_t01: Fail, MissingCompileTimeError # co19-roll r607: Please triage this failure
Language/07_Classes/6_Constructors/1_Generative_Constructors_A09_t01: Pass, Fail # Issue 13719: Please triage this failure.
Language/12_Expressions/12_Spawning_an_Isolate_A01_t01: Fail # Issue 13921
Language/14_Libraries_and_Scripts/3_Parts_A02_t02: Pass, Timeout # Issue 13719: Please triage this failure.
-Language/14_Libraries_and_Scripts/4_Scripts_A03_t02: Fail # Issue 13719: Please triage this failure.
Language/14_Libraries_and_Scripts/4_Scripts_A03_t03: Pass # Issue 14478: This should break.
LibTest/async/Completer/completeError_A02_t01: Pass, Fail # Issue 13719: Please triage this failure.
LibTest/async/Future/Future_A01_t03: Fail # co19-roll r641: Please triage this failure
diff --git a/tests/co19/co19-runtime.status b/tests/co19/co19-runtime.status
index 48fa47f..fb04972 100644
--- a/tests/co19/co19-runtime.status
+++ b/tests/co19/co19-runtime.status
@@ -61,6 +61,15 @@
LibTest/typed_data/Float32x4/withZWInXY_A01_t01: Fail # co19 issue 650
LibTest/typed_data/Float32x4/interleaveXY_A01_t01: Fail # co19 issue 650
LibTest/typed_data/Float32x4/interleaveXYPairs_A01_t01: Fail # co19 issue 650
+LibTest/typed_data/Uint32x4/*: Skip # co19 issue 656
+LibTest/typed_data/Float32x4/Float32x4.fromUint32x4Bits_A01_t01: Skip # co19 issue 656
+LibTest/typed_data/Float32x4/Float32x4.fromUint32x4Bits_A01_t02: Skip # co19 issue 656
+LibTest/typed_data/Float32x4/equal_A01_t01: Skip # co19 issue 656
+LibTest/typed_data/Float32x4/notEqual_A01_t01: Skip # co19 issue 656
+LibTest/typed_data/Float32x4/greaterThan_A01_t01: Skip # co19 issue 656
+LibTest/typed_data/Float32x4/greaterThanOrEqual_A01_t01: Skip # co19 issue 656
+LibTest/typed_data/Float32x4/lessThan_A01_t01: Skip # co19 issue 656
+LibTest/typed_data/Float32x4/lessThanOrEqual_A01_t01: Skip # co19 issue 656
[ $compiler == none && $runtime == vm ]
LibTest/typed_data/Float32x4/reciprocalSqrt_A01_t01: Pass, Fail # Issue 13398
diff --git a/tests/compiler/dart2js/compiler_helper.dart b/tests/compiler/dart2js/compiler_helper.dart
index 64ef727..30d7484 100644
--- a/tests/compiler/dart2js/compiler_helper.dart
+++ b/tests/compiler/dart2js/compiler_helper.dart
@@ -157,11 +157,7 @@
case 'subtype': return new types.TypeMask.subtype(element);
case 'nonNullSubtype': return new types.TypeMask.nonNullSubtype(element);
}
- Expect.fail('Unknown HType constructor $how');
-}
-
-ssa.HType findHType(compiler, String name, [String how = 'nonNullExact']) {
- return new ssa.HType.fromMask(findTypeMask(compiler, name, how), compiler);
+ Expect.fail('Unknown TypeMask constructor $how');
}
String anyIdentifier = "[a-zA-Z][a-zA-Z0-9]*";
diff --git a/tests/compiler/dart2js/cpa_inference_test.dart b/tests/compiler/dart2js/cpa_inference_test.dart
index 32a90c5..2160670 100644
--- a/tests/compiler/dart2js/cpa_inference_test.dart
+++ b/tests/compiler/dart2js/cpa_inference_test.dart
@@ -1351,9 +1351,9 @@
final expectedGType = [result.num];
result.checkNodeHasType('g', expectedGType);
result.checkNodeHasType('gNull', maybe(expectedGType));
- final expectedHType = [result.bool];
- result.checkNodeHasType('h', expectedHType);
- result.checkNodeHasType('hNull', maybe(expectedHType));
+ final expectedType = [result.bool];
+ result.checkNodeHasType('h', expectedType);
+ result.checkNodeHasType('hNull', maybe(expectedType));
final expectedIType = [result.base('A'), result.base('B'),
result.base('BB'), result.base('C'),
result.base('D')];
diff --git a/tests/compiler/dart2js/mock_compiler.dart b/tests/compiler/dart2js/mock_compiler.dart
index 4acd9a2..f028c33 100644
--- a/tests/compiler/dart2js/mock_compiler.dart
+++ b/tests/compiler/dart2js/mock_compiler.dart
@@ -467,6 +467,7 @@
Uri uri = new Uri(scheme: "source");
var library = new LibraryElementX(new Script(uri, new MockFile(source)));
importLibrary(library, compiler.coreLibrary, compiler);
+ library.setExports(<Element>[]);
return library;
}
diff --git a/tests/compiler/dart2js/type_combination_test.dart b/tests/compiler/dart2js/type_combination_test.dart
index cd09732..ada744d4 100644
--- a/tests/compiler/dart2js/type_combination_test.dart
+++ b/tests/compiler/dart2js/type_combination_test.dart
@@ -374,10 +374,10 @@
rule(jsFixedArray, jsFixedArray, jsFixedArray);
- check(nonPrimitive1, nullType, (type) => type is HBoundedType);
- check(nonPrimitive2, nullType, (type) => type is HBoundedType);
- check(nullType, nonPrimitive1, (type) => type.isNullable);
- check(nullType, nonPrimitive2, (type) => type.isNullable);
+ check(nonPrimitive1, nullType, (type) => type == nonPrimitive1.nullable());
+ check(nonPrimitive2, nullType, (type) => type == nonPrimitive2.nullable());
+ check(nullType, nonPrimitive1, (type) => type == nonPrimitive1.nullable());
+ check(nullType, nonPrimitive2, (type) => type == nonPrimitive2.nullable());
ruleSet.validateCoverage();
}
diff --git a/tests/compiler/dart2js_extra/runtime_type_isolate.dart b/tests/compiler/dart2js_extra/runtime_type_isolate.dart
index 75815b8..b1b9504 100644
--- a/tests/compiler/dart2js_extra/runtime_type_isolate.dart
+++ b/tests/compiler/dart2js_extra/runtime_type_isolate.dart
@@ -12,5 +12,5 @@
port.receive((msg, reply) {
Expect.equals(new Bar().runtimeType.toString(), 'Bar');
});
- port.toSendPort().send(null, null);
+ port.sendPort.send(null);
}
diff --git a/tests/compiler/dart2js_native/dart2js_native.status b/tests/compiler/dart2js_native/dart2js_native.status
index c8e3e7f..439af70 100644
--- a/tests/compiler/dart2js_native/dart2js_native.status
+++ b/tests/compiler/dart2js_native/dart2js_native.status
@@ -10,6 +10,7 @@
native_no_such_method_exception5_frog_test: Fail # Issue 9631
subclassing_super_field_1_test: Fail # Issue 14096
subclassing_super_field_2_test: Fail # Issue 14096
+subclassing_super_call_test: Fail # Issue 14739
[ $compiler == dart2js && $unminified ]
fake_thing_test: Fail # Issue 13010
diff --git a/tests/compiler/dart2js_native/subclassing_super_call_test.dart b/tests/compiler/dart2js_native/subclassing_super_call_test.dart
new file mode 100644
index 0000000..ed1157e
--- /dev/null
+++ b/tests/compiler/dart2js_native/subclassing_super_call_test.dart
@@ -0,0 +1,134 @@
+// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import "package:expect/expect.dart";
+import 'dart:_foreign_helper' show JS;
+import 'dart:_js_helper' show Creates, setNativeSubclassDispatchRecord;
+import 'dart:_interceptors' show
+ findInterceptorForType, findConstructorForNativeSubclassType;
+
+// Test for super access from classes that extend native classes.
+
+class N1 native "N1" {
+}
+
+class N2 extends N1 native "N2" {
+ N2.init();
+ var text;
+ foo() native;
+}
+
+class AA extends N2 {
+ AA.init() : super.init();
+ var afield;
+ afun() => 'afun:$afield';
+}
+
+class BB extends AA {
+ BB.init() : super.init();
+
+ get text => super.text;
+ set text(value) => super.text = value;
+ foo() => super.foo();
+
+ get afield => super.afield;
+ set afield(value) => super.afield = value;
+ afun() => super.afun();
+}
+
+BB makeBB() native;
+
+@Creates('=Object')
+getBBPrototype() native;
+
+void setup() native r"""
+function N2() {}
+N2.prototype.foo = function() { return "foo:" + this.text; }
+function BB() {}
+BB.prototype.__proto__ = N2.prototype;
+makeBB = function(){return new BB;};
+
+getBBPrototype = function(){return BB.prototype;};
+""";
+
+var inscrutable;
+
+testSuperOnNative() {
+ BB b1 = makeBB();
+ BB b2 = makeBB();
+
+ var constructor = findConstructorForNativeSubclassType(BB, 'init');
+ Expect.isNotNull(constructor);
+ JS('', '#(#)', constructor, b1);
+ JS('', '#(#)', constructor, b2);
+
+ b1.text = 'one';
+ b2.text = 'two';
+
+ print('b1.text ${inscrutable(b1).text}');
+ print('b2.text ${inscrutable(b2).text}');
+
+ print('b1.foo() ${inscrutable(b1).foo()}');
+ print('b2.foo() ${inscrutable(b2).foo()}');
+
+ Expect.equals('one', b1.text);
+ Expect.equals('two', b1.text);
+
+ Expect.equals('foo:one', b1.foo());
+ Expect.equals('foo:two', b2.foo());
+
+ inscrutable(b1).text = 'three';
+ inscrutable(b2).text = 'four';
+
+ Expect.equals('three', inscrutable(b1).text);
+ Expect.equals('four', inscrutable(b1).text);
+
+ Expect.equals('foo:three', inscrutable(b1).foo());
+ Expect.equals('foo:four', inscrutable(b2).foo());
+}
+
+testSuperOnSubclassOfNative() {
+ BB b1 = makeBB();
+ BB b2 = makeBB();
+
+ var constructor = findConstructorForNativeSubclassType(BB, 'init');
+ Expect.isNotNull(constructor);
+ JS('', '#(#)', constructor, b1);
+ JS('', '#(#)', constructor, b2);
+
+ b1.afield = 'one';
+ b2.afield = 'two';
+
+ print('b1.afield ${inscrutable(b1).afield}');
+ print('b2.afield ${inscrutable(b2).afield}');
+
+ print('b1.afun() ${inscrutable(b1).afun()}');
+ print('b2.afun() ${inscrutable(b2).afun()}');
+
+ Expect.equals('one', b1.afield);
+ Expect.equals('two', b1.afield);
+
+ Expect.equals('afun:one', b1.afun());
+ Expect.equals('afun:two', b2.afun());
+
+
+ inscrutable(b1).afield = 'three';
+ inscrutable(b2).afield = 'four';
+
+ Expect.equals('three', inscrutable(b1).afield);
+ Expect.equals('four', inscrutable(b1).afield);
+
+ Expect.equals('afun:three', inscrutable(b1).afun());
+ Expect.equals('afun:four', inscrutable(b2).afun());
+}
+
+main() {
+ setup();
+ inscrutable = (x) => x;
+
+ setNativeSubclassDispatchRecord(getBBPrototype(), findInterceptorForType(BB));
+
+ testSuperOnNative();
+ testSuperOnSubclassOfNative();
+}
diff --git a/tests/corelib/corelib.status b/tests/corelib/corelib.status
index 90f4ff8..cf4eb74 100644
--- a/tests/corelib/corelib.status
+++ b/tests/corelib/corelib.status
@@ -112,13 +112,11 @@
map_keys2_test: RuntimeError # Generic types aren't right.
[ $compiler == dart2js ]
-map_values2_test: RuntimeError # Generic types aren't right
+map_values2_test: RuntimeError # Issue 8210
## Tests failing after merge of experimental library branch.
[ $compiler == dart2js ]
# Tests fail due to bug in generics on constants, issue 6827
-iterable_to_list_test: RuntimeError
-iterable_to_set_test: RuntimeError
[ $compiler == dart2dart && $minified ]
error_stack_trace1_test: Fail # Fails in minified mode, test depends on method names.
diff --git a/tests/html/typed_arrays_simd_test.dart b/tests/html/typed_arrays_simd_test.dart
index f75ad2a..b0e3176 100644
--- a/tests/html/typed_arrays_simd_test.dart
+++ b/tests/html/typed_arrays_simd_test.dart
@@ -37,8 +37,8 @@
expect(val2.x, floatEquals(2.0));
expect(val2.y, floatEquals(4.0));
expect(val2.z, floatEquals(6.0));
- expect(val2.w, floatEquals(8.0));
- }
+ expect(val2.w, floatEquals(8.0));
+ }
});
test('test Float32x4List', () {
@@ -68,9 +68,9 @@
expect(counter.w, floatEquals(21.0));
});
- test('test Uint32x4', () {
+ test('test Int32x4', () {
if (Platform.supportsSimd) {
- final val = new Uint32x4(1, 2, 3, 4);
+ final val = new Int32x4(1, 2, 3, 4);
expect(val.x, equals(1));
expect(val.y, equals(2));
expect(val.z, equals(3));
@@ -79,7 +79,7 @@
expect(val2.x, equals(0));
expect(val2.y, equals(0));
expect(val2.z, equals(0));
- expect(val2.w, equals(0));
- }
+ expect(val2.w, equals(0));
+ }
});
}
diff --git a/tests/isolate/browser/typed_data_message_test.dart b/tests/isolate/browser/typed_data_message_test.dart
index e448390..9432290 100644
--- a/tests/isolate/browser/typed_data_message_test.dart
+++ b/tests/isolate/browser/typed_data_message_test.dart
@@ -66,7 +66,7 @@
SendPort replyTo = message[1];
if (data == -1) {
port.close();
- replyTo.send(count, null);
+ replyTo.send(count);
} else {
// Check if the received object is correct.
if (count < elements.length) {
@@ -74,7 +74,7 @@
}
// Bounce the received object back so that the sender
// can make sure that the object matches.
- replyTo.send(data, null);
+ replyTo.send(data);
count++;
}
});
diff --git a/tests/isolate/isolate.status b/tests/isolate/isolate.status
index fa6c738..a31db8c 100644
--- a/tests/isolate/isolate.status
+++ b/tests/isolate/isolate.status
@@ -15,7 +15,7 @@
isolate2_negative_test: Fail
isolate_import_negative_test: Fail
unresolved_ports_test: Pass
-mandel_isolate_test: Fail # issue 14452
+mandel_isolate_test: StaticWarning # test issue 14782; unittestConfiguration.timeout has only getter in Configuration
[ $compiler == dart2js && $jscl ]
browser/*: SkipByDesign # Browser specific tests
@@ -123,11 +123,8 @@
browser/typed_data_message_test: StaticWarning
isolate3_negative_test: CompileTimeError
isolate_import_negative_test: CompileTimeError
-isolate/mint_maker_test: StaticWarning
-isolate/unresolved_ports_test: StaticWarning
-mandel_isolate_stream_test: StaticWarning
-mandel_isolate_test: StaticWarning
mint_maker_test: StaticWarning
serialization_test: StaticWarning
-unresolved_ports_test: StaticWarning
+isolate/unresolved_ports_test: StaticWarning
+mandel_isolate_stream_test: StaticWarning
diff --git a/tests/isolate/isolate_complex_messages_test.dart b/tests/isolate/isolate_complex_messages_test.dart
index effeffe..3a18ec5 100644
--- a/tests/isolate/isolate_complex_messages_test.dart
+++ b/tests/isolate/isolate_complex_messages_test.dart
@@ -18,12 +18,12 @@
switch (msg[0]) {
case "init":
var remote = msg[1];
- remote.send(1, null);
- remote.send("Hello", null);
- remote.send("World", null);
- remote.send(const [null, 1, 2, 3, 4], null);
- remote.send(const [1, 2.0, true, false, 0xffffffffff], null);
- remote.send(const ["Hello", "World", 0xffffffffff], null);
+ remote.send(1);
+ remote.send("Hello");
+ remote.send("World");
+ remote.send(const [null, 1, 2, 3, 4]);
+ remote.send(const [1, 2.0, true, false, 0xffffffffff]);
+ remote.send(const ["Hello", "World", 0xffffffffff]);
// Shutdown the LogRunner.
remote.send(-1);
break;
diff --git a/tests/language/bailout3_test.dart b/tests/language/bailout3_test.dart
deleted file mode 100644
index ca8441e..0000000
--- a/tests/language/bailout3_test.dart
+++ /dev/null
@@ -1,41 +0,0 @@
-// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-import "package:expect/expect.dart";
-
-// Test that the return type of a method is being registered for both
-// its bailout and optimized version in dart2js.
-
-var a;
-
-bar() {
- if (a[0] == 0) {
- // Force bailout version.
- bar();
- // Avoid inlining.
- throw 0;
- }
- for (int i = 0; i < 10; i++) {
- a[0] = 42;
- }
- // This return should say that bar can return an array or unknown.
- return a;
-}
-
-foo() {
- if (a[0] == 0) {
- // Avoid inlining.
- throw 0;
- }
- var a = bar();
- // This check used to fail because dart2js was assuming [a] was an
- // array.
- Expect.equals(1, a.length);
-}
-
-main() {
- a = new Map();
- bar();
- foo();
-}
diff --git a/tests/language/block_scope_test.dart b/tests/language/block_scope_test.dart
deleted file mode 100644
index cc19981..0000000
--- a/tests/language/block_scope_test.dart
+++ /dev/null
@@ -1,72 +0,0 @@
-// Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-import "package:expect/expect.dart";
-
-foo() => 123;
-
-void testShadowingScope1() {
- var foo = foo();
- Expect.equals(123, foo);
-}
-
-void testShadowingScope2() {
- {
- var foo = foo() + 444;
- Expect.equals(567, foo);
- }
- Expect.equals(123, foo());
-}
-
-void testShadowingCapture1() {
- var f;
- {
- var foo = 888;
- f = () => foo;
- }
- var foo = -888;
- Expect.equals(888, f());
-}
-
-void testShadowingCapture2() {
- var f = null;
- // this one uses a reentrant block
- for (int i = 0; i < 2; i++) {
- var foo = i + 888;
- if (f == null) f = () => foo;
- }
- var foo = -888;
-
- // this could break if it doesn't bind the right "foo"
- Expect.equals(888, f());
-}
-
-class BlockScopeTest1 {
- void testShadowingInstanceVar() {
- if (true) {
- var foo = foo() + 444;
- Expect.equals(1221, foo);
- }
- Expect.equals(777, foo());
- }
- static void testShadowingStatic() {
- if (true) {
- var bar = bar() + 444;
- Expect.equals(1221, bar);
- }
- Expect.equals(777, bar());
- }
-
- foo() => 777;
- static bar() => 777;
-}
-
-main() {
- testShadowingScope1();
- testShadowingScope2();
- testShadowingCapture1();
- testShadowingCapture2();
- new BlockScopeTest1().testShadowingInstanceVar();
- BlockScopeTest1.testShadowingStatic();
-}
diff --git a/tests/language/export_ambiguous_main_a.dart b/tests/language/export_ambiguous_main_a.dart
new file mode 100644
index 0000000..4a7b820
--- /dev/null
+++ b/tests/language/export_ambiguous_main_a.dart
@@ -0,0 +1,9 @@
+// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+library export_ambiguous_main_a;
+
+main() {
+ print('export_ambiguous_main_a');
+}
diff --git a/tests/language/export_ambiguous_main_b.dart b/tests/language/export_ambiguous_main_b.dart
new file mode 100644
index 0000000..734a620
--- /dev/null
+++ b/tests/language/export_ambiguous_main_b.dart
@@ -0,0 +1,9 @@
+// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+library export_ambiguous_main_b;
+
+main() {
+ print('export_ambiguous_main_b');
+}
diff --git a/tests/language/export_ambiguous_main_negative_test.dart b/tests/language/export_ambiguous_main_negative_test.dart
new file mode 100644
index 0000000..6087c67
--- /dev/null
+++ b/tests/language/export_ambiguous_main_negative_test.dart
@@ -0,0 +1,6 @@
+// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+export 'export_ambiguous_main_a.dart';
+export 'export_ambiguous_main_b.dart';
diff --git a/tests/language/export_double_same_main_test.dart b/tests/language/export_double_same_main_test.dart
new file mode 100644
index 0000000..68ad600
--- /dev/null
+++ b/tests/language/export_double_same_main_test.dart
@@ -0,0 +1,6 @@
+// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+export 'top_level_entry_test.dart';
+export 'export_main_test.dart' show main;
diff --git a/tests/language/export_main_override_test.dart b/tests/language/export_main_override_test.dart
new file mode 100644
index 0000000..6578288
--- /dev/null
+++ b/tests/language/export_main_override_test.dart
@@ -0,0 +1,9 @@
+// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+export 'top_level_entry_test.dart';
+
+main() {
+ print('export_main_override');
+}
diff --git a/tests/language/export_main_test.dart b/tests/language/export_main_test.dart
new file mode 100644
index 0000000..1e920a7
--- /dev/null
+++ b/tests/language/export_main_test.dart
@@ -0,0 +1,5 @@
+// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+export 'top_level_entry_test.dart';
diff --git a/tests/language/hello_dart_test.dart b/tests/language/hello_dart_test.dart
index a60a5fa..dac39a4 100644
--- a/tests/language/hello_dart_test.dart
+++ b/tests/language/hello_dart_test.dart
@@ -3,7 +3,7 @@
// BSD-style license that can be found in the LICENSE file.
// Simple test program invoked with an option to eagerly
// compile all code that is loaded in the isolate.
-// VMOptions=--compile_all
+// VMOptions=--compile_all --error-on-bad-type --error-on-bad-override
class HelloDartTest {
static testMain() {
diff --git a/tests/language/language.status b/tests/language/language.status
index 93c1e4b..fe6ff4e 100644
--- a/tests/language/language.status
+++ b/tests/language/language.status
@@ -48,6 +48,9 @@
call_test: Fail # Issue 12602
dynamic_prefix_core_test: Fail # Issue 12478
+[ $compiler == none && ($runtime == vm || $runtime == drt || $runtime == dartium) ]
+export_ambiguous_main_negative_test: Fail # Issue 14763
+
[ $compiler == none && $runtime == drt ]
mixin_illegal_object_test/01: pass # Issue 10952.
mixin_illegal_object_test/02: pass # Issue 10952.
diff --git a/tests/language/language_analyzer.status b/tests/language/language_analyzer.status
index bf10504..2b8d307d 100644
--- a/tests/language/language_analyzer.status
+++ b/tests/language/language_analyzer.status
@@ -21,13 +21,15 @@
method_override7_test/03: Fail # Issue 11496
method_override8_test/03: Fail # Issue 11496
-built_in_identifier_test/none: Fail # Issue 13023
+export_double_same_main_test: Fail # Issue 14772
# Please add new failing tests before this line.
# Section below is for invalid tests.
#
#
+ref_before_declaration_test/07: fail # please triage
+ref_before_declaration_test/none: fail # please triage
# test issue 11124, It is warning, not error to don't initialize final field
field3a_negative_test: Fail # Issue 11124
@@ -134,8 +136,8 @@
# test issue 13916, Looks as no warning should be in this redirecting factory
redirecting_factory_infinite_steps_test/01: fail
-# test issue , disallow default values in redirecting factories
-redirecting_factory_default_values_test/none: fail # Issue 14471
+# test issue 14471, has (legitimate) static warning; but not annotated
+redirecting_factory_default_values_test/none: StaticWarning # Test issue 14471; has (legitimate) static warning; but not annotated
# test issue 13956, It is a static type warning if any of the type arguments to k' are not subtypes of the bounds of the corresponding formal type parameters of type.
default_factory2_test/none: fail
@@ -153,10 +155,6 @@
# test issue 14228
black_listed_test/none: fail # test issue 14228, warnings are required but not expected
-# test issue 14289
-bailout3_test: fail # test issue 14289
-prefix9_test: fail # test issue 14289
-
# test issue 14363, "if ((a is B))" has the same effect as "if (a is B)", so no static warning expected
type_promotion_parameter_test/53: Fail
@@ -218,6 +216,7 @@
dynamic_prefix_core_test: StaticWarning
empty_block_case_test: StaticWarning
error_stacktrace_test: StaticWarning
+export_ambiguous_main_negative_test: CompileTimeError
extend_type_parameter2_negative_test: CompileTimeError
extend_type_parameter_negative_test: CompileTimeError
external_test/20: StaticWarning
@@ -313,6 +312,7 @@
method_override5_test: StaticWarning
method_override6_test: StaticWarning
method_override_test: StaticWarning
+mixin_illegal_static_access_test: StaticWarning
mixin_illegal_syntax_test/13: CompileTimeError
mixin_typedef_constructor_test: StaticWarning
mixin_type_parameter2_test: StaticWarning
@@ -392,7 +392,6 @@
prefix23_test: StaticWarning
prefix7_negative_test: CompileTimeError
property_field_override_test: StaticWarning
-redirecting_factory_default_values_test/none: StaticWarning
redirecting_factory_incompatible_signature_test: StaticWarning
regress_13494_test: StaticWarning
return_type_test: StaticWarning
diff --git a/tests/language/language_analyzer2.status b/tests/language/language_analyzer2.status
index 726f14e..5723b00 100644
--- a/tests/language/language_analyzer2.status
+++ b/tests/language/language_analyzer2.status
@@ -23,6 +23,8 @@
built_in_identifier_test/none: Fail # Issue 13023
+export_double_same_main_test: Fail # Issue 14772
+
# Please add new failing tests before this line.
# Section below is for invalid tests.
#
@@ -153,10 +155,6 @@
# test issue 14228
black_listed_test/none: fail # test issue 14228, warnings are required but not expected
-# test issue 14289
-bailout3_test: fail # test issue 14289
-prefix9_test: fail # test issue 14289
-
# test issue 14363, "if ((a is B))" has the same effect as "if (a is B)", so no static warning expected
type_promotion_parameter_test/53: Fail
@@ -218,6 +216,7 @@
dynamic_prefix_core_test: StaticWarning
empty_block_case_test: StaticWarning
error_stacktrace_test: StaticWarning
+export_ambiguous_main_negative_test: CompileTimeError
extend_type_parameter2_negative_test: CompileTimeError
extend_type_parameter_negative_test: CompileTimeError
external_test/20: StaticWarning
diff --git a/tests/language/language_dart2js.status b/tests/language/language_dart2js.status
index 03368b0..a77739b 100644
--- a/tests/language/language_dart2js.status
+++ b/tests/language/language_dart2js.status
@@ -4,7 +4,6 @@
[ $compiler == dart2js || $compiler == dart2dart ]
bad_constructor_test/05: CompileTimeError # Issue 13669
-block_scope_test: CompileTimeError # Issue 13204.
malformed_test/05: MissingCompileTimeError # Issue 12695
malformed_test/06: MissingCompileTimeError # Issue 12695
full_stacktrace1_test: Pass, RuntimeError # Issue 12698
@@ -24,6 +23,14 @@
type_variable_conflict_test/05: Fail # Issue 13702
type_variable_conflict_test/06: Fail # Issue 13702
+ref_before_declaration_test/00: MissingCompileTimeError
+ref_before_declaration_test/01: MissingCompileTimeError
+ref_before_declaration_test/02: MissingCompileTimeError
+ref_before_declaration_test/03: MissingCompileTimeError
+ref_before_declaration_test/04: MissingCompileTimeError
+ref_before_declaration_test/05: MissingCompileTimeError
+ref_before_declaration_test/06: MissingCompileTimeError
+
# VM specific tests that should not be run by dart2js.
vm/*: Skip # Issue 12699
@@ -130,7 +137,6 @@
map_literal3_test: CompileTimeError # Issue 12793
method_override5_test: RuntimeError # Issue 12809
external_test/13: CompileTimeError # Issue 12887
-instanceof4_test/01: RuntimeError # Issue 12889
list_literal4_test: RuntimeError # Issue 12890
map_literal4_test: RuntimeError # Issue 12891
built_in_identifier_test/01: CompileTimeError # Issue 13022
diff --git a/tests/language/prefix9_test.dart b/tests/language/prefix9_test.dart
deleted file mode 100644
index 6b6bc39..0000000
--- a/tests/language/prefix9_test.dart
+++ /dev/null
@@ -1,26 +0,0 @@
-// Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-//
-
-import "package:expect/expect.dart";
-
-// Local variables can shadow type parameters and hence should result in an
-// static warning.
-
-class Test<T> {
- Test.named(T this.fld);
- T fld;
-}
-
-class Param {
- Param.named(int this.fld);
- int fld;
-}
-
-main() {
- Param test = new Param.named(10);
- var Param;
- var i = new Test<Param>.named(test); // This should be a static warning.
- Expect.equals(10, i.fld.fld);
-}
diff --git a/tests/language/ref_before_declaration_test.dart b/tests/language/ref_before_declaration_test.dart
new file mode 100644
index 0000000..9ecbac7
--- /dev/null
+++ b/tests/language/ref_before_declaration_test.dart
@@ -0,0 +1,93 @@
+// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// Test compile-time errors for illegal variable declarations if the name
+// has been referenced before the variable is declared.
+
+import 'dart:math' as math;
+
+use(value) => value;
+
+var x = 0;
+final y = 0;
+
+class C {
+ var f;
+ C() : f = 'How do you spell PTSD?';
+
+ void test1() {
+ use(f); // Refers to instance field f.
+ var f = 'A shut mouth gathers no foot.'; /// 00: compile-time error
+ }
+
+ void test2() {
+ void localFunc() {
+ use(f); // Refers to instance field f.
+ }
+
+ var f = 'When chemists die, they barium.'; /// 01: compile-time error
+ if (true) {
+ var f = 1; // ok, shadows outer f and instance field f.
+ }
+ }
+
+ void test3() {
+ if (true) {
+ use(x); // Refers to top-level x.
+ use(y); // Refers to top-level y.
+ }
+ final x = "I have not yet begun to procrastinate."; /// 02: compile-time error
+ const y = "Honk if you like peace and quiet!"; /// 03: compile-time error
+ }
+
+ void test4() {
+ void Q() {
+ P(); // Refers to non-existing top-level function P
+ }
+ void P() { /// 06: compile-time error
+ Q(); /// 06: continued
+ } /// 06: continued
+
+ Function f = () {x = f;}; /// 07: compile-time error
+ }
+
+ test() {
+ test1();
+ test2();
+ test3();
+ test4();
+ }
+}
+
+void testTypeRef() {
+ String s = 'Can vegetarians eat animal crackers?';
+ var String = "I distinctly remember forgetting that."; /// 04: compile-time error
+}
+
+void testLibPrefix() {
+ var pie = math.PI;
+ final math = 0; /// 05: compile-time error
+}
+
+
+void noErrorsExpected() {
+ use(x);
+ for (var x = 0; x < 10; x++) use(x);
+ for (var i = 0; i < 10; i++) var x = 0;
+ if (true) var x = 0;
+ while (false) var x = 0;
+ try { throw "ball"; } catch (x) { use(x); }
+ switch (x) {
+ case 0: var x = 'Does fuzzy logic tickle?';
+ }
+ var int = 007;
+}
+
+void main() {
+ var c = new C();
+ c.test();
+ testTypeRef();
+ testLibPrefix();
+ noErrorsExpected();
+}
diff --git a/tests/lib/lib.status b/tests/lib/lib.status
index 8244ded..520fa72 100644
--- a/tests/lib/lib.status
+++ b/tests/lib/lib.status
@@ -253,7 +253,6 @@
mirrors/equality_test/02: StaticWarning # Issue 14524
mirrors/generic_f_bounded_mixin_application_test: CompileTimeError # Issue 14116
mirrors/invoke_named_test: StaticWarning # Issue 14522
-mirrors/metadata_allowed_values_test/none: CompileTimeError # Issue 14688
mirrors/private_symbol_test: StaticWarning # Issue 14524
mirrors/reflect_class_test: StaticWarning # Issue 14524
mirrors/type_variable_owner_test: StaticWarning # Issue 14524
diff --git a/tests/lib/typed_data/float32x4_test.dart b/tests/lib/typed_data/float32x4_test.dart
index bc1b164..c7df4a3 100644
--- a/tests/lib/typed_data/float32x4_test.dart
+++ b/tests/lib/typed_data/float32x4_test.dart
@@ -63,39 +63,39 @@
var n = new Float32x4(2.0, 2.0, 0.001, 0.1);
var cmp;
cmp = m.lessThan(n);
- Expect.equals(0xFFFFFFFF, cmp.x);
+ Expect.equals(-1, cmp.x);
Expect.equals(0x0, cmp.y);
Expect.equals(0x0, cmp.z);
- Expect.equals(0xFFFFFFFF, cmp.w);
+ Expect.equals(-1, cmp.w);
cmp = m.lessThanOrEqual(n);
- Expect.equals(0xFFFFFFFF, cmp.x);
- Expect.equals(0xFFFFFFFF, cmp.y);
+ Expect.equals(-1, cmp.x);
+ Expect.equals(-1, cmp.y);
Expect.equals(0x0, cmp.z);
- Expect.equals(0xFFFFFFFF, cmp.w);
+ Expect.equals(-1, cmp.w);
cmp = m.equal(n);
Expect.equals(0x0, cmp.x);
- Expect.equals(0xFFFFFFFF, cmp.y);
+ Expect.equals(-1, cmp.y);
Expect.equals(0x0, cmp.z);
Expect.equals(0x0, cmp.w);
cmp = m.notEqual(n);
- Expect.equals(0xFFFFFFFF, cmp.x);
+ Expect.equals(-1, cmp.x);
Expect.equals(0x0, cmp.y);
- Expect.equals(0xFFFFFFFF, cmp.z);
- Expect.equals(0xFFFFFFFF, cmp.w);
+ Expect.equals(-1, cmp.z);
+ Expect.equals(-1, cmp.w);
cmp = m.greaterThanOrEqual(n);
Expect.equals(0x0, cmp.x);
- Expect.equals(0xFFFFFFFF, cmp.y);
- Expect.equals(0xFFFFFFFF, cmp.z);
+ Expect.equals(-1, cmp.y);
+ Expect.equals(-1, cmp.z);
Expect.equals(0x0, cmp.w);
cmp = m.greaterThan(n);
Expect.equals(0x0, cmp.x);
Expect.equals(0x0, cmp.y);
- Expect.equals(0xFFFFFFFF, cmp.z);
+ Expect.equals(-1, cmp.z);
Expect.equals(0x0, cmp.w);
}
@@ -220,7 +220,7 @@
}
testSelect() {
- var m = new Uint32x4.bool(true, true, false, false);
+ var m = new Int32x4.bool(true, true, false, false);
var t = new Float32x4(1.0, 2.0, 3.0, 4.0);
var f = new Float32x4(5.0, 6.0, 7.0, 8.0);
var s = m.select(t, f);
@@ -231,31 +231,31 @@
}
testConversions() {
- var m = new Uint32x4(0x3F800000, 0x40000000, 0x40400000, 0x40800000);
- var n = new Float32x4.fromUint32x4Bits(m);
+ var m = new Int32x4(0x3F800000, 0x40000000, 0x40400000, 0x40800000);
+ var n = new Float32x4.fromInt32x4Bits(m);
Expect.equals(1.0, n.x);
Expect.equals(2.0, n.y);
Expect.equals(3.0, n.z);
Expect.equals(4.0, n.w);
n = new Float32x4(5.0, 6.0, 7.0, 8.0);
- m = new Uint32x4.fromFloat32x4Bits(n);
+ m = new Int32x4.fromFloat32x4Bits(n);
Expect.equals(0x40A00000, m.x);
Expect.equals(0x40C00000, m.y);
Expect.equals(0x40E00000, m.z);
Expect.equals(0x41000000, m.w);
// Flip sign using bit-wise operators.
n = new Float32x4(9.0, 10.0, 11.0, 12.0);
- m = new Uint32x4(0x80000000, 0x80000000, 0x80000000, 0x80000000);
- var nMask = new Uint32x4.fromFloat32x4Bits(n);
+ m = new Int32x4(0x80000000, 0x80000000, 0x80000000, 0x80000000);
+ var nMask = new Int32x4.fromFloat32x4Bits(n);
nMask = nMask ^ m; // flip sign.
- n = new Float32x4.fromUint32x4Bits(nMask);
+ n = new Float32x4.fromInt32x4Bits(nMask);
Expect.equals(-9.0, n.x);
Expect.equals(-10.0, n.y);
Expect.equals(-11.0, n.z);
Expect.equals(-12.0, n.w);
- nMask = new Uint32x4.fromFloat32x4Bits(n);
+ nMask = new Int32x4.fromFloat32x4Bits(n);
nMask = nMask ^ m; // flip sign.
- n = new Float32x4.fromUint32x4Bits(nMask);
+ n = new Float32x4.fromInt32x4Bits(nMask);
Expect.equals(9.0, n.x);
Expect.equals(10.0, n.y);
Expect.equals(11.0, n.z);
@@ -264,25 +264,25 @@
testBitOperators() {
- var m = new Uint32x4(0xAAAAAAAA, 0xAAAAAAAA, 0xAAAAAAAA, 0xAAAAAAAA);
- var n = new Uint32x4(0x55555555, 0x55555555, 0x55555555, 0x55555555);
- Expect.equals(0xAAAAAAAA, m.x);
- Expect.equals(0xAAAAAAAA, m.y);
- Expect.equals(0xAAAAAAAA, m.z);
- Expect.equals(0xAAAAAAAA, m.w);
- Expect.equals(0x55555555, n.x);
- Expect.equals(0x55555555, n.y);
- Expect.equals(0x55555555, n.z);
- Expect.equals(0x55555555, n.w);
+ var m = new Int32x4(0xAAAAAAA, 0xAAAAAAA, 0xAAAAAAA, 0xAAAAAAA);
+ var n = new Int32x4(0x5555555, 0x5555555, 0x5555555, 0x5555555);
+ Expect.equals(0xAAAAAAA, m.x);
+ Expect.equals(0xAAAAAAA, m.y);
+ Expect.equals(0xAAAAAAA, m.z);
+ Expect.equals(0xAAAAAAA, m.w);
+ Expect.equals(0x5555555, n.x);
+ Expect.equals(0x5555555, n.y);
+ Expect.equals(0x5555555, n.z);
+ Expect.equals(0x5555555, n.w);
Expect.equals(true, n.flagX);
Expect.equals(true, n.flagY);
Expect.equals(true, n.flagZ);
Expect.equals(true, n.flagW);
var o = m|n; // or
- Expect.equals(0xFFFFFFFF, o.x);
- Expect.equals(0xFFFFFFFF, o.y);
- Expect.equals(0xFFFFFFFF, o.z);
- Expect.equals(0xFFFFFFFF, o.w);
+ Expect.equals(0xFFFFFFF, o.x);
+ Expect.equals(0xFFFFFFF, o.y);
+ Expect.equals(0xFFFFFFF, o.z);
+ Expect.equals(0xFFFFFFF, o.w);
Expect.equals(true, o.flagX);
Expect.equals(true, o.flagY);
Expect.equals(true, o.flagZ);
@@ -292,14 +292,14 @@
Expect.equals(0x0, o.y);
Expect.equals(0x0, o.z);
Expect.equals(0x0, o.w);
- n = n.withX(0xAAAAAAAA);
- n = n.withY(0xAAAAAAAA);
- n = n.withZ(0xAAAAAAAA);
- n = n.withW(0xAAAAAAAA);
- Expect.equals(0xAAAAAAAA, n.x);
- Expect.equals(0xAAAAAAAA, n.y);
- Expect.equals(0xAAAAAAAA, n.z);
- Expect.equals(0xAAAAAAAA, n.w);
+ n = n.withX(0xAAAAAAA);
+ n = n.withY(0xAAAAAAA);
+ n = n.withZ(0xAAAAAAA);
+ n = n.withW(0xAAAAAAA);
+ Expect.equals(0xAAAAAAA, n.x);
+ Expect.equals(0xAAAAAAA, n.y);
+ Expect.equals(0xAAAAAAA, n.z);
+ Expect.equals(0xAAAAAAA, n.w);
o = m^n; // xor
Expect.equals(0x0, o.x);
Expect.equals(0x0, o.y);
@@ -331,7 +331,7 @@
Expect.equals(3.0, f.y);
Expect.equals(2.0, f.z);
Expect.equals(1.0, f.w);
- var m = new Uint32x4.bool(false, false, false, false);
+ var m = new Int32x4.bool(false, false, false, false);
Expect.equals(false, m.flagX);
Expect.equals(false, m.flagY);
Expect.equals(false, m.flagZ);
@@ -364,7 +364,7 @@
Expect.equals(2.0, f.y);
Expect.equals(3.0, f.z);
Expect.equals(4.0, f.w);
- var m = new Uint32x4.bool(false, true, true, false);
+ var m = new Int32x4.bool(false, true, true, false);
Expect.equals(false, m.flagX);
Expect.equals(true, m.flagY);
Expect.equals(true, m.flagZ);
diff --git a/tests/lib/typed_data/float32x4_unbox_regress_test.dart b/tests/lib/typed_data/float32x4_unbox_regress_test.dart
index e179f95..b288fb3 100644
--- a/tests/lib/typed_data/float32x4_unbox_regress_test.dart
+++ b/tests/lib/typed_data/float32x4_unbox_regress_test.dart
@@ -74,7 +74,7 @@
}
void testComparison(a, b) {
- Uint32x4 r = a.equal(b);
+ Int32x4 r = a.equal(b);
Expect.equals(true, r.flagX);
Expect.equals(false, r.flagY);
Expect.equals(false, r.flagZ);
diff --git a/tests/lib/typed_data/int32x4_arithmetic_test.dart b/tests/lib/typed_data/int32x4_arithmetic_test.dart
new file mode 100644
index 0000000..37094f8
--- /dev/null
+++ b/tests/lib/typed_data/int32x4_arithmetic_test.dart
@@ -0,0 +1,99 @@
+// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+// VMOptions=--deoptimization_counter_threshold=1000 --optimization-counter-threshold=10
+
+// Library tag to be able to run in html test framework.
+library uint32x4_arithmetic_test;
+
+import "package:expect/expect.dart";
+import 'dart:typed_data';
+
+testAdd() {
+ var m = new Int32x4(0, 0, 0, 0);
+ var n = new Int32x4(-1, -1, -1, -1);
+ var o = m + n;
+ Expect.equals(-1, o.x);
+ Expect.equals(-1, o.y);
+ Expect.equals(-1, o.z);
+ Expect.equals(-1, o.w);
+
+ m = new Int32x4(0, 0, 0, 0);
+ n = new Int32x4(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF);
+ o = m + n;
+ Expect.equals(-1, o.x);
+ Expect.equals(-1, o.y);
+ Expect.equals(-1, o.z);
+ Expect.equals(-1, o.w);
+
+ n = new Int32x4(1, 1, 1, 1);
+ m = new Int32x4(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF);
+ o = m + n;
+ Expect.equals(0, o.x);
+ Expect.equals(0, o.y);
+ Expect.equals(0, o.z);
+ Expect.equals(0, o.w);
+
+ n = new Int32x4(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF);
+ m = new Int32x4(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF);
+ o = m + n;
+ Expect.equals(-2, o.x);
+ Expect.equals(-2, o.y);
+ Expect.equals(-2, o.z);
+ Expect.equals(-2, o.w);
+
+ n = new Int32x4(1, 0, 0, 0);
+ m = new Int32x4(2, 0, 0, 0);
+ o = n + m;
+ Expect.equals(3, o.x);
+ Expect.equals(0, o.y);
+ Expect.equals(0, o.z);
+ Expect.equals(0, o.w);
+
+ n = new Int32x4(1, 3, 0, 0);
+ m = new Int32x4(2, 4, 0, 0);
+ o = n + m;
+ Expect.equals(3, o.x);
+ Expect.equals(7, o.y);
+ Expect.equals(0, o.z);
+ Expect.equals(0, o.w);
+
+ n = new Int32x4(1, 3, 5, 0);
+ m = new Int32x4(2, 4, 6, 0);
+ o = n + m;
+ Expect.equals(3, o.x);
+ Expect.equals(7, o.y);
+ Expect.equals(11, o.z);
+ Expect.equals(0, o.w);
+
+ n = new Int32x4(1, 3, 5, 7);
+ m = new Int32x4(-2, -4, -6, -8);
+ o = n + m;
+ Expect.equals(-1, o.x);
+ Expect.equals(-1, o.y);
+ Expect.equals(-1, o.z);
+ Expect.equals(-1, o.w);
+}
+
+testSub() {
+ var m = new Int32x4(0, 0, 0, 0);
+ var n = new Int32x4(1, 1, 1, 1);
+ var o = m - n;
+ Expect.equals(-1, o.x);
+ Expect.equals(-1, o.y);
+ Expect.equals(-1, o.z);
+ Expect.equals(-1, o.w);
+
+ o = n - m;
+ Expect.equals(1, o.x);
+ Expect.equals(1, o.y);
+ Expect.equals(1, o.z);
+ Expect.equals(1, o.w);
+}
+
+main() {
+ for (int i = 0; i < 20; i++) {
+ testAdd();
+ testSub();
+ }
+}
diff --git a/tests/lib/typed_data/uint32x4_list_test.dart b/tests/lib/typed_data/int32x4_list_test.dart
similarity index 87%
rename from tests/lib/typed_data/uint32x4_list_test.dart
rename to tests/lib/typed_data/int32x4_list_test.dart
index b9bae4e..1ee42b6 100644
--- a/tests/lib/typed_data/uint32x4_list_test.dart
+++ b/tests/lib/typed_data/int32x4_list_test.dart
@@ -4,15 +4,15 @@
// VMOptions=--deoptimization_counter_threshold=1000 --optimization-counter-threshold=10
// Library tag to be able to run in html test framework.
-library uint32x4_list_test;
+library int32x4_list_test;
import 'package:expect/expect.dart';
import 'dart:typed_data';
testLoadStore(array) {
Expect.equals(8, array.length);
- Expect.isTrue(array is List<Uint32x4>);
- array[0] = new Uint32x4(1, 2, 3, 4);
+ Expect.isTrue(array is List<Int32x4>);
+ array[0] = new Int32x4(1, 2, 3, 4);
Expect.equals(1, array[0].x);
Expect.equals(2, array[0].y);
Expect.equals(3, array[0].z);
@@ -38,8 +38,8 @@
}
testLoadStoreDeoptDriver() {
- Uint32x4List list = new Uint32x4List(4);
- Uint32x4 value = new Uint32x4(1, 2, 3, 4);
+ Int32x4List list = new Int32x4List(4);
+ Int32x4 value = new Int32x4(1, 2, 3, 4);
for (int i = 0; i < 20; i++) {
testLoadStoreDeopt(list, 0, value);
}
@@ -72,15 +72,15 @@
testLoadStoreDeopt(list, 0, value);
}
try {
- // non-Uint32x4 value.
+ // non-Int32x4 value.
testLoadStoreDeopt(list, 0, 4.toDouble());
} catch (_) {}
for (int i = 0; i < 20; i++) {
testLoadStoreDeopt(list, 0, value);
}
try {
- // non-Uint32x4List list.
- testLoadStoreDeopt([new Uint32x4(2, 3, 4, 5)], 0, value);
+ // non-Int32x4List list.
+ testLoadStoreDeopt([new Int32x4(2, 3, 4, 5)], 0, value);
} catch (_) {}
for (int i = 0; i < 20; i++) {
testLoadStoreDeopt(list, 0, value);
@@ -88,7 +88,7 @@
}
testListZero() {
- Uint32x4List list = new Uint32x4List(1);
+ Int32x4List list = new Int32x4List(1);
Expect.equals(0, list[0].x);
Expect.equals(0, list[0].y);
Expect.equals(0, list[0].z);
@@ -97,7 +97,7 @@
testView(array) {
Expect.equals(8, array.length);
- Expect.isTrue(array is List<Uint32x4>);
+ Expect.isTrue(array is List<Int32x4>);
Expect.equals(0, array[0].x);
Expect.equals(1, array[0].y);
Expect.equals(2, array[0].z);
@@ -110,7 +110,7 @@
testSublist(array) {
Expect.equals(8, array.length);
- Expect.isTrue(array is Uint32x4List);
+ Expect.isTrue(array is Int32x4List);
var a = array.sublist(0, 1);
Expect.equals(1, a.length);
Expect.equals(0, a[0].x);
@@ -135,7 +135,7 @@
main() {
var list;
- list = new Uint32x4List(8);
+ list = new Int32x4List(8);
for (int i = 0; i < 20; i++) {
testLoadStore(list);
}
@@ -144,7 +144,7 @@
for (int i = 0; i < uint32List.length; i++) {
uint32List[i] = i;
}
- list = new Uint32x4List.view(uint32List.buffer);
+ list = new Int32x4List.view(uint32List.buffer);
for (int i = 0; i < 20; i++) {
testView(list);
}
diff --git a/tests/lib/typed_data/uint32x4_shuffle_test.dart b/tests/lib/typed_data/int32x4_shuffle_test.dart
similarity index 78%
rename from tests/lib/typed_data/uint32x4_shuffle_test.dart
rename to tests/lib/typed_data/int32x4_shuffle_test.dart
index f3335a8..28e4eeb 100644
--- a/tests/lib/typed_data/uint32x4_shuffle_test.dart
+++ b/tests/lib/typed_data/int32x4_shuffle_test.dart
@@ -10,9 +10,9 @@
import 'dart:typed_data';
void testShuffle() {
- var m = new Uint32x4(1, 2, 3, 4);
+ var m = new Int32x4(1, 2, 3, 4);
var c;
- c = m.shuffle(Uint32x4.WZYX);
+ c = m.shuffle(Int32x4.WZYX);
Expect.equals(4, c.x);
Expect.equals(3, c.y);
Expect.equals(2, c.z);
@@ -20,7 +20,7 @@
}
void testShuffleNonConstant(mask) {
- var m = new Uint32x4(1, 2, 3, 4);
+ var m = new Int32x4(1, 2, 3, 4);
var c;
c = m.shuffle(mask);
if (mask == 1) {
@@ -29,7 +29,7 @@
Expect.equals(1, c.z);
Expect.equals(1, c.w);
} else {
- Expect.equals(Uint32x4.YYYY + 1, mask);
+ Expect.equals(Int32x4.YYYY + 1, mask);
Expect.equals(3, c.x);
Expect.equals(2, c.y);
Expect.equals(2, c.z);
@@ -38,9 +38,9 @@
}
void testShuffleMix() {
- var m = new Uint32x4(1, 2, 3, 4);
- var n = new Uint32x4(5, 6, 7, 8);
- var c = m.shuffleMix(n, Uint32x4.XYXY);
+ var m = new Int32x4(1, 2, 3, 4);
+ var n = new Int32x4(5, 6, 7, 8);
+ var c = m.shuffleMix(n, Int32x4.XYXY);
Expect.equals(1, c.x);
Expect.equals(2, c.y);
Expect.equals(5, c.z);
@@ -48,8 +48,8 @@
}
main() {
- var xxxx = Uint32x4.XXXX + 1;
- var yyyy = Uint32x4.YYYY + 1;
+ var xxxx = Int32x4.XXXX + 1;
+ var yyyy = Int32x4.YYYY + 1;
for (int i = 0; i < 20; i++) {
testShuffle();
testShuffleNonConstant(xxxx);
diff --git a/tests/lib/typed_data/uint32x4_sign_mask_test.dart b/tests/lib/typed_data/int32x4_sign_mask_test.dart
similarity index 65%
rename from tests/lib/typed_data/uint32x4_sign_mask_test.dart
rename to tests/lib/typed_data/int32x4_sign_mask_test.dart
index 052d0bf..b4e620e 100644
--- a/tests/lib/typed_data/uint32x4_sign_mask_test.dart
+++ b/tests/lib/typed_data/int32x4_sign_mask_test.dart
@@ -4,45 +4,45 @@
// VMOptions=--optimization-counter-threshold=10
// Library tag to be able to run in html test framework.
-library uint32x4_sign_mask;
+library int32x4_sign_mask;
import 'dart:typed_data';
import 'package:expect/expect.dart';
void testImmediates() {
- var f = new Uint32x4(1, 2, 3, 4);
+ var f = new Int32x4(1, 2, 3, 4);
var m = f.signMask;
Expect.equals(0x0, m);
- f = new Uint32x4(-1, -2, -3, -4);
+ f = new Int32x4(-1, -2, -3, -4);
m = f.signMask;
Expect.equals(0xf, m);
- f = new Uint32x4.bool(true, false, false, false);
+ f = new Int32x4.bool(true, false, false, false);
m = f.signMask;
Expect.equals(0x1, m);
- f = new Uint32x4.bool(false, true, false, false);
+ f = new Int32x4.bool(false, true, false, false);
m = f.signMask;
Expect.equals(0x2, m);
- f = new Uint32x4.bool(false, false, true, false);
+ f = new Int32x4.bool(false, false, true, false);
m = f.signMask;
Expect.equals(0x4, m);
- f = new Uint32x4.bool(false, false, false, true);
+ f = new Int32x4.bool(false, false, false, true);
m = f.signMask;
Expect.equals(0x8, m);
}
void testZero() {
- var f = new Uint32x4(0, 0, 0, 0);
+ var f = new Int32x4(0, 0, 0, 0);
var m = f.signMask;
Expect.equals(0x0, m);
- f = new Uint32x4(-0, -0, -0, -0);
+ f = new Int32x4(-0, -0, -0, -0);
m = f.signMask;
Expect.equals(0x0, m);
}
void testLogic() {
- var a = new Uint32x4(0x80000000, 0x80000000, 0x80000000, 0x80000000);
- var b = new Uint32x4(0x70000000, 0x70000000, 0x70000000, 0x70000000);
- var c = new Uint32x4(0xf0000000, 0xf0000000, 0xf0000000, 0xf0000000);
+ var a = new Int32x4(0x80000000, 0x80000000, 0x80000000, 0x80000000);
+ var b = new Int32x4(0x70000000, 0x70000000, 0x70000000, 0x70000000);
+ var c = new Int32x4(0xf0000000, 0xf0000000, 0xf0000000, 0xf0000000);
var m1 = (a & c).signMask;
Expect.equals(0xf, m1);
var m2 = (a & b).signMask;
diff --git a/tests/lib/typed_data/uint32x4_arithmetic_test.dart b/tests/lib/typed_data/uint32x4_arithmetic_test.dart
deleted file mode 100644
index a702082..0000000
--- a/tests/lib/typed_data/uint32x4_arithmetic_test.dart
+++ /dev/null
@@ -1,99 +0,0 @@
-// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-// VMOptions=--deoptimization_counter_threshold=1000 --optimization-counter-threshold=10
-
-// Library tag to be able to run in html test framework.
-library uint32x4_arithmetic_test;
-
-import "package:expect/expect.dart";
-import 'dart:typed_data';
-
-testAdd() {
- var m = new Uint32x4(0, 0, 0, 0);
- var n = new Uint32x4(-1, -1, -1, -1);
- var o = m + n;
- Expect.equals(4294967295, o.x);
- Expect.equals(4294967295, o.y);
- Expect.equals(4294967295, o.z);
- Expect.equals(4294967295, o.w);
-
- m = new Uint32x4(0, 0, 0, 0);
- n = new Uint32x4(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF);
- o = m + n;
- Expect.equals(4294967295, o.x);
- Expect.equals(4294967295, o.y);
- Expect.equals(4294967295, o.z);
- Expect.equals(4294967295, o.w);
-
- n = new Uint32x4(1, 1, 1, 1);
- m = new Uint32x4(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF);
- o = m + n;
- Expect.equals(0, o.x);
- Expect.equals(0, o.y);
- Expect.equals(0, o.z);
- Expect.equals(0, o.w);
-
- n = new Uint32x4(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF);
- m = new Uint32x4(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF);
- o = m + n;
- Expect.equals(4294967294, o.x);
- Expect.equals(4294967294, o.y);
- Expect.equals(4294967294, o.z);
- Expect.equals(4294967294, o.w);
-
- n = new Uint32x4(1, 0, 0, 0);
- m = new Uint32x4(2, 0, 0, 0);
- o = n + m;
- Expect.equals(3, o.x);
- Expect.equals(0, o.y);
- Expect.equals(0, o.z);
- Expect.equals(0, o.w);
-
- n = new Uint32x4(1, 3, 0, 0);
- m = new Uint32x4(2, 4, 0, 0);
- o = n + m;
- Expect.equals(3, o.x);
- Expect.equals(7, o.y);
- Expect.equals(0, o.z);
- Expect.equals(0, o.w);
-
- n = new Uint32x4(1, 3, 5, 0);
- m = new Uint32x4(2, 4, 6, 0);
- o = n + m;
- Expect.equals(3, o.x);
- Expect.equals(7, o.y);
- Expect.equals(11, o.z);
- Expect.equals(0, o.w);
-
- n = new Uint32x4(1, 3, 5, 7);
- m = new Uint32x4(2, 4, 6, 8);
- o = n + m;
- Expect.equals(3, o.x);
- Expect.equals(7, o.y);
- Expect.equals(11, o.z);
- Expect.equals(15, o.w);
-}
-
-testSub() {
- var m = new Uint32x4(0, 0, 0, 0);
- var n = new Uint32x4(1, 1, 1, 1);
- var o = m - n;
- Expect.equals(4294967295, o.x);
- Expect.equals(4294967295, o.y);
- Expect.equals(4294967295, o.z);
- Expect.equals(4294967295, o.w);
-
- o = n - m;
- Expect.equals(1, o.x);
- Expect.equals(1, o.y);
- Expect.equals(1, o.z);
- Expect.equals(1, o.w);
-}
-
-main() {
- for (int i = 0; i < 20; i++) {
- testAdd();
- testSub();
- }
-}
diff --git a/tests/standalone/io/http_advanced_test.dart b/tests/standalone/io/http_advanced_test.dart
index 63a3be8..1c42e5e 100644
--- a/tests/standalone/io/http_advanced_test.dart
+++ b/tests/standalone/io/http_advanced_test.dart
@@ -219,16 +219,15 @@
HttpServer.bind("127.0.0.1", 0).then((server) {
_server = server;
_server.listen(_requestReceivedHandler);
- replyTo.send(new IsolatedHttpServerStatus.started(_server.port),
- null);
+ replyTo.send(new IsolatedHttpServerStatus.started(_server.port));
});
} catch (e) {
- replyTo.send(new IsolatedHttpServerStatus.error(), null);
+ replyTo.send(new IsolatedHttpServerStatus.error());
}
} else if (command.isStop) {
_server.close();
_dispatchPort.close();
- replyTo.send(new IsolatedHttpServerStatus.stopped(), null);
+ replyTo.send(new IsolatedHttpServerStatus.stopped());
} else if (command.isChunkedEncoding) {
_chunkedEncoding = true;
}
diff --git a/tests/standalone/io/http_basic_test.dart b/tests/standalone/io/http_basic_test.dart
index 2d7eebd..f30a32b 100644
--- a/tests/standalone/io/http_basic_test.dart
+++ b/tests/standalone/io/http_basic_test.dart
@@ -170,15 +170,15 @@
HttpServer.bind("127.0.0.1", 0).then((server) {
_server = server;
_server.listen(_requestReceivedHandler);
- replyTo.send(new TestServerStatus.started(_server.port), null);
+ replyTo.send(new TestServerStatus.started(_server.port));
});
} catch (e) {
- replyTo.send(new TestServerStatus.error(), null);
+ replyTo.send(new TestServerStatus.error());
}
} else if (command.isStop) {
_server.close();
_dispatchPort.close();
- replyTo.send(new TestServerStatus.stopped(), null);
+ replyTo.send(new TestServerStatus.stopped());
} else if (command.isChunkedEncoding) {
_chunkedEncoding = true;
}
diff --git a/tests/standalone/io/http_read_test.dart b/tests/standalone/io/http_read_test.dart
index 2a0ad52..23e40ab 100644
--- a/tests/standalone/io/http_read_test.dart
+++ b/tests/standalone/io/http_read_test.dart
@@ -138,16 +138,15 @@
HttpServer.bind("127.0.0.1", 0).then((server) {
_server = server;
_server.listen(_requestReceivedHandler);
- replyTo.send(
- new IsolatedHttpServerStatus.started(_server.port), null);
+ replyTo.send(new IsolatedHttpServerStatus.started(_server.port));
});
} catch (e) {
- replyTo.send(new IsolatedHttpServerStatus.error(), null);
+ replyTo.send(new IsolatedHttpServerStatus.error());
}
} else if (command.isStop) {
_server.close();
_dispatchPort.close();
- replyTo.send(new IsolatedHttpServerStatus.stopped(), null);
+ replyTo.send(new IsolatedHttpServerStatus.stopped());
} else if (command.isChunkedEncoding) {
_chunkedEncoding = true;
}
diff --git a/tests/standalone/io/socket_close_test.dart b/tests/standalone/io/socket_close_test.dart
index 475d97a..c00b89f 100644
--- a/tests/standalone/io/socket_close_test.dart
+++ b/tests/standalone/io/socket_close_test.dart
@@ -360,7 +360,7 @@
},
onError: errorHandlerServer
);
- replyTo.send(_server.port, null);
+ replyTo.send(_server.port);
});
} else {
Timer.run(waitForResult);
diff --git a/tests/standalone/package/package1_test.dart b/tests/standalone/package/package1_test.dart
index 0640511..20afaa0 100644
--- a/tests/standalone/package/package1_test.dart
+++ b/tests/standalone/package/package1_test.dart
@@ -5,4 +5,8 @@
// PackageRoot=none
library package1_test;
-import 'package:package1.dart';
+import 'package:package1.dart' as p1;
+
+main() {
+ p1.main();
+}
diff --git a/tools/VERSION b/tools/VERSION
index ee5729d..48bb6d6 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -1,4 +1,4 @@
MAJOR 0
MINOR 8
BUILD 10
-PATCH 3
+PATCH 4
diff --git a/tools/dom/docs/docs.json b/tools/dom/docs/docs.json
index 00cf4d1..905fdcb 100644
--- a/tools/dom/docs/docs.json
+++ b/tools/dom/docs/docs.json
@@ -1151,6 +1151,26 @@
" * See [EventStreamProvider] for usage information.",
" */"
],
+ "scrollByLines": [
+ "/**",
+ " * Scrolls the element by a number of lines.",
+ " *",
+ " * ## Other resources",
+ " *",
+ " * * [scrollByLines]",
+ " * (http://docs.webplatform.org/wiki/dom/methods/scrollByLines) from WebPlatform.org.",
+ " */"
+ ],
+ "scrollByPages": [
+ "/**",
+ " * Scrolls the element by a number of pages.",
+ " *",
+ " * ## Other resources",
+ " *",
+ " * * [scrollByPages]",
+ " * (http://docs.webplatform.org/wiki/dom/methods/scrollByPages) from WebPlatform.org.",
+ " */"
+ ],
"scrollEvent": [
"/**",
" * Static factory designed to expose `scroll` events to event",
@@ -1283,6 +1303,19 @@
" * See [EventStreamProvider] for usage information.",
" */"
],
+ "webkitGetRegionFlowRanges": [
+ "/**",
+ " * Returns an array of ranges of fragments in the flow.",
+ " *",
+ " * ## Other resources",
+ " *",
+ " * * [CSS regions and exclusions tutorial]",
+ " * (http://www.html5rocks.com/en/tutorials/regions/adobe/) from HTML5Rocks.",
+ " * * [Regions](http://html.adobe.com/webplatform/layout/regions/) from Adobe.",
+ " * * [CSS regions specification]",
+ " * (http://www.w3.org/TR/css3-regions/) from W3C.",
+ " */"
+ ],
"webkitRegionOverset": [
"/**",
" * The current state of this region.",
@@ -1300,6 +1333,33 @@
" * * [CSS regions specification]",
" * (http://www.w3.org/TR/css3-regions/) from W3C.",
" */"
+ ],
+ "webkitRequestFullscreen": [
+ "/**",
+ " * Displays this element fullscreen.",
+ " *",
+ " * ## Other resources",
+ " *",
+ " * * [Using the full-screen API]",
+ " * (http://docs.webplatform.org/wiki/tutorials/using_the_full-screen_api)",
+ " * tutorial from WebPlatform.org.",
+ " * * [Fullscreen specification]",
+ " * (http://www.w3.org/TR/fullscreen/) from W3C.",
+ " */"
+ ],
+ "webkitRequestPointerLock": [
+ "/**",
+ " * Locks the mouse pointer to this element.",
+ " *",
+ " * ## Other resources",
+ " *",
+ " * * [Pointer lock and first person shooter controls]",
+ " * (http://www.html5rocks.com/en/tutorials/pointerlock/intro/) tutorial from",
+ " * HTML5Rocks.",
+ " *",
+ " * * [Pointer lock specification]",
+ " * (http://www.w3.org/TR/pointerlock/) from W3C.",
+ " */"
]
}
},
diff --git a/tools/dom/templates/html/impl/impl_Element.darttemplate b/tools/dom/templates/html/impl/impl_Element.darttemplate
index 5c52b06..ded2ef0 100644
--- a/tools/dom/templates/html/impl/impl_Element.darttemplate
+++ b/tools/dom/templates/html/impl/impl_Element.darttemplate
@@ -796,6 +796,11 @@
@DomName('Element.namespaceUri')
String get namespaceUri => _namespaceUri;
+ /**
+ * The string representation of this element.
+ *
+ * This is equivalent to reading the [localName] property.
+ */
String toString() => localName;
/**