Version 1.8.0-dev.4.5
svn merge -c 41876 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
svn merge -c 41899 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
svn merge -c 41916 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
Merge patch from:
https://codereview.chromium.org/753463002/
git-svn-id: http://dart.googlecode.com/svn/trunk@41923 260f80e4-7a28-3924-810f-c04153c831b5
diff --git a/pkg/compiler/lib/src/js_backend/backend.dart b/pkg/compiler/lib/src/js_backend/backend.dart
index 893445ba..9864942 100644
--- a/pkg/compiler/lib/src/js_backend/backend.dart
+++ b/pkg/compiler/lib/src/js_backend/backend.dart
@@ -323,12 +323,6 @@
*/
final Set<ClassElement> specialOperatorEqClasses = new Set<ClassElement>();
- /**
- * A set of members that are called from subclasses via super.
- */
- final Set<FunctionElement> aliasedSuperMembers =
- new Setlet<FunctionElement>();
-
List<CompilerTask> get tasks {
return <CompilerTask>[builder, optimizer, generator, emitter];
}
@@ -534,20 +528,6 @@
return name;
}
- /**
- * Record that [method] is called from a subclass via `super`.
- */
- void registerAliasedSuperMember(FunctionElement method) {
- aliasedSuperMembers.add(method);
- }
-
- /**
- * Returns `true` is [member] is called from a subclass via `super`.
- */
- bool isAliasedSuperMember(FunctionElement member) {
- return aliasedSuperMembers.contains(member);
- }
-
bool isInterceptedMethod(Element element) {
if (!element.isInstanceMember) return false;
if (element.isGenerativeConstructorBody) {
diff --git a/pkg/compiler/lib/src/js_backend/minify_namer.dart b/pkg/compiler/lib/src/js_backend/minify_namer.dart
index 5ff2a2d..a318279 100644
--- a/pkg/compiler/lib/src/js_backend/minify_namer.dart
+++ b/pkg/compiler/lib/src/js_backend/minify_namer.dart
@@ -18,7 +18,6 @@
final String getterPrefix = 'g';
final String setterPrefix = 's';
- final String superPrefix = r's$';
final String callPrefix = ''; // this will create function names $<n>
static const ALPHABET_CHARACTERS = 52; // a-zA-Z.
diff --git a/pkg/compiler/lib/src/js_backend/namer.dart b/pkg/compiler/lib/src/js_backend/namer.dart
index 0fe858b..4eff34a 100644
--- a/pkg/compiler/lib/src/js_backend/namer.dart
+++ b/pkg/compiler/lib/src/js_backend/namer.dart
@@ -220,7 +220,6 @@
final String currentIsolate = r'$';
final String getterPrefix = r'get$';
final String setterPrefix = r'set$';
- final String superPrefix = r'super$';
final String metadataField = '@';
final String callPrefix = 'call';
final String callCatchAllName = r'call$catchAll';
@@ -810,14 +809,6 @@
// TODO(ahe): Remove this method. Use get getNameOfMember instead.
String getNameOfInstanceMember(Element member) => getNameX(member);
- String getNameOfAliasedSuperMember(Element member) {
- ClassElement superClass = member.enclosingClass;
- String className = getNameOfClass(superClass);
- String memberName = getNameOfMember(member);
- String proposal = "$superPrefix$className\$$memberName";
- return getMappedInstanceName(proposal);
- }
-
String getNameOfMember(Element member) => getNameX(member);
String getNameOfGlobalField(VariableElement field) => getNameX(field);
diff --git a/pkg/compiler/lib/src/js_emitter/old_emitter/container_builder.dart b/pkg/compiler/lib/src/js_emitter/old_emitter/container_builder.dart
index 6fa8fa4..802887d 100644
--- a/pkg/compiler/lib/src/js_emitter/old_emitter/container_builder.dart
+++ b/pkg/compiler/lib/src/js_emitter/old_emitter/container_builder.dart
@@ -414,7 +414,7 @@
void addMemberMethodFromInfo(MemberInfo info, ClassBuilder builder) {
final FunctionElement member = info.member;
- String name = info.name;
+ final String name = info.name;
final FunctionSignature parameters = info.parameters;
jsAst.Expression code = info.code;
final bool needsStubs = info.needsStubs;
@@ -427,13 +427,6 @@
emitter.interceptorEmitter.recordMangledNameOfMemberMethod(member, name);
- // If this member is called from a subclass via super, we have to add a
- // renaming. This is encoded by using two names separated with a : as
- // the property name.
- if (backend.isAliasedSuperMember(member)) {
- name = "$name:${namer.getNameOfAliasedSuperMember(member)}";
- }
-
if (!needStructuredInfo) {
compiler.dumpInfoTask.registerElementAst(member,
builder.addProperty(name, code));
diff --git a/pkg/compiler/lib/src/js_emitter/old_emitter/emitter.dart b/pkg/compiler/lib/src/js_emitter/old_emitter/emitter.dart
index e206f95..b99843c 100644
--- a/pkg/compiler/lib/src/js_emitter/old_emitter/emitter.dart
+++ b/pkg/compiler/lib/src/js_emitter/old_emitter/emitter.dart
@@ -307,6 +307,7 @@
return js(r'''
var inheritFrom = function() {
function tmp() {}
+ function tmp() {}
var hasOwnProperty = Object.prototype.hasOwnProperty;
return function (constructor, superConstructor) {
tmp.prototype = superConstructor.prototype;
@@ -350,25 +351,6 @@
finishedClassesAccess]);
}
- List buildSplitOffAliases() {
- if (backend.aliasedSuperMembers.isEmpty) return [];
- return [js(r'''
- var splitOffAliases = function(constructor) {
- var hasOwnProperty = Object.prototype.hasOwnProperty;
- var properties = constructor.prototype;
- for (var member in properties) {
- if (hasOwnProperty.call(properties, member)) {
- var s = member.split(':');
- if (s.length > 1) {
- properties[s[0]] = properties[s[1]] = properties[member];
- delete properties[member];
- }
- }
- }
- }
- ''')];
- }
-
jsAst.Fun get finishClassesFunction {
// Class descriptions are collected in a JS object.
// 'finishClasses' takes all collected descriptions and sets up
@@ -536,11 +518,6 @@
finishedClasses[cls] = true;
var superclass = pendingClasses[cls];
- var constructor = allClasses[cls];
-
- // Process aliased members due to super calls. We have to do this early
- // to ensure that we also hit the object class.
- if (#) splitOffAliases(constructor);
// The superclass is only false (empty string) for the Dart Object
// class. The minifier together with noSuchMethod can put methods on
@@ -548,6 +525,7 @@
// that we have a string.
if (!superclass || typeof superclass != "string") return;
finishClass(superclass);
+ var constructor = allClasses[cls];
var superConstructor = allClasses[superclass];
if (!superConstructor)
@@ -606,7 +584,6 @@
}
}
}''', [finishedClassesAccess,
- backend.aliasedSuperMembers.isNotEmpty,
!nativeClasses.isEmpty,
interceptorsByTagAccess,
leafTagsAccess,
@@ -718,7 +695,6 @@
if (!needsDefineClass) return [];
return defineClassFunction
..add(buildInheritFrom())
- ..addAll(buildSplitOffAliases())
..add(js('$finishClassesName = #', finishClassesFunction))
..add(initFinishClasses);
}
diff --git a/pkg/compiler/lib/src/js_emitter/old_emitter/reflection_data_parser.dart b/pkg/compiler/lib/src/js_emitter/old_emitter/reflection_data_parser.dart
index afd0cae..a1d3610 100644
--- a/pkg/compiler/lib/src/js_emitter/old_emitter/reflection_data_parser.dart
+++ b/pkg/compiler/lib/src/js_emitter/old_emitter/reflection_data_parser.dart
@@ -141,16 +141,11 @@
* [array].
*/
jsAst.Statement addStubs = js.statement('''
- function addStubs(descriptor, array, nameTag, isStatic,
+ function addStubs(descriptor, array, name, isStatic,
originalDescriptor, functions) {
- // The name could be an aliased method, which is only resolved later in
- // finishClasses. We need to use the actual name for the generated stubs.
- // Note that no getter for the alias is needed, as getter sends via super
- // are handled via the prototype chain and not using the alias.
- var name = nameTag.split(':')[0];
var f, funcs =
- [originalDescriptor[nameTag] =
- descriptor[nameTag] = f = ${readFunction("array", "$FUNCTION_INDEX")}];
+ [originalDescriptor[name] =
+ descriptor[name] = f = ${readFunction("array", "$FUNCTION_INDEX")}];
f.\$stubName = name;
functions.push(name);
for (var index = $FUNCTION_INDEX; index < array.length; index += 2) {
@@ -184,7 +179,7 @@
if (getterStubName) {
f = tearOff(funcs, array, isStatic, name, isIntercepted);
- descriptor[nameTag].\$getter = f;
+ descriptor[name].\$getter = f;
f.\$getterStub = true;
// Used to create an isolate using spawnFunction.
if (isStatic) #[name] = f; // embedded globalFunctions.
diff --git a/pkg/compiler/lib/src/ssa/codegen.dart b/pkg/compiler/lib/src/ssa/codegen.dart
index 2eaad68..3829edd 100644
--- a/pkg/compiler/lib/src/ssa/codegen.dart
+++ b/pkg/compiler/lib/src/ssa/codegen.dart
@@ -1683,23 +1683,14 @@
registry.registerDynamicGetter(selector);
registry.registerGetterForSuperMethod(node.element);
methodName = backend.namer.invocationName(selector);
- push(
- js.js('#.prototype.#.call(#)', [
- backend.namer.elementAccess(superClass),
- methodName, visitArguments(node.inputs, start: 0)]),
- node);
} else {
- methodName =
- backend.namer.getNameOfAliasedSuperMember(superMethod);
- backend.registerAliasedSuperMember(superMethod);
- use(node.inputs.first);
- push(
- js.js('#.#(#)', [
- pop(), methodName,
- visitArguments(node.inputs, start: 1)]),
- node);
+ methodName = backend.namer.getNameOfInstanceMember(superMethod);
}
-
+ push(
+ js.js('#.prototype.#.call(#)', [
+ backend.namer.elementAccess(superClass),
+ methodName, visitArguments(node.inputs, start: 0)]),
+ node);
}
}
diff --git a/pkg/pkg.status b/pkg/pkg.status
index 97f3075..13f87c4 100644
--- a/pkg/pkg.status
+++ b/pkg/pkg.status
@@ -15,6 +15,9 @@
scheduled_test/lib/*: Skip
polymer/example/scoped_style/*: Skip
+[ $runtime == vm ]
+analysis_server/test/integration/asynchrony_test: Skip # Times out due to revert of 41436, see also issue 21564
+
scheduled_test/test/scheduled_server_test: Pass, Fail # 13524
scheduled_test/test/scheduled_process_test: Pass, Slow # Issue 9231
scheduled_test/test/scheduled_stream/stream_matcher_test: Pass, Slow
diff --git a/sdk/lib/html/dart2js/html_dart2js.dart b/sdk/lib/html/dart2js/html_dart2js.dart
index a6c7e2a..a2289fd 100644
--- a/sdk/lib/html/dart2js/html_dart2js.dart
+++ b/sdk/lib/html/dart2js/html_dart2js.dart
@@ -7485,6 +7485,16 @@
// To suppress missing implicit constructor warnings.
factory Document._() { throw new UnsupportedError("Not supported"); }
+ @DomName('Document.pointerlockchangeEvent')
+ @DocsEditable()
+ @Experimental() // untriaged
+ static const EventStreamProvider<Event> pointerLockChangeEvent = const EventStreamProvider<Event>('pointerlockchange');
+
+ @DomName('Document.pointerlockerrorEvent')
+ @DocsEditable()
+ @Experimental() // untriaged
+ static const EventStreamProvider<Event> pointerLockErrorEvent = const EventStreamProvider<Event>('pointerlockerror');
+
/**
* Static factory designed to expose `readystatechange` events to event
* handlers that are not necessarily instances of [Document].
@@ -8104,6 +8114,16 @@
@Experimental() // untriaged
Stream<Event> get onPlaying => Element.playingEvent.forTarget(this);
+ @DomName('Document.onpointerlockchange')
+ @DocsEditable()
+ @Experimental() // untriaged
+ Stream<Event> get onPointerLockChange => pointerLockChangeEvent.forTarget(this);
+
+ @DomName('Document.onpointerlockerror')
+ @DocsEditable()
+ @Experimental() // untriaged
+ Stream<Event> get onPointerLockError => pointerLockErrorEvent.forTarget(this);
+
@DomName('Document.onratechange')
@DocsEditable()
@Experimental() // untriaged
diff --git a/sdk/lib/html/dartium/html_dartium.dart b/sdk/lib/html/dartium/html_dartium.dart
index 168a4c7..601400b 100644
--- a/sdk/lib/html/dartium/html_dartium.dart
+++ b/sdk/lib/html/dartium/html_dartium.dart
@@ -8439,6 +8439,16 @@
// To suppress missing implicit constructor warnings.
factory Document._() { throw new UnsupportedError("Not supported"); }
+ @DomName('Document.pointerlockchangeEvent')
+ @DocsEditable()
+ @Experimental() // untriaged
+ static const EventStreamProvider<Event> pointerLockChangeEvent = const EventStreamProvider<Event>('pointerlockchange');
+
+ @DomName('Document.pointerlockerrorEvent')
+ @DocsEditable()
+ @Experimental() // untriaged
+ static const EventStreamProvider<Event> pointerLockErrorEvent = const EventStreamProvider<Event>('pointerlockerror');
+
/**
* Static factory designed to expose `readystatechange` events to event
* handlers that are not necessarily instances of [Document].
@@ -9033,6 +9043,16 @@
@Experimental() // untriaged
Stream<Event> get onPlaying => Element.playingEvent.forTarget(this);
+ @DomName('Document.onpointerlockchange')
+ @DocsEditable()
+ @Experimental() // untriaged
+ Stream<Event> get onPointerLockChange => pointerLockChangeEvent.forTarget(this);
+
+ @DomName('Document.onpointerlockerror')
+ @DocsEditable()
+ @Experimental() // untriaged
+ Stream<Event> get onPointerLockError => pointerLockErrorEvent.forTarget(this);
+
@DomName('Document.onratechange')
@DocsEditable()
@Experimental() // untriaged
diff --git a/tools/VERSION b/tools/VERSION
index 39d7666..5ec591b 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -28,4 +28,4 @@
MINOR 8
PATCH 0
PRERELEASE 4
-PRERELEASE_PATCH 4
+PRERELEASE_PATCH 5
diff --git a/tools/dom/scripts/htmleventgenerator.py b/tools/dom/scripts/htmleventgenerator.py
index 66ffaec..372ecca 100644
--- a/tools/dom/scripts/htmleventgenerator.py
+++ b/tools/dom/scripts/htmleventgenerator.py
@@ -126,8 +126,8 @@
'Document.readystatechange': ('readyStateChange', 'Event'),
'Document.securitypolicyviolation': ('securityPolicyViolation', 'SecurityPolicyViolationEvent'),
'Document.selectionchange': ('selectionChange', 'Event'),
- 'Document.webkitpointerlockchange': ('pointerLockChange', 'Event'),
- 'Document.webkitpointerlockerror': ('pointerLockError', 'Event'),
+ 'Document.pointerlockchange': ('pointerLockChange', 'Event'),
+ 'Document.pointerlockerror': ('pointerLockError', 'Event'),
'EventSource.open': ('open', 'Event'),
'FileReader.abort': ('abort', 'ProgressEvent'),
'FileReader.load': ('load', 'ProgressEvent'),
diff --git a/tools/dom/scripts/htmlrenamer.py b/tools/dom/scripts/htmlrenamer.py
index 1bc0077..60845a4 100644
--- a/tools/dom/scripts/htmlrenamer.py
+++ b/tools/dom/scripts/htmlrenamer.py
@@ -233,7 +233,6 @@
'Document.webkitFullscreenEnabled',
'Document.webkitHidden',
'Document.webkitIsFullScreen',
- 'Document.webkitPointerLockElement',
'Document.webkitVisibilityState',
'Element.children',