Version 1.3.0-dev.4.0
svn merge -r 33322:33684 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
git-svn-id: http://dart.googlecode.com/svn/trunk@33685 260f80e4-7a28-3924-810f-c04153c831b5
diff --git a/AUTHORS b/AUTHORS
index 49c312f..f89a112 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -27,3 +27,4 @@
Nikolaus Graf <nik@blossom.io>
Alexandre Ardhuin <alexandre.ardhuin@gmail.com>
Victor Berchet <victor.berchet@gmail.com>
+Roel Spilker <r.spilker@gmail.com>
\ No newline at end of file
diff --git a/WATCHLISTS b/WATCHLISTS
index 16951ab..12432f9 100644
--- a/WATCHLISTS
+++ b/WATCHLISTS
@@ -13,11 +13,15 @@
'tools': {
'filepath': 'tools/',
},
+ 'observatory': {
+ 'filepath': 'runtime/bin/vmservice/',
+ },
},
'WATCHLISTS': {
'runtime': ['vm-dev@dartlang.org'],
'tools': ['ricow@google.com'],
+ 'observatory': ['johnmccutchan@google.com', 'turnidge@google.com'],
},
}
diff --git a/docs/language/dartLangSpec.tex b/docs/language/dartLangSpec.tex
index 094a9e3..aab4b20 100644
--- a/docs/language/dartLangSpec.tex
+++ b/docs/language/dartLangSpec.tex
@@ -24,13 +24,13 @@
\label{licensing}
-Except as otherwise noted at http://code.google.com/policies.html\#restrictions, the content of this document is licensed under the Creative Commons Attribution 3.0 License available at:
+Except as otherwise noted at https://developers.google.com/site-policies, the content of this document is licensed under the Creative Commons Attribution 3.0 License available at:
http://creativecommons.org/licenses/by/3.0/
- and code samples are licensed under the BSD license available at
+ and code samples are licensed under the license available at
- http://code.google.com/google\_bsd\_license.html.
+ https://code.google.com/p/dart/source/browse/trunk/dart/LICENSE.
\section{Notation}
\label{notation}
@@ -920,7 +920,7 @@
\subsection{Abstract Instance Members}
\label{abstractInstanceMembers}
-An {\em abstract method} (respectively, {\em abstract getter} or {\em abstract setter)} is an instance method, getter or setter that is not declared \EXTERNAL{} and does not provide an implementation. An {\em concrete method} (respectively, {\em concrete getter} or {\em concrete setter)} is an instance method, getter or setter that is not abstract.
+An {\em abstract method} (respectively, {\em abstract getter} or {\em abstract setter)} is an instance method, getter or setter that is not declared \EXTERNAL{} and does not provide an implementation. A {\em concrete method} (respectively, {\em concrete getter} or {\em concrete setter)} is an instance method, getter or setter that is not abstract.
%The declaration of an abstract method is prefixed by the built-in identifier (\ref{identifierReference}) \ABSTRACT{}.
\rationale{
@@ -1595,7 +1595,7 @@
It is a compile-time error if the interface of a class $C$ is a superinterface of itself.
Let $C$ be a concrete class that does not declare its own \code{noSuchMethod()} method.
-It is a static warning if the implicit interface of $C$ includes an instance member $m$ of type $F$ and $C$ does not declare or inherit a corresponding instance member $m$ of type $F'$ such that $F' <: F$.
+It is a static warning if the implicit interface of $C$ includes an instance member $m$ of type $F$ and $C$ does not declare or inherit a corresponding non-abstract instance member $m$ of type $F'$ such that $F' <: F$.
\commentary{A class does not inherit members from its superinterfaces. However, its implicit interface does.
}
@@ -3180,8 +3180,8 @@
\commentary{Notice that the wording carefully avoids re-evaluating the receiver $o$ and the arguments $a_i$. }
Let $T$ be the static type of $o$. It is a static type warning if $T$ does not have an accessible (\ref{privacy}) instance member named $m$ unless $T$ or a superinterface of $T$ is annotated with an annotation denoting a constant identical to the constant \code{@proxy} defined in \code{dart:core}. If $T.m$ exists, it is a static type warning if the type $F$ of $T.m$ may not be assigned to a function type. If $T.m$ does not exist, or if $F$ is not a function type, the static type of $i$ is \DYNAMIC{}; otherwise the static type of $i$ is the declared return type of $F$.
-%\item Let $T_i$ be the static type of $a_i, i \in 1 .. n+k$. It is a static warning if $F$ is not a supertype of $(T_1, \ldots, T_n, [T_{n+1}$ $x_{n+1}, \ldots, T_{n+k}$ $x_{n+k}]) \to \bot$.
-%\end{itemize}
+% The following is not needed because it is specified in 'Binding Actuals to Formals" Let $T_i$ be the static type of $a_i, i \in 1 .. n+k$. It is a static warning if $F$ is not a supertype of $(T_1, \ldots, T_n, \{T_{n+1}$ $x_{n+1}, \ldots, T_{n+k}$ $x_{n+k}\}) \to \bot$.
+
%\subsubsection{This Invocation}
@@ -3240,8 +3240,8 @@
It is a static type warning if the type $F$ of $C.m$ may not be assigned to a function type. If $F$ is not a function type, or if $C.m$ does not exist, the static type of $i$ is \DYNAMIC{}. Otherwise
the static type of $i$ is the declared return type of $F$.
-%\item Let $T_i$ be the static type of $a_i, i \in 1 .. n+k$. It is a static warning if $F$ is not a supertype of $(T_1, \ldots, T_n, [T_{n+1}$ $x_{n+1}, \ldots, T_{n+k}$ $x_{n+k}]) \to \bot$.
-%\end{itemize}
+% The following is not needed because it is specified in 'Binding Actuals to Formals"Let $T_i$ be the static type of $a_i, i \in 1 .. n+k$. It is a static warning if $F$ is not a supertype of $(T_1, \ldots, T_n, \{T_{n+1}$ $x_{n+1}, \ldots, T_{n+k}$ $x_{n+k}\}) \to \bot$.
+
@@ -3276,8 +3276,9 @@
It is a compile-time error if a super method invocation occurs in a top-level function or variable initializer, in an instance variable initializer or initializer list, in class \code{Object}, in a factory constructor or in a static method or variable initializer.
It is a static type warning if $S$ does not have an accessible (\ref{privacy}) instance member named $m$ unless $S$ or a superinterface of $S$ is annotated with an annotation denoting a constant identical to the constant \code{@proxy} defined in \code{dart:core}. If $S.m$ exists, it is a static type warning if the type $F$ of $S.m$ may not be assigned to a function type. If $S.m$ does not exist, or if $F$ is not a function type, the static type of $i$ is \DYNAMIC{}; otherwise the static type of $i$ is the declared return type of $F$.
-%\item Let $T_i$ be the static type of $a_i, i \in 1 .. n+k$. It is a static warning if $F$ is not a supertype of $(T_1, \ldots, t_n, [T_{n+1}$ $x_{n+1}, \ldots, T_{n+k}$ $x_{n+k}]) \to \bot$.
-%\end{itemize}
+% The following is not needed because it is specified in 'Binding Actuals to Formals"
+%Let $T_i$ be the static type of $a_i, i \in 1 .. n+k$. It is a static warning if $F$ is not a supertype of $(T_1, \ldots, t_n, \{T_{n+1}$ $x_{n+1}, \ldots, T_{n+k}$ $x_{n+k}\}) \to \bot$.
+
@@ -3951,7 +3952,7 @@
\item If $d$ is a static method, top-level function or local function then $e$ evaluates to the function defined by $d$.
\item If $d$ is the declaration of a static variable, static getter or static setter declared in class $C$, then $e$ is equivalent to the getter invocation (\ref{getterInvocation}) $C.id$.
\item If $d$ is the declaration of a library variable, top-level getter or top-level setter, then $e$ is equivalent to the getter invocation $id$.
-\item Otherwise, if $e$ occurs inside a top level or static function (be it function, method, getter, or setter) or variable initializer, evaluation of $e$ causes a\code{NoSuchMethod} to be thrown.
+\item Otherwise, if $e$ occurs inside a top level or static function (be it function, method, getter, or setter) or variable initializer, evaluation of $e$ causes a \code{NoSuchMethod} to be thrown.
\item Otherwise, $e$ is equivalent to the property extraction (\ref{propertyExtraction}) \THIS{}.$id$.
% This implies that referring to an undefined static getter by simple name is an error, whereas doing so by qualified name is only a warning. Same with assignments. Revise?
\end{itemize}
@@ -3961,9 +3962,9 @@
\begin{itemize}
\item If $d$ is a class, type alias or type parameter the static type of $e$ is \code{Type}.
\item If $d$ is a local variable or formal parameter the static type of $e$ is the type of the variable $id$, unless $id$ is known to have some type $T$, in which case the static type of $e$ is $T$, provided that $T$ is more specific than any other type $S$ such that $v$ is known to have type $S$.
-\item If $d$ is a static method, top-level function or local function the static type of $e$ the function type defined by $d$.
-\item If $d$ is the declaration of a static variable or static getter declared in class $C$, the static type of $e$ the static type of the getter invocation (\ref{getterInvocation}) $C.id$.
-\item If $d$ is the declaration of a library variable or top-level getter, the static type of $e$ is the static type of the getter invocation $id$.
+\item If $d$ is a static method, top-level function or local function the static type of $e$ is the function type defined by $d$.
+\item If $d$ is the declaration of a static variable, static getter or static setter declared in class $C$, the static type of $e$ is the static type of the getter invocation (\ref{getterInvocation}) $C.id$.
+\item If $d$ is the declaration of a library variable, top-level getter or top-level setter, the static type of $e$ is the static type of the getter invocation $id$.
\item Otherwise, if $e$ occurs inside a top level or static function (be it function, method, getter, or setter) or variable initializer, the static type of $e$ is \DYNAMIC{}.
\item Otherwise, the static type of $e$ is the type of the property extraction (\ref{propertyExtraction}) \THIS{}.$id$.
\end{itemize}
diff --git a/pkg/analysis_server/bin/dartdeps.dart b/pkg/analysis_server/bin/dartdeps.dart
index 15ea8c1..9282844 100644
--- a/pkg/analysis_server/bin/dartdeps.dart
+++ b/pkg/analysis_server/bin/dartdeps.dart
@@ -33,6 +33,11 @@
static const BINARY_NAME = 'dartdeps';
/**
+ * The name of the option used to specify the Dart SDK.
+ */
+ static const String DART_SDK_OPTION = 'dart-sdk';
+
+ /**
* The name of the option used to print usage information.
*/
static const String HELP_OPTION = 'help';
@@ -48,6 +53,11 @@
final List<String> args;
/**
+ * The path to the Dart SDK used during analysis.
+ */
+ String sdkPath;
+
+ /**
* The manager for the analysis server.
*/
AnalysisManager manager;
@@ -69,6 +79,9 @@
*/
Future<AnalysisManager> start() {
var parser = new ArgParser();
+ parser.addOption(
+ DART_SDK_OPTION,
+ help: '[sdkPath] path to Dart SDK');
parser.addFlag(HELP_OPTION,
help: 'print this help message without starting analysis',
defaultsTo: false,
@@ -92,6 +105,18 @@
printUsage(parser);
return null;
}
+ sdkPath = results[DART_SDK_OPTION];
+ if (sdkPath is! String) {
+ print('Missing path to Dart SDK');
+ printUsage(parser);
+ return null;
+ }
+ Directory sdkDir = new Directory(sdkPath);
+ if (!sdkDir.existsSync()) {
+ print('Specified Dart SDK does not exist: $sdkPath');
+ printUsage(parser);
+ return null;
+ }
if (results.rest.length == 0) {
printUsage(parser);
exitCode = 1;
diff --git a/pkg/analysis_server/lib/src/analysis_server.dart b/pkg/analysis_server/lib/src/analysis_server.dart
index ff2dad6..afd6aff 100644
--- a/pkg/analysis_server/lib/src/analysis_server.dart
+++ b/pkg/analysis_server/lib/src/analysis_server.dart
@@ -136,8 +136,8 @@
if (contextWorkQueue.isEmpty) {
running = false;
} else {
- new Future(performTask).catchError((exception, stackTrace) {
- AnalysisEngine.instance.logger.logError3(exception);
+ new Future(performTask).catchError((ex, st) {
+ AnalysisEngine.instance.logger.logError("${ex}\n${st}");
});
}
}
@@ -162,8 +162,8 @@
void run() {
if (!running) {
running = true;
- Timer.run(() {
- performTask();
+ new Future(performTask).catchError((exception, stackTrace) {
+ AnalysisEngine.instance.logger.logError(exception);
});
}
}
diff --git a/pkg/analysis_server/lib/src/domain_context.dart b/pkg/analysis_server/lib/src/domain_context.dart
index 6e7c6fc..acadd6f 100644
--- a/pkg/analysis_server/lib/src/domain_context.dart
+++ b/pkg/analysis_server/lib/src/domain_context.dart
@@ -126,7 +126,7 @@
*/
ChangeSet createChangeSet(Map<String, Object> jsonData) {
// TODO(brianwilkerson) Implement this.
- return null;
+ return new ChangeSet();
}
/**
diff --git a/pkg/analysis_server/lib/src/domain_server.dart b/pkg/analysis_server/lib/src/domain_server.dart
index 3924d1a..40b0205 100644
--- a/pkg/analysis_server/lib/src/domain_server.dart
+++ b/pkg/analysis_server/lib/src/domain_server.dart
@@ -117,7 +117,7 @@
return new Response(request.id, new RequestError(
RequestError.CODE_SDK_ERROR, 'Failed to access sdk: $e'));
}
- context.sourceFactory = new SourceFactory.con2([
+ context.sourceFactory = new SourceFactory([
new DartUriResolver(sdk),
new FileUriResolver(),
// new PackageUriResolver(),
diff --git a/pkg/analysis_server/pubspec.yaml b/pkg/analysis_server/pubspec.yaml
index 889f1f5..e08a525 100644
--- a/pkg/analysis_server/pubspec.yaml
+++ b/pkg/analysis_server/pubspec.yaml
@@ -4,9 +4,9 @@
description: An HTTP server that performs analysis of Dart code via web sockets.
homepage: http://www.dartlang.org
environment:
- sdk: ">=1.0.0 <2.0.0"
+ sdk: '>=1.0.0 <2.0.0'
dependencies:
- analyzer: any
+ analyzer: 0.13.0-dev.6
args: any
logging: any
dev_dependencies:
diff --git a/pkg/analysis_server/test/analysis_server_test.dart b/pkg/analysis_server/test/analysis_server_test.dart
new file mode 100644
index 0000000..d0ebe75
--- /dev/null
+++ b/pkg/analysis_server/test/analysis_server_test.dart
@@ -0,0 +1,96 @@
+// Copyright (c) 2014, 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 test.analysis_server;
+
+import 'dart:async';
+
+import 'package:analysis_server/src/analysis_server.dart';
+import 'package:analysis_server/src/domain_server.dart';
+import 'package:analysis_server/src/protocol.dart';
+import 'package:unittest/matcher.dart';
+import 'package:unittest/unittest.dart';
+
+import 'mocks.dart';
+
+main(List<String> args) {
+ group('AnalysisServer', () {
+ setUp(AnalysisServerTest.setUp);
+// test('createContext', AnalysisServerTest.createContext);
+ test('echo', AnalysisServerTest.echo);
+ test('shutdown', AnalysisServerTest.shutdown);
+ test('unknownRequest', AnalysisServerTest.unknownRequest);
+ });
+}
+
+class AnalysisServerTest {
+ static MockServerChannel channel;
+ static AnalysisServer server;
+
+ static void setUp() {
+ channel = new MockServerChannel();
+ server = new AnalysisServer(channel);
+ }
+
+ static Future createContext() {
+ server.handlers = [new ServerDomainHandler(server)];
+ var request = new Request('my27', ServerDomainHandler.CREATE_CONTEXT_METHOD);
+ request.setParameter(ServerDomainHandler.SDK_DIRECTORY_PARAM, sdkPath);
+ return channel.sendRequest(request)
+ .timeout(new Duration(seconds: 1))
+ .then((Response response) {
+ expect(response.id, equals('my27'));
+ expect(response.error, isNull);
+ var contextId = response.result[ServerDomainHandler.CONTEXT_ID_RESULT];
+ expect(contextId is String, isTrue);
+ });
+ }
+
+ static Future echo() {
+ server.handlers = [new EchoHandler()];
+ var request = new Request('my22', 'echo');
+ return channel.sendRequest(request)
+ .timeout(new Duration(seconds: 1))
+ .then((Response response) {
+ expect(response.id, equals('my22'));
+ expect(response.error, isNull);
+ });
+ }
+
+ static Future shutdown() {
+ server.handlers = [new ServerDomainHandler(server)];
+ var request = new Request('my28', ServerDomainHandler.SHUTDOWN_METHOD);
+ request.setParameter(ServerDomainHandler.SDK_DIRECTORY_PARAM, '');
+ return channel.sendRequest(request)
+ .timeout(new Duration(seconds: 1))
+ .then((Response response) {
+ expect(response.id, equals('my28'));
+ expect(response.error, isNull);
+ });
+ }
+
+ static Future unknownRequest() {
+ server.handlers = [new EchoHandler()];
+ var request = new Request('my22', 'randomRequest');
+ return channel.sendRequest(request)
+ .timeout(new Duration(seconds: 1))
+ .then((Response response) {
+ expect(response.id, equals('my22'));
+ expect(response.error, isNotNull);
+ });
+ }
+}
+
+
+class EchoHandler implements RequestHandler {
+ @override
+ Response handleRequest(Request request) {
+ if (request.method == 'echo') {
+ var response = new Response(request.id);
+ response.setResult('echo', true);
+ return response;
+ }
+ return null;
+ }
+}
diff --git a/pkg/analysis_server/test/channel_test.dart b/pkg/analysis_server/test/channel_test.dart
index 9658269..95a34b7 100644
--- a/pkg/analysis_server/test/channel_test.dart
+++ b/pkg/analysis_server/test/channel_test.dart
@@ -61,20 +61,20 @@
}
static Future invalidJsonToClient() {
- socket.twin.add('{"foo":"bar"}');
- server.sendResponse(new Response('myId'));
- return client.responseStream
+ var result = client.responseStream
.first
.timeout(new Duration(seconds: 1))
.then((Response response) {
expect(response.id, equals('myId'));
expectMsgCount(responseCount: 1);
});
+ socket.twin.add('{"foo":"bar"}');
+ server.sendResponse(new Response('myId'));
+ return result;
}
static Future invalidJsonToServer() {
- socket.add('"blat"');
- return client.responseStream
+ var result = client.responseStream
.first
.timeout(new Duration(seconds: 1))
.then((Response response) {
@@ -82,31 +82,34 @@
expect(response.error, isNotNull);
expectMsgCount(responseCount: 1);
});
+ socket.add('"blat"');
+ return result;
}
static Future notification() {
- server.sendNotification(new Notification('myEvent'));
- return client.notificationStream
+ var result = client.notificationStream
.first
.timeout(new Duration(seconds: 1))
.then((Notification notification) {
expect(notification.event, equals('myEvent'));
expectMsgCount(notificationCount: 1);
-
expect(notificationsReceived.first, equals(notification));
});
+ server.sendNotification(new Notification('myEvent'));
+ return result;
}
static Future notificationAndResponse() {
- server
- ..sendNotification(new Notification('myEvent'))
- ..sendResponse(new Response('myId'));
- return Future
+ var result = Future
.wait([
client.notificationStream.first,
client.responseStream.first])
.timeout(new Duration(seconds: 1))
.then((_) => expectMsgCount(responseCount: 1, notificationCount: 1));
+ server
+ ..sendNotification(new Notification('myEvent'))
+ ..sendResponse(new Response('myId'));
+ return result;
}
static void request() {
diff --git a/pkg/analysis_server/test/domain_context_test.dart b/pkg/analysis_server/test/domain_context_test.dart
new file mode 100644
index 0000000..953f8eb
--- /dev/null
+++ b/pkg/analysis_server/test/domain_context_test.dart
@@ -0,0 +1,105 @@
+// Copyright (c) 2014, 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 test.domain.context;
+
+import 'package:analyzer/src/generated/engine.dart';
+import 'package:analysis_server/src/analysis_server.dart';
+import 'package:analysis_server/src/domain_context.dart';
+import 'package:analysis_server/src/domain_server.dart';
+import 'package:analysis_server/src/protocol.dart';
+import 'package:unittest/matcher.dart';
+import 'package:unittest/unittest.dart';
+
+import 'mocks.dart';
+
+main() {
+ group('ContextDomainHandlerTest', () {
+ test('applyChanges', ContextDomainHandlerTest.applyChanges);
+ test('setOptions', ContextDomainHandlerTest.setOptions);
+ test('setPrioritySources_empty', ContextDomainHandlerTest.setPrioritySources_empty);
+ test('setPrioritySources_nonEmpty', ContextDomainHandlerTest.setPrioritySources_nonEmpty);
+ });
+}
+
+class ContextDomainHandlerTest {
+ static void applyChanges() {
+ AnalysisServer server = new AnalysisServer(new MockServerChannel());
+ String contextId = _createContext(server);
+ ChangeSet changeSet = new ChangeSet();
+ ContextDomainHandler handler = new ContextDomainHandler(server);
+
+ Request request = new Request('0', ContextDomainHandler.APPLY_CHANGES_NAME);
+ request.setParameter(ContextDomainHandler.CONTEXT_ID_PARAM, contextId);
+ // TODO (danrubel) convert ChangeSet to Map
+// request.setParameter(ContextDomainHandler.CHANGES_PARAM, changeSet);
+ request.setParameter(ContextDomainHandler.CHANGES_PARAM, new Map());
+ Response response = handler.handleRequest(request);
+ expect(response.toJson(), equals({
+ Response.ID: '0',
+ Response.ERROR: null
+ }));
+ }
+
+ static void setOptions() {
+ AnalysisServer server = new AnalysisServer(new MockServerChannel());
+ String contextId = _createContext(server);
+ Map<String, Object> options = new Map<String, Object>();
+ ContextDomainHandler handler = new ContextDomainHandler(server);
+
+ Request request = new Request('0', ContextDomainHandler.SET_OPTIONS_NAME);
+ request.setParameter(ContextDomainHandler.CONTEXT_ID_PARAM, contextId);
+ request.setParameter(ContextDomainHandler.OPTIONS_PARAM, options);
+ Response response = handler.handleRequest(request);
+ expect(response.toJson(), equals({
+ Response.ID: '0',
+ Response.ERROR: null
+ }));
+ }
+
+ static void setPrioritySources_empty() {
+ AnalysisServer server = new AnalysisServer(new MockServerChannel());
+ String contextId = _createContext(server);
+ List<String> sources = new List<String>();
+ ContextDomainHandler handler = new ContextDomainHandler(server);
+
+ Request request = new Request('0', ContextDomainHandler.SET_PRIORITY_SOURCES_NAME);
+ request.setParameter(ContextDomainHandler.CONTEXT_ID_PARAM, contextId);
+ request.setParameter(ContextDomainHandler.SOURCES_PARAM, sources);
+ Response response = handler.handleRequest(request);
+ expect(response.toJson(), equals({
+ Response.ID: '0',
+ Response.ERROR: null
+ }));
+ }
+
+ static void setPrioritySources_nonEmpty() {
+ AnalysisServer server = new AnalysisServer(new MockServerChannel());
+ String contextId = _createContext(server);
+ List<String> sources = new List<String>();
+ sources.add("foo.dart");
+ ContextDomainHandler handler = new ContextDomainHandler(server);
+
+ Request request = new Request('0', ContextDomainHandler.SET_PRIORITY_SOURCES_NAME);
+ request.setParameter(ContextDomainHandler.CONTEXT_ID_PARAM, contextId);
+ request.setParameter(ContextDomainHandler.SOURCES_PARAM, sources);
+ Response response = handler.handleRequest(request);
+ expect(response.toJson(), equals({
+ Response.ID: '0',
+ Response.ERROR: null
+ }));
+ }
+
+ static String _createContext(AnalysisServer server) {
+ ServerDomainHandler handler = new ServerDomainHandler(server);
+ Request request = new Request('0', ServerDomainHandler.CREATE_CONTEXT_METHOD);
+ request.setParameter(ServerDomainHandler.SDK_DIRECTORY_PARAM, sdkPath);
+ Response response = handler.handleRequest(request);
+ if (response.error != null) {
+ fail('Unexpected error: ${response.error.toJson()}');
+ }
+ expect(response.error, isNull);
+ return response.getResult(ServerDomainHandler.CONTEXT_ID_RESULT);
+ }
+}
diff --git a/pkg/analysis_server/test/domain_server_test.dart b/pkg/analysis_server/test/domain_server_test.dart
new file mode 100644
index 0000000..b1e3d23
--- /dev/null
+++ b/pkg/analysis_server/test/domain_server_test.dart
@@ -0,0 +1,114 @@
+// Copyright (c) 2014, 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 test.domain.server;
+
+import 'package:analysis_server/src/analysis_server.dart';
+import 'package:analysis_server/src/domain_server.dart';
+import 'package:analysis_server/src/protocol.dart';
+import 'package:unittest/matcher.dart';
+import 'package:unittest/unittest.dart';
+
+import 'mocks.dart';
+
+main() {
+ group('ServerDomainHandler', () {
+// test('createContext', ServerDomainHandlerTest.createContext);
+// test('deleteContext_alreadyDeleted', ServerDomainHandlerTest.deleteContext_alreadyDeleted);
+ test('deleteContext_doesNotExist', ServerDomainHandlerTest.deleteContext_doesNotExist);
+// test('deleteContext_existing', ServerDomainHandlerTest.deleteContext_existing);
+ test('shutdown', ServerDomainHandlerTest.shutdown);
+ test('version', ServerDomainHandlerTest.version);
+ });
+}
+
+class ServerDomainHandlerTest {
+ static void createContext() {
+ AnalysisServer server = new AnalysisServer(new MockServerChannel());
+ ServerDomainHandler handler = new ServerDomainHandler(server);
+
+ Request createRequest = new Request('0', ServerDomainHandler.CREATE_CONTEXT_METHOD);
+ createRequest.setParameter(ServerDomainHandler.SDK_DIRECTORY_PARAM, sdkPath);
+ Response response = handler.handleRequest(createRequest);
+ String contextId = response.getResult(ServerDomainHandler.CONTEXT_ID_RESULT);
+ expect(contextId, isNotNull);
+ }
+
+ static void deleteContext_alreadyDeleted() {
+ AnalysisServer server = new AnalysisServer(new MockServerChannel());
+ ServerDomainHandler handler = new ServerDomainHandler(server);
+
+ Request createRequest = new Request('0', ServerDomainHandler.CREATE_CONTEXT_METHOD);
+ createRequest.setParameter(ServerDomainHandler.SDK_DIRECTORY_PARAM, '');
+ Response response = handler.handleRequest(createRequest);
+ String contextId = response.getResult(ServerDomainHandler.CONTEXT_ID_RESULT);
+
+ Request deleteRequest = new Request('0', ServerDomainHandler.DELETE_CONTEXT_METHOD);
+ deleteRequest.setParameter(ServerDomainHandler.CONTEXT_ID_PARAM, contextId);
+ response = handler.handleRequest(deleteRequest);
+ response = handler.handleRequest(deleteRequest);
+ expect(response.toJson(), equals({
+ Response.ID: '0',
+ Response.ERROR: 'Context does not exist'
+ }));
+ }
+
+ static void deleteContext_doesNotExist() {
+ AnalysisServer server = new AnalysisServer(new MockServerChannel());
+ ServerDomainHandler handler = new ServerDomainHandler(server);
+
+ Request deleteRequest = new Request('0', ServerDomainHandler.DELETE_CONTEXT_METHOD);
+ deleteRequest.setParameter(ServerDomainHandler.CONTEXT_ID_PARAM, 'xyzzy');
+ Response response = handler.handleRequest(deleteRequest);
+ expect(response.id, equals('0'));
+ expect(response.error, isNotNull);
+ }
+
+ static void deleteContext_existing() {
+ AnalysisServer server = new AnalysisServer(new MockServerChannel());
+ ServerDomainHandler handler = new ServerDomainHandler(server);
+
+ Request createRequest = new Request('0', ServerDomainHandler.CREATE_CONTEXT_METHOD);
+ createRequest.setParameter(ServerDomainHandler.SDK_DIRECTORY_PARAM, '');
+ Response response = handler.createContext(createRequest);
+ String contextId = response.getResult(ServerDomainHandler.CONTEXT_ID_RESULT);
+
+ Request deleteRequest = new Request('0', ServerDomainHandler.DELETE_CONTEXT_METHOD);
+ deleteRequest.setParameter(ServerDomainHandler.CONTEXT_ID_PARAM, contextId);
+ response = handler.handleRequest(deleteRequest);
+ expect(response.toJson(), equals({
+ Response.ID: '0',
+ Response.ERROR: null
+ }));
+ }
+
+ static void shutdown() {
+ AnalysisServer server = new AnalysisServer(new MockServerChannel());
+ ServerDomainHandler handler = new ServerDomainHandler(server);
+
+ expect(server.running, isTrue);
+ Request shutdownRequest = new Request('0', ServerDomainHandler.SHUTDOWN_METHOD);
+ Response response = handler.handleRequest(shutdownRequest);
+ expect(response.toJson(), equals({
+ Response.ID: '0',
+ Response.ERROR: null
+ }));
+ expect(server.running, isFalse);
+ }
+
+ static void version() {
+ AnalysisServer server = new AnalysisServer(new MockServerChannel());
+ ServerDomainHandler handler = new ServerDomainHandler(server);
+
+ Request versionRequest = new Request('0', ServerDomainHandler.VERSION_METHOD);
+ Response response = handler.handleRequest(versionRequest);
+ expect(response.toJson(), equals({
+ Response.ID: '0',
+ Response.ERROR: null,
+ Response.RESULT: {
+ ServerDomainHandler.VERSION_RESULT: '0.0.1'
+ }
+ }));
+ }
+}
diff --git a/pkg/analysis_server/test/mocks.dart b/pkg/analysis_server/test/mocks.dart
index 7b898cb..d9cfbcc 100644
--- a/pkg/analysis_server/test/mocks.dart
+++ b/pkg/analysis_server/test/mocks.dart
@@ -7,11 +7,31 @@
import 'dart:async';
import 'dart:io';
+import 'package:analysis_server/src/analysis_server.dart';
+import 'package:analysis_server/src/channel.dart';
+import 'package:analysis_server/src/protocol.dart';
+import 'package:unittest/matcher.dart';
+
+/**
+ * Answer the absolute path the the SDK relative to the currently running
+ * script or throw an exception if it cannot be found.
+ */
+String get sdkPath {
+ Uri sdkUri = Platform.script.resolve('../../../sdk/');
+
+ // Verify the directory exists
+ Directory sdkDir = new Directory.fromUri(sdkUri);
+ if (!sdkDir.existsSync()) {
+ throw 'Specified Dart SDK does not exist: $sdkDir';
+ }
+
+ return sdkDir.path;
+}
+
/**
* A mock [WebSocket] for testing.
*/
class MockSocket<T> implements WebSocket {
-
StreamController controller = new StreamController();
MockSocket twin;
Stream stream;
@@ -46,3 +66,50 @@
noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
}
+
+/**
+ * A mock [ServerCommunicationChannel] for testing [AnalysisServer].
+ */
+class MockServerChannel implements ServerCommunicationChannel {
+ StreamController<Request> requestController = new StreamController<Request>();
+ StreamController<Response> responseController = new StreamController<Response>();
+ StreamController<Notification> notificationController = new StreamController<Notification>();
+
+ List<Response> responsesReceived = [];
+ List<Notification> notificationsReceived = [];
+
+ MockServerChannel() {
+ }
+
+ @override
+ void listen(void onRequest(Request request), {void onError(), void onDone()}) {
+ requestController.stream.listen(onRequest, onError: onError, onDone: onDone);
+ }
+
+ @override
+ void sendNotification(Notification notification) {
+ notificationsReceived.add(notification);
+ // Wrap send notification in future to simulate websocket
+ new Future(() => notificationController.add(notification));
+ }
+
+ /// Simulate request/response pair
+ Future<Response> sendRequest(Request request) {
+ var id = request.id;
+ // Wrap send request in future to simulate websocket
+ new Future(() => requestController.add(request));
+ return responseController.stream.firstWhere((response) => response.id == id);
+ }
+
+ @override
+ void sendResponse(Response response) {
+ responsesReceived.add(response);
+ // Wrap send response in future to simulate websocket
+ new Future(() => responseController.add(response));
+ }
+
+ void expectMsgCount({responseCount: 0, notificationCount: 0}) {
+ expect(responsesReceived, hasLength(responseCount));
+ expect(notificationsReceived, hasLength(notificationCount));
+ }
+}
diff --git a/pkg/analyzer/bin/analyzer.dart b/pkg/analyzer/bin/analyzer.dart
index 3908fb5..9079b82 100644
--- a/pkg/analyzer/bin/analyzer.dart
+++ b/pkg/analyzer/bin/analyzer.dart
@@ -11,52 +11,26 @@
import 'dart:convert';
import 'dart:io';
+import 'package:analyzer/src/analyzer_impl.dart';
import 'package:analyzer/src/generated/engine.dart';
import 'package:analyzer/src/generated/error.dart';
-import 'package:analyzer/src/generated/java_core.dart' show JavaSystem, instanceOfTimer;
+import 'package:analyzer/src/generated/java_core.dart' show JavaSystem;
import 'package:analyzer/options.dart';
-import 'package:analyzer/src/analyzer_impl.dart';
-import 'package:analyzer/src/error_formatter.dart';
-
void main(args) {
- var options = CommandLineOptions.parse(args);
+ CommandLineOptions options = CommandLineOptions.parse(args);
if (options.shouldBatch) {
BatchRunner.runAsBatch(args, (List<String> args) {
- var options = CommandLineOptions.parse(args);
- return _runAnalyzer(options);
+ CommandLineOptions options = CommandLineOptions.parse(args);
+ _runAnalyzer(options);
});
} else {
- int startTime = JavaSystem.currentTimeMillis();
-
- ErrorSeverity result = _runAnalyzer(options);
-
- if (options.perf) {
- int totalTime = JavaSystem.currentTimeMillis() - startTime;
- int ioTime = PerformanceStatistics.io.result;
- int scanTime = PerformanceStatistics.scan.result;
- int parseTime = PerformanceStatistics.parse.result;
- int resolveTime = PerformanceStatistics.resolve.result;
- int errorsTime = PerformanceStatistics.errors.result;
- int hintsTime = PerformanceStatistics.hints.result;
- int angularTime = PerformanceStatistics.angular.result;
- print("io:$ioTime");
- print("scan:$scanTime");
- print("parse:$parseTime");
- print("resolve:$resolveTime");
- print("errors:$errorsTime");
- print("hints:$hintsTime");
- print("angular:$angularTime");
- print("other:${totalTime
- - (ioTime + scanTime + parseTime + resolveTime + errorsTime + hintsTime
- + angularTime)}");
- print("total:$totalTime");
- }
- exitCode = result.ordinal;
+ _runAnalyzer(options);
}
}
-ErrorSeverity _runAnalyzer(CommandLineOptions options) {
+void _runAnalyzer(CommandLineOptions options) {
+ int startTime = JavaSystem.currentTimeMillis();
if (!options.machineFormat) {
stdout.writeln("Analyzing ${options.sourceFiles}...");
}
@@ -66,25 +40,18 @@
// check that file exists
if (!new File(sourcePath).existsSync()) {
print('File not found: $sourcePath');
- return ErrorSeverity.ERROR;
+ exitCode = ErrorSeverity.ERROR.ordinal;
+ return;
}
// check that file is Dart file
if (!AnalysisEngine.isDartFileName(sourcePath)) {
print('$sourcePath is not a Dart file');
- return ErrorSeverity.ERROR;
+ exitCode = ErrorSeverity.ERROR.ordinal;
+ return;
}
// do analyze
- ErrorFormatter formatter = new ErrorFormatter(options.machineFormat ? stderr : stdout, options);
- AnalyzerImpl analyzer = new AnalyzerImpl(options);
- analyzer.analyze(sourcePath);
- // print errors
- formatter.formatErrors(analyzer.errorInfos);
- // prepare status
- ErrorSeverity status = analyzer.maxErrorSeverity;
- if (status == ErrorSeverity.WARNING && options.warningsAreFatal) {
- status = ErrorSeverity.ERROR;
- }
- return status;
+ AnalyzerImpl analyzer = new AnalyzerImpl(sourcePath, options, startTime);
+ analyzer.analyze();
}
typedef ErrorSeverity BatchRunnerHandler(List<String> args);
diff --git a/pkg/analyzer/bin/formatter.dart b/pkg/analyzer/bin/formatter.dart
index 400b309..c4c689e 100755
--- a/pkg/analyzer/bin/formatter.dart
+++ b/pkg/analyzer/bin/formatter.dart
@@ -34,6 +34,7 @@
const SELECTION_FLAG = 'selection';
const TRANSFORM_FLAG = 'transform';
const MAX_LINE_FLAG = 'max_line_length';
+const INDENT_FLAG = 'indent';
const FOLLOW_LINKS = false;
@@ -61,11 +62,29 @@
machineFormat = options[MACHINE_FLAG];
overwriteFileContents = options[WRITE_FLAG];
selection = _parseSelection(options[SELECTION_FLAG]);
- formatterSettings =
- new FormatterOptions(codeTransforms: options[TRANSFORM_FLAG],
- pageWidth: _parseLineLength(options[MAX_LINE_FLAG]));
+ formatterSettings = new FormatterOptions(
+ codeTransforms: options[TRANSFORM_FLAG],
+ tabsForIndent: _parseTabsForIndent(options[INDENT_FLAG]),
+ spacesPerIndent: _parseSpacesPerIndent(options[INDENT_FLAG]),
+ pageWidth: _parseLineLength(options[MAX_LINE_FLAG]));
}
+/// Translate the indent option into spaces per indent.
+int _parseSpacesPerIndent(String indentOption) {
+ if (indentOption == 'tab') {
+ return 1;
+ }
+ int spacesPerIndent = _toInt(indentOption);
+ if (spacesPerIndent == null) {
+ throw new FormatterException('Indentation is specified as an Integer or '
+ 'the value "tab".');
+ }
+ return spacesPerIndent;
+}
+
+/// Translate the indent option into tabs for indent.
+bool _parseTabsForIndent(String indentOption) => indentOption == 'tab';
+
CodeKind _parseKind(kindOption) {
switch(kindOption) {
case 'stmt' :
@@ -176,6 +195,10 @@
parser.addOption(MAX_LINE_FLAG, abbr: 'l', defaultsTo: '80',
help: 'Wrap lines longer than this length. '
'To never wrap, specify "Infinity" or "Inf" for short.');
+ parser.addOption(INDENT_FLAG, abbr: 'i', defaultsTo: '2',
+ help: 'Specify number of spaces per indentation. '
+ 'To indent using tabs, specify "--$INDENT_FLAG tab".'
+ '--- [PROVISIONAL API].', hide: true);
parser.addOption(KIND_FLAG, abbr: 'k', defaultsTo: 'cu',
help: 'Specify source snippet kind ("stmt" or "cu") '
'--- [PROVISIONAL API].', hide: true);
diff --git a/pkg/analyzer/lib/options.dart b/pkg/analyzer/lib/options.dart
index bdb58f0..3aa4dd3 100644
--- a/pkg/analyzer/lib/options.dart
+++ b/pkg/analyzer/lib/options.dart
@@ -51,6 +51,9 @@
/** The source files to analyze */
final List<String> sourceFiles;
+ /** Whether to log additional analysis messages and exceptions */
+ final bool log;
+
/**
* Initialize options from the given parsed [args].
*/
@@ -66,6 +69,7 @@
warningsAreFatal = args['fatal-warnings'],
dartSdkPath = args['dart-sdk'],
packageRootPath = args['package-root'],
+ log = args['log'],
sourceFiles = args.rest;
/**
@@ -128,7 +132,9 @@
..addFlag('show-sdk-warnings', help: 'Show warnings from SDK imports (deprecated)',
defaultsTo: false, negatable: false)
..addFlag('help', abbr: 'h', help: 'Display this help message',
- defaultsTo: false, negatable: false);
+ defaultsTo: false, negatable: false)
+ ..addFlag('log', help: 'Log additional messages and exceptions',
+ defaultsTo: false, negatable: false, hide: true);
try {
// TODO(scheglov) https://code.google.com/p/dart/issues/detail?id=11061
@@ -206,10 +212,10 @@
* See [ArgParser.addFlag()].
*/
void addFlag(String name, {String abbr, String help, bool defaultsTo: false,
- bool negatable: true, void callback(bool value)}) {
+ bool negatable: true, void callback(bool value), bool hide: false}) {
_knownFlags.add(name);
_parser.addFlag(name, abbr: abbr, help: help, defaultsTo: defaultsTo,
- negatable: negatable, callback: callback);
+ negatable: negatable, callback: callback, hide: hide);
}
/**
diff --git a/pkg/analyzer/lib/src/analyzer_impl.dart b/pkg/analyzer/lib/src/analyzer_impl.dart
index a2b1151..69685d2 100644
--- a/pkg/analyzer/lib/src/analyzer_impl.dart
+++ b/pkg/analyzer/lib/src/analyzer_impl.dart
@@ -4,6 +4,8 @@
library analyzer_impl;
+import 'dart:async';
+
import 'dart:io';
import 'package:path/path.dart' as pathos;
@@ -14,16 +16,24 @@
import 'generated/source_io.dart';
import 'generated/sdk.dart';
import 'generated/sdk_io.dart';
-import 'generated/ast.dart';
import 'generated/element.dart';
import '../options.dart';
+import 'package:analyzer/src/generated/java_core.dart' show JavaSystem;
+import 'package:analyzer/src/error_formatter.dart';
+
+/**
+ * The maximum number of sources for which AST structures should be kept in the cache.
+ */
+const int _MAX_CACHE_SIZE = 512;
DartSdk sdk;
/// Analyzes single library [File].
class AnalyzerImpl {
+ final String sourcePath;
final CommandLineOptions options;
+ final int startTime;
ContentCache contentCache = new ContentCache();
SourceFactory sourceFactory;
@@ -35,7 +45,7 @@
/// All [AnalysisErrorInfo]s in the analyzed library.
final List<AnalysisErrorInfo> errorInfos = new List<AnalysisErrorInfo>();
- AnalyzerImpl(CommandLineOptions this.options) {
+ AnalyzerImpl(this.sourcePath, this.options, this.startTime) {
if (sdk == null) {
sdk = new DirectoryBasedDartSdk(new JavaFile(options.dartSdkPath));
}
@@ -44,35 +54,79 @@
/**
* Treats the [sourcePath] as the top level library and analyzes it.
*/
- void analyze(String sourcePath) {
+ void analyze() {
sources.clear();
errorInfos.clear();
if (sourcePath == null) {
throw new ArgumentError("sourcePath cannot be null");
}
- var sourceFile = new JavaFile(sourcePath);
- var uriKind = getUriKind(sourceFile);
- var librarySource = new FileBasedSource.con2(sourceFile, uriKind);
+ JavaFile sourceFile = new JavaFile(sourcePath);
+ UriKind uriKind = getUriKind(sourceFile);
+ Source librarySource = new FileBasedSource.con2(sourceFile, uriKind);
+
// prepare context
- prepareAnalysisContext(sourceFile);
- // don't try to analyzer parts
- var unit = context.parseCompilationUnit(librarySource);
- var hasLibraryDirective = false;
- var hasPartOfDirective = false;
- for (var directive in unit.directives) {
- if (directive is LibraryDirective) hasLibraryDirective = true;
- if (directive is PartOfDirective) hasPartOfDirective = true;
- }
- if (hasPartOfDirective && !hasLibraryDirective) {
- print("Only libraries can be analyzed.");
- print("$sourceFile is a part and can not be analyzed.");
- return;
- }
- // resolve library
- var libraryElement = context.computeLibraryElement(librarySource);
- // prepare source and errors
- prepareSources(libraryElement);
- prepareErrors();
+ prepareAnalysisContext(sourceFile, librarySource);
+
+ // async perform all tasks in context
+ _analyze();
+ }
+
+ void _analyze() {
+ new Future(context.performAnalysisTask).then((AnalysisResult result) {
+ List<ChangeNotice> notices = result.changeNotices;
+ // TODO(jwren) change 'notices != null' to 'result.hasMoreWork()' after
+ // next dart translation is landed for the analyzer
+ if (notices != null) {
+ // There is more work, record the set of sources, and then call self
+ // again to perform next task
+ for (ChangeNotice notice in notices) {
+ sources.add(notice.source);
+ }
+ return _analyze();
+ }
+ //
+ // There are not any more tasks, set error code and print performance
+ // numbers.
+ //
+ // prepare errors
+ prepareErrors();
+
+ // compute max severity and set exitCode
+ ErrorSeverity status = maxErrorSeverity;
+ if (status == ErrorSeverity.WARNING && options.warningsAreFatal) {
+ status = ErrorSeverity.ERROR;
+ }
+ exitCode = status.ordinal;
+
+ // print errors
+ ErrorFormatter formatter = new ErrorFormatter(stdout, options);
+ formatter.formatErrors(errorInfos);
+
+ // print performance numbers
+ if (options.perf) {
+ int totalTime = JavaSystem.currentTimeMillis() - startTime;
+ int ioTime = PerformanceStatistics.io.result;
+ int scanTime = PerformanceStatistics.scan.result;
+ int parseTime = PerformanceStatistics.parse.result;
+ int resolveTime = PerformanceStatistics.resolve.result;
+ int errorsTime = PerformanceStatistics.errors.result;
+ int hintsTime = PerformanceStatistics.hints.result;
+ int angularTime = PerformanceStatistics.angular.result;
+ stdout.writeln("io:$ioTime");
+ stdout.writeln("scan:$scanTime");
+ stdout.writeln("parse:$parseTime");
+ stdout.writeln("resolve:$resolveTime");
+ stdout.writeln("errors:$errorsTime");
+ stdout.writeln("hints:$hintsTime");
+ stdout.writeln("angular:$angularTime");
+ stdout.writeln("other:${totalTime
+ - (ioTime + scanTime + parseTime + resolveTime + errorsTime + hintsTime
+ + angularTime)}");
+ stdout.writeln("total:$totalTime");
+ }
+ }).catchError((ex, st) {
+ AnalysisEngine.instance.logger.logError("${ex}\n${st}");
+ });
}
/// Returns the maximal [ErrorSeverity] of the recorded errors.
@@ -87,7 +141,7 @@
return status;
}
- void prepareAnalysisContext(JavaFile sourceFile) {
+ void prepareAnalysisContext(JavaFile sourceFile, Source source) {
List<UriResolver> resolvers = [new DartUriResolver(sdk), new FileUriResolver()];
// may be add package resolver
{
@@ -104,19 +158,19 @@
sourceFactory = new SourceFactory(resolvers);
context = AnalysisEngine.instance.createAnalysisContext();
context.sourceFactory = sourceFactory;
+ // Uncomment the following to have errors reported on stdout and stderr
+ AnalysisEngine.instance.logger = new StdLogger(options.log);
// set options for context
AnalysisOptionsImpl contextOptions = new AnalysisOptionsImpl();
- contextOptions.cacheSize = 256;
+ contextOptions.cacheSize = _MAX_CACHE_SIZE;
contextOptions.hint = !options.disableHints;
context.analysisOptions = contextOptions;
- }
- /// Fills [sources].
- void prepareSources(LibraryElement library) {
- var units = new Set<CompilationUnitElement>();
- var libraries = new Set<LibraryElement>();
- addLibrarySources(library, libraries, units);
+ // Create and add a ChangeSet
+ ChangeSet changeSet = new ChangeSet();
+ changeSet.addedSource(source);
+ context.applyChanges(changeSet);
}
void addCompilationUnitSource(CompilationUnitElement unit, Set<LibraryElement> libraries,
@@ -159,7 +213,7 @@
}
}
- /// Fills [errorInfos].
+ /// Fills [errorInfos] using [sources].
void prepareErrors() {
for (Source source in sources) {
context.computeErrors(source);
@@ -207,3 +261,37 @@
return UriKind.FILE_URI;
}
}
+
+/**
+ * This [Logger] prints out information comments to [stdout] and error messages
+ * to [stderr].
+ */
+class StdLogger extends Logger {
+ final bool log;
+
+ StdLogger(this.log);
+
+ @override
+ void logError(String message) {
+ stderr.writeln(message);
+ }
+
+ @override
+ void logError2(String message, Exception exception) {
+ stderr.writeln(message);
+ }
+
+ @override
+ void logInformation(String message) {
+ if (log) {
+ stdout.writeln(message);
+ }
+ }
+
+ @override
+ void logInformation2(String message, Exception exception) {
+ if (log) {
+ stdout.writeln(message);
+ }
+ }
+}
diff --git a/pkg/analyzer/lib/src/error.dart b/pkg/analyzer/lib/src/error.dart
index 483c433..b138e41 100644
--- a/pkg/analyzer/lib/src/error.dart
+++ b/pkg/analyzer/lib/src/error.dart
@@ -4,7 +4,6 @@
library error;
import 'dart:collection';
-import 'dart:math' as math;
import 'generated/error.dart';
import 'generated/source.dart';
@@ -44,45 +43,50 @@
String toString() {
var builder = new StringBuffer();
- var content = error.source.contents.data;
- var beforeError = content.substring(0, error.offset);
- var lineNumber = "\n".allMatches(beforeError).length + 1;
- builder.writeln("Error on line $lineNumber of ${error.source.fullName}: "
- "${error.message}");
- var errorLineIndex = beforeError.lastIndexOf("\n") + 1;
- var errorEndOfLineIndex = content.indexOf("\n", error.offset);
- if (errorEndOfLineIndex == -1) errorEndOfLineIndex = content.length;
- var errorLine = content.substring(
- errorLineIndex, errorEndOfLineIndex);
- var errorColumn = error.offset - errorLineIndex;
- var errorLength = error.length;
+ // Print a less friendly string representation to ensure that
+ // error.source.contents is not executed, as .contents it isn't async
+ builder.write("Error in ${error.source.shortName}: ${error.message}");
- // Ensure that the error line we display isn't too long.
- if (errorLine.length > _MAX_ERROR_LINE_LENGTH) {
- var leftLength = errorColumn;
- var rightLength = errorLine.length - leftLength;
- if (leftLength > _MAX_ERROR_LINE_LENGTH ~/ 2 &&
- rightLength > _MAX_ERROR_LINE_LENGTH ~/ 2) {
- errorLine = "..." + errorLine.substring(
- errorColumn - _MAX_ERROR_LINE_LENGTH ~/ 2 + 3,
- errorColumn + _MAX_ERROR_LINE_LENGTH ~/ 2 - 3)
- + "...";
- errorColumn = _MAX_ERROR_LINE_LENGTH ~/ 2;
- } else if (rightLength > _MAX_ERROR_LINE_LENGTH ~/ 2) {
- errorLine = errorLine.substring(0, _MAX_ERROR_LINE_LENGTH - 3) + "...";
- } else {
- assert(leftLength > _MAX_ERROR_LINE_LENGTH ~/ 2);
- errorColumn -= errorLine.length - _MAX_ERROR_LINE_LENGTH;
- errorLine = "..." + errorLine.substring(
- errorLine.length - _MAX_ERROR_LINE_LENGTH + 3, errorLine.length);
- }
- errorLength = math.min(errorLength, _MAX_ERROR_LINE_LENGTH - errorColumn);
- }
- builder.writeln(errorLine);
+// var content = error.source.contents.data;
+// var beforeError = content.substring(0, error.offset);
+// var lineNumber = "\n".allMatches(beforeError).length + 1;
+// builder.writeln("Error on line $lineNumber of ${error.source.fullName}: "
+// "${error.message}");
- for (var i = 0; i < errorColumn; i++) builder.write(" ");
- for (var i = 0; i < errorLength; i++) builder.write("^");
+// var errorLineIndex = beforeError.lastIndexOf("\n") + 1;
+// var errorEndOfLineIndex = content.indexOf("\n", error.offset);
+// if (errorEndOfLineIndex == -1) errorEndOfLineIndex = content.length;
+// var errorLine = content.substring(
+// errorLineIndex, errorEndOfLineIndex);
+// var errorColumn = error.offset - errorLineIndex;
+// var errorLength = error.length;
+//
+// // Ensure that the error line we display isn't too long.
+// if (errorLine.length > _MAX_ERROR_LINE_LENGTH) {
+// var leftLength = errorColumn;
+// var rightLength = errorLine.length - leftLength;
+// if (leftLength > _MAX_ERROR_LINE_LENGTH ~/ 2 &&
+// rightLength > _MAX_ERROR_LINE_LENGTH ~/ 2) {
+// errorLine = "..." + errorLine.substring(
+// errorColumn - _MAX_ERROR_LINE_LENGTH ~/ 2 + 3,
+// errorColumn + _MAX_ERROR_LINE_LENGTH ~/ 2 - 3)
+// + "...";
+// errorColumn = _MAX_ERROR_LINE_LENGTH ~/ 2;
+// } else if (rightLength > _MAX_ERROR_LINE_LENGTH ~/ 2) {
+// errorLine = errorLine.substring(0, _MAX_ERROR_LINE_LENGTH - 3) + "...";
+// } else {
+// assert(leftLength > _MAX_ERROR_LINE_LENGTH ~/ 2);
+// errorColumn -= errorLine.length - _MAX_ERROR_LINE_LENGTH;
+// errorLine = "..." + errorLine.substring(
+// errorLine.length - _MAX_ERROR_LINE_LENGTH + 3, errorLine.length);
+// }
+// errorLength = math.min(errorLength, _MAX_ERROR_LINE_LENGTH - errorColumn);
+// }
+// builder.writeln(errorLine);
+//
+// for (var i = 0; i < errorColumn; i++) builder.write(" ");
+// for (var i = 0; i < errorLength; i++) builder.write("^");
builder.writeln();
return builder.toString();
diff --git a/pkg/analyzer/lib/src/generated/ast.dart b/pkg/analyzer/lib/src/generated/ast.dart
index bf07ccc..58ce80b 100644
--- a/pkg/analyzer/lib/src/generated/ast.dart
+++ b/pkg/analyzer/lib/src/generated/ast.dart
@@ -10,7 +10,7 @@
import 'dart:collection';
import 'java_core.dart';
import 'java_engine.dart';
-import 'source.dart' show LineInfo;
+import 'source.dart' show LineInfo, Source;
import 'scanner.dart';
import 'engine.dart' show AnalysisEngine;
import 'utilities_dart.dart';
@@ -45,10 +45,13 @@
this._strings.addAll(strings);
}
+ @override
accept(AstVisitor visitor) => visitor.visitAdjacentStrings(this);
+ @override
Token get beginToken => _strings.beginToken;
+ @override
Token get endToken => _strings.endToken;
/**
@@ -58,10 +61,12 @@
*/
NodeList<StringLiteral> get strings => _strings;
+ @override
void visitChildren(AstVisitor visitor) {
_strings.accept(visitor);
}
+ @override
void appendStringValue(JavaStringBuilder builder) {
for (StringLiteral stringLiteral in strings) {
stringLiteral.appendStringValue(builder);
@@ -97,6 +102,7 @@
this._metadata.addAll(metadata);
}
+ @override
Token get beginToken {
if (_comment == null) {
if (_metadata.isEmpty) {
@@ -149,8 +155,9 @@
this._metadata.addAll(metadata);
}
+ @override
void visitChildren(AstVisitor visitor) {
- if (commentIsBeforeAnnotations()) {
+ if (_commentIsBeforeAnnotations()) {
safelyVisitChild(_comment, visitor);
_metadata.accept(visitor);
} else {
@@ -172,7 +179,7 @@
*
* @return `true` if the comment is lexically before any annotations
*/
- bool commentIsBeforeAnnotations() {
+ bool _commentIsBeforeAnnotations() {
if (_comment == null || _metadata.isEmpty) {
return true;
}
@@ -246,6 +253,11 @@
Element _element;
/**
+ * The element annotation representing this annotation in the element model.
+ */
+ ElementAnnotation elementAnnotation;
+
+ /**
* Initialize a newly created annotation.
*
* @param atSign the at sign that introduced the annotation
@@ -264,6 +276,7 @@
this._arguments = becomeParentOf(arguments);
}
+ @override
accept(AstVisitor visitor) => visitor.visitAnnotation(this);
/**
@@ -274,6 +287,7 @@
*/
ArgumentList get arguments => _arguments;
+ @override
Token get beginToken => atSign;
/**
@@ -300,6 +314,7 @@
return null;
}
+ @override
Token get endToken {
if (_arguments != null) {
return _arguments.endToken;
@@ -354,6 +369,7 @@
this._name = becomeParentOf(name);
}
+ @override
void visitChildren(AstVisitor visitor) {
safelyVisitChild(_name, visitor);
safelyVisitChild(_constructorName, visitor);
@@ -390,10 +406,13 @@
this._identifier = becomeParentOf(identifier);
}
+ @override
accept(AstVisitor visitor) => visitor.visitArgumentDefinitionTest(this);
+ @override
Token get beginToken => question;
+ @override
Token get endToken => _identifier.endToken;
/**
@@ -403,6 +422,7 @@
*/
SimpleIdentifier get identifier => _identifier;
+ @override
int get precedence => 15;
/**
@@ -414,6 +434,7 @@
this._identifier = becomeParentOf(identifier);
}
+ @override
void visitChildren(AstVisitor visitor) {
safelyVisitChild(_identifier, visitor);
}
@@ -480,6 +501,7 @@
this._rightParenthesis = rightParenthesis;
}
+ @override
accept(AstVisitor visitor) => visitor.visitArgumentList(this);
/**
@@ -491,8 +513,10 @@
*/
NodeList<Expression> get arguments => _arguments;
+ @override
Token get beginToken => _leftParenthesis;
+ @override
Token get endToken => _rightParenthesis;
/**
@@ -557,6 +581,7 @@
_rightParenthesis = parenthesis;
}
+ @override
void visitChildren(AstVisitor visitor) {
_arguments.accept(visitor);
}
@@ -653,10 +678,13 @@
this._type = becomeParentOf(type);
}
+ @override
accept(AstVisitor visitor) => visitor.visitAsExpression(this);
+ @override
Token get beginToken => _expression.beginToken;
+ @override
Token get endToken => _type.endToken;
/**
@@ -666,6 +694,7 @@
*/
Expression get expression => _expression;
+ @override
int get precedence => 7;
/**
@@ -693,6 +722,7 @@
this._type = becomeParentOf(name);
}
+ @override
void visitChildren(AstVisitor visitor) {
safelyVisitChild(_expression, visitor);
safelyVisitChild(_type, visitor);
@@ -746,8 +776,10 @@
this._condition = becomeParentOf(condition);
}
+ @override
accept(AstVisitor visitor) => visitor.visitAssertStatement(this);
+ @override
Token get beginToken => keyword;
/**
@@ -757,6 +789,7 @@
*/
Expression get condition => _condition;
+ @override
Token get endToken => semicolon;
/**
@@ -768,6 +801,7 @@
this._condition = becomeParentOf(condition);
}
+ @override
void visitChildren(AstVisitor visitor) {
safelyVisitChild(_condition, visitor);
}
@@ -823,8 +857,10 @@
this._rightHandSide = becomeParentOf(rightHandSide);
}
+ @override
accept(AstVisitor visitor) => visitor.visitAssignmentExpression(this);
+ @override
Token get beginToken => _leftHandSide.beginToken;
/**
@@ -843,6 +879,7 @@
return element;
}
+ @override
Token get endToken => _rightHandSide.endToken;
/**
@@ -852,6 +889,7 @@
*/
Expression get leftHandSide => _leftHandSide;
+ @override
int get precedence => 1;
/**
@@ -919,6 +957,7 @@
_staticElement = element;
}
+ @override
void visitChildren(AstVisitor visitor) {
safelyVisitChild(_leftHandSide, visitor);
safelyVisitChild(_rightHandSide, visitor);
@@ -1155,6 +1194,7 @@
return writer.toString();
}
+ @override
String toString() => toSource();
/**
@@ -1463,8 +1503,10 @@
this._rightOperand = becomeParentOf(rightOperand);
}
+ @override
accept(AstVisitor visitor) => visitor.visitBinaryExpression(this);
+ @override
Token get beginToken => _leftOperand.beginToken;
/**
@@ -1483,6 +1525,7 @@
return element;
}
+ @override
Token get endToken => _rightOperand.endToken;
/**
@@ -1492,6 +1535,7 @@
*/
Expression get leftOperand => _leftOperand;
+ @override
int get precedence => operator.type.precedence;
/**
@@ -1559,6 +1603,7 @@
_staticElement = element;
}
+ @override
void visitChildren(AstVisitor visitor) {
safelyVisitChild(_leftOperand, visitor);
safelyVisitChild(_rightOperand, visitor);
@@ -1643,10 +1688,13 @@
this._statements.addAll(statements);
}
+ @override
accept(AstVisitor visitor) => visitor.visitBlock(this);
+ @override
Token get beginToken => leftBracket;
+ @override
Token get endToken => rightBracket;
/**
@@ -1656,6 +1704,7 @@
*/
NodeList<Statement> get statements => _statements;
+ @override
void visitChildren(AstVisitor visitor) {
_statements.accept(visitor);
}
@@ -1685,8 +1734,10 @@
this._block = becomeParentOf(block);
}
+ @override
accept(AstVisitor visitor) => visitor.visitBlockFunctionBody(this);
+ @override
Token get beginToken => _block.beginToken;
/**
@@ -1696,6 +1747,7 @@
*/
Block get block => _block;
+ @override
Token get endToken => _block.endToken;
/**
@@ -1707,6 +1759,7 @@
this._block = becomeParentOf(block);
}
+ @override
void visitChildren(AstVisitor visitor) {
safelyVisitChild(_block, visitor);
}
@@ -1739,14 +1792,19 @@
*/
BooleanLiteral(this.literal, this.value);
+ @override
accept(AstVisitor visitor) => visitor.visitBooleanLiteral(this);
+ @override
Token get beginToken => literal;
+ @override
Token get endToken => literal;
+ @override
bool get isSynthetic => literal.isSynthetic;
+ @override
void visitChildren(AstVisitor visitor) {
}
}
@@ -1786,10 +1844,13 @@
this._label = becomeParentOf(label);
}
+ @override
accept(AstVisitor visitor) => visitor.visitBreakStatement(this);
+ @override
Token get beginToken => keyword;
+ @override
Token get endToken => semicolon;
/**
@@ -1808,6 +1869,7 @@
_label = becomeParentOf(identifier);
}
+ @override
void visitChildren(AstVisitor visitor) {
safelyVisitChild(_label, visitor);
}
@@ -1854,8 +1916,10 @@
this._cascadeSections.addAll(cascadeSections);
}
+ @override
accept(AstVisitor visitor) => visitor.visitCascadeExpression(this);
+ @override
Token get beginToken => _target.beginToken;
/**
@@ -1865,8 +1929,10 @@
*/
NodeList<Expression> get cascadeSections => _cascadeSections;
+ @override
Token get endToken => _cascadeSections.endToken;
+ @override
int get precedence => 2;
/**
@@ -1885,6 +1951,7 @@
this._target = becomeParentOf(target);
}
+ @override
void visitChildren(AstVisitor visitor) {
safelyVisitChild(_target, visitor);
_cascadeSections.accept(visitor);
@@ -1974,8 +2041,10 @@
this._body = becomeParentOf(body);
}
+ @override
accept(AstVisitor visitor) => visitor.visitCatchClause(this);
+ @override
Token get beginToken {
if (onKeyword != null) {
return onKeyword;
@@ -1990,6 +2059,7 @@
*/
Block get body => _body;
+ @override
Token get endToken => _body.endToken;
/**
@@ -2068,6 +2138,7 @@
_stackTraceParameter = becomeParentOf(parameter);
}
+ @override
void visitChildren(AstVisitor visitor) {
safelyVisitChild(exceptionType, visitor);
safelyVisitChild(_exceptionParameter, visitor);
@@ -2171,6 +2242,7 @@
this._members.addAll(members);
}
+ @override
accept(AstVisitor visitor) => visitor.visitClassDeclaration(this);
/**
@@ -2195,8 +2267,10 @@
return null;
}
+ @override
ClassElement get element => _name != null ? (_name.staticElement as ClassElement) : null;
+ @override
Token get endToken => rightBracket;
/**
@@ -2313,6 +2387,7 @@
this._withClause = becomeParentOf(withClause);
}
+ @override
void visitChildren(AstVisitor visitor) {
super.visitChildren(visitor);
safelyVisitChild(_name, visitor);
@@ -2324,6 +2399,7 @@
members.accept(visitor);
}
+ @override
Token get firstTokenAfterCommentAndMetadata {
if (abstractKeyword != null) {
return abstractKeyword;
@@ -2418,8 +2494,10 @@
this._implementsClause = becomeParentOf(implementsClause);
}
+ @override
accept(AstVisitor visitor) => visitor.visitClassTypeAlias(this);
+ @override
ClassElement get element => _name != null ? (_name.staticElement as ClassElement) : null;
/**
@@ -2503,6 +2581,7 @@
this._withClause = becomeParentOf(withClause);
}
+ @override
void visitChildren(AstVisitor visitor) {
super.visitChildren(visitor);
safelyVisitChild(_name, visitor);
@@ -2537,6 +2616,7 @@
*/
Combinator(this.keyword);
+ @override
Token get beginToken => keyword;
}
@@ -2623,10 +2703,13 @@
this._references.addAll(references);
}
+ @override
accept(AstVisitor visitor) => visitor.visitComment(this);
+ @override
Token get beginToken => tokens[0];
+ @override
Token get endToken => tokens[tokens.length - 1];
/**
@@ -2657,6 +2740,7 @@
*/
bool get isEndOfLine => identical(_type, CommentType.END_OF_LINE);
+ @override
void visitChildren(AstVisitor visitor) {
_references.accept(visitor);
}
@@ -2717,10 +2801,13 @@
this._identifier = becomeParentOf(identifier);
}
+ @override
accept(AstVisitor visitor) => visitor.visitCommentReference(this);
+ @override
Token get beginToken => _identifier.beginToken;
+ @override
Token get endToken => _identifier.endToken;
/**
@@ -2739,6 +2826,7 @@
identifier = becomeParentOf(identifier);
}
+ @override
void visitChildren(AstVisitor visitor) {
safelyVisitChild(_identifier, visitor);
}
@@ -2824,6 +2912,7 @@
this._declarations.addAll(declarations);
}
+ @override
accept(AstVisitor visitor) => visitor.visitCompilationUnit(this);
/**
@@ -2840,6 +2929,7 @@
*/
NodeList<Directive> get directives => _directives;
+ @override
int get length {
Token endToken = this.endToken;
if (endToken == null) {
@@ -2848,6 +2938,7 @@
return endToken.offset + endToken.length;
}
+ @override
int get offset => 0;
/**
@@ -2867,9 +2958,10 @@
this._scriptTag = becomeParentOf(scriptTag);
}
+ @override
void visitChildren(AstVisitor visitor) {
safelyVisitChild(_scriptTag, visitor);
- if (directivesAreBeforeDeclarations()) {
+ if (_directivesAreBeforeDeclarations()) {
_directives.accept(visitor);
_declarations.accept(visitor);
} else {
@@ -2884,7 +2976,7 @@
*
* @return `true` if all of the directives are lexically before any declarations
*/
- bool directivesAreBeforeDeclarations() {
+ bool _directivesAreBeforeDeclarations() {
if (_directives.isEmpty || _declarations.isEmpty) {
return true;
}
@@ -2985,8 +3077,10 @@
this._elseExpression = becomeParentOf(elseExpression);
}
+ @override
accept(AstVisitor visitor) => visitor.visitConditionalExpression(this);
+ @override
Token get beginToken => _condition.beginToken;
/**
@@ -3003,8 +3097,10 @@
*/
Expression get elseExpression => _elseExpression;
+ @override
Token get endToken => _elseExpression.endToken;
+ @override
int get precedence => 3;
/**
@@ -3044,6 +3140,7 @@
_thenExpression = becomeParentOf(expression);
}
+ @override
void visitChildren(AstVisitor visitor) {
safelyVisitChild(_condition, visitor);
safelyVisitChild(_thenExpression, visitor);
@@ -3170,6 +3267,7 @@
this._body = becomeParentOf(body);
}
+ @override
accept(AstVisitor visitor) => visitor.visitConstructorDeclaration(this);
/**
@@ -3179,6 +3277,7 @@
*/
FunctionBody get body => _body;
+ @override
Token get endToken {
if (_body != null) {
return _body.endToken;
@@ -3274,6 +3373,7 @@
_returnType = becomeParentOf(typeName);
}
+ @override
void visitChildren(AstVisitor visitor) {
super.visitChildren(visitor);
safelyVisitChild(_returnType, visitor);
@@ -3284,8 +3384,9 @@
safelyVisitChild(_body, visitor);
}
+ @override
Token get firstTokenAfterCommentAndMetadata {
- Token leftMost = this.leftMost([externalKeyword, constKeyword, factoryKeyword]);
+ Token leftMost = _leftMost([externalKeyword, constKeyword, factoryKeyword]);
if (leftMost != null) {
return leftMost;
}
@@ -3299,7 +3400,7 @@
* @param tokens the tokens being compared to find the left-most token
* @return the left-most of the given tokens
*/
- Token leftMost(List<Token> tokens) {
+ Token _leftMost(List<Token> tokens) {
Token leftMost = null;
int offset = 2147483647;
for (Token token in tokens) {
@@ -3362,8 +3463,10 @@
this._expression = becomeParentOf(expression);
}
+ @override
accept(AstVisitor visitor) => visitor.visitConstructorFieldInitializer(this);
+ @override
Token get beginToken {
if (keyword != null) {
return keyword;
@@ -3371,6 +3474,7 @@
return _fieldName.beginToken;
}
+ @override
Token get endToken => _expression.endToken;
/**
@@ -3406,6 +3510,7 @@
_fieldName = becomeParentOf(identifier);
}
+ @override
void visitChildren(AstVisitor visitor) {
safelyVisitChild(_fieldName, visitor);
safelyVisitChild(_expression, visitor);
@@ -3470,10 +3575,13 @@
this._name = becomeParentOf(name);
}
+ @override
accept(AstVisitor visitor) => visitor.visitConstructorName(this);
+ @override
Token get beginToken => _type.beginToken;
+ @override
Token get endToken {
if (_name != null) {
return _name.endToken;
@@ -3533,6 +3641,7 @@
this._type = becomeParentOf(type);
}
+ @override
void visitChildren(AstVisitor visitor) {
safelyVisitChild(_type, visitor);
safelyVisitChild(_name, visitor);
@@ -3574,10 +3683,13 @@
this._label = becomeParentOf(label);
}
+ @override
accept(AstVisitor visitor) => visitor.visitContinueStatement(this);
+ @override
Token get beginToken => keyword;
+ @override
Token get endToken => semicolon;
/**
@@ -3596,6 +3708,7 @@
_label = becomeParentOf(identifier);
}
+ @override
void visitChildren(AstVisitor visitor) {
safelyVisitChild(_label, visitor);
}
@@ -3664,8 +3777,10 @@
this._identifier = becomeParentOf(identifier);
}
+ @override
accept(AstVisitor visitor) => visitor.visitDeclaredIdentifier(this);
+ @override
LocalVariableElement get element {
SimpleIdentifier identifier = this.identifier;
if (identifier == null) {
@@ -3674,6 +3789,7 @@
return identifier.staticElement as LocalVariableElement;
}
+ @override
Token get endToken => _identifier.endToken;
/**
@@ -3716,12 +3832,14 @@
_type = becomeParentOf(typeName);
}
+ @override
void visitChildren(AstVisitor visitor) {
super.visitChildren(visitor);
safelyVisitChild(_type, visitor);
safelyVisitChild(_identifier, visitor);
}
+ @override
Token get firstTokenAfterCommentAndMetadata {
if (keyword != null) {
return keyword;
@@ -3781,8 +3899,10 @@
this._defaultValue = becomeParentOf(defaultValue);
}
+ @override
accept(AstVisitor visitor) => visitor.visitDefaultFormalParameter(this);
+ @override
Token get beginToken => _parameter.beginToken;
/**
@@ -3793,6 +3913,7 @@
*/
Expression get defaultValue => _defaultValue;
+ @override
Token get endToken {
if (_defaultValue != null) {
return _defaultValue.endToken;
@@ -3800,6 +3921,7 @@
return _parameter.endToken;
}
+ @override
SimpleIdentifier get identifier => _parameter.identifier;
/**
@@ -3809,8 +3931,10 @@
*/
NormalFormalParameter get parameter => _parameter;
+ @override
bool get isConst => _parameter != null && _parameter.isConst;
+ @override
bool get isFinal => _parameter != null && _parameter.isFinal;
/**
@@ -3831,6 +3955,7 @@
_parameter = becomeParentOf(formalParameter);
}
+ @override
void visitChildren(AstVisitor visitor) {
safelyVisitChild(_parameter, visitor);
safelyVisitChild(_defaultValue, visitor);
@@ -3954,8 +4079,10 @@
this._rightParenthesis = rightParenthesis;
}
+ @override
accept(AstVisitor visitor) => visitor.visitDoStatement(this);
+ @override
Token get beginToken => doKeyword;
/**
@@ -3972,6 +4099,7 @@
*/
Expression get condition => _condition;
+ @override
Token get endToken => semicolon;
/**
@@ -4024,6 +4152,7 @@
_rightParenthesis = parenthesis;
}
+ @override
void visitChildren(AstVisitor visitor) {
safelyVisitChild(_body, visitor);
safelyVisitChild(_condition, visitor);
@@ -4061,12 +4190,16 @@
*/
DoubleLiteral(this.literal, this.value);
+ @override
accept(AstVisitor visitor) => visitor.visitDoubleLiteral(this);
+ @override
Token get beginToken => literal;
+ @override
Token get endToken => literal;
+ @override
void visitChildren(AstVisitor visitor) {
}
}
@@ -4093,12 +4226,16 @@
*/
EmptyFunctionBody(this.semicolon);
+ @override
accept(AstVisitor visitor) => visitor.visitEmptyFunctionBody(this);
+ @override
Token get beginToken => semicolon;
+ @override
Token get endToken => semicolon;
+ @override
void visitChildren(AstVisitor visitor) {
}
}
@@ -4124,12 +4261,16 @@
*/
EmptyStatement(this.semicolon);
+ @override
accept(AstVisitor visitor) => visitor.visitEmptyStatement(this);
+ @override
Token get beginToken => semicolon;
+ @override
Token get endToken => semicolon;
+ @override
void visitChildren(AstVisitor visitor) {
}
}
@@ -4164,10 +4305,13 @@
*/
ExportDirective(Comment comment, List<Annotation> metadata, Token keyword, StringLiteral libraryUri, List<Combinator> combinators, Token semicolon) : super(comment, metadata, keyword, libraryUri, combinators, semicolon);
+ @override
accept(AstVisitor visitor) => visitor.visitExportDirective(this);
+ @override
ExportElement get element => super.element as ExportElement;
+ @override
LibraryElement get uriElement {
ExportElement exportElement = element;
if (exportElement != null) {
@@ -4176,6 +4320,7 @@
return null;
}
+ @override
void visitChildren(AstVisitor visitor) {
super.visitChildren(visitor);
combinators.accept(visitor);
@@ -4202,13 +4347,13 @@
/**
* The static type of this expression, or `null` if the AST structure has not been resolved.
*/
- Type2 staticType;
+ DartType staticType;
/**
* The propagated type of this expression, or `null` if type propagation has not been
* performed on the AST structure.
*/
- Type2 propagatedType;
+ DartType propagatedType;
/**
* Return the best parameter element information available for this expression. If type
@@ -4234,7 +4379,7 @@
*
* @return the best type information available for this expression
*/
- Type2 get bestType {
+ DartType get bestType {
if (propagatedType != null) {
return propagatedType;
} else if (staticType != null) {
@@ -4376,10 +4521,13 @@
this._expression = becomeParentOf(expression);
}
+ @override
accept(AstVisitor visitor) => visitor.visitExpressionFunctionBody(this);
+ @override
Token get beginToken => functionDefinition;
+ @override
Token get endToken {
if (semicolon != null) {
return semicolon;
@@ -4403,6 +4551,7 @@
this._expression = becomeParentOf(expression);
}
+ @override
void visitChildren(AstVisitor visitor) {
safelyVisitChild(_expression, visitor);
}
@@ -4438,10 +4587,13 @@
this._expression = becomeParentOf(expression);
}
+ @override
accept(AstVisitor visitor) => visitor.visitExpressionStatement(this);
+ @override
Token get beginToken => _expression.beginToken;
+ @override
Token get endToken {
if (semicolon != null) {
return semicolon;
@@ -4456,6 +4608,7 @@
*/
Expression get expression => _expression;
+ @override
bool get isSynthetic => _expression.isSynthetic && semicolon.isSynthetic;
/**
@@ -4467,6 +4620,7 @@
this._expression = becomeParentOf(expression);
}
+ @override
void visitChildren(AstVisitor visitor) {
safelyVisitChild(_expression, visitor);
}
@@ -4502,10 +4656,13 @@
this._superclass = becomeParentOf(superclass);
}
+ @override
accept(AstVisitor visitor) => visitor.visitExtendsClause(this);
+ @override
Token get beginToken => keyword;
+ @override
Token get endToken => _superclass.endToken;
/**
@@ -4524,6 +4681,7 @@
_superclass = becomeParentOf(name);
}
+ @override
void visitChildren(AstVisitor visitor) {
safelyVisitChild(_superclass, visitor);
}
@@ -4567,10 +4725,13 @@
this._fieldList = becomeParentOf(fieldList);
}
+ @override
accept(AstVisitor visitor) => visitor.visitFieldDeclaration(this);
+ @override
Element get element => null;
+ @override
Token get endToken => semicolon;
/**
@@ -4596,11 +4757,13 @@
fieldList = becomeParentOf(fieldList);
}
+ @override
void visitChildren(AstVisitor visitor) {
super.visitChildren(visitor);
safelyVisitChild(_fieldList, visitor);
}
+ @override
Token get firstTokenAfterCommentAndMetadata {
if (staticKeyword != null) {
return staticKeyword;
@@ -4664,8 +4827,10 @@
this._parameters = becomeParentOf(parameters);
}
+ @override
accept(AstVisitor visitor) => visitor.visitFieldFormalParameter(this);
+ @override
Token get beginToken {
if (keyword != null) {
return keyword;
@@ -4675,6 +4840,7 @@
return thisToken;
}
+ @override
Token get endToken => identifier.endToken;
/**
@@ -4694,8 +4860,10 @@
*/
TypeName get type => _type;
+ @override
bool get isConst => (keyword is KeywordToken) && identical((keyword as KeywordToken).keyword, Keyword.CONST);
+ @override
bool get isFinal => (keyword is KeywordToken) && identical((keyword as KeywordToken).keyword, Keyword.FINAL);
/**
@@ -4716,6 +4884,7 @@
_type = becomeParentOf(typeName);
}
+ @override
void visitChildren(AstVisitor visitor) {
super.visitChildren(visitor);
safelyVisitChild(_type, visitor);
@@ -4807,8 +4976,10 @@
this._body = becomeParentOf(body);
}
+ @override
accept(AstVisitor visitor) => visitor.visitForEachStatement(this);
+ @override
Token get beginToken => forKeyword;
/**
@@ -4818,6 +4989,7 @@
*/
Statement get body => _body;
+ @override
Token get endToken => _body.endToken;
/**
@@ -4878,6 +5050,7 @@
_loopVariable = becomeParentOf(variable);
}
+ @override
void visitChildren(AstVisitor visitor) {
safelyVisitChild(_loopVariable, visitor);
safelyVisitChild(_identifier, visitor);
@@ -4980,8 +5153,10 @@
this._body = becomeParentOf(body);
}
+ @override
accept(AstVisitor visitor) => visitor.visitForStatement(this);
+ @override
Token get beginToken => forKeyword;
/**
@@ -4999,6 +5174,7 @@
*/
Expression get condition => _condition;
+ @override
Token get endToken => _body.endToken;
/**
@@ -5058,6 +5234,7 @@
variableList = becomeParentOf(variableList);
}
+ @override
void visitChildren(AstVisitor visitor) {
safelyVisitChild(_variableList, visitor);
safelyVisitChild(_initialization, visitor);
@@ -5199,10 +5376,13 @@
this._rightParenthesis = rightParenthesis;
}
+ @override
accept(AstVisitor visitor) => visitor.visitFormalParameterList(this);
+ @override
Token get beginToken => _leftParenthesis;
+ @override
Token get endToken => _rightParenthesis;
/**
@@ -5297,6 +5477,7 @@
_rightParenthesis = parenthesis;
}
+ @override
void visitChildren(AstVisitor visitor) {
_parameters.accept(visitor);
}
@@ -5373,10 +5554,13 @@
this._functionExpression = becomeParentOf(functionExpression);
}
+ @override
accept(AstVisitor visitor) => visitor.visitFunctionDeclaration(this);
+ @override
ExecutableElement get element => _name != null ? (_name.staticElement as ExecutableElement) : null;
+ @override
Token get endToken => _functionExpression.endToken;
/**
@@ -5441,6 +5625,7 @@
_returnType = becomeParentOf(name);
}
+ @override
void visitChildren(AstVisitor visitor) {
super.visitChildren(visitor);
safelyVisitChild(_returnType, visitor);
@@ -5448,6 +5633,7 @@
safelyVisitChild(_functionExpression, visitor);
}
+ @override
Token get firstTokenAfterCommentAndMetadata {
if (externalKeyword != null) {
return externalKeyword;
@@ -5482,10 +5668,13 @@
this._functionDeclaration = becomeParentOf(functionDeclaration);
}
+ @override
accept(AstVisitor visitor) => visitor.visitFunctionDeclarationStatement(this);
+ @override
Token get beginToken => _functionDeclaration.beginToken;
+ @override
Token get endToken => _functionDeclaration.endToken;
/**
@@ -5504,6 +5693,7 @@
this._functionDeclaration = becomeParentOf(functionDeclaration);
}
+ @override
void visitChildren(AstVisitor visitor) {
safelyVisitChild(_functionDeclaration, visitor);
}
@@ -5545,8 +5735,10 @@
this._body = becomeParentOf(body);
}
+ @override
accept(AstVisitor visitor) => visitor.visitFunctionExpression(this);
+ @override
Token get beginToken {
if (_parameters != null) {
return _parameters.beginToken;
@@ -5565,6 +5757,7 @@
*/
FunctionBody get body => _body;
+ @override
Token get endToken {
if (_body != null) {
return _body.endToken;
@@ -5583,6 +5776,7 @@
*/
FormalParameterList get parameters => _parameters;
+ @override
int get precedence => 16;
/**
@@ -5603,6 +5797,7 @@
this._parameters = becomeParentOf(parameters);
}
+ @override
void visitChildren(AstVisitor visitor) {
safelyVisitChild(_parameters, visitor);
safelyVisitChild(_body, visitor);
@@ -5655,6 +5850,7 @@
this._argumentList = becomeParentOf(argumentList);
}
+ @override
accept(AstVisitor visitor) => visitor.visitFunctionExpressionInvocation(this);
/**
@@ -5664,6 +5860,7 @@
*/
ArgumentList get argumentList => _argumentList;
+ @override
Token get beginToken => _function.beginToken;
/**
@@ -5682,6 +5879,7 @@
return element;
}
+ @override
Token get endToken => _argumentList.endToken;
/**
@@ -5691,6 +5889,7 @@
*/
Expression get function => _function;
+ @override
int get precedence => 15;
/**
@@ -5731,6 +5930,7 @@
_propagatedElement = element;
}
+ @override
void visitChildren(AstVisitor visitor) {
safelyVisitChild(_function, visitor);
safelyVisitChild(_argumentList, visitor);
@@ -5790,8 +5990,10 @@
this._parameters = becomeParentOf(parameters);
}
+ @override
accept(AstVisitor visitor) => visitor.visitFunctionTypeAlias(this);
+ @override
FunctionTypeAliasElement get element => _name != null ? (_name.staticElement as FunctionTypeAliasElement) : null;
/**
@@ -5860,6 +6062,7 @@
this._typeParameters = becomeParentOf(typeParameters);
}
+ @override
void visitChildren(AstVisitor visitor) {
super.visitChildren(visitor);
safelyVisitChild(_returnType, visitor);
@@ -5904,8 +6107,10 @@
this._parameters = becomeParentOf(parameters);
}
+ @override
accept(AstVisitor visitor) => visitor.visitFunctionTypedFormalParameter(this);
+ @override
Token get beginToken {
if (_returnType != null) {
return _returnType.beginToken;
@@ -5913,6 +6118,7 @@
return identifier.beginToken;
}
+ @override
Token get endToken => _parameters.endToken;
/**
@@ -5930,8 +6136,10 @@
*/
TypeName get returnType => _returnType;
+ @override
bool get isConst => false;
+ @override
bool get isFinal => false;
/**
@@ -5952,6 +6160,7 @@
this._returnType = becomeParentOf(returnType);
}
+ @override
void visitChildren(AstVisitor visitor) {
super.visitChildren(visitor);
safelyVisitChild(_returnType, visitor);
@@ -5986,8 +6195,10 @@
this._hiddenNames.addAll(hiddenNames);
}
+ @override
accept(AstVisitor visitor) => visitor.visitHideCombinator(this);
+ @override
Token get endToken => _hiddenNames.endToken;
/**
@@ -5997,6 +6208,7 @@
*/
NodeList<SimpleIdentifier> get hiddenNames => _hiddenNames;
+ @override
void visitChildren(AstVisitor visitor) {
_hiddenNames.accept(visitor);
}
@@ -6059,6 +6271,7 @@
*/
Element get staticElement;
+ @override
bool get isAssignable => true;
}
@@ -6124,8 +6337,10 @@
this._elseStatement = becomeParentOf(elseStatement);
}
+ @override
accept(AstVisitor visitor) => visitor.visitIfStatement(this);
+ @override
Token get beginToken => ifKeyword;
/**
@@ -6143,6 +6358,7 @@
*/
Statement get elseStatement => _elseStatement;
+ @override
Token get endToken {
if (_elseStatement != null) {
return _elseStatement.endToken;
@@ -6187,6 +6403,7 @@
_thenStatement = becomeParentOf(statement);
}
+ @override
void visitChildren(AstVisitor visitor) {
safelyVisitChild(_condition, visitor);
safelyVisitChild(_thenStatement, visitor);
@@ -6225,10 +6442,13 @@
this._interfaces.addAll(interfaces);
}
+ @override
accept(AstVisitor visitor) => visitor.visitImplementsClause(this);
+ @override
Token get beginToken => keyword;
+ @override
Token get endToken => _interfaces.endToken;
/**
@@ -6238,6 +6458,7 @@
*/
NodeList<TypeName> get interfaces => _interfaces;
+ @override
void visitChildren(AstVisitor visitor) {
_interfaces.accept(visitor);
}
@@ -6370,8 +6591,10 @@
this._prefix = becomeParentOf(prefix);
}
+ @override
accept(AstVisitor visitor) => visitor.visitImportDirective(this);
+ @override
ImportElement get element => super.element as ImportElement;
/**
@@ -6382,6 +6605,7 @@
*/
SimpleIdentifier get prefix => _prefix;
+ @override
LibraryElement get uriElement {
ImportElement element = this.element;
if (element == null) {
@@ -6399,6 +6623,7 @@
this._prefix = becomeParentOf(prefix);
}
+ @override
void visitChildren(AstVisitor visitor) {
super.visitChildren(visitor);
safelyVisitChild(_prefix, visitor);
@@ -6492,8 +6717,10 @@
this._rightBracket = rightBracket;
}
+ @override
accept(AstVisitor visitor) => visitor.visitIndexExpression(this);
+ @override
Token get beginToken {
if (_target != null) {
return _target.beginToken;
@@ -6517,6 +6744,7 @@
return element;
}
+ @override
Token get endToken => _rightBracket;
/**
@@ -6533,6 +6761,7 @@
*/
Token get leftBracket => _leftBracket;
+ @override
int get precedence => 15;
/**
@@ -6636,6 +6865,7 @@
return false;
}
+ @override
bool get isAssignable => true;
/**
@@ -6703,6 +6933,7 @@
_target = becomeParentOf(expression);
}
+ @override
void visitChildren(AstVisitor visitor) {
safelyVisitChild(_target, visitor);
safelyVisitChild(_index, visitor);
@@ -6794,6 +7025,7 @@
this._argumentList = becomeParentOf(argumentList);
}
+ @override
accept(AstVisitor visitor) => visitor.visitInstanceCreationExpression(this);
/**
@@ -6803,10 +7035,13 @@
*/
ArgumentList get argumentList => _argumentList;
+ @override
Token get beginToken => keyword;
+ @override
Token get endToken => _argumentList.endToken;
+ @override
int get precedence => 15;
/**
@@ -6825,6 +7060,7 @@
this._argumentList = becomeParentOf(argumentList);
}
+ @override
void visitChildren(AstVisitor visitor) {
safelyVisitChild(constructorName, visitor);
safelyVisitChild(_argumentList, visitor);
@@ -6866,12 +7102,16 @@
*/
IntegerLiteral(this.literal, this.value);
+ @override
accept(AstVisitor visitor) => visitor.visitIntegerLiteral(this);
+ @override
Token get beginToken => literal;
+ @override
Token get endToken => literal;
+ @override
void visitChildren(AstVisitor visitor) {
}
}
@@ -6927,10 +7167,13 @@
this._expression = becomeParentOf(expression);
}
+ @override
accept(AstVisitor visitor) => visitor.visitInterpolationExpression(this);
+ @override
Token get beginToken => leftBracket;
+ @override
Token get endToken {
if (rightBracket != null) {
return rightBracket;
@@ -6955,6 +7198,7 @@
this._expression = becomeParentOf(expression);
}
+ @override
void visitChildren(AstVisitor visitor) {
safelyVisitChild(_expression, visitor);
}
@@ -6991,8 +7235,10 @@
this._value = value;
}
+ @override
accept(AstVisitor visitor) => visitor.visitInterpolationString(this);
+ @override
Token get beginToken => _contents;
/**
@@ -7002,6 +7248,7 @@
*/
Token get contents => _contents;
+ @override
Token get endToken => _contents;
/**
@@ -7029,6 +7276,7 @@
_value = string;
}
+ @override
void visitChildren(AstVisitor visitor) {
}
}
@@ -7075,10 +7323,13 @@
this._type = becomeParentOf(type);
}
+ @override
accept(AstVisitor visitor) => visitor.visitIsExpression(this);
+ @override
Token get beginToken => _expression.beginToken;
+ @override
Token get endToken => _type.endToken;
/**
@@ -7088,6 +7339,7 @@
*/
Expression get expression => _expression;
+ @override
int get precedence => 7;
/**
@@ -7116,6 +7368,7 @@
this._type = becomeParentOf(name);
}
+ @override
void visitChildren(AstVisitor visitor) {
safelyVisitChild(_expression, visitor);
safelyVisitChild(_type, visitor);
@@ -7151,10 +7404,13 @@
this._label = becomeParentOf(label);
}
+ @override
accept(AstVisitor visitor) => visitor.visitLabel(this);
+ @override
Token get beginToken => _label.beginToken;
+ @override
Token get endToken => colon;
/**
@@ -7173,6 +7429,7 @@
this._label = becomeParentOf(label);
}
+ @override
void visitChildren(AstVisitor visitor) {
safelyVisitChild(_label, visitor);
}
@@ -7210,8 +7467,10 @@
this._statement = becomeParentOf(statement);
}
+ @override
accept(AstVisitor visitor) => visitor.visitLabeledStatement(this);
+ @override
Token get beginToken {
if (!_labels.isEmpty) {
return _labels.beginToken;
@@ -7219,6 +7478,7 @@
return _statement.beginToken;
}
+ @override
Token get endToken => _statement.endToken;
/**
@@ -7244,6 +7504,7 @@
this._statement = becomeParentOf(statement);
}
+ @override
void visitChildren(AstVisitor visitor) {
_labels.accept(visitor);
safelyVisitChild(_statement, visitor);
@@ -7287,10 +7548,13 @@
this._name = becomeParentOf(name);
}
+ @override
accept(AstVisitor visitor) => visitor.visitLibraryDirective(this);
+ @override
Token get endToken => semicolon;
+ @override
Token get keyword => libraryToken;
/**
@@ -7309,11 +7573,13 @@
this._name = becomeParentOf(name);
}
+ @override
void visitChildren(AstVisitor visitor) {
super.visitChildren(visitor);
safelyVisitChild(_name, visitor);
}
+ @override
Token get firstTokenAfterCommentAndMetadata => libraryToken;
}
@@ -7341,10 +7607,13 @@
this._components.addAll(components);
}
+ @override
accept(AstVisitor visitor) => visitor.visitLibraryIdentifier(this);
+ @override
Token get beginToken => _components.beginToken;
+ @override
Element get bestElement => staticElement;
/**
@@ -7354,8 +7623,10 @@
*/
NodeList<SimpleIdentifier> get components => _components;
+ @override
Token get endToken => _components.endToken;
+ @override
String get name {
JavaStringBuilder builder = new JavaStringBuilder();
bool needsPeriod = false;
@@ -7370,12 +7641,16 @@
return builder.toString();
}
+ @override
int get precedence => 15;
+ @override
Element get propagatedElement => null;
+ @override
Element get staticElement => null;
+ @override
void visitChildren(AstVisitor visitor) {
_components.accept(visitor);
}
@@ -7422,8 +7697,10 @@
this._rightBracket = rightBracket;
}
+ @override
accept(AstVisitor visitor) => visitor.visitListLiteral(this);
+ @override
Token get beginToken {
Token token = constKeyword;
if (token != null) {
@@ -7443,6 +7720,7 @@
*/
NodeList<Expression> get elements => _elements;
+ @override
Token get endToken => _rightBracket;
/**
@@ -7477,6 +7755,7 @@
_rightBracket = bracket;
}
+ @override
void visitChildren(AstVisitor visitor) {
super.visitChildren(visitor);
_elements.accept(visitor);
@@ -7499,6 +7778,7 @@
* </pre>
*/
abstract class Literal extends Expression {
+ @override
int get precedence => 16;
}
@@ -7543,8 +7823,10 @@
this._rightBracket = rightBracket;
}
+ @override
accept(AstVisitor visitor) => visitor.visitMapLiteral(this);
+ @override
Token get beginToken {
Token token = constKeyword;
if (token != null) {
@@ -7557,6 +7839,7 @@
return _leftBracket;
}
+ @override
Token get endToken => _rightBracket;
/**
@@ -7598,6 +7881,7 @@
_rightBracket = bracket;
}
+ @override
void visitChildren(AstVisitor visitor) {
super.visitChildren(visitor);
_entries.accept(visitor);
@@ -7641,10 +7925,13 @@
this._value = becomeParentOf(value);
}
+ @override
accept(AstVisitor visitor) => visitor.visitMapLiteralEntry(this);
+ @override
Token get beginToken => _key.beginToken;
+ @override
Token get endToken => _value.endToken;
/**
@@ -7681,6 +7968,7 @@
_value = becomeParentOf(expression);
}
+ @override
void visitChildren(AstVisitor visitor) {
safelyVisitChild(_key, visitor);
safelyVisitChild(_value, visitor);
@@ -7769,6 +8057,7 @@
this._body = becomeParentOf(body);
}
+ @override
accept(AstVisitor visitor) => visitor.visitMethodDeclaration(this);
/**
@@ -7786,8 +8075,10 @@
*
* @return the element associated with this method
*/
+ @override
ExecutableElement get element => _name != null ? (_name.staticElement as ExecutableElement) : null;
+ @override
Token get endToken => _body.endToken;
/**
@@ -7883,6 +8174,7 @@
_returnType = becomeParentOf(typeName);
}
+ @override
void visitChildren(AstVisitor visitor) {
super.visitChildren(visitor);
safelyVisitChild(_returnType, visitor);
@@ -7891,6 +8183,7 @@
safelyVisitChild(_body, visitor);
}
+ @override
Token get firstTokenAfterCommentAndMetadata {
if (modifierKeyword != null) {
return modifierKeyword;
@@ -7954,6 +8247,7 @@
this._argumentList = becomeParentOf(argumentList);
}
+ @override
accept(AstVisitor visitor) => visitor.visitMethodInvocation(this);
/**
@@ -7963,6 +8257,7 @@
*/
ArgumentList get argumentList => _argumentList;
+ @override
Token get beginToken {
if (_target != null) {
return _target.beginToken;
@@ -7972,6 +8267,7 @@
return _methodName.beginToken;
}
+ @override
Token get endToken => _argumentList.endToken;
/**
@@ -7981,6 +8277,7 @@
*/
SimpleIdentifier get methodName => _methodName;
+ @override
int get precedence => 15;
/**
@@ -8052,6 +8349,7 @@
_target = becomeParentOf(expression);
}
+ @override
void visitChildren(AstVisitor visitor) {
safelyVisitChild(_target, visitor);
safelyVisitChild(_methodName, visitor);
@@ -8090,8 +8388,10 @@
this._expression = becomeParentOf(expression);
}
+ @override
accept(AstVisitor visitor) => visitor.visitNamedExpression(this);
+ @override
Token get beginToken => _name.beginToken;
/**
@@ -8109,6 +8409,7 @@
return null;
}
+ @override
Token get endToken => _expression.endToken;
/**
@@ -8125,6 +8426,7 @@
*/
Label get name => _name;
+ @override
int get precedence => 0;
/**
@@ -8145,6 +8447,7 @@
_name = becomeParentOf(identifier);
}
+ @override
void visitChildren(AstVisitor visitor) {
safelyVisitChild(_name, visitor);
safelyVisitChild(_expression, visitor);
@@ -8199,10 +8502,13 @@
*/
NodeList<Combinator> get combinators => _combinators;
+ @override
Token get endToken => semicolon;
+ @override
LibraryElement get uriElement;
+ @override
Token get firstTokenAfterCommentAndMetadata => keyword;
}
@@ -8234,12 +8540,16 @@
*/
NativeClause(this.keyword, this.name);
+ @override
accept(AstVisitor visitor) => visitor.visitNativeClause(this);
+ @override
Token get beginToken => keyword;
+ @override
Token get endToken => name.endToken;
+ @override
void visitChildren(AstVisitor visitor) {
safelyVisitChild(name, visitor);
}
@@ -8282,10 +8592,13 @@
this._stringLiteral = becomeParentOf(stringLiteral);
}
+ @override
accept(AstVisitor visitor) => visitor.visitNativeFunctionBody(this);
+ @override
Token get beginToken => nativeToken;
+ @override
Token get endToken => semicolon;
/**
@@ -8295,6 +8608,7 @@
*/
StringLiteral get stringLiteral => _stringLiteral;
+ @override
void visitChildren(AstVisitor visitor) {
safelyVisitChild(_stringLiteral, visitor);
}
@@ -8350,8 +8664,10 @@
*/
Comment get documentationComment => _comment;
+ @override
SimpleIdentifier get identifier => _identifier;
+ @override
ParameterKind get kind {
AstNode parent = this.parent;
if (parent is DefaultFormalParameter) {
@@ -8385,12 +8701,13 @@
this._identifier = becomeParentOf(identifier);
}
+ @override
void visitChildren(AstVisitor visitor) {
//
// Note that subclasses are responsible for visiting the identifier because they often need to
// visit other nodes before visiting the identifier.
//
- if (commentIsBeforeAnnotations()) {
+ if (_commentIsBeforeAnnotations()) {
safelyVisitChild(_comment, visitor);
_metadata.accept(visitor);
} else {
@@ -8405,7 +8722,7 @@
*
* @return `true` if the comment is lexically before any annotations
*/
- bool commentIsBeforeAnnotations() {
+ bool _commentIsBeforeAnnotations() {
if (_comment == null || _metadata.isEmpty) {
return true;
}
@@ -8453,12 +8770,16 @@
this.literal = token;
}
+ @override
accept(AstVisitor visitor) => visitor.visitNullLiteral(this);
+ @override
Token get beginToken => literal;
+ @override
Token get endToken => literal;
+ @override
void visitChildren(AstVisitor visitor) {
}
}
@@ -8500,10 +8821,13 @@
this._rightParenthesis = rightParenthesis;
}
+ @override
accept(AstVisitor visitor) => visitor.visitParenthesizedExpression(this);
+ @override
Token get beginToken => _leftParenthesis;
+ @override
Token get endToken => _rightParenthesis;
/**
@@ -8520,6 +8844,7 @@
*/
Token get leftParenthesis => _leftParenthesis;
+ @override
int get precedence => 15;
/**
@@ -8556,6 +8881,7 @@
_rightParenthesis = parenthesis;
}
+ @override
void visitChildren(AstVisitor visitor) {
safelyVisitChild(_expression, visitor);
}
@@ -8591,14 +8917,19 @@
*/
PartDirective(Comment comment, List<Annotation> metadata, this.partToken, StringLiteral partUri, this.semicolon) : super(comment, metadata, partUri);
+ @override
accept(AstVisitor visitor) => visitor.visitPartDirective(this);
+ @override
Token get endToken => semicolon;
+ @override
Token get keyword => partToken;
+ @override
CompilationUnitElement get uriElement => element as CompilationUnitElement;
+ @override
Token get firstTokenAfterCommentAndMetadata => partToken;
}
@@ -8645,10 +8976,13 @@
this._libraryName = becomeParentOf(libraryName);
}
+ @override
accept(AstVisitor visitor) => visitor.visitPartOfDirective(this);
+ @override
Token get endToken => semicolon;
+ @override
Token get keyword => partToken;
/**
@@ -8667,11 +9001,13 @@
this._libraryName = becomeParentOf(libraryName);
}
+ @override
void visitChildren(AstVisitor visitor) {
super.visitChildren(visitor);
safelyVisitChild(_libraryName, visitor);
}
+ @override
Token get firstTokenAfterCommentAndMetadata => partToken;
}
@@ -8718,8 +9054,10 @@
this._operand = becomeParentOf(operand);
}
+ @override
accept(AstVisitor visitor) => visitor.visitPostfixExpression(this);
+ @override
Token get beginToken => _operand.beginToken;
/**
@@ -8738,6 +9076,7 @@
return element;
}
+ @override
Token get endToken => operator;
/**
@@ -8747,6 +9086,7 @@
*/
Expression get operand => _operand;
+ @override
int get precedence => 15;
/**
@@ -8798,6 +9138,7 @@
_staticElement = element;
}
+ @override
void visitChildren(AstVisitor visitor) {
safelyVisitChild(_operand, visitor);
}
@@ -8888,8 +9229,10 @@
this._operand = becomeParentOf(operand);
}
+ @override
accept(AstVisitor visitor) => visitor.visitPrefixExpression(this);
+ @override
Token get beginToken => operator;
/**
@@ -8908,6 +9251,7 @@
return element;
}
+ @override
Token get endToken => _operand.endToken;
/**
@@ -8917,6 +9261,7 @@
*/
Expression get operand => _operand;
+ @override
int get precedence => 14;
/**
@@ -8968,6 +9313,7 @@
_staticElement = element;
}
+ @override
void visitChildren(AstVisitor visitor) {
safelyVisitChild(_operand, visitor);
}
@@ -9053,10 +9399,13 @@
this._identifier = becomeParentOf(identifier);
}
+ @override
accept(AstVisitor visitor) => visitor.visitPrefixedIdentifier(this);
+ @override
Token get beginToken => _prefix.beginToken;
+ @override
Element get bestElement {
if (_identifier == null) {
return null;
@@ -9064,6 +9413,7 @@
return _identifier.bestElement;
}
+ @override
Token get endToken => _identifier.endToken;
/**
@@ -9073,8 +9423,10 @@
*/
SimpleIdentifier get identifier => _identifier;
+ @override
String get name => "${_prefix.name}.${_identifier.name}";
+ @override
int get precedence => 15;
/**
@@ -9084,6 +9436,7 @@
*/
SimpleIdentifier get prefix => _prefix;
+ @override
Element get propagatedElement {
if (_identifier == null) {
return null;
@@ -9091,6 +9444,7 @@
return _identifier.propagatedElement;
}
+ @override
Element get staticElement {
if (_identifier == null) {
return null;
@@ -9117,6 +9471,7 @@
_prefix = becomeParentOf(identifier);
}
+ @override
void visitChildren(AstVisitor visitor) {
safelyVisitChild(_prefix, visitor);
safelyVisitChild(_identifier, visitor);
@@ -9163,8 +9518,10 @@
this._propertyName = becomeParentOf(propertyName);
}
+ @override
accept(AstVisitor visitor) => visitor.visitPropertyAccess(this);
+ @override
Token get beginToken {
if (_target != null) {
return _target.beginToken;
@@ -9172,8 +9529,10 @@
return operator;
}
+ @override
Token get endToken => _propertyName.endToken;
+ @override
int get precedence => 15;
/**
@@ -9215,6 +9574,7 @@
*/
Expression get target => _target;
+ @override
bool get isAssignable => true;
/**
@@ -9245,6 +9605,7 @@
_target = becomeParentOf(expression);
}
+ @override
void visitChildren(AstVisitor visitor) {
safelyVisitChild(_target, visitor);
safelyVisitChild(_propertyName, visitor);
@@ -9303,6 +9664,7 @@
this._argumentList = becomeParentOf(argumentList);
}
+ @override
accept(AstVisitor visitor) => visitor.visitRedirectingConstructorInvocation(this);
/**
@@ -9312,6 +9674,7 @@
*/
ArgumentList get argumentList => _argumentList;
+ @override
Token get beginToken => keyword;
/**
@@ -9322,6 +9685,7 @@
*/
SimpleIdentifier get constructorName => _constructorName;
+ @override
Token get endToken => _argumentList.endToken;
/**
@@ -9342,6 +9706,7 @@
_constructorName = becomeParentOf(identifier);
}
+ @override
void visitChildren(AstVisitor visitor) {
safelyVisitChild(_constructorName, visitor);
safelyVisitChild(_argumentList, visitor);
@@ -9369,14 +9734,19 @@
*/
RethrowExpression(this.keyword);
+ @override
accept(AstVisitor visitor) => visitor.visitRethrowExpression(this);
+ @override
Token get beginToken => keyword;
+ @override
Token get endToken => keyword;
+ @override
int get precedence => 0;
+ @override
void visitChildren(AstVisitor visitor) {
}
}
@@ -9417,10 +9787,13 @@
this._expression = becomeParentOf(expression);
}
+ @override
accept(AstVisitor visitor) => visitor.visitReturnStatement(this);
+ @override
Token get beginToken => keyword;
+ @override
Token get endToken => semicolon;
/**
@@ -9440,6 +9813,7 @@
this._expression = becomeParentOf(expression);
}
+ @override
void visitChildren(AstVisitor visitor) {
safelyVisitChild(_expression, visitor);
}
@@ -9467,12 +9841,16 @@
*/
ScriptTag(this.scriptTag);
+ @override
accept(AstVisitor visitor) => visitor.visitScriptTag(this);
+ @override
Token get beginToken => scriptTag;
+ @override
Token get endToken => scriptTag;
+ @override
void visitChildren(AstVisitor visitor) {
}
}
@@ -9503,8 +9881,10 @@
this._shownNames.addAll(shownNames);
}
+ @override
accept(AstVisitor visitor) => visitor.visitShowCombinator(this);
+ @override
Token get endToken => _shownNames.endToken;
/**
@@ -9514,6 +9894,7 @@
*/
NodeList<SimpleIdentifier> get shownNames => _shownNames;
+ @override
void visitChildren(AstVisitor visitor) {
_shownNames.accept(visitor);
}
@@ -9553,8 +9934,10 @@
this._type = becomeParentOf(type);
}
+ @override
accept(AstVisitor visitor) => visitor.visitSimpleFormalParameter(this);
+ @override
Token get beginToken {
if (keyword != null) {
return keyword;
@@ -9564,6 +9947,7 @@
return identifier.beginToken;
}
+ @override
Token get endToken => identifier.endToken;
/**
@@ -9574,8 +9958,10 @@
*/
TypeName get type => _type;
+ @override
bool get isConst => (keyword is KeywordToken) && identical((keyword as KeywordToken).keyword, Keyword.CONST);
+ @override
bool get isFinal => (keyword is KeywordToken) && identical((keyword as KeywordToken).keyword, Keyword.FINAL);
/**
@@ -9587,6 +9973,7 @@
_type = becomeParentOf(typeName);
}
+ @override
void visitChildren(AstVisitor visitor) {
super.visitChildren(visitor);
safelyVisitChild(_type, visitor);
@@ -9639,10 +10026,13 @@
*/
SimpleIdentifier(this.token);
+ @override
accept(AstVisitor visitor) => visitor.visitSimpleIdentifier(this);
+ @override
Token get beginToken => token;
+ @override
Element get bestElement {
if (_propagatedElement == null) {
return _staticElement;
@@ -9650,14 +10040,19 @@
return _propagatedElement;
}
+ @override
Token get endToken => token;
+ @override
String get name => token.lexeme;
+ @override
int get precedence => 16;
+ @override
Element get propagatedElement => _propagatedElement;
+ @override
Element get staticElement => _staticElement;
/**
@@ -9778,6 +10173,7 @@
return false;
}
+ @override
bool get isSynthetic => token.isSynthetic;
/**
@@ -9787,7 +10183,7 @@
* @param element the element to be associated with this identifier
*/
void set propagatedElement(Element element) {
- _propagatedElement = validateElement(element);
+ _propagatedElement = _validateElement(element);
}
/**
@@ -9797,9 +10193,10 @@
* @param element the element to be associated with this identifier
*/
void set staticElement(Element element) {
- _staticElement = validateElement(element);
+ _staticElement = _validateElement(element);
}
+ @override
void visitChildren(AstVisitor visitor) {
}
@@ -9812,9 +10209,9 @@
* @param element the element to be associated with this identifier
* @return the element to be associated with this identifier
*/
- Element returnOrReportElement(AstNode parent, bool isValid, Element element) {
+ Element _returnOrReportElement(AstNode parent, bool isValid, Element element) {
if (!isValid) {
- AnalysisEngine.instance.logger.logInformation3("Internal error: attempting to set the name of a ${parent.runtimeType.toString()} to a ${element.runtimeType.toString()}", new JavaException());
+ AnalysisEngine.instance.logger.logInformation2("Internal error: attempting to set the name of a ${parent.runtimeType.toString()} to a ${element.runtimeType.toString()}", new JavaException());
return null;
}
return element;
@@ -9827,29 +10224,29 @@
* @param element the element to be associated with this identifier
* @return the element to be associated with this identifier
*/
- Element validateElement(Element element) {
+ Element _validateElement(Element element) {
if (element == null) {
return null;
}
AstNode parent = this.parent;
if (parent is ClassDeclaration && identical(parent.name, this)) {
- return returnOrReportElement(parent, element is ClassElement, element);
+ return _returnOrReportElement(parent, element is ClassElement, element);
} else if (parent is ClassTypeAlias && identical(parent.name, this)) {
- return returnOrReportElement(parent, element is ClassElement, element);
+ return _returnOrReportElement(parent, element is ClassElement, element);
} else if (parent is DeclaredIdentifier && identical(parent.identifier, this)) {
- return returnOrReportElement(parent, element is LocalVariableElement, element);
+ return _returnOrReportElement(parent, element is LocalVariableElement, element);
} else if (parent is FormalParameter && identical(parent.identifier, this)) {
- return returnOrReportElement(parent, element is ParameterElement, element);
+ return _returnOrReportElement(parent, element is ParameterElement, element);
} else if (parent is FunctionDeclaration && identical(parent.name, this)) {
- return returnOrReportElement(parent, element is ExecutableElement, element);
+ return _returnOrReportElement(parent, element is ExecutableElement, element);
} else if (parent is FunctionTypeAlias && identical(parent.name, this)) {
- return returnOrReportElement(parent, element is FunctionTypeAliasElement, element);
+ return _returnOrReportElement(parent, element is FunctionTypeAliasElement, element);
} else if (parent is MethodDeclaration && identical(parent.name, this)) {
- return returnOrReportElement(parent, element is ExecutableElement, element);
+ return _returnOrReportElement(parent, element is ExecutableElement, element);
} else if (parent is TypeParameter && identical(parent.name, this)) {
- return returnOrReportElement(parent, element is TypeParameterElement, element);
+ return _returnOrReportElement(parent, element is TypeParameterElement, element);
} else if (parent is VariableDeclaration && identical(parent.name, this)) {
- return returnOrReportElement(parent, element is VariableElement, element);
+ return _returnOrReportElement(parent, element is VariableElement, element);
}
return element;
}
@@ -9906,10 +10303,13 @@
this._value = StringUtilities.intern(value);
}
+ @override
accept(AstVisitor visitor) => visitor.visitSimpleStringLiteral(this);
+ @override
Token get beginToken => literal;
+ @override
Token get endToken => literal;
/**
@@ -9964,6 +10364,7 @@
*/
bool get isRaw => literal.lexeme.codeUnitAt(0) == 0x72;
+ @override
bool get isSynthetic => literal.isSynthetic;
/**
@@ -9984,9 +10385,11 @@
_value = StringUtilities.intern(_value);
}
+ @override
void visitChildren(AstVisitor visitor) {
}
+ @override
void appendStringValue(JavaStringBuilder builder) {
builder.append(value);
}
@@ -10042,8 +10445,10 @@
this._elements.addAll(elements);
}
+ @override
accept(AstVisitor visitor) => visitor.visitStringInterpolation(this);
+ @override
Token get beginToken => _elements.beginToken;
/**
@@ -10053,12 +10458,15 @@
*/
NodeList<InterpolationElement> get elements => _elements;
+ @override
Token get endToken => _elements.endToken;
+ @override
void visitChildren(AstVisitor visitor) {
_elements.accept(visitor);
}
+ @override
void appendStringValue(JavaStringBuilder builder) {
throw new IllegalArgumentException();
}
@@ -10153,6 +10561,7 @@
this._argumentList = becomeParentOf(argumentList);
}
+ @override
accept(AstVisitor visitor) => visitor.visitSuperConstructorInvocation(this);
/**
@@ -10162,6 +10571,7 @@
*/
ArgumentList get argumentList => _argumentList;
+ @override
Token get beginToken => keyword;
/**
@@ -10172,6 +10582,7 @@
*/
SimpleIdentifier get constructorName => _constructorName;
+ @override
Token get endToken => _argumentList.endToken;
/**
@@ -10192,6 +10603,7 @@
_constructorName = becomeParentOf(identifier);
}
+ @override
void visitChildren(AstVisitor visitor) {
safelyVisitChild(_constructorName, visitor);
safelyVisitChild(_argumentList, visitor);
@@ -10219,14 +10631,19 @@
*/
SuperExpression(this.keyword);
+ @override
accept(AstVisitor visitor) => visitor.visitSuperExpression(this);
+ @override
Token get beginToken => keyword;
+ @override
Token get endToken => keyword;
+ @override
int get precedence => 16;
+ @override
void visitChildren(AstVisitor visitor) {
}
}
@@ -10258,6 +10675,7 @@
this._expression = becomeParentOf(expression);
}
+ @override
accept(AstVisitor visitor) => visitor.visitSwitchCase(this);
/**
@@ -10276,6 +10694,7 @@
this._expression = becomeParentOf(expression);
}
+ @override
void visitChildren(AstVisitor visitor) {
labels.accept(visitor);
safelyVisitChild(_expression, visitor);
@@ -10302,8 +10721,10 @@
*/
SwitchDefault(List<Label> labels, Token keyword, Token colon, List<Statement> statements) : super(labels, keyword, colon, statements);
+ @override
accept(AstVisitor visitor) => visitor.visitSwitchDefault(this);
+ @override
void visitChildren(AstVisitor visitor) {
labels.accept(visitor);
statements.accept(visitor);
@@ -10356,6 +10777,7 @@
this._statements.addAll(statements);
}
+ @override
Token get beginToken {
if (!_labels.isEmpty) {
return _labels.beginToken;
@@ -10363,6 +10785,7 @@
return keyword;
}
+ @override
Token get endToken {
if (!_statements.isEmpty) {
return _statements.endToken;
@@ -10446,10 +10869,13 @@
this._members.addAll(members);
}
+ @override
accept(AstVisitor visitor) => visitor.visitSwitchStatement(this);
+ @override
Token get beginToken => keyword;
+ @override
Token get endToken => rightBracket;
/**
@@ -10476,6 +10902,7 @@
this._expression = becomeParentOf(expression);
}
+ @override
void visitChildren(AstVisitor visitor) {
safelyVisitChild(_expression, visitor);
_members.accept(visitor);
@@ -10509,12 +10936,16 @@
*/
SymbolLiteral(this.poundSign, this.components);
+ @override
accept(AstVisitor visitor) => visitor.visitSymbolLiteral(this);
+ @override
Token get beginToken => poundSign;
+ @override
Token get endToken => components[components.length - 1];
+ @override
void visitChildren(AstVisitor visitor) {
}
}
@@ -10540,14 +10971,19 @@
*/
ThisExpression(this.keyword);
+ @override
accept(AstVisitor visitor) => visitor.visitThisExpression(this);
+ @override
Token get beginToken => keyword;
+ @override
Token get endToken => keyword;
+ @override
int get precedence => 16;
+ @override
void visitChildren(AstVisitor visitor) {
}
}
@@ -10581,10 +11017,13 @@
this._expression = becomeParentOf(expression);
}
+ @override
accept(AstVisitor visitor) => visitor.visitThrowExpression(this);
+ @override
Token get beginToken => keyword;
+ @override
Token get endToken {
if (_expression != null) {
return _expression.endToken;
@@ -10599,6 +11038,7 @@
*/
Expression get expression => _expression;
+ @override
int get precedence => 0;
/**
@@ -10610,6 +11050,7 @@
this._expression = becomeParentOf(expression);
}
+ @override
void visitChildren(AstVisitor visitor) {
safelyVisitChild(_expression, visitor);
}
@@ -10648,10 +11089,13 @@
this._variableList = becomeParentOf(variableList);
}
+ @override
accept(AstVisitor visitor) => visitor.visitTopLevelVariableDeclaration(this);
+ @override
Element get element => null;
+ @override
Token get endToken => semicolon;
/**
@@ -10670,11 +11114,13 @@
variableList = becomeParentOf(variableList);
}
+ @override
void visitChildren(AstVisitor visitor) {
super.visitChildren(visitor);
safelyVisitChild(_variableList, visitor);
}
+ @override
Token get firstTokenAfterCommentAndMetadata => _variableList.beginToken;
}
@@ -10733,8 +11179,10 @@
this._finallyBlock = becomeParentOf(finallyBlock);
}
+ @override
accept(AstVisitor visitor) => visitor.visitTryStatement(this);
+ @override
Token get beginToken => tryKeyword;
/**
@@ -10751,6 +11199,7 @@
*/
NodeList<CatchClause> get catchClauses => _catchClauses;
+ @override
Token get endToken {
if (_finallyBlock != null) {
return _finallyBlock.endToken;
@@ -10788,6 +11237,7 @@
_finallyBlock = becomeParentOf(block);
}
+ @override
void visitChildren(AstVisitor visitor) {
safelyVisitChild(_body, visitor);
_catchClauses.accept(visitor);
@@ -10828,8 +11278,10 @@
*/
TypeAlias(Comment comment, List<Annotation> metadata, this.keyword, this.semicolon) : super(comment, metadata);
+ @override
Token get endToken => semicolon;
+ @override
Token get firstTokenAfterCommentAndMetadata => keyword;
}
@@ -10869,6 +11321,7 @@
this._arguments.addAll(arguments);
}
+ @override
accept(AstVisitor visitor) => visitor.visitTypeArgumentList(this);
/**
@@ -10878,10 +11331,13 @@
*/
NodeList<TypeName> get arguments => _arguments;
+ @override
Token get beginToken => leftBracket;
+ @override
Token get endToken => rightBracket;
+ @override
void visitChildren(AstVisitor visitor) {
_arguments.accept(visitor);
}
@@ -10910,7 +11366,7 @@
/**
* The type being named, or `null` if the AST structure has not been resolved.
*/
- Type2 type;
+ DartType type;
/**
* Initialize a newly created type name.
@@ -10924,10 +11380,13 @@
this._typeArguments = becomeParentOf(typeArguments);
}
+ @override
accept(AstVisitor visitor) => visitor.visitTypeName(this);
+ @override
Token get beginToken => _name.beginToken;
+ @override
Token get endToken {
if (_typeArguments != null) {
return _typeArguments.endToken;
@@ -10950,6 +11409,7 @@
*/
TypeArgumentList get typeArguments => _typeArguments;
+ @override
bool get isSynthetic => _name.isSynthetic && _typeArguments == null;
/**
@@ -10970,6 +11430,7 @@
this._typeArguments = becomeParentOf(typeArguments);
}
+ @override
void visitChildren(AstVisitor visitor) {
safelyVisitChild(_name, visitor);
safelyVisitChild(_typeArguments, visitor);
@@ -11016,6 +11477,7 @@
this._bound = becomeParentOf(bound);
}
+ @override
accept(AstVisitor visitor) => visitor.visitTypeParameter(this);
/**
@@ -11026,8 +11488,10 @@
*/
TypeName get bound => _bound;
+ @override
TypeParameterElement get element => _name != null ? (_name.staticElement as TypeParameterElement) : null;
+ @override
Token get endToken {
if (_bound == null) {
return _name.endToken;
@@ -11060,12 +11524,14 @@
_name = becomeParentOf(identifier);
}
+ @override
void visitChildren(AstVisitor visitor) {
super.visitChildren(visitor);
safelyVisitChild(_name, visitor);
safelyVisitChild(_bound, visitor);
}
+ @override
Token get firstTokenAfterCommentAndMetadata => _name.beginToken;
}
@@ -11105,10 +11571,13 @@
this._typeParameters.addAll(typeParameters);
}
+ @override
accept(AstVisitor visitor) => visitor.visitTypeParameterList(this);
+ @override
Token get beginToken => leftBracket;
+ @override
Token get endToken => rightBracket;
/**
@@ -11118,6 +11587,7 @@
*/
NodeList<TypeParameter> get typeParameters => _typeParameters;
+ @override
void visitChildren(AstVisitor visitor) {
_typeParameters.accept(visitor);
}
@@ -11156,6 +11626,7 @@
this.typeArguments = becomeParentOf(typeArguments);
}
+ @override
void visitChildren(AstVisitor visitor) {
safelyVisitChild(typeArguments, visitor);
}
@@ -11179,6 +11650,16 @@
StringLiteral _uri;
/**
+ * The content of the URI.
+ */
+ String uriContent;
+
+ /**
+ * The source to which the URI was resolved.
+ */
+ Source source;
+
+ /**
* Initialize a newly create URI-based directive.
*
* @param comment the documentation comment associated with this directive
@@ -11198,7 +11679,7 @@
/**
* Return the element associated with the URI of this directive, or `null` if the AST
- * structure has not been resolved or if this URI could not be resolved. Examples of the latter
+ * structure has not been resolved or if the URI could not be resolved. Examples of the latter
* case include a directive that contains an invalid URL or a URL that does not exist.
*
* @return the element associated with this directive
@@ -11214,6 +11695,7 @@
this._uri = becomeParentOf(uri);
}
+ @override
void visitChildren(AstVisitor visitor) {
super.visitChildren(visitor);
safelyVisitChild(_uri, visitor);
@@ -11262,12 +11744,14 @@
this._initializer = becomeParentOf(initializer);
}
+ @override
accept(AstVisitor visitor) => visitor.visitVariableDeclaration(this);
/**
* This overridden implementation of getDocumentationComment() looks in the grandparent node for
* dartdoc comments if no documentation is specifically available on the node.
*/
+ @override
Comment get documentationComment {
Comment comment = super.documentationComment;
if (comment == null) {
@@ -11281,8 +11765,10 @@
return comment;
}
+ @override
VariableElement get element => _name != null ? (_name.staticElement as VariableElement) : null;
+ @override
Token get endToken {
if (_initializer != null) {
return _initializer.endToken;
@@ -11345,12 +11831,14 @@
this._name = becomeParentOf(name);
}
+ @override
void visitChildren(AstVisitor visitor) {
super.visitChildren(visitor);
safelyVisitChild(_name, visitor);
safelyVisitChild(_initializer, visitor);
}
+ @override
Token get firstTokenAfterCommentAndMetadata => _name.beginToken;
}
@@ -11401,8 +11889,10 @@
this._variables.addAll(variables);
}
+ @override
accept(AstVisitor visitor) => visitor.visitVariableDeclarationList(this);
+ @override
Token get endToken => _variables.endToken;
/**
@@ -11444,11 +11934,13 @@
_type = becomeParentOf(typeName);
}
+ @override
void visitChildren(AstVisitor visitor) {
safelyVisitChild(_type, visitor);
_variables.accept(visitor);
}
+ @override
Token get firstTokenAfterCommentAndMetadata {
if (keyword != null) {
return keyword;
@@ -11489,10 +11981,13 @@
this._variableList = becomeParentOf(variableList);
}
+ @override
accept(AstVisitor visitor) => visitor.visitVariableDeclarationStatement(this);
+ @override
Token get beginToken => _variableList.beginToken;
+ @override
Token get endToken => semicolon;
/**
@@ -11511,6 +12006,7 @@
this._variableList = becomeParentOf(variableList);
}
+ @override
void visitChildren(AstVisitor visitor) {
safelyVisitChild(_variableList, visitor);
}
@@ -11564,8 +12060,10 @@
this._body = becomeParentOf(body);
}
+ @override
accept(AstVisitor visitor) => visitor.visitWhileStatement(this);
+ @override
Token get beginToken => keyword;
/**
@@ -11582,6 +12080,7 @@
*/
Expression get condition => _condition;
+ @override
Token get endToken => _body.endToken;
/**
@@ -11603,6 +12102,7 @@
_condition = becomeParentOf(expression);
}
+ @override
void visitChildren(AstVisitor visitor) {
safelyVisitChild(_condition, visitor);
safelyVisitChild(_body, visitor);
@@ -11640,10 +12140,13 @@
this._mixinTypes.addAll(mixinTypes);
}
+ @override
accept(AstVisitor visitor) => visitor.visitWithClause(this);
+ @override
Token get beginToken => _withKeyword;
+ @override
Token get endToken => _mixinTypes.endToken;
/**
@@ -11669,6 +12172,7 @@
this._withKeyword = withKeyword;
}
+ @override
void visitChildren(AstVisitor visitor) {
_mixinTypes.accept(visitor);
}
@@ -11715,6 +12219,7 @@
}
}
+ @override
R visitNode(AstNode node) {
node.visitChildren(_childVisitor);
return null;
@@ -11730,6 +12235,7 @@
GeneralizingAstVisitor_BreadthFirstVisitor(this.BreadthFirstVisitor_this) : super();
+ @override
Object visitNode(AstNode node) {
BreadthFirstVisitor_this._queue.add(node);
return null;
@@ -11780,6 +12286,7 @@
*/
static Object NOT_A_CONSTANT = new Object();
+ @override
Object visitAdjacentStrings(AdjacentStrings node) {
JavaStringBuilder builder = new JavaStringBuilder();
for (StringLiteral string in node.strings) {
@@ -11792,6 +12299,7 @@
return builder.toString();
}
+ @override
Object visitBinaryExpression(BinaryExpression node) {
Object leftOperand = node.leftOperand.accept(this);
if (identical(leftOperand, NOT_A_CONSTANT)) {
@@ -11945,12 +12453,16 @@
return visitExpression(node);
}
+ @override
Object visitBooleanLiteral(BooleanLiteral node) => node.value ? true : false;
+ @override
Object visitDoubleLiteral(DoubleLiteral node) => node.value;
+ @override
Object visitIntegerLiteral(IntegerLiteral node) => node.value;
+ @override
Object visitInterpolationExpression(InterpolationExpression node) {
Object value = node.expression.accept(this);
if (value == null || value is bool || value is String || value is int || value is double) {
@@ -11959,8 +12471,10 @@
return NOT_A_CONSTANT;
}
+ @override
Object visitInterpolationString(InterpolationString node) => node.value;
+ @override
Object visitListLiteral(ListLiteral node) {
List<Object> list = new List<Object>();
for (Expression element in node.elements) {
@@ -11973,6 +12487,7 @@
return list;
}
+ @override
Object visitMapLiteral(MapLiteral node) {
Map<String, Object> map = new Map<String, Object>();
for (MapLiteralEntry entry in node.entries) {
@@ -11986,16 +12501,22 @@
return map;
}
+ @override
Object visitMethodInvocation(MethodInvocation node) => visitNode(node);
+ @override
Object visitNode(AstNode node) => NOT_A_CONSTANT;
+ @override
Object visitNullLiteral(NullLiteral node) => null;
+ @override
Object visitParenthesizedExpression(ParenthesizedExpression node) => node.expression.accept(this);
- Object visitPrefixedIdentifier(PrefixedIdentifier node) => getConstantValue(null);
+ @override
+ Object visitPrefixedIdentifier(PrefixedIdentifier node) => _getConstantValue(null);
+ @override
Object visitPrefixExpression(PrefixExpression node) {
Object operand = node.operand.accept(this);
if (identical(operand, NOT_A_CONSTANT)) {
@@ -12027,12 +12548,16 @@
return NOT_A_CONSTANT;
}
- Object visitPropertyAccess(PropertyAccess node) => getConstantValue(null);
+ @override
+ Object visitPropertyAccess(PropertyAccess node) => _getConstantValue(null);
- Object visitSimpleIdentifier(SimpleIdentifier node) => getConstantValue(null);
+ @override
+ Object visitSimpleIdentifier(SimpleIdentifier node) => _getConstantValue(null);
+ @override
Object visitSimpleStringLiteral(SimpleStringLiteral node) => node.value;
+ @override
Object visitStringInterpolation(StringInterpolation node) {
JavaStringBuilder builder = new JavaStringBuilder();
for (InterpolationElement element in node.elements) {
@@ -12045,6 +12570,7 @@
return builder.toString();
}
+ @override
Object visitSymbolLiteral(SymbolLiteral node) {
// TODO(brianwilkerson) This isn't optimal because a Symbol is not a String.
JavaStringBuilder builder = new JavaStringBuilder();
@@ -12063,7 +12589,7 @@
* @param element the element whose value is to be returned
* @return the constant value of the static constant
*/
- Object getConstantValue(Element element) {
+ Object _getConstantValue(Element element) {
// TODO(brianwilkerson) Implement this
if (element is FieldElement) {
FieldElement field = element;
@@ -12121,18 +12647,25 @@
* Visitor that maps nodes to elements.
*/
class ElementLocator_ElementMapper extends GeneralizingAstVisitor<Element> {
+ @override
Element visitAssignmentExpression(AssignmentExpression node) => node.bestElement;
+ @override
Element visitBinaryExpression(BinaryExpression node) => node.bestElement;
+ @override
Element visitClassDeclaration(ClassDeclaration node) => node.element;
+ @override
Element visitCompilationUnit(CompilationUnit node) => node.element;
+ @override
Element visitConstructorDeclaration(ConstructorDeclaration node) => node.element;
+ @override
Element visitFunctionDeclaration(FunctionDeclaration node) => node.element;
+ @override
Element visitIdentifier(Identifier node) {
AstNode parent = node.parent;
// Type name in InstanceCreationExpression
@@ -12185,24 +12718,34 @@
return element;
}
+ @override
Element visitImportDirective(ImportDirective node) => node.element;
+ @override
Element visitIndexExpression(IndexExpression node) => node.bestElement;
+ @override
Element visitInstanceCreationExpression(InstanceCreationExpression node) => node.staticElement;
+ @override
Element visitLibraryDirective(LibraryDirective node) => node.element;
+ @override
Element visitMethodDeclaration(MethodDeclaration node) => node.element;
+ @override
Element visitMethodInvocation(MethodInvocation node) => node.methodName.bestElement;
+ @override
Element visitPostfixExpression(PostfixExpression node) => node.bestElement;
+ @override
Element visitPrefixedIdentifier(PrefixedIdentifier node) => node.bestElement;
+ @override
Element visitPrefixExpression(PrefixExpression node) => node.bestElement;
+ @override
Element visitStringLiteral(StringLiteral node) {
AstNode parent = node.parent;
if (parent is UriBasedDirective) {
@@ -12211,6 +12754,7 @@
return null;
}
+ @override
Element visitVariableDeclaration(VariableDeclaration node) => node.element;
}
@@ -12231,166 +12775,233 @@
* not be visited.
*/
class GeneralizingAstVisitor<R> implements AstVisitor<R> {
+ @override
R visitAdjacentStrings(AdjacentStrings node) => visitStringLiteral(node);
R visitAnnotatedNode(AnnotatedNode node) => visitNode(node);
+ @override
R visitAnnotation(Annotation node) => visitNode(node);
+ @override
R visitArgumentDefinitionTest(ArgumentDefinitionTest node) => visitExpression(node);
+ @override
R visitArgumentList(ArgumentList node) => visitNode(node);
+ @override
R visitAsExpression(AsExpression node) => visitExpression(node);
+ @override
R visitAssertStatement(AssertStatement node) => visitStatement(node);
+ @override
R visitAssignmentExpression(AssignmentExpression node) => visitExpression(node);
+ @override
R visitBinaryExpression(BinaryExpression node) => visitExpression(node);
+ @override
R visitBlock(Block node) => visitStatement(node);
+ @override
R visitBlockFunctionBody(BlockFunctionBody node) => visitFunctionBody(node);
+ @override
R visitBooleanLiteral(BooleanLiteral node) => visitLiteral(node);
+ @override
R visitBreakStatement(BreakStatement node) => visitStatement(node);
+ @override
R visitCascadeExpression(CascadeExpression node) => visitExpression(node);
+ @override
R visitCatchClause(CatchClause node) => visitNode(node);
+ @override
R visitClassDeclaration(ClassDeclaration node) => visitCompilationUnitMember(node);
R visitClassMember(ClassMember node) => visitDeclaration(node);
+ @override
R visitClassTypeAlias(ClassTypeAlias node) => visitTypeAlias(node);
R visitCombinator(Combinator node) => visitNode(node);
+ @override
R visitComment(Comment node) => visitNode(node);
+ @override
R visitCommentReference(CommentReference node) => visitNode(node);
+ @override
R visitCompilationUnit(CompilationUnit node) => visitNode(node);
R visitCompilationUnitMember(CompilationUnitMember node) => visitDeclaration(node);
+ @override
R visitConditionalExpression(ConditionalExpression node) => visitExpression(node);
+ @override
R visitConstructorDeclaration(ConstructorDeclaration node) => visitClassMember(node);
+ @override
R visitConstructorFieldInitializer(ConstructorFieldInitializer node) => visitConstructorInitializer(node);
R visitConstructorInitializer(ConstructorInitializer node) => visitNode(node);
+ @override
R visitConstructorName(ConstructorName node) => visitNode(node);
+ @override
R visitContinueStatement(ContinueStatement node) => visitStatement(node);
R visitDeclaration(Declaration node) => visitAnnotatedNode(node);
+ @override
R visitDeclaredIdentifier(DeclaredIdentifier node) => visitDeclaration(node);
+ @override
R visitDefaultFormalParameter(DefaultFormalParameter node) => visitFormalParameter(node);
R visitDirective(Directive node) => visitAnnotatedNode(node);
+ @override
R visitDoStatement(DoStatement node) => visitStatement(node);
+ @override
R visitDoubleLiteral(DoubleLiteral node) => visitLiteral(node);
+ @override
R visitEmptyFunctionBody(EmptyFunctionBody node) => visitFunctionBody(node);
+ @override
R visitEmptyStatement(EmptyStatement node) => visitStatement(node);
+ @override
R visitExportDirective(ExportDirective node) => visitNamespaceDirective(node);
R visitExpression(Expression node) => visitNode(node);
+ @override
R visitExpressionFunctionBody(ExpressionFunctionBody node) => visitFunctionBody(node);
+ @override
R visitExpressionStatement(ExpressionStatement node) => visitStatement(node);
+ @override
R visitExtendsClause(ExtendsClause node) => visitNode(node);
+ @override
R visitFieldDeclaration(FieldDeclaration node) => visitClassMember(node);
+ @override
R visitFieldFormalParameter(FieldFormalParameter node) => visitNormalFormalParameter(node);
+ @override
R visitForEachStatement(ForEachStatement node) => visitStatement(node);
R visitFormalParameter(FormalParameter node) => visitNode(node);
+ @override
R visitFormalParameterList(FormalParameterList node) => visitNode(node);
+ @override
R visitForStatement(ForStatement node) => visitStatement(node);
R visitFunctionBody(FunctionBody node) => visitNode(node);
+ @override
R visitFunctionDeclaration(FunctionDeclaration node) => visitCompilationUnitMember(node);
+ @override
R visitFunctionDeclarationStatement(FunctionDeclarationStatement node) => visitStatement(node);
+ @override
R visitFunctionExpression(FunctionExpression node) => visitExpression(node);
+ @override
R visitFunctionExpressionInvocation(FunctionExpressionInvocation node) => visitExpression(node);
+ @override
R visitFunctionTypeAlias(FunctionTypeAlias node) => visitTypeAlias(node);
+ @override
R visitFunctionTypedFormalParameter(FunctionTypedFormalParameter node) => visitNormalFormalParameter(node);
+ @override
R visitHideCombinator(HideCombinator node) => visitCombinator(node);
R visitIdentifier(Identifier node) => visitExpression(node);
+ @override
R visitIfStatement(IfStatement node) => visitStatement(node);
+ @override
R visitImplementsClause(ImplementsClause node) => visitNode(node);
+ @override
R visitImportDirective(ImportDirective node) => visitNamespaceDirective(node);
+ @override
R visitIndexExpression(IndexExpression node) => visitExpression(node);
+ @override
R visitInstanceCreationExpression(InstanceCreationExpression node) => visitExpression(node);
+ @override
R visitIntegerLiteral(IntegerLiteral node) => visitLiteral(node);
R visitInterpolationElement(InterpolationElement node) => visitNode(node);
+ @override
R visitInterpolationExpression(InterpolationExpression node) => visitInterpolationElement(node);
+ @override
R visitInterpolationString(InterpolationString node) => visitInterpolationElement(node);
+ @override
R visitIsExpression(IsExpression node) => visitExpression(node);
+ @override
R visitLabel(Label node) => visitNode(node);
+ @override
R visitLabeledStatement(LabeledStatement node) => visitStatement(node);
+ @override
R visitLibraryDirective(LibraryDirective node) => visitDirective(node);
+ @override
R visitLibraryIdentifier(LibraryIdentifier node) => visitIdentifier(node);
+ @override
R visitListLiteral(ListLiteral node) => visitTypedLiteral(node);
R visitLiteral(Literal node) => visitExpression(node);
+ @override
R visitMapLiteral(MapLiteral node) => visitTypedLiteral(node);
+ @override
R visitMapLiteralEntry(MapLiteralEntry node) => visitNode(node);
+ @override
R visitMethodDeclaration(MethodDeclaration node) => visitClassMember(node);
+ @override
R visitMethodInvocation(MethodInvocation node) => visitExpression(node);
+ @override
R visitNamedExpression(NamedExpression node) => visitExpression(node);
R visitNamespaceDirective(NamespaceDirective node) => visitUriBasedDirective(node);
+ @override
R visitNativeClause(NativeClause node) => visitNode(node);
+ @override
R visitNativeFunctionBody(NativeFunctionBody node) => visitFunctionBody(node);
R visitNode(AstNode node) {
@@ -12400,88 +13011,124 @@
R visitNormalFormalParameter(NormalFormalParameter node) => visitFormalParameter(node);
+ @override
R visitNullLiteral(NullLiteral node) => visitLiteral(node);
+ @override
R visitParenthesizedExpression(ParenthesizedExpression node) => visitExpression(node);
+ @override
R visitPartDirective(PartDirective node) => visitUriBasedDirective(node);
+ @override
R visitPartOfDirective(PartOfDirective node) => visitDirective(node);
+ @override
R visitPostfixExpression(PostfixExpression node) => visitExpression(node);
+ @override
R visitPrefixedIdentifier(PrefixedIdentifier node) => visitIdentifier(node);
+ @override
R visitPrefixExpression(PrefixExpression node) => visitExpression(node);
+ @override
R visitPropertyAccess(PropertyAccess node) => visitExpression(node);
+ @override
R visitRedirectingConstructorInvocation(RedirectingConstructorInvocation node) => visitConstructorInitializer(node);
+ @override
R visitRethrowExpression(RethrowExpression node) => visitExpression(node);
+ @override
R visitReturnStatement(ReturnStatement node) => visitStatement(node);
+ @override
R visitScriptTag(ScriptTag scriptTag) => visitNode(scriptTag);
+ @override
R visitShowCombinator(ShowCombinator node) => visitCombinator(node);
+ @override
R visitSimpleFormalParameter(SimpleFormalParameter node) => visitNormalFormalParameter(node);
+ @override
R visitSimpleIdentifier(SimpleIdentifier node) => visitIdentifier(node);
+ @override
R visitSimpleStringLiteral(SimpleStringLiteral node) => visitStringLiteral(node);
R visitStatement(Statement node) => visitNode(node);
+ @override
R visitStringInterpolation(StringInterpolation node) => visitStringLiteral(node);
R visitStringLiteral(StringLiteral node) => visitLiteral(node);
+ @override
R visitSuperConstructorInvocation(SuperConstructorInvocation node) => visitConstructorInitializer(node);
+ @override
R visitSuperExpression(SuperExpression node) => visitExpression(node);
+ @override
R visitSwitchCase(SwitchCase node) => visitSwitchMember(node);
+ @override
R visitSwitchDefault(SwitchDefault node) => visitSwitchMember(node);
R visitSwitchMember(SwitchMember node) => visitNode(node);
+ @override
R visitSwitchStatement(SwitchStatement node) => visitStatement(node);
+ @override
R visitSymbolLiteral(SymbolLiteral node) => visitLiteral(node);
+ @override
R visitThisExpression(ThisExpression node) => visitExpression(node);
+ @override
R visitThrowExpression(ThrowExpression node) => visitExpression(node);
+ @override
R visitTopLevelVariableDeclaration(TopLevelVariableDeclaration node) => visitCompilationUnitMember(node);
+ @override
R visitTryStatement(TryStatement node) => visitStatement(node);
R visitTypeAlias(TypeAlias node) => visitCompilationUnitMember(node);
+ @override
R visitTypeArgumentList(TypeArgumentList node) => visitNode(node);
R visitTypedLiteral(TypedLiteral node) => visitLiteral(node);
+ @override
R visitTypeName(TypeName node) => visitNode(node);
+ @override
R visitTypeParameter(TypeParameter node) => visitNode(node);
+ @override
R visitTypeParameterList(TypeParameterList node) => visitNode(node);
R visitUriBasedDirective(UriBasedDirective node) => visitDirective(node);
+ @override
R visitVariableDeclaration(VariableDeclaration node) => visitDeclaration(node);
+ @override
R visitVariableDeclarationList(VariableDeclarationList node) => visitNode(node);
+ @override
R visitVariableDeclarationStatement(VariableDeclarationStatement node) => visitStatement(node);
+ @override
R visitWhileStatement(WhileStatement node) => visitStatement(node);
+ @override
R visitWithClause(WithClause node) => visitNode(node);
}
@@ -12552,12 +13199,13 @@
node.accept(this);
} on NodeLocator_NodeFoundException catch (exception) {
} on JavaException catch (exception) {
- AnalysisEngine.instance.logger.logInformation3("Unable to locate element at offset (${_startOffset} - ${_endOffset})", exception);
+ AnalysisEngine.instance.logger.logInformation2("Unable to locate element at offset (${_startOffset} - ${_endOffset})", exception);
return null;
}
return _foundNode;
}
+ @override
Object visitNode(AstNode node) {
int start = node.offset;
int end = start + node.length;
@@ -12573,7 +13221,7 @@
throw exception;
} on JavaException catch (exception) {
// Ignore the exception and proceed in order to visit the rest of the structure.
- AnalysisEngine.instance.logger.logInformation3("Exception caught while traversing an AST structure.", exception);
+ AnalysisEngine.instance.logger.logInformation2("Exception caught while traversing an AST structure.", exception);
}
if (start <= _startOffset && _endOffset <= end) {
_foundNode = node;
@@ -12601,516 +13249,619 @@
* of the visited node to not be visited.
*/
class RecursiveAstVisitor<R> implements AstVisitor<R> {
+ @override
R visitAdjacentStrings(AdjacentStrings node) {
node.visitChildren(this);
return null;
}
+ @override
R visitAnnotation(Annotation node) {
node.visitChildren(this);
return null;
}
+ @override
R visitArgumentDefinitionTest(ArgumentDefinitionTest node) {
node.visitChildren(this);
return null;
}
+ @override
R visitArgumentList(ArgumentList node) {
node.visitChildren(this);
return null;
}
+ @override
R visitAsExpression(AsExpression node) {
node.visitChildren(this);
return null;
}
+ @override
R visitAssertStatement(AssertStatement node) {
node.visitChildren(this);
return null;
}
+ @override
R visitAssignmentExpression(AssignmentExpression node) {
node.visitChildren(this);
return null;
}
+ @override
R visitBinaryExpression(BinaryExpression node) {
node.visitChildren(this);
return null;
}
+ @override
R visitBlock(Block node) {
node.visitChildren(this);
return null;
}
+ @override
R visitBlockFunctionBody(BlockFunctionBody node) {
node.visitChildren(this);
return null;
}
+ @override
R visitBooleanLiteral(BooleanLiteral node) {
node.visitChildren(this);
return null;
}
+ @override
R visitBreakStatement(BreakStatement node) {
node.visitChildren(this);
return null;
}
+ @override
R visitCascadeExpression(CascadeExpression node) {
node.visitChildren(this);
return null;
}
+ @override
R visitCatchClause(CatchClause node) {
node.visitChildren(this);
return null;
}
+ @override
R visitClassDeclaration(ClassDeclaration node) {
node.visitChildren(this);
return null;
}
+ @override
R visitClassTypeAlias(ClassTypeAlias node) {
node.visitChildren(this);
return null;
}
+ @override
R visitComment(Comment node) {
node.visitChildren(this);
return null;
}
+ @override
R visitCommentReference(CommentReference node) {
node.visitChildren(this);
return null;
}
+ @override
R visitCompilationUnit(CompilationUnit node) {
node.visitChildren(this);
return null;
}
+ @override
R visitConditionalExpression(ConditionalExpression node) {
node.visitChildren(this);
return null;
}
+ @override
R visitConstructorDeclaration(ConstructorDeclaration node) {
node.visitChildren(this);
return null;
}
+ @override
R visitConstructorFieldInitializer(ConstructorFieldInitializer node) {
node.visitChildren(this);
return null;
}
+ @override
R visitConstructorName(ConstructorName node) {
node.visitChildren(this);
return null;
}
+ @override
R visitContinueStatement(ContinueStatement node) {
node.visitChildren(this);
return null;
}
+ @override
R visitDeclaredIdentifier(DeclaredIdentifier node) {
node.visitChildren(this);
return null;
}
+ @override
R visitDefaultFormalParameter(DefaultFormalParameter node) {
node.visitChildren(this);
return null;
}
+ @override
R visitDoStatement(DoStatement node) {
node.visitChildren(this);
return null;
}
+ @override
R visitDoubleLiteral(DoubleLiteral node) {
node.visitChildren(this);
return null;
}
+ @override
R visitEmptyFunctionBody(EmptyFunctionBody node) {
node.visitChildren(this);
return null;
}
+ @override
R visitEmptyStatement(EmptyStatement node) {
node.visitChildren(this);
return null;
}
+ @override
R visitExportDirective(ExportDirective node) {
node.visitChildren(this);
return null;
}
+ @override
R visitExpressionFunctionBody(ExpressionFunctionBody node) {
node.visitChildren(this);
return null;
}
+ @override
R visitExpressionStatement(ExpressionStatement node) {
node.visitChildren(this);
return null;
}
+ @override
R visitExtendsClause(ExtendsClause node) {
node.visitChildren(this);
return null;
}
+ @override
R visitFieldDeclaration(FieldDeclaration node) {
node.visitChildren(this);
return null;
}
+ @override
R visitFieldFormalParameter(FieldFormalParameter node) {
node.visitChildren(this);
return null;
}
+ @override
R visitForEachStatement(ForEachStatement node) {
node.visitChildren(this);
return null;
}
+ @override
R visitFormalParameterList(FormalParameterList node) {
node.visitChildren(this);
return null;
}
+ @override
R visitForStatement(ForStatement node) {
node.visitChildren(this);
return null;
}
+ @override
R visitFunctionDeclaration(FunctionDeclaration node) {
node.visitChildren(this);
return null;
}
+ @override
R visitFunctionDeclarationStatement(FunctionDeclarationStatement node) {
node.visitChildren(this);
return null;
}
+ @override
R visitFunctionExpression(FunctionExpression node) {
node.visitChildren(this);
return null;
}
+ @override
R visitFunctionExpressionInvocation(FunctionExpressionInvocation node) {
node.visitChildren(this);
return null;
}
+ @override
R visitFunctionTypeAlias(FunctionTypeAlias node) {
node.visitChildren(this);
return null;
}
+ @override
R visitFunctionTypedFormalParameter(FunctionTypedFormalParameter node) {
node.visitChildren(this);
return null;
}
+ @override
R visitHideCombinator(HideCombinator node) {
node.visitChildren(this);
return null;
}
+ @override
R visitIfStatement(IfStatement node) {
node.visitChildren(this);
return null;
}
+ @override
R visitImplementsClause(ImplementsClause node) {
node.visitChildren(this);
return null;
}
+ @override
R visitImportDirective(ImportDirective node) {
node.visitChildren(this);
return null;
}
+ @override
R visitIndexExpression(IndexExpression node) {
node.visitChildren(this);
return null;
}
+ @override
R visitInstanceCreationExpression(InstanceCreationExpression node) {
node.visitChildren(this);
return null;
}
+ @override
R visitIntegerLiteral(IntegerLiteral node) {
node.visitChildren(this);
return null;
}
+ @override
R visitInterpolationExpression(InterpolationExpression node) {
node.visitChildren(this);
return null;
}
+ @override
R visitInterpolationString(InterpolationString node) {
node.visitChildren(this);
return null;
}
+ @override
R visitIsExpression(IsExpression node) {
node.visitChildren(this);
return null;
}
+ @override
R visitLabel(Label node) {
node.visitChildren(this);
return null;
}
+ @override
R visitLabeledStatement(LabeledStatement node) {
node.visitChildren(this);
return null;
}
+ @override
R visitLibraryDirective(LibraryDirective node) {
node.visitChildren(this);
return null;
}
+ @override
R visitLibraryIdentifier(LibraryIdentifier node) {
node.visitChildren(this);
return null;
}
+ @override
R visitListLiteral(ListLiteral node) {
node.visitChildren(this);
return null;
}
+ @override
R visitMapLiteral(MapLiteral node) {
node.visitChildren(this);
return null;
}
+ @override
R visitMapLiteralEntry(MapLiteralEntry node) {
node.visitChildren(this);
return null;
}
+ @override
R visitMethodDeclaration(MethodDeclaration node) {
node.visitChildren(this);
return null;
}
+ @override
R visitMethodInvocation(MethodInvocation node) {
node.visitChildren(this);
return null;
}
+ @override
R visitNamedExpression(NamedExpression node) {
node.visitChildren(this);
return null;
}
+ @override
R visitNativeClause(NativeClause node) {
node.visitChildren(this);
return null;
}
+ @override
R visitNativeFunctionBody(NativeFunctionBody node) {
node.visitChildren(this);
return null;
}
+ @override
R visitNullLiteral(NullLiteral node) {
node.visitChildren(this);
return null;
}
+ @override
R visitParenthesizedExpression(ParenthesizedExpression node) {
node.visitChildren(this);
return null;
}
+ @override
R visitPartDirective(PartDirective node) {
node.visitChildren(this);
return null;
}
+ @override
R visitPartOfDirective(PartOfDirective node) {
node.visitChildren(this);
return null;
}
+ @override
R visitPostfixExpression(PostfixExpression node) {
node.visitChildren(this);
return null;
}
+ @override
R visitPrefixedIdentifier(PrefixedIdentifier node) {
node.visitChildren(this);
return null;
}
+ @override
R visitPrefixExpression(PrefixExpression node) {
node.visitChildren(this);
return null;
}
+ @override
R visitPropertyAccess(PropertyAccess node) {
node.visitChildren(this);
return null;
}
+ @override
R visitRedirectingConstructorInvocation(RedirectingConstructorInvocation node) {
node.visitChildren(this);
return null;
}
+ @override
R visitRethrowExpression(RethrowExpression node) {
node.visitChildren(this);
return null;
}
+ @override
R visitReturnStatement(ReturnStatement node) {
node.visitChildren(this);
return null;
}
+ @override
R visitScriptTag(ScriptTag node) {
node.visitChildren(this);
return null;
}
+ @override
R visitShowCombinator(ShowCombinator node) {
node.visitChildren(this);
return null;
}
+ @override
R visitSimpleFormalParameter(SimpleFormalParameter node) {
node.visitChildren(this);
return null;
}
+ @override
R visitSimpleIdentifier(SimpleIdentifier node) {
node.visitChildren(this);
return null;
}
+ @override
R visitSimpleStringLiteral(SimpleStringLiteral node) {
node.visitChildren(this);
return null;
}
+ @override
R visitStringInterpolation(StringInterpolation node) {
node.visitChildren(this);
return null;
}
+ @override
R visitSuperConstructorInvocation(SuperConstructorInvocation node) {
node.visitChildren(this);
return null;
}
+ @override
R visitSuperExpression(SuperExpression node) {
node.visitChildren(this);
return null;
}
+ @override
R visitSwitchCase(SwitchCase node) {
node.visitChildren(this);
return null;
}
+ @override
R visitSwitchDefault(SwitchDefault node) {
node.visitChildren(this);
return null;
}
+ @override
R visitSwitchStatement(SwitchStatement node) {
node.visitChildren(this);
return null;
}
+ @override
R visitSymbolLiteral(SymbolLiteral node) {
node.visitChildren(this);
return null;
}
+ @override
R visitThisExpression(ThisExpression node) {
node.visitChildren(this);
return null;
}
+ @override
R visitThrowExpression(ThrowExpression node) {
node.visitChildren(this);
return null;
}
+ @override
R visitTopLevelVariableDeclaration(TopLevelVariableDeclaration node) {
node.visitChildren(this);
return null;
}
+ @override
R visitTryStatement(TryStatement node) {
node.visitChildren(this);
return null;
}
+ @override
R visitTypeArgumentList(TypeArgumentList node) {
node.visitChildren(this);
return null;
}
+ @override
R visitTypeName(TypeName node) {
node.visitChildren(this);
return null;
}
+ @override
R visitTypeParameter(TypeParameter node) {
node.visitChildren(this);
return null;
}
+ @override
R visitTypeParameterList(TypeParameterList node) {
node.visitChildren(this);
return null;
}
+ @override
R visitVariableDeclaration(VariableDeclaration node) {
node.visitChildren(this);
return null;
}
+ @override
R visitVariableDeclarationList(VariableDeclarationList node) {
node.visitChildren(this);
return null;
}
+ @override
R visitVariableDeclarationStatement(VariableDeclarationStatement node) {
node.visitChildren(this);
return null;
}
+ @override
R visitWhileStatement(WhileStatement node) {
node.visitChildren(this);
return null;
}
+ @override
R visitWithClause(WithClause node) {
node.visitChildren(this);
return null;
@@ -13124,210 +13875,313 @@
* structure) and that only need to visit a small number of node types.
*/
class SimpleAstVisitor<R> implements AstVisitor<R> {
+ @override
R visitAdjacentStrings(AdjacentStrings node) => null;
+ @override
R visitAnnotation(Annotation node) => null;
+ @override
R visitArgumentDefinitionTest(ArgumentDefinitionTest node) => null;
+ @override
R visitArgumentList(ArgumentList node) => null;
+ @override
R visitAsExpression(AsExpression node) => null;
+ @override
R visitAssertStatement(AssertStatement node) => null;
+ @override
R visitAssignmentExpression(AssignmentExpression node) => null;
+ @override
R visitBinaryExpression(BinaryExpression node) => null;
+ @override
R visitBlock(Block node) => null;
+ @override
R visitBlockFunctionBody(BlockFunctionBody node) => null;
+ @override
R visitBooleanLiteral(BooleanLiteral node) => null;
+ @override
R visitBreakStatement(BreakStatement node) => null;
+ @override
R visitCascadeExpression(CascadeExpression node) => null;
+ @override
R visitCatchClause(CatchClause node) => null;
+ @override
R visitClassDeclaration(ClassDeclaration node) => null;
+ @override
R visitClassTypeAlias(ClassTypeAlias node) => null;
+ @override
R visitComment(Comment node) => null;
+ @override
R visitCommentReference(CommentReference node) => null;
+ @override
R visitCompilationUnit(CompilationUnit node) => null;
+ @override
R visitConditionalExpression(ConditionalExpression node) => null;
+ @override
R visitConstructorDeclaration(ConstructorDeclaration node) => null;
+ @override
R visitConstructorFieldInitializer(ConstructorFieldInitializer node) => null;
+ @override
R visitConstructorName(ConstructorName node) => null;
+ @override
R visitContinueStatement(ContinueStatement node) => null;
+ @override
R visitDeclaredIdentifier(DeclaredIdentifier node) => null;
+ @override
R visitDefaultFormalParameter(DefaultFormalParameter node) => null;
+ @override
R visitDoStatement(DoStatement node) => null;
+ @override
R visitDoubleLiteral(DoubleLiteral node) => null;
+ @override
R visitEmptyFunctionBody(EmptyFunctionBody node) => null;
+ @override
R visitEmptyStatement(EmptyStatement node) => null;
+ @override
R visitExportDirective(ExportDirective node) => null;
+ @override
R visitExpressionFunctionBody(ExpressionFunctionBody node) => null;
+ @override
R visitExpressionStatement(ExpressionStatement node) => null;
+ @override
R visitExtendsClause(ExtendsClause node) => null;
+ @override
R visitFieldDeclaration(FieldDeclaration node) => null;
+ @override
R visitFieldFormalParameter(FieldFormalParameter node) => null;
+ @override
R visitForEachStatement(ForEachStatement node) => null;
+ @override
R visitFormalParameterList(FormalParameterList node) => null;
+ @override
R visitForStatement(ForStatement node) => null;
+ @override
R visitFunctionDeclaration(FunctionDeclaration node) => null;
+ @override
R visitFunctionDeclarationStatement(FunctionDeclarationStatement node) => null;
+ @override
R visitFunctionExpression(FunctionExpression node) => null;
+ @override
R visitFunctionExpressionInvocation(FunctionExpressionInvocation node) => null;
+ @override
R visitFunctionTypeAlias(FunctionTypeAlias node) => null;
+ @override
R visitFunctionTypedFormalParameter(FunctionTypedFormalParameter node) => null;
+ @override
R visitHideCombinator(HideCombinator node) => null;
+ @override
R visitIfStatement(IfStatement node) => null;
+ @override
R visitImplementsClause(ImplementsClause node) => null;
+ @override
R visitImportDirective(ImportDirective node) => null;
+ @override
R visitIndexExpression(IndexExpression node) => null;
+ @override
R visitInstanceCreationExpression(InstanceCreationExpression node) => null;
+ @override
R visitIntegerLiteral(IntegerLiteral node) => null;
+ @override
R visitInterpolationExpression(InterpolationExpression node) => null;
+ @override
R visitInterpolationString(InterpolationString node) => null;
+ @override
R visitIsExpression(IsExpression node) => null;
+ @override
R visitLabel(Label node) => null;
+ @override
R visitLabeledStatement(LabeledStatement node) => null;
+ @override
R visitLibraryDirective(LibraryDirective node) => null;
+ @override
R visitLibraryIdentifier(LibraryIdentifier node) => null;
+ @override
R visitListLiteral(ListLiteral node) => null;
+ @override
R visitMapLiteral(MapLiteral node) => null;
+ @override
R visitMapLiteralEntry(MapLiteralEntry node) => null;
+ @override
R visitMethodDeclaration(MethodDeclaration node) => null;
+ @override
R visitMethodInvocation(MethodInvocation node) => null;
+ @override
R visitNamedExpression(NamedExpression node) => null;
+ @override
R visitNativeClause(NativeClause node) => null;
+ @override
R visitNativeFunctionBody(NativeFunctionBody node) => null;
+ @override
R visitNullLiteral(NullLiteral node) => null;
+ @override
R visitParenthesizedExpression(ParenthesizedExpression node) => null;
+ @override
R visitPartDirective(PartDirective node) => null;
+ @override
R visitPartOfDirective(PartOfDirective node) => null;
+ @override
R visitPostfixExpression(PostfixExpression node) => null;
+ @override
R visitPrefixedIdentifier(PrefixedIdentifier node) => null;
+ @override
R visitPrefixExpression(PrefixExpression node) => null;
+ @override
R visitPropertyAccess(PropertyAccess node) => null;
+ @override
R visitRedirectingConstructorInvocation(RedirectingConstructorInvocation node) => null;
+ @override
R visitRethrowExpression(RethrowExpression node) => null;
+ @override
R visitReturnStatement(ReturnStatement node) => null;
+ @override
R visitScriptTag(ScriptTag node) => null;
+ @override
R visitShowCombinator(ShowCombinator node) => null;
+ @override
R visitSimpleFormalParameter(SimpleFormalParameter node) => null;
+ @override
R visitSimpleIdentifier(SimpleIdentifier node) => null;
+ @override
R visitSimpleStringLiteral(SimpleStringLiteral node) => null;
+ @override
R visitStringInterpolation(StringInterpolation node) => null;
+ @override
R visitSuperConstructorInvocation(SuperConstructorInvocation node) => null;
+ @override
R visitSuperExpression(SuperExpression node) => null;
+ @override
R visitSwitchCase(SwitchCase node) => null;
+ @override
R visitSwitchDefault(SwitchDefault node) => null;
+ @override
R visitSwitchStatement(SwitchStatement node) => null;
+ @override
R visitSymbolLiteral(SymbolLiteral node) => null;
+ @override
R visitThisExpression(ThisExpression node) => null;
+ @override
R visitThrowExpression(ThrowExpression node) => null;
+ @override
R visitTopLevelVariableDeclaration(TopLevelVariableDeclaration node) => null;
+ @override
R visitTryStatement(TryStatement node) => null;
+ @override
R visitTypeArgumentList(TypeArgumentList node) => null;
+ @override
R visitTypeName(TypeName node) => null;
+ @override
R visitTypeParameter(TypeParameter node) => null;
+ @override
R visitTypeParameterList(TypeParameterList node) => null;
+ @override
R visitVariableDeclaration(VariableDeclaration node) => null;
+ @override
R visitVariableDeclarationList(VariableDeclarationList node) => null;
+ @override
R visitVariableDeclarationStatement(VariableDeclarationStatement node) => null;
+ @override
R visitWhileStatement(WhileStatement node) => null;
+ @override
R visitWithClause(WithClause node) => null;
}
@@ -13351,299 +14205,343 @@
this._writer = writer;
}
+ @override
Object visitAdjacentStrings(AdjacentStrings node) {
- visitNodeListWithSeparator(node.strings, " ");
+ _visitNodeListWithSeparator(node.strings, " ");
return null;
}
+ @override
Object visitAnnotation(Annotation node) {
_writer.print('@');
- visitNode(node.name);
- visitNodeWithPrefix(".", node.constructorName);
- visitNode(node.arguments);
+ _visitNode(node.name);
+ _visitNodeWithPrefix(".", node.constructorName);
+ _visitNode(node.arguments);
return null;
}
+ @override
Object visitArgumentDefinitionTest(ArgumentDefinitionTest node) {
_writer.print('?');
- visitNode(node.identifier);
+ _visitNode(node.identifier);
return null;
}
+ @override
Object visitArgumentList(ArgumentList node) {
_writer.print('(');
- visitNodeListWithSeparator(node.arguments, ", ");
+ _visitNodeListWithSeparator(node.arguments, ", ");
_writer.print(')');
return null;
}
+ @override
Object visitAsExpression(AsExpression node) {
- visitNode(node.expression);
+ _visitNode(node.expression);
_writer.print(" as ");
- visitNode(node.type);
+ _visitNode(node.type);
return null;
}
+ @override
Object visitAssertStatement(AssertStatement node) {
_writer.print("assert (");
- visitNode(node.condition);
+ _visitNode(node.condition);
_writer.print(");");
return null;
}
+ @override
Object visitAssignmentExpression(AssignmentExpression node) {
- visitNode(node.leftHandSide);
+ _visitNode(node.leftHandSide);
_writer.print(' ');
_writer.print(node.operator.lexeme);
_writer.print(' ');
- visitNode(node.rightHandSide);
+ _visitNode(node.rightHandSide);
return null;
}
+ @override
Object visitBinaryExpression(BinaryExpression node) {
- visitNode(node.leftOperand);
+ _visitNode(node.leftOperand);
_writer.print(' ');
_writer.print(node.operator.lexeme);
_writer.print(' ');
- visitNode(node.rightOperand);
+ _visitNode(node.rightOperand);
return null;
}
+ @override
Object visitBlock(Block node) {
_writer.print('{');
- visitNodeListWithSeparator(node.statements, " ");
+ _visitNodeListWithSeparator(node.statements, " ");
_writer.print('}');
return null;
}
+ @override
Object visitBlockFunctionBody(BlockFunctionBody node) {
- visitNode(node.block);
+ _visitNode(node.block);
return null;
}
+ @override
Object visitBooleanLiteral(BooleanLiteral node) {
_writer.print(node.literal.lexeme);
return null;
}
+ @override
Object visitBreakStatement(BreakStatement node) {
_writer.print("break");
- visitNodeWithPrefix(" ", node.label);
+ _visitNodeWithPrefix(" ", node.label);
_writer.print(";");
return null;
}
+ @override
Object visitCascadeExpression(CascadeExpression node) {
- visitNode(node.target);
- visitNodeList(node.cascadeSections);
+ _visitNode(node.target);
+ _visitNodeList(node.cascadeSections);
return null;
}
+ @override
Object visitCatchClause(CatchClause node) {
- visitNodeWithPrefix("on ", node.exceptionType);
+ _visitNodeWithPrefix("on ", node.exceptionType);
if (node.catchKeyword != null) {
if (node.exceptionType != null) {
_writer.print(' ');
}
_writer.print("catch (");
- visitNode(node.exceptionParameter);
- visitNodeWithPrefix(", ", node.stackTraceParameter);
+ _visitNode(node.exceptionParameter);
+ _visitNodeWithPrefix(", ", node.stackTraceParameter);
_writer.print(") ");
} else {
_writer.print(" ");
}
- visitNode(node.body);
+ _visitNode(node.body);
return null;
}
+ @override
Object visitClassDeclaration(ClassDeclaration node) {
- visitTokenWithSuffix(node.abstractKeyword, " ");
+ _visitNodeListWithSeparatorAndSuffix(node.metadata, " ", " ");
+ _visitTokenWithSuffix(node.abstractKeyword, " ");
_writer.print("class ");
- visitNode(node.name);
- visitNode(node.typeParameters);
- visitNodeWithPrefix(" ", node.extendsClause);
- visitNodeWithPrefix(" ", node.withClause);
- visitNodeWithPrefix(" ", node.implementsClause);
+ _visitNode(node.name);
+ _visitNode(node.typeParameters);
+ _visitNodeWithPrefix(" ", node.extendsClause);
+ _visitNodeWithPrefix(" ", node.withClause);
+ _visitNodeWithPrefix(" ", node.implementsClause);
_writer.print(" {");
- visitNodeListWithSeparator(node.members, " ");
+ _visitNodeListWithSeparator(node.members, " ");
_writer.print("}");
return null;
}
+ @override
Object visitClassTypeAlias(ClassTypeAlias node) {
+ _visitNodeListWithSeparatorAndSuffix(node.metadata, " ", " ");
if (node.abstractKeyword != null) {
_writer.print("abstract ");
}
_writer.print("class ");
- visitNode(node.name);
- visitNode(node.typeParameters);
+ _visitNode(node.name);
+ _visitNode(node.typeParameters);
_writer.print(" = ");
- visitNode(node.superclass);
- visitNodeWithPrefix(" ", node.withClause);
- visitNodeWithPrefix(" ", node.implementsClause);
+ _visitNode(node.superclass);
+ _visitNodeWithPrefix(" ", node.withClause);
+ _visitNodeWithPrefix(" ", node.implementsClause);
_writer.print(";");
return null;
}
+ @override
Object visitComment(Comment node) => null;
+ @override
Object visitCommentReference(CommentReference node) => null;
+ @override
Object visitCompilationUnit(CompilationUnit node) {
ScriptTag scriptTag = node.scriptTag;
NodeList<Directive> directives = node.directives;
- visitNode(scriptTag);
+ _visitNode(scriptTag);
String prefix = scriptTag == null ? "" : " ";
- visitNodeListWithSeparatorAndPrefix(prefix, directives, " ");
+ _visitNodeListWithSeparatorAndPrefix(prefix, directives, " ");
prefix = scriptTag == null && directives.isEmpty ? "" : " ";
- visitNodeListWithSeparatorAndPrefix(prefix, node.declarations, " ");
+ _visitNodeListWithSeparatorAndPrefix(prefix, node.declarations, " ");
return null;
}
+ @override
Object visitConditionalExpression(ConditionalExpression node) {
- visitNode(node.condition);
+ _visitNode(node.condition);
_writer.print(" ? ");
- visitNode(node.thenExpression);
+ _visitNode(node.thenExpression);
_writer.print(" : ");
- visitNode(node.elseExpression);
+ _visitNode(node.elseExpression);
return null;
}
+ @override
Object visitConstructorDeclaration(ConstructorDeclaration node) {
- visitTokenWithSuffix(node.externalKeyword, " ");
- visitTokenWithSuffix(node.constKeyword, " ");
- visitTokenWithSuffix(node.factoryKeyword, " ");
- visitNode(node.returnType);
- visitNodeWithPrefix(".", node.name);
- visitNode(node.parameters);
- visitNodeListWithSeparatorAndPrefix(" : ", node.initializers, ", ");
- visitNodeWithPrefix(" = ", node.redirectedConstructor);
- visitFunctionWithPrefix(" ", node.body);
+ _visitNodeListWithSeparatorAndSuffix(node.metadata, " ", " ");
+ _visitTokenWithSuffix(node.externalKeyword, " ");
+ _visitTokenWithSuffix(node.constKeyword, " ");
+ _visitTokenWithSuffix(node.factoryKeyword, " ");
+ _visitNode(node.returnType);
+ _visitNodeWithPrefix(".", node.name);
+ _visitNode(node.parameters);
+ _visitNodeListWithSeparatorAndPrefix(" : ", node.initializers, ", ");
+ _visitNodeWithPrefix(" = ", node.redirectedConstructor);
+ _visitFunctionWithPrefix(" ", node.body);
return null;
}
+ @override
Object visitConstructorFieldInitializer(ConstructorFieldInitializer node) {
- visitTokenWithSuffix(node.keyword, ".");
- visitNode(node.fieldName);
+ _visitTokenWithSuffix(node.keyword, ".");
+ _visitNode(node.fieldName);
_writer.print(" = ");
- visitNode(node.expression);
+ _visitNode(node.expression);
return null;
}
+ @override
Object visitConstructorName(ConstructorName node) {
- visitNode(node.type);
- visitNodeWithPrefix(".", node.name);
+ _visitNode(node.type);
+ _visitNodeWithPrefix(".", node.name);
return null;
}
+ @override
Object visitContinueStatement(ContinueStatement node) {
_writer.print("continue");
- visitNodeWithPrefix(" ", node.label);
+ _visitNodeWithPrefix(" ", node.label);
_writer.print(";");
return null;
}
+ @override
Object visitDeclaredIdentifier(DeclaredIdentifier node) {
- visitTokenWithSuffix(node.keyword, " ");
- visitNodeWithSuffix(node.type, " ");
- visitNode(node.identifier);
+ _visitNodeListWithSeparatorAndSuffix(node.metadata, " ", " ");
+ _visitTokenWithSuffix(node.keyword, " ");
+ _visitNodeWithSuffix(node.type, " ");
+ _visitNode(node.identifier);
return null;
}
+ @override
Object visitDefaultFormalParameter(DefaultFormalParameter node) {
- visitNode(node.parameter);
+ _visitNode(node.parameter);
if (node.separator != null) {
_writer.print(" ");
_writer.print(node.separator.lexeme);
- visitNodeWithPrefix(" ", node.defaultValue);
+ _visitNodeWithPrefix(" ", node.defaultValue);
}
return null;
}
+ @override
Object visitDoStatement(DoStatement node) {
_writer.print("do ");
- visitNode(node.body);
+ _visitNode(node.body);
_writer.print(" while (");
- visitNode(node.condition);
+ _visitNode(node.condition);
_writer.print(");");
return null;
}
+ @override
Object visitDoubleLiteral(DoubleLiteral node) {
_writer.print(node.literal.lexeme);
return null;
}
+ @override
Object visitEmptyFunctionBody(EmptyFunctionBody node) {
_writer.print(';');
return null;
}
+ @override
Object visitEmptyStatement(EmptyStatement node) {
_writer.print(';');
return null;
}
+ @override
Object visitExportDirective(ExportDirective node) {
+ _visitNodeListWithSeparatorAndSuffix(node.metadata, " ", " ");
_writer.print("export ");
- visitNode(node.uri);
- visitNodeListWithSeparatorAndPrefix(" ", node.combinators, " ");
+ _visitNode(node.uri);
+ _visitNodeListWithSeparatorAndPrefix(" ", node.combinators, " ");
_writer.print(';');
return null;
}
+ @override
Object visitExpressionFunctionBody(ExpressionFunctionBody node) {
_writer.print("=> ");
- visitNode(node.expression);
+ _visitNode(node.expression);
if (node.semicolon != null) {
_writer.print(';');
}
return null;
}
+ @override
Object visitExpressionStatement(ExpressionStatement node) {
- visitNode(node.expression);
+ _visitNode(node.expression);
_writer.print(';');
return null;
}
+ @override
Object visitExtendsClause(ExtendsClause node) {
_writer.print("extends ");
- visitNode(node.superclass);
+ _visitNode(node.superclass);
return null;
}
+ @override
Object visitFieldDeclaration(FieldDeclaration node) {
- visitTokenWithSuffix(node.staticKeyword, " ");
- visitNode(node.fields);
+ _visitNodeListWithSeparatorAndSuffix(node.metadata, " ", " ");
+ _visitTokenWithSuffix(node.staticKeyword, " ");
+ _visitNode(node.fields);
_writer.print(";");
return null;
}
+ @override
Object visitFieldFormalParameter(FieldFormalParameter node) {
- visitTokenWithSuffix(node.keyword, " ");
- visitNodeWithSuffix(node.type, " ");
+ _visitTokenWithSuffix(node.keyword, " ");
+ _visitNodeWithSuffix(node.type, " ");
_writer.print("this.");
- visitNode(node.identifier);
- visitNode(node.parameters);
+ _visitNode(node.identifier);
+ _visitNode(node.parameters);
return null;
}
+ @override
Object visitForEachStatement(ForEachStatement node) {
DeclaredIdentifier loopVariable = node.loopVariable;
_writer.print("for (");
if (loopVariable == null) {
- visitNode(node.identifier);
+ _visitNode(node.identifier);
} else {
- visitNode(loopVariable);
+ _visitNode(loopVariable);
}
_writer.print(" in ");
- visitNode(node.iterator);
+ _visitNode(node.iterator);
_writer.print(") ");
- visitNode(node.body);
+ _visitNode(node.body);
return null;
}
+ @override
Object visitFormalParameterList(FormalParameterList node) {
String groupEnd = null;
_writer.print('(');
@@ -13672,316 +14570,363 @@
return null;
}
+ @override
Object visitForStatement(ForStatement node) {
Expression initialization = node.initialization;
_writer.print("for (");
if (initialization != null) {
- visitNode(initialization);
+ _visitNode(initialization);
} else {
- visitNode(node.variables);
+ _visitNode(node.variables);
}
_writer.print(";");
- visitNodeWithPrefix(" ", node.condition);
+ _visitNodeWithPrefix(" ", node.condition);
_writer.print(";");
- visitNodeListWithSeparatorAndPrefix(" ", node.updaters, ", ");
+ _visitNodeListWithSeparatorAndPrefix(" ", node.updaters, ", ");
_writer.print(") ");
- visitNode(node.body);
+ _visitNode(node.body);
return null;
}
+ @override
Object visitFunctionDeclaration(FunctionDeclaration node) {
- visitNodeWithSuffix(node.returnType, " ");
- visitTokenWithSuffix(node.propertyKeyword, " ");
- visitNode(node.name);
- visitNode(node.functionExpression);
+ _visitNodeListWithSeparatorAndSuffix(node.metadata, " ", " ");
+ _visitNodeWithSuffix(node.returnType, " ");
+ _visitTokenWithSuffix(node.propertyKeyword, " ");
+ _visitNode(node.name);
+ _visitNode(node.functionExpression);
return null;
}
+ @override
Object visitFunctionDeclarationStatement(FunctionDeclarationStatement node) {
- visitNode(node.functionDeclaration);
+ _visitNode(node.functionDeclaration);
_writer.print(';');
return null;
}
+ @override
Object visitFunctionExpression(FunctionExpression node) {
- visitNode(node.parameters);
+ _visitNode(node.parameters);
_writer.print(' ');
- visitNode(node.body);
+ _visitNode(node.body);
return null;
}
+ @override
Object visitFunctionExpressionInvocation(FunctionExpressionInvocation node) {
- visitNode(node.function);
- visitNode(node.argumentList);
+ _visitNode(node.function);
+ _visitNode(node.argumentList);
return null;
}
+ @override
Object visitFunctionTypeAlias(FunctionTypeAlias node) {
+ _visitNodeListWithSeparatorAndSuffix(node.metadata, " ", " ");
_writer.print("typedef ");
- visitNodeWithSuffix(node.returnType, " ");
- visitNode(node.name);
- visitNode(node.typeParameters);
- visitNode(node.parameters);
+ _visitNodeWithSuffix(node.returnType, " ");
+ _visitNode(node.name);
+ _visitNode(node.typeParameters);
+ _visitNode(node.parameters);
_writer.print(";");
return null;
}
+ @override
Object visitFunctionTypedFormalParameter(FunctionTypedFormalParameter node) {
- visitNodeWithSuffix(node.returnType, " ");
- visitNode(node.identifier);
- visitNode(node.parameters);
+ _visitNodeWithSuffix(node.returnType, " ");
+ _visitNode(node.identifier);
+ _visitNode(node.parameters);
return null;
}
+ @override
Object visitHideCombinator(HideCombinator node) {
_writer.print("hide ");
- visitNodeListWithSeparator(node.hiddenNames, ", ");
+ _visitNodeListWithSeparator(node.hiddenNames, ", ");
return null;
}
+ @override
Object visitIfStatement(IfStatement node) {
_writer.print("if (");
- visitNode(node.condition);
+ _visitNode(node.condition);
_writer.print(") ");
- visitNode(node.thenStatement);
- visitNodeWithPrefix(" else ", node.elseStatement);
+ _visitNode(node.thenStatement);
+ _visitNodeWithPrefix(" else ", node.elseStatement);
return null;
}
+ @override
Object visitImplementsClause(ImplementsClause node) {
_writer.print("implements ");
- visitNodeListWithSeparator(node.interfaces, ", ");
+ _visitNodeListWithSeparator(node.interfaces, ", ");
return null;
}
+ @override
Object visitImportDirective(ImportDirective node) {
+ _visitNodeListWithSeparatorAndSuffix(node.metadata, " ", " ");
_writer.print("import ");
- visitNode(node.uri);
- visitNodeWithPrefix(" as ", node.prefix);
- visitNodeListWithSeparatorAndPrefix(" ", node.combinators, " ");
+ _visitNode(node.uri);
+ _visitNodeWithPrefix(" as ", node.prefix);
+ _visitNodeListWithSeparatorAndPrefix(" ", node.combinators, " ");
_writer.print(';');
return null;
}
+ @override
Object visitIndexExpression(IndexExpression node) {
if (node.isCascaded) {
_writer.print("..");
} else {
- visitNode(node.target);
+ _visitNode(node.target);
}
_writer.print('[');
- visitNode(node.index);
+ _visitNode(node.index);
_writer.print(']');
return null;
}
+ @override
Object visitInstanceCreationExpression(InstanceCreationExpression node) {
- visitTokenWithSuffix(node.keyword, " ");
- visitNode(node.constructorName);
- visitNode(node.argumentList);
+ _visitTokenWithSuffix(node.keyword, " ");
+ _visitNode(node.constructorName);
+ _visitNode(node.argumentList);
return null;
}
+ @override
Object visitIntegerLiteral(IntegerLiteral node) {
_writer.print(node.literal.lexeme);
return null;
}
+ @override
Object visitInterpolationExpression(InterpolationExpression node) {
if (node.rightBracket != null) {
_writer.print("\${");
- visitNode(node.expression);
+ _visitNode(node.expression);
_writer.print("}");
} else {
_writer.print("\$");
- visitNode(node.expression);
+ _visitNode(node.expression);
}
return null;
}
+ @override
Object visitInterpolationString(InterpolationString node) {
_writer.print(node.contents.lexeme);
return null;
}
+ @override
Object visitIsExpression(IsExpression node) {
- visitNode(node.expression);
+ _visitNode(node.expression);
if (node.notOperator == null) {
_writer.print(" is ");
} else {
_writer.print(" is! ");
}
- visitNode(node.type);
+ _visitNode(node.type);
return null;
}
+ @override
Object visitLabel(Label node) {
- visitNode(node.label);
+ _visitNode(node.label);
_writer.print(":");
return null;
}
+ @override
Object visitLabeledStatement(LabeledStatement node) {
- visitNodeListWithSeparatorAndSuffix(node.labels, " ", " ");
- visitNode(node.statement);
+ _visitNodeListWithSeparatorAndSuffix(node.labels, " ", " ");
+ _visitNode(node.statement);
return null;
}
+ @override
Object visitLibraryDirective(LibraryDirective node) {
+ _visitNodeListWithSeparatorAndSuffix(node.metadata, " ", " ");
_writer.print("library ");
- visitNode(node.name);
+ _visitNode(node.name);
_writer.print(';');
return null;
}
+ @override
Object visitLibraryIdentifier(LibraryIdentifier node) {
_writer.print(node.name);
return null;
}
+ @override
Object visitListLiteral(ListLiteral node) {
if (node.constKeyword != null) {
_writer.print(node.constKeyword.lexeme);
_writer.print(' ');
}
- visitNodeWithSuffix(node.typeArguments, " ");
+ _visitNodeWithSuffix(node.typeArguments, " ");
_writer.print("[");
- visitNodeListWithSeparator(node.elements, ", ");
+ _visitNodeListWithSeparator(node.elements, ", ");
_writer.print("]");
return null;
}
+ @override
Object visitMapLiteral(MapLiteral node) {
if (node.constKeyword != null) {
_writer.print(node.constKeyword.lexeme);
_writer.print(' ');
}
- visitNodeWithSuffix(node.typeArguments, " ");
+ _visitNodeWithSuffix(node.typeArguments, " ");
_writer.print("{");
- visitNodeListWithSeparator(node.entries, ", ");
+ _visitNodeListWithSeparator(node.entries, ", ");
_writer.print("}");
return null;
}
+ @override
Object visitMapLiteralEntry(MapLiteralEntry node) {
- visitNode(node.key);
+ _visitNode(node.key);
_writer.print(" : ");
- visitNode(node.value);
+ _visitNode(node.value);
return null;
}
+ @override
Object visitMethodDeclaration(MethodDeclaration node) {
- visitTokenWithSuffix(node.externalKeyword, " ");
- visitTokenWithSuffix(node.modifierKeyword, " ");
- visitNodeWithSuffix(node.returnType, " ");
- visitTokenWithSuffix(node.propertyKeyword, " ");
- visitTokenWithSuffix(node.operatorKeyword, " ");
- visitNode(node.name);
+ _visitNodeListWithSeparatorAndSuffix(node.metadata, " ", " ");
+ _visitTokenWithSuffix(node.externalKeyword, " ");
+ _visitTokenWithSuffix(node.modifierKeyword, " ");
+ _visitNodeWithSuffix(node.returnType, " ");
+ _visitTokenWithSuffix(node.propertyKeyword, " ");
+ _visitTokenWithSuffix(node.operatorKeyword, " ");
+ _visitNode(node.name);
if (!node.isGetter) {
- visitNode(node.parameters);
+ _visitNode(node.parameters);
}
- visitFunctionWithPrefix(" ", node.body);
+ _visitFunctionWithPrefix(" ", node.body);
return null;
}
+ @override
Object visitMethodInvocation(MethodInvocation node) {
if (node.isCascaded) {
_writer.print("..");
} else {
- visitNodeWithSuffix(node.target, ".");
+ _visitNodeWithSuffix(node.target, ".");
}
- visitNode(node.methodName);
- visitNode(node.argumentList);
+ _visitNode(node.methodName);
+ _visitNode(node.argumentList);
return null;
}
+ @override
Object visitNamedExpression(NamedExpression node) {
- visitNode(node.name);
- visitNodeWithPrefix(" ", node.expression);
+ _visitNode(node.name);
+ _visitNodeWithPrefix(" ", node.expression);
return null;
}
+ @override
Object visitNativeClause(NativeClause node) {
_writer.print("native ");
- visitNode(node.name);
+ _visitNode(node.name);
return null;
}
+ @override
Object visitNativeFunctionBody(NativeFunctionBody node) {
_writer.print("native ");
- visitNode(node.stringLiteral);
+ _visitNode(node.stringLiteral);
_writer.print(';');
return null;
}
+ @override
Object visitNullLiteral(NullLiteral node) {
_writer.print("null");
return null;
}
+ @override
Object visitParenthesizedExpression(ParenthesizedExpression node) {
_writer.print('(');
- visitNode(node.expression);
+ _visitNode(node.expression);
_writer.print(')');
return null;
}
+ @override
Object visitPartDirective(PartDirective node) {
+ _visitNodeListWithSeparatorAndSuffix(node.metadata, " ", " ");
_writer.print("part ");
- visitNode(node.uri);
+ _visitNode(node.uri);
_writer.print(';');
return null;
}
+ @override
Object visitPartOfDirective(PartOfDirective node) {
+ _visitNodeListWithSeparatorAndSuffix(node.metadata, " ", " ");
_writer.print("part of ");
- visitNode(node.libraryName);
+ _visitNode(node.libraryName);
_writer.print(';');
return null;
}
+ @override
Object visitPostfixExpression(PostfixExpression node) {
- visitNode(node.operand);
+ _visitNode(node.operand);
_writer.print(node.operator.lexeme);
return null;
}
+ @override
Object visitPrefixedIdentifier(PrefixedIdentifier node) {
- visitNode(node.prefix);
+ _visitNode(node.prefix);
_writer.print('.');
- visitNode(node.identifier);
+ _visitNode(node.identifier);
return null;
}
+ @override
Object visitPrefixExpression(PrefixExpression node) {
_writer.print(node.operator.lexeme);
- visitNode(node.operand);
+ _visitNode(node.operand);
return null;
}
+ @override
Object visitPropertyAccess(PropertyAccess node) {
if (node.isCascaded) {
_writer.print("..");
} else {
- visitNode(node.target);
+ _visitNode(node.target);
_writer.print('.');
}
- visitNode(node.propertyName);
+ _visitNode(node.propertyName);
return null;
}
+ @override
Object visitRedirectingConstructorInvocation(RedirectingConstructorInvocation node) {
_writer.print("this");
- visitNodeWithPrefix(".", node.constructorName);
- visitNode(node.argumentList);
+ _visitNodeWithPrefix(".", node.constructorName);
+ _visitNode(node.argumentList);
return null;
}
+ @override
Object visitRethrowExpression(RethrowExpression node) {
_writer.print("rethrow");
return null;
}
+ @override
Object visitReturnStatement(ReturnStatement node) {
Expression expression = node.expression;
if (expression == null) {
@@ -13994,76 +14939,88 @@
return null;
}
+ @override
Object visitScriptTag(ScriptTag node) {
_writer.print(node.scriptTag.lexeme);
return null;
}
+ @override
Object visitShowCombinator(ShowCombinator node) {
_writer.print("show ");
- visitNodeListWithSeparator(node.shownNames, ", ");
+ _visitNodeListWithSeparator(node.shownNames, ", ");
return null;
}
+ @override
Object visitSimpleFormalParameter(SimpleFormalParameter node) {
- visitTokenWithSuffix(node.keyword, " ");
- visitNodeWithSuffix(node.type, " ");
- visitNode(node.identifier);
+ _visitTokenWithSuffix(node.keyword, " ");
+ _visitNodeWithSuffix(node.type, " ");
+ _visitNode(node.identifier);
return null;
}
+ @override
Object visitSimpleIdentifier(SimpleIdentifier node) {
_writer.print(node.token.lexeme);
return null;
}
+ @override
Object visitSimpleStringLiteral(SimpleStringLiteral node) {
_writer.print(node.literal.lexeme);
return null;
}
+ @override
Object visitStringInterpolation(StringInterpolation node) {
- visitNodeList(node.elements);
+ _visitNodeList(node.elements);
return null;
}
+ @override
Object visitSuperConstructorInvocation(SuperConstructorInvocation node) {
_writer.print("super");
- visitNodeWithPrefix(".", node.constructorName);
- visitNode(node.argumentList);
+ _visitNodeWithPrefix(".", node.constructorName);
+ _visitNode(node.argumentList);
return null;
}
+ @override
Object visitSuperExpression(SuperExpression node) {
_writer.print("super");
return null;
}
+ @override
Object visitSwitchCase(SwitchCase node) {
- visitNodeListWithSeparatorAndSuffix(node.labels, " ", " ");
+ _visitNodeListWithSeparatorAndSuffix(node.labels, " ", " ");
_writer.print("case ");
- visitNode(node.expression);
+ _visitNode(node.expression);
_writer.print(": ");
- visitNodeListWithSeparator(node.statements, " ");
+ _visitNodeListWithSeparator(node.statements, " ");
return null;
}
+ @override
Object visitSwitchDefault(SwitchDefault node) {
- visitNodeListWithSeparatorAndSuffix(node.labels, " ", " ");
+ _visitNodeListWithSeparatorAndSuffix(node.labels, " ", " ");
_writer.print("default: ");
- visitNodeListWithSeparator(node.statements, " ");
+ _visitNodeListWithSeparator(node.statements, " ");
return null;
}
+ @override
Object visitSwitchStatement(SwitchStatement node) {
_writer.print("switch (");
- visitNode(node.expression);
+ _visitNode(node.expression);
_writer.print(") {");
- visitNodeListWithSeparator(node.members, " ");
+ _visitNodeListWithSeparator(node.members, " ");
_writer.print("}");
return null;
}
+ @override
Object visitSymbolLiteral(SymbolLiteral node) {
_writer.print("#");
List<Token> components = node.components;
@@ -14076,86 +15033,102 @@
return null;
}
+ @override
Object visitThisExpression(ThisExpression node) {
_writer.print("this");
return null;
}
+ @override
Object visitThrowExpression(ThrowExpression node) {
_writer.print("throw ");
- visitNode(node.expression);
+ _visitNode(node.expression);
return null;
}
+ @override
Object visitTopLevelVariableDeclaration(TopLevelVariableDeclaration node) {
- visitNodeWithSuffix(node.variables, ";");
+ _visitNodeWithSuffix(node.variables, ";");
return null;
}
+ @override
Object visitTryStatement(TryStatement node) {
_writer.print("try ");
- visitNode(node.body);
- visitNodeListWithSeparatorAndPrefix(" ", node.catchClauses, " ");
- visitNodeWithPrefix(" finally ", node.finallyBlock);
+ _visitNode(node.body);
+ _visitNodeListWithSeparatorAndPrefix(" ", node.catchClauses, " ");
+ _visitNodeWithPrefix(" finally ", node.finallyBlock);
return null;
}
+ @override
Object visitTypeArgumentList(TypeArgumentList node) {
_writer.print('<');
- visitNodeListWithSeparator(node.arguments, ", ");
+ _visitNodeListWithSeparator(node.arguments, ", ");
_writer.print('>');
return null;
}
+ @override
Object visitTypeName(TypeName node) {
- visitNode(node.name);
- visitNode(node.typeArguments);
+ _visitNode(node.name);
+ _visitNode(node.typeArguments);
return null;
}
+ @override
Object visitTypeParameter(TypeParameter node) {
- visitNode(node.name);
- visitNodeWithPrefix(" extends ", node.bound);
+ _visitNodeListWithSeparatorAndSuffix(node.metadata, " ", " ");
+ _visitNode(node.name);
+ _visitNodeWithPrefix(" extends ", node.bound);
return null;
}
+ @override
Object visitTypeParameterList(TypeParameterList node) {
_writer.print('<');
- visitNodeListWithSeparator(node.typeParameters, ", ");
+ _visitNodeListWithSeparator(node.typeParameters, ", ");
_writer.print('>');
return null;
}
+ @override
Object visitVariableDeclaration(VariableDeclaration node) {
- visitNode(node.name);
- visitNodeWithPrefix(" = ", node.initializer);
+ _visitNodeListWithSeparatorAndSuffix(node.metadata, " ", " ");
+ _visitNode(node.name);
+ _visitNodeWithPrefix(" = ", node.initializer);
return null;
}
+ @override
Object visitVariableDeclarationList(VariableDeclarationList node) {
- visitTokenWithSuffix(node.keyword, " ");
- visitNodeWithSuffix(node.type, " ");
- visitNodeListWithSeparator(node.variables, ", ");
+ _visitNodeListWithSeparatorAndSuffix(node.metadata, " ", " ");
+ _visitTokenWithSuffix(node.keyword, " ");
+ _visitNodeWithSuffix(node.type, " ");
+ _visitNodeListWithSeparator(node.variables, ", ");
return null;
}
+ @override
Object visitVariableDeclarationStatement(VariableDeclarationStatement node) {
- visitNode(node.variables);
+ _visitNode(node.variables);
_writer.print(";");
return null;
}
+ @override
Object visitWhileStatement(WhileStatement node) {
_writer.print("while (");
- visitNode(node.condition);
+ _visitNode(node.condition);
_writer.print(") ");
- visitNode(node.body);
+ _visitNode(node.body);
return null;
}
+ @override
Object visitWithClause(WithClause node) {
_writer.print("with ");
- visitNodeListWithSeparator(node.mixinTypes, ", ");
+ _visitNodeListWithSeparator(node.mixinTypes, ", ");
return null;
}
@@ -14165,11 +15138,11 @@
* @param prefix the prefix to be printed if there is a node to visit
* @param body the function body to be visited
*/
- void visitFunctionWithPrefix(String prefix, FunctionBody body) {
+ void _visitFunctionWithPrefix(String prefix, FunctionBody body) {
if (body is! EmptyFunctionBody) {
_writer.print(prefix);
}
- visitNode(body);
+ _visitNode(body);
}
/**
@@ -14177,7 +15150,7 @@
*
* @param node the node to be visited
*/
- void visitNode(AstNode node) {
+ void _visitNode(AstNode node) {
if (node != null) {
node.accept(this);
}
@@ -14189,8 +15162,8 @@
* @param nodes the nodes to be printed
* @param separator the separator to be printed between adjacent nodes
*/
- void visitNodeList(NodeList<AstNode> nodes) {
- visitNodeListWithSeparator(nodes, "");
+ void _visitNodeList(NodeList<AstNode> nodes) {
+ _visitNodeListWithSeparator(nodes, "");
}
/**
@@ -14199,7 +15172,7 @@
* @param nodes the nodes to be printed
* @param separator the separator to be printed between adjacent nodes
*/
- void visitNodeListWithSeparator(NodeList<AstNode> nodes, String separator) {
+ void _visitNodeListWithSeparator(NodeList<AstNode> nodes, String separator) {
if (nodes != null) {
int size = nodes.length;
for (int i = 0; i < size; i++) {
@@ -14218,7 +15191,7 @@
* @param nodes the nodes to be printed
* @param separator the separator to be printed between adjacent nodes
*/
- void visitNodeListWithSeparatorAndPrefix(String prefix, NodeList<AstNode> nodes, String separator) {
+ void _visitNodeListWithSeparatorAndPrefix(String prefix, NodeList<AstNode> nodes, String separator) {
if (nodes != null) {
int size = nodes.length;
if (size > 0) {
@@ -14240,7 +15213,7 @@
* @param separator the separator to be printed between adjacent nodes
* @param suffix the suffix to be printed if the list is not empty
*/
- void visitNodeListWithSeparatorAndSuffix(NodeList<AstNode> nodes, String separator, String suffix) {
+ void _visitNodeListWithSeparatorAndSuffix(NodeList<AstNode> nodes, String separator, String suffix) {
if (nodes != null) {
int size = nodes.length;
if (size > 0) {
@@ -14261,7 +15234,7 @@
* @param prefix the prefix to be printed if there is a node to visit
* @param node the node to be visited
*/
- void visitNodeWithPrefix(String prefix, AstNode node) {
+ void _visitNodeWithPrefix(String prefix, AstNode node) {
if (node != null) {
_writer.print(prefix);
node.accept(this);
@@ -14274,7 +15247,7 @@
* @param suffix the suffix to be printed if there is a node to visit
* @param node the node to be visited
*/
- void visitNodeWithSuffix(AstNode node, String suffix) {
+ void _visitNodeWithSuffix(AstNode node, String suffix) {
if (node != null) {
node.accept(this);
_writer.print(suffix);
@@ -14287,7 +15260,7 @@
* @param suffix the suffix to be printed if there is a node to visit
* @param node the node to be visited
*/
- void visitTokenWithSuffix(Token token, String suffix) {
+ void _visitTokenWithSuffix(Token token, String suffix) {
if (token != null) {
_writer.print(token.lexeme);
_writer.print(suffix);
@@ -14306,138 +15279,205 @@
* cause the children of the visited node to not be visited.
*/
class UnifyingAstVisitor<R> implements AstVisitor<R> {
+ @override
R visitAdjacentStrings(AdjacentStrings node) => visitNode(node);
+ @override
R visitAnnotation(Annotation node) => visitNode(node);
+ @override
R visitArgumentDefinitionTest(ArgumentDefinitionTest node) => visitNode(node);
+ @override
R visitArgumentList(ArgumentList node) => visitNode(node);
+ @override
R visitAsExpression(AsExpression node) => visitNode(node);
+ @override
R visitAssertStatement(AssertStatement node) => visitNode(node);
+ @override
R visitAssignmentExpression(AssignmentExpression node) => visitNode(node);
+ @override
R visitBinaryExpression(BinaryExpression node) => visitNode(node);
+ @override
R visitBlock(Block node) => visitNode(node);
+ @override
R visitBlockFunctionBody(BlockFunctionBody node) => visitNode(node);
+ @override
R visitBooleanLiteral(BooleanLiteral node) => visitNode(node);
+ @override
R visitBreakStatement(BreakStatement node) => visitNode(node);
+ @override
R visitCascadeExpression(CascadeExpression node) => visitNode(node);
+ @override
R visitCatchClause(CatchClause node) => visitNode(node);
+ @override
R visitClassDeclaration(ClassDeclaration node) => visitNode(node);
+ @override
R visitClassTypeAlias(ClassTypeAlias node) => visitNode(node);
+ @override
R visitComment(Comment node) => visitNode(node);
+ @override
R visitCommentReference(CommentReference node) => visitNode(node);
+ @override
R visitCompilationUnit(CompilationUnit node) => visitNode(node);
+ @override
R visitConditionalExpression(ConditionalExpression node) => visitNode(node);
+ @override
R visitConstructorDeclaration(ConstructorDeclaration node) => visitNode(node);
+ @override
R visitConstructorFieldInitializer(ConstructorFieldInitializer node) => visitNode(node);
+ @override
R visitConstructorName(ConstructorName node) => visitNode(node);
+ @override
R visitContinueStatement(ContinueStatement node) => visitNode(node);
+ @override
R visitDeclaredIdentifier(DeclaredIdentifier node) => visitNode(node);
+ @override
R visitDefaultFormalParameter(DefaultFormalParameter node) => visitNode(node);
+ @override
R visitDoStatement(DoStatement node) => visitNode(node);
+ @override
R visitDoubleLiteral(DoubleLiteral node) => visitNode(node);
+ @override
R visitEmptyFunctionBody(EmptyFunctionBody node) => visitNode(node);
+ @override
R visitEmptyStatement(EmptyStatement node) => visitNode(node);
+ @override
R visitExportDirective(ExportDirective node) => visitNode(node);
+ @override
R visitExpressionFunctionBody(ExpressionFunctionBody node) => visitNode(node);
+ @override
R visitExpressionStatement(ExpressionStatement node) => visitNode(node);
+ @override
R visitExtendsClause(ExtendsClause node) => visitNode(node);
+ @override
R visitFieldDeclaration(FieldDeclaration node) => visitNode(node);
+ @override
R visitFieldFormalParameter(FieldFormalParameter node) => visitNode(node);
+ @override
R visitForEachStatement(ForEachStatement node) => visitNode(node);
+ @override
R visitFormalParameterList(FormalParameterList node) => visitNode(node);
+ @override
R visitForStatement(ForStatement node) => visitNode(node);
+ @override
R visitFunctionDeclaration(FunctionDeclaration node) => visitNode(node);
+ @override
R visitFunctionDeclarationStatement(FunctionDeclarationStatement node) => visitNode(node);
+ @override
R visitFunctionExpression(FunctionExpression node) => visitNode(node);
+ @override
R visitFunctionExpressionInvocation(FunctionExpressionInvocation node) => visitNode(node);
+ @override
R visitFunctionTypeAlias(FunctionTypeAlias node) => visitNode(node);
+ @override
R visitFunctionTypedFormalParameter(FunctionTypedFormalParameter node) => visitNode(node);
+ @override
R visitHideCombinator(HideCombinator node) => visitNode(node);
+ @override
R visitIfStatement(IfStatement node) => visitNode(node);
+ @override
R visitImplementsClause(ImplementsClause node) => visitNode(node);
+ @override
R visitImportDirective(ImportDirective node) => visitNode(node);
+ @override
R visitIndexExpression(IndexExpression node) => visitNode(node);
+ @override
R visitInstanceCreationExpression(InstanceCreationExpression node) => visitNode(node);
+ @override
R visitIntegerLiteral(IntegerLiteral node) => visitNode(node);
+ @override
R visitInterpolationExpression(InterpolationExpression node) => visitNode(node);
+ @override
R visitInterpolationString(InterpolationString node) => visitNode(node);
+ @override
R visitIsExpression(IsExpression node) => visitNode(node);
+ @override
R visitLabel(Label node) => visitNode(node);
+ @override
R visitLabeledStatement(LabeledStatement node) => visitNode(node);
+ @override
R visitLibraryDirective(LibraryDirective node) => visitNode(node);
+ @override
R visitLibraryIdentifier(LibraryIdentifier node) => visitNode(node);
+ @override
R visitListLiteral(ListLiteral node) => visitNode(node);
+ @override
R visitMapLiteral(MapLiteral node) => visitNode(node);
+ @override
R visitMapLiteralEntry(MapLiteralEntry node) => visitNode(node);
+ @override
R visitMethodDeclaration(MethodDeclaration node) => visitNode(node);
+ @override
R visitMethodInvocation(MethodInvocation node) => visitNode(node);
+ @override
R visitNamedExpression(NamedExpression node) => visitNode(node);
+ @override
R visitNativeClause(NativeClause node) => visitNode(node);
+ @override
R visitNativeFunctionBody(NativeFunctionBody node) => visitNode(node);
R visitNode(AstNode node) {
@@ -14445,76 +15485,112 @@
return null;
}
+ @override
R visitNullLiteral(NullLiteral node) => visitNode(node);
+ @override
R visitParenthesizedExpression(ParenthesizedExpression node) => visitNode(node);
+ @override
R visitPartDirective(PartDirective node) => visitNode(node);
+ @override
R visitPartOfDirective(PartOfDirective node) => visitNode(node);
+ @override
R visitPostfixExpression(PostfixExpression node) => visitNode(node);
+ @override
R visitPrefixedIdentifier(PrefixedIdentifier node) => visitNode(node);
+ @override
R visitPrefixExpression(PrefixExpression node) => visitNode(node);
+ @override
R visitPropertyAccess(PropertyAccess node) => visitNode(node);
+ @override
R visitRedirectingConstructorInvocation(RedirectingConstructorInvocation node) => visitNode(node);
+ @override
R visitRethrowExpression(RethrowExpression node) => visitNode(node);
+ @override
R visitReturnStatement(ReturnStatement node) => visitNode(node);
+ @override
R visitScriptTag(ScriptTag scriptTag) => visitNode(scriptTag);
+ @override
R visitShowCombinator(ShowCombinator node) => visitNode(node);
+ @override
R visitSimpleFormalParameter(SimpleFormalParameter node) => visitNode(node);
+ @override
R visitSimpleIdentifier(SimpleIdentifier node) => visitNode(node);
+ @override
R visitSimpleStringLiteral(SimpleStringLiteral node) => visitNode(node);
+ @override
R visitStringInterpolation(StringInterpolation node) => visitNode(node);
+ @override
R visitSuperConstructorInvocation(SuperConstructorInvocation node) => visitNode(node);
+ @override
R visitSuperExpression(SuperExpression node) => visitNode(node);
+ @override
R visitSwitchCase(SwitchCase node) => visitNode(node);
+ @override
R visitSwitchDefault(SwitchDefault node) => visitNode(node);
+ @override
R visitSwitchStatement(SwitchStatement node) => visitNode(node);
+ @override
R visitSymbolLiteral(SymbolLiteral node) => visitNode(node);
+ @override
R visitThisExpression(ThisExpression node) => visitNode(node);
+ @override
R visitThrowExpression(ThrowExpression node) => visitNode(node);
+ @override
R visitTopLevelVariableDeclaration(TopLevelVariableDeclaration node) => visitNode(node);
+ @override
R visitTryStatement(TryStatement node) => visitNode(node);
+ @override
R visitTypeArgumentList(TypeArgumentList node) => visitNode(node);
+ @override
R visitTypeName(TypeName node) => visitNode(node);
+ @override
R visitTypeParameter(TypeParameter node) => visitNode(node);
+ @override
R visitTypeParameterList(TypeParameterList node) => visitNode(node);
+ @override
R visitVariableDeclaration(VariableDeclaration node) => visitNode(node);
+ @override
R visitVariableDeclarationList(VariableDeclarationList node) => visitNode(node);
+ @override
R visitVariableDeclarationStatement(VariableDeclarationStatement node) => visitNode(node);
+ @override
R visitWhileStatement(WhileStatement node) => visitNode(node);
+ @override
R visitWithClause(WithClause node) => visitNode(node);
}
@@ -14524,248 +15600,351 @@
* results or properties associated with the nodes.
*/
class AstCloner implements AstVisitor<AstNode> {
- AdjacentStrings visitAdjacentStrings(AdjacentStrings node) => new AdjacentStrings(cloneNodeList(node.strings));
+ @override
+ AdjacentStrings visitAdjacentStrings(AdjacentStrings node) => new AdjacentStrings(_cloneNodeList(node.strings));
- Annotation visitAnnotation(Annotation node) => new Annotation(node.atSign, cloneNode(node.name), node.period, cloneNode(node.constructorName), cloneNode(node.arguments));
+ @override
+ Annotation visitAnnotation(Annotation node) => new Annotation(node.atSign, _cloneNode(node.name), node.period, _cloneNode(node.constructorName), _cloneNode(node.arguments));
- ArgumentDefinitionTest visitArgumentDefinitionTest(ArgumentDefinitionTest node) => new ArgumentDefinitionTest(node.question, cloneNode(node.identifier));
+ @override
+ ArgumentDefinitionTest visitArgumentDefinitionTest(ArgumentDefinitionTest node) => new ArgumentDefinitionTest(node.question, _cloneNode(node.identifier));
- ArgumentList visitArgumentList(ArgumentList node) => new ArgumentList(node.leftParenthesis, cloneNodeList(node.arguments), node.rightParenthesis);
+ @override
+ ArgumentList visitArgumentList(ArgumentList node) => new ArgumentList(node.leftParenthesis, _cloneNodeList(node.arguments), node.rightParenthesis);
- AsExpression visitAsExpression(AsExpression node) => new AsExpression(cloneNode(node.expression), node.asOperator, cloneNode(node.type));
+ @override
+ AsExpression visitAsExpression(AsExpression node) => new AsExpression(_cloneNode(node.expression), node.asOperator, _cloneNode(node.type));
- AstNode visitAssertStatement(AssertStatement node) => new AssertStatement(node.keyword, node.leftParenthesis, cloneNode(node.condition), node.rightParenthesis, node.semicolon);
+ @override
+ AstNode visitAssertStatement(AssertStatement node) => new AssertStatement(node.keyword, node.leftParenthesis, _cloneNode(node.condition), node.rightParenthesis, node.semicolon);
- AssignmentExpression visitAssignmentExpression(AssignmentExpression node) => new AssignmentExpression(cloneNode(node.leftHandSide), node.operator, cloneNode(node.rightHandSide));
+ @override
+ AssignmentExpression visitAssignmentExpression(AssignmentExpression node) => new AssignmentExpression(_cloneNode(node.leftHandSide), node.operator, _cloneNode(node.rightHandSide));
- BinaryExpression visitBinaryExpression(BinaryExpression node) => new BinaryExpression(cloneNode(node.leftOperand), node.operator, cloneNode(node.rightOperand));
+ @override
+ BinaryExpression visitBinaryExpression(BinaryExpression node) => new BinaryExpression(_cloneNode(node.leftOperand), node.operator, _cloneNode(node.rightOperand));
- Block visitBlock(Block node) => new Block(node.leftBracket, cloneNodeList(node.statements), node.rightBracket);
+ @override
+ Block visitBlock(Block node) => new Block(node.leftBracket, _cloneNodeList(node.statements), node.rightBracket);
- BlockFunctionBody visitBlockFunctionBody(BlockFunctionBody node) => new BlockFunctionBody(cloneNode(node.block));
+ @override
+ BlockFunctionBody visitBlockFunctionBody(BlockFunctionBody node) => new BlockFunctionBody(_cloneNode(node.block));
+ @override
BooleanLiteral visitBooleanLiteral(BooleanLiteral node) => new BooleanLiteral(node.literal, node.value);
- BreakStatement visitBreakStatement(BreakStatement node) => new BreakStatement(node.keyword, cloneNode(node.label), node.semicolon);
+ @override
+ BreakStatement visitBreakStatement(BreakStatement node) => new BreakStatement(node.keyword, _cloneNode(node.label), node.semicolon);
- CascadeExpression visitCascadeExpression(CascadeExpression node) => new CascadeExpression(cloneNode(node.target), cloneNodeList(node.cascadeSections));
+ @override
+ CascadeExpression visitCascadeExpression(CascadeExpression node) => new CascadeExpression(_cloneNode(node.target), _cloneNodeList(node.cascadeSections));
- CatchClause visitCatchClause(CatchClause node) => new CatchClause(node.onKeyword, cloneNode(node.exceptionType), node.catchKeyword, node.leftParenthesis, cloneNode(node.exceptionParameter), node.comma, cloneNode(node.stackTraceParameter), node.rightParenthesis, cloneNode(node.body));
+ @override
+ CatchClause visitCatchClause(CatchClause node) => new CatchClause(node.onKeyword, _cloneNode(node.exceptionType), node.catchKeyword, node.leftParenthesis, _cloneNode(node.exceptionParameter), node.comma, _cloneNode(node.stackTraceParameter), node.rightParenthesis, _cloneNode(node.body));
+ @override
ClassDeclaration visitClassDeclaration(ClassDeclaration node) {
- ClassDeclaration copy = new ClassDeclaration(cloneNode(node.documentationComment), cloneNodeList(node.metadata), node.abstractKeyword, node.classKeyword, cloneNode(node.name), cloneNode(node.typeParameters), cloneNode(node.extendsClause), cloneNode(node.withClause), cloneNode(node.implementsClause), node.leftBracket, cloneNodeList(node.members), node.rightBracket);
- copy.nativeClause = cloneNode(node.nativeClause);
+ ClassDeclaration copy = new ClassDeclaration(_cloneNode(node.documentationComment), _cloneNodeList(node.metadata), node.abstractKeyword, node.classKeyword, _cloneNode(node.name), _cloneNode(node.typeParameters), _cloneNode(node.extendsClause), _cloneNode(node.withClause), _cloneNode(node.implementsClause), node.leftBracket, _cloneNodeList(node.members), node.rightBracket);
+ copy.nativeClause = _cloneNode(node.nativeClause);
return copy;
}
- ClassTypeAlias visitClassTypeAlias(ClassTypeAlias node) => new ClassTypeAlias(cloneNode(node.documentationComment), cloneNodeList(node.metadata), node.keyword, cloneNode(node.name), cloneNode(node.typeParameters), node.equals, node.abstractKeyword, cloneNode(node.superclass), cloneNode(node.withClause), cloneNode(node.implementsClause), node.semicolon);
+ @override
+ ClassTypeAlias visitClassTypeAlias(ClassTypeAlias node) => new ClassTypeAlias(_cloneNode(node.documentationComment), _cloneNodeList(node.metadata), node.keyword, _cloneNode(node.name), _cloneNode(node.typeParameters), node.equals, node.abstractKeyword, _cloneNode(node.superclass), _cloneNode(node.withClause), _cloneNode(node.implementsClause), node.semicolon);
+ @override
Comment visitComment(Comment node) {
if (node.isDocumentation) {
- return Comment.createDocumentationCommentWithReferences(node.tokens, cloneNodeList(node.references));
+ return Comment.createDocumentationCommentWithReferences(node.tokens, _cloneNodeList(node.references));
} else if (node.isBlock) {
return Comment.createBlockComment(node.tokens);
}
return Comment.createEndOfLineComment(node.tokens);
}
- CommentReference visitCommentReference(CommentReference node) => new CommentReference(node.newKeyword, cloneNode(node.identifier));
+ @override
+ CommentReference visitCommentReference(CommentReference node) => new CommentReference(node.newKeyword, _cloneNode(node.identifier));
+ @override
CompilationUnit visitCompilationUnit(CompilationUnit node) {
- CompilationUnit clone = new CompilationUnit(node.beginToken, cloneNode(node.scriptTag), cloneNodeList(node.directives), cloneNodeList(node.declarations), node.endToken);
+ CompilationUnit clone = new CompilationUnit(node.beginToken, _cloneNode(node.scriptTag), _cloneNodeList(node.directives), _cloneNodeList(node.declarations), node.endToken);
clone.lineInfo = node.lineInfo;
return clone;
}
- ConditionalExpression visitConditionalExpression(ConditionalExpression node) => new ConditionalExpression(cloneNode(node.condition), node.question, cloneNode(node.thenExpression), node.colon, cloneNode(node.elseExpression));
+ @override
+ ConditionalExpression visitConditionalExpression(ConditionalExpression node) => new ConditionalExpression(_cloneNode(node.condition), node.question, _cloneNode(node.thenExpression), node.colon, _cloneNode(node.elseExpression));
- ConstructorDeclaration visitConstructorDeclaration(ConstructorDeclaration node) => new ConstructorDeclaration(cloneNode(node.documentationComment), cloneNodeList(node.metadata), node.externalKeyword, node.constKeyword, node.factoryKeyword, cloneNode(node.returnType), node.period, cloneNode(node.name), cloneNode(node.parameters), node.separator, cloneNodeList(node.initializers), cloneNode(node.redirectedConstructor), cloneNode(node.body));
+ @override
+ ConstructorDeclaration visitConstructorDeclaration(ConstructorDeclaration node) => new ConstructorDeclaration(_cloneNode(node.documentationComment), _cloneNodeList(node.metadata), node.externalKeyword, node.constKeyword, node.factoryKeyword, _cloneNode(node.returnType), node.period, _cloneNode(node.name), _cloneNode(node.parameters), node.separator, _cloneNodeList(node.initializers), _cloneNode(node.redirectedConstructor), _cloneNode(node.body));
- ConstructorFieldInitializer visitConstructorFieldInitializer(ConstructorFieldInitializer node) => new ConstructorFieldInitializer(node.keyword, node.period, cloneNode(node.fieldName), node.equals, cloneNode(node.expression));
+ @override
+ ConstructorFieldInitializer visitConstructorFieldInitializer(ConstructorFieldInitializer node) => new ConstructorFieldInitializer(node.keyword, node.period, _cloneNode(node.fieldName), node.equals, _cloneNode(node.expression));
- ConstructorName visitConstructorName(ConstructorName node) => new ConstructorName(cloneNode(node.type), node.period, cloneNode(node.name));
+ @override
+ ConstructorName visitConstructorName(ConstructorName node) => new ConstructorName(_cloneNode(node.type), node.period, _cloneNode(node.name));
- ContinueStatement visitContinueStatement(ContinueStatement node) => new ContinueStatement(node.keyword, cloneNode(node.label), node.semicolon);
+ @override
+ ContinueStatement visitContinueStatement(ContinueStatement node) => new ContinueStatement(node.keyword, _cloneNode(node.label), node.semicolon);
- DeclaredIdentifier visitDeclaredIdentifier(DeclaredIdentifier node) => new DeclaredIdentifier(cloneNode(node.documentationComment), cloneNodeList(node.metadata), node.keyword, cloneNode(node.type), cloneNode(node.identifier));
+ @override
+ DeclaredIdentifier visitDeclaredIdentifier(DeclaredIdentifier node) => new DeclaredIdentifier(_cloneNode(node.documentationComment), _cloneNodeList(node.metadata), node.keyword, _cloneNode(node.type), _cloneNode(node.identifier));
- DefaultFormalParameter visitDefaultFormalParameter(DefaultFormalParameter node) => new DefaultFormalParameter(cloneNode(node.parameter), node.kind, node.separator, cloneNode(node.defaultValue));
+ @override
+ DefaultFormalParameter visitDefaultFormalParameter(DefaultFormalParameter node) => new DefaultFormalParameter(_cloneNode(node.parameter), node.kind, node.separator, _cloneNode(node.defaultValue));
- DoStatement visitDoStatement(DoStatement node) => new DoStatement(node.doKeyword, cloneNode(node.body), node.whileKeyword, node.leftParenthesis, cloneNode(node.condition), node.rightParenthesis, node.semicolon);
+ @override
+ DoStatement visitDoStatement(DoStatement node) => new DoStatement(node.doKeyword, _cloneNode(node.body), node.whileKeyword, node.leftParenthesis, _cloneNode(node.condition), node.rightParenthesis, node.semicolon);
+ @override
DoubleLiteral visitDoubleLiteral(DoubleLiteral node) => new DoubleLiteral(node.literal, node.value);
+ @override
EmptyFunctionBody visitEmptyFunctionBody(EmptyFunctionBody node) => new EmptyFunctionBody(node.semicolon);
+ @override
EmptyStatement visitEmptyStatement(EmptyStatement node) => new EmptyStatement(node.semicolon);
- ExportDirective visitExportDirective(ExportDirective node) => new ExportDirective(cloneNode(node.documentationComment), cloneNodeList(node.metadata), node.keyword, cloneNode(node.uri), cloneNodeList(node.combinators), node.semicolon);
+ @override
+ ExportDirective visitExportDirective(ExportDirective node) => new ExportDirective(_cloneNode(node.documentationComment), _cloneNodeList(node.metadata), node.keyword, _cloneNode(node.uri), _cloneNodeList(node.combinators), node.semicolon);
- ExpressionFunctionBody visitExpressionFunctionBody(ExpressionFunctionBody node) => new ExpressionFunctionBody(node.functionDefinition, cloneNode(node.expression), node.semicolon);
+ @override
+ ExpressionFunctionBody visitExpressionFunctionBody(ExpressionFunctionBody node) => new ExpressionFunctionBody(node.functionDefinition, _cloneNode(node.expression), node.semicolon);
- ExpressionStatement visitExpressionStatement(ExpressionStatement node) => new ExpressionStatement(cloneNode(node.expression), node.semicolon);
+ @override
+ ExpressionStatement visitExpressionStatement(ExpressionStatement node) => new ExpressionStatement(_cloneNode(node.expression), node.semicolon);
- ExtendsClause visitExtendsClause(ExtendsClause node) => new ExtendsClause(node.keyword, cloneNode(node.superclass));
+ @override
+ ExtendsClause visitExtendsClause(ExtendsClause node) => new ExtendsClause(node.keyword, _cloneNode(node.superclass));
- FieldDeclaration visitFieldDeclaration(FieldDeclaration node) => new FieldDeclaration(cloneNode(node.documentationComment), cloneNodeList(node.metadata), node.staticKeyword, cloneNode(node.fields), node.semicolon);
+ @override
+ FieldDeclaration visitFieldDeclaration(FieldDeclaration node) => new FieldDeclaration(_cloneNode(node.documentationComment), _cloneNodeList(node.metadata), node.staticKeyword, _cloneNode(node.fields), node.semicolon);
- FieldFormalParameter visitFieldFormalParameter(FieldFormalParameter node) => new FieldFormalParameter(cloneNode(node.documentationComment), cloneNodeList(node.metadata), node.keyword, cloneNode(node.type), node.thisToken, node.period, cloneNode(node.identifier), cloneNode(node.parameters));
+ @override
+ FieldFormalParameter visitFieldFormalParameter(FieldFormalParameter node) => new FieldFormalParameter(_cloneNode(node.documentationComment), _cloneNodeList(node.metadata), node.keyword, _cloneNode(node.type), node.thisToken, node.period, _cloneNode(node.identifier), _cloneNode(node.parameters));
+ @override
ForEachStatement visitForEachStatement(ForEachStatement node) {
DeclaredIdentifier loopVariable = node.loopVariable;
if (loopVariable == null) {
- return new ForEachStatement.con2(node.forKeyword, node.leftParenthesis, cloneNode(node.identifier), node.inKeyword, cloneNode(node.iterator), node.rightParenthesis, cloneNode(node.body));
+ return new ForEachStatement.con2(node.forKeyword, node.leftParenthesis, _cloneNode(node.identifier), node.inKeyword, _cloneNode(node.iterator), node.rightParenthesis, _cloneNode(node.body));
}
- return new ForEachStatement.con1(node.forKeyword, node.leftParenthesis, cloneNode(loopVariable), node.inKeyword, cloneNode(node.iterator), node.rightParenthesis, cloneNode(node.body));
+ return new ForEachStatement.con1(node.forKeyword, node.leftParenthesis, _cloneNode(loopVariable), node.inKeyword, _cloneNode(node.iterator), node.rightParenthesis, _cloneNode(node.body));
}
- FormalParameterList visitFormalParameterList(FormalParameterList node) => new FormalParameterList(node.leftParenthesis, cloneNodeList(node.parameters), node.leftDelimiter, node.rightDelimiter, node.rightParenthesis);
+ @override
+ FormalParameterList visitFormalParameterList(FormalParameterList node) => new FormalParameterList(node.leftParenthesis, _cloneNodeList(node.parameters), node.leftDelimiter, node.rightDelimiter, node.rightParenthesis);
- ForStatement visitForStatement(ForStatement node) => new ForStatement(node.forKeyword, node.leftParenthesis, cloneNode(node.variables), cloneNode(node.initialization), node.leftSeparator, cloneNode(node.condition), node.rightSeparator, cloneNodeList(node.updaters), node.rightParenthesis, cloneNode(node.body));
+ @override
+ ForStatement visitForStatement(ForStatement node) => new ForStatement(node.forKeyword, node.leftParenthesis, _cloneNode(node.variables), _cloneNode(node.initialization), node.leftSeparator, _cloneNode(node.condition), node.rightSeparator, _cloneNodeList(node.updaters), node.rightParenthesis, _cloneNode(node.body));
- FunctionDeclaration visitFunctionDeclaration(FunctionDeclaration node) => new FunctionDeclaration(cloneNode(node.documentationComment), cloneNodeList(node.metadata), node.externalKeyword, cloneNode(node.returnType), node.propertyKeyword, cloneNode(node.name), cloneNode(node.functionExpression));
+ @override
+ FunctionDeclaration visitFunctionDeclaration(FunctionDeclaration node) => new FunctionDeclaration(_cloneNode(node.documentationComment), _cloneNodeList(node.metadata), node.externalKeyword, _cloneNode(node.returnType), node.propertyKeyword, _cloneNode(node.name), _cloneNode(node.functionExpression));
- FunctionDeclarationStatement visitFunctionDeclarationStatement(FunctionDeclarationStatement node) => new FunctionDeclarationStatement(cloneNode(node.functionDeclaration));
+ @override
+ FunctionDeclarationStatement visitFunctionDeclarationStatement(FunctionDeclarationStatement node) => new FunctionDeclarationStatement(_cloneNode(node.functionDeclaration));
- FunctionExpression visitFunctionExpression(FunctionExpression node) => new FunctionExpression(cloneNode(node.parameters), cloneNode(node.body));
+ @override
+ FunctionExpression visitFunctionExpression(FunctionExpression node) => new FunctionExpression(_cloneNode(node.parameters), _cloneNode(node.body));
- FunctionExpressionInvocation visitFunctionExpressionInvocation(FunctionExpressionInvocation node) => new FunctionExpressionInvocation(cloneNode(node.function), cloneNode(node.argumentList));
+ @override
+ FunctionExpressionInvocation visitFunctionExpressionInvocation(FunctionExpressionInvocation node) => new FunctionExpressionInvocation(_cloneNode(node.function), _cloneNode(node.argumentList));
- FunctionTypeAlias visitFunctionTypeAlias(FunctionTypeAlias node) => new FunctionTypeAlias(cloneNode(node.documentationComment), cloneNodeList(node.metadata), node.keyword, cloneNode(node.returnType), cloneNode(node.name), cloneNode(node.typeParameters), cloneNode(node.parameters), node.semicolon);
+ @override
+ FunctionTypeAlias visitFunctionTypeAlias(FunctionTypeAlias node) => new FunctionTypeAlias(_cloneNode(node.documentationComment), _cloneNodeList(node.metadata), node.keyword, _cloneNode(node.returnType), _cloneNode(node.name), _cloneNode(node.typeParameters), _cloneNode(node.parameters), node.semicolon);
- FunctionTypedFormalParameter visitFunctionTypedFormalParameter(FunctionTypedFormalParameter node) => new FunctionTypedFormalParameter(cloneNode(node.documentationComment), cloneNodeList(node.metadata), cloneNode(node.returnType), cloneNode(node.identifier), cloneNode(node.parameters));
+ @override
+ FunctionTypedFormalParameter visitFunctionTypedFormalParameter(FunctionTypedFormalParameter node) => new FunctionTypedFormalParameter(_cloneNode(node.documentationComment), _cloneNodeList(node.metadata), _cloneNode(node.returnType), _cloneNode(node.identifier), _cloneNode(node.parameters));
- HideCombinator visitHideCombinator(HideCombinator node) => new HideCombinator(node.keyword, cloneNodeList(node.hiddenNames));
+ @override
+ HideCombinator visitHideCombinator(HideCombinator node) => new HideCombinator(node.keyword, _cloneNodeList(node.hiddenNames));
- IfStatement visitIfStatement(IfStatement node) => new IfStatement(node.ifKeyword, node.leftParenthesis, cloneNode(node.condition), node.rightParenthesis, cloneNode(node.thenStatement), node.elseKeyword, cloneNode(node.elseStatement));
+ @override
+ IfStatement visitIfStatement(IfStatement node) => new IfStatement(node.ifKeyword, node.leftParenthesis, _cloneNode(node.condition), node.rightParenthesis, _cloneNode(node.thenStatement), node.elseKeyword, _cloneNode(node.elseStatement));
- ImplementsClause visitImplementsClause(ImplementsClause node) => new ImplementsClause(node.keyword, cloneNodeList(node.interfaces));
+ @override
+ ImplementsClause visitImplementsClause(ImplementsClause node) => new ImplementsClause(node.keyword, _cloneNodeList(node.interfaces));
- ImportDirective visitImportDirective(ImportDirective node) => new ImportDirective(cloneNode(node.documentationComment), cloneNodeList(node.metadata), node.keyword, cloneNode(node.uri), node.asToken, cloneNode(node.prefix), cloneNodeList(node.combinators), node.semicolon);
+ @override
+ ImportDirective visitImportDirective(ImportDirective node) => new ImportDirective(_cloneNode(node.documentationComment), _cloneNodeList(node.metadata), node.keyword, _cloneNode(node.uri), node.asToken, _cloneNode(node.prefix), _cloneNodeList(node.combinators), node.semicolon);
+ @override
IndexExpression visitIndexExpression(IndexExpression node) {
Token period = node.period;
if (period == null) {
- return new IndexExpression.forTarget(cloneNode(node.target), node.leftBracket, cloneNode(node.index), node.rightBracket);
+ return new IndexExpression.forTarget(_cloneNode(node.target), node.leftBracket, _cloneNode(node.index), node.rightBracket);
} else {
- return new IndexExpression.forCascade(period, node.leftBracket, cloneNode(node.index), node.rightBracket);
+ return new IndexExpression.forCascade(period, node.leftBracket, _cloneNode(node.index), node.rightBracket);
}
}
- InstanceCreationExpression visitInstanceCreationExpression(InstanceCreationExpression node) => new InstanceCreationExpression(node.keyword, cloneNode(node.constructorName), cloneNode(node.argumentList));
+ @override
+ InstanceCreationExpression visitInstanceCreationExpression(InstanceCreationExpression node) => new InstanceCreationExpression(node.keyword, _cloneNode(node.constructorName), _cloneNode(node.argumentList));
+ @override
IntegerLiteral visitIntegerLiteral(IntegerLiteral node) => new IntegerLiteral(node.literal, node.value);
- InterpolationExpression visitInterpolationExpression(InterpolationExpression node) => new InterpolationExpression(node.leftBracket, cloneNode(node.expression), node.rightBracket);
+ @override
+ InterpolationExpression visitInterpolationExpression(InterpolationExpression node) => new InterpolationExpression(node.leftBracket, _cloneNode(node.expression), node.rightBracket);
+ @override
InterpolationString visitInterpolationString(InterpolationString node) => new InterpolationString(node.contents, node.value);
- IsExpression visitIsExpression(IsExpression node) => new IsExpression(cloneNode(node.expression), node.isOperator, node.notOperator, cloneNode(node.type));
+ @override
+ IsExpression visitIsExpression(IsExpression node) => new IsExpression(_cloneNode(node.expression), node.isOperator, node.notOperator, _cloneNode(node.type));
- Label visitLabel(Label node) => new Label(cloneNode(node.label), node.colon);
+ @override
+ Label visitLabel(Label node) => new Label(_cloneNode(node.label), node.colon);
- LabeledStatement visitLabeledStatement(LabeledStatement node) => new LabeledStatement(cloneNodeList(node.labels), cloneNode(node.statement));
+ @override
+ LabeledStatement visitLabeledStatement(LabeledStatement node) => new LabeledStatement(_cloneNodeList(node.labels), _cloneNode(node.statement));
- LibraryDirective visitLibraryDirective(LibraryDirective node) => new LibraryDirective(cloneNode(node.documentationComment), cloneNodeList(node.metadata), node.libraryToken, cloneNode(node.name), node.semicolon);
+ @override
+ LibraryDirective visitLibraryDirective(LibraryDirective node) => new LibraryDirective(_cloneNode(node.documentationComment), _cloneNodeList(node.metadata), node.libraryToken, _cloneNode(node.name), node.semicolon);
- LibraryIdentifier visitLibraryIdentifier(LibraryIdentifier node) => new LibraryIdentifier(cloneNodeList(node.components));
+ @override
+ LibraryIdentifier visitLibraryIdentifier(LibraryIdentifier node) => new LibraryIdentifier(_cloneNodeList(node.components));
- ListLiteral visitListLiteral(ListLiteral node) => new ListLiteral(node.constKeyword, cloneNode(node.typeArguments), node.leftBracket, cloneNodeList(node.elements), node.rightBracket);
+ @override
+ ListLiteral visitListLiteral(ListLiteral node) => new ListLiteral(node.constKeyword, _cloneNode(node.typeArguments), node.leftBracket, _cloneNodeList(node.elements), node.rightBracket);
- MapLiteral visitMapLiteral(MapLiteral node) => new MapLiteral(node.constKeyword, cloneNode(node.typeArguments), node.leftBracket, cloneNodeList(node.entries), node.rightBracket);
+ @override
+ MapLiteral visitMapLiteral(MapLiteral node) => new MapLiteral(node.constKeyword, _cloneNode(node.typeArguments), node.leftBracket, _cloneNodeList(node.entries), node.rightBracket);
- MapLiteralEntry visitMapLiteralEntry(MapLiteralEntry node) => new MapLiteralEntry(cloneNode(node.key), node.separator, cloneNode(node.value));
+ @override
+ MapLiteralEntry visitMapLiteralEntry(MapLiteralEntry node) => new MapLiteralEntry(_cloneNode(node.key), node.separator, _cloneNode(node.value));
- MethodDeclaration visitMethodDeclaration(MethodDeclaration node) => new MethodDeclaration(cloneNode(node.documentationComment), cloneNodeList(node.metadata), node.externalKeyword, node.modifierKeyword, cloneNode(node.returnType), node.propertyKeyword, node.operatorKeyword, cloneNode(node.name), cloneNode(node.parameters), cloneNode(node.body));
+ @override
+ MethodDeclaration visitMethodDeclaration(MethodDeclaration node) => new MethodDeclaration(_cloneNode(node.documentationComment), _cloneNodeList(node.metadata), node.externalKeyword, node.modifierKeyword, _cloneNode(node.returnType), node.propertyKeyword, node.operatorKeyword, _cloneNode(node.name), _cloneNode(node.parameters), _cloneNode(node.body));
- MethodInvocation visitMethodInvocation(MethodInvocation node) => new MethodInvocation(cloneNode(node.target), node.period, cloneNode(node.methodName), cloneNode(node.argumentList));
+ @override
+ MethodInvocation visitMethodInvocation(MethodInvocation node) => new MethodInvocation(_cloneNode(node.target), node.period, _cloneNode(node.methodName), _cloneNode(node.argumentList));
- NamedExpression visitNamedExpression(NamedExpression node) => new NamedExpression(cloneNode(node.name), cloneNode(node.expression));
+ @override
+ NamedExpression visitNamedExpression(NamedExpression node) => new NamedExpression(_cloneNode(node.name), _cloneNode(node.expression));
- AstNode visitNativeClause(NativeClause node) => new NativeClause(node.keyword, cloneNode(node.name));
+ @override
+ AstNode visitNativeClause(NativeClause node) => new NativeClause(node.keyword, _cloneNode(node.name));
- NativeFunctionBody visitNativeFunctionBody(NativeFunctionBody node) => new NativeFunctionBody(node.nativeToken, cloneNode(node.stringLiteral), node.semicolon);
+ @override
+ NativeFunctionBody visitNativeFunctionBody(NativeFunctionBody node) => new NativeFunctionBody(node.nativeToken, _cloneNode(node.stringLiteral), node.semicolon);
+ @override
NullLiteral visitNullLiteral(NullLiteral node) => new NullLiteral(node.literal);
- ParenthesizedExpression visitParenthesizedExpression(ParenthesizedExpression node) => new ParenthesizedExpression(node.leftParenthesis, cloneNode(node.expression), node.rightParenthesis);
+ @override
+ ParenthesizedExpression visitParenthesizedExpression(ParenthesizedExpression node) => new ParenthesizedExpression(node.leftParenthesis, _cloneNode(node.expression), node.rightParenthesis);
- PartDirective visitPartDirective(PartDirective node) => new PartDirective(cloneNode(node.documentationComment), cloneNodeList(node.metadata), node.partToken, cloneNode(node.uri), node.semicolon);
+ @override
+ PartDirective visitPartDirective(PartDirective node) => new PartDirective(_cloneNode(node.documentationComment), _cloneNodeList(node.metadata), node.partToken, _cloneNode(node.uri), node.semicolon);
- PartOfDirective visitPartOfDirective(PartOfDirective node) => new PartOfDirective(cloneNode(node.documentationComment), cloneNodeList(node.metadata), node.partToken, node.ofToken, cloneNode(node.libraryName), node.semicolon);
+ @override
+ PartOfDirective visitPartOfDirective(PartOfDirective node) => new PartOfDirective(_cloneNode(node.documentationComment), _cloneNodeList(node.metadata), node.partToken, node.ofToken, _cloneNode(node.libraryName), node.semicolon);
- PostfixExpression visitPostfixExpression(PostfixExpression node) => new PostfixExpression(cloneNode(node.operand), node.operator);
+ @override
+ PostfixExpression visitPostfixExpression(PostfixExpression node) => new PostfixExpression(_cloneNode(node.operand), node.operator);
- PrefixedIdentifier visitPrefixedIdentifier(PrefixedIdentifier node) => new PrefixedIdentifier(cloneNode(node.prefix), node.period, cloneNode(node.identifier));
+ @override
+ PrefixedIdentifier visitPrefixedIdentifier(PrefixedIdentifier node) => new PrefixedIdentifier(_cloneNode(node.prefix), node.period, _cloneNode(node.identifier));
- PrefixExpression visitPrefixExpression(PrefixExpression node) => new PrefixExpression(node.operator, cloneNode(node.operand));
+ @override
+ PrefixExpression visitPrefixExpression(PrefixExpression node) => new PrefixExpression(node.operator, _cloneNode(node.operand));
- PropertyAccess visitPropertyAccess(PropertyAccess node) => new PropertyAccess(cloneNode(node.target), node.operator, cloneNode(node.propertyName));
+ @override
+ PropertyAccess visitPropertyAccess(PropertyAccess node) => new PropertyAccess(_cloneNode(node.target), node.operator, _cloneNode(node.propertyName));
- RedirectingConstructorInvocation visitRedirectingConstructorInvocation(RedirectingConstructorInvocation node) => new RedirectingConstructorInvocation(node.keyword, node.period, cloneNode(node.constructorName), cloneNode(node.argumentList));
+ @override
+ RedirectingConstructorInvocation visitRedirectingConstructorInvocation(RedirectingConstructorInvocation node) => new RedirectingConstructorInvocation(node.keyword, node.period, _cloneNode(node.constructorName), _cloneNode(node.argumentList));
+ @override
RethrowExpression visitRethrowExpression(RethrowExpression node) => new RethrowExpression(node.keyword);
- ReturnStatement visitReturnStatement(ReturnStatement node) => new ReturnStatement(node.keyword, cloneNode(node.expression), node.semicolon);
+ @override
+ ReturnStatement visitReturnStatement(ReturnStatement node) => new ReturnStatement(node.keyword, _cloneNode(node.expression), node.semicolon);
+ @override
ScriptTag visitScriptTag(ScriptTag node) => new ScriptTag(node.scriptTag);
- ShowCombinator visitShowCombinator(ShowCombinator node) => new ShowCombinator(node.keyword, cloneNodeList(node.shownNames));
+ @override
+ ShowCombinator visitShowCombinator(ShowCombinator node) => new ShowCombinator(node.keyword, _cloneNodeList(node.shownNames));
- SimpleFormalParameter visitSimpleFormalParameter(SimpleFormalParameter node) => new SimpleFormalParameter(cloneNode(node.documentationComment), cloneNodeList(node.metadata), node.keyword, cloneNode(node.type), cloneNode(node.identifier));
+ @override
+ SimpleFormalParameter visitSimpleFormalParameter(SimpleFormalParameter node) => new SimpleFormalParameter(_cloneNode(node.documentationComment), _cloneNodeList(node.metadata), node.keyword, _cloneNode(node.type), _cloneNode(node.identifier));
+ @override
SimpleIdentifier visitSimpleIdentifier(SimpleIdentifier node) => new SimpleIdentifier(node.token);
+ @override
SimpleStringLiteral visitSimpleStringLiteral(SimpleStringLiteral node) => new SimpleStringLiteral(node.literal, node.value);
- StringInterpolation visitStringInterpolation(StringInterpolation node) => new StringInterpolation(cloneNodeList(node.elements));
+ @override
+ StringInterpolation visitStringInterpolation(StringInterpolation node) => new StringInterpolation(_cloneNodeList(node.elements));
- SuperConstructorInvocation visitSuperConstructorInvocation(SuperConstructorInvocation node) => new SuperConstructorInvocation(node.keyword, node.period, cloneNode(node.constructorName), cloneNode(node.argumentList));
+ @override
+ SuperConstructorInvocation visitSuperConstructorInvocation(SuperConstructorInvocation node) => new SuperConstructorInvocation(node.keyword, node.period, _cloneNode(node.constructorName), _cloneNode(node.argumentList));
+ @override
SuperExpression visitSuperExpression(SuperExpression node) => new SuperExpression(node.keyword);
- SwitchCase visitSwitchCase(SwitchCase node) => new SwitchCase(cloneNodeList(node.labels), node.keyword, cloneNode(node.expression), node.colon, cloneNodeList(node.statements));
+ @override
+ SwitchCase visitSwitchCase(SwitchCase node) => new SwitchCase(_cloneNodeList(node.labels), node.keyword, _cloneNode(node.expression), node.colon, _cloneNodeList(node.statements));
- SwitchDefault visitSwitchDefault(SwitchDefault node) => new SwitchDefault(cloneNodeList(node.labels), node.keyword, node.colon, cloneNodeList(node.statements));
+ @override
+ SwitchDefault visitSwitchDefault(SwitchDefault node) => new SwitchDefault(_cloneNodeList(node.labels), node.keyword, node.colon, _cloneNodeList(node.statements));
- SwitchStatement visitSwitchStatement(SwitchStatement node) => new SwitchStatement(node.keyword, node.leftParenthesis, cloneNode(node.expression), node.rightParenthesis, node.leftBracket, cloneNodeList(node.members), node.rightBracket);
+ @override
+ SwitchStatement visitSwitchStatement(SwitchStatement node) => new SwitchStatement(node.keyword, node.leftParenthesis, _cloneNode(node.expression), node.rightParenthesis, node.leftBracket, _cloneNodeList(node.members), node.rightBracket);
+ @override
AstNode visitSymbolLiteral(SymbolLiteral node) => new SymbolLiteral(node.poundSign, node.components);
+ @override
ThisExpression visitThisExpression(ThisExpression node) => new ThisExpression(node.keyword);
- ThrowExpression visitThrowExpression(ThrowExpression node) => new ThrowExpression(node.keyword, cloneNode(node.expression));
+ @override
+ ThrowExpression visitThrowExpression(ThrowExpression node) => new ThrowExpression(node.keyword, _cloneNode(node.expression));
- TopLevelVariableDeclaration visitTopLevelVariableDeclaration(TopLevelVariableDeclaration node) => new TopLevelVariableDeclaration(cloneNode(node.documentationComment), cloneNodeList(node.metadata), cloneNode(node.variables), node.semicolon);
+ @override
+ TopLevelVariableDeclaration visitTopLevelVariableDeclaration(TopLevelVariableDeclaration node) => new TopLevelVariableDeclaration(_cloneNode(node.documentationComment), _cloneNodeList(node.metadata), _cloneNode(node.variables), node.semicolon);
- TryStatement visitTryStatement(TryStatement node) => new TryStatement(node.tryKeyword, cloneNode(node.body), cloneNodeList(node.catchClauses), node.finallyKeyword, cloneNode(node.finallyBlock));
+ @override
+ TryStatement visitTryStatement(TryStatement node) => new TryStatement(node.tryKeyword, _cloneNode(node.body), _cloneNodeList(node.catchClauses), node.finallyKeyword, _cloneNode(node.finallyBlock));
- TypeArgumentList visitTypeArgumentList(TypeArgumentList node) => new TypeArgumentList(node.leftBracket, cloneNodeList(node.arguments), node.rightBracket);
+ @override
+ TypeArgumentList visitTypeArgumentList(TypeArgumentList node) => new TypeArgumentList(node.leftBracket, _cloneNodeList(node.arguments), node.rightBracket);
- TypeName visitTypeName(TypeName node) => new TypeName(cloneNode(node.name), cloneNode(node.typeArguments));
+ @override
+ TypeName visitTypeName(TypeName node) => new TypeName(_cloneNode(node.name), _cloneNode(node.typeArguments));
- TypeParameter visitTypeParameter(TypeParameter node) => new TypeParameter(cloneNode(node.documentationComment), cloneNodeList(node.metadata), cloneNode(node.name), node.keyword, cloneNode(node.bound));
+ @override
+ TypeParameter visitTypeParameter(TypeParameter node) => new TypeParameter(_cloneNode(node.documentationComment), _cloneNodeList(node.metadata), _cloneNode(node.name), node.keyword, _cloneNode(node.bound));
- TypeParameterList visitTypeParameterList(TypeParameterList node) => new TypeParameterList(node.leftBracket, cloneNodeList(node.typeParameters), node.rightBracket);
+ @override
+ TypeParameterList visitTypeParameterList(TypeParameterList node) => new TypeParameterList(node.leftBracket, _cloneNodeList(node.typeParameters), node.rightBracket);
- VariableDeclaration visitVariableDeclaration(VariableDeclaration node) => new VariableDeclaration(null, cloneNodeList(node.metadata), cloneNode(node.name), node.equals, cloneNode(node.initializer));
+ @override
+ VariableDeclaration visitVariableDeclaration(VariableDeclaration node) => new VariableDeclaration(null, _cloneNodeList(node.metadata), _cloneNode(node.name), node.equals, _cloneNode(node.initializer));
- VariableDeclarationList visitVariableDeclarationList(VariableDeclarationList node) => new VariableDeclarationList(null, cloneNodeList(node.metadata), node.keyword, cloneNode(node.type), cloneNodeList(node.variables));
+ @override
+ VariableDeclarationList visitVariableDeclarationList(VariableDeclarationList node) => new VariableDeclarationList(null, _cloneNodeList(node.metadata), node.keyword, _cloneNode(node.type), _cloneNodeList(node.variables));
- VariableDeclarationStatement visitVariableDeclarationStatement(VariableDeclarationStatement node) => new VariableDeclarationStatement(cloneNode(node.variables), node.semicolon);
+ @override
+ VariableDeclarationStatement visitVariableDeclarationStatement(VariableDeclarationStatement node) => new VariableDeclarationStatement(_cloneNode(node.variables), node.semicolon);
- WhileStatement visitWhileStatement(WhileStatement node) => new WhileStatement(node.keyword, node.leftParenthesis, cloneNode(node.condition), node.rightParenthesis, cloneNode(node.body));
+ @override
+ WhileStatement visitWhileStatement(WhileStatement node) => new WhileStatement(node.keyword, node.leftParenthesis, _cloneNode(node.condition), node.rightParenthesis, _cloneNode(node.body));
- WithClause visitWithClause(WithClause node) => new WithClause(node.withKeyword, cloneNodeList(node.mixinTypes));
+ @override
+ WithClause visitWithClause(WithClause node) => new WithClause(node.withKeyword, _cloneNodeList(node.mixinTypes));
- AstNode cloneNode(AstNode node) {
+ AstNode _cloneNode(AstNode node) {
if (node == null) {
return null;
}
return node.accept(this) as AstNode;
}
- List cloneNodeList(NodeList nodes) {
+ List _cloneNodeList(NodeList nodes) {
int count = nodes.length;
List clonedNodes = new List();
for (int i = 0; i < count; i++) {
@@ -14789,7 +15968,7 @@
*/
static bool equalUnits(CompilationUnit first, CompilationUnit second) {
AstComparator comparator = new AstComparator();
- return comparator.isEqualNodes(first, second);
+ return comparator._isEqualNodes(first, second);
}
/**
@@ -14798,519 +15977,622 @@
*/
AstNode _other;
+ @override
bool visitAdjacentStrings(AdjacentStrings node) {
AdjacentStrings other = this._other as AdjacentStrings;
- return isEqualNodeLists(node.strings, other.strings);
+ return _isEqualNodeLists(node.strings, other.strings);
}
+ @override
bool visitAnnotation(Annotation node) {
Annotation other = this._other as Annotation;
- return isEqualTokens(node.atSign, other.atSign) && isEqualNodes(node.name, other.name) && isEqualTokens(node.period, other.period) && isEqualNodes(node.constructorName, other.constructorName) && isEqualNodes(node.arguments, other.arguments);
+ return _isEqualTokens(node.atSign, other.atSign) && _isEqualNodes(node.name, other.name) && _isEqualTokens(node.period, other.period) && _isEqualNodes(node.constructorName, other.constructorName) && _isEqualNodes(node.arguments, other.arguments);
}
+ @override
bool visitArgumentDefinitionTest(ArgumentDefinitionTest node) {
ArgumentDefinitionTest other = this._other as ArgumentDefinitionTest;
- return isEqualTokens(node.question, other.question) && isEqualNodes(node.identifier, other.identifier);
+ return _isEqualTokens(node.question, other.question) && _isEqualNodes(node.identifier, other.identifier);
}
+ @override
bool visitArgumentList(ArgumentList node) {
ArgumentList other = this._other as ArgumentList;
- return isEqualTokens(node.leftParenthesis, other.leftParenthesis) && isEqualNodeLists(node.arguments, other.arguments) && isEqualTokens(node.rightParenthesis, other.rightParenthesis);
+ return _isEqualTokens(node.leftParenthesis, other.leftParenthesis) && _isEqualNodeLists(node.arguments, other.arguments) && _isEqualTokens(node.rightParenthesis, other.rightParenthesis);
}
+ @override
bool visitAsExpression(AsExpression node) {
AsExpression other = this._other as AsExpression;
- return isEqualNodes(node.expression, other.expression) && isEqualTokens(node.asOperator, other.asOperator) && isEqualNodes(node.type, other.type);
+ return _isEqualNodes(node.expression, other.expression) && _isEqualTokens(node.asOperator, other.asOperator) && _isEqualNodes(node.type, other.type);
}
+ @override
bool visitAssertStatement(AssertStatement node) {
AssertStatement other = this._other as AssertStatement;
- return isEqualTokens(node.keyword, other.keyword) && isEqualTokens(node.leftParenthesis, other.leftParenthesis) && isEqualNodes(node.condition, other.condition) && isEqualTokens(node.rightParenthesis, other.rightParenthesis) && isEqualTokens(node.semicolon, other.semicolon);
+ return _isEqualTokens(node.keyword, other.keyword) && _isEqualTokens(node.leftParenthesis, other.leftParenthesis) && _isEqualNodes(node.condition, other.condition) && _isEqualTokens(node.rightParenthesis, other.rightParenthesis) && _isEqualTokens(node.semicolon, other.semicolon);
}
+ @override
bool visitAssignmentExpression(AssignmentExpression node) {
AssignmentExpression other = this._other as AssignmentExpression;
- return isEqualNodes(node.leftHandSide, other.leftHandSide) && isEqualTokens(node.operator, other.operator) && isEqualNodes(node.rightHandSide, other.rightHandSide);
+ return _isEqualNodes(node.leftHandSide, other.leftHandSide) && _isEqualTokens(node.operator, other.operator) && _isEqualNodes(node.rightHandSide, other.rightHandSide);
}
+ @override
bool visitBinaryExpression(BinaryExpression node) {
BinaryExpression other = this._other as BinaryExpression;
- return isEqualNodes(node.leftOperand, other.leftOperand) && isEqualTokens(node.operator, other.operator) && isEqualNodes(node.rightOperand, other.rightOperand);
+ return _isEqualNodes(node.leftOperand, other.leftOperand) && _isEqualTokens(node.operator, other.operator) && _isEqualNodes(node.rightOperand, other.rightOperand);
}
+ @override
bool visitBlock(Block node) {
Block other = this._other as Block;
- return isEqualTokens(node.leftBracket, other.leftBracket) && isEqualNodeLists(node.statements, other.statements) && isEqualTokens(node.rightBracket, other.rightBracket);
+ return _isEqualTokens(node.leftBracket, other.leftBracket) && _isEqualNodeLists(node.statements, other.statements) && _isEqualTokens(node.rightBracket, other.rightBracket);
}
+ @override
bool visitBlockFunctionBody(BlockFunctionBody node) {
BlockFunctionBody other = this._other as BlockFunctionBody;
- return isEqualNodes(node.block, other.block);
+ return _isEqualNodes(node.block, other.block);
}
+ @override
bool visitBooleanLiteral(BooleanLiteral node) {
BooleanLiteral other = this._other as BooleanLiteral;
- return isEqualTokens(node.literal, other.literal) && identical(node.value, other.value);
+ return _isEqualTokens(node.literal, other.literal) && identical(node.value, other.value);
}
+ @override
bool visitBreakStatement(BreakStatement node) {
BreakStatement other = this._other as BreakStatement;
- return isEqualTokens(node.keyword, other.keyword) && isEqualNodes(node.label, other.label) && isEqualTokens(node.semicolon, other.semicolon);
+ return _isEqualTokens(node.keyword, other.keyword) && _isEqualNodes(node.label, other.label) && _isEqualTokens(node.semicolon, other.semicolon);
}
+ @override
bool visitCascadeExpression(CascadeExpression node) {
CascadeExpression other = this._other as CascadeExpression;
- return isEqualNodes(node.target, other.target) && isEqualNodeLists(node.cascadeSections, other.cascadeSections);
+ return _isEqualNodes(node.target, other.target) && _isEqualNodeLists(node.cascadeSections, other.cascadeSections);
}
+ @override
bool visitCatchClause(CatchClause node) {
CatchClause other = this._other as CatchClause;
- return isEqualTokens(node.onKeyword, other.onKeyword) && isEqualNodes(node.exceptionType, other.exceptionType) && isEqualTokens(node.catchKeyword, other.catchKeyword) && isEqualTokens(node.leftParenthesis, other.leftParenthesis) && isEqualNodes(node.exceptionParameter, other.exceptionParameter) && isEqualTokens(node.comma, other.comma) && isEqualNodes(node.stackTraceParameter, other.stackTraceParameter) && isEqualTokens(node.rightParenthesis, other.rightParenthesis) && isEqualNodes(node.body, other.body);
+ return _isEqualTokens(node.onKeyword, other.onKeyword) && _isEqualNodes(node.exceptionType, other.exceptionType) && _isEqualTokens(node.catchKeyword, other.catchKeyword) && _isEqualTokens(node.leftParenthesis, other.leftParenthesis) && _isEqualNodes(node.exceptionParameter, other.exceptionParameter) && _isEqualTokens(node.comma, other.comma) && _isEqualNodes(node.stackTraceParameter, other.stackTraceParameter) && _isEqualTokens(node.rightParenthesis, other.rightParenthesis) && _isEqualNodes(node.body, other.body);
}
+ @override
bool visitClassDeclaration(ClassDeclaration node) {
ClassDeclaration other = this._other as ClassDeclaration;
- return isEqualNodes(node.documentationComment, other.documentationComment) && isEqualNodeLists(node.metadata, other.metadata) && isEqualTokens(node.abstractKeyword, other.abstractKeyword) && isEqualTokens(node.classKeyword, other.classKeyword) && isEqualNodes(node.name, other.name) && isEqualNodes(node.typeParameters, other.typeParameters) && isEqualNodes(node.extendsClause, other.extendsClause) && isEqualNodes(node.withClause, other.withClause) && isEqualNodes(node.implementsClause, other.implementsClause) && isEqualTokens(node.leftBracket, other.leftBracket) && isEqualNodeLists(node.members, other.members) && isEqualTokens(node.rightBracket, other.rightBracket);
+ return _isEqualNodes(node.documentationComment, other.documentationComment) && _isEqualNodeLists(node.metadata, other.metadata) && _isEqualTokens(node.abstractKeyword, other.abstractKeyword) && _isEqualTokens(node.classKeyword, other.classKeyword) && _isEqualNodes(node.name, other.name) && _isEqualNodes(node.typeParameters, other.typeParameters) && _isEqualNodes(node.extendsClause, other.extendsClause) && _isEqualNodes(node.withClause, other.withClause) && _isEqualNodes(node.implementsClause, other.implementsClause) && _isEqualTokens(node.leftBracket, other.leftBracket) && _isEqualNodeLists(node.members, other.members) && _isEqualTokens(node.rightBracket, other.rightBracket);
}
+ @override
bool visitClassTypeAlias(ClassTypeAlias node) {
ClassTypeAlias other = this._other as ClassTypeAlias;
- return isEqualNodes(node.documentationComment, other.documentationComment) && isEqualNodeLists(node.metadata, other.metadata) && isEqualTokens(node.keyword, other.keyword) && isEqualNodes(node.name, other.name) && isEqualNodes(node.typeParameters, other.typeParameters) && isEqualTokens(node.equals, other.equals) && isEqualTokens(node.abstractKeyword, other.abstractKeyword) && isEqualNodes(node.superclass, other.superclass) && isEqualNodes(node.withClause, other.withClause) && isEqualNodes(node.implementsClause, other.implementsClause) && isEqualTokens(node.semicolon, other.semicolon);
+ return _isEqualNodes(node.documentationComment, other.documentationComment) && _isEqualNodeLists(node.metadata, other.metadata) && _isEqualTokens(node.keyword, other.keyword) && _isEqualNodes(node.name, other.name) && _isEqualNodes(node.typeParameters, other.typeParameters) && _isEqualTokens(node.equals, other.equals) && _isEqualTokens(node.abstractKeyword, other.abstractKeyword) && _isEqualNodes(node.superclass, other.superclass) && _isEqualNodes(node.withClause, other.withClause) && _isEqualNodes(node.implementsClause, other.implementsClause) && _isEqualTokens(node.semicolon, other.semicolon);
}
+ @override
bool visitComment(Comment node) {
Comment other = this._other as Comment;
- return isEqualNodeLists(node.references, other.references);
+ return _isEqualNodeLists(node.references, other.references);
}
+ @override
bool visitCommentReference(CommentReference node) {
CommentReference other = this._other as CommentReference;
- return isEqualTokens(node.newKeyword, other.newKeyword) && isEqualNodes(node.identifier, other.identifier);
+ return _isEqualTokens(node.newKeyword, other.newKeyword) && _isEqualNodes(node.identifier, other.identifier);
}
+ @override
bool visitCompilationUnit(CompilationUnit node) {
CompilationUnit other = this._other as CompilationUnit;
- return isEqualTokens(node.beginToken, other.beginToken) && isEqualNodes(node.scriptTag, other.scriptTag) && isEqualNodeLists(node.directives, other.directives) && isEqualNodeLists(node.declarations, other.declarations) && isEqualTokens(node.endToken, other.endToken);
+ return _isEqualTokens(node.beginToken, other.beginToken) && _isEqualNodes(node.scriptTag, other.scriptTag) && _isEqualNodeLists(node.directives, other.directives) && _isEqualNodeLists(node.declarations, other.declarations) && _isEqualTokens(node.endToken, other.endToken);
}
+ @override
bool visitConditionalExpression(ConditionalExpression node) {
ConditionalExpression other = this._other as ConditionalExpression;
- return isEqualNodes(node.condition, other.condition) && isEqualTokens(node.question, other.question) && isEqualNodes(node.thenExpression, other.thenExpression) && isEqualTokens(node.colon, other.colon) && isEqualNodes(node.elseExpression, other.elseExpression);
+ return _isEqualNodes(node.condition, other.condition) && _isEqualTokens(node.question, other.question) && _isEqualNodes(node.thenExpression, other.thenExpression) && _isEqualTokens(node.colon, other.colon) && _isEqualNodes(node.elseExpression, other.elseExpression);
}
+ @override
bool visitConstructorDeclaration(ConstructorDeclaration node) {
ConstructorDeclaration other = this._other as ConstructorDeclaration;
- return isEqualNodes(node.documentationComment, other.documentationComment) && isEqualNodeLists(node.metadata, other.metadata) && isEqualTokens(node.externalKeyword, other.externalKeyword) && isEqualTokens(node.constKeyword, other.constKeyword) && isEqualTokens(node.factoryKeyword, other.factoryKeyword) && isEqualNodes(node.returnType, other.returnType) && isEqualTokens(node.period, other.period) && isEqualNodes(node.name, other.name) && isEqualNodes(node.parameters, other.parameters) && isEqualTokens(node.separator, other.separator) && isEqualNodeLists(node.initializers, other.initializers) && isEqualNodes(node.redirectedConstructor, other.redirectedConstructor) && isEqualNodes(node.body, other.body);
+ return _isEqualNodes(node.documentationComment, other.documentationComment) && _isEqualNodeLists(node.metadata, other.metadata) && _isEqualTokens(node.externalKeyword, other.externalKeyword) && _isEqualTokens(node.constKeyword, other.constKeyword) && _isEqualTokens(node.factoryKeyword, other.factoryKeyword) && _isEqualNodes(node.returnType, other.returnType) && _isEqualTokens(node.period, other.period) && _isEqualNodes(node.name, other.name) && _isEqualNodes(node.parameters, other.parameters) && _isEqualTokens(node.separator, other.separator) && _isEqualNodeLists(node.initializers, other.initializers) && _isEqualNodes(node.redirectedConstructor, other.redirectedConstructor) && _isEqualNodes(node.body, other.body);
}
+ @override
bool visitConstructorFieldInitializer(ConstructorFieldInitializer node) {
ConstructorFieldInitializer other = this._other as ConstructorFieldInitializer;
- return isEqualTokens(node.keyword, other.keyword) && isEqualTokens(node.period, other.period) && isEqualNodes(node.fieldName, other.fieldName) && isEqualTokens(node.equals, other.equals) && isEqualNodes(node.expression, other.expression);
+ return _isEqualTokens(node.keyword, other.keyword) && _isEqualTokens(node.period, other.period) && _isEqualNodes(node.fieldName, other.fieldName) && _isEqualTokens(node.equals, other.equals) && _isEqualNodes(node.expression, other.expression);
}
+ @override
bool visitConstructorName(ConstructorName node) {
ConstructorName other = this._other as ConstructorName;
- return isEqualNodes(node.type, other.type) && isEqualTokens(node.period, other.period) && isEqualNodes(node.name, other.name);
+ return _isEqualNodes(node.type, other.type) && _isEqualTokens(node.period, other.period) && _isEqualNodes(node.name, other.name);
}
+ @override
bool visitContinueStatement(ContinueStatement node) {
ContinueStatement other = this._other as ContinueStatement;
- return isEqualTokens(node.keyword, other.keyword) && isEqualNodes(node.label, other.label) && isEqualTokens(node.semicolon, other.semicolon);
+ return _isEqualTokens(node.keyword, other.keyword) && _isEqualNodes(node.label, other.label) && _isEqualTokens(node.semicolon, other.semicolon);
}
+ @override
bool visitDeclaredIdentifier(DeclaredIdentifier node) {
DeclaredIdentifier other = this._other as DeclaredIdentifier;
- return isEqualNodes(node.documentationComment, other.documentationComment) && isEqualNodeLists(node.metadata, other.metadata) && isEqualTokens(node.keyword, other.keyword) && isEqualNodes(node.type, other.type) && isEqualNodes(node.identifier, other.identifier);
+ return _isEqualNodes(node.documentationComment, other.documentationComment) && _isEqualNodeLists(node.metadata, other.metadata) && _isEqualTokens(node.keyword, other.keyword) && _isEqualNodes(node.type, other.type) && _isEqualNodes(node.identifier, other.identifier);
}
+ @override
bool visitDefaultFormalParameter(DefaultFormalParameter node) {
DefaultFormalParameter other = this._other as DefaultFormalParameter;
- return isEqualNodes(node.parameter, other.parameter) && identical(node.kind, other.kind) && isEqualTokens(node.separator, other.separator) && isEqualNodes(node.defaultValue, other.defaultValue);
+ return _isEqualNodes(node.parameter, other.parameter) && identical(node.kind, other.kind) && _isEqualTokens(node.separator, other.separator) && _isEqualNodes(node.defaultValue, other.defaultValue);
}
+ @override
bool visitDoStatement(DoStatement node) {
DoStatement other = this._other as DoStatement;
- return isEqualTokens(node.doKeyword, other.doKeyword) && isEqualNodes(node.body, other.body) && isEqualTokens(node.whileKeyword, other.whileKeyword) && isEqualTokens(node.leftParenthesis, other.leftParenthesis) && isEqualNodes(node.condition, other.condition) && isEqualTokens(node.rightParenthesis, other.rightParenthesis) && isEqualTokens(node.semicolon, other.semicolon);
+ return _isEqualTokens(node.doKeyword, other.doKeyword) && _isEqualNodes(node.body, other.body) && _isEqualTokens(node.whileKeyword, other.whileKeyword) && _isEqualTokens(node.leftParenthesis, other.leftParenthesis) && _isEqualNodes(node.condition, other.condition) && _isEqualTokens(node.rightParenthesis, other.rightParenthesis) && _isEqualTokens(node.semicolon, other.semicolon);
}
+ @override
bool visitDoubleLiteral(DoubleLiteral node) {
DoubleLiteral other = this._other as DoubleLiteral;
- return isEqualTokens(node.literal, other.literal) && node.value == other.value;
+ return _isEqualTokens(node.literal, other.literal) && node.value == other.value;
}
+ @override
bool visitEmptyFunctionBody(EmptyFunctionBody node) {
EmptyFunctionBody other = this._other as EmptyFunctionBody;
- return isEqualTokens(node.semicolon, other.semicolon);
+ return _isEqualTokens(node.semicolon, other.semicolon);
}
+ @override
bool visitEmptyStatement(EmptyStatement node) {
EmptyStatement other = this._other as EmptyStatement;
- return isEqualTokens(node.semicolon, other.semicolon);
+ return _isEqualTokens(node.semicolon, other.semicolon);
}
+ @override
bool visitExportDirective(ExportDirective node) {
ExportDirective other = this._other as ExportDirective;
- return isEqualNodes(node.documentationComment, other.documentationComment) && isEqualNodeLists(node.metadata, other.metadata) && isEqualTokens(node.keyword, other.keyword) && isEqualNodes(node.uri, other.uri) && isEqualNodeLists(node.combinators, other.combinators) && isEqualTokens(node.semicolon, other.semicolon);
+ return _isEqualNodes(node.documentationComment, other.documentationComment) && _isEqualNodeLists(node.metadata, other.metadata) && _isEqualTokens(node.keyword, other.keyword) && _isEqualNodes(node.uri, other.uri) && _isEqualNodeLists(node.combinators, other.combinators) && _isEqualTokens(node.semicolon, other.semicolon);
}
+ @override
bool visitExpressionFunctionBody(ExpressionFunctionBody node) {
ExpressionFunctionBody other = this._other as ExpressionFunctionBody;
- return isEqualTokens(node.functionDefinition, other.functionDefinition) && isEqualNodes(node.expression, other.expression) && isEqualTokens(node.semicolon, other.semicolon);
+ return _isEqualTokens(node.functionDefinition, other.functionDefinition) && _isEqualNodes(node.expression, other.expression) && _isEqualTokens(node.semicolon, other.semicolon);
}
+ @override
bool visitExpressionStatement(ExpressionStatement node) {
ExpressionStatement other = this._other as ExpressionStatement;
- return isEqualNodes(node.expression, other.expression) && isEqualTokens(node.semicolon, other.semicolon);
+ return _isEqualNodes(node.expression, other.expression) && _isEqualTokens(node.semicolon, other.semicolon);
}
+ @override
bool visitExtendsClause(ExtendsClause node) {
ExtendsClause other = this._other as ExtendsClause;
- return isEqualTokens(node.keyword, other.keyword) && isEqualNodes(node.superclass, other.superclass);
+ return _isEqualTokens(node.keyword, other.keyword) && _isEqualNodes(node.superclass, other.superclass);
}
+ @override
bool visitFieldDeclaration(FieldDeclaration node) {
FieldDeclaration other = this._other as FieldDeclaration;
- return isEqualNodes(node.documentationComment, other.documentationComment) && isEqualNodeLists(node.metadata, other.metadata) && isEqualTokens(node.staticKeyword, other.staticKeyword) && isEqualNodes(node.fields, other.fields) && isEqualTokens(node.semicolon, other.semicolon);
+ return _isEqualNodes(node.documentationComment, other.documentationComment) && _isEqualNodeLists(node.metadata, other.metadata) && _isEqualTokens(node.staticKeyword, other.staticKeyword) && _isEqualNodes(node.fields, other.fields) && _isEqualTokens(node.semicolon, other.semicolon);
}
+ @override
bool visitFieldFormalParameter(FieldFormalParameter node) {
FieldFormalParameter other = this._other as FieldFormalParameter;
- return isEqualNodes(node.documentationComment, other.documentationComment) && isEqualNodeLists(node.metadata, other.metadata) && isEqualTokens(node.keyword, other.keyword) && isEqualNodes(node.type, other.type) && isEqualTokens(node.thisToken, other.thisToken) && isEqualTokens(node.period, other.period) && isEqualNodes(node.identifier, other.identifier);
+ return _isEqualNodes(node.documentationComment, other.documentationComment) && _isEqualNodeLists(node.metadata, other.metadata) && _isEqualTokens(node.keyword, other.keyword) && _isEqualNodes(node.type, other.type) && _isEqualTokens(node.thisToken, other.thisToken) && _isEqualTokens(node.period, other.period) && _isEqualNodes(node.identifier, other.identifier);
}
+ @override
bool visitForEachStatement(ForEachStatement node) {
ForEachStatement other = this._other as ForEachStatement;
- return isEqualTokens(node.forKeyword, other.forKeyword) && isEqualTokens(node.leftParenthesis, other.leftParenthesis) && isEqualNodes(node.loopVariable, other.loopVariable) && isEqualTokens(node.inKeyword, other.inKeyword) && isEqualNodes(node.iterator, other.iterator) && isEqualTokens(node.rightParenthesis, other.rightParenthesis) && isEqualNodes(node.body, other.body);
+ return _isEqualTokens(node.forKeyword, other.forKeyword) && _isEqualTokens(node.leftParenthesis, other.leftParenthesis) && _isEqualNodes(node.loopVariable, other.loopVariable) && _isEqualTokens(node.inKeyword, other.inKeyword) && _isEqualNodes(node.iterator, other.iterator) && _isEqualTokens(node.rightParenthesis, other.rightParenthesis) && _isEqualNodes(node.body, other.body);
}
+ @override
bool visitFormalParameterList(FormalParameterList node) {
FormalParameterList other = this._other as FormalParameterList;
- return isEqualTokens(node.leftParenthesis, other.leftParenthesis) && isEqualNodeLists(node.parameters, other.parameters) && isEqualTokens(node.leftDelimiter, other.leftDelimiter) && isEqualTokens(node.rightDelimiter, other.rightDelimiter) && isEqualTokens(node.rightParenthesis, other.rightParenthesis);
+ return _isEqualTokens(node.leftParenthesis, other.leftParenthesis) && _isEqualNodeLists(node.parameters, other.parameters) && _isEqualTokens(node.leftDelimiter, other.leftDelimiter) && _isEqualTokens(node.rightDelimiter, other.rightDelimiter) && _isEqualTokens(node.rightParenthesis, other.rightParenthesis);
}
+ @override
bool visitForStatement(ForStatement node) {
ForStatement other = this._other as ForStatement;
- return isEqualTokens(node.forKeyword, other.forKeyword) && isEqualTokens(node.leftParenthesis, other.leftParenthesis) && isEqualNodes(node.variables, other.variables) && isEqualNodes(node.initialization, other.initialization) && isEqualTokens(node.leftSeparator, other.leftSeparator) && isEqualNodes(node.condition, other.condition) && isEqualTokens(node.rightSeparator, other.rightSeparator) && isEqualNodeLists(node.updaters, other.updaters) && isEqualTokens(node.rightParenthesis, other.rightParenthesis) && isEqualNodes(node.body, other.body);
+ return _isEqualTokens(node.forKeyword, other.forKeyword) && _isEqualTokens(node.leftParenthesis, other.leftParenthesis) && _isEqualNodes(node.variables, other.variables) && _isEqualNodes(node.initialization, other.initialization) && _isEqualTokens(node.leftSeparator, other.leftSeparator) && _isEqualNodes(node.condition, other.condition) && _isEqualTokens(node.rightSeparator, other.rightSeparator) && _isEqualNodeLists(node.updaters, other.updaters) && _isEqualTokens(node.rightParenthesis, other.rightParenthesis) && _isEqualNodes(node.body, other.body);
}
+ @override
bool visitFunctionDeclaration(FunctionDeclaration node) {
FunctionDeclaration other = this._other as FunctionDeclaration;
- return isEqualNodes(node.documentationComment, other.documentationComment) && isEqualNodeLists(node.metadata, other.metadata) && isEqualTokens(node.externalKeyword, other.externalKeyword) && isEqualNodes(node.returnType, other.returnType) && isEqualTokens(node.propertyKeyword, other.propertyKeyword) && isEqualNodes(node.name, other.name) && isEqualNodes(node.functionExpression, other.functionExpression);
+ return _isEqualNodes(node.documentationComment, other.documentationComment) && _isEqualNodeLists(node.metadata, other.metadata) && _isEqualTokens(node.externalKeyword, other.externalKeyword) && _isEqualNodes(node.returnType, other.returnType) && _isEqualTokens(node.propertyKeyword, other.propertyKeyword) && _isEqualNodes(node.name, other.name) && _isEqualNodes(node.functionExpression, other.functionExpression);
}
+ @override
bool visitFunctionDeclarationStatement(FunctionDeclarationStatement node) {
FunctionDeclarationStatement other = this._other as FunctionDeclarationStatement;
- return isEqualNodes(node.functionDeclaration, other.functionDeclaration);
+ return _isEqualNodes(node.functionDeclaration, other.functionDeclaration);
}
+ @override
bool visitFunctionExpression(FunctionExpression node) {
FunctionExpression other = this._other as FunctionExpression;
- return isEqualNodes(node.parameters, other.parameters) && isEqualNodes(node.body, other.body);
+ return _isEqualNodes(node.parameters, other.parameters) && _isEqualNodes(node.body, other.body);
}
+ @override
bool visitFunctionExpressionInvocation(FunctionExpressionInvocation node) {
FunctionExpressionInvocation other = this._other as FunctionExpressionInvocation;
- return isEqualNodes(node.function, other.function) && isEqualNodes(node.argumentList, other.argumentList);
+ return _isEqualNodes(node.function, other.function) && _isEqualNodes(node.argumentList, other.argumentList);
}
+ @override
bool visitFunctionTypeAlias(FunctionTypeAlias node) {
FunctionTypeAlias other = this._other as FunctionTypeAlias;
- return isEqualNodes(node.documentationComment, other.documentationComment) && isEqualNodeLists(node.metadata, other.metadata) && isEqualTokens(node.keyword, other.keyword) && isEqualNodes(node.returnType, other.returnType) && isEqualNodes(node.name, other.name) && isEqualNodes(node.typeParameters, other.typeParameters) && isEqualNodes(node.parameters, other.parameters) && isEqualTokens(node.semicolon, other.semicolon);
+ return _isEqualNodes(node.documentationComment, other.documentationComment) && _isEqualNodeLists(node.metadata, other.metadata) && _isEqualTokens(node.keyword, other.keyword) && _isEqualNodes(node.returnType, other.returnType) && _isEqualNodes(node.name, other.name) && _isEqualNodes(node.typeParameters, other.typeParameters) && _isEqualNodes(node.parameters, other.parameters) && _isEqualTokens(node.semicolon, other.semicolon);
}
+ @override
bool visitFunctionTypedFormalParameter(FunctionTypedFormalParameter node) {
FunctionTypedFormalParameter other = this._other as FunctionTypedFormalParameter;
- return isEqualNodes(node.documentationComment, other.documentationComment) && isEqualNodeLists(node.metadata, other.metadata) && isEqualNodes(node.returnType, other.returnType) && isEqualNodes(node.identifier, other.identifier) && isEqualNodes(node.parameters, other.parameters);
+ return _isEqualNodes(node.documentationComment, other.documentationComment) && _isEqualNodeLists(node.metadata, other.metadata) && _isEqualNodes(node.returnType, other.returnType) && _isEqualNodes(node.identifier, other.identifier) && _isEqualNodes(node.parameters, other.parameters);
}
+ @override
bool visitHideCombinator(HideCombinator node) {
HideCombinator other = this._other as HideCombinator;
- return isEqualTokens(node.keyword, other.keyword) && isEqualNodeLists(node.hiddenNames, other.hiddenNames);
+ return _isEqualTokens(node.keyword, other.keyword) && _isEqualNodeLists(node.hiddenNames, other.hiddenNames);
}
+ @override
bool visitIfStatement(IfStatement node) {
IfStatement other = this._other as IfStatement;
- return isEqualTokens(node.ifKeyword, other.ifKeyword) && isEqualTokens(node.leftParenthesis, other.leftParenthesis) && isEqualNodes(node.condition, other.condition) && isEqualTokens(node.rightParenthesis, other.rightParenthesis) && isEqualNodes(node.thenStatement, other.thenStatement) && isEqualTokens(node.elseKeyword, other.elseKeyword) && isEqualNodes(node.elseStatement, other.elseStatement);
+ return _isEqualTokens(node.ifKeyword, other.ifKeyword) && _isEqualTokens(node.leftParenthesis, other.leftParenthesis) && _isEqualNodes(node.condition, other.condition) && _isEqualTokens(node.rightParenthesis, other.rightParenthesis) && _isEqualNodes(node.thenStatement, other.thenStatement) && _isEqualTokens(node.elseKeyword, other.elseKeyword) && _isEqualNodes(node.elseStatement, other.elseStatement);
}
+ @override
bool visitImplementsClause(ImplementsClause node) {
ImplementsClause other = this._other as ImplementsClause;
- return isEqualTokens(node.keyword, other.keyword) && isEqualNodeLists(node.interfaces, other.interfaces);
+ return _isEqualTokens(node.keyword, other.keyword) && _isEqualNodeLists(node.interfaces, other.interfaces);
}
+ @override
bool visitImportDirective(ImportDirective node) {
ImportDirective other = this._other as ImportDirective;
- return isEqualNodes(node.documentationComment, other.documentationComment) && isEqualNodeLists(node.metadata, other.metadata) && isEqualTokens(node.keyword, other.keyword) && isEqualNodes(node.uri, other.uri) && isEqualTokens(node.asToken, other.asToken) && isEqualNodes(node.prefix, other.prefix) && isEqualNodeLists(node.combinators, other.combinators) && isEqualTokens(node.semicolon, other.semicolon);
+ return _isEqualNodes(node.documentationComment, other.documentationComment) && _isEqualNodeLists(node.metadata, other.metadata) && _isEqualTokens(node.keyword, other.keyword) && _isEqualNodes(node.uri, other.uri) && _isEqualTokens(node.asToken, other.asToken) && _isEqualNodes(node.prefix, other.prefix) && _isEqualNodeLists(node.combinators, other.combinators) && _isEqualTokens(node.semicolon, other.semicolon);
}
+ @override
bool visitIndexExpression(IndexExpression node) {
IndexExpression other = this._other as IndexExpression;
- return isEqualNodes(node.target, other.target) && isEqualTokens(node.leftBracket, other.leftBracket) && isEqualNodes(node.index, other.index) && isEqualTokens(node.rightBracket, other.rightBracket);
+ return _isEqualNodes(node.target, other.target) && _isEqualTokens(node.leftBracket, other.leftBracket) && _isEqualNodes(node.index, other.index) && _isEqualTokens(node.rightBracket, other.rightBracket);
}
+ @override
bool visitInstanceCreationExpression(InstanceCreationExpression node) {
InstanceCreationExpression other = this._other as InstanceCreationExpression;
- return isEqualTokens(node.keyword, other.keyword) && isEqualNodes(node.constructorName, other.constructorName) && isEqualNodes(node.argumentList, other.argumentList);
+ return _isEqualTokens(node.keyword, other.keyword) && _isEqualNodes(node.constructorName, other.constructorName) && _isEqualNodes(node.argumentList, other.argumentList);
}
+ @override
bool visitIntegerLiteral(IntegerLiteral node) {
IntegerLiteral other = this._other as IntegerLiteral;
- return isEqualTokens(node.literal, other.literal) && (node.value == other.value);
+ return _isEqualTokens(node.literal, other.literal) && (node.value == other.value);
}
+ @override
bool visitInterpolationExpression(InterpolationExpression node) {
InterpolationExpression other = this._other as InterpolationExpression;
- return isEqualTokens(node.leftBracket, other.leftBracket) && isEqualNodes(node.expression, other.expression) && isEqualTokens(node.rightBracket, other.rightBracket);
+ return _isEqualTokens(node.leftBracket, other.leftBracket) && _isEqualNodes(node.expression, other.expression) && _isEqualTokens(node.rightBracket, other.rightBracket);
}
+ @override
bool visitInterpolationString(InterpolationString node) {
InterpolationString other = this._other as InterpolationString;
- return isEqualTokens(node.contents, other.contents) && node.value == other.value;
+ return _isEqualTokens(node.contents, other.contents) && node.value == other.value;
}
+ @override
bool visitIsExpression(IsExpression node) {
IsExpression other = this._other as IsExpression;
- return isEqualNodes(node.expression, other.expression) && isEqualTokens(node.isOperator, other.isOperator) && isEqualTokens(node.notOperator, other.notOperator) && isEqualNodes(node.type, other.type);
+ return _isEqualNodes(node.expression, other.expression) && _isEqualTokens(node.isOperator, other.isOperator) && _isEqualTokens(node.notOperator, other.notOperator) && _isEqualNodes(node.type, other.type);
}
+ @override
bool visitLabel(Label node) {
Label other = this._other as Label;
- return isEqualNodes(node.label, other.label) && isEqualTokens(node.colon, other.colon);
+ return _isEqualNodes(node.label, other.label) && _isEqualTokens(node.colon, other.colon);
}
+ @override
bool visitLabeledStatement(LabeledStatement node) {
LabeledStatement other = this._other as LabeledStatement;
- return isEqualNodeLists(node.labels, other.labels) && isEqualNodes(node.statement, other.statement);
+ return _isEqualNodeLists(node.labels, other.labels) && _isEqualNodes(node.statement, other.statement);
}
+ @override
bool visitLibraryDirective(LibraryDirective node) {
LibraryDirective other = this._other as LibraryDirective;
- return isEqualNodes(node.documentationComment, other.documentationComment) && isEqualNodeLists(node.metadata, other.metadata) && isEqualTokens(node.libraryToken, other.libraryToken) && isEqualNodes(node.name, other.name) && isEqualTokens(node.semicolon, other.semicolon);
+ return _isEqualNodes(node.documentationComment, other.documentationComment) && _isEqualNodeLists(node.metadata, other.metadata) && _isEqualTokens(node.libraryToken, other.libraryToken) && _isEqualNodes(node.name, other.name) && _isEqualTokens(node.semicolon, other.semicolon);
}
+ @override
bool visitLibraryIdentifier(LibraryIdentifier node) {
LibraryIdentifier other = this._other as LibraryIdentifier;
- return isEqualNodeLists(node.components, other.components);
+ return _isEqualNodeLists(node.components, other.components);
}
+ @override
bool visitListLiteral(ListLiteral node) {
ListLiteral other = this._other as ListLiteral;
- return isEqualTokens(node.constKeyword, other.constKeyword) && isEqualNodes(node.typeArguments, other.typeArguments) && isEqualTokens(node.leftBracket, other.leftBracket) && isEqualNodeLists(node.elements, other.elements) && isEqualTokens(node.rightBracket, other.rightBracket);
+ return _isEqualTokens(node.constKeyword, other.constKeyword) && _isEqualNodes(node.typeArguments, other.typeArguments) && _isEqualTokens(node.leftBracket, other.leftBracket) && _isEqualNodeLists(node.elements, other.elements) && _isEqualTokens(node.rightBracket, other.rightBracket);
}
+ @override
bool visitMapLiteral(MapLiteral node) {
MapLiteral other = this._other as MapLiteral;
- return isEqualTokens(node.constKeyword, other.constKeyword) && isEqualNodes(node.typeArguments, other.typeArguments) && isEqualTokens(node.leftBracket, other.leftBracket) && isEqualNodeLists(node.entries, other.entries) && isEqualTokens(node.rightBracket, other.rightBracket);
+ return _isEqualTokens(node.constKeyword, other.constKeyword) && _isEqualNodes(node.typeArguments, other.typeArguments) && _isEqualTokens(node.leftBracket, other.leftBracket) && _isEqualNodeLists(node.entries, other.entries) && _isEqualTokens(node.rightBracket, other.rightBracket);
}
+ @override
bool visitMapLiteralEntry(MapLiteralEntry node) {
MapLiteralEntry other = this._other as MapLiteralEntry;
- return isEqualNodes(node.key, other.key) && isEqualTokens(node.separator, other.separator) && isEqualNodes(node.value, other.value);
+ return _isEqualNodes(node.key, other.key) && _isEqualTokens(node.separator, other.separator) && _isEqualNodes(node.value, other.value);
}
+ @override
bool visitMethodDeclaration(MethodDeclaration node) {
MethodDeclaration other = this._other as MethodDeclaration;
- return isEqualNodes(node.documentationComment, other.documentationComment) && isEqualNodeLists(node.metadata, other.metadata) && isEqualTokens(node.externalKeyword, other.externalKeyword) && isEqualTokens(node.modifierKeyword, other.modifierKeyword) && isEqualNodes(node.returnType, other.returnType) && isEqualTokens(node.propertyKeyword, other.propertyKeyword) && isEqualTokens(node.propertyKeyword, other.propertyKeyword) && isEqualNodes(node.name, other.name) && isEqualNodes(node.parameters, other.parameters) && isEqualNodes(node.body, other.body);
+ return _isEqualNodes(node.documentationComment, other.documentationComment) && _isEqualNodeLists(node.metadata, other.metadata) && _isEqualTokens(node.externalKeyword, other.externalKeyword) && _isEqualTokens(node.modifierKeyword, other.modifierKeyword) && _isEqualNodes(node.returnType, other.returnType) && _isEqualTokens(node.propertyKeyword, other.propertyKeyword) && _isEqualTokens(node.propertyKeyword, other.propertyKeyword) && _isEqualNodes(node.name, other.name) && _isEqualNodes(node.parameters, other.parameters) && _isEqualNodes(node.body, other.body);
}
+ @override
bool visitMethodInvocation(MethodInvocation node) {
MethodInvocation other = this._other as MethodInvocation;
- return isEqualNodes(node.target, other.target) && isEqualTokens(node.period, other.period) && isEqualNodes(node.methodName, other.methodName) && isEqualNodes(node.argumentList, other.argumentList);
+ return _isEqualNodes(node.target, other.target) && _isEqualTokens(node.period, other.period) && _isEqualNodes(node.methodName, other.methodName) && _isEqualNodes(node.argumentList, other.argumentList);
}
+ @override
bool visitNamedExpression(NamedExpression node) {
NamedExpression other = this._other as NamedExpression;
- return isEqualNodes(node.name, other.name) && isEqualNodes(node.expression, other.expression);
+ return _isEqualNodes(node.name, other.name) && _isEqualNodes(node.expression, other.expression);
}
+ @override
bool visitNativeClause(NativeClause node) {
NativeClause other = this._other as NativeClause;
- return isEqualTokens(node.keyword, other.keyword) && isEqualNodes(node.name, other.name);
+ return _isEqualTokens(node.keyword, other.keyword) && _isEqualNodes(node.name, other.name);
}
+ @override
bool visitNativeFunctionBody(NativeFunctionBody node) {
NativeFunctionBody other = this._other as NativeFunctionBody;
- return isEqualTokens(node.nativeToken, other.nativeToken) && isEqualNodes(node.stringLiteral, other.stringLiteral) && isEqualTokens(node.semicolon, other.semicolon);
+ return _isEqualTokens(node.nativeToken, other.nativeToken) && _isEqualNodes(node.stringLiteral, other.stringLiteral) && _isEqualTokens(node.semicolon, other.semicolon);
}
+ @override
bool visitNullLiteral(NullLiteral node) {
NullLiteral other = this._other as NullLiteral;
- return isEqualTokens(node.literal, other.literal);
+ return _isEqualTokens(node.literal, other.literal);
}
+ @override
bool visitParenthesizedExpression(ParenthesizedExpression node) {
ParenthesizedExpression other = this._other as ParenthesizedExpression;
- return isEqualTokens(node.leftParenthesis, other.leftParenthesis) && isEqualNodes(node.expression, other.expression) && isEqualTokens(node.rightParenthesis, other.rightParenthesis);
+ return _isEqualTokens(node.leftParenthesis, other.leftParenthesis) && _isEqualNodes(node.expression, other.expression) && _isEqualTokens(node.rightParenthesis, other.rightParenthesis);
}
+ @override
bool visitPartDirective(PartDirective node) {
PartDirective other = this._other as PartDirective;
- return isEqualNodes(node.documentationComment, other.documentationComment) && isEqualNodeLists(node.metadata, other.metadata) && isEqualTokens(node.partToken, other.partToken) && isEqualNodes(node.uri, other.uri) && isEqualTokens(node.semicolon, other.semicolon);
+ return _isEqualNodes(node.documentationComment, other.documentationComment) && _isEqualNodeLists(node.metadata, other.metadata) && _isEqualTokens(node.partToken, other.partToken) && _isEqualNodes(node.uri, other.uri) && _isEqualTokens(node.semicolon, other.semicolon);
}
+ @override
bool visitPartOfDirective(PartOfDirective node) {
PartOfDirective other = this._other as PartOfDirective;
- return isEqualNodes(node.documentationComment, other.documentationComment) && isEqualNodeLists(node.metadata, other.metadata) && isEqualTokens(node.partToken, other.partToken) && isEqualTokens(node.ofToken, other.ofToken) && isEqualNodes(node.libraryName, other.libraryName) && isEqualTokens(node.semicolon, other.semicolon);
+ return _isEqualNodes(node.documentationComment, other.documentationComment) && _isEqualNodeLists(node.metadata, other.metadata) && _isEqualTokens(node.partToken, other.partToken) && _isEqualTokens(node.ofToken, other.ofToken) && _isEqualNodes(node.libraryName, other.libraryName) && _isEqualTokens(node.semicolon, other.semicolon);
}
+ @override
bool visitPostfixExpression(PostfixExpression node) {
PostfixExpression other = this._other as PostfixExpression;
- return isEqualNodes(node.operand, other.operand) && isEqualTokens(node.operator, other.operator);
+ return _isEqualNodes(node.operand, other.operand) && _isEqualTokens(node.operator, other.operator);
}
+ @override
bool visitPrefixedIdentifier(PrefixedIdentifier node) {
PrefixedIdentifier other = this._other as PrefixedIdentifier;
- return isEqualNodes(node.prefix, other.prefix) && isEqualTokens(node.period, other.period) && isEqualNodes(node.identifier, other.identifier);
+ return _isEqualNodes(node.prefix, other.prefix) && _isEqualTokens(node.period, other.period) && _isEqualNodes(node.identifier, other.identifier);
}
+ @override
bool visitPrefixExpression(PrefixExpression node) {
PrefixExpression other = this._other as PrefixExpression;
- return isEqualTokens(node.operator, other.operator) && isEqualNodes(node.operand, other.operand);
+ return _isEqualTokens(node.operator, other.operator) && _isEqualNodes(node.operand, other.operand);
}
+ @override
bool visitPropertyAccess(PropertyAccess node) {
PropertyAccess other = this._other as PropertyAccess;
- return isEqualNodes(node.target, other.target) && isEqualTokens(node.operator, other.operator) && isEqualNodes(node.propertyName, other.propertyName);
+ return _isEqualNodes(node.target, other.target) && _isEqualTokens(node.operator, other.operator) && _isEqualNodes(node.propertyName, other.propertyName);
}
+ @override
bool visitRedirectingConstructorInvocation(RedirectingConstructorInvocation node) {
RedirectingConstructorInvocation other = this._other as RedirectingConstructorInvocation;
- return isEqualTokens(node.keyword, other.keyword) && isEqualTokens(node.period, other.period) && isEqualNodes(node.constructorName, other.constructorName) && isEqualNodes(node.argumentList, other.argumentList);
+ return _isEqualTokens(node.keyword, other.keyword) && _isEqualTokens(node.period, other.period) && _isEqualNodes(node.constructorName, other.constructorName) && _isEqualNodes(node.argumentList, other.argumentList);
}
+ @override
bool visitRethrowExpression(RethrowExpression node) {
RethrowExpression other = this._other as RethrowExpression;
- return isEqualTokens(node.keyword, other.keyword);
+ return _isEqualTokens(node.keyword, other.keyword);
}
+ @override
bool visitReturnStatement(ReturnStatement node) {
ReturnStatement other = this._other as ReturnStatement;
- return isEqualTokens(node.keyword, other.keyword) && isEqualNodes(node.expression, other.expression) && isEqualTokens(node.semicolon, other.semicolon);
+ return _isEqualTokens(node.keyword, other.keyword) && _isEqualNodes(node.expression, other.expression) && _isEqualTokens(node.semicolon, other.semicolon);
}
+ @override
bool visitScriptTag(ScriptTag node) {
ScriptTag other = this._other as ScriptTag;
- return isEqualTokens(node.scriptTag, other.scriptTag);
+ return _isEqualTokens(node.scriptTag, other.scriptTag);
}
+ @override
bool visitShowCombinator(ShowCombinator node) {
ShowCombinator other = this._other as ShowCombinator;
- return isEqualTokens(node.keyword, other.keyword) && isEqualNodeLists(node.shownNames, other.shownNames);
+ return _isEqualTokens(node.keyword, other.keyword) && _isEqualNodeLists(node.shownNames, other.shownNames);
}
+ @override
bool visitSimpleFormalParameter(SimpleFormalParameter node) {
SimpleFormalParameter other = this._other as SimpleFormalParameter;
- return isEqualNodes(node.documentationComment, other.documentationComment) && isEqualNodeLists(node.metadata, other.metadata) && isEqualTokens(node.keyword, other.keyword) && isEqualNodes(node.type, other.type) && isEqualNodes(node.identifier, other.identifier);
+ return _isEqualNodes(node.documentationComment, other.documentationComment) && _isEqualNodeLists(node.metadata, other.metadata) && _isEqualTokens(node.keyword, other.keyword) && _isEqualNodes(node.type, other.type) && _isEqualNodes(node.identifier, other.identifier);
}
+ @override
bool visitSimpleIdentifier(SimpleIdentifier node) {
SimpleIdentifier other = this._other as SimpleIdentifier;
- return isEqualTokens(node.token, other.token);
+ return _isEqualTokens(node.token, other.token);
}
+ @override
bool visitSimpleStringLiteral(SimpleStringLiteral node) {
SimpleStringLiteral other = this._other as SimpleStringLiteral;
- return isEqualTokens(node.literal, other.literal) && (node.value == other.value);
+ return _isEqualTokens(node.literal, other.literal) && (node.value == other.value);
}
+ @override
bool visitStringInterpolation(StringInterpolation node) {
StringInterpolation other = this._other as StringInterpolation;
- return isEqualNodeLists(node.elements, other.elements);
+ return _isEqualNodeLists(node.elements, other.elements);
}
+ @override
bool visitSuperConstructorInvocation(SuperConstructorInvocation node) {
SuperConstructorInvocation other = this._other as SuperConstructorInvocation;
- return isEqualTokens(node.keyword, other.keyword) && isEqualTokens(node.period, other.period) && isEqualNodes(node.constructorName, other.constructorName) && isEqualNodes(node.argumentList, other.argumentList);
+ return _isEqualTokens(node.keyword, other.keyword) && _isEqualTokens(node.period, other.period) && _isEqualNodes(node.constructorName, other.constructorName) && _isEqualNodes(node.argumentList, other.argumentList);
}
+ @override
bool visitSuperExpression(SuperExpression node) {
SuperExpression other = this._other as SuperExpression;
- return isEqualTokens(node.keyword, other.keyword);
+ return _isEqualTokens(node.keyword, other.keyword);
}
+ @override
bool visitSwitchCase(SwitchCase node) {
SwitchCase other = this._other as SwitchCase;
- return isEqualNodeLists(node.labels, other.labels) && isEqualTokens(node.keyword, other.keyword) && isEqualNodes(node.expression, other.expression) && isEqualTokens(node.colon, other.colon) && isEqualNodeLists(node.statements, other.statements);
+ return _isEqualNodeLists(node.labels, other.labels) && _isEqualTokens(node.keyword, other.keyword) && _isEqualNodes(node.expression, other.expression) && _isEqualTokens(node.colon, other.colon) && _isEqualNodeLists(node.statements, other.statements);
}
+ @override
bool visitSwitchDefault(SwitchDefault node) {
SwitchDefault other = this._other as SwitchDefault;
- return isEqualNodeLists(node.labels, other.labels) && isEqualTokens(node.keyword, other.keyword) && isEqualTokens(node.colon, other.colon) && isEqualNodeLists(node.statements, other.statements);
+ return _isEqualNodeLists(node.labels, other.labels) && _isEqualTokens(node.keyword, other.keyword) && _isEqualTokens(node.colon, other.colon) && _isEqualNodeLists(node.statements, other.statements);
}
+ @override
bool visitSwitchStatement(SwitchStatement node) {
SwitchStatement other = this._other as SwitchStatement;
- return isEqualTokens(node.keyword, other.keyword) && isEqualTokens(node.leftParenthesis, other.leftParenthesis) && isEqualNodes(node.expression, other.expression) && isEqualTokens(node.rightParenthesis, other.rightParenthesis) && isEqualTokens(node.leftBracket, other.leftBracket) && isEqualNodeLists(node.members, other.members) && isEqualTokens(node.rightBracket, other.rightBracket);
+ return _isEqualTokens(node.keyword, other.keyword) && _isEqualTokens(node.leftParenthesis, other.leftParenthesis) && _isEqualNodes(node.expression, other.expression) && _isEqualTokens(node.rightParenthesis, other.rightParenthesis) && _isEqualTokens(node.leftBracket, other.leftBracket) && _isEqualNodeLists(node.members, other.members) && _isEqualTokens(node.rightBracket, other.rightBracket);
}
+ @override
bool visitSymbolLiteral(SymbolLiteral node) {
SymbolLiteral other = this._other as SymbolLiteral;
- return isEqualTokens(node.poundSign, other.poundSign) && isEqualTokenLists(node.components, other.components);
+ return _isEqualTokens(node.poundSign, other.poundSign) && _isEqualTokenLists(node.components, other.components);
}
+ @override
bool visitThisExpression(ThisExpression node) {
ThisExpression other = this._other as ThisExpression;
- return isEqualTokens(node.keyword, other.keyword);
+ return _isEqualTokens(node.keyword, other.keyword);
}
+ @override
bool visitThrowExpression(ThrowExpression node) {
ThrowExpression other = this._other as ThrowExpression;
- return isEqualTokens(node.keyword, other.keyword) && isEqualNodes(node.expression, other.expression);
+ return _isEqualTokens(node.keyword, other.keyword) && _isEqualNodes(node.expression, other.expression);
}
+ @override
bool visitTopLevelVariableDeclaration(TopLevelVariableDeclaration node) {
TopLevelVariableDeclaration other = this._other as TopLevelVariableDeclaration;
- return isEqualNodes(node.documentationComment, other.documentationComment) && isEqualNodeLists(node.metadata, other.metadata) && isEqualNodes(node.variables, other.variables) && isEqualTokens(node.semicolon, other.semicolon);
+ return _isEqualNodes(node.documentationComment, other.documentationComment) && _isEqualNodeLists(node.metadata, other.metadata) && _isEqualNodes(node.variables, other.variables) && _isEqualTokens(node.semicolon, other.semicolon);
}
+ @override
bool visitTryStatement(TryStatement node) {
TryStatement other = this._other as TryStatement;
- return isEqualTokens(node.tryKeyword, other.tryKeyword) && isEqualNodes(node.body, other.body) && isEqualNodeLists(node.catchClauses, other.catchClauses) && isEqualTokens(node.finallyKeyword, other.finallyKeyword) && isEqualNodes(node.finallyBlock, other.finallyBlock);
+ return _isEqualTokens(node.tryKeyword, other.tryKeyword) && _isEqualNodes(node.body, other.body) && _isEqualNodeLists(node.catchClauses, other.catchClauses) && _isEqualTokens(node.finallyKeyword, other.finallyKeyword) && _isEqualNodes(node.finallyBlock, other.finallyBlock);
}
+ @override
bool visitTypeArgumentList(TypeArgumentList node) {
TypeArgumentList other = this._other as TypeArgumentList;
- return isEqualTokens(node.leftBracket, other.leftBracket) && isEqualNodeLists(node.arguments, other.arguments) && isEqualTokens(node.rightBracket, other.rightBracket);
+ return _isEqualTokens(node.leftBracket, other.leftBracket) && _isEqualNodeLists(node.arguments, other.arguments) && _isEqualTokens(node.rightBracket, other.rightBracket);
}
+ @override
bool visitTypeName(TypeName node) {
TypeName other = this._other as TypeName;
- return isEqualNodes(node.name, other.name) && isEqualNodes(node.typeArguments, other.typeArguments);
+ return _isEqualNodes(node.name, other.name) && _isEqualNodes(node.typeArguments, other.typeArguments);
}
+ @override
bool visitTypeParameter(TypeParameter node) {
TypeParameter other = this._other as TypeParameter;
- return isEqualNodes(node.documentationComment, other.documentationComment) && isEqualNodeLists(node.metadata, other.metadata) && isEqualNodes(node.name, other.name) && isEqualTokens(node.keyword, other.keyword) && isEqualNodes(node.bound, other.bound);
+ return _isEqualNodes(node.documentationComment, other.documentationComment) && _isEqualNodeLists(node.metadata, other.metadata) && _isEqualNodes(node.name, other.name) && _isEqualTokens(node.keyword, other.keyword) && _isEqualNodes(node.bound, other.bound);
}
+ @override
bool visitTypeParameterList(TypeParameterList node) {
TypeParameterList other = this._other as TypeParameterList;
- return isEqualTokens(node.leftBracket, other.leftBracket) && isEqualNodeLists(node.typeParameters, other.typeParameters) && isEqualTokens(node.rightBracket, other.rightBracket);
+ return _isEqualTokens(node.leftBracket, other.leftBracket) && _isEqualNodeLists(node.typeParameters, other.typeParameters) && _isEqualTokens(node.rightBracket, other.rightBracket);
}
+ @override
bool visitVariableDeclaration(VariableDeclaration node) {
VariableDeclaration other = this._other as VariableDeclaration;
- return isEqualNodes(node.documentationComment, other.documentationComment) && isEqualNodeLists(node.metadata, other.metadata) && isEqualNodes(node.name, other.name) && isEqualTokens(node.equals, other.equals) && isEqualNodes(node.initializer, other.initializer);
+ return _isEqualNodes(node.documentationComment, other.documentationComment) && _isEqualNodeLists(node.metadata, other.metadata) && _isEqualNodes(node.name, other.name) && _isEqualTokens(node.equals, other.equals) && _isEqualNodes(node.initializer, other.initializer);
}
+ @override
bool visitVariableDeclarationList(VariableDeclarationList node) {
VariableDeclarationList other = this._other as VariableDeclarationList;
- return isEqualNodes(node.documentationComment, other.documentationComment) && isEqualNodeLists(node.metadata, other.metadata) && isEqualTokens(node.keyword, other.keyword) && isEqualNodes(node.type, other.type) && isEqualNodeLists(node.variables, other.variables);
+ return _isEqualNodes(node.documentationComment, other.documentationComment) && _isEqualNodeLists(node.metadata, other.metadata) && _isEqualTokens(node.keyword, other.keyword) && _isEqualNodes(node.type, other.type) && _isEqualNodeLists(node.variables, other.variables);
}
+ @override
bool visitVariableDeclarationStatement(VariableDeclarationStatement node) {
VariableDeclarationStatement other = this._other as VariableDeclarationStatement;
- return isEqualNodes(node.variables, other.variables) && isEqualTokens(node.semicolon, other.semicolon);
+ return _isEqualNodes(node.variables, other.variables) && _isEqualTokens(node.semicolon, other.semicolon);
}
+ @override
bool visitWhileStatement(WhileStatement node) {
WhileStatement other = this._other as WhileStatement;
- return isEqualTokens(node.keyword, other.keyword) && isEqualTokens(node.leftParenthesis, other.leftParenthesis) && isEqualNodes(node.condition, other.condition) && isEqualTokens(node.rightParenthesis, other.rightParenthesis) && isEqualNodes(node.body, other.body);
+ return _isEqualTokens(node.keyword, other.keyword) && _isEqualTokens(node.leftParenthesis, other.leftParenthesis) && _isEqualNodes(node.condition, other.condition) && _isEqualTokens(node.rightParenthesis, other.rightParenthesis) && _isEqualNodes(node.body, other.body);
}
+ @override
bool visitWithClause(WithClause node) {
WithClause other = this._other as WithClause;
- return isEqualTokens(node.withKeyword, other.withKeyword) && isEqualNodeLists(node.mixinTypes, other.mixinTypes);
+ return _isEqualTokens(node.withKeyword, other.withKeyword) && _isEqualNodeLists(node.mixinTypes, other.mixinTypes);
}
/**
@@ -15322,7 +16604,7 @@
* @return `true` if the given AST nodes have the same size and corresponding elements are
* equal
*/
- bool isEqualNodeLists(NodeList first, NodeList second) {
+ bool _isEqualNodeLists(NodeList first, NodeList second) {
if (first == null) {
return second == null;
} else if (second == null) {
@@ -15333,7 +16615,7 @@
return false;
}
for (int i = 0; i < size; i++) {
- if (!isEqualNodes(first[i], second[i])) {
+ if (!_isEqualNodes(first[i], second[i])) {
return false;
}
}
@@ -15347,7 +16629,7 @@
* @param second the second node being compared
* @return `true` if the given AST nodes have the same structure
*/
- bool isEqualNodes(AstNode first, AstNode second) {
+ bool _isEqualNodes(AstNode first, AstNode second) {
if (first == null) {
return second == null;
} else if (second == null) {
@@ -15368,13 +16650,13 @@
* @return `true` if the given arrays of tokens have the same length and corresponding
* elements are equal
*/
- bool isEqualTokenLists(List<Token> first, List<Token> second) {
+ bool _isEqualTokenLists(List<Token> first, List<Token> second) {
int length = first.length;
if (second.length != length) {
return false;
}
for (int i = 0; i < length; i++) {
- if (isEqualTokens(first[i], second[i])) {
+ if (_isEqualTokens(first[i], second[i])) {
return false;
}
}
@@ -15388,7 +16670,7 @@
* @param second the second node being compared
* @return `true` if the given tokens have the same structure
*/
- bool isEqualTokens(Token first, Token second) {
+ bool _isEqualTokens(Token first, Token second) {
if (first == null) {
return second == null;
} else if (second == null) {
@@ -15434,34 +16716,41 @@
this._tokenMap = tokenMap;
}
- AdjacentStrings visitAdjacentStrings(AdjacentStrings node) => new AdjacentStrings(cloneNodeList(node.strings));
+ @override
+ AdjacentStrings visitAdjacentStrings(AdjacentStrings node) => new AdjacentStrings(_cloneNodeList(node.strings));
+ @override
Annotation visitAnnotation(Annotation node) {
- Annotation copy = new Annotation(mapToken(node.atSign), cloneNode(node.name), mapToken(node.period), cloneNode(node.constructorName), cloneNode(node.arguments));
+ Annotation copy = new Annotation(_mapToken(node.atSign), _cloneNode(node.name), _mapToken(node.period), _cloneNode(node.constructorName), _cloneNode(node.arguments));
copy.element = node.element;
return copy;
}
+ @override
ArgumentDefinitionTest visitArgumentDefinitionTest(ArgumentDefinitionTest node) {
- ArgumentDefinitionTest copy = new ArgumentDefinitionTest(mapToken(node.question), cloneNode(node.identifier));
+ ArgumentDefinitionTest copy = new ArgumentDefinitionTest(_mapToken(node.question), _cloneNode(node.identifier));
copy.propagatedType = node.propagatedType;
copy.staticType = node.staticType;
return copy;
}
- ArgumentList visitArgumentList(ArgumentList node) => new ArgumentList(mapToken(node.leftParenthesis), cloneNodeList(node.arguments), mapToken(node.rightParenthesis));
+ @override
+ ArgumentList visitArgumentList(ArgumentList node) => new ArgumentList(_mapToken(node.leftParenthesis), _cloneNodeList(node.arguments), _mapToken(node.rightParenthesis));
+ @override
AsExpression visitAsExpression(AsExpression node) {
- AsExpression copy = new AsExpression(cloneNode(node.expression), mapToken(node.asOperator), cloneNode(node.type));
+ AsExpression copy = new AsExpression(_cloneNode(node.expression), _mapToken(node.asOperator), _cloneNode(node.type));
copy.propagatedType = node.propagatedType;
copy.staticType = node.staticType;
return copy;
}
- AstNode visitAssertStatement(AssertStatement node) => new AssertStatement(mapToken(node.keyword), mapToken(node.leftParenthesis), cloneNode(node.condition), mapToken(node.rightParenthesis), mapToken(node.semicolon));
+ @override
+ AstNode visitAssertStatement(AssertStatement node) => new AssertStatement(_mapToken(node.keyword), _mapToken(node.leftParenthesis), _cloneNode(node.condition), _mapToken(node.rightParenthesis), _mapToken(node.semicolon));
+ @override
AssignmentExpression visitAssignmentExpression(AssignmentExpression node) {
- AssignmentExpression copy = new AssignmentExpression(cloneNode(node.leftHandSide), mapToken(node.operator), cloneNode(node.rightHandSide));
+ AssignmentExpression copy = new AssignmentExpression(_cloneNode(node.leftHandSide), _mapToken(node.operator), _cloneNode(node.rightHandSide));
copy.propagatedElement = node.propagatedElement;
copy.propagatedType = node.propagatedType;
copy.staticElement = node.staticElement;
@@ -15469,8 +16758,9 @@
return copy;
}
+ @override
BinaryExpression visitBinaryExpression(BinaryExpression node) {
- BinaryExpression copy = new BinaryExpression(cloneNode(node.leftOperand), mapToken(node.operator), cloneNode(node.rightOperand));
+ BinaryExpression copy = new BinaryExpression(_cloneNode(node.leftOperand), _mapToken(node.operator), _cloneNode(node.rightOperand));
copy.propagatedElement = node.propagatedElement;
copy.propagatedType = node.propagatedType;
copy.staticElement = node.staticElement;
@@ -15478,136 +16768,171 @@
return copy;
}
- Block visitBlock(Block node) => new Block(mapToken(node.leftBracket), cloneNodeList(node.statements), mapToken(node.rightBracket));
+ @override
+ Block visitBlock(Block node) => new Block(_mapToken(node.leftBracket), _cloneNodeList(node.statements), _mapToken(node.rightBracket));
- BlockFunctionBody visitBlockFunctionBody(BlockFunctionBody node) => new BlockFunctionBody(cloneNode(node.block));
+ @override
+ BlockFunctionBody visitBlockFunctionBody(BlockFunctionBody node) => new BlockFunctionBody(_cloneNode(node.block));
+ @override
BooleanLiteral visitBooleanLiteral(BooleanLiteral node) {
- BooleanLiteral copy = new BooleanLiteral(mapToken(node.literal), node.value);
+ BooleanLiteral copy = new BooleanLiteral(_mapToken(node.literal), node.value);
copy.propagatedType = node.propagatedType;
copy.staticType = node.staticType;
return copy;
}
- BreakStatement visitBreakStatement(BreakStatement node) => new BreakStatement(mapToken(node.keyword), cloneNode(node.label), mapToken(node.semicolon));
+ @override
+ BreakStatement visitBreakStatement(BreakStatement node) => new BreakStatement(_mapToken(node.keyword), _cloneNode(node.label), _mapToken(node.semicolon));
+ @override
CascadeExpression visitCascadeExpression(CascadeExpression node) {
- CascadeExpression copy = new CascadeExpression(cloneNode(node.target), cloneNodeList(node.cascadeSections));
+ CascadeExpression copy = new CascadeExpression(_cloneNode(node.target), _cloneNodeList(node.cascadeSections));
copy.propagatedType = node.propagatedType;
copy.staticType = node.staticType;
return copy;
}
- CatchClause visitCatchClause(CatchClause node) => new CatchClause(mapToken(node.onKeyword), cloneNode(node.exceptionType), mapToken(node.catchKeyword), mapToken(node.leftParenthesis), cloneNode(node.exceptionParameter), mapToken(node.comma), cloneNode(node.stackTraceParameter), mapToken(node.rightParenthesis), cloneNode(node.body));
+ @override
+ CatchClause visitCatchClause(CatchClause node) => new CatchClause(_mapToken(node.onKeyword), _cloneNode(node.exceptionType), _mapToken(node.catchKeyword), _mapToken(node.leftParenthesis), _cloneNode(node.exceptionParameter), _mapToken(node.comma), _cloneNode(node.stackTraceParameter), _mapToken(node.rightParenthesis), _cloneNode(node.body));
+ @override
ClassDeclaration visitClassDeclaration(ClassDeclaration node) {
- ClassDeclaration copy = new ClassDeclaration(cloneNode(node.documentationComment), cloneNodeList(node.metadata), mapToken(node.abstractKeyword), mapToken(node.classKeyword), cloneNode(node.name), cloneNode(node.typeParameters), cloneNode(node.extendsClause), cloneNode(node.withClause), cloneNode(node.implementsClause), mapToken(node.leftBracket), cloneNodeList(node.members), mapToken(node.rightBracket));
- copy.nativeClause = cloneNode(node.nativeClause);
+ ClassDeclaration copy = new ClassDeclaration(_cloneNode(node.documentationComment), _cloneNodeList(node.metadata), _mapToken(node.abstractKeyword), _mapToken(node.classKeyword), _cloneNode(node.name), _cloneNode(node.typeParameters), _cloneNode(node.extendsClause), _cloneNode(node.withClause), _cloneNode(node.implementsClause), _mapToken(node.leftBracket), _cloneNodeList(node.members), _mapToken(node.rightBracket));
+ copy.nativeClause = _cloneNode(node.nativeClause);
return copy;
}
- ClassTypeAlias visitClassTypeAlias(ClassTypeAlias node) => new ClassTypeAlias(cloneNode(node.documentationComment), cloneNodeList(node.metadata), mapToken(node.keyword), cloneNode(node.name), cloneNode(node.typeParameters), mapToken(node.equals), mapToken(node.abstractKeyword), cloneNode(node.superclass), cloneNode(node.withClause), cloneNode(node.implementsClause), mapToken(node.semicolon));
+ @override
+ ClassTypeAlias visitClassTypeAlias(ClassTypeAlias node) => new ClassTypeAlias(_cloneNode(node.documentationComment), _cloneNodeList(node.metadata), _mapToken(node.keyword), _cloneNode(node.name), _cloneNode(node.typeParameters), _mapToken(node.equals), _mapToken(node.abstractKeyword), _cloneNode(node.superclass), _cloneNode(node.withClause), _cloneNode(node.implementsClause), _mapToken(node.semicolon));
+ @override
Comment visitComment(Comment node) {
if (node.isDocumentation) {
- return Comment.createDocumentationCommentWithReferences(mapTokens(node.tokens), cloneNodeList(node.references));
+ return Comment.createDocumentationCommentWithReferences(_mapTokens(node.tokens), _cloneNodeList(node.references));
} else if (node.isBlock) {
- return Comment.createBlockComment(mapTokens(node.tokens));
+ return Comment.createBlockComment(_mapTokens(node.tokens));
}
- return Comment.createEndOfLineComment(mapTokens(node.tokens));
+ return Comment.createEndOfLineComment(_mapTokens(node.tokens));
}
- CommentReference visitCommentReference(CommentReference node) => new CommentReference(mapToken(node.newKeyword), cloneNode(node.identifier));
+ @override
+ CommentReference visitCommentReference(CommentReference node) => new CommentReference(_mapToken(node.newKeyword), _cloneNode(node.identifier));
+ @override
CompilationUnit visitCompilationUnit(CompilationUnit node) {
- CompilationUnit copy = new CompilationUnit(mapToken(node.beginToken), cloneNode(node.scriptTag), cloneNodeList(node.directives), cloneNodeList(node.declarations), mapToken(node.endToken));
+ CompilationUnit copy = new CompilationUnit(_mapToken(node.beginToken), _cloneNode(node.scriptTag), _cloneNodeList(node.directives), _cloneNodeList(node.declarations), _mapToken(node.endToken));
copy.lineInfo = node.lineInfo;
copy.element = node.element;
return copy;
}
+ @override
ConditionalExpression visitConditionalExpression(ConditionalExpression node) {
- ConditionalExpression copy = new ConditionalExpression(cloneNode(node.condition), mapToken(node.question), cloneNode(node.thenExpression), mapToken(node.colon), cloneNode(node.elseExpression));
+ ConditionalExpression copy = new ConditionalExpression(_cloneNode(node.condition), _mapToken(node.question), _cloneNode(node.thenExpression), _mapToken(node.colon), _cloneNode(node.elseExpression));
copy.propagatedType = node.propagatedType;
copy.staticType = node.staticType;
return copy;
}
+ @override
ConstructorDeclaration visitConstructorDeclaration(ConstructorDeclaration node) {
- ConstructorDeclaration copy = new ConstructorDeclaration(cloneNode(node.documentationComment), cloneNodeList(node.metadata), mapToken(node.externalKeyword), mapToken(node.constKeyword), mapToken(node.factoryKeyword), cloneNode(node.returnType), mapToken(node.period), cloneNode(node.name), cloneNode(node.parameters), mapToken(node.separator), cloneNodeList(node.initializers), cloneNode(node.redirectedConstructor), cloneNode(node.body));
+ ConstructorDeclaration copy = new ConstructorDeclaration(_cloneNode(node.documentationComment), _cloneNodeList(node.metadata), _mapToken(node.externalKeyword), _mapToken(node.constKeyword), _mapToken(node.factoryKeyword), _cloneNode(node.returnType), _mapToken(node.period), _cloneNode(node.name), _cloneNode(node.parameters), _mapToken(node.separator), _cloneNodeList(node.initializers), _cloneNode(node.redirectedConstructor), _cloneNode(node.body));
copy.element = node.element;
return copy;
}
- ConstructorFieldInitializer visitConstructorFieldInitializer(ConstructorFieldInitializer node) => new ConstructorFieldInitializer(mapToken(node.keyword), mapToken(node.period), cloneNode(node.fieldName), mapToken(node.equals), cloneNode(node.expression));
+ @override
+ ConstructorFieldInitializer visitConstructorFieldInitializer(ConstructorFieldInitializer node) => new ConstructorFieldInitializer(_mapToken(node.keyword), _mapToken(node.period), _cloneNode(node.fieldName), _mapToken(node.equals), _cloneNode(node.expression));
+ @override
ConstructorName visitConstructorName(ConstructorName node) {
- ConstructorName copy = new ConstructorName(cloneNode(node.type), mapToken(node.period), cloneNode(node.name));
+ ConstructorName copy = new ConstructorName(_cloneNode(node.type), _mapToken(node.period), _cloneNode(node.name));
copy.staticElement = node.staticElement;
return copy;
}
- ContinueStatement visitContinueStatement(ContinueStatement node) => new ContinueStatement(mapToken(node.keyword), cloneNode(node.label), mapToken(node.semicolon));
+ @override
+ ContinueStatement visitContinueStatement(ContinueStatement node) => new ContinueStatement(_mapToken(node.keyword), _cloneNode(node.label), _mapToken(node.semicolon));
- DeclaredIdentifier visitDeclaredIdentifier(DeclaredIdentifier node) => new DeclaredIdentifier(cloneNode(node.documentationComment), cloneNodeList(node.metadata), mapToken(node.keyword), cloneNode(node.type), cloneNode(node.identifier));
+ @override
+ DeclaredIdentifier visitDeclaredIdentifier(DeclaredIdentifier node) => new DeclaredIdentifier(_cloneNode(node.documentationComment), _cloneNodeList(node.metadata), _mapToken(node.keyword), _cloneNode(node.type), _cloneNode(node.identifier));
- DefaultFormalParameter visitDefaultFormalParameter(DefaultFormalParameter node) => new DefaultFormalParameter(cloneNode(node.parameter), node.kind, mapToken(node.separator), cloneNode(node.defaultValue));
+ @override
+ DefaultFormalParameter visitDefaultFormalParameter(DefaultFormalParameter node) => new DefaultFormalParameter(_cloneNode(node.parameter), node.kind, _mapToken(node.separator), _cloneNode(node.defaultValue));
- DoStatement visitDoStatement(DoStatement node) => new DoStatement(mapToken(node.doKeyword), cloneNode(node.body), mapToken(node.whileKeyword), mapToken(node.leftParenthesis), cloneNode(node.condition), mapToken(node.rightParenthesis), mapToken(node.semicolon));
+ @override
+ DoStatement visitDoStatement(DoStatement node) => new DoStatement(_mapToken(node.doKeyword), _cloneNode(node.body), _mapToken(node.whileKeyword), _mapToken(node.leftParenthesis), _cloneNode(node.condition), _mapToken(node.rightParenthesis), _mapToken(node.semicolon));
+ @override
DoubleLiteral visitDoubleLiteral(DoubleLiteral node) {
- DoubleLiteral copy = new DoubleLiteral(mapToken(node.literal), node.value);
+ DoubleLiteral copy = new DoubleLiteral(_mapToken(node.literal), node.value);
copy.propagatedType = node.propagatedType;
copy.staticType = node.staticType;
return copy;
}
- EmptyFunctionBody visitEmptyFunctionBody(EmptyFunctionBody node) => new EmptyFunctionBody(mapToken(node.semicolon));
+ @override
+ EmptyFunctionBody visitEmptyFunctionBody(EmptyFunctionBody node) => new EmptyFunctionBody(_mapToken(node.semicolon));
- EmptyStatement visitEmptyStatement(EmptyStatement node) => new EmptyStatement(mapToken(node.semicolon));
+ @override
+ EmptyStatement visitEmptyStatement(EmptyStatement node) => new EmptyStatement(_mapToken(node.semicolon));
+ @override
ExportDirective visitExportDirective(ExportDirective node) {
- ExportDirective copy = new ExportDirective(cloneNode(node.documentationComment), cloneNodeList(node.metadata), mapToken(node.keyword), cloneNode(node.uri), cloneNodeList(node.combinators), mapToken(node.semicolon));
+ ExportDirective copy = new ExportDirective(_cloneNode(node.documentationComment), _cloneNodeList(node.metadata), _mapToken(node.keyword), _cloneNode(node.uri), _cloneNodeList(node.combinators), _mapToken(node.semicolon));
copy.element = node.element;
return copy;
}
- ExpressionFunctionBody visitExpressionFunctionBody(ExpressionFunctionBody node) => new ExpressionFunctionBody(mapToken(node.functionDefinition), cloneNode(node.expression), mapToken(node.semicolon));
+ @override
+ ExpressionFunctionBody visitExpressionFunctionBody(ExpressionFunctionBody node) => new ExpressionFunctionBody(_mapToken(node.functionDefinition), _cloneNode(node.expression), _mapToken(node.semicolon));
- ExpressionStatement visitExpressionStatement(ExpressionStatement node) => new ExpressionStatement(cloneNode(node.expression), mapToken(node.semicolon));
+ @override
+ ExpressionStatement visitExpressionStatement(ExpressionStatement node) => new ExpressionStatement(_cloneNode(node.expression), _mapToken(node.semicolon));
- ExtendsClause visitExtendsClause(ExtendsClause node) => new ExtendsClause(mapToken(node.keyword), cloneNode(node.superclass));
+ @override
+ ExtendsClause visitExtendsClause(ExtendsClause node) => new ExtendsClause(_mapToken(node.keyword), _cloneNode(node.superclass));
- FieldDeclaration visitFieldDeclaration(FieldDeclaration node) => new FieldDeclaration(cloneNode(node.documentationComment), cloneNodeList(node.metadata), mapToken(node.staticKeyword), cloneNode(node.fields), mapToken(node.semicolon));
+ @override
+ FieldDeclaration visitFieldDeclaration(FieldDeclaration node) => new FieldDeclaration(_cloneNode(node.documentationComment), _cloneNodeList(node.metadata), _mapToken(node.staticKeyword), _cloneNode(node.fields), _mapToken(node.semicolon));
- FieldFormalParameter visitFieldFormalParameter(FieldFormalParameter node) => new FieldFormalParameter(cloneNode(node.documentationComment), cloneNodeList(node.metadata), mapToken(node.keyword), cloneNode(node.type), mapToken(node.thisToken), mapToken(node.period), cloneNode(node.identifier), cloneNode(node.parameters));
+ @override
+ FieldFormalParameter visitFieldFormalParameter(FieldFormalParameter node) => new FieldFormalParameter(_cloneNode(node.documentationComment), _cloneNodeList(node.metadata), _mapToken(node.keyword), _cloneNode(node.type), _mapToken(node.thisToken), _mapToken(node.period), _cloneNode(node.identifier), _cloneNode(node.parameters));
+ @override
ForEachStatement visitForEachStatement(ForEachStatement node) {
DeclaredIdentifier loopVariable = node.loopVariable;
if (loopVariable == null) {
- return new ForEachStatement.con2(mapToken(node.forKeyword), mapToken(node.leftParenthesis), cloneNode(node.identifier), mapToken(node.inKeyword), cloneNode(node.iterator), mapToken(node.rightParenthesis), cloneNode(node.body));
+ return new ForEachStatement.con2(_mapToken(node.forKeyword), _mapToken(node.leftParenthesis), _cloneNode(node.identifier), _mapToken(node.inKeyword), _cloneNode(node.iterator), _mapToken(node.rightParenthesis), _cloneNode(node.body));
}
- return new ForEachStatement.con1(mapToken(node.forKeyword), mapToken(node.leftParenthesis), cloneNode(loopVariable), mapToken(node.inKeyword), cloneNode(node.iterator), mapToken(node.rightParenthesis), cloneNode(node.body));
+ return new ForEachStatement.con1(_mapToken(node.forKeyword), _mapToken(node.leftParenthesis), _cloneNode(loopVariable), _mapToken(node.inKeyword), _cloneNode(node.iterator), _mapToken(node.rightParenthesis), _cloneNode(node.body));
}
- FormalParameterList visitFormalParameterList(FormalParameterList node) => new FormalParameterList(mapToken(node.leftParenthesis), cloneNodeList(node.parameters), mapToken(node.leftDelimiter), mapToken(node.rightDelimiter), mapToken(node.rightParenthesis));
+ @override
+ FormalParameterList visitFormalParameterList(FormalParameterList node) => new FormalParameterList(_mapToken(node.leftParenthesis), _cloneNodeList(node.parameters), _mapToken(node.leftDelimiter), _mapToken(node.rightDelimiter), _mapToken(node.rightParenthesis));
- ForStatement visitForStatement(ForStatement node) => new ForStatement(mapToken(node.forKeyword), mapToken(node.leftParenthesis), cloneNode(node.variables), cloneNode(node.initialization), mapToken(node.leftSeparator), cloneNode(node.condition), mapToken(node.rightSeparator), cloneNodeList(node.updaters), mapToken(node.rightParenthesis), cloneNode(node.body));
+ @override
+ ForStatement visitForStatement(ForStatement node) => new ForStatement(_mapToken(node.forKeyword), _mapToken(node.leftParenthesis), _cloneNode(node.variables), _cloneNode(node.initialization), _mapToken(node.leftSeparator), _cloneNode(node.condition), _mapToken(node.rightSeparator), _cloneNodeList(node.updaters), _mapToken(node.rightParenthesis), _cloneNode(node.body));
- FunctionDeclaration visitFunctionDeclaration(FunctionDeclaration node) => new FunctionDeclaration(cloneNode(node.documentationComment), cloneNodeList(node.metadata), mapToken(node.externalKeyword), cloneNode(node.returnType), mapToken(node.propertyKeyword), cloneNode(node.name), cloneNode(node.functionExpression));
+ @override
+ FunctionDeclaration visitFunctionDeclaration(FunctionDeclaration node) => new FunctionDeclaration(_cloneNode(node.documentationComment), _cloneNodeList(node.metadata), _mapToken(node.externalKeyword), _cloneNode(node.returnType), _mapToken(node.propertyKeyword), _cloneNode(node.name), _cloneNode(node.functionExpression));
- FunctionDeclarationStatement visitFunctionDeclarationStatement(FunctionDeclarationStatement node) => new FunctionDeclarationStatement(cloneNode(node.functionDeclaration));
+ @override
+ FunctionDeclarationStatement visitFunctionDeclarationStatement(FunctionDeclarationStatement node) => new FunctionDeclarationStatement(_cloneNode(node.functionDeclaration));
+ @override
FunctionExpression visitFunctionExpression(FunctionExpression node) {
- FunctionExpression copy = new FunctionExpression(cloneNode(node.parameters), cloneNode(node.body));
+ FunctionExpression copy = new FunctionExpression(_cloneNode(node.parameters), _cloneNode(node.body));
copy.element = node.element;
copy.propagatedType = node.propagatedType;
copy.staticType = node.staticType;
return copy;
}
+ @override
FunctionExpressionInvocation visitFunctionExpressionInvocation(FunctionExpressionInvocation node) {
- FunctionExpressionInvocation copy = new FunctionExpressionInvocation(cloneNode(node.function), cloneNode(node.argumentList));
+ FunctionExpressionInvocation copy = new FunctionExpressionInvocation(_cloneNode(node.function), _cloneNode(node.argumentList));
copy.propagatedElement = node.propagatedElement;
copy.propagatedType = node.propagatedType;
copy.staticElement = node.staticElement;
@@ -15615,25 +16940,32 @@
return copy;
}
- FunctionTypeAlias visitFunctionTypeAlias(FunctionTypeAlias node) => new FunctionTypeAlias(cloneNode(node.documentationComment), cloneNodeList(node.metadata), mapToken(node.keyword), cloneNode(node.returnType), cloneNode(node.name), cloneNode(node.typeParameters), cloneNode(node.parameters), mapToken(node.semicolon));
+ @override
+ FunctionTypeAlias visitFunctionTypeAlias(FunctionTypeAlias node) => new FunctionTypeAlias(_cloneNode(node.documentationComment), _cloneNodeList(node.metadata), _mapToken(node.keyword), _cloneNode(node.returnType), _cloneNode(node.name), _cloneNode(node.typeParameters), _cloneNode(node.parameters), _mapToken(node.semicolon));
- FunctionTypedFormalParameter visitFunctionTypedFormalParameter(FunctionTypedFormalParameter node) => new FunctionTypedFormalParameter(cloneNode(node.documentationComment), cloneNodeList(node.metadata), cloneNode(node.returnType), cloneNode(node.identifier), cloneNode(node.parameters));
+ @override
+ FunctionTypedFormalParameter visitFunctionTypedFormalParameter(FunctionTypedFormalParameter node) => new FunctionTypedFormalParameter(_cloneNode(node.documentationComment), _cloneNodeList(node.metadata), _cloneNode(node.returnType), _cloneNode(node.identifier), _cloneNode(node.parameters));
- HideCombinator visitHideCombinator(HideCombinator node) => new HideCombinator(mapToken(node.keyword), cloneNodeList(node.hiddenNames));
+ @override
+ HideCombinator visitHideCombinator(HideCombinator node) => new HideCombinator(_mapToken(node.keyword), _cloneNodeList(node.hiddenNames));
- IfStatement visitIfStatement(IfStatement node) => new IfStatement(mapToken(node.ifKeyword), mapToken(node.leftParenthesis), cloneNode(node.condition), mapToken(node.rightParenthesis), cloneNode(node.thenStatement), mapToken(node.elseKeyword), cloneNode(node.elseStatement));
+ @override
+ IfStatement visitIfStatement(IfStatement node) => new IfStatement(_mapToken(node.ifKeyword), _mapToken(node.leftParenthesis), _cloneNode(node.condition), _mapToken(node.rightParenthesis), _cloneNode(node.thenStatement), _mapToken(node.elseKeyword), _cloneNode(node.elseStatement));
- ImplementsClause visitImplementsClause(ImplementsClause node) => new ImplementsClause(mapToken(node.keyword), cloneNodeList(node.interfaces));
+ @override
+ ImplementsClause visitImplementsClause(ImplementsClause node) => new ImplementsClause(_mapToken(node.keyword), _cloneNodeList(node.interfaces));
- ImportDirective visitImportDirective(ImportDirective node) => new ImportDirective(cloneNode(node.documentationComment), cloneNodeList(node.metadata), mapToken(node.keyword), cloneNode(node.uri), mapToken(node.asToken), cloneNode(node.prefix), cloneNodeList(node.combinators), mapToken(node.semicolon));
+ @override
+ ImportDirective visitImportDirective(ImportDirective node) => new ImportDirective(_cloneNode(node.documentationComment), _cloneNodeList(node.metadata), _mapToken(node.keyword), _cloneNode(node.uri), _mapToken(node.asToken), _cloneNode(node.prefix), _cloneNodeList(node.combinators), _mapToken(node.semicolon));
+ @override
IndexExpression visitIndexExpression(IndexExpression node) {
- Token period = mapToken(node.period);
+ Token period = _mapToken(node.period);
IndexExpression copy;
if (period == null) {
- copy = new IndexExpression.forTarget(cloneNode(node.target), mapToken(node.leftBracket), cloneNode(node.index), mapToken(node.rightBracket));
+ copy = new IndexExpression.forTarget(_cloneNode(node.target), _mapToken(node.leftBracket), _cloneNode(node.index), _mapToken(node.rightBracket));
} else {
- copy = new IndexExpression.forCascade(period, mapToken(node.leftBracket), cloneNode(node.index), mapToken(node.rightBracket));
+ copy = new IndexExpression.forCascade(period, _mapToken(node.leftBracket), _cloneNode(node.index), _mapToken(node.rightBracket));
}
copy.auxiliaryElements = node.auxiliaryElements;
copy.propagatedElement = node.propagatedElement;
@@ -15643,109 +16975,131 @@
return copy;
}
+ @override
InstanceCreationExpression visitInstanceCreationExpression(InstanceCreationExpression node) {
- InstanceCreationExpression copy = new InstanceCreationExpression(mapToken(node.keyword), cloneNode(node.constructorName), cloneNode(node.argumentList));
+ InstanceCreationExpression copy = new InstanceCreationExpression(_mapToken(node.keyword), _cloneNode(node.constructorName), _cloneNode(node.argumentList));
copy.propagatedType = node.propagatedType;
copy.staticElement = node.staticElement;
copy.staticType = node.staticType;
return copy;
}
+ @override
IntegerLiteral visitIntegerLiteral(IntegerLiteral node) {
- IntegerLiteral copy = new IntegerLiteral(mapToken(node.literal), node.value);
+ IntegerLiteral copy = new IntegerLiteral(_mapToken(node.literal), node.value);
copy.propagatedType = node.propagatedType;
copy.staticType = node.staticType;
return copy;
}
- InterpolationExpression visitInterpolationExpression(InterpolationExpression node) => new InterpolationExpression(mapToken(node.leftBracket), cloneNode(node.expression), mapToken(node.rightBracket));
+ @override
+ InterpolationExpression visitInterpolationExpression(InterpolationExpression node) => new InterpolationExpression(_mapToken(node.leftBracket), _cloneNode(node.expression), _mapToken(node.rightBracket));
- InterpolationString visitInterpolationString(InterpolationString node) => new InterpolationString(mapToken(node.contents), node.value);
+ @override
+ InterpolationString visitInterpolationString(InterpolationString node) => new InterpolationString(_mapToken(node.contents), node.value);
+ @override
IsExpression visitIsExpression(IsExpression node) {
- IsExpression copy = new IsExpression(cloneNode(node.expression), mapToken(node.isOperator), mapToken(node.notOperator), cloneNode(node.type));
+ IsExpression copy = new IsExpression(_cloneNode(node.expression), _mapToken(node.isOperator), _mapToken(node.notOperator), _cloneNode(node.type));
copy.propagatedType = node.propagatedType;
copy.staticType = node.staticType;
return copy;
}
- Label visitLabel(Label node) => new Label(cloneNode(node.label), mapToken(node.colon));
+ @override
+ Label visitLabel(Label node) => new Label(_cloneNode(node.label), _mapToken(node.colon));
- LabeledStatement visitLabeledStatement(LabeledStatement node) => new LabeledStatement(cloneNodeList(node.labels), cloneNode(node.statement));
+ @override
+ LabeledStatement visitLabeledStatement(LabeledStatement node) => new LabeledStatement(_cloneNodeList(node.labels), _cloneNode(node.statement));
- LibraryDirective visitLibraryDirective(LibraryDirective node) => new LibraryDirective(cloneNode(node.documentationComment), cloneNodeList(node.metadata), mapToken(node.libraryToken), cloneNode(node.name), mapToken(node.semicolon));
+ @override
+ LibraryDirective visitLibraryDirective(LibraryDirective node) => new LibraryDirective(_cloneNode(node.documentationComment), _cloneNodeList(node.metadata), _mapToken(node.libraryToken), _cloneNode(node.name), _mapToken(node.semicolon));
+ @override
LibraryIdentifier visitLibraryIdentifier(LibraryIdentifier node) {
- LibraryIdentifier copy = new LibraryIdentifier(cloneNodeList(node.components));
+ LibraryIdentifier copy = new LibraryIdentifier(_cloneNodeList(node.components));
copy.propagatedType = node.propagatedType;
copy.staticType = node.staticType;
return copy;
}
+ @override
ListLiteral visitListLiteral(ListLiteral node) {
- ListLiteral copy = new ListLiteral(mapToken(node.constKeyword), cloneNode(node.typeArguments), mapToken(node.leftBracket), cloneNodeList(node.elements), mapToken(node.rightBracket));
+ ListLiteral copy = new ListLiteral(_mapToken(node.constKeyword), _cloneNode(node.typeArguments), _mapToken(node.leftBracket), _cloneNodeList(node.elements), _mapToken(node.rightBracket));
copy.propagatedType = node.propagatedType;
copy.staticType = node.staticType;
return copy;
}
+ @override
MapLiteral visitMapLiteral(MapLiteral node) {
- MapLiteral copy = new MapLiteral(mapToken(node.constKeyword), cloneNode(node.typeArguments), mapToken(node.leftBracket), cloneNodeList(node.entries), mapToken(node.rightBracket));
+ MapLiteral copy = new MapLiteral(_mapToken(node.constKeyword), _cloneNode(node.typeArguments), _mapToken(node.leftBracket), _cloneNodeList(node.entries), _mapToken(node.rightBracket));
copy.propagatedType = node.propagatedType;
copy.staticType = node.staticType;
return copy;
}
- MapLiteralEntry visitMapLiteralEntry(MapLiteralEntry node) => new MapLiteralEntry(cloneNode(node.key), mapToken(node.separator), cloneNode(node.value));
+ @override
+ MapLiteralEntry visitMapLiteralEntry(MapLiteralEntry node) => new MapLiteralEntry(_cloneNode(node.key), _mapToken(node.separator), _cloneNode(node.value));
- MethodDeclaration visitMethodDeclaration(MethodDeclaration node) => new MethodDeclaration(cloneNode(node.documentationComment), cloneNodeList(node.metadata), mapToken(node.externalKeyword), mapToken(node.modifierKeyword), cloneNode(node.returnType), mapToken(node.propertyKeyword), mapToken(node.operatorKeyword), cloneNode(node.name), cloneNode(node.parameters), cloneNode(node.body));
+ @override
+ MethodDeclaration visitMethodDeclaration(MethodDeclaration node) => new MethodDeclaration(_cloneNode(node.documentationComment), _cloneNodeList(node.metadata), _mapToken(node.externalKeyword), _mapToken(node.modifierKeyword), _cloneNode(node.returnType), _mapToken(node.propertyKeyword), _mapToken(node.operatorKeyword), _cloneNode(node.name), _cloneNode(node.parameters), _cloneNode(node.body));
+ @override
MethodInvocation visitMethodInvocation(MethodInvocation node) {
- MethodInvocation copy = new MethodInvocation(cloneNode(node.target), mapToken(node.period), cloneNode(node.methodName), cloneNode(node.argumentList));
+ MethodInvocation copy = new MethodInvocation(_cloneNode(node.target), _mapToken(node.period), _cloneNode(node.methodName), _cloneNode(node.argumentList));
copy.propagatedType = node.propagatedType;
copy.staticType = node.staticType;
return copy;
}
+ @override
NamedExpression visitNamedExpression(NamedExpression node) {
- NamedExpression copy = new NamedExpression(cloneNode(node.name), cloneNode(node.expression));
+ NamedExpression copy = new NamedExpression(_cloneNode(node.name), _cloneNode(node.expression));
copy.propagatedType = node.propagatedType;
copy.staticType = node.staticType;
return copy;
}
- AstNode visitNativeClause(NativeClause node) => new NativeClause(mapToken(node.keyword), cloneNode(node.name));
+ @override
+ AstNode visitNativeClause(NativeClause node) => new NativeClause(_mapToken(node.keyword), _cloneNode(node.name));
- NativeFunctionBody visitNativeFunctionBody(NativeFunctionBody node) => new NativeFunctionBody(mapToken(node.nativeToken), cloneNode(node.stringLiteral), mapToken(node.semicolon));
+ @override
+ NativeFunctionBody visitNativeFunctionBody(NativeFunctionBody node) => new NativeFunctionBody(_mapToken(node.nativeToken), _cloneNode(node.stringLiteral), _mapToken(node.semicolon));
+ @override
NullLiteral visitNullLiteral(NullLiteral node) {
- NullLiteral copy = new NullLiteral(mapToken(node.literal));
+ NullLiteral copy = new NullLiteral(_mapToken(node.literal));
copy.propagatedType = node.propagatedType;
copy.staticType = node.staticType;
return copy;
}
+ @override
ParenthesizedExpression visitParenthesizedExpression(ParenthesizedExpression node) {
- ParenthesizedExpression copy = new ParenthesizedExpression(mapToken(node.leftParenthesis), cloneNode(node.expression), mapToken(node.rightParenthesis));
+ ParenthesizedExpression copy = new ParenthesizedExpression(_mapToken(node.leftParenthesis), _cloneNode(node.expression), _mapToken(node.rightParenthesis));
copy.propagatedType = node.propagatedType;
copy.staticType = node.staticType;
return copy;
}
+ @override
PartDirective visitPartDirective(PartDirective node) {
- PartDirective copy = new PartDirective(cloneNode(node.documentationComment), cloneNodeList(node.metadata), mapToken(node.partToken), cloneNode(node.uri), mapToken(node.semicolon));
+ PartDirective copy = new PartDirective(_cloneNode(node.documentationComment), _cloneNodeList(node.metadata), _mapToken(node.partToken), _cloneNode(node.uri), _mapToken(node.semicolon));
copy.element = node.element;
return copy;
}
+ @override
PartOfDirective visitPartOfDirective(PartOfDirective node) {
- PartOfDirective copy = new PartOfDirective(cloneNode(node.documentationComment), cloneNodeList(node.metadata), mapToken(node.partToken), mapToken(node.ofToken), cloneNode(node.libraryName), mapToken(node.semicolon));
+ PartOfDirective copy = new PartOfDirective(_cloneNode(node.documentationComment), _cloneNodeList(node.metadata), _mapToken(node.partToken), _mapToken(node.ofToken), _cloneNode(node.libraryName), _mapToken(node.semicolon));
copy.element = node.element;
return copy;
}
+ @override
PostfixExpression visitPostfixExpression(PostfixExpression node) {
- PostfixExpression copy = new PostfixExpression(cloneNode(node.operand), mapToken(node.operator));
+ PostfixExpression copy = new PostfixExpression(_cloneNode(node.operand), _mapToken(node.operator));
copy.propagatedElement = node.propagatedElement;
copy.propagatedType = node.propagatedType;
copy.staticElement = node.staticElement;
@@ -15753,15 +17107,17 @@
return copy;
}
+ @override
PrefixedIdentifier visitPrefixedIdentifier(PrefixedIdentifier node) {
- PrefixedIdentifier copy = new PrefixedIdentifier(cloneNode(node.prefix), mapToken(node.period), cloneNode(node.identifier));
+ PrefixedIdentifier copy = new PrefixedIdentifier(_cloneNode(node.prefix), _mapToken(node.period), _cloneNode(node.identifier));
copy.propagatedType = node.propagatedType;
copy.staticType = node.staticType;
return copy;
}
+ @override
PrefixExpression visitPrefixExpression(PrefixExpression node) {
- PrefixExpression copy = new PrefixExpression(mapToken(node.operator), cloneNode(node.operand));
+ PrefixExpression copy = new PrefixExpression(_mapToken(node.operator), _cloneNode(node.operand));
copy.propagatedElement = node.propagatedElement;
copy.propagatedType = node.propagatedType;
copy.staticElement = node.staticElement;
@@ -15769,36 +17125,44 @@
return copy;
}
+ @override
PropertyAccess visitPropertyAccess(PropertyAccess node) {
- PropertyAccess copy = new PropertyAccess(cloneNode(node.target), mapToken(node.operator), cloneNode(node.propertyName));
+ PropertyAccess copy = new PropertyAccess(_cloneNode(node.target), _mapToken(node.operator), _cloneNode(node.propertyName));
copy.propagatedType = node.propagatedType;
copy.staticType = node.staticType;
return copy;
}
+ @override
RedirectingConstructorInvocation visitRedirectingConstructorInvocation(RedirectingConstructorInvocation node) {
- RedirectingConstructorInvocation copy = new RedirectingConstructorInvocation(mapToken(node.keyword), mapToken(node.period), cloneNode(node.constructorName), cloneNode(node.argumentList));
+ RedirectingConstructorInvocation copy = new RedirectingConstructorInvocation(_mapToken(node.keyword), _mapToken(node.period), _cloneNode(node.constructorName), _cloneNode(node.argumentList));
copy.staticElement = node.staticElement;
return copy;
}
+ @override
RethrowExpression visitRethrowExpression(RethrowExpression node) {
- RethrowExpression copy = new RethrowExpression(mapToken(node.keyword));
+ RethrowExpression copy = new RethrowExpression(_mapToken(node.keyword));
copy.propagatedType = node.propagatedType;
copy.staticType = node.staticType;
return copy;
}
- ReturnStatement visitReturnStatement(ReturnStatement node) => new ReturnStatement(mapToken(node.keyword), cloneNode(node.expression), mapToken(node.semicolon));
+ @override
+ ReturnStatement visitReturnStatement(ReturnStatement node) => new ReturnStatement(_mapToken(node.keyword), _cloneNode(node.expression), _mapToken(node.semicolon));
- ScriptTag visitScriptTag(ScriptTag node) => new ScriptTag(mapToken(node.scriptTag));
+ @override
+ ScriptTag visitScriptTag(ScriptTag node) => new ScriptTag(_mapToken(node.scriptTag));
- ShowCombinator visitShowCombinator(ShowCombinator node) => new ShowCombinator(mapToken(node.keyword), cloneNodeList(node.shownNames));
+ @override
+ ShowCombinator visitShowCombinator(ShowCombinator node) => new ShowCombinator(_mapToken(node.keyword), _cloneNodeList(node.shownNames));
- SimpleFormalParameter visitSimpleFormalParameter(SimpleFormalParameter node) => new SimpleFormalParameter(cloneNode(node.documentationComment), cloneNodeList(node.metadata), mapToken(node.keyword), cloneNode(node.type), cloneNode(node.identifier));
+ @override
+ SimpleFormalParameter visitSimpleFormalParameter(SimpleFormalParameter node) => new SimpleFormalParameter(_cloneNode(node.documentationComment), _cloneNodeList(node.metadata), _mapToken(node.keyword), _cloneNode(node.type), _cloneNode(node.identifier));
+ @override
SimpleIdentifier visitSimpleIdentifier(SimpleIdentifier node) {
- Token mappedToken = mapToken(node.token);
+ Token mappedToken = _mapToken(node.token);
if (mappedToken == null) {
// This only happens for SimpleIdentifiers created by the parser as part of scanning
// documentation comments (the tokens for those identifiers are not in the original token
@@ -15815,87 +17179,108 @@
return copy;
}
+ @override
SimpleStringLiteral visitSimpleStringLiteral(SimpleStringLiteral node) {
- SimpleStringLiteral copy = new SimpleStringLiteral(mapToken(node.literal), node.value);
+ SimpleStringLiteral copy = new SimpleStringLiteral(_mapToken(node.literal), node.value);
copy.propagatedType = node.propagatedType;
copy.staticType = node.staticType;
return copy;
}
+ @override
StringInterpolation visitStringInterpolation(StringInterpolation node) {
- StringInterpolation copy = new StringInterpolation(cloneNodeList(node.elements));
+ StringInterpolation copy = new StringInterpolation(_cloneNodeList(node.elements));
copy.propagatedType = node.propagatedType;
copy.staticType = node.staticType;
return copy;
}
+ @override
SuperConstructorInvocation visitSuperConstructorInvocation(SuperConstructorInvocation node) {
- SuperConstructorInvocation copy = new SuperConstructorInvocation(mapToken(node.keyword), mapToken(node.period), cloneNode(node.constructorName), cloneNode(node.argumentList));
+ SuperConstructorInvocation copy = new SuperConstructorInvocation(_mapToken(node.keyword), _mapToken(node.period), _cloneNode(node.constructorName), _cloneNode(node.argumentList));
copy.staticElement = node.staticElement;
return copy;
}
+ @override
SuperExpression visitSuperExpression(SuperExpression node) {
- SuperExpression copy = new SuperExpression(mapToken(node.keyword));
+ SuperExpression copy = new SuperExpression(_mapToken(node.keyword));
copy.propagatedType = node.propagatedType;
copy.staticType = node.staticType;
return copy;
}
- SwitchCase visitSwitchCase(SwitchCase node) => new SwitchCase(cloneNodeList(node.labels), mapToken(node.keyword), cloneNode(node.expression), mapToken(node.colon), cloneNodeList(node.statements));
+ @override
+ SwitchCase visitSwitchCase(SwitchCase node) => new SwitchCase(_cloneNodeList(node.labels), _mapToken(node.keyword), _cloneNode(node.expression), _mapToken(node.colon), _cloneNodeList(node.statements));
- SwitchDefault visitSwitchDefault(SwitchDefault node) => new SwitchDefault(cloneNodeList(node.labels), mapToken(node.keyword), mapToken(node.colon), cloneNodeList(node.statements));
+ @override
+ SwitchDefault visitSwitchDefault(SwitchDefault node) => new SwitchDefault(_cloneNodeList(node.labels), _mapToken(node.keyword), _mapToken(node.colon), _cloneNodeList(node.statements));
- SwitchStatement visitSwitchStatement(SwitchStatement node) => new SwitchStatement(mapToken(node.keyword), mapToken(node.leftParenthesis), cloneNode(node.expression), mapToken(node.rightParenthesis), mapToken(node.leftBracket), cloneNodeList(node.members), mapToken(node.rightBracket));
+ @override
+ SwitchStatement visitSwitchStatement(SwitchStatement node) => new SwitchStatement(_mapToken(node.keyword), _mapToken(node.leftParenthesis), _cloneNode(node.expression), _mapToken(node.rightParenthesis), _mapToken(node.leftBracket), _cloneNodeList(node.members), _mapToken(node.rightBracket));
+ @override
AstNode visitSymbolLiteral(SymbolLiteral node) {
- SymbolLiteral copy = new SymbolLiteral(mapToken(node.poundSign), mapTokens(node.components));
+ SymbolLiteral copy = new SymbolLiteral(_mapToken(node.poundSign), _mapTokens(node.components));
copy.propagatedType = node.propagatedType;
copy.staticType = node.staticType;
return copy;
}
+ @override
ThisExpression visitThisExpression(ThisExpression node) {
- ThisExpression copy = new ThisExpression(mapToken(node.keyword));
+ ThisExpression copy = new ThisExpression(_mapToken(node.keyword));
copy.propagatedType = node.propagatedType;
copy.staticType = node.staticType;
return copy;
}
+ @override
ThrowExpression visitThrowExpression(ThrowExpression node) {
- ThrowExpression copy = new ThrowExpression(mapToken(node.keyword), cloneNode(node.expression));
+ ThrowExpression copy = new ThrowExpression(_mapToken(node.keyword), _cloneNode(node.expression));
copy.propagatedType = node.propagatedType;
copy.staticType = node.staticType;
return copy;
}
- TopLevelVariableDeclaration visitTopLevelVariableDeclaration(TopLevelVariableDeclaration node) => new TopLevelVariableDeclaration(cloneNode(node.documentationComment), cloneNodeList(node.metadata), cloneNode(node.variables), mapToken(node.semicolon));
+ @override
+ TopLevelVariableDeclaration visitTopLevelVariableDeclaration(TopLevelVariableDeclaration node) => new TopLevelVariableDeclaration(_cloneNode(node.documentationComment), _cloneNodeList(node.metadata), _cloneNode(node.variables), _mapToken(node.semicolon));
- TryStatement visitTryStatement(TryStatement node) => new TryStatement(mapToken(node.tryKeyword), cloneNode(node.body), cloneNodeList(node.catchClauses), mapToken(node.finallyKeyword), cloneNode(node.finallyBlock));
+ @override
+ TryStatement visitTryStatement(TryStatement node) => new TryStatement(_mapToken(node.tryKeyword), _cloneNode(node.body), _cloneNodeList(node.catchClauses), _mapToken(node.finallyKeyword), _cloneNode(node.finallyBlock));
- TypeArgumentList visitTypeArgumentList(TypeArgumentList node) => new TypeArgumentList(mapToken(node.leftBracket), cloneNodeList(node.arguments), mapToken(node.rightBracket));
+ @override
+ TypeArgumentList visitTypeArgumentList(TypeArgumentList node) => new TypeArgumentList(_mapToken(node.leftBracket), _cloneNodeList(node.arguments), _mapToken(node.rightBracket));
+ @override
TypeName visitTypeName(TypeName node) {
- TypeName copy = new TypeName(cloneNode(node.name), cloneNode(node.typeArguments));
+ TypeName copy = new TypeName(_cloneNode(node.name), _cloneNode(node.typeArguments));
copy.type = node.type;
return copy;
}
- TypeParameter visitTypeParameter(TypeParameter node) => new TypeParameter(cloneNode(node.documentationComment), cloneNodeList(node.metadata), cloneNode(node.name), mapToken(node.keyword), cloneNode(node.bound));
+ @override
+ TypeParameter visitTypeParameter(TypeParameter node) => new TypeParameter(_cloneNode(node.documentationComment), _cloneNodeList(node.metadata), _cloneNode(node.name), _mapToken(node.keyword), _cloneNode(node.bound));
- TypeParameterList visitTypeParameterList(TypeParameterList node) => new TypeParameterList(mapToken(node.leftBracket), cloneNodeList(node.typeParameters), mapToken(node.rightBracket));
+ @override
+ TypeParameterList visitTypeParameterList(TypeParameterList node) => new TypeParameterList(_mapToken(node.leftBracket), _cloneNodeList(node.typeParameters), _mapToken(node.rightBracket));
- VariableDeclaration visitVariableDeclaration(VariableDeclaration node) => new VariableDeclaration(null, cloneNodeList(node.metadata), cloneNode(node.name), mapToken(node.equals), cloneNode(node.initializer));
+ @override
+ VariableDeclaration visitVariableDeclaration(VariableDeclaration node) => new VariableDeclaration(null, _cloneNodeList(node.metadata), _cloneNode(node.name), _mapToken(node.equals), _cloneNode(node.initializer));
- VariableDeclarationList visitVariableDeclarationList(VariableDeclarationList node) => new VariableDeclarationList(null, cloneNodeList(node.metadata), mapToken(node.keyword), cloneNode(node.type), cloneNodeList(node.variables));
+ @override
+ VariableDeclarationList visitVariableDeclarationList(VariableDeclarationList node) => new VariableDeclarationList(null, _cloneNodeList(node.metadata), _mapToken(node.keyword), _cloneNode(node.type), _cloneNodeList(node.variables));
- VariableDeclarationStatement visitVariableDeclarationStatement(VariableDeclarationStatement node) => new VariableDeclarationStatement(cloneNode(node.variables), mapToken(node.semicolon));
+ @override
+ VariableDeclarationStatement visitVariableDeclarationStatement(VariableDeclarationStatement node) => new VariableDeclarationStatement(_cloneNode(node.variables), _mapToken(node.semicolon));
- WhileStatement visitWhileStatement(WhileStatement node) => new WhileStatement(mapToken(node.keyword), mapToken(node.leftParenthesis), cloneNode(node.condition), mapToken(node.rightParenthesis), cloneNode(node.body));
+ @override
+ WhileStatement visitWhileStatement(WhileStatement node) => new WhileStatement(_mapToken(node.keyword), _mapToken(node.leftParenthesis), _cloneNode(node.condition), _mapToken(node.rightParenthesis), _cloneNode(node.body));
- WithClause visitWithClause(WithClause node) => new WithClause(mapToken(node.withKeyword), cloneNodeList(node.mixinTypes));
+ @override
+ WithClause visitWithClause(WithClause node) => new WithClause(_mapToken(node.withKeyword), _cloneNodeList(node.mixinTypes));
- AstNode cloneNode(AstNode node) {
+ AstNode _cloneNode(AstNode node) {
if (node == null) {
return null;
}
@@ -15905,25 +17290,25 @@
return node.accept(this) as AstNode;
}
- List cloneNodeList(NodeList nodes) {
+ List _cloneNodeList(NodeList nodes) {
List clonedNodes = new List();
for (AstNode node in nodes) {
- clonedNodes.add(cloneNode(node));
+ clonedNodes.add(_cloneNode(node));
}
return clonedNodes;
}
- Token mapToken(Token oldToken) {
+ Token _mapToken(Token oldToken) {
if (oldToken == null) {
return null;
}
return _tokenMap.get(oldToken);
}
- List<Token> mapTokens(List<Token> oldTokens) {
+ List<Token> _mapTokens(List<Token> oldTokens) {
List<Token> newTokens = new List<Token>(oldTokens.length);
for (int index = 0; index < newTokens.length; index++) {
- newTokens[index] = mapToken(oldTokens[index]);
+ newTokens[index] = _mapToken(oldTokens[index]);
}
return newTokens;
}
@@ -15956,45 +17341,52 @@
Map<String, SimpleIdentifier> get locals => _locals;
+ @override
Object visitBlock(Block node) {
- checkStatements(node.statements);
+ _checkStatements(node.statements);
return super.visitBlock(node);
}
+ @override
Object visitCatchClause(CatchClause node) {
- addToScope(node.exceptionParameter);
- addToScope(node.stackTraceParameter);
+ _addToScope(node.exceptionParameter);
+ _addToScope(node.stackTraceParameter);
return super.visitCatchClause(node);
}
+ @override
Object visitConstructorDeclaration(ConstructorDeclaration node) {
if (_immediateChild != node.parameters) {
- addParameters(node.parameters.parameters);
+ _addParameters(node.parameters.parameters);
}
_declarationNode = node;
return null;
}
+ @override
Object visitFieldDeclaration(FieldDeclaration node) {
_declarationNode = node;
return null;
}
+ @override
Object visitForEachStatement(ForEachStatement node) {
DeclaredIdentifier loopVariable = node.loopVariable;
if (loopVariable != null) {
- addToScope(loopVariable.identifier);
+ _addToScope(loopVariable.identifier);
}
return super.visitForEachStatement(node);
}
+ @override
Object visitForStatement(ForStatement node) {
if (_immediateChild != node.variables && node.variables != null) {
- addVariables(node.variables.variables);
+ _addVariables(node.variables.variables);
}
return super.visitForStatement(node);
}
+ @override
Object visitFunctionDeclaration(FunctionDeclaration node) {
if (node.parent is! FunctionDeclarationStatement) {
_declarationNode = node;
@@ -16003,29 +17395,33 @@
return super.visitFunctionDeclaration(node);
}
+ @override
Object visitFunctionDeclarationStatement(FunctionDeclarationStatement node) {
_referenceIsWithinLocalFunction = true;
return super.visitFunctionDeclarationStatement(node);
}
+ @override
Object visitFunctionExpression(FunctionExpression node) {
if (node.parameters != null && _immediateChild != node.parameters) {
- addParameters(node.parameters.parameters);
+ _addParameters(node.parameters.parameters);
}
return super.visitFunctionExpression(node);
}
+ @override
Object visitMethodDeclaration(MethodDeclaration node) {
_declarationNode = node;
if (node.parameters == null) {
return null;
}
if (_immediateChild != node.parameters) {
- addParameters(node.parameters.parameters);
+ _addParameters(node.parameters.parameters);
}
return null;
}
+ @override
Object visitNode(AstNode node) {
_immediateChild = node;
AstNode parent = node.parent;
@@ -16035,29 +17431,32 @@
return null;
}
+ @override
Object visitSwitchMember(SwitchMember node) {
- checkStatements(node.statements);
+ _checkStatements(node.statements);
return super.visitSwitchMember(node);
}
+ @override
Object visitTopLevelVariableDeclaration(TopLevelVariableDeclaration node) {
_declarationNode = node;
return null;
}
+ @override
Object visitTypeAlias(TypeAlias node) {
_declarationNode = node;
return null;
}
- void addParameters(NodeList<FormalParameter> vars) {
+ void _addParameters(NodeList<FormalParameter> vars) {
for (FormalParameter var2 in vars) {
- addToScope(var2.identifier);
+ _addToScope(var2.identifier);
}
}
- void addToScope(SimpleIdentifier identifier) {
- if (identifier != null && isInRange(identifier)) {
+ void _addToScope(SimpleIdentifier identifier) {
+ if (identifier != null && _isInRange(identifier)) {
String name = identifier.name;
if (!_locals.containsKey(name)) {
_locals[name] = identifier;
@@ -16065,9 +17464,9 @@
}
}
- void addVariables(NodeList<VariableDeclaration> vars) {
+ void _addVariables(NodeList<VariableDeclaration> vars) {
for (VariableDeclaration var2 in vars) {
- addToScope(var2.name);
+ _addToScope(var2.name);
}
}
@@ -16076,20 +17475,20 @@
*
* @param statements the list of statements to check for name definitions
*/
- void checkStatements(List<Statement> statements) {
+ void _checkStatements(List<Statement> statements) {
for (Statement stmt in statements) {
if (identical(stmt, _immediateChild)) {
return;
}
if (stmt is VariableDeclarationStatement) {
- addVariables(stmt.variables.variables);
+ _addVariables(stmt.variables.variables);
} else if (stmt is FunctionDeclarationStatement && !_referenceIsWithinLocalFunction) {
- addToScope(stmt.functionDeclaration.name);
+ _addToScope(stmt.functionDeclaration.name);
}
}
}
- bool isInRange(AstNode node) {
+ bool _isInRange(AstNode node) {
if (_position < 0) {
// if source position is not set then all nodes are in range
return true;
@@ -16214,6 +17613,9 @@
owner.becomeParentOf(node);
_elements[index] = node;
}
+ void clear() {
+ _elements = <E> [];
+ }
int get length => _elements.length;
void set length(int value) {
throw new UnsupportedError("Cannot resize NodeList.");
diff --git a/pkg/analyzer/lib/src/generated/constant.dart b/pkg/analyzer/lib/src/generated/constant.dart
index e998954..77901f8 100644
--- a/pkg/analyzer/lib/src/generated/constant.dart
+++ b/pkg/analyzer/lib/src/generated/constant.dart
@@ -17,6 +17,7 @@
import 'resolver.dart' show TypeProvider;
import 'engine.dart' show AnalysisEngine;
import 'utilities_dart.dart' show ParameterKind;
+import 'utilities_collection.dart' show DirectedGraph;
/**
* Instances of the class `ConstantEvaluator` evaluate constant expressions to produce their
@@ -251,6 +252,7 @@
*/
final Map<VariableElement, VariableDeclaration> variableMap = new Map<VariableElement, VariableDeclaration>();
+ @override
Object visitVariableDeclaration(VariableDeclaration node) {
super.visitVariableDeclaration(node);
Expression initializer = node.initializer;
@@ -326,7 +328,7 @@
while (!_referenceGraph.isEmpty) {
VariableElement element = _referenceGraph.removeSink();
while (element != null) {
- computeValueFor(element);
+ _computeValueFor(element);
element = _referenceGraph.removeSink();
}
if (!_referenceGraph.isEmpty) {
@@ -341,7 +343,7 @@
return;
}
for (VariableElement variable in variablesInCycle) {
- generateCycleError(variablesInCycle, variable);
+ _generateCycleError(variablesInCycle, variable);
}
_referenceGraph.removeAllNodes(variablesInCycle);
}
@@ -353,7 +355,7 @@
*
* @param variable the variable for which a value is to be computed
*/
- void computeValueFor(VariableElement variable) {
+ void _computeValueFor(VariableElement variable) {
VariableDeclaration declaration = _declarationMap[variable];
if (declaration == null) {
//
@@ -384,7 +386,7 @@
* @param variablesInCycle the variables in the cycle that includes the given variable
* @param variable the variable that is not a valid compile-time constant
*/
- void generateCycleError(List<VariableElement> variablesInCycle, VariableElement variable) {
+ void _generateCycleError(List<VariableElement> variablesInCycle, VariableElement variable) {
}
}
@@ -451,6 +453,7 @@
this._typeProvider = typeProvider;
}
+ @override
EvaluationResultImpl visitAdjacentStrings(AdjacentStrings node) {
EvaluationResultImpl result = null;
for (StringLiteral string in node.strings) {
@@ -463,6 +466,7 @@
return result;
}
+ @override
EvaluationResultImpl visitBinaryExpression(BinaryExpression node) {
EvaluationResultImpl leftResult = node.leftOperand.accept(this);
EvaluationResultImpl rightResult = node.rightOperand.accept(this);
@@ -470,7 +474,7 @@
// 'null' is almost never good operand
if (operatorType != TokenType.BANG_EQ && operatorType != TokenType.EQ_EQ) {
if (leftResult is ValidResult && leftResult.isNull || rightResult is ValidResult && rightResult.isNull) {
- return error(node, CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION);
+ return _error(node, CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION);
}
}
// evaluate operator
@@ -515,25 +519,27 @@
return leftResult.integerDivide(_typeProvider, node, rightResult);
} else {
// TODO(brianwilkerson) Figure out which error to report.
- return error(node, null);
+ return _error(node, null);
}
break;
}
}
- EvaluationResultImpl visitBooleanLiteral(BooleanLiteral node) => valid(_typeProvider.boolType, BoolState.from(node.value));
+ @override
+ EvaluationResultImpl visitBooleanLiteral(BooleanLiteral node) => _valid(_typeProvider.boolType, BoolState.from(node.value));
+ @override
EvaluationResultImpl visitConditionalExpression(ConditionalExpression node) {
Expression condition = node.condition;
EvaluationResultImpl conditionResult = condition.accept(this);
EvaluationResultImpl thenResult = node.thenExpression.accept(this);
EvaluationResultImpl elseResult = node.elseExpression.accept(this);
if (conditionResult is ErrorResult) {
- return union(union(conditionResult as ErrorResult, thenResult), elseResult);
+ return _union(_union(conditionResult as ErrorResult, thenResult), elseResult);
} else if (!(conditionResult as ValidResult).isBool) {
return new ErrorResult.con1(condition, CompileTimeErrorCode.CONST_EVAL_TYPE_BOOL);
} else if (thenResult is ErrorResult) {
- return union(thenResult, elseResult);
+ return _union(thenResult, elseResult);
} else if (elseResult is ErrorResult) {
return elseResult;
}
@@ -549,15 +555,17 @@
}
InterfaceType thenType = (thenResult as ValidResult).value.type;
InterfaceType elseType = (elseResult as ValidResult).value.type;
- return validWithUnknownValue(thenType.getLeastUpperBound(elseType) as InterfaceType);
+ return _validWithUnknownValue(thenType.getLeastUpperBound(elseType) as InterfaceType);
}
- EvaluationResultImpl visitDoubleLiteral(DoubleLiteral node) => valid(_typeProvider.doubleType, new DoubleState(node.value));
+ @override
+ EvaluationResultImpl visitDoubleLiteral(DoubleLiteral node) => _valid(_typeProvider.doubleType, new DoubleState(node.value));
+ @override
EvaluationResultImpl visitInstanceCreationExpression(InstanceCreationExpression node) {
if (!node.isConst) {
// TODO(brianwilkerson) Figure out which error to report.
- return error(node, null);
+ return _error(node, null);
}
ConstructorElement constructor = node.staticElement;
if (constructor != null && constructor.isConst) {
@@ -570,10 +578,10 @@
if (argument is NamedExpression) {
NamedExpression namedExpression = argument;
String name = namedExpression.name.label.name;
- namedArgumentValues[name] = valueOf(namedExpression.expression);
+ namedArgumentValues[name] = _valueOf(namedExpression.expression);
argumentValues[i] = null2;
} else {
- argumentValues[i] = valueOf(argument);
+ argumentValues[i] = _valueOf(argument);
}
}
InterfaceType definingClass = constructor.returnType as InterfaceType;
@@ -582,7 +590,7 @@
if (className == "Symbol" && argumentCount == 1) {
String argumentValue = argumentValues[0].stringValue;
if (argumentValue != null) {
- return valid(definingClass, new SymbolState(argumentValue));
+ return _valid(definingClass, new SymbolState(argumentValue));
}
}
}
@@ -606,24 +614,28 @@
// TODO(brianwilkerson) This doesn't handle fields initialized in an initializer. We should be
// able to handle fields initialized by the superclass' constructor fairly easily, but other
// initializers will be harder.
- return valid(definingClass, new GenericState(fieldMap));
+ return _valid(definingClass, new GenericState(fieldMap));
}
// TODO(brianwilkerson) Figure out which error to report.
- return error(node, null);
+ return _error(node, null);
}
- EvaluationResultImpl visitIntegerLiteral(IntegerLiteral node) => valid(_typeProvider.intType, new IntState(node.value));
+ @override
+ EvaluationResultImpl visitIntegerLiteral(IntegerLiteral node) => _valid(_typeProvider.intType, new IntState(node.value));
+ @override
EvaluationResultImpl visitInterpolationExpression(InterpolationExpression node) {
EvaluationResultImpl result = node.expression.accept(this);
if (result is ValidResult && !result.isBoolNumStringOrNull) {
- return error(node, CompileTimeErrorCode.CONST_EVAL_TYPE_BOOL_NUM_STRING);
+ return _error(node, CompileTimeErrorCode.CONST_EVAL_TYPE_BOOL_NUM_STRING);
}
return result.performToString(_typeProvider, node);
}
- EvaluationResultImpl visitInterpolationString(InterpolationString node) => valid(_typeProvider.stringType, new StringState(node.value));
+ @override
+ EvaluationResultImpl visitInterpolationString(InterpolationString node) => _valid(_typeProvider.stringType, new StringState(node.value));
+ @override
EvaluationResultImpl visitListLiteral(ListLiteral node) {
if (node.constKeyword == null) {
return new ErrorResult.con1(node, CompileTimeErrorCode.MISSING_CONST_IN_LIST_LITERAL);
@@ -632,7 +644,7 @@
List<DartObjectImpl> elements = new List<DartObjectImpl>();
for (Expression element in node.elements) {
EvaluationResultImpl elementResult = element.accept(this);
- result = union(result, elementResult);
+ result = _union(result, elementResult);
if (elementResult is ValidResult) {
elements.add(elementResult.value);
}
@@ -640,9 +652,10 @@
if (result != null) {
return result;
}
- return valid(_typeProvider.listType, new ListState(new List.from(elements)));
+ return _valid(_typeProvider.listType, new ListState(new List.from(elements)));
}
+ @override
EvaluationResultImpl visitMapLiteral(MapLiteral node) {
if (node.constKeyword == null) {
return new ErrorResult.con1(node, CompileTimeErrorCode.MISSING_CONST_IN_MAP_LITERAL);
@@ -652,8 +665,8 @@
for (MapLiteralEntry entry in node.entries) {
EvaluationResultImpl keyResult = entry.key.accept(this);
EvaluationResultImpl valueResult = entry.value.accept(this);
- result = union(result, keyResult);
- result = union(result, valueResult);
+ result = _union(result, keyResult);
+ result = _union(result, valueResult);
if (keyResult is ValidResult && valueResult is ValidResult) {
map[keyResult.value] = valueResult.value;
}
@@ -661,9 +674,10 @@
if (result != null) {
return result;
}
- return valid(_typeProvider.mapType, new MapState(map));
+ return _valid(_typeProvider.mapType, new MapState(map));
}
+ @override
EvaluationResultImpl visitMethodInvocation(MethodInvocation node) {
Element element = node.methodName.staticElement;
if (element is FunctionElement) {
@@ -684,17 +698,22 @@
}
}
// TODO(brianwilkerson) Figure out which error to report.
- return error(node, null);
+ return _error(node, null);
}
+ @override
EvaluationResultImpl visitNamedExpression(NamedExpression node) => node.expression.accept(this);
- EvaluationResultImpl visitNode(AstNode node) => error(node, null);
+ @override
+ EvaluationResultImpl visitNode(AstNode node) => _error(node, null);
+ @override
EvaluationResultImpl visitNullLiteral(NullLiteral node) => new ValidResult(null2);
+ @override
EvaluationResultImpl visitParenthesizedExpression(ParenthesizedExpression node) => node.expression.accept(this);
+ @override
EvaluationResultImpl visitPrefixedIdentifier(PrefixedIdentifier node) {
// validate prefix
SimpleIdentifier prefixNode = node.prefix;
@@ -702,17 +721,18 @@
if (prefixElement is! PrefixElement) {
EvaluationResultImpl prefixResult = prefixNode.accept(this);
if (prefixResult is! ValidResult) {
- return error(node, null);
+ return _error(node, null);
}
}
// validate prefixed identifier
- return getConstantValue(node, node.staticElement);
+ return _getConstantValue(node, node.staticElement);
}
+ @override
EvaluationResultImpl visitPrefixExpression(PrefixExpression node) {
EvaluationResultImpl operand = node.operand.accept(this);
if (operand is ValidResult && operand.isNull) {
- return error(node, CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION);
+ return _error(node, CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION);
}
while (true) {
if (node.operator.type == TokenType.BANG) {
@@ -723,18 +743,22 @@
return operand.negated(_typeProvider, node);
} else {
// TODO(brianwilkerson) Figure out which error to report.
- return error(node, null);
+ return _error(node, null);
}
break;
}
}
- EvaluationResultImpl visitPropertyAccess(PropertyAccess node) => getConstantValue(node, node.propertyName.staticElement);
+ @override
+ EvaluationResultImpl visitPropertyAccess(PropertyAccess node) => _getConstantValue(node, node.propertyName.staticElement);
- EvaluationResultImpl visitSimpleIdentifier(SimpleIdentifier node) => getConstantValue(node, node.staticElement);
+ @override
+ EvaluationResultImpl visitSimpleIdentifier(SimpleIdentifier node) => _getConstantValue(node, node.staticElement);
- EvaluationResultImpl visitSimpleStringLiteral(SimpleStringLiteral node) => valid(_typeProvider.stringType, new StringState(node.value));
+ @override
+ EvaluationResultImpl visitSimpleStringLiteral(SimpleStringLiteral node) => _valid(_typeProvider.stringType, new StringState(node.value));
+ @override
EvaluationResultImpl visitStringInterpolation(StringInterpolation node) {
EvaluationResultImpl result = null;
for (InterpolationElement element in node.elements) {
@@ -747,6 +771,7 @@
return result;
}
+ @override
EvaluationResultImpl visitSymbolLiteral(SymbolLiteral node) {
JavaStringBuilder builder = new JavaStringBuilder();
List<Token> components = node.components;
@@ -756,7 +781,7 @@
}
builder.append(components[i].lexeme);
}
- return valid(_typeProvider.symbolType, new SymbolState(builder.toString()));
+ return _valid(_typeProvider.symbolType, new SymbolState(builder.toString()));
}
/**
@@ -766,7 +791,7 @@
* @param code the error code indicating the nature of the error
* @return a result object representing an error associated with the given node
*/
- ErrorResult error(AstNode node, ErrorCode code) => new ErrorResult.con1(node, code == null ? CompileTimeErrorCode.INVALID_CONSTANT : code);
+ ErrorResult _error(AstNode node, ErrorCode code) => new ErrorResult.con1(node, code == null ? CompileTimeErrorCode.INVALID_CONSTANT : code);
/**
* Return the constant value of the static constant represented by the given element.
@@ -775,7 +800,7 @@
* @param element the element whose value is to be returned
* @return the constant value of the static constant
*/
- EvaluationResultImpl getConstantValue(AstNode node, Element element) {
+ EvaluationResultImpl _getConstantValue(AstNode node, Element element) {
if (element is PropertyAccessorElement) {
element = (element as PropertyAccessorElement).variable;
}
@@ -788,13 +813,13 @@
} else if (element is ExecutableElement) {
ExecutableElement function = element;
if (function.isStatic) {
- return valid(_typeProvider.functionType, new FunctionState(function));
+ return _valid(_typeProvider.functionType, new FunctionState(function));
}
} else if (element is ClassElement || element is FunctionTypeAliasElement) {
- return valid(_typeProvider.typeType, new TypeState(element));
+ return _valid(_typeProvider.typeType, new TypeState(element));
}
// TODO(brianwilkerson) Figure out which error to report.
- return error(node, null);
+ return _error(node, null);
}
/**
@@ -818,7 +843,7 @@
* errors to be added
* @return the union of the errors encoded in the given results
*/
- ErrorResult union(ErrorResult leftResult, EvaluationResultImpl rightResult) {
+ ErrorResult _union(ErrorResult leftResult, EvaluationResultImpl rightResult) {
if (rightResult is ErrorResult) {
if (leftResult != null) {
return new ErrorResult.con2(leftResult, rightResult);
@@ -829,22 +854,22 @@
return leftResult;
}
- ValidResult valid(InterfaceType type, InstanceState state) => new ValidResult(new DartObjectImpl(type, state));
+ ValidResult _valid(InterfaceType type, InstanceState state) => new ValidResult(new DartObjectImpl(type, state));
- ValidResult validWithUnknownValue(InterfaceType type) {
+ ValidResult _validWithUnknownValue(InterfaceType type) {
if (type.element.library.isDartCore) {
String typeName = type.name;
if (typeName == "bool") {
- return valid(type, BoolState.UNKNOWN_VALUE);
+ return _valid(type, BoolState.UNKNOWN_VALUE);
} else if (typeName == "double") {
- return valid(type, DoubleState.UNKNOWN_VALUE);
+ return _valid(type, DoubleState.UNKNOWN_VALUE);
} else if (typeName == "int") {
- return valid(type, IntState.UNKNOWN_VALUE);
+ return _valid(type, IntState.UNKNOWN_VALUE);
} else if (typeName == "String") {
- return valid(type, StringState.UNKNOWN_VALUE);
+ return _valid(type, StringState.UNKNOWN_VALUE);
}
}
- return valid(type, GenericState.UNKNOWN_VALUE);
+ return _valid(type, GenericState.UNKNOWN_VALUE);
}
/**
@@ -854,7 +879,7 @@
* @param expression the expression whose value is to be returned
* @return the value of the given expression
*/
- DartObjectImpl valueOf(Expression expression) {
+ DartObjectImpl _valueOf(Expression expression) {
EvaluationResultImpl expressionValue = expression.accept(this);
if (expressionValue is ValidResult) {
return expressionValue.value;
@@ -864,170 +889,6 @@
}
/**
- * Instances of the class `DirectedGraph` implement a directed graph in which the nodes are
- * arbitrary (client provided) objects and edges are represented implicitly. The graph will allow an
- * edge from any node to any other node, including itself, but will not represent multiple edges
- * between the same pair of nodes.
- *
- * @param N the type of the nodes in the graph
- */
-class DirectedGraph<N> {
- /**
- * The table encoding the edges in the graph. An edge is represented by an entry mapping the head
- * to a set of tails. Nodes that are not the head of any edge are represented by an entry mapping
- * the node to an empty set of tails.
- */
- Map<N, Set<N>> _edges = new Map<N, Set<N>>();
-
- /**
- * Add an edge from the given head node to the given tail node. Both nodes will be a part of the
- * graph after this method is invoked, whether or not they were before.
- *
- * @param head the node at the head of the edge
- * @param tail the node at the tail of the edge
- */
- void addEdge(N head, N tail) {
- //
- // First, ensure that the tail is a node known to the graph.
- //
- Set<N> tails = _edges[tail];
- if (tails == null) {
- _edges[tail] = new Set<N>();
- }
- //
- // Then create the edge.
- //
- tails = _edges[head];
- if (tails == null) {
- tails = new Set<N>();
- _edges[head] = tails;
- }
- tails.add(tail);
- }
-
- /**
- * Add the given node to the set of nodes in the graph.
- *
- * @param node the node to be added
- */
- void addNode(N node) {
- Set<N> tails = _edges[node];
- if (tails == null) {
- _edges[node] = new Set<N>();
- }
- }
-
- /**
- * Return a list of nodes that form a cycle, or `null` if there are no cycles in this graph.
- *
- * @return a list of nodes that form a cycle
- */
- List<N> findCycle() => null;
-
- /**
- * Return the number of nodes in this graph.
- *
- * @return the number of nodes in this graph
- */
- int get nodeCount => _edges.length;
-
- /**
- * Return a set containing the tails of edges that have the given node as their head. The set will
- * be empty if there are no such edges or if the node is not part of the graph. Clients must not
- * modify the returned set.
- *
- * @param head the node at the head of all of the edges whose tails are to be returned
- * @return a set containing the tails of edges that have the given node as their head
- */
- Set<N> getTails(N head) {
- Set<N> tails = _edges[head];
- if (tails == null) {
- return new Set<N>();
- }
- return tails;
- }
-
- /**
- * Return `true` if this graph is empty.
- *
- * @return `true` if this graph is empty
- */
- bool get isEmpty => _edges.isEmpty;
-
- /**
- * Remove all of the given nodes from this graph. As a consequence, any edges for which those
- * nodes were either a head or a tail will also be removed.
- *
- * @param nodes the nodes to be removed
- */
- void removeAllNodes(List<N> nodes) {
- for (N node in nodes) {
- removeNode(node);
- }
- }
-
- /**
- * Remove the edge from the given head node to the given tail node. If there was no such edge then
- * the graph will be unmodified: the number of edges will be the same and the set of nodes will be
- * the same (neither node will either be added or removed).
- *
- * @param head the node at the head of the edge
- * @param tail the node at the tail of the edge
- * @return `true` if the graph was modified as a result of this operation
- */
- void removeEdge(N head, N tail) {
- Set<N> tails = _edges[head];
- if (tails != null) {
- tails.remove(tail);
- }
- }
-
- /**
- * Remove the given node from this graph. As a consequence, any edges for which that node was
- * either a head or a tail will also be removed.
- *
- * @param node the node to be removed
- */
- void removeNode(N node) {
- _edges.remove(node);
- for (Set<N> tails in _edges.values) {
- tails.remove(node);
- }
- }
-
- /**
- * Find one node (referred to as a sink node) that has no outgoing edges (that is, for which there
- * are no edges that have that node as the head of the edge) and remove it from this graph. Return
- * the node that was removed, or `null` if there are no such nodes either because the graph
- * is empty or because every node in the graph has at least one outgoing edge. As a consequence of
- * removing the node from the graph any edges for which that node was a tail will also be removed.
- *
- * @return the sink node that was removed
- */
- N removeSink() {
- N sink = findSink();
- if (sink == null) {
- return null;
- }
- removeNode(sink);
- return sink;
- }
-
- /**
- * Return one node that has no outgoing edges (that is, for which there are no edges that have
- * that node as the head of the edge), or `null` if there are no such nodes.
- *
- * @return a sink node
- */
- N findSink() {
- for (N key in _edges.keys) {
- if (_edges[key].isEmpty) return key;
- }
- return null;
- }
-}
-
-/**
* Instances of the class `ErrorResult` represent the result of evaluating an expression that
* is not a valid compile time constant.
*/
@@ -1060,138 +921,204 @@
_errors.addAll(secondResult._errors);
}
+ @override
EvaluationResultImpl add(TypeProvider typeProvider, BinaryExpression node, EvaluationResultImpl rightOperand) => rightOperand.addToError(node, this);
+ @override
EvaluationResultImpl applyBooleanConversion(TypeProvider typeProvider, AstNode node) => this;
+ @override
EvaluationResultImpl bitAnd(TypeProvider typeProvider, BinaryExpression node, EvaluationResultImpl rightOperand) => rightOperand.bitAndError(node, this);
+ @override
EvaluationResultImpl bitNot(TypeProvider typeProvider, Expression node) => this;
+ @override
EvaluationResultImpl bitOr(TypeProvider typeProvider, BinaryExpression node, EvaluationResultImpl rightOperand) => rightOperand.bitOrError(node, this);
+ @override
EvaluationResultImpl bitXor(TypeProvider typeProvider, BinaryExpression node, EvaluationResultImpl rightOperand) => rightOperand.bitXorError(node, this);
+ @override
EvaluationResultImpl concatenate(TypeProvider typeProvider, Expression node, EvaluationResultImpl rightOperand) => rightOperand.concatenateError(node, this);
+ @override
EvaluationResultImpl divide(TypeProvider typeProvider, BinaryExpression node, EvaluationResultImpl rightOperand) => rightOperand.divideError(node, this);
+ @override
EvaluationResultImpl equalEqual(TypeProvider typeProvider, Expression node, EvaluationResultImpl rightOperand) => rightOperand.equalEqualError(node, this);
+ @override
bool equalValues(TypeProvider typeProvider, EvaluationResultImpl result) => false;
List<ErrorResult_ErrorData> get errorData => _errors;
+ @override
EvaluationResultImpl greaterThan(TypeProvider typeProvider, BinaryExpression node, EvaluationResultImpl rightOperand) => rightOperand.greaterThanError(node, this);
+ @override
EvaluationResultImpl greaterThanOrEqual(TypeProvider typeProvider, BinaryExpression node, EvaluationResultImpl rightOperand) => rightOperand.greaterThanOrEqualError(node, this);
+ @override
EvaluationResultImpl integerDivide(TypeProvider typeProvider, BinaryExpression node, EvaluationResultImpl rightOperand) => rightOperand.integerDivideError(node, this);
+ @override
EvaluationResultImpl integerDivideValid(TypeProvider typeProvider, BinaryExpression node, ValidResult leftOperand) => this;
+ @override
EvaluationResultImpl lessThan(TypeProvider typeProvider, BinaryExpression node, EvaluationResultImpl rightOperand) => rightOperand.lessThanError(node, this);
+ @override
EvaluationResultImpl lessThanOrEqual(TypeProvider typeProvider, BinaryExpression node, EvaluationResultImpl rightOperand) => rightOperand.lessThanOrEqualError(node, this);
+ @override
EvaluationResultImpl logicalAnd(TypeProvider typeProvider, BinaryExpression node, EvaluationResultImpl rightOperand) => rightOperand.logicalAndError(node, this);
+ @override
EvaluationResultImpl logicalNot(TypeProvider typeProvider, Expression node) => this;
+ @override
EvaluationResultImpl logicalOr(TypeProvider typeProvider, BinaryExpression node, EvaluationResultImpl rightOperand) => rightOperand.logicalOrError(node, this);
+ @override
EvaluationResultImpl minus(TypeProvider typeProvider, BinaryExpression node, EvaluationResultImpl rightOperand) => rightOperand.minusError(node, this);
+ @override
EvaluationResultImpl negated(TypeProvider typeProvider, Expression node) => this;
+ @override
EvaluationResultImpl notEqual(TypeProvider typeProvider, BinaryExpression node, EvaluationResultImpl rightOperand) => rightOperand.notEqualError(node, this);
+ @override
EvaluationResultImpl performToString(TypeProvider typeProvider, AstNode node) => this;
+ @override
EvaluationResultImpl remainder(TypeProvider typeProvider, BinaryExpression node, EvaluationResultImpl rightOperand) => rightOperand.remainderError(node, this);
+ @override
EvaluationResultImpl shiftLeft(TypeProvider typeProvider, BinaryExpression node, EvaluationResultImpl rightOperand) => rightOperand.shiftLeftError(node, this);
+ @override
EvaluationResultImpl shiftRight(TypeProvider typeProvider, BinaryExpression node, EvaluationResultImpl rightOperand) => rightOperand.shiftRightError(node, this);
+ @override
EvaluationResultImpl times(TypeProvider typeProvider, BinaryExpression node, EvaluationResultImpl rightOperand) => rightOperand.timesError(node, this);
+ @override
EvaluationResultImpl addToError(BinaryExpression node, ErrorResult leftOperand) => new ErrorResult.con2(this, leftOperand);
+ @override
EvaluationResultImpl addToValid(TypeProvider typeProvider, BinaryExpression node, ValidResult leftOperand) => this;
+ @override
EvaluationResultImpl bitAndError(BinaryExpression node, ErrorResult leftOperand) => new ErrorResult.con2(this, leftOperand);
+ @override
EvaluationResultImpl bitAndValid(TypeProvider typeProvider, BinaryExpression node, ValidResult leftOperand) => this;
+ @override
EvaluationResultImpl bitOrError(BinaryExpression node, ErrorResult leftOperand) => new ErrorResult.con2(this, leftOperand);
+ @override
EvaluationResultImpl bitOrValid(TypeProvider typeProvider, BinaryExpression node, ValidResult leftOperand) => this;
+ @override
EvaluationResultImpl bitXorError(BinaryExpression node, ErrorResult leftOperand) => new ErrorResult.con2(this, leftOperand);
+ @override
EvaluationResultImpl bitXorValid(TypeProvider typeProvider, BinaryExpression node, ValidResult leftOperand) => this;
+ @override
EvaluationResultImpl concatenateError(Expression node, ErrorResult leftOperand) => new ErrorResult.con2(this, leftOperand);
+ @override
EvaluationResultImpl concatenateValid(TypeProvider typeProvider, Expression node, ValidResult leftOperand) => this;
+ @override
EvaluationResultImpl divideError(BinaryExpression node, ErrorResult leftOperand) => new ErrorResult.con2(this, leftOperand);
+ @override
EvaluationResultImpl divideValid(TypeProvider typeProvider, BinaryExpression node, ValidResult leftOperand) => this;
+ @override
EvaluationResultImpl equalEqualError(Expression node, ErrorResult leftOperand) => new ErrorResult.con2(this, leftOperand);
+ @override
EvaluationResultImpl equalEqualValid(TypeProvider typeProvider, Expression node, ValidResult leftOperand) => this;
+ @override
EvaluationResultImpl greaterThanError(BinaryExpression node, ErrorResult leftOperand) => new ErrorResult.con2(this, leftOperand);
+ @override
EvaluationResultImpl greaterThanOrEqualError(BinaryExpression node, ErrorResult leftOperand) => new ErrorResult.con2(this, leftOperand);
+ @override
EvaluationResultImpl greaterThanOrEqualValid(TypeProvider typeProvider, BinaryExpression node, ValidResult leftOperand) => this;
+ @override
EvaluationResultImpl greaterThanValid(TypeProvider typeProvider, BinaryExpression node, ValidResult leftOperand) => this;
+ @override
EvaluationResultImpl integerDivideError(BinaryExpression node, ErrorResult leftOperand) => new ErrorResult.con2(this, leftOperand);
+ @override
EvaluationResultImpl lessThanError(BinaryExpression node, ErrorResult leftOperand) => new ErrorResult.con2(this, leftOperand);
+ @override
EvaluationResultImpl lessThanOrEqualError(BinaryExpression node, ErrorResult leftOperand) => new ErrorResult.con2(this, leftOperand);
+ @override
EvaluationResultImpl lessThanOrEqualValid(TypeProvider typeProvider, BinaryExpression node, ValidResult leftOperand) => this;
+ @override
EvaluationResultImpl lessThanValid(TypeProvider typeProvider, BinaryExpression node, ValidResult leftOperand) => this;
+ @override
EvaluationResultImpl logicalAndError(BinaryExpression node, ErrorResult leftOperand) => new ErrorResult.con2(this, leftOperand);
+ @override
EvaluationResultImpl logicalAndValid(TypeProvider typeProvider, BinaryExpression node, ValidResult leftOperand) => this;
+ @override
EvaluationResultImpl logicalOrError(BinaryExpression node, ErrorResult leftOperand) => new ErrorResult.con2(this, leftOperand);
+ @override
EvaluationResultImpl logicalOrValid(TypeProvider typeProvider, BinaryExpression node, ValidResult leftOperand) => this;
+ @override
EvaluationResultImpl minusError(BinaryExpression node, ErrorResult leftOperand) => new ErrorResult.con2(this, leftOperand);
+ @override
EvaluationResultImpl minusValid(TypeProvider typeProvider, BinaryExpression node, ValidResult leftOperand) => this;
+ @override
EvaluationResultImpl notEqualError(BinaryExpression node, ErrorResult leftOperand) => new ErrorResult.con2(this, leftOperand);
+ @override
EvaluationResultImpl notEqualValid(TypeProvider typeProvider, BinaryExpression node, ValidResult leftOperand) => this;
+ @override
EvaluationResultImpl remainderError(BinaryExpression node, ErrorResult leftOperand) => new ErrorResult.con2(this, leftOperand);
+ @override
EvaluationResultImpl remainderValid(TypeProvider typeProvider, BinaryExpression node, ValidResult leftOperand) => this;
+ @override
EvaluationResultImpl shiftLeftError(BinaryExpression node, ErrorResult leftOperand) => new ErrorResult.con2(this, leftOperand);
+ @override
EvaluationResultImpl shiftLeftValid(TypeProvider typeProvider, BinaryExpression node, ValidResult leftOperand) => this;
+ @override
EvaluationResultImpl shiftRightError(BinaryExpression node, ErrorResult leftOperand) => new ErrorResult.con2(this, leftOperand);
+ @override
EvaluationResultImpl shiftRightValid(TypeProvider typeProvider, BinaryExpression node, ValidResult leftOperand) => this;
+ @override
EvaluationResultImpl timesError(BinaryExpression node, ErrorResult leftOperand) => new ErrorResult.con2(this, leftOperand);
+ @override
EvaluationResultImpl timesValid(TypeProvider typeProvider, BinaryExpression node, ValidResult leftOperand) => this;
}
@@ -1390,6 +1317,7 @@
this._referenceGraph = referenceGraph;
}
+ @override
Object visitSimpleIdentifier(SimpleIdentifier node) {
Element element = node.staticElement;
if (element is PropertyAccessorElement) {
@@ -1422,6 +1350,7 @@
*/
ValidResult(this.value);
+ @override
EvaluationResultImpl add(TypeProvider typeProvider, BinaryExpression node, EvaluationResultImpl rightOperand) => rightOperand.addToValid(typeProvider, node, this);
/**
@@ -1430,34 +1359,43 @@
* @param node the node against which errors should be reported
* @return the result of applying boolean conversion to the given value
*/
+ @override
EvaluationResultImpl applyBooleanConversion(TypeProvider typeProvider, AstNode node) {
try {
- return valueOf(value.convertToBool(typeProvider));
+ return _valueOf(value.convertToBool(typeProvider));
} on EvaluationException catch (exception) {
- return error(node, exception.errorCode);
+ return _error(node, exception.errorCode);
}
}
+ @override
EvaluationResultImpl bitAnd(TypeProvider typeProvider, BinaryExpression node, EvaluationResultImpl rightOperand) => rightOperand.bitAndValid(typeProvider, node, this);
+ @override
EvaluationResultImpl bitNot(TypeProvider typeProvider, Expression node) {
try {
- return valueOf(value.bitNot(typeProvider));
+ return _valueOf(value.bitNot(typeProvider));
} on EvaluationException catch (exception) {
- return error(node, exception.errorCode);
+ return _error(node, exception.errorCode);
}
}
+ @override
EvaluationResultImpl bitOr(TypeProvider typeProvider, BinaryExpression node, EvaluationResultImpl rightOperand) => rightOperand.bitOrValid(typeProvider, node, this);
+ @override
EvaluationResultImpl bitXor(TypeProvider typeProvider, BinaryExpression node, EvaluationResultImpl rightOperand) => rightOperand.bitXorValid(typeProvider, node, this);
+ @override
EvaluationResultImpl concatenate(TypeProvider typeProvider, Expression node, EvaluationResultImpl rightOperand) => rightOperand.concatenateValid(typeProvider, node, this);
+ @override
EvaluationResultImpl divide(TypeProvider typeProvider, BinaryExpression node, EvaluationResultImpl rightOperand) => rightOperand.divideValid(typeProvider, node, this);
+ @override
EvaluationResultImpl equalEqual(TypeProvider typeProvider, Expression node, EvaluationResultImpl rightOperand) => rightOperand.equalEqualValid(typeProvider, node, this);
+ @override
bool equalValues(TypeProvider typeProvider, EvaluationResultImpl result) {
if (result is! ValidResult) {
return false;
@@ -1465,10 +1403,13 @@
return value == (result as ValidResult).value;
}
+ @override
EvaluationResultImpl greaterThan(TypeProvider typeProvider, BinaryExpression node, EvaluationResultImpl rightOperand) => rightOperand.greaterThanValid(typeProvider, node, this);
+ @override
EvaluationResultImpl greaterThanOrEqual(TypeProvider typeProvider, BinaryExpression node, EvaluationResultImpl rightOperand) => rightOperand.greaterThanOrEqualValid(typeProvider, node, this);
+ @override
EvaluationResultImpl integerDivide(TypeProvider typeProvider, BinaryExpression node, EvaluationResultImpl rightOperand) => rightOperand.integerDivideValid(typeProvider, node, this);
/**
@@ -1514,50 +1455,64 @@
*/
bool get isUserDefinedObject => value.isUserDefinedObject;
+ @override
EvaluationResultImpl lessThan(TypeProvider typeProvider, BinaryExpression node, EvaluationResultImpl rightOperand) => rightOperand.lessThanValid(typeProvider, node, this);
+ @override
EvaluationResultImpl lessThanOrEqual(TypeProvider typeProvider, BinaryExpression node, EvaluationResultImpl rightOperand) => rightOperand.lessThanOrEqualValid(typeProvider, node, this);
+ @override
EvaluationResultImpl logicalAnd(TypeProvider typeProvider, BinaryExpression node, EvaluationResultImpl rightOperand) => rightOperand.logicalAndValid(typeProvider, node, this);
+ @override
EvaluationResultImpl logicalNot(TypeProvider typeProvider, Expression node) {
try {
- return valueOf(value.logicalNot(typeProvider));
+ return _valueOf(value.logicalNot(typeProvider));
} on EvaluationException catch (exception) {
- return error(node, exception.errorCode);
+ return _error(node, exception.errorCode);
}
}
+ @override
EvaluationResultImpl logicalOr(TypeProvider typeProvider, BinaryExpression node, EvaluationResultImpl rightOperand) => rightOperand.logicalOrValid(typeProvider, node, this);
+ @override
EvaluationResultImpl minus(TypeProvider typeProvider, BinaryExpression node, EvaluationResultImpl rightOperand) => rightOperand.minusValid(typeProvider, node, this);
+ @override
EvaluationResultImpl negated(TypeProvider typeProvider, Expression node) {
try {
- return valueOf(value.negated(typeProvider));
+ return _valueOf(value.negated(typeProvider));
} on EvaluationException catch (exception) {
- return error(node, exception.errorCode);
+ return _error(node, exception.errorCode);
}
}
+ @override
EvaluationResultImpl notEqual(TypeProvider typeProvider, BinaryExpression node, EvaluationResultImpl rightOperand) => rightOperand.notEqualValid(typeProvider, node, this);
+ @override
EvaluationResultImpl performToString(TypeProvider typeProvider, AstNode node) {
try {
- return valueOf(value.performToString(typeProvider));
+ return _valueOf(value.performToString(typeProvider));
} on EvaluationException catch (exception) {
- return error(node, exception.errorCode);
+ return _error(node, exception.errorCode);
}
}
+ @override
EvaluationResultImpl remainder(TypeProvider typeProvider, BinaryExpression node, EvaluationResultImpl rightOperand) => rightOperand.remainderValid(typeProvider, node, this);
+ @override
EvaluationResultImpl shiftLeft(TypeProvider typeProvider, BinaryExpression node, EvaluationResultImpl rightOperand) => rightOperand.shiftLeftValid(typeProvider, node, this);
+ @override
EvaluationResultImpl shiftRight(TypeProvider typeProvider, BinaryExpression node, EvaluationResultImpl rightOperand) => rightOperand.shiftRightValid(typeProvider, node, this);
+ @override
EvaluationResultImpl times(TypeProvider typeProvider, BinaryExpression node, EvaluationResultImpl rightOperand) => rightOperand.timesValid(typeProvider, node, this);
+ @override
String toString() {
if (value == null) {
return "null";
@@ -1565,203 +1520,243 @@
return value.toString();
}
+ @override
EvaluationResultImpl addToError(BinaryExpression node, ErrorResult leftOperand) => leftOperand;
+ @override
EvaluationResultImpl addToValid(TypeProvider typeProvider, BinaryExpression node, ValidResult leftOperand) {
try {
- return valueOf(leftOperand.value.add(typeProvider, value));
+ return _valueOf(leftOperand.value.add(typeProvider, value));
} on EvaluationException catch (exception) {
- return error(node, exception.errorCode);
+ return _error(node, exception.errorCode);
}
}
+ @override
EvaluationResultImpl bitAndError(BinaryExpression node, ErrorResult leftOperand) => leftOperand;
+ @override
EvaluationResultImpl bitAndValid(TypeProvider typeProvider, BinaryExpression node, ValidResult leftOperand) {
try {
- return valueOf(leftOperand.value.bitAnd(typeProvider, value));
+ return _valueOf(leftOperand.value.bitAnd(typeProvider, value));
} on EvaluationException catch (exception) {
- return error(node, exception.errorCode);
+ return _error(node, exception.errorCode);
}
}
+ @override
EvaluationResultImpl bitOrError(BinaryExpression node, ErrorResult leftOperand) => leftOperand;
+ @override
EvaluationResultImpl bitOrValid(TypeProvider typeProvider, BinaryExpression node, ValidResult leftOperand) {
try {
- return valueOf(leftOperand.value.bitOr(typeProvider, value));
+ return _valueOf(leftOperand.value.bitOr(typeProvider, value));
} on EvaluationException catch (exception) {
- return error(node, exception.errorCode);
+ return _error(node, exception.errorCode);
}
}
+ @override
EvaluationResultImpl bitXorError(BinaryExpression node, ErrorResult leftOperand) => leftOperand;
+ @override
EvaluationResultImpl bitXorValid(TypeProvider typeProvider, BinaryExpression node, ValidResult leftOperand) {
try {
- return valueOf(leftOperand.value.bitXor(typeProvider, value));
+ return _valueOf(leftOperand.value.bitXor(typeProvider, value));
} on EvaluationException catch (exception) {
- return error(node, exception.errorCode);
+ return _error(node, exception.errorCode);
}
}
+ @override
EvaluationResultImpl concatenateError(Expression node, ErrorResult leftOperand) => leftOperand;
+ @override
EvaluationResultImpl concatenateValid(TypeProvider typeProvider, Expression node, ValidResult leftOperand) {
try {
- return valueOf(leftOperand.value.concatenate(typeProvider, value));
+ return _valueOf(leftOperand.value.concatenate(typeProvider, value));
} on EvaluationException catch (exception) {
- return error(node, exception.errorCode);
+ return _error(node, exception.errorCode);
}
}
+ @override
EvaluationResultImpl divideError(BinaryExpression node, ErrorResult leftOperand) => leftOperand;
+ @override
EvaluationResultImpl divideValid(TypeProvider typeProvider, BinaryExpression node, ValidResult leftOperand) {
try {
- return valueOf(leftOperand.value.divide(typeProvider, value));
+ return _valueOf(leftOperand.value.divide(typeProvider, value));
} on EvaluationException catch (exception) {
- return error(node, exception.errorCode);
+ return _error(node, exception.errorCode);
}
}
+ @override
EvaluationResultImpl equalEqualError(Expression node, ErrorResult leftOperand) => leftOperand;
+ @override
EvaluationResultImpl equalEqualValid(TypeProvider typeProvider, Expression node, ValidResult leftOperand) {
try {
- return valueOf(leftOperand.value.equalEqual(typeProvider, value));
+ return _valueOf(leftOperand.value.equalEqual(typeProvider, value));
} on EvaluationException catch (exception) {
- return error(node, exception.errorCode);
+ return _error(node, exception.errorCode);
}
}
+ @override
EvaluationResultImpl greaterThanError(BinaryExpression node, ErrorResult leftOperand) => leftOperand;
+ @override
EvaluationResultImpl greaterThanOrEqualError(BinaryExpression node, ErrorResult leftOperand) => leftOperand;
+ @override
EvaluationResultImpl greaterThanOrEqualValid(TypeProvider typeProvider, BinaryExpression node, ValidResult leftOperand) {
try {
- return valueOf(leftOperand.value.greaterThanOrEqual(typeProvider, value));
+ return _valueOf(leftOperand.value.greaterThanOrEqual(typeProvider, value));
} on EvaluationException catch (exception) {
- return error(node, exception.errorCode);
+ return _error(node, exception.errorCode);
}
}
+ @override
EvaluationResultImpl greaterThanValid(TypeProvider typeProvider, BinaryExpression node, ValidResult leftOperand) {
try {
- return valueOf(leftOperand.value.greaterThan(typeProvider, value));
+ return _valueOf(leftOperand.value.greaterThan(typeProvider, value));
} on EvaluationException catch (exception) {
- return error(node, exception.errorCode);
+ return _error(node, exception.errorCode);
}
}
+ @override
EvaluationResultImpl integerDivideError(BinaryExpression node, ErrorResult leftOperand) => leftOperand;
+ @override
EvaluationResultImpl integerDivideValid(TypeProvider typeProvider, BinaryExpression node, ValidResult leftOperand) {
try {
- return valueOf(leftOperand.value.integerDivide(typeProvider, value));
+ return _valueOf(leftOperand.value.integerDivide(typeProvider, value));
} on EvaluationException catch (exception) {
- return error(node, exception.errorCode);
+ return _error(node, exception.errorCode);
}
}
+ @override
EvaluationResultImpl lessThanError(BinaryExpression node, ErrorResult leftOperand) => leftOperand;
+ @override
EvaluationResultImpl lessThanOrEqualError(BinaryExpression node, ErrorResult leftOperand) => leftOperand;
+ @override
EvaluationResultImpl lessThanOrEqualValid(TypeProvider typeProvider, BinaryExpression node, ValidResult leftOperand) {
try {
- return valueOf(leftOperand.value.lessThanOrEqual(typeProvider, value));
+ return _valueOf(leftOperand.value.lessThanOrEqual(typeProvider, value));
} on EvaluationException catch (exception) {
- return error(node, exception.errorCode);
+ return _error(node, exception.errorCode);
}
}
+ @override
EvaluationResultImpl lessThanValid(TypeProvider typeProvider, BinaryExpression node, ValidResult leftOperand) {
try {
- return valueOf(leftOperand.value.lessThan(typeProvider, value));
+ return _valueOf(leftOperand.value.lessThan(typeProvider, value));
} on EvaluationException catch (exception) {
- return error(node, exception.errorCode);
+ return _error(node, exception.errorCode);
}
}
+ @override
EvaluationResultImpl logicalAndError(BinaryExpression node, ErrorResult leftOperand) => leftOperand;
+ @override
EvaluationResultImpl logicalAndValid(TypeProvider typeProvider, BinaryExpression node, ValidResult leftOperand) {
try {
- return valueOf(leftOperand.value.logicalAnd(typeProvider, value));
+ return _valueOf(leftOperand.value.logicalAnd(typeProvider, value));
} on EvaluationException catch (exception) {
- return error(node, exception.errorCode);
+ return _error(node, exception.errorCode);
}
}
+ @override
EvaluationResultImpl logicalOrError(BinaryExpression node, ErrorResult leftOperand) => leftOperand;
+ @override
EvaluationResultImpl logicalOrValid(TypeProvider typeProvider, BinaryExpression node, ValidResult leftOperand) {
try {
- return valueOf(leftOperand.value.logicalOr(typeProvider, value));
+ return _valueOf(leftOperand.value.logicalOr(typeProvider, value));
} on EvaluationException catch (exception) {
- return error(node, exception.errorCode);
+ return _error(node, exception.errorCode);
}
}
+ @override
EvaluationResultImpl minusError(BinaryExpression node, ErrorResult leftOperand) => leftOperand;
+ @override
EvaluationResultImpl minusValid(TypeProvider typeProvider, BinaryExpression node, ValidResult leftOperand) {
try {
- return valueOf(leftOperand.value.minus(typeProvider, value));
+ return _valueOf(leftOperand.value.minus(typeProvider, value));
} on EvaluationException catch (exception) {
- return error(node, exception.errorCode);
+ return _error(node, exception.errorCode);
}
}
+ @override
EvaluationResultImpl notEqualError(BinaryExpression node, ErrorResult leftOperand) => leftOperand;
+ @override
EvaluationResultImpl notEqualValid(TypeProvider typeProvider, BinaryExpression node, ValidResult leftOperand) {
try {
- return valueOf(leftOperand.value.notEqual(typeProvider, value));
+ return _valueOf(leftOperand.value.notEqual(typeProvider, value));
} on EvaluationException catch (exception) {
- return error(node, exception.errorCode);
+ return _error(node, exception.errorCode);
}
}
+ @override
EvaluationResultImpl remainderError(BinaryExpression node, ErrorResult leftOperand) => leftOperand;
+ @override
EvaluationResultImpl remainderValid(TypeProvider typeProvider, BinaryExpression node, ValidResult leftOperand) {
try {
- return valueOf(leftOperand.value.remainder(typeProvider, value));
+ return _valueOf(leftOperand.value.remainder(typeProvider, value));
} on EvaluationException catch (exception) {
- return error(node, exception.errorCode);
+ return _error(node, exception.errorCode);
}
}
+ @override
EvaluationResultImpl shiftLeftError(BinaryExpression node, ErrorResult leftOperand) => leftOperand;
+ @override
EvaluationResultImpl shiftLeftValid(TypeProvider typeProvider, BinaryExpression node, ValidResult leftOperand) {
try {
- return valueOf(leftOperand.value.shiftLeft(typeProvider, value));
+ return _valueOf(leftOperand.value.shiftLeft(typeProvider, value));
} on EvaluationException catch (exception) {
- return error(node, exception.errorCode);
+ return _error(node, exception.errorCode);
}
}
+ @override
EvaluationResultImpl shiftRightError(BinaryExpression node, ErrorResult leftOperand) => leftOperand;
+ @override
EvaluationResultImpl shiftRightValid(TypeProvider typeProvider, BinaryExpression node, ValidResult leftOperand) {
try {
- return valueOf(leftOperand.value.shiftRight(typeProvider, value));
+ return _valueOf(leftOperand.value.shiftRight(typeProvider, value));
} on EvaluationException catch (exception) {
- return error(node, exception.errorCode);
+ return _error(node, exception.errorCode);
}
}
+ @override
EvaluationResultImpl timesError(BinaryExpression node, ErrorResult leftOperand) => leftOperand;
+ @override
EvaluationResultImpl timesValid(TypeProvider typeProvider, BinaryExpression node, ValidResult leftOperand) {
try {
- return valueOf(leftOperand.value.times(typeProvider, value));
+ return _valueOf(leftOperand.value.times(typeProvider, value));
} on EvaluationException catch (exception) {
- return error(node, exception.errorCode);
+ return _error(node, exception.errorCode);
}
}
@@ -1772,7 +1767,7 @@
* @param code the error code indicating the nature of the error
* @return a result object representing an error associated with the given node
*/
- ErrorResult error(AstNode node, ErrorCode code) => new ErrorResult.con1(node, code);
+ ErrorResult _error(AstNode node, ErrorCode code) => new ErrorResult.con1(node, code);
/**
* Return a result object representing the given value.
@@ -1780,7 +1775,7 @@
* @param value the value to be represented as a result object
* @return a result object representing the given value
*/
- ValidResult valueOf(DartObjectImpl value) => new ValidResult(value);
+ ValidResult _valueOf(DartObjectImpl value) => new ValidResult(value);
}
/**
@@ -1823,8 +1818,10 @@
*/
BoolState(this.value);
+ @override
BoolState convertToBool() => this;
+ @override
StringState convertToString() {
if (value == null) {
return StringState.UNKNOWN_VALUE;
@@ -1832,6 +1829,7 @@
return new StringState(value ? "true" : "false");
}
+ @override
BoolState equalEqual(InstanceState rightOperand) {
assertBoolNumStringOrNull(rightOperand);
if (value == null) {
@@ -1849,12 +1847,16 @@
return FALSE_STATE;
}
+ @override
bool operator ==(Object object) => object is BoolState && identical(value, object.value);
+ @override
String get typeName => "bool";
+ @override
bool get hasExactValue => true;
+ @override
int get hashCode => value == null ? 0 : (value ? 2 : 3);
/**
@@ -1862,10 +1864,13 @@
*
* @return `true` if this object represents a boolean value
*/
+ @override
bool get isBool => true;
+ @override
bool get isBoolNumStringOrNull => true;
+ @override
BoolState logicalAnd(InstanceState rightOperand) {
assertBool(rightOperand);
if (value == null) {
@@ -1874,6 +1879,7 @@
return value ? rightOperand.convertToBool() : FALSE_STATE;
}
+ @override
BoolState logicalNot() {
if (value == null) {
return UNKNOWN_VALUE;
@@ -1881,6 +1887,7 @@
return value ? FALSE_STATE : TRUE_STATE;
}
+ @override
BoolState logicalOr(InstanceState rightOperand) {
assertBool(rightOperand);
if (value == null) {
@@ -1889,6 +1896,7 @@
return value ? TRUE_STATE : rightOperand.convertToBool();
}
+ @override
String toString() => value == null ? "-unknown-" : (value ? "true" : "false");
}
@@ -2040,6 +2048,7 @@
return new DartObjectImpl(typeProvider.boolType, _state.equalEqual(rightOperand._state));
}
+ @override
bool operator ==(Object object) {
if (object is! DartObjectImpl) {
return false;
@@ -2048,6 +2057,7 @@
return type == dartObject.type && _state == dartObject._state;
}
+ @override
bool get boolValue {
if (_state is BoolState) {
return (_state as BoolState).value;
@@ -2055,6 +2065,7 @@
return null;
}
+ @override
double get doubleValue {
if (_state is DoubleState) {
return (_state as DoubleState).value;
@@ -2062,6 +2073,7 @@
return null;
}
+ @override
int get intValue {
if (_state is IntState) {
return (_state as IntState).value;
@@ -2069,6 +2081,7 @@
return null;
}
+ @override
String get stringValue {
if (_state is StringState) {
return (_state as StringState).value;
@@ -2076,6 +2089,7 @@
return null;
}
+ @override
Object get value => _state.value;
/**
@@ -2098,8 +2112,10 @@
*/
DartObjectImpl greaterThanOrEqual(TypeProvider typeProvider, DartObjectImpl rightOperand) => new DartObjectImpl(typeProvider.boolType, _state.greaterThanOrEqual(rightOperand._state));
+ @override
bool get hasExactValue => _state.hasExactValue;
+ @override
int get hashCode => ObjectUtilities.combineHashCodes(type.hashCode, _state.hashCode);
/**
@@ -2127,10 +2143,13 @@
*/
bool get isBoolNumStringOrNull => _state.isBoolNumStringOrNull;
+ @override
bool get isFalse => _state is BoolState && identical((_state as BoolState).value, false);
+ @override
bool get isNull => _state is NullState;
+ @override
bool get isTrue => _state is BoolState && identical((_state as BoolState).value, true);
/**
@@ -2325,6 +2344,7 @@
throw new IllegalStateException("times returned a ${result.runtimeType.toString()}");
}
+ @override
String toString() => "${type.displayName} (${_state.toString()})";
}
@@ -2350,6 +2370,7 @@
*/
DoubleState(this.value);
+ @override
NumState add(InstanceState rightOperand) {
assertNumOrNull(rightOperand);
if (value == null) {
@@ -2373,6 +2394,7 @@
throw new EvaluationException(CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION);
}
+ @override
StringState convertToString() {
if (value == null) {
return StringState.UNKNOWN_VALUE;
@@ -2380,6 +2402,7 @@
return new StringState(value.toString());
}
+ @override
NumState divide(InstanceState rightOperand) {
assertNumOrNull(rightOperand);
if (value == null) {
@@ -2403,6 +2426,7 @@
throw new EvaluationException(CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION);
}
+ @override
BoolState equalEqual(InstanceState rightOperand) {
assertBoolNumStringOrNull(rightOperand);
if (value == null) {
@@ -2426,10 +2450,13 @@
return BoolState.FALSE_STATE;
}
+ @override
bool operator ==(Object object) => object is DoubleState && (value == object.value);
+ @override
String get typeName => "double";
+ @override
BoolState greaterThan(InstanceState rightOperand) {
assertNumOrNull(rightOperand);
if (value == null) {
@@ -2453,6 +2480,7 @@
throw new EvaluationException(CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION);
}
+ @override
BoolState greaterThanOrEqual(InstanceState rightOperand) {
assertNumOrNull(rightOperand);
if (value == null) {
@@ -2476,10 +2504,13 @@
throw new EvaluationException(CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION);
}
+ @override
bool get hasExactValue => true;
+ @override
int get hashCode => value == null ? 0 : value.hashCode;
+ @override
IntState integerDivide(InstanceState rightOperand) {
assertNumOrNull(rightOperand);
if (value == null) {
@@ -2505,8 +2536,10 @@
throw new EvaluationException(CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION);
}
+ @override
bool get isBoolNumStringOrNull => true;
+ @override
BoolState lessThan(InstanceState rightOperand) {
assertNumOrNull(rightOperand);
if (value == null) {
@@ -2530,6 +2563,7 @@
throw new EvaluationException(CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION);
}
+ @override
BoolState lessThanOrEqual(InstanceState rightOperand) {
assertNumOrNull(rightOperand);
if (value == null) {
@@ -2553,6 +2587,7 @@
throw new EvaluationException(CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION);
}
+ @override
NumState minus(InstanceState rightOperand) {
assertNumOrNull(rightOperand);
if (value == null) {
@@ -2576,6 +2611,7 @@
throw new EvaluationException(CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION);
}
+ @override
NumState negated() {
if (value == null) {
return UNKNOWN_VALUE;
@@ -2583,6 +2619,7 @@
return new DoubleState(-(value));
}
+ @override
NumState remainder(InstanceState rightOperand) {
assertNumOrNull(rightOperand);
if (value == null) {
@@ -2606,6 +2643,7 @@
throw new EvaluationException(CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION);
}
+ @override
NumState times(InstanceState rightOperand) {
assertNumOrNull(rightOperand);
if (value == null) {
@@ -2629,6 +2667,7 @@
throw new EvaluationException(CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION);
}
+ @override
String toString() => value == null ? "-unknown-" : value.toString();
}
@@ -2642,115 +2681,142 @@
*/
static DynamicState DYNAMIC_STATE = new DynamicState();
+ @override
NumState add(InstanceState rightOperand) {
assertNumOrNull(rightOperand);
- return unknownNum(rightOperand);
+ return _unknownNum(rightOperand);
}
+ @override
IntState bitAnd(InstanceState rightOperand) {
assertIntOrNull(rightOperand);
return IntState.UNKNOWN_VALUE;
}
+ @override
IntState bitNot() => IntState.UNKNOWN_VALUE;
+ @override
IntState bitOr(InstanceState rightOperand) {
assertIntOrNull(rightOperand);
return IntState.UNKNOWN_VALUE;
}
+ @override
IntState bitXor(InstanceState rightOperand) {
assertIntOrNull(rightOperand);
return IntState.UNKNOWN_VALUE;
}
+ @override
StringState concatenate(InstanceState rightOperand) {
assertString(rightOperand);
return StringState.UNKNOWN_VALUE;
}
+ @override
BoolState convertToBool() => BoolState.UNKNOWN_VALUE;
+ @override
StringState convertToString() => StringState.UNKNOWN_VALUE;
+ @override
NumState divide(InstanceState rightOperand) {
assertNumOrNull(rightOperand);
- return unknownNum(rightOperand);
+ return _unknownNum(rightOperand);
}
+ @override
BoolState equalEqual(InstanceState rightOperand) {
assertBoolNumStringOrNull(rightOperand);
return BoolState.UNKNOWN_VALUE;
}
+ @override
String get typeName => "dynamic";
+ @override
BoolState greaterThan(InstanceState rightOperand) {
assertNumOrNull(rightOperand);
return BoolState.UNKNOWN_VALUE;
}
+ @override
BoolState greaterThanOrEqual(InstanceState rightOperand) {
assertNumOrNull(rightOperand);
return BoolState.UNKNOWN_VALUE;
}
+ @override
IntState integerDivide(InstanceState rightOperand) {
assertNumOrNull(rightOperand);
return IntState.UNKNOWN_VALUE;
}
+ @override
bool get isBool => true;
+ @override
bool get isBoolNumStringOrNull => true;
+ @override
BoolState lessThan(InstanceState rightOperand) {
assertNumOrNull(rightOperand);
return BoolState.UNKNOWN_VALUE;
}
+ @override
BoolState lessThanOrEqual(InstanceState rightOperand) {
assertNumOrNull(rightOperand);
return BoolState.UNKNOWN_VALUE;
}
+ @override
BoolState logicalAnd(InstanceState rightOperand) {
assertBool(rightOperand);
return BoolState.UNKNOWN_VALUE;
}
+ @override
BoolState logicalNot() => BoolState.UNKNOWN_VALUE;
+ @override
BoolState logicalOr(InstanceState rightOperand) {
assertBool(rightOperand);
return rightOperand.convertToBool();
}
+ @override
NumState minus(InstanceState rightOperand) {
assertNumOrNull(rightOperand);
- return unknownNum(rightOperand);
+ return _unknownNum(rightOperand);
}
+ @override
NumState negated() => NumState.UNKNOWN_VALUE;
+ @override
NumState remainder(InstanceState rightOperand) {
assertNumOrNull(rightOperand);
- return unknownNum(rightOperand);
+ return _unknownNum(rightOperand);
}
+ @override
IntState shiftLeft(InstanceState rightOperand) {
assertIntOrNull(rightOperand);
return IntState.UNKNOWN_VALUE;
}
+ @override
IntState shiftRight(InstanceState rightOperand) {
assertIntOrNull(rightOperand);
return IntState.UNKNOWN_VALUE;
}
+ @override
NumState times(InstanceState rightOperand) {
assertNumOrNull(rightOperand);
- return unknownNum(rightOperand);
+ return _unknownNum(rightOperand);
}
/**
@@ -2760,7 +2826,7 @@
* @param rightOperand the operand whose type will determine the type of the result
* @return an object representing an unknown numeric value
*/
- NumState unknownNum(InstanceState rightOperand) {
+ NumState _unknownNum(InstanceState rightOperand) {
if (rightOperand is IntState) {
return IntState.UNKNOWN_VALUE;
} else if (rightOperand is DoubleState) {
@@ -2807,6 +2873,7 @@
this._element = element;
}
+ @override
StringState convertToString() {
if (_element == null) {
return StringState.UNKNOWN_VALUE;
@@ -2814,8 +2881,10 @@
return new StringState(_element.name);
}
+ @override
bool operator ==(Object object) => object is FunctionState && (_element == object._element);
+ @override
BoolState equalEqual(InstanceState rightOperand) {
if (_element == null) {
return BoolState.UNKNOWN_VALUE;
@@ -2832,10 +2901,13 @@
return BoolState.FALSE_STATE;
}
+ @override
String get typeName => "Function";
+ @override
int get hashCode => _element == null ? 0 : _element.hashCode;
+ @override
String toString() => _element == null ? "-unknown-" : _element.name;
}
@@ -2863,8 +2935,10 @@
this._fieldMap = fieldMap;
}
+ @override
StringState convertToString() => StringState.UNKNOWN_VALUE;
+ @override
bool operator ==(Object object) {
if (object is! GenericState) {
return false;
@@ -2885,6 +2959,7 @@
return true;
}
+ @override
BoolState equalEqual(InstanceState rightOperand) {
assertBoolNumStringOrNull(rightOperand);
if (rightOperand is DynamicState) {
@@ -2893,8 +2968,10 @@
return BoolState.from(this == rightOperand);
}
+ @override
String get typeName => "user defined type";
+ @override
int get hashCode {
int hashCode = 0;
for (DartObjectImpl value in _fieldMap.values) {
@@ -3324,6 +3401,7 @@
*/
IntState(this.value);
+ @override
NumState add(InstanceState rightOperand) {
assertNumOrNull(rightOperand);
if (value == null) {
@@ -3350,6 +3428,7 @@
throw new EvaluationException(CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION);
}
+ @override
IntState bitAnd(InstanceState rightOperand) {
assertIntOrNull(rightOperand);
if (value == null) {
@@ -3367,6 +3446,7 @@
throw new EvaluationException(CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION);
}
+ @override
IntState bitNot() {
if (value == null) {
return UNKNOWN_VALUE;
@@ -3374,6 +3454,7 @@
return new IntState(~value);
}
+ @override
IntState bitOr(InstanceState rightOperand) {
assertIntOrNull(rightOperand);
if (value == null) {
@@ -3391,6 +3472,7 @@
throw new EvaluationException(CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION);
}
+ @override
IntState bitXor(InstanceState rightOperand) {
assertIntOrNull(rightOperand);
if (value == null) {
@@ -3408,6 +3490,7 @@
throw new EvaluationException(CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION);
}
+ @override
StringState convertToString() {
if (value == null) {
return StringState.UNKNOWN_VALUE;
@@ -3415,6 +3498,7 @@
return new StringState(value.toString());
}
+ @override
NumState divide(InstanceState rightOperand) {
assertNumOrNull(rightOperand);
if (value == null) {
@@ -3443,6 +3527,7 @@
throw new EvaluationException(CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION);
}
+ @override
BoolState equalEqual(InstanceState rightOperand) {
assertBoolNumStringOrNull(rightOperand);
if (value == null) {
@@ -3466,10 +3551,13 @@
return BoolState.FALSE_STATE;
}
+ @override
bool operator ==(Object object) => object is IntState && (value == object.value);
+ @override
String get typeName => "int";
+ @override
BoolState greaterThan(InstanceState rightOperand) {
assertNumOrNull(rightOperand);
if (value == null) {
@@ -3493,6 +3581,7 @@
throw new EvaluationException(CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION);
}
+ @override
BoolState greaterThanOrEqual(InstanceState rightOperand) {
assertNumOrNull(rightOperand);
if (value == null) {
@@ -3516,10 +3605,13 @@
throw new EvaluationException(CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION);
}
+ @override
bool get hasExactValue => true;
+ @override
int get hashCode => value == null ? 0 : value.hashCode;
+ @override
IntState integerDivide(InstanceState rightOperand) {
assertNumOrNull(rightOperand);
if (value == null) {
@@ -3546,8 +3638,10 @@
throw new EvaluationException(CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION);
}
+ @override
bool get isBoolNumStringOrNull => true;
+ @override
BoolState lessThan(InstanceState rightOperand) {
assertNumOrNull(rightOperand);
if (value == null) {
@@ -3571,6 +3665,7 @@
throw new EvaluationException(CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION);
}
+ @override
BoolState lessThanOrEqual(InstanceState rightOperand) {
assertNumOrNull(rightOperand);
if (value == null) {
@@ -3594,6 +3689,7 @@
throw new EvaluationException(CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION);
}
+ @override
NumState minus(InstanceState rightOperand) {
assertNumOrNull(rightOperand);
if (value == null) {
@@ -3620,6 +3716,7 @@
throw new EvaluationException(CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION);
}
+ @override
NumState negated() {
if (value == null) {
return UNKNOWN_VALUE;
@@ -3627,6 +3724,7 @@
return new IntState(-value);
}
+ @override
NumState remainder(InstanceState rightOperand) {
assertNumOrNull(rightOperand);
if (value == null) {
@@ -3655,6 +3753,7 @@
throw new EvaluationException(CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION);
}
+ @override
IntState shiftLeft(InstanceState rightOperand) {
assertIntOrNull(rightOperand);
if (value == null) {
@@ -3674,6 +3773,7 @@
throw new EvaluationException(CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION);
}
+ @override
IntState shiftRight(InstanceState rightOperand) {
assertIntOrNull(rightOperand);
if (value == null) {
@@ -3693,6 +3793,7 @@
throw new EvaluationException(CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION);
}
+ @override
NumState times(InstanceState rightOperand) {
assertNumOrNull(rightOperand);
if (value == null) {
@@ -3719,6 +3820,7 @@
throw new EvaluationException(CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION);
}
+ @override
String toString() => value == null ? "-unknown-" : value.toString();
}
@@ -3741,8 +3843,10 @@
this._elements = elements;
}
+ @override
StringState convertToString() => StringState.UNKNOWN_VALUE;
+ @override
BoolState equalEqual(InstanceState rightOperand) {
assertBoolNumStringOrNull(rightOperand);
if (rightOperand is DynamicState) {
@@ -3751,6 +3855,7 @@
return BoolState.from(this == rightOperand);
}
+ @override
bool operator ==(Object object) {
if (object is! ListState) {
return false;
@@ -3770,8 +3875,10 @@
return true;
}
+ @override
String get typeName => "List";
+ @override
List<Object> get value {
int count = _elements.length;
List<Object> result = new List<Object>(count);
@@ -3785,6 +3892,7 @@
return result;
}
+ @override
bool get hasExactValue {
int count = _elements.length;
for (int i = 0; i < count; i++) {
@@ -3795,6 +3903,7 @@
return true;
}
+ @override
int get hashCode {
int value = 0;
int count = _elements.length;
@@ -3824,8 +3933,10 @@
this._entries = entries;
}
+ @override
StringState convertToString() => StringState.UNKNOWN_VALUE;
+ @override
BoolState equalEqual(InstanceState rightOperand) {
assertBoolNumStringOrNull(rightOperand);
if (rightOperand is DynamicState) {
@@ -3834,6 +3945,7 @@
return BoolState.from(this == rightOperand);
}
+ @override
bool operator ==(Object object) {
if (object is! MapState) {
return false;
@@ -3856,8 +3968,10 @@
return true;
}
+ @override
String get typeName => "Map";
+ @override
Map<Object, Object> get value {
Map<Object, Object> result = new Map<Object, Object>();
for (MapEntry<DartObjectImpl, DartObjectImpl> entry in getMapEntrySet(_entries)) {
@@ -3871,6 +3985,7 @@
return result;
}
+ @override
bool get hasExactValue {
for (MapEntry<DartObjectImpl, DartObjectImpl> entry in getMapEntrySet(_entries)) {
if (!entry.getKey().hasExactValue || !entry.getValue().hasExactValue) {
@@ -3880,6 +3995,7 @@
return true;
}
+ @override
int get hashCode {
int value = 0;
for (DartObjectImpl key in _entries.keys.toSet()) {
@@ -3898,12 +4014,15 @@
*/
static NullState NULL_STATE = new NullState();
+ @override
BoolState convertToBool() {
throw new EvaluationException(CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION);
}
+ @override
StringState convertToString() => new StringState("null");
+ @override
BoolState equalEqual(InstanceState rightOperand) {
assertBoolNumStringOrNull(rightOperand);
if (rightOperand is DynamicState) {
@@ -3912,20 +4031,27 @@
return BoolState.from(rightOperand is NullState);
}
+ @override
bool operator ==(Object object) => object is NullState;
+ @override
String get typeName => "Null";
+ @override
bool get hasExactValue => true;
+ @override
int get hashCode => 0;
+ @override
bool get isBoolNumStringOrNull => true;
+ @override
BoolState logicalNot() {
throw new EvaluationException(CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION);
}
+ @override
String toString() => "null";
}
@@ -3939,39 +4065,49 @@
*/
static NumState UNKNOWN_VALUE = new NumState();
+ @override
NumState add(InstanceState rightOperand) {
assertNumOrNull(rightOperand);
return UNKNOWN_VALUE;
}
+ @override
StringState convertToString() => StringState.UNKNOWN_VALUE;
+ @override
NumState divide(InstanceState rightOperand) {
assertNumOrNull(rightOperand);
return UNKNOWN_VALUE;
}
+ @override
bool operator ==(Object object) => object is NumState;
+ @override
BoolState equalEqual(InstanceState rightOperand) {
assertBoolNumStringOrNull(rightOperand);
return BoolState.UNKNOWN_VALUE;
}
+ @override
String get typeName => "num";
+ @override
BoolState greaterThan(InstanceState rightOperand) {
assertNumOrNull(rightOperand);
return BoolState.UNKNOWN_VALUE;
}
+ @override
BoolState greaterThanOrEqual(InstanceState rightOperand) {
assertNumOrNull(rightOperand);
return BoolState.UNKNOWN_VALUE;
}
+ @override
int get hashCode => 7;
+ @override
IntState integerDivide(InstanceState rightOperand) {
assertNumOrNull(rightOperand);
if (rightOperand is IntState) {
@@ -3987,35 +4123,43 @@
return IntState.UNKNOWN_VALUE;
}
+ @override
bool get isBoolNumStringOrNull => true;
+ @override
BoolState lessThan(InstanceState rightOperand) {
assertNumOrNull(rightOperand);
return BoolState.UNKNOWN_VALUE;
}
+ @override
BoolState lessThanOrEqual(InstanceState rightOperand) {
assertNumOrNull(rightOperand);
return BoolState.UNKNOWN_VALUE;
}
+ @override
NumState minus(InstanceState rightOperand) {
assertNumOrNull(rightOperand);
return UNKNOWN_VALUE;
}
+ @override
NumState negated() => UNKNOWN_VALUE;
+ @override
NumState remainder(InstanceState rightOperand) {
assertNumOrNull(rightOperand);
return UNKNOWN_VALUE;
}
+ @override
NumState times(InstanceState rightOperand) {
assertNumOrNull(rightOperand);
return UNKNOWN_VALUE;
}
+ @override
String toString() => "-unknown-";
}
@@ -4041,6 +4185,7 @@
*/
StringState(this.value);
+ @override
StringState concatenate(InstanceState rightOperand) {
if (value == null) {
return UNKNOWN_VALUE;
@@ -4057,8 +4202,10 @@
return super.concatenate(rightOperand);
}
+ @override
StringState convertToString() => this;
+ @override
BoolState equalEqual(InstanceState rightOperand) {
assertBoolNumStringOrNull(rightOperand);
if (value == null) {
@@ -4076,16 +4223,22 @@
return BoolState.FALSE_STATE;
}
+ @override
bool operator ==(Object object) => object is StringState && (value == object.value);
+ @override
String get typeName => "String";
+ @override
bool get hasExactValue => true;
+ @override
int get hashCode => value == null ? 0 : value.hashCode;
+ @override
bool get isBoolNumStringOrNull => true;
+ @override
String toString() => value == null ? "-unknown-" : "'${value}'";
}
@@ -4106,6 +4259,7 @@
*/
SymbolState(this.value);
+ @override
StringState convertToString() {
if (value == null) {
return StringState.UNKNOWN_VALUE;
@@ -4113,6 +4267,7 @@
return new StringState(value);
}
+ @override
BoolState equalEqual(InstanceState rightOperand) {
assertBoolNumStringOrNull(rightOperand);
if (value == null) {
@@ -4130,14 +4285,19 @@
return BoolState.FALSE_STATE;
}
+ @override
bool operator ==(Object object) => object is SymbolState && (value == object.value);
+ @override
String get typeName => "Symbol";
+ @override
bool get hasExactValue => true;
+ @override
int get hashCode => value == null ? 0 : value.hashCode;
+ @override
String toString() => value == null ? "-unknown-" : "#${value}";
}
@@ -4159,6 +4319,7 @@
this._element = element;
}
+ @override
StringState convertToString() {
if (_element == null) {
return StringState.UNKNOWN_VALUE;
@@ -4166,8 +4327,10 @@
return new StringState(_element.name);
}
+ @override
bool operator ==(Object object) => object is TypeState && (_element == object._element);
+ @override
BoolState equalEqual(InstanceState rightOperand) {
assertBoolNumStringOrNull(rightOperand);
if (_element == null) {
@@ -4185,9 +4348,12 @@
return BoolState.FALSE_STATE;
}
+ @override
String get typeName => "Type";
+ @override
int get hashCode => _element == null ? 0 : _element.hashCode;
+ @override
String toString() => _element == null ? "-unknown-" : _element.name;
}
\ No newline at end of file
diff --git a/pkg/analyzer/lib/src/generated/element.dart b/pkg/analyzer/lib/src/generated/element.dart
index 9e13d86..9f273be 100644
--- a/pkg/analyzer/lib/src/generated/element.dart
+++ b/pkg/analyzer/lib/src/generated/element.dart
@@ -129,6 +129,7 @@
*
* @return the resolved [ClassDeclaration], not `null`.
*/
+ @override
ClassDeclaration get node;
/**
@@ -203,6 +204,13 @@
bool get hasReferenceToSuper;
/**
+ * Return `true` if this class declares a static member.
+ *
+ * @return `true` if this class declares a static member
+ */
+ bool get hasStaticMember;
+
+ /**
* Return `true` if this class is abstract. A class is abstract if it has an explicit
* `abstract` modifier. Note, that this definition of <i>abstract</i> is different from
* <i>has unimplemented members</i>.
@@ -315,6 +323,7 @@
*
* @return the type in which this member is defined
*/
+ @override
ClassElement get enclosingElement;
/**
@@ -353,6 +362,7 @@
*
* @return the library in which this compilation unit is defined
*/
+ @override
LibraryElement get enclosingElement;
/**
@@ -377,6 +387,7 @@
*
* @return the resolved [CompilationUnit], not `null`.
*/
+ @override
CompilationUnit get node;
/**
@@ -417,6 +428,7 @@
*
* @return the resolved [ConstructorDeclaration], not `null`.
*/
+ @override
ConstructorDeclaration get node;
/**
@@ -976,7 +988,7 @@
*
* @return the return type defined by this executable element
*/
- Type2 get returnType;
+ DartType get returnType;
/**
* Return the type of function defined by this executable element.
@@ -1078,6 +1090,7 @@
*
* @return the resolved [FunctionDeclaration], not `null`.
*/
+ @override
FunctionDeclaration get node;
}
@@ -1091,6 +1104,7 @@
*
* @return the compilation unit in which this type alias is defined
*/
+ @override
CompilationUnitElement get enclosingElement;
/**
@@ -1102,6 +1116,7 @@
*
* @return the resolved [FunctionTypeAlias], not `null`.
*/
+ @override
FunctionTypeAlias get node;
/**
@@ -1116,7 +1131,7 @@
*
* @return the return type defined by this type alias
*/
- Type2 get returnType;
+ DartType get returnType;
/**
* Return the type of function defined by this type alias.
@@ -1218,14 +1233,6 @@
* @return the offset of the prefix of this import
*/
int get prefixOffset;
-
- /**
- * Return the offset of the character immediately following the last character of this node's URI,
- * or `-1` for synthetic import.
- *
- * @return the offset of the character just past the node's URI
- */
- int get uriEnd;
}
/**
@@ -1238,6 +1245,7 @@
*
* @return the executable element in which this label is defined
*/
+ @override
ExecutableElement get enclosingElement;
}
@@ -1426,6 +1434,7 @@
*
* @return the resolved [MethodDeclaration], not `null`.
*/
+ @override
MethodDeclaration get node;
/**
@@ -1458,7 +1467,7 @@
*
* @return the type of this element as the dynamic type
*/
- Type2 get type;
+ DartType get type;
}
/**
@@ -1533,6 +1542,7 @@
*
* @return the library into which other libraries are imported using this prefix
*/
+ @override
LibraryElement get enclosingElement;
/**
@@ -1707,7 +1717,7 @@
*
* @return the type representing the bound associated with this parameter
*/
- Type2 get bound;
+ DartType get bound;
/**
* Return the type defined by this type parameter.
@@ -1732,6 +1742,21 @@
*/
abstract class UriReferencedElement implements Element {
/**
+ * Return the offset of the character immediately following the last character of this node's URI,
+ * or `-1` for synthetic import.
+ *
+ * @return the offset of the character just past the node's URI
+ */
+ int get uriEnd;
+
+ /**
+ * Return the offset of the URU in the file, or `-1` if this element is synthetic.
+ *
+ * @return the offset of the URI
+ */
+ int get uriOffset;
+
+ /**
* Return the URI that is used to include this element into the enclosing library, or `null`
* if this is the defining compilation unit of a library.
*
@@ -1763,6 +1788,7 @@
*
* @return the resolved [VariableDeclaration], not `null`.
*/
+ @override
VariableDeclaration get node;
/**
@@ -1771,7 +1797,7 @@
*
* @return the declared type of this variable
*/
- Type2 get type;
+ DartType get type;
/**
* Return `true` if this variable was declared with the 'const' modifier.
@@ -2003,6 +2029,7 @@
class AngularPropertyKind_TWO_WAY extends AngularPropertyKind {
AngularPropertyKind_TWO_WAY(String name, int ordinal) : super(name, ordinal);
+ @override
bool callsGetter() => true;
}
@@ -2021,7 +2048,7 @@
*
* @return the type of this property.
*/
- Type2 get type;
+ DartType get type;
}
/**
@@ -2113,30 +2140,41 @@
* to not be visited.
*/
class GeneralizingElementVisitor<R> implements ElementVisitor<R> {
+ @override
R visitAngularComponentElement(AngularComponentElement element) => visitAngularHasSelectorElement(element);
+ @override
R visitAngularControllerElement(AngularControllerElement element) => visitAngularHasSelectorElement(element);
+ @override
R visitAngularDirectiveElement(AngularDirectiveElement element) => visitAngularHasSelectorElement(element);
R visitAngularElement(AngularElement element) => visitToolkitObjectElement(element);
+ @override
R visitAngularFilterElement(AngularFilterElement element) => visitAngularElement(element);
R visitAngularHasSelectorElement(AngularHasSelectorElement element) => visitAngularElement(element);
+ @override
R visitAngularPropertyElement(AngularPropertyElement element) => visitAngularElement(element);
+ @override
R visitAngularScopePropertyElement(AngularScopePropertyElement element) => visitAngularElement(element);
+ @override
R visitAngularSelectorElement(AngularSelectorElement element) => visitAngularElement(element);
+ @override
R visitAngularViewElement(AngularViewElement element) => visitAngularElement(element);
+ @override
R visitClassElement(ClassElement element) => visitElement(element);
+ @override
R visitCompilationUnitElement(CompilationUnitElement element) => visitElement(element);
+ @override
R visitConstructorElement(ConstructorElement element) => visitExecutableElement(element);
R visitElement(Element element) {
@@ -2144,30 +2182,41 @@
return null;
}
+ @override
R visitEmbeddedHtmlScriptElement(EmbeddedHtmlScriptElement element) => visitHtmlScriptElement(element);
R visitExecutableElement(ExecutableElement element) => visitElement(element);
+ @override
R visitExportElement(ExportElement element) => visitElement(element);
+ @override
R visitExternalHtmlScriptElement(ExternalHtmlScriptElement element) => visitHtmlScriptElement(element);
+ @override
R visitFieldElement(FieldElement element) => visitPropertyInducingElement(element);
+ @override
R visitFieldFormalParameterElement(FieldFormalParameterElement element) => visitParameterElement(element);
+ @override
R visitFunctionElement(FunctionElement element) => visitLocalElement(element);
+ @override
R visitFunctionTypeAliasElement(FunctionTypeAliasElement element) => visitElement(element);
+ @override
R visitHtmlElement(HtmlElement element) => visitElement(element);
R visitHtmlScriptElement(HtmlScriptElement element) => visitElement(element);
+ @override
R visitImportElement(ImportElement element) => visitElement(element);
+ @override
R visitLabelElement(LabelElement element) => visitElement(element);
+ @override
R visitLibraryElement(LibraryElement element) => visitElement(element);
R visitLocalElement(LocalElement element) {
@@ -2181,24 +2230,32 @@
return null;
}
+ @override
R visitLocalVariableElement(LocalVariableElement element) => visitLocalElement(element);
+ @override
R visitMethodElement(MethodElement element) => visitExecutableElement(element);
+ @override
R visitMultiplyDefinedElement(MultiplyDefinedElement element) => visitElement(element);
+ @override
R visitParameterElement(ParameterElement element) => visitLocalElement(element);
+ @override
R visitPrefixElement(PrefixElement element) => visitElement(element);
+ @override
R visitPropertyAccessorElement(PropertyAccessorElement element) => visitExecutableElement(element);
R visitPropertyInducingElement(PropertyInducingElement element) => visitVariableElement(element);
R visitToolkitObjectElement(ToolkitObjectElement element) => visitElement(element);
+ @override
R visitTopLevelVariableElement(TopLevelVariableElement element) => visitPropertyInducingElement(element);
+ @override
R visitTypeParameterElement(TypeParameterElement element) => visitElement(element);
R visitVariableElement(VariableElement element) => visitElement(element);
@@ -2215,151 +2272,181 @@
* children of the visited element to not be visited.
*/
class RecursiveElementVisitor<R> implements ElementVisitor<R> {
+ @override
R visitAngularComponentElement(AngularComponentElement element) {
element.visitChildren(this);
return null;
}
+ @override
R visitAngularControllerElement(AngularControllerElement element) {
element.visitChildren(this);
return null;
}
+ @override
R visitAngularDirectiveElement(AngularDirectiveElement element) {
element.visitChildren(this);
return null;
}
+ @override
R visitAngularFilterElement(AngularFilterElement element) {
element.visitChildren(this);
return null;
}
+ @override
R visitAngularPropertyElement(AngularPropertyElement element) {
element.visitChildren(this);
return null;
}
+ @override
R visitAngularScopePropertyElement(AngularScopePropertyElement element) {
element.visitChildren(this);
return null;
}
+ @override
R visitAngularSelectorElement(AngularSelectorElement element) {
element.visitChildren(this);
return null;
}
+ @override
R visitAngularViewElement(AngularViewElement element) {
element.visitChildren(this);
return null;
}
+ @override
R visitClassElement(ClassElement element) {
element.visitChildren(this);
return null;
}
+ @override
R visitCompilationUnitElement(CompilationUnitElement element) {
element.visitChildren(this);
return null;
}
+ @override
R visitConstructorElement(ConstructorElement element) {
element.visitChildren(this);
return null;
}
+ @override
R visitEmbeddedHtmlScriptElement(EmbeddedHtmlScriptElement element) {
element.visitChildren(this);
return null;
}
+ @override
R visitExportElement(ExportElement element) {
element.visitChildren(this);
return null;
}
+ @override
R visitExternalHtmlScriptElement(ExternalHtmlScriptElement element) {
element.visitChildren(this);
return null;
}
+ @override
R visitFieldElement(FieldElement element) {
element.visitChildren(this);
return null;
}
+ @override
R visitFieldFormalParameterElement(FieldFormalParameterElement element) {
element.visitChildren(this);
return null;
}
+ @override
R visitFunctionElement(FunctionElement element) {
element.visitChildren(this);
return null;
}
+ @override
R visitFunctionTypeAliasElement(FunctionTypeAliasElement element) {
element.visitChildren(this);
return null;
}
+ @override
R visitHtmlElement(HtmlElement element) {
element.visitChildren(this);
return null;
}
+ @override
R visitImportElement(ImportElement element) {
element.visitChildren(this);
return null;
}
+ @override
R visitLabelElement(LabelElement element) {
element.visitChildren(this);
return null;
}
+ @override
R visitLibraryElement(LibraryElement element) {
element.visitChildren(this);
return null;
}
+ @override
R visitLocalVariableElement(LocalVariableElement element) {
element.visitChildren(this);
return null;
}
+ @override
R visitMethodElement(MethodElement element) {
element.visitChildren(this);
return null;
}
+ @override
R visitMultiplyDefinedElement(MultiplyDefinedElement element) {
element.visitChildren(this);
return null;
}
+ @override
R visitParameterElement(ParameterElement element) {
element.visitChildren(this);
return null;
}
+ @override
R visitPrefixElement(PrefixElement element) {
element.visitChildren(this);
return null;
}
+ @override
R visitPropertyAccessorElement(PropertyAccessorElement element) {
element.visitChildren(this);
return null;
}
+ @override
R visitTopLevelVariableElement(TopLevelVariableElement element) {
element.visitChildren(this);
return null;
}
+ @override
R visitTypeParameterElement(TypeParameterElement element) {
element.visitChildren(this);
return null;
@@ -2373,64 +2460,94 @@
* whole structure) and that only need to visit a small number of element types.
*/
class SimpleElementVisitor<R> implements ElementVisitor<R> {
+ @override
R visitAngularComponentElement(AngularComponentElement element) => null;
+ @override
R visitAngularControllerElement(AngularControllerElement element) => null;
+ @override
R visitAngularDirectiveElement(AngularDirectiveElement element) => null;
+ @override
R visitAngularFilterElement(AngularFilterElement element) => null;
+ @override
R visitAngularPropertyElement(AngularPropertyElement element) => null;
+ @override
R visitAngularScopePropertyElement(AngularScopePropertyElement element) => null;
+ @override
R visitAngularSelectorElement(AngularSelectorElement element) => null;
+ @override
R visitAngularViewElement(AngularViewElement element) => null;
+ @override
R visitClassElement(ClassElement element) => null;
+ @override
R visitCompilationUnitElement(CompilationUnitElement element) => null;
+ @override
R visitConstructorElement(ConstructorElement element) => null;
+ @override
R visitEmbeddedHtmlScriptElement(EmbeddedHtmlScriptElement element) => null;
+ @override
R visitExportElement(ExportElement element) => null;
+ @override
R visitExternalHtmlScriptElement(ExternalHtmlScriptElement element) => null;
+ @override
R visitFieldElement(FieldElement element) => null;
+ @override
R visitFieldFormalParameterElement(FieldFormalParameterElement element) => null;
+ @override
R visitFunctionElement(FunctionElement element) => null;
+ @override
R visitFunctionTypeAliasElement(FunctionTypeAliasElement element) => null;
+ @override
R visitHtmlElement(HtmlElement element) => null;
+ @override
R visitImportElement(ImportElement element) => null;
+ @override
R visitLabelElement(LabelElement element) => null;
+ @override
R visitLibraryElement(LibraryElement element) => null;
+ @override
R visitLocalVariableElement(LocalVariableElement element) => null;
+ @override
R visitMethodElement(MethodElement element) => null;
+ @override
R visitMultiplyDefinedElement(MultiplyDefinedElement element) => null;
+ @override
R visitParameterElement(ParameterElement element) => null;
+ @override
R visitPrefixElement(PrefixElement element) => null;
+ @override
R visitPropertyAccessorElement(PropertyAccessorElement element) => null;
+ @override
R visitTopLevelVariableElement(TopLevelVariableElement element) => null;
+ @override
R visitTypeParameterElement(TypeParameterElement element) => null;
}
@@ -2528,18 +2645,22 @@
*
* @param name the name of this element
*/
- ClassElementImpl(Identifier name) : super.con1(name);
+ ClassElementImpl(Identifier name) : super.forNode(name);
+ @override
accept(ElementVisitor visitor) => visitor.visitClassElement(this);
+ @override
List<PropertyAccessorElement> get accessors => _accessors;
+ @override
List<InterfaceType> get allSupertypes {
List<InterfaceType> list = new List<InterfaceType>();
- collectAllSupertypes(list);
+ _collectAllSupertypes(list);
return new List.from(list);
}
+ @override
ElementImpl getChild(String identifier) {
//
// The casts in this method are safe because the set methods would have thrown a CCE if any of
@@ -2573,8 +2694,10 @@
return null;
}
+ @override
List<ConstructorElement> get constructors => _constructors;
+ @override
FieldElement getField(String name) {
for (FieldElement fieldElement in _fields) {
if (name == fieldElement.name) {
@@ -2584,8 +2707,10 @@
return null;
}
+ @override
List<FieldElement> get fields => _fields;
+ @override
PropertyAccessorElement getGetter(String getterName) {
for (PropertyAccessorElement accessor in _accessors) {
if (accessor.isGetter && accessor.name == getterName) {
@@ -2595,8 +2720,10 @@
return null;
}
+ @override
ElementKind get kind => ElementKind.CLASS;
+ @override
MethodElement getMethod(String methodName) {
for (MethodElement method in _methods) {
if (method.name == methodName) {
@@ -2606,8 +2733,10 @@
return null;
}
+ @override
List<MethodElement> get methods => _methods;
+ @override
ConstructorElement getNamedConstructor(String name) {
for (ConstructorElement element in constructors) {
String elementName = element.name;
@@ -2618,8 +2747,10 @@
return null;
}
+ @override
ClassDeclaration get node => getNodeMatching((node) => node is ClassDeclaration);
+ @override
PropertyAccessorElement getSetter(String setterName) {
// TODO (jwren) revisit- should we append '=' here or require clients to include it?
// Do we need the check for isSetter below?
@@ -2634,10 +2765,13 @@
return null;
}
+ @override
List<ToolkitObjectElement> get toolkitObjects => _toolkitObjects;
+ @override
List<TypeParameterElement> get typeParameters => _typeParameters;
+ @override
ConstructorElement get unnamedConstructor {
for (ConstructorElement element in constructors) {
String name = element.displayName;
@@ -2648,6 +2782,7 @@
return null;
}
+ @override
bool get hasNonFinalField {
List<ClassElement> classesToVisit = new List<ClassElement>();
Set<ClassElement> visitedClasses = new Set<ClassElement>();
@@ -2680,12 +2815,31 @@
return false;
}
+ @override
bool get hasReferenceToSuper => hasModifier(Modifier.REFERENCES_SUPER);
+ @override
+ bool get hasStaticMember {
+ for (MethodElement method in _methods) {
+ if (method.isStatic) {
+ return true;
+ }
+ }
+ for (PropertyAccessorElement accessor in _accessors) {
+ if (accessor.isStatic) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ @override
bool get isAbstract => hasModifier(Modifier.ABSTRACT);
- bool get isOrInheritsProxy => safeIsOrInheritsProxy(this, new Set<ClassElement>());
+ @override
+ bool get isOrInheritsProxy => _safeIsOrInheritsProxy(this, new Set<ClassElement>());
+ @override
bool get isProxy {
for (ElementAnnotation annotation in metadata) {
if (annotation.isProxy) {
@@ -2695,10 +2849,13 @@
return false;
}
+ @override
bool get isTypedef => hasModifier(Modifier.TYPEDEF);
+ @override
bool get isValidMixin => hasModifier(Modifier.MIXIN);
+ @override
PropertyAccessorElement lookUpGetter(String getterName, LibraryElement library) {
Set<ClassElement> visitedClasses = new Set<ClassElement>();
ClassElement currentElement = this;
@@ -2726,6 +2883,7 @@
return null;
}
+ @override
MethodElement lookUpMethod(String methodName, LibraryElement library) {
Set<ClassElement> visitedClasses = new Set<ClassElement>();
ClassElement currentElement = this;
@@ -2753,6 +2911,7 @@
return null;
}
+ @override
PropertyAccessorElement lookUpSetter(String setterName, LibraryElement library) {
Set<ClassElement> visitedClasses = new Set<ClassElement>();
ClassElement currentElement = this;
@@ -2888,6 +3047,7 @@
setModifier(Modifier.MIXIN, isValidMixin);
}
+ @override
void visitChildren(ElementVisitor visitor) {
super.visitChildren(visitor);
safelyVisitChildren(_accessors, visitor);
@@ -2898,6 +3058,7 @@
safelyVisitChildren(_typeParameters, visitor);
}
+ @override
void appendTo(JavaStringBuilder builder) {
String name = displayName;
if (name == null) {
@@ -2918,7 +3079,7 @@
}
}
- void collectAllSupertypes(List<InterfaceType> supertypes) {
+ void _collectAllSupertypes(List<InterfaceType> supertypes) {
List<InterfaceType> typesToVisit = new List<InterfaceType>();
List<ClassElement> visitedClasses = new List<ClassElement>();
typesToVisit.add(this.type);
@@ -2947,25 +3108,25 @@
}
}
- bool safeIsOrInheritsProxy(ClassElement classElt, Set<ClassElement> visitedClassElts) {
+ bool _safeIsOrInheritsProxy(ClassElement classElt, Set<ClassElement> visitedClassElts) {
if (visitedClassElts.contains(classElt)) {
return false;
}
visitedClassElts.add(classElt);
if (classElt.isProxy) {
return true;
- } else if (classElt.supertype != null && safeIsOrInheritsProxy(classElt.supertype.element, visitedClassElts)) {
+ } else if (classElt.supertype != null && _safeIsOrInheritsProxy(classElt.supertype.element, visitedClassElts)) {
return true;
}
List<InterfaceType> supertypes = classElt.interfaces;
for (int i = 0; i < supertypes.length; i++) {
- if (safeIsOrInheritsProxy(supertypes[i].element, visitedClassElts)) {
+ if (_safeIsOrInheritsProxy(supertypes[i].element, visitedClassElts)) {
return true;
}
}
supertypes = classElt.mixins;
for (int i = 0; i < supertypes.length; i++) {
- if (safeIsOrInheritsProxy(supertypes[i].element, visitedClassElts)) {
+ if (_safeIsOrInheritsProxy(supertypes[i].element, visitedClassElts)) {
return true;
}
}
@@ -2977,7 +3138,7 @@
* Instances of the class `CompilationUnitElementImpl` implement a
* [CompilationUnitElement].
*/
-class CompilationUnitElementImpl extends ElementImpl implements CompilationUnitElement {
+class CompilationUnitElementImpl extends UriReferencedElementImpl implements CompilationUnitElement {
/**
* An empty array of compilation unit elements.
*/
@@ -3020,12 +3181,6 @@
List<TopLevelVariableElement> _variables = TopLevelVariableElementImpl.EMPTY_ARRAY;
/**
- * The URI that is specified by the "part" directive in the enclosing library, or `null` if
- * this is the defining compilation unit of a library.
- */
- String uri;
-
- /**
* An array containing all of the Angular views contained in this compilation unit.
*/
List<AngularViewElement> _angularViews = AngularViewElement.EMPTY_ARRAY;
@@ -3035,16 +3190,21 @@
*
* @param name the name of this element
*/
- CompilationUnitElementImpl(String name) : super.con2(name, -1);
+ CompilationUnitElementImpl(String name) : super(name, -1);
+ @override
accept(ElementVisitor visitor) => visitor.visitCompilationUnitElement(this);
+ @override
bool operator ==(Object object) => object != null && runtimeType == object.runtimeType && source == (object as CompilationUnitElementImpl).source;
+ @override
List<PropertyAccessorElement> get accessors => _accessors;
+ @override
List<AngularViewElement> get angularViews => _angularViews;
+ @override
ElementImpl getChild(String identifier) {
//
// The casts in this method are safe because the set methods would have thrown a CCE if any of
@@ -3078,18 +3238,25 @@
return null;
}
+ @override
LibraryElement get enclosingElement => super.enclosingElement as LibraryElement;
+ @override
List<FunctionElement> get functions => _functions;
+ @override
List<FunctionTypeAliasElement> get functionTypeAliases => _typeAliases;
+ @override
ElementKind get kind => ElementKind.COMPILATION_UNIT;
+ @override
CompilationUnit get node => unit;
+ @override
List<TopLevelVariableElement> get topLevelVariables => _variables;
+ @override
ClassElement getType(String className) {
for (ClassElement type in _types) {
if (type.name == className) {
@@ -3099,8 +3266,10 @@
return null;
}
+ @override
List<ClassElement> get types => _types;
+ @override
int get hashCode => source.hashCode;
/**
@@ -3176,6 +3345,7 @@
this._types = types;
}
+ @override
void visitChildren(ElementVisitor visitor) {
super.visitChildren(visitor);
safelyVisitChildren(_accessors, visitor);
@@ -3186,6 +3356,7 @@
safelyVisitChildren(_angularViews, visitor);
}
+ @override
void appendTo(JavaStringBuilder builder) {
if (source == null) {
builder.append("{compilation unit}");
@@ -3194,6 +3365,7 @@
}
}
+ @override
String get identifier => source.encoding;
/**
@@ -3202,7 +3374,7 @@
* @param element the [Element] to get toolkit objects for
* @return the associated toolkit objects, may be empty, but not `null`
*/
- List<ToolkitObjectElement> getToolkitObjects(Element element) {
+ List<ToolkitObjectElement> _getToolkitObjects(Element element) {
List<ToolkitObjectElement> objects = _toolkitObjects[element];
if (objects != null) {
return objects;
@@ -3216,7 +3388,7 @@
* @param element the [Element] to associate toolkit objects with
* @param objects the toolkit objects to associate
*/
- void setToolkitObjects(Element element, List<ToolkitObjectElement> objects) {
+ void _setToolkitObjects(Element element, List<ToolkitObjectElement> objects) {
_toolkitObjects[element] = objects;
}
}
@@ -3238,8 +3410,10 @@
*/
ConstFieldElementImpl(Identifier name) : super.con1(name);
+ @override
EvaluationResultImpl get evaluationResult => _result;
+ @override
void set evaluationResult(EvaluationResultImpl result) {
this._result = result;
}
@@ -3262,8 +3436,10 @@
*/
ConstLocalVariableElementImpl(Identifier name) : super(name);
+ @override
EvaluationResultImpl get evaluationResult => _result;
+ @override
void set evaluationResult(EvaluationResultImpl result) {
this._result = result;
}
@@ -3286,8 +3462,10 @@
*/
ConstTopLevelVariableElementImpl(Identifier name) : super.con1(name);
+ @override
EvaluationResultImpl get evaluationResult => _result;
+ @override
void set evaluationResult(EvaluationResultImpl result) {
this._result = result;
}
@@ -3323,16 +3501,22 @@
*/
ConstructorElementImpl.con2(String name, int nameOffset) : super.con2(name, nameOffset);
+ @override
accept(ElementVisitor visitor) => visitor.visitConstructorElement(this);
+ @override
ClassElement get enclosingElement => super.enclosingElement as ClassElement;
+ @override
ElementKind get kind => ElementKind.CONSTRUCTOR;
+ @override
ConstructorDeclaration get node => getNodeMatching((node) => node is ConstructorDeclaration);
+ @override
bool get isConst => hasModifier(Modifier.CONST);
+ @override
bool get isDefaultConstructor {
// unnamed
String name = this.name;
@@ -3349,8 +3533,10 @@
return true;
}
+ @override
bool get isFactory => hasModifier(Modifier.FACTORY);
+ @override
bool get isStatic => false;
/**
@@ -3371,6 +3557,7 @@
setModifier(Modifier.FACTORY, isFactory);
}
+ @override
void appendTo(JavaStringBuilder builder) {
builder.append(enclosingElement.displayName);
String name = displayName;
@@ -3399,8 +3586,10 @@
*/
DefaultFieldFormalParameterElementImpl(Identifier name) : super(name);
+ @override
EvaluationResultImpl get evaluationResult => _result;
+ @override
void set evaluationResult(EvaluationResultImpl result) {
this._result = result;
}
@@ -3423,8 +3612,10 @@
*/
DefaultParameterElementImpl(Identifier name) : super.con1(name);
+ @override
EvaluationResultImpl get evaluationResult => _result;
+ @override
void set evaluationResult(EvaluationResultImpl result) {
this._result = result;
}
@@ -3452,12 +3643,14 @@
* created except as part of creating the type associated with this element. The single instance
* of this class should be accessed through the method [getInstance].
*/
- DynamicElementImpl() : super.con2(Keyword.DYNAMIC.syntax, -1) {
+ DynamicElementImpl() : super(Keyword.DYNAMIC.syntax, -1) {
setModifier(Modifier.SYNTHETIC, true);
}
+ @override
accept(ElementVisitor visitor) => null;
+ @override
ElementKind get kind => ElementKind.DYNAMIC;
}
@@ -3504,6 +3697,7 @@
*/
ElementAnnotationImpl(this.element);
+ @override
bool get isDeprecated {
if (element != null) {
LibraryElement library = element.library;
@@ -3521,6 +3715,7 @@
return false;
}
+ @override
bool get isOverride {
if (element != null) {
LibraryElement library = element.library;
@@ -3533,6 +3728,7 @@
return false;
}
+ @override
bool get isProxy {
if (element != null) {
LibraryElement library = element.library;
@@ -3545,6 +3741,7 @@
return false;
}
+ @override
String toString() => "@${element.toString()}";
}
@@ -3590,7 +3787,7 @@
*
* @param name the name of this element
*/
- ElementImpl.con1(Identifier name) : this.con2(name == null ? "" : name.name, name == null ? -1 : name.offset);
+ ElementImpl.forNode(Identifier name) : this(name == null ? "" : name.name, name == null ? -1 : name.offset);
/**
* Initialize a newly created element to have the given name.
@@ -3599,10 +3796,11 @@
* @param nameOffset the offset of the name of this element in the file that contains the
* declaration of this element
*/
- ElementImpl.con2(String name, this.nameOffset) {
+ ElementImpl(String name, this.nameOffset) {
this._name = StringUtilities.intern(name);
}
+ @override
String computeDocumentationComment() {
AnalysisContext context = this.context;
if (context == null) {
@@ -3611,6 +3809,7 @@
return context.computeDocumentationComment(this);
}
+ @override
bool operator ==(Object object) {
if (identical(this, object)) {
return true;
@@ -3621,6 +3820,7 @@
return object.runtimeType == runtimeType && (object as Element).location == location;
}
+ @override
Element getAncestor(Predicate<Element> predicate) {
Element ancestor = _enclosingElement;
while (ancestor != null && !predicate(ancestor)) {
@@ -3638,6 +3838,7 @@
*/
ElementImpl getChild(String identifier) => null;
+ @override
AnalysisContext get context {
if (_enclosingElement == null) {
return null;
@@ -3645,18 +3846,25 @@
return _enclosingElement.context;
}
+ @override
String get displayName => _name;
+ @override
Element get enclosingElement => _enclosingElement;
+ @override
LibraryElement get library => getAncestor((element) => element is LibraryElement);
+ @override
ElementLocation get location => new ElementLocationImpl.con1(this);
+ @override
String get name => _name;
+ @override
AstNode get node => getNodeMatching((node) => node is AstNode);
+ @override
Source get source {
if (_enclosingElement == null) {
return null;
@@ -3664,8 +3872,10 @@
return _enclosingElement.source;
}
+ @override
CompilationUnit get unit => context.resolveCompilationUnit(source, library);
+ @override
int get hashCode {
// TODO: We might want to re-visit this optimization in the future.
// We cache the hash code value as this is a very frequently called method.
@@ -3675,6 +3885,7 @@
return _cachedHashCode;
}
+ @override
bool isAccessibleIn(LibraryElement library) {
if (Identifier.isPrivateName(_name)) {
return library == this.library;
@@ -3682,6 +3893,7 @@
return true;
}
+ @override
bool get isDeprecated {
for (ElementAnnotation annotation in metadata) {
if (annotation.isDeprecated) {
@@ -3691,6 +3903,7 @@
return false;
}
+ @override
bool get isOverride {
for (ElementAnnotation annotation in metadata) {
if (annotation.isOverride) {
@@ -3700,6 +3913,7 @@
return false;
}
+ @override
bool get isPrivate {
String name = displayName;
if (name == null) {
@@ -3708,8 +3922,10 @@
return Identifier.isPrivateName(name);
}
+ @override
bool get isPublic => !isPrivate;
+ @override
bool get isSynthetic => hasModifier(Modifier.SYNTHETIC);
/**
@@ -3721,12 +3937,14 @@
setModifier(Modifier.SYNTHETIC, isSynthetic);
}
+ @override
String toString() {
JavaStringBuilder builder = new JavaStringBuilder();
appendTo(builder);
return builder.toString();
}
+ @override
void visitChildren(ElementVisitor visitor) {
}
@@ -3868,9 +4086,10 @@
* @param encoding the encoded form of a location
*/
ElementLocationImpl.con2(String encoding) {
- this._components = decode(encoding);
+ this._components = _decode(encoding);
}
+ @override
bool operator ==(Object object) {
if (identical(this, object)) {
return true;
@@ -3889,10 +4108,10 @@
return false;
}
}
- if (length > 1 && !equalSourceComponents(_components[1], otherComponents[1])) {
+ if (length > 1 && !_equalSourceComponents(_components[1], otherComponents[1])) {
return false;
}
- if (length > 0 && !equalSourceComponents(_components[0], otherComponents[0])) {
+ if (length > 0 && !_equalSourceComponents(_components[0], otherComponents[0])) {
return false;
}
return true;
@@ -3905,6 +4124,7 @@
*/
List<String> get components => _components;
+ @override
String get encoding {
JavaStringBuilder builder = new JavaStringBuilder();
int length = _components.length;
@@ -3912,18 +4132,19 @@
if (i > 0) {
builder.appendChar(_SEPARATOR_CHAR);
}
- encode(builder, _components[i]);
+ _encode(builder, _components[i]);
}
return builder.toString();
}
+ @override
int get hashCode {
int result = 1;
for (int i = 0; i < _components.length; i++) {
String component = _components[i];
int componentHash;
if (i <= 1) {
- componentHash = hashSourceComponent(component);
+ componentHash = _hashSourceComponent(component);
} else {
componentHash = component.hashCode;
}
@@ -3932,6 +4153,7 @@
return result;
}
+ @override
String toString() => encoding;
/**
@@ -3940,7 +4162,7 @@
* @param encoding the encoded form of a location
* @return the components that were encoded
*/
- List<String> decode(String encoding) {
+ List<String> _decode(String encoding) {
List<String> components = new List<String>();
JavaStringBuilder builder = new JavaStringBuilder();
int index = 0;
@@ -3973,7 +4195,7 @@
* @param builder the builder to which the encoded component is to be appended
* @param component the component to be appended to the builder
*/
- void encode(JavaStringBuilder builder, String component) {
+ void _encode(JavaStringBuilder builder, String component) {
int length = component.length;
for (int i = 0; i < length; i++) {
int currentChar = component.codeUnitAt(i);
@@ -3992,7 +4214,7 @@
* @param right the right component being compared
* @return `true` if the given components are equal when the source type's are ignored
*/
- bool equalSourceComponents(String left, String right) {
+ bool _equalSourceComponents(String left, String right) {
// TODO(brianwilkerson) This method can go away when sources no longer have a URI kind.
if (left == null) {
return right == null;
@@ -4015,7 +4237,7 @@
* @param sourceComponent the component to compute a hash code
* @return the hash code of the given encoded source component
*/
- int hashSourceComponent(String sourceComponent) {
+ int _hashSourceComponent(String sourceComponent) {
// TODO(brianwilkerson) This method can go away when sources no longer have a URI kind.
if (sourceComponent.length <= 1) {
return sourceComponent.hashCode;
@@ -4050,6 +4272,7 @@
this._second = second;
}
+ @override
bool operator ==(Object object) {
if (identical(object, this)) {
return true;
@@ -4075,6 +4298,7 @@
*/
Element get secondElt => _second;
+ @override
int get hashCode => ObjectUtilities.combineHashCodes(_first.hashCode, _second.hashCode);
}
@@ -4095,10 +4319,13 @@
*/
EmbeddedHtmlScriptElementImpl(XmlTagNode node) : super(node);
+ @override
accept(ElementVisitor visitor) => visitor.visitEmbeddedHtmlScriptElement(this);
+ @override
ElementKind get kind => ElementKind.EMBEDDED_HTML_SCRIPT;
+ @override
LibraryElement get scriptLibrary => _scriptLibrary;
/**
@@ -4111,6 +4338,7 @@
this._scriptLibrary = scriptLibrary;
}
+ @override
void visitChildren(ElementVisitor visitor) {
safelyVisitChild(_scriptLibrary, visitor);
}
@@ -4144,7 +4372,7 @@
/**
* The return type defined by this executable element.
*/
- Type2 returnType;
+ DartType returnType;
/**
* The type of function defined by this executable element.
@@ -4161,7 +4389,7 @@
*
* @param name the name of this element
*/
- ExecutableElementImpl.con1(Identifier name) : super.con1(name);
+ ExecutableElementImpl.con1(Identifier name) : super.forNode(name);
/**
* Initialize a newly created executable element to have the given name.
@@ -4170,8 +4398,9 @@
* @param nameOffset the offset of the name of this element in the file that contains the
* declaration of this element
*/
- ExecutableElementImpl.con2(String name, int nameOffset) : super.con2(name, nameOffset);
+ ExecutableElementImpl.con2(String name, int nameOffset) : super(name, nameOffset);
+ @override
ElementImpl getChild(String identifier) {
for (ExecutableElement function in _functions) {
if ((function as ExecutableElementImpl).identifier == identifier) {
@@ -4196,14 +4425,19 @@
return null;
}
+ @override
List<FunctionElement> get functions => _functions;
+ @override
List<LabelElement> get labels => _labels;
+ @override
List<LocalVariableElement> get localVariables => _localVariables;
+ @override
List<ParameterElement> get parameters => _parameters;
+ @override
bool get isOperator => false;
/**
@@ -4254,6 +4488,7 @@
this._parameters = parameters;
}
+ @override
void visitChildren(ElementVisitor visitor) {
super.visitChildren(visitor);
safelyVisitChildren(_functions, visitor);
@@ -4262,6 +4497,7 @@
safelyVisitChildren(_parameters, visitor);
}
+ @override
void appendTo(JavaStringBuilder builder) {
if (this.kind != ElementKind.GETTER) {
builder.append("(");
@@ -4306,12 +4542,7 @@
/**
* Instances of the class `ExportElementImpl` implement an [ExportElement].
*/
-class ExportElementImpl extends ElementImpl implements ExportElement {
- /**
- * The URI that is specified by this directive.
- */
- String uri;
-
+class ExportElementImpl extends UriReferencedElementImpl implements ExportElement {
/**
* The library that is exported from this library by this export directive.
*/
@@ -4326,17 +4557,21 @@
/**
* Initialize a newly created export element.
*/
- ExportElementImpl() : super.con1(null);
+ ExportElementImpl() : super(null, -1);
+ @override
accept(ElementVisitor visitor) => visitor.visitExportElement(this);
+ @override
ElementKind get kind => ElementKind.EXPORT;
+ @override
void appendTo(JavaStringBuilder builder) {
builder.append("export ");
(exportedLibrary as LibraryElementImpl).appendTo(builder);
}
+ @override
String get identifier => exportedLibrary.name;
}
@@ -4357,8 +4592,10 @@
*/
ExternalHtmlScriptElementImpl(XmlTagNode node) : super(node);
+ @override
accept(ElementVisitor visitor) => visitor.visitExternalHtmlScriptElement(this);
+ @override
ElementKind get kind => ElementKind.EXTERNAL_HTML_SCRIPT;
}
@@ -4385,12 +4622,16 @@
*/
FieldElementImpl.con2(String name) : super.con2(name);
+ @override
accept(ElementVisitor visitor) => visitor.visitFieldElement(this);
+ @override
ClassElement get enclosingElement => super.enclosingElement as ClassElement;
+ @override
ElementKind get kind => ElementKind.FIELD;
+ @override
bool get isStatic => hasModifier(Modifier.STATIC);
/**
@@ -4421,8 +4662,10 @@
*/
FieldFormalParameterElementImpl(Identifier name) : super.con1(name);
+ @override
accept(ElementVisitor visitor) => visitor.visitFieldFormalParameterElement(this);
+ @override
bool get isInitializingFormal => true;
}
@@ -4462,12 +4705,16 @@
*/
FunctionElementImpl.con2(int nameOffset) : super.con2("", nameOffset);
+ @override
accept(ElementVisitor visitor) => visitor.visitFunctionElement(this);
+ @override
ElementKind get kind => ElementKind.FUNCTION;
+ @override
FunctionDeclaration get node => getNodeMatching((node) => node is FunctionDeclaration);
+ @override
SourceRange get visibleRange {
if (_visibleRangeLength < 0) {
return null;
@@ -4475,6 +4722,7 @@
return new SourceRange(_visibleRangeOffset, _visibleRangeLength);
}
+ @override
bool get isStatic => enclosingElement is CompilationUnitElement;
/**
@@ -4490,6 +4738,7 @@
_visibleRangeLength = length;
}
+ @override
void appendTo(JavaStringBuilder builder) {
String name = displayName;
if (name != null) {
@@ -4498,6 +4747,7 @@
super.appendTo(builder);
}
+ @override
String get identifier => "${name}@${nameOffset}";
}
@@ -4514,7 +4764,7 @@
/**
* The return type defined by this type alias.
*/
- Type2 returnType;
+ DartType returnType;
/**
* The type of function defined by this type alias.
@@ -4536,10 +4786,12 @@
*
* @param name the name of this element
*/
- FunctionTypeAliasElementImpl(Identifier name) : super.con1(name);
+ FunctionTypeAliasElementImpl(Identifier name) : super.forNode(name);
+ @override
accept(ElementVisitor visitor) => visitor.visitFunctionTypeAliasElement(this);
+ @override
ElementImpl getChild(String identifier) {
for (VariableElement parameter in _parameters) {
if ((parameter as VariableElementImpl).identifier == identifier) {
@@ -4554,14 +4806,19 @@
return null;
}
+ @override
CompilationUnitElement get enclosingElement => super.enclosingElement as CompilationUnitElement;
+ @override
ElementKind get kind => ElementKind.FUNCTION_TYPE_ALIAS;
+ @override
FunctionTypeAlias get node => getNodeMatching((node) => node is FunctionTypeAlias);
+ @override
List<ParameterElement> get parameters => _parameters;
+ @override
List<TypeParameterElement> get typeParameters => _typeParameters;
/**
@@ -4612,12 +4869,14 @@
this._typeParameters = typeParameters;
}
+ @override
void visitChildren(ElementVisitor visitor) {
super.visitChildren(visitor);
safelyVisitChildren(_parameters, visitor);
safelyVisitChildren(_typeParameters, visitor);
}
+ @override
void appendTo(JavaStringBuilder builder) {
builder.append("typedef ");
builder.append(displayName);
@@ -4659,6 +4918,7 @@
*/
List<String> hiddenNames = StringUtilities.EMPTY_ARRAY;
+ @override
String toString() {
JavaStringBuilder builder = new JavaStringBuilder();
builder.append("show ");
@@ -4709,10 +4969,12 @@
* @param context the analysis context in which the HTML file is defined
* @param name the name of this element
*/
- HtmlElementImpl(this.context, String name) : super.con2(name, -1);
+ HtmlElementImpl(this.context, String name) : super(name, -1);
+ @override
accept(ElementVisitor visitor) => visitor.visitHtmlElement(this);
+ @override
bool operator ==(Object object) {
if (identical(object, this)) {
return true;
@@ -4723,10 +4985,13 @@
return runtimeType == object.runtimeType && source == (object as HtmlElementImpl).source;
}
+ @override
ElementKind get kind => ElementKind.HTML;
+ @override
List<HtmlScriptElement> get scripts => _scripts;
+ @override
int get hashCode => source.hashCode;
/**
@@ -4744,11 +5009,13 @@
this._scripts = scripts;
}
+ @override
void visitChildren(ElementVisitor visitor) {
super.visitChildren(visitor);
safelyVisitChildren(_scripts, visitor);
}
+ @override
void appendTo(JavaStringBuilder builder) {
if (source == null) {
builder.append("{HTML file}");
@@ -4772,19 +5039,13 @@
*
* @param node the XML node from which this element is derived (not `null`)
*/
- HtmlScriptElementImpl(XmlTagNode node) : super.con2(node.tag, node.tagToken.offset);
+ HtmlScriptElementImpl(XmlTagNode node) : super(node.tag, node.tagToken.offset);
}
/**
* Instances of the class `ImportElementImpl` implement an [ImportElement].
*/
-class ImportElementImpl extends ElementImpl implements ImportElement {
- /**
- * The offset of the character immediately following the last character of this node's URI, may be
- * `-1` if synthetic.
- */
- int uriEnd = -1;
-
+class ImportElementImpl extends UriReferencedElementImpl implements ImportElement {
/**
* The offset of the prefix of this import in the file that contains the this import directive, or
* `-1` if this import is synthetic.
@@ -4792,11 +5053,6 @@
int prefixOffset = 0;
/**
- * The URI that is specified by this directive.
- */
- String uri;
-
- /**
* The library that is imported into this library by this import directive.
*/
LibraryElement importedLibrary;
@@ -4818,22 +5074,27 @@
*
* @param offset the directive offset, may be `-1` if synthetic.
*/
- ImportElementImpl(int offset) : super.con2(null, offset);
+ ImportElementImpl(int offset) : super(null, offset);
+ @override
accept(ElementVisitor visitor) => visitor.visitImportElement(this);
+ @override
ElementKind get kind => ElementKind.IMPORT;
+ @override
void visitChildren(ElementVisitor visitor) {
super.visitChildren(visitor);
safelyVisitChild(prefix, visitor);
}
+ @override
void appendTo(JavaStringBuilder builder) {
builder.append("import ");
(importedLibrary as LibraryElementImpl).appendTo(builder);
}
+ @override
String get identifier => "${(importedLibrary as LibraryElementImpl).identifier}@${nameOffset}";
}
@@ -4865,15 +5126,18 @@
* statement
* @param onSwitchMember `true` if this label is associated with a `switch` member
*/
- LabelElementImpl(Identifier name, bool onSwitchStatement, bool onSwitchMember) : super.con1(name) {
+ LabelElementImpl(Identifier name, bool onSwitchStatement, bool onSwitchMember) : super.forNode(name) {
this._onSwitchStatement = onSwitchStatement;
this._onSwitchMember = onSwitchMember;
}
+ @override
accept(ElementVisitor visitor) => visitor.visitLabelElement(this);
+ @override
ExecutableElement get enclosingElement => super.enclosingElement as ExecutableElement;
+ @override
ElementKind get kind => ElementKind.LABEL;
/**
@@ -4908,7 +5172,7 @@
* @param timeStamp the time stamp to check against
* @param visitedLibraries the set of visited libraries
*/
- static bool safeIsUpToDate(LibraryElement library, int timeStamp, Set<LibraryElement> visitedLibraries) {
+ static bool _safeIsUpToDate(LibraryElement library, int timeStamp, Set<LibraryElement> visitedLibraries) {
if (!visitedLibraries.contains(library)) {
visitedLibraries.add(library);
AnalysisContext context = library.context;
@@ -4924,13 +5188,13 @@
}
// Check the imported libraries.
for (LibraryElement importedLibrary in library.importedLibraries) {
- if (!safeIsUpToDate(importedLibrary, timeStamp, visitedLibraries)) {
+ if (!_safeIsUpToDate(importedLibrary, timeStamp, visitedLibraries)) {
return false;
}
}
// Check the exported libraries.
for (LibraryElement exportedLibrary in library.exportedLibraries) {
- if (!safeIsUpToDate(exportedLibrary, timeStamp, visitedLibraries)) {
+ if (!_safeIsUpToDate(exportedLibrary, timeStamp, visitedLibraries)) {
return false;
}
}
@@ -4972,7 +5236,7 @@
/**
* Is `true` if this library is created for Angular analysis.
*/
- bool _isAngularHtml2 = false;
+ bool _isAngularHtml = false;
/**
* Initialize a newly created library element to have the given name.
@@ -4980,12 +5244,15 @@
* @param context the analysis context in which the library is defined
* @param name the name of this element
*/
- LibraryElementImpl(this.context, LibraryIdentifier name) : super.con1(name);
+ LibraryElementImpl(this.context, LibraryIdentifier name) : super.forNode(name);
+ @override
accept(ElementVisitor visitor) => visitor.visitLibraryElement(this);
+ @override
bool operator ==(Object object) => object != null && runtimeType == object.runtimeType && _definingCompilationUnit == (object as LibraryElementImpl).definingCompilationUnit;
+ @override
ElementImpl getChild(String identifier) {
if ((_definingCompilationUnit as CompilationUnitElementImpl).identifier == identifier) {
return _definingCompilationUnit as CompilationUnitElementImpl;
@@ -5008,8 +5275,10 @@
return null;
}
+ @override
CompilationUnitElement get definingCompilationUnit => _definingCompilationUnit;
+ @override
List<LibraryElement> get exportedLibraries {
Set<LibraryElement> libraries = new Set<LibraryElement>();
for (ExportElement element in _exports) {
@@ -5021,8 +5290,10 @@
return new List.from(libraries);
}
+ @override
List<ExportElement> get exports => _exports;
+ @override
List<LibraryElement> get importedLibraries {
Set<LibraryElement> libraries = new Set<LibraryElement>();
for (ImportElement element in _imports) {
@@ -5034,14 +5305,19 @@
return new List.from(libraries);
}
+ @override
List<ImportElement> get imports => _imports;
+ @override
ElementKind get kind => ElementKind.LIBRARY;
+ @override
LibraryElement get library => this;
+ @override
List<CompilationUnitElement> get parts => _parts;
+ @override
List<PrefixElement> get prefixes {
Set<PrefixElement> prefixes = new Set<PrefixElement>();
for (ImportElement element in _imports) {
@@ -5053,6 +5329,7 @@
return new List.from(prefixes);
}
+ @override
Source get source {
if (_definingCompilationUnit == null) {
return null;
@@ -5060,6 +5337,7 @@
return _definingCompilationUnit.source;
}
+ @override
ClassElement getType(String className) {
ClassElement type = _definingCompilationUnit.getType(className);
if (type != null) {
@@ -5074,6 +5352,7 @@
return null;
}
+ @override
List<CompilationUnitElement> get units {
List<CompilationUnitElement> units = new List<CompilationUnitElement>(1 + _parts.length);
units[0] = _definingCompilationUnit;
@@ -5081,34 +5360,42 @@
return units;
}
+ @override
List<LibraryElement> get visibleLibraries {
Set<LibraryElement> visibleLibraries = new Set();
- addVisibleLibraries(visibleLibraries, false);
+ _addVisibleLibraries(visibleLibraries, false);
return new List.from(visibleLibraries);
}
+ @override
bool get hasExtUri => hasModifier(Modifier.HAS_EXT_URI);
+ @override
int get hashCode => _definingCompilationUnit.hashCode;
- bool get isAngularHtml => _isAngularHtml2;
+ @override
+ bool get isAngularHtml => _isAngularHtml;
+ @override
bool get isBrowserApplication => entryPoint != null && isOrImportsBrowserLibrary;
+ @override
bool get isDartCore => name == "dart.core";
+ @override
bool get isInSdk => StringUtilities.startsWith5(name, 0, 0x64, 0x61, 0x72, 0x74, 0x2E);
+ @override
bool isUpToDate(int timeStamp) {
Set<LibraryElement> visitedLibraries = new Set();
- return safeIsUpToDate(this, timeStamp, visitedLibraries);
+ return _safeIsUpToDate(this, timeStamp, visitedLibraries);
}
/**
* Specifies if this library is created for Angular analysis.
*/
void set angularHtml(bool isAngularHtml) {
- this._isAngularHtml2 = isAngularHtml;
+ this._isAngularHtml = isAngularHtml;
}
/**
@@ -5171,6 +5458,7 @@
this._parts = parts;
}
+ @override
void visitChildren(ElementVisitor visitor) {
super.visitChildren(visitor);
safelyVisitChild(_definingCompilationUnit, visitor);
@@ -5179,12 +5467,13 @@
safelyVisitChildren(_parts, visitor);
}
+ @override
String get identifier => _definingCompilationUnit.source.encoding;
/**
* Recursively fills set of visible libraries for [getVisibleElementsLibraries].
*/
- void addVisibleLibraries(Set<LibraryElement> visibleLibraries, bool includeExports) {
+ void _addVisibleLibraries(Set<LibraryElement> visibleLibraries, bool includeExports) {
// maybe already processed
if (!visibleLibraries.add(this)) {
return;
@@ -5193,7 +5482,7 @@
for (ImportElement importElement in _imports) {
LibraryElement importedLibrary = importElement.importedLibrary;
if (importedLibrary != null) {
- (importedLibrary as LibraryElementImpl).addVisibleLibraries(visibleLibraries, true);
+ (importedLibrary as LibraryElementImpl)._addVisibleLibraries(visibleLibraries, true);
}
}
// add exported libraries
@@ -5201,7 +5490,7 @@
for (ExportElement exportElement in _exports) {
LibraryElement exportedLibrary = exportElement.exportedLibrary;
if (exportedLibrary != null) {
- (exportedLibrary as LibraryElementImpl).addVisibleLibraries(visibleLibraries, true);
+ (exportedLibrary as LibraryElementImpl)._addVisibleLibraries(visibleLibraries, true);
}
}
}
@@ -5274,18 +5563,22 @@
*/
LocalVariableElementImpl(Identifier name) : super.con1(name);
+ @override
accept(ElementVisitor visitor) => visitor.visitLocalVariableElement(this);
+ @override
ElementKind get kind => ElementKind.LOCAL_VARIABLE;
+ @override
List<ToolkitObjectElement> get toolkitObjects {
CompilationUnitElementImpl unit = getAncestor((element) => element is CompilationUnitElementImpl);
if (unit == null) {
return ToolkitObjectElement.EMPTY_ARRAY;
}
- return unit.getToolkitObjects(this);
+ return unit._getToolkitObjects(this);
}
+ @override
SourceRange get visibleRange {
if (_visibleRangeLength < 0) {
return null;
@@ -5293,8 +5586,10 @@
return new SourceRange(_visibleRangeOffset, _visibleRangeLength);
}
+ @override
bool get isPotentiallyMutatedInClosure => _potentiallyMutatedInClosure;
+ @override
bool get isPotentiallyMutatedInScope => _potentiallyMutatedInScope;
/**
@@ -5321,7 +5616,7 @@
if (unit == null) {
return;
}
- unit.setToolkitObjects(this, toolkitObjects);
+ unit._setToolkitObjects(this, toolkitObjects);
}
/**
@@ -5337,12 +5632,14 @@
_visibleRangeLength = length;
}
+ @override
void appendTo(JavaStringBuilder builder) {
builder.append(type);
builder.append(" ");
builder.append(displayName);
}
+ @override
String get identifier => "${super.identifier}@${nameOffset}";
}
@@ -5371,12 +5668,16 @@
*/
MethodElementImpl.con2(String name, int nameOffset) : super.con2(name, nameOffset);
+ @override
accept(ElementVisitor visitor) => visitor.visitMethodElement(this);
+ @override
ClassElement get enclosingElement => super.enclosingElement as ClassElement;
+ @override
ElementKind get kind => ElementKind.METHOD;
+ @override
String get name {
String name = super.name;
if (isOperator && name == "-") {
@@ -5387,10 +5688,13 @@
return super.name;
}
+ @override
MethodDeclaration get node => getNodeMatching((node) => node is MethodDeclaration);
+ @override
bool get isAbstract => hasModifier(Modifier.ABSTRACT);
+ @override
bool get isOperator {
String name = displayName;
if (name.isEmpty) {
@@ -5400,6 +5704,7 @@
return !((0x61 <= first && first <= 0x7A) || (0x41 <= first && first <= 0x5A) || first == 0x5F || first == 0x24);
}
+ @override
bool get isStatic => hasModifier(Modifier.STATIC);
/**
@@ -5420,6 +5725,7 @@
setModifier(Modifier.STATIC, isStatic);
}
+ @override
void appendTo(JavaStringBuilder builder) {
builder.append(enclosingElement.displayName);
builder.append(".");
@@ -5517,7 +5823,7 @@
* @param secondElement the second element that conflicts
*/
static Element fromElements(AnalysisContext context, Element firstElement, Element secondElement) {
- List<Element> conflictingElements = computeConflictingElements(firstElement, secondElement);
+ List<Element> conflictingElements = _computeConflictingElements(firstElement, secondElement);
int length = conflictingElements.length;
if (length == 0) {
return null;
@@ -5534,7 +5840,7 @@
* @param elements the list to which the element(s) are to be added
* @param element the element(s) to be added
*/
- static void add(Set<Element> elements, Element element) {
+ static void _add(Set<Element> elements, Element element) {
if (element is MultiplyDefinedElementImpl) {
for (Element conflictingElement in element.conflictingElements) {
elements.add(conflictingElement);
@@ -5553,10 +5859,10 @@
* @param secondElement the second element to be included
* @return an array containing all of the conflicting elements
*/
- static List<Element> computeConflictingElements(Element firstElement, Element secondElement) {
+ static List<Element> _computeConflictingElements(Element firstElement, Element secondElement) {
Set<Element> elements = new Set<Element>();
- add(elements, firstElement);
- add(elements, secondElement);
+ _add(elements, firstElement);
+ _add(elements, secondElement);
return new List.from(elements);
}
@@ -5585,36 +5891,52 @@
_name = conflictingElements[0].name;
}
+ @override
accept(ElementVisitor visitor) => visitor.visitMultiplyDefinedElement(this);
+ @override
String computeDocumentationComment() => null;
+ @override
Element getAncestor(Predicate<Element> predicate) => null;
+ @override
String get displayName => _name;
+ @override
Element get enclosingElement => null;
+ @override
ElementKind get kind => ElementKind.ERROR;
+ @override
LibraryElement get library => null;
+ @override
ElementLocation get location => null;
+ @override
List<ElementAnnotation> get metadata => ElementAnnotationImpl.EMPTY_ARRAY;
+ @override
String get name => _name;
+ @override
int get nameOffset => -1;
+ @override
AstNode get node => null;
+ @override
Source get source => null;
- Type2 get type => DynamicTypeImpl.instance;
+ @override
+ DartType get type => DynamicTypeImpl.instance;
+ @override
CompilationUnit get unit => null;
+ @override
bool isAccessibleIn(LibraryElement library) {
for (Element element in conflictingElements) {
if (element.isAccessibleIn(library)) {
@@ -5624,10 +5946,13 @@
return false;
}
+ @override
bool get isDeprecated => false;
+ @override
bool get isOverride => false;
+ @override
bool get isPrivate {
String name = displayName;
if (name == null) {
@@ -5636,10 +5961,13 @@
return Identifier.isPrivateName(name);
}
+ @override
bool get isPublic => !isPrivate;
+ @override
bool get isSynthetic => true;
+ @override
String toString() {
JavaStringBuilder builder = new JavaStringBuilder();
builder.append("[");
@@ -5654,6 +5982,7 @@
return builder.toString();
}
+ @override
void visitChildren(ElementVisitor visitor) {
}
}
@@ -5673,6 +6002,7 @@
synthetic = true;
}
+ @override
List<ExecutableElement> get inheritedElements => _elements;
void set inheritedElements(List<ExecutableElement> elements) {
@@ -5695,6 +6025,7 @@
synthetic = true;
}
+ @override
List<ExecutableElement> get inheritedElements => _elements;
void set inheritedElements(List<ExecutableElement> elements) {
@@ -5770,8 +6101,10 @@
*/
ParameterElementImpl.con2(String name, int nameOffset) : super.con2(name, nameOffset);
+ @override
accept(ElementVisitor visitor) => visitor.visitParameterElement(this);
+ @override
SourceRange get defaultValueRange {
if (_defaultValueRangeLength < 0) {
return null;
@@ -5779,10 +6112,13 @@
return new SourceRange(_defaultValueRangeOffset, _defaultValueRangeLength);
}
+ @override
ElementKind get kind => ElementKind.PARAMETER;
+ @override
List<ParameterElement> get parameters => _parameters;
+ @override
SourceRange get visibleRange {
if (_visibleRangeLength < 0) {
return null;
@@ -5790,10 +6126,13 @@
return new SourceRange(_visibleRangeOffset, _visibleRangeLength);
}
+ @override
bool get isInitializingFormal => false;
+ @override
bool get isPotentiallyMutatedInClosure => _potentiallyMutatedInClosure;
+ @override
bool get isPotentiallyMutatedInScope => _potentiallyMutatedInScope;
/**
@@ -5848,11 +6187,13 @@
_visibleRangeLength = length;
}
+ @override
void visitChildren(ElementVisitor visitor) {
super.visitChildren(visitor);
safelyVisitChildren(_parameters, visitor);
}
+ @override
void appendTo(JavaStringBuilder builder) {
String left = "";
String right = "";
@@ -5903,14 +6244,18 @@
*
* @param name the name of this element
*/
- PrefixElementImpl(Identifier name) : super.con1(name);
+ PrefixElementImpl(Identifier name) : super.forNode(name);
+ @override
accept(ElementVisitor visitor) => visitor.visitPrefixElement(this);
+ @override
LibraryElement get enclosingElement => super.enclosingElement as LibraryElement;
+ @override
List<LibraryElement> get importedLibraries => _importedLibraries;
+ @override
ElementKind get kind => ElementKind.PREFIX;
/**
@@ -5925,11 +6270,13 @@
this._importedLibraries = importedLibraries;
}
+ @override
void appendTo(JavaStringBuilder builder) {
builder.append("as ");
super.appendTo(builder);
}
+ @override
String get identifier => "_${super.identifier}";
}
@@ -5966,10 +6313,13 @@
synthetic = true;
}
+ @override
accept(ElementVisitor visitor) => visitor.visitPropertyAccessorElement(this);
+ @override
bool operator ==(Object object) => super == object && identical(isGetter, (object as PropertyAccessorElement).isGetter);
+ @override
PropertyAccessorElement get correspondingGetter {
if (isGetter || variable == null) {
return null;
@@ -5977,6 +6327,7 @@
return variable.getter;
}
+ @override
PropertyAccessorElement get correspondingSetter {
if (isSetter || variable == null) {
return null;
@@ -5984,6 +6335,7 @@
return variable.setter;
}
+ @override
ElementKind get kind {
if (isGetter) {
return ElementKind.GETTER;
@@ -5991,6 +6343,7 @@
return ElementKind.SETTER;
}
+ @override
String get name {
if (isSetter) {
return "${super.name}=";
@@ -5998,6 +6351,7 @@
return super.name;
}
+ @override
AstNode get node {
if (isSynthetic) {
return null;
@@ -6011,14 +6365,19 @@
return null;
}
+ @override
int get hashCode => ObjectUtilities.combineHashCodes(super.hashCode, isGetter ? 1 : 2);
+ @override
bool get isAbstract => hasModifier(Modifier.ABSTRACT);
+ @override
bool get isGetter => hasModifier(Modifier.GETTER);
+ @override
bool get isSetter => hasModifier(Modifier.SETTER);
+ @override
bool get isStatic => hasModifier(Modifier.STATIC);
/**
@@ -6057,6 +6416,7 @@
setModifier(Modifier.STATIC, isStatic);
}
+ @override
void appendTo(JavaStringBuilder builder) {
builder.append(isGetter ? "get " : "set ");
builder.append(variable.displayName);
@@ -6123,6 +6483,7 @@
*/
int offset = 0;
+ @override
String toString() {
JavaStringBuilder builder = new JavaStringBuilder();
builder.append("show ");
@@ -6148,7 +6509,7 @@
* @param nameOffset the offset of the name of this element in the file that contains the
* declaration of this element
*/
- ToolkitObjectElementImpl(String name, int nameOffset) : super.con2(name, nameOffset);
+ ToolkitObjectElementImpl(String name, int nameOffset) : super(name, nameOffset);
}
/**
@@ -6175,10 +6536,13 @@
*/
TopLevelVariableElementImpl.con2(String name) : super.con2(name);
+ @override
accept(ElementVisitor visitor) => visitor.visitTopLevelVariableElement(this);
+ @override
ElementKind get kind => ElementKind.TOP_LEVEL_VARIABLE;
+ @override
bool get isStatic => true;
}
@@ -6195,7 +6559,7 @@
* The type representing the bound associated with this parameter, or `null` if this
* parameter does not have an explicit bound.
*/
- Type2 bound;
+ DartType bound;
/**
* An empty array of type parameter elements.
@@ -6207,12 +6571,15 @@
*
* @param name the name of this element
*/
- TypeParameterElementImpl(Identifier name) : super.con1(name);
+ TypeParameterElementImpl(Identifier name) : super.forNode(name);
+ @override
accept(ElementVisitor visitor) => visitor.visitTypeParameterElement(this);
+ @override
ElementKind get kind => ElementKind.TYPE_PARAMETER;
+ @override
void appendTo(JavaStringBuilder builder) {
builder.append(displayName);
if (bound != null) {
@@ -6223,13 +6590,43 @@
}
/**
+ * Instances of the class `UriReferencedElementImpl` implement an [UriReferencedElement]
+ * .
+ */
+abstract class UriReferencedElementImpl extends ElementImpl implements UriReferencedElement {
+ /**
+ * The offset of the URU in the file, may be `-1` if synthetic.
+ */
+ int uriOffset = -1;
+
+ /**
+ * The offset of the character immediately following the last character of this node's URI, may be
+ * `-1` if synthetic.
+ */
+ int uriEnd = -1;
+
+ /**
+ * The URI that is specified by this directive.
+ */
+ String uri;
+
+ /**
+ * Initialize a newly created import element.
+ *
+ * @param name the name of this element
+ * @param offset the directive offset, may be `-1` if synthetic.
+ */
+ UriReferencedElementImpl(String name, int offset) : super(name, offset);
+}
+
+/**
* Instances of the class `VariableElementImpl` implement a `VariableElement`.
*/
abstract class VariableElementImpl extends ElementImpl implements VariableElement {
/**
* The declared type of this variable.
*/
- Type2 type;
+ DartType type;
/**
* A synthetic function representing this variable's initializer, or `null` if this variable
@@ -6247,7 +6644,7 @@
*
* @param name the name of this element
*/
- VariableElementImpl.con1(Identifier name) : super.con1(name);
+ VariableElementImpl.con1(Identifier name) : super.forNode(name);
/**
* Initialize a newly created variable element to have the given name.
@@ -6256,7 +6653,7 @@
* @param nameOffset the offset of the name of this element in the file that contains the
* declaration of this element
*/
- VariableElementImpl.con2(String name, int nameOffset) : super.con2(name, nameOffset);
+ VariableElementImpl.con2(String name, int nameOffset) : super(name, nameOffset);
/**
* Return the result of evaluating this variable's initializer as a compile-time constant
@@ -6267,12 +6664,16 @@
*/
EvaluationResultImpl get evaluationResult => null;
+ @override
FunctionElement get initializer => _initializer;
+ @override
VariableDeclaration get node => getNodeMatching((node) => node is VariableDeclaration);
+ @override
bool get isConst => hasModifier(Modifier.CONST);
+ @override
bool get isFinal => hasModifier(Modifier.FINAL);
/**
@@ -6333,11 +6734,13 @@
this._initializer = initializer;
}
+ @override
void visitChildren(ElementVisitor visitor) {
super.visitChildren(visitor);
safelyVisitChild(_initializer, visitor);
}
+ @override
void appendTo(JavaStringBuilder builder) {
builder.append(type);
builder.append(" ");
@@ -6422,12 +6825,16 @@
this._annotationOffset = annotationOffset;
}
+ @override
accept(ElementVisitor visitor) => visitor.visitAngularComponentElement(this);
+ @override
ElementKind get kind => ElementKind.ANGULAR_COMPONENT;
+ @override
List<AngularPropertyElement> get properties => _properties;
+ @override
List<AngularScopePropertyElement> get scopeProperties => _scopeProperties;
/**
@@ -6454,12 +6861,14 @@
this._scopeProperties = properties;
}
+ @override
void visitChildren(ElementVisitor visitor) {
safelyVisitChildren(_properties, visitor);
safelyVisitChildren(_scopeProperties, visitor);
super.visitChildren(visitor);
}
+ @override
String get identifier => "AngularComponent@${_annotationOffset}";
}
@@ -6476,8 +6885,10 @@
*/
AngularControllerElementImpl(String name, int nameOffset) : super(name, nameOffset);
+ @override
accept(ElementVisitor visitor) => visitor.visitAngularControllerElement(this);
+ @override
ElementKind get kind => ElementKind.ANGULAR_CONTROLLER;
}
@@ -6504,14 +6915,19 @@
this._offset = offset;
}
+ @override
accept(ElementVisitor visitor) => visitor.visitAngularDirectiveElement(this);
+ @override
String get displayName => selector.displayName;
+ @override
ElementKind get kind => ElementKind.ANGULAR_DIRECTIVE;
+ @override
List<AngularPropertyElement> get properties => _properties;
+ @override
bool isClass(String name) {
Element enclosing = enclosingElement;
return enclosing is ClassElement && enclosing.name == name;
@@ -6529,11 +6945,13 @@
this._properties = properties;
}
+ @override
void visitChildren(ElementVisitor visitor) {
safelyVisitChildren(_properties, visitor);
super.visitChildren(visitor);
}
+ @override
String get identifier => "NgDirective@${_offset}";
}
@@ -6555,6 +6973,7 @@
*/
AngularElementImpl(String name, int nameOffset) : super(name, nameOffset);
+ @override
AngularApplication get application => _application;
/**
@@ -6578,8 +6997,10 @@
*/
AngularFilterElementImpl(String name, int nameOffset) : super(name, nameOffset);
+ @override
accept(ElementVisitor visitor) => visitor.visitAngularFilterElement(this);
+ @override
ElementKind get kind => ElementKind.ANGULAR_FILTER;
}
@@ -6589,6 +7010,7 @@
class AngularHasClassSelectorElementImpl extends AngularSelectorElementImpl implements AngularHasClassSelectorElement {
AngularHasClassSelectorElementImpl(String name, int offset) : super(name, offset);
+ @override
bool apply(XmlTagNode node) {
XmlAttributeNode attribute = node.getAttribute("class");
if (attribute != null) {
@@ -6605,6 +7027,7 @@
return false;
}
+ @override
void appendTo(JavaStringBuilder builder) {
builder.append(".");
builder.append(name);
@@ -6629,6 +7052,7 @@
*/
AngularHasSelectorElementImpl(String name, int nameOffset) : super(name, nameOffset);
+ @override
AngularSelectorElement get selector => _selector;
/**
@@ -6641,6 +7065,7 @@
this._selector = selector;
}
+ @override
void visitChildren(ElementVisitor visitor) {
safelyVisitChild(_selector, visitor);
super.visitChildren(visitor);
@@ -6672,8 +7097,10 @@
*/
AngularPropertyElementImpl(String name, int nameOffset) : super(name, nameOffset);
+ @override
accept(ElementVisitor visitor) => visitor.visitAngularPropertyElement(this);
+ @override
ElementKind get kind => ElementKind.ANGULAR_PROPERTY;
}
@@ -6684,7 +7111,7 @@
/**
* The type of the property
*/
- final Type2 type;
+ final DartType type;
/**
* Initialize a newly created Angular scope property to have the given name.
@@ -6695,8 +7122,10 @@
*/
AngularScopePropertyElementImpl(String name, int nameOffset, this.type) : super(name, nameOffset);
+ @override
accept(ElementVisitor visitor) => visitor.visitAngularScopePropertyElement(this);
+ @override
ElementKind get kind => ElementKind.ANGULAR_SCOPE_PROPERTY;
}
@@ -6713,8 +7142,10 @@
*/
AngularSelectorElementImpl(String name, int nameOffset) : super(name, nameOffset);
+ @override
accept(ElementVisitor visitor) => visitor.visitAngularSelectorElement(this);
+ @override
ElementKind get kind => ElementKind.ANGULAR_SELECTOR;
}
@@ -6724,11 +7155,13 @@
class AngularTagSelectorElementImpl extends AngularSelectorElementImpl implements AngularTagSelectorElement {
AngularTagSelectorElementImpl(String name, int offset) : super(name, offset);
+ @override
bool apply(XmlTagNode node) {
String tagName = name;
return node.tag == tagName;
}
+ @override
AngularApplication get application => (enclosingElement as AngularElementImpl).application;
}
@@ -6756,10 +7189,13 @@
*/
AngularViewElementImpl(this.templateUri, this.templateUriOffset) : super(null, -1);
+ @override
accept(ElementVisitor visitor) => visitor.visitAngularViewElement(this);
+ @override
ElementKind get kind => ElementKind.ANGULAR_VIEW;
+ @override
String get identifier => "AngularView@${templateUriOffset}";
}
@@ -6769,11 +7205,13 @@
class HasAttributeSelectorElementImpl extends AngularSelectorElementImpl implements AngularHasAttributeSelectorElement {
HasAttributeSelectorElementImpl(String attributeName, int offset) : super(attributeName, offset);
+ @override
bool apply(XmlTagNode node) {
String attributeName = name;
return node.getAttribute(attributeName) != null;
}
+ @override
void appendTo(JavaStringBuilder builder) {
builder.append("[");
builder.append(name);
@@ -6791,6 +7229,7 @@
IsTagHasAttributeSelectorElementImpl(this.tagName, this.attributeName) : super(null, -1);
+ @override
bool apply(XmlTagNode node) => node.tag == tagName && node.getAttribute(attributeName) != null;
}
@@ -6819,8 +7258,8 @@
// TODO(brianwilkerson) We need to understand when this can happen.
return baseConstructor;
}
- List<Type2> argumentTypes = definingType.typeArguments;
- List<Type2> parameterTypes = definingType.element.type.typeArguments;
+ List<DartType> argumentTypes = definingType.typeArguments;
+ List<DartType> parameterTypes = definingType.element.type.typeArguments;
FunctionType substitutedType = baseType.substitute2(argumentTypes, parameterTypes);
if (baseType == substitutedType) {
return baseConstructor;
@@ -6838,22 +7277,31 @@
*/
ConstructorMember(ConstructorElement baseElement, InterfaceType definingType) : super(baseElement, definingType);
+ @override
accept(ElementVisitor visitor) => visitor.visitConstructorElement(this);
+ @override
ConstructorElement get baseElement => super.baseElement as ConstructorElement;
+ @override
ClassElement get enclosingElement => baseElement.enclosingElement;
+ @override
ConstructorDeclaration get node => baseElement.node;
+ @override
ConstructorElement get redirectedConstructor => from(baseElement.redirectedConstructor, definingType);
+ @override
bool get isConst => baseElement.isConst;
+ @override
bool get isDefaultConstructor => baseElement.isDefaultConstructor;
+ @override
bool get isFactory => baseElement.isFactory;
+ @override
String toString() {
ConstructorElement baseElement = this.baseElement;
List<ParameterElement> parameters = this.parameters;
@@ -6881,6 +7329,7 @@
return builder.toString();
}
+ @override
InterfaceType get definingType => super.definingType as InterfaceType;
}
@@ -6899,8 +7348,10 @@
*/
ExecutableMember(ExecutableElement baseElement, InterfaceType definingType) : super(baseElement, definingType);
+ @override
ExecutableElement get baseElement => super.baseElement as ExecutableElement;
+ @override
List<FunctionElement> get functions {
//
// Elements within this element should have type parameters substituted, just like this element.
@@ -6908,8 +7359,10 @@
throw new UnsupportedOperationException();
}
+ @override
List<LabelElement> get labels => baseElement.labels;
+ @override
List<LocalVariableElement> get localVariables {
//
// Elements within this element should have type parameters substituted, just like this element.
@@ -6917,6 +7370,7 @@
throw new UnsupportedOperationException();
}
+ @override
List<ParameterElement> get parameters {
List<ParameterElement> baseParameters = baseElement.parameters;
int parameterCount = baseParameters.length;
@@ -6930,14 +7384,19 @@
return parameterizedParameters;
}
- Type2 get returnType => substituteFor(baseElement.returnType);
+ @override
+ DartType get returnType => substituteFor(baseElement.returnType);
+ @override
FunctionType get type => substituteFor(baseElement.type);
+ @override
bool get isOperator => baseElement.isOperator;
+ @override
bool get isStatic => baseElement.isStatic;
+ @override
void visitChildren(ElementVisitor visitor) {
// TODO(brianwilkerson) We need to finish implementing the accessors used below so that we can
// safely invoke them.
@@ -6962,8 +7421,10 @@
*/
FieldFormalParameterMember(FieldFormalParameterElement baseElement, ParameterizedType definingType) : super(baseElement, definingType);
+ @override
accept(ElementVisitor visitor) => visitor.visitFieldFormalParameterElement(this);
+ @override
FieldElement get field => (baseElement as FieldFormalParameterElement).field;
}
@@ -6987,13 +7448,13 @@
if (baseField == null || definingType.typeArguments.length == 0) {
return baseField;
}
- Type2 baseType = baseField.type;
+ DartType baseType = baseField.type;
if (baseType == null) {
return baseField;
}
- List<Type2> argumentTypes = definingType.typeArguments;
- List<Type2> parameterTypes = definingType.element.type.typeArguments;
- Type2 substitutedType = baseType.substitute2(argumentTypes, parameterTypes);
+ List<DartType> argumentTypes = definingType.typeArguments;
+ List<DartType> parameterTypes = definingType.element.type.typeArguments;
+ DartType substitutedType = baseType.substitute2(argumentTypes, parameterTypes);
if (baseType == substitutedType) {
return baseField;
}
@@ -7010,18 +7471,25 @@
*/
FieldMember(FieldElement baseElement, InterfaceType definingType) : super(baseElement, definingType);
+ @override
accept(ElementVisitor visitor) => visitor.visitFieldElement(this);
+ @override
FieldElement get baseElement => super.baseElement as FieldElement;
+ @override
ClassElement get enclosingElement => baseElement.enclosingElement;
+ @override
PropertyAccessorElement get getter => PropertyAccessorMember.from(baseElement.getter, definingType);
+ @override
PropertyAccessorElement get setter => PropertyAccessorMember.from(baseElement.setter, definingType);
+ @override
bool get isStatic => baseElement.isStatic;
+ @override
InterfaceType get definingType => super.definingType as InterfaceType;
}
@@ -7051,8 +7519,10 @@
this._definingType = definingType;
}
+ @override
String computeDocumentationComment() => _baseElement.computeDocumentationComment();
+ @override
Element getAncestor(Predicate<Element> predicate) => baseElement.getAncestor(predicate);
/**
@@ -7062,40 +7532,58 @@
*/
Element get baseElement => _baseElement;
+ @override
AnalysisContext get context => _baseElement.context;
+ @override
String get displayName => _baseElement.displayName;
+ @override
ElementKind get kind => _baseElement.kind;
+ @override
LibraryElement get library => _baseElement.library;
+ @override
ElementLocation get location => _baseElement.location;
+ @override
List<ElementAnnotation> get metadata => _baseElement.metadata;
+ @override
String get name => _baseElement.name;
+ @override
int get nameOffset => _baseElement.nameOffset;
+ @override
AstNode get node => _baseElement.node;
+ @override
Source get source => _baseElement.source;
+ @override
CompilationUnit get unit => _baseElement.unit;
+ @override
bool isAccessibleIn(LibraryElement library) => _baseElement.isAccessibleIn(library);
+ @override
bool get isDeprecated => _baseElement.isDeprecated;
+ @override
bool get isOverride => _baseElement.isOverride;
+ @override
bool get isPrivate => _baseElement.isPrivate;
+ @override
bool get isPublic => _baseElement.isPublic;
+ @override
bool get isSynthetic => _baseElement.isSynthetic;
+ @override
void visitChildren(ElementVisitor visitor) {
}
@@ -7139,9 +7627,9 @@
* @param type the type to be transformed
* @return the result of transforming the type
*/
- Type2 substituteFor(Type2 type) {
- List<Type2> argumentTypes = _definingType.typeArguments;
- List<Type2> parameterTypes = TypeParameterTypeImpl.getTypes(_definingType.typeParameters);
+ DartType substituteFor(DartType type) {
+ List<DartType> argumentTypes = _definingType.typeArguments;
+ List<DartType> parameterTypes = TypeParameterTypeImpl.getTypes(_definingType.typeParameters);
return type.substitute2(argumentTypes, parameterTypes);
}
@@ -7183,8 +7671,8 @@
return baseMethod;
}
FunctionType baseType = baseMethod.type;
- List<Type2> argumentTypes = definingType.typeArguments;
- List<Type2> parameterTypes = definingType.element.type.typeArguments;
+ List<DartType> argumentTypes = definingType.typeArguments;
+ List<DartType> parameterTypes = definingType.element.type.typeArguments;
FunctionType substitutedType = baseType.substitute2(argumentTypes, parameterTypes);
if (baseType == substitutedType) {
return baseMethod;
@@ -7202,16 +7690,22 @@
*/
MethodMember(MethodElement baseElement, InterfaceType definingType) : super(baseElement, definingType);
+ @override
accept(ElementVisitor visitor) => visitor.visitMethodElement(this);
+ @override
MethodElement get baseElement => super.baseElement as MethodElement;
+ @override
ClassElement get enclosingElement => baseElement.enclosingElement;
+ @override
MethodDeclaration get node => baseElement.node;
+ @override
bool get isAbstract => baseElement.isAbstract;
+ @override
String toString() {
MethodElement baseElement = this.baseElement;
List<ParameterElement> parameters = this.parameters;
@@ -7261,10 +7755,10 @@
// It is possible that we did not resolve field formal parameter yet, so skip this check for it.
bool isFieldFormal = baseParameter is FieldFormalParameterElement;
if (!isFieldFormal) {
- Type2 baseType = baseParameter.type;
- List<Type2> argumentTypes = definingType.typeArguments;
- List<Type2> parameterTypes = TypeParameterTypeImpl.getTypes(definingType.typeParameters);
- Type2 substitutedType = baseType.substitute2(argumentTypes, parameterTypes);
+ DartType baseType = baseParameter.type;
+ List<DartType> argumentTypes = definingType.typeArguments;
+ List<DartType> parameterTypes = TypeParameterTypeImpl.getTypes(definingType.typeParameters);
+ DartType substitutedType = baseType.substitute2(argumentTypes, parameterTypes);
if (baseType == substitutedType) {
return baseParameter;
}
@@ -7285,8 +7779,10 @@
*/
ParameterMember(ParameterElement baseElement, ParameterizedType definingType) : super(baseElement, definingType);
+ @override
accept(ElementVisitor visitor) => visitor.visitParameterElement(this);
+ @override
Element getAncestor(Predicate<Element> predicate) {
Element element = baseElement.getAncestor(predicate);
ParameterizedType definingType = this.definingType;
@@ -7303,14 +7799,19 @@
return element;
}
+ @override
ParameterElement get baseElement => super.baseElement as ParameterElement;
+ @override
SourceRange get defaultValueRange => baseElement.defaultValueRange;
+ @override
Element get enclosingElement => baseElement.enclosingElement;
+ @override
ParameterKind get parameterKind => baseElement.parameterKind;
+ @override
List<ParameterElement> get parameters {
List<ParameterElement> baseParameters = baseElement.parameters;
int parameterCount = baseParameters.length;
@@ -7324,10 +7825,13 @@
return parameterizedParameters;
}
+ @override
SourceRange get visibleRange => baseElement.visibleRange;
+ @override
bool get isInitializingFormal => baseElement.isInitializingFormal;
+ @override
String toString() {
ParameterElement baseElement = this.baseElement;
String left = "";
@@ -7352,6 +7856,7 @@
return builder.toString();
}
+ @override
void visitChildren(ElementVisitor visitor) {
super.visitChildren(visitor);
safelyVisitChildren(parameters, visitor);
@@ -7379,8 +7884,8 @@
return baseAccessor;
}
FunctionType baseType = baseAccessor.type;
- List<Type2> argumentTypes = definingType.typeArguments;
- List<Type2> parameterTypes = definingType.element.type.typeArguments;
+ List<DartType> argumentTypes = definingType.typeArguments;
+ List<DartType> parameterTypes = definingType.element.type.typeArguments;
FunctionType substitutedType = baseType.substitute2(argumentTypes, parameterTypes);
if (baseType == substitutedType) {
return baseAccessor;
@@ -7399,16 +7904,22 @@
*/
PropertyAccessorMember(PropertyAccessorElement baseElement, InterfaceType definingType) : super(baseElement, definingType);
+ @override
accept(ElementVisitor visitor) => visitor.visitPropertyAccessorElement(this);
+ @override
PropertyAccessorElement get baseElement => super.baseElement as PropertyAccessorElement;
+ @override
PropertyAccessorElement get correspondingGetter => from(baseElement.correspondingGetter, definingType);
+ @override
PropertyAccessorElement get correspondingSetter => from(baseElement.correspondingSetter, definingType);
+ @override
Element get enclosingElement => baseElement.enclosingElement;
+ @override
PropertyInducingElement get variable {
PropertyInducingElement variable = baseElement.variable;
if (variable is FieldElement) {
@@ -7417,12 +7928,16 @@
return variable;
}
+ @override
bool get isAbstract => baseElement.isAbstract;
+ @override
bool get isGetter => baseElement.isGetter;
+ @override
bool get isSetter => baseElement.isSetter;
+ @override
String toString() {
PropertyAccessorElement baseElement = this.baseElement;
List<ParameterElement> parameters = this.parameters;
@@ -7452,6 +7967,7 @@
return builder.toString();
}
+ @override
InterfaceType get definingType => super.definingType as InterfaceType;
}
@@ -7470,8 +7986,10 @@
*/
VariableMember(VariableElement baseElement, ParameterizedType definingType) : super(baseElement, definingType);
+ @override
VariableElement get baseElement => super.baseElement as VariableElement;
+ @override
FunctionElement get initializer {
//
// Elements within this element should have type parameters substituted, just like this element.
@@ -7479,14 +7997,19 @@
throw new UnsupportedOperationException();
}
+ @override
VariableDeclaration get node => baseElement.node;
- Type2 get type => substituteFor(baseElement.type);
+ @override
+ DartType get type => substituteFor(baseElement.type);
+ @override
bool get isConst => baseElement.isConst;
+ @override
bool get isFinal => baseElement.isFinal;
+ @override
void visitChildren(ElementVisitor visitor) {
// TODO(brianwilkerson) We need to finish implementing the accessors used below so that we can
// safely invoke them.
@@ -7516,21 +8039,29 @@
*/
BottomTypeImpl() : super(null, "<bottom>");
+ @override
bool operator ==(Object object) => identical(object, this);
+ @override
int get hashCode => 0;
+ @override
bool get isBottom => true;
- bool isSupertypeOf(Type2 type) => false;
+ @override
+ bool isSupertypeOf(DartType type) => false;
- BottomTypeImpl substitute2(List<Type2> argumentTypes, List<Type2> parameterTypes) => this;
+ @override
+ BottomTypeImpl substitute2(List<DartType> argumentTypes, List<DartType> parameterTypes) => this;
+ @override
bool internalEquals(Object object, Set<ElementPair> visitedElementPairs) => identical(object, this);
- bool internalIsMoreSpecificThan(Type2 type, bool withDynamic, Set<TypeImpl_TypePair> visitedTypePairs) => true;
+ @override
+ bool internalIsMoreSpecificThan(DartType type, bool withDynamic, Set<TypeImpl_TypePair> visitedTypePairs) => true;
- bool internalIsSubtypeOf(Type2 type, Set<TypeImpl_TypePair> visitedTypePairs) => true;
+ @override
+ bool internalIsSubtypeOf(DartType type, Set<TypeImpl_TypePair> visitedTypePairs) => true;
}
/**
@@ -7556,15 +8087,20 @@
(element as DynamicElementImpl).type = this;
}
+ @override
bool operator ==(Object object) => identical(object, this);
+ @override
int get hashCode => 1;
+ @override
bool get isDynamic => true;
- bool isSupertypeOf(Type2 type) => true;
+ @override
+ bool isSupertypeOf(DartType type) => true;
- Type2 substitute2(List<Type2> argumentTypes, List<Type2> parameterTypes) {
+ @override
+ DartType substitute2(List<DartType> argumentTypes, List<DartType> parameterTypes) {
int length = parameterTypes.length;
for (int i = 0; i < length; i++) {
if (parameterTypes[i] == this) {
@@ -7574,9 +8110,11 @@
return this;
}
+ @override
bool internalEquals(Object object, Set<ElementPair> visitedElementPairs) => identical(object, this);
- bool internalIsMoreSpecificThan(Type2 type, bool withDynamic, Set<TypeImpl_TypePair> visitedTypePairs) {
+ @override
+ bool internalIsMoreSpecificThan(DartType type, bool withDynamic, Set<TypeImpl_TypePair> visitedTypePairs) {
// T is S
if (identical(this, type)) {
return true;
@@ -7585,7 +8123,8 @@
return withDynamic;
}
- bool internalIsSubtypeOf(Type2 type, Set<TypeImpl_TypePair> visitedTypePairs) => true;
+ @override
+ bool internalIsSubtypeOf(DartType type, Set<TypeImpl_TypePair> visitedTypePairs) => true;
}
/**
@@ -7604,15 +8143,15 @@
* @return `true` if all of the name/type pairs in the first map are equal to the
* corresponding name/type pairs in the second map
*/
- static bool equals2(Map<String, Type2> firstTypes, Map<String, Type2> secondTypes, Set<ElementPair> visitedElementPairs) {
+ static bool _equals(Map<String, DartType> firstTypes, Map<String, DartType> secondTypes, Set<ElementPair> visitedElementPairs) {
if (secondTypes.length != firstTypes.length) {
return false;
}
- JavaIterator<MapEntry<String, Type2>> firstIterator = new JavaIterator(getMapEntrySet(firstTypes));
- JavaIterator<MapEntry<String, Type2>> secondIterator = new JavaIterator(getMapEntrySet(secondTypes));
+ JavaIterator<MapEntry<String, DartType>> firstIterator = new JavaIterator(getMapEntrySet(firstTypes));
+ JavaIterator<MapEntry<String, DartType>> secondIterator = new JavaIterator(getMapEntrySet(secondTypes));
while (firstIterator.hasNext) {
- MapEntry<String, Type2> firstEntry = firstIterator.next();
- MapEntry<String, Type2> secondEntry = secondIterator.next();
+ MapEntry<String, DartType> firstEntry = firstIterator.next();
+ MapEntry<String, DartType> secondEntry = secondIterator.next();
if (firstEntry.getKey() != secondEntry.getKey() || !(firstEntry.getValue() as TypeImpl).internalEquals(secondEntry.getValue(), visitedElementPairs)) {
return false;
}
@@ -7623,7 +8162,7 @@
/**
* An array containing the actual types of the type arguments.
*/
- List<Type2> typeArguments = TypeImpl.EMPTY_ARRAY;
+ List<DartType> typeArguments = TypeImpl.EMPTY_ARRAY;
/**
* Initialize a newly created function type to be declared by the given element and to have the
@@ -7641,21 +8180,23 @@
*/
FunctionTypeImpl.con2(FunctionTypeAliasElement element) : super(element, element == null ? null : element.name);
+ @override
bool operator ==(Object object) => internalEquals(object, new Set<ElementPair>());
+ @override
String get displayName {
String name = this.name;
if (name == null || name.length == 0) {
// TODO(brianwilkerson) Determine whether function types should ever have an empty name.
- List<Type2> normalParameterTypes = this.normalParameterTypes;
- List<Type2> optionalParameterTypes = this.optionalParameterTypes;
- Map<String, Type2> namedParameterTypes = this.namedParameterTypes;
- Type2 returnType = this.returnType;
+ List<DartType> normalParameterTypes = this.normalParameterTypes;
+ List<DartType> optionalParameterTypes = this.optionalParameterTypes;
+ Map<String, DartType> namedParameterTypes = this.namedParameterTypes;
+ DartType returnType = this.returnType;
JavaStringBuilder builder = new JavaStringBuilder();
builder.append("(");
bool needsComma = false;
if (normalParameterTypes.length > 0) {
- for (Type2 type in normalParameterTypes) {
+ for (DartType type in normalParameterTypes) {
if (needsComma) {
builder.append(", ");
} else {
@@ -7670,7 +8211,7 @@
needsComma = false;
}
builder.append("[");
- for (Type2 type in optionalParameterTypes) {
+ for (DartType type in optionalParameterTypes) {
if (needsComma) {
builder.append(", ");
} else {
@@ -7687,7 +8228,7 @@
needsComma = false;
}
builder.append("{");
- for (MapEntry<String, Type2> entry in getMapEntrySet(namedParameterTypes)) {
+ for (MapEntry<String, DartType> entry in getMapEntrySet(namedParameterTypes)) {
if (needsComma) {
builder.append(", ");
} else {
@@ -7712,13 +8253,14 @@
return name;
}
- Map<String, Type2> get namedParameterTypes {
- LinkedHashMap<String, Type2> namedParameterTypes = new LinkedHashMap<String, Type2>();
+ @override
+ Map<String, DartType> get namedParameterTypes {
+ LinkedHashMap<String, DartType> namedParameterTypes = new LinkedHashMap<String, DartType>();
List<ParameterElement> parameters = baseParameters;
if (parameters.length == 0) {
return namedParameterTypes;
}
- List<Type2> typeParameters = TypeParameterTypeImpl.getTypes(this.typeParameters);
+ List<DartType> typeParameters = TypeParameterTypeImpl.getTypes(this.typeParameters);
for (ParameterElement parameter in parameters) {
if (identical(parameter.parameterKind, ParameterKind.NAMED)) {
namedParameterTypes[parameter.name] = parameter.type.substitute2(typeArguments, typeParameters);
@@ -7727,13 +8269,14 @@
return namedParameterTypes;
}
- List<Type2> get normalParameterTypes {
+ @override
+ List<DartType> get normalParameterTypes {
List<ParameterElement> parameters = baseParameters;
if (parameters.length == 0) {
return TypeImpl.EMPTY_ARRAY;
}
- List<Type2> typeParameters = TypeParameterTypeImpl.getTypes(this.typeParameters);
- List<Type2> types = new List<Type2>();
+ List<DartType> typeParameters = TypeParameterTypeImpl.getTypes(this.typeParameters);
+ List<DartType> types = new List<DartType>();
for (ParameterElement parameter in parameters) {
if (identical(parameter.parameterKind, ParameterKind.REQUIRED)) {
types.add(parameter.type.substitute2(typeArguments, typeParameters));
@@ -7742,13 +8285,14 @@
return new List.from(types);
}
- List<Type2> get optionalParameterTypes {
+ @override
+ List<DartType> get optionalParameterTypes {
List<ParameterElement> parameters = baseParameters;
if (parameters.length == 0) {
return TypeImpl.EMPTY_ARRAY;
}
- List<Type2> typeParameters = TypeParameterTypeImpl.getTypes(this.typeParameters);
- List<Type2> types = new List<Type2>();
+ List<DartType> typeParameters = TypeParameterTypeImpl.getTypes(this.typeParameters);
+ List<DartType> types = new List<DartType>();
for (ParameterElement parameter in parameters) {
if (identical(parameter.parameterKind, ParameterKind.POSITIONAL)) {
types.add(parameter.type.substitute2(typeArguments, typeParameters));
@@ -7757,6 +8301,7 @@
return new List.from(types);
}
+ @override
List<ParameterElement> get parameters {
List<ParameterElement> baseParameters = this.baseParameters;
// no parameters, quick return
@@ -7772,8 +8317,9 @@
return specializedParameters;
}
- Type2 get returnType {
- Type2 baseReturnType = this.baseReturnType;
+ @override
+ DartType get returnType {
+ DartType baseReturnType = this.baseReturnType;
if (baseReturnType == null) {
// TODO(brianwilkerson) This is a patch. The return type should never be null and we need to
// understand why it is and fix it.
@@ -7782,6 +8328,7 @@
return baseReturnType.substitute2(typeArguments, TypeParameterTypeImpl.getTypes(typeParameters));
}
+ @override
List<TypeParameterElement> get typeParameters {
Element element = this.element;
if (element is FunctionTypeAliasElement) {
@@ -7794,14 +8341,15 @@
return TypeParameterElementImpl.EMPTY_ARRAY;
}
+ @override
int get hashCode {
if (element == null) {
return 0;
}
// Reference the arrays of parameters
- List<Type2> normalParameterTypes = this.normalParameterTypes;
- List<Type2> optionalParameterTypes = this.optionalParameterTypes;
- Iterable<Type2> namedParameterTypes = this.namedParameterTypes.values;
+ List<DartType> normalParameterTypes = this.normalParameterTypes;
+ List<DartType> optionalParameterTypes = this.optionalParameterTypes;
+ Iterable<DartType> namedParameterTypes = this.namedParameterTypes.values;
// Generate the hashCode
int hashCode = returnType.hashCode;
for (int i = 0; i < normalParameterTypes.length; i++) {
@@ -7810,13 +8358,14 @@
for (int i = 0; i < optionalParameterTypes.length; i++) {
hashCode = (hashCode << 1) + optionalParameterTypes[i].hashCode;
}
- for (Type2 type in namedParameterTypes) {
+ for (DartType type in namedParameterTypes) {
hashCode = (hashCode << 1) + type.hashCode;
}
return hashCode;
}
- bool internalIsMoreSpecificThan(Type2 type, bool withDynamic, Set<TypeImpl_TypePair> visitedTypePairs) {
+ @override
+ bool internalIsMoreSpecificThan(DartType type, bool withDynamic, Set<TypeImpl_TypePair> visitedTypePairs) {
// trivial base cases
if (type == null) {
return false;
@@ -7829,10 +8378,10 @@
}
FunctionType t = this;
FunctionType s = type as FunctionType;
- List<Type2> tTypes = t.normalParameterTypes;
- List<Type2> tOpTypes = t.optionalParameterTypes;
- List<Type2> sTypes = s.normalParameterTypes;
- List<Type2> sOpTypes = s.optionalParameterTypes;
+ List<DartType> tTypes = t.normalParameterTypes;
+ List<DartType> tOpTypes = t.optionalParameterTypes;
+ List<DartType> sTypes = s.normalParameterTypes;
+ List<DartType> sOpTypes = s.optionalParameterTypes;
// If one function has positional and the other has named parameters, return false.
if ((sOpTypes.length > 0 && t.namedParameterTypes.length > 0) || (tOpTypes.length > 0 && s.namedParameterTypes.length > 0)) {
return false;
@@ -7845,27 +8394,27 @@
return false;
} else if (t.normalParameterTypes.length > 0) {
for (int i = 0; i < tTypes.length; i++) {
- if (!(tTypes[i] as TypeImpl).isMoreSpecificThan3(sTypes[i], withDynamic, visitedTypePairs)) {
+ if (!(tTypes[i] as TypeImpl).isMoreSpecificThan2(sTypes[i], withDynamic, visitedTypePairs)) {
return false;
}
}
}
- Map<String, Type2> namedTypesT = t.namedParameterTypes;
- Map<String, Type2> namedTypesS = s.namedParameterTypes;
+ Map<String, DartType> namedTypesT = t.namedParameterTypes;
+ Map<String, DartType> namedTypesS = s.namedParameterTypes;
// if k >= m is false, return false: the passed function type has more named parameter types than this
if (namedTypesT.length < namedTypesS.length) {
return false;
}
// Loop through each element in S verifying that T has a matching parameter name and that the
// corresponding type is more specific then the type in S.
- JavaIterator<MapEntry<String, Type2>> iteratorS = new JavaIterator(getMapEntrySet(namedTypesS));
+ JavaIterator<MapEntry<String, DartType>> iteratorS = new JavaIterator(getMapEntrySet(namedTypesS));
while (iteratorS.hasNext) {
- MapEntry<String, Type2> entryS = iteratorS.next();
- Type2 typeT = namedTypesT[entryS.getKey()];
+ MapEntry<String, DartType> entryS = iteratorS.next();
+ DartType typeT = namedTypesT[entryS.getKey()];
if (typeT == null) {
return false;
}
- if (!(typeT as TypeImpl).isMoreSpecificThan3(entryS.getValue(), withDynamic, visitedTypePairs)) {
+ if (!(typeT as TypeImpl).isMoreSpecificThan2(entryS.getValue(), withDynamic, visitedTypePairs)) {
return false;
}
}
@@ -7884,21 +8433,21 @@
if (tOpTypes.length == 0 && sOpTypes.length == 0) {
// No positional arguments, don't copy contents to new array
for (int i = 0; i < sTypes.length; i++) {
- if (!(tTypes[i] as TypeImpl).isMoreSpecificThan3(sTypes[i], withDynamic, visitedTypePairs)) {
+ if (!(tTypes[i] as TypeImpl).isMoreSpecificThan2(sTypes[i], withDynamic, visitedTypePairs)) {
return false;
}
}
} else {
// Else, we do have positional parameters, copy required and positional parameter types into
// arrays to do the compare (for loop below).
- List<Type2> tAllTypes = new List<Type2>(sArgLength);
+ List<DartType> tAllTypes = new List<DartType>(sArgLength);
for (int i = 0; i < tTypes.length; i++) {
tAllTypes[i] = tTypes[i];
}
for (int i = tTypes.length, j = 0; i < sArgLength; i++, j++) {
tAllTypes[i] = tOpTypes[j];
}
- List<Type2> sAllTypes = new List<Type2>(sArgLength);
+ List<DartType> sAllTypes = new List<DartType>(sArgLength);
for (int i = 0; i < sTypes.length; i++) {
sAllTypes[i] = sTypes[i];
}
@@ -7906,22 +8455,25 @@
sAllTypes[i] = sOpTypes[j];
}
for (int i = 0; i < sAllTypes.length; i++) {
- if (!(tAllTypes[i] as TypeImpl).isMoreSpecificThan3(sAllTypes[i], withDynamic, visitedTypePairs)) {
+ if (!(tAllTypes[i] as TypeImpl).isMoreSpecificThan2(sAllTypes[i], withDynamic, visitedTypePairs)) {
return false;
}
}
}
}
- Type2 tRetType = t.returnType;
- Type2 sRetType = s.returnType;
- return sRetType.isVoid || (tRetType as TypeImpl).isMoreSpecificThan3(sRetType, withDynamic, visitedTypePairs);
+ DartType tRetType = t.returnType;
+ DartType sRetType = s.returnType;
+ return sRetType.isVoid || (tRetType as TypeImpl).isMoreSpecificThan2(sRetType, withDynamic, visitedTypePairs);
}
- bool isAssignableTo(Type2 type) => isSubtypeOf3(type, new Set<TypeImpl_TypePair>());
+ @override
+ bool isAssignableTo(DartType type) => isSubtypeOf2(type, new Set<TypeImpl_TypePair>());
- FunctionTypeImpl substitute3(List<Type2> argumentTypes) => substitute2(argumentTypes, typeArguments);
+ @override
+ FunctionTypeImpl substitute3(List<DartType> argumentTypes) => substitute2(argumentTypes, typeArguments);
- FunctionTypeImpl substitute2(List<Type2> argumentTypes, List<Type2> parameterTypes) {
+ @override
+ FunctionTypeImpl substitute2(List<DartType> argumentTypes, List<DartType> parameterTypes) {
if (argumentTypes.length != parameterTypes.length) {
throw new IllegalArgumentException("argumentTypes.length (${argumentTypes.length}) != parameterTypes.length (${parameterTypes.length})");
}
@@ -7934,15 +8486,16 @@
return newType;
}
+ @override
void appendTo(JavaStringBuilder builder) {
- List<Type2> normalParameterTypes = this.normalParameterTypes;
- List<Type2> optionalParameterTypes = this.optionalParameterTypes;
- Map<String, Type2> namedParameterTypes = this.namedParameterTypes;
- Type2 returnType = this.returnType;
+ List<DartType> normalParameterTypes = this.normalParameterTypes;
+ List<DartType> optionalParameterTypes = this.optionalParameterTypes;
+ Map<String, DartType> namedParameterTypes = this.namedParameterTypes;
+ DartType returnType = this.returnType;
builder.append("(");
bool needsComma = false;
if (normalParameterTypes.length > 0) {
- for (Type2 type in normalParameterTypes) {
+ for (DartType type in normalParameterTypes) {
if (needsComma) {
builder.append(", ");
} else {
@@ -7957,7 +8510,7 @@
needsComma = false;
}
builder.append("[");
- for (Type2 type in optionalParameterTypes) {
+ for (DartType type in optionalParameterTypes) {
if (needsComma) {
builder.append(", ");
} else {
@@ -7974,7 +8527,7 @@
needsComma = false;
}
builder.append("{");
- for (MapEntry<String, Type2> entry in getMapEntrySet(namedParameterTypes)) {
+ for (MapEntry<String, DartType> entry in getMapEntrySet(namedParameterTypes)) {
if (needsComma) {
builder.append(", ");
} else {
@@ -8008,6 +8561,7 @@
}
}
+ @override
bool internalEquals(Object object, Set<ElementPair> visitedElementPairs) {
if (object is! FunctionTypeImpl) {
return false;
@@ -8019,14 +8573,15 @@
return elementPair.firstElt == elementPair.secondElt;
}
// Compute the result
- bool result = TypeImpl.equalArrays(normalParameterTypes, otherType.normalParameterTypes, visitedElementPairs) && TypeImpl.equalArrays(optionalParameterTypes, otherType.optionalParameterTypes, visitedElementPairs) && equals2(namedParameterTypes, otherType.namedParameterTypes, visitedElementPairs) && (returnType as TypeImpl).internalEquals(otherType.returnType, visitedElementPairs);
+ bool result = TypeImpl.equalArrays(normalParameterTypes, otherType.normalParameterTypes, visitedElementPairs) && TypeImpl.equalArrays(optionalParameterTypes, otherType.optionalParameterTypes, visitedElementPairs) && _equals(namedParameterTypes, otherType.namedParameterTypes, visitedElementPairs) && (returnType as TypeImpl).internalEquals(otherType.returnType, visitedElementPairs);
// Remove the pair from our visited pairs list
visitedElementPairs.remove(elementPair);
// Return the result
return result;
}
- bool internalIsSubtypeOf(Type2 type, Set<TypeImpl_TypePair> visitedTypePairs) {
+ @override
+ bool internalIsSubtypeOf(DartType type, Set<TypeImpl_TypePair> visitedTypePairs) {
// trivial base cases
if (type == null) {
return false;
@@ -8039,10 +8594,10 @@
}
FunctionType t = this;
FunctionType s = type as FunctionType;
- List<Type2> tTypes = t.normalParameterTypes;
- List<Type2> tOpTypes = t.optionalParameterTypes;
- List<Type2> sTypes = s.normalParameterTypes;
- List<Type2> sOpTypes = s.optionalParameterTypes;
+ List<DartType> tTypes = t.normalParameterTypes;
+ List<DartType> tOpTypes = t.optionalParameterTypes;
+ List<DartType> sTypes = s.normalParameterTypes;
+ List<DartType> sOpTypes = s.optionalParameterTypes;
// If one function has positional and the other has named parameters, return false.
if ((sOpTypes.length > 0 && t.namedParameterTypes.length > 0) || (tOpTypes.length > 0 && s.namedParameterTypes.length > 0)) {
return false;
@@ -8060,18 +8615,18 @@
}
}
}
- Map<String, Type2> namedTypesT = t.namedParameterTypes;
- Map<String, Type2> namedTypesS = s.namedParameterTypes;
+ Map<String, DartType> namedTypesT = t.namedParameterTypes;
+ Map<String, DartType> namedTypesS = s.namedParameterTypes;
// if k >= m is false, return false: the passed function type has more named parameter types than this
if (namedTypesT.length < namedTypesS.length) {
return false;
}
// Loop through each element in S verifying that T has a matching parameter name and that the
// corresponding type is assignable to the type in S.
- JavaIterator<MapEntry<String, Type2>> iteratorS = new JavaIterator(getMapEntrySet(namedTypesS));
+ JavaIterator<MapEntry<String, DartType>> iteratorS = new JavaIterator(getMapEntrySet(namedTypesS));
while (iteratorS.hasNext) {
- MapEntry<String, Type2> entryS = iteratorS.next();
- Type2 typeT = namedTypesT[entryS.getKey()];
+ MapEntry<String, DartType> entryS = iteratorS.next();
+ DartType typeT = namedTypesT[entryS.getKey()];
if (typeT == null) {
return false;
}
@@ -8101,14 +8656,14 @@
} else {
// Else, we do have positional parameters, copy required and positional parameter types into
// arrays to do the compare (for loop below).
- List<Type2> tAllTypes = new List<Type2>(sArgLength);
+ List<DartType> tAllTypes = new List<DartType>(sArgLength);
for (int i = 0; i < tTypes.length; i++) {
tAllTypes[i] = tTypes[i];
}
for (int i = tTypes.length, j = 0; i < sArgLength; i++, j++) {
tAllTypes[i] = tOpTypes[j];
}
- List<Type2> sAllTypes = new List<Type2>(sArgLength);
+ List<DartType> sAllTypes = new List<DartType>(sArgLength);
for (int i = 0; i < sTypes.length; i++) {
sAllTypes[i] = sTypes[i];
}
@@ -8122,8 +8677,8 @@
}
}
}
- Type2 tRetType = t.returnType;
- Type2 sRetType = s.returnType;
+ DartType tRetType = t.returnType;
+ DartType sRetType = s.returnType;
return sRetType.isVoid || (tRetType as TypeImpl).isAssignableTo2(sRetType, visitedTypePairs);
}
@@ -8132,7 +8687,7 @@
*
* @return the return type defined by this function's element
*/
- Type2 get baseReturnType {
+ DartType get baseReturnType {
Element element = this.element;
if (element is ExecutableElement) {
return element.returnType;
@@ -8161,7 +8716,7 @@
* @return the computed longest inheritance path to Object
* @see InterfaceType#getLeastUpperBound(Type)
*/
- static int computeLongestInheritancePathToObject(InterfaceType type) => computeLongestInheritancePathToObject2(type, 0, new Set<ClassElement>());
+ static int computeLongestInheritancePathToObject(InterfaceType type) => _computeLongestInheritancePathToObject(type, 0, new Set<ClassElement>());
/**
* Returns the set of all superinterfaces of the passed [Type].
@@ -8170,7 +8725,7 @@
* @return the [Set] of superinterfaces of the passed [Type]
* @see #getLeastUpperBound(Type)
*/
- static Set<InterfaceType> computeSuperinterfaceSet(InterfaceType type) => computeSuperinterfaceSet2(type, new Set<InterfaceType>());
+ static Set<InterfaceType> computeSuperinterfaceSet(InterfaceType type) => _computeSuperinterfaceSet(type, new Set<InterfaceType>());
/**
* This method computes the longest inheritance path from some passed [Type] to Object. This
@@ -8185,7 +8740,7 @@
* @see #computeLongestInheritancePathToObject(Type)
* @see #getLeastUpperBound(Type)
*/
- static int computeLongestInheritancePathToObject2(InterfaceType type, int depth, Set<ClassElement> visitedClasses) {
+ static int _computeLongestInheritancePathToObject(InterfaceType type, int depth, Set<ClassElement> visitedClasses) {
ClassElement classElement = type.element;
// Object case
if (classElement.supertype == null || visitedClasses.contains(classElement)) {
@@ -8200,7 +8755,7 @@
// loop through each of the superinterfaces recursively calling this method and keeping track
// of the longest path to return
for (InterfaceType superinterface in superinterfaces) {
- pathLength = computeLongestInheritancePathToObject2(superinterface, depth + 1, visitedClasses);
+ pathLength = _computeLongestInheritancePathToObject(superinterface, depth + 1, visitedClasses);
if (pathLength > longestPath) {
longestPath = pathLength;
}
@@ -8209,7 +8764,7 @@
// finally, perform this same check on the super type
// TODO(brianwilkerson) Does this also need to add in the number of mixin classes?
InterfaceType supertype = classElement.supertype;
- pathLength = computeLongestInheritancePathToObject2(supertype, depth + 1, visitedClasses);
+ pathLength = _computeLongestInheritancePathToObject(supertype, depth + 1, visitedClasses);
if (pathLength > longestPath) {
longestPath = pathLength;
}
@@ -8229,20 +8784,20 @@
* @see #computeSuperinterfaceSet(Type)
* @see #getLeastUpperBound(Type)
*/
- static Set<InterfaceType> computeSuperinterfaceSet2(InterfaceType type, Set<InterfaceType> set) {
+ static Set<InterfaceType> _computeSuperinterfaceSet(InterfaceType type, Set<InterfaceType> set) {
Element element = type.element;
if (element != null && element is ClassElement) {
ClassElement classElement = element;
List<InterfaceType> superinterfaces = classElement.interfaces;
for (InterfaceType superinterface in superinterfaces) {
if (set.add(superinterface)) {
- computeSuperinterfaceSet2(superinterface, set);
+ _computeSuperinterfaceSet(superinterface, set);
}
}
InterfaceType supertype = classElement.supertype;
if (supertype != null) {
if (set.add(supertype)) {
- computeSuperinterfaceSet2(supertype, set);
+ _computeSuperinterfaceSet(supertype, set);
}
}
}
@@ -8260,7 +8815,7 @@
* @param second the second set of types to be intersected
* @return the intersection of the given sets of types
*/
- static List<InterfaceType> intersection(Set<InterfaceType> first, Set<InterfaceType> second) {
+ static List<InterfaceType> _intersection(Set<InterfaceType> first, Set<InterfaceType> second) {
Map<ClassElement, InterfaceType> firstMap = new Map<ClassElement, InterfaceType>();
for (InterfaceType firstType in first) {
firstMap[firstType.element] = firstType;
@@ -8269,7 +8824,7 @@
for (InterfaceType secondType in second) {
InterfaceType firstType = firstMap[secondType.element];
if (firstType != null) {
- result.add(leastUpperBound(firstType, secondType));
+ result.add(_leastUpperBound(firstType, secondType));
}
}
return new List.from(result);
@@ -8285,17 +8840,17 @@
* @param secondType the second type
* @return the "least upper bound" of the given types
*/
- static InterfaceType leastUpperBound(InterfaceType firstType, InterfaceType secondType) {
+ static InterfaceType _leastUpperBound(InterfaceType firstType, InterfaceType secondType) {
if (firstType == secondType) {
return firstType;
}
- List<Type2> firstArguments = firstType.typeArguments;
- List<Type2> secondArguments = secondType.typeArguments;
+ List<DartType> firstArguments = firstType.typeArguments;
+ List<DartType> secondArguments = secondType.typeArguments;
int argumentCount = firstArguments.length;
if (argumentCount == 0) {
return firstType;
}
- List<Type2> lubArguments = new List<Type2>(argumentCount);
+ List<DartType> lubArguments = new List<DartType>(argumentCount);
for (int i = 0; i < argumentCount; i++) {
//
// Ideally we would take the least upper bound of the two argument types, but this can cause
@@ -8316,7 +8871,7 @@
/**
* An array containing the actual types of the type arguments.
*/
- List<Type2> typeArguments = TypeImpl.EMPTY_ARRAY;
+ List<DartType> typeArguments = TypeImpl.EMPTY_ARRAY;
/**
* Initialize a newly created type to be declared by the given element.
@@ -8333,8 +8888,10 @@
*/
InterfaceTypeImpl.con2(String name) : super(null, name);
+ @override
bool operator ==(Object object) => internalEquals(object, new Set<ElementPair>());
+ @override
List<PropertyAccessorElement> get accessors {
List<PropertyAccessorElement> accessors = element.accessors;
List<PropertyAccessorElement> members = new List<PropertyAccessorElement>(accessors.length);
@@ -8344,11 +8901,12 @@
return members;
}
+ @override
String get displayName {
String name = this.name;
- List<Type2> typeArguments = this.typeArguments;
+ List<DartType> typeArguments = this.typeArguments;
bool allDynamic = true;
- for (Type2 type in typeArguments) {
+ for (DartType type in typeArguments) {
if (type != null && !type.isDynamic) {
allDynamic = false;
break;
@@ -8363,7 +8921,7 @@
if (i != 0) {
builder.append(", ");
}
- Type2 typeArg = typeArguments[i];
+ DartType typeArg = typeArguments[i];
builder.append(typeArg.displayName);
}
builder.append(">");
@@ -8372,15 +8930,18 @@
return name;
}
+ @override
ClassElement get element => super.element as ClassElement;
+ @override
PropertyAccessorElement getGetter(String getterName) => PropertyAccessorMember.from((element as ClassElementImpl).getGetter(getterName), this);
+ @override
List<InterfaceType> get interfaces {
ClassElement classElement = element;
List<InterfaceType> interfaces = classElement.interfaces;
List<TypeParameterElement> typeParameters = classElement.typeParameters;
- List<Type2> parameterTypes = classElement.type.typeArguments;
+ List<DartType> parameterTypes = classElement.type.typeArguments;
if (typeParameters.length == 0) {
return interfaces;
}
@@ -8392,13 +8953,14 @@
return typedInterfaces;
}
- Type2 getLeastUpperBound(Type2 type) {
+ @override
+ DartType getLeastUpperBound(DartType type) {
// quick check for self
if (identical(type, this)) {
return this;
}
// dynamic
- Type2 dynamicType = DynamicTypeImpl.instance;
+ DartType dynamicType = DynamicTypeImpl.instance;
if (identical(this, dynamicType) || identical(type, dynamicType)) {
return dynamicType;
}
@@ -8416,7 +8978,7 @@
si.add(i);
sj.add(j);
// compute intersection, reference as set 's'
- List<InterfaceType> s = intersection(si, sj);
+ List<InterfaceType> s = _intersection(si, sj);
// for each element in Set s, compute the largest inheritance path to Object
List<int> depths = new List<int>.filled(s.length, 0);
int maxDepth = 0;
@@ -8447,8 +9009,10 @@
return null;
}
+ @override
MethodElement getMethod(String methodName) => MethodMember.from((element as ClassElementImpl).getMethod(methodName), this);
+ @override
List<MethodElement> get methods {
List<MethodElement> methods = element.methods;
List<MethodElement> members = new List<MethodElement>(methods.length);
@@ -8458,11 +9022,12 @@
return members;
}
+ @override
List<InterfaceType> get mixins {
ClassElement classElement = element;
List<InterfaceType> mixins = classElement.mixins;
List<TypeParameterElement> typeParameters = classElement.typeParameters;
- List<Type2> parameterTypes = classElement.type.typeArguments;
+ List<DartType> parameterTypes = classElement.type.typeArguments;
if (typeParameters.length == 0) {
return mixins;
}
@@ -8474,8 +9039,10 @@
return typedMixins;
}
+ @override
PropertyAccessorElement getSetter(String setterName) => PropertyAccessorMember.from((element as ClassElementImpl).getSetter(setterName), this);
+ @override
InterfaceType get superclass {
ClassElement classElement = element;
InterfaceType supertype = classElement.supertype;
@@ -8485,8 +9052,10 @@
return supertype.substitute2(typeArguments, classElement.type.typeArguments);
}
+ @override
List<TypeParameterElement> get typeParameters => element.typeParameters;
+ @override
int get hashCode {
ClassElement element = this.element;
if (element == null) {
@@ -8495,6 +9064,7 @@
return element.hashCode;
}
+ @override
bool get isDartCoreFunction {
ClassElement element = this.element;
if (element == null) {
@@ -8503,6 +9073,7 @@
return element.name == "Function" && element.library.isDartCore;
}
+ @override
bool isDirectSupertypeOf(InterfaceType type) {
InterfaceType i = this;
InterfaceType j = type;
@@ -8517,8 +9088,8 @@
//
// I is listed in the extends clause of J.
//
- List<Type2> jArgs = j.typeArguments;
- List<Type2> jVars = jElement.type.typeArguments;
+ List<DartType> jArgs = j.typeArguments;
+ List<DartType> jVars = jElement.type.typeArguments;
supertype = supertype.substitute2(jArgs, jVars);
if (supertype == i) {
return true;
@@ -8549,8 +9120,10 @@
return false;
}
+ @override
bool get isObject => element.supertype == null;
+ @override
ConstructorElement lookUpConstructor(String constructorName, LibraryElement library) {
// prepare base ConstructorElement
ConstructorElement constructorElement;
@@ -8567,6 +9140,7 @@
return ConstructorMember.from(constructorElement, this);
}
+ @override
PropertyAccessorElement lookUpGetter(String getterName, LibraryElement library) {
PropertyAccessorElement element = getGetter(getterName);
if (element != null && element.isAccessibleIn(library)) {
@@ -8575,6 +9149,7 @@
return lookUpGetterInSuperclass(getterName, library);
}
+ @override
PropertyAccessorElement lookUpGetterInSuperclass(String getterName, LibraryElement library) {
for (InterfaceType mixin in mixins) {
PropertyAccessorElement element = mixin.getGetter(getterName);
@@ -8603,6 +9178,7 @@
return null;
}
+ @override
MethodElement lookUpMethod(String methodName, LibraryElement library) {
MethodElement element = getMethod(methodName);
if (element != null && element.isAccessibleIn(library)) {
@@ -8611,6 +9187,7 @@
return lookUpMethodInSuperclass(methodName, library);
}
+ @override
MethodElement lookUpMethodInSuperclass(String methodName, LibraryElement library) {
for (InterfaceType mixin in mixins) {
MethodElement element = mixin.getMethod(methodName);
@@ -8639,6 +9216,7 @@
return null;
}
+ @override
PropertyAccessorElement lookUpSetter(String setterName, LibraryElement library) {
PropertyAccessorElement element = getSetter(setterName);
if (element != null && element.isAccessibleIn(library)) {
@@ -8647,6 +9225,7 @@
return lookUpSetterInSuperclass(setterName, library);
}
+ @override
PropertyAccessorElement lookUpSetterInSuperclass(String setterName, LibraryElement library) {
for (InterfaceType mixin in mixins) {
PropertyAccessorElement element = mixin.getSetter(setterName);
@@ -8675,16 +9254,18 @@
return null;
}
- InterfaceTypeImpl substitute4(List<Type2> argumentTypes) => substitute2(argumentTypes, typeArguments);
+ @override
+ InterfaceTypeImpl substitute4(List<DartType> argumentTypes) => substitute2(argumentTypes, typeArguments);
- InterfaceTypeImpl substitute2(List<Type2> argumentTypes, List<Type2> parameterTypes) {
+ @override
+ InterfaceTypeImpl substitute2(List<DartType> argumentTypes, List<DartType> parameterTypes) {
if (argumentTypes.length != parameterTypes.length) {
throw new IllegalArgumentException("argumentTypes.length (${argumentTypes.length}) != parameterTypes.length (${parameterTypes.length})");
}
if (argumentTypes.length == 0 || typeArguments.length == 0) {
return this;
}
- List<Type2> newTypeArguments = TypeImpl.substitute(typeArguments, argumentTypes, parameterTypes);
+ List<DartType> newTypeArguments = TypeImpl.substitute(typeArguments, argumentTypes, parameterTypes);
if (JavaArrays.equals(newTypeArguments, typeArguments)) {
return this;
}
@@ -8693,6 +9274,7 @@
return newType;
}
+ @override
void appendTo(JavaStringBuilder builder) {
builder.append(name);
int argumentCount = typeArguments.length;
@@ -8708,6 +9290,7 @@
}
}
+ @override
bool internalEquals(Object object, Set<ElementPair> visitedElementPairs) {
if (object is! InterfaceTypeImpl) {
return false;
@@ -8716,7 +9299,8 @@
return (element == otherType.element) && TypeImpl.equalArrays(typeArguments, otherType.typeArguments, visitedElementPairs);
}
- bool internalIsMoreSpecificThan(Type2 type, bool withDynamic, Set<TypeImpl_TypePair> visitedTypePairs) {
+ @override
+ bool internalIsMoreSpecificThan(DartType type, bool withDynamic, Set<TypeImpl_TypePair> visitedTypePairs) {
//
// S is dynamic.
// The test to determine whether S is dynamic is done here because dynamic is not an instance of
@@ -8727,10 +9311,11 @@
} else if (type is! InterfaceType) {
return false;
}
- return isMoreSpecificThan2(type as InterfaceType, new Set<ClassElement>(), withDynamic, visitedTypePairs);
+ return _isMoreSpecificThan(type as InterfaceType, new Set<ClassElement>(), withDynamic, visitedTypePairs);
}
- bool internalIsSubtypeOf(Type2 type, Set<TypeImpl_TypePair> visitedTypePairs) {
+ @override
+ bool internalIsSubtypeOf(DartType type, Set<TypeImpl_TypePair> visitedTypePairs) {
//
// T is a subtype of S, written T <: S, iff [bottom/dynamic]T << S
//
@@ -8750,10 +9335,10 @@
} else if (this == type) {
return true;
}
- return isSubtypeOf2(type as InterfaceType, new Set<ClassElement>(), visitedTypePairs);
+ return _isSubtypeOf(type as InterfaceType, new Set<ClassElement>(), visitedTypePairs);
}
- bool isMoreSpecificThan2(InterfaceType s, Set<ClassElement> visitedClasses, bool withDynamic, Set<TypeImpl_TypePair> visitedTypePairs) {
+ bool _isMoreSpecificThan(InterfaceType s, Set<ClassElement> visitedClasses, bool withDynamic, Set<TypeImpl_TypePair> visitedTypePairs) {
//
// A type T is more specific than a type S, written T << S, if one of the following conditions
// is met:
@@ -8777,13 +9362,13 @@
ClassElement tElement = this.element;
ClassElement sElement = s.element;
if (tElement == sElement) {
- List<Type2> tArguments = typeArguments;
- List<Type2> sArguments = s.typeArguments;
+ List<DartType> tArguments = typeArguments;
+ List<DartType> sArguments = s.typeArguments;
if (tArguments.length != sArguments.length) {
return false;
}
for (int i = 0; i < tArguments.length; i++) {
- if (!(tArguments[i] as TypeImpl).isMoreSpecificThan3(sArguments[i], withDynamic, visitedTypePairs)) {
+ if (!(tArguments[i] as TypeImpl).isMoreSpecificThan2(sArguments[i], withDynamic, visitedTypePairs)) {
return false;
}
}
@@ -8801,23 +9386,23 @@
// Iterate over all of the types U that are more specific than T because they are direct
// supertypes of T and return true if any of them are more specific than S.
InterfaceType supertype = superclass;
- if (supertype != null && (supertype as InterfaceTypeImpl).isMoreSpecificThan2(s, visitedClasses, withDynamic, visitedTypePairs)) {
+ if (supertype != null && (supertype as InterfaceTypeImpl)._isMoreSpecificThan(s, visitedClasses, withDynamic, visitedTypePairs)) {
return true;
}
for (InterfaceType interfaceType in interfaces) {
- if ((interfaceType as InterfaceTypeImpl).isMoreSpecificThan2(s, visitedClasses, withDynamic, visitedTypePairs)) {
+ if ((interfaceType as InterfaceTypeImpl)._isMoreSpecificThan(s, visitedClasses, withDynamic, visitedTypePairs)) {
return true;
}
}
for (InterfaceType mixinType in mixins) {
- if ((mixinType as InterfaceTypeImpl).isMoreSpecificThan2(s, visitedClasses, withDynamic, visitedTypePairs)) {
+ if ((mixinType as InterfaceTypeImpl)._isMoreSpecificThan(s, visitedClasses, withDynamic, visitedTypePairs)) {
return true;
}
}
return false;
}
- bool isSubtypeOf2(InterfaceType type, Set<ClassElement> visitedClasses, Set<TypeImpl_TypePair> visitedTypePairs) {
+ bool _isSubtypeOf(InterfaceType type, Set<ClassElement> visitedClasses, Set<TypeImpl_TypePair> visitedTypePairs) {
InterfaceType typeT = this;
InterfaceType typeS = type;
ClassElement elementT = element;
@@ -8830,8 +9415,8 @@
} else if (elementT == typeS.element) {
// For each of the type arguments return true if all type args from T is a subtype of all
// types from S.
- List<Type2> typeTArgs = typeT.typeArguments;
- List<Type2> typeSArgs = typeS.typeArguments;
+ List<DartType> typeTArgs = typeT.typeArguments;
+ List<DartType> typeSArgs = typeS.typeArguments;
if (typeTArgs.length != typeSArgs.length) {
// This case covers the case where two objects are being compared that have a different
// number of parameterized types.
@@ -8840,7 +9425,7 @@
for (int i = 0; i < typeTArgs.length; i++) {
// Recursively call isSubtypeOf the type arguments and return false if the T argument is not
// a subtype of the S argument.
- if (!(typeTArgs[i] as TypeImpl).isSubtypeOf3(typeSArgs[i], visitedTypePairs)) {
+ if (!(typeTArgs[i] as TypeImpl).isSubtypeOf2(typeSArgs[i], visitedTypePairs)) {
return false;
}
}
@@ -8850,18 +9435,18 @@
}
InterfaceType supertype = superclass;
// The type is Object, return false.
- if (supertype != null && (supertype as InterfaceTypeImpl).isSubtypeOf2(typeS, visitedClasses, visitedTypePairs)) {
+ if (supertype != null && (supertype as InterfaceTypeImpl)._isSubtypeOf(typeS, visitedClasses, visitedTypePairs)) {
return true;
}
List<InterfaceType> interfaceTypes = interfaces;
for (InterfaceType interfaceType in interfaceTypes) {
- if ((interfaceType as InterfaceTypeImpl).isSubtypeOf2(typeS, visitedClasses, visitedTypePairs)) {
+ if ((interfaceType as InterfaceTypeImpl)._isSubtypeOf(typeS, visitedClasses, visitedTypePairs)) {
return true;
}
}
List<InterfaceType> mixinTypes = mixins;
for (InterfaceType mixinType in mixinTypes) {
- if ((mixinType as InterfaceTypeImpl).isSubtypeOf2(typeS, visitedClasses, visitedTypePairs)) {
+ if ((mixinType as InterfaceTypeImpl)._isSubtypeOf(typeS, visitedClasses, visitedTypePairs)) {
return true;
}
}
@@ -8873,8 +9458,8 @@
* The abstract class `TypeImpl` implements the behavior common to objects representing the
* declared type of elements in the element model.
*/
-abstract class TypeImpl implements Type2 {
- static bool equalArrays(List<Type2> typeArgs1, List<Type2> typeArgs2, Set<ElementPair> visitedElementPairs) {
+abstract class TypeImpl implements DartType {
+ static bool equalArrays(List<DartType> typeArgs1, List<DartType> typeArgs2, Set<ElementPair> visitedElementPairs) {
if (typeArgs1.length != typeArgs2.length) {
return false;
}
@@ -8895,12 +9480,12 @@
* @param parameterTypes the parameter types for the substitution
* @return the result of performing the substitution on each of the types
*/
- static List<Type2> substitute(List<Type2> types, List<Type2> argumentTypes, List<Type2> parameterTypes) {
+ static List<DartType> substitute(List<DartType> types, List<DartType> argumentTypes, List<DartType> parameterTypes) {
int length = types.length;
if (length == 0) {
return types;
}
- List<Type2> newTypes = new List<Type2>(length);
+ List<DartType> newTypes = new List<DartType>(length);
for (int i = 0; i < length; i++) {
newTypes[i] = types[i].substitute2(argumentTypes, parameterTypes);
}
@@ -8921,7 +9506,7 @@
/**
* An empty array of types.
*/
- static List<Type2> EMPTY_ARRAY = new List<Type2>(0);
+ static List<DartType> EMPTY_ARRAY = new List<DartType>(0);
/**
* Initialize a newly created type to be declared by the given element and to have the given name.
@@ -8933,13 +9518,17 @@
this._element = element;
}
+ @override
String get displayName => name;
+ @override
Element get element => _element;
- Type2 getLeastUpperBound(Type2 type) => null;
+ @override
+ DartType getLeastUpperBound(DartType type) => null;
- bool isAssignableTo(Type2 type) => isAssignableTo2(type, new Set<TypeImpl_TypePair>());
+ @override
+ bool isAssignableTo(DartType type) => isAssignableTo2(type, new Set<TypeImpl_TypePair>());
/**
* Return `true` if this type is assignable to the given type. A type <i>T</i> may be
@@ -8954,15 +9543,19 @@
* @param visitedPairs the set of pairs of types used to prevent infinite loops
* @return `true` if this type is assignable to the given type
*/
- bool isAssignableTo2(Type2 type, Set<TypeImpl_TypePair> visitedTypePairs) => isSubtypeOf3(type, visitedTypePairs) || (type as TypeImpl).isSubtypeOf3(this, visitedTypePairs);
+ bool isAssignableTo2(DartType type, Set<TypeImpl_TypePair> visitedTypePairs) => isSubtypeOf2(type, visitedTypePairs) || (type as TypeImpl).isSubtypeOf2(this, visitedTypePairs);
+ @override
bool get isBottom => false;
+ @override
bool get isDartCoreFunction => false;
+ @override
bool get isDynamic => false;
- bool isMoreSpecificThan(Type2 type) => isMoreSpecificThan3(type, false, new Set<TypeImpl_TypePair>());
+ @override
+ bool isMoreSpecificThan(DartType type) => isMoreSpecificThan2(type, false, new Set<TypeImpl_TypePair>());
/**
* Return `true` if this type is more specific than the given type.
@@ -8976,7 +9569,7 @@
* @param visitedPairs the set of pairs of types used to prevent infinite loops
* @return `true` if this type is more specific than the given type
*/
- bool isMoreSpecificThan3(Type2 type, bool withDynamic, Set<TypeImpl_TypePair> visitedTypePairs) {
+ bool isMoreSpecificThan2(DartType type, bool withDynamic, Set<TypeImpl_TypePair> visitedTypePairs) {
// If the visitedTypePairs already has the pair (this, type), return false
TypeImpl_TypePair typePair = new TypeImpl_TypePair(this, type);
if (!visitedTypePairs.add(typePair)) {
@@ -8987,9 +9580,11 @@
return result;
}
+ @override
bool get isObject => false;
- bool isSubtypeOf(Type2 type) => isSubtypeOf3(type, new Set<TypeImpl_TypePair>());
+ @override
+ bool isSubtypeOf(DartType type) => isSubtypeOf2(type, new Set<TypeImpl_TypePair>());
/**
* Return `true` if this type is a subtype of the given type.
@@ -9002,7 +9597,7 @@
* @param visitedPairs the set of pairs of types used to prevent infinite loops
* @return `true` if this type is a subtype of the given type
*/
- bool isSubtypeOf3(Type2 type, Set<TypeImpl_TypePair> visitedTypePairs) {
+ bool isSubtypeOf2(DartType type, Set<TypeImpl_TypePair> visitedTypePairs) {
// If the visitedTypePairs already has the pair (this, type), return false
TypeImpl_TypePair typePair = new TypeImpl_TypePair(this, type);
if (!visitedTypePairs.add(typePair)) {
@@ -9013,10 +9608,13 @@
return result;
}
- bool isSupertypeOf(Type2 type) => type.isSubtypeOf(this);
+ @override
+ bool isSupertypeOf(DartType type) => type.isSubtypeOf(this);
+ @override
bool get isVoid => false;
+ @override
String toString() {
JavaStringBuilder builder = new JavaStringBuilder();
appendTo(builder);
@@ -9038,21 +9636,22 @@
bool internalEquals(Object object, Set<ElementPair> visitedElementPairs);
- bool internalIsMoreSpecificThan(Type2 type, bool withDynamic, Set<TypeImpl_TypePair> visitedTypePairs);
+ bool internalIsMoreSpecificThan(DartType type, bool withDynamic, Set<TypeImpl_TypePair> visitedTypePairs);
- bool internalIsSubtypeOf(Type2 type, Set<TypeImpl_TypePair> visitedTypePairs);
+ bool internalIsSubtypeOf(DartType type, Set<TypeImpl_TypePair> visitedTypePairs);
}
class TypeImpl_TypePair {
- Type2 _firstType;
+ DartType _firstType;
- Type2 _secondType;
+ DartType _secondType;
- TypeImpl_TypePair(Type2 firstType, Type2 secondType) {
+ TypeImpl_TypePair(DartType firstType, DartType secondType) {
this._firstType = firstType;
this._secondType = secondType;
}
+ @override
bool operator ==(Object object) {
if (identical(object, this)) {
return true;
@@ -9064,6 +9663,7 @@
return false;
}
+ @override
int get hashCode {
int firstHashCode = 0;
if (_firstType != null) {
@@ -9115,13 +9715,17 @@
*/
TypeParameterTypeImpl(TypeParameterElement element) : super(element, element.name);
+ @override
bool operator ==(Object object) => object is TypeParameterTypeImpl && (element == object.element);
+ @override
TypeParameterElement get element => super.element as TypeParameterElement;
+ @override
int get hashCode => element.hashCode;
- Type2 substitute2(List<Type2> argumentTypes, List<Type2> parameterTypes) {
+ @override
+ DartType substitute2(List<DartType> argumentTypes, List<DartType> parameterTypes) {
int length = parameterTypes.length;
for (int i = 0; i < length; i++) {
if (parameterTypes[i] == this) {
@@ -9131,9 +9735,11 @@
return this;
}
+ @override
bool internalEquals(Object object, Set<ElementPair> visitedElementPairs) => this == object;
- bool internalIsMoreSpecificThan(Type2 s, bool withDynamic, Set<TypeImpl_TypePair> visitedTypePairs) {
+ @override
+ bool internalIsMoreSpecificThan(DartType s, bool withDynamic, Set<TypeImpl_TypePair> visitedTypePairs) {
//
// A type T is more specific than a type S, written T << S, if one of the following conditions
// is met:
@@ -9153,15 +9759,16 @@
if (s.isDynamic) {
return true;
}
- return isMoreSpecificThan4(s, new Set<Type2>(), withDynamic, visitedTypePairs);
+ return _isMoreSpecificThan(s, new Set<DartType>(), withDynamic, visitedTypePairs);
}
- bool internalIsSubtypeOf(Type2 type, Set<TypeImpl_TypePair> visitedTypePairs) => isMoreSpecificThan3(type, true, new Set<TypeImpl_TypePair>());
+ @override
+ bool internalIsSubtypeOf(DartType type, Set<TypeImpl_TypePair> visitedTypePairs) => isMoreSpecificThan2(type, true, new Set<TypeImpl_TypePair>());
- bool isMoreSpecificThan4(Type2 s, Set<Type2> visitedTypes, bool withDynamic, Set<TypeImpl_TypePair> visitedTypePairs) {
+ bool _isMoreSpecificThan(DartType s, Set<DartType> visitedTypes, bool withDynamic, Set<TypeImpl_TypePair> visitedTypePairs) {
// T is a type parameter and S is the upper bound of T.
//
- Type2 bound = element.bound;
+ DartType bound = element.bound;
if (s == bound) {
return true;
}
@@ -9185,10 +9792,10 @@
}
visitedTypes.add(bound);
// Then check upper bound.
- return boundTypeParameter.isMoreSpecificThan4(s, visitedTypes, withDynamic, visitedTypePairs);
+ return boundTypeParameter._isMoreSpecificThan(s, visitedTypes, withDynamic, visitedTypePairs);
}
// Check interface type.
- return (bound as TypeImpl).isMoreSpecificThan3(s, withDynamic, visitedTypePairs);
+ return (bound as TypeImpl).isMoreSpecificThan2(s, withDynamic, visitedTypePairs);
}
}
@@ -9213,19 +9820,26 @@
*/
VoidTypeImpl() : super(null, Keyword.VOID.syntax);
+ @override
bool operator ==(Object object) => identical(object, this);
+ @override
int get hashCode => 2;
+ @override
bool get isVoid => true;
- VoidTypeImpl substitute2(List<Type2> argumentTypes, List<Type2> parameterTypes) => this;
+ @override
+ VoidTypeImpl substitute2(List<DartType> argumentTypes, List<DartType> parameterTypes) => this;
+ @override
bool internalEquals(Object object, Set<ElementPair> visitedElementPairs) => identical(object, this);
- bool internalIsMoreSpecificThan(Type2 type, bool withDynamic, Set<TypeImpl_TypePair> visitedTypePairs) => isSubtypeOf(type);
+ @override
+ bool internalIsMoreSpecificThan(DartType type, bool withDynamic, Set<TypeImpl_TypePair> visitedTypePairs) => isSubtypeOf(type);
- bool internalIsSubtypeOf(Type2 type, Set<TypeImpl_TypePair> visitedTypePairs) => identical(type, this) || identical(type, DynamicTypeImpl.instance);
+ @override
+ bool internalIsSubtypeOf(DartType type, Set<TypeImpl_TypePair> visitedTypePairs) => identical(type, this) || identical(type, DynamicTypeImpl.instance);
}
/**
@@ -9250,7 +9864,7 @@
*
* @return a map from the name to the types of the named parameters of this type of function
*/
- Map<String, Type2> get namedParameterTypes;
+ Map<String, DartType> get namedParameterTypes;
/**
* Return an array containing the types of the normal parameters of this type of function. The
@@ -9258,7 +9872,7 @@
*
* @return the types of the normal parameters of this type of function
*/
- List<Type2> get normalParameterTypes;
+ List<DartType> get normalParameterTypes;
/**
* Return a map from the names of optional (positional) parameters to the types of the optional
@@ -9268,7 +9882,7 @@
*
* @return a map from the name to the types of the optional parameters of this type of function
*/
- List<Type2> get optionalParameterTypes;
+ List<DartType> get optionalParameterTypes;
/**
* Return an array containing the parameters elements of this type of function. The parameter
@@ -9283,7 +9897,7 @@
*
* @return the type of object returned by this type of function
*/
- Type2 get returnType;
+ DartType get returnType;
/**
* Return `true` if this type is a subtype of the given type.
@@ -9338,7 +9952,8 @@
* @param type the type being compared with this type
* @return `true` if this type is a subtype of the given type
*/
- bool isSubtypeOf(Type2 type);
+ @override
+ bool isSubtypeOf(DartType type);
/**
* Return the type resulting from substituting the given arguments for this type's parameters.
@@ -9347,9 +9962,10 @@
* @param argumentTypes the actual type arguments being substituted for the type parameters
* @return the result of performing the substitution
*/
- FunctionType substitute3(List<Type2> argumentTypes);
+ FunctionType substitute3(List<DartType> argumentTypes);
- FunctionType substitute2(List<Type2> argumentTypes, List<Type2> parameterTypes);
+ @override
+ FunctionType substitute2(List<DartType> argumentTypes, List<DartType> parameterTypes);
}
/**
@@ -9364,6 +9980,7 @@
*/
List<PropertyAccessorElement> get accessors;
+ @override
ClassElement get element;
/**
@@ -9400,7 +10017,8 @@
* @param type the other type used to compute the least upper bound
* @return the least upper bound of this type and the given type
*/
- Type2 getLeastUpperBound(Type2 type);
+ @override
+ DartType getLeastUpperBound(DartType type);
/**
* Return the element representing the method with the given name that is declared in this class,
@@ -9479,7 +10097,8 @@
* @param type the type being compared with this type
* @return `true` if this type is more specific than the given type
*/
- bool isMoreSpecificThan(Type2 type);
+ @override
+ bool isMoreSpecificThan(DartType type);
/**
* Return `true` if this type is a subtype of the given type. An interface type <i>T</i> is
@@ -9491,7 +10110,8 @@
* @param type the type being compared with this type
* @return `true` if this type is a subtype of the given type
*/
- bool isSubtypeOf(Type2 type);
+ @override
+ bool isSubtypeOf(DartType type);
/**
* Return the element representing the constructor that results from looking up the given
@@ -9633,16 +10253,17 @@
* @param argumentTypes the actual type arguments being substituted for the type parameters
* @return the result of performing the substitution
*/
- InterfaceType substitute4(List<Type2> argumentTypes);
+ InterfaceType substitute4(List<DartType> argumentTypes);
- InterfaceType substitute2(List<Type2> argumentTypes, List<Type2> parameterTypes);
+ @override
+ InterfaceType substitute2(List<DartType> argumentTypes, List<DartType> parameterTypes);
}
/**
* The interface `ParameterizedType` defines the behavior common to objects representing a
* type with type parameters, such as a class or function type alias.
*/
-abstract class ParameterizedType implements Type2 {
+abstract class ParameterizedType implements DartType {
/**
* Return an array containing the actual types of the type arguments. If this type's element does
* not have type parameters, then the array should be empty (although it is possible for type
@@ -9652,7 +10273,7 @@
*
* @return the actual types of the type arguments
*/
- List<Type2> get typeArguments;
+ List<DartType> get typeArguments;
/**
* Return an array containing all of the type parameters declared for this type.
@@ -9666,7 +10287,7 @@
* The interface `Type` defines the behavior of objects representing the declared type of
* elements in the element model.
*/
-abstract class Type2 {
+abstract class DartType {
/**
* Return the name of this type as it should appear when presented to users in contexts such as
* error messages.
@@ -9691,7 +10312,7 @@
* @param type the other type used to compute the least upper bound
* @return the least upper bound of this type and the given type
*/
- Type2 getLeastUpperBound(Type2 type);
+ DartType getLeastUpperBound(DartType type);
/**
* Return the name of this type, or `null` if the type does not have a name, such as when
@@ -9709,7 +10330,7 @@
* @param type the type being compared with this type
* @return `true` if this type is assignable to the given type
*/
- bool isAssignableTo(Type2 type);
+ bool isAssignableTo(DartType type);
/**
* Return `true` if this type represents the bottom type.
@@ -9740,7 +10361,7 @@
* @param type the type being compared with this type
* @return `true` if this type is more specific than the given type
*/
- bool isMoreSpecificThan(Type2 type);
+ bool isMoreSpecificThan(DartType type);
/**
* Return `true` if this type represents the type 'Object'.
@@ -9755,7 +10376,7 @@
* @param type the type being compared with this type
* @return `true` if this type is a subtype of the given type
*/
- bool isSubtypeOf(Type2 type);
+ bool isSubtypeOf(DartType type);
/**
* Return `true` if this type is a supertype of the given type. A type <i>S</i> is a
@@ -9764,7 +10385,7 @@
* @param type the type being compared with this type
* @return `true` if this type is a supertype of the given type
*/
- bool isSupertypeOf(Type2 type);
+ bool isSupertypeOf(DartType type);
/**
* Return `true` if this type represents the type 'void'.
@@ -9786,14 +10407,15 @@
* @param parameterTypes the parameters to be replaced
* @return the result of performing the substitution
*/
- Type2 substitute2(List<Type2> argumentTypes, List<Type2> parameterTypes);
+ DartType substitute2(List<DartType> argumentTypes, List<DartType> parameterTypes);
}
/**
* The interface `TypeParameterType` defines the behavior of objects representing the type
* introduced by a type parameter.
*/
-abstract class TypeParameterType implements Type2 {
+abstract class TypeParameterType implements DartType {
+ @override
TypeParameterElement get element;
}
@@ -9801,6 +10423,7 @@
* The interface `VoidType` defines the behavior of the unique object representing the type
* `void`.
*/
-abstract class VoidType implements Type2 {
- VoidType substitute2(List<Type2> argumentTypes, List<Type2> parameterTypes);
+abstract class VoidType implements DartType {
+ @override
+ VoidType substitute2(List<DartType> argumentTypes, List<DartType> parameterTypes);
}
\ No newline at end of file
diff --git a/pkg/analyzer/lib/src/generated/engine.dart b/pkg/analyzer/lib/src/generated/engine.dart
index d536acb..9fa7af5 100644
--- a/pkg/analyzer/lib/src/generated/engine.dart
+++ b/pkg/analyzer/lib/src/generated/engine.dart
@@ -294,6 +294,11 @@
LineInfo computeLineInfo(Source source);
/**
+ * Notifies the context that the client is going to stop using this context.
+ */
+ void dispose();
+
+ /**
* Return `true` if the given source exists.
*
* This method should be used rather than the method [Source#exists] because contexts can
@@ -349,19 +354,6 @@
TimestampedData<String> getContents(Source source);
/**
- * Get the contents of the given source and pass it to the given content receiver.
- *
- * This method should be used rather than the method
- * [Source#getContentsToReceiver] because contexts can have local overrides
- * of the content of a source that the source is not aware of.
- *
- * @param source the source whose content is to be returned
- * @param receiver the content receiver to which the content of the source will be passed
- * @throws Exception if the contents of the source could not be accessed
- */
- void getContentsToReceiver(Source source, Source_ContentReceiver receiver);
-
- /**
* Return the element referenced by the given location, or `null` if the element is not
* immediately available or if there is no element with the given location. The latter condition
* can occur, for example, if the location describes an element from a different context or if the
@@ -577,6 +569,13 @@
bool isClientLibrary(Source librarySource);
/**
+ * Returns `true` if this context was disposed using [dispose].
+ *
+ * @return `true` if this context was disposed
+ */
+ bool get isDisposed;
+
+ /**
* Return `true` if the given source is known to be the defining compilation unit of a
* library that can be run on the server (does not reference 'dart:html', either directly or
* indirectly).
@@ -887,6 +886,13 @@
* @return the change notices associated with this result
*/
List<ChangeNotice> get changeNotices => _notices;
+
+ /**
+ * Return `true` if there is more to be performed after the task that was performed.
+ *
+ * @return `true` if there is more to be performed after the task that was performed
+ */
+ bool get hasMoreWork => _notices != null;
}
/**
@@ -1013,11 +1019,12 @@
}
}
+ @override
String toString() {
JavaStringBuilder builder = new JavaStringBuilder();
- bool needsSeparator = appendSources(builder, _added, false, "added");
- needsSeparator = appendSources(builder, _changed, needsSeparator, "changed");
- appendSources(builder, _removed, needsSeparator, "removed");
+ bool needsSeparator = _appendSources(builder, _added, false, "added");
+ needsSeparator = _appendSources(builder, _changed, needsSeparator, "changed");
+ _appendSources(builder, _removed, needsSeparator, "removed");
int count = removedContainers.length;
if (count > 0) {
if (_removed.isEmpty) {
@@ -1046,7 +1053,7 @@
* @param label the label used to prefix the sources
* @return `true` if future lists of sources will need a separator
*/
- bool appendSources(JavaStringBuilder builder, List<Source> sources, bool needsSeparator, String label) {
+ bool _appendSources(JavaStringBuilder builder, List<Source> sources, bool needsSeparator, String label) {
if (sources.isEmpty) {
return needsSeparator;
}
@@ -1145,7 +1152,7 @@
return;
}
while (_recentlyUsed.length >= _maxCacheSize) {
- if (!flushAstFromCache()) {
+ if (!_flushAstFromCache()) {
break;
}
}
@@ -1206,7 +1213,7 @@
void set maxCacheSize(int size) {
_maxCacheSize = size;
while (_recentlyUsed.length > _maxCacheSize) {
- if (!flushAstFromCache()) {
+ if (!_flushAstFromCache()) {
break;
}
}
@@ -1229,7 +1236,7 @@
return;
}
while (_recentlyUsed.length >= _maxCacheSize) {
- if (!flushAstFromCache()) {
+ if (!_flushAstFromCache()) {
break;
}
}
@@ -1241,8 +1248,8 @@
*
* @return `true` if a structure was flushed
*/
- bool flushAstFromCache() {
- Source removedSource = removeAstToFlush();
+ bool _flushAstFromCache() {
+ Source removedSource = _removeAstToFlush();
if (removedSource == null) {
return false;
}
@@ -1266,7 +1273,7 @@
*
* @return the source that was removed
*/
- Source removeAstToFlush() {
+ Source _removeAstToFlush() {
int sourceToRemove = -1;
for (int i = 0; i < _recentlyUsed.length; i++) {
Source source = _recentlyUsed[i];
@@ -1370,6 +1377,11 @@
static final DataDescriptor<List<Source>> CONTAINING_LIBRARIES = new DataDescriptor<List<Source>>("DartEntry.CONTAINING_LIBRARIES");
/**
+ * The data descriptor representing the errors reported during the resolution of directives.
+ */
+ static final DataDescriptor<List<AnalysisError>> DIRECTIVE_ERRORS = new DataDescriptor<List<AnalysisError>>("DartEntry.DIRECTIVE_ERRORS");
+
+ /**
* The data descriptor representing the library element for the library. This data is only
* available for Dart files that are the defining compilation unit of a library.
*/
@@ -1502,6 +1514,7 @@
*/
Object getValueInLibrary(DataDescriptor descriptor, Source librarySource);
+ @override
DartEntryImpl get writableCopy;
/**
@@ -1540,8 +1553,8 @@
CacheState _scanErrorsState = CacheState.INVALID;
/**
- * The errors produced while scanning the compilation unit, or `null` if the errors are not
- * currently cached.
+ * The errors produced while scanning the compilation unit, or an empty array if the errors are
+ * not currently cached.
*/
List<AnalysisError> _scanErrors = AnalysisError.NO_ERRORS;
@@ -1578,7 +1591,7 @@
CacheState _parseErrorsState = CacheState.INVALID;
/**
- * The errors produced while parsing the compilation unit, or `null` if the errors are not
+ * The errors produced while parsing the compilation unit, or an empty array if the errors are not
* currently cached.
*/
List<AnalysisError> _parseErrors = AnalysisError.NO_ERRORS;
@@ -1617,6 +1630,17 @@
List<Source> _includedParts = Source.EMPTY_ARRAY;
/**
+ * The state of the cached directive errors.
+ */
+ CacheState _directiveErrorsState = CacheState.INVALID;
+
+ /**
+ * The errors produced while resolving the directives, or an empty array if the errors are not
+ * currently cached.
+ */
+ List<AnalysisError> _directiveErrors = AnalysisError.NO_ERRORS;
+
+ /**
* The list of libraries that contain this compilation unit. The list will be empty if there are
* no known libraries that contain this compilation unit.
*/
@@ -1708,10 +1732,12 @@
_resolutionState.flushAstStructures();
}
+ @override
List<AnalysisError> get allErrors {
List<AnalysisError> errors = new List<AnalysisError>();
ListUtilities.addAll(errors, _scanErrors);
ListUtilities.addAll(errors, _parseErrors);
+ ListUtilities.addAll(errors, _directiveErrors);
DartEntryImpl_ResolutionState state = _resolutionState;
while (state != null) {
ListUtilities.addAll(errors, state._resolutionErrors);
@@ -1726,6 +1752,7 @@
return new List.from(errors);
}
+ @override
CompilationUnit get anyParsedCompilationUnit {
if (identical(_parsedUnitState, CacheState.VALID)) {
_parsedUnitAccessed = true;
@@ -1734,6 +1761,7 @@
return anyResolvedCompilationUnit;
}
+ @override
CompilationUnit get anyResolvedCompilationUnit {
DartEntryImpl_ResolutionState state = _resolutionState;
while (state != null) {
@@ -1746,6 +1774,7 @@
return null;
}
+ @override
SourceKind get kind => _sourceKind;
/**
@@ -1791,8 +1820,11 @@
return null;
}
+ @override
CacheState getState(DataDescriptor descriptor) {
- if (identical(descriptor, DartEntry.ELEMENT)) {
+ if (identical(descriptor, DartEntry.DIRECTIVE_ERRORS)) {
+ return _directiveErrorsState;
+ } else if (identical(descriptor, DartEntry.ELEMENT)) {
return _elementState;
} else if (identical(descriptor, DartEntry.EXPORTED_LIBRARIES)) {
return _exportedLibrariesState;
@@ -1821,6 +1853,7 @@
}
}
+ @override
CacheState getStateInLibrary(DataDescriptor descriptor, Source librarySource) {
DartEntryImpl_ResolutionState state = _resolutionState;
while (state != null) {
@@ -1847,11 +1880,14 @@
}
}
+ @override
Object getValue(DataDescriptor descriptor) {
if (identical(descriptor, DartEntry.ANGULAR_ERRORS)) {
return _angularErrors;
} else if (identical(descriptor, DartEntry.CONTAINING_LIBRARIES)) {
return new List.from(_containingLibraries);
+ } else if (identical(descriptor, DartEntry.DIRECTIVE_ERRORS)) {
+ return _directiveErrors;
} else if (identical(descriptor, DartEntry.ELEMENT)) {
return _element;
} else if (identical(descriptor, DartEntry.EXPORTED_LIBRARIES)) {
@@ -1881,6 +1917,7 @@
return super.getValue(descriptor);
}
+ @override
Object getValueInLibrary(DataDescriptor descriptor, Source librarySource) {
DartEntryImpl_ResolutionState state = _resolutionState;
while (state != null) {
@@ -1909,14 +1946,18 @@
}
}
+ @override
DartEntryImpl get writableCopy {
DartEntryImpl copy = new DartEntryImpl();
copy.copyFrom(this);
return copy;
}
+ @override
bool hasInvalidData(DataDescriptor descriptor) {
- if (identical(descriptor, DartEntry.ELEMENT)) {
+ if (identical(descriptor, DartEntry.DIRECTIVE_ERRORS)) {
+ return identical(_directiveErrorsState, CacheState.INVALID);
+ } else if (identical(descriptor, DartEntry.ELEMENT)) {
return identical(_elementState, CacheState.INVALID);
} else if (identical(descriptor, DartEntry.EXPORTED_LIBRARIES)) {
return identical(_exportedLibrariesState, CacheState.INVALID);
@@ -1959,6 +2000,7 @@
}
}
+ @override
void invalidateAllInformation() {
super.invalidateAllInformation();
_scanErrors = AnalysisError.NO_ERRORS;
@@ -1972,7 +2014,7 @@
_parsedUnit = null;
_parsedUnitAccessed = false;
_parsedUnitState = CacheState.INVALID;
- discardCachedResolutionInformation();
+ _discardCachedResolutionInformation();
}
/**
@@ -1991,9 +2033,10 @@
state = state._nextState;
}
}
- discardCachedResolutionInformation();
+ _discardCachedResolutionInformation();
}
+ @override
bool get isRefactoringSafe {
DartEntryImpl_ResolutionState state = _resolutionState;
while (state != null) {
@@ -2006,6 +2049,7 @@
return true;
}
+ @override
void recordContentError() {
super.recordContentError();
recordScanError();
@@ -2022,6 +2066,8 @@
_importedLibrariesState = CacheState.ERROR;
_includedParts = Source.EMPTY_ARRAY;
_includedPartsState = CacheState.ERROR;
+ _directiveErrors = AnalysisError.NO_ERRORS;
+ _directiveErrorsState = CacheState.ERROR;
}
/**
@@ -2038,6 +2084,9 @@
if (_includedPartsState != CacheState.VALID) {
_includedPartsState = CacheState.IN_PROCESS;
}
+ if (_directiveErrorsState != CacheState.VALID) {
+ _directiveErrorsState = CacheState.IN_PROCESS;
+ }
}
/**
@@ -2054,6 +2103,9 @@
if (identical(_includedPartsState, CacheState.IN_PROCESS)) {
_includedPartsState = CacheState.INVALID;
}
+ if (identical(_directiveErrorsState, CacheState.IN_PROCESS)) {
+ _directiveErrorsState = CacheState.INVALID;
+ }
}
/**
@@ -2241,8 +2293,12 @@
_containingLibraries.add(librarySource);
}
+ @override
void setState(DataDescriptor descriptor, CacheState state) {
- if (identical(descriptor, DartEntry.ELEMENT)) {
+ if (identical(descriptor, DartEntry.DIRECTIVE_ERRORS)) {
+ _directiveErrors = updatedValue(state, _directiveErrors, null);
+ _directiveErrorsState = state;
+ } else if (identical(descriptor, DartEntry.ELEMENT)) {
_element = updatedValue(state, _element, null);
_elementState = state;
} else if (identical(descriptor, DartEntry.EXPORTED_LIBRARIES)) {
@@ -2255,10 +2311,10 @@
_includedParts = updatedValue(state, _includedParts, Source.EMPTY_ARRAY);
_includedPartsState = state;
} else if (identical(descriptor, DartEntry.IS_CLIENT)) {
- _bitmask = updatedValueOfFlag(state, _bitmask, _CLIENT_CODE_INDEX);
+ _bitmask = _updatedValueOfFlag(state, _bitmask, _CLIENT_CODE_INDEX);
_clientServerState = state;
} else if (identical(descriptor, DartEntry.IS_LAUNCHABLE)) {
- _bitmask = updatedValueOfFlag(state, _bitmask, _LAUNCHABLE_INDEX);
+ _bitmask = _updatedValueOfFlag(state, _bitmask, _LAUNCHABLE_INDEX);
_launchableState = state;
} else if (identical(descriptor, DartEntry.PARSE_ERRORS)) {
_parseErrors = updatedValue(state, _parseErrors, AnalysisError.NO_ERRORS);
@@ -2297,7 +2353,7 @@
* @param cacheState the new state of the data represented by the given descriptor
*/
void setStateInLibrary(DataDescriptor descriptor, Source librarySource, CacheState cacheState) {
- DartEntryImpl_ResolutionState state = getOrCreateResolutionState(librarySource);
+ DartEntryImpl_ResolutionState state = _getOrCreateResolutionState(librarySource);
if (identical(descriptor, DartEntry.RESOLUTION_ERRORS)) {
state._resolutionErrors = updatedValue(cacheState, state._resolutionErrors, AnalysisError.NO_ERRORS);
state._resolutionErrorsState = cacheState;
@@ -2315,9 +2371,13 @@
}
}
+ @override
void setValue(DataDescriptor descriptor, Object value) {
if (identical(descriptor, DartEntry.ANGULAR_ERRORS)) {
_angularErrors = value == null ? AnalysisError.NO_ERRORS : (value as List<AnalysisError>);
+ } else if (identical(descriptor, DartEntry.DIRECTIVE_ERRORS)) {
+ _directiveErrors = value as List<AnalysisError>;
+ _directiveErrorsState = CacheState.VALID;
} else if (identical(descriptor, DartEntry.ELEMENT)) {
_element = value as LibraryElement;
_elementState = CacheState.VALID;
@@ -2370,7 +2430,7 @@
* @param value the new value of the data represented by the given descriptor and library
*/
void setValueInLibrary(DataDescriptor descriptor, Source librarySource, Object value) {
- DartEntryImpl_ResolutionState state = getOrCreateResolutionState(librarySource);
+ DartEntryImpl_ResolutionState state = _getOrCreateResolutionState(librarySource);
if (identical(descriptor, DartEntry.RESOLUTION_ERRORS)) {
state._resolutionErrors = value == null ? AnalysisError.NO_ERRORS : (value as List<AnalysisError>);
state._resolutionErrorsState = CacheState.VALID;
@@ -2386,6 +2446,7 @@
}
}
+ @override
void copyFrom(SourceEntryImpl entry) {
super.copyFrom(entry);
DartEntryImpl other = entry as DartEntryImpl;
@@ -2406,6 +2467,8 @@
_exportedLibraries = other._exportedLibraries;
_importedLibrariesState = other._importedLibrariesState;
_importedLibraries = other._importedLibraries;
+ _directiveErrorsState = other._directiveErrorsState;
+ _directiveErrors = other._directiveErrors;
_containingLibraries = new List<Source>.from(other._containingLibraries);
_resolutionState.copyFrom(other._resolutionState);
_elementState = other._elementState;
@@ -2418,8 +2481,10 @@
_angularErrors = other._angularErrors;
}
- bool get hasErrorState => super.hasErrorState || identical(_scanErrorsState, CacheState.ERROR) || identical(_tokenStreamState, CacheState.ERROR) || identical(_sourceKindState, CacheState.ERROR) || identical(_parsedUnitState, CacheState.ERROR) || identical(_parseErrorsState, CacheState.ERROR) || identical(_importedLibrariesState, CacheState.ERROR) || identical(_exportedLibrariesState, CacheState.ERROR) || identical(_includedPartsState, CacheState.ERROR) || identical(_elementState, CacheState.ERROR) || identical(_publicNamespaceState, CacheState.ERROR) || identical(_clientServerState, CacheState.ERROR) || identical(_launchableState, CacheState.ERROR) || _resolutionState.hasErrorState;
+ @override
+ bool get hasErrorState => super.hasErrorState || identical(_scanErrorsState, CacheState.ERROR) || identical(_tokenStreamState, CacheState.ERROR) || identical(_sourceKindState, CacheState.ERROR) || identical(_parsedUnitState, CacheState.ERROR) || identical(_parseErrorsState, CacheState.ERROR) || identical(_importedLibrariesState, CacheState.ERROR) || identical(_exportedLibrariesState, CacheState.ERROR) || identical(_includedPartsState, CacheState.ERROR) || identical(_directiveErrorsState, CacheState.ERROR) || identical(_elementState, CacheState.ERROR) || identical(_publicNamespaceState, CacheState.ERROR) || identical(_clientServerState, CacheState.ERROR) || identical(_launchableState, CacheState.ERROR) || _resolutionState.hasErrorState;
+ @override
void writeOn(JavaStringBuilder builder) {
builder.append("Dart: ");
super.writeOn(builder);
@@ -2441,6 +2506,8 @@
builder.append(_importedLibrariesState);
builder.append("; includedParts = ");
builder.append(_includedPartsState);
+ builder.append("; directiveErrors = ");
+ builder.append(_directiveErrorsState);
builder.append("; element = ");
builder.append(_elementState);
builder.append("; publicNamespace = ");
@@ -2456,7 +2523,7 @@
/**
* Invalidate all of the resolution information associated with the compilation unit.
*/
- void discardCachedResolutionInformation() {
+ void _discardCachedResolutionInformation() {
_element = null;
_elementState = CacheState.INVALID;
_includedParts = Source.EMPTY_ARRAY;
@@ -2465,6 +2532,8 @@
_exportedLibrariesState = CacheState.INVALID;
_importedLibraries = Source.EMPTY_ARRAY;
_importedLibrariesState = CacheState.INVALID;
+ _directiveErrors = AnalysisError.NO_ERRORS;
+ _directiveErrorsState = CacheState.INVALID;
_bitmask = 0;
_clientServerState = CacheState.INVALID;
_launchableState = CacheState.INVALID;
@@ -2479,7 +2548,7 @@
* @param librarySource the library source (not `null`)
* @return the resolution state (not `null`)
*/
- DartEntryImpl_ResolutionState getOrCreateResolutionState(Source librarySource) {
+ DartEntryImpl_ResolutionState _getOrCreateResolutionState(Source librarySource) {
DartEntryImpl_ResolutionState state = _resolutionState;
if (state._librarySource == null) {
state._librarySource = librarySource;
@@ -2506,7 +2575,7 @@
* @param bitMask the mask used to access the bit whose state is being set
* @return the value of the data that should be kept in the cache
*/
- int updatedValueOfFlag(CacheState state, int currentValue, int bitIndex) {
+ int _updatedValueOfFlag(CacheState state, int currentValue, int bitIndex) {
if (identical(state, CacheState.VALID)) {
throw new IllegalArgumentException("Use setValue() to set the state to VALID");
} else if (identical(state, CacheState.IN_PROCESS)) {
@@ -2716,6 +2785,7 @@
this._name = name;
}
+ @override
String toString() => _name;
}
@@ -2797,6 +2867,7 @@
*/
ht.HtmlUnit get anyParsedUnit;
+ @override
HtmlEntryImpl get writableCopy;
}
@@ -2933,6 +3004,7 @@
}
}
+ @override
List<AnalysisError> get allErrors {
List<AnalysisError> errors = new List<AnalysisError>();
if (_parseErrors != null) {
@@ -2961,6 +3033,7 @@
return new List.from(errors);
}
+ @override
ht.HtmlUnit get anyParsedUnit {
if (identical(_parsedUnitState, CacheState.VALID)) {
// parsedUnitAccessed = true;
@@ -2973,8 +3046,10 @@
return null;
}
+ @override
SourceKind get kind => SourceKind.HTML;
+ @override
CacheState getState(DataDescriptor descriptor) {
if (identical(descriptor, HtmlEntry.ANGULAR_APPLICATION)) {
return _angularApplicationState;
@@ -3002,6 +3077,7 @@
return super.getState(descriptor);
}
+ @override
Object getValue(DataDescriptor descriptor) {
if (identical(descriptor, HtmlEntry.ANGULAR_APPLICATION)) {
return _angularApplication;
@@ -3029,12 +3105,14 @@
return super.getValue(descriptor);
}
+ @override
HtmlEntryImpl get writableCopy {
HtmlEntryImpl copy = new HtmlEntryImpl();
copy.copyFrom(this);
return copy;
}
+ @override
void invalidateAllInformation() {
super.invalidateAllInformation();
_parseErrors = AnalysisError.NO_ERRORS;
@@ -3064,6 +3142,7 @@
_hintsState = CacheState.INVALID;
}
+ @override
void recordContentError() {
super.recordContentError();
recordParseError();
@@ -3093,6 +3172,7 @@
setState(HtmlEntry.HINTS, CacheState.ERROR);
}
+ @override
void setState(DataDescriptor descriptor, CacheState state) {
if (identical(descriptor, HtmlEntry.ANGULAR_APPLICATION)) {
_angularApplication = updatedValue(state, _angularApplication, null);
@@ -3132,6 +3212,7 @@
}
}
+ @override
void setValue(DataDescriptor descriptor, Object value) {
if (identical(descriptor, HtmlEntry.ANGULAR_APPLICATION)) {
_angularApplication = value as AngularApplication;
@@ -3171,6 +3252,7 @@
}
}
+ @override
void copyFrom(SourceEntryImpl entry) {
super.copyFrom(entry);
HtmlEntryImpl other = entry as HtmlEntryImpl;
@@ -3198,8 +3280,10 @@
_hintsState = other._hintsState;
}
+ @override
bool get hasErrorState => super.hasErrorState || identical(_parsedUnitState, CacheState.ERROR) || identical(_resolvedUnitState, CacheState.ERROR) || identical(_parseErrorsState, CacheState.ERROR) || identical(_resolutionErrorsState, CacheState.ERROR) || identical(_referencedLibrariesState, CacheState.ERROR) || identical(_elementState, CacheState.ERROR) || identical(_angularErrorsState, CacheState.ERROR) || identical(_hintsState, CacheState.ERROR);
+ @override
void writeOn(JavaStringBuilder builder) {
builder.append("Html: ");
super.writeOn(builder);
@@ -3376,8 +3460,10 @@
}
}
+ @override
int get modificationTime => _modificationTime;
+ @override
CacheState getState(DataDescriptor descriptor) {
if (identical(descriptor, SourceEntry.CONTENT)) {
return _contentState;
@@ -3388,6 +3474,7 @@
}
}
+ @override
Object getValue(DataDescriptor descriptor) {
if (identical(descriptor, SourceEntry.CONTENT)) {
return _content;
@@ -3464,6 +3551,7 @@
}
}
+ @override
String toString() {
JavaStringBuilder builder = new JavaStringBuilder();
writeOn(builder);
@@ -3542,31 +3630,34 @@
_sources.add(source);
}
+ @override
List<AnalysisContentStatistics_CacheRow> get cacheRows {
Iterable<AnalysisContentStatistics_CacheRow> items = _dataMap.values;
return new List.from(items);
}
+ @override
List<AnalysisException> get exceptions => new List.from(_exceptions);
+ @override
List<Source> get sources => new List.from(_sources);
void putCacheItem(SourceEntry dartEntry, DataDescriptor descriptor) {
- internalPutCacheItem(dartEntry, descriptor, dartEntry.getState(descriptor));
+ _internalPutCacheItem(dartEntry, descriptor, dartEntry.getState(descriptor));
}
void putCacheItemInLibrary(DartEntry dartEntry, Source librarySource, DataDescriptor descriptor) {
- internalPutCacheItem(dartEntry, descriptor, dartEntry.getStateInLibrary(descriptor, librarySource));
+ _internalPutCacheItem(dartEntry, descriptor, dartEntry.getStateInLibrary(descriptor, librarySource));
}
- void internalPutCacheItem(SourceEntry dartEntry, DataDescriptor rowDesc, CacheState state) {
+ void _internalPutCacheItem(SourceEntry dartEntry, DataDescriptor rowDesc, CacheState state) {
String rowName = rowDesc.toString();
AnalysisContentStatisticsImpl_CacheRowImpl row = _dataMap[rowName] as AnalysisContentStatisticsImpl_CacheRowImpl;
if (row == null) {
row = new AnalysisContentStatisticsImpl_CacheRowImpl(rowName);
_dataMap[rowName] = row;
}
- row.incState(state);
+ row._incState(state);
if (identical(state, CacheState.ERROR)) {
AnalysisException exception = dartEntry.exception;
if (exception != null) {
@@ -3591,21 +3682,28 @@
AnalysisContentStatisticsImpl_CacheRowImpl(this.name);
+ @override
bool operator ==(Object obj) => obj is AnalysisContentStatisticsImpl_CacheRowImpl && obj.name == name;
+ @override
int get errorCount => _errorCount;
+ @override
int get flushedCount => _flushedCount;
+ @override
int get inProcessCount => _inProcessCount;
+ @override
int get invalidCount => _invalidCount;
+ @override
int get validCount => _validCount;
+ @override
int get hashCode => name.hashCode;
- void incState(CacheState state) {
+ void _incState(CacheState state) {
if (identical(state, CacheState.ERROR)) {
_errorCount++;
}
@@ -3642,6 +3740,11 @@
AnalysisOptionsImpl _options = new AnalysisOptionsImpl();
/**
+ * A flag indicating whether this context is disposed.
+ */
+ bool _disposed = false;
+
+ /**
* A cache of content used to override the default content of a source.
*/
ContentCache _contentCache = new ContentCache();
@@ -3712,12 +3815,14 @@
_cache = new AnalysisCache(AnalysisOptionsImpl.DEFAULT_CACHE_SIZE, new AnalysisContextImpl_ContextRetentionPolicy(this));
}
+ @override
void addSourceInfo(Source source, SourceEntry info) {
// This implementation assumes that the access to the cache does not need to be synchronized
// because no other object can have access to this context while this method is being invoked.
_cache.put(source, info);
}
+ @override
void applyChanges(ChangeSet changeSet) {
if (changeSet.isEmpty) {
return;
@@ -3728,36 +3833,36 @@
//
List<Source> removedSources = new List<Source>.from(changeSet.removedSources);
for (SourceContainer container in changeSet.removedContainers) {
- addSourcesInContainer(removedSources, container);
+ _addSourcesInContainer(removedSources, container);
}
//
// Then determine which cached results are no longer valid.
//
bool addedDartSource = false;
for (Source source in changeSet.addedSources) {
- if (sourceAvailable(source)) {
+ if (_sourceAvailable(source)) {
addedDartSource = true;
}
}
for (Source source in changeSet.changedSources) {
- sourceChanged(source);
+ _sourceChanged(source);
}
for (Source source in removedSources) {
- sourceRemoved(source);
+ _sourceRemoved(source);
}
if (addedDartSource) {
// TODO(brianwilkerson) This is hugely inefficient, but we need to re-analyze any libraries
// that might have been referencing the not-yet-existing source that was just added. Longer
// term we need to keep track of which libraries are referencing non-existing sources and
// only re-analyze those libraries.
- logInformation("Added Dart sources, invalidating all resolution information");
+ _logInformation("Added Dart sources, invalidating all resolution information");
for (MapEntry<Source, SourceEntry> mapEntry in _cache.entrySet()) {
Source source = mapEntry.getKey();
SourceEntry sourceEntry = mapEntry.getValue();
if (!source.isInSystemLibrary && sourceEntry is DartEntry) {
DartEntry dartEntry = sourceEntry;
DartEntryImpl dartCopy = dartEntry.writableCopy;
- removeFromParts(source, dartEntry);
+ _removeFromParts(source, dartEntry);
dartCopy.invalidateAllResolutionInformation();
mapEntry.setValue(dartCopy);
SourcePriority priority = SourcePriority.UNKNOWN;
@@ -3773,6 +3878,7 @@
}
}
+ @override
String computeDocumentationComment(Element element) {
if (element == null) {
return null;
@@ -3808,39 +3914,40 @@
return null;
}
+ @override
List<AnalysisError> computeErrors(Source source) {
bool enableHints = _options.hint;
- SourceEntry sourceEntry = getReadableSourceEntry(source);
+ SourceEntry sourceEntry = _getReadableSourceEntry(source);
if (sourceEntry is DartEntry) {
List<AnalysisError> errors = new List<AnalysisError>();
try {
DartEntry dartEntry = sourceEntry;
- ListUtilities.addAll(errors, getDartScanData(source, dartEntry, DartEntry.SCAN_ERRORS));
- dartEntry = getReadableDartEntry(source);
- ListUtilities.addAll(errors, getDartParseData(source, dartEntry, DartEntry.PARSE_ERRORS));
- dartEntry = getReadableDartEntry(source);
+ ListUtilities.addAll(errors, _getDartScanData(source, dartEntry, DartEntry.SCAN_ERRORS));
+ dartEntry = _getReadableDartEntry(source);
+ ListUtilities.addAll(errors, _getDartParseData(source, dartEntry, DartEntry.PARSE_ERRORS));
+ dartEntry = _getReadableDartEntry(source);
if (identical(dartEntry.getValue(DartEntry.SOURCE_KIND), SourceKind.LIBRARY)) {
- ListUtilities.addAll(errors, getDartResolutionData(source, source, dartEntry, DartEntry.RESOLUTION_ERRORS));
- dartEntry = getReadableDartEntry(source);
- ListUtilities.addAll(errors, getDartVerificationData(source, source, dartEntry, DartEntry.VERIFICATION_ERRORS));
+ ListUtilities.addAll(errors, _getDartResolutionData(source, source, dartEntry, DartEntry.RESOLUTION_ERRORS));
+ dartEntry = _getReadableDartEntry(source);
+ ListUtilities.addAll(errors, _getDartVerificationData(source, source, dartEntry, DartEntry.VERIFICATION_ERRORS));
if (enableHints) {
- dartEntry = getReadableDartEntry(source);
- ListUtilities.addAll(errors, getDartHintData(source, source, dartEntry, DartEntry.HINTS));
+ dartEntry = _getReadableDartEntry(source);
+ ListUtilities.addAll(errors, _getDartHintData(source, source, dartEntry, DartEntry.HINTS));
}
} else {
List<Source> libraries = getLibrariesContaining(source);
for (Source librarySource in libraries) {
- ListUtilities.addAll(errors, getDartResolutionData(source, librarySource, dartEntry, DartEntry.RESOLUTION_ERRORS));
- dartEntry = getReadableDartEntry(source);
- ListUtilities.addAll(errors, getDartVerificationData(source, librarySource, dartEntry, DartEntry.VERIFICATION_ERRORS));
+ ListUtilities.addAll(errors, _getDartResolutionData(source, librarySource, dartEntry, DartEntry.RESOLUTION_ERRORS));
+ dartEntry = _getReadableDartEntry(source);
+ ListUtilities.addAll(errors, _getDartVerificationData(source, librarySource, dartEntry, DartEntry.VERIFICATION_ERRORS));
if (enableHints) {
- dartEntry = getReadableDartEntry(source);
- ListUtilities.addAll(errors, getDartHintData(source, librarySource, dartEntry, DartEntry.HINTS));
+ dartEntry = _getReadableDartEntry(source);
+ ListUtilities.addAll(errors, _getDartHintData(source, librarySource, dartEntry, DartEntry.HINTS));
}
}
}
} on ObsoleteSourceAnalysisException catch (exception) {
- AnalysisEngine.instance.logger.logInformation3("Could not compute errors", exception);
+ AnalysisEngine.instance.logger.logInformation2("Could not compute errors", exception);
}
if (errors.isEmpty) {
return AnalysisError.NO_ERRORS;
@@ -3849,27 +3956,31 @@
} else if (sourceEntry is HtmlEntry) {
HtmlEntry htmlEntry = sourceEntry;
try {
- return getHtmlResolutionData2(source, htmlEntry, HtmlEntry.RESOLUTION_ERRORS);
+ return _getHtmlResolutionData2(source, htmlEntry, HtmlEntry.RESOLUTION_ERRORS);
} on ObsoleteSourceAnalysisException catch (exception) {
- AnalysisEngine.instance.logger.logInformation3("Could not compute errors", exception);
+ AnalysisEngine.instance.logger.logInformation2("Could not compute errors", exception);
}
}
return AnalysisError.NO_ERRORS;
}
- List<Source> computeExportedLibraries(Source source) => getDartDependencyData2(source, DartEntry.EXPORTED_LIBRARIES, Source.EMPTY_ARRAY);
+ @override
+ List<Source> computeExportedLibraries(Source source) => _getDartDependencyData2(source, DartEntry.EXPORTED_LIBRARIES, Source.EMPTY_ARRAY);
- HtmlElement computeHtmlElement(Source source) => getHtmlResolutionData(source, HtmlEntry.ELEMENT, null);
+ @override
+ HtmlElement computeHtmlElement(Source source) => _getHtmlResolutionData(source, HtmlEntry.ELEMENT, null);
- List<Source> computeImportedLibraries(Source source) => getDartDependencyData2(source, DartEntry.IMPORTED_LIBRARIES, Source.EMPTY_ARRAY);
+ @override
+ List<Source> computeImportedLibraries(Source source) => _getDartDependencyData2(source, DartEntry.IMPORTED_LIBRARIES, Source.EMPTY_ARRAY);
+ @override
SourceKind computeKindOf(Source source) {
- SourceEntry sourceEntry = getReadableSourceEntry(source);
+ SourceEntry sourceEntry = _getReadableSourceEntry(source);
if (sourceEntry == null) {
return SourceKind.UNKNOWN;
} else if (sourceEntry is DartEntry) {
try {
- return getDartParseData(source, sourceEntry, DartEntry.SOURCE_KIND);
+ return _getDartParseData(source, sourceEntry, DartEntry.SOURCE_KIND);
} on AnalysisException catch (exception) {
return SourceKind.UNKNOWN;
}
@@ -3877,28 +3988,31 @@
return sourceEntry.kind;
}
- LibraryElement computeLibraryElement(Source source) => getDartResolutionData2(source, source, DartEntry.ELEMENT, null);
+ @override
+ LibraryElement computeLibraryElement(Source source) => _getDartResolutionData2(source, source, DartEntry.ELEMENT, null);
+ @override
LineInfo computeLineInfo(Source source) {
- SourceEntry sourceEntry = getReadableSourceEntry(source);
+ SourceEntry sourceEntry = _getReadableSourceEntry(source);
try {
if (sourceEntry is HtmlEntry) {
- return getHtmlParseData(source, SourceEntry.LINE_INFO, null);
+ return _getHtmlParseData(source, SourceEntry.LINE_INFO, null);
} else if (sourceEntry is DartEntry) {
- return getDartScanData2(source, SourceEntry.LINE_INFO, null);
+ return _getDartScanData2(source, SourceEntry.LINE_INFO, null);
}
} on ObsoleteSourceAnalysisException catch (exception) {
- AnalysisEngine.instance.logger.logInformation3("Could not compute ${SourceEntry.LINE_INFO.toString()}", exception);
+ AnalysisEngine.instance.logger.logInformation2("Could not compute ${SourceEntry.LINE_INFO.toString()}", exception);
}
return null;
}
+ @override
ResolvableCompilationUnit computeResolvableCompilationUnit(Source source) {
- DartEntry dartEntry = getReadableDartEntry(source);
+ DartEntry dartEntry = _getReadableDartEntry(source);
if (dartEntry == null) {
throw new AnalysisException.con1("computeResolvableCompilationUnit for non-Dart: ${source.fullName}");
}
- dartEntry = cacheDartParseData(source, dartEntry, DartEntry.PARSED_UNIT);
+ dartEntry = _cacheDartParseData(source, dartEntry, DartEntry.PARSED_UNIT);
DartEntryImpl dartCopy = dartEntry.writableCopy;
CompilationUnit unit = dartCopy.resolvableCompilationUnit;
if (unit == null) {
@@ -3908,6 +4022,12 @@
return new ResolvableCompilationUnit(dartCopy.modificationTime, unit);
}
+ @override
+ void dispose() {
+ _disposed = true;
+ }
+
+ @override
bool exists(Source source) {
if (source == null) {
return false;
@@ -3918,8 +4038,10 @@
return source.exists();
}
+ @override
AnalysisContext extractContext(SourceContainer container) => extractContextInto(container, AnalysisEngine.instance.createAnalysisContext() as InternalAnalysisContext);
+ @override
InternalAnalysisContext extractContextInto(SourceContainer container, InternalAnalysisContext newContext) {
List<Source> sourcesToRemove = new List<Source>();
// Move sources in the specified directory to the new context
@@ -3933,8 +4055,10 @@
return newContext;
}
+ @override
AnalysisOptions get analysisOptions => _options;
+ @override
CompilationUnitElement getCompilationUnitElement(Source unitSource, Source librarySource) {
LibraryElement libraryElement = getLibraryElement(librarySource);
if (libraryElement != null) {
@@ -3953,6 +4077,7 @@
return null;
}
+ @override
TimestampedData<String> getContents(Source source) {
String contents = _contentCache.getContents(source);
if (contents != null) {
@@ -3961,20 +4086,12 @@
return source.contents;
}
- void getContentsToReceiver(Source source, Source_ContentReceiver receiver) {
- String contents = _contentCache.getContents(source);
- if (contents != null) {
- receiver.accept(contents, _contentCache.getModificationStamp(source));
- return;
- }
- source.getContentsToReceiver(receiver);
- }
-
+ @override
Element getElement(ElementLocation location) {
// TODO(brianwilkerson) This should not be a "get" method.
try {
List<String> components = (location as ElementLocationImpl).components;
- Source librarySource = computeSourceFromEncoding(components[0]);
+ Source librarySource = _computeSourceFromEncoding(components[0]);
ElementImpl element = computeLibraryElement(librarySource) as ElementImpl;
for (int i = 1; i < components.length; i++) {
if (element == null) {
@@ -3988,8 +4105,9 @@
}
}
+ @override
AnalysisErrorInfo getErrors(Source source) {
- SourceEntry sourceEntry = getReadableSourceEntry(source);
+ SourceEntry sourceEntry = _getReadableSourceEntryOrNull(source);
if (sourceEntry is DartEntry) {
DartEntry dartEntry = sourceEntry;
return new AnalysisErrorInfoImpl(dartEntry.allErrors, dartEntry.getValue(SourceEntry.LINE_INFO));
@@ -4000,14 +4118,16 @@
return new AnalysisErrorInfoImpl(AnalysisError.NO_ERRORS, null);
}
+ @override
HtmlElement getHtmlElement(Source source) {
- SourceEntry sourceEntry = getReadableSourceEntry(source);
+ SourceEntry sourceEntry = _getReadableSourceEntryOrNull(source);
if (sourceEntry is HtmlEntry) {
return sourceEntry.getValue(HtmlEntry.ELEMENT);
}
return null;
}
+ @override
List<Source> getHtmlFilesReferencing(Source source) {
SourceKind sourceKind = getKindOf(source);
if (sourceKind == null) {
@@ -4022,7 +4142,7 @@
SourceEntry sourceEntry = entry.getValue();
if (identical(sourceEntry.kind, SourceKind.HTML)) {
List<Source> referencedLibraries = (sourceEntry as HtmlEntry).getValue(HtmlEntry.REFERENCED_LIBRARIES);
- if (containsAny(referencedLibraries, librarySources)) {
+ if (_containsAny(referencedLibraries, librarySources)) {
htmlSources.add(entry.getKey());
}
}
@@ -4036,16 +4156,19 @@
return new List.from(htmlSources);
}
- List<Source> get htmlSources => getSources(SourceKind.HTML);
+ @override
+ List<Source> get htmlSources => _getSources(SourceKind.HTML);
+ @override
SourceKind getKindOf(Source source) {
- SourceEntry sourceEntry = getReadableSourceEntry(source);
+ SourceEntry sourceEntry = _getReadableSourceEntryOrNull(source);
if (sourceEntry == null) {
return SourceKind.UNKNOWN;
}
return sourceEntry.kind;
}
+ @override
List<Source> get launchableClientLibrarySources {
// TODO(brianwilkerson) This needs to filter out libraries that do not reference dart:html,
// either directly or indirectly.
@@ -4062,6 +4185,7 @@
return new List.from(sources);
}
+ @override
List<Source> get launchableServerLibrarySources {
// TODO(brianwilkerson) This needs to filter out libraries that reference dart:html, either
// directly or indirectly.
@@ -4078,23 +4202,25 @@
return new List.from(sources);
}
+ @override
List<Source> getLibrariesContaining(Source source) {
- DartEntry dartEntry = getReadableDartEntry(source);
- if (dartEntry == null) {
- return Source.EMPTY_ARRAY;
+ SourceEntry sourceEntry = _getReadableSourceEntryOrNull(source);
+ if (sourceEntry is DartEntry) {
+ return sourceEntry.getValue(DartEntry.CONTAINING_LIBRARIES);
}
- return dartEntry.getValue(DartEntry.CONTAINING_LIBRARIES);
+ return Source.EMPTY_ARRAY;
}
+ @override
List<Source> getLibrariesDependingOn(Source librarySource) {
List<Source> dependentLibraries = new List<Source>();
for (MapEntry<Source, SourceEntry> entry in _cache.entrySet()) {
SourceEntry sourceEntry = entry.getValue();
if (identical(sourceEntry.kind, SourceKind.LIBRARY)) {
- if (contains((sourceEntry as DartEntry).getValue(DartEntry.EXPORTED_LIBRARIES), librarySource)) {
+ if (_contains((sourceEntry as DartEntry).getValue(DartEntry.EXPORTED_LIBRARIES), librarySource)) {
dependentLibraries.add(entry.getKey());
}
- if (contains((sourceEntry as DartEntry).getValue(DartEntry.IMPORTED_LIBRARIES), librarySource)) {
+ if (_contains((sourceEntry as DartEntry).getValue(DartEntry.IMPORTED_LIBRARIES), librarySource)) {
dependentLibraries.add(entry.getKey());
}
}
@@ -4105,24 +4231,28 @@
return new List.from(dependentLibraries);
}
+ @override
LibraryElement getLibraryElement(Source source) {
- SourceEntry sourceEntry = getReadableSourceEntry(source);
+ SourceEntry sourceEntry = _getReadableSourceEntryOrNull(source);
if (sourceEntry is DartEntry) {
return sourceEntry.getValue(DartEntry.ELEMENT);
}
return null;
}
- List<Source> get librarySources => getSources(SourceKind.LIBRARY);
+ @override
+ List<Source> get librarySources => _getSources(SourceKind.LIBRARY);
+ @override
LineInfo getLineInfo(Source source) {
- SourceEntry sourceEntry = getReadableSourceEntry(source);
+ SourceEntry sourceEntry = _getReadableSourceEntryOrNull(source);
if (sourceEntry != null) {
return sourceEntry.getValue(SourceEntry.LINE_INFO);
}
return null;
}
+ @override
int getModificationStamp(Source source) {
int stamp = _contentCache.getModificationStamp(source);
if (stamp != null) {
@@ -4131,11 +4261,12 @@
return source.modificationStamp;
}
+ @override
Namespace getPublicNamespace(LibraryElement library) {
// TODO(brianwilkerson) Rename this to not start with 'get'. Note that this is not part of the
// API of the interface.
Source source = library.definingCompilationUnit.source;
- DartEntry dartEntry = getReadableDartEntry(source);
+ DartEntry dartEntry = _getReadableDartEntry(source);
if (dartEntry == null) {
return null;
}
@@ -4146,13 +4277,13 @@
if (namespace == null) {
NamespaceBuilder builder = new NamespaceBuilder();
namespace = builder.createPublicNamespaceForLibrary(library);
- dartEntry = getReadableDartEntry(source);
+ dartEntry = _getReadableDartEntry(source);
if (dartEntry == null) {
AnalysisEngine.instance.logger.logError2("Could not compute the public namespace for ${library.source.fullName}", new AnalysisException.con1("A Dart file became a non-Dart file: ${source.fullName}"));
return null;
}
if (identical(dartEntry.getValue(DartEntry.ELEMENT), library)) {
- DartEntryImpl dartCopy = getReadableDartEntry(source).writableCopy;
+ DartEntryImpl dartCopy = _getReadableDartEntry(source).writableCopy;
dartCopy.setValue(DartEntry.PUBLIC_NAMESPACE, namespace);
_cache.put(source, dartCopy);
}
@@ -4160,10 +4291,11 @@
return namespace;
}
+ @override
Namespace getPublicNamespace2(Source source) {
// TODO(brianwilkerson) Rename this to not start with 'get'. Note that this is not part of the
// API of the interface.
- DartEntry dartEntry = getReadableDartEntry(source);
+ DartEntry dartEntry = _getReadableDartEntry(source);
if (dartEntry == null) {
return null;
}
@@ -4175,12 +4307,12 @@
}
NamespaceBuilder builder = new NamespaceBuilder();
namespace = builder.createPublicNamespaceForLibrary(library);
- dartEntry = getReadableDartEntry(source);
+ dartEntry = _getReadableDartEntry(source);
if (dartEntry == null) {
throw new AnalysisException.con1("A Dart file became a non-Dart file: ${source.fullName}");
}
if (identical(dartEntry.getValue(DartEntry.ELEMENT), library)) {
- DartEntryImpl dartCopy = getReadableDartEntry(source).writableCopy;
+ DartEntryImpl dartCopy = _getReadableDartEntry(source).writableCopy;
dartCopy.setValue(DartEntry.PUBLIC_NAMESPACE, namespace);
_cache.put(source, dartCopy);
}
@@ -4188,6 +4320,7 @@
return namespace;
}
+ @override
List<Source> get refactoringUnsafeSources {
List<Source> sources = new List<Source>();
for (MapEntry<Source, SourceEntry> entry in _cache.entrySet()) {
@@ -4201,6 +4334,7 @@
return new List.from(sources);
}
+ @override
CompilationUnit getResolvedCompilationUnit(Source unitSource, LibraryElement library) {
if (library == null) {
return null;
@@ -4208,16 +4342,18 @@
return getResolvedCompilationUnit2(unitSource, library.source);
}
+ @override
CompilationUnit getResolvedCompilationUnit2(Source unitSource, Source librarySource) {
- SourceEntry sourceEntry = getReadableSourceEntry(unitSource);
+ SourceEntry sourceEntry = _getReadableSourceEntryOrNull(unitSource);
if (sourceEntry is DartEntry) {
return sourceEntry.getValueInLibrary(DartEntry.RESOLVED_UNIT, librarySource);
}
return null;
}
+ @override
ht.HtmlUnit getResolvedHtmlUnit(Source htmlSource) {
- SourceEntry sourceEntry = getReadableSourceEntry(htmlSource);
+ SourceEntry sourceEntry = _getReadableSourceEntryOrNull(htmlSource);
if (sourceEntry is HtmlEntry) {
HtmlEntry htmlEntry = sourceEntry;
return htmlEntry.getValue(HtmlEntry.RESOLVED_UNIT);
@@ -4225,6 +4361,7 @@
return null;
}
+ @override
SourceFactory get sourceFactory => _sourceFactory;
/**
@@ -4241,17 +4378,18 @@
// Look for priority sources that need to be analyzed.
//
for (Source source in _priorityOrder) {
- getSourcesNeedingProcessing2(source, _cache.get(source), true, hintsEnabled, sources);
+ _getSourcesNeedingProcessing(source, _cache.get(source), true, hintsEnabled, sources);
}
//
// Look for non-priority sources that need to be analyzed.
//
for (MapEntry<Source, SourceEntry> entry in _cache.entrySet()) {
- getSourcesNeedingProcessing2(entry.getKey(), entry.getValue(), false, hintsEnabled, sources);
+ _getSourcesNeedingProcessing(entry.getKey(), entry.getValue(), false, hintsEnabled, sources);
}
return new List<Source>.from(sources);
}
+ @override
AnalysisContentStatistics get statistics {
AnalysisContentStatisticsImpl statistics = new AnalysisContentStatisticsImpl();
for (MapEntry<Source, SourceEntry> mapEntry in _cache.entrySet()) {
@@ -4294,23 +4432,26 @@
return statistics;
}
+ @override
TypeProvider get typeProvider {
Source coreSource = sourceFactory.forUri(DartSdk.DART_CORE);
return new TypeProviderImpl(computeLibraryElement(coreSource));
}
+ @override
TimestampedData<CompilationUnit> internalResolveCompilationUnit(Source unitSource, LibraryElement libraryElement) {
- DartEntry dartEntry = getReadableDartEntry(unitSource);
+ DartEntry dartEntry = _getReadableDartEntry(unitSource);
if (dartEntry == null) {
throw new AnalysisException.con1("internalResolveCompilationUnit invoked for non-Dart file: ${unitSource.fullName}");
}
Source librarySource = libraryElement.source;
- dartEntry = cacheDartResolutionData(unitSource, librarySource, dartEntry, DartEntry.RESOLVED_UNIT);
+ dartEntry = _cacheDartResolutionData(unitSource, librarySource, dartEntry, DartEntry.RESOLVED_UNIT);
return new TimestampedData<CompilationUnit>(dartEntry.modificationTime, dartEntry.getValueInLibrary(DartEntry.RESOLVED_UNIT, librarySource));
}
+ @override
bool isClientLibrary(Source librarySource) {
- SourceEntry sourceEntry = getReadableSourceEntry(librarySource);
+ SourceEntry sourceEntry = _getReadableSourceEntry(librarySource);
if (sourceEntry is DartEntry) {
DartEntry dartEntry = sourceEntry;
return dartEntry.getValue(DartEntry.IS_CLIENT) && dartEntry.getValue(DartEntry.IS_LAUNCHABLE);
@@ -4318,8 +4459,12 @@
return false;
}
+ @override
+ bool get isDisposed => _disposed;
+
+ @override
bool isServerLibrary(Source librarySource) {
- SourceEntry sourceEntry = getReadableSourceEntry(librarySource);
+ SourceEntry sourceEntry = _getReadableSourceEntry(librarySource);
if (sourceEntry is DartEntry) {
DartEntry dartEntry = sourceEntry;
return !dartEntry.getValue(DartEntry.IS_CLIENT) && dartEntry.getValue(DartEntry.IS_LAUNCHABLE);
@@ -4327,6 +4472,7 @@
return false;
}
+ @override
void mergeContext(AnalysisContext context) {
if (context is InstrumentedAnalysisContextImpl) {
context = (context as InstrumentedAnalysisContextImpl).basis;
@@ -4337,7 +4483,7 @@
// TODO(brianwilkerson) This does not lock against the other context's cacheLock.
for (MapEntry<Source, SourceEntry> entry in (context as AnalysisContextImpl)._cache.entrySet()) {
Source newSource = entry.getKey();
- SourceEntry existingEntry = getReadableSourceEntry(newSource);
+ SourceEntry existingEntry = _getReadableSourceEntry(newSource);
if (existingEntry == null) {
// TODO(brianwilkerson) Decide whether we really need to copy the info.
_cache.put(newSource, entry.getValue().writableCopy);
@@ -4346,40 +4492,44 @@
}
}
- CompilationUnit parseCompilationUnit(Source source) => getDartParseData2(source, DartEntry.PARSED_UNIT, null);
+ @override
+ CompilationUnit parseCompilationUnit(Source source) => _getDartParseData2(source, DartEntry.PARSED_UNIT, null);
- ht.HtmlUnit parseHtmlUnit(Source source) => getHtmlParseData(source, HtmlEntry.PARSED_UNIT, null);
+ @override
+ ht.HtmlUnit parseHtmlUnit(Source source) => _getHtmlParseData(source, HtmlEntry.PARSED_UNIT, null);
+ @override
AnalysisResult performAnalysisTask() {
int getStart = JavaSystem.currentTimeMillis();
AnalysisTask task = nextAnalysisTask;
int getEnd = JavaSystem.currentTimeMillis();
- if (task == null && validateCacheConsistency()) {
+ if (task == null && _validateCacheConsistency()) {
task = nextAnalysisTask;
}
if (task == null) {
- return new AnalysisResult(getChangeNotices(true), getEnd - getStart, null, -1);
+ return new AnalysisResult(_getChangeNotices(true), getEnd - getStart, null, -1);
}
String taskDescriptor = task.toString();
if (_recentTasks.add(taskDescriptor)) {
- logInformation("Performing task: ${taskDescriptor}");
+ _logInformation("Performing task: ${taskDescriptor}");
} else {
- logInformation("*** Performing repeated task: ${taskDescriptor}");
+ _logInformation("*** Performing repeated task: ${taskDescriptor}");
}
int performStart = JavaSystem.currentTimeMillis();
try {
task.perform(_resultRecorder);
} on ObsoleteSourceAnalysisException catch (exception) {
- AnalysisEngine.instance.logger.logInformation3("Could not perform analysis task: ${taskDescriptor}", exception);
+ AnalysisEngine.instance.logger.logInformation2("Could not perform analysis task: ${taskDescriptor}", exception);
} on AnalysisException catch (exception) {
if (exception.cause is! JavaIOException) {
AnalysisEngine.instance.logger.logError2("Internal error while performing the task: ${task}", exception);
}
}
int performEnd = JavaSystem.currentTimeMillis();
- return new AnalysisResult(getChangeNotices(false), getEnd - getStart, task.runtimeType.toString(), performEnd - performStart);
+ return new AnalysisResult(_getChangeNotices(false), getEnd - getStart, task.runtimeType.toString(), performEnd - performStart);
}
+ @override
void recordLibraryElements(Map<Source, LibraryElement> elementMap) {
Source htmlSource = _sourceFactory.forUri(DartSdk.DART_HTML);
for (MapEntry<Source, LibraryElement> entry in getMapEntrySet(elementMap)) {
@@ -4388,15 +4538,16 @@
//
// Cache the element in the library's info.
//
- DartEntry dartEntry = getReadableDartEntry(librarySource);
+ DartEntry dartEntry = _getReadableDartEntry(librarySource);
if (dartEntry != null) {
DartEntryImpl dartCopy = dartEntry.writableCopy;
- recordElementData(dartEntry, dartCopy, library, library.source, htmlSource);
+ _recordElementData(dartEntry, dartCopy, library, library.source, htmlSource);
_cache.put(librarySource, dartCopy);
}
}
}
+ @override
CompilationUnit resolveCompilationUnit(Source unitSource, LibraryElement library) {
if (library == null) {
return null;
@@ -4404,13 +4555,16 @@
return resolveCompilationUnit2(unitSource, library.source);
}
- CompilationUnit resolveCompilationUnit2(Source unitSource, Source librarySource) => getDartResolutionData2(unitSource, librarySource, DartEntry.RESOLVED_UNIT, null);
+ @override
+ CompilationUnit resolveCompilationUnit2(Source unitSource, Source librarySource) => _getDartResolutionData2(unitSource, librarySource, DartEntry.RESOLVED_UNIT, null);
+ @override
ht.HtmlUnit resolveHtmlUnit(Source htmlSource) {
computeHtmlElement(htmlSource);
return parseHtmlUnit(htmlSource);
}
+ @override
void set analysisOptions(AnalysisOptions options) {
bool needsRecompute = this._options.analyzeFunctionBodies != options.analyzeFunctionBodies || this._options.dart2jsHint != options.dart2jsHint || (this._options.hint && !options.hint) || this._options.preserveComments != options.preserveComments;
int cacheSize = options.cacheSize;
@@ -4435,10 +4589,11 @@
this._options.incremental = options.incremental;
this._options.preserveComments = options.preserveComments;
if (needsRecompute) {
- invalidateAllResolutionInformation();
+ _invalidateAllResolutionInformation();
}
}
+ @override
void set analysisPriorityOrder(List<Source> sources) {
if (sources == null || sources.isEmpty) {
_priorityOrder = Source.EMPTY_ARRAY;
@@ -4461,15 +4616,16 @@
}
}
+ @override
void setChangedContents(Source source, String contents, int offset, int oldLength, int newLength) {
_recentTasks.clear();
String originalContents = _contentCache.setContents(source, contents);
if (contents != null) {
if (contents != originalContents) {
if (_options.incremental) {
- _incrementalAnalysisCache = IncrementalAnalysisCache.update(_incrementalAnalysisCache, source, originalContents, contents, offset, oldLength, newLength, getReadableSourceEntry(source));
+ _incrementalAnalysisCache = IncrementalAnalysisCache.update(_incrementalAnalysisCache, source, originalContents, contents, offset, oldLength, newLength, _getReadableSourceEntry(source));
}
- sourceChanged(source);
+ _sourceChanged(source);
SourceEntry sourceEntry = _cache.get(source);
if (sourceEntry != null) {
SourceEntryImpl sourceCopy = sourceEntry.writableCopy;
@@ -4480,17 +4636,18 @@
}
} else if (originalContents != null) {
_incrementalAnalysisCache = IncrementalAnalysisCache.clear(_incrementalAnalysisCache, source);
- sourceChanged(source);
+ _sourceChanged(source);
}
}
+ @override
void setContents(Source source, String contents) {
_recentTasks.clear();
String originalContents = _contentCache.setContents(source, contents);
if (contents != null) {
if (contents != originalContents) {
_incrementalAnalysisCache = IncrementalAnalysisCache.clear(_incrementalAnalysisCache, source);
- sourceChanged(source);
+ _sourceChanged(source);
SourceEntry sourceEntry = _cache.get(source);
if (sourceEntry != null) {
SourceEntryImpl sourceCopy = sourceEntry.writableCopy;
@@ -4501,10 +4658,11 @@
}
} else if (originalContents != null) {
_incrementalAnalysisCache = IncrementalAnalysisCache.clear(_incrementalAnalysisCache, source);
- sourceChanged(source);
+ _sourceChanged(source);
}
}
+ @override
void set sourceFactory(SourceFactory factory) {
if (identical(_sourceFactory, factory)) {
return;
@@ -4516,7 +4674,7 @@
}
factory.context = this;
_sourceFactory = factory;
- invalidateAllResolutionInformation();
+ _invalidateAllResolutionInformation();
}
/**
@@ -4542,7 +4700,7 @@
//
// The resolved libraries should only be null if an exception was thrown during resolution.
//
- unitEntry = getReadableDartEntry(unitSource);
+ unitEntry = _getReadableDartEntry(unitSource);
if (unitEntry == null) {
throw new AnalysisException.con1("A Dart file became a non-Dart file: ${unitSource.fullName}");
}
@@ -4556,7 +4714,7 @@
}
return dartCopy;
}
- if (allModificationTimesMatch(resolvedLibraries)) {
+ if (_allModificationTimesMatch(resolvedLibraries)) {
Source htmlSource = sourceFactory.forUri(DartSdk.DART_HTML);
RecordingErrorListener errorListener = resolver.errorListener;
for (Library library in resolvedLibraries) {
@@ -4569,8 +4727,8 @@
int sourceTime = getModificationStamp(source);
if (dartEntry.modificationTime != sourceTime) {
// The source has changed without the context being notified. Simulate notification.
- sourceChanged(source);
- dartEntry = getReadableDartEntry(source);
+ _sourceChanged(source);
+ dartEntry = _getReadableDartEntry(source);
if (dartEntry == null) {
throw new AnalysisException.con1("A Dart file became a non-Dart file: ${source.fullName}");
}
@@ -4582,7 +4740,7 @@
dartCopy.setValueInLibrary(DartEntry.RESOLVED_UNIT, librarySource, unit);
dartCopy.setValueInLibrary(DartEntry.RESOLUTION_ERRORS, librarySource, errors);
if (source == librarySource) {
- recordElementData(dartEntry, dartCopy, library.libraryElement, librarySource, htmlSource);
+ _recordElementData(dartEntry, dartCopy, library.libraryElement, librarySource, htmlSource);
}
_cache.storedAst(source);
} else {
@@ -4597,7 +4755,7 @@
if (source == unitSource) {
unitEntry = dartCopy;
}
- ChangeNoticeImpl notice = getNotice(source);
+ ChangeNoticeImpl notice = _getNotice(source);
notice.compilationUnit = unit;
notice.setErrors(dartCopy.allErrors, lineInfo);
}
@@ -4607,10 +4765,10 @@
writer.println("Library resolution results discarded for");
for (Library library in resolvedLibraries) {
for (Source source in library.compilationUnitSources) {
- DartEntry dartEntry = getReadableDartEntry(source);
+ DartEntry dartEntry = _getReadableDartEntry(source);
if (dartEntry != null) {
int resultTime = library.getModificationTime(source);
- writer.println(" ${debuggingString(source)}; sourceTime = ${getModificationStamp(source)}, resultTime = ${resultTime}, cacheTime = ${dartEntry.modificationTime}");
+ writer.println(" ${_debuggingString(source)}; sourceTime = ${getModificationStamp(source)}, resultTime = ${resultTime}, cacheTime = ${dartEntry.modificationTime}");
DartEntryImpl dartCopy = dartEntry.writableCopy;
if (thrownException == null || resultTime >= 0) {
//
@@ -4633,18 +4791,18 @@
unitEntry = dartCopy;
}
} else {
- writer.println(" ${debuggingString(source)}; sourceTime = ${getModificationStamp(source)}, no entry");
+ writer.println(" ${_debuggingString(source)}; sourceTime = ${getModificationStamp(source)}, no entry");
}
}
}
- logInformation(writer.toString());
+ _logInformation(writer.toString());
}
}
if (thrownException != null) {
throw thrownException;
}
if (unitEntry == null) {
- unitEntry = getReadableDartEntry(unitSource);
+ unitEntry = _getReadableDartEntry(unitSource);
if (unitEntry == null) {
throw new AnalysisException.con1("A Dart file became a non-Dart file: ${unitSource.fullName}");
}
@@ -4658,7 +4816,7 @@
*
* @param source the source whose AST structure was accessed
*/
- void accessedAst(Source source) {
+ void _accessedAst(Source source) {
_cache.accessedAst(source);
}
@@ -4670,7 +4828,7 @@
* @param sources the list to which sources are to be added
* @param container the source container containing the sources to be added to the list
*/
- void addSourcesInContainer(List<Source> sources, SourceContainer container) {
+ void _addSourcesInContainer(List<Source> sources, SourceContainer container) {
for (MapEntry<Source, SourceEntry> entry in _cache.entrySet()) {
Source source = entry.getKey();
if (container.contains(source)) {
@@ -4688,11 +4846,11 @@
* @throws AnalysisException if any of the modification times could not be determined (this should
* not happen)
*/
- bool allModificationTimesMatch(Set<Library> resolvedLibraries) {
+ bool _allModificationTimesMatch(Set<Library> resolvedLibraries) {
bool allTimesMatch = true;
for (Library library in resolvedLibraries) {
for (Source source in library.compilationUnitSources) {
- DartEntry dartEntry = getReadableDartEntry(source);
+ DartEntry dartEntry = _getReadableDartEntry(source);
if (dartEntry == null) {
// This shouldn't be possible because we should never have performed the task if the
// source didn't represent a Dart file, but check to be safe.
@@ -4702,7 +4860,7 @@
int resultTime = library.getModificationTime(source);
if (sourceTime != resultTime) {
// The source has changed without the context being notified. Simulate notification.
- sourceChanged(source);
+ _sourceChanged(source);
allTimesMatch = false;
}
}
@@ -4725,7 +4883,7 @@
* @throws AnalysisException if data could not be returned because the source could not be
* resolved
*/
- DartEntry cacheDartDependencyData(Source source, DartEntry dartEntry, DataDescriptor descriptor) {
+ DartEntry _cacheDartDependencyData(Source source, DartEntry dartEntry, DataDescriptor descriptor) {
//
// Check to see whether we already have the information being requested.
//
@@ -4735,8 +4893,12 @@
// If not, compute the information. Unless the modification date of the source continues to
// change, this loop will eventually terminate.
//
- dartEntry = cacheDartParseData(source, dartEntry, DartEntry.PARSED_UNIT);
- dartEntry = new ResolveDartDependenciesTask(this, source, dartEntry.modificationTime, dartEntry.anyParsedCompilationUnit).perform(_resultRecorder) as DartEntry;
+ dartEntry = _cacheDartParseData(source, dartEntry, DartEntry.PARSED_UNIT);
+ CompilationUnit unit = dartEntry.anyParsedCompilationUnit;
+ if (unit == null) {
+ throw new AnalysisException.con2("Could not cache Dart dependency data: no parse unit", dartEntry.exception);
+ }
+ dartEntry = new ResolveDartDependenciesTask(this, source, dartEntry.modificationTime, unit).perform(_resultRecorder) as DartEntry;
state = dartEntry.getState(descriptor);
}
return dartEntry;
@@ -4755,7 +4917,7 @@
* @return a cache entry containing the required data
* @throws AnalysisException if data could not be returned because the source could not be parsed
*/
- DartEntry cacheDartHintData(Source unitSource, Source librarySource, DartEntry dartEntry, DataDescriptor descriptor) {
+ DartEntry _cacheDartHintData(Source unitSource, Source librarySource, DartEntry dartEntry, DataDescriptor descriptor) {
//
// Check to see whether we already have the information being requested.
//
@@ -4784,7 +4946,7 @@
* @return a cache entry containing the required data
* @throws AnalysisException if data could not be returned because the source could not be parsed
*/
- DartEntry cacheDartParseData(Source source, DartEntry dartEntry, DataDescriptor descriptor) {
+ DartEntry _cacheDartParseData(Source source, DartEntry dartEntry, DataDescriptor descriptor) {
if (identical(descriptor, DartEntry.PARSED_UNIT)) {
CompilationUnit unit = dartEntry.anyParsedCompilationUnit;
if (unit != null) {
@@ -4800,7 +4962,7 @@
// If not, compute the information. Unless the modification date of the source continues to
// change, this loop will eventually terminate.
//
- dartEntry = cacheDartScanData(source, dartEntry, DartEntry.TOKEN_STREAM);
+ dartEntry = _cacheDartScanData(source, dartEntry, DartEntry.TOKEN_STREAM);
dartEntry = new ParseDartTask(this, source, dartEntry.modificationTime, dartEntry.getValue(DartEntry.TOKEN_STREAM)).perform(_resultRecorder) as DartEntry;
state = dartEntry.getState(descriptor);
}
@@ -4820,7 +4982,7 @@
* @return a cache entry containing the required data
* @throws AnalysisException if data could not be returned because the source could not be parsed
*/
- DartEntry cacheDartResolutionData(Source unitSource, Source librarySource, DartEntry dartEntry, DataDescriptor descriptor) {
+ DartEntry _cacheDartResolutionData(Source unitSource, Source librarySource, DartEntry dartEntry, DataDescriptor descriptor) {
//
// Check to see whether we already have the information being requested.
//
@@ -4852,7 +5014,7 @@
* @return a cache entry containing the required data
* @throws AnalysisException if data could not be returned because the source could not be scanned
*/
- DartEntry cacheDartScanData(Source source, DartEntry dartEntry, DataDescriptor descriptor) {
+ DartEntry _cacheDartScanData(Source source, DartEntry dartEntry, DataDescriptor descriptor) {
//
// Check to see whether we already have the information being requested.
//
@@ -4890,7 +5052,7 @@
* @return a cache entry containing the required data
* @throws AnalysisException if data could not be returned because the source could not be parsed
*/
- DartEntry cacheDartVerificationData(Source unitSource, Source librarySource, DartEntry dartEntry, DataDescriptor descriptor) {
+ DartEntry _cacheDartVerificationData(Source unitSource, Source librarySource, DartEntry dartEntry, DataDescriptor descriptor) {
//
// Check to see whether we already have the information being requested.
//
@@ -4921,7 +5083,7 @@
* @throws AnalysisException if data could not be returned because the source could not be
* resolved
*/
- HtmlEntry cacheHtmlParseData(Source source, HtmlEntry htmlEntry, DataDescriptor descriptor) {
+ HtmlEntry _cacheHtmlParseData(Source source, HtmlEntry htmlEntry, DataDescriptor descriptor) {
if (identical(descriptor, HtmlEntry.PARSED_UNIT)) {
ht.HtmlUnit unit = htmlEntry.anyParsedUnit;
if (unit != null) {
@@ -4967,7 +5129,7 @@
* @throws AnalysisException if data could not be returned because the source could not be
* resolved
*/
- HtmlEntry cacheHtmlResolutionData(Source source, HtmlEntry htmlEntry, DataDescriptor descriptor) {
+ HtmlEntry _cacheHtmlResolutionData(Source source, HtmlEntry htmlEntry, DataDescriptor descriptor) {
//
// Check to see whether we already have the information being requested.
//
@@ -4977,7 +5139,7 @@
// If not, compute the information. Unless the modification date of the source continues to
// change, this loop will eventually terminate.
//
- htmlEntry = cacheHtmlParseData(source, htmlEntry, HtmlEntry.PARSED_UNIT);
+ htmlEntry = _cacheHtmlParseData(source, htmlEntry, HtmlEntry.PARSED_UNIT);
htmlEntry = new ResolveHtmlTask(this, source, htmlEntry.modificationTime, htmlEntry.getValue(HtmlEntry.PARSED_UNIT)).perform(_resultRecorder) as HtmlEntry;
state = htmlEntry.getState(descriptor);
}
@@ -4990,7 +5152,7 @@
* @param encoding the encoded form of a source
* @return the source represented by the encoding
*/
- Source computeSourceFromEncoding(String encoding) => _sourceFactory.fromEncoding(encoding);
+ Source _computeSourceFromEncoding(String encoding) => _sourceFactory.fromEncoding(encoding);
/**
* Return `true` if the given array of sources contains the given source.
@@ -4999,7 +5161,7 @@
* @param targetSource the source being searched for
* @return `true` if the given source is in the array
*/
- bool contains(List<Source> sources, Source targetSource) {
+ bool _contains(List<Source> sources, Source targetSource) {
for (Source source in sources) {
if (source == targetSource) {
return true;
@@ -5015,9 +5177,9 @@
* @param targetSources the sources being searched for
* @return `true` if any of the given target sources are in the array
*/
- bool containsAny(List<Source> sources, List<Source> targetSources) {
+ bool _containsAny(List<Source> sources, List<Source> targetSources) {
for (Source targetSource in targetSources) {
- if (contains(sources, targetSource)) {
+ if (_contains(sources, targetSource)) {
return true;
}
}
@@ -5031,7 +5193,7 @@
* @param sourceEntry the entry for the source
* @return task data representing the created task
*/
- AnalysisContextImpl_TaskData createGetContentTask(Source source, SourceEntry sourceEntry) {
+ AnalysisContextImpl_TaskData _createGetContentTask(Source source, SourceEntry sourceEntry) {
SourceEntryImpl sourceCopy = sourceEntry.writableCopy;
sourceCopy.setState(SourceEntry.CONTENT, CacheState.IN_PROCESS);
_cache.put(source, sourceCopy);
@@ -5046,9 +5208,9 @@
* @param dartEntry the entry for the source
* @return task data representing the created task
*/
- AnalysisContextImpl_TaskData createParseDartTask(Source source, DartEntry dartEntry) {
+ AnalysisContextImpl_TaskData _createParseDartTask(Source source, DartEntry dartEntry) {
if (dartEntry.getState(DartEntry.TOKEN_STREAM) != CacheState.VALID) {
- return createScanDartTask(source, dartEntry);
+ return _createScanDartTask(source, dartEntry);
}
Token tokenStream = dartEntry.getValue(DartEntry.TOKEN_STREAM);
DartEntryImpl dartCopy = dartEntry.writableCopy;
@@ -5066,9 +5228,9 @@
* @param htmlEntry the entry for the source
* @return task data representing the created task
*/
- AnalysisContextImpl_TaskData createParseHtmlTask(Source source, HtmlEntry htmlEntry) {
+ AnalysisContextImpl_TaskData _createParseHtmlTask(Source source, HtmlEntry htmlEntry) {
if (htmlEntry.getState(SourceEntry.CONTENT) != CacheState.VALID) {
- return createGetContentTask(source, htmlEntry);
+ return _createGetContentTask(source, htmlEntry);
}
String content = htmlEntry.getValue(SourceEntry.CONTENT);
HtmlEntryImpl htmlCopy = htmlEntry.writableCopy;
@@ -5086,10 +5248,10 @@
* @param dartEntry the entry for the source
* @return task data representing the created task
*/
- AnalysisContextImpl_TaskData createResolveDartDependenciesTask(Source source, DartEntry dartEntry) {
+ AnalysisContextImpl_TaskData _createResolveDartDependenciesTask(Source source, DartEntry dartEntry) {
CompilationUnit unit = dartEntry.anyParsedCompilationUnit;
if (unit == null) {
- return createParseDartTask(source, dartEntry);
+ return _createParseDartTask(source, dartEntry);
}
DartEntryImpl dartCopy = dartEntry.writableCopy;
dartCopy.setState(DartEntry.EXPORTED_LIBRARIES, CacheState.IN_PROCESS);
@@ -5105,9 +5267,9 @@
* @param htmlEntry the entry for the source
* @return task data representing the created task
*/
- AnalysisContextImpl_TaskData createResolveHtmlTask(Source source, HtmlEntry htmlEntry) {
+ AnalysisContextImpl_TaskData _createResolveHtmlTask(Source source, HtmlEntry htmlEntry) {
if (htmlEntry.getState(HtmlEntry.PARSED_UNIT) != CacheState.VALID) {
- return createParseHtmlTask(source, htmlEntry);
+ return _createParseHtmlTask(source, htmlEntry);
}
HtmlEntryImpl htmlCopy = htmlEntry.writableCopy;
htmlCopy.setState(HtmlEntry.RESOLVED_UNIT, CacheState.IN_PROCESS);
@@ -5123,9 +5285,9 @@
* @param dartEntry the entry for the source
* @return task data representing the created task
*/
- AnalysisContextImpl_TaskData createScanDartTask(Source source, DartEntry dartEntry) {
+ AnalysisContextImpl_TaskData _createScanDartTask(Source source, DartEntry dartEntry) {
if (dartEntry.getState(SourceEntry.CONTENT) != CacheState.VALID) {
- return createGetContentTask(source, dartEntry);
+ return _createGetContentTask(source, dartEntry);
}
String content = dartEntry.getValue(SourceEntry.CONTENT);
DartEntryImpl dartCopy = dartEntry.writableCopy;
@@ -5142,7 +5304,7 @@
* @param source the source for which an information object is being created
* @return the source information object that was created
*/
- SourceEntry createSourceEntry(Source source) {
+ SourceEntry _createSourceEntry(Source source) {
String name = source.shortName;
if (AnalysisEngine.isHtmlFileName(name)) {
HtmlEntryImpl htmlEntry = new HtmlEntryImpl();
@@ -5164,7 +5326,7 @@
* @param source the source for which a debugging string is to be produced
* @return debugging information about the given source
*/
- String debuggingString(Source source) => "'${source.fullName}' [${getModificationStamp(source)}]";
+ String _debuggingString(Source source) => "'${source.fullName}' [${getModificationStamp(source)}]";
/**
* Return an array containing all of the change notices that are waiting to be returned. If there
@@ -5174,7 +5336,7 @@
* @param nullIfEmpty `true` if `null` should be returned when there are no notices
* @return the change notices that are waiting to be returned
*/
- List<ChangeNotice> getChangeNotices(bool nullIfEmpty) {
+ List<ChangeNotice> _getChangeNotices(bool nullIfEmpty) {
if (_pendingNotices.isEmpty) {
if (nullIfEmpty) {
return null;
@@ -5197,8 +5359,8 @@
* @return the requested data about the given source
* @throws AnalysisException if data could not be returned because the source could not be parsed
*/
- Object getDartDependencyData(Source source, DartEntry dartEntry, DataDescriptor descriptor) {
- dartEntry = cacheDartDependencyData(source, dartEntry, descriptor);
+ Object _getDartDependencyData(Source source, DartEntry dartEntry, DataDescriptor descriptor) {
+ dartEntry = _cacheDartDependencyData(source, dartEntry, descriptor);
return dartEntry.getValue(descriptor);
}
@@ -5214,15 +5376,15 @@
* @return the requested data about the given source
* @throws AnalysisException if data could not be returned because the source could not be parsed
*/
- Object getDartDependencyData2(Source source, DataDescriptor descriptor, Object defaultValue) {
- DartEntry dartEntry = getReadableDartEntry(source);
+ Object _getDartDependencyData2(Source source, DataDescriptor descriptor, Object defaultValue) {
+ DartEntry dartEntry = _getReadableDartEntry(source);
if (dartEntry == null) {
return defaultValue;
}
try {
- return getDartDependencyData(source, dartEntry, descriptor);
+ return _getDartDependencyData(source, dartEntry, descriptor);
} on ObsoleteSourceAnalysisException catch (exception) {
- AnalysisEngine.instance.logger.logInformation3("Could not compute ${descriptor.toString()}", exception);
+ AnalysisEngine.instance.logger.logInformation2("Could not compute ${descriptor.toString()}", exception);
return defaultValue;
}
}
@@ -5240,8 +5402,8 @@
* @throws AnalysisException if data could not be returned because the source could not be
* resolved
*/
- Object getDartHintData(Source unitSource, Source librarySource, DartEntry dartEntry, DataDescriptor descriptor) {
- dartEntry = cacheDartHintData(unitSource, librarySource, dartEntry, descriptor);
+ Object _getDartHintData(Source unitSource, Source librarySource, DartEntry dartEntry, DataDescriptor descriptor) {
+ dartEntry = _cacheDartHintData(unitSource, librarySource, dartEntry, descriptor);
if (identical(descriptor, DartEntry.ELEMENT)) {
return dartEntry.getValue(descriptor);
}
@@ -5261,10 +5423,10 @@
* @return the requested data about the given source
* @throws AnalysisException if data could not be returned because the source could not be parsed
*/
- Object getDartParseData(Source source, DartEntry dartEntry, DataDescriptor descriptor) {
- dartEntry = cacheDartParseData(source, dartEntry, descriptor);
+ Object _getDartParseData(Source source, DartEntry dartEntry, DataDescriptor descriptor) {
+ dartEntry = _cacheDartParseData(source, dartEntry, descriptor);
if (identical(descriptor, DartEntry.PARSED_UNIT)) {
- accessedAst(source);
+ _accessedAst(source);
return dartEntry.anyParsedCompilationUnit;
}
return dartEntry.getValue(descriptor);
@@ -5283,15 +5445,15 @@
* @return the requested data about the given source
* @throws AnalysisException if data could not be returned because the source could not be parsed
*/
- Object getDartParseData2(Source source, DataDescriptor descriptor, Object defaultValue) {
- DartEntry dartEntry = getReadableDartEntry(source);
+ Object _getDartParseData2(Source source, DataDescriptor descriptor, Object defaultValue) {
+ DartEntry dartEntry = _getReadableDartEntry(source);
if (dartEntry == null) {
return defaultValue;
}
try {
- return getDartParseData(source, dartEntry, descriptor);
+ return _getDartParseData(source, dartEntry, descriptor);
} on ObsoleteSourceAnalysisException catch (exception) {
- AnalysisEngine.instance.logger.logInformation3("Could not compute ${descriptor.toString()}", exception);
+ AnalysisEngine.instance.logger.logInformation2("Could not compute ${descriptor.toString()}", exception);
return defaultValue;
}
}
@@ -5309,12 +5471,12 @@
* @throws AnalysisException if data could not be returned because the source could not be
* resolved
*/
- Object getDartResolutionData(Source unitSource, Source librarySource, DartEntry dartEntry, DataDescriptor descriptor) {
- dartEntry = cacheDartResolutionData(unitSource, librarySource, dartEntry, descriptor);
+ Object _getDartResolutionData(Source unitSource, Source librarySource, DartEntry dartEntry, DataDescriptor descriptor) {
+ dartEntry = _cacheDartResolutionData(unitSource, librarySource, dartEntry, descriptor);
if (identical(descriptor, DartEntry.ELEMENT)) {
return dartEntry.getValue(descriptor);
} else if (identical(descriptor, DartEntry.RESOLVED_UNIT)) {
- accessedAst(unitSource);
+ _accessedAst(unitSource);
}
return dartEntry.getValueInLibrary(descriptor, librarySource);
}
@@ -5333,15 +5495,15 @@
* @throws AnalysisException if data could not be returned because the source could not be
* resolved
*/
- Object getDartResolutionData2(Source unitSource, Source librarySource, DataDescriptor descriptor, Object defaultValue) {
- DartEntry dartEntry = getReadableDartEntry(unitSource);
+ Object _getDartResolutionData2(Source unitSource, Source librarySource, DataDescriptor descriptor, Object defaultValue) {
+ DartEntry dartEntry = _getReadableDartEntry(unitSource);
if (dartEntry == null) {
return defaultValue;
}
try {
- return getDartResolutionData(unitSource, librarySource, dartEntry, descriptor);
+ return _getDartResolutionData(unitSource, librarySource, dartEntry, descriptor);
} on ObsoleteSourceAnalysisException catch (exception) {
- AnalysisEngine.instance.logger.logInformation3("Could not compute ${descriptor.toString()}", exception);
+ AnalysisEngine.instance.logger.logInformation2("Could not compute ${descriptor.toString()}", exception);
return defaultValue;
}
}
@@ -5359,8 +5521,8 @@
* @return the requested data about the given source
* @throws AnalysisException if data could not be returned because the source could not be scanned
*/
- Object getDartScanData(Source source, DartEntry dartEntry, DataDescriptor descriptor) {
- dartEntry = cacheDartScanData(source, dartEntry, descriptor);
+ Object _getDartScanData(Source source, DartEntry dartEntry, DataDescriptor descriptor) {
+ dartEntry = _cacheDartScanData(source, dartEntry, descriptor);
return dartEntry.getValue(descriptor);
}
@@ -5378,15 +5540,15 @@
* @return the requested data about the given source
* @throws AnalysisException if data could not be returned because the source could not be scanned
*/
- Object getDartScanData2(Source source, DataDescriptor descriptor, Object defaultValue) {
- DartEntry dartEntry = getReadableDartEntry(source);
+ Object _getDartScanData2(Source source, DataDescriptor descriptor, Object defaultValue) {
+ DartEntry dartEntry = _getReadableDartEntry(source);
if (dartEntry == null) {
return defaultValue;
}
try {
- return getDartScanData(source, dartEntry, descriptor);
+ return _getDartScanData(source, dartEntry, descriptor);
} on ObsoleteSourceAnalysisException catch (exception) {
- AnalysisEngine.instance.logger.logInformation3("Could not compute ${descriptor.toString()}", exception);
+ AnalysisEngine.instance.logger.logInformation2("Could not compute ${descriptor.toString()}", exception);
return defaultValue;
}
}
@@ -5404,8 +5566,8 @@
* @throws AnalysisException if data could not be returned because the source could not be
* resolved
*/
- Object getDartVerificationData(Source unitSource, Source librarySource, DartEntry dartEntry, DataDescriptor descriptor) {
- dartEntry = cacheDartVerificationData(unitSource, librarySource, dartEntry, descriptor);
+ Object _getDartVerificationData(Source unitSource, Source librarySource, DartEntry dartEntry, DataDescriptor descriptor) {
+ dartEntry = _cacheDartVerificationData(unitSource, librarySource, dartEntry, descriptor);
return dartEntry.getValueInLibrary(descriptor, librarySource);
}
@@ -5422,14 +5584,14 @@
* @return the requested data about the given source
* @throws AnalysisException if data could not be returned because the source could not be parsed
*/
- Object getHtmlParseData(Source source, DataDescriptor descriptor, Object defaultValue) {
- HtmlEntry htmlEntry = getReadableHtmlEntry(source);
+ Object _getHtmlParseData(Source source, DataDescriptor descriptor, Object defaultValue) {
+ HtmlEntry htmlEntry = _getReadableHtmlEntry(source);
if (htmlEntry == null) {
return defaultValue;
}
- htmlEntry = cacheHtmlParseData(source, htmlEntry, descriptor);
+ htmlEntry = _cacheHtmlParseData(source, htmlEntry, descriptor);
if (identical(descriptor, HtmlEntry.PARSED_UNIT)) {
- accessedAst(source);
+ _accessedAst(source);
return htmlEntry.anyParsedUnit;
}
return htmlEntry.getValue(descriptor);
@@ -5450,15 +5612,15 @@
* @throws AnalysisException if data could not be returned because the source could not be
* resolved
*/
- Object getHtmlResolutionData(Source source, DataDescriptor descriptor, Object defaultValue) {
- HtmlEntry htmlEntry = getReadableHtmlEntry(source);
+ Object _getHtmlResolutionData(Source source, DataDescriptor descriptor, Object defaultValue) {
+ HtmlEntry htmlEntry = _getReadableHtmlEntry(source);
if (htmlEntry == null) {
return defaultValue;
}
try {
- return getHtmlResolutionData2(source, htmlEntry, descriptor);
+ return _getHtmlResolutionData2(source, htmlEntry, descriptor);
} on ObsoleteSourceAnalysisException catch (exception) {
- AnalysisEngine.instance.logger.logInformation3("Could not compute ${descriptor.toString()}", exception);
+ AnalysisEngine.instance.logger.logInformation2("Could not compute ${descriptor.toString()}", exception);
return defaultValue;
}
}
@@ -5477,10 +5639,10 @@
* @throws AnalysisException if data could not be returned because the source could not be
* resolved
*/
- Object getHtmlResolutionData2(Source source, HtmlEntry htmlEntry, DataDescriptor descriptor) {
- htmlEntry = cacheHtmlResolutionData(source, htmlEntry, descriptor);
+ Object _getHtmlResolutionData2(Source source, HtmlEntry htmlEntry, DataDescriptor descriptor) {
+ htmlEntry = _cacheHtmlResolutionData(source, htmlEntry, descriptor);
if (identical(descriptor, HtmlEntry.RESOLVED_UNIT)) {
- accessedAst(source);
+ _accessedAst(source);
}
return htmlEntry.getValue(descriptor);
}
@@ -5507,7 +5669,7 @@
// Look for a priority source that needs to be analyzed.
//
for (Source source in _priorityOrder) {
- AnalysisContextImpl_TaskData taskData = getNextNondependentAnalysisTask(source, true, hintsEnabled, sdkErrorsEnabled);
+ AnalysisContextImpl_TaskData taskData = _getNextNondependentAnalysisTask(source, true, hintsEnabled, sdkErrorsEnabled);
AnalysisTask task = taskData.task;
if (task != null) {
return task;
@@ -5520,7 +5682,7 @@
//
Source source = _workManager.nextSource;
while (source != null) {
- AnalysisContextImpl_TaskData taskData = getNextNondependentAnalysisTask(source, false, hintsEnabled, sdkErrorsEnabled);
+ AnalysisContextImpl_TaskData taskData = _getNextNondependentAnalysisTask(source, false, hintsEnabled, sdkErrorsEnabled);
AnalysisTask task = taskData.task;
if (task != null) {
return task;
@@ -5564,13 +5726,13 @@
* sources in the SDK
* @return the next task that needs to be performed for the given source
*/
- AnalysisContextImpl_TaskData getNextAnalysisTaskForSource(Source source, SourceEntry sourceEntry, bool isPriority, bool hintsEnabled, bool sdkErrorsEnabled) {
+ AnalysisContextImpl_TaskData _getNextAnalysisTaskForSource(Source source, SourceEntry sourceEntry, bool isPriority, bool hintsEnabled, bool sdkErrorsEnabled) {
if (sourceEntry == null) {
return new AnalysisContextImpl_TaskData(null, false, null);
}
CacheState contentState = sourceEntry.getState(SourceEntry.CONTENT);
if (identical(contentState, CacheState.INVALID)) {
- return createGetContentTask(source, sourceEntry);
+ return _createGetContentTask(source, sourceEntry);
} else if (identical(contentState, CacheState.IN_PROCESS)) {
// We are already in the process of getting the content. There's nothing else we can do with
// this source until that's complete.
@@ -5580,21 +5742,21 @@
DartEntry dartEntry = sourceEntry;
CacheState scanErrorsState = dartEntry.getState(DartEntry.SCAN_ERRORS);
if (identical(scanErrorsState, CacheState.INVALID) || (isPriority && identical(scanErrorsState, CacheState.FLUSHED))) {
- return createScanDartTask(source, dartEntry);
+ return _createScanDartTask(source, dartEntry);
}
CacheState parseErrorsState = dartEntry.getState(DartEntry.PARSE_ERRORS);
if (identical(parseErrorsState, CacheState.INVALID) || (isPriority && identical(parseErrorsState, CacheState.FLUSHED))) {
- return createParseDartTask(source, dartEntry);
+ return _createParseDartTask(source, dartEntry);
}
if (isPriority && parseErrorsState != CacheState.ERROR) {
CompilationUnit parseUnit = dartEntry.anyParsedCompilationUnit;
if (parseUnit == null) {
- return createParseDartTask(source, dartEntry);
+ return _createParseDartTask(source, dartEntry);
}
}
CacheState exportState = dartEntry.getState(DartEntry.EXPORTED_LIBRARIES);
if (identical(exportState, CacheState.INVALID) || (isPriority && identical(exportState, CacheState.FLUSHED))) {
- return createResolveDartDependenciesTask(source, dartEntry);
+ return _createResolveDartDependenciesTask(source, dartEntry);
}
List<Source> librariesContaining = dartEntry.getValue(DartEntry.CONTAINING_LIBRARIES);
for (Source librarySource in librariesContaining) {
@@ -5652,17 +5814,17 @@
HtmlEntry htmlEntry = sourceEntry;
CacheState parseErrorsState = htmlEntry.getState(HtmlEntry.PARSE_ERRORS);
if (identical(parseErrorsState, CacheState.INVALID) || (isPriority && identical(parseErrorsState, CacheState.FLUSHED))) {
- return createParseHtmlTask(source, htmlEntry);
+ return _createParseHtmlTask(source, htmlEntry);
}
if (isPriority && parseErrorsState != CacheState.ERROR) {
ht.HtmlUnit parsedUnit = htmlEntry.anyParsedUnit;
if (parsedUnit == null) {
- return createParseHtmlTask(source, htmlEntry);
+ return _createParseHtmlTask(source, htmlEntry);
}
}
CacheState resolvedUnitState = htmlEntry.getState(HtmlEntry.RESOLVED_UNIT);
if (identical(resolvedUnitState, CacheState.INVALID) || (isPriority && identical(resolvedUnitState, CacheState.FLUSHED))) {
- return createResolveHtmlTask(source, htmlEntry);
+ return _createResolveHtmlTask(source, htmlEntry);
}
// Angular support
if (_options.analyzeAngular) {
@@ -5670,7 +5832,7 @@
CacheState angularEntryState = htmlEntry.getState(HtmlEntry.ANGULAR_ENTRY);
if (identical(angularEntryState, CacheState.INVALID)) {
if (htmlEntry.getState(HtmlEntry.RESOLVED_UNIT) != CacheState.VALID) {
- return createResolveHtmlTask(source, htmlEntry);
+ return _createResolveHtmlTask(source, htmlEntry);
}
HtmlEntryImpl htmlCopy = htmlEntry.writableCopy;
htmlCopy.setState(HtmlEntry.ANGULAR_ENTRY, CacheState.IN_PROCESS);
@@ -5681,7 +5843,7 @@
CacheState angularErrorsState = htmlEntry.getState(HtmlEntry.ANGULAR_ERRORS);
if (identical(angularErrorsState, CacheState.INVALID)) {
if (htmlEntry.getState(HtmlEntry.RESOLVED_UNIT) != CacheState.VALID) {
- return createResolveHtmlTask(source, htmlEntry);
+ return _createResolveHtmlTask(source, htmlEntry);
}
AngularApplication application = htmlEntry.getValue(HtmlEntry.ANGULAR_APPLICATION);
// try to resolve as an Angular template
@@ -5696,13 +5858,13 @@
return new AnalysisContextImpl_TaskData(null, false, null);
}
- AnalysisContextImpl_TaskData getNextNondependentAnalysisTask(Source source, bool isPriority, bool hintsEnabled, bool sdkErrorsEnabled) {
- AnalysisContextImpl_TaskData taskData = getNextAnalysisTaskForSource(source, _cache.get(source), isPriority, hintsEnabled, sdkErrorsEnabled);
+ AnalysisContextImpl_TaskData _getNextNondependentAnalysisTask(Source source, bool isPriority, bool hintsEnabled, bool sdkErrorsEnabled) {
+ AnalysisContextImpl_TaskData taskData = _getNextAnalysisTaskForSource(source, _cache.get(source), isPriority, hintsEnabled, sdkErrorsEnabled);
if (taskData.task != null || taskData.isBlocked) {
return taskData;
}
while (taskData.dependentSource != null) {
- taskData = getNextAnalysisTaskForSource(source, _cache.get(source), isPriority, hintsEnabled, sdkErrorsEnabled);
+ taskData = _getNextAnalysisTaskForSource(source, _cache.get(source), isPriority, hintsEnabled, sdkErrorsEnabled);
if (taskData.task != null || taskData.isBlocked) {
return taskData;
}
@@ -5716,7 +5878,7 @@
* @param source the source for which changes are being reported
* @return a change notice for the given source
*/
- ChangeNoticeImpl getNotice(Source source) {
+ ChangeNoticeImpl _getNotice(Source source) {
ChangeNoticeImpl notice = _pendingNotices[source];
if (notice == null) {
notice = new ChangeNoticeImpl(source);
@@ -5732,10 +5894,10 @@
* @param source the source for which a cache entry is being sought
* @return the source cache entry associated with the given source
*/
- DartEntry getReadableDartEntry(Source source) {
+ DartEntry _getReadableDartEntry(Source source) {
SourceEntry sourceEntry = _cache.get(source);
if (sourceEntry == null) {
- sourceEntry = createSourceEntry(source);
+ sourceEntry = _createSourceEntry(source);
}
if (sourceEntry is DartEntry) {
return sourceEntry as DartEntry;
@@ -5750,10 +5912,10 @@
* @param source the source for which a cache entry is being sought
* @return the source cache entry associated with the given source
*/
- HtmlEntry getReadableHtmlEntry(Source source) {
+ HtmlEntry _getReadableHtmlEntry(Source source) {
SourceEntry sourceEntry = _cache.get(source);
if (sourceEntry == null) {
- sourceEntry = createSourceEntry(source);
+ sourceEntry = _createSourceEntry(source);
}
if (sourceEntry is HtmlEntry) {
return sourceEntry as HtmlEntry;
@@ -5762,19 +5924,27 @@
}
/**
+ * Return the cache entry associated with the given source, creating it if necessary.
+ *
+ * @param source the source for which a cache entry is being sought
+ * @return the source cache entry associated with the given source
+ */
+ SourceEntry _getReadableSourceEntry(Source source) {
+ SourceEntry sourceEntry = _cache.get(source);
+ if (sourceEntry == null) {
+ sourceEntry = _createSourceEntry(source);
+ }
+ return sourceEntry;
+ }
+
+ /**
* Return the cache entry associated with the given source, or `null` if there is no entry
* associated with the source.
*
* @param source the source for which a cache entry is being sought
* @return the source cache entry associated with the given source
*/
- SourceEntry getReadableSourceEntry(Source source) {
- SourceEntry sourceEntry = _cache.get(source);
- if (sourceEntry == null) {
- sourceEntry = createSourceEntry(source);
- }
- return sourceEntry;
- }
+ SourceEntry _getReadableSourceEntryOrNull(Source source) => _cache.get(source);
/**
* Return an array containing all of the sources known to this context that have the given kind.
@@ -5782,7 +5952,7 @@
* @param kind the kind of sources to be returned
* @return all of the sources known to this context that have the given kind
*/
- List<Source> getSources(SourceKind kind) {
+ List<Source> _getSources(SourceKind kind) {
List<Source> sources = new List<Source>();
for (MapEntry<Source, SourceEntry> entry in _cache.entrySet()) {
if (identical(entry.getValue().kind, kind)) {
@@ -5807,7 +5977,7 @@
* @param hintsEnabled `true` if hints are currently enabled
* @param sources the set to which sources should be added
*/
- void getSourcesNeedingProcessing2(Source source, SourceEntry sourceEntry, bool isPriority, bool hintsEnabled, Set<Source> sources) {
+ void _getSourcesNeedingProcessing(Source source, SourceEntry sourceEntry, bool isPriority, bool hintsEnabled, Set<Source> sources) {
if (sourceEntry is DartEntry) {
DartEntry dartEntry = sourceEntry;
CacheState scanErrorsState = dartEntry.getState(DartEntry.SCAN_ERRORS);
@@ -5902,7 +6072,7 @@
*
* <b>Note:</b> This method must only be invoked while we are synchronized on [cacheLock].
*/
- void invalidateAllResolutionInformation() {
+ void _invalidateAllResolutionInformation() {
for (MapEntry<Source, SourceEntry> mapEntry in _cache.entrySet()) {
Source source = mapEntry.getKey();
SourceEntry sourceEntry = mapEntry.getValue();
@@ -5912,7 +6082,7 @@
mapEntry.setValue(htmlCopy);
} else if (sourceEntry is DartEntry) {
DartEntry dartEntry = sourceEntry;
- removeFromParts(source, dartEntry);
+ _removeFromParts(source, dartEntry);
DartEntryImpl dartCopy = dartEntry.writableCopy;
dartCopy.invalidateAllResolutionInformation();
mapEntry.setValue(dartCopy);
@@ -5932,7 +6102,7 @@
*
* @param entryCopy the [HtmlEntryImpl] of the (maybe) Angular entry point being invalidated
*/
- void invalidateAngularResolution(HtmlEntryImpl entryCopy) {
+ void _invalidateAngularResolution(HtmlEntryImpl entryCopy) {
AngularApplication application = entryCopy.getValue(HtmlEntry.ANGULAR_ENTRY);
if (application == null) {
return;
@@ -5947,7 +6117,7 @@
AngularHasTemplateElement hasTemplate = angularElement;
Source templateSource = hasTemplate.templateSource;
if (templateSource != null) {
- HtmlEntry htmlEntry = getReadableHtmlEntry(templateSource);
+ HtmlEntry htmlEntry = _getReadableHtmlEntry(templateSource);
HtmlEntryImpl htmlCopy = htmlEntry.writableCopy;
htmlCopy.setValue(HtmlEntry.ANGULAR_APPLICATION, null);
htmlCopy.setValue(HtmlEntry.ANGULAR_COMPONENT, null);
@@ -5960,12 +6130,12 @@
// reset Dart sources
List<Source> oldElementSources = application.elementSources;
for (Source elementSource in oldElementSources) {
- DartEntry dartEntry = getReadableDartEntry(elementSource);
+ DartEntry dartEntry = _getReadableDartEntry(elementSource);
DartEntryImpl dartCopy = dartEntry.writableCopy;
dartCopy.setValue(DartEntry.ANGULAR_ERRORS, AnalysisError.NO_ERRORS);
_cache.put(elementSource, dartCopy);
// notify about (disappeared) Angular errors
- ChangeNoticeImpl notice = getNotice(elementSource);
+ ChangeNoticeImpl notice = _getNotice(elementSource);
notice.setErrors(dartCopy.allErrors, dartEntry.getValue(SourceEntry.LINE_INFO));
}
}
@@ -5982,11 +6152,11 @@
* @param librarySource the source of the library being invalidated
* @param writer the writer to which debugging information should be written
*/
- void invalidateLibraryResolution(Source librarySource, PrintStringWriter writer) {
+ void _invalidateLibraryResolution(Source librarySource, PrintStringWriter writer) {
// TODO(brianwilkerson) This could be optimized. There's no need to flush all of these caches if
// the public namespace hasn't changed, which will be a fairly common case. The question is
// whether we can afford the time to compute the namespace to look for differences.
- DartEntry libraryEntry = getReadableDartEntry(librarySource);
+ DartEntry libraryEntry = _getReadableDartEntry(librarySource);
if (libraryEntry != null) {
List<Source> includedParts = libraryEntry.getValue(DartEntry.INCLUDED_PARTS);
DartEntryImpl libraryCopy = libraryEntry.writableCopy;
@@ -5995,7 +6165,7 @@
_cache.put(librarySource, libraryCopy);
_workManager.add(librarySource, SourcePriority.LIBRARY);
if (writer != null) {
- writer.println(" Invalidated library source: ${debuggingString(librarySource)} (previously modified at ${oldTime})");
+ writer.println(" Invalidated library source: ${_debuggingString(librarySource)} (previously modified at ${oldTime})");
}
for (Source partSource in includedParts) {
SourceEntry partEntry = _cache.get(partSource);
@@ -6009,7 +6179,7 @@
partCopy.invalidateAllResolutionInformation();
_cache.put(partSource, partCopy);
if (writer != null) {
- writer.println(" Invalidated part source: ${debuggingString(partSource)} (previously modified at ${oldTime})");
+ writer.println(" Invalidated part source: ${_debuggingString(partSource)} (previously modified at ${oldTime})");
}
}
}
@@ -6019,9 +6189,9 @@
for (AngularApplication application in angularApplicationsCopy) {
if (application.dependsOn(librarySource)) {
Source entryPointSource = application.entryPoint;
- HtmlEntry entry = getReadableHtmlEntry(entryPointSource);
+ HtmlEntry entry = _getReadableHtmlEntry(entryPointSource);
HtmlEntryImpl entryCopy = entry.writableCopy;
- invalidateAngularResolution(entryCopy);
+ _invalidateAngularResolution(entryCopy);
_cache.put(entryPointSource, entryCopy);
_workManager.add(entryPointSource, SourcePriority.HTML);
}
@@ -6036,7 +6206,7 @@
* infinite recursion
* @return `true` if this library is, or depends on, dart:html
*/
- bool isClient(LibraryElement library, Source htmlSource, Set<LibraryElement> visitedLibraries) {
+ bool _isClient(LibraryElement library, Source htmlSource, Set<LibraryElement> visitedLibraries) {
if (visitedLibraries.contains(library)) {
return false;
}
@@ -6045,12 +6215,12 @@
}
visitedLibraries.add(library);
for (LibraryElement imported in library.importedLibraries) {
- if (isClient(imported, htmlSource, visitedLibraries)) {
+ if (_isClient(imported, htmlSource, visitedLibraries)) {
return true;
}
}
for (LibraryElement exported in library.exportedLibraries) {
- if (isClient(exported, htmlSource, visitedLibraries)) {
+ if (_isClient(exported, htmlSource, visitedLibraries)) {
return true;
}
}
@@ -6062,7 +6232,7 @@
*
* @param message the message to be added to the log
*/
- void logInformation(String message) {
+ void _logInformation(String message) {
AnalysisEngine.instance.logger.logInformation(message);
}
@@ -6072,11 +6242,11 @@
* @param message the message to be added to the log
* @param exception the exception to be included in the log entry
*/
- void logInformation2(String message, Exception exception) {
+ void _logInformation2(String message, Exception exception) {
if (exception == null) {
AnalysisEngine.instance.logger.logInformation(message);
} else {
- AnalysisEngine.instance.logger.logInformation3(message, exception);
+ AnalysisEngine.instance.logger.logInformation2(message, exception);
}
}
@@ -6084,7 +6254,7 @@
* Updates [HtmlEntry]s that correspond to the previously known and new Angular application
* information.
*/
- void recordAngularEntryPoint(HtmlEntryImpl entry, ResolveAngularEntryHtmlTask task) {
+ void _recordAngularEntryPoint(HtmlEntryImpl entry, ResolveAngularEntryHtmlTask task) {
AngularApplication application = task.application;
if (application != null) {
_angularApplications.add(application);
@@ -6097,7 +6267,7 @@
AngularHasTemplateElement hasTemplate = angularElement;
Source templateSource = hasTemplate.templateSource;
if (templateSource != null) {
- HtmlEntry htmlEntry = getReadableHtmlEntry(templateSource);
+ HtmlEntry htmlEntry = _getReadableHtmlEntry(templateSource);
HtmlEntryImpl htmlCopy = htmlEntry.writableCopy;
htmlCopy.setValue(HtmlEntry.ANGULAR_APPLICATION, application);
if (hasTemplate is AngularComponentElement) {
@@ -6113,12 +6283,12 @@
// update Dart sources errors
List<Source> newElementSources = application.elementSources;
for (Source elementSource in newElementSources) {
- DartEntry dartEntry = getReadableDartEntry(elementSource);
+ DartEntry dartEntry = _getReadableDartEntry(elementSource);
DartEntryImpl dartCopy = dartEntry.writableCopy;
dartCopy.setValue(DartEntry.ANGULAR_ERRORS, task.getErrors(elementSource));
_cache.put(elementSource, dartCopy);
// notify about Dart errors
- ChangeNoticeImpl notice = getNotice(elementSource);
+ ChangeNoticeImpl notice = _getNotice(elementSource);
notice.setErrors(dartCopy.allErrors, computeLineInfo(elementSource));
}
}
@@ -6136,14 +6306,14 @@
* @param librarySource the source for the library used to record information
* @param htmlSource the source for the HTML library
*/
- void recordElementData(DartEntry dartEntry, DartEntryImpl dartCopy, LibraryElement library, Source librarySource, Source htmlSource) {
+ void _recordElementData(DartEntry dartEntry, DartEntryImpl dartCopy, LibraryElement library, Source librarySource, Source htmlSource) {
dartCopy.setValue(DartEntry.ELEMENT, library);
dartCopy.setValue(DartEntry.IS_LAUNCHABLE, library.entryPoint != null);
- dartCopy.setValue(DartEntry.IS_CLIENT, isClient(library, htmlSource, new Set<LibraryElement>()));
+ dartCopy.setValue(DartEntry.IS_CLIENT, _isClient(library, htmlSource, new Set<LibraryElement>()));
// TODO(brianwilkerson) Understand why we're doing this both here and in
// ResolveDartDependenciesTask and whether we should also be capturing the imported and exported
// sources here.
- removeFromParts(librarySource, dartEntry);
+ _removeFromParts(librarySource, dartEntry);
List<CompilationUnitElement> parts = library.parts;
int count = parts.length;
List<Source> unitSources = new List<Source>(count + 1);
@@ -6151,7 +6321,7 @@
for (int i = 0; i < count; i++) {
Source unitSource = parts[i].source;
unitSources[i + 1] = unitSource;
- DartEntry unitEntry = getReadableDartEntry(unitSource);
+ DartEntry unitEntry = _getReadableDartEntry(unitSource);
if (unitSource != null) {
DartEntryImpl unitCopy = unitEntry.writableCopy;
unitCopy.addContainingLibrary(librarySource);
@@ -6169,7 +6339,7 @@
* @return an entry containing the computed results
* @throws AnalysisException if the results could not be recorded
*/
- DartEntry recordGenerateDartErrorsTask(GenerateDartErrorsTask task) {
+ DartEntry _recordGenerateDartErrorsTask(GenerateDartErrorsTask task) {
Source source = task.source;
Source librarySource = task.libraryElement.source;
AnalysisException thrownException = task.exception;
@@ -6188,8 +6358,8 @@
if (sourceTime == resultTime) {
if (dartEntry.modificationTime != sourceTime) {
// The source has changed without the context being notified. Simulate notification.
- sourceChanged(source);
- dartEntry = getReadableDartEntry(source);
+ _sourceChanged(source);
+ dartEntry = _getReadableDartEntry(source);
if (dartEntry == null) {
throw new AnalysisException.con1("A Dart file became a non-Dart file: ${source.fullName}");
}
@@ -6197,7 +6367,7 @@
DartEntryImpl dartCopy = dartEntry.writableCopy;
if (thrownException == null) {
dartCopy.setValueInLibrary(DartEntry.VERIFICATION_ERRORS, librarySource, task.errors);
- ChangeNoticeImpl notice = getNotice(source);
+ ChangeNoticeImpl notice = _getNotice(source);
notice.setErrors(dartCopy.allErrors, dartCopy.getValue(SourceEntry.LINE_INFO));
} else {
dartCopy.setStateInLibrary(DartEntry.VERIFICATION_ERRORS, librarySource, CacheState.ERROR);
@@ -6206,7 +6376,7 @@
_cache.put(source, dartCopy);
dartEntry = dartCopy;
} else {
- logInformation2("Generated errors discarded for ${debuggingString(source)}; sourceTime = ${sourceTime}, resultTime = ${resultTime}, cacheTime = ${dartEntry.modificationTime}", thrownException);
+ _logInformation2("Generated errors discarded for ${_debuggingString(source)}; sourceTime = ${sourceTime}, resultTime = ${resultTime}, cacheTime = ${dartEntry.modificationTime}", thrownException);
DartEntryImpl dartCopy = dartEntry.writableCopy;
if (thrownException == null || resultTime >= 0) {
//
@@ -6214,7 +6384,7 @@
// will be re-verified using the up-to-date sources.
//
// dartCopy.setState(DartEntry.VERIFICATION_ERRORS, librarySource, CacheState.INVALID);
- removeFromParts(source, dartEntry);
+ _removeFromParts(source, dartEntry);
dartCopy.invalidateAllInformation();
dartCopy.modificationTime = sourceTime;
_cache.removedAst(source);
@@ -6245,7 +6415,7 @@
* @return an entry containing the computed results
* @throws AnalysisException if the results could not be recorded
*/
- DartEntry recordGenerateDartHintsTask(GenerateDartHintsTask task) {
+ DartEntry _recordGenerateDartHintsTask(GenerateDartHintsTask task) {
Source librarySource = task.libraryElement.source;
AnalysisException thrownException = task.exception;
DartEntry libraryEntry = null;
@@ -6288,8 +6458,8 @@
if (sourceTime == resultTime) {
if (dartEntry.modificationTime != sourceTime) {
// The source has changed without the context being notified. Simulate notification.
- sourceChanged(unitSource);
- dartEntry = getReadableDartEntry(unitSource);
+ _sourceChanged(unitSource);
+ dartEntry = _getReadableDartEntry(unitSource);
if (dartEntry == null) {
throw new AnalysisException.con1("A Dart file became a non-Dart file: ${unitSource.fullName}");
}
@@ -6297,7 +6467,7 @@
DartEntryImpl dartCopy = dartEntry.writableCopy;
if (thrownException == null) {
dartCopy.setValueInLibrary(DartEntry.HINTS, librarySource, results.data);
- ChangeNoticeImpl notice = getNotice(unitSource);
+ ChangeNoticeImpl notice = _getNotice(unitSource);
notice.setErrors(dartCopy.allErrors, dartCopy.getValue(SourceEntry.LINE_INFO));
} else {
dartCopy.setStateInLibrary(DartEntry.HINTS, librarySource, CacheState.ERROR);
@@ -6306,7 +6476,7 @@
_cache.put(unitSource, dartCopy);
dartEntry = dartCopy;
} else {
- logInformation2("Generated hints discarded for ${debuggingString(unitSource)}; sourceTime = ${sourceTime}, resultTime = ${resultTime}, cacheTime = ${dartEntry.modificationTime}", thrownException);
+ _logInformation2("Generated hints discarded for ${_debuggingString(unitSource)}; sourceTime = ${sourceTime}, resultTime = ${resultTime}, cacheTime = ${dartEntry.modificationTime}", thrownException);
if (identical(dartEntry.getStateInLibrary(DartEntry.HINTS, librarySource), CacheState.IN_PROCESS)) {
DartEntryImpl dartCopy = dartEntry.writableCopy;
if (thrownException == null || resultTime >= 0) {
@@ -6315,7 +6485,7 @@
// will be re-analyzed using the up-to-date sources.
//
// dartCopy.setState(DartEntry.HINTS, librarySource, CacheState.INVALID);
- removeFromParts(unitSource, dartEntry);
+ _removeFromParts(unitSource, dartEntry);
dartCopy.invalidateAllInformation();
dartCopy.modificationTime = sourceTime;
_cache.removedAst(unitSource);
@@ -6347,7 +6517,7 @@
* @return an entry containing the computed results
* @throws AnalysisException if the results could not be recorded
*/
- SourceEntry recordGetContentsTask(GetContentTask task) {
+ SourceEntry _recordGetContentsTask(GetContentTask task) {
if (!task.isComplete) {
return null;
}
@@ -6382,10 +6552,10 @@
* @return an entry containing the computed results
* @throws AnalysisException if the results could not be recorded
*/
- DartEntry recordIncrementalAnalysisTaskResults(IncrementalAnalysisTask task) {
+ DartEntry _recordIncrementalAnalysisTaskResults(IncrementalAnalysisTask task) {
CompilationUnit unit = task.compilationUnit;
if (unit != null) {
- ChangeNoticeImpl notice = getNotice(task.source);
+ ChangeNoticeImpl notice = _getNotice(task.source);
notice.compilationUnit = unit;
_incrementalAnalysisCache = IncrementalAnalysisCache.cacheResult(task.cache, unit);
}
@@ -6400,7 +6570,7 @@
* @return an entry containing the computed results
* @throws AnalysisException if the results could not be recorded
*/
- DartEntry recordParseDartTaskResults(ParseDartTask task) {
+ DartEntry _recordParseDartTaskResults(ParseDartTask task) {
Source source = task.source;
AnalysisException thrownException = task.exception;
DartEntry dartEntry = null;
@@ -6418,8 +6588,8 @@
if (sourceTime == resultTime) {
if (dartEntry.modificationTime != sourceTime) {
// The source has changed without the context being notified. Simulate notification.
- sourceChanged(source);
- dartEntry = getReadableDartEntry(source);
+ _sourceChanged(source);
+ dartEntry = _getReadableDartEntry(source);
if (dartEntry == null) {
throw new AnalysisException.con1("A Dart file became a non-Dart file: ${source.fullName}");
}
@@ -6438,13 +6608,13 @@
dartCopy.setValue(DartEntry.PARSED_UNIT, task.compilationUnit);
dartCopy.setValue(DartEntry.PARSE_ERRORS, task.errors);
_cache.storedAst(source);
- ChangeNoticeImpl notice = getNotice(source);
+ ChangeNoticeImpl notice = _getNotice(source);
notice.setErrors(dartCopy.allErrors, dartCopy.getValue(SourceEntry.LINE_INFO));
// Verify that the incrementally parsed and resolved unit in the incremental cache
// is structurally equivalent to the fully parsed unit
_incrementalAnalysisCache = IncrementalAnalysisCache.verifyStructure(_incrementalAnalysisCache, source, task.compilationUnit);
} else {
- removeFromParts(source, dartEntry);
+ _removeFromParts(source, dartEntry);
dartCopy.recordParseError();
_cache.removedAst(source);
}
@@ -6452,7 +6622,7 @@
_cache.put(source, dartCopy);
dartEntry = dartCopy;
} else {
- logInformation2("Parse results discarded for ${debuggingString(source)}; sourceTime = ${sourceTime}, resultTime = ${resultTime}, cacheTime = ${dartEntry.modificationTime}", thrownException);
+ _logInformation2("Parse results discarded for ${_debuggingString(source)}; sourceTime = ${sourceTime}, resultTime = ${resultTime}, cacheTime = ${dartEntry.modificationTime}", thrownException);
DartEntryImpl dartCopy = dartEntry.writableCopy;
if (thrownException == null || resultTime >= 0) {
//
@@ -6460,7 +6630,7 @@
// will be re-analyzed using the up-to-date sources.
//
// dartCopy.recordParseNotInProcess();
- removeFromParts(source, dartEntry);
+ _removeFromParts(source, dartEntry);
dartCopy.invalidateAllInformation();
dartCopy.modificationTime = sourceTime;
_cache.removedAst(source);
@@ -6491,7 +6661,7 @@
* @return an entry containing the computed results
* @throws AnalysisException if the results could not be recorded
*/
- HtmlEntry recordParseHtmlTaskResults(ParseHtmlTask task) {
+ HtmlEntry _recordParseHtmlTaskResults(ParseHtmlTask task) {
Source source = task.source;
AnalysisException thrownException = task.exception;
HtmlEntry htmlEntry = null;
@@ -6509,8 +6679,8 @@
if (sourceTime == resultTime) {
if (htmlEntry.modificationTime != sourceTime) {
// The source has changed without the context being notified. Simulate notification.
- sourceChanged(source);
- htmlEntry = getReadableHtmlEntry(source);
+ _sourceChanged(source);
+ htmlEntry = _getReadableHtmlEntry(source);
if (htmlEntry == null) {
throw new AnalysisException.con1("An HTML file became a non-HTML file: ${source.fullName}");
}
@@ -6524,7 +6694,7 @@
htmlCopy.setValue(HtmlEntry.PARSE_ERRORS, task.errors);
htmlCopy.setValue(HtmlEntry.REFERENCED_LIBRARIES, task.referencedLibraries);
_cache.storedAst(source);
- ChangeNoticeImpl notice = getNotice(source);
+ ChangeNoticeImpl notice = _getNotice(source);
notice.setErrors(htmlCopy.allErrors, lineInfo);
} else {
htmlCopy.recordParseError();
@@ -6534,7 +6704,7 @@
_cache.put(source, htmlCopy);
htmlEntry = htmlCopy;
} else {
- logInformation2("Parse results discarded for ${debuggingString(source)}; sourceTime = ${sourceTime}, resultTime = ${resultTime}, cacheTime = ${htmlEntry.modificationTime}", thrownException);
+ _logInformation2("Parse results discarded for ${_debuggingString(source)}; sourceTime = ${sourceTime}, resultTime = ${resultTime}, cacheTime = ${htmlEntry.modificationTime}", thrownException);
HtmlEntryImpl htmlCopy = (sourceEntry as HtmlEntry).writableCopy;
if (thrownException == null || resultTime >= 0) {
//
@@ -6581,7 +6751,7 @@
* @param task the task that was performed
* @throws AnalysisException if the results could not be recorded
*/
- HtmlEntry recordResolveAngularComponentTemplateTaskResults(ResolveAngularComponentTemplateTask task) {
+ HtmlEntry _recordResolveAngularComponentTemplateTaskResults(ResolveAngularComponentTemplateTask task) {
Source source = task.source;
AnalysisException thrownException = task.exception;
HtmlEntry htmlEntry = null;
@@ -6599,8 +6769,8 @@
if (sourceTime == resultTime) {
if (htmlEntry.modificationTime != sourceTime) {
// The source has changed without the context being notified. Simulate notification.
- sourceChanged(source);
- htmlEntry = getReadableHtmlEntry(source);
+ _sourceChanged(source);
+ htmlEntry = _getReadableHtmlEntry(source);
if (htmlEntry == null) {
throw new AnalysisException.con1("An HTML file became a non-HTML file: ${source.fullName}");
}
@@ -6609,7 +6779,7 @@
if (thrownException == null) {
htmlCopy.setValue(HtmlEntry.ANGULAR_ERRORS, task.resolutionErrors);
// notify about errors
- ChangeNoticeImpl notice = getNotice(source);
+ ChangeNoticeImpl notice = _getNotice(source);
notice.htmlUnit = task.resolvedUnit;
notice.setErrors(htmlCopy.allErrors, htmlCopy.getValue(SourceEntry.LINE_INFO));
} else {
@@ -6662,7 +6832,7 @@
* @param task the task that was performed
* @throws AnalysisException if the results could not be recorded
*/
- HtmlEntry recordResolveAngularEntryHtmlTaskResults(ResolveAngularEntryHtmlTask task) {
+ HtmlEntry _recordResolveAngularEntryHtmlTaskResults(ResolveAngularEntryHtmlTask task) {
Source source = task.source;
AnalysisException thrownException = task.exception;
HtmlEntry htmlEntry = null;
@@ -6680,8 +6850,8 @@
if (sourceTime == resultTime) {
if (htmlEntry.modificationTime != sourceTime) {
// The source has changed without the context being notified. Simulate notification.
- sourceChanged(source);
- htmlEntry = getReadableHtmlEntry(source);
+ _sourceChanged(source);
+ htmlEntry = _getReadableHtmlEntry(source);
if (htmlEntry == null) {
throw new AnalysisException.con1("An HTML file became a non-HTML file: ${source.fullName}");
}
@@ -6689,9 +6859,9 @@
HtmlEntryImpl htmlCopy = htmlEntry.writableCopy;
if (thrownException == null) {
htmlCopy.setValue(HtmlEntry.RESOLVED_UNIT, task.resolvedUnit);
- recordAngularEntryPoint(htmlCopy, task);
+ _recordAngularEntryPoint(htmlCopy, task);
_cache.storedAst(source);
- ChangeNoticeImpl notice = getNotice(source);
+ ChangeNoticeImpl notice = _getNotice(source);
notice.htmlUnit = task.resolvedUnit;
notice.setErrors(htmlCopy.allErrors, htmlCopy.getValue(SourceEntry.LINE_INFO));
} else {
@@ -6745,7 +6915,7 @@
* @return an entry containing the computed results
* @throws AnalysisException if the results could not be recorded
*/
- DartEntry recordResolveDartDependenciesTaskResults(ResolveDartDependenciesTask task) {
+ DartEntry _recordResolveDartDependenciesTaskResults(ResolveDartDependenciesTask task) {
Source source = task.source;
AnalysisException thrownException = task.exception;
DartEntry dartEntry = null;
@@ -6763,19 +6933,19 @@
if (sourceTime == resultTime) {
if (dartEntry.modificationTime != sourceTime) {
// The source has changed without the context being notified. Simulate notification.
- sourceChanged(source);
- dartEntry = getReadableDartEntry(source);
+ _sourceChanged(source);
+ dartEntry = _getReadableDartEntry(source);
if (dartEntry == null) {
throw new AnalysisException.con1("A Dart file became a non-Dart file: ${source.fullName}");
}
}
- removeFromParts(source, dartEntry);
+ _removeFromParts(source, dartEntry);
DartEntryImpl dartCopy = dartEntry.writableCopy;
if (thrownException == null) {
List<Source> newParts = task.includedSources;
for (int i = 0; i < newParts.length; i++) {
Source partSource = newParts[i];
- DartEntry partEntry = getReadableDartEntry(partSource);
+ DartEntry partEntry = _getReadableDartEntry(partSource);
if (partEntry != null && partEntry != dartEntry) {
DartEntryImpl partCopy = partEntry.writableCopy;
partCopy.addContainingLibrary(source);
@@ -6785,6 +6955,7 @@
dartCopy.setValue(DartEntry.EXPORTED_LIBRARIES, task.exportedSources);
dartCopy.setValue(DartEntry.IMPORTED_LIBRARIES, task.importedSources);
dartCopy.setValue(DartEntry.INCLUDED_PARTS, newParts);
+ dartCopy.setValue(DartEntry.DIRECTIVE_ERRORS, task.errors);
} else {
dartCopy.recordDependencyError();
}
@@ -6792,7 +6963,7 @@
_cache.put(source, dartCopy);
dartEntry = dartCopy;
} else {
- logInformation2("Dependency resolution results discarded for ${debuggingString(source)}; sourceTime = ${sourceTime}, resultTime = ${resultTime}, cacheTime = ${dartEntry.modificationTime}", thrownException);
+ _logInformation2("Dependency resolution results discarded for ${_debuggingString(source)}; sourceTime = ${sourceTime}, resultTime = ${resultTime}, cacheTime = ${dartEntry.modificationTime}", thrownException);
DartEntryImpl dartCopy = dartEntry.writableCopy;
if (thrownException == null || resultTime >= 0) {
//
@@ -6800,7 +6971,7 @@
// will be re-analyzed using the up-to-date sources.
//
// dartCopy.recordDependencyNotInProcess();
- removeFromParts(source, dartEntry);
+ _removeFromParts(source, dartEntry);
dartCopy.invalidateAllInformation();
dartCopy.modificationTime = sourceTime;
_cache.removedAst(source);
@@ -6833,7 +7004,7 @@
* @return an entry containing the computed results
* @throws AnalysisException if the results could not be recorded
*/
- DartEntry recordResolveDartUnitTaskResults(ResolveDartUnitTask task) {
+ DartEntry _recordResolveDartUnitTaskResults(ResolveDartUnitTask task) {
Source unitSource = task.source;
Source librarySource = task.librarySource;
AnalysisException thrownException = task.exception;
@@ -6852,8 +7023,8 @@
if (sourceTime == resultTime) {
if (dartEntry.modificationTime != sourceTime) {
// The source has changed without the context being notified. Simulate notification.
- sourceChanged(unitSource);
- dartEntry = getReadableDartEntry(unitSource);
+ _sourceChanged(unitSource);
+ dartEntry = _getReadableDartEntry(unitSource);
if (dartEntry == null) {
throw new AnalysisException.con1("A Dart file became a non-Dart file: ${unitSource.fullName}");
}
@@ -6870,7 +7041,7 @@
_cache.put(unitSource, dartCopy);
dartEntry = dartCopy;
} else {
- logInformation2("Resolution results discarded for ${debuggingString(unitSource)}; sourceTime = ${sourceTime}, resultTime = ${resultTime}, cacheTime = ${dartEntry.modificationTime}", thrownException);
+ _logInformation2("Resolution results discarded for ${_debuggingString(unitSource)}; sourceTime = ${sourceTime}, resultTime = ${resultTime}, cacheTime = ${dartEntry.modificationTime}", thrownException);
DartEntryImpl dartCopy = dartEntry.writableCopy;
if (thrownException == null || resultTime >= 0) {
//
@@ -6880,7 +7051,7 @@
// if (dartCopy.getState(DartEntry.RESOLVED_UNIT) == CacheState.IN_PROCESS) {
// dartCopy.setState(DartEntry.RESOLVED_UNIT, librarySource, CacheState.INVALID);
// }
- removeFromParts(unitSource, dartEntry);
+ _removeFromParts(unitSource, dartEntry);
dartCopy.invalidateAllInformation();
dartCopy.modificationTime = sourceTime;
_cache.removedAst(unitSource);
@@ -6911,7 +7082,7 @@
* @return an entry containing the computed results
* @throws AnalysisException if the results could not be recorded
*/
- HtmlEntry recordResolveHtmlTaskResults(ResolveHtmlTask task) {
+ HtmlEntry _recordResolveHtmlTaskResults(ResolveHtmlTask task) {
Source source = task.source;
AnalysisException thrownException = task.exception;
HtmlEntry htmlEntry = null;
@@ -6929,8 +7100,8 @@
if (sourceTime == resultTime) {
if (htmlEntry.modificationTime != sourceTime) {
// The source has changed without the context being notified. Simulate notification.
- sourceChanged(source);
- htmlEntry = getReadableHtmlEntry(source);
+ _sourceChanged(source);
+ htmlEntry = _getReadableHtmlEntry(source);
if (htmlEntry == null) {
throw new AnalysisException.con1("An HTML file became a non-HTML file: ${source.fullName}");
}
@@ -6942,7 +7113,7 @@
htmlCopy.setValue(HtmlEntry.ELEMENT, task.element);
htmlCopy.setValue(HtmlEntry.RESOLUTION_ERRORS, task.resolutionErrors);
_cache.storedAst(source);
- ChangeNoticeImpl notice = getNotice(source);
+ ChangeNoticeImpl notice = _getNotice(source);
notice.htmlUnit = task.resolvedUnit;
notice.setErrors(htmlCopy.allErrors, htmlCopy.getValue(SourceEntry.LINE_INFO));
} else {
@@ -6953,7 +7124,7 @@
_cache.put(source, htmlCopy);
htmlEntry = htmlCopy;
} else {
- logInformation2("Resolution results discarded for ${debuggingString(source)}; sourceTime = ${sourceTime}, resultTime = ${resultTime}, cacheTime = ${htmlEntry.modificationTime}", thrownException);
+ _logInformation2("Resolution results discarded for ${_debuggingString(source)}; sourceTime = ${sourceTime}, resultTime = ${resultTime}, cacheTime = ${htmlEntry.modificationTime}", thrownException);
HtmlEntryImpl htmlCopy = htmlEntry.writableCopy;
if (thrownException == null || resultTime >= 0) {
//
@@ -6995,7 +7166,7 @@
* @return an entry containing the computed results
* @throws AnalysisException if the results could not be recorded
*/
- DartEntry recordScanDartTaskResults(ScanDartTask task) {
+ DartEntry _recordScanDartTaskResults(ScanDartTask task) {
Source source = task.source;
AnalysisException thrownException = task.exception;
DartEntry dartEntry = null;
@@ -7013,8 +7184,8 @@
if (sourceTime == resultTime) {
if (dartEntry.modificationTime != sourceTime) {
// The source has changed without the context being notified. Simulate notification.
- sourceChanged(source);
- dartEntry = getReadableDartEntry(source);
+ _sourceChanged(source);
+ dartEntry = _getReadableDartEntry(source);
if (dartEntry == null) {
throw new AnalysisException.con1("A Dart file became a non-Dart file: ${source.fullName}");
}
@@ -7027,10 +7198,10 @@
dartCopy.setValue(DartEntry.SCAN_ERRORS, task.errors);
_cache.storedAst(source);
_workManager.add(source, SourcePriority.NORMAL_PART);
- ChangeNoticeImpl notice = getNotice(source);
+ ChangeNoticeImpl notice = _getNotice(source);
notice.setErrors(dartEntry.allErrors, lineInfo);
} else {
- removeFromParts(source, dartEntry);
+ _removeFromParts(source, dartEntry);
dartCopy.recordScanError();
_cache.removedAst(source);
}
@@ -7038,7 +7209,7 @@
_cache.put(source, dartCopy);
dartEntry = dartCopy;
} else {
- logInformation2("Scan results discarded for ${debuggingString(source)}; sourceTime = ${sourceTime}, resultTime = ${resultTime}, cacheTime = ${dartEntry.modificationTime}", thrownException);
+ _logInformation2("Scan results discarded for ${_debuggingString(source)}; sourceTime = ${sourceTime}, resultTime = ${resultTime}, cacheTime = ${dartEntry.modificationTime}", thrownException);
DartEntryImpl dartCopy = dartEntry.writableCopy;
if (thrownException == null || resultTime >= 0) {
//
@@ -7046,7 +7217,7 @@
// will be re-analyzed using the up-to-date sources.
//
// dartCopy.recordScanNotInProcess();
- removeFromParts(source, dartEntry);
+ _removeFromParts(source, dartEntry);
dartCopy.invalidateAllInformation();
dartCopy.modificationTime = sourceTime;
_cache.removedAst(source);
@@ -7078,11 +7249,11 @@
* @param librarySource the library to be removed
* @param dartEntry the entry containing the list of included parts
*/
- void removeFromParts(Source librarySource, DartEntry dartEntry) {
+ void _removeFromParts(Source librarySource, DartEntry dartEntry) {
List<Source> oldParts = dartEntry.getValue(DartEntry.INCLUDED_PARTS);
for (int i = 0; i < oldParts.length; i++) {
Source partSource = oldParts[i];
- DartEntry partEntry = getReadableDartEntry(partSource);
+ DartEntry partEntry = _getReadableDartEntry(partSource);
if (partEntry != null && partEntry != dartEntry) {
DartEntryImpl partCopy = partEntry.writableCopy;
partCopy.removeContainingLibrary(librarySource);
@@ -7100,7 +7271,7 @@
*
* @param source the source to be removed
*/
- void removeFromPriorityOrder(Source source) {
+ void _removeFromPriorityOrder(Source source) {
int count = _priorityOrder.length;
List<Source> newOrder = new List<Source>();
for (int i = 0; i < count; i++) {
@@ -7122,18 +7293,18 @@
* @param source the source that has been added
* @return `true` if the new source is a Dart file
*/
- bool sourceAvailable(Source source) {
+ bool _sourceAvailable(Source source) {
SourceEntry sourceEntry = _cache.get(source);
if (sourceEntry == null) {
- sourceEntry = createSourceEntry(source);
- logInformation("Added new source: ${debuggingString(source)}");
+ sourceEntry = _createSourceEntry(source);
+ _logInformation("Added new source: ${_debuggingString(source)}");
} else {
SourceEntryImpl sourceCopy = sourceEntry.writableCopy;
int oldTime = sourceCopy.modificationTime;
sourceCopy.modificationTime = getModificationStamp(source);
// TODO(brianwilkerson) Understand why we're not invalidating the cache.
_cache.put(source, sourceCopy);
- logInformation("Added new source: ${debuggingString(source)} (previously modified at ${oldTime})");
+ _logInformation("Added new source: ${_debuggingString(source)} (previously modified at ${oldTime})");
}
if (sourceEntry is HtmlEntry) {
_workManager.add(source, SourcePriority.HTML);
@@ -7148,15 +7319,15 @@
*
* @param source the source that has been changed
*/
- void sourceChanged(Source source) {
+ void _sourceChanged(Source source) {
SourceEntry sourceEntry = _cache.get(source);
if (sourceEntry == null || sourceEntry.modificationTime == getModificationStamp(source)) {
// Either we have removed this source, in which case we don't care that it is changed, or we
// have already invalidated the cache and don't need to invalidate it again.
if (sourceEntry == null) {
- logInformation("Modified source, but there is no entry: ${debuggingString(source)}");
+ _logInformation("Modified source, but there is no entry: ${_debuggingString(source)}");
} else {
- logInformation("Modified source, but modification time matches: ${debuggingString(source)}");
+ _logInformation("Modified source, but modification time matches: ${_debuggingString(source)}");
}
return;
}
@@ -7164,12 +7335,12 @@
HtmlEntryImpl htmlCopy = sourceEntry.writableCopy;
int oldTime = htmlCopy.modificationTime;
htmlCopy.modificationTime = getModificationStamp(source);
- invalidateAngularResolution(htmlCopy);
+ _invalidateAngularResolution(htmlCopy);
htmlCopy.invalidateAllInformation();
_cache.put(source, htmlCopy);
_cache.removedAst(source);
_workManager.add(source, SourcePriority.HTML);
- logInformation("Modified HTML source: ${debuggingString(source)} (previously modified at ${oldTime})");
+ _logInformation("Modified HTML source: ${_debuggingString(source)} (previously modified at ${oldTime})");
} else if (sourceEntry is DartEntry) {
List<Source> containingLibraries = getLibrariesContaining(source);
Set<Source> librariesToInvalidate = new Set<Source>();
@@ -7181,19 +7352,19 @@
}
PrintStringWriter writer = new PrintStringWriter();
int oldTime = sourceEntry.modificationTime;
- writer.println("Modified Dart source: ${debuggingString(source)} (previously modified at ${oldTime})");
+ writer.println("Modified Dart source: ${_debuggingString(source)} (previously modified at ${oldTime})");
for (Source library in librariesToInvalidate) {
// for (Source library : containingLibraries) {
- invalidateLibraryResolution(library, writer);
+ _invalidateLibraryResolution(library, writer);
}
- removeFromParts(source, _cache.get(source) as DartEntry);
+ _removeFromParts(source, _cache.get(source) as DartEntry);
DartEntryImpl dartCopy = (_cache.get(source) as DartEntry).writableCopy;
dartCopy.modificationTime = getModificationStamp(source);
dartCopy.invalidateAllInformation();
_cache.put(source, dartCopy);
_cache.removedAst(source);
_workManager.add(source, SourcePriority.UNKNOWN);
- logInformation(writer.toString());
+ _logInformation(writer.toString());
}
}
@@ -7202,13 +7373,13 @@
*
* @param source the source that has been deleted
*/
- void sourceRemoved(Source source) {
+ void _sourceRemoved(Source source) {
PrintStringWriter writer = new PrintStringWriter();
- writer.println("Removed source: ${debuggingString(source)}");
+ writer.println("Removed source: ${_debuggingString(source)}");
SourceEntry sourceEntry = _cache.get(source);
if (sourceEntry is HtmlEntry) {
HtmlEntryImpl htmlCopy = sourceEntry.writableCopy;
- invalidateAngularResolution(htmlCopy);
+ _invalidateAngularResolution(htmlCopy);
} else if (sourceEntry is DartEntry) {
Set<Source> libraries = new Set<Source>();
for (Source librarySource in getLibrariesContaining(source)) {
@@ -7218,13 +7389,13 @@
}
}
for (Source librarySource in libraries) {
- invalidateLibraryResolution(librarySource, writer);
+ _invalidateLibraryResolution(librarySource, writer);
}
}
_cache.remove(source);
_workManager.remove(source);
- removeFromPriorityOrder(source);
- logInformation(writer.toString());
+ _removeFromPriorityOrder(source);
+ _logInformation(writer.toString());
}
/**
@@ -7236,7 +7407,7 @@
*
* @return `true` if at least one entry was invalid
*/
- bool validateCacheConsistency() {
+ bool _validateCacheConsistency() {
int consistencyCheckStart = JavaSystem.nanoTime();
List<Source> missingSources = new List<Source>();
int inconsistentCount = 0;
@@ -7245,7 +7416,7 @@
SourceEntry sourceEntry = entry.getValue();
int sourceTime = getModificationStamp(source);
if (sourceTime != sourceEntry.modificationTime) {
- sourceChanged(source);
+ _sourceChanged(source);
inconsistentCount++;
}
if (sourceEntry.exception != null) {
@@ -7269,7 +7440,7 @@
writer.print(" ");
writer.println(source.fullName);
}
- logInformation(writer.toString());
+ _logInformation(writer.toString());
return inconsistentCount > 0;
}
}
@@ -7283,31 +7454,44 @@
AnalysisContextImpl_AnalysisTaskResultRecorder(this.AnalysisContextImpl_this);
- DartEntry visitGenerateDartErrorsTask(GenerateDartErrorsTask task) => AnalysisContextImpl_this.recordGenerateDartErrorsTask(task);
+ @override
+ DartEntry visitGenerateDartErrorsTask(GenerateDartErrorsTask task) => AnalysisContextImpl_this._recordGenerateDartErrorsTask(task);
- DartEntry visitGenerateDartHintsTask(GenerateDartHintsTask task) => AnalysisContextImpl_this.recordGenerateDartHintsTask(task);
+ @override
+ DartEntry visitGenerateDartHintsTask(GenerateDartHintsTask task) => AnalysisContextImpl_this._recordGenerateDartHintsTask(task);
- SourceEntry visitGetContentTask(GetContentTask task) => AnalysisContextImpl_this.recordGetContentsTask(task);
+ @override
+ SourceEntry visitGetContentTask(GetContentTask task) => AnalysisContextImpl_this._recordGetContentsTask(task);
- DartEntry visitIncrementalAnalysisTask(IncrementalAnalysisTask task) => AnalysisContextImpl_this.recordIncrementalAnalysisTaskResults(task);
+ @override
+ DartEntry visitIncrementalAnalysisTask(IncrementalAnalysisTask task) => AnalysisContextImpl_this._recordIncrementalAnalysisTaskResults(task);
- DartEntry visitParseDartTask(ParseDartTask task) => AnalysisContextImpl_this.recordParseDartTaskResults(task);
+ @override
+ DartEntry visitParseDartTask(ParseDartTask task) => AnalysisContextImpl_this._recordParseDartTaskResults(task);
- HtmlEntry visitParseHtmlTask(ParseHtmlTask task) => AnalysisContextImpl_this.recordParseHtmlTaskResults(task);
+ @override
+ HtmlEntry visitParseHtmlTask(ParseHtmlTask task) => AnalysisContextImpl_this._recordParseHtmlTaskResults(task);
- HtmlEntry visitResolveAngularComponentTemplateTask(ResolveAngularComponentTemplateTask task) => AnalysisContextImpl_this.recordResolveAngularComponentTemplateTaskResults(task);
+ @override
+ HtmlEntry visitResolveAngularComponentTemplateTask(ResolveAngularComponentTemplateTask task) => AnalysisContextImpl_this._recordResolveAngularComponentTemplateTaskResults(task);
- HtmlEntry visitResolveAngularEntryHtmlTask(ResolveAngularEntryHtmlTask task) => AnalysisContextImpl_this.recordResolveAngularEntryHtmlTaskResults(task);
+ @override
+ HtmlEntry visitResolveAngularEntryHtmlTask(ResolveAngularEntryHtmlTask task) => AnalysisContextImpl_this._recordResolveAngularEntryHtmlTaskResults(task);
- DartEntry visitResolveDartDependenciesTask(ResolveDartDependenciesTask task) => AnalysisContextImpl_this.recordResolveDartDependenciesTaskResults(task);
+ @override
+ DartEntry visitResolveDartDependenciesTask(ResolveDartDependenciesTask task) => AnalysisContextImpl_this._recordResolveDartDependenciesTaskResults(task);
+ @override
DartEntry visitResolveDartLibraryTask(ResolveDartLibraryTask task) => AnalysisContextImpl_this.recordResolveDartLibraryTaskResults(task);
- DartEntry visitResolveDartUnitTask(ResolveDartUnitTask task) => AnalysisContextImpl_this.recordResolveDartUnitTaskResults(task);
+ @override
+ DartEntry visitResolveDartUnitTask(ResolveDartUnitTask task) => AnalysisContextImpl_this._recordResolveDartUnitTaskResults(task);
- HtmlEntry visitResolveHtmlTask(ResolveHtmlTask task) => AnalysisContextImpl_this.recordResolveHtmlTaskResults(task);
+ @override
+ HtmlEntry visitResolveHtmlTask(ResolveHtmlTask task) => AnalysisContextImpl_this._recordResolveHtmlTaskResults(task);
- DartEntry visitScanDartTask(ScanDartTask task) => AnalysisContextImpl_this.recordScanDartTaskResults(task);
+ @override
+ DartEntry visitScanDartTask(ScanDartTask task) => AnalysisContextImpl_this._recordScanDartTaskResults(task);
}
class AnalysisContextImpl_ContextRetentionPolicy implements CacheRetentionPolicy {
@@ -7315,6 +7499,7 @@
AnalysisContextImpl_ContextRetentionPolicy(this.AnalysisContextImpl_this);
+ @override
RetentionPriority getAstPriority(Source source, SourceEntry sourceEntry) {
for (Source prioritySource in AnalysisContextImpl_this._priorityOrder) {
if (source == prioritySource) {
@@ -7323,14 +7508,14 @@
}
if (sourceEntry is DartEntry) {
DartEntry dartEntry = sourceEntry;
- if (astIsNeeded(dartEntry)) {
+ if (_astIsNeeded(dartEntry)) {
return RetentionPriority.MEDIUM;
}
}
return RetentionPriority.LOW;
}
- bool astIsNeeded(DartEntry dartEntry) => dartEntry.hasInvalidData(DartEntry.HINTS) || dartEntry.hasInvalidData(DartEntry.VERIFICATION_ERRORS) || dartEntry.hasInvalidData(DartEntry.RESOLUTION_ERRORS);
+ bool _astIsNeeded(DartEntry dartEntry) => dartEntry.hasInvalidData(DartEntry.HINTS) || dartEntry.hasInvalidData(DartEntry.VERIFICATION_ERRORS) || dartEntry.hasInvalidData(DartEntry.RESOLUTION_ERRORS);
}
/**
@@ -7478,6 +7663,7 @@
incremental = options.incremental;
}
+ @override
bool get generateSdkErrors => _generateSdkErrors;
/**
@@ -7537,8 +7723,10 @@
*/
ChangeNoticeImpl(this.source);
+ @override
List<AnalysisError> get errors => _errors;
+ @override
LineInfo get lineInfo => _lineInfo;
/**
@@ -7552,10 +7740,11 @@
this._errors = errors;
this._lineInfo = lineInfo;
if (lineInfo == null) {
- AnalysisEngine.instance.logger.logInformation3("No line info: ${source}", new JavaException());
+ AnalysisEngine.instance.logger.logInformation2("No line info: ${source}", new JavaException());
}
}
+ @override
String toString() => "Changes for ${source.fullName}";
}
@@ -7574,6 +7763,7 @@
*/
InternalAnalysisContext _sdkAnalysisContext;
+ @override
void addSourceInfo(Source source, SourceEntry info) {
if (source.isInSystemLibrary) {
_sdkAnalysisContext.addSourceInfo(source, info);
@@ -7582,6 +7772,7 @@
}
}
+ @override
List<AnalysisError> computeErrors(Source source) {
if (source.isInSystemLibrary) {
return _sdkAnalysisContext.computeErrors(source);
@@ -7590,6 +7781,7 @@
}
}
+ @override
List<Source> computeExportedLibraries(Source source) {
if (source.isInSystemLibrary) {
return _sdkAnalysisContext.computeExportedLibraries(source);
@@ -7598,6 +7790,7 @@
}
}
+ @override
HtmlElement computeHtmlElement(Source source) {
if (source.isInSystemLibrary) {
return _sdkAnalysisContext.computeHtmlElement(source);
@@ -7606,6 +7799,7 @@
}
}
+ @override
List<Source> computeImportedLibraries(Source source) {
if (source.isInSystemLibrary) {
return _sdkAnalysisContext.computeImportedLibraries(source);
@@ -7614,6 +7808,7 @@
}
}
+ @override
SourceKind computeKindOf(Source source) {
if (source.isInSystemLibrary) {
return _sdkAnalysisContext.computeKindOf(source);
@@ -7622,6 +7817,7 @@
}
}
+ @override
LibraryElement computeLibraryElement(Source source) {
if (source.isInSystemLibrary) {
return _sdkAnalysisContext.computeLibraryElement(source);
@@ -7630,6 +7826,7 @@
}
}
+ @override
LineInfo computeLineInfo(Source source) {
if (source.isInSystemLibrary) {
return _sdkAnalysisContext.computeLineInfo(source);
@@ -7638,6 +7835,7 @@
}
}
+ @override
ResolvableCompilationUnit computeResolvableCompilationUnit(Source source) {
if (source.isInSystemLibrary) {
return _sdkAnalysisContext.computeResolvableCompilationUnit(source);
@@ -7646,6 +7844,7 @@
}
}
+ @override
AnalysisErrorInfo getErrors(Source source) {
if (source.isInSystemLibrary) {
return _sdkAnalysisContext.getErrors(source);
@@ -7654,6 +7853,7 @@
}
}
+ @override
HtmlElement getHtmlElement(Source source) {
if (source.isInSystemLibrary) {
return _sdkAnalysisContext.getHtmlElement(source);
@@ -7662,6 +7862,7 @@
}
}
+ @override
List<Source> getHtmlFilesReferencing(Source source) {
if (source.isInSystemLibrary) {
return _sdkAnalysisContext.getHtmlFilesReferencing(source);
@@ -7670,6 +7871,7 @@
}
}
+ @override
SourceKind getKindOf(Source source) {
if (source.isInSystemLibrary) {
return _sdkAnalysisContext.getKindOf(source);
@@ -7678,6 +7880,7 @@
}
}
+ @override
List<Source> getLibrariesContaining(Source source) {
if (source.isInSystemLibrary) {
return _sdkAnalysisContext.getLibrariesContaining(source);
@@ -7686,6 +7889,7 @@
}
}
+ @override
List<Source> getLibrariesDependingOn(Source librarySource) {
if (librarySource.isInSystemLibrary) {
return _sdkAnalysisContext.getLibrariesDependingOn(librarySource);
@@ -7694,6 +7898,7 @@
}
}
+ @override
LibraryElement getLibraryElement(Source source) {
if (source.isInSystemLibrary) {
return _sdkAnalysisContext.getLibraryElement(source);
@@ -7702,8 +7907,10 @@
}
}
+ @override
List<Source> get librarySources => ArrayUtils.addAll(super.librarySources, _sdkAnalysisContext.librarySources);
+ @override
LineInfo getLineInfo(Source source) {
if (source.isInSystemLibrary) {
return _sdkAnalysisContext.getLineInfo(source);
@@ -7712,6 +7919,7 @@
}
}
+ @override
Namespace getPublicNamespace(LibraryElement library) {
Source source = library.source;
if (source.isInSystemLibrary) {
@@ -7721,6 +7929,7 @@
}
}
+ @override
Namespace getPublicNamespace2(Source source) {
if (source.isInSystemLibrary) {
return _sdkAnalysisContext.getPublicNamespace2(source);
@@ -7729,6 +7938,7 @@
}
}
+ @override
CompilationUnit getResolvedCompilationUnit(Source unitSource, LibraryElement library) {
if (unitSource.isInSystemLibrary) {
return _sdkAnalysisContext.getResolvedCompilationUnit(unitSource, library);
@@ -7737,6 +7947,7 @@
}
}
+ @override
CompilationUnit getResolvedCompilationUnit2(Source unitSource, Source librarySource) {
if (unitSource.isInSystemLibrary) {
return _sdkAnalysisContext.getResolvedCompilationUnit2(unitSource, librarySource);
@@ -7745,6 +7956,7 @@
}
}
+ @override
bool isClientLibrary(Source librarySource) {
if (librarySource.isInSystemLibrary) {
return _sdkAnalysisContext.isClientLibrary(librarySource);
@@ -7753,6 +7965,7 @@
}
}
+ @override
bool isServerLibrary(Source librarySource) {
if (librarySource.isInSystemLibrary) {
return _sdkAnalysisContext.isServerLibrary(librarySource);
@@ -7761,6 +7974,7 @@
}
}
+ @override
CompilationUnit parseCompilationUnit(Source source) {
if (source.isInSystemLibrary) {
return _sdkAnalysisContext.parseCompilationUnit(source);
@@ -7769,6 +7983,7 @@
}
}
+ @override
ht.HtmlUnit parseHtmlUnit(Source source) {
if (source.isInSystemLibrary) {
return _sdkAnalysisContext.parseHtmlUnit(source);
@@ -7777,6 +7992,7 @@
}
}
+ @override
void recordLibraryElements(Map<Source, LibraryElement> elementMap) {
if (elementMap.isEmpty) {
return;
@@ -7793,6 +8009,7 @@
}
}
+ @override
CompilationUnit resolveCompilationUnit(Source source, LibraryElement library) {
if (source.isInSystemLibrary) {
return _sdkAnalysisContext.resolveCompilationUnit(source, library);
@@ -7801,6 +8018,7 @@
}
}
+ @override
CompilationUnit resolveCompilationUnit2(Source unitSource, Source librarySource) {
if (unitSource.isInSystemLibrary) {
return _sdkAnalysisContext.resolveCompilationUnit2(unitSource, librarySource);
@@ -7809,6 +8027,7 @@
}
}
+ @override
ht.HtmlUnit resolveHtmlUnit(Source unitSource) {
if (unitSource.isInSystemLibrary) {
return _sdkAnalysisContext.resolveHtmlUnit(unitSource);
@@ -7817,6 +8036,7 @@
}
}
+ @override
void setChangedContents(Source source, String contents, int offset, int oldLength, int newLength) {
if (source.isInSystemLibrary) {
_sdkAnalysisContext.setChangedContents(source, contents, offset, oldLength, newLength);
@@ -7825,6 +8045,7 @@
}
}
+ @override
void setContents(Source source, String contents) {
if (source.isInSystemLibrary) {
_sdkAnalysisContext.setContents(source, contents);
@@ -7833,6 +8054,7 @@
}
}
+ @override
void set sourceFactory(SourceFactory factory) {
super.sourceFactory = factory;
DartSdk sdk = factory.dartSdk;
@@ -8027,12 +8249,21 @@
*/
class InstrumentedAnalysisContextImpl implements InternalAnalysisContext {
/**
+ * If the current thread is the UI thread, then note this in the specified instrumentation and
+ * append this information to the log.
+ *
+ * @param instrumentation the instrumentation, not `null`
+ */
+ static void _checkThread(InstrumentationBuilder instrumentation) {
+ }
+
+ /**
* Record an exception that was thrown during analysis.
*
* @param instrumentation the instrumentation builder being used to record the exception
* @param exception the exception being reported
*/
- static void recordAnalysisException(InstrumentationBuilder instrumentation, AnalysisException exception) {
+ static void _recordAnalysisException(InstrumentationBuilder instrumentation, AnalysisException exception) {
instrumentation.record(exception);
}
@@ -8062,12 +8293,15 @@
_basis = context;
}
+ @override
void addSourceInfo(Source source, SourceEntry info) {
_basis.addSourceInfo(source, info);
}
+ @override
void applyChanges(ChangeSet changeSet) {
InstrumentationBuilder instrumentation = Instrumentation.builder2("Analysis-applyChanges");
+ _checkThread(instrumentation);
try {
instrumentation.metric3("contextId", _contextId);
_basis.applyChanges(changeSet);
@@ -8076,8 +8310,10 @@
}
}
+ @override
String computeDocumentationComment(Element element) {
InstrumentationBuilder instrumentation = Instrumentation.builder2("Analysis-computeDocumentationComment");
+ _checkThread(instrumentation);
try {
instrumentation.metric3("contextId", _contextId);
return _basis.computeDocumentationComment(element);
@@ -8086,8 +8322,10 @@
}
}
+ @override
List<AnalysisError> computeErrors(Source source) {
InstrumentationBuilder instrumentation = Instrumentation.builder2("Analysis-computeErrors");
+ _checkThread(instrumentation);
try {
instrumentation.metric3("contextId", _contextId);
List<AnalysisError> errors = _basis.computeErrors(source);
@@ -8098,25 +8336,31 @@
}
}
+ @override
List<Source> computeExportedLibraries(Source source) => _basis.computeExportedLibraries(source);
+ @override
HtmlElement computeHtmlElement(Source source) {
InstrumentationBuilder instrumentation = Instrumentation.builder2("Analysis-computeHtmlElement");
+ _checkThread(instrumentation);
try {
instrumentation.metric3("contextId", _contextId);
return _basis.computeHtmlElement(source);
} on AnalysisException catch (e) {
- recordAnalysisException(instrumentation, e);
+ _recordAnalysisException(instrumentation, e);
throw e;
} finally {
instrumentation.log();
}
}
+ @override
List<Source> computeImportedLibraries(Source source) => _basis.computeImportedLibraries(source);
+ @override
SourceKind computeKindOf(Source source) {
InstrumentationBuilder instrumentation = Instrumentation.builder2("Analysis-computeKindOf");
+ _checkThread(instrumentation);
try {
instrumentation.metric3("contextId", _contextId);
return _basis.computeKindOf(source);
@@ -8125,36 +8369,55 @@
}
}
+ @override
LibraryElement computeLibraryElement(Source source) {
InstrumentationBuilder instrumentation = Instrumentation.builder2("Analysis-computeLibraryElement");
+ _checkThread(instrumentation);
try {
instrumentation.metric3("contextId", _contextId);
return _basis.computeLibraryElement(source);
} on AnalysisException catch (e) {
- recordAnalysisException(instrumentation, e);
+ _recordAnalysisException(instrumentation, e);
throw e;
} finally {
instrumentation.log();
}
}
+ @override
LineInfo computeLineInfo(Source source) {
InstrumentationBuilder instrumentation = Instrumentation.builder2("Analysis-computeLineInfo");
+ _checkThread(instrumentation);
try {
instrumentation.metric3("contextId", _contextId);
return _basis.computeLineInfo(source);
} on AnalysisException catch (e) {
- recordAnalysisException(instrumentation, e);
+ _recordAnalysisException(instrumentation, e);
throw e;
} finally {
instrumentation.log();
}
}
+ @override
ResolvableCompilationUnit computeResolvableCompilationUnit(Source source) => _basis.computeResolvableCompilationUnit(source);
+ @override
+ void dispose() {
+ InstrumentationBuilder instrumentation = Instrumentation.builder2("Analysis-dispose");
+ _checkThread(instrumentation);
+ try {
+ instrumentation.metric3("contextId", _contextId);
+ _basis.dispose();
+ } finally {
+ instrumentation.log();
+ }
+ }
+
+ @override
bool exists(Source source) {
InstrumentationBuilder instrumentation = Instrumentation.builder2("Analysis-exists");
+ _checkThread(instrumentation);
try {
instrumentation.metric3("contextId", _contextId);
return _basis.exists(source);
@@ -8163,8 +8426,10 @@
}
}
+ @override
AnalysisContext extractContext(SourceContainer container) {
InstrumentationBuilder instrumentation = Instrumentation.builder2("Analysis-extractContext");
+ _checkThread(instrumentation);
try {
instrumentation.metric3("contextId", _contextId);
InstrumentedAnalysisContextImpl newContext = new InstrumentedAnalysisContextImpl();
@@ -8175,10 +8440,13 @@
}
}
+ @override
InternalAnalysisContext extractContextInto(SourceContainer container, InternalAnalysisContext newContext) => _basis.extractContextInto(container, newContext);
+ @override
AnalysisOptions get analysisOptions {
InstrumentationBuilder instrumentation = Instrumentation.builder2("Analysis-getAnalysisOptions");
+ _checkThread(instrumentation);
try {
instrumentation.metric3("contextId", _contextId);
return _basis.analysisOptions;
@@ -8192,8 +8460,10 @@
*/
AnalysisContext get basis => _basis;
+ @override
CompilationUnitElement getCompilationUnitElement(Source unitSource, Source librarySource) {
InstrumentationBuilder instrumentation = Instrumentation.builder2("Analysis-getCompilationUnitElement");
+ _checkThread(instrumentation);
try {
instrumentation.metric3("contextId", _contextId);
return _basis.getCompilationUnitElement(unitSource, librarySource);
@@ -8202,14 +8472,13 @@
}
}
+ @override
TimestampedData<String> getContents(Source source) => _basis.getContents(source);
- void getContentsToReceiver(Source source, Source_ContentReceiver receiver) {
- _basis.getContentsToReceiver(source, receiver);
- }
-
+ @override
Element getElement(ElementLocation location) {
InstrumentationBuilder instrumentation = Instrumentation.builder2("Analysis-getElement");
+ _checkThread(instrumentation);
try {
instrumentation.metric3("contextId", _contextId);
return _basis.getElement(location);
@@ -8218,8 +8487,10 @@
}
}
+ @override
AnalysisErrorInfo getErrors(Source source) {
InstrumentationBuilder instrumentation = Instrumentation.builder2("Analysis-getErrors");
+ _checkThread(instrumentation);
try {
instrumentation.metric3("contextId", _contextId);
AnalysisErrorInfo ret = _basis.getErrors(source);
@@ -8232,8 +8503,10 @@
}
}
+ @override
HtmlElement getHtmlElement(Source source) {
InstrumentationBuilder instrumentation = Instrumentation.builder2("Analysis-getHtmlElement");
+ _checkThread(instrumentation);
try {
instrumentation.metric3("contextId", _contextId);
return _basis.getHtmlElement(source);
@@ -8242,8 +8515,10 @@
}
}
+ @override
List<Source> getHtmlFilesReferencing(Source source) {
InstrumentationBuilder instrumentation = Instrumentation.builder2("Analysis-getHtmlFilesReferencing");
+ _checkThread(instrumentation);
try {
instrumentation.metric3("contextId", _contextId);
List<Source> ret = _basis.getHtmlFilesReferencing(source);
@@ -8256,8 +8531,10 @@
}
}
+ @override
List<Source> get htmlSources {
InstrumentationBuilder instrumentation = Instrumentation.builder2("Analysis-getHtmlSources");
+ _checkThread(instrumentation);
try {
instrumentation.metric3("contextId", _contextId);
List<Source> ret = _basis.htmlSources;
@@ -8270,8 +8547,10 @@
}
}
+ @override
SourceKind getKindOf(Source source) {
InstrumentationBuilder instrumentation = Instrumentation.builder2("Analysis-getKindOf");
+ _checkThread(instrumentation);
try {
instrumentation.metric3("contextId", _contextId);
return _basis.getKindOf(source);
@@ -8280,8 +8559,10 @@
}
}
+ @override
List<Source> get launchableClientLibrarySources {
InstrumentationBuilder instrumentation = Instrumentation.builder2("Analysis-getLaunchableClientLibrarySources");
+ _checkThread(instrumentation);
try {
instrumentation.metric3("contextId", _contextId);
List<Source> ret = _basis.launchableClientLibrarySources;
@@ -8294,8 +8575,10 @@
}
}
+ @override
List<Source> get launchableServerLibrarySources {
InstrumentationBuilder instrumentation = Instrumentation.builder2("Analysis-getLaunchableServerLibrarySources");
+ _checkThread(instrumentation);
try {
instrumentation.metric3("contextId", _contextId);
List<Source> ret = _basis.launchableServerLibrarySources;
@@ -8308,8 +8591,10 @@
}
}
+ @override
List<Source> getLibrariesContaining(Source source) {
InstrumentationBuilder instrumentation = Instrumentation.builder2("Analysis-getLibrariesContaining");
+ _checkThread(instrumentation);
try {
instrumentation.metric3("contextId", _contextId);
List<Source> ret = _basis.getLibrariesContaining(source);
@@ -8322,8 +8607,10 @@
}
}
+ @override
List<Source> getLibrariesDependingOn(Source librarySource) {
InstrumentationBuilder instrumentation = Instrumentation.builder2("Analysis-getLibrariesDependingOn");
+ _checkThread(instrumentation);
try {
instrumentation.metric3("contextId", _contextId);
List<Source> ret = _basis.getLibrariesDependingOn(librarySource);
@@ -8336,8 +8623,10 @@
}
}
+ @override
LibraryElement getLibraryElement(Source source) {
InstrumentationBuilder instrumentation = Instrumentation.builder2("Analysis-getLibraryElement");
+ _checkThread(instrumentation);
try {
instrumentation.metric3("contextId", _contextId);
return _basis.getLibraryElement(source);
@@ -8346,8 +8635,10 @@
}
}
+ @override
List<Source> get librarySources {
InstrumentationBuilder instrumentation = Instrumentation.builder2("Analysis-getLibrarySources");
+ _checkThread(instrumentation);
try {
instrumentation.metric3("contextId", _contextId);
List<Source> ret = _basis.librarySources;
@@ -8360,8 +8651,10 @@
}
}
+ @override
LineInfo getLineInfo(Source source) {
InstrumentationBuilder instrumentation = Instrumentation.builder2("Analysis-getLineInfo");
+ _checkThread(instrumentation);
try {
instrumentation.metric3("contextId", _contextId);
return _basis.getLineInfo(source);
@@ -8370,8 +8663,10 @@
}
}
+ @override
int getModificationStamp(Source source) {
InstrumentationBuilder instrumentation = Instrumentation.builder2("Analysis-getModificationStamp");
+ _checkThread(instrumentation);
try {
instrumentation.metric3("contextId", _contextId);
return _basis.getModificationStamp(source);
@@ -8380,12 +8675,16 @@
}
}
+ @override
Namespace getPublicNamespace(LibraryElement library) => _basis.getPublicNamespace(library);
+ @override
Namespace getPublicNamespace2(Source source) => _basis.getPublicNamespace2(source);
+ @override
List<Source> get refactoringUnsafeSources {
InstrumentationBuilder instrumentation = Instrumentation.builder2("Analysis-getRefactoringUnsafeSources");
+ _checkThread(instrumentation);
try {
instrumentation.metric3("contextId", _contextId);
return _basis.refactoringUnsafeSources;
@@ -8394,8 +8693,10 @@
}
}
+ @override
CompilationUnit getResolvedCompilationUnit(Source unitSource, LibraryElement library) {
InstrumentationBuilder instrumentation = Instrumentation.builder2("Analysis-getResolvedCompilationUnit");
+ _checkThread(instrumentation);
try {
instrumentation.metric3("contextId", _contextId);
return _basis.getResolvedCompilationUnit(unitSource, library);
@@ -8404,8 +8705,10 @@
}
}
+ @override
CompilationUnit getResolvedCompilationUnit2(Source unitSource, Source librarySource) {
InstrumentationBuilder instrumentation = Instrumentation.builder2("Analysis-getResolvedCompilationUnit");
+ _checkThread(instrumentation);
try {
instrumentation.metric3("contextId", _contextId);
return _basis.getResolvedCompilationUnit2(unitSource, librarySource);
@@ -8414,8 +8717,10 @@
}
}
+ @override
ht.HtmlUnit getResolvedHtmlUnit(Source htmlSource) {
InstrumentationBuilder instrumentation = Instrumentation.builder2("Analysis-getResolvedHtmlUnit");
+ _checkThread(instrumentation);
try {
instrumentation.metric3("contextId", _contextId);
return _basis.getResolvedHtmlUnit(htmlSource);
@@ -8424,8 +8729,10 @@
}
}
+ @override
SourceFactory get sourceFactory {
InstrumentationBuilder instrumentation = Instrumentation.builder2("Analysis-getSourceFactory");
+ _checkThread(instrumentation);
try {
instrumentation.metric3("contextId", _contextId);
return _basis.sourceFactory;
@@ -8434,14 +8741,19 @@
}
}
+ @override
AnalysisContentStatistics get statistics => _basis.statistics;
+ @override
TypeProvider get typeProvider => _basis.typeProvider;
+ @override
TimestampedData<CompilationUnit> internalResolveCompilationUnit(Source unitSource, LibraryElement libraryElement) => _basis.internalResolveCompilationUnit(unitSource, libraryElement);
+ @override
bool isClientLibrary(Source librarySource) {
InstrumentationBuilder instrumentation = Instrumentation.builder2("Analysis-isClientLibrary");
+ _checkThread(instrumentation);
try {
instrumentation.metric3("contextId", _contextId);
return _basis.isClientLibrary(librarySource);
@@ -8450,8 +8762,22 @@
}
}
+ @override
+ bool get isDisposed {
+ InstrumentationBuilder instrumentation = Instrumentation.builder2("Analysis-isDisposed");
+ _checkThread(instrumentation);
+ try {
+ instrumentation.metric3("contextId", _contextId);
+ return _basis.isDisposed;
+ } finally {
+ instrumentation.log();
+ }
+ }
+
+ @override
bool isServerLibrary(Source librarySource) {
InstrumentationBuilder instrumentation = Instrumentation.builder2("Analysis-isServerLibrary");
+ _checkThread(instrumentation);
try {
instrumentation.metric3("contextId", _contextId);
return _basis.isServerLibrary(librarySource);
@@ -8460,8 +8786,10 @@
}
}
+ @override
void mergeContext(AnalysisContext context) {
InstrumentationBuilder instrumentation = Instrumentation.builder2("Analysis-mergeContext");
+ _checkThread(instrumentation);
try {
instrumentation.metric3("contextId", _contextId);
if (context is InstrumentedAnalysisContextImpl) {
@@ -8473,34 +8801,40 @@
}
}
+ @override
CompilationUnit parseCompilationUnit(Source source) {
InstrumentationBuilder instrumentation = Instrumentation.builder2("Analysis-parseCompilationUnit");
+ _checkThread(instrumentation);
try {
instrumentation.metric3("contextId", _contextId);
return _basis.parseCompilationUnit(source);
} on AnalysisException catch (e) {
- recordAnalysisException(instrumentation, e);
+ _recordAnalysisException(instrumentation, e);
throw e;
} finally {
instrumentation.log();
}
}
+ @override
ht.HtmlUnit parseHtmlUnit(Source source) {
InstrumentationBuilder instrumentation = Instrumentation.builder2("Analysis-parseHtmlUnit");
+ _checkThread(instrumentation);
try {
instrumentation.metric3("contextId", _contextId);
return _basis.parseHtmlUnit(source);
} on AnalysisException catch (e) {
- recordAnalysisException(instrumentation, e);
+ _recordAnalysisException(instrumentation, e);
throw e;
} finally {
instrumentation.log();
}
}
+ @override
AnalysisResult performAnalysisTask() {
InstrumentationBuilder instrumentation = Instrumentation.builder2("Analysis-performAnalysisTask");
+ _checkThread(instrumentation);
try {
instrumentation.metric3("contextId", _contextId);
AnalysisResult result = _basis.performAnalysisTask();
@@ -8513,51 +8847,60 @@
}
}
+ @override
void recordLibraryElements(Map<Source, LibraryElement> elementMap) {
_basis.recordLibraryElements(elementMap);
}
+ @override
CompilationUnit resolveCompilationUnit(Source unitSource, LibraryElement library) {
InstrumentationBuilder instrumentation = Instrumentation.builder2("Analysis-resolveCompilationUnit");
+ _checkThread(instrumentation);
try {
instrumentation.metric3("contextId", _contextId);
return _basis.resolveCompilationUnit(unitSource, library);
} on AnalysisException catch (e) {
- recordAnalysisException(instrumentation, e);
+ _recordAnalysisException(instrumentation, e);
throw e;
} finally {
instrumentation.log();
}
}
+ @override
CompilationUnit resolveCompilationUnit2(Source unitSource, Source librarySource) {
InstrumentationBuilder instrumentation = Instrumentation.builder2("Analysis-resolveCompilationUnit");
+ _checkThread(instrumentation);
try {
instrumentation.metric3("contextId", _contextId);
return _basis.resolveCompilationUnit2(unitSource, librarySource);
} on AnalysisException catch (e) {
- recordAnalysisException(instrumentation, e);
+ _recordAnalysisException(instrumentation, e);
throw e;
} finally {
instrumentation.log();
}
}
+ @override
ht.HtmlUnit resolveHtmlUnit(Source htmlSource) {
InstrumentationBuilder instrumentation = Instrumentation.builder2("Analysis-resolveHtmlUnit");
+ _checkThread(instrumentation);
try {
instrumentation.metric3("contextId", _contextId);
return _basis.resolveHtmlUnit(htmlSource);
} on AnalysisException catch (e) {
- recordAnalysisException(instrumentation, e);
+ _recordAnalysisException(instrumentation, e);
throw e;
} finally {
instrumentation.log();
}
}
+ @override
void set analysisOptions(AnalysisOptions options) {
InstrumentationBuilder instrumentation = Instrumentation.builder2("Analysis-setAnalysisOptions");
+ _checkThread(instrumentation);
try {
instrumentation.metric3("contextId", _contextId);
_basis.analysisOptions = options;
@@ -8566,8 +8909,10 @@
}
}
+ @override
void set analysisPriorityOrder(List<Source> sources) {
InstrumentationBuilder instrumentation = Instrumentation.builder2("Analysis-setAnalysisPriorityOrder");
+ _checkThread(instrumentation);
try {
instrumentation.metric3("contextId", _contextId);
_basis.analysisPriorityOrder = sources;
@@ -8576,8 +8921,10 @@
}
}
+ @override
void setChangedContents(Source source, String contents, int offset, int oldLength, int newLength) {
InstrumentationBuilder instrumentation = Instrumentation.builder2("Analysis-setChangedContents");
+ _checkThread(instrumentation);
try {
instrumentation.metric3("contextId", _contextId);
_basis.setChangedContents(source, contents, offset, oldLength, newLength);
@@ -8586,8 +8933,10 @@
}
}
+ @override
void setContents(Source source, String contents) {
InstrumentationBuilder instrumentation = Instrumentation.builder2("Analysis-setContents");
+ _checkThread(instrumentation);
try {
instrumentation.metric3("contextId", _contextId);
_basis.setContents(source, contents);
@@ -8596,8 +8945,10 @@
}
}
+ @override
void set sourceFactory(SourceFactory factory) {
InstrumentationBuilder instrumentation = Instrumentation.builder2("Analysis-setSourceFactory");
+ _checkThread(instrumentation);
try {
instrumentation.metric3("contextId", _contextId);
_basis.sourceFactory = factory;
@@ -8818,6 +9169,7 @@
}
}
+ @override
void onError(AnalysisError error) {
Source source = error.source;
Set<AnalysisError> errorsForSource = _errors[source];
@@ -8834,89 +9186,105 @@
* structure when used to visit that structure.
*/
class ResolutionEraser extends GeneralizingAstVisitor<Object> {
+ @override
Object visitAssignmentExpression(AssignmentExpression node) {
node.staticElement = null;
node.propagatedElement = null;
return super.visitAssignmentExpression(node);
}
+ @override
Object visitBinaryExpression(BinaryExpression node) {
node.staticElement = null;
node.propagatedElement = null;
return super.visitBinaryExpression(node);
}
+ @override
Object visitCompilationUnit(CompilationUnit node) {
node.element = null;
return super.visitCompilationUnit(node);
}
+ @override
Object visitConstructorDeclaration(ConstructorDeclaration node) {
node.element = null;
return super.visitConstructorDeclaration(node);
}
+ @override
Object visitConstructorName(ConstructorName node) {
node.staticElement = null;
return super.visitConstructorName(node);
}
+ @override
Object visitDirective(Directive node) {
node.element = null;
return super.visitDirective(node);
}
+ @override
Object visitExpression(Expression node) {
node.staticType = null;
node.propagatedType = null;
return super.visitExpression(node);
}
+ @override
Object visitFunctionExpression(FunctionExpression node) {
node.element = null;
return super.visitFunctionExpression(node);
}
+ @override
Object visitFunctionExpressionInvocation(FunctionExpressionInvocation node) {
node.staticElement = null;
node.propagatedElement = null;
return super.visitFunctionExpressionInvocation(node);
}
+ @override
Object visitIndexExpression(IndexExpression node) {
node.staticElement = null;
node.propagatedElement = null;
return super.visitIndexExpression(node);
}
+ @override
Object visitInstanceCreationExpression(InstanceCreationExpression node) {
node.staticElement = null;
return super.visitInstanceCreationExpression(node);
}
+ @override
Object visitPostfixExpression(PostfixExpression node) {
node.staticElement = null;
node.propagatedElement = null;
return super.visitPostfixExpression(node);
}
+ @override
Object visitPrefixExpression(PrefixExpression node) {
node.staticElement = null;
node.propagatedElement = null;
return super.visitPrefixExpression(node);
}
+ @override
Object visitRedirectingConstructorInvocation(RedirectingConstructorInvocation node) {
node.staticElement = null;
return super.visitRedirectingConstructorInvocation(node);
}
+ @override
Object visitSimpleIdentifier(SimpleIdentifier node) {
node.staticElement = null;
node.propagatedElement = null;
return super.visitSimpleIdentifier(node);
}
+ @override
Object visitSuperConstructorInvocation(SuperConstructorInvocation node) {
node.staticElement = null;
return super.visitSuperConstructorInvocation(node);
@@ -9243,8 +9611,8 @@
return false;
}
- static SimpleIdentifier createIdentifier(String name, int offset) {
- StringToken token = createStringToken(name, offset);
+ static SimpleIdentifier _createIdentifier(String name, int offset) {
+ StringToken token = _createStringToken(name, offset);
return new SimpleIdentifier(token);
}
@@ -9254,7 +9622,7 @@
* @param angularElements the list to fill with top-level [AngularElement]s
* @param classElement the [ClassElement] to get [AngularElement]s from
*/
- static void addAngularElementsFromClass(Set<AngularElement> angularElements, ClassElement classElement) {
+ static void _addAngularElementsFromClass(Set<AngularElement> angularElements, ClassElement classElement) {
for (ToolkitObjectElement toolkitObject in classElement.toolkitObjects) {
if (toolkitObject is AngularElement) {
angularElements.add(toolkitObject);
@@ -9268,7 +9636,7 @@
* @param libraryElement the [LibraryElement] to analyze
* @return the array of all top-level Angular elements that could be used in this library
*/
- static void addAngularElementsFromLibrary(Set<AngularElement> angularElements, LibraryElement library, Set<LibraryElement> visited) {
+ static void _addAngularElementsFromLibrary(Set<AngularElement> angularElements, LibraryElement library, Set<LibraryElement> visited) {
if (library == null) {
return;
}
@@ -9279,17 +9647,17 @@
for (CompilationUnitElement unit in library.units) {
angularElements.addAll(unit.angularViews);
for (ClassElement type in unit.types) {
- addAngularElementsFromClass(angularElements, type);
+ _addAngularElementsFromClass(angularElements, type);
}
}
// handle imports
for (ImportElement importElement in library.imports) {
LibraryElement importedLibrary = importElement.importedLibrary;
- addAngularElementsFromLibrary(angularElements, importedLibrary, visited);
+ _addAngularElementsFromLibrary(angularElements, importedLibrary, visited);
}
}
- static StringToken createStringToken(String name, int offset) => new StringToken(TokenType.IDENTIFIER, name, offset);
+ static StringToken _createStringToken(String name, int offset) => new StringToken(TokenType.IDENTIFIER, name, offset);
/**
* Returns the array of all top-level Angular elements that could be used in this library.
@@ -9297,16 +9665,16 @@
* @param libraryElement the [LibraryElement] to analyze
* @return the array of all top-level Angular elements that could be used in this library
*/
- static List<AngularElement> getAngularElements(Set<LibraryElement> libraries, LibraryElement libraryElement) {
+ static List<AngularElement> _getAngularElements(Set<LibraryElement> libraries, LibraryElement libraryElement) {
Set<AngularElement> angularElements = new Set();
- addAngularElementsFromLibrary(angularElements, libraryElement, libraries);
+ _addAngularElementsFromLibrary(angularElements, libraryElement, libraries);
return new List.from(angularElements);
}
/**
* Returns the external Dart [CompilationUnit] referenced by the given [HtmlUnit].
*/
- static CompilationUnit getDartUnit(AnalysisContext context, ht.HtmlUnit unit) {
+ static CompilationUnit _getDartUnit(AnalysisContext context, ht.HtmlUnit unit) {
for (HtmlScriptElement script in unit.element.scripts) {
if (script is ExternalHtmlScriptElement) {
Source scriptSource = script.scriptSource;
@@ -9318,7 +9686,7 @@
return null;
}
- static Set<Source> getLibrarySources(Set<LibraryElement> libraries) {
+ static Set<Source> _getLibrarySources(Set<LibraryElement> libraries) {
Set<Source> sources = new Set();
for (LibraryElement library in libraries) {
sources.add(library.source);
@@ -9379,14 +9747,14 @@
return null;
}
// prepare resolved Dart unit
- CompilationUnit dartUnit = getDartUnit(_context, _unit);
+ CompilationUnit dartUnit = _getDartUnit(_context, _unit);
if (dartUnit == null) {
return null;
}
// prepare accessible Angular elements
LibraryElement libraryElement = dartUnit.element.library;
Set<LibraryElement> libraries = new Set();
- List<AngularElement> angularElements = getAngularElements(libraries, libraryElement);
+ List<AngularElement> angularElements = _getAngularElements(libraries, libraryElement);
// resolve AngularComponentElement template URIs
// TODO(scheglov) resolve to HtmlElement to allow F3 ?
Set<Source> angularElementsSources = new Set();
@@ -9422,7 +9790,7 @@
}
}
// create AngularApplication
- AngularApplication application = new AngularApplication(_source, getLibrarySources(libraries), angularElements, new List.from(angularElementsSources));
+ AngularApplication application = new AngularApplication(_source, _getLibrarySources(libraries), angularElements, new List.from(angularElementsSources));
// set AngularApplication for each AngularElement
for (AngularElement angularElement in angularElements) {
(angularElement as AngularElementImpl).application = application;
@@ -9439,38 +9807,40 @@
*/
void resolveComponentTemplate(AngularApplication application, AngularComponentElement component) {
_isAngular = true;
- resolveInternal(application.elements, component);
+ _resolveInternal(application.elements, component);
}
/**
* Resolves [source] as an Angular application entry point.
*/
void resolveEntryPoint(AngularApplication application) {
- resolveInternal(application.elements, null);
+ _resolveInternal(application.elements, null);
}
+ @override
Object visitXmlAttributeNode(ht.XmlAttributeNode node) {
- parseEmbeddedExpressionsInAttribute(node);
- resolveExpressions(node.expressions);
+ _parseEmbeddedExpressionsInAttribute(node);
+ _resolveExpressions(node.expressions);
return super.visitXmlAttributeNode(node);
}
+ @override
Object visitXmlTagNode(ht.XmlTagNode node) {
bool wasAngular = _isAngular;
try {
// new Angular context
if (node.getAttribute(_NG_APP) != null) {
_isAngular = true;
- visitModelDirectives(node);
+ _visitModelDirectives(node);
}
// not Angular
if (!_isAngular) {
return super.visitXmlTagNode(node);
}
// process node in separate name scope
- pushNameScope();
+ _pushNameScope();
try {
- parseEmbeddedExpressionsInTag(node);
+ _parseEmbeddedExpressionsInTag(node);
// apply processors
for (NgProcessor processor in _processors) {
if (processor.canApply(node)) {
@@ -9478,11 +9848,11 @@
}
}
// resolve expressions
- resolveExpressions(node.expressions);
+ _resolveExpressions(node.expressions);
// process children
return super.visitXmlTagNode(node);
} finally {
- popNameScope();
+ _popNameScope();
}
} finally {
_isAngular = wasAngular;
@@ -9496,7 +9866,7 @@
* @param identifier the identifier to create variable for
* @return the new [LocalVariableElementImpl]
*/
- LocalVariableElementImpl createLocalVariableFromIdentifier(Type2 type, SimpleIdentifier identifier) {
+ LocalVariableElementImpl _createLocalVariableFromIdentifier(DartType type, SimpleIdentifier identifier) {
LocalVariableElementImpl variable = new LocalVariableElementImpl(identifier);
_definedVariables.add(variable);
variable.type = type;
@@ -9510,33 +9880,33 @@
* @param name the name of the variable
* @return the new [LocalVariableElementImpl]
*/
- LocalVariableElementImpl createLocalVariableWithName(Type2 type, String name) {
- SimpleIdentifier identifier = createIdentifier(name, 0);
- return createLocalVariableFromIdentifier(type, identifier);
+ LocalVariableElementImpl _createLocalVariableWithName(DartType type, String name) {
+ SimpleIdentifier identifier = _createIdentifier(name, 0);
+ return _createLocalVariableFromIdentifier(type, identifier);
}
/**
* Declares the given [LocalVariableElementImpl] in the [topNameScope].
*/
- void defineTopVariable(LocalVariableElementImpl variable) {
- recordDefinedVariable(variable);
+ void _defineTopVariable(LocalVariableElementImpl variable) {
+ _recordDefinedVariable(variable);
_topNameScope.define(variable);
- recordTypeLibraryInjected(variable);
+ _recordTypeLibraryInjected(variable);
}
/**
* Declares the given [LocalVariableElementImpl] in the current [nameScope].
*/
- void defineVariable(LocalVariableElementImpl variable) {
- recordDefinedVariable(variable);
+ void _defineVariable(LocalVariableElementImpl variable) {
+ _recordDefinedVariable(variable);
_nameScope.define(variable);
- recordTypeLibraryInjected(variable);
+ _recordTypeLibraryInjected(variable);
}
/**
* @return the [AngularElement] with the given name, maybe `null`.
*/
- AngularElement findAngularElement(String name) {
+ AngularElement _findAngularElement(String name) {
for (AngularElement element in _angularElements) {
if (name == element.name) {
return element;
@@ -9553,14 +9923,14 @@
/**
* Parses given [String] as an [AngularExpression] at the given offset.
*/
- AngularExpression parseAngularExpression(String contents, int startIndex, int endIndex, int offset) {
- Token token = scanDart(contents, startIndex, endIndex, offset);
- return parseAngularExpressionInToken(token);
+ AngularExpression _parseAngularExpression(String contents, int startIndex, int endIndex, int offset) {
+ Token token = _scanDart(contents, startIndex, endIndex, offset);
+ return _parseAngularExpressionInToken(token);
}
- AngularExpression parseAngularExpressionInToken(Token token) {
- List<Token> tokens = splitAtBar(token);
- Expression mainExpression = parseDartExpressionInToken(tokens[0]);
+ AngularExpression _parseAngularExpressionInToken(Token token) {
+ List<Token> tokens = _splitAtBar(token);
+ Expression mainExpression = _parseDartExpressionInToken(tokens[0]);
// parse filters
List<AngularFilterNode> filters = [];
for (int i = 1; i < tokens.length; i++) {
@@ -9568,7 +9938,7 @@
Token barToken = filterToken;
filterToken = filterToken.next;
// TODO(scheglov) report missing identifier
- SimpleIdentifier name = parseDartExpressionInToken(filterToken) as SimpleIdentifier;
+ SimpleIdentifier name = _parseDartExpressionInToken(filterToken) as SimpleIdentifier;
filterToken = name.endToken.next;
// parse arguments
List<AngularFilterArgument> arguments = [];
@@ -9578,10 +9948,10 @@
if (identical(colonToken.type, TokenType.COLON)) {
filterToken = filterToken.next;
} else {
- reportErrorForToken(AngularCode.MISSING_FILTER_COLON, colonToken, []);
+ _reportErrorForToken(AngularCode.MISSING_FILTER_COLON, colonToken, []);
}
// parse argument
- Expression argument = parseDartExpressionInToken(filterToken);
+ Expression argument = _parseDartExpressionInToken(filterToken);
arguments.add(new AngularFilterArgument(colonToken, argument));
// next token
filterToken = argument.endToken.next;
@@ -9595,66 +9965,66 @@
/**
* Parses given [String] as an [Expression] at the given offset.
*/
- Expression parseDartExpression(String contents, int startIndex, int endIndex, int offset) {
- Token token = scanDart(contents, startIndex, endIndex, offset);
- return parseDartExpressionInToken(token);
+ Expression _parseDartExpression(String contents, int startIndex, int endIndex, int offset) {
+ Token token = _scanDart(contents, startIndex, endIndex, offset);
+ return _parseDartExpressionInToken(token);
}
- Expression parseDartExpressionInToken(Token token) {
+ Expression _parseDartExpressionInToken(Token token) {
Parser parser = new Parser(_source, _errorListener);
return parser.parseExpression(token);
}
- void popNameScope() {
+ void _popNameScope() {
_nameScope = _resolver.popNameScope();
}
- void pushNameScope() {
+ void _pushNameScope() {
_nameScope = _resolver.pushNameScope();
}
/**
* Reports given [ErrorCode] at the given [AstNode].
*/
- void reportErrorForNode(ErrorCode errorCode, AstNode node, List<Object> arguments) {
- reportErrorForOffset(errorCode, node.offset, node.length, arguments);
+ void _reportErrorForNode(ErrorCode errorCode, AstNode node, List<Object> arguments) {
+ _reportErrorForOffset(errorCode, node.offset, node.length, arguments);
}
/**
* Reports given [ErrorCode] at the given position.
*/
- void reportErrorForOffset(ErrorCode errorCode, int offset, int length, List<Object> arguments) {
+ void _reportErrorForOffset(ErrorCode errorCode, int offset, int length, List<Object> arguments) {
_errorListener.onError(new AnalysisError.con2(_source, offset, length, errorCode, arguments));
}
/**
* Reports given [ErrorCode] at the given [Token].
*/
- void reportErrorForToken(ErrorCode errorCode, Token token, List<Object> arguments) {
- reportErrorForOffset(errorCode, token.offset, token.length, arguments);
+ void _reportErrorForToken(ErrorCode errorCode, Token token, List<Object> arguments) {
+ _reportErrorForOffset(errorCode, token.offset, token.length, arguments);
}
- void resolveExpression(AngularExpression angularExpression) {
+ void _resolveExpression(AngularExpression angularExpression) {
List<Expression> dartExpressions = angularExpression.expressions;
for (Expression dartExpression in dartExpressions) {
- resolveNode(dartExpression);
+ _resolveNode(dartExpression);
}
}
/**
* Resolves given [AstNode] using [resolver].
*/
- void resolveNode(AstNode node) {
+ void _resolveNode(AstNode node) {
node.accept(_resolver);
}
- Token scanDart(String contents, int startIndex, int endIndex, int offset) => ht.HtmlParser.scanDartSource(_source, _lineInfo, contents.substring(startIndex, endIndex), offset + startIndex, _errorListener);
+ Token _scanDart(String contents, int startIndex, int endIndex, int offset) => ht.HtmlParser.scanDartSource(_source, _lineInfo, contents.substring(startIndex, endIndex), offset + startIndex, _errorListener);
/**
* Puts into [libraryElement] an artificial [LibraryElementImpl] for this HTML
* [Source].
*/
- void createLibraryElement() {
+ void _createLibraryElement() {
// create CompilationUnitElementImpl
String unitName = _source.shortName;
_unitElement = new CompilationUnitElementImpl(unitName);
@@ -9673,7 +10043,7 @@
* Creates new [NgProcessor] for the given [AngularElement], maybe `null` if not
* supported.
*/
- NgProcessor createProcessor(AngularElement element) {
+ NgProcessor _createProcessor(AngularElement element) {
if (element is AngularComponentElement) {
AngularComponentElement component = element;
return new NgComponentElementProcessor(component);
@@ -9693,16 +10063,16 @@
* Puts into [resolver] an [ResolverVisitor] to resolve [Expression]s in
* [source].
*/
- void createResolver() {
+ void _createResolver() {
InheritanceManager inheritanceManager = new InheritanceManager(_libraryElement);
_resolver = new ResolverVisitor.con2(_libraryElement, _source, _typeProvider, inheritanceManager, _errorListener);
_topNameScope = _resolver.pushNameScope();
// add Scope variables - no type, no location, just to avoid warnings
{
- Type2 type = _typeProvider.dynamicType;
- _topNameScope.define(createLocalVariableWithName(type, "\$id"));
- _topNameScope.define(createLocalVariableWithName(type, "\$parent"));
- _topNameScope.define(createLocalVariableWithName(type, "\$root"));
+ DartType type = _typeProvider.dynamicType;
+ _topNameScope.define(_createLocalVariableWithName(type, "\$id"));
+ _topNameScope.define(_createLocalVariableWithName(type, "\$parent"));
+ _topNameScope.define(_createLocalVariableWithName(type, "\$root"));
}
}
@@ -9710,21 +10080,21 @@
* Defines variable for the given [AngularElement] with type of the enclosing
* [ClassElement].
*/
- void defineTopVariable_forClassElement(AngularElement element) {
+ void _defineTopVariable_forClassElement(AngularElement element) {
ClassElement classElement = element.enclosingElement as ClassElement;
InterfaceType type = classElement.type;
- LocalVariableElementImpl variable = createLocalVariableWithName(type, element.name);
- defineTopVariable(variable);
+ LocalVariableElementImpl variable = _createLocalVariableWithName(type, element.name);
+ _defineTopVariable(variable);
variable.toolkitObjects = <AngularElement> [element];
}
/**
* Defines variable for the given [AngularScopePropertyElement].
*/
- void defineTopVariable_forScopeProperty(AngularScopePropertyElement element) {
- Type2 type = element.type;
- LocalVariableElementImpl variable = createLocalVariableWithName(type, element.name);
- defineTopVariable(variable);
+ void _defineTopVariable_forScopeProperty(AngularScopePropertyElement element) {
+ DartType type = element.type;
+ LocalVariableElementImpl variable = _createLocalVariableWithName(type, element.name);
+ _defineTopVariable(variable);
variable.toolkitObjects = <AngularElement> [element];
}
@@ -9735,7 +10105,7 @@
* @param expressions the list to which embedded expressions are to be added
* @param token the token whose value is to be parsed
*/
- void parseEmbeddedExpressions(List<AngularMoustacheXmlExpression> expressions, ht.Token token) {
+ void _parseEmbeddedExpressions(List<AngularMoustacheXmlExpression> expressions, ht.Token token) {
// prepare Token information
String lexeme = token.lexeme;
int offset = token.offset;
@@ -9748,22 +10118,22 @@
return;
} else if (startIndex + AngularMoustacheXmlExpression.OPENING_DELIMITER_LENGTH < endIndex) {
startIndex += AngularMoustacheXmlExpression.OPENING_DELIMITER_LENGTH;
- AngularExpression expression = parseAngularExpression(lexeme, startIndex, endIndex, offset);
+ AngularExpression expression = _parseAngularExpression(lexeme, startIndex, endIndex, offset);
expressions.add(new AngularMoustacheXmlExpression(startIndex, endIndex, expression));
}
startIndex = StringUtilities.indexOf2(lexeme, endIndex + AngularMoustacheXmlExpression.CLOSING_DELIMITER_LENGTH, AngularMoustacheXmlExpression.OPENING_DELIMITER_CHAR, AngularMoustacheXmlExpression.OPENING_DELIMITER_CHAR);
}
}
- void parseEmbeddedExpressionsInAttribute(ht.XmlAttributeNode node) {
+ void _parseEmbeddedExpressionsInAttribute(ht.XmlAttributeNode node) {
List<AngularMoustacheXmlExpression> expressions = [];
- parseEmbeddedExpressions(expressions, node.valueToken);
+ _parseEmbeddedExpressions(expressions, node.valueToken);
if (!expressions.isEmpty) {
node.expressions = new List.from(expressions);
}
}
- void parseEmbeddedExpressionsInTag(ht.XmlTagNode node) {
+ void _parseEmbeddedExpressionsInTag(ht.XmlTagNode node) {
List<AngularMoustacheXmlExpression> expressions = [];
ht.Token token = node.attributeEnd;
ht.Token endToken = node.endToken;
@@ -9780,14 +10150,14 @@
}
}
if (!inChild && identical(token.type, ht.TokenType.TEXT)) {
- parseEmbeddedExpressions(expressions, token);
+ _parseEmbeddedExpressions(expressions, token);
}
token = token.next;
}
node.expressions = new List.from(expressions);
}
- void recordDefinedVariable(LocalVariableElementImpl variable) {
+ void _recordDefinedVariable(LocalVariableElementImpl variable) {
_definedVariables.add(variable);
_functionElement.localVariables = new List.from(_definedVariables);
}
@@ -9795,16 +10165,16 @@
/**
* When we inject variable, we give access to the library of its type.
*/
- void recordTypeLibraryInjected(LocalVariableElementImpl variable) {
+ void _recordTypeLibraryInjected(LocalVariableElementImpl variable) {
LibraryElement typeLibrary = variable.type.element.library;
_injectedLibraries.add(typeLibrary);
}
- void resolveExpressions(List<ht.XmlExpression> expressions) {
+ void _resolveExpressions(List<ht.XmlExpression> expressions) {
for (ht.XmlExpression xmlExpression in expressions) {
if (xmlExpression is AngularXmlExpression) {
AngularXmlExpression angularXmlExpression = xmlExpression;
- resolveXmlExpression(angularXmlExpression);
+ _resolveXmlExpression(angularXmlExpression);
}
}
}
@@ -9817,7 +10187,7 @@
* @param component the [AngularComponentElement] to resolve template for, maybe
* `null` if not a component template
*/
- void resolveInternal(List<AngularElement> angularElements, AngularComponentElement component) {
+ void _resolveInternal(List<AngularElement> angularElements, AngularComponentElement component) {
this._angularElements = angularElements;
// add built-in processors
_processors.add(NgModelProcessor.INSTANCE);
@@ -9827,20 +10197,20 @@
_injectedLibraries.add(angularElement.library);
}
// prepare Dart library
- createLibraryElement();
+ _createLibraryElement();
(_unit.element as HtmlElementImpl).angularCompilationUnit = _unitElement;
// prepare Dart resolver
- createResolver();
+ _createResolver();
// maybe resolving component template
if (component != null) {
- defineTopVariable_forClassElement(component);
+ _defineTopVariable_forClassElement(component);
for (AngularScopePropertyElement scopeProperty in component.scopeProperties) {
- defineTopVariable_forScopeProperty(scopeProperty);
+ _defineTopVariable_forScopeProperty(scopeProperty);
}
}
// add processors
for (AngularElement angularElement in angularElements) {
- NgProcessor processor = createProcessor(angularElement);
+ NgProcessor processor = _createProcessor(angularElement);
if (processor != null) {
_processors.add(processor);
}
@@ -9848,7 +10218,7 @@
// define filters
for (AngularElement angularElement in angularElements) {
if (angularElement is AngularFilterElement) {
- defineTopVariable_forClassElement(angularElement);
+ _defineTopVariable_forClassElement(angularElement);
}
}
// run this HTML visitor
@@ -9869,12 +10239,12 @@
}
}
- void resolveXmlExpression(AngularXmlExpression angularXmlExpression) {
+ void _resolveXmlExpression(AngularXmlExpression angularXmlExpression) {
AngularExpression angularExpression = angularXmlExpression.expression;
- resolveExpression(angularExpression);
+ _resolveExpression(angularExpression);
}
- List<Token> splitAtBar(Token token) {
+ List<Token> _splitAtBar(Token token) {
List<Token> tokens = [];
tokens.add(token);
while (token.type != TokenType.EOF) {
@@ -9893,7 +10263,7 @@
* can be used before actual "ng-model" attribute in HTML. So, we need to define them once we
* found [NG_APP] context.
*/
- void visitModelDirectives(ht.XmlTagNode appNode) {
+ void _visitModelDirectives(ht.XmlTagNode appNode) {
appNode.accept(new RecursiveXmlVisitor_AngularHtmlUnitResolver_visitModelDirectives(this));
}
}
@@ -9905,6 +10275,7 @@
this._listener = listener;
}
+ @override
void onError(AnalysisError error) {
ErrorCode errorCode = error.errorCode;
if (identical(errorCode, StaticWarningCode.UNDEFINED_GETTER) || identical(errorCode, StaticWarningCode.UNDEFINED_IDENTIFIER) || identical(errorCode, StaticTypeWarningCode.UNDEFINED_GETTER)) {
@@ -9918,6 +10289,7 @@
}
class RecursiveXmlVisitor_AngularHtmlUnitResolver_hasAngularAnnotation extends ht.RecursiveXmlVisitor<Object> {
+ @override
Object visitXmlTagNode(ht.XmlTagNode node) {
if (node.getAttribute(AngularHtmlUnitResolver._NG_APP) != null) {
throw new AngularHtmlUnitResolver_FoundAppError();
@@ -9931,10 +10303,11 @@
RecursiveXmlVisitor_AngularHtmlUnitResolver_visitModelDirectives(this.AngularHtmlUnitResolver_this) : super();
+ @override
Object visitXmlTagNode(ht.XmlTagNode node) {
NgModelProcessor directive = NgModelProcessor.INSTANCE;
if (directive.canApply(node)) {
- directive.applyTopDeclarations(AngularHtmlUnitResolver_this, node);
+ directive._applyTopDeclarations(AngularHtmlUnitResolver_this, node);
}
return super.visitXmlTagNode(node);
}
@@ -9972,10 +10345,13 @@
this._closingOffset = closingOffset;
}
+ @override
int get end => _closingOffset + CLOSING_DELIMITER_LENGTH;
+ @override
int get length => _closingOffset + CLOSING_DELIMITER_LENGTH - _openingOffset;
+ @override
int get offset => _openingOffset;
}
@@ -9986,10 +10362,13 @@
class AngularRawXmlExpression extends AngularXmlExpression {
AngularRawXmlExpression(AngularExpression expression) : super(expression);
+ @override
int get end => expression.end;
+ @override
int get length => expression.length;
+ @override
int get offset => expression.offset;
}
@@ -10004,22 +10383,23 @@
AngularXmlExpression(this.expression);
+ @override
ht.XmlExpression_Reference getReference(int offset) {
// main expression
- ht.XmlExpression_Reference reference = getReferenceAtNode(expression.expression, offset);
+ ht.XmlExpression_Reference reference = _getReferenceAtNode(expression.expression, offset);
if (reference != null) {
return reference;
}
// filters
for (AngularFilterNode filter in expression.filters) {
// filter name
- reference = getReferenceAtNode(filter.name, offset);
+ reference = _getReferenceAtNode(filter.name, offset);
if (reference != null) {
return reference;
}
// filter arguments
for (AngularFilterArgument filterArgument in filter.arguments) {
- reference = getReferenceAtNode(filterArgument.expression, offset);
+ reference = _getReferenceAtNode(filterArgument.expression, offset);
if (reference != null) {
return reference;
}
@@ -10032,7 +10412,7 @@
* If the given [AstNode] has an [Element] at the given offset, then returns
* [Reference] with this [Element].
*/
- ht.XmlExpression_Reference getReferenceAtNode(AstNode root, int offset) {
+ ht.XmlExpression_Reference _getReferenceAtNode(AstNode root, int offset) {
AstNode node = new NodeLocator.con1(offset).searchWithin(root);
if (node != null) {
Element element = ElementLocator.locate(node);
@@ -10053,20 +10433,22 @@
*/
void visitExpression(Expression expression);
+ @override
Object visitXmlAttributeNode(ht.XmlAttributeNode node) {
- visitExpressions(node.expressions);
+ _visitExpressions(node.expressions);
return super.visitXmlAttributeNode(node);
}
+ @override
Object visitXmlTagNode(ht.XmlTagNode node) {
- visitExpressions(node.expressions);
+ _visitExpressions(node.expressions);
return super.visitXmlTagNode(node);
}
/**
* Visits [Expression]s of the given [XmlExpression]s.
*/
- void visitExpressions(List<ht.XmlExpression> expressions) {
+ void _visitExpressions(List<ht.XmlExpression> expressions) {
for (ht.XmlExpression xmlExpression in expressions) {
if (xmlExpression is AngularXmlExpression) {
AngularXmlExpression angularXmlExpression = xmlExpression;
@@ -10094,6 +10476,7 @@
this._element = element;
}
+ @override
void apply(AngularHtmlUnitResolver resolver, ht.XmlTagNode node) {
node.element = _element.selector;
for (AngularPropertyElement property in _element.properties) {
@@ -10104,13 +10487,14 @@
// resolve if binding
if (property.propertyKind != AngularPropertyKind.ATTR) {
AngularExpression expression = parseAngularExpression(resolver, attribute);
- resolver.resolveExpression(expression);
+ resolver._resolveExpression(expression);
setAngularExpression(attribute, expression);
}
}
}
}
+ @override
bool canApply(ht.XmlTagNode node) => _element.selector.apply(node);
}
@@ -10124,14 +10508,16 @@
this._element = element;
}
+ @override
void apply(AngularHtmlUnitResolver resolver, ht.XmlTagNode node) {
InterfaceType type = (_element.enclosingElement as ClassElement).type;
String name = _element.name;
- LocalVariableElementImpl variable = resolver.createLocalVariableWithName(type, name);
- resolver.defineVariable(variable);
+ LocalVariableElementImpl variable = resolver._createLocalVariableWithName(type, name);
+ resolver._defineVariable(variable);
variable.toolkitObjects = <AngularElement> [_element];
}
+ @override
bool canApply(ht.XmlTagNode node) => _element.selector.apply(node);
}
@@ -10146,6 +10532,7 @@
this._element = element;
}
+ @override
void apply(AngularHtmlUnitResolver resolver, ht.XmlTagNode node) {
String selectorAttributeName = null;
{
@@ -10175,29 +10562,30 @@
}
// resolve if binding
if (property.propertyKind != AngularPropertyKind.ATTR) {
- resolver.pushNameScope();
+ resolver._pushNameScope();
try {
- onNgEventDirective(resolver);
+ _onNgEventDirective(resolver);
AngularExpression expression = parseAngularExpression(resolver, attribute);
- resolver.resolveExpression(expression);
+ resolver._resolveExpression(expression);
setAngularExpression(attribute, expression);
} finally {
- resolver.popNameScope();
+ resolver._popNameScope();
}
}
}
}
}
+ @override
bool canApply(ht.XmlTagNode node) => _element.selector.apply(node);
/**
* Support for <code>$event</code> variable in <code>NgEventDirective</code>.
*/
- void onNgEventDirective(AngularHtmlUnitResolver resolver) {
+ void _onNgEventDirective(AngularHtmlUnitResolver resolver) {
if (_element.isClass("NgEventDirective")) {
- Type2 dynamicType = resolver.typeProvider.dynamicType;
- resolver.defineVariable(resolver.createLocalVariableWithName(dynamicType, "\$event"));
+ DartType dynamicType = resolver.typeProvider.dynamicType;
+ resolver._defineVariable(resolver._createLocalVariableWithName(dynamicType, "\$event"));
}
}
}
@@ -10211,40 +10599,40 @@
static ht.RawXmlExpression newRawXmlExpression(Expression e) => new ht.RawXmlExpression(e);
AngularExpression parseAngularExpression(AngularHtmlUnitResolver resolver, ht.XmlAttributeNode attribute) {
- Token token = scanAttribute(resolver, attribute);
- return resolver.parseAngularExpressionInToken(token);
+ Token token = _scanAttribute(resolver, attribute);
+ return resolver._parseAngularExpressionInToken(token);
}
Expression parseDartExpression(AngularHtmlUnitResolver resolver, ht.XmlAttributeNode attribute) {
- Token token = scanAttribute(resolver, attribute);
- return resolver.parseDartExpressionInToken(token);
+ Token token = _scanAttribute(resolver, attribute);
+ return resolver._parseDartExpressionInToken(token);
}
/**
* Sets single [AngularExpression] for [XmlAttributeNode].
*/
void setAngularExpression(ht.XmlAttributeNode attribute, AngularExpression expression) {
- setExpression2(attribute, newAngularRawXmlExpression(expression));
+ _setExpression(attribute, newAngularRawXmlExpression(expression));
}
/**
* Sets single [Expression] for [XmlAttributeNode].
*/
void setExpression(ht.XmlAttributeNode attribute, Expression expression) {
- setExpression2(attribute, newRawXmlExpression(expression));
+ _setExpression(attribute, newRawXmlExpression(expression));
}
void setExpressions(ht.XmlAttributeNode attribute, List<ht.XmlExpression> xmlExpressions) {
attribute.expressions = new List.from(xmlExpressions);
}
- Token scanAttribute(AngularHtmlUnitResolver resolver, ht.XmlAttributeNode attribute) {
+ Token _scanAttribute(AngularHtmlUnitResolver resolver, ht.XmlAttributeNode attribute) {
int offset = attribute.valueToken.offset + 1;
String value = attribute.text;
- return resolver.scanDart(value, 0, value.length, offset);
+ return resolver._scanDart(value, 0, value.length, offset);
}
- void setExpression2(ht.XmlAttributeNode attribute, ht.XmlExpression xmlExpression) {
+ void _setExpression(ht.XmlAttributeNode attribute, ht.XmlExpression xmlExpression) {
attribute.expressions = <ht.XmlExpression> [xmlExpression];
}
}
@@ -10257,6 +10645,7 @@
static NgModelProcessor INSTANCE = new NgModelProcessor();
+ @override
void apply(AngularHtmlUnitResolver resolver, ht.XmlTagNode node) {
ht.XmlAttributeNode attribute = node.getAttribute(_NG_MODEL);
Expression expression = parseDartExpression(resolver, attribute);
@@ -10265,18 +10654,19 @@
return;
}
// resolve
- resolver.resolveNode(expression);
+ resolver._resolveNode(expression);
// remember expression
setExpression(attribute, expression);
}
+ @override
bool canApply(ht.XmlTagNode node) => node.getAttribute(_NG_MODEL) != null;
/**
* This method is used to define top-level [VariableElement]s for each "ng-model" with
* simple identifier model.
*/
- void applyTopDeclarations(AngularHtmlUnitResolver resolver, ht.XmlTagNode node) {
+ void _applyTopDeclarations(AngularHtmlUnitResolver resolver, ht.XmlTagNode node) {
ht.XmlAttributeNode attribute = node.getAttribute(_NG_MODEL);
Expression expression = parseDartExpression(resolver, attribute);
// if not identifier, then not a top-level model, delay until "apply"
@@ -10286,8 +10676,8 @@
SimpleIdentifier identifier = expression as SimpleIdentifier;
// define variable Element
InterfaceType type = resolver.typeProvider.stringType;
- LocalVariableElementImpl element = resolver.createLocalVariableFromIdentifier(type, identifier);
- resolver.defineTopVariable(element);
+ LocalVariableElementImpl element = resolver._createLocalVariableFromIdentifier(type, identifier);
+ resolver._defineTopVariable(element);
// remember expression
identifier.staticElement = element;
identifier.staticType = type;
@@ -10365,14 +10755,15 @@
*/
Object perform(AnalysisTaskVisitor visitor) {
try {
- safelyPerform();
+ _safelyPerform();
} on AnalysisException catch (exception) {
_thrownException = exception;
- AnalysisEngine.instance.logger.logInformation3("Task failed: ${taskDescription}", exception);
+ AnalysisEngine.instance.logger.logInformation2("Task failed: ${taskDescription}", exception);
}
return accept(visitor);
}
+ @override
String toString() => taskDescription;
/**
@@ -10395,7 +10786,7 @@
*
* @throws AnalysisException if any exception occurs while performing the task
*/
- void safelyPerform() {
+ void _safelyPerform() {
try {
internalPerform();
} on AnalysisException catch (exception) {
@@ -10564,6 +10955,7 @@
*/
GenerateDartErrorsTask(InternalAnalysisContext context, this.source, this.libraryElement) : super(context);
+ @override
accept(AnalysisTaskVisitor visitor) => visitor.visitGenerateDartErrorsTask(this);
/**
@@ -10581,8 +10973,10 @@
*/
int get modificationTime => _modificationTime;
+ @override
String get taskDescription => "generate errors and warnings for ${source.fullName}";
+ @override
void internalPerform() {
InternalAnalysisContext context = this.context;
TimestampedData<CompilationUnit> data = context.internalResolveCompilationUnit(source, libraryElement);
@@ -10634,6 +11028,7 @@
*/
GenerateDartHintsTask(InternalAnalysisContext context, this.libraryElement) : super(context);
+ @override
accept(AnalysisTaskVisitor visitor) => visitor.visitGenerateDartHintsTask(this);
/**
@@ -10646,6 +11041,7 @@
*/
Map<Source, TimestampedData<List<AnalysisError>>> get hintMap => _hintMap;
+ @override
String get taskDescription {
Source librarySource = libraryElement.source;
if (librarySource == null) {
@@ -10654,6 +11050,7 @@
return "generate Dart hints for ${librarySource.fullName}";
}
+ @override
void internalPerform() {
RecordingErrorListener errorListener = new RecordingErrorListener();
List<CompilationUnitElement> parts = libraryElement.parts;
@@ -10664,7 +11061,7 @@
// Get all of the (fully resolved) compilation units that will be analyzed.
//
Source unitSource = libraryElement.definingCompilationUnit.source;
- TimestampedData<CompilationUnit> resolvedUnit = getCompilationUnit(unitSource);
+ TimestampedData<CompilationUnit> resolvedUnit = _getCompilationUnit(unitSource);
timestampMap[unitSource] = resolvedUnit;
CompilationUnit unit = resolvedUnit.data;
if (unit == null) {
@@ -10673,7 +11070,7 @@
compilationUnits[0] = unit;
for (int i = 0; i < partCount; i++) {
unitSource = parts[i].source;
- resolvedUnit = getCompilationUnit(unitSource);
+ resolvedUnit = _getCompilationUnit(unitSource);
timestampMap[unitSource] = resolvedUnit;
unit = resolvedUnit.data;
if (unit == null) {
@@ -10705,7 +11102,7 @@
* @return the resolved compilation unit associated with the given source
* @throws AnalysisException if the resolved compilation unit could not be computed
*/
- TimestampedData<CompilationUnit> getCompilationUnit(Source unitSource) => context.internalResolveCompilationUnit(unitSource, libraryElement);
+ TimestampedData<CompilationUnit> _getCompilationUnit(Source unitSource) => context.internalResolveCompilationUnit(unitSource, libraryElement);
}
/**
@@ -10745,6 +11142,7 @@
}
}
+ @override
accept(AnalysisTaskVisitor visitor) => visitor.visitGetContentTask(this);
/**
@@ -10774,8 +11172,10 @@
*/
bool get isComplete => _complete;
+ @override
String get taskDescription => "get contents of ${source.fullName}";
+ @override
void internalPerform() {
_complete = true;
try {
@@ -10810,6 +11210,7 @@
*/
IncrementalAnalysisTask(InternalAnalysisContext context, this.cache) : super(context);
+ @override
accept(AnalysisTaskVisitor visitor) => visitor.visitIncrementalAnalysisTask(this);
/**
@@ -10828,8 +11229,10 @@
*/
Source get source => cache != null ? cache.source : null;
+ @override
String get taskDescription => "incremental analysis ${(cache != null ? cache.source : "null")}";
+ @override
void internalPerform() {
if (cache == null) {
return;
@@ -10928,6 +11331,7 @@
this._tokenStream = tokenStream;
}
+ @override
accept(AnalysisTaskVisitor visitor) => visitor.visitParseDartTask(this);
/**
@@ -10939,8 +11343,8 @@
CompilationUnit get compilationUnit => _unit;
/**
- * Return the errors that were produced by scanning and parsing the source, or `null` if the
- * task has not yet been performed or if an exception occurred.
+ * Return the errors that were produced by scanning and parsing the source, or an empty array if
+ * the task has not yet been performed or if an exception occurred.
*
* @return the errors that were produced by scanning and parsing the source
*/
@@ -10962,6 +11366,7 @@
*/
bool get hasPartOfDirective => _containsPartOfDirective;
+ @override
String get taskDescription {
if (source == null) {
return "parse as dart null source";
@@ -10969,6 +11374,7 @@
return "parse as dart ${source.fullName}";
}
+ @override
void internalPerform() {
RecordingErrorListener errorListener = new RecordingErrorListener();
InternalAnalysisContext context = this.context;
@@ -11056,6 +11462,7 @@
this._content = content;
}
+ @override
accept(AnalysisTaskVisitor visitor) => visitor.visitParseHtmlTask(this);
/**
@@ -11088,6 +11495,7 @@
*/
List<Source> get referencedLibraries => _referencedLibraries;
+ @override
String get taskDescription {
if (source == null) {
return "parse as html null source";
@@ -11095,6 +11503,7 @@
return "parse as html ${source.fullName}";
}
+ @override
void internalPerform() {
try {
ht.AbstractScanner scanner = new ht.StringScanner(source, _content);
@@ -11132,6 +11541,7 @@
RecursiveXmlVisitor_ParseHtmlTask_getLibrarySources(this.ParseHtmlTask_this, this.libraries) : super();
+ @override
Object visitHtmlScriptTagNode(ht.HtmlScriptTagNode node) {
ht.XmlAttributeNode scriptAttribute = null;
for (ht.XmlAttributeNode attribute in node.attributes) {
@@ -11210,6 +11620,7 @@
this._application = application;
}
+ @override
accept(AnalysisTaskVisitor visitor) => visitor.visitResolveAngularComponentTemplateTask(this);
List<AnalysisError> get resolutionErrors => _resolutionErrors;
@@ -11221,8 +11632,10 @@
*/
ht.HtmlUnit get resolvedUnit => _resolvedUnit;
+ @override
String get taskDescription => "resolving Angular template ${source}";
+ @override
void internalPerform() {
//
// Prepare for resolution.
@@ -11296,6 +11709,7 @@
this._unit = unit;
}
+ @override
accept(AnalysisTaskVisitor visitor) => visitor.visitResolveAngularEntryHtmlTask(this);
/**
@@ -11323,6 +11737,7 @@
*/
ht.HtmlUnit get resolvedUnit => _resolvedUnit;
+ @override
String get taskDescription {
if (source == null) {
return "resolve as Angular entry point null source";
@@ -11330,6 +11745,7 @@
return "resolve as Angular entry point ${source.fullName}";
}
+ @override
void internalPerform() {
//
// Prepare for resolution.
@@ -11388,6 +11804,16 @@
Set<Source> _includedSources = new Set<Source>();
/**
+ * The errors that were produced by resolving the directives.
+ */
+ List<AnalysisError> _errors = AnalysisError.NO_ERRORS;
+
+ /**
+ * The prefix of a URI using the `dart-ext` scheme to reference a native code library.
+ */
+ static String _DART_EXT_SCHEME = "dart-ext:";
+
+ /**
* Initialize a newly created task to perform analysis within the given context.
*
* @param context the context in which the task is to be performed
@@ -11399,15 +11825,24 @@
this._unit = unit;
}
+ @override
accept(AnalysisTaskVisitor visitor) => visitor.visitResolveDartDependenciesTask(this);
/**
+ * Return the errors that were produced by resolving the directives, or an empty array if the task
+ * has not yet been performed or if an exception occurred.
+ *
+ * @return the errors that were produced by resolving the directives.
+ */
+ List<AnalysisError> get errors => _errors;
+
+ /**
* Return an array containing the sources referenced by 'export' directives, or an empty array if
* the task has not yet been performed or if an exception occurred.
*
* @return an array containing the sources referenced by 'export' directives
*/
- List<Source> get exportedSources => toArray(_exportedSources);
+ List<Source> get exportedSources => _toArray(_exportedSources);
/**
* Return an array containing the sources referenced by 'import' directives, or an empty array if
@@ -11415,7 +11850,7 @@
*
* @return an array containing the sources referenced by 'import' directives
*/
- List<Source> get importedSources => toArray(_importedSources);
+ List<Source> get importedSources => _toArray(_importedSources);
/**
* Return an array containing the sources referenced by 'part' directives, or an empty array if
@@ -11423,8 +11858,9 @@
*
* @return an array containing the sources referenced by 'part' directives
*/
- List<Source> get includedSources => toArray(_includedSources);
+ List<Source> get includedSources => _toArray(_includedSources);
+ @override
String get taskDescription {
if (source == null) {
return "resolve dart dependencies null source";
@@ -11432,27 +11868,30 @@
return "resolve dart dependencies ${source.fullName}";
}
+ @override
void internalPerform() {
TimeCounter_TimeCounterHandle timeCounterParse = PerformanceStatistics.parse.start();
try {
+ RecordingErrorListener errorListener = new RecordingErrorListener();
for (Directive directive in _unit.directives) {
if (directive is ExportDirective) {
- Source exportSource = resolveSource(source, directive);
+ Source exportSource = _resolveSource(source, directive, errorListener);
if (exportSource != null) {
_exportedSources.add(exportSource);
}
} else if (directive is ImportDirective) {
- Source importSource = resolveSource(source, directive);
+ Source importSource = _resolveSource(source, directive, errorListener);
if (importSource != null) {
_importedSources.add(importSource);
}
} else if (directive is PartDirective) {
- Source partSource = resolveSource(source, directive);
+ Source partSource = _resolveSource(source, directive, errorListener);
if (partSource != null) {
_includedSources.add(partSource);
}
}
}
+ _errors = errorListener.errors;
} finally {
timeCounterParse.stop();
}
@@ -11464,24 +11903,34 @@
*
* @param librarySource the source representing the library containing the directive
* @param directive the directive which URI should be resolved
+ * @param errorListener the error listener to which errors should be reported
* @return the result of resolving the URI against the URI of the library
*/
- Source resolveSource(Source librarySource, UriBasedDirective directive) {
+ Source _resolveSource(Source librarySource, UriBasedDirective directive, AnalysisErrorListener errorListener) {
StringLiteral uriLiteral = directive.uri;
if (uriLiteral is StringInterpolation) {
+ errorListener.onError(new AnalysisError.con2(librarySource, uriLiteral.offset, uriLiteral.length, CompileTimeErrorCode.URI_WITH_INTERPOLATION, []));
return null;
}
String uriContent = uriLiteral.stringValue.trim();
- if (uriContent == null) {
+ directive.uriContent = uriContent;
+ if (directive is ImportDirective && uriContent.startsWith(_DART_EXT_SCHEME)) {
return null;
}
- uriContent = Uri.encodeFull(uriContent);
try {
- parseUriWithException(uriContent);
- return context.sourceFactory.resolveUri(librarySource, uriContent);
+ String encodedUriContent = Uri.encodeFull(uriContent);
+ parseUriWithException(encodedUriContent);
+ AnalysisContext analysisContext = context;
+ Source source = analysisContext.sourceFactory.resolveUri(librarySource, encodedUriContent);
+ if (!analysisContext.exists(source)) {
+ errorListener.onError(new AnalysisError.con2(librarySource, uriLiteral.offset, uriLiteral.length, CompileTimeErrorCode.URI_DOES_NOT_EXIST, [uriContent]));
+ }
+ directive.source = source;
+ return source;
} on URISyntaxException catch (exception) {
- return null;
+ errorListener.onError(new AnalysisError.con2(librarySource, uriLiteral.offset, uriLiteral.length, CompileTimeErrorCode.INVALID_URI, [uriContent]));
}
+ return null;
}
/**
@@ -11490,7 +11939,7 @@
* @param sources the set to be converted
* @return an array containing all of the sources in the given set
*/
- List<Source> toArray(Set<Source> sources) {
+ List<Source> _toArray(Set<Source> sources) {
int size = sources.length;
if (size == 0) {
return Source.EMPTY_ARRAY;
@@ -11527,6 +11976,7 @@
*/
ResolveDartLibraryTask(InternalAnalysisContext context, this.unitSource, this.librarySource) : super(context);
+ @override
accept(AnalysisTaskVisitor visitor) => visitor.visitResolveDartLibraryTask(this);
/**
@@ -11536,6 +11986,7 @@
*/
LibraryResolver get libraryResolver => _resolver;
+ @override
String get taskDescription {
if (librarySource == null) {
return "resolve library null source";
@@ -11543,6 +11994,7 @@
return "resolve library ${librarySource.fullName}";
}
+ @override
void internalPerform() {
_resolver = new LibraryResolver(context);
_resolver.resolveLibrary(librarySource, true);
@@ -11585,6 +12037,7 @@
this._libraryElement = libraryElement;
}
+ @override
accept(AnalysisTaskVisitor visitor) => visitor.visitResolveDartUnitTask(this);
/**
@@ -11609,6 +12062,7 @@
*/
CompilationUnit get resolvedUnit => _resolvedUnit;
+ @override
String get taskDescription {
Source librarySource = _libraryElement.source;
if (librarySource == null) {
@@ -11617,6 +12071,7 @@
return "resolve unit ${librarySource.fullName}";
}
+ @override
void internalPerform() {
TypeProvider typeProvider = (_libraryElement.context as InternalAnalysisContext).typeProvider;
ResolvableCompilationUnit resolvableUnit = context.computeResolvableCompilationUnit(source);
@@ -11628,7 +12083,7 @@
//
// Resolve names in declarations.
//
- new DeclarationResolver().resolve(unit, find(_libraryElement, source));
+ new DeclarationResolver().resolve(unit, _find(_libraryElement, source));
//
// Resolve the type names.
//
@@ -11675,7 +12130,7 @@
* @param unitSource the source for the compilation unit whose element is to be returned
* @return the element representing the compilation unit
*/
- CompilationUnitElement find(LibraryElement libraryElement, Source unitSource) {
+ CompilationUnitElement _find(LibraryElement libraryElement, Source unitSource) {
CompilationUnitElement element = libraryElement.definingCompilationUnit;
if (element.source == unitSource) {
return element;
@@ -11735,6 +12190,7 @@
this._unit = unit;
}
+ @override
accept(AnalysisTaskVisitor visitor) => visitor.visitResolveHtmlTask(this);
HtmlElement get element => _element;
@@ -11748,6 +12204,7 @@
*/
ht.HtmlUnit get resolvedUnit => _resolvedUnit;
+ @override
String get taskDescription {
if (source == null) {
return "resolve as html null source";
@@ -11755,6 +12212,7 @@
return "resolve as html ${source.fullName}";
}
+ @override
void internalPerform() {
//
// Build the standard HTML element.
@@ -11819,6 +12277,7 @@
this._content = content;
}
+ @override
accept(AnalysisTaskVisitor visitor) => visitor.visitScanDartTask(this);
/**
@@ -11845,6 +12304,7 @@
*/
Token get tokenStream => _tokenStream;
+ @override
String get taskDescription {
if (source == null) {
return "scan as dart null source";
@@ -11852,6 +12312,7 @@
return "scan as dart ${source.fullName}";
}
+ @override
void internalPerform() {
RecordingErrorListener errorListener = new RecordingErrorListener();
TimeCounter_TimeCounterHandle timeCounterScan = PerformanceStatistics.scan.start();
@@ -11892,10 +12353,13 @@
*/
WaitForAsyncTask() : super(null);
+ @override
accept(AnalysisTaskVisitor visitor) => null;
+ @override
String get taskDescription => "Waiting for async analysis";
+ @override
void internalPerform() {
}
}
@@ -11938,22 +12402,26 @@
* @param message an explanation of why the error occurred or what it means
* @param exception the exception being logged
*/
- void logInformation3(String message, Exception exception);
+ void logInformation2(String message, Exception exception);
}
/**
* Implementation of [Logger] that does nothing.
*/
class Logger_NullLogger implements Logger {
+ @override
void logError(String message) {
}
+ @override
void logError2(String message, Exception exception) {
}
+ @override
void logInformation(String message) {
}
- void logInformation3(String message, Exception exception) {
+ @override
+ void logInformation2(String message, Exception exception) {
}
}
\ No newline at end of file
diff --git a/pkg/analyzer/lib/src/generated/error.dart b/pkg/analyzer/lib/src/generated/error.dart
index 8830651..3dc1b49 100644
--- a/pkg/analyzer/lib/src/generated/error.dart
+++ b/pkg/analyzer/lib/src/generated/error.dart
@@ -99,6 +99,7 @@
*/
AnalysisErrorWithProperties.con2(Source source, int offset, int length, ErrorCode errorCode, List<Object> arguments) : super.con2(source, offset, length, errorCode, arguments);
+ @override
Object getProperty(ErrorProperty property) => _propertyMap[property];
/**
@@ -130,6 +131,7 @@
*/
bool get errorReported => _errorReported;
+ @override
void onError(AnalysisError error) {
_errorReported = true;
}
@@ -211,12 +213,16 @@
this._severity = ErrorSeverity.INFO;
}
+ @override
String get correction => null;
+ @override
ErrorSeverity get errorSeverity => _severity;
+ @override
String get message => _message;
+ @override
ErrorType get type => ErrorType.ANGULAR;
}
@@ -436,6 +442,7 @@
}
}
+ @override
bool operator ==(Object obj) {
if (identical(obj, this)) {
return true;
@@ -507,6 +514,7 @@
*/
Object getProperty(ErrorProperty property) => null;
+ @override
int get hashCode {
int hashCode = _offset;
hashCode ^= (_message != null) ? _message.hashCode : 0;
@@ -514,6 +522,7 @@
return hashCode;
}
+ @override
String toString() {
JavaStringBuilder builder = new JavaStringBuilder();
builder.append((source != null) ? source.fullName : "<unknown source>");
@@ -572,12 +581,16 @@
TodoCode(String name, int ordinal) : super(name, ordinal);
+ @override
String get correction => null;
+ @override
ErrorSeverity get errorSeverity => ErrorSeverity.INFO;
+ @override
String get message => "%s";
+ @override
ErrorType get type => ErrorType.TODO;
}
@@ -825,10 +838,13 @@
this.correction3 = correction;
}
+ @override
String get correction => correction3;
+ @override
ErrorSeverity get errorSeverity => ErrorType.HINT.severity;
+ @override
ErrorType get type => ErrorType.HINT;
}
@@ -2283,10 +2299,13 @@
this.correction2 = correction;
}
+ @override
String get correction => correction2;
+ @override
ErrorSeverity get errorSeverity => ErrorType.COMPILE_TIME_ERROR.severity;
+ @override
ErrorType get type => ErrorType.COMPILE_TIME_ERROR;
}
@@ -2353,10 +2372,13 @@
this.correction5 = correction;
}
+ @override
String get correction => correction5;
+ @override
ErrorSeverity get errorSeverity => ErrorType.PUB_SUGGESTION.severity;
+ @override
ErrorType get type => ErrorType.PUB_SUGGESTION;
}
@@ -3237,10 +3259,13 @@
this.correction7 = correction;
}
+ @override
String get correction => correction7;
+ @override
ErrorSeverity get errorSeverity => ErrorType.STATIC_WARNING.severity;
+ @override
ErrorType get type => ErrorType.STATIC_WARNING;
}
@@ -3263,6 +3288,7 @@
}
class AnalysisErrorListener_NULL_LISTENER implements AnalysisErrorListener {
+ @override
void onError(AnalysisError event) {
}
}
@@ -3320,10 +3346,13 @@
this.correction4 = correction;
}
+ @override
String get correction => correction4;
+ @override
ErrorSeverity get errorSeverity => ErrorSeverity.WARNING;
+ @override
ErrorType get type => ErrorType.STATIC_WARNING;
}
@@ -3645,9 +3674,12 @@
this.correction6 = correction;
}
+ @override
String get correction => correction6;
+ @override
ErrorSeverity get errorSeverity => ErrorType.STATIC_TYPE_WARNING.severity;
+ @override
ErrorType get type => ErrorType.STATIC_TYPE_WARNING;
}
\ No newline at end of file
diff --git a/pkg/analyzer/lib/src/generated/html.dart b/pkg/analyzer/lib/src/generated/html.dart
index c8b4c3b..534083b 100644
--- a/pkg/analyzer/lib/src/generated/html.dart
+++ b/pkg/analyzer/lib/src/generated/html.dart
@@ -135,6 +135,7 @@
return token;
}
+ @override
String toString() => lexeme;
}
@@ -147,12 +148,16 @@
RawXmlExpression(this.expression);
+ @override
int get end => expression.end;
+ @override
int get length => expression.length;
+ @override
int get offset => expression.offset;
+ @override
XmlExpression_Reference getReference(int offset) {
AstNode node = new NodeLocator.con1(offset).searchWithin(expression);
if (node != null) {
@@ -174,21 +179,25 @@
* of the visited node to not be visited.
*/
class RecursiveXmlVisitor<R> implements XmlVisitor<R> {
+ @override
R visitHtmlScriptTagNode(HtmlScriptTagNode node) {
node.visitChildren(this);
return null;
}
+ @override
R visitHtmlUnit(HtmlUnit node) {
node.visitChildren(this);
return null;
}
+ @override
R visitXmlAttributeNode(XmlAttributeNode node) {
node.visitChildren(this);
return null;
}
+ @override
R visitXmlTagNode(XmlTagNode node) {
node.visitChildren(this);
return null;
@@ -250,6 +259,23 @@
}
/**
+ * Returns the [XmlTagNode] that is part of the given [HtmlUnit] and encloses the
+ * given offset.
+ */
+ static XmlTagNode getEnclosingTagNode(HtmlUnit htmlUnit, int offset) {
+ if (htmlUnit == null) {
+ return null;
+ }
+ List<XmlTagNode> result = [null];
+ try {
+ htmlUnit.accept(new RecursiveXmlVisitor_HtmlUnitUtils_getEnclosingTagNode(offset, result));
+ } on HtmlUnitUtils_FoundTagNodeError catch (e) {
+ return result[0];
+ }
+ return null;
+ }
+
+ /**
* Returns the [Expression] that is part of the given [HtmlUnit] and encloses the
* given offset.
*/
@@ -268,19 +294,26 @@
}
/**
- * Returns the [XmlTagNode] that is part of the given [HtmlUnit] and encloses the
- * given offset.
+ * Returns the [XmlTagNode] that is part of the given [HtmlUnit] and its open or
+ * closing tag name encloses the given offset.
*/
static XmlTagNode getTagNode(HtmlUnit htmlUnit, int offset) {
- if (htmlUnit == null) {
+ XmlTagNode node = getEnclosingTagNode(htmlUnit, offset);
+ // do we have an enclosing tag at all?
+ if (node == null) {
return null;
}
- List<XmlTagNode> result = [null];
- try {
- htmlUnit.accept(new RecursiveXmlVisitor_HtmlUnitUtils_getTagNode(offset, result));
- } on HtmlUnitUtils_FoundTagNodeError catch (e) {
- return result[0];
+ // is "offset" in the open tag?
+ Token openTag = node.tagToken;
+ if (openTag.offset <= offset && offset <= openTag.end) {
+ return node;
}
+ // is "offset" in the open tag?
+ Token closeTag = node.closingTag;
+ if (closeTag != null && closeTag.offset <= offset && offset <= closeTag.end) {
+ return node;
+ }
+ // not on a tag name
return null;
}
@@ -288,8 +321,8 @@
* Returns the [Expression] that is part of the given root [AstNode] and encloses the
* given offset.
*/
- static Expression getExpressionAt(AstNode root, int offset) {
- if (root.offset <= offset && offset < root.end) {
+ static Expression _getExpressionAt(AstNode root, int offset) {
+ if (root.offset <= offset && offset <= root.end) {
AstNode dartNode = new NodeLocator.con1(offset).searchWithin(root);
if (dartNode is Expression) {
return dartNode;
@@ -315,9 +348,10 @@
RecursiveXmlVisitor_HtmlUnitUtils_getAttributeNode(this.offset, this.result) : super();
+ @override
Object visitXmlAttributeNode(XmlAttributeNode node) {
Token nameToken = node.nameToken;
- if (nameToken.offset <= offset && offset < nameToken.end) {
+ if (nameToken.offset <= offset && offset <= nameToken.end) {
result[0] = node;
throw new HtmlUnitUtils_FoundAttributeNodeError();
}
@@ -325,6 +359,24 @@
}
}
+class RecursiveXmlVisitor_HtmlUnitUtils_getEnclosingTagNode extends RecursiveXmlVisitor<Object> {
+ int offset = 0;
+
+ List<XmlTagNode> result;
+
+ RecursiveXmlVisitor_HtmlUnitUtils_getEnclosingTagNode(this.offset, this.result) : super();
+
+ @override
+ Object visitXmlTagNode(XmlTagNode node) {
+ if (node.offset <= offset && offset < node.end) {
+ result[0] = node;
+ super.visitXmlTagNode(node);
+ throw new HtmlUnitUtils_FoundTagNodeError();
+ }
+ return null;
+ }
+}
+
class ExpressionVisitor_HtmlUnitUtils_getExpression extends ExpressionVisitor {
int offset = 0;
@@ -332,8 +384,9 @@
ExpressionVisitor_HtmlUnitUtils_getExpression(this.offset, this.result) : super();
+ @override
void visitExpression(Expression expression) {
- Expression at = HtmlUnitUtils.getExpressionAt(expression, offset);
+ Expression at = HtmlUnitUtils._getExpressionAt(expression, offset);
if (at != null) {
result[0] = at;
throw new HtmlUnitUtils_FoundExpressionError();
@@ -341,24 +394,6 @@
}
}
-class RecursiveXmlVisitor_HtmlUnitUtils_getTagNode extends RecursiveXmlVisitor<Object> {
- int offset = 0;
-
- List<XmlTagNode> result;
-
- RecursiveXmlVisitor_HtmlUnitUtils_getTagNode(this.offset, this.result) : super();
-
- Object visitXmlTagNode(XmlTagNode node) {
- super.visitXmlTagNode(node);
- Token tagToken = node.tagToken;
- if (tagToken.offset <= offset && offset < tagToken.end) {
- result[0] = node;
- throw new HtmlUnitUtils_FoundTagNodeError();
- }
- return null;
- }
-}
-
/**
* Instances of the class `HtmlScriptTagNode` represent a script tag within an HTML file that
* references a Dart script.
@@ -389,6 +424,7 @@
*/
HtmlScriptTagNode(Token nodeStart, Token tag, List<XmlAttributeNode> attributes, Token attributeEnd, List<XmlTagNode> tagNodes, Token contentEnd, Token closingTag, Token nodeEnd) : super(nodeStart, tag, attributes, attributeEnd, tagNodes, contentEnd, closingTag, nodeEnd);
+ @override
accept(XmlVisitor visitor) => visitor.visitHtmlScriptTagNode(this);
/**
@@ -509,6 +545,7 @@
this._element = element;
}
+ @override
String toString() {
PrintStringWriter writer = new PrintStringWriter();
accept(new ToSourceVisitor(writer));
@@ -541,9 +578,15 @@
* Make this node the parent of the given child nodes.
*
* @param children the nodes that will become the children of this node
+ * @param ifEmpty the (empty) nodes to return if "children" is empty
* @return the nodes that were made children of this node
*/
- List becomeParentOfAll(List children) {
+ List becomeParentOfAll(List children, {List ifEmpty}) {
+ if (children == null || children.isEmpty) {
+ if (ifEmpty != null) {
+ return ifEmpty;
+ }
+ }
if (children != null) {
for (JavaIterator iter = new JavaIterator(children); iter.hasNext;) {
XmlNode node = iter.next();
@@ -558,7 +601,7 @@
/**
* This method exists for debugging purposes only.
*/
- void appendIdentifier(JavaStringBuilder builder, XmlNode node) {
+ void _appendIdentifier(JavaStringBuilder builder, XmlNode node) {
if (node is XmlTagNode) {
builder.append(node.tag);
} else if (node is XmlAttributeNode) {
@@ -571,7 +614,7 @@
/**
* This method exists for debugging purposes only.
*/
- String buildRecursiveStructureMessage(XmlNode newParent) {
+ String _buildRecursiveStructureMessage(XmlNode newParent) {
JavaStringBuilder builder = new JavaStringBuilder();
builder.append("Attempt to create recursive structure: ");
XmlNode current = newParent;
@@ -581,10 +624,10 @@
}
if (identical(current, this)) {
builder.appendChar(0x2A);
- appendIdentifier(builder, current);
+ _appendIdentifier(builder, current);
builder.appendChar(0x2A);
} else {
- appendIdentifier(builder, current);
+ _appendIdentifier(builder, current);
}
current = current.parent;
}
@@ -600,7 +643,7 @@
XmlNode current = newParent;
while (current != null) {
if (identical(current, this)) {
- AnalysisEngine.instance.logger.logError2("Circular structure while setting an XML node's parent", new IllegalArgumentException(buildRecursiveStructureMessage(newParent)));
+ AnalysisEngine.instance.logger.logError2("Circular structure while setting an XML node's parent", new IllegalArgumentException(_buildRecursiveStructureMessage(newParent)));
return;
}
current = current.parent;
@@ -616,12 +659,16 @@
* structure) and that only need to visit a small number of node types.
*/
class SimpleXmlVisitor<R> implements XmlVisitor<R> {
+ @override
R visitHtmlScriptTagNode(HtmlScriptTagNode node) => null;
+ @override
R visitHtmlUnit(HtmlUnit htmlUnit) => null;
+ @override
R visitXmlAttributeNode(XmlAttributeNode xmlAttributeNode) => null;
+ @override
R visitXmlTagNode(XmlTagNode xmlTagNode) => null;
}
@@ -698,9 +745,9 @@
* @return the first token in the list of tokens that were produced
*/
Token tokenize() {
- scan();
- appendEofToken();
- return firstToken();
+ _scan();
+ _appendEofToken();
+ return _firstToken();
}
/**
@@ -736,26 +783,26 @@
_lineStarts.add(offset);
}
- void appendEofToken() {
+ void _appendEofToken() {
Token eofToken = new Token.con1(TokenType.EOF, offset);
// The EOF token points to itself so that there is always infinite look-ahead.
eofToken.setNext(eofToken);
_tail = _tail.setNext(eofToken);
}
- Token emit(Token token) {
+ Token _emit(Token token) {
_tail.setNext(token);
_tail = token;
return token;
}
- Token emitWithOffset(TokenType type, int start) => emit(new Token.con1(type, start));
+ Token _emitWithOffset(TokenType type, int start) => _emit(new Token.con1(type, start));
- Token emitWithOffsetAndLength(TokenType type, int start, int count) => emit(new Token.con2(type, start, getString(start, count)));
+ Token _emitWithOffsetAndLength(TokenType type, int start, int count) => _emit(new Token.con2(type, start, getString(start, count)));
- Token firstToken() => _tokens.next;
+ Token _firstToken() => _tokens.next;
- int recordStartOfLineAndAdvance(int c) {
+ int _recordStartOfLineAndAdvance(int c) {
if (c == 0xD) {
c = advance();
if (c == 0xA) {
@@ -771,7 +818,7 @@
return c;
}
- void scan() {
+ void _scan() {
bool inBrackets = false;
String endPassThrough = null;
int c = advance();
@@ -794,9 +841,9 @@
} else {
dashCount = 0;
}
- c = recordStartOfLineAndAdvance(c);
+ c = _recordStartOfLineAndAdvance(c);
}
- emitWithOffsetAndLength(TokenType.COMMENT, start, -1);
+ _emitWithOffsetAndLength(TokenType.COMMENT, start, -1);
// Capture <!--> and <!---> as tokens but report an error
if (_tail.length < 7) {
}
@@ -807,9 +854,9 @@
c = advance();
break;
}
- c = recordStartOfLineAndAdvance(c);
+ c = _recordStartOfLineAndAdvance(c);
}
- emitWithOffsetAndLength(TokenType.DECLARATION, start, -1);
+ _emitWithOffsetAndLength(TokenType.DECLARATION, start, -1);
if (!StringUtilities.endsWithChar(_tail.lexeme, 0x3E)) {
}
}
@@ -823,22 +870,22 @@
break;
}
} else {
- c = recordStartOfLineAndAdvance(c);
+ c = _recordStartOfLineAndAdvance(c);
}
}
- emitWithOffsetAndLength(TokenType.DIRECTIVE, start, -1);
+ _emitWithOffsetAndLength(TokenType.DIRECTIVE, start, -1);
if (_tail.length < 4) {
}
} else if (c == 0x2F) {
- emitWithOffset(TokenType.LT_SLASH, start);
+ _emitWithOffset(TokenType.LT_SLASH, start);
inBrackets = true;
c = advance();
} else {
inBrackets = true;
- emitWithOffset(TokenType.LT, start);
+ _emitWithOffset(TokenType.LT, start);
// ignore whitespace in braces
while (Character.isWhitespace(c)) {
- c = recordStartOfLineAndAdvance(c);
+ c = _recordStartOfLineAndAdvance(c);
}
// get tag
if (Character.isLetterOrDigit(c)) {
@@ -847,7 +894,7 @@
while (Character.isLetterOrDigit(c) || c == 0x2D || c == 0x5F) {
c = advance();
}
- emitWithOffsetAndLength(TokenType.TAG, tagStart, -1);
+ _emitWithOffsetAndLength(TokenType.TAG, tagStart, -1);
// check tag against passThrough elements
String tag = _tail.lexeme;
for (String str in _passThroughElements) {
@@ -859,7 +906,7 @@
}
}
} else if (c == 0x3E) {
- emitWithOffset(TokenType.GT, start);
+ _emitWithOffset(TokenType.GT, start);
inBrackets = false;
c = advance();
// if passThrough != null, read until we match it
@@ -884,30 +931,30 @@
index = 0;
nextC = firstC;
}
- c = recordStartOfLineAndAdvance(c);
+ c = _recordStartOfLineAndAdvance(c);
}
if (start + 1 < offset) {
if (endFound) {
- emitWithOffsetAndLength(TokenType.TEXT, start + 1, -len);
- emitWithOffset(TokenType.LT_SLASH, offset - len + 1);
- emitWithOffsetAndLength(TokenType.TAG, offset - len + 3, -1);
+ _emitWithOffsetAndLength(TokenType.TEXT, start + 1, -len);
+ _emitWithOffset(TokenType.LT_SLASH, offset - len + 1);
+ _emitWithOffsetAndLength(TokenType.TAG, offset - len + 3, -1);
} else {
- emitWithOffsetAndLength(TokenType.TEXT, start + 1, -1);
+ _emitWithOffsetAndLength(TokenType.TEXT, start + 1, -1);
}
}
endPassThrough = null;
}
} else if (c == 0x2F && peek() == 0x3E) {
advance();
- emitWithOffset(TokenType.SLASH_GT, start);
+ _emitWithOffset(TokenType.SLASH_GT, start);
inBrackets = false;
c = advance();
} else if (!inBrackets) {
- c = recordStartOfLineAndAdvance(c);
+ c = _recordStartOfLineAndAdvance(c);
while (c != 0x3C && c >= 0) {
- c = recordStartOfLineAndAdvance(c);
+ c = _recordStartOfLineAndAdvance(c);
}
- emitWithOffsetAndLength(TokenType.TEXT, start, -1);
+ _emitWithOffsetAndLength(TokenType.TEXT, start, -1);
} else if (c == 0x22 || c == 0x27) {
// read a string
int endQuote = c;
@@ -917,27 +964,27 @@
c = advance();
break;
}
- c = recordStartOfLineAndAdvance(c);
+ c = _recordStartOfLineAndAdvance(c);
}
- emitWithOffsetAndLength(TokenType.STRING, start, -1);
+ _emitWithOffsetAndLength(TokenType.STRING, start, -1);
} else if (c == 0x3D) {
// a non-char token
- emitWithOffset(TokenType.EQ, start);
+ _emitWithOffset(TokenType.EQ, start);
c = advance();
} else if (Character.isWhitespace(c)) {
// ignore whitespace in braces
do {
- c = recordStartOfLineAndAdvance(c);
+ c = _recordStartOfLineAndAdvance(c);
} while (Character.isWhitespace(c));
} else if (Character.isLetterOrDigit(c)) {
c = advance();
while (Character.isLetterOrDigit(c) || c == 0x2D || c == 0x5F) {
c = advance();
}
- emitWithOffsetAndLength(TokenType.TAG, start, -1);
+ _emitWithOffsetAndLength(TokenType.TAG, start, -1);
} else {
// a non-char token
- emitWithOffsetAndLength(TokenType.TEXT, start, 0);
+ _emitWithOffsetAndLength(TokenType.TEXT, start, 0);
c = advance();
}
}
@@ -976,12 +1023,14 @@
this._charOffset = -1;
}
+ @override
int get offset => _charOffset;
void set offset(int offset) {
_charOffset = offset;
}
+ @override
int advance() {
if (++_charOffset < _stringLength) {
return _string.codeUnitAt(_charOffset);
@@ -990,8 +1039,10 @@
return -1;
}
+ @override
String getString(int start, int endDelta) => _string.substring(start, _charOffset + 1 + endDelta).toString();
+ @override
int peek() {
if (_charOffset + 1 < _stringLength) {
return _string.codeUnitAt(_charOffset + 1);
@@ -1020,15 +1071,18 @@
this._writer = writer;
}
+ @override
Object visitHtmlScriptTagNode(HtmlScriptTagNode node) => visitXmlTagNode(node);
+ @override
Object visitHtmlUnit(HtmlUnit node) {
for (XmlTagNode child in node.tagNodes) {
- visit(child);
+ _visit(child);
}
return null;
}
+ @override
Object visitXmlAttributeNode(XmlAttributeNode node) {
String name = node.name;
Token value = node.valueToken;
@@ -1046,18 +1100,19 @@
return null;
}
+ @override
Object visitXmlTagNode(XmlTagNode node) {
_writer.print("<");
String tagName = node.tag;
_writer.print(tagName);
for (XmlAttributeNode attribute in node.attributes) {
_writer.print(" ");
- visit(attribute);
+ _visit(attribute);
}
_writer.print(node.attributeEnd.lexeme);
if (node.closingTag != null) {
for (XmlTagNode child in node.tagNodes) {
- visit(child);
+ _visit(child);
}
_writer.print("</");
_writer.print(tagName);
@@ -1071,7 +1126,7 @@
*
* @param node the node to be visited
*/
- void visit(XmlNode node) {
+ void _visit(XmlNode node) {
if (node != null) {
node.accept(this);
}
@@ -1136,6 +1191,7 @@
class TokenType_EOF extends TokenType {
TokenType_EOF(String name, int ordinal, String arg0) : super(name, ordinal, arg0);
+ @override
String toString() => "-eof-";
}
@@ -1164,10 +1220,13 @@
this._value = value;
}
+ @override
accept(XmlVisitor visitor) => visitor.visitXmlAttributeNode(this);
+ @override
Token get beginToken => _name;
+ @override
Token get endToken => _value;
/**
@@ -1223,6 +1282,7 @@
*/
Token get valueToken => _value;
+ @override
void visitChildren(XmlVisitor visitor) {
}
}
@@ -1368,12 +1428,12 @@
TokenType type = _currentToken.type;
while (type != TokenType.EOF) {
if (identical(type, TokenType.LT)) {
- tagNodes.add(parseTagNode());
+ tagNodes.add(_parseTagNode());
} else if (identical(type, TokenType.DECLARATION) || identical(type, TokenType.DIRECTIVE) || identical(type, TokenType.COMMENT)) {
// ignored tokens
_currentToken = _currentToken.next;
} else {
- reportUnexpectedToken();
+ _reportUnexpectedToken();
_currentToken = _currentToken.next;
}
type = _currentToken.type;
@@ -1394,7 +1454,7 @@
* @param type the type of token to be inserted (not `null`)
* @return the synthetic token that was inserted (not `null`)
*/
- Token insertSyntheticToken(TokenType type) {
+ Token _insertSyntheticToken(TokenType type) {
Token token = new Token.con2(type, _currentToken.offset, "");
_currentToken.previous.setNext(token);
token.setNext(_currentToken);
@@ -1407,7 +1467,7 @@
*
* @return the attribute (not `null`)
*/
- XmlAttributeNode parseAttribute() {
+ XmlAttributeNode _parseAttribute() {
// Assume the current token is a tag
Token name = _currentToken;
_currentToken = _currentToken.next;
@@ -1417,8 +1477,8 @@
equals = _currentToken;
_currentToken = _currentToken.next;
} else {
- reportUnexpectedToken();
- equals = insertSyntheticToken(TokenType.EQ);
+ _reportUnexpectedToken();
+ equals = _insertSyntheticToken(TokenType.EQ);
}
// String value
Token value;
@@ -1426,8 +1486,8 @@
value = _currentToken;
_currentToken = _currentToken.next;
} else {
- reportUnexpectedToken();
- value = insertSyntheticToken(TokenType.STRING);
+ _reportUnexpectedToken();
+ value = _insertSyntheticToken(TokenType.STRING);
}
return createAttributeNode(name, equals, value);
}
@@ -1438,7 +1498,7 @@
*
* @return a collection of zero or more attributes (not `null`, contains no `null`s)
*/
- List<XmlAttributeNode> parseAttributes() {
+ List<XmlAttributeNode> _parseAttributes() {
TokenType type = _currentToken.type;
if (identical(type, TokenType.GT) || identical(type, TokenType.SLASH_GT) || identical(type, TokenType.EOF)) {
return XmlTagNode.NO_ATTRIBUTES;
@@ -1446,9 +1506,9 @@
List<XmlAttributeNode> attributes = new List<XmlAttributeNode>();
while (type != TokenType.GT && type != TokenType.SLASH_GT && type != TokenType.EOF) {
if (identical(type, TokenType.TAG)) {
- attributes.add(parseAttribute());
+ attributes.add(_parseAttribute());
} else {
- reportUnexpectedToken();
+ _reportUnexpectedToken();
_currentToken = _currentToken.next;
}
type = _currentToken.type;
@@ -1462,7 +1522,7 @@
*
* @return a list of nodes (not `null`, contains no `null`s)
*/
- List<XmlTagNode> parseChildTagNodes() {
+ List<XmlTagNode> _parseChildTagNodes() {
TokenType type = _currentToken.type;
if (identical(type, TokenType.LT_SLASH) || identical(type, TokenType.EOF)) {
return XmlTagNode.NO_TAG_NODES;
@@ -1470,12 +1530,12 @@
List<XmlTagNode> nodes = new List<XmlTagNode>();
while (type != TokenType.LT_SLASH && type != TokenType.EOF) {
if (identical(type, TokenType.LT)) {
- nodes.add(parseTagNode());
+ nodes.add(_parseTagNode());
} else if (identical(type, TokenType.COMMENT)) {
// ignored token
_currentToken = _currentToken.next;
} else {
- reportUnexpectedToken();
+ _reportUnexpectedToken();
_currentToken = _currentToken.next;
}
type = _currentToken.type;
@@ -1489,7 +1549,7 @@
*
* @return the tag node or `null` if none found
*/
- XmlTagNode parseTagNode() {
+ XmlTagNode _parseTagNode() {
// Assume that the current node is a tag node start TokenType#LT
Token nodeStart = _currentToken;
_currentToken = _currentToken.next;
@@ -1499,26 +1559,26 @@
tag = _currentToken;
_currentToken = _currentToken.next;
} else {
- reportUnexpectedToken();
- tag = insertSyntheticToken(TokenType.TAG);
+ _reportUnexpectedToken();
+ tag = _insertSyntheticToken(TokenType.TAG);
}
// Parse the attributes
- List<XmlAttributeNode> attributes = parseAttributes();
+ List<XmlAttributeNode> attributes = _parseAttributes();
// Token ending attribute list
Token attributeEnd;
if (identical(_currentToken.type, TokenType.GT) || identical(_currentToken.type, TokenType.SLASH_GT)) {
attributeEnd = _currentToken;
_currentToken = _currentToken.next;
} else {
- reportUnexpectedToken();
- attributeEnd = insertSyntheticToken(TokenType.SLASH_GT);
+ _reportUnexpectedToken();
+ attributeEnd = _insertSyntheticToken(TokenType.SLASH_GT);
}
// If the node has no children, then return the node
if (identical(attributeEnd.type, TokenType.SLASH_GT) || isSelfClosing(tag)) {
return createTagNode(nodeStart, tag, attributes, attributeEnd, XmlTagNode.NO_TAG_NODES, _currentToken, null, attributeEnd);
}
// Parse the child tag nodes
- List<XmlTagNode> tagNodes = parseChildTagNodes();
+ List<XmlTagNode> tagNodes = _parseChildTagNodes();
// Token ending child tag nodes
Token contentEnd;
if (identical(_currentToken.type, TokenType.LT_SLASH)) {
@@ -1527,8 +1587,8 @@
} else {
// TODO (danrubel): handle self closing HTML elements by inserting synthetic tokens
// but not reporting an error
- reportUnexpectedToken();
- contentEnd = insertSyntheticToken(TokenType.LT_SLASH);
+ _reportUnexpectedToken();
+ contentEnd = _insertSyntheticToken(TokenType.LT_SLASH);
}
// Closing tag
Token closingTag;
@@ -1536,8 +1596,8 @@
closingTag = _currentToken;
_currentToken = _currentToken.next;
} else {
- reportUnexpectedToken();
- closingTag = insertSyntheticToken(TokenType.TAG);
+ _reportUnexpectedToken();
+ closingTag = _insertSyntheticToken(TokenType.TAG);
}
// Token ending node
Token nodeEnd;
@@ -1545,8 +1605,8 @@
nodeEnd = _currentToken;
_currentToken = _currentToken.next;
} else {
- reportUnexpectedToken();
- nodeEnd = insertSyntheticToken(TokenType.GT);
+ _reportUnexpectedToken();
+ nodeEnd = _insertSyntheticToken(TokenType.GT);
}
return createTagNode(nodeStart, tag, attributes, attributeEnd, tagNodes, contentEnd, closingTag, nodeEnd);
}
@@ -1554,7 +1614,7 @@
/**
* Report the current token as unexpected
*/
- void reportUnexpectedToken() {
+ void _reportUnexpectedToken() {
}
}
@@ -1653,10 +1713,11 @@
*/
XmlTagNode(this.nodeStart, Token tag, List<XmlAttributeNode> attributes, this.attributeEnd, List<XmlTagNode> tagNodes, this.contentEnd, this.closingTag, this.nodeEnd) {
this._tag = tag;
- this._attributes = becomeParentOfEmpty(attributes, NO_ATTRIBUTES);
- this._tagNodes = becomeParentOfEmpty(tagNodes, NO_TAG_NODES);
+ this._attributes = becomeParentOfAll(attributes, ifEmpty: NO_ATTRIBUTES);
+ this._tagNodes = becomeParentOfAll(tagNodes, ifEmpty: NO_TAG_NODES);
}
+ @override
accept(XmlVisitor visitor) => visitor.visitXmlTagNode(this);
/**
@@ -1695,6 +1756,7 @@
return attribute != null ? attribute.text : null;
}
+ @override
Token get beginToken => nodeStart;
/**
@@ -1723,6 +1785,7 @@
return buffer.toString();
}
+ @override
Token get endToken {
if (nodeEnd != null) {
return nodeEnd;
@@ -1767,6 +1830,7 @@
*/
Token get tagToken => _tag;
+ @override
void visitChildren(XmlVisitor visitor) {
for (XmlAttributeNode node in _attributes) {
node.accept(visitor);
@@ -1775,16 +1839,6 @@
node.accept(visitor);
}
}
-
- /**
- * Same as [becomeParentOfAll], but returns given "ifEmpty" if "children" is empty
- */
- List becomeParentOfEmpty(List children, List ifEmpty) {
- if (children != null && children.isEmpty) {
- return ifEmpty;
- }
- return becomeParentOfAll(children);
- }
}
/**
@@ -1867,10 +1921,12 @@
return new HtmlUnit(token, tagNodes, currentToken);
}
+ @override
XmlAttributeNode createAttributeNode(Token name, Token equals, Token value) => new XmlAttributeNode(name, equals, value);
+ @override
XmlTagNode createTagNode(Token nodeStart, Token tag, List<XmlAttributeNode> attributes, Token attributeEnd, List<XmlTagNode> tagNodes, Token contentEnd, Token closingTag, Token nodeEnd) {
- if (isScriptNode(tag, attributes, tagNodes)) {
+ if (_isScriptNode(tag, attributes, tagNodes)) {
HtmlScriptTagNode tagNode = new HtmlScriptTagNode(nodeStart, tag, attributes, attributeEnd, tagNodes, contentEnd, closingTag, nodeEnd);
String contents = tagNode.content;
int contentOffset = attributeEnd.end;
@@ -1887,6 +1943,7 @@
return new XmlTagNode(nodeStart, tag, attributes, attributeEnd, tagNodes, contentEnd, closingTag, nodeEnd);
}
+ @override
bool isSelfClosing(Token tag) => SELF_CLOSING.contains(tag.lexeme);
/**
@@ -1895,7 +1952,7 @@
* @param node the node to be tested (not `null`)
* @return `true` if the node is a Dart script
*/
- bool isScriptNode(Token tag, List<XmlAttributeNode> attributes, List<XmlTagNode> tagNodes) {
+ bool _isScriptNode(Token tag, List<XmlAttributeNode> attributes, List<XmlTagNode> tagNodes) {
if (tagNodes.length != 0 || tag.lexeme != _SCRIPT) {
return false;
}
@@ -1946,6 +2003,7 @@
this._tagNodes = becomeParentOfAll(tagNodes);
}
+ @override
accept(XmlVisitor visitor) => visitor.visitHtmlUnit(this);
/**
@@ -1953,6 +2011,7 @@
*
* @return the element or `null` if the receiver is not resolved
*/
+ @override
HtmlElement get element => super.element as HtmlElement;
/**
@@ -1963,6 +2022,7 @@
*/
List<XmlTagNode> get tagNodes => _tagNodes;
+ @override
void set element(Element element) {
if (element != null && element is! HtmlElement) {
throw new IllegalArgumentException("HtmlElement expected, but ${element.runtimeType} given");
@@ -1970,6 +2030,7 @@
super.element = element;
}
+ @override
void visitChildren(XmlVisitor visitor) {
for (XmlTagNode node in _tagNodes) {
node.accept(visitor);
diff --git a/pkg/analyzer/lib/src/generated/index.dart b/pkg/analyzer/lib/src/generated/index.dart
index b95f79e..faeac7a 100644
--- a/pkg/analyzer/lib/src/generated/index.dart
+++ b/pkg/analyzer/lib/src/generated/index.dart
@@ -50,14 +50,18 @@
this._context = context;
}
+ @override
bool get isQuery => false;
+ @override
void performOperation() {
_indexStore.removeSource(_context, source);
}
+ @override
bool removeWhenSourceRemoved(Source source) => false;
+ @override
String toString() => "RemoveSource(${source.fullName})";
}
@@ -93,8 +97,6 @@
* [IndexStore] which keeps full index in memory.
*/
class MemoryIndexStoreImpl implements MemoryIndexStore {
- static Object _WEAK_SET_VALUE = new Object();
-
/**
* When logging is on, [AnalysisEngine] actually creates
* [InstrumentedAnalysisContextImpl], which wraps [AnalysisContextImpl] used to create
@@ -111,7 +113,7 @@
/**
* @return the [Source] of the enclosing [LibraryElement], may be `null`.
*/
- static Source getLibrarySourceOrNull(Element element) {
+ static Source _getLibrarySourceOrNull(Element element) {
LibraryElement library = element.library;
if (library == null) {
return null;
@@ -123,12 +125,6 @@
}
/**
- * We add [AnalysisContext] to this weak set to ensure that we don't continue to add
- * relationships after some context was removed using [removeContext].
- */
- Expando _removedContexts = new Expando();
-
- /**
* This map is used to canonicalize equal keys.
*/
Map<MemoryIndexStoreImpl_ElementRelationKey, MemoryIndexStoreImpl_ElementRelationKey> _canonicalKeys = {};
@@ -168,10 +164,11 @@
int _locationCount = 0;
+ @override
bool aboutToIndexDart(AnalysisContext context, CompilationUnitElement unitElement) {
context = unwrapContext(context);
- // may be already removed in other thread
- if (isRemovedContext(context)) {
+ // may be already disposed in other thread
+ if (context.isDisposed) {
return false;
}
// validate unit
@@ -207,16 +204,16 @@
if (oldParts != null) {
Set<Source> noParts = oldParts.difference(newParts);
for (Source noPart in noParts) {
- removeLocations(context, library, noPart);
+ _removeLocations(context, library, noPart);
}
}
// remember new parts
libraryToUnits[library] = newParts;
}
// remember libraries in which unit is used
- recordUnitInLibrary(context, library, unit);
+ _recordUnitInLibrary(context, library, unit);
// remove locations
- removeLocations(context, library, unit);
+ _removeLocations(context, library, unit);
// remove keys
{
Map<MemoryIndexStoreImpl_Source2, Set<MemoryIndexStoreImpl_ElementRelationKey>> sourceToKeys = _contextToSourceToKeys[context];
@@ -232,15 +229,16 @@
return true;
}
+ @override
bool aboutToIndexHtml(AnalysisContext context, HtmlElement htmlElement) {
context = unwrapContext(context);
- // may be already removed in other thread
- if (isRemovedContext(context)) {
+ // may be already disposed in other thread
+ if (context.isDisposed) {
return false;
}
// remove locations
Source source = htmlElement.source;
- removeLocations(context, null, source);
+ _removeLocations(context, null, source);
// remove keys
{
Map<MemoryIndexStoreImpl_Source2, Set<MemoryIndexStoreImpl_ElementRelationKey>> sourceToKeys = _contextToSourceToKeys[context];
@@ -253,11 +251,12 @@
}
}
// remember libraries in which unit is used
- recordUnitInLibrary(context, null, source);
+ _recordUnitInLibrary(context, null, source);
// OK, we can index
return true;
}
+ @override
List<Location> getRelationships(Element element, Relationship relationship) {
MemoryIndexStoreImpl_ElementRelationKey key = new MemoryIndexStoreImpl_ElementRelationKey(element, relationship);
Set<Location> locations = _keyToLocations[key];
@@ -267,6 +266,7 @@
return Location.EMPTY_ARRAY;
}
+ @override
String get statistics => "${_locationCount} relationships in ${_keyCount} keys in ${_sourceCount} sources";
int internalGetKeyCount() => _keyToLocations.length;
@@ -303,11 +303,12 @@
return count;
}
+ @override
void recordRelationship(Element element, Relationship relationship, Location location) {
if (element == null || location == null) {
return;
}
- location = location.clone();
+ location = location.newClone();
// at the index level we don't care about Member(s)
if (element is Member) {
element = (element as Member).baseElement;
@@ -318,8 +319,8 @@
AnalysisContext locationContext = location.element.context;
Source elementSource = element.source;
Source locationSource = location.element.source;
- Source elementLibrarySource = getLibrarySourceOrNull(element);
- Source locationLibrarySource = getLibrarySourceOrNull(location.element);
+ Source elementLibrarySource = _getLibrarySourceOrNull(element);
+ Source locationLibrarySource = _getLibrarySourceOrNull(location.element);
// sanity check
if (locationContext == null) {
return;
@@ -333,19 +334,19 @@
if (elementSource == null && element is! NameElementImpl && element is! UniverseElementImpl) {
return;
}
- // may be already removed in other thread
- if (isRemovedContext(elementContext)) {
+ // may be already disposed in other thread
+ if (elementContext != null && elementContext.isDisposed) {
return;
}
- if (isRemovedContext(locationContext)) {
+ if (locationContext.isDisposed) {
return;
}
// record: key -> location(s)
- MemoryIndexStoreImpl_ElementRelationKey key = getCanonicalKey(element, relationship);
+ MemoryIndexStoreImpl_ElementRelationKey key = _getCanonicalKey(element, relationship);
{
Set<Location> locations = _keyToLocations.remove(key);
if (locations == null) {
- locations = createLocationIdentitySet();
+ locations = _createLocationIdentitySet();
} else {
_keyCount--;
}
@@ -391,13 +392,13 @@
}
}
+ @override
void removeContext(AnalysisContext context) {
context = unwrapContext(context);
if (context == null) {
return;
}
- // mark as removed
- markRemovedContext(context);
+ // remove sources
removeSources(context, null);
// remove context
_contextToSourceToKeys.remove(context);
@@ -406,6 +407,7 @@
_contextToUnitToLibraries.remove(context);
}
+ @override
void removeSource(AnalysisContext context, Source unit) {
context = unwrapContext(context);
if (context == null) {
@@ -419,7 +421,7 @@
for (Source library in libraries) {
MemoryIndexStoreImpl_Source2 source2 = new MemoryIndexStoreImpl_Source2(library, unit);
// remove locations defined in source
- removeLocations(context, library, unit);
+ _removeLocations(context, library, unit);
// remove keys for elements defined in source
Map<MemoryIndexStoreImpl_Source2, Set<MemoryIndexStoreImpl_ElementRelationKey>> sourceToKeys = _contextToSourceToKeys[context];
if (sourceToKeys != null) {
@@ -441,6 +443,7 @@
}
}
+ @override
void removeSources(AnalysisContext context, SourceContainer container) {
context = unwrapContext(context);
if (context == null) {
@@ -473,13 +476,13 @@
/**
* Creates new [Set] that uses object identity instead of equals.
*/
- Set<Location> createLocationIdentitySet() => new Set<Location>.identity();
+ Set<Location> _createLocationIdentitySet() => new Set<Location>.identity();
/**
* @return the canonical [ElementRelationKey] for given [Element] and
* [Relationship], i.e. unique instance for this combination.
*/
- MemoryIndexStoreImpl_ElementRelationKey getCanonicalKey(Element element, Relationship relationship) {
+ MemoryIndexStoreImpl_ElementRelationKey _getCanonicalKey(Element element, Relationship relationship) {
MemoryIndexStoreImpl_ElementRelationKey key = new MemoryIndexStoreImpl_ElementRelationKey(element, relationship);
MemoryIndexStoreImpl_ElementRelationKey canonicalKey = _canonicalKeys[key];
if (canonicalKey == null) {
@@ -489,19 +492,7 @@
return canonicalKey;
}
- /**
- * Checks if given [AnalysisContext] is marked as removed.
- */
- bool isRemovedContext(AnalysisContext context) => _removedContexts[context] != null;
-
- /**
- * Marks given [AnalysisContext] as removed.
- */
- void markRemovedContext(AnalysisContext context) {
- _removedContexts[context] = true;
- }
-
- void recordUnitInLibrary(AnalysisContext context, Source library, Source unit) {
+ void _recordUnitInLibrary(AnalysisContext context, Source library, Source unit) {
Map<Source, Set<Source>> unitToLibraries = _contextToUnitToLibraries[context];
if (unitToLibraries == null) {
unitToLibraries = {};
@@ -518,7 +509,7 @@
/**
* Removes locations recorded in the given library/unit pair.
*/
- void removeLocations(AnalysisContext context, Source library, Source unit) {
+ void _removeLocations(AnalysisContext context, Source library, Source unit) {
MemoryIndexStoreImpl_Source2 source2 = new MemoryIndexStoreImpl_Source2(library, unit);
Map<MemoryIndexStoreImpl_Source2, List<Location>> sourceToLocations = _contextToSourceToLocations[context];
if (sourceToLocations != null) {
@@ -553,12 +544,14 @@
this._relationship = relationship;
}
+ @override
bool operator ==(Object obj) {
MemoryIndexStoreImpl_ElementRelationKey other = obj as MemoryIndexStoreImpl_ElementRelationKey;
Element otherElement = other._element;
return identical(other._relationship, _relationship) && otherElement.nameOffset == _element.nameOffset && identical(otherElement.kind, _element.kind) && otherElement.displayName == _element.displayName && otherElement.source == _element.source;
}
+ @override
int get hashCode => JavaArrays.makeHashCode([
_element.source,
_element.nameOffset,
@@ -566,6 +559,7 @@
_element.displayName,
_relationship]);
+ @override
String toString() => "${_element} ${_relationship}";
}
@@ -579,6 +573,7 @@
this._unitSource = unitSource;
}
+ @override
bool operator ==(Object obj) {
if (identical(obj, this)) {
return true;
@@ -590,8 +585,10 @@
return other._librarySource == _librarySource && other._unitSource == _unitSource;
}
+ @override
int get hashCode => JavaArrays.makeHashCode([_librarySource, _unitSource]);
+ @override
String toString() => "${_librarySource} ${_unitSource}";
}
@@ -644,8 +641,10 @@
*/
Source get source => _source;
+ @override
bool get isQuery => false;
+ @override
void performOperation() {
try {
bool mayIndex = _indexStore.aboutToIndexDart(_context, _unitElement);
@@ -659,8 +658,10 @@
}
}
+ @override
bool removeWhenSourceRemoved(Source source) => this._source == source;
+ @override
String toString() => "IndexUnitOperation(${_source.fullName})";
}
@@ -675,20 +676,22 @@
*/
void visitExpression(Expression expression);
+ @override
Object visitXmlAttributeNode(ht.XmlAttributeNode node) {
- visitExpressions(node.expressions);
+ _visitExpressions(node.expressions);
return super.visitXmlAttributeNode(node);
}
+ @override
Object visitXmlTagNode(ht.XmlTagNode node) {
- visitExpressions(node.expressions);
+ _visitExpressions(node.expressions);
return super.visitXmlTagNode(node);
}
/**
* Visits [Expression]s of the given [XmlExpression]s.
*/
- void visitExpressions(List<ht.XmlExpression> expressions) {
+ void _visitExpressions(List<ht.XmlExpression> expressions) {
for (ht.XmlExpression xmlExpression in expressions) {
if (xmlExpression is AngularXmlExpression) {
AngularXmlExpression angularXmlExpression = xmlExpression;
@@ -756,76 +759,11 @@
*/
String get identifier => _uniqueId;
+ @override
String toString() => _uniqueId;
}
/**
- * Implementation of [Index].
- */
-class IndexImpl implements Index {
- IndexStore _store;
-
- OperationQueue _queue;
-
- OperationProcessor _processor;
-
- IndexImpl(IndexStore store, OperationQueue queue, OperationProcessor processor) {
- this._store = store;
- this._queue = queue;
- this._processor = processor;
- }
-
- void getRelationships(Element element, Relationship relationship, RelationshipCallback callback) {
- _queue.enqueue(new GetRelationshipsOperation(_store, element, relationship, callback));
- }
-
- String get statistics => _store.statistics;
-
- void indexHtmlUnit(AnalysisContext context, ht.HtmlUnit unit) {
- if (unit == null) {
- return;
- }
- if (unit.element == null) {
- return;
- }
- if (unit.element.angularCompilationUnit == null) {
- return;
- }
- _queue.enqueue(new IndexHtmlUnitOperation(_store, context, unit));
- }
-
- void indexUnit(AnalysisContext context, CompilationUnit unit) {
- if (unit == null) {
- return;
- }
- if (unit.element == null) {
- return;
- }
- _queue.enqueue(new IndexUnitOperation(_store, context, unit));
- }
-
- void removeContext(AnalysisContext context) {
- _queue.enqueue(new RemoveContextOperation(_store, context));
- }
-
- void removeSource(AnalysisContext context, Source source) {
- _queue.enqueue(new RemoveSourceOperation(_store, context, source));
- }
-
- void removeSources(AnalysisContext context, SourceContainer container) {
- _queue.enqueue(new RemoveSourcesOperation(_store, context, container));
- }
-
- void run() {
- _processor.run();
- }
-
- void stop() {
- _processor.stop(false);
- }
-}
-
-/**
* Instances of the [RemoveSourcesOperation] implement an operation that removes from the
* index any data based on the content of source belonging to a [SourceContainer].
*/
@@ -857,14 +795,18 @@
this._context = context;
}
+ @override
bool get isQuery => false;
+ @override
void performOperation() {
_indexStore.removeSources(_context, container);
}
+ @override
bool removeWhenSourceRemoved(Source source) => false;
+ @override
String toString() => "RemoveSources(${container})";
}
@@ -877,139 +819,6 @@
}
/**
- * Instances of the [OperationProcessor] process the operations on a single
- * [OperationQueue]. Each processor can be run one time on a single thread.
- */
-class OperationProcessor {
- /**
- * The queue containing the operations to be processed.
- */
- OperationQueue _queue;
-
- /**
- * The current state of the processor.
- */
- ProcessorState _state = ProcessorState.READY;
-
- /**
- * The number of milliseconds for which the thread on which the processor is running will wait for
- * an operation to become available if there are no operations ready to be processed.
- */
- static int _WAIT_DURATION = 100;
-
- /**
- * Initialize a newly created operation processor to process the operations on the given queue.
- *
- * @param queue the queue containing the operations to be processed
- */
- OperationProcessor(OperationQueue queue) {
- this._queue = queue;
- }
-
- /**
- * Start processing operations. If the processor is already running on a different thread, then
- * this method will return immediately with no effect. Otherwise, this method will not return
- * until after the processor has been stopped from a different thread or until the thread running
- * the processor has been interrupted.
- */
- void run() {
- // This processor is, or was, already running on a different thread.
- if (_state != ProcessorState.READY) {
- throw new IllegalStateException("Operation processors can only be run one time");
- }
- // OK, run.
- _state = ProcessorState.RUNNING;
- try {
- while (isRunning) {
- // wait for operation
- IndexOperation operation = null;
- {
- operation = _queue.dequeue(_WAIT_DURATION);
- }
- // perform operation
- if (operation != null) {
- try {
- operation.performOperation();
- } catch (exception) {
- AnalysisEngine.instance.logger.logError2("Exception in indexing operation: ${operation}", exception);
- }
- }
- }
- } finally {
- _state = ProcessorState.STOPPED;
- }
- }
-
- /**
- * Stop processing operations after the current operation has completed. If the argument is
- * `true` then this method will wait until the last operation has completed; otherwise this
- * method might return before the last operation has completed.
- *
- * @param wait `true` if this method will wait until the last operation has completed before
- * returning
- * @return the library files for the libraries that need to be analyzed when a new session is
- * started.
- */
- List<Source> stop(bool wait) {
- if (identical(_state, ProcessorState.READY)) {
- _state = ProcessorState.STOPPED;
- return unanalyzedSources;
- } else if (identical(_state, ProcessorState.STOPPED)) {
- return unanalyzedSources;
- } else if (identical(_state, ProcessorState.RUNNING)) {
- _state = ProcessorState.STOP_REQESTED;
- }
- while (wait) {
- if (identical(_state, ProcessorState.STOPPED)) {
- return unanalyzedSources;
- }
- waitOneMs();
- }
- return unanalyzedSources;
- }
-
- /**
- * Waits until processors will switch from "ready" to "running" state.
- *
- * @return `true` if processor is now actually in "running" state, e.g. not in "stopped"
- * state.
- */
- bool waitForRunning() {
- while (identical(_state, ProcessorState.READY)) {
- threadYield();
- }
- return identical(_state, ProcessorState.RUNNING);
- }
-
- /**
- * @return the [Source]s that are not indexed yet.
- */
- List<Source> get unanalyzedSources {
- Set<Source> sources = new Set();
- for (IndexOperation operation in _queue.operations) {
- if (operation is IndexUnitOperation) {
- Source source = operation.source;
- sources.add(source);
- }
- }
- return new List.from(sources);
- }
-
- /**
- * Return `true` if the current state is [ProcessorState#RUNNING].
- *
- * @return `true` if this processor is running
- */
- bool get isRunning => identical(_state, ProcessorState.RUNNING);
-
- void threadYield() {
- }
-
- void waitOneMs() {
- }
-}
-
-/**
* The enumeration <code>ProcessorState</code> represents the possible states of an operation
* processor.
*/
@@ -1210,13 +1019,14 @@
_indexContributor = new IndexContributor_AngularHtmlIndexContributor(store, this);
}
+ @override
void visitExpression(Expression expression) {
// NgFilter
if (expression is SimpleIdentifier) {
SimpleIdentifier identifier = expression;
Element element = identifier.bestElement;
if (element is AngularElement) {
- _store.recordRelationship(element, IndexConstants.ANGULAR_REFERENCE, createLocationForIdentifier(identifier));
+ _store.recordRelationship(element, IndexConstants.ANGULAR_REFERENCE, _createLocationForIdentifier(identifier));
return;
}
}
@@ -1224,6 +1034,7 @@
expression.accept(_indexContributor);
}
+ @override
Object visitHtmlUnit(ht.HtmlUnit node) {
_htmlUnitElement = node.element;
CompilationUnitElement dartUnitElement = _htmlUnitElement.angularCompilationUnit;
@@ -1231,38 +1042,40 @@
return super.visitHtmlUnit(node);
}
+ @override
Object visitXmlAttributeNode(ht.XmlAttributeNode node) {
Element element = node.element;
if (element != null) {
ht.Token nameToken = node.nameToken;
- Location location = createLocationForToken(nameToken);
+ Location location = _createLocationForToken(nameToken);
_store.recordRelationship(element, IndexConstants.ANGULAR_REFERENCE, location);
}
return super.visitXmlAttributeNode(node);
}
+ @override
Object visitXmlTagNode(ht.XmlTagNode node) {
Element element = node.element;
if (element != null) {
// tag
{
ht.Token tagToken = node.tagToken;
- Location location = createLocationForToken(tagToken);
+ Location location = _createLocationForToken(tagToken);
_store.recordRelationship(element, IndexConstants.ANGULAR_REFERENCE, location);
}
// maybe add closing tag range
ht.Token closingTag = node.closingTag;
if (closingTag != null) {
- Location location = createLocationForToken(closingTag);
+ Location location = _createLocationForToken(closingTag);
_store.recordRelationship(element, IndexConstants.ANGULAR_CLOSING_TAG_REFERENCE, location);
}
}
return super.visitXmlTagNode(node);
}
- Location createLocationForIdentifier(SimpleIdentifier identifier) => new Location(_htmlUnitElement, identifier.offset, identifier.length);
+ Location _createLocationForIdentifier(SimpleIdentifier identifier) => new Location(_htmlUnitElement, identifier.offset, identifier.length);
- Location createLocationForToken(ht.Token token) => new Location(_htmlUnitElement, token.offset, token.length);
+ Location _createLocationForToken(ht.Token token) => new Location(_htmlUnitElement, token.offset, token.length);
}
class IndexContributor_AngularHtmlIndexContributor extends IndexContributor {
@@ -1270,8 +1083,10 @@
IndexContributor_AngularHtmlIndexContributor(IndexStore arg0, this.AngularHtmlIndexContributor_this) : super(arg0);
+ @override
Element peekElement() => AngularHtmlIndexContributor_this._htmlUnitElement;
+ @override
void recordRelationship(Element element, Relationship relationship, Location location) {
AngularElement angularElement = AngularHtmlUnitResolver.getAngularElement(element);
if (angularElement != null) {
@@ -1487,10 +1302,12 @@
class UniverseElementImpl extends ElementImpl implements UniverseElement {
static UniverseElementImpl INSTANCE = new UniverseElementImpl();
- UniverseElementImpl() : super.con2("--universe--", -1);
+ UniverseElementImpl() : super("--universe--", -1);
+ @override
accept(ElementVisitor visitor) => null;
+ @override
ElementKind get kind => ElementKind.UNIVERSE;
}
@@ -1552,7 +1369,7 @@
// find ImportElement
String prefix = prefixNode.name;
Map<ImportElement, Set<Element>> importElementsMap = {};
- info._element = internalGetImportElement(libraryElement, prefix, usedElement, importElementsMap);
+ info._element = _internalGetImportElement(libraryElement, prefix, usedElement, importElementsMap);
if (info._element == null) {
return null;
}
@@ -1565,9 +1382,9 @@
* @param location the base location
* @param expression the expression assigned at the given location
*/
- static Location getLocationWithExpressionType(Location location, Expression expression) {
+ static Location _getLocationWithExpressionType(Location location, Expression expression) {
if (expression != null) {
- return new LocationWithData<Type2>.con1(location, expression.bestType);
+ return new LocationWithData<DartType>.con1(location, expression.bestType);
}
return location;
}
@@ -1576,11 +1393,11 @@
* If the given node is the part of the [ConstructorFieldInitializer], returns location with
* type of the initializer expression.
*/
- static Location getLocationWithInitializerType(SimpleIdentifier node, Location location) {
+ static Location _getLocationWithInitializerType(SimpleIdentifier node, Location location) {
if (node.parent is ConstructorFieldInitializer) {
ConstructorFieldInitializer initializer = node.parent as ConstructorFieldInitializer;
if (identical(initializer.fieldName, node)) {
- location = getLocationWithExpressionType(location, initializer.expression);
+ location = _getLocationWithExpressionType(location, initializer.expression);
}
}
return location;
@@ -1596,7 +1413,7 @@
* @param location the raw location
* @return the [Location] with the type of the assigned value
*/
- static Location getLocationWithTypeAssignedToField(SimpleIdentifier identifier, Element element, Location location) {
+ static Location _getLocationWithTypeAssignedToField(SimpleIdentifier identifier, Element element, Location location) {
// we need accessor
if (element is! PropertyAccessorElement) {
return location;
@@ -1636,7 +1453,7 @@
if (parent is AssignmentExpression) {
AssignmentExpression assignment = parent as AssignmentExpression;
Expression rhs = assignment.rightHandSide;
- location = getLocationWithExpressionType(location, rhs);
+ location = _getLocationWithExpressionType(location, rhs);
}
// done
return location;
@@ -1646,7 +1463,7 @@
* @return the [ImportElement] that declares given [PrefixElement] and imports library
* with given "usedElement".
*/
- static ImportElement internalGetImportElement(LibraryElement libraryElement, String prefix, Element usedElement, Map<ImportElement, Set<Element>> importElementsMap) {
+ static ImportElement _internalGetImportElement(LibraryElement libraryElement, String prefix, Element usedElement, Map<ImportElement, Set<Element>> importElementsMap) {
// validate Element
if (usedElement == null) {
return null;
@@ -1716,7 +1533,7 @@
/**
* @return `true` if given "node" is part of an import [Combinator].
*/
- static bool isIdentifierInImportCombinator(SimpleIdentifier node) {
+ static bool _isIdentifierInImportCombinator(SimpleIdentifier node) {
AstNode parent = node.parent;
return parent is Combinator;
}
@@ -1724,7 +1541,7 @@
/**
* @return `true` if given "node" is part of [PrefixedIdentifier] "prefix.node".
*/
- static bool isIdentifierInPrefixedIdentifier(SimpleIdentifier node) {
+ static bool _isIdentifierInPrefixedIdentifier(SimpleIdentifier node) {
AstNode parent = node.parent;
return parent is PrefixedIdentifier && identical(parent.identifier, node);
}
@@ -1733,7 +1550,7 @@
* @return `true` if given [SimpleIdentifier] is "name" part of prefixed identifier or
* method invocation.
*/
- static bool isQualified(SimpleIdentifier node) {
+ static bool _isQualified(SimpleIdentifier node) {
AstNode parent = node.parent;
if (parent is PrefixedIdentifier) {
return identical(parent.identifier, node);
@@ -1783,31 +1600,34 @@
return null;
}
+ @override
Object visitAssignmentExpression(AssignmentExpression node) {
- recordOperatorReference(node.operator, node.bestElement);
+ _recordOperatorReference(node.operator, node.bestElement);
return super.visitAssignmentExpression(node);
}
+ @override
Object visitBinaryExpression(BinaryExpression node) {
- recordOperatorReference(node.operator, node.bestElement);
+ _recordOperatorReference(node.operator, node.bestElement);
return super.visitBinaryExpression(node);
}
+ @override
Object visitClassDeclaration(ClassDeclaration node) {
ClassElement element = node.element;
enterScope(element);
try {
- recordElementDefinition(element, IndexConstants.DEFINES_CLASS);
+ _recordElementDefinition(element, IndexConstants.DEFINES_CLASS);
{
ExtendsClause extendsClause = node.extendsClause;
if (extendsClause != null) {
TypeName superclassNode = extendsClause.superclass;
- recordSuperType(superclassNode, IndexConstants.IS_EXTENDED_BY);
+ _recordSuperType(superclassNode, IndexConstants.IS_EXTENDED_BY);
} else {
InterfaceType superType = element.supertype;
if (superType != null) {
ClassElement objectElement = superType.element;
- recordRelationship(objectElement, IndexConstants.IS_EXTENDED_BY, createLocationFromOffset(node.name.offset, 0));
+ recordRelationship(objectElement, IndexConstants.IS_EXTENDED_BY, _createLocationFromOffset(node.name.offset, 0));
}
}
}
@@ -1815,7 +1635,7 @@
WithClause withClause = node.withClause;
if (withClause != null) {
for (TypeName mixinNode in withClause.mixinTypes) {
- recordSuperType(mixinNode, IndexConstants.IS_MIXED_IN_BY);
+ _recordSuperType(mixinNode, IndexConstants.IS_MIXED_IN_BY);
}
}
}
@@ -1823,32 +1643,33 @@
ImplementsClause implementsClause = node.implementsClause;
if (implementsClause != null) {
for (TypeName interfaceNode in implementsClause.interfaces) {
- recordSuperType(interfaceNode, IndexConstants.IS_IMPLEMENTED_BY);
+ _recordSuperType(interfaceNode, IndexConstants.IS_IMPLEMENTED_BY);
}
}
}
return super.visitClassDeclaration(node);
} finally {
- exitScope();
+ _exitScope();
}
}
+ @override
Object visitClassTypeAlias(ClassTypeAlias node) {
ClassElement element = node.element;
enterScope(element);
try {
- recordElementDefinition(element, IndexConstants.DEFINES_CLASS_ALIAS);
+ _recordElementDefinition(element, IndexConstants.DEFINES_CLASS_ALIAS);
{
TypeName superclassNode = node.superclass;
if (superclassNode != null) {
- recordSuperType(superclassNode, IndexConstants.IS_EXTENDED_BY);
+ _recordSuperType(superclassNode, IndexConstants.IS_EXTENDED_BY);
}
}
{
WithClause withClause = node.withClause;
if (withClause != null) {
for (TypeName mixinNode in withClause.mixinTypes) {
- recordSuperType(mixinNode, IndexConstants.IS_MIXED_IN_BY);
+ _recordSuperType(mixinNode, IndexConstants.IS_MIXED_IN_BY);
}
}
}
@@ -1856,16 +1677,17 @@
ImplementsClause implementsClause = node.implementsClause;
if (implementsClause != null) {
for (TypeName interfaceNode in implementsClause.interfaces) {
- recordSuperType(interfaceNode, IndexConstants.IS_IMPLEMENTED_BY);
+ _recordSuperType(interfaceNode, IndexConstants.IS_IMPLEMENTED_BY);
}
}
}
return super.visitClassTypeAlias(node);
} finally {
- exitScope();
+ _exitScope();
}
}
+ @override
Object visitCompilationUnit(CompilationUnit node) {
CompilationUnitElement unitElement = node.element;
if (unitElement != null) {
@@ -1878,6 +1700,7 @@
return null;
}
+ @override
Object visitConstructorDeclaration(ConstructorDeclaration node) {
ConstructorElement element = node.element;
// define
@@ -1886,10 +1709,10 @@
if (node.name != null) {
int start = node.period.offset;
int end = node.name.end;
- location = createLocationFromOffset(start, end - start);
+ location = _createLocationFromOffset(start, end - start);
} else {
int start = node.returnType.end;
- location = createLocationFromOffset(start, 0);
+ location = _createLocationFromOffset(start, 0);
}
recordRelationship(element, IndexConstants.IS_DEFINED_BY, location);
}
@@ -1898,10 +1721,11 @@
try {
return super.visitConstructorDeclaration(node);
} finally {
- exitScope();
+ _exitScope();
}
}
+ @override
Object visitConstructorName(ConstructorName node) {
ConstructorElement element = node.staticElement;
// in 'class B = A;' actually A constructors are invoked
@@ -1913,86 +1737,94 @@
if (node.name != null) {
int start = node.period.offset;
int end = node.name.end;
- location = createLocationFromOffset(start, end - start);
+ location = _createLocationFromOffset(start, end - start);
} else {
int start = node.type.end;
- location = createLocationFromOffset(start, 0);
+ location = _createLocationFromOffset(start, 0);
}
// record relationship
recordRelationship(element, IndexConstants.IS_REFERENCED_BY, location);
return super.visitConstructorName(node);
}
+ @override
Object visitExportDirective(ExportDirective node) {
ExportElement element = node.element;
if (element != null) {
LibraryElement expLibrary = element.exportedLibrary;
- recordLibraryReference(node, expLibrary);
+ _recordLibraryReference(node, expLibrary);
}
return super.visitExportDirective(node);
}
+ @override
Object visitFormalParameter(FormalParameter node) {
ParameterElement element = node.element;
enterScope(element);
try {
return super.visitFormalParameter(node);
} finally {
- exitScope();
+ _exitScope();
}
}
+ @override
Object visitFunctionDeclaration(FunctionDeclaration node) {
Element element = node.element;
- recordElementDefinition(element, IndexConstants.DEFINES_FUNCTION);
+ _recordElementDefinition(element, IndexConstants.DEFINES_FUNCTION);
enterScope(element);
try {
return super.visitFunctionDeclaration(node);
} finally {
- exitScope();
+ _exitScope();
}
}
+ @override
Object visitFunctionTypeAlias(FunctionTypeAlias node) {
Element element = node.element;
- recordElementDefinition(element, IndexConstants.DEFINES_FUNCTION_TYPE);
+ _recordElementDefinition(element, IndexConstants.DEFINES_FUNCTION_TYPE);
return super.visitFunctionTypeAlias(node);
}
+ @override
Object visitImportDirective(ImportDirective node) {
ImportElement element = node.element;
if (element != null) {
LibraryElement impLibrary = element.importedLibrary;
- recordLibraryReference(node, impLibrary);
+ _recordLibraryReference(node, impLibrary);
}
return super.visitImportDirective(node);
}
+ @override
Object visitIndexExpression(IndexExpression node) {
MethodElement element = node.bestElement;
if (element is MethodElement) {
Token operator = node.leftBracket;
- Location location = createLocationFromToken(operator);
+ Location location = _createLocationFromToken(operator);
recordRelationship(element, IndexConstants.IS_INVOKED_BY_QUALIFIED, location);
}
return super.visitIndexExpression(node);
}
+ @override
Object visitMethodDeclaration(MethodDeclaration node) {
ExecutableElement element = node.element;
enterScope(element);
try {
return super.visitMethodDeclaration(node);
} finally {
- exitScope();
+ _exitScope();
}
}
+ @override
Object visitMethodInvocation(MethodInvocation node) {
SimpleIdentifier name = node.methodName;
Element element = name.bestElement;
if (element is MethodElement) {
- Location location = createLocationFromNode(name);
+ Location location = _createLocationFromNode(name);
Relationship relationship;
if (node.target != null) {
relationship = IndexConstants.IS_INVOKED_BY_QUALIFIED;
@@ -2002,39 +1834,44 @@
recordRelationship(element, relationship, location);
}
if (element is FunctionElement) {
- Location location = createLocationFromNode(name);
+ Location location = _createLocationFromNode(name);
recordRelationship(element, IndexConstants.IS_INVOKED_BY, location);
}
- recordImportElementReferenceWithoutPrefix(name);
+ _recordImportElementReferenceWithoutPrefix(name);
return super.visitMethodInvocation(node);
}
+ @override
Object visitPartDirective(PartDirective node) {
Element element = node.element;
- Location location = createLocationFromNode(node.uri);
+ Location location = _createLocationFromNode(node.uri);
recordRelationship(element, IndexConstants.IS_REFERENCED_BY, location);
return super.visitPartDirective(node);
}
+ @override
Object visitPartOfDirective(PartOfDirective node) {
- Location location = createLocationFromNode(node.libraryName);
+ Location location = _createLocationFromNode(node.libraryName);
recordRelationship(node.element, IndexConstants.IS_REFERENCED_BY, location);
return null;
}
+ @override
Object visitPostfixExpression(PostfixExpression node) {
- recordOperatorReference(node.operator, node.bestElement);
+ _recordOperatorReference(node.operator, node.bestElement);
return super.visitPostfixExpression(node);
}
+ @override
Object visitPrefixExpression(PrefixExpression node) {
- recordOperatorReference(node.operator, node.bestElement);
+ _recordOperatorReference(node.operator, node.bestElement);
return super.visitPrefixExpression(node);
}
+ @override
Object visitSimpleIdentifier(SimpleIdentifier node) {
Element nameElement = new NameElementImpl(node.name);
- Location location = createLocationFromNode(node);
+ Location location = _createLocationFromNode(node);
// name in declaration
if (node.inDeclarationContext()) {
recordRelationship(nameElement, IndexConstants.IS_DEFINED_BY, location);
@@ -2043,26 +1880,26 @@
// prepare information
Element element = node.bestElement;
// qualified name reference
- recordQualifiedMemberReference(node, element, nameElement, location);
+ _recordQualifiedMemberReference(node, element, nameElement, location);
// stop if already handled
- if (isAlreadyHandledName(node)) {
+ if (_isAlreadyHandledName(node)) {
return null;
}
// record specific relations
if (element is ClassElement || element is FunctionElement || element is FunctionTypeAliasElement || element is LabelElement || element is TypeParameterElement) {
recordRelationship(element, IndexConstants.IS_REFERENCED_BY, location);
} else if (element is FieldElement) {
- location = getLocationWithInitializerType(node, location);
+ location = _getLocationWithInitializerType(node, location);
recordRelationship(element, IndexConstants.IS_REFERENCED_BY, location);
} else if (element is FieldFormalParameterElement) {
FieldFormalParameterElement fieldParameter = element;
FieldElement field = fieldParameter.field;
recordRelationship(field, IndexConstants.IS_REFERENCED_BY_QUALIFIED, location);
} else if (element is PrefixElement) {
- recordImportElementReferenceWithPrefix(node);
+ _recordImportElementReferenceWithPrefix(node);
} else if (element is PropertyAccessorElement || element is MethodElement) {
- location = getLocationWithTypeAssignedToField(node, element, location);
- if (isQualified(node)) {
+ location = _getLocationWithTypeAssignedToField(node, element, location);
+ if (_isQualified(node)) {
recordRelationship(element, IndexConstants.IS_REFERENCED_BY_QUALIFIED, location);
} else {
recordRelationship(element, IndexConstants.IS_REFERENCED_BY_UNQUALIFIED, location);
@@ -2080,51 +1917,55 @@
recordRelationship(element, IndexConstants.IS_REFERENCED_BY, location);
}
}
- recordImportElementReferenceWithoutPrefix(node);
+ _recordImportElementReferenceWithoutPrefix(node);
return super.visitSimpleIdentifier(node);
}
+ @override
Object visitSuperConstructorInvocation(SuperConstructorInvocation node) {
ConstructorElement element = node.staticElement;
Location location;
if (node.constructorName != null) {
int start = node.period.offset;
int end = node.constructorName.end;
- location = createLocationFromOffset(start, end - start);
+ location = _createLocationFromOffset(start, end - start);
} else {
int start = node.keyword.end;
- location = createLocationFromOffset(start, 0);
+ location = _createLocationFromOffset(start, 0);
}
recordRelationship(element, IndexConstants.IS_REFERENCED_BY, location);
return super.visitSuperConstructorInvocation(node);
}
+ @override
Object visitTopLevelVariableDeclaration(TopLevelVariableDeclaration node) {
VariableDeclarationList variables = node.variables;
for (VariableDeclaration variableDeclaration in variables.variables) {
Element element = variableDeclaration.element;
- recordElementDefinition(element, IndexConstants.DEFINES_VARIABLE);
+ _recordElementDefinition(element, IndexConstants.DEFINES_VARIABLE);
}
return super.visitTopLevelVariableDeclaration(node);
}
+ @override
Object visitTypeParameter(TypeParameter node) {
TypeParameterElement element = node.element;
enterScope(element);
try {
return super.visitTypeParameter(node);
} finally {
- exitScope();
+ _exitScope();
}
}
+ @override
Object visitVariableDeclaration(VariableDeclaration node) {
VariableElement element = node.element;
// record declaration
{
SimpleIdentifier name = node.name;
- Location location = createLocationFromNode(name);
- location = getLocationWithExpressionType(location, node.initializer);
+ Location location = _createLocationFromNode(name);
+ location = _getLocationWithExpressionType(location, node.initializer);
recordRelationship(element, IndexConstants.IS_DEFINED_BY, location);
}
// visit
@@ -2132,10 +1973,11 @@
try {
return super.visitVariableDeclaration(node);
} finally {
- exitScope();
+ _exitScope();
}
}
+ @override
Object visitVariableDeclarationList(VariableDeclarationList node) {
NodeList<VariableDeclaration> variables = node.variables;
if (variables != null) {
@@ -2148,7 +1990,7 @@
try {
type.accept(this);
} finally {
- exitScope();
+ _exitScope();
}
// only one iteration
break;
@@ -2173,7 +2015,7 @@
/**
* @return the [Location] representing location of the [AstNode].
*/
- Location createLocationFromNode(AstNode node) => createLocationFromOffset(node.offset, node.length);
+ Location _createLocationFromNode(AstNode node) => _createLocationFromOffset(node.offset, node.length);
/**
* @param offset the offset of the location within [Source]
@@ -2181,7 +2023,7 @@
* @return the [Location] representing the given offset and length within the inner-most
* [Element].
*/
- Location createLocationFromOffset(int offset, int length) {
+ Location _createLocationFromOffset(int offset, int length) {
Element element = peekElement();
return new Location(element, offset, length);
}
@@ -2189,12 +2031,12 @@
/**
* @return the [Location] representing location of the [Token].
*/
- Location createLocationFromToken(Token token) => createLocationFromOffset(token.offset, token.length);
+ Location _createLocationFromToken(Token token) => _createLocationFromOffset(token.offset, token.length);
/**
* Exit the current scope.
*/
- void exitScope() {
+ void _exitScope() {
_elementStack.removeFirst();
}
@@ -2202,7 +2044,7 @@
* @return `true` if given node already indexed as more interesting reference, so it should
* not be indexed again.
*/
- bool isAlreadyHandledName(SimpleIdentifier node) {
+ bool _isAlreadyHandledName(SimpleIdentifier node) {
AstNode parent = node.parent;
if (parent is MethodInvocation) {
Element element = node.staticElement;
@@ -2216,7 +2058,7 @@
/**
* Records the [Element] definition in the library and universe.
*/
- void recordElementDefinition(Element element, Relationship relationship) {
+ void _recordElementDefinition(Element element, Relationship relationship) {
Location location = createLocation(element);
recordRelationship(_libraryElement, relationship, location);
recordRelationship(IndexConstants.UNIVERSE, relationship, location);
@@ -2226,17 +2068,17 @@
* Records [ImportElement] reference if given [SimpleIdentifier] references some
* top-level element and not qualified with import prefix.
*/
- void recordImportElementReferenceWithoutPrefix(SimpleIdentifier node) {
- if (isIdentifierInImportCombinator(node)) {
+ void _recordImportElementReferenceWithoutPrefix(SimpleIdentifier node) {
+ if (_isIdentifierInImportCombinator(node)) {
return;
}
- if (isIdentifierInPrefixedIdentifier(node)) {
+ if (_isIdentifierInPrefixedIdentifier(node)) {
return;
}
Element element = node.staticElement;
- ImportElement importElement = internalGetImportElement(_libraryElement, null, element, _importElementsMap);
+ ImportElement importElement = _internalGetImportElement(_libraryElement, null, element, _importElementsMap);
if (importElement != null) {
- Location location = createLocationFromOffset(node.offset, 0);
+ Location location = _createLocationFromOffset(node.offset, 0);
recordRelationship(importElement, IndexConstants.IS_REFERENCED_BY, location);
}
}
@@ -2245,12 +2087,12 @@
* Records [ImportElement] that declares given prefix and imports library with element used
* with given prefix node.
*/
- void recordImportElementReferenceWithPrefix(SimpleIdentifier prefixNode) {
+ void _recordImportElementReferenceWithPrefix(SimpleIdentifier prefixNode) {
IndexContributor_ImportElementInfo info = getImportElementInfo(prefixNode);
if (info != null) {
int offset = prefixNode.offset;
int length = info._periodEnd - offset;
- Location location = createLocationFromOffset(offset, length);
+ Location location = _createLocationFromOffset(offset, length);
recordRelationship(info._element, IndexConstants.IS_REFERENCED_BY, location);
}
}
@@ -2259,9 +2101,9 @@
* Records reference to defining [CompilationUnitElement] of the given
* [LibraryElement].
*/
- void recordLibraryReference(UriBasedDirective node, LibraryElement library) {
+ void _recordLibraryReference(UriBasedDirective node, LibraryElement library) {
if (library != null) {
- Location location = createLocationFromNode(node.uri);
+ Location location = _createLocationFromNode(node.uri);
recordRelationship(library.definingCompilationUnit, IndexConstants.IS_REFERENCED_BY, location);
}
}
@@ -2269,9 +2111,9 @@
/**
* Record reference to the given operator [Element] and name.
*/
- void recordOperatorReference(Token operator, Element element) {
+ void _recordOperatorReference(Token operator, Element element) {
// prepare location
- Location location = createLocationFromToken(operator);
+ Location location = _createLocationFromToken(operator);
// record name reference
{
String name = operator.lexeme;
@@ -2298,8 +2140,8 @@
* Records reference if the given [SimpleIdentifier] looks like a qualified property access
* or method invocation.
*/
- void recordQualifiedMemberReference(SimpleIdentifier node, Element element, Element nameElement, Location location) {
- if (isQualified(node)) {
+ void _recordQualifiedMemberReference(SimpleIdentifier node, Element element, Element nameElement, Location location) {
+ if (_isQualified(node)) {
Relationship relationship = element != null ? IndexConstants.IS_REFERENCED_BY_QUALIFIED_RESOLVED : IndexConstants.IS_REFERENCED_BY_QUALIFIED_UNRESOLVED;
recordRelationship(nameElement, relationship, location);
}
@@ -2309,12 +2151,12 @@
* Records extends/implements relationships between given [ClassElement] and [Type] of
* "superNode".
*/
- void recordSuperType(TypeName superNode, Relationship relationship) {
+ void _recordSuperType(TypeName superNode, Relationship relationship) {
if (superNode != null) {
Identifier superName = superNode.name;
if (superName != null) {
Element superElement = superName.staticElement;
- recordRelationship(superElement, relationship, createLocationFromNode(superNode));
+ recordRelationship(superElement, relationship, _createLocationFromNode(superNode));
}
}
}
@@ -2331,162 +2173,16 @@
}
/**
- * Factory for [Index] and [IndexStore].
- */
-class IndexFactory {
- /**
- * @return the new instance of [Index] which uses given [IndexStore].
- */
- static Index newIndex(IndexStore store) {
- OperationQueue queue = new OperationQueue();
- OperationProcessor processor = new OperationProcessor(queue);
- return new IndexImpl(store, queue, processor);
- }
-
- /**
- * @return the new instance of [MemoryIndexStore].
- */
- static MemoryIndexStore newMemoryIndexStore() => new MemoryIndexStoreImpl();
-}
-
-/**
- * Instances of the [OperationQueue] represent a queue of operations against the index that
- * are waiting to be performed.
- */
-class OperationQueue {
- /**
- * The non-query operations that are waiting to be performed.
- */
- Queue<IndexOperation> _nonQueryOperations = new Queue();
-
- /**
- * The query operations that are waiting to be performed.
- */
- Queue<IndexOperation> _queryOperations = new Queue();
-
- /**
- * `true` if query operations should be returned by [dequeue] or {code false}
- * if not.
- */
- bool _processQueries = true;
-
- /**
- * If this queue is not empty, then remove the next operation from the head of this queue and
- * return it. If this queue is empty (see [setProcessQueries], then the behavior
- * of this method depends on the value of the argument. If the argument is less than or equal to
- * zero (<code>0</code>), then `null` will be returned immediately. If the argument is
- * greater than zero, then this method will wait until at least one operation has been added to
- * this queue or until the given amount of time has passed. If, at the end of that time, this
- * queue is empty, then `null` will be returned. If this queue is not empty, then the first
- * operation will be removed and returned.
- *
- * Note that `null` can be returned, even if a positive timeout is given.
- *
- * Note too that this method's timeout is not treated the same way as the timeout value used for
- * [Object#wait]. In particular, it is not possible to cause this method to wait for
- * an indefinite period of time.
- *
- * @param timeout the maximum number of milliseconds to wait for an operation to be available
- * before giving up and returning `null`
- * @return the operation that was removed from the queue
- * @throws InterruptedException if the thread on which this method is running was interrupted
- * while it was waiting for an operation to be added to the queue
- */
- IndexOperation dequeue(int timeout) {
- if (_nonQueryOperations.isEmpty && (!_processQueries || _queryOperations.isEmpty)) {
- if (timeout <= 0) {
- return null;
- }
- waitForOperationAvailable(timeout);
- }
- if (!_nonQueryOperations.isEmpty) {
- return _nonQueryOperations.removeFirst();
- }
- if (_processQueries && !_queryOperations.isEmpty) {
- return _queryOperations.removeFirst();
- }
- return null;
- }
-
- /**
- * Add the given operation to the tail of this queue.
- *
- * @param operation the operation to be added to the queue
- */
- void enqueue(IndexOperation operation) {
- if (operation is RemoveSourceOperation) {
- Source source = operation.source;
- removeForSource(source, _nonQueryOperations);
- removeForSource(source, _queryOperations);
- }
- if (operation.isQuery) {
- _queryOperations.add(operation);
- } else {
- _nonQueryOperations.add(operation);
- }
- notifyOperationAvailable();
- }
-
- /**
- * Return a list containing all of the operations that are currently on the queue. Modifying this
- * list will not affect the state of the queue.
- *
- * @return all of the operations that are currently on the queue
- */
- List<IndexOperation> get operations {
- List<IndexOperation> operations = [];
- operations.addAll(_nonQueryOperations);
- operations.addAll(_queryOperations);
- return operations;
- }
-
- /**
- * Set whether the receiver's [dequeue] method should return query operations.
- *
- * @param processQueries `true` if the receiver's [dequeue] method should
- * return query operations or `false` if query operations should be queued but not
- * returned by the receiver's [dequeue] method until this method is called
- * with a value of `true`.
- */
- void set processQueries(bool processQueries) {
- if (this._processQueries != processQueries) {
- this._processQueries = processQueries;
- if (processQueries && !_queryOperations.isEmpty) {
- notifyOperationAvailable();
- }
- }
- }
-
- /**
- * Return the number of operations on the queue.
- *
- * @return the number of operations on the queue
- */
- int size() => _nonQueryOperations.length + _queryOperations.length;
-
- void notifyOperationAvailable() {
- }
-
- /**
- * Removes operations that should be removed when given [Source] is removed.
- */
- void removeForSource(Source source, Queue<IndexOperation> operations) {
- operations.removeWhere((_) => _.removeWhenSourceRemoved(source));
- }
-
- void waitForOperationAvailable(int timeout) {
- }
-}
-
-/**
* Special [Element] which is used to index references to the name without specifying concrete
* kind of this name - field, method or something else.
*/
class NameElementImpl extends ElementImpl {
- NameElementImpl(String name) : super.con2("name:${name}", -1);
+ NameElementImpl(String name) : super("name:${name}", -1);
+ @override
accept(ElementVisitor visitor) => null;
+ @override
ElementKind get kind => ElementKind.NAME;
}
@@ -2501,17 +2197,18 @@
this._store = store;
}
+ @override
Object visitClassDeclaration(ClassDeclaration node) {
ClassElement classElement = node.element;
if (classElement != null) {
List<ToolkitObjectElement> toolkitObjects = classElement.toolkitObjects;
for (ToolkitObjectElement object in toolkitObjects) {
if (object is AngularComponentElement) {
- indexComponent(object);
+ _indexComponent(object);
}
if (object is AngularDirectiveElement) {
AngularDirectiveElement directive = object;
- indexDirective(directive);
+ _indexDirective(directive);
}
}
}
@@ -2519,20 +2216,21 @@
return null;
}
+ @override
Object visitCompilationUnitMember(CompilationUnitMember node) => null;
- void indexComponent(AngularComponentElement component) {
- indexProperties(component.properties);
+ void _indexComponent(AngularComponentElement component) {
+ _indexProperties(component.properties);
}
- void indexDirective(AngularDirectiveElement directive) {
- indexProperties(directive.properties);
+ void _indexDirective(AngularDirectiveElement directive) {
+ _indexProperties(directive.properties);
}
/**
* Index [FieldElement] references from [AngularPropertyElement]s.
*/
- void indexProperties(List<AngularPropertyElement> properties) {
+ void _indexProperties(List<AngularPropertyElement> properties) {
for (AngularPropertyElement property in properties) {
FieldElement field = property.field;
if (field != null) {
@@ -2586,14 +2284,18 @@
this._indexStore = indexStore;
}
+ @override
bool get isQuery => false;
+ @override
void performOperation() {
_indexStore.removeContext(context);
}
+ @override
bool removeWhenSourceRemoved(Source source) => false;
+ @override
String toString() => "RemoveContext(${context})";
}
@@ -2646,8 +2348,10 @@
*/
Source get source => _source;
+ @override
bool get isQuery => false;
+ @override
void performOperation() {
try {
bool mayIndex = _indexStore.aboutToIndexHtml(_context, _htmlElement);
@@ -2661,8 +2365,10 @@
}
}
+ @override
bool removeWhenSourceRemoved(Source source) => this._source == source;
+ @override
String toString() => "IndexHtmlUnitOperation(${_source.fullName})";
}
@@ -2711,8 +2417,12 @@
}
}
- Location clone() => new Location(element, offset, length);
+ /**
+ * Returns a clone of this [Location].
+ */
+ Location newClone() => new Location(element, offset, length);
+ @override
String toString() => "[${offset} - ${(offset + length)}) in ${element}";
}
@@ -2744,16 +2454,20 @@
this._indexStore = indexStore;
}
+ @override
bool get isQuery => true;
+ @override
void performOperation() {
List<Location> locations;
locations = _indexStore.getRelationships(element, relationship);
callback.hasRelationships(element, relationship, locations);
}
+ @override
bool removeWhenSourceRemoved(Source source) => false;
+ @override
String toString() => "GetRelationships(${element}, ${relationship})";
}
@@ -2767,7 +2481,8 @@
LocationWithData.con2(Element element, int offset, int length, this.data) : super(element, offset, length);
- Location clone() => new LocationWithData<D>.con2(element, offset, length, data);
+ @override
+ Location newClone() => new LocationWithData<D>.con2(element, offset, length, data);
}
/**
diff --git a/pkg/analyzer/lib/src/generated/instrumentation.dart b/pkg/analyzer/lib/src/generated/instrumentation.dart
index ee22f0b..73d6214 100644
--- a/pkg/analyzer/lib/src/generated/instrumentation.dart
+++ b/pkg/analyzer/lib/src/generated/instrumentation.dart
@@ -102,34 +102,47 @@
}
class InstrumentationBuilder_Instrumentation_NULL_INSTRUMENTATION_BUILDER implements InstrumentationBuilder {
+ @override
InstrumentationBuilder data(String name, bool value) => this;
+ @override
InstrumentationBuilder data2(String name, int value) => this;
+ @override
InstrumentationBuilder data3(String name, String value) => this;
+ @override
InstrumentationBuilder data4(String name, List<String> value) => this;
+ @override
InstrumentationLevel get instrumentationLevel => InstrumentationLevel.OFF;
+ @override
void log() {
}
+ @override
void log2(int minTimeToLong) {
}
+ @override
InstrumentationBuilder metric(String name, bool value) => this;
+ @override
InstrumentationBuilder metric2(String name, int value) => this;
+ @override
InstrumentationBuilder metric3(String name, String value) => this;
+ @override
InstrumentationBuilder metric4(String name, List<String> value) => this;
+ @override
InstrumentationBuilder record(Exception exception) => this;
}
class InstrumentationLogger_Instrumentation_NULL_LOGGER implements InstrumentationLogger {
+ @override
InstrumentationBuilder createBuilder(String name) => Instrumentation._NULL_INSTRUMENTATION_BUILDER;
}
diff --git a/pkg/analyzer/lib/src/generated/parser.dart b/pkg/analyzer/lib/src/generated/parser.dart
index 42a5242..dd2d982 100644
--- a/pkg/analyzer/lib/src/generated/parser.dart
+++ b/pkg/analyzer/lib/src/generated/parser.dart
@@ -106,15 +106,16 @@
*/
Token varKeyword;
+ @override
String toString() {
JavaStringBuilder builder = new JavaStringBuilder();
- bool needsSpace = appendKeyword(builder, false, abstractKeyword);
- needsSpace = appendKeyword(builder, needsSpace, constKeyword);
- needsSpace = appendKeyword(builder, needsSpace, externalKeyword);
- needsSpace = appendKeyword(builder, needsSpace, factoryKeyword);
- needsSpace = appendKeyword(builder, needsSpace, finalKeyword);
- needsSpace = appendKeyword(builder, needsSpace, staticKeyword);
- appendKeyword(builder, needsSpace, varKeyword);
+ bool needsSpace = _appendKeyword(builder, false, abstractKeyword);
+ needsSpace = _appendKeyword(builder, needsSpace, constKeyword);
+ needsSpace = _appendKeyword(builder, needsSpace, externalKeyword);
+ needsSpace = _appendKeyword(builder, needsSpace, factoryKeyword);
+ needsSpace = _appendKeyword(builder, needsSpace, finalKeyword);
+ needsSpace = _appendKeyword(builder, needsSpace, staticKeyword);
+ _appendKeyword(builder, needsSpace, varKeyword);
return builder.toString();
}
@@ -127,7 +128,7 @@
* @param keyword the keyword to be appended
* @return `true` if subsequent keywords need to be prefixed with a space
*/
- bool appendKeyword(JavaStringBuilder builder, bool needsSpace, Token keyword) {
+ bool _appendKeyword(JavaStringBuilder builder, bool needsSpace, Token keyword) {
if (keyword != null) {
if (needsSpace) {
builder.appendChar(0x20);
@@ -168,13 +169,15 @@
this._oldNode = oldNode;
}
+ @override
AstNode visitAdjacentStrings(AdjacentStrings node) {
if (node.strings.contains(_oldNode)) {
return _parser.parseStringLiteral();
}
- return notAChild(node);
+ return _notAChild(node);
}
+ @override
AstNode visitAnnotation(Annotation node) {
if (identical(_oldNode, node.name)) {
throw new InsufficientContextException();
@@ -183,39 +186,44 @@
} else if (identical(_oldNode, node.arguments)) {
return _parser.parseArgumentList();
}
- return notAChild(node);
+ return _notAChild(node);
}
+ @override
AstNode visitArgumentDefinitionTest(ArgumentDefinitionTest node) {
if (identical(_oldNode, node.identifier)) {
return _parser.parseSimpleIdentifier();
}
- return notAChild(node);
+ return _notAChild(node);
}
+ @override
AstNode visitArgumentList(ArgumentList node) {
if (node.arguments.contains(_oldNode)) {
return _parser.parseArgument();
}
- return notAChild(node);
+ return _notAChild(node);
}
+ @override
AstNode visitAsExpression(AsExpression node) {
if (identical(_oldNode, node.expression)) {
return _parser.parseBitwiseOrExpression();
} else if (identical(_oldNode, node.type)) {
return _parser.parseTypeName();
}
- return notAChild(node);
+ return _notAChild(node);
}
+ @override
AstNode visitAssertStatement(AssertStatement node) {
if (identical(_oldNode, node.condition)) {
return _parser.parseExpression2();
}
- return notAChild(node);
+ return _notAChild(node);
}
+ @override
AstNode visitAssignmentExpression(AssignmentExpression node) {
if (identical(_oldNode, node.leftHandSide)) {
// TODO(brianwilkerson) If the assignment is part of a cascade section, then we don't have a
@@ -224,55 +232,62 @@
// return parser.parseConditionalExpression();
throw new InsufficientContextException();
} else if (identical(_oldNode, node.rightHandSide)) {
- if (isCascadeAllowedInAssignment(node)) {
+ if (_isCascadeAllowedInAssignment(node)) {
return _parser.parseExpression2();
}
return _parser.parseExpressionWithoutCascade();
}
- return notAChild(node);
+ return _notAChild(node);
}
+ @override
AstNode visitBinaryExpression(BinaryExpression node) {
if (identical(_oldNode, node.leftOperand)) {
throw new InsufficientContextException();
} else if (identical(_oldNode, node.rightOperand)) {
throw new InsufficientContextException();
}
- return notAChild(node);
+ return _notAChild(node);
}
+ @override
AstNode visitBlock(Block node) {
if (node.statements.contains(_oldNode)) {
return _parser.parseStatement2();
}
- return notAChild(node);
+ return _notAChild(node);
}
+ @override
AstNode visitBlockFunctionBody(BlockFunctionBody node) {
if (identical(_oldNode, node.block)) {
return _parser.parseBlock();
}
- return notAChild(node);
+ return _notAChild(node);
}
- AstNode visitBooleanLiteral(BooleanLiteral node) => notAChild(node);
+ @override
+ AstNode visitBooleanLiteral(BooleanLiteral node) => _notAChild(node);
+ @override
AstNode visitBreakStatement(BreakStatement node) {
if (identical(_oldNode, node.label)) {
return _parser.parseSimpleIdentifier();
}
- return notAChild(node);
+ return _notAChild(node);
}
+ @override
AstNode visitCascadeExpression(CascadeExpression node) {
if (identical(_oldNode, node.target)) {
return _parser.parseConditionalExpression();
} else if (node.cascadeSections.contains(_oldNode)) {
throw new InsufficientContextException();
}
- return notAChild(node);
+ return _notAChild(node);
}
+ @override
AstNode visitCatchClause(CatchClause node) {
if (identical(_oldNode, node.exceptionType)) {
return _parser.parseTypeName();
@@ -283,9 +298,10 @@
} else if (identical(_oldNode, node.body)) {
return _parser.parseBlock();
}
- return notAChild(node);
+ return _notAChild(node);
}
+ @override
AstNode visitClassDeclaration(ClassDeclaration node) {
if (identical(_oldNode, node.documentationComment)) {
throw new InsufficientContextException();
@@ -308,9 +324,10 @@
}
return member;
}
- return notAChild(node);
+ return _notAChild(node);
}
+ @override
AstNode visitClassTypeAlias(ClassTypeAlias node) {
if (identical(_oldNode, node.documentationComment)) {
throw new InsufficientContextException();
@@ -327,24 +344,28 @@
} else if (identical(_oldNode, node.implementsClause)) {
return _parser.parseImplementsClause();
}
- return notAChild(node);
+ return _notAChild(node);
}
+ @override
AstNode visitComment(Comment node) {
throw new InsufficientContextException();
}
+ @override
AstNode visitCommentReference(CommentReference node) {
if (identical(_oldNode, node.identifier)) {
return _parser.parsePrefixedIdentifier();
}
- return notAChild(node);
+ return _notAChild(node);
}
+ @override
AstNode visitCompilationUnit(CompilationUnit node) {
throw new InsufficientContextException();
}
+ @override
AstNode visitConditionalExpression(ConditionalExpression node) {
if (identical(_oldNode, node.condition)) {
return _parser.parseLogicalOrExpression();
@@ -353,9 +374,10 @@
} else if (identical(_oldNode, node.elseExpression)) {
return _parser.parseExpressionWithoutCascade();
}
- return notAChild(node);
+ return _notAChild(node);
}
+ @override
AstNode visitConstructorDeclaration(ConstructorDeclaration node) {
if (identical(_oldNode, node.documentationComment)) {
throw new InsufficientContextException();
@@ -374,34 +396,38 @@
} else if (identical(_oldNode, node.body)) {
throw new InsufficientContextException();
}
- return notAChild(node);
+ return _notAChild(node);
}
+ @override
AstNode visitConstructorFieldInitializer(ConstructorFieldInitializer node) {
if (identical(_oldNode, node.fieldName)) {
return _parser.parseSimpleIdentifier();
} else if (identical(_oldNode, node.expression)) {
throw new InsufficientContextException();
}
- return notAChild(node);
+ return _notAChild(node);
}
+ @override
AstNode visitConstructorName(ConstructorName node) {
if (identical(_oldNode, node.type)) {
return _parser.parseTypeName();
} else if (identical(_oldNode, node.name)) {
return _parser.parseSimpleIdentifier();
}
- return notAChild(node);
+ return _notAChild(node);
}
+ @override
AstNode visitContinueStatement(ContinueStatement node) {
if (identical(_oldNode, node.label)) {
return _parser.parseSimpleIdentifier();
}
- return notAChild(node);
+ return _notAChild(node);
}
+ @override
AstNode visitDeclaredIdentifier(DeclaredIdentifier node) {
if (identical(_oldNode, node.documentationComment)) {
throw new InsufficientContextException();
@@ -412,33 +438,39 @@
} else if (identical(_oldNode, node.identifier)) {
return _parser.parseSimpleIdentifier();
}
- return notAChild(node);
+ return _notAChild(node);
}
+ @override
AstNode visitDefaultFormalParameter(DefaultFormalParameter node) {
if (identical(_oldNode, node.parameter)) {
return _parser.parseNormalFormalParameter();
} else if (identical(_oldNode, node.defaultValue)) {
return _parser.parseExpression2();
}
- return notAChild(node);
+ return _notAChild(node);
}
+ @override
AstNode visitDoStatement(DoStatement node) {
if (identical(_oldNode, node.body)) {
return _parser.parseStatement2();
} else if (identical(_oldNode, node.condition)) {
return _parser.parseExpression2();
}
- return notAChild(node);
+ return _notAChild(node);
}
- AstNode visitDoubleLiteral(DoubleLiteral node) => notAChild(node);
+ @override
+ AstNode visitDoubleLiteral(DoubleLiteral node) => _notAChild(node);
- AstNode visitEmptyFunctionBody(EmptyFunctionBody node) => notAChild(node);
+ @override
+ AstNode visitEmptyFunctionBody(EmptyFunctionBody node) => _notAChild(node);
- AstNode visitEmptyStatement(EmptyStatement node) => notAChild(node);
+ @override
+ AstNode visitEmptyStatement(EmptyStatement node) => _notAChild(node);
+ @override
AstNode visitExportDirective(ExportDirective node) {
if (identical(_oldNode, node.documentationComment)) {
throw new InsufficientContextException();
@@ -449,30 +481,34 @@
} else if (node.combinators.contains(_oldNode)) {
throw new IncrementalParseException();
}
- return notAChild(node);
+ return _notAChild(node);
}
+ @override
AstNode visitExpressionFunctionBody(ExpressionFunctionBody node) {
if (identical(_oldNode, node.expression)) {
return _parser.parseExpression2();
}
- return notAChild(node);
+ return _notAChild(node);
}
+ @override
AstNode visitExpressionStatement(ExpressionStatement node) {
if (identical(_oldNode, node.expression)) {
return _parser.parseExpression2();
}
- return notAChild(node);
+ return _notAChild(node);
}
+ @override
AstNode visitExtendsClause(ExtendsClause node) {
if (identical(_oldNode, node.superclass)) {
return _parser.parseTypeName();
}
- return notAChild(node);
+ return _notAChild(node);
}
+ @override
AstNode visitFieldDeclaration(FieldDeclaration node) {
if (identical(_oldNode, node.documentationComment)) {
throw new InsufficientContextException();
@@ -481,9 +517,10 @@
} else if (identical(_oldNode, node.fields)) {
throw new InsufficientContextException();
}
- return notAChild(node);
+ return _notAChild(node);
}
+ @override
AstNode visitFieldFormalParameter(FieldFormalParameter node) {
if (identical(_oldNode, node.documentationComment)) {
throw new InsufficientContextException();
@@ -496,9 +533,10 @@
} else if (identical(_oldNode, node.parameters)) {
return _parser.parseFormalParameterList();
}
- return notAChild(node);
+ return _notAChild(node);
}
+ @override
AstNode visitForEachStatement(ForEachStatement node) {
if (identical(_oldNode, node.loopVariable)) {
throw new InsufficientContextException();
@@ -507,14 +545,16 @@
} else if (identical(_oldNode, node.body)) {
return _parser.parseStatement2();
}
- return notAChild(node);
+ return _notAChild(node);
}
+ @override
AstNode visitFormalParameterList(FormalParameterList node) {
// We don't know which kind of parameter to parse.
throw new InsufficientContextException();
}
+ @override
AstNode visitForStatement(ForStatement node) {
if (identical(_oldNode, node.variables)) {
throw new InsufficientContextException();
@@ -527,9 +567,10 @@
} else if (identical(_oldNode, node.body)) {
return _parser.parseStatement2();
}
- return notAChild(node);
+ return _notAChild(node);
}
+ @override
AstNode visitFunctionDeclaration(FunctionDeclaration node) {
if (identical(_oldNode, node.documentationComment)) {
throw new InsufficientContextException();
@@ -542,34 +583,38 @@
} else if (identical(_oldNode, node.functionExpression)) {
throw new InsufficientContextException();
}
- return notAChild(node);
+ return _notAChild(node);
}
+ @override
AstNode visitFunctionDeclarationStatement(FunctionDeclarationStatement node) {
if (identical(_oldNode, node.functionDeclaration)) {
throw new InsufficientContextException();
}
- return notAChild(node);
+ return _notAChild(node);
}
+ @override
AstNode visitFunctionExpression(FunctionExpression node) {
if (identical(_oldNode, node.parameters)) {
return _parser.parseFormalParameterList();
} else if (identical(_oldNode, node.body)) {
throw new InsufficientContextException();
}
- return notAChild(node);
+ return _notAChild(node);
}
+ @override
AstNode visitFunctionExpressionInvocation(FunctionExpressionInvocation node) {
if (identical(_oldNode, node.function)) {
throw new InsufficientContextException();
} else if (identical(_oldNode, node.argumentList)) {
return _parser.parseArgumentList();
}
- return notAChild(node);
+ return _notAChild(node);
}
+ @override
AstNode visitFunctionTypeAlias(FunctionTypeAlias node) {
if (identical(_oldNode, node.documentationComment)) {
throw new InsufficientContextException();
@@ -584,9 +629,10 @@
} else if (identical(_oldNode, node.parameters)) {
return _parser.parseFormalParameterList();
}
- return notAChild(node);
+ return _notAChild(node);
}
+ @override
AstNode visitFunctionTypedFormalParameter(FunctionTypedFormalParameter node) {
if (identical(_oldNode, node.documentationComment)) {
throw new InsufficientContextException();
@@ -599,16 +645,18 @@
} else if (identical(_oldNode, node.parameters)) {
return _parser.parseFormalParameterList();
}
- return notAChild(node);
+ return _notAChild(node);
}
+ @override
AstNode visitHideCombinator(HideCombinator node) {
if (node.hiddenNames.contains(_oldNode)) {
return _parser.parseSimpleIdentifier();
}
- return notAChild(node);
+ return _notAChild(node);
}
+ @override
AstNode visitIfStatement(IfStatement node) {
if (identical(_oldNode, node.condition)) {
return _parser.parseExpression2();
@@ -617,16 +665,18 @@
} else if (identical(_oldNode, node.elseStatement)) {
return _parser.parseStatement2();
}
- return notAChild(node);
+ return _notAChild(node);
}
+ @override
AstNode visitImplementsClause(ImplementsClause node) {
if (node.interfaces.contains(node)) {
return _parser.parseTypeName();
}
- return notAChild(node);
+ return _notAChild(node);
}
+ @override
AstNode visitImportDirective(ImportDirective node) {
if (identical(_oldNode, node.documentationComment)) {
throw new InsufficientContextException();
@@ -639,29 +689,33 @@
} else if (node.combinators.contains(_oldNode)) {
throw new IncrementalParseException();
}
- return notAChild(node);
+ return _notAChild(node);
}
+ @override
AstNode visitIndexExpression(IndexExpression node) {
if (identical(_oldNode, node.target)) {
throw new InsufficientContextException();
} else if (identical(_oldNode, node.index)) {
return _parser.parseExpression2();
}
- return notAChild(node);
+ return _notAChild(node);
}
+ @override
AstNode visitInstanceCreationExpression(InstanceCreationExpression node) {
if (identical(_oldNode, node.constructorName)) {
return _parser.parseConstructorName();
} else if (identical(_oldNode, node.argumentList)) {
return _parser.parseArgumentList();
}
- return notAChild(node);
+ return _notAChild(node);
}
- AstNode visitIntegerLiteral(IntegerLiteral node) => notAChild(node);
+ @override
+ AstNode visitIntegerLiteral(IntegerLiteral node) => _notAChild(node);
+ @override
AstNode visitInterpolationExpression(InterpolationExpression node) {
if (identical(_oldNode, node.expression)) {
if (node.leftBracket == null) {
@@ -669,38 +723,43 @@
}
return _parser.parseExpression2();
}
- return notAChild(node);
+ return _notAChild(node);
}
+ @override
AstNode visitInterpolationString(InterpolationString node) {
throw new InsufficientContextException();
}
+ @override
AstNode visitIsExpression(IsExpression node) {
if (identical(_oldNode, node.expression)) {
return _parser.parseBitwiseOrExpression();
} else if (identical(_oldNode, node.type)) {
return _parser.parseTypeName();
}
- return notAChild(node);
+ return _notAChild(node);
}
+ @override
AstNode visitLabel(Label node) {
if (identical(_oldNode, node.label)) {
return _parser.parseSimpleIdentifier();
}
- return notAChild(node);
+ return _notAChild(node);
}
+ @override
AstNode visitLabeledStatement(LabeledStatement node) {
if (node.labels.contains(_oldNode)) {
return _parser.parseLabel();
} else if (identical(_oldNode, node.statement)) {
return _parser.parseStatement2();
}
- return notAChild(node);
+ return _notAChild(node);
}
+ @override
AstNode visitLibraryDirective(LibraryDirective node) {
if (identical(_oldNode, node.documentationComment)) {
throw new InsufficientContextException();
@@ -709,43 +768,48 @@
} else if (identical(_oldNode, node.name)) {
return _parser.parseLibraryIdentifier();
}
- return notAChild(node);
+ return _notAChild(node);
}
+ @override
AstNode visitLibraryIdentifier(LibraryIdentifier node) {
if (node.components.contains(_oldNode)) {
return _parser.parseSimpleIdentifier();
}
- return notAChild(node);
+ return _notAChild(node);
}
+ @override
AstNode visitListLiteral(ListLiteral node) {
if (identical(_oldNode, node.typeArguments)) {
return _parser.parseTypeArgumentList();
} else if (node.elements.contains(_oldNode)) {
return _parser.parseExpression2();
}
- return notAChild(node);
+ return _notAChild(node);
}
+ @override
AstNode visitMapLiteral(MapLiteral node) {
if (identical(_oldNode, node.typeArguments)) {
return _parser.parseTypeArgumentList();
} else if (node.entries.contains(_oldNode)) {
return _parser.parseMapLiteralEntry();
}
- return notAChild(node);
+ return _notAChild(node);
}
+ @override
AstNode visitMapLiteralEntry(MapLiteralEntry node) {
if (identical(_oldNode, node.key)) {
return _parser.parseExpression2();
} else if (identical(_oldNode, node.value)) {
return _parser.parseExpression2();
}
- return notAChild(node);
+ return _notAChild(node);
}
+ @override
AstNode visitMethodDeclaration(MethodDeclaration node) {
if (identical(_oldNode, node.documentationComment)) {
throw new InsufficientContextException();
@@ -762,9 +826,10 @@
//return parser.parseFunctionBody();
throw new InsufficientContextException();
}
- return notAChild(node);
+ return _notAChild(node);
}
+ @override
AstNode visitMethodInvocation(MethodInvocation node) {
if (identical(_oldNode, node.target)) {
throw new IncrementalParseException();
@@ -773,41 +838,47 @@
} else if (identical(_oldNode, node.argumentList)) {
return _parser.parseArgumentList();
}
- return notAChild(node);
+ return _notAChild(node);
}
+ @override
AstNode visitNamedExpression(NamedExpression node) {
if (identical(_oldNode, node.name)) {
return _parser.parseLabel();
} else if (identical(_oldNode, node.expression)) {
return _parser.parseExpression2();
}
- return notAChild(node);
+ return _notAChild(node);
}
+ @override
AstNode visitNativeClause(NativeClause node) {
if (identical(_oldNode, node.name)) {
return _parser.parseStringLiteral();
}
- return notAChild(node);
+ return _notAChild(node);
}
+ @override
AstNode visitNativeFunctionBody(NativeFunctionBody node) {
if (identical(_oldNode, node.stringLiteral)) {
return _parser.parseStringLiteral();
}
- return notAChild(node);
+ return _notAChild(node);
}
- AstNode visitNullLiteral(NullLiteral node) => notAChild(node);
+ @override
+ AstNode visitNullLiteral(NullLiteral node) => _notAChild(node);
+ @override
AstNode visitParenthesizedExpression(ParenthesizedExpression node) {
if (identical(_oldNode, node.expression)) {
return _parser.parseExpression2();
}
- return notAChild(node);
+ return _notAChild(node);
}
+ @override
AstNode visitPartDirective(PartDirective node) {
if (identical(_oldNode, node.documentationComment)) {
throw new InsufficientContextException();
@@ -816,9 +887,10 @@
} else if (identical(_oldNode, node.uri)) {
return _parser.parseStringLiteral();
}
- return notAChild(node);
+ return _notAChild(node);
}
+ @override
AstNode visitPartOfDirective(PartOfDirective node) {
if (identical(_oldNode, node.documentationComment)) {
throw new InsufficientContextException();
@@ -827,68 +899,78 @@
} else if (identical(_oldNode, node.libraryName)) {
return _parser.parseLibraryIdentifier();
}
- return notAChild(node);
+ return _notAChild(node);
}
+ @override
AstNode visitPostfixExpression(PostfixExpression node) {
if (identical(_oldNode, node.operand)) {
throw new InsufficientContextException();
}
- return notAChild(node);
+ return _notAChild(node);
}
+ @override
AstNode visitPrefixedIdentifier(PrefixedIdentifier node) {
if (identical(_oldNode, node.prefix)) {
return _parser.parseSimpleIdentifier();
} else if (identical(_oldNode, node.identifier)) {
return _parser.parseSimpleIdentifier();
}
- return notAChild(node);
+ return _notAChild(node);
}
+ @override
AstNode visitPrefixExpression(PrefixExpression node) {
if (identical(_oldNode, node.operand)) {
throw new InsufficientContextException();
}
- return notAChild(node);
+ return _notAChild(node);
}
+ @override
AstNode visitPropertyAccess(PropertyAccess node) {
if (identical(_oldNode, node.target)) {
throw new InsufficientContextException();
} else if (identical(_oldNode, node.propertyName)) {
return _parser.parseSimpleIdentifier();
}
- return notAChild(node);
+ return _notAChild(node);
}
+ @override
AstNode visitRedirectingConstructorInvocation(RedirectingConstructorInvocation node) {
if (identical(_oldNode, node.constructorName)) {
return _parser.parseSimpleIdentifier();
} else if (identical(_oldNode, node.argumentList)) {
return _parser.parseArgumentList();
}
- return notAChild(node);
+ return _notAChild(node);
}
- AstNode visitRethrowExpression(RethrowExpression node) => notAChild(node);
+ @override
+ AstNode visitRethrowExpression(RethrowExpression node) => _notAChild(node);
+ @override
AstNode visitReturnStatement(ReturnStatement node) {
if (identical(_oldNode, node.expression)) {
return _parser.parseExpression2();
}
- return notAChild(node);
+ return _notAChild(node);
}
- AstNode visitScriptTag(ScriptTag node) => notAChild(node);
+ @override
+ AstNode visitScriptTag(ScriptTag node) => _notAChild(node);
+ @override
AstNode visitShowCombinator(ShowCombinator node) {
if (node.shownNames.contains(_oldNode)) {
return _parser.parseSimpleIdentifier();
}
- return notAChild(node);
+ return _notAChild(node);
}
+ @override
AstNode visitSimpleFormalParameter(SimpleFormalParameter node) {
if (identical(_oldNode, node.documentationComment)) {
throw new InsufficientContextException();
@@ -899,31 +981,37 @@
} else if (identical(_oldNode, node.identifier)) {
throw new InsufficientContextException();
}
- return notAChild(node);
+ return _notAChild(node);
}
- AstNode visitSimpleIdentifier(SimpleIdentifier node) => notAChild(node);
+ @override
+ AstNode visitSimpleIdentifier(SimpleIdentifier node) => _notAChild(node);
- AstNode visitSimpleStringLiteral(SimpleStringLiteral node) => notAChild(node);
+ @override
+ AstNode visitSimpleStringLiteral(SimpleStringLiteral node) => _notAChild(node);
+ @override
AstNode visitStringInterpolation(StringInterpolation node) {
if (node.elements.contains(_oldNode)) {
throw new InsufficientContextException();
}
- return notAChild(node);
+ return _notAChild(node);
}
+ @override
AstNode visitSuperConstructorInvocation(SuperConstructorInvocation node) {
if (identical(_oldNode, node.constructorName)) {
return _parser.parseSimpleIdentifier();
} else if (identical(_oldNode, node.argumentList)) {
return _parser.parseArgumentList();
}
- return notAChild(node);
+ return _notAChild(node);
}
- AstNode visitSuperExpression(SuperExpression node) => notAChild(node);
+ @override
+ AstNode visitSuperExpression(SuperExpression node) => _notAChild(node);
+ @override
AstNode visitSwitchCase(SwitchCase node) {
if (node.labels.contains(_oldNode)) {
return _parser.parseLabel();
@@ -932,41 +1020,47 @@
} else if (node.statements.contains(_oldNode)) {
return _parser.parseStatement2();
}
- return notAChild(node);
+ return _notAChild(node);
}
+ @override
AstNode visitSwitchDefault(SwitchDefault node) {
if (node.labels.contains(_oldNode)) {
return _parser.parseLabel();
} else if (node.statements.contains(_oldNode)) {
return _parser.parseStatement2();
}
- return notAChild(node);
+ return _notAChild(node);
}
+ @override
AstNode visitSwitchStatement(SwitchStatement node) {
if (identical(_oldNode, node.expression)) {
return _parser.parseExpression2();
} else if (node.members.contains(_oldNode)) {
throw new InsufficientContextException();
}
- return notAChild(node);
+ return _notAChild(node);
}
- AstNode visitSymbolLiteral(SymbolLiteral node) => notAChild(node);
+ @override
+ AstNode visitSymbolLiteral(SymbolLiteral node) => _notAChild(node);
- AstNode visitThisExpression(ThisExpression node) => notAChild(node);
+ @override
+ AstNode visitThisExpression(ThisExpression node) => _notAChild(node);
+ @override
AstNode visitThrowExpression(ThrowExpression node) {
if (identical(_oldNode, node.expression)) {
- if (isCascadeAllowedInThrow(node)) {
+ if (_isCascadeAllowedInThrow(node)) {
return _parser.parseExpression2();
}
return _parser.parseExpressionWithoutCascade();
}
- return notAChild(node);
+ return _notAChild(node);
}
+ @override
AstNode visitTopLevelVariableDeclaration(TopLevelVariableDeclaration node) {
if (identical(_oldNode, node.documentationComment)) {
throw new InsufficientContextException();
@@ -975,9 +1069,10 @@
} else if (identical(_oldNode, node.variables)) {
throw new InsufficientContextException();
}
- return notAChild(node);
+ return _notAChild(node);
}
+ @override
AstNode visitTryStatement(TryStatement node) {
if (identical(_oldNode, node.body)) {
return _parser.parseBlock();
@@ -986,25 +1081,28 @@
} else if (identical(_oldNode, node.finallyBlock)) {
throw new InsufficientContextException();
}
- return notAChild(node);
+ return _notAChild(node);
}
+ @override
AstNode visitTypeArgumentList(TypeArgumentList node) {
if (node.arguments.contains(_oldNode)) {
return _parser.parseTypeName();
}
- return notAChild(node);
+ return _notAChild(node);
}
+ @override
AstNode visitTypeName(TypeName node) {
if (identical(_oldNode, node.name)) {
return _parser.parsePrefixedIdentifier();
} else if (identical(_oldNode, node.typeArguments)) {
return _parser.parseTypeArgumentList();
}
- return notAChild(node);
+ return _notAChild(node);
}
+ @override
AstNode visitTypeParameter(TypeParameter node) {
if (identical(_oldNode, node.documentationComment)) {
throw new InsufficientContextException();
@@ -1015,16 +1113,18 @@
} else if (identical(_oldNode, node.bound)) {
return _parser.parseTypeName();
}
- return notAChild(node);
+ return _notAChild(node);
}
+ @override
AstNode visitTypeParameterList(TypeParameterList node) {
if (node.typeParameters.contains(node)) {
return _parser.parseTypeParameter();
}
- return notAChild(node);
+ return _notAChild(node);
}
+ @override
AstNode visitVariableDeclaration(VariableDeclaration node) {
if (identical(_oldNode, node.documentationComment)) {
throw new InsufficientContextException();
@@ -1035,9 +1135,10 @@
} else if (identical(_oldNode, node.initializer)) {
throw new InsufficientContextException();
}
- return notAChild(node);
+ return _notAChild(node);
}
+ @override
AstNode visitVariableDeclarationList(VariableDeclarationList node) {
if (identical(_oldNode, node.documentationComment)) {
throw new InsufficientContextException();
@@ -1046,30 +1147,33 @@
} else if (node.variables.contains(_oldNode)) {
throw new InsufficientContextException();
}
- return notAChild(node);
+ return _notAChild(node);
}
+ @override
AstNode visitVariableDeclarationStatement(VariableDeclarationStatement node) {
if (identical(_oldNode, node.variables)) {
throw new InsufficientContextException();
}
- return notAChild(node);
+ return _notAChild(node);
}
+ @override
AstNode visitWhileStatement(WhileStatement node) {
if (identical(_oldNode, node.condition)) {
return _parser.parseExpression2();
} else if (identical(_oldNode, node.body)) {
return _parser.parseStatement2();
}
- return notAChild(node);
+ return _notAChild(node);
}
+ @override
AstNode visitWithClause(WithClause node) {
if (node.mixinTypes.contains(node)) {
return _parser.parseTypeName();
}
- return notAChild(node);
+ return _notAChild(node);
}
/**
@@ -1079,7 +1183,7 @@
* @param node the assignment expression being tested
* @return `true` if the right-hand side can be a cascade expression
*/
- bool isCascadeAllowedInAssignment(AssignmentExpression node) {
+ bool _isCascadeAllowedInAssignment(AssignmentExpression node) {
// TODO(brianwilkerson) Implement this method.
throw new InsufficientContextException();
}
@@ -1090,7 +1194,7 @@
* @param node the throw expression being tested
* @return `true` if the expression can be a cascade expression
*/
- bool isCascadeAllowedInThrow(ThrowExpression node) {
+ bool _isCascadeAllowedInThrow(ThrowExpression node) {
// TODO(brianwilkerson) Implement this method.
throw new InsufficientContextException();
}
@@ -1101,7 +1205,7 @@
*
* @param visitedNode the visited node that should have been the parent of the node to be replaced
*/
- AstNode notAChild(AstNode visitedNode) {
+ AstNode _notAChild(AstNode visitedNode) {
throw new IncrementalParseException.con1("Internal error: the visited node (a ${visitedNode.runtimeType.toString()}) was not the parent of the node to be replaced (a ${_oldNode.runtimeType.toString()})");
}
}
@@ -1213,7 +1317,7 @@
// Find the token at which parsing is to begin.
//
int originalOffset = oldNode.offset;
- Token parseToken = findTokenAt(firstToken, originalOffset);
+ Token parseToken = _findTokenAt(firstToken, originalOffset);
if (parseToken == null) {
return null;
}
@@ -1225,7 +1329,7 @@
while (newNode == null) {
AstNode parent = oldNode.parent;
if (parent == null) {
- parseToken = findFirstToken(parseToken);
+ parseToken = _findFirstToken(parseToken);
parser.currentToken = parseToken;
return parser.parseCompilationUnit2();
}
@@ -1249,7 +1353,7 @@
newNode = null;
oldNode = parent;
originalOffset = oldNode.offset;
- parseToken = findTokenAt(parseToken, originalOffset);
+ parseToken = _findTokenAt(parseToken, originalOffset);
parser.currentToken = parseToken;
}
}
@@ -1273,7 +1377,7 @@
* @param firstToken the token from which the search is to begin
* @return the first token in the token stream containing the given token
*/
- Token findFirstToken(Token firstToken) {
+ Token _findFirstToken(Token firstToken) {
while (firstToken.type != TokenType.EOF) {
firstToken = firstToken.previous;
}
@@ -1288,7 +1392,7 @@
* @param offset the offset of the token to be returned
* @return the token with the given offset
*/
- Token findTokenAt(Token firstToken, int offset) {
+ Token _findTokenAt(Token firstToken, int offset) {
while (firstToken.offset > offset && firstToken.type != TokenType.EOF) {
firstToken = firstToken.previous;
}
@@ -1444,7 +1548,7 @@
InstrumentationBuilder instrumentation = Instrumentation.builder2("dart.engine.Parser.parseStatements");
try {
_currentToken = token;
- return parseStatementList();
+ return _parseStatementList();
} finally {
instrumentation.log();
}
@@ -1470,16 +1574,16 @@
* @return the annotation that was parsed
*/
Annotation parseAnnotation() {
- Token atSign = expect(TokenType.AT);
+ Token atSign = _expect(TokenType.AT);
Identifier name = parsePrefixedIdentifier();
Token period = null;
SimpleIdentifier constructorName = null;
- if (matches(TokenType.PERIOD)) {
+ if (_matches(TokenType.PERIOD)) {
period = andAdvance;
constructorName = parseSimpleIdentifier();
}
ArgumentList arguments = null;
- if (matches(TokenType.OPEN_PAREN)) {
+ if (_matches(TokenType.OPEN_PAREN)) {
arguments = parseArgumentList();
}
return new Annotation(atSign, name, period, constructorName, arguments);
@@ -1504,7 +1608,7 @@
// Both namedArgument and expression can start with an identifier, but only namedArgument can
// have an identifier followed by a colon.
//
- if (matchesIdentifier() && tokenMatches(peek(), TokenType.COLON)) {
+ if (_matchesIdentifier() && _tokenMatches(_peek(), TokenType.COLON)) {
return new NamedExpression(parseLabel(), parseExpression2());
} else {
return parseExpression2();
@@ -1526,9 +1630,9 @@
* @return the argument list that was parsed
*/
ArgumentList parseArgumentList() {
- Token leftParenthesis = expect(TokenType.OPEN_PAREN);
+ Token leftParenthesis = _expect(TokenType.OPEN_PAREN);
List<Expression> arguments = new List<Expression>();
- if (matches(TokenType.CLOSE_PAREN)) {
+ if (_matches(TokenType.CLOSE_PAREN)) {
return new ArgumentList(leftParenthesis, arguments, andAdvance);
}
//
@@ -1539,13 +1643,13 @@
arguments.add(argument);
bool foundNamedArgument = argument is NamedExpression;
bool generatedError = false;
- while (optional(TokenType.COMMA)) {
+ while (_optional(TokenType.COMMA)) {
argument = parseArgument();
arguments.add(argument);
if (foundNamedArgument) {
if (!generatedError && argument is! NamedExpression) {
// Report the error, once, but allow the arguments to be in any order in the AST.
- reportErrorForCurrentToken(ParserErrorCode.POSITIONAL_AFTER_NAMED_ARGUMENT, []);
+ _reportErrorForCurrentToken(ParserErrorCode.POSITIONAL_AFTER_NAMED_ARGUMENT, []);
generatedError = true;
}
} else if (argument is NamedExpression) {
@@ -1555,7 +1659,7 @@
// TODO(brianwilkerson) Recovery: Look at the left parenthesis to see whether there is a
// matching right parenthesis. If there is, then we're more likely missing a comma and should
// go back to parsing arguments.
- Token rightParenthesis = expect(TokenType.CLOSE_PAREN);
+ Token rightParenthesis = _expect(TokenType.CLOSE_PAREN);
return new ArgumentList(leftParenthesis, arguments, rightParenthesis);
}
@@ -1572,14 +1676,14 @@
*/
Expression parseBitwiseOrExpression() {
Expression expression;
- if (matchesKeyword(Keyword.SUPER) && tokenMatches(peek(), TokenType.BAR)) {
+ if (_matchesKeyword(Keyword.SUPER) && _tokenMatches(_peek(), TokenType.BAR)) {
expression = new SuperExpression(andAdvance);
} else {
- expression = parseBitwiseXorExpression();
+ expression = _parseBitwiseXorExpression();
}
- while (matches(TokenType.BAR)) {
+ while (_matches(TokenType.BAR)) {
Token operator = andAdvance;
- expression = new BinaryExpression(expression, operator, parseBitwiseXorExpression());
+ expression = new BinaryExpression(expression, operator, _parseBitwiseXorExpression());
}
return expression;
}
@@ -1595,22 +1699,22 @@
* @return the block that was parsed
*/
Block parseBlock() {
- Token leftBracket = expect(TokenType.OPEN_CURLY_BRACKET);
+ Token leftBracket = _expect(TokenType.OPEN_CURLY_BRACKET);
List<Statement> statements = new List<Statement>();
Token statementStart = _currentToken;
- while (!matches(TokenType.EOF) && !matches(TokenType.CLOSE_CURLY_BRACKET)) {
+ while (!_matches(TokenType.EOF) && !_matches(TokenType.CLOSE_CURLY_BRACKET)) {
Statement statement = parseStatement2();
if (statement != null) {
statements.add(statement);
}
if (identical(_currentToken, statementStart)) {
// Ensure that we are making progress and report an error if we're not.
- reportErrorForToken(ParserErrorCode.UNEXPECTED_TOKEN, _currentToken, [_currentToken.lexeme]);
- advance();
+ _reportErrorForToken(ParserErrorCode.UNEXPECTED_TOKEN, _currentToken, [_currentToken.lexeme]);
+ _advance();
}
statementStart = _currentToken;
}
- Token rightBracket = expect(TokenType.CLOSE_CURLY_BRACKET);
+ Token rightBracket = _expect(TokenType.CLOSE_CURLY_BRACKET);
return new Block(leftBracket, statements, rightBracket);
}
@@ -1628,142 +1732,142 @@
* class member
*/
ClassMember parseClassMember(String className) {
- CommentAndMetadata commentAndMetadata = parseCommentAndMetadata();
- Modifiers modifiers = parseModifiers();
- if (matchesKeyword(Keyword.VOID)) {
+ CommentAndMetadata commentAndMetadata = _parseCommentAndMetadata();
+ Modifiers modifiers = _parseModifiers();
+ if (_matchesKeyword(Keyword.VOID)) {
TypeName returnType = parseReturnType();
- if (matchesKeyword(Keyword.GET) && tokenMatchesIdentifier(peek())) {
- validateModifiersForGetterOrSetterOrMethod(modifiers);
- return parseGetter(commentAndMetadata, modifiers.externalKeyword, modifiers.staticKeyword, returnType);
- } else if (matchesKeyword(Keyword.SET) && tokenMatchesIdentifier(peek())) {
- validateModifiersForGetterOrSetterOrMethod(modifiers);
- return parseSetter(commentAndMetadata, modifiers.externalKeyword, modifiers.staticKeyword, returnType);
- } else if (matchesKeyword(Keyword.OPERATOR) && isOperator(peek())) {
- validateModifiersForOperator(modifiers);
- return parseOperator(commentAndMetadata, modifiers.externalKeyword, returnType);
- } else if (matchesIdentifier() && matchesAny(peek(), [
+ if (_matchesKeyword(Keyword.GET) && _tokenMatchesIdentifier(_peek())) {
+ _validateModifiersForGetterOrSetterOrMethod(modifiers);
+ return _parseGetter(commentAndMetadata, modifiers.externalKeyword, modifiers.staticKeyword, returnType);
+ } else if (_matchesKeyword(Keyword.SET) && _tokenMatchesIdentifier(_peek())) {
+ _validateModifiersForGetterOrSetterOrMethod(modifiers);
+ return _parseSetter(commentAndMetadata, modifiers.externalKeyword, modifiers.staticKeyword, returnType);
+ } else if (_matchesKeyword(Keyword.OPERATOR) && _isOperator(_peek())) {
+ _validateModifiersForOperator(modifiers);
+ return _parseOperator(commentAndMetadata, modifiers.externalKeyword, returnType);
+ } else if (_matchesIdentifier() && _peek().matchesAny([
TokenType.OPEN_PAREN,
TokenType.OPEN_CURLY_BRACKET,
TokenType.FUNCTION])) {
- validateModifiersForGetterOrSetterOrMethod(modifiers);
- return parseMethodDeclarationAfterReturnType(commentAndMetadata, modifiers.externalKeyword, modifiers.staticKeyword, returnType);
+ _validateModifiersForGetterOrSetterOrMethod(modifiers);
+ return _parseMethodDeclarationAfterReturnType(commentAndMetadata, modifiers.externalKeyword, modifiers.staticKeyword, returnType);
} else {
//
// We have found an error of some kind. Try to recover.
//
- if (matchesIdentifier()) {
- if (matchesAny(peek(), [TokenType.EQ, TokenType.COMMA, TokenType.SEMICOLON])) {
+ if (_matchesIdentifier()) {
+ if (_peek().matchesAny([TokenType.EQ, TokenType.COMMA, TokenType.SEMICOLON])) {
//
// We appear to have a variable declaration with a type of "void".
//
- reportErrorForNode(ParserErrorCode.VOID_VARIABLE, returnType, []);
- return parseInitializedIdentifierList(commentAndMetadata, modifiers.staticKeyword, validateModifiersForField(modifiers), returnType);
+ _reportErrorForNode(ParserErrorCode.VOID_VARIABLE, returnType, []);
+ return _parseInitializedIdentifierList(commentAndMetadata, modifiers.staticKeyword, _validateModifiersForField(modifiers), returnType);
}
}
- if (isOperator(_currentToken)) {
+ if (_isOperator(_currentToken)) {
//
// We appear to have found an operator declaration without the 'operator' keyword.
//
- validateModifiersForOperator(modifiers);
- return parseOperator(commentAndMetadata, modifiers.externalKeyword, returnType);
+ _validateModifiersForOperator(modifiers);
+ return _parseOperator(commentAndMetadata, modifiers.externalKeyword, returnType);
}
- reportErrorForToken(ParserErrorCode.EXPECTED_EXECUTABLE, _currentToken, []);
+ _reportErrorForToken(ParserErrorCode.EXPECTED_EXECUTABLE, _currentToken, []);
return null;
}
- } else if (matchesKeyword(Keyword.GET) && tokenMatchesIdentifier(peek())) {
- validateModifiersForGetterOrSetterOrMethod(modifiers);
- return parseGetter(commentAndMetadata, modifiers.externalKeyword, modifiers.staticKeyword, null);
- } else if (matchesKeyword(Keyword.SET) && tokenMatchesIdentifier(peek())) {
- validateModifiersForGetterOrSetterOrMethod(modifiers);
- return parseSetter(commentAndMetadata, modifiers.externalKeyword, modifiers.staticKeyword, null);
- } else if (matchesKeyword(Keyword.OPERATOR) && isOperator(peek())) {
- validateModifiersForOperator(modifiers);
- return parseOperator(commentAndMetadata, modifiers.externalKeyword, null);
- } else if (!matchesIdentifier()) {
- if (isOperator(_currentToken)) {
+ } else if (_matchesKeyword(Keyword.GET) && _tokenMatchesIdentifier(_peek())) {
+ _validateModifiersForGetterOrSetterOrMethod(modifiers);
+ return _parseGetter(commentAndMetadata, modifiers.externalKeyword, modifiers.staticKeyword, null);
+ } else if (_matchesKeyword(Keyword.SET) && _tokenMatchesIdentifier(_peek())) {
+ _validateModifiersForGetterOrSetterOrMethod(modifiers);
+ return _parseSetter(commentAndMetadata, modifiers.externalKeyword, modifiers.staticKeyword, null);
+ } else if (_matchesKeyword(Keyword.OPERATOR) && _isOperator(_peek())) {
+ _validateModifiersForOperator(modifiers);
+ return _parseOperator(commentAndMetadata, modifiers.externalKeyword, null);
+ } else if (!_matchesIdentifier()) {
+ if (_isOperator(_currentToken)) {
//
// We appear to have found an operator declaration without the 'operator' keyword.
//
- validateModifiersForOperator(modifiers);
- return parseOperator(commentAndMetadata, modifiers.externalKeyword, null);
+ _validateModifiersForOperator(modifiers);
+ return _parseOperator(commentAndMetadata, modifiers.externalKeyword, null);
}
- reportErrorForToken(ParserErrorCode.EXPECTED_CLASS_MEMBER, _currentToken, []);
+ _reportErrorForToken(ParserErrorCode.EXPECTED_CLASS_MEMBER, _currentToken, []);
if (commentAndMetadata.comment != null || !commentAndMetadata.metadata.isEmpty) {
//
// We appear to have found an incomplete declaration at the end of the class. At this point
// it consists of a metadata, which we don't want to loose, so we'll treat it as a method
// declaration with a missing name, parameters and empty body.
//
- return new MethodDeclaration(commentAndMetadata.comment, commentAndMetadata.metadata, null, null, null, null, null, createSyntheticIdentifier(), new FormalParameterList(null, new List<FormalParameter>(), null, null, null), new EmptyFunctionBody(createSyntheticToken(TokenType.SEMICOLON)));
+ return new MethodDeclaration(commentAndMetadata.comment, commentAndMetadata.metadata, null, null, null, null, null, _createSyntheticIdentifier(), new FormalParameterList(null, new List<FormalParameter>(), null, null, null), new EmptyFunctionBody(_createSyntheticToken(TokenType.SEMICOLON)));
}
return null;
- } else if (tokenMatches(peek(), TokenType.PERIOD) && tokenMatchesIdentifier(peekAt(2)) && tokenMatches(peekAt(3), TokenType.OPEN_PAREN)) {
- return parseConstructor(commentAndMetadata, modifiers.externalKeyword, validateModifiersForConstructor(modifiers), modifiers.factoryKeyword, parseSimpleIdentifier(), andAdvance, parseSimpleIdentifier(), parseFormalParameterList());
- } else if (tokenMatches(peek(), TokenType.OPEN_PAREN)) {
+ } else if (_tokenMatches(_peek(), TokenType.PERIOD) && _tokenMatchesIdentifier(_peekAt(2)) && _tokenMatches(_peekAt(3), TokenType.OPEN_PAREN)) {
+ return _parseConstructor(commentAndMetadata, modifiers.externalKeyword, _validateModifiersForConstructor(modifiers), modifiers.factoryKeyword, parseSimpleIdentifier(), andAdvance, parseSimpleIdentifier(), parseFormalParameterList());
+ } else if (_tokenMatches(_peek(), TokenType.OPEN_PAREN)) {
SimpleIdentifier methodName = parseSimpleIdentifier();
FormalParameterList parameters = parseFormalParameterList();
- if (matches(TokenType.COLON) || modifiers.factoryKeyword != null || methodName.name == className) {
- return parseConstructor(commentAndMetadata, modifiers.externalKeyword, validateModifiersForConstructor(modifiers), modifiers.factoryKeyword, methodName, null, null, parameters);
+ if (_matches(TokenType.COLON) || modifiers.factoryKeyword != null || methodName.name == className) {
+ return _parseConstructor(commentAndMetadata, modifiers.externalKeyword, _validateModifiersForConstructor(modifiers), modifiers.factoryKeyword, methodName, null, null, parameters);
}
- validateModifiersForGetterOrSetterOrMethod(modifiers);
- validateFormalParameterList(parameters);
- return parseMethodDeclarationAfterParameters(commentAndMetadata, modifiers.externalKeyword, modifiers.staticKeyword, null, methodName, parameters);
- } else if (matchesAny(peek(), [TokenType.EQ, TokenType.COMMA, TokenType.SEMICOLON])) {
+ _validateModifiersForGetterOrSetterOrMethod(modifiers);
+ _validateFormalParameterList(parameters);
+ return _parseMethodDeclarationAfterParameters(commentAndMetadata, modifiers.externalKeyword, modifiers.staticKeyword, null, methodName, parameters);
+ } else if (_peek().matchesAny([TokenType.EQ, TokenType.COMMA, TokenType.SEMICOLON])) {
if (modifiers.constKeyword == null && modifiers.finalKeyword == null && modifiers.varKeyword == null) {
- reportErrorForCurrentToken(ParserErrorCode.MISSING_CONST_FINAL_VAR_OR_TYPE, []);
+ _reportErrorForCurrentToken(ParserErrorCode.MISSING_CONST_FINAL_VAR_OR_TYPE, []);
}
- return parseInitializedIdentifierList(commentAndMetadata, modifiers.staticKeyword, validateModifiersForField(modifiers), null);
+ return _parseInitializedIdentifierList(commentAndMetadata, modifiers.staticKeyword, _validateModifiersForField(modifiers), null);
}
TypeName type = parseTypeName();
- if (matchesKeyword(Keyword.GET) && tokenMatchesIdentifier(peek())) {
- validateModifiersForGetterOrSetterOrMethod(modifiers);
- return parseGetter(commentAndMetadata, modifiers.externalKeyword, modifiers.staticKeyword, type);
- } else if (matchesKeyword(Keyword.SET) && tokenMatchesIdentifier(peek())) {
- validateModifiersForGetterOrSetterOrMethod(modifiers);
- return parseSetter(commentAndMetadata, modifiers.externalKeyword, modifiers.staticKeyword, type);
- } else if (matchesKeyword(Keyword.OPERATOR) && isOperator(peek())) {
- validateModifiersForOperator(modifiers);
- return parseOperator(commentAndMetadata, modifiers.externalKeyword, type);
- } else if (!matchesIdentifier()) {
- if (matches(TokenType.CLOSE_CURLY_BRACKET)) {
+ if (_matchesKeyword(Keyword.GET) && _tokenMatchesIdentifier(_peek())) {
+ _validateModifiersForGetterOrSetterOrMethod(modifiers);
+ return _parseGetter(commentAndMetadata, modifiers.externalKeyword, modifiers.staticKeyword, type);
+ } else if (_matchesKeyword(Keyword.SET) && _tokenMatchesIdentifier(_peek())) {
+ _validateModifiersForGetterOrSetterOrMethod(modifiers);
+ return _parseSetter(commentAndMetadata, modifiers.externalKeyword, modifiers.staticKeyword, type);
+ } else if (_matchesKeyword(Keyword.OPERATOR) && _isOperator(_peek())) {
+ _validateModifiersForOperator(modifiers);
+ return _parseOperator(commentAndMetadata, modifiers.externalKeyword, type);
+ } else if (!_matchesIdentifier()) {
+ if (_matches(TokenType.CLOSE_CURLY_BRACKET)) {
//
// We appear to have found an incomplete declaration at the end of the class. At this point
// it consists of a type name, so we'll treat it as a field declaration with a missing
// field name and semicolon.
//
- return parseInitializedIdentifierList(commentAndMetadata, modifiers.staticKeyword, validateModifiersForField(modifiers), type);
+ return _parseInitializedIdentifierList(commentAndMetadata, modifiers.staticKeyword, _validateModifiersForField(modifiers), type);
}
- if (isOperator(_currentToken)) {
+ if (_isOperator(_currentToken)) {
//
// We appear to have found an operator declaration without the 'operator' keyword.
//
- validateModifiersForOperator(modifiers);
- return parseOperator(commentAndMetadata, modifiers.externalKeyword, type);
+ _validateModifiersForOperator(modifiers);
+ return _parseOperator(commentAndMetadata, modifiers.externalKeyword, type);
}
//
// We appear to have found an incomplete declaration before another declaration.
// At this point it consists of a type name, so we'll treat it as a field declaration
// with a missing field name and semicolon.
//
- reportErrorForToken(ParserErrorCode.EXPECTED_CLASS_MEMBER, _currentToken, []);
+ _reportErrorForToken(ParserErrorCode.EXPECTED_CLASS_MEMBER, _currentToken, []);
try {
- lockErrorListener();
- return parseInitializedIdentifierList(commentAndMetadata, modifiers.staticKeyword, validateModifiersForField(modifiers), type);
+ _lockErrorListener();
+ return _parseInitializedIdentifierList(commentAndMetadata, modifiers.staticKeyword, _validateModifiersForField(modifiers), type);
} finally {
- unlockErrorListener();
+ _unlockErrorListener();
}
- } else if (tokenMatches(peek(), TokenType.OPEN_PAREN)) {
+ } else if (_tokenMatches(_peek(), TokenType.OPEN_PAREN)) {
SimpleIdentifier methodName = parseSimpleIdentifier();
FormalParameterList parameters = parseFormalParameterList();
if (methodName.name == className) {
- reportErrorForNode(ParserErrorCode.CONSTRUCTOR_WITH_RETURN_TYPE, type, []);
- return parseConstructor(commentAndMetadata, modifiers.externalKeyword, validateModifiersForConstructor(modifiers), modifiers.factoryKeyword, methodName, null, null, parameters);
+ _reportErrorForNode(ParserErrorCode.CONSTRUCTOR_WITH_RETURN_TYPE, type, []);
+ return _parseConstructor(commentAndMetadata, modifiers.externalKeyword, _validateModifiersForConstructor(modifiers), modifiers.factoryKeyword, methodName, null, null, parameters);
}
- validateModifiersForGetterOrSetterOrMethod(modifiers);
- validateFormalParameterList(parameters);
- return parseMethodDeclarationAfterParameters(commentAndMetadata, modifiers.externalKeyword, modifiers.staticKeyword, type, methodName, parameters);
+ _validateModifiersForGetterOrSetterOrMethod(modifiers);
+ _validateFormalParameterList(parameters);
+ return _parseMethodDeclarationAfterParameters(commentAndMetadata, modifiers.externalKeyword, modifiers.staticKeyword, type, methodName, parameters);
}
- return parseInitializedIdentifierList(commentAndMetadata, modifiers.staticKeyword, validateModifiersForField(modifiers), type);
+ return _parseInitializedIdentifierList(commentAndMetadata, modifiers.staticKeyword, _validateModifiersForField(modifiers), type);
}
/**
@@ -1791,7 +1895,7 @@
CompilationUnit parseCompilationUnit2() {
Token firstToken = _currentToken;
ScriptTag scriptTag = null;
- if (matches(TokenType.SCRIPT_TAG)) {
+ if (_matches(TokenType.SCRIPT_TAG)) {
scriptTag = new ScriptTag(andAdvance);
}
//
@@ -1805,20 +1909,20 @@
List<Directive> directives = new List<Directive>();
List<CompilationUnitMember> declarations = new List<CompilationUnitMember>();
Token memberStart = _currentToken;
- while (!matches(TokenType.EOF)) {
- CommentAndMetadata commentAndMetadata = parseCommentAndMetadata();
- if ((matchesKeyword(Keyword.IMPORT) || matchesKeyword(Keyword.EXPORT) || matchesKeyword(Keyword.LIBRARY) || matchesKeyword(Keyword.PART)) && !tokenMatches(peek(), TokenType.PERIOD) && !tokenMatches(peek(), TokenType.LT) && !tokenMatches(peek(), TokenType.OPEN_PAREN)) {
- Directive directive = parseDirective(commentAndMetadata);
+ while (!_matches(TokenType.EOF)) {
+ CommentAndMetadata commentAndMetadata = _parseCommentAndMetadata();
+ if ((_matchesKeyword(Keyword.IMPORT) || _matchesKeyword(Keyword.EXPORT) || _matchesKeyword(Keyword.LIBRARY) || _matchesKeyword(Keyword.PART)) && !_tokenMatches(_peek(), TokenType.PERIOD) && !_tokenMatches(_peek(), TokenType.LT) && !_tokenMatches(_peek(), TokenType.OPEN_PAREN)) {
+ Directive directive = _parseDirective(commentAndMetadata);
if (declarations.length > 0 && !directiveFoundAfterDeclaration) {
- reportErrorForCurrentToken(ParserErrorCode.DIRECTIVE_AFTER_DECLARATION, []);
+ _reportErrorForCurrentToken(ParserErrorCode.DIRECTIVE_AFTER_DECLARATION, []);
directiveFoundAfterDeclaration = true;
}
if (directive is LibraryDirective) {
if (libraryDirectiveFound) {
- reportErrorForCurrentToken(ParserErrorCode.MULTIPLE_LIBRARY_DIRECTIVES, []);
+ _reportErrorForCurrentToken(ParserErrorCode.MULTIPLE_LIBRARY_DIRECTIVES, []);
} else {
if (directives.length > 0) {
- reportErrorForToken(ParserErrorCode.LIBRARY_DIRECTIVE_NOT_FIRST, directive.libraryToken, []);
+ _reportErrorForToken(ParserErrorCode.LIBRARY_DIRECTIVE_NOT_FIRST, directive.libraryToken, []);
}
libraryDirectiveFound = true;
}
@@ -1826,41 +1930,41 @@
partDirectiveFound = true;
} else if (partDirectiveFound) {
if (directive is ExportDirective) {
- reportErrorForToken(ParserErrorCode.EXPORT_DIRECTIVE_AFTER_PART_DIRECTIVE, directive.keyword, []);
+ _reportErrorForToken(ParserErrorCode.EXPORT_DIRECTIVE_AFTER_PART_DIRECTIVE, directive.keyword, []);
} else if (directive is ImportDirective) {
- reportErrorForToken(ParserErrorCode.IMPORT_DIRECTIVE_AFTER_PART_DIRECTIVE, directive.keyword, []);
+ _reportErrorForToken(ParserErrorCode.IMPORT_DIRECTIVE_AFTER_PART_DIRECTIVE, directive.keyword, []);
}
}
if (directive is PartOfDirective) {
if (partOfDirectiveFound) {
- reportErrorForCurrentToken(ParserErrorCode.MULTIPLE_PART_OF_DIRECTIVES, []);
+ _reportErrorForCurrentToken(ParserErrorCode.MULTIPLE_PART_OF_DIRECTIVES, []);
} else {
int directiveCount = directives.length;
for (int i = 0; i < directiveCount; i++) {
- reportErrorForToken(ParserErrorCode.NON_PART_OF_DIRECTIVE_IN_PART, directives[i].keyword, []);
+ _reportErrorForToken(ParserErrorCode.NON_PART_OF_DIRECTIVE_IN_PART, directives[i].keyword, []);
}
partOfDirectiveFound = true;
}
} else {
if (partOfDirectiveFound) {
- reportErrorForToken(ParserErrorCode.NON_PART_OF_DIRECTIVE_IN_PART, directive.keyword, []);
+ _reportErrorForToken(ParserErrorCode.NON_PART_OF_DIRECTIVE_IN_PART, directive.keyword, []);
}
}
directives.add(directive);
- } else if (matches(TokenType.SEMICOLON)) {
- reportErrorForToken(ParserErrorCode.UNEXPECTED_TOKEN, _currentToken, [_currentToken.lexeme]);
- advance();
+ } else if (_matches(TokenType.SEMICOLON)) {
+ _reportErrorForToken(ParserErrorCode.UNEXPECTED_TOKEN, _currentToken, [_currentToken.lexeme]);
+ _advance();
} else {
- CompilationUnitMember member = parseCompilationUnitMember(commentAndMetadata);
+ CompilationUnitMember member = _parseCompilationUnitMember(commentAndMetadata);
if (member != null) {
declarations.add(member);
}
}
if (identical(_currentToken, memberStart)) {
- reportErrorForToken(ParserErrorCode.UNEXPECTED_TOKEN, _currentToken, [_currentToken.lexeme]);
- advance();
- while (!matches(TokenType.EOF) && !couldBeStartOfCompilationUnitMember()) {
- advance();
+ _reportErrorForToken(ParserErrorCode.UNEXPECTED_TOKEN, _currentToken, [_currentToken.lexeme]);
+ _advance();
+ while (!_matches(TokenType.EOF) && !_couldBeStartOfCompilationUnitMember()) {
+ _advance();
}
}
memberStart = _currentToken;
@@ -1880,12 +1984,12 @@
*/
Expression parseConditionalExpression() {
Expression condition = parseLogicalOrExpression();
- if (!matches(TokenType.QUESTION)) {
+ if (!_matches(TokenType.QUESTION)) {
return condition;
}
Token question = andAdvance;
Expression thenExpression = parseExpressionWithoutCascade();
- Token colon = expect(TokenType.COLON);
+ Token colon = _expect(TokenType.COLON);
Expression elseExpression = parseExpressionWithoutCascade();
return new ConditionalExpression(condition, question, thenExpression, colon, elseExpression);
}
@@ -1904,7 +2008,7 @@
TypeName type = parseTypeName();
Token period = null;
SimpleIdentifier name = null;
- if (matches(TokenType.PERIOD)) {
+ if (_matches(TokenType.PERIOD)) {
period = andAdvance;
name = parseSimpleIdentifier();
}
@@ -1924,10 +2028,10 @@
* @return the expression that was parsed
*/
Expression parseExpression2() {
- if (matchesKeyword(Keyword.THROW)) {
- return parseThrowExpression();
- } else if (matchesKeyword(Keyword.RETHROW)) {
- return parseRethrowExpression();
+ if (_matchesKeyword(Keyword.THROW)) {
+ return _parseThrowExpression();
+ } else if (_matchesKeyword(Keyword.RETHROW)) {
+ return _parseRethrowExpression();
}
//
// assignableExpression is a subset of conditionalExpression, so we can parse a conditional
@@ -1939,7 +2043,7 @@
if (identical(tokenType, TokenType.PERIOD_PERIOD)) {
List<Expression> cascadeSections = new List<Expression>();
while (identical(tokenType, TokenType.PERIOD_PERIOD)) {
- Expression section = parseCascadeSection();
+ Expression section = _parseCascadeSection();
if (section != null) {
cascadeSections.add(section);
}
@@ -1948,7 +2052,7 @@
return new CascadeExpression(expression, cascadeSections);
} else if (tokenType.isAssignmentOperator) {
Token operator = andAdvance;
- ensureAssignable(expression);
+ _ensureAssignable(expression);
return new AssignmentExpression(expression, operator, parseExpression2());
}
return expression;
@@ -1967,10 +2071,10 @@
* @return the expression that was parsed
*/
Expression parseExpressionWithoutCascade() {
- if (matchesKeyword(Keyword.THROW)) {
- return parseThrowExpressionWithoutCascade();
- } else if (matchesKeyword(Keyword.RETHROW)) {
- return parseRethrowExpression();
+ if (_matchesKeyword(Keyword.THROW)) {
+ return _parseThrowExpressionWithoutCascade();
+ } else if (_matchesKeyword(Keyword.RETHROW)) {
+ return _parseRethrowExpression();
}
//
// assignableExpression is a subset of conditionalExpression, so we can parse a conditional
@@ -1980,7 +2084,7 @@
Expression expression = parseConditionalExpression();
if (_currentToken.type.isAssignmentOperator) {
Token operator = andAdvance;
- ensureAssignable(expression);
+ _ensureAssignable(expression);
expression = new AssignmentExpression(expression, operator, parseExpressionWithoutCascade());
}
return expression;
@@ -1997,7 +2101,7 @@
* @return the class extends clause that was parsed
*/
ExtendsClause parseExtendsClause() {
- Token keyword = expectKeyword(Keyword.EXTENDS);
+ Token keyword = _expectKeyword(Keyword.EXTENDS);
TypeName superclass = parseTypeName();
return new ExtendsClause(keyword, superclass);
}
@@ -2028,8 +2132,8 @@
* @return the formal parameters that were parsed
*/
FormalParameterList parseFormalParameterList() {
- Token leftParenthesis = expect(TokenType.OPEN_PAREN);
- if (matches(TokenType.CLOSE_PAREN)) {
+ Token leftParenthesis = _expect(TokenType.OPEN_PAREN);
+ if (_matches(TokenType.CLOSE_PAREN)) {
return new FormalParameterList(leftParenthesis, null, null, null, andAdvance);
}
//
@@ -2056,12 +2160,12 @@
do {
if (firstParameter) {
firstParameter = false;
- } else if (!optional(TokenType.COMMA)) {
+ } else if (!_optional(TokenType.COMMA)) {
// TODO(brianwilkerson) The token is wrong, we need to recover from this case.
- if (getEndToken(leftParenthesis) != null) {
- reportErrorForCurrentToken(ParserErrorCode.EXPECTED_TOKEN, [TokenType.COMMA.lexeme]);
+ if (_getEndToken(leftParenthesis) != null) {
+ _reportErrorForCurrentToken(ParserErrorCode.EXPECTED_TOKEN, [TokenType.COMMA.lexeme]);
} else {
- reportErrorForToken(ParserErrorCode.MISSING_CLOSING_PARENTHESIS, _currentToken.previous, []);
+ _reportErrorForToken(ParserErrorCode.MISSING_CLOSING_PARENTHESIS, _currentToken.previous, []);
break;
}
}
@@ -2069,27 +2173,27 @@
//
// Handle the beginning of parameter groups.
//
- if (matches(TokenType.OPEN_SQUARE_BRACKET)) {
+ if (_matches(TokenType.OPEN_SQUARE_BRACKET)) {
wasOptionalParameter = true;
if (leftSquareBracket != null && !reportedMuliplePositionalGroups) {
- reportErrorForCurrentToken(ParserErrorCode.MULTIPLE_POSITIONAL_PARAMETER_GROUPS, []);
+ _reportErrorForCurrentToken(ParserErrorCode.MULTIPLE_POSITIONAL_PARAMETER_GROUPS, []);
reportedMuliplePositionalGroups = true;
}
if (leftCurlyBracket != null && !reportedMixedGroups) {
- reportErrorForCurrentToken(ParserErrorCode.MIXED_PARAMETER_GROUPS, []);
+ _reportErrorForCurrentToken(ParserErrorCode.MIXED_PARAMETER_GROUPS, []);
reportedMixedGroups = true;
}
leftSquareBracket = andAdvance;
currentParameters = positionalParameters;
kind = ParameterKind.POSITIONAL;
- } else if (matches(TokenType.OPEN_CURLY_BRACKET)) {
+ } else if (_matches(TokenType.OPEN_CURLY_BRACKET)) {
wasOptionalParameter = true;
if (leftCurlyBracket != null && !reportedMulipleNamedGroups) {
- reportErrorForCurrentToken(ParserErrorCode.MULTIPLE_NAMED_PARAMETER_GROUPS, []);
+ _reportErrorForCurrentToken(ParserErrorCode.MULTIPLE_NAMED_PARAMETER_GROUPS, []);
reportedMulipleNamedGroups = true;
}
if (leftSquareBracket != null && !reportedMixedGroups) {
- reportErrorForCurrentToken(ParserErrorCode.MIXED_PARAMETER_GROUPS, []);
+ _reportErrorForCurrentToken(ParserErrorCode.MIXED_PARAMETER_GROUPS, []);
reportedMixedGroups = true;
}
leftCurlyBracket = andAdvance;
@@ -2099,53 +2203,53 @@
//
// Parse and record the parameter.
//
- FormalParameter parameter = parseFormalParameter(kind);
+ FormalParameter parameter = _parseFormalParameter(kind);
parameters.add(parameter);
currentParameters.add(parameter);
if (identical(kind, ParameterKind.REQUIRED) && wasOptionalParameter) {
- reportErrorForNode(ParserErrorCode.NORMAL_BEFORE_OPTIONAL_PARAMETERS, parameter, []);
+ _reportErrorForNode(ParserErrorCode.NORMAL_BEFORE_OPTIONAL_PARAMETERS, parameter, []);
}
//
// Handle the end of parameter groups.
//
// TODO(brianwilkerson) Improve the detection and reporting of missing and mismatched delimiters.
- if (matches(TokenType.CLOSE_SQUARE_BRACKET)) {
+ if (_matches(TokenType.CLOSE_SQUARE_BRACKET)) {
rightSquareBracket = andAdvance;
currentParameters = normalParameters;
if (leftSquareBracket == null) {
if (leftCurlyBracket != null) {
- reportErrorForCurrentToken(ParserErrorCode.WRONG_TERMINATOR_FOR_PARAMETER_GROUP, ["}"]);
+ _reportErrorForCurrentToken(ParserErrorCode.WRONG_TERMINATOR_FOR_PARAMETER_GROUP, ["}"]);
rightCurlyBracket = rightSquareBracket;
rightSquareBracket = null;
} else {
- reportErrorForCurrentToken(ParserErrorCode.UNEXPECTED_TERMINATOR_FOR_PARAMETER_GROUP, ["["]);
+ _reportErrorForCurrentToken(ParserErrorCode.UNEXPECTED_TERMINATOR_FOR_PARAMETER_GROUP, ["["]);
}
}
kind = ParameterKind.REQUIRED;
- } else if (matches(TokenType.CLOSE_CURLY_BRACKET)) {
+ } else if (_matches(TokenType.CLOSE_CURLY_BRACKET)) {
rightCurlyBracket = andAdvance;
currentParameters = normalParameters;
if (leftCurlyBracket == null) {
if (leftSquareBracket != null) {
- reportErrorForCurrentToken(ParserErrorCode.WRONG_TERMINATOR_FOR_PARAMETER_GROUP, ["]"]);
+ _reportErrorForCurrentToken(ParserErrorCode.WRONG_TERMINATOR_FOR_PARAMETER_GROUP, ["]"]);
rightSquareBracket = rightCurlyBracket;
rightCurlyBracket = null;
} else {
- reportErrorForCurrentToken(ParserErrorCode.UNEXPECTED_TERMINATOR_FOR_PARAMETER_GROUP, ["{"]);
+ _reportErrorForCurrentToken(ParserErrorCode.UNEXPECTED_TERMINATOR_FOR_PARAMETER_GROUP, ["{"]);
}
}
kind = ParameterKind.REQUIRED;
}
- } while (!matches(TokenType.CLOSE_PAREN) && initialToken != _currentToken);
- Token rightParenthesis = expect(TokenType.CLOSE_PAREN);
+ } while (!_matches(TokenType.CLOSE_PAREN) && initialToken != _currentToken);
+ Token rightParenthesis = _expect(TokenType.CLOSE_PAREN);
//
// Check that the groups were closed correctly.
//
if (leftSquareBracket != null && rightSquareBracket == null) {
- reportErrorForCurrentToken(ParserErrorCode.MISSING_TERMINATOR_FOR_PARAMETER_GROUP, ["]"]);
+ _reportErrorForCurrentToken(ParserErrorCode.MISSING_TERMINATOR_FOR_PARAMETER_GROUP, ["]"]);
}
if (leftCurlyBracket != null && rightCurlyBracket == null) {
- reportErrorForCurrentToken(ParserErrorCode.MISSING_TERMINATOR_FOR_PARAMETER_GROUP, ["}"]);
+ _reportErrorForCurrentToken(ParserErrorCode.MISSING_TERMINATOR_FOR_PARAMETER_GROUP, ["}"]);
}
//
// Build the parameter list.
@@ -2171,8 +2275,8 @@
*/
FunctionExpression parseFunctionExpression() {
FormalParameterList parameters = parseFormalParameterList();
- validateFormalParameterList(parameters);
- FunctionBody body = parseFunctionBody(false, ParserErrorCode.MISSING_FUNCTION_BODY, true);
+ _validateFormalParameterList(parameters);
+ FunctionBody body = _parseFunctionBody(false, ParserErrorCode.MISSING_FUNCTION_BODY, true);
return new FunctionExpression(parameters, body);
}
@@ -2187,10 +2291,10 @@
* @return the implements clause that was parsed
*/
ImplementsClause parseImplementsClause() {
- Token keyword = expectKeyword(Keyword.IMPLEMENTS);
+ Token keyword = _expectKeyword(Keyword.IMPLEMENTS);
List<TypeName> interfaces = new List<TypeName>();
interfaces.add(parseTypeName());
- while (optional(TokenType.COMMA)) {
+ while (_optional(TokenType.COMMA)) {
interfaces.add(parseTypeName());
}
return new ImplementsClause(keyword, interfaces);
@@ -2208,7 +2312,7 @@
*/
Label parseLabel() {
SimpleIdentifier label = parseSimpleIdentifier();
- Token colon = expect(TokenType.COLON);
+ Token colon = _expect(TokenType.COLON);
return new Label(label, colon);
}
@@ -2225,8 +2329,8 @@
LibraryIdentifier parseLibraryIdentifier() {
List<SimpleIdentifier> components = new List<SimpleIdentifier>();
components.add(parseSimpleIdentifier());
- while (matches(TokenType.PERIOD)) {
- advance();
+ while (_matches(TokenType.PERIOD)) {
+ _advance();
components.add(parseSimpleIdentifier());
}
return new LibraryIdentifier(components);
@@ -2243,10 +2347,10 @@
* @return the logical or expression that was parsed
*/
Expression parseLogicalOrExpression() {
- Expression expression = parseLogicalAndExpression();
- while (matches(TokenType.BAR_BAR)) {
+ Expression expression = _parseLogicalAndExpression();
+ while (_matches(TokenType.BAR_BAR)) {
Token operator = andAdvance;
- expression = new BinaryExpression(expression, operator, parseLogicalAndExpression());
+ expression = new BinaryExpression(expression, operator, _parseLogicalAndExpression());
}
return expression;
}
@@ -2263,7 +2367,7 @@
*/
MapLiteralEntry parseMapLiteralEntry() {
Expression key = parseExpression2();
- Token separator = expect(TokenType.COLON);
+ Token separator = _expect(TokenType.COLON);
Expression value = parseExpression2();
return new MapLiteralEntry(key, separator, value);
}
@@ -2291,20 +2395,20 @@
* @return the normal formal parameter that was parsed
*/
NormalFormalParameter parseNormalFormalParameter() {
- CommentAndMetadata commentAndMetadata = parseCommentAndMetadata();
- FinalConstVarOrType holder = parseFinalConstVarOrType(true);
+ CommentAndMetadata commentAndMetadata = _parseCommentAndMetadata();
+ FinalConstVarOrType holder = _parseFinalConstVarOrType(true);
Token thisKeyword = null;
Token period = null;
- if (matchesKeyword(Keyword.THIS)) {
+ if (_matchesKeyword(Keyword.THIS)) {
thisKeyword = andAdvance;
- period = expect(TokenType.PERIOD);
+ period = _expect(TokenType.PERIOD);
}
SimpleIdentifier identifier = parseSimpleIdentifier();
- if (matches(TokenType.OPEN_PAREN)) {
+ if (_matches(TokenType.OPEN_PAREN)) {
FormalParameterList parameters = parseFormalParameterList();
if (thisKeyword == null) {
if (holder.keyword != null) {
- reportErrorForToken(ParserErrorCode.FUNCTION_TYPED_PARAMETER_VAR, holder.keyword, []);
+ _reportErrorForToken(ParserErrorCode.FUNCTION_TYPED_PARAMETER_VAR, holder.keyword, []);
}
return new FunctionTypedFormalParameter(commentAndMetadata.comment, commentAndMetadata.metadata, holder.type, identifier, parameters);
} else {
@@ -2313,10 +2417,10 @@
}
TypeName type = holder.type;
if (type != null) {
- if (tokenMatchesKeyword(type.name.beginToken, Keyword.VOID)) {
- reportErrorForToken(ParserErrorCode.VOID_PARAMETER, type.name.beginToken, []);
- } else if (holder.keyword != null && tokenMatchesKeyword(holder.keyword, Keyword.VAR)) {
- reportErrorForToken(ParserErrorCode.VAR_AND_TYPE, holder.keyword, []);
+ if (_tokenMatchesKeyword(type.name.beginToken, Keyword.VOID)) {
+ _reportErrorForToken(ParserErrorCode.VOID_PARAMETER, type.name.beginToken, []);
+ } else if (holder.keyword != null && _tokenMatchesKeyword(holder.keyword, Keyword.VAR)) {
+ _reportErrorForToken(ParserErrorCode.VAR_AND_TYPE, holder.keyword, []);
}
}
if (thisKeyword != null) {
@@ -2337,7 +2441,7 @@
*/
Identifier parsePrefixedIdentifier() {
SimpleIdentifier qualifier = parseSimpleIdentifier();
- if (!matches(TokenType.PERIOD)) {
+ if (!_matches(TokenType.PERIOD)) {
return qualifier;
}
Token period = andAdvance;
@@ -2357,7 +2461,7 @@
* @return the return type that was parsed
*/
TypeName parseReturnType() {
- if (matchesKeyword(Keyword.VOID)) {
+ if (_matchesKeyword(Keyword.VOID)) {
return new TypeName(new SimpleIdentifier(andAdvance), null);
} else {
return parseTypeName();
@@ -2375,11 +2479,11 @@
* @return the simple identifier that was parsed
*/
SimpleIdentifier parseSimpleIdentifier() {
- if (matchesIdentifier()) {
+ if (_matchesIdentifier()) {
return new SimpleIdentifier(andAdvance);
}
- reportErrorForCurrentToken(ParserErrorCode.MISSING_IDENTIFIER, []);
- return createSyntheticIdentifier();
+ _reportErrorForCurrentToken(ParserErrorCode.MISSING_IDENTIFIER, []);
+ return _createSyntheticIdentifier();
}
/**
@@ -2394,10 +2498,10 @@
*/
Statement parseStatement2() {
List<Label> labels = new List<Label>();
- while (matchesIdentifier() && tokenMatches(peek(), TokenType.COLON)) {
+ while (_matchesIdentifier() && _tokenMatches(_peek(), TokenType.COLON)) {
labels.add(parseLabel());
}
- Statement statement = parseNonLabeledStatement();
+ Statement statement = _parseNonLabeledStatement();
if (labels.isEmpty) {
return statement;
}
@@ -2417,17 +2521,17 @@
*/
StringLiteral parseStringLiteral() {
List<StringLiteral> strings = new List<StringLiteral>();
- while (matches(TokenType.STRING)) {
+ while (_matches(TokenType.STRING)) {
Token string = andAdvance;
- if (matches(TokenType.STRING_INTERPOLATION_EXPRESSION) || matches(TokenType.STRING_INTERPOLATION_IDENTIFIER)) {
- strings.add(parseStringInterpolation(string));
+ if (_matches(TokenType.STRING_INTERPOLATION_EXPRESSION) || _matches(TokenType.STRING_INTERPOLATION_IDENTIFIER)) {
+ strings.add(_parseStringInterpolation(string));
} else {
- strings.add(new SimpleStringLiteral(string, computeStringValue(string.lexeme, true, true)));
+ strings.add(new SimpleStringLiteral(string, _computeStringValue(string.lexeme, true, true)));
}
}
if (strings.length < 1) {
- reportErrorForCurrentToken(ParserErrorCode.EXPECTED_STRING_LITERAL, []);
- return createSyntheticStringLiteral();
+ _reportErrorForCurrentToken(ParserErrorCode.EXPECTED_STRING_LITERAL, []);
+ return _createSyntheticStringLiteral();
} else if (strings.length == 1) {
return strings[0];
} else {
@@ -2449,13 +2553,13 @@
* @return the type argument list that was parsed
*/
TypeArgumentList parseTypeArgumentList() {
- Token leftBracket = expect(TokenType.LT);
+ Token leftBracket = _expect(TokenType.LT);
List<TypeName> arguments = new List<TypeName>();
arguments.add(parseTypeName());
- while (optional(TokenType.COMMA)) {
+ while (_optional(TokenType.COMMA)) {
arguments.add(parseTypeName());
}
- Token rightBracket = expect(TokenType.GT);
+ Token rightBracket = _expectGt();
return new TypeArgumentList(leftBracket, arguments, rightBracket);
}
@@ -2471,17 +2575,17 @@
*/
TypeName parseTypeName() {
Identifier typeName;
- if (matchesKeyword(Keyword.VAR)) {
- reportErrorForCurrentToken(ParserErrorCode.VAR_AS_TYPE_NAME, []);
+ if (_matchesKeyword(Keyword.VAR)) {
+ _reportErrorForCurrentToken(ParserErrorCode.VAR_AS_TYPE_NAME, []);
typeName = new SimpleIdentifier(andAdvance);
- } else if (matchesIdentifier()) {
+ } else if (_matchesIdentifier()) {
typeName = parsePrefixedIdentifier();
} else {
- typeName = createSyntheticIdentifier();
- reportErrorForCurrentToken(ParserErrorCode.EXPECTED_TYPE_NAME, []);
+ typeName = _createSyntheticIdentifier();
+ _reportErrorForCurrentToken(ParserErrorCode.EXPECTED_TYPE_NAME, []);
}
TypeArgumentList typeArguments = null;
- if (matches(TokenType.LT)) {
+ if (_matches(TokenType.LT)) {
typeArguments = parseTypeArgumentList();
}
return new TypeName(typeName, typeArguments);
@@ -2498,9 +2602,9 @@
* @return the type parameter that was parsed
*/
TypeParameter parseTypeParameter() {
- CommentAndMetadata commentAndMetadata = parseCommentAndMetadata();
+ CommentAndMetadata commentAndMetadata = _parseCommentAndMetadata();
SimpleIdentifier name = parseSimpleIdentifier();
- if (matchesKeyword(Keyword.EXTENDS)) {
+ if (_matchesKeyword(Keyword.EXTENDS)) {
Token keyword = andAdvance;
TypeName bound = parseTypeName();
return new TypeParameter(commentAndMetadata.comment, commentAndMetadata.metadata, name, keyword, bound);
@@ -2519,13 +2623,13 @@
* @return the list of type parameters that were parsed
*/
TypeParameterList parseTypeParameterList() {
- Token leftBracket = expect(TokenType.LT);
+ Token leftBracket = _expect(TokenType.LT);
List<TypeParameter> typeParameters = new List<TypeParameter>();
typeParameters.add(parseTypeParameter());
- while (optional(TokenType.COMMA)) {
+ while (_optional(TokenType.COMMA)) {
typeParameters.add(parseTypeParameter());
}
- Token rightBracket = expect(TokenType.GT);
+ Token rightBracket = _expectGt();
return new TypeParameterList(leftBracket, typeParameters, rightBracket);
}
@@ -2540,10 +2644,10 @@
* @return the with clause that was parsed
*/
WithClause parseWithClause() {
- Token with2 = expectKeyword(Keyword.WITH);
+ Token with2 = _expectKeyword(Keyword.WITH);
List<TypeName> types = new List<TypeName>();
types.add(parseTypeName());
- while (optional(TokenType.COMMA)) {
+ while (_optional(TokenType.COMMA)) {
types.add(parseTypeName());
}
return new WithClause(with2, types);
@@ -2556,7 +2660,7 @@
/**
* Advance to the next token in the token stream.
*/
- void advance() {
+ void _advance() {
_currentToken = _currentToken.next;
}
@@ -2571,9 +2675,9 @@
* @param startIndex the index of the first character representing the scalar value
* @param endIndex the index of the last character representing the scalar value
*/
- void appendScalarValue(JavaStringBuilder builder, String escapeSequence, int scalarValue, int startIndex, int endIndex) {
+ void _appendScalarValue(JavaStringBuilder builder, String escapeSequence, int scalarValue, int startIndex, int endIndex) {
if (scalarValue < 0 || scalarValue > Character.MAX_CODE_POINT || (scalarValue >= 0xD800 && scalarValue <= 0xDFFF)) {
- reportErrorForCurrentToken(ParserErrorCode.INVALID_CODE_POINT, [escapeSequence]);
+ _reportErrorForCurrentToken(ParserErrorCode.INVALID_CODE_POINT, [escapeSequence]);
return;
}
if (scalarValue < Character.MAX_VALUE) {
@@ -2591,7 +2695,7 @@
* @param last `true` if this is the last token in a string literal
* @return the actual value of the string
*/
- String computeStringValue(String lexeme, bool first, bool last) {
+ String _computeStringValue(String lexeme, bool first, bool last) {
bool isRaw = false;
int start = 0;
if (first) {
@@ -2625,7 +2729,7 @@
JavaStringBuilder builder = new JavaStringBuilder();
int index = start;
while (index < end) {
- index = translateCharacter(builder, lexeme, index);
+ index = _translateCharacter(builder, lexeme, index);
}
return builder.toString();
}
@@ -2637,7 +2741,7 @@
* @return the function declaration that most closely captures the components of the given method
* declaration
*/
- FunctionDeclaration convertToFunctionDeclaration(MethodDeclaration method) => new FunctionDeclaration(method.documentationComment, method.metadata, method.externalKeyword, method.returnType, method.propertyKeyword, method.name, new FunctionExpression(method.parameters, method.body));
+ FunctionDeclaration _convertToFunctionDeclaration(MethodDeclaration method) => new FunctionDeclaration(method.documentationComment, method.metadata, method.externalKeyword, method.returnType, method.propertyKeyword, method.name, new FunctionExpression(method.parameters, method.body));
/**
* Return `true` if the current token could be the start of a compilation unit member. This
@@ -2646,29 +2750,29 @@
*
* @return `true` if the current token could be the start of a compilation unit member
*/
- bool couldBeStartOfCompilationUnitMember() {
- if ((matchesKeyword(Keyword.IMPORT) || matchesKeyword(Keyword.EXPORT) || matchesKeyword(Keyword.LIBRARY) || matchesKeyword(Keyword.PART)) && !tokenMatches(peek(), TokenType.PERIOD) && !tokenMatches(peek(), TokenType.LT)) {
+ bool _couldBeStartOfCompilationUnitMember() {
+ if ((_matchesKeyword(Keyword.IMPORT) || _matchesKeyword(Keyword.EXPORT) || _matchesKeyword(Keyword.LIBRARY) || _matchesKeyword(Keyword.PART)) && !_tokenMatches(_peek(), TokenType.PERIOD) && !_tokenMatches(_peek(), TokenType.LT)) {
// This looks like the start of a directive
return true;
- } else if (matchesKeyword(Keyword.CLASS)) {
+ } else if (_matchesKeyword(Keyword.CLASS)) {
// This looks like the start of a class definition
return true;
- } else if (matchesKeyword(Keyword.TYPEDEF) && !tokenMatches(peek(), TokenType.PERIOD) && !tokenMatches(peek(), TokenType.LT)) {
+ } else if (_matchesKeyword(Keyword.TYPEDEF) && !_tokenMatches(_peek(), TokenType.PERIOD) && !_tokenMatches(_peek(), TokenType.LT)) {
// This looks like the start of a typedef
return true;
- } else if (matchesKeyword(Keyword.VOID) || ((matchesKeyword(Keyword.GET) || matchesKeyword(Keyword.SET)) && tokenMatchesIdentifier(peek())) || (matchesKeyword(Keyword.OPERATOR) && isOperator(peek()))) {
+ } else if (_matchesKeyword(Keyword.VOID) || ((_matchesKeyword(Keyword.GET) || _matchesKeyword(Keyword.SET)) && _tokenMatchesIdentifier(_peek())) || (_matchesKeyword(Keyword.OPERATOR) && _isOperator(_peek()))) {
// This looks like the start of a function
return true;
- } else if (matchesIdentifier()) {
- if (tokenMatches(peek(), TokenType.OPEN_PAREN)) {
+ } else if (_matchesIdentifier()) {
+ if (_tokenMatches(_peek(), TokenType.OPEN_PAREN)) {
// This looks like the start of a function
return true;
}
- Token token = skipReturnType(_currentToken);
+ Token token = _skipReturnType(_currentToken);
if (token == null) {
return false;
}
- if (matchesKeyword(Keyword.GET) || matchesKeyword(Keyword.SET) || (matchesKeyword(Keyword.OPERATOR) && isOperator(peek())) || matchesIdentifier()) {
+ if (_matchesKeyword(Keyword.GET) || _matchesKeyword(Keyword.SET) || (_matchesKeyword(Keyword.OPERATOR) && _isOperator(_peek())) || _matchesIdentifier()) {
return true;
}
}
@@ -2680,16 +2784,16 @@
*
* @return the synthetic identifier that was created
*/
- SimpleIdentifier createSyntheticIdentifier() {
+ SimpleIdentifier _createSyntheticIdentifier() {
Token syntheticToken;
if (identical(_currentToken.type, TokenType.KEYWORD)) {
// Consider current keyword token as an identifier.
// It is not always true, e.g. "^is T" where "^" is place the place for synthetic identifier.
// By creating SyntheticStringToken we can distinguish a real identifier from synthetic.
// In the code completion behavior will depend on a cursor position - before or on "is".
- syntheticToken = injectToken(new SyntheticStringToken(TokenType.IDENTIFIER, _currentToken.lexeme, _currentToken.offset));
+ syntheticToken = _injectToken(new SyntheticStringToken(TokenType.IDENTIFIER, _currentToken.lexeme, _currentToken.offset));
} else {
- syntheticToken = createSyntheticToken(TokenType.IDENTIFIER);
+ syntheticToken = _createSyntheticToken(TokenType.IDENTIFIER);
}
return new SimpleIdentifier(syntheticToken);
}
@@ -2699,21 +2803,21 @@
*
* @return the synthetic token that was created
*/
- Token createSyntheticKeyword(Keyword keyword) => injectToken(new Parser_SyntheticKeywordToken(keyword, _currentToken.offset));
+ Token _createSyntheticKeyword(Keyword keyword) => _injectToken(new Parser_SyntheticKeywordToken(keyword, _currentToken.offset));
/**
* Create a synthetic string literal.
*
* @return the synthetic string literal that was created
*/
- SimpleStringLiteral createSyntheticStringLiteral() => new SimpleStringLiteral(createSyntheticToken(TokenType.STRING), "");
+ SimpleStringLiteral _createSyntheticStringLiteral() => new SimpleStringLiteral(_createSyntheticToken(TokenType.STRING), "");
/**
* Create a synthetic token with the given type.
*
* @return the synthetic token that was created
*/
- Token createSyntheticToken(TokenType type) => injectToken(new StringToken(type, "", _currentToken.offset));
+ Token _createSyntheticToken(TokenType type) => _injectToken(new StringToken(type, "", _currentToken.offset));
/**
* Check that the given expression is assignable and report an error if it isn't.
@@ -2731,47 +2835,63 @@
*
* @param expression the expression being checked
*/
- void ensureAssignable(Expression expression) {
+ void _ensureAssignable(Expression expression) {
if (expression != null && !expression.isAssignable) {
- reportErrorForCurrentToken(ParserErrorCode.ILLEGAL_ASSIGNMENT_TO_NON_ASSIGNABLE, []);
+ _reportErrorForCurrentToken(ParserErrorCode.ILLEGAL_ASSIGNMENT_TO_NON_ASSIGNABLE, []);
}
}
/**
* If the current token has the expected type, return it after advancing to the next token.
- * Otherwise report an error and return the current token without advancing.
+ * Otherwise report an error and return the current token without advancing. Note that the method
+ * [expectGt] should be used if the argument to this method would be [TokenType#GT]
+ * .
*
* @param type the type of token that is expected
* @return the token that matched the given type
*/
- Token expect(TokenType type) {
- if (matches(type)) {
+ Token _expect(TokenType type) {
+ if (_matches(type)) {
return andAdvance;
}
// Remove uses of this method in favor of matches?
// Pass in the error code to use to report the error?
if (identical(type, TokenType.SEMICOLON)) {
- reportErrorForToken(ParserErrorCode.EXPECTED_TOKEN, _currentToken.previous, [type.lexeme]);
+ _reportErrorForToken(ParserErrorCode.EXPECTED_TOKEN, _currentToken.previous, [type.lexeme]);
} else {
- reportErrorForCurrentToken(ParserErrorCode.EXPECTED_TOKEN, [type.lexeme]);
+ _reportErrorForCurrentToken(ParserErrorCode.EXPECTED_TOKEN, [type.lexeme]);
}
return _currentToken;
}
/**
+ * If the current token has the type [TokenType#GT], return it after advancing to the next
+ * token. Otherwise report an error and return the current token without advancing.
+ *
+ * @return the token that matched the given type
+ */
+ Token _expectGt() {
+ if (_matchesGt()) {
+ return andAdvance;
+ }
+ _reportErrorForCurrentToken(ParserErrorCode.EXPECTED_TOKEN, [TokenType.GT.lexeme]);
+ return _currentToken;
+ }
+
+ /**
* If the current token is a keyword matching the given string, return it after advancing to the
* next token. Otherwise report an error and return the current token without advancing.
*
* @param keyword the keyword that is expected
* @return the token that matched the given type
*/
- Token expectKeyword(Keyword keyword) {
- if (matchesKeyword(keyword)) {
+ Token _expectKeyword(Keyword keyword) {
+ if (_matchesKeyword(keyword)) {
return andAdvance;
}
// Remove uses of this method in favor of matches?
// Pass in the error code to use to report the error?
- reportErrorForCurrentToken(ParserErrorCode.EXPECTED_TOKEN, [keyword.syntax]);
+ _reportErrorForCurrentToken(ParserErrorCode.EXPECTED_TOKEN, [keyword.syntax]);
return _currentToken;
}
@@ -2781,12 +2901,12 @@
*
* TODO(scheglov) consider pushing this into [expect]
*/
- Token expectSemicolon() {
- if (matches(TokenType.SEMICOLON)) {
+ Token _expectSemicolon() {
+ if (_matches(TokenType.SEMICOLON)) {
return andAdvance;
} else {
- reportErrorForToken(ParserErrorCode.EXPECTED_TOKEN, _currentToken.previous, [";"]);
- return createSyntheticToken(TokenType.SEMICOLON);
+ _reportErrorForToken(ParserErrorCode.EXPECTED_TOKEN, _currentToken.previous, [";"]);
+ return _createSyntheticToken(TokenType.SEMICOLON);
}
}
@@ -2798,7 +2918,7 @@
* @param index the index contained in the returned range
* @return the range that was found
*/
- List<int> findRange(List<List<int>> ranges, int index) {
+ List<int> _findRange(List<List<int>> ranges, int index) {
int rangeCount = ranges.length;
for (int i = 0; i < rangeCount; i++) {
List<int> range = ranges[i];
@@ -2818,7 +2938,7 @@
*/
Token get andAdvance {
Token token = _currentToken;
- advance();
+ _advance();
return token;
}
@@ -2829,7 +2949,7 @@
* @param comment the comment being processed
* @return the ranges of characters that should be treated as code blocks
*/
- List<List<int>> getCodeBlockRanges(String comment) {
+ List<List<int>> _getCodeBlockRanges(String comment) {
List<List<int>> ranges = new List<List<int>>();
int length = comment.length;
if (length < 3) {
@@ -2880,7 +3000,7 @@
* @param beginToken the token that is expected to have an end token associated with it
* @return the end token associated with the begin token
*/
- Token getEndToken(Token beginToken) {
+ Token _getEndToken(Token beginToken) {
if (beginToken is BeginToken) {
return beginToken.endToken;
}
@@ -2897,11 +3017,11 @@
* return type.
*/
bool get hasReturnTypeInTypeAlias {
- Token next = skipReturnType(_currentToken);
+ Token next = _skipReturnType(_currentToken);
if (next == null) {
return false;
}
- return tokenMatchesIdentifier(next);
+ return _tokenMatchesIdentifier(next);
}
/**
@@ -2910,7 +3030,7 @@
* @param token the token to be added to the token stream
* @return the token that was just added to the token stream
*/
- Token injectToken(Token token) {
+ Token _injectToken(Token token) {
Token previous = _currentToken.previous;
token.setNext(_currentToken);
previous.setNext(token);
@@ -2922,35 +3042,35 @@
*
* @return `true` if the current token appears to be the beginning of a function declaration
*/
- bool isFunctionDeclaration() {
- if (matchesKeyword(Keyword.VOID)) {
+ bool _isFunctionDeclaration() {
+ if (_matchesKeyword(Keyword.VOID)) {
return true;
}
- Token afterReturnType = skipTypeName(_currentToken);
+ Token afterReturnType = _skipTypeName(_currentToken);
if (afterReturnType == null) {
// There was no return type, but it is optional, so go back to where we started.
afterReturnType = _currentToken;
}
- Token afterIdentifier = skipSimpleIdentifier(afterReturnType);
+ Token afterIdentifier = _skipSimpleIdentifier(afterReturnType);
if (afterIdentifier == null) {
// It's possible that we parsed the function name as if it were a type name, so see whether
// it makes sense if we assume that there is no type.
- afterIdentifier = skipSimpleIdentifier(_currentToken);
+ afterIdentifier = _skipSimpleIdentifier(_currentToken);
}
if (afterIdentifier == null) {
return false;
}
- if (isFunctionExpression(afterIdentifier)) {
+ if (_isFunctionExpression(afterIdentifier)) {
return true;
}
// It's possible that we have found a getter. While this isn't valid at this point we test for
// it in order to recover better.
- if (matchesKeyword(Keyword.GET)) {
- Token afterName = skipSimpleIdentifier(_currentToken.next);
+ if (_matchesKeyword(Keyword.GET)) {
+ Token afterName = _skipSimpleIdentifier(_currentToken.next);
if (afterName == null) {
return false;
}
- return tokenMatches(afterName, TokenType.FUNCTION) || tokenMatches(afterName, TokenType.OPEN_CURLY_BRACKET);
+ return _tokenMatches(afterName, TokenType.FUNCTION) || _tokenMatches(afterName, TokenType.OPEN_CURLY_BRACKET);
}
return false;
}
@@ -2961,12 +3081,12 @@
* @param startToken the token that might be the start of a function expression
* @return `true` if the given token appears to be the beginning of a function expression
*/
- bool isFunctionExpression(Token startToken) {
- Token afterParameters = skipFormalParameterList(startToken);
+ bool _isFunctionExpression(Token startToken) {
+ Token afterParameters = _skipFormalParameterList(startToken);
if (afterParameters == null) {
return false;
}
- return matchesAny(afterParameters, [TokenType.OPEN_CURLY_BRACKET, TokenType.FUNCTION]);
+ return afterParameters.matchesAny([TokenType.OPEN_CURLY_BRACKET, TokenType.FUNCTION]);
}
/**
@@ -2975,7 +3095,7 @@
* @param character the character being tested
* @return `true` if the character is a valid hexadecimal digit
*/
- bool isHexDigit(int character) => (0x30 <= character && character <= 0x39) || (0x41 <= character && character <= 0x46) || (0x61 <= character && character <= 0x66);
+ bool _isHexDigit(int character) => (0x30 <= character && character <= 0x39) || (0x41 <= character && character <= 0x46) || (0x61 <= character && character <= 0x66);
/**
* Return `true` if the current token is the first token in an initialized variable
@@ -3005,32 +3125,32 @@
* @return `true` if the current token is the first token in an initialized variable
* declaration
*/
- bool isInitializedVariableDeclaration() {
- if (matchesKeyword(Keyword.FINAL) || matchesKeyword(Keyword.VAR)) {
+ bool _isInitializedVariableDeclaration() {
+ if (_matchesKeyword(Keyword.FINAL) || _matchesKeyword(Keyword.VAR)) {
// An expression cannot start with a keyword other than 'const', 'rethrow', or 'throw'.
return true;
}
- if (matchesKeyword(Keyword.CONST)) {
+ if (_matchesKeyword(Keyword.CONST)) {
// Look to see whether we might be at the start of a list or map literal, otherwise this
// should be the start of a variable declaration.
- return !matchesAny(peek(), [
+ return !_peek().matchesAny([
TokenType.LT,
TokenType.OPEN_CURLY_BRACKET,
TokenType.OPEN_SQUARE_BRACKET,
TokenType.INDEX]);
}
// We know that we have an identifier, and need to see whether it might be a type name.
- Token token = skipTypeName(_currentToken);
+ Token token = _skipTypeName(_currentToken);
if (token == null) {
// There was no type name, so this can't be a declaration.
return false;
}
- token = skipSimpleIdentifier(token);
+ token = _skipSimpleIdentifier(token);
if (token == null) {
return false;
}
TokenType type = token.type;
- return identical(type, TokenType.EQ) || identical(type, TokenType.COMMA) || identical(type, TokenType.SEMICOLON) || tokenMatchesKeyword(token, Keyword.IN);
+ return identical(type, TokenType.EQ) || identical(type, TokenType.COMMA) || identical(type, TokenType.SEMICOLON) || _tokenMatchesKeyword(token, Keyword.IN);
}
/**
@@ -3045,7 +3165,7 @@
* @param rightIndex the index of the right bracket
* @return `true` if the bracketed text is followed by a link address
*/
- bool isLinkText(String comment, int rightIndex) {
+ bool _isLinkText(String comment, int rightIndex) {
int length = comment.length;
int index = rightIndex + 1;
if (index >= length) {
@@ -3071,7 +3191,7 @@
* @param startToken the token that might be the start of an operator declaration
* @return `true` if the given token appears to be the beginning of an operator declaration
*/
- bool isOperator(Token startToken) {
+ bool _isOperator(Token startToken) {
// Accept any operator here, even if it is not user definable.
if (!startToken.isOperator) {
return false;
@@ -3086,7 +3206,7 @@
token = token.next;
}
// Formal parameter list is expect now.
- return tokenMatches(token, TokenType.OPEN_PAREN);
+ return _tokenMatches(token, TokenType.OPEN_PAREN);
}
/**
@@ -3094,9 +3214,9 @@
*
* @return `true` if the current token appears to be the beginning of a switch member
*/
- bool isSwitchMember() {
+ bool _isSwitchMember() {
Token token = _currentToken;
- while (tokenMatches(token, TokenType.IDENTIFIER) && tokenMatches(token.next, TokenType.COLON)) {
+ while (_tokenMatches(token, TokenType.IDENTIFIER) && _tokenMatches(token.next, TokenType.COLON)) {
token = token.next.next;
}
if (identical(token.type, TokenType.KEYWORD)) {
@@ -3113,13 +3233,13 @@
* @param startToken the first token of the sequence being checked
* @return `true` if there is a type name and variable starting at the given token
*/
- bool isTypedIdentifier(Token startToken) {
- Token token = skipReturnType(startToken);
+ bool _isTypedIdentifier(Token startToken) {
+ Token token = _skipReturnType(startToken);
if (token == null) {
return false;
- } else if (tokenMatchesIdentifier(token)) {
+ } else if (_tokenMatchesIdentifier(token)) {
return true;
- } else if (tokenMatchesKeyword(token, Keyword.THIS) && tokenMatches(token.next, TokenType.PERIOD) && tokenMatchesIdentifier(token.next.next)) {
+ } else if (_tokenMatchesKeyword(token, Keyword.THIS) && _tokenMatches(token.next, TokenType.PERIOD) && _tokenMatchesIdentifier(token.next.next)) {
return true;
}
return false;
@@ -3134,7 +3254,7 @@
* @param tokens the tokens being compared
* @return the token with the smallest offset
*/
- Token lexicallyFirst(List<Token> tokens) {
+ Token _lexicallyFirst(List<Token> tokens) {
Token first = null;
int firstOffset = 2147483647;
for (Token token in tokens) {
@@ -3153,72 +3273,61 @@
* Increments the error reporting lock level. If level is more than `0`, then
* [reportError] wont report any error.
*/
- void lockErrorListener() {
+ void _lockErrorListener() {
_errorListenerLock++;
}
/**
- * Return `true` if the current token has the given type. Note that this method, unlike
- * other variants, will modify the token stream if possible to match a wider range of tokens. In
- * particular, if we are attempting to match a '>' and the next token is either a '>>' or '>>>',
- * the token stream will be re-written and `true` will be returned.
+ * Return `true` if the current token has the given type. Note that the method
+ * [matchesGt] should be used if the argument to this method would be
+ * [TokenType#GT].
*
* @param type the type of token that can optionally appear in the current location
* @return `true` if the current token has the given type
*/
- bool matches(TokenType type) {
- TokenType currentType = _currentToken.type;
- if (currentType != type) {
- if (identical(type, TokenType.GT)) {
- if (identical(currentType, TokenType.GT_GT)) {
- int offset = _currentToken.offset;
- Token first = new Token(TokenType.GT, offset);
- Token second = new Token(TokenType.GT, offset + 1);
- second.setNext(_currentToken.next);
- first.setNext(second);
- _currentToken.previous.setNext(first);
- _currentToken = first;
- return true;
- } else if (identical(currentType, TokenType.GT_EQ)) {
- int offset = _currentToken.offset;
- Token first = new Token(TokenType.GT, offset);
- Token second = new Token(TokenType.EQ, offset + 1);
- second.setNext(_currentToken.next);
- first.setNext(second);
- _currentToken.previous.setNext(first);
- _currentToken = first;
- return true;
- } else if (identical(currentType, TokenType.GT_GT_EQ)) {
- int offset = _currentToken.offset;
- Token first = new Token(TokenType.GT, offset);
- Token second = new Token(TokenType.GT, offset + 1);
- Token third = new Token(TokenType.EQ, offset + 2);
- third.setNext(_currentToken.next);
- second.setNext(third);
- first.setNext(second);
- _currentToken.previous.setNext(first);
- _currentToken = first;
- return true;
- }
- }
- return false;
- }
- return true;
- }
+ bool _matches(TokenType type) => identical(_currentToken.type, type);
/**
- * Return `true` if the given token has any one of the given types.
+ * Return `true` if the current token has a type of [TokenType#GT]. Note that this
+ * method, unlike other variants, will modify the token stream if possible to match desired type.
+ * In particular, if the next token is either a '>>' or '>>>', the token stream will be re-written
+ * and `true` will be returned.
*
- * @param token the token being tested
- * @param types the types of token that are being tested for
- * @return `true` if the given token has any of the given types
+ * @return `true` if the current token has a type of [TokenType#GT]
*/
- bool matchesAny(Token token, List<TokenType> types) {
- TokenType actualType = token.type;
- for (TokenType type in types) {
- if (identical(actualType, type)) {
- return true;
- }
+ bool _matchesGt() {
+ TokenType currentType = _currentToken.type;
+ if (identical(currentType, TokenType.GT)) {
+ return true;
+ } else if (identical(currentType, TokenType.GT_GT)) {
+ int offset = _currentToken.offset;
+ Token first = new Token(TokenType.GT, offset);
+ Token second = new Token(TokenType.GT, offset + 1);
+ second.setNext(_currentToken.next);
+ first.setNext(second);
+ _currentToken.previous.setNext(first);
+ _currentToken = first;
+ return true;
+ } else if (identical(currentType, TokenType.GT_EQ)) {
+ int offset = _currentToken.offset;
+ Token first = new Token(TokenType.GT, offset);
+ Token second = new Token(TokenType.EQ, offset + 1);
+ second.setNext(_currentToken.next);
+ first.setNext(second);
+ _currentToken.previous.setNext(first);
+ _currentToken = first;
+ return true;
+ } else if (identical(currentType, TokenType.GT_GT_EQ)) {
+ int offset = _currentToken.offset;
+ Token first = new Token(TokenType.GT, offset);
+ Token second = new Token(TokenType.GT, offset + 1);
+ Token third = new Token(TokenType.EQ, offset + 2);
+ third.setNext(_currentToken.next);
+ second.setNext(third);
+ first.setNext(second);
+ _currentToken.previous.setNext(first);
+ _currentToken = first;
+ return true;
}
return false;
}
@@ -3229,7 +3338,7 @@
*
* @return `true` if the current token is a valid identifier
*/
- bool matchesIdentifier() => tokenMatchesIdentifier(_currentToken);
+ bool _matchesIdentifier() => _tokenMatchesIdentifier(_currentToken);
/**
* Return `true` if the current token matches the given keyword.
@@ -3237,7 +3346,7 @@
* @param keyword the keyword that can optionally appear in the current location
* @return `true` if the current token matches the given keyword
*/
- bool matchesKeyword(Keyword keyword) => tokenMatchesKeyword(_currentToken, keyword);
+ bool _matchesKeyword(Keyword keyword) => _tokenMatchesKeyword(_currentToken, keyword);
/**
* Return `true` if the current token matches the given identifier.
@@ -3245,18 +3354,19 @@
* @param identifier the identifier that can optionally appear in the current location
* @return `true` if the current token matches the given identifier
*/
- bool matchesString(String identifier) => identical(_currentToken.type, TokenType.IDENTIFIER) && _currentToken.lexeme == identifier;
+ bool _matchesString(String identifier) => identical(_currentToken.type, TokenType.IDENTIFIER) && _currentToken.lexeme == identifier;
/**
* If the current token has the given type, then advance to the next token and return `true`
- * . Otherwise, return `false` without advancing.
+ * . Otherwise, return `false` without advancing. This method should not be invoked with an
+ * argument value of [TokenType#GT].
*
* @param type the type of token that can optionally appear in the current location
* @return `true` if the current token has the given type
*/
- bool optional(TokenType type) {
- if (matches(type)) {
- advance();
+ bool _optional(TokenType type) {
+ if (_matches(type)) {
+ _advance();
return true;
}
return false;
@@ -3273,16 +3383,16 @@
*
* @return the additive expression that was parsed
*/
- Expression parseAdditiveExpression() {
+ Expression _parseAdditiveExpression() {
Expression expression;
- if (matchesKeyword(Keyword.SUPER) && _currentToken.next.type.isAdditiveOperator) {
+ if (_matchesKeyword(Keyword.SUPER) && _currentToken.next.type.isAdditiveOperator) {
expression = new SuperExpression(andAdvance);
} else {
- expression = parseMultiplicativeExpression();
+ expression = _parseMultiplicativeExpression();
}
while (_currentToken.type.isAdditiveOperator) {
Token operator = andAdvance;
- expression = new BinaryExpression(expression, operator, parseMultiplicativeExpression());
+ expression = new BinaryExpression(expression, operator, _parseMultiplicativeExpression());
}
return expression;
}
@@ -3297,10 +3407,10 @@
*
* @return the argument definition test that was parsed
*/
- ArgumentDefinitionTest parseArgumentDefinitionTest() {
- Token question = expect(TokenType.QUESTION);
+ ArgumentDefinitionTest _parseArgumentDefinitionTest() {
+ Token question = _expect(TokenType.QUESTION);
SimpleIdentifier identifier = parseSimpleIdentifier();
- reportErrorForToken(ParserErrorCode.DEPRECATED_ARGUMENT_DEFINITION_TEST, question, []);
+ _reportErrorForToken(ParserErrorCode.DEPRECATED_ARGUMENT_DEFINITION_TEST, question, []);
return new ArgumentDefinitionTest(question, identifier);
}
@@ -3314,21 +3424,21 @@
*
* @return the assert statement
*/
- AssertStatement parseAssertStatement() {
- Token keyword = expectKeyword(Keyword.ASSERT);
- Token leftParen = expect(TokenType.OPEN_PAREN);
+ AssertStatement _parseAssertStatement() {
+ Token keyword = _expectKeyword(Keyword.ASSERT);
+ Token leftParen = _expect(TokenType.OPEN_PAREN);
Expression expression = parseExpression2();
if (expression is AssignmentExpression) {
- reportErrorForNode(ParserErrorCode.ASSERT_DOES_NOT_TAKE_ASSIGNMENT, expression, []);
+ _reportErrorForNode(ParserErrorCode.ASSERT_DOES_NOT_TAKE_ASSIGNMENT, expression, []);
} else if (expression is CascadeExpression) {
- reportErrorForNode(ParserErrorCode.ASSERT_DOES_NOT_TAKE_CASCADE, expression, []);
+ _reportErrorForNode(ParserErrorCode.ASSERT_DOES_NOT_TAKE_CASCADE, expression, []);
} else if (expression is ThrowExpression) {
- reportErrorForNode(ParserErrorCode.ASSERT_DOES_NOT_TAKE_THROW, expression, []);
+ _reportErrorForNode(ParserErrorCode.ASSERT_DOES_NOT_TAKE_THROW, expression, []);
} else if (expression is RethrowExpression) {
- reportErrorForNode(ParserErrorCode.ASSERT_DOES_NOT_TAKE_RETHROW, expression, []);
+ _reportErrorForNode(ParserErrorCode.ASSERT_DOES_NOT_TAKE_RETHROW, expression, []);
}
- Token rightParen = expect(TokenType.CLOSE_PAREN);
- Token semicolon = expect(TokenType.SEMICOLON);
+ Token rightParen = _expect(TokenType.CLOSE_PAREN);
+ Token semicolon = _expect(TokenType.SEMICOLON);
return new AssertStatement(keyword, leftParen, expression, rightParen, semicolon);
}
@@ -3346,19 +3456,19 @@
* assignable selector
* @return the assignable expression that was parsed
*/
- Expression parseAssignableExpression(bool primaryAllowed) {
- if (matchesKeyword(Keyword.SUPER)) {
- return parseAssignableSelector(new SuperExpression(andAdvance), false);
+ Expression _parseAssignableExpression(bool primaryAllowed) {
+ if (_matchesKeyword(Keyword.SUPER)) {
+ return _parseAssignableSelector(new SuperExpression(andAdvance), false);
}
//
// A primary expression can start with an identifier. We resolve the ambiguity by determining
// whether the primary consists of anything other than an identifier and/or is followed by an
// assignableSelector.
//
- Expression expression = parsePrimaryExpression();
+ Expression expression = _parsePrimaryExpression();
bool isOptional = primaryAllowed || expression is SimpleIdentifier;
while (true) {
- while (matches(TokenType.OPEN_PAREN)) {
+ while (_matches(TokenType.OPEN_PAREN)) {
ArgumentList argumentList = parseArgumentList();
if (expression is SimpleIdentifier) {
expression = new MethodInvocation(null, null, expression as SimpleIdentifier, argumentList);
@@ -3375,7 +3485,7 @@
isOptional = false;
}
}
- Expression selectorExpression = parseAssignableSelector(expression, isOptional || (expression is PrefixedIdentifier));
+ Expression selectorExpression = _parseAssignableSelector(expression, isOptional || (expression is PrefixedIdentifier));
if (identical(selectorExpression, expression)) {
if (!isOptional && (expression is PrefixedIdentifier)) {
PrefixedIdentifier identifier = expression as PrefixedIdentifier;
@@ -3401,19 +3511,19 @@
* @param optional `true` if the selector is optional
* @return the assignable selector that was parsed
*/
- Expression parseAssignableSelector(Expression prefix, bool optional) {
- if (matches(TokenType.OPEN_SQUARE_BRACKET)) {
+ Expression _parseAssignableSelector(Expression prefix, bool optional) {
+ if (_matches(TokenType.OPEN_SQUARE_BRACKET)) {
Token leftBracket = andAdvance;
Expression index = parseExpression2();
- Token rightBracket = expect(TokenType.CLOSE_SQUARE_BRACKET);
+ Token rightBracket = _expect(TokenType.CLOSE_SQUARE_BRACKET);
return new IndexExpression.forTarget(prefix, leftBracket, index, rightBracket);
- } else if (matches(TokenType.PERIOD)) {
+ } else if (_matches(TokenType.PERIOD)) {
Token period = andAdvance;
return new PropertyAccess(prefix, period, parseSimpleIdentifier());
} else {
if (!optional) {
// Report the missing selector.
- reportErrorForCurrentToken(ParserErrorCode.MISSING_ASSIGNABLE_SELECTOR, []);
+ _reportErrorForCurrentToken(ParserErrorCode.MISSING_ASSIGNABLE_SELECTOR, []);
}
return prefix;
}
@@ -3430,16 +3540,16 @@
*
* @return the bitwise and expression that was parsed
*/
- Expression parseBitwiseAndExpression() {
+ Expression _parseBitwiseAndExpression() {
Expression expression;
- if (matchesKeyword(Keyword.SUPER) && tokenMatches(peek(), TokenType.AMPERSAND)) {
+ if (_matchesKeyword(Keyword.SUPER) && _tokenMatches(_peek(), TokenType.AMPERSAND)) {
expression = new SuperExpression(andAdvance);
} else {
- expression = parseShiftExpression();
+ expression = _parseShiftExpression();
}
- while (matches(TokenType.AMPERSAND)) {
+ while (_matches(TokenType.AMPERSAND)) {
Token operator = andAdvance;
- expression = new BinaryExpression(expression, operator, parseShiftExpression());
+ expression = new BinaryExpression(expression, operator, _parseShiftExpression());
}
return expression;
}
@@ -3455,16 +3565,16 @@
*
* @return the bitwise exclusive-or expression that was parsed
*/
- Expression parseBitwiseXorExpression() {
+ Expression _parseBitwiseXorExpression() {
Expression expression;
- if (matchesKeyword(Keyword.SUPER) && tokenMatches(peek(), TokenType.CARET)) {
+ if (_matchesKeyword(Keyword.SUPER) && _tokenMatches(_peek(), TokenType.CARET)) {
expression = new SuperExpression(andAdvance);
} else {
- expression = parseBitwiseAndExpression();
+ expression = _parseBitwiseAndExpression();
}
- while (matches(TokenType.CARET)) {
+ while (_matches(TokenType.CARET)) {
Token operator = andAdvance;
- expression = new BinaryExpression(expression, operator, parseBitwiseAndExpression());
+ expression = new BinaryExpression(expression, operator, _parseBitwiseAndExpression());
}
return expression;
}
@@ -3479,16 +3589,16 @@
*
* @return the break statement that was parsed
*/
- Statement parseBreakStatement() {
- Token breakKeyword = expectKeyword(Keyword.BREAK);
+ Statement _parseBreakStatement() {
+ Token breakKeyword = _expectKeyword(Keyword.BREAK);
SimpleIdentifier label = null;
- if (matchesIdentifier()) {
+ if (_matchesIdentifier()) {
label = parseSimpleIdentifier();
}
if (!_inLoop && !_inSwitch && label == null) {
- reportErrorForToken(ParserErrorCode.BREAK_OUTSIDE_OF_LOOP, breakKeyword, []);
+ _reportErrorForToken(ParserErrorCode.BREAK_OUTSIDE_OF_LOOP, breakKeyword, []);
}
- Token semicolon = expect(TokenType.SEMICOLON);
+ Token semicolon = _expect(TokenType.SEMICOLON);
return new BreakStatement(breakKeyword, label, semicolon);
}
@@ -3509,21 +3619,21 @@
*
* @return the expression representing the cascaded method invocation
*/
- Expression parseCascadeSection() {
- Token period = expect(TokenType.PERIOD_PERIOD);
+ Expression _parseCascadeSection() {
+ Token period = _expect(TokenType.PERIOD_PERIOD);
Expression expression = null;
SimpleIdentifier functionName = null;
- if (matchesIdentifier()) {
+ if (_matchesIdentifier()) {
functionName = parseSimpleIdentifier();
} else if (identical(_currentToken.type, TokenType.OPEN_SQUARE_BRACKET)) {
Token leftBracket = andAdvance;
Expression index = parseExpression2();
- Token rightBracket = expect(TokenType.CLOSE_SQUARE_BRACKET);
+ Token rightBracket = _expect(TokenType.CLOSE_SQUARE_BRACKET);
expression = new IndexExpression.forCascade(period, leftBracket, index, rightBracket);
period = null;
} else {
- reportErrorForToken(ParserErrorCode.MISSING_IDENTIFIER, _currentToken, [_currentToken.lexeme]);
- functionName = createSyntheticIdentifier();
+ _reportErrorForToken(ParserErrorCode.MISSING_IDENTIFIER, _currentToken, [_currentToken.lexeme]);
+ functionName = _createSyntheticIdentifier();
}
if (identical(_currentToken.type, TokenType.OPEN_PAREN)) {
while (identical(_currentToken.type, TokenType.OPEN_PAREN)) {
@@ -3533,7 +3643,7 @@
functionName = null;
} else if (expression == null) {
// It should not be possible to get here.
- expression = new MethodInvocation(expression, period, createSyntheticIdentifier(), parseArgumentList());
+ expression = new MethodInvocation(expression, period, _createSyntheticIdentifier(), parseArgumentList());
} else {
expression = new FunctionExpressionInvocation(expression, parseArgumentList());
}
@@ -3545,7 +3655,7 @@
bool progress = true;
while (progress) {
progress = false;
- Expression selector = parseAssignableSelector(expression, true);
+ Expression selector = _parseAssignableSelector(expression, true);
if (selector != expression) {
expression = selector;
progress = true;
@@ -3561,7 +3671,7 @@
}
if (_currentToken.type.isAssignmentOperator) {
Token operator = andAdvance;
- ensureAssignable(expression);
+ _ensureAssignable(expression);
expression = new AssignmentExpression(expression, operator, parseExpressionWithoutCascade());
}
return expression;
@@ -3581,23 +3691,23 @@
* not given
* @return the class declaration that was parsed
*/
- CompilationUnitMember parseClassDeclaration(CommentAndMetadata commentAndMetadata, Token abstractKeyword) {
- Token keyword = expectKeyword(Keyword.CLASS);
- if (matchesIdentifier()) {
- Token next = peek();
- if (tokenMatches(next, TokenType.LT)) {
- next = skipTypeParameterList(next);
- if (next != null && tokenMatches(next, TokenType.EQ)) {
- return parseClassTypeAlias(commentAndMetadata, abstractKeyword, keyword);
+ CompilationUnitMember _parseClassDeclaration(CommentAndMetadata commentAndMetadata, Token abstractKeyword) {
+ Token keyword = _expectKeyword(Keyword.CLASS);
+ if (_matchesIdentifier()) {
+ Token next = _peek();
+ if (_tokenMatches(next, TokenType.LT)) {
+ next = _skipTypeParameterList(next);
+ if (next != null && _tokenMatches(next, TokenType.EQ)) {
+ return _parseClassTypeAlias(commentAndMetadata, abstractKeyword, keyword);
}
- } else if (tokenMatches(next, TokenType.EQ)) {
- return parseClassTypeAlias(commentAndMetadata, abstractKeyword, keyword);
+ } else if (_tokenMatches(next, TokenType.EQ)) {
+ return _parseClassTypeAlias(commentAndMetadata, abstractKeyword, keyword);
}
}
SimpleIdentifier name = parseSimpleIdentifier();
String className = name.name;
TypeParameterList typeParameters = null;
- if (matches(TokenType.LT)) {
+ if (_matches(TokenType.LT)) {
typeParameters = parseTypeParameterList();
}
//
@@ -3609,33 +3719,33 @@
ImplementsClause implementsClause = null;
bool foundClause = true;
while (foundClause) {
- if (matchesKeyword(Keyword.EXTENDS)) {
+ if (_matchesKeyword(Keyword.EXTENDS)) {
if (extendsClause == null) {
extendsClause = parseExtendsClause();
if (withClause != null) {
- reportErrorForToken(ParserErrorCode.WITH_BEFORE_EXTENDS, withClause.withKeyword, []);
+ _reportErrorForToken(ParserErrorCode.WITH_BEFORE_EXTENDS, withClause.withKeyword, []);
} else if (implementsClause != null) {
- reportErrorForToken(ParserErrorCode.IMPLEMENTS_BEFORE_EXTENDS, implementsClause.keyword, []);
+ _reportErrorForToken(ParserErrorCode.IMPLEMENTS_BEFORE_EXTENDS, implementsClause.keyword, []);
}
} else {
- reportErrorForToken(ParserErrorCode.MULTIPLE_EXTENDS_CLAUSES, extendsClause.keyword, []);
+ _reportErrorForToken(ParserErrorCode.MULTIPLE_EXTENDS_CLAUSES, extendsClause.keyword, []);
parseExtendsClause();
}
- } else if (matchesKeyword(Keyword.WITH)) {
+ } else if (_matchesKeyword(Keyword.WITH)) {
if (withClause == null) {
withClause = parseWithClause();
if (implementsClause != null) {
- reportErrorForToken(ParserErrorCode.IMPLEMENTS_BEFORE_WITH, implementsClause.keyword, []);
+ _reportErrorForToken(ParserErrorCode.IMPLEMENTS_BEFORE_WITH, implementsClause.keyword, []);
}
} else {
- reportErrorForToken(ParserErrorCode.MULTIPLE_WITH_CLAUSES, withClause.withKeyword, []);
+ _reportErrorForToken(ParserErrorCode.MULTIPLE_WITH_CLAUSES, withClause.withKeyword, []);
parseWithClause();
}
- } else if (matchesKeyword(Keyword.IMPLEMENTS)) {
+ } else if (_matchesKeyword(Keyword.IMPLEMENTS)) {
if (implementsClause == null) {
implementsClause = parseImplementsClause();
} else {
- reportErrorForToken(ParserErrorCode.MULTIPLE_IMPLEMENTS_CLAUSES, implementsClause.keyword, []);
+ _reportErrorForToken(ParserErrorCode.MULTIPLE_IMPLEMENTS_CLAUSES, implementsClause.keyword, []);
parseImplementsClause();
}
} else {
@@ -3643,14 +3753,14 @@
}
}
if (withClause != null && extendsClause == null) {
- reportErrorForToken(ParserErrorCode.WITH_WITHOUT_EXTENDS, withClause.withKeyword, []);
+ _reportErrorForToken(ParserErrorCode.WITH_WITHOUT_EXTENDS, withClause.withKeyword, []);
}
//
// Look for and skip over the extra-lingual 'native' specification.
//
NativeClause nativeClause = null;
- if (matchesString(_NATIVE) && tokenMatches(peek(), TokenType.STRING)) {
- nativeClause = parseNativeClause();
+ if (_matchesString(_NATIVE) && _tokenMatches(_peek(), TokenType.STRING)) {
+ nativeClause = _parseNativeClause();
}
//
// Parse the body of the class.
@@ -3658,14 +3768,14 @@
Token leftBracket = null;
List<ClassMember> members = null;
Token rightBracket = null;
- if (matches(TokenType.OPEN_CURLY_BRACKET)) {
- leftBracket = expect(TokenType.OPEN_CURLY_BRACKET);
- members = parseClassMembers(className, getEndToken(leftBracket));
- rightBracket = expect(TokenType.CLOSE_CURLY_BRACKET);
+ if (_matches(TokenType.OPEN_CURLY_BRACKET)) {
+ leftBracket = _expect(TokenType.OPEN_CURLY_BRACKET);
+ members = _parseClassMembers(className, _getEndToken(leftBracket));
+ rightBracket = _expect(TokenType.CLOSE_CURLY_BRACKET);
} else {
- leftBracket = createSyntheticToken(TokenType.OPEN_CURLY_BRACKET);
- rightBracket = createSyntheticToken(TokenType.CLOSE_CURLY_BRACKET);
- reportErrorForCurrentToken(ParserErrorCode.MISSING_CLASS_BODY, []);
+ leftBracket = _createSyntheticToken(TokenType.OPEN_CURLY_BRACKET);
+ rightBracket = _createSyntheticToken(TokenType.CLOSE_CURLY_BRACKET);
+ _reportErrorForCurrentToken(ParserErrorCode.MISSING_CLASS_BODY, []);
}
ClassDeclaration classDeclaration = new ClassDeclaration(commentAndMetadata.comment, commentAndMetadata.metadata, abstractKeyword, keyword, name, typeParameters, extendsClause, withClause, implementsClause, leftBracket, members, rightBracket);
classDeclaration.nativeClause = nativeClause;
@@ -3685,13 +3795,13 @@
* is missing
* @return the list of class members that were parsed
*/
- List<ClassMember> parseClassMembers(String className, Token closingBracket) {
+ List<ClassMember> _parseClassMembers(String className, Token closingBracket) {
List<ClassMember> members = new List<ClassMember>();
Token memberStart = _currentToken;
- while (!matches(TokenType.EOF) && !matches(TokenType.CLOSE_CURLY_BRACKET) && (closingBracket != null || (!matchesKeyword(Keyword.CLASS) && !matchesKeyword(Keyword.TYPEDEF)))) {
- if (matches(TokenType.SEMICOLON)) {
- reportErrorForToken(ParserErrorCode.UNEXPECTED_TOKEN, _currentToken, [_currentToken.lexeme]);
- advance();
+ while (!_matches(TokenType.EOF) && !_matches(TokenType.CLOSE_CURLY_BRACKET) && (closingBracket != null || (!_matchesKeyword(Keyword.CLASS) && !_matchesKeyword(Keyword.TYPEDEF)))) {
+ if (_matches(TokenType.SEMICOLON)) {
+ _reportErrorForToken(ParserErrorCode.UNEXPECTED_TOKEN, _currentToken, [_currentToken.lexeme]);
+ _advance();
} else {
ClassMember member = parseClassMember(className);
if (member != null) {
@@ -3699,8 +3809,8 @@
}
}
if (identical(_currentToken, memberStart)) {
- reportErrorForToken(ParserErrorCode.UNEXPECTED_TOKEN, _currentToken, [_currentToken.lexeme]);
- advance();
+ _reportErrorForToken(ParserErrorCode.UNEXPECTED_TOKEN, _currentToken, [_currentToken.lexeme]);
+ _advance();
}
memberStart = _currentToken;
}
@@ -3723,38 +3833,38 @@
* @param classKeyword the token representing the 'class' keyword
* @return the class type alias that was parsed
*/
- ClassTypeAlias parseClassTypeAlias(CommentAndMetadata commentAndMetadata, Token abstractKeyword, Token classKeyword) {
+ ClassTypeAlias _parseClassTypeAlias(CommentAndMetadata commentAndMetadata, Token abstractKeyword, Token classKeyword) {
SimpleIdentifier className = parseSimpleIdentifier();
TypeParameterList typeParameters = null;
- if (matches(TokenType.LT)) {
+ if (_matches(TokenType.LT)) {
typeParameters = parseTypeParameterList();
}
- Token equals = expect(TokenType.EQ);
- if (matchesKeyword(Keyword.ABSTRACT)) {
+ Token equals = _expect(TokenType.EQ);
+ if (_matchesKeyword(Keyword.ABSTRACT)) {
abstractKeyword = andAdvance;
}
TypeName superclass = parseTypeName();
WithClause withClause = null;
- if (matchesKeyword(Keyword.WITH)) {
+ if (_matchesKeyword(Keyword.WITH)) {
withClause = parseWithClause();
}
ImplementsClause implementsClause = null;
- if (matchesKeyword(Keyword.IMPLEMENTS)) {
+ if (_matchesKeyword(Keyword.IMPLEMENTS)) {
implementsClause = parseImplementsClause();
}
Token semicolon;
- if (matches(TokenType.SEMICOLON)) {
+ if (_matches(TokenType.SEMICOLON)) {
semicolon = andAdvance;
} else {
- if (matches(TokenType.OPEN_CURLY_BRACKET)) {
- reportErrorForCurrentToken(ParserErrorCode.EXPECTED_TOKEN, [TokenType.SEMICOLON.lexeme]);
+ if (_matches(TokenType.OPEN_CURLY_BRACKET)) {
+ _reportErrorForCurrentToken(ParserErrorCode.EXPECTED_TOKEN, [TokenType.SEMICOLON.lexeme]);
Token leftBracket = andAdvance;
- parseClassMembers(className.name, getEndToken(leftBracket));
- expect(TokenType.CLOSE_CURLY_BRACKET);
+ _parseClassMembers(className.name, _getEndToken(leftBracket));
+ _expect(TokenType.CLOSE_CURLY_BRACKET);
} else {
- reportErrorForToken(ParserErrorCode.EXPECTED_TOKEN, _currentToken.previous, [TokenType.SEMICOLON.lexeme]);
+ _reportErrorForToken(ParserErrorCode.EXPECTED_TOKEN, _currentToken.previous, [TokenType.SEMICOLON.lexeme]);
}
- semicolon = createSyntheticToken(TokenType.SEMICOLON);
+ semicolon = _createSyntheticToken(TokenType.SEMICOLON);
}
return new ClassTypeAlias(commentAndMetadata.comment, commentAndMetadata.metadata, classKeyword, className, typeParameters, equals, abstractKeyword, superclass, withClause, implementsClause, semicolon);
}
@@ -3770,15 +3880,15 @@
*
* @return the combinators that were parsed
*/
- List<Combinator> parseCombinators() {
+ List<Combinator> _parseCombinators() {
List<Combinator> combinators = new List<Combinator>();
- while (matchesString(_SHOW) || matchesString(_HIDE)) {
- Token keyword = expect(TokenType.IDENTIFIER);
+ while (_matchesString(_SHOW) || _matchesString(_HIDE)) {
+ Token keyword = _expect(TokenType.IDENTIFIER);
if (keyword.lexeme == _SHOW) {
- List<SimpleIdentifier> shownNames = parseIdentifierList();
+ List<SimpleIdentifier> shownNames = _parseIdentifierList();
combinators.add(new ShowCombinator(keyword, shownNames));
} else {
- List<SimpleIdentifier> hiddenNames = parseIdentifierList();
+ List<SimpleIdentifier> hiddenNames = _parseIdentifierList();
combinators.add(new HideCombinator(keyword, hiddenNames));
}
}
@@ -3797,12 +3907,12 @@
*
* @return the documentation comment and metadata that were parsed
*/
- CommentAndMetadata parseCommentAndMetadata() {
- Comment comment = parseDocumentationComment();
+ CommentAndMetadata _parseCommentAndMetadata() {
+ Comment comment = _parseDocumentationComment();
List<Annotation> metadata = new List<Annotation>();
- while (matches(TokenType.AT)) {
+ while (_matches(TokenType.AT)) {
metadata.add(parseAnnotation());
- Comment optionalComment = parseDocumentationComment();
+ Comment optionalComment = _parseDocumentationComment();
if (optionalComment != null) {
comment = optionalComment;
}
@@ -3823,7 +3933,7 @@
* @param sourceOffset the offset of the first character of the reference source
* @return the comment reference that was parsed, or `null` if no reference could be found
*/
- CommentReference parseCommentReference(String referenceSource, int sourceOffset) {
+ CommentReference _parseCommentReference(String referenceSource, int sourceOffset) {
// TODO(brianwilkerson) The errors are not getting the right offset/length and are being duplicated.
if (referenceSource.length == 0) {
Token syntheticToken = new SyntheticStringToken(TokenType.IDENTIFIER, "", sourceOffset);
@@ -3838,16 +3948,16 @@
return null;
}
Token newKeyword = null;
- if (tokenMatchesKeyword(firstToken, Keyword.NEW)) {
+ if (_tokenMatchesKeyword(firstToken, Keyword.NEW)) {
newKeyword = firstToken;
firstToken = firstToken.next;
}
- if (tokenMatchesIdentifier(firstToken)) {
+ if (_tokenMatchesIdentifier(firstToken)) {
Token secondToken = firstToken.next;
Token thirdToken = secondToken.next;
Token nextToken;
Identifier identifier;
- if (tokenMatches(secondToken, TokenType.PERIOD) && tokenMatchesIdentifier(thirdToken)) {
+ if (_tokenMatches(secondToken, TokenType.PERIOD) && _tokenMatchesIdentifier(thirdToken)) {
identifier = new PrefixedIdentifier(new SimpleIdentifier(firstToken), secondToken, new SimpleIdentifier(thirdToken));
nextToken = thirdToken.next;
} else {
@@ -3858,7 +3968,7 @@
return null;
}
return new CommentReference(newKeyword, identifier);
- } else if (tokenMatchesKeyword(firstToken, Keyword.THIS) || tokenMatchesKeyword(firstToken, Keyword.NULL) || tokenMatchesKeyword(firstToken, Keyword.TRUE) || tokenMatchesKeyword(firstToken, Keyword.FALSE)) {
+ } else if (_tokenMatchesKeyword(firstToken, Keyword.THIS) || _tokenMatchesKeyword(firstToken, Keyword.NULL) || _tokenMatchesKeyword(firstToken, Keyword.TRUE) || _tokenMatchesKeyword(firstToken, Keyword.FALSE)) {
// TODO(brianwilkerson) If we want to support this we will need to extend the definition
// of CommentReference to take an expression rather than an identifier. For now we just
// ignore it to reduce the number of errors produced, but that's probably not a valid
@@ -3884,24 +3994,24 @@
* @param tokens the comment tokens representing the documentation comments to be parsed
* @return the comment references that were parsed
*/
- List<CommentReference> parseCommentReferences(List<Token> tokens) {
+ List<CommentReference> _parseCommentReferences(List<Token> tokens) {
List<CommentReference> references = new List<CommentReference>();
for (Token token in tokens) {
String comment = token.lexeme;
int length = comment.length;
- List<List<int>> codeBlockRanges = getCodeBlockRanges(comment);
+ List<List<int>> codeBlockRanges = _getCodeBlockRanges(comment);
int leftIndex = comment.indexOf('[');
while (leftIndex >= 0 && leftIndex + 1 < length) {
- List<int> range = findRange(codeBlockRanges, leftIndex);
+ List<int> range = _findRange(codeBlockRanges, leftIndex);
if (range == null) {
int nameOffset = token.offset + leftIndex + 1;
int rightIndex = JavaString.indexOf(comment, ']', leftIndex);
if (rightIndex >= 0) {
int firstChar = comment.codeUnitAt(leftIndex + 1);
if (firstChar != 0x27 && firstChar != 0x22) {
- if (isLinkText(comment, rightIndex)) {
+ if (_isLinkText(comment, rightIndex)) {
} else {
- CommentReference reference = parseCommentReference(comment.substring(leftIndex + 1, rightIndex), nameOffset);
+ CommentReference reference = _parseCommentReference(comment.substring(leftIndex + 1, rightIndex), nameOffset);
if (reference != null) {
references.add(reference);
}
@@ -3951,92 +4061,92 @@
* @return the compilation unit member that was parsed, or `null` if what was parsed could
* not be represented as a compilation unit member
*/
- CompilationUnitMember parseCompilationUnitMember(CommentAndMetadata commentAndMetadata) {
- Modifiers modifiers = parseModifiers();
- if (matchesKeyword(Keyword.CLASS)) {
- return parseClassDeclaration(commentAndMetadata, validateModifiersForClass(modifiers));
- } else if (matchesKeyword(Keyword.TYPEDEF) && !tokenMatches(peek(), TokenType.PERIOD) && !tokenMatches(peek(), TokenType.LT) && !tokenMatches(peek(), TokenType.OPEN_PAREN)) {
- validateModifiersForTypedef(modifiers);
- return parseTypeAlias(commentAndMetadata);
+ CompilationUnitMember _parseCompilationUnitMember(CommentAndMetadata commentAndMetadata) {
+ Modifiers modifiers = _parseModifiers();
+ if (_matchesKeyword(Keyword.CLASS)) {
+ return _parseClassDeclaration(commentAndMetadata, _validateModifiersForClass(modifiers));
+ } else if (_matchesKeyword(Keyword.TYPEDEF) && !_tokenMatches(_peek(), TokenType.PERIOD) && !_tokenMatches(_peek(), TokenType.LT) && !_tokenMatches(_peek(), TokenType.OPEN_PAREN)) {
+ _validateModifiersForTypedef(modifiers);
+ return _parseTypeAlias(commentAndMetadata);
}
- if (matchesKeyword(Keyword.VOID)) {
+ if (_matchesKeyword(Keyword.VOID)) {
TypeName returnType = parseReturnType();
- if ((matchesKeyword(Keyword.GET) || matchesKeyword(Keyword.SET)) && tokenMatchesIdentifier(peek())) {
- validateModifiersForTopLevelFunction(modifiers);
- return parseFunctionDeclaration(commentAndMetadata, modifiers.externalKeyword, returnType);
- } else if (matchesKeyword(Keyword.OPERATOR) && isOperator(peek())) {
- reportErrorForToken(ParserErrorCode.TOP_LEVEL_OPERATOR, _currentToken, []);
- return convertToFunctionDeclaration(parseOperator(commentAndMetadata, modifiers.externalKeyword, returnType));
- } else if (matchesIdentifier() && matchesAny(peek(), [
+ if ((_matchesKeyword(Keyword.GET) || _matchesKeyword(Keyword.SET)) && _tokenMatchesIdentifier(_peek())) {
+ _validateModifiersForTopLevelFunction(modifiers);
+ return _parseFunctionDeclaration(commentAndMetadata, modifiers.externalKeyword, returnType);
+ } else if (_matchesKeyword(Keyword.OPERATOR) && _isOperator(_peek())) {
+ _reportErrorForToken(ParserErrorCode.TOP_LEVEL_OPERATOR, _currentToken, []);
+ return _convertToFunctionDeclaration(_parseOperator(commentAndMetadata, modifiers.externalKeyword, returnType));
+ } else if (_matchesIdentifier() && _peek().matchesAny([
TokenType.OPEN_PAREN,
TokenType.OPEN_CURLY_BRACKET,
TokenType.FUNCTION])) {
- validateModifiersForTopLevelFunction(modifiers);
- return parseFunctionDeclaration(commentAndMetadata, modifiers.externalKeyword, returnType);
+ _validateModifiersForTopLevelFunction(modifiers);
+ return _parseFunctionDeclaration(commentAndMetadata, modifiers.externalKeyword, returnType);
} else {
//
// We have found an error of some kind. Try to recover.
//
- if (matchesIdentifier()) {
- if (matchesAny(peek(), [TokenType.EQ, TokenType.COMMA, TokenType.SEMICOLON])) {
+ if (_matchesIdentifier()) {
+ if (_peek().matchesAny([TokenType.EQ, TokenType.COMMA, TokenType.SEMICOLON])) {
//
// We appear to have a variable declaration with a type of "void".
//
- reportErrorForNode(ParserErrorCode.VOID_VARIABLE, returnType, []);
- return new TopLevelVariableDeclaration(commentAndMetadata.comment, commentAndMetadata.metadata, parseVariableDeclarationListAfterType(null, validateModifiersForTopLevelVariable(modifiers), null), expect(TokenType.SEMICOLON));
+ _reportErrorForNode(ParserErrorCode.VOID_VARIABLE, returnType, []);
+ return new TopLevelVariableDeclaration(commentAndMetadata.comment, commentAndMetadata.metadata, _parseVariableDeclarationListAfterType(null, _validateModifiersForTopLevelVariable(modifiers), null), _expect(TokenType.SEMICOLON));
}
}
- reportErrorForToken(ParserErrorCode.EXPECTED_EXECUTABLE, _currentToken, []);
+ _reportErrorForToken(ParserErrorCode.EXPECTED_EXECUTABLE, _currentToken, []);
return null;
}
- } else if ((matchesKeyword(Keyword.GET) || matchesKeyword(Keyword.SET)) && tokenMatchesIdentifier(peek())) {
- validateModifiersForTopLevelFunction(modifiers);
- return parseFunctionDeclaration(commentAndMetadata, modifiers.externalKeyword, null);
- } else if (matchesKeyword(Keyword.OPERATOR) && isOperator(peek())) {
- reportErrorForToken(ParserErrorCode.TOP_LEVEL_OPERATOR, _currentToken, []);
- return convertToFunctionDeclaration(parseOperator(commentAndMetadata, modifiers.externalKeyword, null));
- } else if (!matchesIdentifier()) {
- reportErrorForToken(ParserErrorCode.EXPECTED_EXECUTABLE, _currentToken, []);
+ } else if ((_matchesKeyword(Keyword.GET) || _matchesKeyword(Keyword.SET)) && _tokenMatchesIdentifier(_peek())) {
+ _validateModifiersForTopLevelFunction(modifiers);
+ return _parseFunctionDeclaration(commentAndMetadata, modifiers.externalKeyword, null);
+ } else if (_matchesKeyword(Keyword.OPERATOR) && _isOperator(_peek())) {
+ _reportErrorForToken(ParserErrorCode.TOP_LEVEL_OPERATOR, _currentToken, []);
+ return _convertToFunctionDeclaration(_parseOperator(commentAndMetadata, modifiers.externalKeyword, null));
+ } else if (!_matchesIdentifier()) {
+ _reportErrorForToken(ParserErrorCode.EXPECTED_EXECUTABLE, _currentToken, []);
return null;
- } else if (tokenMatches(peek(), TokenType.OPEN_PAREN)) {
- validateModifiersForTopLevelFunction(modifiers);
- return parseFunctionDeclaration(commentAndMetadata, modifiers.externalKeyword, null);
- } else if (matchesAny(peek(), [TokenType.EQ, TokenType.COMMA, TokenType.SEMICOLON])) {
+ } else if (_tokenMatches(_peek(), TokenType.OPEN_PAREN)) {
+ _validateModifiersForTopLevelFunction(modifiers);
+ return _parseFunctionDeclaration(commentAndMetadata, modifiers.externalKeyword, null);
+ } else if (_peek().matchesAny([TokenType.EQ, TokenType.COMMA, TokenType.SEMICOLON])) {
if (modifiers.constKeyword == null && modifiers.finalKeyword == null && modifiers.varKeyword == null) {
- reportErrorForCurrentToken(ParserErrorCode.MISSING_CONST_FINAL_VAR_OR_TYPE, []);
+ _reportErrorForCurrentToken(ParserErrorCode.MISSING_CONST_FINAL_VAR_OR_TYPE, []);
}
- return new TopLevelVariableDeclaration(commentAndMetadata.comment, commentAndMetadata.metadata, parseVariableDeclarationListAfterType(null, validateModifiersForTopLevelVariable(modifiers), null), expect(TokenType.SEMICOLON));
+ return new TopLevelVariableDeclaration(commentAndMetadata.comment, commentAndMetadata.metadata, _parseVariableDeclarationListAfterType(null, _validateModifiersForTopLevelVariable(modifiers), null), _expect(TokenType.SEMICOLON));
}
TypeName returnType = parseReturnType();
- if ((matchesKeyword(Keyword.GET) || matchesKeyword(Keyword.SET)) && tokenMatchesIdentifier(peek())) {
- validateModifiersForTopLevelFunction(modifiers);
- return parseFunctionDeclaration(commentAndMetadata, modifiers.externalKeyword, returnType);
- } else if (matchesKeyword(Keyword.OPERATOR) && isOperator(peek())) {
- reportErrorForToken(ParserErrorCode.TOP_LEVEL_OPERATOR, _currentToken, []);
- return convertToFunctionDeclaration(parseOperator(commentAndMetadata, modifiers.externalKeyword, returnType));
- } else if (matches(TokenType.AT)) {
- return new TopLevelVariableDeclaration(commentAndMetadata.comment, commentAndMetadata.metadata, parseVariableDeclarationListAfterType(null, validateModifiersForTopLevelVariable(modifiers), returnType), expect(TokenType.SEMICOLON));
- } else if (!matchesIdentifier()) {
+ if ((_matchesKeyword(Keyword.GET) || _matchesKeyword(Keyword.SET)) && _tokenMatchesIdentifier(_peek())) {
+ _validateModifiersForTopLevelFunction(modifiers);
+ return _parseFunctionDeclaration(commentAndMetadata, modifiers.externalKeyword, returnType);
+ } else if (_matchesKeyword(Keyword.OPERATOR) && _isOperator(_peek())) {
+ _reportErrorForToken(ParserErrorCode.TOP_LEVEL_OPERATOR, _currentToken, []);
+ return _convertToFunctionDeclaration(_parseOperator(commentAndMetadata, modifiers.externalKeyword, returnType));
+ } else if (_matches(TokenType.AT)) {
+ return new TopLevelVariableDeclaration(commentAndMetadata.comment, commentAndMetadata.metadata, _parseVariableDeclarationListAfterType(null, _validateModifiersForTopLevelVariable(modifiers), returnType), _expect(TokenType.SEMICOLON));
+ } else if (!_matchesIdentifier()) {
// TODO(brianwilkerson) Generalize this error. We could also be parsing a top-level variable at this point.
- reportErrorForToken(ParserErrorCode.EXPECTED_EXECUTABLE, _currentToken, []);
+ _reportErrorForToken(ParserErrorCode.EXPECTED_EXECUTABLE, _currentToken, []);
Token semicolon;
- if (matches(TokenType.SEMICOLON)) {
+ if (_matches(TokenType.SEMICOLON)) {
semicolon = andAdvance;
} else {
- semicolon = createSyntheticToken(TokenType.SEMICOLON);
+ semicolon = _createSyntheticToken(TokenType.SEMICOLON);
}
List<VariableDeclaration> variables = new List<VariableDeclaration>();
- variables.add(new VariableDeclaration(null, null, createSyntheticIdentifier(), null, null));
+ variables.add(new VariableDeclaration(null, null, _createSyntheticIdentifier(), null, null));
return new TopLevelVariableDeclaration(commentAndMetadata.comment, commentAndMetadata.metadata, new VariableDeclarationList(null, null, null, returnType, variables), semicolon);
}
- if (matchesAny(peek(), [
+ if (_peek().matchesAny([
TokenType.OPEN_PAREN,
TokenType.FUNCTION,
TokenType.OPEN_CURLY_BRACKET])) {
- validateModifiersForTopLevelFunction(modifiers);
- return parseFunctionDeclaration(commentAndMetadata, modifiers.externalKeyword, returnType);
+ _validateModifiersForTopLevelFunction(modifiers);
+ return _parseFunctionDeclaration(commentAndMetadata, modifiers.externalKeyword, returnType);
}
- return new TopLevelVariableDeclaration(commentAndMetadata.comment, commentAndMetadata.metadata, parseVariableDeclarationListAfterType(null, validateModifiersForTopLevelVariable(modifiers), returnType), expect(TokenType.SEMICOLON));
+ return new TopLevelVariableDeclaration(commentAndMetadata.comment, commentAndMetadata.metadata, _parseVariableDeclarationListAfterType(null, _validateModifiersForTopLevelVariable(modifiers), returnType), _expect(TokenType.SEMICOLON));
}
/**
@@ -4051,65 +4161,65 @@
*
* @return the const expression that was parsed
*/
- Expression parseConstExpression() {
- Token keyword = expectKeyword(Keyword.CONST);
- if (matches(TokenType.OPEN_SQUARE_BRACKET) || matches(TokenType.INDEX)) {
- return parseListLiteral(keyword, null);
- } else if (matches(TokenType.OPEN_CURLY_BRACKET)) {
- return parseMapLiteral(keyword, null);
- } else if (matches(TokenType.LT)) {
- return parseListOrMapLiteral(keyword);
+ Expression _parseConstExpression() {
+ Token keyword = _expectKeyword(Keyword.CONST);
+ if (_matches(TokenType.OPEN_SQUARE_BRACKET) || _matches(TokenType.INDEX)) {
+ return _parseListLiteral(keyword, null);
+ } else if (_matches(TokenType.OPEN_CURLY_BRACKET)) {
+ return _parseMapLiteral(keyword, null);
+ } else if (_matches(TokenType.LT)) {
+ return _parseListOrMapLiteral(keyword);
}
- return parseInstanceCreationExpression(keyword);
+ return _parseInstanceCreationExpression(keyword);
}
- ConstructorDeclaration parseConstructor(CommentAndMetadata commentAndMetadata, Token externalKeyword, Token constKeyword, Token factoryKeyword, SimpleIdentifier returnType, Token period, SimpleIdentifier name, FormalParameterList parameters) {
+ ConstructorDeclaration _parseConstructor(CommentAndMetadata commentAndMetadata, Token externalKeyword, Token constKeyword, Token factoryKeyword, SimpleIdentifier returnType, Token period, SimpleIdentifier name, FormalParameterList parameters) {
bool bodyAllowed = externalKeyword == null;
Token separator = null;
List<ConstructorInitializer> initializers = null;
- if (matches(TokenType.COLON)) {
+ if (_matches(TokenType.COLON)) {
separator = andAdvance;
initializers = new List<ConstructorInitializer>();
do {
- if (matchesKeyword(Keyword.THIS)) {
- if (tokenMatches(peek(), TokenType.OPEN_PAREN)) {
+ if (_matchesKeyword(Keyword.THIS)) {
+ if (_tokenMatches(_peek(), TokenType.OPEN_PAREN)) {
bodyAllowed = false;
- initializers.add(parseRedirectingConstructorInvocation());
- } else if (tokenMatches(peek(), TokenType.PERIOD) && tokenMatches(peekAt(3), TokenType.OPEN_PAREN)) {
+ initializers.add(_parseRedirectingConstructorInvocation());
+ } else if (_tokenMatches(_peek(), TokenType.PERIOD) && _tokenMatches(_peekAt(3), TokenType.OPEN_PAREN)) {
bodyAllowed = false;
- initializers.add(parseRedirectingConstructorInvocation());
+ initializers.add(_parseRedirectingConstructorInvocation());
} else {
- initializers.add(parseConstructorFieldInitializer());
+ initializers.add(_parseConstructorFieldInitializer());
}
- } else if (matchesKeyword(Keyword.SUPER)) {
- initializers.add(parseSuperConstructorInvocation());
+ } else if (_matchesKeyword(Keyword.SUPER)) {
+ initializers.add(_parseSuperConstructorInvocation());
} else {
- initializers.add(parseConstructorFieldInitializer());
+ initializers.add(_parseConstructorFieldInitializer());
}
- } while (optional(TokenType.COMMA));
+ } while (_optional(TokenType.COMMA));
}
ConstructorName redirectedConstructor = null;
FunctionBody body;
- if (matches(TokenType.EQ)) {
+ if (_matches(TokenType.EQ)) {
separator = andAdvance;
redirectedConstructor = parseConstructorName();
- body = new EmptyFunctionBody(expect(TokenType.SEMICOLON));
+ body = new EmptyFunctionBody(_expect(TokenType.SEMICOLON));
if (factoryKeyword == null) {
- reportErrorForNode(ParserErrorCode.REDIRECTION_IN_NON_FACTORY_CONSTRUCTOR, redirectedConstructor, []);
+ _reportErrorForNode(ParserErrorCode.REDIRECTION_IN_NON_FACTORY_CONSTRUCTOR, redirectedConstructor, []);
}
} else {
- body = parseFunctionBody(true, ParserErrorCode.MISSING_FUNCTION_BODY, false);
+ body = _parseFunctionBody(true, ParserErrorCode.MISSING_FUNCTION_BODY, false);
if (constKeyword != null && factoryKeyword != null && externalKeyword == null) {
- reportErrorForToken(ParserErrorCode.CONST_FACTORY, factoryKeyword, []);
+ _reportErrorForToken(ParserErrorCode.CONST_FACTORY, factoryKeyword, []);
} else if (body is EmptyFunctionBody) {
if (factoryKeyword != null && externalKeyword == null) {
- reportErrorForToken(ParserErrorCode.FACTORY_WITHOUT_BODY, factoryKeyword, []);
+ _reportErrorForToken(ParserErrorCode.FACTORY_WITHOUT_BODY, factoryKeyword, []);
}
} else {
if (constKeyword != null) {
- reportErrorForNode(ParserErrorCode.CONST_CONSTRUCTOR_WITH_BODY, body, []);
+ _reportErrorForNode(ParserErrorCode.CONST_CONSTRUCTOR_WITH_BODY, body, []);
} else if (!bodyAllowed) {
- reportErrorForNode(ParserErrorCode.EXTERNAL_CONSTRUCTOR_WITH_BODY, body, []);
+ _reportErrorForNode(ParserErrorCode.EXTERNAL_CONSTRUCTOR_WITH_BODY, body, []);
}
}
}
@@ -4126,21 +4236,21 @@
*
* @return the field initializer that was parsed
*/
- ConstructorFieldInitializer parseConstructorFieldInitializer() {
+ ConstructorFieldInitializer _parseConstructorFieldInitializer() {
Token keyword = null;
Token period = null;
- if (matchesKeyword(Keyword.THIS)) {
+ if (_matchesKeyword(Keyword.THIS)) {
keyword = andAdvance;
- period = expect(TokenType.PERIOD);
+ period = _expect(TokenType.PERIOD);
}
SimpleIdentifier fieldName = parseSimpleIdentifier();
- Token equals = expect(TokenType.EQ);
+ Token equals = _expect(TokenType.EQ);
Expression expression = parseConditionalExpression();
TokenType tokenType = _currentToken.type;
if (identical(tokenType, TokenType.PERIOD_PERIOD)) {
List<Expression> cascadeSections = new List<Expression>();
while (identical(tokenType, TokenType.PERIOD_PERIOD)) {
- Expression section = parseCascadeSection();
+ Expression section = _parseCascadeSection();
if (section != null) {
cascadeSections.add(section);
}
@@ -4161,19 +4271,19 @@
*
* @return the continue statement that was parsed
*/
- Statement parseContinueStatement() {
- Token continueKeyword = expectKeyword(Keyword.CONTINUE);
+ Statement _parseContinueStatement() {
+ Token continueKeyword = _expectKeyword(Keyword.CONTINUE);
if (!_inLoop && !_inSwitch) {
- reportErrorForToken(ParserErrorCode.CONTINUE_OUTSIDE_OF_LOOP, continueKeyword, []);
+ _reportErrorForToken(ParserErrorCode.CONTINUE_OUTSIDE_OF_LOOP, continueKeyword, []);
}
SimpleIdentifier label = null;
- if (matchesIdentifier()) {
+ if (_matchesIdentifier()) {
label = parseSimpleIdentifier();
}
if (_inSwitch && !_inLoop && label == null) {
- reportErrorForToken(ParserErrorCode.CONTINUE_WITHOUT_LABEL_IN_CASE, continueKeyword, []);
+ _reportErrorForToken(ParserErrorCode.CONTINUE_WITHOUT_LABEL_IN_CASE, continueKeyword, []);
}
- Token semicolon = expect(TokenType.SEMICOLON);
+ Token semicolon = _expect(TokenType.SEMICOLON);
return new ContinueStatement(continueKeyword, label, semicolon);
}
@@ -4191,15 +4301,15 @@
* @param commentAndMetadata the metadata to be associated with the directive
* @return the directive that was parsed
*/
- Directive parseDirective(CommentAndMetadata commentAndMetadata) {
- if (matchesKeyword(Keyword.IMPORT)) {
- return parseImportDirective(commentAndMetadata);
- } else if (matchesKeyword(Keyword.EXPORT)) {
- return parseExportDirective(commentAndMetadata);
- } else if (matchesKeyword(Keyword.LIBRARY)) {
- return parseLibraryDirective(commentAndMetadata);
- } else if (matchesKeyword(Keyword.PART)) {
- return parsePartDirective(commentAndMetadata);
+ Directive _parseDirective(CommentAndMetadata commentAndMetadata) {
+ if (_matchesKeyword(Keyword.IMPORT)) {
+ return _parseImportDirective(commentAndMetadata);
+ } else if (_matchesKeyword(Keyword.EXPORT)) {
+ return _parseExportDirective(commentAndMetadata);
+ } else if (_matchesKeyword(Keyword.LIBRARY)) {
+ return _parseLibraryDirective(commentAndMetadata);
+ } else if (_matchesKeyword(Keyword.PART)) {
+ return _parsePartDirective(commentAndMetadata);
} else {
// Internal error: this method should not have been invoked if the current token was something
// other than one of the above.
@@ -4218,7 +4328,7 @@
*
* @return the documentation comment that was parsed, or `null` if there was no comment
*/
- Comment parseDocumentationComment() {
+ Comment _parseDocumentationComment() {
List<Token> commentTokens = new List<Token>();
Token commentToken = _currentToken.precedingComments;
while (commentToken != null) {
@@ -4241,7 +4351,7 @@
return null;
}
List<Token> tokens = new List.from(commentTokens);
- List<CommentReference> references = parseCommentReferences(tokens);
+ List<CommentReference> references = _parseCommentReferences(tokens);
return Comment.createDocumentationCommentWithReferences(tokens, references);
}
@@ -4255,17 +4365,17 @@
*
* @return the do statement that was parsed
*/
- Statement parseDoStatement() {
+ Statement _parseDoStatement() {
bool wasInLoop = _inLoop;
_inLoop = true;
try {
- Token doKeyword = expectKeyword(Keyword.DO);
+ Token doKeyword = _expectKeyword(Keyword.DO);
Statement body = parseStatement2();
- Token whileKeyword = expectKeyword(Keyword.WHILE);
- Token leftParenthesis = expect(TokenType.OPEN_PAREN);
+ Token whileKeyword = _expectKeyword(Keyword.WHILE);
+ Token leftParenthesis = _expect(TokenType.OPEN_PAREN);
Expression condition = parseExpression2();
- Token rightParenthesis = expect(TokenType.CLOSE_PAREN);
- Token semicolon = expect(TokenType.SEMICOLON);
+ Token rightParenthesis = _expect(TokenType.CLOSE_PAREN);
+ Token semicolon = _expect(TokenType.SEMICOLON);
return new DoStatement(doKeyword, body, whileKeyword, leftParenthesis, condition, rightParenthesis, semicolon);
} finally {
_inLoop = wasInLoop;
@@ -4282,7 +4392,7 @@
*
* @return the empty statement that was parsed
*/
- Statement parseEmptyStatement() => new EmptyStatement(andAdvance);
+ Statement _parseEmptyStatement() => new EmptyStatement(andAdvance);
/**
* Parse an equality expression.
@@ -4295,20 +4405,20 @@
*
* @return the equality expression that was parsed
*/
- Expression parseEqualityExpression() {
+ Expression _parseEqualityExpression() {
Expression expression;
- if (matchesKeyword(Keyword.SUPER) && _currentToken.next.type.isEqualityOperator) {
+ if (_matchesKeyword(Keyword.SUPER) && _currentToken.next.type.isEqualityOperator) {
expression = new SuperExpression(andAdvance);
} else {
- expression = parseRelationalExpression();
+ expression = _parseRelationalExpression();
}
bool leftEqualityExpression = false;
while (_currentToken.type.isEqualityOperator) {
Token operator = andAdvance;
if (leftEqualityExpression) {
- reportErrorForNode(ParserErrorCode.EQUALITY_CANNOT_BE_EQUALITY_OPERAND, expression, []);
+ _reportErrorForNode(ParserErrorCode.EQUALITY_CANNOT_BE_EQUALITY_OPERAND, expression, []);
}
- expression = new BinaryExpression(expression, operator, parseRelationalExpression());
+ expression = new BinaryExpression(expression, operator, _parseRelationalExpression());
leftEqualityExpression = true;
}
return expression;
@@ -4325,11 +4435,11 @@
* @param commentAndMetadata the metadata to be associated with the directive
* @return the export directive that was parsed
*/
- ExportDirective parseExportDirective(CommentAndMetadata commentAndMetadata) {
- Token exportKeyword = expectKeyword(Keyword.EXPORT);
+ ExportDirective _parseExportDirective(CommentAndMetadata commentAndMetadata) {
+ Token exportKeyword = _expectKeyword(Keyword.EXPORT);
StringLiteral libraryUri = parseStringLiteral();
- List<Combinator> combinators = parseCombinators();
- Token semicolon = expectSemicolon();
+ List<Combinator> combinators = _parseCombinators();
+ Token semicolon = _expectSemicolon();
return new ExportDirective(commentAndMetadata.comment, commentAndMetadata.metadata, exportKeyword, libraryUri, combinators, semicolon);
}
@@ -4343,10 +4453,10 @@
*
* @return the expression that was parsed
*/
- List<Expression> parseExpressionList() {
+ List<Expression> _parseExpressionList() {
List<Expression> expressions = new List<Expression>();
expressions.add(parseExpression2());
- while (optional(TokenType.COMMA)) {
+ while (_optional(TokenType.COMMA)) {
expressions.add(parseExpression2());
}
return expressions;
@@ -4366,21 +4476,21 @@
* @param optional `true` if the keyword and type are optional
* @return the 'final', 'const', 'var' or type that was parsed
*/
- FinalConstVarOrType parseFinalConstVarOrType(bool optional) {
+ FinalConstVarOrType _parseFinalConstVarOrType(bool optional) {
Token keyword = null;
TypeName type = null;
- if (matchesKeyword(Keyword.FINAL) || matchesKeyword(Keyword.CONST)) {
+ if (_matchesKeyword(Keyword.FINAL) || _matchesKeyword(Keyword.CONST)) {
keyword = andAdvance;
- if (isTypedIdentifier(_currentToken)) {
+ if (_isTypedIdentifier(_currentToken)) {
type = parseTypeName();
}
- } else if (matchesKeyword(Keyword.VAR)) {
+ } else if (_matchesKeyword(Keyword.VAR)) {
keyword = andAdvance;
} else {
- if (isTypedIdentifier(_currentToken)) {
+ if (_isTypedIdentifier(_currentToken)) {
type = parseReturnType();
} else if (!optional) {
- reportErrorForCurrentToken(ParserErrorCode.MISSING_CONST_FINAL_VAR_OR_TYPE, []);
+ _reportErrorForCurrentToken(ParserErrorCode.MISSING_CONST_FINAL_VAR_OR_TYPE, []);
}
}
return new FinalConstVarOrType(keyword, type);
@@ -4402,24 +4512,24 @@
* delimiters
* @return the formal parameter that was parsed
*/
- FormalParameter parseFormalParameter(ParameterKind kind) {
+ FormalParameter _parseFormalParameter(ParameterKind kind) {
NormalFormalParameter parameter = parseNormalFormalParameter();
- if (matches(TokenType.EQ)) {
+ if (_matches(TokenType.EQ)) {
Token seperator = andAdvance;
Expression defaultValue = parseExpression2();
if (identical(kind, ParameterKind.NAMED)) {
- reportErrorForToken(ParserErrorCode.WRONG_SEPARATOR_FOR_NAMED_PARAMETER, seperator, []);
+ _reportErrorForToken(ParserErrorCode.WRONG_SEPARATOR_FOR_NAMED_PARAMETER, seperator, []);
} else if (identical(kind, ParameterKind.REQUIRED)) {
- reportErrorForNode(ParserErrorCode.POSITIONAL_PARAMETER_OUTSIDE_GROUP, parameter, []);
+ _reportErrorForNode(ParserErrorCode.POSITIONAL_PARAMETER_OUTSIDE_GROUP, parameter, []);
}
return new DefaultFormalParameter(parameter, kind, seperator, defaultValue);
- } else if (matches(TokenType.COLON)) {
+ } else if (_matches(TokenType.COLON)) {
Token seperator = andAdvance;
Expression defaultValue = parseExpression2();
if (identical(kind, ParameterKind.POSITIONAL)) {
- reportErrorForToken(ParserErrorCode.WRONG_SEPARATOR_FOR_POSITIONAL_PARAMETER, seperator, []);
+ _reportErrorForToken(ParserErrorCode.WRONG_SEPARATOR_FOR_POSITIONAL_PARAMETER, seperator, []);
} else if (identical(kind, ParameterKind.REQUIRED)) {
- reportErrorForNode(ParserErrorCode.NAMED_PARAMETER_OUTSIDE_GROUP, parameter, []);
+ _reportErrorForNode(ParserErrorCode.NAMED_PARAMETER_OUTSIDE_GROUP, parameter, []);
}
return new DefaultFormalParameter(parameter, kind, seperator, defaultValue);
} else if (kind != ParameterKind.REQUIRED) {
@@ -4447,40 +4557,40 @@
*
* @return the for statement that was parsed
*/
- Statement parseForStatement() {
+ Statement _parseForStatement() {
bool wasInLoop = _inLoop;
_inLoop = true;
try {
- Token forKeyword = expectKeyword(Keyword.FOR);
- Token leftParenthesis = expect(TokenType.OPEN_PAREN);
+ Token forKeyword = _expectKeyword(Keyword.FOR);
+ Token leftParenthesis = _expect(TokenType.OPEN_PAREN);
VariableDeclarationList variableList = null;
Expression initialization = null;
- if (!matches(TokenType.SEMICOLON)) {
- CommentAndMetadata commentAndMetadata = parseCommentAndMetadata();
- if (matchesIdentifier() && tokenMatchesKeyword(peek(), Keyword.IN)) {
+ if (!_matches(TokenType.SEMICOLON)) {
+ CommentAndMetadata commentAndMetadata = _parseCommentAndMetadata();
+ if (_matchesIdentifier() && _tokenMatchesKeyword(_peek(), Keyword.IN)) {
List<VariableDeclaration> variables = new List<VariableDeclaration>();
SimpleIdentifier variableName = parseSimpleIdentifier();
variables.add(new VariableDeclaration(null, null, variableName, null, null));
variableList = new VariableDeclarationList(commentAndMetadata.comment, commentAndMetadata.metadata, null, null, variables);
- } else if (isInitializedVariableDeclaration()) {
- variableList = parseVariableDeclarationListAfterMetadata(commentAndMetadata);
+ } else if (_isInitializedVariableDeclaration()) {
+ variableList = _parseVariableDeclarationListAfterMetadata(commentAndMetadata);
} else {
initialization = parseExpression2();
}
- if (matchesKeyword(Keyword.IN)) {
+ if (_matchesKeyword(Keyword.IN)) {
DeclaredIdentifier loopVariable = null;
SimpleIdentifier identifier = null;
if (variableList == null) {
// We found: <expression> 'in'
- reportErrorForCurrentToken(ParserErrorCode.MISSING_VARIABLE_IN_FOR_EACH, []);
+ _reportErrorForCurrentToken(ParserErrorCode.MISSING_VARIABLE_IN_FOR_EACH, []);
} else {
NodeList<VariableDeclaration> variables = variableList.variables;
if (variables.length > 1) {
- reportErrorForCurrentToken(ParserErrorCode.MULTIPLE_VARIABLES_IN_FOR_EACH, [variables.length.toString()]);
+ _reportErrorForCurrentToken(ParserErrorCode.MULTIPLE_VARIABLES_IN_FOR_EACH, [variables.length.toString()]);
}
VariableDeclaration variable = variables[0];
if (variable.initializer != null) {
- reportErrorForCurrentToken(ParserErrorCode.INITIALIZED_VARIABLE_IN_FOR_EACH, []);
+ _reportErrorForCurrentToken(ParserErrorCode.INITIALIZED_VARIABLE_IN_FOR_EACH, []);
}
Token keyword = variableList.keyword;
TypeName type = variableList.type;
@@ -4492,9 +4602,9 @@
identifier = variable.name;
}
}
- Token inKeyword = expectKeyword(Keyword.IN);
+ Token inKeyword = _expectKeyword(Keyword.IN);
Expression iterator = parseExpression2();
- Token rightParenthesis = expect(TokenType.CLOSE_PAREN);
+ Token rightParenthesis = _expect(TokenType.CLOSE_PAREN);
Statement body = parseStatement2();
if (loopVariable == null) {
return new ForEachStatement.con2(forKeyword, leftParenthesis, identifier, inKeyword, iterator, rightParenthesis, body);
@@ -4502,17 +4612,17 @@
return new ForEachStatement.con1(forKeyword, leftParenthesis, loopVariable, inKeyword, iterator, rightParenthesis, body);
}
}
- Token leftSeparator = expect(TokenType.SEMICOLON);
+ Token leftSeparator = _expect(TokenType.SEMICOLON);
Expression condition = null;
- if (!matches(TokenType.SEMICOLON)) {
+ if (!_matches(TokenType.SEMICOLON)) {
condition = parseExpression2();
}
- Token rightSeparator = expect(TokenType.SEMICOLON);
+ Token rightSeparator = _expect(TokenType.SEMICOLON);
List<Expression> updaters = null;
- if (!matches(TokenType.CLOSE_PAREN)) {
- updaters = parseExpressionList();
+ if (!_matches(TokenType.CLOSE_PAREN)) {
+ updaters = _parseExpressionList();
}
- Token rightParenthesis = expect(TokenType.CLOSE_PAREN);
+ Token rightParenthesis = _expect(TokenType.CLOSE_PAREN);
Statement body = parseStatement2();
return new ForStatement(forKeyword, leftParenthesis, variableList, initialization, leftSeparator, condition, rightSeparator, updaters, rightParenthesis, body);
} finally {
@@ -4539,45 +4649,45 @@
* and therefore does not have a terminating semicolon
* @return the function body that was parsed
*/
- FunctionBody parseFunctionBody(bool mayBeEmpty, ParserErrorCode emptyErrorCode, bool inExpression) {
+ FunctionBody _parseFunctionBody(bool mayBeEmpty, ParserErrorCode emptyErrorCode, bool inExpression) {
bool wasInLoop = _inLoop;
bool wasInSwitch = _inSwitch;
_inLoop = false;
_inSwitch = false;
try {
- if (matches(TokenType.SEMICOLON)) {
+ if (_matches(TokenType.SEMICOLON)) {
if (!mayBeEmpty) {
- reportErrorForCurrentToken(emptyErrorCode, []);
+ _reportErrorForCurrentToken(emptyErrorCode, []);
}
return new EmptyFunctionBody(andAdvance);
- } else if (matches(TokenType.FUNCTION)) {
+ } else if (_matches(TokenType.FUNCTION)) {
Token functionDefinition = andAdvance;
Expression expression = parseExpression2();
Token semicolon = null;
if (!inExpression) {
- semicolon = expect(TokenType.SEMICOLON);
+ semicolon = _expect(TokenType.SEMICOLON);
}
if (!_parseFunctionBodies) {
- return new EmptyFunctionBody(createSyntheticToken(TokenType.SEMICOLON));
+ return new EmptyFunctionBody(_createSyntheticToken(TokenType.SEMICOLON));
}
return new ExpressionFunctionBody(functionDefinition, expression, semicolon);
- } else if (matches(TokenType.OPEN_CURLY_BRACKET)) {
+ } else if (_matches(TokenType.OPEN_CURLY_BRACKET)) {
if (!_parseFunctionBodies) {
- skipBlock();
- return new EmptyFunctionBody(createSyntheticToken(TokenType.SEMICOLON));
+ _skipBlock();
+ return new EmptyFunctionBody(_createSyntheticToken(TokenType.SEMICOLON));
}
return new BlockFunctionBody(parseBlock());
- } else if (matchesString(_NATIVE)) {
+ } else if (_matchesString(_NATIVE)) {
Token nativeToken = andAdvance;
StringLiteral stringLiteral = null;
- if (matches(TokenType.STRING)) {
+ if (_matches(TokenType.STRING)) {
stringLiteral = parseStringLiteral();
}
- return new NativeFunctionBody(nativeToken, stringLiteral, expect(TokenType.SEMICOLON));
+ return new NativeFunctionBody(nativeToken, stringLiteral, _expect(TokenType.SEMICOLON));
} else {
// Invalid function body
- reportErrorForCurrentToken(emptyErrorCode, []);
- return new EmptyFunctionBody(createSyntheticToken(TokenType.SEMICOLON));
+ _reportErrorForCurrentToken(emptyErrorCode, []);
+ return new EmptyFunctionBody(_createSyntheticToken(TokenType.SEMICOLON));
}
} finally {
_inLoop = wasInLoop;
@@ -4601,33 +4711,33 @@
* @param isStatement `true` if the function declaration is being parsed as a statement
* @return the function declaration that was parsed
*/
- FunctionDeclaration parseFunctionDeclaration(CommentAndMetadata commentAndMetadata, Token externalKeyword, TypeName returnType) {
+ FunctionDeclaration _parseFunctionDeclaration(CommentAndMetadata commentAndMetadata, Token externalKeyword, TypeName returnType) {
Token keyword = null;
bool isGetter = false;
- if (matchesKeyword(Keyword.GET) && !tokenMatches(peek(), TokenType.OPEN_PAREN)) {
+ if (_matchesKeyword(Keyword.GET) && !_tokenMatches(_peek(), TokenType.OPEN_PAREN)) {
keyword = andAdvance;
isGetter = true;
- } else if (matchesKeyword(Keyword.SET) && !tokenMatches(peek(), TokenType.OPEN_PAREN)) {
+ } else if (_matchesKeyword(Keyword.SET) && !_tokenMatches(_peek(), TokenType.OPEN_PAREN)) {
keyword = andAdvance;
}
SimpleIdentifier name = parseSimpleIdentifier();
FormalParameterList parameters = null;
if (!isGetter) {
- if (matches(TokenType.OPEN_PAREN)) {
+ if (_matches(TokenType.OPEN_PAREN)) {
parameters = parseFormalParameterList();
- validateFormalParameterList(parameters);
+ _validateFormalParameterList(parameters);
} else {
- reportErrorForCurrentToken(ParserErrorCode.MISSING_FUNCTION_PARAMETERS, []);
+ _reportErrorForCurrentToken(ParserErrorCode.MISSING_FUNCTION_PARAMETERS, []);
}
- } else if (matches(TokenType.OPEN_PAREN)) {
- reportErrorForCurrentToken(ParserErrorCode.GETTER_WITH_PARAMETERS, []);
+ } else if (_matches(TokenType.OPEN_PAREN)) {
+ _reportErrorForCurrentToken(ParserErrorCode.GETTER_WITH_PARAMETERS, []);
parseFormalParameterList();
}
FunctionBody body;
if (externalKeyword == null) {
- body = parseFunctionBody(false, ParserErrorCode.MISSING_FUNCTION_BODY, false);
+ body = _parseFunctionBody(false, ParserErrorCode.MISSING_FUNCTION_BODY, false);
} else {
- body = new EmptyFunctionBody(expect(TokenType.SEMICOLON));
+ body = new EmptyFunctionBody(_expect(TokenType.SEMICOLON));
}
// if (!isStatement && matches(TokenType.SEMICOLON)) {
// // TODO(brianwilkerson) Improve this error message.
@@ -4647,10 +4757,10 @@
*
* @return the function declaration statement that was parsed
*/
- Statement parseFunctionDeclarationStatement() {
- Modifiers modifiers = parseModifiers();
- validateModifiersForFunctionDeclarationStatement(modifiers);
- return parseFunctionDeclarationStatementAfterReturnType(parseCommentAndMetadata(), parseOptionalReturnType());
+ Statement _parseFunctionDeclarationStatement() {
+ Modifiers modifiers = _parseModifiers();
+ _validateModifiersForFunctionDeclarationStatement(modifiers);
+ return _parseFunctionDeclarationStatementAfterReturnType(_parseCommentAndMetadata(), _parseOptionalReturnType());
}
/**
@@ -4666,14 +4776,14 @@
* @param returnType the return type, or `null` if there is no return type
* @return the function declaration statement that was parsed
*/
- Statement parseFunctionDeclarationStatementAfterReturnType(CommentAndMetadata commentAndMetadata, TypeName returnType) {
- FunctionDeclaration declaration = parseFunctionDeclaration(commentAndMetadata, null, returnType);
+ Statement _parseFunctionDeclarationStatementAfterReturnType(CommentAndMetadata commentAndMetadata, TypeName returnType) {
+ FunctionDeclaration declaration = _parseFunctionDeclaration(commentAndMetadata, null, returnType);
Token propertyKeyword = declaration.propertyKeyword;
if (propertyKeyword != null) {
if (identical((propertyKeyword as KeywordToken).keyword, Keyword.GET)) {
- reportErrorForToken(ParserErrorCode.GETTER_IN_FUNCTION, propertyKeyword, []);
+ _reportErrorForToken(ParserErrorCode.GETTER_IN_FUNCTION, propertyKeyword, []);
} else {
- reportErrorForToken(ParserErrorCode.SETTER_IN_FUNCTION, propertyKeyword, []);
+ _reportErrorForToken(ParserErrorCode.SETTER_IN_FUNCTION, propertyKeyword, []);
}
}
return new FunctionDeclarationStatement(declaration);
@@ -4694,31 +4804,31 @@
* @param keyword the token representing the 'typedef' keyword
* @return the function type alias that was parsed
*/
- FunctionTypeAlias parseFunctionTypeAlias(CommentAndMetadata commentAndMetadata, Token keyword) {
+ FunctionTypeAlias _parseFunctionTypeAlias(CommentAndMetadata commentAndMetadata, Token keyword) {
TypeName returnType = null;
if (hasReturnTypeInTypeAlias) {
returnType = parseReturnType();
}
SimpleIdentifier name = parseSimpleIdentifier();
TypeParameterList typeParameters = null;
- if (matches(TokenType.LT)) {
+ if (_matches(TokenType.LT)) {
typeParameters = parseTypeParameterList();
}
- if (matches(TokenType.SEMICOLON) || matches(TokenType.EOF)) {
- reportErrorForCurrentToken(ParserErrorCode.MISSING_TYPEDEF_PARAMETERS, []);
- FormalParameterList parameters = new FormalParameterList(createSyntheticToken(TokenType.OPEN_PAREN), null, null, null, createSyntheticToken(TokenType.CLOSE_PAREN));
- Token semicolon = expect(TokenType.SEMICOLON);
+ if (_matches(TokenType.SEMICOLON) || _matches(TokenType.EOF)) {
+ _reportErrorForCurrentToken(ParserErrorCode.MISSING_TYPEDEF_PARAMETERS, []);
+ FormalParameterList parameters = new FormalParameterList(_createSyntheticToken(TokenType.OPEN_PAREN), null, null, null, _createSyntheticToken(TokenType.CLOSE_PAREN));
+ Token semicolon = _expect(TokenType.SEMICOLON);
return new FunctionTypeAlias(commentAndMetadata.comment, commentAndMetadata.metadata, keyword, returnType, name, typeParameters, parameters, semicolon);
- } else if (!matches(TokenType.OPEN_PAREN)) {
- reportErrorForCurrentToken(ParserErrorCode.MISSING_TYPEDEF_PARAMETERS, []);
+ } else if (!_matches(TokenType.OPEN_PAREN)) {
+ _reportErrorForCurrentToken(ParserErrorCode.MISSING_TYPEDEF_PARAMETERS, []);
// TODO(brianwilkerson) Recover from this error. At the very least we should skip to the start
// of the next valid compilation unit member, allowing for the possibility of finding the
// typedef parameters before that point.
- return new FunctionTypeAlias(commentAndMetadata.comment, commentAndMetadata.metadata, keyword, returnType, name, typeParameters, new FormalParameterList(createSyntheticToken(TokenType.OPEN_PAREN), null, null, null, createSyntheticToken(TokenType.CLOSE_PAREN)), createSyntheticToken(TokenType.SEMICOLON));
+ return new FunctionTypeAlias(commentAndMetadata.comment, commentAndMetadata.metadata, keyword, returnType, name, typeParameters, new FormalParameterList(_createSyntheticToken(TokenType.OPEN_PAREN), null, null, null, _createSyntheticToken(TokenType.CLOSE_PAREN)), _createSyntheticToken(TokenType.SEMICOLON));
}
FormalParameterList parameters = parseFormalParameterList();
- validateFormalParameterList(parameters);
- Token semicolon = expect(TokenType.SEMICOLON);
+ _validateFormalParameterList(parameters);
+ Token semicolon = _expect(TokenType.SEMICOLON);
return new FunctionTypeAlias(commentAndMetadata.comment, commentAndMetadata.metadata, keyword, returnType, name, typeParameters, parameters, semicolon);
}
@@ -4741,17 +4851,17 @@
* type
* @return the getter that was parsed
*/
- MethodDeclaration parseGetter(CommentAndMetadata commentAndMetadata, Token externalKeyword, Token staticKeyword, TypeName returnType) {
- Token propertyKeyword = expectKeyword(Keyword.GET);
+ MethodDeclaration _parseGetter(CommentAndMetadata commentAndMetadata, Token externalKeyword, Token staticKeyword, TypeName returnType) {
+ Token propertyKeyword = _expectKeyword(Keyword.GET);
SimpleIdentifier name = parseSimpleIdentifier();
- if (matches(TokenType.OPEN_PAREN) && tokenMatches(peek(), TokenType.CLOSE_PAREN)) {
- reportErrorForCurrentToken(ParserErrorCode.GETTER_WITH_PARAMETERS, []);
- advance();
- advance();
+ if (_matches(TokenType.OPEN_PAREN) && _tokenMatches(_peek(), TokenType.CLOSE_PAREN)) {
+ _reportErrorForCurrentToken(ParserErrorCode.GETTER_WITH_PARAMETERS, []);
+ _advance();
+ _advance();
}
- FunctionBody body = parseFunctionBody(externalKeyword != null || staticKeyword == null, ParserErrorCode.STATIC_GETTER_WITHOUT_BODY, false);
+ FunctionBody body = _parseFunctionBody(externalKeyword != null || staticKeyword == null, ParserErrorCode.STATIC_GETTER_WITHOUT_BODY, false);
if (externalKeyword != null && body is! EmptyFunctionBody) {
- reportErrorForCurrentToken(ParserErrorCode.EXTERNAL_GETTER_WITH_BODY, []);
+ _reportErrorForCurrentToken(ParserErrorCode.EXTERNAL_GETTER_WITH_BODY, []);
}
return new MethodDeclaration(commentAndMetadata.comment, commentAndMetadata.metadata, externalKeyword, staticKeyword, returnType, propertyKeyword, null, name, null, body);
}
@@ -4766,11 +4876,11 @@
*
* @return the list of identifiers that were parsed
*/
- List<SimpleIdentifier> parseIdentifierList() {
+ List<SimpleIdentifier> _parseIdentifierList() {
List<SimpleIdentifier> identifiers = new List<SimpleIdentifier>();
identifiers.add(parseSimpleIdentifier());
- while (matches(TokenType.COMMA)) {
- advance();
+ while (_matches(TokenType.COMMA)) {
+ _advance();
identifiers.add(parseSimpleIdentifier());
}
return identifiers;
@@ -4786,15 +4896,15 @@
*
* @return the if statement that was parsed
*/
- Statement parseIfStatement() {
- Token ifKeyword = expectKeyword(Keyword.IF);
- Token leftParenthesis = expect(TokenType.OPEN_PAREN);
+ Statement _parseIfStatement() {
+ Token ifKeyword = _expectKeyword(Keyword.IF);
+ Token leftParenthesis = _expect(TokenType.OPEN_PAREN);
Expression condition = parseExpression2();
- Token rightParenthesis = expect(TokenType.CLOSE_PAREN);
+ Token rightParenthesis = _expect(TokenType.CLOSE_PAREN);
Statement thenStatement = parseStatement2();
Token elseKeyword = null;
Statement elseStatement = null;
- if (matchesKeyword(Keyword.ELSE)) {
+ if (_matchesKeyword(Keyword.ELSE)) {
elseKeyword = andAdvance;
elseStatement = parseStatement2();
}
@@ -4812,17 +4922,17 @@
* @param commentAndMetadata the metadata to be associated with the directive
* @return the import directive that was parsed
*/
- ImportDirective parseImportDirective(CommentAndMetadata commentAndMetadata) {
- Token importKeyword = expectKeyword(Keyword.IMPORT);
+ ImportDirective _parseImportDirective(CommentAndMetadata commentAndMetadata) {
+ Token importKeyword = _expectKeyword(Keyword.IMPORT);
StringLiteral libraryUri = parseStringLiteral();
Token asToken = null;
SimpleIdentifier prefix = null;
- if (matchesKeyword(Keyword.AS)) {
+ if (_matchesKeyword(Keyword.AS)) {
asToken = andAdvance;
prefix = parseSimpleIdentifier();
}
- List<Combinator> combinators = parseCombinators();
- Token semicolon = expectSemicolon();
+ List<Combinator> combinators = _parseCombinators();
+ Token semicolon = _expectSemicolon();
return new ImportDirective(commentAndMetadata.comment, commentAndMetadata.metadata, importKeyword, libraryUri, asToken, prefix, combinators, semicolon);
}
@@ -4849,9 +4959,9 @@
* @param type the type that has already been parsed, or `null` if 'var' was provided
* @return the getter that was parsed
*/
- FieldDeclaration parseInitializedIdentifierList(CommentAndMetadata commentAndMetadata, Token staticKeyword, Token keyword, TypeName type) {
- VariableDeclarationList fieldList = parseVariableDeclarationListAfterType(null, keyword, type);
- return new FieldDeclaration(commentAndMetadata.comment, commentAndMetadata.metadata, staticKeyword, fieldList, expect(TokenType.SEMICOLON));
+ FieldDeclaration _parseInitializedIdentifierList(CommentAndMetadata commentAndMetadata, Token staticKeyword, Token keyword, TypeName type) {
+ VariableDeclarationList fieldList = _parseVariableDeclarationListAfterType(null, keyword, type);
+ return new FieldDeclaration(commentAndMetadata.comment, commentAndMetadata.metadata, staticKeyword, fieldList, _expect(TokenType.SEMICOLON));
}
/**
@@ -4865,7 +4975,7 @@
* @param keyword the 'new' or 'const' keyword that introduces the expression
* @return the instance creation expression that was parsed
*/
- InstanceCreationExpression parseInstanceCreationExpression(Token keyword) {
+ InstanceCreationExpression _parseInstanceCreationExpression(Token keyword) {
ConstructorName constructorName = parseConstructorName();
ArgumentList argumentList = parseArgumentList();
return new InstanceCreationExpression(keyword, constructorName, argumentList);
@@ -4882,10 +4992,10 @@
* @param commentAndMetadata the metadata to be associated with the directive
* @return the library directive that was parsed
*/
- LibraryDirective parseLibraryDirective(CommentAndMetadata commentAndMetadata) {
- Token keyword = expectKeyword(Keyword.LIBRARY);
- LibraryIdentifier libraryName = parseLibraryName(ParserErrorCode.MISSING_NAME_IN_LIBRARY_DIRECTIVE, keyword);
- Token semicolon = expect(TokenType.SEMICOLON);
+ LibraryDirective _parseLibraryDirective(CommentAndMetadata commentAndMetadata) {
+ Token keyword = _expectKeyword(Keyword.LIBRARY);
+ LibraryIdentifier libraryName = _parseLibraryName(ParserErrorCode.MISSING_NAME_IN_LIBRARY_DIRECTIVE, keyword);
+ Token semicolon = _expect(TokenType.SEMICOLON);
return new LibraryDirective(commentAndMetadata.comment, commentAndMetadata.metadata, keyword, libraryName, semicolon);
}
@@ -4902,19 +5012,19 @@
* missing
* @return the library name that was parsed
*/
- LibraryIdentifier parseLibraryName(ParserErrorCode missingNameError, Token missingNameToken) {
- if (matchesIdentifier()) {
+ LibraryIdentifier _parseLibraryName(ParserErrorCode missingNameError, Token missingNameToken) {
+ if (_matchesIdentifier()) {
return parseLibraryIdentifier();
- } else if (matches(TokenType.STRING)) {
+ } else if (_matches(TokenType.STRING)) {
// TODO(brianwilkerson) Recovery: This should be extended to handle arbitrary tokens until we
// can find a token that can start a compilation unit member.
StringLiteral string = parseStringLiteral();
- reportErrorForNode(ParserErrorCode.NON_IDENTIFIER_LIBRARY_NAME, string, []);
+ _reportErrorForNode(ParserErrorCode.NON_IDENTIFIER_LIBRARY_NAME, string, []);
} else {
- reportErrorForToken(missingNameError, missingNameToken, []);
+ _reportErrorForToken(missingNameError, missingNameToken, []);
}
List<SimpleIdentifier> components = new List<SimpleIdentifier>();
- components.add(createSyntheticIdentifier());
+ components.add(_createSyntheticIdentifier());
return new LibraryIdentifier(components);
}
@@ -4932,9 +5042,9 @@
* are no type arguments
* @return the list literal that was parsed
*/
- ListLiteral parseListLiteral(Token modifier, TypeArgumentList typeArguments) {
+ ListLiteral _parseListLiteral(Token modifier, TypeArgumentList typeArguments) {
// may be empty list literal
- if (matches(TokenType.INDEX)) {
+ if (_matches(TokenType.INDEX)) {
BeginToken leftBracket = new BeginToken(TokenType.OPEN_SQUARE_BRACKET, _currentToken.offset);
Token rightBracket = new Token(TokenType.CLOSE_SQUARE_BRACKET, _currentToken.offset + 1);
leftBracket.endToken = rightBracket;
@@ -4945,19 +5055,19 @@
return new ListLiteral(modifier, typeArguments, leftBracket, null, rightBracket);
}
// open
- Token leftBracket = expect(TokenType.OPEN_SQUARE_BRACKET);
- if (matches(TokenType.CLOSE_SQUARE_BRACKET)) {
+ Token leftBracket = _expect(TokenType.OPEN_SQUARE_BRACKET);
+ if (_matches(TokenType.CLOSE_SQUARE_BRACKET)) {
return new ListLiteral(modifier, typeArguments, leftBracket, null, andAdvance);
}
List<Expression> elements = new List<Expression>();
elements.add(parseExpression2());
- while (optional(TokenType.COMMA)) {
- if (matches(TokenType.CLOSE_SQUARE_BRACKET)) {
+ while (_optional(TokenType.COMMA)) {
+ if (_matches(TokenType.CLOSE_SQUARE_BRACKET)) {
return new ListLiteral(modifier, typeArguments, leftBracket, elements, andAdvance);
}
elements.add(parseExpression2());
}
- Token rightBracket = expect(TokenType.CLOSE_SQUARE_BRACKET);
+ Token rightBracket = _expect(TokenType.CLOSE_SQUARE_BRACKET);
return new ListLiteral(modifier, typeArguments, leftBracket, elements, rightBracket);
}
@@ -4974,18 +5084,18 @@
* no modifier
* @return the list or map literal that was parsed
*/
- TypedLiteral parseListOrMapLiteral(Token modifier) {
+ TypedLiteral _parseListOrMapLiteral(Token modifier) {
TypeArgumentList typeArguments = null;
- if (matches(TokenType.LT)) {
+ if (_matches(TokenType.LT)) {
typeArguments = parseTypeArgumentList();
}
- if (matches(TokenType.OPEN_CURLY_BRACKET)) {
- return parseMapLiteral(modifier, typeArguments);
- } else if (matches(TokenType.OPEN_SQUARE_BRACKET) || matches(TokenType.INDEX)) {
- return parseListLiteral(modifier, typeArguments);
+ if (_matches(TokenType.OPEN_CURLY_BRACKET)) {
+ return _parseMapLiteral(modifier, typeArguments);
+ } else if (_matches(TokenType.OPEN_SQUARE_BRACKET) || _matches(TokenType.INDEX)) {
+ return _parseListLiteral(modifier, typeArguments);
}
- reportErrorForCurrentToken(ParserErrorCode.EXPECTED_LIST_OR_MAP_LITERAL, []);
- return new ListLiteral(modifier, typeArguments, createSyntheticToken(TokenType.OPEN_SQUARE_BRACKET), null, createSyntheticToken(TokenType.CLOSE_SQUARE_BRACKET));
+ _reportErrorForCurrentToken(ParserErrorCode.EXPECTED_LIST_OR_MAP_LITERAL, []);
+ return new ListLiteral(modifier, typeArguments, _createSyntheticToken(TokenType.OPEN_SQUARE_BRACKET), null, _createSyntheticToken(TokenType.CLOSE_SQUARE_BRACKET));
}
/**
@@ -4998,11 +5108,11 @@
*
* @return the logical and expression that was parsed
*/
- Expression parseLogicalAndExpression() {
- Expression expression = parseEqualityExpression();
- while (matches(TokenType.AMPERSAND_AMPERSAND)) {
+ Expression _parseLogicalAndExpression() {
+ Expression expression = _parseEqualityExpression();
+ while (_matches(TokenType.AMPERSAND_AMPERSAND)) {
Token operator = andAdvance;
- expression = new BinaryExpression(expression, operator, parseEqualityExpression());
+ expression = new BinaryExpression(expression, operator, _parseEqualityExpression());
}
return expression;
}
@@ -5021,20 +5131,20 @@
* type arguments
* @return the map literal that was parsed
*/
- MapLiteral parseMapLiteral(Token modifier, TypeArgumentList typeArguments) {
- Token leftBracket = expect(TokenType.OPEN_CURLY_BRACKET);
+ MapLiteral _parseMapLiteral(Token modifier, TypeArgumentList typeArguments) {
+ Token leftBracket = _expect(TokenType.OPEN_CURLY_BRACKET);
List<MapLiteralEntry> entries = new List<MapLiteralEntry>();
- if (matches(TokenType.CLOSE_CURLY_BRACKET)) {
+ if (_matches(TokenType.CLOSE_CURLY_BRACKET)) {
return new MapLiteral(modifier, typeArguments, leftBracket, entries, andAdvance);
}
entries.add(parseMapLiteralEntry());
- while (optional(TokenType.COMMA)) {
- if (matches(TokenType.CLOSE_CURLY_BRACKET)) {
+ while (_optional(TokenType.COMMA)) {
+ if (_matches(TokenType.CLOSE_CURLY_BRACKET)) {
return new MapLiteral(modifier, typeArguments, leftBracket, entries, andAdvance);
}
entries.add(parseMapLiteralEntry());
}
- Token rightBracket = expect(TokenType.CLOSE_CURLY_BRACKET);
+ Token rightBracket = _expect(TokenType.CLOSE_CURLY_BRACKET);
return new MapLiteral(modifier, typeArguments, leftBracket, entries, rightBracket);
}
@@ -5056,15 +5166,15 @@
* @param parameters the parameters to the method
* @return the method declaration that was parsed
*/
- MethodDeclaration parseMethodDeclarationAfterParameters(CommentAndMetadata commentAndMetadata, Token externalKeyword, Token staticKeyword, TypeName returnType, SimpleIdentifier name, FormalParameterList parameters) {
- FunctionBody body = parseFunctionBody(externalKeyword != null || staticKeyword == null, ParserErrorCode.MISSING_FUNCTION_BODY, false);
+ MethodDeclaration _parseMethodDeclarationAfterParameters(CommentAndMetadata commentAndMetadata, Token externalKeyword, Token staticKeyword, TypeName returnType, SimpleIdentifier name, FormalParameterList parameters) {
+ FunctionBody body = _parseFunctionBody(externalKeyword != null || staticKeyword == null, ParserErrorCode.MISSING_FUNCTION_BODY, false);
if (externalKeyword != null) {
if (body is! EmptyFunctionBody) {
- reportErrorForNode(ParserErrorCode.EXTERNAL_METHOD_WITH_BODY, body, []);
+ _reportErrorForNode(ParserErrorCode.EXTERNAL_METHOD_WITH_BODY, body, []);
}
} else if (staticKeyword != null) {
if (body is EmptyFunctionBody) {
- reportErrorForNode(ParserErrorCode.ABSTRACT_STATIC_METHOD, body, []);
+ _reportErrorForNode(ParserErrorCode.ABSTRACT_STATIC_METHOD, body, []);
}
}
return new MethodDeclaration(commentAndMetadata.comment, commentAndMetadata.metadata, externalKeyword, staticKeyword, returnType, null, null, name, parameters, body);
@@ -5086,11 +5196,11 @@
* @param returnType the return type of the method
* @return the method declaration that was parsed
*/
- MethodDeclaration parseMethodDeclarationAfterReturnType(CommentAndMetadata commentAndMetadata, Token externalKeyword, Token staticKeyword, TypeName returnType) {
+ MethodDeclaration _parseMethodDeclarationAfterReturnType(CommentAndMetadata commentAndMetadata, Token externalKeyword, Token staticKeyword, TypeName returnType) {
SimpleIdentifier methodName = parseSimpleIdentifier();
FormalParameterList parameters = parseFormalParameterList();
- validateFormalParameterList(parameters);
- return parseMethodDeclarationAfterParameters(commentAndMetadata, externalKeyword, staticKeyword, returnType, methodName, parameters);
+ _validateFormalParameterList(parameters);
+ return _parseMethodDeclarationAfterParameters(commentAndMetadata, externalKeyword, staticKeyword, returnType, methodName, parameters);
}
/**
@@ -5106,59 +5216,59 @@
*
* @return the modifiers that were parsed
*/
- Modifiers parseModifiers() {
+ Modifiers _parseModifiers() {
Modifiers modifiers = new Modifiers();
bool progress = true;
while (progress) {
- if (tokenMatches(peek(), TokenType.PERIOD) || tokenMatches(peek(), TokenType.LT) || tokenMatches(peek(), TokenType.OPEN_PAREN)) {
+ if (_tokenMatches(_peek(), TokenType.PERIOD) || _tokenMatches(_peek(), TokenType.LT) || _tokenMatches(_peek(), TokenType.OPEN_PAREN)) {
return modifiers;
}
- if (matchesKeyword(Keyword.ABSTRACT)) {
+ if (_matchesKeyword(Keyword.ABSTRACT)) {
if (modifiers.abstractKeyword != null) {
- reportErrorForCurrentToken(ParserErrorCode.DUPLICATED_MODIFIER, [_currentToken.lexeme]);
- advance();
+ _reportErrorForCurrentToken(ParserErrorCode.DUPLICATED_MODIFIER, [_currentToken.lexeme]);
+ _advance();
} else {
modifiers.abstractKeyword = andAdvance;
}
- } else if (matchesKeyword(Keyword.CONST)) {
+ } else if (_matchesKeyword(Keyword.CONST)) {
if (modifiers.constKeyword != null) {
- reportErrorForCurrentToken(ParserErrorCode.DUPLICATED_MODIFIER, [_currentToken.lexeme]);
- advance();
+ _reportErrorForCurrentToken(ParserErrorCode.DUPLICATED_MODIFIER, [_currentToken.lexeme]);
+ _advance();
} else {
modifiers.constKeyword = andAdvance;
}
- } else if (matchesKeyword(Keyword.EXTERNAL) && !tokenMatches(peek(), TokenType.PERIOD) && !tokenMatches(peek(), TokenType.LT)) {
+ } else if (_matchesKeyword(Keyword.EXTERNAL) && !_tokenMatches(_peek(), TokenType.PERIOD) && !_tokenMatches(_peek(), TokenType.LT)) {
if (modifiers.externalKeyword != null) {
- reportErrorForCurrentToken(ParserErrorCode.DUPLICATED_MODIFIER, [_currentToken.lexeme]);
- advance();
+ _reportErrorForCurrentToken(ParserErrorCode.DUPLICATED_MODIFIER, [_currentToken.lexeme]);
+ _advance();
} else {
modifiers.externalKeyword = andAdvance;
}
- } else if (matchesKeyword(Keyword.FACTORY) && !tokenMatches(peek(), TokenType.PERIOD) && !tokenMatches(peek(), TokenType.LT)) {
+ } else if (_matchesKeyword(Keyword.FACTORY) && !_tokenMatches(_peek(), TokenType.PERIOD) && !_tokenMatches(_peek(), TokenType.LT)) {
if (modifiers.factoryKeyword != null) {
- reportErrorForCurrentToken(ParserErrorCode.DUPLICATED_MODIFIER, [_currentToken.lexeme]);
- advance();
+ _reportErrorForCurrentToken(ParserErrorCode.DUPLICATED_MODIFIER, [_currentToken.lexeme]);
+ _advance();
} else {
modifiers.factoryKeyword = andAdvance;
}
- } else if (matchesKeyword(Keyword.FINAL)) {
+ } else if (_matchesKeyword(Keyword.FINAL)) {
if (modifiers.finalKeyword != null) {
- reportErrorForCurrentToken(ParserErrorCode.DUPLICATED_MODIFIER, [_currentToken.lexeme]);
- advance();
+ _reportErrorForCurrentToken(ParserErrorCode.DUPLICATED_MODIFIER, [_currentToken.lexeme]);
+ _advance();
} else {
modifiers.finalKeyword = andAdvance;
}
- } else if (matchesKeyword(Keyword.STATIC) && !tokenMatches(peek(), TokenType.PERIOD) && !tokenMatches(peek(), TokenType.LT)) {
+ } else if (_matchesKeyword(Keyword.STATIC) && !_tokenMatches(_peek(), TokenType.PERIOD) && !_tokenMatches(_peek(), TokenType.LT)) {
if (modifiers.staticKeyword != null) {
- reportErrorForCurrentToken(ParserErrorCode.DUPLICATED_MODIFIER, [_currentToken.lexeme]);
- advance();
+ _reportErrorForCurrentToken(ParserErrorCode.DUPLICATED_MODIFIER, [_currentToken.lexeme]);
+ _advance();
} else {
modifiers.staticKeyword = andAdvance;
}
- } else if (matchesKeyword(Keyword.VAR)) {
+ } else if (_matchesKeyword(Keyword.VAR)) {
if (modifiers.varKeyword != null) {
- reportErrorForCurrentToken(ParserErrorCode.DUPLICATED_MODIFIER, [_currentToken.lexeme]);
- advance();
+ _reportErrorForCurrentToken(ParserErrorCode.DUPLICATED_MODIFIER, [_currentToken.lexeme]);
+ _advance();
} else {
modifiers.varKeyword = andAdvance;
}
@@ -5180,16 +5290,16 @@
*
* @return the multiplicative expression that was parsed
*/
- Expression parseMultiplicativeExpression() {
+ Expression _parseMultiplicativeExpression() {
Expression expression;
- if (matchesKeyword(Keyword.SUPER) && _currentToken.next.type.isMultiplicativeOperator) {
+ if (_matchesKeyword(Keyword.SUPER) && _currentToken.next.type.isMultiplicativeOperator) {
expression = new SuperExpression(andAdvance);
} else {
- expression = parseUnaryExpression();
+ expression = _parseUnaryExpression();
}
while (_currentToken.type.isMultiplicativeOperator) {
Token operator = andAdvance;
- expression = new BinaryExpression(expression, operator, parseUnaryExpression());
+ expression = new BinaryExpression(expression, operator, _parseUnaryExpression());
}
return expression;
}
@@ -5204,7 +5314,7 @@
*
* @return the class native clause that was parsed
*/
- NativeClause parseNativeClause() {
+ NativeClause _parseNativeClause() {
Token keyword = andAdvance;
StringLiteral name = parseStringLiteral();
return new NativeClause(keyword, name);
@@ -5220,7 +5330,7 @@
*
* @return the new expression that was parsed
*/
- InstanceCreationExpression parseNewExpression() => parseInstanceCreationExpression(expectKeyword(Keyword.NEW));
+ InstanceCreationExpression _parseNewExpression() => _parseInstanceCreationExpression(_expectKeyword(Keyword.NEW));
/**
* Parse a non-labeled statement.
@@ -5245,112 +5355,112 @@
*
* @return the non-labeled statement that was parsed
*/
- Statement parseNonLabeledStatement() {
+ Statement _parseNonLabeledStatement() {
// TODO(brianwilkerson) Pass the comment and metadata on where appropriate.
- CommentAndMetadata commentAndMetadata = parseCommentAndMetadata();
- if (matches(TokenType.OPEN_CURLY_BRACKET)) {
- if (tokenMatches(peek(), TokenType.STRING)) {
- Token afterString = skipStringLiteral(_currentToken.next);
+ CommentAndMetadata commentAndMetadata = _parseCommentAndMetadata();
+ if (_matches(TokenType.OPEN_CURLY_BRACKET)) {
+ if (_tokenMatches(_peek(), TokenType.STRING)) {
+ Token afterString = _skipStringLiteral(_currentToken.next);
if (afterString != null && identical(afterString.type, TokenType.COLON)) {
- return new ExpressionStatement(parseExpression2(), expect(TokenType.SEMICOLON));
+ return new ExpressionStatement(parseExpression2(), _expect(TokenType.SEMICOLON));
}
}
return parseBlock();
- } else if (matches(TokenType.KEYWORD) && !(_currentToken as KeywordToken).keyword.isPseudoKeyword) {
+ } else if (_matches(TokenType.KEYWORD) && !(_currentToken as KeywordToken).keyword.isPseudoKeyword) {
Keyword keyword = (_currentToken as KeywordToken).keyword;
// TODO(jwren) compute some metrics to figure out a better order for this if-then sequence to optimize performance
if (identical(keyword, Keyword.ASSERT)) {
- return parseAssertStatement();
+ return _parseAssertStatement();
} else if (identical(keyword, Keyword.BREAK)) {
- return parseBreakStatement();
+ return _parseBreakStatement();
} else if (identical(keyword, Keyword.CONTINUE)) {
- return parseContinueStatement();
+ return _parseContinueStatement();
} else if (identical(keyword, Keyword.DO)) {
- return parseDoStatement();
+ return _parseDoStatement();
} else if (identical(keyword, Keyword.FOR)) {
- return parseForStatement();
+ return _parseForStatement();
} else if (identical(keyword, Keyword.IF)) {
- return parseIfStatement();
+ return _parseIfStatement();
} else if (identical(keyword, Keyword.RETHROW)) {
- return new ExpressionStatement(parseRethrowExpression(), expect(TokenType.SEMICOLON));
+ return new ExpressionStatement(_parseRethrowExpression(), _expect(TokenType.SEMICOLON));
} else if (identical(keyword, Keyword.RETURN)) {
- return parseReturnStatement();
+ return _parseReturnStatement();
} else if (identical(keyword, Keyword.SWITCH)) {
- return parseSwitchStatement();
+ return _parseSwitchStatement();
} else if (identical(keyword, Keyword.THROW)) {
- return new ExpressionStatement(parseThrowExpression(), expect(TokenType.SEMICOLON));
+ return new ExpressionStatement(_parseThrowExpression(), _expect(TokenType.SEMICOLON));
} else if (identical(keyword, Keyword.TRY)) {
- return parseTryStatement();
+ return _parseTryStatement();
} else if (identical(keyword, Keyword.WHILE)) {
- return parseWhileStatement();
+ return _parseWhileStatement();
} else if (identical(keyword, Keyword.VAR) || identical(keyword, Keyword.FINAL)) {
- return parseVariableDeclarationStatementAfterMetadata(commentAndMetadata);
+ return _parseVariableDeclarationStatementAfterMetadata(commentAndMetadata);
} else if (identical(keyword, Keyword.VOID)) {
TypeName returnType = parseReturnType();
- if (matchesIdentifier() && matchesAny(peek(), [
+ if (_matchesIdentifier() && _peek().matchesAny([
TokenType.OPEN_PAREN,
TokenType.OPEN_CURLY_BRACKET,
TokenType.FUNCTION])) {
- return parseFunctionDeclarationStatementAfterReturnType(commentAndMetadata, returnType);
+ return _parseFunctionDeclarationStatementAfterReturnType(commentAndMetadata, returnType);
} else {
//
// We have found an error of some kind. Try to recover.
//
- if (matchesIdentifier()) {
- if (matchesAny(peek(), [TokenType.EQ, TokenType.COMMA, TokenType.SEMICOLON])) {
+ if (_matchesIdentifier()) {
+ if (_peek().matchesAny([TokenType.EQ, TokenType.COMMA, TokenType.SEMICOLON])) {
//
// We appear to have a variable declaration with a type of "void".
//
- reportErrorForNode(ParserErrorCode.VOID_VARIABLE, returnType, []);
- return parseVariableDeclarationStatementAfterMetadata(commentAndMetadata);
+ _reportErrorForNode(ParserErrorCode.VOID_VARIABLE, returnType, []);
+ return _parseVariableDeclarationStatementAfterMetadata(commentAndMetadata);
}
- } else if (matches(TokenType.CLOSE_CURLY_BRACKET)) {
+ } else if (_matches(TokenType.CLOSE_CURLY_BRACKET)) {
//
// We appear to have found an incomplete statement at the end of a block. Parse it as a
// variable declaration.
//
- return parseVariableDeclarationStatementAfterType(commentAndMetadata, null, returnType);
+ return _parseVariableDeclarationStatementAfterType(commentAndMetadata, null, returnType);
}
- reportErrorForCurrentToken(ParserErrorCode.MISSING_STATEMENT, []);
+ _reportErrorForCurrentToken(ParserErrorCode.MISSING_STATEMENT, []);
// TODO(brianwilkerson) Recover from this error.
- return new EmptyStatement(createSyntheticToken(TokenType.SEMICOLON));
+ return new EmptyStatement(_createSyntheticToken(TokenType.SEMICOLON));
}
} else if (identical(keyword, Keyword.CONST)) {
- if (matchesAny(peek(), [
+ if (_peek().matchesAny([
TokenType.LT,
TokenType.OPEN_CURLY_BRACKET,
TokenType.OPEN_SQUARE_BRACKET,
TokenType.INDEX])) {
- return new ExpressionStatement(parseExpression2(), expect(TokenType.SEMICOLON));
- } else if (tokenMatches(peek(), TokenType.IDENTIFIER)) {
- Token afterType = skipTypeName(peek());
+ return new ExpressionStatement(parseExpression2(), _expect(TokenType.SEMICOLON));
+ } else if (_tokenMatches(_peek(), TokenType.IDENTIFIER)) {
+ Token afterType = _skipTypeName(_peek());
if (afterType != null) {
- if (tokenMatches(afterType, TokenType.OPEN_PAREN) || (tokenMatches(afterType, TokenType.PERIOD) && tokenMatches(afterType.next, TokenType.IDENTIFIER) && tokenMatches(afterType.next.next, TokenType.OPEN_PAREN))) {
- return new ExpressionStatement(parseExpression2(), expect(TokenType.SEMICOLON));
+ if (_tokenMatches(afterType, TokenType.OPEN_PAREN) || (_tokenMatches(afterType, TokenType.PERIOD) && _tokenMatches(afterType.next, TokenType.IDENTIFIER) && _tokenMatches(afterType.next.next, TokenType.OPEN_PAREN))) {
+ return new ExpressionStatement(parseExpression2(), _expect(TokenType.SEMICOLON));
}
}
}
- return parseVariableDeclarationStatementAfterMetadata(commentAndMetadata);
+ return _parseVariableDeclarationStatementAfterMetadata(commentAndMetadata);
} else if (identical(keyword, Keyword.NEW) || identical(keyword, Keyword.TRUE) || identical(keyword, Keyword.FALSE) || identical(keyword, Keyword.NULL) || identical(keyword, Keyword.SUPER) || identical(keyword, Keyword.THIS)) {
- return new ExpressionStatement(parseExpression2(), expect(TokenType.SEMICOLON));
+ return new ExpressionStatement(parseExpression2(), _expect(TokenType.SEMICOLON));
} else {
//
// We have found an error of some kind. Try to recover.
//
- reportErrorForCurrentToken(ParserErrorCode.MISSING_STATEMENT, []);
- return new EmptyStatement(createSyntheticToken(TokenType.SEMICOLON));
+ _reportErrorForCurrentToken(ParserErrorCode.MISSING_STATEMENT, []);
+ return new EmptyStatement(_createSyntheticToken(TokenType.SEMICOLON));
}
- } else if (matches(TokenType.SEMICOLON)) {
- return parseEmptyStatement();
- } else if (isInitializedVariableDeclaration()) {
- return parseVariableDeclarationStatementAfterMetadata(commentAndMetadata);
- } else if (isFunctionDeclaration()) {
- return parseFunctionDeclarationStatement();
- } else if (matches(TokenType.CLOSE_CURLY_BRACKET)) {
- reportErrorForCurrentToken(ParserErrorCode.MISSING_STATEMENT, []);
- return new EmptyStatement(createSyntheticToken(TokenType.SEMICOLON));
+ } else if (_matches(TokenType.SEMICOLON)) {
+ return _parseEmptyStatement();
+ } else if (_isInitializedVariableDeclaration()) {
+ return _parseVariableDeclarationStatementAfterMetadata(commentAndMetadata);
+ } else if (_isFunctionDeclaration()) {
+ return _parseFunctionDeclarationStatement();
+ } else if (_matches(TokenType.CLOSE_CURLY_BRACKET)) {
+ _reportErrorForCurrentToken(ParserErrorCode.MISSING_STATEMENT, []);
+ return new EmptyStatement(_createSyntheticToken(TokenType.SEMICOLON));
} else {
- return new ExpressionStatement(parseExpression2(), expect(TokenType.SEMICOLON));
+ return new ExpressionStatement(parseExpression2(), _expect(TokenType.SEMICOLON));
}
}
@@ -5372,30 +5482,30 @@
* type
* @return the operator declaration that was parsed
*/
- MethodDeclaration parseOperator(CommentAndMetadata commentAndMetadata, Token externalKeyword, TypeName returnType) {
+ MethodDeclaration _parseOperator(CommentAndMetadata commentAndMetadata, Token externalKeyword, TypeName returnType) {
Token operatorKeyword;
- if (matchesKeyword(Keyword.OPERATOR)) {
+ if (_matchesKeyword(Keyword.OPERATOR)) {
operatorKeyword = andAdvance;
} else {
- reportErrorForToken(ParserErrorCode.MISSING_KEYWORD_OPERATOR, _currentToken, []);
- operatorKeyword = createSyntheticKeyword(Keyword.OPERATOR);
+ _reportErrorForToken(ParserErrorCode.MISSING_KEYWORD_OPERATOR, _currentToken, []);
+ operatorKeyword = _createSyntheticKeyword(Keyword.OPERATOR);
}
if (!_currentToken.isUserDefinableOperator) {
- reportErrorForCurrentToken(ParserErrorCode.NON_USER_DEFINABLE_OPERATOR, [_currentToken.lexeme]);
+ _reportErrorForCurrentToken(ParserErrorCode.NON_USER_DEFINABLE_OPERATOR, [_currentToken.lexeme]);
}
SimpleIdentifier name = new SimpleIdentifier(andAdvance);
- if (matches(TokenType.EQ)) {
+ if (_matches(TokenType.EQ)) {
Token previous = _currentToken.previous;
- if ((tokenMatches(previous, TokenType.EQ_EQ) || tokenMatches(previous, TokenType.BANG_EQ)) && _currentToken.offset == previous.offset + 2) {
- reportErrorForCurrentToken(ParserErrorCode.INVALID_OPERATOR, ["${previous.lexeme}${_currentToken.lexeme}"]);
- advance();
+ if ((_tokenMatches(previous, TokenType.EQ_EQ) || _tokenMatches(previous, TokenType.BANG_EQ)) && _currentToken.offset == previous.offset + 2) {
+ _reportErrorForCurrentToken(ParserErrorCode.INVALID_OPERATOR, ["${previous.lexeme}${_currentToken.lexeme}"]);
+ _advance();
}
}
FormalParameterList parameters = parseFormalParameterList();
- validateFormalParameterList(parameters);
- FunctionBody body = parseFunctionBody(true, ParserErrorCode.MISSING_FUNCTION_BODY, false);
+ _validateFormalParameterList(parameters);
+ FunctionBody body = _parseFunctionBody(true, ParserErrorCode.MISSING_FUNCTION_BODY, false);
if (externalKeyword != null && body is! EmptyFunctionBody) {
- reportErrorForCurrentToken(ParserErrorCode.EXTERNAL_OPERATOR_WITH_BODY, []);
+ _reportErrorForCurrentToken(ParserErrorCode.EXTERNAL_OPERATOR_WITH_BODY, []);
}
return new MethodDeclaration(commentAndMetadata.comment, commentAndMetadata.metadata, externalKeyword, null, returnType, null, operatorKeyword, name, parameters, body);
}
@@ -5405,12 +5515,12 @@
*
* @return the return type that was parsed
*/
- TypeName parseOptionalReturnType() {
- if (matchesKeyword(Keyword.VOID)) {
+ TypeName _parseOptionalReturnType() {
+ if (_matchesKeyword(Keyword.VOID)) {
return parseReturnType();
- } else if (matchesIdentifier() && !matchesKeyword(Keyword.GET) && !matchesKeyword(Keyword.SET) && !matchesKeyword(Keyword.OPERATOR) && (tokenMatchesIdentifier(peek()) || tokenMatches(peek(), TokenType.LT))) {
+ } else if (_matchesIdentifier() && !_matchesKeyword(Keyword.GET) && !_matchesKeyword(Keyword.SET) && !_matchesKeyword(Keyword.OPERATOR) && (_tokenMatchesIdentifier(_peek()) || _tokenMatches(_peek(), TokenType.LT))) {
return parseReturnType();
- } else if (matchesIdentifier() && tokenMatches(peek(), TokenType.PERIOD) && tokenMatchesIdentifier(peekAt(2)) && (tokenMatchesIdentifier(peekAt(3)) || tokenMatches(peekAt(3), TokenType.LT))) {
+ } else if (_matchesIdentifier() && _tokenMatches(_peek(), TokenType.PERIOD) && _tokenMatchesIdentifier(_peekAt(2)) && (_tokenMatchesIdentifier(_peekAt(3)) || _tokenMatches(_peekAt(3), TokenType.LT))) {
return parseReturnType();
}
return null;
@@ -5430,16 +5540,16 @@
* @param commentAndMetadata the metadata to be associated with the directive
* @return the part or part-of directive that was parsed
*/
- Directive parsePartDirective(CommentAndMetadata commentAndMetadata) {
- Token partKeyword = expectKeyword(Keyword.PART);
- if (matchesString(_OF)) {
+ Directive _parsePartDirective(CommentAndMetadata commentAndMetadata) {
+ Token partKeyword = _expectKeyword(Keyword.PART);
+ if (_matchesString(_OF)) {
Token ofKeyword = andAdvance;
- LibraryIdentifier libraryName = parseLibraryName(ParserErrorCode.MISSING_NAME_IN_PART_OF_DIRECTIVE, ofKeyword);
- Token semicolon = expect(TokenType.SEMICOLON);
+ LibraryIdentifier libraryName = _parseLibraryName(ParserErrorCode.MISSING_NAME_IN_PART_OF_DIRECTIVE, ofKeyword);
+ Token semicolon = _expect(TokenType.SEMICOLON);
return new PartOfDirective(commentAndMetadata.comment, commentAndMetadata.metadata, partKeyword, ofKeyword, libraryName, semicolon);
}
StringLiteral partUri = parseStringLiteral();
- Token semicolon = expect(TokenType.SEMICOLON);
+ Token semicolon = _expect(TokenType.SEMICOLON);
return new PartDirective(commentAndMetadata.comment, commentAndMetadata.metadata, partKeyword, partUri, semicolon);
}
@@ -5458,11 +5568,11 @@
*
* @return the postfix expression that was parsed
*/
- Expression parsePostfixExpression() {
- Expression operand = parseAssignableExpression(true);
- if (matches(TokenType.OPEN_SQUARE_BRACKET) || matches(TokenType.PERIOD) || matches(TokenType.OPEN_PAREN)) {
+ Expression _parsePostfixExpression() {
+ Expression operand = _parseAssignableExpression(true);
+ if (_matches(TokenType.OPEN_SQUARE_BRACKET) || _matches(TokenType.PERIOD) || _matches(TokenType.OPEN_PAREN)) {
do {
- if (matches(TokenType.OPEN_PAREN)) {
+ if (_matches(TokenType.OPEN_PAREN)) {
ArgumentList argumentList = parseArgumentList();
if (operand is PropertyAccess) {
PropertyAccess access = operand as PropertyAccess;
@@ -5471,15 +5581,15 @@
operand = new FunctionExpressionInvocation(operand, argumentList);
}
} else {
- operand = parseAssignableSelector(operand, true);
+ operand = _parseAssignableSelector(operand, true);
}
- } while (matches(TokenType.OPEN_SQUARE_BRACKET) || matches(TokenType.PERIOD) || matches(TokenType.OPEN_PAREN));
+ } while (_matches(TokenType.OPEN_SQUARE_BRACKET) || _matches(TokenType.PERIOD) || _matches(TokenType.OPEN_PAREN));
return operand;
}
if (!_currentToken.type.isIncrementOperator) {
return operand;
}
- ensureAssignable(operand);
+ _ensureAssignable(operand);
Token operator = andAdvance;
return new PostfixExpression(operand, operator);
}
@@ -5511,18 +5621,18 @@
*
* @return the primary expression that was parsed
*/
- Expression parsePrimaryExpression() {
- if (matchesKeyword(Keyword.THIS)) {
+ Expression _parsePrimaryExpression() {
+ if (_matchesKeyword(Keyword.THIS)) {
return new ThisExpression(andAdvance);
- } else if (matchesKeyword(Keyword.SUPER)) {
- return parseAssignableSelector(new SuperExpression(andAdvance), false);
- } else if (matchesKeyword(Keyword.NULL)) {
+ } else if (_matchesKeyword(Keyword.SUPER)) {
+ return _parseAssignableSelector(new SuperExpression(andAdvance), false);
+ } else if (_matchesKeyword(Keyword.NULL)) {
return new NullLiteral(andAdvance);
- } else if (matchesKeyword(Keyword.FALSE)) {
+ } else if (_matchesKeyword(Keyword.FALSE)) {
return new BooleanLiteral(andAdvance, false);
- } else if (matchesKeyword(Keyword.TRUE)) {
+ } else if (_matchesKeyword(Keyword.TRUE)) {
return new BooleanLiteral(andAdvance, true);
- } else if (matches(TokenType.DOUBLE)) {
+ } else if (_matches(TokenType.DOUBLE)) {
Token token = andAdvance;
double value = 0.0;
try {
@@ -5530,7 +5640,7 @@
} on FormatException catch (exception) {
}
return new DoubleLiteral(token, value);
- } else if (matches(TokenType.HEXADECIMAL)) {
+ } else if (_matches(TokenType.HEXADECIMAL)) {
Token token = andAdvance;
int value = null;
try {
@@ -5538,7 +5648,7 @@
} on FormatException catch (exception) {
}
return new IntegerLiteral(token, value);
- } else if (matches(TokenType.INT)) {
+ } else if (_matches(TokenType.INT)) {
Token token = andAdvance;
int value = null;
try {
@@ -5546,13 +5656,13 @@
} on FormatException catch (exception) {
}
return new IntegerLiteral(token, value);
- } else if (matches(TokenType.STRING)) {
+ } else if (_matches(TokenType.STRING)) {
return parseStringLiteral();
- } else if (matches(TokenType.OPEN_CURLY_BRACKET)) {
- return parseMapLiteral(null, null);
- } else if (matches(TokenType.OPEN_SQUARE_BRACKET) || matches(TokenType.INDEX)) {
- return parseListLiteral(null, null);
- } else if (matchesIdentifier()) {
+ } else if (_matches(TokenType.OPEN_CURLY_BRACKET)) {
+ return _parseMapLiteral(null, null);
+ } else if (_matches(TokenType.OPEN_SQUARE_BRACKET) || _matches(TokenType.INDEX)) {
+ return _parseListLiteral(null, null);
+ } else if (_matchesIdentifier()) {
// TODO(brianwilkerson) The code below was an attempt to recover from an error case, but it
// needs to be applied as a recovery only after we know that parsing it as an identifier
// doesn't work. Leaving the code as a reminder of how to recover.
@@ -5564,35 +5674,35 @@
// return parseFunctionExpression();
// }
return parsePrefixedIdentifier();
- } else if (matchesKeyword(Keyword.NEW)) {
- return parseNewExpression();
- } else if (matchesKeyword(Keyword.CONST)) {
- return parseConstExpression();
- } else if (matches(TokenType.OPEN_PAREN)) {
- if (isFunctionExpression(_currentToken)) {
+ } else if (_matchesKeyword(Keyword.NEW)) {
+ return _parseNewExpression();
+ } else if (_matchesKeyword(Keyword.CONST)) {
+ return _parseConstExpression();
+ } else if (_matches(TokenType.OPEN_PAREN)) {
+ if (_isFunctionExpression(_currentToken)) {
return parseFunctionExpression();
}
Token leftParenthesis = andAdvance;
Expression expression = parseExpression2();
- Token rightParenthesis = expect(TokenType.CLOSE_PAREN);
+ Token rightParenthesis = _expect(TokenType.CLOSE_PAREN);
return new ParenthesizedExpression(leftParenthesis, expression, rightParenthesis);
- } else if (matches(TokenType.LT)) {
- return parseListOrMapLiteral(null);
- } else if (matches(TokenType.QUESTION)) {
- return parseArgumentDefinitionTest();
- } else if (matchesKeyword(Keyword.VOID)) {
+ } else if (_matches(TokenType.LT)) {
+ return _parseListOrMapLiteral(null);
+ } else if (_matches(TokenType.QUESTION)) {
+ return _parseArgumentDefinitionTest();
+ } else if (_matchesKeyword(Keyword.VOID)) {
//
// Recover from having a return type of "void" where a return type is not expected.
//
// TODO(brianwilkerson) Improve this error message.
- reportErrorForCurrentToken(ParserErrorCode.UNEXPECTED_TOKEN, [_currentToken.lexeme]);
- advance();
- return parsePrimaryExpression();
- } else if (matches(TokenType.HASH)) {
- return parseSymbolLiteral();
+ _reportErrorForCurrentToken(ParserErrorCode.UNEXPECTED_TOKEN, [_currentToken.lexeme]);
+ _advance();
+ return _parsePrimaryExpression();
+ } else if (_matches(TokenType.HASH)) {
+ return _parseSymbolLiteral();
} else {
- reportErrorForCurrentToken(ParserErrorCode.MISSING_IDENTIFIER, []);
- return createSyntheticIdentifier();
+ _reportErrorForCurrentToken(ParserErrorCode.MISSING_IDENTIFIER, []);
+ return _createSyntheticIdentifier();
}
}
@@ -5606,11 +5716,11 @@
*
* @return the redirecting constructor invocation that was parsed
*/
- RedirectingConstructorInvocation parseRedirectingConstructorInvocation() {
- Token keyword = expectKeyword(Keyword.THIS);
+ RedirectingConstructorInvocation _parseRedirectingConstructorInvocation() {
+ Token keyword = _expectKeyword(Keyword.THIS);
Token period = null;
SimpleIdentifier constructorName = null;
- if (matches(TokenType.PERIOD)) {
+ if (_matches(TokenType.PERIOD)) {
period = andAdvance;
constructorName = parseSimpleIdentifier();
}
@@ -5629,21 +5739,21 @@
*
* @return the relational expression that was parsed
*/
- Expression parseRelationalExpression() {
- if (matchesKeyword(Keyword.SUPER) && _currentToken.next.type.isRelationalOperator) {
+ Expression _parseRelationalExpression() {
+ if (_matchesKeyword(Keyword.SUPER) && _currentToken.next.type.isRelationalOperator) {
Expression expression = new SuperExpression(andAdvance);
Token operator = andAdvance;
expression = new BinaryExpression(expression, operator, parseBitwiseOrExpression());
return expression;
}
Expression expression = parseBitwiseOrExpression();
- if (matchesKeyword(Keyword.AS)) {
+ if (_matchesKeyword(Keyword.AS)) {
Token asOperator = andAdvance;
expression = new AsExpression(expression, asOperator, parseTypeName());
- } else if (matchesKeyword(Keyword.IS)) {
+ } else if (_matchesKeyword(Keyword.IS)) {
Token isOperator = andAdvance;
Token notOperator = null;
- if (matches(TokenType.BANG)) {
+ if (_matches(TokenType.BANG)) {
notOperator = andAdvance;
}
expression = new IsExpression(expression, isOperator, notOperator, parseTypeName());
@@ -5664,7 +5774,7 @@
*
* @return the rethrow expression that was parsed
*/
- Expression parseRethrowExpression() => new RethrowExpression(expectKeyword(Keyword.RETHROW));
+ Expression _parseRethrowExpression() => new RethrowExpression(_expectKeyword(Keyword.RETHROW));
/**
* Parse a return statement.
@@ -5676,13 +5786,13 @@
*
* @return the return statement that was parsed
*/
- Statement parseReturnStatement() {
- Token returnKeyword = expectKeyword(Keyword.RETURN);
- if (matches(TokenType.SEMICOLON)) {
+ Statement _parseReturnStatement() {
+ Token returnKeyword = _expectKeyword(Keyword.RETURN);
+ if (_matches(TokenType.SEMICOLON)) {
return new ReturnStatement(returnKeyword, null, andAdvance);
}
Expression expression = parseExpression2();
- Token semicolon = expect(TokenType.SEMICOLON);
+ Token semicolon = _expect(TokenType.SEMICOLON);
return new ReturnStatement(returnKeyword, expression, semicolon);
}
@@ -5705,14 +5815,14 @@
* type
* @return the setter that was parsed
*/
- MethodDeclaration parseSetter(CommentAndMetadata commentAndMetadata, Token externalKeyword, Token staticKeyword, TypeName returnType) {
- Token propertyKeyword = expectKeyword(Keyword.SET);
+ MethodDeclaration _parseSetter(CommentAndMetadata commentAndMetadata, Token externalKeyword, Token staticKeyword, TypeName returnType) {
+ Token propertyKeyword = _expectKeyword(Keyword.SET);
SimpleIdentifier name = parseSimpleIdentifier();
FormalParameterList parameters = parseFormalParameterList();
- validateFormalParameterList(parameters);
- FunctionBody body = parseFunctionBody(externalKeyword != null || staticKeyword == null, ParserErrorCode.STATIC_SETTER_WITHOUT_BODY, false);
+ _validateFormalParameterList(parameters);
+ FunctionBody body = _parseFunctionBody(externalKeyword != null || staticKeyword == null, ParserErrorCode.STATIC_SETTER_WITHOUT_BODY, false);
if (externalKeyword != null && body is! EmptyFunctionBody) {
- reportErrorForCurrentToken(ParserErrorCode.EXTERNAL_SETTER_WITH_BODY, []);
+ _reportErrorForCurrentToken(ParserErrorCode.EXTERNAL_SETTER_WITH_BODY, []);
}
return new MethodDeclaration(commentAndMetadata.comment, commentAndMetadata.metadata, externalKeyword, staticKeyword, returnType, propertyKeyword, null, name, parameters, body);
}
@@ -5728,16 +5838,16 @@
*
* @return the shift expression that was parsed
*/
- Expression parseShiftExpression() {
+ Expression _parseShiftExpression() {
Expression expression;
- if (matchesKeyword(Keyword.SUPER) && _currentToken.next.type.isShiftOperator) {
+ if (_matchesKeyword(Keyword.SUPER) && _currentToken.next.type.isShiftOperator) {
expression = new SuperExpression(andAdvance);
} else {
- expression = parseAdditiveExpression();
+ expression = _parseAdditiveExpression();
}
while (_currentToken.type.isShiftOperator) {
Token operator = andAdvance;
- expression = new BinaryExpression(expression, operator, parseAdditiveExpression());
+ expression = new BinaryExpression(expression, operator, _parseAdditiveExpression());
}
return expression;
}
@@ -5752,14 +5862,14 @@
*
* @return the statements that were parsed
*/
- List<Statement> parseStatementList() {
+ List<Statement> _parseStatementList() {
List<Statement> statements = new List<Statement>();
Token statementStart = _currentToken;
- while (!matches(TokenType.EOF) && !matches(TokenType.CLOSE_CURLY_BRACKET) && !isSwitchMember()) {
+ while (!_matches(TokenType.EOF) && !_matches(TokenType.CLOSE_CURLY_BRACKET) && !_isSwitchMember()) {
statements.add(parseStatement2());
if (identical(_currentToken, statementStart)) {
- reportErrorForToken(ParserErrorCode.UNEXPECTED_TOKEN, _currentToken, [_currentToken.lexeme]);
- advance();
+ _reportErrorForToken(ParserErrorCode.UNEXPECTED_TOKEN, _currentToken, [_currentToken.lexeme]);
+ _advance();
}
statementStart = _currentToken;
}
@@ -5771,30 +5881,30 @@
*
* @return the string literal that was parsed
*/
- StringInterpolation parseStringInterpolation(Token string) {
+ StringInterpolation _parseStringInterpolation(Token string) {
List<InterpolationElement> elements = new List<InterpolationElement>();
- bool hasMore = matches(TokenType.STRING_INTERPOLATION_EXPRESSION) || matches(TokenType.STRING_INTERPOLATION_IDENTIFIER);
- elements.add(new InterpolationString(string, computeStringValue(string.lexeme, true, !hasMore)));
+ bool hasMore = _matches(TokenType.STRING_INTERPOLATION_EXPRESSION) || _matches(TokenType.STRING_INTERPOLATION_IDENTIFIER);
+ elements.add(new InterpolationString(string, _computeStringValue(string.lexeme, true, !hasMore)));
while (hasMore) {
- if (matches(TokenType.STRING_INTERPOLATION_EXPRESSION)) {
+ if (_matches(TokenType.STRING_INTERPOLATION_EXPRESSION)) {
Token openToken = andAdvance;
Expression expression = parseExpression2();
- Token rightBracket = expect(TokenType.CLOSE_CURLY_BRACKET);
+ Token rightBracket = _expect(TokenType.CLOSE_CURLY_BRACKET);
elements.add(new InterpolationExpression(openToken, expression, rightBracket));
} else {
Token openToken = andAdvance;
Expression expression = null;
- if (matchesKeyword(Keyword.THIS)) {
+ if (_matchesKeyword(Keyword.THIS)) {
expression = new ThisExpression(andAdvance);
} else {
expression = parseSimpleIdentifier();
}
elements.add(new InterpolationExpression(openToken, expression, null));
}
- if (matches(TokenType.STRING)) {
+ if (_matches(TokenType.STRING)) {
string = andAdvance;
- hasMore = matches(TokenType.STRING_INTERPOLATION_EXPRESSION) || matches(TokenType.STRING_INTERPOLATION_IDENTIFIER);
- elements.add(new InterpolationString(string, computeStringValue(string.lexeme, false, !hasMore)));
+ hasMore = _matches(TokenType.STRING_INTERPOLATION_EXPRESSION) || _matches(TokenType.STRING_INTERPOLATION_IDENTIFIER);
+ elements.add(new InterpolationString(string, _computeStringValue(string.lexeme, false, !hasMore)));
}
}
return new StringInterpolation(elements);
@@ -5810,11 +5920,11 @@
*
* @return the super constructor invocation that was parsed
*/
- SuperConstructorInvocation parseSuperConstructorInvocation() {
- Token keyword = expectKeyword(Keyword.SUPER);
+ SuperConstructorInvocation _parseSuperConstructorInvocation() {
+ Token keyword = _expectKeyword(Keyword.SUPER);
Token period = null;
SimpleIdentifier constructorName = null;
- if (matches(TokenType.PERIOD)) {
+ if (_matches(TokenType.PERIOD)) {
period = andAdvance;
constructorName = parseSimpleIdentifier();
}
@@ -5838,56 +5948,56 @@
*
* @return the switch statement that was parsed
*/
- SwitchStatement parseSwitchStatement() {
+ SwitchStatement _parseSwitchStatement() {
bool wasInSwitch = _inSwitch;
_inSwitch = true;
try {
Set<String> definedLabels = new Set<String>();
- Token keyword = expectKeyword(Keyword.SWITCH);
- Token leftParenthesis = expect(TokenType.OPEN_PAREN);
+ Token keyword = _expectKeyword(Keyword.SWITCH);
+ Token leftParenthesis = _expect(TokenType.OPEN_PAREN);
Expression expression = parseExpression2();
- Token rightParenthesis = expect(TokenType.CLOSE_PAREN);
- Token leftBracket = expect(TokenType.OPEN_CURLY_BRACKET);
+ Token rightParenthesis = _expect(TokenType.CLOSE_PAREN);
+ Token leftBracket = _expect(TokenType.OPEN_CURLY_BRACKET);
Token defaultKeyword = null;
List<SwitchMember> members = new List<SwitchMember>();
- while (!matches(TokenType.EOF) && !matches(TokenType.CLOSE_CURLY_BRACKET)) {
+ while (!_matches(TokenType.EOF) && !_matches(TokenType.CLOSE_CURLY_BRACKET)) {
List<Label> labels = new List<Label>();
- while (matchesIdentifier() && tokenMatches(peek(), TokenType.COLON)) {
+ while (_matchesIdentifier() && _tokenMatches(_peek(), TokenType.COLON)) {
SimpleIdentifier identifier = parseSimpleIdentifier();
String label = identifier.token.lexeme;
if (definedLabels.contains(label)) {
- reportErrorForToken(ParserErrorCode.DUPLICATE_LABEL_IN_SWITCH_STATEMENT, identifier.token, [label]);
+ _reportErrorForToken(ParserErrorCode.DUPLICATE_LABEL_IN_SWITCH_STATEMENT, identifier.token, [label]);
} else {
definedLabels.add(label);
}
- Token colon = expect(TokenType.COLON);
+ Token colon = _expect(TokenType.COLON);
labels.add(new Label(identifier, colon));
}
- if (matchesKeyword(Keyword.CASE)) {
+ if (_matchesKeyword(Keyword.CASE)) {
Token caseKeyword = andAdvance;
Expression caseExpression = parseExpression2();
- Token colon = expect(TokenType.COLON);
- members.add(new SwitchCase(labels, caseKeyword, caseExpression, colon, parseStatementList()));
+ Token colon = _expect(TokenType.COLON);
+ members.add(new SwitchCase(labels, caseKeyword, caseExpression, colon, _parseStatementList()));
if (defaultKeyword != null) {
- reportErrorForToken(ParserErrorCode.SWITCH_HAS_CASE_AFTER_DEFAULT_CASE, caseKeyword, []);
+ _reportErrorForToken(ParserErrorCode.SWITCH_HAS_CASE_AFTER_DEFAULT_CASE, caseKeyword, []);
}
- } else if (matchesKeyword(Keyword.DEFAULT)) {
+ } else if (_matchesKeyword(Keyword.DEFAULT)) {
if (defaultKeyword != null) {
- reportErrorForToken(ParserErrorCode.SWITCH_HAS_MULTIPLE_DEFAULT_CASES, peek(), []);
+ _reportErrorForToken(ParserErrorCode.SWITCH_HAS_MULTIPLE_DEFAULT_CASES, _peek(), []);
}
defaultKeyword = andAdvance;
- Token colon = expect(TokenType.COLON);
- members.add(new SwitchDefault(labels, defaultKeyword, colon, parseStatementList()));
+ Token colon = _expect(TokenType.COLON);
+ members.add(new SwitchDefault(labels, defaultKeyword, colon, _parseStatementList()));
} else {
// We need to advance, otherwise we could end up in an infinite loop, but this could be a
// lot smarter about recovering from the error.
- reportErrorForCurrentToken(ParserErrorCode.EXPECTED_CASE_OR_DEFAULT, []);
- while (!matches(TokenType.EOF) && !matches(TokenType.CLOSE_CURLY_BRACKET) && !matchesKeyword(Keyword.CASE) && !matchesKeyword(Keyword.DEFAULT)) {
- advance();
+ _reportErrorForCurrentToken(ParserErrorCode.EXPECTED_CASE_OR_DEFAULT, []);
+ while (!_matches(TokenType.EOF) && !_matches(TokenType.CLOSE_CURLY_BRACKET) && !_matchesKeyword(Keyword.CASE) && !_matchesKeyword(Keyword.DEFAULT)) {
+ _advance();
}
}
}
- Token rightBracket = expect(TokenType.CLOSE_CURLY_BRACKET);
+ Token rightBracket = _expect(TokenType.CLOSE_CURLY_BRACKET);
return new SwitchStatement(keyword, leftParenthesis, expression, rightParenthesis, leftBracket, members, rightBracket);
} finally {
_inSwitch = wasInSwitch;
@@ -5904,26 +6014,26 @@
*
* @return the symbol literal that was parsed
*/
- SymbolLiteral parseSymbolLiteral() {
+ SymbolLiteral _parseSymbolLiteral() {
Token poundSign = andAdvance;
List<Token> components = new List<Token>();
- if (matchesIdentifier()) {
+ if (_matchesIdentifier()) {
components.add(andAdvance);
- while (matches(TokenType.PERIOD)) {
- advance();
- if (matchesIdentifier()) {
+ while (_matches(TokenType.PERIOD)) {
+ _advance();
+ if (_matchesIdentifier()) {
components.add(andAdvance);
} else {
- reportErrorForCurrentToken(ParserErrorCode.MISSING_IDENTIFIER, []);
- components.add(createSyntheticToken(TokenType.IDENTIFIER));
+ _reportErrorForCurrentToken(ParserErrorCode.MISSING_IDENTIFIER, []);
+ components.add(_createSyntheticToken(TokenType.IDENTIFIER));
break;
}
}
} else if (_currentToken.isOperator) {
components.add(andAdvance);
} else {
- reportErrorForCurrentToken(ParserErrorCode.MISSING_IDENTIFIER, []);
- components.add(createSyntheticToken(TokenType.IDENTIFIER));
+ _reportErrorForCurrentToken(ParserErrorCode.MISSING_IDENTIFIER, []);
+ components.add(_createSyntheticToken(TokenType.IDENTIFIER));
}
return new SymbolLiteral(poundSign, new List.from(components));
}
@@ -5938,11 +6048,11 @@
*
* @return the throw expression that was parsed
*/
- Expression parseThrowExpression() {
- Token keyword = expectKeyword(Keyword.THROW);
- if (matches(TokenType.SEMICOLON) || matches(TokenType.CLOSE_PAREN)) {
- reportErrorForToken(ParserErrorCode.MISSING_EXPRESSION_IN_THROW, _currentToken, []);
- return new ThrowExpression(keyword, createSyntheticIdentifier());
+ Expression _parseThrowExpression() {
+ Token keyword = _expectKeyword(Keyword.THROW);
+ if (_matches(TokenType.SEMICOLON) || _matches(TokenType.CLOSE_PAREN)) {
+ _reportErrorForToken(ParserErrorCode.MISSING_EXPRESSION_IN_THROW, _currentToken, []);
+ return new ThrowExpression(keyword, _createSyntheticIdentifier());
}
Expression expression = parseExpression2();
return new ThrowExpression(keyword, expression);
@@ -5958,11 +6068,11 @@
*
* @return the throw expression that was parsed
*/
- Expression parseThrowExpressionWithoutCascade() {
- Token keyword = expectKeyword(Keyword.THROW);
- if (matches(TokenType.SEMICOLON) || matches(TokenType.CLOSE_PAREN)) {
- reportErrorForToken(ParserErrorCode.MISSING_EXPRESSION_IN_THROW, _currentToken, []);
- return new ThrowExpression(keyword, createSyntheticIdentifier());
+ Expression _parseThrowExpressionWithoutCascade() {
+ Token keyword = _expectKeyword(Keyword.THROW);
+ if (_matches(TokenType.SEMICOLON) || _matches(TokenType.CLOSE_PAREN)) {
+ _reportErrorForToken(ParserErrorCode.MISSING_EXPRESSION_IN_THROW, _currentToken, []);
+ return new ThrowExpression(keyword, _createSyntheticIdentifier());
}
Expression expression = parseExpressionWithoutCascade();
return new ThrowExpression(keyword, expression);
@@ -5988,15 +6098,15 @@
*
* @return the try statement that was parsed
*/
- Statement parseTryStatement() {
- Token tryKeyword = expectKeyword(Keyword.TRY);
+ Statement _parseTryStatement() {
+ Token tryKeyword = _expectKeyword(Keyword.TRY);
Block body = parseBlock();
List<CatchClause> catchClauses = new List<CatchClause>();
Block finallyClause = null;
- while (matchesString(_ON) || matchesKeyword(Keyword.CATCH)) {
+ while (_matchesString(_ON) || _matchesKeyword(Keyword.CATCH)) {
Token onKeyword = null;
TypeName exceptionType = null;
- if (matchesString(_ON)) {
+ if (_matchesString(_ON)) {
onKeyword = andAdvance;
exceptionType = parseTypeName();
}
@@ -6006,26 +6116,26 @@
Token comma = null;
SimpleIdentifier stackTraceParameter = null;
Token rightParenthesis = null;
- if (matchesKeyword(Keyword.CATCH)) {
+ if (_matchesKeyword(Keyword.CATCH)) {
catchKeyword = andAdvance;
- leftParenthesis = expect(TokenType.OPEN_PAREN);
+ leftParenthesis = _expect(TokenType.OPEN_PAREN);
exceptionParameter = parseSimpleIdentifier();
- if (matches(TokenType.COMMA)) {
+ if (_matches(TokenType.COMMA)) {
comma = andAdvance;
stackTraceParameter = parseSimpleIdentifier();
}
- rightParenthesis = expect(TokenType.CLOSE_PAREN);
+ rightParenthesis = _expect(TokenType.CLOSE_PAREN);
}
Block catchBody = parseBlock();
catchClauses.add(new CatchClause(onKeyword, exceptionType, catchKeyword, leftParenthesis, exceptionParameter, comma, stackTraceParameter, rightParenthesis, catchBody));
}
Token finallyKeyword = null;
- if (matchesKeyword(Keyword.FINALLY)) {
+ if (_matchesKeyword(Keyword.FINALLY)) {
finallyKeyword = andAdvance;
finallyClause = parseBlock();
} else {
if (catchClauses.isEmpty) {
- reportErrorForCurrentToken(ParserErrorCode.MISSING_CATCH_OR_FINALLY, []);
+ _reportErrorForCurrentToken(ParserErrorCode.MISSING_CATCH_OR_FINALLY, []);
}
}
return new TryStatement(tryKeyword, body, catchClauses, finallyKeyword, finallyClause);
@@ -6058,24 +6168,24 @@
* @param commentAndMetadata the metadata to be associated with the member
* @return the type alias that was parsed
*/
- TypeAlias parseTypeAlias(CommentAndMetadata commentAndMetadata) {
- Token keyword = expectKeyword(Keyword.TYPEDEF);
- if (matchesIdentifier()) {
- Token next = peek();
- if (tokenMatches(next, TokenType.LT)) {
- next = skipTypeParameterList(next);
- if (next != null && tokenMatches(next, TokenType.EQ)) {
- TypeAlias typeAlias = parseClassTypeAlias(commentAndMetadata, null, keyword);
- reportErrorForToken(ParserErrorCode.DEPRECATED_CLASS_TYPE_ALIAS, keyword, []);
+ TypeAlias _parseTypeAlias(CommentAndMetadata commentAndMetadata) {
+ Token keyword = _expectKeyword(Keyword.TYPEDEF);
+ if (_matchesIdentifier()) {
+ Token next = _peek();
+ if (_tokenMatches(next, TokenType.LT)) {
+ next = _skipTypeParameterList(next);
+ if (next != null && _tokenMatches(next, TokenType.EQ)) {
+ TypeAlias typeAlias = _parseClassTypeAlias(commentAndMetadata, null, keyword);
+ _reportErrorForToken(ParserErrorCode.DEPRECATED_CLASS_TYPE_ALIAS, keyword, []);
return typeAlias;
}
- } else if (tokenMatches(next, TokenType.EQ)) {
- TypeAlias typeAlias = parseClassTypeAlias(commentAndMetadata, null, keyword);
- reportErrorForToken(ParserErrorCode.DEPRECATED_CLASS_TYPE_ALIAS, keyword, []);
+ } else if (_tokenMatches(next, TokenType.EQ)) {
+ TypeAlias typeAlias = _parseClassTypeAlias(commentAndMetadata, null, keyword);
+ _reportErrorForToken(ParserErrorCode.DEPRECATED_CLASS_TYPE_ALIAS, keyword, []);
return typeAlias;
}
}
- return parseFunctionTypeAlias(commentAndMetadata, keyword);
+ return _parseFunctionTypeAlias(commentAndMetadata, keyword);
}
/**
@@ -6092,26 +6202,26 @@
*
* @return the unary expression that was parsed
*/
- Expression parseUnaryExpression() {
- if (matches(TokenType.MINUS) || matches(TokenType.BANG) || matches(TokenType.TILDE)) {
+ Expression _parseUnaryExpression() {
+ if (_matches(TokenType.MINUS) || _matches(TokenType.BANG) || _matches(TokenType.TILDE)) {
Token operator = andAdvance;
- if (matchesKeyword(Keyword.SUPER)) {
- if (tokenMatches(peek(), TokenType.OPEN_SQUARE_BRACKET) || tokenMatches(peek(), TokenType.PERIOD)) {
+ if (_matchesKeyword(Keyword.SUPER)) {
+ if (_tokenMatches(_peek(), TokenType.OPEN_SQUARE_BRACKET) || _tokenMatches(_peek(), TokenType.PERIOD)) {
// "prefixOperator unaryExpression"
// --> "prefixOperator postfixExpression"
// --> "prefixOperator primary selector*"
// --> "prefixOperator 'super' assignableSelector selector*"
- return new PrefixExpression(operator, parseUnaryExpression());
+ return new PrefixExpression(operator, _parseUnaryExpression());
}
return new PrefixExpression(operator, new SuperExpression(andAdvance));
}
- return new PrefixExpression(operator, parseUnaryExpression());
+ return new PrefixExpression(operator, _parseUnaryExpression());
} else if (_currentToken.type.isIncrementOperator) {
Token operator = andAdvance;
- if (matchesKeyword(Keyword.SUPER)) {
- if (tokenMatches(peek(), TokenType.OPEN_SQUARE_BRACKET) || tokenMatches(peek(), TokenType.PERIOD)) {
+ if (_matchesKeyword(Keyword.SUPER)) {
+ if (_tokenMatches(_peek(), TokenType.OPEN_SQUARE_BRACKET) || _tokenMatches(_peek(), TokenType.PERIOD)) {
// --> "prefixOperator 'super' assignableSelector selector*"
- return new PrefixExpression(operator, parseUnaryExpression());
+ return new PrefixExpression(operator, _parseUnaryExpression());
}
//
// Even though it is not valid to use an incrementing operator ('++' or '--') before 'super',
@@ -6128,16 +6238,16 @@
return new PrefixExpression(firstOperator, new PrefixExpression(secondOperator, new SuperExpression(andAdvance)));
} else {
// Invalid operator before 'super'
- reportErrorForCurrentToken(ParserErrorCode.INVALID_OPERATOR_FOR_SUPER, [operator.lexeme]);
+ _reportErrorForCurrentToken(ParserErrorCode.INVALID_OPERATOR_FOR_SUPER, [operator.lexeme]);
return new PrefixExpression(operator, new SuperExpression(andAdvance));
}
}
- return new PrefixExpression(operator, parseAssignableExpression(false));
- } else if (matches(TokenType.PLUS)) {
- reportErrorForCurrentToken(ParserErrorCode.MISSING_IDENTIFIER, []);
- return createSyntheticIdentifier();
+ return new PrefixExpression(operator, _parseAssignableExpression(false));
+ } else if (_matches(TokenType.PLUS)) {
+ _reportErrorForCurrentToken(ParserErrorCode.MISSING_IDENTIFIER, []);
+ return _createSyntheticIdentifier();
}
- return parsePostfixExpression();
+ return _parsePostfixExpression();
}
/**
@@ -6150,12 +6260,12 @@
*
* @return the variable declaration that was parsed
*/
- VariableDeclaration parseVariableDeclaration() {
- CommentAndMetadata commentAndMetadata = parseCommentAndMetadata();
+ VariableDeclaration _parseVariableDeclaration() {
+ CommentAndMetadata commentAndMetadata = _parseCommentAndMetadata();
SimpleIdentifier name = parseSimpleIdentifier();
Token equals = null;
Expression initializer = null;
- if (matches(TokenType.EQ)) {
+ if (_matches(TokenType.EQ)) {
equals = andAdvance;
initializer = parseExpression2();
}
@@ -6173,9 +6283,9 @@
* @param commentAndMetadata the metadata to be associated with the variable declaration list
* @return the variable declaration list that was parsed
*/
- VariableDeclarationList parseVariableDeclarationListAfterMetadata(CommentAndMetadata commentAndMetadata) {
- FinalConstVarOrType holder = parseFinalConstVarOrType(false);
- return parseVariableDeclarationListAfterType(commentAndMetadata, holder.keyword, holder.type);
+ VariableDeclarationList _parseVariableDeclarationListAfterMetadata(CommentAndMetadata commentAndMetadata) {
+ FinalConstVarOrType holder = _parseFinalConstVarOrType(false);
+ return _parseVariableDeclarationListAfterType(commentAndMetadata, holder.keyword, holder.type);
}
/**
@@ -6193,15 +6303,15 @@
* @param type the type of the variables in the list
* @return the variable declaration list that was parsed
*/
- VariableDeclarationList parseVariableDeclarationListAfterType(CommentAndMetadata commentAndMetadata, Token keyword, TypeName type) {
- if (type != null && keyword != null && tokenMatchesKeyword(keyword, Keyword.VAR)) {
- reportErrorForToken(ParserErrorCode.VAR_AND_TYPE, keyword, []);
+ VariableDeclarationList _parseVariableDeclarationListAfterType(CommentAndMetadata commentAndMetadata, Token keyword, TypeName type) {
+ if (type != null && keyword != null && _tokenMatchesKeyword(keyword, Keyword.VAR)) {
+ _reportErrorForToken(ParserErrorCode.VAR_AND_TYPE, keyword, []);
}
List<VariableDeclaration> variables = new List<VariableDeclaration>();
- variables.add(parseVariableDeclaration());
- while (matches(TokenType.COMMA)) {
- advance();
- variables.add(parseVariableDeclaration());
+ variables.add(_parseVariableDeclaration());
+ while (_matches(TokenType.COMMA)) {
+ _advance();
+ variables.add(_parseVariableDeclaration());
}
return new VariableDeclarationList(commentAndMetadata != null ? commentAndMetadata.comment : null, commentAndMetadata != null ? commentAndMetadata.metadata : null, keyword, type, variables);
}
@@ -6218,16 +6328,16 @@
* statement, or `null` if there is no attempt at parsing the comment and metadata
* @return the variable declaration statement that was parsed
*/
- VariableDeclarationStatement parseVariableDeclarationStatementAfterMetadata(CommentAndMetadata commentAndMetadata) {
+ VariableDeclarationStatement _parseVariableDeclarationStatementAfterMetadata(CommentAndMetadata commentAndMetadata) {
// Token startToken = currentToken;
- VariableDeclarationList variableList = parseVariableDeclarationListAfterMetadata(commentAndMetadata);
+ VariableDeclarationList variableList = _parseVariableDeclarationListAfterMetadata(commentAndMetadata);
// if (!matches(TokenType.SEMICOLON)) {
// if (matches(startToken, Keyword.VAR) && isTypedIdentifier(startToken.getNext())) {
// // TODO(brianwilkerson) This appears to be of the form "var type variable". We should do
// // a better job of recovering in this case.
// }
// }
- Token semicolon = expect(TokenType.SEMICOLON);
+ Token semicolon = _expect(TokenType.SEMICOLON);
return new VariableDeclarationStatement(variableList, semicolon);
}
@@ -6246,9 +6356,9 @@
* @param type the type of the variables in the list
* @return the variable declaration statement that was parsed
*/
- VariableDeclarationStatement parseVariableDeclarationStatementAfterType(CommentAndMetadata commentAndMetadata, Token keyword, TypeName type) {
- VariableDeclarationList variableList = parseVariableDeclarationListAfterType(commentAndMetadata, keyword, type);
- Token semicolon = expect(TokenType.SEMICOLON);
+ VariableDeclarationStatement _parseVariableDeclarationStatementAfterType(CommentAndMetadata commentAndMetadata, Token keyword, TypeName type) {
+ VariableDeclarationList variableList = _parseVariableDeclarationListAfterType(commentAndMetadata, keyword, type);
+ Token semicolon = _expect(TokenType.SEMICOLON);
return new VariableDeclarationStatement(variableList, semicolon);
}
@@ -6262,14 +6372,14 @@
*
* @return the while statement that was parsed
*/
- Statement parseWhileStatement() {
+ Statement _parseWhileStatement() {
bool wasInLoop = _inLoop;
_inLoop = true;
try {
- Token keyword = expectKeyword(Keyword.WHILE);
- Token leftParenthesis = expect(TokenType.OPEN_PAREN);
+ Token keyword = _expectKeyword(Keyword.WHILE);
+ Token leftParenthesis = _expect(TokenType.OPEN_PAREN);
Expression condition = parseExpression2();
- Token rightParenthesis = expect(TokenType.CLOSE_PAREN);
+ Token rightParenthesis = _expect(TokenType.CLOSE_PAREN);
Statement body = parseStatement2();
return new WhileStatement(keyword, leftParenthesis, condition, rightParenthesis, body);
} finally {
@@ -6283,7 +6393,7 @@
*
* @return the token that is immediately after the current token
*/
- Token peek() => _currentToken.next;
+ Token _peek() => _currentToken.next;
/**
* Return the token that is the given distance after the current token.
@@ -6292,7 +6402,7 @@
* `1` is the next token, etc.
* @return the token that is the given distance after the current token
*/
- Token peekAt(int distance) {
+ Token _peekAt(int distance) {
Token token = _currentToken;
for (int i = 0; i < distance; i++) {
token = token.next;
@@ -6305,7 +6415,7 @@
*
* @param error the error to be reported
*/
- void reportError(AnalysisError error) {
+ void _reportError(AnalysisError error) {
if (_errorListenerLock != 0) {
return;
}
@@ -6318,8 +6428,8 @@
* @param errorCode the error code of the error to be reported
* @param arguments the arguments to the error, used to compose the error message
*/
- void reportErrorForCurrentToken(ParserErrorCode errorCode, List<Object> arguments) {
- reportErrorForToken(errorCode, _currentToken, arguments);
+ void _reportErrorForCurrentToken(ParserErrorCode errorCode, List<Object> arguments) {
+ _reportErrorForToken(errorCode, _currentToken, arguments);
}
/**
@@ -6329,8 +6439,8 @@
* @param node the node specifying the location of the error
* @param arguments the arguments to the error, used to compose the error message
*/
- void reportErrorForNode(ParserErrorCode errorCode, AstNode node, List<Object> arguments) {
- reportError(new AnalysisError.con2(_source, node.offset, node.length, errorCode, arguments));
+ void _reportErrorForNode(ParserErrorCode errorCode, AstNode node, List<Object> arguments) {
+ _reportError(new AnalysisError.con2(_source, node.offset, node.length, errorCode, arguments));
}
/**
@@ -6340,14 +6450,14 @@
* @param token the token specifying the location of the error
* @param arguments the arguments to the error, used to compose the error message
*/
- void reportErrorForToken(ParserErrorCode errorCode, Token token, List<Object> arguments) {
- reportError(new AnalysisError.con2(_source, token.offset, token.length, errorCode, arguments));
+ void _reportErrorForToken(ParserErrorCode errorCode, Token token, List<Object> arguments) {
+ _reportError(new AnalysisError.con2(_source, token.offset, token.length, errorCode, arguments));
}
/**
* Skips a block with all containing blocks.
*/
- void skipBlock() {
+ void _skipBlock() {
_currentToken = (_currentToken as BeginToken).endToken.next;
}
@@ -6368,24 +6478,24 @@
* @param startToken the token at which parsing is to begin
* @return the token following the type that was parsed
*/
- Token skipFinalConstVarOrType(Token startToken) {
- if (tokenMatchesKeyword(startToken, Keyword.FINAL) || tokenMatchesKeyword(startToken, Keyword.CONST)) {
+ Token _skipFinalConstVarOrType(Token startToken) {
+ if (_tokenMatchesKeyword(startToken, Keyword.FINAL) || _tokenMatchesKeyword(startToken, Keyword.CONST)) {
Token next = startToken.next;
- if (tokenMatchesIdentifier(next)) {
+ if (_tokenMatchesIdentifier(next)) {
Token next2 = next.next;
// "Type parameter" or "Type<" or "prefix.Type"
- if (tokenMatchesIdentifier(next2) || tokenMatches(next2, TokenType.LT) || tokenMatches(next2, TokenType.PERIOD)) {
- return skipTypeName(next);
+ if (_tokenMatchesIdentifier(next2) || _tokenMatches(next2, TokenType.LT) || _tokenMatches(next2, TokenType.PERIOD)) {
+ return _skipTypeName(next);
}
// "parameter"
return next;
}
- } else if (tokenMatchesKeyword(startToken, Keyword.VAR)) {
+ } else if (_tokenMatchesKeyword(startToken, Keyword.VAR)) {
return startToken.next;
- } else if (tokenMatchesIdentifier(startToken)) {
+ } else if (_tokenMatchesIdentifier(startToken)) {
Token next = startToken.next;
- if (tokenMatchesIdentifier(next) || tokenMatches(next, TokenType.LT) || tokenMatchesKeyword(next, Keyword.THIS) || (tokenMatches(next, TokenType.PERIOD) && tokenMatchesIdentifier(next.next) && (tokenMatchesIdentifier(next.next.next) || tokenMatches(next.next.next, TokenType.LT) || tokenMatchesKeyword(next.next.next, Keyword.THIS)))) {
- return skipReturnType(startToken);
+ if (_tokenMatchesIdentifier(next) || _tokenMatches(next, TokenType.LT) || _tokenMatchesKeyword(next, Keyword.THIS) || (_tokenMatches(next, TokenType.PERIOD) && _tokenMatchesIdentifier(next.next) && (_tokenMatchesIdentifier(next.next.next) || _tokenMatches(next.next.next, TokenType.LT) || _tokenMatchesKeyword(next.next.next, Keyword.THIS)))) {
+ return _skipReturnType(startToken);
}
}
return null;
@@ -6428,45 +6538,45 @@
* @param startToken the token at which parsing is to begin
* @return the token following the formal parameter list that was parsed
*/
- Token skipFormalParameterList(Token startToken) {
- if (!tokenMatches(startToken, TokenType.OPEN_PAREN)) {
+ Token _skipFormalParameterList(Token startToken) {
+ if (!_tokenMatches(startToken, TokenType.OPEN_PAREN)) {
return null;
}
Token next = startToken.next;
- if (tokenMatches(next, TokenType.CLOSE_PAREN)) {
+ if (_tokenMatches(next, TokenType.CLOSE_PAREN)) {
return next.next;
}
//
// Look to see whether the token after the open parenthesis is something that should only occur
// at the beginning of a parameter list.
//
- if (matchesAny(next, [
+ if (next.matchesAny([
TokenType.AT,
TokenType.OPEN_SQUARE_BRACKET,
- TokenType.OPEN_CURLY_BRACKET]) || tokenMatchesKeyword(next, Keyword.VOID) || (tokenMatchesIdentifier(next) && (matchesAny(next.next, [TokenType.COMMA, TokenType.CLOSE_PAREN])))) {
- return skipPastMatchingToken(startToken);
+ TokenType.OPEN_CURLY_BRACKET]) || _tokenMatchesKeyword(next, Keyword.VOID) || (_tokenMatchesIdentifier(next) && (next.next.matchesAny([TokenType.COMMA, TokenType.CLOSE_PAREN])))) {
+ return _skipPastMatchingToken(startToken);
}
//
// Look to see whether the first parameter is a function typed parameter without a return type.
//
- if (tokenMatchesIdentifier(next) && tokenMatches(next.next, TokenType.OPEN_PAREN)) {
- Token afterParameters = skipFormalParameterList(next.next);
- if (afterParameters != null && (matchesAny(afterParameters, [TokenType.COMMA, TokenType.CLOSE_PAREN]))) {
- return skipPastMatchingToken(startToken);
+ if (_tokenMatchesIdentifier(next) && _tokenMatches(next.next, TokenType.OPEN_PAREN)) {
+ Token afterParameters = _skipFormalParameterList(next.next);
+ if (afterParameters != null && (afterParameters.matchesAny([TokenType.COMMA, TokenType.CLOSE_PAREN]))) {
+ return _skipPastMatchingToken(startToken);
}
}
//
// Look to see whether the first parameter has a type or is a function typed parameter with a
// return type.
//
- Token afterType = skipFinalConstVarOrType(next);
+ Token afterType = _skipFinalConstVarOrType(next);
if (afterType == null) {
return null;
}
- if (skipSimpleIdentifier(afterType) == null) {
+ if (_skipSimpleIdentifier(afterType) == null) {
return null;
}
- return skipPastMatchingToken(startToken);
+ return _skipPastMatchingToken(startToken);
}
/**
@@ -6476,7 +6586,7 @@
* @param startToken the token that is assumed to be a being token
* @return the token following the matching end token
*/
- Token skipPastMatchingToken(Token startToken) {
+ Token _skipPastMatchingToken(Token startToken) {
if (startToken is! BeginToken) {
return null;
}
@@ -6503,14 +6613,14 @@
* @param startToken the token at which parsing is to begin
* @return the token following the prefixed identifier that was parsed
*/
- Token skipPrefixedIdentifier(Token startToken) {
- Token token = skipSimpleIdentifier(startToken);
+ Token _skipPrefixedIdentifier(Token startToken) {
+ Token token = _skipSimpleIdentifier(startToken);
if (token == null) {
return null;
- } else if (!tokenMatches(token, TokenType.PERIOD)) {
+ } else if (!_tokenMatches(token, TokenType.PERIOD)) {
return token;
}
- return skipSimpleIdentifier(token.next);
+ return _skipSimpleIdentifier(token.next);
}
/**
@@ -6529,11 +6639,11 @@
* @param startToken the token at which parsing is to begin
* @return the token following the return type that was parsed
*/
- Token skipReturnType(Token startToken) {
- if (tokenMatchesKeyword(startToken, Keyword.VOID)) {
+ Token _skipReturnType(Token startToken) {
+ if (_tokenMatchesKeyword(startToken, Keyword.VOID)) {
return startToken.next;
} else {
- return skipTypeName(startToken);
+ return _skipTypeName(startToken);
}
}
@@ -6553,8 +6663,8 @@
* @param startToken the token at which parsing is to begin
* @return the token following the simple identifier that was parsed
*/
- Token skipSimpleIdentifier(Token startToken) {
- if (tokenMatches(startToken, TokenType.IDENTIFIER) || (tokenMatches(startToken, TokenType.KEYWORD) && (startToken as KeywordToken).keyword.isPseudoKeyword)) {
+ Token _skipSimpleIdentifier(Token startToken) {
+ if (_tokenMatches(startToken, TokenType.IDENTIFIER) || (_tokenMatches(startToken, TokenType.KEYWORD) && (startToken as KeywordToken).keyword.isPseudoKeyword)) {
return startToken.next;
}
return null;
@@ -6571,7 +6681,7 @@
* @param startToken the token at which parsing is to begin
* @return the string literal that was parsed
*/
- Token skipStringInterpolation(Token startToken) {
+ Token _skipStringInterpolation(Token startToken) {
Token token = startToken;
TokenType type = token.type;
while (identical(type, TokenType.STRING_INTERPOLATION_EXPRESSION) || identical(type, TokenType.STRING_INTERPOLATION_IDENTIFIER)) {
@@ -6592,7 +6702,7 @@
} else if (identical(type, TokenType.CLOSE_CURLY_BRACKET)) {
bracketNestingLevel--;
} else if (identical(type, TokenType.STRING)) {
- token = skipStringLiteral(token);
+ token = _skipStringLiteral(token);
if (token == null) {
return null;
}
@@ -6635,13 +6745,13 @@
* @param startToken the token at which parsing is to begin
* @return the token following the string literal that was parsed
*/
- Token skipStringLiteral(Token startToken) {
+ Token _skipStringLiteral(Token startToken) {
Token token = startToken;
- while (token != null && tokenMatches(token, TokenType.STRING)) {
+ while (token != null && _tokenMatches(token, TokenType.STRING)) {
token = token.next;
TokenType type = token.type;
if (identical(type, TokenType.STRING_INTERPOLATION_EXPRESSION) || identical(type, TokenType.STRING_INTERPOLATION_IDENTIFIER)) {
- token = skipStringInterpolation(token);
+ token = _skipStringInterpolation(token);
}
}
if (identical(token, startToken)) {
@@ -6668,17 +6778,17 @@
* @param startToken the token at which parsing is to begin
* @return the token following the type argument list that was parsed
*/
- Token skipTypeArgumentList(Token startToken) {
+ Token _skipTypeArgumentList(Token startToken) {
Token token = startToken;
- if (!tokenMatches(token, TokenType.LT)) {
+ if (!_tokenMatches(token, TokenType.LT)) {
return null;
}
- token = skipTypeName(token.next);
+ token = _skipTypeName(token.next);
if (token == null) {
return null;
}
- while (tokenMatches(token, TokenType.COMMA)) {
- token = skipTypeName(token.next);
+ while (_tokenMatches(token, TokenType.COMMA)) {
+ token = _skipTypeName(token.next);
if (token == null) {
return null;
}
@@ -6708,13 +6818,13 @@
* @param startToken the token at which parsing is to begin
* @return the token following the type name that was parsed
*/
- Token skipTypeName(Token startToken) {
- Token token = skipPrefixedIdentifier(startToken);
+ Token _skipTypeName(Token startToken) {
+ Token token = _skipPrefixedIdentifier(startToken);
if (token == null) {
return null;
}
- if (tokenMatches(token, TokenType.LT)) {
- token = skipTypeArgumentList(token);
+ if (_tokenMatches(token, TokenType.LT)) {
+ token = _skipTypeArgumentList(token);
}
return token;
}
@@ -6735,8 +6845,8 @@
* @param startToken the token at which parsing is to begin
* @return the token following the type parameter list that was parsed
*/
- Token skipTypeParameterList(Token startToken) {
- if (!tokenMatches(startToken, TokenType.LT)) {
+ Token _skipTypeParameterList(Token startToken) {
+ if (!_tokenMatches(startToken, TokenType.LT)) {
return null;
}
//
@@ -6746,22 +6856,22 @@
int depth = 1;
Token next = startToken.next;
while (depth > 0) {
- if (tokenMatches(next, TokenType.EOF)) {
+ if (_tokenMatches(next, TokenType.EOF)) {
return null;
- } else if (tokenMatches(next, TokenType.LT)) {
+ } else if (_tokenMatches(next, TokenType.LT)) {
depth++;
- } else if (tokenMatches(next, TokenType.GT)) {
+ } else if (_tokenMatches(next, TokenType.GT)) {
depth--;
- } else if (tokenMatches(next, TokenType.GT_EQ)) {
+ } else if (_tokenMatches(next, TokenType.GT_EQ)) {
if (depth == 1) {
Token fakeEquals = new Token(TokenType.EQ, next.offset + 2);
fakeEquals.setNextWithoutSettingPrevious(next.next);
return fakeEquals;
}
depth--;
- } else if (tokenMatches(next, TokenType.GT_GT)) {
+ } else if (_tokenMatches(next, TokenType.GT_GT)) {
depth -= 2;
- } else if (tokenMatches(next, TokenType.GT_GT_EQ)) {
+ } else if (_tokenMatches(next, TokenType.GT_GT_EQ)) {
if (depth < 2) {
return null;
} else if (depth == 2) {
@@ -6783,7 +6893,7 @@
* @param type the type of token that is being tested for
* @return `true` if the given token has the given type
*/
- bool tokenMatches(Token token, TokenType type) => identical(token.type, type);
+ bool _tokenMatches(Token token, TokenType type) => identical(token.type, type);
/**
* Return `true` if the given token is a valid identifier. Valid identifiers include
@@ -6791,7 +6901,7 @@
*
* @return `true` if the given token is a valid identifier
*/
- bool tokenMatchesIdentifier(Token token) => tokenMatches(token, TokenType.IDENTIFIER) || (tokenMatches(token, TokenType.KEYWORD) && (token as KeywordToken).keyword.isPseudoKeyword);
+ bool _tokenMatchesIdentifier(Token token) => _tokenMatches(token, TokenType.IDENTIFIER) || (_tokenMatches(token, TokenType.KEYWORD) && (token as KeywordToken).keyword.isPseudoKeyword);
/**
* Return `true` if the given token matches the given keyword.
@@ -6800,7 +6910,7 @@
* @param keyword the keyword that is being tested for
* @return `true` if the given token matches the given keyword
*/
- bool tokenMatchesKeyword(Token token, Keyword keyword) => identical(token.type, TokenType.KEYWORD) && identical((token as KeywordToken).keyword, keyword);
+ bool _tokenMatchesKeyword(Token token, Keyword keyword) => identical(token.type, TokenType.KEYWORD) && identical((token as KeywordToken).keyword, keyword);
/**
* Translate the characters at the given index in the given string, appending the translated
@@ -6811,7 +6921,7 @@
* @param index the index of the character to be translated
* @return the index of the next character to be translated
*/
- int translateCharacter(JavaStringBuilder builder, String lexeme, int index) {
+ int _translateCharacter(JavaStringBuilder builder, String lexeme, int index) {
int currentChar = lexeme.codeUnitAt(index);
if (currentChar != 0x5C) {
builder.appendChar(currentChar);
@@ -6847,14 +6957,14 @@
} else if (currentChar == 0x78) {
if (currentIndex + 2 >= length) {
// Illegal escape sequence: not enough hex digits
- reportErrorForCurrentToken(ParserErrorCode.INVALID_HEX_ESCAPE, []);
+ _reportErrorForCurrentToken(ParserErrorCode.INVALID_HEX_ESCAPE, []);
return length;
}
int firstDigit = lexeme.codeUnitAt(currentIndex + 1);
int secondDigit = lexeme.codeUnitAt(currentIndex + 2);
- if (!isHexDigit(firstDigit) || !isHexDigit(secondDigit)) {
+ if (!_isHexDigit(firstDigit) || !_isHexDigit(secondDigit)) {
// Illegal escape sequence: invalid hex digit
- reportErrorForCurrentToken(ParserErrorCode.INVALID_HEX_ESCAPE, []);
+ _reportErrorForCurrentToken(ParserErrorCode.INVALID_HEX_ESCAPE, []);
} else {
builder.appendChar(((Character.digit(firstDigit, 16) << 4) + Character.digit(secondDigit, 16)));
}
@@ -6863,7 +6973,7 @@
currentIndex++;
if (currentIndex >= length) {
// Illegal escape sequence: not enough hex digits
- reportErrorForCurrentToken(ParserErrorCode.INVALID_UNICODE_ESCAPE, []);
+ _reportErrorForCurrentToken(ParserErrorCode.INVALID_UNICODE_ESCAPE, []);
return length;
}
currentChar = lexeme.codeUnitAt(currentIndex);
@@ -6871,16 +6981,16 @@
currentIndex++;
if (currentIndex >= length) {
// Illegal escape sequence: incomplete escape
- reportErrorForCurrentToken(ParserErrorCode.INVALID_UNICODE_ESCAPE, []);
+ _reportErrorForCurrentToken(ParserErrorCode.INVALID_UNICODE_ESCAPE, []);
return length;
}
currentChar = lexeme.codeUnitAt(currentIndex);
int digitCount = 0;
int value = 0;
while (currentChar != 0x7D) {
- if (!isHexDigit(currentChar)) {
+ if (!_isHexDigit(currentChar)) {
// Illegal escape sequence: invalid hex digit
- reportErrorForCurrentToken(ParserErrorCode.INVALID_UNICODE_ESCAPE, []);
+ _reportErrorForCurrentToken(ParserErrorCode.INVALID_UNICODE_ESCAPE, []);
currentIndex++;
while (currentIndex < length && lexeme.codeUnitAt(currentIndex) != 0x7D) {
currentIndex++;
@@ -6892,32 +7002,32 @@
currentIndex++;
if (currentIndex >= length) {
// Illegal escape sequence: incomplete escape
- reportErrorForCurrentToken(ParserErrorCode.INVALID_UNICODE_ESCAPE, []);
+ _reportErrorForCurrentToken(ParserErrorCode.INVALID_UNICODE_ESCAPE, []);
return length;
}
currentChar = lexeme.codeUnitAt(currentIndex);
}
if (digitCount < 1 || digitCount > 6) {
// Illegal escape sequence: not enough or too many hex digits
- reportErrorForCurrentToken(ParserErrorCode.INVALID_UNICODE_ESCAPE, []);
+ _reportErrorForCurrentToken(ParserErrorCode.INVALID_UNICODE_ESCAPE, []);
}
- appendScalarValue(builder, lexeme.substring(index, currentIndex + 1), value, index, currentIndex);
+ _appendScalarValue(builder, lexeme.substring(index, currentIndex + 1), value, index, currentIndex);
return currentIndex + 1;
} else {
if (currentIndex + 3 >= length) {
// Illegal escape sequence: not enough hex digits
- reportErrorForCurrentToken(ParserErrorCode.INVALID_UNICODE_ESCAPE, []);
+ _reportErrorForCurrentToken(ParserErrorCode.INVALID_UNICODE_ESCAPE, []);
return length;
}
int firstDigit = currentChar;
int secondDigit = lexeme.codeUnitAt(currentIndex + 1);
int thirdDigit = lexeme.codeUnitAt(currentIndex + 2);
int fourthDigit = lexeme.codeUnitAt(currentIndex + 3);
- if (!isHexDigit(firstDigit) || !isHexDigit(secondDigit) || !isHexDigit(thirdDigit) || !isHexDigit(fourthDigit)) {
+ if (!_isHexDigit(firstDigit) || !_isHexDigit(secondDigit) || !_isHexDigit(thirdDigit) || !_isHexDigit(fourthDigit)) {
// Illegal escape sequence: invalid hex digits
- reportErrorForCurrentToken(ParserErrorCode.INVALID_UNICODE_ESCAPE, []);
+ _reportErrorForCurrentToken(ParserErrorCode.INVALID_UNICODE_ESCAPE, []);
} else {
- appendScalarValue(builder, lexeme.substring(index, currentIndex + 1), (((((Character.digit(firstDigit, 16) << 4) + Character.digit(secondDigit, 16)) << 4) + Character.digit(thirdDigit, 16)) << 4) + Character.digit(fourthDigit, 16), index, currentIndex + 3);
+ _appendScalarValue(builder, lexeme.substring(index, currentIndex + 1), (((((Character.digit(firstDigit, 16) << 4) + Character.digit(secondDigit, 16)) << 4) + Character.digit(thirdDigit, 16)) << 4) + Character.digit(fourthDigit, 16), index, currentIndex + 3);
}
return currentIndex + 4;
}
@@ -6931,7 +7041,7 @@
* Decrements the error reporting lock level. If level is more than `0`, then
* [reportError] wont report any error.
*/
- void unlockErrorListener() {
+ void _unlockErrorListener() {
if (_errorListenerLock == 0) {
throw new IllegalStateException("Attempt to unlock not locked error listener.");
}
@@ -6943,10 +7053,10 @@
*
* @param parameterList the parameter list to be validated
*/
- void validateFormalParameterList(FormalParameterList parameterList) {
+ void _validateFormalParameterList(FormalParameterList parameterList) {
for (FormalParameter parameter in parameterList.parameters) {
if (parameter is FieldFormalParameter) {
- reportErrorForNode(ParserErrorCode.FIELD_INITIALIZER_OUTSIDE_CONSTRUCTOR, parameter.identifier, []);
+ _reportErrorForNode(ParserErrorCode.FIELD_INITIALIZER_OUTSIDE_CONSTRUCTOR, parameter.identifier, []);
}
}
}
@@ -6957,19 +7067,19 @@
*
* @param modifiers the modifiers being validated
*/
- Token validateModifiersForClass(Modifiers modifiers) {
- validateModifiersForTopLevelDeclaration(modifiers);
+ Token _validateModifiersForClass(Modifiers modifiers) {
+ _validateModifiersForTopLevelDeclaration(modifiers);
if (modifiers.constKeyword != null) {
- reportErrorForToken(ParserErrorCode.CONST_CLASS, modifiers.constKeyword, []);
+ _reportErrorForToken(ParserErrorCode.CONST_CLASS, modifiers.constKeyword, []);
}
if (modifiers.externalKeyword != null) {
- reportErrorForToken(ParserErrorCode.EXTERNAL_CLASS, modifiers.externalKeyword, []);
+ _reportErrorForToken(ParserErrorCode.EXTERNAL_CLASS, modifiers.externalKeyword, []);
}
if (modifiers.finalKeyword != null) {
- reportErrorForToken(ParserErrorCode.FINAL_CLASS, modifiers.finalKeyword, []);
+ _reportErrorForToken(ParserErrorCode.FINAL_CLASS, modifiers.finalKeyword, []);
}
if (modifiers.varKeyword != null) {
- reportErrorForToken(ParserErrorCode.VAR_CLASS, modifiers.varKeyword, []);
+ _reportErrorForToken(ParserErrorCode.VAR_CLASS, modifiers.varKeyword, []);
}
return modifiers.abstractKeyword;
}
@@ -6981,27 +7091,27 @@
* @param modifiers the modifiers being validated
* @return the 'const' or 'final' keyword associated with the constructor
*/
- Token validateModifiersForConstructor(Modifiers modifiers) {
+ Token _validateModifiersForConstructor(Modifiers modifiers) {
if (modifiers.abstractKeyword != null) {
- reportErrorForToken(ParserErrorCode.ABSTRACT_CLASS_MEMBER, modifiers.abstractKeyword, []);
+ _reportErrorForToken(ParserErrorCode.ABSTRACT_CLASS_MEMBER, modifiers.abstractKeyword, []);
}
if (modifiers.finalKeyword != null) {
- reportErrorForToken(ParserErrorCode.FINAL_CONSTRUCTOR, modifiers.finalKeyword, []);
+ _reportErrorForToken(ParserErrorCode.FINAL_CONSTRUCTOR, modifiers.finalKeyword, []);
}
if (modifiers.staticKeyword != null) {
- reportErrorForToken(ParserErrorCode.STATIC_CONSTRUCTOR, modifiers.staticKeyword, []);
+ _reportErrorForToken(ParserErrorCode.STATIC_CONSTRUCTOR, modifiers.staticKeyword, []);
}
if (modifiers.varKeyword != null) {
- reportErrorForToken(ParserErrorCode.CONSTRUCTOR_WITH_RETURN_TYPE, modifiers.varKeyword, []);
+ _reportErrorForToken(ParserErrorCode.CONSTRUCTOR_WITH_RETURN_TYPE, modifiers.varKeyword, []);
}
Token externalKeyword = modifiers.externalKeyword;
Token constKeyword = modifiers.constKeyword;
Token factoryKeyword = modifiers.factoryKeyword;
if (externalKeyword != null && constKeyword != null && constKeyword.offset < externalKeyword.offset) {
- reportErrorForToken(ParserErrorCode.EXTERNAL_AFTER_CONST, externalKeyword, []);
+ _reportErrorForToken(ParserErrorCode.EXTERNAL_AFTER_CONST, externalKeyword, []);
}
if (externalKeyword != null && factoryKeyword != null && factoryKeyword.offset < externalKeyword.offset) {
- reportErrorForToken(ParserErrorCode.EXTERNAL_AFTER_FACTORY, externalKeyword, []);
+ _reportErrorForToken(ParserErrorCode.EXTERNAL_AFTER_FACTORY, externalKeyword, []);
}
return constKeyword;
}
@@ -7013,15 +7123,15 @@
* @param modifiers the modifiers being validated
* @return the 'final', 'const' or 'var' keyword associated with the field
*/
- Token validateModifiersForField(Modifiers modifiers) {
+ Token _validateModifiersForField(Modifiers modifiers) {
if (modifiers.abstractKeyword != null) {
- reportErrorForCurrentToken(ParserErrorCode.ABSTRACT_CLASS_MEMBER, []);
+ _reportErrorForCurrentToken(ParserErrorCode.ABSTRACT_CLASS_MEMBER, []);
}
if (modifiers.externalKeyword != null) {
- reportErrorForToken(ParserErrorCode.EXTERNAL_FIELD, modifiers.externalKeyword, []);
+ _reportErrorForToken(ParserErrorCode.EXTERNAL_FIELD, modifiers.externalKeyword, []);
}
if (modifiers.factoryKeyword != null) {
- reportErrorForToken(ParserErrorCode.NON_CONSTRUCTOR_FACTORY, modifiers.factoryKeyword, []);
+ _reportErrorForToken(ParserErrorCode.NON_CONSTRUCTOR_FACTORY, modifiers.factoryKeyword, []);
}
Token staticKeyword = modifiers.staticKeyword;
Token constKeyword = modifiers.constKeyword;
@@ -7029,25 +7139,25 @@
Token varKeyword = modifiers.varKeyword;
if (constKeyword != null) {
if (finalKeyword != null) {
- reportErrorForToken(ParserErrorCode.CONST_AND_FINAL, finalKeyword, []);
+ _reportErrorForToken(ParserErrorCode.CONST_AND_FINAL, finalKeyword, []);
}
if (varKeyword != null) {
- reportErrorForToken(ParserErrorCode.CONST_AND_VAR, varKeyword, []);
+ _reportErrorForToken(ParserErrorCode.CONST_AND_VAR, varKeyword, []);
}
if (staticKeyword != null && constKeyword.offset < staticKeyword.offset) {
- reportErrorForToken(ParserErrorCode.STATIC_AFTER_CONST, staticKeyword, []);
+ _reportErrorForToken(ParserErrorCode.STATIC_AFTER_CONST, staticKeyword, []);
}
} else if (finalKeyword != null) {
if (varKeyword != null) {
- reportErrorForToken(ParserErrorCode.FINAL_AND_VAR, varKeyword, []);
+ _reportErrorForToken(ParserErrorCode.FINAL_AND_VAR, varKeyword, []);
}
if (staticKeyword != null && finalKeyword.offset < staticKeyword.offset) {
- reportErrorForToken(ParserErrorCode.STATIC_AFTER_FINAL, staticKeyword, []);
+ _reportErrorForToken(ParserErrorCode.STATIC_AFTER_FINAL, staticKeyword, []);
}
} else if (varKeyword != null && staticKeyword != null && varKeyword.offset < staticKeyword.offset) {
- reportErrorForToken(ParserErrorCode.STATIC_AFTER_VAR, staticKeyword, []);
+ _reportErrorForToken(ParserErrorCode.STATIC_AFTER_VAR, staticKeyword, []);
}
- return lexicallyFirst([constKeyword, finalKeyword, varKeyword]);
+ return _lexicallyFirst([constKeyword, finalKeyword, varKeyword]);
}
/**
@@ -7055,9 +7165,9 @@
*
* @param modifiers the modifiers being validated
*/
- void validateModifiersForFunctionDeclarationStatement(Modifiers modifiers) {
+ void _validateModifiersForFunctionDeclarationStatement(Modifiers modifiers) {
if (modifiers.abstractKeyword != null || modifiers.constKeyword != null || modifiers.externalKeyword != null || modifiers.factoryKeyword != null || modifiers.finalKeyword != null || modifiers.staticKeyword != null || modifiers.varKeyword != null) {
- reportErrorForCurrentToken(ParserErrorCode.LOCAL_FUNCTION_DECLARATION_MODIFIER, []);
+ _reportErrorForCurrentToken(ParserErrorCode.LOCAL_FUNCTION_DECLARATION_MODIFIER, []);
}
}
@@ -7066,26 +7176,26 @@
*
* @param modifiers the modifiers being validated
*/
- void validateModifiersForGetterOrSetterOrMethod(Modifiers modifiers) {
+ void _validateModifiersForGetterOrSetterOrMethod(Modifiers modifiers) {
if (modifiers.abstractKeyword != null) {
- reportErrorForCurrentToken(ParserErrorCode.ABSTRACT_CLASS_MEMBER, []);
+ _reportErrorForCurrentToken(ParserErrorCode.ABSTRACT_CLASS_MEMBER, []);
}
if (modifiers.constKeyword != null) {
- reportErrorForToken(ParserErrorCode.CONST_METHOD, modifiers.constKeyword, []);
+ _reportErrorForToken(ParserErrorCode.CONST_METHOD, modifiers.constKeyword, []);
}
if (modifiers.factoryKeyword != null) {
- reportErrorForToken(ParserErrorCode.NON_CONSTRUCTOR_FACTORY, modifiers.factoryKeyword, []);
+ _reportErrorForToken(ParserErrorCode.NON_CONSTRUCTOR_FACTORY, modifiers.factoryKeyword, []);
}
if (modifiers.finalKeyword != null) {
- reportErrorForToken(ParserErrorCode.FINAL_METHOD, modifiers.finalKeyword, []);
+ _reportErrorForToken(ParserErrorCode.FINAL_METHOD, modifiers.finalKeyword, []);
}
if (modifiers.varKeyword != null) {
- reportErrorForToken(ParserErrorCode.VAR_RETURN_TYPE, modifiers.varKeyword, []);
+ _reportErrorForToken(ParserErrorCode.VAR_RETURN_TYPE, modifiers.varKeyword, []);
}
Token externalKeyword = modifiers.externalKeyword;
Token staticKeyword = modifiers.staticKeyword;
if (externalKeyword != null && staticKeyword != null && staticKeyword.offset < externalKeyword.offset) {
- reportErrorForToken(ParserErrorCode.EXTERNAL_AFTER_STATIC, externalKeyword, []);
+ _reportErrorForToken(ParserErrorCode.EXTERNAL_AFTER_STATIC, externalKeyword, []);
}
}
@@ -7094,24 +7204,24 @@
*
* @param modifiers the modifiers being validated
*/
- void validateModifiersForOperator(Modifiers modifiers) {
+ void _validateModifiersForOperator(Modifiers modifiers) {
if (modifiers.abstractKeyword != null) {
- reportErrorForCurrentToken(ParserErrorCode.ABSTRACT_CLASS_MEMBER, []);
+ _reportErrorForCurrentToken(ParserErrorCode.ABSTRACT_CLASS_MEMBER, []);
}
if (modifiers.constKeyword != null) {
- reportErrorForToken(ParserErrorCode.CONST_METHOD, modifiers.constKeyword, []);
+ _reportErrorForToken(ParserErrorCode.CONST_METHOD, modifiers.constKeyword, []);
}
if (modifiers.factoryKeyword != null) {
- reportErrorForToken(ParserErrorCode.NON_CONSTRUCTOR_FACTORY, modifiers.factoryKeyword, []);
+ _reportErrorForToken(ParserErrorCode.NON_CONSTRUCTOR_FACTORY, modifiers.factoryKeyword, []);
}
if (modifiers.finalKeyword != null) {
- reportErrorForToken(ParserErrorCode.FINAL_METHOD, modifiers.finalKeyword, []);
+ _reportErrorForToken(ParserErrorCode.FINAL_METHOD, modifiers.finalKeyword, []);
}
if (modifiers.staticKeyword != null) {
- reportErrorForToken(ParserErrorCode.STATIC_OPERATOR, modifiers.staticKeyword, []);
+ _reportErrorForToken(ParserErrorCode.STATIC_OPERATOR, modifiers.staticKeyword, []);
}
if (modifiers.varKeyword != null) {
- reportErrorForToken(ParserErrorCode.VAR_RETURN_TYPE, modifiers.varKeyword, []);
+ _reportErrorForToken(ParserErrorCode.VAR_RETURN_TYPE, modifiers.varKeyword, []);
}
}
@@ -7120,12 +7230,12 @@
*
* @param modifiers the modifiers being validated
*/
- void validateModifiersForTopLevelDeclaration(Modifiers modifiers) {
+ void _validateModifiersForTopLevelDeclaration(Modifiers modifiers) {
if (modifiers.factoryKeyword != null) {
- reportErrorForToken(ParserErrorCode.FACTORY_TOP_LEVEL_DECLARATION, modifiers.factoryKeyword, []);
+ _reportErrorForToken(ParserErrorCode.FACTORY_TOP_LEVEL_DECLARATION, modifiers.factoryKeyword, []);
}
if (modifiers.staticKeyword != null) {
- reportErrorForToken(ParserErrorCode.STATIC_TOP_LEVEL_DECLARATION, modifiers.staticKeyword, []);
+ _reportErrorForToken(ParserErrorCode.STATIC_TOP_LEVEL_DECLARATION, modifiers.staticKeyword, []);
}
}
@@ -7134,19 +7244,19 @@
*
* @param modifiers the modifiers being validated
*/
- void validateModifiersForTopLevelFunction(Modifiers modifiers) {
- validateModifiersForTopLevelDeclaration(modifiers);
+ void _validateModifiersForTopLevelFunction(Modifiers modifiers) {
+ _validateModifiersForTopLevelDeclaration(modifiers);
if (modifiers.abstractKeyword != null) {
- reportErrorForCurrentToken(ParserErrorCode.ABSTRACT_TOP_LEVEL_FUNCTION, []);
+ _reportErrorForCurrentToken(ParserErrorCode.ABSTRACT_TOP_LEVEL_FUNCTION, []);
}
if (modifiers.constKeyword != null) {
- reportErrorForToken(ParserErrorCode.CONST_CLASS, modifiers.constKeyword, []);
+ _reportErrorForToken(ParserErrorCode.CONST_CLASS, modifiers.constKeyword, []);
}
if (modifiers.finalKeyword != null) {
- reportErrorForToken(ParserErrorCode.FINAL_CLASS, modifiers.finalKeyword, []);
+ _reportErrorForToken(ParserErrorCode.FINAL_CLASS, modifiers.finalKeyword, []);
}
if (modifiers.varKeyword != null) {
- reportErrorForToken(ParserErrorCode.VAR_RETURN_TYPE, modifiers.varKeyword, []);
+ _reportErrorForToken(ParserErrorCode.VAR_RETURN_TYPE, modifiers.varKeyword, []);
}
}
@@ -7157,30 +7267,30 @@
* @param modifiers the modifiers being validated
* @return the 'final', 'const' or 'var' keyword associated with the field
*/
- Token validateModifiersForTopLevelVariable(Modifiers modifiers) {
- validateModifiersForTopLevelDeclaration(modifiers);
+ Token _validateModifiersForTopLevelVariable(Modifiers modifiers) {
+ _validateModifiersForTopLevelDeclaration(modifiers);
if (modifiers.abstractKeyword != null) {
- reportErrorForCurrentToken(ParserErrorCode.ABSTRACT_TOP_LEVEL_VARIABLE, []);
+ _reportErrorForCurrentToken(ParserErrorCode.ABSTRACT_TOP_LEVEL_VARIABLE, []);
}
if (modifiers.externalKeyword != null) {
- reportErrorForToken(ParserErrorCode.EXTERNAL_FIELD, modifiers.externalKeyword, []);
+ _reportErrorForToken(ParserErrorCode.EXTERNAL_FIELD, modifiers.externalKeyword, []);
}
Token constKeyword = modifiers.constKeyword;
Token finalKeyword = modifiers.finalKeyword;
Token varKeyword = modifiers.varKeyword;
if (constKeyword != null) {
if (finalKeyword != null) {
- reportErrorForToken(ParserErrorCode.CONST_AND_FINAL, finalKeyword, []);
+ _reportErrorForToken(ParserErrorCode.CONST_AND_FINAL, finalKeyword, []);
}
if (varKeyword != null) {
- reportErrorForToken(ParserErrorCode.CONST_AND_VAR, varKeyword, []);
+ _reportErrorForToken(ParserErrorCode.CONST_AND_VAR, varKeyword, []);
}
} else if (finalKeyword != null) {
if (varKeyword != null) {
- reportErrorForToken(ParserErrorCode.FINAL_AND_VAR, varKeyword, []);
+ _reportErrorForToken(ParserErrorCode.FINAL_AND_VAR, varKeyword, []);
}
}
- return lexicallyFirst([constKeyword, finalKeyword, varKeyword]);
+ return _lexicallyFirst([constKeyword, finalKeyword, varKeyword]);
}
/**
@@ -7189,22 +7299,22 @@
*
* @param modifiers the modifiers being validated
*/
- void validateModifiersForTypedef(Modifiers modifiers) {
- validateModifiersForTopLevelDeclaration(modifiers);
+ void _validateModifiersForTypedef(Modifiers modifiers) {
+ _validateModifiersForTopLevelDeclaration(modifiers);
if (modifiers.abstractKeyword != null) {
- reportErrorForToken(ParserErrorCode.ABSTRACT_TYPEDEF, modifiers.abstractKeyword, []);
+ _reportErrorForToken(ParserErrorCode.ABSTRACT_TYPEDEF, modifiers.abstractKeyword, []);
}
if (modifiers.constKeyword != null) {
- reportErrorForToken(ParserErrorCode.CONST_TYPEDEF, modifiers.constKeyword, []);
+ _reportErrorForToken(ParserErrorCode.CONST_TYPEDEF, modifiers.constKeyword, []);
}
if (modifiers.externalKeyword != null) {
- reportErrorForToken(ParserErrorCode.EXTERNAL_TYPEDEF, modifiers.externalKeyword, []);
+ _reportErrorForToken(ParserErrorCode.EXTERNAL_TYPEDEF, modifiers.externalKeyword, []);
}
if (modifiers.finalKeyword != null) {
- reportErrorForToken(ParserErrorCode.FINAL_TYPEDEF, modifiers.finalKeyword, []);
+ _reportErrorForToken(ParserErrorCode.FINAL_TYPEDEF, modifiers.finalKeyword, []);
}
if (modifiers.varKeyword != null) {
- reportErrorForToken(ParserErrorCode.VAR_TYPEDEF, modifiers.varKeyword, []);
+ _reportErrorForToken(ParserErrorCode.VAR_TYPEDEF, modifiers.varKeyword, []);
}
}
}
@@ -7221,8 +7331,10 @@
*/
Parser_SyntheticKeywordToken(Keyword keyword, int offset) : super(keyword, offset);
+ @override
Token copy() => new Parser_SyntheticKeywordToken(keyword, offset);
+ @override
int get length => 0;
}
@@ -7678,12 +7790,16 @@
*/
ParserErrorCode.con3(String name, int ordinal, String message) : this.con1(name, ordinal, ErrorSeverity.ERROR, message);
+ @override
String get correction => correction8;
+ @override
ErrorSeverity get errorSeverity => _severity;
+ @override
String get message => _message;
+ @override
ErrorType get type => ErrorType.SYNTACTIC_ERROR;
}
@@ -7701,7 +7817,7 @@
*/
static void copyResolutionData(AstNode fromNode, AstNode toNode) {
ResolutionCopier copier = new ResolutionCopier();
- copier.isEqualNodes(fromNode, toNode);
+ copier._isEqualNodes(fromNode, toNode);
}
/**
@@ -7710,23 +7826,26 @@
*/
AstNode _toNode;
+ @override
bool visitAdjacentStrings(AdjacentStrings node) {
AdjacentStrings toNode = this._toNode as AdjacentStrings;
- return isEqualNodeLists(node.strings, toNode.strings);
+ return _isEqualNodeLists(node.strings, toNode.strings);
}
+ @override
bool visitAnnotation(Annotation node) {
Annotation toNode = this._toNode as Annotation;
- if (javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(isEqualTokens(node.atSign, toNode.atSign), isEqualNodes(node.name, toNode.name)), isEqualTokens(node.period, toNode.period)), isEqualNodes(node.constructorName, toNode.constructorName)), isEqualNodes(node.arguments, toNode.arguments))) {
+ if (javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(_isEqualTokens(node.atSign, toNode.atSign), _isEqualNodes(node.name, toNode.name)), _isEqualTokens(node.period, toNode.period)), _isEqualNodes(node.constructorName, toNode.constructorName)), _isEqualNodes(node.arguments, toNode.arguments))) {
toNode.element = node.element;
return true;
}
return false;
}
+ @override
bool visitArgumentDefinitionTest(ArgumentDefinitionTest node) {
ArgumentDefinitionTest toNode = this._toNode as ArgumentDefinitionTest;
- if (javaBooleanAnd(isEqualTokens(node.question, toNode.question), isEqualNodes(node.identifier, toNode.identifier))) {
+ if (javaBooleanAnd(_isEqualTokens(node.question, toNode.question), _isEqualNodes(node.identifier, toNode.identifier))) {
toNode.propagatedType = node.propagatedType;
toNode.staticType = node.staticType;
return true;
@@ -7734,14 +7853,16 @@
return false;
}
+ @override
bool visitArgumentList(ArgumentList node) {
ArgumentList toNode = this._toNode as ArgumentList;
- return javaBooleanAnd(javaBooleanAnd(isEqualTokens(node.leftParenthesis, toNode.leftParenthesis), isEqualNodeLists(node.arguments, toNode.arguments)), isEqualTokens(node.rightParenthesis, toNode.rightParenthesis));
+ return javaBooleanAnd(javaBooleanAnd(_isEqualTokens(node.leftParenthesis, toNode.leftParenthesis), _isEqualNodeLists(node.arguments, toNode.arguments)), _isEqualTokens(node.rightParenthesis, toNode.rightParenthesis));
}
+ @override
bool visitAsExpression(AsExpression node) {
AsExpression toNode = this._toNode as AsExpression;
- if (javaBooleanAnd(javaBooleanAnd(isEqualNodes(node.expression, toNode.expression), isEqualTokens(node.asOperator, toNode.asOperator)), isEqualNodes(node.type, toNode.type))) {
+ if (javaBooleanAnd(javaBooleanAnd(_isEqualNodes(node.expression, toNode.expression), _isEqualTokens(node.asOperator, toNode.asOperator)), _isEqualNodes(node.type, toNode.type))) {
toNode.propagatedType = node.propagatedType;
toNode.staticType = node.staticType;
return true;
@@ -7749,14 +7870,16 @@
return false;
}
+ @override
bool visitAssertStatement(AssertStatement node) {
AssertStatement toNode = this._toNode as AssertStatement;
- return javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(isEqualTokens(node.keyword, toNode.keyword), isEqualTokens(node.leftParenthesis, toNode.leftParenthesis)), isEqualNodes(node.condition, toNode.condition)), isEqualTokens(node.rightParenthesis, toNode.rightParenthesis)), isEqualTokens(node.semicolon, toNode.semicolon));
+ return javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(_isEqualTokens(node.keyword, toNode.keyword), _isEqualTokens(node.leftParenthesis, toNode.leftParenthesis)), _isEqualNodes(node.condition, toNode.condition)), _isEqualTokens(node.rightParenthesis, toNode.rightParenthesis)), _isEqualTokens(node.semicolon, toNode.semicolon));
}
+ @override
bool visitAssignmentExpression(AssignmentExpression node) {
AssignmentExpression toNode = this._toNode as AssignmentExpression;
- if (javaBooleanAnd(javaBooleanAnd(isEqualNodes(node.leftHandSide, toNode.leftHandSide), isEqualTokens(node.operator, toNode.operator)), isEqualNodes(node.rightHandSide, toNode.rightHandSide))) {
+ if (javaBooleanAnd(javaBooleanAnd(_isEqualNodes(node.leftHandSide, toNode.leftHandSide), _isEqualTokens(node.operator, toNode.operator)), _isEqualNodes(node.rightHandSide, toNode.rightHandSide))) {
toNode.propagatedElement = node.propagatedElement;
toNode.propagatedType = node.propagatedType;
toNode.staticElement = node.staticElement;
@@ -7766,9 +7889,10 @@
return false;
}
+ @override
bool visitBinaryExpression(BinaryExpression node) {
BinaryExpression toNode = this._toNode as BinaryExpression;
- if (javaBooleanAnd(javaBooleanAnd(isEqualNodes(node.leftOperand, toNode.leftOperand), isEqualTokens(node.operator, toNode.operator)), isEqualNodes(node.rightOperand, toNode.rightOperand))) {
+ if (javaBooleanAnd(javaBooleanAnd(_isEqualNodes(node.leftOperand, toNode.leftOperand), _isEqualTokens(node.operator, toNode.operator)), _isEqualNodes(node.rightOperand, toNode.rightOperand))) {
toNode.propagatedElement = node.propagatedElement;
toNode.propagatedType = node.propagatedType;
toNode.staticElement = node.staticElement;
@@ -7778,19 +7902,22 @@
return false;
}
+ @override
bool visitBlock(Block node) {
Block toNode = this._toNode as Block;
- return javaBooleanAnd(javaBooleanAnd(isEqualTokens(node.leftBracket, toNode.leftBracket), isEqualNodeLists(node.statements, toNode.statements)), isEqualTokens(node.rightBracket, toNode.rightBracket));
+ return javaBooleanAnd(javaBooleanAnd(_isEqualTokens(node.leftBracket, toNode.leftBracket), _isEqualNodeLists(node.statements, toNode.statements)), _isEqualTokens(node.rightBracket, toNode.rightBracket));
}
+ @override
bool visitBlockFunctionBody(BlockFunctionBody node) {
BlockFunctionBody toNode = this._toNode as BlockFunctionBody;
- return isEqualNodes(node.block, toNode.block);
+ return _isEqualNodes(node.block, toNode.block);
}
+ @override
bool visitBooleanLiteral(BooleanLiteral node) {
BooleanLiteral toNode = this._toNode as BooleanLiteral;
- if (javaBooleanAnd(isEqualTokens(node.literal, toNode.literal), identical(node.value, toNode.value))) {
+ if (javaBooleanAnd(_isEqualTokens(node.literal, toNode.literal), identical(node.value, toNode.value))) {
toNode.propagatedType = node.propagatedType;
toNode.staticType = node.staticType;
return true;
@@ -7798,14 +7925,16 @@
return false;
}
+ @override
bool visitBreakStatement(BreakStatement node) {
BreakStatement toNode = this._toNode as BreakStatement;
- return javaBooleanAnd(javaBooleanAnd(isEqualTokens(node.keyword, toNode.keyword), isEqualNodes(node.label, toNode.label)), isEqualTokens(node.semicolon, toNode.semicolon));
+ return javaBooleanAnd(javaBooleanAnd(_isEqualTokens(node.keyword, toNode.keyword), _isEqualNodes(node.label, toNode.label)), _isEqualTokens(node.semicolon, toNode.semicolon));
}
+ @override
bool visitCascadeExpression(CascadeExpression node) {
CascadeExpression toNode = this._toNode as CascadeExpression;
- if (javaBooleanAnd(isEqualNodes(node.target, toNode.target), isEqualNodeLists(node.cascadeSections, toNode.cascadeSections))) {
+ if (javaBooleanAnd(_isEqualNodes(node.target, toNode.target), _isEqualNodeLists(node.cascadeSections, toNode.cascadeSections))) {
toNode.propagatedType = node.propagatedType;
toNode.staticType = node.staticType;
return true;
@@ -7813,43 +7942,50 @@
return false;
}
+ @override
bool visitCatchClause(CatchClause node) {
CatchClause toNode = this._toNode as CatchClause;
- return javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(isEqualTokens(node.onKeyword, toNode.onKeyword), isEqualNodes(node.exceptionType, toNode.exceptionType)), isEqualTokens(node.catchKeyword, toNode.catchKeyword)), isEqualTokens(node.leftParenthesis, toNode.leftParenthesis)), isEqualNodes(node.exceptionParameter, toNode.exceptionParameter)), isEqualTokens(node.comma, toNode.comma)), isEqualNodes(node.stackTraceParameter, toNode.stackTraceParameter)), isEqualTokens(node.rightParenthesis, toNode.rightParenthesis)), isEqualNodes(node.body, toNode.body));
+ return javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(_isEqualTokens(node.onKeyword, toNode.onKeyword), _isEqualNodes(node.exceptionType, toNode.exceptionType)), _isEqualTokens(node.catchKeyword, toNode.catchKeyword)), _isEqualTokens(node.leftParenthesis, toNode.leftParenthesis)), _isEqualNodes(node.exceptionParameter, toNode.exceptionParameter)), _isEqualTokens(node.comma, toNode.comma)), _isEqualNodes(node.stackTraceParameter, toNode.stackTraceParameter)), _isEqualTokens(node.rightParenthesis, toNode.rightParenthesis)), _isEqualNodes(node.body, toNode.body));
}
+ @override
bool visitClassDeclaration(ClassDeclaration node) {
ClassDeclaration toNode = this._toNode as ClassDeclaration;
- return javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(isEqualNodes(node.documentationComment, toNode.documentationComment), isEqualNodeLists(node.metadata, toNode.metadata)), isEqualTokens(node.abstractKeyword, toNode.abstractKeyword)), isEqualTokens(node.classKeyword, toNode.classKeyword)), isEqualNodes(node.name, toNode.name)), isEqualNodes(node.typeParameters, toNode.typeParameters)), isEqualNodes(node.extendsClause, toNode.extendsClause)), isEqualNodes(node.withClause, toNode.withClause)), isEqualNodes(node.implementsClause, toNode.implementsClause)), isEqualTokens(node.leftBracket, toNode.leftBracket)), isEqualNodeLists(node.members, toNode.members)), isEqualTokens(node.rightBracket, toNode.rightBracket));
+ return javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(_isEqualNodes(node.documentationComment, toNode.documentationComment), _isEqualNodeLists(node.metadata, toNode.metadata)), _isEqualTokens(node.abstractKeyword, toNode.abstractKeyword)), _isEqualTokens(node.classKeyword, toNode.classKeyword)), _isEqualNodes(node.name, toNode.name)), _isEqualNodes(node.typeParameters, toNode.typeParameters)), _isEqualNodes(node.extendsClause, toNode.extendsClause)), _isEqualNodes(node.withClause, toNode.withClause)), _isEqualNodes(node.implementsClause, toNode.implementsClause)), _isEqualTokens(node.leftBracket, toNode.leftBracket)), _isEqualNodeLists(node.members, toNode.members)), _isEqualTokens(node.rightBracket, toNode.rightBracket));
}
+ @override
bool visitClassTypeAlias(ClassTypeAlias node) {
ClassTypeAlias toNode = this._toNode as ClassTypeAlias;
- return javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(isEqualNodes(node.documentationComment, toNode.documentationComment), isEqualNodeLists(node.metadata, toNode.metadata)), isEqualTokens(node.keyword, toNode.keyword)), isEqualNodes(node.name, toNode.name)), isEqualNodes(node.typeParameters, toNode.typeParameters)), isEqualTokens(node.equals, toNode.equals)), isEqualTokens(node.abstractKeyword, toNode.abstractKeyword)), isEqualNodes(node.superclass, toNode.superclass)), isEqualNodes(node.withClause, toNode.withClause)), isEqualNodes(node.implementsClause, toNode.implementsClause)), isEqualTokens(node.semicolon, toNode.semicolon));
+ return javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(_isEqualNodes(node.documentationComment, toNode.documentationComment), _isEqualNodeLists(node.metadata, toNode.metadata)), _isEqualTokens(node.keyword, toNode.keyword)), _isEqualNodes(node.name, toNode.name)), _isEqualNodes(node.typeParameters, toNode.typeParameters)), _isEqualTokens(node.equals, toNode.equals)), _isEqualTokens(node.abstractKeyword, toNode.abstractKeyword)), _isEqualNodes(node.superclass, toNode.superclass)), _isEqualNodes(node.withClause, toNode.withClause)), _isEqualNodes(node.implementsClause, toNode.implementsClause)), _isEqualTokens(node.semicolon, toNode.semicolon));
}
+ @override
bool visitComment(Comment node) {
Comment toNode = this._toNode as Comment;
- return isEqualNodeLists(node.references, toNode.references);
+ return _isEqualNodeLists(node.references, toNode.references);
}
+ @override
bool visitCommentReference(CommentReference node) {
CommentReference toNode = this._toNode as CommentReference;
- return javaBooleanAnd(isEqualTokens(node.newKeyword, toNode.newKeyword), isEqualNodes(node.identifier, toNode.identifier));
+ return javaBooleanAnd(_isEqualTokens(node.newKeyword, toNode.newKeyword), _isEqualNodes(node.identifier, toNode.identifier));
}
+ @override
bool visitCompilationUnit(CompilationUnit node) {
CompilationUnit toNode = this._toNode as CompilationUnit;
- if (javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(isEqualTokens(node.beginToken, toNode.beginToken), isEqualNodes(node.scriptTag, toNode.scriptTag)), isEqualNodeLists(node.directives, toNode.directives)), isEqualNodeLists(node.declarations, toNode.declarations)), isEqualTokens(node.endToken, toNode.endToken))) {
+ if (javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(_isEqualTokens(node.beginToken, toNode.beginToken), _isEqualNodes(node.scriptTag, toNode.scriptTag)), _isEqualNodeLists(node.directives, toNode.directives)), _isEqualNodeLists(node.declarations, toNode.declarations)), _isEqualTokens(node.endToken, toNode.endToken))) {
toNode.element = node.element;
return true;
}
return false;
}
+ @override
bool visitConditionalExpression(ConditionalExpression node) {
ConditionalExpression toNode = this._toNode as ConditionalExpression;
- if (javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(isEqualNodes(node.condition, toNode.condition), isEqualTokens(node.question, toNode.question)), isEqualNodes(node.thenExpression, toNode.thenExpression)), isEqualTokens(node.colon, toNode.colon)), isEqualNodes(node.elseExpression, toNode.elseExpression))) {
+ if (javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(_isEqualNodes(node.condition, toNode.condition), _isEqualTokens(node.question, toNode.question)), _isEqualNodes(node.thenExpression, toNode.thenExpression)), _isEqualTokens(node.colon, toNode.colon)), _isEqualNodes(node.elseExpression, toNode.elseExpression))) {
toNode.propagatedType = node.propagatedType;
toNode.staticType = node.staticType;
return true;
@@ -7857,52 +7993,60 @@
return false;
}
+ @override
bool visitConstructorDeclaration(ConstructorDeclaration node) {
ConstructorDeclaration toNode = this._toNode as ConstructorDeclaration;
- if (javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(isEqualNodes(node.documentationComment, toNode.documentationComment), isEqualNodeLists(node.metadata, toNode.metadata)), isEqualTokens(node.externalKeyword, toNode.externalKeyword)), isEqualTokens(node.constKeyword, toNode.constKeyword)), isEqualTokens(node.factoryKeyword, toNode.factoryKeyword)), isEqualNodes(node.returnType, toNode.returnType)), isEqualTokens(node.period, toNode.period)), isEqualNodes(node.name, toNode.name)), isEqualNodes(node.parameters, toNode.parameters)), isEqualTokens(node.separator, toNode.separator)), isEqualNodeLists(node.initializers, toNode.initializers)), isEqualNodes(node.redirectedConstructor, toNode.redirectedConstructor)), isEqualNodes(node.body, toNode.body))) {
+ if (javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(_isEqualNodes(node.documentationComment, toNode.documentationComment), _isEqualNodeLists(node.metadata, toNode.metadata)), _isEqualTokens(node.externalKeyword, toNode.externalKeyword)), _isEqualTokens(node.constKeyword, toNode.constKeyword)), _isEqualTokens(node.factoryKeyword, toNode.factoryKeyword)), _isEqualNodes(node.returnType, toNode.returnType)), _isEqualTokens(node.period, toNode.period)), _isEqualNodes(node.name, toNode.name)), _isEqualNodes(node.parameters, toNode.parameters)), _isEqualTokens(node.separator, toNode.separator)), _isEqualNodeLists(node.initializers, toNode.initializers)), _isEqualNodes(node.redirectedConstructor, toNode.redirectedConstructor)), _isEqualNodes(node.body, toNode.body))) {
toNode.element = node.element;
return true;
}
return false;
}
+ @override
bool visitConstructorFieldInitializer(ConstructorFieldInitializer node) {
ConstructorFieldInitializer toNode = this._toNode as ConstructorFieldInitializer;
- return javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(isEqualTokens(node.keyword, toNode.keyword), isEqualTokens(node.period, toNode.period)), isEqualNodes(node.fieldName, toNode.fieldName)), isEqualTokens(node.equals, toNode.equals)), isEqualNodes(node.expression, toNode.expression));
+ return javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(_isEqualTokens(node.keyword, toNode.keyword), _isEqualTokens(node.period, toNode.period)), _isEqualNodes(node.fieldName, toNode.fieldName)), _isEqualTokens(node.equals, toNode.equals)), _isEqualNodes(node.expression, toNode.expression));
}
+ @override
bool visitConstructorName(ConstructorName node) {
ConstructorName toNode = this._toNode as ConstructorName;
- if (javaBooleanAnd(javaBooleanAnd(isEqualNodes(node.type, toNode.type), isEqualTokens(node.period, toNode.period)), isEqualNodes(node.name, toNode.name))) {
+ if (javaBooleanAnd(javaBooleanAnd(_isEqualNodes(node.type, toNode.type), _isEqualTokens(node.period, toNode.period)), _isEqualNodes(node.name, toNode.name))) {
toNode.staticElement = node.staticElement;
return true;
}
return false;
}
+ @override
bool visitContinueStatement(ContinueStatement node) {
ContinueStatement toNode = this._toNode as ContinueStatement;
- return javaBooleanAnd(javaBooleanAnd(isEqualTokens(node.keyword, toNode.keyword), isEqualNodes(node.label, toNode.label)), isEqualTokens(node.semicolon, toNode.semicolon));
+ return javaBooleanAnd(javaBooleanAnd(_isEqualTokens(node.keyword, toNode.keyword), _isEqualNodes(node.label, toNode.label)), _isEqualTokens(node.semicolon, toNode.semicolon));
}
+ @override
bool visitDeclaredIdentifier(DeclaredIdentifier node) {
DeclaredIdentifier toNode = this._toNode as DeclaredIdentifier;
- return javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(isEqualNodes(node.documentationComment, toNode.documentationComment), isEqualNodeLists(node.metadata, toNode.metadata)), isEqualTokens(node.keyword, toNode.keyword)), isEqualNodes(node.type, toNode.type)), isEqualNodes(node.identifier, toNode.identifier));
+ return javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(_isEqualNodes(node.documentationComment, toNode.documentationComment), _isEqualNodeLists(node.metadata, toNode.metadata)), _isEqualTokens(node.keyword, toNode.keyword)), _isEqualNodes(node.type, toNode.type)), _isEqualNodes(node.identifier, toNode.identifier));
}
+ @override
bool visitDefaultFormalParameter(DefaultFormalParameter node) {
DefaultFormalParameter toNode = this._toNode as DefaultFormalParameter;
- return javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(isEqualNodes(node.parameter, toNode.parameter), identical(node.kind, toNode.kind)), isEqualTokens(node.separator, toNode.separator)), isEqualNodes(node.defaultValue, toNode.defaultValue));
+ return javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(_isEqualNodes(node.parameter, toNode.parameter), identical(node.kind, toNode.kind)), _isEqualTokens(node.separator, toNode.separator)), _isEqualNodes(node.defaultValue, toNode.defaultValue));
}
+ @override
bool visitDoStatement(DoStatement node) {
DoStatement toNode = this._toNode as DoStatement;
- return javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(isEqualTokens(node.doKeyword, toNode.doKeyword), isEqualNodes(node.body, toNode.body)), isEqualTokens(node.whileKeyword, toNode.whileKeyword)), isEqualTokens(node.leftParenthesis, toNode.leftParenthesis)), isEqualNodes(node.condition, toNode.condition)), isEqualTokens(node.rightParenthesis, toNode.rightParenthesis)), isEqualTokens(node.semicolon, toNode.semicolon));
+ return javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(_isEqualTokens(node.doKeyword, toNode.doKeyword), _isEqualNodes(node.body, toNode.body)), _isEqualTokens(node.whileKeyword, toNode.whileKeyword)), _isEqualTokens(node.leftParenthesis, toNode.leftParenthesis)), _isEqualNodes(node.condition, toNode.condition)), _isEqualTokens(node.rightParenthesis, toNode.rightParenthesis)), _isEqualTokens(node.semicolon, toNode.semicolon));
}
+ @override
bool visitDoubleLiteral(DoubleLiteral node) {
DoubleLiteral toNode = this._toNode as DoubleLiteral;
- if (javaBooleanAnd(isEqualTokens(node.literal, toNode.literal), node.value == toNode.value)) {
+ if (javaBooleanAnd(_isEqualTokens(node.literal, toNode.literal), node.value == toNode.value)) {
toNode.propagatedType = node.propagatedType;
toNode.staticType = node.staticType;
return true;
@@ -7910,78 +8054,92 @@
return false;
}
+ @override
bool visitEmptyFunctionBody(EmptyFunctionBody node) {
EmptyFunctionBody toNode = this._toNode as EmptyFunctionBody;
- return isEqualTokens(node.semicolon, toNode.semicolon);
+ return _isEqualTokens(node.semicolon, toNode.semicolon);
}
+ @override
bool visitEmptyStatement(EmptyStatement node) {
EmptyStatement toNode = this._toNode as EmptyStatement;
- return isEqualTokens(node.semicolon, toNode.semicolon);
+ return _isEqualTokens(node.semicolon, toNode.semicolon);
}
+ @override
bool visitExportDirective(ExportDirective node) {
ExportDirective toNode = this._toNode as ExportDirective;
- if (javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(isEqualNodes(node.documentationComment, toNode.documentationComment), isEqualNodeLists(node.metadata, toNode.metadata)), isEqualTokens(node.keyword, toNode.keyword)), isEqualNodes(node.uri, toNode.uri)), isEqualNodeLists(node.combinators, toNode.combinators)), isEqualTokens(node.semicolon, toNode.semicolon))) {
+ if (javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(_isEqualNodes(node.documentationComment, toNode.documentationComment), _isEqualNodeLists(node.metadata, toNode.metadata)), _isEqualTokens(node.keyword, toNode.keyword)), _isEqualNodes(node.uri, toNode.uri)), _isEqualNodeLists(node.combinators, toNode.combinators)), _isEqualTokens(node.semicolon, toNode.semicolon))) {
toNode.element = node.element;
return true;
}
return false;
}
+ @override
bool visitExpressionFunctionBody(ExpressionFunctionBody node) {
ExpressionFunctionBody toNode = this._toNode as ExpressionFunctionBody;
- return javaBooleanAnd(javaBooleanAnd(isEqualTokens(node.functionDefinition, toNode.functionDefinition), isEqualNodes(node.expression, toNode.expression)), isEqualTokens(node.semicolon, toNode.semicolon));
+ return javaBooleanAnd(javaBooleanAnd(_isEqualTokens(node.functionDefinition, toNode.functionDefinition), _isEqualNodes(node.expression, toNode.expression)), _isEqualTokens(node.semicolon, toNode.semicolon));
}
+ @override
bool visitExpressionStatement(ExpressionStatement node) {
ExpressionStatement toNode = this._toNode as ExpressionStatement;
- return javaBooleanAnd(isEqualNodes(node.expression, toNode.expression), isEqualTokens(node.semicolon, toNode.semicolon));
+ return javaBooleanAnd(_isEqualNodes(node.expression, toNode.expression), _isEqualTokens(node.semicolon, toNode.semicolon));
}
+ @override
bool visitExtendsClause(ExtendsClause node) {
ExtendsClause toNode = this._toNode as ExtendsClause;
- return javaBooleanAnd(isEqualTokens(node.keyword, toNode.keyword), isEqualNodes(node.superclass, toNode.superclass));
+ return javaBooleanAnd(_isEqualTokens(node.keyword, toNode.keyword), _isEqualNodes(node.superclass, toNode.superclass));
}
+ @override
bool visitFieldDeclaration(FieldDeclaration node) {
FieldDeclaration toNode = this._toNode as FieldDeclaration;
- return javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(isEqualNodes(node.documentationComment, toNode.documentationComment), isEqualNodeLists(node.metadata, toNode.metadata)), isEqualTokens(node.staticKeyword, toNode.staticKeyword)), isEqualNodes(node.fields, toNode.fields)), isEqualTokens(node.semicolon, toNode.semicolon));
+ return javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(_isEqualNodes(node.documentationComment, toNode.documentationComment), _isEqualNodeLists(node.metadata, toNode.metadata)), _isEqualTokens(node.staticKeyword, toNode.staticKeyword)), _isEqualNodes(node.fields, toNode.fields)), _isEqualTokens(node.semicolon, toNode.semicolon));
}
+ @override
bool visitFieldFormalParameter(FieldFormalParameter node) {
FieldFormalParameter toNode = this._toNode as FieldFormalParameter;
- return javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(isEqualNodes(node.documentationComment, toNode.documentationComment), isEqualNodeLists(node.metadata, toNode.metadata)), isEqualTokens(node.keyword, toNode.keyword)), isEqualNodes(node.type, toNode.type)), isEqualTokens(node.thisToken, toNode.thisToken)), isEqualTokens(node.period, toNode.period)), isEqualNodes(node.identifier, toNode.identifier));
+ return javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(_isEqualNodes(node.documentationComment, toNode.documentationComment), _isEqualNodeLists(node.metadata, toNode.metadata)), _isEqualTokens(node.keyword, toNode.keyword)), _isEqualNodes(node.type, toNode.type)), _isEqualTokens(node.thisToken, toNode.thisToken)), _isEqualTokens(node.period, toNode.period)), _isEqualNodes(node.identifier, toNode.identifier));
}
+ @override
bool visitForEachStatement(ForEachStatement node) {
ForEachStatement toNode = this._toNode as ForEachStatement;
- return javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(isEqualTokens(node.forKeyword, toNode.forKeyword), isEqualTokens(node.leftParenthesis, toNode.leftParenthesis)), isEqualNodes(node.loopVariable, toNode.loopVariable)), isEqualTokens(node.inKeyword, toNode.inKeyword)), isEqualNodes(node.iterator, toNode.iterator)), isEqualTokens(node.rightParenthesis, toNode.rightParenthesis)), isEqualNodes(node.body, toNode.body));
+ return javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(_isEqualTokens(node.forKeyword, toNode.forKeyword), _isEqualTokens(node.leftParenthesis, toNode.leftParenthesis)), _isEqualNodes(node.loopVariable, toNode.loopVariable)), _isEqualTokens(node.inKeyword, toNode.inKeyword)), _isEqualNodes(node.iterator, toNode.iterator)), _isEqualTokens(node.rightParenthesis, toNode.rightParenthesis)), _isEqualNodes(node.body, toNode.body));
}
+ @override
bool visitFormalParameterList(FormalParameterList node) {
FormalParameterList toNode = this._toNode as FormalParameterList;
- return javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(isEqualTokens(node.leftParenthesis, toNode.leftParenthesis), isEqualNodeLists(node.parameters, toNode.parameters)), isEqualTokens(node.leftDelimiter, toNode.leftDelimiter)), isEqualTokens(node.rightDelimiter, toNode.rightDelimiter)), isEqualTokens(node.rightParenthesis, toNode.rightParenthesis));
+ return javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(_isEqualTokens(node.leftParenthesis, toNode.leftParenthesis), _isEqualNodeLists(node.parameters, toNode.parameters)), _isEqualTokens(node.leftDelimiter, toNode.leftDelimiter)), _isEqualTokens(node.rightDelimiter, toNode.rightDelimiter)), _isEqualTokens(node.rightParenthesis, toNode.rightParenthesis));
}
+ @override
bool visitForStatement(ForStatement node) {
ForStatement toNode = this._toNode as ForStatement;
- return javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(isEqualTokens(node.forKeyword, toNode.forKeyword), isEqualTokens(node.leftParenthesis, toNode.leftParenthesis)), isEqualNodes(node.variables, toNode.variables)), isEqualNodes(node.initialization, toNode.initialization)), isEqualTokens(node.leftSeparator, toNode.leftSeparator)), isEqualNodes(node.condition, toNode.condition)), isEqualTokens(node.rightSeparator, toNode.rightSeparator)), isEqualNodeLists(node.updaters, toNode.updaters)), isEqualTokens(node.rightParenthesis, toNode.rightParenthesis)), isEqualNodes(node.body, toNode.body));
+ return javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(_isEqualTokens(node.forKeyword, toNode.forKeyword), _isEqualTokens(node.leftParenthesis, toNode.leftParenthesis)), _isEqualNodes(node.variables, toNode.variables)), _isEqualNodes(node.initialization, toNode.initialization)), _isEqualTokens(node.leftSeparator, toNode.leftSeparator)), _isEqualNodes(node.condition, toNode.condition)), _isEqualTokens(node.rightSeparator, toNode.rightSeparator)), _isEqualNodeLists(node.updaters, toNode.updaters)), _isEqualTokens(node.rightParenthesis, toNode.rightParenthesis)), _isEqualNodes(node.body, toNode.body));
}
+ @override
bool visitFunctionDeclaration(FunctionDeclaration node) {
FunctionDeclaration toNode = this._toNode as FunctionDeclaration;
- return javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(isEqualNodes(node.documentationComment, toNode.documentationComment), isEqualNodeLists(node.metadata, toNode.metadata)), isEqualTokens(node.externalKeyword, toNode.externalKeyword)), isEqualNodes(node.returnType, toNode.returnType)), isEqualTokens(node.propertyKeyword, toNode.propertyKeyword)), isEqualNodes(node.name, toNode.name)), isEqualNodes(node.functionExpression, toNode.functionExpression));
+ return javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(_isEqualNodes(node.documentationComment, toNode.documentationComment), _isEqualNodeLists(node.metadata, toNode.metadata)), _isEqualTokens(node.externalKeyword, toNode.externalKeyword)), _isEqualNodes(node.returnType, toNode.returnType)), _isEqualTokens(node.propertyKeyword, toNode.propertyKeyword)), _isEqualNodes(node.name, toNode.name)), _isEqualNodes(node.functionExpression, toNode.functionExpression));
}
+ @override
bool visitFunctionDeclarationStatement(FunctionDeclarationStatement node) {
FunctionDeclarationStatement toNode = this._toNode as FunctionDeclarationStatement;
- return isEqualNodes(node.functionDeclaration, toNode.functionDeclaration);
+ return _isEqualNodes(node.functionDeclaration, toNode.functionDeclaration);
}
+ @override
bool visitFunctionExpression(FunctionExpression node) {
FunctionExpression toNode = this._toNode as FunctionExpression;
- if (javaBooleanAnd(isEqualNodes(node.parameters, toNode.parameters), isEqualNodes(node.body, toNode.body))) {
+ if (javaBooleanAnd(_isEqualNodes(node.parameters, toNode.parameters), _isEqualNodes(node.body, toNode.body))) {
toNode.element = node.element;
toNode.propagatedType = node.propagatedType;
toNode.staticType = node.staticType;
@@ -7990,9 +8148,10 @@
return false;
}
+ @override
bool visitFunctionExpressionInvocation(FunctionExpressionInvocation node) {
FunctionExpressionInvocation toNode = this._toNode as FunctionExpressionInvocation;
- if (javaBooleanAnd(isEqualNodes(node.function, toNode.function), isEqualNodes(node.argumentList, toNode.argumentList))) {
+ if (javaBooleanAnd(_isEqualNodes(node.function, toNode.function), _isEqualNodes(node.argumentList, toNode.argumentList))) {
toNode.propagatedElement = node.propagatedElement;
toNode.propagatedType = node.propagatedType;
toNode.staticElement = node.staticElement;
@@ -8002,43 +8161,50 @@
return false;
}
+ @override
bool visitFunctionTypeAlias(FunctionTypeAlias node) {
FunctionTypeAlias toNode = this._toNode as FunctionTypeAlias;
- return javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(isEqualNodes(node.documentationComment, toNode.documentationComment), isEqualNodeLists(node.metadata, toNode.metadata)), isEqualTokens(node.keyword, toNode.keyword)), isEqualNodes(node.returnType, toNode.returnType)), isEqualNodes(node.name, toNode.name)), isEqualNodes(node.typeParameters, toNode.typeParameters)), isEqualNodes(node.parameters, toNode.parameters)), isEqualTokens(node.semicolon, toNode.semicolon));
+ return javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(_isEqualNodes(node.documentationComment, toNode.documentationComment), _isEqualNodeLists(node.metadata, toNode.metadata)), _isEqualTokens(node.keyword, toNode.keyword)), _isEqualNodes(node.returnType, toNode.returnType)), _isEqualNodes(node.name, toNode.name)), _isEqualNodes(node.typeParameters, toNode.typeParameters)), _isEqualNodes(node.parameters, toNode.parameters)), _isEqualTokens(node.semicolon, toNode.semicolon));
}
+ @override
bool visitFunctionTypedFormalParameter(FunctionTypedFormalParameter node) {
FunctionTypedFormalParameter toNode = this._toNode as FunctionTypedFormalParameter;
- return javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(isEqualNodes(node.documentationComment, toNode.documentationComment), isEqualNodeLists(node.metadata, toNode.metadata)), isEqualNodes(node.returnType, toNode.returnType)), isEqualNodes(node.identifier, toNode.identifier)), isEqualNodes(node.parameters, toNode.parameters));
+ return javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(_isEqualNodes(node.documentationComment, toNode.documentationComment), _isEqualNodeLists(node.metadata, toNode.metadata)), _isEqualNodes(node.returnType, toNode.returnType)), _isEqualNodes(node.identifier, toNode.identifier)), _isEqualNodes(node.parameters, toNode.parameters));
}
+ @override
bool visitHideCombinator(HideCombinator node) {
HideCombinator toNode = this._toNode as HideCombinator;
- return javaBooleanAnd(isEqualTokens(node.keyword, toNode.keyword), isEqualNodeLists(node.hiddenNames, toNode.hiddenNames));
+ return javaBooleanAnd(_isEqualTokens(node.keyword, toNode.keyword), _isEqualNodeLists(node.hiddenNames, toNode.hiddenNames));
}
+ @override
bool visitIfStatement(IfStatement node) {
IfStatement toNode = this._toNode as IfStatement;
- return javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(isEqualTokens(node.ifKeyword, toNode.ifKeyword), isEqualTokens(node.leftParenthesis, toNode.leftParenthesis)), isEqualNodes(node.condition, toNode.condition)), isEqualTokens(node.rightParenthesis, toNode.rightParenthesis)), isEqualNodes(node.thenStatement, toNode.thenStatement)), isEqualTokens(node.elseKeyword, toNode.elseKeyword)), isEqualNodes(node.elseStatement, toNode.elseStatement));
+ return javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(_isEqualTokens(node.ifKeyword, toNode.ifKeyword), _isEqualTokens(node.leftParenthesis, toNode.leftParenthesis)), _isEqualNodes(node.condition, toNode.condition)), _isEqualTokens(node.rightParenthesis, toNode.rightParenthesis)), _isEqualNodes(node.thenStatement, toNode.thenStatement)), _isEqualTokens(node.elseKeyword, toNode.elseKeyword)), _isEqualNodes(node.elseStatement, toNode.elseStatement));
}
+ @override
bool visitImplementsClause(ImplementsClause node) {
ImplementsClause toNode = this._toNode as ImplementsClause;
- return javaBooleanAnd(isEqualTokens(node.keyword, toNode.keyword), isEqualNodeLists(node.interfaces, toNode.interfaces));
+ return javaBooleanAnd(_isEqualTokens(node.keyword, toNode.keyword), _isEqualNodeLists(node.interfaces, toNode.interfaces));
}
+ @override
bool visitImportDirective(ImportDirective node) {
ImportDirective toNode = this._toNode as ImportDirective;
- if (javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(isEqualNodes(node.documentationComment, toNode.documentationComment), isEqualNodeLists(node.metadata, toNode.metadata)), isEqualTokens(node.keyword, toNode.keyword)), isEqualNodes(node.uri, toNode.uri)), isEqualTokens(node.asToken, toNode.asToken)), isEqualNodes(node.prefix, toNode.prefix)), isEqualNodeLists(node.combinators, toNode.combinators)), isEqualTokens(node.semicolon, toNode.semicolon))) {
+ if (javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(_isEqualNodes(node.documentationComment, toNode.documentationComment), _isEqualNodeLists(node.metadata, toNode.metadata)), _isEqualTokens(node.keyword, toNode.keyword)), _isEqualNodes(node.uri, toNode.uri)), _isEqualTokens(node.asToken, toNode.asToken)), _isEqualNodes(node.prefix, toNode.prefix)), _isEqualNodeLists(node.combinators, toNode.combinators)), _isEqualTokens(node.semicolon, toNode.semicolon))) {
toNode.element = node.element;
return true;
}
return false;
}
+ @override
bool visitIndexExpression(IndexExpression node) {
IndexExpression toNode = this._toNode as IndexExpression;
- if (javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(isEqualNodes(node.target, toNode.target), isEqualTokens(node.leftBracket, toNode.leftBracket)), isEqualNodes(node.index, toNode.index)), isEqualTokens(node.rightBracket, toNode.rightBracket))) {
+ if (javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(_isEqualNodes(node.target, toNode.target), _isEqualTokens(node.leftBracket, toNode.leftBracket)), _isEqualNodes(node.index, toNode.index)), _isEqualTokens(node.rightBracket, toNode.rightBracket))) {
toNode.auxiliaryElements = node.auxiliaryElements;
toNode.propagatedElement = node.propagatedElement;
toNode.propagatedType = node.propagatedType;
@@ -8049,9 +8215,10 @@
return false;
}
+ @override
bool visitInstanceCreationExpression(InstanceCreationExpression node) {
InstanceCreationExpression toNode = this._toNode as InstanceCreationExpression;
- if (javaBooleanAnd(javaBooleanAnd(isEqualTokens(node.keyword, toNode.keyword), isEqualNodes(node.constructorName, toNode.constructorName)), isEqualNodes(node.argumentList, toNode.argumentList))) {
+ if (javaBooleanAnd(javaBooleanAnd(_isEqualTokens(node.keyword, toNode.keyword), _isEqualNodes(node.constructorName, toNode.constructorName)), _isEqualNodes(node.argumentList, toNode.argumentList))) {
toNode.propagatedType = node.propagatedType;
toNode.staticElement = node.staticElement;
toNode.staticType = node.staticType;
@@ -8060,9 +8227,10 @@
return false;
}
+ @override
bool visitIntegerLiteral(IntegerLiteral node) {
IntegerLiteral toNode = this._toNode as IntegerLiteral;
- if (javaBooleanAnd(isEqualTokens(node.literal, toNode.literal), identical(node.value, toNode.value))) {
+ if (javaBooleanAnd(_isEqualTokens(node.literal, toNode.literal), identical(node.value, toNode.value))) {
toNode.propagatedType = node.propagatedType;
toNode.staticType = node.staticType;
return true;
@@ -8070,19 +8238,22 @@
return false;
}
+ @override
bool visitInterpolationExpression(InterpolationExpression node) {
InterpolationExpression toNode = this._toNode as InterpolationExpression;
- return javaBooleanAnd(javaBooleanAnd(isEqualTokens(node.leftBracket, toNode.leftBracket), isEqualNodes(node.expression, toNode.expression)), isEqualTokens(node.rightBracket, toNode.rightBracket));
+ return javaBooleanAnd(javaBooleanAnd(_isEqualTokens(node.leftBracket, toNode.leftBracket), _isEqualNodes(node.expression, toNode.expression)), _isEqualTokens(node.rightBracket, toNode.rightBracket));
}
+ @override
bool visitInterpolationString(InterpolationString node) {
InterpolationString toNode = this._toNode as InterpolationString;
- return javaBooleanAnd(isEqualTokens(node.contents, toNode.contents), node.value == toNode.value);
+ return javaBooleanAnd(_isEqualTokens(node.contents, toNode.contents), node.value == toNode.value);
}
+ @override
bool visitIsExpression(IsExpression node) {
IsExpression toNode = this._toNode as IsExpression;
- if (javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(isEqualNodes(node.expression, toNode.expression), isEqualTokens(node.isOperator, toNode.isOperator)), isEqualTokens(node.notOperator, toNode.notOperator)), isEqualNodes(node.type, toNode.type))) {
+ if (javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(_isEqualNodes(node.expression, toNode.expression), _isEqualTokens(node.isOperator, toNode.isOperator)), _isEqualTokens(node.notOperator, toNode.notOperator)), _isEqualNodes(node.type, toNode.type))) {
toNode.propagatedType = node.propagatedType;
toNode.staticType = node.staticType;
return true;
@@ -8090,24 +8261,28 @@
return false;
}
+ @override
bool visitLabel(Label node) {
Label toNode = this._toNode as Label;
- return javaBooleanAnd(isEqualNodes(node.label, toNode.label), isEqualTokens(node.colon, toNode.colon));
+ return javaBooleanAnd(_isEqualNodes(node.label, toNode.label), _isEqualTokens(node.colon, toNode.colon));
}
+ @override
bool visitLabeledStatement(LabeledStatement node) {
LabeledStatement toNode = this._toNode as LabeledStatement;
- return javaBooleanAnd(isEqualNodeLists(node.labels, toNode.labels), isEqualNodes(node.statement, toNode.statement));
+ return javaBooleanAnd(_isEqualNodeLists(node.labels, toNode.labels), _isEqualNodes(node.statement, toNode.statement));
}
+ @override
bool visitLibraryDirective(LibraryDirective node) {
LibraryDirective toNode = this._toNode as LibraryDirective;
- return javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(isEqualNodes(node.documentationComment, toNode.documentationComment), isEqualNodeLists(node.metadata, toNode.metadata)), isEqualTokens(node.libraryToken, toNode.libraryToken)), isEqualNodes(node.name, toNode.name)), isEqualTokens(node.semicolon, toNode.semicolon));
+ return javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(_isEqualNodes(node.documentationComment, toNode.documentationComment), _isEqualNodeLists(node.metadata, toNode.metadata)), _isEqualTokens(node.libraryToken, toNode.libraryToken)), _isEqualNodes(node.name, toNode.name)), _isEqualTokens(node.semicolon, toNode.semicolon));
}
+ @override
bool visitLibraryIdentifier(LibraryIdentifier node) {
LibraryIdentifier toNode = this._toNode as LibraryIdentifier;
- if (isEqualNodeLists(node.components, toNode.components)) {
+ if (_isEqualNodeLists(node.components, toNode.components)) {
toNode.propagatedType = node.propagatedType;
toNode.staticType = node.staticType;
return true;
@@ -8115,9 +8290,10 @@
return false;
}
+ @override
bool visitListLiteral(ListLiteral node) {
ListLiteral toNode = this._toNode as ListLiteral;
- if (javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(isEqualTokens(node.constKeyword, toNode.constKeyword), isEqualNodes(node.typeArguments, toNode.typeArguments)), isEqualTokens(node.leftBracket, toNode.leftBracket)), isEqualNodeLists(node.elements, toNode.elements)), isEqualTokens(node.rightBracket, toNode.rightBracket))) {
+ if (javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(_isEqualTokens(node.constKeyword, toNode.constKeyword), _isEqualNodes(node.typeArguments, toNode.typeArguments)), _isEqualTokens(node.leftBracket, toNode.leftBracket)), _isEqualNodeLists(node.elements, toNode.elements)), _isEqualTokens(node.rightBracket, toNode.rightBracket))) {
toNode.propagatedType = node.propagatedType;
toNode.staticType = node.staticType;
return true;
@@ -8125,9 +8301,10 @@
return false;
}
+ @override
bool visitMapLiteral(MapLiteral node) {
MapLiteral toNode = this._toNode as MapLiteral;
- if (javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(isEqualTokens(node.constKeyword, toNode.constKeyword), isEqualNodes(node.typeArguments, toNode.typeArguments)), isEqualTokens(node.leftBracket, toNode.leftBracket)), isEqualNodeLists(node.entries, toNode.entries)), isEqualTokens(node.rightBracket, toNode.rightBracket))) {
+ if (javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(_isEqualTokens(node.constKeyword, toNode.constKeyword), _isEqualNodes(node.typeArguments, toNode.typeArguments)), _isEqualTokens(node.leftBracket, toNode.leftBracket)), _isEqualNodeLists(node.entries, toNode.entries)), _isEqualTokens(node.rightBracket, toNode.rightBracket))) {
toNode.propagatedType = node.propagatedType;
toNode.staticType = node.staticType;
return true;
@@ -8135,19 +8312,22 @@
return false;
}
+ @override
bool visitMapLiteralEntry(MapLiteralEntry node) {
MapLiteralEntry toNode = this._toNode as MapLiteralEntry;
- return javaBooleanAnd(javaBooleanAnd(isEqualNodes(node.key, toNode.key), isEqualTokens(node.separator, toNode.separator)), isEqualNodes(node.value, toNode.value));
+ return javaBooleanAnd(javaBooleanAnd(_isEqualNodes(node.key, toNode.key), _isEqualTokens(node.separator, toNode.separator)), _isEqualNodes(node.value, toNode.value));
}
+ @override
bool visitMethodDeclaration(MethodDeclaration node) {
MethodDeclaration toNode = this._toNode as MethodDeclaration;
- return javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(isEqualNodes(node.documentationComment, toNode.documentationComment), isEqualNodeLists(node.metadata, toNode.metadata)), isEqualTokens(node.externalKeyword, toNode.externalKeyword)), isEqualTokens(node.modifierKeyword, toNode.modifierKeyword)), isEqualNodes(node.returnType, toNode.returnType)), isEqualTokens(node.propertyKeyword, toNode.propertyKeyword)), isEqualTokens(node.propertyKeyword, toNode.propertyKeyword)), isEqualNodes(node.name, toNode.name)), isEqualNodes(node.parameters, toNode.parameters)), isEqualNodes(node.body, toNode.body));
+ return javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(_isEqualNodes(node.documentationComment, toNode.documentationComment), _isEqualNodeLists(node.metadata, toNode.metadata)), _isEqualTokens(node.externalKeyword, toNode.externalKeyword)), _isEqualTokens(node.modifierKeyword, toNode.modifierKeyword)), _isEqualNodes(node.returnType, toNode.returnType)), _isEqualTokens(node.propertyKeyword, toNode.propertyKeyword)), _isEqualTokens(node.propertyKeyword, toNode.propertyKeyword)), _isEqualNodes(node.name, toNode.name)), _isEqualNodes(node.parameters, toNode.parameters)), _isEqualNodes(node.body, toNode.body));
}
+ @override
bool visitMethodInvocation(MethodInvocation node) {
MethodInvocation toNode = this._toNode as MethodInvocation;
- if (javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(isEqualNodes(node.target, toNode.target), isEqualTokens(node.period, toNode.period)), isEqualNodes(node.methodName, toNode.methodName)), isEqualNodes(node.argumentList, toNode.argumentList))) {
+ if (javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(_isEqualNodes(node.target, toNode.target), _isEqualTokens(node.period, toNode.period)), _isEqualNodes(node.methodName, toNode.methodName)), _isEqualNodes(node.argumentList, toNode.argumentList))) {
toNode.propagatedType = node.propagatedType;
toNode.staticType = node.staticType;
return true;
@@ -8155,9 +8335,10 @@
return false;
}
+ @override
bool visitNamedExpression(NamedExpression node) {
NamedExpression toNode = this._toNode as NamedExpression;
- if (javaBooleanAnd(isEqualNodes(node.name, toNode.name), isEqualNodes(node.expression, toNode.expression))) {
+ if (javaBooleanAnd(_isEqualNodes(node.name, toNode.name), _isEqualNodes(node.expression, toNode.expression))) {
toNode.propagatedType = node.propagatedType;
toNode.staticType = node.staticType;
return true;
@@ -8165,19 +8346,22 @@
return false;
}
+ @override
bool visitNativeClause(NativeClause node) {
NativeClause toNode = this._toNode as NativeClause;
- return javaBooleanAnd(isEqualTokens(node.keyword, toNode.keyword), isEqualNodes(node.name, toNode.name));
+ return javaBooleanAnd(_isEqualTokens(node.keyword, toNode.keyword), _isEqualNodes(node.name, toNode.name));
}
+ @override
bool visitNativeFunctionBody(NativeFunctionBody node) {
NativeFunctionBody toNode = this._toNode as NativeFunctionBody;
- return javaBooleanAnd(javaBooleanAnd(isEqualTokens(node.nativeToken, toNode.nativeToken), isEqualNodes(node.stringLiteral, toNode.stringLiteral)), isEqualTokens(node.semicolon, toNode.semicolon));
+ return javaBooleanAnd(javaBooleanAnd(_isEqualTokens(node.nativeToken, toNode.nativeToken), _isEqualNodes(node.stringLiteral, toNode.stringLiteral)), _isEqualTokens(node.semicolon, toNode.semicolon));
}
+ @override
bool visitNullLiteral(NullLiteral node) {
NullLiteral toNode = this._toNode as NullLiteral;
- if (isEqualTokens(node.literal, toNode.literal)) {
+ if (_isEqualTokens(node.literal, toNode.literal)) {
toNode.propagatedType = node.propagatedType;
toNode.staticType = node.staticType;
return true;
@@ -8185,9 +8369,10 @@
return false;
}
+ @override
bool visitParenthesizedExpression(ParenthesizedExpression node) {
ParenthesizedExpression toNode = this._toNode as ParenthesizedExpression;
- if (javaBooleanAnd(javaBooleanAnd(isEqualTokens(node.leftParenthesis, toNode.leftParenthesis), isEqualNodes(node.expression, toNode.expression)), isEqualTokens(node.rightParenthesis, toNode.rightParenthesis))) {
+ if (javaBooleanAnd(javaBooleanAnd(_isEqualTokens(node.leftParenthesis, toNode.leftParenthesis), _isEqualNodes(node.expression, toNode.expression)), _isEqualTokens(node.rightParenthesis, toNode.rightParenthesis))) {
toNode.propagatedType = node.propagatedType;
toNode.staticType = node.staticType;
return true;
@@ -8195,27 +8380,30 @@
return false;
}
+ @override
bool visitPartDirective(PartDirective node) {
PartDirective toNode = this._toNode as PartDirective;
- if (javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(isEqualNodes(node.documentationComment, toNode.documentationComment), isEqualNodeLists(node.metadata, toNode.metadata)), isEqualTokens(node.partToken, toNode.partToken)), isEqualNodes(node.uri, toNode.uri)), isEqualTokens(node.semicolon, toNode.semicolon))) {
+ if (javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(_isEqualNodes(node.documentationComment, toNode.documentationComment), _isEqualNodeLists(node.metadata, toNode.metadata)), _isEqualTokens(node.partToken, toNode.partToken)), _isEqualNodes(node.uri, toNode.uri)), _isEqualTokens(node.semicolon, toNode.semicolon))) {
toNode.element = node.element;
return true;
}
return false;
}
+ @override
bool visitPartOfDirective(PartOfDirective node) {
PartOfDirective toNode = this._toNode as PartOfDirective;
- if (javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(isEqualNodes(node.documentationComment, toNode.documentationComment), isEqualNodeLists(node.metadata, toNode.metadata)), isEqualTokens(node.partToken, toNode.partToken)), isEqualTokens(node.ofToken, toNode.ofToken)), isEqualNodes(node.libraryName, toNode.libraryName)), isEqualTokens(node.semicolon, toNode.semicolon))) {
+ if (javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(_isEqualNodes(node.documentationComment, toNode.documentationComment), _isEqualNodeLists(node.metadata, toNode.metadata)), _isEqualTokens(node.partToken, toNode.partToken)), _isEqualTokens(node.ofToken, toNode.ofToken)), _isEqualNodes(node.libraryName, toNode.libraryName)), _isEqualTokens(node.semicolon, toNode.semicolon))) {
toNode.element = node.element;
return true;
}
return false;
}
+ @override
bool visitPostfixExpression(PostfixExpression node) {
PostfixExpression toNode = this._toNode as PostfixExpression;
- if (javaBooleanAnd(isEqualNodes(node.operand, toNode.operand), isEqualTokens(node.operator, toNode.operator))) {
+ if (javaBooleanAnd(_isEqualNodes(node.operand, toNode.operand), _isEqualTokens(node.operator, toNode.operator))) {
toNode.propagatedElement = node.propagatedElement;
toNode.propagatedType = node.propagatedType;
toNode.staticElement = node.staticElement;
@@ -8225,9 +8413,10 @@
return false;
}
+ @override
bool visitPrefixedIdentifier(PrefixedIdentifier node) {
PrefixedIdentifier toNode = this._toNode as PrefixedIdentifier;
- if (javaBooleanAnd(javaBooleanAnd(isEqualNodes(node.prefix, toNode.prefix), isEqualTokens(node.period, toNode.period)), isEqualNodes(node.identifier, toNode.identifier))) {
+ if (javaBooleanAnd(javaBooleanAnd(_isEqualNodes(node.prefix, toNode.prefix), _isEqualTokens(node.period, toNode.period)), _isEqualNodes(node.identifier, toNode.identifier))) {
toNode.propagatedType = node.propagatedType;
toNode.staticType = node.staticType;
return true;
@@ -8235,9 +8424,10 @@
return false;
}
+ @override
bool visitPrefixExpression(PrefixExpression node) {
PrefixExpression toNode = this._toNode as PrefixExpression;
- if (javaBooleanAnd(isEqualTokens(node.operator, toNode.operator), isEqualNodes(node.operand, toNode.operand))) {
+ if (javaBooleanAnd(_isEqualTokens(node.operator, toNode.operator), _isEqualNodes(node.operand, toNode.operand))) {
toNode.propagatedElement = node.propagatedElement;
toNode.propagatedType = node.propagatedType;
toNode.staticElement = node.staticElement;
@@ -8247,9 +8437,10 @@
return false;
}
+ @override
bool visitPropertyAccess(PropertyAccess node) {
PropertyAccess toNode = this._toNode as PropertyAccess;
- if (javaBooleanAnd(javaBooleanAnd(isEqualNodes(node.target, toNode.target), isEqualTokens(node.operator, toNode.operator)), isEqualNodes(node.propertyName, toNode.propertyName))) {
+ if (javaBooleanAnd(javaBooleanAnd(_isEqualNodes(node.target, toNode.target), _isEqualTokens(node.operator, toNode.operator)), _isEqualNodes(node.propertyName, toNode.propertyName))) {
toNode.propagatedType = node.propagatedType;
toNode.staticType = node.staticType;
return true;
@@ -8257,18 +8448,20 @@
return false;
}
+ @override
bool visitRedirectingConstructorInvocation(RedirectingConstructorInvocation node) {
RedirectingConstructorInvocation toNode = this._toNode as RedirectingConstructorInvocation;
- if (javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(isEqualTokens(node.keyword, toNode.keyword), isEqualTokens(node.period, toNode.period)), isEqualNodes(node.constructorName, toNode.constructorName)), isEqualNodes(node.argumentList, toNode.argumentList))) {
+ if (javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(_isEqualTokens(node.keyword, toNode.keyword), _isEqualTokens(node.period, toNode.period)), _isEqualNodes(node.constructorName, toNode.constructorName)), _isEqualNodes(node.argumentList, toNode.argumentList))) {
toNode.staticElement = node.staticElement;
return true;
}
return false;
}
+ @override
bool visitRethrowExpression(RethrowExpression node) {
RethrowExpression toNode = this._toNode as RethrowExpression;
- if (isEqualTokens(node.keyword, toNode.keyword)) {
+ if (_isEqualTokens(node.keyword, toNode.keyword)) {
toNode.propagatedType = node.propagatedType;
toNode.staticType = node.staticType;
return true;
@@ -8276,29 +8469,34 @@
return false;
}
+ @override
bool visitReturnStatement(ReturnStatement node) {
ReturnStatement toNode = this._toNode as ReturnStatement;
- return javaBooleanAnd(javaBooleanAnd(isEqualTokens(node.keyword, toNode.keyword), isEqualNodes(node.expression, toNode.expression)), isEqualTokens(node.semicolon, toNode.semicolon));
+ return javaBooleanAnd(javaBooleanAnd(_isEqualTokens(node.keyword, toNode.keyword), _isEqualNodes(node.expression, toNode.expression)), _isEqualTokens(node.semicolon, toNode.semicolon));
}
+ @override
bool visitScriptTag(ScriptTag node) {
ScriptTag toNode = this._toNode as ScriptTag;
- return isEqualTokens(node.scriptTag, toNode.scriptTag);
+ return _isEqualTokens(node.scriptTag, toNode.scriptTag);
}
+ @override
bool visitShowCombinator(ShowCombinator node) {
ShowCombinator toNode = this._toNode as ShowCombinator;
- return javaBooleanAnd(isEqualTokens(node.keyword, toNode.keyword), isEqualNodeLists(node.shownNames, toNode.shownNames));
+ return javaBooleanAnd(_isEqualTokens(node.keyword, toNode.keyword), _isEqualNodeLists(node.shownNames, toNode.shownNames));
}
+ @override
bool visitSimpleFormalParameter(SimpleFormalParameter node) {
SimpleFormalParameter toNode = this._toNode as SimpleFormalParameter;
- return javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(isEqualNodes(node.documentationComment, toNode.documentationComment), isEqualNodeLists(node.metadata, toNode.metadata)), isEqualTokens(node.keyword, toNode.keyword)), isEqualNodes(node.type, toNode.type)), isEqualNodes(node.identifier, toNode.identifier));
+ return javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(_isEqualNodes(node.documentationComment, toNode.documentationComment), _isEqualNodeLists(node.metadata, toNode.metadata)), _isEqualTokens(node.keyword, toNode.keyword)), _isEqualNodes(node.type, toNode.type)), _isEqualNodes(node.identifier, toNode.identifier));
}
+ @override
bool visitSimpleIdentifier(SimpleIdentifier node) {
SimpleIdentifier toNode = this._toNode as SimpleIdentifier;
- if (isEqualTokens(node.token, toNode.token)) {
+ if (_isEqualTokens(node.token, toNode.token)) {
toNode.staticElement = node.staticElement;
toNode.staticType = node.staticType;
toNode.propagatedElement = node.propagatedElement;
@@ -8309,9 +8507,10 @@
return false;
}
+ @override
bool visitSimpleStringLiteral(SimpleStringLiteral node) {
SimpleStringLiteral toNode = this._toNode as SimpleStringLiteral;
- if (javaBooleanAnd(isEqualTokens(node.literal, toNode.literal), identical(node.value, toNode.value))) {
+ if (javaBooleanAnd(_isEqualTokens(node.literal, toNode.literal), identical(node.value, toNode.value))) {
toNode.propagatedType = node.propagatedType;
toNode.staticType = node.staticType;
return true;
@@ -8319,9 +8518,10 @@
return false;
}
+ @override
bool visitStringInterpolation(StringInterpolation node) {
StringInterpolation toNode = this._toNode as StringInterpolation;
- if (isEqualNodeLists(node.elements, toNode.elements)) {
+ if (_isEqualNodeLists(node.elements, toNode.elements)) {
toNode.propagatedType = node.propagatedType;
toNode.staticType = node.staticType;
return true;
@@ -8329,18 +8529,20 @@
return false;
}
+ @override
bool visitSuperConstructorInvocation(SuperConstructorInvocation node) {
SuperConstructorInvocation toNode = this._toNode as SuperConstructorInvocation;
- if (javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(isEqualTokens(node.keyword, toNode.keyword), isEqualTokens(node.period, toNode.period)), isEqualNodes(node.constructorName, toNode.constructorName)), isEqualNodes(node.argumentList, toNode.argumentList))) {
+ if (javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(_isEqualTokens(node.keyword, toNode.keyword), _isEqualTokens(node.period, toNode.period)), _isEqualNodes(node.constructorName, toNode.constructorName)), _isEqualNodes(node.argumentList, toNode.argumentList))) {
toNode.staticElement = node.staticElement;
return true;
}
return false;
}
+ @override
bool visitSuperExpression(SuperExpression node) {
SuperExpression toNode = this._toNode as SuperExpression;
- if (isEqualTokens(node.keyword, toNode.keyword)) {
+ if (_isEqualTokens(node.keyword, toNode.keyword)) {
toNode.propagatedType = node.propagatedType;
toNode.staticType = node.staticType;
return true;
@@ -8348,24 +8550,28 @@
return false;
}
+ @override
bool visitSwitchCase(SwitchCase node) {
SwitchCase toNode = this._toNode as SwitchCase;
- return javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(isEqualNodeLists(node.labels, toNode.labels), isEqualTokens(node.keyword, toNode.keyword)), isEqualNodes(node.expression, toNode.expression)), isEqualTokens(node.colon, toNode.colon)), isEqualNodeLists(node.statements, toNode.statements));
+ return javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(_isEqualNodeLists(node.labels, toNode.labels), _isEqualTokens(node.keyword, toNode.keyword)), _isEqualNodes(node.expression, toNode.expression)), _isEqualTokens(node.colon, toNode.colon)), _isEqualNodeLists(node.statements, toNode.statements));
}
+ @override
bool visitSwitchDefault(SwitchDefault node) {
SwitchDefault toNode = this._toNode as SwitchDefault;
- return javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(isEqualNodeLists(node.labels, toNode.labels), isEqualTokens(node.keyword, toNode.keyword)), isEqualTokens(node.colon, toNode.colon)), isEqualNodeLists(node.statements, toNode.statements));
+ return javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(_isEqualNodeLists(node.labels, toNode.labels), _isEqualTokens(node.keyword, toNode.keyword)), _isEqualTokens(node.colon, toNode.colon)), _isEqualNodeLists(node.statements, toNode.statements));
}
+ @override
bool visitSwitchStatement(SwitchStatement node) {
SwitchStatement toNode = this._toNode as SwitchStatement;
- return javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(isEqualTokens(node.keyword, toNode.keyword), isEqualTokens(node.leftParenthesis, toNode.leftParenthesis)), isEqualNodes(node.expression, toNode.expression)), isEqualTokens(node.rightParenthesis, toNode.rightParenthesis)), isEqualTokens(node.leftBracket, toNode.leftBracket)), isEqualNodeLists(node.members, toNode.members)), isEqualTokens(node.rightBracket, toNode.rightBracket));
+ return javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(_isEqualTokens(node.keyword, toNode.keyword), _isEqualTokens(node.leftParenthesis, toNode.leftParenthesis)), _isEqualNodes(node.expression, toNode.expression)), _isEqualTokens(node.rightParenthesis, toNode.rightParenthesis)), _isEqualTokens(node.leftBracket, toNode.leftBracket)), _isEqualNodeLists(node.members, toNode.members)), _isEqualTokens(node.rightBracket, toNode.rightBracket));
}
+ @override
bool visitSymbolLiteral(SymbolLiteral node) {
SymbolLiteral toNode = this._toNode as SymbolLiteral;
- if (javaBooleanAnd(isEqualTokens(node.poundSign, toNode.poundSign), isEqualTokenLists(node.components, toNode.components))) {
+ if (javaBooleanAnd(_isEqualTokens(node.poundSign, toNode.poundSign), _isEqualTokenLists(node.components, toNode.components))) {
toNode.propagatedType = node.propagatedType;
toNode.staticType = node.staticType;
return true;
@@ -8373,9 +8579,10 @@
return false;
}
+ @override
bool visitThisExpression(ThisExpression node) {
ThisExpression toNode = this._toNode as ThisExpression;
- if (isEqualTokens(node.keyword, toNode.keyword)) {
+ if (_isEqualTokens(node.keyword, toNode.keyword)) {
toNode.propagatedType = node.propagatedType;
toNode.staticType = node.staticType;
return true;
@@ -8383,9 +8590,10 @@
return false;
}
+ @override
bool visitThrowExpression(ThrowExpression node) {
ThrowExpression toNode = this._toNode as ThrowExpression;
- if (javaBooleanAnd(isEqualTokens(node.keyword, toNode.keyword), isEqualNodes(node.expression, toNode.expression))) {
+ if (javaBooleanAnd(_isEqualTokens(node.keyword, toNode.keyword), _isEqualNodes(node.expression, toNode.expression))) {
toNode.propagatedType = node.propagatedType;
toNode.staticType = node.staticType;
return true;
@@ -8393,63 +8601,74 @@
return false;
}
+ @override
bool visitTopLevelVariableDeclaration(TopLevelVariableDeclaration node) {
TopLevelVariableDeclaration toNode = this._toNode as TopLevelVariableDeclaration;
- return javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(isEqualNodes(node.documentationComment, toNode.documentationComment), isEqualNodeLists(node.metadata, toNode.metadata)), isEqualNodes(node.variables, toNode.variables)), isEqualTokens(node.semicolon, toNode.semicolon));
+ return javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(_isEqualNodes(node.documentationComment, toNode.documentationComment), _isEqualNodeLists(node.metadata, toNode.metadata)), _isEqualNodes(node.variables, toNode.variables)), _isEqualTokens(node.semicolon, toNode.semicolon));
}
+ @override
bool visitTryStatement(TryStatement node) {
TryStatement toNode = this._toNode as TryStatement;
- return javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(isEqualTokens(node.tryKeyword, toNode.tryKeyword), isEqualNodes(node.body, toNode.body)), isEqualNodeLists(node.catchClauses, toNode.catchClauses)), isEqualTokens(node.finallyKeyword, toNode.finallyKeyword)), isEqualNodes(node.finallyBlock, toNode.finallyBlock));
+ return javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(_isEqualTokens(node.tryKeyword, toNode.tryKeyword), _isEqualNodes(node.body, toNode.body)), _isEqualNodeLists(node.catchClauses, toNode.catchClauses)), _isEqualTokens(node.finallyKeyword, toNode.finallyKeyword)), _isEqualNodes(node.finallyBlock, toNode.finallyBlock));
}
+ @override
bool visitTypeArgumentList(TypeArgumentList node) {
TypeArgumentList toNode = this._toNode as TypeArgumentList;
- return javaBooleanAnd(javaBooleanAnd(isEqualTokens(node.leftBracket, toNode.leftBracket), isEqualNodeLists(node.arguments, toNode.arguments)), isEqualTokens(node.rightBracket, toNode.rightBracket));
+ return javaBooleanAnd(javaBooleanAnd(_isEqualTokens(node.leftBracket, toNode.leftBracket), _isEqualNodeLists(node.arguments, toNode.arguments)), _isEqualTokens(node.rightBracket, toNode.rightBracket));
}
+ @override
bool visitTypeName(TypeName node) {
TypeName toNode = this._toNode as TypeName;
- if (javaBooleanAnd(isEqualNodes(node.name, toNode.name), isEqualNodes(node.typeArguments, toNode.typeArguments))) {
+ if (javaBooleanAnd(_isEqualNodes(node.name, toNode.name), _isEqualNodes(node.typeArguments, toNode.typeArguments))) {
toNode.type = node.type;
return true;
}
return false;
}
+ @override
bool visitTypeParameter(TypeParameter node) {
TypeParameter toNode = this._toNode as TypeParameter;
- return javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(isEqualNodes(node.documentationComment, toNode.documentationComment), isEqualNodeLists(node.metadata, toNode.metadata)), isEqualNodes(node.name, toNode.name)), isEqualTokens(node.keyword, toNode.keyword)), isEqualNodes(node.bound, toNode.bound));
+ return javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(_isEqualNodes(node.documentationComment, toNode.documentationComment), _isEqualNodeLists(node.metadata, toNode.metadata)), _isEqualNodes(node.name, toNode.name)), _isEqualTokens(node.keyword, toNode.keyword)), _isEqualNodes(node.bound, toNode.bound));
}
+ @override
bool visitTypeParameterList(TypeParameterList node) {
TypeParameterList toNode = this._toNode as TypeParameterList;
- return javaBooleanAnd(javaBooleanAnd(isEqualTokens(node.leftBracket, toNode.leftBracket), isEqualNodeLists(node.typeParameters, toNode.typeParameters)), isEqualTokens(node.rightBracket, toNode.rightBracket));
+ return javaBooleanAnd(javaBooleanAnd(_isEqualTokens(node.leftBracket, toNode.leftBracket), _isEqualNodeLists(node.typeParameters, toNode.typeParameters)), _isEqualTokens(node.rightBracket, toNode.rightBracket));
}
+ @override
bool visitVariableDeclaration(VariableDeclaration node) {
VariableDeclaration toNode = this._toNode as VariableDeclaration;
- return javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(isEqualNodes(node.documentationComment, toNode.documentationComment), isEqualNodeLists(node.metadata, toNode.metadata)), isEqualNodes(node.name, toNode.name)), isEqualTokens(node.equals, toNode.equals)), isEqualNodes(node.initializer, toNode.initializer));
+ return javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(_isEqualNodes(node.documentationComment, toNode.documentationComment), _isEqualNodeLists(node.metadata, toNode.metadata)), _isEqualNodes(node.name, toNode.name)), _isEqualTokens(node.equals, toNode.equals)), _isEqualNodes(node.initializer, toNode.initializer));
}
+ @override
bool visitVariableDeclarationList(VariableDeclarationList node) {
VariableDeclarationList toNode = this._toNode as VariableDeclarationList;
- return javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(isEqualNodes(node.documentationComment, toNode.documentationComment), isEqualNodeLists(node.metadata, toNode.metadata)), isEqualTokens(node.keyword, toNode.keyword)), isEqualNodes(node.type, toNode.type)), isEqualNodeLists(node.variables, toNode.variables));
+ return javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(_isEqualNodes(node.documentationComment, toNode.documentationComment), _isEqualNodeLists(node.metadata, toNode.metadata)), _isEqualTokens(node.keyword, toNode.keyword)), _isEqualNodes(node.type, toNode.type)), _isEqualNodeLists(node.variables, toNode.variables));
}
+ @override
bool visitVariableDeclarationStatement(VariableDeclarationStatement node) {
VariableDeclarationStatement toNode = this._toNode as VariableDeclarationStatement;
- return javaBooleanAnd(isEqualNodes(node.variables, toNode.variables), isEqualTokens(node.semicolon, toNode.semicolon));
+ return javaBooleanAnd(_isEqualNodes(node.variables, toNode.variables), _isEqualTokens(node.semicolon, toNode.semicolon));
}
+ @override
bool visitWhileStatement(WhileStatement node) {
WhileStatement toNode = this._toNode as WhileStatement;
- return javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(isEqualTokens(node.keyword, toNode.keyword), isEqualTokens(node.leftParenthesis, toNode.leftParenthesis)), isEqualNodes(node.condition, toNode.condition)), isEqualTokens(node.rightParenthesis, toNode.rightParenthesis)), isEqualNodes(node.body, toNode.body));
+ return javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(javaBooleanAnd(_isEqualTokens(node.keyword, toNode.keyword), _isEqualTokens(node.leftParenthesis, toNode.leftParenthesis)), _isEqualNodes(node.condition, toNode.condition)), _isEqualTokens(node.rightParenthesis, toNode.rightParenthesis)), _isEqualNodes(node.body, toNode.body));
}
+ @override
bool visitWithClause(WithClause node) {
WithClause toNode = this._toNode as WithClause;
- return javaBooleanAnd(isEqualTokens(node.withKeyword, toNode.withKeyword), isEqualNodeLists(node.mixinTypes, toNode.mixinTypes));
+ return javaBooleanAnd(_isEqualTokens(node.withKeyword, toNode.withKeyword), _isEqualNodeLists(node.mixinTypes, toNode.mixinTypes));
}
/**
@@ -8461,7 +8680,7 @@
* @return `true` if the given AST nodes have the same size and corresponding elements are
* equal
*/
- bool isEqualNodeLists(NodeList first, NodeList second) {
+ bool _isEqualNodeLists(NodeList first, NodeList second) {
if (first == null) {
return second == null;
} else if (second == null) {
@@ -8473,7 +8692,7 @@
}
bool equal = true;
for (int i = 0; i < size; i++) {
- if (!isEqualNodes(first[i], second[i])) {
+ if (!_isEqualNodes(first[i], second[i])) {
equal = false;
}
}
@@ -8489,7 +8708,7 @@
* @param toNode the node to which resolution information will be copied
* @return `true` if the given AST nodes have the same structure
*/
- bool isEqualNodes(AstNode fromNode, AstNode toNode) {
+ bool _isEqualNodes(AstNode fromNode, AstNode toNode) {
if (fromNode == null) {
return toNode == null;
} else if (toNode == null) {
@@ -8526,13 +8745,13 @@
* @return `true` if the given arrays of tokens have the same length and corresponding
* elements are equal
*/
- bool isEqualTokenLists(List<Token> first, List<Token> second) {
+ bool _isEqualTokenLists(List<Token> first, List<Token> second) {
int length = first.length;
if (second.length != length) {
return false;
}
for (int i = 0; i < length; i++) {
- if (!isEqualTokens(first[i], second[i])) {
+ if (!_isEqualTokens(first[i], second[i])) {
return false;
}
}
@@ -8546,7 +8765,7 @@
* @param second the second node being compared
* @return `true` if the given tokens have the same structure
*/
- bool isEqualTokens(Token first, Token second) {
+ bool _isEqualTokens(Token first, Token second) {
if (first == null) {
return second == null;
} else if (second == null) {
@@ -8555,1082 +8774,224 @@
return first.lexeme == second.lexeme;
}
}
+Map<String, MethodTrampoline> methodTable_Parser = <String, MethodTrampoline> {
+ 'parseCompilationUnit_1': new MethodTrampoline(1, (Parser target, arg0) => target.parseCompilationUnit(arg0)),
+ 'parseExpression_1': new MethodTrampoline(1, (Parser target, arg0) => target.parseExpression(arg0)),
+ 'parseStatement_1': new MethodTrampoline(1, (Parser target, arg0) => target.parseStatement(arg0)),
+ 'parseStatements_1': new MethodTrampoline(1, (Parser target, arg0) => target.parseStatements(arg0)),
+ 'parseAnnotation_0': new MethodTrampoline(0, (Parser target) => target.parseAnnotation()),
+ 'parseArgument_0': new MethodTrampoline(0, (Parser target) => target.parseArgument()),
+ 'parseArgumentList_0': new MethodTrampoline(0, (Parser target) => target.parseArgumentList()),
+ 'parseBitwiseOrExpression_0': new MethodTrampoline(0, (Parser target) => target.parseBitwiseOrExpression()),
+ 'parseBlock_0': new MethodTrampoline(0, (Parser target) => target.parseBlock()),
+ 'parseClassMember_1': new MethodTrampoline(1, (Parser target, arg0) => target.parseClassMember(arg0)),
+ 'parseCompilationUnit_0': new MethodTrampoline(0, (Parser target) => target.parseCompilationUnit2()),
+ 'parseConditionalExpression_0': new MethodTrampoline(0, (Parser target) => target.parseConditionalExpression()),
+ 'parseConstructorName_0': new MethodTrampoline(0, (Parser target) => target.parseConstructorName()),
+ 'parseExpression_0': new MethodTrampoline(0, (Parser target) => target.parseExpression2()),
+ 'parseExpressionWithoutCascade_0': new MethodTrampoline(0, (Parser target) => target.parseExpressionWithoutCascade()),
+ 'parseExtendsClause_0': new MethodTrampoline(0, (Parser target) => target.parseExtendsClause()),
+ 'parseFormalParameterList_0': new MethodTrampoline(0, (Parser target) => target.parseFormalParameterList()),
+ 'parseFunctionExpression_0': new MethodTrampoline(0, (Parser target) => target.parseFunctionExpression()),
+ 'parseImplementsClause_0': new MethodTrampoline(0, (Parser target) => target.parseImplementsClause()),
+ 'parseLabel_0': new MethodTrampoline(0, (Parser target) => target.parseLabel()),
+ 'parseLibraryIdentifier_0': new MethodTrampoline(0, (Parser target) => target.parseLibraryIdentifier()),
+ 'parseLogicalOrExpression_0': new MethodTrampoline(0, (Parser target) => target.parseLogicalOrExpression()),
+ 'parseMapLiteralEntry_0': new MethodTrampoline(0, (Parser target) => target.parseMapLiteralEntry()),
+ 'parseNormalFormalParameter_0': new MethodTrampoline(0, (Parser target) => target.parseNormalFormalParameter()),
+ 'parsePrefixedIdentifier_0': new MethodTrampoline(0, (Parser target) => target.parsePrefixedIdentifier()),
+ 'parseReturnType_0': new MethodTrampoline(0, (Parser target) => target.parseReturnType()),
+ 'parseSimpleIdentifier_0': new MethodTrampoline(0, (Parser target) => target.parseSimpleIdentifier()),
+ 'parseStatement_0': new MethodTrampoline(0, (Parser target) => target.parseStatement2()),
+ 'parseStringLiteral_0': new MethodTrampoline(0, (Parser target) => target.parseStringLiteral()),
+ 'parseTypeArgumentList_0': new MethodTrampoline(0, (Parser target) => target.parseTypeArgumentList()),
+ 'parseTypeName_0': new MethodTrampoline(0, (Parser target) => target.parseTypeName()),
+ 'parseTypeParameter_0': new MethodTrampoline(0, (Parser target) => target.parseTypeParameter()),
+ 'parseTypeParameterList_0': new MethodTrampoline(0, (Parser target) => target.parseTypeParameterList()),
+ 'parseWithClause_0': new MethodTrampoline(0, (Parser target) => target.parseWithClause()),
+ 'advance_0': new MethodTrampoline(0, (Parser target) => target._advance()),
+ 'appendScalarValue_5': new MethodTrampoline(5, (Parser target, arg0, arg1, arg2, arg3, arg4) => target._appendScalarValue(arg0, arg1, arg2, arg3, arg4)),
+ 'computeStringValue_3': new MethodTrampoline(3, (Parser target, arg0, arg1, arg2) => target._computeStringValue(arg0, arg1, arg2)),
+ 'convertToFunctionDeclaration_1': new MethodTrampoline(1, (Parser target, arg0) => target._convertToFunctionDeclaration(arg0)),
+ 'couldBeStartOfCompilationUnitMember_0': new MethodTrampoline(0, (Parser target) => target._couldBeStartOfCompilationUnitMember()),
+ 'createSyntheticIdentifier_0': new MethodTrampoline(0, (Parser target) => target._createSyntheticIdentifier()),
+ 'createSyntheticKeyword_1': new MethodTrampoline(1, (Parser target, arg0) => target._createSyntheticKeyword(arg0)),
+ 'createSyntheticStringLiteral_0': new MethodTrampoline(0, (Parser target) => target._createSyntheticStringLiteral()),
+ 'createSyntheticToken_1': new MethodTrampoline(1, (Parser target, arg0) => target._createSyntheticToken(arg0)),
+ 'ensureAssignable_1': new MethodTrampoline(1, (Parser target, arg0) => target._ensureAssignable(arg0)),
+ 'expect_1': new MethodTrampoline(1, (Parser target, arg0) => target._expect(arg0)),
+ 'expectGt_0': new MethodTrampoline(0, (Parser target) => target._expectGt()),
+ 'expectKeyword_1': new MethodTrampoline(1, (Parser target, arg0) => target._expectKeyword(arg0)),
+ 'expectSemicolon_0': new MethodTrampoline(0, (Parser target) => target._expectSemicolon()),
+ 'findRange_2': new MethodTrampoline(2, (Parser target, arg0, arg1) => target._findRange(arg0, arg1)),
+ 'getCodeBlockRanges_1': new MethodTrampoline(1, (Parser target, arg0) => target._getCodeBlockRanges(arg0)),
+ 'getEndToken_1': new MethodTrampoline(1, (Parser target, arg0) => target._getEndToken(arg0)),
+ 'injectToken_1': new MethodTrampoline(1, (Parser target, arg0) => target._injectToken(arg0)),
+ 'isFunctionDeclaration_0': new MethodTrampoline(0, (Parser target) => target._isFunctionDeclaration()),
+ 'isFunctionExpression_1': new MethodTrampoline(1, (Parser target, arg0) => target._isFunctionExpression(arg0)),
+ 'isHexDigit_1': new MethodTrampoline(1, (Parser target, arg0) => target._isHexDigit(arg0)),
+ 'isInitializedVariableDeclaration_0': new MethodTrampoline(0, (Parser target) => target._isInitializedVariableDeclaration()),
+ 'isLinkText_2': new MethodTrampoline(2, (Parser target, arg0, arg1) => target._isLinkText(arg0, arg1)),
+ 'isOperator_1': new MethodTrampoline(1, (Parser target, arg0) => target._isOperator(arg0)),
+ 'isSwitchMember_0': new MethodTrampoline(0, (Parser target) => target._isSwitchMember()),
+ 'isTypedIdentifier_1': new MethodTrampoline(1, (Parser target, arg0) => target._isTypedIdentifier(arg0)),
+ 'lexicallyFirst_1': new MethodTrampoline(1, (Parser target, arg0) => target._lexicallyFirst(arg0)),
+ 'lockErrorListener_0': new MethodTrampoline(0, (Parser target) => target._lockErrorListener()),
+ 'matches_1': new MethodTrampoline(1, (Parser target, arg0) => target._matches(arg0)),
+ 'matchesGt_0': new MethodTrampoline(0, (Parser target) => target._matchesGt()),
+ 'matchesIdentifier_0': new MethodTrampoline(0, (Parser target) => target._matchesIdentifier()),
+ 'matchesKeyword_1': new MethodTrampoline(1, (Parser target, arg0) => target._matchesKeyword(arg0)),
+ 'matchesString_1': new MethodTrampoline(1, (Parser target, arg0) => target._matchesString(arg0)),
+ 'optional_1': new MethodTrampoline(1, (Parser target, arg0) => target._optional(arg0)),
+ 'parseAdditiveExpression_0': new MethodTrampoline(0, (Parser target) => target._parseAdditiveExpression()),
+ 'parseArgumentDefinitionTest_0': new MethodTrampoline(0, (Parser target) => target._parseArgumentDefinitionTest()),
+ 'parseAssertStatement_0': new MethodTrampoline(0, (Parser target) => target._parseAssertStatement()),
+ 'parseAssignableExpression_1': new MethodTrampoline(1, (Parser target, arg0) => target._parseAssignableExpression(arg0)),
+ 'parseAssignableSelector_2': new MethodTrampoline(2, (Parser target, arg0, arg1) => target._parseAssignableSelector(arg0, arg1)),
+ 'parseBitwiseAndExpression_0': new MethodTrampoline(0, (Parser target) => target._parseBitwiseAndExpression()),
+ 'parseBitwiseXorExpression_0': new MethodTrampoline(0, (Parser target) => target._parseBitwiseXorExpression()),
+ 'parseBreakStatement_0': new MethodTrampoline(0, (Parser target) => target._parseBreakStatement()),
+ 'parseCascadeSection_0': new MethodTrampoline(0, (Parser target) => target._parseCascadeSection()),
+ 'parseClassDeclaration_2': new MethodTrampoline(2, (Parser target, arg0, arg1) => target._parseClassDeclaration(arg0, arg1)),
+ 'parseClassMembers_2': new MethodTrampoline(2, (Parser target, arg0, arg1) => target._parseClassMembers(arg0, arg1)),
+ 'parseClassTypeAlias_3': new MethodTrampoline(3, (Parser target, arg0, arg1, arg2) => target._parseClassTypeAlias(arg0, arg1, arg2)),
+ 'parseCombinators_0': new MethodTrampoline(0, (Parser target) => target._parseCombinators()),
+ 'parseCommentAndMetadata_0': new MethodTrampoline(0, (Parser target) => target._parseCommentAndMetadata()),
+ 'parseCommentReference_2': new MethodTrampoline(2, (Parser target, arg0, arg1) => target._parseCommentReference(arg0, arg1)),
+ 'parseCommentReferences_1': new MethodTrampoline(1, (Parser target, arg0) => target._parseCommentReferences(arg0)),
+ 'parseCompilationUnitMember_1': new MethodTrampoline(1, (Parser target, arg0) => target._parseCompilationUnitMember(arg0)),
+ 'parseConstExpression_0': new MethodTrampoline(0, (Parser target) => target._parseConstExpression()),
+ 'parseConstructor_8': new MethodTrampoline(8, (Parser target, arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7) => target._parseConstructor(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7)),
+ 'parseConstructorFieldInitializer_0': new MethodTrampoline(0, (Parser target) => target._parseConstructorFieldInitializer()),
+ 'parseContinueStatement_0': new MethodTrampoline(0, (Parser target) => target._parseContinueStatement()),
+ 'parseDirective_1': new MethodTrampoline(1, (Parser target, arg0) => target._parseDirective(arg0)),
+ 'parseDocumentationComment_0': new MethodTrampoline(0, (Parser target) => target._parseDocumentationComment()),
+ 'parseDoStatement_0': new MethodTrampoline(0, (Parser target) => target._parseDoStatement()),
+ 'parseEmptyStatement_0': new MethodTrampoline(0, (Parser target) => target._parseEmptyStatement()),
+ 'parseEqualityExpression_0': new MethodTrampoline(0, (Parser target) => target._parseEqualityExpression()),
+ 'parseExportDirective_1': new MethodTrampoline(1, (Parser target, arg0) => target._parseExportDirective(arg0)),
+ 'parseExpressionList_0': new MethodTrampoline(0, (Parser target) => target._parseExpressionList()),
+ 'parseFinalConstVarOrType_1': new MethodTrampoline(1, (Parser target, arg0) => target._parseFinalConstVarOrType(arg0)),
+ 'parseFormalParameter_1': new MethodTrampoline(1, (Parser target, arg0) => target._parseFormalParameter(arg0)),
+ 'parseForStatement_0': new MethodTrampoline(0, (Parser target) => target._parseForStatement()),
+ 'parseFunctionBody_3': new MethodTrampoline(3, (Parser target, arg0, arg1, arg2) => target._parseFunctionBody(arg0, arg1, arg2)),
+ 'parseFunctionDeclaration_3': new MethodTrampoline(3, (Parser target, arg0, arg1, arg2) => target._parseFunctionDeclaration(arg0, arg1, arg2)),
+ 'parseFunctionDeclarationStatement_0': new MethodTrampoline(0, (Parser target) => target._parseFunctionDeclarationStatement()),
+ 'parseFunctionDeclarationStatementAfterReturnType_2': new MethodTrampoline(2, (Parser target, arg0, arg1) => target._parseFunctionDeclarationStatementAfterReturnType(arg0, arg1)),
+ 'parseFunctionTypeAlias_2': new MethodTrampoline(2, (Parser target, arg0, arg1) => target._parseFunctionTypeAlias(arg0, arg1)),
+ 'parseGetter_4': new MethodTrampoline(4, (Parser target, arg0, arg1, arg2, arg3) => target._parseGetter(arg0, arg1, arg2, arg3)),
+ 'parseIdentifierList_0': new MethodTrampoline(0, (Parser target) => target._parseIdentifierList()),
+ 'parseIfStatement_0': new MethodTrampoline(0, (Parser target) => target._parseIfStatement()),
+ 'parseImportDirective_1': new MethodTrampoline(1, (Parser target, arg0) => target._parseImportDirective(arg0)),
+ 'parseInitializedIdentifierList_4': new MethodTrampoline(4, (Parser target, arg0, arg1, arg2, arg3) => target._parseInitializedIdentifierList(arg0, arg1, arg2, arg3)),
+ 'parseInstanceCreationExpression_1': new MethodTrampoline(1, (Parser target, arg0) => target._parseInstanceCreationExpression(arg0)),
+ 'parseLibraryDirective_1': new MethodTrampoline(1, (Parser target, arg0) => target._parseLibraryDirective(arg0)),
+ 'parseLibraryName_2': new MethodTrampoline(2, (Parser target, arg0, arg1) => target._parseLibraryName(arg0, arg1)),
+ 'parseListLiteral_2': new MethodTrampoline(2, (Parser target, arg0, arg1) => target._parseListLiteral(arg0, arg1)),
+ 'parseListOrMapLiteral_1': new MethodTrampoline(1, (Parser target, arg0) => target._parseListOrMapLiteral(arg0)),
+ 'parseLogicalAndExpression_0': new MethodTrampoline(0, (Parser target) => target._parseLogicalAndExpression()),
+ 'parseMapLiteral_2': new MethodTrampoline(2, (Parser target, arg0, arg1) => target._parseMapLiteral(arg0, arg1)),
+ 'parseMethodDeclarationAfterParameters_6': new MethodTrampoline(6, (Parser target, arg0, arg1, arg2, arg3, arg4, arg5) => target._parseMethodDeclarationAfterParameters(arg0, arg1, arg2, arg3, arg4, arg5)),
+ 'parseMethodDeclarationAfterReturnType_4': new MethodTrampoline(4, (Parser target, arg0, arg1, arg2, arg3) => target._parseMethodDeclarationAfterReturnType(arg0, arg1, arg2, arg3)),
+ 'parseModifiers_0': new MethodTrampoline(0, (Parser target) => target._parseModifiers()),
+ 'parseMultiplicativeExpression_0': new MethodTrampoline(0, (Parser target) => target._parseMultiplicativeExpression()),
+ 'parseNativeClause_0': new MethodTrampoline(0, (Parser target) => target._parseNativeClause()),
+ 'parseNewExpression_0': new MethodTrampoline(0, (Parser target) => target._parseNewExpression()),
+ 'parseNonLabeledStatement_0': new MethodTrampoline(0, (Parser target) => target._parseNonLabeledStatement()),
+ 'parseOperator_3': new MethodTrampoline(3, (Parser target, arg0, arg1, arg2) => target._parseOperator(arg0, arg1, arg2)),
+ 'parseOptionalReturnType_0': new MethodTrampoline(0, (Parser target) => target._parseOptionalReturnType()),
+ 'parsePartDirective_1': new MethodTrampoline(1, (Parser target, arg0) => target._parsePartDirective(arg0)),
+ 'parsePostfixExpression_0': new MethodTrampoline(0, (Parser target) => target._parsePostfixExpression()),
+ 'parsePrimaryExpression_0': new MethodTrampoline(0, (Parser target) => target._parsePrimaryExpression()),
+ 'parseRedirectingConstructorInvocation_0': new MethodTrampoline(0, (Parser target) => target._parseRedirectingConstructorInvocation()),
+ 'parseRelationalExpression_0': new MethodTrampoline(0, (Parser target) => target._parseRelationalExpression()),
+ 'parseRethrowExpression_0': new MethodTrampoline(0, (Parser target) => target._parseRethrowExpression()),
+ 'parseReturnStatement_0': new MethodTrampoline(0, (Parser target) => target._parseReturnStatement()),
+ 'parseSetter_4': new MethodTrampoline(4, (Parser target, arg0, arg1, arg2, arg3) => target._parseSetter(arg0, arg1, arg2, arg3)),
+ 'parseShiftExpression_0': new MethodTrampoline(0, (Parser target) => target._parseShiftExpression()),
+ 'parseStatementList_0': new MethodTrampoline(0, (Parser target) => target._parseStatementList()),
+ 'parseStringInterpolation_1': new MethodTrampoline(1, (Parser target, arg0) => target._parseStringInterpolation(arg0)),
+ 'parseSuperConstructorInvocation_0': new MethodTrampoline(0, (Parser target) => target._parseSuperConstructorInvocation()),
+ 'parseSwitchStatement_0': new MethodTrampoline(0, (Parser target) => target._parseSwitchStatement()),
+ 'parseSymbolLiteral_0': new MethodTrampoline(0, (Parser target) => target._parseSymbolLiteral()),
+ 'parseThrowExpression_0': new MethodTrampoline(0, (Parser target) => target._parseThrowExpression()),
+ 'parseThrowExpressionWithoutCascade_0': new MethodTrampoline(0, (Parser target) => target._parseThrowExpressionWithoutCascade()),
+ 'parseTryStatement_0': new MethodTrampoline(0, (Parser target) => target._parseTryStatement()),
+ 'parseTypeAlias_1': new MethodTrampoline(1, (Parser target, arg0) => target._parseTypeAlias(arg0)),
+ 'parseUnaryExpression_0': new MethodTrampoline(0, (Parser target) => target._parseUnaryExpression()),
+ 'parseVariableDeclaration_0': new MethodTrampoline(0, (Parser target) => target._parseVariableDeclaration()),
+ 'parseVariableDeclarationListAfterMetadata_1': new MethodTrampoline(1, (Parser target, arg0) => target._parseVariableDeclarationListAfterMetadata(arg0)),
+ 'parseVariableDeclarationListAfterType_3': new MethodTrampoline(3, (Parser target, arg0, arg1, arg2) => target._parseVariableDeclarationListAfterType(arg0, arg1, arg2)),
+ 'parseVariableDeclarationStatementAfterMetadata_1': new MethodTrampoline(1, (Parser target, arg0) => target._parseVariableDeclarationStatementAfterMetadata(arg0)),
+ 'parseVariableDeclarationStatementAfterType_3': new MethodTrampoline(3, (Parser target, arg0, arg1, arg2) => target._parseVariableDeclarationStatementAfterType(arg0, arg1, arg2)),
+ 'parseWhileStatement_0': new MethodTrampoline(0, (Parser target) => target._parseWhileStatement()),
+ 'peek_0': new MethodTrampoline(0, (Parser target) => target._peek()),
+ 'peekAt_1': new MethodTrampoline(1, (Parser target, arg0) => target._peekAt(arg0)),
+ 'reportError_1': new MethodTrampoline(1, (Parser target, arg0) => target._reportError(arg0)),
+ 'reportErrorForCurrentToken_2': new MethodTrampoline(2, (Parser target, arg0, arg1) => target._reportErrorForCurrentToken(arg0, arg1)),
+ 'reportErrorForNode_3': new MethodTrampoline(3, (Parser target, arg0, arg1, arg2) => target._reportErrorForNode(arg0, arg1, arg2)),
+ 'reportErrorForToken_3': new MethodTrampoline(3, (Parser target, arg0, arg1, arg2) => target._reportErrorForToken(arg0, arg1, arg2)),
+ 'skipBlock_0': new MethodTrampoline(0, (Parser target) => target._skipBlock()),
+ 'skipFinalConstVarOrType_1': new MethodTrampoline(1, (Parser target, arg0) => target._skipFinalConstVarOrType(arg0)),
+ 'skipFormalParameterList_1': new MethodTrampoline(1, (Parser target, arg0) => target._skipFormalParameterList(arg0)),
+ 'skipPastMatchingToken_1': new MethodTrampoline(1, (Parser target, arg0) => target._skipPastMatchingToken(arg0)),
+ 'skipPrefixedIdentifier_1': new MethodTrampoline(1, (Parser target, arg0) => target._skipPrefixedIdentifier(arg0)),
+ 'skipReturnType_1': new MethodTrampoline(1, (Parser target, arg0) => target._skipReturnType(arg0)),
+ 'skipSimpleIdentifier_1': new MethodTrampoline(1, (Parser target, arg0) => target._skipSimpleIdentifier(arg0)),
+ 'skipStringInterpolation_1': new MethodTrampoline(1, (Parser target, arg0) => target._skipStringInterpolation(arg0)),
+ 'skipStringLiteral_1': new MethodTrampoline(1, (Parser target, arg0) => target._skipStringLiteral(arg0)),
+ 'skipTypeArgumentList_1': new MethodTrampoline(1, (Parser target, arg0) => target._skipTypeArgumentList(arg0)),
+ 'skipTypeName_1': new MethodTrampoline(1, (Parser target, arg0) => target._skipTypeName(arg0)),
+ 'skipTypeParameterList_1': new MethodTrampoline(1, (Parser target, arg0) => target._skipTypeParameterList(arg0)),
+ 'tokenMatches_2': new MethodTrampoline(2, (Parser target, arg0, arg1) => target._tokenMatches(arg0, arg1)),
+ 'tokenMatchesIdentifier_1': new MethodTrampoline(1, (Parser target, arg0) => target._tokenMatchesIdentifier(arg0)),
+ 'tokenMatchesKeyword_2': new MethodTrampoline(2, (Parser target, arg0, arg1) => target._tokenMatchesKeyword(arg0, arg1)),
+ 'translateCharacter_3': new MethodTrampoline(3, (Parser target, arg0, arg1, arg2) => target._translateCharacter(arg0, arg1, arg2)),
+ 'unlockErrorListener_0': new MethodTrampoline(0, (Parser target) => target._unlockErrorListener()),
+ 'validateFormalParameterList_1': new MethodTrampoline(1, (Parser target, arg0) => target._validateFormalParameterList(arg0)),
+ 'validateModifiersForClass_1': new MethodTrampoline(1, (Parser target, arg0) => target._validateModifiersForClass(arg0)),
+ 'validateModifiersForConstructor_1': new MethodTrampoline(1, (Parser target, arg0) => target._validateModifiersForConstructor(arg0)),
+ 'validateModifiersForField_1': new MethodTrampoline(1, (Parser target, arg0) => target._validateModifiersForField(arg0)),
+ 'validateModifiersForFunctionDeclarationStatement_1': new MethodTrampoline(1, (Parser target, arg0) => target._validateModifiersForFunctionDeclarationStatement(arg0)),
+ 'validateModifiersForGetterOrSetterOrMethod_1': new MethodTrampoline(1, (Parser target, arg0) => target._validateModifiersForGetterOrSetterOrMethod(arg0)),
+ 'validateModifiersForOperator_1': new MethodTrampoline(1, (Parser target, arg0) => target._validateModifiersForOperator(arg0)),
+ 'validateModifiersForTopLevelDeclaration_1': new MethodTrampoline(1, (Parser target, arg0) => target._validateModifiersForTopLevelDeclaration(arg0)),
+ 'validateModifiersForTopLevelFunction_1': new MethodTrampoline(1, (Parser target, arg0) => target._validateModifiersForTopLevelFunction(arg0)),
+ 'validateModifiersForTopLevelVariable_1': new MethodTrampoline(1, (Parser target, arg0) => target._validateModifiersForTopLevelVariable(arg0)),
+ 'validateModifiersForTypedef_1': new MethodTrampoline(1, (Parser target, arg0) => target._validateModifiersForTypedef(arg0)),};
+
+
+Object invokeParserMethodImpl(Parser parser, String methodName, List<Object> objects, Token tokenStream) {
+ parser.currentToken = tokenStream;
+ MethodTrampoline method = methodTable_Parser['${methodName}_${objects.length}'];
+ return method.invoke(parser, objects);
+}
+
/**
- * Instances of the class {link ToFormattedSourceVisitor} write a source representation of a visited
- * AST node (and all of it's children) to a writer.
+ * Wrapper around [Function] which should be called with "target" and "arguments".
*/
-class ToFormattedSourceVisitor implements AstVisitor<Object> {
- static String COMMENTS_KEY = "List of comments before statement";
-
- /**
- * The writer to which the source is to be written.
- */
- PrintWriter _writer;
-
- int _indentLevel = 0;
-
- String _indentString = "";
-
- /**
- * Initialize a newly created visitor to write source code representing the visited nodes to the
- * given writer.
- *
- * @param writer the writer to which the source is to be written
- */
- ToFormattedSourceVisitor(PrintWriter writer) {
- this._writer = writer;
- }
-
- Object visitAdjacentStrings(AdjacentStrings node) {
- visitNodeListWithSeparator(node.strings, " ");
- return null;
- }
-
- Object visitAnnotation(Annotation node) {
- _writer.print('@');
- visitNode(node.name);
- visitNodeWithPrefix(".", node.constructorName);
- visitNode(node.arguments);
- return null;
- }
-
- Object visitArgumentDefinitionTest(ArgumentDefinitionTest node) {
- _writer.print('?');
- visitNode(node.identifier);
- return null;
- }
-
- Object visitArgumentList(ArgumentList node) {
- _writer.print('(');
- visitNodeListWithSeparator(node.arguments, ", ");
- _writer.print(')');
- return null;
- }
-
- Object visitAsExpression(AsExpression node) {
- visitNode(node.expression);
- _writer.print(" as ");
- visitNode(node.type);
- return null;
- }
-
- Object visitAssertStatement(AssertStatement node) {
- _writer.print("assert(");
- visitNode(node.condition);
- _writer.print(");");
- return null;
- }
-
- Object visitAssignmentExpression(AssignmentExpression node) {
- visitNode(node.leftHandSide);
- _writer.print(' ');
- _writer.print(node.operator.lexeme);
- _writer.print(' ');
- visitNode(node.rightHandSide);
- return null;
- }
-
- Object visitBinaryExpression(BinaryExpression node) {
- visitNode(node.leftOperand);
- _writer.print(' ');
- _writer.print(node.operator.lexeme);
- _writer.print(' ');
- visitNode(node.rightOperand);
- return null;
- }
-
- Object visitBlock(Block node) {
- _writer.print('{');
- {
- indentInc();
- visitNodeListWithSeparatorAndPrefix("\n", node.statements, "\n");
- indentDec();
+class MethodTrampoline {
+ int parameterCount;
+ Function trampoline;
+ MethodTrampoline(this.parameterCount, this.trampoline);
+ Object invoke(target, List arguments) {
+ if (arguments.length != parameterCount) {
+ throw new IllegalArgumentException("${arguments.length} != $parameterCount");
}
- nl2();
- _writer.print('}');
- return null;
- }
-
- Object visitBlockFunctionBody(BlockFunctionBody node) {
- visitNode(node.block);
- return null;
- }
-
- Object visitBooleanLiteral(BooleanLiteral node) {
- _writer.print(node.literal.lexeme);
- return null;
- }
-
- Object visitBreakStatement(BreakStatement node) {
- _writer.print("break");
- visitNodeWithPrefix(" ", node.label);
- _writer.print(";");
- return null;
- }
-
- Object visitCascadeExpression(CascadeExpression node) {
- visitNode(node.target);
- visitNodeList(node.cascadeSections);
- return null;
- }
-
- Object visitCatchClause(CatchClause node) {
- visitNodeWithPrefix("on ", node.exceptionType);
- if (node.catchKeyword != null) {
- if (node.exceptionType != null) {
- _writer.print(' ');
- }
- _writer.print("catch (");
- visitNode(node.exceptionParameter);
- visitNodeWithPrefix(", ", node.stackTraceParameter);
- _writer.print(") ");
- } else {
- _writer.print(" ");
- }
- visitNode(node.body);
- return null;
- }
-
- Object visitClassDeclaration(ClassDeclaration node) {
- visitNode(node.documentationComment);
- visitTokenWithSuffix(node.abstractKeyword, " ");
- _writer.print("class ");
- visitNode(node.name);
- visitNode(node.typeParameters);
- visitNodeWithPrefix(" ", node.extendsClause);
- visitNodeWithPrefix(" ", node.withClause);
- visitNodeWithPrefix(" ", node.implementsClause);
- _writer.print(" {");
- {
- indentInc();
- visitNodeListWithSeparatorAndPrefix("\n", node.members, "\n\n");
- indentDec();
- }
- nl2();
- _writer.print("}");
- return null;
- }
-
- Object visitClassTypeAlias(ClassTypeAlias node) {
- _writer.print("typedef ");
- visitNode(node.name);
- visitNode(node.typeParameters);
- _writer.print(" = ");
- if (node.abstractKeyword != null) {
- _writer.print("abstract ");
- }
- visitNode(node.superclass);
- visitNodeWithPrefix(" ", node.withClause);
- visitNodeWithPrefix(" ", node.implementsClause);
- _writer.print(";");
- return null;
- }
-
- Object visitComment(Comment node) {
- Token token = node.beginToken;
- while (token != null) {
- bool firstLine = true;
- for (String line in StringUtils.split(token.lexeme, "\n")) {
- if (firstLine) {
- firstLine = false;
- } else {
- line = " ${line.trim()}";
- line = StringUtils.replace(line, "/*", "/ *");
- }
- _writer.print(line);
- nl2();
- }
- if (identical(token, node.endToken)) {
- break;
- }
- }
- return null;
- }
-
- Object visitCommentReference(CommentReference node) => null;
-
- Object visitCompilationUnit(CompilationUnit node) {
- ScriptTag scriptTag = node.scriptTag;
- NodeList<Directive> directives = node.directives;
- visitNode(scriptTag);
- // directives
- String prefix = scriptTag == null ? "" : " ";
- visitNodeListWithSeparatorAndPrefix(prefix, directives, "\n");
- nl();
- // declarations
- prefix = scriptTag == null && directives.isEmpty ? "" : "\n";
- visitNodeListWithSeparatorAndPrefix(prefix, node.declarations, "\n\n");
- return null;
- }
-
- Object visitConditionalExpression(ConditionalExpression node) {
- visitNode(node.condition);
- _writer.print(" ? ");
- visitNode(node.thenExpression);
- _writer.print(" : ");
- visitNode(node.elseExpression);
- return null;
- }
-
- Object visitConstructorDeclaration(ConstructorDeclaration node) {
- visitNode(node.documentationComment);
- visitTokenWithSuffix(node.externalKeyword, " ");
- visitTokenWithSuffix(node.constKeyword, " ");
- visitTokenWithSuffix(node.factoryKeyword, " ");
- visitNode(node.returnType);
- visitNodeWithPrefix(".", node.name);
- visitNode(node.parameters);
- visitNodeListWithSeparatorAndPrefix(" : ", node.initializers, ", ");
- visitNodeWithPrefix(" = ", node.redirectedConstructor);
- if (node.body is! EmptyFunctionBody) {
- _writer.print(' ');
- }
- visitNode(node.body);
- return null;
- }
-
- Object visitConstructorFieldInitializer(ConstructorFieldInitializer node) {
- visitTokenWithSuffix(node.keyword, ".");
- visitNode(node.fieldName);
- _writer.print(" = ");
- visitNode(node.expression);
- return null;
- }
-
- Object visitConstructorName(ConstructorName node) {
- visitNode(node.type);
- visitNodeWithPrefix(".", node.name);
- return null;
- }
-
- Object visitContinueStatement(ContinueStatement node) {
- _writer.print("continue");
- visitNodeWithPrefix(" ", node.label);
- _writer.print(";");
- return null;
- }
-
- Object visitDeclaredIdentifier(DeclaredIdentifier node) {
- visitTokenWithSuffix(node.keyword, " ");
- visitNodeWithSuffix(node.type, " ");
- visitNode(node.identifier);
- return null;
- }
-
- Object visitDefaultFormalParameter(DefaultFormalParameter node) {
- visitNode(node.parameter);
- if (node.separator != null) {
- _writer.print(" ");
- _writer.print(node.separator.lexeme);
- visitNodeWithPrefix(" ", node.defaultValue);
- }
- return null;
- }
-
- Object visitDoStatement(DoStatement node) {
- _writer.print("do ");
- visitNode(node.body);
- _writer.print(" while (");
- visitNode(node.condition);
- _writer.print(");");
- return null;
- }
-
- Object visitDoubleLiteral(DoubleLiteral node) {
- _writer.print(node.literal.lexeme);
- return null;
- }
-
- Object visitEmptyFunctionBody(EmptyFunctionBody node) {
- _writer.print(';');
- return null;
- }
-
- Object visitEmptyStatement(EmptyStatement node) {
- _writer.print(';');
- return null;
- }
-
- Object visitExportDirective(ExportDirective node) {
- _writer.print("export ");
- visitNode(node.uri);
- visitNodeListWithSeparatorAndPrefix(" ", node.combinators, " ");
- _writer.print(';');
- return null;
- }
-
- Object visitExpressionFunctionBody(ExpressionFunctionBody node) {
- _writer.print("=> ");
- visitNode(node.expression);
- if (node.semicolon != null) {
- _writer.print(';');
- }
- return null;
- }
-
- Object visitExpressionStatement(ExpressionStatement node) {
- visitNode(node.expression);
- _writer.print(';');
- return null;
- }
-
- Object visitExtendsClause(ExtendsClause node) {
- _writer.print("extends ");
- visitNode(node.superclass);
- return null;
- }
-
- Object visitFieldDeclaration(FieldDeclaration node) {
- visitNode(node.documentationComment);
- visitTokenWithSuffix(node.staticKeyword, " ");
- visitNode(node.fields);
- _writer.print(";");
- return null;
- }
-
- Object visitFieldFormalParameter(FieldFormalParameter node) {
- visitTokenWithSuffix(node.keyword, " ");
- visitNodeWithSuffix(node.type, " ");
- _writer.print("this.");
- visitNode(node.identifier);
- visitNode(node.parameters);
- return null;
- }
-
- Object visitForEachStatement(ForEachStatement node) {
- DeclaredIdentifier loopVariable = node.loopVariable;
- _writer.print("for (");
- if (loopVariable == null) {
- visitNode(node.identifier);
- } else {
- visitNode(loopVariable);
- }
- _writer.print(" in ");
- visitNode(node.iterator);
- _writer.print(") ");
- visitNode(node.body);
- return null;
- }
-
- Object visitFormalParameterList(FormalParameterList node) {
- String groupEnd = null;
- _writer.print('(');
- NodeList<FormalParameter> parameters = node.parameters;
- int size = parameters.length;
- for (int i = 0; i < size; i++) {
- FormalParameter parameter = parameters[i];
- if (i > 0) {
- _writer.print(", ");
- }
- if (groupEnd == null && parameter is DefaultFormalParameter) {
- if (identical(parameter.kind, ParameterKind.NAMED)) {
- groupEnd = "}";
- _writer.print('{');
- } else {
- groupEnd = "]";
- _writer.print('[');
- }
- }
- parameter.accept(this);
- }
- if (groupEnd != null) {
- _writer.print(groupEnd);
- }
- _writer.print(')');
- return null;
- }
-
- Object visitForStatement(ForStatement node) {
- Expression initialization = node.initialization;
- _writer.print("for (");
- if (initialization != null) {
- visitNode(initialization);
- } else {
- visitNode(node.variables);
- }
- _writer.print(";");
- visitNodeWithPrefix(" ", node.condition);
- _writer.print(";");
- visitNodeListWithSeparatorAndPrefix(" ", node.updaters, ", ");
- _writer.print(") ");
- visitNode(node.body);
- return null;
- }
-
- Object visitFunctionDeclaration(FunctionDeclaration node) {
- visitNodeWithSuffix(node.returnType, " ");
- visitTokenWithSuffix(node.propertyKeyword, " ");
- visitNode(node.name);
- visitNode(node.functionExpression);
- return null;
- }
-
- Object visitFunctionDeclarationStatement(FunctionDeclarationStatement node) {
- visitNode(node.functionDeclaration);
- _writer.print(';');
- return null;
- }
-
- Object visitFunctionExpression(FunctionExpression node) {
- visitNode(node.parameters);
- _writer.print(' ');
- visitNode(node.body);
- return null;
- }
-
- Object visitFunctionExpressionInvocation(FunctionExpressionInvocation node) {
- visitNode(node.function);
- visitNode(node.argumentList);
- return null;
- }
-
- Object visitFunctionTypeAlias(FunctionTypeAlias node) {
- _writer.print("typedef ");
- visitNodeWithSuffix(node.returnType, " ");
- visitNode(node.name);
- visitNode(node.typeParameters);
- visitNode(node.parameters);
- _writer.print(";");
- return null;
- }
-
- Object visitFunctionTypedFormalParameter(FunctionTypedFormalParameter node) {
- visitNodeWithSuffix(node.returnType, " ");
- visitNode(node.identifier);
- visitNode(node.parameters);
- return null;
- }
-
- Object visitHideCombinator(HideCombinator node) {
- _writer.print("hide ");
- visitNodeListWithSeparator(node.hiddenNames, ", ");
- return null;
- }
-
- Object visitIfStatement(IfStatement node) {
- _writer.print("if (");
- visitNode(node.condition);
- _writer.print(") ");
- visitNode(node.thenStatement);
- visitNodeWithPrefix(" else ", node.elseStatement);
- return null;
- }
-
- Object visitImplementsClause(ImplementsClause node) {
- _writer.print("implements ");
- visitNodeListWithSeparator(node.interfaces, ", ");
- return null;
- }
-
- Object visitImportDirective(ImportDirective node) {
- _writer.print("import ");
- visitNode(node.uri);
- visitNodeWithPrefix(" as ", node.prefix);
- visitNodeListWithSeparatorAndPrefix(" ", node.combinators, " ");
- _writer.print(';');
- return null;
- }
-
- Object visitIndexExpression(IndexExpression node) {
- if (node.isCascaded) {
- _writer.print("..");
- } else {
- visitNode(node.target);
- }
- _writer.print('[');
- visitNode(node.index);
- _writer.print(']');
- return null;
- }
-
- Object visitInstanceCreationExpression(InstanceCreationExpression node) {
- visitTokenWithSuffix(node.keyword, " ");
- visitNode(node.constructorName);
- visitNode(node.argumentList);
- return null;
- }
-
- Object visitIntegerLiteral(IntegerLiteral node) {
- _writer.print(node.literal.lexeme);
- return null;
- }
-
- Object visitInterpolationExpression(InterpolationExpression node) {
- if (node.rightBracket != null) {
- _writer.print("\${");
- visitNode(node.expression);
- _writer.print("}");
- } else {
- _writer.print("\$");
- visitNode(node.expression);
- }
- return null;
- }
-
- Object visitInterpolationString(InterpolationString node) {
- _writer.print(node.contents.lexeme);
- return null;
- }
-
- Object visitIsExpression(IsExpression node) {
- visitNode(node.expression);
- if (node.notOperator == null) {
- _writer.print(" is ");
- } else {
- _writer.print(" is! ");
- }
- visitNode(node.type);
- return null;
- }
-
- Object visitLabel(Label node) {
- visitNode(node.label);
- _writer.print(":");
- return null;
- }
-
- Object visitLabeledStatement(LabeledStatement node) {
- visitNodeListWithSeparatorAndSuffix(node.labels, " ", " ");
- visitNode(node.statement);
- return null;
- }
-
- Object visitLibraryDirective(LibraryDirective node) {
- _writer.print("library ");
- visitNode(node.name);
- _writer.print(';');
- nl();
- return null;
- }
-
- Object visitLibraryIdentifier(LibraryIdentifier node) {
- _writer.print(node.name);
- return null;
- }
-
- Object visitListLiteral(ListLiteral node) {
- if (node.constKeyword != null) {
- _writer.print(node.constKeyword.lexeme);
- _writer.print(' ');
- }
- visitNodeWithSuffix(node.typeArguments, " ");
- _writer.print("[");
- {
- NodeList<Expression> elements = node.elements;
- if (elements.length < 2 || elements.toString().length < 60) {
- visitNodeListWithSeparator(elements, ", ");
- } else {
- String elementIndent = "${_indentString} ";
- _writer.print("\n");
- _writer.print(elementIndent);
- visitNodeListWithSeparator(elements, ",\n${elementIndent}");
- }
- }
- _writer.print("]");
- return null;
- }
-
- Object visitMapLiteral(MapLiteral node) {
- if (node.constKeyword != null) {
- _writer.print(node.constKeyword.lexeme);
- _writer.print(' ');
- }
- visitNodeWithSuffix(node.typeArguments, " ");
- _writer.print("{");
- visitNodeListWithSeparator(node.entries, ", ");
- _writer.print("}");
- return null;
- }
-
- Object visitMapLiteralEntry(MapLiteralEntry node) {
- visitNode(node.key);
- _writer.print(" : ");
- visitNode(node.value);
- return null;
- }
-
- Object visitMethodDeclaration(MethodDeclaration node) {
- visitNode(node.documentationComment);
- visitTokenWithSuffix(node.externalKeyword, " ");
- visitTokenWithSuffix(node.modifierKeyword, " ");
- visitNodeWithSuffix(node.returnType, " ");
- visitTokenWithSuffix(node.propertyKeyword, " ");
- visitTokenWithSuffix(node.operatorKeyword, " ");
- visitNode(node.name);
- if (!node.isGetter) {
- visitNode(node.parameters);
- }
- if (node.body is! EmptyFunctionBody) {
- _writer.print(' ');
- }
- visitNode(node.body);
- return null;
- }
-
- Object visitMethodInvocation(MethodInvocation node) {
- if (node.isCascaded) {
- _writer.print("..");
- } else {
- visitNodeWithSuffix(node.target, ".");
- }
- visitNode(node.methodName);
- visitNode(node.argumentList);
- return null;
- }
-
- Object visitNamedExpression(NamedExpression node) {
- visitNode(node.name);
- visitNodeWithPrefix(" ", node.expression);
- return null;
- }
-
- Object visitNativeClause(NativeClause node) {
- _writer.print("native ");
- visitNode(node.name);
- return null;
- }
-
- Object visitNativeFunctionBody(NativeFunctionBody node) {
- _writer.print("native ");
- visitNode(node.stringLiteral);
- _writer.print(';');
- return null;
- }
-
- Object visitNullLiteral(NullLiteral node) {
- _writer.print("null");
- return null;
- }
-
- Object visitParenthesizedExpression(ParenthesizedExpression node) {
- _writer.print('(');
- visitNode(node.expression);
- _writer.print(')');
- return null;
- }
-
- Object visitPartDirective(PartDirective node) {
- _writer.print("part ");
- visitNode(node.uri);
- _writer.print(';');
- return null;
- }
-
- Object visitPartOfDirective(PartOfDirective node) {
- _writer.print("part of ");
- visitNode(node.libraryName);
- _writer.print(';');
- return null;
- }
-
- Object visitPostfixExpression(PostfixExpression node) {
- visitNode(node.operand);
- _writer.print(node.operator.lexeme);
- return null;
- }
-
- Object visitPrefixedIdentifier(PrefixedIdentifier node) {
- visitNode(node.prefix);
- _writer.print('.');
- visitNode(node.identifier);
- return null;
- }
-
- Object visitPrefixExpression(PrefixExpression node) {
- _writer.print(node.operator.lexeme);
- visitNode(node.operand);
- return null;
- }
-
- Object visitPropertyAccess(PropertyAccess node) {
- if (node.isCascaded) {
- _writer.print("..");
- } else {
- visitNodeWithSuffix(node.target, ".");
- }
- visitNode(node.propertyName);
- return null;
- }
-
- Object visitRedirectingConstructorInvocation(RedirectingConstructorInvocation node) {
- _writer.print("this");
- visitNodeWithPrefix(".", node.constructorName);
- visitNode(node.argumentList);
- return null;
- }
-
- Object visitRethrowExpression(RethrowExpression node) {
- _writer.print("rethrow");
- return null;
- }
-
- Object visitReturnStatement(ReturnStatement node) {
- Expression expression = node.expression;
- if (expression == null) {
- _writer.print("return;");
- } else {
- _writer.print("return ");
- expression.accept(this);
- _writer.print(";");
- }
- return null;
- }
-
- Object visitScriptTag(ScriptTag node) {
- _writer.print(node.scriptTag.lexeme);
- return null;
- }
-
- Object visitShowCombinator(ShowCombinator node) {
- _writer.print("show ");
- visitNodeListWithSeparator(node.shownNames, ", ");
- return null;
- }
-
- Object visitSimpleFormalParameter(SimpleFormalParameter node) {
- visitTokenWithSuffix(node.keyword, " ");
- visitNodeWithSuffix(node.type, " ");
- visitNode(node.identifier);
- return null;
- }
-
- Object visitSimpleIdentifier(SimpleIdentifier node) {
- _writer.print(node.token.lexeme);
- return null;
- }
-
- Object visitSimpleStringLiteral(SimpleStringLiteral node) {
- _writer.print(node.literal.lexeme);
- return null;
- }
-
- Object visitStringInterpolation(StringInterpolation node) {
- visitNodeList(node.elements);
- return null;
- }
-
- Object visitSuperConstructorInvocation(SuperConstructorInvocation node) {
- _writer.print("super");
- visitNodeWithPrefix(".", node.constructorName);
- visitNode(node.argumentList);
- return null;
- }
-
- Object visitSuperExpression(SuperExpression node) {
- _writer.print("super");
- return null;
- }
-
- Object visitSwitchCase(SwitchCase node) {
- visitNodeListWithSeparatorAndSuffix(node.labels, " ", " ");
- _writer.print("case ");
- visitNode(node.expression);
- _writer.print(": ");
- {
- indentInc();
- visitNodeListWithSeparator(node.statements, "\n");
- indentDec();
- }
- return null;
- }
-
- Object visitSwitchDefault(SwitchDefault node) {
- visitNodeListWithSeparatorAndSuffix(node.labels, " ", " ");
- _writer.print("default: ");
- {
- indentInc();
- visitNodeListWithSeparator(node.statements, "\n");
- indentDec();
- }
- return null;
- }
-
- Object visitSwitchStatement(SwitchStatement node) {
- _writer.print("switch (");
- visitNode(node.expression);
- _writer.print(") {");
- {
- indentInc();
- visitNodeListWithSeparator(node.members, "\n");
- indentDec();
- }
- nl2();
- _writer.print('}');
- return null;
- }
-
- Object visitSymbolLiteral(SymbolLiteral node) {
- _writer.print("#");
- visitTokenListWithSeparator(node.components, ".");
- return null;
- }
-
- Object visitThisExpression(ThisExpression node) {
- _writer.print("this");
- return null;
- }
-
- Object visitThrowExpression(ThrowExpression node) {
- _writer.print("throw ");
- visitNode(node.expression);
- return null;
- }
-
- Object visitTopLevelVariableDeclaration(TopLevelVariableDeclaration node) {
- visitNodeWithSuffix(node.variables, ";");
- return null;
- }
-
- Object visitTryStatement(TryStatement node) {
- _writer.print("try ");
- visitNode(node.body);
- visitNodeListWithSeparatorAndPrefix(" ", node.catchClauses, " ");
- visitNodeWithPrefix(" finally ", node.finallyBlock);
- return null;
- }
-
- Object visitTypeArgumentList(TypeArgumentList node) {
- _writer.print('<');
- visitNodeListWithSeparator(node.arguments, ", ");
- _writer.print('>');
- return null;
- }
-
- Object visitTypeName(TypeName node) {
- visitNode(node.name);
- visitNode(node.typeArguments);
- return null;
- }
-
- Object visitTypeParameter(TypeParameter node) {
- visitNode(node.name);
- visitNodeWithPrefix(" extends ", node.bound);
- return null;
- }
-
- Object visitTypeParameterList(TypeParameterList node) {
- _writer.print('<');
- visitNodeListWithSeparator(node.typeParameters, ", ");
- _writer.print('>');
- return null;
- }
-
- Object visitVariableDeclaration(VariableDeclaration node) {
- visitNode(node.name);
- visitNodeWithPrefix(" = ", node.initializer);
- return null;
- }
-
- Object visitVariableDeclarationList(VariableDeclarationList node) {
- visitTokenWithSuffix(node.keyword, " ");
- visitNodeWithSuffix(node.type, " ");
- visitNodeListWithSeparator(node.variables, ", ");
- return null;
- }
-
- Object visitVariableDeclarationStatement(VariableDeclarationStatement node) {
- visitNode(node.variables);
- _writer.print(";");
- return null;
- }
-
- Object visitWhileStatement(WhileStatement node) {
- _writer.print("while (");
- visitNode(node.condition);
- _writer.print(") ");
- visitNode(node.body);
- return null;
- }
-
- Object visitWithClause(WithClause node) {
- _writer.print("with ");
- visitNodeListWithSeparator(node.mixinTypes, ", ");
- return null;
- }
-
- void indent() {
- _writer.print(_indentString);
- }
-
- void indentDec() {
- _indentLevel -= 2;
- _indentString = StringUtils.repeat(" ", _indentLevel);
- }
-
- void indentInc() {
- _indentLevel += 2;
- _indentString = StringUtils.repeat(" ", _indentLevel);
- }
-
- void nl() {
- _writer.print("\n");
- }
-
- void nl2() {
- nl();
- indent();
- }
-
- void printLeadingComments(Statement statement) {
- List<String> comments = statement.getProperty(COMMENTS_KEY) as List<String>;
- if (comments == null) {
- return;
- }
- for (String comment in comments) {
- _writer.print(comment);
- _writer.print("\n");
- indent();
+ switch (parameterCount) {
+ case 0:
+ return trampoline(target);
+ case 1:
+ return trampoline(target, arguments[0]);
+ case 2:
+ return trampoline(target, arguments[0], arguments[1]);
+ case 3:
+ return trampoline(target, arguments[0], arguments[1], arguments[2]);
+ case 4:
+ return trampoline(target, arguments[0], arguments[1], arguments[2], arguments[3]);
+ default:
+ throw new IllegalArgumentException("Not implemented for > 4 arguments");
}
}
-
- /**
- * Safely visit the given node.
- *
- * @param node the node to be visited
- */
- void visitNode(AstNode node) {
- if (node != null) {
- node.accept(this);
- }
- }
-
- /**
- * Print a list of nodes without any separation.
- *
- * @param nodes the nodes to be printed
- * @param separator the separator to be printed between adjacent nodes
- */
- void visitNodeList(NodeList<AstNode> nodes) {
- visitNodeListWithSeparator(nodes, "");
- }
-
- /**
- * Print a list of nodes, separated by the given separator.
- *
- * @param nodes the nodes to be printed
- * @param separator the separator to be printed between adjacent nodes
- */
- void visitNodeListWithSeparator(NodeList<AstNode> nodes, String separator) {
- visitNodeListWithSeparatorPrefixAndSuffix("", nodes, separator, "");
- }
-
- /**
- * Print a list of nodes, separated by the given separator.
- *
- * @param prefix the prefix to be printed if the list is not empty
- * @param nodes the nodes to be printed
- * @param separator the separator to be printed between adjacent nodes
- */
- void visitNodeListWithSeparatorAndPrefix(String prefix, NodeList<AstNode> nodes, String separator) {
- visitNodeListWithSeparatorPrefixAndSuffix(prefix, nodes, separator, "");
- }
-
- /**
- * Print a list of nodes, separated by the given separator.
- *
- * @param nodes the nodes to be printed
- * @param separator the separator to be printed between adjacent nodes
- * @param suffix the suffix to be printed if the list is not empty
- */
- void visitNodeListWithSeparatorAndSuffix(NodeList<AstNode> nodes, String separator, String suffix) {
- visitNodeListWithSeparatorPrefixAndSuffix("", nodes, separator, suffix);
- }
-
- /**
- * Print a list of nodes, separated by the given separator.
- *
- * @param prefix the prefix to be printed if the list is not empty
- * @param nodes the nodes to be printed
- * @param separator the separator to be printed between adjacent nodes
- * @param suffix the suffix to be printed if the list is not empty
- */
- void visitNodeListWithSeparatorPrefixAndSuffix(String prefix, NodeList<AstNode> nodes, String separator, String suffix) {
- if (nodes != null) {
- int size = nodes.length;
- if (size != 0) {
- // prefix
- _writer.print(prefix);
- if (prefix.endsWith("\n")) {
- indent();
- }
- // nodes
- bool newLineSeparator = separator.endsWith("\n");
- for (int i = 0; i < size; i++) {
- if (i > 0) {
- _writer.print(separator);
- if (newLineSeparator) {
- indent();
- }
- }
- AstNode node = nodes[i];
- if (node is Statement) {
- printLeadingComments(node);
- }
- node.accept(this);
- }
- // suffix
- _writer.print(suffix);
- }
- }
- }
-
- /**
- * Safely visit the given node, printing the prefix before the node if it is non-<code>null</code>
- * .
- *
- * @param prefix the prefix to be printed if there is a node to visit
- * @param node the node to be visited
- */
- void visitNodeWithPrefix(String prefix, AstNode node) {
- if (node != null) {
- _writer.print(prefix);
- node.accept(this);
- }
- }
-
- /**
- * Safely visit the given node, printing the suffix after the node if it is non-<code>null</code>.
- *
- * @param suffix the suffix to be printed if there is a node to visit
- * @param node the node to be visited
- */
- void visitNodeWithSuffix(AstNode node, String suffix) {
- if (node != null) {
- node.accept(this);
- _writer.print(suffix);
- }
- }
-
- /**
- * Print a list of tokens, separated by the given separator.
- *
- * @param tokens the tokens to be printed
- * @param separator the separator to be printed between adjacent tokens
- */
- void visitTokenListWithSeparator(List<Token> tokens, String separator) {
- int size = tokens.length;
- for (int i = 0; i < size; i++) {
- if ("\n" == separator) {
- _writer.print("\n");
- indent();
- } else if (i > 0) {
- _writer.print(separator);
- }
- _writer.print(tokens[i].lexeme);
- }
- }
-
- /**
- * Safely visit the given node, printing the suffix after the node if it is non-<code>null</code>.
- *
- * @param suffix the suffix to be printed if there is a node to visit
- * @param node the node to be visited
- */
- void visitTokenWithSuffix(Token token, String suffix) {
- if (token != null) {
- _writer.print(token.lexeme);
- _writer.print(suffix);
- }
- }
-}
\ No newline at end of file
+}
diff --git a/pkg/analyzer/lib/src/generated/resolver.dart b/pkg/analyzer/lib/src/generated/resolver.dart
index 4d27e6b..6137bf0 100644
--- a/pkg/analyzer/lib/src/generated/resolver.dart
+++ b/pkg/analyzer/lib/src/generated/resolver.dart
@@ -85,7 +85,7 @@
List<AngularPropertyElement> properties = AngularPropertyElement.EMPTY_ARRAY;
// maybe name
if (toolkitObject is AngularElement) {
- if (isNameCoveredByLiteral(toolkitObject, node)) {
+ if (_isNameCoveredByLiteral(toolkitObject, node)) {
return toolkitObject;
}
}
@@ -93,7 +93,7 @@
if (toolkitObject is AngularHasSelectorElement) {
AngularHasSelectorElement hasSelector = toolkitObject;
AngularSelectorElement selector = hasSelector.selector;
- if (isNameCoveredByLiteral(selector, node)) {
+ if (_isNameCoveredByLiteral(selector, node)) {
return selector;
}
}
@@ -110,7 +110,7 @@
// check properties
for (AngularPropertyElement property in properties) {
// property name (use complete node range)
- if (isNameCoveredByLiteral(property, node)) {
+ if (_isNameCoveredByLiteral(property, node)) {
return property;
}
// field name (use complete node range, including @, => and <=>)
@@ -167,7 +167,7 @@
/**
* Returns the [FieldElement] of the first field in the given [FieldDeclaration].
*/
- static FieldElement getOnlyFieldElement(FieldDeclaration fieldDeclaration) {
+ static FieldElement _getOnlyFieldElement(FieldDeclaration fieldDeclaration) {
NodeList<VariableDeclaration> fields = fieldDeclaration.fields.variables;
return fields[0].element as FieldElement;
}
@@ -176,7 +176,7 @@
* If given [Annotation] has one argument and it is [SimpleStringLiteral], returns it,
* otherwise returns `null`.
*/
- static SimpleStringLiteral getOnlySimpleStringLiteralArgument(Annotation annotation) {
+ static SimpleStringLiteral _getOnlySimpleStringLiteralArgument(Annotation annotation) {
SimpleStringLiteral nameLiteral = null;
ArgumentList argsNode = annotation.arguments;
if (argsNode != null) {
@@ -195,7 +195,7 @@
* Checks if the name range of the given [Element] is completely covered by the given
* [SimpleStringLiteral].
*/
- static bool isNameCoveredByLiteral(Element element, AstNode node) {
+ static bool _isNameCoveredByLiteral(Element element, AstNode node) {
if (element != null) {
String name = element.name;
if (name != null) {
@@ -210,7 +210,7 @@
/**
* Parses given [SimpleStringLiteral] using [parseSelector].
*/
- static AngularSelectorElement parseSelectorFromString(SimpleStringLiteral literal) {
+ static AngularSelectorElement _parseSelectorFromString(SimpleStringLiteral literal) {
int offset = literal.valueOffset;
String text = literal.stringValue;
return parseSelector(offset, text);
@@ -268,7 +268,7 @@
* Builds Angular specific element models and adds them to the existing Dart elements.
*/
void build() {
- parseViews();
+ _parseViews();
// process classes
for (CompilationUnitMember unitMember in _unit.declarations) {
if (unitMember is ClassDeclaration) {
@@ -284,23 +284,23 @@
}
this._annotation = annotation;
// @NgFilter
- if (isAngularAnnotation(annotation, _NG_FILTER)) {
- parseNgFilter();
+ if (_isAngularAnnotation(annotation, _NG_FILTER)) {
+ _parseNgFilter();
continue;
}
// @NgComponent
- if (isAngularAnnotation(annotation, _NG_COMPONENT)) {
- parseNgComponent();
+ if (_isAngularAnnotation(annotation, _NG_COMPONENT)) {
+ _parseNgComponent();
continue;
}
// @NgController
- if (isAngularAnnotation(annotation, _NG_CONTROLLER)) {
- parseNgController();
+ if (_isAngularAnnotation(annotation, _NG_CONTROLLER)) {
+ _parseNgController();
continue;
}
// @NgDirective
- if (isAngularAnnotation(annotation, _NG_DIRECTIVE)) {
- parseNgDirective();
+ if (_isAngularAnnotation(annotation, _NG_DIRECTIVE)) {
+ _parseNgDirective();
continue;
}
}
@@ -317,7 +317,7 @@
* @return the argument [Expression] with given name form [annotation], may be
* `null` if not found.
*/
- Expression getArgument(String name) {
+ Expression _getArgument(String name) {
List<Expression> arguments = _annotation.arguments.arguments;
for (Expression argument in arguments) {
if (argument is NamedExpression) {
@@ -334,36 +334,36 @@
/**
* @return the [String] value of the named argument.
*/
- String getStringArgument(String name) => getStringLiteral(name).value;
+ String _getStringArgument(String name) => _getStringLiteral(name).value;
/**
* @return the offset of the value of the named argument.
*/
- int getStringArgumentOffset(String name) {
- Expression argument = getArgument(name);
+ int _getStringArgumentOffset(String name) {
+ Expression argument = _getArgument(name);
return (argument as SimpleStringLiteral).valueOffset;
}
/**
* @return the [SimpleStringLiteral] of the named argument.
*/
- SimpleStringLiteral getStringLiteral(String name) {
- Expression argument = getArgument(name);
+ SimpleStringLiteral _getStringLiteral(String name) {
+ Expression argument = _getArgument(name);
return argument as SimpleStringLiteral;
}
/**
* Checks if [namedArguments] has string value for the argument with the given name.
*/
- bool hasStringArgument(String name) {
- Expression argument = getArgument(name);
+ bool _hasStringArgument(String name) {
+ Expression argument = _getArgument(name);
return argument is SimpleStringLiteral;
}
/**
* Checks if given [Annotation] is an annotation with required name.
*/
- bool isAngularAnnotation(Annotation annotation, String name) {
+ bool _isAngularAnnotation(Annotation annotation, String name) {
Element element = annotation.element;
if (element is ConstructorElement) {
ConstructorElement constructorElement = element;
@@ -372,41 +372,41 @@
return false;
}
- void parseNgComponent() {
+ void _parseNgComponent() {
bool isValid = true;
// publishAs
String name = null;
int nameOffset = -1;
- if (hasStringArgument(_PUBLISH_AS)) {
- name = getStringArgument(_PUBLISH_AS);
- nameOffset = getStringArgumentOffset(_PUBLISH_AS);
+ if (_hasStringArgument(_PUBLISH_AS)) {
+ name = _getStringArgument(_PUBLISH_AS);
+ nameOffset = _getStringArgumentOffset(_PUBLISH_AS);
}
// selector
AngularSelectorElement selector = null;
- if (!hasStringArgument(_SELECTOR)) {
- reportErrorForAnnotation(AngularCode.MISSING_SELECTOR, []);
+ if (!_hasStringArgument(_SELECTOR)) {
+ _reportErrorForAnnotation(AngularCode.MISSING_SELECTOR, []);
isValid = false;
} else {
- SimpleStringLiteral selectorLiteral = getStringLiteral(_SELECTOR);
- selector = parseSelectorFromString(selectorLiteral);
+ SimpleStringLiteral selectorLiteral = _getStringLiteral(_SELECTOR);
+ selector = _parseSelectorFromString(selectorLiteral);
if (selector == null) {
- reportErrorForArgument(_SELECTOR, AngularCode.CANNOT_PARSE_SELECTOR, [selectorLiteral]);
+ _reportErrorForArgument(_SELECTOR, AngularCode.CANNOT_PARSE_SELECTOR, [selectorLiteral]);
isValid = false;
}
}
// templateUrl
String templateUri = null;
int templateUriOffset = -1;
- if (hasStringArgument(_TEMPLATE_URL)) {
- templateUri = getStringArgument(_TEMPLATE_URL);
- templateUriOffset = getStringArgumentOffset(_TEMPLATE_URL);
+ if (_hasStringArgument(_TEMPLATE_URL)) {
+ templateUri = _getStringArgument(_TEMPLATE_URL);
+ templateUriOffset = _getStringArgumentOffset(_TEMPLATE_URL);
}
// cssUrl
String styleUri = null;
int styleUriOffset = -1;
- if (hasStringArgument(_CSS_URL)) {
- styleUri = getStringArgument(_CSS_URL);
- styleUriOffset = getStringArgumentOffset(_CSS_URL);
+ if (_hasStringArgument(_CSS_URL)) {
+ styleUri = _getStringArgument(_CSS_URL);
+ styleUriOffset = _getStringArgumentOffset(_CSS_URL);
}
// create
if (isValid) {
@@ -416,8 +416,8 @@
element.templateUriOffset = templateUriOffset;
element.styleUri = styleUri;
element.styleUriOffset = styleUriOffset;
- element.properties = parseNgComponentProperties();
- element.scopeProperties = parseScopeProperties();
+ element.properties = _parseNgComponentProperties();
+ element.scopeProperties = _parseScopeProperties();
_classToolkitObjects.add(element);
}
}
@@ -425,17 +425,17 @@
/**
* Parses [AngularPropertyElement]s from [annotation] and [classDeclaration].
*/
- List<AngularPropertyElement> parseNgComponentProperties() {
+ List<AngularPropertyElement> _parseNgComponentProperties() {
List<AngularPropertyElement> properties = [];
- parseNgComponentProperties_fromMap(properties);
- parseNgComponentProperties_fromFields(properties);
+ _parseNgComponentProperties_fromMap(properties);
+ _parseNgComponentProperties_fromFields(properties);
return new List.from(properties);
}
/**
* Parses [AngularPropertyElement]s from [annotation].
*/
- void parseNgComponentProperties_fromFields(List<AngularPropertyElement> properties) {
+ void _parseNgComponentProperties_fromFields(List<AngularPropertyElement> properties) {
NodeList<ClassMember> members = _classDeclaration.members;
for (ClassMember member in members) {
if (member is FieldDeclaration) {
@@ -443,21 +443,21 @@
for (Annotation annotation in fieldDeclaration.metadata) {
// prepare property kind (if property annotation at all)
AngularPropertyKind kind = null;
- if (isAngularAnnotation(annotation, _NG_ATTR)) {
+ if (_isAngularAnnotation(annotation, _NG_ATTR)) {
kind = AngularPropertyKind.ATTR;
- } else if (isAngularAnnotation(annotation, _NG_CALLBACK)) {
+ } else if (_isAngularAnnotation(annotation, _NG_CALLBACK)) {
kind = AngularPropertyKind.CALLBACK;
- } else if (isAngularAnnotation(annotation, _NG_ONE_WAY)) {
+ } else if (_isAngularAnnotation(annotation, _NG_ONE_WAY)) {
kind = AngularPropertyKind.ONE_WAY;
- } else if (isAngularAnnotation(annotation, _NG_ONE_WAY_ONE_TIME)) {
+ } else if (_isAngularAnnotation(annotation, _NG_ONE_WAY_ONE_TIME)) {
kind = AngularPropertyKind.ONE_WAY_ONE_TIME;
- } else if (isAngularAnnotation(annotation, _NG_TWO_WAY)) {
+ } else if (_isAngularAnnotation(annotation, _NG_TWO_WAY)) {
kind = AngularPropertyKind.TWO_WAY;
}
// add property
if (kind != null) {
- SimpleStringLiteral nameLiteral = getOnlySimpleStringLiteralArgument(annotation);
- FieldElement field = getOnlyFieldElement(fieldDeclaration);
+ SimpleStringLiteral nameLiteral = _getOnlySimpleStringLiteralArgument(annotation);
+ FieldElement field = _getOnlyFieldElement(fieldDeclaration);
if (nameLiteral != null && field != null) {
AngularPropertyElementImpl property = new AngularPropertyElementImpl(nameLiteral.value, nameLiteral.valueOffset);
property.field = field;
@@ -473,15 +473,15 @@
/**
* Parses [AngularPropertyElement]s from [annotation].
*/
- void parseNgComponentProperties_fromMap(List<AngularPropertyElement> properties) {
- Expression mapExpression = getArgument("map");
+ void _parseNgComponentProperties_fromMap(List<AngularPropertyElement> properties) {
+ Expression mapExpression = _getArgument("map");
// may be not properties
if (mapExpression == null) {
return;
}
// prepare map literal
if (mapExpression is! MapLiteral) {
- reportErrorForNode(AngularCode.INVALID_PROPERTY_MAP, mapExpression, []);
+ _reportErrorForNode(AngularCode.INVALID_PROPERTY_MAP, mapExpression, []);
return;
}
MapLiteral mapLiteral = mapExpression as MapLiteral;
@@ -490,7 +490,7 @@
// prepare property name
Expression nameExpression = entry.key;
if (nameExpression is! SimpleStringLiteral) {
- reportErrorForNode(AngularCode.INVALID_PROPERTY_NAME, nameExpression, []);
+ _reportErrorForNode(AngularCode.INVALID_PROPERTY_NAME, nameExpression, []);
continue;
}
SimpleStringLiteral nameLiteral = nameExpression as SimpleStringLiteral;
@@ -499,7 +499,7 @@
// prepare field specification
Expression specExpression = entry.value;
if (specExpression is! SimpleStringLiteral) {
- reportErrorForNode(AngularCode.INVALID_PROPERTY_SPEC, specExpression, []);
+ _reportErrorForNode(AngularCode.INVALID_PROPERTY_SPEC, specExpression, []);
continue;
}
SimpleStringLiteral specLiteral = specExpression as SimpleStringLiteral;
@@ -523,7 +523,7 @@
kind = AngularPropertyKind.TWO_WAY;
fieldNameOffset = 3;
} else {
- reportErrorForNode(AngularCode.INVALID_PROPERTY_KIND, specLiteral, [spec]);
+ _reportErrorForNode(AngularCode.INVALID_PROPERTY_KIND, specLiteral, [spec]);
continue;
}
String fieldName = spec.substring(fieldNameOffset);
@@ -531,7 +531,7 @@
// prepare field
PropertyAccessorElement setter = _classElement.type.lookUpSetter(fieldName, _classElement.library);
if (setter == null) {
- reportErrorForOffset(AngularCode.INVALID_PROPERTY_FIELD, fieldNameOffset, fieldName.length, [fieldName]);
+ _reportErrorForOffset(AngularCode.INVALID_PROPERTY_FIELD, fieldNameOffset, fieldName.length, [fieldName]);
continue;
}
FieldElement field = setter.variable as FieldElement;
@@ -544,48 +544,48 @@
}
}
- void parseNgController() {
+ void _parseNgController() {
bool isValid = true;
// publishAs
- if (!hasStringArgument(_PUBLISH_AS)) {
- reportErrorForAnnotation(AngularCode.MISSING_PUBLISH_AS, []);
+ if (!_hasStringArgument(_PUBLISH_AS)) {
+ _reportErrorForAnnotation(AngularCode.MISSING_PUBLISH_AS, []);
isValid = false;
}
// selector
AngularSelectorElement selector = null;
- if (!hasStringArgument(_SELECTOR)) {
- reportErrorForAnnotation(AngularCode.MISSING_SELECTOR, []);
+ if (!_hasStringArgument(_SELECTOR)) {
+ _reportErrorForAnnotation(AngularCode.MISSING_SELECTOR, []);
isValid = false;
} else {
- SimpleStringLiteral selectorLiteral = getStringLiteral(_SELECTOR);
- selector = parseSelectorFromString(selectorLiteral);
+ SimpleStringLiteral selectorLiteral = _getStringLiteral(_SELECTOR);
+ selector = _parseSelectorFromString(selectorLiteral);
if (selector == null) {
- reportErrorForArgument(_SELECTOR, AngularCode.CANNOT_PARSE_SELECTOR, [selectorLiteral]);
+ _reportErrorForArgument(_SELECTOR, AngularCode.CANNOT_PARSE_SELECTOR, [selectorLiteral]);
isValid = false;
}
}
// create
if (isValid) {
- String name = getStringArgument(_PUBLISH_AS);
- int nameOffset = getStringArgumentOffset(_PUBLISH_AS);
+ String name = _getStringArgument(_PUBLISH_AS);
+ int nameOffset = _getStringArgumentOffset(_PUBLISH_AS);
AngularControllerElementImpl element = new AngularControllerElementImpl(name, nameOffset);
element.selector = selector;
_classToolkitObjects.add(element);
}
}
- void parseNgDirective() {
+ void _parseNgDirective() {
bool isValid = true;
// selector
AngularSelectorElement selector = null;
- if (!hasStringArgument(_SELECTOR)) {
- reportErrorForAnnotation(AngularCode.MISSING_SELECTOR, []);
+ if (!_hasStringArgument(_SELECTOR)) {
+ _reportErrorForAnnotation(AngularCode.MISSING_SELECTOR, []);
isValid = false;
} else {
- SimpleStringLiteral selectorLiteral = getStringLiteral(_SELECTOR);
- selector = parseSelectorFromString(selectorLiteral);
+ SimpleStringLiteral selectorLiteral = _getStringLiteral(_SELECTOR);
+ selector = _parseSelectorFromString(selectorLiteral);
if (selector == null) {
- reportErrorForArgument(_SELECTOR, AngularCode.CANNOT_PARSE_SELECTOR, [selectorLiteral]);
+ _reportErrorForArgument(_SELECTOR, AngularCode.CANNOT_PARSE_SELECTOR, [selectorLiteral]);
isValid = false;
}
}
@@ -594,27 +594,27 @@
int offset = _annotation.offset;
AngularDirectiveElementImpl element = new AngularDirectiveElementImpl(offset);
element.selector = selector;
- element.properties = parseNgComponentProperties();
+ element.properties = _parseNgComponentProperties();
_classToolkitObjects.add(element);
}
}
- void parseNgFilter() {
+ void _parseNgFilter() {
bool isValid = true;
// name
- if (!hasStringArgument(_NAME)) {
- reportErrorForAnnotation(AngularCode.MISSING_NAME, []);
+ if (!_hasStringArgument(_NAME)) {
+ _reportErrorForAnnotation(AngularCode.MISSING_NAME, []);
isValid = false;
}
// create
if (isValid) {
- String name = getStringArgument(_NAME);
- int nameOffset = getStringArgumentOffset(_NAME);
+ String name = _getStringArgument(_NAME);
+ int nameOffset = _getStringArgumentOffset(_NAME);
_classToolkitObjects.add(new AngularFilterElementImpl(name, nameOffset));
}
}
- List<AngularScopePropertyElement> parseScopeProperties() {
+ List<AngularScopePropertyElement> _parseScopeProperties() {
List<AngularScopePropertyElement> properties = [];
_classDeclaration.accept(new RecursiveAstVisitor_AngularCompilationUnitBuilder_parseScopeProperties(properties));
return new List.from(properties);
@@ -624,7 +624,7 @@
* Create [AngularViewElement] for each valid <code>view('template.html')</code> invocation,
* where <code>view</code> is <code>ViewFactory</code>.
*/
- void parseViews() {
+ void _parseViews() {
List<AngularViewElement> views = [];
_unit.accept(new RecursiveAstVisitor_AngularCompilationUnitBuilder_parseViews(views));
if (!views.isEmpty) {
@@ -633,22 +633,22 @@
}
}
- void reportErrorForAnnotation(ErrorCode errorCode, List<Object> arguments) {
- reportErrorForNode(errorCode, _annotation, arguments);
+ void _reportErrorForAnnotation(ErrorCode errorCode, List<Object> arguments) {
+ _reportErrorForNode(errorCode, _annotation, arguments);
}
- void reportErrorForArgument(String argumentName, ErrorCode errorCode, List<Object> arguments) {
- Expression argument = getArgument(argumentName);
- reportErrorForNode(errorCode, argument, arguments);
+ void _reportErrorForArgument(String argumentName, ErrorCode errorCode, List<Object> arguments) {
+ Expression argument = _getArgument(argumentName);
+ _reportErrorForNode(errorCode, argument, arguments);
}
- void reportErrorForNode(ErrorCode errorCode, AstNode node, List<Object> arguments) {
+ void _reportErrorForNode(ErrorCode errorCode, AstNode node, List<Object> arguments) {
int offset = node.offset;
int length = node.length;
- reportErrorForOffset(errorCode, offset, length, arguments);
+ _reportErrorForOffset(errorCode, offset, length, arguments);
}
- void reportErrorForOffset(ErrorCode errorCode, int offset, int length, List<Object> arguments) {
+ void _reportErrorForOffset(ErrorCode errorCode, int offset, int length, List<Object> arguments) {
_errorListener.onError(new AnalysisError.con2(_source, offset, length, errorCode, arguments));
}
}
@@ -658,20 +658,21 @@
RecursiveAstVisitor_AngularCompilationUnitBuilder_parseScopeProperties(this.properties) : super();
+ @override
Object visitAssignmentExpression(AssignmentExpression node) {
- addProperty(node);
+ _addProperty(node);
return super.visitAssignmentExpression(node);
}
- void addProperty(AssignmentExpression node) {
+ void _addProperty(AssignmentExpression node) {
// try to find "name" in scope[name]
- SimpleStringLiteral nameNode = getNameNode(node.leftHandSide);
+ SimpleStringLiteral nameNode = _getNameNode(node.leftHandSide);
if (nameNode == null) {
return;
}
// prepare unique
String name = nameNode.stringValue;
- if (hasPropertyWithName(name)) {
+ if (_hasPropertyWithName(name)) {
return;
}
// do add property
@@ -681,19 +682,19 @@
properties.add(property);
}
- SimpleStringLiteral getNameNode(Expression node) {
+ SimpleStringLiteral _getNameNode(Expression node) {
if (node is IndexExpression) {
IndexExpression indexExpression = node;
Expression target = indexExpression.target;
Expression index = indexExpression.index;
- if (index is SimpleStringLiteral && isContext(target)) {
+ if (index is SimpleStringLiteral && _isContext(target)) {
return index;
}
}
return null;
}
- bool hasPropertyWithName(String name) {
+ bool _hasPropertyWithName(String name) {
for (AngularScopePropertyElement property in properties) {
if (property.name == name) {
return true;
@@ -702,19 +703,19 @@
return false;
}
- bool isContext(Expression target) {
+ bool _isContext(Expression target) {
if (target is PrefixedIdentifier) {
PrefixedIdentifier prefixed = target;
SimpleIdentifier prefix = prefixed.prefix;
SimpleIdentifier identifier = prefixed.identifier;
- return (identifier.name == "context") && isScope(prefix);
+ return (identifier.name == "context") && _isScope(prefix);
}
return false;
}
- bool isScope(Expression target) {
+ bool _isScope(Expression target) {
if (target != null) {
- Type2 type = target.bestType;
+ DartType type = target.bestType;
if (type is InterfaceType) {
InterfaceType interfaceType = type;
return interfaceType.name == "Scope";
@@ -729,12 +730,13 @@
RecursiveAstVisitor_AngularCompilationUnitBuilder_parseViews(this.views) : super();
+ @override
Object visitMethodInvocation(MethodInvocation node) {
- addView(node);
+ _addView(node);
return super.visitMethodInvocation(node);
}
- void addView(MethodInvocation node) {
+ void _addView(MethodInvocation node) {
// only one argument
List<Expression> arguments = node.argumentList.arguments;
if (arguments.length != 1) {
@@ -751,7 +753,7 @@
return;
}
// should be ViewFactory
- if (!isViewFactory(node.methodName)) {
+ if (!_isViewFactory(node.methodName)) {
return;
}
// add AngularViewElement
@@ -760,13 +762,13 @@
views.add(new AngularViewElementImpl(templateUri, templateUriOffset));
}
- bool isViewFactory(Expression target) {
+ bool _isViewFactory(Expression target) {
if (target is SimpleIdentifier) {
SimpleIdentifier identifier = target;
Element element = identifier.staticElement;
if (element is VariableElement) {
VariableElement variable = element;
- Type2 type = variable.type;
+ DartType type = variable.type;
if (type is InterfaceType) {
InterfaceType interfaceType = type;
return interfaceType.name == "ViewFactory";
@@ -861,6 +863,7 @@
_currentHolder = initialHolder;
}
+ @override
Object visitBlock(Block node) {
bool wasInField = _inFieldContext;
_inFieldContext = false;
@@ -872,6 +875,7 @@
return null;
}
+ @override
Object visitCatchClause(CatchClause node) {
SimpleIdentifier exceptionParameter = node.exceptionParameter;
if (exceptionParameter != null) {
@@ -888,6 +892,7 @@
return super.visitCatchClause(node);
}
+ @override
Object visitClassDeclaration(ClassDeclaration node) {
ElementHolder holder = new ElementHolder();
_isValidMixin = true;
@@ -901,7 +906,7 @@
try {
List<ClassMember> nonFields = new List<ClassMember>();
node.visitChildren(new UnifyingAstVisitor_ElementBuilder_visitClassDeclaration(this, nonFields));
- buildFieldMap(holder.fieldsWithoutFlushing);
+ _buildFieldMap(holder.fieldsWithoutFlushing);
int count = nonFields.length;
for (int i = 0; i < count; i++) {
nonFields[i].accept(this);
@@ -912,7 +917,7 @@
SimpleIdentifier className = node.name;
ClassElementImpl element = new ClassElementImpl(className);
List<TypeParameterElement> typeParameters = holder.typeParameters;
- List<Type2> typeArguments = createTypeParameterTypes(typeParameters);
+ List<DartType> typeArguments = _createTypeParameterTypes(typeParameters);
InterfaceTypeImpl interfaceType = new InterfaceTypeImpl.con1(element);
interfaceType.typeArguments = typeArguments;
element.type = interfaceType;
@@ -921,7 +926,7 @@
//
// Create the default constructor.
//
- constructors = createDefaultConstructors(interfaceType);
+ constructors = _createDefaultConstructors(interfaceType);
}
element.abstract = node.abstractKeyword != null;
element.accessors = holder.accessors;
@@ -942,22 +947,23 @@
return null;
}
+ @override
Object visitClassTypeAlias(ClassTypeAlias node) {
ElementHolder holder = new ElementHolder();
_functionTypesToFix = new List<FunctionTypeImpl>();
- visitChildren(holder, node);
+ _visitChildren(holder, node);
SimpleIdentifier className = node.name;
ClassElementImpl element = new ClassElementImpl(className);
element.abstract = node.abstractKeyword != null;
element.typedef = true;
List<TypeParameterElement> typeParameters = holder.typeParameters;
element.typeParameters = typeParameters;
- List<Type2> typeArguments = createTypeParameterTypes(typeParameters);
+ List<DartType> typeArguments = _createTypeParameterTypes(typeParameters);
InterfaceTypeImpl interfaceType = new InterfaceTypeImpl.con1(element);
interfaceType.typeArguments = typeArguments;
element.type = interfaceType;
// set default constructor
- element.constructors = createDefaultConstructors(interfaceType);
+ element.constructors = _createDefaultConstructors(interfaceType);
for (FunctionTypeImpl functionType in _functionTypesToFix) {
functionType.typeArguments = typeArguments;
}
@@ -968,13 +974,14 @@
return null;
}
+ @override
Object visitConstructorDeclaration(ConstructorDeclaration node) {
_isValidMixin = false;
ElementHolder holder = new ElementHolder();
bool wasInFunction = _inFunction;
_inFunction = true;
try {
- visitChildren(holder, node);
+ _visitChildren(holder, node);
} finally {
_inFunction = wasInFunction;
}
@@ -1002,6 +1009,7 @@
return null;
}
+ @override
Object visitDeclaredIdentifier(DeclaredIdentifier node) {
SimpleIdentifier variableName = node.identifier;
sc.Token keyword = node.keyword;
@@ -1010,13 +1018,14 @@
int declarationEnd = node.offset + node.length;
int statementEnd = statement.offset + statement.length;
element.setVisibleRange(declarationEnd, statementEnd - declarationEnd - 1);
- element.const3 = matches(keyword, sc.Keyword.CONST);
- element.final2 = matches(keyword, sc.Keyword.FINAL);
+ element.const3 = _matches(keyword, sc.Keyword.CONST);
+ element.final2 = _matches(keyword, sc.Keyword.FINAL);
_currentHolder.addLocalVariable(element);
variableName.staticElement = element;
return super.visitDeclaredIdentifier(node);
}
+ @override
Object visitDefaultFormalParameter(DefaultFormalParameter node) {
ElementHolder holder = new ElementHolder();
NormalFormalParameter normalParameter = node.parameter;
@@ -1037,7 +1046,7 @@
// set initializer, default value range
Expression defaultValue = node.defaultValue;
if (defaultValue != null) {
- visit(holder, defaultValue);
+ _visit(holder, defaultValue);
FunctionElementImpl initializer = new FunctionElementImpl.con2(defaultValue.beginToken.offset);
initializer.functions = holder.functions;
initializer.labels = holder.labels;
@@ -1048,7 +1057,7 @@
parameter.setDefaultValueRange(defaultValue.offset, defaultValue.length);
}
// visible range
- setParameterVisibleRange(node, parameter);
+ _setParameterVisibleRange(node, parameter);
_currentHolder.addParameter(parameter);
parameterName.staticElement = parameter;
normalParameter.accept(this);
@@ -1056,6 +1065,7 @@
return null;
}
+ @override
Object visitFieldDeclaration(FieldDeclaration node) {
bool wasInField = _inFieldContext;
_inFieldContext = true;
@@ -1067,6 +1077,7 @@
return null;
}
+ @override
Object visitFieldFormalParameter(FieldFormalParameter node) {
if (node.parent is! DefaultFormalParameter) {
SimpleIdentifier parameterName = node.identifier;
@@ -1085,12 +1096,13 @@
// The children of this parameter include any parameters defined on the type of this parameter.
//
ElementHolder holder = new ElementHolder();
- visitChildren(holder, node);
+ _visitChildren(holder, node);
(node.element as ParameterElementImpl).parameters = holder.parameters;
holder.validate();
return null;
}
+ @override
Object visitFunctionDeclaration(FunctionDeclaration node) {
FunctionExpression expression = node.functionExpression;
if (expression != null) {
@@ -1098,7 +1110,7 @@
bool wasInFunction = _inFunction;
_inFunction = true;
try {
- visitChildren(holder, expression);
+ _visitChildren(holder, expression);
} finally {
_inFunction = wasInFunction;
}
@@ -1135,7 +1147,7 @@
variable.synthetic = true;
_currentHolder.addTopLevelVariable(variable);
}
- if (matches(property, sc.Keyword.GET)) {
+ if (_matches(property, sc.Keyword.GET)) {
PropertyAccessorElementImpl getter = new PropertyAccessorElementImpl.con1(propertyNameNode);
getter.functions = holder.functions;
getter.labels = holder.labels;
@@ -1168,12 +1180,13 @@
return null;
}
+ @override
Object visitFunctionExpression(FunctionExpression node) {
ElementHolder holder = new ElementHolder();
bool wasInFunction = _inFunction;
_inFunction = true;
try {
- visitChildren(holder, node);
+ _visitChildren(holder, node);
} finally {
_inFunction = wasInFunction;
}
@@ -1201,9 +1214,10 @@
return null;
}
+ @override
Object visitFunctionTypeAlias(FunctionTypeAlias node) {
ElementHolder holder = new ElementHolder();
- visitChildren(holder, node);
+ _visitChildren(holder, node);
SimpleIdentifier aliasName = node.name;
List<ParameterElement> parameters = holder.parameters;
List<TypeParameterElement> typeParameters = holder.typeParameters;
@@ -1211,7 +1225,7 @@
element.parameters = parameters;
element.typeParameters = typeParameters;
FunctionTypeImpl type = new FunctionTypeImpl.con2(element);
- type.typeArguments = createTypeParameterTypes(typeParameters);
+ type.typeArguments = _createTypeParameterTypes(typeParameters);
element.type = type;
_currentHolder.addTypeAlias(element);
aliasName.staticElement = element;
@@ -1219,12 +1233,13 @@
return null;
}
+ @override
Object visitFunctionTypedFormalParameter(FunctionTypedFormalParameter node) {
if (node.parent is! DefaultFormalParameter) {
SimpleIdentifier parameterName = node.identifier;
ParameterElementImpl parameter = new ParameterElementImpl.con1(parameterName);
parameter.parameterKind = node.kind;
- setParameterVisibleRange(node, parameter);
+ _setParameterVisibleRange(node, parameter);
_currentHolder.addParameter(parameter);
parameterName.staticElement = parameter;
}
@@ -1232,12 +1247,13 @@
// The children of this parameter include any parameters defined on the type of this parameter.
//
ElementHolder holder = new ElementHolder();
- visitChildren(holder, node);
+ _visitChildren(holder, node);
(node.element as ParameterElementImpl).parameters = holder.parameters;
holder.validate();
return null;
}
+ @override
Object visitLabeledStatement(LabeledStatement node) {
bool onSwitchStatement = node.statement is SwitchStatement;
for (Label label in node.labels) {
@@ -1249,12 +1265,13 @@
return super.visitLabeledStatement(node);
}
+ @override
Object visitMethodDeclaration(MethodDeclaration node) {
ElementHolder holder = new ElementHolder();
bool wasInFunction = _inFunction;
_inFunction = true;
try {
- visitChildren(holder, node);
+ _visitChildren(holder, node);
} finally {
_inFunction = wasInFunction;
}
@@ -1286,7 +1303,7 @@
field.synthetic = true;
_currentHolder.addField(field);
}
- if (matches(property, sc.Keyword.GET)) {
+ if (_matches(property, sc.Keyword.GET)) {
PropertyAccessorElementImpl getter = new PropertyAccessorElementImpl.con1(propertyNameNode);
getter.functions = holder.functions;
getter.labels = holder.labels;
@@ -1305,7 +1322,7 @@
setter.localVariables = holder.localVariables;
setter.parameters = holder.parameters;
setter.variable = field;
- setter.abstract = node.body is EmptyFunctionBody && !matches(node.externalKeyword, sc.Keyword.EXTERNAL);
+ setter.abstract = node.body is EmptyFunctionBody && !_matches(node.externalKeyword, sc.Keyword.EXTERNAL);
setter.setter = true;
setter.static = isStatic;
field.setter = setter;
@@ -1318,6 +1335,7 @@
return null;
}
+ @override
Object visitSimpleFormalParameter(SimpleFormalParameter node) {
if (node.parent is! DefaultFormalParameter) {
SimpleIdentifier parameterName = node.identifier;
@@ -1325,18 +1343,20 @@
parameter.const3 = node.isConst;
parameter.final2 = node.isFinal;
parameter.parameterKind = node.kind;
- setParameterVisibleRange(node, parameter);
+ _setParameterVisibleRange(node, parameter);
_currentHolder.addParameter(parameter);
parameterName.staticElement = parameter;
}
return super.visitSimpleFormalParameter(node);
}
+ @override
Object visitSuperExpression(SuperExpression node) {
_isValidMixin = false;
return super.visitSuperExpression(node);
}
+ @override
Object visitSwitchCase(SwitchCase node) {
for (Label label in node.labels) {
SimpleIdentifier labelName = label.label;
@@ -1347,6 +1367,7 @@
return super.visitSwitchCase(node);
}
+ @override
Object visitSwitchDefault(SwitchDefault node) {
for (Label label in node.labels) {
SimpleIdentifier labelName = label.label;
@@ -1357,6 +1378,7 @@
return super.visitSwitchDefault(node);
}
+ @override
Object visitTypeParameter(TypeParameter node) {
SimpleIdentifier parameterName = node.name;
TypeParameterElementImpl typeParameter = new TypeParameterElementImpl(parameterName);
@@ -1367,10 +1389,11 @@
return super.visitTypeParameter(node);
}
+ @override
Object visitVariableDeclaration(VariableDeclaration node) {
sc.Token keyword = (node.parent as VariableDeclarationList).keyword;
- bool isConst = matches(keyword, sc.Keyword.CONST);
- bool isFinal = matches(keyword, sc.Keyword.FINAL);
+ bool isConst = _matches(keyword, sc.Keyword.CONST);
+ bool isFinal = _matches(keyword, sc.Keyword.FINAL);
bool hasInitializer = node.initializer != null;
VariableElementImpl element;
if (_inFieldContext) {
@@ -1419,7 +1442,7 @@
bool wasInFieldContext = _inFieldContext;
_inFieldContext = false;
try {
- visit(holder, node.initializer);
+ _visit(holder, node.initializer);
} finally {
_inFieldContext = wasInFieldContext;
}
@@ -1434,7 +1457,7 @@
if (element is PropertyInducingElementImpl) {
PropertyInducingElementImpl variable = element as PropertyInducingElementImpl;
if (_inFieldContext) {
- (variable as FieldElementImpl).static = matches((node.parent.parent as FieldDeclaration).staticKeyword, sc.Keyword.STATIC);
+ (variable as FieldElementImpl).static = _matches((node.parent.parent as FieldDeclaration).staticKeyword, sc.Keyword.STATIC);
}
PropertyAccessorElementImpl getter = new PropertyAccessorElementImpl.con2(variable);
getter.getter = true;
@@ -1462,7 +1485,7 @@
*
* @param fields the field elements defined in the current class
*/
- void buildFieldMap(List<FieldElement> fields) {
+ void _buildFieldMap(List<FieldElement> fields) {
_fieldMap = new Map<String, FieldElement>();
int count = fields.length;
for (int i = 0; i < count; i++) {
@@ -1477,7 +1500,7 @@
* @param interfaceType the interface type for which to create a default constructor
* @return the [ConstructorElement]s array with the single default constructor element
*/
- List<ConstructorElement> createDefaultConstructors(InterfaceTypeImpl interfaceType) {
+ List<ConstructorElement> _createDefaultConstructors(InterfaceTypeImpl interfaceType) {
ConstructorElementImpl constructor = new ConstructorElementImpl.con1(null);
constructor.synthetic = true;
constructor.returnType = interfaceType;
@@ -1494,9 +1517,9 @@
* @param typeParameters the type parameters for which types are to be created
* @return an array of types corresponding to the given parameters
*/
- List<Type2> createTypeParameterTypes(List<TypeParameterElement> typeParameters) {
+ List<DartType> _createTypeParameterTypes(List<TypeParameterElement> typeParameters) {
int typeParameterCount = typeParameters.length;
- List<Type2> typeArguments = new List<Type2>(typeParameterCount);
+ List<DartType> typeArguments = new List<DartType>(typeParameterCount);
for (int i = 0; i < typeParameterCount; i++) {
TypeParameterElementImpl typeParameter = typeParameters[i] as TypeParameterElementImpl;
TypeParameterTypeImpl typeParameterType = new TypeParameterTypeImpl(typeParameter);
@@ -1513,7 +1536,7 @@
* @param node the parameter contained in the function whose body is to be returned
* @return the body of the function that contains the given parameter
*/
- FunctionBody getFunctionBody(FormalParameter node) {
+ FunctionBody _getFunctionBody(FormalParameter node) {
AstNode parent = node.parent;
while (parent != null) {
if (parent is ConstructorDeclaration) {
@@ -1535,13 +1558,13 @@
* @param keyword the keyword being tested for
* @return `true` if the given token is a token for the given keyword
*/
- bool matches(sc.Token token, sc.Keyword keyword) => token != null && identical(token.type, sc.TokenType.KEYWORD) && identical((token as sc.KeywordToken).keyword, keyword);
+ bool _matches(sc.Token token, sc.Keyword keyword) => token != null && identical(token.type, sc.TokenType.KEYWORD) && identical((token as sc.KeywordToken).keyword, keyword);
/**
* Sets the visible source range for formal parameter.
*/
- void setParameterVisibleRange(FormalParameter node, ParameterElementImpl element) {
- FunctionBody body = getFunctionBody(node);
+ void _setParameterVisibleRange(FormalParameter node, ParameterElementImpl element) {
+ FunctionBody body = _getFunctionBody(node);
if (body != null) {
element.setVisibleRange(body.offset, body.length);
}
@@ -1553,7 +1576,7 @@
* @param holder the holder that will gather elements that are built while visiting the children
* @param node the node to be visited
*/
- void visit(ElementHolder holder, AstNode node) {
+ void _visit(ElementHolder holder, AstNode node) {
if (node != null) {
ElementHolder previousHolder = _currentHolder;
_currentHolder = holder;
@@ -1571,7 +1594,7 @@
* @param holder the holder that will gather elements that are built while visiting the children
* @param node the node whose children are to be visited
*/
- void visitChildren(ElementHolder holder, AstNode node) {
+ void _visitChildren(ElementHolder holder, AstNode node) {
if (node != null) {
ElementHolder previousHolder = _currentHolder;
_currentHolder = holder;
@@ -1591,16 +1614,19 @@
UnifyingAstVisitor_ElementBuilder_visitClassDeclaration(this.ElementBuilder_this, this.nonFields) : super();
+ @override
Object visitConstructorDeclaration(ConstructorDeclaration node) {
nonFields.add(node);
return null;
}
+ @override
Object visitMethodDeclaration(MethodDeclaration node) {
nonFields.add(node);
return null;
}
+ @override
Object visitNode(AstNode node) => node.accept(ElementBuilder_this);
}
@@ -2031,14 +2057,15 @@
*/
Set<Library> get resolvedLibraries => _resolvedLibraries;
+ @override
Object visitHtmlScriptTagNode(ht.HtmlScriptTagNode node) {
if (_parentNodes.contains(node)) {
- return reportCircularity(node);
+ return _reportCircularity(node);
}
_parentNodes.add(node);
try {
Source htmlSource = _htmlElement.source;
- ht.XmlAttributeNode scriptAttribute = getScriptSourcePath(node);
+ ht.XmlAttributeNode scriptAttribute = _getScriptSourcePath(node);
String scriptSourcePath = scriptAttribute == null ? null : scriptAttribute.text;
if (identical(node.attributeEnd.type, ht.TokenType.GT) && scriptSourcePath == null) {
EmbeddedHtmlScriptElementImpl script = new EmbeddedHtmlScriptElementImpl(node);
@@ -2065,10 +2092,10 @@
Source scriptSource = _context.sourceFactory.resolveUri(htmlSource, scriptSourcePath);
script.scriptSource = scriptSource;
if (!_context.exists(scriptSource)) {
- reportValueError(HtmlWarningCode.URI_DOES_NOT_EXIST, scriptAttribute, [scriptSourcePath]);
+ _reportValueError(HtmlWarningCode.URI_DOES_NOT_EXIST, scriptAttribute, [scriptSourcePath]);
}
} on URISyntaxException catch (exception) {
- reportValueError(HtmlWarningCode.INVALID_URI, scriptAttribute, [scriptSourcePath]);
+ _reportValueError(HtmlWarningCode.INVALID_URI, scriptAttribute, [scriptSourcePath]);
}
}
node.scriptElement = script;
@@ -2080,6 +2107,7 @@
return null;
}
+ @override
Object visitHtmlUnit(ht.HtmlUnit node) {
_parentNodes = new List<ht.XmlTagNode>();
_scripts = new List<HtmlScriptElement>();
@@ -2093,11 +2121,13 @@
return null;
}
+ @override
Object visitXmlAttributeNode(ht.XmlAttributeNode node) => null;
+ @override
Object visitXmlTagNode(ht.XmlTagNode node) {
if (_parentNodes.contains(node)) {
- return reportCircularity(node);
+ return _reportCircularity(node);
}
_parentNodes.add(node);
try {
@@ -2114,7 +2144,7 @@
* @param node the node containing attributes
* @return the source attribute contained in the given tag
*/
- ht.XmlAttributeNode getScriptSourcePath(ht.XmlTagNode node) {
+ ht.XmlAttributeNode _getScriptSourcePath(ht.XmlTagNode node) {
for (ht.XmlAttributeNode attribute in node.attributes) {
if (attribute.name == _SRC) {
return attribute;
@@ -2123,7 +2153,7 @@
return null;
}
- Object reportCircularity(ht.XmlTagNode node) {
+ Object _reportCircularity(ht.XmlTagNode node) {
//
// This should not be possible, but we have an error report that suggests that it happened at
// least once. This code will guard against infinite recursion and might help us identify the
@@ -2160,7 +2190,7 @@
* @param length the number of characters to be highlighted
* @param arguments the arguments used to compose the error message
*/
- void reportErrorForOffset(ErrorCode errorCode, int offset, int length, List<Object> arguments) {
+ void _reportErrorForOffset(ErrorCode errorCode, int offset, int length, List<Object> arguments) {
_errorListener.onError(new AnalysisError.con2(_htmlElement.source, offset, length, errorCode, arguments));
}
@@ -2173,10 +2203,10 @@
* @param length the number of characters to be highlighted
* @param arguments the arguments used to compose the error message
*/
- void reportValueError(ErrorCode errorCode, ht.XmlAttributeNode attribute, List<Object> arguments) {
+ void _reportValueError(ErrorCode errorCode, ht.XmlAttributeNode attribute, List<Object> arguments) {
int offset = attribute.valueToken.offset + 1;
int length = attribute.valueToken.length - 2;
- reportErrorForOffset(errorCode, offset, length, arguments);
+ _reportErrorForOffset(errorCode, offset, length, arguments);
}
}
@@ -2208,9 +2238,9 @@
* @return the first parent or grand-parent that is a parenthesized expression, that does not have
* a parenthesized expression parent
*/
- static ParenthesizedExpression wrapParenthesizedExpression(ParenthesizedExpression parenthesizedExpression) {
+ static ParenthesizedExpression _wrapParenthesizedExpression(ParenthesizedExpression parenthesizedExpression) {
if (parenthesizedExpression.parent is ParenthesizedExpression) {
- return wrapParenthesizedExpression(parenthesizedExpression.parent as ParenthesizedExpression);
+ return _wrapParenthesizedExpression(parenthesizedExpression.parent as ParenthesizedExpression);
}
return parenthesizedExpression;
}
@@ -2235,27 +2265,31 @@
this._errorReporter = errorReporter;
}
+ @override
Object visitAsExpression(AsExpression node) {
- checkForUnnecessaryCast(node);
+ _checkForUnnecessaryCast(node);
return super.visitAsExpression(node);
}
+ @override
Object visitAssignmentExpression(AssignmentExpression node) {
sc.TokenType operatorType = node.operator.type;
if (operatorType != sc.TokenType.EQ) {
- checkForDeprecatedMemberUse(node.bestElement, node);
+ _checkForDeprecatedMemberUse(node.bestElement, node);
} else {
- checkForUseOfVoidResult(node.rightHandSide);
+ _checkForUseOfVoidResult(node.rightHandSide);
}
return super.visitAssignmentExpression(node);
}
+ @override
Object visitBinaryExpression(BinaryExpression node) {
- checkForDivisionOptimizationHint(node);
- checkForDeprecatedMemberUse(node.bestElement, node);
+ _checkForDivisionOptimizationHint(node);
+ _checkForDeprecatedMemberUse(node.bestElement, node);
return super.visitBinaryExpression(node);
}
+ @override
Object visitClassDeclaration(ClassDeclaration node) {
ClassElement outerClass = _enclosingClass;
try {
@@ -2268,70 +2302,83 @@
}
}
+ @override
Object visitExportDirective(ExportDirective node) {
- checkForDeprecatedMemberUse(node.uriElement, node);
+ _checkForDeprecatedMemberUse(node.uriElement, node);
return super.visitExportDirective(node);
}
+ @override
Object visitFunctionDeclaration(FunctionDeclaration node) {
- checkForMissingReturn(node.returnType, node.functionExpression.body);
+ _checkForMissingReturn(node.returnType, node.functionExpression.body);
return super.visitFunctionDeclaration(node);
}
+ @override
Object visitImportDirective(ImportDirective node) {
- checkForDeprecatedMemberUse(node.uriElement, node);
+ _checkForDeprecatedMemberUse(node.uriElement, node);
return super.visitImportDirective(node);
}
+ @override
Object visitIndexExpression(IndexExpression node) {
- checkForDeprecatedMemberUse(node.bestElement, node);
+ _checkForDeprecatedMemberUse(node.bestElement, node);
return super.visitIndexExpression(node);
}
+ @override
Object visitInstanceCreationExpression(InstanceCreationExpression node) {
- checkForDeprecatedMemberUse(node.staticElement, node);
+ _checkForDeprecatedMemberUse(node.staticElement, node);
return super.visitInstanceCreationExpression(node);
}
+ @override
Object visitIsExpression(IsExpression node) {
- checkAllTypeChecks(node);
+ _checkAllTypeChecks(node);
return super.visitIsExpression(node);
}
+ @override
Object visitMethodDeclaration(MethodDeclaration node) {
// This was determined to not be a good hint, see: dartbug.com/16029
//checkForOverridingPrivateMember(node);
- checkForMissingReturn(node.returnType, node.body);
+ _checkForMissingReturn(node.returnType, node.body);
return super.visitMethodDeclaration(node);
}
+ @override
Object visitPostfixExpression(PostfixExpression node) {
- checkForDeprecatedMemberUse(node.bestElement, node);
+ _checkForDeprecatedMemberUse(node.bestElement, node);
return super.visitPostfixExpression(node);
}
+ @override
Object visitPrefixExpression(PrefixExpression node) {
- checkForDeprecatedMemberUse(node.bestElement, node);
+ _checkForDeprecatedMemberUse(node.bestElement, node);
return super.visitPrefixExpression(node);
}
+ @override
Object visitRedirectingConstructorInvocation(RedirectingConstructorInvocation node) {
- checkForDeprecatedMemberUse(node.staticElement, node);
+ _checkForDeprecatedMemberUse(node.staticElement, node);
return super.visitRedirectingConstructorInvocation(node);
}
+ @override
Object visitSimpleIdentifier(SimpleIdentifier node) {
- checkForDeprecatedMemberUseAtIdentifier(node);
+ _checkForDeprecatedMemberUseAtIdentifier(node);
return super.visitSimpleIdentifier(node);
}
+ @override
Object visitSuperConstructorInvocation(SuperConstructorInvocation node) {
- checkForDeprecatedMemberUse(node.staticElement, node);
+ _checkForDeprecatedMemberUse(node.staticElement, node);
return super.visitSuperConstructorInvocation(node);
}
+ @override
Object visitVariableDeclaration(VariableDeclaration node) {
- checkForUseOfVoidResult(node.initializer);
+ _checkForUseOfVoidResult(node.initializer);
return super.visitVariableDeclaration(node);
}
@@ -2346,11 +2393,11 @@
* @see HintCode#UNNECESSARY_TYPE_CHECK_TRUE
* @see HintCode#UNNECESSARY_TYPE_CHECK_FALSE
*/
- bool checkAllTypeChecks(IsExpression node) {
+ bool _checkAllTypeChecks(IsExpression node) {
Expression expression = node.expression;
TypeName typeName = node.type;
- Type2 lhsType = expression.staticType;
- Type2 rhsType = typeName.type;
+ DartType lhsType = expression.staticType;
+ DartType rhsType = typeName.type;
if (lhsType == null || rhsType == null) {
return false;
}
@@ -2402,7 +2449,7 @@
* @return `true` if and only if a hint code is generated on the passed node
* @see HintCode#DEPRECATED_MEMBER_USE
*/
- bool checkForDeprecatedMemberUse(Element element, AstNode node) {
+ bool _checkForDeprecatedMemberUse(Element element, AstNode node) {
if (element != null && element.isDeprecated) {
String displayName = element.displayName;
if (element is ConstructorElement) {
@@ -2434,7 +2481,7 @@
* @return `true` if and only if a hint code is generated on the passed node
* @see HintCode#DEPRECATED_MEMBER_USE
*/
- bool checkForDeprecatedMemberUseAtIdentifier(SimpleIdentifier identifier) {
+ bool _checkForDeprecatedMemberUseAtIdentifier(SimpleIdentifier identifier) {
if (identifier.inDeclarationContext()) {
return false;
}
@@ -2442,7 +2489,7 @@
if ((parent is ConstructorName && identical(identifier, parent.name)) || (parent is SuperConstructorInvocation && identical(identifier, parent.constructorName)) || parent is HideCombinator) {
return false;
}
- return checkForDeprecatedMemberUse(identifier.bestElement, identifier);
+ return _checkForDeprecatedMemberUse(identifier.bestElement, identifier);
}
/**
@@ -2452,7 +2499,7 @@
* @return `true` if and only if a hint code is generated on the passed node
* @see HintCode#DIVISION_OPTIMIZATION
*/
- bool checkForDivisionOptimizationHint(BinaryExpression node) {
+ bool _checkForDivisionOptimizationHint(BinaryExpression node) {
// Return if the operator is not '/'
if (node.operator.type != sc.TokenType.SLASH) {
return false;
@@ -2468,7 +2515,7 @@
}
// Report error if the (x/y) has toInt() invoked on it
if (node.parent is ParenthesizedExpression) {
- ParenthesizedExpression parenthesizedExpression = wrapParenthesizedExpression(node.parent as ParenthesizedExpression);
+ ParenthesizedExpression parenthesizedExpression = _wrapParenthesizedExpression(node.parent as ParenthesizedExpression);
if (parenthesizedExpression.parent is MethodInvocation) {
MethodInvocation methodInvocation = parenthesizedExpression.parent as MethodInvocation;
if (_TO_INT_METHOD_NAME == methodInvocation.methodName.name && methodInvocation.argumentList.arguments.isEmpty) {
@@ -2490,7 +2537,7 @@
* @return `true` if and only if a hint code is generated on the passed node
* @see HintCode#MISSING_RETURN
*/
- bool checkForMissingReturn(TypeName returnType, FunctionBody body) {
+ bool _checkForMissingReturn(TypeName returnType, FunctionBody body) {
// Check that the method or function has a return type, and a function body
if (returnType == null || body == null) {
return false;
@@ -2500,7 +2547,7 @@
return false;
}
// Check that the type is resolvable, and is not "void"
- Type2 returnTypeType = returnType.type;
+ DartType returnTypeType = returnType.type;
if (returnTypeType == null || returnTypeType.isVoid) {
return false;
}
@@ -2521,7 +2568,7 @@
* @return `true` if and only if a hint code is generated on the passed node
* @see HintCode#OVERRIDE_EQUALS_BUT_NOT_HASH_CODE
*/
- bool checkForOverrideEqualsButNotHashCode(ClassDeclaration node) {
+ bool _checkForOverrideEqualsButNotHashCode(ClassDeclaration node) {
ClassElement classElement = node.element;
if (classElement == null) {
return false;
@@ -2545,7 +2592,7 @@
* @return `true` if and only if a hint code is generated on the passed node
* @see HintCode#OVERRIDDING_PRIVATE_MEMBER
*/
- bool checkForOverridingPrivateMember(MethodDeclaration node) {
+ bool _checkForOverridingPrivateMember(MethodDeclaration node) {
// If not in an enclosing class, return false
if (_enclosingClass == null) {
return false;
@@ -2613,11 +2660,11 @@
* @return `true` if and only if a hint code is generated on the passed node
* @see HintCode#UNNECESSARY_CAST
*/
- bool checkForUnnecessaryCast(AsExpression node) {
+ bool _checkForUnnecessaryCast(AsExpression node) {
Expression expression = node.expression;
TypeName typeName = node.type;
- Type2 lhsType = expression.staticType;
- Type2 rhsType = typeName.type;
+ DartType lhsType = expression.staticType;
+ DartType rhsType = typeName.type;
// TODO(jwren) After dartbug.com/13732, revisit this, we should be able to remove the
// !(x instanceof TypeParameterType) checks.
if (lhsType != null && rhsType != null && !lhsType.isDynamic && !rhsType.isDynamic && lhsType is! TypeParameterType && rhsType is! TypeParameterType && lhsType.isSubtypeOf(rhsType)) {
@@ -2638,7 +2685,7 @@
* @return `true` if and only if a hint code is generated on the passed node
* @see HintCode#USE_OF_VOID_RESULT
*/
- bool checkForUseOfVoidResult(Expression expression) {
+ bool _checkForUseOfVoidResult(Expression expression) {
if (expression == null || expression is! MethodInvocation) {
return false;
}
@@ -2676,8 +2723,9 @@
this._errorReporter = errorReporter;
}
+ @override
Object visitIsExpression(IsExpression node) {
- checkForIsDoubleHints(node);
+ _checkForIsDoubleHints(node);
return super.visitIsExpression(node);
}
@@ -2692,9 +2740,9 @@
* @see HintCode#IS_NOT_DOUBLE
* @see HintCode#IS_NOT_INT
*/
- bool checkForIsDoubleHints(IsExpression node) {
+ bool _checkForIsDoubleHints(IsExpression node) {
TypeName typeName = node.type;
- Type2 type = typeName.type;
+ DartType type = typeName.type;
if (type != null && type.element != null) {
Element element = type.element;
String typeNameStr = element.name;
@@ -2740,26 +2788,27 @@
this._errorReporter = errorReporter;
}
+ @override
Object visitBinaryExpression(BinaryExpression node) {
sc.Token operator = node.operator;
bool isAmpAmp = identical(operator.type, sc.TokenType.AMPERSAND_AMPERSAND);
bool isBarBar = identical(operator.type, sc.TokenType.BAR_BAR);
if (isAmpAmp || isBarBar) {
Expression lhsCondition = node.leftOperand;
- if (!isDebugConstant(lhsCondition)) {
- ValidResult lhsResult = getConstantBooleanValue(lhsCondition);
+ if (!_isDebugConstant(lhsCondition)) {
+ ValidResult lhsResult = _getConstantBooleanValue(lhsCondition);
if (lhsResult != null) {
if (lhsResult.isTrue && isBarBar) {
// report error on else block: true || !e!
_errorReporter.reportErrorForNode(HintCode.DEAD_CODE, node.rightOperand, []);
// only visit the LHS:
- safelyVisit(lhsCondition);
+ _safelyVisit(lhsCondition);
return null;
} else if (lhsResult.isFalse && isAmpAmp) {
// report error on if block: false && !e!
_errorReporter.reportErrorForNode(HintCode.DEAD_CODE, node.rightOperand, []);
// only visit the LHS:
- safelyVisit(lhsCondition);
+ _safelyVisit(lhsCondition);
return null;
}
}
@@ -2774,12 +2823,13 @@
*
* @param node the block to evaluate
*/
+ @override
Object visitBlock(Block node) {
NodeList<Statement> statements = node.statements;
int size = statements.length;
for (int i = 0; i < size; i++) {
Statement currentStatement = statements[i];
- safelyVisit(currentStatement);
+ _safelyVisit(currentStatement);
if (currentStatement is ReturnStatement && i != size - 1) {
Statement nextStatement = statements[i + 1];
Statement lastStatement = statements[size - 1];
@@ -2792,21 +2842,22 @@
return null;
}
+ @override
Object visitConditionalExpression(ConditionalExpression node) {
Expression conditionExpression = node.condition;
- safelyVisit(conditionExpression);
- if (!isDebugConstant(conditionExpression)) {
- ValidResult result = getConstantBooleanValue(conditionExpression);
+ _safelyVisit(conditionExpression);
+ if (!_isDebugConstant(conditionExpression)) {
+ ValidResult result = _getConstantBooleanValue(conditionExpression);
if (result != null) {
if (result.isTrue) {
// report error on else block: true ? 1 : !2!
_errorReporter.reportErrorForNode(HintCode.DEAD_CODE, node.elseExpression, []);
- safelyVisit(node.thenExpression);
+ _safelyVisit(node.thenExpression);
return null;
} else {
// report error on if block: false ? !1! : 2
_errorReporter.reportErrorForNode(HintCode.DEAD_CODE, node.thenExpression, []);
- safelyVisit(node.elseExpression);
+ _safelyVisit(node.elseExpression);
return null;
}
}
@@ -2814,24 +2865,25 @@
return super.visitConditionalExpression(node);
}
+ @override
Object visitIfStatement(IfStatement node) {
Expression conditionExpression = node.condition;
- safelyVisit(conditionExpression);
- if (!isDebugConstant(conditionExpression)) {
- ValidResult result = getConstantBooleanValue(conditionExpression);
+ _safelyVisit(conditionExpression);
+ if (!_isDebugConstant(conditionExpression)) {
+ ValidResult result = _getConstantBooleanValue(conditionExpression);
if (result != null) {
if (result.isTrue) {
// report error on else block: if(true) {} else {!}
Statement elseStatement = node.elseStatement;
if (elseStatement != null) {
_errorReporter.reportErrorForNode(HintCode.DEAD_CODE, elseStatement, []);
- safelyVisit(node.thenStatement);
+ _safelyVisit(node.thenStatement);
return null;
}
} else {
// report error on if block: if (false) {!} else {}
_errorReporter.reportErrorForNode(HintCode.DEAD_CODE, node.thenStatement, []);
- safelyVisit(node.elseStatement);
+ _safelyVisit(node.elseStatement);
return null;
}
}
@@ -2839,12 +2891,13 @@
return super.visitIfStatement(node);
}
+ @override
Object visitTryStatement(TryStatement node) {
- safelyVisit(node.body);
- safelyVisit(node.finallyBlock);
+ _safelyVisit(node.body);
+ _safelyVisit(node.finallyBlock);
NodeList<CatchClause> catchClauses = node.catchClauses;
int numOfCatchClauses = catchClauses.length;
- List<Type2> visitedTypes = new List<Type2>();
+ List<DartType> visitedTypes = new List<DartType>();
for (int i = 0; i < numOfCatchClauses; i++) {
CatchClause catchClause = catchClauses[i];
if (catchClause.onKeyword != null) {
@@ -2852,12 +2905,12 @@
// on-catch exception type
TypeName typeName = catchClause.exceptionType;
if (typeName != null && typeName.type != null) {
- Type2 currentType = typeName.type;
+ DartType currentType = typeName.type;
if (currentType.isObject) {
// Found catch clause clause that has Object as an exception type, this is equivalent to
// having a catch clause that doesn't have an exception type, visit the block, but
// generate an error on any following catch clauses (and don't visit them).
- safelyVisit(catchClause);
+ _safelyVisit(catchClause);
if (i + 1 != numOfCatchClauses) {
// this catch clause is not the last in the try statement
CatchClause nextCatchClause = catchClauses[i + 1];
@@ -2868,7 +2921,7 @@
return null;
}
}
- for (Type2 type in visitedTypes) {
+ for (DartType type in visitedTypes) {
if (currentType.isSubtypeOf(type)) {
CatchClause lastCatchClause = catchClauses[numOfCatchClauses - 1];
int offset = catchClause.offset;
@@ -2879,11 +2932,11 @@
}
visitedTypes.add(currentType);
}
- safelyVisit(catchClause);
+ _safelyVisit(catchClause);
} else {
// Found catch clause clause that doesn't have an exception type, visit the block, but
// generate an error on any following catch clauses (and don't visit them).
- safelyVisit(catchClause);
+ _safelyVisit(catchClause);
if (i + 1 != numOfCatchClauses) {
// this catch clause is not the last in the try statement
CatchClause nextCatchClause = catchClauses[i + 1];
@@ -2898,11 +2951,12 @@
return null;
}
+ @override
Object visitWhileStatement(WhileStatement node) {
Expression conditionExpression = node.condition;
- safelyVisit(conditionExpression);
- if (!isDebugConstant(conditionExpression)) {
- ValidResult result = getConstantBooleanValue(conditionExpression);
+ _safelyVisit(conditionExpression);
+ if (!_isDebugConstant(conditionExpression)) {
+ ValidResult result = _getConstantBooleanValue(conditionExpression);
if (result != null) {
if (result.isFalse) {
// report error on if block: while (false) {!}
@@ -2911,7 +2965,7 @@
}
}
}
- safelyVisit(node.body);
+ _safelyVisit(node.body);
return null;
}
@@ -2925,7 +2979,7 @@
* if it is `false`, or `null` if the expression is not a constant boolean
* value
*/
- ValidResult getConstantBooleanValue(Expression expression) {
+ ValidResult _getConstantBooleanValue(Expression expression) {
if (expression is BooleanLiteral) {
if (expression.value) {
return new ValidResult(new DartObjectImpl(null, BoolState.from(true)));
@@ -2962,7 +3016,7 @@
* @param expression some conditional expression
* @return `true` if and only if the passed expression is resolved to a constant variable
*/
- bool isDebugConstant(Expression expression) {
+ bool _isDebugConstant(Expression expression) {
Element element = null;
if (expression is Identifier) {
Identifier identifier = expression;
@@ -2984,7 +3038,7 @@
*
* @param node the node to be visited
*/
- void safelyVisit(AstNode node) {
+ void _safelyVisit(AstNode node) {
if (node != null) {
node.accept(this);
}
@@ -3003,14 +3057,19 @@
*/
bool _enclosingBlockContainsBreak = false;
- bool visitArgumentList(ArgumentList node) => visitExpressions(node.arguments);
+ @override
+ bool visitArgumentList(ArgumentList node) => _visitExpressions(node.arguments);
+ @override
bool visitAsExpression(AsExpression node) => node.expression.accept(this);
+ @override
bool visitAssertStatement(AssertStatement node) => node.condition.accept(this);
+ @override
bool visitAssignmentExpression(AssignmentExpression node) => node.leftHandSide.accept(this) || node.rightHandSide.accept(this);
+ @override
bool visitBinaryExpression(BinaryExpression node) {
Expression lhsExpression = node.leftOperand;
sc.TokenType operatorType = node.operator.type;
@@ -3039,23 +3098,28 @@
return lhsExpression.accept(this) || node.rightOperand.accept(this);
}
- bool visitBlock(Block node) => visitStatements(node.statements);
+ @override
+ bool visitBlock(Block node) => _visitStatements(node.statements);
+ @override
bool visitBlockFunctionBody(BlockFunctionBody node) => node.block.accept(this);
+ @override
bool visitBreakStatement(BreakStatement node) {
_enclosingBlockContainsBreak = true;
return false;
}
+ @override
bool visitCascadeExpression(CascadeExpression node) {
Expression target = node.target;
if (target.accept(this)) {
return true;
}
- return visitExpressions(node.cascadeSections);
+ return _visitExpressions(node.cascadeSections);
}
+ @override
bool visitConditionalExpression(ConditionalExpression node) {
Expression conditionExpression = node.condition;
Expression thenStatement = node.thenExpression;
@@ -3071,8 +3135,10 @@
return thenStatement.accept(this) && elseStatement.accept(this);
}
+ @override
bool visitContinueStatement(ContinueStatement node) => false;
+ @override
bool visitDoStatement(DoStatement node) {
bool outerBreakValue = _enclosingBlockContainsBreak;
_enclosingBlockContainsBreak = false;
@@ -3097,10 +3163,13 @@
}
}
+ @override
bool visitEmptyStatement(EmptyStatement node) => false;
+ @override
bool visitExpressionStatement(ExpressionStatement node) => node.expression.accept(this);
+ @override
bool visitForEachStatement(ForEachStatement node) {
bool outerBreakValue = _enclosingBlockContainsBreak;
_enclosingBlockContainsBreak = false;
@@ -3111,11 +3180,12 @@
}
}
+ @override
bool visitForStatement(ForStatement node) {
bool outerBreakValue = _enclosingBlockContainsBreak;
_enclosingBlockContainsBreak = false;
try {
- if (node.variables != null && visitVariableDeclarations(node.variables.variables)) {
+ if (node.variables != null && _visitVariableDeclarations(node.variables.variables)) {
return true;
}
if (node.initialization != null && node.initialization.accept(this)) {
@@ -3125,7 +3195,7 @@
if (conditionExpression != null && conditionExpression.accept(this)) {
return true;
}
- if (visitExpressions(node.updaters)) {
+ if (_visitExpressions(node.updaters)) {
return true;
}
// TODO(jwren) Do we want to take all constant expressions into account?
@@ -3144,10 +3214,13 @@
}
}
+ @override
bool visitFunctionDeclarationStatement(FunctionDeclarationStatement node) => false;
+ @override
bool visitFunctionExpression(FunctionExpression node) => false;
+ @override
bool visitFunctionExpressionInvocation(FunctionExpressionInvocation node) {
if (node.function.accept(this)) {
return true;
@@ -3155,8 +3228,10 @@
return node.argumentList.accept(this);
}
+ @override
bool visitIdentifier(Identifier node) => false;
+ @override
bool visitIfStatement(IfStatement node) {
Expression conditionExpression = node.condition;
Statement thenStatement = node.thenStatement;
@@ -3181,6 +3256,7 @@
return thenStatement.accept(this) && elseStatement.accept(this);
}
+ @override
bool visitIndexExpression(IndexExpression node) {
Expression target = node.realTarget;
if (target != null && target.accept(this)) {
@@ -3192,16 +3268,22 @@
return false;
}
+ @override
bool visitInstanceCreationExpression(InstanceCreationExpression node) => node.argumentList.accept(this);
+ @override
bool visitIsExpression(IsExpression node) => node.expression.accept(this);
+ @override
bool visitLabel(Label node) => false;
+ @override
bool visitLabeledStatement(LabeledStatement node) => node.statement.accept(this);
+ @override
bool visitLiteral(Literal node) => false;
+ @override
bool visitMethodInvocation(MethodInvocation node) {
Expression target = node.realTarget;
if (target != null && target.accept(this)) {
@@ -3210,14 +3292,19 @@
return node.argumentList.accept(this);
}
+ @override
bool visitNamedExpression(NamedExpression node) => node.expression.accept(this);
+ @override
bool visitParenthesizedExpression(ParenthesizedExpression node) => node.expression.accept(this);
+ @override
bool visitPostfixExpression(PostfixExpression node) => false;
+ @override
bool visitPrefixExpression(PrefixExpression node) => false;
+ @override
bool visitPropertyAccess(PropertyAccess node) {
Expression target = node.realTarget;
if (target != null && target.accept(this)) {
@@ -3226,16 +3313,22 @@
return false;
}
+ @override
bool visitRethrowExpression(RethrowExpression node) => true;
+ @override
bool visitReturnStatement(ReturnStatement node) => true;
+ @override
bool visitSuperExpression(SuperExpression node) => false;
- bool visitSwitchCase(SwitchCase node) => visitStatements(node.statements);
+ @override
+ bool visitSwitchCase(SwitchCase node) => _visitStatements(node.statements);
- bool visitSwitchDefault(SwitchDefault node) => visitStatements(node.statements);
+ @override
+ bool visitSwitchDefault(SwitchDefault node) => _visitStatements(node.statements);
+ @override
bool visitSwitchStatement(SwitchStatement node) {
bool outerBreakValue = _enclosingBlockContainsBreak;
_enclosingBlockContainsBreak = false;
@@ -3264,10 +3357,13 @@
}
}
+ @override
bool visitThisExpression(ThisExpression node) => false;
+ @override
bool visitThrowExpression(ThrowExpression node) => true;
+ @override
bool visitTryStatement(TryStatement node) {
if (node.body.accept(this)) {
return true;
@@ -3279,8 +3375,10 @@
return false;
}
+ @override
bool visitTypeName(TypeName node) => false;
+ @override
bool visitVariableDeclaration(VariableDeclaration node) {
Expression initializer = node.initializer;
if (initializer != null) {
@@ -3289,8 +3387,10 @@
return false;
}
- bool visitVariableDeclarationList(VariableDeclarationList node) => visitVariableDeclarations(node.variables);
+ @override
+ bool visitVariableDeclarationList(VariableDeclarationList node) => _visitVariableDeclarations(node.variables);
+ @override
bool visitVariableDeclarationStatement(VariableDeclarationStatement node) {
NodeList<VariableDeclaration> variables = node.variables.variables;
for (int i = 0; i < variables.length; i++) {
@@ -3301,6 +3401,7 @@
return false;
}
+ @override
bool visitWhileStatement(WhileStatement node) {
bool outerBreakValue = _enclosingBlockContainsBreak;
_enclosingBlockContainsBreak = false;
@@ -3325,7 +3426,7 @@
}
}
- bool visitExpressions(NodeList<Expression> expressions) {
+ bool _visitExpressions(NodeList<Expression> expressions) {
for (int i = expressions.length - 1; i >= 0; i--) {
if (expressions[i].accept(this)) {
return true;
@@ -3334,7 +3435,7 @@
return false;
}
- bool visitStatements(NodeList<Statement> statements) {
+ bool _visitStatements(NodeList<Statement> statements) {
for (int i = statements.length - 1; i >= 0; i--) {
if (statements[i].accept(this)) {
return true;
@@ -3343,7 +3444,7 @@
return false;
}
- bool visitVariableDeclarations(NodeList<VariableDeclaration> variableDeclarations) {
+ bool _visitVariableDeclarations(NodeList<VariableDeclaration> variableDeclarations) {
for (int i = variableDeclarations.length - 1; i >= 0; i--) {
if (variableDeclarations[i].accept(this)) {
return true;
@@ -3393,10 +3494,10 @@
if (element != null) {
if (i == 0) {
_importsVerifier.inDefiningCompilationUnit = true;
- generateForCompilationUnit(_compilationUnits[i], element.source);
+ _generateForCompilationUnit(_compilationUnits[i], element.source);
_importsVerifier.inDefiningCompilationUnit = false;
} else {
- generateForCompilationUnit(_compilationUnits[i], element.source);
+ _generateForCompilationUnit(_compilationUnits[i], element.source);
}
}
}
@@ -3408,7 +3509,7 @@
}
}
- void generateForCompilationUnit(CompilationUnit unit, Source source) {
+ void _generateForCompilationUnit(CompilationUnit unit, Source source) {
ErrorReporter errorReporter = new ErrorReporter(_errorListener, source);
unit.accept(_importsVerifier);
// dead code analysis
@@ -3542,6 +3643,7 @@
}
}
+ @override
Object visitCompilationUnit(CompilationUnit node) {
if (_inDefiningCompilationUnit) {
NodeList<Directive> directives = node.directives;
@@ -3567,12 +3669,12 @@
//
// Initialize libraryMap: libraryElement -> importDirective
//
- putIntoLibraryMap(libraryElement, importDirective);
+ _putIntoLibraryMap(libraryElement, importDirective);
//
// For this new addition to the libraryMap, also recursively add any exports from the
// libraryElement
//
- addAdditionalLibrariesForExports(libraryElement, importDirective, new List<LibraryElement>());
+ _addAdditionalLibrariesForExports(libraryElement, importDirective, new List<LibraryElement>());
}
}
}
@@ -3604,21 +3706,25 @@
return super.visitCompilationUnit(node);
}
+ @override
Object visitExportDirective(ExportDirective node) {
- visitMetadata(node.metadata);
+ _visitMetadata(node.metadata);
return null;
}
+ @override
Object visitImportDirective(ImportDirective node) {
- visitMetadata(node.metadata);
+ _visitMetadata(node.metadata);
return null;
}
+ @override
Object visitLibraryDirective(LibraryDirective node) {
- visitMetadata(node.metadata);
+ _visitMetadata(node.metadata);
return null;
}
+ @override
Object visitPrefixedIdentifier(PrefixedIdentifier node) {
if (_unusedImports.isEmpty) {
return null;
@@ -3633,14 +3739,15 @@
return null;
}
// Otherwise, pass the prefixed identifier element and name onto visitIdentifier.
- return visitIdentifier(element, prefixIdentifier.name);
+ return _visitIdentifier(element, prefixIdentifier.name);
}
+ @override
Object visitSimpleIdentifier(SimpleIdentifier node) {
if (_unusedImports.isEmpty) {
return null;
}
- return visitIdentifier(node.staticElement, node.name);
+ return _visitIdentifier(node.staticElement, node.name);
}
void set inDefiningCompilationUnit(bool inDefiningCompilationUnit) {
@@ -3650,14 +3757,14 @@
/**
* Recursively add any exported library elements into the [libraryMap].
*/
- void addAdditionalLibrariesForExports(LibraryElement library, ImportDirective importDirective, List<LibraryElement> exportPath) {
+ void _addAdditionalLibrariesForExports(LibraryElement library, ImportDirective importDirective, List<LibraryElement> exportPath) {
if (exportPath.contains(library)) {
return;
}
exportPath.add(library);
for (LibraryElement exportedLibraryElt in library.exportedLibraries) {
- putIntoLibraryMap(exportedLibraryElt, importDirective);
- addAdditionalLibrariesForExports(exportedLibraryElt, importDirective, exportPath);
+ _putIntoLibraryMap(exportedLibraryElt, importDirective);
+ _addAdditionalLibrariesForExports(exportedLibraryElt, importDirective, exportPath);
}
}
@@ -3669,7 +3776,7 @@
* @param importDirective the import directive used to compute the returned namespace
* @return the computed or looked up [Namespace]
*/
- Namespace computeNamespace(ImportDirective importDirective) {
+ Namespace _computeNamespace(ImportDirective importDirective) {
Namespace namespace = _namespaceMap[importDirective];
if (namespace == null) {
// If the namespace isn't in the namespaceMap, then compute and put it in the map
@@ -3689,7 +3796,7 @@
* used to simply add the mapping between the library element an an import directive without
* needing to check to see if a list needs to be created.
*/
- void putIntoLibraryMap(LibraryElement libraryElement, ImportDirective importDirective) {
+ void _putIntoLibraryMap(LibraryElement libraryElement, ImportDirective importDirective) {
List<ImportDirective> importList = _libraryMap[libraryElement];
if (importList == null) {
importList = new List<ImportDirective>();
@@ -3698,7 +3805,7 @@
importList.add(importDirective);
}
- Object visitIdentifier(Element element, String name) {
+ Object _visitIdentifier(Element element, String name) {
if (element == null) {
return null;
}
@@ -3706,7 +3813,7 @@
if (element is MultiplyDefinedElement) {
MultiplyDefinedElement multiplyDefinedElement = element;
for (Element elt in multiplyDefinedElement.conflictingElements) {
- visitIdentifier(elt, name);
+ _visitIdentifier(elt, name);
}
return null;
} else if (element is PrefixElement) {
@@ -3739,7 +3846,7 @@
// Otherwise, for each of the imported directives, use the namespaceMap to
for (ImportDirective importDirective in importsFromSameLibrary) {
// Get the namespace for this import
- Namespace namespace = computeNamespace(importDirective);
+ Namespace namespace = _computeNamespace(importDirective);
if (namespace != null && namespace.get(name) != null) {
_unusedImports.remove(importDirective);
}
@@ -3755,10 +3862,10 @@
*
* @param annotations the list of annotations to visit
*/
- void visitMetadata(NodeList<Annotation> annotations) {
+ void _visitMetadata(NodeList<Annotation> annotations) {
for (Annotation annotation in annotations) {
Identifier name = annotation.name;
- visitIdentifier(name.staticElement, name.name);
+ _visitIdentifier(name.staticElement, name.name);
}
}
}
@@ -3789,10 +3896,11 @@
this._errorReporter = errorReporter;
}
+ @override
Object visitMethodDeclaration(MethodDeclaration node) {
ExecutableElement element = node.element;
- if (isOverride(element)) {
- if (getOverriddenMember(element) == null) {
+ if (_isOverride(element)) {
+ if (_getOverriddenMember(element) == null) {
if (element is MethodElement) {
_errorReporter.reportErrorForNode(HintCode.OVERRIDE_ON_NON_OVERRIDING_METHOD, node.name, []);
} else if (element is PropertyAccessorElement) {
@@ -3813,7 +3921,7 @@
* @param member the member that overrides the returned member
* @return the member that overrides the given member
*/
- ExecutableElement getOverriddenMember(ExecutableElement member) {
+ ExecutableElement _getOverriddenMember(ExecutableElement member) {
LibraryElement library = member.library;
if (library == null) {
return null;
@@ -3831,7 +3939,7 @@
* @param element the element being tested
* @return `true` if the element has an override annotation associated with it
*/
- bool isOverride(Element element) => element != null && element.isOverride;
+ bool _isOverride(Element element) => element != null && element.isOverride;
}
/**
@@ -3856,6 +3964,7 @@
this._errorReporter = errorReporter;
}
+ @override
Object visitImportDirective(ImportDirective directive) {
return null;
}
@@ -3870,9 +3979,9 @@
* @return `true` if and only if an error code is generated on the passed node
* @see PubSuggestionCode.FILE_IMPORT_INSIDE_LIB_REFERENCES_FILE_OUTSIDE
*/
- bool checkForFileImportInsideLibReferencesFileOutside(StringLiteral uriLiteral, String path) {
- Source source = getSource(uriLiteral);
- String fullName = getSourceFullName(source);
+ bool _checkForFileImportInsideLibReferencesFileOutside(StringLiteral uriLiteral, String path) {
+ Source source = _getSource(uriLiteral);
+ String fullName = _getSourceFullName(source);
if (fullName != null) {
int pathIndex = 0;
int fullNameIndex = fullName.length;
@@ -3907,15 +4016,15 @@
* @return `true` if and only if an error code is generated on the passed node
* @see PubSuggestionCode.FILE_IMPORT_OUTSIDE_LIB_REFERENCES_FILE_INSIDE
*/
- bool checkForFileImportOutsideLibReferencesFileInside(StringLiteral uriLiteral, String path) {
+ bool _checkForFileImportOutsideLibReferencesFileInside(StringLiteral uriLiteral, String path) {
if (StringUtilities.startsWith4(path, 0, 0x6C, 0x69, 0x62, 0x2F)) {
- if (checkForFileImportOutsideLibReferencesFileInsideAtIndex(uriLiteral, path, 0)) {
+ if (_checkForFileImportOutsideLibReferencesFileInsideAtIndex(uriLiteral, path, 0)) {
return true;
}
}
int pathIndex = StringUtilities.indexOf5(path, 0, 0x2F, 0x6C, 0x69, 0x62, 0x2F);
while (pathIndex != -1) {
- if (checkForFileImportOutsideLibReferencesFileInsideAtIndex(uriLiteral, path, pathIndex + 1)) {
+ if (_checkForFileImportOutsideLibReferencesFileInsideAtIndex(uriLiteral, path, pathIndex + 1)) {
return true;
}
pathIndex = StringUtilities.indexOf5(path, pathIndex + 4, 0x2F, 0x6C, 0x69, 0x62, 0x2F);
@@ -3923,14 +4032,14 @@
return false;
}
- bool checkForFileImportOutsideLibReferencesFileInsideAtIndex(StringLiteral uriLiteral, String path, int pathIndex) {
- Source source = getSource(uriLiteral);
+ bool _checkForFileImportOutsideLibReferencesFileInsideAtIndex(StringLiteral uriLiteral, String path, int pathIndex) {
+ Source source = _getSource(uriLiteral);
String relativePubspecPath = path.substring(0, pathIndex) + _PUBSPEC_YAML;
Source pubspecSource = _context.sourceFactory.resolveUri(source, relativePubspecPath);
if (!_context.exists(pubspecSource)) {
return false;
}
- String fullName = getSourceFullName(source);
+ String fullName = _getSourceFullName(source);
if (fullName != null) {
if (StringUtilities.indexOf5(fullName, 0, 0x2F, 0x6C, 0x69, 0x62, 0x2F) < 0) {
// Files outside the lib directory hierarchy should not reference files inside
@@ -3950,7 +4059,7 @@
* @return `true` if and only if an error code is generated on the passed node
* @see PubSuggestionCode.PACKAGE_IMPORT_CONTAINS_DOT_DOT
*/
- bool checkForPackageImportContainsDotDot(StringLiteral uriLiteral, String path) {
+ bool _checkForPackageImportContainsDotDot(StringLiteral uriLiteral, String path) {
if (StringUtilities.startsWith3(path, 0, 0x2E, 0x2E, 0x2F) || StringUtilities.indexOf4(path, 0, 0x2F, 0x2E, 0x2E, 0x2F) >= 0) {
// Package import should not to contain ".."
_errorReporter.reportErrorForNode(PubSuggestionCode.PACKAGE_IMPORT_CONTAINS_DOT_DOT, uriLiteral, []);
@@ -3965,7 +4074,7 @@
* @param node the node (not `null`)
* @return the source or `null` if it could not be determined
*/
- Source getSource(AstNode node) {
+ Source _getSource(AstNode node) {
Source source = null;
CompilationUnit unit = node.getAncestor((node) => node is CompilationUnit);
if (unit != null) {
@@ -3984,7 +4093,7 @@
* @param source the source
* @return the full name or `null` if it could not be determined
*/
- String getSourceFullName(Source source) {
+ String _getSourceFullName(Source source) {
if (source != null) {
String fullName = source.fullName;
if (fullName != null) {
@@ -4020,7 +4129,7 @@
* @param unit the compilation unit containing the to-do comments
*/
void findIn(CompilationUnit unit) {
- gatherTodoComments(unit.beginToken);
+ _gatherTodoComments(unit.beginToken);
}
/**
@@ -4029,12 +4138,12 @@
*
* @param token the head of the list of tokens being searched
*/
- void gatherTodoComments(sc.Token token) {
+ void _gatherTodoComments(sc.Token token) {
while (token != null && token.type != sc.TokenType.EOF) {
sc.Token commentToken = token.precedingComments;
while (commentToken != null) {
if (identical(commentToken.type, sc.TokenType.SINGLE_LINE_COMMENT) || identical(commentToken.type, sc.TokenType.MULTI_LINE_COMMENT)) {
- scrapeTodoComment(commentToken);
+ _scrapeTodoComment(commentToken);
}
commentToken = commentToken.next;
}
@@ -4047,7 +4156,7 @@
*
* @param commentToken the comment token to analyze
*/
- void scrapeTodoComment(sc.Token commentToken) {
+ void _scrapeTodoComment(sc.Token commentToken) {
JavaPatternMatcher matcher = new JavaPatternMatcher(TodoCode.TODO_REGEX, commentToken.lexeme);
if (matcher.find()) {
int offset = commentToken.offset + matcher.start() + matcher.group(1).length;
@@ -4114,8 +4223,8 @@
* element model
*/
bool matches(AstNode node, Element element) {
- captureEnclosingElements(element);
- gatherElements(element);
+ _captureEnclosingElements(element);
+ _gatherElements(element);
try {
node.accept(this);
} on DeclarationMatcher_DeclarationMismatchException catch (exception) {
@@ -4124,28 +4233,30 @@
return _unmatchedElements.isEmpty;
}
+ @override
Object visitCatchClause(CatchClause node) {
SimpleIdentifier exceptionParameter = node.exceptionParameter;
if (exceptionParameter != null) {
List<LocalVariableElement> localVariables = _enclosingExecutable.localVariables;
- LocalVariableElement exceptionElement = findIdentifier(localVariables, exceptionParameter);
+ LocalVariableElement exceptionElement = _findIdentifier(localVariables, exceptionParameter);
processElement(exceptionElement);
SimpleIdentifier stackTraceParameter = node.stackTraceParameter;
if (stackTraceParameter != null) {
- LocalVariableElement stackTraceElement = findIdentifier(localVariables, stackTraceParameter);
+ LocalVariableElement stackTraceElement = _findIdentifier(localVariables, stackTraceParameter);
processElement(stackTraceElement);
}
}
return super.visitCatchClause(node);
}
+ @override
Object visitClassDeclaration(ClassDeclaration node) {
ClassElement outerClass = _enclosingClass;
try {
SimpleIdentifier className = node.name;
- _enclosingClass = findIdentifier(_enclosingUnit.types, className);
+ _enclosingClass = _findIdentifier(_enclosingUnit.types, className);
processElement(_enclosingClass);
- if (!hasConstructor(node)) {
+ if (!_hasConstructor(node)) {
ConstructorElement constructor = _enclosingClass.unnamedConstructor;
if (constructor.isSynthetic) {
processElement(constructor);
@@ -4157,11 +4268,12 @@
}
}
+ @override
Object visitClassTypeAlias(ClassTypeAlias node) {
ClassElement outerClass = _enclosingClass;
try {
SimpleIdentifier className = node.name;
- _enclosingClass = findIdentifier(_enclosingUnit.types, className);
+ _enclosingClass = _findIdentifier(_enclosingUnit.types, className);
processElement(_enclosingClass);
return super.visitClassTypeAlias(node);
} finally {
@@ -4169,11 +4281,13 @@
}
}
+ @override
Object visitCompilationUnit(CompilationUnit node) {
processElement(_enclosingUnit);
return super.visitCompilationUnit(node);
}
+ @override
Object visitConstructorDeclaration(ConstructorDeclaration node) {
ExecutableElement outerExecutable = _enclosingExecutable;
try {
@@ -4190,16 +4304,18 @@
}
}
+ @override
Object visitDeclaredIdentifier(DeclaredIdentifier node) {
SimpleIdentifier variableName = node.identifier;
- LocalVariableElement element = findIdentifier(_enclosingExecutable.localVariables, variableName);
+ LocalVariableElement element = _findIdentifier(_enclosingExecutable.localVariables, variableName);
processElement(element);
return super.visitDeclaredIdentifier(node);
}
+ @override
Object visitDefaultFormalParameter(DefaultFormalParameter node) {
SimpleIdentifier parameterName = node.parameter.identifier;
- ParameterElement element = getElementForParameter(node, parameterName);
+ ParameterElement element = _getElementForParameter(node, parameterName);
Expression defaultValue = node.defaultValue;
if (defaultValue != null) {
ExecutableElement outerExecutable = _enclosingExecutable;
@@ -4224,20 +4340,22 @@
}
}
+ @override
Object visitExportDirective(ExportDirective node) {
- String uri = getStringValue(node.uri);
+ String uri = _getStringValue(node.uri);
if (uri != null) {
LibraryElement library = _enclosingUnit.library;
- ExportElement exportElement = findExport(library.exports, _enclosingUnit.context.sourceFactory.resolveUri(_enclosingUnit.source, uri));
+ ExportElement exportElement = _findExport(library.exports, _enclosingUnit.context.sourceFactory.resolveUri(_enclosingUnit.source, uri));
processElement(exportElement);
}
return super.visitExportDirective(node);
}
+ @override
Object visitFieldFormalParameter(FieldFormalParameter node) {
if (node.parent is! DefaultFormalParameter) {
SimpleIdentifier parameterName = node.identifier;
- ParameterElement element = getElementForParameter(node, parameterName);
+ ParameterElement element = _getElementForParameter(node, parameterName);
ParameterElement outerParameter = _enclosingParameter;
try {
_enclosingParameter = element;
@@ -4251,6 +4369,7 @@
}
}
+ @override
Object visitFunctionDeclaration(FunctionDeclaration node) {
ExecutableElement outerExecutable = _enclosingExecutable;
try {
@@ -4258,12 +4377,12 @@
sc.Token property = node.propertyKeyword;
if (property == null) {
if (_enclosingExecutable != null) {
- _enclosingExecutable = findIdentifier(_enclosingExecutable.functions, functionName);
+ _enclosingExecutable = _findIdentifier(_enclosingExecutable.functions, functionName);
} else {
- _enclosingExecutable = findIdentifier(_enclosingUnit.functions, functionName);
+ _enclosingExecutable = _findIdentifier(_enclosingUnit.functions, functionName);
}
} else {
- PropertyAccessorElement accessor = findIdentifier(_enclosingUnit.accessors, functionName);
+ PropertyAccessorElement accessor = _findIdentifier(_enclosingUnit.accessors, functionName);
if (identical((property as sc.KeywordToken).keyword, sc.Keyword.SET)) {
accessor = accessor.variable.setter;
}
@@ -4276,9 +4395,10 @@
}
}
+ @override
Object visitFunctionExpression(FunctionExpression node) {
if (node.parent is! FunctionDeclaration) {
- FunctionElement element = findAtOffset(_enclosingExecutable.functions, node.beginToken.offset);
+ FunctionElement element = _findAtOffset(_enclosingExecutable.functions, node.beginToken.offset);
processElement(element);
}
ExecutableElement outerExecutable = _enclosingExecutable;
@@ -4291,11 +4411,12 @@
}
}
+ @override
Object visitFunctionTypeAlias(FunctionTypeAlias node) {
FunctionTypeAliasElement outerAlias = _enclosingAlias;
try {
SimpleIdentifier aliasName = node.name;
- _enclosingAlias = findIdentifier(_enclosingUnit.functionTypeAliases, aliasName);
+ _enclosingAlias = _findIdentifier(_enclosingUnit.functionTypeAliases, aliasName);
processElement(_enclosingAlias);
return super.visitFunctionTypeAlias(node);
} finally {
@@ -4303,10 +4424,11 @@
}
}
+ @override
Object visitFunctionTypedFormalParameter(FunctionTypedFormalParameter node) {
if (node.parent is! DefaultFormalParameter) {
SimpleIdentifier parameterName = node.identifier;
- ParameterElement element = getElementForParameter(node, parameterName);
+ ParameterElement element = _getElementForParameter(node, parameterName);
ParameterElement outerParameter = _enclosingParameter;
try {
_enclosingParameter = element;
@@ -4320,25 +4442,28 @@
}
}
+ @override
Object visitImportDirective(ImportDirective node) {
- String uri = getStringValue(node.uri);
+ String uri = _getStringValue(node.uri);
if (uri != null) {
LibraryElement library = _enclosingUnit.library;
- ImportElement importElement = findImport(library.imports, _enclosingUnit.context.sourceFactory.resolveUri(_enclosingUnit.source, uri), node.prefix);
+ ImportElement importElement = _findImport(library.imports, _enclosingUnit.context.sourceFactory.resolveUri(_enclosingUnit.source, uri), node.prefix);
processElement(importElement);
}
return super.visitImportDirective(node);
}
+ @override
Object visitLabeledStatement(LabeledStatement node) {
for (Label label in node.labels) {
SimpleIdentifier labelName = label.label;
- LabelElement element = findIdentifier(_enclosingExecutable.labels, labelName);
+ LabelElement element = _findIdentifier(_enclosingExecutable.labels, labelName);
processElement(element);
}
return super.visitLabeledStatement(node);
}
+ @override
Object visitMethodDeclaration(MethodDeclaration node) {
ExecutableElement outerExecutable = _enclosingExecutable;
try {
@@ -4349,10 +4474,10 @@
nameOfMethod = "unary-";
}
if (property == null) {
- _enclosingExecutable = findWithNameAndOffset(_enclosingClass.methods, nameOfMethod, methodName.offset);
+ _enclosingExecutable = _findWithNameAndOffset(_enclosingClass.methods, nameOfMethod, methodName.offset);
methodName.staticElement = _enclosingExecutable;
} else {
- PropertyAccessorElement accessor = findIdentifier(_enclosingClass.accessors, methodName);
+ PropertyAccessorElement accessor = _findIdentifier(_enclosingClass.accessors, methodName);
if (identical((property as sc.KeywordToken).keyword, sc.Keyword.SET)) {
accessor = accessor.variable.setter;
methodName.staticElement = accessor;
@@ -4366,20 +4491,22 @@
}
}
+ @override
Object visitPartDirective(PartDirective node) {
- String uri = getStringValue(node.uri);
+ String uri = _getStringValue(node.uri);
if (uri != null) {
Source partSource = _enclosingUnit.context.sourceFactory.resolveUri(_enclosingUnit.source, uri);
- CompilationUnitElement element = findPart(_enclosingUnit.library.parts, partSource);
+ CompilationUnitElement element = _findPart(_enclosingUnit.library.parts, partSource);
processElement(element);
}
return super.visitPartDirective(node);
}
+ @override
Object visitSimpleFormalParameter(SimpleFormalParameter node) {
if (node.parent is! DefaultFormalParameter) {
SimpleIdentifier parameterName = node.identifier;
- ParameterElement element = getElementForParameter(node, parameterName);
+ ParameterElement element = _getElementForParameter(node, parameterName);
ParameterElement outerParameter = _enclosingParameter;
try {
_enclosingParameter = element;
@@ -4393,47 +4520,51 @@
return super.visitSimpleFormalParameter(node);
}
+ @override
Object visitSwitchCase(SwitchCase node) {
for (Label label in node.labels) {
SimpleIdentifier labelName = label.label;
- LabelElement element = findIdentifier(_enclosingExecutable.labels, labelName);
+ LabelElement element = _findIdentifier(_enclosingExecutable.labels, labelName);
processElement(element);
}
return super.visitSwitchCase(node);
}
+ @override
Object visitSwitchDefault(SwitchDefault node) {
for (Label label in node.labels) {
SimpleIdentifier labelName = label.label;
- LabelElement element = findIdentifier(_enclosingExecutable.labels, labelName);
+ LabelElement element = _findIdentifier(_enclosingExecutable.labels, labelName);
processElement(element);
}
return super.visitSwitchDefault(node);
}
+ @override
Object visitTypeParameter(TypeParameter node) {
SimpleIdentifier parameterName = node.name;
TypeParameterElement element = null;
if (_enclosingClass != null) {
- element = findIdentifier(_enclosingClass.typeParameters, parameterName);
+ element = _findIdentifier(_enclosingClass.typeParameters, parameterName);
} else if (_enclosingAlias != null) {
- element = findIdentifier(_enclosingAlias.typeParameters, parameterName);
+ element = _findIdentifier(_enclosingAlias.typeParameters, parameterName);
}
processElement(element);
return super.visitTypeParameter(node);
}
+ @override
Object visitVariableDeclaration(VariableDeclaration node) {
VariableElement element = null;
SimpleIdentifier variableName = node.name;
if (_enclosingExecutable != null) {
- element = findIdentifier(_enclosingExecutable.localVariables, variableName);
+ element = _findIdentifier(_enclosingExecutable.localVariables, variableName);
}
if (element == null && _enclosingClass != null) {
- element = findIdentifier(_enclosingClass.fields, variableName);
+ element = _findIdentifier(_enclosingClass.fields, variableName);
}
if (element == null && _enclosingUnit != null) {
- element = findIdentifier(_enclosingUnit.topLevelVariables, variableName);
+ element = _findIdentifier(_enclosingUnit.topLevelVariables, variableName);
}
Expression initializer = node.initializer;
if (initializer != null) {
@@ -4469,7 +4600,7 @@
*
* @param element the element corresponding to the AST structure to be compared
*/
- void captureEnclosingElements(Element element) {
+ void _captureEnclosingElements(Element element) {
Element parent = element is CompilationUnitElement ? element : element.enclosingElement;
while (parent != null) {
if (parent is CompilationUnitElement) {
@@ -4503,7 +4634,7 @@
* @param offset the offset of the name of the element to be returned
* @return the element at the given offset
*/
- Element findAtOffset(List<Element> elements, int offset) => findWithNameAndOffset(elements, "", offset);
+ Element _findAtOffset(List<Element> elements, int offset) => _findWithNameAndOffset(elements, "", offset);
/**
* Return the export element from the given array whose library has the given source, or
@@ -4514,7 +4645,7 @@
* for
* @return the export element whose library has the given source
*/
- ExportElement findExport(List<ExportElement> exports, Source source) {
+ ExportElement _findExport(List<ExportElement> exports, Source source) {
for (ExportElement export in exports) {
if (export.exportedLibrary.source == source) {
return export;
@@ -4531,7 +4662,7 @@
* @param identifier the name node in the declaration of the element to be returned
* @return the element created for the declaration with the given name
*/
- Element findIdentifier(List<Element> elements, SimpleIdentifier identifier) => findWithNameAndOffset(elements, identifier.name, identifier.offset);
+ Element _findIdentifier(List<Element> elements, SimpleIdentifier identifier) => _findWithNameAndOffset(elements, identifier.name, identifier.offset);
/**
* Return the import element from the given array whose library has the given source and that has
@@ -4543,7 +4674,7 @@
* @param prefix the prefix with which the library was imported
* @return the import element whose library has the given source and prefix
*/
- ImportElement findImport(List<ImportElement> imports, Source source, SimpleIdentifier prefix) {
+ ImportElement _findImport(List<ImportElement> imports, Source source, SimpleIdentifier prefix) {
for (ImportElement element in imports) {
if (element.importedLibrary.source == source) {
PrefixElement prefixElement = element.prefix;
@@ -4569,7 +4700,7 @@
* @param partSource the source for the part whose element is to be returned
* @return the element for the part with the given source
*/
- CompilationUnitElement findPart(List<CompilationUnitElement> parts, Source partSource) {
+ CompilationUnitElement _findPart(List<CompilationUnitElement> parts, Source partSource) {
for (CompilationUnitElement part in parts) {
if (part.source == partSource) {
return part;
@@ -4587,7 +4718,7 @@
* @param offset the offset of the name of the element to be returned
* @return the element with the given name and offset
*/
- Element findWithNameAndOffset(List<Element> elements, String name, int offset) {
+ Element _findWithNameAndOffset(List<Element> elements, String name, int offset) {
for (Element element in elements) {
if (element.displayName == name && element.nameOffset == offset) {
return element;
@@ -4596,7 +4727,7 @@
return null;
}
- void gatherElements(Element element) {
+ void _gatherElements(Element element) {
element.accept(new GeneralizingElementVisitor_DeclarationMatcher_gatherElements(this));
}
@@ -4607,7 +4738,7 @@
* @param parameterName the name of the parameter being searched for
* @return the element representing the parameter with that name
*/
- ParameterElement getElementForParameter(FormalParameter node, SimpleIdentifier parameterName) {
+ ParameterElement _getElementForParameter(FormalParameter node, SimpleIdentifier parameterName) {
List<ParameterElement> parameters = null;
if (_enclosingParameter != null) {
parameters = _enclosingParameter.parameters;
@@ -4618,7 +4749,7 @@
if (parameters == null && _enclosingAlias != null) {
parameters = _enclosingAlias.parameters;
}
- return parameters == null ? null : findIdentifier(parameters, parameterName);
+ return parameters == null ? null : _findIdentifier(parameters, parameterName);
}
/**
@@ -4628,7 +4759,7 @@
* @param literal the string literal whose value is to be returned
* @return the value of the given string literal
*/
- String getStringValue(StringLiteral literal) {
+ String _getStringValue(StringLiteral literal) {
if (literal is StringInterpolation) {
return null;
}
@@ -4641,7 +4772,7 @@
* @param node the class being tested
* @return `true` if the class defines at least one constructor
*/
- bool hasConstructor(ClassDeclaration node) {
+ bool _hasConstructor(ClassDeclaration node) {
for (ClassMember member in node.members) {
if (member is ConstructorDeclaration) {
return true;
@@ -4664,6 +4795,7 @@
GeneralizingElementVisitor_DeclarationMatcher_gatherElements(this.DeclarationMatcher_this) : super();
+ @override
Object visitElement(Element element) {
DeclarationMatcher_this._allElements.add(element);
DeclarationMatcher_this._unmatchedElements.add(element);
@@ -4718,41 +4850,45 @@
unit.accept(this);
}
+ @override
Object visitCatchClause(CatchClause node) {
SimpleIdentifier exceptionParameter = node.exceptionParameter;
if (exceptionParameter != null) {
List<LocalVariableElement> localVariables = _enclosingExecutable.localVariables;
- findIdentifier(localVariables, exceptionParameter);
+ _findIdentifier(localVariables, exceptionParameter);
SimpleIdentifier stackTraceParameter = node.stackTraceParameter;
if (stackTraceParameter != null) {
- findIdentifier(localVariables, stackTraceParameter);
+ _findIdentifier(localVariables, stackTraceParameter);
}
}
return super.visitCatchClause(node);
}
+ @override
Object visitClassDeclaration(ClassDeclaration node) {
ClassElement outerClass = _enclosingClass;
try {
SimpleIdentifier className = node.name;
- _enclosingClass = findIdentifier(_enclosingUnit.types, className);
+ _enclosingClass = _findIdentifier(_enclosingUnit.types, className);
return super.visitClassDeclaration(node);
} finally {
_enclosingClass = outerClass;
}
}
+ @override
Object visitClassTypeAlias(ClassTypeAlias node) {
ClassElement outerClass = _enclosingClass;
try {
SimpleIdentifier className = node.name;
- _enclosingClass = findIdentifier(_enclosingUnit.types, className);
+ _enclosingClass = _findIdentifier(_enclosingUnit.types, className);
return super.visitClassTypeAlias(node);
} finally {
_enclosingClass = outerClass;
}
}
+ @override
Object visitConstructorDeclaration(ConstructorDeclaration node) {
ExecutableElement outerExecutable = _enclosingExecutable;
try {
@@ -4770,15 +4906,17 @@
}
}
+ @override
Object visitDeclaredIdentifier(DeclaredIdentifier node) {
SimpleIdentifier variableName = node.identifier;
- findIdentifier(_enclosingExecutable.localVariables, variableName);
+ _findIdentifier(_enclosingExecutable.localVariables, variableName);
return super.visitDeclaredIdentifier(node);
}
+ @override
Object visitDefaultFormalParameter(DefaultFormalParameter node) {
SimpleIdentifier parameterName = node.parameter.identifier;
- ParameterElement element = getElementForParameter(node, parameterName);
+ ParameterElement element = _getElementForParameter(node, parameterName);
Expression defaultValue = node.defaultValue;
if (defaultValue != null) {
ExecutableElement outerExecutable = _enclosingExecutable;
@@ -4801,20 +4939,22 @@
}
}
+ @override
Object visitExportDirective(ExportDirective node) {
- String uri = getStringValue(node.uri);
+ String uri = _getStringValue(node.uri);
if (uri != null) {
LibraryElement library = _enclosingUnit.library;
- ExportElement exportElement = findExport(library.exports, _enclosingUnit.context.sourceFactory.resolveUri(_enclosingUnit.source, uri));
+ ExportElement exportElement = _findExport(library.exports, _enclosingUnit.context.sourceFactory.resolveUri(_enclosingUnit.source, uri));
node.element = exportElement;
}
return super.visitExportDirective(node);
}
+ @override
Object visitFieldFormalParameter(FieldFormalParameter node) {
if (node.parent is! DefaultFormalParameter) {
SimpleIdentifier parameterName = node.identifier;
- ParameterElement element = getElementForParameter(node, parameterName);
+ ParameterElement element = _getElementForParameter(node, parameterName);
ParameterElement outerParameter = _enclosingParameter;
try {
_enclosingParameter = element;
@@ -4827,6 +4967,7 @@
}
}
+ @override
Object visitFunctionDeclaration(FunctionDeclaration node) {
ExecutableElement outerExecutable = _enclosingExecutable;
try {
@@ -4834,12 +4975,12 @@
sc.Token property = node.propertyKeyword;
if (property == null) {
if (_enclosingExecutable != null) {
- _enclosingExecutable = findIdentifier(_enclosingExecutable.functions, functionName);
+ _enclosingExecutable = _findIdentifier(_enclosingExecutable.functions, functionName);
} else {
- _enclosingExecutable = findIdentifier(_enclosingUnit.functions, functionName);
+ _enclosingExecutable = _findIdentifier(_enclosingUnit.functions, functionName);
}
} else {
- PropertyAccessorElement accessor = findIdentifier(_enclosingUnit.accessors, functionName);
+ PropertyAccessorElement accessor = _findIdentifier(_enclosingUnit.accessors, functionName);
if (identical((property as sc.KeywordToken).keyword, sc.Keyword.SET)) {
accessor = accessor.variable.setter;
functionName.staticElement = accessor;
@@ -4853,9 +4994,10 @@
}
}
+ @override
Object visitFunctionExpression(FunctionExpression node) {
if (node.parent is! FunctionDeclaration) {
- FunctionElement element = findAtOffset(_enclosingExecutable.functions, node.beginToken.offset);
+ FunctionElement element = _findAtOffset(_enclosingExecutable.functions, node.beginToken.offset);
node.element = element;
}
ExecutableElement outerExecutable = _enclosingExecutable;
@@ -4867,21 +5009,23 @@
}
}
+ @override
Object visitFunctionTypeAlias(FunctionTypeAlias node) {
FunctionTypeAliasElement outerAlias = _enclosingAlias;
try {
SimpleIdentifier aliasName = node.name;
- _enclosingAlias = findIdentifier(_enclosingUnit.functionTypeAliases, aliasName);
+ _enclosingAlias = _findIdentifier(_enclosingUnit.functionTypeAliases, aliasName);
return super.visitFunctionTypeAlias(node);
} finally {
_enclosingAlias = outerAlias;
}
}
+ @override
Object visitFunctionTypedFormalParameter(FunctionTypedFormalParameter node) {
if (node.parent is! DefaultFormalParameter) {
SimpleIdentifier parameterName = node.identifier;
- ParameterElement element = getElementForParameter(node, parameterName);
+ ParameterElement element = _getElementForParameter(node, parameterName);
ParameterElement outerParameter = _enclosingParameter;
try {
_enclosingParameter = element;
@@ -4894,29 +5038,33 @@
}
}
+ @override
Object visitImportDirective(ImportDirective node) {
- String uri = getStringValue(node.uri);
+ String uri = _getStringValue(node.uri);
if (uri != null) {
LibraryElement library = _enclosingUnit.library;
- ImportElement importElement = findImport(library.imports, _enclosingUnit.context.sourceFactory.resolveUri(_enclosingUnit.source, uri), node.prefix);
+ ImportElement importElement = _findImport(library.imports, _enclosingUnit.context.sourceFactory.resolveUri(_enclosingUnit.source, uri), node.prefix);
node.element = importElement;
}
return super.visitImportDirective(node);
}
+ @override
Object visitLabeledStatement(LabeledStatement node) {
for (Label label in node.labels) {
SimpleIdentifier labelName = label.label;
- findIdentifier(_enclosingExecutable.labels, labelName);
+ _findIdentifier(_enclosingExecutable.labels, labelName);
}
return super.visitLabeledStatement(node);
}
+ @override
Object visitLibraryDirective(LibraryDirective node) {
node.element = _enclosingUnit.library;
return super.visitLibraryDirective(node);
}
+ @override
Object visitMethodDeclaration(MethodDeclaration node) {
ExecutableElement outerExecutable = _enclosingExecutable;
try {
@@ -4927,10 +5075,10 @@
nameOfMethod = "unary-";
}
if (property == null) {
- _enclosingExecutable = findWithNameAndOffset(_enclosingClass.methods, nameOfMethod, methodName.offset);
+ _enclosingExecutable = _findWithNameAndOffset(_enclosingClass.methods, nameOfMethod, methodName.offset);
methodName.staticElement = _enclosingExecutable;
} else {
- PropertyAccessorElement accessor = findIdentifier(_enclosingClass.accessors, methodName);
+ PropertyAccessorElement accessor = _findIdentifier(_enclosingClass.accessors, methodName);
if (identical((property as sc.KeywordToken).keyword, sc.Keyword.SET)) {
accessor = accessor.variable.setter;
methodName.staticElement = accessor;
@@ -4943,24 +5091,27 @@
}
}
+ @override
Object visitPartDirective(PartDirective node) {
- String uri = getStringValue(node.uri);
+ String uri = _getStringValue(node.uri);
if (uri != null) {
Source partSource = _enclosingUnit.context.sourceFactory.resolveUri(_enclosingUnit.source, uri);
- node.element = findPart(_enclosingUnit.library.parts, partSource);
+ node.element = _findPart(_enclosingUnit.library.parts, partSource);
}
return super.visitPartDirective(node);
}
+ @override
Object visitPartOfDirective(PartOfDirective node) {
node.element = _enclosingUnit.library;
return super.visitPartOfDirective(node);
}
+ @override
Object visitSimpleFormalParameter(SimpleFormalParameter node) {
if (node.parent is! DefaultFormalParameter) {
SimpleIdentifier parameterName = node.identifier;
- ParameterElement element = getElementForParameter(node, parameterName);
+ ParameterElement element = _getElementForParameter(node, parameterName);
ParameterElement outerParameter = _enclosingParameter;
try {
_enclosingParameter = element;
@@ -4973,43 +5124,47 @@
return super.visitSimpleFormalParameter(node);
}
+ @override
Object visitSwitchCase(SwitchCase node) {
for (Label label in node.labels) {
SimpleIdentifier labelName = label.label;
- findIdentifier(_enclosingExecutable.labels, labelName);
+ _findIdentifier(_enclosingExecutable.labels, labelName);
}
return super.visitSwitchCase(node);
}
+ @override
Object visitSwitchDefault(SwitchDefault node) {
for (Label label in node.labels) {
SimpleIdentifier labelName = label.label;
- findIdentifier(_enclosingExecutable.labels, labelName);
+ _findIdentifier(_enclosingExecutable.labels, labelName);
}
return super.visitSwitchDefault(node);
}
+ @override
Object visitTypeParameter(TypeParameter node) {
SimpleIdentifier parameterName = node.name;
if (_enclosingClass != null) {
- findIdentifier(_enclosingClass.typeParameters, parameterName);
+ _findIdentifier(_enclosingClass.typeParameters, parameterName);
} else if (_enclosingAlias != null) {
- findIdentifier(_enclosingAlias.typeParameters, parameterName);
+ _findIdentifier(_enclosingAlias.typeParameters, parameterName);
}
return super.visitTypeParameter(node);
}
+ @override
Object visitVariableDeclaration(VariableDeclaration node) {
VariableElement element = null;
SimpleIdentifier variableName = node.name;
if (_enclosingExecutable != null) {
- element = findIdentifier(_enclosingExecutable.localVariables, variableName);
+ element = _findIdentifier(_enclosingExecutable.localVariables, variableName);
}
if (element == null && _enclosingClass != null) {
- element = findIdentifier(_enclosingClass.fields, variableName);
+ element = _findIdentifier(_enclosingClass.fields, variableName);
}
if (element == null && _enclosingUnit != null) {
- element = findIdentifier(_enclosingUnit.topLevelVariables, variableName);
+ element = _findIdentifier(_enclosingUnit.topLevelVariables, variableName);
}
Expression initializer = node.initializer;
if (initializer != null) {
@@ -5035,7 +5190,7 @@
* @param offset the offset of the name of the element to be returned
* @return the element at the given offset
*/
- Element findAtOffset(List<Element> elements, int offset) => findWithNameAndOffset(elements, "", offset);
+ Element _findAtOffset(List<Element> elements, int offset) => _findWithNameAndOffset(elements, "", offset);
/**
* Return the export element from the given array whose library has the given source, or
@@ -5046,7 +5201,7 @@
* for
* @return the export element whose library has the given source
*/
- ExportElement findExport(List<ExportElement> exports, Source source) {
+ ExportElement _findExport(List<ExportElement> exports, Source source) {
for (ExportElement export in exports) {
if (export.exportedLibrary.source == source) {
return export;
@@ -5063,8 +5218,8 @@
* @param identifier the name node in the declaration of the element to be returned
* @return the element created for the declaration with the given name
*/
- Element findIdentifier(List<Element> elements, SimpleIdentifier identifier) {
- Element element = findWithNameAndOffset(elements, identifier.name, identifier.offset);
+ Element _findIdentifier(List<Element> elements, SimpleIdentifier identifier) {
+ Element element = _findWithNameAndOffset(elements, identifier.name, identifier.offset);
identifier.staticElement = element;
return element;
}
@@ -5079,7 +5234,7 @@
* @param prefix the prefix with which the library was imported
* @return the import element whose library has the given source and prefix
*/
- ImportElement findImport(List<ImportElement> imports, Source source, SimpleIdentifier prefix) {
+ ImportElement _findImport(List<ImportElement> imports, Source source, SimpleIdentifier prefix) {
for (ImportElement element in imports) {
if (element.importedLibrary.source == source) {
PrefixElement prefixElement = element.prefix;
@@ -5105,7 +5260,7 @@
* @param partSource the source for the part whose element is to be returned
* @return the element for the part with the given source
*/
- CompilationUnitElement findPart(List<CompilationUnitElement> parts, Source partSource) {
+ CompilationUnitElement _findPart(List<CompilationUnitElement> parts, Source partSource) {
for (CompilationUnitElement part in parts) {
if (part.source == partSource) {
return part;
@@ -5123,7 +5278,7 @@
* @param offset the offset of the name of the element to be returned
* @return the element with the given name and offset
*/
- Element findWithNameAndOffset(List<Element> elements, String name, int offset) {
+ Element _findWithNameAndOffset(List<Element> elements, String name, int offset) {
for (Element element in elements) {
if (element.displayName == name && element.nameOffset == offset) {
return element;
@@ -5139,7 +5294,7 @@
* @param parameterName the name of the parameter being searched for
* @return the element representing the parameter with that name
*/
- ParameterElement getElementForParameter(FormalParameter node, SimpleIdentifier parameterName) {
+ ParameterElement _getElementForParameter(FormalParameter node, SimpleIdentifier parameterName) {
List<ParameterElement> parameters = null;
if (_enclosingParameter != null) {
parameters = _enclosingParameter.parameters;
@@ -5150,7 +5305,7 @@
if (parameters == null && _enclosingAlias != null) {
parameters = _enclosingAlias.parameters;
}
- ParameterElement element = parameters == null ? null : findIdentifier(parameters, parameterName);
+ ParameterElement element = parameters == null ? null : _findIdentifier(parameters, parameterName);
if (element == null) {
PrintStringWriter writer = new PrintStringWriter();
writer.println("Invalid state found in the Analysis Engine:");
@@ -5174,7 +5329,7 @@
* @param literal the string literal whose value is to be returned
* @return the value of the given string literal
*/
- String getStringValue(StringLiteral literal) {
+ String _getStringValue(StringLiteral literal) {
if (literal is StringInterpolation) {
return null;
}
@@ -5256,7 +5411,7 @@
*
* @return `true` if the given identifier is the return type of a constructor declaration.
*/
- static bool isConstructorReturnType(SimpleIdentifier identifier) {
+ static bool _isConstructorReturnType(SimpleIdentifier identifier) {
AstNode parent = identifier.parent;
if (parent is ConstructorDeclaration) {
return identical(parent.returnType, identifier);
@@ -5270,7 +5425,7 @@
* @return `true` if the given identifier is the return type of a factory constructor
* declaration.
*/
- static bool isFactoryConstructorReturnType(SimpleIdentifier node) {
+ static bool _isFactoryConstructorReturnType(SimpleIdentifier node) {
AstNode parent = node.parent;
if (parent is ConstructorDeclaration) {
ConstructorDeclaration constructor = parent;
@@ -5285,7 +5440,7 @@
* @param node the 'super' expression to analyze
* @return `true` if the 'super' expression is in a valid context
*/
- static bool isSuperInValidContext(SuperExpression node) {
+ static bool _isSuperInValidContext(SuperExpression node) {
for (AstNode n = node; n != null; n = n.parent) {
if (n is CompilationUnit) {
return false;
@@ -5323,12 +5478,12 @@
/**
* The type representing the type 'dynamic'.
*/
- Type2 _dynamicType;
+ DartType _dynamicType;
/**
* The type representing the type 'type'.
*/
- Type2 _typeType;
+ DartType _typeType;
/**
* A utility class for the resolver to answer the question of "what are my subtypes?".
@@ -5368,23 +5523,24 @@
_promoteManager = resolver.promoteManager;
}
+ @override
Object visitAssignmentExpression(AssignmentExpression node) {
sc.Token operator = node.operator;
sc.TokenType operatorType = operator.type;
if (operatorType != sc.TokenType.EQ) {
- operatorType = operatorFromCompoundAssignment(operatorType);
+ operatorType = _operatorFromCompoundAssignment(operatorType);
Expression leftHandSide = node.leftHandSide;
if (leftHandSide != null) {
String methodName = operatorType.lexeme;
- Type2 staticType = getStaticType(leftHandSide);
- MethodElement staticMethod = lookUpMethod(leftHandSide, staticType, methodName);
+ DartType staticType = _getStaticType(leftHandSide);
+ MethodElement staticMethod = _lookUpMethod(leftHandSide, staticType, methodName);
node.staticElement = staticMethod;
- Type2 propagatedType = getPropagatedType(leftHandSide);
- MethodElement propagatedMethod = lookUpMethod(leftHandSide, propagatedType, methodName);
+ DartType propagatedType = _getPropagatedType(leftHandSide);
+ MethodElement propagatedMethod = _lookUpMethod(leftHandSide, propagatedType, methodName);
node.propagatedElement = propagatedMethod;
- if (shouldReportMissingMember(staticType, staticMethod)) {
+ if (_shouldReportMissingMember(staticType, staticMethod)) {
_resolver.reportErrorProxyConditionalAnalysisError(staticType.element, StaticTypeWarningCode.UNDEFINED_METHOD, operator, [methodName, staticType.displayName]);
- } else if (_enableHints && shouldReportMissingMember(propagatedType, propagatedMethod) && !memberFoundInSubclass(propagatedType.element, methodName, true, false)) {
+ } else if (_enableHints && _shouldReportMissingMember(propagatedType, propagatedMethod) && !_memberFoundInSubclass(propagatedType.element, methodName, true, false)) {
_resolver.reportErrorProxyConditionalAnalysisError(propagatedType.element, HintCode.UNDEFINED_METHOD, operator, [methodName, propagatedType.displayName]);
}
}
@@ -5392,21 +5548,22 @@
return null;
}
+ @override
Object visitBinaryExpression(BinaryExpression node) {
sc.Token operator = node.operator;
if (operator.isUserDefinableOperator) {
Expression leftOperand = node.leftOperand;
if (leftOperand != null) {
String methodName = operator.lexeme;
- Type2 staticType = getStaticType(leftOperand);
- MethodElement staticMethod = lookUpMethod(leftOperand, staticType, methodName);
+ DartType staticType = _getStaticType(leftOperand);
+ MethodElement staticMethod = _lookUpMethod(leftOperand, staticType, methodName);
node.staticElement = staticMethod;
- Type2 propagatedType = getPropagatedType(leftOperand);
- MethodElement propagatedMethod = lookUpMethod(leftOperand, propagatedType, methodName);
+ DartType propagatedType = _getPropagatedType(leftOperand);
+ MethodElement propagatedMethod = _lookUpMethod(leftOperand, propagatedType, methodName);
node.propagatedElement = propagatedMethod;
- if (shouldReportMissingMember(staticType, staticMethod)) {
+ if (_shouldReportMissingMember(staticType, staticMethod)) {
_resolver.reportErrorProxyConditionalAnalysisError(staticType.element, StaticTypeWarningCode.UNDEFINED_OPERATOR, operator, [methodName, staticType.displayName]);
- } else if (_enableHints && shouldReportMissingMember(propagatedType, propagatedMethod) && !memberFoundInSubclass(propagatedType.element, methodName, true, false)) {
+ } else if (_enableHints && _shouldReportMissingMember(propagatedType, propagatedMethod) && !_memberFoundInSubclass(propagatedType.element, methodName, true, false)) {
_resolver.reportErrorProxyConditionalAnalysisError(propagatedType.element, HintCode.UNDEFINED_OPERATOR, operator, [methodName, propagatedType.displayName]);
}
}
@@ -5414,31 +5571,35 @@
return null;
}
+ @override
Object visitBreakStatement(BreakStatement node) {
- lookupLabel(node, node.label);
+ _lookupLabel(node, node.label);
return null;
}
+ @override
Object visitClassDeclaration(ClassDeclaration node) {
- setMetadata(node.element, node);
+ _setMetadata(node.element, node);
return null;
}
+ @override
Object visitClassTypeAlias(ClassTypeAlias node) {
- setMetadata(node.element, node);
+ _setMetadata(node.element, node);
return null;
}
+ @override
Object visitCommentReference(CommentReference node) {
Identifier identifier = node.identifier;
if (identifier is SimpleIdentifier) {
SimpleIdentifier simpleIdentifier = identifier;
- Element element = resolveSimpleIdentifier(simpleIdentifier);
+ Element element = _resolveSimpleIdentifier(simpleIdentifier);
if (element == null) {
//
// This might be a reference to an imported name that is missing the prefix.
//
- element = findImportWithoutPrefix(simpleIdentifier);
+ element = _findImportWithoutPrefix(simpleIdentifier);
if (element is MultiplyDefinedElement) {
// TODO(brianwilkerson) Report this error?
element = null;
@@ -5464,7 +5625,7 @@
PrefixedIdentifier prefixedIdentifier = identifier;
SimpleIdentifier prefix = prefixedIdentifier.prefix;
SimpleIdentifier name = prefixedIdentifier.identifier;
- Element element = resolveSimpleIdentifier(prefix);
+ Element element = _resolveSimpleIdentifier(prefix);
if (element == null) {
} else {
if (element is PrefixElement) {
@@ -5483,11 +5644,11 @@
name.staticElement = element;
if (node.newKeyword == null) {
if (element is ClassElement) {
- Element memberElement = lookupGetterOrMethod((element as ClassElement).type, name.name);
+ Element memberElement = _lookupGetterOrMethod((element as ClassElement).type, name.name);
if (memberElement == null) {
memberElement = (element as ClassElement).getNamedConstructor(name.name);
if (memberElement == null) {
- memberElement = lookUpSetter(prefix, (element as ClassElement).type, name.name);
+ memberElement = _lookUpSetter(prefix, (element as ClassElement).type, name.name);
}
}
if (memberElement == null) {
@@ -5511,6 +5672,7 @@
return null;
}
+ @override
Object visitConstructorDeclaration(ConstructorDeclaration node) {
super.visitConstructorDeclaration(node);
ConstructorElement element = node.element;
@@ -5530,11 +5692,12 @@
}
}
}
- setMetadata(constructorElement, node);
+ _setMetadata(constructorElement, node);
}
return null;
}
+ @override
Object visitConstructorFieldInitializer(ConstructorFieldInitializer node) {
SimpleIdentifier fieldName = node.fieldName;
ClassElement enclosingClass = _resolver.enclosingClass;
@@ -5543,8 +5706,9 @@
return null;
}
+ @override
Object visitConstructorName(ConstructorName node) {
- Type2 type = node.type.type;
+ DartType type = node.type.type;
if (type != null && type.isDynamic) {
return null;
} else if (type is! InterfaceType) {
@@ -5575,38 +5739,44 @@
return null;
}
+ @override
Object visitContinueStatement(ContinueStatement node) {
- lookupLabel(node, node.label);
+ _lookupLabel(node, node.label);
return null;
}
+ @override
Object visitDeclaredIdentifier(DeclaredIdentifier node) {
- setMetadata(node.element, node);
+ _setMetadata(node.element, node);
return null;
}
+ @override
Object visitExportDirective(ExportDirective node) {
ExportElement exportElement = node.element;
if (exportElement != null) {
// The element is null when the URI is invalid
// TODO(brianwilkerson) Figure out whether the element can ever be something other than an
// ExportElement
- resolveCombinators(exportElement.exportedLibrary, node.combinators);
- setMetadata(exportElement, node);
+ _resolveCombinators(exportElement.exportedLibrary, node.combinators);
+ _setMetadata(exportElement, node);
}
return null;
}
+ @override
Object visitFieldFormalParameter(FieldFormalParameter node) {
- setMetadataForParameter(node.element, node);
+ _setMetadataForParameter(node.element, node);
return super.visitFieldFormalParameter(node);
}
+ @override
Object visitFunctionDeclaration(FunctionDeclaration node) {
- setMetadata(node.element, node);
+ _setMetadata(node.element, node);
return null;
}
+ @override
Object visitFunctionExpressionInvocation(FunctionExpressionInvocation node) {
// TODO(brianwilkerson) Can we ever resolve the function being invoked?
Expression expression = node.function;
@@ -5614,7 +5784,7 @@
FunctionExpression functionExpression = expression;
ExecutableElement functionElement = functionExpression.element;
ArgumentList argumentList = node.argumentList;
- List<ParameterElement> parameters = resolveArgumentsToFunction(false, argumentList, functionElement);
+ List<ParameterElement> parameters = _resolveArgumentsToFunction(false, argumentList, functionElement);
if (parameters != null) {
argumentList.correspondingStaticParameters = parameters;
}
@@ -5622,16 +5792,19 @@
return null;
}
+ @override
Object visitFunctionTypeAlias(FunctionTypeAlias node) {
- setMetadata(node.element, node);
+ _setMetadata(node.element, node);
return null;
}
+ @override
Object visitFunctionTypedFormalParameter(FunctionTypedFormalParameter node) {
- setMetadataForParameter(node.element, node);
+ _setMetadataForParameter(node.element, node);
return null;
}
+ @override
Object visitImportDirective(ImportDirective node) {
SimpleIdentifier prefixNode = node.prefix;
if (prefixNode != null) {
@@ -5648,81 +5821,86 @@
// The element is null when the URI is invalid
LibraryElement library = importElement.importedLibrary;
if (library != null) {
- resolveCombinators(library, node.combinators);
+ _resolveCombinators(library, node.combinators);
}
- setMetadata(importElement, node);
+ _setMetadata(importElement, node);
}
return null;
}
+ @override
Object visitIndexExpression(IndexExpression node) {
Expression target = node.realTarget;
- Type2 staticType = getStaticType(target);
- Type2 propagatedType = getPropagatedType(target);
+ DartType staticType = _getStaticType(target);
+ DartType propagatedType = _getPropagatedType(target);
String getterMethodName = sc.TokenType.INDEX.lexeme;
String setterMethodName = sc.TokenType.INDEX_EQ.lexeme;
bool isInGetterContext = node.inGetterContext();
bool isInSetterContext = node.inSetterContext();
if (isInGetterContext && isInSetterContext) {
// lookup setter
- MethodElement setterStaticMethod = lookUpMethod(target, staticType, setterMethodName);
- MethodElement setterPropagatedMethod = lookUpMethod(target, propagatedType, setterMethodName);
+ MethodElement setterStaticMethod = _lookUpMethod(target, staticType, setterMethodName);
+ MethodElement setterPropagatedMethod = _lookUpMethod(target, propagatedType, setterMethodName);
// set setter element
node.staticElement = setterStaticMethod;
node.propagatedElement = setterPropagatedMethod;
// generate undefined method warning
- checkForUndefinedIndexOperator(node, target, getterMethodName, setterStaticMethod, setterPropagatedMethod, staticType, propagatedType);
+ _checkForUndefinedIndexOperator(node, target, getterMethodName, setterStaticMethod, setterPropagatedMethod, staticType, propagatedType);
// lookup getter method
- MethodElement getterStaticMethod = lookUpMethod(target, staticType, getterMethodName);
- MethodElement getterPropagatedMethod = lookUpMethod(target, propagatedType, getterMethodName);
+ MethodElement getterStaticMethod = _lookUpMethod(target, staticType, getterMethodName);
+ MethodElement getterPropagatedMethod = _lookUpMethod(target, propagatedType, getterMethodName);
// set getter element
AuxiliaryElements auxiliaryElements = new AuxiliaryElements(getterStaticMethod, getterPropagatedMethod);
node.auxiliaryElements = auxiliaryElements;
// generate undefined method warning
- checkForUndefinedIndexOperator(node, target, getterMethodName, getterStaticMethod, getterPropagatedMethod, staticType, propagatedType);
+ _checkForUndefinedIndexOperator(node, target, getterMethodName, getterStaticMethod, getterPropagatedMethod, staticType, propagatedType);
} else if (isInGetterContext) {
// lookup getter method
- MethodElement staticMethod = lookUpMethod(target, staticType, getterMethodName);
- MethodElement propagatedMethod = lookUpMethod(target, propagatedType, getterMethodName);
+ MethodElement staticMethod = _lookUpMethod(target, staticType, getterMethodName);
+ MethodElement propagatedMethod = _lookUpMethod(target, propagatedType, getterMethodName);
// set getter element
node.staticElement = staticMethod;
node.propagatedElement = propagatedMethod;
// generate undefined method warning
- checkForUndefinedIndexOperator(node, target, getterMethodName, staticMethod, propagatedMethod, staticType, propagatedType);
+ _checkForUndefinedIndexOperator(node, target, getterMethodName, staticMethod, propagatedMethod, staticType, propagatedType);
} else if (isInSetterContext) {
// lookup setter method
- MethodElement staticMethod = lookUpMethod(target, staticType, setterMethodName);
- MethodElement propagatedMethod = lookUpMethod(target, propagatedType, setterMethodName);
+ MethodElement staticMethod = _lookUpMethod(target, staticType, setterMethodName);
+ MethodElement propagatedMethod = _lookUpMethod(target, propagatedType, setterMethodName);
// set setter element
node.staticElement = staticMethod;
node.propagatedElement = propagatedMethod;
// generate undefined method warning
- checkForUndefinedIndexOperator(node, target, setterMethodName, staticMethod, propagatedMethod, staticType, propagatedType);
+ _checkForUndefinedIndexOperator(node, target, setterMethodName, staticMethod, propagatedMethod, staticType, propagatedType);
}
return null;
}
+ @override
Object visitInstanceCreationExpression(InstanceCreationExpression node) {
ConstructorElement invokedConstructor = node.constructorName.staticElement;
node.staticElement = invokedConstructor;
ArgumentList argumentList = node.argumentList;
- List<ParameterElement> parameters = resolveArgumentsToFunction(node.isConst, argumentList, invokedConstructor);
+ List<ParameterElement> parameters = _resolveArgumentsToFunction(node.isConst, argumentList, invokedConstructor);
if (parameters != null) {
argumentList.correspondingStaticParameters = parameters;
}
return null;
}
+ @override
Object visitLibraryDirective(LibraryDirective node) {
- setMetadata(node.element, node);
+ _setMetadata(node.element, node);
return null;
}
+ @override
Object visitMethodDeclaration(MethodDeclaration node) {
- setMetadata(node.element, node);
+ _setMetadata(node.element, node);
return null;
}
+ @override
Object visitMethodInvocation(MethodInvocation node) {
SimpleIdentifier methodName = node.methodName;
//
@@ -5737,16 +5915,16 @@
// propagated type information.
//
Expression target = node.realTarget;
- if (target is SuperExpression && !isSuperInValidContext(target)) {
+ if (target is SuperExpression && !_isSuperInValidContext(target)) {
return null;
}
Element staticElement;
Element propagatedElement;
if (target == null) {
- staticElement = resolveInvokedElement(methodName);
+ staticElement = _resolveInvokedElement(methodName);
propagatedElement = null;
} else {
- Type2 staticType = getStaticType(target);
+ DartType staticType = _getStaticType(target);
//
// If this method invocation is of the form 'C.m' where 'C' is a class, then we don't call
// resolveInvokedElement(..) which walks up the class hierarchy, instead we just look for the
@@ -5754,14 +5932,14 @@
//
ClassElementImpl typeReference = getTypeReference(target);
if (typeReference != null) {
- staticElement = propagatedElement = resolveElement(typeReference, methodName);
+ staticElement = propagatedElement = _resolveElement(typeReference, methodName);
} else {
- staticElement = resolveInvokedElementWithTarget(target, staticType, methodName);
- propagatedElement = resolveInvokedElementWithTarget(target, getPropagatedType(target), methodName);
+ staticElement = _resolveInvokedElementWithTarget(target, staticType, methodName);
+ propagatedElement = _resolveInvokedElementWithTarget(target, _getPropagatedType(target), methodName);
}
}
- staticElement = convertSetterToGetter(staticElement);
- propagatedElement = convertSetterToGetter(propagatedElement);
+ staticElement = _convertSetterToGetter(staticElement);
+ propagatedElement = _convertSetterToGetter(propagatedElement);
//
// Record the results.
//
@@ -5769,13 +5947,13 @@
methodName.propagatedElement = propagatedElement;
ArgumentList argumentList = node.argumentList;
if (staticElement != null) {
- List<ParameterElement> parameters = computeCorrespondingParameters(argumentList, staticElement);
+ List<ParameterElement> parameters = _computeCorrespondingParameters(argumentList, staticElement);
if (parameters != null) {
argumentList.correspondingStaticParameters = parameters;
}
}
if (propagatedElement != null) {
- List<ParameterElement> parameters = computeCorrespondingParameters(argumentList, propagatedElement);
+ List<ParameterElement> parameters = _computeCorrespondingParameters(argumentList, propagatedElement);
if (parameters != null) {
argumentList.correspondingPropagatedParameters = parameters;
}
@@ -5783,16 +5961,16 @@
//
// Then check for error conditions.
//
- ErrorCode errorCode = checkForInvocationError(target, true, staticElement);
+ ErrorCode errorCode = _checkForInvocationError(target, true, staticElement);
bool generatedWithTypePropagation = false;
if (_enableHints && errorCode == null && staticElement == null) {
- errorCode = checkForInvocationError(target, false, propagatedElement);
+ errorCode = _checkForInvocationError(target, false, propagatedElement);
if (identical(errorCode, StaticTypeWarningCode.UNDEFINED_METHOD)) {
ClassElement classElementContext = null;
if (target == null) {
classElementContext = _resolver.enclosingClass;
} else {
- Type2 type = target.bestType;
+ DartType type = target.bestType;
if (type != null) {
if (type.element is ClassElement) {
classElementContext = type.element as ClassElement;
@@ -5829,14 +6007,14 @@
// ignore Function "call"
// (if we are about to create a hint using type propagation, then we can use type
// propagation here as well)
- Type2 targetType = null;
+ DartType targetType = null;
if (!generatedWithTypePropagation) {
- targetType = getStaticType(target);
+ targetType = _getStaticType(target);
} else {
// choose the best type
- targetType = getPropagatedType(target);
+ targetType = _getPropagatedType(target);
if (targetType == null) {
- targetType = getStaticType(target);
+ targetType = _getStaticType(target);
}
}
if (targetType != null && targetType.isDartCoreFunction && methodName.name == CALL_METHOD_NAME) {
@@ -5851,40 +6029,44 @@
} else if (identical(errorCode, StaticTypeWarningCode.UNDEFINED_SUPER_METHOD)) {
// Generate the type name.
// The error code will never be generated via type propagation
- Type2 targetType = getStaticType(target);
+ DartType targetType = _getStaticType(target);
String targetTypeName = targetType == null ? null : targetType.name;
_resolver.reportErrorForNode(StaticTypeWarningCode.UNDEFINED_SUPER_METHOD, methodName, [methodName.name, targetTypeName]);
}
return null;
}
+ @override
Object visitPartDirective(PartDirective node) {
- setMetadata(node.element, node);
+ _setMetadata(node.element, node);
return null;
}
+ @override
Object visitPartOfDirective(PartOfDirective node) {
- setMetadata(node.element, node);
+ _setMetadata(node.element, node);
return null;
}
+ @override
Object visitPostfixExpression(PostfixExpression node) {
Expression operand = node.operand;
- String methodName = getPostfixOperator(node);
- Type2 staticType = getStaticType(operand);
- MethodElement staticMethod = lookUpMethod(operand, staticType, methodName);
+ String methodName = _getPostfixOperator(node);
+ DartType staticType = _getStaticType(operand);
+ MethodElement staticMethod = _lookUpMethod(operand, staticType, methodName);
node.staticElement = staticMethod;
- Type2 propagatedType = getPropagatedType(operand);
- MethodElement propagatedMethod = lookUpMethod(operand, propagatedType, methodName);
+ DartType propagatedType = _getPropagatedType(operand);
+ MethodElement propagatedMethod = _lookUpMethod(operand, propagatedType, methodName);
node.propagatedElement = propagatedMethod;
- if (shouldReportMissingMember(staticType, staticMethod)) {
+ if (_shouldReportMissingMember(staticType, staticMethod)) {
_resolver.reportErrorProxyConditionalAnalysisError(staticType.element, StaticTypeWarningCode.UNDEFINED_OPERATOR, node.operator, [methodName, staticType.displayName]);
- } else if (_enableHints && shouldReportMissingMember(propagatedType, propagatedMethod) && !memberFoundInSubclass(propagatedType.element, methodName, true, false)) {
+ } else if (_enableHints && _shouldReportMissingMember(propagatedType, propagatedMethod) && !_memberFoundInSubclass(propagatedType.element, methodName, true, false)) {
_resolver.reportErrorProxyConditionalAnalysisError(propagatedType.element, HintCode.UNDEFINED_OPERATOR, node.operator, [methodName, propagatedType.displayName]);
}
return null;
}
+ @override
Object visitPrefixedIdentifier(PrefixedIdentifier node) {
SimpleIdentifier prefix = node.prefix;
SimpleIdentifier identifier = node.identifier;
@@ -5924,7 +6106,7 @@
// Validate annotation element.
if (node.parent is Annotation) {
Annotation annotation = node.parent as Annotation;
- resolveAnnotationElement(annotation);
+ _resolveAnnotationElement(annotation);
return null;
}
return null;
@@ -5932,47 +6114,50 @@
// May be annotation, resolve invocation of "const" constructor.
if (node.parent is Annotation) {
Annotation annotation = node.parent as Annotation;
- resolveAnnotationElement(annotation);
+ _resolveAnnotationElement(annotation);
}
//
// Otherwise, the prefix is really an expression that happens to be a simple identifier and this
// is really equivalent to a property access node.
//
- resolvePropertyAccess(prefix, identifier);
+ _resolvePropertyAccess(prefix, identifier);
return null;
}
+ @override
Object visitPrefixExpression(PrefixExpression node) {
sc.Token operator = node.operator;
sc.TokenType operatorType = operator.type;
if (operatorType.isUserDefinableOperator || identical(operatorType, sc.TokenType.PLUS_PLUS) || identical(operatorType, sc.TokenType.MINUS_MINUS)) {
Expression operand = node.operand;
- String methodName = getPrefixOperator(node);
- Type2 staticType = getStaticType(operand);
- MethodElement staticMethod = lookUpMethod(operand, staticType, methodName);
+ String methodName = _getPrefixOperator(node);
+ DartType staticType = _getStaticType(operand);
+ MethodElement staticMethod = _lookUpMethod(operand, staticType, methodName);
node.staticElement = staticMethod;
- Type2 propagatedType = getPropagatedType(operand);
- MethodElement propagatedMethod = lookUpMethod(operand, propagatedType, methodName);
+ DartType propagatedType = _getPropagatedType(operand);
+ MethodElement propagatedMethod = _lookUpMethod(operand, propagatedType, methodName);
node.propagatedElement = propagatedMethod;
- if (shouldReportMissingMember(staticType, staticMethod)) {
+ if (_shouldReportMissingMember(staticType, staticMethod)) {
_resolver.reportErrorProxyConditionalAnalysisError(staticType.element, StaticTypeWarningCode.UNDEFINED_OPERATOR, operator, [methodName, staticType.displayName]);
- } else if (_enableHints && shouldReportMissingMember(propagatedType, propagatedMethod) && !memberFoundInSubclass(propagatedType.element, methodName, true, false)) {
+ } else if (_enableHints && _shouldReportMissingMember(propagatedType, propagatedMethod) && !_memberFoundInSubclass(propagatedType.element, methodName, true, false)) {
_resolver.reportErrorProxyConditionalAnalysisError(propagatedType.element, HintCode.UNDEFINED_OPERATOR, operator, [methodName, propagatedType.displayName]);
}
}
return null;
}
+ @override
Object visitPropertyAccess(PropertyAccess node) {
Expression target = node.realTarget;
- if (target is SuperExpression && !isSuperInValidContext(target)) {
+ if (target is SuperExpression && !_isSuperInValidContext(target)) {
return null;
}
SimpleIdentifier propertyName = node.propertyName;
- resolvePropertyAccess(target, propertyName);
+ _resolvePropertyAccess(target, propertyName);
return null;
}
+ @override
Object visitRedirectingConstructorInvocation(RedirectingConstructorInvocation node) {
ClassElement enclosingClass = _resolver.enclosingClass;
if (enclosingClass == null) {
@@ -5995,18 +6180,20 @@
}
node.staticElement = element;
ArgumentList argumentList = node.argumentList;
- List<ParameterElement> parameters = resolveArgumentsToFunction(false, argumentList, element);
+ List<ParameterElement> parameters = _resolveArgumentsToFunction(false, argumentList, element);
if (parameters != null) {
argumentList.correspondingStaticParameters = parameters;
}
return null;
}
+ @override
Object visitSimpleFormalParameter(SimpleFormalParameter node) {
- setMetadataForParameter(node.element, node);
+ _setMetadataForParameter(node.element, node);
return null;
}
+ @override
Object visitSimpleIdentifier(SimpleIdentifier node) {
//
// Synthetic identifiers have been already reported during parsing.
@@ -6032,16 +6219,16 @@
//
// Otherwise, the node should be resolved.
//
- Element element = resolveSimpleIdentifier(node);
+ Element element = _resolveSimpleIdentifier(node);
ClassElement enclosingClass = _resolver.enclosingClass;
- if (isFactoryConstructorReturnType(node) && element != enclosingClass) {
+ if (_isFactoryConstructorReturnType(node) && element != enclosingClass) {
_resolver.reportErrorForNode(CompileTimeErrorCode.INVALID_FACTORY_NAME_NOT_A_CLASS, node, []);
- } else if (isConstructorReturnType(node) && element != enclosingClass) {
+ } else if (_isConstructorReturnType(node) && element != enclosingClass) {
_resolver.reportErrorForNode(CompileTimeErrorCode.INVALID_CONSTRUCTOR_NAME, node, []);
element = null;
- } else if (element == null || (element is PrefixElement && !isValidAsPrefix(node))) {
+ } else if (element == null || (element is PrefixElement && !_isValidAsPrefix(node))) {
// TODO(brianwilkerson) Recover from this error.
- if (isConstructorReturnType(node)) {
+ if (_isConstructorReturnType(node)) {
_resolver.reportErrorForNode(CompileTimeErrorCode.INVALID_CONSTRUCTOR_NAME, node, []);
} else if (node.parent is Annotation) {
Annotation annotation = node.parent as Annotation;
@@ -6053,7 +6240,7 @@
node.staticElement = element;
if (node.inSetterContext() && node.inGetterContext() && enclosingClass != null) {
InterfaceType enclosingType = enclosingClass.type;
- AuxiliaryElements auxiliaryElements = new AuxiliaryElements(lookUpGetter(null, enclosingType, node.name), null);
+ AuxiliaryElements auxiliaryElements = new AuxiliaryElements(_lookUpGetter(null, enclosingType, node.name), null);
node.auxiliaryElements = auxiliaryElements;
}
//
@@ -6061,11 +6248,12 @@
//
if (node.parent is Annotation) {
Annotation annotation = node.parent as Annotation;
- resolveAnnotationElement(annotation);
+ _resolveAnnotationElement(annotation);
}
return null;
}
+ @override
Object visitSuperConstructorInvocation(SuperConstructorInvocation node) {
ClassElement enclosingClass = _resolver.enclosingClass;
if (enclosingClass == null) {
@@ -6097,27 +6285,30 @@
}
node.staticElement = element;
ArgumentList argumentList = node.argumentList;
- List<ParameterElement> parameters = resolveArgumentsToFunction(isInConstConstructor, argumentList, element);
+ List<ParameterElement> parameters = _resolveArgumentsToFunction(isInConstConstructor, argumentList, element);
if (parameters != null) {
argumentList.correspondingStaticParameters = parameters;
}
return null;
}
+ @override
Object visitSuperExpression(SuperExpression node) {
- if (!isSuperInValidContext(node)) {
+ if (!_isSuperInValidContext(node)) {
_resolver.reportErrorForNode(CompileTimeErrorCode.SUPER_IN_INVALID_CONTEXT, node, []);
}
return super.visitSuperExpression(node);
}
+ @override
Object visitTypeParameter(TypeParameter node) {
- setMetadata(node.element, node);
+ _setMetadata(node.element, node);
return null;
}
+ @override
Object visitVariableDeclaration(VariableDeclaration node) {
- setMetadata(node.element, node);
+ _setMetadata(node.element, node);
return null;
}
@@ -6128,12 +6319,15 @@
* @param annotationList the list of elements to which new elements are to be added
* @param annotations the AST nodes used to generate new elements
*/
- void addAnnotations(List<ElementAnnotationImpl> annotationList, NodeList<Annotation> annotations) {
+ void _addAnnotations(List<ElementAnnotationImpl> annotationList, NodeList<Annotation> annotations) {
int annotationCount = annotations.length;
for (int i = 0; i < annotationCount; i++) {
- Element resolvedElement = annotations[i].element;
+ Annotation annotation = annotations[i];
+ Element resolvedElement = annotation.element;
if (resolvedElement != null) {
- annotationList.add(new ElementAnnotationImpl(resolvedElement));
+ ElementAnnotationImpl elementAnnotation = new ElementAnnotationImpl(resolvedElement);
+ annotation.elementAnnotation = elementAnnotation;
+ annotationList.add(elementAnnotation);
}
}
}
@@ -6147,7 +6341,7 @@
* @param element the element to be invoked
* @return the error code that should be reported
*/
- ErrorCode checkForInvocationError(Expression target, bool useStaticContext, Element element) {
+ ErrorCode _checkForInvocationError(Expression target, bool useStaticContext, Element element) {
// Prefix is not declared, instead "prefix.id" are declared.
if (element is PrefixElement) {
element = null;
@@ -6159,8 +6353,8 @@
// TODO(brianwilkerson) Consider the possibility of re-writing the AST.
FunctionType getterType = element.type;
if (getterType != null) {
- Type2 returnType = getterType.returnType;
- if (!isExecutableType(returnType)) {
+ DartType returnType = getterType.returnType;
+ if (!_isExecutableType(returnType)) {
return StaticTypeWarningCode.INVOCATION_OF_NON_FUNCTION;
}
}
@@ -6180,14 +6374,14 @@
PropertyAccessorElement getter = element.getter;
FunctionType getterType = getter.type;
if (getterType != null) {
- Type2 returnType = getterType.returnType;
- if (!isExecutableType(returnType)) {
+ DartType returnType = getterType.returnType;
+ if (!_isExecutableType(returnType)) {
return StaticTypeWarningCode.INVOCATION_OF_NON_FUNCTION;
}
}
} else if (element is VariableElement) {
- Type2 variableType = element.type;
- if (!isExecutableType(variableType)) {
+ DartType variableType = element.type;
+ if (!_isExecutableType(variableType)) {
return StaticTypeWarningCode.INVOCATION_OF_NON_FUNCTION;
}
} else {
@@ -6202,9 +6396,9 @@
return StaticTypeWarningCode.INVOCATION_OF_NON_FUNCTION;
}
} else {
- Type2 targetType;
+ DartType targetType;
if (useStaticContext) {
- targetType = getStaticType(target);
+ targetType = _getStaticType(target);
} else {
// Compute and use the propagated type, if it is null, then it may be the case that
// static type is some type, in which the static type should be used.
@@ -6232,9 +6426,9 @@
* index expression
* @return `true` if and only if an error code is generated on the passed node
*/
- bool checkForUndefinedIndexOperator(IndexExpression node, Expression target, String methodName, MethodElement staticMethod, MethodElement propagatedMethod, Type2 staticType, Type2 propagatedType) {
- bool shouldReportMissingMember_static = shouldReportMissingMember(staticType, staticMethod);
- bool shouldReportMissingMember_propagated = !shouldReportMissingMember_static && _enableHints && shouldReportMissingMember(propagatedType, propagatedMethod) && !memberFoundInSubclass(propagatedType.element, methodName, true, false);
+ bool _checkForUndefinedIndexOperator(IndexExpression node, Expression target, String methodName, MethodElement staticMethod, MethodElement propagatedMethod, DartType staticType, DartType propagatedType) {
+ bool shouldReportMissingMember_static = _shouldReportMissingMember(staticType, staticMethod);
+ bool shouldReportMissingMember_propagated = !shouldReportMissingMember_static && _enableHints && _shouldReportMissingMember(propagatedType, propagatedMethod) && !_memberFoundInSubclass(propagatedType.element, methodName, true, false);
if (shouldReportMissingMember_static || shouldReportMissingMember_propagated) {
sc.Token leftBracket = node.leftBracket;
sc.Token rightBracket = node.rightBracket;
@@ -6264,41 +6458,41 @@
* @param executableElement the element that will be invoked with the arguments
* @return the parameters that correspond to the arguments
*/
- List<ParameterElement> computeCorrespondingParameters(ArgumentList argumentList, Element element) {
+ List<ParameterElement> _computeCorrespondingParameters(ArgumentList argumentList, Element element) {
if (element is PropertyAccessorElement) {
//
// This is an invocation of the call method defined on the value returned by the getter.
//
FunctionType getterType = element.type;
if (getterType != null) {
- Type2 getterReturnType = getterType.returnType;
+ DartType getterReturnType = getterType.returnType;
if (getterReturnType is InterfaceType) {
MethodElement callMethod = getterReturnType.lookUpMethod(CALL_METHOD_NAME, _definingLibrary);
if (callMethod != null) {
- return resolveArgumentsToFunction(false, argumentList, callMethod);
+ return _resolveArgumentsToFunction(false, argumentList, callMethod);
}
} else if (getterReturnType is FunctionType) {
Element functionElement = getterReturnType.element;
if (functionElement is ExecutableElement) {
- return resolveArgumentsToFunction(false, argumentList, functionElement);
+ return _resolveArgumentsToFunction(false, argumentList, functionElement);
}
}
}
} else if (element is ExecutableElement) {
- return resolveArgumentsToFunction(false, argumentList, element);
+ return _resolveArgumentsToFunction(false, argumentList, element);
} else if (element is VariableElement) {
VariableElement variable = element;
- Type2 type = _promoteManager.getStaticType(variable);
+ DartType type = _promoteManager.getStaticType(variable);
if (type is FunctionType) {
FunctionType functionType = type;
List<ParameterElement> parameters = functionType.parameters;
- return resolveArgumentsToParameters(false, argumentList, parameters);
+ return _resolveArgumentsToParameters(false, argumentList, parameters);
} else if (type is InterfaceType) {
// "call" invocation
MethodElement callMethod = type.lookUpMethod(CALL_METHOD_NAME, _definingLibrary);
if (callMethod != null) {
List<ParameterElement> parameters = callMethod.parameters;
- return resolveArgumentsToParameters(false, argumentList, parameters);
+ return _resolveArgumentsToParameters(false, argumentList, parameters);
}
}
}
@@ -6312,7 +6506,7 @@
* @param element the element to be normalized
* @return a non-setter element derived from the given element
*/
- Element convertSetterToGetter(Element element) {
+ Element _convertSetterToGetter(Element element) {
// TODO(brianwilkerson) Determine whether and why the element could ever be a setter.
if (element is PropertyAccessorElement) {
return element.variable.getter;
@@ -6327,7 +6521,7 @@
* @param identifier the identifier that might have been imported using a prefix
* @return the element that was found
*/
- Element findImportWithoutPrefix(SimpleIdentifier identifier) {
+ Element _findImportWithoutPrefix(SimpleIdentifier identifier) {
Element element = null;
Scope nameScope = _resolver.nameScope;
for (ImportElement importElement in _definingLibrary.imports) {
@@ -6353,7 +6547,7 @@
* @param node the postfix expression being invoked
* @return the name of the method invoked by the expression
*/
- String getPostfixOperator(PostfixExpression node) => (identical(node.operator.type, sc.TokenType.PLUS_PLUS)) ? sc.TokenType.PLUS.lexeme : sc.TokenType.MINUS.lexeme;
+ String _getPostfixOperator(PostfixExpression node) => (identical(node.operator.type, sc.TokenType.PLUS_PLUS)) ? sc.TokenType.PLUS.lexeme : sc.TokenType.MINUS.lexeme;
/**
* Return the name of the method invoked by the given postfix expression.
@@ -6361,7 +6555,7 @@
* @param node the postfix expression being invoked
* @return the name of the method invoked by the expression
*/
- String getPrefixOperator(PrefixExpression node) {
+ String _getPrefixOperator(PrefixExpression node) {
sc.Token operator = node.operator;
sc.TokenType operatorType = operator.type;
if (identical(operatorType, sc.TokenType.PLUS_PLUS)) {
@@ -6381,8 +6575,8 @@
* @param expression the expression whose type is to be returned
* @return the type of the given expression
*/
- Type2 getPropagatedType(Expression expression) {
- Type2 propagatedType = resolveTypeParameter(expression.propagatedType);
+ DartType _getPropagatedType(Expression expression) {
+ DartType propagatedType = _resolveTypeParameter(expression.propagatedType);
if (propagatedType is FunctionType) {
//
// All function types are subtypes of 'Function', which is itself a subclass of 'Object'.
@@ -6398,11 +6592,11 @@
* @param expression the expression whose type is to be returned
* @return the type of the given expression
*/
- Type2 getStaticType(Expression expression) {
+ DartType _getStaticType(Expression expression) {
if (expression is NullLiteral) {
return _resolver.typeProvider.bottomType;
}
- Type2 staticType = resolveTypeParameter(expression.staticType);
+ DartType staticType = _resolveTypeParameter(expression.staticType);
if (staticType is FunctionType) {
//
// All function types are subtypes of 'Function', which is itself a subclass of 'Object'.
@@ -6419,7 +6613,7 @@
* @param type the type being tested
* @return `true` if the given type represents an object that could be invoked
*/
- bool isExecutableType(Type2 type) {
+ bool _isExecutableType(DartType type) {
if (type.isDynamic || (type is FunctionType) || type.isDartCoreFunction || type.isObject) {
return true;
} else if (type is InterfaceType) {
@@ -6447,7 +6641,7 @@
* @param element the element being tested
* @return `true` if the given element is a static element
*/
- bool isStatic(Element element) {
+ bool _isStatic(Element element) {
if (element is ExecutableElement) {
return element.isStatic;
} else if (element is PropertyInducingElement) {
@@ -6464,7 +6658,7 @@
* @param node the node being tested
* @return `true` if the given node is the prefix in an import directive
*/
- bool isValidAsPrefix(SimpleIdentifier node) {
+ bool _isValidAsPrefix(SimpleIdentifier node) {
AstNode parent = node.parent;
if (parent is ImportDirective) {
return identical(parent.prefix, node);
@@ -6485,8 +6679,8 @@
* @param getterName the name of the getter being looked up
* @return the element representing the getter that was found
*/
- PropertyAccessorElement lookUpGetter(Expression target, Type2 type, String getterName) {
- type = resolveTypeParameter(type);
+ PropertyAccessorElement _lookUpGetter(Expression target, DartType type, String getterName) {
+ type = _resolveTypeParameter(type);
if (type is InterfaceType) {
InterfaceType interfaceType = type;
PropertyAccessorElement accessor;
@@ -6498,7 +6692,7 @@
if (accessor != null) {
return accessor;
}
- return lookUpGetterInInterfaces(interfaceType, false, getterName, new Set<ClassElement>());
+ return _lookUpGetterInInterfaces(interfaceType, false, getterName, new Set<ClassElement>());
}
return null;
}
@@ -6515,7 +6709,7 @@
* to prevent infinite recursion and to optimize the search
* @return the element representing the getter that was found
*/
- PropertyAccessorElement lookUpGetterInInterfaces(InterfaceType targetType, bool includeTargetType, String getterName, Set<ClassElement> visitedInterfaces) {
+ PropertyAccessorElement _lookUpGetterInInterfaces(InterfaceType targetType, bool includeTargetType, String getterName, Set<ClassElement> visitedInterfaces) {
// TODO(brianwilkerson) This isn't correct. Section 8.1.1 of the specification (titled
// "Inheritance and Overriding" under "Interfaces") describes a much more complex scheme for
// finding the inherited member. We need to follow that scheme. The code below should cover the
@@ -6532,13 +6726,13 @@
}
}
for (InterfaceType interfaceType in targetType.interfaces) {
- PropertyAccessorElement getter = lookUpGetterInInterfaces(interfaceType, true, getterName, visitedInterfaces);
+ PropertyAccessorElement getter = _lookUpGetterInInterfaces(interfaceType, true, getterName, visitedInterfaces);
if (getter != null) {
return getter;
}
}
for (InterfaceType mixinType in targetType.mixins) {
- PropertyAccessorElement getter = lookUpGetterInInterfaces(mixinType, true, getterName, visitedInterfaces);
+ PropertyAccessorElement getter = _lookUpGetterInInterfaces(mixinType, true, getterName, visitedInterfaces);
if (getter != null) {
return getter;
}
@@ -6547,7 +6741,7 @@
if (superclass == null) {
return null;
}
- return lookUpGetterInInterfaces(superclass, true, getterName, visitedInterfaces);
+ return _lookUpGetterInInterfaces(superclass, true, getterName, visitedInterfaces);
}
/**
@@ -6559,8 +6753,8 @@
* @param memberName the name of the method or getter being looked up
* @return the element representing the method or getter that was found
*/
- ExecutableElement lookupGetterOrMethod(Type2 type, String memberName) {
- type = resolveTypeParameter(type);
+ ExecutableElement _lookupGetterOrMethod(DartType type, String memberName) {
+ type = _resolveTypeParameter(type);
if (type is InterfaceType) {
InterfaceType interfaceType = type;
ExecutableElement member = interfaceType.lookUpMethod(memberName, _definingLibrary);
@@ -6571,7 +6765,7 @@
if (member != null) {
return member;
}
- return lookUpGetterOrMethodInInterfaces(interfaceType, false, memberName, new Set<ClassElement>());
+ return _lookUpGetterOrMethodInInterfaces(interfaceType, false, memberName, new Set<ClassElement>());
}
return null;
}
@@ -6588,7 +6782,7 @@
* to prevent infinite recursion and to optimize the search
* @return the element representing the method or getter that was found
*/
- ExecutableElement lookUpGetterOrMethodInInterfaces(InterfaceType targetType, bool includeTargetType, String memberName, Set<ClassElement> visitedInterfaces) {
+ ExecutableElement _lookUpGetterOrMethodInInterfaces(InterfaceType targetType, bool includeTargetType, String memberName, Set<ClassElement> visitedInterfaces) {
// TODO(brianwilkerson) This isn't correct. Section 8.1.1 of the specification (titled
// "Inheritance and Overriding" under "Interfaces") describes a much more complex scheme for
// finding the inherited member. We need to follow that scheme. The code below should cover the
@@ -6609,13 +6803,13 @@
}
}
for (InterfaceType interfaceType in targetType.interfaces) {
- ExecutableElement member = lookUpGetterOrMethodInInterfaces(interfaceType, true, memberName, visitedInterfaces);
+ ExecutableElement member = _lookUpGetterOrMethodInInterfaces(interfaceType, true, memberName, visitedInterfaces);
if (member != null) {
return member;
}
}
for (InterfaceType mixinType in targetType.mixins) {
- ExecutableElement member = lookUpGetterOrMethodInInterfaces(mixinType, true, memberName, visitedInterfaces);
+ ExecutableElement member = _lookUpGetterOrMethodInInterfaces(mixinType, true, memberName, visitedInterfaces);
if (member != null) {
return member;
}
@@ -6624,7 +6818,7 @@
if (superclass == null) {
return null;
}
- return lookUpGetterOrMethodInInterfaces(superclass, true, memberName, visitedInterfaces);
+ return _lookUpGetterOrMethodInInterfaces(superclass, true, memberName, visitedInterfaces);
}
/**
@@ -6634,7 +6828,7 @@
* @param labelNode the node representing the label being looked up
* @return the element corresponding to the given label node in the current scope
*/
- LabelElementImpl lookupLabel(AstNode parentNode, SimpleIdentifier labelNode) {
+ LabelElementImpl _lookupLabel(AstNode parentNode, SimpleIdentifier labelNode) {
LabelScope labelScope = _resolver.labelScope;
LabelElementImpl labelElement = null;
if (labelNode == null) {
@@ -6680,8 +6874,8 @@
* @param methodName the name of the method being looked up
* @return the element representing the method that was found
*/
- MethodElement lookUpMethod(Expression target, Type2 type, String methodName) {
- type = resolveTypeParameter(type);
+ MethodElement _lookUpMethod(Expression target, DartType type, String methodName) {
+ type = _resolveTypeParameter(type);
if (type is InterfaceType) {
InterfaceType interfaceType = type;
MethodElement method;
@@ -6693,7 +6887,7 @@
if (method != null) {
return method;
}
- return lookUpMethodInInterfaces(interfaceType, false, methodName, new Set<ClassElement>());
+ return _lookUpMethodInInterfaces(interfaceType, false, methodName, new Set<ClassElement>());
}
return null;
}
@@ -6710,7 +6904,7 @@
* to prevent infinite recursion and to optimize the search
* @return the element representing the method that was found
*/
- MethodElement lookUpMethodInInterfaces(InterfaceType targetType, bool includeTargetType, String methodName, Set<ClassElement> visitedInterfaces) {
+ MethodElement _lookUpMethodInInterfaces(InterfaceType targetType, bool includeTargetType, String methodName, Set<ClassElement> visitedInterfaces) {
// TODO(brianwilkerson) This isn't correct. Section 8.1.1 of the specification (titled
// "Inheritance and Overriding" under "Interfaces") describes a much more complex scheme for
// finding the inherited member. We need to follow that scheme. The code below should cover the
@@ -6727,13 +6921,13 @@
}
}
for (InterfaceType interfaceType in targetType.interfaces) {
- MethodElement method = lookUpMethodInInterfaces(interfaceType, true, methodName, visitedInterfaces);
+ MethodElement method = _lookUpMethodInInterfaces(interfaceType, true, methodName, visitedInterfaces);
if (method != null) {
return method;
}
}
for (InterfaceType mixinType in targetType.mixins) {
- MethodElement method = lookUpMethodInInterfaces(mixinType, true, methodName, visitedInterfaces);
+ MethodElement method = _lookUpMethodInInterfaces(mixinType, true, methodName, visitedInterfaces);
if (method != null) {
return method;
}
@@ -6742,7 +6936,7 @@
if (superclass == null) {
return null;
}
- return lookUpMethodInInterfaces(superclass, true, methodName, visitedInterfaces);
+ return _lookUpMethodInInterfaces(superclass, true, methodName, visitedInterfaces);
}
/**
@@ -6754,8 +6948,8 @@
* @param setterName the name of the setter being looked up
* @return the element representing the setter that was found
*/
- PropertyAccessorElement lookUpSetter(Expression target, Type2 type, String setterName) {
- type = resolveTypeParameter(type);
+ PropertyAccessorElement _lookUpSetter(Expression target, DartType type, String setterName) {
+ type = _resolveTypeParameter(type);
if (type is InterfaceType) {
InterfaceType interfaceType = type;
PropertyAccessorElement accessor;
@@ -6767,7 +6961,7 @@
if (accessor != null) {
return accessor;
}
- return lookUpSetterInInterfaces(interfaceType, false, setterName, new Set<ClassElement>());
+ return _lookUpSetterInInterfaces(interfaceType, false, setterName, new Set<ClassElement>());
}
return null;
}
@@ -6784,7 +6978,7 @@
* to prevent infinite recursion and to optimize the search
* @return the element representing the setter that was found
*/
- PropertyAccessorElement lookUpSetterInInterfaces(InterfaceType targetType, bool includeTargetType, String setterName, Set<ClassElement> visitedInterfaces) {
+ PropertyAccessorElement _lookUpSetterInInterfaces(InterfaceType targetType, bool includeTargetType, String setterName, Set<ClassElement> visitedInterfaces) {
// TODO(brianwilkerson) This isn't correct. Section 8.1.1 of the specification (titled
// "Inheritance and Overriding" under "Interfaces") describes a much more complex scheme for
// finding the inherited member. We need to follow that scheme. The code below should cover the
@@ -6801,13 +6995,13 @@
}
}
for (InterfaceType interfaceType in targetType.interfaces) {
- PropertyAccessorElement setter = lookUpSetterInInterfaces(interfaceType, true, setterName, visitedInterfaces);
+ PropertyAccessorElement setter = _lookUpSetterInInterfaces(interfaceType, true, setterName, visitedInterfaces);
if (setter != null) {
return setter;
}
}
for (InterfaceType mixinType in targetType.mixins) {
- PropertyAccessorElement setter = lookUpSetterInInterfaces(mixinType, true, setterName, visitedInterfaces);
+ PropertyAccessorElement setter = _lookUpSetterInInterfaces(mixinType, true, setterName, visitedInterfaces);
if (setter != null) {
return setter;
}
@@ -6816,7 +7010,7 @@
if (superclass == null) {
return null;
}
- return lookUpSetterInInterfaces(superclass, true, setterName, visitedInterfaces);
+ return _lookUpSetterInInterfaces(superclass, true, setterName, visitedInterfaces);
}
/**
@@ -6832,7 +7026,7 @@
* the subtypes
* @return `true` if and only if the passed memberName was found in a subtype
*/
- bool memberFoundInSubclass(Element element, String memberName, bool asMethod, bool asAccessor) {
+ bool _memberFoundInSubclass(Element element, String memberName, bool asMethod, bool asAccessor) {
if (element is ClassElement) {
_subtypeManager.ensureLibraryVisited(_definingLibrary);
Set<ClassElement> subtypeElements = _subtypeManager.computeAllSubtypes(element);
@@ -6853,7 +7047,7 @@
* @param operator the assignment operator being mapped
* @return the binary operator that invoked by the given assignment operator
*/
- sc.TokenType operatorFromCompoundAssignment(sc.TokenType operator) {
+ sc.TokenType _operatorFromCompoundAssignment(sc.TokenType operator) {
while (true) {
if (operator == sc.TokenType.AMPERSAND_EQ) {
return sc.TokenType.AMPERSAND;
@@ -6886,14 +7080,14 @@
}
}
- void resolveAnnotationConstructorInvocationArguments(Annotation annotation, ConstructorElement constructor) {
+ void _resolveAnnotationConstructorInvocationArguments(Annotation annotation, ConstructorElement constructor) {
ArgumentList argumentList = annotation.arguments;
// error will be reported in ConstantVerifier
if (argumentList == null) {
return;
}
// resolve arguments to parameters
- List<ParameterElement> parameters = resolveArgumentsToFunction(true, argumentList, constructor);
+ List<ParameterElement> parameters = _resolveArgumentsToFunction(true, argumentList, constructor);
if (parameters != null) {
argumentList.correspondingStaticParameters = parameters;
}
@@ -6904,7 +7098,7 @@
*
* @param annotation the [Annotation] to resolve
*/
- void resolveAnnotationElement(Annotation annotation) {
+ void _resolveAnnotationElement(Annotation annotation) {
SimpleIdentifier nameNode1;
SimpleIdentifier nameNode2;
{
@@ -6927,7 +7121,7 @@
Element element1 = nameNode1.staticElement;
// CONST
if (element1 is PropertyAccessorElement) {
- resolveAnnotationElementGetter(annotation, element1);
+ _resolveAnnotationElementGetter(annotation, element1);
return;
}
// Class(args)
@@ -6951,7 +7145,7 @@
if (element2 is PropertyAccessorElement) {
nameNode2.staticElement = element2;
annotation.element = element2;
- resolveAnnotationElementGetter(annotation, element2 as PropertyAccessorElement);
+ _resolveAnnotationElementGetter(annotation, element2 as PropertyAccessorElement);
return;
}
// prefix.Class()
@@ -6980,7 +7174,7 @@
if (getter != null) {
nameNode3.staticElement = getter;
annotation.element = element2;
- resolveAnnotationElementGetter(annotation, getter);
+ _resolveAnnotationElementGetter(annotation, getter);
return;
}
// prefix.Class.constructor(args)
@@ -6996,10 +7190,10 @@
// record element
annotation.element = constructor;
// resolve arguments
- resolveAnnotationConstructorInvocationArguments(annotation, constructor);
+ _resolveAnnotationConstructorInvocationArguments(annotation, constructor);
}
- void resolveAnnotationElementGetter(Annotation annotation, PropertyAccessorElement accessorElement) {
+ void _resolveAnnotationElementGetter(Annotation annotation, PropertyAccessorElement accessorElement) {
// accessor should be synthetic
if (!accessorElement.isSynthetic) {
_resolver.reportErrorForNode(CompileTimeErrorCode.INVALID_ANNOTATION, annotation, []);
@@ -7025,12 +7219,12 @@
* @param executableElement the element that will be invoked with the arguments
* @return the parameters that correspond to the arguments
*/
- List<ParameterElement> resolveArgumentsToFunction(bool reportError, ArgumentList argumentList, ExecutableElement executableElement) {
+ List<ParameterElement> _resolveArgumentsToFunction(bool reportError, ArgumentList argumentList, ExecutableElement executableElement) {
if (executableElement == null) {
return null;
}
List<ParameterElement> parameters = executableElement.parameters;
- return resolveArgumentsToParameters(reportError, argumentList, parameters);
+ return _resolveArgumentsToParameters(reportError, argumentList, parameters);
}
/**
@@ -7044,7 +7238,7 @@
* @param parameters the of the function that will be invoked with the arguments
* @return the parameters that correspond to the arguments
*/
- List<ParameterElement> resolveArgumentsToParameters(bool reportError, ArgumentList argumentList, List<ParameterElement> parameters) {
+ List<ParameterElement> _resolveArgumentsToParameters(bool reportError, ArgumentList argumentList, List<ParameterElement> parameters) {
List<ParameterElement> requiredParameters = new List<ParameterElement>();
List<ParameterElement> positionalParameters = new List<ParameterElement>();
Map<String, ParameterElement> namedParameters = new Map<String, ParameterElement>();
@@ -7106,7 +7300,7 @@
* @param library the library that defines the names
* @param combinators the combinators containing the names to be resolved
*/
- void resolveCombinators(LibraryElement library, NodeList<Combinator> combinators) {
+ void _resolveCombinators(LibraryElement library, NodeList<Combinator> combinators) {
if (library == null) {
//
// The library will be null if the directive containing the combinators has a URI that is not
@@ -7138,7 +7332,7 @@
* @param classElement the class element
* @param nameNode the member name node
*/
- Element resolveElement(ClassElementImpl classElement, SimpleIdentifier nameNode) {
+ Element _resolveElement(ClassElementImpl classElement, SimpleIdentifier nameNode) {
String name = nameNode.name;
Element element = null;
element = classElement.getMethod(name);
@@ -7163,7 +7357,7 @@
* @param methodName the name of the method being invoked ('m')
* @return the element being invoked
*/
- Element resolveInvokedElement(SimpleIdentifier methodName) {
+ Element _resolveInvokedElement(SimpleIdentifier methodName) {
//
// Look first in the lexical scope.
//
@@ -7176,12 +7370,12 @@
ClassElement enclosingClass = _resolver.enclosingClass;
if (enclosingClass != null) {
InterfaceType enclosingType = enclosingClass.type;
- element = lookUpMethod(null, enclosingType, methodName.name);
+ element = _lookUpMethod(null, enclosingType, methodName.name);
if (element == null) {
//
// If there's no method, then it's possible that 'm' is a getter that returns a function.
//
- element = lookUpGetter(null, enclosingType, methodName.name);
+ element = _lookUpGetter(null, enclosingType, methodName.name);
}
}
}
@@ -7200,15 +7394,15 @@
* @param methodName the name of the method being invoked ('m')
* @return the element being invoked
*/
- Element resolveInvokedElementWithTarget(Expression target, Type2 targetType, SimpleIdentifier methodName) {
+ Element _resolveInvokedElementWithTarget(Expression target, DartType targetType, SimpleIdentifier methodName) {
if (targetType is InterfaceType) {
InterfaceType classType = targetType;
- Element element = lookUpMethod(target, classType, methodName.name);
+ Element element = _lookUpMethod(target, classType, methodName.name);
if (element == null) {
//
// If there's no method, then it's possible that 'm' is a getter that returns a function.
//
- element = lookUpGetter(target, classType, methodName.name);
+ element = _lookUpGetter(target, classType, methodName.name);
}
return element;
} else if (target is SimpleIdentifier) {
@@ -7241,23 +7435,23 @@
* @param propertyName the name of the property being accessed
* @return the element that represents the property
*/
- ExecutableElement resolveProperty(Expression target, Type2 targetType, SimpleIdentifier propertyName) {
+ ExecutableElement _resolveProperty(Expression target, DartType targetType, SimpleIdentifier propertyName) {
ExecutableElement memberElement = null;
if (propertyName.inSetterContext()) {
- memberElement = lookUpSetter(target, targetType, propertyName.name);
+ memberElement = _lookUpSetter(target, targetType, propertyName.name);
}
if (memberElement == null) {
- memberElement = lookUpGetter(target, targetType, propertyName.name);
+ memberElement = _lookUpGetter(target, targetType, propertyName.name);
}
if (memberElement == null) {
- memberElement = lookUpMethod(target, targetType, propertyName.name);
+ memberElement = _lookUpMethod(target, targetType, propertyName.name);
}
return memberElement;
}
- void resolvePropertyAccess(Expression target, SimpleIdentifier propertyName) {
- Type2 staticType = getStaticType(target);
- Type2 propagatedType = getPropagatedType(target);
+ void _resolvePropertyAccess(Expression target, SimpleIdentifier propertyName) {
+ DartType staticType = _getStaticType(target);
+ DartType propagatedType = _getPropagatedType(target);
Element staticElement = null;
Element propagatedElement = null;
//
@@ -7267,10 +7461,10 @@
//
ClassElementImpl typeReference = getTypeReference(target);
if (typeReference != null) {
- staticElement = propagatedElement = resolveElement(typeReference, propertyName);
+ staticElement = propagatedElement = _resolveElement(typeReference, propertyName);
} else {
- staticElement = resolveProperty(target, staticType, propertyName);
- propagatedElement = resolveProperty(target, propagatedType, propertyName);
+ staticElement = _resolveProperty(target, staticType, propertyName);
+ propagatedElement = _resolveProperty(target, propagatedType, propertyName);
}
// May be part of annotation, record property element only if exists.
// Error was already reported in validateAnnotationElement().
@@ -7282,12 +7476,12 @@
}
propertyName.staticElement = staticElement;
propertyName.propagatedElement = propagatedElement;
- bool shouldReportMissingMember_static = shouldReportMissingMember(staticType, staticElement);
- bool shouldReportMissingMember_propagated = !shouldReportMissingMember_static && _enableHints ? shouldReportMissingMember(propagatedType, propagatedElement) : false;
+ bool shouldReportMissingMember_static = _shouldReportMissingMember(staticType, staticElement);
+ bool shouldReportMissingMember_propagated = !shouldReportMissingMember_static && _enableHints ? _shouldReportMissingMember(propagatedType, propagatedElement) : false;
// If we are about to generate the hint (propagated version of this warning), then check
// that the member is not in a subtype of the propagated type.
if (shouldReportMissingMember_propagated) {
- if (memberFoundInSubclass(propagatedType.element, propertyName.name, false, true)) {
+ if (_memberFoundInSubclass(propagatedType.element, propertyName.name, false, true)) {
shouldReportMissingMember_propagated = false;
}
}
@@ -7305,7 +7499,7 @@
}
Element staticOrPropagatedEnclosingElt = shouldReportMissingMember_static ? staticType.element : propagatedType.element;
if (staticOrPropagatedEnclosingElt != null) {
- bool isStaticProperty = isStatic(staticOrPropagatedEnclosingElt);
+ bool isStaticProperty = _isStatic(staticOrPropagatedEnclosingElt);
if (propertyName.inSetterContext()) {
if (isStaticProperty) {
ErrorCode errorCode = (shouldReportMissingMember_static ? StaticWarningCode.UNDEFINED_SETTER : HintCode.UNDEFINED_SETTER) as ErrorCode;
@@ -7345,7 +7539,7 @@
* @param node the identifier to be resolved
* @return the element to which the identifier could be resolved
*/
- Element resolveSimpleIdentifier(SimpleIdentifier node) {
+ Element _resolveSimpleIdentifier(SimpleIdentifier node) {
Element element = _resolver.nameScope.lookup(node, _definingLibrary);
if (element is PropertyAccessorElement && node.inSetterContext()) {
PropertyInducingElement variable = (element as PropertyAccessorElement).variable;
@@ -7357,7 +7551,7 @@
//
ClassElement enclosingClass = _resolver.enclosingClass;
if (enclosingClass != null) {
- setter = lookUpSetter(null, enclosingClass.type, node.name);
+ setter = _lookUpSetter(null, enclosingClass.type, node.name);
}
}
if (setter != null) {
@@ -7371,13 +7565,13 @@
if (element == null && enclosingClass != null) {
InterfaceType enclosingType = enclosingClass.type;
if (element == null && node.inSetterContext()) {
- element = lookUpSetter(null, enclosingType, node.name);
+ element = _lookUpSetter(null, enclosingType, node.name);
}
if (element == null && node.inGetterContext()) {
- element = lookUpGetter(null, enclosingType, node.name);
+ element = _lookUpGetter(null, enclosingType, node.name);
}
if (element == null) {
- element = lookUpMethod(null, enclosingType, node.name);
+ element = _lookUpMethod(null, enclosingType, node.name);
}
}
return element;
@@ -7391,9 +7585,9 @@
* @return the type that should be used in place of the argument if it is a type parameter, or the
* original argument if it isn't a type parameter
*/
- Type2 resolveTypeParameter(Type2 type) {
+ DartType _resolveTypeParameter(DartType type) {
if (type is TypeParameterType) {
- Type2 bound = type.element.bound;
+ DartType bound = type.element.bound;
if (bound == null) {
return _resolver.typeProvider.objectType;
}
@@ -7410,21 +7604,21 @@
* @param element the element to which the node has been resolved
* @param node the node that can have annotations associated with it
*/
- void setMetadata(Element element, AnnotatedNode node) {
+ void _setMetadata(Element element, AnnotatedNode node) {
if (element is! ElementImpl) {
return;
}
List<ElementAnnotationImpl> annotationList = new List<ElementAnnotationImpl>();
- addAnnotations(annotationList, node.metadata);
+ _addAnnotations(annotationList, node.metadata);
if (node is VariableDeclaration && node.parent is VariableDeclarationList) {
VariableDeclarationList list = node.parent as VariableDeclarationList;
- addAnnotations(annotationList, list.metadata);
+ _addAnnotations(annotationList, list.metadata);
if (list.parent is FieldDeclaration) {
FieldDeclaration fieldDeclaration = list.parent as FieldDeclaration;
- addAnnotations(annotationList, fieldDeclaration.metadata);
+ _addAnnotations(annotationList, fieldDeclaration.metadata);
} else if (list.parent is TopLevelVariableDeclaration) {
TopLevelVariableDeclaration variableDeclaration = list.parent as TopLevelVariableDeclaration;
- addAnnotations(annotationList, variableDeclaration.metadata);
+ _addAnnotations(annotationList, variableDeclaration.metadata);
}
}
if (!annotationList.isEmpty) {
@@ -7440,12 +7634,12 @@
* @param element the element to which the node has been resolved
* @param node the node that can have annotations associated with it
*/
- void setMetadataForParameter(Element element, NormalFormalParameter node) {
+ void _setMetadataForParameter(Element element, NormalFormalParameter node) {
if (element is! ElementImpl) {
return;
}
List<ElementAnnotationImpl> annotationList = new List<ElementAnnotationImpl>();
- addAnnotations(annotationList, node.metadata);
+ _addAnnotations(annotationList, node.metadata);
if (!annotationList.isEmpty) {
(element as ElementImpl).metadata = new List.from(annotationList);
}
@@ -7459,7 +7653,7 @@
* @param member the result of the look-up
* @return `true` if we should report an error
*/
- bool shouldReportMissingMember(Type2 type, Element member) {
+ bool _shouldReportMissingMember(DartType type, Element member) {
if (member != null || type == null || type.isDynamic || type.isBottom) {
return false;
}
@@ -7486,20 +7680,28 @@
*/
ElementResolver_SyntheticIdentifier(this.name);
+ @override
accept(AstVisitor visitor) => null;
+ @override
sc.Token get beginToken => null;
+ @override
Element get bestElement => null;
+ @override
sc.Token get endToken => null;
+ @override
int get precedence => 16;
+ @override
Element get propagatedElement => null;
+ @override
Element get staticElement => null;
+ @override
void visitChildren(AstVisitor visitor) {
}
}
@@ -7554,14 +7756,14 @@
* @throws AnalysisException if the node could not be resolved
*/
void resolve(AstNode node) {
- AstNode rootNode = findResolutionRoot(node);
+ AstNode rootNode = _findResolutionRoot(node);
Scope scope = ScopeBuilder.scopeFor(rootNode, _errorListener);
- if (elementModelChanged(rootNode.parent)) {
+ if (_elementModelChanged(rootNode.parent)) {
throw new AnalysisException.con1("Cannot resolve node: element model changed");
}
- resolveTypes(node, scope);
- resolveVariables(node, scope);
- resolveReferences(node, scope);
+ _resolveTypes(node, scope);
+ _resolveVariables(node, scope);
+ _resolveReferences(node, scope);
}
/**
@@ -7572,7 +7774,7 @@
* @param node the node being tested
* @return `true` if the given node can be resolved independently of any other nodes
*/
- bool canBeResolved(AstNode node) => node is ClassDeclaration || node is ClassTypeAlias || node is CompilationUnit || node is ConstructorDeclaration || node is FunctionDeclaration || node is FunctionTypeAlias || node is MethodDeclaration;
+ bool _canBeResolved(AstNode node) => node is ClassDeclaration || node is ClassTypeAlias || node is CompilationUnit || node is ConstructorDeclaration || node is FunctionDeclaration || node is FunctionTypeAlias || node is MethodDeclaration;
/**
* Return `true` if the portion of the element model defined by the given node has changed.
@@ -7581,8 +7783,8 @@
* @return `true` if the element model defined by the given node has changed
* @throws AnalysisException if the correctness of the element model cannot be determined
*/
- bool elementModelChanged(AstNode node) {
- Element element = getElement(node);
+ bool _elementModelChanged(AstNode node) {
+ Element element = _getElement(node);
if (element == null) {
throw new AnalysisException.con1("Cannot resolve node: a ${node.runtimeType.toString()} does not define an element");
}
@@ -7598,10 +7800,10 @@
* @return the smallest AST node that can be resolved independently of any other nodes
* @throws AnalysisException if there is no such node
*/
- AstNode findResolutionRoot(AstNode node) {
+ AstNode _findResolutionRoot(AstNode node) {
AstNode result = node;
AstNode parent = result.parent;
- while (parent != null && !canBeResolved(parent)) {
+ while (parent != null && !_canBeResolved(parent)) {
result = parent;
parent = result.parent;
}
@@ -7618,7 +7820,7 @@
* @param node the node defining the element to be returned
* @return the element defined by the given node
*/
- Element getElement(AstNode node) {
+ Element _getElement(AstNode node) {
if (node is Declaration) {
return node.element;
} else if (node is CompilationUnit) {
@@ -7627,7 +7829,7 @@
return null;
}
- void resolveReferences(AstNode node, Scope scope) {
+ void _resolveReferences(AstNode node, Scope scope) {
ResolverVisitor visitor = new ResolverVisitor.con3(_definingLibrary, _source, _typeProvider, scope, _errorListener);
node.accept(visitor);
for (ProxyConditionalAnalysisError conditionalCode in visitor.proxyConditionalAnalysisErrors) {
@@ -7637,12 +7839,12 @@
}
}
- void resolveTypes(AstNode node, Scope scope) {
+ void _resolveTypes(AstNode node, Scope scope) {
TypeResolverVisitor visitor = new TypeResolverVisitor.con3(_definingLibrary, _source, _typeProvider, scope, _errorListener);
node.accept(visitor);
}
- void resolveVariables(AstNode node, Scope scope) {
+ void _resolveVariables(AstNode node, Scope scope) {
VariableResolverVisitor visitor = new VariableResolverVisitor.con2(_definingLibrary, _source, _typeProvider, scope, _errorListener);
node.accept(visitor);
}
@@ -7662,26 +7864,26 @@
* TODO (jwren) Associate a propagated type to the synthetic method element using least upper
* bound calls
*/
- static ExecutableElement computeMergedExecutableElement(List<ExecutableElement> elementArrayToMerge) {
- int h = getNumOfPositionalParameters(elementArrayToMerge[0]);
- int r = getNumOfRequiredParameters(elementArrayToMerge[0]);
+ static ExecutableElement _computeMergedExecutableElement(List<ExecutableElement> elementArrayToMerge) {
+ int h = _getNumOfPositionalParameters(elementArrayToMerge[0]);
+ int r = _getNumOfRequiredParameters(elementArrayToMerge[0]);
Set<String> namedParametersList = new Set<String>();
for (int i = 1; i < elementArrayToMerge.length; i++) {
ExecutableElement element = elementArrayToMerge[i];
- int numOfPositionalParams = getNumOfPositionalParameters(element);
+ int numOfPositionalParams = _getNumOfPositionalParameters(element);
if (h < numOfPositionalParams) {
h = numOfPositionalParams;
}
- int numOfRequiredParams = getNumOfRequiredParameters(element);
+ int numOfRequiredParams = _getNumOfRequiredParameters(element);
if (r > numOfRequiredParams) {
r = numOfRequiredParams;
}
- namedParametersList.addAll(getNamedParameterNames(element));
+ namedParametersList.addAll(_getNamedParameterNames(element));
}
if (r > h) {
return null;
}
- return createSyntheticExecutableElement(elementArrayToMerge, elementArrayToMerge[0].displayName, r, h - r, new List.from(namedParametersList));
+ return _createSyntheticExecutableElement(elementArrayToMerge, elementArrayToMerge[0].displayName, r, h - r, new List.from(namedParametersList));
}
/**
@@ -7695,7 +7897,7 @@
* @param namedParameters the list of [String]s that are the named parameters
* @return the created synthetic element
*/
- static ExecutableElement createSyntheticExecutableElement(List<ExecutableElement> elementArrayToMerge, String name, int numOfRequiredParameters, int numOfPositionalParameters, List<String> namedParameters) {
+ static ExecutableElement _createSyntheticExecutableElement(List<ExecutableElement> elementArrayToMerge, String name, int numOfRequiredParameters, int numOfPositionalParameters, List<String> namedParameters) {
DynamicTypeImpl dynamicType = DynamicTypeImpl.instance;
SimpleIdentifier nameIdentifier = new SimpleIdentifier(new sc.StringToken(sc.TokenType.IDENTIFIER, name, 0));
ExecutableElementImpl executable;
@@ -7741,7 +7943,7 @@
/**
* Given some [ExecutableElement], return the list of named parameters.
*/
- static List<String> getNamedParameterNames(ExecutableElement executableElement) {
+ static List<String> _getNamedParameterNames(ExecutableElement executableElement) {
List<String> namedParameterNames = new List<String>();
List<ParameterElement> parameters = executableElement.parameters;
for (int i = 0; i < parameters.length; i++) {
@@ -7756,7 +7958,7 @@
/**
* Given some [ExecutableElement] return the number of parameters of the specified kind.
*/
- static int getNumOfParameters(ExecutableElement executableElement, ParameterKind parameterKind) {
+ static int _getNumOfParameters(ExecutableElement executableElement, ParameterKind parameterKind) {
int parameterCount = 0;
List<ParameterElement> parameters = executableElement.parameters;
for (int i = 0; i < parameters.length; i++) {
@@ -7773,12 +7975,12 @@
*
* Note: by positional we mean [ParameterKind#REQUIRED] or [ParameterKind#POSITIONAL].
*/
- static int getNumOfPositionalParameters(ExecutableElement executableElement) => getNumOfParameters(executableElement, ParameterKind.REQUIRED) + getNumOfParameters(executableElement, ParameterKind.POSITIONAL);
+ static int _getNumOfPositionalParameters(ExecutableElement executableElement) => _getNumOfParameters(executableElement, ParameterKind.REQUIRED) + _getNumOfParameters(executableElement, ParameterKind.POSITIONAL);
/**
* Given some [ExecutableElement] return the number of required parameters.
*/
- static int getNumOfRequiredParameters(ExecutableElement executableElement) => getNumOfParameters(executableElement, ParameterKind.REQUIRED);
+ static int _getNumOfRequiredParameters(ExecutableElement executableElement) => _getNumOfParameters(executableElement, ParameterKind.REQUIRED);
/**
* Given some [ExecutableElement] returns `true` if it is an abstract member of a
@@ -7787,7 +7989,7 @@
* @param executableElement some [ExecutableElement] to evaluate
* @return `true` if the given element is an abstract member of a class
*/
- static bool isAbstract(ExecutableElement executableElement) {
+ static bool _isAbstract(ExecutableElement executableElement) {
if (executableElement is MethodElement) {
return executableElement.isAbstract;
} else if (executableElement is PropertyAccessorElement) {
@@ -7848,7 +8050,7 @@
* @return a mapping between the set of all members inherited from the passed [ClassElement]
* superclass hierarchy, and the associated [ExecutableElement]
*/
- MemberMap getMapOfMembersInheritedFromClasses(ClassElement classElt) => computeClassChainLookupMap(classElt, new Set<ClassElement>());
+ MemberMap getMapOfMembersInheritedFromClasses(ClassElement classElt) => _computeClassChainLookupMap(classElt, new Set<ClassElement>());
/**
* Get and return a mapping between the set of all string names of the members inherited from the
@@ -7858,7 +8060,7 @@
* @return a mapping between the set of all string names of the members inherited from the passed
* [ClassElement] interface hierarchy, and the associated [ExecutableElement].
*/
- MemberMap getMapOfMembersInheritedFromInterfaces(ClassElement classElt) => computeInterfaceLookupMap(classElt, new Set<ClassElement>());
+ MemberMap getMapOfMembersInheritedFromInterfaces(ClassElement classElt) => _computeInterfaceLookupMap(classElt, new Set<ClassElement>());
/**
* Given some [ClassElement] and some member name, this returns the
@@ -7875,9 +8077,9 @@
if (memberName == null || memberName.isEmpty) {
return null;
}
- ExecutableElement executable = computeClassChainLookupMap(classElt, new Set<ClassElement>()).get(memberName);
+ ExecutableElement executable = _computeClassChainLookupMap(classElt, new Set<ClassElement>()).get(memberName);
if (executable == null) {
- return computeInterfaceLookupMap(classElt, new Set<ClassElement>()).get(memberName);
+ return _computeInterfaceLookupMap(classElt, new Set<ClassElement>()).get(memberName);
}
return executable;
}
@@ -7893,7 +8095,7 @@
* member exists
*/
ExecutableElement lookupMember(ClassElement classElt, String memberName) {
- ExecutableElement element = lookupMemberInClass(classElt, memberName);
+ ExecutableElement element = _lookupMemberInClass(classElt, memberName);
if (element != null) {
return element;
}
@@ -7939,12 +8141,13 @@
* @return the passed function type with any parameterized types substituted
*/
FunctionType substituteTypeArgumentsInMemberFromInheritance(FunctionType baseFunctionType, String memberName, InterfaceType definingType) {
- if (baseFunctionType == null) {
+ // if the baseFunctionType is null, or does not have any parameters, return it.
+ if (baseFunctionType == null || baseFunctionType.typeArguments.length == 0) {
return baseFunctionType;
}
// First, generate the path from the defining type to the overridden member
Queue<InterfaceType> inheritancePath = new Queue<InterfaceType>();
- computeInheritancePath(inheritancePath, definingType, memberName);
+ _computeInheritancePath(inheritancePath, definingType, memberName);
if (inheritancePath == null || inheritancePath.isEmpty) {
// TODO(jwren) log analysis engine error
return baseFunctionType;
@@ -7953,8 +8156,8 @@
// loop backward through the list substituting as we go:
while (!inheritancePath.isEmpty) {
InterfaceType lastType = inheritancePath.removeLast();
- List<Type2> parameterTypes = lastType.element.type.typeArguments;
- List<Type2> argumentTypes = lastType.typeArguments;
+ List<DartType> parameterTypes = lastType.element.type.typeArguments;
+ List<DartType> argumentTypes = lastType.typeArguments;
functionTypeToReturn = functionTypeToReturn.substitute2(argumentTypes, parameterTypes);
}
return functionTypeToReturn;
@@ -7971,7 +8174,7 @@
* @return a mapping between the set of all string names of the members inherited from the passed
* [ClassElement] superclass hierarchy, and the associated [ExecutableElement]
*/
- MemberMap computeClassChainLookupMap(ClassElement classElt, Set<ClassElement> visitedClasses) {
+ MemberMap _computeClassChainLookupMap(ClassElement classElt, Set<ClassElement> visitedClasses) {
MemberMap resultMap = _classLookup[classElt];
if (resultMap != null) {
return resultMap;
@@ -7991,15 +8194,15 @@
if (!visitedClasses.contains(superclassElt)) {
visitedClasses.add(superclassElt);
try {
- resultMap = new MemberMap.con2(computeClassChainLookupMap(superclassElt, visitedClasses));
+ resultMap = new MemberMap.con2(_computeClassChainLookupMap(superclassElt, visitedClasses));
//
// Substitute the super types down the hierarchy.
//
- substituteTypeParametersDownHierarchy(supertype, resultMap);
+ _substituteTypeParametersDownHierarchy(supertype, resultMap);
//
// Include the members from the superclass in the resultMap.
//
- recordMapWithClassMembers(resultMap, supertype, false);
+ _recordMapWithClassMembers(resultMap, supertype, false);
} finally {
visitedClasses.remove(superclassElt);
}
@@ -8020,15 +8223,15 @@
if (!visitedClasses.contains(mixinElement)) {
visitedClasses.add(mixinElement);
try {
- MemberMap map = new MemberMap.con2(computeClassChainLookupMap(mixinElement, visitedClasses));
+ MemberMap map = new MemberMap.con2(_computeClassChainLookupMap(mixinElement, visitedClasses));
//
// Substitute the super types down the hierarchy.
//
- substituteTypeParametersDownHierarchy(mixins[i], map);
+ _substituteTypeParametersDownHierarchy(mixins[i], map);
//
// Include the members from the superclass in the resultMap.
//
- recordMapWithClassMembers(map, mixins[i], false);
+ _recordMapWithClassMembers(map, mixins[i], false);
//
// Add the members from map into result map.
//
@@ -8036,7 +8239,7 @@
String key = map.getKey(j);
ExecutableElement value = map.getValue(j);
if (key != null) {
- if (resultMap.get(key) == null || (resultMap.get(key) != null && !isAbstract(value))) {
+ if (resultMap.get(key) == null || (resultMap.get(key) != null && !_isAbstract(value))) {
resultMap.put(key, value);
}
}
@@ -8065,7 +8268,7 @@
* @param currentType the current type in the inheritance path
* @param memberName the name of the member that is being looked up the inheritance path
*/
- void computeInheritancePath(Queue<InterfaceType> chain, InterfaceType currentType, String memberName) {
+ void _computeInheritancePath(Queue<InterfaceType> chain, InterfaceType currentType, String memberName) {
// TODO (jwren) create a public version of this method which doesn't require the initial chain
// to be provided, then provided tests for this functionality in InheritanceManagerTest
chain.add(currentType);
@@ -8081,7 +8284,7 @@
// We are not done if this is the first recursive call on this method.
if (chain.length != 1) {
// We are done however if the member is in this classElt
- if (lookupMemberInClass(classElt, memberName) != null) {
+ if (_lookupMemberInClass(classElt, memberName) != null) {
return;
}
}
@@ -8090,7 +8293,7 @@
for (int i = mixins.length - 1; i >= 0; i--) {
ClassElement mixinElement = mixins[i].element;
if (mixinElement != null) {
- ExecutableElement elt = lookupMemberInClass(mixinElement, memberName);
+ ExecutableElement elt = _lookupMemberInClass(mixinElement, memberName);
if (elt != null) {
// this is equivalent (but faster than) calling this method recursively
// (return computeInheritancePath(chain, mixins[i], memberName);)
@@ -8102,7 +8305,7 @@
// Superclass
ClassElement superclassElt = supertype.element;
if (lookupMember(superclassElt, memberName) != null) {
- computeInheritancePath(chain, supertype, memberName);
+ _computeInheritancePath(chain, supertype, memberName);
return;
}
// Interfaces
@@ -8110,7 +8313,7 @@
for (InterfaceType interfaceType in interfaces) {
ClassElement interfaceElement = interfaceType.element;
if (interfaceElement != null && lookupMember(interfaceElement, memberName) != null) {
- computeInheritancePath(chain, interfaceType, memberName);
+ _computeInheritancePath(chain, interfaceType, memberName);
return;
}
}
@@ -8127,7 +8330,7 @@
* @return a mapping between the set of all string names of the members inherited from the passed
* [ClassElement] interface hierarchy, and the associated [ExecutableElement]
*/
- MemberMap computeInterfaceLookupMap(ClassElement classElt, Set<ClassElement> visitedInterfaces) {
+ MemberMap _computeInterfaceLookupMap(ClassElement classElt, Set<ClassElement> visitedInterfaces) {
MemberMap resultMap = _interfaceLookup[classElt];
if (resultMap != null) {
return resultMap;
@@ -8150,16 +8353,16 @@
//
// Recursively compute the map for the super type.
//
- MemberMap map = computeInterfaceLookupMap(superclassElement, visitedInterfaces);
+ MemberMap map = _computeInterfaceLookupMap(superclassElement, visitedInterfaces);
map = new MemberMap.con2(map);
//
// Substitute the super type down the hierarchy.
//
- substituteTypeParametersDownHierarchy(supertype, map);
+ _substituteTypeParametersDownHierarchy(supertype, map);
//
// Add any members from the super type into the map as well.
//
- recordMapWithClassMembers(map, supertype, true);
+ _recordMapWithClassMembers(map, supertype, true);
lookupMaps.add(map);
} finally {
visitedInterfaces.remove(superclassElement);
@@ -8187,16 +8390,16 @@
//
// Recursively compute the map for the mixin.
//
- MemberMap map = computeInterfaceLookupMap(mixinElement, visitedInterfaces);
+ MemberMap map = _computeInterfaceLookupMap(mixinElement, visitedInterfaces);
map = new MemberMap.con2(map);
//
// Substitute the mixin type down the hierarchy.
//
- substituteTypeParametersDownHierarchy(mixinType, map);
+ _substituteTypeParametersDownHierarchy(mixinType, map);
//
// Add any members from the mixin type into the map as well.
//
- recordMapWithClassMembers(map, mixinType, true);
+ _recordMapWithClassMembers(map, mixinType, true);
lookupMaps.add(map);
} finally {
visitedInterfaces.remove(mixinElement);
@@ -8224,16 +8427,16 @@
//
// Recursively compute the map for the interfaces.
//
- MemberMap map = computeInterfaceLookupMap(interfaceElement, visitedInterfaces);
+ MemberMap map = _computeInterfaceLookupMap(interfaceElement, visitedInterfaces);
map = new MemberMap.con2(map);
//
// Substitute the supertypes down the hierarchy
//
- substituteTypeParametersDownHierarchy(interfaceType, map);
+ _substituteTypeParametersDownHierarchy(interfaceType, map);
//
// And add any members from the interface into the map as well.
//
- recordMapWithClassMembers(map, interfaceType, true);
+ _recordMapWithClassMembers(map, interfaceType, true);
lookupMaps.add(map);
} finally {
visitedInterfaces.remove(interfaceElement);
@@ -8386,7 +8589,7 @@
// of the other, we create a warning, and have this class inherit nothing.
//
String firstTwoFuntionTypesStr = "${executableElementTypes[0].toString()}, ${executableElementTypes[1].toString()}";
- reportError(classElt, classElt.nameOffset, classElt.displayName.length, StaticTypeWarningCode.INCONSISTENT_METHOD_INHERITANCE, [key, firstTwoFuntionTypesStr]);
+ _reportError(classElt, classElt.nameOffset, classElt.displayName.length, StaticTypeWarningCode.INCONSISTENT_METHOD_INHERITANCE, [key, firstTwoFuntionTypesStr]);
} else {
//
// Example: class A inherits 2 methods named 'm'. One has the function type
@@ -8399,14 +8602,14 @@
for (int i = 0; i < elementArrayToMerge.length; i++) {
elementArrayToMerge[i] = elements[subtypesOfAllOtherTypesIndexes[i]];
}
- ExecutableElement mergedExecutableElement = computeMergedExecutableElement(elementArrayToMerge);
+ ExecutableElement mergedExecutableElement = _computeMergedExecutableElement(elementArrayToMerge);
if (mergedExecutableElement != null) {
resultMap.put(key, mergedExecutableElement);
}
}
}
} else {
- reportError(classElt, classElt.nameOffset, classElt.displayName.length, StaticWarningCode.INCONSISTENT_METHOD_INHERITANCE_GETTER_AND_METHOD, [key]);
+ _reportError(classElt, classElt.nameOffset, classElt.displayName.length, StaticWarningCode.INCONSISTENT_METHOD_INHERITANCE_GETTER_AND_METHOD, [key]);
}
}
}
@@ -8423,7 +8626,7 @@
* @param memberName the name of the member to lookup in the class
* @return the found [ExecutableElement], or `null` if no such member was found
*/
- ExecutableElement lookupMemberInClass(ClassElement classElt, String memberName) {
+ ExecutableElement _lookupMemberInClass(ClassElement classElt, String memberName) {
List<MethodElement> methods = classElt.methods;
for (MethodElement method in methods) {
if (memberName == method.name && method.isAccessibleIn(_library) && !method.isStatic) {
@@ -8448,7 +8651,7 @@
* @param type the type that will be recorded into the passed map
* @param doIncludeAbstract `true` if abstract members will be put into the map
*/
- void recordMapWithClassMembers(MemberMap map, InterfaceType type, bool doIncludeAbstract) {
+ void _recordMapWithClassMembers(MemberMap map, InterfaceType type, bool doIncludeAbstract) {
List<MethodElement> methods = type.methods;
for (MethodElement method in methods) {
if (method.isAccessibleIn(_library) && !method.isStatic && (doIncludeAbstract || !method.isAbstract)) {
@@ -8474,7 +8677,7 @@
* @param errorCode the error code to be associated with this error
* @param arguments the arguments used to build the error message
*/
- void reportError(ClassElement classElt, int offset, int length, ErrorCode errorCode, List<Object> arguments) {
+ void _reportError(ClassElement classElt, int offset, int length, ErrorCode errorCode, List<Object> arguments) {
Set<AnalysisError> errorSet = _errorsInClassElement[classElt];
if (errorSet == null) {
errorSet = new Set<AnalysisError>();
@@ -8490,7 +8693,7 @@
* @param superType the supertype to substitute into the members of the [MemberMap]
* @param map the MemberMap to perform the substitutions on
*/
- void substituteTypeParametersDownHierarchy(InterfaceType superType, MemberMap map) {
+ void _substituteTypeParametersDownHierarchy(InterfaceType superType, MemberMap map) {
for (int i = 0; i < map.size; i++) {
ExecutableElement executableElement = map.getValue(i);
if (executableElement is MethodMember) {
@@ -8808,6 +9011,7 @@
}
}
+ @override
String toString() => librarySource.shortName;
}
@@ -8855,7 +9059,7 @@
NodeList<Directive> directives = definingCompilationUnit.directives;
LibraryIdentifier libraryNameNode = null;
bool hasPartDirective = false;
- FunctionElement entryPoint = findEntryPoint(definingCompilationUnitElement);
+ FunctionElement entryPoint = _findEntryPoint(definingCompilationUnitElement);
List<Directive> directivesToResolve = new List<Directive>();
List<CompilationUnitElementImpl> sourcedCompilationUnits = new List<CompilationUnitElementImpl>();
for (Directive directive in directives) {
@@ -8877,11 +9081,13 @@
if (_analysisContext.exists(partSource)) {
hasPartDirective = true;
CompilationUnitElementImpl part = builder.buildCompilationUnit(partSource, library.getAST(partSource));
+ part.uriOffset = partUri.offset;
+ part.uriEnd = partUri.end;
part.uri = library.getUri(partDirective);
//
// Validate that the part contains a part-of directive with the same name as the library.
//
- String partLibraryName = getPartLibraryName(library, partSource, directivesToResolve);
+ String partLibraryName = _getPartLibraryName(library, partSource, directivesToResolve);
if (partLibraryName == null) {
_errorListener.onError(new AnalysisError.con2(librarySource, partUri.offset, partUri.length, CompileTimeErrorCode.PART_OF_NON_PART, [partUri.toSource()]));
} else if (libraryNameNode == null) {
@@ -8889,7 +9095,7 @@
_errorListener.onError(new AnalysisError.con2(librarySource, partUri.offset, partUri.length, StaticWarningCode.PART_OF_DIFFERENT_LIBRARY, [libraryNameNode.name, partLibraryName]));
}
if (entryPoint == null) {
- entryPoint = findEntryPoint(part);
+ entryPoint = _findEntryPoint(part);
}
directive.element = part;
sourcedCompilationUnits.add(part);
@@ -8914,7 +9120,7 @@
}
library.libraryElement = libraryElement;
if (sourcedUnitCount > 0) {
- patchTopLevelAccessors(libraryElement);
+ _patchTopLevelAccessors(libraryElement);
}
return libraryElement;
}
@@ -8927,7 +9133,7 @@
* @param setters the list to which setters are to be added
* @param unit the compilation unit defining the accessors that are potentially being added
*/
- void collectAccessors(Map<String, PropertyAccessorElement> getters, List<PropertyAccessorElement> setters, CompilationUnitElement unit) {
+ void _collectAccessors(Map<String, PropertyAccessorElement> getters, List<PropertyAccessorElement> setters, CompilationUnitElement unit) {
for (PropertyAccessorElement accessor in unit.accessors) {
if (accessor.isGetter) {
if (!accessor.isSynthetic && accessor.correspondingSetter == null) {
@@ -8948,7 +9154,7 @@
* @return the entry point that was found, or `null` if the compilation unit does not define
* an entry point
*/
- FunctionElement findEntryPoint(CompilationUnitElementImpl element) {
+ FunctionElement _findEntryPoint(CompilationUnitElementImpl element) {
for (FunctionElement function in element.functions) {
if (function.name == ENTRY_POINT_NAME) {
return function;
@@ -8967,7 +9173,7 @@
* built
* @return the name of the library that the given part is declared to be a part of
*/
- String getPartLibraryName(Library library, Source partSource, List<Directive> directivesToResolve) {
+ String _getPartLibraryName(Library library, Source partSource, List<Directive> directivesToResolve) {
try {
CompilationUnit partUnit = library.getAST(partSource);
for (Directive directive in partUnit.directives) {
@@ -8991,12 +9197,12 @@
*
* @param libraryElement the library defining the compilation units to be processed
*/
- void patchTopLevelAccessors(LibraryElementImpl libraryElement) {
+ void _patchTopLevelAccessors(LibraryElementImpl libraryElement) {
Map<String, PropertyAccessorElement> getters = new Map<String, PropertyAccessorElement>();
List<PropertyAccessorElement> setters = new List<PropertyAccessorElement>();
- collectAccessors(getters, setters, libraryElement.definingCompilationUnit);
+ _collectAccessors(getters, setters, libraryElement.definingCompilationUnit);
for (CompilationUnitElement unit in libraryElement.parts) {
- collectAccessors(getters, setters, unit);
+ _collectAccessors(getters, setters, unit);
}
for (PropertyAccessorElement setter in setters) {
PropertyAccessorElement getter = getters[setter.displayName];
@@ -9096,7 +9302,7 @@
//
// Create the objects representing the library being resolved and the core library.
//
- Library targetLibrary = createLibraryWithUnit(librarySource, modificationStamp, unit);
+ Library targetLibrary = _createLibraryWithUnit(librarySource, modificationStamp, unit);
_coreLibrary = _libraryMap[_coreLibrarySource];
if (_coreLibrary == null) {
// This will be true unless the library being analyzed is the core library.
@@ -9106,8 +9312,8 @@
//
// Compute the set of libraries that need to be resolved together.
//
- computeEmbeddedLibraryDependencies(targetLibrary, unit);
- _librariesInCycles = computeLibrariesInCycles(targetLibrary);
+ _computeEmbeddedLibraryDependencies(targetLibrary, unit);
+ _librariesInCycles = _computeLibrariesInCycles(targetLibrary);
//
// Build the element models representing the libraries being resolved. This is done in three
// steps:
@@ -9122,16 +9328,16 @@
// requires that we be able to compute the names visible in the libraries being resolved,
// which in turn requires that we have resolved the import directives.
//
- buildElementModels();
+ _buildElementModels();
instrumentation.metric3("buildElementModels", "complete");
LibraryElement coreElement = _coreLibrary.libraryElement;
if (coreElement == null) {
throw new AnalysisException.con1("Could not resolve dart:core");
}
- buildDirectiveModels();
+ _buildDirectiveModels();
instrumentation.metric3("buildDirectiveModels", "complete");
_typeProvider = new TypeProviderImpl(coreElement);
- buildTypeHierarchies();
+ _buildTypeHierarchies();
instrumentation.metric3("buildTypeHierarchies", "complete");
//
// Perform resolution and type analysis.
@@ -9143,12 +9349,12 @@
// possibility is to add a parameter to this method and punt the decision to the clients.
//
//if (analyzeAll) {
- resolveReferencesAndTypes();
+ _resolveReferencesAndTypes();
instrumentation.metric3("resolveReferencesAndTypes", "complete");
//} else {
// resolveReferencesAndTypes(targetLibrary);
//}
- performConstantEvaluation();
+ _performConstantEvaluation();
instrumentation.metric3("performConstantEvaluation", "complete");
return targetLibrary.libraryElement;
} finally {
@@ -9181,7 +9387,7 @@
_coreLibrary = _libraryMap[_coreLibrarySource];
if (_coreLibrary == null) {
// This will be true unless the library being analyzed is the core library.
- _coreLibrary = createLibraryOrNull(_coreLibrarySource);
+ _coreLibrary = _createLibraryOrNull(_coreLibrarySource);
if (_coreLibrary == null) {
throw new AnalysisException.con1("Core library does not exist");
}
@@ -9190,8 +9396,8 @@
//
// Compute the set of libraries that need to be resolved together.
//
- computeLibraryDependencies(targetLibrary);
- _librariesInCycles = computeLibrariesInCycles(targetLibrary);
+ _computeLibraryDependencies(targetLibrary);
+ _librariesInCycles = _computeLibrariesInCycles(targetLibrary);
//
// Build the element models representing the libraries being resolved. This is done in three
// steps:
@@ -9206,16 +9412,16 @@
// requires that we be able to compute the names visible in the libraries being resolved,
// which in turn requires that we have resolved the import directives.
//
- buildElementModels();
+ _buildElementModels();
instrumentation.metric3("buildElementModels", "complete");
LibraryElement coreElement = _coreLibrary.libraryElement;
if (coreElement == null) {
throw new AnalysisException.con1("Could not resolve dart:core");
}
- buildDirectiveModels();
+ _buildDirectiveModels();
instrumentation.metric3("buildDirectiveModels", "complete");
_typeProvider = new TypeProviderImpl(coreElement);
- buildTypeHierarchies();
+ _buildTypeHierarchies();
instrumentation.metric3("buildTypeHierarchies", "complete");
//
// Perform resolution and type analysis.
@@ -9227,12 +9433,12 @@
// possibility is to add a parameter to this method and punt the decision to the clients.
//
//if (analyzeAll) {
- resolveReferencesAndTypes();
+ _resolveReferencesAndTypes();
instrumentation.metric3("resolveReferencesAndTypes", "complete");
//} else {
// resolveReferencesAndTypes(targetLibrary);
//}
- performConstantEvaluation();
+ _performConstantEvaluation();
instrumentation.metric3("performConstantEvaluation", "complete");
instrumentation.metric2("librariesInCycles", _librariesInCycles.length);
for (Library lib in _librariesInCycles) {
@@ -9245,13 +9451,27 @@
}
/**
+ * Create an object to represent the information about the library defined by the compilation unit
+ * with the given source.
+ *
+ * @param librarySource the source of the library's defining compilation unit
+ * @return the library object that was created
+ * @throws AnalysisException if the library source is not valid
+ */
+ Library createLibrary(Source librarySource) {
+ Library library = new Library(analysisContext, _errorListener, librarySource);
+ _libraryMap[librarySource] = library;
+ return library;
+ }
+
+ /**
* Add a dependency to the given map from the referencing library to the referenced library.
*
* @param dependencyMap the map to which the dependency is to be added
* @param referencingLibrary the library that references the referenced library
* @param referencedLibrary the library referenced by the referencing library
*/
- void addDependencyToMap(Map<Library, List<Library>> dependencyMap, Library referencingLibrary, Library referencedLibrary) {
+ void _addDependencyToMap(Map<Library, List<Library>> dependencyMap, Library referencingLibrary, Library referencedLibrary) {
List<Library> dependentLibraries = dependencyMap[referencedLibrary];
if (dependentLibraries == null) {
dependentLibraries = new List<Library>();
@@ -9270,12 +9490,12 @@
* @param dependencyMap a table mapping libraries to the collection of libraries from which those
* libraries are referenced
*/
- void addLibrariesInCycle(Library library, Set<Library> librariesInCycle, Map<Library, List<Library>> dependencyMap) {
+ void _addLibrariesInCycle(Library library, Set<Library> librariesInCycle, Map<Library, List<Library>> dependencyMap) {
if (librariesInCycle.add(library)) {
List<Library> dependentLibraries = dependencyMap[library];
if (dependentLibraries != null) {
for (Library dependentLibrary in dependentLibraries) {
- addLibrariesInCycle(dependentLibrary, librariesInCycle, dependencyMap);
+ _addLibrariesInCycle(dependentLibrary, librariesInCycle, dependencyMap);
}
}
}
@@ -9290,14 +9510,14 @@
* @param visitedLibraries the libraries that have already been visited, used to prevent infinite
* recursion
*/
- void addToDependencyMap(Library library, Map<Library, List<Library>> dependencyMap, Set<Library> visitedLibraries) {
+ void _addToDependencyMap(Library library, Map<Library, List<Library>> dependencyMap, Set<Library> visitedLibraries) {
if (visitedLibraries.add(library)) {
for (Library referencedLibrary in library.importsAndExports) {
- addDependencyToMap(dependencyMap, library, referencedLibrary);
- addToDependencyMap(referencedLibrary, dependencyMap, visitedLibraries);
+ _addDependencyToMap(dependencyMap, library, referencedLibrary);
+ _addToDependencyMap(referencedLibrary, dependencyMap, visitedLibraries);
}
if (!library.explicitlyImportsCore && library != _coreLibrary) {
- addDependencyToMap(dependencyMap, library, _coreLibrary);
+ _addDependencyToMap(dependencyMap, library, _coreLibrary);
}
}
}
@@ -9308,18 +9528,18 @@
* @param directive the directive that declares the combinators
* @return an array containing the import combinators that were built
*/
- List<NamespaceCombinator> buildCombinators(NamespaceDirective directive) {
+ List<NamespaceCombinator> _buildCombinators(NamespaceDirective directive) {
List<NamespaceCombinator> combinators = new List<NamespaceCombinator>();
for (Combinator combinator in directive.combinators) {
if (combinator is HideCombinator) {
HideElementCombinatorImpl hide = new HideElementCombinatorImpl();
- hide.hiddenNames = getIdentifiers(combinator.hiddenNames);
+ hide.hiddenNames = _getIdentifiers(combinator.hiddenNames);
combinators.add(hide);
} else {
ShowElementCombinatorImpl show = new ShowElementCombinatorImpl();
show.offset = combinator.offset;
show.end = combinator.end;
- show.shownNames = getIdentifiers((combinator as ShowCombinator).shownNames);
+ show.shownNames = _getIdentifiers((combinator as ShowCombinator).shownNames);
combinators.add(show);
}
}
@@ -9333,7 +9553,7 @@
* @throws AnalysisException if the defining compilation unit for any of the libraries could not
* be accessed
*/
- void buildDirectiveModels() {
+ void _buildDirectiveModels() {
for (Library library in _librariesInCycles) {
Map<String, PrefixElementImpl> nameToPrefixMap = new Map<String, PrefixElementImpl>();
List<ImportElement> imports = new List<ImportElement>();
@@ -9348,11 +9568,10 @@
if (importedLibrary != null) {
ImportElementImpl importElement = new ImportElementImpl(directive.offset);
StringLiteral uriLiteral = importDirective.uri;
- if (uriLiteral != null) {
- importElement.uriEnd = uriLiteral.end;
- }
+ importElement.uriOffset = uriLiteral.offset;
+ importElement.uriEnd = uriLiteral.end;
importElement.uri = library.getUri(importDirective);
- importElement.combinators = buildCombinators(importDirective);
+ importElement.combinators = _buildCombinators(importDirective);
LibraryElement importedLibraryElement = importedLibrary.libraryElement;
if (importedLibraryElement != null) {
importElement.importedLibrary = importedLibraryElement;
@@ -9384,8 +9603,11 @@
Library exportedLibrary = _libraryMap[exportedSource];
if (exportedLibrary != null) {
ExportElementImpl exportElement = new ExportElementImpl();
+ StringLiteral uriLiteral = exportDirective.uri;
+ exportElement.uriOffset = uriLiteral.offset;
+ exportElement.uriEnd = uriLiteral.end;
exportElement.uri = library.getUri(exportDirective);
- exportElement.combinators = buildCombinators(exportDirective);
+ exportElement.combinators = _buildCombinators(exportDirective);
LibraryElement exportedLibraryElement = exportedLibrary.libraryElement;
if (exportedLibraryElement != null) {
exportElement.exportedLibrary = exportedLibraryElement;
@@ -9393,7 +9615,6 @@
directive.element = exportElement;
exports.add(exportElement);
if (analysisContext.computeKindOf(exportedSource) != SourceKind.LIBRARY) {
- StringLiteral uriLiteral = exportDirective.uri;
_errorListener.onError(new AnalysisError.con2(library.librarySource, uriLiteral.offset, uriLiteral.length, CompileTimeErrorCode.EXPORT_OF_NON_LIBRARY, [uriLiteral.toSource()]));
}
}
@@ -9425,7 +9646,7 @@
*
* @throws AnalysisException if any of the element models cannot be built
*/
- void buildElementModels() {
+ void _buildElementModels() {
for (Library library in _librariesInCycles) {
LibraryElementBuilder builder = new LibraryElementBuilder(this);
LibraryElementImpl libraryElement = builder.buildLibrary(library);
@@ -9439,7 +9660,7 @@
*
* @throws AnalysisException if any of the type hierarchies could not be resolved
*/
- void buildTypeHierarchies() {
+ void _buildTypeHierarchies() {
TimeCounter_TimeCounterHandle timeCounter = PerformanceStatistics.resolve.start();
try {
for (Library library in _librariesInCycles) {
@@ -9464,9 +9685,9 @@
*
* @param library the library currently being added to the dependency map
*/
- Map<Library, List<Library>> computeDependencyMap(Library library) {
+ Map<Library, List<Library>> _computeDependencyMap(Library library) {
Map<Library, List<Library>> dependencyMap = new Map<Library, List<Library>>();
- addToDependencyMap(library, dependencyMap, new Set<Library>());
+ _addToDependencyMap(library, dependencyMap, new Set<Library>());
return dependencyMap;
}
@@ -9477,24 +9698,24 @@
* @param library the library to be processed to find libraries that have not yet been traversed
* @throws AnalysisException if some portion of the library graph could not be traversed
*/
- void computeEmbeddedLibraryDependencies(Library library, CompilationUnit unit) {
+ void _computeEmbeddedLibraryDependencies(Library library, CompilationUnit unit) {
Source librarySource = library.librarySource;
Set<Source> exportedSources = new Set<Source>();
Set<Source> importedSources = new Set<Source>();
for (Directive directive in unit.directives) {
if (directive is ExportDirective) {
- Source exportSource = resolveSource(librarySource, directive);
+ Source exportSource = _resolveSource(librarySource, directive);
if (exportSource != null) {
exportedSources.add(exportSource);
}
} else if (directive is ImportDirective) {
- Source importSource = resolveSource(librarySource, directive);
+ Source importSource = _resolveSource(librarySource, directive);
if (importSource != null) {
importedSources.add(importSource);
}
}
}
- computeLibraryDependenciesFromDirectives(library, new List.from(importedSources), new List.from(exportedSources));
+ _computeLibraryDependenciesFromDirectives(library, new List.from(importedSources), new List.from(exportedSources));
}
/**
@@ -9505,10 +9726,10 @@
* @return all of the libraries referenced by the given library that have a circular reference
* back to the given library
*/
- Set<Library> computeLibrariesInCycles(Library library) {
- Map<Library, List<Library>> dependencyMap = computeDependencyMap(library);
+ Set<Library> _computeLibrariesInCycles(Library library) {
+ Map<Library, List<Library>> dependencyMap = _computeDependencyMap(library);
Set<Library> librariesInCycle = new Set<Library>();
- addLibrariesInCycle(library, librariesInCycle, dependencyMap);
+ _addLibrariesInCycle(library, librariesInCycle, dependencyMap);
return librariesInCycle;
}
@@ -9519,9 +9740,9 @@
* @param library the library to be processed to find libraries that have not yet been traversed
* @throws AnalysisException if some portion of the library graph could not be traversed
*/
- void computeLibraryDependencies(Library library) {
+ void _computeLibraryDependencies(Library library) {
Source librarySource = library.librarySource;
- computeLibraryDependenciesFromDirectives(library, analysisContext.computeImportedLibraries(librarySource), analysisContext.computeExportedLibraries(librarySource));
+ _computeLibraryDependenciesFromDirectives(library, analysisContext.computeImportedLibraries(librarySource), analysisContext.computeExportedLibraries(librarySource));
}
/**
@@ -9533,7 +9754,7 @@
* @param exportedSources an array containing the sources that are exported from the given library
* @throws AnalysisException if some portion of the library graph could not be traversed
*/
- void computeLibraryDependenciesFromDirectives(Library library, List<Source> importedSources, List<Source> exportedSources) {
+ void _computeLibraryDependenciesFromDirectives(Library library, List<Source> importedSources, List<Source> exportedSources) {
List<Library> importedLibraries = new List<Library>();
bool explicitlyImportsCore = false;
for (Source importedSource in importedSources) {
@@ -9542,9 +9763,9 @@
}
Library importedLibrary = _libraryMap[importedSource];
if (importedLibrary == null) {
- importedLibrary = createLibraryOrNull(importedSource);
+ importedLibrary = _createLibraryOrNull(importedSource);
if (importedLibrary != null) {
- computeLibraryDependencies(importedLibrary);
+ _computeLibraryDependencies(importedLibrary);
}
}
if (importedLibrary != null) {
@@ -9556,9 +9777,9 @@
for (Source exportedSource in exportedSources) {
Library exportedLibrary = _libraryMap[exportedSource];
if (exportedLibrary == null) {
- exportedLibrary = createLibraryOrNull(exportedSource);
+ exportedLibrary = _createLibraryOrNull(exportedSource);
if (exportedLibrary != null) {
- computeLibraryDependencies(exportedLibrary);
+ _computeLibraryDependencies(exportedLibrary);
}
}
if (exportedLibrary != null) {
@@ -9570,9 +9791,9 @@
if (!explicitlyImportsCore && _coreLibrarySource != library.librarySource) {
Library importedLibrary = _libraryMap[_coreLibrarySource];
if (importedLibrary == null) {
- importedLibrary = createLibraryOrNull(_coreLibrarySource);
+ importedLibrary = _createLibraryOrNull(_coreLibrarySource);
if (importedLibrary != null) {
- computeLibraryDependencies(importedLibrary);
+ _computeLibraryDependencies(importedLibrary);
}
}
}
@@ -9580,27 +9801,13 @@
/**
* Create an object to represent the information about the library defined by the compilation unit
- * with the given source.
- *
- * @param librarySource the source of the library's defining compilation unit
- * @return the library object that was created
- * @throws AnalysisException if the library source is not valid
- */
- Library createLibrary(Source librarySource) {
- Library library = new Library(analysisContext, _errorListener, librarySource);
- _libraryMap[librarySource] = library;
- return library;
- }
-
- /**
- * Create an object to represent the information about the library defined by the compilation unit
* with the given source. Return the library object that was created, or `null` if the
* source is not valid.
*
* @param librarySource the source of the library's defining compilation unit
* @return the library object that was created
*/
- Library createLibraryOrNull(Source librarySource) {
+ Library _createLibraryOrNull(Source librarySource) {
if (!analysisContext.exists(librarySource)) {
return null;
}
@@ -9620,7 +9827,7 @@
* @return the library object that was created
* @throws AnalysisException if the library source is not valid
*/
- Library createLibraryWithUnit(Source librarySource, int modificationStamp, CompilationUnit unit) {
+ Library _createLibraryWithUnit(Source librarySource, int modificationStamp, CompilationUnit unit) {
Library library = new Library(analysisContext, _errorListener, librarySource);
library.setDefiningCompilationUnit(modificationStamp, unit);
_libraryMap[librarySource] = library;
@@ -9633,7 +9840,7 @@
* @param names the AST nodes representing the identifiers
* @return the lexical identifiers associated with the nodes in the list
*/
- List<String> getIdentifiers(NodeList<SimpleIdentifier> names) {
+ List<String> _getIdentifiers(NodeList<SimpleIdentifier> names) {
int count = names.length;
List<String> identifiers = new List<String>(count);
for (int i = 0; i < count; i++) {
@@ -9645,7 +9852,7 @@
/**
* Compute a value for all of the constants in the libraries being analyzed.
*/
- void performConstantEvaluation() {
+ void _performConstantEvaluation() {
TimeCounter_TimeCounterHandle timeCounter = PerformanceStatistics.resolve.start();
try {
ConstantValueComputer computer = new ConstantValueComputer(_typeProvider);
@@ -9673,9 +9880,9 @@
* @throws AnalysisException if any of the identifiers could not be resolved or if any of the
* libraries could not have their types analyzed
*/
- void resolveReferencesAndTypes() {
+ void _resolveReferencesAndTypes() {
for (Library library in _librariesInCycles) {
- resolveReferencesAndTypesInLibrary(library);
+ _resolveReferencesAndTypesInLibrary(library);
}
}
@@ -9686,7 +9893,7 @@
* @throws AnalysisException if any of the identifiers could not be resolved or if the types in
* the library cannot be analyzed
*/
- void resolveReferencesAndTypesInLibrary(Library library) {
+ void _resolveReferencesAndTypesInLibrary(Library library) {
TimeCounter_TimeCounterHandle timeCounter = PerformanceStatistics.resolve.start();
try {
for (Source source in library.compilationUnitSources) {
@@ -9723,7 +9930,7 @@
* @param directive the directive which URI should be resolved
* @return the result of resolving the URI against the URI of the library
*/
- Source resolveSource(Source librarySource, UriBasedDirective directive) {
+ Source _resolveSource(Source librarySource, UriBasedDirective directive) {
StringLiteral uriLiteral = directive.uri;
if (uriLiteral is StringInterpolation) {
return null;
@@ -9768,14 +9975,14 @@
* @param initialCapacity the initial capacity
*/
MemberMap.con1(int initialCapacity) {
- initArrays(initialCapacity);
+ _initArrays(initialCapacity);
}
/**
* Copy constructor.
*/
MemberMap.con2(MemberMap memberMap) {
- initArrays(memberMap._size + 5);
+ _initArrays(memberMap._size + 5);
for (int i = 0; i < memberMap._size; i++) {
_keys[i] = memberMap._keys[i];
_values[i] = memberMap._values[i];
@@ -9894,7 +10101,7 @@
/**
* Initializes [keys] and [values].
*/
- void initArrays(int initialCapacity) {
+ void _initArrays(int initialCapacity) {
_keys = new List<String>(initialCapacity);
_values = new List<ExecutableElement>(initialCapacity);
}
@@ -10059,18 +10266,21 @@
List<ProxyConditionalAnalysisError> get proxyConditionalAnalysisErrors => _proxyConditionalAnalysisErrors;
+ @override
Object visitAsExpression(AsExpression node) {
super.visitAsExpression(node);
overrideExpression(node.expression, node.type.type);
return null;
}
+ @override
Object visitAssertStatement(AssertStatement node) {
super.visitAssertStatement(node);
- propagateTrueState(node.condition);
+ _propagateTrueState(node.condition);
return null;
}
+ @override
Object visitBinaryExpression(BinaryExpression node) {
sc.TokenType operatorType = node.operator.type;
Expression leftOperand = node.leftOperand;
@@ -10081,12 +10291,12 @@
try {
_overrideManager.enterScope();
_promoteManager.enterScope();
- propagateTrueState(leftOperand);
+ _propagateTrueState(leftOperand);
// Type promotion.
- promoteTypes(leftOperand);
- clearTypePromotionsIfPotentiallyMutatedIn(leftOperand);
- clearTypePromotionsIfPotentiallyMutatedIn(rightOperand);
- clearTypePromotionsIfAccessedInClosureAndProtentiallyMutated(rightOperand);
+ _promoteTypes(leftOperand);
+ _clearTypePromotionsIfPotentiallyMutatedIn(leftOperand);
+ _clearTypePromotionsIfPotentiallyMutatedIn(rightOperand);
+ _clearTypePromotionsIfAccessedInClosureAndProtentiallyMutated(rightOperand);
// Visit right operand.
rightOperand.accept(this);
} finally {
@@ -10099,7 +10309,7 @@
if (rightOperand != null) {
try {
_overrideManager.enterScope();
- propagateFalseState(leftOperand);
+ _propagateFalseState(leftOperand);
rightOperand.accept(this);
} finally {
_overrideManager.exitScope();
@@ -10114,6 +10324,7 @@
return null;
}
+ @override
Object visitBlockFunctionBody(BlockFunctionBody node) {
safelyVisit(_commentBeforeFunction);
try {
@@ -10125,6 +10336,7 @@
return null;
}
+ @override
Object visitBreakStatement(BreakStatement node) {
//
// We do not visit the label because it needs to be visited in the context of the statement.
@@ -10134,6 +10346,7 @@
return null;
}
+ @override
Object visitClassDeclaration(ClassDeclaration node) {
ClassElement outerType = _enclosingClass;
try {
@@ -10147,6 +10360,7 @@
return null;
}
+ @override
Object visitComment(Comment node) {
if (node.parent is FunctionDeclaration || node.parent is ConstructorDeclaration || node.parent is MethodDeclaration) {
if (node != _commentBeforeFunction) {
@@ -10159,6 +10373,7 @@
return null;
}
+ @override
Object visitCommentReference(CommentReference node) {
//
// We do not visit the identifier because it needs to be visited in the context of the reference.
@@ -10168,6 +10383,7 @@
return null;
}
+ @override
Object visitCompilationUnit(CompilationUnit node) {
//
// TODO(brianwilkerson) The goal of the code below is to visit the declarations in such an
@@ -10206,6 +10422,7 @@
return null;
}
+ @override
Object visitConditionalExpression(ConditionalExpression node) {
Expression condition = node.condition;
safelyVisit(condition);
@@ -10214,11 +10431,11 @@
try {
_overrideManager.enterScope();
_promoteManager.enterScope();
- propagateTrueState(condition);
+ _propagateTrueState(condition);
// Type promotion.
- promoteTypes(condition);
- clearTypePromotionsIfPotentiallyMutatedIn(thenExpression);
- clearTypePromotionsIfAccessedInClosureAndProtentiallyMutated(thenExpression);
+ _promoteTypes(condition);
+ _clearTypePromotionsIfPotentiallyMutatedIn(thenExpression);
+ _clearTypePromotionsIfAccessedInClosureAndProtentiallyMutated(thenExpression);
// Visit "then" expression.
thenExpression.accept(this);
} finally {
@@ -10230,7 +10447,7 @@
if (elseExpression != null) {
try {
_overrideManager.enterScope();
- propagateFalseState(condition);
+ _propagateFalseState(condition);
elseExpression.accept(this);
} finally {
_overrideManager.exitScope();
@@ -10238,18 +10455,19 @@
}
node.accept(_elementResolver);
node.accept(_typeAnalyzer);
- bool thenIsAbrupt = isAbruptTerminationExpression(thenExpression);
- bool elseIsAbrupt = isAbruptTerminationExpression(elseExpression);
+ bool thenIsAbrupt = _isAbruptTerminationExpression(thenExpression);
+ bool elseIsAbrupt = _isAbruptTerminationExpression(elseExpression);
if (elseIsAbrupt && !thenIsAbrupt) {
- propagateTrueState(condition);
- propagateState(thenExpression);
+ _propagateTrueState(condition);
+ _propagateState(thenExpression);
} else if (thenIsAbrupt && !elseIsAbrupt) {
- propagateFalseState(condition);
- propagateState(elseExpression);
+ _propagateFalseState(condition);
+ _propagateState(elseExpression);
}
return null;
}
+ @override
Object visitConstructorDeclaration(ConstructorDeclaration node) {
ExecutableElement outerFunction = _enclosingFunction;
try {
@@ -10261,6 +10479,7 @@
return null;
}
+ @override
Object visitConstructorFieldInitializer(ConstructorFieldInitializer node) {
//
// We visit the expression, but do not visit the field name because it needs to be visited in
@@ -10272,6 +10491,7 @@
return null;
}
+ @override
Object visitConstructorName(ConstructorName node) {
//
// We do not visit either the type name, because it won't be visited anyway, or the name,
@@ -10282,6 +10502,7 @@
return null;
}
+ @override
Object visitContinueStatement(ContinueStatement node) {
//
// We do not visit the label because it needs to be visited in the context of the statement.
@@ -10291,6 +10512,7 @@
return null;
}
+ @override
Object visitDoStatement(DoStatement node) {
try {
_overrideManager.enterScope();
@@ -10303,11 +10525,13 @@
return null;
}
+ @override
Object visitEmptyFunctionBody(EmptyFunctionBody node) {
safelyVisit(_commentBeforeFunction);
return super.visitEmptyFunctionBody(node);
}
+ @override
Object visitExpressionFunctionBody(ExpressionFunctionBody node) {
safelyVisit(_commentBeforeFunction);
try {
@@ -10319,18 +10543,20 @@
return null;
}
+ @override
Object visitFieldDeclaration(FieldDeclaration node) {
try {
_overrideManager.enterScope();
super.visitFieldDeclaration(node);
} finally {
- Map<Element, Type2> overrides = _overrideManager.captureOverrides(node.fields);
+ Map<Element, DartType> overrides = _overrideManager.captureOverrides(node.fields);
_overrideManager.exitScope();
_overrideManager.applyOverrides(overrides);
}
return null;
}
+ @override
Object visitForEachStatement(ForEachStatement node) {
try {
_overrideManager.enterScope();
@@ -10341,6 +10567,7 @@
return null;
}
+ @override
Object visitForStatement(ForStatement node) {
try {
_overrideManager.enterScope();
@@ -10351,6 +10578,7 @@
return null;
}
+ @override
Object visitFunctionDeclaration(FunctionDeclaration node) {
ExecutableElement outerFunction = _enclosingFunction;
try {
@@ -10363,6 +10591,7 @@
return null;
}
+ @override
Object visitFunctionExpression(FunctionExpression node) {
ExecutableElement outerFunction = _enclosingFunction;
try {
@@ -10376,31 +10605,34 @@
return null;
}
+ @override
Object visitFunctionExpressionInvocation(FunctionExpressionInvocation node) {
safelyVisit(node.function);
node.accept(_elementResolver);
- inferFunctionExpressionsParametersTypes(node.argumentList);
+ _inferFunctionExpressionsParametersTypes(node.argumentList);
safelyVisit(node.argumentList);
node.accept(_typeAnalyzer);
return null;
}
+ @override
Object visitHideCombinator(HideCombinator node) => null;
+ @override
Object visitIfStatement(IfStatement node) {
Expression condition = node.condition;
safelyVisit(condition);
- Map<Element, Type2> thenOverrides = null;
+ Map<Element, DartType> thenOverrides = null;
Statement thenStatement = node.thenStatement;
if (thenStatement != null) {
try {
_overrideManager.enterScope();
_promoteManager.enterScope();
- propagateTrueState(condition);
+ _propagateTrueState(condition);
// Type promotion.
- promoteTypes(condition);
- clearTypePromotionsIfPotentiallyMutatedIn(thenStatement);
- clearTypePromotionsIfAccessedInClosureAndProtentiallyMutated(thenStatement);
+ _promoteTypes(condition);
+ _clearTypePromotionsIfPotentiallyMutatedIn(thenStatement);
+ _clearTypePromotionsIfAccessedInClosureAndProtentiallyMutated(thenStatement);
// Visit "then".
visitStatementInScope(thenStatement);
} finally {
@@ -10409,12 +10641,12 @@
_promoteManager.exitScope();
}
}
- Map<Element, Type2> elseOverrides = null;
+ Map<Element, DartType> elseOverrides = null;
Statement elseStatement = node.elseStatement;
if (elseStatement != null) {
try {
_overrideManager.enterScope();
- propagateFalseState(condition);
+ _propagateFalseState(condition);
visitStatementInScope(elseStatement);
} finally {
elseOverrides = _overrideManager.captureLocalOverrides();
@@ -10423,15 +10655,15 @@
}
node.accept(_elementResolver);
node.accept(_typeAnalyzer);
- bool thenIsAbrupt = isAbruptTerminationStatement(thenStatement);
- bool elseIsAbrupt = isAbruptTerminationStatement(elseStatement);
+ bool thenIsAbrupt = _isAbruptTerminationStatement(thenStatement);
+ bool elseIsAbrupt = _isAbruptTerminationStatement(elseStatement);
if (elseIsAbrupt && !thenIsAbrupt) {
- propagateTrueState(condition);
+ _propagateTrueState(condition);
if (thenOverrides != null) {
_overrideManager.applyOverrides(thenOverrides);
}
} else if (thenIsAbrupt && !elseIsAbrupt) {
- propagateFalseState(condition);
+ _propagateFalseState(condition);
if (elseOverrides != null) {
_overrideManager.applyOverrides(elseOverrides);
}
@@ -10439,10 +10671,13 @@
return null;
}
+ @override
Object visitLabel(Label node) => null;
+ @override
Object visitLibraryIdentifier(LibraryIdentifier node) => null;
+ @override
Object visitMethodDeclaration(MethodDeclaration node) {
ExecutableElement outerFunction = _enclosingFunction;
try {
@@ -10454,6 +10689,7 @@
return null;
}
+ @override
Object visitMethodInvocation(MethodInvocation node) {
//
// We visit the target and argument list, but do not visit the method name because it needs to
@@ -10461,12 +10697,13 @@
//
safelyVisit(node.target);
node.accept(_elementResolver);
- inferFunctionExpressionsParametersTypes(node.argumentList);
+ _inferFunctionExpressionsParametersTypes(node.argumentList);
safelyVisit(node.argumentList);
node.accept(_typeAnalyzer);
return null;
}
+ @override
Object visitNode(AstNode node) {
node.visitChildren(this);
node.accept(_elementResolver);
@@ -10474,6 +10711,7 @@
return null;
}
+ @override
Object visitPrefixedIdentifier(PrefixedIdentifier node) {
//
// We visit the prefix, but do not visit the identifier because it needs to be visited in the
@@ -10485,6 +10723,7 @@
return null;
}
+ @override
Object visitPropertyAccess(PropertyAccess node) {
//
// We visit the target, but do not visit the property name because it needs to be visited in the
@@ -10496,6 +10735,7 @@
return null;
}
+ @override
Object visitRedirectingConstructorInvocation(RedirectingConstructorInvocation node) {
//
// We visit the argument list, but do not visit the optional identifier because it needs to be
@@ -10507,8 +10747,10 @@
return null;
}
+ @override
Object visitShowCombinator(ShowCombinator node) => null;
+ @override
Object visitSuperConstructorInvocation(SuperConstructorInvocation node) {
//
// We visit the argument list, but do not visit the optional identifier because it needs to be
@@ -10520,6 +10762,7 @@
return null;
}
+ @override
Object visitSwitchCase(SwitchCase node) {
try {
_overrideManager.enterScope();
@@ -10530,6 +10773,7 @@
return null;
}
+ @override
Object visitSwitchDefault(SwitchDefault node) {
try {
_overrideManager.enterScope();
@@ -10540,20 +10784,23 @@
return null;
}
+ @override
Object visitTopLevelVariableDeclaration(TopLevelVariableDeclaration node) {
try {
_overrideManager.enterScope();
super.visitTopLevelVariableDeclaration(node);
} finally {
- Map<Element, Type2> overrides = _overrideManager.captureOverrides(node.variables);
+ Map<Element, DartType> overrides = _overrideManager.captureOverrides(node.variables);
_overrideManager.exitScope();
_overrideManager.applyOverrides(overrides);
}
return null;
}
+ @override
Object visitTypeName(TypeName node) => null;
+ @override
Object visitWhileStatement(WhileStatement node) {
Expression condition = node.condition;
safelyVisit(condition);
@@ -10561,7 +10808,7 @@
if (body != null) {
try {
_overrideManager.enterScope();
- propagateTrueState(condition);
+ _propagateTrueState(condition);
visitStatementInScope(body);
} finally {
_overrideManager.exitScope();
@@ -10672,7 +10919,7 @@
* might be overridden
* @param potentialType the potential type of the elements
*/
- void overrideExpression(Expression expression, Type2 potentialType) {
+ void overrideExpression(Expression expression, DartType potentialType) {
VariableElement element = getOverridableStaticElement(expression);
if (element != null) {
overrideVariable(element, potentialType);
@@ -10691,7 +10938,7 @@
* @param element the element whose type might be overridden
* @param potentialType the potential type of the element
*/
- void overrideVariable(VariableElement element, Type2 potentialType) {
+ void overrideVariable(VariableElement element, DartType potentialType) {
if (potentialType == null || potentialType.isBottom) {
return;
}
@@ -10701,7 +10948,7 @@
return;
}
}
- Type2 currentType = getBestType(element);
+ DartType currentType = _getBestType(element);
if (currentType == null || !currentType.isMoreSpecificThan(potentialType)) {
_overrideManager.setType(element, potentialType);
}
@@ -10744,6 +10991,7 @@
_proxyConditionalAnalysisErrors.add(new ProxyConditionalAnalysisError(enclosingElement, new AnalysisError.con2(source, token.offset, token.length, errorCode, arguments)));
}
+ @override
void visitForEachStatementInScope(ForEachStatement node) {
//
// We visit the iterator before the loop variable because the loop variable cannot be in scope
@@ -10762,16 +11010,16 @@
if (loopVariable != null && iterator != null) {
LocalVariableElement loopElement = loopVariable.element;
if (loopElement != null) {
- Type2 iteratorElementType = getIteratorElementType(iterator);
+ DartType iteratorElementType = _getIteratorElementType(iterator);
overrideVariable(loopElement, iteratorElementType);
- recordPropagatedType(loopVariable.identifier, iteratorElementType);
+ _recordPropagatedType(loopVariable.identifier, iteratorElementType);
}
} else if (identifier != null && iterator != null) {
Element identifierElement = identifier.staticElement;
if (identifierElement is VariableElement) {
- Type2 iteratorElementType = getIteratorElementType(iterator);
+ DartType iteratorElementType = _getIteratorElementType(iterator);
overrideVariable(identifierElement, iteratorElementType);
- recordPropagatedType(identifier, iteratorElementType);
+ _recordPropagatedType(identifier, iteratorElementType);
}
}
visitStatementInScope(body);
@@ -10783,13 +11031,14 @@
node.accept(_typeAnalyzer);
}
+ @override
void visitForStatementInScope(ForStatement node) {
safelyVisit(node.variables);
safelyVisit(node.initialization);
safelyVisit(node.condition);
_overrideManager.enterScope();
try {
- propagateTrueState(node.condition);
+ _propagateTrueState(node.condition);
visitStatementInScope(node.body);
node.updaters.accept(this);
} finally {
@@ -10804,10 +11053,10 @@
* If the variable <i>v</i> is accessed by a closure in <i>s<sub>1</sub></i> then the variable
* <i>v</i> is not potentially mutated anywhere in the scope of <i>v</i>.
*/
- void clearTypePromotionsIfAccessedInClosureAndProtentiallyMutated(AstNode target) {
+ void _clearTypePromotionsIfAccessedInClosureAndProtentiallyMutated(AstNode target) {
for (Element element in _promoteManager.promotedElements) {
if ((element as VariableElementImpl).isPotentiallyMutatedInScope) {
- if (isVariableAccessedInClosure(element, target)) {
+ if (_isVariableAccessedInClosure(element, target)) {
_promoteManager.setType(element, null);
}
}
@@ -10820,9 +11069,9 @@
*
* <i>v</i> is not potentially mutated in <i>s<sub>1</sub></i> or within a closure.
*/
- void clearTypePromotionsIfPotentiallyMutatedIn(AstNode target) {
+ void _clearTypePromotionsIfPotentiallyMutatedIn(AstNode target) {
for (Element element in _promoteManager.promotedElements) {
- if (isVariablePotentiallyMutatedIn(element, target)) {
+ if (_isVariablePotentiallyMutatedIn(element, target)) {
_promoteManager.setType(element, null);
}
}
@@ -10835,8 +11084,8 @@
* @param element the element for which type information is to be returned
* @return the best type information available for the given element
*/
- Type2 getBestType(Element element) {
- Type2 bestType = _overrideManager.getType(element);
+ DartType _getBestType(Element element) {
+ DartType bestType = _overrideManager.getType(element);
if (bestType == null) {
if (element is LocalVariableElement) {
bestType = element.type;
@@ -10855,8 +11104,8 @@
* @param iterator the iterator for a for-each statement
* @return the type of objects that will be assigned to the loop variable
*/
- Type2 getIteratorElementType(Expression iteratorExpression) {
- Type2 expressionType = iteratorExpression.staticType;
+ DartType _getIteratorElementType(Expression iteratorExpression) {
+ DartType expressionType = iteratorExpression.staticType;
if (expressionType is InterfaceType) {
InterfaceType interfaceType = expressionType;
FunctionType iteratorFunction = _inheritanceManager.lookupMemberType(interfaceType, "iterator");
@@ -10864,7 +11113,7 @@
// TODO(brianwilkerson) Should we report this error?
return null;
}
- Type2 iteratorType = iteratorFunction.returnType;
+ DartType iteratorType = iteratorFunction.returnType;
if (iteratorType is InterfaceType) {
InterfaceType iteratorInterfaceType = iteratorType;
FunctionType currentFunction = _inheritanceManager.lookupMemberType(iteratorInterfaceType, "current");
@@ -10882,7 +11131,7 @@
* If given "mayBeClosure" is [FunctionExpression] without explicit parameters types and its
* required type is [FunctionType], then infer parameters types from [FunctionType].
*/
- void inferFunctionExpressionParametersTypes(Expression mayBeClosure, Type2 mayByFunctionType) {
+ void _inferFunctionExpressionParametersTypes(Expression mayBeClosure, DartType mayByFunctionType) {
// prepare closure
if (mayBeClosure is! FunctionExpression) {
return;
@@ -10901,9 +11150,9 @@
for (int i = 0; i < parameters.length && i < expectedParameters.length; i++) {
FormalParameter parameter = parameters[i];
ParameterElement element = parameter.element;
- Type2 currentType = getBestType(element);
+ DartType currentType = _getBestType(element);
// may be override the type
- Type2 expectedType = expectedParameters[i].type;
+ DartType expectedType = expectedParameters[i].type;
if (currentType == null || expectedType.isMoreSpecificThan(currentType)) {
_overrideManager.setType(element, expectedType);
}
@@ -10913,14 +11162,14 @@
/**
* Try to infer types of parameters of the [FunctionExpression] arguments.
*/
- void inferFunctionExpressionsParametersTypes(ArgumentList argumentList) {
+ void _inferFunctionExpressionsParametersTypes(ArgumentList argumentList) {
for (Expression argument in argumentList.arguments) {
ParameterElement parameter = argument.propagatedParameterElement;
if (parameter == null) {
parameter = argument.staticParameterElement;
}
if (parameter != null) {
- inferFunctionExpressionParametersTypes(argument, parameter.type);
+ _inferFunctionExpressionParametersTypes(argument, parameter.type);
}
}
}
@@ -10932,7 +11181,7 @@
* @param expression the expression being tested
* @return `true` if the given expression terminates abruptly
*/
- bool isAbruptTerminationExpression(Expression expression) {
+ bool _isAbruptTerminationExpression(Expression expression) {
// TODO(brianwilkerson) This needs to be significantly improved. Ideally we would eventually
// turn this into a method on Expression that returns a termination indication (normal, abrupt
// with no exception, abrupt with an exception).
@@ -10949,21 +11198,21 @@
* @param statement the statement being tested
* @return `true` if the given statement terminates abruptly
*/
- bool isAbruptTerminationStatement(Statement statement) {
+ bool _isAbruptTerminationStatement(Statement statement) {
// TODO(brianwilkerson) This needs to be significantly improved. Ideally we would eventually
// turn this into a method on Statement that returns a termination indication (normal, abrupt
// with no exception, abrupt with an exception).
if (statement is ReturnStatement || statement is BreakStatement || statement is ContinueStatement) {
return true;
} else if (statement is ExpressionStatement) {
- return isAbruptTerminationExpression(statement.expression);
+ return _isAbruptTerminationExpression(statement.expression);
} else if (statement is Block) {
NodeList<Statement> statements = statement.statements;
int size = statements.length;
if (size == 0) {
return false;
}
- return isAbruptTerminationStatement(statements[size - 1]);
+ return _isAbruptTerminationStatement(statements[size - 1]);
}
return false;
}
@@ -10977,7 +11226,7 @@
* @param target the [AstNode] to check within
* @return `true` if this variable is potentially mutated somewhere in the given ASTNode
*/
- bool isVariableAccessedInClosure(Element variable, AstNode target) {
+ bool _isVariableAccessedInClosure(Element variable, AstNode target) {
List<bool> result = [false];
target.accept(new RecursiveAstVisitor_ResolverVisitor_isVariableAccessedInClosure(result, variable));
return result[0];
@@ -10991,7 +11240,7 @@
* @param target the [AstNode] to check within
* @return `true` if this variable is potentially mutated somewhere in the given ASTNode
*/
- bool isVariablePotentiallyMutatedIn(Element variable, AstNode target) {
+ bool _isVariablePotentiallyMutatedIn(Element variable, AstNode target) {
List<bool> result = [false];
target.accept(new RecursiveAstVisitor_ResolverVisitor_isVariablePotentiallyMutatedIn(result, variable));
return result[0];
@@ -11006,7 +11255,7 @@
* promoted
* @param potentialType the potential type of the elements
*/
- void promote(Expression expression, Type2 potentialType) {
+ void _promote(Expression expression, DartType potentialType) {
VariableElement element = getPromotionStaticElement(expression);
if (element != null) {
// may be mutated somewhere in closure
@@ -11014,7 +11263,7 @@
return;
}
// prepare current variable type
- Type2 type = _promoteManager.getType(element);
+ DartType type = _promoteManager.getType(element);
if (type == null) {
type = expression.staticType;
}
@@ -11038,23 +11287,23 @@
/**
* Promotes type information using given condition.
*/
- void promoteTypes(Expression condition) {
+ void _promoteTypes(Expression condition) {
if (condition is BinaryExpression) {
BinaryExpression binary = condition;
if (identical(binary.operator.type, sc.TokenType.AMPERSAND_AMPERSAND)) {
Expression left = binary.leftOperand;
Expression right = binary.rightOperand;
- promoteTypes(left);
- promoteTypes(right);
- clearTypePromotionsIfPotentiallyMutatedIn(right);
+ _promoteTypes(left);
+ _promoteTypes(right);
+ _clearTypePromotionsIfPotentiallyMutatedIn(right);
}
} else if (condition is IsExpression) {
IsExpression is2 = condition;
if (is2.notOperator == null) {
- promote(is2.expression, is2.type.type);
+ _promote(is2.expression, is2.type.type);
}
} else if (condition is ParenthesizedExpression) {
- promoteTypes(condition.expression);
+ _promoteTypes(condition.expression);
}
}
@@ -11064,12 +11313,12 @@
*
* @param condition the condition that will have evaluated to 'false'
*/
- void propagateFalseState(Expression condition) {
+ void _propagateFalseState(Expression condition) {
if (condition is BinaryExpression) {
BinaryExpression binary = condition;
if (identical(binary.operator.type, sc.TokenType.BAR_BAR)) {
- propagateFalseState(binary.leftOperand);
- propagateFalseState(binary.rightOperand);
+ _propagateFalseState(binary.leftOperand);
+ _propagateFalseState(binary.rightOperand);
}
} else if (condition is IsExpression) {
IsExpression is2 = condition;
@@ -11079,10 +11328,10 @@
} else if (condition is PrefixExpression) {
PrefixExpression prefix = condition;
if (identical(prefix.operator.type, sc.TokenType.BANG)) {
- propagateTrueState(prefix.operand);
+ _propagateTrueState(prefix.operand);
}
} else if (condition is ParenthesizedExpression) {
- propagateFalseState(condition.expression);
+ _propagateFalseState(condition.expression);
}
}
@@ -11092,7 +11341,7 @@
*
* @param expression the expression that will have been evaluated
*/
- void propagateState(Expression expression) {
+ void _propagateState(Expression expression) {
}
/**
@@ -11101,12 +11350,12 @@
*
* @param condition the condition that will have evaluated to 'true'
*/
- void propagateTrueState(Expression condition) {
+ void _propagateTrueState(Expression condition) {
if (condition is BinaryExpression) {
BinaryExpression binary = condition;
if (identical(binary.operator.type, sc.TokenType.AMPERSAND_AMPERSAND)) {
- propagateTrueState(binary.leftOperand);
- propagateTrueState(binary.rightOperand);
+ _propagateTrueState(binary.leftOperand);
+ _propagateTrueState(binary.rightOperand);
}
} else if (condition is IsExpression) {
IsExpression is2 = condition;
@@ -11116,10 +11365,10 @@
} else if (condition is PrefixExpression) {
PrefixExpression prefix = condition;
if (identical(prefix.operator.type, sc.TokenType.BANG)) {
- propagateFalseState(prefix.operand);
+ _propagateFalseState(prefix.operand);
}
} else if (condition is ParenthesizedExpression) {
- propagateTrueState(condition.expression);
+ _propagateTrueState(condition.expression);
}
}
@@ -11129,7 +11378,7 @@
* @param expression the node whose type is to be recorded
* @param type the propagated type of the node
*/
- void recordPropagatedType(Expression expression, Type2 type) {
+ void _recordPropagatedType(Expression expression, DartType type) {
if (type != null && !type.isDynamic) {
expression.propagatedType = type;
}
@@ -11165,6 +11414,7 @@
bool _inClosure = false;
+ @override
Object visitFunctionExpression(FunctionExpression node) {
bool inClosure = this._inClosure;
try {
@@ -11175,6 +11425,7 @@
}
}
+ @override
Object visitSimpleIdentifier(SimpleIdentifier node) {
if (result[0]) {
return null;
@@ -11193,6 +11444,7 @@
RecursiveAstVisitor_ResolverVisitor_isVariablePotentiallyMutatedIn(this.result, this.variable) : super();
+ @override
Object visitSimpleIdentifier(SimpleIdentifier node) {
if (result[0]) {
return null;
@@ -11326,11 +11578,12 @@
_errorListener.onError(analysisError);
}
+ @override
Object visitBlock(Block node) {
Scope outerScope = _nameScope;
try {
EnclosedScope enclosedScope = new EnclosedScope(_nameScope);
- hideNamesDefinedInBlock(enclosedScope, node);
+ _hideNamesDefinedInBlock(enclosedScope, node);
_nameScope = enclosedScope;
super.visitBlock(node);
} finally {
@@ -11339,6 +11592,7 @@
return null;
}
+ @override
Object visitCatchClause(CatchClause node) {
SimpleIdentifier exception = node.exceptionParameter;
if (exception != null) {
@@ -11360,6 +11614,7 @@
return null;
}
+ @override
Object visitClassDeclaration(ClassDeclaration node) {
Scope outerScope = _nameScope;
try {
@@ -11371,6 +11626,7 @@
return null;
}
+ @override
Object visitClassTypeAlias(ClassTypeAlias node) {
Scope outerScope = _nameScope;
try {
@@ -11382,6 +11638,7 @@
return null;
}
+ @override
Object visitConstructorDeclaration(ConstructorDeclaration node) {
Scope outerScope = _nameScope;
try {
@@ -11393,6 +11650,7 @@
return null;
}
+ @override
Object visitDeclaredIdentifier(DeclaredIdentifier node) {
VariableElement element = node.element;
if (element != null) {
@@ -11402,6 +11660,7 @@
return null;
}
+ @override
Object visitDoStatement(DoStatement node) {
LabelScope outerLabelScope = _labelScope;
try {
@@ -11414,6 +11673,7 @@
return null;
}
+ @override
Object visitForEachStatement(ForEachStatement node) {
Scope outerNameScope = _nameScope;
LabelScope outerLabelScope = _labelScope;
@@ -11428,6 +11688,7 @@
return null;
}
+ @override
Object visitFormalParameterList(FormalParameterList node) {
super.visitFormalParameterList(node);
// We finished resolving function signature, now include formal parameters scope.
@@ -11440,6 +11701,7 @@
return null;
}
+ @override
Object visitForStatement(ForStatement node) {
Scope outerNameScope = _nameScope;
LabelScope outerLabelScope = _labelScope;
@@ -11454,6 +11716,7 @@
return null;
}
+ @override
Object visitFunctionDeclaration(FunctionDeclaration node) {
ExecutableElement function = node.element;
Scope outerScope = _nameScope;
@@ -11469,6 +11732,7 @@
return null;
}
+ @override
Object visitFunctionExpression(FunctionExpression node) {
if (node.parent is FunctionDeclaration) {
// We have already created a function scope and don't need to do so again.
@@ -11489,6 +11753,7 @@
return null;
}
+ @override
Object visitFunctionTypeAlias(FunctionTypeAlias node) {
Scope outerScope = _nameScope;
try {
@@ -11500,6 +11765,7 @@
return null;
}
+ @override
Object visitIfStatement(IfStatement node) {
safelyVisit(node.condition);
visitStatementInScope(node.thenStatement);
@@ -11507,8 +11773,9 @@
return null;
}
+ @override
Object visitLabeledStatement(LabeledStatement node) {
- LabelScope outerScope = addScopesFor(node.labels);
+ LabelScope outerScope = _addScopesFor(node.labels);
try {
super.visitLabeledStatement(node);
} finally {
@@ -11517,6 +11784,7 @@
return null;
}
+ @override
Object visitMethodDeclaration(MethodDeclaration node) {
Scope outerScope = _nameScope;
try {
@@ -11528,6 +11796,7 @@
return null;
}
+ @override
Object visitSwitchCase(SwitchCase node) {
node.expression.accept(this);
Scope outerNameScope = _nameScope;
@@ -11540,6 +11809,7 @@
return null;
}
+ @override
Object visitSwitchDefault(SwitchDefault node) {
Scope outerNameScope = _nameScope;
try {
@@ -11551,6 +11821,7 @@
return null;
}
+ @override
Object visitSwitchStatement(SwitchStatement node) {
LabelScope outerScope = _labelScope;
try {
@@ -11569,6 +11840,7 @@
return null;
}
+ @override
Object visitVariableDeclaration(VariableDeclaration node) {
super.visitVariableDeclaration(node);
if (node.parent.parent is! TopLevelVariableDeclaration && node.parent.parent is! FieldDeclaration) {
@@ -11580,6 +11852,7 @@
return null;
}
+ @override
Object visitWhileStatement(WhileStatement node) {
LabelScope outerScope = _labelScope;
try {
@@ -11715,7 +11988,7 @@
* @param labels the labels for which new scopes are to be added
* @return the scope that was in effect before the new scopes were added
*/
- LabelScope addScopesFor(NodeList<Label> labels) {
+ LabelScope _addScopesFor(NodeList<Label> labels) {
LabelScope outerScope = _labelScope;
for (Label label in labels) {
SimpleIdentifier labelNameNode = label.label;
@@ -11731,7 +12004,7 @@
* According to the scoping rules name is hidden if block defines it, but name is defined after
* its declaration statement.
*/
- void hideNamesDefinedInBlock(EnclosedScope scope, Block block) {
+ void _hideNamesDefinedInBlock(EnclosedScope scope, Block block) {
NodeList<Statement> statements = block.statements;
int statementCount = statements.length;
for (int i = 0; i < statementCount; i++) {
@@ -11767,7 +12040,7 @@
*
* @return the table that was created
*/
- static Map<String, String> createHtmlTagToClassMap() {
+ static Map<String, String> _createHtmlTagToClassMap() {
Map<String, String> map = new Map<String, String>();
map["a"] = "AnchorElement";
map["area"] = "AreaElement";
@@ -11843,7 +12116,7 @@
/**
* The type representing the type 'dynamic'.
*/
- Type2 _dynamicType;
+ DartType _dynamicType;
/**
* The type representing the class containing the nodes being analyzed, or `null` if the
@@ -11864,13 +12137,13 @@
/**
* A table mapping [ExecutableElement]s to their propagated return types.
*/
- Map<ExecutableElement, Type2> _propagatedReturnTypes = new Map<ExecutableElement, Type2>();
+ Map<ExecutableElement, DartType> _propagatedReturnTypes = new Map<ExecutableElement, DartType>();
/**
* A table mapping HTML tag names to the names of the classes (in 'dart:html') that implement
* those tags.
*/
- static Map<String, String> _HTML_ELEMENT_TO_CLASS_MAP = createHtmlTagToClassMap();
+ static Map<String, String> _HTML_ELEMENT_TO_CLASS_MAP = _createHtmlTagToClassMap();
/**
* Initialize a newly created type analyzer.
@@ -11898,8 +12171,9 @@
* The Dart Language Specification, 12.5: <blockquote>The static type of a string literal is
* `String`.</blockquote>
*/
+ @override
Object visitAdjacentStrings(AdjacentStrings node) {
- recordStaticType(node, _typeProvider.stringType);
+ _recordStaticType(node, _typeProvider.stringType);
return null;
}
@@ -11907,8 +12181,9 @@
* The Dart Language Specification, 12.33: <blockquote>The static type of an argument definition
* test is `bool`.</blockquote>
*/
+ @override
Object visitArgumentDefinitionTest(ArgumentDefinitionTest node) {
- recordStaticType(node, _typeProvider.boolType);
+ _recordStaticType(node, _typeProvider.boolType);
return null;
}
@@ -11920,8 +12195,9 @@
*
* The static type of a cast expression <i>e as T</i> is <i>T</i>.</blockquote>
*/
+ @override
Object visitAsExpression(AsExpression node) {
- recordStaticType(node, getType(node.type));
+ _recordStaticType(node, _getType(node.type));
return null;
}
@@ -11964,30 +12240,31 @@
* e<sub>2</sub>)</i> where <i>a</i> and <i>i</i> are a variables that are not used in
* <i>e<sub>3</sub></i>.</blockquote>
*/
+ @override
Object visitAssignmentExpression(AssignmentExpression node) {
sc.TokenType operator = node.operator.type;
if (identical(operator, sc.TokenType.EQ)) {
Expression rightHandSide = node.rightHandSide;
- Type2 staticType = getStaticType(rightHandSide);
- recordStaticType(node, staticType);
- Type2 overrideType = staticType;
- Type2 propagatedType = rightHandSide.propagatedType;
+ DartType staticType = _getStaticType(rightHandSide);
+ _recordStaticType(node, staticType);
+ DartType overrideType = staticType;
+ DartType propagatedType = rightHandSide.propagatedType;
if (propagatedType != null) {
if (propagatedType.isMoreSpecificThan(staticType)) {
- recordPropagatedType(node, propagatedType);
+ _recordPropagatedType(node, propagatedType);
}
overrideType = propagatedType;
}
_resolver.overrideExpression(node.leftHandSide, overrideType);
} else {
ExecutableElement staticMethodElement = node.staticElement;
- Type2 staticType = computeStaticReturnType(staticMethodElement);
- recordStaticType(node, staticType);
+ DartType staticType = _computeStaticReturnType(staticMethodElement);
+ _recordStaticType(node, staticType);
MethodElement propagatedMethodElement = node.propagatedElement;
if (propagatedMethodElement != staticMethodElement) {
- Type2 propagatedType = computeStaticReturnType(propagatedMethodElement);
+ DartType propagatedType = _computeStaticReturnType(propagatedMethodElement);
if (propagatedType != null && propagatedType.isMoreSpecificThan(staticType)) {
- recordPropagatedType(node, propagatedType);
+ _recordPropagatedType(node, propagatedType);
}
}
}
@@ -12031,16 +12308,17 @@
* e<sub>2</sub></i> is equivalent to the method invocation
* <i>super.op(e<sub>2</sub>)</i>.</blockquote>
*/
+ @override
Object visitBinaryExpression(BinaryExpression node) {
ExecutableElement staticMethodElement = node.staticElement;
- Type2 staticType = computeStaticReturnType(staticMethodElement);
- staticType = refineBinaryExpressionType(node, staticType);
- recordStaticType(node, staticType);
+ DartType staticType = _computeStaticReturnType(staticMethodElement);
+ staticType = _refineBinaryExpressionType(node, staticType);
+ _recordStaticType(node, staticType);
MethodElement propagatedMethodElement = node.propagatedElement;
if (propagatedMethodElement != staticMethodElement) {
- Type2 propagatedType = computeStaticReturnType(propagatedMethodElement);
+ DartType propagatedType = _computeStaticReturnType(propagatedMethodElement);
if (propagatedType != null && propagatedType.isMoreSpecificThan(staticType)) {
- recordPropagatedType(node, propagatedType);
+ _recordPropagatedType(node, propagatedType);
}
}
return null;
@@ -12050,8 +12328,9 @@
* The Dart Language Specification, 12.4: <blockquote>The static type of a boolean literal is
* bool.</blockquote>
*/
+ @override
Object visitBooleanLiteral(BooleanLiteral node) {
- recordStaticType(node, _typeProvider.boolType);
+ _recordStaticType(node, _typeProvider.boolType);
return null;
}
@@ -12060,9 +12339,10 @@
* of the form <i>e..suffix</i> is equivalent to the expression <i>(t) {t.suffix; return
* t;}(e)</i>.</blockquote>
*/
+ @override
Object visitCascadeExpression(CascadeExpression node) {
- recordStaticType(node, getStaticType(node.target));
- recordPropagatedType(node, node.target.propagatedType);
+ _recordStaticType(node, _getStaticType(node.target));
+ _recordPropagatedType(node, node.target.propagatedType);
return null;
}
@@ -12075,9 +12355,10 @@
* The static type of <i>c</i> is the least upper bound of the static type of <i>e<sub>2</sub></i>
* and the static type of <i>e<sub>3</sub></i>.</blockquote>
*/
+ @override
Object visitConditionalExpression(ConditionalExpression node) {
- Type2 staticThenType = getStaticType(node.thenExpression);
- Type2 staticElseType = getStaticType(node.elseExpression);
+ DartType staticThenType = _getStaticType(node.thenExpression);
+ DartType staticElseType = _getStaticType(node.elseExpression);
if (staticThenType == null) {
// TODO(brianwilkerson) Determine whether this can still happen.
staticThenType = _dynamicType;
@@ -12086,13 +12367,13 @@
// TODO(brianwilkerson) Determine whether this can still happen.
staticElseType = _dynamicType;
}
- Type2 staticType = staticThenType.getLeastUpperBound(staticElseType);
+ DartType staticType = staticThenType.getLeastUpperBound(staticElseType);
if (staticType == null) {
staticType = _dynamicType;
}
- recordStaticType(node, staticType);
- Type2 propagatedThenType = node.thenExpression.propagatedType;
- Type2 propagatedElseType = node.elseExpression.propagatedType;
+ _recordStaticType(node, staticType);
+ DartType propagatedThenType = node.thenExpression.propagatedType;
+ DartType propagatedElseType = node.elseExpression.propagatedType;
if (propagatedThenType != null || propagatedElseType != null) {
if (propagatedThenType == null) {
propagatedThenType = staticThenType;
@@ -12100,9 +12381,9 @@
if (propagatedElseType == null) {
propagatedElseType = staticElseType;
}
- Type2 propagatedType = propagatedThenType.getLeastUpperBound(propagatedElseType);
+ DartType propagatedType = propagatedThenType.getLeastUpperBound(propagatedElseType);
if (propagatedType != null && propagatedType.isMoreSpecificThan(staticType)) {
- recordPropagatedType(node, propagatedType);
+ _recordPropagatedType(node, propagatedType);
}
}
return null;
@@ -12112,17 +12393,19 @@
* The Dart Language Specification, 12.3: <blockquote>The static type of a literal double is
* double.</blockquote>
*/
+ @override
Object visitDoubleLiteral(DoubleLiteral node) {
- recordStaticType(node, _typeProvider.doubleType);
+ _recordStaticType(node, _typeProvider.doubleType);
return null;
}
+ @override
Object visitFunctionDeclaration(FunctionDeclaration node) {
FunctionExpression function = node.functionExpression;
ExecutableElementImpl functionElement = node.element as ExecutableElementImpl;
- functionElement.returnType = computeStaticReturnTypeOfFunctionDeclaration(node);
- recordPropagatedTypeOfFunction(functionElement, function.body);
- recordStaticType(function, functionElement.type);
+ functionElement.returnType = _computeStaticReturnTypeOfFunctionDeclaration(node);
+ _recordPropagatedTypeOfFunction(functionElement, function.body);
+ _recordStaticType(function, functionElement.type);
return null;
}
@@ -12156,15 +12439,16 @@
* where <i>T<sub>i</sub>, 1 <= i <= n</i>, is not specified, it is considered to have been
* specified as dynamic.</blockquote>
*/
+ @override
Object visitFunctionExpression(FunctionExpression node) {
if (node.parent is FunctionDeclaration) {
// The function type will be resolved and set when we visit the parent node.
return null;
}
ExecutableElementImpl functionElement = node.element as ExecutableElementImpl;
- functionElement.returnType = computeStaticReturnTypeOfFunctionExpression(node);
- recordPropagatedTypeOfFunction(functionElement, node.body);
- recordStaticType(node, node.element.type);
+ functionElement.returnType = _computeStaticReturnTypeOfFunctionExpression(node);
+ _recordPropagatedTypeOfFunction(functionElement, node.body);
+ _recordStaticType(node, node.element.type);
return null;
}
@@ -12180,27 +12464,28 @@
* If <i>F</i> is not a function type, the static type of <i>i</i> is dynamic. Otherwise the
* static type of <i>i</i> is the declared return type of <i>F</i>.</blockquote>
*/
+ @override
Object visitFunctionExpressionInvocation(FunctionExpressionInvocation node) {
ExecutableElement staticMethodElement = node.staticElement;
// Record static return type of the static element.
- Type2 staticStaticType = computeStaticReturnType(staticMethodElement);
- recordStaticType(node, staticStaticType);
+ DartType staticStaticType = _computeStaticReturnType(staticMethodElement);
+ _recordStaticType(node, staticStaticType);
// Record propagated return type of the static element.
- Type2 staticPropagatedType = computePropagatedReturnType(staticMethodElement);
+ DartType staticPropagatedType = _computePropagatedReturnType(staticMethodElement);
if (staticPropagatedType != null && (staticStaticType == null || staticPropagatedType.isMoreSpecificThan(staticStaticType))) {
- recordPropagatedType(node, staticPropagatedType);
+ _recordPropagatedType(node, staticPropagatedType);
}
ExecutableElement propagatedMethodElement = node.propagatedElement;
if (propagatedMethodElement != staticMethodElement) {
// Record static return type of the propagated element.
- Type2 propagatedStaticType = computeStaticReturnType(propagatedMethodElement);
+ DartType propagatedStaticType = _computeStaticReturnType(propagatedMethodElement);
if (propagatedStaticType != null && (staticStaticType == null || propagatedStaticType.isMoreSpecificThan(staticStaticType)) && (staticPropagatedType == null || propagatedStaticType.isMoreSpecificThan(staticPropagatedType))) {
- recordPropagatedType(node, propagatedStaticType);
+ _recordPropagatedType(node, propagatedStaticType);
}
// Record propagated return type of the propagated element.
- Type2 propagatedPropagatedType = computePropagatedReturnType(propagatedMethodElement);
+ DartType propagatedPropagatedType = _computePropagatedReturnType(propagatedMethodElement);
if (propagatedPropagatedType != null && (staticStaticType == null || propagatedPropagatedType.isMoreSpecificThan(staticStaticType)) && (staticPropagatedType == null || propagatedPropagatedType.isMoreSpecificThan(staticPropagatedType)) && (propagatedStaticType == null || propagatedPropagatedType.isMoreSpecificThan(propagatedStaticType))) {
- recordPropagatedType(node, propagatedPropagatedType);
+ _recordPropagatedType(node, propagatedPropagatedType);
}
}
return null;
@@ -12211,27 +12496,28 @@
* <i>e<sub>1</sub>[e<sub>2</sub>]</i> is evaluated as a method invocation of the operator method
* <i>[]</i> on <i>e<sub>1</sub></i> with argument <i>e<sub>2</sub></i>.</blockquote>
*/
+ @override
Object visitIndexExpression(IndexExpression node) {
if (node.inSetterContext()) {
ExecutableElement staticMethodElement = node.staticElement;
- Type2 staticType = computeArgumentType(staticMethodElement);
- recordStaticType(node, staticType);
+ DartType staticType = _computeArgumentType(staticMethodElement);
+ _recordStaticType(node, staticType);
MethodElement propagatedMethodElement = node.propagatedElement;
if (propagatedMethodElement != staticMethodElement) {
- Type2 propagatedType = computeArgumentType(propagatedMethodElement);
+ DartType propagatedType = _computeArgumentType(propagatedMethodElement);
if (propagatedType != null && propagatedType.isMoreSpecificThan(staticType)) {
- recordPropagatedType(node, propagatedType);
+ _recordPropagatedType(node, propagatedType);
}
}
} else {
ExecutableElement staticMethodElement = node.staticElement;
- Type2 staticType = computeStaticReturnType(staticMethodElement);
- recordStaticType(node, staticType);
+ DartType staticType = _computeStaticReturnType(staticMethodElement);
+ _recordStaticType(node, staticType);
MethodElement propagatedMethodElement = node.propagatedElement;
if (propagatedMethodElement != staticMethodElement) {
- Type2 propagatedType = computeStaticReturnType(propagatedMethodElement);
+ DartType propagatedType = _computeStaticReturnType(propagatedMethodElement);
if (propagatedType != null && propagatedType.isMoreSpecificThan(staticType)) {
- recordPropagatedType(node, propagatedType);
+ _recordPropagatedType(node, propagatedType);
}
}
}
@@ -12247,22 +12533,23 @@
* expression of either the form <i>const T.id(a<sub>1</sub>, …, a<sub>n</sub>)</i> or the
* form <i>const T(a<sub>1</sub>, …, a<sub>n</sub>)</i> is <i>T</i>. </blockquote>
*/
+ @override
Object visitInstanceCreationExpression(InstanceCreationExpression node) {
- recordStaticType(node, node.constructorName.type.type);
+ _recordStaticType(node, node.constructorName.type.type);
ConstructorElement element = node.staticElement;
if (element != null && "Element" == element.enclosingElement.name) {
LibraryElement library = element.library;
- if (isHtmlLibrary(library)) {
+ if (_isHtmlLibrary(library)) {
String constructorName = element.name;
if ("tag" == constructorName) {
- Type2 returnType = getFirstArgumentAsTypeWithMap(library, node.argumentList, _HTML_ELEMENT_TO_CLASS_MAP);
+ DartType returnType = _getFirstArgumentAsTypeWithMap(library, node.argumentList, _HTML_ELEMENT_TO_CLASS_MAP);
if (returnType != null) {
- recordPropagatedType(node, returnType);
+ _recordPropagatedType(node, returnType);
}
} else {
- Type2 returnType = getElementNameAsType(library, constructorName, _HTML_ELEMENT_TO_CLASS_MAP);
+ DartType returnType = _getElementNameAsType(library, constructorName, _HTML_ELEMENT_TO_CLASS_MAP);
if (returnType != null) {
- recordPropagatedType(node, returnType);
+ _recordPropagatedType(node, returnType);
}
}
}
@@ -12274,8 +12561,9 @@
* The Dart Language Specification, 12.3: <blockquote>The static type of an integer literal is
* `int`.</blockquote>
*/
+ @override
Object visitIntegerLiteral(IntegerLiteral node) {
- recordStaticType(node, _typeProvider.intType);
+ _recordStaticType(node, _typeProvider.intType);
return null;
}
@@ -12285,8 +12573,9 @@
*
* The static type of an is-expression is `bool`.</blockquote>
*/
+ @override
Object visitIsExpression(IsExpression node) {
- recordStaticType(node, _typeProvider.boolType);
+ _recordStaticType(node, _typeProvider.boolType);
return null;
}
@@ -12298,26 +12587,27 @@
* the form <i>[e<sub>1</sub>, …, e<sub>n</sub>]</i> is `List<dynamic>`
* .</blockquote>
*/
+ @override
Object visitListLiteral(ListLiteral node) {
- Type2 staticType = _dynamicType;
+ DartType staticType = _dynamicType;
TypeArgumentList typeArguments = node.typeArguments;
if (typeArguments != null) {
NodeList<TypeName> arguments = typeArguments.arguments;
if (arguments != null && arguments.length == 1) {
TypeName argumentTypeName = arguments[0];
- Type2 argumentType = getType(argumentTypeName);
+ DartType argumentType = _getType(argumentTypeName);
if (argumentType != null) {
staticType = argumentType;
}
}
}
- recordStaticType(node, _typeProvider.listType.substitute4(<Type2> [staticType]));
+ _recordStaticType(node, _typeProvider.listType.substitute4(<DartType> [staticType]));
NodeList<Expression> elements = node.elements;
int count = elements.length;
if (count > 0) {
- Type2 propagatedType = elements[0].bestType;
+ DartType propagatedType = elements[0].bestType;
for (int i = 1; i < count; i++) {
- Type2 elementType = elements[i].bestType;
+ DartType elementType = elements[i].bestType;
if (propagatedType != elementType) {
propagatedType = _dynamicType;
} else {
@@ -12328,7 +12618,7 @@
}
}
if (propagatedType.isMoreSpecificThan(staticType)) {
- recordPropagatedType(node, _typeProvider.listType.substitute4(<Type2> [propagatedType]));
+ _recordPropagatedType(node, _typeProvider.listType.substitute4(<DartType> [propagatedType]));
}
}
return null;
@@ -12346,35 +12636,36 @@
* It is a compile-time error if the first type argument to a map literal is not
* <i>String</i>.</blockquote>
*/
+ @override
Object visitMapLiteral(MapLiteral node) {
- Type2 staticKeyType = _dynamicType;
- Type2 staticValueType = _dynamicType;
+ DartType staticKeyType = _dynamicType;
+ DartType staticValueType = _dynamicType;
TypeArgumentList typeArguments = node.typeArguments;
if (typeArguments != null) {
NodeList<TypeName> arguments = typeArguments.arguments;
if (arguments != null && arguments.length == 2) {
TypeName entryKeyTypeName = arguments[0];
- Type2 entryKeyType = getType(entryKeyTypeName);
+ DartType entryKeyType = _getType(entryKeyTypeName);
if (entryKeyType != null) {
staticKeyType = entryKeyType;
}
TypeName entryValueTypeName = arguments[1];
- Type2 entryValueType = getType(entryValueTypeName);
+ DartType entryValueType = _getType(entryValueTypeName);
if (entryValueType != null) {
staticValueType = entryValueType;
}
}
}
- recordStaticType(node, _typeProvider.mapType.substitute4(<Type2> [staticKeyType, staticValueType]));
+ _recordStaticType(node, _typeProvider.mapType.substitute4(<DartType> [staticKeyType, staticValueType]));
NodeList<MapLiteralEntry> entries = node.entries;
int count = entries.length;
if (count > 0) {
MapLiteralEntry entry = entries[0];
- Type2 propagatedKeyType = entry.key.bestType;
- Type2 propagatedValueType = entry.value.bestType;
+ DartType propagatedKeyType = entry.key.bestType;
+ DartType propagatedValueType = entry.value.bestType;
for (int i = 1; i < count; i++) {
entry = entries[i];
- Type2 elementKeyType = entry.key.bestType;
+ DartType elementKeyType = entry.key.bestType;
if (propagatedKeyType != elementKeyType) {
propagatedKeyType = _dynamicType;
} else {
@@ -12383,7 +12674,7 @@
propagatedKeyType = _dynamicType;
}
}
- Type2 elementValueType = entry.value.bestType;
+ DartType elementValueType = entry.value.bestType;
if (propagatedValueType != elementValueType) {
propagatedValueType = _dynamicType;
} else {
@@ -12402,7 +12693,7 @@
if (!betterValue) {
propagatedValueType = staticValueType;
}
- recordPropagatedType(node, _typeProvider.mapType.substitute4(<Type2> [propagatedKeyType, propagatedValueType]));
+ _recordPropagatedType(node, _typeProvider.mapType.substitute4(<DartType> [propagatedKeyType, propagatedValueType]));
}
}
return null;
@@ -12444,26 +12735,27 @@
* <i>i</i> is dynamic. Otherwise the static type of <i>i</i> is the declared return type of
* <i>F</i>.</blockquote>
*/
+ @override
Object visitMethodInvocation(MethodInvocation node) {
SimpleIdentifier methodNameNode = node.methodName;
Element staticMethodElement = methodNameNode.staticElement;
// Record types of the local variable invoked as a function.
if (staticMethodElement is LocalVariableElement) {
LocalVariableElement variable = staticMethodElement;
- Type2 staticType = variable.type;
- recordStaticType(methodNameNode, staticType);
- Type2 propagatedType = _overrideManager.getType(variable);
+ DartType staticType = variable.type;
+ _recordStaticType(methodNameNode, staticType);
+ DartType propagatedType = _overrideManager.getType(variable);
if (propagatedType != null && propagatedType.isMoreSpecificThan(staticType)) {
- recordPropagatedType(methodNameNode, propagatedType);
+ _recordPropagatedType(methodNameNode, propagatedType);
}
}
// Record static return type of the static element.
- Type2 staticStaticType = computeStaticReturnType(staticMethodElement);
- recordStaticType(node, staticStaticType);
+ DartType staticStaticType = _computeStaticReturnType(staticMethodElement);
+ _recordStaticType(node, staticStaticType);
// Record propagated return type of the static element.
- Type2 staticPropagatedType = computePropagatedReturnType(staticMethodElement);
+ DartType staticPropagatedType = _computePropagatedReturnType(staticMethodElement);
if (staticPropagatedType != null && (staticStaticType == null || staticPropagatedType.isMoreSpecificThan(staticStaticType))) {
- recordPropagatedType(node, staticPropagatedType);
+ _recordPropagatedType(node, staticPropagatedType);
}
String methodName = methodNameNode.name;
// Future.then(closure) return type is:
@@ -12471,27 +12763,27 @@
// 2) Future<valueType>, if the closure returns a value.
if (methodName == "then") {
Expression target = node.realTarget;
- Type2 targetType = target == null ? null : target.bestType;
- if (isAsyncFutureType(targetType)) {
+ DartType targetType = target == null ? null : target.bestType;
+ if (_isAsyncFutureType(targetType)) {
NodeList<Expression> arguments = node.argumentList.arguments;
if (arguments.length == 1) {
// TODO(brianwilkerson) Handle the case where both arguments are provided.
Expression closureArg = arguments[0];
if (closureArg is FunctionExpression) {
FunctionExpression closureExpr = closureArg;
- Type2 returnType = computePropagatedReturnType(closureExpr.element);
+ DartType returnType = _computePropagatedReturnType(closureExpr.element);
if (returnType != null) {
// prepare the type of the returned Future
InterfaceTypeImpl newFutureType;
- if (isAsyncFutureType(returnType)) {
+ if (_isAsyncFutureType(returnType)) {
newFutureType = returnType as InterfaceTypeImpl;
} else {
InterfaceType futureType = targetType as InterfaceType;
newFutureType = new InterfaceTypeImpl.con1(futureType.element);
- newFutureType.typeArguments = <Type2> [returnType];
+ newFutureType.typeArguments = <DartType> [returnType];
}
// set the 'then' invocation type
- recordPropagatedType(node, newFutureType);
+ _recordPropagatedType(node, newFutureType);
return null;
}
}
@@ -12501,13 +12793,13 @@
if (methodName == "\$dom_createEvent") {
Expression target = node.realTarget;
if (target != null) {
- Type2 targetType = target.bestType;
+ DartType targetType = target.bestType;
if (targetType is InterfaceType && (targetType.name == "HtmlDocument" || targetType.name == "Document")) {
LibraryElement library = targetType.element.library;
- if (isHtmlLibrary(library)) {
- Type2 returnType = getFirstArgumentAsType(library, node.argumentList);
+ if (_isHtmlLibrary(library)) {
+ DartType returnType = _getFirstArgumentAsType(library, node.argumentList);
if (returnType != null) {
- recordPropagatedType(node, returnType);
+ _recordPropagatedType(node, returnType);
}
}
}
@@ -12518,64 +12810,65 @@
Element methodElement = methodNameNode.bestElement;
if (methodElement != null) {
LibraryElement library = methodElement.library;
- if (isHtmlLibrary(library)) {
- Type2 returnType = getFirstArgumentAsQuery(library, node.argumentList);
+ if (_isHtmlLibrary(library)) {
+ DartType returnType = _getFirstArgumentAsQuery(library, node.argumentList);
if (returnType != null) {
- recordPropagatedType(node, returnType);
+ _recordPropagatedType(node, returnType);
}
}
}
} else {
- Type2 targetType = target.bestType;
+ DartType targetType = target.bestType;
if (targetType is InterfaceType && (targetType.name == "HtmlDocument" || targetType.name == "Document")) {
LibraryElement library = targetType.element.library;
- if (isHtmlLibrary(library)) {
- Type2 returnType = getFirstArgumentAsQuery(library, node.argumentList);
+ if (_isHtmlLibrary(library)) {
+ DartType returnType = _getFirstArgumentAsQuery(library, node.argumentList);
if (returnType != null) {
- recordPropagatedType(node, returnType);
+ _recordPropagatedType(node, returnType);
}
}
}
}
} else if (methodName == "\$dom_createElement") {
Expression target = node.realTarget;
- Type2 targetType = target.bestType;
+ DartType targetType = target.bestType;
if (targetType is InterfaceType && (targetType.name == "HtmlDocument" || targetType.name == "Document")) {
LibraryElement library = targetType.element.library;
- if (isHtmlLibrary(library)) {
- Type2 returnType = getFirstArgumentAsQuery(library, node.argumentList);
+ if (_isHtmlLibrary(library)) {
+ DartType returnType = _getFirstArgumentAsQuery(library, node.argumentList);
if (returnType != null) {
- recordPropagatedType(node, returnType);
+ _recordPropagatedType(node, returnType);
}
}
}
} else if (methodName == "JS") {
- Type2 returnType = getFirstArgumentAsType(_typeProvider.objectType.element.library, node.argumentList);
+ DartType returnType = _getFirstArgumentAsType(_typeProvider.objectType.element.library, node.argumentList);
if (returnType != null) {
- recordPropagatedType(node, returnType);
+ _recordPropagatedType(node, returnType);
}
} else {
Element propagatedElement = methodNameNode.propagatedElement;
if (propagatedElement != staticMethodElement) {
// Record static return type of the propagated element.
- Type2 propagatedStaticType = computeStaticReturnType(propagatedElement);
+ DartType propagatedStaticType = _computeStaticReturnType(propagatedElement);
if (propagatedStaticType != null && (staticStaticType == null || propagatedStaticType.isMoreSpecificThan(staticStaticType)) && (staticPropagatedType == null || propagatedStaticType.isMoreSpecificThan(staticPropagatedType))) {
- recordPropagatedType(node, propagatedStaticType);
+ _recordPropagatedType(node, propagatedStaticType);
}
// Record propagated return type of the propagated element.
- Type2 propagatedPropagatedType = computePropagatedReturnType(propagatedElement);
+ DartType propagatedPropagatedType = _computePropagatedReturnType(propagatedElement);
if (propagatedPropagatedType != null && (staticStaticType == null || propagatedPropagatedType.isMoreSpecificThan(staticStaticType)) && (staticPropagatedType == null || propagatedPropagatedType.isMoreSpecificThan(staticPropagatedType)) && (propagatedStaticType == null || propagatedPropagatedType.isMoreSpecificThan(propagatedStaticType))) {
- recordPropagatedType(node, propagatedPropagatedType);
+ _recordPropagatedType(node, propagatedPropagatedType);
}
}
}
return null;
}
+ @override
Object visitNamedExpression(NamedExpression node) {
Expression expression = node.expression;
- recordStaticType(node, getStaticType(expression));
- recordPropagatedType(node, expression.propagatedType);
+ _recordStaticType(node, _getStaticType(expression));
+ _recordPropagatedType(node, expression.propagatedType);
return null;
}
@@ -12583,15 +12876,17 @@
* The Dart Language Specification, 12.2: <blockquote>The static type of `null` is bottom.
* </blockquote>
*/
+ @override
Object visitNullLiteral(NullLiteral node) {
- recordStaticType(node, _typeProvider.bottomType);
+ _recordStaticType(node, _typeProvider.bottomType);
return null;
}
+ @override
Object visitParenthesizedExpression(ParenthesizedExpression node) {
Expression expression = node.expression;
- recordStaticType(node, getStaticType(expression));
- recordPropagatedType(node, expression.propagatedType);
+ _recordStaticType(node, _getStaticType(expression));
+ _recordPropagatedType(node, expression.propagatedType);
return null;
}
@@ -12621,36 +12916,38 @@
* A postfix expression of the form <i>e1[e2]--</i> is equivalent to <i>(a, i){var r = a[i]; a[i]
* = r - 1; return r}(e1, e2)</i></blockquote>
*/
+ @override
Object visitPostfixExpression(PostfixExpression node) {
Expression operand = node.operand;
- Type2 staticType = getStaticType(operand);
+ DartType staticType = _getStaticType(operand);
sc.TokenType operator = node.operator.type;
if (identical(operator, sc.TokenType.MINUS_MINUS) || identical(operator, sc.TokenType.PLUS_PLUS)) {
- Type2 intType = _typeProvider.intType;
- if (identical(getStaticType(node.operand), intType)) {
+ DartType intType = _typeProvider.intType;
+ if (identical(_getStaticType(node.operand), intType)) {
staticType = intType;
}
}
- recordStaticType(node, staticType);
- recordPropagatedType(node, operand.propagatedType);
+ _recordStaticType(node, staticType);
+ _recordPropagatedType(node, operand.propagatedType);
return null;
}
/**
* See [visitSimpleIdentifier].
*/
+ @override
Object visitPrefixedIdentifier(PrefixedIdentifier node) {
SimpleIdentifier prefixedIdentifier = node.identifier;
Element staticElement = prefixedIdentifier.staticElement;
- Type2 staticType = _dynamicType;
+ DartType staticType = _dynamicType;
if (staticElement is ClassElement) {
- if (isNotTypeLiteral(node)) {
+ if (_isNotTypeLiteral(node)) {
staticType = staticElement.type;
} else {
staticType = _typeProvider.typeType;
}
} else if (staticElement is FunctionTypeAliasElement) {
- if (isNotTypeLiteral(node)) {
+ if (_isNotTypeLiteral(node)) {
staticType = staticElement.type;
} else {
staticType = _typeProvider.typeType;
@@ -12658,7 +12955,7 @@
} else if (staticElement is MethodElement) {
staticType = staticElement.type;
} else if (staticElement is PropertyAccessorElement) {
- staticType = getTypeOfProperty(staticElement, node.prefix.staticType);
+ staticType = _getTypeOfProperty(staticElement, node.prefix.staticType);
} else if (staticElement is ExecutableElement) {
staticType = staticElement.type;
} else if (staticElement is TypeParameterElement) {
@@ -12666,12 +12963,12 @@
} else if (staticElement is VariableElement) {
staticType = staticElement.type;
}
- recordStaticType(prefixedIdentifier, staticType);
- recordStaticType(node, staticType);
+ _recordStaticType(prefixedIdentifier, staticType);
+ _recordStaticType(node, staticType);
Element propagatedElement = prefixedIdentifier.propagatedElement;
- Type2 propagatedType = null;
+ DartType propagatedType = null;
if (propagatedElement is ClassElement) {
- if (isNotTypeLiteral(node)) {
+ if (_isNotTypeLiteral(node)) {
propagatedType = propagatedElement.type;
} else {
propagatedType = _typeProvider.typeType;
@@ -12681,7 +12978,7 @@
} else if (propagatedElement is MethodElement) {
propagatedType = propagatedElement.type;
} else if (propagatedElement is PropertyAccessorElement) {
- propagatedType = getTypeOfProperty(propagatedElement, node.prefix.staticType);
+ propagatedType = _getTypeOfProperty(propagatedElement, node.prefix.staticType);
} else if (propagatedElement is ExecutableElement) {
propagatedType = propagatedElement.type;
} else if (propagatedElement is TypeParameterElement) {
@@ -12689,13 +12986,13 @@
} else if (propagatedElement is VariableElement) {
propagatedType = propagatedElement.type;
}
- Type2 overriddenType = _overrideManager.getType(propagatedElement);
+ DartType overriddenType = _overrideManager.getType(propagatedElement);
if (propagatedType == null || (overriddenType != null && overriddenType.isMoreSpecificThan(propagatedType))) {
propagatedType = overriddenType;
}
if (propagatedType != null && propagatedType.isMoreSpecificThan(staticType)) {
- recordPropagatedType(prefixedIdentifier, propagatedType);
- recordPropagatedType(node, propagatedType);
+ _recordPropagatedType(prefixedIdentifier, propagatedType);
+ _recordPropagatedType(node, propagatedType);
}
return null;
}
@@ -12705,26 +13002,27 @@
* <i>op e</i> is equivalent to a method invocation <i>expression e.op()</i>. An expression of the
* form <i>op super</i> is equivalent to the method invocation <i>super.op()<i>.</blockquote>
*/
+ @override
Object visitPrefixExpression(PrefixExpression node) {
sc.TokenType operator = node.operator.type;
if (identical(operator, sc.TokenType.BANG)) {
- recordStaticType(node, _typeProvider.boolType);
+ _recordStaticType(node, _typeProvider.boolType);
} else {
// The other cases are equivalent to invoking a method.
ExecutableElement staticMethodElement = node.staticElement;
- Type2 staticType = computeStaticReturnType(staticMethodElement);
+ DartType staticType = _computeStaticReturnType(staticMethodElement);
if (identical(operator, sc.TokenType.MINUS_MINUS) || identical(operator, sc.TokenType.PLUS_PLUS)) {
- Type2 intType = _typeProvider.intType;
- if (identical(getStaticType(node.operand), intType)) {
+ DartType intType = _typeProvider.intType;
+ if (identical(_getStaticType(node.operand), intType)) {
staticType = intType;
}
}
- recordStaticType(node, staticType);
+ _recordStaticType(node, staticType);
MethodElement propagatedMethodElement = node.propagatedElement;
if (propagatedMethodElement != staticMethodElement) {
- Type2 propagatedType = computeStaticReturnType(propagatedMethodElement);
+ DartType propagatedType = _computeStaticReturnType(propagatedMethodElement);
if (propagatedType != null && propagatedType.isMoreSpecificThan(staticType)) {
- recordPropagatedType(node, propagatedType);
+ _recordPropagatedType(node, propagatedType);
}
}
}
@@ -12772,31 +13070,32 @@
*
* The static type of <i>i</i> is the declared return type of <i>m</i>.</blockquote>
*/
+ @override
Object visitPropertyAccess(PropertyAccess node) {
SimpleIdentifier propertyName = node.propertyName;
Element staticElement = propertyName.staticElement;
- Type2 staticType = _dynamicType;
+ DartType staticType = _dynamicType;
if (staticElement is MethodElement) {
staticType = staticElement.type;
} else if (staticElement is PropertyAccessorElement) {
Expression realTarget = node.realTarget;
- staticType = getTypeOfProperty(staticElement, realTarget != null ? getStaticType(realTarget) : null);
+ staticType = _getTypeOfProperty(staticElement, realTarget != null ? _getStaticType(realTarget) : null);
} else {
}
- recordStaticType(propertyName, staticType);
- recordStaticType(node, staticType);
+ _recordStaticType(propertyName, staticType);
+ _recordStaticType(node, staticType);
Element propagatedElement = propertyName.propagatedElement;
- Type2 propagatedType = _overrideManager.getType(propagatedElement);
+ DartType propagatedType = _overrideManager.getType(propagatedElement);
if (propagatedElement is MethodElement) {
propagatedType = propagatedElement.type;
} else if (propagatedElement is PropertyAccessorElement) {
Expression realTarget = node.realTarget;
- propagatedType = getTypeOfProperty(propagatedElement, realTarget != null ? realTarget.bestType : null);
+ propagatedType = _getTypeOfProperty(propagatedElement, realTarget != null ? realTarget.bestType : null);
} else {
}
if (propagatedType != null && propagatedType.isMoreSpecificThan(staticType)) {
- recordPropagatedType(propertyName, propagatedType);
- recordPropagatedType(node, propagatedType);
+ _recordPropagatedType(propertyName, propagatedType);
+ _recordPropagatedType(node, propagatedType);
}
return null;
}
@@ -12805,8 +13104,9 @@
* The Dart Language Specification, 12.9: <blockquote>The static type of a rethrow expression is
* bottom.</blockquote>
*/
+ @override
Object visitRethrowExpression(RethrowExpression node) {
- recordStaticType(node, _typeProvider.bottomType);
+ _recordStaticType(node, _typeProvider.bottomType);
return null;
}
@@ -12848,17 +13148,18 @@
* * Otherwise <i>e</i> is equivalent to the property extraction <i>this.id</i>.
* </blockquote>
*/
+ @override
Object visitSimpleIdentifier(SimpleIdentifier node) {
Element element = node.staticElement;
- Type2 staticType = _dynamicType;
+ DartType staticType = _dynamicType;
if (element is ClassElement) {
- if (isNotTypeLiteral(node)) {
+ if (_isNotTypeLiteral(node)) {
staticType = element.type;
} else {
staticType = _typeProvider.typeType;
}
} else if (element is FunctionTypeAliasElement) {
- if (isNotTypeLiteral(node)) {
+ if (_isNotTypeLiteral(node)) {
staticType = element.type;
} else {
staticType = _typeProvider.typeType;
@@ -12866,7 +13167,7 @@
} else if (element is MethodElement) {
staticType = element.type;
} else if (element is PropertyAccessorElement) {
- staticType = getTypeOfProperty(element, null);
+ staticType = _getTypeOfProperty(element, null);
} else if (element is ExecutableElement) {
staticType = element.type;
} else if (element is TypeParameterElement) {
@@ -12880,12 +13181,12 @@
} else {
staticType = _dynamicType;
}
- recordStaticType(node, staticType);
+ _recordStaticType(node, staticType);
// TODO(brianwilkerson) I think we want to repeat the logic above using the propagated element
// to get another candidate for the propagated type.
- Type2 propagatedType = _overrideManager.getType(element);
+ DartType propagatedType = _overrideManager.getType(element);
if (propagatedType != null && propagatedType.isMoreSpecificThan(staticType)) {
- recordPropagatedType(node, propagatedType);
+ _recordPropagatedType(node, propagatedType);
}
return null;
}
@@ -12894,8 +13195,9 @@
* The Dart Language Specification, 12.5: <blockquote>The static type of a string literal is
* `String`.</blockquote>
*/
+ @override
Object visitSimpleStringLiteral(SimpleStringLiteral node) {
- recordStaticType(node, _typeProvider.stringType);
+ _recordStaticType(node, _typeProvider.stringType);
return null;
}
@@ -12903,23 +13205,26 @@
* The Dart Language Specification, 12.5: <blockquote>The static type of a string literal is
* `String`.</blockquote>
*/
+ @override
Object visitStringInterpolation(StringInterpolation node) {
- recordStaticType(node, _typeProvider.stringType);
+ _recordStaticType(node, _typeProvider.stringType);
return null;
}
+ @override
Object visitSuperExpression(SuperExpression node) {
if (_thisType == null) {
// TODO(brianwilkerson) Report this error if it hasn't already been reported
- recordStaticType(node, _dynamicType);
+ _recordStaticType(node, _dynamicType);
} else {
- recordStaticType(node, _thisType);
+ _recordStaticType(node, _thisType);
}
return null;
}
+ @override
Object visitSymbolLiteral(SymbolLiteral node) {
- recordStaticType(node, _typeProvider.symbolType);
+ _recordStaticType(node, _typeProvider.symbolType);
return null;
}
@@ -12927,12 +13232,13 @@
* The Dart Language Specification, 12.10: <blockquote>The static type of `this` is the
* interface of the immediately enclosing class.</blockquote>
*/
+ @override
Object visitThisExpression(ThisExpression node) {
if (_thisType == null) {
// TODO(brianwilkerson) Report this error if it hasn't already been reported
- recordStaticType(node, _dynamicType);
+ _recordStaticType(node, _dynamicType);
} else {
- recordStaticType(node, _thisType);
+ _recordStaticType(node, _thisType);
}
return null;
}
@@ -12941,17 +13247,19 @@
* The Dart Language Specification, 12.8: <blockquote>The static type of a throw expression is
* bottom.</blockquote>
*/
+ @override
Object visitThrowExpression(ThrowExpression node) {
- recordStaticType(node, _typeProvider.bottomType);
+ _recordStaticType(node, _typeProvider.bottomType);
return null;
}
+ @override
Object visitVariableDeclaration(VariableDeclaration node) {
Expression initializer = node.initializer;
if (initializer != null) {
- Type2 rightType = initializer.bestType;
+ DartType rightType = initializer.bestType;
SimpleIdentifier name = node.name;
- recordPropagatedType(name, rightType);
+ _recordPropagatedType(name, rightType);
VariableElement element = name.staticElement as VariableElement;
if (element != null) {
_resolver.overrideVariable(element, rightType);
@@ -12966,7 +13274,7 @@
*
* @param element the element representing the method invoked by the given node
*/
- Type2 computeArgumentType(ExecutableElement element) {
+ DartType _computeArgumentType(ExecutableElement element) {
if (element != null) {
List<ParameterElement> parameters = element.parameters;
if (parameters != null && parameters.length == 2) {
@@ -12982,7 +13290,7 @@
* @param element the element representing the method or function invoked by the given node
* @return the propagated return type that was computed
*/
- Type2 computePropagatedReturnType(Element element) {
+ DartType _computePropagatedReturnType(Element element) {
if (element is ExecutableElement) {
return _propagatedReturnTypes[element];
}
@@ -12997,13 +13305,13 @@
* @param body the boy of the function whose propagated return type is to be computed
* @return the propagated return type that was computed
*/
- Type2 computePropagatedReturnTypeOfFunction(FunctionBody body) {
+ DartType _computePropagatedReturnTypeOfFunction(FunctionBody body) {
if (body is ExpressionFunctionBody) {
ExpressionFunctionBody expressionBody = body;
return expressionBody.expression.bestType;
}
if (body is BlockFunctionBody) {
- List<Type2> result = [null];
+ List<DartType> result = [null];
body.accept(new GeneralizingAstVisitor_StaticTypeAnalyzer_computePropagatedReturnTypeOfFunction(result));
return result[0];
}
@@ -13016,7 +13324,7 @@
* @param element the element representing the method or function invoked by the given node
* @return the static return type that was computed
*/
- Type2 computeStaticReturnType(Element element) {
+ DartType _computeStaticReturnType(Element element) {
if (element is PropertyAccessorElement) {
//
// This is a function invocation expression disguised as something else. We are invoking a
@@ -13024,7 +13332,7 @@
//
FunctionType propertyType = element.type;
if (propertyType != null) {
- Type2 returnType = propertyType.returnType;
+ DartType returnType = propertyType.returnType;
if (returnType.isDartCoreFunction) {
return _dynamicType;
} else if (returnType is InterfaceType) {
@@ -13033,7 +13341,7 @@
return callMethod.type.returnType;
}
} else if (returnType is FunctionType) {
- Type2 innerReturnType = returnType.returnType;
+ DartType innerReturnType = returnType.returnType;
if (innerReturnType != null) {
return innerReturnType;
}
@@ -13050,7 +13358,7 @@
}
} else if (element is VariableElement) {
VariableElement variable = element;
- Type2 variableType = _promoteManager.getStaticType(variable);
+ DartType variableType = _promoteManager.getStaticType(variable);
if (variableType is FunctionType) {
return variableType.returnType;
}
@@ -13066,7 +13374,7 @@
* @param node the function expression whose static return type is to be computed
* @return the static return type that was computed
*/
- Type2 computeStaticReturnTypeOfFunctionDeclaration(FunctionDeclaration node) {
+ DartType _computeStaticReturnTypeOfFunctionDeclaration(FunctionDeclaration node) {
TypeName returnType = node.returnType;
if (returnType == null) {
return _dynamicType;
@@ -13082,10 +13390,10 @@
* @param node the function expression whose return type is to be computed
* @return the return type that was computed
*/
- Type2 computeStaticReturnTypeOfFunctionExpression(FunctionExpression node) {
+ DartType _computeStaticReturnTypeOfFunctionExpression(FunctionExpression node) {
FunctionBody body = node.body;
if (body is ExpressionFunctionBody) {
- return getStaticType(body.expression);
+ return _getStaticType(body.expression);
}
return _dynamicType;
}
@@ -13099,7 +13407,7 @@
* @param nameMap an optional map used to map the element name to a type name
* @return the type specified by the first argument in the argument list
*/
- Type2 getElementNameAsType(LibraryElement library, String elementName, Map<String, String> nameMap) {
+ DartType _getElementNameAsType(LibraryElement library, String elementName, Map<String, String> nameMap) {
if (elementName != null) {
if (nameMap != null) {
elementName = nameMap[elementName.toLowerCase()];
@@ -13121,8 +13429,8 @@
* @param argumentList the list of arguments from which a type is to be extracted
* @return the type specified by the first argument in the argument list
*/
- Type2 getFirstArgumentAsQuery(LibraryElement library, ArgumentList argumentList) {
- String argumentValue = getFirstArgumentAsString(argumentList);
+ DartType _getFirstArgumentAsQuery(LibraryElement library, ArgumentList argumentList) {
+ String argumentValue = _getFirstArgumentAsString(argumentList);
if (argumentValue != null) {
//
// If the query has spaces, full parsing is required because it might be:
@@ -13155,7 +13463,7 @@
* @param argumentList the list of arguments from which a string value is to be extracted
* @return the string specified by the first argument in the argument list
*/
- String getFirstArgumentAsString(ArgumentList argumentList) {
+ String _getFirstArgumentAsString(ArgumentList argumentList) {
NodeList<Expression> arguments = argumentList.arguments;
if (arguments.length > 0) {
Expression argument = arguments[0];
@@ -13175,7 +13483,7 @@
* @param argumentList the list of arguments from which a type is to be extracted
* @return the type specified by the first argument in the argument list
*/
- Type2 getFirstArgumentAsType(LibraryElement library, ArgumentList argumentList) => getFirstArgumentAsTypeWithMap(library, argumentList, null);
+ DartType _getFirstArgumentAsType(LibraryElement library, ArgumentList argumentList) => _getFirstArgumentAsTypeWithMap(library, argumentList, null);
/**
* If the given argument list contains at least one argument, and if the argument is a simple
@@ -13187,7 +13495,7 @@
* @param nameMap an optional map used to map the element name to a type name
* @return the type specified by the first argument in the argument list
*/
- Type2 getFirstArgumentAsTypeWithMap(LibraryElement library, ArgumentList argumentList, Map<String, String> nameMap) => getElementNameAsType(library, getFirstArgumentAsString(argumentList), nameMap);
+ DartType _getFirstArgumentAsTypeWithMap(LibraryElement library, ArgumentList argumentList, Map<String, String> nameMap) => _getElementNameAsType(library, _getFirstArgumentAsString(argumentList), nameMap);
/**
* Return the static type of the given expression.
@@ -13195,8 +13503,8 @@
* @param expression the expression whose type is to be returned
* @return the static type of the given expression
*/
- Type2 getStaticType(Expression expression) {
- Type2 type = expression.staticType;
+ DartType _getStaticType(Expression expression) {
+ DartType type = expression.staticType;
if (type == null) {
// TODO(brianwilkerson) Determine the conditions for which the static type is null.
return _dynamicType;
@@ -13210,8 +13518,8 @@
* @param typeName the type name representing the type to be returned
* @return the type represented by the type name
*/
- Type2 getType(TypeName typeName) {
- Type2 type = typeName.type;
+ DartType _getType(TypeName typeName) {
+ DartType type = typeName.type;
if (type == null) {
//TODO(brianwilkerson) Determine the conditions for which the type is null.
return _dynamicType;
@@ -13229,7 +13537,7 @@
* specific type information
* @return the type that should be recorded for a node that resolved to the given accessor
*/
- Type2 getTypeOfProperty(PropertyAccessorElement accessor, Type2 context) {
+ DartType _getTypeOfProperty(PropertyAccessorElement accessor, DartType context) {
FunctionType functionType = accessor.type;
if (functionType == null) {
// TODO(brianwilkerson) Report this internal error. This happens when we are analyzing a
@@ -13238,7 +13546,7 @@
return _dynamicType;
}
if (accessor.isSetter) {
- List<Type2> parameterTypes = functionType.normalParameterTypes;
+ List<DartType> parameterTypes = functionType.normalParameterTypes;
if (parameterTypes != null && parameterTypes.length > 0) {
return parameterTypes[0];
}
@@ -13251,7 +13559,7 @@
}
return _dynamicType;
}
- Type2 returnType = functionType.returnType;
+ DartType returnType = functionType.returnType;
if (returnType is TypeParameterType && context is InterfaceType) {
// if the return type is a TypeParameter, we try to use the context [that the function is being
// called on] to get a more accurate returnType type
@@ -13274,7 +13582,7 @@
* Return `true` if the given [Type] is the `Future` form the 'dart:async'
* library.
*/
- bool isAsyncFutureType(Type2 type) => type is InterfaceType && type.name == "Future" && isAsyncLibrary(type.element.library);
+ bool _isAsyncFutureType(DartType type) => type is InterfaceType && type.name == "Future" && _isAsyncLibrary(type.element.library);
/**
* Return `true` if the given library is the 'dart:async' library.
@@ -13282,7 +13590,7 @@
* @param library the library being tested
* @return `true` if the library is 'dart:async'
*/
- bool isAsyncLibrary(LibraryElement library) => library.name == "dart.async";
+ bool _isAsyncLibrary(LibraryElement library) => library.name == "dart.async";
/**
* Return `true` if the given library is the 'dart:html' library.
@@ -13290,7 +13598,7 @@
* @param library the library being tested
* @return `true` if the library is 'dart:html'
*/
- bool isHtmlLibrary(LibraryElement library) => library != null && "dart.dom.html" == library.name;
+ bool _isHtmlLibrary(LibraryElement library) => library != null && "dart.dom.html" == library.name;
/**
* Return `true` if the given node is not a type literal.
@@ -13298,7 +13606,7 @@
* @param node the node being tested
* @return `true` if the given node is not a type literal
*/
- bool isNotTypeLiteral(Identifier node) {
+ bool _isNotTypeLiteral(Identifier node) {
AstNode parent = node.parent;
return parent is TypeName || (parent is PrefixedIdentifier && (parent.parent is TypeName || identical(parent.prefix, node))) || (parent is PropertyAccess && identical(parent.target, node)) || (parent is MethodInvocation && identical(node, parent.target));
}
@@ -13309,7 +13617,7 @@
* @param expression the node whose type is to be recorded
* @param type the propagated type of the node
*/
- void recordPropagatedType(Expression expression, Type2 type) {
+ void _recordPropagatedType(Expression expression, DartType type) {
if (type != null && !type.isDynamic) {
expression.propagatedType = type;
}
@@ -13324,8 +13632,8 @@
* @return the propagated return type that was computed, may be `null` if it is not more
* specific than the static return type.
*/
- void recordPropagatedTypeOfFunction(ExecutableElement functionElement, FunctionBody body) {
- Type2 propagatedReturnType = computePropagatedReturnTypeOfFunction(body);
+ void _recordPropagatedTypeOfFunction(ExecutableElement functionElement, FunctionBody body) {
+ DartType propagatedReturnType = _computePropagatedReturnTypeOfFunction(body);
if (propagatedReturnType == null) {
return;
}
@@ -13334,7 +13642,7 @@
return;
}
// Record only if we inferred more specific type.
- Type2 staticReturnType = functionElement.returnType;
+ DartType staticReturnType = functionElement.returnType;
if (!propagatedReturnType.isMoreSpecificThan(staticReturnType)) {
return;
}
@@ -13348,7 +13656,7 @@
* @param expression the node whose type is to be recorded
* @param type the static type of the node
*/
- void recordStaticType(Expression expression, Type2 type) {
+ void _recordStaticType(Expression expression, DartType type) {
if (type == null) {
expression.staticType = _dynamicType;
} else {
@@ -13363,24 +13671,24 @@
* @param staticType the static type of the expression as resolved
* @return the better type guess, or the same static type as given
*/
- Type2 refineBinaryExpressionType(BinaryExpression node, Type2 staticType) {
+ DartType _refineBinaryExpressionType(BinaryExpression node, DartType staticType) {
sc.TokenType operator = node.operator.type;
// bool
if (identical(operator, sc.TokenType.AMPERSAND_AMPERSAND) || identical(operator, sc.TokenType.BAR_BAR) || identical(operator, sc.TokenType.EQ_EQ) || identical(operator, sc.TokenType.BANG_EQ)) {
return _typeProvider.boolType;
}
- Type2 intType = _typeProvider.intType;
- if (getStaticType(node.leftOperand) == intType) {
+ DartType intType = _typeProvider.intType;
+ if (_getStaticType(node.leftOperand) == intType) {
// int op double
if (identical(operator, sc.TokenType.MINUS) || identical(operator, sc.TokenType.PERCENT) || identical(operator, sc.TokenType.PLUS) || identical(operator, sc.TokenType.STAR)) {
- Type2 doubleType = _typeProvider.doubleType;
- if (getStaticType(node.rightOperand) == doubleType) {
+ DartType doubleType = _typeProvider.doubleType;
+ if (_getStaticType(node.rightOperand) == doubleType) {
return doubleType;
}
}
// int op int
if (identical(operator, sc.TokenType.MINUS) || identical(operator, sc.TokenType.PERCENT) || identical(operator, sc.TokenType.PLUS) || identical(operator, sc.TokenType.STAR) || identical(operator, sc.TokenType.TILDE_SLASH)) {
- if (getStaticType(node.rightOperand) == intType) {
+ if (_getStaticType(node.rightOperand) == intType) {
staticType = intType;
}
}
@@ -13395,15 +13703,17 @@
}
class GeneralizingAstVisitor_StaticTypeAnalyzer_computePropagatedReturnTypeOfFunction extends GeneralizingAstVisitor<Object> {
- List<Type2> result;
+ List<DartType> result;
GeneralizingAstVisitor_StaticTypeAnalyzer_computePropagatedReturnTypeOfFunction(this.result) : super();
+ @override
Object visitExpression(Expression node) => null;
+ @override
Object visitReturnStatement(ReturnStatement node) {
// prepare this 'return' type
- Type2 type;
+ DartType type;
Expression expression = node.expression;
if (expression != null) {
type = expression.bestType;
@@ -13444,10 +13754,10 @@
*/
Set<ClassElement> computeAllSubtypes(ClassElement classElement) {
// Ensure that we have generated the subtype map for the library
- computeSubtypesInLibrary(classElement.library);
+ _computeSubtypesInLibrary(classElement.library);
// use the subtypeMap to compute the set of all subtypes and subtype's subtypes
Set<ClassElement> allSubtypes = new Set<ClassElement>();
- safelyComputeAllSubtypes(classElement, new Set<ClassElement>(), allSubtypes);
+ _safelyComputeAllSubtypes(classElement, new Set<ClassElement>(), allSubtypes);
return allSubtypes;
}
@@ -13458,7 +13768,7 @@
* @param libraryElement the library to visit, it it hasn't been visited already
*/
void ensureLibraryVisited(LibraryElement libraryElement) {
- computeSubtypesInLibrary(libraryElement);
+ _computeSubtypesInLibrary(libraryElement);
}
/**
@@ -13467,26 +13777,26 @@
*
* @param classElement the class element
*/
- void computeSubtypesInClass(ClassElement classElement) {
+ void _computeSubtypesInClass(ClassElement classElement) {
InterfaceType supertypeType = classElement.supertype;
if (supertypeType != null) {
ClassElement supertypeElement = supertypeType.element;
if (supertypeElement != null) {
- putInSubtypeMap(supertypeElement, classElement);
+ _putInSubtypeMap(supertypeElement, classElement);
}
}
List<InterfaceType> interfaceTypes = classElement.interfaces;
for (InterfaceType interfaceType in interfaceTypes) {
ClassElement interfaceElement = interfaceType.element;
if (interfaceElement != null) {
- putInSubtypeMap(interfaceElement, classElement);
+ _putInSubtypeMap(interfaceElement, classElement);
}
}
List<InterfaceType> mixinTypes = classElement.mixins;
for (InterfaceType mixinType in mixinTypes) {
ClassElement mixinElement = mixinType.element;
if (mixinElement != null) {
- putInSubtypeMap(mixinElement, classElement);
+ _putInSubtypeMap(mixinElement, classElement);
}
}
}
@@ -13498,10 +13808,10 @@
*
* @param unitElement the compilation unit element
*/
- void computeSubtypesInCompilationUnit(CompilationUnitElement unitElement) {
+ void _computeSubtypesInCompilationUnit(CompilationUnitElement unitElement) {
List<ClassElement> classElements = unitElement.types;
for (ClassElement classElement in classElements) {
- computeSubtypesInClass(classElement);
+ _computeSubtypesInClass(classElement);
}
}
@@ -13513,23 +13823,23 @@
*
* @param libraryElement the library element
*/
- void computeSubtypesInLibrary(LibraryElement libraryElement) {
+ void _computeSubtypesInLibrary(LibraryElement libraryElement) {
if (libraryElement == null || _visitedLibraries.contains(libraryElement)) {
return;
}
_visitedLibraries.add(libraryElement);
- computeSubtypesInCompilationUnit(libraryElement.definingCompilationUnit);
+ _computeSubtypesInCompilationUnit(libraryElement.definingCompilationUnit);
List<CompilationUnitElement> parts = libraryElement.parts;
for (CompilationUnitElement part in parts) {
- computeSubtypesInCompilationUnit(part);
+ _computeSubtypesInCompilationUnit(part);
}
List<LibraryElement> imports = libraryElement.importedLibraries;
for (LibraryElement importElt in imports) {
- computeSubtypesInLibrary(importElt.library);
+ _computeSubtypesInLibrary(importElt.library);
}
List<LibraryElement> exports = libraryElement.exportedLibraries;
for (LibraryElement exportElt in exports) {
- computeSubtypesInLibrary(exportElt.library);
+ _computeSubtypesInLibrary(exportElt.library);
}
}
@@ -13539,7 +13849,7 @@
* @param supertypeElement the key for the [subtypeMap] map
* @param subtypeElement the value for the [subtypeMap] map
*/
- void putInSubtypeMap(ClassElement supertypeElement, ClassElement subtypeElement) {
+ void _putInSubtypeMap(ClassElement supertypeElement, ClassElement subtypeElement) {
Set<ClassElement> subtypes = _subtypeMap[supertypeElement];
if (subtypes == null) {
subtypes = new Set<ClassElement>();
@@ -13556,7 +13866,7 @@
* @param visitedClasses the set of class elements that this method has already recursively seen
* @param allSubtypes the computed set of subtypes of the passed class element
*/
- void safelyComputeAllSubtypes(ClassElement classElement, Set<ClassElement> visitedClasses, Set<ClassElement> allSubtypes) {
+ void _safelyComputeAllSubtypes(ClassElement classElement, Set<ClassElement> visitedClasses, Set<ClassElement> allSubtypes) {
if (!visitedClasses.add(classElement)) {
// if this class has already been called on this class element
return;
@@ -13566,7 +13876,7 @@
return;
}
for (ClassElement subtype in subtypes) {
- safelyComputeAllSubtypes(subtype, visitedClasses, allSubtypes);
+ _safelyComputeAllSubtypes(subtype, visitedClasses, allSubtypes);
}
allSubtypes.addAll(subtypes);
}
@@ -13587,7 +13897,7 @@
*
* @param overrides the overrides to be applied
*/
- void applyOverrides(Map<Element, Type2> overrides) {
+ void applyOverrides(Map<Element, DartType> overrides) {
if (_currentScope == null) {
throw new IllegalStateException("Cannot apply overrides without a scope");
}
@@ -13600,7 +13910,7 @@
*
* @return the overrides in the current scope
*/
- Map<Element, Type2> captureLocalOverrides() {
+ Map<Element, DartType> captureLocalOverrides() {
if (_currentScope == null) {
throw new IllegalStateException("Cannot capture local overrides without a scope");
}
@@ -13614,7 +13924,7 @@
* @param variableList the list of variables whose overriding types are to be captured
* @return a table mapping elements to their overriding types
*/
- Map<Element, Type2> captureOverrides(VariableDeclarationList variableList) {
+ Map<Element, DartType> captureOverrides(VariableDeclarationList variableList) {
if (_currentScope == null) {
throw new IllegalStateException("Cannot capture overrides without a scope");
}
@@ -13645,7 +13955,7 @@
* @param element the element whose type might have been overridden
* @return the overridden type of the given element
*/
- Type2 getType(Element element) {
+ DartType getType(Element element) {
if (_currentScope == null) {
return null;
}
@@ -13658,7 +13968,7 @@
* @param element the element whose type might have been overridden
* @param type the overridden type of the given element
*/
- void setType(Element element, Type2 type) {
+ void setType(Element element, DartType type) {
if (_currentScope == null) {
throw new IllegalStateException("Cannot override without a scope");
}
@@ -13679,7 +13989,7 @@
/**
* A table mapping elements to the overridden type of that element.
*/
- Map<Element, Type2> _overridenTypes = new Map<Element, Type2>();
+ Map<Element, DartType> _overridenTypes = new Map<Element, DartType>();
/**
* Initialize a newly created scope to be an empty child of the given scope.
@@ -13695,8 +14005,8 @@
*
* @param overrides the overrides to be applied
*/
- void applyOverrides(Map<Element, Type2> overrides) {
- for (MapEntry<Element, Type2> entry in getMapEntrySet(overrides)) {
+ void applyOverrides(Map<Element, DartType> overrides) {
+ for (MapEntry<Element, DartType> entry in getMapEntrySet(overrides)) {
_overridenTypes[entry.getKey()] = entry.getValue();
}
}
@@ -13707,7 +14017,7 @@
*
* @return the overrides in the current scope
*/
- Map<Element, Type2> captureLocalOverrides() => _overridenTypes;
+ Map<Element, DartType> captureLocalOverrides() => _overridenTypes;
/**
* Return a map from the elements for the variables in the given list that have their types
@@ -13716,13 +14026,13 @@
* @param variableList the list of variables whose overriding types are to be captured
* @return a table mapping elements to their overriding types
*/
- Map<Element, Type2> captureOverrides(VariableDeclarationList variableList) {
- Map<Element, Type2> overrides = new Map<Element, Type2>();
+ Map<Element, DartType> captureOverrides(VariableDeclarationList variableList) {
+ Map<Element, DartType> overrides = new Map<Element, DartType>();
if (variableList.isConst || variableList.isFinal) {
for (VariableDeclaration variable in variableList.variables) {
Element element = variable.element;
if (element != null) {
- Type2 type = _overridenTypes[element];
+ DartType type = _overridenTypes[element];
if (type != null) {
overrides[element] = type;
}
@@ -13739,8 +14049,8 @@
* @param element the element whose type might have been overridden
* @return the overridden type of the given element
*/
- Type2 getType(Element element) {
- Type2 type = _overridenTypes[element];
+ DartType getType(Element element) {
+ DartType type = _overridenTypes[element];
if (type == null && element is PropertyAccessorElement) {
type = _overridenTypes[element.variable];
}
@@ -13758,7 +14068,7 @@
* @param element the element whose type might have been overridden
* @param type the overridden type of the given element
*/
- void setType(Element element, Type2 type) {
+ void setType(Element element, DartType type) {
_overridenTypes[element] = type;
}
}
@@ -13800,8 +14110,8 @@
*
* @return the static type of the given variable - declared or promoted
*/
- Type2 getStaticType(VariableElement variable) {
- Type2 staticType = getType(variable);
+ DartType getStaticType(VariableElement variable) {
+ DartType staticType = getType(variable);
if (staticType == null) {
staticType = variable.type;
}
@@ -13815,7 +14125,7 @@
* @param element the element whose type might have been promoted
* @return the promoted type of the given element
*/
- Type2 getType(Element element) {
+ DartType getType(Element element) {
if (_currentScope == null) {
return null;
}
@@ -13828,7 +14138,7 @@
* @param element the element whose type might have been promoted
* @param type the promoted type of the given element
*/
- void setType(Element element, Type2 type) {
+ void setType(Element element, DartType type) {
if (_currentScope == null) {
throw new IllegalStateException("Cannot promote without a scope");
}
@@ -13849,7 +14159,7 @@
/**
* A table mapping elements to the promoted type of that element.
*/
- Map<Element, Type2> _promotedTypes = new Map<Element, Type2>();
+ Map<Element, DartType> _promotedTypes = new Map<Element, DartType>();
/**
* Initialize a newly created scope to be an empty child of the given scope.
@@ -13872,8 +14182,8 @@
* @param element the element whose type might have been promoted
* @return the promoted type of the given element
*/
- Type2 getType(Element element) {
- Type2 type = _promotedTypes[element];
+ DartType getType(Element element) {
+ DartType type = _promotedTypes[element];
if (type == null && element is PropertyAccessorElement) {
type = _promotedTypes[element.variable];
}
@@ -13891,7 +14201,7 @@
* @param element the element whose type might have been promoted
* @param type the promoted type of the given element
*/
- void setType(Element element, Type2 type) {
+ void setType(Element element, DartType type) {
_promotedTypes[element] = type;
}
}
@@ -13913,7 +14223,7 @@
*
* @return the type representing the type 'bottom'
*/
- Type2 get bottomType;
+ DartType get bottomType;
/**
* Return the type representing the built-in type 'Deprecated'.
@@ -13934,7 +14244,7 @@
*
* @return the type representing the built-in type 'dynamic'
*/
- Type2 get dynamicType;
+ DartType get dynamicType;
/**
* Return the type representing the built-in type 'Function'.
@@ -14027,7 +14337,7 @@
/**
* The type representing the type 'bottom'.
*/
- Type2 _bottomType;
+ DartType _bottomType;
/**
* The type representing the built-in type 'double'.
@@ -14042,7 +14352,7 @@
/**
* The type representing the built-in type 'dynamic'.
*/
- Type2 _dynamicType;
+ DartType _dynamicType;
/**
* The type representing the built-in type 'Function'.
@@ -14105,39 +14415,55 @@
* @param coreLibrary the element representing the core library (dart:core).
*/
TypeProviderImpl(LibraryElement coreLibrary) {
- initializeFrom(coreLibrary);
+ _initializeFrom(coreLibrary);
}
+ @override
InterfaceType get boolType => _boolType;
- Type2 get bottomType => _bottomType;
+ @override
+ DartType get bottomType => _bottomType;
+ @override
InterfaceType get deprecatedType => _deprecatedType;
+ @override
InterfaceType get doubleType => _doubleType;
- Type2 get dynamicType => _dynamicType;
+ @override
+ DartType get dynamicType => _dynamicType;
+ @override
InterfaceType get functionType => _functionType;
+ @override
InterfaceType get intType => _intType;
+ @override
InterfaceType get listType => _listType;
+ @override
InterfaceType get mapType => _mapType;
+ @override
InterfaceType get nullType => _nullType;
+ @override
InterfaceType get numType => _numType;
+ @override
InterfaceType get objectType => _objectType;
+ @override
InterfaceType get stackTraceType => _stackTraceType;
+ @override
InterfaceType get stringType => _stringType;
+ @override
InterfaceType get symbolType => _symbolType;
+ @override
InterfaceType get typeType => _typeType;
/**
@@ -14148,7 +14474,7 @@
* @param typeName the name of the type being searched for
* @return the type that was found
*/
- InterfaceType getType(Namespace namespace, String typeName) {
+ InterfaceType _getType(Namespace namespace, String typeName) {
Element element = namespace.get(typeName);
if (element == null) {
AnalysisEngine.instance.logger.logInformation("No definition of type ${typeName}");
@@ -14162,24 +14488,24 @@
*
* @param library the library containing the definitions of the core types
*/
- void initializeFrom(LibraryElement library) {
+ void _initializeFrom(LibraryElement library) {
Namespace namespace = new NamespaceBuilder().createPublicNamespaceForLibrary(library);
- _boolType = getType(namespace, "bool");
+ _boolType = _getType(namespace, "bool");
_bottomType = BottomTypeImpl.instance;
- _deprecatedType = getType(namespace, "Deprecated");
- _doubleType = getType(namespace, "double");
+ _deprecatedType = _getType(namespace, "Deprecated");
+ _doubleType = _getType(namespace, "double");
_dynamicType = DynamicTypeImpl.instance;
- _functionType = getType(namespace, "Function");
- _intType = getType(namespace, "int");
- _listType = getType(namespace, "List");
- _mapType = getType(namespace, "Map");
- _nullType = getType(namespace, "Null");
- _numType = getType(namespace, "num");
- _objectType = getType(namespace, "Object");
- _stackTraceType = getType(namespace, "StackTrace");
- _stringType = getType(namespace, "String");
- _symbolType = getType(namespace, "Symbol");
- _typeType = getType(namespace, "Type");
+ _functionType = _getType(namespace, "Function");
+ _intType = _getType(namespace, "int");
+ _listType = _getType(namespace, "List");
+ _mapType = _getType(namespace, "Map");
+ _nullType = _getType(namespace, "Null");
+ _numType = _getType(namespace, "num");
+ _objectType = _getType(namespace, "Object");
+ _stackTraceType = _getType(namespace, "StackTrace");
+ _stringType = _getType(namespace, "String");
+ _symbolType = _getType(namespace, "Symbol");
+ _typeType = _getType(namespace, "Type");
}
}
@@ -14193,7 +14519,7 @@
/**
* @return `true` if the name of the given [TypeName] is an built-in identifier.
*/
- static bool isBuiltInIdentifier(TypeName node) {
+ static bool _isBuiltInIdentifier(TypeName node) {
sc.Token token = node.name.beginToken;
return identical(token.type, sc.TokenType.KEYWORD);
}
@@ -14201,7 +14527,7 @@
/**
* @return `true` if given [TypeName] is used as a type annotation.
*/
- static bool isTypeAnnotation(TypeName node) {
+ static bool _isTypeAnnotation(TypeName node) {
AstNode parent = node.parent;
if (parent is VariableDeclarationList) {
return identical(parent.type, node);
@@ -14218,7 +14544,7 @@
/**
* The type representing the type 'dynamic'.
*/
- Type2 _dynamicType;
+ DartType _dynamicType;
/**
* The flag specifying if currently visited class references 'super' expression.
@@ -14264,6 +14590,7 @@
_dynamicType = typeProvider.dynamicType;
}
+ @override
Object visitCatchClause(CatchClause node) {
super.visitCatchClause(node);
SimpleIdentifier exception = node.exceptionParameter;
@@ -14271,13 +14598,13 @@
// If an 'on' clause is provided the type of the exception parameter is the type in the 'on'
// clause. Otherwise, the type of the exception parameter is 'Object'.
TypeName exceptionTypeName = node.exceptionType;
- Type2 exceptionType;
+ DartType exceptionType;
if (exceptionTypeName == null) {
exceptionType = typeProvider.dynamicType;
} else {
- exceptionType = getType(exceptionTypeName);
+ exceptionType = _getType(exceptionTypeName);
}
- recordType(exception, exceptionType);
+ _recordType(exception, exceptionType);
Element element = exception.staticElement;
if (element is VariableElementImpl) {
element.type = exceptionType;
@@ -14286,20 +14613,21 @@
}
SimpleIdentifier stackTrace = node.stackTraceParameter;
if (stackTrace != null) {
- recordType(stackTrace, typeProvider.stackTraceType);
+ _recordType(stackTrace, typeProvider.stackTraceType);
}
return null;
}
+ @override
Object visitClassDeclaration(ClassDeclaration node) {
_hasReferenceToSuper = false;
super.visitClassDeclaration(node);
- ClassElementImpl classElement = getClassElement(node.name);
+ ClassElementImpl classElement = _getClassElement(node.name);
InterfaceType superclassType = null;
ExtendsClause extendsClause = node.extendsClause;
if (extendsClause != null) {
ErrorCode errorCode = (node.withClause == null ? CompileTimeErrorCode.EXTENDS_NON_CLASS : CompileTimeErrorCode.MIXIN_WITH_NON_CLASS_SUPERCLASS);
- superclassType = resolveType(extendsClause.superclass, errorCode, errorCode);
+ superclassType = _resolveType(extendsClause.superclass, errorCode, errorCode);
if (superclassType != typeProvider.objectType) {
classElement.validMixin = false;
}
@@ -14314,15 +14642,16 @@
classElement.supertype = superclassType;
classElement.hasReferenceToSuper = _hasReferenceToSuper;
}
- resolve(classElement, node.withClause, node.implementsClause);
+ _resolve(classElement, node.withClause, node.implementsClause);
return null;
}
+ @override
Object visitClassTypeAlias(ClassTypeAlias node) {
super.visitClassTypeAlias(node);
- ClassElementImpl classElement = getClassElement(node.name);
+ ClassElementImpl classElement = _getClassElement(node.name);
ErrorCode errorCode = CompileTimeErrorCode.MIXIN_WITH_NON_CLASS_SUPERCLASS;
- InterfaceType superclassType = resolveType(node.superclass, errorCode, errorCode);
+ InterfaceType superclassType = _resolveType(node.superclass, errorCode, errorCode);
if (superclassType == null) {
superclassType = typeProvider.objectType;
}
@@ -14333,24 +14662,25 @@
List<ConstructorElement> constructors = superclassElement.constructors;
int count = constructors.length;
if (count > 0) {
- List<Type2> parameterTypes = TypeParameterTypeImpl.getTypes(superclassType.typeParameters);
- List<Type2> argumentTypes = getArgumentTypes(node.superclass.typeArguments, parameterTypes);
+ List<DartType> parameterTypes = TypeParameterTypeImpl.getTypes(superclassType.typeParameters);
+ List<DartType> argumentTypes = _getArgumentTypes(node.superclass.typeArguments, parameterTypes);
InterfaceType classType = classElement.type;
List<ConstructorElement> implicitConstructors = new List<ConstructorElement>();
for (int i = 0; i < count; i++) {
ConstructorElement explicitConstructor = constructors[i];
if (!explicitConstructor.isFactory) {
- implicitConstructors.add(createImplicitContructor(classType, explicitConstructor, parameterTypes, argumentTypes));
+ implicitConstructors.add(_createImplicitContructor(classType, explicitConstructor, parameterTypes, argumentTypes));
}
}
classElement.constructors = new List.from(implicitConstructors);
}
}
}
- resolve(classElement, node.withClause, node.implementsClause);
+ _resolve(classElement, node.withClause, node.implementsClause);
return null;
}
+ @override
Object visitConstructorDeclaration(ConstructorDeclaration node) {
super.visitConstructorDeclaration(node);
ExecutableElementImpl element = node.element as ExecutableElementImpl;
@@ -14362,20 +14692,22 @@
return null;
}
+ @override
Object visitDeclaredIdentifier(DeclaredIdentifier node) {
super.visitDeclaredIdentifier(node);
- Type2 declaredType;
+ DartType declaredType;
TypeName typeName = node.type;
if (typeName == null) {
declaredType = _dynamicType;
} else {
- declaredType = getType(typeName);
+ declaredType = _getType(typeName);
}
LocalVariableElementImpl element = node.element as LocalVariableElementImpl;
element.type = declaredType;
return null;
}
+ @override
Object visitFieldFormalParameter(FieldFormalParameter node) {
super.visitFieldFormalParameter(node);
Element element = node.identifier.staticElement;
@@ -14383,7 +14715,7 @@
ParameterElementImpl parameter = element;
FormalParameterList parameterList = node.parameters;
if (parameterList == null) {
- Type2 type;
+ DartType type;
TypeName typeName = node.type;
if (typeName == null) {
type = _dynamicType;
@@ -14394,21 +14726,22 @@
}
}
} else {
- type = getType(typeName);
+ type = _getType(typeName);
}
parameter.type = type;
} else {
- setFunctionTypedParameterType(parameter, node.type, node.parameters);
+ _setFunctionTypedParameterType(parameter, node.type, node.parameters);
}
} else {
}
return null;
}
+ @override
Object visitFunctionDeclaration(FunctionDeclaration node) {
super.visitFunctionDeclaration(node);
ExecutableElementImpl element = node.element as ExecutableElementImpl;
- element.returnType = computeReturnType(node.returnType);
+ element.returnType = _computeReturnType(node.returnType);
FunctionTypeImpl type = new FunctionTypeImpl.con1(element);
ClassElement definingClass = element.getAncestor((element) => element is ClassElement);
if (definingClass != null) {
@@ -14418,27 +14751,30 @@
return null;
}
+ @override
Object visitFunctionTypeAlias(FunctionTypeAlias node) {
super.visitFunctionTypeAlias(node);
FunctionTypeAliasElementImpl element = node.element as FunctionTypeAliasElementImpl;
- element.returnType = computeReturnType(node.returnType);
+ element.returnType = _computeReturnType(node.returnType);
return null;
}
+ @override
Object visitFunctionTypedFormalParameter(FunctionTypedFormalParameter node) {
super.visitFunctionTypedFormalParameter(node);
Element element = node.identifier.staticElement;
if (element is ParameterElementImpl) {
- setFunctionTypedParameterType(element, node.returnType, node.parameters);
+ _setFunctionTypedParameterType(element, node.returnType, node.parameters);
} else {
}
return null;
}
+ @override
Object visitMethodDeclaration(MethodDeclaration node) {
super.visitMethodDeclaration(node);
ExecutableElementImpl element = node.element as ExecutableElementImpl;
- element.returnType = computeReturnType(node.returnType);
+ element.returnType = _computeReturnType(node.returnType);
FunctionTypeImpl type = new FunctionTypeImpl.con1(element);
ClassElement definingClass = element.getAncestor((element) => element is ClassElement);
if (definingClass != null) {
@@ -14451,7 +14787,7 @@
if (accessor.isGetter) {
variable.type = type.returnType;
} else if (variable.type == null) {
- List<Type2> parameterTypes = type.normalParameterTypes;
+ List<DartType> parameterTypes = type.normalParameterTypes;
if (parameterTypes != null && parameterTypes.length > 0) {
variable.type = parameterTypes[0];
}
@@ -14460,14 +14796,15 @@
return null;
}
+ @override
Object visitSimpleFormalParameter(SimpleFormalParameter node) {
super.visitSimpleFormalParameter(node);
- Type2 declaredType;
+ DartType declaredType;
TypeName typeName = node.type;
if (typeName == null) {
declaredType = _dynamicType;
} else {
- declaredType = getType(typeName);
+ declaredType = _getType(typeName);
}
Element element = node.identifier.staticElement;
if (element is ParameterElement) {
@@ -14477,11 +14814,13 @@
return null;
}
+ @override
Object visitSuperExpression(SuperExpression node) {
_hasReferenceToSuper = true;
return super.visitSuperExpression(node);
}
+ @override
Object visitTypeName(TypeName node) {
super.visitTypeName(node);
Identifier typeName = node.name;
@@ -14492,12 +14831,12 @@
// Check to see whether the type name is either 'dynamic' or 'void', neither of which are in
// the name scope and hence will not be found by normal means.
//
- if (typeName.name == this._dynamicType.name) {
- setElement(typeName, this._dynamicType.element);
+ if (typeName.name == _dynamicType.name) {
+ _setElement(typeName, _dynamicType.element);
if (argumentList != null) {
}
- typeName.staticType = this._dynamicType;
- node.type = this._dynamicType;
+ typeName.staticType = _dynamicType;
+ node.type = _dynamicType;
return null;
}
VoidTypeImpl voidType = VoidTypeImpl.instance;
@@ -14529,7 +14868,7 @@
// Else, if this expression is a new expression, report a NEW_WITH_NON_TYPE warning.
reportErrorForNode(StaticWarningCode.NEW_WITH_NON_TYPE, prefixedIdentifier.identifier, [prefixedIdentifier.identifier.name]);
}
- setElement(prefix, element);
+ _setElement(prefix, element);
return null;
} else if (element != null) {
//
@@ -14548,8 +14887,8 @@
}
// check element
bool elementValid = element is! MultiplyDefinedElement;
- if (elementValid && element is! ClassElement && isTypeNameInInstanceCreationExpression(node)) {
- SimpleIdentifier typeNameSimple = getTypeSimpleIdentifier(typeName);
+ if (elementValid && element is! ClassElement && _isTypeNameInInstanceCreationExpression(node)) {
+ SimpleIdentifier typeNameSimple = _getTypeSimpleIdentifier(typeName);
InstanceCreationExpression creation = node.parent.parent as InstanceCreationExpression;
if (creation.isConst) {
if (element == null) {
@@ -14570,22 +14909,22 @@
// TODO(jwren) Consider moving the check for CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE
// from the ErrorVerifier, so that we don't have two errors on a built in identifier being
// used as a class name. See CompileTimeErrorCodeTest.test_builtInIdentifierAsType().
- SimpleIdentifier typeNameSimple = getTypeSimpleIdentifier(typeName);
+ SimpleIdentifier typeNameSimple = _getTypeSimpleIdentifier(typeName);
RedirectingConstructorKind redirectingConstructorKind;
- if (isBuiltInIdentifier(node) && isTypeAnnotation(node)) {
+ if (_isBuiltInIdentifier(node) && _isTypeAnnotation(node)) {
reportErrorForNode(CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE, typeName, [typeName.name]);
} else if (typeNameSimple.name == "boolean") {
reportErrorForNode(StaticWarningCode.UNDEFINED_CLASS_BOOLEAN, typeNameSimple, []);
- } else if (isTypeNameInCatchClause(node)) {
+ } else if (_isTypeNameInCatchClause(node)) {
reportErrorForNode(StaticWarningCode.NON_TYPE_IN_CATCH_CLAUSE, typeName, [typeName.name]);
- } else if (isTypeNameInAsExpression(node)) {
+ } else if (_isTypeNameInAsExpression(node)) {
reportErrorForNode(StaticWarningCode.CAST_TO_NON_TYPE, typeName, [typeName.name]);
- } else if (isTypeNameInIsExpression(node)) {
+ } else if (_isTypeNameInIsExpression(node)) {
reportErrorForNode(StaticWarningCode.TYPE_TEST_NON_TYPE, typeName, [typeName.name]);
- } else if ((redirectingConstructorKind = getRedirectingConstructorKind(node)) != null) {
+ } else if ((redirectingConstructorKind = _getRedirectingConstructorKind(node)) != null) {
ErrorCode errorCode = (identical(redirectingConstructorKind, RedirectingConstructorKind.CONST) ? CompileTimeErrorCode.REDIRECT_TO_NON_CLASS : StaticWarningCode.REDIRECT_TO_NON_CLASS) as ErrorCode;
reportErrorForNode(errorCode, typeName, [typeName.name]);
- } else if (isTypeNameInTypeArgumentList(node)) {
+ } else if (_isTypeNameInTypeArgumentList(node)) {
reportErrorForNode(StaticTypeWarningCode.NON_TYPE_AS_TYPE_ARGUMENT, typeName, [typeName.name]);
} else {
reportErrorForNode(StaticWarningCode.UNDEFINED_CLASS, typeName, [typeName.name]);
@@ -14594,45 +14933,45 @@
}
if (!elementValid) {
if (element is MultiplyDefinedElement) {
- setElement(typeName, element);
+ _setElement(typeName, element);
} else {
- setElement(typeName, this._dynamicType.element);
+ _setElement(typeName, _dynamicType.element);
}
- typeName.staticType = this._dynamicType;
- node.type = this._dynamicType;
+ typeName.staticType = _dynamicType;
+ node.type = _dynamicType;
return null;
}
- Type2 type = null;
+ DartType type = null;
if (element is ClassElement) {
- setElement(typeName, element);
+ _setElement(typeName, element);
type = (element as ClassElement).type;
} else if (element is FunctionTypeAliasElement) {
- setElement(typeName, element);
+ _setElement(typeName, element);
type = (element as FunctionTypeAliasElement).type;
} else if (element is TypeParameterElement) {
- setElement(typeName, element);
+ _setElement(typeName, element);
type = (element as TypeParameterElement).type;
if (argumentList != null) {
}
} else if (element is MultiplyDefinedElement) {
List<Element> elements = (element as MultiplyDefinedElement).conflictingElements;
- type = getTypeWhenMultiplyDefined(elements);
+ type = _getTypeWhenMultiplyDefined(elements);
if (type != null) {
node.type = type;
}
} else {
// The name does not represent a type.
RedirectingConstructorKind redirectingConstructorKind;
- if (isTypeNameInCatchClause(node)) {
+ if (_isTypeNameInCatchClause(node)) {
reportErrorForNode(StaticWarningCode.NON_TYPE_IN_CATCH_CLAUSE, typeName, [typeName.name]);
- } else if (isTypeNameInAsExpression(node)) {
+ } else if (_isTypeNameInAsExpression(node)) {
reportErrorForNode(StaticWarningCode.CAST_TO_NON_TYPE, typeName, [typeName.name]);
- } else if (isTypeNameInIsExpression(node)) {
+ } else if (_isTypeNameInIsExpression(node)) {
reportErrorForNode(StaticWarningCode.TYPE_TEST_NON_TYPE, typeName, [typeName.name]);
- } else if ((redirectingConstructorKind = getRedirectingConstructorKind(node)) != null) {
+ } else if ((redirectingConstructorKind = _getRedirectingConstructorKind(node)) != null) {
ErrorCode errorCode = (identical(redirectingConstructorKind, RedirectingConstructorKind.CONST) ? CompileTimeErrorCode.REDIRECT_TO_NON_CLASS : StaticWarningCode.REDIRECT_TO_NON_CLASS) as ErrorCode;
reportErrorForNode(errorCode, typeName, [typeName.name]);
- } else if (isTypeNameInTypeArgumentList(node)) {
+ } else if (_isTypeNameInTypeArgumentList(node)) {
reportErrorForNode(StaticTypeWarningCode.NON_TYPE_AS_TYPE_ARGUMENT, typeName, [typeName.name]);
} else {
AstNode parent = typeName.parent;
@@ -14644,26 +14983,26 @@
reportErrorForNode(StaticWarningCode.NOT_A_TYPE, typeName, [typeName.name]);
}
}
- setElement(typeName, this._dynamicType.element);
- typeName.staticType = this._dynamicType;
- node.type = this._dynamicType;
+ _setElement(typeName, _dynamicType.element);
+ typeName.staticType = _dynamicType;
+ node.type = _dynamicType;
return null;
}
if (argumentList != null) {
NodeList<TypeName> arguments = argumentList.arguments;
int argumentCount = arguments.length;
- List<Type2> parameters = getTypeArguments(type);
+ List<DartType> parameters = _getTypeArguments(type);
int parameterCount = parameters.length;
int count = Math.min(argumentCount, parameterCount);
- List<Type2> typeArguments = new List<Type2>();
+ List<DartType> typeArguments = new List<DartType>();
for (int i = 0; i < count; i++) {
- Type2 argumentType = getType(arguments[i]);
+ DartType argumentType = _getType(arguments[i]);
if (argumentType != null) {
typeArguments.add(argumentType);
}
}
if (argumentCount != parameterCount) {
- reportErrorForNode(getInvalidTypeParametersErrorCode(node), node, [typeName.name, parameterCount, argumentCount]);
+ reportErrorForNode(_getInvalidTypeParametersErrorCode(node), node, [typeName.name, parameterCount, argumentCount]);
}
argumentCount = typeArguments.length;
if (argumentCount < parameterCount) {
@@ -14673,7 +15012,7 @@
// enough times to make the count equal.
//
for (int i = argumentCount; i < parameterCount; i++) {
- typeArguments.add(this._dynamicType);
+ typeArguments.add(_dynamicType);
}
}
if (type is InterfaceTypeImpl) {
@@ -14688,11 +15027,11 @@
//
// Check for the case where there are no type arguments given for a parameterized type.
//
- List<Type2> parameters = getTypeArguments(type);
+ List<DartType> parameters = _getTypeArguments(type);
int parameterCount = parameters.length;
if (parameterCount > 0) {
DynamicTypeImpl dynamicType = DynamicTypeImpl.instance;
- List<Type2> arguments = new List<Type2>(parameterCount);
+ List<DartType> arguments = new List<DartType>(parameterCount);
for (int i = 0; i < parameterCount; i++) {
arguments[i] = dynamicType;
}
@@ -14704,6 +15043,7 @@
return null;
}
+ @override
Object visitTypeParameter(TypeParameter node) {
super.visitTypeParameter(node);
TypeName bound = node.bound;
@@ -14716,14 +15056,15 @@
return null;
}
+ @override
Object visitVariableDeclaration(VariableDeclaration node) {
super.visitVariableDeclaration(node);
- Type2 declaredType;
+ DartType declaredType;
TypeName typeName = (node.parent as VariableDeclarationList).type;
if (typeName == null) {
declaredType = _dynamicType;
} else {
- declaredType = getType(typeName);
+ declaredType = _getType(typeName);
}
Element element = node.name.staticElement;
if (element is VariableElement) {
@@ -14757,6 +15098,7 @@
return null;
}
+ @override
void visitClassDeclarationInScope(ClassDeclaration node) {
//
// Process field declarations before constructors and methods so that the types of field formal
@@ -14777,7 +15119,7 @@
* @param returnType the type name representing the return type of the function
* @return the return type that was computed
*/
- Type2 computeReturnType(TypeName returnType) {
+ DartType _computeReturnType(TypeName returnType) {
if (returnType == null) {
return _dynamicType;
} else {
@@ -14795,7 +15137,7 @@
* @param argumentTypes the types with which the parameters are to be replaced
* @return the implicit constructor that was created
*/
- ConstructorElement createImplicitContructor(InterfaceType classType, ConstructorElement explicitConstructor, List<Type2> parameterTypes, List<Type2> argumentTypes) {
+ ConstructorElement _createImplicitContructor(InterfaceType classType, ConstructorElement explicitConstructor, List<DartType> parameterTypes, List<DartType> argumentTypes) {
ConstructorElementImpl implicitConstructor = new ConstructorElementImpl.con2(explicitConstructor.name, -1);
implicitConstructor.synthetic = true;
implicitConstructor.redirectedConstructor = explicitConstructor;
@@ -14831,10 +15173,10 @@
* @param parameterTypes the parameter types that must be matched by the type arguments
* @return the argument types that correspond to the parameter types
*/
- List<Type2> getArgumentTypes(TypeArgumentList typeArguments, List<Type2> parameterTypes) {
+ List<DartType> _getArgumentTypes(TypeArgumentList typeArguments, List<DartType> parameterTypes) {
DynamicTypeImpl dynamic = DynamicTypeImpl.instance;
int parameterCount = parameterTypes.length;
- List<Type2> types = new List<Type2>(parameterCount);
+ List<DartType> types = new List<DartType>(parameterCount);
if (typeArguments == null) {
for (int i = 0; i < parameterCount; i++) {
types[i] = dynamic;
@@ -14858,7 +15200,7 @@
* @param identifier the name from the declaration of a class
* @return the class element that represents the class
*/
- ClassElementImpl getClassElement(SimpleIdentifier identifier) {
+ ClassElementImpl _getClassElement(SimpleIdentifier identifier) {
// TODO(brianwilkerson) Seems like we should be using ClassDeclaration.getElement().
if (identifier == null) {
// TODO(brianwilkerson) Report this
@@ -14881,7 +15223,7 @@
* @param parameterList the list of parameters whose elements are to be returned
* @return the elements associated with the parameters
*/
- List<ParameterElement> getElements(FormalParameterList parameterList) {
+ List<ParameterElement> _getElements(FormalParameterList parameterList) {
List<ParameterElement> elements = new List<ParameterElement>();
for (FormalParameter parameter in parameterList.parameters) {
ParameterElement element = parameter.identifier.staticElement as ParameterElement;
@@ -14902,7 +15244,7 @@
* @return the error code that should be used to report that the wrong number of type arguments
* were provided
*/
- ErrorCode getInvalidTypeParametersErrorCode(TypeName node) {
+ ErrorCode _getInvalidTypeParametersErrorCode(TypeName node) {
AstNode parent = node.parent;
if (parent is ConstructorName) {
parent = parent.parent;
@@ -14924,7 +15266,7 @@
* @return some [RedirectingConstructorKind] if the given type name is used as the type in a
* redirected constructor, or `null` otherwise
*/
- RedirectingConstructorKind getRedirectingConstructorKind(TypeName typeName) {
+ RedirectingConstructorKind _getRedirectingConstructorKind(TypeName typeName) {
AstNode parent = typeName.parent;
if (parent is ConstructorName) {
ConstructorName constructorName = parent as ConstructorName;
@@ -14948,8 +15290,8 @@
* @param typeName the type name representing the type to be returned
* @return the type represented by the type name
*/
- Type2 getType(TypeName typeName) {
- Type2 type = typeName.type;
+ DartType _getType(TypeName typeName) {
+ DartType type = typeName.type;
if (type == null) {
return _dynamicType;
}
@@ -14962,7 +15304,7 @@
* @param type the type whole type arguments are to be returned
* @return the type arguments associated with the given type
*/
- List<Type2> getTypeArguments(Type2 type) {
+ List<DartType> _getTypeArguments(DartType type) {
if (type is InterfaceType) {
return type.typeArguments;
} else if (type is FunctionType) {
@@ -14977,7 +15319,7 @@
* @param typeName the (may be qualified) qualified type name
* @return the simple identifier of the given (may be qualified) type name.
*/
- SimpleIdentifier getTypeSimpleIdentifier(Identifier typeName) {
+ SimpleIdentifier _getTypeSimpleIdentifier(Identifier typeName) {
if (typeName is SimpleIdentifier) {
return typeName;
} else {
@@ -14992,7 +15334,7 @@
* @param elements the elements to which a single name could potentially be resolved
* @return the single interface type that should be used for the type name
*/
- InterfaceType getTypeWhenMultiplyDefined(List<Element> elements) {
+ InterfaceType _getTypeWhenMultiplyDefined(List<Element> elements) {
InterfaceType type = null;
for (Element element in elements) {
if (element is ClassElement) {
@@ -15011,7 +15353,7 @@
* @param typeName the type name to analyzer
* @return `true` if the given type name is used as the type in an as expression
*/
- bool isTypeNameInAsExpression(TypeName typeName) {
+ bool _isTypeNameInAsExpression(TypeName typeName) {
AstNode parent = typeName.parent;
if (parent is AsExpression) {
AsExpression asExpression = parent;
@@ -15026,7 +15368,7 @@
* @param typeName the type name to analyzer
* @return `true` if the given type name is used as the exception type in a catch clause
*/
- bool isTypeNameInCatchClause(TypeName typeName) {
+ bool _isTypeNameInCatchClause(TypeName typeName) {
AstNode parent = typeName.parent;
if (parent is CatchClause) {
CatchClause catchClause = parent;
@@ -15042,7 +15384,7 @@
* @return `true` if the given type name is used as the type in an instance creation
* expression
*/
- bool isTypeNameInInstanceCreationExpression(TypeName typeName) {
+ bool _isTypeNameInInstanceCreationExpression(TypeName typeName) {
AstNode parent = typeName.parent;
if (parent is ConstructorName && parent.parent is InstanceCreationExpression) {
ConstructorName constructorName = parent;
@@ -15057,7 +15399,7 @@
* @param typeName the type name to analyzer
* @return `true` if the given type name is used as the type in an is expression
*/
- bool isTypeNameInIsExpression(TypeName typeName) {
+ bool _isTypeNameInIsExpression(TypeName typeName) {
AstNode parent = typeName.parent;
if (parent is IsExpression) {
IsExpression isExpression = parent;
@@ -15072,7 +15414,7 @@
* @param typeName the type name to analyzer
* @return `true` if the given type name is in a type argument list
*/
- bool isTypeNameInTypeArgumentList(TypeName typeName) => typeName.parent is TypeArgumentList;
+ bool _isTypeNameInTypeArgumentList(TypeName typeName) => typeName.parent is TypeArgumentList;
/**
* Record that the static type of the given node is the given type.
@@ -15080,7 +15422,7 @@
* @param expression the node whose type is to be recorded
* @param type the static type of the node
*/
- Object recordType(Expression expression, Type2 type) {
+ Object _recordType(Expression expression, DartType type) {
if (type == null) {
expression.staticType = _dynamicType;
} else {
@@ -15098,16 +15440,16 @@
* @param withClause the with clause to be resolved
* @param implementsClause the implements clause to be resolved
*/
- void resolve(ClassElementImpl classElement, WithClause withClause, ImplementsClause implementsClause) {
+ void _resolve(ClassElementImpl classElement, WithClause withClause, ImplementsClause implementsClause) {
if (withClause != null) {
- List<InterfaceType> mixinTypes = resolveTypes(withClause.mixinTypes, CompileTimeErrorCode.MIXIN_OF_NON_CLASS, CompileTimeErrorCode.MIXIN_OF_NON_CLASS);
+ List<InterfaceType> mixinTypes = _resolveTypes(withClause.mixinTypes, CompileTimeErrorCode.MIXIN_OF_NON_CLASS, CompileTimeErrorCode.MIXIN_OF_NON_CLASS);
if (classElement != null) {
classElement.mixins = mixinTypes;
}
}
if (implementsClause != null) {
NodeList<TypeName> interfaces = implementsClause.interfaces;
- List<InterfaceType> interfaceTypes = resolveTypes(interfaces, CompileTimeErrorCode.IMPLEMENTS_NON_CLASS, CompileTimeErrorCode.IMPLEMENTS_DYNAMIC);
+ List<InterfaceType> interfaceTypes = _resolveTypes(interfaces, CompileTimeErrorCode.IMPLEMENTS_NON_CLASS, CompileTimeErrorCode.IMPLEMENTS_DYNAMIC);
if (classElement != null) {
classElement.interfaces = interfaceTypes;
}
@@ -15145,8 +15487,8 @@
* @param dynamicTypeError the error to produce if the type name is "dynamic"
* @return the type specified by the type name
*/
- InterfaceType resolveType(TypeName typeName, ErrorCode nonTypeError, ErrorCode dynamicTypeError) {
- Type2 type = typeName.type;
+ InterfaceType _resolveType(TypeName typeName, ErrorCode nonTypeError, ErrorCode dynamicTypeError) {
+ DartType type = typeName.type;
if (type is InterfaceType) {
return type;
}
@@ -15169,10 +15511,10 @@
* @param dynamicTypeError the error to produce if the type name is "dynamic"
* @return an array containing all of the types that were resolved.
*/
- List<InterfaceType> resolveTypes(NodeList<TypeName> typeNames, ErrorCode nonTypeError, ErrorCode dynamicTypeError) {
+ List<InterfaceType> _resolveTypes(NodeList<TypeName> typeNames, ErrorCode nonTypeError, ErrorCode dynamicTypeError) {
List<InterfaceType> types = new List<InterfaceType>();
for (TypeName typeName in typeNames) {
- InterfaceType type = resolveType(typeName, nonTypeError, dynamicTypeError);
+ InterfaceType type = _resolveType(typeName, nonTypeError, dynamicTypeError);
if (type != null) {
types.add(type);
}
@@ -15180,7 +15522,7 @@
return new List.from(types);
}
- void setElement(Identifier typeName, Element element) {
+ void _setElement(Identifier typeName, Element element) {
if (element != null) {
if (typeName is SimpleIdentifier) {
typeName.staticElement = element;
@@ -15204,12 +15546,12 @@
* @param returnType the (possibly `null`) return type of the function
* @param parameterList the list of parameters to the function
*/
- void setFunctionTypedParameterType(ParameterElementImpl element, TypeName returnType, FormalParameterList parameterList) {
- List<ParameterElement> parameters = getElements(parameterList);
+ void _setFunctionTypedParameterType(ParameterElementImpl element, TypeName returnType, FormalParameterList parameterList) {
+ List<ParameterElement> parameters = _getElements(parameterList);
FunctionTypeAliasElementImpl aliasElement = new FunctionTypeAliasElementImpl(null);
aliasElement.synthetic = true;
aliasElement.shareParameters(parameters);
- aliasElement.returnType = computeReturnType(returnType);
+ aliasElement.returnType = _computeReturnType(returnType);
FunctionTypeImpl type = new FunctionTypeImpl.con2(aliasElement);
ClassElement definingClass = element.getAncestor((element) => element is ClassElement);
if (definingClass != null) {
@@ -15251,16 +15593,19 @@
UnifyingAstVisitor_TypeResolverVisitor_visitClassDeclarationInScope(this.TypeResolverVisitor_this, this.nonFields) : super();
+ @override
Object visitConstructorDeclaration(ConstructorDeclaration node) {
nonFields.add(node);
return null;
}
+ @override
Object visitMethodDeclaration(MethodDeclaration node) {
nonFields.add(node);
return null;
}
+ @override
Object visitNode(AstNode node) => node.accept(TypeResolverVisitor_this);
}
@@ -15296,6 +15641,7 @@
*/
VariableResolverVisitor.con2(LibraryElement definingLibrary, Source source, TypeProvider typeProvider, Scope nameScope, AnalysisErrorListener errorListener) : super.con3(definingLibrary, source, typeProvider, nameScope, errorListener);
+ @override
Object visitFunctionDeclaration(FunctionDeclaration node) {
ExecutableElement outerFunction = _enclosingFunction;
try {
@@ -15306,6 +15652,7 @@
}
}
+ @override
Object visitFunctionExpression(FunctionExpression node) {
if (node.parent is! FunctionDeclaration) {
ExecutableElement outerFunction = _enclosingFunction;
@@ -15320,6 +15667,7 @@
}
}
+ @override
Object visitSimpleIdentifier(SimpleIdentifier node) {
// Ignore if already resolved - declaration or type.
if (node.staticElement != null) {
@@ -15384,10 +15732,11 @@
* @param typeElement the element representing the type represented by this scope
*/
ClassScope(Scope enclosingScope, ClassElement typeElement) : super(new EnclosedScope(enclosingScope)) {
- defineTypeParameters(typeElement);
- defineMembers(typeElement);
+ _defineTypeParameters(typeElement);
+ _defineMembers(typeElement);
}
+ @override
AnalysisError getErrorForDuplicate(Element existing, Element duplicate) {
if (existing is PropertyAccessorElement && duplicate is MethodElement) {
if (existing.nameOffset < duplicate.nameOffset) {
@@ -15404,7 +15753,7 @@
*
* @param typeElement the element representing the type represented by this scope
*/
- void defineMembers(ClassElement typeElement) {
+ void _defineMembers(ClassElement typeElement) {
for (PropertyAccessorElement accessor in typeElement.accessors) {
define(accessor);
}
@@ -15418,7 +15767,7 @@
*
* @param typeElement the element representing the type represented by this scope
*/
- void defineTypeParameters(ClassElement typeElement) {
+ void _defineTypeParameters(ClassElement typeElement) {
Scope parameterScope = enclosingScope;
for (TypeParameterElement typeParameter in typeElement.typeParameters) {
parameterScope.define(typeParameter);
@@ -15455,6 +15804,7 @@
*/
EnclosedScope(this.enclosingScope);
+ @override
AnalysisErrorListener get errorListener => enclosingScope.errorListener;
/**
@@ -15474,6 +15824,7 @@
}
}
+ @override
Element internalLookup(Identifier identifier, String name, LibraryElement referencingLibrary) {
Element element = localLookup(name, referencingLibrary);
if (element != null) {
@@ -15550,7 +15901,7 @@
*/
FunctionTypeScope(Scope enclosingScope, FunctionTypeAliasElement typeElement) : super(new EnclosedScope(enclosingScope)) {
this._typeElement = typeElement;
- defineTypeParameters();
+ _defineTypeParameters();
}
/**
@@ -15573,7 +15924,7 @@
*
* @param typeElement the element representing the type represented by this scope
*/
- void defineTypeParameters() {
+ void _defineTypeParameters() {
Scope typeParameterScope = enclosingScope;
for (TypeParameterElement typeParameter in _typeElement.typeParameters) {
typeParameterScope.define(typeParameter);
@@ -15683,15 +16034,17 @@
*/
LibraryImportScope(LibraryElement definingLibrary, this.errorListener) {
this._definingLibrary = definingLibrary;
- createImportedNamespaces(definingLibrary);
+ _createImportedNamespaces(definingLibrary);
}
+ @override
void define(Element element) {
if (!Scope.isPrivateName(element.displayName)) {
super.define(element);
}
}
+ @override
Element internalLookup(Identifier identifier, String name, LibraryElement referencingLibrary) {
Element foundElement = localLookup(name, referencingLibrary);
if (foundElement != null) {
@@ -15708,13 +16061,13 @@
}
}
if (foundElement is MultiplyDefinedElementImpl) {
- foundElement = removeSdkElements(identifier, name, foundElement as MultiplyDefinedElementImpl);
+ foundElement = _removeSdkElements(identifier, name, foundElement as MultiplyDefinedElementImpl);
}
if (foundElement is MultiplyDefinedElementImpl) {
String foundEltName = foundElement.displayName;
List<Element> conflictingMembers = (foundElement as MultiplyDefinedElementImpl).conflictingElements;
- String libName1 = getLibraryName(conflictingMembers[0], "");
- String libName2 = getLibraryName(conflictingMembers[1], "");
+ String libName1 = _getLibraryName(conflictingMembers[0], "");
+ String libName2 = _getLibraryName(conflictingMembers[1], "");
// TODO (jwren) Change the error message to include a list of all library names instead of
// just the first two
errorListener.onError(new AnalysisError.con2(getSource(identifier), identifier.offset, identifier.length, StaticWarningCode.AMBIGUOUS_IMPORT, [foundEltName, libName1, libName2]));
@@ -15733,7 +16086,7 @@
* @param definingLibrary the element representing the library that imports the libraries for
* which namespaces will be created
*/
- void createImportedNamespaces(LibraryElement definingLibrary) {
+ void _createImportedNamespaces(LibraryElement definingLibrary) {
NamespaceBuilder builder = new NamespaceBuilder();
List<ImportElement> imports = definingLibrary.imports;
int count = imports.length;
@@ -15750,7 +16103,7 @@
* @param def the default name to use
* @return the name of the library that defines given element
*/
- String getLibraryName(Element element, String def) {
+ String _getLibraryName(Element element, String def) {
if (element == null) {
return def;
}
@@ -15771,7 +16124,7 @@
* @param foundElement the element encapsulating the collection of elements
* @return all of the elements that are not defined in the SDK
*/
- Element removeSdkElements(Identifier identifier, String name, MultiplyDefinedElementImpl foundElement) {
+ Element _removeSdkElements(Identifier identifier, String name, MultiplyDefinedElementImpl foundElement) {
List<Element> conflictingMembers = foundElement.conflictingElements;
int length = conflictingMembers.length;
int to = 0;
@@ -15784,8 +16137,8 @@
}
}
if (sdkElement != null && to > 0) {
- String sdkLibName = getLibraryName(sdkElement, "");
- String otherLibName = getLibraryName(conflictingMembers[0], "");
+ String sdkLibName = _getLibraryName(sdkElement, "");
+ String otherLibName = _getLibraryName(conflictingMembers[0], "");
errorListener.onError(new AnalysisError.con2(getSource(identifier), identifier.offset, identifier.length, StaticWarningCode.CONFLICTING_DART_IMPORT, [name, sdkLibName, otherLibName]));
}
if (to == length) {
@@ -15817,9 +16170,10 @@
* @param errorListener the listener that is to be informed when an error is encountered
*/
LibraryScope(LibraryElement definingLibrary, AnalysisErrorListener errorListener) : super(new LibraryImportScope(definingLibrary, errorListener)) {
- defineTopLevelNames(definingLibrary);
+ _defineTopLevelNames(definingLibrary);
}
+ @override
AnalysisError getErrorForDuplicate(Element existing, Element duplicate) {
if (existing is PrefixElement) {
// TODO(scheglov) consider providing actual 'nameOffset' from the synthetic accessor
@@ -15842,7 +16196,7 @@
* @param compilationUnit the compilation unit defining the top-level names to be added to this
* scope
*/
- void defineLocalNames(CompilationUnitElement compilationUnit) {
+ void _defineLocalNames(CompilationUnitElement compilationUnit) {
for (PropertyAccessorElement element in compilationUnit.accessors) {
define(element);
}
@@ -15863,13 +16217,13 @@
* @param definingLibrary the element representing the library that defines the names in this
* scope
*/
- void defineTopLevelNames(LibraryElement definingLibrary) {
+ void _defineTopLevelNames(LibraryElement definingLibrary) {
for (PrefixElement prefix in definingLibrary.prefixes) {
define(prefix);
}
- defineLocalNames(definingLibrary.definingCompilationUnit);
+ _defineLocalNames(definingLibrary.definingCompilationUnit);
for (CompilationUnitElement compilationUnit in definingLibrary.parts) {
- defineLocalNames(compilationUnit);
+ _defineLocalNames(compilationUnit);
}
}
}
@@ -15936,8 +16290,8 @@
//
return Namespace.EMPTY;
}
- Map<String, Element> definedNames = createExportMapping(exportedLibrary, new Set<LibraryElement>());
- definedNames = applyCombinators(definedNames, element.combinators);
+ Map<String, Element> definedNames = _createExportMapping(exportedLibrary, new Set<LibraryElement>());
+ definedNames = _applyCombinators(definedNames, element.combinators);
return new Namespace(definedNames);
}
@@ -15947,7 +16301,7 @@
* @param library the library whose export namespace is to be created
* @return the export namespace that was created
*/
- Namespace createExportNamespaceForLibrary(LibraryElement library) => new Namespace(createExportMapping(library, new Set<LibraryElement>()));
+ Namespace createExportNamespaceForLibrary(LibraryElement library) => new Namespace(_createExportMapping(library, new Set<LibraryElement>()));
/**
* Create a namespace representing the import namespace of the given library.
@@ -15963,9 +16317,9 @@
//
return Namespace.EMPTY;
}
- Map<String, Element> definedNames = createExportMapping(importedLibrary, new Set<LibraryElement>());
- definedNames = applyCombinators(definedNames, element.combinators);
- definedNames = applyPrefix(definedNames, element.prefix);
+ Map<String, Element> definedNames = _createExportMapping(importedLibrary, new Set<LibraryElement>());
+ definedNames = _applyCombinators(definedNames, element.combinators);
+ definedNames = _applyPrefix(definedNames, element.prefix);
return new Namespace(definedNames);
}
@@ -15977,9 +16331,9 @@
*/
Namespace createPublicNamespaceForLibrary(LibraryElement library) {
Map<String, Element> definedNames = new Map<String, Element>();
- addPublicNames(definedNames, library.definingCompilationUnit);
+ _addPublicNames(definedNames, library.definingCompilationUnit);
for (CompilationUnitElement compilationUnit in library.parts) {
- addPublicNames(definedNames, compilationUnit);
+ _addPublicNames(definedNames, compilationUnit);
}
return new Namespace(definedNames);
}
@@ -15990,7 +16344,7 @@
* @param definedNames the mapping table to which the names in the given namespace are to be added
* @param namespace the namespace containing the names to be added to this namespace
*/
- void addAllFromMap(Map<String, Element> definedNames, Map<String, Element> newNames) {
+ void _addAllFromMap(Map<String, Element> definedNames, Map<String, Element> newNames) {
for (MapEntry<String, Element> entry in getMapEntrySet(newNames)) {
definedNames[entry.getKey()] = entry.getValue();
}
@@ -16002,9 +16356,9 @@
* @param definedNames the mapping table to which the names in the given namespace are to be added
* @param namespace the namespace containing the names to be added to this namespace
*/
- void addAllFromNamespace(Map<String, Element> definedNames, Namespace namespace) {
+ void _addAllFromNamespace(Map<String, Element> definedNames, Namespace namespace) {
if (namespace != null) {
- addAllFromMap(definedNames, namespace.definedNames);
+ _addAllFromMap(definedNames, namespace.definedNames);
}
}
@@ -16014,7 +16368,7 @@
* @param definedNames the mapping table to which the public name is to be added
* @param element the element to be added
*/
- void addIfPublic(Map<String, Element> definedNames, Element element) {
+ void _addIfPublic(Map<String, Element> definedNames, Element element) {
String name = element.name;
if (name != null && !Scope.isPrivateName(name)) {
definedNames[name] = element;
@@ -16029,18 +16383,18 @@
* @param compilationUnit the compilation unit defining the top-level names to be added to this
* namespace
*/
- void addPublicNames(Map<String, Element> definedNames, CompilationUnitElement compilationUnit) {
+ void _addPublicNames(Map<String, Element> definedNames, CompilationUnitElement compilationUnit) {
for (PropertyAccessorElement element in compilationUnit.accessors) {
- addIfPublic(definedNames, element);
+ _addIfPublic(definedNames, element);
}
for (FunctionElement element in compilationUnit.functions) {
- addIfPublic(definedNames, element);
+ _addIfPublic(definedNames, element);
}
for (FunctionTypeAliasElement element in compilationUnit.functionTypeAliases) {
- addIfPublic(definedNames, element);
+ _addIfPublic(definedNames, element);
}
for (ClassElement element in compilationUnit.types) {
- addIfPublic(definedNames, element);
+ _addIfPublic(definedNames, element);
}
}
@@ -16050,12 +16404,12 @@
* @param definedNames the mapping table to which the namespace operations are to be applied
* @param combinators the combinators to be applied
*/
- Map<String, Element> applyCombinators(Map<String, Element> definedNames, List<NamespaceCombinator> combinators) {
+ Map<String, Element> _applyCombinators(Map<String, Element> definedNames, List<NamespaceCombinator> combinators) {
for (NamespaceCombinator combinator in combinators) {
if (combinator is HideElementCombinator) {
- hide(definedNames, combinator.hiddenNames);
+ _hide(definedNames, combinator.hiddenNames);
} else if (combinator is ShowElementCombinator) {
- definedNames = show(definedNames, combinator.shownNames);
+ definedNames = _show(definedNames, combinator.shownNames);
} else {
// Internal error.
AnalysisEngine.instance.logger.logError("Unknown type of combinator: ${combinator.runtimeType.toString()}");
@@ -16070,7 +16424,7 @@
* @param definedNames the names that were defined before this operation
* @param prefixElement the element defining the prefix to be added to the names
*/
- Map<String, Element> applyPrefix(Map<String, Element> definedNames, PrefixElement prefixElement) {
+ Map<String, Element> _applyPrefix(Map<String, Element> definedNames, PrefixElement prefixElement) {
if (prefixElement != null) {
String prefix = prefixElement.name;
Map<String, Element> newNames = new Map<String, Element>();
@@ -16092,7 +16446,7 @@
* be added by another library
* @return the mapping table that was created
*/
- Map<String, Element> createExportMapping(LibraryElement library, Set<LibraryElement> visitedElements) {
+ Map<String, Element> _createExportMapping(LibraryElement library, Set<LibraryElement> visitedElements) {
visitedElements.add(library);
try {
Map<String, Element> definedNames = new Map<String, Element>();
@@ -16102,12 +16456,12 @@
//
// The exported library will be null if the URI does not reference a valid library.
//
- Map<String, Element> exportedNames = createExportMapping(exportedLibrary, visitedElements);
- exportedNames = applyCombinators(exportedNames, element.combinators);
- addAllFromMap(definedNames, exportedNames);
+ Map<String, Element> exportedNames = _createExportMapping(exportedLibrary, visitedElements);
+ exportedNames = _applyCombinators(exportedNames, element.combinators);
+ _addAllFromMap(definedNames, exportedNames);
}
}
- addAllFromNamespace(definedNames, (library.context as InternalAnalysisContext).getPublicNamespace(library));
+ _addAllFromNamespace(definedNames, (library.context as InternalAnalysisContext).getPublicNamespace(library));
return definedNames;
} finally {
visitedElements.remove(library);
@@ -16120,7 +16474,7 @@
* @param definedNames the names that were defined before this operation
* @param hiddenNames the names to be hidden
*/
- void hide(Map<String, Element> definedNames, List<String> hiddenNames) {
+ void _hide(Map<String, Element> definedNames, List<String> hiddenNames) {
for (String name in hiddenNames) {
definedNames.remove(name);
definedNames.remove("${name}=");
@@ -16134,7 +16488,7 @@
* @param definedNames the names that were defined before this operation
* @param shownNames the names to be shown
*/
- Map<String, Element> show(Map<String, Element> definedNames, List<String> shownNames) {
+ Map<String, Element> _show(Map<String, Element> definedNames, List<String> shownNames) {
Map<String, Element> newNames = new Map<String, Element>();
for (String name in shownNames) {
Element element = definedNames[name];
@@ -16201,7 +16555,7 @@
* @param element the element to be added to this scope
*/
void define(Element element) {
- String name = getName(element);
+ String name = _getName(element);
if (name != null && !name.isEmpty) {
if (_definedNames.containsKey(name)) {
errorListener.onError(getErrorForDuplicate(_definedNames[name], element));
@@ -16247,7 +16601,7 @@
* @param element the element to be added to this scope
*/
void defineWithoutChecking(Element element) {
- _definedNames[getName(element)] = element;
+ _definedNames[_getName(element)] = element;
_hasName = true;
}
@@ -16328,7 +16682,7 @@
* @param element the element whose look-up name is to be returned
* @return the name that will be used to look up the given element
*/
- String getName(Element element) {
+ String _getName(Element element) {
if (element is MethodElement) {
MethodElement method = element;
if (method.name == "-" && method.parameters.length == 0) {
@@ -16358,14 +16712,14 @@
throw new AnalysisException.con1("Cannot create scope: node is null");
} else if (node is CompilationUnit) {
ScopeBuilder builder = new ScopeBuilder(errorListener);
- return builder.scopeForAstNode(node);
+ return builder._scopeForAstNode(node);
}
AstNode parent = node.parent;
if (parent == null) {
throw new AnalysisException.con1("Cannot create scope: node is not part of a CompilationUnit");
}
ScopeBuilder builder = new ScopeBuilder(errorListener);
- return builder.scopeForAstNode(parent);
+ return builder._scopeForAstNode(parent);
}
/**
@@ -16394,15 +16748,15 @@
* @throws AnalysisException if the AST structure has not been resolved or is not part of a
* [CompilationUnit]
*/
- Scope scopeForAstNode(AstNode node) {
+ Scope _scopeForAstNode(AstNode node) {
if (node is CompilationUnit) {
- return scopeForCompilationUnit(node);
+ return _scopeForCompilationUnit(node);
}
AstNode parent = node.parent;
if (parent == null) {
throw new AnalysisException.con1("Cannot create scope: node is not part of a CompilationUnit");
}
- Scope scope = scopeForAstNode(parent);
+ Scope scope = _scopeForAstNode(parent);
if (node is ClassDeclaration) {
scope = new ClassScope(scope, node.element);
} else if (node is ClassTypeAlias) {
@@ -16425,7 +16779,7 @@
return scope;
}
- Scope scopeForCompilationUnit(CompilationUnit node) {
+ Scope _scopeForCompilationUnit(CompilationUnit node) {
CompilationUnitElement unitElement = node.element;
if (unitElement == null) {
throw new AnalysisException.con1("Cannot create scope: compilation unit is not resolved");
@@ -16488,6 +16842,7 @@
this._stringType = typeProvider.stringType;
}
+ @override
Object visitAnnotation(Annotation node) {
super.visitAnnotation(node);
// check annotation creation
@@ -16506,40 +16861,45 @@
return null;
}
// arguments should be constants
- validateConstantArguments(argumentList);
+ _validateConstantArguments(argumentList);
}
return null;
}
+ @override
Object visitConstructorDeclaration(ConstructorDeclaration node) {
if (node.constKeyword != null) {
- validateInitializers(node);
+ _validateInitializers(node);
}
- validateDefaultValues(node.parameters);
+ _validateDefaultValues(node.parameters);
return super.visitConstructorDeclaration(node);
}
+ @override
Object visitFunctionExpression(FunctionExpression node) {
super.visitFunctionExpression(node);
- validateDefaultValues(node.parameters);
+ _validateDefaultValues(node.parameters);
return null;
}
+ @override
Object visitInstanceCreationExpression(InstanceCreationExpression node) {
- validateInstanceCreationArguments(node);
+ _validateInstanceCreationArguments(node);
return super.visitInstanceCreationExpression(node);
}
+ @override
Object visitListLiteral(ListLiteral node) {
super.visitListLiteral(node);
if (node.constKeyword != null) {
for (Expression element in node.elements) {
- validate(element, CompileTimeErrorCode.NON_CONSTANT_LIST_ELEMENT);
+ _validate(element, CompileTimeErrorCode.NON_CONSTANT_LIST_ELEMENT);
}
}
return null;
}
+ @override
Object visitMapLiteral(MapLiteral node) {
super.visitMapLiteral(node);
bool isConst = node.constKeyword != null;
@@ -16549,8 +16909,8 @@
for (MapLiteralEntry entry in node.entries) {
Expression key = entry.key;
if (isConst) {
- EvaluationResultImpl result = validate(key, CompileTimeErrorCode.NON_CONSTANT_MAP_KEY);
- validate(entry.value, CompileTimeErrorCode.NON_CONSTANT_MAP_VALUE);
+ EvaluationResultImpl result = _validate(key, CompileTimeErrorCode.NON_CONSTANT_MAP_KEY);
+ _validate(entry.value, CompileTimeErrorCode.NON_CONSTANT_MAP_VALUE);
if (result is ValidResult) {
DartObject value = result.value;
if (keys.contains(value)) {
@@ -16581,18 +16941,21 @@
return null;
}
+ @override
Object visitMethodDeclaration(MethodDeclaration node) {
super.visitMethodDeclaration(node);
- validateDefaultValues(node.parameters);
+ _validateDefaultValues(node.parameters);
return null;
}
+ @override
Object visitSwitchCase(SwitchCase node) {
super.visitSwitchCase(node);
- validate(node.expression, CompileTimeErrorCode.NON_CONSTANT_CASE_EXPRESSION);
+ _validate(node.expression, CompileTimeErrorCode.NON_CONSTANT_CASE_EXPRESSION);
return null;
}
+ @override
Object visitVariableDeclaration(VariableDeclaration node) {
super.visitVariableDeclaration(node);
Expression initializer = node.initializer;
@@ -16605,10 +16968,10 @@
// computed their values. But if we missed it for some reason, this gives us a second
// chance.
//
- result = validate(initializer, CompileTimeErrorCode.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE);
+ result = _validate(initializer, CompileTimeErrorCode.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE);
element.evaluationResult = result;
} else if (result is ErrorResult) {
- reportErrors(result, CompileTimeErrorCode.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE);
+ _reportErrors(result, CompileTimeErrorCode.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE);
}
}
return null;
@@ -16621,7 +16984,7 @@
* @param result the result containing any errors that need to be reported
* @param errorCode the error code to be used if the result represents an error
*/
- void reportErrors(EvaluationResultImpl result, ErrorCode errorCode) {
+ void _reportErrors(EvaluationResultImpl result, ErrorCode errorCode) {
if (result is ErrorResult) {
for (ErrorResult_ErrorData data in result.errorData) {
ErrorCode dataErrorCode = data.errorCode;
@@ -16634,7 +16997,7 @@
}
}
- ValidResult valid(InterfaceType type, InstanceState state) => new ValidResult(new DartObjectImpl(type, state));
+ ValidResult _valid(InterfaceType type, InstanceState state) => new ValidResult(new DartObjectImpl(type, state));
/**
* Validate that the given expression is a compile time constant. Return the value of the compile
@@ -16644,9 +17007,9 @@
* @param errorCode the error code to be used if the expression is not a compile time constant
* @return the value of the compile time constant
*/
- EvaluationResultImpl validate(Expression expression, ErrorCode errorCode) {
+ EvaluationResultImpl _validate(Expression expression, ErrorCode errorCode) {
EvaluationResultImpl result = expression.accept(new ConstantVisitor(_typeProvider));
- reportErrors(result, errorCode);
+ _reportErrors(result, errorCode);
return result;
}
@@ -16655,12 +17018,12 @@
*
* @param argumentList the argument list to evaluate
*/
- void validateConstantArguments(ArgumentList argumentList) {
+ void _validateConstantArguments(ArgumentList argumentList) {
for (Expression argument in argumentList.arguments) {
if (argument is NamedExpression) {
argument = (argument as NamedExpression).expression;
}
- validate(argument, CompileTimeErrorCode.CONST_WITH_NON_CONSTANT_ARGUMENT);
+ _validate(argument, CompileTimeErrorCode.CONST_WITH_NON_CONSTANT_ARGUMENT);
}
}
@@ -16670,7 +17033,7 @@
*
* @param parameters the list of parameters to be validated
*/
- void validateDefaultValues(FormalParameterList parameters) {
+ void _validateDefaultValues(FormalParameterList parameters) {
if (parameters == null) {
return;
}
@@ -16679,7 +17042,7 @@
DefaultFormalParameter defaultParameter = parameter;
Expression defaultValue = defaultParameter.defaultValue;
if (defaultValue != null) {
- EvaluationResultImpl result = validate(defaultValue, CompileTimeErrorCode.NON_CONSTANT_DEFAULT_VALUE);
+ EvaluationResultImpl result = _validate(defaultValue, CompileTimeErrorCode.NON_CONSTANT_DEFAULT_VALUE);
VariableElementImpl element = parameter.element as VariableElementImpl;
element.evaluationResult = result;
}
@@ -16694,9 +17057,9 @@
* considered as a valid potentially constant expressions
* @param expression the expression to validate
*/
- void validateInitializerExpression(List<ParameterElement> parameterElements, Expression expression) {
+ void _validateInitializerExpression(List<ParameterElement> parameterElements, Expression expression) {
EvaluationResultImpl result = expression.accept(new ConstantVisitor_ConstantVerifier_validateInitializerExpression(_typeProvider, this, parameterElements));
- reportErrors(result, CompileTimeErrorCode.NON_CONSTANT_VALUE_IN_INITIALIZER);
+ _reportErrors(result, CompileTimeErrorCode.NON_CONSTANT_VALUE_IN_INITIALIZER);
}
/**
@@ -16706,12 +17069,12 @@
* considered as a valid potentially constant expressions
* @param argumentList the argument list to validate
*/
- void validateInitializerInvocationArguments(List<ParameterElement> parameterElements, ArgumentList argumentList) {
+ void _validateInitializerInvocationArguments(List<ParameterElement> parameterElements, ArgumentList argumentList) {
if (argumentList == null) {
return;
}
for (Expression argument in argumentList.arguments) {
- validateInitializerExpression(parameterElements, argument);
+ _validateInitializerExpression(parameterElements, argument);
}
}
@@ -16721,21 +17084,21 @@
*
* @param constructor the constant constructor declaration to validate
*/
- void validateInitializers(ConstructorDeclaration constructor) {
+ void _validateInitializers(ConstructorDeclaration constructor) {
List<ParameterElement> parameterElements = constructor.parameters.parameterElements;
NodeList<ConstructorInitializer> initializers = constructor.initializers;
for (ConstructorInitializer initializer in initializers) {
if (initializer is ConstructorFieldInitializer) {
ConstructorFieldInitializer fieldInitializer = initializer;
- validateInitializerExpression(parameterElements, fieldInitializer.expression);
+ _validateInitializerExpression(parameterElements, fieldInitializer.expression);
}
if (initializer is RedirectingConstructorInvocation) {
RedirectingConstructorInvocation invocation = initializer;
- validateInitializerInvocationArguments(parameterElements, invocation.argumentList);
+ _validateInitializerInvocationArguments(parameterElements, invocation.argumentList);
}
if (initializer is SuperConstructorInvocation) {
SuperConstructorInvocation invocation = initializer;
- validateInitializerInvocationArguments(parameterElements, invocation.argumentList);
+ _validateInitializerInvocationArguments(parameterElements, invocation.argumentList);
}
}
}
@@ -16746,7 +17109,7 @@
*
* @param node the instance creation evaluate
*/
- void validateInstanceCreationArguments(InstanceCreationExpression node) {
+ void _validateInstanceCreationArguments(InstanceCreationExpression node) {
if (!node.isConst) {
return;
}
@@ -16754,7 +17117,7 @@
if (argumentList == null) {
return;
}
- validateConstantArguments(argumentList);
+ _validateConstantArguments(argumentList);
}
}
@@ -16765,27 +17128,28 @@
ConstantVisitor_ConstantVerifier_validateInitializerExpression(TypeProvider arg0, this.ConstantVerifier_this, this.parameterElements) : super(arg0);
+ @override
EvaluationResultImpl visitSimpleIdentifier(SimpleIdentifier node) {
Element element = node.staticElement;
for (ParameterElement parameterElement in parameterElements) {
if (identical(parameterElement, element) && parameterElement != null) {
- Type2 type = parameterElement.type;
+ DartType type = parameterElement.type;
if (type != null) {
if (type.isDynamic) {
- return ConstantVerifier_this.valid(ConstantVerifier_this._typeProvider.objectType, DynamicState.DYNAMIC_STATE);
+ return ConstantVerifier_this._valid(ConstantVerifier_this._typeProvider.objectType, DynamicState.DYNAMIC_STATE);
} else if (type.isSubtypeOf(ConstantVerifier_this._boolType)) {
- return ConstantVerifier_this.valid(ConstantVerifier_this._typeProvider.boolType, BoolState.UNKNOWN_VALUE);
+ return ConstantVerifier_this._valid(ConstantVerifier_this._typeProvider.boolType, BoolState.UNKNOWN_VALUE);
} else if (type.isSubtypeOf(ConstantVerifier_this._typeProvider.doubleType)) {
- return ConstantVerifier_this.valid(ConstantVerifier_this._typeProvider.doubleType, DoubleState.UNKNOWN_VALUE);
+ return ConstantVerifier_this._valid(ConstantVerifier_this._typeProvider.doubleType, DoubleState.UNKNOWN_VALUE);
} else if (type.isSubtypeOf(ConstantVerifier_this._intType)) {
- return ConstantVerifier_this.valid(ConstantVerifier_this._typeProvider.intType, IntState.UNKNOWN_VALUE);
+ return ConstantVerifier_this._valid(ConstantVerifier_this._typeProvider.intType, IntState.UNKNOWN_VALUE);
} else if (type.isSubtypeOf(ConstantVerifier_this._numType)) {
- return ConstantVerifier_this.valid(ConstantVerifier_this._typeProvider.numType, NumState.UNKNOWN_VALUE);
+ return ConstantVerifier_this._valid(ConstantVerifier_this._typeProvider.numType, NumState.UNKNOWN_VALUE);
} else if (type.isSubtypeOf(ConstantVerifier_this._stringType)) {
- return ConstantVerifier_this.valid(ConstantVerifier_this._typeProvider.stringType, StringState.UNKNOWN_VALUE);
+ return ConstantVerifier_this._valid(ConstantVerifier_this._typeProvider.stringType, StringState.UNKNOWN_VALUE);
}
}
- return ConstantVerifier_this.valid(type is InterfaceType ? type : ConstantVerifier_this._typeProvider.objectType, GenericState.UNKNOWN_VALUE);
+ return ConstantVerifier_this._valid(type is InterfaceType ? type : ConstantVerifier_this._typeProvider.objectType, GenericState.UNKNOWN_VALUE);
}
}
return super.visitSimpleIdentifier(node);
@@ -16810,7 +17174,7 @@
/**
* The type representing the type 'dynamic'.
*/
- Type2 _dynamicType;
+ DartType _dynamicType;
/**
* The type representing the type 'bool'.
@@ -17006,34 +17370,39 @@
typeProvider.stringType];
}
+ @override
Object visitArgumentList(ArgumentList node) {
- checkForArgumentTypesNotAssignableInList(node);
+ _checkForArgumentTypesNotAssignableInList(node);
return super.visitArgumentList(node);
}
+ @override
Object visitAssertStatement(AssertStatement node) {
- checkForNonBoolExpression(node);
+ _checkForNonBoolExpression(node);
return super.visitAssertStatement(node);
}
+ @override
Object visitAssignmentExpression(AssignmentExpression node) {
sc.Token operator = node.operator;
sc.TokenType operatorType = operator.type;
if (identical(operatorType, sc.TokenType.EQ)) {
- checkForInvalidAssignment(node.leftHandSide, node.rightHandSide);
+ _checkForInvalidAssignment(node.leftHandSide, node.rightHandSide);
} else {
- checkForInvalidCompoundAssignment(node);
+ _checkForInvalidCompoundAssignment(node);
}
- checkForAssignmentToFinal(node.leftHandSide);
- checkForArgumentTypeNotAssignableForArgument(node.rightHandSide);
+ _checkForAssignmentToFinal(node.leftHandSide);
+ _checkForArgumentTypeNotAssignableForArgument(node.rightHandSide);
return super.visitAssignmentExpression(node);
}
+ @override
Object visitBinaryExpression(BinaryExpression node) {
- checkForArgumentTypeNotAssignableForArgument(node.rightOperand);
+ _checkForArgumentTypeNotAssignableForArgument(node.rightOperand);
return super.visitBinaryExpression(node);
}
+ @override
Object visitBlockFunctionBody(BlockFunctionBody node) {
List<ReturnStatement> previousReturnsWith = _returnsWith;
List<ReturnStatement> previousReturnsWithout = _returnsWithout;
@@ -17041,7 +17410,7 @@
_returnsWith = new List<ReturnStatement>();
_returnsWithout = new List<ReturnStatement>();
super.visitBlockFunctionBody(node);
- checkForMixedReturns(node);
+ _checkForMixedReturns(node);
} finally {
_returnsWith = previousReturnsWith;
_returnsWithout = previousReturnsWithout;
@@ -17049,6 +17418,7 @@
return null;
}
+ @override
Object visitBreakStatement(BreakStatement node) {
SimpleIdentifier labelNode = node.label;
if (labelNode != null) {
@@ -17060,6 +17430,7 @@
return null;
}
+ @override
Object visitCatchClause(CatchClause node) {
bool previousIsInCatchClause = _isInCatchClause;
try {
@@ -17070,6 +17441,7 @@
}
}
+ @override
Object visitClassDeclaration(ClassDeclaration node) {
ClassElement outerClass = _enclosingClass;
try {
@@ -17078,22 +17450,22 @@
WithClause withClause = node.withClause;
ImplementsClause implementsClause = node.implementsClause;
ExtendsClause extendsClause = node.extendsClause;
- checkForBuiltInIdentifierAsName(node.name, CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE_NAME);
- checkForMemberWithClassName();
- checkForNoDefaultSuperConstructorImplicit(node);
- checkForConflictingTypeVariableErrorCodes(node);
+ _checkForBuiltInIdentifierAsName(node.name, CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE_NAME);
+ _checkForMemberWithClassName();
+ _checkForNoDefaultSuperConstructorImplicit(node);
+ _checkForConflictingTypeVariableErrorCodes(node);
// Only do error checks on the clause nodes if there is a non-null clause
if (implementsClause != null || extendsClause != null || withClause != null) {
// Only check for all of the inheritance logic around clauses if there isn't an error code
// such as "Cannot extend double" already on the class.
- if (!checkForImplementsDisallowedClass(implementsClause) && !checkForExtendsDisallowedClass(extendsClause) && !checkForAllMixinErrorCodes(withClause)) {
- checkForNonAbstractClassInheritsAbstractMember(node);
- checkForInconsistentMethodInheritance();
- checkForRecursiveInterfaceInheritance(_enclosingClass);
- checkForConflictingGetterAndMethod();
- checkForConflictingInstanceGetterAndSuperclassMember();
- checkImplementsSuperClass(node);
- checkImplementsFunctionWithoutCall(node);
+ if (!_checkForImplementsDisallowedClass(implementsClause) && !_checkForExtendsDisallowedClass(extendsClause) && !_checkForAllMixinErrorCodes(withClause)) {
+ _checkForNonAbstractClassInheritsAbstractMember(node);
+ _checkForInconsistentMethodInheritance();
+ _checkForRecursiveInterfaceInheritance(_enclosingClass);
+ _checkForConflictingGetterAndMethod();
+ _checkForConflictingInstanceGetterAndSuperclassMember();
+ _checkImplementsSuperClass(node);
+ _checkImplementsFunctionWithoutCall(node);
}
}
// initialize initialFieldElementsMap
@@ -17107,9 +17479,9 @@
}
}
}
- checkForFinalNotInitializedInClass(node);
- checkForDuplicateDefinitionInheritance();
- checkForConflictingInstanceMethodSetter(node);
+ _checkForFinalNotInitializedInClass(node);
+ _checkForDuplicateDefinitionInheritance();
+ _checkForConflictingInstanceMethodSetter(node);
return super.visitClassDeclaration(node);
} finally {
_isInNativeClass = false;
@@ -17118,20 +17490,22 @@
}
}
+ @override
Object visitClassTypeAlias(ClassTypeAlias node) {
- checkForBuiltInIdentifierAsName(node.name, CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPEDEF_NAME);
- checkForAllMixinErrorCodes(node.withClause);
+ _checkForBuiltInIdentifierAsName(node.name, CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPEDEF_NAME);
+ _checkForAllMixinErrorCodes(node.withClause);
ClassElement outerClassElement = _enclosingClass;
try {
_enclosingClass = node.element;
- checkForRecursiveInterfaceInheritance(node.element);
- checkForTypeAliasCannotReferenceItself_mixin(node);
+ _checkForRecursiveInterfaceInheritance(node.element);
+ _checkForTypeAliasCannotReferenceItself_mixin(node);
} finally {
_enclosingClass = outerClassElement;
}
return super.visitClassTypeAlias(node);
}
+ @override
Object visitComment(Comment node) {
_isInComment = true;
try {
@@ -17141,29 +17515,31 @@
}
}
+ @override
Object visitConditionalExpression(ConditionalExpression node) {
- checkForNonBoolCondition(node.condition);
+ _checkForNonBoolCondition(node.condition);
return super.visitConditionalExpression(node);
}
+ @override
Object visitConstructorDeclaration(ConstructorDeclaration node) {
ExecutableElement outerFunction = _enclosingFunction;
try {
_enclosingFunction = node.element;
_isEnclosingConstructorConst = node.constKeyword != null;
- checkForConstConstructorWithNonFinalField(node);
- checkForConstConstructorWithNonConstSuper(node);
- checkForConflictingConstructorNameAndMember(node);
- checkForAllFinalInitializedErrorCodes(node);
- checkForRedirectingConstructorErrorCodes(node);
- checkForMultipleSuperInitializers(node);
- checkForRecursiveConstructorRedirect(node);
- if (!checkForRecursiveFactoryRedirect(node)) {
- checkForAllRedirectConstructorErrorCodes(node);
+ _checkForConstConstructorWithNonFinalField(node);
+ _checkForConstConstructorWithNonConstSuper(node);
+ _checkForConflictingConstructorNameAndMember(node);
+ _checkForAllFinalInitializedErrorCodes(node);
+ _checkForRedirectingConstructorErrorCodes(node);
+ _checkForMultipleSuperInitializers(node);
+ _checkForRecursiveConstructorRedirect(node);
+ if (!_checkForRecursiveFactoryRedirect(node)) {
+ _checkForAllRedirectConstructorErrorCodes(node);
}
- checkForUndefinedConstructorInInitializerImplicit(node);
- checkForRedirectToNonConstConstructor(node);
- checkForReturnInGenerativeConstructor(node);
+ _checkForUndefinedConstructorInInitializerImplicit(node);
+ _checkForRedirectToNonConstConstructor(node);
+ _checkForReturnInGenerativeConstructor(node);
return super.visitConstructorDeclaration(node);
} finally {
_isEnclosingConstructorConst = false;
@@ -17171,17 +17547,19 @@
}
}
+ @override
Object visitConstructorFieldInitializer(ConstructorFieldInitializer node) {
_isInConstructorInitializer = true;
try {
- checkForInvalidField(node);
- checkForFieldInitializerNotAssignable(node);
+ _checkForInvalidField(node);
+ _checkForFieldInitializerNotAssignable(node);
return super.visitConstructorFieldInitializer(node);
} finally {
_isInConstructorInitializer = false;
}
}
+ @override
Object visitContinueStatement(ContinueStatement node) {
SimpleIdentifier labelNode = node.label;
if (labelNode != null) {
@@ -17193,34 +17571,39 @@
return null;
}
+ @override
Object visitDefaultFormalParameter(DefaultFormalParameter node) {
- checkForInvalidAssignment(node.identifier, node.defaultValue);
- checkForDefaultValueInFunctionTypedParameter(node);
+ _checkForInvalidAssignment(node.identifier, node.defaultValue);
+ _checkForDefaultValueInFunctionTypedParameter(node);
return super.visitDefaultFormalParameter(node);
}
+ @override
Object visitDoStatement(DoStatement node) {
- checkForNonBoolCondition(node.condition);
+ _checkForNonBoolCondition(node.condition);
return super.visitDoStatement(node);
}
+ @override
Object visitExportDirective(ExportDirective node) {
ExportElement exportElement = node.element;
if (exportElement != null) {
- checkForAmbiguousExport(node, exportElement);
- checkForExportDuplicateLibraryName(node, exportElement);
- checkForExportInternalLibrary(node, exportElement);
+ _checkForAmbiguousExport(node, exportElement);
+ _checkForExportDuplicateLibraryName(node, exportElement);
+ _checkForExportInternalLibrary(node, exportElement);
}
return super.visitExportDirective(node);
}
+ @override
Object visitExpressionFunctionBody(ExpressionFunctionBody node) {
FunctionType functionType = _enclosingFunction == null ? null : _enclosingFunction.type;
- Type2 expectedReturnType = functionType == null ? DynamicTypeImpl.instance : functionType.returnType;
- checkForReturnOfInvalidType(node.expression, expectedReturnType);
+ DartType expectedReturnType = functionType == null ? DynamicTypeImpl.instance : functionType.returnType;
+ _checkForReturnOfInvalidType(node.expression, expectedReturnType);
return super.visitExpressionFunctionBody(node);
}
+ @override
Object visitFieldDeclaration(FieldDeclaration node) {
_isInStaticVariableDeclaration = node.isStatic;
_isInInstanceVariableDeclaration = !_isInStaticVariableDeclaration;
@@ -17231,7 +17614,7 @@
}
}
try {
- checkForAllInvalidOverrideErrorCodesForField(node);
+ _checkForAllInvalidOverrideErrorCodesForField(node);
return super.visitFieldDeclaration(node);
} finally {
_isInStaticVariableDeclaration = false;
@@ -17239,14 +17622,16 @@
}
}
+ @override
Object visitFieldFormalParameter(FieldFormalParameter node) {
- checkForValidField(node);
- checkForConstFormalParameter(node);
- checkForPrivateOptionalParameter(node);
- checkForFieldInitializingFormalRedirectingConstructor(node);
+ _checkForValidField(node);
+ _checkForConstFormalParameter(node);
+ _checkForPrivateOptionalParameter(node);
+ _checkForFieldInitializingFormalRedirectingConstructor(node);
return super.visitFieldFormalParameter(node);
}
+ @override
Object visitFunctionDeclaration(FunctionDeclaration node) {
ExecutableElement outerFunction = _enclosingFunction;
try {
@@ -17257,14 +17642,14 @@
}
_enclosingFunction = node.element;
if (node.isSetter || node.isGetter) {
- checkForMismatchedAccessorTypes(node, methodName);
+ _checkForMismatchedAccessorTypes(node, methodName);
if (node.isSetter) {
FunctionExpression functionExpression = node.functionExpression;
if (functionExpression != null) {
- checkForWrongNumberOfParametersForSetter(node.name, functionExpression.parameters);
+ _checkForWrongNumberOfParametersForSetter(node.name, functionExpression.parameters);
}
TypeName returnType = node.returnType;
- checkForNonVoidReturnTypeForSetter(returnType);
+ _checkForNonVoidReturnTypeForSetter(returnType);
}
}
return super.visitFunctionDeclaration(node);
@@ -17273,6 +17658,7 @@
}
}
+ @override
Object visitFunctionExpression(FunctionExpression node) {
// If this function expression is wrapped in a function declaration, don't change the
// enclosingFunction field.
@@ -17289,22 +17675,25 @@
}
}
+ @override
Object visitFunctionExpressionInvocation(FunctionExpressionInvocation node) {
Expression functionExpression = node.function;
- Type2 expressionType = functionExpression.staticType;
- if (!isFunctionType(expressionType)) {
+ DartType expressionType = functionExpression.staticType;
+ if (!_isFunctionType(expressionType)) {
_errorReporter.reportErrorForNode(StaticTypeWarningCode.INVOCATION_OF_NON_FUNCTION_EXPRESSION, functionExpression, []);
}
return super.visitFunctionExpressionInvocation(node);
}
+ @override
Object visitFunctionTypeAlias(FunctionTypeAlias node) {
- checkForBuiltInIdentifierAsName(node.name, CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPEDEF_NAME);
- checkForDefaultValueInFunctionTypeAlias(node);
- checkForTypeAliasCannotReferenceItself_function(node);
+ _checkForBuiltInIdentifierAsName(node.name, CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPEDEF_NAME);
+ _checkForDefaultValueInFunctionTypeAlias(node);
+ _checkForTypeAliasCannotReferenceItself_function(node);
return super.visitFunctionTypeAlias(node);
}
+ @override
Object visitFunctionTypedFormalParameter(FunctionTypedFormalParameter node) {
bool old = _isInFunctionTypedFormalParameter;
_isInFunctionTypedFormalParameter = true;
@@ -17315,40 +17704,44 @@
}
}
+ @override
Object visitIfStatement(IfStatement node) {
- checkForNonBoolCondition(node.condition);
+ _checkForNonBoolCondition(node.condition);
return super.visitIfStatement(node);
}
+ @override
Object visitImportDirective(ImportDirective node) {
ImportElement importElement = node.element;
if (importElement != null) {
- checkForImportDuplicateLibraryName(node, importElement);
- checkForImportInternalLibrary(node, importElement);
+ _checkForImportDuplicateLibraryName(node, importElement);
+ _checkForImportInternalLibrary(node, importElement);
}
return super.visitImportDirective(node);
}
+ @override
Object visitIndexExpression(IndexExpression node) {
- checkForArgumentTypeNotAssignableForArgument(node.index);
+ _checkForArgumentTypeNotAssignableForArgument(node.index);
return super.visitIndexExpression(node);
}
+ @override
Object visitInstanceCreationExpression(InstanceCreationExpression node) {
_isInConstInstanceCreation = node.isConst;
try {
ConstructorName constructorName = node.constructorName;
TypeName typeName = constructorName.type;
- Type2 type = typeName.type;
+ DartType type = typeName.type;
if (type is InterfaceType) {
InterfaceType interfaceType = type;
- checkForConstOrNewWithAbstractClass(node, typeName, interfaceType);
+ _checkForConstOrNewWithAbstractClass(node, typeName, interfaceType);
if (_isInConstInstanceCreation) {
- checkForConstWithNonConst(node);
- checkForConstWithUndefinedConstructor(node);
- checkForConstWithTypeParametersInCreation(node);
+ _checkForConstWithNonConst(node);
+ _checkForConstWithUndefinedConstructor(node);
+ _checkForConstWithTypeParametersInCreation(node);
} else {
- checkForNewWithUndefinedConstructor(node);
+ _checkForNewWithUndefinedConstructor(node);
}
}
return super.visitInstanceCreationExpression(node);
@@ -17357,38 +17750,41 @@
}
}
+ @override
Object visitListLiteral(ListLiteral node) {
if (node.constKeyword != null) {
TypeArgumentList typeArguments = node.typeArguments;
if (typeArguments != null) {
NodeList<TypeName> arguments = typeArguments.arguments;
if (arguments.length != 0) {
- checkForInvalidTypeArgumentInConstTypedLiteral(arguments, CompileTimeErrorCode.INVALID_TYPE_ARGUMENT_IN_CONST_LIST);
+ _checkForInvalidTypeArgumentInConstTypedLiteral(arguments, CompileTimeErrorCode.INVALID_TYPE_ARGUMENT_IN_CONST_LIST);
}
}
}
- checkForExpectedOneListTypeArgument(node);
- checkForListElementTypeNotAssignable(node);
+ _checkForExpectedOneListTypeArgument(node);
+ _checkForListElementTypeNotAssignable(node);
return super.visitListLiteral(node);
}
+ @override
Object visitMapLiteral(MapLiteral node) {
TypeArgumentList typeArguments = node.typeArguments;
if (typeArguments != null) {
NodeList<TypeName> arguments = typeArguments.arguments;
if (arguments.length != 0) {
if (node.constKeyword != null) {
- checkForInvalidTypeArgumentInConstTypedLiteral(arguments, CompileTimeErrorCode.INVALID_TYPE_ARGUMENT_IN_CONST_MAP);
+ _checkForInvalidTypeArgumentInConstTypedLiteral(arguments, CompileTimeErrorCode.INVALID_TYPE_ARGUMENT_IN_CONST_MAP);
}
}
}
- checkExpectedTwoMapTypeArguments(typeArguments);
- checkForNonConstMapAsExpressionStatement(node);
- checkForMapTypeNotAssignable(node);
- checkForConstMapKeyExpressionTypeImplementsEquals(node);
+ _checkExpectedTwoMapTypeArguments(typeArguments);
+ _checkForNonConstMapAsExpressionStatement(node);
+ _checkForMapTypeNotAssignable(node);
+ _checkForConstMapKeyExpressionTypeImplementsEquals(node);
return super.visitMapLiteral(node);
}
+ @override
Object visitMethodDeclaration(MethodDeclaration node) {
ExecutableElement previousFunction = _enclosingFunction;
try {
@@ -17400,21 +17796,21 @@
methodName = identifier.name;
}
if (node.isSetter || node.isGetter) {
- checkForMismatchedAccessorTypes(node, methodName);
+ _checkForMismatchedAccessorTypes(node, methodName);
}
if (node.isGetter) {
- checkForConflictingStaticGetterAndInstanceSetter(node);
+ _checkForConflictingStaticGetterAndInstanceSetter(node);
} else if (node.isSetter) {
- checkForWrongNumberOfParametersForSetter(node.name, node.parameters);
- checkForNonVoidReturnTypeForSetter(node.returnType);
- checkForConflictingStaticSetterAndInstanceMember(node);
+ _checkForWrongNumberOfParametersForSetter(node.name, node.parameters);
+ _checkForNonVoidReturnTypeForSetter(node.returnType);
+ _checkForConflictingStaticSetterAndInstanceMember(node);
} else if (node.isOperator) {
- checkForOptionalParameterInOperator(node);
- checkForWrongNumberOfParametersForOperator(node);
- checkForNonVoidReturnTypeForOperator(node);
+ _checkForOptionalParameterInOperator(node);
+ _checkForWrongNumberOfParametersForOperator(node);
+ _checkForNonVoidReturnTypeForOperator(node);
}
- checkForConcreteClassWithAbstractMember(node);
- checkForAllInvalidOverrideErrorCodesForMethod(node);
+ _checkForConcreteClassWithAbstractMember(node);
+ _checkForAllInvalidOverrideErrorCodesForMethod(node);
return super.visitMethodDeclaration(node);
} finally {
_enclosingFunction = previousFunction;
@@ -17422,19 +17818,21 @@
}
}
+ @override
Object visitMethodInvocation(MethodInvocation node) {
Expression target = node.realTarget;
SimpleIdentifier methodName = node.methodName;
if (target != null) {
ClassElement typeReference = ElementResolver.getTypeReference(target);
- checkForStaticAccessToInstanceMember(typeReference, methodName);
- checkForInstanceAccessToStaticMember(typeReference, methodName);
+ _checkForStaticAccessToInstanceMember(typeReference, methodName);
+ _checkForInstanceAccessToStaticMember(typeReference, methodName);
} else {
- checkForUnqualifiedReferenceToNonLocalStaticMember(methodName);
+ _checkForUnqualifiedReferenceToNonLocalStaticMember(methodName);
}
return super.visitMethodInvocation(node);
}
+ @override
Object visitNativeClause(NativeClause node) {
// TODO(brianwilkerson) Figure out the right rule for when 'native' is allowed.
if (!_isInSystemLibrary) {
@@ -17443,47 +17841,53 @@
return super.visitNativeClause(node);
}
+ @override
Object visitNativeFunctionBody(NativeFunctionBody node) {
- checkForNativeFunctionBodyInNonSDKCode(node);
+ _checkForNativeFunctionBodyInNonSDKCode(node);
return super.visitNativeFunctionBody(node);
}
+ @override
Object visitPostfixExpression(PostfixExpression node) {
- checkForAssignmentToFinal(node.operand);
- checkForIntNotAssignable(node.operand);
+ _checkForAssignmentToFinal(node.operand);
+ _checkForIntNotAssignable(node.operand);
return super.visitPostfixExpression(node);
}
+ @override
Object visitPrefixedIdentifier(PrefixedIdentifier node) {
if (node.parent is! Annotation) {
ClassElement typeReference = ElementResolver.getTypeReference(node.prefix);
SimpleIdentifier name = node.identifier;
- checkForStaticAccessToInstanceMember(typeReference, name);
- checkForInstanceAccessToStaticMember(typeReference, name);
+ _checkForStaticAccessToInstanceMember(typeReference, name);
+ _checkForInstanceAccessToStaticMember(typeReference, name);
}
return super.visitPrefixedIdentifier(node);
}
+ @override
Object visitPrefixExpression(PrefixExpression node) {
sc.TokenType operatorType = node.operator.type;
Expression operand = node.operand;
if (identical(operatorType, sc.TokenType.BANG)) {
- checkForNonBoolNegationExpression(operand);
+ _checkForNonBoolNegationExpression(operand);
} else if (operatorType.isIncrementOperator) {
- checkForAssignmentToFinal(operand);
+ _checkForAssignmentToFinal(operand);
}
- checkForIntNotAssignable(operand);
+ _checkForIntNotAssignable(operand);
return super.visitPrefixExpression(node);
}
+ @override
Object visitPropertyAccess(PropertyAccess node) {
ClassElement typeReference = ElementResolver.getTypeReference(node.realTarget);
SimpleIdentifier propertyName = node.propertyName;
- checkForStaticAccessToInstanceMember(typeReference, propertyName);
- checkForInstanceAccessToStaticMember(typeReference, propertyName);
+ _checkForStaticAccessToInstanceMember(typeReference, propertyName);
+ _checkForInstanceAccessToStaticMember(typeReference, propertyName);
return super.visitPropertyAccess(node);
}
+ @override
Object visitRedirectingConstructorInvocation(RedirectingConstructorInvocation node) {
_isInConstructorInitializer = true;
try {
@@ -17493,35 +17897,40 @@
}
}
+ @override
Object visitRethrowExpression(RethrowExpression node) {
- checkForRethrowOutsideCatch(node);
+ _checkForRethrowOutsideCatch(node);
return super.visitRethrowExpression(node);
}
+ @override
Object visitReturnStatement(ReturnStatement node) {
if (node.expression == null) {
_returnsWithout.add(node);
} else {
_returnsWith.add(node);
}
- checkForAllReturnStatementErrorCodes(node);
+ _checkForAllReturnStatementErrorCodes(node);
return super.visitReturnStatement(node);
}
+ @override
Object visitSimpleFormalParameter(SimpleFormalParameter node) {
- checkForConstFormalParameter(node);
- checkForPrivateOptionalParameter(node);
+ _checkForConstFormalParameter(node);
+ _checkForPrivateOptionalParameter(node);
return super.visitSimpleFormalParameter(node);
}
+ @override
Object visitSimpleIdentifier(SimpleIdentifier node) {
- checkForImplicitThisReferenceInInitializer(node);
- if (!isUnqualifiedReferenceToNonLocalStaticMemberAllowed(node)) {
- checkForUnqualifiedReferenceToNonLocalStaticMember(node);
+ _checkForImplicitThisReferenceInInitializer(node);
+ if (!_isUnqualifiedReferenceToNonLocalStaticMemberAllowed(node)) {
+ _checkForUnqualifiedReferenceToNonLocalStaticMember(node);
}
return super.visitSimpleIdentifier(node);
}
+ @override
Object visitSuperConstructorInvocation(SuperConstructorInvocation node) {
_isInConstructorInitializer = true;
try {
@@ -17531,45 +17940,52 @@
}
}
+ @override
Object visitSwitchStatement(SwitchStatement node) {
- checkForInconsistentCaseExpressionTypes(node);
- checkForSwitchExpressionNotAssignable(node);
- checkForCaseBlocksNotTerminated(node);
+ _checkForInconsistentCaseExpressionTypes(node);
+ _checkForSwitchExpressionNotAssignable(node);
+ _checkForCaseBlocksNotTerminated(node);
return super.visitSwitchStatement(node);
}
+ @override
Object visitThisExpression(ThisExpression node) {
- checkForInvalidReferenceToThis(node);
+ _checkForInvalidReferenceToThis(node);
return super.visitThisExpression(node);
}
+ @override
Object visitThrowExpression(ThrowExpression node) {
- checkForConstEvalThrowsException(node);
+ _checkForConstEvalThrowsException(node);
return super.visitThrowExpression(node);
}
+ @override
Object visitTopLevelVariableDeclaration(TopLevelVariableDeclaration node) {
- checkForFinalNotInitialized(node.variables);
+ _checkForFinalNotInitialized(node.variables);
return super.visitTopLevelVariableDeclaration(node);
}
+ @override
Object visitTypeName(TypeName node) {
- checkForTypeArgumentNotMatchingBounds(node);
- checkForTypeParameterReferencedByStatic(node);
+ _checkForTypeArgumentNotMatchingBounds(node);
+ _checkForTypeParameterReferencedByStatic(node);
return super.visitTypeName(node);
}
+ @override
Object visitTypeParameter(TypeParameter node) {
- checkForBuiltInIdentifierAsName(node.name, CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE_PARAMETER_NAME);
- checkForTypeParameterSupertypeOfItsBound(node);
+ _checkForBuiltInIdentifierAsName(node.name, CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE_PARAMETER_NAME);
+ _checkForTypeParameterSupertypeOfItsBound(node);
return super.visitTypeParameter(node);
}
+ @override
Object visitVariableDeclaration(VariableDeclaration node) {
SimpleIdentifier nameNode = node.name;
Expression initializerNode = node.initializer;
// do checks
- checkForInvalidAssignment(nameNode, initializerNode);
+ _checkForInvalidAssignment(nameNode, initializerNode);
// visit name
nameNode.accept(this);
// visit initializer
@@ -17588,15 +18004,18 @@
return null;
}
+ @override
Object visitVariableDeclarationList(VariableDeclarationList node) => super.visitVariableDeclarationList(node);
+ @override
Object visitVariableDeclarationStatement(VariableDeclarationStatement node) {
- checkForFinalNotInitialized(node.variables);
+ _checkForFinalNotInitialized(node.variables);
return super.visitVariableDeclarationStatement(node);
}
+ @override
Object visitWhileStatement(WhileStatement node) {
- checkForNonBoolCondition(node.condition);
+ _checkForNonBoolCondition(node.condition);
return super.visitWhileStatement(node);
}
@@ -17607,7 +18026,7 @@
* @return `true` if and only if an error code is generated on the passed node
* @see StaticTypeWarningCode#EXPECTED_TWO_MAP_TYPE_ARGUMENTS
*/
- bool checkExpectedTwoMapTypeArguments(TypeArgumentList typeArguments) {
+ bool _checkExpectedTwoMapTypeArguments(TypeArgumentList typeArguments) {
// has type arguments
if (typeArguments == null) {
return false;
@@ -17632,7 +18051,7 @@
* @see CompileTimeErrorCode#FINAL_INITIALIZED_IN_DECLARATION_AND_CONSTRUCTOR
* @see CompileTimeErrorCode#FINAL_INITIALIZED_MULTIPLE_TIMES
*/
- bool checkForAllFinalInitializedErrorCodes(ConstructorDeclaration node) {
+ bool _checkForAllFinalInitializedErrorCodes(ConstructorDeclaration node) {
if (node.factoryKeyword != null || node.redirectedConstructor != null || node.externalKeyword != null) {
return false;
}
@@ -17733,7 +18152,7 @@
* @see StaticWarningCode#INVALID_METHOD_OVERRIDE_NAMED_PARAM_TYPE
* @see StaticWarningCode#INVALID_OVERRIDE_DIFFERENT_DEFAULT_VALUES
*/
- bool checkForAllInvalidOverrideErrorCodes(ExecutableElement executableElement, ExecutableElement overriddenExecutable, List<ParameterElement> parameters, List<AstNode> parameterLocations, SimpleIdentifier errorNameTarget) {
+ bool _checkForAllInvalidOverrideErrorCodes(ExecutableElement executableElement, ExecutableElement overriddenExecutable, List<ParameterElement> parameters, List<AstNode> parameterLocations, SimpleIdentifier errorNameTarget) {
bool isGetter = false;
bool isSetter = false;
if (executableElement is PropertyAccessorElement) {
@@ -17803,14 +18222,14 @@
if (overridingFT == null || overriddenFT == null) {
return false;
}
- Type2 overridingFTReturnType = overridingFT.returnType;
- Type2 overriddenFTReturnType = overriddenFT.returnType;
- List<Type2> overridingNormalPT = overridingFT.normalParameterTypes;
- List<Type2> overriddenNormalPT = overriddenFT.normalParameterTypes;
- List<Type2> overridingPositionalPT = overridingFT.optionalParameterTypes;
- List<Type2> overriddenPositionalPT = overriddenFT.optionalParameterTypes;
- Map<String, Type2> overridingNamedPT = overridingFT.namedParameterTypes;
- Map<String, Type2> overriddenNamedPT = overriddenFT.namedParameterTypes;
+ DartType overridingFTReturnType = overridingFT.returnType;
+ DartType overriddenFTReturnType = overriddenFT.returnType;
+ List<DartType> overridingNormalPT = overridingFT.normalParameterTypes;
+ List<DartType> overriddenNormalPT = overriddenFT.normalParameterTypes;
+ List<DartType> overridingPositionalPT = overridingFT.optionalParameterTypes;
+ List<DartType> overriddenPositionalPT = overriddenFT.optionalParameterTypes;
+ Map<String, DartType> overridingNamedPT = overridingFT.namedParameterTypes;
+ Map<String, DartType> overriddenNamedPT = overriddenFT.namedParameterTypes;
// CTEC.INVALID_OVERRIDE_REQUIRED, CTEC.INVALID_OVERRIDE_POSITIONAL and CTEC.INVALID_OVERRIDE_NAMED
if (overridingNormalPT.length > overriddenNormalPT.length) {
_errorReporter.reportErrorForNode(StaticWarningCode.INVALID_OVERRIDE_REQUIRED, errorNameTarget, [
@@ -17874,10 +18293,10 @@
parameterIndex++;
}
// SWC.INVALID_METHOD_OVERRIDE_NAMED_PARAM_TYPE & SWC.INVALID_OVERRIDE_DIFFERENT_DEFAULT_VALUES
- JavaIterator<MapEntry<String, Type2>> overriddenNamedPTIterator = new JavaIterator(getMapEntrySet(overriddenNamedPT));
+ JavaIterator<MapEntry<String, DartType>> overriddenNamedPTIterator = new JavaIterator(getMapEntrySet(overriddenNamedPT));
while (overriddenNamedPTIterator.hasNext) {
- MapEntry<String, Type2> overriddenNamedPTEntry = overriddenNamedPTIterator.next();
- Type2 overridingType = overridingNamedPT[overriddenNamedPTEntry.getKey()];
+ MapEntry<String, DartType> overriddenNamedPTEntry = overriddenNamedPTIterator.next();
+ DartType overridingType = overridingNamedPT[overriddenNamedPTEntry.getKey()];
if (overridingType == null) {
// Error, this is never reached- INVALID_OVERRIDE_NAMED would have been created above if
// this could be reached.
@@ -17940,7 +18359,7 @@
ParameterElementImpl parameterElt = parameterElts[i];
EvaluationResultImpl result = parameterElt.evaluationResult;
// TODO (jwren) Ignore Object types, see Dart bug 11287
- if (isUserDefinedObject(result)) {
+ if (_isUserDefinedObject(result)) {
continue;
}
String parameterName = parameterElt.name;
@@ -17949,7 +18368,7 @@
String overriddenParameterName = overriddenParameterElt.name;
if (parameterName != null && parameterName == overriddenParameterName) {
EvaluationResultImpl overriddenResult = overriddenParameterElt.evaluationResult;
- if (isUserDefinedObject(overriddenResult)) {
+ if (_isUserDefinedObject(overriddenResult)) {
break;
}
if (!result.equalValues(_typeProvider, overriddenResult)) {
@@ -17968,12 +18387,12 @@
ParameterElementImpl parameterElt = parameterElts[i];
EvaluationResultImpl result = parameterElt.evaluationResult;
// TODO (jwren) Ignore Object types, see Dart bug 11287
- if (isUserDefinedObject(result)) {
+ if (_isUserDefinedObject(result)) {
continue;
}
ParameterElementImpl overriddenParameterElt = overriddenParameterElts[i];
EvaluationResultImpl overriddenResult = overriddenParameterElt.evaluationResult;
- if (isUserDefinedObject(overriddenResult)) {
+ if (_isUserDefinedObject(overriddenResult)) {
continue;
}
if (!result.equalValues(_typeProvider, overriddenResult)) {
@@ -18000,7 +18419,7 @@
* @param errorNameTarget the node to report problems on
* @return `true` if and only if an error code is generated on the passed node
*/
- bool checkForAllInvalidOverrideErrorCodesForExecutable(ExecutableElement executableElement, List<ParameterElement> parameters, List<AstNode> parameterLocations, SimpleIdentifier errorNameTarget) {
+ bool _checkForAllInvalidOverrideErrorCodesForExecutable(ExecutableElement executableElement, List<ParameterElement> parameters, List<AstNode> parameterLocations, SimpleIdentifier errorNameTarget) {
//
// Compute the overridden executable from the InheritanceManager
//
@@ -18013,7 +18432,7 @@
MultiplyInheritedExecutableElement multiplyInheritedElement = overriddenExecutable;
List<ExecutableElement> overriddenElement = multiplyInheritedElement.inheritedElements;
for (int i = 0; i < overriddenElement.length; i++) {
- if (checkForAllInvalidOverrideErrorCodes(executableElement, overriddenElement[i], parameters, parameterLocations, errorNameTarget)) {
+ if (_checkForAllInvalidOverrideErrorCodes(executableElement, overriddenElement[i], parameters, parameterLocations, errorNameTarget)) {
return true;
}
}
@@ -18022,7 +18441,7 @@
//
// Otherwise, just call checkForAllInvalidOverrideErrorCodes.
//
- return checkForAllInvalidOverrideErrorCodes(executableElement, overriddenExecutable, parameters, parameterLocations, errorNameTarget);
+ return _checkForAllInvalidOverrideErrorCodes(executableElement, overriddenExecutable, parameters, parameterLocations, errorNameTarget);
}
/**
@@ -18032,7 +18451,7 @@
* @return `true` if and only if an error code is generated on the passed node
* @see #checkForAllInvalidOverrideErrorCodes(ExecutableElement)
*/
- bool checkForAllInvalidOverrideErrorCodesForField(FieldDeclaration node) {
+ bool _checkForAllInvalidOverrideErrorCodesForField(FieldDeclaration node) {
if (_enclosingClass == null || node.isStatic) {
return false;
}
@@ -18047,10 +18466,10 @@
PropertyAccessorElement setter = element.setter;
SimpleIdentifier fieldName = field.name;
if (getter != null) {
- hasProblems = javaBooleanOr(hasProblems, checkForAllInvalidOverrideErrorCodesForExecutable(getter, ParameterElementImpl.EMPTY_ARRAY, AstNode.EMPTY_ARRAY, fieldName));
+ hasProblems = javaBooleanOr(hasProblems, _checkForAllInvalidOverrideErrorCodesForExecutable(getter, ParameterElementImpl.EMPTY_ARRAY, AstNode.EMPTY_ARRAY, fieldName));
}
if (setter != null) {
- hasProblems = javaBooleanOr(hasProblems, checkForAllInvalidOverrideErrorCodesForExecutable(setter, setter.parameters, <AstNode> [fieldName], fieldName));
+ hasProblems = javaBooleanOr(hasProblems, _checkForAllInvalidOverrideErrorCodesForExecutable(setter, setter.parameters, <AstNode> [fieldName], fieldName));
}
}
return hasProblems;
@@ -18063,7 +18482,7 @@
* @return `true` if and only if an error code is generated on the passed node
* @see #checkForAllInvalidOverrideErrorCodes(ExecutableElement)
*/
- bool checkForAllInvalidOverrideErrorCodesForMethod(MethodDeclaration node) {
+ bool _checkForAllInvalidOverrideErrorCodesForMethod(MethodDeclaration node) {
if (_enclosingClass == null || node.isStatic || node.body is NativeFunctionBody) {
return false;
}
@@ -18078,7 +18497,7 @@
FormalParameterList formalParameterList = node.parameters;
NodeList<FormalParameter> parameterList = formalParameterList != null ? formalParameterList.parameters : null;
List<AstNode> parameters = parameterList != null ? new List.from(parameterList) : null;
- return checkForAllInvalidOverrideErrorCodesForExecutable(executableElement, executableElement.parameters, parameters, methodName);
+ return _checkForAllInvalidOverrideErrorCodesForExecutable(executableElement, executableElement.parameters, parameters, methodName);
}
/**
@@ -18090,23 +18509,23 @@
* @see CompileTimeErrorCode#MIXIN_INHERITS_FROM_NOT_OBJECT
* @see CompileTimeErrorCode#MIXIN_REFERENCES_SUPER
*/
- bool checkForAllMixinErrorCodes(WithClause withClause) {
+ bool _checkForAllMixinErrorCodes(WithClause withClause) {
if (withClause == null) {
return false;
}
bool problemReported = false;
for (TypeName mixinName in withClause.mixinTypes) {
- Type2 mixinType = mixinName.type;
+ DartType mixinType = mixinName.type;
if (mixinType is! InterfaceType) {
continue;
}
- if (checkForExtendsOrImplementsDisallowedClass(mixinName, CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS)) {
+ if (_checkForExtendsOrImplementsDisallowedClass(mixinName, CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS)) {
problemReported = true;
} else {
ClassElement mixinElement = (mixinType as InterfaceType).element;
- problemReported = javaBooleanOr(problemReported, checkForMixinDeclaresConstructor(mixinName, mixinElement));
- problemReported = javaBooleanOr(problemReported, checkForMixinInheritsNotFromObject(mixinName, mixinElement));
- problemReported = javaBooleanOr(problemReported, checkForMixinReferencesSuper(mixinName, mixinElement));
+ problemReported = javaBooleanOr(problemReported, _checkForMixinDeclaresConstructor(mixinName, mixinElement));
+ problemReported = javaBooleanOr(problemReported, _checkForMixinInheritsNotFromObject(mixinName, mixinElement));
+ problemReported = javaBooleanOr(problemReported, _checkForMixinReferencesSuper(mixinName, mixinElement));
}
}
return problemReported;
@@ -18121,7 +18540,7 @@
* @see StaticWarningCode#REDIRECT_TO_INVALID_FUNCTION_TYPE
* @see StaticWarningCode#REDIRECT_TO_MISSING_CONSTRUCTOR
*/
- bool checkForAllRedirectConstructorErrorCodes(ConstructorDeclaration node) {
+ bool _checkForAllRedirectConstructorErrorCodes(ConstructorDeclaration node) {
//
// Prepare redirected constructor node
//
@@ -18138,7 +18557,7 @@
// If the element is null, we check for the REDIRECT_TO_MISSING_CONSTRUCTOR case
//
TypeName constructorTypeName = redirectedConstructor.type;
- Type2 redirectedType = constructorTypeName.type;
+ DartType redirectedType = constructorTypeName.type;
if (redirectedType != null && redirectedType.element != null && !redirectedType.isDynamic) {
//
// Prepare the constructor name
@@ -18154,12 +18573,12 @@
return false;
}
FunctionType redirectedType = redirectedElement.type;
- Type2 redirectedReturnType = redirectedType.returnType;
+ DartType redirectedReturnType = redirectedType.returnType;
//
// Report specific problem when return type is incompatible
//
FunctionType constructorType = node.element.type;
- Type2 constructorReturnType = constructorType.returnType;
+ DartType constructorReturnType = constructorType.returnType;
if (!redirectedReturnType.isAssignableTo(constructorReturnType)) {
_errorReporter.reportErrorForNode(StaticWarningCode.REDIRECT_TO_INVALID_RETURN_TYPE, redirectedConstructor, [redirectedReturnType, constructorReturnType]);
return true;
@@ -18191,9 +18610,9 @@
* @see StaticWarningCode#RETURN_WITHOUT_VALUE
* @see StaticTypeWarningCode#RETURN_OF_INVALID_TYPE
*/
- bool checkForAllReturnStatementErrorCodes(ReturnStatement node) {
+ bool _checkForAllReturnStatementErrorCodes(ReturnStatement node) {
FunctionType functionType = _enclosingFunction == null ? null : _enclosingFunction.type;
- Type2 expectedReturnType = functionType == null ? DynamicTypeImpl.instance : functionType.returnType;
+ DartType expectedReturnType = functionType == null ? DynamicTypeImpl.instance : functionType.returnType;
Expression returnExpression = node.expression;
// RETURN_IN_GENERATIVE_CONSTRUCTOR
bool isGenerativeConstructor = _enclosingFunction is ConstructorElement && !(_enclosingFunction as ConstructorElement).isFactory;
@@ -18213,7 +18632,7 @@
return true;
}
// RETURN_OF_INVALID_TYPE
- return checkForReturnOfInvalidType(returnExpression, expectedReturnType);
+ return _checkForReturnOfInvalidType(returnExpression, expectedReturnType);
}
/**
@@ -18226,7 +18645,7 @@
* @return `true` if and only if an error code is generated on the passed node
* @see CompileTimeErrorCode#AMBIGUOUS_EXPORT
*/
- bool checkForAmbiguousExport(ExportDirective node, ExportElement exportElement) {
+ bool _checkForAmbiguousExport(ExportDirective node, ExportElement exportElement) {
// prepare exported library
LibraryElement exportedLibrary = exportElement.exportedLibrary;
if (exportedLibrary == null) {
@@ -18264,7 +18683,7 @@
* @return `true` if and only if an error code is generated on the passed node
* @see StaticWarningCode#ARGUMENT_TYPE_NOT_ASSIGNABLE
*/
- bool checkForArgumentTypeNotAssignable(Expression expression, Type2 expectedStaticType, Type2 actualStaticType, Type2 expectedPropagatedType, Type2 actualPropagatedType, ErrorCode errorCode) {
+ bool _checkForArgumentTypeNotAssignable(Expression expression, DartType expectedStaticType, DartType actualStaticType, DartType expectedPropagatedType, DartType actualPropagatedType, ErrorCode errorCode) {
//
// Test static type information
//
@@ -18287,15 +18706,15 @@
* @return `true` if and only if an error code is generated on the passed node
* @see StaticWarningCode#ARGUMENT_TYPE_NOT_ASSIGNABLE
*/
- bool checkForArgumentTypeNotAssignableForArgument(Expression argument) {
+ bool _checkForArgumentTypeNotAssignableForArgument(Expression argument) {
if (argument == null) {
return false;
}
ParameterElement staticParameterElement = argument.staticParameterElement;
- Type2 staticParameterType = staticParameterElement == null ? null : staticParameterElement.type;
+ DartType staticParameterType = staticParameterElement == null ? null : staticParameterElement.type;
ParameterElement propagatedParameterElement = argument.propagatedParameterElement;
- Type2 propagatedParameterType = propagatedParameterElement == null ? null : propagatedParameterElement.type;
- return checkForArgumentTypeNotAssignableWithExpectedTypes(argument, staticParameterType, propagatedParameterType, StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE);
+ DartType propagatedParameterType = propagatedParameterElement == null ? null : propagatedParameterElement.type;
+ return _checkForArgumentTypeNotAssignableWithExpectedTypes(argument, staticParameterType, propagatedParameterType, StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE);
}
/**
@@ -18307,7 +18726,7 @@
* @return `true` if and only if an error code is generated on the passed node
* @see StaticWarningCode#ARGUMENT_TYPE_NOT_ASSIGNABLE
*/
- bool checkForArgumentTypeNotAssignableWithExpectedTypes(Expression expression, Type2 expectedStaticType, Type2 expectedPropagatedType, ErrorCode errorCode) => checkForArgumentTypeNotAssignable(expression, expectedStaticType, getStaticType(expression), expectedPropagatedType, expression.propagatedType, errorCode);
+ bool _checkForArgumentTypeNotAssignableWithExpectedTypes(Expression expression, DartType expectedStaticType, DartType expectedPropagatedType, ErrorCode errorCode) => _checkForArgumentTypeNotAssignable(expression, expectedStaticType, _getStaticType(expression), expectedPropagatedType, expression.propagatedType, errorCode);
/**
* This verifies that the passed arguments can be assigned to their corresponding parameters.
@@ -18316,13 +18735,13 @@
* @return `true` if and only if an error code is generated on the passed node
* @see StaticWarningCode#ARGUMENT_TYPE_NOT_ASSIGNABLE
*/
- bool checkForArgumentTypesNotAssignableInList(ArgumentList argumentList) {
+ bool _checkForArgumentTypesNotAssignableInList(ArgumentList argumentList) {
if (argumentList == null) {
return false;
}
bool problemReported = false;
for (Expression argument in argumentList.arguments) {
- problemReported = javaBooleanOr(problemReported, checkForArgumentTypeNotAssignableForArgument(argument));
+ problemReported = javaBooleanOr(problemReported, _checkForArgumentTypeNotAssignableForArgument(argument));
}
// done
return problemReported;
@@ -18337,7 +18756,7 @@
* @see StaticWarningCode#ASSIGNMENT_TO_FINAL
* @see StaticWarningCode#ASSIGNMENT_TO_METHOD
*/
- bool checkForAssignmentToFinal(Expression expression) {
+ bool _checkForAssignmentToFinal(Expression expression) {
// prepare element
Element element = null;
if (expression is Identifier) {
@@ -18385,7 +18804,7 @@
* @see CompileTimeErrorCode#BUILT_IN_IDENTIFIER_AS_TYPE_PARAMETER_NAME
* @see CompileTimeErrorCode#BUILT_IN_IDENTIFIER_AS_TYPEDEF_NAME
*/
- bool checkForBuiltInIdentifierAsName(SimpleIdentifier identifier, ErrorCode errorCode) {
+ bool _checkForBuiltInIdentifierAsName(SimpleIdentifier identifier, ErrorCode errorCode) {
sc.Token token = identifier.token;
if (identical(token.type, sc.TokenType.KEYWORD)) {
_errorReporter.reportErrorForNode(errorCode, identifier, [identifier.name]);
@@ -18402,7 +18821,7 @@
* @return `true` if and only if an error code is generated on the passed node
* @see StaticWarningCode#CASE_BLOCK_NOT_TERMINATED
*/
- bool checkForCaseBlockNotTerminated(SwitchCase node) {
+ bool _checkForCaseBlockNotTerminated(SwitchCase node) {
NodeList<Statement> statements = node.statements;
if (statements.isEmpty) {
// fall-through without statements at all
@@ -18442,14 +18861,14 @@
* @return `true` if and only if an error code is generated on the passed node
* @see StaticWarningCode#CASE_BLOCK_NOT_TERMINATED
*/
- bool checkForCaseBlocksNotTerminated(SwitchStatement node) {
+ bool _checkForCaseBlocksNotTerminated(SwitchStatement node) {
bool foundError = false;
NodeList<SwitchMember> members = node.members;
int lastMember = members.length - 1;
for (int i = 0; i < lastMember; i++) {
SwitchMember member = members[i];
if (member is SwitchCase) {
- foundError = javaBooleanOr(foundError, checkForCaseBlockNotTerminated(member));
+ foundError = javaBooleanOr(foundError, _checkForCaseBlockNotTerminated(member));
}
}
return foundError;
@@ -18464,8 +18883,8 @@
* @return `true` if and only if an error code is generated on the passed node
* @see CompileTimeErrorCode#CASE_EXPRESSION_TYPE_IMPLEMENTS_EQUALS
*/
- bool checkForCaseExpressionTypeImplementsEquals(SwitchStatement node, Type2 type) {
- if (!implementsEqualsWhenNotAllowed(type)) {
+ bool _checkForCaseExpressionTypeImplementsEquals(SwitchStatement node, DartType type) {
+ if (!_implementsEqualsWhenNotAllowed(type)) {
return false;
}
// report error
@@ -18481,7 +18900,7 @@
* @return `true` if and only if an error code is generated on the passed node
* @see StaticWarningCode#CONCRETE_CLASS_WITH_ABSTRACT_MEMBER
*/
- bool checkForConcreteClassWithAbstractMember(MethodDeclaration node) {
+ bool _checkForConcreteClassWithAbstractMember(MethodDeclaration node) {
if (node.isAbstract && _enclosingClass != null && !_enclosingClass.isAbstract) {
SimpleIdentifier methodName = node.name;
_errorReporter.reportErrorForNode(StaticWarningCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER, methodName, [methodName.name, _enclosingClass.displayName]);
@@ -18501,7 +18920,7 @@
* @see CompileTimeErrorCode#CONFLICTING_CONSTRUCTOR_NAME_AND_FIELD
* @see CompileTimeErrorCode#CONFLICTING_CONSTRUCTOR_NAME_AND_METHOD
*/
- bool checkForConflictingConstructorNameAndMember(ConstructorDeclaration node) {
+ bool _checkForConflictingConstructorNameAndMember(ConstructorDeclaration node) {
ConstructorElement constructorElement = node.element;
SimpleIdentifier constructorName = node.name;
String name = constructorElement.name;
@@ -18547,7 +18966,7 @@
* @see CompileTimeErrorCode#CONFLICTING_GETTER_AND_METHOD
* @see CompileTimeErrorCode#CONFLICTING_METHOD_AND_GETTER
*/
- bool checkForConflictingGetterAndMethod() {
+ bool _checkForConflictingGetterAndMethod() {
if (_enclosingClass == null) {
return false;
}
@@ -18599,7 +19018,7 @@
* @see StaticWarningCode#CONFLICTING_INSTANCE_GETTER_AND_SUPERCLASS_MEMBER
* @see StaticWarningCode#CONFLICTING_INSTANCE_SETTER_AND_SUPERCLASS_MEMBER
*/
- bool checkForConflictingInstanceGetterAndSuperclassMember() {
+ bool _checkForConflictingInstanceGetterAndSuperclassMember() {
if (_enclosingClass == null) {
return false;
}
@@ -18659,7 +19078,7 @@
* @return `true` if and only if an error code is generated on the passed node
* @see StaticWarningCode#CONFLICTING_INSTANCE_METHOD_SETTER
*/
- bool checkForConflictingInstanceMethodSetter(ClassDeclaration node) {
+ bool _checkForConflictingInstanceMethodSetter(ClassDeclaration node) {
// Reference all of the class members in this class.
NodeList<ClassMember> classMembers = node.members;
if (classMembers.isEmpty) {
@@ -18740,7 +19159,7 @@
* @return `true` if and only if an error code is generated on the passed node
* @see StaticWarningCode#CONFLICTING_STATIC_GETTER_AND_INSTANCE_SETTER
*/
- bool checkForConflictingStaticGetterAndInstanceSetter(MethodDeclaration node) {
+ bool _checkForConflictingStaticGetterAndInstanceSetter(MethodDeclaration node) {
if (!node.isStatic) {
return false;
}
@@ -18780,7 +19199,7 @@
* @return `true` if and only if an error code is generated on the passed node
* @see StaticWarningCode#CONFLICTING_STATIC_SETTER_AND_INSTANCE_MEMBER
*/
- bool checkForConflictingStaticSetterAndInstanceMember(MethodDeclaration node) {
+ bool _checkForConflictingStaticSetterAndInstanceMember(MethodDeclaration node) {
if (!node.isStatic) {
return false;
}
@@ -18827,7 +19246,7 @@
* @see CompileTimeErrorCode#CONFLICTING_TYPE_VARIABLE_AND_CLASS
* @see CompileTimeErrorCode#CONFLICTING_TYPE_VARIABLE_AND_MEMBER
*/
- bool checkForConflictingTypeVariableErrorCodes(ClassDeclaration node) {
+ bool _checkForConflictingTypeVariableErrorCodes(ClassDeclaration node) {
bool problemReported = false;
for (TypeParameterElement typeParameter in _enclosingClass.typeParameters) {
String name = typeParameter.name;
@@ -18853,7 +19272,7 @@
* @return `true` if and only if an error code is generated on the passed node
* @see CompileTimeErrorCode#CONST_CONSTRUCTOR_WITH_NON_CONST_SUPER
*/
- bool checkForConstConstructorWithNonConstSuper(ConstructorDeclaration node) {
+ bool _checkForConstConstructorWithNonConstSuper(ConstructorDeclaration node) {
if (!_isEnclosingConstructorConst) {
return false;
}
@@ -18901,7 +19320,7 @@
* @return `true` if and only if an error code is generated on the passed node
* @see CompileTimeErrorCode#CONST_CONSTRUCTOR_WITH_NON_FINAL_FIELD
*/
- bool checkForConstConstructorWithNonFinalField(ConstructorDeclaration node) {
+ bool _checkForConstConstructorWithNonFinalField(ConstructorDeclaration node) {
if (!_isEnclosingConstructorConst) {
return false;
}
@@ -18924,7 +19343,7 @@
* @return `true` if and only if an error code is generated on the passed node
* @see CompileTimeErrorCode#CONST_CONSTRUCTOR_THROWS_EXCEPTION
*/
- bool checkForConstEvalThrowsException(ThrowExpression node) {
+ bool _checkForConstEvalThrowsException(ThrowExpression node) {
if (_isEnclosingConstructorConst) {
_errorReporter.reportErrorForNode(CompileTimeErrorCode.CONST_CONSTRUCTOR_THROWS_EXCEPTION, node, []);
return true;
@@ -18939,7 +19358,7 @@
* @return `true` if and only if an error code is generated on the passed node
* @see CompileTimeErrorCode#CONST_FORMAL_PARAMETER
*/
- bool checkForConstFormalParameter(NormalFormalParameter node) {
+ bool _checkForConstFormalParameter(NormalFormalParameter node) {
if (node.isConst) {
_errorReporter.reportErrorForNode(CompileTimeErrorCode.CONST_FORMAL_PARAMETER, node, []);
return true;
@@ -18955,7 +19374,7 @@
* @return `true` if and only if an error code is generated on the passed node
* @see CompileTimeErrorCode#CONST_MAP_KEY_EXPRESSION_TYPE_IMPLEMENTS_EQUALS
*/
- bool checkForConstMapKeyExpressionTypeImplementsEquals(MapLiteral node) {
+ bool _checkForConstMapKeyExpressionTypeImplementsEquals(MapLiteral node) {
// OK, not const.
if (node.constKeyword == null) {
return false;
@@ -18964,8 +19383,8 @@
bool hasProblems = false;
for (MapLiteralEntry entry in node.entries) {
Expression key = entry.key;
- Type2 type = key.staticType;
- if (implementsEqualsWhenNotAllowed(type)) {
+ DartType type = key.staticType;
+ if (_implementsEqualsWhenNotAllowed(type)) {
_errorReporter.reportErrorForNode(CompileTimeErrorCode.CONST_MAP_KEY_EXPRESSION_TYPE_IMPLEMENTS_EQUALS, key, [type.displayName]);
hasProblems = true;
}
@@ -18985,7 +19404,7 @@
* @see StaticWarningCode#CONST_WITH_ABSTRACT_CLASS
* @see StaticWarningCode#NEW_WITH_ABSTRACT_CLASS
*/
- bool checkForConstOrNewWithAbstractClass(InstanceCreationExpression node, TypeName typeName, InterfaceType type) {
+ bool _checkForConstOrNewWithAbstractClass(InstanceCreationExpression node, TypeName typeName, InterfaceType type) {
if (type.element.isAbstract) {
ConstructorElement element = node.staticElement;
if (element != null && !element.isFactory) {
@@ -19010,7 +19429,7 @@
* @return `true` if and only if an error code is generated on the passed node
* @see CompileTimeErrorCode#CONST_WITH_NON_CONST
*/
- bool checkForConstWithNonConst(InstanceCreationExpression node) {
+ bool _checkForConstWithNonConst(InstanceCreationExpression node) {
ConstructorElement constructorElement = node.staticElement;
if (constructorElement != null && !constructorElement.isConst) {
_errorReporter.reportErrorForNode(CompileTimeErrorCode.CONST_WITH_NON_CONST, node, []);
@@ -19026,7 +19445,7 @@
* @return `true` if and only if an error code is generated on the passed node
* @see CompileTimeErrorCode#CONST_WITH_TYPE_PARAMETERS
*/
- bool checkForConstWithTypeParameters(TypeName typeName) {
+ bool _checkForConstWithTypeParameters(TypeName typeName) {
// something wrong with AST
if (typeName == null) {
return false;
@@ -19044,7 +19463,7 @@
if (typeArguments != null) {
bool hasError = false;
for (TypeName argument in typeArguments.arguments) {
- hasError = javaBooleanOr(hasError, checkForConstWithTypeParameters(argument));
+ hasError = javaBooleanOr(hasError, _checkForConstWithTypeParameters(argument));
}
return hasError;
}
@@ -19062,13 +19481,13 @@
* @return `true` if and only if an error code is generated on the passed node
* @see CompileTimeErrorCode#CONST_WITH_TYPE_PARAMETERS
*/
- bool checkForConstWithTypeParametersInCreation(InstanceCreationExpression node) {
+ bool _checkForConstWithTypeParametersInCreation(InstanceCreationExpression node) {
ConstructorName constructorName = node.constructorName;
if (constructorName == null) {
return false;
}
TypeName typeName = constructorName.type;
- return checkForConstWithTypeParameters(typeName);
+ return _checkForConstWithTypeParameters(typeName);
}
/**
@@ -19082,7 +19501,7 @@
* @see CompileTimeErrorCode#CONST_WITH_UNDEFINED_CONSTRUCTOR
* @see CompileTimeErrorCode#CONST_WITH_UNDEFINED_CONSTRUCTOR_DEFAULT
*/
- bool checkForConstWithUndefinedConstructor(InstanceCreationExpression node) {
+ bool _checkForConstWithUndefinedConstructor(InstanceCreationExpression node) {
// OK if resolved
if (node.staticElement != null) {
return false;
@@ -19115,7 +19534,7 @@
* @return `true` if and only if an error code is generated on the passed node
* @see CompileTimeErrorCode#DEFAULT_VALUE_IN_FUNCTION_TYPE_ALIAS
*/
- bool checkForDefaultValueInFunctionTypeAlias(FunctionTypeAlias node) {
+ bool _checkForDefaultValueInFunctionTypeAlias(FunctionTypeAlias node) {
bool result = false;
FormalParameterList formalParameterList = node.parameters;
NodeList<FormalParameter> parameters = formalParameterList.parameters;
@@ -19139,7 +19558,7 @@
* @return `true` if and only if an error code is generated on the passed node
* @see CompileTimeErrorCode#DEFAULT_VALUE_IN_FUNCTION_TYPED_PARAMETER
*/
- bool checkForDefaultValueInFunctionTypedParameter(DefaultFormalParameter node) {
+ bool _checkForDefaultValueInFunctionTypedParameter(DefaultFormalParameter node) {
// OK, not in a function typed parameter.
if (!_isInFunctionTypedFormalParameter) {
return false;
@@ -19160,7 +19579,7 @@
* @return `true` if and only if an error code is generated on the passed node
* @see CompileTimeErrorCode#DUPLICATE_DEFINITION_INHERITANCE
*/
- bool checkForDuplicateDefinitionInheritance() {
+ bool _checkForDuplicateDefinitionInheritance() {
if (_enclosingClass == null) {
return false;
}
@@ -19169,13 +19588,13 @@
if (!member.isStatic) {
continue;
}
- hasProblem = javaBooleanOr(hasProblem, checkForDuplicateDefinitionOfMember(member));
+ hasProblem = javaBooleanOr(hasProblem, _checkForDuplicateDefinitionOfMember(member));
}
for (ExecutableElement member in _enclosingClass.accessors) {
if (!member.isStatic) {
continue;
}
- hasProblem = javaBooleanOr(hasProblem, checkForDuplicateDefinitionOfMember(member));
+ hasProblem = javaBooleanOr(hasProblem, _checkForDuplicateDefinitionOfMember(member));
}
return hasProblem;
}
@@ -19188,7 +19607,7 @@
* @return `true` if and only if an error code is generated on the passed node
* @see CompileTimeErrorCode#DUPLICATE_DEFINITION_INHERITANCE
*/
- bool checkForDuplicateDefinitionOfMember(ExecutableElement staticMember) {
+ bool _checkForDuplicateDefinitionOfMember(ExecutableElement staticMember) {
// prepare name
String name = staticMember.name;
if (name == null) {
@@ -19215,7 +19634,7 @@
* @return `true` if and only if an error code is generated on the passed node
* @see StaticTypeWarningCode#EXPECTED_ONE_LIST_TYPE_ARGUMENTS
*/
- bool checkForExpectedOneListTypeArgument(ListLiteral node) {
+ bool _checkForExpectedOneListTypeArgument(ListLiteral node) {
// prepare type arguments
TypeArgumentList typeArguments = node.typeArguments;
if (typeArguments == null) {
@@ -19240,7 +19659,7 @@
* @return `true` if and only if an error code is generated on the passed node
* @see CompileTimeErrorCode#EXPORT_DUPLICATED_LIBRARY_NAME
*/
- bool checkForExportDuplicateLibraryName(ExportDirective node, ExportElement exportElement) {
+ bool _checkForExportDuplicateLibraryName(ExportDirective node, ExportElement exportElement) {
// prepare exported library
LibraryElement nodeLibrary = exportElement.exportedLibrary;
if (nodeLibrary == null) {
@@ -19274,7 +19693,7 @@
* @return `true` if and only if an error code is generated on the passed node
* @see CompileTimeErrorCode#EXPORT_INTERNAL_LIBRARY
*/
- bool checkForExportInternalLibrary(ExportDirective node, ExportElement exportElement) {
+ bool _checkForExportInternalLibrary(ExportDirective node, ExportElement exportElement) {
if (_isInSystemLibrary) {
return false;
}
@@ -19300,11 +19719,11 @@
* @return `true` if and only if an error code is generated on the passed node
* @see CompileTimeErrorCode#EXTENDS_DISALLOWED_CLASS
*/
- bool checkForExtendsDisallowedClass(ExtendsClause node) {
+ bool _checkForExtendsDisallowedClass(ExtendsClause node) {
if (node == null) {
return false;
}
- return checkForExtendsOrImplementsDisallowedClass(node.superclass, CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS);
+ return _checkForExtendsOrImplementsDisallowedClass(node.superclass, CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS);
}
/**
@@ -19318,11 +19737,11 @@
* @see CompileTimeErrorCode#EXTENDS_DISALLOWED_CLASS
* @see CompileTimeErrorCode#IMPLEMENTS_DISALLOWED_CLASS
*/
- bool checkForExtendsOrImplementsDisallowedClass(TypeName typeName, ErrorCode errorCode) {
+ bool _checkForExtendsOrImplementsDisallowedClass(TypeName typeName, ErrorCode errorCode) {
if (typeName.isSynthetic) {
return false;
}
- Type2 superType = typeName.type;
+ DartType superType = typeName.type;
for (InterfaceType disallowedType in _DISALLOWED_TYPES_TO_EXTEND_OR_IMPLEMENT) {
if (superType != null && superType == disallowedType) {
// if the violating type happens to be 'num', we need to rule out the case where the
@@ -19335,7 +19754,7 @@
// grandparent node
if (grandParent is ClassDeclaration) {
ClassElement classElement = grandParent.element;
- Type2 classType = classElement.type;
+ DartType classType = classElement.type;
if (classType != null && (classType == _intType || classType == _typeProvider.doubleType)) {
return false;
}
@@ -19358,7 +19777,7 @@
* @see CompileTimeErrorCode#CONST_FIELD_INITIALIZER_NOT_ASSIGNABLE
* @see StaticWarningCode#FIELD_INITIALIZER_NOT_ASSIGNABLE
*/
- bool checkForFieldInitializerNotAssignable(ConstructorFieldInitializer node) {
+ bool _checkForFieldInitializerNotAssignable(ConstructorFieldInitializer node) {
// prepare field element
Element staticElement = node.fieldName.staticElement;
if (staticElement is! FieldElement) {
@@ -19366,14 +19785,14 @@
}
FieldElement fieldElement = staticElement as FieldElement;
// prepare field type
- Type2 fieldType = fieldElement.type;
+ DartType fieldType = fieldElement.type;
// prepare expression type
Expression expression = node.expression;
if (expression == null) {
return false;
}
// test the static type of the expression
- Type2 staticType = getStaticType(expression);
+ DartType staticType = _getStaticType(expression);
if (staticType == null) {
return false;
}
@@ -19396,7 +19815,7 @@
* @return `true` if and only if an error code is generated on the passed node
* @see CompileTimeErrorCode#FIELD_INITIALIZER_OUTSIDE_CONSTRUCTOR
*/
- bool checkForFieldInitializingFormalRedirectingConstructor(FieldFormalParameter node) {
+ bool _checkForFieldInitializingFormalRedirectingConstructor(FieldFormalParameter node) {
ConstructorDeclaration constructor = node.getAncestor((node) => node is ConstructorDeclaration);
if (constructor == null) {
_errorReporter.reportErrorForNode(CompileTimeErrorCode.FIELD_INITIALIZER_OUTSIDE_CONSTRUCTOR, node, []);
@@ -19430,7 +19849,7 @@
* @see CompileTimeErrorCode#CONST_NOT_INITIALIZED
* @see StaticWarningCode#FINAL_NOT_INITIALIZED
*/
- bool checkForFinalNotInitialized(VariableDeclarationList node) {
+ bool _checkForFinalNotInitialized(VariableDeclarationList node) {
if (_isInNativeClass) {
return false;
}
@@ -19461,7 +19880,7 @@
* @see CompileTimeErrorCode#CONST_NOT_INITIALIZED
* @see StaticWarningCode#FINAL_NOT_INITIALIZED
*/
- bool checkForFinalNotInitializedInClass(ClassDeclaration node) {
+ bool _checkForFinalNotInitializedInClass(ClassDeclaration node) {
NodeList<ClassMember> classMembers = node.members;
for (ClassMember classMember in classMembers) {
if (classMember is ConstructorDeclaration) {
@@ -19472,7 +19891,7 @@
for (ClassMember classMember in classMembers) {
if (classMember is FieldDeclaration) {
FieldDeclaration field = classMember;
- foundError = javaBooleanOr(foundError, checkForFinalNotInitialized(field.fields));
+ foundError = javaBooleanOr(foundError, _checkForFinalNotInitialized(field.fields));
}
}
return foundError;
@@ -19486,13 +19905,13 @@
* @return `true` if and only if an error code is generated on the passed node
* @see CompileTimeErrorCode#IMPLEMENTS_DISALLOWED_CLASS
*/
- bool checkForImplementsDisallowedClass(ImplementsClause node) {
+ bool _checkForImplementsDisallowedClass(ImplementsClause node) {
if (node == null) {
return false;
}
bool foundError = false;
for (TypeName type in node.interfaces) {
- foundError = javaBooleanOr(foundError, checkForExtendsOrImplementsDisallowedClass(type, CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS));
+ foundError = javaBooleanOr(foundError, _checkForExtendsOrImplementsDisallowedClass(type, CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS));
}
return foundError;
}
@@ -19506,7 +19925,7 @@
* @see CompileTimeErrorCode#IMPLICIT_THIS_REFERENCE_IN_INITIALIZER
* @see CompileTimeErrorCode#INSTANCE_MEMBER_ACCESS_FROM_STATIC TODO(scheglov) rename thid method
*/
- bool checkForImplicitThisReferenceInInitializer(SimpleIdentifier node) {
+ bool _checkForImplicitThisReferenceInInitializer(SimpleIdentifier node) {
if (!_isInConstructorInitializer && !_isInStaticMethod && !_isInInstanceVariableInitializer && !_isInStaticVariableDeclaration) {
return false;
}
@@ -19568,7 +19987,7 @@
* @return `true` if and only if an error code is generated on the passed node
* @see CompileTimeErrorCode#IMPORT_DUPLICATED_LIBRARY_NAME
*/
- bool checkForImportDuplicateLibraryName(ImportDirective node, ImportElement importElement) {
+ bool _checkForImportDuplicateLibraryName(ImportDirective node, ImportElement importElement) {
// prepare imported library
LibraryElement nodeLibrary = importElement.importedLibrary;
if (nodeLibrary == null) {
@@ -19602,7 +20021,7 @@
* @return `true` if and only if an error code is generated on the passed node
* @see CompileTimeErrorCode#IMPORT_INTERNAL_LIBRARY
*/
- bool checkForImportInternalLibrary(ImportDirective node, ImportElement importElement) {
+ bool _checkForImportInternalLibrary(ImportDirective node, ImportElement importElement) {
if (_isInSystemLibrary) {
return false;
}
@@ -19628,11 +20047,11 @@
* @return `true` if and only if an error code is generated on the passed node
* @see CompileTimeErrorCode#INCONSISTENT_CASE_EXPRESSION_TYPES
*/
- bool checkForInconsistentCaseExpressionTypes(SwitchStatement node) {
+ bool _checkForInconsistentCaseExpressionTypes(SwitchStatement node) {
// TODO(jwren) Revisit this algorithm, should there up to n-1 errors?
NodeList<SwitchMember> switchMembers = node.members;
bool foundError = false;
- Type2 firstType = null;
+ DartType firstType = null;
for (SwitchMember switchMember in switchMembers) {
if (switchMember is SwitchCase) {
SwitchCase switchCase = switchMember;
@@ -19643,7 +20062,7 @@
// the variable.
firstType = expression.bestType;
} else {
- Type2 nType = expression.bestType;
+ DartType nType = expression.bestType;
if (firstType != nType) {
_errorReporter.reportErrorForNode(CompileTimeErrorCode.INCONSISTENT_CASE_EXPRESSION_TYPES, expression, [expression.toSource(), firstType.displayName]);
foundError = true;
@@ -19652,7 +20071,7 @@
}
}
if (!foundError) {
- checkForCaseExpressionTypeImplementsEquals(node, firstType);
+ _checkForCaseExpressionTypeImplementsEquals(node, firstType);
}
return foundError;
}
@@ -19664,7 +20083,7 @@
* @return `true` if and only if an error code is generated on the passed node
* @see StaticTypeWarningCode#INCONSISTENT_METHOD_INHERITANCE
*/
- bool checkForInconsistentMethodInheritance() {
+ bool _checkForInconsistentMethodInheritance() {
// Ensure that the inheritance manager has a chance to generate all errors we may care about,
// note that we ensure that the interfaces data since there are no errors.
_inheritanceManager.getMapOfMembersInheritedFromInterfaces(_enclosingClass);
@@ -19689,7 +20108,7 @@
* @return `true` if and only if an error code is generated on the passed node
* @see StaticTypeWarningCode#INSTANCE_ACCESS_TO_STATIC_MEMBER
*/
- bool checkForInstanceAccessToStaticMember(ClassElement typeReference, SimpleIdentifier name) {
+ bool _checkForInstanceAccessToStaticMember(ClassElement typeReference, SimpleIdentifier name) {
// OK, in comment
if (_isInComment) {
return false;
@@ -19726,15 +20145,15 @@
* @return `true` if and only if an error code is generated on the passed node
* @see StaticWarningCode#ARGUMENT_TYPE_NOT_ASSIGNABLE
*/
- bool checkForIntNotAssignable(Expression argument) {
+ bool _checkForIntNotAssignable(Expression argument) {
if (argument == null) {
return false;
}
ParameterElement staticParameterElement = argument.staticParameterElement;
- Type2 staticParameterType = staticParameterElement == null ? null : staticParameterElement.type;
+ DartType staticParameterType = staticParameterElement == null ? null : staticParameterElement.type;
ParameterElement propagatedParameterElement = argument.propagatedParameterElement;
- Type2 propagatedParameterType = propagatedParameterElement == null ? null : propagatedParameterElement.type;
- return checkForArgumentTypeNotAssignable(argument, staticParameterType, _intType, propagatedParameterType, _intType, StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE);
+ DartType propagatedParameterType = propagatedParameterElement == null ? null : propagatedParameterElement.type;
+ return _checkForArgumentTypeNotAssignable(argument, staticParameterType, _intType, propagatedParameterType, _intType, StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE);
}
/**
@@ -19745,20 +20164,20 @@
* @return `true` if and only if an error code is generated on the passed node
* @see StaticTypeWarningCode#INVALID_ASSIGNMENT
*/
- bool checkForInvalidAssignment(Expression lhs, Expression rhs) {
+ bool _checkForInvalidAssignment(Expression lhs, Expression rhs) {
if (lhs == null || rhs == null) {
return false;
}
- VariableElement leftElement = getVariableElement(lhs);
- Type2 leftType = (leftElement == null) ? getStaticType(lhs) : leftElement.type;
- Type2 staticRightType = getStaticType(rhs);
+ VariableElement leftElement = _getVariableElement(lhs);
+ DartType leftType = (leftElement == null) ? _getStaticType(lhs) : leftElement.type;
+ DartType staticRightType = _getStaticType(rhs);
bool isStaticAssignable = staticRightType.isAssignableTo(leftType);
if (!isStaticAssignable) {
String leftName = leftType.displayName;
String rightName = staticRightType.displayName;
if (leftName == rightName) {
- leftName = getExtendedDisplayName(leftType);
- rightName = getExtendedDisplayName(staticRightType);
+ leftName = _getExtendedDisplayName(leftType);
+ rightName = _getExtendedDisplayName(staticRightType);
}
_errorReporter.reportErrorForNode(StaticTypeWarningCode.INVALID_ASSIGNMENT, rhs, [rightName, leftName]);
return true;
@@ -19785,18 +20204,18 @@
* @return `true` if and only if an error code is generated on the passed node
* @see StaticTypeWarningCode#INVALID_ASSIGNMENT
*/
- bool checkForInvalidCompoundAssignment(AssignmentExpression node) {
+ bool _checkForInvalidCompoundAssignment(AssignmentExpression node) {
Expression lhs = node.leftHandSide;
if (lhs == null) {
return false;
}
- VariableElement leftElement = getVariableElement(lhs);
- Type2 leftType = (leftElement == null) ? getStaticType(lhs) : leftElement.type;
+ VariableElement leftElement = _getVariableElement(lhs);
+ DartType leftType = (leftElement == null) ? _getStaticType(lhs) : leftElement.type;
MethodElement invokedMethod = node.staticElement;
if (invokedMethod == null) {
return false;
}
- Type2 rightType = invokedMethod.type.returnType;
+ DartType rightType = invokedMethod.type.returnType;
if (leftType == null || rightType == null) {
return false;
}
@@ -19804,8 +20223,8 @@
String leftName = leftType.displayName;
String rightName = rightType.displayName;
if (leftName == rightName) {
- leftName = getExtendedDisplayName(leftType);
- rightName = getExtendedDisplayName(rightType);
+ leftName = _getExtendedDisplayName(leftType);
+ rightName = _getExtendedDisplayName(rightType);
}
_errorReporter.reportErrorForNode(StaticTypeWarningCode.INVALID_ASSIGNMENT, node.rightHandSide, [rightName, leftName]);
return true;
@@ -19818,7 +20237,7 @@
*
* @param node the field initializer being checked
*/
- void checkForInvalidField(ConstructorFieldInitializer node) {
+ void _checkForInvalidField(ConstructorFieldInitializer node) {
SimpleIdentifier fieldName = node.fieldName;
Element staticElement = fieldName.staticElement;
if (staticElement is FieldElement) {
@@ -19841,8 +20260,8 @@
* @return `true` if and only if an error code is generated on the passed node
* @see CompileTimeErrorCode#INVALID_REFERENCE_TO_THIS
*/
- bool checkForInvalidReferenceToThis(ThisExpression node) {
- if (!isThisInValidContext(node)) {
+ bool _checkForInvalidReferenceToThis(ThisExpression node) {
+ if (!_isThisInValidContext(node)) {
_errorReporter.reportErrorForNode(CompileTimeErrorCode.INVALID_REFERENCE_TO_THIS, node, []);
return true;
}
@@ -19859,7 +20278,7 @@
* [CompileTimeErrorCode#INVALID_TYPE_ARGUMENT_IN_CONST_MAP]
* @return `true` if and only if an error code is generated on the passed node
*/
- bool checkForInvalidTypeArgumentInConstTypedLiteral(NodeList<TypeName> arguments, ErrorCode errorCode) {
+ bool _checkForInvalidTypeArgumentInConstTypedLiteral(NodeList<TypeName> arguments, ErrorCode errorCode) {
bool foundError = false;
for (TypeName typeName in arguments) {
if (typeName.type is TypeParameterType) {
@@ -19879,7 +20298,7 @@
* @see CompileTimeErrorCode#LIST_ELEMENT_TYPE_NOT_ASSIGNABLE
* @see StaticWarningCode#LIST_ELEMENT_TYPE_NOT_ASSIGNABLE
*/
- bool checkForListElementTypeNotAssignable(ListLiteral node) {
+ bool _checkForListElementTypeNotAssignable(ListLiteral node) {
// Prepare list element type.
TypeArgumentList typeArgumentList = node.typeArguments;
if (typeArgumentList == null) {
@@ -19889,7 +20308,7 @@
if (typeArguments.length < 1) {
return false;
}
- Type2 listElementType = typeArguments[0].type;
+ DartType listElementType = typeArguments[0].type;
// Prepare problem to report.
ErrorCode errorCode;
if (node.constKeyword != null) {
@@ -19900,7 +20319,7 @@
// Check every list element.
bool hasProblems = false;
for (Expression element in node.elements) {
- hasProblems = javaBooleanOr(hasProblems, checkForArgumentTypeNotAssignableWithExpectedTypes(element, listElementType, null, errorCode));
+ hasProblems = javaBooleanOr(hasProblems, _checkForArgumentTypeNotAssignableWithExpectedTypes(element, listElementType, null, errorCode));
}
return hasProblems;
}
@@ -19916,7 +20335,7 @@
* @see StaticWarningCode#MAP_KEY_TYPE_NOT_ASSIGNABLE
* @see StaticWarningCode#MAP_VALUE_TYPE_NOT_ASSIGNABLE
*/
- bool checkForMapTypeNotAssignable(MapLiteral node) {
+ bool _checkForMapTypeNotAssignable(MapLiteral node) {
// Prepare maps key/value types.
TypeArgumentList typeArgumentList = node.typeArguments;
if (typeArgumentList == null) {
@@ -19926,8 +20345,8 @@
if (typeArguments.length < 2) {
return false;
}
- Type2 keyType = typeArguments[0].type;
- Type2 valueType = typeArguments[1].type;
+ DartType keyType = typeArguments[0].type;
+ DartType valueType = typeArguments[1].type;
// Prepare problem to report.
ErrorCode keyErrorCode;
ErrorCode valueErrorCode;
@@ -19944,8 +20363,8 @@
for (MapLiteralEntry entry in entries) {
Expression key = entry.key;
Expression value = entry.value;
- hasProblems = javaBooleanOr(hasProblems, checkForArgumentTypeNotAssignableWithExpectedTypes(key, keyType, null, keyErrorCode));
- hasProblems = javaBooleanOr(hasProblems, checkForArgumentTypeNotAssignableWithExpectedTypes(value, valueType, null, valueErrorCode));
+ hasProblems = javaBooleanOr(hasProblems, _checkForArgumentTypeNotAssignableWithExpectedTypes(key, keyType, null, keyErrorCode));
+ hasProblems = javaBooleanOr(hasProblems, _checkForArgumentTypeNotAssignableWithExpectedTypes(value, valueType, null, valueErrorCode));
}
return hasProblems;
}
@@ -19957,7 +20376,7 @@
* @return `true` if and only if an error code is generated on the passed node
* @see CompileTimeErrorCode#MEMBER_WITH_CLASS_NAME
*/
- bool checkForMemberWithClassName() {
+ bool _checkForMemberWithClassName() {
if (_enclosingClass == null) {
return false;
}
@@ -19987,7 +20406,7 @@
* @see StaticWarningCode.MISMATCHED_GETTER_AND_SETTER_TYPES
* @see StaticWarningCode.MISMATCHED_GETTER_AND_SETTER_TYPES_FROM_SUPERTYPE
*/
- bool checkForMismatchedAccessorTypes(Declaration accessorDeclaration, String accessorTextName) {
+ bool _checkForMismatchedAccessorTypes(Declaration accessorDeclaration, String accessorTextName) {
ExecutableElement accessorElement = accessorDeclaration.element as ExecutableElement;
if (accessorElement is! PropertyAccessorElement) {
return false;
@@ -20029,15 +20448,15 @@
}
}
// Default of null == no accessor or no type (dynamic)
- Type2 getterType = null;
- Type2 setterType = null;
+ DartType getterType = null;
+ DartType setterType = null;
// Get an existing counterpart accessor if any.
if (propertyAccessorElement.isGetter) {
- getterType = getGetterType(propertyAccessorElement);
- setterType = getSetterType(counterpartAccessor);
+ getterType = _getGetterType(propertyAccessorElement);
+ setterType = _getSetterType(counterpartAccessor);
} else if (propertyAccessorElement.isSetter) {
- setterType = getSetterType(propertyAccessorElement);
- getterType = getGetterType(counterpartAccessor);
+ setterType = _getSetterType(propertyAccessorElement);
+ getterType = _getGetterType(counterpartAccessor);
}
// If either types are not assignable to each other, report an error (if the getter is null,
// it is dynamic which is assignable to everything).
@@ -20067,7 +20486,7 @@
* @return `true` if and only if an error code is generated on the passed node
* @see StaticWarningCode#MIXED_RETURN_TYPES
*/
- bool checkForMixedReturns(BlockFunctionBody node) {
+ bool _checkForMixedReturns(BlockFunctionBody node) {
int withCount = _returnsWith.length;
int withoutCount = _returnsWithout.length;
if (withCount > 0 && withoutCount > 0) {
@@ -20090,7 +20509,7 @@
* @return `true` if and only if an error code is generated on the passed node
* @see CompileTimeErrorCode#MIXIN_DECLARES_CONSTRUCTOR
*/
- bool checkForMixinDeclaresConstructor(TypeName mixinName, ClassElement mixinElement) {
+ bool _checkForMixinDeclaresConstructor(TypeName mixinName, ClassElement mixinElement) {
for (ConstructorElement constructor in mixinElement.constructors) {
if (!constructor.isSynthetic && !constructor.isFactory) {
_errorReporter.reportErrorForNode(CompileTimeErrorCode.MIXIN_DECLARES_CONSTRUCTOR, mixinName, [mixinElement.name]);
@@ -20108,7 +20527,7 @@
* @return `true` if and only if an error code is generated on the passed node
* @see CompileTimeErrorCode#MIXIN_INHERITS_FROM_NOT_OBJECT
*/
- bool checkForMixinInheritsNotFromObject(TypeName mixinName, ClassElement mixinElement) {
+ bool _checkForMixinInheritsNotFromObject(TypeName mixinName, ClassElement mixinElement) {
InterfaceType mixinSupertype = mixinElement.supertype;
if (mixinSupertype != null) {
if (!mixinSupertype.isObject || !mixinElement.isTypedef && mixinElement.mixins.length != 0) {
@@ -20127,7 +20546,7 @@
* @return `true` if and only if an error code is generated on the passed node
* @see CompileTimeErrorCode#MIXIN_REFERENCES_SUPER
*/
- bool checkForMixinReferencesSuper(TypeName mixinName, ClassElement mixinElement) {
+ bool _checkForMixinReferencesSuper(TypeName mixinName, ClassElement mixinElement) {
if (mixinElement.hasReferenceToSuper) {
_errorReporter.reportErrorForNode(CompileTimeErrorCode.MIXIN_REFERENCES_SUPER, mixinName, [mixinElement.name]);
}
@@ -20141,7 +20560,7 @@
* @return `true` if and only if an error code is generated on the passed node
* @see CompileTimeErrorCode#MULTIPLE_SUPER_INITIALIZERS
*/
- bool checkForMultipleSuperInitializers(ConstructorDeclaration node) {
+ bool _checkForMultipleSuperInitializers(ConstructorDeclaration node) {
int numSuperInitializers = 0;
for (ConstructorInitializer initializer in node.initializers) {
if (initializer is SuperConstructorInvocation) {
@@ -20161,7 +20580,7 @@
* @return `true` if and only if an error code is generated on the passed node
* @see ParserErrorCode#NATIVE_FUNCTION_BODY_IN_NON_SDK_CODE
*/
- bool checkForNativeFunctionBodyInNonSDKCode(NativeFunctionBody node) {
+ bool _checkForNativeFunctionBodyInNonSDKCode(NativeFunctionBody node) {
if (!_isInSystemLibrary && !_hasExtUri) {
_errorReporter.reportErrorForNode(ParserErrorCode.NATIVE_FUNCTION_BODY_IN_NON_SDK_CODE, node, []);
return true;
@@ -20178,7 +20597,7 @@
* @return `true` if and only if an error code is generated on the passed node
* @see StaticWarningCode#NEW_WITH_UNDEFINED_CONSTRUCTOR
*/
- bool checkForNewWithUndefinedConstructor(InstanceCreationExpression node) {
+ bool _checkForNewWithUndefinedConstructor(InstanceCreationExpression node) {
// OK if resolved
if (node.staticElement != null) {
return false;
@@ -20212,7 +20631,7 @@
* @return `true` if and only if an error code is generated on the passed node
* @see CompileTimeErrorCode#NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT
*/
- bool checkForNoDefaultSuperConstructorImplicit(ClassDeclaration node) {
+ bool _checkForNoDefaultSuperConstructorImplicit(ClassDeclaration node) {
// do nothing if there is explicit constructor
List<ConstructorElement> constructors = _enclosingClass.constructors;
if (!constructors[0].isSynthetic) {
@@ -20252,7 +20671,7 @@
* @see StaticWarningCode#NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_FOUR
* @see StaticWarningCode#NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_FIVE_PLUS
*/
- bool checkForNonAbstractClassInheritsAbstractMember(ClassDeclaration node) {
+ bool _checkForNonAbstractClassInheritsAbstractMember(ClassDeclaration node) {
if (_enclosingClass.isAbstract) {
return false;
}
@@ -20297,7 +20716,7 @@
InterfaceType enclosingType = _enclosingClass.type;
// Check to see if some element is in local enclosing class that matches the name of the
// required member.
- if (isMemberInClassOrMixin(executableElt, _enclosingClass)) {
+ if (_isMemberInClassOrMixin(executableElt, _enclosingClass)) {
// We do not have to verify that this implementation of the found method matches the
// required function type: the set of StaticWarningCode.INVALID_METHOD_OVERRIDE_* warnings
// break out the different specific situations.
@@ -20382,8 +20801,8 @@
* @return `true` if and only if an error code is generated on the passed node
* @see StaticTypeWarningCode#NON_BOOL_CONDITION
*/
- bool checkForNonBoolCondition(Expression condition) {
- Type2 conditionType = getStaticType(condition);
+ bool _checkForNonBoolCondition(Expression condition) {
+ DartType conditionType = _getStaticType(condition);
if (conditionType != null && !conditionType.isAssignableTo(_boolType)) {
_errorReporter.reportErrorForNode(StaticTypeWarningCode.NON_BOOL_CONDITION, condition, []);
return true;
@@ -20398,9 +20817,9 @@
* @return `true` if and only if an error code is generated on the passed node
* @see StaticTypeWarningCode#NON_BOOL_EXPRESSION
*/
- bool checkForNonBoolExpression(AssertStatement node) {
+ bool _checkForNonBoolExpression(AssertStatement node) {
Expression expression = node.condition;
- Type2 type = getStaticType(expression);
+ DartType type = _getStaticType(expression);
if (type is InterfaceType) {
if (!type.isAssignableTo(_boolType)) {
_errorReporter.reportErrorForNode(StaticTypeWarningCode.NON_BOOL_EXPRESSION, expression, []);
@@ -20423,8 +20842,8 @@
* @return `true` if and only if an error code is generated on the passed node
* @see StaticTypeWarningCode#NON_BOOL_NEGATION_EXPRESSION
*/
- bool checkForNonBoolNegationExpression(Expression expression) {
- Type2 conditionType = getStaticType(expression);
+ bool _checkForNonBoolNegationExpression(Expression expression) {
+ DartType conditionType = _getStaticType(expression);
if (conditionType != null && !conditionType.isAssignableTo(_boolType)) {
_errorReporter.reportErrorForNode(StaticTypeWarningCode.NON_BOOL_NEGATION_EXPRESSION, expression, []);
return true;
@@ -20442,7 +20861,7 @@
* @return `true` if and only if an error code is generated on the passed node
* @see CompileTimeErrorCode#NON_CONST_MAP_AS_EXPRESSION_STATEMENT
*/
- bool checkForNonConstMapAsExpressionStatement(MapLiteral node) {
+ bool _checkForNonConstMapAsExpressionStatement(MapLiteral node) {
// "const"
if (node.constKeyword != null) {
return false;
@@ -20473,7 +20892,7 @@
* @return `true` if and only if an error code is generated on the passed node
* @see StaticWarningCode#NON_VOID_RETURN_FOR_OPERATOR
*/
- bool checkForNonVoidReturnTypeForOperator(MethodDeclaration node) {
+ bool _checkForNonVoidReturnTypeForOperator(MethodDeclaration node) {
// check that []= operator
SimpleIdentifier name = node.name;
if (name.name != "[]=") {
@@ -20482,7 +20901,7 @@
// check return type
TypeName typeName = node.returnType;
if (typeName != null) {
- Type2 type = typeName.type;
+ DartType type = typeName.type;
if (type != null && !type.isVoid) {
_errorReporter.reportErrorForNode(StaticWarningCode.NON_VOID_RETURN_FOR_OPERATOR, typeName, []);
}
@@ -20498,9 +20917,9 @@
* @return `true` if and only if an error code is generated on the passed node
* @see StaticWarningCode#NON_VOID_RETURN_FOR_SETTER
*/
- bool checkForNonVoidReturnTypeForSetter(TypeName typeName) {
+ bool _checkForNonVoidReturnTypeForSetter(TypeName typeName) {
if (typeName != null) {
- Type2 type = typeName.type;
+ DartType type = typeName.type;
if (type != null && !type.isVoid) {
_errorReporter.reportErrorForNode(StaticWarningCode.NON_VOID_RETURN_FOR_SETTER, typeName, []);
}
@@ -20518,7 +20937,7 @@
* @return `true` if and only if an error code is generated on the passed node
* @see CompileTimeErrorCode#OPTIONAL_PARAMETER_IN_OPERATOR
*/
- bool checkForOptionalParameterInOperator(MethodDeclaration node) {
+ bool _checkForOptionalParameterInOperator(MethodDeclaration node) {
FormalParameterList parameterList = node.parameters;
if (parameterList == null) {
return false;
@@ -20541,7 +20960,7 @@
* @return `true` if and only if an error code is generated on the passed node
* @see CompileTimeErrorCode#PRIVATE_OPTIONAL_PARAMETER
*/
- bool checkForPrivateOptionalParameter(FormalParameter node) {
+ bool _checkForPrivateOptionalParameter(FormalParameter node) {
// should be named parameter
if (node.kind != ParameterKind.NAMED) {
return false;
@@ -20564,7 +20983,7 @@
* @return `true` if and only if an error code is generated on the passed node
* @see CompileTimeErrorCode#RECURSIVE_CONSTRUCTOR_REDIRECT
*/
- bool checkForRecursiveConstructorRedirect(ConstructorDeclaration node) {
+ bool _checkForRecursiveConstructorRedirect(ConstructorDeclaration node) {
// we check generative constructor here
if (node.factoryKeyword != null) {
return false;
@@ -20574,7 +20993,7 @@
if (initializer is RedirectingConstructorInvocation) {
// OK if no cycle
ConstructorElement element = node.element;
- if (!hasRedirectingFactoryConstructorCycle(element)) {
+ if (!_hasRedirectingFactoryConstructorCycle(element)) {
return false;
}
// report error
@@ -20594,7 +21013,7 @@
* @return `true` if and only if an error code is generated on the passed node
* @see CompileTimeErrorCode#RECURSIVE_FACTORY_REDIRECT
*/
- bool checkForRecursiveFactoryRedirect(ConstructorDeclaration node) {
+ bool _checkForRecursiveFactoryRedirect(ConstructorDeclaration node) {
// prepare redirected constructor
ConstructorName redirectedConstructorNode = node.redirectedConstructor;
if (redirectedConstructorNode == null) {
@@ -20602,7 +21021,7 @@
}
// OK if no cycle
ConstructorElement element = node.element;
- if (!hasRedirectingFactoryConstructorCycle(element)) {
+ if (!_hasRedirectingFactoryConstructorCycle(element)) {
return false;
}
// report error
@@ -20619,11 +21038,11 @@
* @see CompileTimeErrorCode#RECURSIVE_INTERFACE_INHERITANCE_BASE_CASE_EXTENDS
* @see CompileTimeErrorCode#RECURSIVE_INTERFACE_INHERITANCE_BASE_CASE_IMPLEMENTS
*/
- bool checkForRecursiveInterfaceInheritance(ClassElement classElt) {
+ bool _checkForRecursiveInterfaceInheritance(ClassElement classElt) {
if (classElt == null) {
return false;
}
- return safeCheckForRecursiveInterfaceInheritance(classElt, new List<ClassElement>());
+ return _safeCheckForRecursiveInterfaceInheritance(classElt, new List<ClassElement>());
}
/**
@@ -20637,7 +21056,7 @@
* @see CompileTimeErrorCode#MULTIPLE_REDIRECTING_CONSTRUCTOR_INVOCATIONS
* @see CompileTimeErrorCode#SUPER_IN_REDIRECTING_CONSTRUCTOR
*/
- bool checkForRedirectingConstructorErrorCodes(ConstructorDeclaration node) {
+ bool _checkForRedirectingConstructorErrorCodes(ConstructorDeclaration node) {
bool errorReported = false;
//
// Check for default values in the parameters
@@ -20687,7 +21106,7 @@
* @return `true` if and only if an error code is generated on the passed node
* @see CompileTimeErrorCode#REDIRECT_TO_NON_CONST_CONSTRUCTOR
*/
- bool checkForRedirectToNonConstConstructor(ConstructorDeclaration node) {
+ bool _checkForRedirectToNonConstConstructor(ConstructorDeclaration node) {
// prepare redirected constructor
ConstructorName redirectedConstructorNode = node.redirectedConstructor;
if (redirectedConstructorNode == null) {
@@ -20723,7 +21142,7 @@
* @return `true` if and only if an error code is generated on the passed node
* @see CompileTimeErrorCode#RETHROW_OUTSIDE_CATCH
*/
- bool checkForRethrowOutsideCatch(RethrowExpression node) {
+ bool _checkForRethrowOutsideCatch(RethrowExpression node) {
if (!_isInCatchClause) {
_errorReporter.reportErrorForNode(CompileTimeErrorCode.RETHROW_OUTSIDE_CATCH, node, []);
return true;
@@ -20739,7 +21158,7 @@
* @return `true` if and only if an error code is generated on the passed node
* @see CompileTimeErrorCode#RETURN_IN_GENERATIVE_CONSTRUCTOR
*/
- bool checkForReturnInGenerativeConstructor(ConstructorDeclaration node) {
+ bool _checkForReturnInGenerativeConstructor(ConstructorDeclaration node) {
// ignore factory
if (node.factoryKeyword != null) {
return false;
@@ -20766,8 +21185,8 @@
* @return `true` if and only if an error code is generated on the passed node
* @see StaticTypeWarningCode#RETURN_OF_INVALID_TYPE
*/
- bool checkForReturnOfInvalidType(Expression returnExpression, Type2 expectedReturnType) {
- Type2 staticReturnType = getStaticType(returnExpression);
+ bool _checkForReturnOfInvalidType(Expression returnExpression, DartType expectedReturnType) {
+ DartType staticReturnType = _getStaticType(returnExpression);
if (expectedReturnType.isVoid) {
if (staticReturnType.isVoid || staticReturnType.isDynamic || staticReturnType.isBottom) {
return false;
@@ -20800,7 +21219,7 @@
* @return `true` if and only if an error code is generated on the passed node
* @see StaticWarningCode#STATIC_ACCESS_TO_INSTANCE_MEMBER
*/
- bool checkForStaticAccessToInstanceMember(ClassElement typeReference, SimpleIdentifier name) {
+ bool _checkForStaticAccessToInstanceMember(ClassElement typeReference, SimpleIdentifier name) {
// OK, target is not a type
if (typeReference == null) {
return false;
@@ -20828,10 +21247,10 @@
* @return `true` if and only if an error code is generated on the passed node
* @see StaticWarningCode#SWITCH_EXPRESSION_NOT_ASSIGNABLE
*/
- bool checkForSwitchExpressionNotAssignable(SwitchStatement node) {
+ bool _checkForSwitchExpressionNotAssignable(SwitchStatement node) {
// prepare 'switch' expression type
Expression expression = node.expression;
- Type2 expressionType = getStaticType(expression);
+ DartType expressionType = _getStaticType(expression);
if (expressionType == null) {
return false;
}
@@ -20844,7 +21263,7 @@
SwitchCase switchCase = switchMember as SwitchCase;
// prepare 'case' type
Expression caseExpression = switchCase.expression;
- Type2 caseType = getStaticType(caseExpression);
+ DartType caseType = _getStaticType(caseExpression);
// check types
if (expressionType.isAssignableTo(caseType)) {
return false;
@@ -20863,9 +21282,9 @@
* @return `true` if and only if an error code is generated on the passed node
* @see CompileTimeErrorCode#TYPE_ALIAS_CANNOT_REFERENCE_ITSELF
*/
- bool checkForTypeAliasCannotReferenceItself_function(FunctionTypeAlias node) {
+ bool _checkForTypeAliasCannotReferenceItself_function(FunctionTypeAlias node) {
FunctionTypeAliasElement element = node.element;
- if (!hasTypedefSelfReference(element)) {
+ if (!_hasTypedefSelfReference(element)) {
return false;
}
_errorReporter.reportErrorForNode(CompileTimeErrorCode.TYPE_ALIAS_CANNOT_REFERENCE_ITSELF, node, []);
@@ -20878,9 +21297,9 @@
* @return `true` if and only if an error code is generated on the passed node
* @see CompileTimeErrorCode#TYPE_ALIAS_CANNOT_REFERENCE_ITSELF
*/
- bool checkForTypeAliasCannotReferenceItself_mixin(ClassTypeAlias node) {
+ bool _checkForTypeAliasCannotReferenceItself_mixin(ClassTypeAlias node) {
ClassElement element = node.element;
- if (!hasTypedefSelfReference(element)) {
+ if (!_hasTypedefSelfReference(element)) {
return false;
}
_errorReporter.reportErrorForNode(CompileTimeErrorCode.TYPE_ALIAS_CANNOT_REFERENCE_ITSELF, node, []);
@@ -20894,12 +21313,12 @@
* @return `true` if and only if an error code is generated on the passed node
* @see StaticTypeWarningCode#TYPE_ARGUMENT_NOT_MATCHING_BOUNDS
*/
- bool checkForTypeArgumentNotMatchingBounds(TypeName node) {
+ bool _checkForTypeArgumentNotMatchingBounds(TypeName node) {
if (node.typeArguments == null) {
return false;
}
// prepare Type
- Type2 type = node.type;
+ DartType type = node.type;
if (type == null) {
return false;
}
@@ -20910,17 +21329,17 @@
}
ClassElement classElement = element as ClassElement;
// prepare type parameters
- List<Type2> typeParameters = classElement.type.typeArguments;
+ List<DartType> typeParameters = classElement.type.typeArguments;
List<TypeParameterElement> boundingElts = classElement.typeParameters;
// iterate over each bounded type parameter and corresponding argument
NodeList<TypeName> typeNameArgList = node.typeArguments.arguments;
- List<Type2> typeArguments = (type as InterfaceType).typeArguments;
+ List<DartType> typeArguments = (type as InterfaceType).typeArguments;
int loopThroughIndex = Math.min(typeNameArgList.length, boundingElts.length);
bool foundError = false;
for (int i = 0; i < loopThroughIndex; i++) {
TypeName argTypeName = typeNameArgList[i];
- Type2 argType = argTypeName.type;
- Type2 boundType = boundingElts[i].bound;
+ DartType argType = argTypeName.type;
+ DartType boundType = boundingElts[i].bound;
if (argType != null && boundType != null) {
boundType = boundType.substitute2(typeArguments, typeParameters);
if (!argType.isSubtypeOf(boundType)) {
@@ -20946,9 +21365,9 @@
* @return `true` if and only if an error code is generated on the passed node
* @see StaticWarningCode#TYPE_PARAMETER_REFERENCED_BY_STATIC
*/
- bool checkForTypeParameterReferencedByStatic(TypeName node) {
+ bool _checkForTypeParameterReferencedByStatic(TypeName node) {
if (_isInStaticMethod || _isInStaticVariableDeclaration) {
- Type2 type = node.type;
+ DartType type = node.type;
if (type is TypeParameterType) {
_errorReporter.reportErrorForNode(StaticWarningCode.TYPE_PARAMETER_REFERENCED_BY_STATIC, node, []);
return true;
@@ -20964,10 +21383,10 @@
* @return `true` if and only if an error code is generated on the passed node
* @see StaticTypeWarningCode#TYPE_PARAMETER_SUPERTYPE_OF_ITS_BOUND
*/
- bool checkForTypeParameterSupertypeOfItsBound(TypeParameter node) {
+ bool _checkForTypeParameterSupertypeOfItsBound(TypeParameter node) {
TypeParameterElement element = node.element;
// prepare bound
- Type2 bound = element.bound;
+ DartType bound = element.bound;
if (bound == null) {
return false;
}
@@ -20991,7 +21410,7 @@
* @see CompileTimeErrorCode#NON_GENERATIVE_CONSTRUCTOR
* @see StaticWarningCode#NO_DEFAULT_SUPER_CONSTRUCTOR_EXPLICIT
*/
- bool checkForUndefinedConstructorInInitializerImplicit(ConstructorDeclaration node) {
+ bool _checkForUndefinedConstructorInInitializerImplicit(ConstructorDeclaration node) {
//
// Ignore if the constructor is not generative.
//
@@ -21049,7 +21468,7 @@
* @return `true` if and only if an error code is generated on the passed node
* @see StaticTypeWarningCode#UNQUALIFIED_REFERENCE_TO_NON_LOCAL_STATIC_MEMBER
*/
- bool checkForUnqualifiedReferenceToNonLocalStaticMember(SimpleIdentifier name) {
+ bool _checkForUnqualifiedReferenceToNonLocalStaticMember(SimpleIdentifier name) {
Element element = name.staticElement;
if (element == null || element is TypeParameterElement) {
return false;
@@ -21068,7 +21487,7 @@
return true;
}
- void checkForValidField(FieldFormalParameter node) {
+ void _checkForValidField(FieldFormalParameter node) {
ParameterElement element = node.element;
if (element is FieldFormalParameterElement) {
FieldElement fieldElement = element.field;
@@ -21078,8 +21497,8 @@
ParameterElement parameterElement = node.element;
if (parameterElement is FieldFormalParameterElementImpl) {
FieldFormalParameterElementImpl fieldFormal = parameterElement;
- Type2 declaredType = fieldFormal.type;
- Type2 fieldType = fieldElement.type;
+ DartType declaredType = fieldFormal.type;
+ DartType fieldType = fieldElement.type;
if (fieldElement.isSynthetic) {
_errorReporter.reportErrorForNode(CompileTimeErrorCode.INITIALIZING_FORMAL_FOR_NON_EXISTANT_FIELD, node, [node.identifier.name]);
} else if (fieldElement.isStatic) {
@@ -21108,7 +21527,7 @@
* @return `true` if and only if an error code is generated on the passed node
* @see CompileTimeErrorCode#WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
*/
- bool checkForWrongNumberOfParametersForOperator(MethodDeclaration node) {
+ bool _checkForWrongNumberOfParametersForOperator(MethodDeclaration node) {
// prepare number of parameters
FormalParameterList parameterList = node.parameters;
if (parameterList == null) {
@@ -21153,7 +21572,7 @@
* @return `true` if and only if an error code is generated on the passed node
* @see CompileTimeErrorCode#WRONG_NUMBER_OF_PARAMETERS_FOR_SETTER
*/
- bool checkForWrongNumberOfParametersForSetter(SimpleIdentifier setterName, FormalParameterList parameterList) {
+ bool _checkForWrongNumberOfParametersForSetter(SimpleIdentifier setterName, FormalParameterList parameterList) {
if (setterName == null) {
return false;
}
@@ -21175,7 +21594,7 @@
* @return `true` if and only if an error code is generated on the passed node
* @see StaticWarningCode#FUNCTION_WITHOUT_CALL
*/
- bool checkImplementsFunctionWithoutCall(ClassDeclaration node) {
+ bool _checkImplementsFunctionWithoutCall(ClassDeclaration node) {
if (node.abstractKeyword != null) {
return false;
}
@@ -21201,7 +21620,7 @@
* @return `true` if and only if an error code is generated on the passed node
* @see CompileTimeErrorCode#IMPLEMENTS_SUPER_CLASS
*/
- bool checkImplementsSuperClass(ClassDeclaration node) {
+ bool _checkImplementsSuperClass(ClassDeclaration node) {
// prepare super type
InterfaceType superType = _enclosingClass.supertype;
if (superType == null) {
@@ -21231,7 +21650,7 @@
* @param type the type for which an extended display name is to be returned
* @return a display name that can help distiguish between two types with the same name
*/
- String getExtendedDisplayName(Type2 type) {
+ String _getExtendedDisplayName(DartType type) {
Element element = type.element;
if (element != null) {
Source source = element.source;
@@ -21248,7 +21667,7 @@
* @param propertyAccessorElement
* @return The type of the given getter.
*/
- Type2 getGetterType(PropertyAccessorElement propertyAccessorElement) {
+ DartType _getGetterType(PropertyAccessorElement propertyAccessorElement) {
FunctionType functionType = propertyAccessorElement.type;
if (functionType != null) {
return functionType.returnType;
@@ -21263,7 +21682,7 @@
* @param propertyAccessorElement
* @return The type of the given setter.
*/
- Type2 getSetterType(PropertyAccessorElement propertyAccessorElement) {
+ DartType _getSetterType(PropertyAccessorElement propertyAccessorElement) {
// Get the parameters for MethodDeclaration or FunctionDeclaration
List<ParameterElement> setterParameters = propertyAccessorElement.parameters;
// If there are no setter parameters, return no type.
@@ -21279,8 +21698,8 @@
* @param expression the expression whose type is to be returned
* @return the static type of the given expression
*/
- Type2 getStaticType(Expression expression) {
- Type2 type = expression.staticType;
+ DartType _getStaticType(Expression expression) {
+ DartType type = expression.staticType;
if (type == null) {
// TODO(brianwilkerson) This should never happen.
return _dynamicType;
@@ -21295,7 +21714,7 @@
* @param expression the expression whose element is to be returned
* @return the variable element represented by the expression
*/
- VariableElement getVariableElement(Expression expression) {
+ VariableElement _getVariableElement(Expression expression) {
if (expression is Identifier) {
Element element = expression.staticElement;
if (element is VariableElement) {
@@ -21308,7 +21727,7 @@
/**
* @return `true` if the given constructor redirects to itself, directly or indirectly
*/
- bool hasRedirectingFactoryConstructorCycle(ConstructorElement element) {
+ bool _hasRedirectingFactoryConstructorCycle(ConstructorElement element) {
Set<ConstructorElement> constructors = new Set<ConstructorElement>();
ConstructorElement current = element;
while (current != null) {
@@ -21328,7 +21747,7 @@
* @return <code>true</code> if given [Element] has direct or indirect reference to itself
* from anywhere except [ClassElement] or type parameter bounds.
*/
- bool hasTypedefSelfReference(Element target) {
+ bool _hasTypedefSelfReference(Element target) {
Set<Element> checked = new Set<Element>();
List<Element> toCheck = new List<Element>();
toCheck.add(target);
@@ -21365,7 +21784,7 @@
* @return `true` if given [Type] implements operator <i>==</i>, and it is not
* <i>int</i> or <i>String</i>.
*/
- bool implementsEqualsWhenNotAllowed(Type2 type) {
+ bool _implementsEqualsWhenNotAllowed(DartType type) {
// ignore int or String
if (type == null || type == _intType || type == _typeProvider.stringType) {
return false;
@@ -21385,7 +21804,7 @@
return true;
}
- bool isFunctionType(Type2 type) {
+ bool _isFunctionType(DartType type) {
if (type.isDynamic || type.isBottom) {
return true;
} else if (type is FunctionType || type.isDartCoreFunction) {
@@ -21410,7 +21829,7 @@
* @param classElt the class method to search through the members of
* @return `true` iff the passed member is found in the passed class element
*/
- bool isMemberInClassOrMixin(ExecutableElement executableElt, ClassElement classElt) {
+ bool _isMemberInClassOrMixin(ExecutableElement executableElt, ClassElement classElt) {
ExecutableElement foundElt;
String executableName = executableElt.name;
if (executableElt is MethodElement) {
@@ -21451,7 +21870,7 @@
* @param node the 'this' expression to analyze
* @return `true` if the given 'this' expression is in the valid context
*/
- bool isThisInValidContext(ThisExpression node) {
+ bool _isThisInValidContext(ThisExpression node) {
for (AstNode n = node; n != null; n = n.parent) {
if (n is CompilationUnit) {
return false;
@@ -21479,7 +21898,7 @@
* @return `true` if the given identifier is in a location where it is allowed to resolve to
* a static member of a supertype
*/
- bool isUnqualifiedReferenceToNonLocalStaticMemberAllowed(SimpleIdentifier node) {
+ bool _isUnqualifiedReferenceToNonLocalStaticMemberAllowed(SimpleIdentifier node) {
if (node.inDeclarationContext()) {
return true;
}
@@ -21502,7 +21921,7 @@
return false;
}
- bool isUserDefinedObject(EvaluationResultImpl result) => result == null || (result is ValidResult && result.isUserDefinedObject);
+ bool _isUserDefinedObject(EvaluationResultImpl result) => result == null || (result is ValidResult && result.isUserDefinedObject);
/**
* This checks the class declaration is not a superinterface to itself.
@@ -21514,7 +21933,7 @@
* @see CompileTimeErrorCode#RECURSIVE_INTERFACE_INHERITANCE_BASE_CASE_EXTENDS
* @see CompileTimeErrorCode#RECURSIVE_INTERFACE_INHERITANCE_BASE_CASE_IMPLEMENTS
*/
- bool safeCheckForRecursiveInterfaceInheritance(ClassElement classElt, List<ClassElement> path) {
+ bool _safeCheckForRecursiveInterfaceInheritance(ClassElement classElt, List<ClassElement> path) {
// Detect error condition.
int size = path.length;
// If this is not the base case (size > 0), and the enclosing class is the passed class
@@ -21546,12 +21965,12 @@
path.add(classElt);
// n-case
InterfaceType supertype = classElt.supertype;
- if (supertype != null && safeCheckForRecursiveInterfaceInheritance(supertype.element, path)) {
+ if (supertype != null && _safeCheckForRecursiveInterfaceInheritance(supertype.element, path)) {
return true;
}
List<InterfaceType> interfaceTypes = classElt.interfaces;
for (InterfaceType interfaceType in interfaceTypes) {
- if (safeCheckForRecursiveInterfaceInheritance(interfaceType.element, path)) {
+ if (_safeCheckForRecursiveInterfaceInheritance(interfaceType.element, path)) {
return true;
}
}
@@ -21592,10 +22011,11 @@
bool _inClass = false;
+ @override
Object visitClassElement(ClassElement element) {
- addTypeToCheck(element.supertype);
+ _addTypeToCheck(element.supertype);
for (InterfaceType mixin in element.mixins) {
- addTypeToCheck(mixin);
+ _addTypeToCheck(mixin);
}
_inClass = !element.isTypedef;
try {
@@ -21605,35 +22025,40 @@
}
}
+ @override
Object visitExecutableElement(ExecutableElement element) {
if (element.isSynthetic) {
return null;
}
- addTypeToCheck(element.returnType);
+ _addTypeToCheck(element.returnType);
return super.visitExecutableElement(element);
}
+ @override
Object visitFunctionTypeAliasElement(FunctionTypeAliasElement element) {
- addTypeToCheck(element.returnType);
+ _addTypeToCheck(element.returnType);
return super.visitFunctionTypeAliasElement(element);
}
+ @override
Object visitParameterElement(ParameterElement element) {
- addTypeToCheck(element.type);
+ _addTypeToCheck(element.type);
return super.visitParameterElement(element);
}
+ @override
Object visitTypeParameterElement(TypeParameterElement element) {
- addTypeToCheck(element.bound);
+ _addTypeToCheck(element.bound);
return super.visitTypeParameterElement(element);
}
+ @override
Object visitVariableElement(VariableElement element) {
- addTypeToCheck(element.type);
+ _addTypeToCheck(element.type);
return super.visitVariableElement(element);
}
- void addTypeToCheck(Type2 type) {
+ void _addTypeToCheck(DartType type) {
if (type == null) {
return;
}
@@ -21647,8 +22072,8 @@
// type arguments
if (type is InterfaceType) {
InterfaceType interfaceType = type;
- for (Type2 typeArgument in interfaceType.typeArguments) {
- addTypeToCheck(typeArgument);
+ for (DartType typeArgument in interfaceType.typeArguments) {
+ _addTypeToCheck(typeArgument);
}
}
}
@@ -21707,7 +22132,9 @@
this.correction9 = correction;
}
+ @override
String get correction => correction9;
+ @override
ErrorSeverity get errorSeverity => type.severity;
}
\ No newline at end of file
diff --git a/pkg/analyzer/lib/src/generated/scanner.dart b/pkg/analyzer/lib/src/generated/scanner.dart
index 69c91d7..efb01ff 100644
--- a/pkg/analyzer/lib/src/generated/scanner.dart
+++ b/pkg/analyzer/lib/src/generated/scanner.dart
@@ -28,7 +28,7 @@
/**
* The initial state in the state machine.
*/
- static KeywordState KEYWORD_STATE = createKeywordStateTable();
+ static KeywordState KEYWORD_STATE = _createKeywordStateTable();
/**
* Create the next state in the state machine where we have already recognized the subset of
@@ -43,7 +43,7 @@
* @param length the number of strings in the array that pass through the state being built
* @return the state that was created
*/
- static KeywordState computeKeywordStateTable(int start, List<String> strings, int offset, int length) {
+ static KeywordState _computeKeywordStateTable(int start, List<String> strings, int offset, int length) {
List<KeywordState> result = new List<KeywordState>(26);
assert(length != 0);
int chunk = 0x0;
@@ -57,7 +57,7 @@
int c = strings[i].codeUnitAt(start);
if (chunk != c) {
if (chunkStart != -1) {
- result[chunk - 0x61] = computeKeywordStateTable(start + 1, strings, chunkStart, i - chunkStart);
+ result[chunk - 0x61] = _computeKeywordStateTable(start + 1, strings, chunkStart, i - chunkStart);
}
chunkStart = i;
chunk = c;
@@ -66,7 +66,7 @@
}
if (chunkStart != -1) {
assert(result[chunk - 0x61] == null);
- result[chunk - 0x61] = computeKeywordStateTable(start + 1, strings, chunkStart, offset + length - chunkStart);
+ result[chunk - 0x61] = _computeKeywordStateTable(start + 1, strings, chunkStart, offset + length - chunkStart);
} else {
assert(length == 1);
return new KeywordState(_EMPTY_TABLE, strings[offset]);
@@ -83,14 +83,14 @@
*
* @return the state that was created
*/
- static KeywordState createKeywordStateTable() {
+ static KeywordState _createKeywordStateTable() {
List<Keyword> values = Keyword.values;
List<String> strings = new List<String>(values.length);
for (int i = 0; i < values.length; i++) {
strings[i] = values[i].syntax;
}
strings.sort();
- return computeKeywordStateTable(0, strings, 0, strings.length);
+ return _computeKeywordStateTable(0, strings, 0, strings.length);
}
/**
@@ -103,7 +103,7 @@
* The keyword that is recognized by this state, or `null` if this state is not a terminal
* state.
*/
- Keyword _keyword2;
+ Keyword _keyword;
/**
* Initialize a newly created state to have the given transitions and to recognize the keyword
@@ -114,7 +114,7 @@
*/
KeywordState(List<KeywordState> table, String syntax) {
this._table = table;
- this._keyword2 = (syntax == null) ? null : Keyword.keywords[syntax];
+ this._keyword = (syntax == null) ? null : Keyword.keywords[syntax];
}
/**
@@ -123,7 +123,7 @@
*
* @return the keyword that was matched by reaching this state
*/
- Keyword keyword() => _keyword2;
+ Keyword keyword() => _keyword;
/**
* Return the state that follows this state on a transition of the given character, or
@@ -188,10 +188,13 @@
this.correction10 = correction;
}
+ @override
String get correction => correction10;
+ @override
ErrorSeverity get errorSeverity => ErrorSeverity.ERROR;
+ @override
ErrorType get type => ErrorType.SYNTACTIC_ERROR;
}
@@ -217,10 +220,13 @@
this._offsetDelta = offsetDelta;
}
+ @override
int get offset => _offsetDelta + super.offset;
+ @override
String getString(int start, int endDelta) => super.getString(start - _offsetDelta, endDelta);
+ @override
void set offset(int offset) {
super.offset = offset - _offsetDelta;
}
@@ -248,10 +254,13 @@
this._precedingComment = precedingComment;
}
+ @override
Token copy() => new StringTokenWithComment(type, lexeme, offset, copyComments(_precedingComment));
+ @override
Token get precedingComments => _precedingComment;
+ @override
void applyDelta(int delta) {
super.applyDelta(delta);
Token token = _precedingComment;
@@ -421,19 +430,19 @@
* A flag indicating whether the keyword is a pseudo-keyword. Pseudo keywords can be used as
* identifiers.
*/
- bool _isPseudoKeyword2 = false;
+ bool _isPseudoKeyword = false;
/**
* A table mapping the lexemes of keywords to the corresponding keyword.
*/
- static Map<String, Keyword> keywords = createKeywordMap();
+ static Map<String, Keyword> keywords = _createKeywordMap();
/**
* Create a table mapping the lexemes of keywords to the corresponding keyword.
*
* @return the table that was created
*/
- static Map<String, Keyword> createKeywordMap() {
+ static Map<String, Keyword> _createKeywordMap() {
LinkedHashMap<String, Keyword> result = new LinkedHashMap<String, Keyword>();
for (Keyword keyword in values) {
result[keyword._syntax] = keyword;
@@ -458,7 +467,7 @@
*/
Keyword.con2(String name, int ordinal, String syntax, bool isPseudoKeyword) : super(name, ordinal) {
this._syntax = syntax;
- this._isPseudoKeyword2 = isPseudoKeyword;
+ this._isPseudoKeyword = isPseudoKeyword;
}
/**
@@ -474,7 +483,7 @@
*
* @return `true` if this keyword is a pseudo-keyword
*/
- bool get isPseudoKeyword => _isPseudoKeyword2;
+ bool get isPseudoKeyword => _isPseudoKeyword;
}
/**
@@ -508,6 +517,7 @@
this._charOffset = -1;
}
+ @override
int advance() {
if (_charOffset + 1 >= _stringLength) {
return -1;
@@ -515,10 +525,13 @@
return _sequence.codeUnitAt(++_charOffset);
}
+ @override
int get offset => _charOffset;
+ @override
String getString(int start, int endDelta) => _sequence.substring(start, _charOffset + 1 + endDelta).toString();
+ @override
int peek() {
if (_charOffset + 1 >= _sequence.length) {
return -1;
@@ -526,6 +539,7 @@
return _sequence.codeUnitAt(_charOffset + 1);
}
+ @override
void set offset(int offset) {
_charOffset = offset;
}
@@ -544,6 +558,7 @@
*/
SyntheticStringToken(TokenType type, String value, int offset) : super(type, value, offset);
+ @override
bool get isSynthetic => true;
}
@@ -579,7 +594,7 @@
/**
* A flag indicating whether there were any tokens changed as a result of the modification.
*/
- bool _hasNonWhitespaceChange2 = false;
+ bool _hasNonWhitespaceChange = false;
/**
* Initialize a newly created scanner.
@@ -623,7 +638,7 @@
*
* @return `true` if there were any tokens changed as a result of the modification
*/
- bool get hasNonWhitespaceChange => _hasNonWhitespaceChange2;
+ bool get hasNonWhitespaceChange => _hasNonWhitespaceChange;
/**
* Given the stream of tokens scanned from the original source, the modified source (the result of
@@ -644,7 +659,7 @@
// existing token might have been modified, so we need to rescan it.)
//
while (originalStream.type != TokenType.EOF && originalStream.end < index) {
- originalStream = copyAndAdvance(originalStream, 0);
+ originalStream = _copyAndAdvance(originalStream, 0);
}
Token oldFirst = originalStream;
Token oldLeftToken = originalStream.previous;
@@ -697,16 +712,16 @@
// Copy the remaining tokens in the original stream, but apply the delta to the token's offset.
//
if (identical(originalStream.type, TokenType.EOF)) {
- copyAndAdvance(originalStream, delta);
+ _copyAndAdvance(originalStream, delta);
_rightToken = tail;
_rightToken.setNextWithoutSettingPrevious(_rightToken);
} else {
- originalStream = copyAndAdvance(originalStream, delta);
+ originalStream = _copyAndAdvance(originalStream, delta);
_rightToken = tail;
while (originalStream.type != TokenType.EOF) {
- originalStream = copyAndAdvance(originalStream, delta);
+ originalStream = _copyAndAdvance(originalStream, delta);
}
- Token eof = copyAndAdvance(originalStream, delta);
+ Token eof = _copyAndAdvance(originalStream, delta);
eof.setNextWithoutSettingPrevious(eof);
}
//
@@ -716,7 +731,7 @@
// the first new token.
//
Token newFirst = _leftToken.next;
- while (newFirst != _rightToken && oldFirst != oldRightToken && newFirst.type != TokenType.EOF && equalTokens(oldFirst, newFirst)) {
+ while (newFirst != _rightToken && oldFirst != oldRightToken && newFirst.type != TokenType.EOF && _equalTokens(oldFirst, newFirst)) {
_tokenMap.put(oldFirst, newFirst);
oldLeftToken = oldFirst;
oldFirst = oldFirst.next;
@@ -724,14 +739,14 @@
newFirst = newFirst.next;
}
Token newLast = _rightToken.previous;
- while (newLast != _leftToken && oldLast != oldLeftToken && newLast.type != TokenType.EOF && equalTokens(oldLast, newLast)) {
+ while (newLast != _leftToken && oldLast != oldLeftToken && newLast.type != TokenType.EOF && _equalTokens(oldLast, newLast)) {
_tokenMap.put(oldLast, newLast);
oldRightToken = oldLast;
oldLast = oldLast.previous;
_rightToken = newLast;
newLast = newLast.previous;
}
- _hasNonWhitespaceChange2 = _leftToken.next != _rightToken || oldLeftToken.next != oldRightToken;
+ _hasNonWhitespaceChange = _leftToken.next != _rightToken || oldLeftToken.next != oldRightToken;
//
// TODO(brianwilkerson) Begin tokens are not getting associated with the corresponding end
// tokens (because the end tokens have not been copied when we're copying the begin tokens).
@@ -741,7 +756,7 @@
return firstToken;
}
- Token copyAndAdvance(Token originalToken, int delta) {
+ Token _copyAndAdvance(Token originalToken, int delta) {
Token copiedToken = originalToken.copy();
_tokenMap.put(originalToken, copiedToken);
copiedToken.applyDelta(delta);
@@ -764,7 +779,7 @@
* @param newToken the token from the new stream that is being compared
* @return `true` if the two tokens are equal to each other
*/
- bool equalTokens(Token oldToken, Token newToken) => identical(oldToken.type, newToken.type) && oldToken.length == newToken.length && oldToken.lexeme == newToken.lexeme;
+ bool _equalTokens(Token oldToken, Token newToken) => identical(oldToken.type, newToken.type) && oldToken.length == newToken.length && oldToken.lexeme == newToken.lexeme;
}
/**
@@ -841,7 +856,7 @@
/**
* A flag indicating whether any unmatched groups were found during the parse.
*/
- bool _hasUnmatchedGroups2 = false;
+ bool _hasUnmatchedGroups = false;
/**
* Initialize a newly created scanner.
@@ -872,7 +887,7 @@
*
* @return `true` if any unmatched groups were found during the parse
*/
- bool get hasUnmatchedGroups => _hasUnmatchedGroups2;
+ bool get hasUnmatchedGroups => _hasUnmatchedGroups;
/**
* Set whether documentation tokens should be scanned.
@@ -919,7 +934,7 @@
tokenCounter++;
next = bigSwitch(next);
}
- appendEofToken();
+ _appendEofToken();
instrumentation.metric2("tokensCount", tokenCounter);
return firstToken;
} finally {
@@ -939,7 +954,7 @@
}
int bigSwitch(int next) {
- beginToken();
+ _beginToken();
if (next == 0xD) {
next = _reader.advance();
if (next == 0xA) {
@@ -958,124 +973,124 @@
int peek = _reader.peek();
if (peek == 0x22 || peek == 0x27) {
int start = _reader.offset;
- return tokenizeString(_reader.advance(), start, true);
+ return _tokenizeString(_reader.advance(), start, true);
}
}
if (0x61 <= next && next <= 0x7A) {
- return tokenizeKeywordOrIdentifier(next, true);
+ return _tokenizeKeywordOrIdentifier(next, true);
}
if ((0x41 <= next && next <= 0x5A) || next == 0x5F || next == 0x24) {
- return tokenizeIdentifier(next, _reader.offset, true);
+ return _tokenizeIdentifier(next, _reader.offset, true);
}
if (next == 0x3C) {
- return tokenizeLessThan(next);
+ return _tokenizeLessThan(next);
}
if (next == 0x3E) {
- return tokenizeGreaterThan(next);
+ return _tokenizeGreaterThan(next);
}
if (next == 0x3D) {
- return tokenizeEquals(next);
+ return _tokenizeEquals(next);
}
if (next == 0x21) {
- return tokenizeExclamation(next);
+ return _tokenizeExclamation(next);
}
if (next == 0x2B) {
- return tokenizePlus(next);
+ return _tokenizePlus(next);
}
if (next == 0x2D) {
- return tokenizeMinus(next);
+ return _tokenizeMinus(next);
}
if (next == 0x2A) {
- return tokenizeMultiply(next);
+ return _tokenizeMultiply(next);
}
if (next == 0x25) {
- return tokenizePercent(next);
+ return _tokenizePercent(next);
}
if (next == 0x26) {
- return tokenizeAmpersand(next);
+ return _tokenizeAmpersand(next);
}
if (next == 0x7C) {
- return tokenizeBar(next);
+ return _tokenizeBar(next);
}
if (next == 0x5E) {
- return tokenizeCaret(next);
+ return _tokenizeCaret(next);
}
if (next == 0x5B) {
- return tokenizeOpenSquareBracket(next);
+ return _tokenizeOpenSquareBracket(next);
}
if (next == 0x7E) {
- return tokenizeTilde(next);
+ return _tokenizeTilde(next);
}
if (next == 0x5C) {
- appendTokenOfType(TokenType.BACKSLASH);
+ _appendTokenOfType(TokenType.BACKSLASH);
return _reader.advance();
}
if (next == 0x23) {
- return tokenizeTag(next);
+ return _tokenizeTag(next);
}
if (next == 0x28) {
- appendBeginToken(TokenType.OPEN_PAREN);
+ _appendBeginToken(TokenType.OPEN_PAREN);
return _reader.advance();
}
if (next == 0x29) {
- appendEndToken(TokenType.CLOSE_PAREN, TokenType.OPEN_PAREN);
+ _appendEndToken(TokenType.CLOSE_PAREN, TokenType.OPEN_PAREN);
return _reader.advance();
}
if (next == 0x2C) {
- appendTokenOfType(TokenType.COMMA);
+ _appendTokenOfType(TokenType.COMMA);
return _reader.advance();
}
if (next == 0x3A) {
- appendTokenOfType(TokenType.COLON);
+ _appendTokenOfType(TokenType.COLON);
return _reader.advance();
}
if (next == 0x3B) {
- appendTokenOfType(TokenType.SEMICOLON);
+ _appendTokenOfType(TokenType.SEMICOLON);
return _reader.advance();
}
if (next == 0x3F) {
- appendTokenOfType(TokenType.QUESTION);
+ _appendTokenOfType(TokenType.QUESTION);
return _reader.advance();
}
if (next == 0x5D) {
- appendEndToken(TokenType.CLOSE_SQUARE_BRACKET, TokenType.OPEN_SQUARE_BRACKET);
+ _appendEndToken(TokenType.CLOSE_SQUARE_BRACKET, TokenType.OPEN_SQUARE_BRACKET);
return _reader.advance();
}
if (next == 0x60) {
- appendTokenOfType(TokenType.BACKPING);
+ _appendTokenOfType(TokenType.BACKPING);
return _reader.advance();
}
if (next == 0x7B) {
- appendBeginToken(TokenType.OPEN_CURLY_BRACKET);
+ _appendBeginToken(TokenType.OPEN_CURLY_BRACKET);
return _reader.advance();
}
if (next == 0x7D) {
- appendEndToken(TokenType.CLOSE_CURLY_BRACKET, TokenType.OPEN_CURLY_BRACKET);
+ _appendEndToken(TokenType.CLOSE_CURLY_BRACKET, TokenType.OPEN_CURLY_BRACKET);
return _reader.advance();
}
if (next == 0x2F) {
- return tokenizeSlashOrComment(next);
+ return _tokenizeSlashOrComment(next);
}
if (next == 0x40) {
- appendTokenOfType(TokenType.AT);
+ _appendTokenOfType(TokenType.AT);
return _reader.advance();
}
if (next == 0x22 || next == 0x27) {
- return tokenizeString(next, _reader.offset, false);
+ return _tokenizeString(next, _reader.offset, false);
}
if (next == 0x2E) {
- return tokenizeDotOrNumber(next);
+ return _tokenizeDotOrNumber(next);
}
if (next == 0x30) {
- return tokenizeHexOrNumber(next);
+ return _tokenizeHexOrNumber(next);
}
if (0x31 <= next && next <= 0x39) {
- return tokenizeNumber(next);
+ return _tokenizeNumber(next);
}
if (next == -1) {
return -1;
}
- reportError(ScannerErrorCode.ILLEGAL_CHARACTER, [next]);
+ _reportError(ScannerErrorCode.ILLEGAL_CHARACTER, [next]);
return _reader.advance();
}
@@ -1100,7 +1115,7 @@
_lineStarts.add(_reader.offset);
}
- void appendBeginToken(TokenType type) {
+ void _appendBeginToken(TokenType type) {
BeginToken token;
if (_firstComment == null) {
token = new BeginToken(type, _tokenStart);
@@ -1114,7 +1129,7 @@
_stackEnd++;
}
- void appendCommentToken(TokenType type, String value) {
+ void _appendCommentToken(TokenType type, String value) {
// Ignore comment tokens if client specified that it doesn't need them.
if (!_preserveComments) {
return;
@@ -1128,7 +1143,7 @@
}
}
- void appendEndToken(TokenType type, TokenType beginType) {
+ void _appendEndToken(TokenType type, TokenType beginType) {
Token token;
if (_firstComment == null) {
token = new Token(type, _tokenStart);
@@ -1147,7 +1162,7 @@
}
}
- void appendEofToken() {
+ void _appendEofToken() {
Token eofToken;
if (_firstComment == null) {
eofToken = new Token(TokenType.EOF, _reader.offset + 1);
@@ -1160,11 +1175,11 @@
eofToken.setNext(eofToken);
_tail = _tail.setNext(eofToken);
if (_stackEnd >= 0) {
- _hasUnmatchedGroups2 = true;
+ _hasUnmatchedGroups = true;
}
}
- void appendKeywordToken(Keyword keyword) {
+ void _appendKeywordToken(Keyword keyword) {
if (_firstComment == null) {
_tail = _tail.setNext(new KeywordToken(keyword, _tokenStart));
} else {
@@ -1174,7 +1189,7 @@
}
}
- void appendStringToken(TokenType type, String value) {
+ void _appendStringToken(TokenType type, String value) {
if (_firstComment == null) {
_tail = _tail.setNext(new StringToken(type, value, _tokenStart));
} else {
@@ -1184,7 +1199,7 @@
}
}
- void appendStringTokenWithOffset(TokenType type, String value, int offset) {
+ void _appendStringTokenWithOffset(TokenType type, String value, int offset) {
if (_firstComment == null) {
_tail = _tail.setNext(new StringToken(type, value, _tokenStart + offset));
} else {
@@ -1194,7 +1209,7 @@
}
}
- void appendTokenOfType(TokenType type) {
+ void _appendTokenOfType(TokenType type) {
if (_firstComment == null) {
_tail = _tail.setNext(new Token(type, _tokenStart));
} else {
@@ -1204,7 +1219,7 @@
}
}
- void appendTokenOfTypeWithOffset(TokenType type, int offset) {
+ void _appendTokenOfTypeWithOffset(TokenType type, int offset) {
if (_firstComment == null) {
_tail = _tail.setNext(new Token(type, offset));
} else {
@@ -1214,7 +1229,7 @@
}
}
- void beginToken() {
+ void _beginToken() {
_tokenStart = _reader.offset;
}
@@ -1225,13 +1240,13 @@
*
* @return the token to be paired with the closing brace
*/
- BeginToken findTokenMatchingClosingBraceInInterpolationExpression() {
+ BeginToken _findTokenMatchingClosingBraceInInterpolationExpression() {
while (_stackEnd >= 0) {
BeginToken begin = _groupingStack[_stackEnd];
if (identical(begin.type, TokenType.OPEN_CURLY_BRACKET) || identical(begin.type, TokenType.STRING_INTERPOLATION_EXPRESSION)) {
return begin;
}
- _hasUnmatchedGroups2 = true;
+ _hasUnmatchedGroups = true;
_groupingStack.removeAt(_stackEnd--);
}
//
@@ -1247,103 +1262,103 @@
* @param errorCode the error code indicating the nature of the error
* @param arguments any arguments needed to complete the error message
*/
- void reportError(ScannerErrorCode errorCode, List<Object> arguments) {
+ void _reportError(ScannerErrorCode errorCode, List<Object> arguments) {
_errorListener.onError(new AnalysisError.con2(source, _reader.offset, 1, errorCode, arguments));
}
- int select(int choice, TokenType yesType, TokenType noType) {
+ int _select(int choice, TokenType yesType, TokenType noType) {
int next = _reader.advance();
if (next == choice) {
- appendTokenOfType(yesType);
+ _appendTokenOfType(yesType);
return _reader.advance();
} else {
- appendTokenOfType(noType);
+ _appendTokenOfType(noType);
return next;
}
}
- int selectWithOffset(int choice, TokenType yesType, TokenType noType, int offset) {
+ int _selectWithOffset(int choice, TokenType yesType, TokenType noType, int offset) {
int next = _reader.advance();
if (next == choice) {
- appendTokenOfTypeWithOffset(yesType, offset);
+ _appendTokenOfTypeWithOffset(yesType, offset);
return _reader.advance();
} else {
- appendTokenOfTypeWithOffset(noType, offset);
+ _appendTokenOfTypeWithOffset(noType, offset);
return next;
}
}
- int tokenizeAmpersand(int next) {
+ int _tokenizeAmpersand(int next) {
// && &= &
next = _reader.advance();
if (next == 0x26) {
- appendTokenOfType(TokenType.AMPERSAND_AMPERSAND);
+ _appendTokenOfType(TokenType.AMPERSAND_AMPERSAND);
return _reader.advance();
} else if (next == 0x3D) {
- appendTokenOfType(TokenType.AMPERSAND_EQ);
+ _appendTokenOfType(TokenType.AMPERSAND_EQ);
return _reader.advance();
} else {
- appendTokenOfType(TokenType.AMPERSAND);
+ _appendTokenOfType(TokenType.AMPERSAND);
return next;
}
}
- int tokenizeBar(int next) {
+ int _tokenizeBar(int next) {
// | || |=
next = _reader.advance();
if (next == 0x7C) {
- appendTokenOfType(TokenType.BAR_BAR);
+ _appendTokenOfType(TokenType.BAR_BAR);
return _reader.advance();
} else if (next == 0x3D) {
- appendTokenOfType(TokenType.BAR_EQ);
+ _appendTokenOfType(TokenType.BAR_EQ);
return _reader.advance();
} else {
- appendTokenOfType(TokenType.BAR);
+ _appendTokenOfType(TokenType.BAR);
return next;
}
}
- int tokenizeCaret(int next) => select(0x3D, TokenType.CARET_EQ, TokenType.CARET);
+ int _tokenizeCaret(int next) => _select(0x3D, TokenType.CARET_EQ, TokenType.CARET);
- int tokenizeDotOrNumber(int next) {
+ int _tokenizeDotOrNumber(int next) {
int start = _reader.offset;
next = _reader.advance();
if (0x30 <= next && next <= 0x39) {
- return tokenizeFractionPart(next, start);
+ return _tokenizeFractionPart(next, start);
} else if (0x2E == next) {
- return select(0x2E, TokenType.PERIOD_PERIOD_PERIOD, TokenType.PERIOD_PERIOD);
+ return _select(0x2E, TokenType.PERIOD_PERIOD_PERIOD, TokenType.PERIOD_PERIOD);
} else {
- appendTokenOfType(TokenType.PERIOD);
+ _appendTokenOfType(TokenType.PERIOD);
return next;
}
}
- int tokenizeEquals(int next) {
+ int _tokenizeEquals(int next) {
// = == =>
next = _reader.advance();
if (next == 0x3D) {
- appendTokenOfType(TokenType.EQ_EQ);
+ _appendTokenOfType(TokenType.EQ_EQ);
return _reader.advance();
} else if (next == 0x3E) {
- appendTokenOfType(TokenType.FUNCTION);
+ _appendTokenOfType(TokenType.FUNCTION);
return _reader.advance();
}
- appendTokenOfType(TokenType.EQ);
+ _appendTokenOfType(TokenType.EQ);
return next;
}
- int tokenizeExclamation(int next) {
+ int _tokenizeExclamation(int next) {
// ! !=
next = _reader.advance();
if (next == 0x3D) {
- appendTokenOfType(TokenType.BANG_EQ);
+ _appendTokenOfType(TokenType.BANG_EQ);
return _reader.advance();
}
- appendTokenOfType(TokenType.BANG);
+ _appendTokenOfType(TokenType.BANG);
return next;
}
- int tokenizeExponent(int next) {
+ int _tokenizeExponent(int next) {
if (next == 0x2B || next == 0x2D) {
next = _reader.advance();
}
@@ -1353,7 +1368,7 @@
hasDigits = true;
} else {
if (!hasDigits) {
- reportError(ScannerErrorCode.MISSING_DIGIT, []);
+ _reportError(ScannerErrorCode.MISSING_DIGIT, []);
}
return next;
}
@@ -1361,7 +1376,7 @@
}
}
- int tokenizeFractionPart(int next, int start) {
+ int _tokenizeFractionPart(int next, int start) {
bool done = false;
bool hasDigit = false;
LOOP: while (!done) {
@@ -1369,7 +1384,7 @@
hasDigit = true;
} else if (0x65 == next || 0x45 == next) {
hasDigit = true;
- next = tokenizeExponent(_reader.advance());
+ next = _tokenizeExponent(_reader.advance());
done = true;
continue LOOP;
} else {
@@ -1379,39 +1394,39 @@
next = _reader.advance();
}
if (!hasDigit) {
- appendStringToken(TokenType.INT, _reader.getString(start, -2));
+ _appendStringToken(TokenType.INT, _reader.getString(start, -2));
if (0x2E == next) {
- return selectWithOffset(0x2E, TokenType.PERIOD_PERIOD_PERIOD, TokenType.PERIOD_PERIOD, _reader.offset - 1);
+ return _selectWithOffset(0x2E, TokenType.PERIOD_PERIOD_PERIOD, TokenType.PERIOD_PERIOD, _reader.offset - 1);
}
- appendTokenOfTypeWithOffset(TokenType.PERIOD, _reader.offset - 1);
+ _appendTokenOfTypeWithOffset(TokenType.PERIOD, _reader.offset - 1);
return bigSwitch(next);
}
- appendStringToken(TokenType.DOUBLE, _reader.getString(start, next < 0 ? 0 : -1));
+ _appendStringToken(TokenType.DOUBLE, _reader.getString(start, next < 0 ? 0 : -1));
return next;
}
- int tokenizeGreaterThan(int next) {
+ int _tokenizeGreaterThan(int next) {
// > >= >> >>=
next = _reader.advance();
if (0x3D == next) {
- appendTokenOfType(TokenType.GT_EQ);
+ _appendTokenOfType(TokenType.GT_EQ);
return _reader.advance();
} else if (0x3E == next) {
next = _reader.advance();
if (0x3D == next) {
- appendTokenOfType(TokenType.GT_GT_EQ);
+ _appendTokenOfType(TokenType.GT_GT_EQ);
return _reader.advance();
} else {
- appendTokenOfType(TokenType.GT_GT);
+ _appendTokenOfType(TokenType.GT_GT);
return next;
}
} else {
- appendTokenOfType(TokenType.GT);
+ _appendTokenOfType(TokenType.GT);
return next;
}
}
- int tokenizeHex(int next) {
+ int _tokenizeHex(int next) {
int start = _reader.offset - 1;
bool hasDigits = false;
while (true) {
@@ -1420,53 +1435,53 @@
hasDigits = true;
} else {
if (!hasDigits) {
- reportError(ScannerErrorCode.MISSING_HEX_DIGIT, []);
+ _reportError(ScannerErrorCode.MISSING_HEX_DIGIT, []);
}
- appendStringToken(TokenType.HEXADECIMAL, _reader.getString(start, next < 0 ? 0 : -1));
+ _appendStringToken(TokenType.HEXADECIMAL, _reader.getString(start, next < 0 ? 0 : -1));
return next;
}
}
}
- int tokenizeHexOrNumber(int next) {
+ int _tokenizeHexOrNumber(int next) {
int x = _reader.peek();
if (x == 0x78 || x == 0x58) {
_reader.advance();
- return tokenizeHex(x);
+ return _tokenizeHex(x);
}
- return tokenizeNumber(next);
+ return _tokenizeNumber(next);
}
- int tokenizeIdentifier(int next, int start, bool allowDollar) {
+ int _tokenizeIdentifier(int next, int start, bool allowDollar) {
while ((0x61 <= next && next <= 0x7A) || (0x41 <= next && next <= 0x5A) || (0x30 <= next && next <= 0x39) || next == 0x5F || (next == 0x24 && allowDollar)) {
next = _reader.advance();
}
- appendStringToken(TokenType.IDENTIFIER, _reader.getString(start, next < 0 ? 0 : -1));
+ _appendStringToken(TokenType.IDENTIFIER, _reader.getString(start, next < 0 ? 0 : -1));
return next;
}
- int tokenizeInterpolatedExpression(int next, int start) {
- appendBeginToken(TokenType.STRING_INTERPOLATION_EXPRESSION);
+ int _tokenizeInterpolatedExpression(int next, int start) {
+ _appendBeginToken(TokenType.STRING_INTERPOLATION_EXPRESSION);
next = _reader.advance();
while (next != -1) {
if (next == 0x7D) {
- BeginToken begin = findTokenMatchingClosingBraceInInterpolationExpression();
+ BeginToken begin = _findTokenMatchingClosingBraceInInterpolationExpression();
if (begin == null) {
- beginToken();
- appendTokenOfType(TokenType.CLOSE_CURLY_BRACKET);
+ _beginToken();
+ _appendTokenOfType(TokenType.CLOSE_CURLY_BRACKET);
next = _reader.advance();
- beginToken();
+ _beginToken();
return next;
} else if (identical(begin.type, TokenType.OPEN_CURLY_BRACKET)) {
- beginToken();
- appendEndToken(TokenType.CLOSE_CURLY_BRACKET, TokenType.OPEN_CURLY_BRACKET);
+ _beginToken();
+ _appendEndToken(TokenType.CLOSE_CURLY_BRACKET, TokenType.OPEN_CURLY_BRACKET);
next = _reader.advance();
- beginToken();
+ _beginToken();
} else if (identical(begin.type, TokenType.STRING_INTERPOLATION_EXPRESSION)) {
- beginToken();
- appendEndToken(TokenType.CLOSE_CURLY_BRACKET, TokenType.STRING_INTERPOLATION_EXPRESSION);
+ _beginToken();
+ _appendEndToken(TokenType.CLOSE_CURLY_BRACKET, TokenType.STRING_INTERPOLATION_EXPRESSION);
next = _reader.advance();
- beginToken();
+ _beginToken();
return next;
}
} else {
@@ -1477,21 +1492,21 @@
return next;
}
next = _reader.advance();
- beginToken();
+ _beginToken();
return next;
}
- int tokenizeInterpolatedIdentifier(int next, int start) {
- appendStringTokenWithOffset(TokenType.STRING_INTERPOLATION_IDENTIFIER, "\$", 0);
+ int _tokenizeInterpolatedIdentifier(int next, int start) {
+ _appendStringTokenWithOffset(TokenType.STRING_INTERPOLATION_IDENTIFIER, "\$", 0);
if ((0x41 <= next && next <= 0x5A) || (0x61 <= next && next <= 0x7A) || next == 0x5F) {
- beginToken();
- next = tokenizeKeywordOrIdentifier(next, false);
+ _beginToken();
+ next = _tokenizeKeywordOrIdentifier(next, false);
}
- beginToken();
+ _beginToken();
return next;
}
- int tokenizeKeywordOrIdentifier(int next, bool allowDollar) {
+ int _tokenizeKeywordOrIdentifier(int next, bool allowDollar) {
KeywordState state = KeywordState.KEYWORD_STATE;
int start = _reader.offset;
while (state != null && 0x61 <= next && next <= 0x7A) {
@@ -1499,61 +1514,61 @@
next = _reader.advance();
}
if (state == null || state.keyword() == null) {
- return tokenizeIdentifier(next, start, allowDollar);
+ return _tokenizeIdentifier(next, start, allowDollar);
}
if ((0x41 <= next && next <= 0x5A) || (0x30 <= next && next <= 0x39) || next == 0x5F || next == 0x24) {
- return tokenizeIdentifier(next, start, allowDollar);
+ return _tokenizeIdentifier(next, start, allowDollar);
} else if (next < 128) {
- appendKeywordToken(state.keyword());
+ _appendKeywordToken(state.keyword());
return next;
} else {
- return tokenizeIdentifier(next, start, allowDollar);
+ return _tokenizeIdentifier(next, start, allowDollar);
}
}
- int tokenizeLessThan(int next) {
+ int _tokenizeLessThan(int next) {
// < <= << <<=
next = _reader.advance();
if (0x3D == next) {
- appendTokenOfType(TokenType.LT_EQ);
+ _appendTokenOfType(TokenType.LT_EQ);
return _reader.advance();
} else if (0x3C == next) {
- return select(0x3D, TokenType.LT_LT_EQ, TokenType.LT_LT);
+ return _select(0x3D, TokenType.LT_LT_EQ, TokenType.LT_LT);
} else {
- appendTokenOfType(TokenType.LT);
+ _appendTokenOfType(TokenType.LT);
return next;
}
}
- int tokenizeMinus(int next) {
+ int _tokenizeMinus(int next) {
// - -- -=
next = _reader.advance();
if (next == 0x2D) {
- appendTokenOfType(TokenType.MINUS_MINUS);
+ _appendTokenOfType(TokenType.MINUS_MINUS);
return _reader.advance();
} else if (next == 0x3D) {
- appendTokenOfType(TokenType.MINUS_EQ);
+ _appendTokenOfType(TokenType.MINUS_EQ);
return _reader.advance();
} else {
- appendTokenOfType(TokenType.MINUS);
+ _appendTokenOfType(TokenType.MINUS);
return next;
}
}
- int tokenizeMultiLineComment(int next) {
+ int _tokenizeMultiLineComment(int next) {
int nesting = 1;
next = _reader.advance();
while (true) {
if (-1 == next) {
- reportError(ScannerErrorCode.UNTERMINATED_MULTI_LINE_COMMENT, []);
- appendCommentToken(TokenType.MULTI_LINE_COMMENT, _reader.getString(_tokenStart, 0));
+ _reportError(ScannerErrorCode.UNTERMINATED_MULTI_LINE_COMMENT, []);
+ _appendCommentToken(TokenType.MULTI_LINE_COMMENT, _reader.getString(_tokenStart, 0));
return next;
} else if (0x2A == next) {
next = _reader.advance();
if (0x2F == next) {
--nesting;
if (0 == nesting) {
- appendCommentToken(TokenType.MULTI_LINE_COMMENT, _reader.getString(_tokenStart, 0));
+ _appendCommentToken(TokenType.MULTI_LINE_COMMENT, _reader.getString(_tokenStart, 0));
return _reader.advance();
} else {
next = _reader.advance();
@@ -1580,7 +1595,7 @@
}
}
- int tokenizeMultiLineRawString(int quoteChar, int start) {
+ int _tokenizeMultiLineRawString(int quoteChar, int start) {
int next = _reader.advance();
outer: while (next != -1) {
while (next != quoteChar) {
@@ -1602,26 +1617,26 @@
if (next == quoteChar) {
next = _reader.advance();
if (next == quoteChar) {
- appendStringToken(TokenType.STRING, _reader.getString(start, 0));
+ _appendStringToken(TokenType.STRING, _reader.getString(start, 0));
return _reader.advance();
}
}
}
- reportError(ScannerErrorCode.UNTERMINATED_STRING_LITERAL, []);
- appendStringToken(TokenType.STRING, _reader.getString(start, 0));
+ _reportError(ScannerErrorCode.UNTERMINATED_STRING_LITERAL, []);
+ _appendStringToken(TokenType.STRING, _reader.getString(start, 0));
return _reader.advance();
}
- int tokenizeMultiLineString(int quoteChar, int start, bool raw) {
+ int _tokenizeMultiLineString(int quoteChar, int start, bool raw) {
if (raw) {
- return tokenizeMultiLineRawString(quoteChar, start);
+ return _tokenizeMultiLineRawString(quoteChar, start);
}
int next = _reader.advance();
while (next != -1) {
if (next == 0x24) {
- appendStringToken(TokenType.STRING, _reader.getString(start, -1));
- beginToken();
- next = tokenizeStringInterpolation(start);
+ _appendStringToken(TokenType.STRING, _reader.getString(start, -1));
+ _beginToken();
+ next = _tokenizeStringInterpolation(start);
start = _reader.offset;
continue;
}
@@ -1630,7 +1645,7 @@
if (next == quoteChar) {
next = _reader.advance();
if (next == quoteChar) {
- appendStringToken(TokenType.STRING, _reader.getString(start, 0));
+ _appendStringToken(TokenType.STRING, _reader.getString(start, 0));
return _reader.advance();
}
}
@@ -1666,179 +1681,179 @@
next = _reader.advance();
}
}
- reportError(ScannerErrorCode.UNTERMINATED_STRING_LITERAL, []);
- appendStringToken(TokenType.STRING, _reader.getString(start, 0));
+ _reportError(ScannerErrorCode.UNTERMINATED_STRING_LITERAL, []);
+ _appendStringToken(TokenType.STRING, _reader.getString(start, 0));
return _reader.advance();
}
- int tokenizeMultiply(int next) => select(0x3D, TokenType.STAR_EQ, TokenType.STAR);
+ int _tokenizeMultiply(int next) => _select(0x3D, TokenType.STAR_EQ, TokenType.STAR);
- int tokenizeNumber(int next) {
+ int _tokenizeNumber(int next) {
int start = _reader.offset;
while (true) {
next = _reader.advance();
if (0x30 <= next && next <= 0x39) {
continue;
} else if (next == 0x2E) {
- return tokenizeFractionPart(_reader.advance(), start);
+ return _tokenizeFractionPart(_reader.advance(), start);
} else if (next == 0x65 || next == 0x45) {
- return tokenizeFractionPart(next, start);
+ return _tokenizeFractionPart(next, start);
} else {
- appendStringToken(TokenType.INT, _reader.getString(start, next < 0 ? 0 : -1));
+ _appendStringToken(TokenType.INT, _reader.getString(start, next < 0 ? 0 : -1));
return next;
}
}
}
- int tokenizeOpenSquareBracket(int next) {
+ int _tokenizeOpenSquareBracket(int next) {
// [ [] []=
next = _reader.advance();
if (next == 0x5D) {
- return select(0x3D, TokenType.INDEX_EQ, TokenType.INDEX);
+ return _select(0x3D, TokenType.INDEX_EQ, TokenType.INDEX);
} else {
- appendBeginToken(TokenType.OPEN_SQUARE_BRACKET);
+ _appendBeginToken(TokenType.OPEN_SQUARE_BRACKET);
return next;
}
}
- int tokenizePercent(int next) => select(0x3D, TokenType.PERCENT_EQ, TokenType.PERCENT);
+ int _tokenizePercent(int next) => _select(0x3D, TokenType.PERCENT_EQ, TokenType.PERCENT);
- int tokenizePlus(int next) {
+ int _tokenizePlus(int next) {
// + ++ +=
next = _reader.advance();
if (0x2B == next) {
- appendTokenOfType(TokenType.PLUS_PLUS);
+ _appendTokenOfType(TokenType.PLUS_PLUS);
return _reader.advance();
} else if (0x3D == next) {
- appendTokenOfType(TokenType.PLUS_EQ);
+ _appendTokenOfType(TokenType.PLUS_EQ);
return _reader.advance();
} else {
- appendTokenOfType(TokenType.PLUS);
+ _appendTokenOfType(TokenType.PLUS);
return next;
}
}
- int tokenizeSingleLineComment(int next) {
+ int _tokenizeSingleLineComment(int next) {
while (true) {
next = _reader.advance();
if (-1 == next) {
- appendCommentToken(TokenType.SINGLE_LINE_COMMENT, _reader.getString(_tokenStart, 0));
+ _appendCommentToken(TokenType.SINGLE_LINE_COMMENT, _reader.getString(_tokenStart, 0));
return next;
} else if (0xA == next || 0xD == next) {
- appendCommentToken(TokenType.SINGLE_LINE_COMMENT, _reader.getString(_tokenStart, -1));
+ _appendCommentToken(TokenType.SINGLE_LINE_COMMENT, _reader.getString(_tokenStart, -1));
return next;
}
}
}
- int tokenizeSingleLineRawString(int next, int quoteChar, int start) {
+ int _tokenizeSingleLineRawString(int next, int quoteChar, int start) {
next = _reader.advance();
while (next != -1) {
if (next == quoteChar) {
- appendStringToken(TokenType.STRING, _reader.getString(start, 0));
+ _appendStringToken(TokenType.STRING, _reader.getString(start, 0));
return _reader.advance();
} else if (next == 0xD || next == 0xA) {
- reportError(ScannerErrorCode.UNTERMINATED_STRING_LITERAL, []);
- appendStringToken(TokenType.STRING, _reader.getString(start, 0));
+ _reportError(ScannerErrorCode.UNTERMINATED_STRING_LITERAL, []);
+ _appendStringToken(TokenType.STRING, _reader.getString(start, 0));
return _reader.advance();
}
next = _reader.advance();
}
- reportError(ScannerErrorCode.UNTERMINATED_STRING_LITERAL, []);
- appendStringToken(TokenType.STRING, _reader.getString(start, 0));
+ _reportError(ScannerErrorCode.UNTERMINATED_STRING_LITERAL, []);
+ _appendStringToken(TokenType.STRING, _reader.getString(start, 0));
return _reader.advance();
}
- int tokenizeSingleLineString(int next, int quoteChar, int start) {
+ int _tokenizeSingleLineString(int next, int quoteChar, int start) {
while (next != quoteChar) {
if (next == 0x5C) {
next = _reader.advance();
} else if (next == 0x24) {
- appendStringToken(TokenType.STRING, _reader.getString(start, -1));
- beginToken();
- next = tokenizeStringInterpolation(start);
+ _appendStringToken(TokenType.STRING, _reader.getString(start, -1));
+ _beginToken();
+ next = _tokenizeStringInterpolation(start);
start = _reader.offset;
continue;
}
if (next <= 0xD && (next == 0xA || next == 0xD || next == -1)) {
- reportError(ScannerErrorCode.UNTERMINATED_STRING_LITERAL, []);
- appendStringToken(TokenType.STRING, _reader.getString(start, 0));
+ _reportError(ScannerErrorCode.UNTERMINATED_STRING_LITERAL, []);
+ _appendStringToken(TokenType.STRING, _reader.getString(start, 0));
return _reader.advance();
}
next = _reader.advance();
}
- appendStringToken(TokenType.STRING, _reader.getString(start, 0));
+ _appendStringToken(TokenType.STRING, _reader.getString(start, 0));
return _reader.advance();
}
- int tokenizeSlashOrComment(int next) {
+ int _tokenizeSlashOrComment(int next) {
next = _reader.advance();
if (0x2A == next) {
- return tokenizeMultiLineComment(next);
+ return _tokenizeMultiLineComment(next);
} else if (0x2F == next) {
- return tokenizeSingleLineComment(next);
+ return _tokenizeSingleLineComment(next);
} else if (0x3D == next) {
- appendTokenOfType(TokenType.SLASH_EQ);
+ _appendTokenOfType(TokenType.SLASH_EQ);
return _reader.advance();
} else {
- appendTokenOfType(TokenType.SLASH);
+ _appendTokenOfType(TokenType.SLASH);
return next;
}
}
- int tokenizeString(int next, int start, bool raw) {
+ int _tokenizeString(int next, int start, bool raw) {
int quoteChar = next;
next = _reader.advance();
if (quoteChar == next) {
next = _reader.advance();
if (quoteChar == next) {
// Multiline string.
- return tokenizeMultiLineString(quoteChar, start, raw);
+ return _tokenizeMultiLineString(quoteChar, start, raw);
} else {
// Empty string.
- appendStringToken(TokenType.STRING, _reader.getString(start, -1));
+ _appendStringToken(TokenType.STRING, _reader.getString(start, -1));
return next;
}
}
if (raw) {
- return tokenizeSingleLineRawString(next, quoteChar, start);
+ return _tokenizeSingleLineRawString(next, quoteChar, start);
} else {
- return tokenizeSingleLineString(next, quoteChar, start);
+ return _tokenizeSingleLineString(next, quoteChar, start);
}
}
- int tokenizeStringInterpolation(int start) {
- beginToken();
+ int _tokenizeStringInterpolation(int start) {
+ _beginToken();
int next = _reader.advance();
if (next == 0x7B) {
- return tokenizeInterpolatedExpression(next, start);
+ return _tokenizeInterpolatedExpression(next, start);
} else {
- return tokenizeInterpolatedIdentifier(next, start);
+ return _tokenizeInterpolatedIdentifier(next, start);
}
}
- int tokenizeTag(int next) {
+ int _tokenizeTag(int next) {
// # or #!.*[\n\r]
if (_reader.offset == 0) {
if (_reader.peek() == 0x21) {
do {
next = _reader.advance();
} while (next != 0xA && next != 0xD && next > 0);
- appendStringToken(TokenType.SCRIPT_TAG, _reader.getString(_tokenStart, 0));
+ _appendStringToken(TokenType.SCRIPT_TAG, _reader.getString(_tokenStart, 0));
return next;
}
}
- appendTokenOfType(TokenType.HASH);
+ _appendTokenOfType(TokenType.HASH);
return _reader.advance();
}
- int tokenizeTilde(int next) {
+ int _tokenizeTilde(int next) {
// ~ ~/ ~/=
next = _reader.advance();
if (next == 0x2F) {
- return select(0x3D, TokenType.TILDE_SLASH_EQ, TokenType.TILDE_SLASH);
+ return _select(0x3D, TokenType.TILDE_SLASH_EQ, TokenType.TILDE_SLASH);
} else {
- appendTokenOfType(TokenType.TILDE);
+ _appendTokenOfType(TokenType.TILDE);
return next;
}
}
@@ -1852,7 +1867,7 @@
/**
* The lexeme represented by this token.
*/
- String _value2;
+ String _value;
/**
* Initialize a newly created token to represent a token of the given type with the given value.
@@ -1862,14 +1877,17 @@
* @param offset the offset from the beginning of the file to the first character in the token
*/
StringToken(TokenType type, String value, int offset) : super(type, offset) {
- this._value2 = StringUtilities.intern(value);
+ this._value = StringUtilities.intern(value);
}
- Token copy() => new StringToken(type, _value2, offset);
+ @override
+ Token copy() => new StringToken(type, _value, offset);
- String get lexeme => _value2;
+ @override
+ String get lexeme => _value;
- String value() => _value2;
+ @override
+ String value() => _value;
}
/**
@@ -1894,8 +1912,10 @@
this._precedingComment = precedingComment;
}
+ @override
Token copy() => new TokenWithComment(type, offset, _precedingComment);
+ @override
Token get precedingComments => _precedingComment;
}
@@ -2004,6 +2024,21 @@
bool get isUserDefinableOperator => type.isUserDefinableOperator;
/**
+ * Return `true` if this token has any one of the given types.
+ *
+ * @param types the types of token that are being tested for
+ * @return `true` if this token has any of the given types
+ */
+ bool matchesAny(List<TokenType> types) {
+ for (TokenType type in types) {
+ if (identical(this.type, type)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
* Set the next token in the token stream to the given token. This has the side-effect of setting
* this token to be the previous token for the given token.
*
@@ -2028,6 +2063,7 @@
return token;
}
+ @override
String toString() => lexeme;
/**
@@ -2138,10 +2174,13 @@
this._precedingComment = precedingComment;
}
+ @override
Token copy() => new BeginTokenWithComment(type, offset, copyComments(_precedingComment));
+ @override
Token get precedingComments => _precedingComment;
+ @override
void applyDelta(int delta) {
super.applyDelta(delta);
Token token = _precedingComment;
@@ -2169,10 +2208,13 @@
*/
KeywordToken(this.keyword, int offset) : super(TokenType.KEYWORD, offset);
+ @override
Token copy() => new KeywordToken(keyword, offset);
+ @override
String get lexeme => keyword.syntax;
+ @override
Keyword value() => keyword;
}
@@ -2196,6 +2238,7 @@
assert((identical(type, TokenType.OPEN_CURLY_BRACKET) || identical(type, TokenType.OPEN_PAREN) || identical(type, TokenType.OPEN_SQUARE_BRACKET) || identical(type, TokenType.STRING_INTERPOLATION_EXPRESSION)));
}
+ @override
Token copy() => new BeginToken(type, offset);
}
@@ -2344,10 +2387,13 @@
this._precedingComment = precedingComment;
}
+ @override
Token copy() => new KeywordTokenWithComment(keyword, offset, copyComments(_precedingComment));
+ @override
Token get precedingComments => _precedingComment;
+ @override
void applyDelta(int delta) {
super.applyDelta(delta);
Token token = _precedingComment;
@@ -2700,5 +2746,6 @@
class TokenType_EOF extends TokenType {
TokenType_EOF(String name, int ordinal, TokenClass arg0, String arg1) : super.con2(name, ordinal, arg0, arg1);
+ @override
String toString() => "-eof-";
}
\ No newline at end of file
diff --git a/pkg/analyzer/lib/src/generated/sdk.dart b/pkg/analyzer/lib/src/generated/sdk.dart
index 46fe71d..b16e31d 100644
--- a/pkg/analyzer/lib/src/generated/sdk.dart
+++ b/pkg/analyzer/lib/src/generated/sdk.dart
@@ -138,19 +138,25 @@
this._shortName = name;
}
+ @override
String get shortName => _shortName;
+ @override
bool get isDart2JsLibrary => (_platforms & DART2JS_PLATFORM) != 0;
+ @override
bool get isDocumented => _documented;
+ @override
bool get isImplementation => _implementation;
+ @override
bool get isInternal => "Internal" == category;
/**
* Return `true` if library can be used for both client and server
*/
+ @override
bool get isShared => category == "Shared";
/**
@@ -158,6 +164,7 @@
*
* @return `true` if this library can be run on the VM
*/
+ @override
bool get isVmLibrary => (_platforms & VM_PLATFORM) != 0;
/**
@@ -262,6 +269,7 @@
*/
LibraryMap get librariesMap => _librariesMap;
+ @override
Object visitMapLiteralEntry(MapLiteralEntry node) {
String libraryName = null;
Expression key = node.key;
diff --git a/pkg/analyzer/lib/src/generated/sdk_io.dart b/pkg/analyzer/lib/src/generated/sdk_io.dart
index 58abe3d..afbf270 100644
--- a/pkg/analyzer/lib/src/generated/sdk_io.dart
+++ b/pkg/analyzer/lib/src/generated/sdk_io.dart
@@ -173,19 +173,12 @@
* Initialize a newly created SDK to represent the Dart SDK installed in the given directory.
*
* @param sdkDirectory the directory containing the SDK
- */
- DirectoryBasedDartSdk(JavaFile sdkDirectory) : this.con1(sdkDirectory, false);
-
- /**
- * Initialize a newly created SDK to represent the Dart SDK installed in the given directory.
- *
- * @param sdkDirectory the directory containing the SDK
* @param useDart2jsPaths `true` if the dart2js path should be used when it is available
*/
- DirectoryBasedDartSdk.con1(JavaFile sdkDirectory, bool useDart2jsPaths) {
+ DirectoryBasedDartSdk(JavaFile sdkDirectory, [bool useDart2jsPaths = false]) {
this._sdkDirectory = sdkDirectory.getAbsoluteFile();
- initializeSdk();
- initializeLibraryMap(useDart2jsPaths);
+ _initializeSdk();
+ _initializeLibraryMap(useDart2jsPaths);
_analysisContext = new AnalysisContextImpl();
_analysisContext.sourceFactory = new SourceFactory([new DartUriResolver(this)]);
List<String> uris = this.uris;
@@ -196,8 +189,10 @@
_analysisContext.applyChanges(changeSet);
}
+ @override
Source fromEncoding(UriKind kind, Uri uri) => new FileBasedSource.con2(new JavaFile.fromUri(uri), kind);
+ @override
AnalysisContext get context => _analysisContext;
/**
@@ -276,8 +271,10 @@
return file.exists() ? file : null;
}
+ @override
List<SdkLibrary> get sdkLibraries => _libraryMap.sdkLibraries;
+ @override
SdkLibrary getSdkLibrary(String dartUri) => _libraryMap.getLibrary(dartUri);
/**
@@ -286,6 +283,7 @@
*
* @return the revision number of this SDK
*/
+ @override
String get sdkVersion {
if (_sdkVersion == null) {
_sdkVersion = DartSdk.DEFAULT_VERSION;
@@ -306,6 +304,7 @@
*
* @return the library URI's for the libraries defined in this SDK
*/
+ @override
List<String> get uris => _libraryMap.uris;
/**
@@ -337,6 +336,7 @@
*/
bool get isDartiumInstalled => dartiumExecutable != null;
+ @override
Source mapDartUri(String dartUri) {
SdkLibrary library = getSdkLibrary(dartUri);
if (library == null) {
@@ -349,7 +349,7 @@
* Ensure that the dart VM is executable. If it is not, make it executable and log that it was
* necessary for us to do so.
*/
- void ensureVmIsExecutable() {
+ void _ensureVmIsExecutable() {
}
/**
@@ -385,7 +385,7 @@
*
* @param useDart2jsPaths `true` if the dart2js path should be used when it is available
*/
- void initializeLibraryMap(bool useDart2jsPaths) {
+ void _initializeLibraryMap(bool useDart2jsPaths) {
JavaFile librariesFile = new JavaFile.relative(new JavaFile.relative(libraryDirectory, _INTERNAL_DIR), _LIBRARIES_FILE);
try {
String contents = librariesFile.readAsStringSync();
@@ -399,9 +399,9 @@
/**
* Initialize the state of the SDK.
*/
- void initializeSdk() {
+ void _initializeSdk() {
if (!OSUtilities.isWindows()) {
- ensureVmIsExecutable();
+ _ensureVmIsExecutable();
}
}
}
diff --git a/pkg/analyzer/lib/src/generated/source.dart b/pkg/analyzer/lib/src/generated/source.dart
index 3a2cf31..288677b 100644
--- a/pkg/analyzer/lib/src/generated/source.dart
+++ b/pkg/analyzer/lib/src/generated/source.dart
@@ -42,14 +42,17 @@
}
class LocalSourcePredicate_FALSE implements LocalSourcePredicate {
+ @override
bool isLocal(Source source) => false;
}
class LocalSourcePredicate_TRUE implements LocalSourcePredicate {
+ @override
bool isLocal(Source source) => true;
}
class LocalSourcePredicate_NOT_SDK implements LocalSourcePredicate {
+ @override
bool isLocal(Source source) => source.uriKind != UriKind.DART_URI;
}
@@ -93,7 +96,7 @@
try {
Uri uri = parseUriWithException(absoluteUri);
if (uri.isAbsolute) {
- return internalResolveUri(null, uri);
+ return _internalResolveUri(null, uri);
}
} on URISyntaxException catch (exception) {
}
@@ -171,7 +174,7 @@
}
try {
// Force the creation of an escaped URI to deal with spaces, etc.
- return internalResolveUri(containingSource, parseUriWithException(containedUri));
+ return _internalResolveUri(containingSource, parseUriWithException(containedUri));
} on URISyntaxException catch (exception) {
return null;
}
@@ -212,7 +215,7 @@
* @param containedUri the (possibly relative) URI to be resolved against the containing source
* @return the source representing the contained URI
*/
- Source internalResolveUri(Source containingSource, Uri containedUri) {
+ Source _internalResolveUri(Source containingSource, Uri containedUri) {
if (containedUri.isAbsolute) {
for (UriResolver resolver in _resolvers) {
Source result = resolver.resolveAbsolute(containedUri);
@@ -283,6 +286,7 @@
* this source
* @see Object#equals(Object)
*/
+ @override
bool operator ==(Object object);
/**
@@ -309,18 +313,6 @@
TimestampedData<String> get contents;
/**
- * Get the contents of this source and pass it to the given content receiver.
- *
- * Clients should consider using the the method
- * [AnalysisContext#getContentsToReceiver] because contexts can have local
- * overrides of the content of a source that the source is not aware of.
- *
- * @param receiver the content receiver to which the content of this source will be passed
- * @throws Exception if the contents of this source could not be accessed
- */
- void getContentsToReceiver(Source_ContentReceiver receiver);
-
- /**
* Return an encoded representation of this source that can be used to create a source that is
* equal to this source.
*
@@ -377,6 +369,7 @@
* @return a hash code for this source
* @see Object#hashCode()
*/
+ @override
int get hashCode;
/**
@@ -570,6 +563,7 @@
return otherRange.contains(thisEnd);
}
+ @override
bool operator ==(Object obj) {
if (obj is! SourceRange) {
return false;
@@ -599,6 +593,7 @@
*/
SourceRange getTranslated(int delta) => new SourceRange(offset + delta, length);
+ @override
int get hashCode => 31 * offset + length;
/**
@@ -622,6 +617,7 @@
*/
bool startsIn(SourceRange otherRange) => otherRange.contains(offset);
+ @override
String toString() {
JavaStringBuilder builder = new JavaStringBuilder();
builder.append("[offset=");
@@ -683,6 +679,7 @@
this._sdk = sdk;
}
+ @override
Source fromEncoding(UriKind kind, Uri uri) {
if (identical(kind, UriKind.DART_URI)) {
return _sdk.fromEncoding(kind, uri);
@@ -697,6 +694,7 @@
*/
DartSdk get dartSdk => _sdk;
+ @override
Source resolveAbsolute(Uri uri) {
if (!isDartUri(uri)) {
return null;
diff --git a/pkg/analyzer/lib/src/generated/source_io.dart b/pkg/analyzer/lib/src/generated/source_io.dart
index 640903d..711d7fe 100644
--- a/pkg/analyzer/lib/src/generated/source_io.dart
+++ b/pkg/analyzer/lib/src/generated/source_io.dart
@@ -45,14 +45,17 @@
}
class LocalSourcePredicate_FALSE implements LocalSourcePredicate {
+ @override
bool isLocal(Source source) => false;
}
class LocalSourcePredicate_TRUE implements LocalSourcePredicate {
+ @override
bool isLocal(Source source) => true;
}
class LocalSourcePredicate_NOT_SDK implements LocalSourcePredicate {
+ @override
bool isLocal(Source source) => source.uriKind != UriKind.DART_URI;
}
@@ -94,10 +97,13 @@
this._uriKind = uriKind;
}
+ @override
bool operator ==(Object object) => object != null && this.runtimeType == object.runtimeType && _file == (object as FileBasedSource)._file;
+ @override
bool exists() => _file.isFile();
+ @override
TimestampedData<String> get contents {
TimeCounter_TimeCounterHandle handle = PerformanceStatistics.io.start();
try {
@@ -107,15 +113,7 @@
}
}
- void getContentsToReceiver(Source_ContentReceiver receiver) {
- TimeCounter_TimeCounterHandle handle = PerformanceStatistics.io.start();
- try {
- getContentsFromFileToReceiver(receiver);
- } finally {
- handle.stop();
- }
- }
-
+ @override
String get encoding {
if (_encoding == null) {
_encoding = "${_uriKind.encoding}${_file.toURI().toString()}";
@@ -123,18 +121,25 @@
return _encoding;
}
+ @override
String get fullName => _file.getAbsolutePath();
+ @override
int get modificationStamp => _file.lastModified();
+ @override
String get shortName => _file.getName();
+ @override
UriKind get uriKind => _uriKind;
+ @override
int get hashCode => _file.hashCode;
+ @override
bool get isInSystemLibrary => identical(_uriKind, UriKind.DART_URI);
+ @override
Source resolveRelative(Uri containedUri) {
try {
Uri resolvedUri = file.toURI().resolveUri(containedUri);
@@ -144,6 +149,7 @@
return null;
}
+ @override
String toString() {
if (_file == null) {
return "<unknown source>";
@@ -167,17 +173,6 @@
}
/**
- * Get the contents of underlying file and pass it to the given receiver.
- *
- * @param receiver the content receiver to which the content of this source will be passed
- * @throws Exception if the contents of this source could not be accessed
- * @see #getContentsToReceiver(ContentReceiver)
- */
- void getContentsFromFileToReceiver(Source_ContentReceiver receiver) {
- throw new UnsupportedOperationException();
- }
-
- /**
* Return the file represented by this source. This is an internal method that is only intended to
* be used by subclasses of [UriResolver] that are designed to work with file-based sources.
*
@@ -232,6 +227,7 @@
this._packagesDirectories = packagesDirectories;
}
+ @override
Source fromEncoding(UriKind kind, Uri uri) {
if (identical(kind, UriKind.PACKAGE_SELF_URI) || identical(kind, UriKind.PACKAGE_URI)) {
return new FileBasedSource.con2(new JavaFile.fromUri(uri), kind);
@@ -239,6 +235,7 @@
return null;
}
+ @override
Source resolveAbsolute(Uri uri) {
if (!isPackageUri(uri)) {
return null;
@@ -269,13 +266,14 @@
JavaFile resolvedFile = new JavaFile.relative(packagesDirectory, path);
if (resolvedFile.exists()) {
JavaFile canonicalFile = getCanonicalFile(packagesDirectory, pkgName, relPath);
- UriKind uriKind = isSelfReference(packagesDirectory, canonicalFile) ? UriKind.PACKAGE_SELF_URI : UriKind.PACKAGE_URI;
+ UriKind uriKind = _isSelfReference(packagesDirectory, canonicalFile) ? UriKind.PACKAGE_SELF_URI : UriKind.PACKAGE_URI;
return new FileBasedSource.con2(canonicalFile, uriKind);
}
}
return new FileBasedSource.con2(getCanonicalFile(_packagesDirectories[0], pkgName, relPath), UriKind.PACKAGE_URI);
}
+ @override
Uri restoreAbsolute(Source source) {
if (source is FileBasedSource) {
String sourcePath = source.file.getPath();
@@ -326,7 +324,7 @@
* @return `true` if "file" was found in "packagesDir", and it is part of the "lib" folder
* of the application that contains in this "packagesDir".
*/
- bool isSelfReference(JavaFile packagesDir, JavaFile file) {
+ bool _isSelfReference(JavaFile packagesDir, JavaFile file) {
JavaFile rootDir = packagesDir.getParentFile();
if (rootDir == null) {
return false;
@@ -349,7 +347,7 @@
* @param path the path to which the file separator is to be added
* @return a path that ends with the system file separator
*/
- static String appendFileSeparator(String path) {
+ static String _appendFileSeparator(String path) {
if (path == null || path.length <= 0 || path.codeUnitAt(path.length - 1) == JavaFile.separatorChar) {
return path;
}
@@ -378,11 +376,13 @@
* @param path the path (not `null` and not empty)
*/
DirectoryBasedSourceContainer.con2(String path) {
- this._path = appendFileSeparator(path);
+ this._path = _appendFileSeparator(path);
}
+ @override
bool contains(Source source) => source.fullName.startsWith(_path);
+ @override
bool operator ==(Object obj) => (obj is DirectoryBasedSourceContainer) && obj.path == path;
/**
@@ -392,8 +392,10 @@
*/
String get path => _path;
+ @override
int get hashCode => _path.hashCode;
+ @override
String toString() => "SourceContainer[${_path}]";
}
@@ -414,6 +416,7 @@
*/
static bool isFileUri(Uri uri) => uri.scheme == FILE_SCHEME;
+ @override
Source fromEncoding(UriKind kind, Uri uri) {
if (identical(kind, UriKind.FILE_URI)) {
return new FileBasedSource.con2(new JavaFile.fromUri(uri), kind);
@@ -421,6 +424,7 @@
return null;
}
+ @override
Source resolveAbsolute(Uri uri) {
if (!isFileUri(uri)) {
return null;
diff --git a/pkg/analyzer/lib/src/generated/utilities_collection.dart b/pkg/analyzer/lib/src/generated/utilities_collection.dart
index 6a74d97..b8b7890 100644
--- a/pkg/analyzer/lib/src/generated/utilities_collection.dart
+++ b/pkg/analyzer/lib/src/generated/utilities_collection.dart
@@ -24,7 +24,7 @@
* @throws IndexOutOfBoundsException if the index is not between zero (0) and 31, inclusive
*/
static bool get(int array, int index) {
- checkIndex(index);
+ _checkIndex(index);
return (array & (1 << index)) > 0;
}
@@ -48,7 +48,7 @@
* @throws IndexOutOfBoundsException if the index is not between zero (0) and 31, inclusive
*/
static int set(int array, int index, bool value) {
- checkIndex(index);
+ _checkIndex(index);
if (value) {
return array | (1 << index);
} else {
@@ -73,7 +73,7 @@
*
* @throws IndexOutOfBoundsException if the index is not between zero (0) and 31, inclusive
*/
- static void checkIndex(int index) {
+ static void _checkIndex(int index) {
if (index < 0 || index > 30) {
throw new RangeError("Index not between 0 and 30: ${index}");
}
@@ -112,6 +112,333 @@
}
/**
+ * Instances of the class `DirectedGraph` implement a directed graph in which the nodes are
+ * arbitrary (client provided) objects and edges are represented implicitly. The graph will allow an
+ * edge from any node to any other node, including itself, but will not represent multiple edges
+ * between the same pair of nodes.
+ *
+ * @param N the type of the nodes in the graph
+ */
+class DirectedGraph<N> {
+ /**
+ * The table encoding the edges in the graph. An edge is represented by an entry mapping the head
+ * to a set of tails. Nodes that are not the head of any edge are represented by an entry mapping
+ * the node to an empty set of tails.
+ */
+ Map<N, Set<N>> _edges = new Map<N, Set<N>>();
+
+ /**
+ * Add an edge from the given head node to the given tail node. Both nodes will be a part of the
+ * graph after this method is invoked, whether or not they were before.
+ *
+ * @param head the node at the head of the edge
+ * @param tail the node at the tail of the edge
+ */
+ void addEdge(N head, N tail) {
+ //
+ // First, ensure that the tail is a node known to the graph.
+ //
+ if (_edges[tail] == null) {
+ _edges[tail] = new Set<N>();
+ }
+ //
+ // Then create the edge.
+ //
+ Set<N> tails = _edges[head];
+ if (tails == null) {
+ tails = new Set<N>();
+ _edges[head] = tails;
+ }
+ tails.add(tail);
+ }
+
+ /**
+ * Add the given node to the set of nodes in the graph.
+ *
+ * @param node the node to be added
+ */
+ void addNode(N node) {
+ Set<N> tails = _edges[node];
+ if (tails == null) {
+ _edges[node] = new Set<N>();
+ }
+ }
+
+ /**
+ * Return a list of nodes that form a cycle, or `null` if there are no cycles in this graph.
+ *
+ * @return a list of nodes that form a cycle
+ */
+ List<N> findCycle() => null;
+
+ /**
+ * Return a list of nodes that form a cycle containing the given node. If the node is not part of
+ * this graph, then a list containing only the node itself will be returned.
+ *
+ * @return a list of nodes that form a cycle containing the given node
+ */
+ List<N> findCycleContaining(N node) {
+ if (node == null) {
+ throw new IllegalArgumentException();
+ }
+ DirectedGraph_SccFinder<N> finder = new DirectedGraph_SccFinder<N>(this);
+ return finder.componentContaining(node);
+ }
+
+ /**
+ * Return the number of nodes in this graph.
+ *
+ * @return the number of nodes in this graph
+ */
+ int get nodeCount => _edges.length;
+
+ /**
+ * Return a set containing the tails of edges that have the given node as their head. The set will
+ * be empty if there are no such edges or if the node is not part of the graph. Clients must not
+ * modify the returned set.
+ *
+ * @param head the node at the head of all of the edges whose tails are to be returned
+ * @return a set containing the tails of edges that have the given node as their head
+ */
+ Set<N> getTails(N head) {
+ Set<N> tails = _edges[head];
+ if (tails == null) {
+ return new Set<N>();
+ }
+ return tails;
+ }
+
+ /**
+ * Return `true` if this graph is empty.
+ *
+ * @return `true` if this graph is empty
+ */
+ bool get isEmpty => _edges.isEmpty;
+
+ /**
+ * Remove all of the given nodes from this graph. As a consequence, any edges for which those
+ * nodes were either a head or a tail will also be removed.
+ *
+ * @param nodes the nodes to be removed
+ */
+ void removeAllNodes(List<N> nodes) {
+ for (N node in nodes) {
+ removeNode(node);
+ }
+ }
+
+ /**
+ * Remove the edge from the given head node to the given tail node. If there was no such edge then
+ * the graph will be unmodified: the number of edges will be the same and the set of nodes will be
+ * the same (neither node will either be added or removed).
+ *
+ * @param head the node at the head of the edge
+ * @param tail the node at the tail of the edge
+ * @return `true` if the graph was modified as a result of this operation
+ */
+ void removeEdge(N head, N tail) {
+ Set<N> tails = _edges[head];
+ if (tails != null) {
+ tails.remove(tail);
+ }
+ }
+
+ /**
+ * Remove the given node from this graph. As a consequence, any edges for which that node was
+ * either a head or a tail will also be removed.
+ *
+ * @param node the node to be removed
+ */
+ void removeNode(N node) {
+ _edges.remove(node);
+ for (Set<N> tails in _edges.values) {
+ tails.remove(node);
+ }
+ }
+
+ /**
+ * Find one node (referred to as a sink node) that has no outgoing edges (that is, for which there
+ * are no edges that have that node as the head of the edge) and remove it from this graph. Return
+ * the node that was removed, or `null` if there are no such nodes either because the graph
+ * is empty or because every node in the graph has at least one outgoing edge. As a consequence of
+ * removing the node from the graph any edges for which that node was a tail will also be removed.
+ *
+ * @return the sink node that was removed
+ */
+ N removeSink() {
+ N sink = _findSink();
+ if (sink == null) {
+ return null;
+ }
+ removeNode(sink);
+ return sink;
+ }
+
+ /**
+ * Return one node that has no outgoing edges (that is, for which there are no edges that have
+ * that node as the head of the edge), or `null` if there are no such nodes.
+ *
+ * @return a sink node
+ */
+ N _findSink() {
+ for (N key in _edges.keys) {
+ if (_edges[key].isEmpty) return key;
+ }
+ return null;
+ }
+}
+
+/**
+ * Instances of the class `NodeInfo` are used by the [SccFinder] to maintain
+ * information about the nodes that have been examined.
+ *
+ * @param N the type of the nodes corresponding to the entries
+ */
+class DirectedGraph_NodeInfo<N> {
+ /**
+ * The depth of this node.
+ */
+ int index = 0;
+
+ /**
+ * The depth of the first node in a cycle.
+ */
+ int lowlink = 0;
+
+ /**
+ * A flag indicating whether the corresponding node is on the stack. Used to remove the need for
+ * searching a collection for the node each time the question needs to be asked.
+ */
+ bool onStack = false;
+
+ /**
+ * The component that contains the corresponding node.
+ */
+ List<N> component;
+
+ /**
+ * Initialize a newly created information holder to represent a node at the given depth.
+ *
+ * @param depth the depth of the node being represented
+ */
+ DirectedGraph_NodeInfo(int depth) {
+ index = depth;
+ lowlink = depth;
+ onStack = false;
+ }
+}
+
+/**
+ * Instances of the class `SccFinder` implement Tarjan's Algorithm for finding the strongly
+ * connected components in a graph.
+ */
+class DirectedGraph_SccFinder<N> {
+ /**
+ * The graph to work with.
+ */
+ DirectedGraph<N> _graph;
+
+ /**
+ * The index used to uniquely identify the depth of nodes.
+ */
+ int _index = 0;
+
+ /**
+ * The stack of nodes that are being visited in order to identify components.
+ */
+ List<N> _stack = new List<N>();
+
+ /**
+ * A table mapping nodes to information about the nodes that is used by this algorithm.
+ */
+ Map<N, DirectedGraph_NodeInfo<N>> _nodeMap = new Map<N, DirectedGraph_NodeInfo<N>>();
+
+ /**
+ * Initialize a newly created finder.
+ */
+ DirectedGraph_SccFinder(DirectedGraph<N> graph) : super() {
+ this._graph = graph;
+ }
+
+ /**
+ * Return a list containing the nodes that are part of the strongly connected component that
+ * contains the given node.
+ *
+ * @param node the node used to identify the strongly connected component to be returned
+ * @return the nodes that are part of the strongly connected component that contains the given
+ * node
+ */
+ List<N> componentContaining(N node) => _strongConnect(node).component;
+
+ /**
+ * Remove and return the top-most element from the stack.
+ *
+ * @return the element that was removed
+ */
+ N _pop() {
+ N node = _stack.removeAt(_stack.length - 1);
+ _nodeMap[node].onStack = false;
+ return node;
+ }
+
+ /**
+ * Add the given node to the stack.
+ *
+ * @param node the node to be added to the stack
+ */
+ void _push(N node) {
+ _nodeMap[node].onStack = true;
+ _stack.add(node);
+ }
+
+ /**
+ * Compute the strongly connected component that contains the given node as well as any
+ * components containing nodes that are reachable from the given component.
+ *
+ * @param v the node from which the search will begin
+ * @return the information about the given node
+ */
+ DirectedGraph_NodeInfo<N> _strongConnect(N v) {
+ //
+ // Set the depth index for v to the smallest unused index
+ //
+ DirectedGraph_NodeInfo<N> vInfo = new DirectedGraph_NodeInfo<N>(_index++);
+ _nodeMap[v] = vInfo;
+ _push(v);
+ //
+ // Consider successors of v
+ //
+ Set<N> tails = _graph._edges[v];
+ if (tails != null) {
+ for (N w in tails) {
+ DirectedGraph_NodeInfo<N> wInfo = _nodeMap[w];
+ if (wInfo == null) {
+ // Successor w has not yet been visited; recurse on it
+ wInfo = _strongConnect(w);
+ vInfo.lowlink = Math.min(vInfo.lowlink, wInfo.lowlink);
+ } else if (wInfo.onStack) {
+ // Successor w is in stack S and hence in the current SCC
+ vInfo.lowlink = Math.min(vInfo.lowlink, wInfo.index);
+ }
+ }
+ }
+ //
+ // If v is a root node, pop the stack and generate an SCC
+ //
+ if (vInfo.lowlink == vInfo.index) {
+ List<N> component = new List<N>();
+ N w;
+ do {
+ w = _pop();
+ component.add(w);
+ _nodeMap[w].component = component;
+ } while (w != v);
+ }
+ return vInfo;
+ }
+}
+
+/**
* The class `ListUtilities` defines utility methods useful for working with [List
].
*/
diff --git a/pkg/analyzer/lib/src/generated/utilities_dart.dart b/pkg/analyzer/lib/src/generated/utilities_dart.dart
index 76a711a..aef7473 100644
--- a/pkg/analyzer/lib/src/generated/utilities_dart.dart
+++ b/pkg/analyzer/lib/src/generated/utilities_dart.dart
@@ -26,21 +26,12 @@
/**
* A flag indicating whether this is an optional parameter.
*/
- bool _isOptional2 = false;
+ final bool isOptional;
/**
* Initialize a newly created kind with the given state.
*
* @param isOptional `true` if this is an optional parameter
*/
- ParameterKind(String name, int ordinal, bool isOptional) : super(name, ordinal) {
- this._isOptional2 = isOptional;
- }
-
- /**
- * Return `true` if this is an optional parameter.
- *
- * @return `true` if this is an optional parameter
- */
- bool get isOptional => _isOptional2;
+ ParameterKind(String name, int ordinal, this.isOptional) : super(name, ordinal);
}
\ No newline at end of file
diff --git a/pkg/analyzer/lib/src/services/formatter_impl.dart b/pkg/analyzer/lib/src/services/formatter_impl.dart
index f687e6f..900b1d27 100644
--- a/pkg/analyzer/lib/src/services/formatter_impl.dart
+++ b/pkg/analyzer/lib/src/services/formatter_impl.dart
@@ -302,16 +302,13 @@
}
-// Cached parser for testing token types.
-final tokenTester = new Parser(null,null);
+/// Test for token type.
+bool tokenIs(Token token, TokenType type) =>
+ token != null && token.type == type;
/// Test if this token is an EOF token.
bool isEOF(Token token) => tokenIs(token, TokenType.EOF);
-/// Test for token type.
-bool tokenIs(Token token, TokenType type) =>
- token != null && tokenTester.matchesAny(token, [type]);
-
/// Test if this token is a GT token.
bool isGT(Token token) => tokenIs(token, TokenType.GT);
@@ -927,7 +924,11 @@
space();
token(node.elseKeyword);
space();
- printAsBlock(node.elseStatement);
+ if (node.elseStatement is IfStatement) {
+ visit(node.elseStatement);
+ } else {
+ printAsBlock(node.elseStatement);
+ }
} else {
visit(node.thenStatement);
}
diff --git a/pkg/analyzer/lib/src/services/writer.dart b/pkg/analyzer/lib/src/services/writer.dart
index 08cde1f..4e8cef5 100644
--- a/pkg/analyzer/lib/src/services/writer.dart
+++ b/pkg/analyzer/lib/src/services/writer.dart
@@ -35,7 +35,8 @@
bool isEmpty() => tokens.isEmpty;
- bool isWhitespace() => tokens.every((tok) => tok is SpaceToken);
+ bool isWhitespace() => tokens.every(
+ (tok) => tok is SpaceToken || tok is TabToken);
void indent(int n) {
tokens.insert(0,
@@ -298,12 +299,14 @@
final String lineSeparator;
int indentCount = 0;
+ final int spacesPerIndent;
+ final bool useTabs;
LinePrinter linePrinter;
LineToken _lastToken;
SourceWriter({this.indentCount: 0, this.lineSeparator: NEW_LINE,
- bool useTabs: false, int spacesPerIndent: 2, int maxLineLength: 80}) {
+ this.useTabs: false, this.spacesPerIndent: 2, int maxLineLength: 80}) {
if (maxLineLength > 0) {
linePrinter = new SimpleLineBreaker(maxLineLength, (n) =>
getIndentString(n, useTabs: useTabs, spacesPerIndent: spacesPerIndent));
@@ -368,7 +371,8 @@
}
}
- Line newLine() => new Line(indentLevel: indentCount, printer: linePrinter);
+ Line newLine() => new Line(indentLevel: indentCount, useTabs: useTabs,
+ spacesPerIndent: spacesPerIndent, printer: linePrinter);
String toString() {
var source = new StringBuffer(buffer.toString());
diff --git a/pkg/analyzer/lib/src/string_source.dart b/pkg/analyzer/lib/src/string_source.dart
index e3e91c7..24d55c1 100644
--- a/pkg/analyzer/lib/src/string_source.dart
+++ b/pkg/analyzer/lib/src/string_source.dart
@@ -26,9 +26,6 @@
bool exists() => true;
- void getContentsToReceiver(Source_ContentReceiver receiver) =>
- receiver.accept(_contents, modificationStamp);
-
TimestampedData<String> get contents => new TimestampedData(modificationStamp, _contents);
String get encoding => throw new UnsupportedError("StringSource doesn't support "
diff --git a/pkg/analyzer/pubspec.yaml b/pkg/analyzer/pubspec.yaml
index a219901..9b33aa2 100644
--- a/pkg/analyzer/pubspec.yaml
+++ b/pkg/analyzer/pubspec.yaml
@@ -1,5 +1,5 @@
name: analyzer
-version: 0.13.0-dev.4
+version: 0.13.0-dev.7
author: Dart Team <misc@dartlang.org>
description: Static analyzer for Dart.
homepage: http://www.dartlang.org
diff --git a/pkg/analyzer/test/error_test.dart b/pkg/analyzer/test/error_test.dart
index 4a513d9..07befe7 100644
--- a/pkg/analyzer/test/error_test.dart
+++ b/pkg/analyzer/test/error_test.dart
@@ -13,50 +13,41 @@
isNull);
});
+ test("an empty Dart file doesn't throw any errors", () {
+ expect(
+ errorsForFile(''),
+ isNull);
+ });
+
test("an error on the first line", () {
expect(errorsForFile('void foo;\n'),
- equals('Error on line 1 of test.dart: ...\n'
- 'void foo;\n'
- '^^^^\n'));
+ equals("Error in test.dart: Variables cannot have a type of 'void'\n"));
});
test("an error on the last line", () {
expect(errorsForFile('\nvoid foo;'),
- equals('Error on line 2 of test.dart: ...\n'
- 'void foo;\n'
- '^^^^\n'));
+ equals("Error in test.dart: Variables cannot have a type of 'void'\n"));
});
test("an error in the middle", () {
expect(errorsForFile('\nvoid foo;\n'),
- equals('Error on line 2 of test.dart: ...\n'
- 'void foo;\n'
- '^^^^\n'));
+ equals("Error in test.dart: Variables cannot have a type of 'void'\n"));
});
var veryLongString = new List.filled(107, ' ').join('');
test("an error at the end of a very long line", () {
expect(errorsForFile('$veryLongString void foo;'),
- equals('Error on line 1 of test.dart: ...\n'
- '...$veryLongString void foo;\n'
- '$veryLongString ^^^^\n'));
+ equals("Error in test.dart: Variables cannot have a type of 'void'\n"));
});
test("an error at the beginning of a very long line", () {
expect(errorsForFile('void foo; $veryLongString'),
- equals('Error on line 1 of test.dart: ...\n'
- 'void foo; $veryLongString...\n'
- '^^^^\n'));
+ equals("Error in test.dart: Variables cannot have a type of 'void'\n"));
});
test("an error in the middle of a very long line", () {
expect(errorsForFile('$veryLongString void foo;$veryLongString'),
- equals('Error on line 1 of test.dart: ...\n'
- '... '
- 'void foo; '
- '...\n'
- ' '
- '^^^^\n'));
+ equals("Error in test.dart: Variables cannot have a type of 'void'\n"));
});
}
diff --git a/pkg/analyzer/test/generated/ast_test.dart b/pkg/analyzer/test/generated/ast_test.dart
index f1f60ae..e215fdb 100644
--- a/pkg/analyzer/test/generated/ast_test.dart
+++ b/pkg/analyzer/test/generated/ast_test.dart
@@ -23,7 +23,7 @@
class NodeLocatorTest extends ParserTestCase {
void test_range() {
CompilationUnit unit = ParserTestCase.parseCompilationUnit("library myLib;", []);
- assertLocate(unit, 4, 10, (node) => node is LibraryDirective, LibraryDirective);
+ _assertLocate(unit, 4, 10, (node) => node is LibraryDirective, LibraryDirective);
}
void test_searchWithin_null() {
@@ -33,7 +33,7 @@
void test_searchWithin_offset() {
CompilationUnit unit = ParserTestCase.parseCompilationUnit("library myLib;", []);
- assertLocate(unit, 10, 10, (node) => node is SimpleIdentifier, SimpleIdentifier);
+ _assertLocate(unit, 10, 10, (node) => node is SimpleIdentifier, SimpleIdentifier);
}
void test_searchWithin_offsetAfterNode() {
@@ -50,7 +50,7 @@
JUnitTestCase.assertNull(node);
}
- void assertLocate(CompilationUnit unit, int start, int end, Predicate<AstNode> predicate, Type expectedClass) {
+ void _assertLocate(CompilationUnit unit, int start, int end, Predicate<AstNode> predicate, Type expectedClass) {
NodeLocator locator = new NodeLocator.con2(start, end);
AstNode node = locator.searchWithin(unit);
JUnitTestCase.assertNotNull(node);
@@ -401,9 +401,10 @@
static ConstructorName constructorName(TypeName type, String name) => new ConstructorName(type, name == null ? null : TokenFactory.tokenFromType(TokenType.PERIOD), name == null ? null : identifier3(name));
- static ContinueStatement continueStatement() => new ContinueStatement(TokenFactory.tokenFromKeyword(Keyword.CONTINUE), null, TokenFactory.tokenFromType(TokenType.SEMICOLON));
-
- static ContinueStatement continueStatement2(String label) => new ContinueStatement(TokenFactory.tokenFromKeyword(Keyword.CONTINUE), identifier3(label), TokenFactory.tokenFromType(TokenType.SEMICOLON));
+ static ContinueStatement continueStatement([String label]) {
+ SimpleIdentifier labelNode = label == null ? null : identifier3(label);
+ return new ContinueStatement(TokenFactory.tokenFromKeyword(Keyword.CONTINUE), labelNode, TokenFactory.tokenFromType(TokenType.SEMICOLON));
+ }
static DeclaredIdentifier declaredIdentifier(Keyword keyword, String identifier) => declaredIdentifier2(keyword, null, identifier);
@@ -435,11 +436,9 @@
static FieldDeclaration fieldDeclaration2(bool isStatic, Keyword keyword, List<VariableDeclaration> variables) => fieldDeclaration(isStatic, keyword, null, variables);
- static FieldFormalParameter fieldFormalParameter(Keyword keyword, TypeName type, String identifier) => new FieldFormalParameter(null, null, keyword == null ? null : TokenFactory.tokenFromKeyword(keyword), type, TokenFactory.tokenFromKeyword(Keyword.THIS), TokenFactory.tokenFromType(TokenType.PERIOD), identifier3(identifier), null);
+ static FieldFormalParameter fieldFormalParameter(Keyword keyword, TypeName type, String identifier, [FormalParameterList parameterList]) => new FieldFormalParameter(null, null, keyword == null ? null : TokenFactory.tokenFromKeyword(keyword), type, TokenFactory.tokenFromKeyword(Keyword.THIS), TokenFactory.tokenFromType(TokenType.PERIOD), identifier3(identifier), parameterList);
- static FieldFormalParameter fieldFormalParameter2(Keyword keyword, TypeName type, String identifier, FormalParameterList parameterList) => new FieldFormalParameter(null, null, keyword == null ? null : TokenFactory.tokenFromKeyword(keyword), type, TokenFactory.tokenFromKeyword(Keyword.THIS), TokenFactory.tokenFromType(TokenType.PERIOD), identifier3(identifier), parameterList);
-
- static FieldFormalParameter fieldFormalParameter3(String identifier) => fieldFormalParameter(null, null, identifier);
+ static FieldFormalParameter fieldFormalParameter2(String identifier) => fieldFormalParameter(null, null, identifier);
static ForEachStatement forEachStatement(DeclaredIdentifier loopVariable, Expression iterator, Statement body) => new ForEachStatement.con1(TokenFactory.tokenFromKeyword(Keyword.FOR), TokenFactory.tokenFromType(TokenType.OPEN_PAREN), loopVariable, TokenFactory.tokenFromKeyword(Keyword.IN), iterator, TokenFactory.tokenFromType(TokenType.CLOSE_PAREN), body);
@@ -761,7 +760,7 @@
}
void test_inDeclarationContext_fieldFormalParameter() {
- SimpleIdentifier identifier = AstFactory.fieldFormalParameter3("p").identifier;
+ SimpleIdentifier identifier = AstFactory.fieldFormalParameter2("p").identifier;
JUnitTestCase.assertFalse(identifier.inDeclarationContext());
}
@@ -818,14 +817,14 @@
void test_inGetterContext() {
for (WrapperKind wrapper in WrapperKind.values) {
for (AssignmentKind assignment in AssignmentKind.values) {
- SimpleIdentifier identifier = createIdentifier(wrapper, assignment);
+ SimpleIdentifier identifier = _createIdentifier(wrapper, assignment);
if (identical(assignment, AssignmentKind.SIMPLE_LEFT) && wrapper != WrapperKind.PREFIXED_LEFT && wrapper != WrapperKind.PROPERTY_LEFT) {
if (identifier.inGetterContext()) {
- JUnitTestCase.fail("Expected ${topMostNode(identifier).toSource()} to be false");
+ JUnitTestCase.fail("Expected ${_topMostNode(identifier).toSource()} to be false");
}
} else {
if (!identifier.inGetterContext()) {
- JUnitTestCase.fail("Expected ${topMostNode(identifier).toSource()} to be true");
+ JUnitTestCase.fail("Expected ${_topMostNode(identifier).toSource()} to be true");
}
}
}
@@ -842,21 +841,21 @@
void test_inSetterContext() {
for (WrapperKind wrapper in WrapperKind.values) {
for (AssignmentKind assignment in AssignmentKind.values) {
- SimpleIdentifier identifier = createIdentifier(wrapper, assignment);
+ SimpleIdentifier identifier = _createIdentifier(wrapper, assignment);
if (identical(wrapper, WrapperKind.PREFIXED_LEFT) || identical(wrapper, WrapperKind.PROPERTY_LEFT) || identical(assignment, AssignmentKind.BINARY) || identical(assignment, AssignmentKind.COMPOUND_RIGHT) || identical(assignment, AssignmentKind.PREFIX_NOT) || identical(assignment, AssignmentKind.SIMPLE_RIGHT) || identical(assignment, AssignmentKind.NONE)) {
if (identifier.inSetterContext()) {
- JUnitTestCase.fail("Expected ${topMostNode(identifier).toSource()} to be false");
+ JUnitTestCase.fail("Expected ${_topMostNode(identifier).toSource()} to be false");
}
} else {
if (!identifier.inSetterContext()) {
- JUnitTestCase.fail("Expected ${topMostNode(identifier).toSource()} to be true");
+ JUnitTestCase.fail("Expected ${_topMostNode(identifier).toSource()} to be true");
}
}
}
}
}
- SimpleIdentifier createIdentifier(WrapperKind wrapper, AssignmentKind assignment) {
+ SimpleIdentifier _createIdentifier(WrapperKind wrapper, AssignmentKind assignment) {
SimpleIdentifier identifier = AstFactory.identifier3("a");
Expression expression = identifier;
while (true) {
@@ -904,7 +903,7 @@
* @param identifier the identifier in the AST structure being traversed
* @return the root of the AST structure containing the identifier
*/
- AstNode topMostNode(SimpleIdentifier identifier) {
+ AstNode _topMostNode(SimpleIdentifier identifier) {
AstNode child = identifier;
AstNode parent = identifier.parent;
while (parent != null) {
@@ -1105,6 +1104,7 @@
BreadthFirstVisitor_BreadthFirstVisitorTest_testIt(this.nodes) : super();
+ @override
Object visitNode(AstNode node) {
nodes.add(node);
return super.visitNode(node);
@@ -1419,234 +1419,234 @@
class ConstantEvaluatorTest extends ParserTestCase {
void fail_constructor() {
- Object value = getConstantValue("?");
+ Object value = _getConstantValue("?");
JUnitTestCase.assertEquals(null, value);
}
void fail_identifier_class() {
- Object value = getConstantValue("?");
+ Object value = _getConstantValue("?");
JUnitTestCase.assertEquals(null, value);
}
void fail_identifier_function() {
- Object value = getConstantValue("?");
+ Object value = _getConstantValue("?");
JUnitTestCase.assertEquals(null, value);
}
void fail_identifier_static() {
- Object value = getConstantValue("?");
+ Object value = _getConstantValue("?");
JUnitTestCase.assertEquals(null, value);
}
void fail_identifier_staticMethod() {
- Object value = getConstantValue("?");
+ Object value = _getConstantValue("?");
JUnitTestCase.assertEquals(null, value);
}
void fail_identifier_topLevel() {
- Object value = getConstantValue("?");
+ Object value = _getConstantValue("?");
JUnitTestCase.assertEquals(null, value);
}
void fail_identifier_typeParameter() {
- Object value = getConstantValue("?");
+ Object value = _getConstantValue("?");
JUnitTestCase.assertEquals(null, value);
}
void test_binary_bitAnd() {
- Object value = getConstantValue("74 & 42");
+ Object value = _getConstantValue("74 & 42");
EngineTestCase.assertInstanceOf((obj) => obj is int, int, value);
JUnitTestCase.assertEquals(74 & 42, value as int);
}
void test_binary_bitOr() {
- Object value = getConstantValue("74 | 42");
+ Object value = _getConstantValue("74 | 42");
EngineTestCase.assertInstanceOf((obj) => obj is int, int, value);
JUnitTestCase.assertEquals(74 | 42, value as int);
}
void test_binary_bitXor() {
- Object value = getConstantValue("74 ^ 42");
+ Object value = _getConstantValue("74 ^ 42");
EngineTestCase.assertInstanceOf((obj) => obj is int, int, value);
JUnitTestCase.assertEquals(74 ^ 42, value as int);
}
void test_binary_divide_double() {
- Object value = getConstantValue("3.2 / 2.3");
+ Object value = _getConstantValue("3.2 / 2.3");
EngineTestCase.assertInstanceOf((obj) => obj is double, double, value);
JUnitTestCase.assertEquals(3.2 / 2.3, value as double);
}
void test_binary_divide_integer() {
- Object value = getConstantValue("3 / 2");
+ Object value = _getConstantValue("3 / 2");
EngineTestCase.assertInstanceOf((obj) => obj is int, int, value);
JUnitTestCase.assertEquals(1, value as int);
}
void test_binary_equal_boolean() {
- Object value = getConstantValue("true == false");
+ Object value = _getConstantValue("true == false");
JUnitTestCase.assertEquals(false, value);
}
void test_binary_equal_integer() {
- Object value = getConstantValue("2 == 3");
+ Object value = _getConstantValue("2 == 3");
JUnitTestCase.assertEquals(false, value);
}
void test_binary_equal_invalidLeft() {
- Object value = getConstantValue("a == 3");
+ Object value = _getConstantValue("a == 3");
JUnitTestCase.assertEquals(ConstantEvaluator.NOT_A_CONSTANT, value);
}
void test_binary_equal_invalidRight() {
- Object value = getConstantValue("2 == a");
+ Object value = _getConstantValue("2 == a");
JUnitTestCase.assertEquals(ConstantEvaluator.NOT_A_CONSTANT, value);
}
void test_binary_equal_string() {
- Object value = getConstantValue("'a' == 'b'");
+ Object value = _getConstantValue("'a' == 'b'");
JUnitTestCase.assertEquals(false, value);
}
void test_binary_greaterThan() {
- Object value = getConstantValue("2 > 3");
+ Object value = _getConstantValue("2 > 3");
JUnitTestCase.assertEquals(false, value);
}
void test_binary_greaterThanOrEqual() {
- Object value = getConstantValue("2 >= 3");
+ Object value = _getConstantValue("2 >= 3");
JUnitTestCase.assertEquals(false, value);
}
void test_binary_leftShift() {
- Object value = getConstantValue("16 << 2");
+ Object value = _getConstantValue("16 << 2");
EngineTestCase.assertInstanceOf((obj) => obj is int, int, value);
JUnitTestCase.assertEquals(64, value as int);
}
void test_binary_lessThan() {
- Object value = getConstantValue("2 < 3");
+ Object value = _getConstantValue("2 < 3");
JUnitTestCase.assertEquals(true, value);
}
void test_binary_lessThanOrEqual() {
- Object value = getConstantValue("2 <= 3");
+ Object value = _getConstantValue("2 <= 3");
JUnitTestCase.assertEquals(true, value);
}
void test_binary_logicalAnd() {
- Object value = getConstantValue("true && false");
+ Object value = _getConstantValue("true && false");
JUnitTestCase.assertEquals(false, value);
}
void test_binary_logicalOr() {
- Object value = getConstantValue("true || false");
+ Object value = _getConstantValue("true || false");
JUnitTestCase.assertEquals(true, value);
}
void test_binary_minus_double() {
- Object value = getConstantValue("3.2 - 2.3");
+ Object value = _getConstantValue("3.2 - 2.3");
EngineTestCase.assertInstanceOf((obj) => obj is double, double, value);
JUnitTestCase.assertEquals(3.2 - 2.3, value as double);
}
void test_binary_minus_integer() {
- Object value = getConstantValue("3 - 2");
+ Object value = _getConstantValue("3 - 2");
EngineTestCase.assertInstanceOf((obj) => obj is int, int, value);
JUnitTestCase.assertEquals(1, value as int);
}
void test_binary_notEqual_boolean() {
- Object value = getConstantValue("true != false");
+ Object value = _getConstantValue("true != false");
JUnitTestCase.assertEquals(true, value);
}
void test_binary_notEqual_integer() {
- Object value = getConstantValue("2 != 3");
+ Object value = _getConstantValue("2 != 3");
JUnitTestCase.assertEquals(true, value);
}
void test_binary_notEqual_invalidLeft() {
- Object value = getConstantValue("a != 3");
+ Object value = _getConstantValue("a != 3");
JUnitTestCase.assertEquals(ConstantEvaluator.NOT_A_CONSTANT, value);
}
void test_binary_notEqual_invalidRight() {
- Object value = getConstantValue("2 != a");
+ Object value = _getConstantValue("2 != a");
JUnitTestCase.assertEquals(ConstantEvaluator.NOT_A_CONSTANT, value);
}
void test_binary_notEqual_string() {
- Object value = getConstantValue("'a' != 'b'");
+ Object value = _getConstantValue("'a' != 'b'");
JUnitTestCase.assertEquals(true, value);
}
void test_binary_plus_double() {
- Object value = getConstantValue("2.3 + 3.2");
+ Object value = _getConstantValue("2.3 + 3.2");
EngineTestCase.assertInstanceOf((obj) => obj is double, double, value);
JUnitTestCase.assertEquals(2.3 + 3.2, value as double);
}
void test_binary_plus_integer() {
- Object value = getConstantValue("2 + 3");
+ Object value = _getConstantValue("2 + 3");
EngineTestCase.assertInstanceOf((obj) => obj is int, int, value);
JUnitTestCase.assertEquals(5, value as int);
}
void test_binary_remainder_double() {
- Object value = getConstantValue("3.2 % 2.3");
+ Object value = _getConstantValue("3.2 % 2.3");
EngineTestCase.assertInstanceOf((obj) => obj is double, double, value);
JUnitTestCase.assertEquals(3.2 % 2.3, value as double);
}
void test_binary_remainder_integer() {
- Object value = getConstantValue("8 % 3");
+ Object value = _getConstantValue("8 % 3");
EngineTestCase.assertInstanceOf((obj) => obj is int, int, value);
JUnitTestCase.assertEquals(2, value as int);
}
void test_binary_rightShift() {
- Object value = getConstantValue("64 >> 2");
+ Object value = _getConstantValue("64 >> 2");
EngineTestCase.assertInstanceOf((obj) => obj is int, int, value);
JUnitTestCase.assertEquals(16, value as int);
}
void test_binary_times_double() {
- Object value = getConstantValue("2.3 * 3.2");
+ Object value = _getConstantValue("2.3 * 3.2");
EngineTestCase.assertInstanceOf((obj) => obj is double, double, value);
JUnitTestCase.assertEquals(2.3 * 3.2, value as double);
}
void test_binary_times_integer() {
- Object value = getConstantValue("2 * 3");
+ Object value = _getConstantValue("2 * 3");
EngineTestCase.assertInstanceOf((obj) => obj is int, int, value);
JUnitTestCase.assertEquals(6, value as int);
}
void test_binary_truncatingDivide_double() {
- Object value = getConstantValue("3.2 ~/ 2.3");
+ Object value = _getConstantValue("3.2 ~/ 2.3");
EngineTestCase.assertInstanceOf((obj) => obj is int, int, value);
JUnitTestCase.assertEquals(1, value as int);
}
void test_binary_truncatingDivide_integer() {
- Object value = getConstantValue("10 ~/ 3");
+ Object value = _getConstantValue("10 ~/ 3");
EngineTestCase.assertInstanceOf((obj) => obj is int, int, value);
JUnitTestCase.assertEquals(3, value as int);
}
void test_literal_boolean_false() {
- Object value = getConstantValue("false");
+ Object value = _getConstantValue("false");
JUnitTestCase.assertEquals(false, value);
}
void test_literal_boolean_true() {
- Object value = getConstantValue("true");
+ Object value = _getConstantValue("true");
JUnitTestCase.assertEquals(true, value);
}
void test_literal_list() {
- Object value = getConstantValue("['a', 'b', 'c']");
+ Object value = _getConstantValue("['a', 'b', 'c']");
EngineTestCase.assertInstanceOf((obj) => obj is List, List, value);
List list = value as List;
JUnitTestCase.assertEquals(3, list.length);
@@ -1656,7 +1656,7 @@
}
void test_literal_map() {
- Object value = getConstantValue("{'a' : 'm', 'b' : 'n', 'c' : 'o'}");
+ Object value = _getConstantValue("{'a' : 'm', 'b' : 'n', 'c' : 'o'}");
EngineTestCase.assertInstanceOf((obj) => obj is Map, Map, value);
Map map = value as Map;
JUnitTestCase.assertEquals(3, map.length);
@@ -1666,71 +1666,71 @@
}
void test_literal_null() {
- Object value = getConstantValue("null");
+ Object value = _getConstantValue("null");
JUnitTestCase.assertEquals(null, value);
}
void test_literal_number_double() {
- Object value = getConstantValue("3.45");
+ Object value = _getConstantValue("3.45");
EngineTestCase.assertInstanceOf((obj) => obj is double, double, value);
JUnitTestCase.assertEquals(3.45, value as double);
}
void test_literal_number_integer() {
- Object value = getConstantValue("42");
+ Object value = _getConstantValue("42");
EngineTestCase.assertInstanceOf((obj) => obj is int, int, value);
JUnitTestCase.assertEquals(42, value as int);
}
void test_literal_string_adjacent() {
- Object value = getConstantValue("'abc' 'def'");
+ Object value = _getConstantValue("'abc' 'def'");
JUnitTestCase.assertEquals("abcdef", value);
}
void test_literal_string_interpolation_invalid() {
- Object value = getConstantValue("'a\${f()}c'");
+ Object value = _getConstantValue("'a\${f()}c'");
JUnitTestCase.assertEquals(ConstantEvaluator.NOT_A_CONSTANT, value);
}
void test_literal_string_interpolation_valid() {
- Object value = getConstantValue("'a\${3}c'");
+ Object value = _getConstantValue("'a\${3}c'");
JUnitTestCase.assertEquals("a3c", value);
}
void test_literal_string_simple() {
- Object value = getConstantValue("'abc'");
+ Object value = _getConstantValue("'abc'");
JUnitTestCase.assertEquals("abc", value);
}
void test_parenthesizedExpression() {
- Object value = getConstantValue("('a')");
+ Object value = _getConstantValue("('a')");
JUnitTestCase.assertEquals("a", value);
}
void test_unary_bitNot() {
- Object value = getConstantValue("~42");
+ Object value = _getConstantValue("~42");
EngineTestCase.assertInstanceOf((obj) => obj is int, int, value);
JUnitTestCase.assertEquals(~42, value as int);
}
void test_unary_logicalNot() {
- Object value = getConstantValue("!true");
+ Object value = _getConstantValue("!true");
JUnitTestCase.assertEquals(false, value);
}
void test_unary_negated_double() {
- Object value = getConstantValue("-42.3");
+ Object value = _getConstantValue("-42.3");
EngineTestCase.assertInstanceOf((obj) => obj is double, double, value);
JUnitTestCase.assertEquals(-42.3, value as double);
}
void test_unary_negated_integer() {
- Object value = getConstantValue("-42");
+ Object value = _getConstantValue("-42");
EngineTestCase.assertInstanceOf((obj) => obj is int, int, value);
JUnitTestCase.assertEquals(-42, value as int);
}
- Object getConstantValue(String source) => ParserTestCase.parseExpression(source, []).accept(new ConstantEvaluator());
+ Object _getConstantValue(String source) => ParserTestCase.parseExpression(source, []).accept(new ConstantEvaluator());
static dartSuite() {
_ut.group('ConstantEvaluatorTest', () {
@@ -2001,456 +2001,486 @@
class ToSourceVisitorTest extends EngineTestCase {
void test_visitAdjacentStrings() {
- assertSource("'a' 'b'", AstFactory.adjacentStrings([AstFactory.string2("a"), AstFactory.string2("b")]));
+ _assertSource("'a' 'b'", AstFactory.adjacentStrings([AstFactory.string2("a"), AstFactory.string2("b")]));
}
void test_visitAnnotation_constant() {
- assertSource("@A", AstFactory.annotation(AstFactory.identifier3("A")));
+ _assertSource("@A", AstFactory.annotation(AstFactory.identifier3("A")));
}
void test_visitAnnotation_constructor() {
- assertSource("@A.c()", AstFactory.annotation2(AstFactory.identifier3("A"), AstFactory.identifier3("c"), AstFactory.argumentList([])));
+ _assertSource("@A.c()", AstFactory.annotation2(AstFactory.identifier3("A"), AstFactory.identifier3("c"), AstFactory.argumentList([])));
}
void test_visitArgumentDefinitionTest() {
- assertSource("?a", AstFactory.argumentDefinitionTest("a"));
+ _assertSource("?a", AstFactory.argumentDefinitionTest("a"));
}
void test_visitArgumentList() {
- assertSource("(a, b)", AstFactory.argumentList([AstFactory.identifier3("a"), AstFactory.identifier3("b")]));
+ _assertSource("(a, b)", AstFactory.argumentList([AstFactory.identifier3("a"), AstFactory.identifier3("b")]));
}
void test_visitAsExpression() {
- assertSource("e as T", AstFactory.asExpression(AstFactory.identifier3("e"), AstFactory.typeName4("T", [])));
+ _assertSource("e as T", AstFactory.asExpression(AstFactory.identifier3("e"), AstFactory.typeName4("T", [])));
}
void test_visitAssertStatement() {
- assertSource("assert (a);", AstFactory.assertStatement(AstFactory.identifier3("a")));
+ _assertSource("assert (a);", AstFactory.assertStatement(AstFactory.identifier3("a")));
}
void test_visitAssignmentExpression() {
- assertSource("a = b", AstFactory.assignmentExpression(AstFactory.identifier3("a"), TokenType.EQ, AstFactory.identifier3("b")));
+ _assertSource("a = b", AstFactory.assignmentExpression(AstFactory.identifier3("a"), TokenType.EQ, AstFactory.identifier3("b")));
}
void test_visitBinaryExpression() {
- assertSource("a + b", AstFactory.binaryExpression(AstFactory.identifier3("a"), TokenType.PLUS, AstFactory.identifier3("b")));
+ _assertSource("a + b", AstFactory.binaryExpression(AstFactory.identifier3("a"), TokenType.PLUS, AstFactory.identifier3("b")));
}
void test_visitBlock_empty() {
- assertSource("{}", AstFactory.block([]));
+ _assertSource("{}", AstFactory.block([]));
}
void test_visitBlock_nonEmpty() {
- assertSource("{break; break;}", AstFactory.block([AstFactory.breakStatement(), AstFactory.breakStatement()]));
+ _assertSource("{break; break;}", AstFactory.block([AstFactory.breakStatement(), AstFactory.breakStatement()]));
}
void test_visitBlockFunctionBody() {
- assertSource("{}", AstFactory.blockFunctionBody2([]));
+ _assertSource("{}", AstFactory.blockFunctionBody2([]));
}
void test_visitBooleanLiteral_false() {
- assertSource("false", AstFactory.booleanLiteral(false));
+ _assertSource("false", AstFactory.booleanLiteral(false));
}
void test_visitBooleanLiteral_true() {
- assertSource("true", AstFactory.booleanLiteral(true));
+ _assertSource("true", AstFactory.booleanLiteral(true));
}
void test_visitBreakStatement_label() {
- assertSource("break l;", AstFactory.breakStatement2("l"));
+ _assertSource("break l;", AstFactory.breakStatement2("l"));
}
void test_visitBreakStatement_noLabel() {
- assertSource("break;", AstFactory.breakStatement());
+ _assertSource("break;", AstFactory.breakStatement());
}
void test_visitCascadeExpression_field() {
- assertSource("a..b..c", AstFactory.cascadeExpression(AstFactory.identifier3("a"), [
+ _assertSource("a..b..c", AstFactory.cascadeExpression(AstFactory.identifier3("a"), [
AstFactory.cascadedPropertyAccess("b"),
AstFactory.cascadedPropertyAccess("c")]));
}
void test_visitCascadeExpression_index() {
- assertSource("a..[0]..[1]", AstFactory.cascadeExpression(AstFactory.identifier3("a"), [
+ _assertSource("a..[0]..[1]", AstFactory.cascadeExpression(AstFactory.identifier3("a"), [
AstFactory.cascadedIndexExpression(AstFactory.integer(0)),
AstFactory.cascadedIndexExpression(AstFactory.integer(1))]));
}
void test_visitCascadeExpression_method() {
- assertSource("a..b()..c()", AstFactory.cascadeExpression(AstFactory.identifier3("a"), [
+ _assertSource("a..b()..c()", AstFactory.cascadeExpression(AstFactory.identifier3("a"), [
AstFactory.cascadedMethodInvocation("b", []),
AstFactory.cascadedMethodInvocation("c", [])]));
}
void test_visitCatchClause_catch_noStack() {
- assertSource("catch (e) {}", AstFactory.catchClause("e", []));
+ _assertSource("catch (e) {}", AstFactory.catchClause("e", []));
}
void test_visitCatchClause_catch_stack() {
- assertSource("catch (e, s) {}", AstFactory.catchClause2("e", "s", []));
+ _assertSource("catch (e, s) {}", AstFactory.catchClause2("e", "s", []));
}
void test_visitCatchClause_on() {
- assertSource("on E {}", AstFactory.catchClause3(AstFactory.typeName4("E", []), []));
+ _assertSource("on E {}", AstFactory.catchClause3(AstFactory.typeName4("E", []), []));
}
void test_visitCatchClause_on_catch() {
- assertSource("on E catch (e) {}", AstFactory.catchClause4(AstFactory.typeName4("E", []), "e", []));
+ _assertSource("on E catch (e) {}", AstFactory.catchClause4(AstFactory.typeName4("E", []), "e", []));
}
void test_visitClassDeclaration_abstract() {
- assertSource("abstract class C {}", AstFactory.classDeclaration(Keyword.ABSTRACT, "C", null, null, null, null, []));
+ _assertSource("abstract class C {}", AstFactory.classDeclaration(Keyword.ABSTRACT, "C", null, null, null, null, []));
}
void test_visitClassDeclaration_empty() {
- assertSource("class C {}", AstFactory.classDeclaration(null, "C", null, null, null, null, []));
+ _assertSource("class C {}", AstFactory.classDeclaration(null, "C", null, null, null, null, []));
}
void test_visitClassDeclaration_extends() {
- assertSource("class C extends A {}", AstFactory.classDeclaration(null, "C", null, AstFactory.extendsClause(AstFactory.typeName4("A", [])), null, null, []));
+ _assertSource("class C extends A {}", AstFactory.classDeclaration(null, "C", null, AstFactory.extendsClause(AstFactory.typeName4("A", [])), null, null, []));
}
void test_visitClassDeclaration_extends_implements() {
- assertSource("class C extends A implements B {}", AstFactory.classDeclaration(null, "C", null, AstFactory.extendsClause(AstFactory.typeName4("A", [])), null, AstFactory.implementsClause([AstFactory.typeName4("B", [])]), []));
+ _assertSource("class C extends A implements B {}", AstFactory.classDeclaration(null, "C", null, AstFactory.extendsClause(AstFactory.typeName4("A", [])), null, AstFactory.implementsClause([AstFactory.typeName4("B", [])]), []));
}
void test_visitClassDeclaration_extends_with() {
- assertSource("class C extends A with M {}", AstFactory.classDeclaration(null, "C", null, AstFactory.extendsClause(AstFactory.typeName4("A", [])), AstFactory.withClause([AstFactory.typeName4("M", [])]), null, []));
+ _assertSource("class C extends A with M {}", AstFactory.classDeclaration(null, "C", null, AstFactory.extendsClause(AstFactory.typeName4("A", [])), AstFactory.withClause([AstFactory.typeName4("M", [])]), null, []));
}
void test_visitClassDeclaration_extends_with_implements() {
- assertSource("class C extends A with M implements B {}", AstFactory.classDeclaration(null, "C", null, AstFactory.extendsClause(AstFactory.typeName4("A", [])), AstFactory.withClause([AstFactory.typeName4("M", [])]), AstFactory.implementsClause([AstFactory.typeName4("B", [])]), []));
+ _assertSource("class C extends A with M implements B {}", AstFactory.classDeclaration(null, "C", null, AstFactory.extendsClause(AstFactory.typeName4("A", [])), AstFactory.withClause([AstFactory.typeName4("M", [])]), AstFactory.implementsClause([AstFactory.typeName4("B", [])]), []));
}
void test_visitClassDeclaration_implements() {
- assertSource("class C implements B {}", AstFactory.classDeclaration(null, "C", null, null, null, AstFactory.implementsClause([AstFactory.typeName4("B", [])]), []));
+ _assertSource("class C implements B {}", AstFactory.classDeclaration(null, "C", null, null, null, AstFactory.implementsClause([AstFactory.typeName4("B", [])]), []));
}
void test_visitClassDeclaration_multipleMember() {
- assertSource("class C {var a; var b;}", AstFactory.classDeclaration(null, "C", null, null, null, null, [
+ _assertSource("class C {var a; var b;}", AstFactory.classDeclaration(null, "C", null, null, null, null, [
AstFactory.fieldDeclaration2(false, Keyword.VAR, [AstFactory.variableDeclaration("a")]),
AstFactory.fieldDeclaration2(false, Keyword.VAR, [AstFactory.variableDeclaration("b")])]));
}
void test_visitClassDeclaration_parameters() {
- assertSource("class C<E> {}", AstFactory.classDeclaration(null, "C", AstFactory.typeParameterList(["E"]), null, null, null, []));
+ _assertSource("class C<E> {}", AstFactory.classDeclaration(null, "C", AstFactory.typeParameterList(["E"]), null, null, null, []));
}
void test_visitClassDeclaration_parameters_extends() {
- assertSource("class C<E> extends A {}", AstFactory.classDeclaration(null, "C", AstFactory.typeParameterList(["E"]), AstFactory.extendsClause(AstFactory.typeName4("A", [])), null, null, []));
+ _assertSource("class C<E> extends A {}", AstFactory.classDeclaration(null, "C", AstFactory.typeParameterList(["E"]), AstFactory.extendsClause(AstFactory.typeName4("A", [])), null, null, []));
}
void test_visitClassDeclaration_parameters_extends_implements() {
- assertSource("class C<E> extends A implements B {}", AstFactory.classDeclaration(null, "C", AstFactory.typeParameterList(["E"]), AstFactory.extendsClause(AstFactory.typeName4("A", [])), null, AstFactory.implementsClause([AstFactory.typeName4("B", [])]), []));
+ _assertSource("class C<E> extends A implements B {}", AstFactory.classDeclaration(null, "C", AstFactory.typeParameterList(["E"]), AstFactory.extendsClause(AstFactory.typeName4("A", [])), null, AstFactory.implementsClause([AstFactory.typeName4("B", [])]), []));
}
void test_visitClassDeclaration_parameters_extends_with() {
- assertSource("class C<E> extends A with M {}", AstFactory.classDeclaration(null, "C", AstFactory.typeParameterList(["E"]), AstFactory.extendsClause(AstFactory.typeName4("A", [])), AstFactory.withClause([AstFactory.typeName4("M", [])]), null, []));
+ _assertSource("class C<E> extends A with M {}", AstFactory.classDeclaration(null, "C", AstFactory.typeParameterList(["E"]), AstFactory.extendsClause(AstFactory.typeName4("A", [])), AstFactory.withClause([AstFactory.typeName4("M", [])]), null, []));
}
void test_visitClassDeclaration_parameters_extends_with_implements() {
- assertSource("class C<E> extends A with M implements B {}", AstFactory.classDeclaration(null, "C", AstFactory.typeParameterList(["E"]), AstFactory.extendsClause(AstFactory.typeName4("A", [])), AstFactory.withClause([AstFactory.typeName4("M", [])]), AstFactory.implementsClause([AstFactory.typeName4("B", [])]), []));
+ _assertSource("class C<E> extends A with M implements B {}", AstFactory.classDeclaration(null, "C", AstFactory.typeParameterList(["E"]), AstFactory.extendsClause(AstFactory.typeName4("A", [])), AstFactory.withClause([AstFactory.typeName4("M", [])]), AstFactory.implementsClause([AstFactory.typeName4("B", [])]), []));
}
void test_visitClassDeclaration_parameters_implements() {
- assertSource("class C<E> implements B {}", AstFactory.classDeclaration(null, "C", AstFactory.typeParameterList(["E"]), null, null, AstFactory.implementsClause([AstFactory.typeName4("B", [])]), []));
+ _assertSource("class C<E> implements B {}", AstFactory.classDeclaration(null, "C", AstFactory.typeParameterList(["E"]), null, null, AstFactory.implementsClause([AstFactory.typeName4("B", [])]), []));
}
void test_visitClassDeclaration_singleMember() {
- assertSource("class C {var a;}", AstFactory.classDeclaration(null, "C", null, null, null, null, [AstFactory.fieldDeclaration2(false, Keyword.VAR, [AstFactory.variableDeclaration("a")])]));
+ _assertSource("class C {var a;}", AstFactory.classDeclaration(null, "C", null, null, null, null, [AstFactory.fieldDeclaration2(false, Keyword.VAR, [AstFactory.variableDeclaration("a")])]));
+ }
+
+ void test_visitClassDeclaration_withMetadata() {
+ ClassDeclaration declaration = AstFactory.classDeclaration(null, "C", null, null, null, null, []);
+ declaration.metadata = AstFactory.list([AstFactory.annotation(AstFactory.identifier3("deprecated"))]);
+ _assertSource("@deprecated class C {}", declaration);
}
void test_visitClassTypeAlias_abstract() {
- assertSource("abstract class C = S with M1;", AstFactory.classTypeAlias("C", null, Keyword.ABSTRACT, AstFactory.typeName4("S", []), AstFactory.withClause([AstFactory.typeName4("M1", [])]), null));
+ _assertSource("abstract class C = S with M1;", AstFactory.classTypeAlias("C", null, Keyword.ABSTRACT, AstFactory.typeName4("S", []), AstFactory.withClause([AstFactory.typeName4("M1", [])]), null));
}
void test_visitClassTypeAlias_abstract_implements() {
- assertSource("abstract class C = S with M1 implements I;", AstFactory.classTypeAlias("C", null, Keyword.ABSTRACT, AstFactory.typeName4("S", []), AstFactory.withClause([AstFactory.typeName4("M1", [])]), AstFactory.implementsClause([AstFactory.typeName4("I", [])])));
+ _assertSource("abstract class C = S with M1 implements I;", AstFactory.classTypeAlias("C", null, Keyword.ABSTRACT, AstFactory.typeName4("S", []), AstFactory.withClause([AstFactory.typeName4("M1", [])]), AstFactory.implementsClause([AstFactory.typeName4("I", [])])));
}
void test_visitClassTypeAlias_generic() {
- assertSource("class C<E> = S<E> with M1<E>;", AstFactory.classTypeAlias("C", AstFactory.typeParameterList(["E"]), null, AstFactory.typeName4("S", [AstFactory.typeName4("E", [])]), AstFactory.withClause([AstFactory.typeName4("M1", [AstFactory.typeName4("E", [])])]), null));
+ _assertSource("class C<E> = S<E> with M1<E>;", AstFactory.classTypeAlias("C", AstFactory.typeParameterList(["E"]), null, AstFactory.typeName4("S", [AstFactory.typeName4("E", [])]), AstFactory.withClause([AstFactory.typeName4("M1", [AstFactory.typeName4("E", [])])]), null));
}
void test_visitClassTypeAlias_implements() {
- assertSource("class C = S with M1 implements I;", AstFactory.classTypeAlias("C", null, null, AstFactory.typeName4("S", []), AstFactory.withClause([AstFactory.typeName4("M1", [])]), AstFactory.implementsClause([AstFactory.typeName4("I", [])])));
+ _assertSource("class C = S with M1 implements I;", AstFactory.classTypeAlias("C", null, null, AstFactory.typeName4("S", []), AstFactory.withClause([AstFactory.typeName4("M1", [])]), AstFactory.implementsClause([AstFactory.typeName4("I", [])])));
}
void test_visitClassTypeAlias_minimal() {
- assertSource("class C = S with M1;", AstFactory.classTypeAlias("C", null, null, AstFactory.typeName4("S", []), AstFactory.withClause([AstFactory.typeName4("M1", [])]), null));
+ _assertSource("class C = S with M1;", AstFactory.classTypeAlias("C", null, null, AstFactory.typeName4("S", []), AstFactory.withClause([AstFactory.typeName4("M1", [])]), null));
}
void test_visitClassTypeAlias_parameters_abstract() {
- assertSource("abstract class C<E> = S with M1;", AstFactory.classTypeAlias("C", AstFactory.typeParameterList(["E"]), Keyword.ABSTRACT, AstFactory.typeName4("S", []), AstFactory.withClause([AstFactory.typeName4("M1", [])]), null));
+ _assertSource("abstract class C<E> = S with M1;", AstFactory.classTypeAlias("C", AstFactory.typeParameterList(["E"]), Keyword.ABSTRACT, AstFactory.typeName4("S", []), AstFactory.withClause([AstFactory.typeName4("M1", [])]), null));
}
void test_visitClassTypeAlias_parameters_abstract_implements() {
- assertSource("abstract class C<E> = S with M1 implements I;", AstFactory.classTypeAlias("C", AstFactory.typeParameterList(["E"]), Keyword.ABSTRACT, AstFactory.typeName4("S", []), AstFactory.withClause([AstFactory.typeName4("M1", [])]), AstFactory.implementsClause([AstFactory.typeName4("I", [])])));
+ _assertSource("abstract class C<E> = S with M1 implements I;", AstFactory.classTypeAlias("C", AstFactory.typeParameterList(["E"]), Keyword.ABSTRACT, AstFactory.typeName4("S", []), AstFactory.withClause([AstFactory.typeName4("M1", [])]), AstFactory.implementsClause([AstFactory.typeName4("I", [])])));
}
void test_visitClassTypeAlias_parameters_implements() {
- assertSource("class C<E> = S with M1 implements I;", AstFactory.classTypeAlias("C", AstFactory.typeParameterList(["E"]), null, AstFactory.typeName4("S", []), AstFactory.withClause([AstFactory.typeName4("M1", [])]), AstFactory.implementsClause([AstFactory.typeName4("I", [])])));
+ _assertSource("class C<E> = S with M1 implements I;", AstFactory.classTypeAlias("C", AstFactory.typeParameterList(["E"]), null, AstFactory.typeName4("S", []), AstFactory.withClause([AstFactory.typeName4("M1", [])]), AstFactory.implementsClause([AstFactory.typeName4("I", [])])));
+ }
+
+ void test_visitClassTypeAlias_withMetadata() {
+ ClassTypeAlias declaration = AstFactory.classTypeAlias("C", null, null, AstFactory.typeName4("S", []), AstFactory.withClause([AstFactory.typeName4("M1", [])]), null);
+ declaration.metadata = AstFactory.list([AstFactory.annotation(AstFactory.identifier3("deprecated"))]);
+ _assertSource("@deprecated class C = S with M1;", declaration);
}
void test_visitComment() {
- assertSource("", Comment.createBlockComment(<Token> [TokenFactory.tokenFromString("/* comment */")]));
+ _assertSource("", Comment.createBlockComment(<Token> [TokenFactory.tokenFromString("/* comment */")]));
}
void test_visitCommentReference() {
- assertSource("", new CommentReference(null, AstFactory.identifier3("a")));
+ _assertSource("", new CommentReference(null, AstFactory.identifier3("a")));
}
void test_visitCompilationUnit_declaration() {
- assertSource("var a;", AstFactory.compilationUnit2([AstFactory.topLevelVariableDeclaration2(Keyword.VAR, [AstFactory.variableDeclaration("a")])]));
+ _assertSource("var a;", AstFactory.compilationUnit2([AstFactory.topLevelVariableDeclaration2(Keyword.VAR, [AstFactory.variableDeclaration("a")])]));
}
void test_visitCompilationUnit_directive() {
- assertSource("library l;", AstFactory.compilationUnit3([AstFactory.libraryDirective2("l")]));
+ _assertSource("library l;", AstFactory.compilationUnit3([AstFactory.libraryDirective2("l")]));
}
void test_visitCompilationUnit_directive_declaration() {
- assertSource("library l; var a;", AstFactory.compilationUnit4(AstFactory.list([AstFactory.libraryDirective2("l")]), AstFactory.list([AstFactory.topLevelVariableDeclaration2(Keyword.VAR, [AstFactory.variableDeclaration("a")])])));
+ _assertSource("library l; var a;", AstFactory.compilationUnit4(AstFactory.list([AstFactory.libraryDirective2("l")]), AstFactory.list([AstFactory.topLevelVariableDeclaration2(Keyword.VAR, [AstFactory.variableDeclaration("a")])])));
}
void test_visitCompilationUnit_empty() {
- assertSource("", AstFactory.compilationUnit());
+ _assertSource("", AstFactory.compilationUnit());
}
void test_visitCompilationUnit_script() {
- assertSource("!#/bin/dartvm", AstFactory.compilationUnit5("!#/bin/dartvm"));
+ _assertSource("!#/bin/dartvm", AstFactory.compilationUnit5("!#/bin/dartvm"));
}
void test_visitCompilationUnit_script_declaration() {
- assertSource("!#/bin/dartvm var a;", AstFactory.compilationUnit6("!#/bin/dartvm", [AstFactory.topLevelVariableDeclaration2(Keyword.VAR, [AstFactory.variableDeclaration("a")])]));
+ _assertSource("!#/bin/dartvm var a;", AstFactory.compilationUnit6("!#/bin/dartvm", [AstFactory.topLevelVariableDeclaration2(Keyword.VAR, [AstFactory.variableDeclaration("a")])]));
}
void test_visitCompilationUnit_script_directive() {
- assertSource("!#/bin/dartvm library l;", AstFactory.compilationUnit7("!#/bin/dartvm", [AstFactory.libraryDirective2("l")]));
+ _assertSource("!#/bin/dartvm library l;", AstFactory.compilationUnit7("!#/bin/dartvm", [AstFactory.libraryDirective2("l")]));
}
void test_visitCompilationUnit_script_directives_declarations() {
- assertSource("!#/bin/dartvm library l; var a;", AstFactory.compilationUnit8("!#/bin/dartvm", AstFactory.list([AstFactory.libraryDirective2("l")]), AstFactory.list([AstFactory.topLevelVariableDeclaration2(Keyword.VAR, [AstFactory.variableDeclaration("a")])])));
+ _assertSource("!#/bin/dartvm library l; var a;", AstFactory.compilationUnit8("!#/bin/dartvm", AstFactory.list([AstFactory.libraryDirective2("l")]), AstFactory.list([AstFactory.topLevelVariableDeclaration2(Keyword.VAR, [AstFactory.variableDeclaration("a")])])));
}
void test_visitConditionalExpression() {
- assertSource("a ? b : c", AstFactory.conditionalExpression(AstFactory.identifier3("a"), AstFactory.identifier3("b"), AstFactory.identifier3("c")));
+ _assertSource("a ? b : c", AstFactory.conditionalExpression(AstFactory.identifier3("a"), AstFactory.identifier3("b"), AstFactory.identifier3("c")));
}
void test_visitConstructorDeclaration_const() {
- assertSource("const C() {}", AstFactory.constructorDeclaration2(Keyword.CONST, null, AstFactory.identifier3("C"), null, AstFactory.formalParameterList([]), null, AstFactory.blockFunctionBody2([])));
+ _assertSource("const C() {}", AstFactory.constructorDeclaration2(Keyword.CONST, null, AstFactory.identifier3("C"), null, AstFactory.formalParameterList([]), null, AstFactory.blockFunctionBody2([])));
}
void test_visitConstructorDeclaration_external() {
- assertSource("external C();", AstFactory.constructorDeclaration(AstFactory.identifier3("C"), null, AstFactory.formalParameterList([]), null));
+ _assertSource("external C();", AstFactory.constructorDeclaration(AstFactory.identifier3("C"), null, AstFactory.formalParameterList([]), null));
}
void test_visitConstructorDeclaration_minimal() {
- assertSource("C() {}", AstFactory.constructorDeclaration2(null, null, AstFactory.identifier3("C"), null, AstFactory.formalParameterList([]), null, AstFactory.blockFunctionBody2([])));
+ _assertSource("C() {}", AstFactory.constructorDeclaration2(null, null, AstFactory.identifier3("C"), null, AstFactory.formalParameterList([]), null, AstFactory.blockFunctionBody2([])));
}
void test_visitConstructorDeclaration_multipleInitializers() {
- assertSource("C() : a = b, c = d {}", AstFactory.constructorDeclaration2(null, null, AstFactory.identifier3("C"), null, AstFactory.formalParameterList([]), AstFactory.list([
+ _assertSource("C() : a = b, c = d {}", AstFactory.constructorDeclaration2(null, null, AstFactory.identifier3("C"), null, AstFactory.formalParameterList([]), AstFactory.list([
AstFactory.constructorFieldInitializer(false, "a", AstFactory.identifier3("b")),
AstFactory.constructorFieldInitializer(false, "c", AstFactory.identifier3("d"))]), AstFactory.blockFunctionBody2([])));
}
void test_visitConstructorDeclaration_multipleParameters() {
- assertSource("C(var a, var b) {}", AstFactory.constructorDeclaration2(null, null, AstFactory.identifier3("C"), null, AstFactory.formalParameterList([
+ _assertSource("C(var a, var b) {}", AstFactory.constructorDeclaration2(null, null, AstFactory.identifier3("C"), null, AstFactory.formalParameterList([
AstFactory.simpleFormalParameter(Keyword.VAR, "a"),
AstFactory.simpleFormalParameter(Keyword.VAR, "b")]), null, AstFactory.blockFunctionBody2([])));
}
void test_visitConstructorDeclaration_named() {
- assertSource("C.m() {}", AstFactory.constructorDeclaration2(null, null, AstFactory.identifier3("C"), "m", AstFactory.formalParameterList([]), null, AstFactory.blockFunctionBody2([])));
+ _assertSource("C.m() {}", AstFactory.constructorDeclaration2(null, null, AstFactory.identifier3("C"), "m", AstFactory.formalParameterList([]), null, AstFactory.blockFunctionBody2([])));
}
void test_visitConstructorDeclaration_singleInitializer() {
- assertSource("C() : a = b {}", AstFactory.constructorDeclaration2(null, null, AstFactory.identifier3("C"), null, AstFactory.formalParameterList([]), AstFactory.list([AstFactory.constructorFieldInitializer(false, "a", AstFactory.identifier3("b"))]), AstFactory.blockFunctionBody2([])));
+ _assertSource("C() : a = b {}", AstFactory.constructorDeclaration2(null, null, AstFactory.identifier3("C"), null, AstFactory.formalParameterList([]), AstFactory.list([AstFactory.constructorFieldInitializer(false, "a", AstFactory.identifier3("b"))]), AstFactory.blockFunctionBody2([])));
+ }
+
+ void test_visitConstructorDeclaration_withMetadata() {
+ ConstructorDeclaration declaration = AstFactory.constructorDeclaration2(null, null, AstFactory.identifier3("C"), null, AstFactory.formalParameterList([]), null, AstFactory.blockFunctionBody2([]));
+ declaration.metadata = AstFactory.list([AstFactory.annotation(AstFactory.identifier3("deprecated"))]);
+ _assertSource("@deprecated C() {}", declaration);
}
void test_visitConstructorFieldInitializer_withoutThis() {
- assertSource("a = b", AstFactory.constructorFieldInitializer(false, "a", AstFactory.identifier3("b")));
+ _assertSource("a = b", AstFactory.constructorFieldInitializer(false, "a", AstFactory.identifier3("b")));
}
void test_visitConstructorFieldInitializer_withThis() {
- assertSource("this.a = b", AstFactory.constructorFieldInitializer(true, "a", AstFactory.identifier3("b")));
+ _assertSource("this.a = b", AstFactory.constructorFieldInitializer(true, "a", AstFactory.identifier3("b")));
}
void test_visitConstructorName_named_prefix() {
- assertSource("p.C.n", AstFactory.constructorName(AstFactory.typeName4("p.C.n", []), null));
+ _assertSource("p.C.n", AstFactory.constructorName(AstFactory.typeName4("p.C.n", []), null));
}
void test_visitConstructorName_unnamed_noPrefix() {
- assertSource("C", AstFactory.constructorName(AstFactory.typeName4("C", []), null));
+ _assertSource("C", AstFactory.constructorName(AstFactory.typeName4("C", []), null));
}
void test_visitConstructorName_unnamed_prefix() {
- assertSource("p.C", AstFactory.constructorName(AstFactory.typeName3(AstFactory.identifier5("p", "C"), []), null));
+ _assertSource("p.C", AstFactory.constructorName(AstFactory.typeName3(AstFactory.identifier5("p", "C"), []), null));
}
void test_visitContinueStatement_label() {
- assertSource("continue l;", AstFactory.continueStatement2("l"));
+ _assertSource("continue l;", AstFactory.continueStatement("l"));
}
void test_visitContinueStatement_noLabel() {
- assertSource("continue;", AstFactory.continueStatement());
+ _assertSource("continue;", AstFactory.continueStatement());
}
void test_visitDefaultFormalParameter_named_noValue() {
- assertSource("p", AstFactory.namedFormalParameter(AstFactory.simpleFormalParameter3("p"), null));
+ _assertSource("p", AstFactory.namedFormalParameter(AstFactory.simpleFormalParameter3("p"), null));
}
void test_visitDefaultFormalParameter_named_value() {
- assertSource("p : 0", AstFactory.namedFormalParameter(AstFactory.simpleFormalParameter3("p"), AstFactory.integer(0)));
+ _assertSource("p : 0", AstFactory.namedFormalParameter(AstFactory.simpleFormalParameter3("p"), AstFactory.integer(0)));
}
void test_visitDefaultFormalParameter_positional_noValue() {
- assertSource("p", AstFactory.positionalFormalParameter(AstFactory.simpleFormalParameter3("p"), null));
+ _assertSource("p", AstFactory.positionalFormalParameter(AstFactory.simpleFormalParameter3("p"), null));
}
void test_visitDefaultFormalParameter_positional_value() {
- assertSource("p = 0", AstFactory.positionalFormalParameter(AstFactory.simpleFormalParameter3("p"), AstFactory.integer(0)));
+ _assertSource("p = 0", AstFactory.positionalFormalParameter(AstFactory.simpleFormalParameter3("p"), AstFactory.integer(0)));
}
void test_visitDoStatement() {
- assertSource("do {} while (c);", AstFactory.doStatement(AstFactory.block([]), AstFactory.identifier3("c")));
+ _assertSource("do {} while (c);", AstFactory.doStatement(AstFactory.block([]), AstFactory.identifier3("c")));
}
void test_visitDoubleLiteral() {
- assertSource("4.2", AstFactory.doubleLiteral(4.2));
+ _assertSource("4.2", AstFactory.doubleLiteral(4.2));
}
void test_visitEmptyFunctionBody() {
- assertSource(";", AstFactory.emptyFunctionBody());
+ _assertSource(";", AstFactory.emptyFunctionBody());
}
void test_visitEmptyStatement() {
- assertSource(";", AstFactory.emptyStatement());
+ _assertSource(";", AstFactory.emptyStatement());
}
void test_visitExportDirective_combinator() {
- assertSource("export 'a.dart' show A;", AstFactory.exportDirective2("a.dart", [AstFactory.showCombinator([AstFactory.identifier3("A")])]));
+ _assertSource("export 'a.dart' show A;", AstFactory.exportDirective2("a.dart", [AstFactory.showCombinator([AstFactory.identifier3("A")])]));
}
void test_visitExportDirective_combinators() {
- assertSource("export 'a.dart' show A hide B;", AstFactory.exportDirective2("a.dart", [
+ _assertSource("export 'a.dart' show A hide B;", AstFactory.exportDirective2("a.dart", [
AstFactory.showCombinator([AstFactory.identifier3("A")]),
AstFactory.hideCombinator([AstFactory.identifier3("B")])]));
}
void test_visitExportDirective_minimal() {
- assertSource("export 'a.dart';", AstFactory.exportDirective2("a.dart", []));
+ _assertSource("export 'a.dart';", AstFactory.exportDirective2("a.dart", []));
+ }
+
+ void test_visitExportDirective_withMetadata() {
+ ExportDirective directive = AstFactory.exportDirective2("a.dart", []);
+ directive.metadata = AstFactory.list([AstFactory.annotation(AstFactory.identifier3("deprecated"))]);
+ _assertSource("@deprecated export 'a.dart';", directive);
}
void test_visitExpressionFunctionBody() {
- assertSource("=> a;", AstFactory.expressionFunctionBody(AstFactory.identifier3("a")));
+ _assertSource("=> a;", AstFactory.expressionFunctionBody(AstFactory.identifier3("a")));
}
void test_visitExpressionStatement() {
- assertSource("a;", AstFactory.expressionStatement(AstFactory.identifier3("a")));
+ _assertSource("a;", AstFactory.expressionStatement(AstFactory.identifier3("a")));
}
void test_visitExtendsClause() {
- assertSource("extends C", AstFactory.extendsClause(AstFactory.typeName4("C", [])));
+ _assertSource("extends C", AstFactory.extendsClause(AstFactory.typeName4("C", [])));
}
void test_visitFieldDeclaration_instance() {
- assertSource("var a;", AstFactory.fieldDeclaration2(false, Keyword.VAR, [AstFactory.variableDeclaration("a")]));
+ _assertSource("var a;", AstFactory.fieldDeclaration2(false, Keyword.VAR, [AstFactory.variableDeclaration("a")]));
}
void test_visitFieldDeclaration_static() {
- assertSource("static var a;", AstFactory.fieldDeclaration2(true, Keyword.VAR, [AstFactory.variableDeclaration("a")]));
+ _assertSource("static var a;", AstFactory.fieldDeclaration2(true, Keyword.VAR, [AstFactory.variableDeclaration("a")]));
+ }
+
+ void test_visitFieldDeclaration_withMetadata() {
+ FieldDeclaration declaration = AstFactory.fieldDeclaration2(false, Keyword.VAR, [AstFactory.variableDeclaration("a")]);
+ declaration.metadata = AstFactory.list([AstFactory.annotation(AstFactory.identifier3("deprecated"))]);
+ _assertSource("@deprecated var a;", declaration);
}
void test_visitFieldFormalParameter_functionTyped() {
- assertSource("A this.a(b)", AstFactory.fieldFormalParameter2(null, AstFactory.typeName4("A", []), "a", AstFactory.formalParameterList([AstFactory.simpleFormalParameter3("b")])));
+ _assertSource("A this.a(b)", AstFactory.fieldFormalParameter(null, AstFactory.typeName4("A", []), "a", AstFactory.formalParameterList([AstFactory.simpleFormalParameter3("b")])));
}
void test_visitFieldFormalParameter_keyword() {
- assertSource("var this.a", AstFactory.fieldFormalParameter(Keyword.VAR, null, "a"));
+ _assertSource("var this.a", AstFactory.fieldFormalParameter(Keyword.VAR, null, "a"));
}
void test_visitFieldFormalParameter_keywordAndType() {
- assertSource("final A this.a", AstFactory.fieldFormalParameter(Keyword.FINAL, AstFactory.typeName4("A", []), "a"));
+ _assertSource("final A this.a", AstFactory.fieldFormalParameter(Keyword.FINAL, AstFactory.typeName4("A", []), "a"));
}
void test_visitFieldFormalParameter_type() {
- assertSource("A this.a", AstFactory.fieldFormalParameter(null, AstFactory.typeName4("A", []), "a"));
+ _assertSource("A this.a", AstFactory.fieldFormalParameter(null, AstFactory.typeName4("A", []), "a"));
}
void test_visitForEachStatement() {
- assertSource("for (a in b) {}", AstFactory.forEachStatement(AstFactory.declaredIdentifier3("a"), AstFactory.identifier3("b"), AstFactory.block([])));
+ _assertSource("for (a in b) {}", AstFactory.forEachStatement(AstFactory.declaredIdentifier3("a"), AstFactory.identifier3("b"), AstFactory.block([])));
}
void test_visitFormalParameterList_empty() {
- assertSource("()", AstFactory.formalParameterList([]));
+ _assertSource("()", AstFactory.formalParameterList([]));
}
void test_visitFormalParameterList_n() {
- assertSource("({a : 0})", AstFactory.formalParameterList([AstFactory.namedFormalParameter(AstFactory.simpleFormalParameter3("a"), AstFactory.integer(0))]));
+ _assertSource("({a : 0})", AstFactory.formalParameterList([AstFactory.namedFormalParameter(AstFactory.simpleFormalParameter3("a"), AstFactory.integer(0))]));
}
void test_visitFormalParameterList_nn() {
- assertSource("({a : 0, b : 1})", AstFactory.formalParameterList([
+ _assertSource("({a : 0, b : 1})", AstFactory.formalParameterList([
AstFactory.namedFormalParameter(AstFactory.simpleFormalParameter3("a"), AstFactory.integer(0)),
AstFactory.namedFormalParameter(AstFactory.simpleFormalParameter3("b"), AstFactory.integer(1))]));
}
void test_visitFormalParameterList_p() {
- assertSource("([a = 0])", AstFactory.formalParameterList([AstFactory.positionalFormalParameter(AstFactory.simpleFormalParameter3("a"), AstFactory.integer(0))]));
+ _assertSource("([a = 0])", AstFactory.formalParameterList([AstFactory.positionalFormalParameter(AstFactory.simpleFormalParameter3("a"), AstFactory.integer(0))]));
}
void test_visitFormalParameterList_pp() {
- assertSource("([a = 0, b = 1])", AstFactory.formalParameterList([
+ _assertSource("([a = 0, b = 1])", AstFactory.formalParameterList([
AstFactory.positionalFormalParameter(AstFactory.simpleFormalParameter3("a"), AstFactory.integer(0)),
AstFactory.positionalFormalParameter(AstFactory.simpleFormalParameter3("b"), AstFactory.integer(1))]));
}
void test_visitFormalParameterList_r() {
- assertSource("(a)", AstFactory.formalParameterList([AstFactory.simpleFormalParameter3("a")]));
+ _assertSource("(a)", AstFactory.formalParameterList([AstFactory.simpleFormalParameter3("a")]));
}
void test_visitFormalParameterList_rn() {
- assertSource("(a, {b : 1})", AstFactory.formalParameterList([
+ _assertSource("(a, {b : 1})", AstFactory.formalParameterList([
AstFactory.simpleFormalParameter3("a"),
AstFactory.namedFormalParameter(AstFactory.simpleFormalParameter3("b"), AstFactory.integer(1))]));
}
void test_visitFormalParameterList_rnn() {
- assertSource("(a, {b : 1, c : 2})", AstFactory.formalParameterList([
+ _assertSource("(a, {b : 1, c : 2})", AstFactory.formalParameterList([
AstFactory.simpleFormalParameter3("a"),
AstFactory.namedFormalParameter(AstFactory.simpleFormalParameter3("b"), AstFactory.integer(1)),
AstFactory.namedFormalParameter(AstFactory.simpleFormalParameter3("c"), AstFactory.integer(2))]));
}
void test_visitFormalParameterList_rp() {
- assertSource("(a, [b = 1])", AstFactory.formalParameterList([
+ _assertSource("(a, [b = 1])", AstFactory.formalParameterList([
AstFactory.simpleFormalParameter3("a"),
AstFactory.positionalFormalParameter(AstFactory.simpleFormalParameter3("b"), AstFactory.integer(1))]));
}
void test_visitFormalParameterList_rpp() {
- assertSource("(a, [b = 1, c = 2])", AstFactory.formalParameterList([
+ _assertSource("(a, [b = 1, c = 2])", AstFactory.formalParameterList([
AstFactory.simpleFormalParameter3("a"),
AstFactory.positionalFormalParameter(AstFactory.simpleFormalParameter3("b"), AstFactory.integer(1)),
AstFactory.positionalFormalParameter(AstFactory.simpleFormalParameter3("c"), AstFactory.integer(2))]));
}
void test_visitFormalParameterList_rr() {
- assertSource("(a, b)", AstFactory.formalParameterList([
+ _assertSource("(a, b)", AstFactory.formalParameterList([
AstFactory.simpleFormalParameter3("a"),
AstFactory.simpleFormalParameter3("b")]));
}
void test_visitFormalParameterList_rrn() {
- assertSource("(a, b, {c : 3})", AstFactory.formalParameterList([
+ _assertSource("(a, b, {c : 3})", AstFactory.formalParameterList([
AstFactory.simpleFormalParameter3("a"),
AstFactory.simpleFormalParameter3("b"),
AstFactory.namedFormalParameter(AstFactory.simpleFormalParameter3("c"), AstFactory.integer(3))]));
}
void test_visitFormalParameterList_rrnn() {
- assertSource("(a, b, {c : 3, d : 4})", AstFactory.formalParameterList([
+ _assertSource("(a, b, {c : 3, d : 4})", AstFactory.formalParameterList([
AstFactory.simpleFormalParameter3("a"),
AstFactory.simpleFormalParameter3("b"),
AstFactory.namedFormalParameter(AstFactory.simpleFormalParameter3("c"), AstFactory.integer(3)),
@@ -2458,14 +2488,14 @@
}
void test_visitFormalParameterList_rrp() {
- assertSource("(a, b, [c = 3])", AstFactory.formalParameterList([
+ _assertSource("(a, b, [c = 3])", AstFactory.formalParameterList([
AstFactory.simpleFormalParameter3("a"),
AstFactory.simpleFormalParameter3("b"),
AstFactory.positionalFormalParameter(AstFactory.simpleFormalParameter3("c"), AstFactory.integer(3))]));
}
void test_visitFormalParameterList_rrpp() {
- assertSource("(a, b, [c = 3, d = 4])", AstFactory.formalParameterList([
+ _assertSource("(a, b, [c = 3, d = 4])", AstFactory.formalParameterList([
AstFactory.simpleFormalParameter3("a"),
AstFactory.simpleFormalParameter3("b"),
AstFactory.positionalFormalParameter(AstFactory.simpleFormalParameter3("c"), AstFactory.integer(3)),
@@ -2473,605 +2503,667 @@
}
void test_visitForStatement_c() {
- assertSource("for (; c;) {}", AstFactory.forStatement(null, AstFactory.identifier3("c"), null, AstFactory.block([])));
+ _assertSource("for (; c;) {}", AstFactory.forStatement(null, AstFactory.identifier3("c"), null, AstFactory.block([])));
}
void test_visitForStatement_cu() {
- assertSource("for (; c; u) {}", AstFactory.forStatement(null, AstFactory.identifier3("c"), AstFactory.list([AstFactory.identifier3("u")]), AstFactory.block([])));
+ _assertSource("for (; c; u) {}", AstFactory.forStatement(null, AstFactory.identifier3("c"), AstFactory.list([AstFactory.identifier3("u")]), AstFactory.block([])));
}
void test_visitForStatement_e() {
- assertSource("for (e;;) {}", AstFactory.forStatement(AstFactory.identifier3("e"), null, null, AstFactory.block([])));
+ _assertSource("for (e;;) {}", AstFactory.forStatement(AstFactory.identifier3("e"), null, null, AstFactory.block([])));
}
void test_visitForStatement_ec() {
- assertSource("for (e; c;) {}", AstFactory.forStatement(AstFactory.identifier3("e"), AstFactory.identifier3("c"), null, AstFactory.block([])));
+ _assertSource("for (e; c;) {}", AstFactory.forStatement(AstFactory.identifier3("e"), AstFactory.identifier3("c"), null, AstFactory.block([])));
}
void test_visitForStatement_ecu() {
- assertSource("for (e; c; u) {}", AstFactory.forStatement(AstFactory.identifier3("e"), AstFactory.identifier3("c"), AstFactory.list([AstFactory.identifier3("u")]), AstFactory.block([])));
+ _assertSource("for (e; c; u) {}", AstFactory.forStatement(AstFactory.identifier3("e"), AstFactory.identifier3("c"), AstFactory.list([AstFactory.identifier3("u")]), AstFactory.block([])));
}
void test_visitForStatement_eu() {
- assertSource("for (e;; u) {}", AstFactory.forStatement(AstFactory.identifier3("e"), null, AstFactory.list([AstFactory.identifier3("u")]), AstFactory.block([])));
+ _assertSource("for (e;; u) {}", AstFactory.forStatement(AstFactory.identifier3("e"), null, AstFactory.list([AstFactory.identifier3("u")]), AstFactory.block([])));
}
void test_visitForStatement_i() {
- assertSource("for (var i;;) {}", AstFactory.forStatement2(AstFactory.variableDeclarationList2(Keyword.VAR, [AstFactory.variableDeclaration("i")]), null, null, AstFactory.block([])));
+ _assertSource("for (var i;;) {}", AstFactory.forStatement2(AstFactory.variableDeclarationList2(Keyword.VAR, [AstFactory.variableDeclaration("i")]), null, null, AstFactory.block([])));
}
void test_visitForStatement_ic() {
- assertSource("for (var i; c;) {}", AstFactory.forStatement2(AstFactory.variableDeclarationList2(Keyword.VAR, [AstFactory.variableDeclaration("i")]), AstFactory.identifier3("c"), null, AstFactory.block([])));
+ _assertSource("for (var i; c;) {}", AstFactory.forStatement2(AstFactory.variableDeclarationList2(Keyword.VAR, [AstFactory.variableDeclaration("i")]), AstFactory.identifier3("c"), null, AstFactory.block([])));
}
void test_visitForStatement_icu() {
- assertSource("for (var i; c; u) {}", AstFactory.forStatement2(AstFactory.variableDeclarationList2(Keyword.VAR, [AstFactory.variableDeclaration("i")]), AstFactory.identifier3("c"), AstFactory.list([AstFactory.identifier3("u")]), AstFactory.block([])));
+ _assertSource("for (var i; c; u) {}", AstFactory.forStatement2(AstFactory.variableDeclarationList2(Keyword.VAR, [AstFactory.variableDeclaration("i")]), AstFactory.identifier3("c"), AstFactory.list([AstFactory.identifier3("u")]), AstFactory.block([])));
}
void test_visitForStatement_iu() {
- assertSource("for (var i;; u) {}", AstFactory.forStatement2(AstFactory.variableDeclarationList2(Keyword.VAR, [AstFactory.variableDeclaration("i")]), null, AstFactory.list([AstFactory.identifier3("u")]), AstFactory.block([])));
+ _assertSource("for (var i;; u) {}", AstFactory.forStatement2(AstFactory.variableDeclarationList2(Keyword.VAR, [AstFactory.variableDeclaration("i")]), null, AstFactory.list([AstFactory.identifier3("u")]), AstFactory.block([])));
}
void test_visitForStatement_u() {
- assertSource("for (;; u) {}", AstFactory.forStatement(null, null, AstFactory.list([AstFactory.identifier3("u")]), AstFactory.block([])));
+ _assertSource("for (;; u) {}", AstFactory.forStatement(null, null, AstFactory.list([AstFactory.identifier3("u")]), AstFactory.block([])));
}
void test_visitFunctionDeclaration_getter() {
- assertSource("get f() {}", AstFactory.functionDeclaration(null, Keyword.GET, "f", AstFactory.functionExpression()));
+ _assertSource("get f() {}", AstFactory.functionDeclaration(null, Keyword.GET, "f", AstFactory.functionExpression()));
}
void test_visitFunctionDeclaration_normal() {
- assertSource("f() {}", AstFactory.functionDeclaration(null, null, "f", AstFactory.functionExpression()));
+ _assertSource("f() {}", AstFactory.functionDeclaration(null, null, "f", AstFactory.functionExpression()));
}
void test_visitFunctionDeclaration_setter() {
- assertSource("set f() {}", AstFactory.functionDeclaration(null, Keyword.SET, "f", AstFactory.functionExpression()));
+ _assertSource("set f() {}", AstFactory.functionDeclaration(null, Keyword.SET, "f", AstFactory.functionExpression()));
+ }
+
+ void test_visitFunctionDeclaration_withMetadata() {
+ FunctionDeclaration declaration = AstFactory.functionDeclaration(null, null, "f", AstFactory.functionExpression());
+ declaration.metadata = AstFactory.list([AstFactory.annotation(AstFactory.identifier3("deprecated"))]);
+ _assertSource("@deprecated f() {}", declaration);
}
void test_visitFunctionDeclarationStatement() {
- assertSource("f() {};", AstFactory.functionDeclarationStatement(null, null, "f", AstFactory.functionExpression()));
+ _assertSource("f() {};", AstFactory.functionDeclarationStatement(null, null, "f", AstFactory.functionExpression()));
}
void test_visitFunctionExpression() {
- assertSource("() {}", AstFactory.functionExpression());
+ _assertSource("() {}", AstFactory.functionExpression());
}
void test_visitFunctionExpressionInvocation() {
- assertSource("f()", AstFactory.functionExpressionInvocation(AstFactory.identifier3("f"), []));
+ _assertSource("f()", AstFactory.functionExpressionInvocation(AstFactory.identifier3("f"), []));
+ }
+
+ void test_visitFunctionTypeAlias_generic() {
+ _assertSource("typedef A F<B>();", AstFactory.typeAlias(AstFactory.typeName4("A", []), "F", AstFactory.typeParameterList(["B"]), AstFactory.formalParameterList([])));
+ }
+
+ void test_visitFunctionTypeAlias_nonGeneric() {
+ _assertSource("typedef A F();", AstFactory.typeAlias(AstFactory.typeName4("A", []), "F", null, AstFactory.formalParameterList([])));
+ }
+
+ void test_visitFunctionTypeAlias_withMetadata() {
+ FunctionTypeAlias declaration = AstFactory.typeAlias(AstFactory.typeName4("A", []), "F", null, AstFactory.formalParameterList([]));
+ declaration.metadata = AstFactory.list([AstFactory.annotation(AstFactory.identifier3("deprecated"))]);
+ _assertSource("@deprecated typedef A F();", declaration);
}
void test_visitFunctionTypedFormalParameter_noType() {
- assertSource("f()", AstFactory.functionTypedFormalParameter(null, "f", []));
+ _assertSource("f()", AstFactory.functionTypedFormalParameter(null, "f", []));
}
void test_visitFunctionTypedFormalParameter_type() {
- assertSource("T f()", AstFactory.functionTypedFormalParameter(AstFactory.typeName4("T", []), "f", []));
+ _assertSource("T f()", AstFactory.functionTypedFormalParameter(AstFactory.typeName4("T", []), "f", []));
}
void test_visitIfStatement_withElse() {
- assertSource("if (c) {} else {}", AstFactory.ifStatement2(AstFactory.identifier3("c"), AstFactory.block([]), AstFactory.block([])));
+ _assertSource("if (c) {} else {}", AstFactory.ifStatement2(AstFactory.identifier3("c"), AstFactory.block([]), AstFactory.block([])));
}
void test_visitIfStatement_withoutElse() {
- assertSource("if (c) {}", AstFactory.ifStatement(AstFactory.identifier3("c"), AstFactory.block([])));
+ _assertSource("if (c) {}", AstFactory.ifStatement(AstFactory.identifier3("c"), AstFactory.block([])));
}
void test_visitImplementsClause_multiple() {
- assertSource("implements A, B", AstFactory.implementsClause([
+ _assertSource("implements A, B", AstFactory.implementsClause([
AstFactory.typeName4("A", []),
AstFactory.typeName4("B", [])]));
}
void test_visitImplementsClause_single() {
- assertSource("implements A", AstFactory.implementsClause([AstFactory.typeName4("A", [])]));
+ _assertSource("implements A", AstFactory.implementsClause([AstFactory.typeName4("A", [])]));
}
void test_visitImportDirective_combinator() {
- assertSource("import 'a.dart' show A;", AstFactory.importDirective2("a.dart", null, [AstFactory.showCombinator([AstFactory.identifier3("A")])]));
+ _assertSource("import 'a.dart' show A;", AstFactory.importDirective2("a.dart", null, [AstFactory.showCombinator([AstFactory.identifier3("A")])]));
}
void test_visitImportDirective_combinators() {
- assertSource("import 'a.dart' show A hide B;", AstFactory.importDirective2("a.dart", null, [
+ _assertSource("import 'a.dart' show A hide B;", AstFactory.importDirective2("a.dart", null, [
AstFactory.showCombinator([AstFactory.identifier3("A")]),
AstFactory.hideCombinator([AstFactory.identifier3("B")])]));
}
void test_visitImportDirective_minimal() {
- assertSource("import 'a.dart';", AstFactory.importDirective2("a.dart", null, []));
+ _assertSource("import 'a.dart';", AstFactory.importDirective2("a.dart", null, []));
}
void test_visitImportDirective_prefix() {
- assertSource("import 'a.dart' as p;", AstFactory.importDirective2("a.dart", "p", []));
+ _assertSource("import 'a.dart' as p;", AstFactory.importDirective2("a.dart", "p", []));
}
void test_visitImportDirective_prefix_combinator() {
- assertSource("import 'a.dart' as p show A;", AstFactory.importDirective2("a.dart", "p", [AstFactory.showCombinator([AstFactory.identifier3("A")])]));
+ _assertSource("import 'a.dart' as p show A;", AstFactory.importDirective2("a.dart", "p", [AstFactory.showCombinator([AstFactory.identifier3("A")])]));
}
void test_visitImportDirective_prefix_combinators() {
- assertSource("import 'a.dart' as p show A hide B;", AstFactory.importDirective2("a.dart", "p", [
+ _assertSource("import 'a.dart' as p show A hide B;", AstFactory.importDirective2("a.dart", "p", [
AstFactory.showCombinator([AstFactory.identifier3("A")]),
AstFactory.hideCombinator([AstFactory.identifier3("B")])]));
}
+ void test_visitImportDirective_withMetadata() {
+ ImportDirective directive = AstFactory.importDirective2("a.dart", null, []);
+ directive.metadata = AstFactory.list([AstFactory.annotation(AstFactory.identifier3("deprecated"))]);
+ _assertSource("@deprecated import 'a.dart';", directive);
+ }
+
void test_visitImportHideCombinator_multiple() {
- assertSource("hide a, b", AstFactory.hideCombinator([AstFactory.identifier3("a"), AstFactory.identifier3("b")]));
+ _assertSource("hide a, b", AstFactory.hideCombinator([AstFactory.identifier3("a"), AstFactory.identifier3("b")]));
}
void test_visitImportHideCombinator_single() {
- assertSource("hide a", AstFactory.hideCombinator([AstFactory.identifier3("a")]));
+ _assertSource("hide a", AstFactory.hideCombinator([AstFactory.identifier3("a")]));
}
void test_visitImportShowCombinator_multiple() {
- assertSource("show a, b", AstFactory.showCombinator([AstFactory.identifier3("a"), AstFactory.identifier3("b")]));
+ _assertSource("show a, b", AstFactory.showCombinator([AstFactory.identifier3("a"), AstFactory.identifier3("b")]));
}
void test_visitImportShowCombinator_single() {
- assertSource("show a", AstFactory.showCombinator([AstFactory.identifier3("a")]));
+ _assertSource("show a", AstFactory.showCombinator([AstFactory.identifier3("a")]));
}
void test_visitIndexExpression() {
- assertSource("a[i]", AstFactory.indexExpression(AstFactory.identifier3("a"), AstFactory.identifier3("i")));
+ _assertSource("a[i]", AstFactory.indexExpression(AstFactory.identifier3("a"), AstFactory.identifier3("i")));
}
void test_visitInstanceCreationExpression_const() {
- assertSource("const C()", AstFactory.instanceCreationExpression2(Keyword.CONST, AstFactory.typeName4("C", []), []));
+ _assertSource("const C()", AstFactory.instanceCreationExpression2(Keyword.CONST, AstFactory.typeName4("C", []), []));
}
void test_visitInstanceCreationExpression_named() {
- assertSource("new C.c()", AstFactory.instanceCreationExpression3(Keyword.NEW, AstFactory.typeName4("C", []), "c", []));
+ _assertSource("new C.c()", AstFactory.instanceCreationExpression3(Keyword.NEW, AstFactory.typeName4("C", []), "c", []));
}
void test_visitInstanceCreationExpression_unnamed() {
- assertSource("new C()", AstFactory.instanceCreationExpression2(Keyword.NEW, AstFactory.typeName4("C", []), []));
+ _assertSource("new C()", AstFactory.instanceCreationExpression2(Keyword.NEW, AstFactory.typeName4("C", []), []));
}
void test_visitIntegerLiteral() {
- assertSource("42", AstFactory.integer(42));
+ _assertSource("42", AstFactory.integer(42));
}
void test_visitInterpolationExpression_expression() {
- assertSource("\${a}", AstFactory.interpolationExpression(AstFactory.identifier3("a")));
+ _assertSource("\${a}", AstFactory.interpolationExpression(AstFactory.identifier3("a")));
}
void test_visitInterpolationExpression_identifier() {
- assertSource("\$a", AstFactory.interpolationExpression2("a"));
+ _assertSource("\$a", AstFactory.interpolationExpression2("a"));
}
void test_visitInterpolationString() {
- assertSource("'x", AstFactory.interpolationString("'x", "x"));
+ _assertSource("'x", AstFactory.interpolationString("'x", "x"));
}
void test_visitIsExpression_negated() {
- assertSource("a is! C", AstFactory.isExpression(AstFactory.identifier3("a"), true, AstFactory.typeName4("C", [])));
+ _assertSource("a is! C", AstFactory.isExpression(AstFactory.identifier3("a"), true, AstFactory.typeName4("C", [])));
}
void test_visitIsExpression_normal() {
- assertSource("a is C", AstFactory.isExpression(AstFactory.identifier3("a"), false, AstFactory.typeName4("C", [])));
+ _assertSource("a is C", AstFactory.isExpression(AstFactory.identifier3("a"), false, AstFactory.typeName4("C", [])));
}
void test_visitLabel() {
- assertSource("a:", AstFactory.label2("a"));
+ _assertSource("a:", AstFactory.label2("a"));
}
void test_visitLabeledStatement_multiple() {
- assertSource("a: b: return;", AstFactory.labeledStatement(AstFactory.list([AstFactory.label2("a"), AstFactory.label2("b")]), AstFactory.returnStatement()));
+ _assertSource("a: b: return;", AstFactory.labeledStatement(AstFactory.list([AstFactory.label2("a"), AstFactory.label2("b")]), AstFactory.returnStatement()));
}
void test_visitLabeledStatement_single() {
- assertSource("a: return;", AstFactory.labeledStatement(AstFactory.list([AstFactory.label2("a")]), AstFactory.returnStatement()));
+ _assertSource("a: return;", AstFactory.labeledStatement(AstFactory.list([AstFactory.label2("a")]), AstFactory.returnStatement()));
}
void test_visitLibraryDirective() {
- assertSource("library l;", AstFactory.libraryDirective2("l"));
+ _assertSource("library l;", AstFactory.libraryDirective2("l"));
+ }
+
+ void test_visitLibraryDirective_withMetadata() {
+ LibraryDirective directive = AstFactory.libraryDirective2("l");
+ directive.metadata = AstFactory.list([AstFactory.annotation(AstFactory.identifier3("deprecated"))]);
+ _assertSource("@deprecated library l;", directive);
}
void test_visitLibraryIdentifier_multiple() {
- assertSource("a.b.c", AstFactory.libraryIdentifier([
+ _assertSource("a.b.c", AstFactory.libraryIdentifier([
AstFactory.identifier3("a"),
AstFactory.identifier3("b"),
AstFactory.identifier3("c")]));
}
void test_visitLibraryIdentifier_single() {
- assertSource("a", AstFactory.libraryIdentifier([AstFactory.identifier3("a")]));
+ _assertSource("a", AstFactory.libraryIdentifier([AstFactory.identifier3("a")]));
}
void test_visitListLiteral_const() {
- assertSource("const []", AstFactory.listLiteral2(Keyword.CONST, null, []));
+ _assertSource("const []", AstFactory.listLiteral2(Keyword.CONST, null, []));
}
void test_visitListLiteral_empty() {
- assertSource("[]", AstFactory.listLiteral([]));
+ _assertSource("[]", AstFactory.listLiteral([]));
}
void test_visitListLiteral_nonEmpty() {
- assertSource("[a, b, c]", AstFactory.listLiteral([
+ _assertSource("[a, b, c]", AstFactory.listLiteral([
AstFactory.identifier3("a"),
AstFactory.identifier3("b"),
AstFactory.identifier3("c")]));
}
void test_visitMapLiteral_const() {
- assertSource("const {}", AstFactory.mapLiteral(Keyword.CONST, null, []));
+ _assertSource("const {}", AstFactory.mapLiteral(Keyword.CONST, null, []));
}
void test_visitMapLiteral_empty() {
- assertSource("{}", AstFactory.mapLiteral2([]));
+ _assertSource("{}", AstFactory.mapLiteral2([]));
}
void test_visitMapLiteral_nonEmpty() {
- assertSource("{'a' : a, 'b' : b, 'c' : c}", AstFactory.mapLiteral2([
+ _assertSource("{'a' : a, 'b' : b, 'c' : c}", AstFactory.mapLiteral2([
AstFactory.mapLiteralEntry("a", AstFactory.identifier3("a")),
AstFactory.mapLiteralEntry("b", AstFactory.identifier3("b")),
AstFactory.mapLiteralEntry("c", AstFactory.identifier3("c"))]));
}
void test_visitMapLiteralEntry() {
- assertSource("'a' : b", AstFactory.mapLiteralEntry("a", AstFactory.identifier3("b")));
+ _assertSource("'a' : b", AstFactory.mapLiteralEntry("a", AstFactory.identifier3("b")));
}
void test_visitMethodDeclaration_external() {
- assertSource("external m();", AstFactory.methodDeclaration(null, null, null, null, AstFactory.identifier3("m"), AstFactory.formalParameterList([])));
+ _assertSource("external m();", AstFactory.methodDeclaration(null, null, null, null, AstFactory.identifier3("m"), AstFactory.formalParameterList([])));
}
void test_visitMethodDeclaration_external_returnType() {
- assertSource("external T m();", AstFactory.methodDeclaration(null, AstFactory.typeName4("T", []), null, null, AstFactory.identifier3("m"), AstFactory.formalParameterList([])));
+ _assertSource("external T m();", AstFactory.methodDeclaration(null, AstFactory.typeName4("T", []), null, null, AstFactory.identifier3("m"), AstFactory.formalParameterList([])));
}
void test_visitMethodDeclaration_getter() {
- assertSource("get m {}", AstFactory.methodDeclaration2(null, null, Keyword.GET, null, AstFactory.identifier3("m"), null, AstFactory.blockFunctionBody2([])));
+ _assertSource("get m {}", AstFactory.methodDeclaration2(null, null, Keyword.GET, null, AstFactory.identifier3("m"), null, AstFactory.blockFunctionBody2([])));
}
void test_visitMethodDeclaration_getter_returnType() {
- assertSource("T get m {}", AstFactory.methodDeclaration2(null, AstFactory.typeName4("T", []), Keyword.GET, null, AstFactory.identifier3("m"), null, AstFactory.blockFunctionBody2([])));
+ _assertSource("T get m {}", AstFactory.methodDeclaration2(null, AstFactory.typeName4("T", []), Keyword.GET, null, AstFactory.identifier3("m"), null, AstFactory.blockFunctionBody2([])));
}
void test_visitMethodDeclaration_getter_seturnType() {
- assertSource("T set m(var v) {}", AstFactory.methodDeclaration2(null, AstFactory.typeName4("T", []), Keyword.SET, null, AstFactory.identifier3("m"), AstFactory.formalParameterList([AstFactory.simpleFormalParameter(Keyword.VAR, "v")]), AstFactory.blockFunctionBody2([])));
+ _assertSource("T set m(var v) {}", AstFactory.methodDeclaration2(null, AstFactory.typeName4("T", []), Keyword.SET, null, AstFactory.identifier3("m"), AstFactory.formalParameterList([AstFactory.simpleFormalParameter(Keyword.VAR, "v")]), AstFactory.blockFunctionBody2([])));
}
void test_visitMethodDeclaration_minimal() {
- assertSource("m() {}", AstFactory.methodDeclaration2(null, null, null, null, AstFactory.identifier3("m"), AstFactory.formalParameterList([]), AstFactory.blockFunctionBody2([])));
+ _assertSource("m() {}", AstFactory.methodDeclaration2(null, null, null, null, AstFactory.identifier3("m"), AstFactory.formalParameterList([]), AstFactory.blockFunctionBody2([])));
}
void test_visitMethodDeclaration_multipleParameters() {
- assertSource("m(var a, var b) {}", AstFactory.methodDeclaration2(null, null, null, null, AstFactory.identifier3("m"), AstFactory.formalParameterList([
+ _assertSource("m(var a, var b) {}", AstFactory.methodDeclaration2(null, null, null, null, AstFactory.identifier3("m"), AstFactory.formalParameterList([
AstFactory.simpleFormalParameter(Keyword.VAR, "a"),
AstFactory.simpleFormalParameter(Keyword.VAR, "b")]), AstFactory.blockFunctionBody2([])));
}
void test_visitMethodDeclaration_operator() {
- assertSource("operator +() {}", AstFactory.methodDeclaration2(null, null, null, Keyword.OPERATOR, AstFactory.identifier3("+"), AstFactory.formalParameterList([]), AstFactory.blockFunctionBody2([])));
+ _assertSource("operator +() {}", AstFactory.methodDeclaration2(null, null, null, Keyword.OPERATOR, AstFactory.identifier3("+"), AstFactory.formalParameterList([]), AstFactory.blockFunctionBody2([])));
}
void test_visitMethodDeclaration_operator_returnType() {
- assertSource("T operator +() {}", AstFactory.methodDeclaration2(null, AstFactory.typeName4("T", []), null, Keyword.OPERATOR, AstFactory.identifier3("+"), AstFactory.formalParameterList([]), AstFactory.blockFunctionBody2([])));
+ _assertSource("T operator +() {}", AstFactory.methodDeclaration2(null, AstFactory.typeName4("T", []), null, Keyword.OPERATOR, AstFactory.identifier3("+"), AstFactory.formalParameterList([]), AstFactory.blockFunctionBody2([])));
}
void test_visitMethodDeclaration_returnType() {
- assertSource("T m() {}", AstFactory.methodDeclaration2(null, AstFactory.typeName4("T", []), null, null, AstFactory.identifier3("m"), AstFactory.formalParameterList([]), AstFactory.blockFunctionBody2([])));
+ _assertSource("T m() {}", AstFactory.methodDeclaration2(null, AstFactory.typeName4("T", []), null, null, AstFactory.identifier3("m"), AstFactory.formalParameterList([]), AstFactory.blockFunctionBody2([])));
}
void test_visitMethodDeclaration_setter() {
- assertSource("set m(var v) {}", AstFactory.methodDeclaration2(null, null, Keyword.SET, null, AstFactory.identifier3("m"), AstFactory.formalParameterList([AstFactory.simpleFormalParameter(Keyword.VAR, "v")]), AstFactory.blockFunctionBody2([])));
+ _assertSource("set m(var v) {}", AstFactory.methodDeclaration2(null, null, Keyword.SET, null, AstFactory.identifier3("m"), AstFactory.formalParameterList([AstFactory.simpleFormalParameter(Keyword.VAR, "v")]), AstFactory.blockFunctionBody2([])));
}
void test_visitMethodDeclaration_static() {
- assertSource("static m() {}", AstFactory.methodDeclaration2(Keyword.STATIC, null, null, null, AstFactory.identifier3("m"), AstFactory.formalParameterList([]), AstFactory.blockFunctionBody2([])));
+ _assertSource("static m() {}", AstFactory.methodDeclaration2(Keyword.STATIC, null, null, null, AstFactory.identifier3("m"), AstFactory.formalParameterList([]), AstFactory.blockFunctionBody2([])));
}
void test_visitMethodDeclaration_static_returnType() {
- assertSource("static T m() {}", AstFactory.methodDeclaration2(Keyword.STATIC, AstFactory.typeName4("T", []), null, null, AstFactory.identifier3("m"), AstFactory.formalParameterList([]), AstFactory.blockFunctionBody2([])));
+ _assertSource("static T m() {}", AstFactory.methodDeclaration2(Keyword.STATIC, AstFactory.typeName4("T", []), null, null, AstFactory.identifier3("m"), AstFactory.formalParameterList([]), AstFactory.blockFunctionBody2([])));
+ }
+
+ void test_visitMethodDeclaration_withMetadata() {
+ MethodDeclaration declaration = AstFactory.methodDeclaration2(null, null, null, null, AstFactory.identifier3("m"), AstFactory.formalParameterList([]), AstFactory.blockFunctionBody2([]));
+ declaration.metadata = AstFactory.list([AstFactory.annotation(AstFactory.identifier3("deprecated"))]);
+ _assertSource("@deprecated m() {}", declaration);
}
void test_visitMethodInvocation_noTarget() {
- assertSource("m()", AstFactory.methodInvocation2("m", []));
+ _assertSource("m()", AstFactory.methodInvocation2("m", []));
}
void test_visitMethodInvocation_target() {
- assertSource("t.m()", AstFactory.methodInvocation(AstFactory.identifier3("t"), "m", []));
+ _assertSource("t.m()", AstFactory.methodInvocation(AstFactory.identifier3("t"), "m", []));
}
void test_visitNamedExpression() {
- assertSource("a: b", AstFactory.namedExpression2("a", AstFactory.identifier3("b")));
+ _assertSource("a: b", AstFactory.namedExpression2("a", AstFactory.identifier3("b")));
}
void test_visitNamedFormalParameter() {
- assertSource("var a : 0", AstFactory.namedFormalParameter(AstFactory.simpleFormalParameter(Keyword.VAR, "a"), AstFactory.integer(0)));
+ _assertSource("var a : 0", AstFactory.namedFormalParameter(AstFactory.simpleFormalParameter(Keyword.VAR, "a"), AstFactory.integer(0)));
}
void test_visitNativeClause() {
- assertSource("native 'code'", AstFactory.nativeClause("code"));
+ _assertSource("native 'code'", AstFactory.nativeClause("code"));
}
void test_visitNativeFunctionBody() {
- assertSource("native 'str';", AstFactory.nativeFunctionBody("str"));
+ _assertSource("native 'str';", AstFactory.nativeFunctionBody("str"));
}
void test_visitNullLiteral() {
- assertSource("null", AstFactory.nullLiteral());
+ _assertSource("null", AstFactory.nullLiteral());
}
void test_visitParenthesizedExpression() {
- assertSource("(a)", AstFactory.parenthesizedExpression(AstFactory.identifier3("a")));
+ _assertSource("(a)", AstFactory.parenthesizedExpression(AstFactory.identifier3("a")));
}
void test_visitPartDirective() {
- assertSource("part 'a.dart';", AstFactory.partDirective2("a.dart"));
+ _assertSource("part 'a.dart';", AstFactory.partDirective2("a.dart"));
+ }
+
+ void test_visitPartDirective_withMetadata() {
+ PartDirective directive = AstFactory.partDirective2("a.dart");
+ directive.metadata = AstFactory.list([AstFactory.annotation(AstFactory.identifier3("deprecated"))]);
+ _assertSource("@deprecated part 'a.dart';", directive);
}
void test_visitPartOfDirective() {
- assertSource("part of l;", AstFactory.partOfDirective(AstFactory.libraryIdentifier2(["l"])));
+ _assertSource("part of l;", AstFactory.partOfDirective(AstFactory.libraryIdentifier2(["l"])));
+ }
+
+ void test_visitPartOfDirective_withMetadata() {
+ PartOfDirective directive = AstFactory.partOfDirective(AstFactory.libraryIdentifier2(["l"]));
+ directive.metadata = AstFactory.list([AstFactory.annotation(AstFactory.identifier3("deprecated"))]);
+ _assertSource("@deprecated part of l;", directive);
}
void test_visitPositionalFormalParameter() {
- assertSource("var a = 0", AstFactory.positionalFormalParameter(AstFactory.simpleFormalParameter(Keyword.VAR, "a"), AstFactory.integer(0)));
+ _assertSource("var a = 0", AstFactory.positionalFormalParameter(AstFactory.simpleFormalParameter(Keyword.VAR, "a"), AstFactory.integer(0)));
}
void test_visitPostfixExpression() {
- assertSource("a++", AstFactory.postfixExpression(AstFactory.identifier3("a"), TokenType.PLUS_PLUS));
+ _assertSource("a++", AstFactory.postfixExpression(AstFactory.identifier3("a"), TokenType.PLUS_PLUS));
}
void test_visitPrefixedIdentifier() {
- assertSource("a.b", AstFactory.identifier5("a", "b"));
+ _assertSource("a.b", AstFactory.identifier5("a", "b"));
}
void test_visitPrefixExpression() {
- assertSource("-a", AstFactory.prefixExpression(TokenType.MINUS, AstFactory.identifier3("a")));
+ _assertSource("-a", AstFactory.prefixExpression(TokenType.MINUS, AstFactory.identifier3("a")));
}
void test_visitPropertyAccess() {
- assertSource("a.b", AstFactory.propertyAccess2(AstFactory.identifier3("a"), "b"));
+ _assertSource("a.b", AstFactory.propertyAccess2(AstFactory.identifier3("a"), "b"));
}
void test_visitRedirectingConstructorInvocation_named() {
- assertSource("this.c()", AstFactory.redirectingConstructorInvocation2("c", []));
+ _assertSource("this.c()", AstFactory.redirectingConstructorInvocation2("c", []));
}
void test_visitRedirectingConstructorInvocation_unnamed() {
- assertSource("this()", AstFactory.redirectingConstructorInvocation([]));
+ _assertSource("this()", AstFactory.redirectingConstructorInvocation([]));
}
void test_visitRethrowExpression() {
- assertSource("rethrow", AstFactory.rethrowExpression());
+ _assertSource("rethrow", AstFactory.rethrowExpression());
}
void test_visitReturnStatement_expression() {
- assertSource("return a;", AstFactory.returnStatement2(AstFactory.identifier3("a")));
+ _assertSource("return a;", AstFactory.returnStatement2(AstFactory.identifier3("a")));
}
void test_visitReturnStatement_noExpression() {
- assertSource("return;", AstFactory.returnStatement());
+ _assertSource("return;", AstFactory.returnStatement());
}
void test_visitScriptTag() {
String scriptTag = "!#/bin/dart.exe";
- assertSource(scriptTag, AstFactory.scriptTag(scriptTag));
+ _assertSource(scriptTag, AstFactory.scriptTag(scriptTag));
}
void test_visitSimpleFormalParameter_keyword() {
- assertSource("var a", AstFactory.simpleFormalParameter(Keyword.VAR, "a"));
+ _assertSource("var a", AstFactory.simpleFormalParameter(Keyword.VAR, "a"));
}
void test_visitSimpleFormalParameter_keyword_type() {
- assertSource("final A a", AstFactory.simpleFormalParameter2(Keyword.FINAL, AstFactory.typeName4("A", []), "a"));
+ _assertSource("final A a", AstFactory.simpleFormalParameter2(Keyword.FINAL, AstFactory.typeName4("A", []), "a"));
}
void test_visitSimpleFormalParameter_type() {
- assertSource("A a", AstFactory.simpleFormalParameter4(AstFactory.typeName4("A", []), "a"));
+ _assertSource("A a", AstFactory.simpleFormalParameter4(AstFactory.typeName4("A", []), "a"));
}
void test_visitSimpleIdentifier() {
- assertSource("a", AstFactory.identifier3("a"));
+ _assertSource("a", AstFactory.identifier3("a"));
}
void test_visitSimpleStringLiteral() {
- assertSource("'a'", AstFactory.string2("a"));
+ _assertSource("'a'", AstFactory.string2("a"));
}
void test_visitStringInterpolation() {
- assertSource("'a\${e}b'", AstFactory.string([
+ _assertSource("'a\${e}b'", AstFactory.string([
AstFactory.interpolationString("'a", "a"),
AstFactory.interpolationExpression(AstFactory.identifier3("e")),
AstFactory.interpolationString("b'", "b")]));
}
void test_visitSuperConstructorInvocation() {
- assertSource("super()", AstFactory.superConstructorInvocation([]));
+ _assertSource("super()", AstFactory.superConstructorInvocation([]));
}
void test_visitSuperConstructorInvocation_named() {
- assertSource("super.c()", AstFactory.superConstructorInvocation2("c", []));
+ _assertSource("super.c()", AstFactory.superConstructorInvocation2("c", []));
}
void test_visitSuperExpression() {
- assertSource("super", AstFactory.superExpression());
+ _assertSource("super", AstFactory.superExpression());
}
void test_visitSwitchCase_multipleLabels() {
- assertSource("l1: l2: case a: {}", AstFactory.switchCase2(AstFactory.list([AstFactory.label2("l1"), AstFactory.label2("l2")]), AstFactory.identifier3("a"), [AstFactory.block([])]));
+ _assertSource("l1: l2: case a: {}", AstFactory.switchCase2(AstFactory.list([AstFactory.label2("l1"), AstFactory.label2("l2")]), AstFactory.identifier3("a"), [AstFactory.block([])]));
}
void test_visitSwitchCase_multipleStatements() {
- assertSource("case a: {} {}", AstFactory.switchCase(AstFactory.identifier3("a"), [AstFactory.block([]), AstFactory.block([])]));
+ _assertSource("case a: {} {}", AstFactory.switchCase(AstFactory.identifier3("a"), [AstFactory.block([]), AstFactory.block([])]));
}
void test_visitSwitchCase_noLabels() {
- assertSource("case a: {}", AstFactory.switchCase(AstFactory.identifier3("a"), [AstFactory.block([])]));
+ _assertSource("case a: {}", AstFactory.switchCase(AstFactory.identifier3("a"), [AstFactory.block([])]));
}
void test_visitSwitchCase_singleLabel() {
- assertSource("l1: case a: {}", AstFactory.switchCase2(AstFactory.list([AstFactory.label2("l1")]), AstFactory.identifier3("a"), [AstFactory.block([])]));
+ _assertSource("l1: case a: {}", AstFactory.switchCase2(AstFactory.list([AstFactory.label2("l1")]), AstFactory.identifier3("a"), [AstFactory.block([])]));
}
void test_visitSwitchDefault_multipleLabels() {
- assertSource("l1: l2: default: {}", AstFactory.switchDefault(AstFactory.list([AstFactory.label2("l1"), AstFactory.label2("l2")]), [AstFactory.block([])]));
+ _assertSource("l1: l2: default: {}", AstFactory.switchDefault(AstFactory.list([AstFactory.label2("l1"), AstFactory.label2("l2")]), [AstFactory.block([])]));
}
void test_visitSwitchDefault_multipleStatements() {
- assertSource("default: {} {}", AstFactory.switchDefault2([AstFactory.block([]), AstFactory.block([])]));
+ _assertSource("default: {} {}", AstFactory.switchDefault2([AstFactory.block([]), AstFactory.block([])]));
}
void test_visitSwitchDefault_noLabels() {
- assertSource("default: {}", AstFactory.switchDefault2([AstFactory.block([])]));
+ _assertSource("default: {}", AstFactory.switchDefault2([AstFactory.block([])]));
}
void test_visitSwitchDefault_singleLabel() {
- assertSource("l1: default: {}", AstFactory.switchDefault(AstFactory.list([AstFactory.label2("l1")]), [AstFactory.block([])]));
+ _assertSource("l1: default: {}", AstFactory.switchDefault(AstFactory.list([AstFactory.label2("l1")]), [AstFactory.block([])]));
}
void test_visitSwitchStatement() {
- assertSource("switch (a) {case 'b': {} default: {}}", AstFactory.switchStatement(AstFactory.identifier3("a"), [
+ _assertSource("switch (a) {case 'b': {} default: {}}", AstFactory.switchStatement(AstFactory.identifier3("a"), [
AstFactory.switchCase(AstFactory.string2("b"), [AstFactory.block([])]),
AstFactory.switchDefault2([AstFactory.block([])])]));
}
void test_visitSymbolLiteral_multiple() {
- assertSource("#a.b.c", AstFactory.symbolLiteral(["a", "b", "c"]));
+ _assertSource("#a.b.c", AstFactory.symbolLiteral(["a", "b", "c"]));
}
void test_visitSymbolLiteral_single() {
- assertSource("#a", AstFactory.symbolLiteral(["a"]));
+ _assertSource("#a", AstFactory.symbolLiteral(["a"]));
}
void test_visitThisExpression() {
- assertSource("this", AstFactory.thisExpression());
+ _assertSource("this", AstFactory.thisExpression());
}
void test_visitThrowStatement() {
- assertSource("throw e", AstFactory.throwExpression2(AstFactory.identifier3("e")));
+ _assertSource("throw e", AstFactory.throwExpression2(AstFactory.identifier3("e")));
}
void test_visitTopLevelVariableDeclaration_multiple() {
- assertSource("var a;", AstFactory.topLevelVariableDeclaration2(Keyword.VAR, [AstFactory.variableDeclaration("a")]));
+ _assertSource("var a;", AstFactory.topLevelVariableDeclaration2(Keyword.VAR, [AstFactory.variableDeclaration("a")]));
}
void test_visitTopLevelVariableDeclaration_single() {
- assertSource("var a, b;", AstFactory.topLevelVariableDeclaration2(Keyword.VAR, [
+ _assertSource("var a, b;", AstFactory.topLevelVariableDeclaration2(Keyword.VAR, [
AstFactory.variableDeclaration("a"),
AstFactory.variableDeclaration("b")]));
}
void test_visitTryStatement_catch() {
- assertSource("try {} on E {}", AstFactory.tryStatement2(AstFactory.block([]), [AstFactory.catchClause3(AstFactory.typeName4("E", []), [])]));
+ _assertSource("try {} on E {}", AstFactory.tryStatement2(AstFactory.block([]), [AstFactory.catchClause3(AstFactory.typeName4("E", []), [])]));
}
void test_visitTryStatement_catches() {
- assertSource("try {} on E {} on F {}", AstFactory.tryStatement2(AstFactory.block([]), [
+ _assertSource("try {} on E {} on F {}", AstFactory.tryStatement2(AstFactory.block([]), [
AstFactory.catchClause3(AstFactory.typeName4("E", []), []),
AstFactory.catchClause3(AstFactory.typeName4("F", []), [])]));
}
void test_visitTryStatement_catchFinally() {
- assertSource("try {} on E {} finally {}", AstFactory.tryStatement3(AstFactory.block([]), AstFactory.list([AstFactory.catchClause3(AstFactory.typeName4("E", []), [])]), AstFactory.block([])));
+ _assertSource("try {} on E {} finally {}", AstFactory.tryStatement3(AstFactory.block([]), AstFactory.list([AstFactory.catchClause3(AstFactory.typeName4("E", []), [])]), AstFactory.block([])));
}
void test_visitTryStatement_finally() {
- assertSource("try {} finally {}", AstFactory.tryStatement(AstFactory.block([]), AstFactory.block([])));
- }
-
- void test_visitTypeAlias_generic() {
- assertSource("typedef A F<B>();", AstFactory.typeAlias(AstFactory.typeName4("A", []), "F", AstFactory.typeParameterList(["B"]), AstFactory.formalParameterList([])));
- }
-
- void test_visitTypeAlias_nonGeneric() {
- assertSource("typedef A F();", AstFactory.typeAlias(AstFactory.typeName4("A", []), "F", null, AstFactory.formalParameterList([])));
+ _assertSource("try {} finally {}", AstFactory.tryStatement(AstFactory.block([]), AstFactory.block([])));
}
void test_visitTypeArgumentList_multiple() {
- assertSource("<E, F>", AstFactory.typeArgumentList([
+ _assertSource("<E, F>", AstFactory.typeArgumentList([
AstFactory.typeName4("E", []),
AstFactory.typeName4("F", [])]));
}
void test_visitTypeArgumentList_single() {
- assertSource("<E>", AstFactory.typeArgumentList([AstFactory.typeName4("E", [])]));
+ _assertSource("<E>", AstFactory.typeArgumentList([AstFactory.typeName4("E", [])]));
}
void test_visitTypeName_multipleArgs() {
- assertSource("C<D, E>", AstFactory.typeName4("C", [
+ _assertSource("C<D, E>", AstFactory.typeName4("C", [
AstFactory.typeName4("D", []),
AstFactory.typeName4("E", [])]));
}
void test_visitTypeName_nestedArg() {
- assertSource("C<D<E>>", AstFactory.typeName4("C", [AstFactory.typeName4("D", [AstFactory.typeName4("E", [])])]));
+ _assertSource("C<D<E>>", AstFactory.typeName4("C", [AstFactory.typeName4("D", [AstFactory.typeName4("E", [])])]));
}
void test_visitTypeName_noArgs() {
- assertSource("C", AstFactory.typeName4("C", []));
+ _assertSource("C", AstFactory.typeName4("C", []));
}
void test_visitTypeName_singleArg() {
- assertSource("C<D>", AstFactory.typeName4("C", [AstFactory.typeName4("D", [])]));
+ _assertSource("C<D>", AstFactory.typeName4("C", [AstFactory.typeName4("D", [])]));
}
void test_visitTypeParameter_withExtends() {
- assertSource("E extends C", AstFactory.typeParameter2("E", AstFactory.typeName4("C", [])));
+ _assertSource("E extends C", AstFactory.typeParameter2("E", AstFactory.typeName4("C", [])));
+ }
+
+ void test_visitTypeParameter_withMetadata() {
+ TypeParameter parameter = AstFactory.typeParameter("E");
+ parameter.metadata = AstFactory.list([AstFactory.annotation(AstFactory.identifier3("deprecated"))]);
+ _assertSource("@deprecated E", parameter);
}
void test_visitTypeParameter_withoutExtends() {
- assertSource("E", AstFactory.typeParameter("E"));
+ _assertSource("E", AstFactory.typeParameter("E"));
}
void test_visitTypeParameterList_multiple() {
- assertSource("<E, F>", AstFactory.typeParameterList(["E", "F"]));
+ _assertSource("<E, F>", AstFactory.typeParameterList(["E", "F"]));
}
void test_visitTypeParameterList_single() {
- assertSource("<E>", AstFactory.typeParameterList(["E"]));
+ _assertSource("<E>", AstFactory.typeParameterList(["E"]));
}
void test_visitVariableDeclaration_initialized() {
- assertSource("a = b", AstFactory.variableDeclaration2("a", AstFactory.identifier3("b")));
+ _assertSource("a = b", AstFactory.variableDeclaration2("a", AstFactory.identifier3("b")));
}
void test_visitVariableDeclaration_uninitialized() {
- assertSource("a", AstFactory.variableDeclaration("a"));
+ _assertSource("a", AstFactory.variableDeclaration("a"));
+ }
+
+ void test_visitVariableDeclaration_withMetadata() {
+ VariableDeclaration declaration = AstFactory.variableDeclaration("a");
+ declaration.metadata = AstFactory.list([AstFactory.annotation(AstFactory.identifier3("deprecated"))]);
+ _assertSource("@deprecated a", declaration);
}
void test_visitVariableDeclarationList_const_type() {
- assertSource("const C a, b", AstFactory.variableDeclarationList(Keyword.CONST, AstFactory.typeName4("C", []), [
+ _assertSource("const C a, b", AstFactory.variableDeclarationList(Keyword.CONST, AstFactory.typeName4("C", []), [
AstFactory.variableDeclaration("a"),
AstFactory.variableDeclaration("b")]));
}
void test_visitVariableDeclarationList_final_noType() {
- assertSource("final a, b", AstFactory.variableDeclarationList2(Keyword.FINAL, [
+ _assertSource("final a, b", AstFactory.variableDeclarationList2(Keyword.FINAL, [
AstFactory.variableDeclaration("a"),
AstFactory.variableDeclaration("b")]));
}
+ void test_visitVariableDeclarationList_final_withMetadata() {
+ VariableDeclarationList declarationList = AstFactory.variableDeclarationList2(Keyword.FINAL, [
+ AstFactory.variableDeclaration("a"),
+ AstFactory.variableDeclaration("b")]);
+ declarationList.metadata = AstFactory.list([AstFactory.annotation(AstFactory.identifier3("deprecated"))]);
+ _assertSource("@deprecated final a, b", declarationList);
+ }
+
void test_visitVariableDeclarationList_type() {
- assertSource("C a, b", AstFactory.variableDeclarationList(null, AstFactory.typeName4("C", []), [
+ _assertSource("C a, b", AstFactory.variableDeclarationList(null, AstFactory.typeName4("C", []), [
AstFactory.variableDeclaration("a"),
AstFactory.variableDeclaration("b")]));
}
void test_visitVariableDeclarationList_var() {
- assertSource("var a, b", AstFactory.variableDeclarationList2(Keyword.VAR, [
+ _assertSource("var a, b", AstFactory.variableDeclarationList2(Keyword.VAR, [
AstFactory.variableDeclaration("a"),
AstFactory.variableDeclaration("b")]));
}
void test_visitVariableDeclarationStatement() {
- assertSource("C c;", AstFactory.variableDeclarationStatement(null, AstFactory.typeName4("C", []), [AstFactory.variableDeclaration("c")]));
+ _assertSource("C c;", AstFactory.variableDeclarationStatement(null, AstFactory.typeName4("C", []), [AstFactory.variableDeclaration("c")]));
}
void test_visitWhileStatement() {
- assertSource("while (c) {}", AstFactory.whileStatement(AstFactory.identifier3("c"), AstFactory.block([])));
+ _assertSource("while (c) {}", AstFactory.whileStatement(AstFactory.identifier3("c"), AstFactory.block([])));
}
void test_visitWithClause_multiple() {
- assertSource("with A, B, C", AstFactory.withClause([
+ _assertSource("with A, B, C", AstFactory.withClause([
AstFactory.typeName4("A", []),
AstFactory.typeName4("B", []),
AstFactory.typeName4("C", [])]));
}
void test_visitWithClause_single() {
- assertSource("with A", AstFactory.withClause([AstFactory.typeName4("A", [])]));
+ _assertSource("with A", AstFactory.withClause([AstFactory.typeName4("A", [])]));
}
/**
@@ -3082,7 +3174,7 @@
* @param node the AST node being visited to produce the actual source
* @throws AFE if the visitor does not produce the expected source for the given node
*/
- void assertSource(String expectedSource, AstNode node) {
+ void _assertSource(String expectedSource, AstNode node) {
PrintStringWriter writer = new PrintStringWriter();
node.accept(new ToSourceVisitor(writer));
JUnitTestCase.assertEquals(expectedSource, writer.toString());
@@ -3242,6 +3334,10 @@
final __test = new ToSourceVisitorTest();
runJUnitTest(__test, __test.test_visitClassDeclaration_singleMember);
});
+ _ut.test('test_visitClassDeclaration_withMetadata', () {
+ final __test = new ToSourceVisitorTest();
+ runJUnitTest(__test, __test.test_visitClassDeclaration_withMetadata);
+ });
_ut.test('test_visitClassTypeAlias_abstract', () {
final __test = new ToSourceVisitorTest();
runJUnitTest(__test, __test.test_visitClassTypeAlias_abstract);
@@ -3274,6 +3370,10 @@
final __test = new ToSourceVisitorTest();
runJUnitTest(__test, __test.test_visitClassTypeAlias_parameters_implements);
});
+ _ut.test('test_visitClassTypeAlias_withMetadata', () {
+ final __test = new ToSourceVisitorTest();
+ runJUnitTest(__test, __test.test_visitClassTypeAlias_withMetadata);
+ });
_ut.test('test_visitComment', () {
final __test = new ToSourceVisitorTest();
runJUnitTest(__test, __test.test_visitComment);
@@ -3346,6 +3446,10 @@
final __test = new ToSourceVisitorTest();
runJUnitTest(__test, __test.test_visitConstructorDeclaration_singleInitializer);
});
+ _ut.test('test_visitConstructorDeclaration_withMetadata', () {
+ final __test = new ToSourceVisitorTest();
+ runJUnitTest(__test, __test.test_visitConstructorDeclaration_withMetadata);
+ });
_ut.test('test_visitConstructorFieldInitializer_withThis', () {
final __test = new ToSourceVisitorTest();
runJUnitTest(__test, __test.test_visitConstructorFieldInitializer_withThis);
@@ -3418,6 +3522,10 @@
final __test = new ToSourceVisitorTest();
runJUnitTest(__test, __test.test_visitExportDirective_minimal);
});
+ _ut.test('test_visitExportDirective_withMetadata', () {
+ final __test = new ToSourceVisitorTest();
+ runJUnitTest(__test, __test.test_visitExportDirective_withMetadata);
+ });
_ut.test('test_visitExpressionFunctionBody', () {
final __test = new ToSourceVisitorTest();
runJUnitTest(__test, __test.test_visitExpressionFunctionBody);
@@ -3438,6 +3546,10 @@
final __test = new ToSourceVisitorTest();
runJUnitTest(__test, __test.test_visitFieldDeclaration_static);
});
+ _ut.test('test_visitFieldDeclaration_withMetadata', () {
+ final __test = new ToSourceVisitorTest();
+ runJUnitTest(__test, __test.test_visitFieldDeclaration_withMetadata);
+ });
_ut.test('test_visitFieldFormalParameter_functionTyped', () {
final __test = new ToSourceVisitorTest();
runJUnitTest(__test, __test.test_visitFieldFormalParameter_functionTyped);
@@ -3578,6 +3690,10 @@
final __test = new ToSourceVisitorTest();
runJUnitTest(__test, __test.test_visitFunctionDeclaration_setter);
});
+ _ut.test('test_visitFunctionDeclaration_withMetadata', () {
+ final __test = new ToSourceVisitorTest();
+ runJUnitTest(__test, __test.test_visitFunctionDeclaration_withMetadata);
+ });
_ut.test('test_visitFunctionExpression', () {
final __test = new ToSourceVisitorTest();
runJUnitTest(__test, __test.test_visitFunctionExpression);
@@ -3586,6 +3702,18 @@
final __test = new ToSourceVisitorTest();
runJUnitTest(__test, __test.test_visitFunctionExpressionInvocation);
});
+ _ut.test('test_visitFunctionTypeAlias_generic', () {
+ final __test = new ToSourceVisitorTest();
+ runJUnitTest(__test, __test.test_visitFunctionTypeAlias_generic);
+ });
+ _ut.test('test_visitFunctionTypeAlias_nonGeneric', () {
+ final __test = new ToSourceVisitorTest();
+ runJUnitTest(__test, __test.test_visitFunctionTypeAlias_nonGeneric);
+ });
+ _ut.test('test_visitFunctionTypeAlias_withMetadata', () {
+ final __test = new ToSourceVisitorTest();
+ runJUnitTest(__test, __test.test_visitFunctionTypeAlias_withMetadata);
+ });
_ut.test('test_visitFunctionTypedFormalParameter_noType', () {
final __test = new ToSourceVisitorTest();
runJUnitTest(__test, __test.test_visitFunctionTypedFormalParameter_noType);
@@ -3634,6 +3762,10 @@
final __test = new ToSourceVisitorTest();
runJUnitTest(__test, __test.test_visitImportDirective_prefix_combinators);
});
+ _ut.test('test_visitImportDirective_withMetadata', () {
+ final __test = new ToSourceVisitorTest();
+ runJUnitTest(__test, __test.test_visitImportDirective_withMetadata);
+ });
_ut.test('test_visitImportHideCombinator_multiple', () {
final __test = new ToSourceVisitorTest();
runJUnitTest(__test, __test.test_visitImportHideCombinator_multiple);
@@ -3706,6 +3838,10 @@
final __test = new ToSourceVisitorTest();
runJUnitTest(__test, __test.test_visitLibraryDirective);
});
+ _ut.test('test_visitLibraryDirective_withMetadata', () {
+ final __test = new ToSourceVisitorTest();
+ runJUnitTest(__test, __test.test_visitLibraryDirective_withMetadata);
+ });
_ut.test('test_visitLibraryIdentifier_multiple', () {
final __test = new ToSourceVisitorTest();
runJUnitTest(__test, __test.test_visitLibraryIdentifier_multiple);
@@ -3794,6 +3930,10 @@
final __test = new ToSourceVisitorTest();
runJUnitTest(__test, __test.test_visitMethodDeclaration_static_returnType);
});
+ _ut.test('test_visitMethodDeclaration_withMetadata', () {
+ final __test = new ToSourceVisitorTest();
+ runJUnitTest(__test, __test.test_visitMethodDeclaration_withMetadata);
+ });
_ut.test('test_visitMethodInvocation_noTarget', () {
final __test = new ToSourceVisitorTest();
runJUnitTest(__test, __test.test_visitMethodInvocation_noTarget);
@@ -3830,10 +3970,18 @@
final __test = new ToSourceVisitorTest();
runJUnitTest(__test, __test.test_visitPartDirective);
});
+ _ut.test('test_visitPartDirective_withMetadata', () {
+ final __test = new ToSourceVisitorTest();
+ runJUnitTest(__test, __test.test_visitPartDirective_withMetadata);
+ });
_ut.test('test_visitPartOfDirective', () {
final __test = new ToSourceVisitorTest();
runJUnitTest(__test, __test.test_visitPartOfDirective);
});
+ _ut.test('test_visitPartOfDirective_withMetadata', () {
+ final __test = new ToSourceVisitorTest();
+ runJUnitTest(__test, __test.test_visitPartOfDirective_withMetadata);
+ });
_ut.test('test_visitPositionalFormalParameter', () {
final __test = new ToSourceVisitorTest();
runJUnitTest(__test, __test.test_visitPositionalFormalParameter);
@@ -3990,14 +4138,6 @@
final __test = new ToSourceVisitorTest();
runJUnitTest(__test, __test.test_visitTryStatement_finally);
});
- _ut.test('test_visitTypeAlias_generic', () {
- final __test = new ToSourceVisitorTest();
- runJUnitTest(__test, __test.test_visitTypeAlias_generic);
- });
- _ut.test('test_visitTypeAlias_nonGeneric', () {
- final __test = new ToSourceVisitorTest();
- runJUnitTest(__test, __test.test_visitTypeAlias_nonGeneric);
- });
_ut.test('test_visitTypeArgumentList_multiple', () {
final __test = new ToSourceVisitorTest();
runJUnitTest(__test, __test.test_visitTypeArgumentList_multiple);
@@ -4034,6 +4174,10 @@
final __test = new ToSourceVisitorTest();
runJUnitTest(__test, __test.test_visitTypeParameter_withExtends);
});
+ _ut.test('test_visitTypeParameter_withMetadata', () {
+ final __test = new ToSourceVisitorTest();
+ runJUnitTest(__test, __test.test_visitTypeParameter_withMetadata);
+ });
_ut.test('test_visitTypeParameter_withoutExtends', () {
final __test = new ToSourceVisitorTest();
runJUnitTest(__test, __test.test_visitTypeParameter_withoutExtends);
@@ -4046,6 +4190,10 @@
final __test = new ToSourceVisitorTest();
runJUnitTest(__test, __test.test_visitVariableDeclarationList_final_noType);
});
+ _ut.test('test_visitVariableDeclarationList_final_withMetadata', () {
+ final __test = new ToSourceVisitorTest();
+ runJUnitTest(__test, __test.test_visitVariableDeclarationList_final_withMetadata);
+ });
_ut.test('test_visitVariableDeclarationList_type', () {
final __test = new ToSourceVisitorTest();
runJUnitTest(__test, __test.test_visitVariableDeclarationList_type);
@@ -4066,6 +4214,10 @@
final __test = new ToSourceVisitorTest();
runJUnitTest(__test, __test.test_visitVariableDeclaration_uninitialized);
});
+ _ut.test('test_visitVariableDeclaration_withMetadata', () {
+ final __test = new ToSourceVisitorTest();
+ runJUnitTest(__test, __test.test_visitVariableDeclaration_withMetadata);
+ });
_ut.test('test_visitWhileStatement', () {
final __test = new ToSourceVisitorTest();
runJUnitTest(__test, __test.test_visitWhileStatement);
diff --git a/pkg/analyzer/test/generated/element_test.dart b/pkg/analyzer/test/generated/element_test.dart
index f09cd7e..8f4db1f 100644
--- a/pkg/analyzer/test/generated/element_test.dart
+++ b/pkg/analyzer/test/generated/element_test.dart
@@ -521,14 +521,14 @@
TypeParameterTypeImpl type = new TypeParameterTypeImpl(element);
InterfaceTypeImpl argument = new InterfaceTypeImpl.con1(new ClassElementImpl(AstFactory.identifier3("A")));
TypeParameterTypeImpl parameter = new TypeParameterTypeImpl(element);
- JUnitTestCase.assertSame(argument, type.substitute2(<Type2> [argument], <Type2> [parameter]));
+ JUnitTestCase.assertSame(argument, type.substitute2(<DartType> [argument], <DartType> [parameter]));
}
void test_substitute_notEqual() {
TypeParameterTypeImpl type = new TypeParameterTypeImpl(new TypeParameterElementImpl(AstFactory.identifier3("E")));
InterfaceTypeImpl argument = new InterfaceTypeImpl.con1(new ClassElementImpl(AstFactory.identifier3("A")));
TypeParameterTypeImpl parameter = new TypeParameterTypeImpl(new TypeParameterElementImpl(AstFactory.identifier3("F")));
- JUnitTestCase.assertSame(type, type.substitute2(<Type2> [argument], <Type2> [parameter]));
+ JUnitTestCase.assertSame(type, type.substitute2(<DartType> [argument], <DartType> [parameter]));
}
static dartSuite() {
@@ -591,6 +591,7 @@
*/
TestTypeProvider _typeProvider;
+ @override
void setUp() {
_typeProvider = new TestTypeProvider();
}
@@ -852,7 +853,7 @@
// class A<E> { E get g {} }
//
ClassElementImpl classA = ElementFactory.classElement2("A", ["E"]);
- Type2 typeE = classA.type.typeArguments[0];
+ DartType typeE = classA.type.typeArguments[0];
String getterName = "g";
PropertyAccessorElement getterG = ElementFactory.getterElement(getterName, false, typeE);
classA.accessors = <PropertyAccessorElement> [getterG];
@@ -862,7 +863,7 @@
//
InterfaceType typeI = ElementFactory.classElement2("I", []).type;
InterfaceTypeImpl typeAI = new InterfaceTypeImpl.con1(classA);
- typeAI.typeArguments = <Type2> [typeI];
+ typeAI.typeArguments = <DartType> [typeI];
PropertyAccessorElement getter = typeAI.getGetter(getterName);
JUnitTestCase.assertNotNull(getter);
FunctionType getterType = getter.type;
@@ -907,14 +908,14 @@
ClassElementImpl classB = ElementFactory.classElement2("B", ["F"]);
InterfaceType typeB = classB.type;
InterfaceTypeImpl typeAF = new InterfaceTypeImpl.con1(classA);
- typeAF.typeArguments = <Type2> [typeB.typeArguments[0]];
+ typeAF.typeArguments = <DartType> [typeB.typeArguments[0]];
classB.interfaces = <InterfaceType> [typeAF];
//
// B<I>
//
InterfaceType typeI = ElementFactory.classElement2("I", []).type;
InterfaceTypeImpl typeBI = new InterfaceTypeImpl.con1(classB);
- typeBI.typeArguments = <Type2> [typeI];
+ typeBI.typeArguments = <DartType> [typeI];
List<InterfaceType> interfaces = typeBI.interfaces;
EngineTestCase.assertLength(1, interfaces);
InterfaceType result = interfaces[0];
@@ -956,7 +957,7 @@
}
void test_getLeastUpperBound_functionType() {
- Type2 interfaceType = ElementFactory.classElement2("A", []).type;
+ DartType interfaceType = ElementFactory.classElement2("A", []).type;
FunctionTypeImpl functionType = new FunctionTypeImpl.con1(new FunctionElementImpl.con1(AstFactory.identifier3("f")));
JUnitTestCase.assertNull(interfaceType.getLeastUpperBound(functionType));
}
@@ -985,7 +986,7 @@
}
void test_getLeastUpperBound_null() {
- Type2 interfaceType = ElementFactory.classElement2("A", []).type;
+ DartType interfaceType = ElementFactory.classElement2("A", []).type;
JUnitTestCase.assertNull(interfaceType.getLeastUpperBound(null));
}
@@ -994,7 +995,7 @@
ClassElementImpl classB = ElementFactory.classElement2("B", []);
InterfaceType typeA = classA.type;
InterfaceType typeB = classB.type;
- Type2 typeObject = typeA.element.supertype;
+ DartType typeObject = typeA.element.supertype;
// assert that object does not have a super type
JUnitTestCase.assertNull((typeObject.element as ClassElement).supertype);
// assert that both A and B have the same super type of Object
@@ -1137,9 +1138,9 @@
InterfaceType listType = _typeProvider.listType;
InterfaceType intType = _typeProvider.intType;
InterfaceType doubleType = _typeProvider.doubleType;
- InterfaceType listOfIntType = listType.substitute4(<Type2> [intType]);
- InterfaceType listOfDoubleType = listType.substitute4(<Type2> [doubleType]);
- JUnitTestCase.assertEquals(listType.substitute4(<Type2> [_typeProvider.dynamicType]), listOfIntType.getLeastUpperBound(listOfDoubleType));
+ InterfaceType listOfIntType = listType.substitute4(<DartType> [intType]);
+ InterfaceType listOfDoubleType = listType.substitute4(<DartType> [doubleType]);
+ JUnitTestCase.assertEquals(listType.substitute4(<DartType> [_typeProvider.dynamicType]), listOfIntType.getLeastUpperBound(listOfDoubleType));
}
void test_getLeastUpperBound_typeParameters_same() {
@@ -1149,7 +1150,7 @@
//
InterfaceType listType = _typeProvider.listType;
InterfaceType intType = _typeProvider.intType;
- InterfaceType listOfIntType = listType.substitute4(<Type2> [intType]);
+ InterfaceType listOfIntType = listType.substitute4(<DartType> [intType]);
JUnitTestCase.assertEquals(listOfIntType, listOfIntType.getLeastUpperBound(listOfIntType));
}
@@ -1170,7 +1171,7 @@
// class A<E> { E m(E p) {} }
//
ClassElementImpl classA = ElementFactory.classElement2("A", ["E"]);
- Type2 typeE = classA.type.typeArguments[0];
+ DartType typeE = classA.type.typeArguments[0];
String methodName = "m";
MethodElementImpl methodM = ElementFactory.methodElement(methodName, typeE, [typeE]);
classA.methods = <MethodElement> [methodM];
@@ -1180,12 +1181,12 @@
//
InterfaceType typeI = ElementFactory.classElement2("I", []).type;
InterfaceTypeImpl typeAI = new InterfaceTypeImpl.con1(classA);
- typeAI.typeArguments = <Type2> [typeI];
+ typeAI.typeArguments = <DartType> [typeI];
MethodElement method = typeAI.getMethod(methodName);
JUnitTestCase.assertNotNull(method);
FunctionType methodType = method.type;
JUnitTestCase.assertSame(typeI, methodType.returnType);
- List<Type2> parameterTypes = methodType.normalParameterTypes;
+ List<DartType> parameterTypes = methodType.normalParameterTypes;
EngineTestCase.assertLength(1, parameterTypes);
JUnitTestCase.assertSame(typeI, parameterTypes[0]);
}
@@ -1243,14 +1244,14 @@
ClassElementImpl classB = ElementFactory.classElement2("B", ["F"]);
InterfaceType typeB = classB.type;
InterfaceTypeImpl typeAF = new InterfaceTypeImpl.con1(classA);
- typeAF.typeArguments = <Type2> [typeB.typeArguments[0]];
+ typeAF.typeArguments = <DartType> [typeB.typeArguments[0]];
classB.mixins = <InterfaceType> [typeAF];
//
// B<I>
//
InterfaceType typeI = ElementFactory.classElement2("I", []).type;
InterfaceTypeImpl typeBI = new InterfaceTypeImpl.con1(classB);
- typeBI.typeArguments = <Type2> [typeI];
+ typeBI.typeArguments = <DartType> [typeI];
List<InterfaceType> interfaces = typeBI.mixins;
EngineTestCase.assertLength(1, interfaces);
InterfaceType result = interfaces[0];
@@ -1275,7 +1276,7 @@
// class A<E> { set s(E p) {} }
//
ClassElementImpl classA = ElementFactory.classElement2("A", ["E"]);
- Type2 typeE = classA.type.typeArguments[0];
+ DartType typeE = classA.type.typeArguments[0];
String setterName = "s";
PropertyAccessorElement setterS = ElementFactory.setterElement(setterName, false, typeE);
classA.accessors = <PropertyAccessorElement> [setterS];
@@ -1285,11 +1286,11 @@
//
InterfaceType typeI = ElementFactory.classElement2("I", []).type;
InterfaceTypeImpl typeAI = new InterfaceTypeImpl.con1(classA);
- typeAI.typeArguments = <Type2> [typeI];
+ typeAI.typeArguments = <DartType> [typeI];
PropertyAccessorElement setter = typeAI.getSetter(setterName);
JUnitTestCase.assertNotNull(setter);
FunctionType setterType = setter.type;
- List<Type2> parameterTypes = setterType.normalParameterTypes;
+ List<DartType> parameterTypes = setterType.normalParameterTypes;
EngineTestCase.assertLength(1, parameterTypes);
JUnitTestCase.assertSame(typeI, parameterTypes[0]);
}
@@ -1323,14 +1324,14 @@
ClassElementImpl classB = ElementFactory.classElement2("B", ["F"]);
InterfaceType typeB = classB.type;
InterfaceTypeImpl typeAF = new InterfaceTypeImpl.con1(classA);
- typeAF.typeArguments = <Type2> [typeB.typeArguments[0]];
+ typeAF.typeArguments = <DartType> [typeB.typeArguments[0]];
classB.supertype = typeAF;
//
// B<I>
//
InterfaceType typeI = ElementFactory.classElement2("I", []).type;
InterfaceTypeImpl typeBI = new InterfaceTypeImpl.con1(classB);
- typeBI.typeArguments = <Type2> [typeI];
+ typeBI.typeArguments = <DartType> [typeI];
InterfaceType superclass = typeBI.superclass;
JUnitTestCase.assertSame(classA, superclass.element);
JUnitTestCase.assertSame(typeI, superclass.typeArguments[0]);
@@ -1360,9 +1361,9 @@
ClassElement classA = ElementFactory.classElement2("A", ["E"]);
ClassElement classB = ElementFactory.classElement2("B", ["F", "G"]);
InterfaceTypeImpl typeAF = new InterfaceTypeImpl.con1(classA);
- typeAF.typeArguments = <Type2> [classB.typeParameters[0].type];
+ typeAF.typeArguments = <DartType> [classB.typeParameters[0].type];
InterfaceTypeImpl typeAG = new InterfaceTypeImpl.con1(classA);
- typeAG.typeArguments = <Type2> [classB.typeParameters[1].type];
+ typeAG.typeArguments = <DartType> [classB.typeParameters[1].type];
JUnitTestCase.assertFalse(typeAG.isAssignableTo(typeAF));
}
@@ -1406,7 +1407,7 @@
}
void test_isMoreSpecificThan_bottom() {
- Type2 type = ElementFactory.classElement2("A", []).type;
+ DartType type = ElementFactory.classElement2("A", []).type;
JUnitTestCase.assertTrue(BottomTypeImpl.instance.isMoreSpecificThan(type));
}
@@ -1416,8 +1417,8 @@
ClassElement classJ = ElementFactory.classElement("J", classI.type, []);
InterfaceTypeImpl typeAI = new InterfaceTypeImpl.con1(classA);
InterfaceTypeImpl typeAJ = new InterfaceTypeImpl.con1(classA);
- typeAI.typeArguments = <Type2> [classI.type];
- typeAJ.typeArguments = <Type2> [classJ.type];
+ typeAI.typeArguments = <DartType> [classI.type];
+ typeAJ.typeArguments = <DartType> [classJ.type];
JUnitTestCase.assertTrue(typeAJ.isMoreSpecificThan(typeAI));
JUnitTestCase.assertFalse(typeAI.isMoreSpecificThan(typeAJ));
}
@@ -1513,7 +1514,7 @@
void test_isSubtypeOf_dynamic() {
ClassElement classA = ElementFactory.classElement2("A", []);
InterfaceType typeA = classA.type;
- Type2 dynamicType = DynamicTypeImpl.instance;
+ DartType dynamicType = DynamicTypeImpl.instance;
JUnitTestCase.assertTrue(dynamicType.isSubtypeOf(typeA));
JUnitTestCase.assertTrue(typeA.isSubtypeOf(dynamicType));
}
@@ -1607,19 +1608,19 @@
}
void test_isSubtypeOf_typeArguments() {
- Type2 dynamicType = DynamicTypeImpl.instance;
+ DartType dynamicType = DynamicTypeImpl.instance;
ClassElement classA = ElementFactory.classElement2("A", ["E"]);
ClassElement classI = ElementFactory.classElement2("I", []);
ClassElement classJ = ElementFactory.classElement("J", classI.type, []);
ClassElement classK = ElementFactory.classElement2("K", []);
InterfaceType typeA = classA.type;
- InterfaceType typeA_dynamic = typeA.substitute4(<Type2> [dynamicType]);
+ InterfaceType typeA_dynamic = typeA.substitute4(<DartType> [dynamicType]);
InterfaceTypeImpl typeAI = new InterfaceTypeImpl.con1(classA);
InterfaceTypeImpl typeAJ = new InterfaceTypeImpl.con1(classA);
InterfaceTypeImpl typeAK = new InterfaceTypeImpl.con1(classA);
- typeAI.typeArguments = <Type2> [classI.type];
- typeAJ.typeArguments = <Type2> [classJ.type];
- typeAK.typeArguments = <Type2> [classK.type];
+ typeAI.typeArguments = <DartType> [classI.type];
+ typeAJ.typeArguments = <DartType> [classJ.type];
+ typeAK.typeArguments = <DartType> [classK.type];
// A<J> <: A<I> since J <: I
JUnitTestCase.assertTrue(typeAJ.isSubtypeOf(typeAI));
JUnitTestCase.assertFalse(typeAI.isSubtypeOf(typeAJ));
@@ -1648,7 +1649,7 @@
void test_isSupertypeOf_dynamic() {
ClassElement classA = ElementFactory.classElement2("A", []);
InterfaceType typeA = classA.type;
- Type2 dynamicType = DynamicTypeImpl.instance;
+ DartType dynamicType = DynamicTypeImpl.instance;
JUnitTestCase.assertTrue(dynamicType.isSupertypeOf(typeA));
JUnitTestCase.assertTrue(typeA.isSupertypeOf(dynamicType));
}
@@ -1809,7 +1810,7 @@
// class B<F> extends A<F> {}
//
ClassElementImpl classA = ElementFactory.classElement2("A", ["E"]);
- Type2 typeE = classA.type.typeArguments[0];
+ DartType typeE = classA.type.typeArguments[0];
String methodName = "m";
MethodElementImpl methodM = ElementFactory.methodElement(methodName, typeE, [typeE]);
classA.methods = <MethodElement> [methodM];
@@ -1817,7 +1818,7 @@
ClassElementImpl classB = ElementFactory.classElement2("B", ["F"]);
InterfaceType typeB = classB.type;
InterfaceTypeImpl typeAF = new InterfaceTypeImpl.con1(classA);
- typeAF.typeArguments = <Type2> [typeB.typeArguments[0]];
+ typeAF.typeArguments = <DartType> [typeB.typeArguments[0]];
classB.supertype = typeAF;
LibraryElementImpl library = ElementFactory.library(createAnalysisContext(), "lib");
CompilationUnitElement unit = library.definingCompilationUnit;
@@ -1827,12 +1828,12 @@
//
InterfaceType typeI = ElementFactory.classElement2("I", []).type;
InterfaceTypeImpl typeBI = new InterfaceTypeImpl.con1(classB);
- typeBI.typeArguments = <Type2> [typeI];
+ typeBI.typeArguments = <DartType> [typeI];
MethodElement method = typeBI.lookUpMethod(methodName, library);
JUnitTestCase.assertNotNull(method);
FunctionType methodType = method.type;
JUnitTestCase.assertSame(typeI, methodType.returnType);
- List<Type2> parameterTypes = methodType.normalParameterTypes;
+ List<DartType> parameterTypes = methodType.normalParameterTypes;
EngineTestCase.assertLength(1, parameterTypes);
JUnitTestCase.assertSame(typeI, parameterTypes[0]);
}
@@ -1925,7 +1926,7 @@
void test_setTypeArguments() {
InterfaceTypeImpl type = ElementFactory.classElement2("A", []).type as InterfaceTypeImpl;
- List<Type2> typeArguments = <Type2> [
+ List<DartType> typeArguments = <DartType> [
ElementFactory.classElement2("B", []).type,
ElementFactory.classElement2("C", []).type];
type.typeArguments = typeArguments;
@@ -1937,11 +1938,11 @@
TypeParameterElementImpl parameterElement = new TypeParameterElementImpl(AstFactory.identifier3("E"));
InterfaceTypeImpl type = new InterfaceTypeImpl.con1(classA);
TypeParameterTypeImpl parameter = new TypeParameterTypeImpl(parameterElement);
- type.typeArguments = <Type2> [parameter];
+ type.typeArguments = <DartType> [parameter];
InterfaceType argumentType = ElementFactory.classElement2("B", []).type;
- InterfaceType result = type.substitute2(<Type2> [argumentType], <Type2> [parameter]);
+ InterfaceType result = type.substitute2(<DartType> [argumentType], <DartType> [parameter]);
JUnitTestCase.assertEquals(classA, result.element);
- List<Type2> resultArguments = result.typeArguments;
+ List<DartType> resultArguments = result.typeArguments;
EngineTestCase.assertLength(1, resultArguments);
JUnitTestCase.assertEquals(argumentType, resultArguments[0]);
}
@@ -1951,7 +1952,7 @@
ClassElementImpl classA = ElementFactory.classElement2("A", []);
InterfaceTypeImpl type = new InterfaceTypeImpl.con1(classA);
InterfaceType argumentType = ElementFactory.classElement2("B", []).type;
- type.substitute2(<Type2> [argumentType], <Type2> []);
+ type.substitute2(<DartType> [argumentType], <DartType> []);
JUnitTestCase.fail("Expected to encounter exception, argument and parameter type array lengths not equal.");
} on JavaException catch (e) {
}
@@ -1962,12 +1963,12 @@
TypeParameterElementImpl parameterElement = new TypeParameterElementImpl(AstFactory.identifier3("E"));
InterfaceTypeImpl type = new InterfaceTypeImpl.con1(classA);
TypeParameterTypeImpl parameter = new TypeParameterTypeImpl(parameterElement);
- type.typeArguments = <Type2> [parameter];
+ type.typeArguments = <DartType> [parameter];
InterfaceType argumentType = ElementFactory.classElement2("B", []).type;
TypeParameterTypeImpl parameterType = new TypeParameterTypeImpl(new TypeParameterElementImpl(AstFactory.identifier3("F")));
- InterfaceType result = type.substitute2(<Type2> [argumentType], <Type2> [parameterType]);
+ InterfaceType result = type.substitute2(<DartType> [argumentType], <DartType> [parameterType]);
JUnitTestCase.assertEquals(classA, result.element);
- List<Type2> resultArguments = result.typeArguments;
+ List<DartType> resultArguments = result.typeArguments;
EngineTestCase.assertLength(1, resultArguments);
JUnitTestCase.assertEquals(parameter, resultArguments[0]);
}
@@ -2386,7 +2387,7 @@
/**
* Reference {code VoidTypeImpl.getInstance()}.
*/
- Type2 _voidType = VoidTypeImpl.instance;
+ DartType _voidType = VoidTypeImpl.instance;
void test_isMoreSpecificThan_void_A() {
ClassElement classA = ElementFactory.classElement2("A", []);
@@ -2493,8 +2494,8 @@
return unit;
}
- static ConstructorElementImpl constructorElement(ClassElement definingClass, String name, bool isConst, List<Type2> argumentTypes) {
- Type2 type = definingClass.type;
+ static ConstructorElementImpl constructorElement(ClassElement definingClass, String name, bool isConst, List<DartType> argumentTypes) {
+ DartType type = definingClass.type;
ConstructorElementImpl constructor = new ConstructorElementImpl.con1(name == null ? null : AstFactory.identifier3(name));
constructor.const2 = isConst;
int count = argumentTypes.length;
@@ -2512,7 +2513,7 @@
return constructor;
}
- static ConstructorElementImpl constructorElement2(ClassElement definingClass, String name, List<Type2> argumentTypes) => constructorElement(definingClass, name, false, argumentTypes);
+ static ConstructorElementImpl constructorElement2(ClassElement definingClass, String name, List<DartType> argumentTypes) => constructorElement(definingClass, name, false, argumentTypes);
static ExportElementImpl exportFor(LibraryElement exportedLibrary, List<NamespaceCombinator> combinators) {
ExportElementImpl spec = new ExportElementImpl();
@@ -2521,7 +2522,7 @@
return spec;
}
- static FieldElementImpl fieldElement(String name, bool isStatic, bool isFinal, bool isConst, Type2 type) {
+ static FieldElementImpl fieldElement(String name, bool isStatic, bool isFinal, bool isConst, DartType type) {
FieldElementImpl field = new FieldElementImpl.con1(AstFactory.identifier3(name));
field.const3 = isConst;
field.final2 = isFinal;
@@ -2637,7 +2638,7 @@
return _objectElement;
}
- static PropertyAccessorElementImpl getterElement(String name, bool isStatic, Type2 type) {
+ static PropertyAccessorElementImpl getterElement(String name, bool isStatic, DartType type) {
FieldElementImpl field = new FieldElementImpl.con1(AstFactory.identifier3(name));
field.static = isStatic;
field.synthetic = true;
@@ -2680,7 +2681,7 @@
static LocalVariableElementImpl localVariableElement2(String name) => new LocalVariableElementImpl(AstFactory.identifier3(name));
- static MethodElementImpl methodElement(String methodName, Type2 returnType, List<Type2> argumentTypes) {
+ static MethodElementImpl methodElement(String methodName, DartType returnType, List<DartType> argumentTypes) {
MethodElementImpl method = new MethodElementImpl.con1(AstFactory.identifier3(methodName));
int count = argumentTypes.length;
List<ParameterElement> parameters = new List<ParameterElement>(count);
@@ -2703,7 +2704,7 @@
return parameter;
}
- static ParameterElementImpl namedParameter2(String name, Type2 type) {
+ static ParameterElementImpl namedParameter2(String name, DartType type) {
ParameterElementImpl parameter = new ParameterElementImpl.con1(AstFactory.identifier3(name));
parameter.parameterKind = ParameterKind.NAMED;
parameter.type = type;
@@ -2716,7 +2717,7 @@
return parameter;
}
- static ParameterElementImpl positionalParameter2(String name, Type2 type) {
+ static ParameterElementImpl positionalParameter2(String name, DartType type) {
ParameterElementImpl parameter = new ParameterElementImpl.con1(AstFactory.identifier3(name));
parameter.parameterKind = ParameterKind.POSITIONAL;
parameter.type = type;
@@ -2731,14 +2732,14 @@
return parameter;
}
- static ParameterElementImpl requiredParameter2(String name, Type2 type) {
+ static ParameterElementImpl requiredParameter2(String name, DartType type) {
ParameterElementImpl parameter = new ParameterElementImpl.con1(AstFactory.identifier3(name));
parameter.parameterKind = ParameterKind.REQUIRED;
parameter.type = type;
return parameter;
}
- static PropertyAccessorElementImpl setterElement(String name, bool isStatic, Type2 type) {
+ static PropertyAccessorElementImpl setterElement(String name, bool isStatic, DartType type) {
FieldElementImpl field = new FieldElementImpl.con1(AstFactory.identifier3(name));
field.static = isStatic;
field.synthetic = true;
@@ -2768,7 +2769,7 @@
static TopLevelVariableElementImpl topLevelVariableElement2(String name) => new TopLevelVariableElementImpl.con2(name);
- static TopLevelVariableElementImpl topLevelVariableElement3(String name, bool isConst, bool isFinal, Type2 type) {
+ static TopLevelVariableElementImpl topLevelVariableElement3(String name, bool isConst, bool isFinal, DartType type) {
TopLevelVariableElementImpl variable = new TopLevelVariableElementImpl.con2(name);
variable.const3 = isConst;
variable.final2 = isFinal;
@@ -2947,6 +2948,53 @@
JUnitTestCase.assertTrue(classB.hasNonFinalField);
}
+ void test_hasStaticMember_false_empty() {
+ ClassElementImpl classA = ElementFactory.classElement2("A", []);
+ // no members
+ JUnitTestCase.assertFalse(classA.hasStaticMember);
+ }
+
+ void test_hasStaticMember_false_instanceMethod() {
+ ClassElementImpl classA = ElementFactory.classElement2("A", []);
+ MethodElement method = ElementFactory.methodElement("foo", null, []);
+ classA.methods = <MethodElement> [method];
+ JUnitTestCase.assertFalse(classA.hasStaticMember);
+ }
+
+ void test_hasStaticMember_instanceGetter() {
+ ClassElementImpl classA = ElementFactory.classElement2("A", []);
+ PropertyAccessorElement getter = ElementFactory.getterElement("foo", false, null);
+ classA.accessors = <PropertyAccessorElement> [getter];
+ JUnitTestCase.assertFalse(classA.hasStaticMember);
+ }
+
+ void test_hasStaticMember_true_getter() {
+ ClassElementImpl classA = ElementFactory.classElement2("A", []);
+ PropertyAccessorElementImpl getter = ElementFactory.getterElement("foo", false, null);
+ classA.accessors = <PropertyAccessorElement> [getter];
+ // "foo" is static
+ getter.static = true;
+ JUnitTestCase.assertTrue(classA.hasStaticMember);
+ }
+
+ void test_hasStaticMember_true_method() {
+ ClassElementImpl classA = ElementFactory.classElement2("A", []);
+ MethodElementImpl method = ElementFactory.methodElement("foo", null, []);
+ classA.methods = <MethodElement> [method];
+ // "foo" is static
+ method.static = true;
+ JUnitTestCase.assertTrue(classA.hasStaticMember);
+ }
+
+ void test_hasStaticMember_true_setter() {
+ ClassElementImpl classA = ElementFactory.classElement2("A", []);
+ PropertyAccessorElementImpl setter = ElementFactory.setterElement("foo", false, null);
+ classA.accessors = <PropertyAccessorElement> [setter];
+ // "foo" is static
+ setter.static = true;
+ JUnitTestCase.assertTrue(classA.hasStaticMember);
+ }
+
void test_lookUpGetter_declared() {
LibraryElementImpl library = ElementFactory.library(createAnalysisContext(), "lib");
ClassElementImpl classA = ElementFactory.classElement2("A", []);
@@ -3108,6 +3156,30 @@
final __test = new ClassElementImplTest();
runJUnitTest(__test, __test.test_hasNonFinalField_true_inherited);
});
+ _ut.test('test_hasStaticMember_false_empty', () {
+ final __test = new ClassElementImplTest();
+ runJUnitTest(__test, __test.test_hasStaticMember_false_empty);
+ });
+ _ut.test('test_hasStaticMember_false_instanceMethod', () {
+ final __test = new ClassElementImplTest();
+ runJUnitTest(__test, __test.test_hasStaticMember_false_instanceMethod);
+ });
+ _ut.test('test_hasStaticMember_instanceGetter', () {
+ final __test = new ClassElementImplTest();
+ runJUnitTest(__test, __test.test_hasStaticMember_instanceGetter);
+ });
+ _ut.test('test_hasStaticMember_true_getter', () {
+ final __test = new ClassElementImplTest();
+ runJUnitTest(__test, __test.test_hasStaticMember_true_getter);
+ });
+ _ut.test('test_hasStaticMember_true_method', () {
+ final __test = new ClassElementImplTest();
+ runJUnitTest(__test, __test.test_hasStaticMember_true_method);
+ });
+ _ut.test('test_hasStaticMember_true_setter', () {
+ final __test = new ClassElementImplTest();
+ runJUnitTest(__test, __test.test_hasStaticMember_true_setter);
+ });
_ut.test('test_lookUpGetter_declared', () {
final __test = new ClassElementImplTest();
runJUnitTest(__test, __test.test_lookUpGetter_declared);
@@ -3369,28 +3441,28 @@
void test_getNamedParameterTypes() {
FunctionTypeImpl type = new FunctionTypeImpl.con1(new FunctionElementImpl.con1(AstFactory.identifier3("f")));
- Map<String, Type2> types = type.namedParameterTypes;
+ Map<String, DartType> types = type.namedParameterTypes;
EngineTestCase.assertSizeOfMap(0, types);
}
void test_getNormalParameterTypes() {
FunctionTypeImpl type = new FunctionTypeImpl.con1(new FunctionElementImpl.con1(AstFactory.identifier3("f")));
- List<Type2> types = type.normalParameterTypes;
+ List<DartType> types = type.normalParameterTypes;
EngineTestCase.assertLength(0, types);
}
void test_getReturnType() {
- Type2 expectedReturnType = VoidTypeImpl.instance;
+ DartType expectedReturnType = VoidTypeImpl.instance;
FunctionElementImpl functionElement = new FunctionElementImpl.con1(AstFactory.identifier3("f"));
functionElement.returnType = expectedReturnType;
FunctionTypeImpl type = new FunctionTypeImpl.con1(functionElement);
- Type2 returnType = type.returnType;
+ DartType returnType = type.returnType;
JUnitTestCase.assertEquals(expectedReturnType, returnType);
}
void test_getTypeArguments() {
FunctionTypeImpl type = new FunctionTypeImpl.con1(new FunctionElementImpl.con1(AstFactory.identifier3("f")));
- List<Type2> types = type.typeArguments;
+ List<DartType> types = type.typeArguments;
EngineTestCase.assertLength(0, types);
}
@@ -3734,9 +3806,9 @@
MethodElementImpl methodElement = new MethodElementImpl.con1(AstFactory.identifier3("m"));
enclosingClass.methods = <MethodElement> [methodElement];
FunctionTypeImpl type = new FunctionTypeImpl.con1(methodElement);
- Type2 expectedType = enclosingClass.typeParameters[0].type;
- type.typeArguments = <Type2> [expectedType];
- List<Type2> arguments = type.typeArguments;
+ DartType expectedType = enclosingClass.typeParameters[0].type;
+ type.typeArguments = <DartType> [expectedType];
+ List<DartType> arguments = type.typeArguments;
EngineTestCase.assertLength(1, arguments);
JUnitTestCase.assertEquals(expectedType, arguments[0]);
}
@@ -3753,26 +3825,26 @@
functionElement.returnType = parameterType;
definingClass.methods = <MethodElement> [functionElement];
FunctionTypeImpl functionType = new FunctionTypeImpl.con1(functionElement);
- functionType.typeArguments = <Type2> [parameterType];
+ functionType.typeArguments = <DartType> [parameterType];
InterfaceTypeImpl argumentType = new InterfaceTypeImpl.con1(new ClassElementImpl(AstFactory.identifier3("D")));
- FunctionType result = functionType.substitute2(<Type2> [argumentType], <Type2> [parameterType]);
+ FunctionType result = functionType.substitute2(<DartType> [argumentType], <DartType> [parameterType]);
JUnitTestCase.assertEquals(argumentType, result.returnType);
- List<Type2> normalParameters = result.normalParameterTypes;
+ List<DartType> normalParameters = result.normalParameterTypes;
EngineTestCase.assertLength(1, normalParameters);
JUnitTestCase.assertEquals(argumentType, normalParameters[0]);
- List<Type2> optionalParameters = result.optionalParameterTypes;
+ List<DartType> optionalParameters = result.optionalParameterTypes;
EngineTestCase.assertLength(1, optionalParameters);
JUnitTestCase.assertEquals(argumentType, optionalParameters[0]);
- Map<String, Type2> namedParameters = result.namedParameterTypes;
+ Map<String, DartType> namedParameters = result.namedParameterTypes;
EngineTestCase.assertSizeOfMap(1, namedParameters);
JUnitTestCase.assertEquals(argumentType, namedParameters[namedParameterName]);
}
void test_substitute2_notEqual() {
- Type2 returnType = new InterfaceTypeImpl.con1(new ClassElementImpl(AstFactory.identifier3("R")));
- Type2 normalParameterType = new InterfaceTypeImpl.con1(new ClassElementImpl(AstFactory.identifier3("A")));
- Type2 optionalParameterType = new InterfaceTypeImpl.con1(new ClassElementImpl(AstFactory.identifier3("B")));
- Type2 namedParameterType = new InterfaceTypeImpl.con1(new ClassElementImpl(AstFactory.identifier3("C")));
+ DartType returnType = new InterfaceTypeImpl.con1(new ClassElementImpl(AstFactory.identifier3("R")));
+ DartType normalParameterType = new InterfaceTypeImpl.con1(new ClassElementImpl(AstFactory.identifier3("A")));
+ DartType optionalParameterType = new InterfaceTypeImpl.con1(new ClassElementImpl(AstFactory.identifier3("B")));
+ DartType namedParameterType = new InterfaceTypeImpl.con1(new ClassElementImpl(AstFactory.identifier3("C")));
FunctionElementImpl functionElement = new FunctionElementImpl.con1(AstFactory.identifier3("f"));
String namedParameterName = "c";
functionElement.parameters = <ParameterElement> [
@@ -3783,15 +3855,15 @@
FunctionTypeImpl functionType = new FunctionTypeImpl.con1(functionElement);
InterfaceTypeImpl argumentType = new InterfaceTypeImpl.con1(new ClassElementImpl(AstFactory.identifier3("D")));
TypeParameterTypeImpl parameterType = new TypeParameterTypeImpl(new TypeParameterElementImpl(AstFactory.identifier3("E")));
- FunctionType result = functionType.substitute2(<Type2> [argumentType], <Type2> [parameterType]);
+ FunctionType result = functionType.substitute2(<DartType> [argumentType], <DartType> [parameterType]);
JUnitTestCase.assertEquals(returnType, result.returnType);
- List<Type2> normalParameters = result.normalParameterTypes;
+ List<DartType> normalParameters = result.normalParameterTypes;
EngineTestCase.assertLength(1, normalParameters);
JUnitTestCase.assertEquals(normalParameterType, normalParameters[0]);
- List<Type2> optionalParameters = result.optionalParameterTypes;
+ List<DartType> optionalParameters = result.optionalParameterTypes;
EngineTestCase.assertLength(1, optionalParameters);
JUnitTestCase.assertEquals(optionalParameterType, optionalParameters[0]);
- Map<String, Type2> namedParameters = result.namedParameterTypes;
+ Map<String, DartType> namedParameters = result.namedParameterTypes;
EngineTestCase.assertSizeOfMap(1, namedParameters);
JUnitTestCase.assertEquals(namedParameterType, namedParameters[namedParameterName]);
}
@@ -3977,6 +4049,7 @@
class InterfaceTypeImpl_FunctionTypeImplTest_test_isSubtypeOf_baseCase_classFunction extends InterfaceTypeImpl {
InterfaceTypeImpl_FunctionTypeImplTest_test_isSubtypeOf_baseCase_classFunction(ClassElement arg0) : super.con1(arg0);
+ @override
bool get isDartCoreFunction => true;
}
diff --git a/pkg/analyzer/test/generated/parser_test.dart b/pkg/analyzer/test/generated/parser_test.dart
index db2264c..a20ce5f 100644
--- a/pkg/analyzer/test/generated/parser_test.dart
+++ b/pkg/analyzer/test/generated/parser_test.dart
@@ -41,83 +41,83 @@
}
void test_computeStringValue_emptyInterpolationPrefix() {
- JUnitTestCase.assertEquals("", computeStringValue("'''", true, false));
+ JUnitTestCase.assertEquals("", _computeStringValue("'''", true, false));
}
void test_computeStringValue_escape_b() {
- JUnitTestCase.assertEquals("\b", computeStringValue("'\\b'", true, true));
+ JUnitTestCase.assertEquals("\b", _computeStringValue("'\\b'", true, true));
}
void test_computeStringValue_escape_f() {
- JUnitTestCase.assertEquals("\f", computeStringValue("'\\f'", true, true));
+ JUnitTestCase.assertEquals("\f", _computeStringValue("'\\f'", true, true));
}
void test_computeStringValue_escape_n() {
- JUnitTestCase.assertEquals("\n", computeStringValue("'\\n'", true, true));
+ JUnitTestCase.assertEquals("\n", _computeStringValue("'\\n'", true, true));
}
void test_computeStringValue_escape_notSpecial() {
- JUnitTestCase.assertEquals(":", computeStringValue("'\\:'", true, true));
+ JUnitTestCase.assertEquals(":", _computeStringValue("'\\:'", true, true));
}
void test_computeStringValue_escape_r() {
- JUnitTestCase.assertEquals("\r", computeStringValue("'\\r'", true, true));
+ JUnitTestCase.assertEquals("\r", _computeStringValue("'\\r'", true, true));
}
void test_computeStringValue_escape_t() {
- JUnitTestCase.assertEquals("\t", computeStringValue("'\\t'", true, true));
+ JUnitTestCase.assertEquals("\t", _computeStringValue("'\\t'", true, true));
}
void test_computeStringValue_escape_u_fixed() {
- JUnitTestCase.assertEquals("\u4321", computeStringValue("'\\u4321'", true, true));
+ JUnitTestCase.assertEquals("\u4321", _computeStringValue("'\\u4321'", true, true));
}
void test_computeStringValue_escape_u_variable() {
- JUnitTestCase.assertEquals("\u0123", computeStringValue("'\\u{123}'", true, true));
+ JUnitTestCase.assertEquals("\u0123", _computeStringValue("'\\u{123}'", true, true));
}
void test_computeStringValue_escape_v() {
- JUnitTestCase.assertEquals("\u000B", computeStringValue("'\\v'", true, true));
+ JUnitTestCase.assertEquals("\u000B", _computeStringValue("'\\v'", true, true));
}
void test_computeStringValue_escape_x() {
- JUnitTestCase.assertEquals("\u00FF", computeStringValue("'\\xFF'", true, true));
+ JUnitTestCase.assertEquals("\u00FF", _computeStringValue("'\\xFF'", true, true));
}
void test_computeStringValue_noEscape_single() {
- JUnitTestCase.assertEquals("text", computeStringValue("'text'", true, true));
+ JUnitTestCase.assertEquals("text", _computeStringValue("'text'", true, true));
}
void test_computeStringValue_noEscape_triple() {
- JUnitTestCase.assertEquals("text", computeStringValue("'''text'''", true, true));
+ JUnitTestCase.assertEquals("text", _computeStringValue("'''text'''", true, true));
}
void test_computeStringValue_raw_single() {
- JUnitTestCase.assertEquals("text", computeStringValue("r'text'", true, true));
+ JUnitTestCase.assertEquals("text", _computeStringValue("r'text'", true, true));
}
void test_computeStringValue_raw_triple() {
- JUnitTestCase.assertEquals("text", computeStringValue("r'''text'''", true, true));
+ JUnitTestCase.assertEquals("text", _computeStringValue("r'''text'''", true, true));
}
void test_computeStringValue_raw_withEscape() {
- JUnitTestCase.assertEquals("two\\nlines", computeStringValue("r'two\\nlines'", true, true));
+ JUnitTestCase.assertEquals("two\\nlines", _computeStringValue("r'two\\nlines'", true, true));
}
void test_computeStringValue_triple_internalQuote_first_empty() {
- JUnitTestCase.assertEquals("'", computeStringValue("''''", true, false));
+ JUnitTestCase.assertEquals("'", _computeStringValue("''''", true, false));
}
void test_computeStringValue_triple_internalQuote_first_nonEmpty() {
- JUnitTestCase.assertEquals("'text", computeStringValue("''''text", true, false));
+ JUnitTestCase.assertEquals("'text", _computeStringValue("''''text", true, false));
}
void test_computeStringValue_triple_internalQuote_last_empty() {
- JUnitTestCase.assertEquals("", computeStringValue("'''", false, true));
+ JUnitTestCase.assertEquals("", _computeStringValue("'''", false, true));
}
void test_computeStringValue_triple_internalQuote_last_nonEmpty() {
- JUnitTestCase.assertEquals("text", computeStringValue("text'''", false, true));
+ JUnitTestCase.assertEquals("text", _computeStringValue("text'''", false, true));
}
void test_constFactory() {
@@ -125,174 +125,174 @@
}
void test_createSyntheticIdentifier() {
- SimpleIdentifier identifier = createSyntheticIdentifier();
+ SimpleIdentifier identifier = _createSyntheticIdentifier();
JUnitTestCase.assertTrue(identifier.isSynthetic);
}
void test_createSyntheticStringLiteral() {
- SimpleStringLiteral literal = createSyntheticStringLiteral();
+ SimpleStringLiteral literal = _createSyntheticStringLiteral();
JUnitTestCase.assertTrue(literal.isSynthetic);
}
void test_isFunctionDeclaration_nameButNoReturn_block() {
- JUnitTestCase.assertTrue(isFunctionDeclaration("f() {}"));
+ JUnitTestCase.assertTrue(_isFunctionDeclaration("f() {}"));
}
void test_isFunctionDeclaration_nameButNoReturn_expression() {
- JUnitTestCase.assertTrue(isFunctionDeclaration("f() => e"));
+ JUnitTestCase.assertTrue(_isFunctionDeclaration("f() => e"));
}
void test_isFunctionDeclaration_normalReturn_block() {
- JUnitTestCase.assertTrue(isFunctionDeclaration("C f() {}"));
+ JUnitTestCase.assertTrue(_isFunctionDeclaration("C f() {}"));
}
void test_isFunctionDeclaration_normalReturn_expression() {
- JUnitTestCase.assertTrue(isFunctionDeclaration("C f() => e"));
+ JUnitTestCase.assertTrue(_isFunctionDeclaration("C f() => e"));
}
void test_isFunctionDeclaration_voidReturn_block() {
- JUnitTestCase.assertTrue(isFunctionDeclaration("void f() {}"));
+ JUnitTestCase.assertTrue(_isFunctionDeclaration("void f() {}"));
}
void test_isFunctionDeclaration_voidReturn_expression() {
- JUnitTestCase.assertTrue(isFunctionDeclaration("void f() => e"));
+ JUnitTestCase.assertTrue(_isFunctionDeclaration("void f() => e"));
}
void test_isFunctionExpression_false_noBody() {
- JUnitTestCase.assertFalse(isFunctionExpression("f();"));
+ JUnitTestCase.assertFalse(_isFunctionExpression("f();"));
}
void test_isFunctionExpression_false_notParameters() {
- JUnitTestCase.assertFalse(isFunctionExpression("(a + b) {"));
+ JUnitTestCase.assertFalse(_isFunctionExpression("(a + b) {"));
}
void test_isFunctionExpression_noName_block() {
- JUnitTestCase.assertTrue(isFunctionExpression("() {}"));
+ JUnitTestCase.assertTrue(_isFunctionExpression("() {}"));
}
void test_isFunctionExpression_noName_expression() {
- JUnitTestCase.assertTrue(isFunctionExpression("() => e"));
+ JUnitTestCase.assertTrue(_isFunctionExpression("() => e"));
}
void test_isFunctionExpression_parameter_final() {
- JUnitTestCase.assertTrue(isFunctionExpression("(final a) {}"));
- JUnitTestCase.assertTrue(isFunctionExpression("(final a, b) {}"));
- JUnitTestCase.assertTrue(isFunctionExpression("(final a, final b) {}"));
+ JUnitTestCase.assertTrue(_isFunctionExpression("(final a) {}"));
+ JUnitTestCase.assertTrue(_isFunctionExpression("(final a, b) {}"));
+ JUnitTestCase.assertTrue(_isFunctionExpression("(final a, final b) {}"));
}
void test_isFunctionExpression_parameter_final_typed() {
- JUnitTestCase.assertTrue(isFunctionExpression("(final int a) {}"));
- JUnitTestCase.assertTrue(isFunctionExpression("(final prefix.List a) {}"));
- JUnitTestCase.assertTrue(isFunctionExpression("(final List<int> a) {}"));
- JUnitTestCase.assertTrue(isFunctionExpression("(final prefix.List<int> a) {}"));
+ JUnitTestCase.assertTrue(_isFunctionExpression("(final int a) {}"));
+ JUnitTestCase.assertTrue(_isFunctionExpression("(final prefix.List a) {}"));
+ JUnitTestCase.assertTrue(_isFunctionExpression("(final List<int> a) {}"));
+ JUnitTestCase.assertTrue(_isFunctionExpression("(final prefix.List<int> a) {}"));
}
void test_isFunctionExpression_parameter_multiple() {
- JUnitTestCase.assertTrue(isFunctionExpression("(a, b) {}"));
+ JUnitTestCase.assertTrue(_isFunctionExpression("(a, b) {}"));
}
void test_isFunctionExpression_parameter_named() {
- JUnitTestCase.assertTrue(isFunctionExpression("({a}) {}"));
+ JUnitTestCase.assertTrue(_isFunctionExpression("({a}) {}"));
}
void test_isFunctionExpression_parameter_optional() {
- JUnitTestCase.assertTrue(isFunctionExpression("([a]) {}"));
+ JUnitTestCase.assertTrue(_isFunctionExpression("([a]) {}"));
}
void test_isFunctionExpression_parameter_single() {
- JUnitTestCase.assertTrue(isFunctionExpression("(a) {}"));
+ JUnitTestCase.assertTrue(_isFunctionExpression("(a) {}"));
}
void test_isFunctionExpression_parameter_typed() {
- JUnitTestCase.assertTrue(isFunctionExpression("(int a, int b) {}"));
+ JUnitTestCase.assertTrue(_isFunctionExpression("(int a, int b) {}"));
}
void test_isInitializedVariableDeclaration_assignment() {
- JUnitTestCase.assertFalse(isInitializedVariableDeclaration("a = null;"));
+ JUnitTestCase.assertFalse(_isInitializedVariableDeclaration("a = null;"));
}
void test_isInitializedVariableDeclaration_comparison() {
- JUnitTestCase.assertFalse(isInitializedVariableDeclaration("a < 0;"));
+ JUnitTestCase.assertFalse(_isInitializedVariableDeclaration("a < 0;"));
}
void test_isInitializedVariableDeclaration_conditional() {
- JUnitTestCase.assertFalse(isInitializedVariableDeclaration("a == null ? init() : update();"));
+ JUnitTestCase.assertFalse(_isInitializedVariableDeclaration("a == null ? init() : update();"));
}
void test_isInitializedVariableDeclaration_const_noType_initialized() {
- JUnitTestCase.assertTrue(isInitializedVariableDeclaration("const a = 0;"));
+ JUnitTestCase.assertTrue(_isInitializedVariableDeclaration("const a = 0;"));
}
void test_isInitializedVariableDeclaration_const_noType_uninitialized() {
- JUnitTestCase.assertTrue(isInitializedVariableDeclaration("const a;"));
+ JUnitTestCase.assertTrue(_isInitializedVariableDeclaration("const a;"));
}
void test_isInitializedVariableDeclaration_const_simpleType_uninitialized() {
- JUnitTestCase.assertTrue(isInitializedVariableDeclaration("const A a;"));
+ JUnitTestCase.assertTrue(_isInitializedVariableDeclaration("const A a;"));
}
void test_isInitializedVariableDeclaration_final_noType_initialized() {
- JUnitTestCase.assertTrue(isInitializedVariableDeclaration("final a = 0;"));
+ JUnitTestCase.assertTrue(_isInitializedVariableDeclaration("final a = 0;"));
}
void test_isInitializedVariableDeclaration_final_noType_uninitialized() {
- JUnitTestCase.assertTrue(isInitializedVariableDeclaration("final a;"));
+ JUnitTestCase.assertTrue(_isInitializedVariableDeclaration("final a;"));
}
void test_isInitializedVariableDeclaration_final_simpleType_initialized() {
- JUnitTestCase.assertTrue(isInitializedVariableDeclaration("final A a = 0;"));
+ JUnitTestCase.assertTrue(_isInitializedVariableDeclaration("final A a = 0;"));
}
void test_isInitializedVariableDeclaration_functionDeclaration_typed() {
- JUnitTestCase.assertFalse(isInitializedVariableDeclaration("A f() {};"));
+ JUnitTestCase.assertFalse(_isInitializedVariableDeclaration("A f() {};"));
}
void test_isInitializedVariableDeclaration_functionDeclaration_untyped() {
- JUnitTestCase.assertFalse(isInitializedVariableDeclaration("f() {};"));
+ JUnitTestCase.assertFalse(_isInitializedVariableDeclaration("f() {};"));
}
void test_isInitializedVariableDeclaration_noType_initialized() {
- JUnitTestCase.assertTrue(isInitializedVariableDeclaration("var a = 0;"));
+ JUnitTestCase.assertTrue(_isInitializedVariableDeclaration("var a = 0;"));
}
void test_isInitializedVariableDeclaration_noType_uninitialized() {
- JUnitTestCase.assertTrue(isInitializedVariableDeclaration("var a;"));
+ JUnitTestCase.assertTrue(_isInitializedVariableDeclaration("var a;"));
}
void test_isInitializedVariableDeclaration_parameterizedType_initialized() {
- JUnitTestCase.assertTrue(isInitializedVariableDeclaration("List<int> a = null;"));
+ JUnitTestCase.assertTrue(_isInitializedVariableDeclaration("List<int> a = null;"));
}
void test_isInitializedVariableDeclaration_parameterizedType_uninitialized() {
- JUnitTestCase.assertTrue(isInitializedVariableDeclaration("List<int> a;"));
+ JUnitTestCase.assertTrue(_isInitializedVariableDeclaration("List<int> a;"));
}
void test_isInitializedVariableDeclaration_simpleType_initialized() {
- JUnitTestCase.assertTrue(isInitializedVariableDeclaration("A a = 0;"));
+ JUnitTestCase.assertTrue(_isInitializedVariableDeclaration("A a = 0;"));
}
void test_isInitializedVariableDeclaration_simpleType_uninitialized() {
- JUnitTestCase.assertTrue(isInitializedVariableDeclaration("A a;"));
+ JUnitTestCase.assertTrue(_isInitializedVariableDeclaration("A a;"));
}
void test_isSwitchMember_case_labeled() {
- JUnitTestCase.assertTrue(isSwitchMember("l1: l2: case"));
+ JUnitTestCase.assertTrue(_isSwitchMember("l1: l2: case"));
}
void test_isSwitchMember_case_unlabeled() {
- JUnitTestCase.assertTrue(isSwitchMember("case"));
+ JUnitTestCase.assertTrue(_isSwitchMember("case"));
}
void test_isSwitchMember_default_labeled() {
- JUnitTestCase.assertTrue(isSwitchMember("l1: l2: default"));
+ JUnitTestCase.assertTrue(_isSwitchMember("l1: l2: default"));
}
void test_isSwitchMember_default_unlabeled() {
- JUnitTestCase.assertTrue(isSwitchMember("default"));
+ JUnitTestCase.assertTrue(_isSwitchMember("default"));
}
void test_isSwitchMember_false() {
- JUnitTestCase.assertFalse(isSwitchMember("break;"));
+ JUnitTestCase.assertFalse(_isSwitchMember("break;"));
}
void test_parseAdditiveExpression_normal() {
@@ -1534,7 +1534,7 @@
}
void test_parseCompilationUnit_skipFunctionBody_withInterpolation() {
- ParserTestCase._parseFunctionBodies = false;
+ ParserTestCase.parseFunctionBodies = false;
CompilationUnit unit = ParserTestCase.parse4("parseCompilationUnit", "f() { '\${n}'; }", []);
JUnitTestCase.assertNull(unit.scriptTag);
EngineTestCase.assertSizeOfList(1, unit.declarations);
@@ -2567,19 +2567,19 @@
}
void test_parseFunctionBody_skip_block() {
- ParserTestCase._parseFunctionBodies = false;
+ ParserTestCase.parseFunctionBodies = false;
FunctionBody functionBody = ParserTestCase.parse("parseFunctionBody", <Object> [false, null, false], "{}");
EngineTestCase.assertInstanceOf((obj) => obj is EmptyFunctionBody, EmptyFunctionBody, functionBody);
}
void test_parseFunctionBody_skip_blocks() {
- ParserTestCase._parseFunctionBodies = false;
+ ParserTestCase.parseFunctionBodies = false;
FunctionBody functionBody = ParserTestCase.parse("parseFunctionBody", <Object> [false, null, false], "{ {} }");
EngineTestCase.assertInstanceOf((obj) => obj is EmptyFunctionBody, EmptyFunctionBody, functionBody);
}
void test_parseFunctionBody_skip_expression() {
- ParserTestCase._parseFunctionBodies = false;
+ ParserTestCase.parseFunctionBodies = false;
FunctionBody functionBody = ParserTestCase.parse("parseFunctionBody", <Object> [false, null, false], "=> y;");
EngineTestCase.assertInstanceOf((obj) => obj is EmptyFunctionBody, EmptyFunctionBody, functionBody);
}
@@ -4352,109 +4352,109 @@
}
void test_skipPrefixedIdentifier_invalid() {
- Token following = skip("skipPrefixedIdentifier", "+");
+ Token following = _skip("skipPrefixedIdentifier", "+");
JUnitTestCase.assertNull(following);
}
void test_skipPrefixedIdentifier_notPrefixed() {
- Token following = skip("skipPrefixedIdentifier", "a +");
+ Token following = _skip("skipPrefixedIdentifier", "a +");
JUnitTestCase.assertNotNull(following);
JUnitTestCase.assertEquals(TokenType.PLUS, following.type);
}
void test_skipPrefixedIdentifier_prefixed() {
- Token following = skip("skipPrefixedIdentifier", "a.b +");
+ Token following = _skip("skipPrefixedIdentifier", "a.b +");
JUnitTestCase.assertNotNull(following);
JUnitTestCase.assertEquals(TokenType.PLUS, following.type);
}
void test_skipReturnType_invalid() {
- Token following = skip("skipReturnType", "+");
+ Token following = _skip("skipReturnType", "+");
JUnitTestCase.assertNull(following);
}
void test_skipReturnType_type() {
- Token following = skip("skipReturnType", "C +");
+ Token following = _skip("skipReturnType", "C +");
JUnitTestCase.assertNotNull(following);
JUnitTestCase.assertEquals(TokenType.PLUS, following.type);
}
void test_skipReturnType_void() {
- Token following = skip("skipReturnType", "void +");
+ Token following = _skip("skipReturnType", "void +");
JUnitTestCase.assertNotNull(following);
JUnitTestCase.assertEquals(TokenType.PLUS, following.type);
}
void test_skipSimpleIdentifier_identifier() {
- Token following = skip("skipSimpleIdentifier", "i +");
+ Token following = _skip("skipSimpleIdentifier", "i +");
JUnitTestCase.assertNotNull(following);
JUnitTestCase.assertEquals(TokenType.PLUS, following.type);
}
void test_skipSimpleIdentifier_invalid() {
- Token following = skip("skipSimpleIdentifier", "9 +");
+ Token following = _skip("skipSimpleIdentifier", "9 +");
JUnitTestCase.assertNull(following);
}
void test_skipSimpleIdentifier_pseudoKeyword() {
- Token following = skip("skipSimpleIdentifier", "as +");
+ Token following = _skip("skipSimpleIdentifier", "as +");
JUnitTestCase.assertNotNull(following);
JUnitTestCase.assertEquals(TokenType.PLUS, following.type);
}
void test_skipStringLiteral_adjacent() {
- Token following = skip("skipStringLiteral", "'a' 'b' +");
+ Token following = _skip("skipStringLiteral", "'a' 'b' +");
JUnitTestCase.assertNotNull(following);
JUnitTestCase.assertEquals(TokenType.PLUS, following.type);
}
void test_skipStringLiteral_interpolated() {
- Token following = skip("skipStringLiteral", "'a\${b}c' +");
+ Token following = _skip("skipStringLiteral", "'a\${b}c' +");
JUnitTestCase.assertNotNull(following);
JUnitTestCase.assertEquals(TokenType.PLUS, following.type);
}
void test_skipStringLiteral_invalid() {
- Token following = skip("skipStringLiteral", "a");
+ Token following = _skip("skipStringLiteral", "a");
JUnitTestCase.assertNull(following);
}
void test_skipStringLiteral_single() {
- Token following = skip("skipStringLiteral", "'a' +");
+ Token following = _skip("skipStringLiteral", "'a' +");
JUnitTestCase.assertNotNull(following);
JUnitTestCase.assertEquals(TokenType.PLUS, following.type);
}
void test_skipTypeArgumentList_invalid() {
- Token following = skip("skipTypeArgumentList", "+");
+ Token following = _skip("skipTypeArgumentList", "+");
JUnitTestCase.assertNull(following);
}
void test_skipTypeArgumentList_multiple() {
- Token following = skip("skipTypeArgumentList", "<E, F, G> +");
+ Token following = _skip("skipTypeArgumentList", "<E, F, G> +");
JUnitTestCase.assertNotNull(following);
JUnitTestCase.assertEquals(TokenType.PLUS, following.type);
}
void test_skipTypeArgumentList_single() {
- Token following = skip("skipTypeArgumentList", "<E> +");
+ Token following = _skip("skipTypeArgumentList", "<E> +");
JUnitTestCase.assertNotNull(following);
JUnitTestCase.assertEquals(TokenType.PLUS, following.type);
}
void test_skipTypeName_invalid() {
- Token following = skip("skipTypeName", "+");
+ Token following = _skip("skipTypeName", "+");
JUnitTestCase.assertNull(following);
}
void test_skipTypeName_parameterized() {
- Token following = skip("skipTypeName", "C<E<F<G>>> +");
+ Token following = _skip("skipTypeName", "C<E<F<G>>> +");
JUnitTestCase.assertNotNull(following);
JUnitTestCase.assertEquals(TokenType.PLUS, following.type);
}
void test_skipTypeName_simple() {
- Token following = skip("skipTypeName", "C +");
+ Token following = _skip("skipTypeName", "C +");
JUnitTestCase.assertNotNull(following);
JUnitTestCase.assertEquals(TokenType.PLUS, following.type);
}
@@ -4468,7 +4468,7 @@
* @return the result of invoking the method
* @throws Exception if the method could not be invoked or throws an exception
*/
- String computeStringValue(String lexeme, bool first, bool last) {
+ String _computeStringValue(String lexeme, bool first, bool last) {
AnalysisErrorListener listener = new AnalysisErrorListener_SimpleParserTest_computeStringValue();
Parser parser = new Parser(null, listener);
return invokeParserMethodImpl(parser, "computeStringValue", <Object> [lexeme, first, last], null) as String;
@@ -4482,7 +4482,7 @@
* @return the result of invoking the method
* @throws Exception if the method could not be invoked or throws an exception
*/
- SimpleIdentifier createSyntheticIdentifier() {
+ SimpleIdentifier _createSyntheticIdentifier() {
GatheringErrorListener listener = new GatheringErrorListener();
return ParserTestCase.invokeParserMethod2("createSyntheticIdentifier", "", listener);
}
@@ -4495,7 +4495,7 @@
* @return the result of invoking the method
* @throws Exception if the method could not be invoked or throws an exception
*/
- SimpleStringLiteral createSyntheticStringLiteral() {
+ SimpleStringLiteral _createSyntheticStringLiteral() {
GatheringErrorListener listener = new GatheringErrorListener();
return ParserTestCase.invokeParserMethod2("createSyntheticStringLiteral", "", listener);
}
@@ -4508,7 +4508,7 @@
* @return the result of invoking the method
* @throws Exception if the method could not be invoked or throws an exception
*/
- bool isFunctionDeclaration(String source) {
+ bool _isFunctionDeclaration(String source) {
GatheringErrorListener listener = new GatheringErrorListener();
return ParserTestCase.invokeParserMethod2("isFunctionDeclaration", source, listener) as bool;
}
@@ -4521,7 +4521,7 @@
* @return the result of invoking the method
* @throws Exception if the method could not be invoked or throws an exception
*/
- bool isFunctionExpression(String source) {
+ bool _isFunctionExpression(String source) {
GatheringErrorListener listener = new GatheringErrorListener();
//
// Scan the source.
@@ -4543,7 +4543,7 @@
* @return the result of invoking the method
* @throws Exception if the method could not be invoked or throws an exception
*/
- bool isInitializedVariableDeclaration(String source) {
+ bool _isInitializedVariableDeclaration(String source) {
GatheringErrorListener listener = new GatheringErrorListener();
return ParserTestCase.invokeParserMethod2("isInitializedVariableDeclaration", source, listener) as bool;
}
@@ -4556,7 +4556,7 @@
* @return the result of invoking the method
* @throws Exception if the method could not be invoked or throws an exception
*/
- bool isSwitchMember(String source) {
+ bool _isSwitchMember(String source) {
GatheringErrorListener listener = new GatheringErrorListener();
return ParserTestCase.invokeParserMethod2("isSwitchMember", source, listener) as bool;
}
@@ -4571,7 +4571,7 @@
* @throws Exception if the method could not be invoked or throws an exception
* @throws AssertionFailedError if the result is `null`
*/
- Token skip(String methodName, String source) {
+ Token _skip(String methodName, String source) {
GatheringErrorListener listener = new GatheringErrorListener();
//
// Scan the source.
@@ -6776,6 +6776,7 @@
}
class AnalysisErrorListener_SimpleParserTest_computeStringValue implements AnalysisErrorListener {
+ @override
void onError(AnalysisError event) {
JUnitTestCase.fail("Unexpected compilation error: ${event.message} (${event.offset}, ${event.length})");
}
@@ -7284,7 +7285,7 @@
/**
* A flag indicating whether parser is to parse function bodies.
*/
- static bool _parseFunctionBodies = true;
+ static bool parseFunctionBodies = true;
/**
* Invoke a parse method in [Parser]. The method is assumed to have the given number and
@@ -7477,7 +7478,7 @@
// Parse the source.
//
Parser parser = new Parser(null, listener);
- parser.parseFunctionBodies = _parseFunctionBodies;
+ parser.parseFunctionBodies = parseFunctionBodies;
Object result = invokeParserMethodImpl(parser, methodName, objects, tokenStream);
//
// Partially test the results.
@@ -7526,9 +7527,10 @@
*/
CommentAndMetadata emptyCommentAndMetadata() => new CommentAndMetadata(null, new List<Annotation>());
+ @override
void setUp() {
super.setUp();
- _parseFunctionBodies = true;
+ parseFunctionBodies = true;
}
static dartSuite() {
@@ -7563,8 +7565,9 @@
}
}
+ @override
Object visitNode(AstNode node) {
- validate(node);
+ _validate(node);
return super.visitNode(node);
}
@@ -7573,7 +7576,7 @@
*
* @param node the AST node being validated
*/
- void validate(AstNode node) {
+ void _validate(AstNode node) {
AstNode parent = node.parent;
if (node is CompilationUnit) {
if (parent != null) {
@@ -7623,9 +7626,9 @@
void test_visitArgumentDefinitionTest() {
String identifier = "p";
ArgumentDefinitionTest fromNode = AstFactory.argumentDefinitionTest(identifier);
- Type2 propagatedType = ElementFactory.classElement2("A", []).type;
+ DartType propagatedType = ElementFactory.classElement2("A", []).type;
fromNode.propagatedType = propagatedType;
- Type2 staticType = ElementFactory.classElement2("B", []).type;
+ DartType staticType = ElementFactory.classElement2("B", []).type;
fromNode.staticType = staticType;
ArgumentDefinitionTest toNode = AstFactory.argumentDefinitionTest(identifier);
ResolutionCopier.copyResolutionData(fromNode, toNode);
@@ -7635,9 +7638,9 @@
void test_visitAsExpression() {
AsExpression fromNode = AstFactory.asExpression(AstFactory.identifier3("x"), AstFactory.typeName4("A", []));
- Type2 propagatedType = ElementFactory.classElement2("A", []).type;
+ DartType propagatedType = ElementFactory.classElement2("A", []).type;
fromNode.propagatedType = propagatedType;
- Type2 staticType = ElementFactory.classElement2("B", []).type;
+ DartType staticType = ElementFactory.classElement2("B", []).type;
fromNode.staticType = staticType;
AsExpression toNode = AstFactory.asExpression(AstFactory.identifier3("x"), AstFactory.typeName4("A", []));
ResolutionCopier.copyResolutionData(fromNode, toNode);
@@ -7647,11 +7650,11 @@
void test_visitAssignmentExpression() {
AssignmentExpression fromNode = AstFactory.assignmentExpression(AstFactory.identifier3("a"), TokenType.PLUS_EQ, AstFactory.identifier3("b"));
- Type2 propagatedType = ElementFactory.classElement2("C", []).type;
+ DartType propagatedType = ElementFactory.classElement2("C", []).type;
MethodElement propagatedElement = ElementFactory.methodElement("+", propagatedType, []);
fromNode.propagatedElement = propagatedElement;
fromNode.propagatedType = propagatedType;
- Type2 staticType = ElementFactory.classElement2("C", []).type;
+ DartType staticType = ElementFactory.classElement2("C", []).type;
MethodElement staticElement = ElementFactory.methodElement("+", staticType, []);
fromNode.staticElement = staticElement;
fromNode.staticType = staticType;
@@ -7665,11 +7668,11 @@
void test_visitBinaryExpression() {
BinaryExpression fromNode = AstFactory.binaryExpression(AstFactory.identifier3("a"), TokenType.PLUS, AstFactory.identifier3("b"));
- Type2 propagatedType = ElementFactory.classElement2("C", []).type;
+ DartType propagatedType = ElementFactory.classElement2("C", []).type;
MethodElement propagatedElement = ElementFactory.methodElement("+", propagatedType, []);
fromNode.propagatedElement = propagatedElement;
fromNode.propagatedType = propagatedType;
- Type2 staticType = ElementFactory.classElement2("C", []).type;
+ DartType staticType = ElementFactory.classElement2("C", []).type;
MethodElement staticElement = ElementFactory.methodElement("+", staticType, []);
fromNode.staticElement = staticElement;
fromNode.staticType = staticType;
@@ -7683,9 +7686,9 @@
void test_visitBooleanLiteral() {
BooleanLiteral fromNode = AstFactory.booleanLiteral(true);
- Type2 propagatedType = ElementFactory.classElement2("C", []).type;
+ DartType propagatedType = ElementFactory.classElement2("C", []).type;
fromNode.propagatedType = propagatedType;
- Type2 staticType = ElementFactory.classElement2("C", []).type;
+ DartType staticType = ElementFactory.classElement2("C", []).type;
fromNode.staticType = staticType;
BooleanLiteral toNode = AstFactory.booleanLiteral(true);
ResolutionCopier.copyResolutionData(fromNode, toNode);
@@ -7695,9 +7698,9 @@
void test_visitCascadeExpression() {
CascadeExpression fromNode = AstFactory.cascadeExpression(AstFactory.identifier3("a"), [AstFactory.identifier3("b")]);
- Type2 propagatedType = ElementFactory.classElement2("C", []).type;
+ DartType propagatedType = ElementFactory.classElement2("C", []).type;
fromNode.propagatedType = propagatedType;
- Type2 staticType = ElementFactory.classElement2("C", []).type;
+ DartType staticType = ElementFactory.classElement2("C", []).type;
fromNode.staticType = staticType;
CascadeExpression toNode = AstFactory.cascadeExpression(AstFactory.identifier3("a"), [AstFactory.identifier3("b")]);
ResolutionCopier.copyResolutionData(fromNode, toNode);
@@ -7716,9 +7719,9 @@
void test_visitConditionalExpression() {
ConditionalExpression fromNode = AstFactory.conditionalExpression(AstFactory.identifier3("c"), AstFactory.identifier3("a"), AstFactory.identifier3("b"));
- Type2 propagatedType = ElementFactory.classElement2("C", []).type;
+ DartType propagatedType = ElementFactory.classElement2("C", []).type;
fromNode.propagatedType = propagatedType;
- Type2 staticType = ElementFactory.classElement2("C", []).type;
+ DartType staticType = ElementFactory.classElement2("C", []).type;
fromNode.staticType = staticType;
ConditionalExpression toNode = AstFactory.conditionalExpression(AstFactory.identifier3("c"), AstFactory.identifier3("a"), AstFactory.identifier3("b"));
ResolutionCopier.copyResolutionData(fromNode, toNode);
@@ -7748,9 +7751,9 @@
void test_visitDoubleLiteral() {
DoubleLiteral fromNode = AstFactory.doubleLiteral(1.0);
- Type2 propagatedType = ElementFactory.classElement2("C", []).type;
+ DartType propagatedType = ElementFactory.classElement2("C", []).type;
fromNode.propagatedType = propagatedType;
- Type2 staticType = ElementFactory.classElement2("C", []).type;
+ DartType staticType = ElementFactory.classElement2("C", []).type;
fromNode.staticType = staticType;
DoubleLiteral toNode = AstFactory.doubleLiteral(1.0);
ResolutionCopier.copyResolutionData(fromNode, toNode);
@@ -7771,9 +7774,9 @@
FunctionExpression fromNode = AstFactory.functionExpression2(AstFactory.formalParameterList([]), AstFactory.emptyFunctionBody());
MethodElement element = ElementFactory.methodElement("m", ElementFactory.classElement2("C", []).type, []);
fromNode.element = element;
- Type2 propagatedType = ElementFactory.classElement2("C", []).type;
+ DartType propagatedType = ElementFactory.classElement2("C", []).type;
fromNode.propagatedType = propagatedType;
- Type2 staticType = ElementFactory.classElement2("C", []).type;
+ DartType staticType = ElementFactory.classElement2("C", []).type;
fromNode.staticType = staticType;
FunctionExpression toNode = AstFactory.functionExpression2(AstFactory.formalParameterList([]), AstFactory.emptyFunctionBody());
ResolutionCopier.copyResolutionData(fromNode, toNode);
@@ -7786,11 +7789,11 @@
FunctionExpressionInvocation fromNode = AstFactory.functionExpressionInvocation(AstFactory.identifier3("f"), []);
MethodElement propagatedElement = ElementFactory.methodElement("m", ElementFactory.classElement2("C", []).type, []);
fromNode.propagatedElement = propagatedElement;
- Type2 propagatedType = ElementFactory.classElement2("C", []).type;
+ DartType propagatedType = ElementFactory.classElement2("C", []).type;
fromNode.propagatedType = propagatedType;
MethodElement staticElement = ElementFactory.methodElement("m", ElementFactory.classElement2("C", []).type, []);
fromNode.staticElement = staticElement;
- Type2 staticType = ElementFactory.classElement2("C", []).type;
+ DartType staticType = ElementFactory.classElement2("C", []).type;
fromNode.staticType = staticType;
FunctionExpressionInvocation toNode = AstFactory.functionExpressionInvocation(AstFactory.identifier3("f"), []);
ResolutionCopier.copyResolutionData(fromNode, toNode);
@@ -7816,10 +7819,10 @@
AuxiliaryElements auxiliaryElements = new AuxiliaryElements(staticElement, propagatedElement);
fromNode.auxiliaryElements = auxiliaryElements;
fromNode.propagatedElement = propagatedElement;
- Type2 propagatedType = ElementFactory.classElement2("C", []).type;
+ DartType propagatedType = ElementFactory.classElement2("C", []).type;
fromNode.propagatedType = propagatedType;
fromNode.staticElement = staticElement;
- Type2 staticType = ElementFactory.classElement2("C", []).type;
+ DartType staticType = ElementFactory.classElement2("C", []).type;
fromNode.staticType = staticType;
IndexExpression toNode = AstFactory.indexExpression(AstFactory.identifier3("a"), AstFactory.integer(0));
ResolutionCopier.copyResolutionData(fromNode, toNode);
@@ -7832,11 +7835,11 @@
void test_visitInstanceCreationExpression() {
InstanceCreationExpression fromNode = AstFactory.instanceCreationExpression2(Keyword.NEW, AstFactory.typeName4("C", []), []);
- Type2 propagatedType = ElementFactory.classElement2("C", []).type;
+ DartType propagatedType = ElementFactory.classElement2("C", []).type;
fromNode.propagatedType = propagatedType;
ConstructorElement staticElement = ElementFactory.constructorElement2(ElementFactory.classElement2("C", []), null, []);
fromNode.staticElement = staticElement;
- Type2 staticType = ElementFactory.classElement2("C", []).type;
+ DartType staticType = ElementFactory.classElement2("C", []).type;
fromNode.staticType = staticType;
InstanceCreationExpression toNode = AstFactory.instanceCreationExpression2(Keyword.NEW, AstFactory.typeName4("C", []), []);
ResolutionCopier.copyResolutionData(fromNode, toNode);
@@ -7847,9 +7850,9 @@
void test_visitIntegerLiteral() {
IntegerLiteral fromNode = AstFactory.integer(2);
- Type2 propagatedType = ElementFactory.classElement2("C", []).type;
+ DartType propagatedType = ElementFactory.classElement2("C", []).type;
fromNode.propagatedType = propagatedType;
- Type2 staticType = ElementFactory.classElement2("C", []).type;
+ DartType staticType = ElementFactory.classElement2("C", []).type;
fromNode.staticType = staticType;
IntegerLiteral toNode = AstFactory.integer(2);
ResolutionCopier.copyResolutionData(fromNode, toNode);
@@ -7859,9 +7862,9 @@
void test_visitIsExpression() {
IsExpression fromNode = AstFactory.isExpression(AstFactory.identifier3("x"), false, AstFactory.typeName4("A", []));
- Type2 propagatedType = ElementFactory.classElement2("C", []).type;
+ DartType propagatedType = ElementFactory.classElement2("C", []).type;
fromNode.propagatedType = propagatedType;
- Type2 staticType = ElementFactory.classElement2("C", []).type;
+ DartType staticType = ElementFactory.classElement2("C", []).type;
fromNode.staticType = staticType;
IsExpression toNode = AstFactory.isExpression(AstFactory.identifier3("x"), false, AstFactory.typeName4("A", []));
ResolutionCopier.copyResolutionData(fromNode, toNode);
@@ -7871,9 +7874,9 @@
void test_visitLibraryIdentifier() {
LibraryIdentifier fromNode = AstFactory.libraryIdentifier([AstFactory.identifier3("lib")]);
- Type2 propagatedType = ElementFactory.classElement2("C", []).type;
+ DartType propagatedType = ElementFactory.classElement2("C", []).type;
fromNode.propagatedType = propagatedType;
- Type2 staticType = ElementFactory.classElement2("C", []).type;
+ DartType staticType = ElementFactory.classElement2("C", []).type;
fromNode.staticType = staticType;
LibraryIdentifier toNode = AstFactory.libraryIdentifier([AstFactory.identifier3("lib")]);
ResolutionCopier.copyResolutionData(fromNode, toNode);
@@ -7883,9 +7886,9 @@
void test_visitListLiteral() {
ListLiteral fromNode = AstFactory.listLiteral([]);
- Type2 propagatedType = ElementFactory.classElement2("C", []).type;
+ DartType propagatedType = ElementFactory.classElement2("C", []).type;
fromNode.propagatedType = propagatedType;
- Type2 staticType = ElementFactory.classElement2("C", []).type;
+ DartType staticType = ElementFactory.classElement2("C", []).type;
fromNode.staticType = staticType;
ListLiteral toNode = AstFactory.listLiteral([]);
ResolutionCopier.copyResolutionData(fromNode, toNode);
@@ -7895,9 +7898,9 @@
void test_visitMapLiteral() {
MapLiteral fromNode = AstFactory.mapLiteral2([]);
- Type2 propagatedType = ElementFactory.classElement2("C", []).type;
+ DartType propagatedType = ElementFactory.classElement2("C", []).type;
fromNode.propagatedType = propagatedType;
- Type2 staticType = ElementFactory.classElement2("C", []).type;
+ DartType staticType = ElementFactory.classElement2("C", []).type;
fromNode.staticType = staticType;
MapLiteral toNode = AstFactory.mapLiteral2([]);
ResolutionCopier.copyResolutionData(fromNode, toNode);
@@ -7907,9 +7910,9 @@
void test_visitMethodInvocation() {
MethodInvocation fromNode = AstFactory.methodInvocation2("m", []);
- Type2 propagatedType = ElementFactory.classElement2("C", []).type;
+ DartType propagatedType = ElementFactory.classElement2("C", []).type;
fromNode.propagatedType = propagatedType;
- Type2 staticType = ElementFactory.classElement2("C", []).type;
+ DartType staticType = ElementFactory.classElement2("C", []).type;
fromNode.staticType = staticType;
MethodInvocation toNode = AstFactory.methodInvocation2("m", []);
ResolutionCopier.copyResolutionData(fromNode, toNode);
@@ -7919,9 +7922,9 @@
void test_visitNamedExpression() {
NamedExpression fromNode = AstFactory.namedExpression2("n", AstFactory.integer(0));
- Type2 propagatedType = ElementFactory.classElement2("C", []).type;
+ DartType propagatedType = ElementFactory.classElement2("C", []).type;
fromNode.propagatedType = propagatedType;
- Type2 staticType = ElementFactory.classElement2("C", []).type;
+ DartType staticType = ElementFactory.classElement2("C", []).type;
fromNode.staticType = staticType;
NamedExpression toNode = AstFactory.namedExpression2("n", AstFactory.integer(0));
ResolutionCopier.copyResolutionData(fromNode, toNode);
@@ -7931,9 +7934,9 @@
void test_visitNullLiteral() {
NullLiteral fromNode = AstFactory.nullLiteral();
- Type2 propagatedType = ElementFactory.classElement2("C", []).type;
+ DartType propagatedType = ElementFactory.classElement2("C", []).type;
fromNode.propagatedType = propagatedType;
- Type2 staticType = ElementFactory.classElement2("C", []).type;
+ DartType staticType = ElementFactory.classElement2("C", []).type;
fromNode.staticType = staticType;
NullLiteral toNode = AstFactory.nullLiteral();
ResolutionCopier.copyResolutionData(fromNode, toNode);
@@ -7943,9 +7946,9 @@
void test_visitParenthesizedExpression() {
ParenthesizedExpression fromNode = AstFactory.parenthesizedExpression(AstFactory.integer(0));
- Type2 propagatedType = ElementFactory.classElement2("C", []).type;
+ DartType propagatedType = ElementFactory.classElement2("C", []).type;
fromNode.propagatedType = propagatedType;
- Type2 staticType = ElementFactory.classElement2("C", []).type;
+ DartType staticType = ElementFactory.classElement2("C", []).type;
fromNode.staticType = staticType;
ParenthesizedExpression toNode = AstFactory.parenthesizedExpression(AstFactory.integer(0));
ResolutionCopier.copyResolutionData(fromNode, toNode);
@@ -7976,11 +7979,11 @@
PostfixExpression fromNode = AstFactory.postfixExpression(AstFactory.identifier3(variableName), TokenType.PLUS_PLUS);
MethodElement propagatedElement = ElementFactory.methodElement("+", ElementFactory.classElement2("C", []).type, []);
fromNode.propagatedElement = propagatedElement;
- Type2 propagatedType = ElementFactory.classElement2("C", []).type;
+ DartType propagatedType = ElementFactory.classElement2("C", []).type;
fromNode.propagatedType = propagatedType;
MethodElement staticElement = ElementFactory.methodElement("+", ElementFactory.classElement2("C", []).type, []);
fromNode.staticElement = staticElement;
- Type2 staticType = ElementFactory.classElement2("C", []).type;
+ DartType staticType = ElementFactory.classElement2("C", []).type;
fromNode.staticType = staticType;
PostfixExpression toNode = AstFactory.postfixExpression(AstFactory.identifier3(variableName), TokenType.PLUS_PLUS);
ResolutionCopier.copyResolutionData(fromNode, toNode);
@@ -7992,9 +7995,9 @@
void test_visitPrefixedIdentifier() {
PrefixedIdentifier fromNode = AstFactory.identifier5("p", "f");
- Type2 propagatedType = ElementFactory.classElement2("C", []).type;
+ DartType propagatedType = ElementFactory.classElement2("C", []).type;
fromNode.propagatedType = propagatedType;
- Type2 staticType = ElementFactory.classElement2("C", []).type;
+ DartType staticType = ElementFactory.classElement2("C", []).type;
fromNode.staticType = staticType;
PrefixedIdentifier toNode = AstFactory.identifier5("p", "f");
ResolutionCopier.copyResolutionData(fromNode, toNode);
@@ -8005,10 +8008,10 @@
void test_visitPrefixExpression() {
PrefixExpression fromNode = AstFactory.prefixExpression(TokenType.PLUS_PLUS, AstFactory.identifier3("x"));
MethodElement propagatedElement = ElementFactory.methodElement("+", ElementFactory.classElement2("C", []).type, []);
- Type2 propagatedType = ElementFactory.classElement2("C", []).type;
+ DartType propagatedType = ElementFactory.classElement2("C", []).type;
fromNode.propagatedElement = propagatedElement;
fromNode.propagatedType = propagatedType;
- Type2 staticType = ElementFactory.classElement2("C", []).type;
+ DartType staticType = ElementFactory.classElement2("C", []).type;
MethodElement staticElement = ElementFactory.methodElement("+", ElementFactory.classElement2("C", []).type, []);
fromNode.staticElement = staticElement;
fromNode.staticType = staticType;
@@ -8022,9 +8025,9 @@
void test_visitPropertyAccess() {
PropertyAccess fromNode = AstFactory.propertyAccess2(AstFactory.identifier3("x"), "y");
- Type2 propagatedType = ElementFactory.classElement2("C", []).type;
+ DartType propagatedType = ElementFactory.classElement2("C", []).type;
fromNode.propagatedType = propagatedType;
- Type2 staticType = ElementFactory.classElement2("C", []).type;
+ DartType staticType = ElementFactory.classElement2("C", []).type;
fromNode.staticType = staticType;
PropertyAccess toNode = AstFactory.propertyAccess2(AstFactory.identifier3("x"), "y");
ResolutionCopier.copyResolutionData(fromNode, toNode);
@@ -8043,9 +8046,9 @@
void test_visitRethrowExpression() {
RethrowExpression fromNode = AstFactory.rethrowExpression();
- Type2 propagatedType = ElementFactory.classElement2("C", []).type;
+ DartType propagatedType = ElementFactory.classElement2("C", []).type;
fromNode.propagatedType = propagatedType;
- Type2 staticType = ElementFactory.classElement2("C", []).type;
+ DartType staticType = ElementFactory.classElement2("C", []).type;
fromNode.staticType = staticType;
RethrowExpression toNode = AstFactory.rethrowExpression();
ResolutionCopier.copyResolutionData(fromNode, toNode);
@@ -8060,10 +8063,10 @@
AuxiliaryElements auxiliaryElements = new AuxiliaryElements(staticElement, propagatedElement);
fromNode.auxiliaryElements = auxiliaryElements;
fromNode.propagatedElement = propagatedElement;
- Type2 propagatedType = ElementFactory.classElement2("C", []).type;
+ DartType propagatedType = ElementFactory.classElement2("C", []).type;
fromNode.propagatedType = propagatedType;
fromNode.staticElement = staticElement;
- Type2 staticType = ElementFactory.classElement2("C", []).type;
+ DartType staticType = ElementFactory.classElement2("C", []).type;
fromNode.staticType = staticType;
SimpleIdentifier toNode = AstFactory.identifier3("x");
ResolutionCopier.copyResolutionData(fromNode, toNode);
@@ -8076,9 +8079,9 @@
void test_visitSimpleStringLiteral() {
SimpleStringLiteral fromNode = AstFactory.string2("abc");
- Type2 propagatedType = ElementFactory.classElement2("C", []).type;
+ DartType propagatedType = ElementFactory.classElement2("C", []).type;
fromNode.propagatedType = propagatedType;
- Type2 staticType = ElementFactory.classElement2("C", []).type;
+ DartType staticType = ElementFactory.classElement2("C", []).type;
fromNode.staticType = staticType;
SimpleStringLiteral toNode = AstFactory.string2("abc");
ResolutionCopier.copyResolutionData(fromNode, toNode);
@@ -8088,9 +8091,9 @@
void test_visitStringInterpolation() {
StringInterpolation fromNode = AstFactory.string([AstFactory.interpolationString("a", "'a'")]);
- Type2 propagatedType = ElementFactory.classElement2("C", []).type;
+ DartType propagatedType = ElementFactory.classElement2("C", []).type;
fromNode.propagatedType = propagatedType;
- Type2 staticType = ElementFactory.classElement2("C", []).type;
+ DartType staticType = ElementFactory.classElement2("C", []).type;
fromNode.staticType = staticType;
StringInterpolation toNode = AstFactory.string([AstFactory.interpolationString("a", "'a'")]);
ResolutionCopier.copyResolutionData(fromNode, toNode);
@@ -8109,9 +8112,9 @@
void test_visitSuperExpression() {
SuperExpression fromNode = AstFactory.superExpression();
- Type2 propagatedType = ElementFactory.classElement2("C", []).type;
+ DartType propagatedType = ElementFactory.classElement2("C", []).type;
fromNode.propagatedType = propagatedType;
- Type2 staticType = ElementFactory.classElement2("C", []).type;
+ DartType staticType = ElementFactory.classElement2("C", []).type;
fromNode.staticType = staticType;
SuperExpression toNode = AstFactory.superExpression();
ResolutionCopier.copyResolutionData(fromNode, toNode);
@@ -8121,9 +8124,9 @@
void test_visitSymbolLiteral() {
SymbolLiteral fromNode = AstFactory.symbolLiteral(["s"]);
- Type2 propagatedType = ElementFactory.classElement2("C", []).type;
+ DartType propagatedType = ElementFactory.classElement2("C", []).type;
fromNode.propagatedType = propagatedType;
- Type2 staticType = ElementFactory.classElement2("C", []).type;
+ DartType staticType = ElementFactory.classElement2("C", []).type;
fromNode.staticType = staticType;
SymbolLiteral toNode = AstFactory.symbolLiteral(["s"]);
ResolutionCopier.copyResolutionData(fromNode, toNode);
@@ -8133,9 +8136,9 @@
void test_visitThisExpression() {
ThisExpression fromNode = AstFactory.thisExpression();
- Type2 propagatedType = ElementFactory.classElement2("C", []).type;
+ DartType propagatedType = ElementFactory.classElement2("C", []).type;
fromNode.propagatedType = propagatedType;
- Type2 staticType = ElementFactory.classElement2("C", []).type;
+ DartType staticType = ElementFactory.classElement2("C", []).type;
fromNode.staticType = staticType;
ThisExpression toNode = AstFactory.thisExpression();
ResolutionCopier.copyResolutionData(fromNode, toNode);
@@ -8145,9 +8148,9 @@
void test_visitThrowExpression() {
ThrowExpression fromNode = AstFactory.throwExpression();
- Type2 propagatedType = ElementFactory.classElement2("C", []).type;
+ DartType propagatedType = ElementFactory.classElement2("C", []).type;
fromNode.propagatedType = propagatedType;
- Type2 staticType = ElementFactory.classElement2("C", []).type;
+ DartType staticType = ElementFactory.classElement2("C", []).type;
fromNode.staticType = staticType;
ThrowExpression toNode = AstFactory.throwExpression();
ResolutionCopier.copyResolutionData(fromNode, toNode);
@@ -8157,7 +8160,7 @@
void test_visitTypeName() {
TypeName fromNode = AstFactory.typeName4("C", []);
- Type2 type = ElementFactory.classElement2("C", []).type;
+ DartType type = ElementFactory.classElement2("C", []).type;
fromNode.type = type;
TypeName toNode = AstFactory.typeName4("C", []);
ResolutionCopier.copyResolutionData(fromNode, toNode);
@@ -9277,199 +9280,199 @@
void test_delete_everything() {
// "f() => a + b;"
// ""
- assertParse("", "f() => a + b;", "", "");
+ _assertParse("", "f() => a + b;", "", "");
}
void test_delete_identifier_beginning() {
// "f() => abs + b;"
// "f() => s + b;"
- assertParse("f() => ", "ab", "", "s + b;");
+ _assertParse("f() => ", "ab", "", "s + b;");
}
void test_delete_identifier_end() {
// "f() => abs + b;"
// "f() => a + b;"
- assertParse("f() => a", "bs", "", " + b;");
+ _assertParse("f() => a", "bs", "", " + b;");
}
void test_delete_identifier_middle() {
// "f() => abs + b;"
// "f() => as + b;"
- assertParse("f() => a", "b", "", "s + b;");
+ _assertParse("f() => a", "b", "", "s + b;");
}
void test_delete_mergeTokens() {
// "f() => a + b + c;"
// "f() => ac;"
- assertParse("f() => a", " + b + ", "", "c;");
+ _assertParse("f() => a", " + b + ", "", "c;");
}
void test_insert_afterIdentifier1() {
// "f() => a + b;"
// "f() => abs + b;"
- assertParse("f() => a", "", "bs", " + b;");
+ _assertParse("f() => a", "", "bs", " + b;");
}
void test_insert_afterIdentifier2() {
// "f() => a + b;"
// "f() => a + bar;"
- assertParse("f() => a + b", "", "ar", ";");
+ _assertParse("f() => a + b", "", "ar", ";");
}
void test_insert_beforeIdentifier1() {
// "f() => a + b;"
// "f() => xa + b;"
- assertParse("f() => ", "", "x", "a + b;");
+ _assertParse("f() => ", "", "x", "a + b;");
}
void test_insert_beforeIdentifier2() {
// "f() => a + b;"
// "f() => a + xb;"
- assertParse("f() => a + ", "", "x", "b;");
+ _assertParse("f() => a + ", "", "x", "b;");
}
void test_insert_convertOneFunctionToTwo() {
// "f() {}"
// "f() => 0; g() {}"
- assertParse("f()", "", " => 0; g()", " {}");
+ _assertParse("f()", "", " => 0; g()", " {}");
}
void test_insert_end() {
// "class A {}"
// "class A {} class B {}"
- assertParse("class A {}", "", " class B {}", "");
+ _assertParse("class A {}", "", " class B {}", "");
}
void test_insert_insideClassBody() {
// "class C {C(); }"
// "class C { C(); }"
- assertParse("class C {", "", " ", "C(); }");
+ _assertParse("class C {", "", " ", "C(); }");
}
void test_insert_insideIdentifier() {
// "f() => cob;"
// "f() => cow.b;"
- assertParse("f() => co", "", "w.", "b;");
+ _assertParse("f() => co", "", "w.", "b;");
}
void test_insert_newIdentifier1() {
// "f() => a; c;"
// "f() => a; b c;"
- assertParse("f() => a;", "", " b", " c;");
+ _assertParse("f() => a;", "", " b", " c;");
}
void test_insert_newIdentifier2() {
// "f() => a; c;"
// "f() => a;b c;"
- assertParse("f() => a;", "", "b", " c;");
+ _assertParse("f() => a;", "", "b", " c;");
}
void test_insert_newIdentifier3() {
// "/** A simple function. */ f() => a; c;"
// "/** A simple function. */ f() => a; b c;"
- assertParse("/** A simple function. */ f() => a;", "", " b", " c;");
+ _assertParse("/** A simple function. */ f() => a;", "", " b", " c;");
}
void test_insert_newIdentifier4() {
// "/** An [A]. */ class A {} class B { m() { return 1; } }"
// "/** An [A]. */ class A {} class B { m() { return 1 + 2; } }"
- assertParse("/** An [A]. */ class A {} class B { m() { return 1", "", " + 2", "; } }");
+ _assertParse("/** An [A]. */ class A {} class B { m() { return 1", "", " + 2", "; } }");
}
void test_insert_period() {
// "f() => a + b;"
// "f() => a + b.;"
- assertParse("f() => a + b", "", ".", ";");
+ _assertParse("f() => a + b", "", ".", ";");
}
void test_insert_period_betweenIdentifiers1() {
// "f() => a b;"
// "f() => a. b;"
- assertParse("f() => a", "", ".", " b;");
+ _assertParse("f() => a", "", ".", " b;");
}
void test_insert_period_betweenIdentifiers2() {
// "f() => a b;"
// "f() => a .b;"
- assertParse("f() => a ", "", ".", "b;");
+ _assertParse("f() => a ", "", ".", "b;");
}
void test_insert_period_betweenIdentifiers3() {
// "f() => a b;"
// "f() => a . b;"
- assertParse("f() => a ", "", ".", " b;");
+ _assertParse("f() => a ", "", ".", " b;");
}
void test_insert_period_insideExistingIdentifier() {
// "f() => ab;"
// "f() => a.b;"
- assertParse("f() => a", "", ".", "b;");
+ _assertParse("f() => a", "", ".", "b;");
}
void test_insert_periodAndIdentifier() {
// "f() => a + b;"
// "f() => a + b.x;"
- assertParse("f() => a + b", "", ".x", ";");
+ _assertParse("f() => a + b", "", ".x", ";");
}
void test_insert_simpleToComplexExression() {
// "/** An [A]. */ class A {} class B { m() => 1; }"
// "/** An [A]. */ class A {} class B { m() => 1 + 2; }"
- assertParse("/** An [A]. */ class A {} class B { m() => 1", "", " + 2", "; }");
+ _assertParse("/** An [A]. */ class A {} class B { m() => 1", "", " + 2", "; }");
}
void test_insert_whitespace_end() {
// "f() => a + b;"
// "f() => a + b; "
- assertParse("f() => a + b;", "", " ", "");
+ _assertParse("f() => a + b;", "", " ", "");
}
void test_insert_whitespace_end_multiple() {
// "f() => a + b;"
// "f() => a + b; "
- assertParse("f() => a + b;", "", " ", "");
+ _assertParse("f() => a + b;", "", " ", "");
}
void test_insert_whitespace_middle() {
// "f() => a + b;"
// "f() => a + b;"
- assertParse("f() => a", "", " ", " + b;");
+ _assertParse("f() => a", "", " ", " + b;");
}
void test_replace_identifier_beginning() {
// "f() => bell + b;"
// "f() => fell + b;"
- assertParse("f() => ", "b", "f", "ell + b;");
+ _assertParse("f() => ", "b", "f", "ell + b;");
}
void test_replace_identifier_end() {
// "f() => bell + b;"
// "f() => belt + b;"
- assertParse("f() => bel", "l", "t", " + b;");
+ _assertParse("f() => bel", "l", "t", " + b;");
}
void test_replace_identifier_middle() {
// "f() => first + b;"
// "f() => frost + b;"
- assertParse("f() => f", "ir", "ro", "st + b;");
+ _assertParse("f() => f", "ir", "ro", "st + b;");
}
void test_replace_multiple_partialFirstAndLast() {
// "f() => aa + bb;"
// "f() => ab * ab;"
- assertParse("f() => a", "a + b", "b * a", "b;");
+ _assertParse("f() => a", "a + b", "b * a", "b;");
}
void test_replace_operator_oneForMany() {
// "f() => a + b;"
// "f() => a * c - b;"
- assertParse("f() => a ", "+", "* c -", " b;");
+ _assertParse("f() => a ", "+", "* c -", " b;");
}
void test_replace_operator_oneForOne() {
// "f() => a + b;"
// "f() => a * b;"
- assertParse("f() => a ", "+", "*", " b;");
+ _assertParse("f() => a ", "+", "*", " b;");
}
/**
@@ -9481,7 +9484,7 @@
* @param added the text that was added to the modified contents
* @param suffix the unchanged text after the edit region
*/
- void assertParse(String prefix, String removed, String added, String suffix) {
+ void _assertParse(String prefix, String removed, String added, String suffix) {
//
// Compute the information needed to perform the test.
//
@@ -11728,195 +11731,4 @@
RecoveryParserTest.dartSuite();
ResolutionCopierTest.dartSuite();
SimpleParserTest.dartSuite();
-}
-Map<String, MethodTrampoline> _methodTable_Parser = <String, MethodTrampoline> {
- 'parseCompilationUnit_1': new MethodTrampoline(1, (Parser target, arg0) => target.parseCompilationUnit(arg0)),
- 'parseExpression_1': new MethodTrampoline(1, (Parser target, arg0) => target.parseExpression(arg0)),
- 'parseStatement_1': new MethodTrampoline(1, (Parser target, arg0) => target.parseStatement(arg0)),
- 'parseStatements_1': new MethodTrampoline(1, (Parser target, arg0) => target.parseStatements(arg0)),
- 'parseAnnotation_0': new MethodTrampoline(0, (Parser target) => target.parseAnnotation()),
- 'parseArgument_0': new MethodTrampoline(0, (Parser target) => target.parseArgument()),
- 'parseArgumentList_0': new MethodTrampoline(0, (Parser target) => target.parseArgumentList()),
- 'parseBitwiseOrExpression_0': new MethodTrampoline(0, (Parser target) => target.parseBitwiseOrExpression()),
- 'parseBlock_0': new MethodTrampoline(0, (Parser target) => target.parseBlock()),
- 'parseClassMember_1': new MethodTrampoline(1, (Parser target, arg0) => target.parseClassMember(arg0)),
- 'parseCompilationUnit_0': new MethodTrampoline(0, (Parser target) => target.parseCompilationUnit2()),
- 'parseConditionalExpression_0': new MethodTrampoline(0, (Parser target) => target.parseConditionalExpression()),
- 'parseConstructorName_0': new MethodTrampoline(0, (Parser target) => target.parseConstructorName()),
- 'parseExpression_0': new MethodTrampoline(0, (Parser target) => target.parseExpression2()),
- 'parseExpressionWithoutCascade_0': new MethodTrampoline(0, (Parser target) => target.parseExpressionWithoutCascade()),
- 'parseExtendsClause_0': new MethodTrampoline(0, (Parser target) => target.parseExtendsClause()),
- 'parseFormalParameterList_0': new MethodTrampoline(0, (Parser target) => target.parseFormalParameterList()),
- 'parseFunctionExpression_0': new MethodTrampoline(0, (Parser target) => target.parseFunctionExpression()),
- 'parseImplementsClause_0': new MethodTrampoline(0, (Parser target) => target.parseImplementsClause()),
- 'parseLabel_0': new MethodTrampoline(0, (Parser target) => target.parseLabel()),
- 'parseLibraryIdentifier_0': new MethodTrampoline(0, (Parser target) => target.parseLibraryIdentifier()),
- 'parseLogicalOrExpression_0': new MethodTrampoline(0, (Parser target) => target.parseLogicalOrExpression()),
- 'parseMapLiteralEntry_0': new MethodTrampoline(0, (Parser target) => target.parseMapLiteralEntry()),
- 'parseNormalFormalParameter_0': new MethodTrampoline(0, (Parser target) => target.parseNormalFormalParameter()),
- 'parsePrefixedIdentifier_0': new MethodTrampoline(0, (Parser target) => target.parsePrefixedIdentifier()),
- 'parseReturnType_0': new MethodTrampoline(0, (Parser target) => target.parseReturnType()),
- 'parseSimpleIdentifier_0': new MethodTrampoline(0, (Parser target) => target.parseSimpleIdentifier()),
- 'parseStatement_0': new MethodTrampoline(0, (Parser target) => target.parseStatement2()),
- 'parseStringLiteral_0': new MethodTrampoline(0, (Parser target) => target.parseStringLiteral()),
- 'parseTypeArgumentList_0': new MethodTrampoline(0, (Parser target) => target.parseTypeArgumentList()),
- 'parseTypeName_0': new MethodTrampoline(0, (Parser target) => target.parseTypeName()),
- 'parseTypeParameter_0': new MethodTrampoline(0, (Parser target) => target.parseTypeParameter()),
- 'parseTypeParameterList_0': new MethodTrampoline(0, (Parser target) => target.parseTypeParameterList()),
- 'parseWithClause_0': new MethodTrampoline(0, (Parser target) => target.parseWithClause()),
- 'advance_0': new MethodTrampoline(0, (Parser target) => target.advance()),
- 'appendScalarValue_5': new MethodTrampoline(5, (Parser target, arg0, arg1, arg2, arg3, arg4) => target.appendScalarValue(arg0, arg1, arg2, arg3, arg4)),
- 'computeStringValue_3': new MethodTrampoline(3, (Parser target, arg0, arg1, arg2) => target.computeStringValue(arg0, arg1, arg2)),
- 'convertToFunctionDeclaration_1': new MethodTrampoline(1, (Parser target, arg0) => target.convertToFunctionDeclaration(arg0)),
- 'couldBeStartOfCompilationUnitMember_0': new MethodTrampoline(0, (Parser target) => target.couldBeStartOfCompilationUnitMember()),
- 'createSyntheticIdentifier_0': new MethodTrampoline(0, (Parser target) => target.createSyntheticIdentifier()),
- 'createSyntheticKeyword_1': new MethodTrampoline(1, (Parser target, arg0) => target.createSyntheticKeyword(arg0)),
- 'createSyntheticStringLiteral_0': new MethodTrampoline(0, (Parser target) => target.createSyntheticStringLiteral()),
- 'createSyntheticToken_1': new MethodTrampoline(1, (Parser target, arg0) => target.createSyntheticToken(arg0)),
- 'ensureAssignable_1': new MethodTrampoline(1, (Parser target, arg0) => target.ensureAssignable(arg0)),
- 'expect_1': new MethodTrampoline(1, (Parser target, arg0) => target.expect(arg0)),
- 'expectKeyword_1': new MethodTrampoline(1, (Parser target, arg0) => target.expectKeyword(arg0)),
- 'expectSemicolon_0': new MethodTrampoline(0, (Parser target) => target.expectSemicolon()),
- 'findRange_2': new MethodTrampoline(2, (Parser target, arg0, arg1) => target.findRange(arg0, arg1)),
- 'getCodeBlockRanges_1': new MethodTrampoline(1, (Parser target, arg0) => target.getCodeBlockRanges(arg0)),
- 'getEndToken_1': new MethodTrampoline(1, (Parser target, arg0) => target.getEndToken(arg0)),
- 'injectToken_1': new MethodTrampoline(1, (Parser target, arg0) => target.injectToken(arg0)),
- 'isFunctionDeclaration_0': new MethodTrampoline(0, (Parser target) => target.isFunctionDeclaration()),
- 'isFunctionExpression_1': new MethodTrampoline(1, (Parser target, arg0) => target.isFunctionExpression(arg0)),
- 'isHexDigit_1': new MethodTrampoline(1, (Parser target, arg0) => target.isHexDigit(arg0)),
- 'isInitializedVariableDeclaration_0': new MethodTrampoline(0, (Parser target) => target.isInitializedVariableDeclaration()),
- 'isLinkText_2': new MethodTrampoline(2, (Parser target, arg0, arg1) => target.isLinkText(arg0, arg1)),
- 'isOperator_1': new MethodTrampoline(1, (Parser target, arg0) => target.isOperator(arg0)),
- 'isSwitchMember_0': new MethodTrampoline(0, (Parser target) => target.isSwitchMember()),
- 'isTypedIdentifier_1': new MethodTrampoline(1, (Parser target, arg0) => target.isTypedIdentifier(arg0)),
- 'lexicallyFirst_1': new MethodTrampoline(1, (Parser target, arg0) => target.lexicallyFirst(arg0)),
- 'lockErrorListener_0': new MethodTrampoline(0, (Parser target) => target.lockErrorListener()),
- 'matches_1': new MethodTrampoline(1, (Parser target, arg0) => target.matches(arg0)),
- 'matchesAny_2': new MethodTrampoline(2, (Parser target, arg0, arg1) => target.matchesAny(arg0, arg1)),
- 'matchesIdentifier_0': new MethodTrampoline(0, (Parser target) => target.matchesIdentifier()),
- 'matchesKeyword_1': new MethodTrampoline(1, (Parser target, arg0) => target.matchesKeyword(arg0)),
- 'matchesString_1': new MethodTrampoline(1, (Parser target, arg0) => target.matchesString(arg0)),
- 'optional_1': new MethodTrampoline(1, (Parser target, arg0) => target.optional(arg0)),
- 'parseAdditiveExpression_0': new MethodTrampoline(0, (Parser target) => target.parseAdditiveExpression()),
- 'parseArgumentDefinitionTest_0': new MethodTrampoline(0, (Parser target) => target.parseArgumentDefinitionTest()),
- 'parseAssertStatement_0': new MethodTrampoline(0, (Parser target) => target.parseAssertStatement()),
- 'parseAssignableExpression_1': new MethodTrampoline(1, (Parser target, arg0) => target.parseAssignableExpression(arg0)),
- 'parseAssignableSelector_2': new MethodTrampoline(2, (Parser target, arg0, arg1) => target.parseAssignableSelector(arg0, arg1)),
- 'parseBitwiseAndExpression_0': new MethodTrampoline(0, (Parser target) => target.parseBitwiseAndExpression()),
- 'parseBitwiseXorExpression_0': new MethodTrampoline(0, (Parser target) => target.parseBitwiseXorExpression()),
- 'parseBreakStatement_0': new MethodTrampoline(0, (Parser target) => target.parseBreakStatement()),
- 'parseCascadeSection_0': new MethodTrampoline(0, (Parser target) => target.parseCascadeSection()),
- 'parseClassDeclaration_2': new MethodTrampoline(2, (Parser target, arg0, arg1) => target.parseClassDeclaration(arg0, arg1)),
- 'parseClassMembers_2': new MethodTrampoline(2, (Parser target, arg0, arg1) => target.parseClassMembers(arg0, arg1)),
- 'parseClassTypeAlias_3': new MethodTrampoline(3, (Parser target, arg0, arg1, arg2) => target.parseClassTypeAlias(arg0, arg1, arg2)),
- 'parseCombinators_0': new MethodTrampoline(0, (Parser target) => target.parseCombinators()),
- 'parseCommentAndMetadata_0': new MethodTrampoline(0, (Parser target) => target.parseCommentAndMetadata()),
- 'parseCommentReference_2': new MethodTrampoline(2, (Parser target, arg0, arg1) => target.parseCommentReference(arg0, arg1)),
- 'parseCommentReferences_1': new MethodTrampoline(1, (Parser target, arg0) => target.parseCommentReferences(arg0)),
- 'parseCompilationUnitMember_1': new MethodTrampoline(1, (Parser target, arg0) => target.parseCompilationUnitMember(arg0)),
- 'parseConstExpression_0': new MethodTrampoline(0, (Parser target) => target.parseConstExpression()),
- 'parseConstructor_8': new MethodTrampoline(8, (Parser target, arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7) => target.parseConstructor(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7)),
- 'parseConstructorFieldInitializer_0': new MethodTrampoline(0, (Parser target) => target.parseConstructorFieldInitializer()),
- 'parseContinueStatement_0': new MethodTrampoline(0, (Parser target) => target.parseContinueStatement()),
- 'parseDirective_1': new MethodTrampoline(1, (Parser target, arg0) => target.parseDirective(arg0)),
- 'parseDocumentationComment_0': new MethodTrampoline(0, (Parser target) => target.parseDocumentationComment()),
- 'parseDoStatement_0': new MethodTrampoline(0, (Parser target) => target.parseDoStatement()),
- 'parseEmptyStatement_0': new MethodTrampoline(0, (Parser target) => target.parseEmptyStatement()),
- 'parseEqualityExpression_0': new MethodTrampoline(0, (Parser target) => target.parseEqualityExpression()),
- 'parseExportDirective_1': new MethodTrampoline(1, (Parser target, arg0) => target.parseExportDirective(arg0)),
- 'parseExpressionList_0': new MethodTrampoline(0, (Parser target) => target.parseExpressionList()),
- 'parseFinalConstVarOrType_1': new MethodTrampoline(1, (Parser target, arg0) => target.parseFinalConstVarOrType(arg0)),
- 'parseFormalParameter_1': new MethodTrampoline(1, (Parser target, arg0) => target.parseFormalParameter(arg0)),
- 'parseForStatement_0': new MethodTrampoline(0, (Parser target) => target.parseForStatement()),
- 'parseFunctionBody_3': new MethodTrampoline(3, (Parser target, arg0, arg1, arg2) => target.parseFunctionBody(arg0, arg1, arg2)),
- 'parseFunctionDeclaration_3': new MethodTrampoline(3, (Parser target, arg0, arg1, arg2) => target.parseFunctionDeclaration(arg0, arg1, arg2)),
- 'parseFunctionDeclarationStatement_0': new MethodTrampoline(0, (Parser target) => target.parseFunctionDeclarationStatement()),
- 'parseFunctionDeclarationStatementAfterReturnType_2': new MethodTrampoline(2, (Parser target, arg0, arg1) => target.parseFunctionDeclarationStatementAfterReturnType(arg0, arg1)),
- 'parseFunctionTypeAlias_2': new MethodTrampoline(2, (Parser target, arg0, arg1) => target.parseFunctionTypeAlias(arg0, arg1)),
- 'parseGetter_4': new MethodTrampoline(4, (Parser target, arg0, arg1, arg2, arg3) => target.parseGetter(arg0, arg1, arg2, arg3)),
- 'parseIdentifierList_0': new MethodTrampoline(0, (Parser target) => target.parseIdentifierList()),
- 'parseIfStatement_0': new MethodTrampoline(0, (Parser target) => target.parseIfStatement()),
- 'parseImportDirective_1': new MethodTrampoline(1, (Parser target, arg0) => target.parseImportDirective(arg0)),
- 'parseInitializedIdentifierList_4': new MethodTrampoline(4, (Parser target, arg0, arg1, arg2, arg3) => target.parseInitializedIdentifierList(arg0, arg1, arg2, arg3)),
- 'parseInstanceCreationExpression_1': new MethodTrampoline(1, (Parser target, arg0) => target.parseInstanceCreationExpression(arg0)),
- 'parseLibraryDirective_1': new MethodTrampoline(1, (Parser target, arg0) => target.parseLibraryDirective(arg0)),
- 'parseLibraryName_2': new MethodTrampoline(2, (Parser target, arg0, arg1) => target.parseLibraryName(arg0, arg1)),
- 'parseListLiteral_2': new MethodTrampoline(2, (Parser target, arg0, arg1) => target.parseListLiteral(arg0, arg1)),
- 'parseListOrMapLiteral_1': new MethodTrampoline(1, (Parser target, arg0) => target.parseListOrMapLiteral(arg0)),
- 'parseLogicalAndExpression_0': new MethodTrampoline(0, (Parser target) => target.parseLogicalAndExpression()),
- 'parseMapLiteral_2': new MethodTrampoline(2, (Parser target, arg0, arg1) => target.parseMapLiteral(arg0, arg1)),
- 'parseMethodDeclarationAfterParameters_6': new MethodTrampoline(6, (Parser target, arg0, arg1, arg2, arg3, arg4, arg5) => target.parseMethodDeclarationAfterParameters(arg0, arg1, arg2, arg3, arg4, arg5)),
- 'parseMethodDeclarationAfterReturnType_4': new MethodTrampoline(4, (Parser target, arg0, arg1, arg2, arg3) => target.parseMethodDeclarationAfterReturnType(arg0, arg1, arg2, arg3)),
- 'parseModifiers_0': new MethodTrampoline(0, (Parser target) => target.parseModifiers()),
- 'parseMultiplicativeExpression_0': new MethodTrampoline(0, (Parser target) => target.parseMultiplicativeExpression()),
- 'parseNativeClause_0': new MethodTrampoline(0, (Parser target) => target.parseNativeClause()),
- 'parseNewExpression_0': new MethodTrampoline(0, (Parser target) => target.parseNewExpression()),
- 'parseNonLabeledStatement_0': new MethodTrampoline(0, (Parser target) => target.parseNonLabeledStatement()),
- 'parseOperator_3': new MethodTrampoline(3, (Parser target, arg0, arg1, arg2) => target.parseOperator(arg0, arg1, arg2)),
- 'parseOptionalReturnType_0': new MethodTrampoline(0, (Parser target) => target.parseOptionalReturnType()),
- 'parsePartDirective_1': new MethodTrampoline(1, (Parser target, arg0) => target.parsePartDirective(arg0)),
- 'parsePostfixExpression_0': new MethodTrampoline(0, (Parser target) => target.parsePostfixExpression()),
- 'parsePrimaryExpression_0': new MethodTrampoline(0, (Parser target) => target.parsePrimaryExpression()),
- 'parseRedirectingConstructorInvocation_0': new MethodTrampoline(0, (Parser target) => target.parseRedirectingConstructorInvocation()),
- 'parseRelationalExpression_0': new MethodTrampoline(0, (Parser target) => target.parseRelationalExpression()),
- 'parseRethrowExpression_0': new MethodTrampoline(0, (Parser target) => target.parseRethrowExpression()),
- 'parseReturnStatement_0': new MethodTrampoline(0, (Parser target) => target.parseReturnStatement()),
- 'parseSetter_4': new MethodTrampoline(4, (Parser target, arg0, arg1, arg2, arg3) => target.parseSetter(arg0, arg1, arg2, arg3)),
- 'parseShiftExpression_0': new MethodTrampoline(0, (Parser target) => target.parseShiftExpression()),
- 'parseStatementList_0': new MethodTrampoline(0, (Parser target) => target.parseStatementList()),
- 'parseStringInterpolation_1': new MethodTrampoline(1, (Parser target, arg0) => target.parseStringInterpolation(arg0)),
- 'parseSuperConstructorInvocation_0': new MethodTrampoline(0, (Parser target) => target.parseSuperConstructorInvocation()),
- 'parseSwitchStatement_0': new MethodTrampoline(0, (Parser target) => target.parseSwitchStatement()),
- 'parseSymbolLiteral_0': new MethodTrampoline(0, (Parser target) => target.parseSymbolLiteral()),
- 'parseThrowExpression_0': new MethodTrampoline(0, (Parser target) => target.parseThrowExpression()),
- 'parseThrowExpressionWithoutCascade_0': new MethodTrampoline(0, (Parser target) => target.parseThrowExpressionWithoutCascade()),
- 'parseTryStatement_0': new MethodTrampoline(0, (Parser target) => target.parseTryStatement()),
- 'parseTypeAlias_1': new MethodTrampoline(1, (Parser target, arg0) => target.parseTypeAlias(arg0)),
- 'parseUnaryExpression_0': new MethodTrampoline(0, (Parser target) => target.parseUnaryExpression()),
- 'parseVariableDeclaration_0': new MethodTrampoline(0, (Parser target) => target.parseVariableDeclaration()),
- 'parseVariableDeclarationListAfterMetadata_1': new MethodTrampoline(1, (Parser target, arg0) => target.parseVariableDeclarationListAfterMetadata(arg0)),
- 'parseVariableDeclarationListAfterType_3': new MethodTrampoline(3, (Parser target, arg0, arg1, arg2) => target.parseVariableDeclarationListAfterType(arg0, arg1, arg2)),
- 'parseVariableDeclarationStatementAfterMetadata_1': new MethodTrampoline(1, (Parser target, arg0) => target.parseVariableDeclarationStatementAfterMetadata(arg0)),
- 'parseVariableDeclarationStatementAfterType_3': new MethodTrampoline(3, (Parser target, arg0, arg1, arg2) => target.parseVariableDeclarationStatementAfterType(arg0, arg1, arg2)),
- 'parseWhileStatement_0': new MethodTrampoline(0, (Parser target) => target.parseWhileStatement()),
- 'peek_0': new MethodTrampoline(0, (Parser target) => target.peek()),
- 'peekAt_1': new MethodTrampoline(1, (Parser target, arg0) => target.peekAt(arg0)),
- 'reportError_1': new MethodTrampoline(1, (Parser target, arg0) => target.reportError(arg0)),
- 'reportErrorForCurrentToken_2': new MethodTrampoline(2, (Parser target, arg0, arg1) => target.reportErrorForCurrentToken(arg0, arg1)),
- 'reportErrorForNode_3': new MethodTrampoline(3, (Parser target, arg0, arg1, arg2) => target.reportErrorForNode(arg0, arg1, arg2)),
- 'reportErrorForToken_3': new MethodTrampoline(3, (Parser target, arg0, arg1, arg2) => target.reportErrorForToken(arg0, arg1, arg2)),
- 'skipBlock_0': new MethodTrampoline(0, (Parser target) => target.skipBlock()),
- 'skipFinalConstVarOrType_1': new MethodTrampoline(1, (Parser target, arg0) => target.skipFinalConstVarOrType(arg0)),
- 'skipFormalParameterList_1': new MethodTrampoline(1, (Parser target, arg0) => target.skipFormalParameterList(arg0)),
- 'skipPastMatchingToken_1': new MethodTrampoline(1, (Parser target, arg0) => target.skipPastMatchingToken(arg0)),
- 'skipPrefixedIdentifier_1': new MethodTrampoline(1, (Parser target, arg0) => target.skipPrefixedIdentifier(arg0)),
- 'skipReturnType_1': new MethodTrampoline(1, (Parser target, arg0) => target.skipReturnType(arg0)),
- 'skipSimpleIdentifier_1': new MethodTrampoline(1, (Parser target, arg0) => target.skipSimpleIdentifier(arg0)),
- 'skipStringInterpolation_1': new MethodTrampoline(1, (Parser target, arg0) => target.skipStringInterpolation(arg0)),
- 'skipStringLiteral_1': new MethodTrampoline(1, (Parser target, arg0) => target.skipStringLiteral(arg0)),
- 'skipTypeArgumentList_1': new MethodTrampoline(1, (Parser target, arg0) => target.skipTypeArgumentList(arg0)),
- 'skipTypeName_1': new MethodTrampoline(1, (Parser target, arg0) => target.skipTypeName(arg0)),
- 'skipTypeParameterList_1': new MethodTrampoline(1, (Parser target, arg0) => target.skipTypeParameterList(arg0)),
- 'tokenMatches_2': new MethodTrampoline(2, (Parser target, arg0, arg1) => target.tokenMatches(arg0, arg1)),
- 'tokenMatchesIdentifier_1': new MethodTrampoline(1, (Parser target, arg0) => target.tokenMatchesIdentifier(arg0)),
- 'tokenMatchesKeyword_2': new MethodTrampoline(2, (Parser target, arg0, arg1) => target.tokenMatchesKeyword(arg0, arg1)),
- 'translateCharacter_3': new MethodTrampoline(3, (Parser target, arg0, arg1, arg2) => target.translateCharacter(arg0, arg1, arg2)),
- 'unlockErrorListener_0': new MethodTrampoline(0, (Parser target) => target.unlockErrorListener()),
- 'validateFormalParameterList_1': new MethodTrampoline(1, (Parser target, arg0) => target.validateFormalParameterList(arg0)),
- 'validateModifiersForClass_1': new MethodTrampoline(1, (Parser target, arg0) => target.validateModifiersForClass(arg0)),
- 'validateModifiersForConstructor_1': new MethodTrampoline(1, (Parser target, arg0) => target.validateModifiersForConstructor(arg0)),
- 'validateModifiersForField_1': new MethodTrampoline(1, (Parser target, arg0) => target.validateModifiersForField(arg0)),
- 'validateModifiersForFunctionDeclarationStatement_1': new MethodTrampoline(1, (Parser target, arg0) => target.validateModifiersForFunctionDeclarationStatement(arg0)),
- 'validateModifiersForGetterOrSetterOrMethod_1': new MethodTrampoline(1, (Parser target, arg0) => target.validateModifiersForGetterOrSetterOrMethod(arg0)),
- 'validateModifiersForOperator_1': new MethodTrampoline(1, (Parser target, arg0) => target.validateModifiersForOperator(arg0)),
- 'validateModifiersForTopLevelDeclaration_1': new MethodTrampoline(1, (Parser target, arg0) => target.validateModifiersForTopLevelDeclaration(arg0)),
- 'validateModifiersForTopLevelFunction_1': new MethodTrampoline(1, (Parser target, arg0) => target.validateModifiersForTopLevelFunction(arg0)),
- 'validateModifiersForTopLevelVariable_1': new MethodTrampoline(1, (Parser target, arg0) => target.validateModifiersForTopLevelVariable(arg0)),
- 'validateModifiersForTypedef_1': new MethodTrampoline(1, (Parser target, arg0) => target.validateModifiersForTypedef(arg0)),};
-
-
-Object invokeParserMethodImpl(Parser parser, String methodName, List<Object> objects, Token tokenStream) {
- parser.currentToken = tokenStream;
- MethodTrampoline method = _methodTable_Parser['${methodName}_${objects.length}'];
- return method.invoke(parser, objects);
-}
+}
\ No newline at end of file
diff --git a/pkg/analyzer/test/generated/resolver_test.dart b/pkg/analyzer/test/generated/resolver_test.dart
index 702dae0..d49726d 100644
--- a/pkg/analyzer/test/generated/resolver_test.dart
+++ b/pkg/analyzer/test/generated/resolver_test.dart
@@ -31,7 +31,7 @@
void fail_propagatedReturnType_functionExpression() {
// TODO(scheglov) disabled because we don't resolve function expression
String code = EngineTestCase.createSource(["main() {", " var v = (() {return 42;})();", "}"]);
- check_propagatedReturnType(code, typeProvider.dynamicType, typeProvider.intType);
+ _check_propagatedReturnType(code, typeProvider.dynamicType, typeProvider.intType);
}
void test_as() {
@@ -148,14 +148,14 @@
verify([source]);
CompilationUnit unit = resolveCompilationUnit(source, library);
// k
- Type2 intType = typeProvider.intType;
+ DartType intType = typeProvider.intType;
FormalParameter kParameter = EngineTestCase.findNode(unit, code, "k, ", (node) => node is SimpleFormalParameter);
JUnitTestCase.assertSame(intType, kParameter.identifier.propagatedType);
SimpleIdentifier kIdentifier = EngineTestCase.findNode(unit, code, "k;", (node) => node is SimpleIdentifier);
JUnitTestCase.assertSame(intType, kIdentifier.propagatedType);
JUnitTestCase.assertSame(typeProvider.dynamicType, kIdentifier.staticType);
// v
- Type2 stringType = typeProvider.stringType;
+ DartType stringType = typeProvider.stringType;
FormalParameter vParameter = EngineTestCase.findNode(unit, code, "v)", (node) => node is SimpleFormalParameter);
JUnitTestCase.assertSame(stringType, vParameter.identifier.propagatedType);
SimpleIdentifier vIdentifier = EngineTestCase.findNode(unit, code, "v;", (node) => node is SimpleIdentifier);
@@ -178,11 +178,11 @@
verify([source]);
CompilationUnit unit = resolveCompilationUnit(source, library);
// k
- Type2 intType = typeProvider.intType;
+ DartType intType = typeProvider.intType;
FormalParameter kParameter = EngineTestCase.findNode(unit, code, "k, ", (node) => node is SimpleFormalParameter);
JUnitTestCase.assertSame(intType, kParameter.identifier.propagatedType);
// v
- Type2 stringType = typeProvider.stringType;
+ DartType stringType = typeProvider.stringType;
FormalParameter vParameter = EngineTestCase.findNode(unit, code, "v)", (node) => node is SimpleFormalParameter);
JUnitTestCase.assertSame(stringType, vParameter.identifier.propagatedType);
}
@@ -200,8 +200,8 @@
verify([source]);
CompilationUnit unit = resolveCompilationUnit(source, library);
// v
- Type2 dynamicType = typeProvider.dynamicType;
- Type2 stringType = typeProvider.stringType;
+ DartType dynamicType = typeProvider.dynamicType;
+ DartType stringType = typeProvider.stringType;
FormalParameter vParameter = EngineTestCase.findNode(unit, code, "v)", (node) => node is FormalParameter);
JUnitTestCase.assertSame(stringType, vParameter.identifier.propagatedType);
JUnitTestCase.assertSame(dynamicType, vParameter.identifier.staticType);
@@ -226,7 +226,7 @@
verify([source]);
CompilationUnit unit = resolveCompilationUnit(source, library);
// v
- Type2 intType = typeProvider.intType;
+ DartType intType = typeProvider.intType;
FormalParameter vParameter = EngineTestCase.findNode(unit, code, "v)", (node) => node is SimpleFormalParameter);
JUnitTestCase.assertSame(null, vParameter.identifier.propagatedType);
JUnitTestCase.assertSame(intType, vParameter.identifier.staticType);
@@ -251,7 +251,7 @@
verify([source]);
CompilationUnit unit = resolveCompilationUnit(source, library);
// v
- Type2 stringType = typeProvider.stringType;
+ DartType stringType = typeProvider.stringType;
FormalParameter vParameter = EngineTestCase.findNode(unit, code, "v)", (node) => node is SimpleFormalParameter);
JUnitTestCase.assertSame(stringType, vParameter.identifier.propagatedType);
JUnitTestCase.assertSame(typeProvider.objectType, vParameter.identifier.staticType);
@@ -655,7 +655,7 @@
SimpleIdentifier identifier = statement.expression as SimpleIdentifier;
InterfaceType propagatedType = identifier.propagatedType as InterfaceType;
JUnitTestCase.assertSame(typeProvider.mapType.element, propagatedType.element);
- List<Type2> typeArguments = propagatedType.typeArguments;
+ List<DartType> typeArguments = propagatedType.typeArguments;
EngineTestCase.assertLength(2, typeArguments);
JUnitTestCase.assertSame(typeProvider.dynamicType, typeArguments[0]);
JUnitTestCase.assertSame(typeProvider.dynamicType, typeArguments[1]);
@@ -677,7 +677,7 @@
SimpleIdentifier identifier = statement.expression as SimpleIdentifier;
InterfaceType propagatedType = identifier.propagatedType as InterfaceType;
JUnitTestCase.assertSame(typeProvider.mapType.element, propagatedType.element);
- List<Type2> typeArguments = propagatedType.typeArguments;
+ List<DartType> typeArguments = propagatedType.typeArguments;
EngineTestCase.assertLength(2, typeArguments);
JUnitTestCase.assertSame(typeProvider.stringType, typeArguments[0]);
JUnitTestCase.assertSame(typeProvider.intType, typeArguments[1]);
@@ -685,12 +685,12 @@
void test_propagatedReturnType_function_hasReturnType_returnsNull() {
String code = EngineTestCase.createSource(["String f() => null;", "main() {", " var v = f();", "}"]);
- check_propagatedReturnType(code, typeProvider.dynamicType, typeProvider.stringType);
+ _check_propagatedReturnType(code, typeProvider.dynamicType, typeProvider.stringType);
}
void test_propagatedReturnType_function_lessSpecificStaticReturnType() {
String code = EngineTestCase.createSource(["Object f() => 42;", "main() {", " var v = f();", "}"]);
- check_propagatedReturnType(code, typeProvider.dynamicType, typeProvider.intType);
+ _check_propagatedReturnType(code, typeProvider.dynamicType, typeProvider.intType);
}
void test_propagatedReturnType_function_moreSpecificStaticReturnType() {
@@ -699,7 +699,7 @@
"main() {",
" var v = f(3);",
"}"]);
- check_propagatedReturnType(code, typeProvider.dynamicType, typeProvider.intType);
+ _check_propagatedReturnType(code, typeProvider.dynamicType, typeProvider.intType);
}
void test_propagatedReturnType_function_noReturnTypeName_blockBody_multipleReturns() {
@@ -711,7 +711,7 @@
"main() {",
" var v = f();",
"}"]);
- check_propagatedReturnType(code, typeProvider.dynamicType, typeProvider.numType);
+ _check_propagatedReturnType(code, typeProvider.dynamicType, typeProvider.numType);
}
void test_propagatedReturnType_function_noReturnTypeName_blockBody_oneReturn() {
@@ -723,17 +723,17 @@
"main() {",
" var v = f();",
"}"]);
- check_propagatedReturnType(code, typeProvider.dynamicType, typeProvider.intType);
+ _check_propagatedReturnType(code, typeProvider.dynamicType, typeProvider.intType);
}
void test_propagatedReturnType_function_noReturnTypeName_expressionBody() {
String code = EngineTestCase.createSource(["f() => 42;", "main() {", " var v = f();", "}"]);
- check_propagatedReturnType(code, typeProvider.dynamicType, typeProvider.intType);
+ _check_propagatedReturnType(code, typeProvider.dynamicType, typeProvider.intType);
}
void test_propagatedReturnType_localFunction() {
String code = EngineTestCase.createSource(["main() {", " f() => 42;", " var v = f();", "}"]);
- check_propagatedReturnType(code, typeProvider.dynamicType, typeProvider.intType);
+ _check_propagatedReturnType(code, typeProvider.dynamicType, typeProvider.intType);
}
void test_query() {
@@ -781,7 +781,7 @@
* @param code the code that assigns the value to the variable "v", no matter how. We check that
* "v" has expected static and propagated type.
*/
- void check_propagatedReturnType(String code, Type2 expectedStaticType, Type2 expectedPropagatedType) {
+ void _check_propagatedReturnType(String code, DartType expectedStaticType, DartType expectedPropagatedType) {
Source source = addSource(code);
LibraryElement library = resolve(source);
assertNoErrors(source);
@@ -4540,26 +4540,26 @@
}
void test_wrongNumberOfParametersForOperator_minus() {
- check_wrongNumberOfParametersForOperator("-", "");
- check_wrongNumberOfParametersForOperator("-", "a");
+ _check_wrongNumberOfParametersForOperator("-", "");
+ _check_wrongNumberOfParametersForOperator("-", "a");
}
void test_wrongNumberOfParametersForOperator1() {
- check_wrongNumberOfParametersForOperator1("<");
- check_wrongNumberOfParametersForOperator1(">");
- check_wrongNumberOfParametersForOperator1("<=");
- check_wrongNumberOfParametersForOperator1(">=");
- check_wrongNumberOfParametersForOperator1("+");
- check_wrongNumberOfParametersForOperator1("/");
- check_wrongNumberOfParametersForOperator1("~/");
- check_wrongNumberOfParametersForOperator1("*");
- check_wrongNumberOfParametersForOperator1("%");
- check_wrongNumberOfParametersForOperator1("|");
- check_wrongNumberOfParametersForOperator1("^");
- check_wrongNumberOfParametersForOperator1("&");
- check_wrongNumberOfParametersForOperator1("<<");
- check_wrongNumberOfParametersForOperator1(">>");
- check_wrongNumberOfParametersForOperator1("[]");
+ _check_wrongNumberOfParametersForOperator1("<");
+ _check_wrongNumberOfParametersForOperator1(">");
+ _check_wrongNumberOfParametersForOperator1("<=");
+ _check_wrongNumberOfParametersForOperator1(">=");
+ _check_wrongNumberOfParametersForOperator1("+");
+ _check_wrongNumberOfParametersForOperator1("/");
+ _check_wrongNumberOfParametersForOperator1("~/");
+ _check_wrongNumberOfParametersForOperator1("*");
+ _check_wrongNumberOfParametersForOperator1("%");
+ _check_wrongNumberOfParametersForOperator1("|");
+ _check_wrongNumberOfParametersForOperator1("^");
+ _check_wrongNumberOfParametersForOperator1("&");
+ _check_wrongNumberOfParametersForOperator1("<<");
+ _check_wrongNumberOfParametersForOperator1(">>");
+ _check_wrongNumberOfParametersForOperator1("[]");
}
void test_wrongNumberOfParametersForSetter() {
@@ -4569,7 +4569,7 @@
verify([source]);
}
- void check_wrongNumberOfParametersForOperator(String name, String parameters) {
+ void _check_wrongNumberOfParametersForOperator(String name, String parameters) {
Source source = addSource(EngineTestCase.createSource(["class A {", " operator ${name}(${parameters}) {}", "}"]));
resolve(source);
assertNoErrors(source);
@@ -4577,8 +4577,8 @@
reset();
}
- void check_wrongNumberOfParametersForOperator1(String name) {
- check_wrongNumberOfParametersForOperator(name, "a");
+ void _check_wrongNumberOfParametersForOperator1(String name) {
+ _check_wrongNumberOfParametersForOperator(name, "a");
}
static dartSuite() {
@@ -5868,12 +5868,13 @@
*/
Library _library;
+ @override
void setUp() {
_sourceFactory = new SourceFactory([new FileUriResolver()]);
_analysisContext = new AnalysisContextImpl();
_analysisContext.sourceFactory = _sourceFactory;
_errorListener = new GatheringErrorListener();
- _library = createLibrary("/lib.dart");
+ _library = _createLibrary("/lib.dart");
}
void test_getExplicitlyImportsCore() {
@@ -5892,8 +5893,8 @@
}
void test_getImportsAndExports() {
- _library.importedLibraries = <Library> [createLibrary("/imported.dart")];
- _library.exportedLibraries = <Library> [createLibrary("/exported.dart")];
+ _library.importedLibraries = <Library> [_createLibrary("/imported.dart")];
+ _library.exportedLibraries = <Library> [_createLibrary("/exported.dart")];
EngineTestCase.assertLength(2, _library.importsAndExports);
_errorListener.assertNoErrors();
}
@@ -5917,7 +5918,7 @@
}
void test_setExportedLibraries() {
- Library exportLibrary = createLibrary("/exported.dart");
+ Library exportLibrary = _createLibrary("/exported.dart");
_library.exportedLibraries = <Library> [exportLibrary];
List<Library> exports = _library.exports;
EngineTestCase.assertLength(1, exports);
@@ -5926,7 +5927,7 @@
}
void test_setImportedLibraries() {
- Library importLibrary = createLibrary("/imported.dart");
+ Library importLibrary = _createLibrary("/imported.dart");
_library.importedLibraries = <Library> [importLibrary];
List<Library> imports = _library.imports;
EngineTestCase.assertLength(1, imports);
@@ -5940,7 +5941,7 @@
JUnitTestCase.assertSame(element, _library.libraryElement);
}
- Library createLibrary(String definingCompilationUnitPath) => new Library(_analysisContext, _errorListener, new FileBasedSource.con1(FileUtilities2.createFile(definingCompilationUnitPath)));
+ Library _createLibrary(String definingCompilationUnitPath) => new Library(_analysisContext, _errorListener, new FileBasedSource.con1(FileUtilities2.createFile(definingCompilationUnitPath)));
static dartSuite() {
_ut.group('LibraryTest', () {
@@ -5990,7 +5991,7 @@
class DeclarationMatcherTest extends ResolverTestCase {
void test_compilationUnitMatches_false_topLevelVariable() {
- assertCompilationUnitMatches(false, EngineTestCase.createSource([
+ _assertCompilationUnitMatches(false, EngineTestCase.createSource([
"class C {",
" int m(int p) {",
" return p + p;",
@@ -6005,7 +6006,7 @@
}
void test_compilationUnitMatches_true_different() {
- assertCompilationUnitMatches(true, EngineTestCase.createSource([
+ _assertCompilationUnitMatches(true, EngineTestCase.createSource([
"class C {",
" int m(int p) {",
" return p + p;",
@@ -6025,11 +6026,11 @@
" return p + p;",
" }",
"}"]);
- assertCompilationUnitMatches(true, content, content);
+ _assertCompilationUnitMatches(true, content, content);
}
void test_methodDeclarationMatches_false_localVariable() {
- assertMethodMatches(false, EngineTestCase.createSource([
+ _assertMethodMatches(false, EngineTestCase.createSource([
"class C {",
" int m(int p) {",
" return p + p;",
@@ -6044,7 +6045,7 @@
}
void test_methodDeclarationMatches_false_parameter() {
- assertMethodMatches(false, EngineTestCase.createSource([
+ _assertMethodMatches(false, EngineTestCase.createSource([
"class C {",
" int m(int p) {",
" return p + p;",
@@ -6058,7 +6059,7 @@
}
void test_methodDeclarationMatches_true_different() {
- assertMethodMatches(true, EngineTestCase.createSource([
+ _assertMethodMatches(true, EngineTestCase.createSource([
"class C {",
" int m(int p) {",
" return p + p;",
@@ -6078,10 +6079,10 @@
" return p + p;",
" }",
"}"]);
- assertMethodMatches(true, content, content);
+ _assertMethodMatches(true, content, content);
}
- void assertCompilationUnitMatches(bool expectMatch, String oldContent, String newContent) {
+ void _assertCompilationUnitMatches(bool expectMatch, String oldContent, String newContent) {
Source source = addSource(oldContent);
LibraryElement library = resolve(source);
CompilationUnit oldUnit = resolveCompilationUnit(source, library);
@@ -6092,20 +6093,20 @@
JUnitTestCase.assertEquals(expectMatch, matcher.matches(newUnit, oldUnit.element));
}
- void assertMethodMatches(bool expectMatch, String oldContent, String newContent) {
+ void _assertMethodMatches(bool expectMatch, String oldContent, String newContent) {
Source source = addSource(oldContent);
LibraryElement library = resolve(source);
CompilationUnit oldUnit = resolveCompilationUnit(source, library);
- MethodElement element = getFirstMethod(oldUnit).element as MethodElement;
+ MethodElement element = _getFirstMethod(oldUnit).element as MethodElement;
AnalysisContext context = analysisContext;
context.setContents(source, newContent);
CompilationUnit newUnit = context.parseCompilationUnit(source);
- MethodDeclaration newMethod = getFirstMethod(newUnit);
+ MethodDeclaration newMethod = _getFirstMethod(newUnit);
DeclarationMatcher matcher = new DeclarationMatcher();
JUnitTestCase.assertEquals(expectMatch, matcher.matches(newMethod, element));
}
- MethodDeclaration getFirstMethod(CompilationUnit unit) {
+ MethodDeclaration _getFirstMethod(CompilationUnit unit) {
ClassDeclaration classNode = unit.declarations[0] as ClassDeclaration;
return classNode.members[0] as MethodDeclaration;
}
@@ -9013,6 +9014,7 @@
_listener.assertNoErrors();
}
+ @override
void setUp() {
_listener = new GatheringErrorListener();
SourceFactory factory = new SourceFactory([new FileUriResolver()]);
@@ -9032,7 +9034,7 @@
CatchClause clause = AstFactory.catchClause("e", []);
SimpleIdentifier exceptionParameter = clause.exceptionParameter;
exceptionParameter.staticElement = new LocalVariableElementImpl(exceptionParameter);
- resolveCatchClause(clause, _typeProvider.dynamicType, null, []);
+ _resolveCatchClause(clause, _typeProvider.dynamicType, null, []);
_listener.assertNoErrors();
}
@@ -9043,7 +9045,7 @@
exceptionParameter.staticElement = new LocalVariableElementImpl(exceptionParameter);
SimpleIdentifier stackTraceParameter = clause.stackTraceParameter;
stackTraceParameter.staticElement = new LocalVariableElementImpl(stackTraceParameter);
- resolveCatchClause(clause, _typeProvider.dynamicType, _typeProvider.stackTraceType, []);
+ _resolveCatchClause(clause, _typeProvider.dynamicType, _typeProvider.stackTraceType, []);
_listener.assertNoErrors();
}
@@ -9054,7 +9056,7 @@
CatchClause clause = AstFactory.catchClause4(exceptionType, "e", []);
SimpleIdentifier exceptionParameter = clause.exceptionParameter;
exceptionParameter.staticElement = new LocalVariableElementImpl(exceptionParameter);
- resolveCatchClause(clause, exceptionElement.type, null, [exceptionElement]);
+ _resolveCatchClause(clause, exceptionElement.type, null, [exceptionElement]);
_listener.assertNoErrors();
}
@@ -9068,7 +9070,7 @@
exceptionParameter.staticElement = new LocalVariableElementImpl(exceptionParameter);
SimpleIdentifier stackTraceParameter = clause.stackTraceParameter;
stackTraceParameter.staticElement = new LocalVariableElementImpl(stackTraceParameter);
- resolveCatchClause(clause, exceptionElement.type, _typeProvider.stackTraceType, [exceptionElement]);
+ _resolveCatchClause(clause, exceptionElement.type, _typeProvider.stackTraceType, [exceptionElement]);
_listener.assertNoErrors();
}
@@ -9083,7 +9085,7 @@
ImplementsClause implementsClause = AstFactory.implementsClause([AstFactory.typeName(elementD, [])]);
ClassDeclaration declaration = AstFactory.classDeclaration(null, "A", null, extendsClause, withClause, implementsClause, []);
declaration.name.staticElement = elementA;
- resolveNode(declaration, [elementA, elementB, elementC, elementD]);
+ _resolveNode(declaration, [elementA, elementB, elementC, elementD]);
JUnitTestCase.assertSame(elementB.type, elementA.supertype);
List<InterfaceType> mixins = elementA.mixins;
EngineTestCase.assertLength(1, mixins);
@@ -9104,7 +9106,7 @@
ImplementsClause implementsClause = AstFactory.implementsClause([AstFactory.typeName(elementD, [])]);
ClassTypeAlias alias = AstFactory.classTypeAlias("A", null, null, AstFactory.typeName(elementB, []), withClause, implementsClause);
alias.name.staticElement = elementA;
- resolveNode(alias, [elementA, elementB, elementC, elementD]);
+ _resolveNode(alias, [elementA, elementB, elementC, elementD]);
JUnitTestCase.assertSame(elementB.type, elementA.supertype);
List<InterfaceType> mixins = elementA.mixins;
EngineTestCase.assertLength(1, mixins);
@@ -9122,9 +9124,9 @@
SimpleFormalParameter parameter = AstFactory.simpleFormalParameter3(innerParameterName);
parameter.identifier.staticElement = ElementFactory.requiredParameter(innerParameterName);
String outerParameterName = "p";
- FormalParameter node = AstFactory.fieldFormalParameter2(null, intTypeName, outerParameterName, AstFactory.formalParameterList([parameter]));
+ FormalParameter node = AstFactory.fieldFormalParameter(null, intTypeName, outerParameterName, AstFactory.formalParameterList([parameter]));
node.identifier.staticElement = ElementFactory.requiredParameter(outerParameterName);
- Type2 parameterType = resolveFormalParameter(node, [intType.element]);
+ DartType parameterType = _resolveFormalParameter(node, [intType.element]);
EngineTestCase.assertInstanceOf((obj) => obj is FunctionType, FunctionType, parameterType);
FunctionType functionType = parameterType as FunctionType;
JUnitTestCase.assertSame(intType, functionType.returnType);
@@ -9136,7 +9138,7 @@
String parameterName = "p";
FormalParameter node = AstFactory.fieldFormalParameter(Keyword.VAR, null, parameterName);
node.identifier.staticElement = ElementFactory.requiredParameter(parameterName);
- JUnitTestCase.assertSame(_typeProvider.dynamicType, resolveFormalParameter(node, []));
+ JUnitTestCase.assertSame(_typeProvider.dynamicType, _resolveFormalParameter(node, []));
_listener.assertNoErrors();
}
@@ -9146,7 +9148,7 @@
String parameterName = "p";
FormalParameter node = AstFactory.fieldFormalParameter(null, intTypeName, parameterName);
node.identifier.staticElement = ElementFactory.requiredParameter(parameterName);
- JUnitTestCase.assertSame(intType, resolveFormalParameter(node, [intType.element]));
+ JUnitTestCase.assertSame(intType, _resolveFormalParameter(node, [intType.element]));
_listener.assertNoErrors();
}
@@ -9154,7 +9156,7 @@
// p
FormalParameter node = AstFactory.simpleFormalParameter3("p");
node.identifier.staticElement = new ParameterElementImpl.con1(AstFactory.identifier3("p"));
- JUnitTestCase.assertSame(_typeProvider.dynamicType, resolveFormalParameter(node, []));
+ JUnitTestCase.assertSame(_typeProvider.dynamicType, _resolveFormalParameter(node, []));
_listener.assertNoErrors();
}
@@ -9166,7 +9168,7 @@
SimpleIdentifier identifier = node.identifier;
ParameterElementImpl element = new ParameterElementImpl.con1(identifier);
identifier.staticElement = element;
- JUnitTestCase.assertSame(intType, resolveFormalParameter(node, [intElement]));
+ JUnitTestCase.assertSame(intType, _resolveFormalParameter(node, [intElement]));
_listener.assertNoErrors();
}
@@ -9174,7 +9176,7 @@
ClassElement classA = ElementFactory.classElement2("A", []);
TypeName typeName = AstFactory.typeName(classA, []);
typeName.type = null;
- resolveNode(typeName, [classA]);
+ _resolveNode(typeName, [classA]);
JUnitTestCase.assertSame(classA.type, typeName.type);
_listener.assertNoErrors();
}
@@ -9184,10 +9186,10 @@
ClassElement classB = ElementFactory.classElement2("B", []);
TypeName typeName = AstFactory.typeName(classA, [AstFactory.typeName(classB, [])]);
typeName.type = null;
- resolveNode(typeName, [classA, classB]);
+ _resolveNode(typeName, [classA, classB]);
InterfaceType resultType = typeName.type as InterfaceType;
JUnitTestCase.assertSame(classA, resultType.element);
- List<Type2> resultArguments = resultType.typeArguments;
+ List<DartType> resultArguments = resultType.typeArguments;
EngineTestCase.assertLength(1, resultArguments);
JUnitTestCase.assertSame(classB.type, resultArguments[0]);
_listener.assertNoErrors();
@@ -9197,10 +9199,10 @@
ClassElement classA = ElementFactory.classElement2("A", ["E"]);
TypeName typeName = AstFactory.typeName(classA, []);
typeName.type = null;
- resolveNode(typeName, [classA]);
+ _resolveNode(typeName, [classA]);
InterfaceType resultType = typeName.type as InterfaceType;
JUnitTestCase.assertSame(classA, resultType.element);
- List<Type2> resultArguments = resultType.typeArguments;
+ List<DartType> resultArguments = resultType.typeArguments;
EngineTestCase.assertLength(1, resultArguments);
JUnitTestCase.assertSame(DynamicTypeImpl.instance, resultArguments[0]);
_listener.assertNoErrors();
@@ -9209,7 +9211,7 @@
void test_visitTypeName_void() {
ClassElement classA = ElementFactory.classElement2("A", []);
TypeName typeName = AstFactory.typeName4("void", []);
- resolveNode(typeName, [classA]);
+ _resolveNode(typeName, [classA]);
JUnitTestCase.assertSame(VoidTypeImpl.instance, typeName.type);
_listener.assertNoErrors();
}
@@ -9225,8 +9227,8 @@
* @param definedElements the elements that are to be defined in the scope in which the element is
* being resolved
*/
- void resolveCatchClause(CatchClause node, Type2 exceptionType, InterfaceType stackTraceType, List<Element> definedElements) {
- resolveNode(node, definedElements);
+ void _resolveCatchClause(CatchClause node, DartType exceptionType, InterfaceType stackTraceType, List<Element> definedElements) {
+ _resolveNode(node, definedElements);
SimpleIdentifier exceptionParameter = node.exceptionParameter;
if (exceptionParameter != null) {
JUnitTestCase.assertSame(exceptionType, exceptionParameter.staticType);
@@ -9246,8 +9248,8 @@
* being resolved
* @return the type associated with the parameter
*/
- Type2 resolveFormalParameter(FormalParameter node, List<Element> definedElements) {
- resolveNode(node, definedElements);
+ DartType _resolveFormalParameter(FormalParameter node, List<Element> definedElements) {
+ _resolveNode(node, definedElements);
return (node.identifier.staticElement as ParameterElement).type;
}
@@ -9260,7 +9262,7 @@
* being resolved
* @return the element to which the expression was resolved
*/
- void resolveNode(AstNode node, List<Element> definedElements) {
+ void _resolveNode(AstNode node, List<Element> definedElements) {
for (Element element in definedElements) {
_library.libraryScope.define(element);
}
@@ -9339,6 +9341,7 @@
*/
AnalysisContextImpl _analysisContext;
+ @override
void setUp() {
reset();
}
@@ -9433,13 +9436,13 @@
ClassElementImpl type = new ClassElementImpl(AstFactory.identifier3(typeName));
String fileName = "${typeName}.dart";
CompilationUnitElementImpl compilationUnit = new CompilationUnitElementImpl(fileName);
- compilationUnit.source = createNamedSource(fileName);
+ compilationUnit.source = _createNamedSource(fileName);
compilationUnit.types = <ClassElement> [type];
sourcedCompilationUnits[i] = compilationUnit;
}
String fileName = "${libraryName}.dart";
CompilationUnitElementImpl compilationUnit = new CompilationUnitElementImpl(fileName);
- compilationUnit.source = createNamedSource(fileName);
+ compilationUnit.source = _createNamedSource(fileName);
LibraryElementImpl library = new LibraryElementImpl(context, AstFactory.libraryIdentifier2([libraryName]));
library.definingCompilationUnit = compilationUnit;
library.parts = sourcedCompilationUnits;
@@ -9508,7 +9511,7 @@
* @param fileName the name of the file for which a source is to be created
* @return the source that was created
*/
- FileBasedSource createNamedSource(String fileName) {
+ FileBasedSource _createNamedSource(String fileName) {
FileBasedSource source = new FileBasedSource.con1(FileUtilities2.createFile(fileName));
_analysisContext.setContents(source, "");
return source;
@@ -9527,18 +9530,18 @@
// either ElementFactory or TestTypeProvider (which uses ElementFactory) because we side-effect
// the elements in ways that would break other tests.
//
- InterfaceType objectType = classElement("Object", null, []).type;
- InterfaceType boolType = classElement("bool", objectType, []).type;
- InterfaceType numType = classElement("num", objectType, []).type;
- InterfaceType doubleType = classElement("double", numType, []).type;
- InterfaceType functionType = classElement("Function", objectType, []).type;
- InterfaceType intType = classElement("int", numType, []).type;
- InterfaceType listType = classElement("List", objectType, ["E"]).type;
- InterfaceType mapType = classElement("Map", objectType, ["K", "V"]).type;
- InterfaceType stackTraceType = classElement("StackTrace", objectType, []).type;
- InterfaceType stringType = classElement("String", objectType, []).type;
- InterfaceType symbolType = classElement("Symbol", objectType, []).type;
- InterfaceType typeType = classElement("Type", objectType, []).type;
+ InterfaceType objectType = _classElement("Object", null, []).type;
+ InterfaceType boolType = _classElement("bool", objectType, []).type;
+ InterfaceType numType = _classElement("num", objectType, []).type;
+ InterfaceType doubleType = _classElement("double", numType, []).type;
+ InterfaceType functionType = _classElement("Function", objectType, []).type;
+ InterfaceType intType = _classElement("int", numType, []).type;
+ InterfaceType listType = _classElement("List", objectType, ["E"]).type;
+ InterfaceType mapType = _classElement("Map", objectType, ["K", "V"]).type;
+ InterfaceType stackTraceType = _classElement("StackTrace", objectType, []).type;
+ InterfaceType stringType = _classElement("String", objectType, []).type;
+ InterfaceType symbolType = _classElement("Symbol", objectType, []).type;
+ InterfaceType typeType = _classElement("Type", objectType, []).type;
CompilationUnitElementImpl unit = new CompilationUnitElementImpl("lib.dart");
unit.types = <ClassElement> [
boolType.element,
@@ -9573,7 +9576,7 @@
JUnitTestCase.assertSame(typeType, provider.typeType);
}
- ClassElement classElement(String typeName, InterfaceType superclassType, List<String> parameterNames) {
+ ClassElement _classElement(String typeName, InterfaceType superclassType, List<String> parameterNames) {
ClassElementImpl element = new ClassElementImpl(AstFactory.identifier3(typeName));
element.supertype = superclassType;
InterfaceTypeImpl type = new InterfaceTypeImpl.con1(element);
@@ -9625,9 +9628,10 @@
*/
int _numOfMembersInObject = 0;
+ @override
void setUp() {
_typeProvider = new TestTypeProvider();
- _inheritanceManager = createInheritanceManager();
+ _inheritanceManager = _createInheritanceManager();
InterfaceType objectType = _typeProvider.objectType;
_numOfMembersInObject = objectType.methods.length + objectType.accessors.length;
}
@@ -9645,8 +9649,8 @@
JUnitTestCase.assertEquals(_numOfMembersInObject, mapA.size);
JUnitTestCase.assertEquals(_numOfMembersInObject + 1, mapB.size);
JUnitTestCase.assertSame(getterG, mapB.get(getterName));
- assertNoErrors(classA);
- assertNoErrors(classB);
+ _assertNoErrors(classA);
+ _assertNoErrors(classB);
}
void test_getMapOfMembersInheritedFromClasses_accessor_implements() {
@@ -9663,8 +9667,8 @@
JUnitTestCase.assertEquals(_numOfMembersInObject, mapA.size);
JUnitTestCase.assertEquals(_numOfMembersInObject, mapB.size);
JUnitTestCase.assertNull(mapB.get(getterName));
- assertNoErrors(classA);
- assertNoErrors(classB);
+ _assertNoErrors(classA);
+ _assertNoErrors(classB);
}
void test_getMapOfMembersInheritedFromClasses_accessor_with() {
@@ -9681,8 +9685,8 @@
JUnitTestCase.assertEquals(_numOfMembersInObject, mapA.size);
JUnitTestCase.assertEquals(_numOfMembersInObject + 1, mapB.size);
JUnitTestCase.assertSame(getterG, mapB.get(getterName));
- assertNoErrors(classA);
- assertNoErrors(classB);
+ _assertNoErrors(classA);
+ _assertNoErrors(classB);
}
void test_getMapOfMembersInheritedFromClasses_implicitExtends() {
@@ -9690,7 +9694,7 @@
ClassElementImpl classA = ElementFactory.classElement2("A", []);
MemberMap mapA = _inheritanceManager.getMapOfMembersInheritedFromClasses(classA);
JUnitTestCase.assertEquals(_numOfMembersInObject, mapA.size);
- assertNoErrors(classA);
+ _assertNoErrors(classA);
}
void test_getMapOfMembersInheritedFromClasses_method_extends() {
@@ -9707,8 +9711,8 @@
JUnitTestCase.assertEquals(_numOfMembersInObject, mapA.size);
JUnitTestCase.assertEquals(_numOfMembersInObject + 1, mapB.size);
JUnitTestCase.assertSame(methodM, mapB.get(methodName));
- assertNoErrors(classA);
- assertNoErrors(classB);
+ _assertNoErrors(classA);
+ _assertNoErrors(classB);
}
void test_getMapOfMembersInheritedFromClasses_method_implements() {
@@ -9725,8 +9729,8 @@
JUnitTestCase.assertEquals(_numOfMembersInObject, mapA.size);
JUnitTestCase.assertEquals(_numOfMembersInObject, mapB.size);
JUnitTestCase.assertNull(mapB.get(methodName));
- assertNoErrors(classA);
- assertNoErrors(classB);
+ _assertNoErrors(classA);
+ _assertNoErrors(classB);
}
void test_getMapOfMembersInheritedFromClasses_method_with() {
@@ -9743,8 +9747,8 @@
JUnitTestCase.assertEquals(_numOfMembersInObject, mapA.size);
JUnitTestCase.assertEquals(_numOfMembersInObject + 1, mapB.size);
JUnitTestCase.assertSame(methodM, mapB.get(methodName));
- assertNoErrors(classA);
- assertNoErrors(classB);
+ _assertNoErrors(classA);
+ _assertNoErrors(classB);
}
void test_getMapOfMembersInheritedFromInterfaces_accessor_extends() {
@@ -9760,8 +9764,8 @@
JUnitTestCase.assertEquals(_numOfMembersInObject, mapA.size);
JUnitTestCase.assertEquals(_numOfMembersInObject + 1, mapB.size);
JUnitTestCase.assertSame(getterG, mapB.get(getterName));
- assertNoErrors(classA);
- assertNoErrors(classB);
+ _assertNoErrors(classA);
+ _assertNoErrors(classB);
}
void test_getMapOfMembersInheritedFromInterfaces_accessor_implements() {
@@ -9778,8 +9782,8 @@
JUnitTestCase.assertEquals(_numOfMembersInObject, mapA.size);
JUnitTestCase.assertEquals(_numOfMembersInObject + 1, mapB.size);
JUnitTestCase.assertSame(getterG, mapB.get(getterName));
- assertNoErrors(classA);
- assertNoErrors(classB);
+ _assertNoErrors(classA);
+ _assertNoErrors(classB);
}
void test_getMapOfMembersInheritedFromInterfaces_accessor_with() {
@@ -9796,8 +9800,8 @@
JUnitTestCase.assertEquals(_numOfMembersInObject, mapA.size);
JUnitTestCase.assertEquals(_numOfMembersInObject + 1, mapB.size);
JUnitTestCase.assertSame(getterG, mapB.get(getterName));
- assertNoErrors(classA);
- assertNoErrors(classB);
+ _assertNoErrors(classA);
+ _assertNoErrors(classB);
}
void test_getMapOfMembersInheritedFromInterfaces_implicitExtends() {
@@ -9805,7 +9809,7 @@
ClassElementImpl classA = ElementFactory.classElement2("A", []);
MemberMap mapA = _inheritanceManager.getMapOfMembersInheritedFromInterfaces(classA);
JUnitTestCase.assertEquals(_numOfMembersInObject, mapA.size);
- assertNoErrors(classA);
+ _assertNoErrors(classA);
}
void test_getMapOfMembersInheritedFromInterfaces_inconsistentMethodInheritance_getter_method() {
@@ -9824,7 +9828,7 @@
MemberMap mapA = _inheritanceManager.getMapOfMembersInheritedFromInterfaces(classA);
JUnitTestCase.assertEquals(_numOfMembersInObject, mapA.size);
JUnitTestCase.assertNull(mapA.get(methodName));
- assertErrors(classA, [StaticWarningCode.INCONSISTENT_METHOD_INHERITANCE_GETTER_AND_METHOD]);
+ _assertErrors(classA, [StaticWarningCode.INCONSISTENT_METHOD_INHERITANCE_GETTER_AND_METHOD]);
}
void test_getMapOfMembersInheritedFromInterfaces_inconsistentMethodInheritance_int_str() {
@@ -9843,7 +9847,7 @@
MemberMap mapA = _inheritanceManager.getMapOfMembersInheritedFromInterfaces(classA);
JUnitTestCase.assertEquals(_numOfMembersInObject, mapA.size);
JUnitTestCase.assertNull(mapA.get(methodName));
- assertErrors(classA, [StaticTypeWarningCode.INCONSISTENT_METHOD_INHERITANCE]);
+ _assertErrors(classA, [StaticTypeWarningCode.INCONSISTENT_METHOD_INHERITANCE]);
}
void test_getMapOfMembersInheritedFromInterfaces_inconsistentMethodInheritance_method_getter() {
@@ -9862,7 +9866,7 @@
MemberMap mapA = _inheritanceManager.getMapOfMembersInheritedFromInterfaces(classA);
JUnitTestCase.assertEquals(_numOfMembersInObject, mapA.size);
JUnitTestCase.assertNull(mapA.get(methodName));
- assertErrors(classA, [StaticWarningCode.INCONSISTENT_METHOD_INHERITANCE_GETTER_AND_METHOD]);
+ _assertErrors(classA, [StaticWarningCode.INCONSISTENT_METHOD_INHERITANCE_GETTER_AND_METHOD]);
}
void test_getMapOfMembersInheritedFromInterfaces_inconsistentMethodInheritance_numOfRequiredParams() {
@@ -9898,7 +9902,7 @@
MemberMap mapA = _inheritanceManager.getMapOfMembersInheritedFromInterfaces(classA);
JUnitTestCase.assertEquals(_numOfMembersInObject, mapA.size);
JUnitTestCase.assertNull(mapA.get(methodName));
- assertErrors(classA, [StaticTypeWarningCode.INCONSISTENT_METHOD_INHERITANCE]);
+ _assertErrors(classA, [StaticTypeWarningCode.INCONSISTENT_METHOD_INHERITANCE]);
}
void test_getMapOfMembersInheritedFromInterfaces_inconsistentMethodInheritance_str_int() {
@@ -9917,7 +9921,7 @@
MemberMap mapA = _inheritanceManager.getMapOfMembersInheritedFromInterfaces(classA);
JUnitTestCase.assertEquals(_numOfMembersInObject, mapA.size);
JUnitTestCase.assertNull(mapA.get(methodName));
- assertErrors(classA, [StaticTypeWarningCode.INCONSISTENT_METHOD_INHERITANCE]);
+ _assertErrors(classA, [StaticTypeWarningCode.INCONSISTENT_METHOD_INHERITANCE]);
}
void test_getMapOfMembersInheritedFromInterfaces_method_extends() {
@@ -9933,8 +9937,8 @@
JUnitTestCase.assertEquals(_numOfMembersInObject, mapA.size);
JUnitTestCase.assertEquals(_numOfMembersInObject + 1, mapB.size);
JUnitTestCase.assertSame(methodM, mapB.get(methodName));
- assertNoErrors(classA);
- assertNoErrors(classB);
+ _assertNoErrors(classA);
+ _assertNoErrors(classB);
}
void test_getMapOfMembersInheritedFromInterfaces_method_implements() {
@@ -9951,8 +9955,8 @@
JUnitTestCase.assertEquals(_numOfMembersInObject, mapA.size);
JUnitTestCase.assertEquals(_numOfMembersInObject + 1, mapB.size);
JUnitTestCase.assertSame(methodM, mapB.get(methodName));
- assertNoErrors(classA);
- assertNoErrors(classB);
+ _assertNoErrors(classA);
+ _assertNoErrors(classB);
}
void test_getMapOfMembersInheritedFromInterfaces_method_with() {
@@ -9969,8 +9973,8 @@
JUnitTestCase.assertEquals(_numOfMembersInObject, mapA.size);
JUnitTestCase.assertEquals(_numOfMembersInObject + 1, mapB.size);
JUnitTestCase.assertSame(methodM, mapB.get(methodName));
- assertNoErrors(classA);
- assertNoErrors(classB);
+ _assertNoErrors(classA);
+ _assertNoErrors(classB);
}
void test_getMapOfMembersInheritedFromInterfaces_union_differentNames() {
@@ -9991,7 +9995,7 @@
JUnitTestCase.assertEquals(_numOfMembersInObject + 2, mapA.size);
JUnitTestCase.assertSame(methodM1, mapA.get(methodName1));
JUnitTestCase.assertSame(methodM2, mapA.get(methodName2));
- assertNoErrors(classA);
+ _assertNoErrors(classA);
}
void test_getMapOfMembersInheritedFromInterfaces_union_multipleSubtypes_2_getters() {
@@ -10011,7 +10015,7 @@
JUnitTestCase.assertEquals(_numOfMembersInObject + 1, mapA.size);
PropertyAccessorElement syntheticAccessor = ElementFactory.getterElement(accessorName, false, _typeProvider.dynamicType);
JUnitTestCase.assertEquals(syntheticAccessor.type, mapA.get(accessorName).type);
- assertNoErrors(classA);
+ _assertNoErrors(classA);
}
void test_getMapOfMembersInheritedFromInterfaces_union_multipleSubtypes_2_methods() {
@@ -10039,7 +10043,7 @@
JUnitTestCase.assertEquals(_numOfMembersInObject + 1, mapA.size);
MethodElement syntheticMethod = ElementFactory.methodElement(methodName, _typeProvider.dynamicType, [_typeProvider.dynamicType]);
JUnitTestCase.assertEquals(syntheticMethod.type, mapA.get(methodName).type);
- assertNoErrors(classA);
+ _assertNoErrors(classA);
}
void test_getMapOfMembersInheritedFromInterfaces_union_multipleSubtypes_2_setters() {
@@ -10060,7 +10064,7 @@
PropertyAccessorElementImpl syntheticAccessor = ElementFactory.setterElement(accessorName, false, _typeProvider.dynamicType);
syntheticAccessor.returnType = _typeProvider.dynamicType;
JUnitTestCase.assertEquals(syntheticAccessor.type, mapA.get("${accessorName}=").type);
- assertNoErrors(classA);
+ _assertNoErrors(classA);
}
void test_getMapOfMembersInheritedFromInterfaces_union_multipleSubtypes_3_getters() {
@@ -10090,7 +10094,7 @@
JUnitTestCase.assertEquals(_numOfMembersInObject + 1, mapD.size);
PropertyAccessorElement syntheticAccessor = ElementFactory.getterElement(accessorName, false, _typeProvider.dynamicType);
JUnitTestCase.assertEquals(syntheticAccessor.type, mapD.get(accessorName).type);
- assertNoErrors(classD);
+ _assertNoErrors(classD);
}
void test_getMapOfMembersInheritedFromInterfaces_union_multipleSubtypes_3_methods() {
@@ -10132,7 +10136,7 @@
JUnitTestCase.assertEquals(_numOfMembersInObject + 1, mapD.size);
MethodElement syntheticMethod = ElementFactory.methodElement(methodName, _typeProvider.dynamicType, [_typeProvider.dynamicType]);
JUnitTestCase.assertEquals(syntheticMethod.type, mapD.get(methodName).type);
- assertNoErrors(classD);
+ _assertNoErrors(classD);
}
void test_getMapOfMembersInheritedFromInterfaces_union_multipleSubtypes_3_setters() {
@@ -10163,7 +10167,7 @@
PropertyAccessorElementImpl syntheticAccessor = ElementFactory.setterElement(accessorName, false, _typeProvider.dynamicType);
syntheticAccessor.returnType = _typeProvider.dynamicType;
JUnitTestCase.assertEquals(syntheticAccessor.type, mapD.get("${accessorName}=").type);
- assertNoErrors(classD);
+ _assertNoErrors(classD);
}
void test_getMapOfMembersInheritedFromInterfaces_union_oneSubtype_2_methods() {
@@ -10186,7 +10190,7 @@
MemberMap mapA = _inheritanceManager.getMapOfMembersInheritedFromInterfaces(classA);
JUnitTestCase.assertEquals(_numOfMembersInObject + 1, mapA.size);
JUnitTestCase.assertSame(methodM2, mapA.get(methodName));
- assertNoErrors(classA);
+ _assertNoErrors(classA);
}
void test_getMapOfMembersInheritedFromInterfaces_union_oneSubtype_3_methods() {
@@ -10220,7 +10224,7 @@
MemberMap mapA = _inheritanceManager.getMapOfMembersInheritedFromInterfaces(classA);
JUnitTestCase.assertEquals(_numOfMembersInObject + 1, mapA.size);
JUnitTestCase.assertSame(methodM3, mapA.get(methodName));
- assertNoErrors(classA);
+ _assertNoErrors(classA);
}
void test_getMapOfMembersInheritedFromInterfaces_union_oneSubtype_4_methods() {
@@ -10258,7 +10262,7 @@
MemberMap mapA = _inheritanceManager.getMapOfMembersInheritedFromInterfaces(classA);
JUnitTestCase.assertEquals(_numOfMembersInObject + 1, mapA.size);
JUnitTestCase.assertSame(methodM4, mapA.get(methodName));
- assertNoErrors(classA);
+ _assertNoErrors(classA);
}
void test_lookupInheritance_interface_getter() {
@@ -10269,8 +10273,8 @@
ClassElementImpl classB = ElementFactory.classElement2("B", []);
classB.interfaces = <InterfaceType> [classA.type];
JUnitTestCase.assertSame(getterG, _inheritanceManager.lookupInheritance(classB, getterName));
- assertNoErrors(classA);
- assertNoErrors(classB);
+ _assertNoErrors(classA);
+ _assertNoErrors(classB);
}
void test_lookupInheritance_interface_method() {
@@ -10281,8 +10285,8 @@
ClassElementImpl classB = ElementFactory.classElement2("B", []);
classB.interfaces = <InterfaceType> [classA.type];
JUnitTestCase.assertSame(methodM, _inheritanceManager.lookupInheritance(classB, methodName));
- assertNoErrors(classA);
- assertNoErrors(classB);
+ _assertNoErrors(classA);
+ _assertNoErrors(classB);
}
void test_lookupInheritance_interface_setter() {
@@ -10293,8 +10297,8 @@
ClassElementImpl classB = ElementFactory.classElement2("B", []);
classB.interfaces = <InterfaceType> [classA.type];
JUnitTestCase.assertSame(setterS, _inheritanceManager.lookupInheritance(classB, "${setterName}="));
- assertNoErrors(classA);
- assertNoErrors(classB);
+ _assertNoErrors(classA);
+ _assertNoErrors(classB);
}
void test_lookupInheritance_interface_staticMember() {
@@ -10306,15 +10310,15 @@
ClassElementImpl classB = ElementFactory.classElement2("B", []);
classB.interfaces = <InterfaceType> [classA.type];
JUnitTestCase.assertNull(_inheritanceManager.lookupInheritance(classB, methodName));
- assertNoErrors(classA);
- assertNoErrors(classB);
+ _assertNoErrors(classA);
+ _assertNoErrors(classB);
}
void test_lookupInheritance_interfaces_infiniteLoop() {
ClassElementImpl classA = ElementFactory.classElement2("A", []);
classA.interfaces = <InterfaceType> [classA.type];
JUnitTestCase.assertNull(_inheritanceManager.lookupInheritance(classA, "name"));
- assertNoErrors(classA);
+ _assertNoErrors(classA);
}
void test_lookupInheritance_interfaces_infiniteLoop2() {
@@ -10323,8 +10327,8 @@
classA.interfaces = <InterfaceType> [classB.type];
classB.interfaces = <InterfaceType> [classA.type];
JUnitTestCase.assertNull(_inheritanceManager.lookupInheritance(classA, "name"));
- assertNoErrors(classA);
- assertNoErrors(classB);
+ _assertNoErrors(classA);
+ _assertNoErrors(classB);
}
void test_lookupInheritance_interfaces_union2() {
@@ -10341,9 +10345,9 @@
classA.interfaces = <InterfaceType> [classI2.type];
JUnitTestCase.assertSame(methodM1, _inheritanceManager.lookupInheritance(classA, methodName1));
JUnitTestCase.assertSame(methodM2, _inheritanceManager.lookupInheritance(classA, methodName2));
- assertNoErrors(classI1);
- assertNoErrors(classI2);
- assertNoErrors(classA);
+ _assertNoErrors(classI1);
+ _assertNoErrors(classI2);
+ _assertNoErrors(classA);
}
void test_lookupInheritance_mixin_getter() {
@@ -10354,8 +10358,8 @@
ClassElementImpl classB = ElementFactory.classElement2("B", []);
classB.mixins = <InterfaceType> [classA.type];
JUnitTestCase.assertSame(getterG, _inheritanceManager.lookupInheritance(classB, getterName));
- assertNoErrors(classA);
- assertNoErrors(classB);
+ _assertNoErrors(classA);
+ _assertNoErrors(classB);
}
void test_lookupInheritance_mixin_method() {
@@ -10366,8 +10370,8 @@
ClassElementImpl classB = ElementFactory.classElement2("B", []);
classB.mixins = <InterfaceType> [classA.type];
JUnitTestCase.assertSame(methodM, _inheritanceManager.lookupInheritance(classB, methodName));
- assertNoErrors(classA);
- assertNoErrors(classB);
+ _assertNoErrors(classA);
+ _assertNoErrors(classB);
}
void test_lookupInheritance_mixin_setter() {
@@ -10378,8 +10382,8 @@
ClassElementImpl classB = ElementFactory.classElement2("B", []);
classB.mixins = <InterfaceType> [classA.type];
JUnitTestCase.assertSame(setterS, _inheritanceManager.lookupInheritance(classB, "${setterName}="));
- assertNoErrors(classA);
- assertNoErrors(classB);
+ _assertNoErrors(classA);
+ _assertNoErrors(classB);
}
void test_lookupInheritance_mixin_staticMember() {
@@ -10391,14 +10395,14 @@
ClassElementImpl classB = ElementFactory.classElement2("B", []);
classB.mixins = <InterfaceType> [classA.type];
JUnitTestCase.assertNull(_inheritanceManager.lookupInheritance(classB, methodName));
- assertNoErrors(classA);
- assertNoErrors(classB);
+ _assertNoErrors(classA);
+ _assertNoErrors(classB);
}
void test_lookupInheritance_noMember() {
ClassElementImpl classA = ElementFactory.classElement2("A", []);
JUnitTestCase.assertNull(_inheritanceManager.lookupInheritance(classA, "a"));
- assertNoErrors(classA);
+ _assertNoErrors(classA);
}
void test_lookupInheritance_superclass_getter() {
@@ -10408,15 +10412,15 @@
classA.accessors = <PropertyAccessorElement> [getterG];
ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []);
JUnitTestCase.assertSame(getterG, _inheritanceManager.lookupInheritance(classB, getterName));
- assertNoErrors(classA);
- assertNoErrors(classB);
+ _assertNoErrors(classA);
+ _assertNoErrors(classB);
}
void test_lookupInheritance_superclass_infiniteLoop() {
ClassElementImpl classA = ElementFactory.classElement2("A", []);
classA.supertype = classA.type;
JUnitTestCase.assertNull(_inheritanceManager.lookupInheritance(classA, "name"));
- assertNoErrors(classA);
+ _assertNoErrors(classA);
}
void test_lookupInheritance_superclass_infiniteLoop2() {
@@ -10425,8 +10429,8 @@
classA.supertype = classB.type;
classB.supertype = classA.type;
JUnitTestCase.assertNull(_inheritanceManager.lookupInheritance(classA, "name"));
- assertNoErrors(classA);
- assertNoErrors(classB);
+ _assertNoErrors(classA);
+ _assertNoErrors(classB);
}
void test_lookupInheritance_superclass_method() {
@@ -10436,8 +10440,8 @@
classA.methods = <MethodElement> [methodM];
ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []);
JUnitTestCase.assertSame(methodM, _inheritanceManager.lookupInheritance(classB, methodName));
- assertNoErrors(classA);
- assertNoErrors(classB);
+ _assertNoErrors(classA);
+ _assertNoErrors(classB);
}
void test_lookupInheritance_superclass_setter() {
@@ -10447,8 +10451,8 @@
classA.accessors = <PropertyAccessorElement> [setterS];
ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []);
JUnitTestCase.assertSame(setterS, _inheritanceManager.lookupInheritance(classB, "${setterName}="));
- assertNoErrors(classA);
- assertNoErrors(classB);
+ _assertNoErrors(classA);
+ _assertNoErrors(classB);
}
void test_lookupInheritance_superclass_staticMember() {
@@ -10459,8 +10463,8 @@
classA.methods = <MethodElement> [methodM];
ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []);
JUnitTestCase.assertNull(_inheritanceManager.lookupInheritance(classB, methodName));
- assertNoErrors(classA);
- assertNoErrors(classB);
+ _assertNoErrors(classA);
+ _assertNoErrors(classB);
}
void test_lookupMember_getter() {
@@ -10469,7 +10473,7 @@
PropertyAccessorElement getterG = ElementFactory.getterElement(getterName, false, _typeProvider.intType);
classA.accessors = <PropertyAccessorElement> [getterG];
JUnitTestCase.assertSame(getterG, _inheritanceManager.lookupMember(classA, getterName));
- assertNoErrors(classA);
+ _assertNoErrors(classA);
}
void test_lookupMember_getter_static() {
@@ -10478,7 +10482,7 @@
PropertyAccessorElement getterG = ElementFactory.getterElement(getterName, true, _typeProvider.intType);
classA.accessors = <PropertyAccessorElement> [getterG];
JUnitTestCase.assertNull(_inheritanceManager.lookupMember(classA, getterName));
- assertNoErrors(classA);
+ _assertNoErrors(classA);
}
void test_lookupMember_method() {
@@ -10487,7 +10491,7 @@
MethodElement methodM = ElementFactory.methodElement(methodName, _typeProvider.intType, []);
classA.methods = <MethodElement> [methodM];
JUnitTestCase.assertSame(methodM, _inheritanceManager.lookupMember(classA, methodName));
- assertNoErrors(classA);
+ _assertNoErrors(classA);
}
void test_lookupMember_method_static() {
@@ -10497,13 +10501,13 @@
(methodM as MethodElementImpl).static = true;
classA.methods = <MethodElement> [methodM];
JUnitTestCase.assertNull(_inheritanceManager.lookupMember(classA, methodName));
- assertNoErrors(classA);
+ _assertNoErrors(classA);
}
void test_lookupMember_noMember() {
ClassElementImpl classA = ElementFactory.classElement2("A", []);
JUnitTestCase.assertNull(_inheritanceManager.lookupMember(classA, "a"));
- assertNoErrors(classA);
+ _assertNoErrors(classA);
}
void test_lookupMember_setter() {
@@ -10512,7 +10516,7 @@
PropertyAccessorElement setterS = ElementFactory.setterElement(setterName, false, _typeProvider.intType);
classA.accessors = <PropertyAccessorElement> [setterS];
JUnitTestCase.assertSame(setterS, _inheritanceManager.lookupMember(classA, "${setterName}="));
- assertNoErrors(classA);
+ _assertNoErrors(classA);
}
void test_lookupMember_setter_static() {
@@ -10521,10 +10525,10 @@
PropertyAccessorElement setterS = ElementFactory.setterElement(setterName, true, _typeProvider.intType);
classA.accessors = <PropertyAccessorElement> [setterS];
JUnitTestCase.assertNull(_inheritanceManager.lookupMember(classA, setterName));
- assertNoErrors(classA);
+ _assertNoErrors(classA);
}
- void assertErrors(ClassElement classElt, List<ErrorCode> expectedErrorCodes) {
+ void _assertErrors(ClassElement classElt, List<ErrorCode> expectedErrorCodes) {
GatheringErrorListener errorListener = new GatheringErrorListener();
Set<AnalysisError> actualErrors = _inheritanceManager.getErrors(classElt);
if (actualErrors != null) {
@@ -10535,8 +10539,8 @@
errorListener.assertErrorsWithCodes(expectedErrorCodes);
}
- void assertNoErrors(ClassElement classElt) {
- assertErrors(classElt, []);
+ void _assertNoErrors(ClassElement classElt) {
+ _assertErrors(classElt, []);
}
/**
@@ -10544,7 +10548,7 @@
*
* @return the inheritance manager that was created
*/
- InheritanceManager createInheritanceManager() {
+ InheritanceManager _createInheritanceManager() {
AnalysisContextImpl context = AnalysisContextFactory.contextWithCore();
FileBasedSource source = new FileBasedSource.con1(FileUtilities2.createFile("/test.dart"));
CompilationUnitElementImpl definingCompilationUnit = new CompilationUnitElementImpl("test.dart");
@@ -11132,13 +11136,13 @@
}
void test_constEvalThrowsException_binaryMinus_null() {
- check_constEvalThrowsException_binary_null("null - 5", false);
- check_constEvalThrowsException_binary_null("5 - null", true);
+ _check_constEvalThrowsException_binary_null("null - 5", false);
+ _check_constEvalThrowsException_binary_null("5 - null", true);
}
void test_constEvalThrowsException_binaryPlus_null() {
- check_constEvalThrowsException_binary_null("null + 5", false);
- check_constEvalThrowsException_binary_null("5 + null", true);
+ _check_constEvalThrowsException_binary_null("null + 5", false);
+ _check_constEvalThrowsException_binary_null("5 + null", true);
}
void test_constEvalThrowsException_divisionByZero() {
@@ -11168,8 +11172,8 @@
}
void test_constEvalTypeBool_binary() {
- check_constEvalTypeBool_withParameter_binary("p && ''");
- check_constEvalTypeBool_withParameter_binary("p || ''");
+ _check_constEvalTypeBool_withParameter_binary("p && ''");
+ _check_constEvalTypeBool_withParameter_binary("p || ''");
}
void test_constEvalTypeBool_binary_leftTrue() {
@@ -11210,24 +11214,24 @@
}
void test_constEvalTypeInt_binary() {
- check_constEvalTypeInt_withParameter_binary("p ^ ''");
- check_constEvalTypeInt_withParameter_binary("p & ''");
- check_constEvalTypeInt_withParameter_binary("p | ''");
- check_constEvalTypeInt_withParameter_binary("p >> ''");
- check_constEvalTypeInt_withParameter_binary("p << ''");
+ _check_constEvalTypeInt_withParameter_binary("p ^ ''");
+ _check_constEvalTypeInt_withParameter_binary("p & ''");
+ _check_constEvalTypeInt_withParameter_binary("p | ''");
+ _check_constEvalTypeInt_withParameter_binary("p >> ''");
+ _check_constEvalTypeInt_withParameter_binary("p << ''");
}
void test_constEvalTypeNum_binary() {
- check_constEvalTypeNum_withParameter_binary("p + ''");
- check_constEvalTypeNum_withParameter_binary("p - ''");
- check_constEvalTypeNum_withParameter_binary("p * ''");
- check_constEvalTypeNum_withParameter_binary("p / ''");
- check_constEvalTypeNum_withParameter_binary("p ~/ ''");
- check_constEvalTypeNum_withParameter_binary("p > ''");
- check_constEvalTypeNum_withParameter_binary("p < ''");
- check_constEvalTypeNum_withParameter_binary("p >= ''");
- check_constEvalTypeNum_withParameter_binary("p <= ''");
- check_constEvalTypeNum_withParameter_binary("p % ''");
+ _check_constEvalTypeNum_withParameter_binary("p + ''");
+ _check_constEvalTypeNum_withParameter_binary("p - ''");
+ _check_constEvalTypeNum_withParameter_binary("p * ''");
+ _check_constEvalTypeNum_withParameter_binary("p / ''");
+ _check_constEvalTypeNum_withParameter_binary("p ~/ ''");
+ _check_constEvalTypeNum_withParameter_binary("p > ''");
+ _check_constEvalTypeNum_withParameter_binary("p < ''");
+ _check_constEvalTypeNum_withParameter_binary("p >= ''");
+ _check_constEvalTypeNum_withParameter_binary("p <= ''");
+ _check_constEvalTypeNum_withParameter_binary("p % ''");
}
void test_constFormalParameter_fieldFormalParameter() {
@@ -13764,26 +13768,26 @@
}
void test_wrongNumberOfParametersForOperator_tilde() {
- check_wrongNumberOfParametersForOperator("~", "a");
- check_wrongNumberOfParametersForOperator("~", "a, b");
+ _check_wrongNumberOfParametersForOperator("~", "a");
+ _check_wrongNumberOfParametersForOperator("~", "a, b");
}
void test_wrongNumberOfParametersForOperator1() {
- check_wrongNumberOfParametersForOperator1("<");
- check_wrongNumberOfParametersForOperator1(">");
- check_wrongNumberOfParametersForOperator1("<=");
- check_wrongNumberOfParametersForOperator1(">=");
- check_wrongNumberOfParametersForOperator1("+");
- check_wrongNumberOfParametersForOperator1("/");
- check_wrongNumberOfParametersForOperator1("~/");
- check_wrongNumberOfParametersForOperator1("*");
- check_wrongNumberOfParametersForOperator1("%");
- check_wrongNumberOfParametersForOperator1("|");
- check_wrongNumberOfParametersForOperator1("^");
- check_wrongNumberOfParametersForOperator1("&");
- check_wrongNumberOfParametersForOperator1("<<");
- check_wrongNumberOfParametersForOperator1(">>");
- check_wrongNumberOfParametersForOperator1("[]");
+ _check_wrongNumberOfParametersForOperator1("<");
+ _check_wrongNumberOfParametersForOperator1(">");
+ _check_wrongNumberOfParametersForOperator1("<=");
+ _check_wrongNumberOfParametersForOperator1(">=");
+ _check_wrongNumberOfParametersForOperator1("+");
+ _check_wrongNumberOfParametersForOperator1("/");
+ _check_wrongNumberOfParametersForOperator1("~/");
+ _check_wrongNumberOfParametersForOperator1("*");
+ _check_wrongNumberOfParametersForOperator1("%");
+ _check_wrongNumberOfParametersForOperator1("|");
+ _check_wrongNumberOfParametersForOperator1("^");
+ _check_wrongNumberOfParametersForOperator1("&");
+ _check_wrongNumberOfParametersForOperator1("<<");
+ _check_wrongNumberOfParametersForOperator1(">>");
+ _check_wrongNumberOfParametersForOperator1("[]");
}
void test_wrongNumberOfParametersForSetter_function_named() {
@@ -13842,7 +13846,7 @@
verify([source]);
}
- void check_constEvalThrowsException_binary_null(String expr, bool resolved) {
+ void _check_constEvalThrowsException_binary_null(String expr, bool resolved) {
Source source = addSource("const C = ${expr};");
resolve(source);
if (resolved) {
@@ -13854,7 +13858,7 @@
reset();
}
- void check_constEvalTypeBool_withParameter_binary(String expr) {
+ void _check_constEvalTypeBool_withParameter_binary(String expr) {
Source source = addSource(EngineTestCase.createSource([
"class A {",
" final a;",
@@ -13866,7 +13870,7 @@
reset();
}
- void check_constEvalTypeInt_withParameter_binary(String expr) {
+ void _check_constEvalTypeInt_withParameter_binary(String expr) {
Source source = addSource(EngineTestCase.createSource([
"class A {",
" final a;",
@@ -13880,7 +13884,7 @@
reset();
}
- void check_constEvalTypeNum_withParameter_binary(String expr) {
+ void _check_constEvalTypeNum_withParameter_binary(String expr) {
Source source = addSource(EngineTestCase.createSource([
"class A {",
" final a;",
@@ -13894,7 +13898,7 @@
reset();
}
- void check_wrongNumberOfParametersForOperator(String name, String parameters) {
+ void _check_wrongNumberOfParametersForOperator(String name, String parameters) {
Source source = addSource(EngineTestCase.createSource(["class A {", " operator ${name}(${parameters}) {}", "}"]));
resolve(source);
assertErrors(source, [CompileTimeErrorCode.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR]);
@@ -13902,9 +13906,9 @@
reset();
}
- void check_wrongNumberOfParametersForOperator1(String name) {
- check_wrongNumberOfParametersForOperator(name, "");
- check_wrongNumberOfParametersForOperator(name, "a, b");
+ void _check_wrongNumberOfParametersForOperator1(String name) {
+ _check_wrongNumberOfParametersForOperator(name, "");
+ _check_wrongNumberOfParametersForOperator(name, "a, b");
}
static dartSuite() {
@@ -15250,7 +15254,7 @@
writer.print(" ");
writer.print(identifier.toString());
writer.print(" (");
- writer.print(getFileName(identifier));
+ writer.print(_getFileName(identifier));
writer.print(" : ");
writer.print(identifier.offset);
writer.println(")");
@@ -15267,7 +15271,7 @@
writer.print(" ");
writer.print(expression.toString());
writer.print(" (");
- writer.print(getFileName(expression));
+ writer.print(_getFileName(expression));
writer.print(" : ");
writer.print(expression.offset);
writer.println(")");
@@ -15289,7 +15293,7 @@
writer.print(expression.propagatedType.displayName);
writer.println("]");
writer.print(" ");
- writer.print(getFileName(expression));
+ writer.print(_getFileName(expression));
writer.print(" : ");
writer.print(expression.offset);
writer.println(")");
@@ -15299,22 +15303,27 @@
}
}
+ @override
Object visitBreakStatement(BreakStatement node) => null;
+ @override
Object visitCommentReference(CommentReference node) => null;
+ @override
Object visitContinueStatement(ContinueStatement node) => null;
+ @override
Object visitExportDirective(ExportDirective node) => null;
+ @override
Object visitExpression(Expression node) {
node.visitChildren(this);
- Type2 staticType = node.staticType;
+ DartType staticType = node.staticType;
if (staticType == null) {
_unresolvedExpressions.add(node);
} else {
_resolvedExpressionCount++;
- Type2 propagatedType = node.propagatedType;
+ DartType propagatedType = node.propagatedType;
if (propagatedType != null) {
_propagatedExpressionCount++;
if (!propagatedType.isMoreSpecificThan(staticType)) {
@@ -15325,12 +15334,16 @@
return null;
}
+ @override
Object visitImportDirective(ImportDirective node) => null;
+ @override
Object visitLabel(Label node) => null;
+ @override
Object visitLibraryIdentifier(LibraryIdentifier node) => null;
+ @override
Object visitPrefixedIdentifier(PrefixedIdentifier node) {
// In cases where we have a prefixed identifier where the prefix is dynamic, we don't want to
// assert that the node will have a type.
@@ -15340,6 +15353,7 @@
return super.visitPrefixedIdentifier(node);
}
+ @override
Object visitSimpleIdentifier(SimpleIdentifier node) {
// In cases where identifiers are being used for something other than an expressions,
// then they can be ignored.
@@ -15361,6 +15375,7 @@
return super.visitSimpleIdentifier(node);
}
+ @override
Object visitTypeName(TypeName node) {
// Note: do not visit children from this node, the child SimpleIdentifier in TypeName
// (i.e. "String") does not have a static type defined.
@@ -15372,7 +15387,7 @@
return null;
}
- String getFileName(AstNode node) {
+ String _getFileName(AstNode node) {
// TODO (jwren) there are two copies of this method, one here and one in ResolutionVerifier,
// they should be resolved into a single method
if (node != null) {
@@ -15409,6 +15424,7 @@
assertErrors(source, [StaticTypeWarningCode.UNDEFINED_OPERATOR]);
}
+ @override
void setUp() {
super.setUp();
AnalysisOptionsImpl options = new AnalysisOptionsImpl();
@@ -15626,7 +15642,7 @@
JUnitTestCase.fail("Not yet tested");
// Need to set up the exported library so that the identifier can be resolved
ExportDirective directive = AstFactory.exportDirective2(null, [AstFactory.hideCombinator2(["A"])]);
- resolveNode(directive, []);
+ _resolveNode(directive, []);
_listener.assertNoErrors();
}
@@ -15639,7 +15655,7 @@
JUnitTestCase.fail("Not yet tested");
// Need to set up the imported library so that the identifier can be resolved
ImportDirective directive = AstFactory.importDirective2(null, null, [AstFactory.showCombinator2(["A"])]);
- resolveNode(directive, []);
+ _resolveNode(directive, []);
_listener.assertNoErrors();
}
@@ -15651,7 +15667,7 @@
ImportDirective directive = AstFactory.importDirective2(null, prefixName, [
AstFactory.showCombinator2(["A"]),
AstFactory.hideCombinator2(["B"])]);
- resolveNode(directive, []);
+ _resolveNode(directive, []);
_listener.assertNoErrors();
}
@@ -15660,10 +15676,11 @@
_listener.assertNoErrors();
}
+ @override
void setUp() {
_listener = new GatheringErrorListener();
_typeProvider = new TestTypeProvider();
- _resolver = createResolver();
+ _resolver = _createResolver();
}
void test_lookUpMethodInInterfaces() {
@@ -15695,7 +15712,7 @@
SimpleIdentifier array = AstFactory.identifier3("a");
array.staticType = classD.type;
IndexExpression expression = AstFactory.indexExpression(array, AstFactory.identifier3("i"));
- JUnitTestCase.assertSame(operator, resolveIndexExpression(expression, []));
+ JUnitTestCase.assertSame(operator, _resolveIndexExpression(expression, []));
_listener.assertNoErrors();
}
@@ -15704,14 +15721,14 @@
SimpleIdentifier leftHandSide = AstFactory.identifier3("a");
leftHandSide.staticType = intType;
AssignmentExpression assignment = AstFactory.assignmentExpression(leftHandSide, TokenType.PLUS_EQ, AstFactory.integer(1));
- resolveNode(assignment, []);
+ _resolveNode(assignment, []);
JUnitTestCase.assertSame(getMethod(_typeProvider.numType, "+"), assignment.staticElement);
_listener.assertNoErrors();
}
void test_visitAssignmentExpression_simple() {
AssignmentExpression expression = AstFactory.assignmentExpression(AstFactory.identifier3("x"), TokenType.EQ, AstFactory.integer(0));
- resolveNode(expression, []);
+ _resolveNode(expression, []);
JUnitTestCase.assertNull(expression.staticElement);
_listener.assertNoErrors();
}
@@ -15721,7 +15738,7 @@
SimpleIdentifier left = AstFactory.identifier3("i");
left.staticType = numType;
BinaryExpression expression = AstFactory.binaryExpression(left, TokenType.PLUS, AstFactory.identifier3("j"));
- resolveNode(expression, []);
+ _resolveNode(expression, []);
JUnitTestCase.assertEquals(getMethod(numType, "+"), expression.staticElement);
_listener.assertNoErrors();
}
@@ -15730,13 +15747,13 @@
String label = "loop";
LabelElementImpl labelElement = new LabelElementImpl(AstFactory.identifier3(label), false, false);
BreakStatement statement = AstFactory.breakStatement2(label);
- JUnitTestCase.assertSame(labelElement, resolveBreak(statement, labelElement));
+ JUnitTestCase.assertSame(labelElement, _resolveBreak(statement, labelElement));
_listener.assertNoErrors();
}
void test_visitBreakStatement_withoutLabel() {
BreakStatement statement = AstFactory.breakStatement();
- resolveStatement(statement, null);
+ _resolveStatement(statement, null);
_listener.assertNoErrors();
}
@@ -15746,7 +15763,7 @@
ConstructorElement constructor = ElementFactory.constructorElement2(classA, constructorName, []);
classA.constructors = <ConstructorElement> [constructor];
ConstructorName name = AstFactory.constructorName(AstFactory.typeName(classA, []), constructorName);
- resolveNode(name, []);
+ _resolveNode(name, []);
JUnitTestCase.assertSame(constructor, name.staticElement);
_listener.assertNoErrors();
}
@@ -15757,7 +15774,7 @@
ConstructorElement constructor = ElementFactory.constructorElement2(classA, constructorName, []);
classA.constructors = <ConstructorElement> [constructor];
ConstructorName name = AstFactory.constructorName(AstFactory.typeName(classA, []), constructorName);
- resolveNode(name, []);
+ _resolveNode(name, []);
JUnitTestCase.assertSame(constructor, name.staticElement);
_listener.assertNoErrors();
}
@@ -15765,21 +15782,21 @@
void test_visitContinueStatement_withLabel() {
String label = "loop";
LabelElementImpl labelElement = new LabelElementImpl(AstFactory.identifier3(label), false, false);
- ContinueStatement statement = AstFactory.continueStatement2(label);
- JUnitTestCase.assertSame(labelElement, resolveContinue(statement, labelElement));
+ ContinueStatement statement = AstFactory.continueStatement(label);
+ JUnitTestCase.assertSame(labelElement, _resolveContinue(statement, labelElement));
_listener.assertNoErrors();
}
void test_visitContinueStatement_withoutLabel() {
ContinueStatement statement = AstFactory.continueStatement();
- resolveStatement(statement, null);
+ _resolveStatement(statement, null);
_listener.assertNoErrors();
}
void test_visitExportDirective_noCombinators() {
ExportDirective directive = AstFactory.exportDirective2(null, []);
directive.element = ElementFactory.exportFor(ElementFactory.library(_definingLibrary.context, "lib"), []);
- resolveNode(directive, []);
+ _resolveNode(directive, []);
_listener.assertNoErrors();
}
@@ -15789,19 +15806,19 @@
FieldElementImpl fieldElement = ElementFactory.fieldElement(fieldName, false, false, false, intType);
ClassElementImpl classA = ElementFactory.classElement2("A", []);
classA.fields = <FieldElement> [fieldElement];
- FieldFormalParameter parameter = AstFactory.fieldFormalParameter3(fieldName);
+ FieldFormalParameter parameter = AstFactory.fieldFormalParameter2(fieldName);
FieldFormalParameterElementImpl parameterElement = ElementFactory.fieldFormalParameter(parameter.identifier);
parameterElement.field = fieldElement;
parameterElement.type = intType;
parameter.identifier.staticElement = parameterElement;
- resolveInClass(parameter, classA);
+ _resolveInClass(parameter, classA);
JUnitTestCase.assertSame(intType, parameter.element.type);
}
void test_visitImportDirective_noCombinators_noPrefix() {
ImportDirective directive = AstFactory.importDirective2(null, null, []);
directive.element = ElementFactory.importFor(ElementFactory.library(_definingLibrary.context, "lib"), null, []);
- resolveNode(directive, []);
+ _resolveNode(directive, []);
_listener.assertNoErrors();
}
@@ -15811,7 +15828,7 @@
_definingLibrary.imports = <ImportElement> [importElement];
ImportDirective directive = AstFactory.importDirective2(null, prefixName, []);
directive.element = importElement;
- resolveNode(directive, []);
+ _resolveNode(directive, []);
_listener.assertNoErrors();
}
@@ -15823,7 +15840,7 @@
SimpleIdentifier array = AstFactory.identifier3("a");
array.staticType = classA.type;
IndexExpression expression = AstFactory.indexExpression(array, AstFactory.identifier3("i"));
- JUnitTestCase.assertSame(getter, resolveIndexExpression(expression, []));
+ JUnitTestCase.assertSame(getter, _resolveIndexExpression(expression, []));
_listener.assertNoErrors();
}
@@ -15836,7 +15853,7 @@
array.staticType = classA.type;
IndexExpression expression = AstFactory.indexExpression(array, AstFactory.identifier3("i"));
AstFactory.assignmentExpression(expression, TokenType.EQ, AstFactory.integer(0));
- JUnitTestCase.assertSame(setter, resolveIndexExpression(expression, []));
+ JUnitTestCase.assertSame(setter, _resolveIndexExpression(expression, []));
_listener.assertNoErrors();
}
@@ -15848,7 +15865,7 @@
ConstructorName name = AstFactory.constructorName(AstFactory.typeName(classA, []), constructorName);
name.staticElement = constructor;
InstanceCreationExpression creation = AstFactory.instanceCreationExpression(Keyword.NEW, name, []);
- resolveNode(creation, []);
+ _resolveNode(creation, []);
JUnitTestCase.assertSame(constructor, creation.staticElement);
_listener.assertNoErrors();
}
@@ -15861,7 +15878,7 @@
ConstructorName name = AstFactory.constructorName(AstFactory.typeName(classA, []), constructorName);
name.staticElement = constructor;
InstanceCreationExpression creation = AstFactory.instanceCreationExpression(Keyword.NEW, name, []);
- resolveNode(creation, []);
+ _resolveNode(creation, []);
JUnitTestCase.assertSame(constructor, creation.staticElement);
_listener.assertNoErrors();
}
@@ -15877,7 +15894,7 @@
ConstructorName name = AstFactory.constructorName(AstFactory.typeName(classA, []), constructorName);
name.staticElement = constructor;
InstanceCreationExpression creation = AstFactory.instanceCreationExpression(Keyword.NEW, name, [AstFactory.namedExpression2(parameterName, AstFactory.integer(0))]);
- resolveNode(creation, []);
+ _resolveNode(creation, []);
JUnitTestCase.assertSame(constructor, creation.staticElement);
JUnitTestCase.assertSame(parameter, (creation.argumentList.arguments[0] as NamedExpression).name.label.staticElement);
_listener.assertNoErrors();
@@ -15889,7 +15906,7 @@
left.staticType = numType;
String methodName = "abs";
MethodInvocation invocation = AstFactory.methodInvocation(left, methodName, []);
- resolveNode(invocation, []);
+ _resolveNode(invocation, []);
JUnitTestCase.assertSame(getMethod(numType, methodName), invocation.methodName.staticElement);
_listener.assertNoErrors();
}
@@ -15905,7 +15922,7 @@
SimpleIdentifier left = AstFactory.identifier3("i");
left.staticType = classA.type;
MethodInvocation invocation = AstFactory.methodInvocation(left, methodName, [AstFactory.namedExpression2(parameterName, AstFactory.integer(0))]);
- resolveNode(invocation, []);
+ _resolveNode(invocation, []);
JUnitTestCase.assertSame(method, invocation.methodName.staticElement);
JUnitTestCase.assertSame(parameter, (invocation.argumentList.arguments[0] as NamedExpression).name.label.staticElement);
_listener.assertNoErrors();
@@ -15916,20 +15933,20 @@
SimpleIdentifier operand = AstFactory.identifier3("i");
operand.staticType = numType;
PostfixExpression expression = AstFactory.postfixExpression(operand, TokenType.PLUS_PLUS);
- resolveNode(expression, []);
+ _resolveNode(expression, []);
JUnitTestCase.assertEquals(getMethod(numType, "+"), expression.staticElement);
_listener.assertNoErrors();
}
void test_visitPrefixedIdentifier_dynamic() {
- Type2 dynamicType = _typeProvider.dynamicType;
+ DartType dynamicType = _typeProvider.dynamicType;
SimpleIdentifier target = AstFactory.identifier3("a");
VariableElementImpl variable = ElementFactory.localVariableElement(target);
variable.type = dynamicType;
target.staticElement = variable;
target.staticType = dynamicType;
PrefixedIdentifier identifier = AstFactory.identifier(target, AstFactory.identifier3("b"));
- resolveNode(identifier, []);
+ _resolveNode(identifier, []);
JUnitTestCase.assertNull(identifier.staticElement);
JUnitTestCase.assertNull(identifier.identifier.staticElement);
_listener.assertNoErrors();
@@ -15946,7 +15963,7 @@
target.staticElement = variable;
target.staticType = classA.type;
PrefixedIdentifier identifier = AstFactory.identifier(target, AstFactory.identifier3(getterName));
- resolveNode(identifier, []);
+ _resolveNode(identifier, []);
JUnitTestCase.assertSame(getter, identifier.staticElement);
JUnitTestCase.assertSame(getter, identifier.identifier.staticElement);
_listener.assertNoErrors();
@@ -15965,7 +15982,7 @@
target.staticType = classA.type;
PrefixedIdentifier identifier = AstFactory.identifier(target, AstFactory.identifier3(propName));
// resolve
- resolveNode(identifier, []);
+ _resolveNode(identifier, []);
JUnitTestCase.assertSame(getter, identifier.staticElement);
JUnitTestCase.assertSame(getter, identifier.identifier.staticElement);
_listener.assertNoErrors();
@@ -15987,7 +16004,7 @@
PrefixedIdentifier identifier = AstFactory.identifier(target, AstFactory.identifier3(propName));
AstFactory.assignmentExpression(identifier, TokenType.EQ, AstFactory.nullLiteral());
// resolve
- resolveNode(identifier, []);
+ _resolveNode(identifier, []);
JUnitTestCase.assertSame(method, identifier.staticElement);
JUnitTestCase.assertSame(method, identifier.identifier.staticElement);
_listener.assertNoErrors();
@@ -16007,7 +16024,7 @@
PrefixedIdentifier identifier = AstFactory.identifier(target, AstFactory.identifier3(propName));
AstFactory.assignmentExpression(identifier, TokenType.EQ, AstFactory.nullLiteral());
// resolve
- resolveNode(identifier, []);
+ _resolveNode(identifier, []);
JUnitTestCase.assertSame(setter, identifier.staticElement);
JUnitTestCase.assertSame(setter, identifier.identifier.staticElement);
_listener.assertNoErrors();
@@ -16018,7 +16035,7 @@
SimpleIdentifier operand = AstFactory.identifier3("i");
operand.staticType = numType;
PrefixExpression expression = AstFactory.prefixExpression(TokenType.PLUS_PLUS, operand);
- resolveNode(expression, []);
+ _resolveNode(expression, []);
JUnitTestCase.assertEquals(getMethod(numType, "+"), expression.staticElement);
_listener.assertNoErrors();
}
@@ -16031,7 +16048,7 @@
SimpleIdentifier target = AstFactory.identifier3("a");
target.staticType = classA.type;
PropertyAccess access = AstFactory.propertyAccess2(target, getterName);
- resolveNode(access, []);
+ _resolveNode(access, []);
JUnitTestCase.assertSame(getter, access.propertyName.staticElement);
_listener.assertNoErrors();
}
@@ -16053,7 +16070,7 @@
target.staticType = ElementFactory.classElement("B", classA.type, []).type;
PropertyAccess access = AstFactory.propertyAccess2(target, getterName);
AstFactory.methodDeclaration2(null, null, null, null, AstFactory.identifier3("m"), AstFactory.formalParameterList([]), AstFactory.expressionFunctionBody(access));
- resolveNode(access, []);
+ _resolveNode(access, []);
JUnitTestCase.assertSame(getter, access.propertyName.staticElement);
_listener.assertNoErrors();
}
@@ -16067,7 +16084,7 @@
target.staticType = classA.type;
PropertyAccess access = AstFactory.propertyAccess2(target, setterName);
AstFactory.assignmentExpression(access, TokenType.EQ, AstFactory.integer(0));
- resolveNode(access, []);
+ _resolveNode(access, []);
JUnitTestCase.assertSame(setter, access.propertyName.staticElement);
_listener.assertNoErrors();
}
@@ -16076,14 +16093,14 @@
InterfaceType doubleType = _typeProvider.doubleType;
String fieldName = "NAN";
SimpleIdentifier node = AstFactory.identifier3(fieldName);
- resolveInClass(node, doubleType.element);
+ _resolveInClass(node, doubleType.element);
JUnitTestCase.assertEquals(getGetter(doubleType, fieldName), node.staticElement);
_listener.assertNoErrors();
}
void test_visitSimpleIdentifier_dynamic() {
SimpleIdentifier node = AstFactory.identifier3("dynamic");
- resolveIdentifier(node, []);
+ _resolveIdentifier(node, []);
JUnitTestCase.assertSame(_typeProvider.dynamicType.element, node.staticElement);
JUnitTestCase.assertSame(_typeProvider.typeType, node.staticType);
_listener.assertNoErrors();
@@ -16092,7 +16109,7 @@
void test_visitSimpleIdentifier_lexicalScope() {
SimpleIdentifier node = AstFactory.identifier3("i");
VariableElementImpl element = ElementFactory.localVariableElement(node);
- JUnitTestCase.assertSame(element, resolveIdentifier(node, [element]));
+ JUnitTestCase.assertSame(element, _resolveIdentifier(node, [element]));
_listener.assertNoErrors();
}
@@ -16105,7 +16122,7 @@
classA.accessors = <PropertyAccessorElement> [field.getter, field.setter];
SimpleIdentifier node = AstFactory.identifier3(fieldName);
AstFactory.assignmentExpression(node, TokenType.EQ, AstFactory.integer(0));
- resolveInClass(node, classA);
+ _resolveInClass(node, classA);
Element element = node.staticElement;
EngineTestCase.assertInstanceOf((obj) => obj is PropertyAccessorElement, PropertyAccessorElement, element);
JUnitTestCase.assertTrue((element as PropertyAccessorElement).isSetter);
@@ -16120,7 +16137,7 @@
ConstructorElementImpl subConstructor = ElementFactory.constructorElement2(subclass, null, []);
subclass.constructors = <ConstructorElement> [subConstructor];
SuperConstructorInvocation invocation = AstFactory.superConstructorInvocation([]);
- resolveInClass(invocation, subclass);
+ _resolveInClass(invocation, subclass);
JUnitTestCase.assertEquals(superConstructor, invocation.staticElement);
_listener.assertNoErrors();
}
@@ -16136,7 +16153,7 @@
ConstructorElementImpl subConstructor = ElementFactory.constructorElement2(subclass, null, []);
subclass.constructors = <ConstructorElement> [subConstructor];
SuperConstructorInvocation invocation = AstFactory.superConstructorInvocation([AstFactory.namedExpression2(parameterName, AstFactory.integer(0))]);
- resolveInClass(invocation, subclass);
+ _resolveInClass(invocation, subclass);
JUnitTestCase.assertEquals(superConstructor, invocation.staticElement);
JUnitTestCase.assertSame(parameter, (invocation.argumentList.arguments[0] as NamedExpression).name.label.staticElement);
_listener.assertNoErrors();
@@ -16147,7 +16164,7 @@
*
* @return the resolver that was created
*/
- ElementResolver createResolver() {
+ ElementResolver _createResolver() {
AnalysisContextImpl context = new AnalysisContextImpl();
SourceFactory sourceFactory = new SourceFactory([new DartUriResolver(DirectoryBasedDartSdk.defaultSdk)]);
context.sourceFactory = sourceFactory;
@@ -16174,8 +16191,8 @@
* @param labelElement the label element to be defined in the statement's label scope
* @return the element to which the statement's label was resolved
*/
- Element resolveBreak(BreakStatement statement, LabelElementImpl labelElement) {
- resolveStatement(statement, labelElement);
+ Element _resolveBreak(BreakStatement statement, LabelElementImpl labelElement) {
+ _resolveStatement(statement, labelElement);
return statement.label.staticElement;
}
@@ -16187,8 +16204,8 @@
* @param labelElement the label element to be defined in the statement's label scope
* @return the element to which the statement's label was resolved
*/
- Element resolveContinue(ContinueStatement statement, LabelElementImpl labelElement) {
- resolveStatement(statement, labelElement);
+ Element _resolveContinue(ContinueStatement statement, LabelElementImpl labelElement) {
+ _resolveStatement(statement, labelElement);
return statement.label.staticElement;
}
@@ -16201,8 +16218,8 @@
* being resolved
* @return the element to which the expression was resolved
*/
- Element resolveIdentifier(Identifier node, List<Element> definedElements) {
- resolveNode(node, definedElements);
+ Element _resolveIdentifier(Identifier node, List<Element> definedElements) {
+ _resolveNode(node, definedElements);
return node.staticElement;
}
@@ -16214,7 +16231,7 @@
* @param enclosingClass the element representing the class enclosing the identifier
* @return the element to which the expression was resolved
*/
- void resolveInClass(AstNode node, ClassElement enclosingClass) {
+ void _resolveInClass(AstNode node, ClassElement enclosingClass) {
try {
Scope outerScope = _visitor.nameScope_J2DAccessor as Scope;
try {
@@ -16240,8 +16257,8 @@
* being resolved
* @return the element to which the expression was resolved
*/
- Element resolveIndexExpression(IndexExpression node, List<Element> definedElements) {
- resolveNode(node, definedElements);
+ Element _resolveIndexExpression(IndexExpression node, List<Element> definedElements) {
+ _resolveNode(node, definedElements);
return node.staticElement;
}
@@ -16254,7 +16271,7 @@
* being resolved
* @return the element to which the expression was resolved
*/
- void resolveNode(AstNode node, List<Element> definedElements) {
+ void _resolveNode(AstNode node, List<Element> definedElements) {
try {
Scope outerScope = _visitor.nameScope_J2DAccessor as Scope;
try {
@@ -16280,7 +16297,7 @@
* @param labelElement the label element to be defined in the statement's label scope
* @return the element to which the statement's label was resolved
*/
- void resolveStatement(Statement statement, LabelElementImpl labelElement) {
+ void _resolveStatement(Statement statement, LabelElementImpl labelElement) {
try {
LabelScope outerScope = _visitor.labelScope_J2DAccessor as LabelScope;
try {
@@ -19954,7 +19971,7 @@
/**
* The type representing the type 'bottom'.
*/
- Type2 _bottomType;
+ DartType _bottomType;
/**
* The type representing the built-in type 'double'.
@@ -19969,7 +19986,7 @@
/**
* The type representing the built-in type 'dynamic'.
*/
- Type2 _dynamicType;
+ DartType _dynamicType;
/**
* The type representing the built-in type 'Function'.
@@ -20036,6 +20053,7 @@
*/
InterfaceType _typeType;
+ @override
InterfaceType get boolType {
if (_boolType == null) {
_boolType = ElementFactory.classElement2("bool", []).type;
@@ -20043,13 +20061,15 @@
return _boolType;
}
- Type2 get bottomType {
+ @override
+ DartType get bottomType {
if (_bottomType == null) {
_bottomType = BottomTypeImpl.instance;
}
return _bottomType;
}
+ @override
InterfaceType get deprecatedType {
if (_deprecatedType == null) {
ClassElementImpl deprecatedElement = ElementFactory.classElement2("Deprecated", []);
@@ -20059,20 +20079,23 @@
return _deprecatedType;
}
+ @override
InterfaceType get doubleType {
if (_doubleType == null) {
- initializeNumericTypes();
+ _initializeNumericTypes();
}
return _doubleType;
}
- Type2 get dynamicType {
+ @override
+ DartType get dynamicType {
if (_dynamicType == null) {
_dynamicType = DynamicTypeImpl.instance;
}
return _dynamicType;
}
+ @override
InterfaceType get functionType {
if (_functionType == null) {
_functionType = ElementFactory.classElement2("Function", []).type;
@@ -20080,9 +20103,10 @@
return _functionType;
}
+ @override
InterfaceType get intType {
if (_intType == null) {
- initializeNumericTypes();
+ _initializeNumericTypes();
}
return _intType;
}
@@ -20091,11 +20115,11 @@
if (_iterableType == null) {
ClassElementImpl iterableElement = ElementFactory.classElement2("Iterable", ["E"]);
_iterableType = iterableElement.type;
- Type2 eType = iterableElement.typeParameters[0].type;
+ DartType eType = iterableElement.typeParameters[0].type;
iterableElement.accessors = <PropertyAccessorElement> [
- ElementFactory.getterElement("iterator", false, iteratorType.substitute4(<Type2> [eType])),
+ ElementFactory.getterElement("iterator", false, iteratorType.substitute4(<DartType> [eType])),
ElementFactory.getterElement("last", false, eType)];
- propagateTypeArguments(iterableElement);
+ _propagateTypeArguments(iterableElement);
}
return _iterableType;
}
@@ -20104,46 +20128,49 @@
if (_iteratorType == null) {
ClassElementImpl iteratorElement = ElementFactory.classElement2("Iterator", ["E"]);
_iteratorType = iteratorElement.type;
- Type2 eType = iteratorElement.typeParameters[0].type;
+ DartType eType = iteratorElement.typeParameters[0].type;
iteratorElement.accessors = <PropertyAccessorElement> [ElementFactory.getterElement("current", false, eType)];
- propagateTypeArguments(iteratorElement);
+ _propagateTypeArguments(iteratorElement);
}
return _iteratorType;
}
+ @override
InterfaceType get listType {
if (_listType == null) {
ClassElementImpl listElement = ElementFactory.classElement2("List", ["E"]);
listElement.constructors = <ConstructorElement> [ElementFactory.constructorElement2(listElement, null, [])];
_listType = listElement.type;
- Type2 eType = listElement.typeParameters[0].type;
- InterfaceType iterableType = this.iterableType.substitute4(<Type2> [eType]);
+ DartType eType = listElement.typeParameters[0].type;
+ InterfaceType iterableType = this.iterableType.substitute4(<DartType> [eType]);
listElement.interfaces = <InterfaceType> [iterableType];
listElement.accessors = <PropertyAccessorElement> [ElementFactory.getterElement("length", false, intType)];
listElement.methods = <MethodElement> [
ElementFactory.methodElement("[]", eType, [intType]),
ElementFactory.methodElement("[]=", VoidTypeImpl.instance, [intType, eType]),
ElementFactory.methodElement("add", VoidTypeImpl.instance, [eType])];
- propagateTypeArguments(listElement);
+ _propagateTypeArguments(listElement);
}
return _listType;
}
+ @override
InterfaceType get mapType {
if (_mapType == null) {
ClassElementImpl mapElement = ElementFactory.classElement2("Map", ["K", "V"]);
_mapType = mapElement.type;
- Type2 kType = mapElement.typeParameters[0].type;
- Type2 vType = mapElement.typeParameters[1].type;
+ DartType kType = mapElement.typeParameters[0].type;
+ DartType vType = mapElement.typeParameters[1].type;
mapElement.accessors = <PropertyAccessorElement> [ElementFactory.getterElement("length", false, intType)];
mapElement.methods = <MethodElement> [
ElementFactory.methodElement("[]", vType, [objectType]),
ElementFactory.methodElement("[]=", VoidTypeImpl.instance, [kType, vType])];
- propagateTypeArguments(mapElement);
+ _propagateTypeArguments(mapElement);
}
return _mapType;
}
+ @override
InterfaceType get nullType {
if (_nullType == null) {
_nullType = ElementFactory.classElement2("Null", []).type;
@@ -20151,13 +20178,15 @@
return _nullType;
}
+ @override
InterfaceType get numType {
if (_numType == null) {
- initializeNumericTypes();
+ _initializeNumericTypes();
}
return _numType;
}
+ @override
InterfaceType get objectType {
if (_objectType == null) {
ClassElementImpl objectElement = ElementFactory.object;
@@ -20174,6 +20203,7 @@
return _objectType;
}
+ @override
InterfaceType get stackTraceType {
if (_stackTraceType == null) {
_stackTraceType = ElementFactory.classElement2("StackTrace", []).type;
@@ -20181,6 +20211,7 @@
return _stackTraceType;
}
+ @override
InterfaceType get stringType {
if (_stringType == null) {
_stringType = ElementFactory.classElement2("String", []).type;
@@ -20188,7 +20219,7 @@
stringElement.accessors = <PropertyAccessorElement> [
ElementFactory.getterElement("isEmpty", false, boolType),
ElementFactory.getterElement("length", false, intType),
- ElementFactory.getterElement("codeUnits", false, listType.substitute4(<Type2> [intType]))];
+ ElementFactory.getterElement("codeUnits", false, listType.substitute4(<DartType> [intType]))];
stringElement.methods = <MethodElement> [
ElementFactory.methodElement("+", _stringType, [_stringType]),
ElementFactory.methodElement("toLowerCase", _stringType, []),
@@ -20197,6 +20228,7 @@
return _stringType;
}
+ @override
InterfaceType get symbolType {
if (_symbolType == null) {
_symbolType = ElementFactory.classElement2("Symbol", []).type;
@@ -20204,6 +20236,7 @@
return _symbolType;
}
+ @override
InterfaceType get typeType {
if (_typeType == null) {
_typeType = ElementFactory.classElement2("Type", []).type;
@@ -20215,7 +20248,7 @@
* Initialize the numeric types. They are created as a group so that we can (a) create the right
* hierarchy and (b) add members to them.
*/
- void initializeNumericTypes() {
+ void _initializeNumericTypes() {
//
// Create the type hierarchy.
//
@@ -20310,8 +20343,8 @@
*
* @param classElement the element representing the class with type parameters
*/
- void propagateTypeArguments(ClassElementImpl classElement) {
- List<Type2> typeArguments = TypeParameterTypeImpl.getTypes(classElement.typeParameters);
+ void _propagateTypeArguments(ClassElementImpl classElement) {
+ List<DartType> typeArguments = TypeParameterTypeImpl.getTypes(classElement.typeParameters);
for (PropertyAccessorElement accessor in classElement.accessors) {
FunctionTypeImpl functionType = accessor.type as FunctionTypeImpl;
functionType.typeArguments = typeArguments;
@@ -20393,7 +20426,7 @@
InterfaceType elementType = elementElement.type;
ClassElementImpl documentElement = ElementFactory.classElement("Document", elementType, []);
ClassElementImpl htmlDocumentElement = ElementFactory.classElement("HtmlDocument", documentElement.type, []);
- htmlDocumentElement.methods = <MethodElement> [ElementFactory.methodElement("query", elementType, <Type2> [provider.stringType])];
+ htmlDocumentElement.methods = <MethodElement> [ElementFactory.methodElement("query", elementType, <DartType> [provider.stringType])];
htmlUnit.types = <ClassElement> [
ElementFactory.classElement("AnchorElement", elementType, []),
ElementFactory.classElement("BodyElement", elementType, []),
@@ -20599,7 +20632,7 @@
class IncrementalResolverTest extends ResolverTestCase {
void test_resolve() {
- MethodDeclaration method = resolveMethod(EngineTestCase.createSource([
+ MethodDeclaration method = _resolveMethod(EngineTestCase.createSource([
"class C {",
" int m(int a) {",
" return a + a;",
@@ -20616,7 +20649,7 @@
JUnitTestCase.assertSame(leftElement, rightElement);
}
- MethodDeclaration resolveMethod(String content) {
+ MethodDeclaration _resolveMethod(String content) {
Source source = addSource(content);
LibraryElement library = resolve(source);
CompilationUnit unit = resolveCompilationUnit(source, library);
@@ -20689,39 +20722,58 @@
writer.print("Failed to resolve ");
writer.print(_unresolvedNodes.length);
writer.println(" nodes:");
- printNodes(writer, _unresolvedNodes);
+ _printNodes(writer, _unresolvedNodes);
}
if (!_wrongTypedNodes.isEmpty) {
writer.print("Resolved ");
writer.print(_wrongTypedNodes.length);
writer.println(" to the wrong type of element:");
- printNodes(writer, _wrongTypedNodes);
+ _printNodes(writer, _wrongTypedNodes);
}
JUnitTestCase.fail(writer.toString());
}
}
+ @override
+ Object visitAnnotation(Annotation node) {
+ node.visitChildren(this);
+ ElementAnnotation elementAnnotation = node.elementAnnotation;
+ if (elementAnnotation == null) {
+ if (_knownExceptions == null || !_knownExceptions.contains(node)) {
+ _unresolvedNodes.add(node);
+ }
+ } else if (elementAnnotation is! ElementAnnotation) {
+ _wrongTypedNodes.add(node);
+ }
+ return null;
+ }
+
+ @override
Object visitBinaryExpression(BinaryExpression node) {
node.visitChildren(this);
if (!node.operator.isUserDefinableOperator) {
return null;
}
- Type2 operandType = node.leftOperand.staticType;
+ DartType operandType = node.leftOperand.staticType;
if (operandType == null || operandType.isDynamic) {
return null;
}
- return checkResolved(node, node.staticElement, (node) => node is MethodElement);
+ return _checkResolved(node, node.staticElement, (node) => node is MethodElement);
}
+ @override
Object visitCommentReference(CommentReference node) => null;
+ @override
Object visitCompilationUnit(CompilationUnit node) {
node.visitChildren(this);
- return checkResolved(node, node.element, (node) => node is CompilationUnitElement);
+ return _checkResolved(node, node.element, (node) => node is CompilationUnitElement);
}
- Object visitExportDirective(ExportDirective node) => checkResolved(node, node.element, (node) => node is ExportElement);
+ @override
+ Object visitExportDirective(ExportDirective node) => _checkResolved(node, node.element, (node) => node is ExportElement);
+ @override
Object visitFunctionDeclaration(FunctionDeclaration node) {
node.visitChildren(this);
if (node.element is LibraryElement) {
@@ -20730,6 +20782,7 @@
return null;
}
+ @override
Object visitFunctionExpressionInvocation(FunctionExpressionInvocation node) {
node.visitChildren(this);
// TODO(brianwilkerson) If we start resolving function expressions, then conditionally check to
@@ -20737,77 +20790,88 @@
return null;
}
+ @override
Object visitImportDirective(ImportDirective node) {
// Not sure how to test the combinators given that it isn't an error if the names are not defined.
- checkResolved(node, node.element, (node) => node is ImportElement);
+ _checkResolved(node, node.element, (node) => node is ImportElement);
SimpleIdentifier prefix = node.prefix;
if (prefix == null) {
return null;
}
- return checkResolved(prefix, prefix.staticElement, (node) => node is PrefixElement);
+ return _checkResolved(prefix, prefix.staticElement, (node) => node is PrefixElement);
}
+ @override
Object visitIndexExpression(IndexExpression node) {
node.visitChildren(this);
- Type2 targetType = node.realTarget.staticType;
+ DartType targetType = node.realTarget.staticType;
if (targetType == null || targetType.isDynamic) {
return null;
}
- return checkResolved(node, node.staticElement, (node) => node is MethodElement);
+ return _checkResolved(node, node.staticElement, (node) => node is MethodElement);
}
- Object visitLibraryDirective(LibraryDirective node) => checkResolved(node, node.element, (node) => node is LibraryElement);
+ @override
+ Object visitLibraryDirective(LibraryDirective node) => _checkResolved(node, node.element, (node) => node is LibraryElement);
+ @override
Object visitNamedExpression(NamedExpression node) => node.expression.accept(this);
- Object visitPartDirective(PartDirective node) => checkResolved(node, node.element, (node) => node is CompilationUnitElement);
+ @override
+ Object visitPartDirective(PartDirective node) => _checkResolved(node, node.element, (node) => node is CompilationUnitElement);
- Object visitPartOfDirective(PartOfDirective node) => checkResolved(node, node.element, (node) => node is LibraryElement);
+ @override
+ Object visitPartOfDirective(PartOfDirective node) => _checkResolved(node, node.element, (node) => node is LibraryElement);
+ @override
Object visitPostfixExpression(PostfixExpression node) {
node.visitChildren(this);
if (!node.operator.isUserDefinableOperator) {
return null;
}
- Type2 operandType = node.operand.staticType;
+ DartType operandType = node.operand.staticType;
if (operandType == null || operandType.isDynamic) {
return null;
}
- return checkResolved(node, node.staticElement, (node) => node is MethodElement);
+ return _checkResolved(node, node.staticElement, (node) => node is MethodElement);
}
+ @override
Object visitPrefixedIdentifier(PrefixedIdentifier node) {
SimpleIdentifier prefix = node.prefix;
prefix.accept(this);
- Type2 prefixType = prefix.staticType;
+ DartType prefixType = prefix.staticType;
if (prefixType == null || prefixType.isDynamic) {
return null;
}
- return checkResolved(node, node.staticElement, null);
+ return _checkResolved(node, node.staticElement, null);
}
+ @override
Object visitPrefixExpression(PrefixExpression node) {
node.visitChildren(this);
if (!node.operator.isUserDefinableOperator) {
return null;
}
- Type2 operandType = node.operand.staticType;
+ DartType operandType = node.operand.staticType;
if (operandType == null || operandType.isDynamic) {
return null;
}
- return checkResolved(node, node.staticElement, (node) => node is MethodElement);
+ return _checkResolved(node, node.staticElement, (node) => node is MethodElement);
}
+ @override
Object visitPropertyAccess(PropertyAccess node) {
Expression target = node.realTarget;
target.accept(this);
- Type2 targetType = target.staticType;
+ DartType targetType = target.staticType;
if (targetType == null || targetType.isDynamic) {
return null;
}
return node.propertyName.accept(this);
}
+ @override
Object visitSimpleIdentifier(SimpleIdentifier node) {
if (node.name == "void") {
return null;
@@ -20817,16 +20881,16 @@
MethodInvocation invocation = parent;
if (identical(invocation.methodName, node)) {
Expression target = invocation.realTarget;
- Type2 targetType = target == null ? null : target.staticType;
+ DartType targetType = target == null ? null : target.staticType;
if (targetType == null || targetType.isDynamic) {
return null;
}
}
}
- return checkResolved(node, node.staticElement, null);
+ return _checkResolved(node, node.staticElement, null);
}
- Object checkResolved(AstNode node, Element element, Predicate<Element> predicate) {
+ Object _checkResolved(AstNode node, Element element, Predicate<Element> predicate) {
if (element == null) {
if (_knownExceptions == null || !_knownExceptions.contains(node)) {
_unresolvedNodes.add(node);
@@ -20839,7 +20903,7 @@
return null;
}
- String getFileName(AstNode node) {
+ String _getFileName(AstNode node) {
// TODO (jwren) there are two copies of this method, one here and one in StaticTypeVerifier,
// they should be resolved into a single method
if (node != null) {
@@ -20858,12 +20922,12 @@
return "<unknown file- ASTNode is null>";
}
- void printNodes(PrintStringWriter writer, List<AstNode> nodes) {
+ void _printNodes(PrintStringWriter writer, List<AstNode> nodes) {
for (AstNode identifier in nodes) {
writer.print(" ");
writer.print(identifier.toString());
writer.print(" (");
- writer.print(getFileName(identifier));
+ writer.print(_getFileName(identifier));
writer.print(" : ");
writer.print(identifier.offset);
writer.println(")");
@@ -20877,6 +20941,7 @@
*/
InterfaceType _nullType;
+ @override
void setUp() {
_nullType = new TestTypeProvider().nullType;
}
@@ -21017,23 +21082,24 @@
_listener.assertNoErrors();
}
+ @override
void setUp() {
_listener = new GatheringErrorListener();
_typeProvider = new TestTypeProvider();
- _analyzer = createAnalyzer();
+ _analyzer = _createAnalyzer();
}
void test_visitAdjacentStrings() {
// "a" "b"
- Expression node = AstFactory.adjacentStrings([resolvedString("a"), resolvedString("b")]);
- JUnitTestCase.assertSame(_typeProvider.stringType, analyze(node));
+ Expression node = AstFactory.adjacentStrings([_resolvedString("a"), _resolvedString("b")]);
+ JUnitTestCase.assertSame(_typeProvider.stringType, _analyze(node));
_listener.assertNoErrors();
}
void test_visitArgumentDefinitionTest() {
// ?p
Expression node = AstFactory.argumentDefinitionTest("p");
- JUnitTestCase.assertSame(_typeProvider.boolType, analyze(node));
+ JUnitTestCase.assertSame(_typeProvider.boolType, _analyze(node));
_listener.assertNoErrors();
}
@@ -21044,78 +21110,78 @@
InterfaceType superclassType = superclass.type;
ClassElement subclass = ElementFactory.classElement("B", superclassType, []);
Expression node = AstFactory.asExpression(AstFactory.thisExpression(), AstFactory.typeName(subclass, []));
- JUnitTestCase.assertSame(subclass.type, analyze3(node, superclassType));
+ JUnitTestCase.assertSame(subclass.type, _analyze3(node, superclassType));
_listener.assertNoErrors();
}
void test_visitAssignmentExpression_compound() {
// i += 1
InterfaceType numType = _typeProvider.numType;
- SimpleIdentifier identifier = resolvedVariable(_typeProvider.intType, "i");
- AssignmentExpression node = AstFactory.assignmentExpression(identifier, TokenType.PLUS_EQ, resolvedInteger(1));
+ SimpleIdentifier identifier = _resolvedVariable(_typeProvider.intType, "i");
+ AssignmentExpression node = AstFactory.assignmentExpression(identifier, TokenType.PLUS_EQ, _resolvedInteger(1));
MethodElement plusMethod = getMethod(numType, "+");
node.staticElement = plusMethod;
- JUnitTestCase.assertSame(numType, analyze(node));
+ JUnitTestCase.assertSame(numType, _analyze(node));
_listener.assertNoErrors();
}
void test_visitAssignmentExpression_simple() {
// i = 0
InterfaceType intType = _typeProvider.intType;
- Expression node = AstFactory.assignmentExpression(resolvedVariable(intType, "i"), TokenType.EQ, resolvedInteger(0));
- JUnitTestCase.assertSame(intType, analyze(node));
+ Expression node = AstFactory.assignmentExpression(_resolvedVariable(intType, "i"), TokenType.EQ, _resolvedInteger(0));
+ JUnitTestCase.assertSame(intType, _analyze(node));
_listener.assertNoErrors();
}
void test_visitBinaryExpression_equals() {
// 2 == 3
- Expression node = AstFactory.binaryExpression(resolvedInteger(2), TokenType.EQ_EQ, resolvedInteger(3));
- JUnitTestCase.assertSame(_typeProvider.boolType, analyze(node));
+ Expression node = AstFactory.binaryExpression(_resolvedInteger(2), TokenType.EQ_EQ, _resolvedInteger(3));
+ JUnitTestCase.assertSame(_typeProvider.boolType, _analyze(node));
_listener.assertNoErrors();
}
void test_visitBinaryExpression_logicalAnd() {
// false && true
Expression node = AstFactory.binaryExpression(AstFactory.booleanLiteral(false), TokenType.AMPERSAND_AMPERSAND, AstFactory.booleanLiteral(true));
- JUnitTestCase.assertSame(_typeProvider.boolType, analyze(node));
+ JUnitTestCase.assertSame(_typeProvider.boolType, _analyze(node));
_listener.assertNoErrors();
}
void test_visitBinaryExpression_logicalOr() {
// false || true
Expression node = AstFactory.binaryExpression(AstFactory.booleanLiteral(false), TokenType.BAR_BAR, AstFactory.booleanLiteral(true));
- JUnitTestCase.assertSame(_typeProvider.boolType, analyze(node));
+ JUnitTestCase.assertSame(_typeProvider.boolType, _analyze(node));
_listener.assertNoErrors();
}
void test_visitBinaryExpression_notEquals() {
// 2 != 3
- Expression node = AstFactory.binaryExpression(resolvedInteger(2), TokenType.BANG_EQ, resolvedInteger(3));
- JUnitTestCase.assertSame(_typeProvider.boolType, analyze(node));
+ Expression node = AstFactory.binaryExpression(_resolvedInteger(2), TokenType.BANG_EQ, _resolvedInteger(3));
+ JUnitTestCase.assertSame(_typeProvider.boolType, _analyze(node));
_listener.assertNoErrors();
}
void test_visitBinaryExpression_plusID() {
// 1 + 2.0
- BinaryExpression node = AstFactory.binaryExpression(resolvedInteger(1), TokenType.PLUS, resolvedDouble(2.0));
+ BinaryExpression node = AstFactory.binaryExpression(_resolvedInteger(1), TokenType.PLUS, _resolvedDouble(2.0));
node.staticElement = getMethod(_typeProvider.numType, "+");
- JUnitTestCase.assertSame(_typeProvider.doubleType, analyze(node));
+ JUnitTestCase.assertSame(_typeProvider.doubleType, _analyze(node));
_listener.assertNoErrors();
}
void test_visitBinaryExpression_plusII() {
// 1 + 2
- BinaryExpression node = AstFactory.binaryExpression(resolvedInteger(1), TokenType.PLUS, resolvedInteger(2));
+ BinaryExpression node = AstFactory.binaryExpression(_resolvedInteger(1), TokenType.PLUS, _resolvedInteger(2));
node.staticElement = getMethod(_typeProvider.numType, "+");
- JUnitTestCase.assertSame(_typeProvider.intType, analyze(node));
+ JUnitTestCase.assertSame(_typeProvider.intType, _analyze(node));
_listener.assertNoErrors();
}
void test_visitBinaryExpression_slash() {
// 2 / 2
- BinaryExpression node = AstFactory.binaryExpression(resolvedInteger(2), TokenType.SLASH, resolvedInteger(2));
+ BinaryExpression node = AstFactory.binaryExpression(_resolvedInteger(2), TokenType.SLASH, _resolvedInteger(2));
node.staticElement = getMethod(_typeProvider.numType, "/");
- JUnitTestCase.assertSame(_typeProvider.doubleType, analyze(node));
+ JUnitTestCase.assertSame(_typeProvider.doubleType, _analyze(node));
_listener.assertNoErrors();
}
@@ -21128,207 +21194,207 @@
InterfaceType typeA = classA.type;
MethodElement operator = ElementFactory.methodElement("*", typeA, [_typeProvider.doubleType]);
classA.methods = <MethodElement> [operator];
- BinaryExpression node = AstFactory.binaryExpression(AstFactory.asExpression(AstFactory.identifier3("a"), AstFactory.typeName(classA, [])), TokenType.PLUS, resolvedDouble(2.0));
+ BinaryExpression node = AstFactory.binaryExpression(AstFactory.asExpression(AstFactory.identifier3("a"), AstFactory.typeName(classA, [])), TokenType.PLUS, _resolvedDouble(2.0));
node.staticElement = operator;
- JUnitTestCase.assertSame(typeA, analyze(node));
+ JUnitTestCase.assertSame(typeA, _analyze(node));
_listener.assertNoErrors();
}
void test_visitBinaryExpression_starID() {
// 1 * 2.0
- BinaryExpression node = AstFactory.binaryExpression(resolvedInteger(1), TokenType.PLUS, resolvedDouble(2.0));
+ BinaryExpression node = AstFactory.binaryExpression(_resolvedInteger(1), TokenType.PLUS, _resolvedDouble(2.0));
node.staticElement = getMethod(_typeProvider.numType, "*");
- JUnitTestCase.assertSame(_typeProvider.doubleType, analyze(node));
+ JUnitTestCase.assertSame(_typeProvider.doubleType, _analyze(node));
_listener.assertNoErrors();
}
void test_visitBooleanLiteral_false() {
// false
Expression node = AstFactory.booleanLiteral(false);
- JUnitTestCase.assertSame(_typeProvider.boolType, analyze(node));
+ JUnitTestCase.assertSame(_typeProvider.boolType, _analyze(node));
_listener.assertNoErrors();
}
void test_visitBooleanLiteral_true() {
// true
Expression node = AstFactory.booleanLiteral(true);
- JUnitTestCase.assertSame(_typeProvider.boolType, analyze(node));
+ JUnitTestCase.assertSame(_typeProvider.boolType, _analyze(node));
_listener.assertNoErrors();
}
void test_visitCascadeExpression() {
// a..length
- Expression node = AstFactory.cascadeExpression(resolvedString("a"), [AstFactory.propertyAccess2(null, "length")]);
- JUnitTestCase.assertSame(_typeProvider.stringType, analyze(node));
+ Expression node = AstFactory.cascadeExpression(_resolvedString("a"), [AstFactory.propertyAccess2(null, "length")]);
+ JUnitTestCase.assertSame(_typeProvider.stringType, _analyze(node));
_listener.assertNoErrors();
}
void test_visitConditionalExpression_differentTypes() {
// true ? 1.0 : 0
- Expression node = AstFactory.conditionalExpression(AstFactory.booleanLiteral(true), resolvedDouble(1.0), resolvedInteger(0));
- JUnitTestCase.assertSame(_typeProvider.numType, analyze(node));
+ Expression node = AstFactory.conditionalExpression(AstFactory.booleanLiteral(true), _resolvedDouble(1.0), _resolvedInteger(0));
+ JUnitTestCase.assertSame(_typeProvider.numType, _analyze(node));
_listener.assertNoErrors();
}
void test_visitConditionalExpression_sameTypes() {
// true ? 1 : 0
- Expression node = AstFactory.conditionalExpression(AstFactory.booleanLiteral(true), resolvedInteger(1), resolvedInteger(0));
- JUnitTestCase.assertSame(_typeProvider.intType, analyze(node));
+ Expression node = AstFactory.conditionalExpression(AstFactory.booleanLiteral(true), _resolvedInteger(1), _resolvedInteger(0));
+ JUnitTestCase.assertSame(_typeProvider.intType, _analyze(node));
_listener.assertNoErrors();
}
void test_visitDoubleLiteral() {
// 4.33
Expression node = AstFactory.doubleLiteral(4.33);
- JUnitTestCase.assertSame(_typeProvider.doubleType, analyze(node));
+ JUnitTestCase.assertSame(_typeProvider.doubleType, _analyze(node));
_listener.assertNoErrors();
}
void test_visitFunctionExpression_named_block() {
// ({p1 : 0, p2 : 0}) {}
- Type2 dynamicType = _typeProvider.dynamicType;
- FormalParameter p1 = AstFactory.namedFormalParameter(AstFactory.simpleFormalParameter3("p1"), resolvedInteger(0));
- setType(p1, dynamicType);
- FormalParameter p2 = AstFactory.namedFormalParameter(AstFactory.simpleFormalParameter3("p2"), resolvedInteger(0));
- setType(p2, dynamicType);
- FunctionExpression node = resolvedFunctionExpression(AstFactory.formalParameterList([p1, p2]), AstFactory.blockFunctionBody2([]));
- analyze5(p1);
- analyze5(p2);
- Type2 resultType = analyze(node);
- Map<String, Type2> expectedNamedTypes = new Map<String, Type2>();
+ DartType dynamicType = _typeProvider.dynamicType;
+ FormalParameter p1 = AstFactory.namedFormalParameter(AstFactory.simpleFormalParameter3("p1"), _resolvedInteger(0));
+ _setType(p1, dynamicType);
+ FormalParameter p2 = AstFactory.namedFormalParameter(AstFactory.simpleFormalParameter3("p2"), _resolvedInteger(0));
+ _setType(p2, dynamicType);
+ FunctionExpression node = _resolvedFunctionExpression(AstFactory.formalParameterList([p1, p2]), AstFactory.blockFunctionBody2([]));
+ _analyze5(p1);
+ _analyze5(p2);
+ DartType resultType = _analyze(node);
+ Map<String, DartType> expectedNamedTypes = new Map<String, DartType>();
expectedNamedTypes["p1"] = dynamicType;
expectedNamedTypes["p2"] = dynamicType;
- assertFunctionType(dynamicType, null, null, expectedNamedTypes, resultType);
+ _assertFunctionType(dynamicType, null, null, expectedNamedTypes, resultType);
_listener.assertNoErrors();
}
void test_visitFunctionExpression_named_expression() {
// ({p : 0}) -> 0;
- Type2 dynamicType = _typeProvider.dynamicType;
- FormalParameter p = AstFactory.namedFormalParameter(AstFactory.simpleFormalParameter3("p"), resolvedInteger(0));
- setType(p, dynamicType);
- FunctionExpression node = resolvedFunctionExpression(AstFactory.formalParameterList([p]), AstFactory.expressionFunctionBody(resolvedInteger(0)));
- analyze5(p);
- Type2 resultType = analyze(node);
- Map<String, Type2> expectedNamedTypes = new Map<String, Type2>();
+ DartType dynamicType = _typeProvider.dynamicType;
+ FormalParameter p = AstFactory.namedFormalParameter(AstFactory.simpleFormalParameter3("p"), _resolvedInteger(0));
+ _setType(p, dynamicType);
+ FunctionExpression node = _resolvedFunctionExpression(AstFactory.formalParameterList([p]), AstFactory.expressionFunctionBody(_resolvedInteger(0)));
+ _analyze5(p);
+ DartType resultType = _analyze(node);
+ Map<String, DartType> expectedNamedTypes = new Map<String, DartType>();
expectedNamedTypes["p"] = dynamicType;
- assertFunctionType(_typeProvider.intType, null, null, expectedNamedTypes, resultType);
+ _assertFunctionType(_typeProvider.intType, null, null, expectedNamedTypes, resultType);
_listener.assertNoErrors();
}
void test_visitFunctionExpression_normal_block() {
// (p1, p2) {}
- Type2 dynamicType = _typeProvider.dynamicType;
+ DartType dynamicType = _typeProvider.dynamicType;
FormalParameter p1 = AstFactory.simpleFormalParameter3("p1");
- setType(p1, dynamicType);
+ _setType(p1, dynamicType);
FormalParameter p2 = AstFactory.simpleFormalParameter3("p2");
- setType(p2, dynamicType);
- FunctionExpression node = resolvedFunctionExpression(AstFactory.formalParameterList([p1, p2]), AstFactory.blockFunctionBody2([]));
- analyze5(p1);
- analyze5(p2);
- Type2 resultType = analyze(node);
- assertFunctionType(dynamicType, <Type2> [dynamicType, dynamicType], null, null, resultType);
+ _setType(p2, dynamicType);
+ FunctionExpression node = _resolvedFunctionExpression(AstFactory.formalParameterList([p1, p2]), AstFactory.blockFunctionBody2([]));
+ _analyze5(p1);
+ _analyze5(p2);
+ DartType resultType = _analyze(node);
+ _assertFunctionType(dynamicType, <DartType> [dynamicType, dynamicType], null, null, resultType);
_listener.assertNoErrors();
}
void test_visitFunctionExpression_normal_expression() {
// (p1, p2) -> 0
- Type2 dynamicType = _typeProvider.dynamicType;
+ DartType dynamicType = _typeProvider.dynamicType;
FormalParameter p = AstFactory.simpleFormalParameter3("p");
- setType(p, dynamicType);
- FunctionExpression node = resolvedFunctionExpression(AstFactory.formalParameterList([p]), AstFactory.expressionFunctionBody(resolvedInteger(0)));
- analyze5(p);
- Type2 resultType = analyze(node);
- assertFunctionType(_typeProvider.intType, <Type2> [dynamicType], null, null, resultType);
+ _setType(p, dynamicType);
+ FunctionExpression node = _resolvedFunctionExpression(AstFactory.formalParameterList([p]), AstFactory.expressionFunctionBody(_resolvedInteger(0)));
+ _analyze5(p);
+ DartType resultType = _analyze(node);
+ _assertFunctionType(_typeProvider.intType, <DartType> [dynamicType], null, null, resultType);
_listener.assertNoErrors();
}
void test_visitFunctionExpression_normalAndNamed_block() {
// (p1, {p2 : 0}) {}
- Type2 dynamicType = _typeProvider.dynamicType;
+ DartType dynamicType = _typeProvider.dynamicType;
FormalParameter p1 = AstFactory.simpleFormalParameter3("p1");
- setType(p1, dynamicType);
- FormalParameter p2 = AstFactory.namedFormalParameter(AstFactory.simpleFormalParameter3("p2"), resolvedInteger(0));
- setType(p2, dynamicType);
- FunctionExpression node = resolvedFunctionExpression(AstFactory.formalParameterList([p1, p2]), AstFactory.blockFunctionBody2([]));
- analyze5(p2);
- Type2 resultType = analyze(node);
- Map<String, Type2> expectedNamedTypes = new Map<String, Type2>();
+ _setType(p1, dynamicType);
+ FormalParameter p2 = AstFactory.namedFormalParameter(AstFactory.simpleFormalParameter3("p2"), _resolvedInteger(0));
+ _setType(p2, dynamicType);
+ FunctionExpression node = _resolvedFunctionExpression(AstFactory.formalParameterList([p1, p2]), AstFactory.blockFunctionBody2([]));
+ _analyze5(p2);
+ DartType resultType = _analyze(node);
+ Map<String, DartType> expectedNamedTypes = new Map<String, DartType>();
expectedNamedTypes["p2"] = dynamicType;
- assertFunctionType(dynamicType, <Type2> [dynamicType], null, expectedNamedTypes, resultType);
+ _assertFunctionType(dynamicType, <DartType> [dynamicType], null, expectedNamedTypes, resultType);
_listener.assertNoErrors();
}
void test_visitFunctionExpression_normalAndNamed_expression() {
// (p1, {p2 : 0}) -> 0
- Type2 dynamicType = _typeProvider.dynamicType;
+ DartType dynamicType = _typeProvider.dynamicType;
FormalParameter p1 = AstFactory.simpleFormalParameter3("p1");
- setType(p1, dynamicType);
- FormalParameter p2 = AstFactory.namedFormalParameter(AstFactory.simpleFormalParameter3("p2"), resolvedInteger(0));
- setType(p2, dynamicType);
- FunctionExpression node = resolvedFunctionExpression(AstFactory.formalParameterList([p1, p2]), AstFactory.expressionFunctionBody(resolvedInteger(0)));
- analyze5(p2);
- Type2 resultType = analyze(node);
- Map<String, Type2> expectedNamedTypes = new Map<String, Type2>();
+ _setType(p1, dynamicType);
+ FormalParameter p2 = AstFactory.namedFormalParameter(AstFactory.simpleFormalParameter3("p2"), _resolvedInteger(0));
+ _setType(p2, dynamicType);
+ FunctionExpression node = _resolvedFunctionExpression(AstFactory.formalParameterList([p1, p2]), AstFactory.expressionFunctionBody(_resolvedInteger(0)));
+ _analyze5(p2);
+ DartType resultType = _analyze(node);
+ Map<String, DartType> expectedNamedTypes = new Map<String, DartType>();
expectedNamedTypes["p2"] = dynamicType;
- assertFunctionType(_typeProvider.intType, <Type2> [dynamicType], null, expectedNamedTypes, resultType);
+ _assertFunctionType(_typeProvider.intType, <DartType> [dynamicType], null, expectedNamedTypes, resultType);
_listener.assertNoErrors();
}
void test_visitFunctionExpression_normalAndPositional_block() {
// (p1, [p2 = 0]) {}
- Type2 dynamicType = _typeProvider.dynamicType;
+ DartType dynamicType = _typeProvider.dynamicType;
FormalParameter p1 = AstFactory.simpleFormalParameter3("p1");
- setType(p1, dynamicType);
- FormalParameter p2 = AstFactory.positionalFormalParameter(AstFactory.simpleFormalParameter3("p2"), resolvedInteger(0));
- setType(p2, dynamicType);
- FunctionExpression node = resolvedFunctionExpression(AstFactory.formalParameterList([p1, p2]), AstFactory.blockFunctionBody2([]));
- analyze5(p1);
- analyze5(p2);
- Type2 resultType = analyze(node);
- assertFunctionType(dynamicType, <Type2> [dynamicType], <Type2> [dynamicType], null, resultType);
+ _setType(p1, dynamicType);
+ FormalParameter p2 = AstFactory.positionalFormalParameter(AstFactory.simpleFormalParameter3("p2"), _resolvedInteger(0));
+ _setType(p2, dynamicType);
+ FunctionExpression node = _resolvedFunctionExpression(AstFactory.formalParameterList([p1, p2]), AstFactory.blockFunctionBody2([]));
+ _analyze5(p1);
+ _analyze5(p2);
+ DartType resultType = _analyze(node);
+ _assertFunctionType(dynamicType, <DartType> [dynamicType], <DartType> [dynamicType], null, resultType);
_listener.assertNoErrors();
}
void test_visitFunctionExpression_normalAndPositional_expression() {
// (p1, [p2 = 0]) -> 0
- Type2 dynamicType = _typeProvider.dynamicType;
+ DartType dynamicType = _typeProvider.dynamicType;
FormalParameter p1 = AstFactory.simpleFormalParameter3("p1");
- setType(p1, dynamicType);
- FormalParameter p2 = AstFactory.positionalFormalParameter(AstFactory.simpleFormalParameter3("p2"), resolvedInteger(0));
- setType(p2, dynamicType);
- FunctionExpression node = resolvedFunctionExpression(AstFactory.formalParameterList([p1, p2]), AstFactory.expressionFunctionBody(resolvedInteger(0)));
- analyze5(p1);
- analyze5(p2);
- Type2 resultType = analyze(node);
- assertFunctionType(_typeProvider.intType, <Type2> [dynamicType], <Type2> [dynamicType], null, resultType);
+ _setType(p1, dynamicType);
+ FormalParameter p2 = AstFactory.positionalFormalParameter(AstFactory.simpleFormalParameter3("p2"), _resolvedInteger(0));
+ _setType(p2, dynamicType);
+ FunctionExpression node = _resolvedFunctionExpression(AstFactory.formalParameterList([p1, p2]), AstFactory.expressionFunctionBody(_resolvedInteger(0)));
+ _analyze5(p1);
+ _analyze5(p2);
+ DartType resultType = _analyze(node);
+ _assertFunctionType(_typeProvider.intType, <DartType> [dynamicType], <DartType> [dynamicType], null, resultType);
_listener.assertNoErrors();
}
void test_visitFunctionExpression_positional_block() {
// ([p1 = 0, p2 = 0]) {}
- Type2 dynamicType = _typeProvider.dynamicType;
- FormalParameter p1 = AstFactory.positionalFormalParameter(AstFactory.simpleFormalParameter3("p1"), resolvedInteger(0));
- setType(p1, dynamicType);
- FormalParameter p2 = AstFactory.positionalFormalParameter(AstFactory.simpleFormalParameter3("p2"), resolvedInteger(0));
- setType(p2, dynamicType);
- FunctionExpression node = resolvedFunctionExpression(AstFactory.formalParameterList([p1, p2]), AstFactory.blockFunctionBody2([]));
- analyze5(p1);
- analyze5(p2);
- Type2 resultType = analyze(node);
- assertFunctionType(dynamicType, null, <Type2> [dynamicType, dynamicType], null, resultType);
+ DartType dynamicType = _typeProvider.dynamicType;
+ FormalParameter p1 = AstFactory.positionalFormalParameter(AstFactory.simpleFormalParameter3("p1"), _resolvedInteger(0));
+ _setType(p1, dynamicType);
+ FormalParameter p2 = AstFactory.positionalFormalParameter(AstFactory.simpleFormalParameter3("p2"), _resolvedInteger(0));
+ _setType(p2, dynamicType);
+ FunctionExpression node = _resolvedFunctionExpression(AstFactory.formalParameterList([p1, p2]), AstFactory.blockFunctionBody2([]));
+ _analyze5(p1);
+ _analyze5(p2);
+ DartType resultType = _analyze(node);
+ _assertFunctionType(dynamicType, null, <DartType> [dynamicType, dynamicType], null, resultType);
_listener.assertNoErrors();
}
void test_visitFunctionExpression_positional_expression() {
// ([p1 = 0, p2 = 0]) -> 0
- Type2 dynamicType = _typeProvider.dynamicType;
- FormalParameter p = AstFactory.positionalFormalParameter(AstFactory.simpleFormalParameter3("p"), resolvedInteger(0));
- setType(p, dynamicType);
- FunctionExpression node = resolvedFunctionExpression(AstFactory.formalParameterList([p]), AstFactory.expressionFunctionBody(resolvedInteger(0)));
- analyze5(p);
- Type2 resultType = analyze(node);
- assertFunctionType(_typeProvider.intType, null, <Type2> [dynamicType], null, resultType);
+ DartType dynamicType = _typeProvider.dynamicType;
+ FormalParameter p = AstFactory.positionalFormalParameter(AstFactory.simpleFormalParameter3("p"), _resolvedInteger(0));
+ _setType(p, dynamicType);
+ FunctionExpression node = _resolvedFunctionExpression(AstFactory.formalParameterList([p]), AstFactory.expressionFunctionBody(_resolvedInteger(0)));
+ _analyze5(p);
+ DartType resultType = _analyze(node);
+ _assertFunctionType(_typeProvider.intType, null, <DartType> [dynamicType], null, resultType);
_listener.assertNoErrors();
}
@@ -21336,11 +21402,11 @@
// List a;
// a[2]
InterfaceType listType = _typeProvider.listType;
- SimpleIdentifier identifier = resolvedVariable(listType, "a");
- IndexExpression node = AstFactory.indexExpression(identifier, resolvedInteger(2));
+ SimpleIdentifier identifier = _resolvedVariable(listType, "a");
+ IndexExpression node = AstFactory.indexExpression(identifier, _resolvedInteger(2));
MethodElement indexMethod = listType.element.methods[0];
node.staticElement = indexMethod;
- JUnitTestCase.assertSame(listType.typeArguments[0], analyze(node));
+ JUnitTestCase.assertSame(listType.typeArguments[0], _analyze(node));
_listener.assertNoErrors();
}
@@ -21348,12 +21414,12 @@
// List a;
// a[2] = 0
InterfaceType listType = _typeProvider.listType;
- SimpleIdentifier identifier = resolvedVariable(listType, "a");
- IndexExpression node = AstFactory.indexExpression(identifier, resolvedInteger(2));
+ SimpleIdentifier identifier = _resolvedVariable(listType, "a");
+ IndexExpression node = AstFactory.indexExpression(identifier, _resolvedInteger(2));
MethodElement indexMethod = listType.element.methods[1];
node.staticElement = indexMethod;
AstFactory.assignmentExpression(node, TokenType.EQ, AstFactory.integer(0));
- JUnitTestCase.assertSame(listType.typeArguments[0], analyze(node));
+ JUnitTestCase.assertSame(listType.typeArguments[0], _analyze(node));
_listener.assertNoErrors();
}
@@ -21366,14 +21432,14 @@
MethodElement methodElement = getMethod(listType, "[]");
// "list" has type List<int>
SimpleIdentifier identifier = AstFactory.identifier3("list");
- InterfaceType listOfIntType = listType.substitute4(<Type2> [intType]);
+ InterfaceType listOfIntType = listType.substitute4(<DartType> [intType]);
identifier.staticType = listOfIntType;
// list[0] has MethodElement element (int) -> E
IndexExpression indexExpression = AstFactory.indexExpression(identifier, AstFactory.integer(0));
MethodElement indexMethod = MethodMember.from(methodElement, listOfIntType);
indexExpression.staticElement = indexMethod;
// analyze and assert result of the index expression
- JUnitTestCase.assertSame(intType, analyze(indexExpression));
+ JUnitTestCase.assertSame(intType, _analyze(indexExpression));
_listener.assertNoErrors();
}
@@ -21386,7 +21452,7 @@
MethodElement methodElement = getMethod(listType, "[]=");
// "list" has type List<int>
SimpleIdentifier identifier = AstFactory.identifier3("list");
- InterfaceType listOfIntType = listType.substitute4(<Type2> [intType]);
+ InterfaceType listOfIntType = listType.substitute4(<DartType> [intType]);
identifier.staticType = listOfIntType;
// list[0] has MethodElement element (int) -> E
IndexExpression indexExpression = AstFactory.indexExpression(identifier, AstFactory.integer(0));
@@ -21395,7 +21461,7 @@
// list[0] should be in a setter context
AstFactory.assignmentExpression(indexExpression, TokenType.EQ, AstFactory.integer(0));
// analyze and assert result of the index expression
- JUnitTestCase.assertSame(intType, analyze(indexExpression));
+ JUnitTestCase.assertSame(intType, _analyze(indexExpression));
_listener.assertNoErrors();
}
@@ -21410,7 +21476,7 @@
classElement.constructors = <ConstructorElement> [constructor];
InstanceCreationExpression node = AstFactory.instanceCreationExpression2(null, AstFactory.typeName(classElement, []), [AstFactory.identifier3(constructorName)]);
node.staticElement = constructor;
- JUnitTestCase.assertSame(classElement.type, analyze(node));
+ JUnitTestCase.assertSame(classElement.type, _analyze(node));
_listener.assertNoErrors();
}
@@ -21424,11 +21490,11 @@
FunctionTypeImpl constructorType = new FunctionTypeImpl.con1(constructor);
constructor.type = constructorType;
TypeName typeName = AstFactory.typeName(elementC, [AstFactory.typeName(elementI, [])]);
- typeName.type = elementC.type.substitute4(<Type2> [elementI.type]);
+ typeName.type = elementC.type.substitute4(<DartType> [elementI.type]);
InstanceCreationExpression node = AstFactory.instanceCreationExpression2(null, typeName, []);
node.staticElement = constructor;
- InterfaceType interfaceType = analyze(node) as InterfaceType;
- List<Type2> typeArgs = interfaceType.typeArguments;
+ InterfaceType interfaceType = _analyze(node) as InterfaceType;
+ List<DartType> typeArgs = interfaceType.typeArguments;
JUnitTestCase.assertEquals(1, typeArgs.length);
JUnitTestCase.assertEquals(elementI.type, typeArgs[0]);
_listener.assertNoErrors();
@@ -21444,121 +21510,121 @@
classElement.constructors = <ConstructorElement> [constructor];
InstanceCreationExpression node = AstFactory.instanceCreationExpression2(null, AstFactory.typeName(classElement, []), []);
node.staticElement = constructor;
- JUnitTestCase.assertSame(classElement.type, analyze(node));
+ JUnitTestCase.assertSame(classElement.type, _analyze(node));
_listener.assertNoErrors();
}
void test_visitIntegerLiteral() {
// 42
- Expression node = resolvedInteger(42);
- JUnitTestCase.assertSame(_typeProvider.intType, analyze(node));
+ Expression node = _resolvedInteger(42);
+ JUnitTestCase.assertSame(_typeProvider.intType, _analyze(node));
_listener.assertNoErrors();
}
void test_visitIsExpression_negated() {
// a is! String
- Expression node = AstFactory.isExpression(resolvedString("a"), true, AstFactory.typeName4("String", []));
- JUnitTestCase.assertSame(_typeProvider.boolType, analyze(node));
+ Expression node = AstFactory.isExpression(_resolvedString("a"), true, AstFactory.typeName4("String", []));
+ JUnitTestCase.assertSame(_typeProvider.boolType, _analyze(node));
_listener.assertNoErrors();
}
void test_visitIsExpression_notNegated() {
// a is String
- Expression node = AstFactory.isExpression(resolvedString("a"), false, AstFactory.typeName4("String", []));
- JUnitTestCase.assertSame(_typeProvider.boolType, analyze(node));
+ Expression node = AstFactory.isExpression(_resolvedString("a"), false, AstFactory.typeName4("String", []));
+ JUnitTestCase.assertSame(_typeProvider.boolType, _analyze(node));
_listener.assertNoErrors();
}
void test_visitListLiteral_empty() {
// []
Expression node = AstFactory.listLiteral([]);
- Type2 resultType = analyze(node);
- assertType2(_typeProvider.listType.substitute4(<Type2> [_typeProvider.dynamicType]), resultType);
+ DartType resultType = _analyze(node);
+ _assertType2(_typeProvider.listType.substitute4(<DartType> [_typeProvider.dynamicType]), resultType);
_listener.assertNoErrors();
}
void test_visitListLiteral_nonEmpty() {
// [0]
- Expression node = AstFactory.listLiteral([resolvedInteger(0)]);
- Type2 resultType = analyze(node);
- assertType2(_typeProvider.listType.substitute4(<Type2> [_typeProvider.dynamicType]), resultType);
+ Expression node = AstFactory.listLiteral([_resolvedInteger(0)]);
+ DartType resultType = _analyze(node);
+ _assertType2(_typeProvider.listType.substitute4(<DartType> [_typeProvider.dynamicType]), resultType);
_listener.assertNoErrors();
}
void test_visitMapLiteral_empty() {
// {}
Expression node = AstFactory.mapLiteral2([]);
- Type2 resultType = analyze(node);
- assertType2(_typeProvider.mapType.substitute4(<Type2> [_typeProvider.dynamicType, _typeProvider.dynamicType]), resultType);
+ DartType resultType = _analyze(node);
+ _assertType2(_typeProvider.mapType.substitute4(<DartType> [_typeProvider.dynamicType, _typeProvider.dynamicType]), resultType);
_listener.assertNoErrors();
}
void test_visitMapLiteral_nonEmpty() {
// {"k" : 0}
- Expression node = AstFactory.mapLiteral2([AstFactory.mapLiteralEntry("k", resolvedInteger(0))]);
- Type2 resultType = analyze(node);
- assertType2(_typeProvider.mapType.substitute4(<Type2> [_typeProvider.dynamicType, _typeProvider.dynamicType]), resultType);
+ Expression node = AstFactory.mapLiteral2([AstFactory.mapLiteralEntry("k", _resolvedInteger(0))]);
+ DartType resultType = _analyze(node);
+ _assertType2(_typeProvider.mapType.substitute4(<DartType> [_typeProvider.dynamicType, _typeProvider.dynamicType]), resultType);
_listener.assertNoErrors();
}
void test_visitMethodInvocation_then() {
// then()
Expression node = AstFactory.methodInvocation(null, "then", []);
- analyze(node);
+ _analyze(node);
_listener.assertNoErrors();
}
void test_visitNamedExpression() {
// n: a
- Expression node = AstFactory.namedExpression2("n", resolvedString("a"));
- JUnitTestCase.assertSame(_typeProvider.stringType, analyze(node));
+ Expression node = AstFactory.namedExpression2("n", _resolvedString("a"));
+ JUnitTestCase.assertSame(_typeProvider.stringType, _analyze(node));
_listener.assertNoErrors();
}
void test_visitNullLiteral() {
// null
Expression node = AstFactory.nullLiteral();
- JUnitTestCase.assertSame(_typeProvider.bottomType, analyze(node));
+ JUnitTestCase.assertSame(_typeProvider.bottomType, _analyze(node));
_listener.assertNoErrors();
}
void test_visitParenthesizedExpression() {
// (0)
- Expression node = AstFactory.parenthesizedExpression(resolvedInteger(0));
- JUnitTestCase.assertSame(_typeProvider.intType, analyze(node));
+ Expression node = AstFactory.parenthesizedExpression(_resolvedInteger(0));
+ JUnitTestCase.assertSame(_typeProvider.intType, _analyze(node));
_listener.assertNoErrors();
}
void test_visitPostfixExpression_minusMinus() {
// 0--
- PostfixExpression node = AstFactory.postfixExpression(resolvedInteger(0), TokenType.MINUS_MINUS);
- JUnitTestCase.assertSame(_typeProvider.intType, analyze(node));
+ PostfixExpression node = AstFactory.postfixExpression(_resolvedInteger(0), TokenType.MINUS_MINUS);
+ JUnitTestCase.assertSame(_typeProvider.intType, _analyze(node));
_listener.assertNoErrors();
}
void test_visitPostfixExpression_plusPlus() {
// 0++
- PostfixExpression node = AstFactory.postfixExpression(resolvedInteger(0), TokenType.PLUS_PLUS);
- JUnitTestCase.assertSame(_typeProvider.intType, analyze(node));
+ PostfixExpression node = AstFactory.postfixExpression(_resolvedInteger(0), TokenType.PLUS_PLUS);
+ JUnitTestCase.assertSame(_typeProvider.intType, _analyze(node));
_listener.assertNoErrors();
}
void test_visitPrefixedIdentifier_getter() {
- Type2 boolType = _typeProvider.boolType;
+ DartType boolType = _typeProvider.boolType;
PropertyAccessorElementImpl getter = ElementFactory.getterElement("b", false, boolType);
PrefixedIdentifier node = AstFactory.identifier5("a", "b");
node.identifier.staticElement = getter;
- JUnitTestCase.assertSame(boolType, analyze(node));
+ JUnitTestCase.assertSame(boolType, _analyze(node));
_listener.assertNoErrors();
}
void test_visitPrefixedIdentifier_setter() {
- Type2 boolType = _typeProvider.boolType;
+ DartType boolType = _typeProvider.boolType;
FieldElementImpl field = ElementFactory.fieldElement("b", false, false, false, boolType);
PropertyAccessorElement setter = field.setter;
PrefixedIdentifier node = AstFactory.identifier5("a", "b");
node.identifier.staticElement = setter;
- JUnitTestCase.assertSame(boolType, analyze(node));
+ JUnitTestCase.assertSame(boolType, _analyze(node));
_listener.assertNoErrors();
}
@@ -21567,102 +21633,102 @@
variable.type = _typeProvider.boolType;
PrefixedIdentifier node = AstFactory.identifier5("a", "b");
node.identifier.staticElement = variable;
- JUnitTestCase.assertSame(_typeProvider.boolType, analyze(node));
+ JUnitTestCase.assertSame(_typeProvider.boolType, _analyze(node));
_listener.assertNoErrors();
}
void test_visitPrefixExpression_bang() {
// !0
- PrefixExpression node = AstFactory.prefixExpression(TokenType.BANG, resolvedInteger(0));
- JUnitTestCase.assertSame(_typeProvider.boolType, analyze(node));
+ PrefixExpression node = AstFactory.prefixExpression(TokenType.BANG, _resolvedInteger(0));
+ JUnitTestCase.assertSame(_typeProvider.boolType, _analyze(node));
_listener.assertNoErrors();
}
void test_visitPrefixExpression_minus() {
// -0
- PrefixExpression node = AstFactory.prefixExpression(TokenType.MINUS, resolvedInteger(0));
+ PrefixExpression node = AstFactory.prefixExpression(TokenType.MINUS, _resolvedInteger(0));
MethodElement minusMethod = getMethod(_typeProvider.numType, "-");
node.staticElement = minusMethod;
- JUnitTestCase.assertSame(_typeProvider.numType, analyze(node));
+ JUnitTestCase.assertSame(_typeProvider.numType, _analyze(node));
_listener.assertNoErrors();
}
void test_visitPrefixExpression_minusMinus() {
// --0
- PrefixExpression node = AstFactory.prefixExpression(TokenType.MINUS_MINUS, resolvedInteger(0));
+ PrefixExpression node = AstFactory.prefixExpression(TokenType.MINUS_MINUS, _resolvedInteger(0));
MethodElement minusMethod = getMethod(_typeProvider.numType, "-");
node.staticElement = minusMethod;
- JUnitTestCase.assertSame(_typeProvider.intType, analyze(node));
+ JUnitTestCase.assertSame(_typeProvider.intType, _analyze(node));
_listener.assertNoErrors();
}
void test_visitPrefixExpression_not() {
// !true
Expression node = AstFactory.prefixExpression(TokenType.BANG, AstFactory.booleanLiteral(true));
- JUnitTestCase.assertSame(_typeProvider.boolType, analyze(node));
+ JUnitTestCase.assertSame(_typeProvider.boolType, _analyze(node));
_listener.assertNoErrors();
}
void test_visitPrefixExpression_plusPlus() {
// ++0
- PrefixExpression node = AstFactory.prefixExpression(TokenType.PLUS_PLUS, resolvedInteger(0));
+ PrefixExpression node = AstFactory.prefixExpression(TokenType.PLUS_PLUS, _resolvedInteger(0));
MethodElement plusMethod = getMethod(_typeProvider.numType, "+");
node.staticElement = plusMethod;
- JUnitTestCase.assertSame(_typeProvider.intType, analyze(node));
+ JUnitTestCase.assertSame(_typeProvider.intType, _analyze(node));
_listener.assertNoErrors();
}
void test_visitPrefixExpression_tilde() {
// ~0
- PrefixExpression node = AstFactory.prefixExpression(TokenType.TILDE, resolvedInteger(0));
+ PrefixExpression node = AstFactory.prefixExpression(TokenType.TILDE, _resolvedInteger(0));
MethodElement tildeMethod = getMethod(_typeProvider.intType, "~");
node.staticElement = tildeMethod;
- JUnitTestCase.assertSame(_typeProvider.intType, analyze(node));
+ JUnitTestCase.assertSame(_typeProvider.intType, _analyze(node));
_listener.assertNoErrors();
}
void test_visitPropertyAccess_propagated_getter() {
- Type2 boolType = _typeProvider.boolType;
+ DartType boolType = _typeProvider.boolType;
PropertyAccessorElementImpl getter = ElementFactory.getterElement("b", false, boolType);
PropertyAccess node = AstFactory.propertyAccess2(AstFactory.identifier3("a"), "b");
node.propertyName.propagatedElement = getter;
- JUnitTestCase.assertSame(boolType, analyze2(node, false));
+ JUnitTestCase.assertSame(boolType, _analyze2(node, false));
_listener.assertNoErrors();
}
void test_visitPropertyAccess_propagated_setter() {
- Type2 boolType = _typeProvider.boolType;
+ DartType boolType = _typeProvider.boolType;
FieldElementImpl field = ElementFactory.fieldElement("b", false, false, false, boolType);
PropertyAccessorElement setter = field.setter;
PropertyAccess node = AstFactory.propertyAccess2(AstFactory.identifier3("a"), "b");
node.propertyName.propagatedElement = setter;
- JUnitTestCase.assertSame(boolType, analyze2(node, false));
+ JUnitTestCase.assertSame(boolType, _analyze2(node, false));
_listener.assertNoErrors();
}
void test_visitPropertyAccess_static_getter() {
- Type2 boolType = _typeProvider.boolType;
+ DartType boolType = _typeProvider.boolType;
PropertyAccessorElementImpl getter = ElementFactory.getterElement("b", false, boolType);
PropertyAccess node = AstFactory.propertyAccess2(AstFactory.identifier3("a"), "b");
node.propertyName.staticElement = getter;
- JUnitTestCase.assertSame(boolType, analyze(node));
+ JUnitTestCase.assertSame(boolType, _analyze(node));
_listener.assertNoErrors();
}
void test_visitPropertyAccess_static_setter() {
- Type2 boolType = _typeProvider.boolType;
+ DartType boolType = _typeProvider.boolType;
FieldElementImpl field = ElementFactory.fieldElement("b", false, false, false, boolType);
PropertyAccessorElement setter = field.setter;
PropertyAccess node = AstFactory.propertyAccess2(AstFactory.identifier3("a"), "b");
node.propertyName.staticElement = setter;
- JUnitTestCase.assertSame(boolType, analyze(node));
+ JUnitTestCase.assertSame(boolType, _analyze(node));
_listener.assertNoErrors();
}
void test_visitSimpleStringLiteral() {
// "a"
- Expression node = resolvedString("a");
- JUnitTestCase.assertSame(_typeProvider.stringType, analyze(node));
+ Expression node = _resolvedString("a");
+ JUnitTestCase.assertSame(_typeProvider.stringType, _analyze(node));
_listener.assertNoErrors();
}
@@ -21670,9 +21736,9 @@
// "a${'b'}c"
Expression node = AstFactory.string([
AstFactory.interpolationString("a", "a"),
- AstFactory.interpolationExpression(resolvedString("b")),
+ AstFactory.interpolationExpression(_resolvedString("b")),
AstFactory.interpolationString("c", "c")]);
- JUnitTestCase.assertSame(_typeProvider.stringType, analyze(node));
+ JUnitTestCase.assertSame(_typeProvider.stringType, _analyze(node));
_listener.assertNoErrors();
}
@@ -21681,33 +21747,33 @@
InterfaceType superType = ElementFactory.classElement2("A", []).type;
InterfaceType thisType = ElementFactory.classElement("B", superType, []).type;
Expression node = AstFactory.superExpression();
- JUnitTestCase.assertSame(thisType, analyze3(node, thisType));
+ JUnitTestCase.assertSame(thisType, _analyze3(node, thisType));
_listener.assertNoErrors();
}
void test_visitSymbolLiteral() {
- JUnitTestCase.assertSame(_typeProvider.symbolType, analyze(AstFactory.symbolLiteral(["a"])));
+ JUnitTestCase.assertSame(_typeProvider.symbolType, _analyze(AstFactory.symbolLiteral(["a"])));
}
void test_visitThisExpression() {
// this
InterfaceType thisType = ElementFactory.classElement("B", ElementFactory.classElement2("A", []).type, []).type;
Expression node = AstFactory.thisExpression();
- JUnitTestCase.assertSame(thisType, analyze3(node, thisType));
+ JUnitTestCase.assertSame(thisType, _analyze3(node, thisType));
_listener.assertNoErrors();
}
void test_visitThrowExpression_withoutValue() {
// throw
Expression node = AstFactory.throwExpression();
- JUnitTestCase.assertSame(_typeProvider.bottomType, analyze(node));
+ JUnitTestCase.assertSame(_typeProvider.bottomType, _analyze(node));
_listener.assertNoErrors();
}
void test_visitThrowExpression_withValue() {
// throw 0
- Expression node = AstFactory.throwExpression2(resolvedInteger(0));
- JUnitTestCase.assertSame(_typeProvider.bottomType, analyze(node));
+ Expression node = AstFactory.throwExpression2(_resolvedInteger(0));
+ JUnitTestCase.assertSame(_typeProvider.bottomType, _analyze(node));
_listener.assertNoErrors();
}
@@ -21718,7 +21784,7 @@
* @param node the expression with which the type is associated
* @return the type associated with the expression
*/
- Type2 analyze(Expression node) => analyze4(node, null, true);
+ DartType _analyze(Expression node) => _analyze4(node, null, true);
/**
* Return the type associated with the given expression after the static or propagated type
@@ -21729,7 +21795,7 @@
* the propagated type is being requested
* @return the type associated with the expression
*/
- Type2 analyze2(Expression node, bool useStaticType) => analyze4(node, null, useStaticType);
+ DartType _analyze2(Expression node, bool useStaticType) => _analyze4(node, null, useStaticType);
/**
* Return the type associated with the given expression after the static type analyzer has
@@ -21739,7 +21805,7 @@
* @param thisType the type of 'this'
* @return the type associated with the expression
*/
- Type2 analyze3(Expression node, InterfaceType thisType) => analyze4(node, thisType, true);
+ DartType _analyze3(Expression node, InterfaceType thisType) => _analyze4(node, thisType, true);
/**
* Return the type associated with the given expression after the static type analyzer has
@@ -21751,7 +21817,7 @@
* the propagated type is being requested
* @return the type associated with the expression
*/
- Type2 analyze4(Expression node, InterfaceType thisType, bool useStaticType) {
+ DartType _analyze4(Expression node, InterfaceType thisType, bool useStaticType) {
try {
_analyzer.thisType_J2DAccessor = thisType;
} on JavaException catch (exception) {
@@ -21772,7 +21838,7 @@
* @param node the parameter with which the type is associated
* @return the type associated with the parameter
*/
- Type2 analyze5(FormalParameter node) {
+ DartType _analyze5(FormalParameter node) {
node.accept(_analyzer);
return (node.identifier.staticElement as ParameterElement).type;
}
@@ -21786,10 +21852,10 @@
* @param expectedNamedTypes the expected types of the named parameters
* @param actualType the type being tested
*/
- void assertFunctionType(Type2 expectedReturnType, List<Type2> expectedNormalTypes, List<Type2> expectedOptionalTypes, Map<String, Type2> expectedNamedTypes, Type2 actualType) {
+ void _assertFunctionType(DartType expectedReturnType, List<DartType> expectedNormalTypes, List<DartType> expectedOptionalTypes, Map<String, DartType> expectedNamedTypes, DartType actualType) {
EngineTestCase.assertInstanceOf((obj) => obj is FunctionType, FunctionType, actualType);
FunctionType functionType = actualType as FunctionType;
- List<Type2> normalTypes = functionType.normalParameterTypes;
+ List<DartType> normalTypes = functionType.normalParameterTypes;
if (expectedNormalTypes == null) {
EngineTestCase.assertLength(0, normalTypes);
} else {
@@ -21799,7 +21865,7 @@
JUnitTestCase.assertSame(expectedNormalTypes[i], normalTypes[i]);
}
}
- List<Type2> optionalTypes = functionType.optionalParameterTypes;
+ List<DartType> optionalTypes = functionType.optionalParameterTypes;
if (expectedOptionalTypes == null) {
EngineTestCase.assertLength(0, optionalTypes);
} else {
@@ -21809,34 +21875,34 @@
JUnitTestCase.assertSame(expectedOptionalTypes[i], optionalTypes[i]);
}
}
- Map<String, Type2> namedTypes = functionType.namedParameterTypes;
+ Map<String, DartType> namedTypes = functionType.namedParameterTypes;
if (expectedNamedTypes == null) {
EngineTestCase.assertSizeOfMap(0, namedTypes);
} else {
EngineTestCase.assertSizeOfMap(expectedNamedTypes.length, namedTypes);
- for (MapEntry<String, Type2> entry in getMapEntrySet(expectedNamedTypes)) {
+ for (MapEntry<String, DartType> entry in getMapEntrySet(expectedNamedTypes)) {
JUnitTestCase.assertSame(entry.getValue(), namedTypes[entry.getKey()]);
}
}
JUnitTestCase.assertSame(expectedReturnType, functionType.returnType);
}
- void assertType(InterfaceTypeImpl expectedType, InterfaceTypeImpl actualType) {
+ void _assertType(InterfaceTypeImpl expectedType, InterfaceTypeImpl actualType) {
JUnitTestCase.assertEquals(expectedType.displayName, actualType.displayName);
JUnitTestCase.assertEquals(expectedType.element, actualType.element);
- List<Type2> expectedArguments = expectedType.typeArguments;
+ List<DartType> expectedArguments = expectedType.typeArguments;
int length = expectedArguments.length;
- List<Type2> actualArguments = actualType.typeArguments;
+ List<DartType> actualArguments = actualType.typeArguments;
EngineTestCase.assertLength(length, actualArguments);
for (int i = 0; i < length; i++) {
- assertType2(expectedArguments[i], actualArguments[i]);
+ _assertType2(expectedArguments[i], actualArguments[i]);
}
}
- void assertType2(Type2 expectedType, Type2 actualType) {
+ void _assertType2(DartType expectedType, DartType actualType) {
if (expectedType is InterfaceTypeImpl) {
EngineTestCase.assertInstanceOf((obj) => obj is InterfaceTypeImpl, InterfaceTypeImpl, actualType);
- assertType(expectedType, actualType as InterfaceTypeImpl);
+ _assertType(expectedType, actualType as InterfaceTypeImpl);
}
}
@@ -21845,7 +21911,7 @@
*
* @return the analyzer to be used by the tests
*/
- StaticTypeAnalyzer createAnalyzer() {
+ StaticTypeAnalyzer _createAnalyzer() {
AnalysisContextImpl context = new AnalysisContextImpl();
SourceFactory sourceFactory = new SourceFactory([new DartUriResolver(DirectoryBasedDartSdk.defaultSdk)]);
context.sourceFactory = sourceFactory;
@@ -21871,7 +21937,7 @@
* @param value the value of the literal
* @return an integer literal that has been resolved to the correct type
*/
- DoubleLiteral resolvedDouble(double value) {
+ DoubleLiteral _resolvedDouble(double value) {
DoubleLiteral literal = AstFactory.doubleLiteral(value);
literal.staticType = _typeProvider.doubleType;
return literal;
@@ -21887,7 +21953,7 @@
* @param body the body of the function
* @return a resolved function expression
*/
- FunctionExpression resolvedFunctionExpression(FormalParameterList parameters, FunctionBody body) {
+ FunctionExpression _resolvedFunctionExpression(FormalParameterList parameters, FunctionBody body) {
List<ParameterElement> parameterElements = new List<ParameterElement>();
for (FormalParameter parameter in parameters.parameters) {
ParameterElementImpl element = new ParameterElementImpl.con1(parameter.identifier);
@@ -21910,7 +21976,7 @@
* @param value the value of the literal
* @return an integer literal that has been resolved to the correct type
*/
- IntegerLiteral resolvedInteger(int value) {
+ IntegerLiteral _resolvedInteger(int value) {
IntegerLiteral literal = AstFactory.integer(value);
literal.staticType = _typeProvider.intType;
return literal;
@@ -21922,7 +21988,7 @@
* @param value the value of the literal
* @return a string literal that has been resolved to the correct type
*/
- SimpleStringLiteral resolvedString(String value) {
+ SimpleStringLiteral _resolvedString(String value) {
SimpleStringLiteral string = AstFactory.string2(value);
string.staticType = _typeProvider.stringType;
return string;
@@ -21935,7 +22001,7 @@
* @param variableName the name of the variable
* @return a simple identifier that has been resolved to a variable element with the given type
*/
- SimpleIdentifier resolvedVariable(InterfaceType type, String variableName) {
+ SimpleIdentifier _resolvedVariable(InterfaceType type, String variableName) {
SimpleIdentifier identifier = AstFactory.identifier3(variableName);
VariableElementImpl element = ElementFactory.localVariableElement(identifier);
element.type = type;
@@ -21950,7 +22016,7 @@
* @param parameter the parameter whose type is to be set
* @param type the new type of the given parameter
*/
- void setType(FormalParameter parameter, Type2 type) {
+ void _setType(FormalParameter parameter, DartType type) {
SimpleIdentifier identifier = parameter.identifier;
Element element = identifier.staticElement;
if (element is! ParameterElement) {
@@ -23177,8 +23243,10 @@
Scope_EnclosedScopeTest_test_define_duplicate(this.errorListener2) : super();
+ @override
AnalysisErrorListener get errorListener => errorListener2;
+ @override
Element internalLookup(Identifier identifier, String name, LibraryElement referencingLibrary) => null;
}
@@ -23187,8 +23255,10 @@
Scope_EnclosedScopeTest_test_define_normal(this.errorListener3) : super();
+ @override
AnalysisErrorListener get errorListener => errorListener3;
+ @override
Element internalLookup(Identifier identifier, String name, LibraryElement referencingLibrary) => null;
}
@@ -23198,6 +23268,7 @@
*/
AnalysisContextImpl _context;
+ @override
void setUp() {
SourceFactory sourceFactory = new SourceFactory([
new DartUriResolver(DirectoryBasedDartSdk.defaultSdk),
@@ -23213,7 +23284,7 @@
"part 'second.dart';"]));
addSource("/first.dart", EngineTestCase.createSource(["part of lib;", "int get V => 0;"]));
addSource("/second.dart", EngineTestCase.createSource(["part of lib;", "void set V(int v) {}"]));
- LibraryElement element = buildLibrary(librarySource, []);
+ LibraryElement element = _buildLibrary(librarySource, []);
JUnitTestCase.assertNotNull(element);
List<CompilationUnitElement> sourcedUnits = element.parts;
EngineTestCase.assertLength(2, sourcedUnits);
@@ -23226,7 +23297,7 @@
void test_empty() {
Source librarySource = addSource("/lib.dart", "library lib;");
- LibraryElement element = buildLibrary(librarySource, []);
+ LibraryElement element = _buildLibrary(librarySource, []);
JUnitTestCase.assertNotNull(element);
JUnitTestCase.assertEquals("lib", element.name);
JUnitTestCase.assertNull(element.entryPoint);
@@ -23248,21 +23319,21 @@
void test_invalidUri_part() {
Source librarySource = addSource("/lib.dart", EngineTestCase.createSource(["library lib;", "", "part '\${'a'}.dart';"]));
- LibraryElement element = buildLibrary(librarySource, [CompileTimeErrorCode.URI_WITH_INTERPOLATION]);
+ LibraryElement element = _buildLibrary(librarySource, [CompileTimeErrorCode.URI_WITH_INTERPOLATION]);
JUnitTestCase.assertNotNull(element);
}
void test_missingLibraryDirectiveWithPart() {
addSource("/a.dart", EngineTestCase.createSource(["part of lib;"]));
Source librarySource = addSource("/lib.dart", EngineTestCase.createSource(["part 'a.dart';"]));
- LibraryElement element = buildLibrary(librarySource, [ResolverErrorCode.MISSING_LIBRARY_DIRECTIVE_WITH_PART]);
+ LibraryElement element = _buildLibrary(librarySource, [ResolverErrorCode.MISSING_LIBRARY_DIRECTIVE_WITH_PART]);
JUnitTestCase.assertNotNull(element);
}
void test_missingPartOfDirective() {
addSource("/a.dart", "class A {}");
Source librarySource = addSource("/lib.dart", EngineTestCase.createSource(["library lib;", "", "part 'a.dart';"]));
- LibraryElement element = buildLibrary(librarySource, [CompileTimeErrorCode.PART_OF_NON_PART]);
+ LibraryElement element = _buildLibrary(librarySource, [CompileTimeErrorCode.PART_OF_NON_PART]);
JUnitTestCase.assertNotNull(element);
}
@@ -23275,25 +23346,25 @@
"class A {}"]));
addSource("/first.dart", EngineTestCase.createSource(["part of lib;", "class B {}"]));
addSource("/second.dart", EngineTestCase.createSource(["part of lib;", "class C {}"]));
- LibraryElement element = buildLibrary(librarySource, []);
+ LibraryElement element = _buildLibrary(librarySource, []);
JUnitTestCase.assertNotNull(element);
List<CompilationUnitElement> sourcedUnits = element.parts;
EngineTestCase.assertLength(2, sourcedUnits);
- assertTypes(element.definingCompilationUnit, ["A"]);
+ _assertTypes(element.definingCompilationUnit, ["A"]);
if (sourcedUnits[0].name == "first.dart") {
- assertTypes(sourcedUnits[0], ["B"]);
- assertTypes(sourcedUnits[1], ["C"]);
+ _assertTypes(sourcedUnits[0], ["B"]);
+ _assertTypes(sourcedUnits[1], ["C"]);
} else {
- assertTypes(sourcedUnits[0], ["C"]);
- assertTypes(sourcedUnits[1], ["B"]);
+ _assertTypes(sourcedUnits[0], ["C"]);
+ _assertTypes(sourcedUnits[1], ["B"]);
}
}
void test_singleFile() {
Source librarySource = addSource("/lib.dart", EngineTestCase.createSource(["library lib;", "", "class A {}"]));
- LibraryElement element = buildLibrary(librarySource, []);
+ LibraryElement element = _buildLibrary(librarySource, []);
JUnitTestCase.assertNotNull(element);
- assertTypes(element.definingCompilationUnit, ["A"]);
+ _assertTypes(element.definingCompilationUnit, ["A"]);
}
/**
@@ -23315,7 +23386,7 @@
* @param unit the compilation unit containing the types
* @param typeNames the names of the types that should be found
*/
- void assertTypes(CompilationUnitElement unit, List<String> typeNames) {
+ void _assertTypes(CompilationUnitElement unit, List<String> typeNames) {
JUnitTestCase.assertNotNull(unit);
List<ClassElement> types = unit.types;
EngineTestCase.assertLength(typeNames.length, types);
@@ -23343,7 +23414,7 @@
* @return the element model that was built for the library
* @throws Exception if the element model could not be built
*/
- LibraryElement buildLibrary(Source librarySource, List<ErrorCode> expectedErrorCodes) {
+ LibraryElement _buildLibrary(Source librarySource, List<ErrorCode> expectedErrorCodes) {
LibraryResolver resolver = new LibraryResolver(_context);
LibraryElementBuilder builder = new LibraryElementBuilder(resolver);
Library library = resolver.createLibrary(librarySource);
@@ -23460,6 +23531,7 @@
ScopeTest_TestScope(this.errorListener);
+ @override
Element internalLookup(Identifier identifier, String name, LibraryElement referencingLibrary) => localLookup(name, referencingLibrary);
}
@@ -23487,7 +23559,7 @@
" }",
" void g(a, b, c) {}",
"}"]));
- validateArgumentResolution(source, [0, 1, 2]);
+ _validateArgumentResolution(source, [0, 1, 2]);
}
void test_argumentResolution_required_tooFew() {
@@ -23498,7 +23570,7 @@
" }",
" void g(a, b, c) {}",
"}"]));
- validateArgumentResolution(source, [0, 1]);
+ _validateArgumentResolution(source, [0, 1]);
}
void test_argumentResolution_required_tooMany() {
@@ -23509,7 +23581,7 @@
" }",
" void g(a, b) {}",
"}"]));
- validateArgumentResolution(source, [0, 1, -1]);
+ _validateArgumentResolution(source, [0, 1, -1]);
}
void test_argumentResolution_requiredAndNamed_extra() {
@@ -23520,7 +23592,7 @@
" }",
" void g(a, b, {c}) {}",
"}"]));
- validateArgumentResolution(source, [0, 1, 2, -1]);
+ _validateArgumentResolution(source, [0, 1, 2, -1]);
}
void test_argumentResolution_requiredAndNamed_matching() {
@@ -23531,7 +23603,7 @@
" }",
" void g(a, b, {c}) {}",
"}"]));
- validateArgumentResolution(source, [0, 1, 2]);
+ _validateArgumentResolution(source, [0, 1, 2]);
}
void test_argumentResolution_requiredAndNamed_missing() {
@@ -23542,7 +23614,7 @@
" }",
" void g(a, b, {c, d}) {}",
"}"]));
- validateArgumentResolution(source, [0, 1, 3]);
+ _validateArgumentResolution(source, [0, 1, 3]);
}
void test_argumentResolution_requiredAndPositional_fewer() {
@@ -23553,7 +23625,7 @@
" }",
" void g(a, b, [c, d]) {}",
"}"]));
- validateArgumentResolution(source, [0, 1, 2]);
+ _validateArgumentResolution(source, [0, 1, 2]);
}
void test_argumentResolution_requiredAndPositional_matching() {
@@ -23564,7 +23636,7 @@
" }",
" void g(a, b, [c, d]) {}",
"}"]));
- validateArgumentResolution(source, [0, 1, 2, 3]);
+ _validateArgumentResolution(source, [0, 1, 2, 3]);
}
void test_argumentResolution_requiredAndPositional_more() {
@@ -23575,7 +23647,7 @@
" }",
" void g(a, b, [c]) {}",
"}"]));
- validateArgumentResolution(source, [0, 1, 2, -1]);
+ _validateArgumentResolution(source, [0, 1, 2, -1]);
}
void test_class_definesCall() {
@@ -24232,7 +24304,7 @@
* @throws Exception if the source could not be resolved or if the structure of the source is not
* valid
*/
- void validateArgumentResolution(Source source, List<int> indices) {
+ void _validateArgumentResolution(Source source, List<int> indices) {
LibraryElement library = resolve(source);
JUnitTestCase.assertNotNull(library);
ClassElement classElement = library.definingCompilationUnit.types[0];
@@ -24494,12 +24566,13 @@
RecursiveAstVisitor_SimpleResolverTest_test_localVariable_types_invoked(this.SimpleResolverTest_this, this.found, this.thrownException) : super();
+ @override
Object visitSimpleIdentifier(SimpleIdentifier node) {
if (node.name == "myVar" && node.parent is MethodInvocation) {
try {
found[0] = true;
// check static type
- Type2 staticType = node.staticType;
+ DartType staticType = node.staticType;
JUnitTestCase.assertSame(SimpleResolverTest_this.typeProvider.dynamicType, staticType);
// check propagated type
FunctionType propagatedType = node.propagatedType as FunctionType;
@@ -24586,6 +24659,7 @@
EngineTestCase.assertContains(arraySubtypesOfA, [classB]);
}
+ @override
void setUp() {
super.setUp();
AnalysisContextImpl context = AnalysisContextFactory.contextWithCore();
@@ -24622,67 +24696,67 @@
class ScopeBuilderTest extends EngineTestCase {
void test_scopeFor_ClassDeclaration() {
GatheringErrorListener listener = new GatheringErrorListener();
- Scope scope = ScopeBuilder.scopeFor(createResolvedClassDeclaration(), listener);
+ Scope scope = ScopeBuilder.scopeFor(_createResolvedClassDeclaration(), listener);
EngineTestCase.assertInstanceOf((obj) => obj is LibraryScope, LibraryScope, scope);
}
void test_scopeFor_ClassTypeAlias() {
GatheringErrorListener listener = new GatheringErrorListener();
- Scope scope = ScopeBuilder.scopeFor(createResolvedClassTypeAlias(), listener);
+ Scope scope = ScopeBuilder.scopeFor(_createResolvedClassTypeAlias(), listener);
EngineTestCase.assertInstanceOf((obj) => obj is LibraryScope, LibraryScope, scope);
}
void test_scopeFor_CompilationUnit() {
GatheringErrorListener listener = new GatheringErrorListener();
- Scope scope = ScopeBuilder.scopeFor(createResolvedCompilationUnit(), listener);
+ Scope scope = ScopeBuilder.scopeFor(_createResolvedCompilationUnit(), listener);
EngineTestCase.assertInstanceOf((obj) => obj is LibraryScope, LibraryScope, scope);
}
void test_scopeFor_ConstructorDeclaration() {
GatheringErrorListener listener = new GatheringErrorListener();
- Scope scope = ScopeBuilder.scopeFor(createResolvedConstructorDeclaration(), listener);
+ Scope scope = ScopeBuilder.scopeFor(_createResolvedConstructorDeclaration(), listener);
EngineTestCase.assertInstanceOf((obj) => obj is ClassScope, ClassScope, scope);
}
void test_scopeFor_ConstructorDeclaration_parameters() {
GatheringErrorListener listener = new GatheringErrorListener();
- Scope scope = ScopeBuilder.scopeFor(createResolvedConstructorDeclaration().parameters, listener);
+ Scope scope = ScopeBuilder.scopeFor(_createResolvedConstructorDeclaration().parameters, listener);
EngineTestCase.assertInstanceOf((obj) => obj is FunctionScope, FunctionScope, scope);
}
void test_scopeFor_FunctionDeclaration() {
GatheringErrorListener listener = new GatheringErrorListener();
- Scope scope = ScopeBuilder.scopeFor(createResolvedFunctionDeclaration(), listener);
+ Scope scope = ScopeBuilder.scopeFor(_createResolvedFunctionDeclaration(), listener);
EngineTestCase.assertInstanceOf((obj) => obj is LibraryScope, LibraryScope, scope);
}
void test_scopeFor_FunctionDeclaration_parameters() {
GatheringErrorListener listener = new GatheringErrorListener();
- Scope scope = ScopeBuilder.scopeFor(createResolvedFunctionDeclaration().functionExpression.parameters, listener);
+ Scope scope = ScopeBuilder.scopeFor(_createResolvedFunctionDeclaration().functionExpression.parameters, listener);
EngineTestCase.assertInstanceOf((obj) => obj is FunctionScope, FunctionScope, scope);
}
void test_scopeFor_FunctionTypeAlias() {
GatheringErrorListener listener = new GatheringErrorListener();
- Scope scope = ScopeBuilder.scopeFor(createResolvedFunctionTypeAlias(), listener);
+ Scope scope = ScopeBuilder.scopeFor(_createResolvedFunctionTypeAlias(), listener);
EngineTestCase.assertInstanceOf((obj) => obj is LibraryScope, LibraryScope, scope);
}
void test_scopeFor_FunctionTypeAlias_parameters() {
GatheringErrorListener listener = new GatheringErrorListener();
- Scope scope = ScopeBuilder.scopeFor(createResolvedFunctionTypeAlias().parameters, listener);
+ Scope scope = ScopeBuilder.scopeFor(_createResolvedFunctionTypeAlias().parameters, listener);
EngineTestCase.assertInstanceOf((obj) => obj is FunctionTypeScope, FunctionTypeScope, scope);
}
void test_scopeFor_MethodDeclaration() {
GatheringErrorListener listener = new GatheringErrorListener();
- Scope scope = ScopeBuilder.scopeFor(createResolvedMethodDeclaration(), listener);
+ Scope scope = ScopeBuilder.scopeFor(_createResolvedMethodDeclaration(), listener);
EngineTestCase.assertInstanceOf((obj) => obj is ClassScope, ClassScope, scope);
}
void test_scopeFor_MethodDeclaration_body() {
GatheringErrorListener listener = new GatheringErrorListener();
- Scope scope = ScopeBuilder.scopeFor(createResolvedMethodDeclaration().body, listener);
+ Scope scope = ScopeBuilder.scopeFor(_createResolvedMethodDeclaration().body, listener);
EngineTestCase.assertInstanceOf((obj) => obj is FunctionScope, FunctionScope, scope);
}
@@ -24713,8 +24787,8 @@
}
}
- ClassDeclaration createResolvedClassDeclaration() {
- CompilationUnit unit = createResolvedCompilationUnit();
+ ClassDeclaration _createResolvedClassDeclaration() {
+ CompilationUnit unit = _createResolvedCompilationUnit();
String className = "C";
ClassDeclaration classNode = AstFactory.classDeclaration(null, className, AstFactory.typeParameterList([]), null, null, null, []);
unit.declarations.add(classNode);
@@ -24724,8 +24798,8 @@
return classNode;
}
- ClassTypeAlias createResolvedClassTypeAlias() {
- CompilationUnit unit = createResolvedCompilationUnit();
+ ClassTypeAlias _createResolvedClassTypeAlias() {
+ CompilationUnit unit = _createResolvedCompilationUnit();
String className = "C";
ClassTypeAlias classNode = AstFactory.classTypeAlias(className, AstFactory.typeParameterList([]), null, null, null, null);
unit.declarations.add(classNode);
@@ -24735,15 +24809,15 @@
return classNode;
}
- CompilationUnit createResolvedCompilationUnit() {
+ CompilationUnit _createResolvedCompilationUnit() {
CompilationUnit unit = AstFactory.compilationUnit();
LibraryElementImpl library = ElementFactory.library(AnalysisContextFactory.contextWithCore(), "lib");
unit.element = library.definingCompilationUnit;
return unit;
}
- ConstructorDeclaration createResolvedConstructorDeclaration() {
- ClassDeclaration classNode = createResolvedClassDeclaration();
+ ConstructorDeclaration _createResolvedConstructorDeclaration() {
+ ClassDeclaration classNode = _createResolvedClassDeclaration();
String constructorName = "f";
ConstructorDeclaration constructorNode = AstFactory.constructorDeclaration(AstFactory.identifier3(constructorName), null, AstFactory.formalParameterList([]), null);
classNode.members.add(constructorNode);
@@ -24753,8 +24827,8 @@
return constructorNode;
}
- FunctionDeclaration createResolvedFunctionDeclaration() {
- CompilationUnit unit = createResolvedCompilationUnit();
+ FunctionDeclaration _createResolvedFunctionDeclaration() {
+ CompilationUnit unit = _createResolvedCompilationUnit();
String functionName = "f";
FunctionDeclaration functionNode = AstFactory.functionDeclaration(null, null, functionName, AstFactory.functionExpression());
unit.declarations.add(functionNode);
@@ -24764,8 +24838,8 @@
return functionNode;
}
- FunctionTypeAlias createResolvedFunctionTypeAlias() {
- CompilationUnit unit = createResolvedCompilationUnit();
+ FunctionTypeAlias _createResolvedFunctionTypeAlias() {
+ CompilationUnit unit = _createResolvedCompilationUnit();
FunctionTypeAlias aliasNode = AstFactory.typeAlias(AstFactory.typeName4("A", []), "F", AstFactory.typeParameterList([]), AstFactory.formalParameterList([]));
unit.declarations.add(aliasNode);
SimpleIdentifier aliasName = aliasNode.name;
@@ -24775,8 +24849,8 @@
return aliasNode;
}
- MethodDeclaration createResolvedMethodDeclaration() {
- ClassDeclaration classNode = createResolvedClassDeclaration();
+ MethodDeclaration _createResolvedMethodDeclaration() {
+ ClassDeclaration classNode = _createResolvedClassDeclaration();
String methodName = "f";
MethodDeclaration methodNode = AstFactory.methodDeclaration(null, null, null, null, AstFactory.identifier3(methodName), AstFactory.formalParameterList([]));
classNode.members.add(methodNode);
diff --git a/pkg/analyzer/test/generated/scanner_test.dart b/pkg/analyzer/test/generated/scanner_test.dart
index 4b86c62..a0769fe 100644
--- a/pkg/analyzer/test/generated/scanner_test.dart
+++ b/pkg/analyzer/test/generated/scanner_test.dart
@@ -249,13 +249,13 @@
*/
void validate(Token token) {
JavaStringBuilder builder = new JavaStringBuilder();
- validateStream(builder, token);
+ _validateStream(builder, token);
if (builder.length > 0) {
JUnitTestCase.fail(builder.toString());
}
}
- void validateStream(JavaStringBuilder builder, Token token) {
+ void _validateStream(JavaStringBuilder builder, Token token) {
if (token == null) {
return;
}
@@ -263,14 +263,14 @@
int previousEnd = -1;
Token currentToken = token;
while (currentToken != null && currentToken.type != TokenType.EOF) {
- validateStream(builder, currentToken.precedingComments);
+ _validateStream(builder, currentToken.precedingComments);
TokenType type = currentToken.type;
if (identical(type, TokenType.OPEN_CURLY_BRACKET) || identical(type, TokenType.OPEN_PAREN) || identical(type, TokenType.OPEN_SQUARE_BRACKET) || identical(type, TokenType.STRING_INTERPOLATION_EXPRESSION)) {
if (currentToken is! BeginToken) {
builder.append("\r\nExpected BeginToken, found ");
builder.append(currentToken.runtimeType.toString());
builder.append(" ");
- writeToken(builder, currentToken);
+ _writeToken(builder, currentToken);
}
}
int currentStart = currentToken.offset;
@@ -278,9 +278,9 @@
int currentEnd = currentStart + currentLength - 1;
if (currentStart <= previousEnd) {
builder.append("\r\nInvalid token sequence: ");
- writeToken(builder, previousToken);
+ _writeToken(builder, previousToken);
builder.append(" followed by ");
- writeToken(builder, currentToken);
+ _writeToken(builder, currentToken);
}
previousEnd = currentEnd;
previousToken = currentToken;
@@ -288,7 +288,7 @@
}
}
- void writeToken(JavaStringBuilder builder, Token token) {
+ void _writeToken(JavaStringBuilder builder, Token token) {
builder.append("[");
builder.append(token.type);
builder.append(", '");
@@ -303,75 +303,75 @@
class ScannerTest extends JUnitTestCase {
void test_ampersand() {
- assertToken(TokenType.AMPERSAND, "&");
+ _assertToken(TokenType.AMPERSAND, "&");
}
void test_ampersand_ampersand() {
- assertToken(TokenType.AMPERSAND_AMPERSAND, "&&");
+ _assertToken(TokenType.AMPERSAND_AMPERSAND, "&&");
}
void test_ampersand_eq() {
- assertToken(TokenType.AMPERSAND_EQ, "&=");
+ _assertToken(TokenType.AMPERSAND_EQ, "&=");
}
void test_at() {
- assertToken(TokenType.AT, "@");
+ _assertToken(TokenType.AT, "@");
}
void test_backping() {
- assertToken(TokenType.BACKPING, "`");
+ _assertToken(TokenType.BACKPING, "`");
}
void test_backslash() {
- assertToken(TokenType.BACKSLASH, "\\");
+ _assertToken(TokenType.BACKSLASH, "\\");
}
void test_bang() {
- assertToken(TokenType.BANG, "!");
+ _assertToken(TokenType.BANG, "!");
}
void test_bang_eq() {
- assertToken(TokenType.BANG_EQ, "!=");
+ _assertToken(TokenType.BANG_EQ, "!=");
}
void test_bar() {
- assertToken(TokenType.BAR, "|");
+ _assertToken(TokenType.BAR, "|");
}
void test_bar_bar() {
- assertToken(TokenType.BAR_BAR, "||");
+ _assertToken(TokenType.BAR_BAR, "||");
}
void test_bar_eq() {
- assertToken(TokenType.BAR_EQ, "|=");
+ _assertToken(TokenType.BAR_EQ, "|=");
}
void test_caret() {
- assertToken(TokenType.CARET, "^");
+ _assertToken(TokenType.CARET, "^");
}
void test_caret_eq() {
- assertToken(TokenType.CARET_EQ, "^=");
+ _assertToken(TokenType.CARET_EQ, "^=");
}
void test_close_curly_bracket() {
- assertToken(TokenType.CLOSE_CURLY_BRACKET, "}");
+ _assertToken(TokenType.CLOSE_CURLY_BRACKET, "}");
}
void test_close_paren() {
- assertToken(TokenType.CLOSE_PAREN, ")");
+ _assertToken(TokenType.CLOSE_PAREN, ")");
}
void test_close_quare_bracket() {
- assertToken(TokenType.CLOSE_SQUARE_BRACKET, "]");
+ _assertToken(TokenType.CLOSE_SQUARE_BRACKET, "]");
}
void test_colon() {
- assertToken(TokenType.COLON, ":");
+ _assertToken(TokenType.COLON, ":");
}
void test_comma() {
- assertToken(TokenType.COMMA, ",");
+ _assertToken(TokenType.COMMA, ",");
}
void test_comment_disabled_multi() {
@@ -383,316 +383,316 @@
}
void test_comment_multi() {
- assertComment(TokenType.MULTI_LINE_COMMENT, "/* comment */");
+ _assertComment(TokenType.MULTI_LINE_COMMENT, "/* comment */");
}
void test_comment_multi_unterminated() {
- assertError(ScannerErrorCode.UNTERMINATED_MULTI_LINE_COMMENT, 3, "/* x");
+ _assertError(ScannerErrorCode.UNTERMINATED_MULTI_LINE_COMMENT, 3, "/* x");
}
void test_comment_nested() {
- assertComment(TokenType.MULTI_LINE_COMMENT, "/* comment /* within a */ comment */");
+ _assertComment(TokenType.MULTI_LINE_COMMENT, "/* comment /* within a */ comment */");
}
void test_comment_single() {
- assertComment(TokenType.SINGLE_LINE_COMMENT, "// comment");
+ _assertComment(TokenType.SINGLE_LINE_COMMENT, "// comment");
}
void test_double_both_e() {
- assertToken(TokenType.DOUBLE, "0.123e4");
+ _assertToken(TokenType.DOUBLE, "0.123e4");
}
void test_double_both_E() {
- assertToken(TokenType.DOUBLE, "0.123E4");
+ _assertToken(TokenType.DOUBLE, "0.123E4");
}
void test_double_fraction() {
- assertToken(TokenType.DOUBLE, ".123");
+ _assertToken(TokenType.DOUBLE, ".123");
}
void test_double_fraction_e() {
- assertToken(TokenType.DOUBLE, ".123e4");
+ _assertToken(TokenType.DOUBLE, ".123e4");
}
void test_double_fraction_E() {
- assertToken(TokenType.DOUBLE, ".123E4");
+ _assertToken(TokenType.DOUBLE, ".123E4");
}
void test_double_missingDigitInExponent() {
- assertError(ScannerErrorCode.MISSING_DIGIT, 1, "1e");
+ _assertError(ScannerErrorCode.MISSING_DIGIT, 1, "1e");
}
void test_double_whole_e() {
- assertToken(TokenType.DOUBLE, "12e4");
+ _assertToken(TokenType.DOUBLE, "12e4");
}
void test_double_whole_E() {
- assertToken(TokenType.DOUBLE, "12E4");
+ _assertToken(TokenType.DOUBLE, "12E4");
}
void test_eq() {
- assertToken(TokenType.EQ, "=");
+ _assertToken(TokenType.EQ, "=");
}
void test_eq_eq() {
- assertToken(TokenType.EQ_EQ, "==");
+ _assertToken(TokenType.EQ_EQ, "==");
}
void test_gt() {
- assertToken(TokenType.GT, ">");
+ _assertToken(TokenType.GT, ">");
}
void test_gt_eq() {
- assertToken(TokenType.GT_EQ, ">=");
+ _assertToken(TokenType.GT_EQ, ">=");
}
void test_gt_gt() {
- assertToken(TokenType.GT_GT, ">>");
+ _assertToken(TokenType.GT_GT, ">>");
}
void test_gt_gt_eq() {
- assertToken(TokenType.GT_GT_EQ, ">>=");
+ _assertToken(TokenType.GT_GT_EQ, ">>=");
}
void test_hash() {
- assertToken(TokenType.HASH, "#");
+ _assertToken(TokenType.HASH, "#");
}
void test_hexidecimal() {
- assertToken(TokenType.HEXADECIMAL, "0x1A2B3C");
+ _assertToken(TokenType.HEXADECIMAL, "0x1A2B3C");
}
void test_hexidecimal_missingDigit() {
- assertError(ScannerErrorCode.MISSING_HEX_DIGIT, 1, "0x");
+ _assertError(ScannerErrorCode.MISSING_HEX_DIGIT, 1, "0x");
}
void test_identifier() {
- assertToken(TokenType.IDENTIFIER, "result");
+ _assertToken(TokenType.IDENTIFIER, "result");
}
void test_illegalChar_cyrillicLetter_middle() {
- assertError(ScannerErrorCode.ILLEGAL_CHARACTER, 0, "Shche\u0433lov");
+ _assertError(ScannerErrorCode.ILLEGAL_CHARACTER, 0, "Shche\u0433lov");
}
void test_illegalChar_cyrillicLetter_start() {
- assertError(ScannerErrorCode.ILLEGAL_CHARACTER, 0, "\u0429");
+ _assertError(ScannerErrorCode.ILLEGAL_CHARACTER, 0, "\u0429");
}
void test_illegalChar_nbsp() {
- assertError(ScannerErrorCode.ILLEGAL_CHARACTER, 0, "\u00A0");
+ _assertError(ScannerErrorCode.ILLEGAL_CHARACTER, 0, "\u00A0");
}
void test_illegalChar_notLetter() {
- assertError(ScannerErrorCode.ILLEGAL_CHARACTER, 0, "\u0312");
+ _assertError(ScannerErrorCode.ILLEGAL_CHARACTER, 0, "\u0312");
}
void test_index() {
- assertToken(TokenType.INDEX, "[]");
+ _assertToken(TokenType.INDEX, "[]");
}
void test_index_eq() {
- assertToken(TokenType.INDEX_EQ, "[]=");
+ _assertToken(TokenType.INDEX_EQ, "[]=");
}
void test_int() {
- assertToken(TokenType.INT, "123");
+ _assertToken(TokenType.INT, "123");
}
void test_int_initialZero() {
- assertToken(TokenType.INT, "0123");
+ _assertToken(TokenType.INT, "0123");
}
void test_keyword_abstract() {
- assertKeywordToken("abstract");
+ _assertKeywordToken("abstract");
}
void test_keyword_as() {
- assertKeywordToken("as");
+ _assertKeywordToken("as");
}
void test_keyword_assert() {
- assertKeywordToken("assert");
+ _assertKeywordToken("assert");
}
void test_keyword_break() {
- assertKeywordToken("break");
+ _assertKeywordToken("break");
}
void test_keyword_case() {
- assertKeywordToken("case");
+ _assertKeywordToken("case");
}
void test_keyword_catch() {
- assertKeywordToken("catch");
+ _assertKeywordToken("catch");
}
void test_keyword_class() {
- assertKeywordToken("class");
+ _assertKeywordToken("class");
}
void test_keyword_const() {
- assertKeywordToken("const");
+ _assertKeywordToken("const");
}
void test_keyword_continue() {
- assertKeywordToken("continue");
+ _assertKeywordToken("continue");
}
void test_keyword_default() {
- assertKeywordToken("default");
+ _assertKeywordToken("default");
}
void test_keyword_do() {
- assertKeywordToken("do");
+ _assertKeywordToken("do");
}
void test_keyword_dynamic() {
- assertKeywordToken("dynamic");
+ _assertKeywordToken("dynamic");
}
void test_keyword_else() {
- assertKeywordToken("else");
+ _assertKeywordToken("else");
}
void test_keyword_enum() {
- assertKeywordToken("enum");
+ _assertKeywordToken("enum");
}
void test_keyword_export() {
- assertKeywordToken("export");
+ _assertKeywordToken("export");
}
void test_keyword_extends() {
- assertKeywordToken("extends");
+ _assertKeywordToken("extends");
}
void test_keyword_factory() {
- assertKeywordToken("factory");
+ _assertKeywordToken("factory");
}
void test_keyword_false() {
- assertKeywordToken("false");
+ _assertKeywordToken("false");
}
void test_keyword_final() {
- assertKeywordToken("final");
+ _assertKeywordToken("final");
}
void test_keyword_finally() {
- assertKeywordToken("finally");
+ _assertKeywordToken("finally");
}
void test_keyword_for() {
- assertKeywordToken("for");
+ _assertKeywordToken("for");
}
void test_keyword_get() {
- assertKeywordToken("get");
+ _assertKeywordToken("get");
}
void test_keyword_if() {
- assertKeywordToken("if");
+ _assertKeywordToken("if");
}
void test_keyword_implements() {
- assertKeywordToken("implements");
+ _assertKeywordToken("implements");
}
void test_keyword_import() {
- assertKeywordToken("import");
+ _assertKeywordToken("import");
}
void test_keyword_in() {
- assertKeywordToken("in");
+ _assertKeywordToken("in");
}
void test_keyword_is() {
- assertKeywordToken("is");
+ _assertKeywordToken("is");
}
void test_keyword_library() {
- assertKeywordToken("library");
+ _assertKeywordToken("library");
}
void test_keyword_new() {
- assertKeywordToken("new");
+ _assertKeywordToken("new");
}
void test_keyword_null() {
- assertKeywordToken("null");
+ _assertKeywordToken("null");
}
void test_keyword_operator() {
- assertKeywordToken("operator");
+ _assertKeywordToken("operator");
}
void test_keyword_part() {
- assertKeywordToken("part");
+ _assertKeywordToken("part");
}
void test_keyword_rethrow() {
- assertKeywordToken("rethrow");
+ _assertKeywordToken("rethrow");
}
void test_keyword_return() {
- assertKeywordToken("return");
+ _assertKeywordToken("return");
}
void test_keyword_set() {
- assertKeywordToken("set");
+ _assertKeywordToken("set");
}
void test_keyword_static() {
- assertKeywordToken("static");
+ _assertKeywordToken("static");
}
void test_keyword_super() {
- assertKeywordToken("super");
+ _assertKeywordToken("super");
}
void test_keyword_switch() {
- assertKeywordToken("switch");
+ _assertKeywordToken("switch");
}
void test_keyword_this() {
- assertKeywordToken("this");
+ _assertKeywordToken("this");
}
void test_keyword_throw() {
- assertKeywordToken("throw");
+ _assertKeywordToken("throw");
}
void test_keyword_true() {
- assertKeywordToken("true");
+ _assertKeywordToken("true");
}
void test_keyword_try() {
- assertKeywordToken("try");
+ _assertKeywordToken("try");
}
void test_keyword_typedef() {
- assertKeywordToken("typedef");
+ _assertKeywordToken("typedef");
}
void test_keyword_var() {
- assertKeywordToken("var");
+ _assertKeywordToken("var");
}
void test_keyword_void() {
- assertKeywordToken("void");
+ _assertKeywordToken("void");
}
void test_keyword_while() {
- assertKeywordToken("while");
+ _assertKeywordToken("while");
}
void test_keyword_with() {
- assertKeywordToken("with");
+ _assertKeywordToken("with");
}
void test_lineInfo_multilineComment() {
String source = "/*\r *\r */";
- assertLineInfo(source, [
+ _assertLineInfo(source, [
new ScannerTest_ExpectedLocation(0, 1, 1),
new ScannerTest_ExpectedLocation(4, 2, 2),
new ScannerTest_ExpectedLocation(source.length - 1, 3, 3)]);
@@ -700,7 +700,7 @@
void test_lineInfo_multilineString() {
String source = "'''a\r\nbc\r\nd'''";
- assertLineInfo(source, [
+ _assertLineInfo(source, [
new ScannerTest_ExpectedLocation(0, 1, 1),
new ScannerTest_ExpectedLocation(7, 2, 2),
new ScannerTest_ExpectedLocation(source.length - 1, 3, 4)]);
@@ -708,7 +708,7 @@
void test_lineInfo_simpleClass() {
String source = "class Test {\r\n String s = '...';\r\n int get x => s.MISSING_GETTER;\r\n}";
- assertLineInfo(source, [
+ _assertLineInfo(source, [
new ScannerTest_ExpectedLocation(0, 1, 1),
new ScannerTest_ExpectedLocation(source.indexOf("MISSING_GETTER"), 3, 20),
new ScannerTest_ExpectedLocation(source.length - 1, 4, 1)]);
@@ -716,77 +716,77 @@
void test_lineInfo_slashN() {
String source = "class Test {\n}";
- assertLineInfo(source, [
+ _assertLineInfo(source, [
new ScannerTest_ExpectedLocation(0, 1, 1),
new ScannerTest_ExpectedLocation(source.indexOf("}"), 2, 1)]);
}
void test_lt() {
- assertToken(TokenType.LT, "<");
+ _assertToken(TokenType.LT, "<");
}
void test_lt_eq() {
- assertToken(TokenType.LT_EQ, "<=");
+ _assertToken(TokenType.LT_EQ, "<=");
}
void test_lt_lt() {
- assertToken(TokenType.LT_LT, "<<");
+ _assertToken(TokenType.LT_LT, "<<");
}
void test_lt_lt_eq() {
- assertToken(TokenType.LT_LT_EQ, "<<=");
+ _assertToken(TokenType.LT_LT_EQ, "<<=");
}
void test_minus() {
- assertToken(TokenType.MINUS, "-");
+ _assertToken(TokenType.MINUS, "-");
}
void test_minus_eq() {
- assertToken(TokenType.MINUS_EQ, "-=");
+ _assertToken(TokenType.MINUS_EQ, "-=");
}
void test_minus_minus() {
- assertToken(TokenType.MINUS_MINUS, "--");
+ _assertToken(TokenType.MINUS_MINUS, "--");
}
void test_open_curly_bracket() {
- assertToken(TokenType.OPEN_CURLY_BRACKET, "{");
+ _assertToken(TokenType.OPEN_CURLY_BRACKET, "{");
}
void test_open_paren() {
- assertToken(TokenType.OPEN_PAREN, "(");
+ _assertToken(TokenType.OPEN_PAREN, "(");
}
void test_open_square_bracket() {
- assertToken(TokenType.OPEN_SQUARE_BRACKET, "[");
+ _assertToken(TokenType.OPEN_SQUARE_BRACKET, "[");
}
void test_openSquareBracket() {
- assertToken(TokenType.OPEN_SQUARE_BRACKET, "[");
+ _assertToken(TokenType.OPEN_SQUARE_BRACKET, "[");
}
void test_percent() {
- assertToken(TokenType.PERCENT, "%");
+ _assertToken(TokenType.PERCENT, "%");
}
void test_percent_eq() {
- assertToken(TokenType.PERCENT_EQ, "%=");
+ _assertToken(TokenType.PERCENT_EQ, "%=");
}
void test_period() {
- assertToken(TokenType.PERIOD, ".");
+ _assertToken(TokenType.PERIOD, ".");
}
void test_period_period() {
- assertToken(TokenType.PERIOD_PERIOD, "..");
+ _assertToken(TokenType.PERIOD_PERIOD, "..");
}
void test_period_period_period() {
- assertToken(TokenType.PERIOD_PERIOD_PERIOD, "...");
+ _assertToken(TokenType.PERIOD_PERIOD_PERIOD, "...");
}
void test_periodAfterNumberNotIncluded_identifier() {
- assertTokens("42.isEven()", [
+ _assertTokens("42.isEven()", [
new StringToken(TokenType.INT, "42", 0),
new Token(TokenType.PERIOD, 2),
new StringToken(TokenType.IDENTIFIER, "isEven", 3),
@@ -795,7 +795,7 @@
}
void test_periodAfterNumberNotIncluded_period() {
- assertTokens("42..isEven()", [
+ _assertTokens("42..isEven()", [
new StringToken(TokenType.INT, "42", 0),
new Token(TokenType.PERIOD_PERIOD, 2),
new StringToken(TokenType.IDENTIFIER, "isEven", 4),
@@ -804,35 +804,35 @@
}
void test_plus() {
- assertToken(TokenType.PLUS, "+");
+ _assertToken(TokenType.PLUS, "+");
}
void test_plus_eq() {
- assertToken(TokenType.PLUS_EQ, "+=");
+ _assertToken(TokenType.PLUS_EQ, "+=");
}
void test_plus_plus() {
- assertToken(TokenType.PLUS_PLUS, "++");
+ _assertToken(TokenType.PLUS_PLUS, "++");
}
void test_question() {
- assertToken(TokenType.QUESTION, "?");
+ _assertToken(TokenType.QUESTION, "?");
}
void test_scriptTag_withArgs() {
- assertToken(TokenType.SCRIPT_TAG, "#!/bin/dart -debug");
+ _assertToken(TokenType.SCRIPT_TAG, "#!/bin/dart -debug");
}
void test_scriptTag_withoutSpace() {
- assertToken(TokenType.SCRIPT_TAG, "#!/bin/dart");
+ _assertToken(TokenType.SCRIPT_TAG, "#!/bin/dart");
}
void test_scriptTag_withSpace() {
- assertToken(TokenType.SCRIPT_TAG, "#! /bin/dart");
+ _assertToken(TokenType.SCRIPT_TAG, "#! /bin/dart");
}
void test_semicolon() {
- assertToken(TokenType.SEMICOLON, ";");
+ _assertToken(TokenType.SEMICOLON, ";");
}
void test_setSourceStart() {
@@ -848,23 +848,23 @@
}
void test_slash() {
- assertToken(TokenType.SLASH, "/");
+ _assertToken(TokenType.SLASH, "/");
}
void test_slash_eq() {
- assertToken(TokenType.SLASH_EQ, "/=");
+ _assertToken(TokenType.SLASH_EQ, "/=");
}
void test_star() {
- assertToken(TokenType.STAR, "*");
+ _assertToken(TokenType.STAR, "*");
}
void test_star_eq() {
- assertToken(TokenType.STAR_EQ, "*=");
+ _assertToken(TokenType.STAR_EQ, "*=");
}
void test_startAndEnd() {
- Token token = scan("a");
+ Token token = _scan("a");
Token previous = token.previous;
JUnitTestCase.assertEquals(token, previous.next);
JUnitTestCase.assertEquals(previous, previous.previous);
@@ -874,19 +874,19 @@
}
void test_string_multi_double() {
- assertToken(TokenType.STRING, "\"\"\"line1\nline2\"\"\"");
+ _assertToken(TokenType.STRING, "\"\"\"line1\nline2\"\"\"");
}
void test_string_multi_embeddedQuotes() {
- assertToken(TokenType.STRING, "\"\"\"line1\n\"\"\nline2\"\"\"");
+ _assertToken(TokenType.STRING, "\"\"\"line1\n\"\"\nline2\"\"\"");
}
void test_string_multi_embeddedQuotes_escapedChar() {
- assertToken(TokenType.STRING, "\"\"\"a\"\"\\tb\"\"\"");
+ _assertToken(TokenType.STRING, "\"\"\"a\"\"\\tb\"\"\"");
}
void test_string_multi_interpolation_block() {
- assertTokens("\"Hello \${name}!\"", [
+ _assertTokens("\"Hello \${name}!\"", [
new StringToken(TokenType.STRING, "\"Hello ", 0),
new StringToken(TokenType.STRING_INTERPOLATION_EXPRESSION, "\${", 7),
new StringToken(TokenType.IDENTIFIER, "name", 9),
@@ -895,7 +895,7 @@
}
void test_string_multi_interpolation_identifier() {
- assertTokens("\"Hello \$name!\"", [
+ _assertTokens("\"Hello \$name!\"", [
new StringToken(TokenType.STRING, "\"Hello ", 0),
new StringToken(TokenType.STRING_INTERPOLATION_IDENTIFIER, "\$", 7),
new StringToken(TokenType.IDENTIFIER, "name", 8),
@@ -903,55 +903,55 @@
}
void test_string_multi_single() {
- assertToken(TokenType.STRING, "'''string'''");
+ _assertToken(TokenType.STRING, "'''string'''");
}
void test_string_multi_slashEnter() {
- assertToken(TokenType.STRING, "'''\\\n'''");
+ _assertToken(TokenType.STRING, "'''\\\n'''");
}
void test_string_multi_unterminated() {
- assertError(ScannerErrorCode.UNTERMINATED_STRING_LITERAL, 8, "'''string");
+ _assertError(ScannerErrorCode.UNTERMINATED_STRING_LITERAL, 8, "'''string");
}
void test_string_raw_multi_double() {
- assertToken(TokenType.STRING, "r\"\"\"line1\nline2\"\"\"");
+ _assertToken(TokenType.STRING, "r\"\"\"line1\nline2\"\"\"");
}
void test_string_raw_multi_single() {
- assertToken(TokenType.STRING, "r'''string'''");
+ _assertToken(TokenType.STRING, "r'''string'''");
}
void test_string_raw_multi_unterminated() {
- assertError(ScannerErrorCode.UNTERMINATED_STRING_LITERAL, 9, "r'''string");
+ _assertError(ScannerErrorCode.UNTERMINATED_STRING_LITERAL, 9, "r'''string");
}
void test_string_raw_simple_double() {
- assertToken(TokenType.STRING, "r\"string\"");
+ _assertToken(TokenType.STRING, "r\"string\"");
}
void test_string_raw_simple_single() {
- assertToken(TokenType.STRING, "r'string'");
+ _assertToken(TokenType.STRING, "r'string'");
}
void test_string_raw_simple_unterminated_eof() {
- assertError(ScannerErrorCode.UNTERMINATED_STRING_LITERAL, 7, "r'string");
+ _assertError(ScannerErrorCode.UNTERMINATED_STRING_LITERAL, 7, "r'string");
}
void test_string_raw_simple_unterminated_eol() {
- assertError(ScannerErrorCode.UNTERMINATED_STRING_LITERAL, 8, "r'string\n");
+ _assertError(ScannerErrorCode.UNTERMINATED_STRING_LITERAL, 8, "r'string\n");
}
void test_string_simple_double() {
- assertToken(TokenType.STRING, "\"string\"");
+ _assertToken(TokenType.STRING, "\"string\"");
}
void test_string_simple_escapedDollar() {
- assertToken(TokenType.STRING, "'a\\\$b'");
+ _assertToken(TokenType.STRING, "'a\\\$b'");
}
void test_string_simple_interpolation_adjacentIdentifiers() {
- assertTokens("'\$a\$b'", [
+ _assertTokens("'\$a\$b'", [
new StringToken(TokenType.STRING, "'", 0),
new StringToken(TokenType.STRING_INTERPOLATION_IDENTIFIER, "\$", 1),
new StringToken(TokenType.IDENTIFIER, "a", 2),
@@ -962,7 +962,7 @@
}
void test_string_simple_interpolation_block() {
- assertTokens("'Hello \${name}!'", [
+ _assertTokens("'Hello \${name}!'", [
new StringToken(TokenType.STRING, "'Hello ", 0),
new StringToken(TokenType.STRING_INTERPOLATION_EXPRESSION, "\${", 7),
new StringToken(TokenType.IDENTIFIER, "name", 9),
@@ -971,7 +971,7 @@
}
void test_string_simple_interpolation_blockWithNestedMap() {
- assertTokens("'a \${f({'b' : 'c'})} d'", [
+ _assertTokens("'a \${f({'b' : 'c'})} d'", [
new StringToken(TokenType.STRING, "'a ", 0),
new StringToken(TokenType.STRING_INTERPOLATION_EXPRESSION, "\${", 3),
new StringToken(TokenType.IDENTIFIER, "f", 5),
@@ -987,7 +987,7 @@
}
void test_string_simple_interpolation_firstAndLast() {
- assertTokens("'\$greeting \$name'", [
+ _assertTokens("'\$greeting \$name'", [
new StringToken(TokenType.STRING, "'", 0),
new StringToken(TokenType.STRING_INTERPOLATION_IDENTIFIER, "\$", 1),
new StringToken(TokenType.IDENTIFIER, "greeting", 2),
@@ -998,7 +998,7 @@
}
void test_string_simple_interpolation_identifier() {
- assertTokens("'Hello \$name!'", [
+ _assertTokens("'Hello \$name!'", [
new StringToken(TokenType.STRING, "'Hello ", 0),
new StringToken(TokenType.STRING_INTERPOLATION_IDENTIFIER, "\$", 7),
new StringToken(TokenType.IDENTIFIER, "name", 8),
@@ -1006,7 +1006,7 @@
}
void test_string_simple_interpolation_missingIdentifier() {
- assertTokens("'\$x\$'", [
+ _assertTokens("'\$x\$'", [
new StringToken(TokenType.STRING, "'", 0),
new StringToken(TokenType.STRING_INTERPOLATION_IDENTIFIER, "\$", 1),
new StringToken(TokenType.IDENTIFIER, "x", 2),
@@ -1016,46 +1016,46 @@
}
void test_string_simple_interpolation_nonIdentifier() {
- assertTokens("'\$1'", [
+ _assertTokens("'\$1'", [
new StringToken(TokenType.STRING, "'", 0),
new StringToken(TokenType.STRING_INTERPOLATION_IDENTIFIER, "\$", 1),
new StringToken(TokenType.STRING, "1'", 2)]);
}
void test_string_simple_single() {
- assertToken(TokenType.STRING, "'string'");
+ _assertToken(TokenType.STRING, "'string'");
}
void test_string_simple_unterminated_eof() {
- assertError(ScannerErrorCode.UNTERMINATED_STRING_LITERAL, 6, "'string");
+ _assertError(ScannerErrorCode.UNTERMINATED_STRING_LITERAL, 6, "'string");
}
void test_string_simple_unterminated_eol() {
- assertError(ScannerErrorCode.UNTERMINATED_STRING_LITERAL, 7, "'string\r");
+ _assertError(ScannerErrorCode.UNTERMINATED_STRING_LITERAL, 7, "'string\r");
}
void test_tilde() {
- assertToken(TokenType.TILDE, "~");
+ _assertToken(TokenType.TILDE, "~");
}
void test_tilde_slash() {
- assertToken(TokenType.TILDE_SLASH, "~/");
+ _assertToken(TokenType.TILDE_SLASH, "~/");
}
void test_tilde_slash_eq() {
- assertToken(TokenType.TILDE_SLASH_EQ, "~/=");
+ _assertToken(TokenType.TILDE_SLASH_EQ, "~/=");
}
void test_unclosedPairInInterpolation() {
GatheringErrorListener listener = new GatheringErrorListener();
- scanWithListener("'\${(}'", listener);
+ _scanWithListener("'\${(}'", listener);
}
- void assertComment(TokenType commentType, String source) {
+ void _assertComment(TokenType commentType, String source) {
//
// Test without a trailing end-of-line marker
//
- Token token = scan(source);
+ Token token = _scan(source);
JUnitTestCase.assertNotNull(token);
JUnitTestCase.assertEquals(TokenType.EOF, token.type);
Token comment = token.precedingComments;
@@ -1067,7 +1067,7 @@
//
// Test with a trailing end-of-line marker
//
- token = scan("${source}\n");
+ token = _scan("${source}\n");
JUnitTestCase.assertNotNull(token);
JUnitTestCase.assertEquals(TokenType.EOF, token.type);
comment = token.precedingComments;
@@ -1085,9 +1085,9 @@
* @param i
* @param source the source to be scanned to produce the error
*/
- void assertError(ScannerErrorCode expectedError, int expectedOffset, String source) {
+ void _assertError(ScannerErrorCode expectedError, int expectedOffset, String source) {
GatheringErrorListener listener = new GatheringErrorListener();
- scanWithListener(source, listener);
+ _scanWithListener(source, listener);
listener.assertErrors([new AnalysisError.con2(null, expectedOffset, 1, expectedError, [source.codeUnitAt(expectedOffset)])]);
}
@@ -1097,8 +1097,8 @@
*
* @param source the source to be scanned
*/
- void assertKeywordToken(String source) {
- Token token = scan(source);
+ void _assertKeywordToken(String source) {
+ Token token = _scan(source);
JUnitTestCase.assertNotNull(token);
JUnitTestCase.assertEquals(TokenType.KEYWORD, token.type);
JUnitTestCase.assertEquals(0, token.offset);
@@ -1107,7 +1107,7 @@
Object value = token.value();
JUnitTestCase.assertTrue(value is Keyword);
JUnitTestCase.assertEquals(source, (value as Keyword).syntax);
- token = scan(" ${source} ");
+ token = _scan(" ${source} ");
JUnitTestCase.assertNotNull(token);
JUnitTestCase.assertEquals(TokenType.KEYWORD, token.type);
JUnitTestCase.assertEquals(1, token.offset);
@@ -1119,9 +1119,9 @@
JUnitTestCase.assertEquals(TokenType.EOF, token.next.type);
}
- void assertLineInfo(String source, List<ScannerTest_ExpectedLocation> expectedLocations) {
+ void _assertLineInfo(String source, List<ScannerTest_ExpectedLocation> expectedLocations) {
GatheringErrorListener listener = new GatheringErrorListener();
- scanWithListener(source, listener);
+ _scanWithListener(source, listener);
listener.assertNoErrors();
LineInfo info = listener.getLineInfo(new TestSource());
JUnitTestCase.assertNotNull(info);
@@ -1138,8 +1138,8 @@
* @param expectedType the expected type of the token
* @param source the source to be scanned to produce the actual token
*/
- Token assertToken(TokenType expectedType, String source) {
- Token originalToken = scan(source);
+ Token _assertToken(TokenType expectedType, String source) {
+ Token originalToken = _scan(source);
JUnitTestCase.assertNotNull(originalToken);
JUnitTestCase.assertEquals(expectedType, originalToken.type);
JUnitTestCase.assertEquals(0, originalToken.offset);
@@ -1150,7 +1150,7 @@
return originalToken;
} else if (identical(expectedType, TokenType.SINGLE_LINE_COMMENT)) {
// Adding space to an end-of-line comment changes the comment.
- Token tokenWithSpaces = scan(" ${source}");
+ Token tokenWithSpaces = _scan(" ${source}");
JUnitTestCase.assertNotNull(tokenWithSpaces);
JUnitTestCase.assertEquals(expectedType, tokenWithSpaces.type);
JUnitTestCase.assertEquals(1, tokenWithSpaces.offset);
@@ -1158,20 +1158,20 @@
JUnitTestCase.assertEquals(source, tokenWithSpaces.lexeme);
return originalToken;
} else if (identical(expectedType, TokenType.INT) || identical(expectedType, TokenType.DOUBLE)) {
- Token tokenWithLowerD = scan("${source}d");
+ Token tokenWithLowerD = _scan("${source}d");
JUnitTestCase.assertNotNull(tokenWithLowerD);
JUnitTestCase.assertEquals(expectedType, tokenWithLowerD.type);
JUnitTestCase.assertEquals(0, tokenWithLowerD.offset);
JUnitTestCase.assertEquals(source.length, tokenWithLowerD.length);
JUnitTestCase.assertEquals(source, tokenWithLowerD.lexeme);
- Token tokenWithUpperD = scan("${source}D");
+ Token tokenWithUpperD = _scan("${source}D");
JUnitTestCase.assertNotNull(tokenWithUpperD);
JUnitTestCase.assertEquals(expectedType, tokenWithUpperD.type);
JUnitTestCase.assertEquals(0, tokenWithUpperD.offset);
JUnitTestCase.assertEquals(source.length, tokenWithUpperD.length);
JUnitTestCase.assertEquals(source, tokenWithUpperD.lexeme);
}
- Token tokenWithSpaces = scan(" ${source} ");
+ Token tokenWithSpaces = _scan(" ${source} ");
JUnitTestCase.assertNotNull(tokenWithSpaces);
JUnitTestCase.assertEquals(expectedType, tokenWithSpaces.type);
JUnitTestCase.assertEquals(1, tokenWithSpaces.offset);
@@ -1188,8 +1188,8 @@
* @param source the source to be scanned
* @param expectedTokens the tokens that are expected to be in the source
*/
- void assertTokens(String source, List<Token> expectedTokens) {
- Token token = scan(source);
+ void _assertTokens(String source, List<Token> expectedTokens) {
+ Token token = _scan(source);
JUnitTestCase.assertNotNull(token);
for (int i = 0; i < expectedTokens.length; i++) {
Token expectedToken = expectedTokens[i];
@@ -1203,14 +1203,14 @@
JUnitTestCase.assertEquals(TokenType.EOF, token.type);
}
- Token scan(String source) {
+ Token _scan(String source) {
GatheringErrorListener listener = new GatheringErrorListener();
- Token token = scanWithListener(source, listener);
+ Token token = _scanWithListener(source, listener);
listener.assertNoErrors();
return token;
}
- Token scanWithListener(String source, GatheringErrorListener listener) {
+ Token _scanWithListener(String source, GatheringErrorListener listener) {
Scanner scanner = new Scanner(null, new CharSequenceReader(source), listener);
Token result = scanner.tokenize();
listener.setLineInfo(new TestSource(), scanner.lineStarts);
@@ -1915,246 +1915,246 @@
void test_delete_identifier_beginning() {
// "abs + b;"
// "s + b;")
- scan("", "ab", "", "s + b;");
- assertTokens(-1, 1, ["s", "+", "b", ";"]);
+ _scan("", "ab", "", "s + b;");
+ _assertTokens(-1, 1, ["s", "+", "b", ";"]);
JUnitTestCase.assertTrue(_incrementalScanner.hasNonWhitespaceChange);
}
void test_delete_identifier_end() {
// "abs + b;"
// "a + b;")
- scan("a", "bs", "", " + b;");
- assertTokens(-1, 1, ["a", "+", "b", ";"]);
+ _scan("a", "bs", "", " + b;");
+ _assertTokens(-1, 1, ["a", "+", "b", ";"]);
JUnitTestCase.assertTrue(_incrementalScanner.hasNonWhitespaceChange);
}
void test_delete_identifier_middle() {
// "abs + b;"
// "as + b;")
- scan("a", "b", "", "s + b;");
- assertTokens(-1, 1, ["as", "+", "b", ";"]);
+ _scan("a", "b", "", "s + b;");
+ _assertTokens(-1, 1, ["as", "+", "b", ";"]);
JUnitTestCase.assertTrue(_incrementalScanner.hasNonWhitespaceChange);
}
void test_delete_mergeTokens() {
// "a + b + c;"
// "ac;")
- scan("a", " + b + ", "", "c;");
- assertTokens(-1, 1, ["ac", ";"]);
+ _scan("a", " + b + ", "", "c;");
+ _assertTokens(-1, 1, ["ac", ";"]);
JUnitTestCase.assertTrue(_incrementalScanner.hasNonWhitespaceChange);
}
void test_insert_afterIdentifier1() {
// "a + b;"
// "abs + b;"
- scan("a", "", "bs", " + b;");
- assertTokens(-1, 1, ["abs", "+", "b", ";"]);
- assertReplaced(1, "+");
+ _scan("a", "", "bs", " + b;");
+ _assertTokens(-1, 1, ["abs", "+", "b", ";"]);
+ _assertReplaced(1, "+");
JUnitTestCase.assertTrue(_incrementalScanner.hasNonWhitespaceChange);
}
void test_insert_afterIdentifier2() {
// "a + b;"
// "a + by;"
- scan("a + b", "", "y", ";");
- assertTokens(1, 3, ["a", "+", "by", ";"]);
+ _scan("a + b", "", "y", ";");
+ _assertTokens(1, 3, ["a", "+", "by", ";"]);
JUnitTestCase.assertTrue(_incrementalScanner.hasNonWhitespaceChange);
}
void test_insert_beforeIdentifier() {
// "a + b;"
// "a + xb;")
- scan("a + ", "", "x", "b;");
- assertTokens(1, 3, ["a", "+", "xb", ";"]);
+ _scan("a + ", "", "x", "b;");
+ _assertTokens(1, 3, ["a", "+", "xb", ";"]);
JUnitTestCase.assertTrue(_incrementalScanner.hasNonWhitespaceChange);
}
void test_insert_beforeIdentifier_firstToken() {
// "a + b;"
// "xa + b;"
- scan("", "", "x", "a + b;");
- assertTokens(-1, 1, ["xa", "+", "b", ";"]);
+ _scan("", "", "x", "a + b;");
+ _assertTokens(-1, 1, ["xa", "+", "b", ";"]);
JUnitTestCase.assertTrue(_incrementalScanner.hasNonWhitespaceChange);
}
void test_insert_convertOneFunctionToTwo() {
// "f() {}"
// "f() => 0; g() {}"
- scan("f()", "", " => 0; g()", " {}");
- assertTokens(2, 9, ["f", "(", ")", "=>", "0", ";", "g", "(", ")", "{", "}"]);
+ _scan("f()", "", " => 0; g()", " {}");
+ _assertTokens(2, 9, ["f", "(", ")", "=>", "0", ";", "g", "(", ")", "{", "}"]);
JUnitTestCase.assertTrue(_incrementalScanner.hasNonWhitespaceChange);
}
void test_insert_end() {
// "class A {}"
// "class A {} class B {}"
- scan("class A {}", "", " class B {}", "");
- assertTokens(3, 8, ["class", "A", "{", "}", "class", "B", "{", "}"]);
+ _scan("class A {}", "", " class B {}", "");
+ _assertTokens(3, 8, ["class", "A", "{", "}", "class", "B", "{", "}"]);
JUnitTestCase.assertTrue(_incrementalScanner.hasNonWhitespaceChange);
}
void test_insert_insideIdentifier() {
// "cob;"
// "cow.b;"
- scan("co", "", "w.", "b;");
- assertTokens(-1, 3, ["cow", ".", "b", ";"]);
+ _scan("co", "", "w.", "b;");
+ _assertTokens(-1, 3, ["cow", ".", "b", ";"]);
JUnitTestCase.assertTrue(_incrementalScanner.hasNonWhitespaceChange);
}
void test_insert_newIdentifier1() {
// "a; c;"
// "a; b c;"
- scan("a; ", "", "b", " c;");
- assertTokens(1, 3, ["a", ";", "b", "c", ";"]);
+ _scan("a; ", "", "b", " c;");
+ _assertTokens(1, 3, ["a", ";", "b", "c", ";"]);
JUnitTestCase.assertTrue(_incrementalScanner.hasNonWhitespaceChange);
}
void test_insert_newIdentifier2() {
// "a; c;"
// "a;b c;"
- scan("a;", "", "b", " c;");
- assertTokens(1, 3, ["a", ";", "b", "c", ";"]);
- assertReplaced(1, ";");
+ _scan("a;", "", "b", " c;");
+ _assertTokens(1, 3, ["a", ";", "b", "c", ";"]);
+ _assertReplaced(1, ";");
JUnitTestCase.assertTrue(_incrementalScanner.hasNonWhitespaceChange);
}
void test_insert_period() {
// "a + b;"
// "a + b.;"
- scan("a + b", "", ".", ";");
- assertTokens(2, 4, ["a", "+", "b", ".", ";"]);
+ _scan("a + b", "", ".", ";");
+ _assertTokens(2, 4, ["a", "+", "b", ".", ";"]);
}
void test_insert_period_betweenIdentifiers1() {
// "a b;"
// "a. b;"
- scan("a", "", ".", " b;");
- assertTokens(0, 2, ["a", ".", "b", ";"]);
+ _scan("a", "", ".", " b;");
+ _assertTokens(0, 2, ["a", ".", "b", ";"]);
JUnitTestCase.assertTrue(_incrementalScanner.hasNonWhitespaceChange);
}
void test_insert_period_betweenIdentifiers2() {
// "a b;"
// "a .b;"
- scan("a ", "", ".", "b;");
- assertTokens(0, 2, ["a", ".", "b", ";"]);
+ _scan("a ", "", ".", "b;");
+ _assertTokens(0, 2, ["a", ".", "b", ";"]);
}
void test_insert_period_betweenIdentifiers3() {
// "a b;"
// "a . b;"
- scan("a ", "", ".", " b;");
- assertTokens(0, 2, ["a", ".", "b", ";"]);
+ _scan("a ", "", ".", " b;");
+ _assertTokens(0, 2, ["a", ".", "b", ";"]);
JUnitTestCase.assertTrue(_incrementalScanner.hasNonWhitespaceChange);
}
void test_insert_period_insideExistingIdentifier() {
// "ab;"
// "a.b;"
- scan("a", "", ".", "b;");
- assertTokens(-1, 3, ["a", ".", "b", ";"]);
+ _scan("a", "", ".", "b;");
+ _assertTokens(-1, 3, ["a", ".", "b", ";"]);
JUnitTestCase.assertTrue(_incrementalScanner.hasNonWhitespaceChange);
}
void test_insert_periodAndIdentifier() {
// "a + b;"
// "a + b.x;"
- scan("a + b", "", ".x", ";");
- assertTokens(2, 5, ["a", "+", "b", ".", "x", ";"]);
+ _scan("a + b", "", ".x", ";");
+ _assertTokens(2, 5, ["a", "+", "b", ".", "x", ";"]);
}
void test_insert_whitespace_beginning_beforeToken() {
// "a + b;"
// " a + b;"
- scan("", "", " ", "a + b;");
- assertTokens(0, 1, ["a", "+", "b", ";"]);
+ _scan("", "", " ", "a + b;");
+ _assertTokens(0, 1, ["a", "+", "b", ";"]);
JUnitTestCase.assertFalse(_incrementalScanner.hasNonWhitespaceChange);
}
void test_insert_whitespace_betweenTokens() {
// "a + b;"
// "a + b;"
- scan("a ", "", " ", "+ b;");
- assertTokens(1, 2, ["a", "+", "b", ";"]);
+ _scan("a ", "", " ", "+ b;");
+ _assertTokens(1, 2, ["a", "+", "b", ";"]);
JUnitTestCase.assertFalse(_incrementalScanner.hasNonWhitespaceChange);
}
void test_insert_whitespace_end_afterToken() {
// "a + b;"
// "a + b; "
- scan("a + b;", "", " ", "");
- assertTokens(3, 4, ["a", "+", "b", ";"]);
+ _scan("a + b;", "", " ", "");
+ _assertTokens(3, 4, ["a", "+", "b", ";"]);
JUnitTestCase.assertFalse(_incrementalScanner.hasNonWhitespaceChange);
}
void test_insert_whitespace_end_afterWhitespace() {
// "a + b; "
// "a + b; "
- scan("a + b; ", "", " ", "");
- assertTokens(3, 4, ["a", "+", "b", ";"]);
+ _scan("a + b; ", "", " ", "");
+ _assertTokens(3, 4, ["a", "+", "b", ";"]);
JUnitTestCase.assertFalse(_incrementalScanner.hasNonWhitespaceChange);
}
void test_insert_whitespace_withMultipleComments() {
// "//comment", "//comment2", "a + b;"
// "//comment", "//comment2", "a + b;"
- scan(EngineTestCase.createSource(["//comment", "//comment2", "a"]), "", " ", " + b;");
- assertTokens(1, 2, ["a", "+", "b", ";"]);
+ _scan(EngineTestCase.createSource(["//comment", "//comment2", "a"]), "", " ", " + b;");
+ _assertTokens(1, 2, ["a", "+", "b", ";"]);
JUnitTestCase.assertFalse(_incrementalScanner.hasNonWhitespaceChange);
}
void test_replace_identifier_beginning() {
// "bell + b;"
// "fell + b;")
- scan("", "b", "f", "ell + b;");
- assertTokens(-1, 1, ["fell", "+", "b", ";"]);
+ _scan("", "b", "f", "ell + b;");
+ _assertTokens(-1, 1, ["fell", "+", "b", ";"]);
JUnitTestCase.assertTrue(_incrementalScanner.hasNonWhitespaceChange);
}
void test_replace_identifier_end() {
// "bell + b;"
// "belt + b;")
- scan("bel", "l", "t", " + b;");
- assertTokens(-1, 1, ["belt", "+", "b", ";"]);
+ _scan("bel", "l", "t", " + b;");
+ _assertTokens(-1, 1, ["belt", "+", "b", ";"]);
JUnitTestCase.assertTrue(_incrementalScanner.hasNonWhitespaceChange);
}
void test_replace_identifier_middle() {
// "first + b;"
// "frost + b;")
- scan("f", "ir", "ro", "st + b;");
- assertTokens(-1, 1, ["frost", "+", "b", ";"]);
+ _scan("f", "ir", "ro", "st + b;");
+ _assertTokens(-1, 1, ["frost", "+", "b", ";"]);
JUnitTestCase.assertTrue(_incrementalScanner.hasNonWhitespaceChange);
}
void test_replace_multiple_partialFirstAndLast() {
// "aa + bb;"
// "ab * ab;")
- scan("a", "a + b", "b * a", "b;");
- assertTokens(-1, 3, ["ab", "*", "ab", ";"]);
+ _scan("a", "a + b", "b * a", "b;");
+ _assertTokens(-1, 3, ["ab", "*", "ab", ";"]);
JUnitTestCase.assertTrue(_incrementalScanner.hasNonWhitespaceChange);
}
void test_replace_operator_oneForMany() {
// "a + b;"
// "a * c - b;")
- scan("a ", "+", "* c -", " b;");
- assertTokens(0, 4, ["a", "*", "c", "-", "b", ";"]);
+ _scan("a ", "+", "* c -", " b;");
+ _assertTokens(0, 4, ["a", "*", "c", "-", "b", ";"]);
JUnitTestCase.assertTrue(_incrementalScanner.hasNonWhitespaceChange);
}
void test_replace_operator_oneForOne() {
// "a + b;"
// "a * b;")
- scan("a ", "+", "*", " b;");
- assertTokens(0, 2, ["a", "*", "b", ";"]);
+ _scan("a ", "+", "*", " b;");
+ _assertTokens(0, 2, ["a", "*", "b", ";"]);
JUnitTestCase.assertTrue(_incrementalScanner.hasNonWhitespaceChange);
}
void test_tokenMap() {
// "main() {a + b;}"
// "main() { a + b;}"
- scan("main() {", "", " ", "a + b;}");
+ _scan("main() {", "", " ", "a + b;}");
TokenMap tokenMap = _incrementalScanner.tokenMap;
Token oldToken = _originalTokens;
while (oldToken.type != TokenType.EOF) {
@@ -2174,7 +2174,7 @@
* @param tokenOffset the offset of the token being tested
* @param lexeme the expected lexeme of the new token
*/
- void assertReplaced(int tokenOffset, String lexeme) {
+ void _assertReplaced(int tokenOffset, String lexeme) {
Token oldToken = _originalTokens;
for (int i = 0; i < tokenOffset; i++) {
oldToken = oldToken.next;
@@ -2194,7 +2194,7 @@
* @param rightIndex the expected index of the right token
* @param lexemes the expected lexemes of the resulting tokens
*/
- void assertTokens(int leftIndex, int rightIndex, List<String> lexemes) {
+ void _assertTokens(int leftIndex, int rightIndex, List<String> lexemes) {
int count = lexemes.length;
JUnitTestCase.assertTrueMsg("Invalid left index", leftIndex >= -1 && leftIndex < count);
JUnitTestCase.assertTrueMsg("Invalid right index", rightIndex >= 0 && rightIndex <= count);
@@ -2238,7 +2238,7 @@
* @param added the text that was added to the modified contents
* @param suffix the unchanged text after the edit region
*/
- void scan(String prefix, String removed, String added, String suffix) {
+ void _scan(String prefix, String removed, String added, String suffix) {
//
// Compute the information needed to perform the test.
//
diff --git a/pkg/analyzer/test/generated/test_support.dart b/pkg/analyzer/test/generated/test_support.dart
index cdcbabb..9bffa5a 100644
--- a/pkg/analyzer/test/generated/test_support.dart
+++ b/pkg/analyzer/test/generated/test_support.dart
@@ -84,15 +84,15 @@
*/
void assertErrors(List<AnalysisError> expectedErrors) {
if (_errors.length != expectedErrors.length) {
- fail(expectedErrors);
+ _fail(expectedErrors);
}
List<AnalysisError> remainingErrors = new List<AnalysisError>();
for (AnalysisError error in expectedErrors) {
remainingErrors.add(error);
}
for (AnalysisError error in _errors) {
- if (!foundAndRemoved(remainingErrors, error)) {
- fail(expectedErrors);
+ if (!_foundAndRemoved(remainingErrors, error)) {
+ _fail(expectedErrors);
}
}
}
@@ -277,6 +277,7 @@
*/
bool get hasErrors => _errors.length > 0;
+ @override
void onError(AnalysisError error) {
if (_rawSource != null) {
int left = error.offset;
@@ -303,7 +304,7 @@
* @param secondError the second error being compared
* @return `true` if the two errors are equivalent
*/
- bool equalErrors(AnalysisError firstError, AnalysisError secondError) => identical(firstError.errorCode, secondError.errorCode) && firstError.offset == secondError.offset && firstError.length == secondError.length && equalSources(firstError.source, secondError.source);
+ bool _equalErrors(AnalysisError firstError, AnalysisError secondError) => identical(firstError.errorCode, secondError.errorCode) && firstError.offset == secondError.offset && firstError.length == secondError.length && _equalSources(firstError.source, secondError.source);
/**
* Return `true` if the two sources are equivalent.
@@ -312,7 +313,7 @@
* @param secondSource the second source being compared
* @return `true` if the two sources are equivalent
*/
- bool equalSources(Source firstSource, Source secondSource) {
+ bool _equalSources(Source firstSource, Source secondSource) {
if (firstSource == null) {
return secondSource == null;
} else if (secondSource == null) {
@@ -329,7 +330,7 @@
* @param errorCodes the errors that should have been gathered
* @throws AssertionFailedError with
*/
- void fail(List<AnalysisError> expectedErrors) {
+ void _fail(List<AnalysisError> expectedErrors) {
PrintStringWriter writer = new PrintStringWriter();
writer.print("Expected ");
writer.print(expectedErrors.length);
@@ -394,9 +395,9 @@
* @param targetError the error being searched for
* @return `true` if the error is found and removed from the list
*/
- bool foundAndRemoved(List<AnalysisError> errors, AnalysisError targetError) {
+ bool _foundAndRemoved(List<AnalysisError> errors, AnalysisError targetError) {
for (AnalysisError error in errors) {
- if (equalErrors(error, targetError)) {
+ if (_equalErrors(error, targetError)) {
errors.remove(error);
return true;
}
@@ -465,7 +466,7 @@
}
List<bool> found = new List<bool>.filled(expectedSize, false);
for (int i = 0; i < expectedSize; i++) {
- privateAssertContains(array, found, expectedElements[i]);
+ _privateAssertContains(array, found, expectedElements[i]);
}
}
@@ -517,7 +518,7 @@
JUnitTestCase.assertTrueMsg("Content not as expected: expected 'null' is: ${actual}", false);
}
}
- int diffPos = getDiffPos(expected, actual);
+ int diffPos = _getDiffPos(expected, actual);
if (diffPos != -1) {
int diffAhead = Math.max(0, diffPos - _PRINT_RANGE);
int diffAfter = Math.min(actual.length, diffPos + _PRINT_RANGE);
@@ -731,7 +732,7 @@
* @param str2 the second String to compare
* @return the offset at which the strings differ (or <code>-1</code> if they do not)
*/
- static int getDiffPos(String str1, String str2) {
+ static int _getDiffPos(String str1, String str2) {
int len1 = Math.min(str1.length, str2.length);
int diffPos = -1;
for (int i = 0; i < len1; i++) {
@@ -746,7 +747,7 @@
return diffPos;
}
- static void privateAssertContains(List<Object> array, List<bool> found, Object element) {
+ static void _privateAssertContains(List<Object> array, List<bool> found, Object element) {
if (element == null) {
for (int i = 0; i < array.length; i++) {
if (!found[i]) {
@@ -859,31 +860,3 @@
throw new UnsupportedOperationException();
}
}
-
-/**
- * Wrapper around [Function] which should be called with "target" and "arguments".
- */
-class MethodTrampoline {
- int parameterCount;
- Function trampoline;
- MethodTrampoline(this.parameterCount, this.trampoline);
- Object invoke(target, List arguments) {
- if (arguments.length != parameterCount) {
- throw new IllegalArgumentException("${arguments.length} != $parameterCount");
- }
- switch (parameterCount) {
- case 0:
- return trampoline(target);
- case 1:
- return trampoline(target, arguments[0]);
- case 2:
- return trampoline(target, arguments[0], arguments[1]);
- case 3:
- return trampoline(target, arguments[0], arguments[1], arguments[2]);
- case 4:
- return trampoline(target, arguments[0], arguments[1], arguments[2], arguments[3]);
- default:
- throw new IllegalArgumentException("Not implemented for > 4 arguments");
- }
- }
-}
diff --git a/pkg/analyzer/test/options_test.dart b/pkg/analyzer/test/options_test.dart
index 6dde78b..b9fdfa2 100644
--- a/pkg/analyzer/test/options_test.dart
+++ b/pkg/analyzer/test/options_test.dart
@@ -17,24 +17,40 @@
expect(options, isNotNull);
expect(options.shouldBatch, isFalse);
expect(options.machineFormat, isFalse);
+ expect(options.displayVersion, isFalse);
+ expect(options.disableHints, isFalse);
expect(options.ignoreUnrecognizedFlags, isFalse);
+ expect(options.perf, isFalse);
expect(options.showPackageWarnings, isFalse);
expect(options.showSdkWarnings, isFalse);
expect(options.warningsAreFatal, isFalse);
expect(options.dartSdkPath, isNotNull);
+ expect(options.log, isFalse);
expect(options.sourceFiles, equals(['foo.dart']));
});
+ test('batch', () {
+ CommandLineOptions options = CommandLineOptions
+ .parse(['--dart-sdk', '.', '--batch']);
+ expect(options.shouldBatch, isTrue);
+ });
+
test('machine format', () {
CommandLineOptions options = CommandLineOptions
.parse(['--dart-sdk', '.', '--format=machine', 'foo.dart']);
expect(options.machineFormat, isTrue);
});
- test('package root', () {
+ test('no-hints', () {
CommandLineOptions options = CommandLineOptions
- .parse(['--dart-sdk', '.', '-p', 'bar', 'foo.dart']);
- expect(options.packageRootPath, equals('bar'));
+ .parse(['--dart-sdk', '.', '--no-hints', 'foo.dart']);
+ expect(options.disableHints, isTrue);
+ });
+
+ test('perf', () {
+ CommandLineOptions options = CommandLineOptions
+ .parse(['--dart-sdk', '.', '--perf', 'foo.dart']);
+ expect(options.perf, isTrue);
});
test('package warnings', () {
@@ -49,6 +65,30 @@
expect(options.showSdkWarnings, isTrue);
});
+ test('warningsAreFatal', () {
+ CommandLineOptions options = CommandLineOptions
+ .parse(['--dart-sdk', '.', '--fatal-warnings', 'foo.dart']);
+ expect(options.warningsAreFatal, isTrue);
+ });
+
+ test('package root', () {
+ CommandLineOptions options = CommandLineOptions
+ .parse(['--dart-sdk', '.', '-p', 'bar', 'foo.dart']);
+ expect(options.packageRootPath, equals('bar'));
+ });
+
+ test('log', () {
+ CommandLineOptions options = CommandLineOptions
+ .parse(['--dart-sdk', '.', '--log', 'foo.dart']);
+ expect(options.log, isTrue);
+ });
+
+ test('sourceFiles', () {
+ CommandLineOptions options = CommandLineOptions
+ .parse(['--dart-sdk', '.', '--log', 'foo.dart', 'foo2.dart', 'foo3.dart']);
+ expect(options.sourceFiles, equals(['foo.dart', 'foo2.dart', 'foo3.dart']));
+ });
+
// test('notice unrecognized flags', () {
// CommandLineOptions options = new CommandLineOptions.parse(['--bar', '--baz',
// 'foo.dart']);
@@ -65,4 +105,3 @@
});
}
-
diff --git a/pkg/analyzer/test/parse_compilation_unit_test.dart b/pkg/analyzer/test/parse_compilation_unit_test.dart
index 91bb9e9..4c2ad3b 100644
--- a/pkg/analyzer/test/parse_compilation_unit_test.dart
+++ b/pkg/analyzer/test/parse_compilation_unit_test.dart
@@ -17,7 +17,7 @@
name: 'test.dart');
}, throwsA(predicate((error) {
return error is AnalyzerErrorGroup &&
- error.toString().contains("line 1 of test.dart");
+ error.toString().contains("Error in test.dart: Expected to find ';'");
})));
});
@@ -26,7 +26,7 @@
parseCompilationUnit("void main() => print('Hello, world!')");
}, throwsA(predicate((error) {
return error is AnalyzerErrorGroup &&
- error.toString().contains("line 1 of <unknown source>");
+ error.toString().contains("Error in <unknown source>: Expected to find ';'");
})));
});
}
diff --git a/pkg/analyzer/test/services/data/stmt_tests.data b/pkg/analyzer/test/services/data/stmt_tests.data
index 603d8a4..006ca41 100644
--- a/pkg/analyzer/test/services/data/stmt_tests.data
+++ b/pkg/analyzer/test/services/data/stmt_tests.data
@@ -166,4 +166,28 @@
<<<
for ( ; ; ) {
print('!');
+}
+>>>
+main() {
+ var zero = 0;
+ if (0 == 0) {
+ zero = 0;
+ } else if (0 == 1) {
+ zero = 1;
+ } else if (0 == 2) {
+ zero = 2;
+ }
+ print(0);
+}
+<<<
+main() {
+ var zero = 0;
+ if (0 == 0) {
+ zero = 0;
+ } else if (0 == 1) {
+ zero = 1;
+ } else if (0 == 2) {
+ zero = 2;
+ }
+ print(0);
}
\ No newline at end of file
diff --git a/pkg/analyzer/test/services/formatter_test.dart b/pkg/analyzer/test/services/formatter_test.dart
index c77f6f9..e0a982d 100644
--- a/pkg/analyzer/test/services/formatter_test.dart
+++ b/pkg/analyzer/test/services/formatter_test.dart
@@ -2,6 +2,8 @@
// 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 formatter_test;
+
import 'dart:io';
import 'package:path/path.dart';
@@ -49,6 +51,47 @@
throwsA(new isInstanceOf<FormatterException>()));
});
+ test('indent', () {
+ var original =
+ 'class A {\n'
+ ' var z;\n'
+ ' inc(int x) => ++x;\n'
+ ' foo(int x) {\n'
+ ' if (x == 0) {\n'
+ ' return true;\n'
+ ' }\n'
+ ' }\n'
+ '}\n';
+ expectCUFormatsTo(
+ original,
+ original
+ );
+ expectIndentFormatsTo(3, false,
+ original,
+ 'class A {\n'
+ ' var z;\n'
+ ' inc(int x) => ++x;\n'
+ ' foo(int x) {\n'
+ ' if (x == 0) {\n'
+ ' return true;\n'
+ ' }\n'
+ ' }\n'
+ '}\n'
+ );
+ expectIndentFormatsTo(1, true,
+ original,
+ 'class A {\n'
+ '\tvar z;\n'
+ '\tinc(int x) => ++x;\n'
+ '\tfoo(int x) {\n'
+ '\t\tif (x == 0) {\n'
+ '\t\t\treturn true;\n'
+ '\t\t}\n'
+ '\t}\n'
+ '}\n'
+ );
+ });
+
test('CU (1)', () {
expectCUFormatsTo(
'class A {\n'
@@ -1417,6 +1460,14 @@
expect(formatCU(src, options: new FormatterOptions(
codeTransforms: transforms)).source, equals(expected));
+expectIndentFormatsTo(spacesPerIndent, tabsForIndent, src, expected) =>
+ expect(
+ formatCU(src, options: new FormatterOptions(
+ spacesPerIndent: spacesPerIndent,
+ tabsForIndent: tabsForIndent
+ )).source,
+ equals(expected));
+
expectStmtFormatsTo(src, expected, {transforms: true}) =>
expect(formatStatement(src, options:
new FormatterOptions(codeTransforms: transforms)), equals(expected));
diff --git a/pkg/barback/CHANGELOG.md b/pkg/barback/CHANGELOG.md
new file mode 100644
index 0000000..c355a35
--- /dev/null
+++ b/pkg/barback/CHANGELOG.md
@@ -0,0 +1,24 @@
+## 0.12.0
+
+* Add a `Transform.logger.fine` function that doesn't print its messages by
+ default. When using Barback with pub in verbose mode, these messages will be
+ printed.
+
+* `Transformer.allowedExtensions` now supports extensions containing multiple
+ periods, such as `.dart.js`.
+
+* Transforms now pass their primary inputs through to the next phase by default.
+ A transformer may still overwrite its primary input without causing a
+ collision. If a transformer doesn't overwrite its primary input, it may cause
+ it not to be passed through by calling `Transform.consumePrimary`. The primary
+ input will be consumed by default if a transformer throws an error.
+
+* If an input requested with `Transform.getInput`, `Transform.readInput`, or
+ `Transform.readInputAsString` cannot be found, an `AssetNotFoundException`
+ will be thrown. This was always what the documentation said, but previously a
+ `MissingInputException` was thrown instead.
+
+* If a transformer calls `Transform.logger.error`, the transformer will now be
+ considered to have failed after it finishes running `apply()`. This means that
+ its outputs will not be consumed by future transformers and its primary input
+ will not be passed through to the next phase.
diff --git a/pkg/barback/lib/barback.dart b/pkg/barback/lib/barback.dart
index 173fb53..cbb55fc 100644
--- a/pkg/barback/lib/barback.dart
+++ b/pkg/barback/lib/barback.dart
@@ -11,13 +11,13 @@
export 'src/barback_settings.dart';
export 'src/base_transform.dart';
export 'src/build_result.dart';
-export 'src/declaring_transform.dart';
+export 'src/declaring_transform.dart' hide DeclaringTransformController;
export 'src/declaring_transformer.dart';
export 'src/errors.dart' hide flattenAggregateExceptions;
export 'src/lazy_transformer.dart';
export 'src/log.dart';
export 'src/package_provider.dart';
-export 'src/transform.dart';
+export 'src/transform.dart' hide TransformController;
export 'src/transform_logger.dart';
export 'src/transformer.dart';
export 'src/transformer_group.dart';
diff --git a/pkg/barback/lib/src/asset_cascade.dart b/pkg/barback/lib/src/asset_cascade.dart
index 633184a..b87ca39 100644
--- a/pkg/barback/lib/src/asset_cascade.dart
+++ b/pkg/barback/lib/src/asset_cascade.dart
@@ -64,7 +64,11 @@
final _onLogPool = new StreamPool<LogEntry>.broadcast();
/// Whether [this] is dirty and still has more processing to do.
- bool get isDirty => _phases.any((phase) => phase.isDirty);
+ bool get isDirty {
+ // Just check the last phase, since it will check all the previous phases
+ // itself.
+ return _phases.last.isDirty;
+ }
/// A stream that emits an event whenever [this] is no longer dirty.
///
diff --git a/pkg/barback/lib/src/base_transform.dart b/pkg/barback/lib/src/base_transform.dart
index 27dc12a..ea85f02 100644
--- a/pkg/barback/lib/src/base_transform.dart
+++ b/pkg/barback/lib/src/base_transform.dart
@@ -11,6 +11,7 @@
import 'asset_id.dart';
import 'asset_node.dart';
import 'errors.dart';
+import 'log.dart';
import 'transform_logger.dart';
import 'transform_node.dart';
import 'utils.dart';
@@ -22,10 +23,29 @@
/// subclasses to provide a means of emitting outputs.
abstract class BaseTransform {
final TransformNode _node;
- final TransformLogger _logger;
+
+ /// Whether the primary input should be consumed.
+ ///
+ /// This is exposed via [BaseTransformController].
+ bool _consumePrimary = false;
+
+ /// Whether the transformer logged an error.
+ ///
+ /// This is exposed via [BaseTransformController].
+ bool _loggedError = false;
+
+ /// The controller for the stream of log entries emitted by the transformer.
+ ///
+ /// This is exposed via [BaseTransformController].
+ ///
+ /// This is synchronous because error logs can cause the transform to fail, so
+ /// we need to ensure that their processing isn't delayed until after the
+ /// transform or build has finished.
+ final _onLogController = new StreamController<LogEntry>.broadcast(sync: true);
/// A logger so that the [Transformer] can report build details.
TransformLogger get logger => _logger;
+ TransformLogger _logger;
/// Gets the primary input asset.
///
@@ -37,11 +57,11 @@
/// entrypoint Dart file. All of the other Dart files that that imports
/// would be secondary inputs.
///
- /// This method may fail at runtime if called asynchronously after the
- /// transform begins running. The primary input may become unavailable while
- /// this transformer is running due to asset changes earlier in the graph.
- /// You can ignore the error if this happens: the transformer will be re-run
- /// automatically for you.
+ /// This method may fail at runtime with an [AssetNotFoundException] if called
+ /// asynchronously after the transform begins running. The primary input may
+ /// become unavailable while this transformer is running due to asset changes
+ /// earlier in the graph. You can ignore the error if this happens: the
+ /// transformer will be re-run automatically for you.
Asset get primaryInput {
if (_node.primary.state != AssetState.AVAILABLE) {
throw new AssetNotFoundException(_node.primary.id);
@@ -50,22 +70,31 @@
return _node.primary.asset;
}
- BaseTransform(this._node, LogFunction logFunction)
- : _logger = new TransformLogger(logFunction);
+ BaseTransform(this._node) {
+ _logger = new TransformLogger((asset, level, message, span) {
+ if (level == LogLevel.ERROR) _loggedError = true;
+
+ // If the log isn't already associated with an asset, use the primary.
+ if (asset == null) asset = _node.primary.id;
+ var entry = new LogEntry(_node.info, asset, level, message, span);
+ _onLogController.add(entry);
+ });
+ }
/// Gets the asset for an input [id].
///
- /// If an input with that ID cannot be found, throws an
- /// [AssetNotFoundException].
+ /// If an input with [id] cannot be found, throws an [AssetNotFoundException].
Future<Asset> getInput(AssetId id) => _node.getInput(id);
/// A convenience method to the contents of the input with [id] as a string.
///
- /// This is equivalent to calling `getInput()` followed by `readAsString()`.
+ /// This is equivalent to calling [getInput] followed by [Asset.readAsString].
///
/// If the asset was created from a [String] the original string is always
/// returned and [encoding] is ignored. Otherwise, the binary data of the
/// asset is decoded using [encoding], which defaults to [UTF8].
+ ///
+ /// If an input with [id] cannot be found, throws an [AssetNotFoundException].
Future<String> readInputAsString(AssetId id, {Encoding encoding}) {
if (encoding == null) encoding = UTF8;
return getInput(id).then((input) => input.readAsString(encoding: encoding));
@@ -73,9 +102,51 @@
/// A convenience method to the contents of the input with [id].
///
- /// This is equivalent to calling `getInput()` followed by `read()`.
+ /// This is equivalent to calling [getInput] followed by [Asset.read].
///
/// If the asset was created from a [String], this returns its UTF-8 encoding.
+ ///
+ /// If an input with [id] cannot be found, throws an [AssetNotFoundException].
Stream<List<int>> readInput(AssetId id) =>
futureStream(getInput(id).then((input) => input.read()));
+
+ /// Consume the primary input so that it doesn't get processed by future
+ /// phases or emitted once processing has finished.
+ ///
+ /// Normally the primary input will automatically be forwarded unless the
+ /// transformer overwrites it by emitting an input with the same id. This
+ /// allows the transformer to tell barback not to forward the primary input
+ /// even if it's not overwritten.
+ void consumePrimary() {
+ _consumePrimary = true;
+ }
+}
+
+/// The base class for controllers of subclasses of [BaseTransform].
+///
+/// Controllers are used so that [TransformNode]s can get values from a
+/// [BaseTransform] without exposing getters in the public API.
+abstract class BaseTransformController {
+ /// The [BaseTransform] controlled by this controller.
+ final BaseTransform transform;
+
+ /// Whether the primary input should be consumed.
+ bool get consumePrimary => transform._consumePrimary;
+
+ /// Whether the transform logged an error.
+ bool get loggedError => transform._loggedError;
+
+ /// The stream of log entries emitted by the transformer during a run.
+ Stream<LogEntry> get onLog => transform._onLogController.stream;
+
+ BaseTransformController(this.transform);
+
+ /// Notifies the [BaseTransform] that the transformation has finished being
+ /// applied.
+ ///
+ /// This will close any streams and release any resources that were allocated
+ /// for the duration of the transformation.
+ void close() {
+ transform._onLogController.close();
+ }
}
diff --git a/pkg/barback/lib/src/declaring_transform.dart b/pkg/barback/lib/src/declaring_transform.dart
index 3e621d9..3f6ecbd 100644
--- a/pkg/barback/lib/src/declaring_transform.dart
+++ b/pkg/barback/lib/src/declaring_transform.dart
@@ -6,18 +6,16 @@
import 'asset_id.dart';
import 'base_transform.dart';
-import 'transform_logger.dart';
import 'transform_node.dart';
/// A transform for [DeclaringTransform]ers that allows them to declare the ids
/// of the outputs they'll generate without generating the concrete bodies of
/// those outputs.
class DeclaringTransform extends BaseTransform {
- final Set<AssetId> _outputIds;
+ final _outputIds = new Set<AssetId>();
- DeclaringTransform(TransformNode node, this._outputIds,
- LogFunction logFunction)
- : super(node, logFunction);
+ DeclaringTransform._(TransformNode node)
+ : super(node);
/// Stores [id] as the id of an output that will be created by this
/// transformation when it's run.
@@ -32,3 +30,15 @@
_outputIds.add(id);
}
}
+
+/// The controller for [DeclaringTransform].
+class DeclaringTransformController extends BaseTransformController {
+ DeclaringTransform get transform => super.transform;
+
+ /// The set of ids that the transformer declares it will emit for the given
+ /// primary input.
+ Set<AssetId> get outputIds => transform._outputIds;
+
+ DeclaringTransformController(TransformNode node)
+ : super(new DeclaringTransform._(node));
+}
diff --git a/pkg/barback/lib/src/errors.dart b/pkg/barback/lib/src/errors.dart
index d62efeb..5303b9d 100644
--- a/pkg/barback/lib/src/errors.dart
+++ b/pkg/barback/lib/src/errors.dart
@@ -115,25 +115,26 @@
final error;
final Chain stackTrace;
- _WrappedException(this.error, StackTrace stackTrace)
- : this.stackTrace = stackTrace == null ? null :
- new Chain.forTrace(stackTrace);
+ _WrappedException(error, StackTrace stackTrace)
+ : this.error = error,
+ this.stackTrace = _getChain(error, stackTrace);
String get _message;
String toString() {
var result = "$_message: $error";
-
- var stack = stackTrace;
- if (stack == null && error is Error) stack = error.stackTrace;
- if (stack != null) {
- result = "$result\n${stackTrace.terse}";
- }
-
+ if (stackTrace != null) result = "$result\n${stackTrace.terse}";
return result;
}
}
+/// Returns the stack chain for [error] and [stackTrace].
+Chain _getChain(error, StackTrace stackTrace) {
+ if (error is Error && stackTrace == null) stackTrace = error.stackTrace;
+ if (stackTrace != null) return new Chain.forTrace(stackTrace);
+ return null;
+}
+
/// Error wrapping an exception thrown by a transform.
class TransformerException extends _WrappedException {
/// The transform that threw the exception.
diff --git a/pkg/barback/lib/src/group_runner.dart b/pkg/barback/lib/src/group_runner.dart
index 69aaaa9..4ef344f 100644
--- a/pkg/barback/lib/src/group_runner.dart
+++ b/pkg/barback/lib/src/group_runner.dart
@@ -27,7 +27,11 @@
final _phases = new List<Phase>();
/// Whether [this] is dirty and still has more processing to do.
- bool get isDirty => _phases.any((phase) => phase.isDirty);
+ bool get isDirty {
+ // Just check the last phase, since it will check all the previous phases
+ // itself.
+ return _phases.last.isDirty;
+ }
/// A stream that emits an event whenever [this] is no longer dirty.
///
diff --git a/pkg/barback/lib/src/phase.dart b/pkg/barback/lib/src/phase.dart
index a240f06..b7245f4 100644
--- a/pkg/barback/lib/src/phase.dart
+++ b/pkg/barback/lib/src/phase.dart
@@ -94,13 +94,14 @@
final _onAssetController = new StreamController<AssetNode>(sync: true);
/// Whether [this] is dirty and still has more processing to do.
- bool get isDirty => _inputs.values.any((input) => input.isDirty) ||
+ ///
+ /// A phase is considered dirty if any of the previous phases in the same
+ /// cascade are dirty, since those phases could emit an asset that this phase
+ /// will then need to process.
+ bool get isDirty => (_previous != null && _previous.isDirty) ||
+ _inputs.values.any((input) => input.isDirty) ||
_groups.values.any((group) => group.isDirty);
- /// Whether [this] or any previous phase is dirty.
- bool get _isTransitivelyDirty => isDirty ||
- (_previous != null && _previous._isTransitivelyDirty);
-
/// A stream that emits an event whenever any transforms in this phase logs
/// an entry.
Stream<LogEntry> get onLog => _onLogPool.stream;
@@ -109,6 +110,9 @@
/// The previous phase in the cascade, or null if this is the first phase.
final Phase _previous;
+ /// The subscription to [_previous]'s [onDone] stream.
+ StreamSubscription _previousOnDoneSubscription;
+
/// The phase after this one.
///
/// Outputs from this phase will be passed to it.
@@ -137,22 +141,21 @@
: this._(cascade, location, 0);
Phase._(this.cascade, this._location, this._index, [this._previous]) {
- // TODO(nweiz): This does O(n^2) work whenever a phase emits an [onDone]
- // event, since each phase after it has to check each phase before. Find a
- // better way to do this.
- for (var phase = this; phase != null; phase = phase._previous) {
- phase.onDone.listen((_) {
- if (_isTransitivelyDirty) return;
-
- // All the previous phases have finished building. If anyone's still
- // waiting for outputs, cut off the wait; we won't be generating them,
- // at least until a source asset changes.
- for (var completer in _pendingOutputRequests.values) {
- completer.complete(null);
- }
- _pendingOutputRequests.clear();
+ if (_previous != null) {
+ _previousOnDoneSubscription = _previous.onDone.listen((_) {
+ if (!isDirty) _onDoneController.add(null);
});
}
+
+ onDone.listen((_) {
+ // All the previous phases have finished building. If anyone's still
+ // waiting for outputs, cut off the wait; we won't be generating them,
+ // at least until a source asset changes.
+ for (var completer in _pendingOutputRequests.values) {
+ completer.complete(null);
+ }
+ _pendingOutputRequests.clear();
+ });
}
/// Adds a new asset as an input for this phase.
@@ -170,14 +173,18 @@
node.force();
- // Each group is one channel along which an asset may be forwarded. Then
- // there's one additional channel for the non-grouped transformers.
- var forwarder = new PhaseForwarder(_groups.length + 1);
+ // Each group is one channel along which an asset may be forwarded, as is
+ // each transformer.
+ var forwarder = new PhaseForwarder(
+ node, _transformers.length, _groups.length);
_forwarders[node.id] = forwarder;
forwarder.onAsset.listen(_handleOutputWithoutForwarder);
+ if (forwarder.output != null) {
+ _handleOutputWithoutForwarder(forwarder.output);
+ }
_inputOrigins.add(node.origin);
- var input = new PhaseInput(this, node, _transformers, "$_location.$_index");
+ var input = new PhaseInput(this, node, "$_location.$_index");
_inputs[node.id] = input;
input.input.whenRemoved(() {
_inputOrigins.remove(node.origin);
@@ -191,6 +198,8 @@
if (!isDirty) _onDoneController.add(null);
});
+ input.updateTransformers(_transformers);
+
for (var group in _groups.values) {
group.addInput(node);
}
@@ -242,7 +251,9 @@
// if it becomes available. If it's removed before becoming available,
// try again, since it could be generated again.
output.force();
- return output.whenAvailable((_) => output).catchError((error) {
+ return output.whenAvailable((_) {
+ return output;
+ }).catchError((error) {
if (error is! AssetNotFoundException) throw error;
return getOutput(id);
});
@@ -250,7 +261,7 @@
// If neither this phase nor the previous phases are dirty, the requested
// output won't be generated and we can safely return null.
- if (!_isTransitivelyDirty) return null;
+ if (!isDirty) return null;
// Otherwise, store a completer for the asset node. If it's generated in
// the future, we'll complete this completer.
@@ -290,7 +301,7 @@
}
for (var forwarder in _forwarders.values) {
- forwarder.numChannels = _groups.length + 1;
+ forwarder.updateTransformers(_transformers.length, _groups.length);
}
}
@@ -335,6 +346,9 @@
}
_onAssetController.close();
_onLogPool.close();
+ if (_previousOnDoneSubscription != null) {
+ _previousOnDoneSubscription.cancel();
+ }
}
/// Remove all phases after this one.
diff --git a/pkg/barback/lib/src/phase_forwarder.dart b/pkg/barback/lib/src/phase_forwarder.dart
index 1d5682d..bb275a5 100644
--- a/pkg/barback/lib/src/phase_forwarder.dart
+++ b/pkg/barback/lib/src/phase_forwarder.dart
@@ -11,13 +11,13 @@
/// A class that takes care of forwarding assets within a phase.
///
-/// Each phase contains one or more channels that process its input assets. The
-/// non-grouped transformers for that phase are one such channel, and each
-/// [TransformerGroup] in that phase is another. For each input asset, each
-/// channel individually decides whether to forward that asset based on whether
-/// that channel uses it. If a channel does decide to forward an asset, we call
-/// that forwarded asset an "intermediate forwarded asset" to distinguish it
-/// from the output of a [PhaseForwarder].
+/// Each phase contains one or more channels that process its input assets. Each
+/// non-grouped transformer for that phase is a channel, each [TransformerGroup]
+/// in that phase is another, and the source node is the final channel. For each
+/// input asset, each channel individually decides whether to forward that asset
+/// based on whether that channel uses it. If a channel does decide to forward
+/// an asset, we call that forwarded asset an "intermediate forwarded asset" to
+/// distinguish it from the output of a [PhaseForwarder].
///
/// All intermediate assets with a given origin are provided to a single
/// [PhaseForwarder] via [addIntermediateAsset]. This forwarder then determines
@@ -30,14 +30,7 @@
/// forwarded assets are themselves available. If any of the intermediate assets
/// are dirty, the final asset will also be marked dirty.
class PhaseForwarder {
- /// The number of channels through which the asset may have been forwarded.
- ///
- /// Each group is a channel, along with one channel for the [PhaseInput] that
- /// handles all the transformers.
- set numChannels(int value) {
- _numChannels = value;
- _adjustOutput();
- }
+ /// The number of channels to forward, counting the source node.
int _numChannels;
/// The intermediate forwarded assets.
@@ -46,7 +39,8 @@
/// The final forwarded asset.
///
/// This will be null if the asset is not being forwarded.
- AssetNode get output => _outputController.node;
+ AssetNode get output =>
+ _outputController == null ? null : _outputController.node;
AssetNodeController _outputController;
/// A stream that emits an event whenever [this] starts producing a final
@@ -55,9 +49,26 @@
/// Whenever this stream emits an event, the value will be identical to
/// [output].
Stream<AssetNode> get onAsset => _onAssetController.stream;
- final _onAssetController = new StreamController<AssetNode>(sync: true);
+ final _onAssetController =
+ new StreamController<AssetNode>.broadcast(sync: true);
- PhaseForwarder(this._numChannels);
+ /// Creates a phase forwarder forwarding nodes that come from [node] across
+ /// [numTransformers] transformers and [numGroups] groups.
+ ///
+ /// [node] is passed in explicitly so that it can be forwarded if there are no
+ /// other channels.
+ PhaseForwarder(AssetNode node, int numTransformers, int numGroups)
+ : _numChannels = numTransformers + numGroups + 1 {
+ addIntermediateAsset(node);
+ }
+
+ /// Notify the forwarder that the number of transformer and group channels has
+ /// changed.
+ void updateTransformers(int numTransformers, int numGroups) {
+ // Add one channel for the source node.
+ _numChannels = numTransformers + numGroups + 1;
+ _adjustOutput();
+ }
/// Adds an intermediate forwarded asset to [this].
///
@@ -116,10 +127,8 @@
// intermediate assets are dirty.
if (_intermediateAssets.any((asset) => asset.state.isDirty)) {
if (!_outputController.node.state.isDirty) _outputController.setDirty();
- } else {
- if (!_outputController.node.state.isAvailable) {
- _outputController.setAvailable(_intermediateAssets.first.asset);
- }
+ } else if (!_outputController.node.state.isAvailable) {
+ _outputController.setAvailable(_intermediateAssets.first.asset);
}
}
}
diff --git a/pkg/barback/lib/src/phase_input.dart b/pkg/barback/lib/src/phase_input.dart
index 5949a84..c6b3826 100644
--- a/pkg/barback/lib/src/phase_input.dart
+++ b/pkg/barback/lib/src/phase_input.dart
@@ -8,14 +8,11 @@
import 'asset_forwarder.dart';
import 'asset_node.dart';
-import 'asset_node_set.dart';
-import 'errors.dart';
import 'log.dart';
import 'phase.dart';
import 'stream_pool.dart';
import 'transform_node.dart';
import 'transformer.dart';
-import 'utils.dart';
/// A class for watching a single [AssetNode] and running any transforms that
/// take that node as a primary input.
@@ -26,9 +23,6 @@
/// A string describing the location of [this] in the transformer graph.
final String _location;
- /// The transformers to (potentially) run against [input].
- final Set<Transformer> _transformers;
-
/// The transforms currently applicable to [input].
///
/// These are the transforms that have been "wired up": they represent a
@@ -44,15 +38,6 @@
/// The asset node for this input.
AssetNode get input => _inputForwarder.node;
- /// The controller that's used for the output node if [input] isn't
- /// overwritten by any transformers.
- ///
- /// This needs an intervening controller to ensure that the output can be
- /// marked dirty when determining whether transforms will overwrite it, and be
- /// marked removed if they do. It's null if the asset is not being passed
- /// through.
- AssetNodeController _passThroughController;
-
/// A stream that emits an event whenever [this] is no longer dirty.
///
/// This is synchronous in order to guarantee that it will emit an event as
@@ -64,45 +49,20 @@
///
/// Assets are emitted synchronously to ensure that any changes are thoroughly
/// propagated as soon as they occur.
- Stream<AssetNode> get onAsset => _onAssetController.stream;
- final _onAssetController = new StreamController<AssetNode>(sync: true);
+ Stream<AssetNode> get onAsset => _onAssetPool.stream;
+ final _onAssetPool = new StreamPool<AssetNode>();
/// Whether [this] is dirty and still has more processing to do.
- bool get isDirty => _isAdjustingTransformers ||
- _transforms.any((transform) => transform.isDirty);
-
- /// The set of assets emitted by the transformers for this input that have the
- /// same id as [input].
- final _overwritingOutputs = new AssetNodeSet();
-
- /// Whether [this] has been rmeoved.
- bool get _isRemoved => _onAssetController.isClosed;
-
- /// Whether [input] has become dirty since [_adjustTransformers] last started
- /// running.
- bool _hasBecomeDirty = false;
-
- /// Whether [_isAdjustingTransformers] is currently running.
- bool _isAdjustingTransformers = false;
+ bool get isDirty => _transforms.any((transform) => transform.isDirty);
/// A stream that emits an event whenever any transforms that use [input] as
/// their primary input log an entry.
Stream<LogEntry> get onLog => _onLogPool.stream;
final _onLogPool = new StreamPool<LogEntry>.broadcast();
- PhaseInput(this._phase, AssetNode input, Iterable<Transformer> transformers,
- this._location)
- : _transformers = transformers.toSet(),
- _inputForwarder = new AssetForwarder(input) {
- input.onStateChange.listen((state) {
- if (state.isRemoved) {
- remove();
- } else {
- _dirty();
- }
- });
-
- _adjustTransformers();
+ PhaseInput(this._phase, AssetNode input, this._location)
+ : _inputForwarder = new AssetForwarder(input) {
+ input.whenRemoved(remove);
}
/// Removes this input.
@@ -110,40 +70,32 @@
/// This marks all outputs of the input as removed.
void remove() {
_onDoneController.close();
- _hasBecomeDirty = false;
- _onAssetController.close();
+ _onAssetPool.close();
_onLogPool.close();
_inputForwarder.close();
- if (_passThroughController != null) {
- _passThroughController.setRemoved();
- _passThroughController = null;
- }
- }
-
- /// Mark [this] as dirty and start re-running [_adjustTransformers] if
- /// necessary.
- void _dirty() {
- // If there's a pass-through for this input, mark it dirty until we figure
- // out if a transformer will emit an asset with that id.
- if (_passThroughController != null) _passThroughController.setDirty();
- _hasBecomeDirty = true;
- if (!_isAdjustingTransformers) _adjustTransformers();
}
/// Set this input's transformers to [transformers].
void updateTransformers(Iterable<Transformer> newTransformersIterable) {
var newTransformers = newTransformersIterable.toSet();
- var oldTransformers = _transformers.toSet();
- var removedTransformers = oldTransformers.difference(newTransformers);
- for (var removedTransformer in removedTransformers) {
- _transformers.remove(removedTransformer);
+ for (var transform in _transforms.toList()) {
+ if (newTransformers.remove(transform.transformer)) continue;
+ transform.remove();
}
- var brandNewTransformers = newTransformers.difference(oldTransformers);
- brandNewTransformers.forEach(_transformers.add);
+ // The remaining [newTransformers] are those for which there are no
+ // transforms in [_transforms].
+ for (var transformer in newTransformers) {
+ var transform = new TransformNode(
+ _phase, transformer, input, _location);
+ _transforms.add(transform);
- if (removedTransformers.isNotEmpty || brandNewTransformers.isNotEmpty) {
- _dirty();
+ transform.onDone.listen((_) {
+ if (!isDirty) _onDoneController.add(null);
+ }, onDone: () => _transforms.remove(transform));
+
+ _onAssetPool.add(transform.onAsset);
+ _onLogPool.add(transform.onLog);
}
}
@@ -155,148 +107,5 @@
}
}
- /// Asynchronously determines which transformers can consume [input] as a
- /// primary input and creates transforms for them.
- ///
- /// This ensures that if [input] is modified or removed during or after the
- /// time it takes to adjust its transformers, they're appropriately
- /// re-adjusted.
- void _adjustTransformers() {
- assert(!_isRemoved);
-
- _isAdjustingTransformers = true;
- input.whenAvailable((asset) {
- _hasBecomeDirty = false;
-
- // Take a snapshot of the existing transformers that apply to this input.
- // Since [_removeStaleTransforms] will check each of these transformers to
- // be sure [input] is still primary for them, we use this set to avoid
- // needlessly re-checking in [_addFreshTransforms].
- var oldTransformers =
- _transforms.map((transform) => transform.transformer).toSet();
-
- return _removeStaleTransforms().then((_) {
- if (_hasBecomeDirty || _isRemoved) return null;
- return _addFreshTransforms(oldTransformers);
- });
- }).catchError((error, stackTrace) {
- if (error is! AssetNotFoundException || error.id != input.id) throw error;
-
- // If the asset is removed, [input.whenAvailable] will throw an
- // [AssetNotFoundException]. In that case, just remove it.
- remove();
- }).then((_) {
- if (_isRemoved) return;
-
- _isAdjustingTransformers = false;
- if (_hasBecomeDirty) {
- _adjustTransformers();
- } else if (!isDirty) {
- _adjustPassThrough();
- _onDoneController.add(null);
- }
- });
- }
-
- // Remove any old transforms that used to have [input]'s asset as a primary
- // asset but no longer apply to its new contents.
- Future _removeStaleTransforms() {
- assert(input.state.isAvailable);
-
- return Future.wait(_transforms.map((transform) {
- return syncFuture(() {
- if (!_transformers.contains(transform.transformer)) return false;
-
- // TODO(rnystrom): Catch all errors from isPrimary() and redirect to
- // results (issue 16162).
- return transform.transformer.isPrimary(input.asset);
- }).then((isPrimary) {
- if (_hasBecomeDirty) return;
- if (isPrimary) {
- transform.markPrimary();
- } else if (_transforms.remove(transform)) {
- transform.remove();
- }
- });
- }));
- }
-
- // Add new transforms for transformers that consider [input]'s asset to be a
- // primary input.
- //
- // [oldTransformers] is the set of transformers for which there were
- // transforms that had [input] as a primary input prior to this. They don't
- // need to be checked, since their transforms were removed or preserved in
- // [_removeStaleTransforms].
- Future _addFreshTransforms(Set<Transformer> oldTransformers) {
- assert(input.state.isAvailable);
-
- return Future.wait(_transformers.map((transformer) {
- if (oldTransformers.contains(transformer)) return new Future.value();
-
- // TODO(rnystrom): Catch all errors from isPrimary() and redirect to
- // results.
- return transformer.isPrimary(input.asset).then((isPrimary) {
- if (_hasBecomeDirty || !isPrimary) return;
- var transform = new TransformNode(
- _phase, transformer, input, _location);
- _transforms.add(transform);
-
- transform.onStateChange.listen((_) {
- if (isDirty) {
- if (_passThroughController == null) return;
- _passThroughController.setDirty();
- } else {
- _adjustPassThrough();
- _onDoneController.add(null);
- }
- });
-
- transform.onAsset.listen((asset) {
- if (asset.id == input.id) {
- _overwritingOutputs.add(asset);
- asset.whenRemoved(_adjustPassThrough);
- _adjustPassThrough();
- }
-
- _onAssetController.add(asset);
- }, onDone: () => _transforms.remove(transform));
-
- _onLogPool.add(transform.onLog);
- });
- }));
- }
-
- /// Adjust whether [input] is passed through the phase unmodified, based on
- /// whether it's overwritten by other transforms in this phase.
- ///
- /// If [input] was already passed-through, this will update the passed-through
- /// value.
- void _adjustPassThrough() {
- // If [input] is removed, [_adjustPassThrough] can still be called due to
- // [TransformNode]s marking their outputs as removed.
- if (!input.state.isAvailable) return;
-
- // If there's an output with the same id as the primary input, that
- // overwrites the input so it doesn't get passed through. Otherwise,
- // create a pass-through controller if none exists, or set the existing
- // one available.
- if (_overwritingOutputs.isNotEmpty) {
- if (_passThroughController != null) {
- _passThroughController.setRemoved();
- _passThroughController = null;
- }
- } else if (isDirty) {
- // If the input is dirty, we're still figuring out whether a transform
- // will overwrite the input. As such, we shouldn't pass through the asset
- // yet.
- } else if (_passThroughController == null) {
- _passThroughController = new AssetNodeController.from(input);
- _onAssetController.add(_passThroughController.node);
- } else if (_passThroughController.node.state.isDirty) {
- _passThroughController.setAvailable(input.asset);
- }
- }
-
String toString() => "phase input in $_location for $input";
}
diff --git a/pkg/barback/lib/src/transform.dart b/pkg/barback/lib/src/transform.dart
index 26b718d..1695388 100644
--- a/pkg/barback/lib/src/transform.dart
+++ b/pkg/barback/lib/src/transform.dart
@@ -7,7 +7,6 @@
import 'asset.dart';
import 'asset_set.dart';
import 'base_transform.dart';
-import 'transform_logger.dart';
import 'transform_node.dart';
/// While a [Transformer] represents a *kind* of transformation, this defines
@@ -18,10 +17,10 @@
/// the transformation. It lets the [Transformer] access inputs and generate
/// outputs.
class Transform extends BaseTransform {
- final AssetSet _outputs;
+ final _outputs = new AssetSet();
- Transform(TransformNode node, this._outputs, LogFunction logFunction)
- : super(node, logFunction);
+ Transform._(TransformNode node)
+ : super(node);
/// Stores [output] as the output created by this transformation.
///
@@ -32,3 +31,14 @@
_outputs.add(output);
}
}
+
+/// The controller for [Transform].
+class TransformController extends BaseTransformController {
+ Transform get transform => super.transform;
+
+ /// The set of assets that the transformer has emitted.
+ AssetSet get outputs => transform._outputs;
+
+ TransformController(TransformNode node)
+ : super(new Transform._(node));
+}
diff --git a/pkg/barback/lib/src/transform_node.dart b/pkg/barback/lib/src/transform_node.dart
index 8aeb657..4b0a076 100644
--- a/pkg/barback/lib/src/transform_node.dart
+++ b/pkg/barback/lib/src/transform_node.dart
@@ -6,17 +6,15 @@
import 'dart:async';
-import 'package:source_maps/span.dart';
-
import 'asset.dart';
import 'asset_id.dart';
import 'asset_node.dart';
-import 'asset_set.dart';
import 'declaring_transform.dart';
import 'errors.dart';
import 'lazy_transformer.dart';
import 'log.dart';
import 'phase.dart';
+import 'stream_pool.dart';
import 'transform.dart';
import 'transformer.dart';
import 'utils.dart';
@@ -42,19 +40,8 @@
/// The subscription to [primary]'s [AssetNode.onStateChange] stream.
StreamSubscription _primarySubscription;
- // TODO(nweiz): Remove this and move isPrimary computation into TransformNode.
- /// Whether the parent [PhaseInput] is currently computing whether its input
- /// is primary for [this].
- bool _pendingIsPrimary = false;
-
/// Whether [this] is dirty and still has more processing to do.
- bool get isDirty => _pendingIsPrimary || _isApplying;
-
- /// Whether any input has become dirty since [_apply] last started running.
- var _hasBecomeDirty = false;
-
- /// Whether [_apply] is currently running.
- var _isApplying = false;
+ bool get isDirty => !_state.isDone;
/// Whether [transformer] is lazy and this transform has yet to be forced.
bool _isLazy;
@@ -65,16 +52,21 @@
/// The controllers for the asset nodes emitted by this node.
var _outputControllers = new Map<AssetId, AssetNodeController>();
- // TODO(nweiz): It's weird that this is different than the [onDone] stream the
- // other nodes emit. See if we can make that more consistent.
- /// A stream that emits an event whenever [onDirty] changes its value.
+ /// The controller that's used to pass [primary] through [this] if it's not
+ /// consumed or overwritten.
+ ///
+ /// This needs an intervening controller to ensure that the output can be
+ /// marked dirty when determining whether [this] will consume or overwrite it,
+ /// and be marked removed if it does. [_passThroughController] will be null
+ /// if the asset is not being passed through.
+ AssetNodeController _passThroughController;
+
+ /// A stream that emits an event whenever [this] is no longer dirty.
///
/// This is synchronous in order to guarantee that it will emit an event as
- /// soon as [isDirty] changes. It's possible for this to emit multiple events
- /// while [isDirty] is `true`. However, it will only emit a single event each
- /// time [isDirty] becomes `false`.
- Stream get onStateChange => _onStateChangeController.stream;
- final _onStateChangeController = new StreamController.broadcast(sync: true);
+ /// soon as [isDirty] flips from `true` to `false`.
+ Stream get onDone => _onDoneController.stream;
+ final _onDoneController = new StreamController.broadcast(sync: true);
/// A stream that emits any new assets emitted by [this].
///
@@ -88,8 +80,21 @@
/// This is synchronous because error logs can cause the transform to fail, so
/// we need to ensure that their processing isn't delayed until after the
/// transform or build has finished.
- Stream<LogEntry> get onLog => _onLogController.stream;
- final _onLogController = new StreamController<LogEntry>.broadcast(sync: true);
+ Stream<LogEntry> get onLog => _onLogPool.stream;
+ final _onLogPool = new StreamPool<LogEntry>.broadcast();
+
+ /// The current state of [this].
+ var _state = _TransformNodeState.PROCESSING;
+
+ /// Whether [this] has been marked as removed.
+ bool get _isRemoved => _onAssetController.isClosed;
+
+ /// Whether the most recent run of this transform has declared that it
+ /// consumes the primary input.
+ ///
+ /// Defaults to `false`. This is not meaningful unless [_state] is
+ /// [_TransformNodeState.APPLIED].
+ bool _consumePrimary = false;
TransformNode(this.phase, Transformer transformer, this.primary,
this._location)
@@ -99,12 +104,11 @@
if (state.isRemoved) {
remove();
} else {
- if (state.isDirty) _pendingIsPrimary = true;
- _dirty();
+ _dirty(primaryChanged: true);
}
});
- _apply();
+ _process();
}
/// The [TransformInfo] describing this node.
@@ -120,15 +124,14 @@
/// from the primary input, but it's possible for a transform to no longer be
/// valid even if its primary input still exists.
void remove() {
- _hasBecomeDirty = false;
_onAssetController.close();
- _onStateChangeController.close();
+ _onDoneController.close();
_primarySubscription.cancel();
- for (var subscription in _inputSubscriptions.values) {
- subscription.cancel();
- }
- for (var controller in _outputControllers.values) {
- controller.setRemoved();
+ _clearInputSubscriptions();
+ _clearOutputs();
+ if (_passThroughController != null) {
+ _passThroughController.setRemoved();
+ _passThroughController = null;
}
}
@@ -139,47 +142,81 @@
// transform's outputs have gone unused, we switch it back to lazy mode.
if (!_isLazy) return;
_isLazy = false;
- _dirty();
- }
-
- // TODO(nweiz): remove this and move isPrimary computation into TransformNode.
- /// Mark that the parent [PhaseInput] has determined that its input is indeed
- /// primary for [this].
- void markPrimary() {
- if (!_pendingIsPrimary) return;
- _pendingIsPrimary = false;
- if (!_isApplying) _apply();
+ _dirty(primaryChanged: false);
}
/// Marks this transform as dirty.
///
/// This causes all of the transform's outputs to be marked as dirty as well.
- void _dirty() {
+ /// [primaryChanged] should be true if and only if [this] was set dirty
+ /// because [primary] changed.
+ void _dirty({bool primaryChanged: false}) {
+ if (!primaryChanged && _state.isNotPrimary) return;
+
+ if (_passThroughController != null) _passThroughController.setDirty();
for (var controller in _outputControllers.values) {
controller.setDirty();
}
- _hasBecomeDirty = true;
- _onStateChangeController.add(null);
- if (!_isApplying && !_pendingIsPrimary) _apply();
+ if (_state.isDone) {
+ if (primaryChanged) {
+ _process();
+ } else {
+ _apply();
+ }
+ } else if (primaryChanged) {
+ _state = _TransformNodeState.NEEDS_IS_PRIMARY;
+ } else if (!_state.needsIsPrimary) {
+ _state = _TransformNodeState.NEEDS_APPLY;
+ }
+ }
+
+ /// Determines whether [primary] is primary for [transformer], and if so runs
+ /// [transformer.apply].
+ void _process() {
+ // Clear all the old input subscriptions. If an input is re-used, we'll
+ // re-subscribe.
+ _clearInputSubscriptions();
+ _state = _TransformNodeState.PROCESSING;
+ primary.whenAvailable((_) {
+ _state = _TransformNodeState.PROCESSING;
+ return transformer.isPrimary(primary.asset);
+ }).catchError((error, stackTrace) {
+ // If the transform became dirty while processing, ignore any errors from
+ // it.
+ if (_state.needsIsPrimary || _isRemoved) return false;
+
+ // Catch all transformer errors and pipe them to the results stream. This
+ // is so a broken transformer doesn't take down the whole graph.
+ phase.cascade.reportError(_wrapException(error, stackTrace));
+
+ return false;
+ }).then((isPrimary) {
+ if (_isRemoved) return;
+ if (_state.needsIsPrimary) {
+ _process();
+ } else if (isPrimary) {
+ _apply();
+ } else {
+ _clearOutputs();
+ _emitPassThrough();
+ _state = _TransformNodeState.NOT_PRIMARY;
+ _onDoneController.add(null);
+ }
+ });
}
/// Applies this transform.
void _apply() {
assert(!_onAssetController.isClosed);
- // Clear all the old input subscriptions. If an input is re-used, we'll
- // re-subscribe.
- for (var subscription in _inputSubscriptions.values) {
- subscription.cancel();
- }
- _inputSubscriptions.clear();
-
- _isApplying = true;
- _onStateChangeController.add(null);
+ // Clear input subscriptions here as well as in [_process] because [_apply]
+ // may be restarted independently if only a secondary input changes.
+ _clearInputSubscriptions();
+ _state = _TransformNodeState.PROCESSING;
primary.whenAvailable((_) {
- _hasBecomeDirty = false;
-
+ if (_state.needsIsPrimary) return null;
+ _state = _TransformNodeState.PROCESSING;
// TODO(nweiz): If [transformer] is a [DeclaringTransformer] but not a
// [LazyTransformer], we can get some mileage out of doing a declarative
// first so we know how to hook up the assets.
@@ -188,49 +225,45 @@
}).catchError((error, stackTrace) {
// If the transform became dirty while processing, ignore any errors from
// it.
- if (_hasBecomeDirty || _onAssetController.isClosed) return;
-
- if (error is! MissingInputException) {
- error = new TransformerException(info, error, stackTrace);
- }
+ if (!_state.isProcessing || _isRemoved) return false;
// Catch all transformer errors and pipe them to the results stream. This
// is so a broken transformer doesn't take down the whole graph.
- phase.cascade.reportError(error);
+ phase.cascade.reportError(_wrapException(error, stackTrace));
+ return true;
+ }).then((hadError) {
+ if (_isRemoved) return;
- // Remove all the previously-emitted assets.
- for (var controller in _outputControllers.values) {
- controller.setRemoved();
- }
- _outputControllers.clear();
- }).then((_) {
- if (_onAssetController.isClosed) return;
-
- _isApplying = false;
- if (_hasBecomeDirty) {
- // Re-apply the transform if it became dirty while applying.
- if (!_pendingIsPrimary) _apply();
+ if (_state.needsIsPrimary) {
+ _process();
+ } else if (_state.needsApply) {
+ _apply();
} else {
- assert(!isDirty);
- // Otherwise, notify the parent nodes that it's no longer dirty.
- _onStateChangeController.add(null);
+ assert(_state.isProcessing);
+ if (hadError) {
+ _clearOutputs();
+ _dontEmitPassThrough();
+ }
+
+ _state = _TransformNodeState.APPLIED;
+ _onDoneController.add(null);
}
});
}
/// Gets the asset for an input [id].
///
- /// If an input with that ID cannot be found, throws an
- /// [AssetNotFoundException].
+ /// If an input with [id] cannot be found, throws an [AssetNotFoundException].
Future<Asset> getInput(AssetId id) {
return phase.getInput(id).then((node) {
// Throw if the input isn't found. This ensures the transformer's apply
// is exited. We'll then catch this and report it through the proper
// results stream.
- if (node == null) throw new MissingInputException(info, id);
+ if (node == null) throw new AssetNotFoundException(id);
- _inputSubscriptions.putIfAbsent(node.id,
- () => node.onStateChange.listen((_) => _dirty()));
+ _inputSubscriptions.putIfAbsent(node.id, () {
+ return node.onStateChange.listen((_) => _dirty(primaryChanged: false));
+ });
return node.asset;
});
@@ -238,13 +271,21 @@
/// Applies the transform so that it produces concrete (as opposed to lazy)
/// outputs.
- Future _applyImmediate() {
- var newOutputs = new AssetSet();
- var transform = new Transform(this, newOutputs, _log);
+ ///
+ /// Returns whether or not the transformer logged an error.
+ Future<bool> _applyImmediate() {
+ var transformController = new TransformController(this);
+ _onLogPool.add(transformController.onLog);
- return syncFuture(() => transformer.apply(transform)).then((_) {
- if (_hasBecomeDirty || _onAssetController.isClosed) return;
+ return syncFuture(() {
+ return transformer.apply(transformController.transform);
+ }).then((_) {
+ if (!_state.isProcessing || _onAssetController.isClosed) return false;
+ if (transformController.loggedError) return true;
+ _consumePrimary = transformController.consumePrimary;
+
+ var newOutputs = transformController.outputs;
// Any ids that are for a different package are invalid.
var invalidIds = newOutputs
.map((asset) => asset.id)
@@ -262,6 +303,14 @@
_outputControllers.remove(id).setRemoved();
}
+ // Emit or stop emitting the pass-through asset between removing and
+ // adding outputs to ensure there are no collisions.
+ if (!newOutputs.containsId(primary.id)) {
+ _emitPassThrough();
+ } else {
+ _dontEmitPassThrough();
+ }
+
// Store any new outputs or new contents for existing outputs.
for (var asset in newOutputs) {
var controller = _outputControllers[asset.id];
@@ -273,20 +322,28 @@
_onAssetController.add(controller.node);
}
}
+
+ return false;
});
}
/// Applies the transform in declarative mode so that it produces lazy
/// outputs.
- Future _declareLazy() {
- var newIds = new Set();
- var transform = new DeclaringTransform(this, newIds, _log);
+ ///
+ /// Returns whether or not the transformer logged an error.
+ Future<bool> _declareLazy() {
+ var transformController = new DeclaringTransformController(this);
return syncFuture(() {
- return (transformer as LazyTransformer).declareOutputs(transform);
+ return (transformer as LazyTransformer)
+ .declareOutputs(transformController.transform);
}).then((_) {
- if (_hasBecomeDirty || _onAssetController.isClosed) return;
+ if (!_state.isProcessing || _onAssetController.isClosed) return false;
+ if (transformController.loggedError) return true;
+ _consumePrimary = transformController.consumePrimary;
+
+ var newIds = transformController.outputIds;
var invalidIds =
newIds.where((id) => id.package != phase.cascade.package).toSet();
for (var id in invalidIds) {
@@ -301,6 +358,14 @@
_outputControllers.remove(id).setRemoved();
}
+ // Emit or stop emitting the pass-through asset between removing and
+ // adding outputs to ensure there are no collisions.
+ if (!newIds.contains(primary.id)) {
+ _emitPassThrough();
+ } else {
+ _dontEmitPassThrough();
+ }
+
for (var id in newIds) {
var controller = _outputControllers[id];
if (controller != null) {
@@ -311,16 +376,125 @@
_onAssetController.add(controller.node);
}
}
+
+ return false;
});
}
- void _log(AssetId asset, LogLevel level, String message, Span span) {
- // If the log isn't already associated with an asset, use the primary.
- if (asset == null) asset = primary.id;
- var entry = new LogEntry(info, asset, level, message, span);
- _onLogController.add(entry);
+ /// Cancels all subscriptions to secondary input nodes.
+ void _clearInputSubscriptions() {
+ for (var subscription in _inputSubscriptions.values) {
+ subscription.cancel();
+ }
+ _inputSubscriptions.clear();
+ }
+
+ /// Removes all output assets.
+ void _clearOutputs() {
+ // Remove all the previously-emitted assets.
+ for (var controller in _outputControllers.values) {
+ controller.setRemoved();
+ }
+ _outputControllers.clear();
+ }
+
+ /// Emit the pass-through asset if it's not being emitted already.
+ void _emitPassThrough() {
+ assert(!_outputControllers.containsKey(primary.id));
+
+ if (_consumePrimary) return;
+ if (_passThroughController == null) {
+ _passThroughController = new AssetNodeController.from(primary);
+ _onAssetController.add(_passThroughController.node);
+ } else {
+ _passThroughController.setAvailable(primary.asset);
+ }
+ }
+
+ /// Stop emitting the pass-through asset if it's being emitted already.
+ void _dontEmitPassThrough() {
+ if (_passThroughController == null) return;
+ _passThroughController.setRemoved();
+ _passThroughController = null;
+ }
+
+ BarbackException _wrapException(error, StackTrace stackTrace) {
+ if (error is! AssetNotFoundException) {
+ return new TransformerException(info, error, stackTrace);
+ } else {
+ return new MissingInputException(info, error.id);
+ }
}
String toString() =>
"transform node in $_location for $transformer on $primary";
}
+
+/// The enum of states that [TransformNode] can be in.
+class _TransformNodeState {
+ /// The transform node is running [Transformer.isPrimary] or
+ /// [Transformer.apply] and doesn't need to re-run them.
+ ///
+ /// If there are no external changes by the time the processing finishes, this
+ /// will transition to [APPLIED] or [NOT_PRIMARY] depending on the result of
+ /// [Transformer.isPrimary]. If the primary input changes, this will
+ /// transition to [NEEDS_IS_PRIMARY]. If a secondary input changes, this will
+ /// transition to [NEEDS_APPLY].
+ static final PROCESSING = const _TransformNodeState._("processing");
+
+ /// The transform is running [Transformer.isPrimary] or [Transformer.apply],
+ /// but since it started the primary input changed, so it will need to re-run
+ /// [Transformer.isPrimary].
+ ///
+ /// This will always transition to [Transformer.PROCESSING].
+ static final NEEDS_IS_PRIMARY =
+ const _TransformNodeState._("needs isPrimary");
+
+ /// The transform is running [Transformer.apply], but since it started a
+ /// secondary input changed, so it will need to re-run [Transformer.apply].
+ ///
+ /// If there are no external changes by the time [Transformer.apply] finishes,
+ /// this will transition to [PROCESSING]. If the primary input changes, this
+ /// will transition to [NEEDS_IS_PRIMARY].
+ static final NEEDS_APPLY = const _TransformNodeState._("needs apply");
+
+ /// The transform has finished running [Transformer.apply], whether or not it
+ /// emitted an error.
+ ///
+ /// If the primary input or a secondary input changes, this will transition to
+ /// [PROCESSING].
+ static final APPLIED = const _TransformNodeState._("applied");
+
+ /// The transform has finished running [Transformer.isPrimary], which returned
+ /// `false`.
+ ///
+ /// If the primary input changes, this will transition to [PROCESSING].
+ static final NOT_PRIMARY = const _TransformNodeState._("not primary");
+
+ /// Whether [this] is [PROCESSING].
+ bool get isProcessing => this == _TransformNodeState.PROCESSING;
+
+ /// Whether [this] is [NEEDS_IS_PRIMARY].
+ bool get needsIsPrimary => this == _TransformNodeState.NEEDS_IS_PRIMARY;
+
+ /// Whether [this] is [NEEDS_APPLY].
+ bool get needsApply => this == _TransformNodeState.NEEDS_APPLY;
+
+ /// Whether [this] is [APPLIED].
+ bool get isApplied => this == _TransformNodeState.APPLIED;
+
+ /// Whether [this] is [NOT_PRIMARY].
+ bool get isNotPrimary => this == _TransformNodeState.NOT_PRIMARY;
+
+ /// Whether the transform has finished running [Transformer.isPrimary] and
+ /// [Transformer.apply].
+ ///
+ /// Specifically, whether [this] is [APPLIED] or [NOT_PRIMARY].
+ bool get isDone => isApplied || isNotPrimary;
+
+ final String name;
+
+ const _TransformNodeState._(this.name);
+
+ String toString() => name;
+}
diff --git a/pkg/barback/lib/src/transformer.dart b/pkg/barback/lib/src/transformer.dart
index 6eed17a..83e2e2b 100644
--- a/pkg/barback/lib/src/transformer.dart
+++ b/pkg/barback/lib/src/transformer.dart
@@ -8,6 +8,7 @@
import 'asset.dart';
import 'transform.dart';
+import 'utils.dart';
/// A [Transformer] represents a processor that takes in one or more input
/// assets and uses them to generate one or more output assets.
@@ -19,15 +20,29 @@
/// If possible, transformers should implement [DeclaringTransformer] as well to
/// help barback optimize the package graph.
abstract class Transformer {
- /// Override this to return a space-separated list of file extensions
- /// (with leading `.`) that are allowed for the primary inputs to this
- /// transformer.
+ /// Override this to return a space-separated list of file extensions that are
+ /// allowed for the primary inputs to this transformer.
+ ///
+ /// Each extension must begin with a leading `.`.
///
/// If you don't override [isPrimary] yourself, it defaults to allowing any
/// asset whose extension matches one of the ones returned by this. If you
/// don't override [isPrimary] *or* this, it allows all files.
String get allowedExtensions => null;
+ Transformer() {
+ if (allowedExtensions == null) return;
+
+ var invalidExtensions = allowedExtensions.split(" ")
+ .where((extension) => !extension.startsWith("."))
+ .map((extension) => '"$extension"');
+ if (invalidExtensions.isEmpty) return;
+
+ throw new FormatException('Each extension in $this.allowedExtensions '
+ 'must begin with a ".", but ${toSentence(invalidExtensions)} '
+ '${pluralize("doesn't", invalidExtensions.length, plural: "don't")}.');
+ }
+
/// Returns `true` if [input] can be a primary input for this transformer.
///
/// While a transformer can read from multiple input files, one must be the
@@ -49,7 +64,7 @@
if (allowedExtensions == null) return new Future.value(true);
for (var extension in allowedExtensions.split(" ")) {
- if (input.id.extension == extension) return new Future.value(true);
+ if (input.id.path.endsWith(extension)) return new Future.value(true);
}
return new Future.value(false);
diff --git a/pkg/barback/lib/src/utils.dart b/pkg/barback/lib/src/utils.dart
index 59c9d4b..d2ce049 100644
--- a/pkg/barback/lib/src/utils.dart
+++ b/pkg/barback/lib/src/utils.dart
@@ -94,6 +94,25 @@
return DIGITS[(byte ~/ 16) % 16] + DIGITS[byte % 16];
}
+/// Returns a sentence fragment listing the elements of [iter].
+///
+/// This converts each element of [iter] to a string and separates them with
+/// commas and/or "and" where appropriate.
+String toSentence(Iterable iter) {
+ if (iter.length == 1) return iter.first.toString();
+ return iter.take(iter.length - 1).join(", ") + " and ${iter.last}";
+}
+
+/// Returns [name] if [number] is 1, or the plural of [name] otherwise.
+///
+/// By default, this just adds "s" to the end of [name] to get the plural. If
+/// [plural] is passed, that's used instead.
+String pluralize(String name, int number, {String plural}) {
+ if (number == 1) return name;
+ if (plural != null) return plural;
+ return '${name}s';
+}
+
/// Converts [input] into a [Uint8List].
///
/// If [input] is a [TypedData], this just returns a view on [input].
diff --git a/pkg/barback/test/package_graph/collisions_test.dart b/pkg/barback/test/package_graph/collisions_test.dart
new file mode 100644
index 0000000..91d00a0
--- /dev/null
+++ b/pkg/barback/test/package_graph/collisions_test.dart
@@ -0,0 +1,203 @@
+// 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 barback.test.package_graph.source_test;
+
+import 'package:barback/src/utils.dart';
+import 'package:scheduled_test/scheduled_test.dart';
+
+import '../utils.dart';
+
+main() {
+ initConfig();
+
+ test("errors if two transformers output the same file", () {
+ initGraph(["app|foo.a"], {"app": [
+ [
+ new RewriteTransformer("a", "b"),
+ new RewriteTransformer("a", "b")
+ ]
+ ]});
+ updateSources(["app|foo.a"]);
+
+ buildShouldFail([isAssetCollisionException("app|foo.b")]);
+ });
+
+ test("errors if a new transformer outputs the same file as an old "
+ "transformer", () {
+ initGraph(["app|foo.a", "app|foo.b"], {"app": [
+ [
+ new RewriteTransformer("a", "c"),
+ new RewriteTransformer("b", "c")
+ ]
+ ]});
+ updateSources(["app|foo.a"]);
+ expectAsset("app|foo.c", "foo.c");
+ buildShouldSucceed();
+
+ updateSources(["app|foo.b"]);
+ buildShouldFail([isAssetCollisionException("app|foo.c")]);
+ });
+
+ test("a collision returns the first-produced output", () {
+ var rewrite1 = new RewriteTransformer("one", "out");
+ var rewrite2 = new RewriteTransformer("two", "out");
+ initGraph({
+ "app|foo.one": "one",
+ "app|foo.two": "two"
+ }, {"app": [[rewrite1, rewrite2]]});
+
+ rewrite1.pauseApply();
+ updateSources(["app|foo.one", "app|foo.two"]);
+ // Wait long enough to ensure that rewrite2 has completed.
+ schedule(pumpEventQueue);
+
+ rewrite1.resumeApply();
+ expectAsset("app|foo.out", "two.out");
+ buildShouldFail([isAssetCollisionException("app|foo.out")]);
+
+ // Even after the collision is discovered, the first-produced output should
+ // be returned.
+ expectAsset("app|foo.out", "two.out");
+
+ // Even if the other output is updated more recently, the first output
+ // should continue to take precedence.
+ updateSources(["app|foo.one"]);
+ expectAsset("app|foo.out", "two.out");
+ });
+
+ test("a collision that is later resolved produces an output", () {
+ initGraph({
+ "app|foo.one": "one",
+ "app|foo.two": "two"
+ }, {"app": [
+ [
+ new RewriteTransformer("one", "out"),
+ new RewriteTransformer("two", "out")
+ ]
+ ]});
+
+ updateSources(["app|foo.one"]);
+ expectAsset("app|foo.out", "one.out");
+ buildShouldSucceed();
+
+ updateSources(["app|foo.two"]);
+ expectAsset("app|foo.out", "one.out");
+ buildShouldFail([isAssetCollisionException("app|foo.out")]);
+
+ removeSources(["app|foo.one"]);
+ expectAsset("app|foo.out", "two.out");
+ buildShouldSucceed();
+ });
+
+ test("a collision that is later resolved runs transforms", () {
+ initGraph({
+ "app|foo.one": "one",
+ "app|foo.two": "two"
+ }, {"app": [
+ [
+ new RewriteTransformer("one", "mid"),
+ new RewriteTransformer("two", "mid")
+ ],
+ [new RewriteTransformer("mid", "out")]
+ ]});
+
+ updateSources(["app|foo.one"]);
+ expectAsset("app|foo.out", "one.mid.out");
+ buildShouldSucceed();
+
+ updateSources(["app|foo.two"]);
+ expectAsset("app|foo.out", "one.mid.out");
+ buildShouldFail([isAssetCollisionException("app|foo.mid")]);
+
+ removeSources(["app|foo.one"]);
+ expectAsset("app|foo.out", "two.mid.out");
+ buildShouldSucceed();
+ });
+
+ test("a collision that is partially resolved returns the second completed "
+ "output", () {
+ var rewrite1 = new RewriteTransformer("one", "out");
+ var rewrite2 = new RewriteTransformer("two", "out");
+ var rewrite3 = new RewriteTransformer("three", "out");
+ initGraph({
+ "app|foo.one": "one",
+ "app|foo.two": "two",
+ "app|foo.three": "three"
+ }, {"app": [[rewrite1, rewrite2, rewrite3]]});
+
+ // Make rewrite3 the most-recently-completed transformer from the first run.
+ rewrite2.pauseApply();
+ rewrite3.pauseApply();
+ updateSources(["app|foo.one", "app|foo.two", "app|foo.three"]);
+ schedule(pumpEventQueue);
+ rewrite2.resumeApply();
+ schedule(pumpEventQueue);
+ rewrite3.resumeApply();
+ buildShouldFail([
+ isAssetCollisionException("app|foo.out"),
+ isAssetCollisionException("app|foo.out")
+ ]);
+
+ // Then update rewrite3 in a separate build. rewrite2 should still be the
+ // next version of foo.out in line.
+ // TODO(nweiz): Should this emit a collision error as well? Or should they
+ // only be emitted when a file is added or removed?
+ updateSources(["app|foo.three"]);
+ buildShouldSucceed();
+
+ removeSources(["app|foo.one"]);
+ expectAsset("app|foo.out", "two.out");
+ buildShouldFail([isAssetCollisionException("app|foo.out")]);
+ });
+
+ test("a collision with a pass-through asset returns the pass-through asset",
+ () {
+ initGraph([
+ "app|foo.txt",
+ "app|foo.in"
+ ], {"app": [
+ [new RewriteTransformer("in", "txt")]
+ ]});
+
+ updateSources(["app|foo.txt", "app|foo.in"]);
+ expectAsset("app|foo.txt", "foo");
+ buildShouldFail([isAssetCollisionException("app|foo.txt")]);
+ });
+
+ test("a new pass-through asset that collides returns the previous asset", () {
+ initGraph([
+ "app|foo.txt",
+ "app|foo.in"
+ ], {"app": [
+ [new RewriteTransformer("in", "txt")]
+ ]});
+
+ updateSources(["app|foo.in"]);
+ expectAsset("app|foo.txt", "foo.txt");
+ buildShouldSucceed();
+
+ updateSources(["app|foo.txt"]);
+ expectAsset("app|foo.txt", "foo.txt");
+ buildShouldFail([isAssetCollisionException("app|foo.txt")]);
+ });
+
+ test("a new transform output that collides with a pass-through asset returns "
+ "the pass-through asset", () {
+ initGraph([
+ "app|foo.txt",
+ "app|foo.in"
+ ], {"app": [
+ [new RewriteTransformer("in", "txt")]
+ ]});
+
+ updateSources(["app|foo.txt"]);
+ expectAsset("app|foo.txt", "foo");
+ buildShouldSucceed();
+
+ updateSources(["app|foo.in"]);
+ expectAsset("app|foo.txt", "foo");
+ buildShouldFail([isAssetCollisionException("app|foo.txt")]);
+ });
+}
diff --git a/pkg/barback/test/package_graph/errors_test.dart b/pkg/barback/test/package_graph/errors_test.dart
index 9b67409..011f69f 100644
--- a/pkg/barback/test/package_graph/errors_test.dart
+++ b/pkg/barback/test/package_graph/errors_test.dart
@@ -12,34 +12,6 @@
main() {
initConfig();
- test("errors if two transformers output the same file", () {
- initGraph(["app|foo.a"], {"app": [
- [
- new RewriteTransformer("a", "b"),
- new RewriteTransformer("a", "b")
- ]
- ]});
- updateSources(["app|foo.a"]);
-
- buildShouldFail([isAssetCollisionException("app|foo.b")]);
- });
-
- test("errors if a new transformer outputs the same file as an old "
- "transformer", () {
- initGraph(["app|foo.a", "app|foo.b"], {"app": [
- [
- new RewriteTransformer("a", "c"),
- new RewriteTransformer("b", "c")
- ]
- ]});
- updateSources(["app|foo.a"]);
- expectAsset("app|foo.c", "foo.c");
- buildShouldSucceed();
-
- updateSources(["app|foo.b"]);
- buildShouldFail([isAssetCollisionException("app|foo.c")]);
- });
-
test("does not report asset not found errors in results", () {
initGraph(["app|bar.txt"]);
@@ -56,7 +28,12 @@
});
test("reports an error for an unprovided source", () {
- initGraph(["app|known.txt"]);
+ initGraph(["app|known.txt"], {"app": [
+ // Have a dummy transformer so that barback at least tries to load the
+ // asset.
+ [new RewriteTransformer("a", "b")]
+ ]});
+
updateSources(["app|unknown.txt"]);
buildShouldFail([
@@ -154,7 +131,11 @@
});
test("an error loading an asset removes the asset from the graph", () {
- initGraph(["app|foo.txt"]);
+ initGraph(["app|foo.txt"], {"app": [
+ // Have a dummy transformer so that barback at least tries to load the
+ // asset.
+ [new RewriteTransformer("a", "b")]
+ ]});
setAssetError("app|foo.txt");
updateSources(["app|foo.txt"]);
@@ -164,164 +145,35 @@
]);
});
- test("a collision returns the first-produced output", () {
- var rewrite1 = new RewriteTransformer("one", "out");
- var rewrite2 = new RewriteTransformer("two", "out");
- initGraph({
- "app|foo.one": "one",
- "app|foo.two": "two"
- }, {"app": [[rewrite1, rewrite2]]});
+ test("an asset isn't passed through a transformer with an error", () {
+ initGraph(["app|foo.txt"], {"app": [[new BadTransformer([])]]});
- rewrite1.pauseApply();
- updateSources(["app|foo.one", "app|foo.two"]);
- // Wait long enough to ensure that rewrite2 has completed.
- schedule(pumpEventQueue);
-
- rewrite1.resumeApply();
- expectAsset("app|foo.out", "two.out");
- buildShouldFail([isAssetCollisionException("app|foo.out")]);
-
- // Even after the collision is discovered, the first-produced output should
- // be returned.
- expectAsset("app|foo.out", "two.out");
-
- // Even if the other output is updated more recently, the first output
- // should continue to take precedence.
- updateSources(["app|foo.one"]);
- expectAsset("app|foo.out", "two.out");
+ updateSources(["app|foo.txt"]);
+ expectNoAsset("app|foo.txt");
+ buildShouldFail([isTransformerException(equals(BadTransformer.ERROR))]);
});
- test("a collision that is later resolved produces an output", () {
- initGraph({
- "app|foo.one": "one",
- "app|foo.two": "two"
- }, {"app": [
- [
- new RewriteTransformer("one", "out"),
- new RewriteTransformer("two", "out")
- ]
+ test("a transformer that logs errors shouldn't produce output", () {
+ initGraph(["app|foo.txt"], {"app": [
+ [new BadLogTransformer(["app|out.txt"])]
]});
- updateSources(["app|foo.one"]);
- expectAsset("app|foo.out", "one.out");
- buildShouldSucceed();
-
- updateSources(["app|foo.two"]);
- expectAsset("app|foo.out", "one.out");
- buildShouldFail([isAssetCollisionException("app|foo.out")]);
-
- removeSources(["app|foo.one"]);
- expectAsset("app|foo.out", "two.out");
- buildShouldSucceed();
- });
-
- test("a collision that is later resolved runs transforms", () {
- initGraph({
- "app|foo.one": "one",
- "app|foo.two": "two"
- }, {"app": [
- [
- new RewriteTransformer("one", "mid"),
- new RewriteTransformer("two", "mid")
- ],
- [new RewriteTransformer("mid", "out")]
- ]});
-
- updateSources(["app|foo.one"]);
- expectAsset("app|foo.out", "one.mid.out");
- buildShouldSucceed();
-
- updateSources(["app|foo.two"]);
- expectAsset("app|foo.out", "one.mid.out");
- buildShouldFail([isAssetCollisionException("app|foo.mid")]);
-
- removeSources(["app|foo.one"]);
- expectAsset("app|foo.out", "two.mid.out");
- buildShouldSucceed();
- });
-
- test("a collision that is partially resolved returns the second completed "
- "output", () {
- var rewrite1 = new RewriteTransformer("one", "out");
- var rewrite2 = new RewriteTransformer("two", "out");
- var rewrite3 = new RewriteTransformer("three", "out");
- initGraph({
- "app|foo.one": "one",
- "app|foo.two": "two",
- "app|foo.three": "three"
- }, {"app": [[rewrite1, rewrite2, rewrite3]]});
-
- // Make rewrite3 the most-recently-completed transformer from the first run.
- rewrite2.pauseApply();
- rewrite3.pauseApply();
- updateSources(["app|foo.one", "app|foo.two", "app|foo.three"]);
- schedule(pumpEventQueue);
- rewrite2.resumeApply();
- schedule(pumpEventQueue);
- rewrite3.resumeApply();
+ updateSources(["app|foo.txt"]);
+ expectNoAsset("app|foo.txt");
+ expectNoAsset("app|out.txt");
buildShouldFail([
- isAssetCollisionException("app|foo.out"),
- isAssetCollisionException("app|foo.out")
+ isTransformerException(equals("first error")),
+ isTransformerException(equals("second error"))
]);
-
- // Then update rewrite3 in a separate build. rewrite2 should still be the
- // next version of foo.out in line.
- // TODO(nweiz): Should this emit a collision error as well? Or should they
- // only be emitted when a file is added or removed?
- updateSources(["app|foo.three"]);
- buildShouldSucceed();
-
- removeSources(["app|foo.one"]);
- expectAsset("app|foo.out", "two.out");
- buildShouldFail([isAssetCollisionException("app|foo.out")]);
});
- test("a collision with a pass-through asset returns the pass-through asset",
- () {
- initGraph([
- "app|foo.txt",
- "app|foo.in"
- ], {"app": [
- [new RewriteTransformer("in", "txt")]
- ]});
-
- updateSources(["app|foo.txt", "app|foo.in"]);
- expectAsset("app|foo.txt", "foo");
- buildShouldFail([isAssetCollisionException("app|foo.txt")]);
- });
-
- test("a new pass-through asset that collides returns the previous asset", () {
- initGraph([
- "app|foo.txt",
- "app|foo.in"
- ], {"app": [
- [new RewriteTransformer("in", "txt")]
- ]});
-
- updateSources(["app|foo.in"]);
- expectAsset("app|foo.txt", "foo.txt");
- buildShouldSucceed();
-
- updateSources(["app|foo.txt"]);
- expectAsset("app|foo.txt", "foo.txt");
- buildShouldFail([isAssetCollisionException("app|foo.txt")]);
- });
-
- test("a new transform output that collides with a pass-through asset returns "
- "the pass-through asset", () {
- initGraph([
- "app|foo.txt",
- "app|foo.in"
- ], {"app": [
- [new RewriteTransformer("in", "txt")]
+ test("a transformer can catch an error loading a secondary input", () {
+ initGraph(["app|foo.txt"], {"app": [
+ [new CatchAssetNotFoundTransformer(".txt", "app|nothing")]
]});
updateSources(["app|foo.txt"]);
- expectAsset("app|foo.txt", "foo");
+ expectAsset("app|foo.txt", "failed to load app|nothing");
buildShouldSucceed();
-
- updateSources(["app|foo.in"]);
- expectAsset("app|foo.txt", "foo");
- buildShouldFail([isAssetCollisionException("app|foo.txt")]);
});
}
diff --git a/pkg/barback/test/package_graph/group_test.dart b/pkg/barback/test/package_graph/group_test.dart
index 2588ebf..468cb8c2 100644
--- a/pkg/barback/test/package_graph/group_test.dart
+++ b/pkg/barback/test/package_graph/group_test.dart
@@ -191,23 +191,23 @@
buildShouldSucceed();
});
- // TODO(nweiz): re-enable this test when a transformer can consume its
- // primary input (issue 16612).
- // test("parallel groups' intermediate assets can't collide", () {
- // initGraph(["app|foo.a", "app|foo.x"], {"app": [
- // [new TransformerGroup([
- // [new RewriteTransformer("a", "b")],
- // [new RewriteTransformer("b", "c")]
- // ]), new TransformerGroup([
- // [new RewriteTransformer("x", "b")],
- // [new RewriteTransformer("b", "z")]
- // ])]
- // ]});
- // updateSources(["app|foo.a", "app|foo.x"]);
- // expectAsset("app|foo.c", "foo.b.c");
- // expectAsset("app|foo.z", "foo.b.z");
- // buildShouldSucceed();
- // });
+ test("parallel groups' intermediate assets can't collide", () {
+ initGraph(["app|foo.a", "app|foo.x"], {"app": [
+ [new TransformerGroup([
+ [new RewriteTransformer("a", "b")],
+ [new RewriteTransformer("b", "c")..consumePrimary = true]
+ ]), new TransformerGroup([
+ [new RewriteTransformer("x", "b")],
+ [new RewriteTransformer("b", "z")..consumePrimary = true]
+ ])]
+ ]});
+ updateSources(["app|foo.a", "app|foo.x"]);
+ expectAsset("app|foo.a");
+ expectAsset("app|foo.x");
+ expectAsset("app|foo.c", "foo.b.c");
+ expectAsset("app|foo.z", "foo.b.z");
+ buildShouldSucceed();
+ });
});
group("pass-through", () {
@@ -299,6 +299,35 @@
buildShouldSucceed();
});
+ test("doesn't pass through an input that's consumed by a group but not "
+ "by transformers", () {
+ initGraph(["app|foo.a"], {"app": [[
+ new TransformerGroup([
+ [new RewriteTransformer("a", "b")..consumePrimary = true],
+ ]),
+ new RewriteTransformer("x", "y")
+ ]]});
+ updateSources(["app|foo.a"]);
+ expectNoAsset("app|foo.a");
+ expectAsset("app|foo.b", "foo.b");
+ buildShouldSucceed();
+ });
+
+ test("doesn't pass through an input that's consumed by transformers but "
+ "not by a group", () {
+ initGraph(["app|foo.x"], {"app": [[
+ new TransformerGroup([
+ [new RewriteTransformer("a", "b")],
+ [new RewriteTransformer("b", "c")]
+ ]),
+ new RewriteTransformer("x", "y")..consumePrimary = true
+ ]]});
+ updateSources(["app|foo.x"]);
+ expectNoAsset("app|foo.x");
+ expectAsset("app|foo.y", "foo.y");
+ buildShouldSucceed();
+ });
+
test("doesn't detect a collision for an input that's modified in-place by "
"a transformer", () {
initGraph(["app|foo.x"], {"app": [[
diff --git a/pkg/barback/test/package_graph/lazy_transformer_test.dart b/pkg/barback/test/package_graph/lazy_transformer_test.dart
index 1c96e02..df249b3 100644
--- a/pkg/barback/test/package_graph/lazy_transformer_test.dart
+++ b/pkg/barback/test/package_graph/lazy_transformer_test.dart
@@ -175,4 +175,58 @@
buildShouldFail([isTransformerException(equals(LazyBadTransformer.ERROR))]);
expect(transformer.numRuns, completion(equals(0)));
});
+
+ test("a lazy transformer passes through inputs it doesn't apply to", () {
+ initGraph(["app|foo.txt"], {"app": [
+ [new LazyRewriteTransformer("blub", "blab")]
+ ]});
+
+ updateSources(["app|foo.txt"]);
+ expectAsset("app|foo.txt");
+ buildShouldSucceed();
+ });
+
+ test("a lazy transformer passes through inputs it doesn't overwrite", () {
+ initGraph(["app|foo.txt"], {"app": [
+ [new LazyRewriteTransformer("txt", "out")]
+ ]});
+
+ updateSources(["app|foo.txt"]);
+ expectAsset("app|foo.txt");
+ buildShouldSucceed();
+ });
+
+ test("a lazy transformer doesn't pass through inputs it overwrites", () {
+ initGraph(["app|foo.txt"], {"app": [
+ [new LazyRewriteTransformer("txt", "txt")]
+ ]});
+
+ updateSources(["app|foo.txt"]);
+ expectAsset("app|foo.txt", "foo.txt");
+ buildShouldSucceed();
+ });
+
+ test("a lazy transformer doesn't pass through inputs it consumes", () {
+ initGraph(["app|foo.txt"], {"app": [
+ [new LazyRewriteTransformer("txt", "out")..consumePrimary = true]
+ ]});
+
+ updateSources(["app|foo.txt"]);
+ expectNoAsset("app|foo.txt");
+ buildShouldSucceed();
+ });
+
+ test("a lazy transformer that doesn't apply does nothing when forced", () {
+ initGraph(["app|foo.txt"], {"app": [
+ [new LazyRewriteTransformer("blub", "blab")]
+ ]});
+
+ updateSources(["app|foo.txt"]);
+ expectNoAsset("app|foo.blab");
+
+ // Getting all assets will force every lazy transformer. This shouldn't
+ // cause the rewrite to apply, because foo.txt isn't primary.
+ expectAllAssets(["app|foo.txt"]);
+ buildShouldSucceed();
+ });
}
diff --git a/pkg/barback/test/package_graph/transform/consume_input_test.dart b/pkg/barback/test/package_graph/transform/consume_input_test.dart
new file mode 100644
index 0000000..2580f5d
--- /dev/null
+++ b/pkg/barback/test/package_graph/transform/consume_input_test.dart
@@ -0,0 +1,170 @@
+// Copyright (c) 2014, 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 barback.test.package_graph.transform.pass_through_test;
+
+import 'package:barback/src/utils.dart';
+import 'package:scheduled_test/scheduled_test.dart';
+
+import '../../utils.dart';
+
+main() {
+ initConfig();
+ test("a transform consumes its input without overwriting it", () {
+ initGraph([
+ "app|foo.txt"
+ ], {
+ "app": [[new RewriteTransformer("txt", "out")..consumePrimary = true]]
+ });
+
+ updateSources(["app|foo.txt"]);
+ expectAsset("app|foo.out", "foo.out");
+ expectNoAsset("app|foo.txt");
+ buildShouldSucceed();
+ });
+
+ test("a transform consumes its input while a sibling overwrites it", () {
+ initGraph([
+ "app|foo.txt"
+ ], {
+ "app": [[
+ new RewriteTransformer("txt", "out")..consumePrimary = true,
+ new RewriteTransformer("txt", "txt")
+ ]]
+ });
+
+ updateSources(["app|foo.txt"]);
+ expectAsset("app|foo.out", "foo.out");
+ expectAsset("app|foo.txt", "foo.txt");
+ buildShouldSucceed();
+ });
+
+ test("a transform stops consuming its input", () {
+ initGraph({
+ "app|foo.txt": "yes"
+ }, {
+ "app": [[
+ new ConditionallyConsumePrimaryTransformer("txt", "out", "yes")
+ ]]
+ });
+
+ updateSources(["app|foo.txt"]);
+ expectAsset("app|foo.out", "yes.out");
+ expectNoAsset("app|foo.txt");
+ buildShouldSucceed();
+
+ modifyAsset("app|foo.txt", "no");
+ updateSources(["app|foo.txt"]);
+ expectAsset("app|foo.out", "no.out");
+ expectAsset("app|foo.txt", "no");
+ buildShouldSucceed();
+ });
+
+ test("two sibling transforms both consume their input", () {
+ initGraph(["app|foo.txt"], {
+ "app": [[
+ new RewriteTransformer("txt", "one")..consumePrimary = true,
+ new RewriteTransformer("txt", "two")..consumePrimary = true
+ ]]
+ });
+
+ updateSources(["app|foo.txt"]);
+ expectAsset("app|foo.one", "foo.one");
+ expectAsset("app|foo.two", "foo.two");
+ expectNoAsset("app|foo.txt");
+ buildShouldSucceed();
+ });
+
+ test("a transform stops consuming its input but a sibling is still "
+ "consuming it", () {
+ initGraph({
+ "app|foo.txt": "yes"
+ }, {
+ "app": [[
+ new RewriteTransformer("txt", "one")..consumePrimary = true,
+ new ConditionallyConsumePrimaryTransformer("txt", "two", "yes")
+ ]]
+ });
+
+ updateSources(["app|foo.txt"]);
+ expectAsset("app|foo.one", "yes.one");
+ expectAsset("app|foo.two", "yes.two");
+ expectNoAsset("app|foo.txt");
+ buildShouldSucceed();
+
+ modifyAsset("app|foo.txt", "no");
+ updateSources(["app|foo.txt"]);
+ expectAsset("app|foo.one", "no.one");
+ expectAsset("app|foo.two", "no.two");
+ expectNoAsset("app|foo.txt");
+ buildShouldSucceed();
+ });
+
+ test("a transform consumes its input and emits nothing", () {
+ initGraph([
+ "app|foo.txt"
+ ], {
+ "app": [[new EmitNothingTransformer("txt")..consumePrimary = true]]
+ });
+
+ updateSources(["app|foo.txt"]);
+ expectNoAsset("app|foo.txt");
+ buildShouldSucceed();
+ });
+
+ test("a transform consumes its input, then is removed", () {
+ initGraph([
+ "app|foo.txt"
+ ], {
+ "app": [[new RewriteTransformer("txt", "out")..consumePrimary = true]]
+ });
+
+ updateSources(["app|foo.txt"]);
+ expectAsset("app|foo.out", "foo.out");
+ expectNoAsset("app|foo.txt");
+ buildShouldSucceed();
+
+ updateTransformers("app", [[]]);
+ expectNoAsset("app|foo.out");
+ expectAsset("app|foo.txt", "foo");
+ buildShouldSucceed();
+ });
+
+ test("a transform consumes its input and emits nothing, then is removed",
+ () {
+ initGraph([
+ "app|foo.txt"
+ ], {
+ "app": [[new EmitNothingTransformer("txt")..consumePrimary = true]]
+ });
+
+ updateSources(["app|foo.txt"]);
+ expectNoAsset("app|foo.txt");
+ buildShouldSucceed();
+
+ updateTransformers("app", [[]]);
+ expectAsset("app|foo.txt", "foo");
+ buildShouldSucceed();
+ });
+
+ test("a transform which consumes its input is added", () {
+ initGraph([
+ "app|foo.txt"
+ ], {
+ "app": [[]]
+ });
+
+ updateSources(["app|foo.txt"]);
+ expectNoAsset("app|foo.out");
+ expectAsset("app|foo.txt", "foo");
+ buildShouldSucceed();
+
+ updateTransformers("app", [[
+ new RewriteTransformer("txt", "out")..consumePrimary = true
+ ]]);
+ expectAsset("app|foo.out", "foo.out");
+ expectNoAsset("app|foo.txt");
+ buildShouldSucceed();
+ });
+}
\ No newline at end of file
diff --git a/pkg/barback/test/transformer/bad_log.dart b/pkg/barback/test/transformer/bad_log.dart
new file mode 100644
index 0000000..9e49f8b
--- /dev/null
+++ b/pkg/barback/test/transformer/bad_log.dart
@@ -0,0 +1,35 @@
+// Copyright (c) 2014, 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 barback.test.transformer.bad_log;
+
+import 'dart:async';
+
+import 'package:barback/barback.dart';
+import 'package:barback/src/utils.dart';
+
+import 'mock.dart';
+
+/// A transformer that logs an error when run, Before generating the given
+/// outputs.
+class BadLogTransformer extends MockTransformer {
+ /// The list of asset names that it should output.
+ final List<String> outputs;
+
+ BadLogTransformer(this.outputs);
+
+ Future<bool> doIsPrimary(Asset asset) => new Future.value(true);
+
+ Future doApply(Transform transform) {
+ return newFuture(() {
+ transform.logger.error("first error");
+ transform.logger.error("second error");
+
+ for (var output in outputs) {
+ var id = new AssetId.parse(output);
+ transform.addOutput(new Asset.fromString(id, output));
+ }
+ });
+ }
+}
diff --git a/pkg/barback/test/transformer/catch_asset_not_found.dart b/pkg/barback/test/transformer/catch_asset_not_found.dart
new file mode 100644
index 0000000..2e4e24b
--- /dev/null
+++ b/pkg/barback/test/transformer/catch_asset_not_found.dart
@@ -0,0 +1,39 @@
+// 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 barback.test.transformer.catch_asset_not_found;
+
+import 'dart:async';
+
+import 'package:barback/barback.dart';
+import 'package:barback/src/utils.dart';
+
+import 'mock.dart';
+
+/// A transformer that tries to load a secondary input and catches an
+/// [AssetNotFoundException] if the input doesn't exist.
+class CatchAssetNotFoundTransformer extends MockTransformer {
+ /// The extension of assets this applies to.
+ final String extension;
+
+ /// The id of the secondary input to load.
+ final AssetId input;
+
+ CatchAssetNotFoundTransformer(this.extension, String input)
+ : input = new AssetId.parse(input);
+
+ Future<bool> doIsPrimary(Asset asset) =>
+ new Future.value(asset.id.extension == extension);
+
+ Future doApply(Transform transform) {
+ return transform.getInput(input).then((_) {
+ transform.addOutput(new Asset.fromString(
+ transform.primaryInput.id, "success"));
+ }).catchError((e) {
+ if (e is! AssetNotFoundException) throw e;
+ transform.addOutput(new Asset.fromString(
+ transform.primaryInput.id, "failed to load $input"));
+ });
+ }
+}
diff --git a/pkg/barback/test/transformer/conditionally_consume_primary.dart b/pkg/barback/test/transformer/conditionally_consume_primary.dart
new file mode 100644
index 0000000..e37aebf
--- /dev/null
+++ b/pkg/barback/test/transformer/conditionally_consume_primary.dart
@@ -0,0 +1,29 @@
+// Copyright (c) 2014, 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 barback.test.transformer.conditionally_consume_primary;
+
+import 'dart:async';
+
+import 'package:barback/barback.dart';
+
+import 'rewrite.dart';
+
+/// A transformer that consumes its primary input only if its contents match a
+/// given pattern.
+class ConditionallyConsumePrimaryTransformer extends RewriteTransformer {
+ final Pattern content;
+
+ ConditionallyConsumePrimaryTransformer(String from, String to, this.content)
+ : super(from, to);
+
+ Future doApply(Transform transform) {
+ return getPrimary(transform).then((primary) {
+ return primary.readAsString().then((value) {
+ if (value.contains(content)) transform.consumePrimary();
+ return super.doApply(transform);
+ });
+ });
+ }
+}
diff --git a/pkg/barback/test/transformer/emit_nothing.dart b/pkg/barback/test/transformer/emit_nothing.dart
new file mode 100644
index 0000000..d68fecd
--- /dev/null
+++ b/pkg/barback/test/transformer/emit_nothing.dart
@@ -0,0 +1,25 @@
+// Copyright (c) 2014, 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 barback.test.transformer.emit_nothing;
+
+import 'dart:async';
+
+import 'package:barback/barback.dart';
+
+import 'mock.dart';
+
+/// A transformer that emits no assets.
+class EmitNothingTransformer extends MockTransformer {
+ final String extension;
+
+ EmitNothingTransformer(this.extension);
+
+ Future<bool> doIsPrimary(Asset asset) =>
+ new Future.value(asset.id.extension == ".$extension");
+
+ Future doApply(Transform transform) => new Future.value();
+
+ String toString() => "$extension->nothing";
+}
diff --git a/pkg/barback/test/transformer/lazy_rewrite.dart b/pkg/barback/test/transformer/lazy_rewrite.dart
index 61c00e5..f694a0e 100644
--- a/pkg/barback/test/transformer/lazy_rewrite.dart
+++ b/pkg/barback/test/transformer/lazy_rewrite.dart
@@ -18,6 +18,7 @@
: super(from, to);
Future declareOutputs(DeclaringTransform transform) {
+ if (consumePrimary) transform.consumePrimary();
for (var extension in to.split(" ")) {
var id = transform.primaryInput.id.changeExtension(".$extension");
transform.declareOutput(id);
diff --git a/pkg/barback/test/transformer/mock.dart b/pkg/barback/test/transformer/mock.dart
index 57d3f07..413b5b0 100644
--- a/pkg/barback/test/transformer/mock.dart
+++ b/pkg/barback/test/transformer/mock.dart
@@ -56,6 +56,10 @@
/// that this is called.
Future<bool> get isRunning => schedule(() => _runningTransforms > 0);
+ /// If this is set to `true`, the transformer will consume its primary input
+ /// during [apply].
+ bool consumePrimary = false;
+
/// Pauses the schedule until this transformer begins running.
void waitUntilStarted() {
schedule(() => _started.future, "wait until $this starts");
@@ -176,6 +180,7 @@
_numRuns++;
if (_runningTransforms == 0) _started.complete();
_runningTransforms++;
+ if (consumePrimary) transform.consumePrimary();
return newFuture(() => doApply(transform)).then((_) {
if (_apply != null) return _apply.future;
}).whenComplete(() {
diff --git a/pkg/barback/test/transformer_test.dart b/pkg/barback/test/transformer_test.dart
index 9df3f4a..902e140 100644
--- a/pkg/barback/test/transformer_test.dart
+++ b/pkg/barback/test/transformer_test.dart
@@ -27,6 +27,19 @@
completion(isFalse));
});
+ test("supports multi-level extensions with allowedExtensions", () {
+ var transformer = new ExtensionTransformer(".dart.js");
+ expect(transformer.isPrimary(makeAsset("foo.dart.js")),
+ completion(isTrue));
+
+ expect(transformer.isPrimary(makeAsset("foo.js")), completion(isFalse));
+ expect(transformer.isPrimary(makeAsset("foo.dart")), completion(isFalse));
+ });
+
+ test("throws an error for extensions without periods", () {
+ expect(() => new ExtensionTransformer("dart"), throwsFormatException);
+ });
+
test("allows all files if allowedExtensions is not overridden", () {
var transformer = new MockTransformer();
expect(transformer.isPrimary(makeAsset("foo.txt")),
diff --git a/pkg/barback/test/utils.dart b/pkg/barback/test/utils.dart
index 53df906..4d72a2b 100644
--- a/pkg/barback/test/utils.dart
+++ b/pkg/barback/test/utils.dart
@@ -17,9 +17,13 @@
import 'package:unittest/compact_vm_config.dart';
export 'transformer/bad.dart';
+export 'transformer/bad_log.dart';
+export 'transformer/catch_asset_not_found.dart';
export 'transformer/check_content.dart';
export 'transformer/check_content_and_rename.dart';
+export 'transformer/conditionally_consume_primary.dart';
export 'transformer/create_asset.dart';
+export 'transformer/emit_nothing.dart';
export 'transformer/lazy_bad.dart';
export 'transformer/lazy_many_to_one.dart';
export 'transformer/lazy_rewrite.dart';
@@ -95,6 +99,8 @@
_provider = new MockProvider(assetMap);
_barback = new Barback(_provider);
+ // Add a dummy listener to the log so it doesn't print to stdout.
+ _barback.log.listen((_) {});
_nextBuildResult = 0;
_nextLog = 0;
diff --git a/pkg/code_transformers/lib/src/resolver_impl.dart b/pkg/code_transformers/lib/src/resolver_impl.dart
index 5b4aaef..9322ccd 100644
--- a/pkg/code_transformers/lib/src/resolver_impl.dart
+++ b/pkg/code_transformers/lib/src/resolver_impl.dart
@@ -472,10 +472,6 @@
int get hashCode => _proxy.hashCode;
- void getContentsToReceiver(Source_ContentReceiver receiver) {
- _proxy.getContentsToReceiver(receiver);
- }
-
TimestampedData<String> get contents => _proxy.contents;
String get encoding => _proxy.encoding;
diff --git a/pkg/code_transformers/pubspec.yaml b/pkg/code_transformers/pubspec.yaml
index 509fae8..3ff8c5d 100644
--- a/pkg/code_transformers/pubspec.yaml
+++ b/pkg/code_transformers/pubspec.yaml
@@ -4,7 +4,7 @@
description: Collection of utilities related to creating barback transformers.
homepage: http://www.dartlang.org
dependencies:
- analyzer: "0.13.0-dev.4"
+ analyzer: "0.13.0-dev.6"
barback: ">=0.11.0 <0.12.0"
path: ">=0.9.0 <2.0.0"
source_maps: ">=0.9.0 <0.10.0"
diff --git a/pkg/compiler_unsupported/changelog.md b/pkg/compiler_unsupported/changelog.md
new file mode 100644
index 0000000..e5d2021
--- /dev/null
+++ b/pkg/compiler_unsupported/changelog.md
@@ -0,0 +1,5 @@
+# Changelog
+
+## Version 0.7.1
+Upgrade to SDK 1.3.0-dev.3.2.
+
diff --git a/pkg/compiler_unsupported/pubspec.yaml b/pkg/compiler_unsupported/pubspec.yaml
index e7d65b1..a228bcd 100644
--- a/pkg/compiler_unsupported/pubspec.yaml
+++ b/pkg/compiler_unsupported/pubspec.yaml
@@ -1,5 +1,5 @@
name: compiler_unsupported
-version: 0.7.0
+version: 0.7.1
author: Dart2js Team <compiler-dev@dartlang.org>
homepage: http://www.dartlang.org
description: >
diff --git a/pkg/http/lib/src/base_request.dart b/pkg/http/lib/src/base_request.dart
index f54e757..dab055b 100644
--- a/pkg/http/lib/src/base_request.dart
+++ b/pkg/http/lib/src/base_request.dart
@@ -5,6 +5,7 @@
library base_request;
import 'dart:async';
+import 'dart:collection';
import 'byte_stream.dart';
import 'client.dart';
@@ -79,7 +80,9 @@
/// Creates a new HTTP request.
BaseRequest(this.method, this.url)
- : headers = <String, String>{};
+ : headers = new LinkedHashMap(
+ equals: (key1, key2) => key1.toLowerCase() == key2.toLowerCase(),
+ hashCode: (key) => key.toLowerCase().hashCode);
/// Finalizes the HTTP request in preparation for it being sent. This freezes
/// all mutable fields and returns a single-subscription [ByteStream] that
diff --git a/pkg/http/pubspec.yaml b/pkg/http/pubspec.yaml
index 03288ec..3821bb0 100644
--- a/pkg/http/pubspec.yaml
+++ b/pkg/http/pubspec.yaml
@@ -1,5 +1,5 @@
name: http
-version: 0.9.2+3
+version: 0.9.3-dev
author: "Dart Team <misc@dartlang.org>"
homepage: https://pub.dartlang.org/packages/http
description: A composable, Future-based API for making HTTP requests.
diff --git a/pkg/http/test/request_test.dart b/pkg/http/test/request_test.dart
index 929cc63..08e2ef9 100644
--- a/pkg/http/test/request_test.dart
+++ b/pkg/http/test/request_test.dart
@@ -1,4 +1,4 @@
-// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
+// 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.
@@ -271,6 +271,13 @@
expect(request.headers[HttpHeaders.CONTENT_TYPE], isNull);
});
+ test('name is case insensitive', () {
+ var request = new http.Request('POST', dummyUrl);
+ request.headers['CoNtEnT-tYpE'] = 'application/json';
+ expect(request.headers,
+ containsPair('content-type', 'application/json'));
+ });
+
test('is set to application/x-www-form-urlencoded with charset utf-8 if '
'bodyFields is set', () {
var request = new http.Request('POST', dummyUrl);
diff --git a/pkg/intl/pubspec.yaml b/pkg/intl/pubspec.yaml
index dfaed73..5ed556a 100644
--- a/pkg/intl/pubspec.yaml
+++ b/pkg/intl/pubspec.yaml
@@ -5,7 +5,7 @@
homepage: http://www.dartlang.org
documentation: http://api.dartlang.org/docs/pkg/intl
dependencies:
- analyzer: "0.13.0-dev.4"
+ analyzer: "0.13.0-dev.6"
path: ">=0.9.0 <2.0.0"
dev_dependencies:
serialization: ">=0.9.0 <0.10.0"
diff --git a/pkg/observe/pubspec.yaml b/pkg/observe/pubspec.yaml
index 460e1b8..fdb276a 100644
--- a/pkg/observe/pubspec.yaml
+++ b/pkg/observe/pubspec.yaml
@@ -1,5 +1,5 @@
name: observe
-version: 0.10.0-pre.0
+version: 0.10.0-pre.2
author: Polymer.dart Authors <web-ui-dev@dartlang.org>
description: >
Observable properties and objects for use in template_binding.
@@ -9,7 +9,7 @@
user input into the DOM is immediately assigned to the model.
homepage: https://www.dartlang.org/polymer-dart/
dependencies:
- analyzer: "0.13.0-dev.4"
+ analyzer: "0.13.0-dev.6"
barback: ">=0.9.0 <0.13.0"
logging: ">=0.9.0 <0.10.0"
path: ">=0.9.0 <2.0.0"
diff --git a/pkg/observe/test/transformer_test.dart b/pkg/observe/test/transformer_test.dart
index 159cf49..1687d8a 100644
--- a/pkg/observe/test/transformer_test.dart
+++ b/pkg/observe/test/transformer_test.dart
@@ -142,6 +142,7 @@
}
class _MockTransform implements Transform {
+ bool shouldConsumePrimary = false;
List<Asset> outs = [];
Asset _asset;
TransformLogger logger = new TransformLogger(_mockLogFn);
@@ -157,6 +158,10 @@
outs.add(output);
}
+ void consumePrimary() {
+ shouldConsumePrimary = true;
+ }
+
readInput(id) => throw new UnimplementedError();
readInputAsString(id, {encoding}) => throw new UnimplementedError();
diff --git a/pkg/pkg.status b/pkg/pkg.status
index 00290a7..152c39b 100644
--- a/pkg/pkg.status
+++ b/pkg/pkg.status
@@ -16,8 +16,8 @@
scheduled_test/test/scheduled_server_test: Pass, Fail # 13524
scheduled_test/test/scheduled_process_test: Pass, Slow # Issue 9231
-
polymer/test/event_path_test: Pass, Fail # Issue 15766
+docgen/test/generate_json_test: Skip # Issue 17430
[ $compiler == dart2js ]
collection/test/equality_test/01: Fail # Issue 1533
@@ -41,9 +41,6 @@
[ $runtime == jsshell ]
analyzer/test/generated/element_test: Pass, Slow # Issue 16473
-[ $compiler == dart2js && $checked && $runtime == drt && $nocsp ]
-async/test/stream_zip_test: RuntimeError # Issue 16719
-
[ $runtime == d8 || $runtime == jsshell ]
unittest/test/unittest_nested_groups_setup_teardown_test: RuntimeError # http://dartbug.com/10109
stack_trace/test/vm_test: RuntimeError, OK # VM-specific traces
@@ -181,7 +178,7 @@
intl/test/date_time_format_http_request_test: Fail # TODO(kasperl): Please triage.
[ $browser ]
-analysis_server/test/channel_test: Skip # Uses dart:io.
+analysis_server/test/*: Skip # Uses dart:io.
analyzer/test/generated/ast_test: Fail, OK # Uses dart:io.
analyzer/test/generated/element_test: Fail, OK # Uses dart:io.
analyzer/test/generated/parser_test: Fail, OK # Uses dart:io.
@@ -265,6 +262,8 @@
unittest/test/unittest_correct_callback_test: Fail # 13921
unittest/test/unittest_exception_test: Fail # 13921
unittest/test/unittest_excess_callback_test: Fail # 13921
+unittest/test/unittest_expect_async_args_test: Fail # 13921
+unittest/test/unittest_expect_async_test: Fail # 13921
unittest/test/unittest_group_name_test: Fail # 13921
unittest/test/unittest_invalid_ops_test: Fail # 13921
unittest/test/unittest_late_exception_test: Fail # 13921
@@ -281,12 +280,12 @@
unittest/test/unittest_test_returning_future_test: Fail # 13921
unittest/test/unittest_test_returning_future_using_runasync_test: Fail # 13921
unittest/test/unittest_testcases_immutable_test: Fail # 13921
-polymer/test/custom_event_test: Pass, Crash # 14360
-polymer/example/canonicalization/test/deploy_test: Fail, OK # tests deploy only behavior
polymer/example/canonicalization/test/deploy2_test: Fail, OK # tests deploy only behavior
polymer/example/canonicalization/test/deploy3_test: Fail, OK # tests deploy only behavior
-polymer/example/canonicalization/test/dir/deploy_test: Fail, OK # tests deploy only behavior
+polymer/example/canonicalization/test/deploy_test: Fail, OK # tests deploy only behavior
polymer/example/canonicalization/test/dir/deploy2_test: Fail, OK # tests deploy only behavior
+polymer/example/canonicalization/test/dir/deploy_test: Fail, OK # tests deploy only behavior
+polymer/test/custom_event_test: Pass, Crash # 14360
[ $compiler == none && ( $runtime == dartium || $runtime == drt ) && $checked ]
polymer/test/custom_event_test: Skip # http://dartbug.com/15517
diff --git a/pkg/pkgbuild.status b/pkg/pkgbuild.status
index c8932a9..818b5cc 100644
--- a/pkg/pkgbuild.status
+++ b/pkg/pkgbuild.status
@@ -5,6 +5,7 @@
third_party/pkg/route_hierarchical: Fail
samples/third_party/angular_todo: Pass, Slow
+samples/third_party/dromaeo: Pass, Slow
samples/third_party/pop-pop-win: Pass, Slow
samples/searchable_list: Pass, Slow
pkg/docgen: Pass, Slow
diff --git a/pkg/polymer/lib/src/build/import_inliner.dart b/pkg/polymer/lib/src/build/import_inliner.dart
index f7bf7ea..abaa275 100644
--- a/pkg/polymer/lib/src/build/import_inliner.dart
+++ b/pkg/polymer/lib/src/build/import_inliner.dart
@@ -318,7 +318,8 @@
var uri = directive.uri.stringValue;
var span = _getSpan(file, directive.uri);
- var id = resolve(sourceId, uri, transform.logger, span);
+ var id = resolve(sourceId, uri, transform.logger, span,
+ allowAbsolute: true);
if (id == null) continue;
var primaryId = transform.primaryInput.id;
diff --git a/pkg/polymer/lib/src/build/linter.dart b/pkg/polymer/lib/src/build/linter.dart
index 06004eb..acd9c63 100644
--- a/pkg/polymer/lib/src/build/linter.dart
+++ b/pkg/polymer/lib/src/build/linter.dart
@@ -244,31 +244,13 @@
_inPolymerElement = oldValue;
}
- /// Produces warnings for malformed script tags. In html5 leaving off type= is
- /// fine, but it defaults to text/javascript. Because this might be a common
- /// error, we warn about it when src file ends in .dart, but the type is
- /// incorrect, or when users write code in an inline script tag of a custom
- /// element.
- ///
- /// The hope is that these cases shouldn't break existing valid code, but that
- /// they'll help Polymer authors avoid having their Dart code accidentally
- /// interpreted as JavaScript by the browser.
+ /// Checks for multiple Dart script tags in the same page, which is invalid.
void _validateScriptElement(Element node) {
var scriptType = node.attributes['type'];
var isDart = scriptType == 'application/dart';
var src = node.attributes['src'];
- if (scriptType == null) {
- if (src == null && _inPolymerElement) {
- // TODO(sigmund): revisit this check once we start interop with polymer
- // elements written in JS. Maybe we need to inspect the contents of the
- // script to find whether there is an import or something that indicates
- // that the code is indeed using Dart.
- _logger.warning('script tag in polymer element with no type will '
- 'be treated as JavaScript. Did you forget type="application/dart"?',
- span: node.sourceSpan);
- }
- } else if (isDart) {
+ if (isDart) {
if (_dartTagSeen) {
_logger.warning('Only one "application/dart" script tag per document '
'is allowed.', span: node.sourceSpan);
diff --git a/pkg/polymer/pubspec.yaml b/pkg/polymer/pubspec.yaml
index 05f6f56..d9d226f 100644
--- a/pkg/polymer/pubspec.yaml
+++ b/pkg/polymer/pubspec.yaml
@@ -1,5 +1,5 @@
name: polymer
-version: 0.10.0-pre.1
+version: 0.10.0-pre.2
author: Polymer.dart Authors <web-ui-dev@dartlang.org>
description: >
Polymer.dart is a new type of library for the web, built on top of Web
@@ -7,7 +7,7 @@
browsers.
homepage: https://www.dartlang.org/polymer-dart/
dependencies:
- analyzer: "0.13.0-dev.4"
+ analyzer: "0.13.0-dev.6"
args: ">=0.10.0 <0.11.0"
barback: ">=0.9.0 <0.13.0"
browser: ">=0.10.0 <0.11.0"
diff --git a/pkg/polymer/test/build/all_phases_test.dart b/pkg/polymer/test/build/all_phases_test.dart
index 57d0e6d..b30b428 100644
--- a/pkg/polymer/test/build/all_phases_test.dart
+++ b/pkg/polymer/test/build/all_phases_test.dart
@@ -17,9 +17,13 @@
testPhases('no changes', phases, {
'a|web/test.html': '<!DOCTYPE html><html></html>',
- }, {
- 'a|web/test.html': '<!DOCTYPE html><html></html>',
- });
+ }, {}, [
+ 'error: To run a polymer application, you need to call "initPolymer". You'
+ ' can either include a generic script tag that does this for you:\'<'
+ '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.'
+ ]);
testPhases('observable changes', phases, {
'a|web/test.dart': _sampleObservable('A', 'foo'),
@@ -146,7 +150,7 @@
'a|web/b.dart': _sampleObservable('B', 'bar'),
'a|web/test2.html':
'<!DOCTYPE html><html><head></head><body>'
- '<polymer-element>1'
+ '<polymer-element name="x-a">1'
'<script type="application/dart">'
'${_sampleObservable("A", "foo")}</script>'
'</polymer-element></html>',
@@ -155,7 +159,7 @@
'<!DOCTYPE html><html><head>'
'$WEB_COMPONENTS_TAG'
'$INTEROP_TAG'
- '</head><body><polymer-element>1</polymer-element>'
+ '</head><body><polymer-element name="x-a">1</polymer-element>'
'<script src="index.html_bootstrap.dart.js"></script>'
'</body></html>',
'a|web/index.html_bootstrap.dart':
diff --git a/pkg/polymer/test/build/import_inliner_test.dart b/pkg/polymer/test/build/import_inliner_test.dart
index 6efca44..7db7e4f 100644
--- a/pkg/polymer/test/build/import_inliner_test.dart
+++ b/pkg/polymer/test/build/import_inliner_test.dart
@@ -617,7 +617,7 @@
'<link rel="stylesheet" href="assets/b/test3.css">'
'</polymer-element>',
'b|asset/test3.css':
- 'body {\n background: #eaeaea url("assets/b/test4.png");\n}\n'
+ 'body {\n background: #eaeaea url("../../assets/b/test4.png");\n}\n'
'.foo {\n background: url("../../packages/c/test5.png");\n}',
'b|asset/test4.png': 'PNG',
'c|lib/test5.png': 'PNG',
@@ -641,7 +641,7 @@
'</polymer-element>'
'</body></html>',
'b|asset/test3.css':
- 'body {\n background: #eaeaea url("assets/b/test4.png");\n}\n'
+ 'body {\n background: #eaeaea url("../../assets/b/test4.png");\n}\n'
'.foo {\n background: url("../../packages/c/test5.png");\n}',
'b|asset/test4.png': 'PNG',
'c|lib/test5.png': 'PNG',
diff --git a/pkg/polymer/test/build/linter_test.dart b/pkg/polymer/test/build/linter_test.dart
index 4894b55..e302915 100644
--- a/pkg/polymer/test/build/linter_test.dart
+++ b/pkg/polymer/test/build/linter_test.dart
@@ -256,11 +256,7 @@
<script>foo...</script>
</polymer-element>
</html>'''.replaceAll(' ', ''),
- }, [
- 'warning: script tag in polymer element with no type will '
- 'be treated as JavaScript. Did you forget type="application/dart"?'
- ' (lib/test.html 2 0)'
- ]);
+ }, []);
_testLinter('top-level, dart type & .dart url', {
'a|lib/test.html': '''<html>
@@ -464,6 +460,8 @@
_testLinter(String name, Map inputFiles, List outputMessages) {
var linter = new Linter(new TransformOptions());
var outputFiles = {};
- inputFiles.forEach((k, v) => outputFiles[k] = v);
+ if (outputMessages.every((m) => m.startsWith('warning:'))) {
+ inputFiles.forEach((k, v) => outputFiles[k] = v);
+ }
testPhases(name, [[linter]], inputFiles, outputFiles, outputMessages);
}
diff --git a/pkg/scheduled_test/CHANGELOG.md b/pkg/scheduled_test/CHANGELOG.md
index 9597c4d..199b543 100644
--- a/pkg/scheduled_test/CHANGELOG.md
+++ b/pkg/scheduled_test/CHANGELOG.md
@@ -1,3 +1,10 @@
+## 0.10.1
+
+* Add a `StreamMatcher.hasMatch` method.
+
+* The `consumeThrough` and `consumeWhile` matchers for `ScheduledStream` now
+ take `StreamMatcher`s as well as normal `Matcher`s.
+
## 0.10.0
* Convert `ScheduledProcess` to expose `stdout` and `stderr` as
diff --git a/pkg/scheduled_test/lib/src/stream_matcher.dart b/pkg/scheduled_test/lib/src/stream_matcher.dart
index f230e10..b5bce1d 100644
--- a/pkg/scheduled_test/lib/src/stream_matcher.dart
+++ b/pkg/scheduled_test/lib/src/stream_matcher.dart
@@ -23,12 +23,24 @@
factory StreamMatcher.wrap(matcher) =>
matcher is StreamMatcher ? matcher : nextValue(matcher);
+ StreamMatcher();
+
/// Tries to match [this] against [stream].
///
/// If the match succeeds, this returns `null`. If it fails, this returns a
/// [Description] describing the failure.
Future<Description> tryMatch(ScheduledStream stream);
+ /// Returns whether [this] would match [stream] without actually consuming
+ /// values from [stream].
+ ///
+ /// If the match succeeds, this returns `null`. If it fails, this returns a
+ /// [Description] describing the failure.
+ Future<Description> hasMatch(ScheduledStream stream) {
+ var fork = stream.fork();
+ return tryMatch(fork).whenComplete(fork.close);
+ }
+
String toString();
}
@@ -57,20 +69,25 @@
}
/// A matcher that consumes values emitted by a stream until one matching
-/// [matcher] is emitted.
+/// [streamMatcher] is emitted.
///
-/// This will fail if the stream never emits a value that matches [matcher].
+/// This will fail if the stream never emits a value that matches
+/// [streamMatcher].
///
-/// [matcher] can be a [Matcher] or an [Object], but not a [StreamMatcher].
-StreamMatcher consumeThrough(matcher) => new _ConsumeThroughMatcher(matcher);
+/// [streamMatcher] can be a [StreamMatcher], a [Matcher] or an [Object].
+StreamMatcher consumeThrough(streamMatcher) =>
+ new _ConsumeThroughMatcher(streamMatcher);
/// A matcher that consumes values emitted by a stream as long as they match
-/// [matcher].
+/// [streamMatcher].
///
-/// This matcher will always match a stream. It exists to consume values.
+/// This matcher will always match a stream. It exists to consume values. If
+/// [streamMatcher] consumes more than one value, the next match will begin
+/// after all the consumed values.
///
-/// [matcher] can be a [Matcher] or an [Object], but not a [StreamMatcher].
-StreamMatcher consumeWhile(matcher) => new _ConsumeWhileMatcher(matcher);
+/// [streamMatcher] can be a [StreamMatcher], a [Matcher] or an [Object].
+StreamMatcher consumeWhile(streamMatcher) =>
+ new _ConsumeWhileMatcher(streamMatcher);
/// A matcher that matches either [streamMatcher1], [streamMatcher2], or both.
///
@@ -102,7 +119,7 @@
StreamMatcher get isDone => new _IsDoneMatcher();
/// See [nextValue].
-class _NextValueMatcher implements StreamMatcher {
+class _NextValueMatcher extends StreamMatcher {
final Matcher _matcher;
_NextValueMatcher(matcher)
@@ -126,7 +143,7 @@
}
/// See [nextValues].
-class _NextValuesMatcher implements StreamMatcher {
+class _NextValuesMatcher extends StreamMatcher {
final int _n;
final Matcher _matcher;
@@ -165,7 +182,7 @@
}
/// See [inOrder].
-class _InOrderMatcher implements StreamMatcher {
+class _InOrderMatcher extends StreamMatcher {
final List<StreamMatcher> _matchers;
_InOrderMatcher(Iterable streamMatchers)
@@ -196,20 +213,20 @@
}
/// See [consumeThrough].
-class _ConsumeThroughMatcher implements StreamMatcher {
- final Matcher _matcher;
+class _ConsumeThroughMatcher extends StreamMatcher {
+ final StreamMatcher _matcher;
- _ConsumeThroughMatcher(matcher)
- : _matcher = wrapMatcher(matcher);
+ _ConsumeThroughMatcher(streamMatcher)
+ : _matcher = new StreamMatcher.wrap(streamMatcher);
Future<Description> tryMatch(ScheduledStream stream) {
consumeNext() {
return stream.hasNext.then((hasNext) {
if (!hasNext) return new StringDescription("unexpected end of stream");
- return stream.next().then((value) {
- if (_matcher.matches(value, {})) return null;
- return consumeNext();
+ return _matcher.hasMatch(stream).then((failure) {
+ if (failure != null) return stream.next().then((_) => consumeNext());
+ return _matcher.tryMatch(stream);
});
});
}
@@ -218,26 +235,30 @@
}
String toString() {
- return new StringDescription('values followed by ')
- .addDescriptionOf(_matcher).toString();
+ var matcherString = _matcher.toString();
+ if (matcherString.contains("\n")) {
+ return 'values followed by:\n' + prefixLines(matcherString, prefix: ' ');
+ } else {
+ return 'values followed by $matcherString';
+ }
}
}
/// See [consumeWhile].
-class _ConsumeWhileMatcher implements StreamMatcher {
- final Matcher _matcher;
+class _ConsumeWhileMatcher extends StreamMatcher {
+ final StreamMatcher _matcher;
_ConsumeWhileMatcher(matcher)
- : _matcher = wrapMatcher(matcher);
+ : _matcher = new StreamMatcher.wrap(matcher);
Future<Description> tryMatch(ScheduledStream stream) {
consumeNext() {
return stream.hasNext.then((hasNext) {
if (!hasNext) return new Future.value();
- return _peek(stream).then((value) {
- if (!_matcher.matches(value, {})) return null;
- return stream.next().then((_) => consumeNext());
+ return _matcher.hasMatch(stream).then((failure) {
+ if (failure != null) return new Future.value();
+ return _matcher.tryMatch(stream).then((_) => consumeNext());
});
});
}
@@ -246,13 +267,17 @@
}
String toString() {
- return new StringDescription('any number of ')
- .addDescriptionOf(_matcher).toString();
+ var matcherString = _matcher.toString();
+ if (matcherString.contains("\n")) {
+ return 'any number of\n' + prefixLines(matcherString, prefix: ' ');
+ } else {
+ return 'any number of $matcherString';
+ }
}
}
/// See [either].
-class _EitherMatcher implements StreamMatcher {
+class _EitherMatcher extends StreamMatcher {
final StreamMatcher _matcher1;
final StreamMatcher _matcher2;
@@ -302,15 +327,14 @@
}
/// See [allow].
-class _AllowMatcher implements StreamMatcher {
+class _AllowMatcher extends StreamMatcher {
final StreamMatcher _matcher;
_AllowMatcher(streamMatcher)
: _matcher = new StreamMatcher.wrap(streamMatcher);
Future<Description> tryMatch(ScheduledStream stream) {
- var fork = stream.fork();
- return _matcher.tryMatch(fork).whenComplete(fork.close).then((failure) {
+ return _matcher.hasMatch(stream).then((failure) {
if (failure != null) return null;
return _matcher.tryMatch(stream);
});
@@ -324,20 +348,18 @@
}
/// See [never].
-class _NeverMatcher implements StreamMatcher {
+class _NeverMatcher extends StreamMatcher {
final StreamMatcher _matcher;
_NeverMatcher(streamMatcher)
- : _matcher = new StreamMatcher.wrap(streamMatcher);
+ : _matcher = new StreamMatcher.wrap(streamMatcher);
Future<Description> tryMatch(ScheduledStream stream) {
consumeNext() {
return stream.hasNext.then((hasNext) {
if (!hasNext) return new Future.value();
- var fork = stream.fork();
- return _matcher.tryMatch(fork).whenComplete(fork.close)
- .then((failure) {
+ return _matcher.hasMatch(stream).then((failure) {
if (failure != null) {
return stream.next().then((_) => consumeNext());
}
@@ -356,7 +378,7 @@
}
/// See [isDone].
-class _IsDoneMatcher implements StreamMatcher {
+class _IsDoneMatcher extends StreamMatcher {
_IsDoneMatcher();
Future<Description> tryMatch(ScheduledStream stream) {
diff --git a/pkg/scheduled_test/pubspec.yaml b/pkg/scheduled_test/pubspec.yaml
index 53f74f7..55fea14 100644
--- a/pkg/scheduled_test/pubspec.yaml
+++ b/pkg/scheduled_test/pubspec.yaml
@@ -1,5 +1,5 @@
name: scheduled_test
-version: 0.10.0
+version: 0.10.1
author: "Dart Team <misc@dartlang.org>"
homepage: http://www.dartlang.org
description: >
diff --git a/pkg/scheduled_test/test/scheduled_stream/stream_matcher_test.dart b/pkg/scheduled_test/test/scheduled_stream/stream_matcher_test.dart
index 93c6b43..d712744 100644
--- a/pkg/scheduled_test/test/scheduled_stream/stream_matcher_test.dart
+++ b/pkg/scheduled_test/test/scheduled_stream/stream_matcher_test.dart
@@ -183,23 +183,25 @@
expectTestPasses("consumeThrough() consumes values through the given matcher",
() {
var stream = createStream();
- stream.expect(consumeThrough(greaterThan(2)));
+ stream.expect(consumeThrough(inOrder([2, 3])));
stream.expect(4);
});
expectTestPasses("consumeThrough() will stop if the first value matches", () {
var stream = createStream();
- stream.expect(consumeThrough(1));
- stream.expect(2);
+ stream.expect(consumeThrough(inOrder([1, 2])));
+ stream.expect(3);
});
expectTestFails("consumeThrough() will fail if the stream ends before the "
"value is reached", () {
- createStream().expect(consumeThrough(100));
+ createStream().expect(consumeThrough(inOrder([5, 6])));
}, (errors) {
expect(errors, hasLength(1));
expect(errors.first.error.message, equals(
- "Expected: values followed by <100>\n"
+ "Expected: values followed by:\n"
+ " | * <5>\n"
+ " | * <6>\n"
" Emitted: * 1\n"
" * 2\n"
" * 3\n"
@@ -215,10 +217,16 @@
stream.expect(4);
});
+ expectTestPasses("consumeWhile() consumes values in chunks", () {
+ var stream = createStream();
+ stream.expect(consumeWhile(inOrder([anything, anything])));
+ stream.expect(5);
+ });
+
expectTestPasses("consumeWhile() will stop if the first value doesn't match",
() {
var stream = createStream();
- stream.expect(consumeWhile(2));
+ stream.expect(consumeWhile(inOrder([2, 3])));
stream.expect(1);
});
diff --git a/pkg/unittest/lib/src/spread_args_helper.dart b/pkg/unittest/lib/src/spread_args_helper.dart
index 41411b9..b3021eb 100644
--- a/pkg/unittest/lib/src/spread_args_helper.dart
+++ b/pkg/unittest/lib/src/spread_args_helper.dart
@@ -1,5 +1,12 @@
part of unittest;
+const _PLACE_HOLDER = const _ArgPlaceHolder();
+
+/// Used to track unused positional args.
+class _ArgPlaceHolder {
+ const _ArgPlaceHolder();
+}
+
/** Simulates spread arguments using named arguments. */
// TODO(sigmund): remove this class and simply use a closure with named
// arguments (if still applicable).
@@ -14,7 +21,7 @@
bool complete;
_SpreadArgsHelper(Function callback, int minExpected, int maxExpected,
- Function isDone, String id)
+ String id, {bool isDone()})
: this.callback = callback,
minExpectedCalls = minExpected,
maxExpectedCalls = (maxExpected == 0 && minExpected > 0)
@@ -90,31 +97,49 @@
}
}
- invoke0() {
- return _guardAsync(
- () {
- if (shouldCallBack()) {
- return callback();
- }
- },
- after, testCase);
+ /// Returns a function that has as many required + positional arguments as
+ /// [callback] (up to a total of 6).
+ ///
+ /// Optional positional arguments are supported by using const place-holders
+ Function get func {
+ if (callback is _Func6) return _max6;
+ if (callback is _Func5) return _max5;
+ if (callback is _Func4) return _max4;
+ if (callback is _Func3) return _max3;
+ if (callback is _Func2) return _max2;
+ if (callback is _Func1) return _max1;
+ if (callback is _Func0) return _max0;
+
+ throw new ArgumentError(
+ 'The callback argument has more than 6 required arguments');
}
- invoke1(arg1) {
- return _guardAsync(
- () {
- if (shouldCallBack()) {
- return callback(arg1);
- }
- },
- after, testCase);
- }
+ /// This indirection is critical. It ensures the returned function has an
+ /// argument count of zero.
+ _max0() => _max6();
- invoke2(arg1, arg2) {
+ _max1([a0 = _PLACE_HOLDER]) => _max6(a0);
+
+ _max2([a0 = _PLACE_HOLDER, a1 = _PLACE_HOLDER]) => _max6(a0, a1);
+
+ _max3([a0 = _PLACE_HOLDER, a1 = _PLACE_HOLDER, a2 = _PLACE_HOLDER]) =>
+ _max6(a0, a1, a2);
+
+ _max4([a0 = _PLACE_HOLDER, a1 = _PLACE_HOLDER, a2 = _PLACE_HOLDER,
+ a3 = _PLACE_HOLDER]) => _max6(a0, a1, a2, a3);
+
+ _max5([a0 = _PLACE_HOLDER, a1 = _PLACE_HOLDER, a2 = _PLACE_HOLDER,
+ a3 = _PLACE_HOLDER, a4 = _PLACE_HOLDER]) => _max6(a0, a1, a2, a3, a4);
+
+ _max6([a0 = _PLACE_HOLDER, a1 = _PLACE_HOLDER, a2 = _PLACE_HOLDER,
+ a3 = _PLACE_HOLDER, a4 = _PLACE_HOLDER, a5 = _PLACE_HOLDER]) {
+ var args = [a0, a1, a2, a3, a4, a5];
+ args.removeWhere((a) => a == _PLACE_HOLDER);
+
return _guardAsync(
() {
if (shouldCallBack()) {
- return callback(arg1, arg2);
+ return Function.apply(callback, args);
}
},
after, testCase);
@@ -131,3 +156,11 @@
}
}
}
+
+typedef _Func0();
+typedef _Func1(a);
+typedef _Func2(a, b);
+typedef _Func3(a, b, c);
+typedef _Func4(a, b, c, d);
+typedef _Func5(a, b, c, d, e);
+typedef _Func6(a, b, c, d, e, f);
diff --git a/pkg/unittest/lib/unittest.dart b/pkg/unittest/lib/unittest.dart
index da95fae..9add42c 100644
--- a/pkg/unittest/lib/unittest.dart
+++ b/pkg/unittest/lib/unittest.dart
@@ -325,22 +325,8 @@
* bound.
*/
Function expectAsync(Function callback,
- {int count: 1, int max: 0, String id}) {
- var minArgs = _minArgs(callback);
-
- switch(minArgs) {
- case 0:
- return new _SpreadArgsHelper(callback, count, max, null, id).invoke0;
- case 1:
- return new _SpreadArgsHelper(callback, count, max, null, id).invoke1;
- case 2:
- return new _SpreadArgsHelper(callback, count, max, null, id).invoke2;
- default:
- // _minArgs throws an argument exception if the arg count is > 2.
- // this is just for paranoia
- throw new StateError('Should never get here');
- }
-}
+ {int count: 1, int max: 0, String id}) =>
+ new _SpreadArgsHelper(callback, count, max, id).func;
/**
* *Deprecated*
@@ -382,22 +368,8 @@
* identify the callback in error messages (for example if it is called
* after the test case is complete).
*/
-Function expectAsyncUntil(Function callback, Function isDone, {String id}) {
- var minArgs = _minArgs(callback);
-
- switch(minArgs) {
- case 0:
- return new _SpreadArgsHelper(callback, 0, -1, isDone, id).invoke0;
- case 1:
- return new _SpreadArgsHelper(callback, 0, -1, isDone, id).invoke1;
- case 2:
- return new _SpreadArgsHelper(callback, 0, -1, isDone, id).invoke2;
- default:
- // _minArgs throws an argument exception if the arg count is > 2.
- // this is just for paranoia
- throw new StateError('Should never get here');
- }
-}
+Function expectAsyncUntil(Function callback, bool isDone(), {String id}) =>
+ new _SpreadArgsHelper(callback, 0, -1, id, isDone: isDone).func;
/**
* *Deprecated*
@@ -770,18 +742,3 @@
return frame.package != 'unittest' || frame.member != 'TestCase._runTest';
})).terse.foldFrames((frame) => frame.package == 'unittest' || frame.isCore);
}
-
-typedef _Func0();
-typedef _Func1(a);
-typedef _Func2(a, b);
-
-/**
- * Throws an [ArgumentError] if the callback has more than 2 required arguments.
- */
-int _minArgs(Function callback) {
- if (callback is _Func0) return 0;
- if (callback is _Func1) return 1;
- if (callback is _Func2) return 2;
- throw new ArgumentError(
- 'The callback argument has more than 2 required arguments.');
-}
diff --git a/pkg/unittest/test/missing_tick_test.dart b/pkg/unittest/test/missing_tick_test.dart
index 92ab891..19c5b89 100644
--- a/pkg/unittest/test/missing_tick_test.dart
+++ b/pkg/unittest/test/missing_tick_test.dart
@@ -10,7 +10,7 @@
config.timeout = const Duration(seconds: 2);
group('Broken', () {
test('test that should time out', () {
- expectAsync0(() {});
+ expectAsync(() {});
});
});
}
diff --git a/pkg/unittest/test/test_utils.dart b/pkg/unittest/test/test_utils.dart
index de783be..783f71b 100644
--- a/pkg/unittest/test/test_utils.dart
+++ b/pkg/unittest/test/test_utils.dart
@@ -36,7 +36,7 @@
if (expected is String) {
expect(errorString, equalsIgnoringWhitespace(expected));
} else {
- expect(errorString.replaceAll('\n',''), expected);
+ expect(errorString.replaceAll('\n', ''), expected);
}
}
diff --git a/pkg/unittest/test/unittest_async_exception_test.dart b/pkg/unittest/test/unittest_async_exception_test.dart
index 34298b7..cc35116 100644
--- a/pkg/unittest/test/unittest_async_exception_test.dart
+++ b/pkg/unittest/test/unittest_async_exception_test.dart
@@ -13,8 +13,8 @@
var testFunction = (_) {
test(testName, () {
- expectAsync0(() {});
- _defer(() => guardAsync(() { throw "error!"; }));
+ expectAsync(() {});
+ _defer(() { throw "error!"; });
});
};
diff --git a/pkg/unittest/test/unittest_async_setup_teardown_test.dart b/pkg/unittest/test/unittest_async_setup_teardown_test.dart
index a73efc8..067dbf9 100644
--- a/pkg/unittest/test/unittest_async_setup_teardown_test.dart
+++ b/pkg/unittest/test/unittest_async_setup_teardown_test.dart
@@ -19,7 +19,7 @@
tearDown(() {
return new Future.value(0);
});
- test('foo1', (){});
+ test('foo1', () {});
});
group('good setup/bad teardown', () {
setUp(() {
@@ -28,7 +28,7 @@
tearDown(() {
return new Future.error("Failed to complete tearDown");
});
- test('foo2', (){});
+ test('foo2', () {});
});
group('bad setup/good teardown', () {
setUp(() {
@@ -37,7 +37,7 @@
tearDown(() {
return new Future.value(0);
});
- test('foo3', (){});
+ test('foo3', () {});
});
group('bad setup/bad teardown', () {
setUp(() {
@@ -46,7 +46,7 @@
tearDown(() {
return new Future.error("Failed to complete tearDown");
});
- test('foo4', (){});
+ test('foo4', () {});
});
// The next test is just to make sure we make steady progress
// through the tests.
diff --git a/pkg/unittest/test/unittest_completion_test.dart b/pkg/unittest/test/unittest_completion_test.dart
index 843f9d0..037dee1 100644
--- a/pkg/unittest/test/unittest_completion_test.dart
+++ b/pkg/unittest/test/unittest_completion_test.dart
@@ -14,7 +14,7 @@
var testFunction = (TestConfiguration testConfig) {
test(testName, () {
var _callback;
- _callback = expectAsyncUntil0(() {
+ _callback = expectAsyncUntil(() {
if (++testConfig.count < 10) {
_defer(_callback);
}
diff --git a/pkg/unittest/test/unittest_correct_callback_test.dart b/pkg/unittest/test/unittest_correct_callback_test.dart
index cd52ba0..43b40ea 100644
--- a/pkg/unittest/test/unittest_correct_callback_test.dart
+++ b/pkg/unittest/test/unittest_correct_callback_test.dart
@@ -13,7 +13,7 @@
var testFunction = (TestConfiguration testConfig) {
test(testName,
- () =>_defer(expectAsync0((){ ++testConfig.count;})));
+ () =>_defer(expectAsync((){ ++testConfig.count;})));
};
var expected = buildStatusString(1, 0, 0, testName, count: 1);
diff --git a/pkg/unittest/test/unittest_excess_callback_test.dart b/pkg/unittest/test/unittest_excess_callback_test.dart
index f3876b5..76a3a9e 100644
--- a/pkg/unittest/test/unittest_excess_callback_test.dart
+++ b/pkg/unittest/test/unittest_excess_callback_test.dart
@@ -13,9 +13,9 @@
var testFunction = (TestConfiguration testConfig) {
test(testName, () {
- var _callback0 = expectAsync0(() => ++testConfig.count);
- var _callback1 = expectAsync0(() => ++testConfig.count);
- var _callback2 = expectAsync0(() {
+ var _callback0 = expectAsync(() => ++testConfig.count);
+ var _callback1 = expectAsync(() => ++testConfig.count);
+ var _callback2 = expectAsync(() {
_callback1();
_callback1();
_callback0();
diff --git a/pkg/unittest/test/unittest_expect_async_args_test.dart b/pkg/unittest/test/unittest_expect_async_args_test.dart
new file mode 100644
index 0000000..0fd7517
--- /dev/null
+++ b/pkg/unittest/test/unittest_expect_async_args_test.dart
@@ -0,0 +1,37 @@
+// 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 unittestTest;
+
+import 'dart:isolate';
+import 'dart:async';
+import 'package:unittest/unittest.dart';
+
+part 'unittest_test_utils.dart';
+
+var testFunction = (TestConfiguration testConfig) {
+ List<int> _getArgs([a = 0, b = 0, c = 0, d = 0, e = 0, f = 0]) {
+ testConfig.count++;
+ return [a, b, c, d, e, f];
+ }
+
+ test('expect async args', () {
+ expect(expectAsync(_getArgs)(), [0, 0, 0, 0, 0, 0]);
+ expect(expectAsync(_getArgs)(5), [5, 0, 0, 0, 0, 0]);
+ expect(expectAsync(_getArgs)(1, 2, 3, 4, 5, 6), [1, 2, 3, 4, 5, 6]);
+ });
+
+ test('invoked with too many args', () {
+ expectAsync(_getArgs)(1, 2, 3, 4, 5, 6, 7);
+ });
+
+ test('created with too many args', () {
+ expectAsync((a1, a2, a3, a4, a5, a6, a7) {
+ testConfig.count++;
+ })();
+ });
+};
+
+final expected = startsWith('1:0:2:3:3:::null:expect async args::'
+ 'invoked with too many args:Test failed:');
diff --git a/pkg/unittest/test/unittest_expect_async_test.dart b/pkg/unittest/test/unittest_expect_async_test.dart
new file mode 100644
index 0000000..a8bbde5
--- /dev/null
+++ b/pkg/unittest/test/unittest_expect_async_test.dart
@@ -0,0 +1,95 @@
+// 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 unittestTest;
+import 'dart:isolate';
+import 'dart:async';
+import 'package:unittest/unittest.dart';
+
+part 'unittest_test_utils.dart';
+
+var testFunction = (TestConfiguration testConfig) {
+ test('expectAsync zero params', () {
+ _defer(expectAsync(() {
+ ++testConfig.count;
+ }));
+ });
+
+ test('expectAsync 1 param', () {
+ var func = expectAsync((arg) {
+ expect(arg, 0);
+ ++testConfig.count;
+ });
+ _defer(() => func(0));
+ });
+
+ test('expectAsync 2 param', () {
+ var func = expectAsync((arg0, arg1) {
+ expect(arg0, 0);
+ expect(arg1, 1);
+ ++testConfig.count;
+ });
+ _defer(() => func(0, 1));
+ });
+
+ test('single arg to Future.catchError', () {
+ var func = expectAsync((error) {
+ expect(error, isStateError);
+ ++testConfig.count;
+ });
+
+ new Future(() {
+ throw new StateError('test');
+ }).catchError(func);
+ });
+
+ test('2 args to Future.catchError', () {
+ var func = expectAsync((error, stack) {
+ expect(error, isStateError);
+ expect(stack is StackTrace, isTrue);
+ ++testConfig.count;
+ });
+
+ new Future(() {
+ throw new StateError('test');
+ }).catchError(func);
+ });
+
+ test('zero of two optional positional args', () {
+ var func = expectAsync(([arg0 = true, arg1 = true]) {
+ expect(arg0, isTrue);
+ expect(arg1, isTrue);
+ ++testConfig.count;
+ });
+
+ _defer(() => func());
+ });
+
+ test('one of two optional positional args', () {
+ var func = expectAsync(([arg0 = true, arg1 = true]) {
+ expect(arg0, isFalse);
+ expect(arg1, isTrue);
+ ++testConfig.count;
+ });
+
+ _defer(() => func(false));
+ });
+
+ test('two of two optional positional args', () {
+ var func = expectAsync(([arg0 = true, arg1 = true]) {
+ expect(arg0, isFalse);
+ expect(arg1, isNull);
+ ++testConfig.count;
+ });
+
+ _defer(() => func(false, null));
+ });
+};
+
+final expected = '8:0:0:8:8:::null:expectAsync zero params:'
+ ':expectAsync 1 param::expectAsync 2 param:'
+ ':single arg to Future.catchError::2 args to Future.catchError:'
+ ':zero of two optional positional args:'
+ ':one of two optional positional args:'
+ ':two of two optional positional args:';
diff --git a/pkg/unittest/test/unittest_late_exception_test.dart b/pkg/unittest/test/unittest_late_exception_test.dart
index 7a5c3e6..c80de12 100644
--- a/pkg/unittest/test/unittest_late_exception_test.dart
+++ b/pkg/unittest/test/unittest_late_exception_test.dart
@@ -14,11 +14,11 @@
var testFunction = (_) {
var f;
test('testOne', () {
- f = expectAsync0(() {});
+ f = expectAsync(() {});
_defer(f);
});
test('testTwo', () {
- _defer(expectAsync0(() { f(); }));
+ _defer(expectAsync(() { f(); }));
});
};
diff --git a/pkg/unittest/test/unittest_middle_exception_test.dart b/pkg/unittest/test/unittest_middle_exception_test.dart
index d405500..ba77514 100644
--- a/pkg/unittest/test/unittest_middle_exception_test.dart
+++ b/pkg/unittest/test/unittest_middle_exception_test.dart
@@ -15,7 +15,7 @@
test('testOne', () { expect(true, isTrue); });
test('testTwo', () { expect(true, isFalse); });
test('testThree', () {
- var done = expectAsync0((){});
+ var done = expectAsync(() {});
_defer(() {
expect(true, isTrue);
done();
diff --git a/pkg/unittest/test/unittest_protect_async_test.dart b/pkg/unittest/test/unittest_protect_async_test.dart
index 12ded3c..15d3394 100644
--- a/pkg/unittest/test/unittest_protect_async_test.dart
+++ b/pkg/unittest/test/unittest_protect_async_test.dart
@@ -11,23 +11,23 @@
var testFunction = (_) {
test('protectAsync0', () {
- var protected = protectAsync0(() {
+ var protected = () {
throw new StateError('error during protectAsync0');
- });
+ };
new Future(protected);
});
test('protectAsync1', () {
- var protected = protectAsync1((arg) {
+ var protected = (arg) {
throw new StateError('error during protectAsync1: $arg');
- });
+ };
new Future(() => protected('one arg'));
});
test('protectAsync2', () {
- var protected = protectAsync2((arg1, arg2) {
+ var protected = (arg1, arg2) {
throw new StateError('error during protectAsync2: $arg1, $arg2');
- });
+ };
new Future(() => protected('arg1', 'arg2'));
});
diff --git a/pkg/unittest/test/unittest_test_returning_future_test.dart b/pkg/unittest/test/unittest_test_returning_future_test.dart
index a74a8db..83c4a5d 100644
--- a/pkg/unittest/test/unittest_test_returning_future_test.dart
+++ b/pkg/unittest/test/unittest_test_returning_future_test.dart
@@ -21,8 +21,8 @@
// I had a situation where either worked fine on their own, and
// error/fail worked, but fail/error would time out.
test("error1", () {
- var callback = expectAsync0((){});
- var excesscallback = expectAsync0((){});
+ var callback = expectAsync(() {});
+ var excesscallback = expectAsync(() {});
return _defer(() {
excesscallback();
excesscallback();
@@ -36,8 +36,8 @@
});
});
test("error2", () {
- var callback = expectAsync0((){});
- var excesscallback = expectAsync0((){});
+ var callback = expectAsync(() {});
+ var excesscallback = expectAsync(() {});
return _defer(() {
excesscallback();
excesscallback();
diff --git a/pkg/unittest/test/unittest_test_returning_future_using_runasync_test.dart b/pkg/unittest/test/unittest_test_returning_future_using_runasync_test.dart
index 98f276b..e5fc304 100644
--- a/pkg/unittest/test/unittest_test_returning_future_using_runasync_test.dart
+++ b/pkg/unittest/test/unittest_test_returning_future_using_runasync_test.dart
@@ -15,58 +15,48 @@
test("successful", () {
return _defer(() {
scheduleMicrotask(() {
- guardAsync(() {
- expect(true, true);
- });
+ expect(true, true);
});
});
});
test("fail1", () {
- var callback = expectAsync0((){});
+ var callback = expectAsync(() {});
return _defer(() {
scheduleMicrotask(() {
- guardAsync(() {
- expect(true, false);
- callback();
- });
+ expect(true, false);
+ callback();
});
});
});
test('error1', () {
- var callback = expectAsync0((){});
- var excesscallback = expectAsync0((){});
+ var callback = expectAsync(() {});
+ var excesscallback = expectAsync(() {});
return _defer(() {
scheduleMicrotask(() {
- guardAsync(() {
- excesscallback();
- excesscallback();
- callback();
- });
+ excesscallback();
+ excesscallback();
+ callback();
});
});
});
test("fail2", () {
- var callback = expectAsync0((){});
+ var callback = expectAsync(() {});
return _defer(() {
scheduleMicrotask(() {
- guardAsync(() {
- fail('failure');
- callback();
- });
+ fail('failure');
+ callback();
});
});
});
test('error2', () {
- var callback = expectAsync0((){});
- var excesscallback = expectAsync0((){});
+ var callback = expectAsync(() {});
+ var excesscallback = expectAsync(() {});
return _defer(() {
scheduleMicrotask(() {
- guardAsync(() {
- excesscallback();
- excesscallback();
- excesscallback();
- callback();
- });
+ excesscallback();
+ excesscallback();
+ excesscallback();
+ callback();
});
});
});
diff --git a/pkg/unittest/test/unittest_test_utils.dart b/pkg/unittest/test/unittest_test_utils.dart
index adb9823..8385a1b 100644
--- a/pkg/unittest/test/unittest_test_utils.dart
+++ b/pkg/unittest/test/unittest_test_utils.dart
@@ -16,7 +16,7 @@
String message: ''}) {
var totalTests = 0;
var testDetails = new StringBuffer();
- if(results == null) {
+ if (results == null) {
// no op
assert(message == '');
} else if (results is String) {
@@ -44,7 +44,7 @@
final SendPort _port;
String _result;
- TestConfiguration(this._port) : super.blank();
+ TestConfiguration(this._port): super.blank();
void onSummary(int passed, int failed, int errors, List<TestCase> results,
String uncaughtError) {
@@ -88,6 +88,6 @@
var replyPort = new ReceivePort();
Isolate.spawn(runTestInIsolate, replyPort.sendPort);
replyPort.first.then((String msg) {
- expect(msg.trim(), equals(expected));
+ expect(msg.trim(), expected);
});
}
diff --git a/runtime/bin/directory_patch.dart b/runtime/bin/directory_patch.dart
index f3d0dab..f8643ae 100644
--- a/runtime/bin/directory_patch.dart
+++ b/runtime/bin/directory_patch.dart
@@ -7,7 +7,7 @@
/* patch */ static _setCurrent(path) native "Directory_SetCurrent";
/* patch */ static _createTemp(String path) native "Directory_CreateTemp";
/* patch */ static String _systemTemp() native "Directory_SystemTemp";
- /* patch */ static int _exists(String path) native "Directory_Exists";
+ /* patch */ static _exists(String path) native "Directory_Exists";
/* patch */ static _create(String path) native "Directory_Create";
/* patch */ static _deleteNative(String path, bool recursive)
native "Directory_Delete";
diff --git a/runtime/bin/eventhandler.h b/runtime/bin/eventhandler.h
index 347d0e0..54845d0 100644
--- a/runtime/bin/eventhandler.h
+++ b/runtime/bin/eventhandler.h
@@ -7,7 +7,6 @@
#include "bin/builtin.h"
#include "bin/isolate_data.h"
-#include "bin/socket.h"
namespace dart {
namespace bin {
@@ -25,6 +24,7 @@
kCloseCommand = 8,
kShutdownReadCommand = 9,
kShutdownWriteCommand = 10,
+ kReturnTokenCommand = 11,
kListeningSocket = 16,
kPipe = 17,
};
@@ -108,7 +108,7 @@
class EventHandler {
public:
void SendData(intptr_t id, Dart_Port dart_port, int64_t data) {
- delegate_.Notify(id, dart_port, data);
+ delegate_.SendData(id, dart_port, data);
}
/**
diff --git a/runtime/bin/eventhandler_android.cc b/runtime/bin/eventhandler_android.cc
index 4d7cda3..ce5171a 100644
--- a/runtime/bin/eventhandler_android.cc
+++ b/runtime/bin/eventhandler_android.cc
@@ -40,26 +40,32 @@
static const int kShutdownId = -2;
+intptr_t SocketData::GetPollEvents() {
+ // Do not ask for EPOLLERR and EPOLLHUP explicitly as they are
+ // triggered anyway.
+ intptr_t events = EPOLLET | EPOLLRDHUP;
+ if ((mask_ & (1 << kInEvent)) != 0) {
+ events |= EPOLLIN;
+ }
+ if ((mask_ & (1 << kOutEvent)) != 0) {
+ events |= EPOLLOUT;
+ }
+ return events;
+}
+
+
// Unregister the file descriptor for a SocketData structure with epoll.
static void RemoveFromEpollInstance(intptr_t epoll_fd_, SocketData* sd) {
- if (!sd->tracked_by_epoll()) return;
- int status = TEMP_FAILURE_RETRY(epoll_ctl(epoll_fd_,
- EPOLL_CTL_DEL,
- sd->fd(),
- NULL));
- if (status == -1) {
- FATAL("Failed unregistering events for file descriptor");
- }
- sd->set_tracked_by_epoll(false);
+ VOID_TEMP_FAILURE_RETRY(epoll_ctl(epoll_fd_,
+ EPOLL_CTL_DEL,
+ sd->fd(),
+ NULL));
}
static void AddToEpollInstance(intptr_t epoll_fd_, SocketData* sd) {
- ASSERT(!sd->tracked_by_epoll());
struct epoll_event event;
- event.events = EPOLLET | EPOLLRDHUP;
- if ((sd->mask() & (1 << kInEvent)) != 0) event.events |= EPOLLIN;
- if ((sd->mask() & (1 << kOutEvent)) != 0) event.events |= EPOLLOUT;
+ event.events = sd->GetPollEvents();
event.data.ptr = sd;
int status = TEMP_FAILURE_RETRY(epoll_ctl(epoll_fd_,
EPOLL_CTL_ADD,
@@ -71,8 +77,6 @@
// as /dev/null. In such case, mark the file descriptor as closed,
// so dart will handle it accordingly.
DartUtils::PostInt32(sd->port(), 1 << kCloseEvent);
- } else {
- sd->set_tracked_by_epoll(true);
}
}
@@ -116,8 +120,7 @@
}
-SocketData* EventHandlerImplementation::GetSocketData(intptr_t fd,
- bool* is_new) {
+SocketData* EventHandlerImplementation::GetSocketData(intptr_t fd) {
ASSERT(fd >= 0);
HashMap::Entry* entry = socket_map_.Lookup(
GetHashmapKeyFromFd(fd), GetHashmapHashFromFd(fd), true);
@@ -128,7 +131,6 @@
// new SocketData for the file descriptor is inserted.
sd = new SocketData(fd);
entry->value = sd;
- *is_new = true;
}
ASSERT(fd == sd->fd());
return sd;
@@ -168,20 +170,15 @@
} else if (msg[i].id == kShutdownId) {
shutdown_ = true;
} else {
- bool is_new = false;
- SocketData* sd = GetSocketData(msg[i].id, &is_new);
- if (is_new) {
- sd->SetPortAndMask(msg[i].dart_port, msg[i].data);
- AddToEpollInstance(epoll_fd_, sd);
- }
+ SocketData* sd = GetSocketData(msg[i].id);
if ((msg[i].data & (1 << kShutdownReadCommand)) != 0) {
ASSERT(msg[i].data == (1 << kShutdownReadCommand));
// Close the socket for reading.
- sd->ShutdownRead();
+ shutdown(sd->fd(), SHUT_RD);
} else if ((msg[i].data & (1 << kShutdownWriteCommand)) != 0) {
ASSERT(msg[i].data == (1 << kShutdownWriteCommand));
// Close the socket for writing.
- sd->ShutdownWrite();
+ shutdown(sd->fd(), SHUT_WR);
} else if ((msg[i].data & (1 << kCloseCommand)) != 0) {
ASSERT(msg[i].data == (1 << kCloseCommand));
// Close the socket and free system resources and move on to
@@ -192,6 +189,14 @@
socket_map_.Remove(GetHashmapKeyFromFd(fd), GetHashmapHashFromFd(fd));
delete sd;
DartUtils::PostInt32(msg[i].dart_port, 1 << kDestroyedEvent);
+ } else if ((msg[i].data & (1 << kReturnTokenCommand)) != 0) {
+ if (sd->ReturnToken()) {
+ AddToEpollInstance(epoll_fd_, sd);
+ }
+ } else {
+ // Setup events to wait for.
+ sd->SetPortAndMask(msg[i].dart_port, msg[i].data);
+ AddToEpollInstance(epoll_fd_, sd);
}
}
}
@@ -222,47 +227,14 @@
#ifdef DEBUG_POLL
PrintEventMask(sd->fd(), events);
#endif
- intptr_t event_mask = 0;
- if (sd->IsListeningSocket()) {
- // For listening sockets the EPOLLIN event indicate that there are
- // connections ready for accept unless accompanied with one of the
- // other flags.
- if ((events & EPOLLIN) != 0) {
- if ((events & EPOLLHUP) != 0) event_mask |= (1 << kCloseEvent);
- if ((events & EPOLLERR) != 0) event_mask |= (1 << kErrorEvent);
- if (event_mask == 0) event_mask |= (1 << kInEvent);
- }
- } else {
- // Prioritize data events over close and error events.
- if ((events & (EPOLLIN | EPOLLHUP | EPOLLRDHUP)) != 0) {
- // If we have EPOLLIN and we have available bytes, report that.
- if ((events & EPOLLIN) != 0) {
- event_mask = (1 << kInEvent);
- }
- if ((events & (EPOLLHUP | EPOLLRDHUP)) != 0) {
- // If both EPOLLHUP and EPOLLERR are reported treat it as an
- // error.
- if ((events & EPOLLERR) != 0) {
- event_mask = (1 << kErrorEvent);
- } else {
- event_mask |= (1 << kCloseEvent);
- }
- } else if ((events & EPOLLERR) != 0) {
- event_mask = (1 << kErrorEvent);
- }
- }
-
- if ((events & EPOLLOUT) != 0) {
- if ((events & EPOLLERR) != 0) {
- if (!sd->IsPipe()) {
- event_mask = (1 << kErrorEvent);
- }
- } else {
- event_mask |= (1 << kOutEvent);
- }
- }
+ if (events & EPOLLERR) {
+ // Return error only if EPOLLIN is present.
+ return (events & EPOLLIN) ? (1 << kErrorEvent) : 0;
}
-
+ intptr_t event_mask = 0;
+ if (events & EPOLLIN) event_mask |= (1 << kInEvent);
+ if (events & EPOLLOUT) event_mask |= (1 << kOutEvent);
+ if (events & (EPOLLHUP | EPOLLRDHUP)) event_mask |= (1 << kCloseEvent);
return event_mask;
}
@@ -277,6 +249,10 @@
SocketData* sd = reinterpret_cast<SocketData*>(events[i].data.ptr);
intptr_t event_mask = GetPollEvents(events[i].events, sd);
if (event_mask != 0) {
+ if (sd->TakeToken()) {
+ // Took last token, remove from epoll.
+ RemoveFromEpollInstance(epoll_fd_, sd);
+ }
Dart_Port port = sd->port();
ASSERT(port != 0);
DartUtils::PostInt32(port, event_mask);
@@ -350,13 +326,13 @@
void EventHandlerImplementation::Shutdown() {
- Notify(kShutdownId, 0, 0);
+ SendData(kShutdownId, 0, 0);
}
-void EventHandlerImplementation::Notify(intptr_t id,
- Dart_Port dart_port,
- intptr_t data) {
+void EventHandlerImplementation::SendData(intptr_t id,
+ Dart_Port dart_port,
+ intptr_t data) {
WakeupHandler(id, dart_port, data);
}
diff --git a/runtime/bin/eventhandler_android.h b/runtime/bin/eventhandler_android.h
index 5a80eef..2647164 100644
--- a/runtime/bin/eventhandler_android.h
+++ b/runtime/bin/eventhandler_android.h
@@ -31,17 +31,11 @@
class SocketData {
public:
explicit SocketData(intptr_t fd)
- : tracked_by_epoll_(false), fd_(fd), port_(0), mask_(0) {
+ : fd_(fd), port_(0), mask_(0), tokens_(8) {
ASSERT(fd_ != -1);
}
- void ShutdownRead() {
- shutdown(fd_, SHUT_RD);
- }
-
- void ShutdownWrite() {
- shutdown(fd_, SHUT_WR);
- }
+ intptr_t GetPollEvents();
void Close() {
port_ = 0;
@@ -50,9 +44,6 @@
fd_ = -1;
}
- bool IsListeningSocket() { return (mask_ & (1 << kListeningSocket)) != 0; }
- bool IsPipe() { return (mask_ & (1 << kPipe)) != 0; }
-
void SetPortAndMask(Dart_Port port, intptr_t mask) {
ASSERT(fd_ != -1);
port_ = port;
@@ -61,15 +52,26 @@
intptr_t fd() { return fd_; }
Dart_Port port() { return port_; }
- intptr_t mask() { return mask_; }
- bool tracked_by_epoll() { return tracked_by_epoll_; }
- void set_tracked_by_epoll(bool value) { tracked_by_epoll_ = value; }
+
+ // Returns true if the last token was taken.
+ bool TakeToken() {
+ ASSERT(tokens_ > 0);
+ tokens_--;
+ return tokens_ == 0;
+ }
+
+ // Returns true if the tokens was 0 before adding.
+ bool ReturnToken() {
+ ASSERT(tokens_ >= 0);
+ tokens_++;
+ return tokens_ == 1;
+ }
private:
- bool tracked_by_epoll_;
intptr_t fd_;
Dart_Port port_;
intptr_t mask_;
+ int tokens_;
};
@@ -80,8 +82,8 @@
// Gets the socket data structure for a given file
// descriptor. Creates a new one if one is not found.
- SocketData* GetSocketData(intptr_t fd, bool* is_new);
- void Notify(intptr_t id, Dart_Port dart_port, intptr_t data);
+ SocketData* GetSocketData(intptr_t fd);
+ void SendData(intptr_t id, Dart_Port dart_port, intptr_t data);
void Start(EventHandler* handler);
void Shutdown();
diff --git a/runtime/bin/eventhandler_linux.cc b/runtime/bin/eventhandler_linux.cc
index 612f3cb..f87c1a4 100644
--- a/runtime/bin/eventhandler_linux.cc
+++ b/runtime/bin/eventhandler_linux.cc
@@ -20,7 +20,6 @@
#include "bin/dartutils.h"
#include "bin/fdutils.h"
#include "bin/log.h"
-#include "bin/socket.h"
#include "platform/hashmap.h"
#include "platform/thread.h"
#include "platform/utils.h"
@@ -29,36 +28,63 @@
namespace dart {
namespace bin {
+static const int kInterruptMessageSize = sizeof(InterruptMessage);
static const int kTimerId = -1;
+static const int kShutdownId = -2;
-static void AddToEpollInstance(intptr_t epoll_fd_,
- int fd, Dart_Port port,
- int mask) {
- struct epoll_event event;
- event.events = EPOLLET | EPOLLRDHUP;
- if ((mask & (1 << kInEvent)) != 0) event.events |= EPOLLIN;
- if ((mask & (1 << kOutEvent)) != 0) event.events |= EPOLLOUT;
- // Be sure we don't collide with the TIMER_BIT.
- if (port == ILLEGAL_PORT) {
- FATAL("Illigal port sent to event handler");
+intptr_t SocketData::GetPollEvents() {
+ // Do not ask for EPOLLERR and EPOLLHUP explicitly as they are
+ // triggered anyway.
+ intptr_t events = EPOLLET | EPOLLRDHUP;
+ if ((mask_ & (1 << kInEvent)) != 0) {
+ events |= EPOLLIN;
}
- event.data.u64 = port;
+ if ((mask_ & (1 << kOutEvent)) != 0) {
+ events |= EPOLLOUT;
+ }
+ return events;
+}
+
+
+// Unregister the file descriptor for a SocketData structure with epoll.
+static void RemoveFromEpollInstance(intptr_t epoll_fd_, SocketData* sd) {
+ VOID_TEMP_FAILURE_RETRY(epoll_ctl(epoll_fd_,
+ EPOLL_CTL_DEL,
+ sd->fd(),
+ NULL));
+}
+
+
+static void AddToEpollInstance(intptr_t epoll_fd_, SocketData* sd) {
+ struct epoll_event event;
+ event.events = sd->GetPollEvents();
+ event.data.ptr = sd;
int status = TEMP_FAILURE_RETRY(epoll_ctl(epoll_fd_,
EPOLL_CTL_ADD,
- fd,
+ sd->fd(),
&event));
if (status == -1) {
// Epoll does not accept the file descriptor. It could be due to
// already closed file descriptor, or unuspported devices, such
// as /dev/null. In such case, mark the file descriptor as closed,
// so dart will handle it accordingly.
- DartUtils::PostInt32(port, 1 << kCloseEvent);
+ DartUtils::PostInt32(sd->port(), 1 << kCloseEvent);
}
}
-EventHandlerImplementation::EventHandlerImplementation() : shutdown_(false) {
+EventHandlerImplementation::EventHandlerImplementation()
+ : socket_map_(&HashMap::SamePointerValue, 16) {
+ intptr_t result;
+ result = TEMP_FAILURE_RETRY(pipe(interrupt_fds_));
+ if (result != 0) {
+ FATAL("Pipe creation failed");
+ }
+ FDUtils::SetNonBlocking(interrupt_fds_[0]);
+ FDUtils::SetCloseOnExec(interrupt_fds_[0]);
+ FDUtils::SetCloseOnExec(interrupt_fds_[1]);
+ shutdown_ = false;
// The initial size passed to epoll_create is ignore on newer (>=
// 2.6.8) Linux versions
static const int kEpollInitialSize = 64;
@@ -67,18 +93,28 @@
FATAL1("Failed creating epoll file descriptor: %i", errno);
}
FDUtils::SetCloseOnExec(epoll_fd_);
+ // Register the interrupt_fd with the epoll instance.
+ struct epoll_event event;
+ event.events = EPOLLIN;
+ event.data.ptr = NULL;
+ int status = TEMP_FAILURE_RETRY(epoll_ctl(epoll_fd_,
+ EPOLL_CTL_ADD,
+ interrupt_fds_[0],
+ &event));
+ if (status == -1) {
+ FATAL("Failed adding interrupt fd to epoll instance");
+ }
timer_fd_ = TEMP_FAILURE_RETRY(timerfd_create(CLOCK_REALTIME, TFD_CLOEXEC));
if (timer_fd_ == -1) {
FATAL1("Failed creating timerfd file descriptor: %i", errno);
}
// Register the timer_fd_ with the epoll instance.
- struct epoll_event event;
event.events = EPOLLIN;
- event.data.u64 = ILLEGAL_PORT; // Use ILLEGAL_PORT to identify timer-fd.
- int status = TEMP_FAILURE_RETRY(epoll_ctl(epoll_fd_,
- EPOLL_CTL_ADD,
- timer_fd_,
- &event));
+ event.data.fd = timer_fd_;
+ status = TEMP_FAILURE_RETRY(epoll_ctl(epoll_fd_,
+ EPOLL_CTL_ADD,
+ timer_fd_,
+ &event));
if (status == -1) {
FATAL2(
"Failed adding timerfd fd(%i) to epoll instance: %i", timer_fd_, errno);
@@ -87,14 +123,106 @@
EventHandlerImplementation::~EventHandlerImplementation() {
- TEMP_FAILURE_RETRY(close(epoll_fd_));
- TEMP_FAILURE_RETRY(close(timer_fd_));
+ VOID_TEMP_FAILURE_RETRY(close(epoll_fd_));
+ VOID_TEMP_FAILURE_RETRY(close(timer_fd_));
+ VOID_TEMP_FAILURE_RETRY(close(interrupt_fds_[0]));
+ VOID_TEMP_FAILURE_RETRY(close(interrupt_fds_[1]));
+}
+
+
+SocketData* EventHandlerImplementation::GetSocketData(intptr_t fd) {
+ ASSERT(fd >= 0);
+ HashMap::Entry* entry = socket_map_.Lookup(
+ GetHashmapKeyFromFd(fd), GetHashmapHashFromFd(fd), true);
+ ASSERT(entry != NULL);
+ SocketData* sd = reinterpret_cast<SocketData*>(entry->value);
+ if (sd == NULL) {
+ // If there is no data in the hash map for this file descriptor a
+ // new SocketData for the file descriptor is inserted.
+ sd = new SocketData(fd);
+ entry->value = sd;
+ }
+ ASSERT(fd == sd->fd());
+ return sd;
+}
+
+
+void EventHandlerImplementation::WakeupHandler(intptr_t id,
+ Dart_Port dart_port,
+ int64_t data) {
+ InterruptMessage msg;
+ msg.id = id;
+ msg.dart_port = dart_port;
+ msg.data = data;
+ // WriteToBlocking will write up to 512 bytes atomically, and since our msg
+ // is smaller than 512, we don't need a thread lock.
+ // See: http://linux.die.net/man/7/pipe, section 'Pipe_buf'.
+ ASSERT(kInterruptMessageSize < PIPE_BUF);
+ intptr_t result =
+ FDUtils::WriteToBlocking(interrupt_fds_[1], &msg, kInterruptMessageSize);
+ if (result != kInterruptMessageSize) {
+ if (result == -1) {
+ perror("Interrupt message failure:");
+ }
+ FATAL1("Interrupt message failure. Wrote %" Pd " bytes.", result);
+ }
+}
+
+
+void EventHandlerImplementation::HandleInterruptFd() {
+ const intptr_t MAX_MESSAGES = kInterruptMessageSize;
+ InterruptMessage msg[MAX_MESSAGES];
+ ssize_t bytes = TEMP_FAILURE_RETRY(
+ read(interrupt_fds_[0], msg, MAX_MESSAGES * kInterruptMessageSize));
+ for (ssize_t i = 0; i < bytes / kInterruptMessageSize; i++) {
+ if (msg[i].id == kTimerId) {
+ timeout_queue_.UpdateTimeout(msg[i].dart_port, msg[i].data);
+ struct itimerspec it;
+ memset(&it, 0, sizeof(it));
+ if (timeout_queue_.HasTimeout()) {
+ int64_t millis = timeout_queue_.CurrentTimeout();
+ it.it_value.tv_sec = millis / 1000;
+ it.it_value.tv_nsec = (millis % 1000) * 1000000;
+ }
+ timerfd_settime(timer_fd_, TFD_TIMER_ABSTIME, &it, NULL);
+ } else if (msg[i].id == kShutdownId) {
+ shutdown_ = true;
+ } else {
+ SocketData* sd = GetSocketData(msg[i].id);
+ if ((msg[i].data & (1 << kShutdownReadCommand)) != 0) {
+ ASSERT(msg[i].data == (1 << kShutdownReadCommand));
+ // Close the socket for reading.
+ shutdown(sd->fd(), SHUT_RD);
+ } else if ((msg[i].data & (1 << kShutdownWriteCommand)) != 0) {
+ ASSERT(msg[i].data == (1 << kShutdownWriteCommand));
+ // Close the socket for writing.
+ shutdown(sd->fd(), SHUT_WR);
+ } else if ((msg[i].data & (1 << kCloseCommand)) != 0) {
+ ASSERT(msg[i].data == (1 << kCloseCommand));
+ // Close the socket and free system resources and move on to
+ // next message.
+ RemoveFromEpollInstance(epoll_fd_, sd);
+ intptr_t fd = sd->fd();
+ sd->Close();
+ socket_map_.Remove(GetHashmapKeyFromFd(fd), GetHashmapHashFromFd(fd));
+ delete sd;
+ DartUtils::PostInt32(msg[i].dart_port, 1 << kDestroyedEvent);
+ } else if ((msg[i].data & (1 << kReturnTokenCommand)) != 0) {
+ if (sd->ReturnToken()) {
+ AddToEpollInstance(epoll_fd_, sd);
+ }
+ } else {
+ // Setup events to wait for.
+ sd->SetPortAndMask(msg[i].dart_port, msg[i].data);
+ AddToEpollInstance(epoll_fd_, sd);
+ }
+ }
+ }
}
#ifdef DEBUG_POLL
-static void PrintEventMask(intptr_t events) {
- // TODO(ajohnsen): When DEBUG_POLL is enabled, we could add the fd to the
- // epoll-data as well.
+static void PrintEventMask(intptr_t fd, intptr_t events) {
+ Log::Print("%d ", fd);
if ((events & EPOLLIN) != 0) Log::Print("EPOLLIN ");
if ((events & EPOLLPRI) != 0) Log::Print("EPOLLPRI ");
if ((events & EPOLLOUT) != 0) Log::Print("EPOLLOUT ");
@@ -106,17 +234,19 @@
if ((events & ~all_events) != 0) {
Log::Print("(and %08x) ", events & ~all_events);
}
+ Log::Print("(available %d) ", FDUtils::AvailableBytes(fd));
Log::Print("\n");
}
#endif
-intptr_t EventHandlerImplementation::GetPollEvents(intptr_t events) {
+intptr_t EventHandlerImplementation::GetPollEvents(intptr_t events,
+ SocketData* sd) {
#ifdef DEBUG_POLL
- PrintEventMask(events);
+ PrintEventMask(sd->fd(), events);
#endif
if (events & EPOLLERR) {
- // Return only error if EPOLLIN is present.
+ // Return error only if EPOLLIN is present.
return (events & EPOLLIN) ? (1 << kErrorEvent) : 0;
}
intptr_t event_mask = 0;
@@ -129,32 +259,40 @@
void EventHandlerImplementation::HandleEvents(struct epoll_event* events,
int size) {
+ bool interrupt_seen = false;
for (int i = 0; i < size; i++) {
- uint64_t data = events[i].data.u64;
- // ILLEGAL_PORT is used to identify timer-fd.
- if (data == ILLEGAL_PORT) {
+ if (events[i].data.ptr == NULL) {
+ interrupt_seen = true;
+ } else if (events[i].data.fd == timer_fd_) {
int64_t val;
VOID_TEMP_FAILURE_RETRY(read(timer_fd_, &val, sizeof(val)));
- timer_mutex_.Lock();
if (timeout_queue_.HasTimeout()) {
DartUtils::PostNull(timeout_queue_.CurrentPort());
timeout_queue_.RemoveCurrent();
}
- timer_mutex_.Unlock();
} else {
- int32_t event_mask = GetPollEvents(events[i].events);
+ SocketData* sd = reinterpret_cast<SocketData*>(events[i].data.ptr);
+ intptr_t event_mask = GetPollEvents(events[i].events, sd);
if (event_mask != 0) {
- Dart_Port port = data;
+ if (sd->TakeToken()) {
+ // Took last token, remove from epoll.
+ RemoveFromEpollInstance(epoll_fd_, sd);
+ }
+ Dart_Port port = sd->port();
ASSERT(port != 0);
DartUtils::PostInt32(port, event_mask);
}
}
}
+ if (interrupt_seen) {
+ // Handle after socket events, so we avoid closing a socket before we handle
+ // the current events.
+ HandleInterruptFd();
+ }
}
void EventHandlerImplementation::Poll(uword args) {
- // Main event-handler thread loop.
static const intptr_t kMaxEvents = 16;
struct epoll_event events[kMaxEvents];
EventHandler* handler = reinterpret_cast<EventHandler*>(args);
@@ -188,51 +326,26 @@
void EventHandlerImplementation::Shutdown() {
- shutdown_ = true;
+ SendData(kShutdownId, 0, 0);
}
-void EventHandlerImplementation::Notify(intptr_t id,
- Dart_Port dart_port,
- int64_t data) {
- // This method is called by isolates, that is, not in the event-handler
- // thread.
- if (id == kTimerId) {
- // Lock this region, as multiple isolates may attempt to update
- // timeout_queue_.
- // TODO(ajohnsen): Consider using a timer-fd per isolate to avoid the lock.
- timer_mutex_.Lock();
- timeout_queue_.UpdateTimeout(dart_port, data);
- struct itimerspec it;
- memset(&it, 0, sizeof(it));
- if (timeout_queue_.HasTimeout()) {
- int64_t millis = timeout_queue_.CurrentTimeout();
- it.it_value.tv_sec = millis / 1000;
- it.it_value.tv_nsec = (millis % 1000) * 1000000;
- }
- timerfd_settime(timer_fd_, TFD_TIMER_ABSTIME, &it, NULL);
- timer_mutex_.Unlock();
- } else {
- if ((data & (1 << kShutdownReadCommand)) != 0) {
- ASSERT(data == (1 << kShutdownReadCommand));
- // Close the socket for reading.
- shutdown(id, SHUT_RD);
- } else if ((data & (1 << kShutdownWriteCommand)) != 0) {
- ASSERT(data == (1 << kShutdownWriteCommand));
- // Close the socket for writing.
- shutdown(id, SHUT_WR);
- } else if ((data & (1 << kCloseCommand)) != 0) {
- ASSERT(data == (1 << kCloseCommand));
- // Close the socket and free system resources and move on to
- // next message.
- // This will also remove the file descriptor from epoll.
- Socket::Close(id);
- DartUtils::PostInt32(dart_port, 1 << kDestroyedEvent);
- } else {
- // Add to epoll - this is the first time we see it.
- AddToEpollInstance(epoll_fd_, id, dart_port, data);
- }
- }
+void EventHandlerImplementation::SendData(intptr_t id,
+ Dart_Port dart_port,
+ int64_t data) {
+ WakeupHandler(id, dart_port, data);
+}
+
+
+void* EventHandlerImplementation::GetHashmapKeyFromFd(intptr_t fd) {
+ // The hashmap does not support keys with value 0.
+ return reinterpret_cast<void*>(fd + 1);
+}
+
+
+uint32_t EventHandlerImplementation::GetHashmapHashFromFd(intptr_t fd) {
+ // The hashmap does not support keys with value 0.
+ return dart::Utils::WordHash(fd + 1);
}
} // namespace bin
diff --git a/runtime/bin/eventhandler_linux.h b/runtime/bin/eventhandler_linux.h
index f5386c3..9341cd1 100644
--- a/runtime/bin/eventhandler_linux.h
+++ b/runtime/bin/eventhandler_linux.h
@@ -14,32 +14,93 @@
#include <sys/socket.h>
#include "platform/hashmap.h"
-#include "platform/thread.h"
namespace dart {
namespace bin {
+class InterruptMessage {
+ public:
+ intptr_t id;
+ Dart_Port dart_port;
+ int64_t data;
+};
+
+
+class SocketData {
+ public:
+ explicit SocketData(intptr_t fd) : fd_(fd), port_(0), mask_(0), tokens_(8) {
+ ASSERT(fd_ != -1);
+ }
+
+ intptr_t GetPollEvents();
+
+ void Close() {
+ port_ = 0;
+ mask_ = 0;
+ close(fd_);
+ fd_ = -1;
+ }
+
+ void SetPortAndMask(Dart_Port port, intptr_t mask) {
+ ASSERT(fd_ != -1);
+ port_ = port;
+ mask_ = mask;
+ }
+
+ intptr_t fd() { return fd_; }
+ Dart_Port port() { return port_; }
+
+ // Returns true if the last token was taken.
+ bool TakeToken() {
+ ASSERT(tokens_ > 0);
+ tokens_--;
+ return tokens_ == 0;
+ }
+
+ // Returns true if the tokens was 0 before adding.
+ bool ReturnToken() {
+ ASSERT(tokens_ >= 0);
+ tokens_++;
+ return tokens_ == 1;
+ }
+
+ private:
+ intptr_t fd_;
+ Dart_Port port_;
+ intptr_t mask_;
+ int tokens_;
+};
+
+
class EventHandlerImplementation {
public:
EventHandlerImplementation();
~EventHandlerImplementation();
- void Notify(intptr_t id, Dart_Port dart_port, int64_t data);
+ // Gets the socket data structure for a given file
+ // descriptor. Creates a new one if one is not found.
+ SocketData* GetSocketData(intptr_t fd);
+ void SendData(intptr_t id, Dart_Port dart_port, int64_t data);
void Start(EventHandler* handler);
void Shutdown();
private:
void HandleEvents(struct epoll_event* events, int size);
static void Poll(uword args);
+ void WakeupHandler(intptr_t id, Dart_Port dart_port, int64_t data);
+ void HandleInterruptFd();
void SetPort(intptr_t fd, Dart_Port dart_port, intptr_t mask);
- intptr_t GetPollEvents(intptr_t events);
+ intptr_t GetPollEvents(intptr_t events, SocketData* sd);
+ static void* GetHashmapKeyFromFd(intptr_t fd);
+ static uint32_t GetHashmapHashFromFd(intptr_t fd);
+ HashMap socket_map_;
TimeoutQueue timeout_queue_;
bool shutdown_;
+ int interrupt_fds_[2];
int epoll_fd_;
int timer_fd_;
- Mutex timer_mutex_;
};
} // namespace bin
diff --git a/runtime/bin/eventhandler_macos.cc b/runtime/bin/eventhandler_macos.cc
index b7d4fde..8024e1c 100644
--- a/runtime/bin/eventhandler_macos.cc
+++ b/runtime/bin/eventhandler_macos.cc
@@ -47,26 +47,11 @@
static void RemoveFromKqueue(intptr_t kqueue_fd_, SocketData* sd) {
if (!sd->tracked_by_kqueue()) return;
static const intptr_t kMaxChanges = 2;
- intptr_t changes = 0;
struct kevent events[kMaxChanges];
- if (sd->HasReadEvent()) {
- EV_SET(events + changes, sd->fd(), EVFILT_READ, EV_DELETE, 0, 0, NULL);
- ++changes;
- }
- if (sd->HasWriteEvent()) {
- EV_SET(events + changes, sd->fd(), EVFILT_WRITE, EV_DELETE, 0, 0, NULL);
- ++changes;
- }
- ASSERT(changes > 0);
- ASSERT(changes <= kMaxChanges);
- int status =
- TEMP_FAILURE_RETRY(kevent(kqueue_fd_, events, changes, NULL, 0, NULL));
- if (status == -1) {
- const int kBufferSize = 1024;
- char error_message[kBufferSize];
- strerror_r(errno, error_message, kBufferSize);
- FATAL1("Failed deleting events from kqueue: %s\n", error_message);
- }
+ EV_SET(events, sd->fd(), EVFILT_READ, EV_DELETE, 0, 0, NULL);
+ VOID_TEMP_FAILURE_RETRY(kevent(kqueue_fd_, events, 1, NULL, 0, NULL));
+ EV_SET(events, sd->fd(), EVFILT_WRITE, EV_DELETE, 0, 0, NULL);
+ VOID_TEMP_FAILURE_RETRY(kevent(kqueue_fd_, events, 1, NULL, 0, NULL));
sd->set_tracked_by_kqueue(false);
}
@@ -74,6 +59,7 @@
// Update the kqueue registration for SocketData structure to reflect
// the events currently of interest.
static void AddToKqueue(intptr_t kqueue_fd_, SocketData* sd) {
+ ASSERT(!sd->tracked_by_kqueue());
static const intptr_t kMaxChanges = 2;
intptr_t changes = 0;
struct kevent events[kMaxChanges];
@@ -102,7 +88,7 @@
ASSERT(changes > 0);
ASSERT(changes <= kMaxChanges);
int status =
- TEMP_FAILURE_RETRY(kevent(kqueue_fd_, events, changes, NULL, 0, NULL));
+ TEMP_FAILURE_RETRY(kevent(kqueue_fd_, events, changes, NULL, 0, NULL));
if (status == -1) {
// kQueue does not accept the file descriptor. It could be due to
// already closed file descriptor, or unuspported devices, such
@@ -152,8 +138,7 @@
}
-SocketData* EventHandlerImplementation::GetSocketData(intptr_t fd,
- bool* is_new) {
+SocketData* EventHandlerImplementation::GetSocketData(intptr_t fd) {
ASSERT(fd >= 0);
HashMap::Entry* entry = socket_map_.Lookup(
GetHashmapKeyFromFd(fd), GetHashmapHashFromFd(fd), true);
@@ -164,7 +149,6 @@
// new SocketData for the file descriptor is inserted.
sd = new SocketData(fd);
entry->value = sd;
- *is_new = true;
}
ASSERT(fd == sd->fd());
return sd;
@@ -203,19 +187,15 @@
} else if (msg[i].id == kShutdownId) {
shutdown_ = true;
} else {
- bool is_new = false;
- SocketData* sd = GetSocketData(msg[i].id, &is_new);
- if (is_new) {
- sd->SetPortAndMask(msg[i].dart_port, msg[i].data);
- }
+ SocketData* sd = GetSocketData(msg[i].id);
if ((msg[i].data & (1 << kShutdownReadCommand)) != 0) {
ASSERT(msg[i].data == (1 << kShutdownReadCommand));
// Close the socket for reading.
- sd->ShutdownRead();
+ shutdown(sd->fd(), SHUT_RD);
} else if ((msg[i].data & (1 << kShutdownWriteCommand)) != 0) {
ASSERT(msg[i].data == (1 << kShutdownWriteCommand));
// Close the socket for writing.
- sd->ShutdownWrite();
+ shutdown(sd->fd(), SHUT_WR);
} else if ((msg[i].data & (1 << kCloseCommand)) != 0) {
ASSERT(msg[i].data == (1 << kCloseCommand));
// Close the socket and free system resources.
@@ -225,10 +205,17 @@
socket_map_.Remove(GetHashmapKeyFromFd(fd), GetHashmapHashFromFd(fd));
delete sd;
DartUtils::PostInt32(msg[i].dart_port, 1 << kDestroyedEvent);
- } else {
- if (is_new) {
+ } else if ((msg[i].data & (1 << kReturnTokenCommand)) != 0) {
+ if (sd->ReturnToken()) {
AddToKqueue(kqueue_fd_, sd);
}
+ } else {
+ // Setup events to wait for.
+ ASSERT((msg[i].data > 0) && (msg[i].data < kIntptrMax));
+ ASSERT(sd->port() == 0);
+ sd->SetPortAndMask(msg[i].dart_port,
+ static_cast<intptr_t>(msg[i].data));
+ AddToKqueue(kqueue_fd_, sd);
}
}
}
@@ -320,6 +307,10 @@
SocketData* sd = reinterpret_cast<SocketData*>(events[i].udata);
intptr_t event_mask = GetEvents(events + i, sd);
if (event_mask != 0) {
+ if (sd->TakeToken()) {
+ // Took last token, remove from epoll.
+ RemoveFromKqueue(kqueue_fd_, sd);
+ }
Dart_Port port = sd->port();
ASSERT(port != 0);
DartUtils::PostInt32(port, event_mask);
@@ -408,13 +399,13 @@
void EventHandlerImplementation::Shutdown() {
- Notify(kShutdownId, 0, 0);
+ SendData(kShutdownId, 0, 0);
}
-void EventHandlerImplementation::Notify(intptr_t id,
- Dart_Port dart_port,
- int64_t data) {
+void EventHandlerImplementation::SendData(intptr_t id,
+ Dart_Port dart_port,
+ int64_t data) {
WakeupHandler(id, dart_port, data);
}
diff --git a/runtime/bin/eventhandler_macos.h b/runtime/bin/eventhandler_macos.h
index acbfc91..70a103c 100644
--- a/runtime/bin/eventhandler_macos.h
+++ b/runtime/bin/eventhandler_macos.h
@@ -10,7 +10,6 @@
#endif
#include <unistd.h>
-#include <errno.h>
#include <sys/event.h> // NOLINT
#include <sys/socket.h>
@@ -34,21 +33,14 @@
: fd_(fd),
port_(0),
mask_(0),
- tracked_by_kqueue_(false) {
+ tracked_by_kqueue_(false),
+ tokens_(8) {
ASSERT(fd_ != -1);
}
bool HasReadEvent();
bool HasWriteEvent();
- void ShutdownRead() {
- shutdown(fd_, SHUT_RD);
- }
-
- void ShutdownWrite() {
- shutdown(fd_, SHUT_WR);
- }
-
void Close() {
port_ = 0;
mask_ = 0;
@@ -57,7 +49,6 @@
}
bool IsListeningSocket() { return (mask_ & (1 << kListeningSocket)) != 0; }
- bool IsPipe() { return (mask_ & (1 << kPipe)) != 0; }
void SetPortAndMask(Dart_Port port, intptr_t mask) {
ASSERT(fd_ != -1);
@@ -73,11 +64,24 @@
tracked_by_kqueue_ = value;
}
+ // Returns true if the last token was taken.
+ bool TakeToken() {
+ tokens_--;
+ return tokens_ == 0;
+ }
+
+ // Returns true if the tokens was 0 before adding.
+ bool ReturnToken() {
+ tokens_++;
+ return tokens_ == 1;
+ }
+
private:
intptr_t fd_;
Dart_Port port_;
intptr_t mask_;
bool tracked_by_kqueue_;
+ int tokens_;
};
@@ -88,8 +92,8 @@
// Gets the socket data structure for a given file
// descriptor. Creates a new one if one is not found.
- SocketData* GetSocketData(intptr_t fd, bool* is_new);
- void Notify(intptr_t id, Dart_Port dart_port, int64_t data);
+ SocketData* GetSocketData(intptr_t fd);
+ void SendData(intptr_t id, Dart_Port dart_port, int64_t data);
void Start(EventHandler* handler);
void Shutdown();
diff --git a/runtime/bin/eventhandler_win.cc b/runtime/bin/eventhandler_win.cc
index 534f328..d32fb1e 100644
--- a/runtime/bin/eventhandler_win.cc
+++ b/runtime/bin/eventhandler_win.cc
@@ -373,9 +373,7 @@
// we create it.
if (pending_read_ != NULL) return true;
OverlappedBuffer* buffer = OverlappedBuffer::AllocateReadBuffer(kBufferSize);
-
ASSERT(completion_port_ != INVALID_HANDLE_VALUE);
-
BOOL ok = ReadDirectoryChangesW(handle_,
buffer->GetBufferStart(),
buffer->GetBufferSize(),
@@ -947,6 +945,8 @@
} else if (msg->id == kShutdownId) {
shutdown_ = true;
} else {
+ // No tokens to return on Windows.
+ if ((msg->data & (1 << kReturnTokenCommand)) != 0) return;
Handle* handle = reinterpret_cast<Handle*>(msg->id);
ASSERT(handle != NULL);
if (handle->is_listen_socket()) {
@@ -1203,9 +1203,9 @@
}
-void EventHandlerImplementation::Notify(intptr_t id,
- Dart_Port dart_port,
- int64_t data) {
+void EventHandlerImplementation::SendData(intptr_t id,
+ Dart_Port dart_port,
+ int64_t data) {
InterruptMessage* msg = new InterruptMessage;
msg->id = id;
msg->dart_port = dart_port;
@@ -1289,7 +1289,7 @@
void EventHandlerImplementation::Shutdown() {
- Notify(kShutdownId, 0, 0);
+ SendData(kShutdownId, 0, 0);
}
} // namespace bin
diff --git a/runtime/bin/eventhandler_win.h b/runtime/bin/eventhandler_win.h
index b756e07..90e505a 100644
--- a/runtime/bin/eventhandler_win.h
+++ b/runtime/bin/eventhandler_win.h
@@ -485,7 +485,7 @@
EventHandlerImplementation();
virtual ~EventHandlerImplementation();
- void Notify(intptr_t id, Dart_Port dart_port, int64_t data);
+ void SendData(intptr_t id, Dart_Port dart_port, int64_t data);
void Start(EventHandler* handler);
void Shutdown();
diff --git a/runtime/bin/io_buffer.cc b/runtime/bin/io_buffer.cc
index ef08b4f..c69d9c7 100644
--- a/runtime/bin/io_buffer.cc
+++ b/runtime/bin/io_buffer.cc
@@ -12,7 +12,7 @@
uint8_t* data = Allocate(size);
Dart_Handle result = Dart_NewExternalTypedData(
Dart_TypedData_kUint8, data, size);
- Dart_NewWeakPersistentHandle(result, data, IOBuffer::Finalizer);
+ Dart_NewWeakPersistentHandle(result, data, size, IOBuffer::Finalizer);
if (Dart_IsError(result)) {
Free(data);
diff --git a/runtime/bin/socket_linux.cc b/runtime/bin/socket_linux.cc
index 1a54a1e..2c05324 100644
--- a/runtime/bin/socket_linux.cc
+++ b/runtime/bin/socket_linux.cc
@@ -323,7 +323,7 @@
bind(fd,
&addr->addr,
SocketAddress::GetAddrLength(addr))) < 0) {
- TEMP_FAILURE_RETRY_BLOCK_SIGNALS(close(fd));
+ VOID_TEMP_FAILURE_RETRY_BLOCK_SIGNALS(close(fd));
return -1;
}
return fd;
@@ -392,12 +392,12 @@
if (fd < 0) return -1;
int optval = 1;
- TEMP_FAILURE_RETRY_BLOCK_SIGNALS(
+ VOID_TEMP_FAILURE_RETRY_BLOCK_SIGNALS(
setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof(optval)));
if (addr.ss.ss_family == AF_INET6) {
optval = v6_only ? 1 : 0;
- TEMP_FAILURE_RETRY_BLOCK_SIGNALS(
+ VOID_TEMP_FAILURE_RETRY_BLOCK_SIGNALS(
setsockopt(fd, IPPROTO_IPV6, IPV6_V6ONLY, &optval, sizeof(optval)));
}
diff --git a/runtime/bin/socket_patch.dart b/runtime/bin/socket_patch.dart
index 7806964..0edd468 100644
--- a/runtime/bin/socket_patch.dart
+++ b/runtime/bin/socket_patch.dart
@@ -355,8 +355,9 @@
static const int CLOSE_COMMAND = 8;
static const int SHUTDOWN_READ_COMMAND = 9;
static const int SHUTDOWN_WRITE_COMMAND = 10;
+ static const int RETURN_TOKEN_COMMAND = 11;
static const int FIRST_COMMAND = CLOSE_COMMAND;
- static const int LAST_COMMAND = SHUTDOWN_WRITE_COMMAND;
+ static const int LAST_COMMAND = RETURN_TOKEN_COMMAND;
// Type flag send to the eventhandler providing additional
// information on the type of the file descriptor.
@@ -817,6 +818,9 @@
}
}
}
+ if (eventPort != null && !isClosing && !isClosed) {
+ sendToEventHandler(1 << RETURN_TOKEN_COMMAND);
+ }
}
void setHandlers({read, write, error, closed, destroyed}) {
@@ -832,7 +836,7 @@
sendWriteEvents = write;
if (read) issueReadEvent();
if (write) issueWriteEvent();
- if (eventPort == null) {
+ if (eventPort == null && !isClosing && !isClosed) {
int flags = typeFlags & TYPE_TYPE_MASK;
if (!isClosedRead) flags |= 1 << READ_EVENT;
if (!isClosedWrite) flags |= 1 << WRITE_EVENT;
@@ -889,7 +893,7 @@
}
void sendToEventHandler(int data) {
- assert(!isClosed);
+ assert(!isClosing);
connectToEventHandler();
_EventHandler._sendData(this, eventPort, data);
}
diff --git a/runtime/bin/stdio_patch.dart b/runtime/bin/stdio_patch.dart
index d400306..9a0e5af 100644
--- a/runtime/bin/stdio_patch.dart
+++ b/runtime/bin/stdio_patch.dart
@@ -30,7 +30,7 @@
case _STDIO_HANDLE_TYPE_PIPE:
case _STDIO_HANDLE_TYPE_SOCKET:
case _STDIO_HANDLE_TYPE_FILE:
- return wrap(new IOSink(new _FileStreamConsumer.fromStdio(fd)));
+ return wrap(new IOSink(new _StdConsumer(fd)));
default:
throw new FileSystemException("Unsupported stdin type");
}
diff --git a/runtime/bin/vmservice/client/deployed/web/index.html b/runtime/bin/vmservice/client/deployed/web/index.html
index 62a33f6..366b9f6 100644
--- a/runtime/bin/vmservice/client/deployed/web/index.html
+++ b/runtime/bin/vmservice/client/deployed/web/index.html
@@ -14,9 +14,6 @@
<body><polymer-element name="observatory-element">
</polymer-element>
-<polymer-element name="isolate-element" extends="observatory-element">
-
-</polymer-element>
<polymer-element name="nav-bar" extends="observatory-element">
<template>
<style>
@@ -155,10 +152,10 @@
</style>
<li>
<template if="{{ active }}">
- <button class="active" on-click="{{ buttonClick }}">Refresh</button>
+ <button class="active" on-click="{{ buttonClick }}">{{ label }}</button>
</template>
<template if="{{ !active }}">
- <button class="idle" on-click="{{ buttonClick }}">Refresh</button>
+ <button class="idle" on-click="{{ buttonClick }}">{{ label }}</button>
</template>
</li>
</template>
@@ -172,40 +169,40 @@
</template>
</polymer-element>
-<polymer-element name="isolate-nav-menu" extends="isolate-element">
+<polymer-element name="isolate-nav-menu" extends="observatory-element">
<template>
<nav-menu link="#" anchor="{{ isolate.name }}" last="{{ last }}">
- <nav-menu-item link="{{ isolate.hashLink('stacktrace') }}" anchor="stack trace"></nav-menu-item>
- <nav-menu-item link="{{ isolate.hashLink('profile') }}" anchor="cpu profile"></nav-menu-item>
- <nav-menu-item link="{{ isolate.hashLink('allocationprofile') }}" anchor="heap profile"></nav-menu-item>
- <nav-menu-item link="{{ isolate.hashLink('debug/breakpoints') }}" anchor="breakpoints"></nav-menu-item>
+ <nav-menu-item link="{{ isolate.relativeHashLink('stacktrace') }}" anchor="stack trace"></nav-menu-item>
+ <nav-menu-item link="{{ isolate.relativeHashLink('profile') }}" anchor="cpu profile"></nav-menu-item>
+ <nav-menu-item link="{{ isolate.relativeHashLink('allocationprofile') }}" anchor="heap profile"></nav-menu-item>
+ <nav-menu-item link="{{ isolate.relativeHashLink('debug/breakpoints') }}" anchor="breakpoints"></nav-menu-item>
<content></content>
</nav-menu>
</template>
</polymer-element>
-<polymer-element name="library-nav-menu" extends="isolate-element">
+<polymer-element name="library-nav-menu" extends="observatory-element">
<template>
- <nav-menu link="{{ isolate.hashLink(library['id']) }}" anchor="{{ library['name'] }}" last="{{ last }}">
+ <nav-menu link="{{ library.hashLink }}" anchor="{{ library.name }}" last="{{ last }}">
<content></content>
</nav-menu>
</template>
</polymer-element>
-<polymer-element name="class-nav-menu" extends="isolate-element">
+<polymer-element name="class-nav-menu" extends="observatory-element">
<template>
- <nav-menu link="{{ isolate.hashLink(cls['id']) }}" anchor="{{ cls['user_name'] }}" last="{{ last }}">
+ <nav-menu link="{{ cls.hashLink }}" anchor="{{ cls.name }}" last="{{ last }}">
<content></content>
</nav-menu>
</template>
</polymer-element>
-<polymer-element name="breakpoint-list" extends="isolate-element">
+<polymer-element name="breakpoint-list" extends="observatory-element">
<template>
<nav-bar>
<top-nav-menu></top-nav-menu>
- <isolate-nav-menu isolate="{{ isolate }}"></isolate-nav-menu>
+ <isolate-nav-menu isolate="{{ msg.isolate }}"></isolate-nav-menu>
<nav-menu link="." anchor="breakpoints" last="{{ true }}"></nav-menu>
<nav-refresh callback="{{ refresh }}"></nav-refresh>
</nav-bar>
@@ -227,7 +224,7 @@
</template>
</polymer-element>
-<polymer-element name="service-ref" extends="isolate-element">
+<polymer-element name="service-ref" extends="observatory-element">
</polymer-element><polymer-element name="class-ref" extends="service-ref">
<template>
@@ -240,9 +237,9 @@
<div class="row">
<div class="col-md-8 col-md-offset-2">
<div class="panel panel-danger">
- <div class="panel-heading">{{ error['errorType'] }}</div>
+ <div class="panel-heading">{{ error.kind }}</div>
<div class="panel-body">
- <p>{{ error['text'] }}</p>
+ <p>{{ error.message }}</p>
</div>
</div>
</div>
@@ -258,7 +255,7 @@
var
</template>
<template if="{{ (ref['declared_type']['name'] != 'dynamic') }}">
- <class-ref app="{{ app }}" ref="{{ ref['declared_type'] }}"></class-ref>
+ <class-ref ref="{{ ref['declared_type'] }}"></class-ref>
</template>
<a title="{{ hoverText }}" href="{{ url }}">{{ name }}</a>
</div>
@@ -312,52 +309,56 @@
<style>
.member {
vertical-align: top;
- padding: 0 0 0 1em;
+ padding: 1px 0 1px 1em;
}
</style>
<div>
- <template if="{{ isUnexpectedRef(ref['type']) }}">
- unexpected reference type <{{ ref['type'] }}>
+ <template if="{{ isUnexpected(ref.serviceType) }}">
+ unexpected reference type <{{ ref.serviceType }}>
</template>
- <template if="{{ isNullRef(ref['type']) }}">
- <div title="{{ hoverText }}">{{ name }}</div>
+ <template if="{{ isError(ref.serviceType) }}">
+ <pre>{{ ref.message }}</pre>
</template>
- <template if="{{ (isStringRef(ref['type']) ||
- isBoolRef(ref['type']) ||
- isIntRef(ref['type'])) }}">
- <a href="{{ url }}">{{ name }}</a>
+ <template if="{{ isNull(ref.serviceType) }}">
+ <div title="{{ hoverText }}">{{ ref['preview'] }}</div>
</template>
- <template if="{{ isClosureRef(ref['type']) }}">
+ <template if="{{ (isString(ref.serviceType) ||
+ isBool(ref.serviceType) ||
+ isInt(ref.serviceType)) }}">
+ <a href="{{ url }}">{{ ref['preview'] }}</a>
+ </template>
+
+ <template if="{{ isClosure(ref.serviceType) }}">
<a href="{{ url }}">
{{ ref['closureFunc']['user_name'] }}
</a>
</template>
- <template if="{{ isInstanceRef(ref['type']) }}">
+ <template if="{{ isInstance(ref.serviceType) }}">
<a href="{{ url }}"><em>{{ ref['class']['user_name'] }}</em></a>
<curly-block callback="{{ expander() }}">
<table>
<tbody><tr template="" repeat="{{ field in ref['fields'] }}">
<td class="member">{{ field['decl']['user_name'] }}</td>
<td class="member">
- <instance-ref isolate="{{ isolate }}" ref="{{ field['value'] }}"></instance-ref>
+ <instance-ref ref="{{ field['value'] }}"></instance-ref>
</td>
</tr>
</tbody></table>
</curly-block>
</template>
- <template if="{{ isListRef(ref['type']) }}">
+ <template if="{{ isList(ref.serviceType) }}">
<a href="{{ url }}"><em>{{ ref['class']['user_name'] }}</em> ({{ ref['length']}})</a>
<curly-block callback="{{ expander() }}">
<table>
<tbody><tr template="" repeat="{{ element in ref['elements'] }}">
<td class="member">[{{ element['index']}}]</td>
<td class="member">
- <instance-ref isolate="{{ isolate }}" ref="{{ element['value'] }}"></instance-ref>
+ <instance-ref ref="{{ element['value'] }}"></instance-ref>
</td>
</tr>
</tbody></table>
@@ -373,13 +374,13 @@
<a href="{{ url }}">{{ name }}</a>
</template>
-</polymer-element><polymer-element name="class-view" extends="isolate-element">
+</polymer-element><polymer-element name="class-view" extends="observatory-element">
<template>
<nav-bar>
<top-nav-menu></top-nav-menu>
- <isolate-nav-menu isolate="{{ isolate }}"></isolate-nav-menu>
- <library-nav-menu isolate="{{ isolate }}" library="{{ cls['library'] }}"></library-nav-menu>
- <class-nav-menu isolate="{{ isolate }}" cls="{{ cls }}" last="{{ true }}"></class-nav-menu>
+ <isolate-nav-menu isolate="{{ cls.isolate }}"></isolate-nav-menu>
+ <library-nav-menu library="{{ cls['library'] }}"></library-nav-menu>
+ <class-nav-menu cls="{{ cls }}" last="{{ true }}"></class-nav-menu>
<nav-refresh callback="{{ refresh }}"></nav-refresh>
</nav-bar>
@@ -387,12 +388,13 @@
<div class="col-md-8 col-md-offset-2">
<div class="panel panel-warning">
<div class="panel-heading">
- class <strong>{{ cls['user_name'] }}</strong>
+ class <strong>{{ cls.name }}</strong>
<template if="{{ cls['super']['type'] != 'Null' }}">
extends
- <class-ref app="{{ app }}" ref="{{ cls['super'] }}"></class-ref>
+ <class-ref ref="{{ cls['super'] }}"></class-ref>
</template>
- <library-ref app="{{ app }}" ref="{{ cls['library'] }}"></library-ref>
+ <p></p>
+ <library-ref ref="{{ cls['library'] }}"></library-ref>
</div>
<div class="panel-body">
<table class="table table-hover">
@@ -422,8 +424,8 @@
<table class="table table-hover">
<tbody>
<tr template="" repeat="{{ field in cls['fields'] }}">
- <td><field-ref app="{{ app }}" ref="{{ field }}"></field-ref></td>
- <td><instance-ref app="{{ app }}" ref="{{ field['value'] }}"></instance-ref></td>
+ <td><field-ref ref="{{ field }}"></field-ref></td>
+ <td><instance-ref ref="{{ field['value'] }}"></instance-ref></td>
</tr>
</tbody>
</table>
@@ -437,8 +439,8 @@
</thead>
<tbody>
<tr template="" repeat="{{ function in cls['functions'] }}">
- <td><function-ref app="{{ app }}" ref="{{ function }}"></function-ref></td>
- <td><function-ref app="{{ app }}" ref="{{ function }}" internal=""></function-ref></td>
+ <td><function-ref ref="{{ function }}"></function-ref></td>
+ <td><function-ref ref="{{ function }}" internal=""></function-ref></td>
</tr>
</tbody>
</table>
@@ -458,46 +460,77 @@
<a href="{{ url }}">{{ name }}</a>
</template>
-</polymer-element><polymer-element name="disassembly-entry" extends="observatory-element">
- <template>
- <div class="row">
- <div class="col-md-2">{{ instruction.formattedTicks() }}</div>
- <div class="col-md-2">{{ instruction.formattedAddress() }}</div>
- <div class="col-md-4">
- <code>{{ instruction.machine }} {{ instruction.human }}</code>
- </div>
- </div>
- </template>
-
-</polymer-element><polymer-element name="code-view" extends="isolate-element">
+</polymer-element><polymer-element name="code-view" extends="observatory-element">
<template>
<nav-bar>
<top-nav-menu></top-nav-menu>
- <isolate-nav-menu isolate="{{ isolate }}"></isolate-nav-menu>
- <nav-menu link="." anchor="{{ code.functionRef['user_name'] }}" last="{{ true }}"></nav-menu>
- <!-- TODO(turnidge): Implement code refresh -->
+ <isolate-nav-menu isolate="{{ code.isolate }}"></isolate-nav-menu>
+ <nav-menu link="." anchor="{{ code.name }}" last="{{ true }}"></nav-menu>
+ <nav-refresh callback="{{ refresh }}"></nav-refresh>
</nav-bar>
-
- <div class="row">
- <div class="col-md-8 col-md-offset-2">
- <div class="{{ cssPanelClass }}">
- <div class="panel-heading">
- <function-ref isolate="{{ isolate }}" ref="{{ code.functionRef }}"></function-ref>
- </div>
- <div class="panel-body">
- <div class="row">
- <div class="col-md-2"><strong>Samples</strong></div>
- <div class="col-md-2"><strong>Address</strong></div>
- <div><strong>Instruction</strong></div>
- </div>
- <template repeat="{{ instruction in code.instructions }}">
- <disassembly-entry instruction="{{ instruction }}">
- </disassembly-entry>
- </template>
- </div>
- </div>
+ <style>
+ .content {
+ padding-left: 10%;
+ font: 400 14px 'Montserrat', sans-serif;
+ }
+ h1 {
+ font: 400 18px 'Montserrat', sans-serif;
+ }
+ .member, .memberHeader {
+ vertical-align: top;
+ padding: 3px 0 3px 1em;
+ font: 400 14px 'Montserrat', sans-serif;
+ }
+ .monospace {
+ font-family: consolas, courier, monospace;
+ font-size: 1em;
+ line-height: 1.2em;
+ white-space: nowrap;
+ }
+ </style>
+ <div class="content">
+ <h1>Code for {{ code.name }}</h1>
+ <table>
+ <tbody><tr>
+ <td class="memberHeader">kind</td>
+ <td class="member">{{code.kind}}</td>
+ </tr>
+ <tr>
+ <td class="memberHeader">function</td>
+ <td class="member">
+ <function-ref ref="{{code.function}}">
+ </function-ref>
+ </td>
+ </tr>
+ <tr>
+ <td class="memberHeader">Inclusive</td>
+ <td class="member">{{ code.formattedInclusiveTicks }}</td>
+ </tr>
+ <tr>
+ <td class="memberHeader">Exclusive</td>
+ <td class="member">{{ code.formattedExclusiveTicks }}</td>
+ </tr>
+ </tbody></table>
</div>
- </div>
+ <hr>
+ <div class="content">
+ <template if="{{ code.hasDisassembly }}">
+ <div class="row">
+ <div class="col-md-2 memberHeader">Inclusive</div>
+ <div class="col-md-2 memberHeader">Exclusive</div>
+ <div class="col-md-2 memberHeader">Address</div>
+ <div class="col-md-6 memberHeader">Disassembly</div>
+ </div>
+ </template>
+ <template repeat="{{ instruction in code.instructions }}">
+ <div class="row">
+ <div class="col-md-2 monospace">{{ instruction.formattedInclusive(code) }}</div>
+ <div class="col-md-2 monospace">{{ instruction.formattedExclusive(code) }}</div>
+ <div class="col-md-2 monospace">{{ instruction.formattedAddress() }}</div>
+ <div class="col-md-6 monospace">{{ instruction.human }}</div>
+ </div>
+ </template>
+ </div>
</template>
</polymer-element>
@@ -513,17 +546,98 @@
</div>
</template>
-</polymer-element><polymer-element name="field-view" extends="isolate-element">
+</polymer-element><polymer-element name="eval-box" extends="observatory-element">
+ <template>
+ <style>
+ .textbox {
+ width: 80ex;
+ font: 400 16px 'Montserrat', sans-serif;
+ }
+ .bigtextbox {
+ font: 400 16px 'Montserrat', sans-serif;
+ }
+ .button {
+ font: 400 16px 'Montserrat', sans-serif;
+ }
+ .radios {
+ display: inline;
+ }
+ .radios label{
+ padding-left: 15px;
+ }
+ .historyExpr, .historyValue {
+ vertical-align: text-top;
+ font: 400 14px 'Montserrat', sans-serif;
+ }
+ .historyExpr a {
+ display: block;
+ color: black;
+ text-decoration: none;
+ padding: 6px 6px;
+ cursor: pointer;
+ white-space: pre-line;
+ }
+ .historyExpr a:hover {
+ background-color: #e1f5fe
+ }
+ .historyValue {
+ display: block;
+ padding: 6px 6px;
+ }
+ </style>
+ <form>
+ <template if="{{ lineMode == '1-line' }}">
+ <input class="textbox" type="text" value="{{ text }}">
+ </template>
+ <template if="{{ lineMode == 'N-line' }}">
+ <textarea class="bigtextbox" rows="5" cols="80" value="{{ text }}"></textarea>
+ </template>
+
+ <input class="button" type="submit" value="Evaluate" on-click="{{ eval }}">
+ <div class="radios" on-change="{{ updateLineMode }}">
+ <label for="1-line">1-line
+ <input type="radio" name="lineMode" value="1-line" checked="">
+ </label>
+ <label for="N-line">N-line
+ <input type="radio" name="lineMode" value="N-line">
+ </label>
+ </div>
+ </form>
+
+ <br>
+ <template if="{{ results.isNotEmpty }}">
+ <table>
+ <tbody><tr template="" repeat="{{ result in results }}">
+ <td class="historyExpr">
+ <a class="expr" on-click="{{ selectExpr }}" expr="{{ result['expr'] }}">{{ result['expr'] }}</a>
+ </td>
+ <td class="historyValue">
+ <template if="{{ result['value'] == null }}">
+ <div style="color:#aaa;cursor:wait;"><pending></div>
+ </template>
+ <template if="{{ result['value'] != null }}">
+ <instance-ref isolate="{{ isolate }}" ref="{{ result['value'] }}">
+ </instance-ref>
+ </template>
+ </td>
+ </tr>
+ </tbody></table>
+ </template>
+ </template>
+</polymer-element>
+
+
+<polymer-element name="field-view" extends="observatory-element">
<template>
<nav-bar>
<top-nav-menu></top-nav-menu>
- <isolate-nav-menu isolate="{{ isolate }}"></isolate-nav-menu>
- <template if="{{ field['owner']['type'] == '@Class' }}">
+ <isolate-nav-menu isolate="{{ field.isolate }}"></isolate-nav-menu>
+ <template if="{{ field['owner'].serviceType == 'Class' }}">
<!-- TODO(turnidge): Add library nav menu here. -->
- <class-nav-menu isolate="{{ isolate }}" cls="{{ field['owner'] }}"></class-nav-menu>
+ <class-nav-menu cls="{{ field['owner'] }}"></class-nav-menu>
</template>
- <template if="{{ field['owner']['type'] == '@Library' }}">
- <library-nav-menu isolate="{{ isolate }}" library="{{ field['owner'] }}"></library-nav-menu>
+ <template if="{{ field['owner'].serviceType == 'Library' }}">
+ <library-nav-menu library="{{ field['owner'] }}"></library-nav-menu>
</template>
<nav-menu link="." anchor="{{ field['user_name'] }}" last="{{ true }}"></nav-menu>
<nav-refresh callback="{{ refresh }}"></nav-refresh>
@@ -537,7 +651,7 @@
<template if="{{ field['final'] }}">final</template>
<template if="{{ field['const'] }}">const</template>
{{ field['user_name'] }} ({{ field['name'] }})
- <class-ref isolate="{{ isolate }}" ref="{{ field['class'] }}"></class-ref>
+ <class-ref ref="{{ field['owner'] }}"></class-ref>
</div>
<div class="panel-body">
<template if="{{ field['guard_class'] == 'dynamic'}}">
@@ -556,7 +670,7 @@
</div>
</template>
<blockquote>
- <class-ref isolate="{{ isolate }}" ref="{{ field['guard_class'] }}"></class-ref>
+ <class-ref ref="{{ field['guard_class'] }}"></class-ref>
</blockquote>
</template>
</div>
@@ -566,19 +680,19 @@
</template>
</polymer-element>
-<polymer-element name="function-view" extends="isolate-element">
+<polymer-element name="function-view" extends="observatory-element">
<template>
<nav-bar>
<top-nav-menu></top-nav-menu>
- <isolate-nav-menu isolate="{{ isolate }}"></isolate-nav-menu>
+ <isolate-nav-menu isolate="{{ function.isolate }}"></isolate-nav-menu>
<template if="{{ function['owner']['type'] == '@Class' }}">
<!-- TODO(turnidge): Add library nav menu here. -->
- <class-nav-menu isolate="{{ isolate }}" cls="{{ function['owner'] }}"></class-nav-menu>
+ <class-nav-menu cls="{{ function['owner'] }}"></class-nav-menu>
</template>
<template if="{{ function['owner']['type'] == '@Library' }}">
- <library-nav-menu isolate="{{ isolate }}" library="{{ function['owner'] }}"></library-nav-menu>
+ <library-nav-menu library="{{ function['owner'] }}"></library-nav-menu>
</template>
- <nav-menu link="." anchor="{{ function['user_name'] }}" last="{{ true }}"></nav-menu>
+ <nav-menu link="." anchor="{{ function.name }}" last="{{ true }}"></nav-menu>
<nav-refresh callback="{{ refresh }}"></nav-refresh>
</nav-bar>
@@ -587,12 +701,12 @@
<div class="panel panel-warning">
<div class="panel-heading">
{{ function['user_name'] }} ({{ function['name'] }})
- <class-ref isolate="{{ isolate }}" ref="{{ function['class'] }}"></class-ref>
+ <class-ref ref="{{ function['class'] }}"></class-ref>
</div>
<div class="panel-body">
<div>
- <code-ref isolate="{{ isolate }}" ref="{{ function['code'] }}"></code-ref>
- <code-ref isolate="{{ isolate }}" ref="{{ function['unoptimized_code'] }}"></code-ref>
+ <code-ref ref="{{ function['code'] }}"></code-ref>
+ <code-ref ref="{{ function['unoptimized_code'] }}"></code-ref>
</div>
<table class="table table-hover">
<tbody>
@@ -635,7 +749,7 @@
</template>
</polymer-element>
-<polymer-element name="isolate-summary" extends="isolate-element">
+<polymer-element name="isolate-summary" extends="observatory-element">
<template>
<div class="row">
<div class="col-md-1">
@@ -660,9 +774,9 @@
<div class="row">
<small>
- (<a href="{{ isolate.hashLink(isolate.rootLib) }}">library</a>)
- (<a href="{{ isolate.hashLink('debug/breakpoints') }}">breakpoints</a>)
- (<a href="{{ isolate.hashLink('profile') }}">profile</a>)
+ (<a href="{{ isolate.rootLib.hashLink }}">library</a>)
+ (<a href="{{ isolate.relativeHashLink('debug/breakpoints') }}">breakpoints</a>)
+ (<a href="{{ isolate.relativeHashLink('profile') }}">profile</a>)
</small>
</div>
</div>
@@ -695,7 +809,7 @@
</div>
</div>
<div class="col-md-2">
- <a href="{{ isolate.hashLink('allocationprofile') }}">
+ <a href="{{ isolate.relativeHashLink('allocationprofile') }}">
{{ isolate.newHeapUsed | formatSize }}/{{ isolate.oldHeapUsed | formatSize }}
</a>
</div>
@@ -706,7 +820,7 @@
<template if="{{ isolate.topFrame != null }}">
run
</template>
- ( <a href="{{ isolate.hashLink('stacktrace') }}">stack trace</a> )
+ ( <a href="{{ isolate.relativeHashLink('stacktrace') }}">stack trace</a> )
</div>
</div>
<div class="row">
@@ -714,8 +828,8 @@
</div>
<div class="col-md-6">
<template if="{{ isolate.topFrame != null }}">
- <function-ref isolate="{{ isolate }}" ref="{{ isolate.topFrame['function'] }}"></function-ref>
- (<script-ref isolate="{{ isolate }}" ref="{{ isolate.topFrame['script'] }}" line="{{ isolate.topFrame['line'] }}"></script-ref>)
+ <function-ref ref="{{ isolate.topFrame['function'] }}"></function-ref>
+ (<script-ref ref="{{ isolate.topFrame['script'] }}" line="{{ isolate.topFrame['line'] }}"></script-ref>)
<br>
<pre>{{ isolate.topFrame['line'] }} {{ isolate.topFrame['lineString'] }}</pre>
</template>
@@ -726,10 +840,7 @@
</template>
</polymer-element>
-<polymer-element name="vm-element" extends="observatory-element">
-
-</polymer-element>
-<polymer-element name="isolate-list" extends="vm-element">
+<polymer-element name="isolate-list" extends="observatory-element">
<template>
<nav-bar>
<top-nav-menu last="{{ true }}"></top-nav-menu>
@@ -737,7 +848,7 @@
<nav-refresh callback="{{ refresh } }}"></nav-refresh>
</nav-bar>
<ul class="list-group">
- <template repeat="{{ isolate in vm.isolates.values }}">
+ <template repeat="{{ isolate in isolates.isolates.values }}">
<li class="list-group-item">
<isolate-summary isolate="{{ isolate }}"></isolate-summary>
</li>
@@ -746,50 +857,119 @@
</template>
</polymer-element>
-<polymer-element name="instance-view" extends="isolate-element">
+<polymer-element name="instance-view" extends="observatory-element">
<template>
<nav-bar>
<top-nav-menu></top-nav-menu>
- <isolate-nav-menu isolate="{{ isolate }}"></isolate-nav-menu>
+ <isolate-nav-menu isolate="{{ instance.isolate }}"></isolate-nav-menu>
<!-- TODO(turnidge): Add library nav menu here. -->
- <class-nav-menu isolate="{{ isolate }}" cls="{{ instance['class'] }}"></class-nav-menu>
+ <class-nav-menu cls="{{ instance['class'] }}"></class-nav-menu>
<nav-menu link="." anchor="instance" last="{{ true }}"></nav-menu>
- <!-- TODO(turnidge): Add nav refresh here. -->
+ <nav-refresh callback="{{ refresh }}"></nav-refresh>
</nav-bar>
- <div class="row">
- <div class="col-md-8 col-md-offset-2">
- <div class="panel panel-warning">
- <div class="panel-heading">
- Instance of
- <class-ref isolate="{{ isolate }}" ref="{{ instance['class'] }}"></class-ref>
- </div>
- <div class="panel-body">
- <template if="{{ instance['error'] == null }}">
- <table class="table table-hover">
- <tbody>
- <tr>
- <td>Preview</td><td>{{ instance['preview'] }}</td>
- </tr>
- </tbody>
- </table>
- <blockquote><strong>Fields</strong></blockquote>
- <table class="table table-hover">
- <tbody>
- <tr template="" repeat="{{ field in instance['fields'] }}">
- <td><field-ref isolate="{{ isolate }}" ref="{{ field['decl'] }}"></field-ref></td>
- <td><instance-ref isolate="{{ isolate }}" ref="{{ field['value'] }}"></instance-ref></td>
- </tr>
- </tbody>
- </table>
- </template>
- <template if="{{ instance['error'] != null }}">
- <error-view error_obj="{{ instance['error'] }}"></error-view>
- </template>
- </div>
+ <style>
+ .content {
+ padding-left: 10%;
+ font: 400 14px 'Montserrat', sans-serif;
+ }
+ h1 {
+ font: 400 18px 'Montserrat', sans-serif;
+ }
+ .member {
+ vertical-align: top;
+ padding: 3px 0 3px 1em;
+ font: 400 14px 'Montserrat', sans-serif;
+ }
+ .memberBold {
+ vertical-align: top;
+ padding: 3px 0 3px 1em;
+ font: 400 14px 'Montserrat', sans-serif;
+ }
+ </style>
+
+ <template if="{{ instance['error'] != null }}">
+ <error-view error_obj="{{ instance['error'] }}"></error-view>
+ </template>
+
+ <template if="{{ instance['error'] == null }}">
+ <div class="content">
+ <!-- TODO(turnidge): Handle null instances. -->
+ <h1>instance of {{ instance['class']['user_name'] }}</h1>
+ <table>
+ <tbody><tr>
+ <td class="memberBold">class</td>
+ <td class="member">
+ <class-ref ref="{{ instance['class'] }}">
+ </class-ref>
+ </td>
+ </tr>
+ <tr template="" if="{{ instance['preview'] != null }}">
+ <td class="memberBold">preview</td>
+ <td class="member">{{ instance['preview'] }}</td>
+ </tr>
+ <tr>
+ <td class="memberBold">size</td>
+ <td class="member">{{ instance['size'] | formatSize }}</td>
+ </tr>
+ </tbody></table>
</div>
- </div>
- </div>
+
+ <hr>
+
+ <div class="content">
+ <template if="{{ instance['fields'].isNotEmpty }}">
+ fields ({{ instance['fields'].length }})
+ <curly-block>
+ <table>
+ <tbody><tr template="" repeat="{{ field in instance['fields'] }}">
+ <td class="member">
+ <field-ref ref="{{ field['decl'] }}"></field-ref>
+ </td>
+ <td class="member">
+ <instance-ref ref="{{ field['value'] }}"></instance-ref>
+ </td>
+ </tr>
+ </tbody></table>
+ </curly-block>
+ </template>
+
+ <template if="{{ instance['nativeFields'].isNotEmpty }}">
+ native fields ({{ instance['nativeFields'].length }})
+ <curly-block>
+ <table>
+ <tbody><tr template="" repeat="{{ field in instance['nativeFields'] }}">
+ <td class="member">[{{ field['index']}}]</td>
+ <td class="member">[{{ field['value']}}]</td>
+ </tr>
+ </tbody></table>
+ </curly-block>
+ </template>
+
+ <template if="{{ instance['elements'].isNotEmpty }}">
+ elements ({{ instance['elements'].length }})
+ <curly-block>
+ <table>
+ <tbody><tr template="" repeat="{{ element in instance['elements'] }}">
+ <td class="member">[{{ element['index']}}]</td>
+ <td class="member">
+ <instance-ref ref="{{ element['value'] }}">
+ </instance-ref>
+ </td>
+ </tr>
+ </tbody></table>
+ </curly-block>
+ </template>
+ </div>
+
+ <hr>
+
+ <div class="content">
+ <eval-box callback="{{ eval }}"></eval-box>
+ </div>
+ <br><br><br><br>
+ <br><br><br><br>
+ </template>
</template>
</polymer-element>
@@ -823,12 +1003,12 @@
</template>
</polymer-element>
-<polymer-element name="library-view" extends="isolate-element">
+<polymer-element name="library-view" extends="observatory-element">
<template>
<nav-bar>
<top-nav-menu></top-nav-menu>
- <isolate-nav-menu isolate="{{ isolate }}"></isolate-nav-menu>
- <library-nav-menu isolate="{{ isolate }}" library="{{ library }}" last="{{ true }}"></library-nav-menu>
+ <isolate-nav-menu isolate="{{ library.isolate }}"></isolate-nav-menu>
+ <library-nav-menu library="{{ library }}" last="{{ true }}"></library-nav-menu>
<nav-refresh callback="{{ refresh }}"></nav-refresh>
</nav-bar>
@@ -837,10 +1017,10 @@
<tbody>
<tr template="" repeat="{{ script in library['scripts']}}">
<td>
- {{ script['kind'] }}
+ {{ script.kind }}
</td>
<td>
- <script-ref isolate="{{ isolate }}" ref="{{ script }}"></script-ref>
+ <script-ref ref="{{ script }}"></script-ref>
</td>
</tr>
</tbody>
@@ -850,7 +1030,7 @@
<tbody>
<tr template="" repeat="{{ lib in library['libraries'] }}">
<td>
- <library-ref isolate="{{ isolate }}" ref="{{ lib }}"></library-ref>
+ <library-ref ref="{{ lib }}"></library-ref>
</td>
</tr>
</tbody>
@@ -859,8 +1039,8 @@
<table class="table table-hover">
<tbody>
<tr template="" repeat="{{ variable in library['variables'] }}">
- <td><field-ref isolate="{{ isolate }}" ref="{{ variable }}"></field-ref></td>
- <td><instance-ref isolate="{{ isolate }}" ref="{{ variable['value'] }}"></instance-ref></td>
+ <td><field-ref ref="{{ variable }}"></field-ref></td>
+ <td><instance-ref ref="{{ variable['value'] }}"></instance-ref></td>
</tr>
</tbody>
</table>
@@ -869,7 +1049,7 @@
<tbody>
<tr template="" repeat="{{ func in library['functions'] }}">
<td>
- <function-ref isolate="{{ isolate }}" ref="{{ func }}"></function-ref>
+ <function-ref ref="{{ func }}"></function-ref>
</td>
</tr>
</tbody>
@@ -885,10 +1065,10 @@
<tbody>
<tr template="" repeat="{{ cls in library['classes'] }}">
<td>
- <class-ref isolate="{{ isolate }}" ref="{{ cls }}"></class-ref>
+ <class-ref ref="{{ cls }}"></class-ref>
</td>
<td>
- <class-ref isolate="{{ isolate }}" ref="{{ cls }}" internal=""></class-ref>
+ <class-ref ref="{{ cls }}" internal=""></class-ref>
</td>
</tr>
</tbody>
@@ -897,11 +1077,54 @@
</template>
</polymer-element>
-<polymer-element name="heap-profile" extends="isolate-element">
+<polymer-element name="isolate-profile" extends="observatory-element">
+ <template>
+ <nav-bar>
+ <top-nav-menu></top-nav-menu>
+ <isolate-nav-menu isolate="{{ profile.isolate }}"></isolate-nav-menu>
+ <nav-menu link="." anchor="cpu profile" last="{{ true }}"></nav-menu>
+ <nav-refresh callback="{{ refresh }}"></nav-refresh>
+ </nav-bar>
+ <div class="row">
+ <div class="col-md-12">
+ <span>Top</span>
+ <select selectedindex="{{methodCountSelected}}" value="{{methodCounts[methodCountSelected]}}">
+ <option template="" repeat="{{count in methodCounts}}">{{count}}</option>
+ </select>
+ <span>exclusive methods</span>
+ </div>
+ </div>
+ <div class="row">
+ <div class="col-md-12">
+ <p>Refreshed at {{ refreshTime }} with {{ sampleCount }} samples.</p>
+ </div>
+ </div>
+ <table id="tableTree" class="table table-hover">
+ <thead>
+ <tr>
+ <th>Method</th>
+ <th>Exclusive</th>
+ <th>Caller</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr template="" repeat="{{row in tree.rows }}" style="{{}}">
+ <td on-click="{{toggleExpanded}}" class="{{ coloring(row) }}" style="{{ padding(row) }}">
+ <code-ref ref="{{ row.code }}"></code-ref>
+ </td>
+ <td class="{{ coloring(row) }}">{{row.columns[0]}}</td>
+ <td class="{{ coloring(row) }}">{{row.columns[1]}}</td>
+ </tr>
+ </tbody>
+ </table>
+ </template>
+
+</polymer-element>
+<polymer-element name="heap-profile" extends="observatory-element">
<template>
<nav-bar>
<top-nav-menu></top-nav-menu>
- <isolate-nav-menu isolate="{{ isolate }}"></isolate-nav-menu>
+ <isolate-nav-menu isolate="{{ profile.isolate }}"></isolate-nav-menu>
<nav-menu link="." anchor="heap profile" last="{{ true }}"></nav-menu>
<nav-refresh callback="{{ refresh }}"></nav-refresh>
</nav-bar>
@@ -964,72 +1187,31 @@
</template>
</polymer-element>
-<polymer-element name="isolate-profile" extends="isolate-element">
- <template>
- <nav-bar>
- <top-nav-menu></top-nav-menu>
- <isolate-nav-menu isolate="{{ isolate }}"></isolate-nav-menu>
- <nav-menu link="." anchor="cpu profile" last="{{ true }}"></nav-menu>
- <nav-refresh callback="{{ refresh }}"></nav-refresh>
- </nav-bar>
- <div class="row">
- <div class="col-md-12">
- <span>Top</span>
- <select selectedindex="{{methodCountSelected}}" value="{{methodCounts[methodCountSelected]}}">
- <option template="" repeat="{{count in methodCounts}}">{{count}}</option>
- </select>
- <span>exclusive methods</span>
- </div>
- </div>
- <div class="row">
- <div class="col-md-12">
- <p>Refreshed at {{ refreshTime }} with {{ sampleCount }} samples.</p>
- </div>
- </div>
- <table id="tableTree" class="table table-hover">
- <thead>
- <tr>
- <th>Method</th>
- <th>Exclusive</th>
- <th>Caller</th>
- <th>Inclusive</th>
- </tr>
- </thead>
- <tbody>
- <tr template="" repeat="{{row in tree.rows }}" style="{{}}">
- <td on-click="{{toggleExpanded}}" class="{{ coloring(row) }}" style="{{ padding(row) }}">
- <code-ref isolate="{{ isolate }}" ref="{{ row.code.codeRef }}"></code-ref>
- </td>
- <td class="{{ coloring(row) }}">{{row.columns[0]}}</td>
- <td class="{{ coloring(row) }}">{{row.columns[1]}}</td>
- <td class="{{ coloring(row) }}">{{row.columns[2]}}</td>
- </tr>
- </tbody>
- </table>
- </template>
-
-</polymer-element>
-<polymer-element name="script-view" extends="isolate-element">
+<polymer-element name="script-view" extends="observatory-element">
<template>
<nav-bar>
<top-nav-menu></top-nav-menu>
- <isolate-nav-menu isolate="{{ isolate }}">
+ <isolate-nav-menu isolate="{{ script.isolate }}">
</isolate-nav-menu>
- <library-nav-menu isolate="{{ isolate }}" library="{{ script.libraryRef }}"></library-nav-menu>
- <nav-menu link="." anchor="{{ script.shortName }}" last="{{ true }}"></nav-menu>
+ <library-nav-menu library="{{ script.library }}"></library-nav-menu>
+ <nav-menu link="." anchor="{{ script.name }}" last="{{ true }}">
+ <li>
+ <input type="checkbox" checked="{{ showCoverage }}">
+ <label>Show Coverage Data</label>
+ </li>
+ </nav-menu>
+ <nav-refresh callback="{{ refreshCoverage }}" label="Refresh Coverage"></nav-refresh>
+ <nav-refresh callback="{{ refresh }}">
+ </nav-refresh>
</nav-bar>
<div class="row">
<div class="col-md-8 col-md-offset-2">
- <div class="panel-heading">
- <button on-click="{{refreshCoverage}}">Refresh Coverage</button>
- {{ script.scriptRef['user_name'] }}
- {{ script.coveredPercentageFormatted() }}
- </div>
+ <div class="panel-heading">Script source for: {{ script.name }}</div>
<div class="panel-body">
<table style="width:100%">
<tbody>
- <tr template="" repeat="{{ line in script.linesForDisplay }}">
+ <tr template="" repeat="{{ line in script.lines }}">
<td style="{{ hitsStyle(line) }}"> </td>
<td style="font-family: consolas, courier, monospace;font-size: 1em;line-height: 1.2em;white-space: nowrap;">{{line.line}}</td>
<td width="99%" style="font-family: consolas, courier, monospace;font-size: 1em;line-height: 1.2em;white-space: pre;">{{line.text}}</td>
@@ -1042,7 +1224,7 @@
</template>
</polymer-element>
-<polymer-element name="stack-frame" extends="isolate-element">
+<polymer-element name="stack-frame" extends="observatory-element">
<template>
<style>
.member {
@@ -1056,15 +1238,15 @@
#{{ frame['depth'] }}
</div>
<div class="col-md-9">
- <function-ref isolate="{{ isolate }}" ref="{{ frame['function'] }}"></function-ref>
- ( <script-ref isolate="{{ isolate }}" ref="{{ frame['script'] }}" line="{{ frame['line'] }}">
+ <function-ref ref="{{ frame['function'] }}"></function-ref>
+ ( <script-ref ref="{{ frame['script'] }}" line="{{ frame['line'] }}">
</script-ref> )
<curly-block>
<table>
<tbody><tr template="" repeat="{{ v in frame['vars'] }}">
<td class="member">{{ v['name']}}</td>
<td class="member">
- <instance-ref isolate="{{ isolate }}" ref="{{ v['value'] }}"></instance-ref>
+ <instance-ref ref="{{ v['value'] }}"></instance-ref>
</td>
</tr>
</tbody></table>
@@ -1078,11 +1260,11 @@
</template>
</polymer-element>
-<polymer-element name="stack-trace" extends="isolate-element">
+<polymer-element name="stack-trace" extends="observatory-element">
<template>
<nav-bar>
<top-nav-menu></top-nav-menu>
- <isolate-nav-menu isolate="{{ isolate }}"></isolate-nav-menu>
+ <isolate-nav-menu isolate="{{ trace.isolate }}"></isolate-nav-menu>
<nav-menu link="." anchor="stack trace" last="{{ true }}"></nav-menu>
<nav-refresh callback="{{ refresh }}"></nav-refresh>
</nav-bar>
@@ -1097,7 +1279,7 @@
<ul class="list-group">
<template repeat="{{ frame in trace['members'] }}">
<li class="list-group-item">
- <stack-frame isolate="{{ isolate }}" frame="{{ frame }}"></stack-frame>
+ <stack-frame frame="{{ frame }}"></stack-frame>
</li>
</template>
</ul>
@@ -1105,78 +1287,14 @@
</template>
</polymer-element>
-<polymer-element name="message-viewer" extends="observatory-element">
- <!--
- This is a big switch statement which instantiates the custom element
- designated to display the message type.
- -->
- <template>
- <!-- If the message type is an IsolateList -->
- <template if="{{ messageType == 'IsolateList' }}">
- <isolate-list vm="{{ app.vm }}"></isolate-list>
- </template>
- <!-- If the message type is a StackTrace -->
- <template if="{{ messageType == 'StackTrace' }}">
- <stack-trace isolate="{{ app.isolate }}" trace="{{ message }}"></stack-trace>
- </template>
- <template if="{{ messageType == 'BreakpointList' }}">
- <breakpoint-list isolate="{{ app.isolate }}" msg="{{ message }}"></breakpoint-list>
- </template>
- <template if="{{ messageType == 'Error' }}">
- <error-view isolate="{{ app.isolate }}" error="{{ message }}"></error-view>
- </template>
- <template if="{{ messageType == 'Library' }}">
- <library-view isolate="{{ app.isolate }}" library="{{ message }}"></library-view>
- </template>
- <template if="{{ messageType == 'Class' }}">
- <class-view isolate="{{ app.isolate }}" cls="{{ message }}"></class-view>
- </template>
- <template if="{{ messageType == 'Field' }}">
- <field-view isolate="{{ app.isolate }}" field="{{ message }}"></field-view>
- </template>
- <template if="{{ messageType == 'Closure' }}">
- <instance-view isolate="{{ app.isolate }}" instance="{{ message }}"></instance-view>
- </template>
- <template if="{{ messageType == 'Instance' }}">
- <instance-view isolate="{{ app.isolate }}" instance="{{ message }}"></instance-view>
- </template>
- <template if="{{ messageType == 'Array' }}">
- <instance-view isolate="{{ app.isolate }}" instance="{{ message }}"></instance-view>
- </template>
- <template if="{{ messageType == 'GrowableObjectArray' }}">
- <instance-view isolate="{{ app.isolate }}" instance="{{ message }}"></instance-view>
- </template>
- <template if="{{ messageType == 'String' }}">
- <instance-view isolate="{{ app.isolate }}" instance="{{ message }}"></instance-view>
- </template>
- <template if="{{ messageType == 'Bool' }}">
- <instance-view isolate="{{ app.isolate }}" instance="{{ message }}"></instance-view>
- </template>
- <template if="{{ messageType == 'Smi' }}">
- <instance-view isolate="{{ app.isolate }}" instance="{{ message }}"></instance-view>
- </template>
- <template if="{{ messageType == 'Function' }}">
- <function-view isolate="{{ app.isolate }}" function="{{ message }}"></function-view>
- </template>
- <template if="{{ messageType == 'Code' }}">
- <code-view isolate="{{ app.isolate }}" code="{{ message['code'] }}"></code-view>
- </template>
- <template if="{{ messageType == 'Script' }}">
- <script-view isolate="{{ app.isolate }}" script="{{ message['script'] }}"></script-view>
- </template>
- <template if="{{ messageType == 'AllocationProfile' }}">
- <heap-profile isolate="{{ app.isolate }}" profile="{{ message }}"></heap-profile>
- </template>
- <template if="{{ messageType == 'Profile' }}">
- <isolate-profile isolate="{{ app.isolate }}" profile="{{ message }}"></isolate-profile>
- </template>
- <!-- Add new views and message types in the future here. -->
- </template>
+<polymer-element name="service-view" extends="observatory-element">
+ <!-- This element explicitly manages the child elements to avoid setting
+ an observable property on the old element to an invalid type. -->
</polymer-element>
<polymer-element name="response-viewer" extends="observatory-element">
<template>
- <message-viewer app="{{ app }}" message="{{ app.response }}"></message-viewer>
+ <service-view object="{{ app.response }}"></service-view>
</template>
</polymer-element><polymer-element name="observatory-application" extends="observatory-element">
diff --git a/runtime/bin/vmservice/client/deployed/web/index.html_bootstrap.dart.js b/runtime/bin/vmservice/client/deployed/web/index.html_bootstrap.dart.js
index c1683ab..74565cd 100644
--- a/runtime/bin/vmservice/client/deployed/web/index.html_bootstrap.dart.js
+++ b/runtime/bin/vmservice/client/deployed/web/index.html_bootstrap.dart.js
@@ -8542,8 +8542,8 @@
function DartObject(o) {
this.o = o;
}
-// Generated by dart2js, the Dart to JavaScript compiler version: 1.2.0-dev.5.15.
-(function($){function dart() {}var A=new dart
+// Generated by dart2js, the Dart to JavaScript compiler version: 1.3.0-dev.3.2.
+(function($){function dart(){this.x=0}var A=new dart
delete A.x
var B=new dart
delete B.x
@@ -8597,7 +8597,7 @@
init()
$=I.p
var $$={}
-;init.mangledNames={gAp:"__$library",gAu:"__$cls",gBW:"__$msg",gCO:"_oldPieChart",gF0:"__$cls",gGQ:"_newPieDataTable",gGV:"__$expanded",gGj:"_message",gHX:"__$displayValue",gHm:"tree",gHu:"__$busy",gJ0:"_newPieChart",gJh:"__$vm",gJo:"__$last",gKM:"$",gL4:"human",gLE:"timers",gLY:"_fullDataTable",gN7:"__$library",gOc:"_oldPieDataTable",gOl:"__$profile",gP:"value",gPe:"__$internal",gPy:"__$error",gRd:"line",gSB:"__$active",gSS:"__$methodCountSelected",gSw:"lines",gUp:"__$trace",gUy:"_collapsed",gUz:"__$script",gVa:"__$frame",gWT:"rows",gX3:"_first",gXR:"scripts",gXh:"__$instance",gYu:"address",gZ0:"codes",gZ6:"locationManager",gZ8:"__$function",gZC:"__$anchor",ga:"a",gah:"__$app",gb:"b",gbV:"_combinedDataTable",geH:"__$sampleCount",geJ:"__$code",geb:"__$json",gfb:"methodCounts",gi2:"isolates",gk5:"__$devtools",gkW:"__$app",gkf:"_count",gkg:"_combinedChart",gm0:"__$instruction",gm7:"machine",gnx:"__$callback",goH:"columns",gpC:"__$isolate",gpD:"__$profile",gq3:"_fullChart",gqO:"_id",gqY:"__$topExclusiveCodes",grU:"__$callback",gtT:"code",gtY:"__$ref",guy:"__$link",gvH:"index",gva:"instructions",gvk:"__$refreshTime",gvt:"__$field",gwd:"children",gxH:"__$app",gyt:"depth",gzf:"vm",gzh:"__$iconClass",gzw:"__$line"};init.mangledGlobalNames={DI:"_closeIconClass",DP:"ACCUMULATED_SIZE",V1g:"LIVE_AFTER_GC_SIZE",Vl:"_openIconClass",WY:"LIVE_AFTER_GC",b7:"ALLOCATED_BEFORE_GC",bQj:"ALLOCATED_BEFORE_GC_SIZE",d6:"ALLOCATED_SINCE_GC_SIZE",pC:"ACCUMULATED",r1K:"ALLOCATED_SINCE_GC"};(function (reflectionData) {
+;init.mangledNames={gAb:"__$lineMode",gAp:"__$library",gAu:"__$cls",gB3:"__$trace",gBA:"__$methodCountSelected",gBW:"__$msg",gCO:"_oldPieChart",gDt:"topExclusiveCodes",gDu:"exclusiveTicks",gF0:"__$cls",gFT:"__$sampleCount",gGQ:"_newPieDataTable",gGV:"__$expanded",gHJ:"__$showCoverage",gHX:"__$displayValue",gHm:"tree",gHq:"__$label",gHu:"__$busy",gJ0:"_newPieChart",gJo:"__$last",gKM:"$",gKU:"__$link",gL4:"human",gLE:"timers",gLY:"_fullDataTable",gLn:"__$callback",gMb:"endAddress",gN7:"__$library",gOc:"_oldPieDataTable",gOl:"__$profile",gP:"value",gPe:"__$internal",gPw:"__$isolate",gPy:"__$error",gRd:"line",gSB:"__$active",gSw:"lines",gUy:"_collapsed",gUz:"__$script",gV4:"__$anchor",gVS:"callers",gVa:"__$frame",gWT:"rows",gX3:"_first",gXh:"__$instance",gXx:"__$code",gYu:"address",gZ6:"locationManager",gZ8:"__$function",ga:"a",ga4:"text",gb:"b",gbV:"_combinedDataTable",geb:"__$json",gfF:"inclusiveTicks",gfb:"methodCounts",gfn:"__$text",ghw:"callees",gi2:"isolates",giy:"__$isolate",gk5:"__$devtools",gkW:"__$app",gkf:"_count",gkg:"_combinedChart",gm7:"machine",gmC:"__$object",gnx:"__$callback",goH:"columns",gpD:"__$profile",gq3:"_fullChart",gqO:"_id",grU:"__$callback",gtT:"code",gtY:"__$ref",gtf:"__$isolates",gtl:"_isolates",gu9:"hits",gvH:"index",gva:"instructions",gvg:"startAddress",gvk:"__$refreshTime",gvt:"__$field",gwd:"children",gxH:"__$app",gy4:"__$results",gyP:"addressTicks",gyt:"depth",gzf:"vm",gzh:"__$iconClass",gzw:"__$line"};init.mangledGlobalNames={BO:"ALLOCATED_BEFORE_GC",CF:"_closeIconClass",DP:"ACCUMULATED_SIZE",V1g:"LIVE_AFTER_GC_SIZE",Vl:"_openIconClass",WY:"LIVE_AFTER_GC",bQj:"ALLOCATED_BEFORE_GC_SIZE",d6:"ALLOCATED_SINCE_GC_SIZE",he:"hitStyleNone",iJN:"hitStyleExecuted",oM:"hitStyleNotExecuted",pC:"ACCUMULATED",r1:"ALLOCATED_SINCE_GC"};(function (reflectionData) {
"use strict";
function map(x){x={x:x};delete x.x;return x}
function processStatics(descriptor) {
@@ -8825,7 +8825,7 @@
if(typeof z!=="number")return z.g()
x=z+1
if(x>=y.length)return H.e(y,x)
-return y[x]},"call$1","eh",2,0,null,11,[]],
+return y[x]},"call$1","Tj",2,0,null,11,[]],
Nq:[function(a,b){var z,y,x
z=J.e1(a)
if(z==null)return
@@ -8836,10 +8836,10 @@
return y[x][b]},"call$2","BJ",4,0,null,11,[],12,[]],
Gv:{
"^":"a;",
-n:[function(a,b){return a===b},"call$1","gUJ",2,0,null,104,[]],
+n:[function(a,b){return a===b},"call$1","gUJ",2,0,null,109,[]],
giO:function(a){return H.eQ(a)},
bu:[function(a){return H.a5(a)},"call$0","gXo",0,0,null],
-T:[function(a,b){throw H.b(P.lr(a,b.gWa(),b.gnd(),b.gVm(),null))},"call$1","gxK",2,0,null,331,[]],
+T:[function(a,b){throw H.b(P.lr(a,b.gWa(),b.gnd(),b.gVm(),null))},"call$1","gxK",2,0,null,329,[]],
gbx:function(a){return new H.cu(H.dJ(a),null)},
$isGv:true,
"%":"DOMImplementation|SVGAnimatedEnumeration|SVGAnimatedNumberList|SVGAnimatedString"},
@@ -8851,7 +8851,7 @@
$isbool:true},
Jh:{
"^":"Null/Gv;",
-n:[function(a,b){return null==b},"call$1","gUJ",2,0,null,104,[]],
+n:[function(a,b){return null==b},"call$1","gUJ",2,0,null,109,[]],
bu:[function(a){return"null"},"call$0","gXo",0,0,null],
giO:function(a){return 0},
gbx:function(a){return C.Qf}},
@@ -8866,41 +8866,41 @@
Q:{
"^":"List/Gv;",
h:[function(a,b){if(!!a.fixed$length)H.vh(P.f("add"))
-a.push(b)},"call$1","ght",2,0,null,23,[]],
+a.push(b)},"call$1","ght",2,0,null,28,[]],
KI:[function(a,b){if(b<0||b>=a.length)throw H.b(new P.bJ("value "+b))
if(!!a.fixed$length)H.vh(P.f("removeAt"))
-return a.splice(b,1)[0]},"call$1","gNM",2,0,null,47,[]],
+return a.splice(b,1)[0]},"call$1","gNM",2,0,null,52,[]],
xe:[function(a,b,c){if(b<0||b>a.length)throw H.b(new P.bJ("value "+b))
if(!!a.fixed$length)H.vh(P.f("insert"))
-a.splice(b,0,c)},"call$2","gQG",4,0,null,47,[],23,[]],
+a.splice(b,0,c)},"call$2","gQG",4,0,null,52,[],28,[]],
Rz:[function(a,b){var z
if(!!a.fixed$length)H.vh(P.f("remove"))
for(z=0;z<a.length;++z)if(J.de(a[z],b)){a.splice(z,1)
-return!0}return!1},"call$1","gRI",2,0,null,129,[]],
-ev:[function(a,b){return H.VM(new H.U5(a,b),[null])},"call$1","gIR",2,0,null,115,[]],
+return!0}return!1},"call$1","guH",2,0,null,132,[]],
+ev:[function(a,b){return H.VM(new H.U5(a,b),[null])},"call$1","gIR",2,0,null,117,[]],
FV:[function(a,b){var z
-for(z=J.GP(b);z.G();)this.h(a,z.gl())},"call$1","gDY",2,0,null,332,[]],
-V1:[function(a){this.sB(a,0)},"call$0","gyP",0,0,null],
-aN:[function(a,b){return H.bQ(a,b)},"call$1","gjw",2,0,null,115,[]],
-ez:[function(a,b){return H.VM(new H.A8(a,b),[null,null])},"call$1","gIr",2,0,null,115,[]],
+for(z=J.GP(b);z.G();)this.h(a,z.gl())},"call$1","gDY",2,0,null,281,[]],
+V1:[function(a){this.sB(a,0)},"call$0","gRa",0,0,null],
+aN:[function(a,b){return H.bQ(a,b)},"call$1","gjw",2,0,null,117,[]],
+ez:[function(a,b){return H.VM(new H.A8(a,b),[null,null])},"call$1","gIr",2,0,null,117,[]],
zV:[function(a,b){var z,y,x,w
z=a.length
y=Array(z)
y.fixed$length=init
for(x=0;x<a.length;++x){w=H.d(a[x])
if(x>=z)return H.e(y,x)
-y[x]=w}return y.join(b)},"call$1","gnr",0,2,null,333,334,[]],
-eR:[function(a,b){return H.j5(a,b,null,null)},"call$1","gZo",2,0,null,292,[]],
+y[x]=w}return y.join(b)},"call$1","gNU",0,2,null,330,331,[]],
+eR:[function(a,b){return H.q9(a,b,null,null)},"call$1","gZo",2,0,null,198,[]],
Zv:[function(a,b){if(b>>>0!==b||b>=a.length)return H.e(a,b)
-return a[b]},"call$1","goY",2,0,null,47,[]],
+return a[b]},"call$1","goY",2,0,null,52,[]],
D6:[function(a,b,c){if(typeof b!=="number"||Math.floor(b)!==b)throw H.b(new P.AT(b))
if(b<0||b>a.length)throw H.b(P.TE(b,0,a.length))
if(c==null)c=a.length
else{if(typeof c!=="number"||Math.floor(c)!==c)throw H.b(new P.AT(c))
if(c<b||c>a.length)throw H.b(P.TE(c,b,a.length))}if(b===c)return H.VM([],[H.Kp(a,0)])
-return H.VM(a.slice(b,c),[H.Kp(a,0)])},function(a,b){return this.D6(a,b,null)},"Jk","call$2",null,"gli",2,2,null,77,120,[],121,[]],
+return H.VM(a.slice(b,c),[H.Kp(a,0)])},function(a,b){return this.D6(a,b,null)},"Jk","call$2",null,"gli",2,2,null,82,123,[],124,[]],
Mu:[function(a,b,c){H.K0(a,b,c)
-return H.j5(a,b,c,null)},"call$2","gYf",4,0,null,120,[],121,[]],
+return H.q9(a,b,c,null)},"call$2","gYf",4,0,null,123,[],124,[]],
gtH:function(a){if(a.length>0)return a[0]
throw H.b(new P.lj("No elements"))},
grZ:function(a){var z=a.length
@@ -8916,15 +8916,15 @@
if(typeof c!=="number")return H.s(c)
H.tb(a,c,a,b,z-c)
if(typeof b!=="number")return H.s(b)
-this.sB(a,z-(c-b))},"call$2","gYH",4,0,null,120,[],121,[]],
-Vr:[function(a,b){return H.Ck(a,b)},"call$1","gG2",2,0,null,115,[]],
+this.sB(a,z-(c-b))},"call$2","gYH",4,0,null,123,[],124,[]],
+Vr:[function(a,b){return H.Ck(a,b)},"call$1","gG2",2,0,null,117,[]],
GT:[function(a,b){if(!!a.immutable$list)H.vh(P.f("sort"))
-H.ZE(a,0,a.length-1,b)},"call$1","gH7",0,2,null,77,133,[]],
-XU:[function(a,b,c){return H.TK(a,b,c,a.length)},function(a,b){return this.XU(a,b,0)},"u8","call$2",null,"gIz",2,2,null,335,129,[],120,[]],
-Pk:[function(a,b,c){return H.eX(a,b,a.length-1)},function(a,b){return this.Pk(a,b,null)},"cn","call$2",null,"gph",2,2,null,77,129,[],120,[]],
+H.rd(a,b)},"call$1","gH7",0,2,null,82,122,[]],
+XU:[function(a,b,c){return H.TK(a,b,c,a.length)},function(a,b){return this.XU(a,b,0)},"u8","call$2",null,"gIz",2,2,null,332,132,[],123,[]],
+Pk:[function(a,b,c){return H.lO(a,b,a.length-1)},function(a,b){return this.Pk(a,b,null)},"cn","call$2",null,"gcb",2,2,null,82,132,[],123,[]],
tg:[function(a,b){var z
for(z=0;z<a.length;++z)if(J.de(a[z],b))return!0
-return!1},"call$1","gdj",2,0,null,104,[]],
+return!1},"call$1","gdj",2,0,null,109,[]],
gl0:function(a){return a.length===0},
gor:function(a){return a.length!==0},
bu:[function(a){return H.mx(a,"[","]")},"call$0","gXo",0,0,null],
@@ -8932,27 +8932,27 @@
if(b)return H.VM(a.slice(),[H.Kp(a,0)])
else{z=H.VM(a.slice(),[H.Kp(a,0)])
z.fixed$length=init
-return z}},function(a){return this.tt(a,!0)},"br","call$1$growable",null,"gRV",0,3,null,336,337,[]],
+return z}},function(a){return this.tt(a,!0)},"br","call$1$growable",null,"gRV",0,3,null,333,334,[]],
gA:function(a){return H.VM(new H.a7(a,a.length,0,null),[H.Kp(a,0)])},
giO:function(a){return H.eQ(a)},
gB:function(a){return a.length},
sB:function(a,b){if(typeof b!=="number"||Math.floor(b)!==b)throw H.b(new P.AT(b))
-if(b<0)throw H.b(P.N(b))
+if(b<0)throw H.b(new P.bJ("value "+H.d(b)))
if(!!a.fixed$length)H.vh(P.f("set length"))
a.length=b},
t:[function(a,b){if(typeof b!=="number"||Math.floor(b)!==b)throw H.b(new P.AT(b))
if(b>=a.length||b<0)throw H.b(P.N(b))
-return a[b]},"call$1","gIA",2,0,null,47,[]],
+return a[b]},"call$1","gIA",2,0,null,52,[]],
u:[function(a,b,c){if(!!a.immutable$list)H.vh(P.f("indexed set"))
if(typeof b!=="number"||Math.floor(b)!==b)throw H.b(new P.AT(b))
-if(b>=a.length||b<0)throw H.b(new P.bJ("value "+H.d(b)))
-a[b]=c},"call$2","gj3",4,0,null,47,[],23,[]],
+if(b>=a.length||b<0)throw H.b(P.N(b))
+a[b]=c},"call$2","gj3",4,0,null,52,[],28,[]],
$isList:true,
$isList:true,
-$asWO:null,
+$aszM:null,
$isyN:true,
-$iscX:true,
-$ascX:null,
+$isQV:true,
+$asQV:null,
static:{Qi:function(a,b){var z
if(typeof a!=="number"||Math.floor(a)!==a||a<0)throw H.b(P.u("Length must be a non-negative integer: "+H.d(a)))
z=H.VM(new Array(a),[b])
@@ -8976,73 +8976,71 @@
if(this.gzP(a)===z)return 0
if(this.gzP(a))return-1
return 1}return 0}else if(isNaN(a)){if(this.gG0(b))return 0
-return 1}else return-1},"call$1","gYc",2,0,null,188,[]],
+return 1}else return-1},"call$1","gYc",2,0,null,187,[]],
gzP:function(a){return a===0?1/a<0:a<0},
gG0:function(a){return isNaN(a)},
gx8:function(a){return isFinite(a)},
-JV:[function(a,b){return a%b},"call$1","gKG",2,0,null,188,[]],
+JV:[function(a,b){return a%b},"call$1","gDH",2,0,null,187,[]],
yu:[function(a){var z
if(a>=-2147483648&&a<=2147483647)return a|0
if(isFinite(a)){z=a<0?Math.ceil(a):Math.floor(a)
return z+0}throw H.b(P.f(''+a))},"call$0","gDi",0,0,null],
-HG:[function(a){return this.yu(this.UD(a))},"call$0","gD5",0,0,null],
+HG:[function(a){return this.yu(this.UD(a))},"call$0","gA0",0,0,null],
UD:[function(a){if(a<0)return-Math.round(-a)
else return Math.round(a)},"call$0","gE8",0,0,null],
yM:[function(a,b){var z
if(b>20)throw H.b(P.C3(b))
z=a.toFixed(b)
if(a===0&&this.gzP(a))return"-"+z
-return z},"call$1","gfE",2,0,null,338,[]],
+return z},"call$1","gfE",2,0,null,335,[]],
WZ:[function(a,b){if(b<2||b>36)throw H.b(P.C3(b))
-return a.toString(b)},"call$1","gEI",2,0,null,28,[]],
+return a.toString(b)},"call$1","gEI",2,0,null,33,[]],
bu:[function(a){if(a===0&&1/a<0)return"-0.0"
else return""+a},"call$0","gXo",0,0,null],
giO:function(a){return a&0x1FFFFFFF},
J:[function(a){return-a},"call$0","gVd",0,0,null],
g:[function(a,b){if(typeof b!=="number")throw H.b(new P.AT(b))
-return a+b},"call$1","gF1n",2,0,null,104,[]],
+return a+b},"call$1","gF1n",2,0,null,109,[]],
W:[function(a,b){if(typeof b!=="number")throw H.b(P.u(b))
-return a-b},"call$1","gTG",2,0,null,104,[]],
+return a-b},"call$1","gTG",2,0,null,109,[]],
V:[function(a,b){if(typeof b!=="number")throw H.b(new P.AT(b))
-return a/b},"call$1","gJj",2,0,null,104,[]],
+return a/b},"call$1","gJj",2,0,null,109,[]],
U:[function(a,b){if(typeof b!=="number")throw H.b(new P.AT(b))
-return a*b},"call$1","gEH",2,0,null,104,[]],
+return a*b},"call$1","gEH",2,0,null,109,[]],
Y:[function(a,b){var z=a%b
if(z===0)return 0
if(z>0)return z
if(b<0)return z-b
-else return z+b},"call$1","gQR",2,0,null,104,[]],
+else return z+b},"call$1","gQR",2,0,null,109,[]],
Z:[function(a,b){if((a|0)===a&&(b|0)===b&&0!==b&&-1!==b)return a/b|0
-else return this.yu(a/b)},"call$1","guP",2,0,null,104,[]],
-cU:[function(a,b){return(a|0)===a?a/b|0:this.yu(a/b)},"call$1","gPf",2,0,null,104,[]],
+else return this.yu(a/b)},"call$1","guP",2,0,null,109,[]],
+cU:[function(a,b){return(a|0)===a?a/b|0:this.yu(a/b)},"call$1","gPf",2,0,null,109,[]],
O:[function(a,b){if(b<0)throw H.b(new P.AT(b))
-return b>31?0:a<<b>>>0},"call$1","gq8",2,0,null,104,[]],
-W4:[function(a,b){return b>31?0:a<<b>>>0},"call$1","gGu",2,0,null,104,[]],
+return b>31?0:a<<b>>>0},"call$1","gq8",2,0,null,109,[]],
+W4:[function(a,b){return b>31?0:a<<b>>>0},"call$1","gGu",2,0,null,109,[]],
m:[function(a,b){var z
if(b<0)throw H.b(new P.AT(b))
if(a>0)z=b>31?0:a>>>b
else{z=b>31?31:b
-z=a>>z>>>0}return z},"call$1","gyp",2,0,null,104,[]],
+z=a>>z>>>0}return z},"call$1","gyp",2,0,null,109,[]],
GG:[function(a,b){var z
if(a>0)z=b>31?0:a>>>b
else{z=b>31?31:b
-z=a>>z>>>0}return z},"call$1","gMe",2,0,null,104,[]],
+z=a>>z>>>0}return z},"call$1","gMe",2,0,null,109,[]],
i:[function(a,b){if(typeof b!=="number")throw H.b(new P.AT(b))
-return(a&b)>>>0},"call$1","gAU",2,0,null,104,[]],
-k:[function(a,b){if(typeof b!=="number")throw H.b(new P.AT(b))
-return(a|b)>>>0},"call$1","gX9",2,0,null,104,[]],
+return(a&b)>>>0},"call$1","gAU",2,0,null,109,[]],
w:[function(a,b){if(typeof b!=="number")throw H.b(P.u(b))
-return(a^b)>>>0},"call$1","gttE",2,0,null,104,[]],
+return(a^b)>>>0},"call$1","gttE",2,0,null,109,[]],
C:[function(a,b){if(typeof b!=="number")throw H.b(P.u(b))
-return a<b},"call$1","gix",2,0,null,104,[]],
+return a<b},"call$1","gix",2,0,null,109,[]],
D:[function(a,b){if(typeof b!=="number")throw H.b(P.u(b))
-return a>b},"call$1","gh1",2,0,null,104,[]],
+return a>b},"call$1","gh1",2,0,null,109,[]],
E:[function(a,b){if(typeof b!=="number")throw H.b(new P.AT(b))
-return a<=b},"call$1","gf5",2,0,null,104,[]],
+return a<=b},"call$1","gER",2,0,null,109,[]],
F:[function(a,b){if(typeof b!=="number")throw H.b(new P.AT(b))
-return a>=b},"call$1","gNH",2,0,null,104,[]],
+return a>=b},"call$1","gNH",2,0,null,109,[]],
$isnum:true,
-static:{"^":"zc,LN"}},
+static:{"^":"SAz,LN"}},
im:{
"^":"int/P;",
gbx:function(a){return C.yw},
@@ -9056,17 +9054,17 @@
$isnum:true},
vT:{
"^":"im;"},
-qa:{
+VP:{
"^":"vT;"},
BQ:{
-"^":"qa;"},
+"^":"VP;"},
O:{
"^":"String/Gv;",
j:[function(a,b){if(typeof b!=="number"||Math.floor(b)!==b)throw H.b(P.u(b))
if(b<0)throw H.b(P.N(b))
if(b>=a.length)throw H.b(P.N(b))
-return a.charCodeAt(b)},"call$1","gSu",2,0,null,47,[]],
-dd:[function(a,b){return H.ZT(a,b)},"call$1","gYv",2,0,null,339,[]],
+return a.charCodeAt(b)},"call$1","gSu",2,0,null,52,[]],
+dd:[function(a,b){return H.ZT(a,b)},"call$1","gYv",2,0,null,336,[]],
wL:[function(a,b,c){var z,y,x,w
if(c<0||c>b.length)throw H.b(P.TE(c,0,b.length))
z=a.length
@@ -9077,21 +9075,21 @@
if(w>=y)H.vh(P.N(w))
w=b.charCodeAt(w)
if(x>=z)H.vh(P.N(x))
-if(w!==a.charCodeAt(x))return}return new H.tQ(c,b,a)},"call$2","grS",2,2,null,335,26,[],120,[]],
+if(w!==a.charCodeAt(x))return}return new H.tQ(c,b,a)},"call$2","grS",2,2,null,332,31,[],123,[]],
g:[function(a,b){if(typeof b!=="string")throw H.b(new P.AT(b))
-return a+b},"call$1","gF1n",2,0,null,104,[]],
+return a+b},"call$1","gF1n",2,0,null,109,[]],
Tc:[function(a,b){var z,y
z=b.length
y=a.length
if(z>y)return!1
-return b===this.yn(a,y-z)},"call$1","gvi",2,0,null,104,[]],
-h8:[function(a,b,c){return H.ys(a,b,c)},"call$2","gcB",4,0,null,105,[],106,[]],
-Fr:[function(a,b){return a.split(b)},"call$1","gOG",2,0,null,98,[]],
+return b===this.yn(a,y-z)},"call$1","gvi",2,0,null,109,[]],
+h8:[function(a,b,c){return H.ys(a,b,c)},"call$2","gcB",4,0,null,110,[],111,[]],
+Fr:[function(a,b){return a.split(b)},"call$1","gOG",2,0,null,103,[]],
Qi:[function(a,b,c){var z
if(c>a.length)throw H.b(P.TE(c,0,a.length))
-if(typeof b==="string"){z=c+b.length
+z=c+b.length
if(z>a.length)return!1
-return b===a.substring(c,z)}return J.I8(b,a,c)!=null},function(a,b){return this.Qi(a,b,0)},"nC","call$2",null,"gcV",2,2,null,335,98,[],47,[]],
+return b===a.substring(c,z)},function(a,b){return this.Qi(a,b,0)},"nC","call$2",null,"gcV",2,2,null,332,103,[],52,[]],
Nj:[function(a,b,c){var z
if(typeof b!=="number"||Math.floor(b)!==b)H.vh(P.u(b))
if(c==null)c=a.length
@@ -9100,19 +9098,35 @@
if(z.C(b,0))throw H.b(P.N(b))
if(z.D(b,c))throw H.b(P.N(b))
if(J.z8(c,a.length))throw H.b(P.N(c))
-return a.substring(b,c)},function(a,b){return this.Nj(a,b,null)},"yn","call$2",null,"gKj",2,2,null,77,80,[],130,[]],
+return a.substring(b,c)},function(a,b){return this.Nj(a,b,null)},"yn","call$2",null,"gKj",2,2,null,82,85,[],133,[]],
hc:[function(a){return a.toLowerCase()},"call$0","gCW",0,0,null],
-bS:[function(a){var z,y,x,w,v
-for(z=a.length,y=0;y<z;){if(y>=z)H.vh(P.N(y))
-x=a.charCodeAt(y)
-if(x===32||x===13||J.Ga(x))++y
-else break}if(y===z)return""
-for(w=z;!0;w=v){v=w-1
-if(v<0)H.vh(P.N(v))
-if(v>=z)H.vh(P.N(v))
-x=a.charCodeAt(v)
-if(x===32||x===13||J.Ga(x));else break}if(y===0&&w===z)return a
-return a.substring(y,w)},"call$0","gZH",0,0,null],
+bS:[function(a){var z,y,x,w,v,u,t,s
+z=a.trim()
+y=z.length
+if(y===0)return z
+x=this.j(z,0)
+if(x===133||x===65279){for(w=1;w<y;){if(w>=y)H.vh(P.N(w))
+v=z.charCodeAt(w)
+if(v===32||v===13||J.Ga(v))++w
+else break}if(w===y)return""}else w=0
+u=y-1
+t=this.j(z,u)
+if(t===133||t===65279)for(;!0;u=s){s=u-1
+if(s<0)H.vh(P.N(s))
+if(s>=y)H.vh(P.N(s))
+v=z.charCodeAt(s)
+if(v===32||v===13||J.Ga(v));else break}else u=y
+if(w===0&&u===y)return z
+return z.substring(w,u)},"call$0","gZH",0,0,null],
+U:[function(a,b){var z,y
+if(typeof b!=="number")return H.s(b)
+if(0>=b)return""
+if(b===1||a.length===0)return a
+if(b!==b>>>0)throw H.b(C.IU)
+for(z=a,y="";!0;){if((b&1)===1)y=z+y
+b=b>>>1
+if(b===0)break
+z+=z}return y},"call$1","gEH",2,0,null,337,[]],
XU:[function(a,b,c){var z,y,x,w
if(b==null)H.vh(new P.AT(null))
if(c<0||c>a.length)throw H.b(P.TE(c,0,a.length))
@@ -9120,7 +9134,7 @@
z=J.rY(b)
if(typeof b==="object"&&b!==null&&!!z.$isVR){y=b.yk(a,c)
return y==null?-1:y.QK.index}for(x=a.length,w=c;w<=x;++w)if(z.wL(b,a,w)!=null)return w
-return-1},function(a,b){return this.XU(a,b,0)},"u8","call$2",null,"gIz",2,2,null,335,98,[],120,[]],
+return-1},function(a,b){return this.XU(a,b,0)},"u8","call$2",null,"gIz",2,2,null,332,103,[],123,[]],
Pk:[function(a,b,c){var z,y,x
c=a.length
if(typeof b==="string"){z=b.length
@@ -9131,17 +9145,17 @@
x=c
while(!0){if(typeof x!=="number")return x.F()
if(!(x>=0))break
-if(z.wL(b,a,x)!=null)return x;--x}return-1},function(a,b){return this.Pk(a,b,null)},"cn","call$2",null,"gph",2,2,null,77,98,[],120,[]],
+if(z.wL(b,a,x)!=null)return x;--x}return-1},function(a,b){return this.Pk(a,b,null)},"cn","call$2",null,"gcb",2,2,null,82,103,[],123,[]],
Is:[function(a,b,c){if(b==null)H.vh(new P.AT(null))
if(c>a.length)throw H.b(P.TE(c,0,a.length))
-return H.m2(a,b,c)},function(a,b){return this.Is(a,b,0)},"tg","call$2",null,"gdj",2,2,null,335,104,[],80,[]],
+return H.m2(a,b,c)},function(a,b){return this.Is(a,b,0)},"tg","call$2",null,"gdj",2,2,null,332,109,[],85,[]],
gl0:function(a){return a.length===0},
gor:function(a){return a.length!==0},
iM:[function(a,b){var z
if(typeof b!=="string")throw H.b(new P.AT(b))
if(a===b)z=0
else z=a<b?-1:1
-return z},"call$1","gYc",2,0,null,104,[]],
+return z},"call$1","gYc",2,0,null,109,[]],
bu:[function(a){return a},"call$0","gXo",0,0,null],
giO:function(a){var z,y,x
for(z=a.length,y=0,x=0;x<z;++x){y=536870911&y+a.charCodeAt(x)
@@ -9153,51 +9167,63 @@
gB:function(a){return a.length},
t:[function(a,b){if(typeof b!=="number"||Math.floor(b)!==b)throw H.b(new P.AT(b))
if(b>=a.length||b<0)throw H.b(P.N(b))
-return a[b]},"call$1","gIA",2,0,null,47,[]],
+return a[b]},"call$1","gIA",2,0,null,52,[]],
$isString:true,
static:{Ga:[function(a){if(a<256)switch(a){case 9:case 10:case 11:case 12:case 13:case 32:case 133:case 160:return!0
default:return!1}switch(a){case 5760:case 6158:case 8192:case 8193:case 8194:case 8195:case 8196:case 8197:case 8198:case 8199:case 8200:case 8201:case 8202:case 8232:case 8233:case 8239:case 8287:case 12288:case 65279:return!0
default:return!1}},"call$1","BD",2,0,null,13,[]]}}}],["_isolate_helper","dart:_isolate_helper",,H,{
"^":"",
-zd:[function(a,b){var z=a.vV(b)
+zd:[function(a,b){var z=a.vV(0,b)
init.globalState.Xz.bL()
return z},"call$2","Ag",4,0,null,14,[],15,[]],
-oT:[function(a){var z,y,x,w,v
-z=new H.f0(0,0,1,null,null,null,null,null,null,null,null,null,a)
-z.i6(a)
-init.globalState=z
+ox:[function(){var z=init.globalState.Xz
+z.GL=z.GL-1},"call$0","q4",0,0,null],
+oT:[function(a,b){var z,y,x,w,v,u
+z={}
+z.a=b
+b=b
+z.a=b
+if(b==null){b=[]
+z.a=b
+y=b}else y=b
+x=J.x(y)
+if(typeof y!=="object"||y===null||y.constructor!==Array&&!x.$isList)throw H.b(new P.AT("Arguments to main must be a List: "+H.d(y)))
+y=new H.f0(0,0,1,null,null,null,null,null,null,null,null,null,a)
+y.i6(a)
+init.globalState=y
if(init.globalState.EF===!0)return
-z=init.globalState
-y=z.Hg
-z.Hg=y+1
-z=P.L5(null,null,null,J.im,H.yo)
-x=P.Ls(null,null,null,J.im)
-w=new H.yo(0,null,!1)
-v=new H.aX(y,z,x,new I(),w,P.Jz(),!1,[],P.Ls(null,null,null,null))
-x.h(0,0)
-v.aU(0,w)
-init.globalState.Nr=v
-init.globalState.N0=v
-z=H.N7()
-y=H.KT(z,[z]).BD(a)
-if(y)v.vV(new H.PK(a))
-else{z=H.KT(z,[z,z]).BD(a)
-if(z)v.vV(new H.JO(a))
-else v.vV(a)}init.globalState.Xz.bL()},"call$1","wr",2,0,null,16,[]],
+y=init.globalState
+x=y.Hg
+y.Hg=x+1
+y=P.L5(null,null,null,J.im,H.yo)
+w=P.Ls(null,null,null,J.im)
+v=new H.yo(0,null,!1)
+u=new H.aX(x,y,w,new I(),v,P.Jz(),P.Jz(),!1,[],P.Ls(null,null,null,null),null,!1)
+w.h(0,0)
+u.aU(0,v)
+init.globalState.Nr=u
+init.globalState.N0=u
+y=H.N7()
+x=H.KT(y,[y]).BD(a)
+if(x)u.vV(0,new H.PK(z,a))
+else{y=H.KT(y,[y,y]).BD(a)
+if(y)u.vV(0,new H.JO(z,a))
+else u.vV(0,a)}init.globalState.Xz.bL()},"call$2","wr",4,0,null,16,[],17,[]],
yl:[function(){var z=init.currentScript
if(z!=null)return String(z.src)
-if(typeof version=="function"&&typeof os=="object"&&"system" in os)return H.ZV()
+if(typeof version=="function"&&typeof os=="object"&&"system" in os)return H.fU()
if(typeof version=="function"&&typeof system=="function")return thisFilename()
+if(init.globalState.EF===!0)return H.fU()
return},"call$0","dY",0,0,null],
-ZV:[function(){var z,y
+fU:[function(){var z,y
z=new Error().stack
if(z==null){z=(function() {try { throw new Error() } catch(e) { return e.stack }})()
if(z==null)throw H.b(P.f("No stack trace"))}y=z.match(new RegExp("^ *at [^(]*\\((.*):[0-9]*:[0-9]*\\)$","m"))
if(y!=null)return y[1]
y=z.match(new RegExp("^[^@]*@(.*):[0-9]*$","m"))
if(y!=null)return y[1]
-throw H.b(P.f("Cannot extract URI from \""+z+"\""))},"call$0","Sx",0,0,null],
-Mg:[function(a,b){var z,y,x,w,v,u,t,s,r,q,p,o,n,m,l,k,j
+throw H.b(P.f("Cannot extract URI from \""+H.d(z)+"\""))},"call$0","mZ",0,0,null],
+Mg:[function(a,b){var z,y,x,w,v,u,t,s,r,q,p,o,n,m,l,k,j,i,h
z=H.Hh(b.data)
y=J.U6(z)
switch(y.t(z,"command")){case"start":init.globalState.oL=y.t(z,"id")
@@ -9206,37 +9232,39 @@
v=y.t(z,"args")
u=H.Hh(y.t(z,"msg"))
t=y.t(z,"isSpawnUri")
-s=H.Hh(y.t(z,"replyTo"))
+s=y.t(z,"startPaused")
+r=H.Hh(y.t(z,"replyTo"))
y=init.globalState
-r=y.Hg
-y.Hg=r+1
+q=y.Hg
+y.Hg=q+1
y=P.L5(null,null,null,J.im,H.yo)
-q=P.Ls(null,null,null,J.im)
-p=new H.yo(0,null,!1)
-o=new H.aX(r,y,q,new I(),p,P.Jz(),!1,[],P.Ls(null,null,null,null))
-q.h(0,0)
-o.aU(0,p)
-init.globalState.Xz.Rk.NZ(0,new H.IY(o,new H.jl(w,v,u,t,s),"worker-start"))
-init.globalState.N0=o
+p=P.Ls(null,null,null,J.im)
+o=new H.yo(0,null,!1)
+n=new H.aX(q,y,p,new I(),o,P.Jz(),P.Jz(),!1,[],P.Ls(null,null,null,null),null,!1)
+p.h(0,0)
+n.aU(0,o)
+init.globalState.Xz.Rk.NZ(0,new H.IY(n,new H.jl(w,v,u,t,s,r),"worker-start"))
+init.globalState.N0=n
init.globalState.Xz.bL()
break
-case"spawn-worker":r=y.t(z,"functionName")
-n=y.t(z,"uri")
-q=y.t(z,"args")
-p=y.t(z,"msg")
-m=y.t(z,"isSpawnUri")
+case"spawn-worker":q=y.t(z,"functionName")
+m=y.t(z,"uri")
+p=y.t(z,"args")
+o=y.t(z,"msg")
+l=y.t(z,"isSpawnUri")
+k=y.t(z,"startPaused")
y=y.t(z,"replyPort")
-if(n==null)n=$.Cl()
-l=new Worker(n)
-l.onmessage=function(e) { H.Mg(l, e); }
-k=init.globalState
-j=k.hJ
-k.hJ=j+1
-$.p6().u(0,l,j)
-init.globalState.XC.u(0,j,l)
-l.postMessage(H.Gy(H.B7(["command","start","id",j,"replyTo",H.Gy(y),"args",q,"msg",H.Gy(p),"isSpawnUri",m,"functionName",r],P.L5(null,null,null,null,null))))
+if(m==null)m=$.Cl()
+j=new Worker(m)
+j.onmessage=function(e) { H.Mg(j, e); }
+i=init.globalState
+h=i.hJ
+i.hJ=h+1
+$.p6().u(0,j,h)
+init.globalState.XC.u(0,h,j)
+j.postMessage(H.Gy(H.B7(["command","start","id",h,"replyTo",H.Gy(y),"args",p,"msg",H.Gy(o),"isSpawnUri",l,"startPaused",k,"functionName",q],P.L5(null,null,null,null,null))))
break
-case"message":if(y.t(z,"port")!=null)J.H4(y.t(z,"port"),y.t(z,"msg"))
+case"message":if(y.t(z,"port")!=null)J.Sq(y.t(z,"port"),y.t(z,"msg"))
init.globalState.Xz.bL()
break
case"close":init.globalState.XC.Rz(0,$.p6().t(0,a))
@@ -9246,39 +9274,51 @@
case"log":H.ZF(y.t(z,"msg"))
break
case"print":if(init.globalState.EF===!0){y=init.globalState.vd
-r=H.Gy(H.B7(["command","print","msg",z],P.L5(null,null,null,null,null)))
+q=H.Gy(H.B7(["command","print","msg",z],P.L5(null,null,null,null,null)))
y.toString
-self.postMessage(r)}else P.JS(y.t(z,"msg"))
+self.postMessage(q)}else P.JS(y.t(z,"msg"))
break
case"error":throw H.b(y.t(z,"msg"))
-default:}},"call$2","NB",4,0,null,17,[],18,[]],
+default:}},"call$2","NB",4,0,null,18,[],19,[]],
ZF:[function(a){var z,y,x,w
if(init.globalState.EF===!0){y=init.globalState.vd
x=H.Gy(H.B7(["command","log","msg",a],P.L5(null,null,null,null,null)))
y.toString
self.postMessage(x)}else try{$.jk().console.log(a)}catch(w){H.Ru(w)
z=new H.XO(w,null)
-throw H.b(P.FM(z))}},"call$1","o3",2,0,null,19,[]],
+throw H.b(P.FM(z))}},"call$1","o3",2,0,null,20,[]],
+Ws:[function(a,b,c,d,e,f){var z,y,x,w
+z=init.globalState.N0
+y=z.jO
+$.te=$.te+("_"+y)
+$.eb=$.eb+("_"+y)
+y=z.EE
+x=init.globalState.N0.jO
+w=z.Qy
+J.Sq(f,["spawned",new H.Z6(y,x),w,z.PX])
+x=new H.Vg(a,b,c,d)
+if(e===!0){z.v8(w,w)
+init.globalState.Xz.Rk.NZ(0,new H.IY(z,x,"start isolate"))}else x.call$0()},"call$6","op",12,0,null,21,[],17,[],22,[],23,[],24,[],25,[]],
Gy:[function(a){var z
if(init.globalState.ji===!0){z=new H.NA(0,new H.X1())
z.il=new H.fP(null)
return z.h7(a)}else{z=new H.NO(new H.X1())
z.il=new H.fP(null)
-return z.h7(a)}},"call$1","hX",2,0,null,20,[]],
+return z.h7(a)}},"call$1","hX",2,0,null,22,[]],
Hh:[function(a){if(init.globalState.ji===!0)return new H.II(null).QS(a)
-else return a},"call$1","m6",2,0,null,20,[]],
-VO:[function(a){return a==null||typeof a==="string"||typeof a==="number"||typeof a==="boolean"},"call$1","vP",2,0,null,21,[]],
-ZR:[function(a){return a==null||typeof a==="string"||typeof a==="number"||typeof a==="boolean"},"call$1","dD",2,0,null,21,[]],
+else return a},"call$1","jr",2,0,null,22,[]],
+VO:[function(a){return a==null||typeof a==="string"||typeof a==="number"||typeof a==="boolean"},"call$1","vP",2,0,null,26,[]],
+ZR:[function(a){return a==null||typeof a==="string"||typeof a==="number"||typeof a==="boolean"},"call$1","dD",2,0,null,26,[]],
PK:{
-"^":"Tp:113;a",
-call$0:[function(){this.a.call$1([])},"call$0",null,0,0,null,"call"],
+"^":"Tp:115;a,b",
+call$0:[function(){this.b.call$1(this.a.a)},"call$0",null,0,0,null,"call"],
$isEH:true},
JO:{
-"^":"Tp:113;b",
-call$0:[function(){this.b.call$2([],null)},"call$0",null,0,0,null,"call"],
+"^":"Tp:115;a,c",
+call$0:[function(){this.c.call$2(this.a.a,null)},"call$0",null,0,0,null,"call"],
$isEH:true},
f0:{
-"^":"a;Hg,oL,hJ,N0,Nr,Xz,vu,EF,ji,i2@,vd,XC,w2<",
+"^":"a;Hg,oL,hJ,N0,Nr,Xz,vu,EF,ji,i2*,vd,XC,w2<",
i6:function(a){var z,y,x,w
z=$.Qm()==null
y=$.Nl()
@@ -9297,9 +9337,10 @@
$.jk().onmessage=w
$.jk().dartPrint = function (object) {}}}},
aX:{
-"^":"a;jO>,Gx,fW,En<,EE<,Qy,RW<,C9<,lJ",
+"^":"a;jO>,Gx,fW,En<,EE<,Qy,PX,RW<,C9<,lJ,Jp,pa",
v8:[function(a,b){if(!this.Qy.n(0,a))return
-if(this.lJ.h(0,b)&&!this.RW)this.RW=!0},"call$2","gfU",4,0,null,340,[],341,[]],
+if(this.lJ.h(0,b)&&!this.RW)this.RW=!0
+this.PC()},"call$2","gfU",4,0,null,338,[],339,[]],
NR:[function(a){var z,y,x,w,v,u
if(!this.RW)return
z=this.lJ
@@ -9315,30 +9356,55 @@
if(w<0||w>=u)return H.e(v,w)
v[w]=x
if(w===y.eZ)y.VW()
-y.qT=y.qT+1}this.RW=!1}},"call$1","gtS",2,0,null,341,[]],
-vV:[function(a){var z,y
+y.qT=y.qT+1}this.RW=!1}this.PC()},"call$1","gtS",2,0,null,339,[]],
+iK:[function(a){var z=this.Jp
+if(z==null){z=[]
+this.Jp=z}if(J.kE(z,a))return
+this.Jp.push(a)},"call$1","gYd",2,0,null,340,[]],
+Hh:[function(a){var z=this.Jp
+if(z==null)return
+J.V1(z,a)},"call$1","gr9",2,0,null,340,[]],
+MZ:[function(a,b){if(!this.PX.n(0,a))return
+this.pa=b},"call$2","gvm",4,0,null,338,[],341,[]],
+Wq:[function(a,b){if(J.de(b,2))init.globalState.Xz.Rk.NZ(0,new H.IY(this,new H.oU(a),"ping"))
+else J.Sq(a,null)},"call$2","gWL",4,0,null,340,[],342,[]],
+vV:[function(a,b){var z,y
z=init.globalState.N0
init.globalState.N0=this
$=this.En
y=null
-try{y=a.call$0()}finally{init.globalState.N0=z
-if(z!=null)$=z.gEn()}return y},"call$1","gZm",2,0,null,141,[]],
+try{y=b.call$0()}finally{init.globalState.N0=z
+if(z!=null)$=z.gEn()}return y},"call$1","gZm",2,0,null,143,[]],
Ds:[function(a){var z=J.U6(a)
switch(z.t(a,0)){case"pause":this.v8(z.t(a,1),z.t(a,2))
break
case"resume":this.NR(z.t(a,1))
break
-default:P.JS("UNKOWN MESSAGE: "+H.d(a))}},"call$1","gNo",2,0,null,20,[]],
-Zt:[function(a){return this.Gx.t(0,a)},"call$1","gQB",2,0,null,342,[]],
+case"add-ondone":this.iK(z.t(a,1))
+break
+case"remove-ondone":this.Hh(z.t(a,1))
+break
+case"set-errors-fatal":this.MZ(z.t(a,1),z.t(a,2))
+break
+case"ping":this.Wq(z.t(a,1),z.t(a,2))
+break
+default:P.JS("UNKNOWN MESSAGE: "+H.d(a))}},"call$1","gNo",2,0,null,22,[]],
+Zt:[function(a){return this.Gx.t(0,a)},"call$1","gQB",2,0,null,343,[]],
aU:[function(a,b){var z=this.Gx
if(z.x4(a))throw H.b(P.FM("Registry: ports must be registered only once."))
-z.u(0,a,b)},"call$2","gPn",4,0,null,342,[],343,[]],
-PC:[function(){var z=this.jO
-if(this.Gx.X5-this.fW.X5>0)init.globalState.i2.u(0,z,this)
-else init.globalState.i2.Rz(0,z)},"call$0","gi8",0,0,null],
+z.u(0,a,b)},"call$2","gPn",4,0,null,343,[],344,[]],
+PC:[function(){if(this.Gx.X5-this.fW.X5>0||this.RW)J.kW(init.globalState.i2,this.jO,this)
+else this.UM()},"call$0","gi8",0,0,null],
+UM:[function(){J.V1(init.globalState.i2,this.jO)
+var z=this.Jp
+if(z!=null)for(z=H.VM(new H.a7(z,z.length,0,null),[H.Kp(z,0)]);z.G();)J.Sq(z.lo,null)},"call$0","gAh",0,0,null],
$isaX:true},
+oU:{
+"^":"Tp:115;a",
+call$0:[function(){J.Sq(this.a,null)},"call$0",null,0,0,null,"call"],
+$isEH:true},
cC:{
-"^":"a;Rk,bZ",
+"^":"a;Rk,GL",
Jc:[function(){var z,y,x,w,v
z=this.Rk
y=z.av
@@ -9350,12 +9416,12 @@
v=x[y]
x[y]=null
z.av=(y+1&w-1)>>>0
-return v},"call$0","glk",0,0,null],
+return v},"call$0","gRe",0,0,null],
xB:[function(){var z,y,x
z=this.Jc()
-if(z==null){if(init.globalState.Nr!=null&&init.globalState.i2.x4(init.globalState.Nr.jO)&&init.globalState.vu===!0&&init.globalState.Nr.Gx.X5===0)H.vh(P.FM("Program exited with open ReceivePorts."))
+if(z==null){if(init.globalState.Nr!=null&&init.globalState.i2.x4(init.globalState.Nr.jO)===!0&&init.globalState.vu===!0&&init.globalState.Nr.Gx.X5===0)H.vh(P.FM("Program exited with open ReceivePorts."))
y=init.globalState
-if(y.EF===!0&&y.i2.X5===0&&y.Xz.bZ===0){y=y.vd
+if(y.EF===!0&&J.FN(y.i2)===!0&&y.Xz.GL===0){y=y.vd
x=H.Gy(H.B7(["command","close"],P.L5(null,null,null,null,null)))
y.toString
self.postMessage(x)}return!1}z.VU()
@@ -9372,34 +9438,31 @@
w.toString
self.postMessage(v)}},"call$0","gcP",0,0,null]},
RA:{
-"^":"Tp:112;a",
+"^":"Tp:114;a",
call$0:[function(){if(!this.a.xB())return
P.rT(C.ny,this)},"call$0",null,0,0,null,"call"],
$isEH:true},
IY:{
-"^":"a;Aq*,i3,G1*",
-VU:[function(){if(this.Aq.gRW()){this.Aq.gC9().push(this)
-return}this.Aq.vV(this.i3)},"call$0","gbF",0,0,null],
+"^":"a;F1*,i3,G1*",
+VU:[function(){if(this.F1.gRW()){this.F1.gC9().push(this)
+return}J.yn(this.F1,this.i3)},"call$0","gjF",0,0,null],
$isIY:true},
JH:{
"^":"a;"},
jl:{
-"^":"Tp:113;a,b,c,d,e",
-call$0:[function(){var z,y,x,w,v,u
-z=this.a
-y=this.b
-x=this.c
-w=init.globalState.N0
-v=w.jO
-$.te=$.te+("_"+v)
-$.eb=$.eb+("_"+v)
-J.H4(this.e,["spawned",new H.Z6(w.EE,init.globalState.N0.jO),w.Qy])
-if(this.d!==!0)z.call$1(x)
-else{v=H.N7()
-u=H.KT(v,[v,v]).BD(z)
-if(u)z.call$2(y,x)
-else{x=H.KT(v,[v]).BD(z)
-if(x)z.call$1(y)
+"^":"Tp:115;a,b,c,d,e,f",
+call$0:[function(){H.Ws(this.a,this.b,this.c,this.d,this.e,this.f)},"call$0",null,0,0,null,"call"],
+$isEH:true},
+Vg:{
+"^":"Tp:114;a,b,c,d",
+call$0:[function(){var z,y,x
+if(this.d!==!0)this.a.call$1(this.c)
+else{z=this.a
+y=H.N7()
+x=H.KT(y,[y,y]).BD(z)
+if(x)z.call$2(this.b,this.c)
+else{y=H.KT(y,[y]).BD(z)
+if(y)z.call$1(this.b)
else z.call$0()}}},"call$0",null,0,0,null,"call"],
$isEH:true},
Iy:{
@@ -9407,10 +9470,10 @@
$isbC:true},
Z6:{
"^":"Iy;JE,Jz",
-wR:[function(a,b){var z,y,x,w,v
+zY:[function(a,b){var z,y,x,w,v
z={}
y=this.Jz
-x=init.globalState.i2.t(0,y)
+x=J.UQ(init.globalState.i2,y)
if(x==null)return
w=this.JE
if(w.gP0())return
@@ -9420,16 +9483,16 @@
if(x.gEE()===w){x.Ds(z.a)
return}y=init.globalState.Xz
w="receive "+H.d(b)
-y.Rk.NZ(0,new H.IY(x,new H.Ua(z,this,v),w))},"call$1","gX8",2,0,null,20,[]],
+y.Rk.NZ(0,new H.IY(x,new H.Ua(z,this,v),w))},"call$1","gX8",2,0,null,22,[]],
n:[function(a,b){var z
if(b==null)return!1
z=J.x(b)
-return typeof b==="object"&&b!==null&&!!z.$isZ6&&J.de(this.JE,b.JE)},"call$1","gUJ",2,0,null,104,[]],
+return typeof b==="object"&&b!==null&&!!z.$isZ6&&J.de(this.JE,b.JE)},"call$1","gUJ",2,0,null,109,[]],
giO:function(a){return J.td(this.JE)},
$isZ6:true,
$isbC:true},
Ua:{
-"^":"Tp:113;a,b,c",
+"^":"Tp:115;a,b,c",
call$0:[function(){var z,y
z=this.b.JE
if(!z.gP0()){if(this.c){y=this.a
@@ -9437,15 +9500,15 @@
$isEH:true},
ns:{
"^":"Iy;hQ,bv,Jz",
-wR:[function(a,b){var z,y
+zY:[function(a,b){var z,y
z=H.Gy(H.B7(["command","message","port",this,"msg",b],P.L5(null,null,null,null,null)))
if(init.globalState.EF===!0){init.globalState.vd.toString
self.postMessage(z)}else{y=init.globalState.XC.t(0,this.hQ)
-if(y!=null)y.postMessage(z)}},"call$1","gX8",2,0,null,20,[]],
+if(y!=null)y.postMessage(z)}},"call$1","gX8",2,0,null,22,[]],
n:[function(a,b){var z
if(b==null)return!1
z=J.x(b)
-return typeof b==="object"&&b!==null&&!!z.$isns&&J.de(this.hQ,b.hQ)&&J.de(this.Jz,b.Jz)&&J.de(this.bv,b.bv)},"call$1","gUJ",2,0,null,104,[]],
+return typeof b==="object"&&b!==null&&!!z.$isns&&J.de(this.hQ,b.hQ)&&J.de(this.Jz,b.Jz)&&J.de(this.bv,b.bv)},"call$1","gUJ",2,0,null,109,[]],
giO:function(a){var z,y,x
z=J.c1(this.hQ,16)
y=J.c1(this.Jz,8)
@@ -9467,23 +9530,23 @@
z.fW.Rz(0,y)
z.PC()},"call$0","gJK",0,0,null],
FL:[function(a,b){if(this.P0)return
-this.wy(b)},"call$1","gT5",2,0,null,344,[]],
+this.wy(b)},"call$1","gT5",2,0,null,345,[]],
$isyo:true,
static:{"^":"Vz"}},
NA:{
-"^":"Dd;CN,il",
+"^":"Tf;CN,il",
DE:[function(a){if(!!a.$isZ6)return["sendport",init.globalState.oL,a.Jz,J.td(a.JE)]
if(!!a.$isns)return["sendport",a.hQ,a.Jz,a.bv]
-throw H.b("Illegal underlying port "+H.d(a))},"call$1","goi",2,0,null,21,[]],
+throw H.b("Illegal underlying port "+H.d(a))},"call$1","goi",2,0,null,26,[]],
yf:[function(a){if(!!a.$isku)return["capability",a.ng]
-throw H.b("Capability not serializable: "+H.d(a))},"call$1","gbM",2,0,null,21,[]]},
+throw H.b("Capability not serializable: "+H.d(a))},"call$1","gbM",2,0,null,26,[]]},
NO:{
-"^":"oo;il",
+"^":"Nt;il",
DE:[function(a){if(!!a.$isZ6)return new H.Z6(a.JE,a.Jz)
if(!!a.$isns)return new H.ns(a.hQ,a.bv,a.Jz)
-throw H.b("Illegal underlying port "+H.d(a))},"call$1","goi",2,0,null,21,[]],
+throw H.b("Illegal underlying port "+H.d(a))},"call$1","goi",2,0,null,26,[]],
yf:[function(a){if(!!a.$isku)return new H.ku(a.ng)
-throw H.b("Capability not serializable: "+H.d(a))},"call$1","gbM",2,0,null,21,[]]},
+throw H.b("Capability not serializable: "+H.d(a))},"call$1","gbM",2,0,null,26,[]]},
II:{
"^":"AP;RZ",
Vf:[function(a){var z,y,x,w,v,u
@@ -9491,17 +9554,17 @@
y=z.t(a,1)
x=z.t(a,2)
w=z.t(a,3)
-if(J.de(y,init.globalState.oL)){v=init.globalState.i2.t(0,x)
+if(J.de(y,init.globalState.oL)){v=J.UQ(init.globalState.i2,x)
if(v==null)return
u=v.Zt(w)
if(u==null)return
-return new H.Z6(u,x)}else return new H.ns(y,w,x)},"call$1","gTm",2,0,null,68,[]],
-Op:[function(a){return new H.ku(J.UQ(a,1))},"call$1","gID",2,0,null,68,[]]},
+return new H.Z6(u,x)}else return new H.ns(y,w,x)},"call$1","gTm",2,0,null,73,[]],
+Op:[function(a){return new H.ku(J.UQ(a,1))},"call$1","gID",2,0,null,73,[]]},
fP:{
"^":"a;MD",
t:[function(a,b){return b.__MessageTraverser__attached_info__},"call$1","gIA",2,0,null,6,[]],
u:[function(a,b,c){this.MD.push(b)
-b.__MessageTraverser__attached_info__=c},"call$2","gj3",4,0,null,6,[],345,[]],
+b.__MessageTraverser__attached_info__=c},"call$2","gj3",4,0,null,6,[],346,[]],
Hn:[function(a){this.MD=[]},"call$0","gb6",0,0,null],
Xq:[function(){var z,y,x
for(z=this.MD.length,y=0;y<z;++y){x=this.MD
@@ -9510,28 +9573,28 @@
X1:{
"^":"a;",
t:[function(a,b){return},"call$1","gIA",2,0,null,6,[]],
-u:[function(a,b,c){},"call$2","gj3",4,0,null,6,[],345,[]],
+u:[function(a,b,c){},"call$2","gj3",4,0,null,6,[],346,[]],
Hn:[function(a){},"call$0","gb6",0,0,null],
-Xq:[function(){return},"call$0","gt6",0,0,null]},
+Xq:[function(){},"call$0","gt6",0,0,null]},
HU:{
"^":"a;",
h7:[function(a){var z
if(H.VO(a))return this.Pq(a)
this.il.Hn(0)
z=null
-try{z=this.I8(a)}finally{this.il.Xq()}return z},"call$1","gyU",2,0,null,21,[]],
+try{z=this.I8(a)}finally{this.il.Xq()}return z},"call$1","gyU",2,0,null,26,[]],
I8:[function(a){var z
if(a==null||typeof a==="string"||typeof a==="number"||typeof a==="boolean")return this.Pq(a)
z=J.x(a)
if(typeof a==="object"&&a!==null&&(a.constructor===Array||!!z.$isList))return this.wb(a)
if(typeof a==="object"&&a!==null&&!!z.$isZ0)return this.TI(a)
if(typeof a==="object"&&a!==null&&!!z.$isbC)return this.DE(a)
-if(typeof a==="object"&&a!==null&&!!z.$isIU)return this.yf(a)
-return this.YZ(a)},"call$1","gRQ",2,0,null,21,[]],
-YZ:[function(a){throw H.b("Message serialization: Illegal value "+H.d(a)+" passed")},"call$1","gSG",2,0,null,21,[]]},
-oo:{
+if(typeof a==="object"&&a!==null&&!!z.$ishq)return this.yf(a)
+return this.YZ(a)},"call$1","gRQ",2,0,null,26,[]],
+YZ:[function(a){throw H.b("Message serialization: Illegal value "+H.d(a)+" passed")},"call$1","gSG",2,0,null,26,[]]},
+Nt:{
"^":"HU;",
-Pq:[function(a){return a},"call$1","gKz",2,0,null,21,[]],
+Pq:[function(a){return a},"call$1","gKz",2,0,null,26,[]],
wb:[function(a){var z,y,x,w,v,u
z=this.il.t(0,a)
if(z!=null)return z
@@ -9543,7 +9606,7 @@
this.il.u(0,a,z)
for(w=z.length,v=0;v<x;++v){u=this.I8(y.t(a,v))
if(v>=w)return H.e(z,v)
-z[v]=u}return z},"call$1","gqb",2,0,null,68,[]],
+z[v]=u}return z},"call$1","gHc",2,0,null,73,[]],
TI:[function(a){var z,y
z={}
y=this.il.t(0,a)
@@ -9553,31 +9616,31 @@
z.a=y
this.il.u(0,a,y)
a.aN(0,new H.OW(z,this))
-return z.a},"call$1","gnM",2,0,null,149,[]],
-DE:[function(a){return H.vh(P.SY(null))},"call$1","goi",2,0,null,21,[]],
-yf:[function(a){return H.vh(P.SY(null))},"call$1","gbM",2,0,null,21,[]]},
+return z.a},"call$1","gnM",2,0,null,151,[]],
+DE:[function(a){return H.vh(P.SY(null))},"call$1","goi",2,0,null,26,[]],
+yf:[function(a){return H.vh(P.SY(null))},"call$1","gbM",2,0,null,26,[]]},
OW:{
-"^":"Tp:346;a,b",
+"^":"Tp:348;a,b",
call$2:[function(a,b){var z=this.b
-J.kW(this.a.a,z.I8(a),z.I8(b))},"call$2",null,4,0,null,42,[],211,[],"call"],
+J.kW(this.a.a,z.I8(a),z.I8(b))},"call$2",null,4,0,null,47,[],347,[],"call"],
$isEH:true},
-Dd:{
+Tf:{
"^":"HU;",
-Pq:[function(a){return a},"call$1","gKz",2,0,null,21,[]],
+Pq:[function(a){return a},"call$1","gKz",2,0,null,26,[]],
wb:[function(a){var z,y
z=this.il.t(0,a)
if(z!=null)return["ref",z]
y=this.CN
this.CN=y+1
this.il.u(0,a,y)
-return["list",y,this.mE(a)]},"call$1","gqb",2,0,null,68,[]],
+return["list",y,this.mE(a)]},"call$1","gHc",2,0,null,73,[]],
TI:[function(a){var z,y
z=this.il.t(0,a)
if(z!=null)return["ref",z]
y=this.CN
this.CN=y+1
this.il.u(0,a,y)
-return["map",y,this.mE(J.qA(a.gvc(a))),this.mE(J.qA(a.gUQ(a)))]},"call$1","gnM",2,0,null,149,[]],
+return["map",y,this.mE(J.qA(a.gvc(a))),this.mE(J.qA(a.gUQ(a)))]},"call$1","gnM",2,0,null,151,[]],
mE:[function(a){var z,y,x,w,v
z=J.U6(a)
y=z.gB(a)
@@ -9587,14 +9650,14 @@
w=0
for(;w<y;++w){v=this.I8(z.t(a,w))
if(w>=x.length)return H.e(x,w)
-x[w]=v}return x},"call$1","gBv",2,0,null,68,[]],
-DE:[function(a){return H.vh(P.SY(null))},"call$1","goi",2,0,null,21,[]],
-yf:[function(a){return H.vh(P.SY(null))},"call$1","gbM",2,0,null,21,[]]},
+x[w]=v}return x},"call$1","gEa",2,0,null,73,[]],
+DE:[function(a){return H.vh(P.SY(null))},"call$1","goi",2,0,null,26,[]],
+yf:[function(a){return H.vh(P.SY(null))},"call$1","gbM",2,0,null,26,[]]},
AP:{
"^":"a;",
QS:[function(a){if(H.ZR(a))return a
this.RZ=P.Py(null,null,null,null,null)
-return this.XE(a)},"call$1","gia",2,0,null,21,[]],
+return this.XE(a)},"call$1","gia",2,0,null,26,[]],
XE:[function(a){var z,y
if(a==null||typeof a==="string"||typeof a==="number"||typeof a==="boolean")return a
z=J.U6(a)
@@ -9604,7 +9667,7 @@
case"map":return this.tv(a)
case"sendport":return this.Vf(a)
case"capability":return this.Op(a)
-default:return this.PR(a)}},"call$1","gN3",2,0,null,21,[]],
+default:return this.PR(a)}},"call$1","gn0",2,0,null,26,[]],
Dj:[function(a){var z,y,x,w,v
z=J.U6(a)
y=z.t(a,1)
@@ -9615,7 +9678,7 @@
if(typeof w!=="number")return H.s(w)
v=0
for(;v<w;++v)z.u(x,v,this.XE(z.t(x,v)))
-return x},"call$1","gMS",2,0,null,21,[]],
+return x},"call$1","gMS",2,0,null,26,[]],
tv:[function(a){var z,y,x,w,v,u,t,s
z=P.L5(null,null,null,null,null)
y=J.U6(a)
@@ -9629,19 +9692,15 @@
t=J.U6(v)
s=0
for(;s<u;++s)z.u(0,this.XE(y.t(w,s)),this.XE(t.t(v,s)))
-return z},"call$1","gwq",2,0,null,21,[]],
-PR:[function(a){throw H.b("Unexpected serialized object")},"call$1","gw1",2,0,null,21,[]]},
+return z},"call$1","gwq",2,0,null,26,[]],
+PR:[function(a){throw H.b("Unexpected serialized object")},"call$1","gw1",2,0,null,26,[]]},
yH:{
"^":"a;Kf,zu,p9",
-ed:[function(){var z,y,x
-z=$.jk()
-if(z.setTimeout!=null){if(this.zu)throw H.b(P.f("Timer in event loop cannot be canceled."))
-y=this.p9
-if(y==null)return
-x=init.globalState.Xz
-x.bZ=x.bZ-1
-if(this.Kf)z.clearTimeout(y)
-else z.clearInterval(y)
+ed:[function(){if($.jk().setTimeout!=null){if(this.zu)throw H.b(P.f("Timer in event loop cannot be canceled."))
+if(this.p9==null)return
+H.ox()
+if(this.Kf)$.jk().clearTimeout(this.p9)
+else $.jk().clearInterval(this.p9)
this.p9=null}else throw H.b(P.f("Canceling a timer."))},"call$0","gZS",0,0,null],
Qa:function(a,b){var z,y
if(a===0)z=$.jk().setTimeout==null||init.globalState.EF===!0
@@ -9652,21 +9711,20 @@
z.Rk.NZ(0,new H.IY(y,new H.FA(this,b),"timer"))
this.zu=!0}else{z=$.jk()
if(z.setTimeout!=null){y=init.globalState.Xz
-y.bZ=y.bZ+1
+y.GL=y.GL+1
this.p9=z.setTimeout(H.tR(new H.Av(this,b),0),a)}else throw H.b(P.f("Timer greater than 0."))}},
static:{cy:function(a,b){var z=new H.yH(!0,!1,null)
z.Qa(a,b)
return z}}},
FA:{
-"^":"Tp:112;a,b",
+"^":"Tp:114;a,b",
call$0:[function(){this.a.p9=null
this.b.call$0()},"call$0",null,0,0,null,"call"],
$isEH:true},
Av:{
-"^":"Tp:112;c,d",
+"^":"Tp:114;c,d",
call$0:[function(){this.c.p9=null
-var z=init.globalState.Xz
-z.bZ=z.bZ-1
+H.ox()
this.d.call$0()},"call$0",null,0,0,null,"call"],
$isEH:true},
ku:{
@@ -9688,14 +9746,14 @@
z=J.x(b)
if(typeof b==="object"&&b!==null&&!!z.$isku){z=this.ng
y=b.ng
-return z==null?y==null:z===y}return!1},"call$1","gUJ",2,0,null,104,[]],
+return z==null?y==null:z===y}return!1},"call$1","gUJ",2,0,null,109,[]],
$isku:true,
-$isIU:true}}],["_js_helper","dart:_js_helper",,H,{
+$ishq:true}}],["_js_helper","dart:_js_helper",,H,{
"^":"",
wV:[function(a,b){var z,y
if(b!=null){z=b.x
if(z!=null)return z}y=J.x(a)
-return typeof a==="object"&&a!==null&&!!y.$isXj},"call$2","b3",4,0,null,6,[],22,[]],
+return typeof a==="object"&&a!==null&&!!y.$isXj},"call$2","b3",4,0,null,6,[],27,[]],
d:[function(a){var z
if(typeof a==="string")return a
if(typeof a==="number"){if(a!==0)return""+a}else if(!0===a)return"true"
@@ -9703,12 +9761,12 @@
else if(a==null)return"null"
z=J.AG(a)
if(typeof z!=="string")throw H.b(P.u(a))
-return z},"call$1","Sa",2,0,null,23,[]],
-Hz:[function(a){throw H.b(P.f("Can't use '"+H.d(a)+"' in reflection because it is not included in a @MirrorsUsed annotation."))},"call$1","IT",2,0,null,24,[]],
+return z},"call$1","mQ",2,0,null,28,[]],
+Hz:[function(a){throw H.b(P.f("Can't use '"+H.d(a)+"' in reflection because it is not included in a @MirrorsUsed annotation."))},"call$1","IT",2,0,null,29,[]],
eQ:[function(a){var z=a.$identityHash
if(z==null){z=Math.random()*0x3fffffff|0
a.$identityHash=z}return z},"call$1","Y0",2,0,null,6,[]],
-vx:[function(a){throw H.b(P.cD(a))},"call$1","Rm",2,0,25,26,[]],
+vx:[function(a){throw H.b(P.cD(a))},"call$1","Rm",2,0,30,31,[]],
BU:[function(a,b,c){var z,y,x,w,v,u
if(c==null)c=H.Rm()
if(typeof a!=="string")H.vh(new P.AT(a))
@@ -9735,7 +9793,7 @@
if(!(v<u))break
y.j(w,0)
if(y.j(w,v)>x)return c.call$1(a);++v}}}}if(z==null)return c.call$1(a)
-return parseInt(a,b)},"call$3","Yv",6,0,null,27,[],28,[],29,[]],
+return parseInt(a,b)},"call$3","Yv",6,0,null,32,[],33,[],34,[]],
IH:[function(a,b){var z,y
if(typeof a!=="string")H.vh(new P.AT(a))
if(b==null)b=H.Rm()
@@ -9743,7 +9801,7 @@
z=parseFloat(a)
if(isNaN(z)){y=J.rr(a)
if(y==="NaN"||y==="+NaN"||y==="-NaN")return z
-return b.call$1(a)}return z},"call$2","zb",4,0,null,27,[],29,[]],
+return b.call$1(a)}return z},"call$2","zb",4,0,null,32,[],34,[]],
lh:[function(a){var z,y,x
z=C.AS(J.x(a))
if(z==="Object"){y=String(a.constructor).match(/^\s*function\s*(\S*)\s*\(/)[1]
@@ -9757,7 +9815,7 @@
for(y=z<=500,x="",w=0;w<z;w+=500){if(y)v=a
else{u=w+500
u=u<z?u:z
-v=a.slice(w,u)}x+=String.fromCharCode.apply(null,v)}return x},"call$1","ma",2,0,null,30,[]],
+v=a.slice(w,u)}x+=String.fromCharCode.apply(null,v)}return x},"call$1","Zl",2,0,null,35,[]],
Cq:[function(a){var z,y,x
z=[]
z.$builtinTypeInfo=[J.im]
@@ -9767,12 +9825,12 @@
if(typeof x!=="number"||Math.floor(x)!==x)throw H.b(P.u(x))
if(x<=65535)z.push(x)
else if(x<=1114111){z.push(55296+(C.jn.GG(x-65536,10)&1023))
-z.push(56320+(x&1023))}else throw H.b(P.u(x))}return H.VK(z)},"call$1","AL",2,0,null,31,[]],
+z.push(56320+(x&1023))}else throw H.b(P.u(x))}return H.VK(z)},"call$1","AL",2,0,null,36,[]],
eT:[function(a){var z,y
for(z=H.VM(new H.a7(a,a.length,0,null),[H.Kp(a,0)]);z.G();){y=z.lo
if(typeof y!=="number"||Math.floor(y)!==y)throw H.b(P.u(y))
if(y<0)throw H.b(P.u(y))
-if(y>65535)return H.Cq(a)}return H.VK(a)},"call$1","Wb",2,0,null,32,[]],
+if(y>65535)return H.Cq(a)}return H.VK(a)},"call$1","Wb",2,0,null,37,[]],
zW:[function(a,b,c,d,e,f,g,h){var z,y,x,w
if(typeof a!=="number"||Math.floor(a)!==a)H.vh(new P.AT(a))
if(typeof b!=="number"||Math.floor(b)!==b)H.vh(new P.AT(b))
@@ -9787,13 +9845,13 @@
if(x.E(a,0)||x.C(a,100)){w=new Date(y)
if(h)w.setUTCFullYear(a)
else w.setFullYear(a)
-return w.valueOf()}return y},"call$8","mV",16,0,null,33,[],34,[],35,[],36,[],37,[],38,[],39,[],40,[]],
+return w.valueOf()}return y},"call$8","mV",16,0,null,38,[],39,[],40,[],41,[],42,[],43,[],44,[],45,[]],
o2:[function(a){if(a.date===void 0)a.date=new Date(a.y3)
-return a.date},"call$1","j1",2,0,null,41,[]],
+return a.date},"call$1","j1",2,0,null,46,[]],
of:[function(a,b){if(a==null||typeof a==="boolean"||typeof a==="number"||typeof a==="string")throw H.b(new P.AT(a))
-return a[b]},"call$2","De",4,0,null,6,[],42,[]],
+return a[b]},"call$2","De",4,0,null,6,[],47,[]],
aw:[function(a,b,c){if(a==null||typeof a==="boolean"||typeof a==="number"||typeof a==="string")throw H.b(new P.AT(a))
-a[b]=c},"call$3","WJ",6,0,null,6,[],42,[],23,[]],
+a[b]=c},"call$3","WJ",6,0,null,6,[],47,[],28,[]],
zo:[function(a,b,c){var z,y,x
z={}
z.a=0
@@ -9802,8 +9860,8 @@
if(b!=null){z.a=0+b.length
C.Nm.FV(y,b)}z.b=""
if(c!=null&&!c.gl0(c))c.aN(0,new H.Cj(z,y,x))
-return J.jf(a,new H.LI(C.Ka,"call$"+z.a+z.b,0,y,x,null))},"call$3","pT",6,0,null,15,[],43,[],44,[]],
-Ek:[function(a,b,c){var z,y,x,w,v,u,t,s,r,q,p
+return J.jf(a,new H.LI(C.Ka,"call$"+z.a+z.b,0,y,x,null))},"call$3","pT",6,0,null,15,[],48,[],49,[]],
+Ek:[function(a,b,c){var z,y,x,w,v,u,t,s,r,q
z={}
if(c!=null&&!c.gl0(c)){y=J.x(a)["call*"]
if(y==null)return H.zo(a,b,c)
@@ -9813,17 +9871,17 @@
w=x.Rv
if(w!==b.length)return H.zo(a,b,c)
v=P.L5(null,null,null,null,null)
-for(u=x.hG,t=x.Rn,s=0;s<u;++s){r=s+w
-v.u(0,init.metadata[t[2*r+u+3]],init.metadata[x.BX(0,r)])}z.a=!1
+for(u=x.hG,t=0;t<u;++t){s=t+w
+v.u(0,x.KE(s),init.metadata[x.Fk(s)])}z.a=!1
c.aN(0,new H.u8(z,v))
if(z.a)return H.zo(a,b,c)
-J.bj(b,v.gUQ(v))
-return y.apply(a,b)}q=[]
-p=0+b.length
-C.Nm.FV(q,b)
-y=a["call$"+p]
+C.Nm.FV(b,v.gUQ(v))
+return y.apply(a,b)}r=[]
+q=0+b.length
+C.Nm.FV(r,b)
+y=a["call$"+q]
if(y==null)return H.zo(a,b,c)
-return y.apply(a,q)},"call$3","ra",6,0,null,15,[],43,[],44,[]],
+return y.apply(a,r)},"call$3","ra",6,0,null,15,[],48,[],49,[]],
pL:[function(a){if(a=="String")return C.Kn
if(a=="int")return C.wq
if(a=="double")return C.yX
@@ -9831,21 +9889,21 @@
if(a=="bool")return C.Fm
if(a=="List")return C.l0
if(a=="Null")return C.x0
-return init.allClasses[a]},"call$1","aC",2,0,null,45,[]],
+return init.allClasses[a]},"call$1","aC",2,0,null,50,[]],
Pq:[function(){var z={x:0}
delete z.x
return z},"call$0","vg",0,0,null],
-s:[function(a){throw H.b(P.u(a))},"call$1","Ff",2,0,null,46,[]],
+s:[function(a){throw H.b(P.u(a))},"call$1","Ff",2,0,null,51,[]],
e:[function(a,b){if(a==null)J.q8(a)
if(typeof b!=="number"||Math.floor(b)!==b)H.s(b)
-throw H.b(P.N(b))},"call$2","x3",4,0,null,41,[],47,[]],
+throw H.b(P.N(b))},"call$2","x3",4,0,null,46,[],52,[]],
b:[function(a){var z
if(a==null)a=new P.LK()
z=new Error()
z.dartException=a
if("defineProperty" in Object){Object.defineProperty(z, "message", { get: H.Ju })
z.name=""}else z.toString=H.Ju
-return z},"call$1","Vb",2,0,null,48,[]],
+return z},"call$1","Cr",2,0,null,53,[]],
Ju:[function(){return J.AG(this.dartException)},"call$0","Eu",0,0,null],
vh:[function(a){var z
if(a==null)a=new P.LK()
@@ -9853,7 +9911,7 @@
z.dartException=a
if("defineProperty" in Object){Object.defineProperty(z, "message", { get: H.Ju })
z.name=""}else z.toString=H.Ju
-throw z},"call$1","wZ",2,0,null,48,[]],
+throw z},"call$1","wZ",2,0,null,53,[]],
Ru:[function(a){var z,y,x,w,v,u,t,s,r,q,p,o,n,m
z=new H.Am(a)
if(a==null)return
@@ -9893,28 +9951,28 @@
return z.call$1(new H.W0(y,v))}}}v=typeof y==="string"?y:""
return z.call$1(new H.vV(v))}if(a instanceof RangeError){if(typeof y==="string"&&y.indexOf("call stack")!==-1)return new P.VS()
return z.call$1(new P.AT(null))}if(typeof InternalError=="function"&&a instanceof InternalError)if(typeof y==="string"&&y==="too much recursion")return new P.VS()
-return a},"call$1","v2",2,0,null,48,[]],
+return a},"call$1","v2",2,0,null,53,[]],
CU:[function(a){if(a==null||typeof a!='object')return J.v1(a)
else return H.eQ(a)},"call$1","Zs",2,0,null,6,[]],
B7:[function(a,b){var z,y,x,w
z=a.length
for(y=0;y<z;y=w){x=y+1
w=x+1
-b.u(0,a[y],a[x])}return b},"call$2","nD",4,0,null,50,[],51,[]],
+b.u(0,a[y],a[x])}return b},"call$2","nD",4,0,null,55,[],56,[]],
ft:[function(a,b,c,d,e,f,g){var z=J.x(c)
if(z.n(c,0))return H.zd(b,new H.dr(a))
else if(z.n(c,1))return H.zd(b,new H.TL(a,d))
else if(z.n(c,2))return H.zd(b,new H.KX(a,d,e))
else if(z.n(c,3))return H.zd(b,new H.uZ(a,d,e,f))
else if(z.n(c,4))return H.zd(b,new H.OQ(a,d,e,f,g))
-else throw H.b(P.FM("Unsupported number of arguments for wrapped closure"))},"call$7","Le",14,0,null,52,[],14,[],53,[],54,[],55,[],56,[],57,[]],
+else throw H.b(P.FM("Unsupported number of arguments for wrapped closure"))},"call$7","Le",14,0,null,57,[],14,[],58,[],59,[],60,[],61,[],62,[]],
tR:[function(a,b){var z
if(a==null)return
z=a.$identity
if(!!z)return z
z=(function(closure, arity, context, invoke) { return function(a1, a2, a3, a4) { return invoke(closure, context, arity, a1, a2, a3, a4); };})(a,b,init.globalState.N0,H.ft)
a.$identity=z
-return z},"call$2","qN",4,0,null,52,[],58,[]],
+return z},"call$2","qN",4,0,null,57,[],63,[]],
iA:[function(a,b,c,d,e,f){var z,y,x,w,v,u,t,s,r,q,p,o,n,m
z=b[0]
z.$stubName
@@ -9943,7 +10001,7 @@
n=o.$callName
if(n!=null){m=d?o:H.SD(o,t)
w[n]=m}}w["call*"]=z
-return v},"call$6","Eh",12,0,null,41,[],59,[],60,[],61,[],62,[],63,[]],
+return v},"call$6","Eh",12,0,null,46,[],64,[],65,[],66,[],67,[],68,[]],
vq:[function(a,b){var z=H.eZ
switch(a){case 0:return function(F,S){return function(){return F.call(S(this))}}(b,z)
case 1:return function(F,S){return function(a){return F.call(S(this),a)}}(b,z)
@@ -9951,7 +10009,7 @@
case 3:return function(F,S){return function(a,b,c){return F.call(S(this),a,b,c)}}(b,z)
case 4:return function(F,S){return function(a,b,c,d){return F.call(S(this),a,b,c,d)}}(b,z)
case 5:return function(F,S){return function(a,b,c,d,e){return F.call(S(this),a,b,c,d,e)}}(b,z)
-default:return function(f,s){return function(){return f.apply(s(this),arguments)}}(b,z)}},"call$2","X5",4,0,null,58,[],15,[]],
+default:return function(f,s){return function(){return f.apply(s(this),arguments)}}(b,z)}},"call$2","X5",4,0,null,63,[],15,[]],
SD:[function(a,b){var z,y,x,w
if(b)return H.Oj(a)
z=a.length
@@ -9968,7 +10026,7 @@
$.bf=x}x=y+H.d(x)+","+w+");"
y=$.OK
$.OK=J.WB(y,1)
-return new Function("F",x+H.d(y)+"}")(a)}else return H.vq(z,a)},"call$2","Fw",4,0,null,15,[],64,[]],
+return new Function("F",x+H.d(y)+"}")(a)}else return H.vq(z,a)},"call$2","jI",4,0,null,15,[],69,[]],
Z4:[function(a,b,c){var z,y
z=H.eZ
y=H.yS
@@ -9979,51 +10037,51 @@
case 4:return function(n,s,r){return function(a,b,c){return s(this)[n](r(this),a,b,c)}}(b,z,y)
case 5:return function(n,s,r){return function(a,b,c,d){return s(this)[n](r(this),a,b,c,d)}}(b,z,y)
case 6:return function(n,s,r){return function(a,b,c,d,e){return s(this)[n](r(this),a,b,c,d,e)}}(b,z,y)
-default:return function(f,s,r,a){return function(){a=[r(this)];Array.prototype.push.apply(a,arguments);return f.apply(s(this),a)}}(c,z,y)}},"call$3","VT",6,0,null,58,[],12,[],15,[]],
+default:return function(f,s,r,a){return function(){a=[r(this)];Array.prototype.push.apply(a,arguments);return f.apply(s(this),a)}}(c,z,y)}},"call$3","VT",6,0,null,63,[],12,[],15,[]],
Oj:[function(a){var z,y,x,w,v
z=a.$stubName
y=a.length
if(typeof dart_precompiled=="function")return H.Z4(y,z,a)
-else if(y===1){x="return this."+H.d(H.oN())+"."+z+"(this."+H.d(H.Wz())+");"
+else if(y===1){x="return this."+H.d(H.oN())+"."+H.d(z)+"(this."+H.d(H.Wz())+");"
w=$.OK
$.OK=J.WB(w,1)
return new Function(x+H.d(w))}else if(1<y&&y<28){v="abcdefghijklmnopqrstuvwxyz".split("").splice(0,y-1).join(",")
-x="return function("+v+"){return this."+H.d(H.oN())+"."+z+"(this."+H.d(H.Wz())+","+v+");"
+x="return function("+v+"){return this."+H.d(H.oN())+"."+H.d(z)+"(this."+H.d(H.Wz())+","+v+");"
w=$.OK
$.OK=J.WB(w,1)
return new Function(x+H.d(w)+"}")()}else return H.Z4(y,z,a)},"call$1","n9",2,0,null,15,[]],
Kq:[function(a,b,c,d,e,f){b.fixed$length=init
c.fixed$length=init
-return H.iA(a,b,c,!!d,e,f)},"call$6","lu",12,0,null,41,[],59,[],60,[],61,[],62,[],12,[]],
+return H.iA(a,b,c,!!d,e,f)},"call$6","lu",12,0,null,46,[],64,[],65,[],66,[],67,[],12,[]],
SE:[function(a,b){var z=J.U6(b)
-throw H.b(H.aq(H.lh(a),z.Nj(b,3,z.gB(b))))},"call$2","H7",4,0,null,23,[],66,[]],
+throw H.b(H.aq(H.lh(a),z.Nj(b,3,z.gB(b))))},"call$2","H7",4,0,null,28,[],71,[]],
Go:[function(a,b){var z
if(a!=null)z=typeof a==="object"&&J.x(a)[b]
else z=!0
if(z)return a
-H.SE(a,b)},"call$2","SR",4,0,null,23,[],66,[]],
-ag:[function(a){throw H.b(P.Gz("Cyclic initialization for static "+H.d(a)))},"call$1","RK",2,0,null,67,[]],
-KT:[function(a,b,c){return new H.tD(a,b,c,null)},"call$3","HN",6,0,null,69,[],70,[],71,[]],
-uK:[function(a,b){var z=a.name
+H.SE(a,b)},"call$2","SR",4,0,null,28,[],71,[]],
+ag:[function(a){throw H.b(P.Gz("Cyclic initialization for static "+H.d(a)))},"call$1","RK",2,0,null,72,[]],
+KT:[function(a,b,c){return new H.tD(a,b,c,null)},"call$3","HN",6,0,null,74,[],75,[],76,[]],
+Og:[function(a,b){var z=a.name
if(b==null||b.length===0)return new H.tu(z)
-return new H.fw(z,b,null)},"call$2","iw",4,0,null,72,[],73,[]],
-N7:[function(){return C.KZ},"call$0","cI",0,0,null],
+return new H.fw(z,b,null)},"call$2","rK",4,0,null,77,[],78,[]],
+N7:[function(){return C.KZ},"call$0","Se",0,0,null],
mm:[function(a){return new H.cu(a,null)},"call$1","ut",2,0,null,12,[]],
VM:[function(a,b){if(a!=null)a.$builtinTypeInfo=b
-return a},"call$2","aa",4,0,null,74,[],75,[]],
+return a},"call$2","Ub",4,0,null,79,[],80,[]],
oX:[function(a){if(a==null)return
-return a.$builtinTypeInfo},"call$1","Qn",2,0,null,74,[]],
-IM:[function(a,b){return H.Y9(a["$as"+H.d(b)],H.oX(a))},"call$2","PE",4,0,null,74,[],76,[]],
+return a.$builtinTypeInfo},"call$1","Qn",2,0,null,79,[]],
+IM:[function(a,b){return H.Y9(a["$as"+H.d(b)],H.oX(a))},"call$2","PE",4,0,null,79,[],81,[]],
ip:[function(a,b,c){var z=H.IM(a,b)
-return z==null?null:z[c]},"call$3","Cn",6,0,null,74,[],76,[],47,[]],
+return z==null?null:z[c]},"call$3","Pk",6,0,null,79,[],81,[],52,[]],
Kp:[function(a,b){var z=H.oX(a)
-return z==null?null:z[b]},"call$2","tC",4,0,null,74,[],47,[]],
+return z==null?null:z[b]},"call$2","tC",4,0,null,79,[],52,[]],
Ko:[function(a,b){if(a==null)return"dynamic"
else if(typeof a==="object"&&a!==null&&a.constructor===Array)return a[0].builtin$cls+H.ia(a,1,b)
else if(typeof a=="function")return a.builtin$cls
else if(typeof a==="number"&&Math.floor(a)===a)if(b==null)return C.jn.bu(a)
else return b.call$1(a)
-else return},"call$2$onTypeVariable","bR",2,3,null,77,11,[],78,[]],
+else return},"call$2$onTypeVariable","bR",2,3,null,82,11,[],83,[]],
ia:[function(a,b,c){var z,y,x,w,v,u
if(a==null)return""
z=P.p9("")
@@ -10033,33 +10091,33 @@
if(v!=null)w=!1
u=H.Ko(v,c)
u=typeof u==="string"?u:H.d(u)
-z.vM=z.vM+u}return w?"":"<"+H.d(z)+">"},"call$3$onTypeVariable","iM",4,3,null,77,79,[],80,[],78,[]],
+z.vM=z.vM+u}return w?"":"<"+H.d(z)+">"},"call$3$onTypeVariable","iM",4,3,null,82,84,[],85,[],83,[]],
dJ:[function(a){var z=typeof a==="object"&&a!==null&&a.constructor===Array?"List":J.x(a).constructor.builtin$cls
-return z+H.ia(a.$builtinTypeInfo,0,null)},"call$1","om",2,0,null,6,[]],
+return z+H.ia(a.$builtinTypeInfo,0,null)},"call$1","Yx",2,0,null,6,[]],
Y9:[function(a,b){if(typeof a==="object"&&a!==null&&a.constructor===Array)b=a
else if(typeof a=="function"){a=H.ml(a,null,b)
if(typeof a==="object"&&a!==null&&a.constructor===Array)b=a
-else if(typeof a=="function")b=H.ml(a,null,b)}return b},"call$2","zL",4,0,null,81,[],82,[]],
+else if(typeof a=="function")b=H.ml(a,null,b)}return b},"call$2","zL",4,0,null,86,[],87,[]],
RB:[function(a,b,c,d){var z,y
if(a==null)return!1
z=H.oX(a)
y=J.x(a)
if(y[b]==null)return!1
-return H.hv(H.Y9(y[d],z),c)},"call$4","Ym",8,0,null,6,[],83,[],84,[],85,[]],
+return H.hv(H.Y9(y[d],z),c)},"call$4","Ym",8,0,null,6,[],88,[],89,[],90,[]],
hv:[function(a,b){var z,y
if(a==null||b==null)return!0
z=a.length
for(y=0;y<z;++y)if(!H.t1(a[y],b[y]))return!1
-return!0},"call$2","QY",4,0,null,86,[],87,[]],
-IG:[function(a,b,c){return H.ml(a,b,H.IM(b,c))},"call$3","k2",6,0,null,88,[],89,[],90,[]],
-Gq:[function(a,b){var z,y
+return!0},"call$2","QY",4,0,null,91,[],92,[]],
+IG:[function(a,b,c){return H.ml(a,b,H.IM(b,c))},"call$3","k2",6,0,null,93,[],94,[],95,[]],
+XY:[function(a,b){var z,y
if(a==null)return b==null||b.builtin$cls==="a"||b.builtin$cls==="Null"
if(b==null)return!0
z=H.oX(a)
a=J.x(a)
if(z!=null){y=z.slice()
y.splice(0,0,a)}else y=a
-return H.t1(y,b)},"call$2","TU",4,0,null,91,[],87,[]],
+return H.t1(y,b)},"call$2","tk",4,0,null,96,[],92,[]],
t1:[function(a,b){var z,y,x,w,v,u,t
if(a===b)return!0
if(a==null||b==null)return!0
@@ -10077,7 +10135,7 @@
if(!y&&t==null||!w)return!0
y=y?a.slice(1):null
w=w?b.slice(1):null
-return H.hv(H.Y9(t,y),w)},"call$2","Mb",4,0,null,86,[],87,[]],
+return H.hv(H.Y9(t,y),w)},"call$2","Mb",4,0,null,91,[],92,[]],
Hc:[function(a,b,c){var z,y,x,w,v
if(b==null&&a==null)return!0
if(b==null)return c
@@ -10087,7 +10145,7 @@
if(c){if(z<y)return!1}else if(z!==y)return!1
for(x=0;x<y;++x){w=a[x]
v=b[x]
-if(!(H.t1(w,v)||H.t1(v,w)))return!1}return!0},"call$3","C6",6,0,null,86,[],87,[],92,[]],
+if(!(H.t1(w,v)||H.t1(v,w)))return!1}return!0},"call$3","C6",6,0,null,91,[],92,[],97,[]],
Vt:[function(a,b){var z,y,x,w,v,u
if(b==null)return!0
if(a==null)return!1
@@ -10098,7 +10156,7 @@
if(!Object.hasOwnProperty.call(a,w))return!1
v=b[w]
u=a[w]
-if(!(H.t1(v,u)||H.t1(u,v)))return!1}return!0},"call$2","oq",4,0,null,86,[],87,[]],
+if(!(H.t1(v,u)||H.t1(u,v)))return!1}return!0},"call$2","y3",4,0,null,91,[],92,[]],
Ly:[function(a,b){var z,y,x,w,v,u,t,s,r,q,p,o,n,m,l
if(!("func" in a))return!1
if("void" in a){if(!("void" in b)&&"ret" in b)return!1}else if(!("void" in b)){z=a.ret
@@ -10120,12 +10178,12 @@
n=w[m]
if(!(H.t1(o,n)||H.t1(n,o)))return!1}for(m=0;m<q;++l,++m){o=v[l]
n=u[m]
-if(!(H.t1(o,n)||H.t1(n,o)))return!1}}return H.Vt(a.named,b.named)},"call$2","Sj",4,0,null,86,[],87,[]],
-ml:[function(a,b,c){return a.apply(b,c)},"call$3","lv",6,0,null,15,[],41,[],82,[]],
+if(!(H.t1(o,n)||H.t1(n,o)))return!1}}return H.Vt(a.named,b.named)},"call$2","Sj",4,0,null,91,[],92,[]],
+ml:[function(a,b,c){return a.apply(b,c)},"call$3","fW",6,0,null,15,[],46,[],87,[]],
uc:[function(a){var z=$.NF
-return"Instance of "+(z==null?"<Unknown>":z.call$1(a))},"call$1","zB",2,0,null,93,[]],
-Su:[function(a){return H.eQ(a)},"call$1","cx",2,0,null,6,[]],
-bm:[function(a,b,c){Object.defineProperty(a, b, {value: c, enumerable: false, writable: true, configurable: true})},"call$3","C5",6,0,null,93,[],66,[],23,[]],
+return"Instance of "+(z==null?"<Unknown>":z.call$1(a))},"call$1","zB",2,0,null,98,[]],
+wzi:[function(a){return H.eQ(a)},"call$1","nR",2,0,null,6,[]],
+iw:[function(a,b,c){Object.defineProperty(a, b, {value: c, enumerable: false, writable: true, configurable: true})},"call$3","OU",6,0,null,98,[],71,[],28,[]],
w3:[function(a){var z,y,x,w,v,u
z=$.NF.call$1(a)
y=$.nw[z]
@@ -10151,16 +10209,16 @@
if(v==="*")throw H.b(P.SY(z))
if(init.leafTags[z]===true){u=H.Va(x)
Object.defineProperty(Object.getPrototypeOf(a), init.dispatchPropertyName, {value: u, enumerable: false, writable: true, configurable: true})
-return u.i}else return H.Lc(a,x)},"call$1","eU",2,0,null,93,[]],
+return u.i}else return H.Lc(a,x)},"call$1","eU",2,0,null,98,[]],
Lc:[function(a,b){var z,y
z=Object.getPrototypeOf(a)
y=J.Qu(b,z,null,null)
Object.defineProperty(z, init.dispatchPropertyName, {value: y, enumerable: false, writable: true, configurable: true})
-return b},"call$2","qF",4,0,null,93,[],7,[]],
+return b},"call$2","qF",4,0,null,98,[],7,[]],
Va:[function(a){return J.Qu(a,!1,null,!!a.$isXj)},"call$1","oe",2,0,null,7,[]],
VF:[function(a,b,c){var z=b.prototype
if(init.leafTags[a]===true)return J.Qu(z,!1,null,!!z.$isXj)
-else return J.Qu(z,c,null,null)},"call$3","vi",6,0,null,94,[],95,[],8,[]],
+else return J.Qu(z,c,null,null)},"call$3","di",6,0,null,99,[],100,[],8,[]],
XD:[function(){if(!0===$.Bv)return
$.Bv=!0
H.Z1()},"call$0","Ki",0,0,null],
@@ -10192,8 +10250,8 @@
t=z.prototypeForTag
$.NF=new H.dC(v)
$.TX=new H.wN(u)
-$.x7=new H.VX(t)},"call$0","Bk",0,0,null],
-ud:[function(a,b){return a(b)||b},"call$2","rM",4,0,null,96,[],97,[]],
+$.x7=new H.VX(t)},"call$0","Hb",0,0,null],
+ud:[function(a,b){return a(b)||b},"call$2","rM",4,0,null,101,[],102,[]],
ZT:[function(a,b){var z,y,x,w,v,u
z=H.VM([],[P.Od])
y=b.length
@@ -10203,13 +10261,13 @@
z.push(new H.tQ(v,b,a))
u=v+x
if(u===y)break
-else w=v===u?w+1:u}return z},"call$2","tl",4,0,null,102,[],103,[]],
+else w=v===u?w+1:u}return z},"call$2","tl",4,0,null,107,[],108,[]],
m2:[function(a,b,c){var z,y
if(typeof b==="string")return C.xB.XU(a,b,c)!==-1
else{z=J.rY(b)
if(typeof b==="object"&&b!==null&&!!z.$isVR){z=C.xB.yn(a,c)
y=b.Ej
-return y.test(z)}else return J.pO(z.dd(b,C.xB.yn(a,c)))}},"call$3","WL",6,0,null,41,[],104,[],80,[]],
+return y.test(z)}else return J.pO(z.dd(b,C.xB.yn(a,c)))}},"call$3","WL",6,0,null,46,[],109,[],85,[]],
ys:[function(a,b,c){var z,y,x,w,v
if(typeof b==="string")if(b==="")if(a==="")return c
else{z=P.p9("")
@@ -10223,7 +10281,7 @@
if(typeof b==="object"&&b!==null&&!!w.$isVR){v=b.gF4()
v.lastIndex=0
return a.replace(v,c.replace("$","$$$$"))}else{if(b==null)H.vh(new P.AT(null))
-throw H.b("String.replaceAll(Pattern) UNIMPLEMENTED")}}},"call$3","uF",6,0,null,41,[],105,[],106,[]],
+throw H.b("String.replaceAll(Pattern) UNIMPLEMENTED")}}},"call$3","uF",6,0,null,46,[],110,[],111,[]],
Zd:{
"^":"a;"},
xQ:{
@@ -10236,36 +10294,35 @@
gor:function(a){return!J.de(this.gB(this),0)},
bu:[function(a){return P.vW(this)},"call$0","gXo",0,0,null],
Ix:[function(){throw H.b(P.f("Cannot modify unmodifiable Map"))},"call$0","gPb",0,0,null],
-u:[function(a,b,c){return this.Ix()},"call$2","gj3",4,0,null,42,[],211,[]],
-Rz:[function(a,b){return this.Ix()},"call$1","gRI",2,0,null,42,[]],
-V1:[function(a){return this.Ix()},"call$0","gyP",0,0,null],
-FV:[function(a,b){return this.Ix()},"call$1","gDY",2,0,null,104,[]],
+u:[function(a,b,c){return this.Ix()},"call$2","gj3",4,0,null,47,[],347,[]],
+Rz:[function(a,b){return this.Ix()},"call$1","guH",2,0,null,47,[]],
+V1:[function(a){return this.Ix()},"call$0","gRa",0,0,null],
+FV:[function(a,b){return this.Ix()},"call$1","gDY",2,0,null,109,[]],
$isZ0:true},
LPe:{
"^":"oH;B>,HV,tc",
-di:[function(a){return this.gUQ(this).Vr(0,new H.bw(this,a))},"call$1","gmc",2,0,null,102,[]],
+di:[function(a){return this.gUQ(this).Vr(0,new H.LD(this,a))},"call$1","gmc",2,0,null,107,[]],
x4:[function(a){if(typeof a!=="string")return!1
-if(a==="__proto__")return!1
-return this.HV.hasOwnProperty(a)},"call$1","gV9",2,0,null,42,[]],
-t:[function(a,b){if(typeof b!=="string")return
-if(!this.x4(b))return
-return this.HV[b]},"call$1","gIA",2,0,null,42,[]],
-aN:[function(a,b){J.kH(this.tc,new H.WT(this,b))},"call$1","gjw",2,0,null,115,[]],
+if("__proto__"===a)return!1
+return this.HV.hasOwnProperty(a)},"call$1","gV9",2,0,null,47,[]],
+t:[function(a,b){if(!this.x4(b))return
+return this.TZ(b)},"call$1","gIA",2,0,null,47,[]],
+TZ:[function(a){return this.HV[a]},"call$1","grz",2,0,null,47,[]],
+aN:[function(a,b){var z,y,x
+z=this.tc
+for(y=0;y<z.length;++y){x=z[y]
+b.call$2(x,this.TZ(x))}},"call$1","gjw",2,0,null,117,[]],
gvc:function(a){return H.VM(new H.XR(this),[H.Kp(this,0)])},
gUQ:function(a){return H.K1(this.tc,new H.jJ(this),H.Kp(this,0),H.Kp(this,1))},
$isyN:true},
-bw:{
+LD:{
"^":"Tp;a,b",
-call$1:[function(a){return J.de(a,this.b)},"call$1",null,2,0,null,23,[],"call"],
+call$1:[function(a){return J.de(a,this.b)},"call$1",null,2,0,null,28,[],"call"],
$isEH:true,
$signature:function(){return H.IG(function(a,b){return{func:"JF",args:[b]}},this.a,"LPe")}},
-WT:{
-"^":"Tp:107;a,b",
-call$1:[function(a){return this.b.call$2(a,this.a.t(0,a))},"call$1",null,2,0,null,42,[],"call"],
-$isEH:true},
jJ:{
-"^":"Tp:107;a",
-call$1:[function(a){return this.a.t(0,a)},"call$1",null,2,0,null,42,[],"call"],
+"^":"Tp:112;a",
+call$1:[function(a){return this.a.TZ(a)},"call$1",null,2,0,null,47,[],"call"],
$isEH:true},
XR:{
"^":"mW;Y3",
@@ -10323,8 +10380,8 @@
else z=null}s=!0}else s=!1
if(typeof u=="function"){if(!("$reflectable" in u))H.Hz(J.GL(this.gWa()))
if(s)return new H.IW(H.zh(u),y,u,x,z)
-else return new H.A2(y,u,x,z)}else return new H.F3(z)},"call$1","gLk",2,0,null,6,[]],
-static:{"^":"hAw,oY,Y8"}},
+else return new H.A2(y,u,x,z)}else return new H.F3(z)},"call$1","gpW",2,0,null,6,[]],
+static:{"^":"hAw,HT,zl"}},
A2:{
"^":"a;Pi<,mr,eK<,Ot",
gpf:function(){return!1},
@@ -10334,7 +10391,7 @@
C.Nm.FV(y,b)
z=this.Ot
z=z!=null?z:a
-b=y}return this.mr.apply(z,b)},"call$2","gUT",4,0,null,145,[],82,[]]},
+b=y}return this.mr.apply(z,b)},"call$2","gUT",4,0,null,147,[],87,[]]},
IW:{
"^":"A2;qa,Pi,mr,eK,Ot",
To:function(a){return this.qa.call$1(a)},
@@ -10353,25 +10410,48 @@
else if(w<y)throw H.b(H.WE("Invocation of unstubbed method '"+z.gx5()+"' with "+w+" arguments (too few)."))
else if(w>x)throw H.b(H.WE("Invocation of unstubbed method '"+z.gx5()+"' with "+w+" arguments (too many)."))
for(t=w;t<x;++t)C.Nm.h(b,init.metadata[z.BX(0,t)])
-return this.mr.apply(v,b)},"call$2","gUT",4,0,null,145,[],82,[]]},
+return this.mr.apply(v,b)},"call$2","gUT",4,0,null,147,[],87,[]]},
F3:{
"^":"a;e0",
gpf:function(){return!0},
Bj:[function(a,b){var z=this.e0
-return J.jf(z==null?a:z,b)},"call$2","gUT",4,0,null,145,[],331,[]]},
+return J.jf(z==null?a:z,b)},"call$2","gUT",4,0,null,147,[],329,[]]},
FD:{
-"^":"a;mr,Rn>,XZ,Rv,hG,Mo,AM",
+"^":"a;mr,Rn>,XZ,Rv,hG,Mo,AM,NE",
+XL:[function(a){return init.metadata[this.Rn[2*a+this.hG+3]]},"call$1","gZj",2,0,null,349,[]],
BX:[function(a,b){var z=this.Rv
+if(typeof b!=="number")return b.C()
if(b<z)return
-return this.Rn[3+b-z]},"call$1","gkv",2,0,null,347,[]],
+return this.Rn[3+b-z]},"call$1","gkv",2,0,null,349,[]],
+Fk:[function(a){var z=this.Rv
+if(a<z)return
+if(!this.Mo||this.hG===1)return this.BX(0,a)
+return this.BX(0,this.e4(a-z))},"call$1","gtW",2,0,null,349,[]],
+KE:[function(a){var z=this.Rv
+if(a<z)return
+if(!this.Mo||this.hG===1)return this.XL(a)
+return this.XL(this.e4(a-z))},"call$1","gX4",2,0,null,349,[]],
+e4:[function(a){var z,y,x,w,v,u,t
+z={}
+if(this.NE==null){y=this.hG
+this.NE=Array(y)
+x=H.VM(H.B7([],P.L5(null,null,null,null,null)),[J.O,J.im])
+for(w=this.Rv,v=this.Rn,u=0;u<y;++u){t=w+u
+x.u(0,init.metadata[v[2*t+y+3]],t)}z.a=0
+y=x.gvc(x)
+y=P.F(y,!0,H.ip(y,"mW",0))
+H.rd(y,null)
+H.bQ(y,new H.Nv(z,this,x))}z=this.NE
+if(a<0||a>=z.length)return H.e(z,a)
+return z[a]},"call$1","gIK",2,0,null,350,[]],
hl:[function(a){var z,y
z=this.AM
if(typeof z=="number")return init.metadata[z]
else if(typeof z=="function"){y=new a()
H.VM(y,y["<>"])
-return z.apply({$receiver:y})}else throw H.b(H.Ef("Unexpected function type"))},"call$1","gIX",2,0,null,348,[]],
+return z.apply({$receiver:y})}else throw H.b(H.Ef("Unexpected function type"))},"call$1","gIX",2,0,null,351,[]],
gx5:function(){return this.mr.$reflectionName},
-static:{"^":"t4,FV,C1,kj",zh:function(a){var z,y,x,w
+static:{"^":"t4,FV,C1,H6",zh:function(a){var z,y,x,w
z=a.$reflectionInfo
if(z==null)return
z.fixed$length=init
@@ -10379,20 +10459,31 @@
y=z[0]
x=y>>1
w=z[1]
-return new H.FD(a,z,(y&1)===1,x,w>>1,(w&1)===1,z[2])}}},
+return new H.FD(a,z,(y&1)===1,x,w>>1,(w&1)===1,z[2],null)}}},
+Nv:{
+"^":"Tp:30;a,b,c",
+call$1:[function(a){var z,y,x
+z=this.b.NE
+y=this.a
+x=y.a
+y.a=x+1
+y=this.c.t(0,a)
+if(x>=z.length)return H.e(z,x)
+z[x]=y},"call$1",null,2,0,null,12,[],"call"],
+$isEH:true},
Cj:{
-"^":"Tp:349;a,b,c",
+"^":"Tp:352;a,b,c",
call$2:[function(a,b){var z=this.a
z.b=z.b+"$"+H.d(a)
this.c.push(a)
this.b.push(b)
-z.a=z.a+1},"call$2",null,4,0,null,12,[],46,[],"call"],
+z.a=z.a+1},"call$2",null,4,0,null,12,[],51,[],"call"],
$isEH:true},
u8:{
-"^":"Tp:349;a,b",
+"^":"Tp:352;a,b",
call$2:[function(a,b){var z=this.b
if(z.x4(a))z.u(0,a,b)
-else this.a.a=!0},"call$2",null,4,0,null,347,[],23,[],"call"],
+else this.a.a=!0},"call$2",null,4,0,null,349,[],28,[],"call"],
$isEH:true},
Zr:{
"^":"a;bT,rq,Xs,Fa,Ga,EP",
@@ -10410,7 +10501,7 @@
if(x!==-1)y.method=z[x+1]
x=this.EP
if(x!==-1)y.receiver=z[x+1]
-return y},"call$1","gul",2,0,null,20,[]],
+return y},"call$1","gul",2,0,null,22,[]],
static:{"^":"lm,k1,Re,fN,qi,rZ,BX,tt,dt,A7",LX:[function(a){var z,y,x,w,v,u
a=a.replace(String({}), '$receiver$').replace(new RegExp("[[\\]{}()*+?.\\\\^$|]",'g'),'\\$&')
z=a.match(/\\\$[a-zA-Z]+\\\$/g)
@@ -10420,20 +10511,20 @@
w=z.indexOf("\\$expr\\$")
v=z.indexOf("\\$method\\$")
u=z.indexOf("\\$receiver\\$")
-return new H.Zr(a.replace('\\$arguments\\$','((?:x|[^x])*)').replace('\\$argumentsExpr\\$','((?:x|[^x])*)').replace('\\$expr\\$','((?:x|[^x])*)').replace('\\$method\\$','((?:x|[^x])*)').replace('\\$receiver\\$','((?:x|[^x])*)'),y,x,w,v,u)},"call$1","dx",2,0,null,20,[]],S7:[function(a){return function($expr$) {
+return new H.Zr(a.replace('\\$arguments\\$','((?:x|[^x])*)').replace('\\$argumentsExpr\\$','((?:x|[^x])*)').replace('\\$expr\\$','((?:x|[^x])*)').replace('\\$method\\$','((?:x|[^x])*)').replace('\\$receiver\\$','((?:x|[^x])*)'),y,x,w,v,u)},"call$1","dx",2,0,null,22,[]],S7:[function(a){return function($expr$) {
var $argumentsExpr$ = '$arguments$'
try {
$expr$.$method$($argumentsExpr$);
} catch (e) {
return e.message;
}
-}(a)},"call$1","LS",2,0,null,49,[]],Mj:[function(a){return function($expr$) {
+}(a)},"call$1","LS",2,0,null,54,[]],Mj:[function(a){return function($expr$) {
try {
$expr$.$method$;
} catch (e) {
return e.message;
}
-}(a)},"call$1","cl",2,0,null,49,[]]}},
+}(a)},"call$1","cl",2,0,null,54,[]]}},
W0:{
"^":"Ge;K9,Ga",
bu:[function(a){var z=this.Ga
@@ -10447,8 +10538,8 @@
z=this.Ga
if(z==null)return"NoSuchMethodError: "+H.d(this.K9)
y=this.EP
-if(y==null)return"NoSuchMethodError: Cannot call \""+z+"\" ("+H.d(this.K9)+")"
-return"NoSuchMethodError: Cannot call \""+z+"\" on \""+y+"\" ("+H.d(this.K9)+")"},"call$0","gXo",0,0,null],
+if(y==null)return"NoSuchMethodError: Cannot call \""+H.d(z)+"\" ("+H.d(this.K9)+")"
+return"NoSuchMethodError: Cannot call \""+H.d(z)+"\" on \""+H.d(y)+"\" ("+H.d(this.K9)+")"},"call$0","gXo",0,0,null],
$ismp:true,
$isGe:true,
static:{T3:function(a,b){var z,y
@@ -10461,10 +10552,10 @@
bu:[function(a){var z=this.K9
return C.xB.gl0(z)?"Error":"Error: "+z},"call$0","gXo",0,0,null]},
Am:{
-"^":"Tp:107;a",
+"^":"Tp:112;a",
call$1:[function(a){var z=J.x(a)
if(typeof a==="object"&&a!==null&&!!z.$isGe)if(a.$thrownJsError==null)a.$thrownJsError=this.a
-return a},"call$1",null,2,0,null,160,[],"call"],
+return a},"call$1",null,2,0,null,159,[],"call"],
$isEH:true},
XO:{
"^":"a;lA,ui",
@@ -10477,23 +10568,23 @@
this.ui=z
return z},"call$0","gXo",0,0,null]},
dr:{
-"^":"Tp:113;a",
+"^":"Tp:115;a",
call$0:[function(){return this.a.call$0()},"call$0",null,0,0,null,"call"],
$isEH:true},
TL:{
-"^":"Tp:113;b,c",
+"^":"Tp:115;b,c",
call$0:[function(){return this.b.call$1(this.c)},"call$0",null,0,0,null,"call"],
$isEH:true},
KX:{
-"^":"Tp:113;d,e,f",
+"^":"Tp:115;d,e,f",
call$0:[function(){return this.d.call$2(this.e,this.f)},"call$0",null,0,0,null,"call"],
$isEH:true},
uZ:{
-"^":"Tp:113;UI,bK,Gq,Rm",
+"^":"Tp:115;UI,bK,Gq,Rm",
call$0:[function(){return this.UI.call$3(this.bK,this.Gq,this.Rm)},"call$0",null,0,0,null,"call"],
$isEH:true},
OQ:{
-"^":"Tp:113;w3,HZ,mG,xC,cj",
+"^":"Tp:115;w3,HZ,mG,xC,cj",
call$0:[function(){return this.w3.call$4(this.HZ,this.mG,this.xC,this.cj)},"call$0",null,0,0,null,"call"],
$isEH:true},
Tp:{
@@ -10510,35 +10601,35 @@
if(this===b)return!0
z=J.x(b)
if(typeof b!=="object"||b===null||!z.$isv)return!1
-return this.nw===b.nw&&this.jm===b.jm&&this.EP===b.EP},"call$1","gUJ",2,0,null,104,[]],
+return this.nw===b.nw&&this.jm===b.jm&&this.EP===b.EP},"call$1","gUJ",2,0,null,109,[]],
giO:function(a){var z,y
z=this.EP
if(z==null)y=H.eQ(this.nw)
else y=typeof z!=="object"?J.v1(z):H.eQ(z)
return J.UN(y,H.eQ(this.jm))},
$isv:true,
-static:{"^":"bf,P4",eZ:[function(a){return a.gnw()},"call$1","PR",2,0,null,52,[]],yS:[function(a){return a.EP},"call$1","h0",2,0,null,52,[]],oN:[function(){var z=$.bf
+static:{"^":"bf,P4",eZ:[function(a){return a.gnw()},"call$1","PR",2,0,null,57,[]],yS:[function(a){return a.EP},"call$1","MZ",2,0,null,57,[]],oN:[function(){var z=$.bf
if(z==null){z=H.B3("self")
$.bf=z}return z},"call$0","uT",0,0,null],Wz:[function(){var z=$.P4
if(z==null){z=H.B3("receiver")
-$.P4=z}return z},"call$0","TT",0,0,null],B3:[function(a){var z,y,x,w,v
+$.P4=z}return z},"call$0","qY",0,0,null],B3:[function(a){var z,y,x,w,v
z=new H.v("self","target","receiver","name")
y=Object.getOwnPropertyNames(z)
y.fixed$length=init
x=y
for(y=x.length,w=0;w<y;++w){v=x[w]
-if(z[v]===a)return v}},"call$1","ec",2,0,null,65,[]]}},
+if(z[v]===a)return v}},"call$1","ec",2,0,null,70,[]]}},
Ll:{
-"^":"a;Jy"},
-dN:{
-"^":"a;Jy"},
-GT:{
+"^":"a;QW"},
+D2:{
+"^":"a;QW"},
+my:{
"^":"a;oc>"},
Pe:{
"^":"Ge;G1>",
bu:[function(a){return this.G1},"call$0","gXo",0,0,null],
$isGe:true,
-static:{aq:function(a,b){return new H.Pe("CastError: Casting value of type "+a+" to incompatible type "+H.d(b))}}},
+static:{aq:function(a,b){return new H.Pe("CastError: Casting value of type "+H.d(a)+" to incompatible type "+H.d(b))}}},
Eq:{
"^":"Ge;G1>",
bu:[function(a){return"RuntimeError: "+H.d(this.G1)},"call$0","gXo",0,0,null],
@@ -10548,9 +10639,9 @@
tD:{
"^":"lb;dw,Iq,is,p6",
BD:[function(a){var z=this.rP(a)
-return z==null?!1:H.Ly(z,this.za())},"call$1","gQ4",2,0,null,49,[]],
+return z==null?!1:H.Ly(z,this.za())},"call$1","gQ4",2,0,null,54,[]],
rP:[function(a){var z=J.x(a)
-return"$signature" in z?z.$signature():null},"call$1","gie",2,0,null,91,[]],
+return"$signature" in z?z.$signature():null},"call$1","gie",2,0,null,96,[]],
za:[function(){var z,y,x,w,v,u,t
z={ "func": "dynafunc" }
y=this.dw
@@ -10585,7 +10676,7 @@
a=a
z=[]
for(y=a.length,x=0;x<y;++x)z.push(a[x].za())
-return z},"call$1","eL",2,0,null,68,[]]}},
+return z},"call$1","At",2,0,null,73,[]]}},
hJ:{
"^":"lb;",
bu:[function(a){return"dynamic"},"call$0","gXo",0,0,null],
@@ -10596,7 +10687,7 @@
za:[function(){var z,y
z=this.oc
y=init.allClasses[z]
-if(y==null)throw H.b("no type for '"+z+"'")
+if(y==null)throw H.b("no type for '"+H.d(z)+"'")
return y},"call$0","gpA",0,0,null],
bu:[function(a){return this.oc},"call$0","gXo",0,0,null]},
fw:{
@@ -10607,11 +10698,11 @@
z=this.oc
y=[init.allClasses[z]]
if(0>=y.length)return H.e(y,0)
-if(y[0]==null)throw H.b("no type for '"+z+"<...>'")
+if(y[0]==null)throw H.b("no type for '"+H.d(z)+"<...>'")
for(z=this.re,z=H.VM(new H.a7(z,z.length,0,null),[H.Kp(z,0)]);z.G();)y.push(z.lo.za())
this.Et=y
return y},"call$0","gpA",0,0,null],
-bu:[function(a){return this.oc+"<"+J.XS(this.re,", ")+">"},"call$0","gXo",0,0,null]},
+bu:[function(a){return H.d(this.oc)+"<"+J.XS(this.re,", ")+">"},"call$0","gXo",0,0,null]},
Zz:{
"^":"Ge;K9",
bu:[function(a){return"Unsupported operation: "+this.K9},"call$0","gXo",0,0,null],
@@ -10632,22 +10723,22 @@
n:[function(a,b){var z
if(b==null)return!1
z=J.x(b)
-return typeof b==="object"&&b!==null&&!!z.$iscu&&J.de(this.LU,b.LU)},"call$1","gUJ",2,0,null,104,[]],
+return typeof b==="object"&&b!==null&&!!z.$iscu&&J.de(this.LU,b.LU)},"call$1","gUJ",2,0,null,109,[]],
$iscu:true,
$isuq:true},
Lm:{
"^":"a;XP<,oc>,kU>"},
dC:{
-"^":"Tp:107;a",
-call$1:[function(a){return this.a(a)},"call$1",null,2,0,null,91,[],"call"],
+"^":"Tp:112;a",
+call$1:[function(a){return this.a(a)},"call$1",null,2,0,null,96,[],"call"],
$isEH:true},
wN:{
-"^":"Tp:350;b",
-call$2:[function(a,b){return this.b(a,b)},"call$2",null,4,0,null,91,[],94,[],"call"],
+"^":"Tp:353;b",
+call$2:[function(a,b){return this.b(a,b)},"call$2",null,4,0,null,96,[],99,[],"call"],
$isEH:true},
VX:{
-"^":"Tp:25;c",
-call$1:[function(a){return this.c(a)},"call$1",null,2,0,null,94,[],"call"],
+"^":"Tp:30;c",
+call$1:[function(a){return this.c(a)},"call$1",null,2,0,null,99,[],"call"],
$isEH:true},
VR:{
"^":"a;Ej,Ii,Ua",
@@ -10667,16 +10758,16 @@
if(typeof a!=="string")H.vh(new P.AT(a))
z=this.Ej.exec(a)
if(z==null)return
-return H.yx(this,z)},"call$1","gvz",2,0,null,339,[]],
+return H.yx(this,z)},"call$1","gvz",2,0,null,336,[]],
zD:[function(a){if(typeof a!=="string")H.vh(new P.AT(a))
-return this.Ej.test(a)},"call$1","guf",2,0,null,339,[]],
-dd:[function(a,b){return new H.KW(this,b)},"call$1","gYv",2,0,null,339,[]],
+return this.Ej.test(a)},"call$1","guf",2,0,null,336,[]],
+dd:[function(a,b){return new H.KW(this,b)},"call$1","gYv",2,0,null,336,[]],
yk:[function(a,b){var z,y
z=this.gF4()
z.lastIndex=b
y=z.exec(a)
if(y==null)return
-return H.yx(this,y)},"call$2","gow",4,0,null,26,[],120,[]],
+return H.yx(this,y)},"call$2","gow",4,0,null,31,[],123,[]],
Bh:[function(a,b){var z,y,x,w
z=this.gAT()
z.lastIndex=b
@@ -10687,15 +10778,15 @@
if(w<0)return H.e(y,w)
if(y[w]!=null)return
J.wg(y,w)
-return H.yx(this,y)},"call$2","gm4",4,0,null,26,[],120,[]],
+return H.yx(this,y)},"call$2","gm4",4,0,null,31,[],123,[]],
wL:[function(a,b,c){var z
if(c>=0){z=J.q8(b)
if(typeof z!=="number")return H.s(z)
z=c>z}else z=!0
if(z)throw H.b(P.TE(c,0,J.q8(b)))
-return this.Bh(b,c)},function(a,b){return this.wL(a,b,0)},"R4","call$2",null,"grS",2,2,null,335,26,[],120,[]],
+return this.Bh(b,c)},function(a,b){return this.wL(a,b,0)},"R4","call$2",null,"grS",2,2,null,332,31,[],123,[]],
$isVR:true,
-$iscT:true,
+$isSP:true,
static:{v4:[function(a,b,c,d){var z,y,x,w,v
z=b?"m":""
y=c?"":"i"
@@ -10703,12 +10794,12 @@
w=(function() {try {return new RegExp(a, z + y + x);} catch (e) {return e;}})()
if(w instanceof RegExp)return w
v=String(w)
-throw H.b(P.cD("Illegal RegExp pattern: "+a+", "+v))},"call$4","ka",8,0,null,98,[],99,[],100,[],101,[]]}},
+throw H.b(P.cD("Illegal RegExp pattern: "+a+", "+v))},"call$4","ka",8,0,null,103,[],104,[],105,[],106,[]]}},
EK:{
-"^":"a;zO,QK<",
+"^":"a;zO,QK",
t:[function(a,b){var z=this.QK
if(b>>>0!==b||b>=z.length)return H.e(z,b)
-return z[b]},"call$1","gIA",2,0,null,47,[]],
+return z[b]},"call$1","gIA",2,0,null,52,[]],
VO:function(a,b){},
$isOd:true,
static:{yx:function(a,b){var z=new H.EK(a,b)
@@ -10718,7 +10809,7 @@
"^":"mW;Gf,rv",
gA:function(a){return new H.Pb(this.Gf,this.rv,null)},
$asmW:function(){return[P.Od]},
-$ascX:function(){return[P.Od]}},
+$asQV:function(){return[P.Od]}},
Pb:{
"^":"a;VV,rv,Wh",
gl:function(){return this.Wh},
@@ -10739,42 +10830,35 @@
tQ:{
"^":"a;M,J9,zO",
t:[function(a,b){if(!J.de(b,0))H.vh(P.N(b))
-return this.zO},"call$1","gIA",2,0,null,351,[]],
+return this.zO},"call$1","gIA",2,0,null,354,[]],
$isOd:true}}],["app","package:observatory/app.dart",,G,{
"^":"",
m7:[function(a){var z
N.Jx("").To("Google Charts API loaded")
z=J.UQ(J.UQ($.cM(),"google"),"visualization")
$.NR=z
-return z},"call$1","vN",2,0,107,108,[]],
-js:[function(a,b){return J.pb(b,new G.BO(a))},"call$2","o4",4,0,null,110,[],111,[]],
+return z},"call$1","vN",2,0,112,113,[]],
mL:{
-"^":["Pi;Z6<-352,zf>-353,AJ,Eb,AP,fn",function(){return[C.mI]},function(){return[C.mI]},null,null,null,null],
-gn9:[function(a){return this.AJ},null,null,1,0,354,"response",355,356],
-sn9:[function(a,b){this.AJ=F.Wi(this,C.mE,this.AJ,b)},null,null,3,0,357,23,[],"response",355],
-gAq:[function(a){return this.Eb},null,null,1,0,358,"isolate",355,356],
-sAq:[function(a,b){this.Eb=F.Wi(this,C.Z8,this.Eb,b)},null,null,3,0,359,23,[],"isolate",355],
-Ww:[function(a,b){var z=H.B7(["type","Error","errorType",b,"text",a],P.L5(null,null,null,null,null))
-z=R.Jk(z)
-this.AJ=F.Wi(this,C.mE,this.AJ,z)
-N.Jx("").hh(a)},function(a){return this.Ww(a,"ResponseError")},"AI","call$2",null,"gug",2,2,null,360,20,[],361,[]],
-TR:[function(){this.zf.sec(this)
-var z=this.Z6
+"^":["Pi;Z6<-355,zf<-356,Eb,AJ,AP,Lk",function(){return[C.mI]},function(){return[C.mI]},null,null,null,null],
+gF1:[function(a){return this.Eb},null,null,1,0,357,"isolate",358,359],
+sF1:[function(a,b){this.Eb=F.Wi(this,C.Z8,this.Eb,b)},null,null,3,0,360,28,[],"isolate",358],
+gn9:[function(a){return this.AJ},null,null,1,0,361,"response",358,359],
+sn9:[function(a,b){this.AJ=F.Wi(this,C.mE,this.AJ,b)},null,null,3,0,362,28,[],"response",358],
+Da:[function(){var z=this.Z6
z.sec(this)
-z.kI()},"call$0","gIo",0,0,null],
-US:function(){this.TR()},
-hq:function(){this.TR()},
-static:{"^":"Tj,pQ"}},
+z.kI()},"call$0","gLW",0,0,null],
+US:function(){this.Da()},
+hq:function(){this.Da()}},
Kf:{
"^":"a;Yb<",
goH:function(){return this.Yb.nQ("getNumberOfColumns")},
gWT:function(a){return this.Yb.nQ("getNumberOfRows")},
-Gl:[function(a,b){this.Yb.V7("addColumn",[a,b])},"call$2","gGU",4,0,null,11,[],362,[]],
+Gl:[function(a,b){this.Yb.V7("addColumn",[a,b])},"call$2","gGU",4,0,null,11,[],363,[]],
lb:[function(){var z=this.Yb
-z.V7("removeRows",[0,z.nQ("getNumberOfRows")])},"call$0","gGL",0,0,null],
+z.V7("removeRows",[0,z.nQ("getNumberOfRows")])},"call$0","gA6",0,0,null],
RP:[function(a,b){var z=[]
C.Nm.FV(z,H.VM(new H.A8(b,P.En()),[null,null]))
-this.Yb.V7("addRow",[H.VM(new P.Tz(z),[null])])},"call$1","gJW",2,0,null,363,[]]},
+this.Yb.V7("addRow",[H.VM(new P.Tz(z),[null])])},"call$1","gJW",2,0,null,364,[]]},
qu:{
"^":"a;vR,bG>",
u5:[function(){var z,y,x
@@ -10782,219 +10866,18 @@
if(z!=null&&!J.de(J.UQ(z,"column"),-1)){y=this.bG
x=J.U6(z)
y.u(0,"sortColumn",x.t(z,"column"))
-y.u(0,"sortAscending",x.t(z,"ascending"))}},"call$0","gIK",0,0,null],
+y.u(0,"sortAscending",x.t(z,"ascending"))}},"call$0","gmf",0,0,null],
W2:[function(a){var z=P.jT(this.bG)
-this.vR.V7("draw",[a.gYb(),z])},"call$1","gW8",2,0,null,186,[]]},
-bv:{
-"^":["Pi;zf>,rI,we,jF,XR<-364,Z0<-365,hI,am,y6,c8,LE<-366,qU,yg,YG,jy,AP,fn",null,null,null,null,function(){return[C.mI]},function(){return[C.mI]},null,null,null,null,function(){return[C.mI]},null,null,null,null,null,null],
-gAq:function(a){return this},
-gPj:function(a){return this.rI},
-gjO:function(a){return this.rI},
-zr:[function(a){return this.zf.Sl(this.rI).ml(new G.eS(this)).ml(new G.IQ(this))},"call$0","gvC",0,0,null],
-Mq:[function(a){return H.d(this.rI)+"/"+H.d(a)},"call$1","gLc",2,0,367,109,[],"relativeLink",355],
-rn:[function(a){return"#/"+(H.d(this.rI)+"/"+H.d(a))},"call$1","gHP",2,0,367,109,[],"hashLink",355],
-gB1:[function(a){return this.jF},null,null,1,0,368,"profile",355,356],
-sB1:[function(a,b){this.jF=F.Wi(this,C.vb,this.jF,b)},null,null,3,0,369,23,[],"profile",355],
-goc:[function(a){return this.hI},null,null,1,0,370,"name",355,356],
-soc:[function(a,b){this.hI=F.Wi(this,C.YS,this.hI,b)},null,null,3,0,25,23,[],"name",355],
-gzz:[function(){return this.am},null,null,1,0,370,"vmName",355,356],
-szz:[function(a){this.am=F.Wi(this,C.KS,this.am,a)},null,null,3,0,25,23,[],"vmName",355],
-gw2:[function(){return this.y6},null,null,1,0,354,"entry",355,356],
-sw2:[function(a){this.y6=F.Wi(this,C.tP,this.y6,a)},null,null,3,0,357,23,[],"entry",355],
-gVc:[function(){return this.c8},null,null,1,0,370,"rootLib",355,356],
-sVc:[function(a){this.c8=F.Wi(this,C.iF,this.c8,a)},null,null,3,0,25,23,[],"rootLib",355],
-gCi:[function(){return this.qU},null,null,1,0,371,"newHeapUsed",355,356],
-sCi:[function(a){this.qU=F.Wi(this,C.IO,this.qU,a)},null,null,3,0,372,23,[],"newHeapUsed",355],
-guq:[function(){return this.yg},null,null,1,0,371,"oldHeapUsed",355,356],
-suq:[function(a){this.yg=F.Wi(this,C.ap,this.yg,a)},null,null,3,0,372,23,[],"oldHeapUsed",355],
-gUu:[function(){return this.YG},null,null,1,0,354,"topFrame",355,356],
-sUu:[function(a){this.YG=F.Wi(this,C.ch,this.YG,a)},null,null,3,0,357,23,[],"topFrame",355],
-gNh:[function(a){return this.jy},null,null,1,0,370,"fileAndLine",355,356],
-bj:function(a,b){return this.gNh(this).call$1(b)},
-sNh:[function(a,b){this.jy=F.Wi(this,C.SK,this.jy,b)},null,null,3,0,25,23,[],"fileAndLine",355],
-eC:[function(a){var z,y,x,w
-z=J.U6(a)
-if(!J.de(z.t(a,"type"),"Isolate")){N.Jx("").hh("Unexpected message type in Isolate.update: "+H.d(z.t(a,"type")))
-return}if(z.t(a,"rootLib")==null||z.t(a,"timers")==null||z.t(a,"heap")==null){N.Jx("").hh("Malformed 'Isolate' response: "+H.d(a))
-return}y=J.UQ(z.t(a,"rootLib"),"id")
-this.c8=F.Wi(this,C.iF,this.c8,y)
-y=z.t(a,"name")
-this.am=F.Wi(this,C.KS,this.am,y)
-if(z.t(a,"entry")!=null){y=z.t(a,"entry")
-y=F.Wi(this,C.tP,this.y6,y)
-this.y6=y
-y=J.UQ(y,"name")
-this.hI=F.Wi(this,C.YS,this.hI,y)}else this.hI=F.Wi(this,C.YS,this.hI,"root isolate")
-if(z.t(a,"topFrame")!=null){y=z.t(a,"topFrame")
-this.YG=F.Wi(this,C.ch,this.YG,y)}x=H.B7([],P.L5(null,null,null,null,null))
-J.kH(z.t(a,"timers"),new G.TI(x))
-y=this.LE
-w=J.w1(y)
-w.u(y,"total",x.t(0,"time_total_runtime"))
-w.u(y,"compile",x.t(0,"time_compilation"))
-w.u(y,"gc",0)
-w.u(y,"init",J.WB(J.WB(J.WB(x.t(0,"time_script_loading"),x.t(0,"time_creating_snapshot")),x.t(0,"time_isolate_initialization")),x.t(0,"time_bootstrap")))
-w.u(y,"dart",x.t(0,"time_dart_execution"))
-y=J.UQ(z.t(a,"heap"),"usedNew")
-this.qU=F.Wi(this,C.IO,this.qU,y)
-z=J.UQ(z.t(a,"heap"),"usedOld")
-this.yg=F.Wi(this,C.ap,this.yg,z)},"call$1","gpn",2,0,null,149,[]],
-bu:[function(a){return H.d(this.rI)},"call$0","gXo",0,0,null],
-hv:[function(a){var z,y,x,w
-z=this.Z0
-y=J.U6(z)
-x=0
-while(!0){w=y.gB(z)
-if(typeof w!=="number")return H.s(w)
-if(!(x<w))break
-if(J.kE(y.t(z,x),a)===!0)return y.t(z,x);++x}return},"call$1","gER",2,0,null,373,[]],
-R7:[function(){var z,y,x,w
-N.Jx("").To("Reset all code ticks.")
-z=this.Z0
-y=J.U6(z)
-x=0
-while(!0){w=y.gB(z)
-if(typeof w!=="number")return H.s(w)
-if(!(x<w))break
-y.t(z,x).FB();++x}},"call$0","gve",0,0,null],
-oe:[function(a){var z,y,x,w,v,u,t
-for(z=J.GP(a),y=this.XR,x=J.U6(y);z.G();){w=z.gl()
-v=J.U6(w)
-u=J.UQ(v.t(w,"script"),"id")
-t=x.t(y,u)
-if(t==null){t=G.Ak(v.t(w,"script"))
-x.u(y,u,t)}t.hC(v.t(w,"hits"))}},"call$1","gHY",2,0,null,374,[]],
-tx:[function(a,b,c){var z,y,x
-z=H.B7(["type",a,b,c],P.L5(null,null,null,null,null))
-y=this.zf.ec
-y.toString
-x=R.Jk(z)
-y.AJ=F.Wi(y,C.mE,y.AJ,x)},"call$3","gmk",6,0,null,11,[],375,[],285,[]],
-XT:[function(a,b){var z,y,x
-z=J.x(a)
-if(typeof a==="object"&&a!==null&&!!z.$isew){z=W.qc(a.target)
-y=J.RE(z)
-x=H.d(y.gys(z))+" "+y.gpo(z)
-if(y.gys(z)===0)x="No service found. Did you run with --enable-vm-service ?"
-this.zf.ec.Ww(x,"RequestError")}else this.zf.ec.AI(H.d(a)+" "+H.d(b))},"call$2","gdT",4,0,376,18,[],377,[]],
-n1:[function(a){var z,y,x
-z=G.Ep(a)
-y=J.x(z)
-if(y.n(z,0)){this.zf.ec.AI(a+" is not a valid code request.")
-return}x=this.hv(z)
-if(x!=null){N.Jx("").To("Found code with 0x"+y.WZ(z,16)+" in isolate.")
-this.tx("Code","code",x)
-return}this.zf.Sl(H.d(this.rI)+"/"+a).ml(new G.at(this,z)).OA(this.gdT())},"call$1","gN8",2,0,null,109,[]],
-PL:[function(a){var z,y
-z=J.UQ(this.XR,a)
-y=z!=null
-if(y&&!z.giI()){N.Jx("").To("Found script "+H.d(J.UQ(z.gKC(),"name"))+" in isolate")
-this.tx("Script","script",z)
-return}if(y){this.zf.Sl(H.d(this.rI)+"/"+a).ml(new G.wu(this,z))
-return}this.zf.Sl(H.d(this.rI)+"/"+a).ml(new G.Vc(this,a))},"call$1","gdk",2,0,null,109,[]],
-ox:[function(a){var z,y
-z=$.Ks().Ej
-y=typeof a!=="string"
-if(y)H.vh(new P.AT(a))
-if(z.test(a)){this.n1(a)
-return}z=$.hK().Ej
-if(y)H.vh(new P.AT(a))
-if(z.test(a)){this.PL(a)
-return}return this.zf.Sl(H.d(this.rI)+"/"+a).ml(new G.KQ(this,a))},"call$1","gVw",2,0,null,109,[]],
-oX:[function(a){return this.zf.Sl(H.d(this.rI)+"/"+H.d(a))},"call$1","guZ",2,0,null,109,[]],
-$isd3:true,
-static:{"^":"rC,lF",Ep:[function(a){var z,y,x,w,v,u
-z=$.Ks().R4(0,a)
-if(z==null)return 0
-try{x=z.gQK().input
-w=z
-v=w.gQK().index
-w=w.gQK()
-if(0>=w.length)return H.e(w,0)
-w=J.q8(w[0])
-if(typeof w!=="number")return H.s(w)
-y=H.BU(C.xB.yn(x,v+w),16,null)
-return y}catch(u){H.Ru(u)
-return 0}},"call$1","VP",2,0,null,109,[]]}},
-eS:{
-"^":"Tp:107;a",
-call$1:[function(a){return this.a.eC(a)},"call$1",null,2,0,null,191,[],"call"],
-$isEH:true},
-IQ:{
-"^":"Tp:107;b",
-call$1:[function(a){return this.b},"call$1",null,2,0,null,108,[],"call"],
-$isEH:true},
-TI:{
-"^":"Tp:107;a",
-call$1:[function(a){var z=J.U6(a)
-this.a.u(0,z.t(a,"name"),z.t(a,"time"))},"call$1",null,2,0,null,378,[],"call"],
-$isEH:true},
-at:{
-"^":"Tp:107;a,b",
-call$1:[function(a){var z,y,x,w,v
-z=R.Jk([])
-y=H.B7([],P.L5(null,null,null,null,null))
-y=R.Jk(y)
-x=H.B7([],P.L5(null,null,null,null,null))
-x=R.Jk(x)
-w=J.U6(a)
-v=new G.kx(C.l8,H.BU(w.t(a,"start"),16,null),H.BU(w.t(a,"end"),16,null),[],[],[],0,0,z,y,x,null,null,null,null)
-v.NV(a)
-N.Jx("").To("Added code with 0x"+J.u1(this.b,16)+" to isolate.")
-x=this.a
-J.bi(x.Z0,v)
-x.tx("Code","code",v)},"call$1",null,2,0,null,149,[],"call"],
-$isEH:true},
-wu:{
-"^":"Tp:107;a,b",
-call$1:[function(a){var z=this.b
-z.qi(J.UQ(a,"source"))
-N.Jx("").To("Grabbed script "+H.d(J.UQ(z.gKC(),"name"))+" source.")
-this.a.tx("Script","script",z)},"call$1",null,2,0,null,379,[],"call"],
-$isEH:true},
-Vc:{
-"^":"Tp:107;c,d",
-call$1:[function(a){var z,y
-z=G.Ak(a)
-N.Jx("").To("Added script "+H.d(J.UQ(z.VG,"name"))+" to isolate.")
-y=this.c
-y.tx("Script","script",z)
-J.kW(y.XR,this.d,z)},"call$1",null,2,0,null,379,[],"call"],
-$isEH:true},
-KQ:{
-"^":"Tp:107;a,b",
-call$1:[function(a){var z,y
-z=this.a
-y=J.U6(a)
-y=new G.SI(H.VM(new V.qC(P.Py(null,null,null,null,null),null,null),[null,null]),z,y.t(a,"id"),y.t(a,"type"),null,null,null,null)
-y.wp(z,a)
-return y},"call$1",null,2,0,null,191,[],"call"],
-$isEH:true},
+this.vR.V7("draw",[a.gYb(),z])},"call$1","gnS",2,0,null,185,[]]},
dZ:{
-"^":"Pi;ec?,jF,JL,MU,AP,fn",
-guw:function(a){return this.ec},
-gB1:[function(a){return this.jF},null,null,1,0,380,"profile",355,356],
-sB1:[function(a,b){this.jF=F.Wi(this,C.vb,this.jF,b)},null,null,3,0,381,23,[],"profile",355],
-gjW:[function(){return this.JL},null,null,1,0,370,"currentHash",355,356],
-sjW:[function(a){this.JL=F.Wi(this,C.h1,this.JL,a)},null,null,3,0,25,23,[],"currentHash",355],
-gXX:[function(){return this.MU},null,null,1,0,382,"currentHashUri",355,356],
-sXX:[function(a){this.MU=F.Wi(this,C.tv,this.MU,a)},null,null,3,0,383,23,[],"currentHashUri",355],
+"^":"Pi;ec?,JL,AP,Lk",
+gjW:[function(){return this.JL},null,null,1,0,365,"currentHash",358,359],
+sjW:[function(a){this.JL=F.Wi(this,C.h1,this.JL,a)},null,null,3,0,30,28,[],"currentHash",358],
kI:[function(){var z=C.PP.aM(window)
H.VM(new W.Ov(0,z.uv,z.Ph,W.aF(new G.Qe(this)),z.Sg),[H.Kp(z,0)]).Zz()
if(!this.S7())this.df()},"call$0","gV3",0,0,null],
-vI:[function(){var z,y,x,w,v
-z=$.oy().R4(0,this.JL)
-if(z==null)return
-y=z.QK
-x=y.input
-w=y.index
-v=y.index
-if(0>=y.length)return H.e(y,0)
-y=J.q8(y[0])
-if(typeof y!=="number")return H.s(y)
-return C.xB.Nj(x,w,v+y)},"call$0","gzJ",0,0,null],
-V4:[function(){var z,y,x,w
-z=$.oy().R4(0,this.JL)
+e8:[function(){var z,y,x,w
+z=$.wM().R4(0,this.JL)
if(z==null)return
y=z.QK
x=y.input
@@ -11002,332 +10885,46 @@
if(0>=y.length)return H.e(y,0)
y=J.q8(y[0])
if(typeof y!=="number")return H.s(y)
-return C.xB.yn(x,w+y)},"call$0","gdQ",0,0,null],
-gwB:[function(){return this.vI()!=null},null,null,1,0,380,"hasCurrentIsolate",356],
-R6:[function(){var z=this.vI()
+return C.xB.yn(x,w+y)},"call$0","gIZ",0,0,null],
+R6:[function(){var z,y,x,w
+z=$.QJ().R4(0,this.JL)
if(z==null)return""
-return J.D8(z,2)},"call$0","gKo",0,0,null],
+y=z.QK
+x=y.input
+w=y.index
+if(0>=y.length)return H.e(y,0)
+y=J.q8(y[0])
+if(typeof y!=="number")return H.s(y)
+return C.xB.Nj(x,2,w+y)},"call$0","gKo",0,0,null],
Pr:[function(){var z=this.R6()
if(z==="")return
-return this.ec.zf.AQ(z)},"call$0","gjf",0,0,358,"currentIsolate",356],
+return J.dm(this.ec.zf).AQ(z)},"call$0","gjf",0,0,357,"currentIsolate",359],
S7:[function(){var z=J.Co(C.ol.gmW(window))
z=F.Wi(this,C.h1,this.JL,z)
this.JL=z
if(J.de(z,"")||J.de(this.JL,"#")){J.We(C.ol.gmW(window),"#/isolates/")
return!0}return!1},"call$0","goO",0,0,null],
-df:[function(){var z,y,x,w
+rR:[function(a){var z=this.ec
+z.AJ=F.Wi(z,C.mE,z.AJ,a)},"call$1","gf8",2,0,366,367,[]],
+df:[function(){var z,y,x
z=J.Co(C.ol.gmW(window))
-z=F.Wi(this,C.h1,this.JL,z)
-this.JL=z
-y=J.D8(z,1)
+this.JL=F.Wi(this,C.h1,this.JL,z)
z=this.ec
-x=this.Pr()
-z.Eb=F.Wi(z,C.Z8,z.Eb,x)
-x=P.r6($.qG().ej(y))
-this.MU=F.Wi(this,C.tv,this.MU,x)
-if(this.ec.Eb==null){N.Jx("").j2("Refreshing isolates.")
-this.ec.zf.r3()
-return}w=this.V4()
-N.Jx("").To("Asking "+H.d(J.F8(this.ec.Eb))+" for "+w)
-this.ec.Eb.ox(w).ml(new G.GH(this))},"call$0","glq",0,0,null],
-static:{"^":"x4,Qq,qY"}},
+y=this.Pr()
+z.Eb=F.Wi(z,C.Z8,z.Eb,y)
+z=this.ec
+if(z.Eb==null){J.am(J.dm(z.zf)).ml(this.gf8())
+return}x=this.e8()
+this.ec.Eb.ox(x).ml(this.gf8())},"call$0","glq",0,0,null],
+static:{"^":"K3D,m6,vi"}},
Qe:{
-"^":"Tp:107;a",
+"^":"Tp:112;a",
call$1:[function(a){var z=this.a
if(z.S7())return
-F.Wi(z,C.D2,z.vI()==null,z.vI()!=null)
-z.df()},"call$1",null,2,0,null,384,[],"call"],
+z.df()},"call$1",null,2,0,null,368,[],"call"],
$isEH:true},
-GH:{
-"^":"Tp:107;a",
-call$1:[function(a){var z=this.a.ec
-z.AJ=F.Wi(z,C.mE,z.AJ,a)},"call$1",null,2,0,null,385,[],"call"],
-$isEH:true},
-Q4:{
-"^":["Pi;Yu<-386,m7<-387,L4<-387,NC,xb,AP,fn",function(){return[C.mI]},function(){return[C.mI]},function(){return[C.mI]},null,null,null,null],
-ga0:[function(){return this.NC},null,null,1,0,371,"ticks",355,356],
-sa0:[function(a){this.NC=F.Wi(this,C.p1,this.NC,a)},null,null,3,0,372,23,[],"ticks",355],
-gGK:[function(){return this.xb},null,null,1,0,388,"percent",355,356],
-sGK:[function(a){this.xb=F.Wi(this,C.tI,this.xb,a)},null,null,3,0,389,23,[],"percent",355],
-oS:[function(){var z=this.xb
-if(z==null||J.Hb(z,0))return""
-return J.Ez(this.xb,2)+"% ("+H.d(this.NC)+")"},"call$0","gu3",0,0,370,"formattedTicks",356],
-xt:[function(){return"0x"+J.u1(this.Yu,16)},"call$0","gDa",0,0,370,"formattedAddress",356]},
-WAE:{
-"^":"a;Zd",
-bu:[function(a){return"CodeKind."+this.Zd},"call$0","gXo",0,0,null],
-static:{"^":"r1,pg,WAg",CQ:[function(a){var z=J.x(a)
-if(z.n(a,"Native"))return C.nj
-else if(z.n(a,"Dart"))return C.l8
-else if(z.n(a,"Collected"))return C.WA
-throw H.b(P.hS())},"call$1","Tx",2,0,null,86,[]]}},
-N8:{
-"^":"a;Yu<,pO,Iw"},
-Vi:{
-"^":"a;tT>,Av<"},
-kx:{
-"^":["Pi;fY>,vg,Mb,a0<,VS<,hw,fF<,Du<,va<-390,tQ,Ge,hI,HJ,AP,fn",null,null,null,null,null,null,null,null,function(){return[C.mI]},null,null,null,null,null,null],
-gkx:[function(){return this.tQ},null,null,1,0,354,"functionRef",355,356],
-skx:[function(a){this.tQ=F.Wi(this,C.yg,this.tQ,a)},null,null,3,0,357,23,[],"functionRef",355],
-gZN:[function(){return this.Ge},null,null,1,0,354,"codeRef",355,356],
-sZN:[function(a){this.Ge=F.Wi(this,C.EX,this.Ge,a)},null,null,3,0,357,23,[],"codeRef",355],
-goc:[function(a){return this.hI},null,null,1,0,370,"name",355,356],
-soc:[function(a,b){this.hI=F.Wi(this,C.YS,this.hI,b)},null,null,3,0,25,23,[],"name",355],
-giK:[function(){return this.HJ},null,null,1,0,370,"userName",355,356],
-siK:[function(a){this.HJ=F.Wi(this,C.ct,this.HJ,a)},null,null,3,0,25,23,[],"userName",355],
-R3:[function(a,b){var z,y,x,w,v,u,t
-z=J.U6(b)
-this.fF=H.BU(z.t(b,"inclusive_ticks"),null,null)
-this.Du=H.BU(z.t(b,"exclusive_ticks"),null,null)
-y=z.t(b,"ticks")
-if(y!=null&&J.z8(J.q8(y),0)){z=J.U6(y)
-x=this.a0
-w=0
-while(!0){v=z.gB(y)
-if(typeof v!=="number")return H.s(v)
-if(!(w<v))break
-u=H.BU(z.t(y,w),16,null)
-t=H.BU(z.t(y,w+1),null,null)
-x.push(new G.N8(u,H.BU(z.t(y,w+2),null,null),t))
-w+=3}}},"call$1","gOT",2,0,null,149,[]],
-QQ:[function(){return this.uL(this.VS)},"call$0","gyj",0,0,null],
-dJ:[function(a){return this.KU(this.VS,a)},"call$1","gf7",2,0,null,141,[]],
-uL:[function(a){var z,y,x
-for(z=H.VM(new H.a7(a,a.length,0,null),[H.Kp(a,0)]),y=0;z.G();){x=z.lo.gAv()
-if(typeof x!=="number")return H.s(x)
-y+=x}return y},"call$1","grr",2,0,null,391,[]],
-KU:[function(a,b){var z,y
-for(z=H.VM(new H.a7(a,a.length,0,null),[H.Kp(a,0)]);z.G();){y=z.lo
-if(J.de(J.on(y),b))return y.gAv()}return 0},"call$2","gKZ",4,0,null,391,[],141,[]],
-xF:[function(a,b){var z=J.U6(a)
-this.lC(this.VS,z.t(a,"callers"),b)
-this.lC(this.hw,z.t(a,"callees"),b)},"call$2","gL0",4,0,null,141,[],392,[]],
-lC:[function(a,b,c){var z,y,x,w,v
-C.Nm.sB(a,0)
-z=J.U6(b)
-y=0
-while(!0){x=z.gB(b)
-if(typeof x!=="number")return H.s(x)
-if(!(y<x))break
-w=H.BU(z.t(b,y),null,null)
-v=H.BU(z.t(b,y+1),null,null)
-if(w>>>0!==w||w>=c.length)return H.e(c,w)
-a.push(new G.Vi(c[w],v))
-y+=2}H.ZE(a,0,a.length-1,new G.fx())},"call$3","gPG",6,0,null,391,[],239,[],392,[]],
-FB:[function(){this.fF=0
-this.Du=0
-C.Nm.sB(this.a0,0)
-for(var z=J.GP(this.va);z.G();)z.gl().sa0(0)},"call$0","gNB",0,0,null],
-iv:[function(a){var z,y,x,w,v
-z=this.va
-y=J.w1(z)
-y.V1(z)
-x=J.U6(a)
-w=0
-while(!0){v=x.gB(a)
-if(typeof v!=="number")return H.s(v)
-if(!(w<v))break
-c$0:{if(J.de(x.t(a,w),""))break c$0
-y.h(z,new G.Q4(H.BU(x.t(a,w),null,null),x.t(a,w+1),x.t(a,w+2),0,null,null,null))}w+=3}},"call$1","goU",2,0,null,393,[]],
-tg:[function(a,b){var z=J.Wx(b)
-return z.F(b,this.vg)&&z.C(b,this.Mb)},"call$1","gdj",2,0,null,373,[]],
-NV:function(a){var z,y
-z=J.U6(a)
-y=z.t(a,"function")
-y=R.Jk(y)
-this.tQ=F.Wi(this,C.yg,this.tQ,y)
-y=R.Jk(a)
-this.Ge=F.Wi(this,C.EX,this.Ge,y)
-y=z.t(a,"name")
-this.hI=F.Wi(this,C.YS,this.hI,y)
-y=z.t(a,"user_name")
-this.HJ=F.Wi(this,C.ct,this.HJ,y)
-if(z.t(a,"disassembly")!=null)this.iv(z.t(a,"disassembly"))},
-$iskx:true},
-fx:{
-"^":"Tp:346;",
-call$2:[function(a,b){return J.xH(b.gAv(),a.gAv())},"call$2",null,4,0,null,128,[],188,[],"call"],
-$isEH:true},
-CM:{
-"^":"a;Aq>,tm,hV<",
-j8:[function(a){var z,y,x,w,v,u,t,s,r,q,p,o
-z=J.U6(a)
-if(!J.de(z.t(a,"type"),"ProfileCode"))return
-y=this.Aq
-x=y.hv(H.BU(J.UQ(z.t(a,"code"),"start"),16,null))
-if(x==null){w=G.CQ(z.t(a,"kind"))
-v=z.t(a,"code")
-z=J.U6(v)
-u=H.BU(z.t(v,"start"),16,null)
-t=H.BU(z.t(v,"end"),16,null)
-s=z.t(v,"name")
-r=z.t(v,"user_name")
-q=R.Jk([])
-p=H.B7([],P.L5(null,null,null,null,null))
-p=R.Jk(p)
-o=H.B7([],P.L5(null,null,null,null,null))
-o=R.Jk(o)
-x=new G.kx(w,u,t,[],[],[],0,0,q,p,o,s,null,null,null)
-x.Ge=F.Wi(x,C.EX,o,v)
-o=z.t(v,"function")
-q=R.Jk(o)
-x.tQ=F.Wi(x,C.yg,x.tQ,q)
-x.HJ=F.Wi(x,C.ct,x.HJ,r)
-if(z.t(v,"disassembly")!=null){x.iv(z.t(v,"disassembly"))
-z.u(v,"disassembly",null)}J.bi(y.gZ0(),x)}J.JD(x,a)
-this.tm.push(x)},"call$1","gWF",2,0,null,394,[]],
-T0:[function(a){var z,y
-z=this.Aq.gZ0()
-y=J.w1(z)
-y.GT(z,new G.vu())
-if(J.u6(y.gB(z),a)||J.de(a,0))return z
-return y.D6(z,0,a)},"call$1","gmZ",2,0,null,127,[]],
-uH:function(a,b){var z,y,x,w,v
-z=J.U6(b)
-y=z.t(b,"codes")
-this.hV=z.t(b,"samples")
-z=J.U6(y)
-N.Jx("").To("Creating profile from "+H.d(this.hV)+" samples and "+H.d(z.gB(y))+" code objects.")
-this.Aq.R7()
-x=this.tm
-C.Nm.sB(x,0)
-z.aN(y,new G.xn(this))
-w=0
-while(!0){v=z.gB(y)
-if(typeof v!=="number")return H.s(v)
-if(!(w<v))break
-if(w>=x.length)return H.e(x,w)
-x[w].xF(z.t(y,w),x);++w}C.Nm.sB(x,0)},
-static:{hh:function(a,b){var z=new G.CM(a,H.VM([],[G.kx]),0)
-z.uH(a,b)
-return z}}},
-xn:{
-"^":"Tp:107;a",
-call$1:[function(a){var z,y,x,w
-try{this.a.j8(a)}catch(x){w=H.Ru(x)
-z=w
-y=new H.XO(x,null)
-N.Jx("").wF("Error processing code object. "+H.d(z)+" "+H.d(y),z,y)}},"call$1",null,2,0,null,141,[],"call"],
-$isEH:true},
-vu:{
-"^":"Tp:395;",
-call$2:[function(a,b){return J.xH(b.gDu(),a.gDu())},"call$2",null,4,0,null,128,[],188,[],"call"],
-$isEH:true},
-c2:{
-"^":["Pi;Rd>-386,ye,i0,AP,fn",function(){return[C.mI]},null,null,null,null],
-gu9:[function(){return this.ye},null,null,1,0,371,"hits",355,356],
-su9:[function(a){this.ye=F.Wi(this,C.K7,this.ye,a)},null,null,3,0,372,23,[],"hits",355],
-ga4:[function(a){return this.i0},null,null,1,0,370,"text",355,356],
-sa4:[function(a,b){this.i0=F.Wi(this,C.MB,this.i0,b)},null,null,3,0,25,23,[],"text",355],
-goG:function(){return J.J5(this.ye,0)},
-gVt:function(){return J.z8(this.ye,0)},
-$isc2:true},
-rj:{
-"^":["Pi;I2,VG,pw,tq,Sw<-396,iA,AP,fn",null,null,null,null,function(){return[C.mI]},null,null,null],
-gfY:[function(a){return this.I2},null,null,1,0,370,"kind",355,356],
-sfY:[function(a,b){this.I2=F.Wi(this,C.fy,this.I2,b)},null,null,3,0,25,23,[],"kind",355],
-gKC:[function(){return this.VG},null,null,1,0,354,"scriptRef",355,356],
-sKC:[function(a){this.VG=F.Wi(this,C.Be,this.VG,a)},null,null,3,0,357,23,[],"scriptRef",355],
-gQT:[function(){return this.pw},null,null,1,0,370,"shortName",355,397],
-sQT:[function(a){this.pw=F.Wi(this,C.Kt,this.pw,a)},null,null,3,0,25,23,[],"shortName",355],
-gBi:[function(){return this.tq},null,null,1,0,354,"libraryRef",355,356],
-sBi:[function(a){this.tq=F.Wi(this,C.cg,this.tq,a)},null,null,3,0,357,23,[],"libraryRef",355],
-giI:function(){return this.iA},
-gHh:[function(){return J.Pr(this.Sw,1)},null,null,1,0,398,"linesForDisplay",356],
-H2:[function(a){var z,y,x,w
-z=this.Sw
-y=J.U6(z)
-x=J.Wx(a)
-if(x.F(a,y.gB(z)))y.sB(z,x.g(a,1))
-w=y.t(z,a)
-if(w==null){w=new G.c2(a,-1,"",null,null)
-y.u(z,a,w)}return w},"call$1","git",2,0,null,399,[]],
-qi:[function(a){var z,y,x,w
-if(a==null)return
-N.Jx("").To("Loading source for "+H.d(J.UQ(this.VG,"name")))
-z=J.uH(a,"\n")
-this.iA=z.length===0
-for(y=0;y<z.length;y=x){x=y+1
-w=this.H2(x)
-if(y>=z.length)return H.e(z,y)
-J.c9(w,z[y])}},"call$1","gUe",2,0,null,27,[]],
-hC:[function(a){var z,y,x
-z=J.U6(a)
-y=0
-while(!0){x=z.gB(a)
-if(typeof x!=="number")return H.s(x)
-if(!(y<x))break
-this.H2(z.t(a,y)).su9(z.t(a,y+1))
-y+=2}F.Wi(this,C.C2,"","("+C.CD.yM(this.Nk(),1)+"% covered)")},"call$1","geL",2,0,null,400,[]],
-Nk:[function(){var z,y,x,w
-for(z=J.GP(this.Sw),y=0,x=0;z.G();){w=z.gl()
-if(w==null)continue
-if(!w.goG())continue;++x
-if(!w.gVt())continue;++y}if(x===0)return 0
-return y/x*100},"call$0","gUO",0,0,388,"coveredPercentage",356],
-Jt:[function(){return"("+C.CD.yM(this.Nk(),1)+"% covered)"},"call$0","gic",0,0,370,"coveredPercentageFormatted",356],
-Ea:function(a){var z,y
-z=J.U6(a)
-y=H.B7(["id",z.t(a,"id"),"name",z.t(a,"name"),"user_name",z.t(a,"user_name")],P.L5(null,null,null,null,null))
-y=R.Jk(y)
-this.VG=F.Wi(this,C.Be,this.VG,y)
-y=J.D8(z.t(a,"name"),J.WB(J.eJ(z.t(a,"name"),"/"),1))
-this.pw=F.Wi(this,C.Kt,this.pw,y)
-y=z.t(a,"library")
-y=R.Jk(y)
-this.tq=F.Wi(this,C.cg,this.tq,y)
-y=z.t(a,"kind")
-this.I2=F.Wi(this,C.fy,this.I2,y)
-this.qi(z.t(a,"source"))},
-$isrj:true,
-static:{Ak:function(a){var z,y,x
-z=H.B7([],P.L5(null,null,null,null,null))
-z=R.Jk(z)
-y=H.B7([],P.L5(null,null,null,null,null))
-y=R.Jk(y)
-x=H.VM([],[G.c2])
-x=R.Jk(x)
-x=new G.rj(null,z,null,y,x,!0,null,null)
-x.Ea(a)
-return x}}},
-af:{
-"^":"d3;Aq>",
-gPj:function(a){return H.d(this.Aq.rI)+"/"+H.d(this.rI)},
-gjO:function(a){return this.rI}},
-SI:{
-"^":"af;YY,Aq,rI,we,R9,wv,V2,me",
-zr:[function(a){var z=this.Aq
-z.zf.Sl(H.d(z.rI)+"/"+H.d(this.rI)).ml(this.gE7())
-return P.Ab(this,null)},"call$0","gvC",0,0,null],
-Tn:[function(a){var z=this.YY
-z.V1(0)
-z.FV(0,a)},"call$1","gE7",2,0,401,191,[]],
-FV:[function(a,b){return this.YY.FV(0,b)},"call$1","gDY",2,0,null,104,[]],
-V1:[function(a){return this.YY.V1(0)},"call$0","gyP",0,0,null],
-di:[function(a){return this.YY.Zp.di(a)},"call$1","gmc",2,0,null,277,[]],
-x4:[function(a){return this.YY.Zp.x4(a)},"call$1","gV9",2,0,null,402,[]],
-aN:[function(a,b){return this.YY.Zp.aN(0,b)},"call$1","gjw",2,0,null,115,[]],
-Rz:[function(a,b){return this.YY.Rz(0,b)},"call$1","gRI",2,0,null,42,[]],
-t:[function(a,b){return this.YY.Zp.t(0,b)},"call$1","gIA",2,0,null,402,[]],
-u:[function(a,b,c){this.YY.u(0,b,c)
-return c},"call$2","gj3",4,0,null,402,[],277,[]],
-gl0:function(a){var z=this.YY.Zp
-return z.gB(z)===0},
-gor:function(a){var z=this.YY.Zp
-return z.gB(z)!==0},
-gvc:function(a){var z=this.YY.Zp
-return z.gvc(z)},
-gUQ:function(a){var z=this.YY.Zp
-return z.gUQ(z)},
-gB:function(a){var z=this.YY.Zp
-return z.gB(z)},
-wp:function(a,b){var z=this.YY
-z.V1(0)
-z.FV(0,b)},
-$isZ0:true,
-$asZ0:function(){return[null,null]}},
Y2:{
-"^":["Pi;eT>,yt<-386,wd>-403,oH<-404",null,function(){return[C.mI]},function(){return[C.mI]},function(){return[C.mI]}],
+"^":["Pi;eT>,yt<-369,wd>-370,oH<-371",null,function(){return[C.mI]},function(){return[C.mI]},function(){return[C.mI]}],
goE:function(a){return this.z3},
soE:function(a,b){var z=this.z3
this.z3=b
@@ -11337,15 +10934,15 @@
return this.z3},"call$0","gMk",0,0,null],
$isY2:true},
XN:{
-"^":["Pi;rO,WT>-403,AP,fn",null,function(){return[C.mI]},null,null],
+"^":["Pi;rI,WT>-370,AP,Lk",null,function(){return[C.mI]},null,null],
rT:[function(a){var z,y
z=this.WT
y=J.w1(z)
y.V1(z)
-y.FV(z,a)},"call$1","gcr",2,0,null,405,[]],
-Mf:[function(a){var z=J.UQ(this.WT,a)
+y.FV(z,a)},"call$1","gcr",2,0,null,372,[]],
+qU:[function(a){var z=J.UQ(this.WT,a)
if(z.r8())this.VE(z)
-else this.PP(z)},"call$1","gMk",2,0,null,406,[]],
+else this.PP(z)},"call$1","gMk",2,0,null,373,[]],
VE:[function(a){var z,y,x,w,v,u,t
z=this.WT
y=J.U6(z)
@@ -11358,7 +10955,7 @@
u=x+v+1
t=J.UQ(w.gwd(a),v)
if(u===-1)y.h(z,t)
-else y.xe(z,u,t);++v}},"call$1","gxY",2,0,null,363,[]],
+else y.xe(z,u,t);++v}},"call$1","gxY",2,0,null,364,[]],
PP:[function(a){var z,y,x,w,v
z=J.RE(a)
y=J.q8(z.gwd(a))
@@ -11369,159 +10966,37 @@
z.soE(a,!1)
z=this.WT
w=J.U6(z)
-for(v=w.u8(z,a)+1,x=0;x<y;++x)w.KI(z,v)},"call$1","gNu",2,0,null,363,[]]},
-No:{
-"^":["Pi;ec?,i2<-407",null,function(){return[C.mI]}],
-guw:[function(a){return this.ec},null,null,1,0,408,"app",356],
-Sl:[function(a){return this.GS(a).ml(new G.PG()).OA(new G.YW())},"call$1","gdI",2,0,null,265,[]],
-AQ:[function(a){var z,y,x,w,v,u
-z=this.i2
-y=J.U6(z)
-x=y.t(z,a)
-if(x!=null)return x
-w=P.L5(null,null,null,J.O,G.rj)
-w=R.Jk(w)
-v=H.VM([],[G.kx])
-u=P.L5(null,null,null,J.O,J.GW)
-u=R.Jk(u)
-x=new G.bv(this,a,"Isolate",null,w,v,"isolate",null,null,null,u,0,0,null,null,null,null)
-y.u(z,a,x)
-return x},"call$1","grE",2,0,null,110,[]],
-GR:[function(a){var z=[]
-J.kH(this.i2,new G.Yu(a,z))
-H.bQ(z,new G.y2(this))
-J.kH(a,new G.Hq(this))},"call$1","gZM",2,0,null,111,[]],
-r3:[function(){this.Sl("isolates").ml(new G.Pl(this))},"call$0","gNI",0,0,null]},
-PG:{
-"^":"Tp:107;",
-call$1:[function(a){var z,y,x,w,v
-try{z=C.xr.kV(a)
-w=R.Jk(z)
-return w}catch(v){w=H.Ru(v)
-y=w
-x=new H.XO(v,null)
-w=H.B7(["type","Error","errorType","DecodeError","text",H.d(y)+" "+H.d(x)],P.L5(null,null,null,null,null))
-w=R.Jk(w)
-return w}},"call$1",null,2,0,null,379,[],"call"],
-$isEH:true},
-YW:{
-"^":"Tp:107;",
-call$1:[function(a){var z=H.B7(["type","Error","errorType","FetchError","text",H.d(a)],P.L5(null,null,null,null,null))
-return R.Jk(z)},"call$1",null,2,0,null,160,[],"call"],
-$isEH:true},
-BO:{
-"^":"Tp:107;a",
-call$1:[function(a){return J.de(J.UQ(a,"id"),this.a)},"call$1",null,2,0,null,409,[],"call"],
-$isEH:true},
-Yu:{
-"^":"Tp:346;a,b",
-call$2:[function(a,b){if(G.js(a,this.a)!==!0)this.b.push(a)},"call$2",null,4,0,null,402,[],277,[],"call"],
-$isEH:true},
-y2:{
-"^":"Tp:107;c",
-call$1:[function(a){J.V1(this.c.i2,a)},"call$1",null,2,0,null,110,[],"call"],
-$isEH:true},
-Hq:{
-"^":"Tp:107;d",
-call$1:[function(a){var z,y,x,w,v,u,t,s,r
-z=J.U6(a)
-y=z.t(a,"id")
-x=this.d
-w=x.i2
-v=J.U6(w)
-u=v.t(w,y)
-if(u==null){t=P.L5(null,null,null,J.O,G.rj)
-t=R.Jk(t)
-s=H.VM([],[G.kx])
-r=P.L5(null,null,null,J.O,J.GW)
-r=R.Jk(r)
-u=new G.bv(x,z.t(a,"id"),"Isolate",null,t,s,z.t(a,"name"),null,null,null,r,0,0,null,null,null,null)
-v.u(w,y,u)}J.KM(u)},"call$1",null,2,0,null,149,[],"call"],
-$isEH:true},
-Pl:{
-"^":"Tp:107;a",
-call$1:[function(a){var z,y
-z=this.a
-z.GR(J.UQ(a,"members"))
-z=z.ec
-z.toString
-y=R.Jk(a)
-z.AJ=F.Wi(z,C.mE,z.AJ,y)},"call$1",null,2,0,null,149,[],"call"],
-$isEH:true},
-XK:{
-"^":["No;Yu<,ec,i2-407,AP,fn",null,null,function(){return[C.mI]},null,null],
-GS:[function(a){var z=this.Yu
-N.Jx("").To("Fetching "+H.d(a)+" from "+z)
-return W.It(C.xB.g(z,a),null,null)},"call$1","gFw",2,0,null,265,[]]},
-ho:{
-"^":["No;Ct,pL,ec,i2-407,AP,fn",null,null,null,function(){return[C.mI]},null,null],
-rz:[function(a){var z,y,x,w,v
-z=J.RE(a)
-y=J.UQ(z.gRn(a),"id")
-x=J.UQ(z.gRn(a),"name")
-w=J.UQ(z.gRn(a),"data")
-if(!J.de(x,"observatoryData"))return
-z=this.Ct
-v=z.t(0,y)
-z.Rz(0,y)
-J.Xf(v,w)},"call$1","gcW",2,0,158,19,[]],
-GS:[function(a){var z,y,x
-z=""+this.pL
-y=H.B7([],P.L5(null,null,null,null,null))
-y.u(0,"id",z)
-y.u(0,"method","observatoryQuery")
-y.u(0,"query","/"+H.d(a))
-this.pL=this.pL+1
-x=H.VM(new P.Zf(P.Dt(null)),[null])
-this.Ct.u(0,z,x)
-J.Ih(W.Pv(window.parent),C.xr.KP(y),"*")
-return x.MM},"call$1","gFw",2,0,null,265,[]]}}],["app_bootstrap","index.html_bootstrap.dart",,E,{
+for(v=w.u8(z,a)+1,x=0;x<y;++x)w.KI(z,v)},"call$1","gNu",2,0,null,364,[]]}}],["app_bootstrap","index.html_bootstrap.dart",,E,{
"^":"",
-YF:[function(){$.x2=["package:observatory/src/elements/observatory_element.dart","package:observatory/src/elements/isolate_element.dart","package:observatory/src/elements/nav_bar.dart","package:observatory/src/elements/breakpoint_list.dart","package:observatory/src/elements/service_ref.dart","package:observatory/src/elements/class_ref.dart","package:observatory/src/elements/error_view.dart","package:observatory/src/elements/field_ref.dart","package:observatory/src/elements/function_ref.dart","package:observatory/src/elements/curly_block.dart","package:observatory/src/elements/instance_ref.dart","package:observatory/src/elements/library_ref.dart","package:observatory/src/elements/class_view.dart","package:observatory/src/elements/code_ref.dart","package:observatory/src/elements/disassembly_entry.dart","package:observatory/src/elements/code_view.dart","package:observatory/src/elements/collapsible_content.dart","package:observatory/src/elements/field_view.dart","package:observatory/src/elements/function_view.dart","package:observatory/src/elements/script_ref.dart","package:observatory/src/elements/isolate_summary.dart","package:observatory/src/elements/vm_element.dart","package:observatory/src/elements/isolate_list.dart","package:observatory/src/elements/instance_view.dart","package:observatory/src/elements/json_view.dart","package:observatory/src/elements/library_view.dart","package:observatory/src/elements/heap_profile.dart","package:observatory/src/elements/isolate_profile.dart","package:observatory/src/elements/script_view.dart","package:observatory/src/elements/stack_frame.dart","package:observatory/src/elements/stack_trace.dart","package:observatory/src/elements/message_viewer.dart","package:observatory/src/elements/response_viewer.dart","package:observatory/src/elements/observatory_application.dart","main.dart"]
+YF:[function(){$.x2=["package:observatory/src/elements/observatory_element.dart","package:observatory/src/elements/nav_bar.dart","package:observatory/src/elements/breakpoint_list.dart","package:observatory/src/elements/service_ref.dart","package:observatory/src/elements/class_ref.dart","package:observatory/src/elements/error_view.dart","package:observatory/src/elements/field_ref.dart","package:observatory/src/elements/function_ref.dart","package:observatory/src/elements/curly_block.dart","package:observatory/src/elements/instance_ref.dart","package:observatory/src/elements/library_ref.dart","package:observatory/src/elements/class_view.dart","package:observatory/src/elements/code_ref.dart","package:observatory/src/elements/code_view.dart","package:observatory/src/elements/collapsible_content.dart","package:observatory/src/elements/eval_box.dart","package:observatory/src/elements/field_view.dart","package:observatory/src/elements/function_view.dart","package:observatory/src/elements/script_ref.dart","package:observatory/src/elements/isolate_summary.dart","package:observatory/src/elements/isolate_list.dart","package:observatory/src/elements/instance_view.dart","package:observatory/src/elements/json_view.dart","package:observatory/src/elements/library_view.dart","package:observatory/src/elements/isolate_profile.dart","package:observatory/src/elements/heap_profile.dart","package:observatory/src/elements/script_view.dart","package:observatory/src/elements/stack_frame.dart","package:observatory/src/elements/stack_trace.dart","package:observatory/src/elements/service_view.dart","package:observatory/src/elements/response_viewer.dart","package:observatory/src/elements/observatory_application.dart","main.dart"]
$.uP=!1
-F.E2()},"call$0","nE",0,0,112]},1],["breakpoint_list_element","package:observatory/src/elements/breakpoint_list.dart",,B,{
+F.E2()},"call$0","nE",0,0,114]},1],["breakpoint_list_element","package:observatory/src/elements/breakpoint_list.dart",,B,{
"^":"",
G6:{
-"^":["Ur;BW%-410,AP,fn,pC-411,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0-412",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
-grs:[function(a){return a.BW},null,null,1,0,354,"msg",355,397],
-srs:[function(a,b){a.BW=this.ct(a,C.UX,a.BW,b)},null,null,3,0,357,23,[],"msg",355],
-RF:[function(a,b){a.pC.oX("breakpoints").ml(new B.j3(a)).OA(new B.i0()).YM(b)},"call$1","gvC",2,0,158,413,[],"refresh"],
+"^":["Vf;BW%-374,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0-375",null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.Nw]}],
+grs:[function(a){return a.BW},null,null,1,0,376,"msg",358,377],
+srs:[function(a,b){a.BW=this.ct(a,C.UX,a.BW,b)},null,null,3,0,378,28,[],"msg",358],
+yv:[function(a,b){J.am(a.BW).YM(b)},"call$1","gvC",2,0,157,379,[],"refresh"],
"@":function(){return[C.jy]},
-static:{Dw:[function(a){var z,y,x,w,v
-z=H.B7([],P.L5(null,null,null,null,null))
-z=R.Jk(z)
-y=$.Nd()
-x=P.Py(null,null,null,J.O,W.I0)
-w=J.O
-v=W.cv
-v=H.VM(new V.qC(P.Py(null,null,null,w,v),null,null),[w,v])
-a.BW=z
-a.SO=y
-a.B7=x
-a.X0=v
+static:{Dw:[function(a){var z,y,x,w
+z=$.Nd()
+y=P.Py(null,null,null,J.O,W.I0)
+x=J.O
+w=W.cv
+w=H.VM(new V.qC(P.Py(null,null,null,x,w),null,null),[x,w])
+a.SO=z
+a.B7=y
+a.X0=w
C.J0.ZL(a)
C.J0.G6(a)
-return a},null,null,0,0,113,"new BreakpointListElement$created"]}},
-"+BreakpointListElement":[414],
-Ur:{
-"^":"PO+Pi;",
-$isd3:true},
-j3:{
-"^":"Tp:107;a-77",
-call$1:[function(a){var z,y
-z=this.a
-y=J.RE(z)
-y.sBW(z,y.ct(z,C.UX,y.gBW(z),a))},"call$1",null,2,0,107,149,[],"call"],
-$isEH:true},
-"+BreakpointListElement_refresh_closure":[415],
-i0:{
-"^":"Tp:346;",
-call$2:[function(a,b){N.Jx("").hh("Error while refreshing breakpoint-list: "+H.d(a)+"\n"+H.d(b))},"call$2",null,4,0,346,18,[],416,[],"call"],
-$isEH:true},
-"+BreakpointListElement_refresh_closure":[415]}],["class_ref_element","package:observatory/src/elements/class_ref.dart",,Q,{
+return a},null,null,0,0,115,"new BreakpointListElement$created"]}},
+"+BreakpointListElement":[380],
+Vf:{
+"^":"uL+Pi;",
+$isd3:true}}],["class_ref_element","package:observatory/src/elements/class_ref.dart",,Q,{
"^":"",
Tg:{
-"^":["xI;tY-410,Pe-417,AP,fn,pC-411,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0-412",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
+"^":["xI;tY-381,Pe-382,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0-375",null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.Nw]}],
"@":function(){return[C.OS]},
static:{rt:[function(a){var z,y,x,w
z=$.Nd()
@@ -11535,15 +11010,15 @@
a.X0=w
C.YZ.ZL(a)
C.YZ.G6(a)
-return a},null,null,0,0,113,"new ClassRefElement$created"]}},
-"+ClassRefElement":[418]}],["class_view_element","package:observatory/src/elements/class_view.dart",,Z,{
+return a},null,null,0,0,115,"new ClassRefElement$created"]}},
+"+ClassRefElement":[383]}],["class_view_element","package:observatory/src/elements/class_view.dart",,Z,{
"^":"",
-Ps:{
-"^":["KU;F0%-410,AP,fn,pC-411,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0-412",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
-gRu:[function(a){return a.F0},null,null,1,0,354,"cls",355,397],
-sRu:[function(a,b){a.F0=this.ct(a,C.XA,a.F0,b)},null,null,3,0,357,23,[],"cls",355],
-RF:[function(a,b){a.pC.oX(J.UQ(a.F0,"id")).ml(new Z.RI(a)).OA(new Z.Ye()).YM(b)},"call$1","gvC",2,0,158,413,[],"refresh"],
-"@":function(){return[C.aQx]},
+Jc:{
+"^":["pv;F0%-374,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0-375",null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.Nw]}],
+gRu:[function(a){return a.F0},null,null,1,0,376,"cls",358,377],
+sRu:[function(a,b){a.F0=this.ct(a,C.XA,a.F0,b)},null,null,3,0,378,28,[],"cls",358],
+yv:[function(a,b){J.am(a.F0).YM(b)},"call$1","gvC",2,0,157,379,[],"refresh"],
+"@":function(){return[C.oY]},
static:{zg:[function(a){var z,y,x,w
z=$.Nd()
y=P.Py(null,null,null,J.O,W.I0)
@@ -11555,27 +11030,14 @@
a.X0=w
C.kk.ZL(a)
C.kk.G6(a)
-return a},null,null,0,0,113,"new ClassViewElement$created"]}},
-"+ClassViewElement":[419],
-KU:{
-"^":"PO+Pi;",
-$isd3:true},
-RI:{
-"^":"Tp:107;a-77",
-call$1:[function(a){var z,y
-z=this.a
-y=J.RE(z)
-y.sF0(z,y.ct(z,C.XA,y.gF0(z),a))},"call$1",null,2,0,107,149,[],"call"],
-$isEH:true},
-"+ClassViewElement_refresh_closure":[415],
-Ye:{
-"^":"Tp:346;",
-call$2:[function(a,b){N.Jx("").hh("Error while refreshing class-view: "+H.d(a)+"\n"+H.d(b))},"call$2",null,4,0,346,18,[],416,[],"call"],
-$isEH:true},
-"+ClassViewElement_refresh_closure":[415]}],["code_ref_element","package:observatory/src/elements/code_ref.dart",,O,{
+return a},null,null,0,0,115,"new ClassViewElement$created"]}},
+"+ClassViewElement":[384],
+pv:{
+"^":"uL+Pi;",
+$isd3:true}}],["code_ref_element","package:observatory/src/elements/code_ref.dart",,O,{
"^":"",
CN:{
-"^":["xI;tY-410,Pe-417,AP,fn,pC-411,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0-412",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
+"^":["xI;tY-381,Pe-382,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0-375",null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.Nw]}],
"@":function(){return[C.U8]},
static:{On:[function(a){var z,y,x,w
z=$.Nd()
@@ -11589,15 +11051,21 @@
a.X0=w
C.IK.ZL(a)
C.IK.G6(a)
-return a},null,null,0,0,113,"new CodeRefElement$created"]}},
-"+CodeRefElement":[418]}],["code_view_element","package:observatory/src/elements/code_view.dart",,F,{
+return a},null,null,0,0,115,"new CodeRefElement$created"]}},
+"+CodeRefElement":[383]}],["code_view_element","package:observatory/src/elements/code_view.dart",,F,{
"^":"",
-HT:{
-"^":["qbd;eJ%-420,AP,fn,pC-411,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0-412",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
-gtT:[function(a){return a.eJ},null,null,1,0,421,"code",355,397],
-stT:[function(a,b){a.eJ=this.ct(a,C.b1,a.eJ,b)},null,null,3,0,422,23,[],"code",355],
-grK:[function(a){return"panel panel-success"},null,null,1,0,370,"cssPanelClass"],
-"@":function(){return[C.xW]},
+Be:{
+"^":["Vfx;Xx%-385,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0-375",null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.Nw]}],
+gtT:[function(a){return a.Xx},null,null,1,0,386,"code",358,377],
+stT:[function(a,b){a.Xx=this.ct(a,C.b1,a.Xx,b)},null,null,3,0,387,28,[],"code",358],
+i4:[function(a){var z
+Z.uL.prototype.i4.call(this,a)
+z=a.Xx
+if(z==null)return
+J.SK(z)},"call$0","gQd",0,0,114,"enteredView"],
+yv:[function(a,b){J.am(a.Xx).YM(b)},"call$1","gvC",2,0,157,379,[],"refresh"],
+grK:[function(a){return"panel panel-success"},null,null,1,0,365,"cssPanelClass"],
+"@":function(){return[C.xz]},
static:{Fe:[function(a){var z,y,x,w
z=$.Nd()
y=P.Py(null,null,null,J.O,W.I0)
@@ -11609,34 +11077,34 @@
a.X0=w
C.YD.ZL(a)
C.YD.G6(a)
-return a},null,null,0,0,113,"new CodeViewElement$created"]}},
-"+CodeViewElement":[423],
-qbd:{
-"^":"PO+Pi;",
+return a},null,null,0,0,115,"new CodeViewElement$created"]}},
+"+CodeViewElement":[388],
+Vfx:{
+"^":"uL+Pi;",
$isd3:true}}],["collapsible_content_element","package:observatory/src/elements/collapsible_content.dart",,R,{
"^":"",
E0:{
-"^":["Ds;zh%-387,HX%-387,Uy%-417,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0-412",null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
-gl7:[function(a){return a.zh},null,null,1,0,370,"iconClass",355,356],
-sl7:[function(a,b){a.zh=this.ct(a,C.Di,a.zh,b)},null,null,3,0,25,23,[],"iconClass",355],
-gai:[function(a){return a.HX},null,null,1,0,370,"displayValue",355,356],
-sai:[function(a,b){a.HX=this.ct(a,C.Jw,a.HX,b)},null,null,3,0,25,23,[],"displayValue",355],
-gxj:[function(a){return a.Uy},null,null,1,0,380,"collapsed"],
+"^":["Dsd;zh%-389,HX%-389,Uy%-382,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0-375",null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.Nw]}],
+gl7:[function(a){return a.zh},null,null,1,0,365,"iconClass",358,359],
+sl7:[function(a,b){a.zh=this.ct(a,C.Di,a.zh,b)},null,null,3,0,30,28,[],"iconClass",358],
+gai:[function(a){return a.HX},null,null,1,0,365,"displayValue",358,359],
+sai:[function(a,b){a.HX=this.ct(a,C.Jw,a.HX,b)},null,null,3,0,30,28,[],"displayValue",358],
+gxj:[function(a){return a.Uy},null,null,1,0,390,"collapsed"],
sxj:[function(a,b){a.Uy=b
-this.np(a)},null,null,3,0,381,424,[],"collapsed"],
+this.SS(a)},null,null,3,0,391,392,[],"collapsed"],
i4:[function(a){Z.uL.prototype.i4.call(this,a)
-this.np(a)},"call$0","gQd",0,0,112,"enteredView"],
+this.SS(a)},"call$0","gQd",0,0,114,"enteredView"],
jp:[function(a,b,c,d){a.Uy=a.Uy!==!0
-this.np(a)
-this.np(a)},"call$3","gl8",6,0,425,18,[],306,[],74,[],"toggleDisplay"],
-np:[function(a){var z,y
+this.SS(a)
+this.SS(a)},"call$3","gl8",6,0,393,19,[],304,[],79,[],"toggleDisplay"],
+SS:[function(a){var z,y
z=a.Uy
y=a.zh
if(z===!0){a.zh=this.ct(a,C.Di,y,"glyphicon glyphicon-chevron-down")
a.HX=this.ct(a,C.Jw,a.HX,"none")}else{a.zh=this.ct(a,C.Di,y,"glyphicon glyphicon-chevron-up")
-a.HX=this.ct(a,C.Jw,a.HX,"block")}},"call$0","glg",0,0,112,"_refresh"],
+a.HX=this.ct(a,C.Jw,a.HX,"block")}},"call$0","glg",0,0,114,"_refresh"],
"@":function(){return[C.Gu]},
-static:{"^":"Vl<-387,DI<-387",Hv:[function(a){var z,y,x,w
+static:{"^":"Vl<-389,CF<-389",Hv:[function(a){var z,y,x,w
z=$.Nd()
y=P.Py(null,null,null,J.O,W.I0)
x=J.O
@@ -11650,32 +11118,30 @@
a.X0=w
C.j8.ZL(a)
C.j8.G6(a)
-return a},null,null,0,0,113,"new CollapsibleContentElement$created"]}},
-"+CollapsibleContentElement":[426],
-Ds:{
+return a},null,null,0,0,115,"new CollapsibleContentElement$created"]}},
+"+CollapsibleContentElement":[394],
+Dsd:{
"^":"uL+Pi;",
$isd3:true}}],["curly_block_element","package:observatory/src/elements/curly_block.dart",,R,{
"^":"",
lw:{
-"^":["LP;GV%-417,Hu%-417,nx%-77,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0-412",null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
-goE:[function(a){return a.GV},null,null,1,0,380,"expanded",355,356],
-soE:[function(a,b){a.GV=this.ct(a,C.mr,a.GV,b)},null,null,3,0,381,23,[],"expanded",355],
-gO9:[function(a){return a.Hu},null,null,1,0,380,"busy",355,356],
-sO9:[function(a,b){a.Hu=this.ct(a,C.S4,a.Hu,b)},null,null,3,0,381,23,[],"busy",355],
-gFR:[function(a){return a.nx},null,null,1,0,113,"callback",355,397],
+"^":["LP;GV%-382,Hu%-382,nx%-82,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0-375",null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.Nw]}],
+goE:[function(a){return a.GV},null,null,1,0,390,"expanded",358,359],
+soE:[function(a,b){a.GV=this.ct(a,C.mr,a.GV,b)},null,null,3,0,391,28,[],"expanded",358],
+gO9:[function(a){return a.Hu},null,null,1,0,390,"busy",358,359],
+sO9:[function(a,b){a.Hu=this.ct(a,C.S4,a.Hu,b)},null,null,3,0,391,28,[],"busy",358],
+gFR:[function(a){return a.nx},null,null,1,0,115,"callback",358,377],
Ki:function(a){return this.gFR(a).call$0()},
AV:function(a,b,c){return this.gFR(a).call$2(b,c)},
-sFR:[function(a,b){a.nx=this.ct(a,C.AV,a.nx,b)},null,null,3,0,107,23,[],"callback",355],
-PA:[function(a){var z
-P.JS("done callback")
-z=a.GV
+sFR:[function(a,b){a.nx=this.ct(a,C.AV,a.nx,b)},null,null,3,0,112,28,[],"callback",358],
+PA:[function(a){var z=a.GV
a.GV=this.ct(a,C.mr,z,z!==!0)
-a.Hu=this.ct(a,C.S4,a.Hu,!1)},"call$0","goJ",0,0,112,"doneCallback"],
+a.Hu=this.ct(a,C.S4,a.Hu,!1)},"call$0","goJ",0,0,114,"doneCallback"],
AZ:[function(a,b,c,d){var z=a.Hu
if(z===!0)return
if(a.nx!=null){a.Hu=this.ct(a,C.S4,z,!0)
this.AV(a,a.GV!==!0,this.goJ(a))}else{z=a.GV
-a.GV=this.ct(a,C.mr,z,z!==!0)}},"call$3","gmd",6,0,427,128,[],188,[],283,[],"toggleExpand"],
+a.GV=this.ct(a,C.mr,z,z!==!0)}},"call$3","gHw",6,0,395,131,[],187,[],278,[],"toggleExpand"],
"@":function(){return[C.DKS]},
static:{fR:[function(a){var z,y,x,w
z=$.Nd()
@@ -11691,8 +11157,8 @@
a.X0=w
C.O0.ZL(a)
C.O0.G6(a)
-return a},null,null,0,0,113,"new CurlyBlockElement$created"]}},
-"+CurlyBlockElement":[428],
+return a},null,null,0,0,115,"new CurlyBlockElement$created"]}},
+"+CurlyBlockElement":[396],
LP:{
"^":"ir+Pi;",
$isd3:true}}],["custom_element.polyfill","package:custom_element/polyfill.dart",,B,{
@@ -11704,20 +11170,20 @@
if(y==null)return"registerElement" in document
return J.de(J.UQ(y,"ready"),!0)},
wJ:{
-"^":"Tp:113;",
+"^":"Tp:115;",
call$0:[function(){if(B.G9())return P.Ab(null,null)
var z=H.VM(new W.RO(document,"WebComponentsReady",!1),[null])
return z.gtH(z)},"call$0",null,0,0,null,"call"],
$isEH:true}}],["dart._internal","dart:_internal",,H,{
"^":"",
bQ:[function(a,b){var z
-for(z=H.VM(new H.a7(a,a.length,0,null),[H.Kp(a,0)]);z.G();)b.call$1(z.lo)},"call$2","Mn",4,0,null,114,[],115,[]],
+for(z=H.VM(new H.a7(a,a.length,0,null),[H.Kp(a,0)]);z.G();)b.call$1(z.lo)},"call$2","Mn",4,0,null,116,[],117,[]],
Ck:[function(a,b){var z
for(z=H.VM(new H.a7(a,a.length,0,null),[H.Kp(a,0)]);z.G();)if(b.call$1(z.lo)===!0)return!0
-return!1},"call$2","cs",4,0,null,114,[],115,[]],
+return!1},"call$2","cs",4,0,null,116,[],117,[]],
n3:[function(a,b,c){var z
for(z=H.VM(new H.a7(a,a.length,0,null),[H.Kp(a,0)]);z.G();)b=c.call$2(b,z.lo)
-return b},"call$3","hp",6,0,null,114,[],116,[],117,[]],
+return b},"call$3","hp",6,0,null,116,[],118,[],119,[]],
mx:[function(a,b,c){var z,y,x
for(y=0;x=$.RM(),y<x.length;++y)if(x[y]===a)return H.d(b)+"..."+H.d(c)
z=P.p9("")
@@ -11726,19 +11192,22 @@
z.We(a,", ")
z.KF(c)}finally{x=$.RM()
if(0>=x.length)return H.e(x,0)
-x.pop()}return z.gvM()},"call$3","FQ",6,0,null,114,[],118,[],119,[]],
+x.pop()}return z.gvM()},"call$3","FQ",6,0,null,116,[],120,[],121,[]],
+rd:[function(a,b){if(b==null)b=P.n4()
+H.ZE(a,0,a.length-1,b)},"call$2","xX",4,0,null,73,[],122,[]],
K0:[function(a,b,c){var z=J.Wx(b)
if(z.C(b,0)||z.D(b,a.length))throw H.b(P.TE(b,0,a.length))
z=J.Wx(c)
-if(z.C(c,b)||z.D(c,a.length))throw H.b(P.TE(c,b,a.length))},"call$3","Ze",6,0,null,68,[],120,[],121,[]],
-Og:[function(a,b,c,d,e){var z,y
+if(z.C(c,b)||z.D(c,a.length))throw H.b(P.TE(c,b,a.length))},"call$3","Ze",6,0,null,73,[],123,[],124,[]],
+qG:[function(a,b,c,d,e){var z,y
H.K0(a,b,c)
-z=J.xH(c,b)
-if(J.de(z,0))return
+if(typeof b!=="number")return H.s(b)
+z=c-b
+if(z===0)return
y=J.Wx(e)
if(y.C(e,0))throw H.b(new P.AT(e))
if(J.z8(y.g(e,z),J.q8(d)))throw H.b(new P.lj("Not enough elements"))
-H.tb(d,e,a,b,z)},"call$5","rK",10,0,null,68,[],120,[],121,[],105,[],122,[]],
+H.tb(d,e,a,b,z)},"call$5","it",10,0,null,73,[],123,[],124,[],110,[],125,[]],
IC:[function(a,b,c){var z,y,x,w,v,u
z=J.Wx(b)
if(z.C(b,0)||z.D(b,a.length))throw H.b(P.TE(b,0,a.length))
@@ -11750,41 +11219,42 @@
z=z.g(b,x)
w=a.length
if(!!a.immutable$list)H.vh(P.f("set range"))
-H.Og(a,z,w,a,b)
+H.qG(a,z,w,a,b)
for(z=y.gA(c);z.G();b=u){v=z.lo
u=J.WB(b,1)
-C.Nm.u(a,b,v)}},"call$3","f3",6,0,null,68,[],47,[],114,[]],
+C.Nm.u(a,b,v)}},"call$3","QB",6,0,null,73,[],52,[],116,[]],
tb:[function(a,b,c,d,e){var z,y,x,w,v
z=J.Wx(b)
if(z.C(b,d))for(y=J.xH(z.g(b,e),1),x=J.xH(J.WB(d,e),1),z=J.U6(a);w=J.Wx(y),w.F(y,b);y=w.W(y,1),x=J.xH(x,1))C.Nm.u(c,x,z.t(a,y))
-else for(w=J.U6(a),x=d,y=b;v=J.Wx(y),v.C(y,z.g(b,e));y=v.g(y,1),x=J.WB(x,1))C.Nm.u(c,x,w.t(a,y))},"call$5","e8",10,0,null,123,[],124,[],125,[],126,[],127,[]],
+else for(w=J.U6(a),x=d,y=b;v=J.Wx(y),v.C(y,z.g(b,e));y=v.g(y,1),x=J.WB(x,1))C.Nm.u(c,x,w.t(a,y))},"call$5","e8",10,0,null,126,[],127,[],128,[],129,[],130,[]],
TK:[function(a,b,c,d){var z
if(c>=a.length)return-1
-for(z=c;z<d;++z){if(z>=a.length)return H.e(a,z)
-if(J.de(a[z],b))return z}return-1},"call$4","Yh",8,0,null,128,[],129,[],80,[],130,[]],
-eX:[function(a,b,c){var z,y
+if(c<0)c=0
+for(z=c;z<d;++z){if(z<0||z>=a.length)return H.e(a,z)
+if(J.de(a[z],b))return z}return-1},"call$4","vu",8,0,null,131,[],132,[],85,[],133,[]],
+lO:[function(a,b,c){var z,y
if(typeof c!=="number")return c.C()
if(c<0)return-1
z=a.length
if(c>=z)c=z-1
for(y=c;y>=0;--y){if(y>=a.length)return H.e(a,y)
-if(J.de(a[y],b))return y}return-1},"call$3","Gf",6,0,null,128,[],129,[],80,[]],
-ZE:[function(a,b,c,d){if(J.Hb(J.xH(c,b),32))H.d1(a,b,c,d)
-else H.d4(a,b,c,d)},"call$4","UR",8,0,null,128,[],131,[],132,[],133,[]],
-d1:[function(a,b,c,d){var z,y,x,w,v,u
+if(J.de(a[y],b))return y}return-1},"call$3","MW",6,0,null,131,[],132,[],85,[]],
+ZE:[function(a,b,c,d){if(J.Bl(J.xH(c,b),32))H.w9(a,b,c,d)
+else H.d4(a,b,c,d)},"call$4","UR",8,0,null,131,[],134,[],135,[],122,[]],
+w9:[function(a,b,c,d){var z,y,x,w,v,u
for(z=J.WB(b,1),y=J.U6(a);x=J.Wx(z),x.E(z,c);z=x.g(z,1)){w=y.t(a,z)
v=z
while(!0){u=J.Wx(v)
if(!(u.D(v,b)&&J.z8(d.call$2(y.t(a,u.W(v,1)),w),0)))break
y.u(a,v,y.t(a,u.W(v,1)))
-v=u.W(v,1)}y.u(a,v,w)}},"call$4","aH",8,0,null,128,[],131,[],132,[],133,[]],
+v=u.W(v,1)}y.u(a,v,w)}},"call$4","zc",8,0,null,131,[],134,[],135,[],122,[]],
d4:[function(a,b,a0,a1){var z,y,x,w,v,u,t,s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c
z=J.Wx(a0)
-y=J.IJ(J.WB(z.W(a0,b),1),6)
+y=J.Ts(J.WB(z.W(a0,b),1),6)
x=J.Qc(b)
w=x.g(b,y)
v=z.W(a0,y)
-u=J.IJ(x.g(b,a0),2)
+u=J.Ts(x.g(b,a0),2)
t=J.Wx(u)
s=t.W(u,y)
r=t.g(u,y)
@@ -11878,7 +11348,7 @@
k=e}else{t.u(a,i,t.t(a,j))
d=x.W(j,1)
t.u(a,j,h)
-j=d}break}}H.ZE(a,k,j,a1)}else H.ZE(a,k,j,a1)},"call$4","Hm",8,0,null,128,[],131,[],132,[],133,[]],
+j=d}break}}H.ZE(a,k,j,a1)}else H.ZE(a,k,j,a1)},"call$4","Hm",8,0,null,131,[],134,[],135,[],122,[]],
aL:{
"^":"mW;",
gA:function(a){return H.VM(new H.a7(this,this.gB(this),0,null),[H.ip(this,"aL",0)])},
@@ -11887,7 +11357,7 @@
if(typeof z!=="number")return H.s(z)
y=0
for(;y<z;++y){b.call$1(this.Zv(0,y))
-if(z!==this.gB(this))throw H.b(P.a4(this))}},"call$1","gjw",2,0,null,429,[]],
+if(z!==this.gB(this))throw H.b(P.a4(this))}},"call$1","gjw",2,0,null,397,[]],
gl0:function(a){return J.de(this.gB(this),0)},
grZ:function(a){if(J.de(this.gB(this),0))throw H.b(new P.lj("No elements"))
return this.Zv(0,J.xH(this.gB(this),1))},
@@ -11896,13 +11366,13 @@
if(typeof z!=="number")return H.s(z)
y=0
for(;y<z;++y){if(J.de(this.Zv(0,y),b))return!0
-if(z!==this.gB(this))throw H.b(P.a4(this))}return!1},"call$1","gdj",2,0,null,129,[]],
+if(z!==this.gB(this))throw H.b(P.a4(this))}return!1},"call$1","gdj",2,0,null,132,[]],
Vr:[function(a,b){var z,y
z=this.gB(this)
if(typeof z!=="number")return H.s(z)
y=0
for(;y<z;++y){if(b.call$1(this.Zv(0,y))===!0)return!0
-if(z!==this.gB(this))throw H.b(P.a4(this))}return!1},"call$1","gG2",2,0,null,430,[]],
+if(z!==this.gB(this))throw H.b(P.a4(this))}return!1},"call$1","gG2",2,0,null,398,[]],
zV:[function(a,b){var z,y,x,w,v,u
z=this.gB(this)
if(b.length!==0){y=J.x(z)
@@ -11922,17 +11392,16 @@
for(;v<z;++v){u=this.Zv(0,v)
u=typeof u==="string"?u:H.d(u)
w.vM=w.vM+u
-if(z!==this.gB(this))throw H.b(P.a4(this))}return w.vM}},"call$1","gnr",0,2,null,333,334,[]],
-ev:[function(a,b){return P.mW.prototype.ev.call(this,this,b)},"call$1","gIR",2,0,null,430,[]],
-ez:[function(a,b){return H.VM(new H.A8(this,b),[null,null])},"call$1","gIr",2,0,null,115,[]],
+if(z!==this.gB(this))throw H.b(P.a4(this))}return w.vM}},"call$1","gNU",0,2,null,330,331,[]],
+ev:[function(a,b){return P.mW.prototype.ev.call(this,this,b)},"call$1","gIR",2,0,null,398,[]],
+ez:[function(a,b){return H.VM(new H.A8(this,b),[null,null])},"call$1","gIr",2,0,null,117,[]],
es:[function(a,b,c){var z,y,x
z=this.gB(this)
if(typeof z!=="number")return H.s(z)
y=b
x=0
for(;x<z;++x){y=c.call$2(y,this.Zv(0,x))
-if(z!==this.gB(this))throw H.b(P.a4(this))}return y},"call$2","gTu",4,0,null,116,[],117,[]],
-eR:[function(a,b){return H.j5(this,b,null,null)},"call$1","gZo",2,0,null,127,[]],
+if(z!==this.gB(this))throw H.b(P.a4(this))}return y},"call$2","gTu",4,0,null,118,[],119,[]],
tt:[function(a,b){var z,y,x
if(b){z=H.VM([],[H.ip(this,"aL",0)])
C.Nm.sB(z,this.gB(this))}else{y=this.gB(this)
@@ -11945,7 +11414,7 @@
if(!(x<y))break
y=this.Zv(0,x)
if(x>=z.length)return H.e(z,x)
-z[x]=y;++x}return z},function(a){return this.tt(a,!0)},"br","call$1$growable",null,"gRV",0,3,null,336,337,[]],
+z[x]=y;++x}return z},function(a){return this.tt(a,!0)},"br","call$1$growable",null,"gRV",0,3,null,333,334,[]],
$isyN:true},
nH:{
"^":"aL;l6,SH,AN",
@@ -11968,24 +11437,23 @@
return J.xH(x,y)},
Zv:[function(a,b){var z=J.WB(this.gjX(),b)
if(J.u6(b,0)||J.J5(z,this.gMa()))throw H.b(P.TE(b,0,this.gB(this)))
-return J.i4(this.l6,z)},"call$1","goY",2,0,null,47,[]],
-eR:[function(a,b){return H.j5(this.l6,J.WB(this.SH,b),this.AN,null)},"call$1","gZo",2,0,null,127,[]],
+return J.i4(this.l6,z)},"call$1","goY",2,0,null,52,[]],
qZ:[function(a,b){var z,y,x
-if(J.u6(b,0))throw H.b(P.N(b))
+if(J.u6(b,0))throw H.b(new P.bJ("value "+H.d(b)))
z=this.AN
y=this.SH
-if(z==null)return H.j5(this.l6,y,J.WB(y,b),null)
+if(z==null)return H.q9(this.l6,y,J.WB(y,b),null)
else{x=J.WB(y,b)
if(J.u6(z,x))return this
-return H.j5(this.l6,y,x,null)}},"call$1","grK4",2,0,null,127,[]],
+return H.q9(this.l6,y,x,null)}},"call$1","gVw",2,0,null,130,[]],
Hd:function(a,b,c,d){var z,y,x
z=this.SH
y=J.Wx(z)
-if(y.C(z,0))throw H.b(P.N(z))
+if(y.C(z,0))throw H.b(new P.bJ("value "+H.d(z)))
x=this.AN
-if(x!=null){if(J.u6(x,0))throw H.b(P.N(x))
+if(x!=null){if(J.u6(x,0))throw H.b(new P.bJ("value "+H.d(x)))
if(y.D(z,x))throw H.b(P.TE(z,0,x))}},
-static:{j5:function(a,b,c,d){var z=H.VM(new H.nH(a,b,c),[d])
+static:{q9:function(a,b,c,d){var z=H.VM(new H.nH(a,b,c),[d])
z.Hd(a,b,c,d)
return z}}},
a7:{
@@ -12011,9 +11479,9 @@
gB:function(a){return J.q8(this.l6)},
gl0:function(a){return J.FN(this.l6)},
grZ:function(a){return this.mb(J.MQ(this.l6))},
-Zv:[function(a,b){return this.mb(J.i4(this.l6,b))},"call$1","goY",2,0,null,47,[]],
+Zv:[function(a,b){return this.mb(J.i4(this.l6,b))},"call$1","goY",2,0,null,52,[]],
$asmW:function(a,b){return[b]},
-$ascX:function(a,b){return[b]},
+$asQV:function(a,b){return[b]},
static:{K1:function(a,b,c,d){var z=J.x(a)
if(typeof a==="object"&&a!==null&&!!z.$isyN)return H.VM(new H.xy(a,b),[c,d])
return H.VM(new H.i1(a,b),[c,d])}}},
@@ -12033,10 +11501,10 @@
"^":"aL;CR,T6",
mb:function(a){return this.T6.call$1(a)},
gB:function(a){return J.q8(this.CR)},
-Zv:[function(a,b){return this.mb(J.i4(this.CR,b))},"call$1","goY",2,0,null,47,[]],
+Zv:[function(a,b){return this.mb(J.i4(this.CR,b))},"call$1","goY",2,0,null,52,[]],
$asaL:function(a,b){return[b]},
$asmW:function(a,b){return[b]},
-$ascX:function(a,b){return[b]},
+$asQV:function(a,b){return[b]},
$isyN:true},
U5:{
"^":"mW;l6,T6",
@@ -12055,48 +11523,19 @@
z.$builtinTypeInfo=this.$builtinTypeInfo
return z},
$asmW:function(a,b){return[b]},
-$ascX:function(a,b){return[b]}},
+$asQV:function(a,b){return[b]}},
rR:{
-"^":"a;OI,T6,TQ,lo",
+"^":"a;OI,T6,C2,lo",
mb:function(a){return this.T6.call$1(a)},
gl:function(){return this.lo},
G:[function(){var z,y
-z=this.TQ
+z=this.C2
if(z==null)return!1
for(y=this.OI;!z.G();){this.lo=null
-if(y.G()){this.TQ=null
+if(y.G()){this.C2=null
z=J.GP(this.mb(y.gl()))
-this.TQ=z}else return!1}this.lo=this.TQ.gl()
+this.C2=z}else return!1}this.lo=this.C2.gl()
return!0},"call$0","gqy",0,0,null]},
-H6:{
-"^":"mW;l6,FT",
-eR:[function(a,b){return H.ke(this.l6,this.FT+b,H.Kp(this,0))},"call$1","gZo",2,0,null,292,[]],
-gA:function(a){var z=this.l6
-z=new H.U1(z.gA(z),this.FT)
-z.$builtinTypeInfo=this.$builtinTypeInfo
-return z},
-ap:function(a,b,c){},
-static:{ke:function(a,b,c){var z
-if(!!a.$isyN){z=H.VM(new H.wB(a,b),[c])
-z.ap(a,b,c)
-return z}return H.mi(a,b,c)},mi:function(a,b,c){var z=H.VM(new H.H6(a,b),[c])
-z.ap(a,b,c)
-return z}}},
-wB:{
-"^":"H6;l6,FT",
-gB:function(a){var z,y
-z=this.l6
-y=J.xH(z.gB(z),this.FT)
-if(J.J5(y,0))return y
-return 0},
-$isyN:true},
-U1:{
-"^":"AC;OI,FT",
-G:[function(){var z,y
-for(z=this.OI,y=0;y<this.FT;++y)z.G()
-this.FT=0
-return z.G()},"call$0","gqy",0,0,null],
-gl:function(){return this.OI.gl()}},
SJ:{
"^":"a;",
G:[function(){return!1},"call$0","gqy",0,0,null],
@@ -12104,75 +11543,76 @@
SU7:{
"^":"a;",
sB:function(a,b){throw H.b(P.f("Cannot change the length of a fixed-length list"))},
-h:[function(a,b){throw H.b(P.f("Cannot add to a fixed-length list"))},"call$1","ght",2,0,null,23,[]],
-xe:[function(a,b,c){throw H.b(P.f("Cannot add to a fixed-length list"))},"call$2","gQG",4,0,null,47,[],23,[]],
-FV:[function(a,b){throw H.b(P.f("Cannot add to a fixed-length list"))},"call$1","gDY",2,0,null,114,[]],
-Rz:[function(a,b){throw H.b(P.f("Cannot remove from a fixed-length list"))},"call$1","gRI",2,0,null,129,[]],
-V1:[function(a){throw H.b(P.f("Cannot clear a fixed-length list"))},"call$0","gyP",0,0,null],
-KI:[function(a,b){throw H.b(P.f("Cannot remove from a fixed-length list"))},"call$1","gNM",2,0,null,47,[]]},
-Qr:{
+h:[function(a,b){throw H.b(P.f("Cannot add to a fixed-length list"))},"call$1","ght",2,0,null,28,[]],
+xe:[function(a,b,c){throw H.b(P.f("Cannot add to a fixed-length list"))},"call$2","gQG",4,0,null,52,[],28,[]],
+FV:[function(a,b){throw H.b(P.f("Cannot add to a fixed-length list"))},"call$1","gDY",2,0,null,116,[]],
+Rz:[function(a,b){throw H.b(P.f("Cannot remove from a fixed-length list"))},"call$1","guH",2,0,null,132,[]],
+V1:[function(a){throw H.b(P.f("Cannot clear a fixed-length list"))},"call$0","gRa",0,0,null],
+KI:[function(a,b){throw H.b(P.f("Cannot remove from a fixed-length list"))},"call$1","gNM",2,0,null,52,[]]},
+Tv:{
"^":"a;",
-u:[function(a,b,c){throw H.b(P.f("Cannot modify an unmodifiable list"))},"call$2","gj3",4,0,null,47,[],23,[]],
+u:[function(a,b,c){throw H.b(P.f("Cannot modify an unmodifiable list"))},"call$2","gj3",4,0,null,52,[],28,[]],
sB:function(a,b){throw H.b(P.f("Cannot change the length of an unmodifiable list"))},
-h:[function(a,b){throw H.b(P.f("Cannot add to an unmodifiable list"))},"call$1","ght",2,0,null,23,[]],
-xe:[function(a,b,c){throw H.b(P.f("Cannot add to an unmodifiable list"))},"call$2","gQG",4,0,null,47,[],23,[]],
-FV:[function(a,b){throw H.b(P.f("Cannot add to an unmodifiable list"))},"call$1","gDY",2,0,null,114,[]],
-Rz:[function(a,b){throw H.b(P.f("Cannot remove from an unmodifiable list"))},"call$1","gRI",2,0,null,129,[]],
-GT:[function(a,b){throw H.b(P.f("Cannot modify an unmodifiable list"))},"call$1","gH7",0,2,null,77,133,[]],
-V1:[function(a){throw H.b(P.f("Cannot clear an unmodifiable list"))},"call$0","gyP",0,0,null],
-KI:[function(a,b){throw H.b(P.f("Cannot remove from an unmodifiable list"))},"call$1","gNM",2,0,null,47,[]],
-YW:[function(a,b,c,d,e){throw H.b(P.f("Cannot modify an unmodifiable list"))},"call$4","gaQ",6,2,null,335,120,[],121,[],114,[],122,[]],
+h:[function(a,b){throw H.b(P.f("Cannot add to an unmodifiable list"))},"call$1","ght",2,0,null,28,[]],
+xe:[function(a,b,c){throw H.b(P.f("Cannot add to an unmodifiable list"))},"call$2","gQG",4,0,null,52,[],28,[]],
+FV:[function(a,b){throw H.b(P.f("Cannot add to an unmodifiable list"))},"call$1","gDY",2,0,null,116,[]],
+Rz:[function(a,b){throw H.b(P.f("Cannot remove from an unmodifiable list"))},"call$1","guH",2,0,null,132,[]],
+GT:[function(a,b){throw H.b(P.f("Cannot modify an unmodifiable list"))},"call$1","gH7",0,2,null,82,122,[]],
+V1:[function(a){throw H.b(P.f("Cannot clear an unmodifiable list"))},"call$0","gRa",0,0,null],
+KI:[function(a,b){throw H.b(P.f("Cannot remove from an unmodifiable list"))},"call$1","gNM",2,0,null,52,[]],
+YW:[function(a,b,c,d,e){throw H.b(P.f("Cannot modify an unmodifiable list"))},"call$4","gam",6,2,null,332,123,[],124,[],116,[],125,[]],
$isList:true,
-$asWO:null,
+$aszM:null,
$isyN:true,
-$iscX:true,
-$ascX:null},
+$isQV:true,
+$asQV:null},
w2Y:{
-"^":"ar+Qr;",
+"^":"ar+Tv;",
$isList:true,
-$asWO:null,
+$aszM:null,
$isyN:true,
-$iscX:true,
-$ascX:null},
+$isQV:true,
+$asQV:null},
iK:{
"^":"aL;CR",
gB:function(a){return J.q8(this.CR)},
Zv:[function(a,b){var z,y
z=this.CR
y=J.U6(z)
-return y.Zv(z,J.xH(J.xH(y.gB(z),1),b))},"call$1","goY",2,0,null,47,[]]},
+return y.Zv(z,J.xH(J.xH(y.gB(z),1),b))},"call$1","goY",2,0,null,52,[]]},
GD:{
"^":"a;fN>",
n:[function(a,b){var z
if(b==null)return!1
z=J.x(b)
-return typeof b==="object"&&b!==null&&!!z.$isGD&&J.de(this.fN,b.fN)},"call$1","gUJ",2,0,null,104,[]],
+return typeof b==="object"&&b!==null&&!!z.$isGD&&J.de(this.fN,b.fN)},"call$1","gUJ",2,0,null,109,[]],
giO:function(a){var z=J.v1(this.fN)
if(typeof z!=="number")return H.s(z)
return 536870911&664597*z},
bu:[function(a){return"Symbol(\""+H.d(this.fN)+"\")"},"call$0","gXo",0,0,null],
$isGD:true,
$iswv:true,
-static:{"^":"zP",le:[function(a){var z=J.U6(a)
-if(z.gl0(a)===!0)return a
-if(z.nC(a,"_"))throw H.b(new P.AT("\""+H.d(a)+"\" is a private identifier"))
-z=$.R0().Ej
+static:{"^":"RWj,ES,quP,KG,Np,p1",u1:[function(a){var z,y
+z=J.U6(a)
+if(z.gl0(a)!==!0){y=$.bw().Ej
if(typeof a!=="string")H.vh(new P.AT(a))
-if(!z.test(a))throw H.b(new P.AT("\""+H.d(a)+"\" is not an identifier or an empty String"))
-return a},"call$1","kh",2,0,null,12,[]]}}}],["dart._js_mirrors","dart:_js_mirrors",,H,{
+y=y.test(a)}else y=!0
+if(y)return a
+if(z.nC(a,"_"))throw H.b(new P.AT("\""+H.d(a)+"\" is a private identifier"))
+throw H.b(new P.AT("\""+H.d(a)+"\" is not a valid (qualified) symbol name"))},"call$1","kf",2,0,null,12,[]]}}}],["dart._js_mirrors","dart:_js_mirrors",,H,{
"^":"",
YC:[function(a){if(a==null)return
return new H.GD(a)},"call$1","Rc",2,0,null,12,[]],
-X7:[function(a){return H.YC(H.d(a.fN)+"=")},"call$1","JP",2,0,null,134,[]],
+X7:[function(a){return H.YC(H.d(a.fN)+"=")},"call$1","JP",2,0,null,136,[]],
vn:[function(a){var z=J.x(a)
if(typeof a==="object"&&a!==null&&!!z.$isTp)return new H.Sz(a,4)
-else return new H.iu(a,4)},"call$1","Yf",2,0,135,136,[]],
+else return new H.iu(a,4)},"call$1","Yf",2,0,137,138,[]],
jO:[function(a){var z,y
z=$.Sl().t(0,a)
y=J.x(a)
if(y.n(a,"dynamic"))return $.P8()
if(y.n(a,"void"))return $.oj()
-return H.tT(H.YC(z==null?a:z),a)},"call$1","vC",2,0,null,137,[]],
+return H.tT(H.YC(z==null?a:z),a)},"call$1","vC",2,0,null,139,[]],
tT:[function(a,b){var z,y,x,w,v,u,t,s,r,q,p,o,n,m,l,k
z=J.U6(b)
y=z.u8(b,"/")
@@ -12208,15 +11648,15 @@
if(m==null||m.length===0)x=n
else{for(z=m.length,l="dynamic",k=1;k<z;++k)l+=",dynamic"
x=new H.bl(n,l,null,null,null,null,null,null,null,null,null,null,null,null,null,n.If)}}$.tY[b]=x
-return x},"call$2","ER",4,0,null,134,[],137,[]],
+return x},"call$2","ER",4,0,null,136,[],139,[]],
Vv:[function(a){var z,y,x
z=P.L5(null,null,null,null,null)
for(y=H.VM(new H.a7(a,a.length,0,null),[H.Kp(a,0)]);y.G();){x=y.lo
-if(!x.gxV()&&!x.glT()&&!x.ghB())z.u(0,x.gIf(),x)}return z},"call$1","yM",2,0,null,138,[]],
+if(!x.gxV()&&!x.glT()&&!x.ghB())z.u(0,x.gIf(),x)}return z},"call$1","yM",2,0,null,140,[]],
Fk:[function(a){var z,y,x
z=P.L5(null,null,null,null,null)
for(y=H.VM(new H.a7(a,a.length,0,null),[H.Kp(a,0)]);y.G();){x=y.lo
-if(x.gxV())z.u(0,x.gIf(),x)}return z},"call$1","Pj",2,0,null,138,[]],
+if(x.gxV())z.u(0,x.gIf(),x)}return z},"call$1","Pj",2,0,null,140,[]],
vE:[function(a,b){var z,y,x,w,v,u
z=P.L5(null,null,null,null,null)
z.FV(0,b)
@@ -12226,7 +11666,7 @@
v=z.t(0,H.YC(v.Nj(w,0,J.xH(v.gB(w),1))))
u=J.x(v)
if(typeof v==="object"&&v!==null&&!!u.$isRY)continue}if(x.gxV())continue
-z.to(x.gIf(),new H.YX(x))}return z},"call$2","un",4,0,null,138,[],139,[]],
+z.to(x.gIf(),new H.YX(x))}return z},"call$2","un",4,0,null,140,[],141,[]],
MJ:[function(a,b){var z,y,x,w
z=[]
for(y=H.VM(new H.a7(a,a.length,0,null),[H.Kp(a,0)]);y.G();)z.push(H.jO(y.lo))
@@ -12234,14 +11674,14 @@
x.G()
w=x.lo
for(;x.G();)w=new H.BI(w,x.lo,null,null,H.YC(b))
-return w},"call$2","V8",4,0,null,140,[],137,[]],
+return w},"call$2","V8",4,0,null,142,[],139,[]],
w2:[function(a,b){var z,y,x
z=J.U6(a)
y=0
while(!0){x=z.gB(a)
if(typeof x!=="number")return H.s(x)
if(!(y<x))break
-if(J.de(z.t(a,y).gIf(),H.YC(b)))return y;++y}throw H.b(new P.AT("Type variable not present in list."))},"call$2","QB",4,0,null,142,[],12,[]],
+if(J.de(z.t(a,y).gIf(),H.YC(b)))return y;++y}throw H.b(new P.AT("Type variable not present in list."))},"call$2","CE",4,0,null,144,[],12,[]],
Jf:[function(a,b){var z,y,x,w,v,u,t
z={}
z.a=null
@@ -12258,9 +11698,9 @@
if(typeof b==="number"){t=z.call$1(b)
x=J.x(t)
if(typeof t==="object"&&t!==null&&!!x.$iscw)return t}w=H.Ko(b,new H.jB(z))}}if(w!=null)return H.jO(w)
-return P.re(C.yQ)},"call$2","xN",4,0,null,143,[],11,[]],
+return P.re(C.yQ)},"call$2","na",4,0,null,145,[],11,[]],
fb:[function(a,b){if(a==null)return b
-return H.YC(H.d(a.gUx().fN)+"."+H.d(b.fN))},"call$2","WS",4,0,null,143,[],144,[]],
+return H.YC(H.d(a.gUx().fN)+"."+H.d(b.fN))},"call$2","WS",4,0,null,145,[],146,[]],
pj:[function(a){var z,y,x,w
z=a["@"]
if(z!=null)return z()
@@ -12270,7 +11710,7 @@
return H.VM(new H.A8(y,new H.ye()),[null,null]).br(0)}x=Function.prototype.toString.call(a)
w=C.xB.cn(x,new H.VR(H.v4("\"[0-9,]*\";?[ \n\r]*}",!1,!0,!1),null,null))
if(w===-1)return C.xD;++w
-return H.VM(new H.A8(H.VM(new H.A8(C.xB.Nj(x,w,C.xB.XU(x,"\"",w)).split(","),P.ya()),[null,null]),new H.O1()),[null,null]).br(0)},"call$1","C7",2,0,null,145,[]],
+return H.VM(new H.A8(H.VM(new H.A8(C.xB.Nj(x,w,C.xB.XU(x,"\"",w)).split(","),P.ya()),[null,null]),new H.O1()),[null,null]).br(0)},"call$1","C7",2,0,null,147,[]],
jw:[function(a,b,c,d){var z,y,x,w,v,u,t,s,r
z=J.U6(b)
if(typeof b==="object"&&b!==null&&(b.constructor===Array||!!z.$isList)){y=H.Mk(z.t(b,0),",")
@@ -12281,10 +11721,10 @@
s=x[v]
v=t}else s=null
r=H.pS(u,s,a,c)
-if(r!=null)d.push(r)}},"call$4","Sv",8,0,null,143,[],146,[],61,[],51,[]],
+if(r!=null)d.push(r)}},"call$4","Sv",8,0,null,145,[],148,[],66,[],56,[]],
Mk:[function(a,b){var z=J.U6(a)
if(z.gl0(a)===!0)return H.VM([],[J.O])
-return z.Fr(a,b)},"call$2","nK",4,0,null,26,[],98,[]],
+return z.Fr(a,b)},"call$2","nK",4,0,null,31,[],103,[]],
BF:[function(a){switch(a){case"==":case"[]":case"*":case"/":case"%":case"~/":case"+":case"<<":case">>":case">=":case">":case"<=":case"<":case"&":case"^":case"|":case"-":case"unary-":case"[]=":case"~":return!0
default:return!1}},"call$1","IX",2,0,null,12,[]],
Y6:[function(a){var z,y
@@ -12292,9 +11732,9 @@
if(z.n(a,"^")||z.n(a,"$methodsWithOptionalArguments"))return!0
y=z.t(a,0)
z=J.x(y)
-return z.n(y,"*")||z.n(y,"+")},"call$1","uG",2,0,null,42,[]],
+return z.n(y,"*")||z.n(y,"+")},"call$1","zn",2,0,null,47,[]],
Sn:{
-"^":"a;L5,Aq>",
+"^":"a;L5,F1>",
gvU:function(){var z,y,x,w
z=this.L5
if(z!=null)return z
@@ -12303,70 +11743,70 @@
y.u(0,w.gFP(),w)}z=H.VM(new H.Oh(y),[P.iD,P.D4])
this.L5=z
return z},
-static:{"^":"QG,Q3,Ct",dF:[function(){var z,y,x,w,v,u,t,s,r,q,p,o,n,m,l
+static:{"^":"QG,Q3,Ct",dF:[function(){var z,y,x,w,v,u,t,s,r,q,p,o,n,m
z=P.L5(null,null,null,J.O,[J.Q,P.D4])
y=init.libraries
if(y==null)return z
for(x=H.VM(new H.a7(y,y.length,0,null),[H.Kp(y,0)]);x.G();){w=x.lo
v=J.U6(w)
u=v.t(w,0)
-t=v.t(w,1)
-s=P.r6($.qG().ej(t))
-r=v.t(w,2)
-q=v.t(w,3)
-p=v.t(w,4)
-o=v.t(w,5)
-n=v.t(w,6)
-m=v.t(w,7)
-l=p==null?C.xD:p()
-J.bi(z.to(u,new H.nI()),new H.Uz(s,r,q,l,o,n,m,null,null,null,null,null,null,null,null,null,null,H.YC(u)))}return z},"call$0","jc",0,0,null]}},
+t=P.hK(v.t(w,1))
+s=v.t(w,2)
+r=v.t(w,3)
+q=v.t(w,4)
+p=v.t(w,5)
+o=v.t(w,6)
+n=v.t(w,7)
+m=q==null?C.xD:q()
+J.bi(z.to(u,new H.nI()),new H.Uz(t,s,r,m,p,o,n,null,null,null,null,null,null,null,null,null,null,H.YC(u)))}return z},"call$0","jc",0,0,null]}},
nI:{
-"^":"Tp:113;",
+"^":"Tp:115;",
call$0:[function(){return H.VM([],[P.D4])},"call$0",null,0,0,null,"call"],
$isEH:true},
-TY:{
+jU:{
"^":"a;",
bu:[function(a){return this.gOO()},"call$0","gXo",0,0,null],
-IB:[function(a){throw H.b(P.SY(null))},"call$1","gft",2,0,null,41,[]],
-Hy:[function(a,b){throw H.b(P.SY(null))},"call$2","gfH",4,0,null,41,[],173,[]],
+IB:[function(a){throw H.b(P.SY(null))},"call$1","gft",2,0,null,46,[]],
+Hy:[function(a,b){throw H.b(P.SY(null))},"call$2","gdk",4,0,null,46,[],172,[]],
$isej:true},
Lj:{
-"^":"TY;MA",
+"^":"jU;MA",
gOO:function(){return"Isolate"},
gcZ:function(){var z=$.Cm().gvU().nb
return z.gUQ(z).XG(0,new H.mb())},
$isej:true},
mb:{
-"^":"Tp:432;",
-call$1:[function(a){return a.gGD()},"call$1",null,2,0,null,431,[],"call"],
+"^":"Tp:400;",
+call$1:[function(a){return a.gGD()},"call$1",null,2,0,null,399,[],"call"],
$isEH:true},
-am:{
-"^":"TY;If<",
+cb:{
+"^":"jU;If<",
gUx:function(){return H.fb(this.gXP(),this.gIf())},
gq4:function(){return J.co(this.gIf().fN,"_")},
bu:[function(a){return this.gOO()+" on '"+H.d(this.gIf().fN)+"'"},"call$0","gXo",0,0,null],
-jd:[function(a,b){throw H.b(H.Ef("Should not call _invoke"))},"call$2","gZ7",4,0,null,43,[],44,[]],
+jd:[function(a,b){throw H.b(H.Ef("Should not call _invoke"))},"call$2","gZ7",4,0,null,48,[],49,[]],
$isNL:true,
$isej:true},
cw:{
-"^":"EE;XP<,xW,Nz,LQ,If",
+"^":"EE;XP<,yG,Nz,LQ,If",
n:[function(a,b){var z
if(b==null)return!1
z=J.x(b)
-return typeof b==="object"&&b!==null&&!!z.$iscw&&J.de(this.If,b.If)&&this.XP.n(0,b.XP)},"call$1","gUJ",2,0,null,104,[]],
+return typeof b==="object"&&b!==null&&!!z.$iscw&&J.de(this.If,b.If)&&this.XP.n(0,b.XP)},"call$1","gUJ",2,0,null,109,[]],
giO:function(a){var z,y
z=J.v1(C.Gp.LU)
if(typeof z!=="number")return H.s(z)
y=this.XP
return(1073741823&z^17*J.v1(this.If)^19*y.giO(y))>>>0},
gOO:function(){return"TypeVariableMirror"},
+gFo:function(){return!1},
$iscw:true,
-$isac:true,
+$isFw:true,
$isX9:true,
$isNL:true,
$isej:true},
EE:{
-"^":"am;If",
+"^":"cb;If",
gOO:function(){return"TypeMirror"},
gXP:function(){return},
gc9:function(){return H.vh(P.SY(null))},
@@ -12391,7 +11831,7 @@
w=J.x(x)
if(typeof x==="object"&&x!==null&&!!w.$isMs){x=x.gJi()
if(!!x.$isWf){y.u(0,x.If,x)
-x.nz=this}}}z=H.VM(new H.Oh(y),[P.wv,P.Ms])
+x.jE=this}}}z=H.VM(new H.Oh(y),[P.wv,P.Ms])
this.P8=z
return z},
PU:[function(a,b){var z,y,x,w
@@ -12403,16 +11843,16 @@
if(w==null)w=this.gcc().nb.t(0,a)
if(w==null)throw H.b(P.lr(this,H.X7(a),[b],null,null))
w.Hy(this,b)
-return H.vn(b)},"call$2","gtd",4,0,null,65,[],173,[]],
+return H.vn(b)},"call$2","gtd",4,0,null,70,[],172,[]],
rN:[function(a){var z=this.gQH().nb.t(0,a)
if(z==null)throw H.b(P.lr(this,a,[],null,null))
-return H.vn(z.IB(this))},"call$1","gPo",2,0,null,65,[]],
+return H.vn(z.IB(this))},"call$1","gPo",2,0,null,70,[]],
F2:[function(a,b,c){var z,y
z=this.gQH().nb.t(0,a)
if(z==null)throw H.b(P.lr(this,a,b,c,null))
y=J.x(z)
if(typeof z==="object"&&z!==null&&!!y.$isZk&&!("$reflectable" in z.dl))H.Hz(a.gfN(a))
-return H.vn(z.jd(b,c))},function(a,b){return this.F2(a,b,null)},"CI","call$3",null,"gb2",4,2,null,77,24,[],43,[],44,[]],
+return H.vn(z.jd(b,c))},function(a,b){return this.F2(a,b,null)},"CI","call$3",null,"gb2",4,2,null,82,29,[],48,[],49,[]],
gm8:function(){var z,y,x,w,v,u,t,s,r,q,p
z=this.SD
if(z!=null)return z
@@ -12432,7 +11872,7 @@
if(q){u=C.xB.yn(r,4)
r=H.ys(u,"$",".")}p=H.Sd(r,s,!q,q)
y.push(p)
-p.nz=this}++v}this.SD=y
+p.jE=this}++v}this.SD=y
return y},
gTH:function(){var z,y
z=this.zE
@@ -12500,22 +11940,22 @@
$isej:true,
$isNL:true},
uh:{
-"^":"am+M2;",
+"^":"cb+M2;",
$isej:true},
IB:{
-"^":"Tp:433;a",
-call$2:[function(a,b){this.a.u(0,a,b)},"call$2",null,4,0,null,42,[],23,[],"call"],
+"^":"Tp:401;a",
+call$2:[function(a,b){this.a.u(0,a,b)},"call$2",null,4,0,null,47,[],28,[],"call"],
$isEH:true},
oP:{
-"^":"Tp:433;a",
-call$2:[function(a,b){this.a.u(0,a,b)},"call$2",null,4,0,null,42,[],23,[],"call"],
+"^":"Tp:401;a",
+call$2:[function(a,b){this.a.u(0,a,b)},"call$2",null,4,0,null,47,[],28,[],"call"],
$isEH:true},
YX:{
-"^":"Tp:113;a",
+"^":"Tp:115;a",
call$0:[function(){return this.a},"call$0",null,0,0,null,"call"],
$isEH:true},
BI:{
-"^":"Un;AY<,XW,BB,Ra,If",
+"^":"Un;AY<,XW,BB,i1,If",
gOO:function(){return"ClassMirror"},
gIf:function(){var z,y
z=this.BB
@@ -12527,9 +11967,9 @@
return z},
gUx:function(){return this.gIf()},
gYK:function(){return this.XW.gYK()},
-F2:[function(a,b,c){throw H.b(P.lr(this,a,b,c,null))},function(a,b){return this.F2(a,b,null)},"CI","call$3",null,"gb2",4,2,null,77,24,[],43,[],44,[]],
-rN:[function(a){throw H.b(P.lr(this,a,null,null,null))},"call$1","gPo",2,0,null,65,[]],
-PU:[function(a,b){throw H.b(P.lr(this,H.X7(a),[b],null,null))},"call$2","gtd",4,0,null,65,[],173,[]],
+F2:[function(a,b,c){throw H.b(P.lr(this,a,b,c,null))},function(a,b){return this.F2(a,b,null)},"CI","call$3",null,"gb2",4,2,null,82,29,[],48,[],49,[]],
+rN:[function(a){throw H.b(P.lr(this,a,null,null,null))},"call$1","gPo",2,0,null,70,[]],
+PU:[function(a,b){throw H.b(P.lr(this,H.X7(a),[b],null,null))},"call$2","gtd",4,0,null,70,[],172,[]],
gkZ:function(){return[this.XW]},
gHA:function(){return!0},
gJi:function(){return this},
@@ -12550,7 +11990,7 @@
"^":"M2;Ax<,xq",
gt5:function(a){return H.jO(J.bB(this.Ax).LU)},
F2:[function(a,b,c){var z=J.GL(a)
-return this.tu(a,0,z+":"+b.length+":0",b)},function(a,b){return this.F2(a,b,null)},"CI","call$3",null,"gb2",4,2,null,77,24,[],43,[],44,[]],
+return this.tu(a,0,z+":"+b.length+":0",b)},function(a,b){return this.F2(a,b,null)},"CI","call$3",null,"gb2",4,2,null,82,29,[],48,[],49,[]],
gK8:function(){var z,y,x
z=$.eb
y=this.Ax
@@ -12562,15 +12002,15 @@
z=this.gK8()
y=z[c]
if(y==null){x=$.I6().t(0,c)
-w=b===0?H.j5(J.uH(c,":"),3,null,null).br(0):C.xD
+w=b===0?H.q9(J.uH(c,":"),3,null,null).br(0):C.xD
v=new H.LI(a,x,b,d,w,null)
y=v.ZU(this.Ax)
z[c]=y}else v=null
if(y.gpf()){if(v==null)v=new H.LI(a,$.I6().t(0,c),b,d,[],null)
-return H.vn(y.Bj(this.Ax,v))}else return H.vn(y.Bj(this.Ax,d))},"call$4","gZ7",8,0,null,12,[],11,[],434,[],82,[]],
+return H.vn(y.Bj(this.Ax,v))}else return H.vn(y.Bj(this.Ax,d))},"call$4","gZ7",8,0,null,12,[],11,[],402,[],87,[]],
PU:[function(a,b){var z=H.d(a.gfN(a))+"="
this.tu(H.YC(z),2,z,[b])
-return H.vn(b)},"call$2","gtd",4,0,null,65,[],173,[]],
+return H.vn(b)},"call$2","gtd",4,0,null,70,[],172,[]],
rN:[function(a){var z,y,x,w
$loop$0:{z=this.xq
if(typeof z=="number"||typeof a.$p=="undefined")break $loop$0
@@ -12581,7 +12021,7 @@
else{w=H.vn(x)
y.v=x
y.m=w
-return w}}return this.Dm(a)},"call$1","gPo",2,0,null,65,[]],
+return w}}return this.Dm(a)},"call$1","gPo",2,0,null,70,[]],
Dm:[function(a){var z,y,x,w,v,u,t
z=J.GL(a)
y=this.tu(a,1,z,C.xD)
@@ -12598,14 +12038,14 @@
t=x.geK()?this.QN(u,v):this.x0(u,v)
w[z]=t
t.v=t.m=w
-return y},"call$1","gFf",2,0,null,65,[]],
+return y},"call$1","gFf",2,0,null,70,[]],
ds:[function(a,b){if(b)return(function(b){return eval(b)})("(function probe$"+H.d(a)+"(c){return c."+H.d(a)+"})")
-else return(function(n){return(function(c){return c[n]})})(a)},"call$2","gfu",4,0,null,110,[],435,[]],
+else return(function(n){return(function(c){return c[n]})})(a)},"call$2","gfu",4,0,null,279,[],403,[]],
x0:[function(a,b){if(!b)return(function(n){return(function(o){return o[n]()})})(a)
-return(function(b){return eval(b)})("(function "+this.Ax.constructor.name+"$"+H.d(a)+"(o){return o."+H.d(a)+"()})")},"call$2","gRr",4,0,null,12,[],435,[]],
+return(function(b){return eval(b)})("(function "+this.Ax.constructor.name+"$"+H.d(a)+"(o){return o."+H.d(a)+"()})")},"call$2","gRr",4,0,null,12,[],403,[]],
QN:[function(a,b){var z=J.x(this.Ax)
if(!b)return(function(n,i){return(function(o){return i[n](o)})})(a,z)
-return(function(b,i){return eval(b)})("(function "+z.constructor.name+"$"+H.d(a)+"(o){return i."+H.d(a)+"(o)})",z)},"call$2","gpa",4,0,null,12,[],435,[]],
+return(function(b,i){return eval(b)})("(function "+z.constructor.name+"$"+H.d(a)+"(o){return i."+H.d(a)+"(o)})",z)},"call$2","gj1",4,0,null,12,[],403,[]],
n:[function(a,b){var z,y
if(b==null)return!1
z=J.x(b)
@@ -12613,7 +12053,7 @@
y=b.Ax
y=z==null?y==null:z===y
z=y}else z=!1
-return z},"call$1","gUJ",2,0,null,104,[]],
+return z},"call$1","gUJ",2,0,null,109,[]],
giO:function(a){return J.UN(H.CU(this.Ax),909522486)},
bu:[function(a){return"InstanceMirror on "+H.d(P.hl(this.Ax))},"call$0","gXo",0,0,null],
t:[function(a,b){return H.vh(P.SY(null))},"call$1","gIA",2,0,null,12,[]],
@@ -12621,16 +12061,21 @@
$isvr:true,
$isej:true},
mg:{
-"^":"Tp:436;a",
+"^":"Tp:404;a",
call$2:[function(a,b){var z,y
z=a.gfN(a)
y=this.a
if(y.x4(z))y.u(0,z,b)
-else throw H.b(H.WE("Invoking noSuchMethod with named arguments not implemented"))},"call$2",null,4,0,null,134,[],23,[],"call"],
+else throw H.b(H.WE("Invoking noSuchMethod with named arguments not implemented"))},"call$2",null,4,0,null,136,[],28,[],"call"],
$isEH:true},
bl:{
-"^":"am;NK,EZ,ut,Db,uA,b0,M2,T1,fX,FU,qu,qN,qm,Ra,RH,If",
+"^":"cb;NK,EZ,ut,Db,uA,b0,M2,T1,fX,FU,qu,qN,qm,i1,RH,If",
gOO:function(){return"ClassMirror"},
+bu:[function(a){var z,y,x
+z="ClassMirror on "+H.d(this.NK.gIf().fN)
+if(this.gw8()!=null){y=z+"<"
+x=this.gw8()
+z=y+x.zV(x,", ")+">"}return z},"call$0","gXo",0,0,null],
gCr:function(){for(var z=this.gw8(),z=z.gA(z);z.G();)if(!J.de(z.lo,$.P8()))return H.d(this.NK.gCr())+"<"+this.EZ+">"
return this.NK.gCr()},
gNy:function(){return this.NK.gNy()},
@@ -12681,8 +12126,8 @@
z=H.VM(new H.Oh(y),[P.wv,P.NL])
this.Db=z
return z},
-PU:[function(a,b){return this.NK.PU(a,b)},"call$2","gtd",4,0,null,65,[],173,[]],
-rN:[function(a){return this.NK.rN(a)},"call$1","gPo",2,0,null,65,[]],
+PU:[function(a,b){return this.NK.PU(a,b)},"call$2","gtd",4,0,null,70,[],172,[]],
+rN:[function(a){return this.NK.rN(a)},"call$1","gPo",2,0,null,70,[]],
gXP:function(){return this.NK.gXP()},
gc9:function(){return this.NK.gc9()},
gAY:function(){var z=this.qN
@@ -12690,7 +12135,7 @@
z=H.Jf(this,init.metadata[J.UQ(init.typeInformation[this.NK.gCr()],0)])
this.qN=z
return z},
-F2:[function(a,b,c){return this.NK.F2(a,b,c)},function(a,b){return this.F2(a,b,null)},"CI","call$3",null,"gb2",4,2,null,77,24,[],43,[],44,[]],
+F2:[function(a,b,c){return this.NK.F2(a,b,c)},function(a,b){return this.F2(a,b,null)},"CI","call$3",null,"gb2",4,2,null,82,29,[],48,[],49,[]],
gHA:function(){return!1},
gJi:function(){return this.NK},
gkZ:function(){var z=this.qm
@@ -12709,29 +12154,29 @@
$isX9:true,
$isNL:true},
tB:{
-"^":"Tp:25;a",
+"^":"Tp:30;a",
call$1:[function(a){var z,y,x
z=H.BU(a,null,new H.Oo())
y=this.a
if(J.de(z,-1))y.push(H.jO(J.rr(a)))
else{x=init.metadata[z]
-y.push(new H.cw(P.re(x.gXP()),x,z,null,H.YC(J.O6(x))))}},"call$1",null,2,0,null,437,[],"call"],
+y.push(new H.cw(P.re(x.gXP()),x,z,null,H.YC(J.O6(x))))}},"call$1",null,2,0,null,405,[],"call"],
$isEH:true},
Oo:{
-"^":"Tp:107;",
-call$1:[function(a){return-1},"call$1",null,2,0,null,108,[],"call"],
+"^":"Tp:112;",
+call$1:[function(a){return-1},"call$1",null,2,0,null,113,[],"call"],
$isEH:true},
Tc:{
-"^":"Tp:107;b",
-call$1:[function(a){return this.b.call$1(a)},"call$1",null,2,0,null,87,[],"call"],
+"^":"Tp:112;b",
+call$1:[function(a){return this.b.call$1(a)},"call$1",null,2,0,null,92,[],"call"],
$isEH:true},
Ax:{
-"^":"Tp:107;a",
+"^":"Tp:112;a",
call$1:[function(a){this.a.u(0,a.gIf(),a)
-return a},"call$1",null,2,0,null,438,[],"call"],
+return a},"call$1",null,2,0,null,406,[],"call"],
$isEH:true},
Wf:{
-"^":"vk;Cr<,Tx<,H8,Ht,pz,le,qN,qu,zE,b0,FU,T1,fX,M2,uA,Db,xO,qm,UF,Ra,RH,nz,If",
+"^":"vk;Cr<,Tx<,H8,Ht,pz,le,qN,qu,zE,b0,FU,T1,fX,M2,uA,Db,xO,qm,UF,i1,RH,jE,If",
gOO:function(){return"ClassMirror"},
gaB:function(){var z,y
z=this.Tx
@@ -12755,7 +12200,7 @@
if(t.$reflectable==2)continue
s=H.Sd(u,t,!1,!1)
x.push(s)
-s.nz=a}y=H.kU(init.statics[this.Cr])
+s.jE=a}y=H.kU(init.statics[this.Cr])
for(w=H.VM(new H.a7(y,y.length,0,null),[H.Kp(y,0)]);w.G();){r=w.lo
if(H.Y6(r))continue
q=this.gXP().gae()[r]
@@ -12766,7 +12211,7 @@
p=H.ys(n,"$",".")}}else continue
s=H.Sd(p,q,!o,o)
x.push(s)
-s.nz=a}return x},"call$1","gN4",2,0,null,439,[]],
+s.jE=a}return x},"call$1","gN4",2,0,null,407,[]],
gEO:function(){var z=this.qu
if(z!=null)return z
z=this.ly(this)
@@ -12782,7 +12227,7 @@
C.Nm.FV(x,y)}H.jw(a,x,!1,z)
w=init.statics[this.Cr]
if(w!=null)H.jw(a,w["^"],!0,z)
-return z},"call$1","gMp",2,0,null,440,[]],
+return z},"call$1","gap",2,0,null,408,[]],
gTH:function(){var z=this.zE
if(z!=null)return z
z=this.ws(this)
@@ -12813,32 +12258,32 @@
z=new H.Ei(y)
this.gQH().nb.aN(0,z)
this.gEz().nb.aN(0,z)
-J.kH(this.gNy(),new H.U7(y))
+J.kH(this.gNy(),new H.Ci(y))
z=H.VM(new H.Oh(y),[P.wv,P.NL])
this.Db=z
return z},
PU:[function(a,b){var z,y
z=this.gcc().nb.t(0,a)
-if(z!=null&&z.gFo()&&!z.gV5()){y=z.gao()
+if(z!=null&&z.gFo()&&J.WO(z)!==!0){y=z.gao()
if(!(y in $))throw H.b(H.Ef("Cannot find \""+y+"\" in current isolate."))
$[y]=b
-return H.vn(b)}throw H.b(P.lr(this,H.X7(a),[b],null,null))},"call$2","gtd",4,0,null,65,[],173,[]],
+return H.vn(b)}throw H.b(P.lr(this,H.X7(a),[b],null,null))},"call$2","gtd",4,0,null,70,[],172,[]],
rN:[function(a){var z,y
z=this.gcc().nb.t(0,a)
if(z!=null&&z.gFo()){y=z.gao()
if(!(y in $))throw H.b(H.Ef("Cannot find \""+y+"\" in current isolate."))
if(y in init.lazies)return H.vn($[init.lazies[y]]())
-else return H.vn($[y])}throw H.b(P.lr(this,a,null,null,null))},"call$1","gPo",2,0,null,65,[]],
+else return H.vn($[y])}throw H.b(P.lr(this,a,null,null,null))},"call$1","gPo",2,0,null,70,[]],
gXP:function(){var z,y
-z=this.nz
+z=this.jE
if(z==null){z=this.Tx
y=J.x(z)
-if(typeof z==="object"&&z!==null&&!!y.$isGv)this.nz=H.jO(C.nY.LU).gXP()
+if(typeof z==="object"&&z!==null&&!!y.$isGv)this.jE=H.jO(C.nY.LU).gXP()
else{z=$.vK()
z=z.gUQ(z)
y=new H.MH(null,J.GP(z.l6),z.T6)
y.$builtinTypeInfo=[H.Kp(z,0),H.Kp(z,1)]
-for(;y.G();)for(z=J.GP(y.lo);z.G();)z.gl().gqh()}z=this.nz
+for(;y.G();)for(z=J.GP(y.lo);z.G();)z.gl().gqh()}z=this.jE
if(z==null)throw H.b(new P.lj("Class \""+H.d(this.If.fN)+"\" has no owner"))}return z},
gc9:function(){var z=this.xO
if(z!=null)return z
@@ -12865,13 +12310,13 @@
F2:[function(a,b,c){var z=this.ghp().nb.t(0,a)
if(z==null||!z.gFo())throw H.b(P.lr(this,a,b,c,null))
if(!z.tB())H.Hz(a.gfN(a))
-return H.vn(z.jd(b,c))},function(a,b){return this.F2(a,b,null)},"CI","call$3",null,"gb2",4,2,null,77,24,[],43,[],44,[]],
+return H.vn(z.jd(b,c))},function(a,b){return this.F2(a,b,null)},"CI","call$3",null,"gb2",4,2,null,82,29,[],48,[],49,[]],
gHA:function(){return!0},
gJi:function(){return this},
MR:[function(a){var z,y
z=init.typeInformation[this.Cr]
y=z!=null?H.VM(new H.A8(J.Pr(z,1),new H.t0(a)),[null,null]).br(0):C.Me
-return H.VM(new P.Yp(y),[P.Ms])},"call$1","gki",2,0,null,143,[]],
+return H.VM(new P.Yp(y),[P.Ms])},"call$1","gki",2,0,null,145,[]],
gkZ:function(){var z=this.qm
if(z!=null)return z
z=this.MR(this)
@@ -12901,30 +12346,30 @@
"^":"EE+M2;",
$isej:true},
Ei:{
-"^":"Tp:433;a",
-call$2:[function(a,b){this.a.u(0,a,b)},"call$2",null,4,0,null,42,[],23,[],"call"],
+"^":"Tp:401;a",
+call$2:[function(a,b){this.a.u(0,a,b)},"call$2",null,4,0,null,47,[],28,[],"call"],
$isEH:true},
-U7:{
-"^":"Tp:107;b",
+Ci:{
+"^":"Tp:112;b",
call$1:[function(a){this.b.u(0,a.gIf(),a)
-return a},"call$1",null,2,0,null,438,[],"call"],
+return a},"call$1",null,2,0,null,406,[],"call"],
$isEH:true},
t0:{
-"^":"Tp:442;a",
-call$1:[function(a){return H.Jf(this.a,init.metadata[a])},"call$1",null,2,0,null,441,[],"call"],
+"^":"Tp:410;a",
+call$1:[function(a){return H.Jf(this.a,init.metadata[a])},"call$1",null,2,0,null,409,[],"call"],
$isEH:true},
Ld:{
-"^":"am;ao<,V5<,Fo<,n6,nz,Ay>,le,If",
+"^":"cb;ao<,V5>,Fo<,n6,jE,Ay>,le,If",
gOO:function(){return"VariableMirror"},
-gt5:function(a){return H.Jf(this.nz,init.metadata[this.Ay])},
-gXP:function(){return this.nz},
+gt5:function(a){return H.Jf(this.jE,init.metadata[this.Ay])},
+gXP:function(){return this.jE},
gc9:function(){var z=this.le
if(z==null){z=this.n6
z=z==null?C.xD:z()
this.le=z}return J.C0(z,H.Yf()).br(0)},
-IB:[function(a){return $[this.ao]},"call$1","gft",2,0,null,41,[]],
+IB:[function(a){return $[this.ao]},"call$1","gft",2,0,null,46,[]],
Hy:[function(a,b){if(this.V5)throw H.b(P.lr(this,H.X7(this.If),[b],null,null))
-$[this.ao]=b},"call$2","gfH",4,0,null,41,[],173,[]],
+$[this.ao]=b},"call$2","gdk",4,0,null,46,[],172,[]],
$isRY:true,
$isNL:true,
$isej:true,
@@ -12946,7 +12391,7 @@
s=y.yn(x,r+1)}else q=s
p=d?$.Sl().t(0,q):$.bx().t(0,"g"+q)
if(p==null)p=q
-if(t){o=H.YC(p+"=")
+if(t){o=H.YC(H.d(p)+"=")
y=c.gEO()
v=new H.a7(y,y.length,0,null)
v.$builtinTypeInfo=[H.Kp(y,0)]
@@ -12955,7 +12400,7 @@
return new H.Ld(s,t,d,b,c,H.BU(z[1],null,null),null,H.YC(p))},GQ:[function(a){if(a>=60&&a<=64)return a-59
if(a>=123&&a<=126)return a-117
if(a>=37&&a<=43)return a-27
-return 0},"call$1","fS",2,0,null,141,[]]}},
+return 0},"call$1","fS",2,0,null,143,[]]}},
Sz:{
"^":"iu;Ax,xq",
gMj:function(a){var z,y,x,w,v,u,t,s
@@ -12985,14 +12430,14 @@
$isvr:true,
$isej:true},
Zk:{
-"^":"am;dl,Yq,lT<,hB<,Fo<,xV<,qx,nz,le,wM,H3,If",
+"^":"cb;dl,Yq,lT<,hB<,Fo<,xV<,qx,jE,le,wM,H3,If",
gOO:function(){return"MethodMirror"},
gMP:function(){var z=this.H3
if(z!=null)return z
this.gc9()
return this.H3},
tB:[function(){return"$reflectable" in this.dl},"call$0","gX1",0,0,null],
-gXP:function(){return this.nz},
+gXP:function(){return this.jE},
gdw:function(){this.gc9()
return this.wM},
gc9:function(){var z,y,x,w,v,u,t,s,r,q,p,o,n,m,l,k,j,i
@@ -13009,7 +12454,7 @@
if(z!=null){x=J.x(z)
x=typeof z==="object"&&z!==null&&!!x.$isD4
z=x}else z=!1
-t=z?new H.Ar(v.hl(null),null,null,null,this.nz):new H.Ar(v.hl(this.nz.gJi().gTx()),null,null,null,this.nz)}if(this.xV)this.wM=this.nz
+t=z?new H.Ar(v.hl(null),null,null,null,this.jE):new H.Ar(v.hl(this.jE.gJi().gTx()),null,null,null,this.jE)}if(this.xV)this.wM=this.jE
else this.wM=t.gdw()
s=v.Mo
for(z=t.gMP(),z=z.gA(z),x=w.length,r=v.hG,q=v.Rn,p=0;z.G();p=i){o=z.lo
@@ -13025,11 +12470,11 @@
this.le=z}return z},
jd:[function(a,b){if(!this.Fo&&!this.xV)throw H.b(H.Ef("Cannot invoke instance method without receiver."))
if(!J.de(this.Yq,a.length)||this.dl==null)throw H.b(P.lr(this.gXP(),this.If,a,b,null))
-return this.dl.apply($,P.F(a,!0,null))},"call$2","gZ7",4,0,null,43,[],44,[]],
+return this.dl.apply($,P.F(a,!0,null))},"call$2","gZ7",4,0,null,48,[],49,[]],
IB:[function(a){if(this.lT)return this.jd([],null)
-else throw H.b(P.SY("getField on "+H.d(a)))},"call$1","gft",2,0,null,41,[]],
+else throw H.b(P.SY("getField on "+H.d(a)))},"call$1","gft",2,0,null,46,[]],
Hy:[function(a,b){if(this.hB)return this.jd([b],null)
-else throw H.b(P.lr(this,H.X7(this.If),[],null,null))},"call$2","gfH",4,0,null,41,[],173,[]],
+else throw H.b(P.lr(this,H.X7(this.If),[],null,null))},"call$2","gdk",4,0,null,46,[],172,[]],
guU:function(){return!this.lT&&!this.hB&&!this.xV},
$isZk:true,
$isRS:true,
@@ -13051,25 +12496,26 @@
u=!1}w=H.YC(a)
return new H.Zk(b,J.WB(v,t),u,x,c,d,y,null,null,null,null,w)}}},
fu:{
-"^":"am;XP<,Ay>,Q2<,Sh,BE,QY,If",
+"^":"cb;XP<,Ay>,Q2<,Sh,BE,QY,If",
gOO:function(){return"ParameterMirror"},
gt5:function(a){return H.Jf(this.XP,this.Ay)},
gFo:function(){return!1},
-gV5:function(){return!1},
+gV5:function(a){return!1},
gc9:function(){return J.C0(this.QY,new H.wt()).br(0)},
$isYs:true,
$isRY:true,
$isNL:true,
$isej:true},
wt:{
-"^":"Tp:372;",
-call$1:[function(a){return H.vn(init.metadata[a])},"call$1",null,2,0,null,441,[],"call"],
+"^":"Tp:411;",
+call$1:[function(a){return H.vn(init.metadata[a])},"call$1",null,2,0,null,409,[],"call"],
$isEH:true},
ng:{
-"^":"am;Cr<,CM,If",
+"^":"cb;Cr<,CM,If",
gP:function(a){return this.CM},
r6:function(a,b){return this.gP(this).call$1(b)},
gOO:function(){return"TypedefMirror"},
+gYj:function(){return H.vh(P.SY(null))},
gJi:function(){return H.vh(P.SY(null))},
gXP:function(){return H.vh(P.SY(null))},
gc9:function(){return H.vh(P.SY(null))},
@@ -13084,9 +12530,9 @@
gkZ:function(){return H.vh(P.SY(null))},
gYK:function(){return H.vh(P.SY(null))},
t:[function(a,b){return H.vh(P.SY(null))},"call$1","gIA",2,0,null,12,[]],
-F2:[function(a,b,c){return H.vh(P.SY(null))},function(a,b){return this.F2(a,b,null)},"CI","call$3",null,"gb2",4,2,null,77,24,[],43,[],44,[]],
-rN:[function(a){return H.vh(P.SY(null))},"call$1","gPo",2,0,null,65,[]],
-PU:[function(a,b){return H.vh(P.SY(null))},"call$2","gtd",4,0,null,65,[],23,[]],
+F2:[function(a,b,c){return H.vh(P.SY(null))},function(a,b){return this.F2(a,b,null)},"CI","call$3",null,"gb2",4,2,null,82,29,[],48,[],49,[]],
+rN:[function(a){return H.vh(P.SY(null))},"call$1","gPo",2,0,null,70,[]],
+PU:[function(a,b){return H.vh(P.SY(null))},"call$2","gtd",4,0,null,70,[],28,[]],
gNy:function(){return H.vh(P.SY(null))},
gw8:function(){return H.vh(P.SY(null))},
gJi:function(){return H.vh(P.SY(null))},
@@ -13135,23 +12581,23 @@
z=x+"'"
this.o3=z
return z},"call$0","gXo",0,0,null],
-gwK:function(){return H.vh(P.SY(null))},
-V7:function(a,b){return this.gwK().call$2(a,b)},
-nQ:function(a){return this.gwK().call$1(a)},
+gah:function(){return H.vh(P.SY(null))},
+V7:function(a,b){return this.gah().call$2(a,b)},
+nQ:function(a){return this.gah().call$1(a)},
$isMs:true,
$isej:true,
$isX9:true,
$isNL:true},
rh:{
-"^":"Tp:443;a",
+"^":"Tp:412;a",
call$1:[function(a){var z,y,x
z=init.metadata[a]
y=this.a
x=H.w2(y.a.gNy(),J.O6(z))
-return J.UQ(y.a.gw8(),x)},"call$1",null,2,0,null,47,[],"call"],
+return J.UQ(y.a.gw8(),x)},"call$1",null,2,0,null,52,[],"call"],
$isEH:true},
jB:{
-"^":"Tp:444;b",
+"^":"Tp:413;b",
call$1:[function(a){var z,y
z=this.b.call$1(a)
y=J.x(z)
@@ -13159,33 +12605,33 @@
if((typeof z!=="object"||z===null||!y.$isWf)&&(typeof z!=="object"||z===null||!y.$isbl))if(y.n(z,$.P8()))return"dynamic"
else if(y.n(z,$.oj()))return"void"
else return"dynamic"
-return z.gCr()},"call$1",null,2,0,null,47,[],"call"],
+return z.gCr()},"call$1",null,2,0,null,52,[],"call"],
$isEH:true},
ye:{
-"^":"Tp:372;",
-call$1:[function(a){return init.metadata[a]},"call$1",null,2,0,null,441,[],"call"],
+"^":"Tp:411;",
+call$1:[function(a){return init.metadata[a]},"call$1",null,2,0,null,409,[],"call"],
$isEH:true},
O1:{
-"^":"Tp:372;",
-call$1:[function(a){return init.metadata[a]},"call$1",null,2,0,null,441,[],"call"],
+"^":"Tp:411;",
+call$1:[function(a){return init.metadata[a]},"call$1",null,2,0,null,409,[],"call"],
$isEH:true},
Oh:{
"^":"a;nb",
gB:function(a){return this.nb.X5},
gl0:function(a){return this.nb.X5===0},
gor:function(a){return this.nb.X5!==0},
-t:[function(a,b){return this.nb.t(0,b)},"call$1","gIA",2,0,null,42,[]],
-x4:[function(a){return this.nb.x4(a)},"call$1","gV9",2,0,null,42,[]],
-di:[function(a){return this.nb.di(a)},"call$1","gmc",2,0,null,23,[]],
-aN:[function(a,b){return this.nb.aN(0,b)},"call$1","gjw",2,0,null,115,[]],
+t:[function(a,b){return this.nb.t(0,b)},"call$1","gIA",2,0,null,47,[]],
+x4:[function(a){return this.nb.x4(a)},"call$1","gV9",2,0,null,47,[]],
+di:[function(a){return this.nb.di(a)},"call$1","gmc",2,0,null,28,[]],
+aN:[function(a,b){return this.nb.aN(0,b)},"call$1","gjw",2,0,null,117,[]],
gvc:function(a){var z=this.nb
return H.VM(new P.i5(z),[H.Kp(z,0)])},
gUQ:function(a){var z=this.nb
return z.gUQ(z)},
-u:[function(a,b,c){return H.kT()},"call$2","gj3",4,0,null,42,[],23,[]],
-FV:[function(a,b){return H.kT()},"call$1","gDY",2,0,null,104,[]],
-Rz:[function(a,b){H.kT()},"call$1","gRI",2,0,null,42,[]],
-V1:[function(a){return H.kT()},"call$0","gyP",0,0,null],
+u:[function(a,b,c){return H.kT()},"call$2","gj3",4,0,null,47,[],28,[]],
+FV:[function(a,b){return H.kT()},"call$1","gDY",2,0,null,109,[]],
+Rz:[function(a,b){H.kT()},"call$1","guH",2,0,null,47,[]],
+V1:[function(a){return H.kT()},"call$0","gRa",0,0,null],
$isZ0:true,
static:{kT:[function(){throw H.b(P.f("Cannot modify an unmodifiable Map"))},"call$0","lY",0,0,null]}},
"^":"Sk<"}],["dart._js_names","dart:_js_names",,H,{
@@ -13197,10 +12643,10 @@
u=a[v]
y.u(0,v,u)
if(w){t=J.rY(v)
-if(t.nC(v,"g"))y.u(0,"s"+t.yn(v,1),u+"=")}}return y},"call$2","BH",4,0,null,147,[],148,[]],
+if(t.nC(v,"g"))y.u(0,"s"+t.yn(v,1),u+"=")}}return y},"call$2","Hn",4,0,null,149,[],150,[]],
YK:[function(a){var z=H.VM(H.B7([],P.L5(null,null,null,null,null)),[J.O,J.O])
a.aN(0,new H.Xh(z))
-return z},"call$1","OX",2,0,null,149,[]],
+return z},"call$1","OX",2,0,null,151,[]],
kU:[function(a){var z=H.VM((function(victim, hasOwnProperty) {
var result = [];
for (var key in victim) {
@@ -13209,36 +12655,16 @@
return result;
})(a, Object.prototype.hasOwnProperty),[null])
z.fixed$length=init
-return z},"call$1","wp",2,0,null,145,[]],
+return z},"call$1","wp",2,0,null,147,[]],
Xh:{
-"^":"Tp:445;a",
-call$2:[function(a,b){this.a.u(0,b,a)},"call$2",null,4,0,null,137,[],434,[],"call"],
+"^":"Tp:414;a",
+call$2:[function(a,b){this.a.u(0,b,a)},"call$2",null,4,0,null,139,[],402,[],"call"],
$isEH:true}}],["dart.async","dart:async",,P,{
"^":"",
VH:[function(a,b){var z=H.N7()
z=H.KT(z,[z,z]).BD(a)
if(z)return b.O8(a)
-else return b.cR(a)},"call$2","p3",4,0,null,150,[],151,[]],
-pH:[function(a,b){var z,y,x,w,v,u,t
-z={}
-z.a=null
-z.b=null
-z.c=0
-z.d=null
-z.e=null
-y=new P.j7(z,b)
-for(x=H.VM(new H.a7(a,a.length,0,null),[H.Kp(a,0)]);x.G();){w=x.lo
-v=z.c
-z.c=v+1
-w.Rx(new P.ff(z,b,v),y)}y=z.c
-if(y===0)return P.Ab(C.xD,null)
-u=Array(y)
-u.fixed$length=init
-z.b=u
-y=J.Q
-t=H.VM(new P.Zf(P.Dt(y)),[y])
-z.a=t
-return t.MM},"call$2$eagerError","pk",2,3,null,152,153,[],154,[]],
+else return b.cR(a)},"call$2","p3",4,0,null,152,[],153,[]],
Cx:[function(){var z=$.S6
for(;z!=null;){J.cG(z)
z=z.gaw()
@@ -13247,7 +12673,7 @@
try{P.Cx()}catch(z){H.Ru(z)
P.jL(C.ny,P.qZ())
$.S6=$.S6.gaw()
-throw z}},"call$0","qZ",0,0,112],
+throw z}},"call$0","qZ",0,0,114],
IA:[function(a){var z,y
z=$.k8
if(z==null){z=new P.OM(a,null)
@@ -13255,11 +12681,11 @@
$.S6=z
P.jL(C.ny,P.qZ())}else{y=new P.OM(a,null)
z.aw=y
-$.k8=y}},"call$1","xc",2,0,null,156,[]],
+$.k8=y}},"call$1","vy",2,0,null,155,[]],
rb:[function(a){var z
if(J.de($.X3,C.NU)){$.X3.wr(a)
return}z=$.X3
-z.wr(z.xi(a,!0))},"call$1","Rf",2,0,null,156,[]],
+z.wr(z.xi(a,!0))},"call$1","Rf",2,0,null,155,[]],
bK:function(a,b,c,d){var z
if(c){z=H.VM(new P.dz(b,a,0,null,null,null,null),[d])
z.SJ=z
@@ -13275,56 +12701,56 @@
return}catch(u){w=H.Ru(u)
y=w
x=new H.XO(u,null)
-$.X3.hk(y,x)}},"call$1","DC",2,0,null,157,[]],
-YE:[function(a){},"call$1","bZ",2,0,158,23,[]],
-SZ:[function(a,b){$.X3.hk(a,b)},function(a){return P.SZ(a,null)},null,"call$2","call$1","AY",2,2,159,77,160,[],161,[]],
-dL:[function(){return},"call$0","v3",0,0,112],
+$.X3.hk(y,x)}},"call$1","DC",2,0,null,156,[]],
+YE:[function(a){},"call$1","bZ",2,0,157,28,[]],
+SZ:[function(a,b){$.X3.hk(a,b)},function(a){return P.SZ(a,null)},null,"call$2","call$1","AY",2,2,158,82,159,[],160,[]],
+dL:[function(){},"call$0","v3",0,0,114],
FE:[function(a,b,c){var z,y,x,w
try{b.call$1(a.call$0())}catch(x){w=H.Ru(x)
z=w
y=new H.XO(x,null)
-c.call$2(z,y)}},"call$3","CV",6,0,null,162,[],163,[],164,[]],
+c.call$2(z,y)}},"call$3","CV",6,0,null,161,[],162,[],163,[]],
NX:[function(a,b,c,d){a.ed()
-b.K5(c,d)},"call$4","QD",8,0,null,165,[],166,[],160,[],161,[]],
-TB:[function(a,b){return new P.uR(a,b)},"call$2","cH",4,0,null,165,[],166,[]],
+b.K5(c,d)},"call$4","QD",8,0,null,164,[],165,[],159,[],160,[]],
+TB:[function(a,b){return new P.uR(a,b)},"call$2","cH",4,0,null,164,[],165,[]],
Bb:[function(a,b,c){a.ed()
-b.rX(c)},"call$3","iB",6,0,null,165,[],166,[],23,[]],
+b.rX(c)},"call$3","iB",6,0,null,164,[],165,[],28,[]],
rT:function(a,b){var z
if(J.de($.X3,C.NU))return $.X3.uN(a,b)
z=$.X3
return z.uN(a,z.xi(b,!0))},
jL:[function(a,b){var z=C.jn.cU(a.Fq,1000)
-return H.cy(z<0?0:z,b)},"call$2","et",4,0,null,167,[],156,[]],
+return H.cy(z<0?0:z,b)},"call$2","et",4,0,null,166,[],155,[]],
PJ:[function(a){var z=$.X3
$.X3=a
-return z},"call$1","kb",2,0,null,151,[]],
-L2:[function(a,b,c,d,e){a.Gr(new P.pK(d,e))},"call$5","xP",10,0,168,169,[],170,[],151,[],160,[],161,[]],
+return z},"call$1","kb",2,0,null,153,[]],
+L2:[function(a,b,c,d,e){a.Gr(new P.pK(d,e))},"call$5","xP",10,0,167,168,[],169,[],153,[],159,[],160,[]],
T8:[function(a,b,c,d){var z,y
if(J.de($.X3,c))return d.call$0()
z=P.PJ(c)
try{y=d.call$0()
-return y}finally{$.X3=z}},"call$4","AI",8,0,171,169,[],170,[],151,[],115,[]],
+return y}finally{$.X3=z}},"call$4","AI",8,0,170,168,[],169,[],153,[],117,[]],
V7:[function(a,b,c,d,e){var z,y
if(J.de($.X3,c))return d.call$1(e)
z=P.PJ(c)
try{y=d.call$1(e)
-return y}finally{$.X3=z}},"call$5","MM",10,0,172,169,[],170,[],151,[],115,[],173,[]],
+return y}finally{$.X3=z}},"call$5","MM",10,0,171,168,[],169,[],153,[],117,[],172,[]],
Qx:[function(a,b,c,d,e,f){var z,y
if(J.de($.X3,c))return d.call$2(e,f)
z=P.PJ(c)
try{y=d.call$2(e,f)
-return y}finally{$.X3=z}},"call$6","l4",12,0,174,169,[],170,[],151,[],115,[],54,[],55,[]],
-Ee:[function(a,b,c,d){return d},"call$4","EU",8,0,175,169,[],170,[],151,[],115,[]],
-cQ:[function(a,b,c,d){return d},"call$4","zi",8,0,176,169,[],170,[],151,[],115,[]],
-VI:[function(a,b,c,d){return d},"call$4","uu",8,0,177,169,[],170,[],151,[],115,[]],
-Tk:[function(a,b,c,d){P.IA(C.NU!==c?c.ce(d):d)},"call$4","G2",8,0,178,169,[],170,[],151,[],115,[]],
-h8:[function(a,b,c,d,e){return P.jL(d,C.NU!==c?c.ce(e):e)},"call$5","KF",10,0,179,169,[],170,[],151,[],167,[],156,[]],
-XB:[function(a,b,c,d){H.qw(d)},"call$4","YM",8,0,180,169,[],170,[],151,[],181,[]],
-CI:[function(a){J.O2($.X3,a)},"call$1","Fl",2,0,182,181,[]],
+return y}finally{$.X3=z}},"call$6","l4",12,0,173,168,[],169,[],153,[],117,[],59,[],60,[]],
+Ee:[function(a,b,c,d){return d},"call$4","EU",8,0,174,168,[],169,[],153,[],117,[]],
+cQ:[function(a,b,c,d){return d},"call$4","zi",8,0,175,168,[],169,[],153,[],117,[]],
+VI:[function(a,b,c,d){return d},"call$4","uu",8,0,176,168,[],169,[],153,[],117,[]],
+Tk:[function(a,b,c,d){P.IA(C.NU!==c?c.ce(d):d)},"call$4","G2",8,0,177,168,[],169,[],153,[],117,[]],
+h8:[function(a,b,c,d,e){return P.jL(d,C.NU!==c?c.ce(e):e)},"call$5","KF",10,0,178,168,[],169,[],153,[],166,[],155,[]],
+XB:[function(a,b,c,d){H.qw(d)},"call$4","YM",8,0,179,168,[],169,[],153,[],180,[]],
+CI:[function(a){J.O2($.X3,a)},"call$1","Fl",2,0,181,180,[]],
UA:[function(a,b,c,d,e){var z
$.oK=P.Fl()
z=P.Py(null,null,null,null,null)
-return new P.uo(c,d,z)},"call$5","hn",10,0,183,169,[],170,[],151,[],184,[],185,[]],
+return new P.uo(c,d,z)},"call$5","hn",10,0,182,168,[],169,[],153,[],183,[],184,[]],
Ca:{
"^":"a;kc>,I4<",
$isGe:true},
@@ -13335,10 +12761,10 @@
gY8:function(){return this.Y8},
uR:[function(a){var z=this.Ae
if(typeof z!=="number")return z.i()
-return(z&1)===a},"call$1","gLM",2,0,null,446,[]],
+return(z&1)===a},"call$1","gLM",2,0,null,415,[]],
Ac:[function(){var z=this.Ae
if(typeof z!=="number")return z.w()
-this.Ae=z^1},"call$0","gXI1",0,0,null],
+this.Ae=z^1},"call$0","gUe",0,0,null],
gP4:function(){var z=this.Ae
if(typeof z!=="number")return z.i()
return(z&2)!==0},
@@ -13348,10 +12774,10 @@
gHj:function(){var z=this.Ae
if(typeof z!=="number")return z.i()
return(z&4)!==0},
-uO:[function(){return},"call$0","gp4",0,0,112],
-LP:[function(){return},"call$0","gZ9",0,0,112],
-static:{"^":"FJ,RG,cP"}},
-LO:{
+uO:[function(){},"call$0","gp4",0,0,114],
+LP:[function(){},"call$0","gZ9",0,0,114],
+static:{"^":"FJ,CM,cP"}},
+WVu:{
"^":"a;iE@,SJ@",
gRW:function(){return!1},
gP4:function(){return(this.Gv&2)!==0},
@@ -13366,17 +12792,17 @@
z.siE(y)
y.sSJ(z)
a.sSJ(a)
-a.siE(a)},"call$1","gOo",2,0,null,165,[]],
+a.siE(a)},"call$1","gOo",2,0,null,164,[]],
j0:[function(a){if(a.giE()===a)return
if(a.gP4())a.dK()
else{this.p1(a)
-if((this.Gv&2)===0&&this.iE===this)this.Of()}},"call$1","gOr",2,0,null,165,[]],
+if((this.Gv&2)===0&&this.iE===this)this.Of()}},"call$1","gOr",2,0,null,164,[]],
q7:[function(){if((this.Gv&4)!==0)return new P.lj("Cannot add new events after calling close")
return new P.lj("Cannot add new events while doing an addStream")},"call$0","gVo",0,0,null],
h:[function(a,b){if(this.Gv>=4)throw H.b(this.q7())
-this.Iv(b)},"call$1","ght",2,0,function(){return H.IG(function(a){return{func:"lU",void:true,args:[a]}},this.$receiver,"LO")},239,[]],
+this.Iv(b)},"call$1","ght",2,0,function(){return H.IG(function(a){return{func:"lU",void:true,args:[a]}},this.$receiver,"WVu")},235,[]],
fDe:[function(a,b){if(this.Gv>=4)throw H.b(this.q7())
-this.pb(a,b)},function(a){return this.fDe(a,null)},"JT","call$2","call$1","gXB",2,2,447,77,160,[],161,[]],
+this.pb(a,b)},function(a){return this.fDe(a,null)},"JT","call$2","call$1","gGj",2,2,416,82,159,[],160,[]],
cO:[function(a){var z,y
z=this.Gv
if((z&4)!==0)return this.Ip
@@ -13385,8 +12811,8 @@
y=this.SL()
this.SY()
return y},"call$0","gJK",0,0,null],
-Rg:[function(a,b){this.Iv(b)},"call$1","gHR",2,0,null,239,[]],
-V8:[function(a,b){this.pb(a,b)},"call$2","grd",4,0,null,160,[],161,[]],
+Rg:[function(a,b){this.Iv(b)},"call$1","gHR",2,0,null,235,[]],
+V8:[function(a,b){this.pb(a,b)},"call$2","gEm",4,0,null,159,[],160,[]],
Qj:[function(){var z=this.WX
this.WX=null
this.Gv=this.Gv&4294967287
@@ -13410,92 +12836,67 @@
y.sAe(z&4294967293)
y=w}else y=y.giE()
this.Gv=this.Gv&4294967293
-if(this.iE===this)this.Of()},"call$1","gxd",2,0,null,429,[]],
+if(this.iE===this)this.Of()},"call$1","gxd",2,0,null,397,[]],
Of:[function(){if((this.Gv&4)!==0&&this.Ip.Gv===0)this.Ip.OH(null)
P.ot(this.QC)},"call$0","gVg",0,0,null]},
dz:{
-"^":"LO;nL,QC,Gv,iE,SJ,WX,Ip",
+"^":"WVu;nL,QC,Gv,iE,SJ,WX,Ip",
Iv:[function(a){var z=this.iE
if(z===this)return
if(z.giE()===this){this.Gv=this.Gv|2
this.iE.Rg(0,a)
this.Gv=this.Gv&4294967293
if(this.iE===this)this.Of()
-return}this.nE(new P.tK(this,a))},"call$1","gm9",2,0,null,239,[]],
+return}this.nE(new P.tK(this,a))},"call$1","gm9",2,0,null,235,[]],
pb:[function(a,b){if(this.iE===this)return
-this.nE(new P.OR(this,a,b))},"call$2","gTb",4,0,null,160,[],161,[]],
+this.nE(new P.OR(this,a,b))},"call$2","gTb",4,0,null,159,[],160,[]],
SY:[function(){if(this.iE!==this)this.nE(new P.Bg(this))
else this.Ip.OH(null)},"call$0","gXm",0,0,null]},
tK:{
"^":"Tp;a,b",
-call$1:[function(a){a.Rg(0,this.b)},"call$1",null,2,0,null,165,[],"call"],
+call$1:[function(a){a.Rg(0,this.b)},"call$1",null,2,0,null,164,[],"call"],
$isEH:true,
$signature:function(){return H.IG(function(a){return{func:"DU",args:[[P.KA,a]]}},this.a,"dz")}},
OR:{
"^":"Tp;a,b,c",
-call$1:[function(a){a.V8(this.b,this.c)},"call$1",null,2,0,null,165,[],"call"],
+call$1:[function(a){a.V8(this.b,this.c)},"call$1",null,2,0,null,164,[],"call"],
$isEH:true,
$signature:function(){return H.IG(function(a){return{func:"DU",args:[[P.KA,a]]}},this.a,"dz")}},
Bg:{
"^":"Tp;a",
-call$1:[function(a){a.Qj()},"call$1",null,2,0,null,165,[],"call"],
+call$1:[function(a){a.Qj()},"call$1",null,2,0,null,164,[],"call"],
$isEH:true,
-$signature:function(){return H.IG(function(a){return{func:"Zj",args:[[P.JI,a]]}},this.a,"dz")}},
+$signature:function(){return H.IG(function(a){return{func:"qb",args:[[P.JI,a]]}},this.a,"dz")}},
DL:{
-"^":"LO;nL,QC,Gv,iE,SJ,WX,Ip",
+"^":"WVu;nL,QC,Gv,iE,SJ,WX,Ip",
Iv:[function(a){var z,y
for(z=this.iE;z!==this;z=z.giE()){y=new P.LV(a,null)
y.$builtinTypeInfo=[null]
-z.w6(y)}},"call$1","gm9",2,0,null,239,[]],
+z.w6(y)}},"call$1","gm9",2,0,null,235,[]],
pb:[function(a,b){var z
-for(z=this.iE;z!==this;z=z.giE())z.w6(new P.DS(a,b,null))},"call$2","gTb",4,0,null,160,[],161,[]],
+for(z=this.iE;z!==this;z=z.giE())z.w6(new P.DS(a,b,null))},"call$2","gTb",4,0,null,159,[],160,[]],
SY:[function(){var z=this.iE
if(z!==this)for(;z!==this;z=z.giE())z.w6(C.Wj)
else this.Ip.OH(null)},"call$0","gXm",0,0,null]},
b8:{
"^":"a;",
$isb8:true},
-j7:{
-"^":"Tp:346;a,b",
-call$2:[function(a,b){var z,y,x
-z=this.a
-y=z.b
-z.b=null
-x=z.c-1
-z.c=x
-if(y!=null)if(x===0||this.b)z.a.w0(a,b)
-else{z.d=a
-z.e=b}else if(x===0&&!this.b)z.a.w0(z.d,z.e)},"call$2",null,4,0,null,448,[],449,[],"call"],
-$isEH:true},
-ff:{
-"^":"Tp:450;a,c,d",
-call$1:[function(a){var z,y,x,w
-z=this.a
-y=z.c-1
-z.c=y
-x=z.b
-if(x!=null){w=this.d
-if(w<0||w>=x.length)return H.e(x,w)
-x[w]=a
-if(y===0){z=z.a.MM
-if(z.Gv!==0)H.vh(new P.lj("Future already completed"))
-z.OH(x)}}else if(y===0&&!this.c)z.a.w0(z.d,z.e)},"call$1",null,2,0,null,23,[],"call"],
-$isEH:true},
Ia:{
"^":"a;"},
Zf:{
"^":"Ia;MM",
oo:[function(a,b){var z=this.MM
if(z.Gv!==0)throw H.b(P.w("Future already completed"))
-z.OH(b)},function(a){return this.oo(a,null)},"tZ","call$1","call$0","gv6",0,2,451,77,23,[]],
+z.OH(b)},function(a){return this.oo(a,null)},"tZ","call$1","call$0","gv6",0,2,417,82,28,[]],
w0:[function(a,b){var z
if(a==null)throw H.b(new P.AT("Error must not be null"))
z=this.MM
if(z.Gv!==0)throw H.b(new P.lj("Future already completed"))
-z.CG(a,b)},function(a){return this.w0(a,null)},"pm","call$2","call$1","gYJ",2,2,447,77,160,[],161,[]]},
+z.CG(a,b)},function(a){return this.w0(a,null)},"pm","call$2","call$1","gYJ",2,2,416,82,159,[],160,[]]},
vs:{
"^":"a;Gv,Lj<,jk,BQ@,OY,As,qV,o4",
gcg:function(){return this.Gv>=4},
+gWj:function(){return this.Gv===4},
gNm:function(){return this.Gv===8},
swG:function(a){if(a)this.Gv=2
else this.Gv=0},
@@ -13507,70 +12908,72 @@
z=$.X3
y=H.VM(new P.vs(0,z,null,null,z.cR(a),null,P.VH(b,$.X3),null),[null])
this.au(y)
-return y},function(a){return this.Rx(a,null)},"ml","call$2$onError",null,"gVy",2,3,null,77,115,[],164,[]],
+return y},function(a){return this.Rx(a,null)},"ml","call$2$onError",null,"grf",2,3,null,82,117,[],163,[]],
yd:[function(a,b){var z,y,x
z=$.X3
y=P.VH(a,z)
x=H.VM(new P.vs(0,z,null,null,null,$.X3.cR(b),y,null),[null])
this.au(x)
-return x},function(a){return this.yd(a,null)},"OA","call$2$test",null,"gue",2,3,null,77,164,[],430,[]],
+return x},function(a){return this.yd(a,null)},"OA","call$2$test",null,"gue",2,3,null,82,163,[],398,[]],
YM:[function(a){var z,y
z=$.X3
y=new P.vs(0,z,null,null,null,null,null,z.Al(a))
y.$builtinTypeInfo=this.$builtinTypeInfo
this.au(y)
-return y},"call$1","gE1",2,0,null,429,[]],
+return y},"call$1","gBv",2,0,null,397,[]],
gDL:function(){return this.jk},
gcG:function(){return this.jk},
Am:[function(a){this.Gv=4
-this.jk=a},"call$1","gHa",2,0,null,23,[]],
+this.jk=a},"call$1","goU",2,0,null,28,[]],
E6:[function(a,b){this.Gv=8
-this.jk=new P.Ca(a,b)},"call$2","gM6",4,0,null,160,[],161,[]],
+this.jk=new P.Ca(a,b)},"call$2","gM6",4,0,null,159,[],160,[]],
au:[function(a){if(this.Gv>=4)this.Lj.wr(new P.da(this,a))
else{a.sBQ(this.jk)
-this.jk=a}},"call$1","gXA",2,0,null,297,[]],
+this.jk=a}},"call$1","gXA",2,0,null,295,[]],
L3:[function(){var z,y,x
z=this.jk
this.jk=null
for(y=null;z!=null;y=z,z=x){x=z.gBQ()
-z.sBQ(y)}return y},"call$0","gDH",0,0,null],
+z.sBQ(y)}return y},"call$0","gAw",0,0,null],
rX:[function(a){var z,y
z=J.x(a)
-if(typeof a==="object"&&a!==null&&!!z.$isb8){P.GZ(a,this)
-return}y=this.L3()
+if(typeof a==="object"&&a!==null&&!!z.$isb8)if(typeof a==="object"&&a!==null&&!!z.$isvs)P.A9(a,this)
+else P.k3(a,this)
+else{y=this.L3()
this.Am(a)
-P.HZ(this,y)},"call$1","gJJ",2,0,null,23,[]],
+P.HZ(this,y)}},"call$1","gBO",2,0,null,28,[]],
+R8:[function(a){var z=this.L3()
+this.Am(a)
+P.HZ(this,z)},"call$1","gPN",2,0,null,28,[]],
K5:[function(a,b){var z=this.L3()
this.E6(a,b)
-P.HZ(this,z)},function(a){return this.K5(a,null)},"Lp","call$2","call$1","gbY",2,2,159,77,160,[],161,[]],
-OH:[function(a){var z,y
-z=J.x(a)
-y=typeof a==="object"&&a!==null&&!!z.$isb8
-if(y);if(y)z=typeof a!=="object"||a===null||!z.$isvs||a.Gv<4
-else z=!1
-if(z){this.rX(a)
-return}if(this.Gv!==0)H.vh(P.w("Future already completed"))
+P.HZ(this,z)},function(a){return this.K5(a,null)},"Lp","call$2","call$1","gbY",2,2,158,82,159,[],160,[]],
+OH:[function(a){var z
+if(a==null);else{z=J.x(a)
+if(typeof a==="object"&&a!==null&&!!z.$isb8){if(typeof a==="object"&&a!==null&&!!z.$isvs){z=a.Gv
+if(z>=4&&z===8){if(this.Gv!==0)H.vh(P.w("Future already completed"))
this.Gv=1
-this.Lj.wr(new P.rH(this,a))},"call$1","gZV",2,0,null,23,[]],
+this.Lj.wr(new P.rH(this,a))}else P.A9(a,this)}else P.k3(a,this)
+return}}if(this.Gv!==0)H.vh(P.w("Future already completed"))
+this.Gv=1
+this.Lj.wr(new P.cX(this,a))},"call$1","gZV",2,0,null,28,[]],
CG:[function(a,b){if(this.Gv!==0)H.vh(new P.lj("Future already completed"))
this.Gv=1
-this.Lj.wr(new P.ZL(this,a,b))},"call$2","gFE",4,0,null,160,[],161,[]],
+this.Lj.wr(new P.ZL(this,a,b))},"call$2","glC",4,0,null,159,[],160,[]],
L7:function(a,b){this.OH(a)},
$isvs:true,
$isb8:true,
static:{"^":"ewM,JE,C3n,oN1,NK",Dt:function(a){return H.VM(new P.vs(0,$.X3,null,null,null,null,null,null),[a])},Ab:function(a,b){var z=H.VM(new P.vs(0,$.X3,null,null,null,null,null,null),[b])
z.L7(a,b)
-return z},GZ:[function(a,b){var z
-b.swG(!0)
-z=J.x(a)
-if(typeof a==="object"&&a!==null&&!!z.$isvs)if(a.Gv>=4)P.HZ(a,b)
-else a.au(b)
-else a.Rx(new P.xw(b),new P.dm(b))},"call$2","mX",4,0,null,27,[],74,[]],yE:[function(a,b){var z
+return z},k3:[function(a,b){b.swG(!0)
+a.Rx(new P.pV(b),new P.U7(b))},"call$2","KP",4,0,null,32,[],79,[]],A9:[function(a,b){b.swG(!0)
+if(a.Gv>=4)P.HZ(a,b)
+else a.au(b)},"call$2","dd",4,0,null,32,[],79,[]],yE:[function(a,b){var z
do{z=b.gBQ()
b.sBQ(null)
P.HZ(a,b)
if(z!=null){b=z
-continue}else break}while(!0)},"call$2","cN",4,0,null,27,[],155,[]],HZ:[function(a,b){var z,y,x,w,v,u,t,s,r,q,p
+continue}else break}while(!0)},"call$2","cN",4,0,null,32,[],154,[]],HZ:[function(a,b){var z,y,x,w,v,u,t,s,r,q,p
z={}
z.e=a
for(y=a;!0;){x={}
@@ -13580,62 +12983,66 @@
z.e.gLj().hk(J.w8(v),v.gI4())
return}if(b==null)return
if(b.gBQ()!=null){P.yE(z.e,b)
-return}u=b.gLj()
-if(w&&!z.e.gLj().fC(u)){v=z.e.gcG()
-z.e.gLj().hk(J.w8(v),v.gI4())
-return}t=$.X3
-if(t==null?u!=null:t!==u)$.X3=u
-else t=null
-x.b=null
-x.c=null
+return}x.b=!0
+u=z.e.gWj()?z.e.gDL():null
+x.c=u
x.d=!1
-if(!w)if(b.gO1()!=null)x.b=new P.rq(x,z,b,u).call$0()
-else{x.c=z.e.gDL()
-x.b=!0}else new P.RW(z,x,b,u).call$0()
-if(b.gIa()!=null)new P.RT(z,x,w,b,u).call$0()
-if(t!=null)$.X3=t
+y=!w
+if(!y||b.gO1()!=null||b.gIa()!=null){t=b.gLj()
+if(w&&!z.e.gLj().fC(t)){v=z.e.gcG()
+z.e.gLj().hk(J.w8(v),v.gI4())
+return}s=$.X3
+if(s==null?t!=null:s!==t)$.X3=t
+else s=null
+if(y){if(b.gO1()!=null)x.b=new P.rq(x,b,u,t).call$0()}else new P.RW(z,x,b,t).call$0()
+if(b.gIa()!=null)new P.RT(z,x,w,b,t).call$0()
+if(s!=null)$.X3=s
if(x.d)return
-y=x.b===!0
-if(y){s=x.c
-r=J.x(s)
-r=typeof s==="object"&&s!==null&&!!r.$isb8
-s=r}else s=!1
-if(s){q=x.c
+if(x.b===!0){y=x.c
+if(u==null?y!=null:u!==y){r=J.x(y)
+r=typeof y==="object"&&y!==null&&!!r.$isb8
+y=r}else y=!1}else y=!1
+if(y){q=x.c
y=J.x(q)
-if(typeof q==="object"&&q!==null&&!!y.$isvs&&q.Gv>=4){b.swG(!0)
+if(typeof q==="object"&&q!==null&&!!y.$isvs)if(q.Gv>=4){b.swG(!0)
z.e=q
y=q
-continue}P.GZ(q,b)
-return}if(y){p=b.L3()
+continue}else P.A9(q,b)
+else P.k3(q,b)
+return}}if(x.b===!0){p=b.L3()
b.Am(x.c)}else{p=b.L3()
v=x.c
b.E6(J.w8(v),v.gI4())}z.e=b
y=b
-b=p}},"call$2","DU",4,0,null,27,[],155,[]]}},
+b=p}},"call$2","XX",4,0,null,32,[],154,[]]}},
da:{
-"^":"Tp:113;a,b",
+"^":"Tp:115;a,b",
call$0:[function(){P.HZ(this.a,this.b)},"call$0",null,0,0,null,"call"],
$isEH:true},
-xw:{
-"^":"Tp:107;a",
-call$1:[function(a){this.a.rX(a)},"call$1",null,2,0,null,23,[],"call"],
+pV:{
+"^":"Tp:112;a",
+call$1:[function(a){this.a.R8(a)},"call$1",null,2,0,null,28,[],"call"],
$isEH:true},
-dm:{
-"^":"Tp:452;b",
-call$2:[function(a,b){this.b.K5(a,b)},function(a){return this.call$2(a,null)},"call$1","call$2",null,null,2,2,null,77,160,[],161,[],"call"],
+U7:{
+"^":"Tp:418;b",
+call$2:[function(a,b){this.b.K5(a,b)},function(a){return this.call$2(a,null)},"call$1","call$2",null,null,2,2,null,82,159,[],160,[],"call"],
$isEH:true},
rH:{
-"^":"Tp:113;a,b",
-call$0:[function(){this.a.rX(this.b)},"call$0",null,0,0,null,"call"],
+"^":"Tp:115;a,b",
+call$0:[function(){P.A9(this.b,this.a)},"call$0",null,0,0,null,"call"],
+$isEH:true},
+cX:{
+"^":"Tp:115;c,d",
+call$0:[function(){this.c.R8(this.d)},"call$0",null,0,0,null,"call"],
$isEH:true},
ZL:{
-"^":"Tp:113;a,b,c",
+"^":"Tp:115;a,b,c",
call$0:[function(){this.a.K5(this.b,this.c)},"call$0",null,0,0,null,"call"],
$isEH:true},
rq:{
-"^":"Tp:380;b,c,d,e",
+"^":"Tp:390;b,d,e,f",
call$0:[function(){var z,y,x,w
-try{this.b.c=this.e.FI(this.d.gO1(),this.c.e.gDL())
+try{this.b.c=this.f.FI(this.d.gO1(),this.e)
return!0}catch(x){w=H.Ru(x)
z=w
y=new H.XO(x,null)
@@ -13643,13 +13050,13 @@
return!1}},"call$0",null,0,0,null,"call"],
$isEH:true},
RW:{
-"^":"Tp:112;c,b,f,UI",
+"^":"Tp:114;c,b,UI,bK",
call$0:[function(){var z,y,x,w,v,u,t,s,r,q,p,o,n,m
z=this.c.e.gcG()
-r=this.f
+r=this.UI
y=r.gyK()
x=!0
-if(y!=null)try{x=this.UI.FI(y,J.w8(z))}catch(q){r=H.Ru(q)
+if(y!=null)try{x=this.bK.FI(y,J.w8(z))}catch(q){r=H.Ru(q)
w=r
v=new H.XO(q,null)
r=J.w8(z)
@@ -13662,7 +13069,7 @@
if(x===!0&&u!=null){try{r=u
p=H.N7()
p=H.KT(p,[p,p]).BD(r)
-n=this.UI
+n=this.bK
m=this.b
if(p)m.c=n.mg(u,J.w8(z),z.gI4())
else m.c=n.FI(u,J.w8(z))}catch(q){r=H.Ru(q)
@@ -13679,14 +13086,14 @@
r.b=!1}},"call$0",null,0,0,null,"call"],
$isEH:true},
RT:{
-"^":"Tp:112;c,b,bK,Gq,Rm",
+"^":"Tp:114;c,b,Gq,Rm,w3",
call$0:[function(){var z,y,x,w,v,u
z={}
z.a=null
-try{z.a=this.Rm.Gr(this.Gq.gIa())}catch(w){v=H.Ru(w)
+try{z.a=this.w3.Gr(this.Rm.gIa())}catch(w){v=H.Ru(w)
y=v
x=new H.XO(w,null)
-if(this.bK){v=J.w8(this.c.e.gcG())
+if(this.Gq){v=J.w8(this.c.e.gcG())
u=y
u=v==null?u==null:v===u
v=u}else v=!1
@@ -13695,54 +13102,54 @@
else u.c=new P.Ca(y,x)
u.b=!1}v=z.a
u=J.x(v)
-if(typeof v==="object"&&v!==null&&!!u.$isb8){v=this.Gq
+if(typeof v==="object"&&v!==null&&!!u.$isb8){v=this.Rm
v.swG(!0)
this.b.d=!0
z.a.Rx(new P.jZ(this.c,v),new P.FZ(z,v))}},"call$0",null,0,0,null,"call"],
$isEH:true},
jZ:{
-"^":"Tp:107;c,w3",
-call$1:[function(a){P.HZ(this.c.e,this.w3)},"call$1",null,2,0,null,453,[],"call"],
+"^":"Tp:112;c,HZ",
+call$1:[function(a){P.HZ(this.c.e,this.HZ)},"call$1",null,2,0,null,419,[],"call"],
$isEH:true},
FZ:{
-"^":"Tp:452;a,HZ",
+"^":"Tp:418;a,mG",
call$2:[function(a,b){var z,y,x,w
z=this.a
y=z.a
x=J.x(y)
if(typeof y!=="object"||y===null||!x.$isvs){w=P.Dt(null)
z.a=w
-w.E6(a,b)}P.HZ(z.a,this.HZ)},function(a){return this.call$2(a,null)},"call$1","call$2",null,null,2,2,null,77,160,[],161,[],"call"],
+w.E6(a,b)}P.HZ(z.a,this.mG)},function(a){return this.call$2(a,null)},"call$1","call$2",null,null,2,2,null,82,159,[],160,[],"call"],
$isEH:true},
OM:{
"^":"a;FR>,aw@",
Ki:function(a){return this.FR.call$0()}},
qh:{
"^":"a;",
-ez:[function(a,b){return H.VM(new P.t3(b,this),[H.ip(this,"qh",0),null])},"call$1","gIr",2,0,null,454,[]],
+ez:[function(a,b){return H.VM(new P.t3(b,this),[H.ip(this,"qh",0),null])},"call$1","gIr",2,0,null,420,[]],
tg:[function(a,b){var z,y
z={}
y=P.Dt(J.kn)
z.a=null
-z.a=this.KR(new P.tG(z,this,b,y),!0,new P.zn(y),y.gbY())
-return y},"call$1","gdj",2,0,null,102,[]],
+z.a=this.KR(new P.YJ(z,this,b,y),!0,new P.DO(y),y.gbY())
+return y},"call$1","gdj",2,0,null,107,[]],
aN:[function(a,b){var z,y
z={}
y=P.Dt(null)
z.a=null
z.a=this.KR(new P.lz(z,this,b,y),!0,new P.M4(y),y.gbY())
-return y},"call$1","gjw",2,0,null,429,[]],
+return y},"call$1","gjw",2,0,null,397,[]],
Vr:[function(a,b){var z,y
z={}
y=P.Dt(J.kn)
z.a=null
z.a=this.KR(new P.Jp(z,this,b,y),!0,new P.eN(y),y.gbY())
-return y},"call$1","gG2",2,0,null,430,[]],
+return y},"call$1","gG2",2,0,null,398,[]],
gB:function(a){var z,y
z={}
y=P.Dt(J.im)
z.a=0
-this.KR(new P.PI(z),!0,new P.uO(z,y),y.gbY())
+this.KR(new P.B5(z),!0,new P.PI(z,y),y.gbY())
return y},
gl0:function(a){var z,y
z={}
@@ -13755,9 +13162,6 @@
y=P.Dt([J.Q,H.ip(this,"qh",0)])
this.KR(new P.VV(this,z),!0,new P.Dy(z,y),y.gbY())
return y},"call$0","gRV",0,0,null],
-eR:[function(a,b){var z=H.VM(new P.dq(b,this),[null])
-z.U6(this,b,null)
-return z},"call$1","gZo",2,0,null,127,[]],
gtH:function(a){var z,y
z={}
y=P.Dt(H.ip(this,"qh",0))
@@ -13777,44 +13181,44 @@
if(typeof b!=="number"||Math.floor(b)!==b||J.u6(b,0))throw H.b(new P.AT(z.a))
y=P.Dt(H.ip(this,"qh",0))
z.b=null
-z.b=this.KR(new P.ii(z,this,y),!0,new P.ib(z,y),y.gbY())
-return y},"call$1","goY",2,0,null,47,[]],
+z.b=this.KR(new P.j5(z,this,y),!0,new P.ii(z,y),y.gbY())
+return y},"call$1","goY",2,0,null,52,[]],
$isqh:true},
-tG:{
+YJ:{
"^":"Tp;a,b,c,d",
call$1:[function(a){var z,y
z=this.a
y=this.d
-P.FE(new P.jv(this.c,a),new P.LB(z,y),P.TB(z.a,y))},"call$1",null,2,0,null,129,[],"call"],
+P.FE(new P.jv(this.c,a),new P.LB(z,y),P.TB(z.a,y))},"call$1",null,2,0,null,132,[],"call"],
$isEH:true,
$signature:function(){return H.IG(function(a){return{func:"Lf",args:[a]}},this.b,"qh")}},
jv:{
-"^":"Tp:113;e,f",
+"^":"Tp:115;e,f",
call$0:[function(){return J.de(this.f,this.e)},"call$0",null,0,0,null,"call"],
$isEH:true},
LB:{
-"^":"Tp:381;a,UI",
-call$1:[function(a){if(a===!0)P.Bb(this.a.a,this.UI,!0)},"call$1",null,2,0,null,455,[],"call"],
+"^":"Tp:391;a,UI",
+call$1:[function(a){if(a===!0)P.Bb(this.a.a,this.UI,!0)},"call$1",null,2,0,null,421,[],"call"],
$isEH:true},
-zn:{
-"^":"Tp:113;bK",
+DO:{
+"^":"Tp:115;bK",
call$0:[function(){this.bK.rX(!1)},"call$0",null,0,0,null,"call"],
$isEH:true},
lz:{
"^":"Tp;a,b,c,d",
-call$1:[function(a){P.FE(new P.Rl(this.c,a),new P.Jb(),P.TB(this.a.a,this.d))},"call$1",null,2,0,null,129,[],"call"],
+call$1:[function(a){P.FE(new P.Rl(this.c,a),new P.Jb(),P.TB(this.a.a,this.d))},"call$1",null,2,0,null,132,[],"call"],
$isEH:true,
$signature:function(){return H.IG(function(a){return{func:"Lf",args:[a]}},this.b,"qh")}},
Rl:{
-"^":"Tp:113;e,f",
+"^":"Tp:115;e,f",
call$0:[function(){return this.e.call$1(this.f)},"call$0",null,0,0,null,"call"],
$isEH:true},
Jb:{
-"^":"Tp:107;",
-call$1:[function(a){},"call$1",null,2,0,null,108,[],"call"],
+"^":"Tp:112;",
+call$1:[function(a){},"call$1",null,2,0,null,113,[],"call"],
$isEH:true},
M4:{
-"^":"Tp:113;UI",
+"^":"Tp:115;UI",
call$0:[function(){this.UI.rX(null)},"call$0",null,0,0,null,"call"],
$isEH:true},
Jp:{
@@ -13822,78 +13226,78 @@
call$1:[function(a){var z,y
z=this.a
y=this.d
-P.FE(new P.h7(this.c,a),new P.pr(z,y),P.TB(z.a,y))},"call$1",null,2,0,null,129,[],"call"],
+P.FE(new P.h7(this.c,a),new P.pr(z,y),P.TB(z.a,y))},"call$1",null,2,0,null,132,[],"call"],
$isEH:true,
$signature:function(){return H.IG(function(a){return{func:"Lf",args:[a]}},this.b,"qh")}},
h7:{
-"^":"Tp:113;e,f",
+"^":"Tp:115;e,f",
call$0:[function(){return this.e.call$1(this.f)},"call$0",null,0,0,null,"call"],
$isEH:true},
pr:{
-"^":"Tp:381;a,UI",
-call$1:[function(a){if(a===!0)P.Bb(this.a.a,this.UI,!0)},"call$1",null,2,0,null,455,[],"call"],
+"^":"Tp:391;a,UI",
+call$1:[function(a){if(a===!0)P.Bb(this.a.a,this.UI,!0)},"call$1",null,2,0,null,421,[],"call"],
$isEH:true},
eN:{
-"^":"Tp:113;bK",
+"^":"Tp:115;bK",
call$0:[function(){this.bK.rX(!1)},"call$0",null,0,0,null,"call"],
$isEH:true},
-PI:{
-"^":"Tp:107;a",
+B5:{
+"^":"Tp:112;a",
call$1:[function(a){var z=this.a
-z.a=z.a+1},"call$1",null,2,0,null,108,[],"call"],
+z.a=z.a+1},"call$1",null,2,0,null,113,[],"call"],
$isEH:true},
-uO:{
-"^":"Tp:113;a,b",
+PI:{
+"^":"Tp:115;a,b",
call$0:[function(){this.b.rX(this.a.a)},"call$0",null,0,0,null,"call"],
$isEH:true},
j4:{
-"^":"Tp:107;a,b",
-call$1:[function(a){P.Bb(this.a.a,this.b,!1)},"call$1",null,2,0,null,108,[],"call"],
+"^":"Tp:112;a,b",
+call$1:[function(a){P.Bb(this.a.a,this.b,!1)},"call$1",null,2,0,null,113,[],"call"],
$isEH:true},
i9:{
-"^":"Tp:113;c",
+"^":"Tp:115;c",
call$0:[function(){this.c.rX(!0)},"call$0",null,0,0,null,"call"],
$isEH:true},
VV:{
"^":"Tp;a,b",
-call$1:[function(a){this.b.push(a)},"call$1",null,2,0,null,239,[],"call"],
+call$1:[function(a){this.b.push(a)},"call$1",null,2,0,null,235,[],"call"],
$isEH:true,
$signature:function(){return H.IG(function(a){return{func:"Lf",args:[a]}},this.a,"qh")}},
Dy:{
-"^":"Tp:113;c,d",
+"^":"Tp:115;c,d",
call$0:[function(){this.d.rX(this.c)},"call$0",null,0,0,null,"call"],
$isEH:true},
lU:{
"^":"Tp;a,b,c",
-call$1:[function(a){P.Bb(this.a.a,this.c,a)},"call$1",null,2,0,null,23,[],"call"],
+call$1:[function(a){P.Bb(this.a.a,this.c,a)},"call$1",null,2,0,null,28,[],"call"],
$isEH:true,
$signature:function(){return H.IG(function(a){return{func:"Lf",args:[a]}},this.b,"qh")}},
OC:{
-"^":"Tp:113;d",
+"^":"Tp:115;d",
call$0:[function(){this.d.Lp(new P.lj("No elements"))},"call$0",null,0,0,null,"call"],
$isEH:true},
UH:{
"^":"Tp;a,b",
call$1:[function(a){var z=this.a
z.b=!0
-z.a=a},"call$1",null,2,0,null,23,[],"call"],
+z.a=a},"call$1",null,2,0,null,28,[],"call"],
$isEH:true,
$signature:function(){return H.IG(function(a){return{func:"Lf",args:[a]}},this.b,"qh")}},
Z5:{
-"^":"Tp:113;a,c",
+"^":"Tp:115;a,c",
call$0:[function(){var z=this.a
if(z.b){this.c.rX(z.a)
return}this.c.Lp(new P.lj("No elements"))},"call$0",null,0,0,null,"call"],
$isEH:true},
-ii:{
+j5:{
"^":"Tp;a,b,c",
call$1:[function(a){var z=this.a
if(J.de(z.a,0)){P.Bb(z.b,this.c,a)
-return}z.a=J.xH(z.a,1)},"call$1",null,2,0,null,23,[],"call"],
+return}z.a=J.xH(z.a,1)},"call$1",null,2,0,null,28,[],"call"],
$isEH:true,
$signature:function(){return H.IG(function(a){return{func:"Lf",args:[a]}},this.b,"qh")}},
-ib:{
-"^":"Tp:113;a,d",
+ii:{
+"^":"Tp:115;a,d",
call$0:[function(){this.d.Lp(new P.bJ("value "+H.d(this.a.a)))},"call$0",null,0,0,null,"call"],
$isEH:true},
MO:{
@@ -13916,36 +13320,36 @@
z.SJ=w
w.Ae=z.Gv&1
if(z.iE===w)P.ot(z.nL)
-return w},"call$1","gGE",2,0,null,456,[]],
+return w},"call$1","gmn",2,0,null,422,[]],
giO:function(a){return(H.eQ(this.Y8)^892482866)>>>0},
n:[function(a,b){var z
if(b==null)return!1
if(this===b)return!0
z=J.x(b)
if(typeof b!=="object"||b===null||!z.$isO9)return!1
-return b.Y8===this.Y8},"call$1","gUJ",2,0,null,104,[]],
+return b.Y8===this.Y8},"call$1","gUJ",2,0,null,109,[]],
$isO9:true},
yU:{
"^":"KA;Y8<",
tA:[function(){return this.gY8().j0(this)},"call$0","gQC",0,0,null],
-uO:[function(){this.gY8()},"call$0","gp4",0,0,112],
-LP:[function(){this.gY8()},"call$0","gZ9",0,0,112]},
+uO:[function(){this.gY8()},"call$0","gp4",0,0,114],
+LP:[function(){this.gY8()},"call$0","gZ9",0,0,114]},
nP:{
"^":"a;"},
KA:{
"^":"a;dB,o7<,Bd,Lj<,Gv,lz,Ri",
-fe:[function(a){this.dB=this.Lj.cR(a)},"call$1","gqd",2,0,null,457,[]],
+fe:[function(a){this.dB=this.Lj.cR(a)},"call$1","gqd",2,0,null,423,[]],
fm:[function(a,b){if(b==null)b=P.AY()
-this.o7=P.VH(b,this.Lj)},"call$1","geO",2,0,null,29,[]],
+this.o7=P.VH(b,this.Lj)},"call$1","geO",2,0,null,34,[]],
y5:[function(a){if(a==null)a=P.v3()
-this.Bd=this.Lj.Al(a)},"call$1","gNS",2,0,null,458,[]],
-nB:[function(a,b){var z,y,x
+this.Bd=this.Lj.Al(a)},"call$1","gNS",2,0,null,424,[]],
+Fv:[function(a,b){var z,y,x
z=this.Gv
if((z&8)!==0)return
y=(z+128|4)>>>0
this.Gv=y
if(z<128&&this.Ri!=null){x=this.Ri
-if(x.Gv===1)x.Gv=3}if((z&4)===0&&(y&32)===0)this.J7(this.gp4())},function(a){return this.nB(a,null)},"yy","call$1",null,"gAK",0,2,null,77,459,[]],
+if(x.Gv===1)x.Gv=3}if((z&4)===0&&(y&32)===0)this.J7(this.gp4())},function(a){return this.Fv(a,null)},"yy","call$1",null,"gAK",0,2,null,82,425,[]],
QE:[function(){var z=this.Gv
if((z&8)!==0)return
if(z>=128){z-=128
@@ -13969,19 +13373,19 @@
Rg:[function(a,b){var z=this.Gv
if((z&8)!==0)return
if(z<32)this.Iv(b)
-else this.w6(H.VM(new P.LV(b,null),[null]))},"call$1","gHR",2,0,null,239,[]],
+else this.w6(H.VM(new P.LV(b,null),[null]))},"call$1","gHR",2,0,null,235,[]],
V8:[function(a,b){var z=this.Gv
if((z&8)!==0)return
if(z<32)this.pb(a,b)
-else this.w6(new P.DS(a,b,null))},"call$2","grd",4,0,null,160,[],161,[]],
+else this.w6(new P.DS(a,b,null))},"call$2","gEm",4,0,null,159,[],160,[]],
Qj:[function(){var z=this.Gv
if((z&8)!==0)return
z=(z|2)>>>0
this.Gv=z
if(z<32)this.SY()
else this.w6(C.Wj)},"call$0","gS2",0,0,null],
-uO:[function(){},"call$0","gp4",0,0,112],
-LP:[function(){},"call$0","gZ9",0,0,112],
+uO:[function(){},"call$0","gp4",0,0,114],
+LP:[function(){},"call$0","gZ9",0,0,114],
tA:[function(){},"call$0","gQC",0,0,null],
w6:[function(a){var z,y
z=this.Ri
@@ -13990,19 +13394,19 @@
y=this.Gv
if((y&64)===0){y=(y|64)>>>0
this.Gv=y
-if(y<128)this.Ri.t2(this)}},"call$1","gnX",2,0,null,384,[]],
+if(y<128)this.Ri.t2(this)}},"call$1","gnX",2,0,null,368,[]],
Iv:[function(a){var z=this.Gv
this.Gv=(z|32)>>>0
this.Lj.m1(this.dB,a)
this.Gv=(this.Gv&4294967263)>>>0
-this.Kl((z&4)!==0)},"call$1","gm9",2,0,null,239,[]],
+this.Kl((z&4)!==0)},"call$1","gm9",2,0,null,235,[]],
pb:[function(a,b){var z,y
z=this.Gv
y=new P.Vo(this,a,b)
if((z&1)!==0){this.Gv=(z|16)>>>0
this.Ek()
y.call$0()}else{y.call$0()
-this.Kl((z&4)!==0)}},"call$2","gTb",4,0,null,160,[],161,[]],
+this.Kl((z&4)!==0)}},"call$2","gTb",4,0,null,159,[],160,[]],
SY:[function(){this.Ek()
this.Gv=(this.Gv|16)>>>0
new P.qB(this).call$0()},"call$0","gXm",0,0,null],
@@ -14010,7 +13414,7 @@
this.Gv=(z|32)>>>0
a.call$0()
this.Gv=(this.Gv&4294967263)>>>0
-this.Kl((z&4)!==0)},"call$1","gc2",2,0,null,156,[]],
+this.Kl((z&4)!==0)},"call$1","gEq",2,0,null,155,[]],
Kl:[function(a){var z,y,x
z=this.Gv
if((z&64)!==0&&this.Ri.N6==null){z=(z&4294967231)>>>0
@@ -14026,11 +13430,11 @@
if(x)this.uO()
else this.LP()
z=(this.Gv&4294967263)>>>0
-this.Gv=z}if((z&64)!==0&&z<128)this.Ri.t2(this)},"call$1","ghE",2,0,null,460,[]],
+this.Gv=z}if((z&64)!==0&&z<128)this.Ri.t2(this)},"call$1","ghE",2,0,null,426,[]],
$isMO:true,
-static:{"^":"ry,bG,Q9,Ir,Il,X8,HX,GC,f9"}},
+static:{"^":"ry,bG,Q9,Ir,Kt,Dr,HX,GC,f9"}},
Vo:{
-"^":"Tp:112;a,b,c",
+"^":"Tp:114;a,b,c",
call$0:[function(){var z,y,x,w,v
z=this.a
y=z.Gv
@@ -14046,7 +13450,7 @@
else y.m1(x,v)}z.Gv=(z.Gv&4294967263)>>>0},"call$0",null,0,0,null,"call"],
$isEH:true},
qB:{
-"^":"Tp:112;a",
+"^":"Tp:114;a",
call$0:[function(){var z,y
z=this.a
y=z.Gv
@@ -14061,25 +13465,25 @@
z.fe(a)
z.fm(0,d)
z.y5(c)
-return z},function(a){return this.KR(a,null,null,null)},"yI",function(a,b,c){return this.KR(a,null,b,c)},"zC","call$4$cancelOnError$onDone$onError",null,null,"gp8",2,7,null,77,77,77,461,[],456,[],462,[],164,[]],
+return z},function(a){return this.KR(a,null,null,null)},"yI",function(a,b,c){return this.KR(a,null,b,c)},"zC","call$4$cancelOnError$onDone$onError",null,null,"gp8",2,7,null,82,82,82,427,[],163,[],428,[],422,[]],
w4:[function(a){var z,y
z=$.X3
y=a?1:0
y=new P.KA(null,null,null,z,y,null,null)
y.$builtinTypeInfo=this.$builtinTypeInfo
-return y},"call$1","gGE",2,0,null,456,[]]},
-ti:{
+return y},"call$1","gmn",2,0,null,422,[]]},
+fIm:{
"^":"a;aw@"},
LV:{
-"^":"ti;P>,aw",
+"^":"fIm;P>,aw",
r6:function(a,b){return this.P.call$1(b)},
-dP:[function(a){a.Iv(this.P)},"call$1","gqp",2,0,null,463,[]]},
+dP:[function(a){a.Iv(this.P)},"call$1","gqp",2,0,null,429,[]]},
DS:{
-"^":"ti;kc>,I4<,aw",
-dP:[function(a){a.pb(this.kc,this.I4)},"call$1","gqp",2,0,null,463,[]]},
+"^":"fIm;kc>,I4<,aw",
+dP:[function(a){a.pb(this.kc,this.I4)},"call$1","gqp",2,0,null,429,[]]},
JF:{
"^":"a;",
-dP:[function(a){a.SY()},"call$1","gqp",2,0,null,463,[]],
+dP:[function(a){a.SY()},"call$1","gqp",2,0,null,429,[]],
gaw:function(){return},
saw:function(a){throw H.b(new P.lj("No events after a done."))}},
ht:{
@@ -14088,9 +13492,9 @@
if(z===1)return
if(z>=1){this.Gv=1
return}P.rb(new P.CR(this,a))
-this.Gv=1},"call$1","gQu",2,0,null,463,[]]},
+this.Gv=1},"call$1","gQu",2,0,null,429,[]]},
CR:{
-"^":"Tp:113;a,b",
+"^":"Tp:115;a,b",
call$0:[function(){var z,y
z=this.a
y=z.Gv
@@ -14104,26 +13508,26 @@
h:[function(a,b){var z=this.N6
if(z==null){this.N6=b
this.zR=b}else{z.saw(b)
-this.N6=b}},"call$1","ght",2,0,null,384,[]],
+this.N6=b}},"call$1","ght",2,0,null,368,[]],
TO:[function(a){var z,y
z=this.zR
y=z.gaw()
this.zR=y
if(y==null)this.N6=null
-z.dP(a)},"call$1","gKt",2,0,null,463,[]],
+z.dP(a)},"call$1","gTn",2,0,null,429,[]],
V1:[function(a){if(this.Gv===1)this.Gv=3
this.N6=null
-this.zR=null},"call$0","gyP",0,0,null]},
+this.zR=null},"call$0","gRa",0,0,null]},
v1y:{
-"^":"Tp:113;a,b,c",
+"^":"Tp:115;a,b,c",
call$0:[function(){return this.a.K5(this.b,this.c)},"call$0",null,0,0,null,"call"],
$isEH:true},
uR:{
-"^":"Tp:464;a,b",
-call$2:[function(a,b){return P.NX(this.a,this.b,a,b)},"call$2",null,4,0,null,160,[],161,[],"call"],
+"^":"Tp:430;a,b",
+call$2:[function(a,b){return P.NX(this.a,this.b,a,b)},"call$2",null,4,0,null,159,[],160,[],"call"],
$isEH:true},
-Q0:{
-"^":"Tp:113;a,b",
+GU:{
+"^":"Tp:115;a,b",
call$0:[function(){return this.a.rX(this.b)},"call$0",null,0,0,null,"call"],
$isEH:true},
YR:{
@@ -14139,27 +13543,27 @@
v.fe(a)
v.fm(0,d)
v.y5(c)
-return v},function(a,b,c){return this.KR(a,null,b,c)},"zC",function(a){return this.KR(a,null,null,null)},"yI","call$4$cancelOnError$onDone$onError",null,null,"gp8",2,7,null,77,77,77,461,[],456,[],462,[],164,[]],
-Ml:[function(a,b){b.Rg(0,a)},"call$2","gOa",4,0,null,239,[],465,[]],
+return v},function(a,b,c){return this.KR(a,null,b,c)},"zC",function(a){return this.KR(a,null,null,null)},"yI","call$4$cancelOnError$onDone$onError",null,null,"gp8",2,7,null,82,82,82,427,[],163,[],428,[],422,[]],
+Ml:[function(a,b){b.Rg(0,a)},"call$2","gOa",4,0,null,235,[],431,[]],
$asqh:function(a,b){return[b]}},
fB:{
"^":"KA;UY,Ee,dB,o7,Bd,Lj,Gv,lz,Ri",
Rg:[function(a,b){if((this.Gv&2)!==0)return
-P.KA.prototype.Rg.call(this,this,b)},"call$1","gHR",2,0,null,239,[]],
+P.KA.prototype.Rg.call(this,this,b)},"call$1","gHR",2,0,null,235,[]],
V8:[function(a,b){if((this.Gv&2)!==0)return
-P.KA.prototype.V8.call(this,a,b)},"call$2","grd",4,0,null,160,[],161,[]],
+P.KA.prototype.V8.call(this,a,b)},"call$2","gEm",4,0,null,159,[],160,[]],
uO:[function(){var z=this.Ee
if(z==null)return
-z.yy(0)},"call$0","gp4",0,0,112],
+z.yy(0)},"call$0","gp4",0,0,114],
LP:[function(){var z=this.Ee
if(z==null)return
-z.QE()},"call$0","gZ9",0,0,112],
+z.QE()},"call$0","gZ9",0,0,114],
tA:[function(){var z=this.Ee
if(z!=null){this.Ee=null
z.ed()}return},"call$0","gQC",0,0,null],
-vx:[function(a){this.UY.Ml(a,this)},"call$1","gOa",2,0,function(){return H.IG(function(a,b){return{func:"kA",void:true,args:[a]}},this.$receiver,"fB")},239,[]],
-xL:[function(a,b){this.V8(a,b)},"call$2","gRE",4,0,466,160,[],161,[]],
-nn:[function(){this.Qj()},"call$0","gH1",0,0,112],
+vx:[function(a){this.UY.Ml(a,this)},"call$1","gOa",2,0,function(){return H.IG(function(a,b){return{func:"kA",void:true,args:[a]}},this.$receiver,"fB")},235,[]],
+xL:[function(a,b){this.V8(a,b)},"call$2","gRE",4,0,432,159,[],160,[]],
+nn:[function(){this.Qj()},"call$0","gH1",0,0,114],
S8:function(a,b,c,d){var z,y
z=this.gOa()
y=this.gRE()
@@ -14175,7 +13579,7 @@
y=v
x=new H.XO(w,null)
b.V8(y,x)
-return}if(z===!0)J.QM(b,a)},"call$2","gOa",4,0,null,467,[],465,[]],
+return}if(z===!0)J.QM(b,a)},"call$2","gOa",4,0,null,433,[],431,[]],
$asYR:function(a){return[a,a]},
$asqh:null},
t3:{
@@ -14187,16 +13591,8 @@
y=v
x=new H.XO(w,null)
b.V8(y,x)
-return}J.QM(b,z)},"call$2","gOa",4,0,null,467,[],465,[]]},
-dq:{
-"^":"YR;Em,Sb",
-Ml:[function(a,b){var z=this.Em
-if(z>0){this.Em=z-1
-return}b.Rg(0,a)},"call$2","gOa",4,0,null,467,[],465,[]],
-U6:function(a,b,c){},
-$asYR:function(a){return[a,a]},
-$asqh:null},
-lO:{
+return}J.QM(b,z)},"call$2","gOa",4,0,null,433,[],431,[]]},
+tU:{
"^":"a;"},
aY:{
"^":"a;"},
@@ -14216,7 +13612,7 @@
iT:function(a){return this.iq.call$1$specification(a)}},
e4:{
"^":"a;"},
-JB:{
+dl:{
"^":"a;"},
Id:{
"^":"a;oh",
@@ -14224,102 +13620,102 @@
c1:[function(a,b,c){var z,y
z=this.oh
for(;y=z.gzU(),y.gE2()==null;)z=z.geT(z)
-return y.gE2().call$5(z,new P.Id(z.geT(z)),a,b,c)},"call$3","gE2",6,0,null,151,[],160,[],161,[]],
+return y.gE2().call$5(z,new P.Id(z.geT(z)),a,b,c)},"call$3","gE2",6,0,null,153,[],159,[],160,[]],
Vn:[function(a,b){var z,y
z=this.oh
for(;y=z.gzU(),y.gcP()==null;)z=z.geT(z)
-return y.gcP().call$4(z,new P.Id(z.geT(z)),a,b)},"call$2","gcP",4,0,null,151,[],115,[]],
+return y.gcP().call$4(z,new P.Id(z.geT(z)),a,b)},"call$2","gcP",4,0,null,153,[],117,[]],
qG:[function(a,b,c){var z,y
z=this.oh
for(;y=z.gzU(),y.gJl()==null;)z=z.geT(z)
-return y.gJl().call$5(z,new P.Id(z.geT(z)),a,b,c)},"call$3","gJl",6,0,null,151,[],115,[],173,[]],
+return y.gJl().call$5(z,new P.Id(z.geT(z)),a,b,c)},"call$3","gJl",6,0,null,153,[],117,[],172,[]],
nA:[function(a,b,c,d){var z,y
z=this.oh
for(;y=z.gzU(),y.gpU()==null;)z=z.geT(z)
-return y.gpU().call$6(z,new P.Id(z.geT(z)),a,b,c,d)},"call$4","gpU",8,0,null,151,[],115,[],54,[],55,[]],
+return y.gpU().call$6(z,new P.Id(z.geT(z)),a,b,c,d)},"call$4","gpU",8,0,null,153,[],117,[],59,[],60,[]],
TE:[function(a,b){var z,y
z=this.oh
for(;y=z.gzU().gFh(),y==null;)z=z.geT(z)
-return y.call$4(z,new P.Id(z.geT(z)),a,b)},"call$2","gFh",4,0,null,151,[],115,[]],
+return y.call$4(z,new P.Id(z.geT(z)),a,b)},"call$2","gFh",4,0,null,153,[],117,[]],
V6:[function(a,b){var z,y
z=this.oh
for(;y=z.gzU().gXp(),y==null;)z=z.geT(z)
-return y.call$4(z,new P.Id(z.geT(z)),a,b)},"call$2","gXp",4,0,null,151,[],115,[]],
+return y.call$4(z,new P.Id(z.geT(z)),a,b)},"call$2","gXp",4,0,null,153,[],117,[]],
mz:[function(a,b){var z,y
z=this.oh
for(;y=z.gzU().gaj(),y==null;)z=z.geT(z)
-return y.call$4(z,new P.Id(z.geT(z)),a,b)},"call$2","gaj",4,0,null,151,[],115,[]],
+return y.call$4(z,new P.Id(z.geT(z)),a,b)},"call$2","gaj",4,0,null,153,[],117,[]],
RK:[function(a,b){var z,y,x
z=this.oh
for(;y=z.gzU(),y.grb()==null;)z=z.geT(z)
x=z.geT(z)
-y.grb().call$4(z,new P.Id(x),a,b)},"call$2","grb",4,0,null,151,[],115,[]],
+y.grb().call$4(z,new P.Id(x),a,b)},"call$2","grb",4,0,null,153,[],117,[]],
pX:[function(a,b,c){var z,y
z=this.oh
for(;y=z.gzU(),y.gZq()==null;)z=z.geT(z)
-return y.gZq().call$5(z,new P.Id(z.geT(z)),a,b,c)},"call$3","gZq",6,0,null,151,[],167,[],115,[]],
+return y.gZq().call$5(z,new P.Id(z.geT(z)),a,b,c)},"call$3","gZq",6,0,null,153,[],166,[],117,[]],
RB:[function(a,b,c){var z,y
z=this.oh
for(;y=z.gzU(),y.gJS(y)==null;)z=z.geT(z)
-y.gJS(y).call$4(z,new P.Id(z.geT(z)),b,c)},"call$2","gJS",4,0,null,151,[],181,[]],
+y.gJS(y).call$4(z,new P.Id(z.geT(z)),b,c)},"call$2","gJS",4,0,null,153,[],180,[]],
ld:[function(a,b,c){var z,y,x
z=this.oh
for(;y=z.gzU(),y.giq()==null;)z=z.geT(z)
x=z.geT(z)
-return y.giq().call$5(z,new P.Id(x),a,b,c)},"call$3","giq",6,0,null,151,[],184,[],185,[]]},
+return y.giq().call$5(z,new P.Id(x),a,b,c)},"call$3","giq",6,0,null,153,[],183,[],184,[]]},
WH:{
"^":"a;",
-fC:[function(a){return this.gC5()===a.gC5()},"call$1","gRX",2,0,null,468,[]],
+fC:[function(a){return this.gC5()===a.gC5()},"call$1","gRX",2,0,null,434,[]],
bH:[function(a){var z,y,x,w
try{x=this.Gr(a)
return x}catch(w){x=H.Ru(w)
z=x
y=new H.XO(w,null)
-return this.hk(z,y)}},"call$1","gSI",2,0,null,115,[]],
+return this.hk(z,y)}},"call$1","gSI",2,0,null,117,[]],
m1:[function(a,b){var z,y,x,w
try{x=this.FI(a,b)
return x}catch(w){x=H.Ru(w)
z=x
y=new H.XO(w,null)
-return this.hk(z,y)}},"call$2","gNY",4,0,null,115,[],173,[]],
+return this.hk(z,y)}},"call$2","gNY",4,0,null,117,[],172,[]],
z8:[function(a,b,c){var z,y,x,w
try{x=this.mg(a,b,c)
return x}catch(w){x=H.Ru(w)
z=x
y=new H.XO(w,null)
-return this.hk(z,y)}},"call$3","gLG",6,0,null,115,[],54,[],55,[]],
+return this.hk(z,y)}},"call$3","gLG",6,0,null,117,[],59,[],60,[]],
xi:[function(a,b){var z=this.Al(a)
if(b)return new P.TF(this,z)
-else return new P.K5(this,z)},function(a){return this.xi(a,!0)},"ce","call$2$runGuarded",null,"gAX",2,3,null,336,115,[],469,[]],
+else return new P.K5(this,z)},function(a){return this.xi(a,!0)},"ce","call$2$runGuarded",null,"gAX",2,3,null,333,117,[],435,[]],
oj:[function(a,b){var z=this.cR(a)
if(b)return new P.Cg(this,z)
-else return new P.Hs(this,z)},"call$2$runGuarded","gVF",2,3,null,336,115,[],469,[]],
+else return new P.Hs(this,z)},"call$2$runGuarded","gVF",2,3,null,333,117,[],435,[]],
PT:[function(a,b){var z=this.O8(a)
if(b)return new P.dv(this,z)
-else return new P.pV(this,z)},"call$2$runGuarded","gzg",2,3,null,336,115,[],469,[]]},
+else return new P.ph(this,z)},"call$2$runGuarded","gzg",2,3,null,333,117,[],435,[]]},
TF:{
-"^":"Tp:113;a,b",
+"^":"Tp:115;a,b",
call$0:[function(){return this.a.bH(this.b)},"call$0",null,0,0,null,"call"],
$isEH:true},
K5:{
-"^":"Tp:113;c,d",
+"^":"Tp:115;c,d",
call$0:[function(){return this.c.Gr(this.d)},"call$0",null,0,0,null,"call"],
$isEH:true},
Cg:{
-"^":"Tp:107;a,b",
-call$1:[function(a){return this.a.m1(this.b,a)},"call$1",null,2,0,null,173,[],"call"],
+"^":"Tp:112;a,b",
+call$1:[function(a){return this.a.m1(this.b,a)},"call$1",null,2,0,null,172,[],"call"],
$isEH:true},
Hs:{
-"^":"Tp:107;c,d",
-call$1:[function(a){return this.c.FI(this.d,a)},"call$1",null,2,0,null,173,[],"call"],
+"^":"Tp:112;c,d",
+call$1:[function(a){return this.c.FI(this.d,a)},"call$1",null,2,0,null,172,[],"call"],
$isEH:true},
dv:{
-"^":"Tp:346;a,b",
-call$2:[function(a,b){return this.a.z8(this.b,a,b)},"call$2",null,4,0,null,54,[],55,[],"call"],
+"^":"Tp:348;a,b",
+call$2:[function(a,b){return this.a.z8(this.b,a,b)},"call$2",null,4,0,null,59,[],60,[],"call"],
$isEH:true},
-pV:{
-"^":"Tp:346;c,d",
-call$2:[function(a,b){return this.c.mg(this.d,a,b)},"call$2",null,4,0,null,54,[],55,[],"call"],
+ph:{
+"^":"Tp:348;c,d",
+call$2:[function(a,b){return this.c.mg(this.d,a,b)},"call$2",null,4,0,null,59,[],60,[],"call"],
$isEH:true},
uo:{
"^":"WH;eT>,zU<,R1",
@@ -14328,24 +13724,24 @@
z=this.R1
y=z.t(0,b)
if(y!=null||z.x4(b))return y
-return this.eT.t(0,b)},"call$1","gIA",2,0,null,42,[]],
-hk:[function(a,b){return new P.Id(this).c1(this,a,b)},"call$2","gE2",4,0,null,160,[],161,[]],
-c6:[function(a,b){return new P.Id(this).ld(this,a,b)},function(a){return this.c6(a,null)},"iT","call$2$specification$zoneValues",null,"giq",0,5,null,77,77,184,[],185,[]],
-Gr:[function(a){return new P.Id(this).Vn(this,a)},"call$1","gcP",2,0,null,115,[]],
-FI:[function(a,b){return new P.Id(this).qG(this,a,b)},"call$2","gJl",4,0,null,115,[],173,[]],
-mg:[function(a,b,c){return new P.Id(this).nA(this,a,b,c)},"call$3","gpU",6,0,null,115,[],54,[],55,[]],
-Al:[function(a){return new P.Id(this).TE(this,a)},"call$1","gFh",2,0,null,115,[]],
-cR:[function(a){return new P.Id(this).V6(this,a)},"call$1","gXp",2,0,null,115,[]],
-O8:[function(a){return new P.Id(this).mz(this,a)},"call$1","gaj",2,0,null,115,[]],
-wr:[function(a){new P.Id(this).RK(this,a)},"call$1","grb",2,0,null,115,[]],
-uN:[function(a,b){return new P.Id(this).pX(this,a,b)},"call$2","gZq",4,0,null,167,[],115,[]],
-Ch:[function(a,b){new P.Id(this).RB(0,this,b)},"call$1","gJS",2,0,null,181,[]]},
+return this.eT.t(0,b)},"call$1","gIA",2,0,null,47,[]],
+hk:[function(a,b){return new P.Id(this).c1(this,a,b)},"call$2","gE2",4,0,null,159,[],160,[]],
+c6:[function(a,b){return new P.Id(this).ld(this,a,b)},function(a){return this.c6(a,null)},"iT","call$2$specification$zoneValues",null,"giq",0,5,null,82,82,183,[],184,[]],
+Gr:[function(a){return new P.Id(this).Vn(this,a)},"call$1","gcP",2,0,null,117,[]],
+FI:[function(a,b){return new P.Id(this).qG(this,a,b)},"call$2","gJl",4,0,null,117,[],172,[]],
+mg:[function(a,b,c){return new P.Id(this).nA(this,a,b,c)},"call$3","gpU",6,0,null,117,[],59,[],60,[]],
+Al:[function(a){return new P.Id(this).TE(this,a)},"call$1","gFh",2,0,null,117,[]],
+cR:[function(a){return new P.Id(this).V6(this,a)},"call$1","gXp",2,0,null,117,[]],
+O8:[function(a){return new P.Id(this).mz(this,a)},"call$1","gaj",2,0,null,117,[]],
+wr:[function(a){new P.Id(this).RK(this,a)},"call$1","grb",2,0,null,117,[]],
+uN:[function(a,b){return new P.Id(this).pX(this,a,b)},"call$2","gZq",4,0,null,166,[],117,[]],
+Ch:[function(a,b){new P.Id(this).RB(0,this,b)},"call$1","gJS",2,0,null,180,[]]},
pK:{
-"^":"Tp:113;a,b",
+"^":"Tp:115;a,b",
call$0:[function(){P.IA(new P.eM(this.a,this.b))},"call$0",null,0,0,null,"call"],
$isEH:true},
eM:{
-"^":"Tp:113;c,d",
+"^":"Tp:115;c,d",
call$0:[function(){var z,y,x
z=this.c
P.JS("Uncaught Error: "+H.d(z))
@@ -14357,11 +13753,11 @@
throw H.b(z)},"call$0",null,0,0,null,"call"],
$isEH:true},
Ha:{
-"^":"Tp:436;a",
+"^":"Tp:404;a",
call$2:[function(a,b){if(a==null)throw H.b(new P.AT("ZoneValue key must not be null"))
-this.a.u(0,a,b)},"call$2",null,4,0,null,42,[],23,[],"call"],
+this.a.u(0,a,b)},"call$2",null,4,0,null,47,[],28,[],"call"],
$isEH:true},
-nU:{
+W5:{
"^":"a;",
gE2:function(){return P.xP()},
hk:function(a,b){return this.gE2().call$2(a,b)},
@@ -14391,23 +13787,23 @@
geT:function(a){return},
gzU:function(){return C.v8},
gC5:function(){return this},
-fC:[function(a){return a.gC5()===this},"call$1","gRX",2,0,null,468,[]],
-t:[function(a,b){return},"call$1","gIA",2,0,null,42,[]],
-hk:[function(a,b){return P.L2(this,null,this,a,b)},"call$2","gE2",4,0,null,160,[],161,[]],
-c6:[function(a,b){return P.UA(this,null,this,a,b)},function(a){return this.c6(a,null)},"iT","call$2$specification$zoneValues",null,"giq",0,5,null,77,77,184,[],185,[]],
-Gr:[function(a){return P.T8(this,null,this,a)},"call$1","gcP",2,0,null,115,[]],
-FI:[function(a,b){return P.V7(this,null,this,a,b)},"call$2","gJl",4,0,null,115,[],173,[]],
-mg:[function(a,b,c){return P.Qx(this,null,this,a,b,c)},"call$3","gpU",6,0,null,115,[],54,[],55,[]],
-Al:[function(a){return a},"call$1","gFh",2,0,null,115,[]],
-cR:[function(a){return a},"call$1","gXp",2,0,null,115,[]],
-O8:[function(a){return a},"call$1","gaj",2,0,null,115,[]],
-wr:[function(a){P.Tk(this,null,this,a)},"call$1","grb",2,0,null,115,[]],
-uN:[function(a,b){return P.h8(this,null,this,a,b)},"call$2","gZq",4,0,null,167,[],115,[]],
+fC:[function(a){return a.gC5()===this},"call$1","gRX",2,0,null,434,[]],
+t:[function(a,b){return},"call$1","gIA",2,0,null,47,[]],
+hk:[function(a,b){return P.L2(this,null,this,a,b)},"call$2","gE2",4,0,null,159,[],160,[]],
+c6:[function(a,b){return P.UA(this,null,this,a,b)},function(a){return this.c6(a,null)},"iT","call$2$specification$zoneValues",null,"giq",0,5,null,82,82,183,[],184,[]],
+Gr:[function(a){return P.T8(this,null,this,a)},"call$1","gcP",2,0,null,117,[]],
+FI:[function(a,b){return P.V7(this,null,this,a,b)},"call$2","gJl",4,0,null,117,[],172,[]],
+mg:[function(a,b,c){return P.Qx(this,null,this,a,b,c)},"call$3","gpU",6,0,null,117,[],59,[],60,[]],
+Al:[function(a){return a},"call$1","gFh",2,0,null,117,[]],
+cR:[function(a){return a},"call$1","gXp",2,0,null,117,[]],
+O8:[function(a){return a},"call$1","gaj",2,0,null,117,[]],
+wr:[function(a){P.Tk(this,null,this,a)},"call$1","grb",2,0,null,117,[]],
+uN:[function(a,b){return P.h8(this,null,this,a,b)},"call$2","gZq",4,0,null,166,[],117,[]],
Ch:[function(a,b){H.qw(b)
-return},"call$1","gJS",2,0,null,181,[]]}}],["dart.collection","dart:collection",,P,{
+return},"call$1","gJS",2,0,null,180,[]]}}],["dart.collection","dart:collection",,P,{
"^":"",
-Ou:[function(a,b){return J.de(a,b)},"call$2","iv",4,0,187,128,[],188,[]],
-T9:[function(a){return J.v1(a)},"call$1","py",2,0,189,128,[]],
+R2:[function(a,b){return J.de(a,b)},"call$2","to",4,0,186,131,[],187,[]],
+T9:[function(a){return J.v1(a)},"call$1","py",2,0,188,131,[]],
Py:function(a,b,c,d,e){var z
if(a==null){z=new P.k6(0,null,null,null,null)
z.$builtinTypeInfo=[d,e]
@@ -14422,7 +13818,7 @@
try{P.Vr(a,z)}finally{$.xb().Rz(0,a)}y=P.p9("(")
y.We(z,", ")
y.KF(")")
-return y.vM},"call$1","Zw",2,0,null,114,[]],
+return y.vM},"call$1","Zw",2,0,null,116,[]],
Vr:[function(a,b){var z,y,x,w,v,u,t,s,r,q
z=a.gA(a)
y=0
@@ -14455,10 +13851,8 @@
if(q==null){y+=5
q="..."}}if(q!=null)b.push(q)
b.push(u)
-b.push(v)},"call$2","zE",4,0,null,114,[],190,[]],
-L5:function(a,b,c,d,e){if(b==null){if(a==null)return H.VM(new P.YB(0,null,null,null,null,null,0),[d,e])
-b=P.py()}else{if(P.J2()===b&&P.N3()===a)return H.VM(new P.ey(0,null,null,null,null,null,0),[d,e])
-if(a==null)a=P.iv()}return P.Ex(a,b,c,d,e)},
+b.push(v)},"call$2","wB",4,0,null,116,[],189,[]],
+L5:function(a,b,c,d,e){return H.VM(new P.YB(0,null,null,null,null,null,0),[d,e])},
Ls:function(a,b,c,d){return H.VM(new P.b6(0,null,null,null,null,null,0),[d])},
vW:[function(a){var z,y,x,w
z={}
@@ -14470,7 +13864,7 @@
J.kH(a,new P.ZQ(z,y))
y.KF("}")}finally{z=$.tw()
if(0>=z.length)return H.e(z,0)
-z.pop()}return y.gvM()},"call$1","DH",2,0,null,191,[]],
+z.pop()}return y.gvM()},"call$1","DH",2,0,null,190,[]],
k6:{
"^":"a;X5,vv,OX,OB,wV",
gB:function(a){return this.X5},
@@ -14483,11 +13877,11 @@
return z==null?!1:z[a]!=null}else if(typeof a==="number"&&(a&0x3ffffff)===a){y=this.OX
return y==null?!1:y[a]!=null}else{x=this.OB
if(x==null)return!1
-return this.aH(x[this.nm(a)],a)>=0}},"call$1","gV9",2,0,null,42,[]],
+return this.aH(x[this.nm(a)],a)>=0}},"call$1","gV9",2,0,null,47,[]],
di:[function(a){var z=this.Ig()
z.toString
-return H.Ck(z,new P.ce(this,a))},"call$1","gmc",2,0,null,23,[]],
-FV:[function(a,b){J.kH(b,new P.DJ(this))},"call$1","gDY",2,0,null,104,[]],
+return H.Ck(z,new P.ce(this,a))},"call$1","gmc",2,0,null,28,[]],
+FV:[function(a,b){H.bQ(b,new P.DJ(this))},"call$1","gDY",2,0,null,109,[]],
t:[function(a,b){var z,y,x,w,v,u,t
if(typeof b==="string"&&b!=="__proto__"){z=this.vv
if(z==null)y=null
@@ -14499,7 +13893,7 @@
if(v==null)return
u=v[this.nm(b)]
t=this.aH(u,b)
-return t<0?null:u[t+1]}},"call$1","gIA",2,0,null,42,[]],
+return t<0?null:u[t+1]}},"call$1","gIA",2,0,null,47,[]],
u:[function(a,b,c){var z,y,x,w,v,u
if(typeof b==="string"&&b!=="__proto__"){z=this.vv
if(z==null){z=P.a0()
@@ -14515,7 +13909,7 @@
if(u>=0)v[u+1]=c
else{v.push(b,c)
this.X5=this.X5+1
-this.wV=null}}}},"call$2","gj3",4,0,null,42,[],23,[]],
+this.wV=null}}}},"call$2","gj3",4,0,null,47,[],28,[]],
Rz:[function(a,b){var z,y,x
if(typeof b==="string"&&b!=="__proto__")return this.Nv(this.vv,b)
else if(typeof b==="number"&&(b&0x3ffffff)===b)return this.Nv(this.OX,b)
@@ -14526,17 +13920,17 @@
if(x<0)return
this.X5=this.X5-1
this.wV=null
-return y.splice(x,2)[1]}},"call$1","gRI",2,0,null,42,[]],
+return y.splice(x,2)[1]}},"call$1","guH",2,0,null,47,[]],
V1:[function(a){if(this.X5>0){this.wV=null
this.OB=null
this.OX=null
this.vv=null
-this.X5=0}},"call$0","gyP",0,0,null],
+this.X5=0}},"call$0","gRa",0,0,null],
aN:[function(a,b){var z,y,x,w
z=this.Ig()
for(y=z.length,x=0;x<y;++x){w=z[x]
b.call$2(w,this.t(0,w))
-if(z!==this.wV)throw H.b(P.a4(this))}},"call$1","gjw",2,0,null,429,[]],
+if(z!==this.wV)throw H.b(P.a4(this))}},"call$1","gjw",2,0,null,397,[]],
Ig:[function(){var z,y,x,w,v,u,t,s,r,q,p,o
z=this.wV
if(z!=null)return z
@@ -14557,71 +13951,71 @@
for(o=0;o<p;o+=2){y[u]=q[o];++u}}}this.wV=y
return y},"call$0","gtL",0,0,null],
dg:[function(a,b,c){if(a[b]==null){this.X5=this.X5+1
-this.wV=null}P.cW(a,b,c)},"call$3","gLa",6,0,null,186,[],42,[],23,[]],
+this.wV=null}P.cW(a,b,c)},"call$3","gLa",6,0,null,185,[],47,[],28,[]],
Nv:[function(a,b){var z
if(a!=null&&a[b]!=null){z=P.vL(a,b)
delete a[b]
this.X5=this.X5-1
this.wV=null
-return z}else return},"call$2","got",4,0,null,186,[],42,[]],
-nm:[function(a){return J.v1(a)&0x3ffffff},"call$1","gtU",2,0,null,42,[]],
+return z}else return},"call$2","got",4,0,null,185,[],47,[]],
+nm:[function(a){return J.v1(a)&0x3ffffff},"call$1","gtU",2,0,null,47,[]],
aH:[function(a,b){var z,y
if(a==null)return-1
z=a.length
for(y=0;y<z;y+=2)if(J.de(a[y],b))return y
-return-1},"call$2","gSP",4,0,null,470,[],42,[]],
+return-1},"call$2","gSP",4,0,null,436,[],47,[]],
$isZ0:true,
static:{vL:[function(a,b){var z=a[b]
-return z===a?null:z},"call$2","ME",4,0,null,186,[],42,[]],cW:[function(a,b,c){if(c==null)a[b]=a
-else a[b]=c},"call$3","rn",6,0,null,186,[],42,[],23,[]],a0:[function(){var z=Object.create(null)
+return z===a?null:z},"call$2","ME",4,0,null,185,[],47,[]],cW:[function(a,b,c){if(c==null)a[b]=a
+else a[b]=c},"call$3","rn",6,0,null,185,[],47,[],28,[]],a0:[function(){var z=Object.create(null)
P.cW(z,"<non-identifier-key>",z)
delete z["<non-identifier-key>"]
return z},"call$0","Vd",0,0,null]}},
oi:{
-"^":"Tp:107;a",
-call$1:[function(a){return this.a.t(0,a)},"call$1",null,2,0,null,471,[],"call"],
+"^":"Tp:112;a",
+call$1:[function(a){return this.a.t(0,a)},"call$1",null,2,0,null,437,[],"call"],
$isEH:true},
ce:{
-"^":"Tp:107;a,b",
-call$1:[function(a){return J.de(this.a.t(0,a),this.b)},"call$1",null,2,0,null,471,[],"call"],
+"^":"Tp:112;a,b",
+call$1:[function(a){return J.de(this.a.t(0,a),this.b)},"call$1",null,2,0,null,437,[],"call"],
$isEH:true},
DJ:{
"^":"Tp;a",
-call$2:[function(a,b){this.a.u(0,a,b)},"call$2",null,4,0,null,42,[],23,[],"call"],
+call$2:[function(a,b){this.a.u(0,a,b)},"call$2",null,4,0,null,47,[],28,[],"call"],
$isEH:true,
$signature:function(){return H.IG(function(a,b){return{func:"vP",args:[a,b]}},this.a,"k6")}},
PL:{
"^":"k6;X5,vv,OX,OB,wV",
-nm:[function(a){return H.CU(a)&0x3ffffff},"call$1","gtU",2,0,null,42,[]],
+nm:[function(a){return H.CU(a)&0x3ffffff},"call$1","gtU",2,0,null,47,[]],
aH:[function(a,b){var z,y,x
if(a==null)return-1
z=a.length
for(y=0;y<z;y+=2){x=a[y]
-if(x==null?b==null:x===b)return y}return-1},"call$2","gSP",4,0,null,470,[],42,[]]},
+if(x==null?b==null:x===b)return y}return-1},"call$2","gSP",4,0,null,436,[],47,[]]},
Fq:{
"^":"k6;m6,Q6,ac,X5,vv,OX,OB,wV",
-C2:function(a,b){return this.m6.call$2(a,b)},
+WV:function(a,b){return this.m6.call$2(a,b)},
H5:function(a){return this.Q6.call$1(a)},
Ef:function(a){return this.ac.call$1(a)},
t:[function(a,b){if(this.Ef(b)!==!0)return
-return P.k6.prototype.t.call(this,this,b)},"call$1","gIA",2,0,null,42,[]],
+return P.k6.prototype.t.call(this,this,b)},"call$1","gIA",2,0,null,47,[]],
x4:[function(a){if(this.Ef(a)!==!0)return!1
-return P.k6.prototype.x4.call(this,a)},"call$1","gV9",2,0,null,42,[]],
+return P.k6.prototype.x4.call(this,a)},"call$1","gV9",2,0,null,47,[]],
Rz:[function(a,b){if(this.Ef(b)!==!0)return
-return P.k6.prototype.Rz.call(this,this,b)},"call$1","gRI",2,0,null,42,[]],
-nm:[function(a){return this.H5(a)&0x3ffffff},"call$1","gtU",2,0,null,42,[]],
+return P.k6.prototype.Rz.call(this,this,b)},"call$1","guH",2,0,null,47,[]],
+nm:[function(a){return this.H5(a)&0x3ffffff},"call$1","gtU",2,0,null,47,[]],
aH:[function(a,b){var z,y
if(a==null)return-1
z=a.length
-for(y=0;y<z;y+=2)if(this.C2(a[y],b)===!0)return y
-return-1},"call$2","gSP",4,0,null,470,[],42,[]],
+for(y=0;y<z;y+=2)if(this.WV(a[y],b)===!0)return y
+return-1},"call$2","gSP",4,0,null,436,[],47,[]],
bu:[function(a){return P.vW(this)},"call$0","gXo",0,0,null],
static:{MP:function(a,b,c,d,e){var z=new P.jG(d)
return H.VM(new P.Fq(a,b,z,0,null,null,null,null),[d,e])}}},
jG:{
-"^":"Tp:107;a",
-call$1:[function(a){var z=H.Gq(a,this.a)
-return z},"call$1",null,2,0,null,277,[],"call"],
+"^":"Tp:112;a",
+call$1:[function(a){var z=H.XY(a,this.a)
+return z},"call$1",null,2,0,null,272,[],"call"],
$isEH:true},
fG:{
"^":"mW;Fb",
@@ -14631,12 +14025,12 @@
z=new P.EQ(z,z.Ig(),0,null)
z.$builtinTypeInfo=this.$builtinTypeInfo
return z},
-tg:[function(a,b){return this.Fb.x4(b)},"call$1","gdj",2,0,null,129,[]],
+tg:[function(a,b){return this.Fb.x4(b)},"call$1","gdj",2,0,null,132,[]],
aN:[function(a,b){var z,y,x,w
z=this.Fb
y=z.Ig()
for(x=y.length,w=0;w<x;++w){b.call$1(y[w])
-if(y!==z.wV)throw H.b(P.a4(z))}},"call$1","gjw",2,0,null,115,[]],
+if(y!==z.wV)throw H.b(P.a4(z))}},"call$1","gjw",2,0,null,117,[]],
$isyN:true},
EQ:{
"^":"a;Fb,wV,zi,fD",
@@ -14664,9 +14058,9 @@
if(y==null)return!1
return y[a]!=null}else{x=this.OB
if(x==null)return!1
-return this.aH(x[this.nm(a)],a)>=0}},"call$1","gV9",2,0,null,42,[]],
-di:[function(a){return H.VM(new P.i5(this),[H.Kp(this,0)]).Vr(0,new P.ou(this,a))},"call$1","gmc",2,0,null,23,[]],
-FV:[function(a,b){J.kH(b,new P.S9(this))},"call$1","gDY",2,0,null,104,[]],
+return this.aH(x[this.nm(a)],a)>=0}},"call$1","gV9",2,0,null,47,[]],
+di:[function(a){return H.VM(new P.i5(this),[H.Kp(this,0)]).Vr(0,new P.ou(this,a))},"call$1","gmc",2,0,null,28,[]],
+FV:[function(a,b){J.kH(b,new P.S9(this))},"call$1","gDY",2,0,null,109,[]],
t:[function(a,b){var z,y,x,w,v,u
if(typeof b==="string"&&b!=="__proto__"){z=this.vv
if(z==null)return
@@ -14679,7 +14073,7 @@
v=w[this.nm(b)]
u=this.aH(v,b)
if(u<0)return
-return v[u].gS4()}},"call$1","gIA",2,0,null,42,[]],
+return v[u].gS4()}},"call$1","gIA",2,0,null,47,[]],
u:[function(a,b,c){var z,y,x,w,v,u
if(typeof b==="string"&&b!=="__proto__"){z=this.vv
if(z==null){z=P.Qs()
@@ -14692,12 +14086,12 @@
if(v==null)x[w]=[this.pE(b,c)]
else{u=this.aH(v,b)
if(u>=0)v[u].sS4(c)
-else v.push(this.pE(b,c))}}},"call$2","gj3",4,0,null,42,[],23,[]],
+else v.push(this.pE(b,c))}}},"call$2","gj3",4,0,null,47,[],28,[]],
to:[function(a,b){var z
if(this.x4(a))return this.t(0,a)
z=b.call$0()
this.u(0,a,z)
-return z},"call$2","gMs",4,0,null,42,[],472,[]],
+return z},"call$2","gMs",4,0,null,47,[],438,[]],
Rz:[function(a,b){var z,y,x,w
if(typeof b==="string"&&b!=="__proto__")return this.Nv(this.vv,b)
else if(typeof b==="number"&&(b&0x3ffffff)===b)return this.Nv(this.OX,b)
@@ -14708,30 +14102,30 @@
if(x<0)return
w=y.splice(x,1)[0]
this.Vb(w)
-return w.gS4()}},"call$1","gRI",2,0,null,42,[]],
+return w.gS4()}},"call$1","guH",2,0,null,47,[]],
V1:[function(a){if(this.X5>0){this.lX=null
this.H9=null
this.OB=null
this.OX=null
this.vv=null
this.X5=0
-this.zN=this.zN+1&67108863}},"call$0","gyP",0,0,null],
+this.zN=this.zN+1&67108863}},"call$0","gRa",0,0,null],
aN:[function(a,b){var z,y
z=this.H9
y=this.zN
for(;z!=null;){b.call$2(z.gkh(),z.gS4())
if(y!==this.zN)throw H.b(P.a4(this))
-z=z.gDG()}},"call$1","gjw",2,0,null,429,[]],
+z=z.gDG()}},"call$1","gjw",2,0,null,397,[]],
dg:[function(a,b,c){var z=a[b]
if(z==null)a[b]=this.pE(b,c)
-else z.sS4(c)},"call$3","gLa",6,0,null,186,[],42,[],23,[]],
+else z.sS4(c)},"call$3","gLa",6,0,null,185,[],47,[],28,[]],
Nv:[function(a,b){var z
if(a==null)return
z=a[b]
if(z==null)return
this.Vb(z)
delete a[b]
-return z.gS4()},"call$2","got",4,0,null,186,[],42,[]],
+return z.gS4()},"call$2","got",4,0,null,185,[],47,[]],
pE:[function(a,b){var z,y
z=new P.db(a,b,null,null)
if(this.H9==null){this.lX=z
@@ -14740,7 +14134,7 @@
y.sDG(z)
this.lX=z}this.X5=this.X5+1
this.zN=this.zN+1&67108863
-return z},"call$2","gTM",4,0,null,42,[],23,[]],
+return z},"call$2","gTM",4,0,null,47,[],28,[]],
Vb:[function(a){var z,y
z=a.gzQ()
y=a.gDG()
@@ -14749,13 +14143,13 @@
if(y==null)this.lX=z
else y.szQ(z)
this.X5=this.X5-1
-this.zN=this.zN+1&67108863},"call$1","glZ",2,0,null,473,[]],
-nm:[function(a){return J.v1(a)&0x3ffffff},"call$1","gtU",2,0,null,42,[]],
+this.zN=this.zN+1&67108863},"call$1","glZ",2,0,null,439,[]],
+nm:[function(a){return J.v1(a)&0x3ffffff},"call$1","gtU",2,0,null,47,[]],
aH:[function(a,b){var z,y
if(a==null)return-1
z=a.length
for(y=0;y<z;++y)if(J.de(a[y].gkh(),b))return y
-return-1},"call$2","gSP",4,0,null,470,[],42,[]],
+return-1},"call$2","gSP",4,0,null,436,[],47,[]],
bu:[function(a){return P.vW(this)},"call$0","gXo",0,0,null],
$isFo:true,
$isZ0:true,
@@ -14764,50 +14158,18 @@
delete z["<non-identifier-key>"]
return z},"call$0","Bs",0,0,null]}},
a1:{
-"^":"Tp:107;a",
-call$1:[function(a){return this.a.t(0,a)},"call$1",null,2,0,null,471,[],"call"],
+"^":"Tp:112;a",
+call$1:[function(a){return this.a.t(0,a)},"call$1",null,2,0,null,437,[],"call"],
$isEH:true},
ou:{
-"^":"Tp:107;a,b",
-call$1:[function(a){return J.de(this.a.t(0,a),this.b)},"call$1",null,2,0,null,471,[],"call"],
+"^":"Tp:112;a,b",
+call$1:[function(a){return J.de(this.a.t(0,a),this.b)},"call$1",null,2,0,null,437,[],"call"],
$isEH:true},
S9:{
"^":"Tp;a",
-call$2:[function(a,b){this.a.u(0,a,b)},"call$2",null,4,0,null,42,[],23,[],"call"],
+call$2:[function(a,b){this.a.u(0,a,b)},"call$2",null,4,0,null,47,[],28,[],"call"],
$isEH:true,
$signature:function(){return H.IG(function(a,b){return{func:"oK",args:[a,b]}},this.a,"YB")}},
-ey:{
-"^":"YB;X5,vv,OX,OB,H9,lX,zN",
-nm:[function(a){return H.CU(a)&0x3ffffff},"call$1","gtU",2,0,null,42,[]],
-aH:[function(a,b){var z,y,x
-if(a==null)return-1
-z=a.length
-for(y=0;y<z;++y){x=a[y].gkh()
-if(x==null?b==null:x===b)return y}return-1},"call$2","gSP",4,0,null,470,[],42,[]]},
-xd:{
-"^":"YB;m6,Q6,ac,X5,vv,OX,OB,H9,lX,zN",
-C2:function(a,b){return this.m6.call$2(a,b)},
-H5:function(a){return this.Q6.call$1(a)},
-Ef:function(a){return this.ac.call$1(a)},
-t:[function(a,b){if(this.Ef(b)!==!0)return
-return P.YB.prototype.t.call(this,this,b)},"call$1","gIA",2,0,null,42,[]],
-x4:[function(a){if(this.Ef(a)!==!0)return!1
-return P.YB.prototype.x4.call(this,a)},"call$1","gV9",2,0,null,42,[]],
-Rz:[function(a,b){if(this.Ef(b)!==!0)return
-return P.YB.prototype.Rz.call(this,this,b)},"call$1","gRI",2,0,null,42,[]],
-nm:[function(a){return this.H5(a)&0x3ffffff},"call$1","gtU",2,0,null,42,[]],
-aH:[function(a,b){var z,y
-if(a==null)return-1
-z=a.length
-for(y=0;y<z;++y)if(this.C2(a[y].gkh(),b)===!0)return y
-return-1},"call$2","gSP",4,0,null,470,[],42,[]],
-static:{Ex:function(a,b,c,d,e){var z=new P.v6(d)
-return H.VM(new P.xd(a,b,z,0,null,null,null,null,null,0),[d,e])}}},
-v6:{
-"^":"Tp:107;a",
-call$1:[function(a){var z=H.Gq(a,this.a)
-return z},"call$1",null,2,0,null,277,[],"call"],
-$isEH:true},
db:{
"^":"a;kh<,S4@,DG@,zQ@"},
i5:{
@@ -14820,14 +14182,14 @@
y.$builtinTypeInfo=this.$builtinTypeInfo
y.zq=z.H9
return y},
-tg:[function(a,b){return this.Fb.x4(b)},"call$1","gdj",2,0,null,129,[]],
+tg:[function(a,b){return this.Fb.x4(b)},"call$1","gdj",2,0,null,132,[]],
aN:[function(a,b){var z,y,x
z=this.Fb
y=z.H9
x=z.zN
for(;y!=null;){b.call$1(y.gkh())
if(x!==z.zN)throw H.b(P.a4(z))
-y=y.gDG()}},"call$1","gjw",2,0,null,115,[]],
+y=y.gDG()}},"call$1","gjw",2,0,null,117,[]],
$isyN:true},
N6:{
"^":"a;Fb,zN,zq,fD",
@@ -14839,7 +14201,7 @@
return!1}else{this.fD=z.gkh()
this.zq=this.zq.gDG()
return!0}}},"call$0","gqy",0,0,null]},
-Rr:{
+UB:{
"^":"lN;",
gA:function(a){var z=new P.oz(this,this.Zl(),0,null)
z.$builtinTypeInfo=this.$builtinTypeInfo
@@ -14885,9 +14247,9 @@
else{if(this.aH(u,b)>=0)return!1
u.push(b)}this.X5=this.X5+1
this.DM=null
-return!0}},"call$1","ght",2,0,null,129,[]],
+return!0}},"call$1","ght",2,0,null,132,[]],
FV:[function(a,b){var z
-for(z=J.GP(b);z.G();)this.h(0,z.gl())},"call$1","gDY",2,0,null,474,[]],
+for(z=H.VM(new H.a7(b,b.length,0,null),[H.Kp(b,0)]);z.G();)this.h(0,z.lo)},"call$1","gDY",2,0,null,440,[]],
Rz:[function(a,b){var z,y,x
if(typeof b==="string"&&b!=="__proto__")return this.Nv(this.vv,b)
else if(typeof b==="number"&&(b&0x3ffffff)===b)return this.Nv(this.OX,b)
@@ -14899,12 +14261,12 @@
this.X5=this.X5-1
this.DM=null
y.splice(x,1)
-return!0}},"call$1","gRI",2,0,null,6,[]],
+return!0}},"call$1","guH",2,0,null,6,[]],
V1:[function(a){if(this.X5>0){this.DM=null
this.OB=null
this.OX=null
this.vv=null
-this.X5=0}},"call$0","gyP",0,0,null],
+this.X5=0}},"call$0","gRa",0,0,null],
Zl:[function(){var z,y,x,w,v,u,t,s,r,q,p,o
z=this.DM
if(z!=null)return z
@@ -14928,28 +14290,28 @@
a[b]=0
this.X5=this.X5+1
this.DM=null
-return!0},"call$2","gLa",4,0,null,186,[],129,[]],
+return!0},"call$2","gLa",4,0,null,185,[],132,[]],
Nv:[function(a,b){if(a!=null&&a[b]!=null){delete a[b]
this.X5=this.X5-1
this.DM=null
-return!0}else return!1},"call$2","got",4,0,null,186,[],129,[]],
-nm:[function(a){return J.v1(a)&0x3ffffff},"call$1","gtU",2,0,null,129,[]],
+return!0}else return!1},"call$2","got",4,0,null,185,[],132,[]],
+nm:[function(a){return J.v1(a)&0x3ffffff},"call$1","gtU",2,0,null,132,[]],
aH:[function(a,b){var z,y
if(a==null)return-1
z=a.length
for(y=0;y<z;++y)if(J.de(a[y],b))return y
-return-1},"call$2","gSP",4,0,null,470,[],129,[]],
+return-1},"call$2","gSP",4,0,null,436,[],132,[]],
$isyN:true,
-$iscX:true,
-$ascX:null},
+$isQV:true,
+$asQV:null},
YO:{
-"^":"Rr;X5,vv,OX,OB,DM",
-nm:[function(a){return H.CU(a)&0x3ffffff},"call$1","gtU",2,0,null,42,[]],
+"^":"UB;X5,vv,OX,OB,DM",
+nm:[function(a){return H.CU(a)&0x3ffffff},"call$1","gtU",2,0,null,47,[]],
aH:[function(a,b){var z,y,x
if(a==null)return-1
z=a.length
for(y=0;y<z;++y){x=a[y]
-if(x==null?b==null:x===b)return y}return-1},"call$2","gSP",4,0,null,470,[],129,[]]},
+if(x==null?b==null:x===b)return y}return-1},"call$2","gSP",4,0,null,436,[],132,[]]},
oz:{
"^":"a;O2,DM,zi,fD",
gl:function(){return this.fD},
@@ -14993,7 +14355,7 @@
y=this.zN
for(;z!=null;){b.call$1(z.gGc())
if(y!==this.zN)throw H.b(P.a4(this))
-z=z.gDG()}},"call$1","gjw",2,0,null,429,[]],
+z=z.gDG()}},"call$1","gjw",2,0,null,397,[]],
grZ:function(a){var z=this.lX
if(z==null)throw H.b(new P.lj("No elements"))
return z.gGc()},
@@ -15017,9 +14379,9 @@
u=w[v]
if(u==null)w[v]=[this.xf(b)]
else{if(this.aH(u,b)>=0)return!1
-u.push(this.xf(b))}return!0}},"call$1","ght",2,0,null,129,[]],
+u.push(this.xf(b))}return!0}},"call$1","ght",2,0,null,132,[]],
FV:[function(a,b){var z
-for(z=J.GP(b);z.G();)this.h(0,z.gl())},"call$1","gDY",2,0,null,474,[]],
+for(z=J.GP(b);z.G();)this.h(0,z.gl())},"call$1","gDY",2,0,null,440,[]],
Rz:[function(a,b){var z,y,x
if(typeof b==="string"&&b!=="__proto__")return this.Nv(this.vv,b)
else if(typeof b==="number"&&(b&0x3ffffff)===b)return this.Nv(this.OX,b)
@@ -15029,24 +14391,24 @@
x=this.aH(y,b)
if(x<0)return!1
this.Vb(y.splice(x,1)[0])
-return!0}},"call$1","gRI",2,0,null,6,[]],
+return!0}},"call$1","guH",2,0,null,6,[]],
V1:[function(a){if(this.X5>0){this.lX=null
this.H9=null
this.OB=null
this.OX=null
this.vv=null
this.X5=0
-this.zN=this.zN+1&67108863}},"call$0","gyP",0,0,null],
+this.zN=this.zN+1&67108863}},"call$0","gRa",0,0,null],
cA:[function(a,b){if(a[b]!=null)return!1
a[b]=this.xf(b)
-return!0},"call$2","gLa",4,0,null,186,[],129,[]],
+return!0},"call$2","gLa",4,0,null,185,[],132,[]],
Nv:[function(a,b){var z
if(a==null)return!1
z=a[b]
if(z==null)return!1
this.Vb(z)
delete a[b]
-return!0},"call$2","got",4,0,null,186,[],129,[]],
+return!0},"call$2","got",4,0,null,185,[],132,[]],
xf:[function(a){var z,y
z=new P.ef(a,null,null)
if(this.H9==null){this.lX=z
@@ -15055,7 +14417,7 @@
y.sDG(z)
this.lX=z}this.X5=this.X5+1
this.zN=this.zN+1&67108863
-return z},"call$1","gTM",2,0,null,129,[]],
+return z},"call$1","gTM",2,0,null,132,[]],
Vb:[function(a){var z,y
z=a.gzQ()
y=a.gDG()
@@ -15064,16 +14426,16 @@
if(y==null)this.lX=z
else y.szQ(z)
this.X5=this.X5-1
-this.zN=this.zN+1&67108863},"call$1","glZ",2,0,null,473,[]],
-nm:[function(a){return J.v1(a)&0x3ffffff},"call$1","gtU",2,0,null,129,[]],
+this.zN=this.zN+1&67108863},"call$1","glZ",2,0,null,439,[]],
+nm:[function(a){return J.v1(a)&0x3ffffff},"call$1","gtU",2,0,null,132,[]],
aH:[function(a,b){var z,y
if(a==null)return-1
z=a.length
for(y=0;y<z;++y)if(J.de(a[y].gGc(),b))return y
-return-1},"call$2","gSP",4,0,null,470,[],129,[]],
+return-1},"call$2","gSP",4,0,null,436,[],132,[]],
$isyN:true,
-$iscX:true,
-$ascX:null},
+$isQV:true,
+$asQV:null},
ef:{
"^":"a;Gc<,DG@,zQ@"},
zQ:{
@@ -15089,7 +14451,7 @@
Yp:{
"^":"w2Y;G4",
gB:function(a){return J.q8(this.G4)},
-t:[function(a,b){return J.i4(this.G4,b)},"call$1","gIA",2,0,null,47,[]]},
+t:[function(a,b){return J.i4(this.G4,b)},"call$1","gIA",2,0,null,52,[]]},
lN:{
"^":"mW;",
tt:[function(a,b){var z,y,x,w,v
@@ -15099,20 +14461,20 @@
z=H.VM(y,[H.Kp(this,0)])}for(y=this.gA(this),x=0;y.G();x=v){w=y.gl()
v=x+1
if(x>=z.length)return H.e(z,x)
-z[x]=w}return z},function(a){return this.tt(a,!0)},"br","call$1$growable",null,"gRV",0,3,null,336,337,[]],
+z[x]=w}return z},function(a){return this.tt(a,!0)},"br","call$1$growable",null,"gRV",0,3,null,333,334,[]],
bu:[function(a){return H.mx(this,"{","}")},"call$0","gXo",0,0,null],
$isyN:true,
-$iscX:true,
-$ascX:null},
+$isQV:true,
+$asQV:null},
mW:{
"^":"a;",
-ez:[function(a,b){return H.K1(this,b,H.ip(this,"mW",0),null)},"call$1","gIr",2,0,null,115,[]],
-ev:[function(a,b){return H.VM(new H.U5(this,b),[H.ip(this,"mW",0)])},"call$1","gIR",2,0,null,115,[]],
+ez:[function(a,b){return H.K1(this,b,H.ip(this,"mW",0),null)},"call$1","gIr",2,0,null,117,[]],
+ev:[function(a,b){return H.VM(new H.U5(this,b),[H.ip(this,"mW",0)])},"call$1","gIR",2,0,null,117,[]],
tg:[function(a,b){var z
for(z=this.gA(this);z.G();)if(J.de(z.gl(),b))return!0
-return!1},"call$1","gdj",2,0,null,129,[]],
+return!1},"call$1","gdj",2,0,null,132,[]],
aN:[function(a,b){var z
-for(z=this.gA(this);z.G();)b.call$1(z.gl())},"call$1","gjw",2,0,null,115,[]],
+for(z=this.gA(this);z.G();)b.call$1(z.gl())},"call$1","gjw",2,0,null,117,[]],
zV:[function(a,b){var z,y,x
z=this.gA(this)
if(!z.G())return""
@@ -15122,18 +14484,17 @@
else{y.KF(H.d(z.gl()))
for(;z.G();){y.vM=y.vM+b
x=H.d(z.gl())
-y.vM=y.vM+x}}return y.vM},"call$1","gnr",0,2,null,333,334,[]],
+y.vM=y.vM+x}}return y.vM},"call$1","gNU",0,2,null,330,331,[]],
Vr:[function(a,b){var z
for(z=this.gA(this);z.G();)if(b.call$1(z.gl())===!0)return!0
-return!1},"call$1","gG2",2,0,null,115,[]],
-tt:[function(a,b){return P.F(this,b,H.ip(this,"mW",0))},function(a){return this.tt(a,!0)},"br","call$1$growable",null,"gRV",0,3,null,336,337,[]],
+return!1},"call$1","gG2",2,0,null,117,[]],
+tt:[function(a,b){return P.F(this,b,H.ip(this,"mW",0))},function(a){return this.tt(a,!0)},"br","call$1$growable",null,"gRV",0,3,null,333,334,[]],
gB:function(a){var z,y
z=this.gA(this)
for(y=0;z.G();)++y
return y},
gl0:function(a){return!this.gA(this).G()},
gor:function(a){return this.gl0(this)!==!0},
-eR:[function(a,b){return H.ke(this,b,H.ip(this,"mW",0))},"call$1","gZo",2,0,null,292,[]],
grZ:function(a){var z,y
z=this.gA(this)
if(!z.G())throw H.b(new P.lj("No elements"))
@@ -15142,33 +14503,33 @@
return y},
qA:[function(a,b,c){var z,y
for(z=this.gA(this);z.G();){y=z.gl()
-if(b.call$1(y)===!0)return y}throw H.b(new P.lj("No matching element"))},function(a,b){return this.qA(a,b,null)},"XG","call$2$orElse",null,"gyo",2,3,null,77,430,[],475,[]],
+if(b.call$1(y)===!0)return y}throw H.b(new P.lj("No matching element"))},function(a,b){return this.qA(a,b,null)},"XG","call$2$orElse",null,"gyo",2,3,null,82,398,[],441,[]],
Zv:[function(a,b){var z,y,x,w
if(typeof b!=="number"||Math.floor(b)!==b||b<0)throw H.b(P.N(b))
for(z=this.gA(this),y=b;z.G();){x=z.gl()
w=J.x(y)
if(w.n(y,0))return x
-y=w.W(y,1)}throw H.b(P.N(b))},"call$1","goY",2,0,null,47,[]],
+y=w.W(y,1)}throw H.b(P.N(b))},"call$1","goY",2,0,null,52,[]],
bu:[function(a){return P.FO(this)},"call$0","gXo",0,0,null],
-$iscX:true,
-$ascX:null},
+$isQV:true,
+$asQV:null},
ar:{
"^":"a+lD;",
$isList:true,
-$asWO:null,
+$aszM:null,
$isyN:true,
-$iscX:true,
-$ascX:null},
+$isQV:true,
+$asQV:null},
lD:{
"^":"a;",
gA:function(a){return H.VM(new H.a7(a,this.gB(a),0,null),[H.ip(a,"lD",0)])},
-Zv:[function(a,b){return this.t(a,b)},"call$1","goY",2,0,null,47,[]],
+Zv:[function(a,b){return this.t(a,b)},"call$1","goY",2,0,null,52,[]],
aN:[function(a,b){var z,y
z=this.gB(a)
if(typeof z!=="number")return H.s(z)
y=0
for(;y<z;++y){b.call$1(this.t(a,y))
-if(z!==this.gB(a))throw H.b(P.a4(a))}},"call$1","gjw",2,0,null,429,[]],
+if(z!==this.gB(a))throw H.b(P.a4(a))}},"call$1","gjw",2,0,null,397,[]],
gl0:function(a){return J.de(this.gB(a),0)},
gor:function(a){return!this.gl0(a)},
grZ:function(a){if(J.de(this.gB(a),0))throw H.b(new P.lj("No elements"))
@@ -15181,21 +14542,21 @@
if(typeof w!=="number")return H.s(w)
if(!(x<w))break
if(J.de(this.t(a,x),b))return!0
-if(!y.n(z,this.gB(a)))throw H.b(P.a4(a));++x}return!1},"call$1","gdj",2,0,null,129,[]],
+if(!y.n(z,this.gB(a)))throw H.b(P.a4(a));++x}return!1},"call$1","gdj",2,0,null,132,[]],
Vr:[function(a,b){var z,y
z=this.gB(a)
if(typeof z!=="number")return H.s(z)
y=0
for(;y<z;++y){if(b.call$1(this.t(a,y))===!0)return!0
-if(z!==this.gB(a))throw H.b(P.a4(a))}return!1},"call$1","gG2",2,0,null,430,[]],
+if(z!==this.gB(a))throw H.b(P.a4(a))}return!1},"call$1","gG2",2,0,null,398,[]],
zV:[function(a,b){var z
if(J.de(this.gB(a),0))return""
z=P.p9("")
z.We(a,b)
-return z.vM},"call$1","gnr",0,2,null,333,334,[]],
-ev:[function(a,b){return H.VM(new H.U5(a,b),[H.ip(a,"lD",0)])},"call$1","gIR",2,0,null,430,[]],
-ez:[function(a,b){return H.VM(new H.A8(a,b),[null,null])},"call$1","gIr",2,0,null,115,[]],
-eR:[function(a,b){return H.j5(a,b,null,null)},"call$1","gZo",2,0,null,127,[]],
+return z.vM},"call$1","gNU",0,2,null,330,331,[]],
+ev:[function(a,b){return H.VM(new H.U5(a,b),[H.ip(a,"lD",0)])},"call$1","gIR",2,0,null,398,[]],
+ez:[function(a,b){return H.VM(new H.A8(a,b),[null,null])},"call$1","gIr",2,0,null,117,[]],
+eR:[function(a,b){return H.q9(a,b,null,null)},"call$1","gZo",2,0,null,130,[]],
tt:[function(a,b){var z,y,x
if(b){z=H.VM([],[H.ip(a,"lD",0)])
C.Nm.sB(z,this.gB(a))}else{y=this.gB(a)
@@ -15208,15 +14569,15 @@
if(!(x<y))break
y=this.t(a,x)
if(x>=z.length)return H.e(z,x)
-z[x]=y;++x}return z},function(a){return this.tt(a,!0)},"br","call$1$growable",null,"gRV",0,3,null,336,337,[]],
+z[x]=y;++x}return z},function(a){return this.tt(a,!0)},"br","call$1$growable",null,"gRV",0,3,null,333,334,[]],
h:[function(a,b){var z=this.gB(a)
this.sB(a,J.WB(z,1))
-this.u(a,z,b)},"call$1","ght",2,0,null,129,[]],
+this.u(a,z,b)},"call$1","ght",2,0,null,132,[]],
FV:[function(a,b){var z,y,x
-for(z=J.GP(b);z.G();){y=z.gl()
+for(z=H.VM(new H.a7(b,b.length,0,null),[H.Kp(b,0)]);z.G();){y=z.lo
x=this.gB(a)
this.sB(a,J.WB(x,1))
-this.u(a,x,y)}},"call$1","gDY",2,0,null,114,[]],
+this.u(a,x,y)}},"call$1","gDY",2,0,null,116,[]],
Rz:[function(a,b){var z,y
z=0
while(!0){y=this.gB(a)
@@ -15224,15 +14585,15 @@
if(!(z<y))break
if(J.de(this.t(a,z),b)){this.YW(a,z,J.xH(this.gB(a),1),a,z+1)
this.sB(a,J.xH(this.gB(a),1))
-return!0}++z}return!1},"call$1","gRI",2,0,null,129,[]],
-V1:[function(a){this.sB(a,0)},"call$0","gyP",0,0,null],
-GT:[function(a,b){H.ZE(a,0,J.xH(this.gB(a),1),b)},"call$1","gH7",0,2,null,77,133,[]],
+return!0}++z}return!1},"call$1","guH",2,0,null,132,[]],
+V1:[function(a){this.sB(a,0)},"call$0","gRa",0,0,null],
+GT:[function(a,b){H.ZE(a,0,J.xH(this.gB(a),1),b)},"call$1","gH7",0,2,null,82,122,[]],
pZ:[function(a,b,c){var z=J.Wx(b)
if(z.C(b,0)||z.D(b,this.gB(a)))throw H.b(P.TE(b,0,this.gB(a)))
z=J.Wx(c)
-if(z.C(c,b)||z.D(c,this.gB(a)))throw H.b(P.TE(c,b,this.gB(a)))},"call$2","gbI",4,0,null,120,[],121,[]],
+if(z.C(c,b)||z.D(c,this.gB(a)))throw H.b(P.TE(c,b,this.gB(a)))},"call$2","gm0",4,0,null,123,[],124,[]],
D6:[function(a,b,c){var z,y,x,w
-if(c==null)c=this.gB(a)
+c=this.gB(a)
this.pZ(a,b,c)
z=J.xH(c,b)
y=H.VM([],[H.ip(a,"lD",0)])
@@ -15241,9 +14602,9 @@
x=0
for(;x<z;++x){w=this.t(a,b+x)
if(x>=y.length)return H.e(y,x)
-y[x]=w}return y},function(a,b){return this.D6(a,b,null)},"Jk","call$2",null,"gli",2,2,null,77,120,[],121,[]],
+y[x]=w}return y},function(a,b){return this.D6(a,b,null)},"Jk","call$2",null,"gli",2,2,null,82,123,[],124,[]],
Mu:[function(a,b,c){this.pZ(a,b,c)
-return H.j5(a,b,c,null)},"call$2","gYf",4,0,null,120,[],121,[]],
+return H.q9(a,b,c,null)},"call$2","gYf",4,0,null,123,[],124,[]],
YW:[function(a,b,c,d,e){var z,y,x,w
if(b>=0){z=this.gB(a)
if(typeof z!=="number")return H.s(z)
@@ -15260,20 +14621,21 @@
if(typeof x!=="number")return H.s(x)
if(e+y>x)throw H.b(new P.lj("Not enough elements"))
if(e<b)for(w=y-1;w>=0;--w)this.u(a,b+w,z.t(d,e+w))
-else for(w=0;w<y;++w)this.u(a,b+w,z.t(d,e+w))},"call$4","gaQ",6,2,null,335,120,[],121,[],114,[],122,[]],
+else for(w=0;w<y;++w)this.u(a,b+w,z.t(d,e+w))},"call$4","gam",6,2,null,332,123,[],124,[],116,[],125,[]],
XU:[function(a,b,c){var z,y
z=this.gB(a)
if(typeof z!=="number")return H.s(z)
if(c>=z)return-1
+if(c<0)c=0
y=c
while(!0){z=this.gB(a)
if(typeof z!=="number")return H.s(z)
if(!(y<z))break
-if(J.de(this.t(a,y),b))return y;++y}return-1},function(a,b){return this.XU(a,b,0)},"u8","call$2",null,"gIz",2,2,null,335,129,[],80,[]],
+if(J.de(this.t(a,y),b))return y;++y}return-1},function(a,b){return this.XU(a,b,0)},"u8","call$2",null,"gIz",2,2,null,332,132,[],85,[]],
Pk:[function(a,b,c){var z,y
c=J.xH(this.gB(a),1)
for(z=c;y=J.Wx(z),y.F(z,0);z=y.W(z,1))if(J.de(this.t(a,z),b))return z
-return-1},function(a,b){return this.Pk(a,b,null)},"cn","call$2",null,"gph",2,2,null,77,129,[],80,[]],
+return-1},function(a,b){return this.Pk(a,b,null)},"cn","call$2",null,"gcb",2,2,null,82,132,[],85,[]],
xe:[function(a,b,c){var z
if(b>=0){z=this.gB(a)
if(typeof z!=="number")return H.s(z)
@@ -15282,11 +14644,11 @@
if(b===this.gB(a)){this.h(a,c)
return}this.sB(a,J.WB(this.gB(a),1))
this.YW(a,b+1,this.gB(a),a,b)
-this.u(a,b,c)},"call$2","gQG",4,0,null,47,[],129,[]],
+this.u(a,b,c)},"call$2","gQG",4,0,null,52,[],132,[]],
KI:[function(a,b){var z=this.t(a,b)
this.YW(a,b,J.xH(this.gB(a),1),a,b+1)
this.sB(a,J.xH(this.gB(a),1))
-return z},"call$1","gNM",2,0,null,47,[]],
+return z},"call$1","gNM",2,0,null,52,[]],
bu:[function(a){var z
if($.xb().tg(0,a))return"[...]"
z=P.p9("")
@@ -15295,19 +14657,19 @@
z.We(a,", ")
z.KF("]")}finally{$.xb().Rz(0,a)}return z.gvM()},"call$0","gXo",0,0,null],
$isList:true,
-$asWO:null,
+$aszM:null,
$isyN:true,
-$iscX:true,
-$ascX:null},
+$isQV:true,
+$asQV:null},
ZQ:{
-"^":"Tp:346;a,b",
+"^":"Tp:348;a,b",
call$2:[function(a,b){var z=this.a
if(!z.a)this.b.KF(", ")
z.a=!1
z=this.b
z.KF(a)
z.KF(": ")
-z.KF(b)},"call$2",null,4,0,null,402,[],277,[],"call"],
+z.KF(b)},"call$2",null,4,0,null,442,[],272,[],"call"],
$isEH:true},
Sw:{
"^":"mW;v5,av,eZ,qT",
@@ -15319,16 +14681,17 @@
for(y=this.av;y!==this.eZ;y=(y+1&this.v5.length-1)>>>0){x=this.v5
if(y<0||y>=x.length)return H.e(x,y)
b.call$1(x[y])
-if(z!==this.qT)H.vh(P.a4(this))}},"call$1","gjw",2,0,null,429,[]],
+if(z!==this.qT)H.vh(P.a4(this))}},"call$1","gjw",2,0,null,397,[]],
gl0:function(a){return this.av===this.eZ},
-gB:function(a){return J.mQ(J.xH(this.eZ,this.av),this.v5.length-1)},
-grZ:function(a){var z,y
+gB:function(a){return(this.eZ-this.av&this.v5.length-1)>>>0},
+grZ:function(a){var z,y,x
z=this.av
y=this.eZ
if(z===y)throw H.b(new P.lj("No elements"))
z=this.v5
-y=J.mQ(J.xH(y,1),this.v5.length-1)
-if(y>=z.length)return H.e(z,y)
+x=z.length
+y=(y-1&x-1)>>>0
+if(y<0||y>=x)return H.e(z,y)
return z[y]},
Zv:[function(a,b){var z,y,x
z=J.Wx(b)
@@ -15339,81 +14702,83 @@
x=z.length
y=(y+b&x-1)>>>0
if(y<0||y>=x)return H.e(z,y)
-return z[y]},"call$1","goY",2,0,null,47,[]],
+return z[y]},"call$1","goY",2,0,null,52,[]],
tt:[function(a,b){var z,y
if(b){z=H.VM([],[H.Kp(this,0)])
C.Nm.sB(z,this.gB(this))}else{y=Array(this.gB(this))
y.fixed$length=init
-z=H.VM(y,[H.Kp(this,0)])}this.e4(z)
-return z},function(a){return this.tt(a,!0)},"br","call$1$growable",null,"gRV",0,3,null,336,337,[]],
-h:[function(a,b){this.NZ(0,b)},"call$1","ght",2,0,null,129,[]],
+z=H.VM(y,[H.Kp(this,0)])}this.wR(z)
+return z},function(a){return this.tt(a,!0)},"br","call$1$growable",null,"gRV",0,3,null,333,334,[]],
+h:[function(a,b){this.NZ(0,b)},"call$1","ght",2,0,null,132,[]],
FV:[function(a,b){var z,y,x,w,v,u,t,s,r
-z=J.x(b)
-if(typeof b==="object"&&b!==null&&(b.constructor===Array||!!z.$isList)){y=z.gB(b)
-x=this.gB(this)
-if(typeof y!=="number")return H.s(y)
-z=x+y
+z=b.length
+y=this.gB(this)
+x=y+z
w=this.v5
v=w.length
-if(z>=v){u=P.ua(z)
+if(x>=v){u=P.ua(x)
if(typeof u!=="number")return H.s(u)
w=Array(u)
w.fixed$length=init
t=H.VM(w,[H.Kp(this,0)])
-this.eZ=this.e4(t)
+this.eZ=this.wR(t)
this.v5=t
this.av=0
-H.Og(t,x,z,b,0)
-this.eZ=J.WB(this.eZ,y)}else{z=this.eZ
-if(typeof z!=="number")return H.s(z)
-s=v-z
-if(y<s){H.Og(w,z,z+y,b,0)
-this.eZ=J.WB(this.eZ,y)}else{r=y-s
-H.Og(w,z,z+s,b,0)
-z=this.v5
-H.Og(z,0,r,b,s)
-this.eZ=r}}this.qT=this.qT+1}else for(z=z.gA(b);z.G();)this.NZ(0,z.gl())},"call$1","gDY",2,0,null,476,[]],
+H.qG(t,y,x,b,0)
+this.eZ=this.eZ+z}else{x=this.eZ
+s=v-x
+if(z<s){H.qG(w,x,x+z,b,0)
+this.eZ=this.eZ+z}else{r=z-s
+H.qG(w,x,x+s,b,0)
+x=this.v5
+H.qG(x,0,r,b,s)
+this.eZ=r}}this.qT=this.qT+1},"call$1","gDY",2,0,null,443,[]],
Rz:[function(a,b){var z,y
for(z=this.av;z!==this.eZ;z=(z+1&this.v5.length-1)>>>0){y=this.v5
if(z<0||z>=y.length)return H.e(y,z)
if(J.de(y[z],b)){this.bB(z)
this.qT=this.qT+1
-return!0}}return!1},"call$1","gRI",2,0,null,6,[]],
+return!0}}return!1},"call$1","guH",2,0,null,6,[]],
V1:[function(a){var z,y,x,w,v
z=this.av
y=this.eZ
if(z!==y){for(x=this.v5,w=x.length,v=w-1;z!==y;z=(z+1&v)>>>0){if(z<0||z>=w)return H.e(x,z)
x[z]=null}this.eZ=0
this.av=0
-this.qT=this.qT+1}},"call$0","gyP",0,0,null],
+this.qT=this.qT+1}},"call$0","gRa",0,0,null],
bu:[function(a){return H.mx(this,"{","}")},"call$0","gXo",0,0,null],
-NZ:[function(a,b){var z,y
+NZ:[function(a,b){var z,y,x
z=this.v5
y=this.eZ
-if(y>>>0!==y||y>=z.length)return H.e(z,y)
+x=z.length
+if(y<0||y>=x)return H.e(z,y)
z[y]=b
-y=(y+1&this.v5.length-1)>>>0
-this.eZ=y
-if(this.av===y)this.VW()
-this.qT=this.qT+1},"call$1","gXk",2,0,null,129,[]],
+x=(y+1&x-1)>>>0
+this.eZ=x
+if(this.av===x)this.VW()
+this.qT=this.qT+1},"call$1","gXk",2,0,null,132,[]],
bB:[function(a){var z,y,x,w,v,u,t,s
-z=this.v5.length-1
-if((a-this.av&z)>>>0<J.mQ(J.xH(this.eZ,a),z)){for(y=this.av,x=this.v5,w=x.length,v=a;v!==y;v=u){u=(v-1&z)>>>0
-if(u<0||u>=w)return H.e(x,u)
-t=x[u]
-if(v<0||v>=w)return H.e(x,v)
-x[v]=t}if(y>=w)return H.e(x,y)
-x[y]=null
-this.av=(y+1&z)>>>0
-return(a+1&z)>>>0}else{y=J.mQ(J.xH(this.eZ,1),z)
-this.eZ=y
-for(x=this.v5,w=x.length,v=a;v!==y;v=s){s=(v+1&z)>>>0
-if(s<0||s>=w)return H.e(x,s)
-t=x[s]
-if(v<0||v>=w)return H.e(x,v)
-x[v]=t}if(y>=w)return H.e(x,y)
-x[y]=null
-return a}},"call$1","gzv",2,0,null,477,[]],
+z=this.v5
+y=z.length
+x=y-1
+w=this.av
+v=this.eZ
+if((a-w&x)>>>0<(v-a&x)>>>0){for(u=a;u!==w;u=t){t=(u-1&x)>>>0
+if(t<0||t>=y)return H.e(z,t)
+v=z[t]
+if(u<0||u>=y)return H.e(z,u)
+z[u]=v}if(w>=y)return H.e(z,w)
+z[w]=null
+this.av=(w+1&x)>>>0
+return(a+1&x)>>>0}else{w=(v-1&x)>>>0
+this.eZ=w
+for(u=a;u!==w;u=s){s=(u+1&x)>>>0
+if(s<0||s>=y)return H.e(z,s)
+v=z[s]
+if(u<0||u>=y)return H.e(z,u)
+z[u]=v}if(w<0||w>=y)return H.e(z,w)
+z[w]=null
+return a}},"call$1","gzv",2,0,null,444,[]],
VW:[function(){var z,y,x,w
z=Array(this.v5.length*2)
z.fixed$length=init
@@ -15421,44 +14786,38 @@
z=this.v5
x=this.av
w=z.length-x
-H.Og(y,0,w,z,x)
+H.qG(y,0,w,z,x)
z=this.av
x=this.v5
-H.Og(y,w,w+z,x,0)
+H.qG(y,w,w+z,x,0)
this.av=0
this.eZ=this.v5.length
this.v5=y},"call$0","gJm",0,0,null],
-e4:[function(a){var z,y,x,w
+wR:[function(a){var z,y,x,w,v
z=this.av
y=this.eZ
-if(typeof y!=="number")return H.s(y)
-if(z<=y){x=y-z
-z=this.v5
-y=this.av
-H.Og(a,0,x,z,y)
-return x}else{y=this.v5
-w=y.length-z
-H.Og(a,0,w,y,z)
+x=this.v5
+if(z<=y){w=y-z
+H.qG(a,0,w,x,z)
+return w}else{v=x.length-z
+H.qG(a,0,v,x,z)
z=this.eZ
-if(typeof z!=="number")return H.s(z)
y=this.v5
-H.Og(a,w,w+z,y,0)
-return J.WB(this.eZ,w)}},"call$1","gLR",2,0,null,74,[]],
-Eo:function(a,b){var z
-if(typeof 8!=="number")return H.s(8)
-z=Array(8)
+H.qG(a,v,v+z,y,0)
+return this.eZ+v}},"call$1","gLR",2,0,null,79,[]],
+Eo:function(a,b){var z=Array(8)
z.fixed$length=init
this.v5=H.VM(z,[b])},
$isyN:true,
-$iscX:true,
-$ascX:null,
+$isQV:true,
+$asQV:null,
static:{"^":"Mo",NZ:function(a,b){var z=H.VM(new P.Sw(null,0,0,0),[b])
z.Eo(a,b)
return z},ua:[function(a){var z
if(typeof a!=="number")return a.O()
a=(a<<2>>>0)-1
for(;!0;a=z){z=(a&a-1)>>>0
-if(z===0)return a}},"call$1","bD",2,0,null,192,[]]}},
+if(z===0)return a}},"call$1","bD",2,0,null,191,[]]}},
o0:{
"^":"a;Lz,pP,qT,Dc,fD",
gl:function(){return this.fD},
@@ -15480,7 +14839,7 @@
"^":"qv;P*,G3,Bb,T8",
r6:function(a,b){return this.P.call$1(b)},
$asqv:function(a,b){return[a]}},
-vX:{
+GZ:{
"^":"a;",
vh:[function(a){var z,y,x,w,v,u,t,s
z=this.aY
@@ -15516,10 +14875,10 @@
y.T8=null
y.Bb=null
this.bb=this.bb+1
-return v},"call$1","gST",2,0,null,42,[]],
+return v},"call$1","gST",2,0,null,47,[]],
Xu:[function(a){var z,y
for(z=a;y=z.T8,y!=null;z=y){z.T8=y.Bb
-y.Bb=z}return z},"call$1","gOv",2,0,null,264,[]],
+y.Bb=z}return z},"call$1","gug",2,0,null,260,[]],
bB:[function(a){var z,y,x
if(this.aY==null)return
if(!J.de(this.vh(a),0))return
@@ -15531,7 +14890,7 @@
else{y=this.Xu(y)
this.aY=y
y.T8=x}this.qT=this.qT+1
-return z},"call$1","gzv",2,0,null,42,[]],
+return z},"call$1","gzv",2,0,null,47,[]],
fS:[function(a,b){var z,y
this.P6=this.P6+1
this.qT=this.qT+1
@@ -15542,27 +14901,27 @@
a.T8=y.T8
y.T8=null}else{a.T8=y
a.Bb=y.Bb
-y.Bb=null}this.aY=a},"call$2","gSx",4,0,null,264,[],478,[]]},
+y.Bb=null}this.aY=a},"call$2","gSx",4,0,null,260,[],445,[]]},
Ba:{
-"^":"vX;Cw,ac,aY,iW,P6,qT,bb",
+"^":"GZ;Cw,ac,aY,iW,P6,qT,bb",
wS:function(a,b){return this.Cw.call$2(a,b)},
Ef:function(a){return this.ac.call$1(a)},
-yV:[function(a,b){return this.wS(a,b)},"call$2","gcd",4,0,null,479,[],480,[]],
+yV:[function(a,b){return this.wS(a,b)},"call$2","gNA",4,0,null,446,[],447,[]],
t:[function(a,b){if(b==null)throw H.b(new P.AT(b))
if(this.Ef(b)!==!0)return
if(this.aY!=null)if(J.de(this.vh(b),0))return this.aY.P
-return},"call$1","gIA",2,0,null,42,[]],
+return},"call$1","gIA",2,0,null,47,[]],
Rz:[function(a,b){var z
if(this.Ef(b)!==!0)return
z=this.bB(b)
if(z!=null)return z.P
-return},"call$1","gRI",2,0,null,42,[]],
+return},"call$1","guH",2,0,null,47,[]],
u:[function(a,b,c){var z
if(b==null)throw H.b(new P.AT(b))
z=this.vh(b)
if(J.de(z,0)){this.aY.P=c
-return}this.fS(H.VM(new P.jp(c,b,null,null),[null,null]),z)},"call$2","gj3",4,0,null,42,[],23,[]],
-FV:[function(a,b){J.kH(b,new P.bF(this))},"call$1","gDY",2,0,null,104,[]],
+return}this.fS(H.VM(new P.jp(c,b,null,null),[null,null]),z)},"call$2","gj3",4,0,null,47,[],28,[]],
+FV:[function(a,b){H.bQ(b,new P.bF(this))},"call$1","gDY",2,0,null,109,[]],
gl0:function(a){return this.aY==null},
gor:function(a){return this.aY!=null},
aN:[function(a,b){var z,y,x
@@ -15571,20 +14930,20 @@
y.Qf(this,[P.qv,z])
for(;y.G();){x=y.gl()
z=J.RE(x)
-b.call$2(z.gG3(x),z.gP(x))}},"call$1","gjw",2,0,null,115,[]],
+b.call$2(z.gG3(x),z.gP(x))}},"call$1","gjw",2,0,null,117,[]],
gB:function(a){return this.P6},
V1:[function(a){this.aY=null
this.P6=0
-this.qT=this.qT+1},"call$0","gyP",0,0,null],
-x4:[function(a){return this.Ef(a)===!0&&J.de(this.vh(a),0)},"call$1","gV9",2,0,null,42,[]],
-di:[function(a){return new P.LD(this,a,this.bb).call$1(this.aY)},"call$1","gmc",2,0,null,23,[]],
+this.qT=this.qT+1},"call$0","gRa",0,0,null],
+x4:[function(a){return this.Ef(a)===!0&&J.de(this.vh(a),0)},"call$1","gV9",2,0,null,47,[]],
+di:[function(a){return new P.BW(this,a,this.bb).call$1(this.aY)},"call$1","gmc",2,0,null,28,[]],
gvc:function(a){return H.VM(new P.OG(this),[H.Kp(this,0)])},
gUQ:function(a){var z=new P.uM(this)
z.$builtinTypeInfo=this.$builtinTypeInfo
return z},
bu:[function(a){return P.vW(this)},"call$0","gXo",0,0,null],
$isBa:true,
-$asvX:function(a,b){return[a]},
+$asGZ:function(a,b){return[a]},
$asZ0:null,
$isZ0:true,
static:{GV:function(a,b,c,d){var z,y
@@ -15592,47 +14951,47 @@
y=new P.An(c)
return H.VM(new P.Ba(z,y,null,H.VM(new P.qv(null,null,null),[c]),0,0,0),[c,d])}}},
An:{
-"^":"Tp:107;a",
-call$1:[function(a){var z=H.Gq(a,this.a)
-return z},"call$1",null,2,0,null,277,[],"call"],
+"^":"Tp:112;a",
+call$1:[function(a){var z=H.XY(a,this.a)
+return z},"call$1",null,2,0,null,272,[],"call"],
$isEH:true},
bF:{
"^":"Tp;a",
-call$2:[function(a,b){this.a.u(0,a,b)},"call$2",null,4,0,null,42,[],23,[],"call"],
+call$2:[function(a,b){this.a.u(0,a,b)},"call$2",null,4,0,null,47,[],28,[],"call"],
$isEH:true,
$signature:function(){return H.IG(function(a,b){return{func:"ri",args:[a,b]}},this.a,"Ba")}},
-LD:{
-"^":"Tp:481;a,b,c",
+BW:{
+"^":"Tp:448;a,b,c",
call$1:[function(a){var z,y,x,w
for(z=this.c,y=this.a,x=this.b;a!=null;){if(J.de(a.P,x))return!0
if(z!==y.bb)throw H.b(P.a4(y))
w=a.T8
if(w!=null&&this.call$1(w)===!0)return!0
-a=a.Bb}return!1},"call$1",null,2,0,null,264,[],"call"],
+a=a.Bb}return!1},"call$1",null,2,0,null,260,[],"call"],
$isEH:true},
S6B:{
"^":"a;",
gl:function(){var z=this.ya
if(z==null)return
return this.Wb(z)},
-WV:[function(a){var z
-for(z=this.Ln;a!=null;){z.push(a)
-a=a.Bb}},"call$1","gBl",2,0,null,264,[]],
+p0:[function(a){var z
+for(z=this.Jt;a!=null;){z.push(a)
+a=a.Bb}},"call$1","gBl",2,0,null,260,[]],
G:[function(){var z,y,x
z=this.Dn
if(this.qT!==z.qT)throw H.b(P.a4(z))
-y=this.Ln
+y=this.Jt
if(y.length===0){this.ya=null
return!1}if(z.bb!==this.bb&&this.ya!=null){x=this.ya
C.Nm.sB(y,0)
-if(x==null)this.WV(z.aY)
+if(x==null)this.p0(z.aY)
else{z.vh(x.G3)
-this.WV(z.aY.T8)}}if(0>=y.length)return H.e(y,0)
+this.p0(z.aY.T8)}}if(0>=y.length)return H.e(y,0)
z=y.pop()
this.ya=z
-this.WV(z.T8)
+this.p0(z.T8)
return!0},"call$0","gqy",0,0,null],
-Qf:function(a,b){this.WV(a.aY)}},
+Qf:function(a,b){this.p0(a.aY)}},
OG:{
"^":"mW;Dn",
gB:function(a){return this.Dn.P6},
@@ -15655,39 +15014,36 @@
y.Qf(z,H.Kp(this,1))
return y},
$asmW:function(a,b){return[b]},
-$ascX:function(a,b){return[b]},
+$asQV:function(a,b){return[b]},
$isyN:true},
DN:{
-"^":"S6B;Dn,Ln,qT,bb,ya",
-Wb:[function(a){return a.G3},"call$1","gBL",2,0,null,264,[]]},
+"^":"S6B;Dn,Jt,qT,bb,ya",
+Wb:[function(a){return a.G3},"call$1","gBL",2,0,null,260,[]]},
ZM:{
-"^":"S6B;Dn,Ln,qT,bb,ya",
-Wb:[function(a){return a.P},"call$1","gBL",2,0,null,264,[]],
+"^":"S6B;Dn,Jt,qT,bb,ya",
+Wb:[function(a){return a.P},"call$1","gBL",2,0,null,260,[]],
$asS6B:function(a,b){return[b]}},
HW:{
-"^":"S6B;Dn,Ln,qT,bb,ya",
-Wb:[function(a){return a},"call$1","gBL",2,0,null,264,[]],
+"^":"S6B;Dn,Jt,qT,bb,ya",
+Wb:[function(a){return a},"call$1","gBL",2,0,null,260,[]],
$asS6B:function(a){return[[P.qv,a]]}}}],["dart.convert","dart:convert",,P,{
"^":"",
VQ:[function(a,b){var z=new P.JC()
-return z.call$2(null,new P.f1(z).call$1(a))},"call$2","os",4,0,null,193,[],194,[]],
+return z.call$2(null,new P.f1(z).call$1(a))},"call$2","os",4,0,null,192,[],193,[]],
BS:[function(a,b){var z,y,x,w
x=a
if(typeof x!=="string")throw H.b(new P.AT(a))
z=null
try{z=JSON.parse(a)}catch(w){x=H.Ru(w)
y=x
-throw H.b(P.cD(String(y)))}return P.VQ(z,b)},"call$2","H44",4,0,null,27,[],194,[]],
-tp:[function(a){return a.Lt()},"call$1","BC",2,0,195,6,[]],
-Md:[function(a){a.i(0,64512)
-return!1},"call$1","bO",2,0,null,13,[]],
-ZZ:[function(a,b){return(65536+(a.i(0,1023)<<10>>>0)|b&1023)>>>0},"call$2","hz",4,0,null,198,[],199,[]],
+throw H.b(P.cD(String(y)))}return P.VQ(z,b)},"call$2","H4",4,0,null,32,[],193,[]],
+tp:[function(a){return a.Lt()},"call$1","BC",2,0,194,6,[]],
JC:{
-"^":"Tp:346;",
-call$2:[function(a,b){return b},"call$2",null,4,0,null,42,[],23,[],"call"],
+"^":"Tp:348;",
+call$2:[function(a,b){return b},"call$2",null,4,0,null,47,[],28,[],"call"],
$isEH:true},
f1:{
-"^":"Tp:107;a",
+"^":"Tp:112;a",
call$1:[function(a){var z,y,x,w,v,u,t
if(a==null||typeof a!="object")return a
if(Object.getPrototypeOf(a)===Array.prototype){z=a
@@ -15697,96 +15053,48 @@
for(y=this.a,x=0;x<w.length;++x){u=w[x]
v.u(0,u,y.call$2(u,this.call$1(a[u])))}t=a.__proto__
if(typeof t!=="undefined"&&t!==Object.prototype)v.u(0,"__proto__",y.call$2("__proto__",this.call$1(t)))
-return v},"call$1",null,2,0,null,18,[],"call"],
+return v},"call$1",null,2,0,null,19,[],"call"],
$isEH:true},
Uk:{
"^":"a;"},
-wI:{
+zF:{
"^":"a;"},
Zi:{
"^":"Uk;",
$asUk:function(){return[J.O,[J.Q,J.im]]}},
Ud:{
-"^":"Ge;Pc,FN",
+"^":"Ge;Ct,FN",
bu:[function(a){if(this.FN!=null)return"Converting object to an encodable object failed."
else return"Converting object did not return an encodable object."},"call$0","gXo",0,0,null],
-static:{ox:function(a,b){return new P.Ud(a,b)}}},
+static:{NM:function(a,b){return new P.Ud(a,b)}}},
K8:{
-"^":"Ud;Pc,FN",
+"^":"Ud;Ct,FN",
bu:[function(a){return"Cyclic error in JSON stringify"},"call$0","gXo",0,0,null],
static:{TP:function(a){return new P.K8(a,null)}}},
by:{
"^":"Uk;N5,iY",
-pW:[function(a,b){return P.BS(a,this.gHe().N5)},function(a){return this.pW(a,null)},"kV","call$2$reviver",null,"gzL",2,3,null,77,27,[],194,[]],
-PN:[function(a,b){return P.Vg(a,this.gZE().Xi)},function(a){return this.PN(a,null)},"KP","call$2$toEncodable",null,"gV0",2,3,null,77,23,[],196,[]],
+c8:[function(a,b){return P.BS(a,this.gHe().N5)},function(a){return this.c8(a,null)},"kV","call$2$reviver",null,"gzL",2,3,null,82,32,[],193,[]],
+Co:[function(a,b){return P.Ks(a,this.gZE().Xi)},function(a){return this.Co(a,null)},"KP","call$2$toEncodable",null,"gV0",2,3,null,82,28,[],195,[]],
gZE:function(){return C.Ap},
gHe:function(){return C.A3},
$asUk:function(){return[P.a,J.O]}},
pD:{
-"^":"wI;Xi",
-$aswI:function(){return[P.a,J.O]}},
+"^":"zF;Xi",
+$aszF:function(){return[P.a,J.O]}},
Cf:{
-"^":"wI;N5",
-$aswI:function(){return[J.O,P.a]}},
+"^":"zF;N5",
+$aszF:function(){return[J.O,P.a]}},
Sh:{
-"^":"a;WE,Mw,JN",
-Tt:function(a){return this.WE.call$1(a)},
-WD:[function(a){var z=this.JN
-if(z.tg(0,a))throw H.b(P.TP(a))
-z.h(0,a)},"call$1","gUW",2,0,null,6,[]],
-rl:[function(a){var z,y,x,w,v
-if(!this.IS(a)){x=a
-w=this.JN
-if(w.tg(0,x))H.vh(P.TP(x))
-w.h(0,x)
-try{z=this.Tt(a)
-if(!this.IS(z)){x=P.ox(a,null)
-throw H.b(x)}w.Rz(0,a)}catch(v){x=H.Ru(v)
-y=x
-throw H.b(P.ox(a,y))}}},"call$1","gO5",2,0,null,6,[]],
-IS:[function(a){var z,y,x,w
-z={}
-if(typeof a==="number"){if(!C.CD.gx8(a))return!1
-this.Mw.KF(C.CD.bu(a))
-return!0}else if(a===!0){this.Mw.KF("true")
-return!0}else if(a===!1){this.Mw.KF("false")
-return!0}else if(a==null){this.Mw.KF("null")
-return!0}else if(typeof a==="string"){z=this.Mw
-z.KF("\"")
-P.NY(z,a)
-z.KF("\"")
-return!0}else{y=J.x(a)
-if(typeof a==="object"&&a!==null&&(a.constructor===Array||!!y.$isList)){this.WD(a)
-z=this.Mw
-z.KF("[")
-if(J.z8(y.gB(a),0)){this.rl(y.t(a,0))
-x=1
-while(!0){w=y.gB(a)
-if(typeof w!=="number")return H.s(w)
-if(!(x<w))break
-z.vM=z.vM+","
-this.rl(y.t(a,x));++x}}z.KF("]")
-this.JN.Rz(0,a)
-return!0}else if(typeof a==="object"&&a!==null&&!!y.$isZ0){this.WD(a)
-w=this.Mw
-w.KF("{")
-z.a=!0
-y.aN(a,new P.tF(z,this))
-w.KF("}")
-this.JN.Rz(0,a)
-return!0}else return!1}},"call$1","gjQ",2,0,null,6,[]],
-static:{"^":"P3,Ib,IE,Yz,ij,fg,SW,KQz,MU,ql,NXu,CE,QVv",Vg:[function(a,b){var z
-b=P.BC()
-z=P.p9("")
-new P.Sh(b,z,P.yv(null)).rl(a)
-return z.vM},"call$2","ab",4,0,null,6,[],196,[]],NY:[function(a,b){var z,y,x,w,v,u,t
-z=J.U6(b)
-y=z.gB(b)
+"^":"a;iY,Vy,qi",
+Wt:function(a){return this.iY.call$1(a)},
+aK:[function(a){var z,y,x,w,v,u,t
+z=J.U6(a)
+y=z.gB(a)
x=H.VM([],[J.im])
if(typeof y!=="number")return H.s(y)
w=!1
v=0
-for(;v<y;++v){u=z.j(b,v)
+for(;v<y;++v){u=z.j(a,v)
if(u<32){x.push(92)
switch(u){case 8:x.push(98)
break
@@ -15809,81 +15117,156 @@
x.push(t<10?48+t:87+t)
break}w=!0}else if(u===34||u===92){x.push(92)
x.push(u)
-w=!0}else x.push(u)}a.KF(w?P.HM(x):b)},"call$2","qW",4,0,null,197,[],86,[]]}},
+w=!0}else x.push(u)}z=w?P.HM(x):a
+this.Vy.KF(z)},"call$1","gOx",2,0,null,91,[]],
+WD:[function(a){var z=this.qi
+if(z.tg(0,a))throw H.b(P.TP(a))
+z.h(0,a)},"call$1","gUW",2,0,null,6,[]],
+rl:[function(a){var z,y,x,w,v
+if(!this.IS(a)){x=a
+w=this.qi
+if(w.tg(0,x))H.vh(P.TP(x))
+w.h(0,x)
+try{z=this.Wt(a)
+if(!this.IS(z)){x=P.NM(a,null)
+throw H.b(x)}w.Rz(0,a)}catch(v){x=H.Ru(v)
+y=x
+throw H.b(P.NM(a,y))}}},"call$1","gO5",2,0,null,6,[]],
+IS:[function(a){var z,y,x,w
+z={}
+if(typeof a==="number"){if(!C.CD.gx8(a))return!1
+this.Vy.KF(C.CD.bu(a))
+return!0}else if(a===!0){this.Vy.KF("true")
+return!0}else if(a===!1){this.Vy.KF("false")
+return!0}else if(a==null){this.Vy.KF("null")
+return!0}else if(typeof a==="string"){z=this.Vy
+z.KF("\"")
+this.aK(a)
+z.KF("\"")
+return!0}else{y=J.x(a)
+if(typeof a==="object"&&a!==null&&(a.constructor===Array||!!y.$isList)){this.WD(a)
+z=this.Vy
+z.KF("[")
+if(J.z8(y.gB(a),0)){this.rl(y.t(a,0))
+x=1
+while(!0){w=y.gB(a)
+if(typeof w!=="number")return H.s(w)
+if(!(x<w))break
+z.vM=z.vM+","
+this.rl(y.t(a,x));++x}}z.KF("]")
+this.qi.Rz(0,a)
+return!0}else if(typeof a==="object"&&a!==null&&!!y.$isZ0){this.WD(a)
+w=this.Vy
+w.KF("{")
+z.a=!0
+y.aN(a,new P.tF(z,this))
+w.KF("}")
+this.qi.Rz(0,a)
+return!0}else return!1}},"call$1","gjQ",2,0,null,6,[]],
+static:{"^":"P3,Ib,FC,Yz,ij,fg,SW,eJ,MU,ql,NXu,PBv,QVv",Ks:[function(a,b){var z
+b=P.BC()
+z=P.p9("")
+new P.Sh(b,z,P.yv(null)).rl(a)
+return z.vM},"call$2","nB",4,0,null,6,[],195,[]]}},
tF:{
-"^":"Tp:482;a,b",
+"^":"Tp:449;a,b",
call$2:[function(a,b){var z,y,x
z=this.a
y=this.b
-if(!z.a){x=y.Mw
-x.KF(",\"")}else{x=y.Mw
-x.KF("\"")}P.NY(x,a)
+if(!z.a){x=y.Vy
+x.KF(",\"")}else{x=y.Vy
+x.KF("\"")}y.aK(a)
x.KF("\":")
y.rl(b)
-z.a=!1},"call$2",null,4,0,null,42,[],23,[],"call"],
+z.a=!1},"call$2",null,4,0,null,47,[],28,[],"call"],
$isEH:true},
z0:{
"^":"Zi;lH",
goc:function(a){return"utf-8"},
gZE:function(){return new P.E3()}},
E3:{
-"^":"wI;",
+"^":"zF;",
WJ:[function(a){var z,y,x
-z=a.gB(a)
-y=H.VM(Array(z.U(0,3)),[J.im])
+z=J.U6(a)
+y=J.vX(z.gB(a),3)
+if(typeof y!=="number")return H.s(y)
+y=H.VM(Array(y),[J.im])
x=new P.Rw(0,0,y)
-x.fJ(a,0,z)
-x.Lb(a.j(0,z.W(0,1)),0)
-return C.Nm.D6(y,0,x.ZP)},"call$1","gmC",2,0,null,26,[]],
-$aswI:function(){return[J.O,[J.Q,J.im]]}},
+if(x.fJ(a,0,z.gB(a))!==z.gB(a))x.Lb(z.j(a,J.xH(z.gB(a),1)),0)
+return C.Nm.D6(y,0,x.ZP)},"call$1","gj5",2,0,null,31,[]],
+$aszF:function(){return[J.O,[J.Q,J.im]]}},
Rw:{
-"^":"a;vn,ZP,EN",
-Lb:[function(a,b){var z,y,x,w
-if((b&64512)===56320)P.ZZ(a,b)
-else{z=this.EN
+"^":"a;WF,ZP,EN",
+Lb:[function(a,b){var z,y,x,w,v
+z=this.EN
y=this.ZP
+if((b&64512)===56320){x=65536+((a&1023)<<10>>>0)|b&1023
+w=y+1
+this.ZP=w
+v=z.length
+if(y>=v)return H.e(z,y)
+z[y]=(240|x>>>18)>>>0
+y=w+1
+this.ZP=y
+if(w>=v)return H.e(z,w)
+z[w]=128|x>>>12&63
+w=y+1
+this.ZP=w
+if(y>=v)return H.e(z,y)
+z[y]=128|x>>>6&63
+this.ZP=w+1
+if(w>=v)return H.e(z,w)
+z[w]=128|x&63
+return!0}else{w=y+1
+this.ZP=w
+v=z.length
+if(y>=v)return H.e(z,y)
+z[y]=224|a>>>12
+y=w+1
+this.ZP=y
+if(w>=v)return H.e(z,w)
+z[w]=128|a>>>6&63
this.ZP=y+1
-x=C.jn.k(224,a.m(0,12))
-w=z.length
-if(y>=w)return H.e(z,y)
-z[y]=x
-x=this.ZP
-this.ZP=x+1
-y=a.m(0,6).i(0,63)
-if(x>=w)return H.e(z,x)
-z[x]=128|y
-y=this.ZP
-this.ZP=y+1
-x=a.i(0,63)
-if(y>=w)return H.e(z,y)
-z[y]=128|x
-return!1}},"call$2","gkL",4,0,null,483,[],484,[]],
-fJ:[function(a,b,c){var z,y,x,w,v,u
-P.Md(a.j(0,c.W(0,1)))
-for(z=this.EN,y=z.length,x=b;C.jn.C(x,c);++x){w=a.j(0,x)
-w.E(0,127)
-P.Md(w)
-w.E(0,2047)
-v=this.ZP
-if(v+2>=y)break
-this.ZP=v+1
-u=C.jn.k(224,w.m(0,12))
-if(v>=y)return H.e(z,v)
-z[v]=u
-u=this.ZP
+if(y>=v)return H.e(z,y)
+z[y]=128|a&63
+return!1}},"call$2","gkL",4,0,null,450,[],451,[]],
+fJ:[function(a,b,c){var z,y,x,w,v,u,t,s
+if(b!==c&&(J.lE(a,J.xH(c,1))&64512)===55296)c=J.xH(c,1)
+if(typeof c!=="number")return H.s(c)
+z=this.EN
+y=z.length
+x=J.rY(a)
+w=b
+for(;w<c;++w){v=x.j(a,w)
+if(v<=127){u=this.ZP
+if(u>=y)break
this.ZP=u+1
-v=w.m(0,6).i(0,63)
+z[u]=v}else if((v&64512)===55296){if(this.ZP+3>=y)break
+t=w+1
+if(this.Lb(v,x.j(a,t)))w=t}else if(v<=2047){u=this.ZP
+s=u+1
+if(s>=y)break
+this.ZP=s
if(u>=y)return H.e(z,u)
-z[u]=128|v
-v=this.ZP
-this.ZP=v+1
-u=w.i(0,63)
-if(v>=y)return H.e(z,v)
-z[v]=128|u}return x},"call$3","gkH",6,0,null,339,[],120,[],121,[]],
-static:{"^":"Jf4"}}}],["dart.core","dart:core",,P,{
+z[u]=192|v>>>6
+this.ZP=s+1
+z[s]=128|v&63}else{u=this.ZP
+if(u+2>=y)break
+s=u+1
+this.ZP=s
+if(u>=y)return H.e(z,u)
+z[u]=224|v>>>12
+u=s+1
+this.ZP=u
+if(s>=y)return H.e(z,s)
+z[s]=128|v>>>6&63
+this.ZP=u+1
+if(u>=y)return H.e(z,u)
+z[u]=128|v&63}}return w},"call$3","gkH",6,0,null,336,[],123,[],124,[]],
+static:{"^":"Ni"}}}],["dart.core","dart:core",,P,{
"^":"",
-Te:[function(a){return},"call$1","PM",2,0,null,44,[]],
-Wc:[function(a,b){return J.oE(a,b)},"call$2","n4",4,0,200,128,[],188,[]],
+Te:[function(a){return},"call$1","Ex",2,0,null,49,[]],
+Wc:[function(a,b){return J.oE(a,b)},"call$2","n4",4,0,196,131,[],187,[]],
hl:[function(a){var z,y,x,w,v,u
if(typeof a==="number"||typeof a==="boolean"||null==a)return J.AG(a)
if(typeof a==="string"){z=new P.Rn("")
@@ -15909,44 +15292,38 @@
z.vM=y
return y}return"Instance of '"+H.lh(a)+"'"},"call$1","Zx",2,0,null,6,[]],
FM:function(a){return new P.HG(a)},
-ad:[function(a,b){return a==null?b==null:a===b},"call$2","N3",4,0,202,128,[],188,[]],
-xv:[function(a){return H.CU(a)},"call$1","J2",2,0,203,6,[]],
-QA:[function(a,b,c){return H.BU(a,c,b)},function(a){return P.QA(a,null,null)},null,function(a,b){return P.QA(a,b,null)},null,"call$3$onError$radix","call$1","call$2$onError","ya",2,5,204,77,77,27,[],164,[],28,[]],
+ad:[function(a,b){return a==null?b==null:a===b},"call$2","N3",4,0,199,131,[],187,[]],
+NS:[function(a){return H.CU(a)},"call$1","cE",2,0,200,6,[]],
+QA:[function(a,b,c){return H.BU(a,c,b)},function(a){return P.QA(a,null,null)},null,function(a,b){return P.QA(a,b,null)},null,"call$3$onError$radix","call$1","call$2$onError","ya",2,5,201,82,82,32,[],33,[],163,[]],
O8:function(a,b,c){var z,y,x
z=J.Qi(a,c)
if(a!==0&&b!=null)for(y=z.length,x=0;x<y;++x)z[x]=b
return z},
-F:function(a,b,c){var z,y,x,w,v,u,t
+F:function(a,b,c){var z,y
z=H.VM([],[c])
for(y=J.GP(a);y.G();)z.push(y.gl())
if(b)return z
-x=z.length
-y=Array(x)
-y.fixed$length=init
-w=H.VM(y,[c])
-for(y=z.length,v=w.length,u=0;u<x;++u){if(u>=y)return H.e(z,u)
-t=z[u]
-if(u>=v)return H.e(w,u)
-w[u]=t}return w},
+z.fixed$length=init
+return z},
JS:[function(a){var z,y
z=H.d(a)
y=$.oK
if(y==null)H.qw(z)
-else y.call$1(z)},"call$1","Qki",2,0,null,6,[]],
+else y.call$1(z)},"call$1","Pl",2,0,null,6,[]],
HM:function(a){return H.eT(a)},
fc:function(a){return P.HM(P.O8(1,a,J.im))},
HB:{
-"^":"Tp:346;a",
-call$2:[function(a,b){this.a.u(0,a.gfN(a),b)},"call$2",null,4,0,null,134,[],23,[],"call"],
+"^":"Tp:348;a",
+call$2:[function(a,b){this.a.u(0,a.gfN(a),b)},"call$2",null,4,0,null,136,[],28,[],"call"],
$isEH:true},
CL:{
-"^":"Tp:436;a",
+"^":"Tp:404;a",
call$2:[function(a,b){var z=this.a
if(z.b>0)z.a.KF(", ")
z.a.KF(J.GL(a))
z.a.KF(": ")
z.a.KF(P.hl(b))
-z.b=z.b+1},"call$2",null,4,0,null,42,[],23,[],"call"],
+z.b=z.b+1},"call$2",null,4,0,null,47,[],28,[],"call"],
$isEH:true},
p4:{
"^":"a;OF",
@@ -15955,7 +15332,7 @@
"^":"a;",
bu:[function(a){return this?"true":"false"},"call$0","gXo",0,0,null],
$isbool:true},
-Rz:{
+Tx:{
"^":"a;"},
iP:{
"^":"a;y3<,aL",
@@ -15963,29 +15340,26 @@
if(b==null)return!1
z=J.x(b)
if(typeof b!=="object"||b===null||!z.$isiP)return!1
-return this.y3===b.y3&&this.aL===b.aL},"call$1","gUJ",2,0,null,104,[]],
-iM:[function(a,b){return C.CD.iM(this.y3,b.gy3())},"call$1","gYc",2,0,null,104,[]],
+return this.y3===b.y3&&this.aL===b.aL},"call$1","gUJ",2,0,null,109,[]],
+iM:[function(a,b){return C.CD.iM(this.y3,b.gy3())},"call$1","gYc",2,0,null,109,[]],
giO:function(a){return this.y3},
-bu:[function(a){var z,y,x,w,v,u,t,s,r,q
-z=new P.B5()
-y=this.aL
-x=y?H.o2(this).getUTCFullYear()+0:H.o2(this).getFullYear()+0
-w=new P.Hn().call$1(x)
-v=z.call$1(y?H.o2(this).getUTCMonth()+1:H.o2(this).getMonth()+1)
-u=z.call$1(y?H.o2(this).getUTCDate()+0:H.o2(this).getDate()+0)
-t=z.call$1(y?H.o2(this).getUTCHours()+0:H.o2(this).getHours()+0)
-s=z.call$1(y?H.o2(this).getUTCMinutes()+0:H.o2(this).getMinutes()+0)
-r=z.call$1(y?H.o2(this).getUTCSeconds()+0:H.o2(this).getSeconds()+0)
-z=y?H.o2(this).getUTCMilliseconds()+0:H.o2(this).getMilliseconds()+0
-q=new P.Zl().call$1(z)
-if(y)return H.d(w)+"-"+H.d(v)+"-"+H.d(u)+" "+H.d(t)+":"+H.d(s)+":"+H.d(r)+"."+H.d(q)+"Z"
-else return H.d(w)+"-"+H.d(v)+"-"+H.d(u)+" "+H.d(t)+":"+H.d(s)+":"+H.d(r)+"."+H.d(q)},"call$0","gXo",0,0,null],
-h:[function(a,b){return P.Wu(this.y3+b.gVs(),this.aL)},"call$1","ght",2,0,null,167,[]],
+bu:[function(a){var z,y,x,w,v,u,t,s
+z=this.aL
+y=P.Gq(z?H.o2(this).getUTCFullYear()+0:H.o2(this).getFullYear()+0)
+x=P.h0(z?H.o2(this).getUTCMonth()+1:H.o2(this).getMonth()+1)
+w=P.h0(z?H.o2(this).getUTCDate()+0:H.o2(this).getDate()+0)
+v=P.h0(z?H.o2(this).getUTCHours()+0:H.o2(this).getHours()+0)
+u=P.h0(z?H.o2(this).getUTCMinutes()+0:H.o2(this).getMinutes()+0)
+t=P.h0(z?H.o2(this).getUTCSeconds()+0:H.o2(this).getSeconds()+0)
+s=P.Vx(z?H.o2(this).getUTCMilliseconds()+0:H.o2(this).getMilliseconds()+0)
+if(z)return y+"-"+x+"-"+w+" "+v+":"+u+":"+t+"."+s+"Z"
+else return y+"-"+x+"-"+w+" "+v+":"+u+":"+t+"."+s},"call$0","gXo",0,0,null],
+h:[function(a,b){return P.Wu(this.y3+b.gVs(),this.aL)},"call$1","ght",2,0,null,166,[]],
EK:function(){H.o2(this)},
RM:function(a,b){if(Math.abs(a)>8640000000000000)throw H.b(new P.AT(a))},
$isiP:true,
-static:{"^":"aV,bI,dfk,Kw,h2,mo,EQe,NXt,tp1,Xs,k3,cR,Oq,fH,Ne,Nr,bmS,lX,hZ,PW,dM,lme",Gl:[function(a){var z,y,x,w,v,u,t,s,r,q,p,o,n
-z=new H.VR(H.v4("^([+-]?\\d?\\d\\d\\d\\d)-?(\\d\\d)-?(\\d\\d)(?:[ T](\\d\\d)(?::?(\\d\\d)(?::?(\\d\\d)(.\\d{1,6})?)?)?( ?[zZ]| ?\\+00(?::?00)?)?)?$",!1,!0,!1),null,null).ej(a)
+static:{"^":"aV,bI,Hq,Kw,oA,mo,EQe,DU,tp1,Gi,fo,cR,Sx,KeL,Ne,Nr,bm,FI,hZ,PW,dM,lme",Gl:[function(a){var z,y,x,w,v,u,t,s,r,q,p,o,n,m,l,k,j
+z=new H.VR(H.v4("^([+-]?\\d{4,5})-?(\\d\\d)-?(\\d\\d)(?:[ T](\\d\\d)(?::?(\\d\\d)(?::?(\\d\\d)(.\\d{1,6})?)?)?( ?[zZ]| ?([-+])(\\d\\d)(?::?(\\d\\d))?)?)?$",!1,!0,!1),null,null).ej(a)
if(z!=null){y=new P.MF()
x=z.QK
if(1>=x.length)return H.e(x,1)
@@ -16001,68 +15375,65 @@
if(6>=x.length)return H.e(x,6)
r=y.call$1(x[6])
if(7>=x.length)return H.e(x,7)
-q=J.LL(J.p0(new P.Rq().call$1(x[7]),1000))
+q=J.LL(J.vX(new P.Rq().call$1(x[7]),1000))
if(q===1000){p=!0
q=999}else p=!1
-if(8>=x.length)return H.e(x,8)
-o=x[8]!=null
-n=H.zW(w,v,u,t,s,r,q,o)
-return P.Wu(p?n+1:n,o)}else throw H.b(P.cD(a))},"call$1","zZ",2,0,null,201,[]],Wu:function(a,b){var z=new P.iP(a,b)
+o=x.length
+if(8>=o)return H.e(x,8)
+if(x[8]!=null){if(9>=o)return H.e(x,9)
+o=x[9]
+if(o!=null){n=J.de(o,"-")?-1:1
+if(10>=x.length)return H.e(x,10)
+m=H.BU(x[10],null,null)
+if(11>=x.length)return H.e(x,11)
+l=y.call$1(x[11])
+if(typeof m!=="number")return H.s(m)
+l=J.WB(l,60*m)
+if(typeof l!=="number")return H.s(l)
+s=J.xH(s,n*l)}k=!0}else k=!1
+j=H.zW(w,v,u,t,s,r,q,k)
+return P.Wu(p?j+1:j,k)}else throw H.b(P.cD(a))},"call$1","le",2,0,null,197,[]],Wu:function(a,b){var z=new P.iP(a,b)
z.RM(a,b)
-return z},Gi:function(){var z=new P.iP(Date.now(),!1)
-z.EK()
-return z}}},
-MF:{
-"^":"Tp:486;",
-call$1:[function(a){if(a==null)return 0
-return H.BU(a,null,null)},"call$1",null,2,0,null,485,[],"call"],
-$isEH:true},
-Rq:{
-"^":"Tp:487;",
-call$1:[function(a){if(a==null)return 0
-return H.IH(a,null)},"call$1",null,2,0,null,485,[],"call"],
-$isEH:true},
-Hn:{
-"^":"Tp:444;",
-call$1:[function(a){var z,y
+return z},Gq:[function(a){var z,y
z=Math.abs(a)
y=a<0?"-":""
if(z>=1000)return""+a
if(z>=100)return y+"0"+H.d(z)
if(z>=10)return y+"00"+H.d(z)
-return y+"000"+H.d(z)},"call$1",null,2,0,null,292,[],"call"],
-$isEH:true},
-Zl:{
-"^":"Tp:444;",
-call$1:[function(a){if(a>=100)return""+a
+return y+"000"+H.d(z)},"call$1","Cp",2,0,null,198,[]],Vx:[function(a){if(a>=100)return""+a
if(a>=10)return"0"+a
-return"00"+a},"call$1",null,2,0,null,292,[],"call"],
+return"00"+a},"call$1","Dv",2,0,null,198,[]],h0:[function(a){if(a>=10)return""+a
+return"0"+a},"call$1","wI",2,0,null,198,[]]}},
+MF:{
+"^":"Tp:453;",
+call$1:[function(a){if(a==null)return 0
+return H.BU(a,null,null)},"call$1",null,2,0,null,452,[],"call"],
$isEH:true},
-B5:{
-"^":"Tp:444;",
-call$1:[function(a){if(a>=10)return""+a
-return"0"+a},"call$1",null,2,0,null,292,[],"call"],
+Rq:{
+"^":"Tp:454;",
+call$1:[function(a){if(a==null)return 0
+return H.IH(a,null)},"call$1",null,2,0,null,452,[],"call"],
$isEH:true},
a6:{
"^":"a;Fq<",
-g:[function(a,b){return P.k5(0,0,this.Fq+b.gFq(),0,0,0)},"call$1","gF1n",2,0,null,104,[]],
-W:[function(a,b){return P.k5(0,0,this.Fq-b.gFq(),0,0,0)},"call$1","gTG",2,0,null,104,[]],
+g:[function(a,b){return P.k5(0,0,this.Fq+b.gFq(),0,0,0)},"call$1","gF1n",2,0,null,109,[]],
+W:[function(a,b){return P.k5(0,0,this.Fq-b.gFq(),0,0,0)},"call$1","gTG",2,0,null,109,[]],
U:[function(a,b){if(typeof b!=="number")return H.s(b)
-return P.k5(0,0,C.CD.yu(C.CD.UD(this.Fq*b)),0,0,0)},"call$1","gEH",2,0,null,488,[]],
-Z:[function(a,b){if(b===0)throw H.b(P.zl())
-return P.k5(0,0,C.jn.Z(this.Fq,b),0,0,0)},"call$1","guP",2,0,null,489,[]],
-C:[function(a,b){return this.Fq<b.gFq()},"call$1","gix",2,0,null,104,[]],
-D:[function(a,b){return this.Fq>b.gFq()},"call$1","gh1",2,0,null,104,[]],
-E:[function(a,b){return this.Fq<=b.gFq()},"call$1","gf5",2,0,null,104,[]],
-F:[function(a,b){return this.Fq>=b.gFq()},"call$1","gNH",2,0,null,104,[]],
+return P.k5(0,0,C.CD.yu(C.CD.UD(this.Fq*b)),0,0,0)},"call$1","gEH",2,0,null,455,[]],
+Z:[function(a,b){if(b===0)throw H.b(P.ts())
+return P.k5(0,0,C.jn.Z(this.Fq,b),0,0,0)},"call$1","guP",2,0,null,456,[]],
+C:[function(a,b){return this.Fq<b.gFq()},"call$1","gix",2,0,null,109,[]],
+D:[function(a,b){return this.Fq>b.gFq()},"call$1","gh1",2,0,null,109,[]],
+E:[function(a,b){return this.Fq<=b.gFq()},"call$1","gER",2,0,null,109,[]],
+F:[function(a,b){return this.Fq>=b.gFq()},"call$1","gNH",2,0,null,109,[]],
gVs:function(){return C.jn.cU(this.Fq,1000)},
n:[function(a,b){var z
if(b==null)return!1
z=J.x(b)
if(typeof b!=="object"||b===null||!z.$isa6)return!1
-return this.Fq===b.Fq},"call$1","gUJ",2,0,null,104,[]],
+return this.Fq===b.Fq},"call$1","gUJ",2,0,null,109,[]],
giO:function(a){return this.Fq&0x1FFFFFFF},
-iM:[function(a,b){return C.jn.iM(this.Fq,b.gFq())},"call$1","gYc",2,0,null,104,[]],
+iM:[function(a,b){return C.jn.iM(this.Fq,b.gFq())},"call$1","gYc",2,0,null,109,[]],
bu:[function(a){var z,y,x,w,v
z=new P.DW()
y=this.Fq
@@ -16072,20 +15443,20 @@
v=new P.P7().call$1(C.jn.JV(y,1000000))
return""+C.jn.cU(y,3600000000)+":"+H.d(x)+":"+H.d(w)+"."+H.d(v)},"call$0","gXo",0,0,null],
$isa6:true,
-static:{"^":"Kl,S4d,dk,uU,RD,b2,q9,ll,Do,f4,kTB,IJZ,iI,Vk,Nw,yn",k5:function(a,b,c,d,e,f){return new P.a6(a*86400000000+b*3600000000+e*60000000+f*1000000+d*1000+c)}}},
+static:{"^":"Kl,S4d,pk,LoB,RD,b2,jS,ll,Do,f4,kTB,IJZ,iI,Vk,fm,yW",k5:function(a,b,c,d,e,f){return new P.a6(a*86400000000+b*3600000000+e*60000000+f*1000000+d*1000+c)}}},
P7:{
-"^":"Tp:444;",
+"^":"Tp:413;",
call$1:[function(a){if(a>=100000)return""+a
if(a>=10000)return"0"+a
if(a>=1000)return"00"+a
if(a>=100)return"000"+a
if(a>=10)return"0000"+a
-return"00000"+a},"call$1",null,2,0,null,292,[],"call"],
+return"00000"+a},"call$1",null,2,0,null,198,[],"call"],
$isEH:true},
DW:{
-"^":"Tp:444;",
+"^":"Tp:413;",
call$1:[function(a){if(a>=10)return""+a
-return"0"+a},"call$1",null,2,0,null,292,[],"call"],
+return"0"+a},"call$1",null,2,0,null,198,[],"call"],
$isEH:true},
Ge:{
"^":"a;",
@@ -16104,11 +15475,11 @@
"^":"AT;G1",
bu:[function(a){return"RangeError: "+H.d(this.G1)},"call$0","gXo",0,0,null],
static:{C3:function(a){return new P.bJ(a)},N:function(a){return new P.bJ("value "+H.d(a))},TE:function(a,b,c){return new P.bJ("value "+H.d(a)+" not in range "+H.d(b)+".."+H.d(c))}}},
-Np:{
+yd:{
"^":"Ge;",
-static:{hS:function(){return new P.Np()}}},
+static:{hS:function(){return new P.yd()}}},
mp:{
-"^":"Ge;uF,UP,mP,SA,FZ",
+"^":"Ge;uF,UP,mP,SA,mZ",
bu:[function(a){var z,y,x,w,v,u,t
z={}
z.a=P.p9("")
@@ -16144,6 +15515,11 @@
if(z==null)return"Concurrent modification during iteration."
return"Concurrent modification during iteration: "+H.d(P.hl(z))+"."},"call$0","gXo",0,0,null],
static:{a4:function(a){return new P.UV(a)}}},
+kF:{
+"^":"a;",
+bu:[function(a){return"Out of Memory"},"call$0","gXo",0,0,null],
+gI4:function(){return},
+$isGe:true},
VS:{
"^":"a;",
bu:[function(a){return"Stack Overflow"},"call$0","gXo",0,0,null],
@@ -16165,15 +15541,15 @@
eV:{
"^":"a;",
bu:[function(a){return"IntegerDivisionByZeroException"},"call$0","gXo",0,0,null],
-static:{zl:function(){return new P.eV()}}},
+static:{ts:function(){return new P.eV()}}},
kM:{
"^":"a;oc>",
-bu:[function(a){return"Expando:"+this.oc},"call$0","gXo",0,0,null],
+bu:[function(a){return"Expando:"+H.d(this.oc)},"call$0","gXo",0,0,null],
t:[function(a,b){var z=H.of(b,"expando$values")
return z==null?null:H.of(z,this.Qz())},"call$1","gIA",2,0,null,6,[]],
u:[function(a,b,c){var z=H.of(b,"expando$values")
if(z==null){z=new P.a()
-H.aw(b,"expando$values",z)}H.aw(z,this.Qz(),c)},"call$2","gj3",4,0,null,6,[],23,[]],
+H.aw(b,"expando$values",z)}H.aw(z,this.Qz(),c)},"call$2","gj3",4,0,null,6,[],28,[]],
Qz:[function(){var z,y
z=H.of(this,"expando$key")
if(z==null){y=$.Ss
@@ -16184,10 +15560,10 @@
EH:{
"^":"a;",
$isEH:true},
-cX:{
+QV:{
"^":"a;",
-$iscX:true,
-$ascX:null},
+$isQV:true,
+$asQV:null},
AC:{
"^":"a;"},
Z0:{
@@ -16198,10 +15574,10 @@
bu:[function(a){return"null"},"call$0","gXo",0,0,null]},
a:{
"^":";",
-n:[function(a,b){return this===b},"call$1","gUJ",2,0,null,104,[]],
+n:[function(a,b){return this===b},"call$1","gUJ",2,0,null,109,[]],
giO:function(a){return H.eQ(this)},
bu:[function(a){return H.a5(this)},"call$0","gXo",0,0,null],
-T:[function(a,b){throw H.b(P.lr(this,b.gWa(),b.gnd(),b.gVm(),null))},"call$1","gxK",2,0,null,331,[]],
+T:[function(a,b){throw H.b(P.lr(this,b.gWa(),b.gnd(),b.gVm(),null))},"call$1","gxK",2,0,null,329,[]],
gbx:function(a){return new H.cu(H.dJ(this),null)},
$isa:true},
Od:{
@@ -16235,7 +15611,7 @@
gl0:function(a){return this.vM.length===0},
gor:function(a){return this.vM.length!==0},
KF:[function(a){var z=typeof a==="string"?a:H.d(a)
-this.vM=this.vM+z},"call$1","gMG",2,0,null,93,[]],
+this.vM=this.vM+z},"call$1","gMG",2,0,null,98,[]],
We:[function(a,b){var z,y
z=J.GP(a)
if(!z.G())return
@@ -16246,8 +15622,8 @@
for(;z.G();){this.vM=this.vM+b
y=z.gl()
y=typeof y==="string"?y:H.d(y)
-this.vM=this.vM+y}}},"call$2","gS9",2,2,null,333,474,[],334,[]],
-V1:[function(a){this.vM=""},"call$0","gyP",0,0,null],
+this.vM=this.vM+y}}},"call$2","gCA",2,2,null,330,440,[],331,[]],
+V1:[function(a){this.vM=""},"call$0","gRa",0,0,null],
bu:[function(a){return this.vM},"call$0","gXo",0,0,null],
PD:function(a){if(typeof a==="string")this.vM=a
else this.KF(a)},
@@ -16261,40 +15637,34 @@
"^":"a;",
$isuq:true},
iD:{
-"^":"a;NN,HC,r0,Fi,ku,tP,Ka,hO,yW",
-gWu:function(){if(J.de(this.gJf(this),""))return""
+"^":"a;NN,HC,r0,Fi,ku,tP,Ka,YG,yW",
+gWu:function(){if(this.gJf(this)==="")return""
var z=P.p9("")
this.tb(z)
return z.vM},
-gJf:function(a){var z,y
-z=this.NN
-if(z!=null&&J.co(z,"[")){y=J.U6(z)
-return y.Nj(z,1,J.xH(y.gB(z),1))}return z},
-gtp:function(a){var z,y
+gJf:function(a){var z
+if(C.xB.nC(this.NN,"[")){z=this.NN
+return C.xB.Nj(z,1,z.length-1)}return this.NN},
+gtp:function(a){var z
if(J.de(this.HC,0)){z=this.Fi
-y=J.x(z)
-if(y.n(z,"http"))return 80
-if(y.n(z,"https"))return 443}return this.HC},
+if(z==="http")return 80
+if(z==="https")return 443}return this.HC},
Ja:function(a,b){return this.tP.call$1(b)},
x6:[function(a,b){var z,y
z=a==null
if(z&&!0)return""
z=!z
if(z);y=z?P.Xc(a):C.jN.ez(b,new P.Kd()).zV(0,"/")
-if(!J.de(this.gJf(this),"")||J.de(this.Fi,"file")){z=J.U6(y)
-z=z.gor(y)&&!z.nC(y,"/")}else z=!1
-if(z)return"/"+H.d(y)
-return y},"call$2","gbQ",4,0,null,265,[],490,[]],
-Ky:[function(a,b){var z=J.x(a)
-if(z.n(a,""))return"/"+H.d(b)
-return z.Nj(a,0,J.WB(z.cn(a,"/"),1))+H.d(b)},"call$2","gAj",4,0,null,491,[],492,[]],
-uo:[function(a){var z=J.U6(a)
-if(J.z8(z.gB(a),0)&&z.j(a,0)===58)return!0
-return z.u8(a,"/.")!==-1},"call$1","gaO",2,0,null,265,[]],
+if((this.gJf(this)!==""||this.Fi==="file")&&C.xB.gor(y)&&!C.xB.nC(y,"/"))return"/"+y
+return y},"call$2","gbQ",4,0,null,261,[],457,[]],
+Ky:[function(a,b){if(a==="")return"/"+H.d(b)
+return C.xB.Nj(a,0,J.U6(a).cn(a,"/")+1)+H.d(b)},"call$2","gAj",4,0,null,458,[],459,[]],
+uo:[function(a){if(a.length>0&&J.lE(a,0)===58)return!0
+return J.UU(a,"/.")!==-1},"call$1","gaO",2,0,null,261,[]],
SK:[function(a){var z,y,x,w,v
if(!this.uo(a))return a
z=[]
-for(y=J.uH(a,"/"),y=H.VM(new H.a7(y,y.length,0,null),[H.Kp(y,0)]),x=!1;y.G();){w=y.lo
+for(y=a.split("/"),y=H.VM(new H.a7(y,y.length,0,null),[H.Kp(y,0)]),x=!1;y.G();){w=y.lo
if(J.de(w,"..")){v=z.length
if(v!==0)if(v===1){if(0>=v)return H.e(z,0)
v=!J.de(z[0],"")}else v=!0
@@ -16303,94 +15673,123 @@
z.pop()}x=!0}else if("."===w)x=!0
else{z.push(w)
x=!1}}if(x)z.push("")
-return C.Nm.zV(z,"/")},"call$1","ghK",2,0,null,265,[]],
+return C.Nm.zV(z,"/")},"call$1","ghK",2,0,null,261,[]],
tb:[function(a){var z=this.ku
if(""!==z){a.KF(z)
-a.KF("@")}z=this.NN
-a.KF(z==null?"null":z)
+a.KF("@")}a.KF(this.NN)
if(!J.de(this.HC,0)){a.KF(":")
-a.KF(J.AG(this.HC))}},"call$1","gyL",2,0,null,493,[]],
+a.KF(J.AG(this.HC))}},"call$1","gyL",2,0,null,460,[]],
bu:[function(a){var z,y
z=P.p9("")
y=this.Fi
if(""!==y){z.KF(y)
-z.KF(":")}if(!J.de(this.gJf(this),"")||J.de(y,"file")){z.KF("//")
+z.KF(":")}if(this.gJf(this)!==""||y==="file"){z.KF("//")
this.tb(z)}z.KF(this.r0)
y=this.tP
if(""!==y){z.KF("?")
z.KF(y)}y=this.Ka
if(""!==y){z.KF("#")
z.KF(y)}return z.vM},"call$0","gXo",0,0,null],
-n:[function(a,b){var z
+n:[function(a,b){var z,y
if(b==null)return!1
z=J.RE(b)
if(typeof b!=="object"||b===null||!z.$isiD)return!1
-return J.de(this.Fi,b.Fi)&&J.de(this.ku,b.ku)&&J.de(this.gJf(this),z.gJf(b))&&J.de(this.gtp(this),z.gtp(b))&&J.de(this.r0,b.r0)&&J.de(this.tP,b.tP)&&J.de(this.Ka,b.Ka)},"call$1","gUJ",2,0,null,104,[]],
+if(this.Fi===b.Fi)if(this.ku===b.ku)if(this.gJf(this)===z.gJf(b))if(J.de(this.gtp(this),z.gtp(b))){z=this.r0
+y=b.r0
+z=(z==null?y==null:z===y)&&this.tP===b.tP&&this.Ka===b.Ka}else z=!1
+else z=!1
+else z=!1
+else z=!1
+return z},"call$1","gUJ",2,0,null,109,[]],
giO:function(a){var z=new P.XZ()
return z.call$2(this.Fi,z.call$2(this.ku,z.call$2(this.gJf(this),z.call$2(this.gtp(this),z.call$2(this.r0,z.call$2(this.tP,z.call$2(this.Ka,1)))))))},
-n3:function(a,b,c,d,e,f,g,h,i){var z=J.x(h)
-if(z.n(h,"http")&&J.de(e,80))this.HC=0
-else if(z.n(h,"https")&&J.de(e,443))this.HC=0
+n3:function(a,b,c,d,e,f,g,h,i){if(h==="http"&&J.de(e,80))this.HC=0
+else if(h==="https"&&J.de(e,443))this.HC=0
else this.HC=e
this.r0=this.x6(c,d)},
$isiD:true,
-static:{"^":"Um,B4,Bx,iR,OO,My,nR,jJY,d2,n2,q7,ux,vI,SF,fd,IL,Q5,zk,yt,fC,Ft,eq,qf,ML,y3,Pk,R1,qs,lL,I9,t2,H5,wb,eK,ws,Sp,aJ,Qd,Ai,ne",r6:function(a){var z,y,x,w,v,u,t,s
-z=a.QK
-if(1>=z.length)return H.e(z,1)
-y=z[1]
-y=P.iy(y!=null?y:"")
-x=z.length
-if(2>=x)return H.e(z,2)
-w=z[2]
-w=w!=null?w:""
-if(3>=x)return H.e(z,3)
-v=z[3]
-if(4>=x)return H.e(z,4)
-v=P.K6(v,z[4])
-if(5>=x)return H.e(z,5)
-x=P.n7(z[5])
-u=z.length
-if(6>=u)return H.e(z,6)
-t=z[6]
-t=t!=null?t:""
-if(7>=u)return H.e(z,7)
-s=z[7]
-s=s!=null?s:""
-if(8>=u)return H.e(z,8)
-z=z[8]
-z=z!=null?z:""
-u=P.iy(y)
-u=new P.iD(P.L7(v),null,null,u,w,P.LE(s,null),P.UJ(z),null,null)
-u.n3(z,v,t,null,x,s,null,y,w)
-return u},R6:function(a,b,c,d,e,f,g,h,i){var z=P.iy(h)
+static:{"^":"y2,q7,tv,ux,vI,SF,fd,IL,dH,zk,yt,fC,O5,eq,qf,ML,j3,r5,R1,qs,lL,WT,t2,H5,wb,eK,ws,Sp,aJ,JA7,dN,SQU,ne",hK:[function(a1){var z,y,x,w,v,u,t,s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0
+x=new P.hP()
+w=new P.Uo(a1)
+v=J.U6(a1)
+u=v.gB(a1)
+if(J.de(u,0))return P.R6("","",null,null,0,null,null,null,"")
+if(v.j(a1,0)!==47){if(typeof u!=="number")return H.s(u)
+t=0
+for(;s=0,t<u;t=r){r=t+1
+q=v.j(a1,t)
+if(q<128){p=q>>>4
+if(p>=8)return H.e(C.mK,p)
+p=(C.mK[p]&C.jn.W4(1,q&15))!==0}else p=!1
+if(!p){if(q===58){s=r
+t=s}else{t=r-1
+s=0}break}}}else{t=0
+s=0}if(s===t){p=s+1
+if(typeof u!=="number")return H.s(u)
+p=p<u&&v.j(a1,s)===47&&v.j(a1,p)===47}else p=!1
+if(p){o=s+2
+for(n=-1;p=J.Wx(o),m=-1,p.C(o,u);){l=p.g(o,1)
+q=v.j(a1,o)
+if(x.call$1(q)!==!0)if(q===91)o=w.call$1(l)
+else{if(J.de(n,-1)&&q===58);else{p=q===64||q===58
+o=l-1
+if(p){m=v.XU(a1,"@",o)
+if(m===-1){o=t
+break}o=m+1
+for(n=-1;p=J.Wx(o),p.C(o,u);){l=p.g(o,1)
+q=v.j(a1,o)
+if(x.call$1(q)!==!0)if(q===91)o=w.call$1(l)
+else{if(q===58){if(!J.de(n,-1))throw H.b(P.cD("Double port in host"))}else{o=l-1
+break}o=l
+n=o}else o=l}break}else{m=-1
+break}}o=l
+n=o}else o=l}}else{o=s
+m=-1
+n=-1}for(k=o;x=J.Wx(k),x.C(k,u);k=j){j=x.g(k,1)
+q=v.j(a1,k)
+if(q===63||q===35){k=j-1
+break}}x=J.Wx(k)
+if(x.C(k,u)&&v.j(a1,k)===63)for(i=k;w=J.Wx(i),w.C(i,u);i=h){h=w.g(i,1)
+if(v.j(a1,i)===35){i=h-1
+break}}else i=k
+g=s>0?v.Nj(a1,0,s-1):null
+z=0
+if(s!==o){f=s+2
+if(m>0){e=v.Nj(a1,f,m)
+f=m+1}else e=""
+w=J.Wx(n)
+if(w.D(n,0)){y=v.Nj(a1,n,o)
+try{z=H.BU(y,null,null)}catch(d){H.Ru(d)
+throw H.b(P.cD("Invalid port: '"+H.d(y)+"'"))}c=v.Nj(a1,f,w.W(n,1))}else c=v.Nj(a1,f,o)}else{c=""
+e=""}b=v.Nj(a1,o,k)
+a=x.C(k,i)?v.Nj(a1,x.g(k,1),i):""
+x=J.Wx(i)
+a0=x.C(i,u)?v.Nj(a1,x.g(i,1),u):""
+return P.R6(a0,c,b,null,z,a,null,g,e)},"call$1","rp",2,0,null,202,[]],R6:function(a,b,c,d,e,f,g,h,i){var z=P.iy(h)
z=new P.iD(P.L7(b),null,null,z,i,P.LE(f,g),P.UJ(a),null,null)
z.n3(a,b,c,d,e,f,g,h,i)
-return z},L7:[function(a){var z,y,x
-if(a==null||J.FN(a)===!0)return a
-z=J.rY(a)
-if(z.j(a,0)===91){if(z.j(a,J.xH(z.gB(a),1))!==93)throw H.b(P.cD("Missing end `]` to match `[` in host"))
-P.eg(z.Nj(a,1,J.xH(z.gB(a),1)))
-return a}y=0
-while(!0){x=z.gB(a)
-if(typeof x!=="number")return H.s(x)
-if(!(y<x))break
-if(z.j(a,y)===58){P.eg(a)
-return"["+H.d(a)+"]"}++y}return a},"call$1","jC",2,0,null,205,[]],iy:[function(a){var z,y,x,w,v,u,t,s
+return z},L7:[function(a){var z,y
+if(a.length===0)return a
+if(C.xB.j(a,0)===91){z=a.length-1
+if(C.xB.j(a,z)!==93)throw H.b(P.cD("Missing end `]` to match `[` in host"))
+P.eg(C.xB.Nj(a,1,z))
+return a}for(z=a.length,y=0;y<z;++y){if(y>=z)H.vh(new P.bJ("value "+y))
+if(a.charCodeAt(y)===58){P.eg(a)
+return"["+a+"]"}}return a},"call$1","jC",2,0,null,203,[]],iy:[function(a){var z,y,x,w,v,u
z=new P.hb()
-y=new P.XX()
if(a==null)return""
-x=J.U6(a)
-w=x.gB(a)
-if(typeof w!=="number")return H.s(w)
-v=!0
-u=0
-for(;u<w;++u){t=x.j(a,u)
-if(u===0){if(!(t>=97&&t<=122))s=t>=65&&t<=90
-else s=!0
-s=!s}else s=!1
-if(s)throw H.b(new P.AT("Illegal scheme: "+H.d(a)))
-if(z.call$1(t)!==!0){if(y.call$1(t)===!0);else throw H.b(new P.AT("Illegal scheme: "+H.d(a)))
-v=!1}}return v?a:x.hc(a)},"call$1","oL",2,0,null,206,[]],LE:[function(a,b){var z,y,x
+y=a.length
+for(x=!0,w=0;w<y;++w){if(w>=y)H.vh(new P.bJ("value "+w))
+v=a.charCodeAt(w)
+if(w===0){if(!(v>=97&&v<=122))u=v>=65&&v<=90
+else u=!0
+u=!u}else u=!1
+if(u)throw H.b(new P.AT("Illegal scheme: "+a))
+if(z.call$1(v)!==!0){if(v<128){u=v>>>4
+if(u>=8)return H.e(C.mK,u)
+u=(C.mK[u]&C.jn.W4(1,v&15))!==0}else u=!1
+if(u);else throw H.b(new P.AT("Illegal scheme: "+a))
+x=!1}}return x?a:a.toLowerCase()},"call$1","Um",2,0,null,204,[]],LE:[function(a,b){var z,y,x
z={}
y=a==null
if(y&&!0)return""
@@ -16399,65 +15798,59 @@
x=P.p9("")
z.a=!0
C.jN.aN(b,new P.yZ(z,x))
-return x.vM},"call$2","wF",4,0,null,207,[],208,[]],UJ:[function(a){if(a==null)return""
-return P.Xc(a)},"call$1","p7",2,0,null,209,[]],Xc:[function(a){var z,y,x,w,v,u,t,s,r,q,p,o,n,m,l
+return x.vM},"call$2","wF",4,0,null,205,[],206,[]],UJ:[function(a){return P.Xc(a)},"call$1","p7",2,0,null,207,[]],Xc:[function(a){var z,y,x,w,v,u,t,s,r,q,p,o,n,m,l
z={}
-y=new P.Gs()
-x=new P.Tw()
-w=new P.wm(a,y,new P.pm())
-v=new P.FB(a)
-z.a=null
-u=J.U6(a)
-t=u.gB(a)
-z.b=0
+y=J.U6(a).u8(a,"%")
+z.a=y
+if(y<0)return a
+x=new P.Gs()
+w=new P.Tw()
+v=new P.wm(a,x,new P.pm())
+u=new P.FB(a)
+z.b=null
+t=a.length
z.c=0
s=new P.Lk(z,a)
-if(typeof t!=="number")return H.s(t)
-r=0
-for(;r<t;)if(u.j(a,r)===37){r=z.b
-if(t<r+2)throw H.b(new P.AT("Invalid percent-encoding in URI component: "+H.d(a)))
-q=u.j(a,r+1)
-p=u.j(a,z.b+2)
-o=v.call$1(z.b+1)
-if(y.call$1(q)===!0&&y.call$1(p)===!0&&x.call$1(o)!==!0){n=z.b+3
-z.b=n
-r=n}else{s.call$0()
-r=x.call$1(o)
-m=z.a
-if(r===!0){m.toString
-l=P.O8(1,o,J.im)
-r=H.eT(l)
-m.vM=m.vM+r}else{m.toString
-m.vM=m.vM+"%"
-r=w.call$1(z.b+1)
-m.toString
-l=P.O8(1,r,J.im)
-r=H.eT(l)
-m.vM=m.vM+r
-r=z.a
-m=w.call$1(z.b+2)
+for(r=y;r<t;){if(t<r+2)throw H.b(new P.AT("Invalid percent-encoding in URI component: "+a))
+q=C.xB.j(a,r+1)
+p=C.xB.j(a,z.a+2)
+o=u.call$1(z.a+1)
+if(x.call$1(q)===!0&&x.call$1(p)===!0&&w.call$1(o)!==!0){y=z.a+3
+z.a=y
+r=y}else{s.call$0()
+r=w.call$1(o)
+n=z.b
+if(r===!0){n.toString
+m=P.O8(1,o,J.im)
+r=H.eT(m)
+n.vM=n.vM+r}else{n.toString
+n.vM=n.vM+"%"
+r=v.call$1(z.a+1)
+n.toString
+m=P.O8(1,r,J.im)
+r=H.eT(m)
+n.vM=n.vM+r
+r=z.b
+n=v.call$1(z.a+2)
r.toString
-l=P.O8(1,m,J.im)
-m=H.eT(l)
-r.vM=r.vM+m}n=z.b+3
-z.b=n
-z.c=n
-r=n}}else{n=z.b+1
-z.b=n
-r=n}if(z.a!=null&&z.c!==r)s.call$0()
-z=z.a
-if(z==null)return a
-return J.AG(z)},"call$1","Sy",2,0,null,210,[]],n7:[function(a){if(a!=null&&!J.de(a,""))return H.BU(a,null,null)
-else return 0},"call$1","dl",2,0,null,211,[]],K6:[function(a,b){if(a!=null)return a
-if(b!=null)return b
-return""},"call$2","xX",4,0,null,212,[],213,[]],q5:[function(a){var z,y
+m=P.O8(1,n,J.im)
+n=H.eT(m)
+r.vM=r.vM+n}y=z.a+3
+z.a=y
+z.c=y
+r=y}l=C.xB.XU(a,"%",r)
+if(l>=z.a){z.a=l
+r=l}else{z.a=t
+r=t}}if(z.b==null)return a
+if(z.c!==r)s.call$0()
+return J.AG(z.b)},"call$1","Sy",2,0,null,208,[]],q5:[function(a){var z,y
z=new P.Mx()
y=a.split(".")
if(y.length!==4)z.call$1("IPv4 address should contain exactly 4 parts")
-return H.VM(new H.A8(y,new P.C9(z)),[null,null]).br(0)},"call$1","cf",2,0,null,205,[]],eg:[function(a){var z,y,x,w,v,u,t,s,r,q,p,o
+return H.VM(new H.A8(y,new P.C9(z)),[null,null]).br(0)},"call$1","cf",2,0,null,203,[]],eg:[function(a){var z,y,x,w,v,u,t,s,r,q,p,o
z=new P.kZ()
y=new P.JT(a,z)
-if(J.u6(J.q8(a),2))z.call$1("address is too short")
+if(J.q8(a)<2)z.call$1("address is too short")
x=[]
w=0
u=!1
@@ -16465,29 +15858,35 @@
while(!0){s=J.q8(a)
if(typeof s!=="number")return H.s(s)
if(!(t<s))break
-if(J.lE(a,t)===58){if(t===0){++t
-if(J.lE(a,t)!==58)z.call$1("invalid start colon.")
+s=a
+r=J.q8(s)
+if(typeof r!=="number")return H.s(r)
+if(t>=r)H.vh(new P.bJ("value "+t))
+if(s.charCodeAt(t)===58){if(t===0){++t
+s=a
+if(t>=J.q8(s))H.vh(new P.bJ("value "+t))
+if(s.charCodeAt(t)!==58)z.call$1("invalid start colon.")
w=t}if(t===w){if(u)z.call$1("only one wildcard `::` is allowed")
J.bi(x,-1)
u=!0}else J.bi(x,y.call$2(w,t))
w=t+1}++t}if(J.q8(x)===0)z.call$1("too few parts")
-r=J.de(w,J.q8(a))
-q=J.de(J.MQ(x),-1)
-if(r&&!q)z.call$1("expected a part after last `:`")
-if(!r)try{J.bi(x,y.call$2(w,J.q8(a)))}catch(p){H.Ru(p)
-try{v=P.q5(J.D8(a,w))
+q=J.de(w,J.q8(a))
+p=J.de(J.MQ(x),-1)
+if(q&&!p)z.call$1("expected a part after last `:`")
+if(!q)try{J.bi(x,y.call$2(w,J.q8(a)))}catch(o){H.Ru(o)
+try{v=P.q5(J.ZZ(a,w))
s=J.c1(J.UQ(v,0),8)
-o=J.UQ(v,1)
-if(typeof o!=="number")return H.s(o)
-J.bi(x,(s|o)>>>0)
-o=J.c1(J.UQ(v,2),8)
+r=J.UQ(v,1)
+if(typeof r!=="number")return H.s(r)
+J.bi(x,(s|r)>>>0)
+r=J.c1(J.UQ(v,2),8)
s=J.UQ(v,3)
if(typeof s!=="number")return H.s(s)
-J.bi(x,(o|s)>>>0)}catch(p){H.Ru(p)
+J.bi(x,(r|s)>>>0)}catch(o){H.Ru(o)
z.call$1("invalid end of IPv6 address.")}}if(u){if(J.q8(x)>7)z.call$1("an address with a wildcard must have less than 7 parts")}else if(J.q8(x)!==8)z.call$1("an address without a wildcard must contain exactly 8 parts")
s=new H.kV(x,new P.d9(x))
s.$builtinTypeInfo=[null,null]
-return P.F(s,!0,H.ip(s,"mW",0))},"call$1","y9",2,0,null,205,[]],jW:[function(a,b,c,d){var z,y,x,w,v,u,t,s
+return P.F(s,!0,H.ip(s,"mW",0))},"call$1","kS",2,0,null,203,[]],jW:[function(a,b,c,d){var z,y,x,w,v,u,t,s
z=new P.rI()
y=P.p9("")
x=c.gZE().WJ(b)
@@ -16503,29 +15902,35 @@
y.vM=y.vM+u}else{s=P.O8(1,37,J.im)
u=H.eT(s)
y.vM=y.vM+u
-z.call$2(v,y)}}return y.vM},"call$4$encoding$spaceToPlus","jd",4,5,null,214,152,215,[],216,[],217,[],218,[]]}},
+z.call$2(v,y)}}return y.vM},"call$4$encoding$spaceToPlus","jd",4,5,null,209,210,211,[],212,[],213,[],214,[]]}},
+hP:{
+"^":"Tp:462;",
+call$1:[function(a){var z
+if(a<128){z=a>>>4
+if(z>=8)return H.e(C.aa,z)
+z=(C.aa[z]&C.jn.W4(1,a&15))!==0}else z=!1
+return z},"call$1",null,2,0,null,461,[],"call"],
+$isEH:true},
+Uo:{
+"^":"Tp:463;a",
+call$1:[function(a){a=J.aK(this.a,"]",a)
+if(a===-1)throw H.b(P.cD("Bad end of IPv6 host"))
+return a+1},"call$1",null,2,0,null,52,[],"call"],
+$isEH:true},
hb:{
-"^":"Tp:495;",
+"^":"Tp:462;",
call$1:[function(a){var z
if(a<128){z=a>>>4
if(z>=8)return H.e(C.HE,z)
z=(C.HE[z]&C.jn.W4(1,a&15))!==0}else z=!1
-return z},"call$1",null,2,0,null,494,[],"call"],
-$isEH:true},
-XX:{
-"^":"Tp:495;",
-call$1:[function(a){var z
-if(a<128){z=a>>>4
-if(z>=8)return H.e(C.mK,z)
-z=(C.mK[z]&C.jn.W4(1,a&15))!==0}else z=!1
-return z},"call$1",null,2,0,null,494,[],"call"],
+return z},"call$1",null,2,0,null,461,[],"call"],
$isEH:true},
Kd:{
-"^":"Tp:107;",
-call$1:[function(a){return P.jW(C.Wd,a,C.xM,!1)},"call$1",null,2,0,null,86,[],"call"],
+"^":"Tp:112;",
+call$1:[function(a){return P.jW(C.Wd,a,C.xM,!1)},"call$1",null,2,0,null,91,[],"call"],
$isEH:true},
yZ:{
-"^":"Tp:346;a,b",
+"^":"Tp:348;a,b",
call$2:[function(a,b){var z=this.a
if(!z.a)this.b.KF("&")
z.a=!1
@@ -16533,105 +15938,105 @@
z.KF(P.jW(C.kg,a,C.xM,!0))
b.gl0(b)
z.KF("=")
-z.KF(P.jW(C.kg,b,C.xM,!0))},"call$2",null,4,0,null,42,[],23,[],"call"],
+z.KF(P.jW(C.kg,b,C.xM,!0))},"call$2",null,4,0,null,47,[],28,[],"call"],
$isEH:true},
Gs:{
-"^":"Tp:495;",
+"^":"Tp:462;",
call$1:[function(a){var z
if(!(48<=a&&a<=57))z=65<=a&&a<=70
else z=!0
-return z},"call$1",null,2,0,null,496,[],"call"],
+return z},"call$1",null,2,0,null,464,[],"call"],
$isEH:true},
pm:{
-"^":"Tp:495;",
-call$1:[function(a){return 97<=a&&a<=102},"call$1",null,2,0,null,496,[],"call"],
+"^":"Tp:462;",
+call$1:[function(a){return 97<=a&&a<=102},"call$1",null,2,0,null,464,[],"call"],
$isEH:true},
Tw:{
-"^":"Tp:495;",
+"^":"Tp:462;",
call$1:[function(a){var z
if(a<128){z=C.jn.GG(a,4)
if(z>=8)return H.e(C.kg,z)
z=(C.kg[z]&C.jn.W4(1,a&15))!==0}else z=!1
-return z},"call$1",null,2,0,null,494,[],"call"],
+return z},"call$1",null,2,0,null,461,[],"call"],
$isEH:true},
wm:{
-"^":"Tp:497;b,c,d",
+"^":"Tp:463;b,c,d",
call$1:[function(a){var z,y
z=this.b
-y=J.lE(z,a)
+y=C.xB.j(z,a)
if(this.d.call$1(y)===!0)return y-32
-else if(this.c.call$1(y)!==!0)throw H.b(new P.AT("Invalid URI component: "+H.d(z)))
-else return y},"call$1",null,2,0,null,47,[],"call"],
+else if(this.c.call$1(y)!==!0)throw H.b(new P.AT("Invalid URI component: "+z))
+else return y},"call$1",null,2,0,null,52,[],"call"],
$isEH:true},
FB:{
-"^":"Tp:497;e",
-call$1:[function(a){var z,y,x,w,v
-for(z=this.e,y=J.rY(z),x=0,w=0;w<2;++w){v=y.j(z,a+w)
-if(48<=v&&v<=57)x=x*16+v-48
-else{v|=32
-if(97<=v&&v<=102)x=x*16+v-97+10
-else throw H.b(new P.AT("Invalid percent-encoding in URI component: "+H.d(z)))}}return x},"call$1",null,2,0,null,47,[],"call"],
+"^":"Tp:463;e",
+call$1:[function(a){var z,y,x,w
+for(z=this.e,y=0,x=0;x<2;++x){w=C.xB.j(z,a+x)
+if(48<=w&&w<=57)y=y*16+w-48
+else{w|=32
+if(97<=w&&w<=102)y=y*16+w-97+10
+else throw H.b(new P.AT("Invalid percent-encoding in URI component: "+z))}}return y},"call$1",null,2,0,null,52,[],"call"],
$isEH:true},
Lk:{
-"^":"Tp:112;a,f",
+"^":"Tp:114;a,f",
call$0:[function(){var z,y,x,w,v
z=this.a
-y=z.a
+y=z.b
x=z.c
w=this.f
-v=z.b
-if(y==null)z.a=P.p9(J.Nj(w,x,v))
-else y.KF(J.Nj(w,x,v))},"call$0",null,0,0,null,"call"],
+v=z.a
+if(y==null)z.b=P.p9(C.xB.Nj(w,x,v))
+else y.KF(C.xB.Nj(w,x,v))},"call$0",null,0,0,null,"call"],
$isEH:true},
XZ:{
-"^":"Tp:499;",
+"^":"Tp:466;",
call$2:[function(a,b){var z=J.v1(a)
if(typeof z!=="number")return H.s(z)
-return b*31+z&1073741823},"call$2",null,4,0,null,498,[],245,[],"call"],
+return b*31+z&1073741823},"call$2",null,4,0,null,465,[],241,[],"call"],
$isEH:true},
Mx:{
-"^":"Tp:182;",
-call$1:[function(a){throw H.b(P.cD("Illegal IPv4 address, "+a))},"call$1",null,2,0,null,19,[],"call"],
+"^":"Tp:181;",
+call$1:[function(a){throw H.b(P.cD("Illegal IPv4 address, "+a))},"call$1",null,2,0,null,20,[],"call"],
$isEH:true},
C9:{
-"^":"Tp:107;a",
+"^":"Tp:112;a",
call$1:[function(a){var z,y
z=H.BU(a,null,null)
y=J.Wx(z)
if(y.C(z,0)||y.D(z,255))this.a.call$1("each part must be in the range of `0..255`")
-return z},"call$1",null,2,0,null,500,[],"call"],
+return z},"call$1",null,2,0,null,467,[],"call"],
$isEH:true},
kZ:{
-"^":"Tp:182;",
-call$1:[function(a){throw H.b(P.cD("Illegal IPv6 address, "+a))},"call$1",null,2,0,null,19,[],"call"],
+"^":"Tp:181;",
+call$1:[function(a){throw H.b(P.cD("Illegal IPv6 address, "+a))},"call$1",null,2,0,null,20,[],"call"],
$isEH:true},
JT:{
-"^":"Tp:501;a,b",
+"^":"Tp:468;a,b",
call$2:[function(a,b){var z,y
-if(J.z8(J.xH(b,a),4))this.b.call$1("an IPv6 part can only contain a maximum of 4 hex digits")
-z=H.BU(J.Nj(this.a,a,b),16,null)
+if(b-a>4)this.b.call$1("an IPv6 part can only contain a maximum of 4 hex digits")
+z=H.BU(C.xB.Nj(this.a,a,b),16,null)
y=J.Wx(z)
if(y.C(z,0)||y.D(z,65535))this.b.call$1("each part must be in the range of `0x0..0xFFFF`")
-return z},"call$2",null,4,0,null,120,[],121,[],"call"],
+return z},"call$2",null,4,0,null,123,[],124,[],"call"],
$isEH:true},
d9:{
-"^":"Tp:107;c",
+"^":"Tp:112;c",
call$1:[function(a){var z=J.x(a)
if(z.n(a,-1))return P.O8((9-this.c.length)*2,0,null)
-else return[z.m(a,8)&255,z.i(a,255)]},"call$1",null,2,0,null,23,[],"call"],
+else return[z.m(a,8)&255,z.i(a,255)]},"call$1",null,2,0,null,28,[],"call"],
$isEH:true},
rI:{
-"^":"Tp:346;",
+"^":"Tp:348;",
call$2:[function(a,b){var z=J.Wx(a)
b.KF(P.fc(C.xB.j("0123456789ABCDEF",z.m(a,4))))
-b.KF(P.fc(C.xB.j("0123456789ABCDEF",z.i(a,15))))},"call$2",null,4,0,null,502,[],503,[],"call"],
+b.KF(P.fc(C.xB.j("0123456789ABCDEF",z.i(a,15))))},"call$2",null,4,0,null,469,[],470,[],"call"],
$isEH:true}}],["dart.dom.html","dart:html",,W,{
"^":"",
UE:[function(a){if(P.F7()===!0)return"webkitTransitionEnd"
else if(P.dg()===!0)return"oTransitionEnd"
-return"transitionend"},"call$1","pq",2,0,219,18,[]],
-r3:[function(a,b){return document.createElement(a)},"call$2","Oe",4,0,null,94,[],220,[]],
-It:[function(a,b,c){return W.lt(a,null,null,b,null,null,null,c).ml(new W.Kx())},"call$3$onProgress$withCredentials","xF",2,5,null,77,77,221,[],222,[],223,[]],
+return"transitionend"},"call$1","pq",2,0,215,19,[]],
+r3:[function(a,b){return document.createElement(a)},"call$2","Oe",4,0,null,99,[],216,[]],
+It:[function(a,b,c){return W.lt(a,null,null,b,null,null,null,c).ml(new W.Kx())},"call$3$onProgress$withCredentials","xF",2,5,null,82,82,217,[],218,[],219,[]],
lt:[function(a,b,c,d,e,f,g,h){var z,y,x
z=W.zU
y=H.VM(new P.Zf(P.Dt(z)),[z])
@@ -16642,7 +16047,7 @@
z=C.MD.aM(x)
H.VM(new W.Ov(0,z.uv,z.Ph,W.aF(y.gYJ()),z.Sg),[H.Kp(z,0)]).Zz()
x.send()
-return y.MM},"call$8$method$mimeType$onProgress$requestHeaders$responseType$sendData$withCredentials","Za",2,15,null,77,77,77,77,77,77,77,221,[],224,[],225,[],222,[],226,[],227,[],228,[],223,[]],
+return y.MM},"call$8$method$mimeType$onProgress$requestHeaders$responseType$sendData$withCredentials","Za",2,15,null,82,82,82,82,82,82,82,217,[],220,[],218,[],221,[],222,[],223,[],224,[],219,[]],
ED:function(a){var z,y
z=document.createElement("input",null)
if(a!=null)try{J.Lp(z,a)}catch(y){H.Ru(y)}return z},
@@ -16650,23 +16055,23 @@
try{z=a
y=J.x(z)
return typeof z==="object"&&z!==null&&!!y.$iscS}catch(x){H.Ru(x)
-return!1}},"call$1","EF",2,0,null,229,[]],
+return!1}},"call$1","tn",2,0,null,225,[]],
Pv:[function(a){if(a==null)return
-return W.P1(a)},"call$1","Ie",2,0,null,230,[]],
+return W.P1(a)},"call$1","Ie",2,0,null,226,[]],
qc:[function(a){var z,y
if(a==null)return
if("setInterval" in a){z=W.P1(a)
y=J.x(z)
if(typeof z==="object"&&z!==null&&!!y.$isD0)return z
-return}else return a},"call$1","Wq",2,0,null,18,[]],
-qr:[function(a){return a},"call$1","Ku",2,0,null,18,[]],
+return}else return a},"call$1","Wq",2,0,null,19,[]],
+qr:[function(a){return a},"call$1","Ku",2,0,null,19,[]],
Z9:[function(a){var z=J.x(a)
if(typeof a==="object"&&a!==null&&!!z.$isQF)return a
-return P.o7(a,!0)},"call$1","cj",2,0,null,91,[]],
-YT:[function(a,b){return new W.vZ(a,b)},"call$2","AD",4,0,null,231,[],7,[]],
-GO:[function(a){return J.TD(a)},"call$1","V5",2,0,107,41,[]],
-Yb:[function(a){return J.Vq(a)},"call$1","cn",2,0,107,41,[]],
-Qp:[function(a,b,c,d){return J.qd(a,b,c,d)},"call$4","A6",8,0,232,41,[],12,[],233,[],234,[]],
+return P.o7(a,!0)},"call$1","cj",2,0,null,96,[]],
+YT:[function(a,b){return new W.vZ(a,b)},"call$2","AD",4,0,null,227,[],7,[]],
+GO:[function(a){return J.TD(a)},"call$1","V5",2,0,112,46,[]],
+Yb:[function(a){return J.Vq(a)},"call$1","cn",2,0,112,46,[]],
+Qp:[function(a,b,c,d){return J.qd(a,b,c,d)},"call$4","A6",8,0,228,46,[],12,[],229,[],230,[]],
wi:[function(a,b,c,d,e){var z,y,x,w,v,u,t,s,r,q
z=J.Xr(d)
if(z==null)throw H.b(new P.AT(d))
@@ -16705,29 +16110,29 @@
Object.defineProperty(s, init.dispatchPropertyName, {value: r, enumerable: false, writable: true, configurable: true})
q={prototype: s}
if(!v)q.extends=e
-b.registerElement(c,q)},"call$5","uz",10,0,null,89,[],235,[],94,[],11,[],236,[]],
+b.registerElement(c,q)},"call$5","uz",10,0,null,94,[],231,[],99,[],11,[],232,[]],
aF:[function(a){if(J.de($.X3,C.NU))return a
if(a==null)return
-return $.X3.oj(a,!0)},"call$1","Rj",2,0,null,156,[]],
+return $.X3.oj(a,!0)},"call$1","Rj",2,0,null,155,[]],
K2:[function(a){if(J.de($.X3,C.NU))return a
-return $.X3.PT(a,!0)},"call$1","ZJ",2,0,null,156,[]],
+return $.X3.PT(a,!0)},"call$1","ZJ",2,0,null,155,[]],
qE:{
"^":"cv;",
-"%":"HTMLAppletElement|HTMLBRElement|HTMLCanvasElement|HTMLContentElement|HTMLDListElement|HTMLDetailsElement|HTMLDialogElement|HTMLDirectoryElement|HTMLDivElement|HTMLFontElement|HTMLFrameElement|HTMLHRElement|HTMLHeadElement|HTMLHeadingElement|HTMLHtmlElement|HTMLMarqueeElement|HTMLMenuElement|HTMLModElement|HTMLOptGroupElement|HTMLParagraphElement|HTMLPreElement|HTMLQuoteElement|HTMLShadowElement|HTMLSpanElement|HTMLTableCaptionElement|HTMLTableCellElement|HTMLTableColElement|HTMLTableDataCellElement|HTMLTableHeaderCellElement|HTMLTitleElement|HTMLUListElement|HTMLUnknownElement;HTMLElement;jpR|GN|ir|uL|Vf|PO|Ur|G6|Sq|xI|Tg|KU|Ps|CN|qbd|HT|Ds|E0|LP|lw|pv|Fv|Vfx|E9|m8|Urj|Gk|AX|oub|yb|c4r|NM|pR|Squ|hx|Dsd|Zt|u7|KUl|E7|Kz|tuj|vj|LU|mHk|T2|Vct|PF|F1|D13|aQ|WZq|Ya5|pva|Ww|cda|tz|qFb|fl|rna|oM|Vba|wM|waa|lI|XP|V0|JG|T5|knI|oaa|fI|q2|nm|q3|uwf"},
-pa:{
+"%":"HTMLAppletElement|HTMLBRElement|HTMLCanvasElement|HTMLContentElement|HTMLDListElement|HTMLDetailsElement|HTMLDialogElement|HTMLDirectoryElement|HTMLDivElement|HTMLFontElement|HTMLFrameElement|HTMLHRElement|HTMLHeadElement|HTMLHeadingElement|HTMLHtmlElement|HTMLMarqueeElement|HTMLMenuElement|HTMLModElement|HTMLParagraphElement|HTMLPreElement|HTMLQuoteElement|HTMLShadowElement|HTMLSpanElement|HTMLTableCaptionElement|HTMLTableCellElement|HTMLTableColElement|HTMLTableDataCellElement|HTMLTableHeaderCellElement|HTMLTitleElement|HTMLUListElement|HTMLUnknownElement;HTMLElement;Sa|GN|ir|uL|Vf|G6|Ds|xI|Tg|pv|Jc|CN|Vfx|Be|Dsd|E0|LP|lw|tuj|E9|Vct|rm|m8|D13|Gk|qW|WZq|mk|pva|jY|pR|cda|hx|waa|u7|V4|E7|V9|Kz|V10|vj|LU|V11|KL|F1|V12|aQ|V13|Qa|V14|Ww|V15|tz|V16|fl|V17|Zt|V18|iL|V19|lI|XP|V20|JG|T5|knI|V21|fI|V22|ob|V23|nm|V24|Vu"},
+zw:{
"^":"Gv;",
$isList:true,
-$asWO:function(){return[W.M5]},
+$aszM:function(){return[W.M5]},
$isyN:true,
-$iscX:true,
-$ascX:function(){return[W.M5]},
+$isQV:true,
+$asQV:function(){return[W.M5]},
"%":"EntryArray"},
-Gh:{
+Ps:{
"^":"qE;N:target=,t5:type%,cC:hash%,mH:href=",
bu:[function(a){return a.toString()},"call$0","gXo",0,0,null],
$isGv:true,
"%":"HTMLAnchorElement"},
-na:{
+Sb:{
"^":"qE;N:target=,cC:hash%,mH:href=",
bu:[function(a){return a.toString()},"call$0","gXo",0,0,null],
$isGv:true,
@@ -16742,7 +16147,7 @@
"^":"Gv;t5:type=",
$isAz:true,
"%":";Blob"},
-QP:{
+Fy:{
"^":"qE;",
$isD0:true,
$isGv:true,
@@ -16758,8 +16163,8 @@
Yr:{
"^":"ea;tT:code=",
"%":"CloseEvent"},
-di:{
-"^":"Qa;Rn:data=",
+wT:{
+"^":"Mf;Rn:data=",
"%":"CompositionEvent"},
He:{
"^":"ea;",
@@ -16773,15 +16178,15 @@
"%":"HTMLDataListElement"},
QF:{
"^":"KV;",
-JP:[function(a){return a.createDocumentFragment()},"call$0","gf8",0,0,null],
-Kb:[function(a,b){return a.getElementById(b)},"call$1","giu",2,0,null,293,[]],
-ek:[function(a,b,c){return a.importNode(b,c)},"call$2","gPp",2,2,null,77,264,[],294,[]],
+JP:[function(a){return a.createDocumentFragment()},"call$0","gL9",0,0,null],
+Kb:[function(a,b){return a.getElementById(b)},"call$1","giu",2,0,null,291,[]],
+ek:[function(a,b,c){return a.importNode(b,c)},"call$2","gPp",2,2,null,82,260,[],292,[]],
gi9:function(a){return C.mt.aM(a)},
gVl:function(a){return C.pi.aM(a)},
gLm:function(a){return C.i3.aM(a)},
-Md:[function(a,b){return W.vD(a.querySelectorAll(b),null)},"call$1","gnk",2,0,null,295,[]],
-Ja:[function(a,b){return a.querySelector(b)},"call$1","gtP",2,0,null,296,[]],
-pr:[function(a,b){return W.vD(a.querySelectorAll(b),null)},"call$1","gTU",2,0,null,296,[]],
+Md:[function(a,b){return W.vD(a.querySelectorAll(b),null)},"call$1","gnk",2,0,null,293,[]],
+Ja:[function(a,b){return a.querySelector(b)},"call$1","gtP",2,0,null,294,[]],
+pr:[function(a,b){return W.vD(a.querySelectorAll(b),null)},"call$1","gTU",2,0,null,294,[]],
$isQF:true,
"%":"Document|HTMLDocument|SVGDocument"},
Aj:{
@@ -16794,9 +16199,9 @@
x=J.w1(y)
x.V1(y)
x.FV(y,z)},
-Md:[function(a,b){return W.vD(a.querySelectorAll(b),null)},"call$1","gnk",2,0,null,295,[]],
-Ja:[function(a,b){return a.querySelector(b)},"call$1","gtP",2,0,null,296,[]],
-pr:[function(a,b){return W.vD(a.querySelectorAll(b),null)},"call$1","gTU",2,0,null,296,[]],
+Md:[function(a,b){return W.vD(a.querySelectorAll(b),null)},"call$1","gnk",2,0,null,293,[]],
+Ja:[function(a,b){return a.querySelector(b)},"call$1","gtP",2,0,null,294,[]],
+pr:[function(a,b){return W.vD(a.querySelectorAll(b),null)},"call$1","gTU",2,0,null,294,[]],
$isGv:true,
"%":";DocumentFragment"},
cm:{
@@ -16820,13 +16225,13 @@
y=this.gwd(a)
y.V1(0)
y.FV(0,z)},
-Md:[function(a,b){return W.vD(a.querySelectorAll(b),null)},"call$1","gnk",2,0,null,295,[]],
-Ja:[function(a,b){return a.querySelector(b)},"call$1","gtP",2,0,null,296,[]],
-pr:[function(a,b){return W.vD(a.querySelectorAll(b),null)},"call$1","gTU",2,0,null,296,[]],
+Md:[function(a,b){return W.vD(a.querySelectorAll(b),null)},"call$1","gnk",2,0,null,293,[]],
+Ja:[function(a,b){return a.querySelector(b)},"call$1","gtP",2,0,null,294,[]],
+pr:[function(a,b){return W.vD(a.querySelectorAll(b),null)},"call$1","gTU",2,0,null,294,[]],
gDD:function(a){return new W.I4(a)},
i4:[function(a){},"call$0","gQd",0,0,null],
xo:[function(a){},"call$0","gbt",0,0,null],
-aC:[function(a,b,c,d){},"call$3","gxR",6,0,null,12,[],233,[],234,[]],
+aC:[function(a,b,c,d){},"call$3","gxR",6,0,null,12,[],229,[],230,[]],
gqn:function(a){return a.localName},
bu:[function(a){return a.localName},"call$0","gXo",0,0,null],
WO:[function(a,b){if(!!a.matches)return a.matches(b)
@@ -16834,14 +16239,15 @@
else if(!!a.mozMatchesSelector)return a.mozMatchesSelector(b)
else if(!!a.msMatchesSelector)return a.msMatchesSelector(b)
else if(!!a.oMatchesSelector)return a.oMatchesSelector(b)
-else throw H.b(P.f("Not supported on this platform"))},"call$1","grM",2,0,null,295,[]],
+else throw H.b(P.f("Not supported on this platform"))},"call$1","grM",2,0,null,293,[]],
bA:[function(a,b){var z=a
do{if(J.RF(z,b))return!0
z=z.parentElement}while(z!=null)
-return!1},"call$1","gMn",2,0,null,295,[]],
+return!1},"call$1","gMn",2,0,null,293,[]],
er:[function(a){return(a.createShadowRoot||a.webkitCreateShadowRoot).call(a)},"call$0","gzd",0,0,null],
-gKE:function(a){return a.shadowRoot||a.webkitShadowRoot},
+gIW:function(a){return a.shadowRoot||a.webkitShadowRoot},
gI:function(a){return new W.DM(a,a)},
+GE:[function(a,b){return a.getAttribute(b)},"call$1","gBy",2,0,null,12,[]],
gi9:function(a){return C.mt.f0(a)},
gVl:function(a){return C.pi.f0(a)},
gLm:function(a){return C.i3.f0(a)},
@@ -16859,13 +16265,14 @@
ea:{
"^":"Gv;It:_selector},Xt:bubbles=,t5:type=",
gN:function(a){return W.qc(a.target)},
+e6:[function(a){return a.preventDefault()},"call$0","gwl",0,0,null],
$isea:true,
-"%":"AudioProcessingEvent|AutocompleteErrorEvent|BeforeUnloadEvent|CSSFontFaceLoadEvent|DeviceMotionEvent|DeviceOrientationEvent|HashChangeEvent|IDBVersionChangeEvent|MIDIConnectionEvent|MediaKeyNeededEvent|MediaStreamEvent|MediaStreamTrackEvent|MutationEvent|OfflineAudioCompletionEvent|OverflowEvent|PageTransitionEvent|PopStateEvent|RTCDTMFToneChangeEvent|RTCDataChannelEvent|RTCIceCandidateEvent|SecurityPolicyViolationEvent|SpeechInputEvent|SpeechRecognitionEvent|TrackEvent|WebGLContextEvent|WebKitAnimationEvent;Event"},
+"%":"AudioProcessingEvent|AutocompleteErrorEvent|BeforeUnloadEvent|CSSFontFaceLoadEvent|DeviceMotionEvent|DeviceOrientationEvent|HashChangeEvent|IDBVersionChangeEvent|MIDIConnectionEvent|MediaKeyNeededEvent|MediaStreamEvent|MediaStreamTrackEvent|MutationEvent|OfflineAudioCompletionEvent|OverflowEvent|PageTransitionEvent|PopStateEvent|RTCDTMFToneChangeEvent|RTCDataChannelEvent|RTCIceCandidateEvent|SecurityPolicyViolationEvent|TrackEvent|WebGLContextEvent|WebKitAnimationEvent;Event"},
D0:{
"^":"Gv;",
gI:function(a){return new W.Jn(a)},
-On:[function(a,b,c,d){return a.addEventListener(b,H.tR(c,1),d)},"call$3","gIV",4,2,null,77,11,[],297,[],298,[]],
-Y9:[function(a,b,c,d){return a.removeEventListener(b,H.tR(c,1),d)},"call$3","gcF",4,2,null,77,11,[],297,[],298,[]],
+On:[function(a,b,c,d){return a.addEventListener(b,H.tR(c,1),d)},"call$3","gIV",4,2,null,82,11,[],295,[],296,[]],
+Y9:[function(a,b,c,d){return a.removeEventListener(b,H.tR(c,1),d)},"call$3","gcF",4,2,null,82,11,[],295,[],296,[]],
$isD0:true,
"%":";EventTarget"},
as:{
@@ -16875,40 +16282,40 @@
"^":"Az;oc:name=",
$ishH:true,
"%":"File"},
-Aa:{
+QU:{
"^":"cm;tT:code=",
"%":"FileError"},
-Tq:{
+h4:{
"^":"qE;B:length=,bP:method=,oc:name%,N:target=",
"%":"HTMLFormElement"},
-wa:{
+xn:{
"^":"Gb;",
gB:function(a){return a.length},
t:[function(a,b){var z=a.length
if(b>>>0!==b||b>=z)throw H.b(P.TE(b,0,z))
-return a[b]},"call$1","gIA",2,0,null,47,[]],
-u:[function(a,b,c){throw H.b(P.f("Cannot assign element of immutable List."))},"call$2","gj3",4,0,null,47,[],23,[]],
+return a[b]},"call$1","gIA",2,0,null,52,[]],
+u:[function(a,b,c){throw H.b(P.f("Cannot assign element of immutable List."))},"call$2","gj3",4,0,null,52,[],28,[]],
sB:function(a,b){throw H.b(P.f("Cannot resize immutable List."))},
grZ:function(a){var z=a.length
if(z>0)return a[z-1]
throw H.b(new P.lj("No elements"))},
Zv:[function(a,b){if(b>>>0!==b||b>=a.length)return H.e(a,b)
-return a[b]},"call$1","goY",2,0,null,47,[]],
+return a[b]},"call$1","goY",2,0,null,52,[]],
$isList:true,
-$asWO:function(){return[W.KV]},
+$aszM:function(){return[W.KV]},
$isyN:true,
-$iscX:true,
-$ascX:function(){return[W.KV]},
+$isQV:true,
+$asQV:function(){return[W.KV]},
$isXj:true,
"%":"HTMLCollection|HTMLFormControlsCollection|HTMLOptionsCollection"},
zU:{
-"^":"rk;iC:responseText=,ys:status=,po:statusText=",
+"^":"wa;iC:responseText=",
gn9:function(a){return W.Z9(a.response)},
-Yh:[function(a,b,c,d,e,f){return a.open(b,c,d,f,e)},function(a,b,c,d){return a.open(b,c,d)},"eo","call$5$async$password$user",null,"gnI",4,7,null,77,77,77,224,[],221,[],299,[],300,[],301,[]],
-wR:[function(a,b){return a.send(b)},"call$1","gX8",0,2,null,77,239,[]],
+R3:[function(a,b,c,d,e,f){return a.open(b,c,d,f,e)},function(a,b,c,d){return a.open(b,c,d)},"eo","call$5$async$password$user",null,"gnI",4,7,null,82,82,82,220,[],217,[],297,[],298,[],299,[]],
+zY:[function(a,b){return a.send(b)},"call$1","gX8",0,2,null,82,235,[]],
$iszU:true,
"%":"XMLHttpRequest"},
-rk:{
+wa:{
"^":"D0;",
"%":";XMLHttpRequestEventTarget"},
tX:{
@@ -16923,7 +16330,7 @@
oo:function(a,b){return a.complete.call$1(b)},
"%":"HTMLImageElement"},
Mi:{
-"^":"qE;Tq:checked%,MB:form=,aK:list=,oc:name%,LA:src=,t5:type%,P:value%",
+"^":"qE;Tq:checked%,MB:form=,o6:list=,oc:name%,LA:src=,t5:type%,P:value%",
RR:function(a,b){return a.accept.call$1(b)},
r6:function(a,b){return a.value.call$1(b)},
$isMi:true,
@@ -16951,6 +16358,7 @@
"%":"HTMLLinkElement"},
cS:{
"^":"Gv;cC:hash%,mH:href=",
+VD:[function(a){return a.reload()},"call$0","gQU",0,0,null],
bu:[function(a){return a.toString()},"call$0","gXo",0,0,null],
$iscS:true,
"%":"Location"},
@@ -16959,6 +16367,7 @@
"%":"HTMLMapElement"},
El:{
"^":"qE;kc:error=,LA:src=",
+xW:[function(a){return a.load()},"call$0","gnB",0,0,null],
"%":"HTMLAudioElement|HTMLMediaElement|HTMLVideoElement"},
zm:{
"^":"Gv;tT:code=",
@@ -16969,16 +16378,16 @@
aB:{
"^":"ea;G1:message=",
"%":"MediaKeyEvent"},
-fJ:{
+W7:{
"^":"ea;G1:message=",
"%":"MediaKeyMessageEvent"},
Rv:{
-"^":"D0;jO:id=",
+"^":"D0;jO:id=,ph:label=",
"%":"MediaStream"},
-Hy:{
+cx:{
"^":"ea;",
gRn:function(a){return P.o7(a.data,!0)},
-$isHy:true,
+$iscx:true,
"%":"MessageEvent"},
EeC:{
"^":"qE;jb:content=,oc:name%",
@@ -16991,17 +16400,17 @@
"^":"ea;Rn:data=",
"%":"MIDIMessageEvent"},
bn:{
-"^":"Imr;",
-LV:[function(a,b,c){return a.send(b,c)},function(a,b){return a.send(b)},"wR","call$2",null,"gX8",2,2,null,77,239,[],302,[]],
+"^":"ab;",
+LV:[function(a,b,c){return a.send(b,c)},function(a,b){return a.send(b)},"zY","call$2",null,"gX8",2,2,null,82,235,[],300,[]],
"%":"MIDIOutput"},
-Imr:{
+ab:{
"^":"D0;jO:id=,oc:name=,t5:type=",
"%":"MIDIInput;MIDIPort"},
-CX:{
-"^":"Qa;",
+Wp:{
+"^":"Mf;",
nH:[function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p){a.initMouseEvent(b,c,d,e,f,g,h,i,j,k,l,m,n,o,W.qr(p))
-return},"call$15","gEx",30,0,null,11,[],303,[],304,[],305,[],306,[],307,[],308,[],309,[],310,[],311,[],312,[],313,[],314,[],315,[],316,[]],
-$isCX:true,
+return},"call$15","gEx",30,0,null,11,[],301,[],302,[],303,[],304,[],305,[],306,[],307,[],308,[],309,[],310,[],311,[],312,[],313,[],314,[]],
+$isWp:true,
"%":"DragEvent|MSPointerEvent|MouseEvent|MouseScrollEvent|MouseWheelEvent|PointerEvent|WheelEvent"},
H9:{
"^":"Gv;",
@@ -17014,12 +16423,12 @@
y.call$2("subtree",i)
y.call$2("attributeOldValue",d)
y.call$2("characterDataOldValue",g)
-a.observe(b,z)},function(a,b,c,d){return this.jh(a,b,null,null,null,null,null,c,d)},"yN","call$8$attributeFilter$attributeOldValue$attributes$characterData$characterDataOldValue$childList$subtree",null,"gTT",2,15,null,77,77,77,77,77,77,77,74,[],317,[],318,[],319,[],320,[],321,[],322,[],323,[]],
+a.observe(b,z)},function(a,b,c,d){return this.jh(a,b,null,null,null,null,null,c,d)},"yN","call$8$attributeFilter$attributeOldValue$attributes$characterData$characterDataOldValue$childList$subtree",null,"gTT",2,15,null,82,82,82,82,82,82,82,79,[],315,[],316,[],317,[],318,[],319,[],320,[],321,[]],
"%":"MutationObserver|WebKitMutationObserver"},
-FI:{
+o4:{
"^":"Gv;jL:oldValue=,N:target=,t5:type=",
"%":"MutationRecord"},
-oU:{
+Q0:{
"^":"Gv;",
$isGv:true,
"%":"Navigator"},
@@ -17030,36 +16439,36 @@
"^":"D0;q6:firstChild=,uD:nextSibling=,M0:ownerDocument=,eT:parentElement=,KV:parentNode=,a4:textContent%",
gyT:function(a){return new W.e7(a)},
wg:[function(a){var z=a.parentNode
-if(z!=null)z.removeChild(a)},"call$0","gRI",0,0,null],
+if(z!=null)z.removeChild(a)},"call$0","guH",0,0,null],
Tk:[function(a,b){var z,y
try{z=a.parentNode
-J.ky(z,b,a)}catch(y){H.Ru(y)}return a},"call$1","gdA",2,0,null,324,[]],
+J.ky(z,b,a)}catch(y){H.Ru(y)}return a},"call$1","gdA",2,0,null,322,[]],
bu:[function(a){var z=a.nodeValue
return z==null?J.Gv.prototype.bu.call(this,a):z},"call$0","gXo",0,0,null],
-jx:[function(a,b){return a.appendChild(b)},"call$1","gp3",2,0,null,325,[]],
-tg:[function(a,b){return a.contains(b)},"call$1","gdj",2,0,null,104,[]],
-mK:[function(a,b,c){return a.insertBefore(b,c)},"call$2","gHc",4,0,null,325,[],326,[]],
-dR:[function(a,b,c){return a.replaceChild(b,c)},"call$2","ghn",4,0,null,325,[],327,[]],
+jx:[function(a,b){return a.appendChild(b)},"call$1","gp3",2,0,null,323,[]],
+tg:[function(a,b){return a.contains(b)},"call$1","gdj",2,0,null,109,[]],
+mK:[function(a,b,c){return a.insertBefore(b,c)},"call$2","gys",4,0,null,323,[],324,[]],
+dR:[function(a,b,c){return a.replaceChild(b,c)},"call$2","ghn",4,0,null,323,[],325,[]],
$isKV:true,
"%":"Entity|Notation;Node"},
yk:{
-"^":"ecX;",
+"^":"ma;",
gB:function(a){return a.length},
t:[function(a,b){var z=a.length
if(b>>>0!==b||b>=z)throw H.b(P.TE(b,0,z))
-return a[b]},"call$1","gIA",2,0,null,47,[]],
-u:[function(a,b,c){throw H.b(P.f("Cannot assign element of immutable List."))},"call$2","gj3",4,0,null,47,[],23,[]],
+return a[b]},"call$1","gIA",2,0,null,52,[]],
+u:[function(a,b,c){throw H.b(P.f("Cannot assign element of immutable List."))},"call$2","gj3",4,0,null,52,[],28,[]],
sB:function(a,b){throw H.b(P.f("Cannot resize immutable List."))},
grZ:function(a){var z=a.length
if(z>0)return a[z-1]
throw H.b(new P.lj("No elements"))},
Zv:[function(a,b){if(b>>>0!==b||b>=a.length)return H.e(a,b)
-return a[b]},"call$1","goY",2,0,null,47,[]],
+return a[b]},"call$1","goY",2,0,null,52,[]],
$isList:true,
-$asWO:function(){return[W.KV]},
+$aszM:function(){return[W.KV]},
$isyN:true,
-$iscX:true,
-$ascX:function(){return[W.KV]},
+$isQV:true,
+$asQV:function(){return[W.KV]},
$isXj:true,
"%":"NodeList|RadioNodeList"},
KY:{
@@ -17068,8 +16477,11 @@
G7:{
"^":"qE;Rn:data=,MB:form=,oc:name%,t5:type%",
"%":"HTMLObjectElement"},
+l9:{
+"^":"qE;ph:label%",
+"%":"HTMLOptGroupElement"},
Ql:{
-"^":"qE;MB:form=,vH:index=,P:value%",
+"^":"qE;MB:form=,vH:index=,ph:label%,P:value%",
r6:function(a,b){return a.value.call$1(b)},
$isQl:true,
"%":"HTMLOptionElement"},
@@ -17106,21 +16518,33 @@
"^":"qE;MB:form=,B:length%,oc:name%,ig:selectedIndex%,t5:type=,P:value%",
r6:function(a,b){return a.value.call$1(b)},
gbG:function(a){var z=W.vD(a.querySelectorAll("option"),null)
-z=z.ev(z,new W.kI())
+z=z.ev(z,new W.Ou())
return H.VM(new P.Yp(P.F(z,!0,H.ip(z,"mW",0))),[null])},
$islp:true,
"%":"HTMLSelectElement"},
I0:{
"^":"Aj;pQ:applyAuthorStyles=",
-Kb:[function(a,b){return a.getElementById(b)},"call$1","giu",2,0,null,293,[]],
+Kb:[function(a,b){return a.getElementById(b)},"call$1","giu",2,0,null,291,[]],
$isI0:true,
"%":"ShadowRoot"},
-CY:{
+QR:{
"^":"qE;LA:src=,t5:type%",
"%":"HTMLSourceElement"},
-Hd:{
+uaa:{
+"^":"ea;PK:results=",
+"%":"SpeechInputEvent"},
+yg:{
+"^":"Gv;",
+"%":"SpeechInputResult"},
+mG:{
"^":"ea;kc:error=,G1:message=",
"%":"SpeechRecognitionError"},
+Ul:{
+"^":"ea;PK:results=",
+"%":"SpeechRecognitionEvent"},
+uj:{
+"^":"Gv;V5:isFinal=,B:length=",
+"%":"SpeechRecognitionResult"},
G5:{
"^":"ea;oc:name=",
"%":"SpeechSynthesisEvent"},
@@ -17138,7 +16562,7 @@
"^":"qE;",
$istV:true,
"%":"HTMLTableRowElement"},
-KP:{
+BT:{
"^":"qE;",
gWT:function(a){return H.VM(new W.Of(a.rows),[W.tV])},
"%":"HTMLTableSectionElement"},
@@ -17156,25 +16580,25 @@
$isAE:true,
"%":"HTMLTextAreaElement"},
xV:{
-"^":"Qa;Rn:data=",
+"^":"Mf;Rn:data=",
"%":"TextEvent"},
RH:{
-"^":"qE;fY:kind%,LA:src=",
+"^":"qE;fY:kind%,ph:label%,LA:src=",
"%":"HTMLTrackElement"},
OJ:{
"^":"ea;",
$isOJ:true,
"%":"TransitionEvent|WebKitTransitionEvent"},
-Qa:{
+Mf:{
"^":"ea;",
"%":"FocusEvent|KeyboardEvent|SVGZoomEvent|TouchEvent;UIEvent"},
u9:{
-"^":"D0;oc:name%,ys:status=",
+"^":"D0;oc:name%",
gmW:function(a){var z=a.location
if(W.uC(z)===!0)return z
if(null==a._location_wrapper)a._location_wrapper=new W.Dk(z)
return a._location_wrapper},
-oB:[function(a,b){return a.requestAnimationFrame(H.tR(b,1))},"call$1","gfl",2,0,null,156,[]],
+oB:[function(a,b){return a.requestAnimationFrame(H.tR(b,1))},"call$1","gfl",2,0,null,155,[]],
hr:[function(a){if(!!(a.requestAnimationFrame&&a.cancelAnimationFrame))return
(function($this) {
var vendors = ['ms', 'moz', 'webkit', 'o'];
@@ -17195,7 +16619,7 @@
geT:function(a){return W.Pv(a.parent)},
cO:[function(a){return a.close()},"call$0","gJK",0,0,null],
xc:[function(a,b,c,d){a.postMessage(P.bL(b),c)
-return},function(a,b,c){return this.xc(a,b,c,null)},"X6","call$3",null,"gmF",4,2,null,77,20,[],328,[],329,[]],
+return},function(a,b,c){return this.xc(a,b,c,null)},"X6","call$3",null,"gmF",4,2,null,82,22,[],326,[],327,[]],
bu:[function(a){return a.toString()},"call$0","gXo",0,0,null],
gi9:function(a){return C.mt.aM(a)},
gVl:function(a){return C.pi.aM(a)},
@@ -17208,7 +16632,7 @@
"^":"KV;oc:name=,P:value%",
r6:function(a,b){return a.value.call$1(b)},
"%":"Attr"},
-hq:{
+Eb:{
"^":"KV;",
$isGv:true,
"%":"DocumentType"},
@@ -17217,60 +16641,99 @@
$isD0:true,
$isGv:true,
"%":"HTMLFrameSetElement"},
-QV:{
-"^":"w1p;",
+Cy:{
+"^":"ecX;",
gB:function(a){return a.length},
t:[function(a,b){var z=a.length
if(b>>>0!==b||b>=z)throw H.b(P.TE(b,0,z))
-return a[b]},"call$1","gIA",2,0,null,47,[]],
-u:[function(a,b,c){throw H.b(P.f("Cannot assign element of immutable List."))},"call$2","gj3",4,0,null,47,[],23,[]],
+return a[b]},"call$1","gIA",2,0,null,52,[]],
+u:[function(a,b,c){throw H.b(P.f("Cannot assign element of immutable List."))},"call$2","gj3",4,0,null,52,[],28,[]],
sB:function(a,b){throw H.b(P.f("Cannot resize immutable List."))},
grZ:function(a){var z=a.length
if(z>0)return a[z-1]
throw H.b(new P.lj("No elements"))},
Zv:[function(a,b){if(b>>>0!==b||b>=a.length)return H.e(a,b)
-return a[b]},"call$1","goY",2,0,null,47,[]],
+return a[b]},"call$1","goY",2,0,null,52,[]],
$isList:true,
-$asWO:function(){return[W.KV]},
+$aszM:function(){return[W.KV]},
$isyN:true,
-$iscX:true,
-$ascX:function(){return[W.KV]},
+$isQV:true,
+$asQV:function(){return[W.KV]},
$isXj:true,
"%":"MozNamedAttrMap|NamedNodeMap"},
+c5:{
+"^":"w1p;",
+gB:function(a){return a.length},
+t:[function(a,b){var z=a.length
+if(b>>>0!==b||b>=z)throw H.b(P.TE(b,0,z))
+return a[b]},"call$1","gIA",2,0,null,52,[]],
+u:[function(a,b,c){throw H.b(P.f("Cannot assign element of immutable List."))},"call$2","gj3",4,0,null,52,[],28,[]],
+sB:function(a,b){throw H.b(P.f("Cannot resize immutable List."))},
+grZ:function(a){var z=a.length
+if(z>0)return a[z-1]
+throw H.b(new P.lj("No elements"))},
+Zv:[function(a,b){if(b>>>0!==b||b>=a.length)return H.e(a,b)
+return a[b]},"call$1","goY",2,0,null,52,[]],
+$isList:true,
+$aszM:function(){return[W.yg]},
+$isyN:true,
+$isQV:true,
+$asQV:function(){return[W.yg]},
+$isXj:true,
+"%":"SpeechInputResultList"},
+LO:{
+"^":"kEI;",
+gB:function(a){return a.length},
+t:[function(a,b){var z=a.length
+if(b>>>0!==b||b>=z)throw H.b(P.TE(b,0,z))
+return a[b]},"call$1","gIA",2,0,null,52,[]],
+u:[function(a,b,c){throw H.b(P.f("Cannot assign element of immutable List."))},"call$2","gj3",4,0,null,52,[],28,[]],
+sB:function(a,b){throw H.b(P.f("Cannot resize immutable List."))},
+grZ:function(a){var z=a.length
+if(z>0)return a[z-1]
+throw H.b(new P.lj("No elements"))},
+Zv:[function(a,b){if(b>>>0!==b||b>=a.length)return H.e(a,b)
+return a[b]},"call$1","goY",2,0,null,52,[]],
+$isList:true,
+$aszM:function(){return[W.uj]},
+$isyN:true,
+$isQV:true,
+$asQV:function(){return[W.uj]},
+$isXj:true,
+"%":"SpeechRecognitionResultList"},
QZ:{
"^":"a;",
-HH:[function(a){return typeof console!="undefined"?console.count(a):null},"call$1","gAv",2,0,504,173,[]],
-Wt:[function(a,b){return typeof console!="undefined"?console.error(b):null},"call$1","gkc",2,0,504,173,[]],
-To:[function(a){return typeof console!="undefined"?console.info(a):null},"call$1","gqa",2,0,null,173,[]],
-De:[function(a,b){return typeof console!="undefined"?console.profile(b):null},"call$1","gB1",2,0,182,505,[]],
-uj:[function(a){return typeof console!="undefined"?console.time(a):null},"call$1","gFl",2,0,182,505,[]],
-WL:[function(a,b){return typeof console!="undefined"?console.trace(b):null},"call$1","gtN",2,0,504,173,[]],
+HH:[function(a){return typeof console!="undefined"?console.count(a):null},"call$1","gAv",2,0,471,172,[]],
+Z3:[function(a,b){return typeof console!="undefined"?console.error(b):null},"call$1","gkc",2,0,471,172,[]],
+To:[function(a){return typeof console!="undefined"?console.info(a):null},"call$1","gqa",2,0,null,172,[]],
+De:[function(a,b){return typeof console!="undefined"?console.profile(b):null},"call$1","gB1",2,0,181,472,[]],
+uj:[function(a){return typeof console!="undefined"?console.time(a):null},"call$1","gFl",2,0,181,472,[]],
+wn:[function(a,b){return typeof console!="undefined"?console.trace(b):null},"call$1","gtN",2,0,471,172,[]],
static:{"^":"wk"}},
VG:{
"^":"ar;MW,vG",
-tg:[function(a,b){return J.kE(this.vG,b)},"call$1","gdj",2,0,null,129,[]],
+tg:[function(a,b){return J.kE(this.vG,b)},"call$1","gdj",2,0,null,132,[]],
gl0:function(a){return this.MW.firstElementChild==null},
gB:function(a){return this.vG.length},
t:[function(a,b){var z=this.vG
if(b>>>0!==b||b>=z.length)return H.e(z,b)
-return z[b]},"call$1","gIA",2,0,null,47,[]],
+return z[b]},"call$1","gIA",2,0,null,52,[]],
u:[function(a,b,c){var z=this.vG
if(b>>>0!==b||b>=z.length)return H.e(z,b)
-this.MW.replaceChild(c,z[b])},"call$2","gj3",4,0,null,47,[],23,[]],
+this.MW.replaceChild(c,z[b])},"call$2","gj3",4,0,null,52,[],28,[]],
sB:function(a,b){throw H.b(P.f("Cannot resize element lists"))},
h:[function(a,b){this.MW.appendChild(b)
-return b},"call$1","ght",2,0,null,23,[]],
+return b},"call$1","ght",2,0,null,28,[]],
gA:function(a){var z=this.br(this)
return H.VM(new H.a7(z,z.length,0,null),[H.Kp(z,0)])},
FV:[function(a,b){var z,y
-z=J.x(b)
-for(z=J.GP(typeof b==="object"&&b!==null&&!!z.$ise7?P.F(b,!0,null):b),y=this.MW;z.G();)y.appendChild(z.gl())},"call$1","gDY",2,0,null,114,[]],
-GT:[function(a,b){throw H.b(P.f("Cannot sort element lists"))},"call$1","gH7",0,2,null,77,133,[]],
-YW:[function(a,b,c,d,e){throw H.b(P.SY(null))},"call$4","gaQ",6,2,null,335,120,[],121,[],114,[],122,[]],
+for(z=H.VM(new H.a7(b,b.length,0,null),[H.Kp(b,0)]),y=this.MW;z.G();)y.appendChild(z.lo)},"call$1","gDY",2,0,null,116,[]],
+GT:[function(a,b){throw H.b(P.f("Cannot sort element lists"))},"call$1","gH7",0,2,null,82,122,[]],
+YW:[function(a,b,c,d,e){throw H.b(P.SY(null))},"call$4","gam",6,2,null,332,123,[],124,[],116,[],125,[]],
Rz:[function(a,b){var z=J.x(b)
if(typeof b==="object"&&b!==null&&!!z.$iscv){z=this.MW
if(b.parentNode===z){z.removeChild(b)
-return!0}}return!1},"call$1","gRI",2,0,null,6,[]],
+return!0}}return!1},"call$1","guH",2,0,null,6,[]],
xe:[function(a,b,c){var z,y,x
if(b<0||b>this.vG.length)throw H.b(P.TE(b,0,this.vG.length))
z=this.vG
@@ -17278,29 +16741,29 @@
x=this.MW
if(b===y)x.appendChild(c)
else{if(b<0||b>=y)return H.e(z,b)
-x.insertBefore(c,z[b])}},"call$2","gQG",4,0,null,47,[],129,[]],
-V1:[function(a){this.MW.textContent=""},"call$0","gyP",0,0,null],
+x.insertBefore(c,z[b])}},"call$2","gQG",4,0,null,52,[],132,[]],
+V1:[function(a){J.c9(this.MW,"")},"call$0","gRa",0,0,null],
KI:[function(a,b){var z,y
z=this.vG
if(b<0||b>=z.length)return H.e(z,b)
y=z[b]
this.MW.removeChild(y)
-return y},"call$1","gNM",2,0,null,47,[]],
+return y},"call$1","gNM",2,0,null,52,[]],
grZ:function(a){var z=this.MW.lastElementChild
if(z==null)throw H.b(new P.lj("No elements"))
return z},
$asar:function(){return[W.cv]},
-$asWO:function(){return[W.cv]},
-$ascX:function(){return[W.cv]}},
+$aszM:function(){return[W.cv]},
+$asQV:function(){return[W.cv]}},
wz:{
"^":"ar;Sn,Sc",
gB:function(a){return this.Sn.length},
t:[function(a,b){var z=this.Sn
if(b>>>0!==b||b>=z.length)return H.e(z,b)
-return z[b]},"call$1","gIA",2,0,null,47,[]],
-u:[function(a,b,c){throw H.b(P.f("Cannot modify list"))},"call$2","gj3",4,0,null,47,[],23,[]],
+return z[b]},"call$1","gIA",2,0,null,52,[]],
+u:[function(a,b,c){throw H.b(P.f("Cannot modify list"))},"call$2","gj3",4,0,null,52,[],28,[]],
sB:function(a,b){throw H.b(P.f("Cannot modify list"))},
-GT:[function(a,b){throw H.b(P.f("Cannot sort list"))},"call$1","gH7",0,2,null,77,133,[]],
+GT:[function(a,b){throw H.b(P.f("Cannot sort list"))},"call$1","gH7",0,2,null,82,122,[]],
grZ:function(a){return C.t5.grZ(this.Sn)},
gDD:function(a){return W.or(this.Sc)},
gi9:function(a){return C.mt.vo(this)},
@@ -17309,17 +16772,17 @@
nJ:function(a,b){var z=C.t5.ev(this.Sn,new W.B1())
this.Sc=P.F(z,!0,H.ip(z,"mW",0))},
$isList:true,
-$asWO:null,
+$aszM:null,
$isyN:true,
-$iscX:true,
-$ascX:null,
+$isQV:true,
+$asQV:null,
static:{vD:function(a,b){var z=H.VM(new W.wz(a,null),[b])
z.nJ(a,b)
return z}}},
B1:{
-"^":"Tp:107;",
+"^":"Tp:112;",
call$1:[function(a){var z=J.x(a)
-return typeof a==="object"&&a!==null&&!!z.$iscv},"call$1",null,2,0,null,18,[],"call"],
+return typeof a==="object"&&a!==null&&!!z.$iscv},"call$1",null,2,0,null,19,[],"call"],
$isEH:true},
M5:{
"^":"Gv;"},
@@ -17337,27 +16800,27 @@
RAp:{
"^":"Gv+lD;",
$isList:true,
-$asWO:function(){return[W.KV]},
+$aszM:function(){return[W.KV]},
$isyN:true,
-$iscX:true,
-$ascX:function(){return[W.KV]}},
+$isQV:true,
+$asQV:function(){return[W.KV]}},
Gb:{
"^":"RAp+Gm;",
$isList:true,
-$asWO:function(){return[W.KV]},
+$aszM:function(){return[W.KV]},
$isyN:true,
-$iscX:true,
-$ascX:function(){return[W.KV]}},
+$isQV:true,
+$asQV:function(){return[W.KV]}},
Kx:{
-"^":"Tp:107;",
-call$1:[function(a){return J.EC(a)},"call$1",null,2,0,null,506,[],"call"],
+"^":"Tp:112;",
+call$1:[function(a){return J.EC(a)},"call$1",null,2,0,null,473,[],"call"],
$isEH:true},
iO:{
-"^":"Tp:346;a",
-call$2:[function(a,b){this.a.setRequestHeader(a,b)},"call$2",null,4,0,null,507,[],23,[],"call"],
+"^":"Tp:348;a",
+call$2:[function(a,b){this.a.setRequestHeader(a,b)},"call$2",null,4,0,null,474,[],28,[],"call"],
$isEH:true},
bU:{
-"^":"Tp:107;b,c",
+"^":"Tp:112;b,c",
call$1:[function(a){var z,y,x
z=this.c
y=z.status
@@ -17366,24 +16829,20 @@
x=this.b
if(y){y=x.MM
if(y.Gv!==0)H.vh(new P.lj("Future already completed"))
-y.OH(z)}else x.pm(a)},"call$1",null,2,0,null,18,[],"call"],
+y.OH(z)}else x.pm(a)},"call$1",null,2,0,null,19,[],"call"],
$isEH:true},
Yg:{
-"^":"Tp:346;a",
-call$2:[function(a,b){if(b!=null)this.a[a]=b},"call$2",null,4,0,null,42,[],23,[],"call"],
+"^":"Tp:348;a",
+call$2:[function(a,b){if(b!=null)this.a[a]=b},"call$2",null,4,0,null,47,[],28,[],"call"],
$isEH:true},
e7:{
"^":"ar;NL",
grZ:function(a){var z=this.NL.lastChild
if(z==null)throw H.b(new P.lj("No elements"))
return z},
-h:[function(a,b){this.NL.appendChild(b)},"call$1","ght",2,0,null,23,[]],
-FV:[function(a,b){var z,y,x,w
-z=J.w1(b)
-if(typeof b==="object"&&b!==null&&!!z.$ise7){z=b.NL
-y=this.NL
-if(z!==y)for(x=z.childNodes.length,w=0;w<x;++w)y.appendChild(z.firstChild)
-return}for(z=z.gA(b),y=this.NL;z.G();)y.appendChild(z.gl())},"call$1","gDY",2,0,null,114,[]],
+h:[function(a,b){this.NL.appendChild(b)},"call$1","ght",2,0,null,28,[]],
+FV:[function(a,b){var z,y
+for(z=H.VM(new H.a7(b,b.length,0,null),[H.Kp(b,0)]),y=this.NL;z.G();)y.appendChild(z.lo)},"call$1","gDY",2,0,null,116,[]],
xe:[function(a,b,c){var z,y,x
if(b<0||b>this.NL.childNodes.length)throw H.b(P.TE(b,0,this.NL.childNodes.length))
z=this.NL
@@ -17391,81 +16850,108 @@
x=y.length
if(b===x)z.appendChild(c)
else{if(b<0||b>=x)return H.e(y,b)
-z.insertBefore(c,y[b])}},"call$2","gQG",4,0,null,47,[],264,[]],
+z.insertBefore(c,y[b])}},"call$2","gQG",4,0,null,52,[],260,[]],
KI:[function(a,b){var z,y,x
z=this.NL
y=z.childNodes
if(b<0||b>=y.length)return H.e(y,b)
x=y[b]
z.removeChild(x)
-return x},"call$1","gNM",2,0,null,47,[]],
+return x},"call$1","gNM",2,0,null,52,[]],
Rz:[function(a,b){var z=J.x(b)
if(typeof b!=="object"||b===null||!z.$isKV)return!1
z=this.NL
if(z!==b.parentNode)return!1
z.removeChild(b)
-return!0},"call$1","gRI",2,0,null,6,[]],
-V1:[function(a){this.NL.textContent=""},"call$0","gyP",0,0,null],
+return!0},"call$1","guH",2,0,null,6,[]],
+V1:[function(a){J.c9(this.NL,"")},"call$0","gRa",0,0,null],
u:[function(a,b,c){var z,y
z=this.NL
y=z.childNodes
if(b>>>0!==b||b>=y.length)return H.e(y,b)
-z.replaceChild(c,y[b])},"call$2","gj3",4,0,null,47,[],23,[]],
+z.replaceChild(c,y[b])},"call$2","gj3",4,0,null,52,[],28,[]],
gA:function(a){return C.t5.gA(this.NL.childNodes)},
-GT:[function(a,b){throw H.b(P.f("Cannot sort Node list"))},"call$1","gH7",0,2,null,77,133,[]],
-YW:[function(a,b,c,d,e){throw H.b(P.f("Cannot setRange on Node list"))},"call$4","gaQ",6,2,null,335,120,[],121,[],114,[],122,[]],
+GT:[function(a,b){throw H.b(P.f("Cannot sort Node list"))},"call$1","gH7",0,2,null,82,122,[]],
+YW:[function(a,b,c,d,e){throw H.b(P.f("Cannot setRange on Node list"))},"call$4","gam",6,2,null,332,123,[],124,[],116,[],125,[]],
gB:function(a){return this.NL.childNodes.length},
sB:function(a,b){throw H.b(P.f("Cannot set length on immutable List."))},
t:[function(a,b){var z=this.NL.childNodes
if(b>>>0!==b||b>=z.length)return H.e(z,b)
-return z[b]},"call$1","gIA",2,0,null,47,[]],
-$ise7:true,
+return z[b]},"call$1","gIA",2,0,null,52,[]],
$asar:function(){return[W.KV]},
-$asWO:function(){return[W.KV]},
-$ascX:function(){return[W.KV]}},
+$aszM:function(){return[W.KV]},
+$asQV:function(){return[W.KV]}},
nNL:{
"^":"Gv+lD;",
$isList:true,
-$asWO:function(){return[W.KV]},
+$aszM:function(){return[W.KV]},
$isyN:true,
-$iscX:true,
-$ascX:function(){return[W.KV]}},
-ecX:{
+$isQV:true,
+$asQV:function(){return[W.KV]}},
+ma:{
"^":"nNL+Gm;",
$isList:true,
-$asWO:function(){return[W.KV]},
+$aszM:function(){return[W.KV]},
$isyN:true,
-$iscX:true,
-$ascX:function(){return[W.KV]}},
-kI:{
-"^":"Tp:107;",
+$isQV:true,
+$asQV:function(){return[W.KV]}},
+Ou:{
+"^":"Tp:112;",
call$1:[function(a){var z=J.x(a)
-return typeof a==="object"&&a!==null&&!!z.$isQl},"call$1",null,2,0,null,18,[],"call"],
+return typeof a==="object"&&a!==null&&!!z.$isQl},"call$1",null,2,0,null,19,[],"call"],
$isEH:true},
yoo:{
"^":"Gv+lD;",
$isList:true,
-$asWO:function(){return[W.KV]},
+$aszM:function(){return[W.KV]},
$isyN:true,
-$iscX:true,
-$ascX:function(){return[W.KV]}},
-w1p:{
+$isQV:true,
+$asQV:function(){return[W.KV]}},
+ecX:{
"^":"yoo+Gm;",
$isList:true,
-$asWO:function(){return[W.KV]},
+$aszM:function(){return[W.KV]},
$isyN:true,
-$iscX:true,
-$ascX:function(){return[W.KV]}},
+$isQV:true,
+$asQV:function(){return[W.KV]}},
+zLC:{
+"^":"Gv+lD;",
+$isList:true,
+$aszM:function(){return[W.yg]},
+$isyN:true,
+$isQV:true,
+$asQV:function(){return[W.yg]}},
+w1p:{
+"^":"zLC+Gm;",
+$isList:true,
+$aszM:function(){return[W.yg]},
+$isyN:true,
+$isQV:true,
+$asQV:function(){return[W.yg]}},
+dxW:{
+"^":"Gv+lD;",
+$isList:true,
+$aszM:function(){return[W.uj]},
+$isyN:true,
+$isQV:true,
+$asQV:function(){return[W.uj]}},
+kEI:{
+"^":"dxW+Gm;",
+$isList:true,
+$aszM:function(){return[W.uj]},
+$isyN:true,
+$isQV:true,
+$asQV:function(){return[W.uj]}},
tJ:{
"^":"a;",
-FV:[function(a,b){J.kH(b,new W.Zc(this))},"call$1","gDY",2,0,null,104,[]],
+FV:[function(a,b){H.bQ(b,new W.Zc(this))},"call$1","gDY",2,0,null,109,[]],
di:[function(a){var z
-for(z=this.gUQ(this),z=H.VM(new H.a7(z,z.length,0,null),[H.Kp(z,0)]);z.G(););return!1},"call$1","gmc",2,0,null,23,[]],
+for(z=this.gUQ(this),z=H.VM(new H.a7(z,z.length,0,null),[H.Kp(z,0)]);z.G(););return!1},"call$1","gmc",2,0,null,28,[]],
V1:[function(a){var z
-for(z=this.gvc(this),z=H.VM(new H.a7(z,z.length,0,null),[H.Kp(z,0)]);z.G();)this.Rz(0,z.lo)},"call$0","gyP",0,0,null],
+for(z=this.gvc(this),z=H.VM(new H.a7(z,z.length,0,null),[H.Kp(z,0)]);z.G();)this.Rz(0,z.lo)},"call$0","gRa",0,0,null],
aN:[function(a,b){var z,y
for(z=this.gvc(this),z=H.VM(new H.a7(z,z.length,0,null),[H.Kp(z,0)]);z.G();){y=z.lo
-b.call$2(y,this.t(0,y))}},"call$1","gjw",2,0,null,115,[]],
+b.call$2(y,this.t(0,y))}},"call$1","gjw",2,0,null,117,[]],
gvc:function(a){var z,y,x,w
z=this.MW.attributes
y=H.VM([],[J.O])
@@ -17483,21 +16969,21 @@
$isZ0:true,
$asZ0:function(){return[J.O,J.O]}},
Zc:{
-"^":"Tp:346;a",
-call$2:[function(a,b){this.a.u(0,a,b)},"call$2",null,4,0,null,402,[],277,[],"call"],
+"^":"Tp:348;a",
+call$2:[function(a,b){this.a.u(0,a,b)},"call$2",null,4,0,null,442,[],272,[],"call"],
$isEH:true},
i7:{
"^":"tJ;MW",
-x4:[function(a){return this.MW.hasAttribute(a)},"call$1","gV9",2,0,null,42,[]],
-t:[function(a,b){return this.MW.getAttribute(b)},"call$1","gIA",2,0,null,42,[]],
-u:[function(a,b,c){this.MW.setAttribute(b,c)},"call$2","gj3",4,0,null,42,[],23,[]],
+x4:[function(a){return this.MW.hasAttribute(a)},"call$1","gV9",2,0,null,47,[]],
+t:[function(a,b){return this.MW.getAttribute(b)},"call$1","gIA",2,0,null,47,[]],
+u:[function(a,b,c){this.MW.setAttribute(b,c)},"call$2","gj3",4,0,null,47,[],28,[]],
Rz:[function(a,b){var z,y
z=this.MW
y=z.getAttribute(b)
z.removeAttribute(b)
-return y},"call$1","gRI",2,0,null,42,[]],
+return y},"call$1","guH",2,0,null,47,[]],
gB:function(a){return this.gvc(this).length},
-FJ:[function(a){return a.namespaceURI==null},"call$1","giG",2,0,null,264,[]]},
+FJ:[function(a){return a.namespaceURI==null},"call$1","giG",2,0,null,260,[]]},
nF:{
"^":"As;QX,Kd",
lF:[function(){var z=P.Ls(null,null,null,J.O)
@@ -17505,38 +16991,38 @@
return z},"call$0","gt8",0,0,null],
p5:[function(a){var z,y
z=C.Nm.zV(P.F(a,!0,null)," ")
-for(y=this.QX,y=H.VM(new H.a7(y,y.length,0,null),[H.Kp(y,0)]);y.G();)J.Pw(y.lo,z)},"call$1","gpJ",2,0,null,86,[]],
-OS:[function(a){this.Kd.aN(0,new W.vf(a))},"call$1","gFd",2,0,null,115,[]],
-O4:[function(a,b){return this.xz(new W.Iw(a,b))},function(a){return this.O4(a,null)},"Mf","call$2",null,"gMk",2,2,null,77,23,[],508,[]],
-Rz:[function(a,b){return this.xz(new W.Fc(b))},"call$1","gRI",2,0,null,23,[]],
-xz:[function(a){return this.Kd.es(0,!1,new W.hD(a))},"call$1","gVz",2,0,null,115,[]],
+for(y=this.QX,y=H.VM(new H.a7(y,y.length,0,null),[H.Kp(y,0)]);y.G();)J.Pw(y.lo,z)},"call$1","gVH",2,0,null,91,[]],
+OS:[function(a){this.Kd.aN(0,new W.vf(a))},"call$1","gFd",2,0,null,117,[]],
+O4:[function(a,b){return this.xz(new W.Iw(a,b))},function(a){return this.O4(a,null)},"qU","call$2",null,"gMk",2,2,null,82,28,[],475,[]],
+Rz:[function(a,b){return this.xz(new W.Fc(b))},"call$1","guH",2,0,null,28,[]],
+xz:[function(a){return this.Kd.es(0,!1,new W.hD(a))},"call$1","gVz",2,0,null,117,[]],
yJ:function(a){this.Kd=H.VM(new H.A8(P.F(this.QX,!0,null),new W.FK()),[null,null])},
static:{or:function(a){var z=new W.nF(a,null)
z.yJ(a)
return z}}},
FK:{
-"^":"Tp:107;",
-call$1:[function(a){return new W.I4(a)},"call$1",null,2,0,null,18,[],"call"],
+"^":"Tp:112;",
+call$1:[function(a){return new W.I4(a)},"call$1",null,2,0,null,19,[],"call"],
$isEH:true},
Si:{
-"^":"Tp:107;a",
-call$1:[function(a){return this.a.FV(0,a.lF())},"call$1",null,2,0,null,18,[],"call"],
+"^":"Tp:112;a",
+call$1:[function(a){return this.a.FV(0,a.lF())},"call$1",null,2,0,null,19,[],"call"],
$isEH:true},
vf:{
-"^":"Tp:107;a",
-call$1:[function(a){return a.OS(this.a)},"call$1",null,2,0,null,18,[],"call"],
+"^":"Tp:112;a",
+call$1:[function(a){return a.OS(this.a)},"call$1",null,2,0,null,19,[],"call"],
$isEH:true},
Iw:{
-"^":"Tp:107;a,b",
-call$1:[function(a){return a.O4(this.a,this.b)},"call$1",null,2,0,null,18,[],"call"],
+"^":"Tp:112;a,b",
+call$1:[function(a){return a.O4(this.a,this.b)},"call$1",null,2,0,null,19,[],"call"],
$isEH:true},
Fc:{
-"^":"Tp:107;a",
-call$1:[function(a){return J.V1(a,this.a)},"call$1",null,2,0,null,18,[],"call"],
+"^":"Tp:112;a",
+call$1:[function(a){return J.V1(a,this.a)},"call$1",null,2,0,null,19,[],"call"],
$isEH:true},
hD:{
-"^":"Tp:346;a",
-call$2:[function(a,b){return this.a.call$1(b)===!0||a===!0},"call$2",null,4,0,null,509,[],129,[],"call"],
+"^":"Tp:348;a",
+call$2:[function(a,b){return this.a.call$1(b)===!0||a===!0},"call$2",null,4,0,null,476,[],132,[],"call"],
$isEH:true},
I4:{
"^":"As;MW",
@@ -17545,36 +17031,36 @@
for(y=J.uf(this.MW).split(" "),y=H.VM(new H.a7(y,y.length,0,null),[H.Kp(y,0)]);y.G();){x=J.rr(y.lo)
if(x.length!==0)z.h(0,x)}return z},"call$0","gt8",0,0,null],
p5:[function(a){P.F(a,!0,null)
-J.Pw(this.MW,a.zV(0," "))},"call$1","gpJ",2,0,null,86,[]]},
+J.Pw(this.MW,a.zV(0," "))},"call$1","gVH",2,0,null,91,[]]},
e0:{
"^":"a;Ph",
-zc:[function(a,b){return H.VM(new W.RO(a,this.Ph,b),[null])},function(a){return this.zc(a,!1)},"aM","call$2$useCapture",null,"gII",2,3,null,152,18,[],298,[]],
-Qm:[function(a,b){return H.VM(new W.eu(a,this.Ph,b),[null])},function(a){return this.Qm(a,!1)},"f0","call$2$useCapture",null,"gAW",2,3,null,152,18,[],298,[]],
-jl:[function(a,b){return H.VM(new W.pu(a,b,this.Ph),[null])},function(a){return this.jl(a,!1)},"vo","call$2$useCapture",null,"gcJ",2,3,null,152,18,[],298,[]]},
+zc:[function(a,b){return H.VM(new W.RO(a,this.Ph,b),[null])},function(a){return this.zc(a,!1)},"aM","call$2$useCapture",null,"gII",2,3,null,210,19,[],296,[]],
+Qm:[function(a,b){return H.VM(new W.eu(a,this.Ph,b),[null])},function(a){return this.Qm(a,!1)},"f0","call$2$useCapture",null,"gAW",2,3,null,210,19,[],296,[]],
+jl:[function(a,b){return H.VM(new W.pu(a,b,this.Ph),[null])},function(a){return this.jl(a,!1)},"vo","call$2$useCapture",null,"gcJ",2,3,null,210,19,[],296,[]]},
RO:{
"^":"qh;uv,Ph,Sg",
KR:[function(a,b,c,d){var z=new W.Ov(0,this.uv,this.Ph,W.aF(a),this.Sg)
z.$builtinTypeInfo=this.$builtinTypeInfo
z.Zz()
-return z},function(a,b,c){return this.KR(a,null,b,c)},"zC",function(a){return this.KR(a,null,null,null)},"yI","call$4$cancelOnError$onDone$onError",null,null,"gp8",2,7,null,77,77,77,461,[],456,[],462,[],164,[]]},
+return z},function(a,b,c){return this.KR(a,null,b,c)},"zC",function(a){return this.KR(a,null,null,null)},"yI","call$4$cancelOnError$onDone$onError",null,null,"gp8",2,7,null,82,82,82,427,[],163,[],428,[],422,[]]},
eu:{
"^":"RO;uv,Ph,Sg",
WO:[function(a,b){var z=H.VM(new P.nO(new W.ie(b),this),[H.ip(this,"qh",0)])
-return H.VM(new P.t3(new W.Ea(b),z),[H.ip(z,"qh",0),null])},"call$1","grM",2,0,null,510,[]],
+return H.VM(new P.t3(new W.Ea(b),z),[H.ip(z,"qh",0),null])},"call$1","grM",2,0,null,477,[]],
$isqh:true},
ie:{
-"^":"Tp:107;a",
-call$1:[function(a){return J.NQ(J.l2(a),this.a)},"call$1",null,2,0,null,384,[],"call"],
+"^":"Tp:112;a",
+call$1:[function(a){return J.NQ(J.l2(a),this.a)},"call$1",null,2,0,null,368,[],"call"],
$isEH:true},
Ea:{
-"^":"Tp:107;b",
+"^":"Tp:112;b",
call$1:[function(a){J.og(a,this.b)
-return a},"call$1",null,2,0,null,18,[],"call"],
+return a},"call$1",null,2,0,null,19,[],"call"],
$isEH:true},
pu:{
"^":"qh;DI,Sg,Ph",
WO:[function(a,b){var z=H.VM(new P.nO(new W.i2(b),this),[H.ip(this,"qh",0)])
-return H.VM(new P.t3(new W.b0(b),z),[H.ip(z,"qh",0),null])},"call$1","grM",2,0,null,510,[]],
+return H.VM(new P.t3(new W.b0(b),z),[H.ip(z,"qh",0),null])},"call$1","grM",2,0,null,477,[]],
KR:[function(a,b,c,d){var z,y,x,w,v
z=H.VM(new W.qO(null,P.L5(null,null,null,[P.qh,null],[P.MO,null])),[null])
z.KS(null)
@@ -17582,16 +17068,16 @@
v.$builtinTypeInfo=[null]
z.h(0,v)}y=z.aV
y.toString
-return H.VM(new P.Ik(y),[H.Kp(y,0)]).KR(a,b,c,d)},function(a,b,c){return this.KR(a,null,b,c)},"zC",function(a){return this.KR(a,null,null,null)},"yI","call$4$cancelOnError$onDone$onError",null,null,"gp8",2,7,null,77,77,77,461,[],456,[],462,[],164,[]],
+return H.VM(new P.Ik(y),[H.Kp(y,0)]).KR(a,b,c,d)},function(a,b,c){return this.KR(a,null,b,c)},"zC",function(a){return this.KR(a,null,null,null)},"yI","call$4$cancelOnError$onDone$onError",null,null,"gp8",2,7,null,82,82,82,427,[],163,[],428,[],422,[]],
$isqh:true},
i2:{
-"^":"Tp:107;a",
-call$1:[function(a){return J.NQ(J.l2(a),this.a)},"call$1",null,2,0,null,384,[],"call"],
+"^":"Tp:112;a",
+call$1:[function(a){return J.NQ(J.l2(a),this.a)},"call$1",null,2,0,null,368,[],"call"],
$isEH:true},
b0:{
-"^":"Tp:107;b",
+"^":"Tp:112;b",
call$1:[function(a){J.og(a,this.b)
-return a},"call$1",null,2,0,null,18,[],"call"],
+return a},"call$1",null,2,0,null,19,[],"call"],
$isEH:true},
Ov:{
"^":"MO;VP,uv,Ph,u7,Sg",
@@ -17600,9 +17086,9 @@
this.uv=null
this.u7=null
return},"call$0","gZS",0,0,null],
-nB:[function(a,b){if(this.uv==null)return
+Fv:[function(a,b){if(this.uv==null)return
this.VP=this.VP+1
-this.Ns()},function(a){return this.nB(a,null)},"yy","call$1",null,"gAK",0,2,null,77,459,[]],
+this.Ns()},function(a){return this.Fv(a,null)},"yy","call$1",null,"gAK",0,2,null,82,425,[]],
gRW:function(){return this.VP>0},
QE:[function(){if(this.uv==null||this.VP<=0)return
this.VP=this.VP-1
@@ -17617,57 +17103,57 @@
z=this.eM
if(z.x4(b))return
y=this.aV
-z.u(0,b,b.zC(y.ght(y),new W.RX(this,b),this.aV.gXB()))},"call$1","ght",2,0,null,511,[]],
+z.u(0,b,b.zC(y.ght(y),new W.RX(this,b),this.aV.gGj()))},"call$1","ght",2,0,null,478,[]],
Rz:[function(a,b){var z=this.eM.Rz(0,b)
-if(z!=null)z.ed()},"call$1","gRI",2,0,null,511,[]],
+if(z!=null)z.ed()},"call$1","guH",2,0,null,478,[]],
cO:[function(a){var z,y
for(z=this.eM,y=z.gUQ(z),y=H.VM(new H.MH(null,J.GP(y.l6),y.T6),[H.Kp(y,0),H.Kp(y,1)]);y.G();)y.lo.ed()
z.V1(0)
-this.aV.cO(0)},"call$0","gJK",0,0,112],
+this.aV.cO(0)},"call$0","gJK",0,0,114],
KS:function(a){this.aV=P.bK(this.gJK(this),null,!0,a)}},
RX:{
-"^":"Tp:113;a,b",
+"^":"Tp:115;a,b",
call$0:[function(){return this.a.Rz(0,this.b)},"call$0",null,0,0,null,"call"],
$isEH:true},
-hP:{
-"^":"a;vm",
-cN:function(a){return this.vm.call$1(a)},
-zc:[function(a,b){return H.VM(new W.RO(a,this.cN(a),b),[null])},function(a){return this.zc(a,!1)},"aM","call$2$useCapture",null,"gII",2,3,null,152,18,[],298,[]]},
+bO:{
+"^":"a;Ob",
+cN:function(a){return this.Ob.call$1(a)},
+zc:[function(a,b){return H.VM(new W.RO(a,this.cN(a),b),[null])},function(a){return this.zc(a,!1)},"aM","call$2$useCapture",null,"gII",2,3,null,210,19,[],296,[]]},
Gm:{
"^":"a;",
gA:function(a){return H.VM(new W.W9(a,this.gB(a),-1,null),[H.ip(a,"Gm",0)])},
-h:[function(a,b){throw H.b(P.f("Cannot add to immutable List."))},"call$1","ght",2,0,null,23,[]],
-FV:[function(a,b){throw H.b(P.f("Cannot add to immutable List."))},"call$1","gDY",2,0,null,114,[]],
-GT:[function(a,b){throw H.b(P.f("Cannot sort immutable List."))},"call$1","gH7",0,2,null,77,133,[]],
-xe:[function(a,b,c){throw H.b(P.f("Cannot add to immutable List."))},"call$2","gQG",4,0,null,47,[],129,[]],
-KI:[function(a,b){throw H.b(P.f("Cannot remove from immutable List."))},"call$1","gNM",2,0,null,512,[]],
-Rz:[function(a,b){throw H.b(P.f("Cannot remove from immutable List."))},"call$1","gRI",2,0,null,6,[]],
-YW:[function(a,b,c,d,e){throw H.b(P.f("Cannot setRange on immutable List."))},"call$4","gaQ",6,2,null,335,120,[],121,[],114,[],122,[]],
+h:[function(a,b){throw H.b(P.f("Cannot add to immutable List."))},"call$1","ght",2,0,null,28,[]],
+FV:[function(a,b){throw H.b(P.f("Cannot add to immutable List."))},"call$1","gDY",2,0,null,116,[]],
+GT:[function(a,b){throw H.b(P.f("Cannot sort immutable List."))},"call$1","gH7",0,2,null,82,122,[]],
+xe:[function(a,b,c){throw H.b(P.f("Cannot add to immutable List."))},"call$2","gQG",4,0,null,52,[],132,[]],
+KI:[function(a,b){throw H.b(P.f("Cannot remove from immutable List."))},"call$1","gNM",2,0,null,479,[]],
+Rz:[function(a,b){throw H.b(P.f("Cannot remove from immutable List."))},"call$1","guH",2,0,null,6,[]],
+YW:[function(a,b,c,d,e){throw H.b(P.f("Cannot setRange on immutable List."))},"call$4","gam",6,2,null,332,123,[],124,[],116,[],125,[]],
$isList:true,
-$asWO:null,
+$aszM:null,
$isyN:true,
-$iscX:true,
-$ascX:null},
+$isQV:true,
+$asQV:null},
Of:{
"^":"ar;xa",
gA:function(a){return H.VM(new W.Qg(J.GP(this.xa)),[null])},
gB:function(a){return this.xa.length},
-h:[function(a,b){J.bi(this.xa,b)},"call$1","ght",2,0,null,129,[]],
-Rz:[function(a,b){return J.V1(this.xa,b)},"call$1","gRI",2,0,null,129,[]],
-V1:[function(a){J.U2(this.xa)},"call$0","gyP",0,0,null],
+h:[function(a,b){J.bi(this.xa,b)},"call$1","ght",2,0,null,132,[]],
+Rz:[function(a,b){return J.V1(this.xa,b)},"call$1","guH",2,0,null,132,[]],
+V1:[function(a){J.U2(this.xa)},"call$0","gRa",0,0,null],
t:[function(a,b){var z=this.xa
if(b>>>0!==b||b>=z.length)return H.e(z,b)
-return z[b]},"call$1","gIA",2,0,null,47,[]],
+return z[b]},"call$1","gIA",2,0,null,52,[]],
u:[function(a,b,c){var z=this.xa
if(b>>>0!==b||b>=z.length)return H.e(z,b)
-z[b]=c},"call$2","gj3",4,0,null,47,[],23,[]],
+z[b]=c},"call$2","gj3",4,0,null,52,[],28,[]],
sB:function(a,b){J.wg(this.xa,b)},
-GT:[function(a,b){J.LH(this.xa,b)},"call$1","gH7",0,2,null,77,133,[]],
-XU:[function(a,b,c){return J.hf(this.xa,b,c)},function(a,b){return this.XU(a,b,0)},"u8","call$2",null,"gIz",2,2,null,335,129,[],120,[]],
-Pk:[function(a,b,c){return J.pB(this.xa,b,c)},function(a,b){return this.Pk(a,b,null)},"cn","call$2",null,"gph",2,2,null,77,129,[],120,[]],
-xe:[function(a,b,c){return J.Nv(this.xa,b,c)},"call$2","gQG",4,0,null,47,[],129,[]],
-KI:[function(a,b){return J.tH(this.xa,b)},"call$1","gNM",2,0,null,47,[]],
-YW:[function(a,b,c,d,e){J.QQ(this.xa,b,c,d,e)},"call$4","gaQ",6,2,null,335,120,[],121,[],114,[],122,[]]},
+GT:[function(a,b){J.LH(this.xa,b)},"call$1","gH7",0,2,null,82,122,[]],
+XU:[function(a,b,c){return J.aK(this.xa,b,c)},function(a,b){return this.XU(a,b,0)},"u8","call$2",null,"gIz",2,2,null,332,132,[],123,[]],
+Pk:[function(a,b,c){return J.ff(this.xa,b,c)},function(a,b){return this.Pk(a,b,null)},"cn","call$2",null,"gcb",2,2,null,82,132,[],123,[]],
+xe:[function(a,b,c){return J.BM(this.xa,b,c)},"call$2","gQG",4,0,null,52,[],132,[]],
+KI:[function(a,b){return J.tH(this.xa,b)},"call$1","gNM",2,0,null,52,[]],
+YW:[function(a,b,c,d,e){J.L0(this.xa,b,c,d,e)},"call$4","gam",6,2,null,332,123,[],124,[],116,[],125,[]]},
Qg:{
"^":"a;je",
G:[function(){return this.je.G()},"call$0","gqy",0,0,null],
@@ -17684,29 +17170,30 @@
return!1},"call$0","gqy",0,0,null],
gl:function(){return this.QZ}},
vZ:{
-"^":"Tp:107;a,b",
+"^":"Tp:112;a,b",
call$1:[function(a){var z=H.Va(this.b)
Object.defineProperty(a, init.dispatchPropertyName, {value: z, enumerable: false, writable: true, configurable: true})
a.constructor=a.__proto__.constructor
-return this.a(a)},"call$1",null,2,0,null,41,[],"call"],
+return this.a(a)},"call$1",null,2,0,null,46,[],"call"],
$isEH:true},
dW:{
"^":"a;Ui",
geT:function(a){return W.P1(this.Ui.parent)},
cO:[function(a){return this.Ui.close()},"call$0","gJK",0,0,null],
-xc:[function(a,b,c,d){this.Ui.postMessage(b,c)},function(a,b,c){return this.xc(a,b,c,null)},"X6","call$3",null,"gmF",4,2,null,77,20,[],328,[],329,[]],
+xc:[function(a,b,c,d){this.Ui.postMessage(b,c)},function(a,b,c){return this.xc(a,b,c,null)},"X6","call$3",null,"gmF",4,2,null,82,22,[],326,[],327,[]],
gI:function(a){return H.vh(P.SY(null))},
-On:[function(a,b,c,d){return H.vh(P.SY(null))},"call$3","gIV",4,2,null,77,11,[],297,[],298,[]],
-Y9:[function(a,b,c,d){return H.vh(P.SY(null))},"call$3","gcF",4,2,null,77,11,[],297,[],298,[]],
+On:[function(a,b,c,d){return H.vh(P.SY(null))},"call$3","gIV",4,2,null,82,11,[],295,[],296,[]],
+Y9:[function(a,b,c,d){return H.vh(P.SY(null))},"call$3","gcF",4,2,null,82,11,[],295,[],296,[]],
$isD0:true,
$isGv:true,
static:{P1:[function(a){if(a===window)return a
-else return new W.dW(a)},"call$1","lG",2,0,null,237,[]]}},
+else return new W.dW(a)},"call$1","lG",2,0,null,233,[]]}},
Dk:{
"^":"a;WK",
gcC:function(a){return this.WK.hash},
scC:function(a,b){this.WK.hash=b},
gmH:function(a){return this.WK.href},
+VD:[function(a){return this.WK.reload()},"call$0","gQU",0,0,null],
bu:[function(a){return this.WK.toString()},"call$0","gXo",0,0,null],
$iscS:true,
$isGv:true}}],["dart.dom.indexed_db","dart:indexed_db",,P,{
@@ -17728,7 +17215,7 @@
"^":"d5;",
$isGv:true,
"%":"SVGAnimateColorElement|SVGAnimateElement|SVGAnimateMotionElement|SVGAnimateTransformElement|SVGAnimationElement|SVGSetElement"},
-mk:{
+vO:{
"^":"d0;",
$isGv:true,
"%":"SVGCircleElement"},
@@ -17748,7 +17235,7 @@
"^":"d5;",
$isGv:true,
"%":"SVGFEBlendElement"},
-bd:{
+lv:{
"^":"d5;t5:type=,UQ:values=",
$isGv:true,
"%":"SVGFEColorMatrixElement"},
@@ -17768,7 +17255,7 @@
"^":"d5;",
$isGv:true,
"%":"SVGFEDiffuseLightingElement"},
-wf:{
+kK:{
"^":"d5;",
$isGv:true,
"%":"SVGFEDisplacementMapElement"},
@@ -17776,7 +17263,7 @@
"^":"d5;",
$isGv:true,
"%":"SVGFEFloodElement"},
-tk:{
+Ob:{
"^":"d5;",
$isGv:true,
"%":"SVGFEGaussianBlurElement"},
@@ -17796,11 +17283,11 @@
"^":"d5;",
$isGv:true,
"%":"SVGFEOffsetElement"},
-kK:{
+um:{
"^":"d5;",
$isGv:true,
"%":"SVGFESpecularLightingElement"},
-um:{
+kL:{
"^":"d5;",
$isGv:true,
"%":"SVGFETileElement"},
@@ -17835,7 +17322,7 @@
"^":"d0;",
$isGv:true,
"%":"SVGLineElement"},
-uzr:{
+Jq:{
"^":"d5;",
$isGv:true,
"%":"SVGMarkerElement"},
@@ -17843,7 +17330,7 @@
"^":"d5;",
$isGv:true,
"%":"SVGMaskElement"},
-lZ:{
+AW:{
"^":"d0;",
$isGv:true,
"%":"SVGPathElement"},
@@ -17855,7 +17342,7 @@
"^":"d0;",
$isGv:true,
"%":"SVGPolygonElement"},
-mO:{
+GH:{
"^":"d0;",
$isGv:true,
"%":"SVGPolylineElement"},
@@ -17876,7 +17363,7 @@
return a._cssClassSet},
gwd:function(a){return H.VM(new P.D7(a,new W.e7(a)),[W.cv])},
swd:function(a,b){var z=H.VM(new P.D7(a,new W.e7(a)),[W.cv])
-z.h2.NL.textContent=""
+J.c9(z.h2.NL,"")
z.FV(0,b)},
gi9:function(a){return C.mt.f0(a)},
gVl:function(a){return C.pi.f0(a)},
@@ -17886,7 +17373,7 @@
"%":"SVGAltGlyphDefElement|SVGAltGlyphItemElement|SVGComponentTransferFunctionElement|SVGDescElement|SVGFEDistantLightElement|SVGFEFuncAElement|SVGFEFuncBElement|SVGFEFuncGElement|SVGFEFuncRElement|SVGFEMergeNodeElement|SVGFEPointLightElement|SVGFESpotLightElement|SVGFontElement|SVGFontFaceElement|SVGFontFaceFormatElement|SVGFontFaceNameElement|SVGFontFaceSrcElement|SVGFontFaceUriElement|SVGGlyphElement|SVGHKernElement|SVGMetadataElement|SVGMissingGlyphElement|SVGStopElement|SVGTitleElement|SVGVKernElement;SVGElement"},
hy:{
"^":"zp;",
-Kb:[function(a,b){return a.getElementById(b)},"call$1","giu",2,0,null,293,[]],
+Kb:[function(a,b){return a.getElementById(b)},"call$1","giu",2,0,null,291,[]],
$ishy:true,
$isGv:true,
"%":"SVGSVGElement"},
@@ -17925,7 +17412,7 @@
"^":"d5;",
$isGv:true,
"%":"SVGCursorElement"},
-cB:{
+hW:{
"^":"d5;",
$isGv:true,
"%":"SVGFEDropShadowElement"},
@@ -17945,27 +17432,27 @@
if(z==null)return y
for(x=z.split(" "),x=H.VM(new H.a7(x,x.length,0,null),[H.Kp(x,0)]);x.G();){w=J.rr(x.lo)
if(w.length!==0)y.h(0,w)}return y},"call$0","gt8",0,0,null],
-p5:[function(a){this.LO.setAttribute("class",a.zV(0," "))},"call$1","gpJ",2,0,null,86,[]]}}],["dart.dom.web_sql","dart:web_sql",,P,{
+p5:[function(a){this.LO.setAttribute("class",a.zV(0," "))},"call$1","gVH",2,0,null,91,[]]}}],["dart.dom.web_sql","dart:web_sql",,P,{
"^":"",
TM:{
"^":"Gv;tT:code=,G1:message=",
"%":"SQLError"}}],["dart.isolate","dart:isolate",,P,{
"^":"",
-IU:{
+hq:{
"^":"a;",
-$isIU:true,
+$ishq:true,
static:{Jz:function(){return new H.ku((Math.random()*0x100000000>>>0)+(Math.random()*0x100000000>>>0)*4294967296)}}}}],["dart.js","dart:js",,P,{
"^":"",
-xZ:[function(a,b){return function(_call, f, captureThis) {return function() {return _call(f, captureThis, this, Array.prototype.slice.apply(arguments));}}(P.R4, a, b)},"call$2$captureThis","Kc",2,3,null,152,115,[],238,[]],
+xZ:[function(a,b){return function(_call, f, captureThis) {return function() {return _call(f, captureThis, this, Array.prototype.slice.apply(arguments));}}(P.R4, a, b)},"call$2$captureThis","oo",2,3,null,210,117,[],234,[]],
R4:[function(a,b,c,d){var z
if(b===!0){z=[c]
C.Nm.FV(z,d)
-d=z}return P.wY(H.Ek(a,P.F(J.C0(d,P.Xl()),!0,null),P.Te(null)))},"call$4","qH",8,0,null,156,[],238,[],169,[],82,[]],
+d=z}return P.wY(H.Ek(a,P.F(J.C0(d,P.Xl()),!0,null),P.Te(null)))},"call$4","qH",8,0,null,155,[],234,[],168,[],87,[]],
Dm:[function(a,b,c){var z
if(Object.isExtensible(a))try{Object.defineProperty(a, b, { value: c})
-return!0}catch(z){H.Ru(z)}return!1},"call$3","bE",6,0,null,91,[],12,[],23,[]],
+return!0}catch(z){H.Ru(z)}return!1},"call$3","bE",6,0,null,96,[],12,[],28,[]],
Om:[function(a,b){if(Object.prototype.hasOwnProperty.call(a,b))return a[b]
-return},"call$2","Cb",4,0,null,91,[],12,[]],
+return},"call$2","Cb",4,0,null,96,[],12,[]],
wY:[function(a){var z
if(a==null)return
else{if(typeof a!=="string")if(typeof a!=="number")if(typeof a!=="boolean"){z=J.x(a)
@@ -17977,44 +17464,45 @@
if(typeof a==="object"&&a!==null&&!!z.$isiP)return H.o2(a)
else if(typeof a==="object"&&a!==null&&!!z.$isE4)return a.eh
else if(typeof a==="object"&&a!==null&&!!z.$isEH)return P.hE(a,"$dart_jsFunction",new P.DV())
-else return P.hE(a,"_$dart_jsObject",new P.Hp())}}},"call$1","En",2,0,107,91,[]],
+else return P.hE(a,"_$dart_jsObject",new P.Hp($.hs()))}}},"call$1","En",2,0,112,96,[]],
hE:[function(a,b,c){var z=P.Om(a,b)
if(z==null){z=c.call$1(a)
-P.Dm(a,b,z)}return z},"call$3","nB",6,0,null,91,[],63,[],240,[]],
+P.Dm(a,b,z)}return z},"call$3","dw",6,0,null,96,[],68,[],236,[]],
dU:[function(a){var z
if(a==null||typeof a=="string"||typeof a=="number"||typeof a=="boolean")return a
else{if(a instanceof Object){z=J.x(a)
z=typeof a==="object"&&a!==null&&!!z.$isAz||typeof a==="object"&&a!==null&&!!z.$isea||typeof a==="object"&&a!==null&&!!z.$ishF||typeof a==="object"&&a!==null&&!!z.$isSg||typeof a==="object"&&a!==null&&!!z.$isKV||typeof a==="object"&&a!==null&&!!z.$isHY||typeof a==="object"&&a!==null&&!!z.$isu9}else z=!1
if(z)return a
-else if(a instanceof Date)return P.Wu(a.getMilliseconds(),!1)
-else if(a.constructor===DartObject)return a.o
-else return P.ND(a)}},"call$1","Xl",2,0,195,91,[]],
+else if(a instanceof Date)return P.Wu(a.getTime(),!1)
+else if(a.constructor===$.hs())return a.o
+else return P.ND(a)}},"call$1","Xl",2,0,194,96,[]],
ND:[function(a){if(typeof a=="function")return P.iQ(a,$.Dp(),new P.Nz())
else if(a instanceof Array)return P.iQ(a,$.Iq(),new P.Jd())
-else return P.iQ(a,$.Iq(),new P.QS())},"call$1","ln",2,0,null,91,[]],
+else return P.iQ(a,$.Iq(),new P.QS())},"call$1","ln",2,0,null,96,[]],
iQ:[function(a,b,c){var z=P.Om(a,b)
if(z==null||!(a instanceof Object)){z=c.call$1(a)
-P.Dm(a,b,z)}return z},"call$3","yF",6,0,null,91,[],63,[],240,[]],
+P.Dm(a,b,z)}return z},"call$3","yF",6,0,null,96,[],68,[],236,[]],
E4:{
"^":"a;eh",
t:[function(a,b){if(typeof b!=="string"&&typeof b!=="number")throw H.b(new P.AT("property is not a String or num"))
-return P.dU(this.eh[b])},"call$1","gIA",2,0,null,66,[]],
+return P.dU(this.eh[b])},"call$1","gIA",2,0,null,71,[]],
u:[function(a,b,c){if(typeof b!=="string"&&typeof b!=="number")throw H.b(new P.AT("property is not a String or num"))
-this.eh[b]=P.wY(c)},"call$2","gj3",4,0,null,66,[],23,[]],
+this.eh[b]=P.wY(c)},"call$2","gj3",4,0,null,71,[],28,[]],
giO:function(a){return 0},
n:[function(a,b){var z
if(b==null)return!1
z=J.x(b)
-return typeof b==="object"&&b!==null&&!!z.$isE4&&this.eh===b.eh},"call$1","gUJ",2,0,null,104,[]],
-Bm:[function(a){return a in this.eh},"call$1","gVOe",2,0,null,66,[]],
+return typeof b==="object"&&b!==null&&!!z.$isE4&&this.eh===b.eh},"call$1","gUJ",2,0,null,109,[]],
+Bm:[function(a){return a in this.eh},"call$1","gVOe",2,0,null,71,[]],
bu:[function(a){var z,y
try{z=String(this.eh)
return z}catch(y){H.Ru(y)
return P.a.prototype.bu.call(this,this)}},"call$0","gXo",0,0,null],
V7:[function(a,b){var z,y
z=this.eh
-y=b==null?null:P.F(J.C0(b,P.En()),!0,null)
-return P.dU(z[a].apply(z,y))},function(a){return this.V7(a,null)},"nQ","call$2",null,"gwK",2,2,null,77,224,[],268,[]],
+if(b==null)y=null
+else{b.toString
+y=P.F(H.VM(new H.A8(b,P.En()),[null,null]),!0,null)}return P.dU(z[a].apply(z,y))},function(a){return this.V7(a,null)},"nQ","call$2",null,"gah",2,2,null,82,220,[],17,[]],
$isE4:true,
static:{uw:function(a,b){var z,y,x
z=P.wY(a)
@@ -18024,9 +17512,9 @@
C.Nm.FV(y,H.VM(new H.A8(b,P.En()),[null,null]))
x=z.bind.apply(z,y)
String(x)
-return P.ND(new x())},jT:function(a){return P.ND(P.M0(a))},M0:[function(a){return new P.Gn(P.UD(null,null)).call$1(a)},"call$1","Ij",2,0,null,239,[]]}},
+return P.ND(new x())},jT:function(a){return P.ND(P.M0(a))},M0:[function(a){return new P.Gn(P.UD(null,null)).call$1(a)},"call$1","Ij",2,0,null,235,[]]}},
Gn:{
-"^":"Tp:107;a",
+"^":"Tp:112;a",
call$1:[function(a){var z,y,x,w,v
z=this.a
if(z.x4(a))return z.t(0,a)
@@ -18034,10 +17522,10 @@
if(typeof a==="object"&&a!==null&&!!y.$isZ0){x={}
z.u(0,a,x)
for(z=J.GP(y.gvc(a));z.G();){w=z.gl()
-x[w]=this.call$1(y.t(a,w))}return x}else if(typeof a==="object"&&a!==null&&(a.constructor===Array||!!y.$iscX)){v=[]
+x[w]=this.call$1(y.t(a,w))}return x}else if(typeof a==="object"&&a!==null&&(a.constructor===Array||!!y.$isQV)){v=[]
z.u(0,a,v)
C.Nm.FV(v,y.ez(a,this))
-return v}else return P.wY(a)},"call$1",null,2,0,null,91,[],"call"],
+return v}else return P.wY(a)},"call$1",null,2,0,null,96,[],"call"],
$isEH:true},
r7:{
"^":"E4;eh"},
@@ -18048,31 +17536,31 @@
if(typeof z!=="number")return H.s(z)
z=b>=z}else z=!0
else z=!1
-if(z)throw H.b(P.TE(b,0,P.E4.prototype.t.call(this,this,"length")))},"call$1","gvs",2,0,null,47,[]],
+if(z)throw H.b(P.TE(b,0,P.E4.prototype.t.call(this,this,"length")))},"call$1","gvs",2,0,null,52,[]],
t:[function(a,b){var z
if(typeof b==="number"&&b===C.CD.yu(b)){if(typeof b==="number"&&Math.floor(b)===b)if(!(b<0)){z=P.E4.prototype.t.call(this,this,"length")
if(typeof z!=="number")return H.s(z)
z=b>=z}else z=!0
else z=!1
-if(z)H.vh(P.TE(b,0,P.E4.prototype.t.call(this,this,"length")))}return P.E4.prototype.t.call(this,this,b)},"call$1","gIA",2,0,null,47,[]],
+if(z)H.vh(P.TE(b,0,P.E4.prototype.t.call(this,this,"length")))}return P.E4.prototype.t.call(this,this,b)},"call$1","gIA",2,0,null,52,[]],
u:[function(a,b,c){var z
if(typeof b==="number"&&b===C.CD.yu(b)){if(typeof b==="number"&&Math.floor(b)===b)if(!(b<0)){z=P.E4.prototype.t.call(this,this,"length")
if(typeof z!=="number")return H.s(z)
z=b>=z}else z=!0
else z=!1
-if(z)H.vh(P.TE(b,0,P.E4.prototype.t.call(this,this,"length")))}P.E4.prototype.u.call(this,this,b,c)},"call$2","gj3",4,0,null,47,[],23,[]],
+if(z)H.vh(P.TE(b,0,P.E4.prototype.t.call(this,this,"length")))}P.E4.prototype.u.call(this,this,b,c)},"call$2","gj3",4,0,null,52,[],28,[]],
gB:function(a){return P.E4.prototype.t.call(this,this,"length")},
sB:function(a,b){P.E4.prototype.u.call(this,this,"length",b)},
-h:[function(a,b){this.V7("push",[b])},"call$1","ght",2,0,null,23,[]],
-FV:[function(a,b){this.V7("push",b instanceof Array?b:P.F(b,!0,null))},"call$1","gDY",2,0,null,114,[]],
+h:[function(a,b){this.V7("push",[b])},"call$1","ght",2,0,null,28,[]],
+FV:[function(a,b){this.V7("push",b instanceof Array?b:P.F(b,!0,null))},"call$1","gDY",2,0,null,116,[]],
xe:[function(a,b,c){var z
if(b>=0){z=J.WB(P.E4.prototype.t.call(this,this,"length"),1)
if(typeof z!=="number")return H.s(z)
z=b>=z}else z=!0
if(z)H.vh(P.TE(b,0,P.E4.prototype.t.call(this,this,"length")))
-this.V7("splice",[b,0,c])},"call$2","gQG",4,0,null,47,[],129,[]],
+this.V7("splice",[b,0,c])},"call$2","gQG",4,0,null,52,[],132,[]],
KI:[function(a,b){this.fz(0,b)
-return J.UQ(this.V7("splice",[b,1]),0)},"call$1","gNM",2,0,null,47,[]],
+return J.UQ(this.V7("splice",[b,1]),0)},"call$1","gNM",2,0,null,52,[]],
YW:[function(a,b,c,d,e){var z,y,x
if(b>=0){z=P.E4.prototype.t.call(this,this,"length")
if(typeof z!=="number")return H.s(z)
@@ -18086,38 +17574,37 @@
x=[b,y]
z=new H.nH(d,e,null)
z.$builtinTypeInfo=[null]
-if(e<0)H.vh(P.N(e))
C.Nm.FV(x,z.qZ(0,y))
-this.V7("splice",x)},"call$4","gaQ",6,2,null,335,120,[],121,[],114,[],122,[]],
-GT:[function(a,b){this.V7("sort",[b])},"call$1","gH7",0,2,null,77,133,[]]},
+this.V7("splice",x)},"call$4","gam",6,2,null,332,123,[],124,[],116,[],125,[]],
+GT:[function(a,b){this.V7("sort",[b])},"call$1","gH7",0,2,null,82,122,[]]},
Wk:{
"^":"E4+lD;",
$isList:true,
-$asWO:null,
+$aszM:null,
$isyN:true,
-$iscX:true,
-$ascX:null},
+$isQV:true,
+$asQV:null},
DV:{
-"^":"Tp:107;",
+"^":"Tp:112;",
call$1:[function(a){var z=P.xZ(a,!1)
P.Dm(z,$.Dp(),a)
-return z},"call$1",null,2,0,null,91,[],"call"],
+return z},"call$1",null,2,0,null,96,[],"call"],
$isEH:true},
Hp:{
-"^":"Tp:107;",
-call$1:[function(a){return new DartObject(a)},"call$1",null,2,0,null,91,[],"call"],
+"^":"Tp:112;a",
+call$1:[function(a){return new this.a(a)},"call$1",null,2,0,null,96,[],"call"],
$isEH:true},
Nz:{
-"^":"Tp:107;",
-call$1:[function(a){return new P.r7(a)},"call$1",null,2,0,null,91,[],"call"],
+"^":"Tp:112;",
+call$1:[function(a){return new P.r7(a)},"call$1",null,2,0,null,96,[],"call"],
$isEH:true},
Jd:{
-"^":"Tp:107;",
-call$1:[function(a){return H.VM(new P.Tz(a),[null])},"call$1",null,2,0,null,91,[],"call"],
+"^":"Tp:112;",
+call$1:[function(a){return H.VM(new P.Tz(a),[null])},"call$1",null,2,0,null,96,[],"call"],
$isEH:true},
QS:{
-"^":"Tp:107;",
-call$1:[function(a){return new P.E4(a)},"call$1",null,2,0,null,91,[],"call"],
+"^":"Tp:112;",
+call$1:[function(a){return new P.E4(a)},"call$1",null,2,0,null,96,[],"call"],
$isEH:true}}],["dart.math","dart:math",,P,{
"^":"",
J:[function(a,b){var z
@@ -18129,7 +17616,7 @@
if(a===0)z=b===0?1/b<0:b<0
else z=!1
if(z||isNaN(b))return b
-return a}return a},"call$2","yT",4,0,null,128,[],188,[]],
+return a}return a},"call$2","If",4,0,null,131,[],187,[]],
y:[function(a,b){if(typeof a!=="number")throw H.b(new P.AT(a))
if(typeof b!=="number")throw H.b(new P.AT(b))
if(a>b)return a
@@ -18137,7 +17624,7 @@
if(typeof b==="number"){if(typeof a==="number")if(a===0)return a+b
if(C.ON.gG0(b))return b
return a}if(b===0&&C.CD.gzP(a))return b
-return a},"call$2","Rb",4,0,null,128,[],188,[]]}],["dart.mirrors","dart:mirrors",,P,{
+return a},"call$2","Rb",4,0,null,131,[],187,[]]}],["dart.mirrors","dart:mirrors",,P,{
"^":"",
re:[function(a){var z,y
z=J.x(a)
@@ -18145,9 +17632,9 @@
y=P.o1(a)
z=J.x(y)
if(typeof y!=="object"||y===null||!z.$isMs)throw H.b(new P.AT(H.d(a)+" does not denote a class"))
-return y.gJi()},"call$1","vG",2,0,null,42,[]],
+return y.gJi()},"call$1","vG",2,0,null,47,[]],
o1:[function(a){if(J.de(a,C.HH)){$.Cm().toString
-return $.P8()}return H.jO(a.gLU())},"call$1","o9",2,0,null,42,[]],
+return $.P8()}return H.jO(a.gLU())},"call$1","o9",2,0,null,47,[]],
ej:{
"^":"a;",
$isej:true},
@@ -18175,9 +17662,9 @@
$isej:true,
$isX9:true,
$isNL:true},
-ac:{
+Fw:{
"^":"X9;",
-$isac:true},
+$isFw:true},
RS:{
"^":"a;",
$isRS:true,
@@ -18195,9 +17682,9 @@
$isNL:true,
$isej:true},
Lw:{
-"^":"a;ew,yz,nV,Li"}}],["dart.pkg.collection.wrappers","package:collection/wrappers.dart",,Q,{
+"^":"a;ew,yz,nV,f9"}}],["dart.pkg.collection.wrappers","package:collection/wrappers.dart",,Q,{
"^":"",
-ah:[function(){throw H.b(P.f("Cannot modify an unmodifiable Map"))},"call$0","A9",0,0,null],
+ah:[function(){throw H.b(P.f("Cannot modify an unmodifiable Map"))},"call$0","rX",0,0,null],
Gj:{
"^":"U4;EV"},
U4:{
@@ -18205,26 +17692,26 @@
$isZ0:true},
B8q:{
"^":"a;",
-u:[function(a,b,c){return Q.ah()},"call$2","gj3",4,0,null,42,[],23,[]],
-FV:[function(a,b){return Q.ah()},"call$1","gDY",2,0,null,104,[]],
-Rz:[function(a,b){Q.ah()},"call$1","gRI",2,0,null,42,[]],
-V1:[function(a){return Q.ah()},"call$0","gyP",0,0,null],
+u:[function(a,b,c){return Q.ah()},"call$2","gj3",4,0,null,47,[],28,[]],
+FV:[function(a,b){return Q.ah()},"call$1","gDY",2,0,null,109,[]],
+Rz:[function(a,b){Q.ah()},"call$1","guH",2,0,null,47,[]],
+V1:[function(a){return Q.ah()},"call$0","gRa",0,0,null],
$isZ0:true},
Nx:{
"^":"a;",
-t:[function(a,b){return this.EV.t(0,b)},"call$1","gIA",2,0,null,42,[]],
-u:[function(a,b,c){this.EV.u(0,b,c)},"call$2","gj3",4,0,null,42,[],23,[]],
-FV:[function(a,b){this.EV.FV(0,b)},"call$1","gDY",2,0,null,104,[]],
-V1:[function(a){this.EV.V1(0)},"call$0","gyP",0,0,null],
-x4:[function(a){return this.EV.x4(a)},"call$1","gV9",2,0,null,42,[]],
-di:[function(a){return this.EV.di(a)},"call$1","gmc",2,0,null,23,[]],
-aN:[function(a,b){this.EV.aN(0,b)},"call$1","gjw",2,0,null,115,[]],
+t:[function(a,b){return this.EV.t(0,b)},"call$1","gIA",2,0,null,47,[]],
+u:[function(a,b,c){this.EV.u(0,b,c)},"call$2","gj3",4,0,null,47,[],28,[]],
+FV:[function(a,b){this.EV.FV(0,b)},"call$1","gDY",2,0,null,109,[]],
+V1:[function(a){this.EV.V1(0)},"call$0","gRa",0,0,null],
+x4:[function(a){return this.EV.x4(a)},"call$1","gV9",2,0,null,47,[]],
+di:[function(a){return this.EV.di(a)},"call$1","gmc",2,0,null,28,[]],
+aN:[function(a,b){this.EV.aN(0,b)},"call$1","gjw",2,0,null,117,[]],
gl0:function(a){return this.EV.X5===0},
gor:function(a){return this.EV.X5!==0},
gvc:function(a){var z=this.EV
return H.VM(new P.i5(z),[H.Kp(z,0)])},
gB:function(a){return this.EV.X5},
-Rz:[function(a,b){return this.EV.Rz(0,b)},"call$1","gRI",2,0,null,42,[]],
+Rz:[function(a,b){return this.EV.Rz(0,b)},"call$1","guH",2,0,null,47,[]],
gUQ:function(a){var z=this.EV
return z.gUQ(z)},
$isZ0:true}}],["dart.typed_data.implementation","dart:_native_typed_data",,H,{
@@ -18244,18 +17731,13 @@
"^":"Gv;",
J2:[function(a,b,c){var z=J.Wx(b)
if(z.C(b,0)||z.F(b,c))throw H.b(P.TE(b,0,c))
-else throw H.b(new P.AT("Invalid list index "+H.d(b)))},"call$2","gYE",4,0,null,47,[],330,[]],
-XL:[function(a,b,c){if(b>>>0!=b||J.J5(b,c))this.J2(a,b,c)},"call$2","gDR",4,0,null,47,[],330,[]],
-PZ:[function(a,b,c,d){var z=d+1
-this.XL(a,b,z)
-if(c==null)return d
-this.XL(a,c,z)
-if(typeof c!=="number")return H.s(c)
-if(b>c)throw H.b(P.TE(b,0,c))
-return c},"call$3","gyD",6,0,null,120,[],121,[],330,[]],
+else throw H.b(new P.AT("Invalid list index "+H.d(b)))},"call$2","gYE",4,0,null,52,[],328,[]],
+ZF:[function(a,b,c){if(b>>>0!==b||b>=c)this.J2(a,b,c)},"call$2","gDR",4,0,null,52,[],328,[]],
+PZ:[function(a,b,c,d){this.ZF(a,b,d+1)
+return d},"call$3","gyD",6,0,null,123,[],124,[],328,[]],
$ispF:true,
$isHY:true,
-"%":";ArrayBufferView;LZ|Ob|Ip|Dg|Nb|nA|Pg"},
+"%":";ArrayBufferView;LZ|Ui|Ip|Dg|ObS|nA|Pg"},
df:{
"^":"pF;",
gbx:function(a){return C.T1},
@@ -18265,119 +17747,119 @@
"^":"Dg;",
gbx:function(a){return C.hN},
t:[function(a,b){var z=a.length
-if(b>>>0!=b||J.J5(b,z))this.J2(a,b,z)
-return a[b]},"call$1","gIA",2,0,null,47,[]],
+if(b>>>0!==b||b>=z)this.J2(a,b,z)
+return a[b]},"call$1","gIA",2,0,null,52,[]],
u:[function(a,b,c){var z=a.length
-if(b>>>0!=b||J.J5(b,z))this.J2(a,b,z)
-a[b]=c},"call$2","gj3",4,0,null,47,[],23,[]],
-D6:[function(a,b,c){return new Float32Array(a.subarray(b,this.PZ(a,b,c,a.length)))},function(a,b){return this.D6(a,b,null)},"Jk","call$2",null,"gli",2,2,null,77,120,[],121,[]],
+if(b>>>0!==b||b>=z)this.J2(a,b,z)
+a[b]=c},"call$2","gj3",4,0,null,52,[],28,[]],
+D6:[function(a,b,c){return new Float32Array(a.subarray(b,this.PZ(a,b,c,a.length)))},function(a,b){return this.D6(a,b,null)},"Jk","call$2",null,"gli",2,2,null,82,123,[],124,[]],
$isList:true,
-$asWO:function(){return[J.GW]},
+$aszM:function(){return[J.GW]},
$isyN:true,
-$iscX:true,
-$ascX:function(){return[J.GW]},
+$isQV:true,
+$asQV:function(){return[J.GW]},
$isHY:true,
"%":"Float32Array"},
L3:{
"^":"Dg;",
gbx:function(a){return C.lk},
t:[function(a,b){var z=a.length
-if(b>>>0!=b||J.J5(b,z))this.J2(a,b,z)
-return a[b]},"call$1","gIA",2,0,null,47,[]],
+if(b>>>0!==b||b>=z)this.J2(a,b,z)
+return a[b]},"call$1","gIA",2,0,null,52,[]],
u:[function(a,b,c){var z=a.length
-if(b>>>0!=b||J.J5(b,z))this.J2(a,b,z)
-a[b]=c},"call$2","gj3",4,0,null,47,[],23,[]],
-D6:[function(a,b,c){return new Float64Array(a.subarray(b,this.PZ(a,b,c,a.length)))},function(a,b){return this.D6(a,b,null)},"Jk","call$2",null,"gli",2,2,null,77,120,[],121,[]],
+if(b>>>0!==b||b>=z)this.J2(a,b,z)
+a[b]=c},"call$2","gj3",4,0,null,52,[],28,[]],
+D6:[function(a,b,c){return new Float64Array(a.subarray(b,this.PZ(a,b,c,a.length)))},function(a,b){return this.D6(a,b,null)},"Jk","call$2",null,"gli",2,2,null,82,123,[],124,[]],
$isList:true,
-$asWO:function(){return[J.GW]},
+$aszM:function(){return[J.GW]},
$isyN:true,
-$iscX:true,
-$ascX:function(){return[J.GW]},
+$isQV:true,
+$asQV:function(){return[J.GW]},
$isHY:true,
"%":"Float64Array"},
zz:{
"^":"Pg;",
gbx:function(a){return C.jV},
t:[function(a,b){var z=a.length
-if(b>>>0!=b||J.J5(b,z))this.J2(a,b,z)
-return a[b]},"call$1","gIA",2,0,null,47,[]],
+if(b>>>0!==b||b>=z)this.J2(a,b,z)
+return a[b]},"call$1","gIA",2,0,null,52,[]],
u:[function(a,b,c){var z=a.length
-if(b>>>0!=b||J.J5(b,z))this.J2(a,b,z)
-a[b]=c},"call$2","gj3",4,0,null,47,[],23,[]],
-D6:[function(a,b,c){return new Int16Array(a.subarray(b,this.PZ(a,b,c,a.length)))},function(a,b){return this.D6(a,b,null)},"Jk","call$2",null,"gli",2,2,null,77,120,[],121,[]],
+if(b>>>0!==b||b>=z)this.J2(a,b,z)
+a[b]=c},"call$2","gj3",4,0,null,52,[],28,[]],
+D6:[function(a,b,c){return new Int16Array(a.subarray(b,this.PZ(a,b,c,a.length)))},function(a,b){return this.D6(a,b,null)},"Jk","call$2",null,"gli",2,2,null,82,123,[],124,[]],
$isList:true,
-$asWO:function(){return[J.im]},
+$aszM:function(){return[J.im]},
$isyN:true,
-$iscX:true,
-$ascX:function(){return[J.im]},
+$isQV:true,
+$asQV:function(){return[J.im]},
$isHY:true,
"%":"Int16Array"},
dE:{
"^":"Pg;",
gbx:function(a){return C.Im},
t:[function(a,b){var z=a.length
-if(b>>>0!=b||J.J5(b,z))this.J2(a,b,z)
-return a[b]},"call$1","gIA",2,0,null,47,[]],
+if(b>>>0!==b||b>=z)this.J2(a,b,z)
+return a[b]},"call$1","gIA",2,0,null,52,[]],
u:[function(a,b,c){var z=a.length
-if(b>>>0!=b||J.J5(b,z))this.J2(a,b,z)
-a[b]=c},"call$2","gj3",4,0,null,47,[],23,[]],
-D6:[function(a,b,c){return new Int32Array(a.subarray(b,this.PZ(a,b,c,a.length)))},function(a,b){return this.D6(a,b,null)},"Jk","call$2",null,"gli",2,2,null,77,120,[],121,[]],
+if(b>>>0!==b||b>=z)this.J2(a,b,z)
+a[b]=c},"call$2","gj3",4,0,null,52,[],28,[]],
+D6:[function(a,b,c){return new Int32Array(a.subarray(b,this.PZ(a,b,c,a.length)))},function(a,b){return this.D6(a,b,null)},"Jk","call$2",null,"gli",2,2,null,82,123,[],124,[]],
$isList:true,
-$asWO:function(){return[J.im]},
+$aszM:function(){return[J.im]},
$isyN:true,
-$iscX:true,
-$ascX:function(){return[J.im]},
+$isQV:true,
+$asQV:function(){return[J.im]},
$isHY:true,
"%":"Int32Array"},
-Eb:{
+IJ:{
"^":"Pg;",
gbx:function(a){return C.la},
t:[function(a,b){var z=a.length
-if(b>>>0!=b||J.J5(b,z))this.J2(a,b,z)
-return a[b]},"call$1","gIA",2,0,null,47,[]],
+if(b>>>0!==b||b>=z)this.J2(a,b,z)
+return a[b]},"call$1","gIA",2,0,null,52,[]],
u:[function(a,b,c){var z=a.length
-if(b>>>0!=b||J.J5(b,z))this.J2(a,b,z)
-a[b]=c},"call$2","gj3",4,0,null,47,[],23,[]],
-D6:[function(a,b,c){return new Int8Array(a.subarray(b,this.PZ(a,b,c,a.length)))},function(a,b){return this.D6(a,b,null)},"Jk","call$2",null,"gli",2,2,null,77,120,[],121,[]],
+if(b>>>0!==b||b>=z)this.J2(a,b,z)
+a[b]=c},"call$2","gj3",4,0,null,52,[],28,[]],
+D6:[function(a,b,c){return new Int8Array(a.subarray(b,this.PZ(a,b,c,a.length)))},function(a,b){return this.D6(a,b,null)},"Jk","call$2",null,"gli",2,2,null,82,123,[],124,[]],
$isList:true,
-$asWO:function(){return[J.im]},
+$aszM:function(){return[J.im]},
$isyN:true,
-$iscX:true,
-$ascX:function(){return[J.im]},
+$isQV:true,
+$asQV:function(){return[J.im]},
$isHY:true,
"%":"Int8Array"},
-dT:{
+aH:{
"^":"Pg;",
gbx:function(a){return C.iN},
t:[function(a,b){var z=a.length
-if(b>>>0!=b||J.J5(b,z))this.J2(a,b,z)
-return a[b]},"call$1","gIA",2,0,null,47,[]],
+if(b>>>0!==b||b>=z)this.J2(a,b,z)
+return a[b]},"call$1","gIA",2,0,null,52,[]],
u:[function(a,b,c){var z=a.length
-if(b>>>0!=b||J.J5(b,z))this.J2(a,b,z)
-a[b]=c},"call$2","gj3",4,0,null,47,[],23,[]],
-D6:[function(a,b,c){return new Uint16Array(a.subarray(b,this.PZ(a,b,c,a.length)))},function(a,b){return this.D6(a,b,null)},"Jk","call$2",null,"gli",2,2,null,77,120,[],121,[]],
+if(b>>>0!==b||b>=z)this.J2(a,b,z)
+a[b]=c},"call$2","gj3",4,0,null,52,[],28,[]],
+D6:[function(a,b,c){return new Uint16Array(a.subarray(b,this.PZ(a,b,c,a.length)))},function(a,b){return this.D6(a,b,null)},"Jk","call$2",null,"gli",2,2,null,82,123,[],124,[]],
$isList:true,
-$asWO:function(){return[J.im]},
+$aszM:function(){return[J.im]},
$isyN:true,
-$iscX:true,
-$ascX:function(){return[J.im]},
+$isQV:true,
+$asQV:function(){return[J.im]},
$isHY:true,
"%":"Uint16Array"},
N2:{
"^":"Pg;",
gbx:function(a){return C.Vh},
t:[function(a,b){var z=a.length
-if(b>>>0!=b||J.J5(b,z))this.J2(a,b,z)
-return a[b]},"call$1","gIA",2,0,null,47,[]],
+if(b>>>0!==b||b>=z)this.J2(a,b,z)
+return a[b]},"call$1","gIA",2,0,null,52,[]],
u:[function(a,b,c){var z=a.length
-if(b>>>0!=b||J.J5(b,z))this.J2(a,b,z)
-a[b]=c},"call$2","gj3",4,0,null,47,[],23,[]],
-D6:[function(a,b,c){return new Uint32Array(a.subarray(b,this.PZ(a,b,c,a.length)))},function(a,b){return this.D6(a,b,null)},"Jk","call$2",null,"gli",2,2,null,77,120,[],121,[]],
+if(b>>>0!==b||b>=z)this.J2(a,b,z)
+a[b]=c},"call$2","gj3",4,0,null,52,[],28,[]],
+D6:[function(a,b,c){return new Uint32Array(a.subarray(b,this.PZ(a,b,c,a.length)))},function(a,b){return this.D6(a,b,null)},"Jk","call$2",null,"gli",2,2,null,82,123,[],124,[]],
$isList:true,
-$asWO:function(){return[J.im]},
+$aszM:function(){return[J.im]},
$isyN:true,
-$iscX:true,
-$ascX:function(){return[J.im]},
+$isQV:true,
+$asQV:function(){return[J.im]},
$isHY:true,
"%":"Uint32Array"},
eE:{
@@ -18385,17 +17867,17 @@
gbx:function(a){return C.nG},
gB:function(a){return a.length},
t:[function(a,b){var z=a.length
-if(b>>>0!=b||J.J5(b,z))this.J2(a,b,z)
-return a[b]},"call$1","gIA",2,0,null,47,[]],
+if(b>>>0!==b||b>=z)this.J2(a,b,z)
+return a[b]},"call$1","gIA",2,0,null,52,[]],
u:[function(a,b,c){var z=a.length
-if(b>>>0!=b||J.J5(b,z))this.J2(a,b,z)
-a[b]=c},"call$2","gj3",4,0,null,47,[],23,[]],
-D6:[function(a,b,c){return new Uint8ClampedArray(a.subarray(b,this.PZ(a,b,c,a.length)))},function(a,b){return this.D6(a,b,null)},"Jk","call$2",null,"gli",2,2,null,77,120,[],121,[]],
+if(b>>>0!==b||b>=z)this.J2(a,b,z)
+a[b]=c},"call$2","gj3",4,0,null,52,[],28,[]],
+D6:[function(a,b,c){return new Uint8ClampedArray(a.subarray(b,this.PZ(a,b,c,a.length)))},function(a,b){return this.D6(a,b,null)},"Jk","call$2",null,"gli",2,2,null,82,123,[],124,[]],
$isList:true,
-$asWO:function(){return[J.im]},
+$aszM:function(){return[J.im]},
$isyN:true,
-$iscX:true,
-$ascX:function(){return[J.im]},
+$isQV:true,
+$asQV:function(){return[J.im]},
$isHY:true,
"%":"CanvasPixelArray|Uint8ClampedArray"},
V6:{
@@ -18403,17 +17885,17 @@
gbx:function(a){return C.eY},
gB:function(a){return a.length},
t:[function(a,b){var z=a.length
-if(b>>>0!=b||J.J5(b,z))this.J2(a,b,z)
-return a[b]},"call$1","gIA",2,0,null,47,[]],
+if(b>>>0!==b||b>=z)this.J2(a,b,z)
+return a[b]},"call$1","gIA",2,0,null,52,[]],
u:[function(a,b,c){var z=a.length
-if(b>>>0!=b||J.J5(b,z))this.J2(a,b,z)
-a[b]=c},"call$2","gj3",4,0,null,47,[],23,[]],
-D6:[function(a,b,c){return new Uint8Array(a.subarray(b,this.PZ(a,b,c,a.length)))},function(a,b){return this.D6(a,b,null)},"Jk","call$2",null,"gli",2,2,null,77,120,[],121,[]],
+if(b>>>0!==b||b>=z)this.J2(a,b,z)
+a[b]=c},"call$2","gj3",4,0,null,52,[],28,[]],
+D6:[function(a,b,c){return new Uint8Array(a.subarray(b,this.PZ(a,b,c,a.length)))},function(a,b){return this.D6(a,b,null)},"Jk","call$2",null,"gli",2,2,null,82,123,[],124,[]],
$isList:true,
-$asWO:function(){return[J.im]},
+$aszM:function(){return[J.im]},
$isyN:true,
-$iscX:true,
-$ascX:function(){return[J.im]},
+$isQV:true,
+$asQV:function(){return[J.im]},
$isHY:true,
"%":";Uint8Array"},
LZ:{
@@ -18421,8 +17903,8 @@
gB:function(a){return a.length},
oZ:[function(a,b,c,d,e){var z,y,x
z=a.length+1
-this.XL(a,b,z)
-this.XL(a,c,z)
+this.ZF(a,b,z)
+this.ZF(a,c,z)
if(typeof c!=="number")return H.s(c)
if(b>c)throw H.b(P.TE(b,0,c))
y=c-b
@@ -18430,81 +17912,59 @@
x=d.length
if(x-e<y)throw H.b(new P.lj("Not enough elements"))
if(e!==0||x!==y)d=d.subarray(e,e+y)
-a.set(d,b)},"call$4","gP7",8,0,null,120,[],121,[],27,[],122,[]],
+a.set(d,b)},"call$4","gP7",8,0,null,123,[],124,[],32,[],125,[]],
$isXj:true},
Dg:{
"^":"Ip;",
YW:[function(a,b,c,d,e){var z=J.x(d)
if(!!z.$isDg){this.oZ(a,b,c,d,e)
-return}P.lD.prototype.YW.call(this,a,b,c,d,e)},"call$4","gaQ",6,2,null,335,120,[],121,[],114,[],122,[]],
+return}P.lD.prototype.YW.call(this,a,b,c,d,e)},"call$4","gam",6,2,null,332,123,[],124,[],116,[],125,[]],
$isDg:true,
$isList:true,
-$asWO:function(){return[J.GW]},
+$aszM:function(){return[J.GW]},
$isyN:true,
-$iscX:true,
-$ascX:function(){return[J.GW]}},
-Ob:{
+$isQV:true,
+$asQV:function(){return[J.GW]}},
+Ui:{
"^":"LZ+lD;",
$isList:true,
-$asWO:function(){return[J.GW]},
+$aszM:function(){return[J.GW]},
$isyN:true,
-$iscX:true,
-$ascX:function(){return[J.GW]}},
+$isQV:true,
+$asQV:function(){return[J.GW]}},
Ip:{
-"^":"Ob+SU7;"},
+"^":"Ui+SU7;"},
Pg:{
"^":"nA;",
YW:[function(a,b,c,d,e){var z=J.x(d)
if(!!z.$isPg){this.oZ(a,b,c,d,e)
-return}P.lD.prototype.YW.call(this,a,b,c,d,e)},"call$4","gaQ",6,2,null,335,120,[],121,[],114,[],122,[]],
+return}P.lD.prototype.YW.call(this,a,b,c,d,e)},"call$4","gam",6,2,null,332,123,[],124,[],116,[],125,[]],
$isPg:true,
$isList:true,
-$asWO:function(){return[J.im]},
+$aszM:function(){return[J.im]},
$isyN:true,
-$iscX:true,
-$ascX:function(){return[J.im]}},
-Nb:{
+$isQV:true,
+$asQV:function(){return[J.im]}},
+ObS:{
"^":"LZ+lD;",
$isList:true,
-$asWO:function(){return[J.im]},
+$aszM:function(){return[J.im]},
$isyN:true,
-$iscX:true,
-$ascX:function(){return[J.im]}},
+$isQV:true,
+$asQV:function(){return[J.im]}},
nA:{
-"^":"Nb+SU7;"}}],["dart2js._js_primitives","dart:_js_primitives",,H,{
+"^":"ObS+SU7;"}}],["dart2js._js_primitives","dart:_js_primitives",,H,{
"^":"",
qw:[function(a){if(typeof dartPrint=="function"){dartPrint(a)
return}if(typeof console=="object"&&typeof console.log=="function"){console.log(a)
return}if(typeof window=="object")return
if(typeof print=="function"){print(a)
-return}throw "Unable to print message: " + String(a)},"call$1","Kg",2,0,null,26,[]]}],["disassembly_entry_element","package:observatory/src/elements/disassembly_entry.dart",,E,{
-"^":"",
-Fv:{
-"^":["pv;m0%-513,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0-412",null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
-gkX:[function(a){return a.m0},null,null,1,0,514,"instruction",355,397],
-skX:[function(a,b){a.m0=this.ct(a,C.i6,a.m0,b)},null,null,3,0,515,23,[],"instruction",355],
-"@":function(){return[C.Vy]},
-static:{AH:[function(a){var z,y,x,w
-z=$.Nd()
-y=P.Py(null,null,null,J.O,W.I0)
-x=J.O
-w=W.cv
-w=H.VM(new V.qC(P.Py(null,null,null,x,w),null,null),[x,w])
-a.SO=z
-a.B7=y
-a.X0=w
-C.er.ZL(a)
-C.er.G6(a)
-return a},null,null,0,0,113,"new DisassemblyEntryElement$created"]}},
-"+DisassemblyEntryElement":[516],
-pv:{
-"^":"uL+Pi;",
-$isd3:true}}],["error_view_element","package:observatory/src/elements/error_view.dart",,F,{
+return}throw "Unable to print message: " + String(a)},"call$1","Kg",2,0,null,31,[]]}],["error_view_element","package:observatory/src/elements/error_view.dart",,F,{
"^":"",
E9:{
-"^":["Vfx;Py%-410,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0-412",null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
-gkc:[function(a){return a.Py},null,null,1,0,354,"error",355,397],
-skc:[function(a,b){a.Py=this.ct(a,C.YU,a.Py,b)},null,null,3,0,357,23,[],"error",355],
+"^":["tuj;Py%-381,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0-375",null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.Nw]}],
+gkc:[function(a){return a.Py},null,null,1,0,361,"error",358,377],
+skc:[function(a,b){a.Py=this.ct(a,C.YU,a.Py,b)},null,null,3,0,362,28,[],"error",358],
"@":function(){return[C.uW]},
static:{TW:[function(a){var z,y,x,w
z=$.Nd()
@@ -18517,16 +17977,70 @@
a.X0=w
C.OD.ZL(a)
C.OD.G6(a)
-return a},null,null,0,0,113,"new ErrorViewElement$created"]}},
-"+ErrorViewElement":[517],
-Vfx:{
+return a},null,null,0,0,115,"new ErrorViewElement$created"]}},
+"+ErrorViewElement":[480],
+tuj:{
"^":"uL+Pi;",
-$isd3:true}}],["field_ref_element","package:observatory/src/elements/field_ref.dart",,D,{
+$isd3:true}}],["eval_box_element","package:observatory/src/elements/eval_box.dart",,L,{
+"^":"",
+rm:{
+"^":["Vct;fn%-389,Ab%-389,Ln%-481,y4%-482,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0-375",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.Nw]}],
+ga4:[function(a){return a.fn},null,null,1,0,365,"text",358,359],
+sa4:[function(a,b){a.fn=this.ct(a,C.mi,a.fn,b)},null,null,3,0,30,28,[],"text",358],
+gzW:[function(a){return a.Ab},null,null,1,0,365,"lineMode",358,359],
+szW:[function(a,b){a.Ab=this.ct(a,C.eh,a.Ab,b)},null,null,3,0,30,28,[],"lineMode",358],
+gFR:[function(a){return a.Ln},null,null,1,0,483,"callback",358,377],
+Ki:function(a){return this.gFR(a).call$0()},
+VN:function(a,b){return this.gFR(a).call$1(b)},
+sFR:[function(a,b){a.Ln=this.ct(a,C.AV,a.Ln,b)},null,null,3,0,484,28,[],"callback",358],
+gPK:[function(a){return a.y4},null,null,1,0,485,"results",358,359],
+sPK:[function(a,b){a.y4=this.ct(a,C.Aa,a.y4,b)},null,null,3,0,486,28,[],"results",358],
+az:[function(a,b,c,d){var z=H.Go(J.l2(b),"$isMi").value
+z=this.ct(a,C.eh,a.Ab,z)
+a.Ab=z
+if(J.de(z,"1-line")){z=J.JA(a.fn,"\n"," ")
+a.fn=this.ct(a,C.mi,a.fn,z)}},"call$3","gxb",6,0,393,19,[],304,[],79,[],"updateLineMode"],
+lp:[function(a,b,c,d){var z,y,x
+J.xW(b)
+z=a.fn
+a.fn=this.ct(a,C.mi,z,"")
+if(a.Ln!=null){y=H.B7([],P.L5(null,null,null,null,null))
+x=R.Jk(y)
+J.kW(x,"expr",z)
+J.BM(a.y4,0,x)
+this.VN(a,z).ml(new L.YW(x))}},"call$3","gZm",6,0,393,19,[],304,[],79,[],"eval"],
+A3:[function(a,b){var z=J.iz(J.l2(b),"expr")
+a.fn=this.ct(a,C.mi,a.fn,z)},"call$1","gHo",2,0,487,19,[],"selectExpr"],
+"@":function(){return[C.Qz]},
+static:{Rp:[function(a){var z,y,x,w,v
+z=R.Jk([])
+y=$.Nd()
+x=P.Py(null,null,null,J.O,W.I0)
+w=J.O
+v=W.cv
+v=H.VM(new V.qC(P.Py(null,null,null,w,v),null,null),[w,v])
+a.Ab="1-line"
+a.y4=z
+a.SO=y
+a.B7=x
+a.X0=v
+C.Gh.ZL(a)
+C.Gh.G6(a)
+return a},null,null,0,0,115,"new EvalBoxElement$created"]}},
+"+EvalBoxElement":[488],
+Vct:{
+"^":"uL+Pi;",
+$isd3:true},
+YW:{
+"^":"Tp:112;a-82",
+call$1:[function(a){J.kW(this.a,"value",a)},"call$1",null,2,0,112,56,[],"call"],
+$isEH:true},
+"+ YW":[489]}],["field_ref_element","package:observatory/src/elements/field_ref.dart",,D,{
"^":"",
m8:{
-"^":["xI;tY-410,Pe-417,AP,fn,pC-411,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0-412",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
+"^":["xI;tY-381,Pe-382,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0-375",null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.Nw]}],
"@":function(){return[C.E6]},
-static:{Tt:[function(a){var z,y,x,w
+static:{zY:[function(a){var z,y,x,w
z=$.Nd()
y=P.Py(null,null,null,J.O,W.I0)
x=J.O
@@ -18538,16 +18052,16 @@
a.X0=w
C.MC.ZL(a)
C.MC.G6(a)
-return a},null,null,0,0,113,"new FieldRefElement$created"]}},
-"+FieldRefElement":[418]}],["field_view_element","package:observatory/src/elements/field_view.dart",,A,{
+return a},null,null,0,0,115,"new FieldRefElement$created"]}},
+"+FieldRefElement":[383]}],["field_view_element","package:observatory/src/elements/field_view.dart",,A,{
"^":"",
Gk:{
-"^":["Urj;vt%-410,AP,fn,pC-411,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0-412",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
-gt0:[function(a){return a.vt},null,null,1,0,354,"field",355,397],
-st0:[function(a,b){a.vt=this.ct(a,C.WQ,a.vt,b)},null,null,3,0,357,23,[],"field",355],
-RF:[function(a,b){a.pC.oX(J.UQ(a.vt,"id")).ml(new A.e5(a)).OA(new A.Ni()).YM(b)},"call$1","gvC",2,0,158,413,[],"refresh"],
-"@":function(){return[C.vc]},
-static:{cY:[function(a){var z,y,x,w
+"^":["D13;vt%-374,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0-375",null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.Nw]}],
+gt0:[function(a){return a.vt},null,null,1,0,376,"field",358,377],
+st0:[function(a,b){a.vt=this.ct(a,C.WQ,a.vt,b)},null,null,3,0,378,28,[],"field",358],
+yv:[function(a,b){J.am(a.vt).YM(b)},"call$1","gvC",2,0,157,379,[],"refresh"],
+"@":function(){return[C.My]},
+static:{bH:[function(a){var z,y,x,w
z=$.Nd()
y=P.Py(null,null,null,J.O,W.I0)
x=J.O
@@ -18558,29 +18072,16 @@
a.X0=w
C.LT.ZL(a)
C.LT.G6(a)
-return a},null,null,0,0,113,"new FieldViewElement$created"]}},
-"+FieldViewElement":[518],
-Urj:{
-"^":"PO+Pi;",
-$isd3:true},
-e5:{
-"^":"Tp:107;a-77",
-call$1:[function(a){var z,y
-z=this.a
-y=J.RE(z)
-y.svt(z,y.ct(z,C.WQ,y.gvt(z),a))},"call$1",null,2,0,107,149,[],"call"],
-$isEH:true},
-"+FieldViewElement_refresh_closure":[415],
-Ni:{
-"^":"Tp:346;",
-call$2:[function(a,b){N.Jx("").hh("Error while refreshing field-view: "+H.d(a)+"\n"+H.d(b))},"call$2",null,4,0,346,18,[],416,[],"call"],
-$isEH:true},
-"+FieldViewElement_refresh_closure":[415]}],["function_ref_element","package:observatory/src/elements/function_ref.dart",,U,{
+return a},null,null,0,0,115,"new FieldViewElement$created"]}},
+"+FieldViewElement":[490],
+D13:{
+"^":"uL+Pi;",
+$isd3:true}}],["function_ref_element","package:observatory/src/elements/function_ref.dart",,U,{
"^":"",
-AX:{
-"^":["xI;tY-410,Pe-417,AP,fn,pC-411,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0-412",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
-"@":function(){return[C.YQ]},
-static:{wH:[function(a){var z,y,x,w
+qW:{
+"^":["xI;tY-381,Pe-382,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0-375",null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.Nw]}],
+"@":function(){return[C.R0]},
+static:{ZV:[function(a){var z,y,x,w
z=$.Nd()
y=P.Py(null,null,null,J.O,W.I0)
x=J.O
@@ -18592,14 +18093,14 @@
a.X0=w
C.Xo.ZL(a)
C.Xo.G6(a)
-return a},null,null,0,0,113,"new FunctionRefElement$created"]}},
-"+FunctionRefElement":[418]}],["function_view_element","package:observatory/src/elements/function_view.dart",,N,{
+return a},null,null,0,0,115,"new FunctionRefElement$created"]}},
+"+FunctionRefElement":[383]}],["function_view_element","package:observatory/src/elements/function_view.dart",,N,{
"^":"",
-yb:{
-"^":["oub;Z8%-410,AP,fn,pC-411,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0-412",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
-gMj:[function(a){return a.Z8},null,null,1,0,354,"function",355,397],
-sMj:[function(a,b){a.Z8=this.ct(a,C.nf,a.Z8,b)},null,null,3,0,357,23,[],"function",355],
-RF:[function(a,b){a.pC.oX(J.UQ(a.Z8,"id")).ml(new N.QR(a)).OA(new N.Yx()).YM(b)},"call$1","gvC",2,0,158,413,[],"refresh"],
+mk:{
+"^":["WZq;Z8%-374,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0-375",null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.Nw]}],
+gMj:[function(a){return a.Z8},null,null,1,0,376,"function",358,377],
+sMj:[function(a,b){a.Z8=this.ct(a,C.nf,a.Z8,b)},null,null,3,0,378,28,[],"function",358],
+yv:[function(a,b){J.am(a.Z8).YM(b)},"call$1","gvC",2,0,157,379,[],"refresh"],
"@":function(){return[C.nu]},
static:{N0:[function(a){var z,y,x,w
z=$.Nd()
@@ -18610,31 +18111,18 @@
a.SO=z
a.B7=y
a.X0=w
-C.h4.ZL(a)
-C.h4.G6(a)
-return a},null,null,0,0,113,"new FunctionViewElement$created"]}},
-"+FunctionViewElement":[519],
-oub:{
-"^":"PO+Pi;",
-$isd3:true},
-QR:{
-"^":"Tp:107;a-77",
-call$1:[function(a){var z,y
-z=this.a
-y=J.RE(z)
-y.sZ8(z,y.ct(z,C.nf,y.gZ8(z),a))},"call$1",null,2,0,107,149,[],"call"],
-$isEH:true},
-"+FunctionViewElement_refresh_closure":[415],
-Yx:{
-"^":"Tp:346;",
-call$2:[function(a,b){N.Jx("").hh("Error while refreshing field-view: "+H.d(a)+"\n"+H.d(b))},"call$2",null,4,0,346,18,[],416,[],"call"],
-$isEH:true},
-"+FunctionViewElement_refresh_closure":[415]}],["heap_profile_element","package:observatory/src/elements/heap_profile.dart",,K,{
+C.Yu.ZL(a)
+C.Yu.G6(a)
+return a},null,null,0,0,115,"new FunctionViewElement$created"]}},
+"+FunctionViewElement":[491],
+WZq:{
+"^":"uL+Pi;",
+$isd3:true}}],["heap_profile_element","package:observatory/src/elements/heap_profile.dart",,K,{
"^":"",
-NM:{
-"^":["c4r;GQ%-77,J0%-77,Oc%-77,CO%-77,bV%-77,kg%-77,LY%-77,q3%-77,Ol%-410,X3%-417,AP,fn,pC-411,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0-412",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
-gB1:[function(a){return a.Ol},null,null,1,0,354,"profile",355,397],
-sB1:[function(a,b){a.Ol=this.ct(a,C.vb,a.Ol,b)},null,null,3,0,357,23,[],"profile",355],
+jY:{
+"^":["pva;GQ%-82,J0%-82,Oc%-82,CO%-82,bV%-82,kg%-82,LY%-82,q3%-82,Ol%-374,X3%-382,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0-375",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.Nw]}],
+gB1:[function(a){return a.Ol},null,null,1,0,376,"profile",358,377],
+sB1:[function(a,b){a.Ol=this.ct(a,C.vb,a.Ol,b)},null,null,3,0,378,28,[],"profile",358],
i4:[function(a){var z,y
Z.uL.prototype.i4.call(this,a)
z=(a.shadowRoot||a.webkitShadowRoot).querySelector("#table")
@@ -18661,7 +18149,7 @@
z.bG.u(0,"allowHtml",!0)
J.kW(J.wc(a.kg),"sortColumn",1)
J.kW(J.wc(a.kg),"sortAscending",!1)
-this.uB(a)},"call$0","gQd",0,0,112,"enteredView"],
+this.uB(a)},"call$0","gQd",0,0,114,"enteredView"],
hZ:[function(a){var z,y,x,w,v,u
z=a.Ol
if(z!=null){z=J.UQ(z,"members")
@@ -18674,33 +18162,35 @@
if(this.K1(a,x))continue
y=J.U6(x)
w=J.UQ(y.t(x,"class"),"name")
-v=a.pC.Mq(J.UQ(y.t(x,"class"),"id"))
+v=y.t(x,"class").gHP()
J.N5(a.LY,["<a title=\""+H.d(w)+"\" href=\""+v+"\">"+H.d(this.iF(a,x,0))+"</a>",this.iF(a,x,1),this.iF(a,x,2),this.iF(a,x,3),this.iF(a,x,4),this.iF(a,x,5),this.iF(a,x,6),this.iF(a,x,7),this.iF(a,x,8)])
-J.N5(a.bV,["<a title=\""+H.d(w)+"\" href=\""+v+"\">"+H.d(this.Wj(a,x,0))+"</a>",this.Wj(a,x,1),this.Wj(a,x,2),this.Wj(a,x,3),this.Wj(a,x,4),this.Wj(a,x,5),this.Wj(a,x,6)])}a.GQ.lb()
+J.N5(a.bV,["<a title=\""+H.d(w)+"\" href=\""+v+"\">"+H.d(this.VI(a,x,0))+"</a>",this.VI(a,x,1),this.VI(a,x,2),this.VI(a,x,3),this.VI(a,x,4),this.VI(a,x,5),this.VI(a,x,6)])}a.GQ.lb()
u=J.UQ(J.UQ(a.Ol,"heaps"),"new")
z=J.U6(u)
J.N5(a.GQ,["Used",z.t(u,"used")])
J.N5(a.GQ,["Free",J.xH(z.t(u,"capacity"),z.t(u,"used"))])
+J.N5(a.GQ,["External",z.t(u,"external")])
a.Oc.lb()
u=J.UQ(J.UQ(a.Ol,"heaps"),"old")
z=J.U6(u)
J.N5(a.Oc,["Used",z.t(u,"used")])
J.N5(a.Oc,["Free",J.xH(z.t(u,"capacity"),z.t(u,"used"))])
-this.uB(a)},"call$0","gYs",0,0,112,"_updateChartData"],
+J.N5(a.Oc,["External",z.t(u,"external")])
+this.uB(a)},"call$0","gYs",0,0,114,"_updateChartData"],
uB:[function(a){if(a.q3==null||a.kg==null)return
a.kg.u5()
a.kg.W2(a.bV)
a.q3.u5()
a.q3.W2(a.LY)
a.J0.W2(a.GQ)
-a.CO.W2(a.Oc)},"call$0","goI",0,0,112,"_draw"],
+a.CO.W2(a.Oc)},"call$0","goI",0,0,114,"_draw"],
K1:[function(a,b){var z,y,x
z=J.U6(b)
y=z.t(b,"new")
x=z.t(b,"old")
for(z=J.GP(y);z.G();)if(!J.de(z.gl(),0))return!1
for(z=J.GP(x);z.G();)if(!J.de(z.gl(),0))return!1
-return!0},"call$1","gbU",2,0,520,277,[],"_classHasNoAllocations"],
+return!0},"call$1","gbU",2,0,492,272,[],"_classHasNoAllocations"],
iF:[function(a,b,c){var z
switch(c){case 0:return J.UQ(J.UQ(b,"class"),"user_name")
case 1:z=J.U6(b)
@@ -18713,8 +18203,8 @@
case 6:return J.UQ(J.UQ(b,"old"),5)
case 7:return J.UQ(J.UQ(b,"old"),1)
case 8:return J.UQ(J.UQ(b,"old"),3)
-default:}throw H.b(P.hS())},"call$2","gym",4,0,521,277,[],47,[],"_fullTableColumnValue"],
-Wj:[function(a,b,c){var z
+default:}throw H.b(P.hS())},"call$2","gym",4,0,493,272,[],52,[],"_fullTableColumnValue"],
+VI:[function(a,b,c){var z
switch(c){case 0:return J.UQ(J.UQ(b,"class"),"user_name")
case 1:z=J.U6(b)
return J.WB(J.UQ(z.t(b,"new"),7),J.UQ(z.t(b,"old"),7))
@@ -18728,30 +18218,34 @@
return J.WB(J.UQ(z.t(b,"new"),1),J.UQ(z.t(b,"old"),1))
case 6:z=J.U6(b)
return J.WB(J.UQ(z.t(b,"new"),3),J.UQ(z.t(b,"old"),3))
-default:}throw H.b(P.hS())},"call$2","gPI",4,0,521,277,[],47,[],"_combinedTableColumnValue"],
-RF:[function(a,b){a.pC.oX("/allocationprofile").ml(new K.nx(a)).OA(new K.jm()).YM(b)},"call$1","gvC",2,0,158,413,[],"refresh"],
-ii:[function(a,b,c,d){a.pC.oX("/allocationprofile/reset").ml(new K.xj(a)).OA(new K.VB())},"call$3","gNb",6,0,425,18,[],306,[],74,[],"resetAccumulator"],
+default:}throw H.b(P.hS())},"call$2","gcY",4,0,493,272,[],52,[],"_combinedTableColumnValue"],
+yv:[function(a,b){var z=a.Ol
+if(z==null)return
+J.QP(z).ox("/allocationprofile").ml(new K.nx(a)).OA(new K.jm()).YM(b)},"call$1","gvC",2,0,157,379,[],"refresh"],
+ii:[function(a,b,c,d){var z=a.Ol
+if(z==null)return
+J.QP(z).ox("/allocationprofile/reset").ml(new K.ke(a)).OA(new K.xj())},"call$3","gNb",6,0,393,19,[],304,[],79,[],"resetAccumulator"],
pM:[function(a,b){this.hZ(a)
this.ct(a,C.Aq,[],this.gOd(a))
this.ct(a,C.ST,[],this.goN(a))
-this.ct(a,C.WG,[],this.gBo(a))},"call$1","gaz",2,0,158,233,[],"profileChanged"],
+this.ct(a,C.WG,[],this.gJN(a))},"call$1","gwm",2,0,157,229,[],"profileChanged"],
ps:[function(a,b){var z,y,x
z=a.Ol
if(z==null)return""
y=b===!0?"new":"old"
x=J.UQ(J.UQ(z,"heaps"),y)
z=J.U6(x)
-return C.CD.yM(J.FW(J.p0(z.t(x,"time"),1000),z.t(x,"collections")),2)+" ms"},"call$1","gOd",2,0,522,523,[],"formattedAverage",356],
-uW:[function(a,b){var z,y
+return C.CD.yM(J.FW(J.vX(z.t(x,"time"),1000),z.t(x,"collections")),2)+" ms"},"call$1","gOd",2,0,494,495,[],"formattedAverage",359],
+NC:[function(a,b){var z,y
z=a.Ol
if(z==null)return""
y=b===!0?"new":"old"
-return H.d(J.UQ(J.UQ(J.UQ(z,"heaps"),y),"collections"))},"call$1","gBo",2,0,522,523,[],"formattedCollections",356],
+return H.d(J.UQ(J.UQ(J.UQ(z,"heaps"),y),"collections"))},"call$1","gJN",2,0,494,495,[],"formattedCollections",359],
Q0:[function(a,b){var z,y
z=a.Ol
if(z==null)return""
y=b===!0?"new":"old"
-return J.Ez(J.UQ(J.UQ(J.UQ(z,"heaps"),y),"time"),2)+" secs"},"call$1","goN",2,0,522,523,[],"formattedTotalCollectionTime",356],
+return J.Ez(J.UQ(J.UQ(J.UQ(z,"heaps"),y),"time"),2)+" secs"},"call$1","goN",2,0,494,495,[],"formattedTotalCollectionTime",359],
Dd:[function(a){var z=new G.Kf(P.uw(J.UQ($.NR,"DataTable"),null))
a.LY=z
z.Gl("string","Class")
@@ -18779,9 +18273,9 @@
a.bV.Gl("number","Current")
a.bV.Gl("number","Allocated Since GC")
a.bV.Gl("number","Total before GC")
-a.bV.Gl("number","Survivors after GC")},null,null,0,0,113,"created"],
+a.bV.Gl("number","Survivors after GC")},null,null,0,0,115,"created"],
"@":function(){return[C.dA]},
-static:{"^":"b7<-77,bQj<-77,WY<-77,V1g<-77,r1K<-77,d6<-77,pC<-77,DP<-77",op:[function(a){var z,y,x,w
+static:{"^":"BO<-82,bQj<-82,WY<-82,V1g<-82,r1<-82,d6<-82,pC<-82,DP<-82",US:[function(a){var z,y,x,w
z=$.Nd()
y=P.Py(null,null,null,J.O,W.I0)
x=J.O
@@ -18791,48 +18285,48 @@
a.SO=z
a.B7=y
a.X0=w
-C.RJ.ZL(a)
-C.RJ.G6(a)
-C.RJ.Dd(a)
-return a},null,null,0,0,113,"new HeapProfileElement$created"]}},
-"+HeapProfileElement":[524],
-c4r:{
-"^":"PO+Pi;",
+C.Vc.ZL(a)
+C.Vc.G6(a)
+C.Vc.Dd(a)
+return a},null,null,0,0,115,"new HeapProfileElement$created"]}},
+"+HeapProfileElement":[496],
+pva:{
+"^":"uL+Pi;",
$isd3:true},
nx:{
-"^":"Tp:357;a-77",
+"^":"Tp:378;a-82",
call$1:[function(a){var z,y
z=this.a
y=J.RE(z)
-y.sOl(z,y.ct(z,C.vb,y.gOl(z),a))},"call$1",null,2,0,357,379,[],"call"],
+y.sOl(z,y.ct(z,C.vb,y.gOl(z),a))},"call$1",null,2,0,378,497,[],"call"],
$isEH:true},
-"+HeapProfileElement_refresh_closure":[415],
+"+ nx":[489],
jm:{
-"^":"Tp:346;",
-call$2:[function(a,b){N.Jx("").To(H.d(a)+" "+H.d(b))},"call$2",null,4,0,346,18,[],377,[],"call"],
+"^":"Tp:348;",
+call$2:[function(a,b){N.Jx("").To(H.d(a)+" "+H.d(b))},"call$2",null,4,0,348,19,[],498,[],"call"],
$isEH:true},
-"+HeapProfileElement_refresh_closure":[415],
-xj:{
-"^":"Tp:357;a-77",
+"+ jm":[489],
+ke:{
+"^":"Tp:378;a-82",
call$1:[function(a){var z,y
z=this.a
y=J.RE(z)
-y.sOl(z,y.ct(z,C.vb,y.gOl(z),a))},"call$1",null,2,0,357,379,[],"call"],
+y.sOl(z,y.ct(z,C.vb,y.gOl(z),a))},"call$1",null,2,0,378,497,[],"call"],
$isEH:true},
-"+HeapProfileElement_resetAccumulator_closure":[415],
-VB:{
-"^":"Tp:346;",
-call$2:[function(a,b){N.Jx("").To(H.d(a)+" "+H.d(b))},"call$2",null,4,0,346,18,[],377,[],"call"],
+"+ ke":[489],
+xj:{
+"^":"Tp:348;",
+call$2:[function(a,b){N.Jx("").To(H.d(a)+" "+H.d(b))},"call$2",null,4,0,348,19,[],498,[],"call"],
$isEH:true},
-"+HeapProfileElement_resetAccumulator_closure":[415]}],["html_common","dart:html_common",,P,{
+"+ xj":[489]}],["html_common","dart:html_common",,P,{
"^":"",
bL:[function(a){var z,y
z=[]
y=new P.Tm(new P.aI([],z),new P.rG(z),new P.yh(z)).call$1(a)
new P.wO().call$0()
-return y},"call$1","Lq",2,0,null,23,[]],
+return y},"call$1","Lq",2,0,null,28,[]],
o7:[function(a,b){var z=[]
-return new P.xL(b,new P.CA([],z),new P.YL(z),new P.KC(z)).call$1(a)},"call$2$mustCopy","A1",2,3,null,152,6,[],241,[]],
+return new P.xL(b,new P.CA([],z),new P.YL(z),new P.KC(z)).call$1(a)},"call$2$mustCopy","A1",2,3,null,210,6,[],237,[]],
dg:function(){var z=$.L4
if(z==null){z=J.Vw(window.navigator.userAgent,"Opera",0)
$.L4=z}return z},
@@ -18840,33 +18334,33 @@
if(z==null){z=P.dg()!==!0&&J.Vw(window.navigator.userAgent,"WebKit",0)
$.PN=z}return z},
aI:{
-"^":"Tp:189;b,c",
+"^":"Tp:188;b,c",
call$1:[function(a){var z,y,x
z=this.b
y=z.length
for(x=0;x<y;++x)if(z[x]===a)return x
z.push(a)
this.c.push(null)
-return y},"call$1",null,2,0,null,23,[],"call"],
+return y},"call$1",null,2,0,null,28,[],"call"],
$isEH:true},
rG:{
-"^":"Tp:372;d",
+"^":"Tp:411;d",
call$1:[function(a){var z=this.d
if(a>=z.length)return H.e(z,a)
-return z[a]},"call$1",null,2,0,null,441,[],"call"],
+return z[a]},"call$1",null,2,0,null,409,[],"call"],
$isEH:true},
yh:{
-"^":"Tp:525;e",
+"^":"Tp:499;e",
call$2:[function(a,b){var z=this.e
if(a>=z.length)return H.e(z,a)
-z[a]=b},"call$2",null,4,0,null,441,[],21,[],"call"],
+z[a]=b},"call$2",null,4,0,null,409,[],26,[],"call"],
$isEH:true},
wO:{
-"^":"Tp:113;",
+"^":"Tp:115;",
call$0:[function(){},"call$0",null,0,0,null,"call"],
$isEH:true},
Tm:{
-"^":"Tp:107;f,UI,bK",
+"^":"Tp:112;f,UI,bK",
call$1:[function(a){var z,y,x,w,v,u
z={}
if(a==null)return a
@@ -18875,7 +18369,7 @@
if(typeof a==="string")return a
y=J.x(a)
if(typeof a==="object"&&a!==null&&!!y.$isiP)return new Date(a.y3)
-if(typeof a==="object"&&a!==null&&!!y.$iscT)throw H.b(P.SY("structured clone of RegExp"))
+if(typeof a==="object"&&a!==null&&!!y.$isSP)throw H.b(P.SY("structured clone of RegExp"))
if(typeof a==="object"&&a!==null&&!!y.$ishH)return a
if(typeof a==="object"&&a!==null&&!!y.$isAz)return a
if(typeof a==="object"&&a!==null&&!!y.$isSg)return a
@@ -18888,7 +18382,7 @@
w={}
z.a=w
this.bK.call$2(x,w)
-y.aN(a,new P.q1(z,this))
+y.aN(a,new P.ib(z,this))
return z.a}if(typeof a==="object"&&a!==null&&(a.constructor===Array||!!y.$isList)){v=y.gB(a)
x=this.f.call$1(a)
w=this.UI.call$1(x)
@@ -18899,36 +18393,36 @@
u=0
for(;u<v;++u){z=this.call$1(y.t(a,u))
if(u>=w.length)return H.e(w,u)
-w[u]=z}return w}throw H.b(P.SY("structured clone of other type"))},"call$1",null,2,0,null,18,[],"call"],
+w[u]=z}return w}throw H.b(P.SY("structured clone of other type"))},"call$1",null,2,0,null,19,[],"call"],
$isEH:true},
-q1:{
-"^":"Tp:346;a,Gq",
-call$2:[function(a,b){this.a.a[a]=this.Gq.call$1(b)},"call$2",null,4,0,null,42,[],23,[],"call"],
+ib:{
+"^":"Tp:348;a,Gq",
+call$2:[function(a,b){this.a.a[a]=this.Gq.call$1(b)},"call$2",null,4,0,null,47,[],28,[],"call"],
$isEH:true},
CA:{
-"^":"Tp:189;a,b",
+"^":"Tp:188;a,b",
call$1:[function(a){var z,y,x,w
z=this.a
y=z.length
for(x=0;x<y;++x){w=z[x]
if(w==null?a==null:w===a)return x}z.push(a)
this.b.push(null)
-return y},"call$1",null,2,0,null,23,[],"call"],
+return y},"call$1",null,2,0,null,28,[],"call"],
$isEH:true},
YL:{
-"^":"Tp:372;c",
+"^":"Tp:411;c",
call$1:[function(a){var z=this.c
if(a>=z.length)return H.e(z,a)
-return z[a]},"call$1",null,2,0,null,441,[],"call"],
+return z[a]},"call$1",null,2,0,null,409,[],"call"],
$isEH:true},
KC:{
-"^":"Tp:525;d",
+"^":"Tp:499;d",
call$2:[function(a,b){var z=this.d
if(a>=z.length)return H.e(z,a)
-z[a]=b},"call$2",null,4,0,null,441,[],21,[],"call"],
+z[a]=b},"call$2",null,4,0,null,409,[],26,[],"call"],
$isEH:true},
xL:{
-"^":"Tp:107;e,f,UI,bK",
+"^":"Tp:112;e,f,UI,bK",
call$1:[function(a){var z,y,x,w,v,u,t
if(a==null)return a
if(typeof a==="boolean")return a
@@ -18953,7 +18447,7 @@
u=J.w1(y)
t=0
for(;t<v;++t)u.u(y,t,this.call$1(x.t(a,t)))
-return y}return a},"call$1",null,2,0,null,18,[],"call"],
+return y}return a},"call$1",null,2,0,null,19,[],"call"],
$isEH:true},
As:{
"^":"a;",
@@ -18963,90 +18457,86 @@
if(!z.tg(0,a)===!0){z.h(0,a)
y=!0}else{z.Rz(0,a)
y=!1}this.p5(z)
-return y},function(a){return this.O4(a,null)},"Mf","call$2",null,"gMk",2,2,null,77,23,[],508,[]],
+return y},function(a){return this.O4(a,null)},"qU","call$2",null,"gMk",2,2,null,82,28,[],475,[]],
gA:function(a){var z=this.lF()
z=H.VM(new P.zQ(z,z.zN,null,null),[null])
z.zq=z.O2.H9
return z},
-aN:[function(a,b){this.lF().aN(0,b)},"call$1","gjw",2,0,null,115,[]],
-zV:[function(a,b){return this.lF().zV(0,b)},"call$1","gnr",0,2,null,333,334,[]],
+aN:[function(a,b){this.lF().aN(0,b)},"call$1","gjw",2,0,null,117,[]],
+zV:[function(a,b){return this.lF().zV(0,b)},"call$1","gNU",0,2,null,330,331,[]],
ez:[function(a,b){var z=this.lF()
-return H.K1(z,b,H.ip(z,"mW",0),null)},"call$1","gIr",2,0,null,115,[]],
+return H.K1(z,b,H.ip(z,"mW",0),null)},"call$1","gIr",2,0,null,117,[]],
ev:[function(a,b){var z=this.lF()
-return H.VM(new H.U5(z,b),[H.ip(z,"mW",0)])},"call$1","gIR",2,0,null,115,[]],
-Vr:[function(a,b){return this.lF().Vr(0,b)},"call$1","gG2",2,0,null,115,[]],
+return H.VM(new H.U5(z,b),[H.ip(z,"mW",0)])},"call$1","gIR",2,0,null,117,[]],
+Vr:[function(a,b){return this.lF().Vr(0,b)},"call$1","gG2",2,0,null,117,[]],
gl0:function(a){return this.lF().X5===0},
gor:function(a){return this.lF().X5!==0},
gB:function(a){return this.lF().X5},
-tg:[function(a,b){return this.lF().tg(0,b)},"call$1","gdj",2,0,null,23,[]],
-Zt:[function(a){return this.lF().tg(0,a)?a:null},"call$1","gQB",2,0,null,23,[]],
-h:[function(a,b){return this.OS(new P.GE(b))},"call$1","ght",2,0,null,23,[]],
+tg:[function(a,b){return this.lF().tg(0,b)},"call$1","gdj",2,0,null,28,[]],
+Zt:[function(a){return this.lF().tg(0,a)?a:null},"call$1","gQB",2,0,null,28,[]],
+h:[function(a,b){return this.OS(new P.GE(b))},"call$1","ght",2,0,null,28,[]],
Rz:[function(a,b){var z,y
if(typeof b!=="string")return!1
z=this.lF()
y=z.Rz(0,b)
this.p5(z)
-return y},"call$1","gRI",2,0,null,23,[]],
-FV:[function(a,b){this.OS(new P.rl(b))},"call$1","gDY",2,0,null,114,[]],
+return y},"call$1","guH",2,0,null,28,[]],
+FV:[function(a,b){this.OS(new P.rl(b))},"call$1","gDY",2,0,null,116,[]],
grZ:function(a){var z=this.lF().lX
if(z==null)H.vh(new P.lj("No elements"))
return z.gGc()},
-tt:[function(a,b){return this.lF().tt(0,b)},function(a){return this.tt(a,!0)},"br","call$1$growable",null,"gRV",0,3,null,336,337,[]],
-eR:[function(a,b){var z=this.lF()
-return H.ke(z,b,H.ip(z,"mW",0))},"call$1","gZo",2,0,null,292,[]],
-Zv:[function(a,b){return this.lF().Zv(0,b)},"call$1","goY",2,0,null,47,[]],
-V1:[function(a){this.OS(new P.uQ())},"call$0","gyP",0,0,null],
+tt:[function(a,b){return this.lF().tt(0,b)},function(a){return this.tt(a,!0)},"br","call$1$growable",null,"gRV",0,3,null,333,334,[]],
+Zv:[function(a,b){return this.lF().Zv(0,b)},"call$1","goY",2,0,null,52,[]],
+V1:[function(a){this.OS(new P.uQ())},"call$0","gRa",0,0,null],
OS:[function(a){var z,y
z=this.lF()
y=a.call$1(z)
this.p5(z)
-return y},"call$1","gFd",2,0,null,115,[]],
+return y},"call$1","gFd",2,0,null,117,[]],
$isyN:true,
-$iscX:true,
-$ascX:function(){return[J.O]}},
+$isQV:true,
+$asQV:function(){return[J.O]}},
GE:{
-"^":"Tp:107;a",
-call$1:[function(a){return a.h(0,this.a)},"call$1",null,2,0,null,86,[],"call"],
+"^":"Tp:112;a",
+call$1:[function(a){return a.h(0,this.a)},"call$1",null,2,0,null,91,[],"call"],
$isEH:true},
rl:{
-"^":"Tp:107;a",
-call$1:[function(a){return a.FV(0,this.a)},"call$1",null,2,0,null,86,[],"call"],
+"^":"Tp:112;a",
+call$1:[function(a){return a.FV(0,this.a)},"call$1",null,2,0,null,91,[],"call"],
$isEH:true},
uQ:{
-"^":"Tp:107;",
-call$1:[function(a){return a.V1(0)},"call$1",null,2,0,null,86,[],"call"],
+"^":"Tp:112;",
+call$1:[function(a){return a.V1(0)},"call$1",null,2,0,null,91,[],"call"],
$isEH:true},
D7:{
-"^":"ar;F1,h2",
+"^":"ar;qt,h2",
gzT:function(){var z=this.h2
return P.F(z.ev(z,new P.hT()),!0,W.cv)},
-aN:[function(a,b){H.bQ(this.gzT(),b)},"call$1","gjw",2,0,null,115,[]],
+aN:[function(a,b){H.bQ(this.gzT(),b)},"call$1","gjw",2,0,null,117,[]],
u:[function(a,b,c){var z=this.gzT()
if(b>>>0!==b||b>=z.length)return H.e(z,b)
-J.ZP(z[b],c)},"call$2","gj3",4,0,null,47,[],23,[]],
+J.ZP(z[b],c)},"call$2","gj3",4,0,null,52,[],28,[]],
sB:function(a,b){var z,y
z=this.gzT().length
y=J.Wx(b)
if(y.F(b,z))return
else if(y.C(b,0))throw H.b(new P.AT("Invalid list length"))
this.UZ(0,b,z)},
-h:[function(a,b){this.h2.NL.appendChild(b)},"call$1","ght",2,0,null,23,[]],
+h:[function(a,b){this.h2.NL.appendChild(b)},"call$1","ght",2,0,null,28,[]],
FV:[function(a,b){var z,y
-for(z=J.GP(b),y=this.h2.NL;z.G();)y.appendChild(z.gl())},"call$1","gDY",2,0,null,114,[]],
-tg:[function(a,b){var z=J.x(b)
-if(typeof b!=="object"||b===null||!z.$iscv)return!1
-return b.parentNode===this.F1},"call$1","gdj",2,0,null,102,[]],
-GT:[function(a,b){throw H.b(P.f("Cannot sort filtered list"))},"call$1","gH7",0,2,null,77,133,[]],
-YW:[function(a,b,c,d,e){throw H.b(P.f("Cannot setRange on filtered list"))},"call$4","gaQ",6,2,null,335,120,[],121,[],114,[],122,[]],
-UZ:[function(a,b,c){H.bQ(C.Nm.D6(this.gzT(),b,c),new P.GS())},"call$2","gYH",4,0,null,120,[],121,[]],
-V1:[function(a){this.h2.NL.textContent=""},"call$0","gyP",0,0,null],
-xe:[function(a,b,c){this.h2.xe(0,b,c)},"call$2","gQG",4,0,null,47,[],23,[]],
+for(z=H.VM(new H.a7(b,b.length,0,null),[H.Kp(b,0)]),y=this.h2.NL;z.G();)y.appendChild(z.lo)},"call$1","gDY",2,0,null,116,[]],
+tg:[function(a,b){return!1},"call$1","gdj",2,0,null,107,[]],
+GT:[function(a,b){throw H.b(P.f("Cannot sort filtered list"))},"call$1","gH7",0,2,null,82,122,[]],
+YW:[function(a,b,c,d,e){throw H.b(P.f("Cannot setRange on filtered list"))},"call$4","gam",6,2,null,332,123,[],124,[],116,[],125,[]],
+UZ:[function(a,b,c){H.bQ(C.Nm.D6(this.gzT(),b,c),new P.GS())},"call$2","gYH",4,0,null,123,[],124,[]],
+V1:[function(a){J.c9(this.h2.NL,"")},"call$0","gRa",0,0,null],
+xe:[function(a,b,c){this.h2.xe(0,b,c)},"call$2","gQG",4,0,null,52,[],28,[]],
KI:[function(a,b){var z,y
z=this.gzT()
if(b<0||b>=z.length)return H.e(z,b)
y=z[b]
J.QC(y)
-return y},"call$1","gNM",2,0,null,47,[]],
+return y},"call$1","gNM",2,0,null,52,[]],
Rz:[function(a,b){var z,y,x
z=J.x(b)
if(typeof b!=="object"||b===null||!z.$iscv)return!1
@@ -19054,43 +18544,40 @@
if(y>=z.length)return H.e(z,y)
x=z[y]
if(x==null?b==null:x===b){J.QC(x)
-return!0}}return!1},"call$1","gRI",2,0,null,129,[]],
+return!0}}return!1},"call$1","guH",2,0,null,132,[]],
gB:function(a){return this.gzT().length},
t:[function(a,b){var z=this.gzT()
if(b>>>0!==b||b>=z.length)return H.e(z,b)
-return z[b]},"call$1","gIA",2,0,null,47,[]],
+return z[b]},"call$1","gIA",2,0,null,52,[]],
gA:function(a){var z=this.gzT()
return H.VM(new H.a7(z,z.length,0,null),[H.Kp(z,0)])}},
hT:{
-"^":"Tp:107;",
+"^":"Tp:112;",
call$1:[function(a){var z=J.x(a)
-return typeof a==="object"&&a!==null&&!!z.$iscv},"call$1",null,2,0,null,292,[],"call"],
+return typeof a==="object"&&a!==null&&!!z.$iscv},"call$1",null,2,0,null,198,[],"call"],
$isEH:true},
GS:{
-"^":"Tp:107;",
-call$1:[function(a){return J.QC(a)},"call$1",null,2,0,null,288,[],"call"],
+"^":"Tp:112;",
+call$1:[function(a){return J.QC(a)},"call$1",null,2,0,null,287,[],"call"],
$isEH:true}}],["instance_ref_element","package:observatory/src/elements/instance_ref.dart",,B,{
"^":"",
pR:{
-"^":["xI;tY-410,Pe-417,AP,fn,pC-411,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0-412",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
-goc:[function(a){var z=a.tY
-if(z==null)return Q.xI.prototype.goc.call(this,a)
-return J.UQ(z,"preview")},null,null,1,0,370,"name"],
-gJp:[function(a){var z=a.tY
-if(z!=null)if(J.de(J.UQ(z,"type"),"@Null"))if(J.de(J.UQ(a.tY,"id"),"objects/optimized-out"))return"This object is no longer needed and has been removed by the optimizing compiler."
-else if(J.de(J.UQ(a.tY,"id"),"objects/collected"))return"This object has been reclaimed by the garbage collector."
-else if(J.de(J.UQ(a.tY,"id"),"objects/expired"))return"The handle to this object has expired. Consider refreshing the page."
-else if(J.de(J.UQ(a.tY,"id"),"objects/not-initialized"))return"This object will be initialized once it is accessed by the program."
-else if(J.de(J.UQ(a.tY,"id"),"objects/being-initialized"))return"This object is currently being initialized."
-return""},null,null,1,0,370,"hoverText"],
-Qx:[function(a){return this.gNe(a)},"call$0","gyX",0,0,113,"expander"],
+"^":["xI;tY-381,Pe-382,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0-375",null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.Nw]}],
+gD5:[function(a){var z=a.tY
+if(z!=null)if(J.de(z.gzS(),"Null"))if(J.de(J.F8(a.tY),"objects/optimized-out"))return"This object is no longer needed and has been removed by the optimizing compiler."
+else if(J.de(J.F8(a.tY),"objects/collected"))return"This object has been reclaimed by the garbage collector."
+else if(J.de(J.F8(a.tY),"objects/expired"))return"The handle to this object has expired. Consider refreshing the page."
+else if(J.de(J.F8(a.tY),"objects/not-initialized"))return"This object will be initialized once it is accessed by the program."
+else if(J.de(J.F8(a.tY),"objects/being-initialized"))return"This object is currently being initialized."
+return Q.xI.prototype.gD5.call(this,a)},null,null,1,0,365,"hoverText"],
+Qx:[function(a){return this.gNe(a)},"call$0","gyX",0,0,115,"expander"],
SF:[function(a,b,c){var z,y
-P.JS("Calling expandEvent")
-if(b===!0){z=a.pC
-y=a.tY
-z.oX(y==null?"":J.UQ(y,"id")).ml(new B.Js(a)).OA(new B.fM()).YM(c)}else{J.kW(a.tY,"fields",null)
-J.kW(a.tY,"elements",null)
-c.call$0()}},"call$2","gNe",4,0,526,527,[],413,[],"expandEvent"],
+z=a.tY
+if(b===!0)J.am(z).ml(new B.Js(a)).YM(c)
+else{y=J.w1(z)
+y.u(z,"fields",null)
+y.u(z,"elements",null)
+c.call$0()}},"call$2","gNe",4,0,500,501,[],379,[],"expandEvent"],
"@":function(){return[C.VW]},
static:{b4:[function(a){var z,y,x,w
z=$.Nd()
@@ -19104,34 +18591,26 @@
a.X0=w
C.cp.ZL(a)
C.cp.G6(a)
-return a},null,null,0,0,113,"new InstanceRefElement$created"]}},
-"+InstanceRefElement":[418],
+return a},null,null,0,0,115,"new InstanceRefElement$created"]}},
+"+InstanceRefElement":[383],
Js:{
-"^":"Tp:107;a-77",
-call$1:[function(a){var z,y,x
+"^":"Tp:112;a-82",
+call$1:[function(a){var z,y
z=J.U6(a)
-y=this.a
-if(J.de(z.t(a,"type"),"Null")){z.u(a,"type","@Null")
-x=J.RE(y)
-x.stY(y,x.ct(y,C.kY,x.gtY(y),a))}else{x=J.RE(y)
-J.kW(x.gtY(y),"fields",z.t(a,"fields"))
-J.kW(x.gtY(y),"elements",z.t(a,"elements"))
-J.kW(x.gtY(y),"length",z.t(a,"length"))}x=J.RE(y)
-J.kW(x.gtY(y),"fields",z.t(a,"fields"))
-J.kW(x.gtY(y),"elements",z.t(a,"elements"))
-J.kW(x.gtY(y),"length",z.t(a,"length"))},"call$1",null,2,0,107,149,[],"call"],
+if(z.t(a,"preview")!=null){z.soc(a,z.t(a,"preview"))
+a.szz(z.t(a,"preview"))}z=this.a
+y=J.RE(z)
+y.stY(z,y.ct(z,C.kY,y.gtY(z),a))
+y.ct(z,C.kY,0,1)},"call$1",null,2,0,112,56,[],"call"],
$isEH:true},
-"+InstanceRefElement_expandEvent_closure":[415],
-fM:{
-"^":"Tp:346;",
-call$2:[function(a,b){N.Jx("").hh("Error while expanding instance-ref: "+H.d(a)+"\n"+H.d(b))},"call$2",null,4,0,346,18,[],416,[],"call"],
-$isEH:true},
-"+InstanceRefElement_expandEvent_closure":[415]}],["instance_view_element","package:observatory/src/elements/instance_view.dart",,Z,{
+"+ Js":[489]}],["instance_view_element","package:observatory/src/elements/instance_view.dart",,Z,{
"^":"",
hx:{
-"^":["Squ;Xh%-410,AP,fn,pC-411,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0-412",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
-gQr:[function(a){return a.Xh},null,null,1,0,354,"instance",355,397],
-sQr:[function(a,b){a.Xh=this.ct(a,C.fn,a.Xh,b)},null,null,3,0,357,23,[],"instance",355],
+"^":["cda;Xh%-374,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0-375",null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.Nw]}],
+gQr:[function(a){return a.Xh},null,null,1,0,376,"instance",358,377],
+sQr:[function(a,b){a.Xh=this.ct(a,C.fn,a.Xh,b)},null,null,3,0,378,28,[],"instance",358],
+vV:[function(a,b){return J.QP(a.Xh).ox(J.WB(J.F8(a.Xh),"/eval?expr="+P.jW(C.yD,b,C.xM,!1)))},"call$1","gZm",2,0,502,212,[],"eval"],
+yv:[function(a,b){J.am(a.Xh).YM(b)},"call$1","gvC",2,0,157,379,[],"refresh"],
"@":function(){return[C.be]},
static:{HC:[function(a){var z,y,x,w
z=$.Nd()
@@ -19144,39 +18623,17 @@
a.X0=w
C.yK.ZL(a)
C.yK.G6(a)
-return a},null,null,0,0,113,"new InstanceViewElement$created"]}},
-"+InstanceViewElement":[528],
-Squ:{
-"^":"PO+Pi;",
-$isd3:true}}],["isolate_element","package:observatory/src/elements/isolate_element.dart",,S,{
-"^":"",
-PO:{
-"^":["Vf;pC%-411,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0-412",null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
-gAq:[function(a){return a.pC},null,null,1,0,358,"isolate",355,397],
-sAq:[function(a,b){a.pC=this.ct(a,C.Z8,a.pC,b)},null,null,3,0,359,23,[],"isolate",355],
-"@":function(){return[C.EA]},
-static:{O5:[function(a){var z,y,x,w
-z=$.Nd()
-y=P.Py(null,null,null,J.O,W.I0)
-x=J.O
-w=W.cv
-w=H.VM(new V.qC(P.Py(null,null,null,x,w),null,null),[x,w])
-a.SO=z
-a.B7=y
-a.X0=w
-C.wx.ZL(a)
-C.wx.G6(a)
-return a},null,null,0,0,113,"new IsolateElement$created"]}},
-"+IsolateElement":[529],
-Vf:{
+return a},null,null,0,0,115,"new InstanceViewElement$created"]}},
+"+InstanceViewElement":[503],
+cda:{
"^":"uL+Pi;",
$isd3:true}}],["isolate_list_element","package:observatory/src/elements/isolate_list.dart",,L,{
"^":"",
u7:{
-"^":["Zt;Jh-353,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0-412",null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
-RF:[function(a,b){var z=[]
-J.kH(a.Jh.gi2(),new L.fW(z))
-P.pH(z,!1).ml(new L.Ey(b))},"call$1","gvC",2,0,158,413,[],"refresh"],
+"^":["waa;tf%-504,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0-375",null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.Nw]}],
+gi2:[function(a){return a.tf},null,null,1,0,505,"isolates",358,377],
+si2:[function(a,b){a.tf=this.ct(a,C.za,a.tf,b)},null,null,3,0,506,28,[],"isolates",358],
+yv:[function(a,b){J.am(a.tf).YM(b)},"call$1","gvC",2,0,157,379,[],"refresh"],
"@":function(){return[C.jF]},
static:{Cu:[function(a){var z,y,x,w
z=$.Nd()
@@ -19189,150 +18646,134 @@
a.X0=w
C.b9.ZL(a)
C.b9.G6(a)
-return a},null,null,0,0,113,"new IsolateListElement$created"]}},
-"+IsolateListElement":[530],
-fW:{
-"^":"Tp:346;a-77",
-call$2:[function(a,b){J.bi(this.a,J.KM(b))},"call$2",null,4,0,346,110,[],14,[],"call"],
-$isEH:true},
-"+IsolateListElement_refresh_closure":[415],
-Ey:{
-"^":"Tp:107;b-77",
-call$1:[function(a){return this.b.call$0()},"call$1",null,2,0,107,108,[],"call"],
-$isEH:true},
-"+IsolateListElement_refresh_closure":[415]}],["isolate_profile_element","package:observatory/src/elements/isolate_profile.dart",,X,{
+return a},null,null,0,0,115,"new IsolateListElement$created"]}},
+"+IsolateListElement":[507],
+waa:{
+"^":"uL+Pi;",
+$isd3:true}}],["isolate_profile_element","package:observatory/src/elements/isolate_profile.dart",,X,{
"^":"",
qm:{
-"^":["Y2;Aq>,tT>-420,eT,yt-386,wd-403,oH-404,z3,AP,fn",null,function(){return[C.mI]},null,function(){return[C.mI]},function(){return[C.mI]},function(){return[C.mI]},null,null,null],
+"^":["Y2;B1>,tT>-385,eT,yt-369,wd-370,oH-371,z3,AP,Lk",null,function(){return[C.Nw]},null,function(){return[C.mI]},function(){return[C.mI]},function(){return[C.mI]},null,null,null],
C4:[function(a){if(J.z8(J.q8(this.wd),0))return
-H.bQ(this.tT.gVS(),new X.vO(this))},"call$0","gz7",0,0,null],
-o8:[function(){return},"call$0","gDT",0,0,null],
-Af:function(a,b,c){var z,y,x,w,v,u
-z=this.oH
-y=this.tT
-x=this.Aq
-w=J.RE(x)
-v=J.w1(z)
-v.h(z,X.eI(y.gDu(),w.gB1(x).ghV()))
-if(c==null)v.h(z,"")
-else{u=c.tT
-v.h(z,X.eI(u.dJ(y),u.QQ()))}v.h(z,X.eI(y.gfF(),w.gB1(x).ghV()))},
-static:{eI:[function(a,b){return C.CD.yM(100*J.FW(a,b),2)+"%"},"call$2","uV",4,0,null,128,[],242,[]],Tl:function(a,b,c){var z,y
+J.kH(this.tT.gVS(),new X.TI(this))},"call$0","gz7",0,0,null],
+o8:[function(){},"call$0","gDT",0,0,null],
+Af:function(a,b,c){var z,y,x,w,v
+z=J.UQ(this.B1,"samples")
+y=this.oH
+x=this.tT
+w=J.w1(y)
+w.h(y,X.eI(x.gDu(),z))
+if(c==null)w.h(y,"")
+else{v=c.tT
+w.h(y,X.eI(v.dJ(x),v.QQ()))}},
+static:{eI:[function(a,b){return C.CD.yM(100*J.FW(a,b),2)+"%"},"call$2","rC",4,0,null,131,[],238,[]],Tl:function(a,b,c){var z,y
z=H.VM([],[G.Y2])
y=c!=null?J.WB(c.yt,1):0
z=new X.qm(a,b,c,y,z,[],!1,null,null)
z.Af(a,b,c)
return z}}},
-vO:{
-"^":"Tp:532;a",
+TI:{
+"^":"Tp:509;a",
call$1:[function(a){var z=this.a
-J.bi(z.wd,X.Tl(z.Aq,J.on(a),z))},"call$1",null,2,0,null,531,[],"call"],
+J.bi(z.wd,X.Tl(z.B1,J.on(a),z))},"call$1",null,2,0,null,508,[],"call"],
$isEH:true},
E7:{
-"^":["KUl;SS%-386,fb=-533,qY%-533,qO=-77,Hm%-534,pD%-410,eH%-387,vk%-387,AP,fn,pC-411,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0-412",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
-gXc:[function(a){return a.SS},null,null,1,0,371,"methodCountSelected",355,356],
-sXc:[function(a,b){a.SS=this.ct(a,C.fQ,a.SS,b)},null,null,3,0,372,23,[],"methodCountSelected",355],
-gDt:[function(a){return a.qY},null,null,1,0,535,"topExclusiveCodes",355,356],
-sDt:[function(a,b){a.qY=this.ct(a,C.jI,a.qY,b)},null,null,3,0,536,23,[],"topExclusiveCodes",355],
-gB1:[function(a){return a.pD},null,null,1,0,354,"profile",355,397],
-sB1:[function(a,b){a.pD=this.ct(a,C.vb,a.pD,b)},null,null,3,0,357,23,[],"profile",355],
-gLW:[function(a){return a.eH},null,null,1,0,370,"sampleCount",355,356],
-sLW:[function(a,b){a.eH=this.ct(a,C.XU,a.eH,b)},null,null,3,0,25,23,[],"sampleCount",355],
-gUo:[function(a){return a.vk},null,null,1,0,370,"refreshTime",355,356],
-sUo:[function(a,b){a.vk=this.ct(a,C.Dj,a.vk,b)},null,null,3,0,25,23,[],"refreshTime",355],
-pM:[function(a,b){var z,y
-if(a.pD==null)return
-P.JS("profile changed")
-z=J.UQ(a.pD,"samples")
-this.IW(a,a.pC,z,a.pD)
-y=a.pC
-this.oC(a,y)
-this.f9(a,y)},"call$1","gaz",2,0,158,233,[],"profileChanged"],
+"^":["V4;pD%-374,Dt=-82,BA%-369,FT%-389,vk%-389,fb=-510,qO=-82,Hm%-511,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0-375",null,function(){return[C.Nw]},null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.Nw]}],
+gB1:[function(a){return a.pD},null,null,1,0,376,"profile",358,377],
+sB1:[function(a,b){a.pD=this.ct(a,C.vb,a.pD,b)},null,null,3,0,378,28,[],"profile",358],
+gXc:[function(a){return a.BA},null,null,1,0,512,"methodCountSelected",358,359],
+sXc:[function(a,b){a.BA=this.ct(a,C.fQ,a.BA,b)},null,null,3,0,411,28,[],"methodCountSelected",358],
+gJy:[function(a){return a.FT},null,null,1,0,365,"sampleCount",358,359],
+sJy:[function(a,b){a.FT=this.ct(a,C.XU,a.FT,b)},null,null,3,0,30,28,[],"sampleCount",358],
+gUo:[function(a){return a.vk},null,null,1,0,365,"refreshTime",358,359],
+sUo:[function(a,b){a.vk=this.ct(a,C.Dj,a.vk,b)},null,null,3,0,30,28,[],"refreshTime",358],
+pM:[function(a,b){var z,y,x
+z=a.pD
+if(z==null)return
+y=J.UQ(z,"samples")
+x=new P.iP(Date.now(),!1)
+x.EK()
+z=J.AG(y)
+a.FT=this.ct(a,C.XU,a.FT,z)
+z=x.bu(0)
+a.vk=this.ct(a,C.Dj,a.vk,z)
+J.QP(a.pD).N3(a.pD)
+this.Cx(a)},"call$1","gwm",2,0,157,229,[],"profileChanged"],
i4:[function(a){var z,y
z=[]
y=R.Jk([])
-C.Nm.FV(z,["Method","Exclusive","Caller","Inclusive"])
+C.Nm.FV(z,["Method","Exclusive","Caller"])
a.Hm=new G.XN(z,y,null,null)
-y=a.pC
-this.oC(a,y)
-this.f9(a,y)},"call$0","gQd",0,0,112,"enteredView"],
-wW:[function(a,b){var z=a.pC
-this.oC(a,z)
-this.f9(a,z)},"call$1","ghj",2,0,107,233,[],"methodCountSelectedChanged"],
-RF:[function(a,b){a.pC.oX("profile").ml(new X.SV(a)).OA(new X.Mf()).YM(b)},"call$1","gvC",2,0,158,413,[],"refresh"],
-IW:[function(a,b,c,d){var z=J.AG(c)
-a.eH=this.ct(a,C.XU,a.eH,z)
-z=P.Gi().bu(0)
-a.vk=this.ct(a,C.Dj,a.vk,z)
-J.CJ(b,G.hh(b,d))
-this.oC(a,b)
-this.f9(a,b)},"call$3","gja",6,0,537,14,[],538,[],379,[],"_loadProfileData"],
-yF:[function(a,b){this.oC(a,b)
-this.f9(a,b)},"call$1","gAL",2,0,539,14,[],"_refresh"],
-f9:[function(a,b){var z,y
+this.Cx(a)},"call$0","gQd",0,0,114,"enteredView"],
+wW:[function(a,b){this.Cx(a)},"call$1","ghj",2,0,112,229,[],"methodCountSelectedChanged"],
+yv:[function(a,b){J.QP(a.pD).ox("profile").ml(new X.SV(a)).YM(b)},"call$1","gvC",2,0,157,379,[],"refresh"],
+Cx:[function(a){var z,y,x
+if(a.pD==null)return
+z=J.UQ(a.fb,a.BA)
+y=a.Dt
+x=J.w1(y)
+x.V1(y)
+x.FV(y,J.QP(a.pD).gZ0().T0(z))
+this.zr(a)},"call$0","gBn",0,0,114,"_update"],
+Ti:[function(a){var z,y,x
+z=J.UQ(a.fb,a.BA)
+y=a.Dt
+x=J.w1(y)
+x.V1(y)
+x.FV(y,J.QP(a.pD).gZ0().T0(z))},"call$0","guE",0,0,114,"_refreshTopMethods"],
+zr:[function(a){var z,y,x
z=[]
-for(y=J.GP(a.qY);y.G();)z.push(X.Tl(b,y.gl(),null))
-a.Hm.rT(z)
-this.ct(a,C.ep,null,a.Hm)},"call$1","gCK",2,0,539,14,[],"_refreshTree"],
-oC:[function(a,b){var z,y
-J.U2(a.qY)
-if(b==null||J.Tv(b)==null)return
-z=J.UQ(a.fb,a.SS)
-y=J.Tv(b).T0(z)
-J.bj(a.qY,y)},"call$1","guE",2,0,539,14,[],"_refreshTopMethods"],
-ka:[function(a,b){return"padding-left: "+H.d(J.p0(b.gyt(),16))+"px;"},"call$1","gGX",2,0,540,363,[],"padding",356],
+for(y=J.GP(a.Dt);y.G();){x=y.gl()
+z.push(X.Tl(a.pD,x,null))}a.Hm.rT(z)
+this.ct(a,C.ep,null,a.Hm)},"call$0","gdX",0,0,114,"_rebuildTree"],
+ub:[function(a,b){return"padding-left: "+H.d(J.vX(b.gyt(),16))+"px;"},"call$1","gGX",2,0,513,364,[],"padding",359],
ZZ:[function(a,b){var z=J.bY(b.gyt(),5)
if(z>>>0!==z||z>=5)return H.e(C.PQ,z)
-return C.PQ[z]},"call$1","gth",2,0,540,363,[],"coloring",356],
+return C.PQ[z]},"call$1","gth",2,0,513,364,[],"coloring",359],
YF:[function(a,b,c,d){var z,y,x
z=J.u3(d)
y=J.x(z)
if(typeof z==="object"&&z!==null&&!!y.$istV){y=a.Hm
x=z.rowIndex
if(typeof x!=="number")return x.W()
-y.Mf(x-1)}},"call$3","gpR",6,0,541,18,[],306,[],74,[],"toggleExpanded",356],
+y.qU(x-1)}},"call$3","gpR",6,0,514,19,[],304,[],79,[],"toggleExpanded",359],
"@":function(){return[C.jR]},
static:{jD:[function(a){var z,y,x,w,v
-z=R.Jk([])
+z=Q.uX(null,D.kx)
y=$.Nd()
x=P.Py(null,null,null,J.O,W.I0)
w=J.O
v=W.cv
v=H.VM(new V.qC(P.Py(null,null,null,w,v),null,null),[w,v])
-a.SS=0
-a.fb=[10,20,50]
-a.qY=z
-a.qO="#tableTree"
-a.eH=""
+a.Dt=z
+a.BA=0
+a.FT=""
a.vk=""
+a.fb=[10,20,50]
+a.qO="#tableTree"
a.SO=y
a.B7=x
a.X0=v
C.XH.ZL(a)
C.XH.G6(a)
-return a},null,null,0,0,113,"new IsolateProfileElement$created"]}},
-"+IsolateProfileElement":[542],
-KUl:{
-"^":"PO+Pi;",
+return a},null,null,0,0,115,"new IsolateProfileElement$created"]}},
+"+IsolateProfileElement":[515],
+V4:{
+"^":"uL+Pi;",
$isd3:true},
SV:{
-"^":"Tp:357;a-77",
-call$1:[function(a){var z,y,x
-z=J.UQ(a,"samples")
-N.Jx("").To("Profile contains "+H.d(z)+" samples.")
-y=this.a
-x=J.RE(y)
-x.IW(y,x.gpC(y),z,a)},"call$1",null,2,0,357,543,[],"call"],
+"^":"Tp:378;a-82",
+call$1:[function(a){var z,y
+z=this.a
+y=J.RE(z)
+y.spD(z,y.ct(z,C.vb,y.gpD(z),a))},"call$1",null,2,0,378,190,[],"call"],
$isEH:true},
-"+IsolateProfileElement_refresh_closure":[415],
-Mf:{
-"^":"Tp:346;",
-call$2:[function(a,b){N.Jx("").wF("Error refreshing profile",a,b)},"call$2",null,4,0,346,18,[],377,[],"call"],
-$isEH:true},
-"+IsolateProfileElement_refresh_closure":[415]}],["isolate_summary_element","package:observatory/src/elements/isolate_summary.dart",,D,{
+"+ SV":[489]}],["isolate_summary_element","package:observatory/src/elements/isolate_summary.dart",,D,{
"^":"",
Kz:{
-"^":["PO;pC-411,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0-412",null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
+"^":["V9;Pw%-516,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0-375",null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.Nw]}],
+gF1:[function(a){return a.Pw},null,null,1,0,357,"isolate",358,377],
+sF1:[function(a,b){a.Pw=this.ct(a,C.Z8,a.Pw,b)},null,null,3,0,360,28,[],"isolate",358],
"@":function(){return[C.aM]},
static:{JR:[function(a){var z,y,x,w
z=$.Nd()
@@ -19345,37 +18786,40 @@
a.X0=w
C.Qt.ZL(a)
C.Qt.G6(a)
-return a},null,null,0,0,113,"new IsolateSummaryElement$created"]}},
-"+IsolateSummaryElement":[544]}],["json_view_element","package:observatory/src/elements/json_view.dart",,Z,{
+return a},null,null,0,0,115,"new IsolateSummaryElement$created"]}},
+"+IsolateSummaryElement":[517],
+V9:{
+"^":"uL+Pi;",
+$isd3:true}}],["json_view_element","package:observatory/src/elements/json_view.dart",,Z,{
"^":"",
vj:{
-"^":["tuj;eb%-77,kf%-77,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0-412",null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
-gvL:[function(a){return a.eb},null,null,1,0,113,"json",355,397],
-svL:[function(a,b){a.eb=this.ct(a,C.Gd,a.eb,b)},null,null,3,0,107,23,[],"json",355],
+"^":["V10;eb%-82,kf%-82,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0-375",null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.Nw]}],
+gvL:[function(a){return a.eb},null,null,1,0,115,"json",358,377],
+svL:[function(a,b){a.eb=this.ct(a,C.Gd,a.eb,b)},null,null,3,0,112,28,[],"json",358],
i4:[function(a){Z.uL.prototype.i4.call(this,a)
-a.kf=0},"call$0","gQd",0,0,112,"enteredView"],
-yC:[function(a,b){this.ct(a,C.eR,"a","b")},"call$1","gHl",2,0,158,233,[],"jsonChanged"],
-gW0:[function(a){return J.AG(a.eb)},null,null,1,0,370,"primitiveString"],
+a.kf=0},"call$0","gQd",0,0,114,"enteredView"],
+yC:[function(a,b){this.ct(a,C.eR,"a","b")},"call$1","gHl",2,0,157,229,[],"jsonChanged"],
+gW0:[function(a){return J.AG(a.eb)},null,null,1,0,365,"primitiveString"],
gmm:[function(a){var z,y
z=a.eb
y=J.x(z)
if(typeof z==="object"&&z!==null&&!!y.$isZ0)return"Map"
else if(typeof z==="object"&&z!==null&&(z.constructor===Array||!!y.$isList))return"List"
-return"Primitive"},null,null,1,0,370,"valueType"],
+return"Primitive"},null,null,1,0,365,"valueType"],
gkG:[function(a){var z=a.kf
a.kf=J.WB(z,1)
-return z},null,null,1,0,371,"counter"],
-gaK:[function(a){var z,y
+return z},null,null,1,0,512,"counter"],
+go6:[function(a){var z,y
z=a.eb
y=J.x(z)
if(typeof z==="object"&&z!==null&&(z.constructor===Array||!!y.$isList))return z
-return[]},null,null,1,0,535,"list"],
+return[]},null,null,1,0,518,"list"],
gvc:[function(a){var z,y
z=a.eb
y=J.RE(z)
if(typeof z==="object"&&z!==null&&!!y.$isZ0)return J.qA(y.gvc(z))
-return[]},null,null,1,0,535,"keys"],
-r6:[function(a,b){return J.UQ(a.eb,b)},"call$1","gP",2,0,25,42,[],"value"],
+return[]},null,null,1,0,518,"keys"],
+r6:[function(a,b){return J.UQ(a.eb,b)},"call$1","gP",2,0,30,47,[],"value"],
"@":function(){return[C.KH]},
static:{mA:[function(a){var z,y,x,w
z=$.Nd()
@@ -19388,17 +18832,17 @@
a.SO=z
a.B7=y
a.X0=w
-C.GB.ZL(a)
-C.GB.G6(a)
-return a},null,null,0,0,113,"new JsonViewElement$created"]}},
-"+JsonViewElement":[545],
-tuj:{
+C.Yt.ZL(a)
+C.Yt.G6(a)
+return a},null,null,0,0,115,"new JsonViewElement$created"]}},
+"+JsonViewElement":[519],
+V10:{
"^":"uL+Pi;",
$isd3:true}}],["library_ref_element","package:observatory/src/elements/library_ref.dart",,R,{
"^":"",
LU:{
-"^":["xI;tY-410,Pe-417,AP,fn,pC-411,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0-412",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
-"@":function(){return[C.QU]},
+"^":["xI;tY-381,Pe-382,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0-375",null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.Nw]}],
+"@":function(){return[C.uy]},
static:{rA:[function(a){var z,y,x,w
z=$.Nd()
y=P.Py(null,null,null,J.O,W.I0)
@@ -19411,47 +18855,31 @@
a.X0=w
C.Z3.ZL(a)
C.Z3.G6(a)
-return a},null,null,0,0,113,"new LibraryRefElement$created"]}},
-"+LibraryRefElement":[418]}],["library_view_element","package:observatory/src/elements/library_view.dart",,M,{
+return a},null,null,0,0,115,"new LibraryRefElement$created"]}},
+"+LibraryRefElement":[383]}],["library_view_element","package:observatory/src/elements/library_view.dart",,M,{
"^":"",
-T2:{
-"^":["mHk;N7%-410,AP,fn,pC-411,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0-412",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
-gtD:[function(a){return a.N7},null,null,1,0,354,"library",355,397],
-stD:[function(a,b){a.N7=this.ct(a,C.EV,a.N7,b)},null,null,3,0,357,23,[],"library",355],
-RF:[function(a,b){a.pC.oX(J.UQ(a.N7,"id")).ml(new M.Jq(a)).OA(new M.Yn()).YM(b)},"call$1","gvC",2,0,158,413,[],"refresh"],
+KL:{
+"^":["V11;N7%-374,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0-375",null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.Nw]}],
+gtD:[function(a){return a.N7},null,null,1,0,376,"library",358,377],
+stD:[function(a,b){a.N7=this.ct(a,C.EV,a.N7,b)},null,null,3,0,378,28,[],"library",358],
+yv:[function(a,b){J.am(a.N7).YM(b)},"call$1","gvC",2,0,157,379,[],"refresh"],
"@":function(){return[C.Gg]},
-static:{SP:[function(a){var z,y,x,w,v
-z=H.B7([],P.L5(null,null,null,null,null))
-z=R.Jk(z)
-y=$.Nd()
-x=P.Py(null,null,null,J.O,W.I0)
-w=J.O
-v=W.cv
-v=H.VM(new V.qC(P.Py(null,null,null,w,v),null,null),[w,v])
-a.N7=z
-a.SO=y
-a.B7=x
-a.X0=v
+static:{Ro:[function(a){var z,y,x,w
+z=$.Nd()
+y=P.Py(null,null,null,J.O,W.I0)
+x=J.O
+w=W.cv
+w=H.VM(new V.qC(P.Py(null,null,null,x,w),null,null),[x,w])
+a.SO=z
+a.B7=y
+a.X0=w
C.MG.ZL(a)
C.MG.G6(a)
-return a},null,null,0,0,113,"new LibraryViewElement$created"]}},
-"+LibraryViewElement":[546],
-mHk:{
-"^":"PO+Pi;",
-$isd3:true},
-Jq:{
-"^":"Tp:107;a-77",
-call$1:[function(a){var z,y
-z=this.a
-y=J.RE(z)
-y.sN7(z,y.ct(z,C.EV,y.gN7(z),a))},"call$1",null,2,0,107,149,[],"call"],
-$isEH:true},
-"+LibraryViewElement_refresh_closure":[415],
-Yn:{
-"^":"Tp:346;",
-call$2:[function(a,b){N.Jx("").hh("Error while refreshing library-view: "+H.d(a)+"\n"+H.d(b))},"call$2",null,4,0,346,18,[],416,[],"call"],
-$isEH:true},
-"+LibraryViewElement_refresh_closure":[415]}],["logging","package:logging/logging.dart",,N,{
+return a},null,null,0,0,115,"new LibraryViewElement$created"]}},
+"+LibraryViewElement":[520],
+V11:{
+"^":"uL+Pi;",
+$isd3:true}}],["logging","package:logging/logging.dart",,N,{
"^":"",
TJ:{
"^":"a;oc>,eT>,n2,Cj>,wd>,Gs",
@@ -19468,34 +18896,35 @@
else{if(this.eT!=null)throw H.b(P.f("Please set \"hierarchicalLoggingEnabled\" to true if you want to change the level on a non-root logger."))
$.Y4=a}},
gSZ:function(){return this.IE()},
-Im:[function(a){return a.P>=this.gOR().P},"call$1","goT",2,0,null,23,[]],
+Im:[function(a){return a.P>=this.gOR().P},"call$1","goT",2,0,null,28,[]],
Y6:[function(a,b,c,d){var z,y,x,w,v
if(a.P>=this.gOR().P){z=this.gB8()
-y=P.Gi()
+y=new P.iP(Date.now(),!1)
+y.EK()
x=$.xO
$.xO=x+1
w=new N.HV(a,b,z,y,x,c,d)
if($.RL)for(v=this;v!=null;){z=J.RE(v)
z.od(v,w)
-v=z.geT(v)}else J.EY(N.Jx(""),w)}},"call$4","gA9",4,4,null,77,77,547,[],20,[],160,[],161,[]],
-X2:[function(a,b,c){return this.Y6(C.VZ,a,b,c)},function(a){return this.X2(a,null,null)},"x9","call$3",null,"gEX",2,4,null,77,77,20,[],160,[],161,[]],
-yl:[function(a,b,c){return this.Y6(C.R5,a,b,c)},function(a){return this.yl(a,null,null)},"J4","call$3",null,"gmU",2,4,null,77,77,20,[],160,[],161,[]],
-ZG:[function(a,b,c){return this.Y6(C.IF,a,b,c)},function(a){return this.ZG(a,null,null)},"To","call$3",null,"gqa",2,4,null,77,77,20,[],160,[],161,[]],
-wF:[function(a,b,c){return this.Y6(C.UP,a,b,c)},function(a){return this.wF(a,null,null)},"j2","call$3",null,"goa",2,4,null,77,77,20,[],160,[],161,[]],
-WB:[function(a,b,c){return this.Y6(C.cV,a,b,c)},function(a){return this.WB(a,null,null)},"hh","call$3",null,"gxx",2,4,null,77,77,20,[],160,[],161,[]],
+v=z.geT(v)}else J.EY(N.Jx(""),w)}},"call$4","gA9",4,4,null,82,82,521,[],22,[],159,[],160,[]],
+X2:[function(a,b,c){return this.Y6(C.VZ,a,b,c)},function(a){return this.X2(a,null,null)},"x9","call$3",null,"git",2,4,null,82,82,22,[],159,[],160,[]],
+yl:[function(a,b,c){return this.Y6(C.R5,a,b,c)},function(a){return this.yl(a,null,null)},"J4","call$3",null,"gmU",2,4,null,82,82,22,[],159,[],160,[]],
+ZG:[function(a,b,c){return this.Y6(C.IF,a,b,c)},function(a){return this.ZG(a,null,null)},"To","call$3",null,"gqa",2,4,null,82,82,22,[],159,[],160,[]],
+OW:[function(a,b,c){return this.Y6(C.UP,a,b,c)},function(a){return this.OW(a,null,null)},"j2","call$3",null,"goa",2,4,null,82,82,22,[],159,[],160,[]],
+WB:[function(a,b,c){return this.Y6(C.cV,a,b,c)},function(a){return this.WB(a,null,null)},"hh","call$3",null,"gpo",2,4,null,82,82,22,[],159,[],160,[]],
IE:[function(){if($.RL||this.eT==null){var z=this.Gs
if(z==null){z=P.bK(null,null,!0,N.HV)
this.Gs=z}z.toString
return H.VM(new P.Ik(z),[H.Kp(z,0)])}else return N.Jx("").IE()},"call$0","gnc",0,0,null],
od:[function(a,b){var z=this.Gs
if(z!=null){if(z.Gv>=4)H.vh(z.q7())
-z.Iv(b)}},"call$1","gBq",2,0,null,22,[]],
+z.Iv(b)}},"call$1","gBq",2,0,null,27,[]],
QL:function(a,b,c){var z=this.eT
if(z!=null)J.Tr(z).u(0,this.oc,this)},
$isTJ:true,
static:{"^":"DY",Jx:function(a){return $.U0().to(a,new N.dG(a))}}},
dG:{
-"^":"Tp:113;a",
+"^":"Tp:115;a",
call$0:[function(){var z,y,x,w,v
z=this.a
if(C.xB.nC(z,"."))H.vh(new P.AT("name shouldn't start with a '.'"))
@@ -19513,29 +18942,29 @@
n:[function(a,b){var z
if(b==null)return!1
z=J.x(b)
-return typeof b==="object"&&b!==null&&!!z.$isqV&&this.P===b.P},"call$1","gUJ",2,0,null,104,[]],
+return typeof b==="object"&&b!==null&&!!z.$isqV&&this.P===b.P},"call$1","gUJ",2,0,null,109,[]],
C:[function(a,b){var z=J.Vm(b)
if(typeof z!=="number")return H.s(z)
-return this.P<z},"call$1","gix",2,0,null,104,[]],
+return this.P<z},"call$1","gix",2,0,null,109,[]],
E:[function(a,b){var z=J.Vm(b)
if(typeof z!=="number")return H.s(z)
-return this.P<=z},"call$1","gf5",2,0,null,104,[]],
+return this.P<=z},"call$1","gER",2,0,null,109,[]],
D:[function(a,b){var z=J.Vm(b)
if(typeof z!=="number")return H.s(z)
-return this.P>z},"call$1","gh1",2,0,null,104,[]],
+return this.P>z},"call$1","gh1",2,0,null,109,[]],
F:[function(a,b){var z=J.Vm(b)
if(typeof z!=="number")return H.s(z)
-return this.P>=z},"call$1","gNH",2,0,null,104,[]],
+return this.P>=z},"call$1","gNH",2,0,null,109,[]],
iM:[function(a,b){var z=J.Vm(b)
if(typeof z!=="number")return H.s(z)
-return this.P-z},"call$1","gYc",2,0,null,104,[]],
+return this.P-z},"call$1","gYc",2,0,null,109,[]],
giO:function(a){return this.P},
bu:[function(a){return this.oc},"call$0","gXo",0,0,null],
$isqV:true,
-static:{"^":"V7K,tmj,Enk,us,reI,pd,Wr,AN,JY,lM,B9"}},
+static:{"^":"V7K,tmj,Enk,us,IQ,pd,Wr,AN,JY,lM,B9"}},
HV:{
"^":"a;OR<,G1>,iJ,Fl<,O0,kc>,I4<",
-bu:[function(a){return"["+this.OR.oc+"] "+this.iJ+": "+this.G1},"call$0","gXo",0,0,null],
+bu:[function(a){return"["+this.OR.oc+"] "+this.iJ+": "+H.d(this.G1)},"call$0","gXo",0,0,null],
$isHV:true,
static:{"^":"xO"}}}],["","main.dart",,F,{
"^":"",
@@ -19547,60 +18976,30 @@
J.UQ($.cM(),"google").V7("load",["visualization","1",P.jT(H.B7(["packages",["corechart","table"],"callback",new P.r7(P.xZ(z.gv6(z),!0))],P.L5(null,null,null,null,null)))])
z.MM.ml(G.vN()).ml(new F.Lb())},"call$0","qg",0,0,null],
em:{
-"^":"Tp:549;",
-call$1:[function(a){P.JS(a.gOR().oc+": "+H.d(a.gFl())+": "+H.d(J.yj(a)))},"call$1",null,2,0,null,548,[],"call"],
+"^":"Tp:523;",
+call$1:[function(a){P.JS(a.gOR().oc+": "+H.d(a.gFl())+": "+H.d(J.yj(a)))},"call$1",null,2,0,null,522,[],"call"],
$isEH:true},
Lb:{
-"^":"Tp:107;",
+"^":"Tp:112;",
call$1:[function(a){N.Jx("").To("Initializing Polymer")
-A.Ok()},"call$1",null,2,0,null,108,[],"call"],
-$isEH:true}}],["message_viewer_element","package:observatory/src/elements/message_viewer.dart",,L,{
+A.Ok()},"call$1",null,2,0,null,113,[],"call"],
+$isEH:true}}],["metadata","../../../../../../../../../dart/dart-sdk/lib/html/html_common/metadata.dart",,B,{
"^":"",
-PF:{
-"^":["Vct;Gj%-410,ah%-550,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0-412",null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
-gG1:[function(a){return a.Gj},null,null,1,0,354,"message",397],
-guw:[function(a){return a.ah},null,null,1,0,408,"app",355,397],
-suw:[function(a,b){a.ah=this.ct(a,C.wh,a.ah,b)},null,null,3,0,551,23,[],"app",355],
-sG1:[function(a,b){if(b==null){N.Jx("").To("Viewing null message.")
-return}N.Jx("").To("Viewing message of type '"+H.d(J.UQ(b,"type"))+"'")
-a.Gj=b
-this.ct(a,C.US,"",this.gQW(a))},null,null,3,0,357,191,[],"message",397],
-gQW:[function(a){var z=a.Gj
-if(z==null||J.UQ(z,"type")==null)return"Error"
-return J.UQ(a.Gj,"type")},null,null,1,0,370,"messageType"],
-"@":function(){return[C.rc]},
-static:{A5:[function(a){var z,y,x,w
-z=$.Nd()
-y=P.Py(null,null,null,J.O,W.I0)
-x=J.O
-w=W.cv
-w=H.VM(new V.qC(P.Py(null,null,null,x,w),null,null),[x,w])
-a.SO=z
-a.B7=y
-a.X0=w
-C.Wp.ZL(a)
-C.Wp.G6(a)
-return a},null,null,0,0,113,"new MessageViewerElement$created"]}},
-"+MessageViewerElement":[552],
-Vct:{
-"^":"uL+Pi;",
-$isd3:true}}],["metadata","../../../../../../../../../dart/dart-sdk/lib/html/html_common/metadata.dart",,B,{
-"^":"",
-fA:{
+T4:{
"^":"a;T9,Bu",
static:{"^":"Xd,en,pjg,PZ,xa"}},
-Qz:{
+tzK:{
"^":"a;"},
jA:{
"^":"a;oc>"},
-Jo:{
+PO:{
"^":"a;"},
-c5:{
+oBi:{
"^":"a;"}}],["nav_bar_element","package:observatory/src/elements/nav_bar.dart",,A,{
"^":"",
F1:{
-"^":["uL;AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0-412",null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
-"@":function(){return[C.nW]},
+"^":["uL;AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0-375",null,null,null,null,null,null,null,null,null,function(){return[C.Nw]}],
+"@":function(){return[C.Ug]},
static:{z5:[function(a){var z,y,x,w
z=$.Nd()
y=P.Py(null,null,null,J.O,W.I0)
@@ -19612,16 +19011,16 @@
a.X0=w
C.kD.ZL(a)
C.kD.G6(a)
-return a},null,null,0,0,113,"new NavBarElement$created"]}},
-"+NavBarElement":[553],
+return a},null,null,0,0,115,"new NavBarElement$created"]}},
+"+NavBarElement":[524],
aQ:{
-"^":["D13;uy%-387,ZC%-387,Jo%-417,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0-412",null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
-gPj:[function(a){return a.uy},null,null,1,0,370,"link",355,397],
-sPj:[function(a,b){a.uy=this.ct(a,C.dB,a.uy,b)},null,null,3,0,25,23,[],"link",355],
-gdU:[function(a){return a.ZC},null,null,1,0,370,"anchor",355,397],
-sdU:[function(a,b){a.ZC=this.ct(a,C.Es,a.ZC,b)},null,null,3,0,25,23,[],"anchor",355],
-grZ:[function(a){return a.Jo},null,null,1,0,380,"last",355,397],
-srZ:[function(a,b){a.Jo=this.ct(a,C.QL,a.Jo,b)},null,null,3,0,381,23,[],"last",355],
+"^":["V12;KU%-389,V4%-389,Jo%-382,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0-375",null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.Nw]}],
+gPj:[function(a){return a.KU},null,null,1,0,365,"link",358,377],
+sPj:[function(a,b){a.KU=this.ct(a,C.dB,a.KU,b)},null,null,3,0,30,28,[],"link",358],
+gdU:[function(a){return a.V4},null,null,1,0,365,"anchor",358,377],
+sdU:[function(a,b){a.V4=this.ct(a,C.cg,a.V4,b)},null,null,3,0,30,28,[],"anchor",358],
+grZ:[function(a){return a.Jo},null,null,1,0,390,"last",358,377],
+srZ:[function(a,b){a.Jo=this.ct(a,C.QL,a.Jo,b)},null,null,3,0,391,28,[],"last",358],
"@":function(){return[C.pc]},
static:{AJ:[function(a){var z,y,x,w
z=$.Nd()
@@ -19629,57 +19028,59 @@
x=J.O
w=W.cv
w=H.VM(new V.qC(P.Py(null,null,null,x,w),null,null),[x,w])
-a.uy="#"
-a.ZC="---"
+a.KU="#"
+a.V4="---"
a.Jo=!1
a.SO=z
a.B7=y
a.X0=w
C.SU.ZL(a)
C.SU.G6(a)
-return a},null,null,0,0,113,"new NavMenuElement$created"]}},
-"+NavMenuElement":[554],
-D13:{
+return a},null,null,0,0,115,"new NavMenuElement$created"]}},
+"+NavMenuElement":[525],
+V12:{
"^":"uL+Pi;",
$isd3:true},
-Ya5:{
-"^":["WZq;uy%-387,ZC%-387,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0-412",null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
-gPj:[function(a){return a.uy},null,null,1,0,370,"link",355,397],
-sPj:[function(a,b){a.uy=this.ct(a,C.dB,a.uy,b)},null,null,3,0,25,23,[],"link",355],
-gdU:[function(a){return a.ZC},null,null,1,0,370,"anchor",355,397],
-sdU:[function(a,b){a.ZC=this.ct(a,C.Es,a.ZC,b)},null,null,3,0,25,23,[],"anchor",355],
-"@":function(){return[C.qT]},
+Qa:{
+"^":["V13;KU%-389,V4%-389,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0-375",null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.Nw]}],
+gPj:[function(a){return a.KU},null,null,1,0,365,"link",358,377],
+sPj:[function(a,b){a.KU=this.ct(a,C.dB,a.KU,b)},null,null,3,0,30,28,[],"link",358],
+gdU:[function(a){return a.V4},null,null,1,0,365,"anchor",358,377],
+sdU:[function(a,b){a.V4=this.ct(a,C.cg,a.V4,b)},null,null,3,0,30,28,[],"anchor",358],
+"@":function(){return[C.nh]},
static:{EL:[function(a){var z,y,x,w
z=$.Nd()
y=P.Py(null,null,null,J.O,W.I0)
x=J.O
w=W.cv
w=H.VM(new V.qC(P.Py(null,null,null,x,w),null,null),[x,w])
-a.uy="#"
-a.ZC="---"
+a.KU="#"
+a.V4="---"
a.SO=z
a.B7=y
a.X0=w
C.nn.ZL(a)
C.nn.G6(a)
-return a},null,null,0,0,113,"new NavMenuItemElement$created"]}},
-"+NavMenuItemElement":[555],
-WZq:{
+return a},null,null,0,0,115,"new NavMenuItemElement$created"]}},
+"+NavMenuItemElement":[526],
+V13:{
"^":"uL+Pi;",
$isd3:true},
Ww:{
-"^":["pva;rU%-77,SB%-417,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0-412",null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
-gFR:[function(a){return a.rU},null,null,1,0,113,"callback",355,397],
+"^":["V14;rU%-82,SB%-382,Hq%-389,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0-375",null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.Nw]}],
+gFR:[function(a){return a.rU},null,null,1,0,115,"callback",358,377],
Ki:function(a){return this.gFR(a).call$0()},
VN:function(a,b){return this.gFR(a).call$1(b)},
-sFR:[function(a,b){a.rU=this.ct(a,C.AV,a.rU,b)},null,null,3,0,107,23,[],"callback",355],
-gxw:[function(a){return a.SB},null,null,1,0,380,"active",355,397],
-sxw:[function(a,b){a.SB=this.ct(a,C.aP,a.SB,b)},null,null,3,0,381,23,[],"active",355],
+sFR:[function(a,b){a.rU=this.ct(a,C.AV,a.rU,b)},null,null,3,0,112,28,[],"callback",358],
+gxw:[function(a){return a.SB},null,null,1,0,390,"active",358,377],
+sxw:[function(a,b){a.SB=this.ct(a,C.aP,a.SB,b)},null,null,3,0,391,28,[],"active",358],
+gph:[function(a){return a.Hq},null,null,1,0,365,"label",358,377],
+sph:[function(a,b){a.Hq=this.ct(a,C.hf,a.Hq,b)},null,null,3,0,30,28,[],"label",358],
Ty:[function(a,b,c,d){var z=a.SB
if(z===!0)return
a.SB=this.ct(a,C.aP,z,!0)
-if(a.rU!=null)this.VN(a,this.gCB(a))},"call$3","gzY",6,0,425,18,[],306,[],74,[],"buttonClick"],
-wY:[function(a){a.SB=this.ct(a,C.aP,a.SB,!1)},"call$0","gCB",0,0,112,"refreshDone"],
+if(a.rU!=null)this.VN(a,this.gCB(a))},"call$3","gyr",6,0,393,19,[],304,[],79,[],"buttonClick"],
+wY:[function(a){a.SB=this.ct(a,C.aP,a.SB,!1)},"call$0","gCB",0,0,114,"refreshDone"],
"@":function(){return[C.XG]},
static:{ZC:[function(a){var z,y,x,w
z=$.Nd()
@@ -19688,20 +19089,21 @@
w=W.cv
w=H.VM(new V.qC(P.Py(null,null,null,x,w),null,null),[x,w])
a.SB=!1
+a.Hq="Refresh"
a.SO=z
a.B7=y
a.X0=w
C.J7.ZL(a)
C.J7.G6(a)
-return a},null,null,0,0,113,"new NavRefreshElement$created"]}},
-"+NavRefreshElement":[556],
-pva:{
+return a},null,null,0,0,115,"new NavRefreshElement$created"]}},
+"+NavRefreshElement":[527],
+V14:{
"^":"uL+Pi;",
$isd3:true},
tz:{
-"^":["cda;Jo%-417,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0-412",null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
-grZ:[function(a){return a.Jo},null,null,1,0,380,"last",355,397],
-srZ:[function(a,b){a.Jo=this.ct(a,C.QL,a.Jo,b)},null,null,3,0,381,23,[],"last",355],
+"^":["V15;Jo%-382,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0-375",null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.Nw]}],
+grZ:[function(a){return a.Jo},null,null,1,0,390,"last",358,377],
+srZ:[function(a,b){a.Jo=this.ct(a,C.QL,a.Jo,b)},null,null,3,0,391,28,[],"last",358],
"@":function(){return[C.NT]},
static:{J8:[function(a){var z,y,x,w
z=$.Nd()
@@ -19715,17 +19117,19 @@
a.X0=w
C.lx.ZL(a)
C.lx.G6(a)
-return a},null,null,0,0,113,"new TopNavMenuElement$created"]}},
-"+TopNavMenuElement":[557],
-cda:{
+return a},null,null,0,0,115,"new TopNavMenuElement$created"]}},
+"+TopNavMenuElement":[528],
+V15:{
"^":"uL+Pi;",
$isd3:true},
fl:{
-"^":["qFb;Jo%-417,AP,fn,pC-411,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0-412",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
-grZ:[function(a){return a.Jo},null,null,1,0,380,"last",355,397],
-srZ:[function(a,b){a.Jo=this.ct(a,C.QL,a.Jo,b)},null,null,3,0,381,23,[],"last",355],
+"^":["V16;Jo%-382,iy%-516,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0-375",null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.Nw]}],
+grZ:[function(a){return a.Jo},null,null,1,0,390,"last",358,377],
+srZ:[function(a,b){a.Jo=this.ct(a,C.QL,a.Jo,b)},null,null,3,0,391,28,[],"last",358],
+gF1:[function(a){return a.iy},null,null,1,0,357,"isolate",358,377],
+sF1:[function(a,b){a.iy=this.ct(a,C.Z8,a.iy,b)},null,null,3,0,360,28,[],"isolate",358],
"@":function(){return[C.zaS]},
-static:{Yt:[function(a){var z,y,x,w
+static:{Du:[function(a){var z,y,x,w
z=$.Nd()
y=P.Py(null,null,null,J.O,W.I0)
x=J.O
@@ -19737,17 +19141,17 @@
a.X0=w
C.RR.ZL(a)
C.RR.G6(a)
-return a},null,null,0,0,113,"new IsolateNavMenuElement$created"]}},
-"+IsolateNavMenuElement":[558],
-qFb:{
-"^":"PO+Pi;",
+return a},null,null,0,0,115,"new IsolateNavMenuElement$created"]}},
+"+IsolateNavMenuElement":[529],
+V16:{
+"^":"uL+Pi;",
$isd3:true},
-oM:{
-"^":["rna;Ap%-410,Jo%-417,AP,fn,pC-411,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0-412",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
-gtD:[function(a){return a.Ap},null,null,1,0,354,"library",355,397],
-stD:[function(a,b){a.Ap=this.ct(a,C.EV,a.Ap,b)},null,null,3,0,357,23,[],"library",355],
-grZ:[function(a){return a.Jo},null,null,1,0,380,"last",355,397],
-srZ:[function(a,b){a.Jo=this.ct(a,C.QL,a.Jo,b)},null,null,3,0,381,23,[],"last",355],
+Zt:{
+"^":["V17;Ap%-374,Jo%-382,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0-375",null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.Nw]}],
+gtD:[function(a){return a.Ap},null,null,1,0,376,"library",358,377],
+stD:[function(a,b){a.Ap=this.ct(a,C.EV,a.Ap,b)},null,null,3,0,378,28,[],"library",358],
+grZ:[function(a){return a.Jo},null,null,1,0,390,"last",358,377],
+srZ:[function(a,b){a.Jo=this.ct(a,C.QL,a.Jo,b)},null,null,3,0,391,28,[],"last",358],
"@":function(){return[C.KI]},
static:{IV:[function(a){var z,y,x,w
z=$.Nd()
@@ -19759,19 +19163,19 @@
a.SO=z
a.B7=y
a.X0=w
-C.S3.ZL(a)
-C.S3.G6(a)
-return a},null,null,0,0,113,"new LibraryNavMenuElement$created"]}},
-"+LibraryNavMenuElement":[559],
-rna:{
-"^":"PO+Pi;",
+C.ct.ZL(a)
+C.ct.G6(a)
+return a},null,null,0,0,115,"new LibraryNavMenuElement$created"]}},
+"+LibraryNavMenuElement":[530],
+V17:{
+"^":"uL+Pi;",
$isd3:true},
-wM:{
-"^":["Vba;Au%-410,Jo%-417,AP,fn,pC-411,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0-412",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
-gRu:[function(a){return a.Au},null,null,1,0,354,"cls",355,397],
-sRu:[function(a,b){a.Au=this.ct(a,C.XA,a.Au,b)},null,null,3,0,357,23,[],"cls",355],
-grZ:[function(a){return a.Jo},null,null,1,0,380,"last",355,397],
-srZ:[function(a,b){a.Jo=this.ct(a,C.QL,a.Jo,b)},null,null,3,0,381,23,[],"last",355],
+iL:{
+"^":["V18;Au%-374,Jo%-382,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0-375",null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.Nw]}],
+gRu:[function(a){return a.Au},null,null,1,0,376,"cls",358,377],
+sRu:[function(a,b){a.Au=this.ct(a,C.XA,a.Au,b)},null,null,3,0,378,28,[],"cls",358],
+grZ:[function(a){return a.Jo},null,null,1,0,390,"last",358,377],
+srZ:[function(a,b){a.Jo=this.ct(a,C.QL,a.Jo,b)},null,null,3,0,391,28,[],"last",358],
"@":function(){return[C.t9]},
static:{lT:[function(a){var z,y,x,w
z=$.Nd()
@@ -19785,29 +19189,30 @@
a.X0=w
C.xE.ZL(a)
C.xE.G6(a)
-return a},null,null,0,0,113,"new ClassNavMenuElement$created"]}},
-"+ClassNavMenuElement":[560],
-Vba:{
-"^":"PO+Pi;",
+return a},null,null,0,0,115,"new ClassNavMenuElement$created"]}},
+"+ClassNavMenuElement":[531],
+V18:{
+"^":"uL+Pi;",
$isd3:true}}],["observatory_application_element","package:observatory/src/elements/observatory_application.dart",,V,{
"^":"",
lI:{
-"^":["waa;k5%-417,xH%-550,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0-412",null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
-gzj:[function(a){return a.k5},null,null,1,0,380,"devtools",355,397],
-szj:[function(a,b){a.k5=this.ct(a,C.Na,a.k5,b)},null,null,3,0,381,23,[],"devtools",355],
-guw:[function(a){return a.xH},null,null,1,0,408,"app",355,356],
-suw:[function(a,b){a.xH=this.ct(a,C.wh,a.xH,b)},null,null,3,0,551,23,[],"app",355],
-ZB:[function(a){var z,y
-if(a.k5===!0){z=new G.ho(P.L5(null,null,null,null,null),0,null,H.VM(new V.qC(P.Py(null,null,null,null,null),null,null),[null,null]),null,null)
-y=C.ph.aM(window)
-H.VM(new W.Ov(0,y.uv,y.Ph,W.aF(z.gcW()),y.Sg),[H.Kp(y,0)]).Zz()
-P.JS("Connected to DartiumVM")
-z=new G.mL(new G.dZ(null,!1,"",null,null,null),z,null,null,null,null)
+"^":["V19;k5%-382,xH%-532,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0-375",null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.Nw]}],
+gzj:[function(a){return a.k5},null,null,1,0,390,"devtools",358,377],
+szj:[function(a,b){a.k5=this.ct(a,C.Na,a.k5,b)},null,null,3,0,391,28,[],"devtools",358],
+guw:[function(a){return a.xH},null,null,1,0,533,"app",358,359],
+suw:[function(a,b){a.xH=this.ct(a,C.wh,a.xH,b)},null,null,3,0,534,28,[],"app",358],
+ZB:[function(a){var z
+if(a.k5===!0){z=new U.ho(P.L5(null,null,null,null,null),0,null,null,null,null,null)
+z.pC()
+z.PI()
+z=new G.mL(new G.dZ(null,"",null,null),z,null,null,null,null)
z.hq()
-a.xH=this.ct(a,C.wh,a.xH,z)}else{z=new G.mL(new G.dZ(null,!1,"",null,null,null),new G.XK("http://127.0.0.1:8181/",null,H.VM(new V.qC(P.Py(null,null,null,null,null),null,null),[null,null]),null,null),null,null,null,null)
+a.xH=this.ct(a,C.wh,a.xH,z)}else{z=new U.XK("http://127.0.0.1:8181/",null,null,null,null,null)
+z.pC()
+z=new G.mL(new G.dZ(null,"",null,null),z,null,null,null,null)
z.US()
-a.xH=this.ct(a,C.wh,a.xH,z)}},null,null,0,0,113,"created"],
-"@":function(){return[C.kR]},
+a.xH=this.ct(a,C.wh,a.xH,z)}},null,null,0,0,115,"created"],
+"@":function(){return[C.bd]},
static:{fv:[function(a){var z,y,x,w
z=$.Nd()
y=P.Py(null,null,null,J.O,W.I0)
@@ -19821,49 +19226,51 @@
C.k0.ZL(a)
C.k0.G6(a)
C.k0.ZB(a)
-return a},null,null,0,0,113,"new ObservatoryApplicationElement$created"]}},
-"+ObservatoryApplicationElement":[561],
-waa:{
+return a},null,null,0,0,115,"new ObservatoryApplicationElement$created"]}},
+"+ObservatoryApplicationElement":[535],
+V19:{
"^":"uL+Pi;",
$isd3:true}}],["observatory_element","package:observatory/src/elements/observatory_element.dart",,Z,{
"^":"",
uL:{
-"^":["ir;AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0-412",null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
-i4:[function(a){A.zs.prototype.i4.call(this,a)},"call$0","gQd",0,0,112,"enteredView"],
-xo:[function(a){A.zs.prototype.xo.call(this,a)},"call$0","gbt",0,0,112,"leftView"],
-aC:[function(a,b,c,d){A.zs.prototype.aC.call(this,a,b,c,d)},"call$3","gxR",6,0,562,12,[],233,[],234,[],"attributeChanged"],
-gpQ:[function(a){return!0},null,null,1,0,380,"applyAuthorStyles"],
+"^":["ir;AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0-375",null,null,null,null,null,null,null,null,null,function(){return[C.Nw]}],
+i4:[function(a){A.zs.prototype.i4.call(this,a)},"call$0","gQd",0,0,114,"enteredView"],
+xo:[function(a){A.zs.prototype.xo.call(this,a)},"call$0","gbt",0,0,114,"leftView"],
+aC:[function(a,b,c,d){A.zs.prototype.aC.call(this,a,b,c,d)},"call$3","gxR",6,0,536,12,[],229,[],230,[],"attributeChanged"],
+gpQ:[function(a){return!0},null,null,1,0,390,"applyAuthorStyles"],
Om:[function(a,b){var z,y,x,w
if(b==null)return"-"
-z=J.LL(J.p0(b,1000))
+z=J.LL(J.vX(b,1000))
y=C.jn.cU(z,3600000)
z=C.jn.Y(z,3600000)
x=C.jn.cU(z,60000)
z=C.jn.Y(z,60000)
w=C.jn.cU(z,1000)
z=C.jn.Y(z,1000)
-return Z.Ce(y,2)+":"+Z.Ce(x,2)+":"+Z.Ce(w,2)+"."+Z.Ce(z,3)},"call$1","gSs",2,0,563,564,[],"formatTime"],
-Ze:[function(a,b){var z=J.Wx(b)
+return Z.Ce(y,2)+":"+Z.Ce(x,2)+":"+Z.Ce(w,2)+"."+Z.Ce(z,3)},"call$1","gSs",2,0,537,538,[],"formatTime"],
+Yy:[function(a,b){return J.Ez(b,2)},"call$1","ghY",2,0,537,26,[],"formatSeconds"],
+A5:[function(a,b){var z=J.Wx(b)
if(z.C(b,1024))return H.d(b)+"B"
else if(z.C(b,1048576))return""+C.CD.yu(C.CD.UD(z.V(b,1024)))+"KB"
else if(z.C(b,1073741824))return""+C.CD.yu(C.CD.UD(z.V(b,1048576)))+"MB"
else if(z.C(b,1099511627776))return""+C.CD.yu(C.CD.UD(z.V(b,1073741824)))+"GB"
-else return""+C.CD.yu(C.CD.UD(z.V(b,1099511627776)))+"TB"},"call$1","gbJ",2,0,444,565,[],"formatSize"],
+else return""+C.CD.yu(C.CD.UD(z.V(b,1099511627776)))+"TB"},"call$1","gbJ",2,0,413,539,[],"formatSize"],
bj:[function(a,b){var z,y,x
z=J.U6(b)
y=J.UQ(z.t(b,"script"),"user_name")
x=J.U6(y)
-return x.yn(y,J.WB(x.cn(y,"/"),1))+":"+H.d(z.t(b,"line"))},"call$1","gNh",2,0,566,567,[],"fileAndLine"],
-nt:[function(a,b){return J.de(b,"@Null")},"call$1","gYx",2,0,568,11,[],"isNullRef"],
-Qq:[function(a,b){var z=J.x(b)
-return z.n(b,"@Smi")||z.n(b,"@Mint")||z.n(b,"@Bigint")},"call$1","gBI",2,0,568,11,[],"isIntRef"],
-TJ:[function(a,b){return J.de(b,"@Bool")},"call$1","gX4",2,0,568,11,[],"isBoolRef"],
-qH:[function(a,b){return J.de(b,"@String")},"call$1","gwm",2,0,568,11,[],"isStringRef"],
-JG:[function(a,b){return J.de(b,"@Instance")},"call$1","gUq",2,0,568,11,[],"isInstanceRef"],
-CL:[function(a,b){return J.de(b,"@Closure")},"call$1","gj7",2,0,568,11,[],"isClosureRef"],
-Bk:[function(a,b){var z=J.x(b)
-return z.n(b,"@GrowableObjectArray")||z.n(b,"@Array")},"call$1","gmv",2,0,568,11,[],"isListRef"],
-VR:[function(a,b){return!C.Nm.tg(["@Null","@Smi","@Mint","@Biginit","@Bool","@String","@Closure","@Instance","@GrowableObjectArray","@Array"],b)},"call$1","gua",2,0,568,11,[],"isUnexpectedRef"],
+return x.yn(y,J.WB(x.cn(y,"/"),1))+":"+H.d(z.t(b,"line"))},"call$1","gNh",2,0,540,541,[],"fileAndLine"],
+z4:[function(a,b){return J.de(b,"Null")},"call$1","gXj",2,0,542,11,[],"isNull"],
+i5:[function(a,b){return J.de(b,"Error")},"call$1","gt3",2,0,542,11,[],"isError"],
+OP:[function(a,b){var z=J.x(b)
+return z.n(b,"Smi")||z.n(b,"Mint")||z.n(b,"Bigint")},"call$1","gTB",2,0,542,11,[],"isInt"],
+RU:[function(a,b){return J.de(b,"Bool")},"call$1","gjS",2,0,542,11,[],"isBool"],
+KJ:[function(a,b){return J.de(b,"String")},"call$1","gfI",2,0,542,11,[],"isString"],
+fZ:[function(a,b){return J.de(b,"Instance")},"call$1","gnD",2,0,542,11,[],"isInstance"],
+F6:[function(a,b){return J.de(b,"Closure")},"call$1","gBF",2,0,542,11,[],"isClosure"],
+Cp:[function(a,b){var z=J.x(b)
+return z.n(b,"GrowableObjectArray")||z.n(b,"Array")},"call$1","gwc",2,0,542,11,[],"isList"],
+Cn:[function(a,b){return!C.Nm.tg(["Null","Smi","Mint","Biginit","Bool","String","Closure","Instance","GrowableObjectArray","Array","Error"],b)},"call$1","gaE",2,0,542,11,[],"isUnexpected"],
"@":function(){return[C.Br]},
static:{Hx:[function(a){var z,y,x,w
z=$.Nd()
@@ -19876,12 +19283,12 @@
a.X0=w
C.Pf.ZL(a)
C.Pf.G6(a)
-return a},null,null,0,0,113,"new ObservatoryElement$created"],Ce:[function(a,b){var z,y,x,w
+return a},null,null,0,0,115,"new ObservatoryElement$created"],Ce:[function(a,b){var z,y,x,w
for(z=J.Wx(a),y="";x=J.Wx(b),x.D(b,1);){w=x.W(b,1)
if(typeof w!=="number")H.vh(new P.AT(w))
if(z.C(a,Math.pow(10,w)))y+="0"
-b=x.W(b,1)}return y+H.d(a)},"call$2","px",4,0,243,23,[],244,[],"_zeroPad"]}},
-"+ObservatoryElement":[569]}],["observe.src.change_notifier","package:observe/src/change_notifier.dart",,O,{
+b=x.W(b,1)}return y+H.d(a)},"call$2","Rz",4,0,239,28,[],240,[],"_zeroPad"]}},
+"+ObservatoryElement":[543]}],["observe.src.change_notifier","package:observe/src/change_notifier.dart",,O,{
"^":"",
Pi:{
"^":"a;",
@@ -19890,46 +19297,40 @@
z=P.bK(this.gl1(a),z,!0,null)
a.AP=z}z.toString
return H.VM(new P.Ik(z),[H.Kp(z,0)])},
-k0:[function(a){},"call$0","gqw",0,0,112],
-ni:[function(a){a.AP=null},"call$0","gl1",0,0,112],
+k0:[function(a){},"call$0","gqw",0,0,114],
+ni:[function(a){a.AP=null},"call$0","gl1",0,0,114],
BN:[function(a){var z,y,x
-z=a.fn
-a.fn=null
-y=a.AP
-if(y!=null){x=y.iE
-x=x==null?y!=null:x!==y}else x=!1
-if(x&&z!=null){x=H.VM(new P.Yp(z),[T.z2])
+z=a.Lk
+a.Lk=null
+if(this.gnz(a)&&z!=null){y=a.AP
+x=H.VM(new P.Yp(z),[T.z2])
if(y.Gv>=4)H.vh(y.q7())
y.Iv(x)
-return!0}return!1},"call$0","gDx",0,0,380],
-gUV:function(a){var z,y
+return!0}return!1},"call$0","gDx",0,0,390],
+gnz:function(a){var z,y
z=a.AP
if(z!=null){y=z.iE
z=y==null?z!=null:y!==z}else z=!1
return z},
-ct:[function(a,b,c,d){return F.Wi(a,b,c,d)},"call$3","gAn",6,0,null,257,[],233,[],234,[]],
-nq:[function(a,b){var z,y
-z=a.AP
-if(z!=null){y=z.iE
-z=y==null?z!=null:y!==z}else z=!1
-if(!z)return
-if(a.fn==null){a.fn=[]
-P.rb(this.gDx(a))}a.fn.push(b)},"call$1","gbW",2,0,null,22,[]],
+ct:[function(a,b,c,d){return F.Wi(a,b,c,d)},"call$3","gAn",6,0,null,253,[],229,[],230,[]],
+nq:[function(a,b){if(!this.gnz(a))return
+if(a.Lk==null){a.Lk=[]
+P.rb(this.gDx(a))}a.Lk.push(b)},"call$1","giA",2,0,null,27,[]],
$isd3:true}}],["observe.src.change_record","package:observe/src/change_record.dart",,T,{
"^":"",
z2:{
"^":"a;",
$isz2:true},
qI:{
-"^":"z2;WA<,oc>,jL>,zZ>",
+"^":"z2;WA>,oc>,jL>,zZ>",
bu:[function(a){return"#<PropertyChangeRecord "+H.d(this.oc)+" from: "+H.d(this.jL)+" to: "+H.d(this.zZ)+">"},"call$0","gXo",0,0,null],
$isqI:true}}],["observe.src.compound_path_observer","package:observe/src/compound_path_observer.dart",,Y,{
"^":"",
J3:{
-"^":"Pi;b9,kK,Sv,rk,YX,B6,AP,fn",
+"^":"Pi;b9,kK,Sv,rk,YX,B6,AP,Lk",
kb:function(a){return this.rk.call$1(a)},
gB:function(a){return this.b9.length},
-gP:[function(a){return this.Sv},null,null,1,0,113,"value",355],
+gP:[function(a){return this.Sv},null,null,1,0,115,"value",358],
r6:function(a,b){return this.gP(this).call$1(b)},
wE:[function(a){var z,y,x,w,v
if(this.YX)return
@@ -19943,14 +19344,14 @@
x.push(w)}this.Ow()},"call$0","gM",0,0,null],
TF:[function(a){if(this.B6)return
this.B6=!0
-P.rb(this.gMc())},"call$1","geu",2,0,158,108,[]],
+P.rb(this.gMc())},"call$1","geu",2,0,157,113,[]],
Ow:[function(){var z,y
this.B6=!1
z=this.b9
if(z.length===0)return
y=H.VM(new H.A8(z,new Y.E5()),[null,null]).br(0)
if(this.rk!=null)y=this.kb(y)
-this.Sv=F.Wi(this,C.ls,this.Sv,y)},"call$0","gMc",0,0,112],
+this.Sv=F.Wi(this,C.ls,this.Sv,y)},"call$0","gMc",0,0,114],
cO:[function(a){var z,y
z=this.b9
if(z.length===0)return
@@ -19958,12 +19359,12 @@
C.Nm.sB(z,0)
C.Nm.sB(this.kK,0)
this.Sv=null},"call$0","gJK",0,0,null],
-k0:[function(a){return this.wE(0)},"call$0","gqw",0,0,113],
-ni:[function(a){return this.cO(0)},"call$0","gl1",0,0,113],
+k0:[function(a){return this.wE(0)},"call$0","gqw",0,0,115],
+ni:[function(a){return this.cO(0)},"call$0","gl1",0,0,115],
$isJ3:true},
E5:{
-"^":"Tp:107;",
-call$1:[function(a){return J.Vm(a)},"call$1",null,2,0,null,91,[],"call"],
+"^":"Tp:112;",
+call$1:[function(a){return J.Vm(a)},"call$1",null,2,0,null,96,[],"call"],
$isEH:true}}],["observe.src.dirty_check","package:observe/src/dirty_check.dart",,O,{
"^":"",
Y3:[function(){var z,y,x,w,v,u,t,s,r,q
@@ -19995,36 +19396,36 @@
z=new O.o5(z)
return new P.zG(null,null,null,null,new O.zI(z),new O.id(z),null,null,null,null,null,null)},"call$0","Zq",0,0,null],
o5:{
-"^":"Tp:570;a",
+"^":"Tp:544;a",
call$2:[function(a,b){var z=this.a
if(z.a)return
z.a=!0
-a.RK(b,new O.b5(z))},"call$2",null,4,0,null,170,[],151,[],"call"],
+a.RK(b,new O.b5(z))},"call$2",null,4,0,null,169,[],153,[],"call"],
$isEH:true},
b5:{
-"^":"Tp:113;a",
+"^":"Tp:115;a",
call$0:[function(){this.a.a=!1
O.Y3()},"call$0",null,0,0,null,"call"],
$isEH:true},
zI:{
-"^":"Tp:171;b",
+"^":"Tp:170;b",
call$4:[function(a,b,c,d){if(d==null)return d
-return new O.Zb(this.b,b,c,d)},"call$4",null,8,0,null,169,[],170,[],151,[],115,[],"call"],
+return new O.Zb(this.b,b,c,d)},"call$4",null,8,0,null,168,[],169,[],153,[],117,[],"call"],
$isEH:true},
Zb:{
-"^":"Tp:113;c,d,e,f",
+"^":"Tp:115;c,d,e,f",
call$0:[function(){this.c.call$2(this.d,this.e)
return this.f.call$0()},"call$0",null,0,0,null,"call"],
$isEH:true},
id:{
-"^":"Tp:571;UI",
+"^":"Tp:545;UI",
call$4:[function(a,b,c,d){if(d==null)return d
-return new O.iV(this.UI,b,c,d)},"call$4",null,8,0,null,169,[],170,[],151,[],115,[],"call"],
+return new O.iV(this.UI,b,c,d)},"call$4",null,8,0,null,168,[],169,[],153,[],117,[],"call"],
$isEH:true},
iV:{
-"^":"Tp:107;bK,Gq,Rm,w3",
+"^":"Tp:112;bK,Gq,Rm,w3",
call$1:[function(a){this.bK.call$2(this.Gq,this.Rm)
-return this.w3.call$1(a)},"call$1",null,2,0,null,21,[],"call"],
+return this.w3.call$1(a)},"call$1",null,2,0,null,26,[],"call"],
$isEH:true}}],["observe.src.list_diff","package:observe/src/list_diff.dart",,G,{
"^":"",
f6:[function(a,b,c,d,e,f){var z,y,x,w,v,u,t,s,r,q,p,o,n,m,l
@@ -20062,7 +19463,7 @@
if(typeof n!=="number")return n.g()
n=P.J(o+1,n+1)
if(t>=l)return H.e(m,t)
-m[t]=n}}return x},"call$6","cL",12,0,null,245,[],246,[],247,[],248,[],249,[],250,[]],
+m[t]=n}}return x},"call$6","cL",12,0,null,241,[],242,[],243,[],244,[],245,[],246,[]],
Mw:[function(a){var z,y,x,w,v,u,t,s,r,q,p,o,n
z=a.length
y=z-1
@@ -20097,10 +19498,10 @@
v=p
y=w}else{u.push(2)
v=o
-x=s}}}return H.VM(new H.iK(u),[null]).br(0)},"call$1","fZ",2,0,null,251,[]],
+x=s}}}return H.VM(new H.iK(u),[null]).br(0)},"call$1","fZ",2,0,null,247,[]],
rB:[function(a,b,c){var z,y,x
for(z=J.U6(a),y=J.U6(b),x=0;x<c;++x)if(!J.de(z.t(a,x),y.t(b,x)))return x
-return c},"call$3","UF",6,0,null,252,[],253,[],254,[]],
+return c},"call$3","UF",6,0,null,248,[],249,[],250,[]],
xU:[function(a,b,c){var z,y,x,w,v,u
z=J.U6(a)
y=z.gB(a)
@@ -20111,7 +19512,7 @@
u=z.t(a,y)
w=J.xH(w,1)
u=J.de(u,x.t(b,w))}else u=!1
-if(!u)break;++v}return v},"call$3","M9",6,0,null,252,[],253,[],254,[]],
+if(!u)break;++v}return v},"call$3","M9",6,0,null,248,[],249,[],250,[]],
jj:[function(a,b,c,d,e,f){var z,y,x,w,v,u,t,s,r,q,p,o,n,m
z=J.Wx(c)
y=J.Wx(f)
@@ -20161,16 +19562,17 @@
s=new G.DA(a,y,t,n,0)}J.bi(s.Il,z.t(d,o));++o
break
default:}if(s!=null)p.push(s)
-return p},"call$6","Lr",12,0,null,245,[],246,[],247,[],248,[],249,[],250,[]],
+return p},"call$6","mu",12,0,null,241,[],242,[],243,[],244,[],245,[],246,[]],
m1:[function(a,b){var z,y,x,w,v,u,t,s,r,q,p,o,n,m
-z=b.gWA()
-y=J.zj(b)
+z=J.RE(b)
+y=z.gWA(b)
+z=z.gvH(b)
x=J.qA(b.gIl())
w=b.gNg()
if(w==null)w=0
v=new P.Yp(x)
v.$builtinTypeInfo=[null]
-u=new G.DA(z,v,x,y,w)
+u=new G.DA(y,v,x,z,w)
for(t=!1,s=0,r=0;z=a.length,r<z;++r){if(r<0)return H.e(a,r)
q=a[r]
q.jr=J.WB(q.jr,s)
@@ -20200,11 +19602,11 @@
q.jr=J.WB(q.jr,m)
if(typeof m!=="number")return H.s(m)
s+=m
-t=!0}else t=!1}if(!t)a.push(u)},"call$2","c7",4,0,null,255,[],22,[]],
+t=!0}else t=!1}if(!t)a.push(u)},"call$2","c7",4,0,null,251,[],27,[]],
xl:[function(a,b){var z,y
z=H.VM([],[G.DA])
for(y=H.VM(new H.a7(b,b.length,0,null),[H.Kp(b,0)]);y.G();)G.m1(z,y.lo)
-return z},"call$2","bN",4,0,null,68,[],256,[]],
+return z},"call$2","bN",4,0,null,73,[],252,[]],
u2:[function(a,b){var z,y,x,w,v,u
if(b.length===1)return b
z=[]
@@ -20214,9 +19616,9 @@
if(u>>>0!==u||u>=x.length)return H.e(x,u)
if(!J.de(v,x[u]))z.push(w)
continue}v=J.RE(w)
-C.Nm.FV(z,G.jj(a,v.gvH(w),J.WB(v.gvH(w),w.gNg()),w.gIl(),0,J.q8(w.gRt().G4)))}return z},"call$2","W5",4,0,null,68,[],256,[]],
+C.Nm.FV(z,G.jj(a,v.gvH(w),J.WB(v.gvH(w),w.gNg()),w.gIl(),0,J.q8(w.gRt().G4)))}return z},"call$2","AH",4,0,null,73,[],252,[]],
DA:{
-"^":"a;WA<,ok,Il<,jr,dM",
+"^":"a;WA>,ok,Il<,jr,dM",
gvH:function(a){return this.jr},
gRt:function(){return this.ok},
gNg:function(){return this.dM},
@@ -20227,7 +19629,7 @@
if(!J.de(this.dM,J.q8(this.ok.G4)))return!0
z=J.WB(this.jr,this.dM)
if(typeof z!=="number")return H.s(z)
-return a<z},"call$1","gw9",2,0,null,42,[]],
+return a<z},"call$1","gcW",2,0,null,47,[]],
bu:[function(a){return"#<ListChangeRecord index: "+H.d(this.jr)+", removed: "+H.d(this.ok)+", addedCount: "+H.d(this.dM)+">"},"call$0","gXo",0,0,null],
$isDA:true,
static:{XM:function(a,b,c,d){var z
@@ -20244,8 +19646,8 @@
"^":"a;"}}],["observe.src.observable","package:observe/src/observable.dart",,F,{
"^":"",
Wi:[function(a,b,c,d){var z=J.RE(a)
-if(z.gUV(a)&&!J.de(c,d))z.nq(a,H.VM(new T.qI(a,b,c,d),[null]))
-return d},"call$4","T7",8,0,null,93,[],257,[],233,[],234,[]],
+if(z.gnz(a)&&!J.de(c,d))z.nq(a,H.VM(new T.qI(a,b,c,d),[null]))
+return d},"call$4","T7",8,0,null,98,[],253,[],229,[],230,[]],
d3:{
"^":"a;",
gUj:function(a){var z=this.R9
@@ -20253,7 +19655,7 @@
z=P.bK(this.gkk(),z,!0,null)
this.R9=z}z.toString
return H.VM(new P.Ik(z),[H.Kp(z,0)])},
-gUV:function(a){var z,y
+gnz:function(a){var z,y
z=this.R9
if(z!=null){y=z.iE
z=y==null?z!=null:y!==z}else z=!1
@@ -20270,16 +19672,16 @@
v=new H.MH(null,J.GP(z.l6),z.T6)
v.$builtinTypeInfo=[H.Kp(z,0),H.Kp(z,1)]
for(;v.G();){u=v.lo
-z=J.x(u)
-if(typeof u!=="object"||u===null||!z.$isRY||u.gV5()||u.gFo()||u.gq4())continue
+z=J.RE(u)
+if(typeof u!=="object"||u===null||!z.$isRY||z.gV5(u)||u.gFo()||u.gq4())continue
for(z=J.GP(u.gc9());z.G();){t=z.lo.gAx()
s=J.x(t)
if(typeof t==="object"&&t!==null&&!!s.$isnd){r=u.gIf()
x.u(0,r,y.rN(r).gAx())
break}}}}this.wv=y
-this.V2=x},"call$0","gFW",0,0,112],
+this.V2=x},"call$0","gFW",0,0,114],
B0:[function(){if(this.V2!=null){this.wv=null
-this.V2=null}},"call$0","gkk",0,0,112],
+this.V2=null}},"call$0","gkk",0,0,114],
BN:[function(a){var z,y,x,w
z={}
y=this.V2
@@ -20298,7 +19700,7 @@
if(y.Gv>=4)H.vh(y.q7())
y.Iv(z)
return!0},"call$0","gDx",0,0,null],
-ct:[function(a,b,c,d){return F.Wi(this,b,c,d)},"call$3","gAn",6,0,null,257,[],233,[],234,[]],
+ct:[function(a,b,c,d){return F.Wi(this,b,c,d)},"call$3","gAn",6,0,null,253,[],229,[],230,[]],
nq:[function(a,b){var z,y
z=this.R9
if(z!=null){y=z.iE
@@ -20306,10 +19708,10 @@
if(!z)return
z=this.me
if(z==null){z=[]
-this.me=z}z.push(b)},"call$1","gbW",2,0,null,22,[]],
+this.me=z}z.push(b)},"call$1","giA",2,0,null,27,[]],
$isd3:true},
lS:{
-"^":"Tp:346;a,b",
+"^":"Tp:348;a,b",
call$2:[function(a,b){var z,y,x,w,v
z=this.b
y=z.wv.rN(a).gAx()
@@ -20319,23 +19721,23 @@
x.a=v
x=v}else x=w
x.push(H.VM(new T.qI(z,a,b,y),[null]))
-z.V2.u(0,a,y)}},"call$2",null,4,0,null,12,[],233,[],"call"],
+z.V2.u(0,a,y)}},"call$2",null,4,0,null,12,[],229,[],"call"],
$isEH:true}}],["observe.src.observable_box","package:observe/src/observable_box.dart",,A,{
"^":"",
xh:{
-"^":"Pi;L1,AP,fn",
-gP:[function(a){return this.L1},null,null,1,0,function(){return H.IG(function(a){return{func:"Oy",ret:a}},this.$receiver,"xh")},"value",355],
+"^":"Pi;L1,AP,Lk",
+gP:[function(a){return this.L1},null,null,1,0,function(){return H.IG(function(a){return{func:"Oy",ret:a}},this.$receiver,"xh")},"value",358],
r6:function(a,b){return this.gP(this).call$1(b)},
-sP:[function(a,b){this.L1=F.Wi(this,C.ls,this.L1,b)},null,null,3,0,function(){return H.IG(function(a){return{func:"lU6",void:true,args:[a]}},this.$receiver,"xh")},234,[],"value",355],
+sP:[function(a,b){this.L1=F.Wi(this,C.ls,this.L1,b)},null,null,3,0,function(){return H.IG(function(a){return{func:"lU6",void:true,args:[a]}},this.$receiver,"xh")},230,[],"value",358],
bu:[function(a){return"#<"+H.d(new H.cu(H.dJ(this),null))+" value: "+H.d(this.L1)+">"},"call$0","gXo",0,0,null]}}],["observe.src.observable_list","package:observe/src/observable_list.dart",,Q,{
"^":"",
wn:{
-"^":"Ay;b3,xg,h3,AP,fn",
+"^":"er;b3,xg,h3,AP,Lk",
gvp:function(){var z=this.xg
if(z==null){z=P.bK(new Q.Bj(this),null,!0,null)
this.xg=z}z.toString
return H.VM(new P.Ik(z),[H.Kp(z,0)])},
-gB:[function(a){return this.h3.length},null,null,1,0,371,"length",355],
+gB:[function(a){return this.h3.length},null,null,1,0,512,"length",358],
sB:[function(a,b){var z,y,x,w,v,u
z=this.h3
y=z.length
@@ -20363,10 +19765,10 @@
u=[]
w=new P.Yp(u)
w.$builtinTypeInfo=[null]
-this.iH(new G.DA(this,w,u,y,x))}C.Nm.sB(z,b)},null,null,3,0,372,23,[],"length",355],
+this.iH(new G.DA(this,w,u,y,x))}C.Nm.sB(z,b)},null,null,3,0,411,28,[],"length",358],
t:[function(a,b){var z=this.h3
if(b>>>0!==b||b>=z.length)return H.e(z,b)
-return z[b]},"call$1","gIA",2,0,function(){return H.IG(function(a){return{func:"dG",ret:a,args:[J.im]}},this.$receiver,"wn")},47,[],"[]",355],
+return z[b]},"call$1","gIA",2,0,function(){return H.IG(function(a){return{func:"dG",ret:a,args:[J.im]}},this.$receiver,"wn")},52,[],"[]",358],
u:[function(a,b,c){var z,y,x,w
z=this.h3
if(b>>>0!==b||b>=z.length)return H.e(z,b)
@@ -20378,9 +19780,9 @@
w=new P.Yp(x)
w.$builtinTypeInfo=[null]
this.iH(new G.DA(this,w,x,b,1))}if(b>=z.length)return H.e(z,b)
-z[b]=c},"call$2","gj3",4,0,function(){return H.IG(function(a){return{func:"UR",void:true,args:[J.im,a]}},this.$receiver,"wn")},47,[],23,[],"[]=",355],
-gl0:[function(a){return P.lD.prototype.gl0.call(this,this)},null,null,1,0,380,"isEmpty",355],
-gor:[function(a){return P.lD.prototype.gor.call(this,this)},null,null,1,0,380,"isNotEmpty",355],
+z[b]=c},"call$2","gj3",4,0,function(){return H.IG(function(a){return{func:"UR",void:true,args:[J.im,a]}},this.$receiver,"wn")},52,[],28,[],"[]=",358],
+gl0:[function(a){return P.lD.prototype.gl0.call(this,this)},null,null,1,0,390,"isEmpty",358],
+gor:[function(a){return P.lD.prototype.gor.call(this,this)},null,null,1,0,390,"isNotEmpty",358],
h:[function(a,b){var z,y,x,w
z=this.h3
y=z.length
@@ -20389,7 +19791,7 @@
if(x!=null){w=x.iE
x=w==null?x!=null:w!==x}else x=!1
if(x)this.iH(G.XM(this,y,1,null))
-C.Nm.h(z,b)},"call$1","ght",2,0,null,23,[]],
+C.Nm.h(z,b)},"call$1","ght",2,0,null,28,[]],
FV:[function(a,b){var z,y,x,w
z=this.h3
y=z.length
@@ -20399,10 +19801,10 @@
z=this.xg
if(z!=null){w=z.iE
z=w==null?z!=null:w!==z}else z=!1
-if(z&&x>0)this.iH(G.XM(this,y,x,null))},"call$1","gDY",2,0,null,114,[]],
+if(z&&x>0)this.iH(G.XM(this,y,x,null))},"call$1","gDY",2,0,null,116,[]],
Rz:[function(a,b){var z,y
for(z=this.h3,y=0;y<z.length;++y)if(J.de(z[y],b)){this.UZ(0,y,y+1)
-return!0}return!1},"call$1","gRI",2,0,null,129,[]],
+return!0}return!1},"call$1","guH",2,0,null,132,[]],
UZ:[function(a,b,c){var z,y,x,w,v,u,t
z=b>=0
if(!z||b>this.h3.length)H.vh(P.TE(b,0,this.h3.length))
@@ -20430,7 +19832,7 @@
z=z.br(0)
y=new P.Yp(z)
y.$builtinTypeInfo=[null]
-this.iH(new G.DA(this,y,z,b,0))}C.Nm.UZ(w,b,c)},"call$2","gYH",4,0,null,120,[],121,[]],
+this.iH(new G.DA(this,y,z,b,0))}C.Nm.UZ(w,b,c)},"call$2","gYH",4,0,null,123,[],124,[]],
xe:[function(a,b,c){var z,y,x
if(b<0||b>this.h3.length)throw H.b(P.TE(b,0,this.h3.length))
z=this.h3
@@ -20438,7 +19840,7 @@
if(b===y){this.h(0,c)
return}C.Nm.sB(z,y+1)
y=z.length
-H.Og(z,b+1,y,this,b)
+H.qG(z,b+1,y,this,b)
y=z.length
this.nU(y-1,y)
y=this.xg
@@ -20446,27 +19848,27 @@
y=x==null?y!=null:x!==y}else y=!1
if(y)this.iH(G.XM(this,b,1,null))
if(b<0||b>=z.length)return H.e(z,b)
-z[b]=c},"call$2","gQG",4,0,null,47,[],129,[]],
+z[b]=c},"call$2","gQG",4,0,null,52,[],132,[]],
KI:[function(a,b){var z,y
z=this.h3
if(b<0||b>=z.length)return H.e(z,b)
y=z[b]
this.UZ(0,b,b+1)
-return y},"call$1","gNM",2,0,null,47,[]],
+return y},"call$1","gNM",2,0,null,52,[]],
iH:[function(a){var z,y
z=this.xg
if(z!=null){y=z.iE
z=y==null?z!=null:y!==z}else z=!1
if(!z)return
if(this.b3==null){this.b3=[]
-P.rb(this.gL6())}this.b3.push(a)},"call$1","gSi",2,0,null,22,[]],
+P.rb(this.gL6())}this.b3.push(a)},"call$1","gSi",2,0,null,27,[]],
nU:[function(a,b){var z,y
this.ct(this,C.Wn,a,b)
z=a===0
y=J.x(b)
this.ct(this,C.ai,z,y.n(b,0))
-this.ct(this,C.nZ,!z,!y.n(b,0))},"call$2","gdX",4,0,null,233,[],234,[]],
-cv:[function(){var z,y,x
+this.ct(this,C.nZ,!z,!y.n(b,0))},"call$2","gNQ",4,0,null,229,[],230,[]],
+oC:[function(){var z,y,x
z=this.b3
if(z==null)return!1
y=G.u2(this,z)
@@ -20477,15 +19879,15 @@
if(x){x=H.VM(new P.Yp(y),[G.DA])
if(z.Gv>=4)H.vh(z.q7())
z.Iv(x)
-return!0}return!1},"call$0","gL6",0,0,380],
+return!0}return!1},"call$0","gL6",0,0,390],
$iswn:true,
static:{uX:function(a,b){var z=H.VM([],[b])
return H.VM(new Q.wn(null,null,z,null,null),[b])}}},
-Ay:{
+er:{
"^":"ar+Pi;",
$isd3:true},
Bj:{
-"^":"Tp:113;a",
+"^":"Tp:115;a",
call$0:[function(){this.a.xg=null},"call$0",null,0,0,null,"call"],
$isEH:true}}],["observe.src.observable_map","package:observe/src/observable_map.dart",,V,{
"^":"",
@@ -20497,20 +19899,20 @@
return"#<MapChangeRecord "+z+" "+H.d(this.G3)+" from: "+H.d(this.jL)+" to: "+H.d(this.zZ)+">"},"call$0","gXo",0,0,null],
$isHA:true},
qC:{
-"^":"Pi;Zp,AP,fn",
+"^":"Pi;Zp,AP,Lk",
gvc:[function(a){var z=this.Zp
-return z.gvc(z)},null,null,1,0,function(){return H.IG(function(a,b){return{func:"NE",ret:[P.cX,a]}},this.$receiver,"qC")},"keys",355],
+return z.gvc(z)},null,null,1,0,function(){return H.IG(function(a,b){return{func:"dt",ret:[P.QV,a]}},this.$receiver,"qC")},"keys",358],
gUQ:[function(a){var z=this.Zp
-return z.gUQ(z)},null,null,1,0,function(){return H.IG(function(a,b){return{func:"wa",ret:[P.cX,b]}},this.$receiver,"qC")},"values",355],
+return z.gUQ(z)},null,null,1,0,function(){return H.IG(function(a,b){return{func:"wa",ret:[P.QV,b]}},this.$receiver,"qC")},"values",358],
gB:[function(a){var z=this.Zp
-return z.gB(z)},null,null,1,0,371,"length",355],
+return z.gB(z)},null,null,1,0,512,"length",358],
gl0:[function(a){var z=this.Zp
-return z.gB(z)===0},null,null,1,0,380,"isEmpty",355],
+return z.gB(z)===0},null,null,1,0,390,"isEmpty",358],
gor:[function(a){var z=this.Zp
-return z.gB(z)!==0},null,null,1,0,380,"isNotEmpty",355],
-di:[function(a){return this.Zp.di(a)},"call$1","gmc",2,0,572,23,[],"containsValue",355],
-x4:[function(a){return this.Zp.x4(a)},"call$1","gV9",2,0,572,42,[],"containsKey",355],
-t:[function(a,b){return this.Zp.t(0,b)},"call$1","gIA",2,0,function(){return H.IG(function(a,b){return{func:"JB",ret:b,args:[P.a]}},this.$receiver,"qC")},42,[],"[]",355],
+return z.gB(z)!==0},null,null,1,0,390,"isNotEmpty",358],
+di:[function(a){return this.Zp.di(a)},"call$1","gmc",2,0,546,28,[],"containsValue",358],
+x4:[function(a){return this.Zp.x4(a)},"call$1","gV9",2,0,546,47,[],"containsKey",358],
+t:[function(a,b){return this.Zp.t(0,b)},"call$1","gIA",2,0,function(){return H.IG(function(a,b){return{func:"JB",ret:b,args:[P.a]}},this.$receiver,"qC")},47,[],"[]",358],
u:[function(a,b,c){var z,y,x,w,v
z=this.Zp
y=z.gB(z)
@@ -20521,8 +19923,8 @@
w=v==null?w!=null:v!==w}else w=!1
if(w){z=z.gB(z)
if(y!==z){F.Wi(this,C.Wn,y,z)
-this.nq(this,H.VM(new V.HA(b,null,c,!0,!1),[null,null]))}else if(!J.de(x,c))this.nq(this,H.VM(new V.HA(b,x,c,!1,!1),[null,null]))}},"call$2","gj3",4,0,function(){return H.IG(function(a,b){return{func:"fK",void:true,args:[a,b]}},this.$receiver,"qC")},42,[],23,[],"[]=",355],
-FV:[function(a,b){J.kH(b,new V.zT(this))},"call$1","gDY",2,0,null,104,[]],
+this.nq(this,H.VM(new V.HA(b,null,c,!0,!1),[null,null]))}else if(!J.de(x,c))this.nq(this,H.VM(new V.HA(b,x,c,!1,!1),[null,null]))}},"call$2","gj3",4,0,function(){return H.IG(function(a,b){return{func:"LF",void:true,args:[a,b]}},this.$receiver,"qC")},47,[],28,[],"[]=",358],
+FV:[function(a,b){J.kH(b,new V.zT(this))},"call$1","gDY",2,0,null,109,[]],
Rz:[function(a,b){var z,y,x,w,v
z=this.Zp
y=z.gB(z)
@@ -20531,7 +19933,7 @@
if(w!=null){v=w.iE
w=v==null?w!=null:v!==w}else w=!1
if(w&&y!==z.gB(z)){this.nq(this,H.VM(new V.HA(b,x,null,!1,!0),[null,null]))
-F.Wi(this,C.Wn,y,z.gB(z))}return x},"call$1","gRI",2,0,null,42,[]],
+F.Wi(this,C.Wn,y,z.gB(z))}return x},"call$1","guH",2,0,null,47,[]],
V1:[function(a){var z,y,x,w
z=this.Zp
y=z.gB(z)
@@ -20539,9 +19941,10 @@
if(x!=null){w=x.iE
x=w==null?x!=null:w!==x}else x=!1
if(x&&y>0){z.aN(0,new V.Lo(this))
-F.Wi(this,C.Wn,y,0)}z.V1(0)},"call$0","gyP",0,0,null],
-aN:[function(a,b){return this.Zp.aN(0,b)},"call$1","gjw",2,0,null,115,[]],
+F.Wi(this,C.Wn,y,0)}z.V1(0)},"call$0","gRa",0,0,null],
+aN:[function(a,b){return this.Zp.aN(0,b)},"call$1","gjw",2,0,null,117,[]],
bu:[function(a){return P.vW(this)},"call$0","gXo",0,0,null],
+$isqC:true,
$isZ0:true,
static:{WF:function(a,b,c){var z=V.Bq(a,b,c)
z.FV(0,a)
@@ -20552,20 +19955,20 @@
return y}}},
zT:{
"^":"Tp;a",
-call$2:[function(a,b){this.a.u(0,a,b)},"call$2",null,4,0,null,42,[],23,[],"call"],
+call$2:[function(a,b){this.a.u(0,a,b)},"call$2",null,4,0,null,47,[],28,[],"call"],
$isEH:true,
-$signature:function(){return H.IG(function(a,b){return{func:"vPt",args:[a,b]}},this.a,"qC")}},
+$signature:function(){return H.IG(function(a,b){return{func:"Bi",args:[a,b]}},this.a,"qC")}},
Lo:{
-"^":"Tp:346;a",
+"^":"Tp:348;a",
call$2:[function(a,b){var z=this.a
-z.nq(z,H.VM(new V.HA(a,b,null,!1,!0),[null,null]))},"call$2",null,4,0,null,42,[],23,[],"call"],
+z.nq(z,H.VM(new V.HA(a,b,null,!1,!0),[null,null]))},"call$2",null,4,0,null,47,[],28,[],"call"],
$isEH:true}}],["observe.src.path_observer","package:observe/src/path_observer.dart",,L,{
"^":"",
Wa:[function(a,b){var z=J.x(a)
if(typeof a==="object"&&a!==null&&!!z.$isqI)return J.de(a.oc,b)
if(typeof a==="object"&&a!==null&&!!z.$isHA){z=J.RE(b)
if(typeof b==="object"&&b!==null&&!!z.$iswv)b=z.gfN(b)
-return J.de(a.G3,b)}return!1},"call$2","mD",4,0,null,22,[],42,[]],
+return J.de(a.G3,b)}return!1},"call$2","mD",4,0,null,27,[],47,[]],
yf:[function(a,b){var z,y,x,w,v
if(a==null)return
x=b
@@ -20581,7 +19984,7 @@
w=J.x(x)
if(typeof x==="object"&&x!==null&&!!w.$ismp){if(!L.M6(y,C.OV))throw v}else throw v}}}x=$.aT()
if(x.Im(C.VZ))x.x9("can't get "+H.d(b)+" in "+H.d(a))
-return},"call$2","MT",4,0,null,6,[],66,[]],
+return},"call$2","MT",4,0,null,6,[],71,[]],
h6:[function(a,b,c){var z,y,x,w,v
if(a==null)return!1
x=b
@@ -20598,14 +20001,14 @@
w=J.x(x)
if(typeof x==="object"&&x!==null&&!!w.$ismp){if(!L.M6(y,C.OV))throw v}else throw v}}}x=$.aT()
if(x.Im(C.VZ))x.x9("can't set "+H.d(b)+" in "+H.d(a))
-return!1},"call$3","nV",6,0,null,6,[],66,[],23,[]],
+return!1},"call$3","nV",6,0,null,6,[],71,[],28,[]],
TH:[function(a,b){var z
for(;!J.de(a,$.aA());){z=a.gYK().nb
if(z.x4(b))return!0
if(z.x4(C.OV))return!0
a=L.pY(a)}return!1},"call$2","fY",4,0,null,11,[],12,[]],
dR:[function(a,b){var z,y,x,w
-z=new H.GD(H.le(H.d(b.gfN(b))+"="))
+z=new H.GD(H.u1(H.d(b.gfN(b))+"="))
for(;!J.de(a,$.aA());){y=a.gYK().nb
x=y.t(0,b)
w=J.x(x)
@@ -20617,20 +20020,20 @@
for(;!J.de(a,$.aA());){z=a.gYK().nb.t(0,b)
y=J.x(z)
if(typeof z==="object"&&z!==null&&!!y.$isRS&&z.guU())return!0
-a=L.pY(a)}return!1},"call$2","Cp",4,0,null,11,[],12,[]],
+a=L.pY(a)}return!1},"call$2","Wt",4,0,null,11,[],12,[]],
pY:[function(a){var z,y
try{z=a.gAY()
return z}catch(y){H.Ru(y)
return $.aA()}},"call$1","WV",2,0,null,11,[]],
-rd:[function(a){a=J.JA(a,$.c3(),"")
+cB:[function(a){a=J.JA(a,$.c3(),"")
if(a==="")return!0
if(0>=a.length)return H.e(a,0)
if(a[0]===".")return!1
-return $.tN().zD(a)},"call$1","KL",2,0,null,86,[]],
+return $.tN().zD(a)},"call$1","wf",2,0,null,91,[]],
WR:{
-"^":"Pi;ay,YB,BK,kN,cs,cT,AP,fn",
+"^":"Pi;ay,YB,BK,kN,cs,cT,AP,Lk",
E4:function(a){return this.cT.call$1(a)},
-gWA:function(){var z=this.kN
+gWA:function(a){var z=this.kN
if(0>=z.length)return H.e(z,0)
return z[0]},
gP:[function(a){var z,y
@@ -20639,7 +20042,7 @@
if(z!=null){y=z.iE
z=y==null?z!=null:y!==z}else z=!1
if(!z)this.ov()
-return C.Nm.grZ(this.kN)},null,null,1,0,113,"value",355],
+return C.Nm.grZ(this.kN)},null,null,1,0,115,"value",358],
r6:function(a,b){return this.gP(this).call$1(b)},
sP:[function(a,b){var z,y,x,w
z=this.BK
@@ -20656,16 +20059,16 @@
if(w>=z.length)return H.e(z,w)
if(L.h6(x,z[w],b)){z=this.kN
if(y>=z.length)return H.e(z,y)
-z[y]=b}},null,null,3,0,504,234,[],"value",355],
+z[y]=b}},null,null,3,0,471,230,[],"value",358],
k0:[function(a){O.Pi.prototype.k0.call(this,this)
this.ov()
-this.XI()},"call$0","gqw",0,0,112],
+this.XI()},"call$0","gqw",0,0,114],
ni:[function(a){var z,y
for(z=0;y=this.cs,z<y.length;++z){y=y[z]
if(y!=null){y.ed()
y=this.cs
if(z>=y.length)return H.e(y,z)
-y[z]=null}}O.Pi.prototype.ni.call(this,this)},"call$0","gl1",0,0,112],
+y[z]=null}}O.Pi.prototype.ni.call(this,this)},"call$0","gl1",0,0,114],
Zy:[function(a){var z,y,x,w,v,u
if(a==null)a=this.BK.length
z=this.BK
@@ -20681,7 +20084,7 @@
if(w===y&&x)u=this.E4(u)
v=this.kN;++w
if(w>=v.length)return H.e(v,w)
-v[w]=u}},function(){return this.Zy(null)},"ov","call$1$end",null,"gFD",0,3,null,77,121,[]],
+v[w]=u}},function(){return this.Zy(null)},"ov","call$1$end",null,"gFD",0,3,null,82,124,[]],
hd:[function(a){var z,y,x,w,v,u,t,s,r
for(z=this.BK,y=z.length-1,x=this.cT!=null,w=a,v=null,u=null;w<=y;w=s){t=this.kN
s=w+1
@@ -20697,9 +20100,9 @@
return}t=this.kN
if(s>=t.length)return H.e(t,s)
t[s]=u}this.ij(a)
-if(this.gUV(this)&&!J.de(v,u)){z=new T.qI(this,C.ls,v,u)
+if(this.gnz(this)&&!J.de(v,u)){z=new T.qI(this,C.ls,v,u)
z.$builtinTypeInfo=[null]
-this.nq(this,z)}},"call$1$start","gHi",0,3,null,335,120,[]],
+this.nq(this,z)}},"call$1$start","gHi",0,3,null,332,123,[]],
Rl:[function(a,b){var z,y
if(b==null)b=this.BK.length
if(typeof b!=="number")return H.s(b)
@@ -20708,7 +20111,7 @@
if(z>=y.length)return H.e(y,z)
y=y[z]
if(y!=null)y.ed()
-this.Kh(z)}},function(){return this.Rl(0,null)},"XI",function(a){return this.Rl(a,null)},"ij","call$2",null,null,"gmi",0,4,null,335,77,120,[],121,[]],
+this.Kh(z)}},function(){return this.Rl(0,null)},"XI",function(a){return this.Rl(a,null)},"ij","call$2",null,null,"gmi",0,4,null,332,82,123,[],124,[]],
Kh:[function(a){var z,y,x,w,v
z=this.kN
if(a>=z.length)return H.e(z,a)
@@ -20732,12 +20135,12 @@
w.o7=P.VH(P.AY(),z)
w.Bd=z.Al(P.v3())
if(a>=v.length)return H.e(v,a)
-v[a]=w}}},"call$1","gCf",2,0,null,441,[]],
+v[a]=w}}},"call$1","gzm",2,0,null,409,[]],
d4:function(a,b,c){var z,y,x,w
if(this.YB)for(z=J.rr(b).split("."),z=H.VM(new H.a7(z,z.length,0,null),[H.Kp(z,0)]),y=this.BK;z.G();){x=z.lo
if(J.de(x,""))continue
w=H.BU(x,10,new L.qL())
-y.push(w!=null?w:new H.GD(H.le(x)))}z=this.BK
+y.push(w!=null?w:new H.GD(H.u1(x)))}z=this.BK
this.kN=H.VM(Array(z.length+1),[P.a])
if(z.length===0&&c!=null)a=c.call$1(a)
y=this.kN
@@ -20745,27 +20148,27 @@
y[0]=a
this.cs=H.VM(Array(z.length),[P.MO])},
$isWR:true,
-static:{ao:function(a,b,c){var z=new L.WR(b,L.rd(b),H.VM([],[P.a]),null,null,c,null,null)
+static:{ao:function(a,b,c){var z=new L.WR(b,L.cB(b),H.VM([],[P.a]),null,null,c,null,null)
z.d4(a,b,c)
return z}}},
qL:{
-"^":"Tp:107;",
-call$1:[function(a){return},"call$1",null,2,0,null,108,[],"call"],
+"^":"Tp:112;",
+call$1:[function(a){return},"call$1",null,2,0,null,113,[],"call"],
$isEH:true},
Px:{
-"^":"Tp:573;a,b,c",
+"^":"Tp:547;a,b,c",
call$1:[function(a){var z,y
for(z=J.GP(a),y=this.c;z.G();)if(z.gl().ck(y)){this.a.hd(this.b)
-return}},"call$1",null,2,0,null,256,[],"call"],
+return}},"call$1",null,2,0,null,252,[],"call"],
$isEH:true},
C4:{
-"^":"Tp:574;d,e,f",
+"^":"Tp:548;d,e,f",
call$1:[function(a){var z,y
for(z=J.GP(a),y=this.f;z.G();)if(L.Wa(z.gl(),y)){this.d.hd(this.e)
-return}},"call$1",null,2,0,null,256,[],"call"],
+return}},"call$1",null,2,0,null,252,[],"call"],
$isEH:true},
-YJ:{
-"^":"Tp:113;",
+Md:{
+"^":"Tp:115;",
call$0:[function(){return new H.VR(H.v4("^(?:(?:[$_a-zA-Z]+[$_a-zA-Z0-9]*|(?:[0-9]|[1-9]+[0-9]+)))(?:\\.(?:[$_a-zA-Z]+[$_a-zA-Z0-9]*|(?:[0-9]|[1-9]+[0-9]+)))*$",!1,!0,!1),null,null)},"call$0",null,0,0,null,"call"],
$isEH:true}}],["observe.src.to_observable","package:observe/src/to_observable.dart",,R,{
"^":"",
@@ -20774,18 +20177,18 @@
if(typeof a==="object"&&a!==null&&!!z.$isd3)return a
if(typeof a==="object"&&a!==null&&!!z.$isZ0){y=V.Bq(a,null,null)
z.aN(a,new R.km(y))
-return y}if(typeof a==="object"&&a!==null&&(a.constructor===Array||!!z.$iscX)){z=z.ez(a,R.np())
+return y}if(typeof a==="object"&&a!==null&&(a.constructor===Array||!!z.$isQV)){z=z.ez(a,R.np())
x=Q.uX(null,null)
x.FV(0,z)
-return x}return a},"call$1","np",2,0,107,23,[]],
+return x}return a},"call$1","np",2,0,112,28,[]],
km:{
-"^":"Tp:346;a",
-call$2:[function(a,b){this.a.u(0,R.Jk(a),R.Jk(b))},"call$2",null,4,0,null,402,[],277,[],"call"],
+"^":"Tp:348;a",
+call$2:[function(a,b){this.a.u(0,R.Jk(a),R.Jk(b))},"call$2",null,4,0,null,442,[],272,[],"call"],
$isEH:true}}],["polymer","package:polymer/polymer.dart",,A,{
"^":"",
JX:[function(){var z,y
z=document.createElement("style",null)
-z.textContent=".polymer-veiled { opacity: 0; } \n.polymer-unveil{ -webkit-transition: opacity 0.3s; transition: opacity 0.3s; }\n"
+J.c9(z,".polymer-veiled { opacity: 0; } \n.polymer-unveil{ -webkit-transition: opacity 0.3s; transition: opacity 0.3s; }\n")
y=document.querySelector("head")
y.insertBefore(z,y.firstChild)
A.B2()
@@ -20797,28 +20200,28 @@
z=$.xY().Rz(0,a)
if(z!=null)for(y=J.GP(z);y.G();)J.Or(y.gl())},"call$1","Km",2,0,null,12,[]],
oF:[function(a,b){var z,y,x,w,v,u
-if(J.de(a,$.Tf()))return b
+if(J.de(a,$.H8()))return b
b=A.oF(a.gAY(),b)
for(z=a.gYK().nb,z=z.gUQ(z),z=H.VM(new H.MH(null,J.GP(z.l6),z.T6),[H.Kp(z,0),H.Kp(z,1)]);z.G();){y=z.lo
if(y.gFo()||y.gq4())continue
-x=J.x(y)
-if(!(typeof y==="object"&&y!==null&&!!x.$isRY&&!y.gV5()))w=typeof y==="object"&&y!==null&&!!x.$isRS&&y.glT()
+x=J.RE(y)
+if(!(typeof y==="object"&&y!==null&&!!x.$isRY&&!x.gV5(y)))w=typeof y==="object"&&y!==null&&!!x.$isRS&&y.glT()
else w=!0
if(w)for(w=J.GP(y.gc9());w.G();){v=w.lo.gAx()
u=J.x(v)
if(typeof v==="object"&&v!==null&&!!u.$isyL){if(typeof y!=="object"||y===null||!x.$isRS||A.bc(a,y)){if(b==null)b=H.B7([],P.L5(null,null,null,null,null))
-b.u(0,y.gIf(),y)}break}}}return b},"call$2","Cd",4,0,null,258,[],259,[]],
+b.u(0,y.gIf(),y)}break}}}return b},"call$2","Cd",4,0,null,254,[],255,[]],
Oy:[function(a,b){var z,y
do{z=a.gYK().nb.t(0,b)
y=J.x(z)
if(typeof z==="object"&&z!==null&&!!y.$isRS&&z.glT()&&A.bc(a,z)||typeof z==="object"&&z!==null&&!!y.$isRY)return z
-a=a.gAY()}while(!J.de(a,$.Tf()))
-return},"call$2","il",4,0,null,258,[],66,[]],
+a=a.gAY()}while(!J.de(a,$.H8()))
+return},"call$2","il",4,0,null,254,[],71,[]],
bc:[function(a,b){var z,y
-z=H.le(H.d(b.gIf().fN)+"=")
+z=H.u1(H.d(b.gIf().fN)+"=")
y=a.gYK().nb.t(0,new H.GD(z))
z=J.x(y)
-return typeof y==="object"&&y!==null&&!!z.$isRS&&y.ghB()},"call$2","i8",4,0,null,258,[],260,[]],
+return typeof y==="object"&&y!==null&&!!z.$isRS&&y.ghB()},"call$2","i8",4,0,null,254,[],256,[]],
YG:[function(a,b,c){var z,y,x
z=$.cM()
if(z==null||a==null)return
@@ -20827,7 +20230,7 @@
if(y==null)return
x=J.UQ(y,"ShadowCSS")
if(x==null)return
-x.V7("shimStyling",[a,b,c])},"call$3","OA",6,0,null,261,[],12,[],262,[]],
+x.V7("shimStyling",[a,b,c])},"call$3","OA",6,0,null,257,[],12,[],258,[]],
Hl:[function(a){var z,y,x,w,v,u,t
if(a==null)return""
w=J.RE(a)
@@ -20847,28 +20250,28 @@
if(typeof w==="object"&&w!==null&&!!t.$isNh){y=w
x=new H.XO(u,null)
$.vM().J4("failed to get stylesheet text href=\""+H.d(z)+"\" error: "+H.d(y)+", trace: "+H.d(x))
-return""}else throw u}},"call$1","NI",2,0,null,263,[]],
+return""}else throw u}},"call$1","NI",2,0,null,259,[]],
Ad:[function(a,b){var z
if(b==null)b=C.hG
$.Ej().u(0,a,b)
z=$.p2().Rz(0,a)
-if(z!=null)J.Or(z)},"call$2","ZK",2,2,null,77,12,[],11,[]],
-zM:[function(a){A.Vx(a,new A.Mq())},"call$1","jU",2,0,null,264,[]],
-Vx:[function(a,b){var z
+if(z!=null)J.Or(z)},"call$2","ZK",2,2,null,82,12,[],11,[]],
+xv:[function(a){A.om(a,new A.Mq())},"call$1","J2",2,0,null,260,[]],
+om:[function(a,b){var z
if(a==null)return
b.call$1(a)
-for(z=a.firstChild;z!=null;z=z.nextSibling)A.Vx(z,b)},"call$2","Dv",4,0,null,264,[],156,[]],
+for(z=a.firstChild;z!=null;z=z.nextSibling)A.om(z,b)},"call$2","Wm",4,0,null,260,[],155,[]],
lJ:[function(a,b,c,d){if(!J.co(b,"on-"))return d.call$3(a,b,c)
-return new A.L6(a,b)},"call$4","y4",8,0,null,265,[],12,[],264,[],266,[]],
-Hr:[function(a){var z
+return new A.L6(a,b)},"call$4","y4",8,0,null,261,[],12,[],260,[],262,[]],
+z9:[function(a){var z
for(;z=J.RE(a),z.gKV(a)!=null;)a=z.gKV(a)
-return $.od().t(0,a)},"call$1","Fd",2,0,null,264,[]],
+return $.od().t(0,a)},"call$1","DI",2,0,null,260,[]],
HR:[function(a,b,c){var z,y,x
z=H.vn(a)
y=A.Rk(H.jO(J.bB(z.Ax).LU),b)
if(y!=null){x=y.gMP()
x=x.ev(x,new A.uJ())
-C.Nm.sB(c,x.gB(x))}return z.CI(b,c).Ax},"call$3","xi",6,0,null,41,[],267,[],268,[]],
+C.Nm.sB(c,x.gB(x))}return z.CI(b,c).Ax},"call$3","xi",6,0,null,46,[],263,[],17,[]],
Rk:[function(a,b){var z,y
do{z=a.gYK().nb.t(0,b)
y=J.x(z)
@@ -20877,10 +20280,10 @@
ZI:[function(a,b){var z,y
if(a==null)return
z=document.createElement("style",null)
-z.textContent=a.textContent
+J.c9(z,J.nJ(a))
y=a.getAttribute("element")
if(y!=null)z.setAttribute("element",y)
-b.appendChild(z)},"call$2","tO",4,0,null,269,[],270,[]],
+b.appendChild(z)},"call$2","tO",4,0,null,264,[],265,[]],
pX:[function(){var z=window
C.ol.hr(z)
C.ol.oB(z,W.aF(new A.hm()))},"call$0","ji",0,0,null],
@@ -20889,7 +20292,7 @@
y=typeof b==="object"&&b!==null&&!!z.$isRY?z.gt5(b):H.Go(b,"$isRS").gdw()
if(J.de(y.gUx(),C.PU)||J.de(y.gUx(),C.nN))if(a!=null){x=A.h5(a)
if(x!=null)return P.re(x)
-return H.jO(J.bB(H.vn(a).Ax).LU)}return y},"call$2","mN",4,0,null,23,[],66,[]],
+return H.jO(J.bB(H.vn(a).Ax).LU)}return y},"call$2","mN",4,0,null,28,[],71,[]],
h5:[function(a){var z
if(a==null)return C.Qf
if(typeof a==="number"&&Math.floor(a)===a)return C.yw
@@ -20898,7 +20301,7 @@
if(typeof a==="string")return C.Db
z=J.x(a)
if(typeof a==="object"&&a!==null&&!!z.$isiP)return C.Yc
-return},"call$1","v9",2,0,null,23,[]],
+return},"call$1","v9",2,0,null,28,[]],
Ok:[function(){if($.uP){var z=$.X3.iT(O.Ht())
z.Gr(A.PB())
return z}A.ei()
@@ -20907,7 +20310,7 @@
W.wi(window,z,"polymer-element",C.Bm,null)
A.Jv()
A.JX()
-$.ax().ml(new A.Bl())},"call$0","PB",0,0,112],
+$.ax().ml(new A.rD())},"call$0","PB",0,0,114],
Jv:[function(){var z,y,x,w,v,u,t
for(w=$.nT(),w=H.VM(new H.a7(w,w.length,0,null),[H.Kp(w,0)]);w.G();){z=w.lo
try{A.pw(z)}catch(v){u=H.Ru(v)
@@ -20919,7 +20322,7 @@
t=y
if(t==null)H.vh(new P.AT("Error must not be null"))
if(u.Gv!==0)H.vh(new P.lj("Future already completed"))
-u.CG(t,x)}}},"call$0","xm",0,0,null],
+u.CG(t,x)}}},"call$0","vH",0,0,null],
GA:[function(a,b,c,d){var z,y,x,w,v,u
if(c==null)c=P.Ls(null,null,null,W.QF)
if(d==null){d=[]
@@ -20937,67 +20340,66 @@
x=!0}else{z="warning: more than one Dart script tag in "+H.d(b)+". Dartium currently only allows a single Dart script tag per document."
v=$.oK
if(v==null)H.qw(z)
-else v.call$1(z)}}return d},"call$4","fE",4,4,null,77,77,271,[],272,[],273,[],274,[]],
+else v.call$1(z)}}return d},"call$4","fE",4,4,null,82,82,266,[],267,[],268,[],269,[]],
pw:[function(a){var z,y,x,w,v,u,t,s,r,q,p,o,n,m,l,k,j,i
z=$.RQ()
z.toString
-y=$.qG()
-x=P.r6(y.ej(a))
-w=x.Fi
-if(!J.de(w,"")){v=x.ku
-u=x.gJf(x)
-t=x.gtp(x)
-s=z.SK(x.r0)
-r=x.tP}else{if(!J.de(x.gJf(x),"")){v=x.ku
-u=x.gJf(x)
-t=x.gtp(x)
-s=z.SK(x.r0)
-r=x.tP}else{if(J.de(x.r0,"")){s=z.r0
-r=x.tP
-r=!J.de(r,"")?r:z.tP}else{q=J.co(x.r0,"/")
-p=x.r0
-s=q?z.SK(p):z.SK(z.Ky(z.r0,p))
-r=x.tP}v=z.ku
-u=z.gJf(z)
-t=z.gtp(z)}w=z.Fi}o=P.R6(x.Ka,u,s,null,t,r,null,w,v)
-x=$.UG().nb
-n=x.t(0,o)
-m=o.r0
-if(J.de(o.Fi,z.Fi))if(o.gWu()===z.gWu()){z=J.rY(m)
-if(z.Tc(m,".dart"))z=z.tg(m,"/packages/")===!0||z.nC(m,"packages/")
-else z=!1}else z=!1
+y=P.hK(a)
+x=y.Fi
+if(x!==""){w=y.ku
+v=y.gJf(y)
+u=y.gtp(y)
+t=z.SK(y.r0)
+s=y.tP}else{if(y.gJf(y)!==""){w=y.ku
+v=y.gJf(y)
+u=y.gtp(y)
+t=z.SK(y.r0)
+s=y.tP}else{r=y.r0
+if(r===""){t=z.r0
+s=y.tP
+s=s!==""?s:z.tP}else{r=J.co(r,"/")
+q=y.r0
+t=r?z.SK(q):z.SK(z.Ky(z.r0,q))
+s=y.tP}w=z.ku
+v=z.gJf(z)
+u=z.gtp(z)}x=z.Fi}p=P.R6(y.Ka,v,t,null,u,s,null,x,w)
+y=$.UG().nb
+o=y.t(0,p)
+n=p.r0
+if(p.Fi===z.Fi)if(p.gWu()===z.gWu())if(J.rY(n).Tc(n,".dart"))z=C.xB.tg(n,"/packages/")||C.xB.nC(n,"packages/")
else z=!1
-if(z){z=o.r0
-q=J.U6(z)
-l=x.t(0,P.r6(y.ej("package:"+q.yn(z,J.WB(q.cn(z,"packages/"),9)))))
-if(l!=null)n=l}if(n==null){$.M7().To(H.d(o)+" library not found")
-return}z=n.gYK().nb
+else z=!1
+else z=!1
+if(z){z=p.r0
+m=y.t(0,P.hK("package:"+C.xB.yn(z,J.U6(z).cn(z,"packages/")+9)))
+if(m!=null)o=m}if(o==null){$.M7().To(H.d(p)+" library not found")
+return}z=o.gYK().nb
z=z.gUQ(z)
y=new A.Fn()
-x=new H.U5(z,y)
-x.$builtinTypeInfo=[H.ip(z,"mW",0)]
+r=new H.U5(z,y)
+r.$builtinTypeInfo=[H.ip(z,"mW",0)]
z=z.gA(z)
y=new H.SO(z,y)
-y.$builtinTypeInfo=[H.Kp(x,0)]
-for(;y.G();)A.ZB(n,z.gl())
-z=n.gYK().nb
+y.$builtinTypeInfo=[H.Kp(r,0)]
+for(;y.G();)A.ZB(o,z.gl())
+z=o.gYK().nb
z=z.gUQ(z)
y=new A.e3()
-x=new H.U5(z,y)
-x.$builtinTypeInfo=[H.ip(z,"mW",0)]
+r=new H.U5(z,y)
+r.$builtinTypeInfo=[H.ip(z,"mW",0)]
z=z.gA(z)
y=new H.SO(z,y)
-y.$builtinTypeInfo=[H.Kp(x,0)]
-for(;y.G();){k=z.gl()
-for(x=J.GP(k.gc9());x.G();){j=x.lo.gAx()
-q=J.x(j)
-if(typeof j==="object"&&j!==null&&!!q.$isV3){q=j.ns
-p=k.gYj()
-$.Ej().u(0,q,p)
+y.$builtinTypeInfo=[H.Kp(r,0)]
+for(;y.G();){l=z.gl()
+for(r=J.GP(l.gc9());r.G();){k=r.lo.gAx()
+q=J.x(k)
+if(typeof k==="object"&&k!==null&&!!q.$isV3){q=k.ns
+j=l.gYj()
+$.Ej().u(0,q,j)
i=$.p2().Rz(0,q)
-if(i!=null)J.Or(i)}}}},"call$1","Xz",2,0,null,275,[]],
+if(i!=null)J.Or(i)}}}},"call$1","Xz",2,0,null,270,[]],
ZB:[function(a,b){var z,y,x
-for(z=J.GP(b.gc9());y=!1,z.G();)if(z.lo.gAx()===C.za){y=!0
+for(z=J.GP(b.gc9());y=!1,z.G();)if(z.lo.gAx()===C.xd){y=!0
break}if(!y)return
if(!b.gFo()){x="warning: methods marked with @initMethod should be static, "+H.d(b.gIf())+" is not."
z=$.oK
@@ -21009,20 +20411,20 @@
z=$.oK
if(z==null)H.qw(x)
else z.call$1(x)
-return}a.CI(b.gIf(),C.xD)},"call$2","K0n",4,0,null,93,[],224,[]],
+return}a.CI(b.gIf(),C.xD)},"call$2","Ii",4,0,null,98,[],220,[]],
Zj:{
-"^":"Tp:107;",
-call$1:[function(a){A.pX()},"call$1",null,2,0,null,108,[],"call"],
+"^":"Tp:112;",
+call$1:[function(a){A.pX()},"call$1",null,2,0,null,113,[],"call"],
$isEH:true},
XP:{
-"^":"qE;zx,kw,aa,RT,Q7=,NF=,hf=,xX=,cI,lD,Gd=,Ei",
+"^":"qE;zx,kw,aa,RT,Q7=,NF=,hf=,xX=,cI,lD,Gd=,Ve",
gt5:function(a){return a.zx},
gP1:function(a){return a.aa},
goc:function(a){return a.RT},
gZf:function(a){var z,y,x
z=a.querySelector("template")
if(z!=null){y=J.x(z)
-x=J.nX(typeof z==="object"&&z!==null&&!!y.$ishs?z:M.Ky(z))
+x=J.nX(typeof z==="object"&&z!==null&&!!y.$isTU?z:M.Ky(z))
y=x}else y=null
return y},
yx:[function(a){var z,y,x,w,v
@@ -21058,9 +20460,9 @@
y0:[function(a,b){if($.Ej().t(0,b)!=null)return!1
$.p2().u(0,b,a)
if(a.hasAttribute("noscript")===!0)A.Ad(b,null)
-return!0},"call$1","gLD",2,0,null,12,[]],
+return!0},"call$1","gXX",2,0,null,12,[]],
PM:[function(a,b){if(b!=null&&J.UU(b,"-")>=0)if(!$.cd().x4(b)){J.bi($.xY().to(b,new A.q6()),a)
-return!0}return!1},"call$1","gmL",2,0,null,262,[]],
+return!0}return!1},"call$1","gmL",2,0,null,258,[]],
Ba:[function(a,b){var z,y,x,w
for(z=a,y=null;z!=null;){x=J.RE(z)
y=x.gQg(z).MW.getAttribute("extends")
@@ -21079,23 +20481,23 @@
if(w!==""){y=a.Q7
y=y!=null&&y.x4(w)}else y=!1
if(y)continue
-v=new H.GD(H.le(w))
+v=new H.GD(H.u1(w))
u=A.Oy(b,v)
if(u==null){window
y=$.pl()
-t="property for attribute "+w+" of polymer-element name="+a.RT+" not found."
+t="property for attribute "+w+" of polymer-element name="+H.d(a.RT)+" not found."
y.toString
if(typeof console!="undefined")console.warn(t)
continue}y=a.Q7
if(y==null){y=H.B7([],P.L5(null,null,null,null,null))
-a.Q7=y}y.u(0,v,u)}}},"call$2","gvQ",4,0,null,258,[],575,[]],
+a.Q7=y}y.u(0,v,u)}}},"call$2","gvQ",4,0,null,254,[],549,[]],
Vk:[function(a){var z,y
z=P.L5(null,null,null,J.O,P.a)
a.xX=z
y=a.aa
if(y!=null)z.FV(0,J.Ng(y))
new W.i7(a).aN(0,new A.CK(a))},"call$0","gYi",0,0,null],
-W3:[function(a,b){new W.i7(a).aN(0,new A.LJ(b))},"call$1","gSX",2,0,null,576,[]],
+W3:[function(a,b){new W.i7(a).aN(0,new A.LJ(b))},"call$1","gSX",2,0,null,550,[]],
Mi:[function(a){var z=this.Hs(a,"[rel=stylesheet]")
a.cI=z
for(z=H.VM(new H.a7(z,z.length,0,null),[H.Kp(z,0)]);z.G();)J.QC(z.lo)},"call$0","gax",0,0,null],
@@ -21113,15 +20515,15 @@
t=w.vM+u
w.vM=t
w.vM=t+"\n"}if(w.vM.length>0){z=document.createElement("style",null)
-z.textContent=H.d(w)
+J.c9(z,H.d(w))
v=J.RE(x)
-v.mK(x,z,v.gq6(x))}}},"call$0","gysu",0,0,null],
+v.mK(x,z,v.gq6(x))}}},"call$0","gnt",0,0,null],
oP:[function(a,b,c){var z,y,x
z=W.vD(a.querySelectorAll(b),null)
y=z.br(z)
x=this.gZf(a)
if(x!=null)C.Nm.FV(y,J.pe(x,b))
-return y},function(a,b){return this.oP(a,b,null)},"Hs","call$2",null,"gKQ",2,2,null,77,510,[],577,[]],
+return y},function(a,b){return this.oP(a,b,null)},"Hs","call$2",null,"gKQ",2,2,null,82,477,[],551,[]],
kO:[function(a,b){var z,y,x,w,v,u
z=P.p9("")
y=new A.Oc("[polymer-scope="+b+"]")
@@ -21132,16 +20534,15 @@
z.vM=u+"\n\n"}for(x=a.lD,x.toString,y=H.VM(new H.U5(x,y),[null]),y=H.VM(new H.SO(J.GP(y.l6),y.T6),[H.Kp(y,0)]),x=y.OI;y.G();){w=x.gl().ghg()
w=z.vM+w
z.vM=w
-z.vM=w+"\n\n"}return z.vM},"call$1","gvf",2,0,null,578,[]],
+z.vM=w+"\n\n"}return z.vM},"call$1","gvf",2,0,null,552,[]],
J3:[function(a,b,c){var z
if(b==="")return
z=document.createElement("style",null)
-z.textContent=b
-z.toString
-z.setAttribute("element",a.RT+"-"+c)
-return z},"call$2","gNG",4,0,null,579,[],578,[]],
+J.c9(z,b)
+z.setAttribute("element",H.d(a.RT)+"-"+c)
+return z},"call$2","gNG",4,0,null,553,[],552,[]],
q1:[function(a,b){var z,y,x,w
-if(J.de(b,$.Tf()))return
+if(J.de(b,$.H8()))return
this.q1(a,b.gAY())
for(z=b.gYK().nb,z=z.gUQ(z),z=H.VM(new H.MH(null,J.GP(z.l6),z.T6),[H.Kp(z,0),H.Kp(z,1)]);z.G();){y=z.lo
x=J.x(y)
@@ -21150,10 +20551,10 @@
x=J.rY(w)
if(x.Tc(w,"Changed")&&!x.n(w,"attributeChanged")){if(a.hf==null)a.hf=P.L5(null,null,null,null,null)
w=x.Nj(w,0,J.xH(x.gB(w),7))
-a.hf.u(0,new H.GD(H.le(w)),y.gIf())}}},"call$1","gHv",2,0,null,258,[]],
+a.hf.u(0,new H.GD(H.u1(w)),y.gIf())}}},"call$1","gHv",2,0,null,254,[]],
qC:[function(a,b){var z=P.L5(null,null,null,J.O,null)
b.aN(0,new A.MX(z))
-return z},"call$1","gir",2,0,null,580,[]],
+return z},"call$1","gir",2,0,null,554,[]],
du:function(a){a.RT=a.getAttribute("name")
this.yx(a)},
$isXP:true,
@@ -21162,48 +20563,48 @@
C.xk.du(a)
return a}}},
q6:{
-"^":"Tp:113;",
+"^":"Tp:115;",
call$0:[function(){return[]},"call$0",null,0,0,null,"call"],
$isEH:true},
CK:{
-"^":"Tp:346;a",
-call$2:[function(a,b){if(C.kr.x4(a)!==!0&&!J.co(a,"on-"))this.a.xX.u(0,a,b)},"call$2",null,4,0,null,12,[],23,[],"call"],
+"^":"Tp:348;a",
+call$2:[function(a,b){if(C.kr.x4(a)!==!0&&!J.co(a,"on-"))this.a.xX.u(0,a,b)},"call$2",null,4,0,null,12,[],28,[],"call"],
$isEH:true},
LJ:{
-"^":"Tp:346;a",
+"^":"Tp:348;a",
call$2:[function(a,b){var z,y,x
z=J.rY(a)
if(z.nC(a,"on-")){y=J.U6(b).u8(b,"{{")
x=C.xB.cn(b,"}}")
-if(y>=0&&x>=0)this.a.u(0,z.yn(a,3),C.xB.bS(C.xB.Nj(b,y+2,x)))}},"call$2",null,4,0,null,12,[],23,[],"call"],
+if(y>=0&&x>=0)this.a.u(0,z.yn(a,3),C.xB.bS(C.xB.Nj(b,y+2,x)))}},"call$2",null,4,0,null,12,[],28,[],"call"],
$isEH:true},
ZG:{
-"^":"Tp:107;",
-call$1:[function(a){return J.Vs(a).MW.hasAttribute("polymer-scope")!==!0},"call$1",null,2,0,null,86,[],"call"],
+"^":"Tp:112;",
+call$1:[function(a){return J.Vs(a).MW.hasAttribute("polymer-scope")!==!0},"call$1",null,2,0,null,91,[],"call"],
$isEH:true},
Oc:{
-"^":"Tp:107;a",
-call$1:[function(a){return J.RF(a,this.a)},"call$1",null,2,0,null,86,[],"call"],
+"^":"Tp:112;a",
+call$1:[function(a){return J.RF(a,this.a)},"call$1",null,2,0,null,91,[],"call"],
$isEH:true},
MX:{
-"^":"Tp:346;a",
-call$2:[function(a,b){this.a.u(0,J.Mz(J.GL(a)),b)},"call$2",null,4,0,null,12,[],23,[],"call"],
+"^":"Tp:348;a",
+call$2:[function(a,b){this.a.u(0,J.Mz(J.GL(a)),b)},"call$2",null,4,0,null,12,[],28,[],"call"],
$isEH:true},
-w10:{
-"^":"Tp:113;",
+w12:{
+"^":"Tp:115;",
call$0:[function(){var z=P.L5(null,null,null,J.O,J.O)
C.FS.aN(0,new A.r3y(z))
return z},"call$0",null,0,0,null,"call"],
$isEH:true},
r3y:{
-"^":"Tp:346;a",
-call$2:[function(a,b){this.a.u(0,b,a)},"call$2",null,4,0,null,581,[],582,[],"call"],
+"^":"Tp:348;a",
+call$2:[function(a,b){this.a.u(0,b,a)},"call$2",null,4,0,null,555,[],556,[],"call"],
$isEH:true},
yL:{
"^":"nd;",
$isyL:true},
zs:{
-"^":["a;KM:X0=-412",function(){return[C.nJ]}],
+"^":["a;KM:X0=-375",function(){return[C.Nw]}],
gpQ:function(a){return!1},
Pa:[function(a){if(W.Pv(this.gM0(a).defaultView)!=null||$.Bh>0)this.Ec(a)},"call$0","gu1",0,0,null],
Ec:[function(a){var z,y
@@ -21216,12 +20617,12 @@
this.Uc(a)
$.Bh=$.Bh+1
this.z2(a,a.dZ)
-$.Bh=$.Bh-1},"call$0","gUr",0,0,null],
+$.Bh=$.Bh-1},"call$0","gLi",0,0,null],
i4:[function(a){if(a.dZ==null)this.Ec(a)
this.BT(a,!0)},"call$0","gQd",0,0,null],
xo:[function(a){this.x3(a)},"call$0","gbt",0,0,null],
z2:[function(a,b){if(b!=null){this.z2(a,J.lB(b))
-this.d0(a,b)}},"call$1","gET",2,0,null,583,[]],
+this.d0(a,b)}},"call$1","gET",2,0,null,557,[]],
d0:[function(a,b){var z,y,x,w,v
z=J.RE(b)
y=z.Ja(b,"template")
@@ -21232,32 +20633,32 @@
if(typeof x!=="object"||x===null||!w.$isI0)return
v=z.gQg(b).MW.getAttribute("name")
if(v==null)return
-a.B7.u(0,v,x)},"call$1","gcY",2,0,null,584,[]],
+a.B7.u(0,v,x)},"call$1","gEB",2,0,null,558,[]],
Se:[function(a,b){var z,y
if(b==null)return
z=J.x(b)
-z=typeof b==="object"&&b!==null&&!!z.$ishs?b:M.Ky(b)
+z=typeof b==="object"&&b!==null&&!!z.$isTU?b:M.Ky(b)
y=z.ZK(a,a.SO)
this.jx(a,y)
this.lj(a,a)
-return y},"call$1","gAt",2,0,null,261,[]],
+return y},"call$1","gAt",2,0,null,257,[]],
Tp:[function(a,b){var z,y
if(b==null)return
-this.gKE(a)
+this.gIW(a)
z=this.er(a)
$.od().u(0,z,a)
z.applyAuthorStyles=this.gpQ(a)
z.resetStyleInheritance=!1
y=J.x(b)
-y=typeof b==="object"&&b!==null&&!!y.$ishs?b:M.Ky(b)
+y=typeof b==="object"&&b!==null&&!!y.$isTU?b:M.Ky(b)
z.appendChild(y.ZK(a,a.SO))
this.lj(a,z)
-return z},"call$1","gQb",2,0,null,261,[]],
+return z},"call$1","gQb",2,0,null,257,[]],
lj:[function(a,b){var z,y,x,w
for(z=J.pe(b,"[id]"),z=z.gA(z),y=a.X0,x=J.w1(y);z.G();){w=z.lo
-x.u(y,J.F8(w),w)}},"call$1","gb7",2,0,null,585,[]],
+x.u(y,J.F8(w),w)}},"call$1","gb7",2,0,null,559,[]],
aC:[function(a,b,c,d){var z=J.x(b)
-if(!z.n(b,"class")&&!z.n(b,"style"))this.D3(a,b,d)},"call$3","gxR",6,0,null,12,[],233,[],234,[]],
+if(!z.n(b,"class")&&!z.n(b,"style"))this.D3(a,b,d)},"call$3","gxR",6,0,null,12,[],229,[],230,[]],
Z2:[function(a){J.Ng(a.dZ).aN(0,new A.WC(a))},"call$0","gGN",0,0,null],
fk:[function(a){if(J.ak(a.dZ)==null)return
this.gQg(a).aN(0,this.ghW(a))},"call$0","goQ",0,0,null],
@@ -21268,14 +20669,14 @@
y=H.vn(a)
x=y.rN(z.gIf()).gAx()
w=Z.Zh(c,x,A.al(x,z))
-if(w==null?x!=null:w!==x)y.PU(z.gIf(),w)},"call$2","ghW",4,0,586,12,[],23,[]],
+if(w==null?x!=null:w!==x)y.PU(z.gIf(),w)},"call$2","ghW",4,0,560,12,[],28,[]],
B2:[function(a,b){var z=J.ak(a.dZ)
if(z==null)return
return z.t(0,b)},"call$1","gHf",2,0,null,12,[]],
TW:[function(a,b){if(b==null)return
if(typeof b==="boolean")return b?"":null
else if(typeof b==="string"||typeof b==="number"&&Math.floor(b)===b||typeof b==="number")return H.d(b)
-return},"call$1","gt4",2,0,null,23,[]],
+return},"call$1","gt4",2,0,null,28,[]],
Id:[function(a,b){var z,y
z=H.vn(a).rN(b).gAx()
y=this.TW(a,z)
@@ -21288,7 +20689,7 @@
else{J.MV(M.Ky(a),b)
y=z.gIf()
x=$.ZH()
-if(x.Im(C.R5))x.J4("["+H.d(c)+"]: bindProperties: ["+H.d(d)+"] to ["+this.gqn(a)+"].["+H.d(y)+"]")
+if(x.Im(C.R5))x.J4("["+H.d(c)+"]: bindProperties: ["+H.d(d)+"] to ["+H.d(this.gqn(a))+"].["+H.d(y)+"]")
w=L.ao(c,d,null)
if(w.gP(w)==null)w.sP(0,H.vn(a).rN(y).gAx())
x=H.vn(a)
@@ -21299,12 +20700,12 @@
t.bw(a,y,c,d)
this.Id(a,z.gIf())
J.kW(J.QE(M.Ky(a)),b,t)
-return t}},"call$3","gxfG",4,2,null,77,12,[],285,[],265,[]],
+return t}},"call$3","gxfG",4,2,null,82,12,[],284,[],261,[]],
gCd:function(a){return J.QE(M.Ky(a))},
Ih:[function(a,b){return J.MV(M.Ky(a),b)},"call$1","gC8",2,0,null,12,[]],
x3:[function(a){var z,y
if(a.Uk===!0)return
-$.P5().J4("["+this.gqn(a)+"] asyncUnbindAll")
+$.P5().J4("["+H.d(this.gqn(a))+"] asyncUnbindAll")
z=a.oq
y=this.gJg(a)
if(z!=null)z.TP(0)
@@ -21318,16 +20719,16 @@
if(z!=null){z.ed()
a.Wz=null}this.C0(a)
J.AA(M.Ky(a))
-y=this.gKE(a)
-for(;y!=null;){A.zM(y)
-y=y.olderShadowRoot}a.Uk=!0},"call$0","gJg",0,0,112],
+y=this.gIW(a)
+for(;y!=null;){A.xv(y)
+y=y.olderShadowRoot}a.Uk=!0},"call$0","gJg",0,0,114],
BT:[function(a,b){var z
-if(a.Uk===!0){$.P5().j2("["+this.gqn(a)+"] already unbound, cannot cancel unbindAll")
-return}$.P5().J4("["+this.gqn(a)+"] cancelUnbindAll")
+if(a.Uk===!0){$.P5().j2("["+H.d(this.gqn(a))+"] already unbound, cannot cancel unbindAll")
+return}$.P5().J4("["+H.d(this.gqn(a))+"] cancelUnbindAll")
z=a.oq
if(z!=null){z.TP(0)
a.oq=null}if(b===!0)return
-A.Vx(this.gKE(a),new A.TV())},function(a){return this.BT(a,null)},"oW","call$1$preventCascade",null,"gF7",0,3,null,77,587,[]],
+A.om(this.gIW(a),new A.TV())},function(a){return this.BT(a,null)},"oW","call$1$preventCascade",null,"gF7",0,3,null,82,561,[]],
Xl:[function(a){var z,y,x,w,v,u
z=J.xR(a.dZ)
y=J.YP(a.dZ)
@@ -21341,7 +20742,7 @@
for(w=J.GP(b);w.G();){v=w.gl()
u=J.x(v)
if(typeof v!=="object"||v===null||!u.$isqI)continue
-J.iG(x.to(v.oc,new A.Oa(v)),v.zZ)}x.aN(0,new A.n1(a,b,z,y))},"call$1","gnu",2,0,588,589,[]],
+J.iG(x.to(v.oc,new A.Oa(v)),v.zZ)}x.aN(0,new A.n1(a,b,z,y))},"call$1","gnu",2,0,562,563,[]],
rJ:[function(a,b,c,d){var z,y,x,w,v
z=J.xR(a.dZ)
if(z==null)return
@@ -21349,10 +20750,10 @@
if(y==null)return
x=J.x(d)
if(typeof d==="object"&&d!==null&&!!x.$iswn){x=$.a3()
-if(x.Im(C.R5))x.J4("["+this.gqn(a)+"] observeArrayValue: unregister observer "+H.d(b))
+if(x.Im(C.R5))x.J4("["+H.d(this.gqn(a))+"] observeArrayValue: unregister observer "+H.d(b))
this.l5(a,H.d(J.GL(b))+"__array")}x=J.x(c)
if(typeof c==="object"&&c!==null&&!!x.$iswn){x=$.a3()
-if(x.Im(C.R5))x.J4("["+this.gqn(a)+"] observeArrayValue: register observer "+H.d(b))
+if(x.Im(C.R5))x.J4("["+H.d(this.gqn(a))+"] observeArrayValue: register observer "+H.d(b))
w=c.gvp().w4(!1)
x=w.Lj
w.dB=x.cR(new A.xf(a,d,y))
@@ -21361,7 +20762,7 @@
x=H.d(J.GL(b))+"__array"
v=a.Sa
if(v==null){v=P.L5(null,null,null,J.O,P.MO)
-a.Sa=v}v.u(0,x,w)}},"call$3","gDW",6,0,null,12,[],23,[],248,[]],
+a.Sa=v}v.u(0,x,w)}},"call$3","gDW",6,0,null,12,[],28,[],244,[]],
l5:[function(a,b){var z=a.Sa.Rz(0,b)
if(z==null)return!1
z.ed()
@@ -21372,11 +20773,11 @@
a.Sa.V1(0)
a.Sa=null},"call$0","gNX",0,0,null],
Uc:[function(a){var z,y
-z=J.wX(a.dZ)
+z=J.yxg(a.dZ)
if(z.gl0(z))return
y=$.SS()
-if(y.Im(C.R5))y.J4("["+this.gqn(a)+"] addHostListeners: "+H.d(z))
-this.UH(a,a,z.gvc(z),this.gD4(a))},"call$0","ghu",0,0,null],
+if(y.Im(C.R5))y.J4("["+H.d(this.gqn(a))+"] addHostListeners: "+H.d(z))
+this.UH(a,a,z.gvc(z),this.gD4(a))},"call$0","gxD",0,0,null],
UH:[function(a,b,c,d){var z,y,x,w,v,u,t
for(z=c.Fb,z=H.VM(new P.N6(z,z.zN,null,null),[H.Kp(c,0)]),z.zq=z.Fb.H9,y=J.RE(b);z.G();){x=z.fD
w=y.gI(b).t(0,x)
@@ -21385,61 +20786,61 @@
t=new W.Ov(0,w.uv,v,W.aF(d),u)
t.$builtinTypeInfo=[H.Kp(w,0)]
w=t.u7
-if(w!=null&&t.VP<=0)J.cZ(t.uv,v,w,u)}},"call$3","gPm",6,0,null,264,[],590,[],297,[]],
+if(w!=null&&t.VP<=0)J.cZ(t.uv,v,w,u)}},"call$3","gPm",6,0,null,260,[],564,[],295,[]],
iw:[function(a,b){var z,y,x,w,v,u,t
z=J.RE(b)
if(z.gXt(b)!==!0)return
y=$.SS()
x=y.Im(C.R5)
-if(x)y.J4(">>> ["+this.gqn(a)+"]: hostEventListener("+H.d(z.gt5(b))+")")
-w=J.wX(a.dZ)
+if(x)y.J4(">>> ["+H.d(this.gqn(a))+"]: hostEventListener("+H.d(z.gt5(b))+")")
+w=J.yxg(a.dZ)
v=z.gt5(b)
u=J.UQ($.QX(),v)
t=w.t(0,u!=null?u:v)
-if(t!=null){if(x)y.J4("["+this.gqn(a)+"] found host handler name ["+t+"]")
-this.ea(a,a,t,[b,typeof b==="object"&&b!==null&&!!z.$isHe?z.gey(b):null,a])}if(x)y.J4("<<< ["+this.gqn(a)+"]: hostEventListener("+H.d(z.gt5(b))+")")},"call$1","gD4",2,0,591,384,[]],
+if(t!=null){if(x)y.J4("["+H.d(this.gqn(a))+"] found host handler name ["+H.d(t)+"]")
+this.ea(a,a,t,[b,typeof b==="object"&&b!==null&&!!z.$isHe?z.gey(b):null,a])}if(x)y.J4("<<< ["+H.d(this.gqn(a))+"]: hostEventListener("+H.d(z.gt5(b))+")")},"call$1","gD4",2,0,565,368,[]],
ea:[function(a,b,c,d){var z,y,x
z=$.SS()
y=z.Im(C.R5)
-if(y)z.J4(">>> ["+this.gqn(a)+"]: dispatch "+H.d(c))
+if(y)z.J4(">>> ["+H.d(this.gqn(a))+"]: dispatch "+H.d(c))
x=J.x(c)
if(typeof c==="object"&&c!==null&&!!x.$isEH)H.Ek(c,d,P.Te(null))
-else if(typeof c==="string")A.HR(b,new H.GD(H.le(c)),d)
+else if(typeof c==="string")A.HR(b,new H.GD(H.u1(c)),d)
else z.j2("invalid callback")
-if(y)z.To("<<< ["+this.gqn(a)+"]: dispatch "+H.d(c))},"call$3","gtW",6,0,null,6,[],592,[],268,[]],
+if(y)z.To("<<< ["+H.d(this.gqn(a))+"]: dispatch "+H.d(c))},"call$3","gEi",6,0,null,6,[],566,[],17,[]],
$iszs:true,
-$ishs:true,
+$isTU:true,
$isd3:true,
$iscv:true,
$isGv:true,
$isD0:true,
$isKV:true},
WC:{
-"^":"Tp:346;a",
+"^":"Tp:348;a",
call$2:[function(a,b){var z=J.Vs(this.a)
if(z.x4(a)!==!0)z.u(0,a,new A.Xi(b).call$0())
-z.t(0,a)},"call$2",null,4,0,null,12,[],23,[],"call"],
+z.t(0,a)},"call$2",null,4,0,null,12,[],28,[],"call"],
$isEH:true},
Xi:{
-"^":"Tp:113;b",
+"^":"Tp:115;b",
call$0:[function(){return this.b},"call$0",null,0,0,null,"call"],
$isEH:true},
TV:{
-"^":"Tp:107;",
+"^":"Tp:112;",
call$1:[function(a){var z=J.RE(a)
-if(typeof a==="object"&&a!==null&&!!z.$iszs)z.oW(a)},"call$1",null,2,0,null,292,[],"call"],
+if(typeof a==="object"&&a!==null&&!!z.$iszs)z.oW(a)},"call$1",null,2,0,null,198,[],"call"],
$isEH:true},
Mq:{
-"^":"Tp:107;",
+"^":"Tp:112;",
call$1:[function(a){var z=J.x(a)
-return J.AA(typeof a==="object"&&a!==null&&!!z.$ishs?a:M.Ky(a))},"call$1",null,2,0,null,264,[],"call"],
+return J.AA(typeof a==="object"&&a!==null&&!!z.$isTU?a:M.Ky(a))},"call$1",null,2,0,null,260,[],"call"],
$isEH:true},
Oa:{
-"^":"Tp:113;a",
+"^":"Tp:115;a",
call$0:[function(){return new A.bS(this.a.jL,null)},"call$0",null,0,0,null,"call"],
$isEH:true},
n1:{
-"^":"Tp:346;b,c,d,e",
+"^":"Tp:348;b,c,d,e",
call$2:[function(a,b){var z,y,x
z=this.e
if(z!=null&&z.x4(a))J.Jr(this.b,a)
@@ -21449,29 +20850,29 @@
if(y!=null){z=this.b
x=J.RE(b)
J.Ut(z,a,x.gzZ(b),x.gjL(b))
-A.HR(z,y,[x.gjL(b),x.gzZ(b),this.c])}},"call$2",null,4,0,null,12,[],593,[],"call"],
+A.HR(z,y,[x.gjL(b),x.gzZ(b),this.c])}},"call$2",null,4,0,null,12,[],567,[],"call"],
$isEH:true},
xf:{
-"^":"Tp:107;a,b,c",
-call$1:[function(a){A.HR(this.a,this.c,[this.b])},"call$1",null,2,0,null,589,[],"call"],
+"^":"Tp:112;a,b,c",
+call$1:[function(a){A.HR(this.a,this.c,[this.b])},"call$1",null,2,0,null,563,[],"call"],
$isEH:true},
L6:{
-"^":"Tp:346;a,b",
+"^":"Tp:348;a,b",
call$2:[function(a,b){var z,y,x
z=$.SS()
if(z.Im(C.R5))z.J4("event: ["+H.d(b)+"]."+H.d(this.b)+" => ["+H.d(a)+"]."+this.a+"())")
-y=J.D8(this.b,3)
+y=J.ZZ(this.b,3)
x=C.FS.t(0,y)
if(x!=null)y=x
z=J.f5(b).t(0,y)
H.VM(new W.Ov(0,z.uv,z.Ph,W.aF(new A.Rs(this.a,a,b)),z.Sg),[H.Kp(z,0)]).Zz()
-return H.VM(new A.xh(null,null,null),[null])},"call$2",null,4,0,null,285,[],264,[],"call"],
+return H.VM(new A.xh(null,null,null),[null])},"call$2",null,4,0,null,284,[],260,[],"call"],
$isEH:true},
Rs:{
-"^":"Tp:107;c,d,e",
+"^":"Tp:112;c,d,e",
call$1:[function(a){var z,y,x,w,v,u
z=this.e
-y=A.Hr(z)
+y=A.z9(z)
x=J.RE(y)
if(typeof y!=="object"||y===null||!x.$iszs)return
w=this.c
@@ -21480,25 +20881,25 @@
u=L.ao(v,C.xB.yn(w,1),null)
w=u.gP(u)}else v=y
u=J.RE(a)
-x.ea(y,v,w,[a,typeof a==="object"&&a!==null&&!!u.$isHe?u.gey(a):null,z])},"call$1",null,2,0,null,384,[],"call"],
+x.ea(y,v,w,[a,typeof a==="object"&&a!==null&&!!u.$isHe?u.gey(a):null,z])},"call$1",null,2,0,null,368,[],"call"],
$isEH:true},
uJ:{
-"^":"Tp:107;",
-call$1:[function(a){return!a.gQ2()},"call$1",null,2,0,null,594,[],"call"],
+"^":"Tp:112;",
+call$1:[function(a){return!a.gQ2()},"call$1",null,2,0,null,568,[],"call"],
$isEH:true},
hm:{
-"^":"Tp:107;",
+"^":"Tp:112;",
call$1:[function(a){var z,y,x
z=W.vD(document.querySelectorAll(".polymer-veiled"),null)
for(y=z.gA(z);y.G();){x=J.pP(y.lo)
x.h(0,"polymer-unveil")
x.Rz(x,"polymer-veiled")}if(z.gor(z)){y=C.hi.aM(window)
-y.gtH(y).ml(new A.Ji(z))}},"call$1",null,2,0,null,108,[],"call"],
+y.gtH(y).ml(new A.Ji(z))}},"call$1",null,2,0,null,113,[],"call"],
$isEH:true},
Ji:{
-"^":"Tp:107;a",
+"^":"Tp:112;a",
call$1:[function(a){var z
-for(z=this.a,z=z.gA(z);z.G();)J.pP(z.lo).Rz(0,"polymer-unveil")},"call$1",null,2,0,null,108,[],"call"],
+for(z=this.a,z=z.gA(z);z.G();)J.pP(z.lo).Rz(0,"polymer-unveil")},"call$1",null,2,0,null,113,[],"call"],
$isEH:true},
Bf:{
"^":"TR;I6,iU,Jq,dY,qP,ZY,xS,PB,eS,ay",
@@ -21506,17 +20907,17 @@
this.Jq.ed()
X.TR.prototype.cO.call(this,this)},"call$0","gJK",0,0,null],
EC:[function(a){this.dY=a
-this.I6.PU(this.iU,a)},"call$1","gH0",2,0,null,234,[]],
-ho:[function(a){var z,y,x,w,v
+this.I6.PU(this.iU,a)},"call$1","gH0",2,0,null,230,[]],
+aL4:[function(a){var z,y,x,w,v
for(z=J.GP(a),y=this.iU;z.G();){x=z.gl()
w=J.x(x)
if(typeof x==="object"&&x!==null&&!!w.$isqI&&J.de(x.oc,y)){v=this.I6.rN(y).gAx()
z=this.dY
if(z==null?v!=null:z!==v)J.ta(this.xS,v)
-return}}},"call$1","giz",2,0,595,256,[]],
+return}}},"call$1","giz",2,0,569,252,[]],
bw:function(a,b,c,d){this.Jq=J.xq(a).yI(this.giz())}},
ir:{
-"^":["GN;AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0-412",null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
+"^":["GN;AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0-375",null,null,null,null,null,null,null,null,null,function(){return[C.Nw]}],
G6:function(a){this.Pa(a)},
static:{oa:function(a){var z,y,x,w
z=$.Nd()
@@ -21530,17 +20931,17 @@
C.Iv.ZL(a)
C.Iv.G6(a)
return a}}},
-jpR:{
-"^":["qE+zs;KM:X0=-412",function(){return[C.nJ]}],
+Sa:{
+"^":["qE+zs;KM:X0=-375",function(){return[C.Nw]}],
$iszs:true,
-$ishs:true,
+$isTU:true,
$isd3:true,
$iscv:true,
$isGv:true,
$isD0:true,
$isKV:true},
GN:{
-"^":"jpR+Pi;",
+"^":"Sa+Pi;",
$isd3:true},
bS:{
"^":"a;jL>,zZ*",
@@ -21554,30 +20955,30 @@
if(z!=null){z.ed()
this.ih=null}},"call$0","gol",0,0,null],
tZ:[function(a){if(this.ih!=null){this.TP(0)
-this.Ws()}},"call$0","gv6",0,0,112]},
+this.Ws()}},"call$0","gv6",0,0,114]},
V3:{
"^":"a;ns",
$isV3:true},
-Bl:{
-"^":"Tp:107;",
+rD:{
+"^":"Tp:112;",
call$1:[function(a){var z=$.mC().MM
if(z.Gv!==0)H.vh(new P.lj("Future already completed"))
z.OH(null)
-return},"call$1",null,2,0,null,108,[],"call"],
+return},"call$1",null,2,0,null,113,[],"call"],
$isEH:true},
Fn:{
-"^":"Tp:107;",
+"^":"Tp:112;",
call$1:[function(a){var z=J.x(a)
-return typeof a==="object"&&a!==null&&!!z.$isRS},"call$1",null,2,0,null,596,[],"call"],
+return typeof a==="object"&&a!==null&&!!z.$isRS},"call$1",null,2,0,null,570,[],"call"],
$isEH:true},
e3:{
-"^":"Tp:107;",
+"^":"Tp:112;",
call$1:[function(a){var z=J.x(a)
-return typeof a==="object"&&a!==null&&!!z.$isMs},"call$1",null,2,0,null,596,[],"call"],
+return typeof a==="object"&&a!==null&&!!z.$isMs},"call$1",null,2,0,null,570,[],"call"],
$isEH:true},
pM:{
-"^":"Tp:107;",
-call$1:[function(a){return!a.gQ2()},"call$1",null,2,0,null,594,[],"call"],
+"^":"Tp:112;",
+call$1:[function(a){return!a.gQ2()},"call$1",null,2,0,null,568,[],"call"],
$isEH:true},
jh:{
"^":"a;"}}],["polymer.deserialize","package:polymer/deserialize.dart",,Z,{
@@ -21587,72 +20988,72 @@
if(z!=null)return z.call$2(a,b)
try{y=C.xr.kV(J.JA(a,"'","\""))
return y}catch(x){H.Ru(x)
-return a}},"call$3","jo",6,0,null,23,[],276,[],11,[]],
+return a}},"call$3","jo",6,0,null,28,[],271,[],11,[]],
W6:{
-"^":"Tp:113;",
+"^":"Tp:115;",
call$0:[function(){var z=P.L5(null,null,null,null,null)
z.u(0,C.AZ,new Z.Lf())
z.u(0,C.ok,new Z.fT())
z.u(0,C.N4,new Z.pp())
-z.u(0,C.Ts,new Z.nl())
+z.u(0,C.Kc,new Z.nl())
z.u(0,C.PC,new Z.ik())
z.u(0,C.md,new Z.LfS())
return z},"call$0",null,0,0,null,"call"],
$isEH:true},
Lf:{
-"^":"Tp:346;",
-call$2:[function(a,b){return a},"call$2",null,4,0,null,21,[],108,[],"call"],
+"^":"Tp:348;",
+call$2:[function(a,b){return a},"call$2",null,4,0,null,26,[],113,[],"call"],
$isEH:true},
fT:{
-"^":"Tp:346;",
-call$2:[function(a,b){return a},"call$2",null,4,0,null,21,[],108,[],"call"],
+"^":"Tp:348;",
+call$2:[function(a,b){return a},"call$2",null,4,0,null,26,[],113,[],"call"],
$isEH:true},
pp:{
-"^":"Tp:346;",
+"^":"Tp:348;",
call$2:[function(a,b){var z,y
try{z=P.Gl(a)
return z}catch(y){H.Ru(y)
-return b}},"call$2",null,4,0,null,21,[],597,[],"call"],
+return b}},"call$2",null,4,0,null,26,[],571,[],"call"],
$isEH:true},
nl:{
-"^":"Tp:346;",
-call$2:[function(a,b){return!J.de(a,"false")},"call$2",null,4,0,null,21,[],108,[],"call"],
+"^":"Tp:348;",
+call$2:[function(a,b){return!J.de(a,"false")},"call$2",null,4,0,null,26,[],113,[],"call"],
$isEH:true},
ik:{
-"^":"Tp:346;",
-call$2:[function(a,b){return H.BU(a,null,new Z.mf(b))},"call$2",null,4,0,null,21,[],597,[],"call"],
+"^":"Tp:348;",
+call$2:[function(a,b){return H.BU(a,null,new Z.mf(b))},"call$2",null,4,0,null,26,[],571,[],"call"],
$isEH:true},
mf:{
-"^":"Tp:107;a",
-call$1:[function(a){return this.a},"call$1",null,2,0,null,108,[],"call"],
+"^":"Tp:112;a",
+call$1:[function(a){return this.a},"call$1",null,2,0,null,113,[],"call"],
$isEH:true},
LfS:{
-"^":"Tp:346;",
-call$2:[function(a,b){return H.IH(a,new Z.HK(b))},"call$2",null,4,0,null,21,[],597,[],"call"],
+"^":"Tp:348;",
+call$2:[function(a,b){return H.IH(a,new Z.HK(b))},"call$2",null,4,0,null,26,[],571,[],"call"],
$isEH:true},
HK:{
-"^":"Tp:107;b",
-call$1:[function(a){return this.b},"call$1",null,2,0,null,108,[],"call"],
+"^":"Tp:112;b",
+call$1:[function(a){return this.b},"call$1",null,2,0,null,113,[],"call"],
$isEH:true}}],["polymer_expressions","package:polymer_expressions/polymer_expressions.dart",,T,{
"^":"",
ul:[function(a){var z=J.x(a)
if(typeof a==="object"&&a!==null&&!!z.$isZ0)z=J.vo(z.gvc(a),new T.o8(a)).zV(0," ")
-else z=typeof a==="object"&&a!==null&&(a.constructor===Array||!!z.$iscX)?z.zV(a," "):a
-return z},"call$1","qP",2,0,195,277,[]],
+else z=typeof a==="object"&&a!==null&&(a.constructor===Array||!!z.$isQV)?z.zV(a," "):a
+return z},"call$1","qP",2,0,194,272,[]],
PX:[function(a){var z=J.x(a)
if(typeof a==="object"&&a!==null&&!!z.$isZ0)z=J.C0(z.gvc(a),new T.ex(a)).zV(0,";")
-else z=typeof a==="object"&&a!==null&&(a.constructor===Array||!!z.$iscX)?z.zV(a,";"):a
-return z},"call$1","Fx",2,0,195,277,[]],
+else z=typeof a==="object"&&a!==null&&(a.constructor===Array||!!z.$isQV)?z.zV(a,";"):a
+return z},"call$1","Fx",2,0,194,272,[]],
o8:{
-"^":"Tp:107;a",
-call$1:[function(a){return J.de(this.a.t(0,a),!0)},"call$1",null,2,0,null,402,[],"call"],
+"^":"Tp:112;a",
+call$1:[function(a){return J.de(this.a.t(0,a),!0)},"call$1",null,2,0,null,442,[],"call"],
$isEH:true},
ex:{
-"^":"Tp:107;a",
-call$1:[function(a){return H.d(a)+": "+H.d(this.a.t(0,a))},"call$1",null,2,0,null,402,[],"call"],
+"^":"Tp:112;a",
+call$1:[function(a){return H.d(a)+": "+H.d(this.a.t(0,a))},"call$1",null,2,0,null,442,[],"call"],
$isEH:true},
e9:{
-"^":"T4;",
+"^":"ve;",
cl:[function(a,b,c){var z,y,x
if(a==null)return
z=new Y.hc(H.VM([],[Y.Pn]),P.p9(""),new P.WU(a,0,0,null),null)
@@ -21667,41 +21068,41 @@
if(z.n(b,"bind")||z.n(b,"repeat")){z=J.x(x)
z=typeof x==="object"&&x!==null&&!!z.$isEZ}else z=!1}else z=!1
if(z)return
-return new T.Xy(this,b,x)},"call$3","gca",6,0,598,265,[],12,[],264,[]],
-CE:[function(a){return new T.G0(this)},"call$1","gb4",2,0,null,261,[]]},
+return new T.Xy(this,b,x)},"call$3","gca",6,0,572,261,[],12,[],260,[]],
+CE:[function(a){return new T.uK(this)},"call$1","gb4",2,0,null,257,[]]},
Xy:{
-"^":"Tp:346;a,b,c",
+"^":"Tp:348;a,b,c",
call$2:[function(a,b){var z=J.x(a)
if(typeof a!=="object"||a===null||!z.$isz6){z=this.a.nF
a=new K.z6(null,a,V.WF(z==null?H.B7([],P.L5(null,null,null,null,null)):z,null,null),null)}z=J.x(b)
z=typeof b==="object"&&b!==null&&!!z.$iscv
if(z&&J.de(this.b,"class"))return T.FL(this.c,a,T.qP())
if(z&&J.de(this.b,"style"))return T.FL(this.c,a,T.Fx())
-return T.FL(this.c,a,null)},"call$2",null,4,0,null,285,[],264,[],"call"],
+return T.FL(this.c,a,null)},"call$2",null,4,0,null,284,[],260,[],"call"],
$isEH:true},
-G0:{
-"^":"Tp:107;a",
+uK:{
+"^":"Tp:112;a",
call$1:[function(a){var z=J.x(a)
if(typeof a==="object"&&a!==null&&!!z.$isz6)z=a
else{z=this.a.nF
-z=new K.z6(null,a,V.WF(z==null?H.B7([],P.L5(null,null,null,null,null)):z,null,null),null)}return z},"call$1",null,2,0,null,285,[],"call"],
+z=new K.z6(null,a,V.WF(z==null?H.B7([],P.L5(null,null,null,null,null)):z,null,null),null)}return z},"call$1",null,2,0,null,284,[],"call"],
$isEH:true},
mY:{
-"^":"Pi;a9,Cu,uI,Y7,AP,fn",
+"^":"Pi;a9,Cu,uI,Y7,AP,Lk",
u0:function(a){return this.uI.call$1(a)},
KX:[function(a){var z,y
z=this.Y7
y=J.x(a)
if(typeof a==="object"&&a!==null&&!!y.$isfk){y=J.C0(a.bm,new T.mB(this,a)).tt(0,!1)
this.Y7=y}else{y=this.uI==null?a:this.u0(a)
-this.Y7=y}F.Wi(this,C.ls,z,y)},"call$1","gUG",2,0,107,277,[]],
-gP:[function(a){return this.Y7},null,null,1,0,113,"value",355],
+this.Y7=y}F.Wi(this,C.ls,z,y)},"call$1","gUG",2,0,112,272,[]],
+gP:[function(a){return this.Y7},null,null,1,0,115,"value",358],
r6:function(a,b){return this.gP(this).call$1(b)},
sP:[function(a,b){var z,y,x,w
try{K.jX(this.Cu,b,this.a9)}catch(y){x=H.Ru(y)
w=J.x(x)
if(typeof x==="object"&&x!==null&&!!w.$isB0){z=x
-$.eH().j2("Error evaluating expression '"+H.d(this.Cu)+"': "+J.yj(z))}else throw y}},null,null,3,0,107,277,[],"value",355],
+$.eH().j2("Error evaluating expression '"+H.d(this.Cu)+"': "+J.yj(z))}else throw y}},null,null,3,0,112,272,[],"value",358],
yB:function(a,b,c){var z,y,x,w,v
y=this.Cu
y.gju().yI(this.gUG()).fm(0,new T.GX(this))
@@ -21715,18 +21116,18 @@
z.yB(a,b,c)
return z}}},
GX:{
-"^":"Tp:107;a",
-call$1:[function(a){$.eH().j2("Error evaluating expression '"+H.d(this.a.Cu)+"': "+H.d(J.yj(a)))},"call$1",null,2,0,null,18,[],"call"],
+"^":"Tp:112;a",
+call$1:[function(a){$.eH().j2("Error evaluating expression '"+H.d(this.a.Cu)+"': "+H.d(J.yj(a)))},"call$1",null,2,0,null,19,[],"call"],
$isEH:true},
mB:{
-"^":"Tp:107;a,b",
+"^":"Tp:112;a,b",
call$1:[function(a){var z=P.L5(null,null,null,null,null)
z.u(0,this.b.kF,a)
-return new K.z6(this.a.a9,null,V.WF(z,null,null),null)},"call$1",null,2,0,null,441,[],"call"],
+return new K.z6(this.a.a9,null,V.WF(z,null,null),null)},"call$1",null,2,0,null,409,[],"call"],
$isEH:true}}],["polymer_expressions.async","package:polymer_expressions/async.dart",,B,{
"^":"",
XF:{
-"^":"xh;vq,L1,AP,fn",
+"^":"xh;vq,L1,AP,Lk",
vb:function(a,b){this.vq.yI(new B.bX(b,this))},
$asxh:function(a){return[null]},
static:{z4:function(a,b){var z=H.VM(new B.XF(a,null,null,null),[b])
@@ -21735,13 +21136,13 @@
bX:{
"^":"Tp;a,b",
call$1:[function(a){var z=this.b
-z.L1=F.Wi(z,C.ls,z.L1,a)},"call$1",null,2,0,null,441,[],"call"],
+z.L1=F.Wi(z,C.ls,z.L1,a)},"call$1",null,2,0,null,409,[],"call"],
$isEH:true,
$signature:function(){return H.IG(function(a){return{func:"CJ",args:[a]}},this.b,"XF")}}}],["polymer_expressions.eval","package:polymer_expressions/eval.dart",,K,{
"^":"",
OH:[function(a,b){var z=J.UK(a,new K.G1(b,P.NZ(null,null)))
J.UK(z,new K.Ed(b))
-return z.gLv()},"call$2","ly",4,0,null,278,[],270,[]],
+return z.gLv()},"call$2","ly",4,0,null,273,[],265,[]],
jX:[function(a,b,c){var z,y,x,w,v,u,t,s,r,q,p
z={}
z.a=a
@@ -21771,83 +21172,83 @@
throw H.b(K.kG("filter must implement Transformer: "+H.d(r)))}p=K.OH(t,c)
if(p==null)throw H.b(K.kG("Can't assign to null: "+H.d(t)))
if(s)J.kW(p,u,b)
-else H.vn(p).PU(new H.GD(H.le(u)),b)},"call$3","wA",6,0,null,278,[],23,[],270,[]],
+else H.vn(p).PU(new H.GD(H.u1(u)),b)},"call$3","wA",6,0,null,273,[],28,[],265,[]],
ci:[function(a){var z=J.x(a)
if(typeof a==="object"&&a!==null&&!!z.$isqh)return B.z4(a,null)
-return a},"call$1","Af",2,0,null,277,[]],
-Uf:{
-"^":"Tp:346;",
-call$2:[function(a,b){return J.WB(a,b)},"call$2",null,4,0,null,128,[],188,[],"call"],
-$isEH:true},
+return a},"call$1","Af",2,0,null,272,[]],
Ra:{
-"^":"Tp:346;",
-call$2:[function(a,b){return J.xH(a,b)},"call$2",null,4,0,null,128,[],188,[],"call"],
+"^":"Tp:348;",
+call$2:[function(a,b){return J.WB(a,b)},"call$2",null,4,0,null,131,[],187,[],"call"],
$isEH:true},
wJY:{
-"^":"Tp:346;",
-call$2:[function(a,b){return J.p0(a,b)},"call$2",null,4,0,null,128,[],188,[],"call"],
+"^":"Tp:348;",
+call$2:[function(a,b){return J.xH(a,b)},"call$2",null,4,0,null,131,[],187,[],"call"],
$isEH:true},
zOQ:{
-"^":"Tp:346;",
-call$2:[function(a,b){return J.FW(a,b)},"call$2",null,4,0,null,128,[],188,[],"call"],
+"^":"Tp:348;",
+call$2:[function(a,b){return J.vX(a,b)},"call$2",null,4,0,null,131,[],187,[],"call"],
$isEH:true},
W6o:{
-"^":"Tp:346;",
-call$2:[function(a,b){return J.de(a,b)},"call$2",null,4,0,null,128,[],188,[],"call"],
+"^":"Tp:348;",
+call$2:[function(a,b){return J.FW(a,b)},"call$2",null,4,0,null,131,[],187,[],"call"],
$isEH:true},
MdQ:{
-"^":"Tp:346;",
-call$2:[function(a,b){return!J.de(a,b)},"call$2",null,4,0,null,128,[],188,[],"call"],
+"^":"Tp:348;",
+call$2:[function(a,b){return J.de(a,b)},"call$2",null,4,0,null,131,[],187,[],"call"],
$isEH:true},
YJG:{
-"^":"Tp:346;",
-call$2:[function(a,b){return J.z8(a,b)},"call$2",null,4,0,null,128,[],188,[],"call"],
+"^":"Tp:348;",
+call$2:[function(a,b){return!J.de(a,b)},"call$2",null,4,0,null,131,[],187,[],"call"],
$isEH:true},
DOe:{
-"^":"Tp:346;",
-call$2:[function(a,b){return J.J5(a,b)},"call$2",null,4,0,null,128,[],188,[],"call"],
+"^":"Tp:348;",
+call$2:[function(a,b){return J.z8(a,b)},"call$2",null,4,0,null,131,[],187,[],"call"],
$isEH:true},
lPa:{
-"^":"Tp:346;",
-call$2:[function(a,b){return J.u6(a,b)},"call$2",null,4,0,null,128,[],188,[],"call"],
+"^":"Tp:348;",
+call$2:[function(a,b){return J.J5(a,b)},"call$2",null,4,0,null,131,[],187,[],"call"],
$isEH:true},
Ufa:{
-"^":"Tp:346;",
-call$2:[function(a,b){return J.Hb(a,b)},"call$2",null,4,0,null,128,[],188,[],"call"],
+"^":"Tp:348;",
+call$2:[function(a,b){return J.u6(a,b)},"call$2",null,4,0,null,131,[],187,[],"call"],
$isEH:true},
Raa:{
-"^":"Tp:346;",
-call$2:[function(a,b){return a===!0||b===!0},"call$2",null,4,0,null,128,[],188,[],"call"],
+"^":"Tp:348;",
+call$2:[function(a,b){return J.Bl(a,b)},"call$2",null,4,0,null,131,[],187,[],"call"],
$isEH:true},
w0:{
-"^":"Tp:346;",
-call$2:[function(a,b){return a===!0&&b===!0},"call$2",null,4,0,null,128,[],188,[],"call"],
+"^":"Tp:348;",
+call$2:[function(a,b){return a===!0||b===!0},"call$2",null,4,0,null,131,[],187,[],"call"],
$isEH:true},
w4:{
-"^":"Tp:346;",
-call$2:[function(a,b){var z=H.uK(P.a)
-z=H.KT(z,[z]).BD(b)
-if(z)return b.call$1(a)
-throw H.b(K.kG("Filters must be a one-argument function."))},"call$2",null,4,0,null,128,[],115,[],"call"],
+"^":"Tp:348;",
+call$2:[function(a,b){return a===!0&&b===!0},"call$2",null,4,0,null,131,[],187,[],"call"],
$isEH:true},
w5:{
-"^":"Tp:107;",
-call$1:[function(a){return a},"call$1",null,2,0,null,128,[],"call"],
+"^":"Tp:348;",
+call$2:[function(a,b){var z=H.Og(P.a)
+z=H.KT(z,[z]).BD(b)
+if(z)return b.call$1(a)
+throw H.b(K.kG("Filters must be a one-argument function."))},"call$2",null,4,0,null,131,[],117,[],"call"],
$isEH:true},
w7:{
-"^":"Tp:107;",
-call$1:[function(a){return J.Z7(a)},"call$1",null,2,0,null,128,[],"call"],
+"^":"Tp:112;",
+call$1:[function(a){return a},"call$1",null,2,0,null,131,[],"call"],
$isEH:true},
-w9:{
-"^":"Tp:107;",
-call$1:[function(a){return a!==!0},"call$1",null,2,0,null,128,[],"call"],
+w10:{
+"^":"Tp:112;",
+call$1:[function(a){return J.Z7(a)},"call$1",null,2,0,null,131,[],"call"],
+$isEH:true},
+w11:{
+"^":"Tp:112;",
+call$1:[function(a){return a!==!0},"call$1",null,2,0,null,131,[],"call"],
$isEH:true},
c4:{
-"^":"Tp:113;a",
+"^":"Tp:115;a",
call$0:[function(){return H.vh(K.kG("Expression is not assignable: "+H.d(this.a.a)))},"call$0",null,0,0,null,"call"],
$isEH:true},
z6:{
-"^":"a;eT>,k8,bq,G9",
+"^":"a;eT>,k8<,bq,G9",
gCH:function(){var z=this.G9
if(z!=null)return z
z=H.vn(this.k8)
@@ -21857,7 +21258,7 @@
if(J.de(b,"this"))return this.k8
else{z=this.bq.Zp
if(z.x4(b))return K.ci(z.t(0,b))
-else if(this.k8!=null){y=new H.GD(H.le(b))
+else if(this.k8!=null){y=new H.GD(H.u1(b))
x=Z.y1(H.jO(J.bB(this.gCH().Ax).LU),y)
z=J.x(x)
if(typeof x!=="object"||x===null||!z.$isRY)w=typeof x==="object"&&x!==null&&!!z.$isRS&&x.glT()
@@ -21870,26 +21271,27 @@
if(J.de(a,"this"))return
else{z=this.bq
if(z.Zp.x4(a))return z
-else{z=H.le(a)
+else{z=H.u1(a)
if(Z.y1(H.jO(J.bB(this.gCH().Ax).LU),new H.GD(z))!=null)return this.k8}}z=this.eT
if(z!=null)return z.tI(a)},"call$1","gXe",2,0,null,12,[]],
tg:[function(a,b){var z
if(this.bq.Zp.x4(b))return!0
-else{z=H.le(b)
+else{z=H.u1(b)
if(Z.y1(H.jO(J.bB(this.gCH().Ax).LU),new H.GD(z))!=null)return!0}z=this.eT
if(z!=null)return z.tg(0,b)
return!1},"call$1","gdj",2,0,null,12,[]],
$isz6:true},
-Ay0:{
+Ay:{
"^":"a;bO?,Lv<",
gju:function(){var z=this.k6
return H.VM(new P.Ik(z),[H.Kp(z,0)])},
gLl:function(){return this.Lv},
-Qh:[function(a){},"call$1","gVj",2,0,null,270,[]],
+eC:[function(a){return this.Qh(a)},"call$1","gpn",2,0,null,265,[]],
+Qh:[function(a){},"call$1","gVj",2,0,null,265,[]],
DX:[function(a){var z
this.yc(0,a)
z=this.bO
-if(z!=null)z.DX(a)},"call$1","gFO",2,0,null,270,[]],
+if(z!=null)z.DX(a)},"call$1","gFO",2,0,null,265,[]],
yc:[function(a,b){var z,y,x
z=this.tj
if(z!=null){z.ed()
@@ -21898,30 +21300,30 @@
z=this.Lv
if(z==null?y!=null:z!==y){x=this.k6
if(x.Gv>=4)H.vh(x.q7())
-x.Iv(z)}},"call$1","gcz",2,0,null,270,[]],
+x.Iv(z)}},"call$1","gcz",2,0,null,265,[]],
bu:[function(a){return this.KL.bu(0)},"call$0","gXo",0,0,null],
$ishw:true},
Ed:{
-"^":"cfS;Jd",
-xn:[function(a){a.yc(0,this.Jd)},"call$1","gBe",2,0,null,18,[]],
+"^":"d2;Jd",
+xn:[function(a){a.yc(0,this.Jd)},"call$1","gBe",2,0,null,19,[]],
ky:[function(a){J.UK(a.gT8(),this)
-a.yc(0,this.Jd)},"call$1","gXf",2,0,null,283,[]]},
+a.yc(0,this.Jd)},"call$1","gU6",2,0,null,278,[]]},
G1:{
"^":"fr;Jd,Le",
-W9:[function(a){return new K.Wh(a,null,null,null,P.bK(null,null,!1,null))},"call$1","glO",2,0,null,18,[]],
-LT:[function(a){return a.wz.RR(0,this)},"call$1","gff",2,0,null,18,[]],
+W9:[function(a){return new K.Wh(a,null,null,null,P.bK(null,null,!1,null))},"call$1","glO",2,0,null,19,[]],
+LT:[function(a){return a.wz.RR(0,this)},"call$1","gff",2,0,null,19,[]],
co:[function(a){var z,y
z=J.UK(a.ghP(),this)
y=new K.vl(z,a,null,null,null,P.bK(null,null,!1,null))
z.sbO(y)
-return y},"call$1","gEW",2,0,null,351,[]],
+return y},"call$1","gEW",2,0,null,354,[]],
CU:[function(a){var z,y,x
z=J.UK(a.ghP(),this)
y=J.UK(a.gJn(),this)
x=new K.iT(z,y,a,null,null,null,P.bK(null,null,!1,null))
z.sbO(x)
y.sbO(x)
-return x},"call$1","gA2",2,0,null,441,[]],
+return x},"call$1","gA2",2,0,null,409,[]],
ZR:[function(a){var z,y,x,w,v
z=J.UK(a.ghP(),this)
y=a.gre()
@@ -21931,115 +21333,115 @@
x=H.VM(new H.A8(y,w),[null,null]).tt(0,!1)}v=new K.fa(z,x,a,null,null,null,P.bK(null,null,!1,null))
z.sbO(v)
if(x!=null){x.toString
-H.bQ(x,new K.Os(v))}return v},"call$1","gES",2,0,null,441,[]],
-ti:[function(a){return new K.x5(a,null,null,null,P.bK(null,null,!1,null))},"call$1","gXj",2,0,null,279,[]],
+H.bQ(x,new K.Os(v))}return v},"call$1","gES",2,0,null,409,[]],
+ti:[function(a){return new K.x5(a,null,null,null,P.bK(null,null,!1,null))},"call$1","gHb",2,0,null,274,[]],
o0:[function(a){var z,y
z=H.VM(new H.A8(a.gPu(a),this.gnG()),[null,null]).tt(0,!1)
y=new K.ev(z,a,null,null,null,P.bK(null,null,!1,null))
H.bQ(z,new K.B8(y))
-return y},"call$1","gX7",2,0,null,279,[]],
+return y},"call$1","gmd",2,0,null,274,[]],
YV:[function(a){var z,y,x
z=J.UK(a.gG3(a),this)
y=J.UK(a.gv4(),this)
x=new K.qR(z,y,a,null,null,null,P.bK(null,null,!1,null))
z.sbO(x)
y.sbO(x)
-return x},"call$1","ghH",2,0,null,18,[]],
-qv:[function(a){return new K.ek(a,null,null,null,P.bK(null,null,!1,null))},"call$1","gFs",2,0,null,441,[]],
+return x},"call$1","ghH",2,0,null,19,[]],
+qv:[function(a){return new K.ek(a,null,null,null,P.bK(null,null,!1,null))},"call$1","gFs",2,0,null,409,[]],
im:[function(a){var z,y,x
z=J.UK(a.gBb(),this)
y=J.UK(a.gT8(),this)
-x=new K.mG(z,y,a,null,null,null,P.bK(null,null,!1,null))
+x=new K.iv(z,y,a,null,null,null,P.bK(null,null,!1,null))
z.sbO(x)
y.sbO(x)
-return x},"call$1","glf",2,0,null,91,[]],
+return x},"call$1","glf",2,0,null,96,[]],
Hx:[function(a){var z,y
z=J.UK(a.gwz(),this)
y=new K.mv(z,a,null,null,null,P.bK(null,null,!1,null))
z.sbO(y)
-return y},"call$1","ghe",2,0,null,91,[]],
+return y},"call$1","ghe",2,0,null,96,[]],
ky:[function(a){var z,y,x
z=J.UK(a.gBb(),this)
y=J.UK(a.gT8(),this)
x=new K.VA(z,y,a,null,null,null,P.bK(null,null,!1,null))
y.sbO(x)
-return x},"call$1","gXf",2,0,null,441,[]]},
+return x},"call$1","gU6",2,0,null,409,[]]},
Os:{
-"^":"Tp:107;a",
+"^":"Tp:112;a",
call$1:[function(a){var z=this.a
a.sbO(z)
-return z},"call$1",null,2,0,null,128,[],"call"],
+return z},"call$1",null,2,0,null,131,[],"call"],
$isEH:true},
B8:{
-"^":"Tp:107;a",
+"^":"Tp:112;a",
call$1:[function(a){var z=this.a
a.sbO(z)
-return z},"call$1",null,2,0,null,18,[],"call"],
+return z},"call$1",null,2,0,null,19,[],"call"],
$isEH:true},
Wh:{
-"^":"Ay0;KL,bO,tj,Lv,k6",
-Qh:[function(a){this.Lv=a.k8},"call$1","gVj",2,0,null,270,[]],
-RR:[function(a,b){return b.W9(this)},"call$1","gaH6",2,0,null,277,[]],
-$asAy0:function(){return[U.EZ]},
+"^":"Ay;KL,bO,tj,Lv,k6",
+Qh:[function(a){this.Lv=a.gk8()},"call$1","gVj",2,0,null,265,[]],
+RR:[function(a,b){return b.W9(this)},"call$1","gZC",2,0,null,272,[]],
+$asAy:function(){return[U.EZ]},
$isEZ:true,
$ishw:true},
x5:{
-"^":"Ay0;KL,bO,tj,Lv,k6",
+"^":"Ay;KL,bO,tj,Lv,k6",
gP:function(a){var z=this.KL
return z.gP(z)},
r6:function(a,b){return this.gP(this).call$1(b)},
Qh:[function(a){var z=this.KL
-this.Lv=z.gP(z)},"call$1","gVj",2,0,null,270,[]],
-RR:[function(a,b){return b.ti(this)},"call$1","gaH6",2,0,null,277,[]],
-$asAy0:function(){return[U.no]},
+this.Lv=z.gP(z)},"call$1","gVj",2,0,null,265,[]],
+RR:[function(a,b){return b.ti(this)},"call$1","gZC",2,0,null,272,[]],
+$asAy:function(){return[U.no]},
$asno:function(){return[null]},
$isno:true,
$ishw:true},
ev:{
-"^":"Ay0;Pu>,KL,bO,tj,Lv,k6",
-Qh:[function(a){this.Lv=H.n3(this.Pu,P.L5(null,null,null,null,null),new K.ID())},"call$1","gVj",2,0,null,270,[]],
-RR:[function(a,b){return b.o0(this)},"call$1","gaH6",2,0,null,277,[]],
-$asAy0:function(){return[U.kB]},
+"^":"Ay;Pu>,KL,bO,tj,Lv,k6",
+Qh:[function(a){this.Lv=H.n3(this.Pu,P.L5(null,null,null,null,null),new K.ID())},"call$1","gVj",2,0,null,265,[]],
+RR:[function(a,b){return b.o0(this)},"call$1","gZC",2,0,null,272,[]],
+$asAy:function(){return[U.kB]},
$iskB:true,
$ishw:true},
ID:{
-"^":"Tp:346;",
+"^":"Tp:348;",
call$2:[function(a,b){J.kW(a,J.WI(b).gLv(),b.gv4().gLv())
-return a},"call$2",null,4,0,null,191,[],18,[],"call"],
+return a},"call$2",null,4,0,null,190,[],19,[],"call"],
$isEH:true},
qR:{
-"^":"Ay0;G3>,v4<,KL,bO,tj,Lv,k6",
-RR:[function(a,b){return b.YV(this)},"call$1","gaH6",2,0,null,277,[]],
-$asAy0:function(){return[U.ae]},
+"^":"Ay;G3>,v4<,KL,bO,tj,Lv,k6",
+RR:[function(a,b){return b.YV(this)},"call$1","gZC",2,0,null,272,[]],
+$asAy:function(){return[U.ae]},
$isae:true,
$ishw:true},
ek:{
-"^":"Ay0;KL,bO,tj,Lv,k6",
+"^":"Ay;KL,bO,tj,Lv,k6",
gP:function(a){var z=this.KL
return z.gP(z)},
r6:function(a,b){return this.gP(this).call$1(b)},
Qh:[function(a){var z,y,x
z=this.KL
-this.Lv=a.t(0,z.gP(z))
+this.Lv=J.UQ(a,z.gP(z))
y=a.tI(z.gP(z))
x=J.RE(y)
-if(typeof y==="object"&&y!==null&&!!x.$isd3){z=H.le(z.gP(z))
-this.tj=x.gUj(y).yI(new K.Qv(this,a,new H.GD(z)))}},"call$1","gVj",2,0,null,270,[]],
-RR:[function(a,b){return b.qv(this)},"call$1","gaH6",2,0,null,277,[]],
-$asAy0:function(){return[U.w6]},
+if(typeof y==="object"&&y!==null&&!!x.$isd3){z=H.u1(z.gP(z))
+this.tj=x.gUj(y).yI(new K.Qv(this,a,new H.GD(z)))}},"call$1","gVj",2,0,null,265,[]],
+RR:[function(a,b){return b.qv(this)},"call$1","gZC",2,0,null,272,[]],
+$asAy:function(){return[U.w6]},
$isw6:true,
$ishw:true},
Qv:{
-"^":"Tp:107;a,b,c",
-call$1:[function(a){if(J.pb(a,new K.Xm(this.c))===!0)this.a.DX(this.b)},"call$1",null,2,0,null,589,[],"call"],
+"^":"Tp:112;a,b,c",
+call$1:[function(a){if(J.pb(a,new K.Xm(this.c))===!0)this.a.DX(this.b)},"call$1",null,2,0,null,563,[],"call"],
$isEH:true},
Xm:{
-"^":"Tp:107;d",
+"^":"Tp:112;d",
call$1:[function(a){var z=J.x(a)
-return typeof a==="object"&&a!==null&&!!z.$isqI&&J.de(a.oc,this.d)},"call$1",null,2,0,null,283,[],"call"],
+return typeof a==="object"&&a!==null&&!!z.$isqI&&J.de(a.oc,this.d)},"call$1",null,2,0,null,278,[],"call"],
$isEH:true},
mv:{
-"^":"Ay0;wz<,KL,bO,tj,Lv,k6",
+"^":"Ay;wz<,KL,bO,tj,Lv,k6",
gkp:function(a){var z=this.KL
return z.gkp(z)},
Qh:[function(a){var z,y
@@ -22047,13 +21449,13 @@
y=$.ww().t(0,z.gkp(z))
if(J.de(z.gkp(z),"!")){z=this.wz.gLv()
this.Lv=y.call$1(z==null?!1:z)}else{z=this.wz
-this.Lv=z.gLv()==null?null:y.call$1(z.gLv())}},"call$1","gVj",2,0,null,270,[]],
-RR:[function(a,b){return b.Hx(this)},"call$1","gaH6",2,0,null,277,[]],
-$asAy0:function(){return[U.jK]},
+this.Lv=z.gLv()==null?null:y.call$1(z.gLv())}},"call$1","gVj",2,0,null,265,[]],
+RR:[function(a,b){return b.Hx(this)},"call$1","gZC",2,0,null,272,[]],
+$asAy:function(){return[U.jK]},
$isjK:true,
$ishw:true},
-mG:{
-"^":"Ay0;Bb<,T8<,KL,bO,tj,Lv,k6",
+iv:{
+"^":"Ay;Bb<,T8<,KL,bO,tj,Lv,k6",
gkp:function(a){var z=this.KL
return z.gkp(z)},
Qh:[function(a){var z,y,x,w
@@ -22070,64 +21472,64 @@
w=typeof z==="object"&&z!==null&&!!w.$iswn
z=w}else z=!1
if(z)this.tj=H.Go(x.gLv(),"$iswn").gvp().yI(new K.uA(this,a))
-this.Lv=y.call$2(x.gLv(),this.T8.gLv())}}},"call$1","gVj",2,0,null,270,[]],
-RR:[function(a,b){return b.im(this)},"call$1","gaH6",2,0,null,277,[]],
-$asAy0:function(){return[U.uk]},
+this.Lv=y.call$2(x.gLv(),this.T8.gLv())}}},"call$1","gVj",2,0,null,265,[]],
+RR:[function(a,b){return b.im(this)},"call$1","gZC",2,0,null,272,[]],
+$asAy:function(){return[U.uk]},
$isuk:true,
$ishw:true},
uA:{
-"^":"Tp:107;a,b",
-call$1:[function(a){return this.a.DX(this.b)},"call$1",null,2,0,null,108,[],"call"],
+"^":"Tp:112;a,b",
+call$1:[function(a){return this.a.DX(this.b)},"call$1",null,2,0,null,113,[],"call"],
$isEH:true},
vl:{
-"^":"Ay0;hP<,KL,bO,tj,Lv,k6",
+"^":"Ay;hP<,KL,bO,tj,Lv,k6",
goc:function(a){var z=this.KL
return z.goc(z)},
Qh:[function(a){var z,y,x
z=this.hP.gLv()
if(z==null){this.Lv=null
return}y=this.KL
-x=new H.GD(H.le(y.goc(y)))
+x=new H.GD(H.u1(y.goc(y)))
this.Lv=H.vn(z).rN(x).gAx()
y=J.RE(z)
-if(typeof z==="object"&&z!==null&&!!y.$isd3)this.tj=y.gUj(z).yI(new K.Li(this,a,x))},"call$1","gVj",2,0,null,270,[]],
-RR:[function(a,b){return b.co(this)},"call$1","gaH6",2,0,null,277,[]],
-$asAy0:function(){return[U.x9]},
+if(typeof z==="object"&&z!==null&&!!y.$isd3)this.tj=y.gUj(z).yI(new K.Li(this,a,x))},"call$1","gVj",2,0,null,265,[]],
+RR:[function(a,b){return b.co(this)},"call$1","gZC",2,0,null,272,[]],
+$asAy:function(){return[U.x9]},
$isx9:true,
$ishw:true},
Li:{
-"^":"Tp:107;a,b,c",
-call$1:[function(a){if(J.pb(a,new K.WK(this.c))===!0)this.a.DX(this.b)},"call$1",null,2,0,null,589,[],"call"],
+"^":"Tp:112;a,b,c",
+call$1:[function(a){if(J.pb(a,new K.WK(this.c))===!0)this.a.DX(this.b)},"call$1",null,2,0,null,563,[],"call"],
$isEH:true},
WK:{
-"^":"Tp:107;d",
+"^":"Tp:112;d",
call$1:[function(a){var z=J.x(a)
-return typeof a==="object"&&a!==null&&!!z.$isqI&&J.de(a.oc,this.d)},"call$1",null,2,0,null,283,[],"call"],
+return typeof a==="object"&&a!==null&&!!z.$isqI&&J.de(a.oc,this.d)},"call$1",null,2,0,null,278,[],"call"],
$isEH:true},
iT:{
-"^":"Ay0;hP<,Jn<,KL,bO,tj,Lv,k6",
+"^":"Ay;hP<,Jn<,KL,bO,tj,Lv,k6",
Qh:[function(a){var z,y,x
z=this.hP.gLv()
if(z==null){this.Lv=null
return}y=this.Jn.gLv()
x=J.U6(z)
this.Lv=x.t(z,y)
-if(typeof z==="object"&&z!==null&&!!x.$isd3)this.tj=x.gUj(z).yI(new K.ja(this,a,y))},"call$1","gVj",2,0,null,270,[]],
-RR:[function(a,b){return b.CU(this)},"call$1","gaH6",2,0,null,277,[]],
-$asAy0:function(){return[U.zX]},
+if(typeof z==="object"&&z!==null&&!!x.$isd3)this.tj=x.gUj(z).yI(new K.ja(this,a,y))},"call$1","gVj",2,0,null,265,[]],
+RR:[function(a,b){return b.CU(this)},"call$1","gZC",2,0,null,272,[]],
+$asAy:function(){return[U.zX]},
$iszX:true,
$ishw:true},
ja:{
-"^":"Tp:107;a,b,c",
-call$1:[function(a){if(J.pb(a,new K.zw(this.c))===!0)this.a.DX(this.b)},"call$1",null,2,0,null,589,[],"call"],
+"^":"Tp:112;a,b,c",
+call$1:[function(a){if(J.pb(a,new K.ey(this.c))===!0)this.a.DX(this.b)},"call$1",null,2,0,null,563,[],"call"],
$isEH:true},
-zw:{
-"^":"Tp:107;d",
+ey:{
+"^":"Tp:112;d",
call$1:[function(a){var z=J.x(a)
-return typeof a==="object"&&a!==null&&!!z.$isHA&&J.de(a.G3,this.d)},"call$1",null,2,0,null,283,[],"call"],
+return typeof a==="object"&&a!==null&&!!z.$isHA&&J.de(a.G3,this.d)},"call$1",null,2,0,null,278,[],"call"],
$isEH:true},
fa:{
-"^":"Ay0;hP<,re<,KL,bO,tj,Lv,k6",
+"^":"Ay;hP<,re<,KL,bO,tj,Lv,k6",
gbP:function(a){var z=this.KL
return z.gbP(z)},
Qh:[function(a){var z,y,x,w
@@ -22138,52 +21540,52 @@
if(x==null){this.Lv=null
return}z=this.KL
if(z.gbP(z)==null){z=J.x(x)
-this.Lv=K.ci(typeof x==="object"&&x!==null&&!!z.$iswL?x.lR.F2(x.ex,y,null).Ax:H.Ek(x,y,P.Te(null)))}else{w=new H.GD(H.le(z.gbP(z)))
+this.Lv=K.ci(typeof x==="object"&&x!==null&&!!z.$iswL?x.lR.F2(x.ex,y,null).Ax:H.Ek(x,y,P.Te(null)))}else{w=new H.GD(H.u1(z.gbP(z)))
this.Lv=H.vn(x).F2(w,y,null).Ax
z=J.RE(x)
-if(typeof x==="object"&&x!==null&&!!z.$isd3)this.tj=z.gUj(x).yI(new K.vQ(this,a,w))}},"call$1","gVj",2,0,null,270,[]],
-RR:[function(a,b){return b.ZR(this)},"call$1","gaH6",2,0,null,277,[]],
-$asAy0:function(){return[U.Jy]},
+if(typeof x==="object"&&x!==null&&!!z.$isd3)this.tj=z.gUj(x).yI(new K.vQ(this,a,w))}},"call$1","gVj",2,0,null,265,[]],
+RR:[function(a,b){return b.ZR(this)},"call$1","gZC",2,0,null,272,[]],
+$asAy:function(){return[U.Jy]},
$isJy:true,
$ishw:true},
WW:{
-"^":"Tp:107;",
-call$1:[function(a){return a.gLv()},"call$1",null,2,0,null,128,[],"call"],
+"^":"Tp:112;",
+call$1:[function(a){return a.gLv()},"call$1",null,2,0,null,131,[],"call"],
$isEH:true},
vQ:{
-"^":"Tp:574;a,b,c",
-call$1:[function(a){if(J.pb(a,new K.a9(this.c))===!0)this.a.DX(this.b)},"call$1",null,2,0,null,589,[],"call"],
+"^":"Tp:548;a,b,c",
+call$1:[function(a){if(J.pb(a,new K.a9(this.c))===!0)this.a.DX(this.b)},"call$1",null,2,0,null,563,[],"call"],
$isEH:true},
a9:{
-"^":"Tp:107;d",
+"^":"Tp:112;d",
call$1:[function(a){var z=J.x(a)
-return typeof a==="object"&&a!==null&&!!z.$isqI&&J.de(a.oc,this.d)},"call$1",null,2,0,null,283,[],"call"],
+return typeof a==="object"&&a!==null&&!!z.$isqI&&J.de(a.oc,this.d)},"call$1",null,2,0,null,278,[],"call"],
$isEH:true},
VA:{
-"^":"Ay0;Bb<,T8<,KL,bO,tj,Lv,k6",
+"^":"Ay;Bb<,T8<,KL,bO,tj,Lv,k6",
Qh:[function(a){var z,y,x,w
z=this.Bb
y=this.T8.gLv()
x=J.x(y)
-if((typeof y!=="object"||y===null||y.constructor!==Array&&!x.$iscX)&&y!=null)throw H.b(K.kG("right side of 'in' is not an iterator"))
+if((typeof y!=="object"||y===null||y.constructor!==Array&&!x.$isQV)&&y!=null)throw H.b(K.kG("right side of 'in' is not an iterator"))
if(typeof y==="object"&&y!==null&&!!x.$iswn)this.tj=y.gvp().yI(new K.J1(this,a))
x=J.Vm(z)
w=y!=null?y:C.xD
-this.Lv=new K.fk(x,w)},"call$1","gVj",2,0,null,270,[]],
-RR:[function(a,b){return b.ky(this)},"call$1","gaH6",2,0,null,277,[]],
-$asAy0:function(){return[U.K9]},
+this.Lv=new K.fk(x,w)},"call$1","gVj",2,0,null,265,[]],
+RR:[function(a,b){return b.ky(this)},"call$1","gZC",2,0,null,272,[]],
+$asAy:function(){return[U.K9]},
$isK9:true,
$ishw:true},
J1:{
-"^":"Tp:107;a,b",
-call$1:[function(a){return this.a.DX(this.b)},"call$1",null,2,0,null,108,[],"call"],
+"^":"Tp:112;a,b",
+call$1:[function(a){return this.a.DX(this.b)},"call$1",null,2,0,null,113,[],"call"],
$isEH:true},
fk:{
"^":"a;kF,bm",
$isfk:true},
wL:{
-"^":"a:107;lR,ex",
-call$1:[function(a){return this.lR.F2(this.ex,[a],null).Ax},"call$1","gQl",2,0,null,599,[]],
+"^":"a:112;lR,ex",
+call$1:[function(a){return this.lR.F2(this.ex,[a],null).Ax},"call$1","gKu",2,0,null,573,[]],
$iswL:true,
$isEH:true},
B0:{
@@ -22192,70 +21594,65 @@
$isB0:true,
static:{kG:function(a){return new K.B0(a)}}}}],["polymer_expressions.expression","package:polymer_expressions/expression.dart",,U,{
"^":"",
-Pu:[function(a,b){var z,y,x
-z=J.x(a)
-if(z.n(a,b))return!0
+Pu:[function(a,b){var z,y
+if(a==null?b==null:a===b)return!0
if(a==null||b==null)return!1
-if(!J.de(z.gB(a),b.length))return!1
-y=0
-while(!0){x=z.gB(a)
-if(typeof x!=="number")return H.s(x)
-if(!(y<x))break
-x=z.t(a,y)
-if(y>=b.length)return H.e(b,y)
-if(!J.de(x,b[y]))return!1;++y}return!0},"call$2","OE",4,0,null,128,[],188,[]],
+if(a.length!==b.length)return!1
+for(z=0;z<a.length;++z){y=a[z]
+if(z>=b.length)return H.e(b,z)
+if(!J.de(y,b[z]))return!1}return!0},"call$2","OE",4,0,null,131,[],187,[]],
au:[function(a){a.toString
-return U.Up(H.n3(a,0,new U.xs()))},"call$1","bT",2,0,null,279,[]],
+return U.Up(H.n3(a,0,new U.xs()))},"call$1","bT",2,0,null,274,[]],
Zm:[function(a,b){var z=J.WB(a,b)
if(typeof z!=="number")return H.s(z)
a=536870911&z
a=536870911&a+((524287&a)<<10>>>0)
-return a^a>>>6},"call$2","uN",4,0,null,280,[],23,[]],
+return a^a>>>6},"call$2","uN",4,0,null,275,[],28,[]],
Up:[function(a){if(typeof a!=="number")return H.s(a)
a=536870911&a+((67108863&a)<<3>>>0)
a=(a^a>>>11)>>>0
-return 536870911&a+((16383&a)<<15>>>0)},"call$1","Hj",2,0,null,280,[]],
+return 536870911&a+((16383&a)<<15>>>0)},"call$1","fM",2,0,null,275,[]],
tc:{
"^":"a;",
-Bf:[function(a,b,c){return new U.zX(b,c)},"call$2","gvH",4,0,600,18,[],128,[]],
-F2:[function(a,b,c){return new U.Jy(a,b,c)},"call$3","gb2",6,0,null,18,[],191,[],128,[]]},
+Bf:[function(a,b,c){return new U.zX(b,c)},"call$2","gvH",4,0,574,19,[],131,[]],
+F2:[function(a,b,c){return new U.Jy(a,b,c)},"call$3","gb2",6,0,null,19,[],190,[],131,[]]},
hw:{
"^":"a;",
$ishw:true},
EZ:{
"^":"hw;",
-RR:[function(a,b){return b.W9(this)},"call$1","gaH6",2,0,null,277,[]],
+RR:[function(a,b){return b.W9(this)},"call$1","gZC",2,0,null,272,[]],
$isEZ:true},
no:{
"^":"hw;P>",
r6:function(a,b){return this.P.call$1(b)},
-RR:[function(a,b){return b.ti(this)},"call$1","gaH6",2,0,null,277,[]],
+RR:[function(a,b){return b.ti(this)},"call$1","gZC",2,0,null,272,[]],
bu:[function(a){var z=this.P
return typeof z==="string"?"\""+H.d(z)+"\"":H.d(z)},"call$0","gXo",0,0,null],
n:[function(a,b){var z
if(b==null)return!1
z=H.RB(b,"$isno",[H.Kp(this,0)],"$asno")
-return z&&J.de(J.Vm(b),this.P)},"call$1","gUJ",2,0,null,91,[]],
+return z&&J.de(J.Vm(b),this.P)},"call$1","gUJ",2,0,null,96,[]],
giO:function(a){return J.v1(this.P)},
$isno:true},
kB:{
"^":"hw;Pu>",
-RR:[function(a,b){return b.o0(this)},"call$1","gaH6",2,0,null,277,[]],
+RR:[function(a,b){return b.o0(this)},"call$1","gZC",2,0,null,272,[]],
bu:[function(a){return"{"+H.d(this.Pu)+"}"},"call$0","gXo",0,0,null],
n:[function(a,b){var z
if(b==null)return!1
z=J.RE(b)
-return typeof b==="object"&&b!==null&&!!z.$iskB&&U.Pu(z.gPu(b),this.Pu)},"call$1","gUJ",2,0,null,91,[]],
+return typeof b==="object"&&b!==null&&!!z.$iskB&&U.Pu(z.gPu(b),this.Pu)},"call$1","gUJ",2,0,null,96,[]],
giO:function(a){return U.au(this.Pu)},
$iskB:true},
ae:{
"^":"hw;G3>,v4<",
-RR:[function(a,b){return b.YV(this)},"call$1","gaH6",2,0,null,277,[]],
+RR:[function(a,b){return b.YV(this)},"call$1","gZC",2,0,null,272,[]],
bu:[function(a){return H.d(this.G3)+": "+H.d(this.v4)},"call$0","gXo",0,0,null],
n:[function(a,b){var z
if(b==null)return!1
z=J.RE(b)
-return typeof b==="object"&&b!==null&&!!z.$isae&&J.de(z.gG3(b),this.G3)&&J.de(b.gv4(),this.v4)},"call$1","gUJ",2,0,null,91,[]],
+return typeof b==="object"&&b!==null&&!!z.$isae&&J.de(z.gG3(b),this.G3)&&J.de(b.gv4(),this.v4)},"call$1","gUJ",2,0,null,96,[]],
giO:function(a){var z,y
z=J.v1(this.G3.P)
y=J.v1(this.v4)
@@ -22263,33 +21660,33 @@
$isae:true},
XC:{
"^":"hw;wz",
-RR:[function(a,b){return b.LT(this)},"call$1","gaH6",2,0,null,277,[]],
+RR:[function(a,b){return b.LT(this)},"call$1","gZC",2,0,null,272,[]],
bu:[function(a){return"("+H.d(this.wz)+")"},"call$0","gXo",0,0,null],
n:[function(a,b){var z
if(b==null)return!1
z=J.x(b)
-return typeof b==="object"&&b!==null&&!!z.$isXC&&J.de(b.wz,this.wz)},"call$1","gUJ",2,0,null,91,[]],
+return typeof b==="object"&&b!==null&&!!z.$isXC&&J.de(b.wz,this.wz)},"call$1","gUJ",2,0,null,96,[]],
giO:function(a){return J.v1(this.wz)},
$isXC:true},
w6:{
"^":"hw;P>",
r6:function(a,b){return this.P.call$1(b)},
-RR:[function(a,b){return b.qv(this)},"call$1","gaH6",2,0,null,277,[]],
+RR:[function(a,b){return b.qv(this)},"call$1","gZC",2,0,null,272,[]],
bu:[function(a){return this.P},"call$0","gXo",0,0,null],
n:[function(a,b){var z
if(b==null)return!1
z=J.RE(b)
-return typeof b==="object"&&b!==null&&!!z.$isw6&&J.de(z.gP(b),this.P)},"call$1","gUJ",2,0,null,91,[]],
+return typeof b==="object"&&b!==null&&!!z.$isw6&&J.de(z.gP(b),this.P)},"call$1","gUJ",2,0,null,96,[]],
giO:function(a){return J.v1(this.P)},
$isw6:true},
jK:{
"^":"hw;kp>,wz<",
-RR:[function(a,b){return b.Hx(this)},"call$1","gaH6",2,0,null,277,[]],
+RR:[function(a,b){return b.Hx(this)},"call$1","gZC",2,0,null,272,[]],
bu:[function(a){return H.d(this.kp)+" "+H.d(this.wz)},"call$0","gXo",0,0,null],
n:[function(a,b){var z
if(b==null)return!1
z=J.RE(b)
-return typeof b==="object"&&b!==null&&!!z.$isjK&&J.de(z.gkp(b),this.kp)&&J.de(b.gwz(),this.wz)},"call$1","gUJ",2,0,null,91,[]],
+return typeof b==="object"&&b!==null&&!!z.$isjK&&J.de(z.gkp(b),this.kp)&&J.de(b.gwz(),this.wz)},"call$1","gUJ",2,0,null,96,[]],
giO:function(a){var z,y
z=J.v1(this.kp)
y=J.v1(this.wz)
@@ -22297,12 +21694,12 @@
$isjK:true},
uk:{
"^":"hw;kp>,Bb<,T8<",
-RR:[function(a,b){return b.im(this)},"call$1","gaH6",2,0,null,277,[]],
+RR:[function(a,b){return b.im(this)},"call$1","gZC",2,0,null,272,[]],
bu:[function(a){return"("+H.d(this.Bb)+" "+H.d(this.kp)+" "+H.d(this.T8)+")"},"call$0","gXo",0,0,null],
n:[function(a,b){var z
if(b==null)return!1
z=J.RE(b)
-return typeof b==="object"&&b!==null&&!!z.$isuk&&J.de(z.gkp(b),this.kp)&&J.de(b.gBb(),this.Bb)&&J.de(b.gT8(),this.T8)},"call$1","gUJ",2,0,null,91,[]],
+return typeof b==="object"&&b!==null&&!!z.$isuk&&J.de(z.gkp(b),this.kp)&&J.de(b.gBb(),this.Bb)&&J.de(b.gT8(),this.T8)},"call$1","gUJ",2,0,null,96,[]],
giO:function(a){var z,y,x
z=J.v1(this.kp)
y=J.v1(this.Bb)
@@ -22311,12 +21708,12 @@
$isuk:true},
K9:{
"^":"hw;Bb<,T8<",
-RR:[function(a,b){return b.ky(this)},"call$1","gaH6",2,0,null,277,[]],
+RR:[function(a,b){return b.ky(this)},"call$1","gZC",2,0,null,272,[]],
bu:[function(a){return"("+H.d(this.Bb)+" in "+H.d(this.T8)+")"},"call$0","gXo",0,0,null],
n:[function(a,b){var z
if(b==null)return!1
z=J.x(b)
-return typeof b==="object"&&b!==null&&!!z.$isK9&&J.de(b.gBb(),this.Bb)&&J.de(b.gT8(),this.T8)},"call$1","gUJ",2,0,null,91,[]],
+return typeof b==="object"&&b!==null&&!!z.$isK9&&J.de(b.gBb(),this.Bb)&&J.de(b.gT8(),this.T8)},"call$1","gUJ",2,0,null,96,[]],
giO:function(a){var z,y
z=this.Bb
z=z.giO(z)
@@ -22325,12 +21722,12 @@
$isK9:true},
zX:{
"^":"hw;hP<,Jn<",
-RR:[function(a,b){return b.CU(this)},"call$1","gaH6",2,0,null,277,[]],
+RR:[function(a,b){return b.CU(this)},"call$1","gZC",2,0,null,272,[]],
bu:[function(a){return H.d(this.hP)+"["+H.d(this.Jn)+"]"},"call$0","gXo",0,0,null],
n:[function(a,b){var z
if(b==null)return!1
z=J.x(b)
-return typeof b==="object"&&b!==null&&!!z.$iszX&&J.de(b.ghP(),this.hP)&&J.de(b.gJn(),this.Jn)},"call$1","gUJ",2,0,null,91,[]],
+return typeof b==="object"&&b!==null&&!!z.$iszX&&J.de(b.ghP(),this.hP)&&J.de(b.gJn(),this.Jn)},"call$1","gUJ",2,0,null,96,[]],
giO:function(a){var z,y
z=J.v1(this.hP)
y=J.v1(this.Jn)
@@ -22338,12 +21735,12 @@
$iszX:true},
x9:{
"^":"hw;hP<,oc>",
-RR:[function(a,b){return b.co(this)},"call$1","gaH6",2,0,null,277,[]],
+RR:[function(a,b){return b.co(this)},"call$1","gZC",2,0,null,272,[]],
bu:[function(a){return H.d(this.hP)+"."+H.d(this.oc)},"call$0","gXo",0,0,null],
n:[function(a,b){var z
if(b==null)return!1
z=J.RE(b)
-return typeof b==="object"&&b!==null&&!!z.$isx9&&J.de(b.ghP(),this.hP)&&J.de(z.goc(b),this.oc)},"call$1","gUJ",2,0,null,91,[]],
+return typeof b==="object"&&b!==null&&!!z.$isx9&&J.de(b.ghP(),this.hP)&&J.de(z.goc(b),this.oc)},"call$1","gUJ",2,0,null,96,[]],
giO:function(a){var z,y
z=J.v1(this.hP)
y=J.v1(this.oc)
@@ -22351,12 +21748,12 @@
$isx9:true},
Jy:{
"^":"hw;hP<,bP>,re<",
-RR:[function(a,b){return b.ZR(this)},"call$1","gaH6",2,0,null,277,[]],
+RR:[function(a,b){return b.ZR(this)},"call$1","gZC",2,0,null,272,[]],
bu:[function(a){return H.d(this.hP)+"."+H.d(this.bP)+"("+H.d(this.re)+")"},"call$0","gXo",0,0,null],
n:[function(a,b){var z
if(b==null)return!1
z=J.RE(b)
-return typeof b==="object"&&b!==null&&!!z.$isJy&&J.de(b.ghP(),this.hP)&&J.de(z.gbP(b),this.bP)&&U.Pu(b.gre(),this.re)},"call$1","gUJ",2,0,null,91,[]],
+return typeof b==="object"&&b!==null&&!!z.$isJy&&J.de(b.ghP(),this.hP)&&J.de(z.gbP(b),this.bP)&&U.Pu(b.gre(),this.re)},"call$1","gUJ",2,0,null,96,[]],
giO:function(a){var z,y,x
z=J.v1(this.hP)
y=J.v1(this.bP)
@@ -22364,8 +21761,8 @@
return U.Up(U.Zm(U.Zm(U.Zm(0,z),y),x))},
$isJy:true},
xs:{
-"^":"Tp:346;",
-call$2:[function(a,b){return U.Zm(a,J.v1(b))},"call$2",null,4,0,null,601,[],602,[],"call"],
+"^":"Tp:348;",
+call$2:[function(a,b){return U.Zm(a,J.v1(b))},"call$2",null,4,0,null,575,[],576,[],"call"],
$isEH:true}}],["polymer_expressions.parser","package:polymer_expressions/parser.dart",,T,{
"^":"",
FX:{
@@ -22373,8 +21770,8 @@
XJ:[function(a,b){var z
if(!(a!=null&&!J.de(J.Iz(this.fL.lo),a)))z=b!=null&&!J.de(J.Vm(this.fL.lo),b)
else z=!0
-if(z)throw H.b(Y.RV("Expected "+b+": "+H.d(this.fL.lo)))
-this.fL.G()},function(){return this.XJ(null,null)},"w5","call$2",null,"gXO",0,4,null,77,77,603,[],23,[]],
+if(z)throw H.b(Y.RV("Expected "+H.d(b)+": "+H.d(this.fL.lo)))
+this.fL.G()},function(){return this.XJ(null,null)},"w5","call$2",null,"gnp",0,4,null,82,82,577,[],28,[]],
o9:[function(){if(this.fL.lo==null){this.Sk.toString
return C.OL}var z=this.Dl()
return z==null?null:this.BH(z,0)},"call$0","gKx",0,0,null],
@@ -22392,7 +21789,7 @@
z.toString
a=new U.K9(a,v)}else if(J.de(J.Iz(this.fL.lo),8)&&J.J5(this.fL.lo.gG8(),b))a=this.Tw(a)
else break
-return a},"call$2","gHr",4,0,null,131,[],604,[]],
+return a},"call$2","gTv",4,0,null,134,[],578,[]],
qL:[function(a,b){var z,y
if(typeof b==="object"&&b!==null&&!!b.$isw6){z=b.gP(b)
this.Sk.toString
@@ -22403,7 +21800,7 @@
if(z){z=J.Vm(b.ghP())
y=b.gre()
this.Sk.toString
-return new U.Jy(a,z,y)}else throw H.b(Y.RV("expected identifier: "+H.d(b)))}},"call$2","gE5",4,0,null,131,[],132,[]],
+return new U.Jy(a,z,y)}else throw H.b(Y.RV("expected identifier: "+H.d(b)))}},"call$2","gE5",4,0,null,134,[],135,[]],
Tw:[function(a){var z,y,x
z=this.fL.lo
this.w5()
@@ -22414,7 +21811,7 @@
if(!x)break
y=this.BH(y,this.fL.lo.gG8())}x=J.Vm(z)
this.Sk.toString
-return new U.uk(x,a,y)},"call$1","gvB",2,0,null,131,[]],
+return new U.uk(x,a,y)},"call$1","gvB",2,0,null,134,[]],
Dl:[function(){var z,y,x,w
if(J.de(J.Iz(this.fL.lo),8)){z=J.Vm(this.fL.lo)
y=J.x(z)
@@ -22504,34 +21901,34 @@
this.Sk.toString
y=H.VM(new U.no(z),[null])
this.w5()
-return y},"call$0","gJ1",0,0,null],
-pT0:[function(a){var z,y
+return y},"call$0","gJA",0,0,null],
+pT:[function(a){var z,y
z=H.BU(H.d(a)+H.d(J.Vm(this.fL.lo)),null,null)
this.Sk.toString
y=H.VM(new U.no(z),[null])
this.w5()
-return y},function(){return this.pT0("")},"Ud","call$1",null,"gwo",0,2,null,333,605,[]],
-Fj:[function(a){var z,y
+return y},function(){return this.pT("")},"Ud","call$1",null,"gwo",0,2,null,330,579,[]],
+yj:[function(a){var z,y
z=H.IH(H.d(a)+H.d(J.Vm(this.fL.lo)),null)
this.Sk.toString
y=H.VM(new U.no(z),[null])
this.w5()
-return y},function(){return this.Fj("")},"tw","call$1",null,"gSE",0,2,null,333,605,[]]}}],["polymer_expressions.src.globals","package:polymer_expressions/src/globals.dart",,K,{
+return y},function(){return this.yj("")},"tw","call$1",null,"gSE",0,2,null,330,579,[]]}}],["polymer_expressions.src.globals","package:polymer_expressions/src/globals.dart",,K,{
"^":"",
-Dc:[function(a){return H.VM(new K.Bt(a),[null])},"call$1","UM",2,0,281,114,[]],
+Dc:[function(a){return H.VM(new K.Bt(a),[null])},"call$1","UM",2,0,276,116,[]],
Ae:{
-"^":"a;vH>-386,P>-606",
+"^":"a;vH>-369,P>-580",
r6:function(a,b){return this.P.call$1(b)},
n:[function(a,b){var z
if(b==null)return!1
z=J.x(b)
-return typeof b==="object"&&b!==null&&!!z.$isAe&&J.de(b.vH,this.vH)&&J.de(b.P,this.P)},"call$1","gUJ",2,0,107,91,[],"=="],
-giO:[function(a){return J.v1(this.P)},null,null,1,0,371,"hashCode"],
-bu:[function(a){return"("+H.d(this.vH)+", "+H.d(this.P)+")"},"call$0","gXo",0,0,370,"toString"],
+return typeof b==="object"&&b!==null&&!!z.$isAe&&J.de(b.vH,this.vH)&&J.de(b.P,this.P)},"call$1","gUJ",2,0,112,96,[],"=="],
+giO:[function(a){return J.v1(this.P)},null,null,1,0,512,"hashCode"],
+bu:[function(a){return"("+H.d(this.vH)+", "+H.d(this.P)+")"},"call$0","gXo",0,0,365,"toString"],
$isAe:true,
-"@":function(){return[C.nJ]},
+"@":function(){return[C.Nw]},
"<>":[3],
-static:{iz:[function(a,b,c){return H.VM(new K.Ae(a,b),[c])},null,null,4,0,function(){return H.IG(function(a){return{func:"ep",args:[J.im,a]}},this.$receiver,"Ae")},47,[],23,[],"new IndexedValue"]}},
+static:{i0:[function(a,b,c){return H.VM(new K.Ae(a,b),[c])},null,null,4,0,function(){return H.IG(function(a){return{func:"ep",args:[J.im,a]}},this.$receiver,"Ae")},52,[],28,[],"new IndexedValue"]}},
"+IndexedValue":[0],
Bt:{
"^":"mW;YR",
@@ -22548,9 +21945,9 @@
return z},
Zv:[function(a,b){var z=new K.Ae(b,J.i4(this.YR,b))
z.$builtinTypeInfo=this.$builtinTypeInfo
-return z},"call$1","goY",2,0,null,47,[]],
+return z},"call$1","goY",2,0,null,52,[]],
$asmW:function(a){return[[K.Ae,a]]},
-$ascX:function(a){return[[K.Ae,a]]}},
+$asQV:function(a){return[[K.Ae,a]]}},
vR:{
"^":"AC;WS,wX,CD",
gl:function(){return this.CD},
@@ -22568,14 +21965,14 @@
z=a.gAY()
if(z!=null&&!J.de(z.gUx(),C.PU)){y=Z.y1(a.gAY(),b)
if(y!=null)return y}for(x=J.GP(a.gkZ());x.G();){y=Z.y1(x.lo,b)
-if(y!=null)return y}return},"call$2","tm",4,0,null,282,[],12,[]]}],["polymer_expressions.tokenizer","package:polymer_expressions/tokenizer.dart",,Y,{
+if(y!=null)return y}return},"call$2","Nb",4,0,null,277,[],12,[]]}],["polymer_expressions.tokenizer","package:polymer_expressions/tokenizer.dart",,Y,{
"^":"",
-aK:[function(a){switch(a){case 102:return 12
+wX:[function(a){switch(a){case 102:return 12
case 110:return 10
case 114:return 13
case 116:return 9
case 118:return 11
-default:return a}},"call$1","aN",2,0,null,283,[]],
+default:return a}},"call$1","uO",2,0,null,278,[]],
Pn:{
"^":"a;fY>,P>,G8<",
r6:function(a,b){return this.P.call$1(b)},
@@ -22620,14 +22017,14 @@
if(x===92){x=y.G()?y.Wn:null
this.VQ=x
if(x==null)throw H.b(Y.RV("unterminated string"))
-v=P.O8(1,Y.aK(x),J.im)
+v=P.O8(1,Y.wX(x),J.im)
x=H.eT(v)
w.vM=w.vM+x}else{v=P.O8(1,x,J.im)
x=H.eT(v)
w.vM=w.vM+x}x=y.G()?y.Wn:null
this.VQ=x}this.MV.push(new Y.Pn(1,w.vM,0))
w.vM=""
-this.VQ=y.G()?y.Wn:null},"call$0","gxs",0,0,null],
+this.VQ=y.G()?y.Wn:null},"call$0","gPJ",0,0,null],
zI:[function(){var z,y,x,w,v,u
z=this.jI
y=this.zy
@@ -22681,43 +22078,43 @@
"^":"",
fr:{
"^":"a;",
-DV:[function(a){return J.UK(a,this)},"call$1","gnG",2,0,607,86,[]]},
-cfS:{
+DV:[function(a){return J.UK(a,this)},"call$1","gnG",2,0,581,91,[]]},
+d2:{
"^":"fr;",
-W9:[function(a){return this.xn(a)},"call$1","glO",2,0,null,18,[]],
+W9:[function(a){return this.xn(a)},"call$1","glO",2,0,null,19,[]],
LT:[function(a){a.wz.RR(0,this)
-this.xn(a)},"call$1","gff",2,0,null,18,[]],
+this.xn(a)},"call$1","gff",2,0,null,19,[]],
co:[function(a){J.UK(a.ghP(),this)
-this.xn(a)},"call$1","gEW",2,0,null,441,[]],
+this.xn(a)},"call$1","gEW",2,0,null,409,[]],
CU:[function(a){J.UK(a.ghP(),this)
J.UK(a.gJn(),this)
-this.xn(a)},"call$1","gA2",2,0,null,441,[]],
+this.xn(a)},"call$1","gA2",2,0,null,409,[]],
ZR:[function(a){var z
J.UK(a.ghP(),this)
z=a.gre()
if(z!=null)for(z=H.VM(new H.a7(z,z.length,0,null),[H.Kp(z,0)]);z.G();)J.UK(z.lo,this)
-this.xn(a)},"call$1","gES",2,0,null,441,[]],
-ti:[function(a){return this.xn(a)},"call$1","gXj",2,0,null,279,[]],
+this.xn(a)},"call$1","gES",2,0,null,409,[]],
+ti:[function(a){return this.xn(a)},"call$1","gHb",2,0,null,274,[]],
o0:[function(a){var z
for(z=a.gPu(a),z=H.VM(new H.a7(z,z.length,0,null),[H.Kp(z,0)]);z.G();)J.UK(z.lo,this)
-this.xn(a)},"call$1","gX7",2,0,null,279,[]],
+this.xn(a)},"call$1","gmd",2,0,null,274,[]],
YV:[function(a){J.UK(a.gG3(a),this)
J.UK(a.gv4(),this)
-this.xn(a)},"call$1","ghH",2,0,null,18,[]],
-qv:[function(a){return this.xn(a)},"call$1","gFs",2,0,null,441,[]],
+this.xn(a)},"call$1","ghH",2,0,null,19,[]],
+qv:[function(a){return this.xn(a)},"call$1","gFs",2,0,null,409,[]],
im:[function(a){J.UK(a.gBb(),this)
J.UK(a.gT8(),this)
-this.xn(a)},"call$1","glf",2,0,null,91,[]],
+this.xn(a)},"call$1","glf",2,0,null,96,[]],
Hx:[function(a){J.UK(a.gwz(),this)
-this.xn(a)},"call$1","ghe",2,0,null,91,[]],
+this.xn(a)},"call$1","ghe",2,0,null,96,[]],
ky:[function(a){J.UK(a.gBb(),this)
J.UK(a.gT8(),this)
-this.xn(a)},"call$1","gXf",2,0,null,283,[]]}}],["response_viewer_element","package:observatory/src/elements/response_viewer.dart",,Q,{
+this.xn(a)},"call$1","gU6",2,0,null,278,[]]}}],["response_viewer_element","package:observatory/src/elements/response_viewer.dart",,Q,{
"^":"",
JG:{
-"^":["V0;kW%-550,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0-412",null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
-guw:[function(a){return a.kW},null,null,1,0,408,"app",355,397],
-suw:[function(a,b){a.kW=this.ct(a,C.wh,a.kW,b)},null,null,3,0,551,23,[],"app",355],
+"^":["V20;kW%-532,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0-375",null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.Nw]}],
+guw:[function(a){return a.kW},null,null,1,0,533,"app",358,377],
+suw:[function(a,b){a.kW=this.ct(a,C.wh,a.kW,b)},null,null,3,0,534,28,[],"app",358],
"@":function(){return[C.Is]},
static:{Zo:[function(a){var z,y,x,w
z=$.Nd()
@@ -22730,33 +22127,29 @@
a.X0=w
C.Cc.ZL(a)
C.Cc.G6(a)
-return a},null,null,0,0,113,"new ResponseViewerElement$created"]}},
-"+ResponseViewerElement":[608],
-V0:{
+return a},null,null,0,0,115,"new ResponseViewerElement$created"]}},
+"+ResponseViewerElement":[582],
+V20:{
"^":"uL+Pi;",
$isd3:true}}],["script_ref_element","package:observatory/src/elements/script_ref.dart",,A,{
"^":"",
knI:{
-"^":["T5;zw%-386,AP,fn,tY-410,Pe-417,AP,fn,pC-411,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0-412",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
-gRd:[function(a){return a.zw},null,null,1,0,371,"line",355,397],
-sRd:[function(a,b){a.zw=this.ct(a,C.Cv,a.zw,b)},null,null,3,0,372,23,[],"line",355],
-grp:[function(a){if(J.u6(a.zw,0))return Q.xI.prototype.grp.call(this,a)
-return H.d(Q.xI.prototype.grp.call(this,a))+"?line="+H.d(a.zw)},null,null,1,0,370,"objectId"],
-gJp:[function(a){var z,y
-if(a.tY==null)return""
+"^":["T5;zw%-369,AP,Lk,tY-381,Pe-382,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0-375",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.Nw]}],
+gRd:[function(a){return a.zw},null,null,1,0,512,"line",358,377],
+sRd:[function(a,b){a.zw=this.ct(a,C.Cv,a.zw,b)},null,null,3,0,411,28,[],"line",358],
+gD5:[function(a){var z,y
+if(a.tY==null)return Q.xI.prototype.gD5.call(this,a)
z=J.u6(a.zw,0)
y=a.tY
-if(z)return J.UQ(y,"user_name")
-else return H.d(J.UQ(y,"user_name"))+":"+H.d(a.zw)},null,null,1,0,370,"hoverText"],
-goc:[function(a){var z,y,x
-z=a.tY
-if(z==null)return""
-y=J.UQ(z,"user_name")
-z=J.U6(y)
-x=z.yn(y,J.WB(z.cn(y,"/"),1))
-if(J.u6(a.zw,0))return x
-else return x+":"+H.d(a.zw)},null,null,1,0,370,"name"],
-"@":function(){return[C.h9]},
+if(z)return y.gzz()
+else return H.d(y.gzz())+":"+H.d(a.zw)},null,null,1,0,365,"hoverText"],
+goc:[function(a){var z,y
+if(a.tY==null)return Q.xI.prototype.goc.call(this,a)
+z=J.u6(a.zw,0)
+y=a.tY
+if(z)return J.O6(y)
+else return H.d(J.O6(y))+":"+H.d(a.zw)},null,null,1,0,365,"name"],
+"@":function(){return[C.Ur]},
static:{Th:[function(a){var z,y,x,w
z=$.Nd()
y=P.Py(null,null,null,J.O,W.I0)
@@ -22770,22 +22163,820 @@
a.X0=w
C.c0.ZL(a)
C.c0.G6(a)
-return a},null,null,0,0,113,"new ScriptRefElement$created"]}},
-"+ScriptRefElement":[609],
+return a},null,null,0,0,115,"new ScriptRefElement$created"]}},
+"+ScriptRefElement":[583],
T5:{
"^":"xI+Pi;",
$isd3:true}}],["script_view_element","package:observatory/src/elements/script_view.dart",,U,{
"^":"",
fI:{
-"^":["oaa;Uz%-610,AP,fn,pC-411,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0-412",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
-gNl:[function(a){return a.Uz},null,null,1,0,611,"script",355,397],
-sNl:[function(a,b){a.Uz=this.ct(a,C.fX,a.Uz,b)},null,null,3,0,612,23,[],"script",355],
-PQ:[function(a,b){if(J.de(b.gu9(),-1))return"min-width:32px;"
-else if(J.de(b.gu9(),0))return"min-width:32px;background-color:red"
-return"min-width:32px;background-color:green"},"call$1","gXa",2,0,613,181,[],"hitsStyle"],
-wH:[function(a,b,c,d){a.pC.oX("coverage").ml(new U.qq(a)).OA(new U.FC())},"call$3","gWp",6,0,425,18,[],306,[],74,[],"refreshCoverage"],
+"^":["V21;Uz%-584,HJ%-382,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0-375",null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.Nw]}],
+gNl:[function(a){return a.Uz},null,null,1,0,585,"script",358,377],
+sNl:[function(a,b){a.Uz=this.ct(a,C.fX,a.Uz,b)},null,null,3,0,586,28,[],"script",358],
+gnN:[function(a){return a.HJ},null,null,1,0,390,"showCoverage",358,377],
+snN:[function(a,b){a.HJ=this.ct(a,C.V0,a.HJ,b)},null,null,3,0,391,28,[],"showCoverage",358],
+i4:[function(a){var z
+Z.uL.prototype.i4.call(this,a)
+z=a.Uz
+if(z==null)return
+J.SK(z)},"call$0","gQd",0,0,114,"enteredView"],
+da:[function(a){this.ct(a,C.YH,0,1)},"call$0","gze",0,0,114,"_triggerHitRefresh"],
+ib:[function(a,b){this.ct(a,C.YH,0,1)},"call$1","gKg",2,0,112,229,[],"showCoverageChanged"],
+PQ:[function(a,b){var z,y
+z=a.Uz
+if(z==null||a.HJ!==!0)return"min-width:32px;"
+y=J.UQ(z.gu9(),J.f2(b))
+if(y==null)return"min-width:32px;"
+if(J.de(y,0))return"min-width:32px;background-color:red"
+return"min-width:32px;background-color:green"},"call$1","gXa",2,0,587,180,[],"hitsStyle",359],
+yv:[function(a,b){J.am(a.Uz).YM(b)},"call$1","gvC",2,0,157,379,[],"refresh"],
+j9:[function(a,b){J.y9(J.QP(a.Uz)).ml(new U.qq(a,b))},"call$1","gWp",2,0,157,379,[],"refreshCoverage"],
"@":function(){return[C.I3]},
-static:{Ry:[function(a){var z,y,x,w
+static:{"^":"he<-82,iJN<-82,oM<-82",Ry:[function(a){var z,y,x,w
+z=$.Nd()
+y=P.Py(null,null,null,J.O,W.I0)
+x=J.O
+w=W.cv
+w=H.VM(new V.qC(P.Py(null,null,null,x,w),null,null),[x,w])
+a.HJ=!1
+a.SO=z
+a.B7=y
+a.X0=w
+C.cJ.ZL(a)
+C.cJ.G6(a)
+return a},null,null,0,0,115,"new ScriptViewElement$created"]}},
+"+ScriptViewElement":[588],
+V21:{
+"^":"uL+Pi;",
+$isd3:true},
+qq:{
+"^":"Tp:112;a-82,b-82",
+call$1:[function(a){J.Q5(this.a,C.YH,0,1)
+this.b.call$0()},"call$1",null,2,0,112,113,[],"call"],
+$isEH:true},
+"+ qq":[489]}],["service","package:observatory/service.dart",,D,{
+"^":"",
+Er:[function(a){var z
+if(a!=null){z=J.U6(a)
+z=z.t(a,"id")!=null&&z.t(a,"type")!=null}else z=!1
+return z},"call$1","XI",2,0,null,190,[]],
+Io:[function(a){var z=J.rY(a)
+if(!z.nC(a,"@"))return a
+return z.yn(a,1)},"call$1","GK",2,0,null,11,[]],
+Ch:[function(a,b,c){var z=J.x(a)
+if(typeof a==="object"&&a!==null&&!!z.$isqC)D.Gf(a,b,c)
+else if(typeof a==="object"&&a!==null&&!!z.$iswn)D.f3(a,b,c)},"call$3","H3",6,0,null,281,[],282,[],14,[]],
+Gf:[function(a,b,c){a.aN(0,new D.UZ(a,b,c))},"call$3","Xb",6,0,null,151,[],282,[],14,[]],
+f3:[function(a,b,c){var z,y,x,w,v
+for(z=a.h3,y=0;y<z.length;++y){x=z[y]
+w=J.U6(x)
+v=typeof x==="object"&&x!==null&&!!w.$isqC
+if(v&&w.t(x,"id")!=null&&w.t(x,"type")!=null)a.u(0,y,D.Lr(b,c,x))
+else if(typeof x==="object"&&x!==null&&!!w.$iswn)D.f3(x,b,c)
+else if(v)D.Gf(x,b,c)}},"call$3","PV",6,0,null,73,[],282,[],14,[]],
+Lr:[function(a,b,c){var z
+if(c!=null){z=J.U6(c)
+z=z.t(c,"id")!=null&&z.t(c,"type")!=null}else z=!1
+if(!z)N.Jx("").hh("Malformed service object: "+H.d(c))
+switch(D.Io(J.UQ(c,"type"))){case"Error":z=new D.pt(null,null,null,null,b,null,null,null,null,null,null,null)
+z.H4(b,c)
+return z
+case"IsolateList":a.tl.eC(c)
+return a.tl
+case"Script":return b.fq.Jb(c)
+case"Code":return b.ne.Jb(c)
+case"Isolate":return a.tl.Ze(c)
+case"Class":return b.PH.Jb(c)
+case"Function":return b.pw.Jb(c)
+default:}z=new V.qC(P.Py(null,null,null,null,null),null,null)
+z.$builtinTypeInfo=[null,null]
+z=new D.SI(z,b,null,null,null,null,null,null,null)
+z.H4(b,c)
+return z},"call$3","d1",6,0,null,282,[],14,[],190,[]],
+G8:{
+"^":"a;F1>",
+tg:[function(a,b){return this.A4.Zp.t(0,b)!=null},"call$1","gdj",2,0,null,279,[]],
+t:[function(a,b){return this.A4.Zp.t(0,b)},"call$1","gIA",2,0,null,279,[]],
+u:[function(a,b,c){this.A4.u(0,b,c)},"call$2","gj3",4,0,null,279,[],367,[]],
+ox:[function(a){var z=this.A4.Zp.t(0,a)
+if(z!=null)return P.Ab(z,null)
+return this.F1.ox(a).ml(this.gat())},"call$1","gRD",2,0,null,279,[]],
+Jb:[function(a){var z,y
+z=J.U6(a)
+y=z.t(a,"id")
+z.t(a,"type")
+if(!this.pJ(y))N.Jx("").j2("Cache does not cache this id: "+H.d(y))
+if(this.tg(0,y))return this.A4.Zp.t(0,y)
+z=this.tR(a)
+this.A4.u(0,z.gjO(z),z)
+return z},"call$1","gMs",2,0,null,98,[]],
+LJ:[function(a){this.A4.u(0,J.F8(a),a)
+return a},"call$1","gat",2,0,function(){return H.IG(function(a){return{func:"NO",ret:a,args:[a]}},this.$receiver,"G8")},589,[]]},
+fJ:{
+"^":"G8;F1,A4",
+pJ:[function(a){var z=$.cI().Ej
+if(typeof a!=="string")H.vh(new P.AT(a))
+return z.test(a)},"call$1","guT",2,0,null,279,[]],
+tR:[function(a){var z,y,x
+z=this.F1
+y=J.im
+x=J.im
+x=new D.rj(Q.uX(null,D.c2),H.VM(new V.qC(P.Py(null,null,null,y,x),null,null),[y,x]),null,null,null,null,null,null,z,null,null,null,null,null,null,null)
+x.H4(z,a)
+return x},"call$1","gUU",2,0,null,98,[]],
+Vc:[function(a){J.kH(J.UQ(a,"coverage"),new D.q1(this))},"call$1","gJJ",2,0,590,591,[]],
+$asG8:function(){return[D.rj]},
+static:{"^":"RI"}},
+q1:{
+"^":"Tp:112;a",
+call$1:[function(a){var z=J.U6(a)
+z.t(a,"script").aq(z.t(a,"hits"))},"call$1",null,2,0,null,592,[],"call"],
+$isEH:true},
+jx:{
+"^":"G8;F1,A4",
+pJ:[function(a){var z=$.xN().Ej
+if(typeof a!=="string")H.vh(new P.AT(a))
+return z.test(a)},"call$1","guT",2,0,null,279,[]],
+tR:[function(a){var z,y,x
+z=this.F1
+y=J.im
+x=D.N8
+x=new D.kx(null,0,0,0,0,0,H.VM([],[D.Vi]),H.VM([],[D.Vi]),Q.uX(null,D.Q4),H.VM(new V.qC(P.Py(null,null,null,y,x),null,null),[y,x]),"","",null,null,null,!1,null,null,z,null,null,null,null,null,null,null)
+x.H4(z,a)
+return x},"call$1","gUU",2,0,null,98,[]],
+T0:[function(a){var z,y
+z=this.A4.Zp
+z=z.gUQ(z)
+y=P.F(z,!0,H.ip(z,"mW",0))
+H.rd(y,new D.yT())
+z=y.length
+if(typeof a!=="number")return H.s(a)
+if(z<a)return y
+C.Nm.sB(y,a)
+return y},"call$1","gy8",2,0,null,130,[]],
+c2:[function(){this.A4.Zp.aN(0,new D.Cn())},"call$0","gKW",0,0,null],
+pl:[function(a,b){var z,y,x,w
+z=J.U6(a)
+y=z.t(a,"codes")
+x=z.t(a,"samples")
+for(z=J.GP(y);z.G();){w=z.gl()
+J.UQ(w,"code").eL(w,b,x)}},"call$2","gxl",4,0,null,593,[],594,[]],
+$asG8:function(){return[D.kx]},
+static:{"^":"PA"}},
+yT:{
+"^":"Tp:595;",
+call$2:[function(a,b){return J.xH(b.gDu(),a.gDu())},"call$2",null,4,0,null,131,[],187,[],"call"],
+$isEH:true},
+Cn:{
+"^":"Tp:596;",
+call$2:[function(a,b){b.PF()},"call$2",null,4,0,null,442,[],143,[],"call"],
+$isEH:true},
+du:{
+"^":"G8;F1,A4",
+pJ:[function(a){var z=$.Yk().Ej
+if(typeof a!=="string")H.vh(new P.AT(a))
+return z.test(a)},"call$1","guT",2,0,null,279,[]],
+tR:[function(a){var z,y
+z=this.F1
+y=new D.SI(H.VM(new V.qC(P.Py(null,null,null,null,null),null,null),[null,null]),z,null,null,null,null,null,null,null)
+y.H4(z,a)
+return y},"call$1","gUU",2,0,null,98,[]],
+$asG8:function(){return[D.SI]},
+static:{"^":"Oi"}},
+xc:{
+"^":"G8;F1,A4",
+pJ:[function(a){var z=$.uG().Ej
+if(typeof a!=="string")H.vh(new P.AT(a))
+return z.test(a)},"call$1","guT",2,0,null,279,[]],
+tR:[function(a){var z,y
+z=this.F1
+y=new D.SI(H.VM(new V.qC(P.Py(null,null,null,null,null),null,null),[null,null]),z,null,null,null,null,null,null,null)
+y.H4(z,a)
+return y},"call$1","gUU",2,0,null,98,[]],
+$asG8:function(){return[D.SI]},
+static:{"^":"TO"}},
+bv:{
+"^":["D3;zf<,fq,ne,PH,pw,v9,zb,bN:KT@,GR:f5@,cL,LE<-597,Cf,W1,S9,AP,Lk,Fm,KG,mQ,nr,bN,GR,AP,Lk",null,null,null,null,null,null,null,null,null,null,function(){return[C.mI]},null,null,null,null,null,null,null,null,null,null,null,null,null],
+gPj:function(a){return this.KG},
+gHP:function(){return"#/"+H.d(this.KG)},
+gZ0:function(){return this.ne},
+gDD:function(a){return this.PH},
+pC:[function(){var z,y
+this.Fm=this
+z=D.rj
+y=J.O
+this.fq=new D.fJ(this,H.VM(new V.qC(P.Py(null,null,null,y,z),null,null),[y,z]))
+z=D.kx
+y=J.O
+this.ne=new D.jx(this,H.VM(new V.qC(P.Py(null,null,null,y,z),null,null),[y,z]))
+z=D.SI
+y=J.O
+this.PH=new D.du(this,H.VM(new V.qC(P.Py(null,null,null,y,z),null,null),[y,z]))
+z=D.SI
+y=J.O
+this.pw=new D.xc(this,H.VM(new V.qC(P.Py(null,null,null,y,z),null,null),[y,z]))},"call$0","gWR",0,0,null],
+Mq:[function(a){return H.d(this.KG)+"/"+H.d(a)},"call$1","gua",2,0,598,279,[],"relativeLink",358],
+xQ:[function(a){return"#/"+(H.d(this.KG)+"/"+H.d(a))},"call$1","gz9",2,0,598,279,[],"relativeHashLink",358],
+lh:[function(a){return this.ox("coverage").ml(this.fq.gJJ())},"call$0","gWp",0,0,null],
+N3:[function(a){var z,y
+z=H.VM([],[D.kx])
+for(y=J.GP(J.UQ(a,"codes"));y.G();)z.push(J.UQ(y.gl(),"code"))
+this.ne.c2()
+this.ne.pl(a,z)},"call$1","gNk",2,0,null,593,[]],
+ox:[function(a){var z,y
+this.fq.toString
+z=$.cI().Ej
+y=typeof a!=="string"
+if(y)H.vh(new P.AT(a))
+if(z.test(a))return this.fq.ox(a)
+this.ne.toString
+z=$.xN().Ej
+if(y)H.vh(new P.AT(a))
+if(z.test(a))return this.ne.ox(a)
+this.PH.toString
+z=$.Yk().Ej
+if(y)H.vh(new P.AT(a))
+if(z.test(a))return this.PH.ox(a)
+this.pw.toString
+z=$.uG().Ej
+if(y)H.vh(new P.AT(a))
+if(z.test(a))return this.pw.ox(a)
+return this.zf.jU(H.d(this.KG)+"/"+H.d(a)).ml(new D.KQ(this))},"call$1","gRD",2,0,null,599,[]],
+gZA:[function(){return this.v9},null,null,1,0,376,"rootLib",358,359],
+sZA:[function(a){this.v9=F.Wi(this,C.iF,this.v9,a)},null,null,3,0,378,28,[],"rootLib",358],
+gUu:[function(){return this.zb},null,null,1,0,600,"topFrame",358,359],
+sUu:[function(a){this.zb=F.Wi(this,C.ch,this.zb,a)},null,null,3,0,601,28,[],"topFrame",358],
+goc:[function(a){return this.KT},null,null,1,0,365,"name",358,359],
+soc:[function(a,b){this.KT=F.Wi(this,C.YS,this.KT,b)},null,null,3,0,30,28,[],"name",358],
+gzz:[function(){return this.f5},null,null,1,0,365,"vmName",358,359],
+szz:[function(a){this.f5=F.Wi(this,C.KS,this.f5,a)},null,null,3,0,30,28,[],"vmName",358],
+gw2:[function(){return this.cL},null,null,1,0,602,"entry",358,359],
+sw2:[function(a){this.cL=F.Wi(this,C.tP,this.cL,a)},null,null,3,0,603,28,[],"entry",358],
+gCi:[function(){return this.Cf},null,null,1,0,512,"newHeapUsed",358,359],
+sCi:[function(a){this.Cf=F.Wi(this,C.IO,this.Cf,a)},null,null,3,0,411,28,[],"newHeapUsed",358],
+guq:[function(){return this.W1},null,null,1,0,512,"oldHeapUsed",358,359],
+suq:[function(a){this.W1=F.Wi(this,C.ap,this.W1,a)},null,null,3,0,411,28,[],"oldHeapUsed",358],
+gNh:[function(a){return this.S9},null,null,1,0,365,"fileAndLine",358,359],
+bj:function(a,b){return this.gNh(this).call$1(b)},
+sNh:[function(a,b){this.S9=F.Wi(this,C.CX,this.S9,b)},null,null,3,0,30,28,[],"fileAndLine",358],
+tM:[function(a,b){var z,y,x,w
+D.Ch(b,this.zf,this)
+this.nr=!1
+z=J.U6(b)
+if(z.t(b,"rootLib")==null||z.t(b,"timers")==null||z.t(b,"heap")==null){N.Jx("").hh("Malformed 'Isolate' response: "+H.d(b))
+return}y=z.t(b,"rootLib")
+this.v9=F.Wi(this,C.iF,this.v9,y)
+y=z.t(b,"name")
+this.f5=F.Wi(this,C.KS,this.f5,y)
+if(z.t(b,"entry")!=null){y=z.t(b,"entry")
+y=F.Wi(this,C.tP,this.cL,y)
+this.cL=y
+y=J.UQ(y,"name")
+this.KT=F.Wi(this,C.YS,this.KT,y)}else this.KT=F.Wi(this,C.YS,this.KT,"root isolate")
+if(z.t(b,"topFrame")!=null){y=z.t(b,"topFrame")
+this.zb=F.Wi(this,C.ch,this.zb,y)}else this.zb=F.Wi(this,C.ch,this.zb,null)
+x=H.B7([],P.L5(null,null,null,null,null))
+J.kH(z.t(b,"timers"),new D.Qq(x))
+y=this.LE
+w=J.w1(y)
+w.u(y,"total",x.t(0,"time_total_runtime"))
+w.u(y,"compile",x.t(0,"time_compilation"))
+w.u(y,"gc",0)
+w.u(y,"init",J.WB(J.WB(J.WB(x.t(0,"time_script_loading"),x.t(0,"time_creating_snapshot")),x.t(0,"time_isolate_initialization")),x.t(0,"time_bootstrap")))
+w.u(y,"dart",x.t(0,"time_dart_execution"))
+y=J.UQ(z.t(b,"heap"),"usedNew")
+this.Cf=F.Wi(this,C.IO,this.Cf,y)
+z=J.UQ(z.t(b,"heap"),"usedOld")
+this.W1=F.Wi(this,C.ap,this.W1,z)},"call$1","gYh",2,0,null,151,[]],
+$isbv:true},
+D3:{
+"^":"af+Pi;",
+$isd3:true},
+KQ:{
+"^":"Tp:601;a",
+call$1:[function(a){var z=this.a
+return D.Lr(z.zf,z,a)},"call$1",null,2,0,null,190,[],"call"],
+$isEH:true},
+Qq:{
+"^":"Tp:112;a",
+call$1:[function(a){var z=J.U6(a)
+this.a.u(0,z.t(a,"name"),z.t(a,"time"))},"call$1",null,2,0,null,604,[],"call"],
+$isEH:true},
+Qd:{
+"^":["af;Gt,i2>-82,Fm,KG,mQ,nr,bN,GR,AP,Lk",null,function(){return[C.mI]},null,null,null,null,null,null,null,null],
+gzf:function(){return this.Gt},
+VD:[function(a){return this.Gt.jU(this.KG).ml(this.gpn())},"call$0","gQU",0,0,null],
+tM:[function(a,b){this.l9(J.UQ(b,"members"))},"call$1","gYh",2,0,null,151,[]],
+l9:[function(a){var z=[]
+J.kH(this.i2,new D.i6(a,z))
+H.bQ(z,new D.r2(this))
+J.kH(a,new D.JB(this))
+this.Mm()},"call$1","geV",2,0,null,280,[]],
+Mm:[function(){J.kH(this.i2,new D.qj())},"call$0","gU2",0,0,null],
+AQ:[function(a){var z,y,x,w
+z=this.i2
+y=J.U6(z)
+x=y.t(z,a)
+if(x!=null)return x
+w=P.L5(null,null,null,J.O,J.GW)
+w=R.Jk(w)
+x=new D.bv(this.Gt,null,null,null,null,null,null,null,null,null,w,0,0,null,null,null,null,a,"@Isolate",null,null,null,null,null)
+x.nr=C.xB.nC("@Isolate","@")
+x.mQ=D.Io("@Isolate")
+x.DC(0)
+x.pC()
+y.u(z,a,x)
+x.xW(0)
+return x},"call$1","grE",2,0,null,279,[]],
+Ze:[function(a){var z,y,x,w,v
+z=J.UQ(a,"id")
+y=this.i2
+x=J.U6(y)
+w=x.t(y,z)
+if(w!=null){w.eC(a)
+return w}v=P.L5(null,null,null,J.O,J.GW)
+v=R.Jk(v)
+w=new D.bv(this.Gt,null,null,null,null,null,null,null,null,null,v,0,0,null,null,null,null,null,null,null,null,null,null,null)
+w.H4(null,a)
+w.pC()
+x.u(y,z,w)
+w.xW(0)
+return w},"call$1","gwB",2,0,null,190,[]],
+static:{ow:[function(a,b){return J.pb(b,new D.BH(a))},"call$2","nW",4,0,null,279,[],280,[]]}},
+i6:{
+"^":"Tp:348;a,b",
+call$2:[function(a,b){if(D.ow(a,this.a)!==!0)this.b.push(a)},"call$2",null,4,0,null,442,[],272,[],"call"],
+$isEH:true},
+r2:{
+"^":"Tp:112;c",
+call$1:[function(a){J.V1(this.c.i2,a)
+N.Jx("").To("Isolate '"+H.d(a)+"' has gone away.")},"call$1",null,2,0,null,279,[],"call"],
+$isEH:true},
+JB:{
+"^":"Tp:112;d",
+call$1:[function(a){var z,y,x,w,v,u
+z=J.UQ(a,"id")
+y=this.d
+x=y.i2
+w=J.U6(x)
+if(w.t(x,z)==null){v=P.L5(null,null,null,J.O,J.GW)
+v=R.Jk(v)
+u=new D.bv(y.Gt,null,null,null,null,null,null,null,null,null,v,0,0,null,null,null,null,null,null,null,null,null,null,null)
+u.H4(null,a)
+u.pC()
+N.Jx("").To("Created ServiceObject for '"+H.d(u.KG)+"' with type '"+H.d(u.mQ)+"'")
+w.u(x,z,u)}},"call$1",null,2,0,null,151,[],"call"],
+$isEH:true},
+qj:{
+"^":"Tp:605;",
+call$2:[function(a,b){J.am(b)},"call$2",null,4,0,null,442,[],14,[],"call"],
+$isEH:true},
+BH:{
+"^":"Tp:112;a",
+call$1:[function(a){return J.de(J.UQ(a,"id"),this.a)},"call$1",null,2,0,null,606,[],"call"],
+$isEH:true},
+SI:{
+"^":"af;RF,Fm,KG,mQ,nr,bN,GR,AP,Lk",
+bu:[function(a){return P.vW(this.RF)},"call$0","gXo",0,0,null],
+tM:[function(a,b){var z,y,x
+z=this.RF
+z.V1(0)
+z.FV(0,b)
+y=z.Zp
+x=y.t(0,"user_name")
+this.bN=this.ct(0,C.YS,this.bN,x)
+y=y.t(0,"name")
+this.GR=this.ct(this,C.KS,this.GR,y)
+y=this.Fm
+D.Ch(z,y.zf,y)},"call$1","gYh",2,0,null,190,[]],
+FV:[function(a,b){return this.RF.FV(0,b)},"call$1","gDY",2,0,null,109,[]],
+V1:[function(a){return this.RF.V1(0)},"call$0","gRa",0,0,null],
+di:[function(a){return this.RF.Zp.di(a)},"call$1","gmc",2,0,null,272,[]],
+x4:[function(a){return this.RF.Zp.x4(a)},"call$1","gV9",2,0,null,442,[]],
+aN:[function(a,b){return this.RF.Zp.aN(0,b)},"call$1","gjw",2,0,null,117,[]],
+Rz:[function(a,b){return this.RF.Rz(0,b)},"call$1","guH",2,0,null,47,[]],
+t:[function(a,b){return this.RF.Zp.t(0,b)},"call$1","gIA",2,0,null,442,[]],
+u:[function(a,b,c){this.RF.u(0,b,c)
+return c},"call$2","gj3",4,0,null,442,[],272,[]],
+gl0:function(a){var z=this.RF.Zp
+return z.gB(z)===0},
+gor:function(a){var z=this.RF.Zp
+return z.gB(z)!==0},
+gvc:function(a){var z=this.RF.Zp
+return z.gvc(z)},
+gUQ:function(a){var z=this.RF.Zp
+return z.gUQ(z)},
+gB:function(a){var z=this.RF.Zp
+return z.gB(z)},
+BN:[function(a){var z=this.RF
+return z.BN(z)},"call$0","gDx",0,0,390],
+nq:[function(a,b){var z=this.RF
+return z.nq(z,b)},"call$1","giA",2,0,null,27,[]],
+ct:[function(a,b,c,d){return F.Wi(this.RF,b,c,d)},"call$3","gAn",6,0,null,253,[],229,[],230,[]],
+k0:[function(a){return},"call$0","gqw",0,0,114],
+ni:[function(a){this.RF.AP=null
+return},"call$0","gl1",0,0,114],
+gUj:function(a){var z=this.RF
+return z.gUj(z)},
+gnz:function(a){var z,y
+z=this.RF.AP
+if(z!=null){y=z.iE
+z=y==null?z!=null:y!==z}else z=!1
+return z},
+$isSI:true,
+$isqC:true,
+$asqC:function(){return[null,null]},
+$isZ0:true,
+$asZ0:function(){return[null,null]},
+$isd3:true},
+pt:{
+"^":"wVq;J6,LD,AP,Lk,Fm,KG,mQ,nr,bN,GR,AP,Lk",
+gfY:[function(a){return this.J6},null,null,1,0,365,"kind",358,359],
+sfY:[function(a,b){this.J6=F.Wi(this,C.fy,this.J6,b)},null,null,3,0,30,28,[],"kind",358],
+gG1:[function(a){return this.LD},null,null,1,0,365,"message",358,359],
+sG1:[function(a,b){this.LD=F.Wi(this,C.h2,this.LD,b)},null,null,3,0,30,28,[],"message",358],
+tM:[function(a,b){var z,y
+z=J.U6(b)
+y=z.t(b,"kind")
+this.J6=F.Wi(this,C.fy,this.J6,y)
+z=z.t(b,"message")
+this.LD=F.Wi(this,C.h2,this.LD,z)
+z="ServiceError "+H.d(this.J6)
+z=this.ct(this,C.YS,this.bN,z)
+this.bN=z
+this.GR=this.ct(this,C.KS,this.GR,z)},"call$1","gYh",2,0,null,151,[]]},
+wVq:{
+"^":"af+Pi;",
+$isd3:true},
+c2:{
+"^":["a;Rd>-369,a4>-389",function(){return[C.Nw]},function(){return[C.Nw]}],
+$isc2:true},
+rj:{
+"^":["dZL;Sw<-82,u9<-82,Gz,J6,Ge,wA,AP,Lk,Fm,KG,mQ,nr,bN,GR,AP,Lk",function(){return[C.Nw]},function(){return[C.Nw]},null,null,null,null,null,null,null,null,null,null,null,null,null,null],
+gtD:[function(a){return this.Gz},null,null,1,0,361,"library",358,359],
+stD:[function(a,b){this.Gz=F.Wi(this,C.EV,this.Gz,b)},null,null,3,0,362,28,[],"library",358],
+gfY:[function(a){return this.J6},null,null,1,0,365,"kind",358,359],
+sfY:[function(a,b){this.J6=F.Wi(this,C.fy,this.J6,b)},null,null,3,0,30,28,[],"kind",358],
+tM:[function(a,b){var z,y,x
+z=J.U6(b)
+if(J.de(z.t(b,"type"),"Error")&&J.de(z.t(b,"kind"),"NotFoundError")){N.Jx("").To(z.t(b,"message"))
+return}y=z.t(b,"name")
+this.wA=y
+x=J.U6(y)
+y=x.yn(y,J.WB(x.cn(y,"/"),1))
+this.Ge=y
+this.bN=this.ct(this,C.YS,this.bN,y)
+y=this.wA
+this.GR=this.ct(this,C.KS,this.GR,y)
+y=z.t(b,"kind")
+this.J6=F.Wi(this,C.fy,this.J6,y)
+this.W8(z.t(b,"source"))},"call$1","gYh",2,0,null,190,[]],
+aq:[function(a){var z,y,x,w,v
+if(this.nr)this.xW(0)
+z=J.U6(a)
+y=this.u9
+x=J.w1(y)
+w=0
+while(!0){v=z.gB(a)
+if(typeof v!=="number")return H.s(v)
+if(!(w<v))break
+x.u(y,z.t(a,w),z.t(a,w+1))
+w+=2}},"call$1","gHS",2,0,null,607,[]],
+W8:[function(a){var z,y,x,w,v
+this.nr=!0
+if(a==null)return
+z=J.uH(a,"\n")
+if(z.length===0)return
+this.nr=!1
+y=this.Sw
+x=J.w1(y)
+x.V1(y)
+N.Jx("").To("Adding "+z.length+" source lines for "+H.d(this.wA))
+for(w=0;w<z.length;w=v){v=w+1
+x.h(y,new D.c2(v,z[w]))}},"call$1","gf4",2,0,null,32,[]],
+$isrj:true},
+dZL:{
+"^":"af+Pi;",
+$isd3:true},
+N8:{
+"^":"a;Yu<,Du<,fF<",
+$isN8:true},
+Q4:{
+"^":["Pi;Yu<-369,m7<-389,L4<-389,AP,Lk",function(){return[C.mI]},function(){return[C.mI]},function(){return[C.mI]},null,null],
+xt:[function(){var z,y
+z=this.Yu
+y=J.x(z)
+if(y.n(z,0))return""
+return"0x"+y.WZ(z,16)},"call$0","gZd",0,0,365,"formattedAddress",358],
+Io:[function(a){var z
+if(a==null)return""
+z=J.UQ(a.gyP(),this.Yu)
+if(z==null)return""
+if(J.de(z.gfF(),z.gDu()))return""
+return D.Tn(z.gfF(),a.glt())+" ("+H.d(z.gfF())+")"},"call$1","gcQ",2,0,608,143,[],"formattedInclusive",358],
+HU:[function(a){var z
+if(a==null)return""
+z=J.UQ(a.gyP(),this.Yu)
+if(z==null)return""
+return D.Tn(z.gDu(),a.glt())+" ("+H.d(z.gDu())+")"},"call$1","gGK",2,0,608,143,[],"formattedExclusive",358],
+$isQ4:true,
+static:{Tn:[function(a,b){return C.CD.yM(100*J.FW(a,b),2)+"%"},"call$2","Ai",4,0,null,131,[],238,[]]}},
+WAE:{
+"^":"a;uX",
+bu:[function(a){return this.uX},"call$0","gXo",0,0,null],
+static:{"^":"j6,pg,WAg,PM",CQ:[function(a){var z=J.x(a)
+if(z.n(a,"Native"))return C.nj
+else if(z.n(a,"Dart"))return C.l8
+else if(z.n(a,"Collected"))return C.WA
+else if(z.n(a,"Reused"))return C.yP
+N.Jx("").j2("Unknown code kind "+H.d(a))
+throw H.b(P.hS())},"call$1","J6",2,0,null,91,[]]}},
+Vi:{
+"^":"a;tT>,Av<",
+$isVi:true},
+kx:{
+"^":["w8F;J6,jv,Du@-369,fF@-369,vg@-369,Mb@-369,VS<-82,hw<-82,va<-82,yP<-82,mM,qH,MO,oc*,zz@,TD,AP,Lk,Fm,KG,mQ,nr,bN,GR,AP,Lk",null,null,function(){return[C.Nw]},function(){return[C.Nw]},function(){return[C.Nw]},function(){return[C.Nw]},function(){return[C.Nw]},function(){return[C.Nw]},function(){return[C.Nw]},function(){return[C.Nw]},null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],
+gfY:[function(a){return this.J6},null,null,1,0,609,"kind",358,359],
+sfY:[function(a,b){this.J6=F.Wi(this,C.fy,this.J6,b)},null,null,3,0,610,28,[],"kind",358],
+glt:[function(){return this.jv},null,null,1,0,512,"totalSamplesInProfile",358,359],
+slt:[function(a){this.jv=F.Wi(this,C.QK,this.jv,a)},null,null,3,0,411,28,[],"totalSamplesInProfile",358],
+gAg:[function(){return this.mM},null,null,1,0,365,"formattedInclusiveTicks",358,359],
+sAg:[function(a){this.mM=F.Wi(this,C.EF,this.mM,a)},null,null,3,0,30,28,[],"formattedInclusiveTicks",358],
+ga3:[function(){return this.qH},null,null,1,0,365,"formattedExclusiveTicks",358,359],
+sa3:[function(a){this.qH=F.Wi(this,C.uU,this.qH,a)},null,null,3,0,30,28,[],"formattedExclusiveTicks",358],
+gMj:[function(a){return this.MO},null,null,1,0,376,"function",358,359],
+sMj:[function(a,b){this.MO=F.Wi(this,C.nf,this.MO,b)},null,null,3,0,378,28,[],"function",358],
+PF:[function(){this.jv=F.Wi(this,C.QK,this.jv,0)
+this.Du=0
+this.fF=0
+this.mM=F.Wi(this,C.EF,this.mM,"")
+this.qH=F.Wi(this,C.uU,this.qH,"")
+J.U2(this.VS)
+J.U2(this.hw)
+J.U2(this.yP)},"call$0","gEQ",0,0,null],
+VD:[function(a){if(J.de(this.J6,C.l8))return D.af.prototype.VD.call(this,this)
+return P.Ab(this,null)},"call$0","gQU",0,0,null],
+fp:[function(a,b,c){var z,y,x,w,v,u
+z=J.U6(b)
+y=J.w1(a)
+x=0
+while(!0){w=z.gB(b)
+if(typeof w!=="number")return H.s(w)
+if(!(x<w))break
+v=H.BU(z.t(b,x),null,null)
+u=H.BU(z.t(b,x+1),null,null)
+if(v>>>0!==v||v>=c.length)return H.e(c,v)
+y.h(a,new D.Vi(c[v],u))
+x+=2}y.GT(a,new D.fx())},"call$3","goR",6,0,null,611,[],235,[],612,[]],
+eL:[function(a,b,c){var z,y
+this.jv=F.Wi(this,C.QK,this.jv,c)
+z=J.U6(a)
+this.fF=H.BU(z.t(a,"inclusive_ticks"),null,null)
+this.Du=H.BU(z.t(a,"exclusive_ticks"),null,null)
+this.fp(this.VS,z.t(a,"callers"),b)
+this.fp(this.hw,z.t(a,"callees"),b)
+y=z.t(a,"ticks")
+if(y!=null)this.pd(y)
+z=D.Vb(this.fF,this.jv)+" ("+H.d(this.fF)+")"
+this.mM=F.Wi(this,C.EF,this.mM,z)
+z=D.Vb(this.Du,this.jv)+" ("+H.d(this.fF)+")"
+this.qH=F.Wi(this,C.uU,this.qH,z)},"call$3","gI1",6,0,null,613,[],594,[],614,[]],
+tM:[function(a,b){var z,y,x
+z=J.U6(b)
+this.oc=z.t(b,"user_name")
+this.zz=z.t(b,"name")
+y=D.CQ(z.t(b,"kind"))
+this.J6=F.Wi(this,C.fy,this.J6,y)
+this.vg=H.BU(z.t(b,"start"),16,null)
+this.Mb=H.BU(z.t(b,"end"),16,null)
+y=this.Fm
+y=D.Lr(y.zf,y,z.t(b,"function"))
+this.MO=F.Wi(this,C.nf,this.MO,y)
+x=z.t(b,"disassembly")
+if(x!=null)this.xs(x)
+z=this.va
+y=J.U6(z)
+this.nr=J.de(y.gB(z),0)&&J.de(this.J6,C.l8)
+z=!J.de(y.gB(z),0)&&J.de(this.J6,C.l8)
+this.TD=F.Wi(this,C.zS,this.TD,z)},"call$1","gYh",2,0,null,190,[]],
+gvS:[function(){return this.TD},null,null,1,0,390,"hasDisassembly",358,359],
+svS:[function(a){this.TD=F.Wi(this,C.zS,this.TD,a)},null,null,3,0,391,28,[],"hasDisassembly",358],
+xs:[function(a){var z,y,x,w,v,u,t,s
+z=this.va
+y=J.w1(z)
+y.V1(z)
+x=J.U6(a)
+w=0
+while(!0){v=x.gB(a)
+if(typeof v!=="number")return H.s(v)
+if(!(w<v))break
+u=x.t(a,w+1)
+t=x.t(a,w+2)
+s=!J.de(x.t(a,w),"")?H.BU(x.t(a,w),null,null):0
+y.h(z,new D.Q4(s,u,t,null,null))
+w+=3}},"call$1","gxk",2,0,null,615,[]],
+pd:[function(a){var z,y,x,w,v,u
+z=J.U6(a)
+y=this.yP
+x=J.w1(y)
+w=0
+while(!0){v=z.gB(a)
+if(typeof v!=="number")return H.s(v)
+if(!(w<v))break
+u=H.BU(z.t(a,w),16,null)
+x.u(y,u,new D.N8(u,H.BU(z.t(a,w+1),null,null),H.BU(z.t(a,w+2),null,null)))
+w+=3}},"call$1","gfi",2,0,null,616,[]],
+tg:[function(a,b){J.J5(b,this.vg)
+return!1},"call$1","gdj",2,0,null,617,[]],
+QQ:[function(){return this.F3(this.VS)},"call$0","gOh",0,0,null],
+dJ:[function(a){return this.Ov(this.VS,a)},"call$1","gf7",2,0,null,143,[]],
+F3:[function(a){var z,y,x
+for(z=J.GP(a),y=0;z.G();){x=z.gl().gAv()
+if(typeof x!=="number")return H.s(x)
+y+=x}return y},"call$1","gh9",2,0,null,611,[]],
+Ov:[function(a,b){var z,y
+for(z=J.GP(a);z.G();){y=z.gl()
+if(J.de(J.on(y),b))return y.gAv()}return 0},"call$2","gHp",4,0,null,611,[],143,[]],
+$iskx:true,
+static:{Vb:[function(a,b){return C.CD.yM(100*J.FW(a,b),2)+"%"},"call$2","Mr",4,0,null,131,[],238,[]]}},
+w8F:{
+"^":"af+Pi;",
+$isd3:true},
+fx:{
+"^":"Tp:348;",
+call$2:[function(a,b){return J.xH(b.gAv(),a.gAv())},"call$2",null,4,0,null,131,[],187,[],"call"],
+$isEH:true},
+af:{
+"^":"Pi;bN@,GR@",
+gF1:[function(a){return this.Fm},null,null,1,0,357,"isolate",358],
+gzf:[function(){return this.Fm.zf},null,null,1,0,618,"vm",358],
+gPj:[function(a){var z,y
+z=this.Fm
+y=this.KG
+return H.d(z.KG)+"/"+H.d(y)},null,null,1,0,365,"link",358],
+gHP:[function(){var z,y
+z=this.Fm
+y=this.KG
+return"#/"+(H.d(z.KG)+"/"+H.d(y))},null,null,1,0,365,"hashLink",358],
+gjO:[function(a){return this.KG},null,null,1,0,365,"id",358],
+gzS:[function(){return this.mQ},null,null,1,0,365,"serviceType",358],
+goc:[function(a){return this.gbN()},null,null,1,0,365,"name",358,359],
+soc:[function(a,b){this.sbN(this.ct(this,C.YS,this.gbN(),b))},null,null,3,0,30,28,[],"name",358],
+gzz:[function(){return this.gGR()},null,null,1,0,365,"vmName",358,359],
+szz:[function(a){this.sGR(this.ct(this,C.KS,this.gGR(),a))},null,null,3,0,30,28,[],"vmName",358],
+xW:[function(a){if(!this.nr)return P.Ab(this,null)
+return this.VD(0)},"call$0","gnB",0,0,null],
+VD:[function(a){if(J.de(this.KG,""))return P.Ab(this,null)
+return this.Fm.zf.jU(this.gPj(this)).ml(this.gpn())},"call$0","gQU",0,0,null],
+eC:[function(a){var z=J.U6(a)
+if(J.de(z.t(a,"type"),"Error")&&!J.de(this.mQ,"Error"))return D.Lr(this.gzf(),this.Fm,a)
+this.KG=z.t(a,"id")
+this.mQ=D.Io(z.t(a,"type"))
+this.tM(0,a)
+return this},"call$1","gpn",2,0,619,190,[]],
+DC:[function(a){var z=this.nr?" Created from reference.":""
+N.Jx("").To("Created ServiceObject for '"+H.d(this.KG)+"' with type '"+H.d(this.mQ)+"'."+z)},"call$0","gEX",0,0,null],
+H4:function(a,b){var z=J.U6(b)
+this.KG=z.t(b,"id")
+this.nr=J.co(z.t(b,"type"),"@")
+this.mQ=D.Io(z.t(b,"type"))
+this.DC(0)
+this.eC(b)}},
+UZ:{
+"^":"Tp:348;a,b,c",
+call$2:[function(a,b){var z,y
+z=J.x(b)
+y=typeof b==="object"&&b!==null&&!!z.$isqC
+if(y&&D.Er(b))this.a.u(0,a,D.Lr(this.b,this.c,b))
+else if(typeof b==="object"&&b!==null&&!!z.$iswn)D.f3(b,this.b,this.c)
+else if(y)D.Gf(b,this.b,this.c)},"call$2",null,4,0,null,442,[],272,[],"call"],
+$isEH:true},
+No:{
+"^":["d3;tl@-504",function(){return[C.Nw]}],
+gi2:[function(a){return this.tl},null,null,1,0,505,"isolates",358],
+pC:[function(){var z,y
+z=J.O
+y=D.bv
+y=new D.Qd(this,H.VM(new V.qC(P.Py(null,null,null,z,y),null,null),[z,y]),null,"isolates","IsolateList",null,null,null,null,null)
+y.nr=C.xB.nC("IsolateList","@")
+y.mQ=D.Io("IsolateList")
+y.DC(0)
+z=y.ct(y,C.YS,y.bN,"IsolateList")
+y.bN=z
+y.GR=y.ct(y,C.KS,y.GR,z)
+this.tl=y},"call$0","gWR",0,0,null],
+jU:[function(a){return this.z6(0,a).ml(new D.Ey(a)).OA(new D.tm())},"call$1","gGp",2,0,null,279,[]]},
+Ey:{
+"^":"Tp:112;a",
+call$1:[function(a){var z,y,x,w
+try{z=C.xr.kV(a)
+N.Jx("").To("Decoded "+H.d(this.a))
+x=R.Jk(z)
+return x}catch(w){x=H.Ru(w)
+y=x
+x=H.B7(["type","Error","id","","kind","DecodeError","message",H.d(y)],P.L5(null,null,null,null,null))
+x=R.Jk(x)
+return x}},"call$1",null,2,0,null,497,[],"call"],
+$isEH:true},
+tm:{
+"^":"Tp:112;",
+call$1:[function(a){var z=H.B7(["type","Error","id","","kind","LastResort","message",H.d(a)],P.L5(null,null,null,null,null))
+return R.Jk(z)},"call$1",null,2,0,null,159,[],"call"],
+$isEH:true}}],["service_html","package:observatory/service_html.dart",,U,{
+"^":"",
+XK:{
+"^":["No;Yu<,tl-504,R9,wv,V2,me",null,function(){return[C.Nw]},null,null,null,null],
+z6:[function(a,b){var z=this.Yu
+N.Jx("").To("Fetching "+H.d(b)+" from "+z)
+return W.It(C.xB.g(z,b),null,null).OA(new U.dT())},"call$1","gpV",2,0,null,279,[]]},
+dT:{
+"^":"Tp:112;",
+call$1:[function(a){N.Jx("").hh("HttpRequest.getString failed.")
+return C.xr.KP(H.B7(["type","Error","id","","kind","NetworkError","message","Could not connect to service. Check that you started the VM with the following flags:\n --enable-vm-service --pin-isolates"],P.L5(null,null,null,null,null)))},"call$1",null,2,0,null,159,[],"call"],
+$isEH:true},
+ho:{
+"^":["No;ja,yb,tl-504,R9,wv,V2,me",null,null,function(){return[C.Nw]},null,null,null,null],
+bI:[function(a){var z,y,x,w,v
+z=J.RE(a)
+y=J.UQ(z.gRn(a),"id")
+x=J.UQ(z.gRn(a),"name")
+w=J.UQ(z.gRn(a),"data")
+if(!J.de(x,"observatoryData"))return
+z=this.ja
+v=z.t(0,y)
+z.Rz(0,y)
+J.Xf(v,w)},"call$1","gVx",2,0,157,20,[]],
+z6:[function(a,b){var z,y,x
+z=""+this.yb
+y=H.B7([],P.L5(null,null,null,null,null))
+y.u(0,"id",z)
+y.u(0,"method","observatoryQuery")
+y.u(0,"query","/"+H.d(b))
+this.yb=this.yb+1
+x=H.VM(new P.Zf(P.Dt(null)),[null])
+this.ja.u(0,z,x)
+J.Ih(W.Pv(window.parent),C.xr.KP(y),"*")
+return x.MM},"call$1","gpV",2,0,null,261,[]],
+PI:function(){var z=C.Ns.aM(window)
+H.VM(new W.Ov(0,z.uv,z.Ph,W.aF(this.gVx()),z.Sg),[H.Kp(z,0)]).Zz()
+N.Jx("").To("Connected to DartiumVM")}}}],["service_object_view_element","package:observatory/src/elements/service_view.dart",,U,{
+"^":"",
+ob:{
+"^":["V22;mC%-381,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0-375",null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.Nw]}],
+gWA:[function(a){return a.mC},null,null,1,0,361,"object",358,377],
+sWA:[function(a,b){a.mC=this.ct(a,C.VJ,a.mC,b)},null,null,3,0,362,28,[],"object",358],
+hu:[function(a){var z
+switch(a.mC.gzS()){case"AllocationProfile":z=W.r3("heap-profile",null)
+J.CJ(z,a.mC)
+return z
+case"BreakpointList":z=W.r3("breakpoint-list",null)
+J.X8(z,a.mC)
+return z
+case"Class":z=W.r3("class-view",null)
+J.QQ(z,a.mC)
+return z
+case"Code":z=W.r3("code-view",null)
+J.fH(z,a.mC)
+return z
+case"Error":z=W.r3("error-view",null)
+J.Qr(z,a.mC)
+return z
+case"Field":z=W.r3("field-view",null)
+J.JZ(z,a.mC)
+return z
+case"Function":z=W.r3("function-view",null)
+J.dk(z,a.mC)
+return z
+case"Array":case"Bool":case"Closure":case"GrowableObjectArray":case"Instance":case"Smi":case"String":z=W.r3("instance-view",null)
+J.ti(z,a.mC)
+return z
+case"IsolateList":z=W.r3("isolate-list",null)
+J.oq(z,a.mC)
+return z
+case"Library":z=W.r3("library-view",null)
+J.F6(z,a.mC)
+return z
+case"Profile":z=W.r3("isolate-profile",null)
+J.CJ(z,a.mC)
+return z
+case"Script":z=W.r3("script-view",null)
+J.Tt(z,a.mC)
+return z
+case"StackTrace":z=W.r3("stack-trace",null)
+J.yO(z,a.mC)
+return z
+default:return}},"call$0","gbs",0,0,620,"_constructElementForObject"],
+fa:[function(a,b){var z,y,x
+a.textContent=""
+z=a.mC
+if(z==null){N.Jx("").To("Viewing null object.")
+return}y=z.gzS()
+x=this.hu(a)
+if(x==null){N.Jx("").To("Unable to find a view element for '"+H.d(y)+"'")
+return}a.appendChild(x)
+N.Jx("").To("Viewing object of '"+H.d(y)+"'")},"call$1","gYQ",2,0,112,229,[],"objectChanged"],
+"@":function(){return[C.hpj]},
+static:{zy:[function(a){var z,y,x,w
z=$.Nd()
y=P.Py(null,null,null,J.O,W.I0)
x=J.O
@@ -22794,56 +22985,36 @@
a.SO=z
a.B7=y
a.X0=w
-C.cJ.ZL(a)
-C.cJ.G6(a)
-return a},null,null,0,0,113,"new ScriptViewElement$created"]}},
-"+ScriptViewElement":[614],
-oaa:{
-"^":"PO+Pi;",
-$isd3:true},
-qq:{
-"^":"Tp:357;a-77",
-call$1:[function(a){var z,y
-z=this.a
-y=J.RE(z)
-y.gpC(z).oe(J.UQ(a,"coverage"))
-y.ct(z,C.YH,"",y.gXa(z))},"call$1",null,2,0,357,615,[],"call"],
-$isEH:true},
-"+ScriptViewElement_refreshCoverage_closure":[415],
-FC:{
-"^":"Tp:346;",
-call$2:[function(a,b){P.JS("refreshCoverage "+H.d(a)+" "+H.d(b))},"call$2",null,4,0,346,18,[],377,[],"call"],
-$isEH:true},
-"+ScriptViewElement_refreshCoverage_closure":[415]}],["service_ref_element","package:observatory/src/elements/service_ref.dart",,Q,{
+C.ZO.ZL(a)
+C.ZO.G6(a)
+return a},null,null,0,0,115,"new ServiceObjectViewElement$created"]}},
+"+ServiceObjectViewElement":[621],
+V22:{
+"^":"uL+Pi;",
+$isd3:true}}],["service_ref_element","package:observatory/src/elements/service_ref.dart",,Q,{
"^":"",
xI:{
-"^":["Sq;tY%-410,Pe%-417,AP,fn,pC-411,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0-412",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
-gnv:[function(a){return a.tY},null,null,1,0,354,"ref",355,397],
-snv:[function(a,b){a.tY=this.ct(a,C.kY,a.tY,b)},null,null,3,0,357,23,[],"ref",355],
-gjT:[function(a){return a.Pe},null,null,1,0,380,"internal",355,397],
-sjT:[function(a,b){a.Pe=this.ct(a,C.zD,a.Pe,b)},null,null,3,0,381,23,[],"internal",355],
+"^":["Ds;tY%-381,Pe%-382,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0-375",null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.Nw]}],
+gnv:[function(a){return a.tY},null,null,1,0,361,"ref",358,377],
+snv:[function(a,b){a.tY=this.ct(a,C.kY,a.tY,b)},null,null,3,0,362,28,[],"ref",358],
+gjT:[function(a){return a.Pe},null,null,1,0,390,"internal",358,377],
+sjT:[function(a,b){a.Pe=this.ct(a,C.zD,a.Pe,b)},null,null,3,0,391,28,[],"internal",358],
aZ:[function(a,b){this.ct(a,C.Fh,"",this.gO3(a))
this.ct(a,C.YS,[],this.goc(a))
-this.ct(a,C.bA,"",this.gJp(a))},"call$1","gma",2,0,158,233,[],"refChanged"],
-gO3:[function(a){var z=a.pC
-if(z==null||a.tY==null)return""
-return z.rn(this.grp(a))},null,null,1,0,370,"url"],
-grp:[function(a){var z=a.tY
-return z==null?"":J.UQ(z,"id")},null,null,1,0,370,"objectId"],
-gJp:[function(a){var z,y
-z=a.tY
-if(z==null)return""
-y=J.UQ(z,"name")
-return y!=null?y:""},null,null,1,0,370,"hoverText"],
-goc:[function(a){var z,y
-z=a.tY
+this.ct(a,C.bA,"",this.gD5(a))},"call$1","gma",2,0,157,229,[],"refChanged"],
+gO3:[function(a){var z=a.tY
if(z==null)return"NULL REF"
-y=a.Pe===!0?"name":"user_name"
-if(J.UQ(z,y)!=null)return J.UQ(a.tY,y)
-else if(J.UQ(a.tY,"name")!=null)return J.UQ(a.tY,"name")
-else if(J.UQ(a.tY,"user_name")!=null)return J.UQ(a.tY,"user_name")
-return""},null,null,1,0,370,"name"],
-"@":function(){return[C.Ldf]},
+return z.gHP()},null,null,1,0,365,"url"],
+gOL:[function(a){var z=a.tY
+if(z==null)return"NULL REF"
+return J.F8(z)},null,null,1,0,365,"serviceId"],
+gD5:[function(a){var z=a.tY
+if(z==null)return"NULL REF"
+return z.gzz()},null,null,1,0,365,"hoverText"],
+goc:[function(a){var z=a.tY
+if(z==null)return"NULL REF"
+return J.O6(z)},null,null,1,0,365,"name"],
+"@":function(){return[C.JD]},
static:{lK:[function(a){var z,y,x,w
z=$.Nd()
y=P.Py(null,null,null,J.O,W.I0)
@@ -22856,85 +23027,66 @@
a.X0=w
C.wU.ZL(a)
C.wU.G6(a)
-return a},null,null,0,0,113,"new ServiceRefElement$created"]}},
-"+ServiceRefElement":[616],
-Sq:{
-"^":"PO+Pi;",
+return a},null,null,0,0,115,"new ServiceRefElement$created"]}},
+"+ServiceRefElement":[622],
+Ds:{
+"^":"uL+Pi;",
$isd3:true}}],["stack_frame_element","package:observatory/src/elements/stack_frame.dart",,K,{
"^":"",
nm:{
-"^":["q2;Va%-410,AP,fn,pC-411,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0-412",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
-gz1:[function(a){return a.Va},null,null,1,0,354,"frame",355,397],
-sz1:[function(a,b){a.Va=this.ct(a,C.rE,a.Va,b)},null,null,3,0,357,23,[],"frame",355],
+"^":["V23;Va%-623,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0-375",null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.Nw]}],
+gz1:[function(a){return a.Va},null,null,1,0,600,"frame",358,377],
+sz1:[function(a,b){a.Va=this.ct(a,C.rE,a.Va,b)},null,null,3,0,601,28,[],"frame",358],
"@":function(){return[C.pE]},
-static:{an:[function(a){var z,y,x,w,v
-z=H.B7([],P.L5(null,null,null,null,null))
-z=R.Jk(z)
-y=$.Nd()
-x=P.Py(null,null,null,J.O,W.I0)
-w=J.O
-v=W.cv
-v=H.VM(new V.qC(P.Py(null,null,null,w,v),null,null),[w,v])
-a.Va=z
-a.SO=y
-a.B7=x
-a.X0=v
+static:{an:[function(a){var z,y,x,w
+z=$.Nd()
+y=P.Py(null,null,null,J.O,W.I0)
+x=J.O
+w=W.cv
+w=H.VM(new V.qC(P.Py(null,null,null,x,w),null,null),[x,w])
+a.SO=z
+a.B7=y
+a.X0=w
C.dX.ZL(a)
C.dX.G6(a)
-return a},null,null,0,0,113,"new StackFrameElement$created"]}},
-"+StackFrameElement":[617],
-q2:{
-"^":"PO+Pi;",
+return a},null,null,0,0,115,"new StackFrameElement$created"]}},
+"+StackFrameElement":[624],
+V23:{
+"^":"uL+Pi;",
$isd3:true}}],["stack_trace_element","package:observatory/src/elements/stack_trace.dart",,X,{
"^":"",
-uwf:{
-"^":["q3;Up%-410,AP,fn,pC-411,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0-412",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
-gtN:[function(a){return a.Up},null,null,1,0,354,"trace",355,397],
-stN:[function(a,b){a.Up=this.ct(a,C.kw,a.Up,b)},null,null,3,0,357,23,[],"trace",355],
-RF:[function(a,b){a.pC.oX("stacktrace").ml(new X.At(a)).OA(new X.Sb()).YM(b)},"call$1","gvC",2,0,158,413,[],"refresh"],
-"@":function(){return[C.Yi]},
-static:{bV:[function(a){var z,y,x,w,v
-z=H.B7([],P.L5(null,null,null,null,null))
-z=R.Jk(z)
-y=$.Nd()
-x=P.Py(null,null,null,J.O,W.I0)
-w=J.O
-v=W.cv
-v=H.VM(new V.qC(P.Py(null,null,null,w,v),null,null),[w,v])
-a.Up=z
-a.SO=y
-a.B7=x
-a.X0=v
+Vu:{
+"^":["V24;B3%-374,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0-375",null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.Nw]}],
+gtN:[function(a){return a.B3},null,null,1,0,376,"trace",358,377],
+stN:[function(a,b){a.B3=this.ct(a,C.kw,a.B3,b)},null,null,3,0,378,28,[],"trace",358],
+yv:[function(a,b){J.am(a.B3).YM(b)},"call$1","gvC",2,0,157,379,[],"refresh"],
+"@":function(){return[C.js]},
+static:{bV:[function(a){var z,y,x,w
+z=$.Nd()
+y=P.Py(null,null,null,J.O,W.I0)
+x=J.O
+w=W.cv
+w=H.VM(new V.qC(P.Py(null,null,null,x,w),null,null),[x,w])
+a.SO=z
+a.B7=y
+a.X0=w
C.bg.ZL(a)
C.bg.G6(a)
-return a},null,null,0,0,113,"new StackTraceElement$created"]}},
-"+StackTraceElement":[618],
-q3:{
-"^":"PO+Pi;",
-$isd3:true},
-At:{
-"^":"Tp:107;a-77",
-call$1:[function(a){var z,y
-z=this.a
-y=J.RE(z)
-y.sUp(z,y.ct(z,C.kw,y.gUp(z),a))},"call$1",null,2,0,107,149,[],"call"],
-$isEH:true},
-"+StackTraceElement_refresh_closure":[415],
-Sb:{
-"^":"Tp:346;",
-call$2:[function(a,b){N.Jx("").hh("Error while reloading stack trace: "+H.d(a)+"\n"+H.d(b))},"call$2",null,4,0,346,18,[],416,[],"call"],
-$isEH:true},
-"+StackTraceElement_refresh_closure":[415]}],["template_binding","package:template_binding/template_binding.dart",,M,{
+return a},null,null,0,0,115,"new StackTraceElement$created"]}},
+"+StackTraceElement":[625],
+V24:{
+"^":"uL+Pi;",
+$isd3:true}}],["template_binding","package:template_binding/template_binding.dart",,M,{
"^":"",
IP:[function(a){var z=J.RE(a)
if(typeof a==="object"&&a!==null&&!!z.$isQl)return C.i3.f0(a)
switch(z.gt5(a)){case"checkbox":return $.FF().aM(a)
case"radio":case"select-multiple":case"select-one":return z.gi9(a)
-default:return z.gLm(a)}},"call$1","nc",2,0,null,129,[]],
+default:return z.gLm(a)}},"call$1","nc",2,0,null,132,[]],
iX:[function(a,b){var z,y,x,w,v,u,t,s
z=M.pN(a,b)
y=J.x(a)
-if(typeof a==="object"&&a!==null&&!!y.$iscv)if(y.gqn(a)!=="template")x=y.gQg(a).MW.hasAttribute("template")===!0&&C.uE.x4(y.gqn(a))===!0
+if(typeof a==="object"&&a!==null&&!!y.$iscv)if(a.localName!=="template")x=y.gQg(a).MW.hasAttribute("template")===!0&&C.uE.x4(y.gqn(a))===!0
else x=!0
else x=!1
w=x?a:null
@@ -22942,7 +23094,7 @@
if(s==null)continue
if(u==null)u=P.Py(null,null,null,null,null)
u.u(0,t,s)}if(z==null&&u==null&&w==null)return
-return new M.XI(z,u,w,t)},"call$2","Nc",4,0,null,264,[],284,[]],
+return new M.K6(z,u,w,t)},"call$2","Nc",4,0,null,260,[],283,[]],
HP:[function(a,b,c,d,e){var z,y,x
if(b==null)return
if(b.gN2()!=null){z=b.gN2()
@@ -22952,16 +23104,16 @@
if(z.gwd(b)==null)return
y=b.gTe()-a.childNodes.length
for(x=a.firstChild;x!=null;x=x.nextSibling,++y){if(y<0)continue
-M.HP(x,J.UQ(z.gwd(b),y),c,d,e)}},"call$5","Yy",10,0,null,264,[],149,[],285,[],284,[],286,[]],
+M.HP(x,J.UQ(z.gwd(b),y),c,d,e)}},"call$5","Yy",10,0,null,260,[],151,[],284,[],283,[],285,[]],
bM:[function(a){var z
for(;z=J.RE(a),z.gKV(a)!=null;)a=z.gKV(a)
if(typeof a==="object"&&a!==null&&!!z.$isQF||typeof a==="object"&&a!==null&&!!z.$isI0||typeof a==="object"&&a!==null&&!!z.$ishy)return a
-return},"call$1","ay",2,0,null,264,[]],
+return},"call$1","ay",2,0,null,260,[]],
pN:[function(a,b){var z,y
z=J.x(a)
if(typeof a==="object"&&a!==null&&!!z.$iscv)return M.F5(a,b)
if(typeof a==="object"&&a!==null&&!!z.$iskJ){y=M.F4(a.textContent,"text",a,b)
-if(y!=null)return["text",y]}return},"call$2","SG",4,0,null,264,[],284,[]],
+if(y!=null)return["text",y]}return},"call$2","SG",4,0,null,260,[],283,[]],
F5:[function(a,b){var z,y,x
z={}
z.a=null
@@ -22972,9 +23124,9 @@
if(y==null){x=[]
z.a=x
y=x}y.push("bind")
-y.push(M.F4("{{}}","bind",a,b))}return z.a},"call$2","OT",4,0,null,129,[],284,[]],
+y.push(M.F4("{{}}","bind",a,b))}return z.a},"call$2","OT",4,0,null,132,[],283,[]],
Iu:[function(a,b,c,d){var z,y,x,w,v,u,t,s,r,q,p,o,n,m,l,k,j,i
-for(z=J.U6(a),y=d!=null,x=J.x(b),x=typeof b==="object"&&b!==null&&!!x.$ishs,w=0;w<z.gB(a);w+=2){v=z.t(a,w)
+for(z=J.U6(a),y=d!=null,x=J.x(b),x=typeof b==="object"&&b!==null&&!!x.$isTU,w=0;w<z.gB(a);w+=2){v=z.t(a,w)
u=z.t(a,w+1)
t=u.gEJ()
if(1>=t.length)return H.e(t,1)
@@ -23002,7 +23154,7 @@
t.push(L.ao(j,l,null))}o.wE(0)
p=o
s="value"}i=J.Jj(x?b:M.Ky(b),v,p,s)
-if(y)d.push(i)}},"call$4","S5",6,2,null,77,291,[],264,[],285,[],286,[]],
+if(y)d.push(i)}},"call$4","S5",6,2,null,82,290,[],260,[],284,[],285,[]],
F4:[function(a,b,c,d){var z,y,x,w,v,u,t,s,r
z=a.length
if(z===0)return
@@ -23020,13 +23172,13 @@
v=t+2}if(v===z)w.push("")
z=new M.HS(w,null)
z.Yn(w)
-return z},"call$4","tE",8,0,null,86,[],12,[],264,[],284,[]],
+return z},"call$4","tE",8,0,null,91,[],12,[],260,[],283,[]],
SH:[function(a,b){var z,y
z=a.firstChild
if(z==null)return
y=new M.yp(z,a.lastChild,b)
for(;z!=null;){M.Ky(z).sCk(y)
-z=z.nextSibling}},"call$2","St",4,0,null,209,[],285,[]],
+z=z.nextSibling}},"call$2","St",4,0,null,207,[],284,[]],
Ky:[function(a){var z,y,x,w
z=$.rw()
z.toString
@@ -23037,18 +23189,18 @@
if(typeof a==="object"&&a!==null&&!!w.$isMi)x=new M.ee(a,null,null)
else if(typeof a==="object"&&a!==null&&!!w.$islp)x=new M.ug(a,null,null)
else if(typeof a==="object"&&a!==null&&!!w.$isAE)x=new M.wl(a,null,null)
-else if(typeof a==="object"&&a!==null&&!!w.$iscv){if(w.gqn(a)!=="template")w=w.gQg(a).MW.hasAttribute("template")===!0&&C.uE.x4(w.gqn(a))===!0
+else if(typeof a==="object"&&a!==null&&!!w.$iscv){if(a.localName!=="template")w=w.gQg(a).MW.hasAttribute("template")===!0&&C.uE.x4(w.gqn(a))===!0
else w=!0
-x=w?new M.DT(null,null,null,!1,null,null,null,null,null,a,null,null):new M.V2(a,null,null)}else x=typeof a==="object"&&a!==null&&!!w.$iskJ?new M.XT(a,null,null):new M.hs(a,null,null)
+x=w?new M.DT(null,null,null,!1,null,null,null,null,null,a,null,null):new M.V2(a,null,null)}else x=typeof a==="object"&&a!==null&&!!w.$iskJ?new M.XT(a,null,null):new M.TU(a,null,null)
z.u(0,a,x)
-return x},"call$1","La",2,0,null,264,[]],
+return x},"call$1","La",2,0,null,260,[]],
wR:[function(a){var z=J.RE(a)
-if(typeof a==="object"&&a!==null&&!!z.$iscv)if(z.gqn(a)!=="template")z=z.gQg(a).MW.hasAttribute("template")===!0&&C.uE.x4(z.gqn(a))===!0
+if(typeof a==="object"&&a!==null&&!!z.$iscv)if(a.localName!=="template")z=z.gQg(a).MW.hasAttribute("template")===!0&&C.uE.x4(z.gqn(a))===!0
else z=!0
else z=!1
-return z},"call$1","xS",2,0,null,292,[]],
+return z},"call$1","xS",2,0,null,198,[]],
V2:{
-"^":"hs;N1,mD,Ck",
+"^":"TU;N1,mD,Ck",
Z1:[function(a,b,c,d){var z,y,x,w,v
J.MV(this.glN(),b)
z=this.gN1()
@@ -23060,17 +23212,17 @@
new W.i7(y).Rz(0,b)
z=this.gN1()
y=d!=null?d:""
-x=new M.jY(null,z,c,null,null,"value",y)
+x=new M.zP(null,z,c,null,null,"value",y)
x.Og(z,"value",c,d)
x.Ca=M.IP(z).yI(x.gqf())}else{z=J.rY(b)
w=z.Tc(b,"?")
if(w){J.Vs(y).Rz(0,b)
v=z.Nj(b,0,J.xH(z.gB(b),1))}else v=b
z=d!=null?d:""
-x=new M.BT(w,y,c,null,null,v,z)
+x=new M.D8(w,y,c,null,null,v,z)
x.Og(y,v,c,d)}this.gCd(this).u(0,b,x)
-return x},"call$3","gxfG",4,2,null,77,12,[],285,[],265,[]]},
-BT:{
+return x},"call$3","gxfG",4,2,null,82,12,[],284,[],261,[]]},
+D8:{
"^":"TR;Y0,qP,ZY,xS,PB,eS,ay",
EC:[function(a){var z,y
if(this.Y0){z=null!=a&&!1!==a
@@ -23078,8 +23230,8 @@
if(z)J.Vs(X.TR.prototype.gH.call(this)).MW.setAttribute(y,"")
else J.Vs(X.TR.prototype.gH.call(this)).Rz(0,y)}else{z=J.Vs(X.TR.prototype.gH.call(this))
y=a==null?"":H.d(a)
-z.MW.setAttribute(this.eS,y)}},"call$1","gH0",2,0,null,23,[]]},
-jY:{
+z.MW.setAttribute(this.eS,y)}},"call$1","gH0",2,0,null,28,[]]},
+zP:{
"^":"NP;Ca,qP,ZY,xS,PB,eS,ay",
gH:function(){return M.NP.prototype.gH.call(this)},
EC:[function(a){var z,y,x,w,v,u
@@ -23091,14 +23243,14 @@
u=x}else{v=null
u=null}}else{v=null
u=null}M.NP.prototype.EC.call(this,a)
-if(u!=null&&u.gqP()!=null&&!J.de(y.gP(z),v))u.FC(null)},"call$1","gH0",2,0,null,234,[]]},
+if(u!=null&&u.gqP()!=null&&!J.de(y.gP(z),v))u.FC(null)},"call$1","gH0",2,0,null,230,[]]},
H2:{
"^":"TR;",
cO:[function(a){if(this.qP==null)return
this.Ca.ed()
X.TR.prototype.cO.call(this,this)},"call$0","gJK",0,0,null]},
-DO:{
-"^":"Tp:113;",
+lP:{
+"^":"Tp:115;",
call$0:[function(){var z,y,x,w,v
z=document.createElement("div",null).appendChild(W.ED(null))
y=J.RE(z)
@@ -23115,25 +23267,25 @@
return x.length===1?C.mt:C.Nm.gtH(x)},"call$0",null,0,0,null,"call"],
$isEH:true},
fTP:{
-"^":"Tp:107;a",
-call$1:[function(a){this.a.push(C.pi)},"call$1",null,2,0,null,18,[],"call"],
+"^":"Tp:112;a",
+call$1:[function(a){this.a.push(C.pi)},"call$1",null,2,0,null,19,[],"call"],
$isEH:true},
ppY:{
-"^":"Tp:107;b",
-call$1:[function(a){this.b.push(C.mt)},"call$1",null,2,0,null,18,[],"call"],
+"^":"Tp:112;b",
+call$1:[function(a){this.b.push(C.mt)},"call$1",null,2,0,null,19,[],"call"],
$isEH:true},
NP:{
"^":"H2;Ca,qP,ZY,xS,PB,eS,ay",
gH:function(){return X.TR.prototype.gH.call(this)},
EC:[function(a){var z=this.gH()
-J.ta(z,a==null?"":H.d(a))},"call$1","gH0",2,0,null,234,[]],
+J.ta(z,a==null?"":H.d(a))},"call$1","gH0",2,0,null,230,[]],
FC:[function(a){var z=J.Vm(this.gH())
J.ta(this.xS,z)
-O.Y3()},"call$1","gqf",2,0,158,18,[]]},
+O.Y3()},"call$1","gqf",2,0,157,19,[]]},
jt:{
"^":"H2;Ca,qP,ZY,xS,PB,eS,ay",
EC:[function(a){var z=X.TR.prototype.gH.call(this)
-J.rP(z,null!=a&&!1!==a)},"call$1","gH0",2,0,null,234,[]],
+J.rP(z,null!=a&&!1!==a)},"call$1","gH0",2,0,null,230,[]],
FC:[function(a){var z,y,x,w
z=J.Hf(X.TR.prototype.gH.call(this))
J.ta(this.xS,z)
@@ -23141,8 +23293,8 @@
y=J.x(z)
if(typeof z==="object"&&z!==null&&!!y.$isMi&&J.de(J.zH(X.TR.prototype.gH.call(this)),"radio"))for(z=J.GP(M.kv(X.TR.prototype.gH.call(this)));z.G();){x=z.gl()
y=J.x(x)
-w=J.UQ(J.QE(typeof x==="object"&&x!==null&&!!y.$ishs?x:M.Ky(x)),"checked")
-if(w!=null)J.ta(w,!1)}O.Y3()},"call$1","gqf",2,0,158,18,[]],
+w=J.UQ(J.QE(typeof x==="object"&&x!==null&&!!y.$isTU?x:M.Ky(x)),"checked")
+if(w!=null)J.ta(w,!1)}O.Y3()},"call$1","gqf",2,0,157,19,[]],
static:{kv:[function(a){var z,y,x
z=J.RE(a)
if(z.gMB(a)!=null){z=z.gMB(a)
@@ -23151,9 +23303,9 @@
return z.ev(z,new M.r0(a))}else{y=M.bM(a)
if(y==null)return C.xD
x=J.MK(y,"input[type=\"radio\"][name=\""+H.d(z.goc(a))+"\"]")
-return x.ev(x,new M.jz(a))}},"call$1","VE",2,0,null,129,[]]}},
+return x.ev(x,new M.jz(a))}},"call$1","VE",2,0,null,132,[]]}},
r0:{
-"^":"Tp:107;a",
+"^":"Tp:112;a",
call$1:[function(a){var z,y
z=this.a
y=J.x(a)
@@ -23162,12 +23314,12 @@
z=y==null?z==null:y===z}else z=!1
else z=!1
else z=!1
-return z},"call$1",null,2,0,null,288,[],"call"],
+return z},"call$1",null,2,0,null,287,[],"call"],
$isEH:true},
jz:{
-"^":"Tp:107;b",
+"^":"Tp:112;b",
call$1:[function(a){var z=J.x(a)
-return!z.n(a,this.b)&&z.gMB(a)==null},"call$1",null,2,0,null,288,[],"call"],
+return!z.n(a,this.b)&&z.gMB(a)==null},"call$1",null,2,0,null,287,[],"call"],
$isEH:true},
SA:{
"^":"H2;Dh,Ca,qP,ZY,xS,PB,eS,ay",
@@ -23176,7 +23328,7 @@
if(this.Gh(a)===!0)return
z=new (window.MutationObserver||window.WebKitMutationObserver||window.MozMutationObserver)(H.tR(W.K2(new M.hB(this)),2))
C.S2.yN(z,X.TR.prototype.gH.call(this),!0,!0)
-this.Dh=z},"call$1","gH0",2,0,null,234,[]],
+this.Dh=z},"call$1","gH0",2,0,null,230,[]],
Gh:[function(a){var z,y,x
z=this.eS
y=J.x(z)
@@ -23185,28 +23337,28 @@
z=J.m4(X.TR.prototype.gH.call(this))
return z==null?x==null:z===x}else if(y.n(z,"value")){z=X.TR.prototype.gH.call(this)
J.ta(z,a==null?"":H.d(a))
-return J.de(J.Vm(X.TR.prototype.gH.call(this)),a)}},"call$1","goz",2,0,null,234,[]],
+return J.de(J.Vm(X.TR.prototype.gH.call(this)),a)}},"call$1","goz",2,0,null,230,[]],
C7:[function(){var z=this.Dh
if(z!=null){z.disconnect()
-this.Dh=null}},"call$0","gln",0,0,null],
+this.Dh=null}},"call$0","glnT",0,0,null],
FC:[function(a){var z,y
this.C7()
z=this.eS
y=J.x(z)
if(y.n(z,"selectedIndex")){z=J.m4(X.TR.prototype.gH.call(this))
J.ta(this.xS,z)}else if(y.n(z,"value")){z=J.Vm(X.TR.prototype.gH.call(this))
-J.ta(this.xS,z)}},"call$1","gqf",2,0,158,18,[]],
+J.ta(this.xS,z)}},"call$1","gqf",2,0,157,19,[]],
$isSA:true,
static:{qb:[function(a){if(typeof a==="string")return H.BU(a,null,new M.nv())
-return typeof a==="number"&&Math.floor(a)===a?a:0},"call$1","v7",2,0,null,23,[]]}},
+return typeof a==="number"&&Math.floor(a)===a?a:0},"call$1","v7",2,0,null,28,[]]}},
hB:{
-"^":"Tp:346;a",
+"^":"Tp:348;a",
call$2:[function(a,b){var z=this.a
-if(z.Gh(J.Vm(z.xS))===!0)z.C7()},"call$2",null,4,0,null,21,[],619,[],"call"],
+if(z.Gh(J.Vm(z.xS))===!0)z.C7()},"call$2",null,4,0,null,26,[],626,[],"call"],
$isEH:true},
nv:{
-"^":"Tp:107;",
-call$1:[function(a){return 0},"call$1",null,2,0,null,108,[],"call"],
+"^":"Tp:112;",
+call$1:[function(a){return 0},"call$1",null,2,0,null,113,[],"call"],
$isEH:true},
ee:{
"^":"V2;N1,mD,Ck",
@@ -23216,7 +23368,7 @@
if(!z.n(b,"value")&&!z.n(b,"checked"))return M.V2.prototype.Z1.call(this,this,b,c,d)
y=this.gN1()
x=J.x(y)
-J.MV(typeof y==="object"&&y!==null&&!!x.$ishs?y:this,b)
+J.MV(typeof y==="object"&&y!==null&&!!x.$isTU?y:this,b)
J.Vs(this.N1).Rz(0,b)
y=this.gCd(this)
if(z.n(b,"value")){z=this.N1
@@ -23230,17 +23382,17 @@
x.Og(z,"checked",c,d)
x.Ca=M.IP(z).yI(x.gqf())
z=x}y.u(0,b,z)
-return z},"call$3","gxfG",4,2,null,77,12,[],285,[],265,[]]},
-XI:{
+return z},"call$3","gxfG",4,2,null,82,12,[],284,[],261,[]]},
+K6:{
"^":"a;Cd>,wd>,N2<,Te<"},
-hs:{
+TU:{
"^":"a;N1<,mD,Ck?",
Z1:[function(a,b,c,d){var z,y
window
z=$.pl()
y="Unhandled binding to Node: "+H.d(this)+" "+H.d(b)+" "+H.d(c)+" "+H.d(d)
z.toString
-if(typeof console!="undefined")console.error(y)},"call$3","gxfG",4,2,null,77,12,[],285,[],265,[]],
+if(typeof console!="undefined")console.error(y)},"call$3","gxfG",4,2,null,82,12,[],284,[],261,[]],
Ih:[function(a,b){var z
if(this.mD==null)return
z=this.gCd(this).Rz(0,b)
@@ -23255,10 +23407,10 @@
glN:function(){var z,y
z=this.gN1()
y=J.x(z)
-return typeof z==="object"&&z!==null&&!!y.$ishs?z:this},
-$ishs:true},
+return typeof z==="object"&&z!==null&&!!y.$isTU?z:this},
+$isTU:true},
yp:{
-"^":"a;KO,qW,k8"},
+"^":"a;KO,qW,k8<"},
ug:{
"^":"V2;N1,mD,Ck",
gN1:function(){return this.N1},
@@ -23268,7 +23420,7 @@
if(!z.n(b,"selectedIndex")&&!z.n(b,"value"))return M.V2.prototype.Z1.call(this,this,b,c,d)
z=this.gN1()
y=J.x(z)
-J.MV(typeof z==="object"&&z!==null&&!!y.$ishs?z:this,b)
+J.MV(typeof z==="object"&&z!==null&&!!y.$isTU?z:this,b)
J.Vs(this.N1).Rz(0,b)
z=this.gCd(this)
x=this.N1
@@ -23277,9 +23429,9 @@
y.Og(x,b,c,d)
y.Ca=M.IP(x).yI(y.gqf())
z.u(0,b,y)
-return y},"call$3","gxfG",4,2,null,77,12,[],285,[],265,[]]},
+return y},"call$3","gxfG",4,2,null,82,12,[],284,[],261,[]]},
DT:{
-"^":"V2;lr,xT?,kr<,Dsl,QO?,jH?,mj?,IT,dv@,N1,mD,Ck",
+"^":"V2;lr,xT?,kr<,Mf,QO?,jH?,mj?,IT,dv@,N1,mD,Ck",
gN1:function(){return this.N1},
glN:function(){var z,y
z=this.N1
@@ -23310,7 +23462,7 @@
z=new M.p8(this,c,b,d)
this.gCd(this).u(0,b,z)
return z
-default:return M.V2.prototype.Z1.call(this,this,b,c,d)}},"call$3","gxfG",4,2,null,77,12,[],285,[],265,[]],
+default:return M.V2.prototype.Z1.call(this,this,b,c,d)}},"call$3","gxfG",4,2,null,82,12,[],284,[],261,[]],
Ih:[function(a,b){var z
switch(b){case"bind":z=this.kr
if(z==null)return
@@ -23336,7 +23488,7 @@
this.jq()
this.gCd(this).Rz(0,b)
return
-default:M.hs.prototype.Ih.call(this,this,b)
+default:M.TU.prototype.Ih.call(this,this,b)
return}},"call$1","gC8",2,0,null,12,[]],
jq:[function(){var z=this.kr
if(!z.t9){z.t9=!0
@@ -23344,7 +23496,7 @@
a5:[function(a,b,c){var z,y,x,w,v,u,t
z=this.gnv(this)
y=J.x(z)
-z=typeof z==="object"&&z!==null&&!!y.$ishs?z:M.Ky(z)
+z=typeof z==="object"&&z!==null&&!!y.$isTU?z:M.Ky(z)
x=J.nX(z)
w=z.gdv()
if(w==null){w=M.iX(x,b)
@@ -23357,7 +23509,8 @@
y=u}t=M.Fz(x,y)
M.HP(t,w,a,b,c)
M.SH(t,a)
-return t},function(a,b){return this.a5(a,b,null)},"ZK","call$3",null,"gmJ",0,6,null,77,77,77,285,[],284,[],286,[]],
+return t},function(a,b){return this.a5(a,b,null)},"ZK","call$3",null,"gmJ",0,6,null,82,82,82,284,[],283,[],285,[]],
+gk8:function(){return this.lr},
gzH:function(){return this.xT},
gnv:function(a){var z,y,x,w,v
this.Sy()
@@ -23366,7 +23519,7 @@
x=y!=null?J.K3(y,z):null}else x=null
if(x==null){x=this.QO
if(x==null)return this.N1}w=J.x(x)
-v=J.IS(typeof x==="object"&&x!==null&&!!w.$ishs?x:M.Ky(x))
+v=J.IS(typeof x==="object"&&x!==null&&!!w.$isTU?x:M.Ky(x))
return v!=null?v:x},
gjb:function(a){var z
this.Sy()
@@ -23384,9 +23537,9 @@
y=J.RE(z)
z=y.gQg(z).MW.hasAttribute("template")===!0&&C.uE.x4(y.gqn(z))===!0}else z=!1
if(z){if(a!=null)throw H.b(new P.AT("instanceRef should not be supplied for attribute templates."))
-v=M.pZ(this.N1)
+v=M.eX(this.N1)
z=J.x(v)
-v=typeof v==="object"&&v!==null&&!!z.$ishs?v:M.Ky(v)
+v=typeof v==="object"&&v!==null&&!!z.$isTU?v:M.Ky(v)
v.smj(!0)
z=v.gN1()
y=J.x(z)
@@ -23396,23 +23549,23 @@
if(a!=null)v.sQO(a)
else if(w)M.KE(v,this.N1,u)
else M.GM(J.nX(v))
-return!0},function(){return this.wh(null)},"Sy","call$1",null,"ga6",0,2,null,77,620,[]],
+return!0},function(){return this.wh(null)},"Sy","call$1",null,"ga6",0,2,null,82,627,[]],
$isDT:true,
static:{"^":"mn,EW,Sf,To",Fz:[function(a,b){var z,y,x
z=J.Lh(b,a,!1)
y=J.RE(z)
-if(typeof z==="object"&&z!==null&&!!y.$iscv)if(y.gqn(z)!=="template")y=y.gQg(z).MW.hasAttribute("template")===!0&&C.uE.x4(y.gqn(z))===!0
+if(typeof z==="object"&&z!==null&&!!y.$iscv)if(z.localName!=="template")y=y.gQg(z).MW.hasAttribute("template")===!0&&C.uE.x4(y.gqn(z))===!0
else y=!0
else y=!1
if(y)return z
for(x=J.cO(a);x!=null;x=x.nextSibling)z.appendChild(M.Fz(x,b))
-return z},"call$2","Tkw",4,0,null,264,[],287,[]],TA:[function(a){var z,y,x,w
+return z},"call$2","G0",4,0,null,260,[],286,[]],TA:[function(a){var z,y,x,w
z=J.VN(a)
if(W.Pv(z.defaultView)==null)return z
y=$.LQ().t(0,z)
if(y==null){y=z.implementation.createHTMLDocument("")
for(;x=y.lastChild,x!=null;){w=x.parentNode
-if(w!=null)w.removeChild(x)}$.LQ().u(0,z,y)}return y},"call$1","nt",2,0,null,261,[]],pZ:[function(a){var z,y,x,w,v,u
+if(w!=null)w.removeChild(x)}$.LQ().u(0,z,y)}return y},"call$1","nt",2,0,null,257,[]],eX:[function(a){var z,y,x,w,v,u
z=J.RE(a)
y=z.gM0(a).createElement("template",null)
z.gKV(a).insertBefore(y,a)
@@ -23427,30 +23580,31 @@
v.removeAttribute(w)
y.setAttribute(w,u)
break
-default:}}return y},"call$1","fo",2,0,null,288,[]],KE:[function(a,b,c){var z,y,x,w
+default:}}return y},"call$1","Bw",2,0,null,287,[]],KE:[function(a,b,c){var z,y,x,w
z=J.nX(a)
if(c){J.Kv(z,b)
-return}for(y=J.RE(b),x=J.RE(z);w=y.gq6(b),w!=null;)x.jx(z,w)},"call$3","BZ",6,0,null,261,[],288,[],289,[]],GM:[function(a){var z,y
+return}for(y=J.RE(b),x=J.RE(z);w=y.gq6(b),w!=null;)x.jx(z,w)},"call$3","BZ",6,0,null,257,[],287,[],288,[]],GM:[function(a){var z,y
z=new M.OB()
y=J.MK(a,$.cz())
if(M.wR(a))z.call$1(a)
-y.aN(y,z)},"call$1","DR",2,0,null,290,[]],oR:[function(){if($.To===!0)return
+y.aN(y,z)},"call$1","DR",2,0,null,289,[]],oR:[function(){if($.To===!0)return
$.To=!0
var z=document.createElement("style",null)
-z.textContent=$.cz()+" { display: none; }"
+J.c9(z,H.d($.cz())+" { display: none; }")
document.head.appendChild(z)},"call$0","Lv",0,0,null]}},
OB:{
-"^":"Tp:158;",
+"^":"Tp:157;",
call$1:[function(a){var z
if(!M.Ky(a).wh(null)){z=J.x(a)
-M.GM(J.nX(typeof a==="object"&&a!==null&&!!z.$ishs?a:M.Ky(a)))}},"call$1",null,2,0,null,261,[],"call"],
+M.GM(J.nX(typeof a==="object"&&a!==null&&!!z.$isTU?a:M.Ky(a)))}},"call$1",null,2,0,null,257,[],"call"],
$isEH:true},
-lP:{
-"^":"Tp:107;",
-call$1:[function(a){return H.d(a)+"[template]"},"call$1",null,2,0,null,402,[],"call"],
+Uf:{
+"^":"Tp:112;",
+call$1:[function(a){return H.d(a)+"[template]"},"call$1",null,2,0,null,442,[],"call"],
$isEH:true},
p8:{
"^":"a;ud,lr,eS,ay",
+gk8:function(){return this.lr},
gP:function(a){return J.Vm(this.gND())},
r6:function(a,b){return this.gP(this).call$1(b)},
sP:function(a,b){J.ta(this.gND(),b)},
@@ -23466,7 +23620,7 @@
this.ud=null},"call$0","gJK",0,0,null],
$isTR:true},
NW:{
-"^":"Tp:346;a,b,c,d",
+"^":"Tp:348;a,b,c,d",
call$2:[function(a,b){var z,y,x,w
for(;z=J.U6(a),J.de(z.t(a,0),"_");)a=z.yn(a,1)
if(this.d)if(z.n(a,"if")){this.a.b=!0
@@ -23478,7 +23632,7 @@
z.a=w
z=w}else z=x
z.push(a)
-z.push(y)}},"call$2",null,4,0,null,12,[],23,[],"call"],
+z.push(y)}},"call$2",null,4,0,null,12,[],28,[],"call"],
$isEH:true},
HS:{
"^":"a;EJ<,bX",
@@ -23497,7 +23651,7 @@
if(0>=z.length)return H.e(z,0)
y=H.d(z[0])+H.d(a)
if(3>=z.length)return H.e(z,3)
-return y+H.d(z[3])},"call$1","gBg",2,0,621,23,[]],
+return y+H.d(z[3])},"call$1","gBg",2,0,628,28,[]],
DJ:[function(a){var z,y,x,w,v,u,t
z=this.EJ
if(0>=z.length)return H.e(z,0)
@@ -23508,7 +23662,7 @@
if(t>=z.length)return H.e(z,t)
u=z[t]
u=typeof u==="string"?u:H.d(u)
-y.vM=y.vM+u}return y.vM},"call$1","gqD",2,0,622,623,[]],
+y.vM=y.vM+u}return y.vM},"call$1","gqD",2,0,629,630,[]],
Yn:function(a){this.bX=this.EJ.length===4?this.gBg():this.gqD()}},
TG:{
"^":"a;e9,YC,xG,pq,t9,A7,js,Q3,JM,d6,rV,yO,XV,eD,FS,IY,U9,DO,Fy",
@@ -23521,28 +23675,28 @@
if(!z&&!this.js){this.Az(null)
return}y=z?this.JM:this.d6
x=z?this.yO:this.XV
-if(!this.Q3)w=L.ao(y,x,z?null:new M.ts())
+if(!this.Q3)w=L.ao(y,x,z?null:new M.VU())
else{v=[]
w=new Y.J3(v,[],null,new M.Kj(z),!1,!1,null,null)
v.push(L.ao(y,x,null))
z=this.rV
u=this.eD
v.push(L.ao(z,u,null))
-w.wE(0)}this.FS=w.gUj(w).yI(new M.VU(this))
-this.Az(w.gP(w))},"call$0","gjM",0,0,113],
+w.wE(0)}this.FS=w.gUj(w).yI(new M.R7(this))
+this.Az(w.gP(w))},"call$0","gjM",0,0,115],
Az:[function(a){var z,y,x,w
z=this.xG
this.Gb()
y=J.w1(a)
if(typeof a==="object"&&a!==null&&(a.constructor===Array||!!y.$isList)){this.xG=a
-x=a}else if(typeof a==="object"&&a!==null&&(a.constructor===Array||!!y.$iscX)){x=y.br(a)
+x=a}else if(typeof a==="object"&&a!==null&&(a.constructor===Array||!!y.$isQV)){x=y.br(a)
this.xG=x}else{this.xG=null
x=null}if(x!=null&&typeof a==="object"&&a!==null&&!!y.$iswn)this.IY=a.gvp().yI(this.gZX())
y=z!=null?z:[]
x=this.xG
x=x!=null?x:[]
w=G.jj(x,0,J.q8(x),y,0,J.q8(y))
-if(w.length!==0)this.El(w)},"call$1","gbe",2,0,null,234,[]],
+if(w.length!==0)this.El(w)},"call$1","ghC",2,0,null,230,[]],
wx:[function(a){var z,y,x,w
z=J.x(a)
if(z.n(a,-1))return this.e9.N1
@@ -23555,7 +23709,7 @@
if(z)return x
w=M.Ky(x).gkr()
if(w==null)return x
-return w.wx(C.jn.cU(w.YC.length,2)-1)},"call$1","gzm",2,0,null,47,[]],
+return w.wx(C.jn.cU(w.YC.length,2)-1)},"call$1","gzt",2,0,null,52,[]],
lP:[function(a,b,c,d){var z,y,x,w,v,u
z=J.Wx(a)
y=this.wx(z.W(a,1))
@@ -23568,7 +23722,7 @@
v=J.TZ(this.e9.N1)
u=J.tx(y)
if(x)v.insertBefore(b,u)
-else if(c!=null)for(z=J.GP(c);z.G();)v.insertBefore(z.gl(),u)},"call$4","gaF",8,0,null,47,[],209,[],624,[],286,[]],
+else if(c!=null)for(z=J.GP(c);z.G();)v.insertBefore(z.gl(),u)},"call$4","gaF",8,0,null,52,[],207,[],631,[],285,[]],
MC:[function(a){var z,y,x,w,v,u,t,s
z=[]
z.$builtinTypeInfo=[W.KV]
@@ -23585,7 +23739,7 @@
if(s==null?w==null:s===w)w=x
v=s.parentNode
if(v!=null)v.removeChild(s)
-z.push(s)}return new M.Ya(z,t)},"call$1","gLu",2,0,null,47,[]],
+z.push(s)}return new M.Ya(z,t)},"call$1","gtx",2,0,null,52,[]],
El:[function(a){var z,y,x,w,v,u,t,s,r,q,p,o,n,m,l,k
if(this.pq)return
z=this.e9
@@ -23611,9 +23765,9 @@
k=null}else{m=[]
if(this.DO!=null)o=this.Mv(o)
k=o!=null?z.a5(o,v,m):null
-l=null}this.lP(p,k,l,m)}}for(z=u.gUQ(u),z=H.VM(new H.MH(null,J.GP(z.l6),z.T6),[H.Kp(z,0),H.Kp(z,1)]);z.G();)this.uS(J.AB(z.lo))},"call$1","gZX",2,0,625,255,[]],
+l=null}this.lP(p,k,l,m)}}for(z=u.gUQ(u),z=H.VM(new H.MH(null,J.GP(z.l6),z.T6),[H.Kp(z,0),H.Kp(z,1)]);z.G();)this.uS(J.AB(z.lo))},"call$1","gZX",2,0,632,251,[]],
uS:[function(a){var z
-for(z=J.GP(a);z.G();)J.wC(z.gl())},"call$1","gYl",2,0,null,286,[]],
+for(z=J.GP(a);z.G();)J.wC(z.gl())},"call$1","gYl",2,0,null,285,[]],
Gb:[function(){var z=this.IY
if(z==null)return
z.ed()
@@ -23627,30 +23781,30 @@
if(z!=null){z.ed()
this.FS=null}this.e9.kr=null
this.pq=!0},"call$0","gJK",0,0,null]},
-ts:{
-"^":"Tp:107;",
-call$1:[function(a){return[a]},"call$1",null,2,0,null,21,[],"call"],
+VU:{
+"^":"Tp:112;",
+call$1:[function(a){return[a]},"call$1",null,2,0,null,26,[],"call"],
$isEH:true},
Kj:{
-"^":"Tp:536;a",
+"^":"Tp:633;a",
call$1:[function(a){var z,y,x
z=J.U6(a)
y=z.t(a,0)
x=z.t(a,1)
if(!(null!=x&&!1!==x))return
-return this.a?y:[y]},"call$1",null,2,0,null,623,[],"call"],
+return this.a?y:[y]},"call$1",null,2,0,null,630,[],"call"],
$isEH:true},
-VU:{
-"^":"Tp:107;b",
-call$1:[function(a){return this.b.Az(J.iZ(J.MQ(a)))},"call$1",null,2,0,null,424,[],"call"],
+R7:{
+"^":"Tp:112;b",
+call$1:[function(a){return this.b.Az(J.iZ(J.MQ(a)))},"call$1",null,2,0,null,392,[],"call"],
$isEH:true},
Ya:{
"^":"a;yT>,kU>",
$isYa:true},
XT:{
-"^":"hs;N1,mD,Ck",
+"^":"TU;N1,mD,Ck",
Z1:[function(a,b,c,d){var z,y,x
-if(!J.de(b,"text"))return M.hs.prototype.Z1.call(this,this,b,c,d)
+if(!J.de(b,"text"))return M.TU.prototype.Z1.call(this,this,b,c,d)
this.Ih(0,b)
z=this.gCd(this)
y=this.N1
@@ -23658,11 +23812,11 @@
x=new M.ic(y,c,null,null,"text",x)
x.Og(y,"text",c,d)
z.u(0,b,x)
-return x},"call$3","gxfG",4,2,null,77,12,[],285,[],265,[]]},
+return x},"call$3","gxfG",4,2,null,82,12,[],284,[],261,[]]},
ic:{
"^":"TR;qP,ZY,xS,PB,eS,ay",
EC:[function(a){var z=this.qP
-J.c9(z,a==null?"":H.d(a))},"call$1","gH0",2,0,null,234,[]]},
+J.c9(z,a==null?"":H.d(a))},"call$1","gH0",2,0,null,230,[]]},
wl:{
"^":"V2;N1,mD,Ck",
gN1:function(){return this.N1},
@@ -23670,7 +23824,7 @@
if(!J.de(b,"value"))return M.V2.prototype.Z1.call(this,this,b,c,d)
z=this.gN1()
y=J.x(z)
-J.MV(typeof z==="object"&&z!==null&&!!y.$ishs?z:this,b)
+J.MV(typeof z==="object"&&z!==null&&!!y.$isTU?z:this,b)
J.Vs(this.N1).Rz(0,b)
z=this.gCd(this)
x=this.N1
@@ -23679,14 +23833,15 @@
y.Og(x,"value",c,d)
y.Ca=M.IP(x).yI(y.gqf())
z.u(0,b,y)
-return y},"call$3","gxfG",4,2,null,77,12,[],285,[],265,[]]}}],["template_binding.src.binding_delegate","package:template_binding/src/binding_delegate.dart",,O,{
+return y},"call$3","gxfG",4,2,null,82,12,[],284,[],261,[]]}}],["template_binding.src.binding_delegate","package:template_binding/src/binding_delegate.dart",,O,{
"^":"",
-T4:{
+ve:{
"^":"a;"}}],["template_binding.src.node_binding","package:template_binding/src/node_binding.dart",,X,{
"^":"",
TR:{
"^":"a;qP<",
gH:function(){return this.qP},
+gk8:function(){return this.ZY},
gP:function(a){return J.Vm(this.xS)},
r6:function(a,b){return this.gP(this).call$1(b)},
sP:function(a,b){J.ta(this.xS,b)},
@@ -23709,70 +23864,50 @@
this.EC(J.Vm(this.xS))},
$isTR:true},
VD:{
-"^":"Tp:107;a",
+"^":"Tp:112;a",
call$1:[function(a){var z=this.a
-return z.EC(J.Vm(z.xS))},"call$1",null,2,0,null,424,[],"call"],
-$isEH:true}}],["vm_element","package:observatory/src/elements/vm_element.dart",,R,{
-"^":"",
-Zt:{
-"^":["Dsd;Jh%-353,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0-412",null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
-gzf:[function(a){return a.Jh},null,null,1,0,626,"vm",355,397],
-szf:[function(a,b){a.Jh=this.ct(a,C.DD,a.Jh,b)},null,null,3,0,627,23,[],"vm",355],
-"@":function(){return[C.rm]},
-static:{xip:[function(a){var z,y,x,w
-z=$.Nd()
-y=P.Py(null,null,null,J.O,W.I0)
-x=J.O
-w=W.cv
-w=H.VM(new V.qC(P.Py(null,null,null,x,w),null,null),[x,w])
-a.SO=z
-a.B7=y
-a.X0=w
-C.Qh.ZL(a)
-C.Qh.G6(a)
-return a},null,null,0,0,113,"new VMElement$created"]}},
-"+VMElement":[628],
-Dsd:{
-"^":"uL+Pi;",
-$isd3:true}}],])
+return z.EC(J.Vm(z.xS))},"call$1",null,2,0,null,392,[],"call"],
+$isEH:true}}],])
I.$finishClasses($$,$,null)
$$=null
J.O.$isString=true
-J.O.$isRz=true
-J.O.$asRz=[J.O]
+J.O.$isTx=true
+J.O.$asTx=[J.O]
J.O.$isa=true
-J.P.$isRz=true
-J.P.$asRz=[J.P]
+J.P.$isTx=true
+J.P.$asTx=[J.P]
J.P.$isa=true
J.im.$isint=true
-J.im.$isRz=true
-J.im.$asRz=[J.P]
-J.im.$isRz=true
-J.im.$asRz=[J.P]
-J.im.$isRz=true
-J.im.$asRz=[J.P]
+J.im.$isTx=true
+J.im.$asTx=[J.P]
+J.im.$isTx=true
+J.im.$asTx=[J.P]
+J.im.$isTx=true
+J.im.$asTx=[J.P]
J.im.$isa=true
J.GW.$isdouble=true
-J.GW.$isRz=true
-J.GW.$asRz=[J.P]
-J.GW.$isRz=true
-J.GW.$asRz=[J.P]
+J.GW.$isTx=true
+J.GW.$asTx=[J.P]
+J.GW.$isTx=true
+J.GW.$asTx=[J.P]
J.GW.$isa=true
W.KV.$isKV=true
W.KV.$isD0=true
W.KV.$isa=true
W.M5.$isa=true
-N.qV.$isRz=true
-N.qV.$asRz=[N.qV]
+W.yg.$isa=true
+W.uj.$isa=true
+N.qV.$isTx=true
+N.qV.$asTx=[N.qV]
N.qV.$isa=true
P.a6.$isa6=true
-P.a6.$isRz=true
-P.a6.$asRz=[P.a6]
+P.a6.$isTx=true
+P.a6.$asTx=[P.a6]
P.a6.$isa=true
-P.Od.$isa=true
J.Q.$isList=true
-J.Q.$iscX=true
+J.Q.$isQV=true
J.Q.$isa=true
+P.Od.$isa=true
P.a.$isa=true
W.cv.$iscv=true
W.cv.$isKV=true
@@ -23806,11 +23941,25 @@
U.kB.$isa=true
K.Ae.$isAe=true
K.Ae.$isa=true
+D.rj.$isaf=true
+D.rj.$isa=true
+D.kx.$iskx=true
+D.kx.$isaf=true
+D.kx.$isa=true
+D.SI.$isSI=true
+D.SI.$isaf=true
+D.SI.$isqC=true
+D.SI.$asqC=[null,null]
+D.SI.$isZ0=true
+D.SI.$asZ0=[null,null]
+D.SI.$isa=true
N.TJ.$isa=true
P.wv.$iswv=true
P.wv.$isa=true
J.kn.$isbool=true
J.kn.$isa=true
+T.z2.$isz2=true
+T.z2.$isa=true
W.OJ.$isea=true
W.OJ.$isa=true
A.XP.$isXP=true
@@ -23838,9 +23987,9 @@
P.ej.$isa=true
P.RY.$isej=true
P.RY.$isa=true
-P.ac.$isX9=true
-P.ac.$isej=true
-P.ac.$isa=true
+P.Fw.$isX9=true
+P.Fw.$isej=true
+P.Fw.$isa=true
P.X9.$isX9=true
P.X9.$isej=true
P.X9.$isa=true
@@ -23853,16 +24002,14 @@
P.Ys.$isa=true
X.TR.$isa=true
F.d3.$isa=true
-T.z2.$isz2=true
-T.z2.$isa=true
P.MO.$isMO=true
P.MO.$isa=true
W.ea.$isea=true
W.ea.$isa=true
P.qh.$isqh=true
P.qh.$isa=true
-W.CX.$isea=true
-W.CX.$isa=true
+W.Wp.$isea=true
+W.Wp.$isa=true
G.DA.$isDA=true
G.DA.$isa=true
M.Ya.$isa=true
@@ -23890,17 +24037,20 @@
W.I0.$isKV=true
W.I0.$isD0=true
W.I0.$isa=true
-W.Hy.$isea=true
-W.Hy.$isa=true
+W.cx.$isea=true
+W.cx.$isa=true
+D.bv.$isbv=true
+D.bv.$isaf=true
+D.bv.$isa=true
+D.c2.$isa=true
+D.Vi.$isVi=true
+D.Vi.$isa=true
+D.Q4.$isa=true
+D.N8.$isa=true
W.zU.$isD0=true
W.zU.$isa=true
W.ew.$isea=true
W.ew.$isa=true
-G.kx.$iskx=true
-G.kx.$isa=true
-G.rj.$isa=true
-G.c2.$isc2=true
-G.c2.$isa=true
W.tV.$iscv=true
W.tV.$isKV=true
W.tV.$isD0=true
@@ -23927,39 +24077,41 @@
H.Uz.$isa=true
P.e4.$ise4=true
P.e4.$isa=true
-P.JB.$isJB=true
-P.JB.$isa=true
-P.Z0.$isZ0=true
-P.Z0.$isa=true
-G.Vi.$isVi=true
-G.Vi.$isa=true
+P.dl.$isdl=true
+P.dl.$isa=true
+V.qC.$isqC=true
+V.qC.$isZ0=true
+V.qC.$isa=true
P.jp.$isjp=true
P.jp.$isa=true
+P.Tx.$isTx=true
+P.Tx.$isa=true
W.D0.$isD0=true
W.D0.$isa=true
-P.Rz.$isRz=true
-P.Rz.$isa=true
P.aY.$isaY=true
P.aY.$isa=true
-P.lO.$islO=true
-P.lO.$isa=true
-P.cX.$iscX=true
-P.cX.$isa=true
+P.Z0.$isZ0=true
+P.Z0.$isa=true
+P.tU.$istU=true
+P.tU.$isa=true
+P.QV.$isQV=true
+P.QV.$isa=true
P.nP.$isnP=true
P.nP.$isa=true
P.iP.$isiP=true
-P.iP.$isRz=true
-P.iP.$asRz=[null]
+P.iP.$isTx=true
+P.iP.$asTx=[null]
P.iP.$isa=true
-P.ti.$isti=true
-P.ti.$isa=true
+P.fIm.$isfIm=true
+P.fIm.$isa=true
P.b8.$isb8=true
P.b8.$isa=true
+D.af.$isaf=true
+D.af.$isa=true
+K.z6.$isz6=true
+K.z6.$isa=true
P.EH.$isEH=true
P.EH.$isa=true
-$.$signature_bh={func:"bh",args:[null,null]}
-$.$signature_HB={func:"HB",ret:P.a,args:[P.a]}
-$.$signature_Dv={func:"Dv",args:[null]}
J.Qc=function(a){if(typeof a=="number")return J.P.prototype
if(typeof a=="string")return J.O.prototype
if(a==null)return a
@@ -23999,15 +24151,18 @@
J.AA=function(a){return J.RE(a).GB(a)}
J.AB=function(a){return J.RE(a).gkU(a)}
J.AG=function(a){return J.x(a).bu(a)}
+J.BM=function(a,b,c){return J.w1(a).xe(a,b,c)}
+J.Bl=function(a,b){if(typeof a=="number"&&typeof b=="number")return a<=b
+return J.Wx(a).E(a,b)}
J.C0=function(a,b){return J.w1(a).ez(a,b)}
J.CC=function(a){return J.RE(a).gmH(a)}
J.CJ=function(a,b){return J.RE(a).sB1(a,b)}
J.Co=function(a){return J.RE(a).gcC(a)}
-J.D8=function(a,b){return J.rY(a).yn(a,b)}
J.EC=function(a){return J.RE(a).giC(a)}
J.EY=function(a,b){return J.RE(a).od(a,b)}
J.Eg=function(a,b){return J.rY(a).Tc(a,b)}
J.Ez=function(a,b){return J.Wx(a).yM(a,b)}
+J.F6=function(a,b){return J.RE(a).stD(a,b)}
J.F8=function(a){return J.RE(a).gjO(a)}
J.FN=function(a){return J.U6(a).gl0(a)}
J.FW=function(a,b){if(typeof a=="number"&&typeof b=="number")return a/b
@@ -24015,24 +24170,19 @@
J.GJ=function(a,b,c,d){return J.RE(a).Y9(a,b,c,d)}
J.GL=function(a){return J.RE(a).gfN(a)}
J.GP=function(a){return J.w1(a).gA(a)}
-J.H4=function(a,b){return J.RE(a).wR(a,b)}
-J.Hb=function(a,b){if(typeof a=="number"&&typeof b=="number")return a<=b
-return J.Wx(a).E(a,b)}
J.Hf=function(a){return J.RE(a).gTq(a)}
-J.I8=function(a,b,c){return J.rY(a).wL(a,b,c)}
-J.IJ=function(a,b){return J.Wx(a).Z(a,b)}
J.IS=function(a){return J.RE(a).gnv(a)}
J.Ih=function(a,b,c){return J.RE(a).X6(a,b,c)}
J.Iz=function(a){return J.RE(a).gfY(a)}
J.J5=function(a,b){if(typeof a=="number"&&typeof b=="number")return a>=b
return J.Wx(a).F(a,b)}
J.JA=function(a,b,c){return J.rY(a).h8(a,b,c)}
-J.JD=function(a,b){return J.RE(a).R3(a,b)}
+J.JZ=function(a,b){return J.RE(a).st0(a,b)}
J.Jj=function(a,b,c,d){return J.RE(a).Z1(a,b,c,d)}
J.Jr=function(a,b){return J.RE(a).Id(a,b)}
J.K3=function(a,b){return J.RE(a).Kb(a,b)}
-J.KM=function(a){return J.RE(a).zr(a)}
J.Kv=function(a,b){return J.RE(a).jx(a,b)}
+J.L0=function(a,b,c,d,e){return J.w1(a).YW(a,b,c,d,e)}
J.LH=function(a,b){return J.w1(a).GT(a,b)}
J.LL=function(a){return J.Wx(a).HG(a)}
J.Lh=function(a,b,c){return J.RE(a).ek(a,b,c)}
@@ -24045,22 +24195,26 @@
J.N5=function(a,b){return J.RE(a).RP(a,b)}
J.NQ=function(a,b){return J.RE(a).bA(a,b)}
J.Ng=function(a){return J.RE(a).gxX(a)}
-J.Nj=function(a,b,c){return J.rY(a).Nj(a,b,c)}
-J.Nv=function(a,b,c){return J.w1(a).xe(a,b,c)}
J.O2=function(a,b){return J.RE(a).Ch(a,b)}
J.O6=function(a){return J.RE(a).goc(a)}
J.Or=function(a){return J.RE(a).yx(a)}
J.Pr=function(a,b){return J.w1(a).eR(a,b)}
J.Pw=function(a,b){return J.RE(a).sxr(a,b)}
+J.Q5=function(a,b,c,d){return J.RE(a).ct(a,b,c,d)}
J.QC=function(a){return J.w1(a).wg(a)}
J.QE=function(a){return J.RE(a).gCd(a)}
J.QM=function(a,b){return J.RE(a).Rg(a,b)}
-J.QQ=function(a,b,c,d,e){return J.w1(a).YW(a,b,c,d,e)}
+J.QP=function(a){return J.RE(a).gF1(a)}
+J.QQ=function(a,b){return J.RE(a).sRu(a,b)}
+J.Qr=function(a,b){return J.RE(a).skc(a,b)}
J.RF=function(a,b){return J.RE(a).WO(a,b)}
+J.SK=function(a){return J.RE(a).xW(a)}
+J.Sq=function(a,b){return J.RE(a).zY(a,b)}
J.TD=function(a){return J.RE(a).i4(a)}
J.TZ=function(a){return J.RE(a).gKV(a)}
J.Tr=function(a){return J.RE(a).gCj(a)}
-J.Tv=function(a){return J.RE(a).gB1(a)}
+J.Ts=function(a,b){return J.Wx(a).Z(a,b)}
+J.Tt=function(a,b){return J.RE(a).sNl(a,b)}
J.U2=function(a){return J.w1(a).V1(a)}
J.UK=function(a,b){return J.RE(a).RR(a,b)}
J.UN=function(a,b){if(typeof a=="number"&&typeof b=="number")return(a^b)>>>0
@@ -24078,7 +24232,9 @@
J.WB=function(a,b){if(typeof a=="number"&&typeof b=="number")return a+b
return J.Qc(a).g(a,b)}
J.WI=function(a){return J.RE(a).gG3(a)}
+J.WO=function(a){return J.RE(a).gV5(a)}
J.We=function(a,b){return J.RE(a).scC(a,b)}
+J.X8=function(a,b){return J.RE(a).srs(a,b)}
J.XS=function(a,b){return J.w1(a).zV(a,b)}
J.Xf=function(a,b){return J.RE(a).oo(a,b)}
J.Y5=function(a){return J.RE(a).gyT(a)}
@@ -24087,7 +24243,10 @@
J.Z7=function(a){if(typeof a=="number")return-a
return J.Wx(a).J(a)}
J.ZP=function(a,b){return J.RE(a).Tk(a,b)}
+J.ZZ=function(a,b){return J.rY(a).yn(a,b)}
+J.aK=function(a,b,c){return J.U6(a).XU(a,b,c)}
J.ak=function(a){return J.RE(a).gNF(a)}
+J.am=function(a){return J.RE(a).VD(a)}
J.bB=function(a){return J.x(a).gbx(a)}
J.bY=function(a,b){return J.Wx(a).Y(a,b)}
J.bi=function(a,b){return J.w1(a).h(a,b)}
@@ -24102,13 +24261,17 @@
J.de=function(a,b){if(a==null)return b==null
if(typeof a!="object")return b!=null&&a===b
return J.x(a).n(a,b)}
+J.dk=function(a,b){return J.RE(a).sMj(a,b)}
+J.dm=function(a){return J.RE(a).gi2(a)}
J.e2=function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p){return J.RE(a).nH(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p)}
-J.eJ=function(a,b){return J.U6(a).cn(a,b)}
+J.f2=function(a){return J.RE(a).gRd(a)}
J.f5=function(a){return J.RE(a).gI(a)}
-J.hf=function(a,b,c){return J.U6(a).XU(a,b,c)}
+J.fH=function(a,b){return J.RE(a).stT(a,b)}
+J.ff=function(a,b,c){return J.U6(a).Pk(a,b,c)}
J.i4=function(a,b){return J.w1(a).Zv(a,b)}
J.iG=function(a,b){return J.RE(a).szZ(a,b)}
J.iZ=function(a){return J.RE(a).gzZ(a)}
+J.iz=function(a,b){return J.RE(a).GE(a,b)}
J.jf=function(a,b){return J.x(a).T(a,b)}
J.kE=function(a,b){return J.U6(a).tg(a,b)}
J.kH=function(a,b){return J.w1(a).aN(a,b)}
@@ -24119,15 +24282,12 @@
J.lB=function(a){return J.RE(a).gP1(a)}
J.lE=function(a,b){return J.rY(a).j(a,b)}
J.m4=function(a){return J.RE(a).gig(a)}
-J.mQ=function(a,b){if(typeof a=="number"&&typeof b=="number")return(a&b)>>>0
-return J.Wx(a).i(a,b)}
+J.nJ=function(a){return J.RE(a).ga4(a)}
J.nX=function(a){return J.RE(a).gjb(a)}
J.oE=function(a,b){return J.Qc(a).iM(a,b)}
J.og=function(a,b){return J.RE(a).sIt(a,b)}
J.on=function(a){return J.RE(a).gtT(a)}
-J.p0=function(a,b){if(typeof a=="number"&&typeof b=="number")return a*b
-return J.Wx(a).U(a,b)}
-J.pB=function(a,b,c){return J.U6(a).Pk(a,b,c)}
+J.oq=function(a,b){return J.RE(a).si2(a,b)}
J.pO=function(a){return J.U6(a).gor(a)}
J.pP=function(a){return J.RE(a).gDD(a)}
J.pb=function(a,b){return J.w1(a).Vr(a,b)}
@@ -24141,8 +24301,8 @@
J.tH=function(a,b){return J.w1(a).KI(a,b)}
J.ta=function(a,b){return J.RE(a).sP(a,b)}
J.td=function(a){return J.RE(a).gng(a)}
+J.ti=function(a,b){return J.RE(a).sQr(a,b)}
J.tx=function(a){return J.RE(a).guD(a)}
-J.u1=function(a,b){return J.Wx(a).WZ(a,b)}
J.u3=function(a){return J.RE(a).geT(a)}
J.u6=function(a,b){if(typeof a=="number"&&typeof b=="number")return a<b
return J.Wx(a).C(a,b)}
@@ -24150,17 +24310,23 @@
J.uf=function(a){return J.RE(a).gxr(a)}
J.v1=function(a){return J.x(a).giO(a)}
J.vF=function(a){return J.RE(a).gbP(a)}
+J.vX=function(a,b){if(typeof a=="number"&&typeof b=="number")return a*b
+return J.Qc(a).U(a,b)}
J.vo=function(a,b){return J.w1(a).ev(a,b)}
J.w8=function(a){return J.RE(a).gkc(a)}
J.wC=function(a){return J.RE(a).cO(a)}
-J.wX=function(a){return J.RE(a).gGd(a)}
J.wc=function(a){return J.RE(a).gbG(a)}
J.wg=function(a,b){return J.U6(a).sB(a,b)}
J.xH=function(a,b){if(typeof a=="number"&&typeof b=="number")return a-b
return J.Wx(a).W(a,b)}
J.xR=function(a){return J.RE(a).ghf(a)}
+J.xW=function(a){return J.RE(a).e6(a)}
J.xq=function(a){return J.RE(a).gUj(a)}
+J.y9=function(a){return J.RE(a).lh(a)}
+J.yO=function(a,b){return J.RE(a).stN(a,b)}
J.yj=function(a){return J.RE(a).gG1(a)}
+J.yn=function(a,b){return J.RE(a).vV(a,b)}
+J.yxg=function(a){return J.RE(a).gGd(a)}
J.z8=function(a,b){if(typeof a=="number"&&typeof b=="number")return a>b
return J.Wx(a).D(a,b)}
J.zH=function(a){return J.RE(a).gt5(a)}
@@ -24177,23 +24343,24 @@
C.oD=new J.P()
C.Kn=new J.O()
C.mI=new K.nd()
+C.IU=new P.kF()
C.Us=new A.yL()
-C.nJ=new K.vly()
+C.Nw=new K.vly()
C.Wj=new P.JF()
-C.za=new A.jh()
+C.xd=new A.jh()
C.NU=new P.R8()
-C.v8=new P.nU()
-C.xE=A.wM.prototype
+C.v8=new P.W5()
+C.xE=A.iL.prototype
C.YZ=Q.Tg.prototype
-C.kk=Z.Ps.prototype
-C.WA=new G.WAE("Collected")
-C.l8=new G.WAE("Dart")
-C.nj=new G.WAE("Native")
+C.kk=Z.Jc.prototype
+C.WA=new D.WAE("Collected")
+C.l8=new D.WAE("Dart")
+C.nj=new D.WAE("Native")
+C.yP=new D.WAE("Reused")
C.IK=O.CN.prototype
-C.YD=F.HT.prototype
+C.YD=F.Be.prototype
C.j8=R.E0.prototype
C.O0=R.lw.prototype
-C.Vy=new A.V3("disassembly-entry")
C.Br=new A.V3("observatory-element")
C.dA=new A.V3("heap-profile")
C.I3=new A.V3("script-view")
@@ -24201,58 +24368,56 @@
C.E6=new A.V3("field-ref")
C.aM=new A.V3("isolate-summary")
C.Is=new A.V3("response-viewer")
-C.qT=new A.V3("nav-menu-item")
+C.nh=new A.V3("nav-menu-item")
C.KI=new A.V3("library-nav-menu")
+C.hpj=new A.V3("service-view")
C.nu=new A.V3("function-view")
C.jR=new A.V3("isolate-profile")
-C.xW=new A.V3("code-view")
-C.aQx=new A.V3("class-view")
+C.xz=new A.V3("code-view")
+C.oY=new A.V3("class-view")
C.Gg=new A.V3("library-view")
C.U8=new A.V3("code-ref")
-C.rc=new A.V3("message-viewer")
-C.rm=new A.V3("vm-element")
C.NT=new A.V3("top-nav-menu")
-C.Yi=new A.V3("stack-trace")
-C.h9=new A.V3("script-ref")
+C.js=new A.V3("stack-trace")
+C.Ur=new A.V3("script-ref")
C.OS=new A.V3("class-ref")
C.jF=new A.V3("isolate-list")
C.jy=new A.V3("breakpoint-list")
C.VW=new A.V3("instance-ref")
C.Gu=new A.V3("collapsible-content")
C.pE=new A.V3("stack-frame")
-C.kR=new A.V3("observatory-application")
+C.bd=new A.V3("observatory-application")
+C.Qz=new A.V3("eval-box")
C.zaS=new A.V3("isolate-nav-menu")
C.t9=new A.V3("class-nav-menu")
C.uW=new A.V3("error-view")
C.pc=new A.V3("nav-menu")
C.KH=new A.V3("json-view")
-C.YQ=new A.V3("function-ref")
-C.QU=new A.V3("library-ref")
-C.EA=new A.V3("isolate-element")
-C.vc=new A.V3("field-view")
-C.Ldf=new A.V3("service-ref")
-C.nW=new A.V3("nav-bar")
+C.R0=new A.V3("function-ref")
+C.uy=new A.V3("library-ref")
+C.My=new A.V3("field-view")
+C.JD=new A.V3("service-ref")
+C.Ug=new A.V3("nav-bar")
C.DKS=new A.V3("curly-block")
C.be=new A.V3("instance-view")
-C.er=E.Fv.prototype
C.ny=new P.a6(0)
C.OD=F.E9.prototype
+C.Gh=L.rm.prototype
C.mt=H.VM(new W.e0("change"),[W.ea])
-C.pi=H.VM(new W.e0("click"),[W.CX])
+C.pi=H.VM(new W.e0("click"),[W.Wp])
C.MD=H.VM(new W.e0("error"),[W.ew])
C.PP=H.VM(new W.e0("hashchange"),[W.ea])
C.i3=H.VM(new W.e0("input"),[W.ea])
C.fK=H.VM(new W.e0("load"),[W.ew])
-C.ph=H.VM(new W.e0("message"),[W.Hy])
+C.Ns=H.VM(new W.e0("message"),[W.cx])
C.MC=D.m8.prototype
C.LT=A.Gk.prototype
-C.Xo=U.AX.prototype
-C.h4=N.yb.prototype
-C.RJ=K.NM.prototype
+C.Xo=U.qW.prototype
+C.Yu=N.mk.prototype
+C.Vc=K.jY.prototype
C.W3=W.zU.prototype
C.cp=B.pR.prototype
C.yK=Z.hx.prototype
-C.wx=S.PO.prototype
C.b9=L.u7.prototype
C.RR=A.fl.prototype
C.XH=X.E7.prototype
@@ -24396,15 +24561,15 @@
C.xr=new P.by(null,null)
C.A3=new P.Cf(null)
C.Ap=new P.pD(null)
-C.GB=Z.vj.prototype
+C.Yt=Z.vj.prototype
C.VZ=new N.qV("FINER",400)
C.R5=new N.qV("FINE",500)
C.IF=new N.qV("INFO",800)
C.cV=new N.qV("SEVERE",1000)
C.UP=new N.qV("WARNING",900)
-C.S3=A.oM.prototype
+C.ct=A.Zt.prototype
C.Z3=R.LU.prototype
-C.MG=M.T2.prototype
+C.MG=M.KL.prototype
I.makeConstantList = function(list) {
list.immutable$list = init;
list.fixed$length = init;
@@ -24412,33 +24577,34 @@
};
C.HE=I.makeConstantList([0,0,26624,1023,0,0,65534,2047])
C.mK=I.makeConstantList([0,0,26624,1023,65534,2047,65534,2047])
+C.yD=I.makeConstantList([0,0,26498,1023,65534,34815,65534,18431])
C.PQ=I.makeConstantList(["active","success","warning","danger","info"])
C.xu=I.makeConstantList([43,45,42,47,33,38,60,61,62,63,94,124])
C.u0=I.makeConstantList(["==","!=","<=",">=","||","&&"])
C.Me=H.VM(I.makeConstantList([]),[P.Ms])
-C.dn=H.VM(I.makeConstantList([]),[P.ac])
+C.dn=H.VM(I.makeConstantList([]),[P.Fw])
C.hU=H.VM(I.makeConstantList([]),[P.X9])
C.iH=H.VM(I.makeConstantList([]),[J.im])
C.xD=I.makeConstantList([])
C.Qy=I.makeConstantList(["in","this"])
C.kg=I.makeConstantList([0,0,24576,1023,65534,34815,65534,18431])
+C.aa=I.makeConstantList([0,0,32754,11263,65534,34815,65534,18431])
C.Wd=I.makeConstantList([0,0,32722,12287,65535,34815,65534,18431])
C.iq=I.makeConstantList([40,41,91,93,123,125])
-C.zJ=I.makeConstantList(["caption","col","colgroup","option","optgroup","tbody","td","tfoot","th","thead","tr"])
-C.uE=new H.LPe(11,{caption:null,col:null,colgroup:null,option:null,optgroup:null,tbody:null,td:null,tfoot:null,th:null,thead:null,tr:null},C.zJ)
+C.jH=I.makeConstantList(["caption","col","colgroup","option","optgroup","tbody","td","tfoot","th","thead","tr"])
+C.uE=new H.LPe(11,{caption:null,col:null,colgroup:null,option:null,optgroup:null,tbody:null,td:null,tfoot:null,th:null,thead:null,tr:null},C.jH)
C.uS=I.makeConstantList(["webkitanimationstart","webkitanimationend","webkittransitionend","domfocusout","domfocusin","animationend","animationiteration","animationstart","doubleclick","fullscreenchange","fullscreenerror","keyadded","keyerror","keymessage","needkey","speechchange"])
C.FS=new H.LPe(16,{webkitanimationstart:"webkitAnimationStart",webkitanimationend:"webkitAnimationEnd",webkittransitionend:"webkitTransitionEnd",domfocusout:"DOMFocusOut",domfocusin:"DOMFocusIn",animationend:"webkitAnimationEnd",animationiteration:"webkitAnimationIteration",animationstart:"webkitAnimationStart",doubleclick:"dblclick",fullscreenchange:"webkitfullscreenchange",fullscreenerror:"webkitfullscreenerror",keyadded:"webkitkeyadded",keyerror:"webkitkeyerror",keymessage:"webkitkeymessage",needkey:"webkitneedkey",speechchange:"webkitSpeechChange"},C.uS)
-C.a5k=I.makeConstantList(["!",":",",",")","]","}","?","||","&&","|","^","&","!=","==",">=",">","<=","<","+","-","%","/","*","(","[",".","{"])
-C.dj=new H.LPe(27,{"!":0,":":0,",":0,")":0,"]":0,"}":0,"?":1,"||":2,"&&":3,"|":4,"^":5,"&":6,"!=":7,"==":7,">=":8,">":8,"<=":8,"<":8,"+":9,"-":9,"%":10,"/":10,"*":10,"(":11,"[":11,".":11,"{":11},C.a5k)
-C.paX=I.makeConstantList(["name","extends","constructor","noscript","attributes"])
-C.kr=new H.LPe(5,{name:1,extends:1,constructor:1,noscript:1,attributes:1},C.paX)
+C.p5=I.makeConstantList(["!",":",",",")","]","}","?","||","&&","|","^","&","!=","==",">=",">","<=","<","+","-","%","/","*","(","[",".","{"])
+C.dj=new H.LPe(27,{"!":0,":":0,",":0,")":0,"]":0,"}":0,"?":1,"||":2,"&&":3,"|":4,"^":5,"&":6,"!=":7,"==":7,">=":8,">":8,"<=":8,"<":8,"+":9,"-":9,"%":10,"/":10,"*":10,"(":11,"[":11,".":11,"{":11},C.p5)
+C.pa=I.makeConstantList(["name","extends","constructor","noscript","attributes"])
+C.kr=new H.LPe(5,{name:1,extends:1,constructor:1,noscript:1,attributes:1},C.pa)
C.MEG=I.makeConstantList(["enumerate"])
C.va=new H.LPe(1,{enumerate:K.UM()},C.MEG)
-C.Wp=L.PF.prototype
C.S2=W.H9.prototype
C.kD=A.F1.prototype
C.SU=A.aQ.prototype
-C.nn=A.Ya5.prototype
+C.nn=A.Qa.prototype
C.J7=A.Ww.prototype
C.t5=W.yk.prototype
C.k0=V.lI.prototype
@@ -24448,25 +24614,23 @@
C.Cc=Q.JG.prototype
C.c0=A.knI.prototype
C.cJ=U.fI.prototype
+C.ZO=U.ob.prototype
C.wU=Q.xI.prototype
C.dX=K.nm.prototype
-C.bg=X.uwf.prototype
+C.bg=X.Vu.prototype
C.PU=new H.GD("dart.core.Object")
C.N4=new H.GD("dart.core.DateTime")
-C.Ts=new H.GD("dart.core.bool")
+C.Kc=new H.GD("dart.core.bool")
C.fz=new H.GD("[]")
C.aP=new H.GD("active")
-C.Es=new H.GD("anchor")
+C.cg=new H.GD("anchor")
C.wh=new H.GD("app")
C.S4=new H.GD("busy")
C.Ka=new H.GD("call")
C.AV=new H.GD("callback")
C.XA=new H.GD("cls")
C.b1=new H.GD("code")
-C.EX=new H.GD("codeRef")
-C.C2=new H.GD("coveredPercentageFormatted")
C.h1=new H.GD("currentHash")
-C.tv=new H.GD("currentHashUri")
C.Na=new H.GD("devtools")
C.Jw=new H.GD("displayValue")
C.nN=new H.GD("dynamic")
@@ -24474,153 +24638,148 @@
C.YU=new H.GD("error")
C.mr=new H.GD("expanded")
C.WQ=new H.GD("field")
-C.SK=new H.GD("fileAndLine")
+C.CX=new H.GD("fileAndLine")
C.Aq=new H.GD("formattedAverage")
C.WG=new H.GD("formattedCollections")
+C.uU=new H.GD("formattedExclusiveTicks")
+C.EF=new H.GD("formattedInclusiveTicks")
C.ST=new H.GD("formattedTotalCollectionTime")
C.rE=new H.GD("frame")
C.nf=new H.GD("function")
-C.yg=new H.GD("functionRef")
-C.D2=new H.GD("hasCurrentIsolate")
-C.K7=new H.GD("hits")
+C.zS=new H.GD("hasDisassembly")
C.YH=new H.GD("hitsStyle")
C.bA=new H.GD("hoverText")
C.AZ=new H.GD("dart.core.String")
C.Di=new H.GD("iconClass")
C.fn=new H.GD("instance")
-C.i6=new H.GD("instruction")
C.zD=new H.GD("internal")
C.ai=new H.GD("isEmpty")
C.nZ=new H.GD("isNotEmpty")
C.Z8=new H.GD("isolate")
+C.za=new H.GD("isolates")
C.Gd=new H.GD("json")
C.fy=new H.GD("kind")
+C.hf=new H.GD("label")
C.QL=new H.GD("last")
C.Wn=new H.GD("length")
C.EV=new H.GD("library")
-C.cg=new H.GD("libraryRef")
C.Cv=new H.GD("line")
+C.eh=new H.GD("lineMode")
C.dB=new H.GD("link")
C.PC=new H.GD("dart.core.int")
-C.US=new H.GD("messageType")
+C.h2=new H.GD("message")
C.fQ=new H.GD("methodCountSelected")
C.UX=new H.GD("msg")
C.YS=new H.GD("name")
C.IO=new H.GD("newHeapUsed")
C.OV=new H.GD("noSuchMethod")
+C.VJ=new H.GD("object")
C.ap=new H.GD("oldHeapUsed")
-C.tI=new H.GD("percent")
C.vb=new H.GD("profile")
C.kY=new H.GD("ref")
C.Dj=new H.GD("refreshTime")
C.c8=new H.GD("registerCallback")
C.mE=new H.GD("response")
+C.Aa=new H.GD("results")
C.iF=new H.GD("rootLib")
C.ok=new H.GD("dart.core.Null")
C.md=new H.GD("dart.core.double")
C.XU=new H.GD("sampleCount")
C.fX=new H.GD("script")
-C.Be=new H.GD("scriptRef")
C.eC=new H.GD("[]=")
-C.Kt=new H.GD("shortName")
-C.MB=new H.GD("text")
-C.p1=new H.GD("ticks")
-C.jI=new H.GD("topExclusiveCodes")
+C.V0=new H.GD("showCoverage")
+C.mi=new H.GD("text")
C.ch=new H.GD("topFrame")
+C.QK=new H.GD("totalSamplesInProfile")
C.kw=new H.GD("trace")
C.ep=new H.GD("tree")
C.Fh=new H.GD("url")
-C.ct=new H.GD("userName")
C.ls=new H.GD("value")
C.eR=new H.GD("valueType")
-C.DD=new H.GD("vm")
C.KS=new H.GD("vmName")
-C.z9=new H.GD("void")
+C.v6=new H.GD("void")
C.lx=A.tz.prototype
C.SX=H.mm('qC')
C.WP=new H.Lm(C.SX,"K",0)
C.SL=H.mm('Ae')
C.xC=new H.Lm(C.SL,"V",0)
-C.QJ=H.mm('xh')
-C.wW=new H.Lm(C.QJ,"T",0)
+C.Yn=H.mm('xh')
+C.wW=new H.Lm(C.Yn,"T",0)
C.Gsc=H.mm('wn')
C.io=new H.Lm(C.Gsc,"E",0)
C.nz=new H.Lm(C.SX,"V",0)
C.RP=H.mm('hx')
C.Ln=H.mm('Dg')
C.z6Y=H.mm('Tg')
+C.IZ=H.mm('rm')
C.eY=H.mm('n6')
C.Vh=H.mm('Pz')
-C.I5=H.mm('JG')
+C.zq=H.mm('Qa')
+C.tf=H.mm('Zt')
+C.RJ=H.mm('JG')
+C.Ye=H.mm('qW')
C.z7=H.mm('G6')
C.Ma=H.mm('F1')
C.nY=H.mm('a')
C.Yc=H.mm('iP')
+C.jRs=H.mm('Be')
C.kA=H.mm('u7')
C.PT=H.mm('I2')
C.Wup=H.mm('LZ')
C.P0k=H.mm('lI')
-C.Lz=H.mm('PO')
C.T1=H.mm('Wy')
C.hG=H.mm('ir')
C.aj=H.mm('fI')
-C.Qw=H.mm('Fv')
C.la=H.mm('ZX')
C.G4=H.mm('CN')
C.O4=H.mm('double')
C.yw=H.mm('int')
-C.Mh=H.mm('Zt')
-C.Lf0=H.mm('uwf')
C.RcY=H.mm('aQ')
-C.ld=H.mm('AX')
+C.KJ=H.mm('mk')
C.yiu=H.mm('knI')
-C.oW=H.mm('Ya5')
C.iN=H.mm('yc')
C.HI=H.mm('Pg')
C.ila=H.mm('xI')
C.lk=H.mm('mJ')
C.lpG=H.mm('LU')
+C.Yte=H.mm('KL')
C.mR=H.mm('fl')
C.jV=H.mm('rF')
-C.JZ=H.mm('E7')
-C.wd=H.mm('vj')
+C.SB=H.mm('E7')
+C.Tq=H.mm('vj')
C.JW=H.mm('Ww')
-C.Rg=H.mm('yb')
-C.wHJ=H.mm('Kz')
+C.qo=H.mm('jY')
+C.wH=H.mm('Kz')
C.cx5=H.mm('m8')
C.l49=H.mm('uL')
C.yQ=H.mm('EH')
C.Im=H.mm('X6')
-C.GG=H.mm('PF')
C.FU=H.mm('lw')
-C.p5=H.mm('oM')
-C.yD=H.mm('E0')
+C.rd6=H.mm('E0')
C.nG=H.mm('zt')
C.yG=H.mm('nm')
-C.vA=H.mm('tz')
-C.ow=H.mm('E9')
-C.PV=H.mm('wM')
+C.px=H.mm('tz')
+C.epC=H.mm('Jc')
+C.Fd=H.mm('E9')
C.Db=H.mm('String')
-C.EP=H.mm('NM')
C.Bm=H.mm('XP')
-C.Tn=H.mm('T2')
C.hg=H.mm('hd')
-C.dd=H.mm('pR')
-C.Ud8=H.mm('Ps')
-C.Io=H.mm('HT')
+C.Fv=H.mm('ob')
+C.Wza=H.mm('pR')
C.HL=H.mm('bool')
C.Qf=H.mm('Null')
C.HH=H.mm('dynamic')
+C.l6=H.mm('iL')
C.Gp=H.mm('cw')
C.ri=H.mm('yy')
C.CS=H.mm('vm')
C.Hk=H.mm('Gk')
C.hN=H.mm('oI')
+C.r6=H.mm('Vu')
C.vB=J.is.prototype
C.xM=new P.z0(!1)
-C.Qh=R.Zt.prototype
C.ol=W.u9.prototype
-C.hi=H.VM(new W.hP(W.pq()),[W.OJ])
+C.hi=H.VM(new W.bO(W.pq()),[W.OJ])
$.libraries_to_load = {}
$.te="$cachedFunction"
$.eb="$cachedInvocation"
@@ -24652,8 +24811,8 @@
$.Bh=0
$.uP=!0
$.To=null
-$.Dq=["AZ","B2","BN","BT","BX","Ba","Bf","Bk","C","C0","C4","CL","Ch","D","D3","D6","Dd","De","E","Ec","F","FL","FV","Fr","G6","GB","GG","GT","HG","Hn","Hs","IW","Id","Ih","Is","J","J2","J3","JG","JP","JV","Ja","Jk","K1","KI","Kb","LV","Md","Mi","Mu","NZ","Nj","O","Om","On","PA","PM","PQ","PZ","Pa","Pk","Pv","Q0","Qi","Qq","Qx","R3","R4","RB","RF","RP","RR","Rg","Rz","SF","Se","T","TJ","TP","TW","Tc","Tk","Tp","Ty","U","UD","UH","UZ","Uc","V","V1","VR","Vk","Vr","W","W3","W4","WL","WO","WZ","Wj","Wt","X6","XG","XL","XU","Xl","Y","Y9","YF","YU","YW","Yh","Z","Z1","Z2","ZB","ZL","ZZ","Ze","Zv","aC","aN","aZ","bA","bS","bj","br","bu","cO","cU","cn","ct","d0","dR","dd","du","eR","ea","ek","eo","er","es","ev","ez","f6","f9","fk","fm","fz","g","gA","gAp","gAq","gAu","gAy","gB","gB1","gBW","gCO","gCY","gCd","gCj","gDD","gDt","gEh","gF0","gFR","gG0","gG1","gG3","gGQ","gGV","gGd","gGj","gHX","gHm","gHu","gI","gIF","gIt","gJ0","gJS","gJf","gJh","gJo","gJp","gKE","gKM","gKV","gLA","gLW","gLY","gLm","gLx","gM0","gMB","gMj","gN","gN7","gNF","gNh","gNl","gO3","gO9","gOc","gOl","gP","gP1","gPe","gPj","gPu","gPy","gQ7","gQW","gQg","gQr","gRA","gRd","gRn","gRu","gSB","gSS","gTB","gTq","gUQ","gUV","gUj","gUo","gUp","gUy","gUz","gVa","gVl","gW0","gWT","gX3","gXc","gXh","gXt","gZ8","gZC","gZf","ga4","gaK","gah","gai","gbG","gbP","gbV","gbx","gcC","gcL","gdU","geH","geJ","geT","geb","gey","gfN","gfY","gfb","gfc","ghU","ghf","gi9","giC","giO","gig","gjL","gjO","gjT","gjb","gk5","gkG","gkU","gkW","gkX","gkc","gkf","gkg","gkp","gl0","gl7","gm0","gm2","gmH","gmW","gmm","gn9","gng","gnv","gnx","goE","goc","gor","gpC","gpD","gpQ","gpo","gq3","gq6","gqO","gqY","gqn","grK","grU","grZ","grp","grs","gt0","gt5","gtD","gtH","gtN","gtT","gtY","gtp","guD","guw","guy","gvH","gvL","gvc","gvk","gvt","gwd","gx8","gxH","gxX","gxj","gxr","gxw","gyH","gyT","gys","gz1","gzP","gzZ","gzf","gzh","gzj","gzw","h","h8","hZ","hc","hr","i","i4","iF","iM","ii","iw","j","jh","jp","jx","k","k0","kO","ka","l5","lj","m","mK","n","nB","nC","nH","ni","np","nq","nt","oB","oC","oP","oW","oZ","od","oo","pM","pZ","pr","ps","q1","qA","qC","qH","qZ","r6","rJ","sAp","sAq","sAu","sAy","sB","sB1","sBW","sCO","sCY","sCd","sCj","sDt","sEh","sF0","sFR","sG1","sG3","sGQ","sGV","sGd","sGj","sHX","sHm","sHu","sIF","sIt","sJ0","sJS","sJh","sJo","sKM","sKV","sLA","sLW","sLY","sLx","sM0","sMB","sMj","sN","sN7","sNF","sNh","sNl","sO3","sO9","sOc","sOl","sP","sPe","sPj","sPu","sPy","sQ7","sQr","sRA","sRd","sRn","sRu","sSB","sSS","sTB","sTq","sUQ","sUo","sUp","sUy","sUz","sVa","sWT","sX3","sXc","sXh","sXt","sZ8","sZC","sa4","saK","sah","sai","sbG","sbP","sbV","scC","scL","sdU","seH","seJ","seT","seb","sfN","sfY","sfb","sfc","shU","shf","siC","sig","sjL","sjO","sjT","sjb","sk5","skG","skU","skW","skX","skc","skf","skg","skp","sl7","sm0","sm2","smH","sn9","sng","snv","snx","soE","soc","spC","spD","spQ","spo","sq3","sq6","sqO","sqY","srU","srZ","srs","st0","st5","stD","stN","stT","stY","suD","suw","suy","svH","svL","svk","svt","swd","sxH","sxX","sxj","sxr","sxw","syH","syT","sys","sz1","szZ","szf","szh","szj","szw","t","tZ","tg","tt","u","u8","uB","uW","w","wE","wH","wL","wR","wW","wY","wg","x3","xc","xe","xo","y0","yC","yF","yM","yN","yc","yn","yq","yu","yx","yy","z2","zV","zr"]
-$.Au=[C.RP,Z.hx,{created:Z.HC},C.Ln,H.Dg,{"":H.bu},C.z6Y,Q.Tg,{created:Q.rt},C.I5,Q.JG,{created:Q.Zo},C.z7,B.G6,{created:B.Dw},C.Ma,A.F1,{created:A.z5},C.kA,L.u7,{created:L.Cu},C.Wup,H.LZ,{"":H.UI},C.P0k,V.lI,{created:V.fv},C.Lz,S.PO,{created:S.O5},C.hG,A.ir,{created:A.oa},C.aj,U.fI,{created:U.Ry},C.Qw,E.Fv,{created:E.AH},C.G4,O.CN,{created:O.On},C.Mh,R.Zt,{created:R.xip},C.Lf0,X.uwf,{created:X.bV},C.RcY,A.aQ,{created:A.AJ},C.ld,U.AX,{created:U.wH},C.yiu,A.knI,{created:A.Th},C.oW,A.Ya5,{created:A.EL},C.HI,H.Pg,{"":H.aR},C.ila,Q.xI,{created:Q.lK},C.lpG,R.LU,{created:R.rA},C.mR,A.fl,{created:A.Yt},C.JZ,X.E7,{created:X.jD},C.wd,Z.vj,{created:Z.mA},C.JW,A.Ww,{created:A.ZC},C.Rg,N.yb,{created:N.N0},C.wHJ,D.Kz,{created:D.JR},C.cx5,D.m8,{created:D.Tt},C.l49,Z.uL,{created:Z.Hx},C.GG,L.PF,{created:L.A5},C.FU,R.lw,{created:R.fR},C.p5,A.oM,{created:A.IV},C.yD,R.E0,{created:R.Hv},C.yG,K.nm,{created:K.an},C.vA,A.tz,{created:A.J8},C.ow,F.E9,{created:F.TW},C.PV,A.wM,{created:A.lT},C.EP,K.NM,{created:K.op},C.Bm,A.XP,{created:A.XL},C.Tn,M.T2,{created:M.SP},C.hg,W.hd,{},C.dd,B.pR,{created:B.b4},C.Ud8,Z.Ps,{created:Z.zg},C.Io,F.HT,{created:F.Fe},C.ri,W.yy,{},C.Hk,A.Gk,{created:A.cY}]
+$.Dq=["A3","A5","AZ","B2","BN","BT","BX","Ba","Bf","C","C0","C4","Ch","Cn","Cp","Cx","D","D3","D6","DC","Dd","De","E","Ec","F","F6","FL","FV","Fr","Fv","G6","GB","GE","GG","GT","HG","Hn","Hs","Id","Ih","Is","J","J2","J3","JP","JV","Ja","Jk","K1","KI","KJ","Kb","LV","Md","Mi","Mu","NC","NZ","Nj","O","OP","Om","On","PA","PM","PQ","PZ","Pa","Pk","Pv","Q0","Qi","Qx","R3","R4","RB","RP","RR","RU","Rg","Rz","SF","SS","Se","T","TP","TW","Tc","Ti","Tk","Tp","Ty","U","UD","UH","UZ","Uc","V","V1","VD","VI","Vk","Vr","W","W3","W4","WO","WZ","X6","XG","XU","Xl","Y","Y9","YF","YU","YW","Yy","Z","Z1","Z2","Z3","ZB","ZF","ZL","ZZ","Zv","aC","aN","aZ","az","bA","bS","bj","br","bu","cO","cU","cn","ct","d0","dR","da","dd","du","e6","eR","ea","ek","eo","er","es","ev","ez","f6","fZ","fa","fk","fm","fz","g","gA","gAS","gAb","gAp","gAu","gAy","gB","gB1","gB3","gBA","gBP","gBW","gCO","gCY","gCd","gCj","gD5","gDD","gDt","gEh","gF0","gF1","gFR","gFT","gFw","gG0","gG1","gG3","gGQ","gGV","gGd","gHJ","gHX","gHm","gHq","gHu","gI","gIF","gIW","gIt","gJ0","gJS","gJf","gJo","gJy","gKM","gKU","gKV","gLA","gLY","gLm","gLn","gLx","gM0","gMB","gMj","gN","gN7","gNF","gNh","gNl","gO3","gO9","gOL","gOc","gOl","gP","gP1","gPK","gPe","gPj","gPu","gPw","gPy","gQ7","gQg","gQr","gRA","gRd","gRn","gRu","gSB","gTq","gUQ","gUj","gUo","gUy","gUz","gV4","gV5","gVa","gVl","gW0","gWA","gWT","gX3","gXc","gXh","gXt","gXx","gZ8","gZf","ga4","gai","gbG","gbP","gbV","gbx","gcC","gdU","geT","geb","gey","gfN","gfY","gfb","gfc","gfn","ghU","ghf","gho","gi2","gi9","giC","giO","gig","giy","gjL","gjO","gjT","gjb","gk5","gkG","gkU","gkW","gkc","gkf","gkg","gkp","gl0","gl7","gm2","gmC","gmH","gmW","gmm","gn9","gnN","gng","gnv","gnx","gnz","go6","goE","goc","gor","gpD","gpQ","gph","gq3","gq6","gqO","gqn","grK","grU","grZ","grs","gt0","gt5","gtD","gtH","gtN","gtT","gtY","gtf","gtp","guD","guw","gvH","gvL","gvc","gvk","gvt","gwd","gx8","gxA","gxH","gxX","gxj","gxr","gxw","gy4","gyH","gyT","gz1","gzP","gzW","gzZ","gzh","gzj","gzw","h","h8","hZ","hc","hr","hu","i","i4","i5","iF","iM","ib","ii","iw","j","j9","jh","jp","jx","k0","kO","l5","lh","lj","lp","m","mK","n","nC","nH","ni","nq","oB","oP","oW","oZ","od","oo","pM","pZ","pr","ps","q1","qA","qC","qZ","r6","rJ","sAS","sAb","sAp","sAu","sAy","sB","sB1","sB3","sBA","sBP","sBW","sCO","sCY","sCd","sCj","sDt","sEh","sF0","sF1","sFR","sFT","sFw","sG1","sG3","sGQ","sGV","sGd","sHJ","sHX","sHm","sHq","sHu","sIF","sIt","sJ0","sJS","sJo","sJy","sKM","sKU","sKV","sLA","sLY","sLn","sLx","sM0","sMB","sMj","sN","sN7","sNF","sNh","sNl","sO3","sO9","sOc","sOl","sP","sPK","sPe","sPj","sPu","sPw","sPy","sQ7","sQr","sRA","sRd","sRn","sRu","sSB","sTq","sUQ","sUo","sUy","sUz","sV4","sV5","sVa","sWA","sWT","sX3","sXc","sXh","sXt","sXx","sZ8","sa4","sai","sbG","sbP","sbV","scC","sdU","seT","seb","sfN","sfY","sfb","sfc","sfn","shU","shf","sho","si2","siC","sig","siy","sjL","sjO","sjT","sjb","sk5","skG","skU","skW","skc","skf","skg","skp","sl7","sm2","smC","smH","sn9","snN","sng","snv","snx","so6","soE","soc","spD","spQ","sph","sq3","sq6","sqO","srU","srZ","srs","st0","st5","stD","stN","stT","stY","stf","suD","suw","svH","svL","svk","svt","swd","sxA","sxH","sxX","sxj","sxr","sxw","sy4","syH","syT","sz1","szW","szZ","szh","szj","szw","t","tM","tZ","tg","tt","u","u8","uB","ub","vV","w","wE","wL","wW","wY","wg","wn","x3","xW","xc","xe","xo","y0","yC","yM","yN","yc","yn","yq","yu","yv","yx","yy","z2","z4","z6","zV","zY","zr"]
+$.Au=[C.RP,Z.hx,{created:Z.HC},C.Ln,H.Dg,{"":H.bu},C.z6Y,Q.Tg,{created:Q.rt},C.IZ,L.rm,{created:L.Rp},C.zq,A.Qa,{created:A.EL},C.tf,A.Zt,{created:A.IV},C.RJ,Q.JG,{created:Q.Zo},C.Ye,U.qW,{created:U.ZV},C.z7,B.G6,{created:B.Dw},C.Ma,A.F1,{created:A.z5},C.jRs,F.Be,{created:F.Fe},C.kA,L.u7,{created:L.Cu},C.Wup,H.LZ,{"":H.UI},C.P0k,V.lI,{created:V.fv},C.hG,A.ir,{created:A.oa},C.aj,U.fI,{created:U.Ry},C.G4,O.CN,{created:O.On},C.RcY,A.aQ,{created:A.AJ},C.KJ,N.mk,{created:N.N0},C.yiu,A.knI,{created:A.Th},C.HI,H.Pg,{"":H.aR},C.ila,Q.xI,{created:Q.lK},C.lpG,R.LU,{created:R.rA},C.Yte,M.KL,{created:M.Ro},C.mR,A.fl,{created:A.Du},C.SB,X.E7,{created:X.jD},C.Tq,Z.vj,{created:Z.mA},C.JW,A.Ww,{created:A.ZC},C.qo,K.jY,{created:K.US},C.wH,D.Kz,{created:D.JR},C.cx5,D.m8,{created:D.zY},C.l49,Z.uL,{created:Z.Hx},C.FU,R.lw,{created:R.fR},C.rd6,R.E0,{created:R.Hv},C.yG,K.nm,{created:K.an},C.px,A.tz,{created:A.J8},C.epC,Z.Jc,{created:Z.zg},C.Fd,F.E9,{created:F.TW},C.Bm,A.XP,{created:A.XL},C.hg,W.hd,{},C.Fv,U.ob,{created:U.zy},C.Wza,B.pR,{created:B.b4},C.l6,A.iL,{created:A.lT},C.ri,W.yy,{},C.Hk,A.Gk,{created:A.bH},C.r6,X.Vu,{created:X.bV}]
I.$lazy($,"globalThis","DX","jk",function(){return function() { return this; }()})
I.$lazy($,"globalWindow","pG","Qm",function(){return $.jk().window})
I.$lazy($,"globalWorker","zA","Nl",function(){return $.jk().Worker})
@@ -24696,14 +24855,13 @@
return e.message;
}
}())})
-I.$lazy($,"_codeMatcher","rC","Ks",function(){return new H.VR(H.v4("/code/",!1,!0,!1),null,null)})
-I.$lazy($,"_scriptMatcher","lF","hK",function(){return new H.VR(H.v4("scripts/.+",!1,!0,!1),null,null)})
-I.$lazy($,"currentIsolateMatcher","qY","oy",function(){return new H.VR(H.v4("#/isolates/\\d+",!1,!0,!1),null,null)})
+I.$lazy($,"_currentIsolateMatcher","m6","QJ",function(){return new H.VR(H.v4("#/isolates/\\d+",!1,!0,!1),null,null)})
+I.$lazy($,"_currentObjectMatcher","vi","wM",function(){return new H.VR(H.v4("#/isolates/\\d+/",!1,!0,!1),null,null)})
I.$lazy($,"customElementsReady","xp","ax",function(){return new B.wJ().call$0()})
I.$lazy($,"_toStringList","Ml","RM",function(){return[]})
-I.$lazy($,"validationPattern","zP","R0",function(){return new H.VR(H.v4("^(?:[a-zA-Z$][a-zA-Z$0-9_]*\\.)*(?:[a-zA-Z$][a-zA-Z$0-9_]*=?|-|unary-|\\[\\]=|~|==|\\[\\]|\\*|/|%|~/|\\+|<<|>>|>=|>|<=|<|&|\\^|\\|)$",!1,!0,!1),null,null)})
+I.$lazy($,"publicSymbolPattern","Np","bw",function(){return new H.VR(H.v4("^(?:(?:[\\-+*/%&|^]|\\[\\]=?|==|~/?|<[<=]?|>[>=]?|unary-)$|(?!(?:assert|break|c(?:a(?:se|tch)|lass|on(?:st|tinue))|d(?:efault|o)|e(?:lse|num|xtends)|f(?:alse|inal(?:ly)?|or)|i[fns]|n(?:ew|ull)|ret(?:hrow|urn)|s(?:uper|witch)|t(?:h(?:is|row)|r(?:ue|y))|v(?:ar|oid)|w(?:hile|ith))\\b(?!\\$))[a-zA-Z$][\\w$]*(?:=?$|[.](?!$)))+?$",!1,!0,!1),null,null)})
I.$lazy($,"_dynamicType","QG","P8",function(){return new H.EE(C.nN)})
-I.$lazy($,"_voidType","Q3","oj",function(){return new H.EE(C.z9)})
+I.$lazy($,"_voidType","Q3","oj",function(){return new H.EE(C.v6)})
I.$lazy($,"librariesByName","Ct","vK",function(){return H.dF()})
I.$lazy($,"currentJsMirrorSystem","GR","Cm",function(){return new H.Sn(null,new H.Lj(init.globalState.N0))})
I.$lazy($,"mangledNames","tj","bx",function(){return H.hY(init.mangledNames,!1)})
@@ -24711,25 +24869,25 @@
I.$lazy($,"mangledGlobalNames","iC","Sl",function(){return H.hY(init.mangledGlobalNames,!0)})
I.$lazy($,"_toStringVisiting","xg","xb",function(){return P.yv(null)})
I.$lazy($,"_toStringList","yu","tw",function(){return[]})
-I.$lazy($,"_splitRe","Um","qG",function(){return new H.VR(H.v4("^(?:([^:/?#]+):)?(?://(?:([^/?#]*)@)?(?:([\\w\\d\\-\\u0100-\\uffff.%]*)|\\[([A-Fa-f0-9:.]*)\\])(?::([0-9]+))?)?([^?#[]+)?(?:\\?([^#]*))?(?:#(.*))?$",!1,!0,!1),null,null)})
I.$lazy($,"_safeConsole","wk","pl",function(){return new W.QZ()})
I.$lazy($,"webkitEvents","fD","Vp",function(){return H.B7(["animationend","webkitAnimationEnd","animationiteration","webkitAnimationIteration","animationstart","webkitAnimationStart","fullscreenchange","webkitfullscreenchange","fullscreenerror","webkitfullscreenerror","keyadded","webkitkeyadded","keyerror","webkitkeyerror","keymessage","webkitkeymessage","needkey","webkitneedkey","pointerlockchange","webkitpointerlockchange","pointerlockerror","webkitpointerlockerror","resourcetimingbufferfull","webkitresourcetimingbufferfull","transitionend","webkitTransitionEnd","speechchange","webkitSpeechChange"],P.L5(null,null,null,null,null))})
I.$lazy($,"context","eo","cM",function(){return P.ND(function() { return this; }())})
I.$lazy($,"_DART_OBJECT_PROPERTY_NAME","kt","Iq",function(){return init.getIsolateTag("_$dart_dartObject")})
I.$lazy($,"_DART_CLOSURE_PROPERTY_NAME","Ri","Dp",function(){return init.getIsolateTag("_$dart_dartClosure")})
+I.$lazy($,"_dartProxyCtor","Je","hs",function(){return function DartObject(o) { this.o = o; }})
I.$lazy($,"_loggers","DY","U0",function(){return H.VM(H.B7([],P.L5(null,null,null,null,null)),[J.O,N.TJ])})
I.$lazy($,"_logger","G3","iU",function(){return N.Jx("Observable.dirtyCheck")})
I.$lazy($,"objectType","XV","aA",function(){return P.re(C.nY)})
-I.$lazy($,"_pathRegExp","Jm","tN",function(){return new L.YJ().call$0()})
+I.$lazy($,"_pathRegExp","Jm","tN",function(){return new L.Md().call$0()})
I.$lazy($,"_spacesRegExp","JV","c3",function(){return new H.VR(H.v4("\\s",!1,!0,!1),null,null)})
I.$lazy($,"_logger","y7","aT",function(){return N.Jx("observe.PathObserver")})
I.$lazy($,"_typesByName","Hi","Ej",function(){return P.L5(null,null,null,J.O,P.uq)})
I.$lazy($,"_waitType","Mp","p2",function(){return P.L5(null,null,null,J.O,A.XP)})
I.$lazy($,"_waitSuper","uv","xY",function(){return P.L5(null,null,null,J.O,[J.Q,A.XP])})
I.$lazy($,"_declarations","EJ","cd",function(){return P.L5(null,null,null,J.O,A.XP)})
-I.$lazy($,"_objectType","Cy","Tf",function(){return P.re(C.nY)})
+I.$lazy($,"_objectType","p0","H8",function(){return P.re(C.nY)})
I.$lazy($,"_sheetLog","Fa","vM",function(){return N.Jx("polymer.stylesheet")})
-I.$lazy($,"_reverseEventTranslations","fp","QX",function(){return new A.w10().call$0()})
+I.$lazy($,"_reverseEventTranslations","fp","QX",function(){return new A.w12().call$0()})
I.$lazy($,"bindPattern","ZA","VC",function(){return new H.VR(H.v4("\\{\\{([^{}]*)}}",!1,!0,!1),null,null)})
I.$lazy($,"_polymerSyntax","Df","Nd",function(){var z=P.L5(null,null,null,J.O,P.a)
z.FV(0,C.va)
@@ -24743,20 +24901,24 @@
I.$lazy($,"_shadowHost","cU","od",function(){return H.VM(new P.kM(null),[A.zs])})
I.$lazy($,"_librariesToLoad","x2","nT",function(){return A.GA(document,J.CC(C.ol.gmW(window)),null,null)})
I.$lazy($,"_libs","D9","UG",function(){return $.Cm().gvU()})
-I.$lazy($,"_rootUri","aU","RQ",function(){return $.Cm().Aq.gcZ().gFP()})
+I.$lazy($,"_rootUri","aU","RQ",function(){return $.Cm().F1.gcZ().gFP()})
I.$lazy($,"_loaderLog","ha","M7",function(){return N.Jx("polymer.loader")})
I.$lazy($,"_typeHandlers","lq","CT",function(){return new Z.W6().call$0()})
I.$lazy($,"_logger","m0","eH",function(){return N.Jx("polymer_expressions")})
-I.$lazy($,"_BINARY_OPERATORS","AM","e6",function(){return H.B7(["+",new K.Uf(),"-",new K.Ra(),"*",new K.wJY(),"/",new K.zOQ(),"==",new K.W6o(),"!=",new K.MdQ(),">",new K.YJG(),">=",new K.DOe(),"<",new K.lPa(),"<=",new K.Ufa(),"||",new K.Raa(),"&&",new K.w0(),"|",new K.w4()],P.L5(null,null,null,null,null))})
-I.$lazy($,"_UNARY_OPERATORS","ju","ww",function(){return H.B7(["+",new K.w5(),"-",new K.w7(),"!",new K.w9()],P.L5(null,null,null,null,null))})
-I.$lazy($,"_checkboxEventType","S8","FF",function(){return new M.DO().call$0()})
+I.$lazy($,"_BINARY_OPERATORS","AM","e6",function(){return H.B7(["+",new K.Ra(),"-",new K.wJY(),"*",new K.zOQ(),"/",new K.W6o(),"==",new K.MdQ(),"!=",new K.YJG(),">",new K.DOe(),">=",new K.lPa(),"<",new K.Ufa(),"<=",new K.Raa(),"||",new K.w0(),"&&",new K.w4(),"|",new K.w5()],P.L5(null,null,null,null,null))})
+I.$lazy($,"_UNARY_OPERATORS","ju","ww",function(){return H.B7(["+",new K.w7(),"-",new K.w10(),"!",new K.w11()],P.L5(null,null,null,null,null))})
+I.$lazy($,"_matcher","RI","cI",function(){return new H.VR(H.v4("scripts/.+",!1,!0,!1),null,null)})
+I.$lazy($,"_matcher","PA","xN",function(){return new H.VR(H.v4("code/.+",!1,!0,!1),null,null)})
+I.$lazy($,"_matcher","Oi","Yk",function(){return new H.VR(H.v4("classes/\\d+$",!1,!0,!1),null,null)})
+I.$lazy($,"_matcher","TO","uG",function(){return new H.VR(H.v4("^functions/native-.+|^functions/collected-.+|^functions/reused-.+|^functions/stub-.+|^classes/\\d+/functions/.+|^classes/\\d+/closures/.+|^classes/\\d+/implicit_closures/.+|^classes/\\d+/dispatchers/.+",!1,!0,!1),null,null)})
+I.$lazy($,"_checkboxEventType","S8","FF",function(){return new M.lP().call$0()})
I.$lazy($,"_contentsOwner","mn","LQ",function(){return H.VM(new P.kM(null),[null])})
I.$lazy($,"_ownerStagingDocument","EW","JM",function(){return H.VM(new P.kM(null),[null])})
-I.$lazy($,"_allTemplatesSelectors","Sf","cz",function(){return"template, "+J.C0(C.uE.gvc(C.uE),new M.lP()).zV(0,", ")})
+I.$lazy($,"_allTemplatesSelectors","Sf","cz",function(){return"template, "+J.C0(C.uE.gvc(C.uE),new M.Uf()).zV(0,", ")})
I.$lazy($,"_expando","fF","rw",function(){return H.VM(new P.kM("template_binding"),[null])})
init.functionAliases={}
-init.metadata=[P.a,C.WP,C.nz,C.xC,C.io,C.wW,"object","interceptor","proto","extension","indexability","type","name","codeUnit","isolate","function","entry","sender","e","msg","message","x","record","value","memberName",{func:"pd",args:[J.O]},"string","source","radix","handleError","array","codePoints","charCodes","years","month","day","hours","minutes","seconds","milliseconds","isUtc","receiver","key","positionalArguments","namedArguments","className","argument","index","ex","expression","keyValuePairs","result","closure","numberOfArguments","arg1","arg2","arg3","arg4","arity","functions","reflectionInfo","isStatic","jsArguments","propertyName","isIntercepted","fieldName","property","staticName","list","returnType","parameterTypes","optionalParameterTypes","rti","typeArguments","target","typeInfo","substitutionName",,"onTypeVariable","types","startIndex","substitution","arguments","isField","checks","asField","s","t","signature","context","contextName","o","allowShorter","obj","tag","interceptorClass","transformer","hooks","pattern","multiLine","caseSensitive","global","needle","haystack","other","from","to",{func:"Dv",args:[null]},"_","objectId","id","members",{func:"kl",void:true},{func:"NT"},"iterable","f","initialValue","combine","leftDelimiter","rightDelimiter","start","end","skipCount","src","srcStart","dst","dstStart","count","a","element","endIndex","left","right","compare","symbol",{func:"pB",ret:P.vr,args:[P.a]},"reflectee","mangledName","methods","variables","mixinNames","code","typeVariables","owner","simpleName","victim","fieldSpecification","jsMangledNames","isGlobal","map","errorHandler","zone",!1,"futures","eagerError","listeners","callback","notificationHandler",{func:"G5",void:true,args:[null]},{func:"Vx",void:true,args:[null],opt:[P.MN]},"error","stackTrace","userCode","onSuccess","onError","subscription","future","duration",{func:"cX",void:true,args:[P.JB,P.e4,P.JB,null,P.MN]},"self","parent",{func:"aD",args:[P.JB,P.e4,P.JB,{func:"NT"}]},{func:"wD",args:[P.JB,P.e4,P.JB,{func:"Dv",args:[null]},null]},"arg",{func:"ta",args:[P.JB,P.e4,P.JB,{func:"bh",args:[null,null]},null,null]},{func:"HQ",ret:{func:"NT"},args:[P.JB,P.e4,P.JB,{func:"NT"}]},{func:"v7",ret:{func:"Dv",args:[null]},args:[P.JB,P.e4,P.JB,{func:"Dv",args:[null]}]},{func:"IU",ret:{func:"bh",args:[null,null]},args:[P.JB,P.e4,P.JB,{func:"bh",args:[null,null]}]},{func:"iV",void:true,args:[P.JB,P.e4,P.JB,{func:"NT"}]},{func:"xN",ret:P.lO,args:[P.JB,P.e4,P.JB,P.a6,{func:"kl",void:true}]},{func:"Zb",void:true,args:[P.JB,P.e4,P.JB,J.O]},"line",{func:"xM",void:true,args:[J.O]},{func:"Nf",ret:P.JB,args:[P.JB,P.e4,P.JB,P.aY,[P.Z0,P.wv,null]]},"specification","zoneValues","table",{func:"Ib",ret:J.kn,args:[null,null]},"b",{func:"Re",ret:J.im,args:[null]},"parts","m","number","json","reviver",{func:"uJ",ret:P.a,args:[null]},"toEncodable","sb","lead","tail",{func:"P2",ret:J.im,args:[P.Rz,P.Rz]},"formattedString",{func:"E0",ret:J.kn,args:[P.a,P.a]},{func:"DZ",ret:J.im,args:[P.a]},{func:"K4",ret:J.im,args:[J.O],named:{onError:{func:"Tl",ret:J.im,args:[J.O]},radix:J.im}},"host","scheme","query","queryParameters","fragment","component","val","val1","val2",C.xM,"canonicalTable","text","encoding","spaceToPlus",{func:"Tf",ret:J.O,args:[W.D0]},"typeExtension","url","onProgress","withCredentials","method","mimeType","requestHeaders","responseType","sendData","thing","win","constructor",{func:"jn",args:[null,null,null,null]},"oldValue","newValue","document","extendsTagName","w","captureThis","data","createProxy","mustCopy","total",{func:"qE",ret:J.O,args:[J.im,J.im]},"pad","current","currentStart","currentEnd","old","oldStart","oldEnd","distances","arr1","arr2","searchLength","splices","records","field","cls","props","getter","template","extendee","sheet","node","path","originalPrepareBinding","methodName","args","style","scope","doc","baseUri","seen","scripts","uriString","currentValue","v","expr","l","hash",{func:"qq",ret:[P.cX,K.Ae],args:[P.cX]},"classMirror","c","delegate","model","bound","stagingDocument","el","useRoot","content","bindings","n","elementId","deep","selectors","relativeSelectors","listener","useCapture","async","password","user","timestamp","canBubble","cancelable","view","detail","screenX","screenY","clientX","clientY","ctrlKey","altKey","shiftKey","metaKey","button","relatedTarget","attributeFilter","attributeOldValue","attributes","characterData","characterDataOldValue","childList","subtree","otherNode","newChild","refChild","oldChild","targetOrigin","messagePorts","length","invocation","collection","","separator",0,!0,"growable","fractionDigits","str","authentification","resume","portId","port","dataEvent","info",{func:"bh",args:[null,null]},"parameter","jsConstructor",{func:"Za",args:[J.O,null]},{func:"TS",args:[null,J.O]},"g",G.dZ,G.No,{func:"qo",ret:P.Z0},C.nJ,C.mI,{func:"Hw",args:[P.Z0]},{func:"Wy",ret:G.bv},{func:"Gt",args:[G.bv]},"ResponseError","errorType","label","row",[P.Z0,J.O,G.rj],[J.Q,G.kx],[P.Z0,J.O,J.GW],{func:"zs",ret:J.O,args:[J.O]},{func:"NA",ret:G.CM},{func:"Ve",args:[G.CM]},{func:"I0",ret:J.O},{func:"cH",ret:J.im},{func:"Z5",args:[J.im]},"address","coverages","modelName",{func:"Tz",void:true,args:[null,null]},"st","timer","response",{func:"Uf",ret:J.kn},{func:"zk",args:[J.kn]},{func:"EU",ret:P.iD},{func:"Y4",args:[P.iD]},"event","so",J.im,J.O,{func:"fP",ret:J.GW},{func:"Ku",args:[J.GW]},[J.Q,G.Q4],"calls","codes","instructionList","profileCode",{func:"VL",args:[G.kx,G.kx]},[J.Q,G.c2],C.Us,{func:"dt",ret:P.cX},"lineNumber","hits",{func:"cM",void:true,args:[P.Z0]},"k",[J.Q,G.Y2],[J.Q,J.O],"children","rowIndex",V.qC,{func:"ru",ret:G.mL},"E",P.Z0,G.bv,[P.Z0,J.O,W.cv],"done",B.Ur,H.Tp,"trace",J.kn,Q.xI,Z.KU,G.kx,{func:"bR",ret:G.kx},{func:"VI",args:[G.kx]},F.qbd,"r",{func:"Np",void:true,args:[W.ea,null,W.KV]},R.Ds,{func:"ZT",void:true,args:[null,null,null]},R.LP,"action","test","library",{func:"h0",args:[H.Uz]},{func:"rm",args:[P.wv,P.ej]},"reflectiveName","useEval",{func:"lv",args:[P.wv,null]},"typeArgument","tv","methodOwner","fieldOwner","i",{func:"qe",ret:P.Ms,args:[J.im]},{func:"K6",ret:P.X9,args:[J.im]},{func:"Pt",ret:J.O,args:[J.im]},{func:"ag",args:[J.O,J.O]},"eventId",{func:"uu",void:true,args:[P.a],opt:[P.MN]},"theError","theStackTrace",{func:"rf",args:[P.a]},{func:"YP",void:true,opt:[null]},{func:"BG",args:[null],opt:[null]},"ignored","convert","isMatch","cancelOnError","handleData","handleDone","resumeSignal","wasInputPaused","onData","onDone","dispatch",{func:"ha",args:[null,P.MN]},"sink",{func:"aR",void:true,args:[null,P.MN]},"inputEvent","otherZone","runGuarded","bucket","each","ifAbsent","cell","objects","orElse","elements","offset","comp","key1","key2",{func:"Q5",ret:J.kn,args:[P.jp]},{func:"dc",args:[J.O,P.a]},"leadingSurrogate","nextCodeUnit","matched",{func:"Tl",ret:J.im,args:[J.O]},{func:"Zh",ret:J.GW,args:[J.O]},"factor","quotient","pathSegments","base","reference","ss","ch",{func:"hs",ret:J.kn,args:[J.im]},"digit",{func:"an",ret:J.im,args:[J.im]},"part",{func:"wJ",ret:J.im,args:[null,null]},"byteString",{func:"BC",ret:J.im,args:[J.im,J.im]},"byte","buffer",{func:"YI",void:true,args:[P.a]},"title","xhr","header","shouldAdd","prevValue","selector","stream","pos",G.Q4,{func:"JA",ret:G.Q4},{func:"Qs",args:[G.Q4]},E.pv,F.Vfx,A.Urj,N.oub,{func:"Rs",ret:J.kn,args:[P.Z0]},{func:"Xb",args:[P.Z0,J.im]},{func:"hN",ret:J.O,args:[J.kn]},"newSpace",K.c4r,{func:"iR",args:[J.im,null]},{func:"W7",void:true,args:[J.kn,null]},"expand",Z.Squ,S.Vf,R.Zt,"codeCaller",{func:"SR",args:[G.Vi]},J.Q,G.XN,{func:"r5",ret:J.Q},{func:"mR",args:[J.Q]},{func:"ub",void:true,args:[G.bv,J.im,P.Z0]},"totalSamples",{func:"F9",void:true,args:[G.bv]},{func:"bN",ret:J.O,args:[G.Y2]},{func:"Sz",void:true,args:[W.ea,null,W.cv]},X.KUl,"profile",S.PO,Z.tuj,M.mHk,"logLevel","rec",{func:"IM",args:[N.HV]},G.mL,{func:"pu",args:[G.mL]},L.Vct,Z.uL,A.D13,A.WZq,A.pva,A.cda,A.qFb,A.rna,A.Vba,V.waa,{func:"wA",void:true,args:[J.O,null,null]},{func:"Pz",ret:J.O,args:[J.GW]},"time","bytes",{func:"pT",ret:J.O,args:[P.Z0]},"frame",{func:"h6",ret:J.kn,args:[J.O]},A.ir,{func:"Aa",args:[P.e4,P.JB]},{func:"Zg",args:[P.JB,P.e4,P.JB,{func:"Dv",args:[null]}]},{func:"S5",ret:J.kn,args:[P.a]},{func:"ZD",args:[[J.Q,G.DA]]},{func:"D8",args:[[J.Q,T.z2]]},"superDecl","delegates","matcher","scopeDescriptor","cssText","properties","onName","eventType","declaration","elementElement","root",{func:"rj",void:true,args:[J.O,J.O]},"preventCascade",{func:"KT",void:true,args:[[P.cX,T.z2]]},"changes","events",{func:"WW",void:true,args:[W.ea]},"callbackOrMethod","pair","p",{func:"YT",void:true,args:[[J.Q,T.z2]]},"d","def",{func:"Zu",args:[J.O,null,null]},"arg0",{func:"pp",ret:U.zX,args:[U.hw,U.hw]},"h","item","kind","precedence","prefix",3,{func:"mM",args:[U.hw]},Q.V0,A.T5,G.rj,{func:"ls",ret:G.rj},{func:"PF",args:[G.rj]},{func:"Yg",ret:J.O,args:[G.c2]},U.oaa,"coverage",Q.Sq,K.q2,X.q3,"y","instanceRef",{func:"en",ret:J.O,args:[P.a]},{func:"QF",ret:J.O,args:[[J.Q,P.a]]},"values","instanceNodes",{func:"K7",void:true,args:[[J.Q,G.DA]]},{func:"Lr",ret:G.No},{func:"AfY",args:[G.No]},R.Dsd,];$=null
+init.metadata=[P.a,C.WP,C.nz,C.xC,C.io,C.wW,"object","interceptor","proto","extension","indexability","type","name","codeUnit","isolate","function","entry","args","sender","e","msg","topLevel","message","isSpawnUri","startPaused","replyTo","x","record","value","memberName",{func:"pL",args:[J.O]},"string","source","radix","handleError","array","codePoints","charCodes","years","month","day","hours","minutes","seconds","milliseconds","isUtc","receiver","key","positionalArguments","namedArguments","className","argument","index","ex","expression","keyValuePairs","result","closure","numberOfArguments","arg1","arg2","arg3","arg4","arity","functions","reflectionInfo","isStatic","jsArguments","propertyName","isIntercepted","fieldName","property","staticName","list","returnType","parameterTypes","optionalParameterTypes","rti","typeArguments","target","typeInfo","substitutionName",,"onTypeVariable","types","startIndex","substitution","arguments","isField","checks","asField","s","t","signature","context","contextName","o","allowShorter","obj","tag","interceptorClass","transformer","hooks","pattern","multiLine","caseSensitive","global","needle","haystack","other","from","to",{func:"Dv",args:[null]},"_",{func:"kl",void:true},{func:"NT"},"iterable","f","initialValue","combine","leftDelimiter","rightDelimiter","compare","start","end","skipCount","src","srcStart","dst","dstStart","count","a","element","endIndex","left","right","symbol",{func:"pB",ret:P.vr,args:[P.a]},"reflectee","mangledName","methods","variables","mixinNames","code","typeVariables","owner","simpleName","victim","fieldSpecification","jsMangledNames","isGlobal","map","errorHandler","zone","listeners","callback","notificationHandler",{func:"G5",void:true,args:[null]},{func:"Mx",void:true,args:[null],opt:[P.MN]},"error","stackTrace","userCode","onSuccess","onError","subscription","future","duration",{func:"cX",void:true,args:[P.dl,P.e4,P.dl,null,P.MN]},"self","parent",{func:"aD",args:[P.dl,P.e4,P.dl,{func:"NT"}]},{func:"wD",args:[P.dl,P.e4,P.dl,{func:"Dv",args:[null]},null]},"arg",{func:"ta",args:[P.dl,P.e4,P.dl,{func:"bh",args:[null,null]},null,null]},{func:"HQ",ret:{func:"NT"},args:[P.dl,P.e4,P.dl,{func:"NT"}]},{func:"XR",ret:{func:"Dv",args:[null]},args:[P.dl,P.e4,P.dl,{func:"Dv",args:[null]}]},{func:"IU",ret:{func:"bh",args:[null,null]},args:[P.dl,P.e4,P.dl,{func:"bh",args:[null,null]}]},{func:"iV",void:true,args:[P.dl,P.e4,P.dl,{func:"NT"}]},{func:"xN",ret:P.tU,args:[P.dl,P.e4,P.dl,P.a6,{func:"kl",void:true}]},{func:"Zb",void:true,args:[P.dl,P.e4,P.dl,J.O]},"line",{func:"xM",void:true,args:[J.O]},{func:"Nf",ret:P.dl,args:[P.dl,P.e4,P.dl,P.aY,[P.Z0,P.wv,null]]},"specification","zoneValues","table",{func:"Ib",ret:J.kn,args:[null,null]},"b",{func:"bZ",ret:J.im,args:[null]},"parts","m","number","json","reviver",{func:"uJ",ret:P.a,args:[null]},"toEncodable",{func:"P2",ret:J.im,args:[P.Tx,P.Tx]},"formattedString","n",{func:"E0",ret:J.kn,args:[P.a,P.a]},{func:"DZ",ret:J.im,args:[P.a]},{func:"K4",ret:J.im,args:[J.O],named:{onError:{func:"Tl",ret:J.im,args:[J.O]},radix:J.im}},"uri","host","scheme","query","queryParameters","fragment","component",C.xM,!1,"canonicalTable","text","encoding","spaceToPlus",{func:"Tf",ret:J.O,args:[W.D0]},"typeExtension","url","withCredentials","onProgress","method","responseType","mimeType","requestHeaders","sendData","thing","win","constructor",{func:"jn",args:[null,null,null,null]},"oldValue","newValue","document","extendsTagName","w","captureThis","data","createProxy","mustCopy","total",{func:"qE",ret:J.O,args:[J.im,J.im]},"pad","current","currentStart","currentEnd","old","oldStart","oldEnd","distances","arr1","arr2","searchLength","splices","records","field","cls","props","getter","template","extendee","sheet","node","path","originalPrepareBinding","methodName","style","scope","doc","baseUri","seen","scripts","uriString","currentValue","v","expr","l","hash",{func:"qq",ret:[P.QV,K.Ae],args:[P.QV]},"classMirror","c","id","members","collection","vm","delegate","model","bound","stagingDocument","el","useRoot","content","bindings","elementId","deep","selectors","relativeSelectors","listener","useCapture","async","user","password","timestamp","canBubble","cancelable","view","detail","screenX","screenY","clientX","clientY","ctrlKey","altKey","shiftKey","metaKey","button","relatedTarget","childList","attributes","characterData","subtree","attributeOldValue","characterDataOldValue","attributeFilter","otherNode","newChild","refChild","oldChild","targetOrigin","messagePorts","length","invocation","","separator",0,!0,"growable","fractionDigits","str","times","authentification","resume","responsePort","errorsAreFatal","pingType","portId","port","dataEvent","info","val",{func:"bh",args:[null,null]},"parameter","unsortedIndex","jsConstructor",{func:"Za",args:[J.O,null]},{func:"TS",args:[null,J.O]},"g",G.dZ,D.No,{func:"Wy",ret:D.bv},C.Nw,C.mI,{func:"UO",args:[D.bv]},{func:"e2",ret:D.af},{func:"fK",args:[D.af]},"label","row",{func:"I0",ret:J.O},{func:"Hr",void:true,args:[D.af]},"serviceObject","event",J.im,[J.Q,G.Y2],[J.Q,J.O],"children","rowIndex",D.SI,[P.Z0,J.O,W.cv],{func:"rm",ret:D.SI},C.Us,{func:"Q5",args:[D.SI]},"done",B.Vf,D.af,J.kn,Q.xI,Z.pv,D.kx,{func:"bR",ret:D.kx},{func:"oX",args:[D.kx]},F.Vfx,J.O,{func:"Uf",ret:J.kn},{func:"zk",args:[J.kn]},"r",{func:"Np",void:true,args:[W.ea,null,W.KV]},R.Dsd,{func:"ZT",void:true,args:[null,null,null]},R.LP,"action","test","library",{func:"h0",args:[H.Uz]},{func:"Gk",args:[P.wv,P.ej]},"reflectiveName","useEval",{func:"lv",args:[P.wv,null]},"typeArgument","tv","methodOwner","fieldOwner","i",{func:"qe",ret:P.Ms,args:[J.im]},{func:"Z5",args:[J.im]},{func:"K6",ret:P.X9,args:[J.im]},{func:"Pt",ret:J.O,args:[J.im]},{func:"ag",args:[J.O,J.O]},"eventId",{func:"uu",void:true,args:[P.a],opt:[P.MN]},{func:"YP",void:true,opt:[null]},{func:"BG",args:[null],opt:[null]},"ignored","convert","isMatch","cancelOnError","handleData","handleDone","resumeSignal","wasInputPaused","onData","onDone","dispatch",{func:"ha",args:[null,P.MN]},"sink",{func:"aR",void:true,args:[null,P.MN]},"inputEvent","otherZone","runGuarded","bucket","each","ifAbsent","cell","objects","orElse","k","elements","offset","comp","key1","key2",{func:"Yz",ret:J.kn,args:[P.jp]},{func:"dc",args:[J.O,P.a]},"leadingSurrogate","nextCodeUnit","matched",{func:"Tl",ret:J.im,args:[J.O]},{func:"Zh",ret:J.GW,args:[J.O]},"factor","quotient","pathSegments","base","reference","ss","ch",{func:"cd",ret:J.kn,args:[J.im]},{func:"an",ret:J.im,args:[J.im]},"digit","part",{func:"wJ",ret:J.im,args:[null,null]},"byteString",{func:"BC",ret:J.im,args:[J.im,J.im]},"byte","buffer",{func:"YI",void:true,args:[P.a]},"title","xhr","header","shouldAdd","prevValue","selector","stream","pos",F.tuj,{func:"Wr",ret:[P.b8,V.qC],args:[J.O]},Q.wn,{func:"fT",ret:{func:"Wr",ret:[P.b8,V.qC],args:[J.O]}},{func:"kP",args:[{func:"Wr",ret:[P.b8,V.qC],args:[J.O]}]},{func:"ln",ret:Q.wn},{func:"FG",args:[Q.wn]},{func:"uG",void:true,args:[W.Wp]},L.Vct,H.Tp,A.D13,N.WZq,{func:"Rs",ret:J.kn,args:[P.Z0]},{func:"Xb",args:[P.Z0,J.im]},{func:"hN",ret:J.O,args:[J.kn]},"newSpace",K.pva,"response","st",{func:"iR",args:[J.im,null]},{func:"W7",void:true,args:[J.kn,null]},"expand",{func:"vl",ret:[P.b8,D.af],args:[J.O]},Z.cda,D.Qd,{func:"eJ",ret:D.Qd},{func:"us",args:[D.Qd]},L.waa,"codeCaller",{func:"SR",args:[D.Vi]},J.Q,G.XN,{func:"cH",ret:J.im},{func:"Df",ret:J.O,args:[G.Y2]},{func:"Sz",void:true,args:[W.ea,null,W.cv]},X.V4,D.bv,D.V9,{func:"r5",ret:J.Q},Z.V10,M.V11,"logLevel","rec",{func:"IM",args:[N.HV]},Z.uL,A.V12,A.V13,A.V14,A.V15,A.V16,A.V17,A.V18,G.mL,{func:"ru",ret:G.mL},{func:"pu",args:[G.mL]},V.V19,{func:"a7",void:true,args:[J.O,null,null]},{func:"Pz",ret:J.O,args:[J.GW]},"time","bytes",{func:"vI",ret:J.O,args:[P.Z0]},"frame",{func:"h6",ret:J.kn,args:[J.O]},A.ir,{func:"Aa",args:[P.e4,P.dl]},{func:"Zg",args:[P.dl,P.e4,P.dl,{func:"Dv",args:[null]}]},{func:"Lc",ret:J.kn,args:[P.a]},{func:"mR",args:[[J.Q,G.DA]]},{func:"ZD",args:[[J.Q,T.z2]]},"superDecl","delegates","matcher","scopeDescriptor","cssText","properties","onName","eventType","declaration","elementElement","root",{func:"rd",void:true,args:[J.O,J.O]},"preventCascade",{func:"CS",void:true,args:[[P.QV,T.z2]]},"changes","events",{func:"WW",void:true,args:[W.ea]},"callbackOrMethod","pair","p",{func:"YT",void:true,args:[[J.Q,T.z2]]},"d","def",{func:"Zu",args:[J.O,null,null]},"arg0",{func:"pp",ret:U.zX,args:[U.hw,U.hw]},"h","item","kind","precedence","prefix",3,{func:"qo",args:[U.hw]},Q.V20,A.T5,D.rj,{func:"ls",ret:D.rj},{func:"J5",args:[D.rj]},{func:"Yg",ret:J.O,args:[D.c2]},U.V21,"so",{func:"Mg",void:true,args:[D.SI]},"coverage","scriptCoverage","profile","codeTable",{func:"VL",args:[D.kx,D.kx]},{func:"KK",args:[null,D.kx]},[P.Z0,J.O,J.GW],{func:"zs",ret:J.O,args:[J.O]},"serviceId",{func:"c7",ret:V.qC},{func:"JC",args:[V.qC]},{func:"Tt",ret:P.Z0},{func:"BV",args:[P.Z0]},"timer",{func:"zn",args:[null,D.bv]},"E","scriptHits",{func:"H6",ret:J.O,args:[D.kx]},{func:"jB",ret:D.WAE},{func:"aS",args:[D.WAE]},"calls","codes","profileData","sampleCount","disassembly","profileTicks","address",{func:"Lr",ret:D.No},{func:"HB",ret:D.af,args:[V.qC]},{func:"nR",ret:Z.uL},U.V22,Q.Ds,V.qC,K.V23,X.V24,"y","instanceRef",{func:"en",ret:J.O,args:[P.a]},{func:"QF",ret:J.O,args:[[J.Q,P.a]]},"values","instanceNodes",{func:"K7",void:true,args:[[J.Q,G.DA]]},{func:"oe",args:[J.Q]},];$=null
I = I.$finishIsolateConstructor(I)
$=new I()
function convertToFastObject(properties) {
@@ -24825,9 +24987,9 @@
init.currentScript = currentScript;
if (typeof dartMainRunner === "function") {
- dartMainRunner(function() { H.oT(E.nE()); });
+ dartMainRunner((function(a){H.oT(E.nE(),a)}), []);
} else {
- H.oT(E.nE());
+ (function(a){H.oT(E.nE(),a)})([]);
}
})
function init(){I.p={}
@@ -24955,41 +25117,41 @@
$desc=$collectedClasses.qE
if($desc instanceof Array)$desc=$desc[1]
qE.prototype=$desc
-function pa(){}pa.builtin$cls="pa"
-if(!"name" in pa)pa.name="pa"
-$desc=$collectedClasses.pa
+function zw(){}zw.builtin$cls="zw"
+if(!"name" in zw)zw.name="zw"
+$desc=$collectedClasses.zw
if($desc instanceof Array)$desc=$desc[1]
-pa.prototype=$desc
-function Gh(){}Gh.builtin$cls="Gh"
-if(!"name" in Gh)Gh.name="Gh"
-$desc=$collectedClasses.Gh
+zw.prototype=$desc
+function Ps(){}Ps.builtin$cls="Ps"
+if(!"name" in Ps)Ps.name="Ps"
+$desc=$collectedClasses.Ps
if($desc instanceof Array)$desc=$desc[1]
-Gh.prototype=$desc
-Gh.prototype.gN=function(receiver){return receiver.target}
-Gh.prototype.gt5=function(receiver){return receiver.type}
-Gh.prototype.st5=function(receiver,v){return receiver.type=v}
-Gh.prototype.gcC=function(receiver){return receiver.hash}
-Gh.prototype.scC=function(receiver,v){return receiver.hash=v}
-Gh.prototype.gmH=function(receiver){return receiver.href}
+Ps.prototype=$desc
+Ps.prototype.gN=function(receiver){return receiver.target}
+Ps.prototype.gt5=function(receiver){return receiver.type}
+Ps.prototype.st5=function(receiver,v){return receiver.type=v}
+Ps.prototype.gcC=function(receiver){return receiver.hash}
+Ps.prototype.scC=function(receiver,v){return receiver.hash=v}
+Ps.prototype.gmH=function(receiver){return receiver.href}
function A0(){}A0.builtin$cls="A0"
if(!"name" in A0)A0.name="A0"
$desc=$collectedClasses.A0
if($desc instanceof Array)$desc=$desc[1]
A0.prototype=$desc
-function na(){}na.builtin$cls="na"
-if(!"name" in na)na.name="na"
-$desc=$collectedClasses.na
+function Sb(){}Sb.builtin$cls="Sb"
+if(!"name" in Sb)Sb.name="Sb"
+$desc=$collectedClasses.Sb
if($desc instanceof Array)$desc=$desc[1]
-na.prototype=$desc
-na.prototype.gN=function(receiver){return receiver.target}
-na.prototype.gcC=function(receiver){return receiver.hash}
-na.prototype.scC=function(receiver,v){return receiver.hash=v}
-na.prototype.gmH=function(receiver){return receiver.href}
-function Mr(){}Mr.builtin$cls="Mr"
-if(!"name" in Mr)Mr.name="Mr"
-$desc=$collectedClasses.Mr
+Sb.prototype=$desc
+Sb.prototype.gN=function(receiver){return receiver.target}
+Sb.prototype.gcC=function(receiver){return receiver.hash}
+Sb.prototype.scC=function(receiver,v){return receiver.hash=v}
+Sb.prototype.gmH=function(receiver){return receiver.href}
+function vp(){}vp.builtin$cls="vp"
+if(!"name" in vp)vp.name="vp"
+$desc=$collectedClasses.vp
if($desc instanceof Array)$desc=$desc[1]
-Mr.prototype=$desc
+vp.prototype=$desc
function zx(){}zx.builtin$cls="zx"
if(!"name" in zx)zx.name="zx"
$desc=$collectedClasses.zx
@@ -25013,22 +25175,22 @@
if($desc instanceof Array)$desc=$desc[1]
W2.prototype=$desc
W2.prototype.gO3=function(receiver){return receiver.url}
-function it(){}it.builtin$cls="it"
-if(!"name" in it)it.name="it"
-$desc=$collectedClasses.it
+function zJ(){}zJ.builtin$cls="zJ"
+if(!"name" in zJ)zJ.name="zJ"
+$desc=$collectedClasses.zJ
if($desc instanceof Array)$desc=$desc[1]
-it.prototype=$desc
+zJ.prototype=$desc
function Az(){}Az.builtin$cls="Az"
if(!"name" in Az)Az.name="Az"
$desc=$collectedClasses.Az
if($desc instanceof Array)$desc=$desc[1]
Az.prototype=$desc
Az.prototype.gt5=function(receiver){return receiver.type}
-function QP(){}QP.builtin$cls="QP"
-if(!"name" in QP)QP.name="QP"
-$desc=$collectedClasses.QP
+function Fy(){}Fy.builtin$cls="Fy"
+if(!"name" in Fy)Fy.name="Fy"
+$desc=$collectedClasses.Fy
if($desc instanceof Array)$desc=$desc[1]
-QP.prototype=$desc
+Fy.prototype=$desc
function QW(){}QW.builtin$cls="QW"
if(!"name" in QW)QW.name="QW"
$desc=$collectedClasses.QW
@@ -25041,11 +25203,11 @@
QW.prototype.st5=function(receiver,v){return receiver.type=v}
QW.prototype.gP=function(receiver){return receiver.value}
QW.prototype.sP=function(receiver,v){return receiver.value=v}
-function jr(){}jr.builtin$cls="jr"
-if(!"name" in jr)jr.name="jr"
-$desc=$collectedClasses.jr
+function ca(){}ca.builtin$cls="ca"
+if(!"name" in ca)ca.name="ca"
+$desc=$collectedClasses.ca
if($desc instanceof Array)$desc=$desc[1]
-jr.prototype=$desc
+ca.prototype=$desc
function Ny(){}Ny.builtin$cls="Ny"
if(!"name" in Ny)Ny.name="Ny"
$desc=$collectedClasses.Ny
@@ -25069,12 +25231,12 @@
$desc=$collectedClasses.BR
if($desc instanceof Array)$desc=$desc[1]
BR.prototype=$desc
-function di(){}di.builtin$cls="di"
-if(!"name" in di)di.name="di"
-$desc=$collectedClasses.di
+function wT(){}wT.builtin$cls="wT"
+if(!"name" in wT)wT.name="wT"
+$desc=$collectedClasses.wT
if($desc instanceof Array)$desc=$desc[1]
-di.prototype=$desc
-di.prototype.gRn=function(receiver){return receiver.data}
+wT.prototype=$desc
+wT.prototype.gRn=function(receiver){return receiver.data}
function d7(){}d7.builtin$cls="d7"
if(!"name" in d7)d7.name="d7"
$desc=$collectedClasses.d7
@@ -25101,21 +25263,21 @@
if($desc instanceof Array)$desc=$desc[1]
vHT.prototype=$desc
vHT.prototype.gbG=function(receiver){return receiver.options}
-function n0(){}n0.builtin$cls="n0"
-if(!"name" in n0)n0.name="n0"
-$desc=$collectedClasses.n0
+function hh(){}hh.builtin$cls="hh"
+if(!"name" in hh)hh.name="hh"
+$desc=$collectedClasses.hh
if($desc instanceof Array)$desc=$desc[1]
-n0.prototype=$desc
+hh.prototype=$desc
function Em(){}Em.builtin$cls="Em"
if(!"name" in Em)Em.name="Em"
$desc=$collectedClasses.Em
if($desc instanceof Array)$desc=$desc[1]
Em.prototype=$desc
-function pt(){}pt.builtin$cls="pt"
-if(!"name" in pt)pt.name="pt"
-$desc=$collectedClasses.pt
+function NWk(){}NWk.builtin$cls="NWk"
+if(!"name" in NWk)NWk.name="NWk"
+$desc=$collectedClasses.NWk
if($desc instanceof Array)$desc=$desc[1]
-pt.prototype=$desc
+NWk.prototype=$desc
function rV(){}rV.builtin$cls="rV"
if(!"name" in rV)rV.name="rV"
$desc=$collectedClasses.rV
@@ -25207,27 +25369,27 @@
if($desc instanceof Array)$desc=$desc[1]
hH.prototype=$desc
hH.prototype.goc=function(receiver){return receiver.name}
-function Aa(){}Aa.builtin$cls="Aa"
-if(!"name" in Aa)Aa.name="Aa"
-$desc=$collectedClasses.Aa
+function QU(){}QU.builtin$cls="QU"
+if(!"name" in QU)QU.name="QU"
+$desc=$collectedClasses.QU
if($desc instanceof Array)$desc=$desc[1]
-Aa.prototype=$desc
-Aa.prototype.gtT=function(receiver){return receiver.code}
+QU.prototype=$desc
+QU.prototype.gtT=function(receiver){return receiver.code}
function u5(){}u5.builtin$cls="u5"
if(!"name" in u5)u5.name="u5"
$desc=$collectedClasses.u5
if($desc instanceof Array)$desc=$desc[1]
u5.prototype=$desc
-function Tq(){}Tq.builtin$cls="Tq"
-if(!"name" in Tq)Tq.name="Tq"
-$desc=$collectedClasses.Tq
+function h4(){}h4.builtin$cls="h4"
+if(!"name" in h4)h4.name="h4"
+$desc=$collectedClasses.h4
if($desc instanceof Array)$desc=$desc[1]
-Tq.prototype=$desc
-Tq.prototype.gB=function(receiver){return receiver.length}
-Tq.prototype.gbP=function(receiver){return receiver.method}
-Tq.prototype.goc=function(receiver){return receiver.name}
-Tq.prototype.soc=function(receiver,v){return receiver.name=v}
-Tq.prototype.gN=function(receiver){return receiver.target}
+h4.prototype=$desc
+h4.prototype.gB=function(receiver){return receiver.length}
+h4.prototype.gbP=function(receiver){return receiver.method}
+h4.prototype.goc=function(receiver){return receiver.name}
+h4.prototype.soc=function(receiver,v){return receiver.name=v}
+h4.prototype.gN=function(receiver){return receiver.target}
function W4(){}W4.builtin$cls="W4"
if(!"name" in W4)W4.name="W4"
$desc=$collectedClasses.W4
@@ -25248,11 +25410,11 @@
$desc=$collectedClasses.tA
if($desc instanceof Array)$desc=$desc[1]
tA.prototype=$desc
-function wa(){}wa.builtin$cls="wa"
-if(!"name" in wa)wa.name="wa"
-$desc=$collectedClasses.wa
+function xn(){}xn.builtin$cls="xn"
+if(!"name" in xn)xn.name="xn"
+$desc=$collectedClasses.xn
if($desc instanceof Array)$desc=$desc[1]
-wa.prototype=$desc
+xn.prototype=$desc
function Uq(){}Uq.builtin$cls="Uq"
if(!"name" in Uq)Uq.name="Uq"
$desc=$collectedClasses.Uq
@@ -25279,13 +25441,11 @@
if($desc instanceof Array)$desc=$desc[1]
zU.prototype=$desc
zU.prototype.giC=function(receiver){return receiver.responseText}
-zU.prototype.gys=function(receiver){return receiver.status}
-zU.prototype.gpo=function(receiver){return receiver.statusText}
-function rk(){}rk.builtin$cls="rk"
-if(!"name" in rk)rk.name="rk"
-$desc=$collectedClasses.rk
+function wa(){}wa.builtin$cls="wa"
+if(!"name" in wa)wa.name="wa"
+$desc=$collectedClasses.wa
if($desc instanceof Array)$desc=$desc[1]
-rk.prototype=$desc
+wa.prototype=$desc
function tX(){}tX.builtin$cls="tX"
if(!"name" in tX)tX.name="tX"
$desc=$collectedClasses.tX
@@ -25314,7 +25474,7 @@
Mi.prototype.gTq=function(receiver){return receiver.checked}
Mi.prototype.sTq=function(receiver,v){return receiver.checked=v}
Mi.prototype.gMB=function(receiver){return receiver.form}
-Mi.prototype.gaK=function(receiver){return receiver.list}
+Mi.prototype.go6=function(receiver){return receiver.list}
Mi.prototype.goc=function(receiver){return receiver.name}
Mi.prototype.soc=function(receiver,v){return receiver.name=v}
Mi.prototype.gLA=function(receiver){return receiver.src}
@@ -25403,12 +25563,12 @@
if($desc instanceof Array)$desc=$desc[1]
aB.prototype=$desc
aB.prototype.gG1=function(receiver){return receiver.message}
-function fJ(){}fJ.builtin$cls="fJ"
-if(!"name" in fJ)fJ.name="fJ"
-$desc=$collectedClasses.fJ
+function W7(){}W7.builtin$cls="W7"
+if(!"name" in W7)W7.name="W7"
+$desc=$collectedClasses.W7
if($desc instanceof Array)$desc=$desc[1]
-fJ.prototype=$desc
-fJ.prototype.gG1=function(receiver){return receiver.message}
+W7.prototype=$desc
+W7.prototype.gG1=function(receiver){return receiver.message}
function BK(){}BK.builtin$cls="BK"
if(!"name" in BK)BK.name="BK"
$desc=$collectedClasses.BK
@@ -25420,6 +25580,7 @@
if($desc instanceof Array)$desc=$desc[1]
Rv.prototype=$desc
Rv.prototype.gjO=function(receiver){return receiver.id}
+Rv.prototype.gph=function(receiver){return receiver.label}
function HO(){}HO.builtin$cls="HO"
if(!"name" in HO)HO.name="HO"
$desc=$collectedClasses.HO
@@ -25435,11 +25596,11 @@
$desc=$collectedClasses.ZY
if($desc instanceof Array)$desc=$desc[1]
ZY.prototype=$desc
-function Hy(){}Hy.builtin$cls="Hy"
-if(!"name" in Hy)Hy.name="Hy"
-$desc=$collectedClasses.Hy
+function cx(){}cx.builtin$cls="cx"
+if(!"name" in cx)cx.name="cx"
+$desc=$collectedClasses.cx
if($desc instanceof Array)$desc=$desc[1]
-Hy.prototype=$desc
+cx.prototype=$desc
function EeC(){}EeC.builtin$cls="EeC"
if(!"name" in EeC)EeC.name="EeC"
$desc=$collectedClasses.EeC
@@ -25455,11 +25616,11 @@
Qb.prototype=$desc
Qb.prototype.gP=function(receiver){return receiver.value}
Qb.prototype.sP=function(receiver,v){return receiver.value=v}
-function Vu(){}Vu.builtin$cls="Vu"
-if(!"name" in Vu)Vu.name="Vu"
-$desc=$collectedClasses.Vu
+function PG(){}PG.builtin$cls="PG"
+if(!"name" in PG)PG.name="PG"
+$desc=$collectedClasses.PG
if($desc instanceof Array)$desc=$desc[1]
-Vu.prototype=$desc
+PG.prototype=$desc
function xe(){}xe.builtin$cls="xe"
if(!"name" in xe)xe.name="xe"
$desc=$collectedClasses.xe
@@ -25476,42 +25637,42 @@
$desc=$collectedClasses.bn
if($desc instanceof Array)$desc=$desc[1]
bn.prototype=$desc
-function Imr(){}Imr.builtin$cls="Imr"
-if(!"name" in Imr)Imr.name="Imr"
-$desc=$collectedClasses.Imr
+function ab(){}ab.builtin$cls="ab"
+if(!"name" in ab)ab.name="ab"
+$desc=$collectedClasses.ab
if($desc instanceof Array)$desc=$desc[1]
-Imr.prototype=$desc
-Imr.prototype.gjO=function(receiver){return receiver.id}
-Imr.prototype.goc=function(receiver){return receiver.name}
-Imr.prototype.gt5=function(receiver){return receiver.type}
+ab.prototype=$desc
+ab.prototype.gjO=function(receiver){return receiver.id}
+ab.prototype.goc=function(receiver){return receiver.name}
+ab.prototype.gt5=function(receiver){return receiver.type}
function Ve(){}Ve.builtin$cls="Ve"
if(!"name" in Ve)Ve.name="Ve"
$desc=$collectedClasses.Ve
if($desc instanceof Array)$desc=$desc[1]
Ve.prototype=$desc
-function CX(){}CX.builtin$cls="CX"
-if(!"name" in CX)CX.name="CX"
-$desc=$collectedClasses.CX
+function Wp(){}Wp.builtin$cls="Wp"
+if(!"name" in Wp)Wp.name="Wp"
+$desc=$collectedClasses.Wp
if($desc instanceof Array)$desc=$desc[1]
-CX.prototype=$desc
+Wp.prototype=$desc
function H9(){}H9.builtin$cls="H9"
if(!"name" in H9)H9.name="H9"
$desc=$collectedClasses.H9
if($desc instanceof Array)$desc=$desc[1]
H9.prototype=$desc
-function FI(){}FI.builtin$cls="FI"
-if(!"name" in FI)FI.name="FI"
-$desc=$collectedClasses.FI
+function o4(){}o4.builtin$cls="o4"
+if(!"name" in o4)o4.name="o4"
+$desc=$collectedClasses.o4
if($desc instanceof Array)$desc=$desc[1]
-FI.prototype=$desc
-FI.prototype.gjL=function(receiver){return receiver.oldValue}
-FI.prototype.gN=function(receiver){return receiver.target}
-FI.prototype.gt5=function(receiver){return receiver.type}
-function oU(){}oU.builtin$cls="oU"
-if(!"name" in oU)oU.name="oU"
-$desc=$collectedClasses.oU
+o4.prototype=$desc
+o4.prototype.gjL=function(receiver){return receiver.oldValue}
+o4.prototype.gN=function(receiver){return receiver.target}
+o4.prototype.gt5=function(receiver){return receiver.type}
+function Q0(){}Q0.builtin$cls="Q0"
+if(!"name" in Q0)Q0.name="Q0"
+$desc=$collectedClasses.Q0
if($desc instanceof Array)$desc=$desc[1]
-oU.prototype=$desc
+Q0.prototype=$desc
function ih(){}ih.builtin$cls="ih"
if(!"name" in ih)ih.name="ih"
$desc=$collectedClasses.ih
@@ -25559,6 +25720,8 @@
$desc=$collectedClasses.l9
if($desc instanceof Array)$desc=$desc[1]
l9.prototype=$desc
+l9.prototype.gph=function(receiver){return receiver.label}
+l9.prototype.sph=function(receiver,v){return receiver.label=v}
function Ql(){}Ql.builtin$cls="Ql"
if(!"name" in Ql)Ql.name="Ql"
$desc=$collectedClasses.Ql
@@ -25566,6 +25729,8 @@
Ql.prototype=$desc
Ql.prototype.gMB=function(receiver){return receiver.form}
Ql.prototype.gvH=function(receiver){return receiver.index}
+Ql.prototype.gph=function(receiver){return receiver.label}
+Ql.prototype.sph=function(receiver,v){return receiver.label=v}
Ql.prototype.gP=function(receiver){return receiver.value}
Ql.prototype.sP=function(receiver,v){return receiver.value=v}
function Xp(){}Xp.builtin$cls="Xp"
@@ -25584,11 +25749,11 @@
$desc=$collectedClasses.bP
if($desc instanceof Array)$desc=$desc[1]
bP.prototype=$desc
-function FH(){}FH.builtin$cls="FH"
-if(!"name" in FH)FH.name="FH"
-$desc=$collectedClasses.FH
+function mX(){}mX.builtin$cls="mX"
+if(!"name" in mX)mX.name="mX"
+$desc=$collectedClasses.mX
if($desc instanceof Array)$desc=$desc[1]
-FH.prototype=$desc
+mX.prototype=$desc
function SN(){}SN.builtin$cls="SN"
if(!"name" in SN)SN.name="SN"
$desc=$collectedClasses.SN
@@ -25615,11 +25780,11 @@
jg.prototype=$desc
jg.prototype.gtT=function(receiver){return receiver.code}
jg.prototype.gG1=function(receiver){return receiver.message}
-function qj(){}qj.builtin$cls="qj"
-if(!"name" in qj)qj.name="qj"
-$desc=$collectedClasses.qj
+function GT(){}GT.builtin$cls="GT"
+if(!"name" in GT)GT.name="GT"
+$desc=$collectedClasses.GT
if($desc instanceof Array)$desc=$desc[1]
-qj.prototype=$desc
+GT.prototype=$desc
function nC(){}nC.builtin$cls="nC"
if(!"name" in nC)nC.name="nC"
$desc=$collectedClasses.nC
@@ -25703,36 +25868,50 @@
if($desc instanceof Array)$desc=$desc[1]
I0.prototype=$desc
I0.prototype.gpQ=function(receiver){return receiver.applyAuthorStyles}
-function CY(){}CY.builtin$cls="CY"
-if(!"name" in CY)CY.name="CY"
-$desc=$collectedClasses.CY
+function QR(){}QR.builtin$cls="QR"
+if(!"name" in QR)QR.name="QR"
+$desc=$collectedClasses.QR
if($desc instanceof Array)$desc=$desc[1]
-CY.prototype=$desc
-CY.prototype.gLA=function(receiver){return receiver.src}
-CY.prototype.gt5=function(receiver){return receiver.type}
-CY.prototype.st5=function(receiver,v){return receiver.type=v}
-function Wt(){}Wt.builtin$cls="Wt"
-if(!"name" in Wt)Wt.name="Wt"
-$desc=$collectedClasses.Wt
+QR.prototype=$desc
+QR.prototype.gLA=function(receiver){return receiver.src}
+QR.prototype.gt5=function(receiver){return receiver.type}
+QR.prototype.st5=function(receiver,v){return receiver.type=v}
+function Sc(){}Sc.builtin$cls="Sc"
+if(!"name" in Sc)Sc.name="Sc"
+$desc=$collectedClasses.Sc
if($desc instanceof Array)$desc=$desc[1]
-Wt.prototype=$desc
+Sc.prototype=$desc
function uaa(){}uaa.builtin$cls="uaa"
if(!"name" in uaa)uaa.name="uaa"
$desc=$collectedClasses.uaa
if($desc instanceof Array)$desc=$desc[1]
uaa.prototype=$desc
-function Hd(){}Hd.builtin$cls="Hd"
-if(!"name" in Hd)Hd.name="Hd"
-$desc=$collectedClasses.Hd
+uaa.prototype.gPK=function(receiver){return receiver.results}
+function yg(){}yg.builtin$cls="yg"
+if(!"name" in yg)yg.name="yg"
+$desc=$collectedClasses.yg
if($desc instanceof Array)$desc=$desc[1]
-Hd.prototype=$desc
-Hd.prototype.gkc=function(receiver){return receiver.error}
-Hd.prototype.gG1=function(receiver){return receiver.message}
+yg.prototype=$desc
+function mG(){}mG.builtin$cls="mG"
+if(!"name" in mG)mG.name="mG"
+$desc=$collectedClasses.mG
+if($desc instanceof Array)$desc=$desc[1]
+mG.prototype=$desc
+mG.prototype.gkc=function(receiver){return receiver.error}
+mG.prototype.gG1=function(receiver){return receiver.message}
function Ul(){}Ul.builtin$cls="Ul"
if(!"name" in Ul)Ul.name="Ul"
$desc=$collectedClasses.Ul
if($desc instanceof Array)$desc=$desc[1]
Ul.prototype=$desc
+Ul.prototype.gPK=function(receiver){return receiver.results}
+function uj(){}uj.builtin$cls="uj"
+if(!"name" in uj)uj.name="uj"
+$desc=$collectedClasses.uj
+if($desc instanceof Array)$desc=$desc[1]
+uj.prototype=$desc
+uj.prototype.gV5=function(receiver){return receiver.isFinal}
+uj.prototype.gB=function(receiver){return receiver.length}
function G5(){}G5.builtin$cls="G5"
if(!"name" in G5)G5.name="G5"
$desc=$collectedClasses.G5
@@ -25755,11 +25934,11 @@
Lx.prototype=$desc
Lx.prototype.gt5=function(receiver){return receiver.type}
Lx.prototype.st5=function(receiver,v){return receiver.type=v}
-function Er(){}Er.builtin$cls="Er"
-if(!"name" in Er)Er.name="Er"
-$desc=$collectedClasses.Er
+function fh(){}fh.builtin$cls="fh"
+if(!"name" in fh)fh.name="fh"
+$desc=$collectedClasses.fh
if($desc instanceof Array)$desc=$desc[1]
-Er.prototype=$desc
+fh.prototype=$desc
function qk(){}qk.builtin$cls="qk"
if(!"name" in qk)qk.name="qk"
$desc=$collectedClasses.qk
@@ -25780,11 +25959,11 @@
$desc=$collectedClasses.tV
if($desc instanceof Array)$desc=$desc[1]
tV.prototype=$desc
-function KP(){}KP.builtin$cls="KP"
-if(!"name" in KP)KP.name="KP"
-$desc=$collectedClasses.KP
+function BT(){}BT.builtin$cls="BT"
+if(!"name" in BT)BT.name="BT"
+$desc=$collectedClasses.BT
if($desc instanceof Array)$desc=$desc[1]
-KP.prototype=$desc
+BT.prototype=$desc
function yY(){}yY.builtin$cls="yY"
if(!"name" in yY)yY.name="yY"
$desc=$collectedClasses.yY
@@ -25815,11 +25994,11 @@
if($desc instanceof Array)$desc=$desc[1]
xV.prototype=$desc
xV.prototype.gRn=function(receiver){return receiver.data}
-function Dn(){}Dn.builtin$cls="Dn"
-if(!"name" in Dn)Dn.name="Dn"
-$desc=$collectedClasses.Dn
+function FH(){}FH.builtin$cls="FH"
+if(!"name" in FH)FH.name="FH"
+$desc=$collectedClasses.FH
if($desc instanceof Array)$desc=$desc[1]
-Dn.prototype=$desc
+FH.prototype=$desc
function y6(){}y6.builtin$cls="y6"
if(!"name" in y6)y6.name="y6"
$desc=$collectedClasses.y6
@@ -25832,6 +26011,8 @@
RH.prototype=$desc
RH.prototype.gfY=function(receiver){return receiver.kind}
RH.prototype.sfY=function(receiver,v){return receiver.kind=v}
+RH.prototype.gph=function(receiver){return receiver.label}
+RH.prototype.sph=function(receiver,v){return receiver.label=v}
RH.prototype.gLA=function(receiver){return receiver.src}
function pU(){}pU.builtin$cls="pU"
if(!"name" in pU)pU.name="pU"
@@ -25843,11 +26024,11 @@
$desc=$collectedClasses.OJ
if($desc instanceof Array)$desc=$desc[1]
OJ.prototype=$desc
-function Qa(){}Qa.builtin$cls="Qa"
-if(!"name" in Qa)Qa.name="Qa"
-$desc=$collectedClasses.Qa
+function Mf(){}Mf.builtin$cls="Mf"
+if(!"name" in Mf)Mf.name="Mf"
+$desc=$collectedClasses.Mf
if($desc instanceof Array)$desc=$desc[1]
-Qa.prototype=$desc
+Mf.prototype=$desc
function dp(){}dp.builtin$cls="dp"
if(!"name" in dp)dp.name="dp"
$desc=$collectedClasses.dp
@@ -25863,11 +26044,11 @@
$desc=$collectedClasses.aG
if($desc instanceof Array)$desc=$desc[1]
aG.prototype=$desc
-function J6(){}J6.builtin$cls="J6"
-if(!"name" in J6)J6.name="J6"
-$desc=$collectedClasses.J6
+function fA(){}fA.builtin$cls="fA"
+if(!"name" in fA)fA.name="fA"
+$desc=$collectedClasses.fA
if($desc instanceof Array)$desc=$desc[1]
-J6.prototype=$desc
+fA.prototype=$desc
function u9(){}u9.builtin$cls="u9"
if(!"name" in u9)u9.name="u9"
$desc=$collectedClasses.u9
@@ -25875,7 +26056,6 @@
u9.prototype=$desc
u9.prototype.goc=function(receiver){return receiver.name}
u9.prototype.soc=function(receiver,v){return receiver.name=v}
-u9.prototype.gys=function(receiver){return receiver.status}
function Bn(){}Bn.builtin$cls="Bn"
if(!"name" in Bn)Bn.name="Bn"
$desc=$collectedClasses.Bn
@@ -25884,11 +26064,11 @@
Bn.prototype.goc=function(receiver){return receiver.name}
Bn.prototype.gP=function(receiver){return receiver.value}
Bn.prototype.sP=function(receiver,v){return receiver.value=v}
-function hq(){}hq.builtin$cls="hq"
-if(!"name" in hq)hq.name="hq"
-$desc=$collectedClasses.hq
+function Eb(){}Eb.builtin$cls="Eb"
+if(!"name" in Eb)Eb.name="Eb"
+$desc=$collectedClasses.Eb
if($desc instanceof Array)$desc=$desc[1]
-hq.prototype=$desc
+Eb.prototype=$desc
function UL(){}UL.builtin$cls="UL"
if(!"name" in UL)UL.name="UL"
$desc=$collectedClasses.UL
@@ -25924,21 +26104,31 @@
$desc=$collectedClasses.F2
if($desc instanceof Array)$desc=$desc[1]
F2.prototype=$desc
-function nL(){}nL.builtin$cls="nL"
-if(!"name" in nL)nL.name="nL"
-$desc=$collectedClasses.nL
+function VB(){}VB.builtin$cls="VB"
+if(!"name" in VB)VB.name="VB"
+$desc=$collectedClasses.VB
if($desc instanceof Array)$desc=$desc[1]
-nL.prototype=$desc
-function QV(){}QV.builtin$cls="QV"
-if(!"name" in QV)QV.name="QV"
-$desc=$collectedClasses.QV
+VB.prototype=$desc
+function Cy(){}Cy.builtin$cls="Cy"
+if(!"name" in Cy)Cy.name="Cy"
+$desc=$collectedClasses.Cy
if($desc instanceof Array)$desc=$desc[1]
-QV.prototype=$desc
+Cy.prototype=$desc
function q0(){}q0.builtin$cls="q0"
if(!"name" in q0)q0.name="q0"
$desc=$collectedClasses.q0
if($desc instanceof Array)$desc=$desc[1]
q0.prototype=$desc
+function c5(){}c5.builtin$cls="c5"
+if(!"name" in c5)c5.name="c5"
+$desc=$collectedClasses.c5
+if($desc instanceof Array)$desc=$desc[1]
+c5.prototype=$desc
+function LO(){}LO.builtin$cls="LO"
+if(!"name" in LO)LO.name="LO"
+$desc=$collectedClasses.LO
+if($desc instanceof Array)$desc=$desc[1]
+LO.prototype=$desc
function Q7(){}Q7.builtin$cls="Q7"
if(!"name" in Q7)Q7.name="Q7"
$desc=$collectedClasses.Q7
@@ -25977,11 +26167,11 @@
$desc=$collectedClasses.NE
if($desc instanceof Array)$desc=$desc[1]
NE.prototype=$desc
-function lC(){}lC.builtin$cls="lC"
-if(!"name" in lC)lC.name="lC"
-$desc=$collectedClasses.lC
+function Ak(){}Ak.builtin$cls="Ak"
+if(!"name" in Ak)Ak.name="Ak"
+$desc=$collectedClasses.Ak
if($desc instanceof Array)$desc=$desc[1]
-lC.prototype=$desc
+Ak.prototype=$desc
function y5(){}y5.builtin$cls="y5"
if(!"name" in y5)y5.name="y5"
$desc=$collectedClasses.y5
@@ -26002,11 +26192,11 @@
$desc=$collectedClasses.ui
if($desc instanceof Array)$desc=$desc[1]
ui.prototype=$desc
-function mk(){}mk.builtin$cls="mk"
-if(!"name" in mk)mk.name="mk"
-$desc=$collectedClasses.mk
+function vO(){}vO.builtin$cls="vO"
+if(!"name" in vO)vO.name="vO"
+$desc=$collectedClasses.vO
if($desc instanceof Array)$desc=$desc[1]
-mk.prototype=$desc
+vO.prototype=$desc
function DQ(){}DQ.builtin$cls="DQ"
if(!"name" in DQ)DQ.name="DQ"
$desc=$collectedClasses.DQ
@@ -26032,13 +26222,13 @@
$desc=$collectedClasses.eG
if($desc instanceof Array)$desc=$desc[1]
eG.prototype=$desc
-function bd(){}bd.builtin$cls="bd"
-if(!"name" in bd)bd.name="bd"
-$desc=$collectedClasses.bd
+function lv(){}lv.builtin$cls="lv"
+if(!"name" in lv)lv.name="lv"
+$desc=$collectedClasses.lv
if($desc instanceof Array)$desc=$desc[1]
-bd.prototype=$desc
-bd.prototype.gt5=function(receiver){return receiver.type}
-bd.prototype.gUQ=function(receiver){return receiver.values}
+lv.prototype=$desc
+lv.prototype.gt5=function(receiver){return receiver.type}
+lv.prototype.gUQ=function(receiver){return receiver.values}
function pf(){}pf.builtin$cls="pf"
if(!"name" in pf)pf.name="pf"
$desc=$collectedClasses.pf
@@ -26060,11 +26250,11 @@
$desc=$collectedClasses.mCz
if($desc instanceof Array)$desc=$desc[1]
mCz.prototype=$desc
-function wf(){}wf.builtin$cls="wf"
-if(!"name" in wf)wf.name="wf"
-$desc=$collectedClasses.wf
+function kK(){}kK.builtin$cls="kK"
+if(!"name" in kK)kK.name="kK"
+$desc=$collectedClasses.kK
if($desc instanceof Array)$desc=$desc[1]
-wf.prototype=$desc
+kK.prototype=$desc
function n5(){}n5.builtin$cls="n5"
if(!"name" in n5)n5.name="n5"
$desc=$collectedClasses.n5
@@ -26075,11 +26265,11 @@
$desc=$collectedClasses.bb
if($desc instanceof Array)$desc=$desc[1]
bb.prototype=$desc
-function Ic(){}Ic.builtin$cls="Ic"
-if(!"name" in Ic)Ic.name="Ic"
-$desc=$collectedClasses.Ic
+function NdT(){}NdT.builtin$cls="NdT"
+if(!"name" in NdT)NdT.name="NdT"
+$desc=$collectedClasses.NdT
if($desc instanceof Array)$desc=$desc[1]
-Ic.prototype=$desc
+NdT.prototype=$desc
function lc(){}lc.builtin$cls="lc"
if(!"name" in lc)lc.name="lc"
$desc=$collectedClasses.lc
@@ -26095,11 +26285,11 @@
$desc=$collectedClasses.qM
if($desc instanceof Array)$desc=$desc[1]
qM.prototype=$desc
-function tk(){}tk.builtin$cls="tk"
-if(!"name" in tk)tk.name="tk"
-$desc=$collectedClasses.tk
+function Ob(){}Ob.builtin$cls="Ob"
+if(!"name" in Ob)Ob.name="Ob"
+$desc=$collectedClasses.Ob
if($desc instanceof Array)$desc=$desc[1]
-tk.prototype=$desc
+Ob.prototype=$desc
function me(){}me.builtin$cls="me"
if(!"name" in me)me.name="me"
$desc=$collectedClasses.me
@@ -26111,11 +26301,11 @@
$desc=$collectedClasses.oB
if($desc instanceof Array)$desc=$desc[1]
oB.prototype=$desc
-function nh(){}nh.builtin$cls="nh"
-if(!"name" in nh)nh.name="nh"
-$desc=$collectedClasses.nh
+function NY(){}NY.builtin$cls="NY"
+if(!"name" in NY)NY.name="NY"
+$desc=$collectedClasses.NY
if($desc instanceof Array)$desc=$desc[1]
-nh.prototype=$desc
+NY.prototype=$desc
function EI(){}EI.builtin$cls="EI"
if(!"name" in EI)EI.name="EI"
$desc=$collectedClasses.EI
@@ -26127,26 +26317,26 @@
$desc=$collectedClasses.MI
if($desc instanceof Array)$desc=$desc[1]
MI.prototype=$desc
-function Ub(){}Ub.builtin$cls="Ub"
-if(!"name" in Ub)Ub.name="Ub"
-$desc=$collectedClasses.Ub
+function rg(){}rg.builtin$cls="rg"
+if(!"name" in rg)rg.name="rg"
+$desc=$collectedClasses.rg
if($desc instanceof Array)$desc=$desc[1]
-Ub.prototype=$desc
-function kK(){}kK.builtin$cls="kK"
-if(!"name" in kK)kK.name="kK"
-$desc=$collectedClasses.kK
-if($desc instanceof Array)$desc=$desc[1]
-kK.prototype=$desc
-function eW(){}eW.builtin$cls="eW"
-if(!"name" in eW)eW.name="eW"
-$desc=$collectedClasses.eW
-if($desc instanceof Array)$desc=$desc[1]
-eW.prototype=$desc
+rg.prototype=$desc
function um(){}um.builtin$cls="um"
if(!"name" in um)um.name="um"
$desc=$collectedClasses.um
if($desc instanceof Array)$desc=$desc[1]
um.prototype=$desc
+function eW(){}eW.builtin$cls="eW"
+if(!"name" in eW)eW.name="eW"
+$desc=$collectedClasses.eW
+if($desc instanceof Array)$desc=$desc[1]
+eW.prototype=$desc
+function kL(){}kL.builtin$cls="kL"
+if(!"name" in kL)kL.name="kL"
+$desc=$collectedClasses.kL
+if($desc instanceof Array)$desc=$desc[1]
+kL.prototype=$desc
function Fu(){}Fu.builtin$cls="Fu"
if(!"name" in Fu)Fu.name="Fu"
$desc=$collectedClasses.Fu
@@ -26195,11 +26385,11 @@
$desc=$collectedClasses.vd
if($desc instanceof Array)$desc=$desc[1]
vd.prototype=$desc
-function uzr(){}uzr.builtin$cls="uzr"
-if(!"name" in uzr)uzr.name="uzr"
-$desc=$collectedClasses.uzr
+function Jq(){}Jq.builtin$cls="Jq"
+if(!"name" in Jq)Jq.name="Jq"
+$desc=$collectedClasses.Jq
if($desc instanceof Array)$desc=$desc[1]
-uzr.prototype=$desc
+Jq.prototype=$desc
function Yd(){}Yd.builtin$cls="Yd"
if(!"name" in Yd)Yd.name="Yd"
$desc=$collectedClasses.Yd
@@ -26210,11 +26400,11 @@
$desc=$collectedClasses.kN
if($desc instanceof Array)$desc=$desc[1]
kN.prototype=$desc
-function lZ(){}lZ.builtin$cls="lZ"
-if(!"name" in lZ)lZ.name="lZ"
-$desc=$collectedClasses.lZ
+function AW(){}AW.builtin$cls="AW"
+if(!"name" in AW)AW.name="AW"
+$desc=$collectedClasses.AW
if($desc instanceof Array)$desc=$desc[1]
-lZ.prototype=$desc
+AW.prototype=$desc
function Gr(){}Gr.builtin$cls="Gr"
if(!"name" in Gr)Gr.name="Gr"
$desc=$collectedClasses.Gr
@@ -26226,11 +26416,11 @@
$desc=$collectedClasses.XE
if($desc instanceof Array)$desc=$desc[1]
XE.prototype=$desc
-function mO(){}mO.builtin$cls="mO"
-if(!"name" in mO)mO.name="mO"
-$desc=$collectedClasses.mO
+function GH(){}GH.builtin$cls="GH"
+if(!"name" in GH)GH.name="GH"
+$desc=$collectedClasses.GH
if($desc instanceof Array)$desc=$desc[1]
-mO.prototype=$desc
+GH.prototype=$desc
function lo(){}lo.builtin$cls="lo"
if(!"name" in lo)lo.name="lo"
$desc=$collectedClasses.lo
@@ -26318,11 +26508,11 @@
$desc=$collectedClasses.Eo
if($desc instanceof Array)$desc=$desc[1]
Eo.prototype=$desc
-function tL(){}tL.builtin$cls="tL"
-if(!"name" in tL)tL.name="tL"
-$desc=$collectedClasses.tL
+function Dn(){}Dn.builtin$cls="Dn"
+if(!"name" in Dn)Dn.name="Dn"
+$desc=$collectedClasses.Dn
if($desc instanceof Array)$desc=$desc[1]
-tL.prototype=$desc
+Dn.prototype=$desc
function pyk(){}pyk.builtin$cls="pyk"
if(!"name" in pyk)pyk.name="pyk"
$desc=$collectedClasses.pyk
@@ -26334,11 +26524,11 @@
$desc=$collectedClasses.ZD
if($desc instanceof Array)$desc=$desc[1]
ZD.prototype=$desc
-function rD(){}rD.builtin$cls="rD"
-if(!"name" in rD)rD.name="rD"
-$desc=$collectedClasses.rD
+function Rlr(){}Rlr.builtin$cls="Rlr"
+if(!"name" in Rlr)Rlr.name="Rlr"
+$desc=$collectedClasses.Rlr
if($desc instanceof Array)$desc=$desc[1]
-rD.prototype=$desc
+Rlr.prototype=$desc
function wD(){}wD.builtin$cls="wD"
if(!"name" in wD)wD.name="wD"
$desc=$collectedClasses.wD
@@ -26370,11 +26560,11 @@
$desc=$collectedClasses.mj
if($desc instanceof Array)$desc=$desc[1]
mj.prototype=$desc
-function cB(){}cB.builtin$cls="cB"
-if(!"name" in cB)cB.name="cB"
-$desc=$collectedClasses.cB
+function hW(){}hW.builtin$cls="hW"
+if(!"name" in hW)hW.name="hW"
+$desc=$collectedClasses.hW
if($desc instanceof Array)$desc=$desc[1]
-cB.prototype=$desc
+hW.prototype=$desc
function uY(){}uY.builtin$cls="uY"
if(!"name" in uY)uY.name="uY"
$desc=$collectedClasses.uY
@@ -26385,11 +26575,11 @@
$desc=$collectedClasses.yR
if($desc instanceof Array)$desc=$desc[1]
yR.prototype=$desc
-function GK(){}GK.builtin$cls="GK"
-if(!"name" in GK)GK.name="GK"
-$desc=$collectedClasses.GK
+function AX(){}AX.builtin$cls="AX"
+if(!"name" in AX)AX.name="AX"
+$desc=$collectedClasses.AX
if($desc instanceof Array)$desc=$desc[1]
-GK.prototype=$desc
+AX.prototype=$desc
function xJ(){}xJ.builtin$cls="xJ"
if(!"name" in xJ)xJ.name="xJ"
$desc=$collectedClasses.xJ
@@ -26425,21 +26615,21 @@
$desc=$collectedClasses.xt
if($desc instanceof Array)$desc=$desc[1]
xt.prototype=$desc
-function VJ(){}VJ.builtin$cls="VJ"
-if(!"name" in VJ)VJ.name="VJ"
-$desc=$collectedClasses.VJ
+function tG(){}tG.builtin$cls="tG"
+if(!"name" in tG)tG.name="tG"
+$desc=$collectedClasses.tG
if($desc instanceof Array)$desc=$desc[1]
-VJ.prototype=$desc
+tG.prototype=$desc
function P0(){}P0.builtin$cls="P0"
if(!"name" in P0)P0.name="P0"
$desc=$collectedClasses.P0
if($desc instanceof Array)$desc=$desc[1]
P0.prototype=$desc
-function xlX(){}xlX.builtin$cls="xlX"
-if(!"name" in xlX)xlX.name="xlX"
-$desc=$collectedClasses.xlX
+function kh(){}kh.builtin$cls="kh"
+if(!"name" in kh)kh.name="kh"
+$desc=$collectedClasses.kh
if($desc instanceof Array)$desc=$desc[1]
-xlX.prototype=$desc
+kh.prototype=$desc
function SQ(){}SQ.builtin$cls="SQ"
if(!"name" in SQ)SQ.name="SQ"
$desc=$collectedClasses.SQ
@@ -26492,16 +26682,16 @@
$desc=$collectedClasses.dE
if($desc instanceof Array)$desc=$desc[1]
dE.prototype=$desc
-function Eb(){}Eb.builtin$cls="Eb"
-if(!"name" in Eb)Eb.name="Eb"
-$desc=$collectedClasses.Eb
+function IJ(){}IJ.builtin$cls="IJ"
+if(!"name" in IJ)IJ.name="IJ"
+$desc=$collectedClasses.IJ
if($desc instanceof Array)$desc=$desc[1]
-Eb.prototype=$desc
-function dT(){}dT.builtin$cls="dT"
-if(!"name" in dT)dT.name="dT"
-$desc=$collectedClasses.dT
+IJ.prototype=$desc
+function aH(){}aH.builtin$cls="aH"
+if(!"name" in aH)aH.name="aH"
+$desc=$collectedClasses.aH
if($desc instanceof Array)$desc=$desc[1]
-dT.prototype=$desc
+aH.prototype=$desc
function N2(){}N2.builtin$cls="N2"
if(!"name" in N2)N2.name="N2"
$desc=$collectedClasses.N2
@@ -26593,11 +26783,11 @@
$desc=$collectedClasses.vT
if($desc instanceof Array)$desc=$desc[1]
vT.prototype=$desc
-function qa(){}qa.builtin$cls="qa"
-if(!"name" in qa)qa.name="qa"
-$desc=$collectedClasses.qa
+function VP(){}VP.builtin$cls="VP"
+if(!"name" in VP)VP.name="VP"
+$desc=$collectedClasses.VP
if($desc instanceof Array)$desc=$desc[1]
-qa.prototype=$desc
+VP.prototype=$desc
function BQ(){}BQ.builtin$cls="BQ"
if(!"name" in BQ)BQ.name="BQ"
$desc=$collectedClasses.BQ
@@ -26608,12 +26798,14 @@
$desc=$collectedClasses.O
if($desc instanceof Array)$desc=$desc[1]
O.prototype=$desc
-function PK(a){this.a=a}PK.builtin$cls="PK"
+function PK(a,b){this.a=a
+this.b=b}PK.builtin$cls="PK"
if(!"name" in PK)PK.name="PK"
$desc=$collectedClasses.PK
if($desc instanceof Array)$desc=$desc[1]
PK.prototype=$desc
-function JO(b){this.b=b}JO.builtin$cls="JO"
+function JO(a,c){this.a=a
+this.c=c}JO.builtin$cls="JO"
if(!"name" in JO)JO.name="JO"
$desc=$collectedClasses.JO
if($desc instanceof Array)$desc=$desc[1]
@@ -26635,18 +26827,21 @@
$desc=$collectedClasses.f0
if($desc instanceof Array)$desc=$desc[1]
f0.prototype=$desc
-f0.prototype.gi2=function(){return this.i2}
-f0.prototype.si2=function(v){return this.i2=v}
+f0.prototype.gi2=function(receiver){return this.i2}
+f0.prototype.si2=function(receiver,v){return this.i2=v}
f0.prototype.gw2=function(){return this.w2}
-function aX(jO,Gx,fW,En,EE,Qy,RW,C9,lJ){this.jO=jO
+function aX(jO,Gx,fW,En,EE,Qy,PX,RW,C9,lJ,Jp,pa){this.jO=jO
this.Gx=Gx
this.fW=fW
this.En=En
this.EE=EE
this.Qy=Qy
+this.PX=PX
this.RW=RW
this.C9=C9
-this.lJ=lJ}aX.builtin$cls="aX"
+this.lJ=lJ
+this.Jp=Jp
+this.pa=pa}aX.builtin$cls="aX"
if(!"name" in aX)aX.name="aX"
$desc=$collectedClasses.aX
if($desc instanceof Array)$desc=$desc[1]
@@ -26656,8 +26851,13 @@
aX.prototype.gEE=function(){return this.EE}
aX.prototype.gRW=function(){return this.RW}
aX.prototype.gC9=function(){return this.C9}
-function cC(Rk,bZ){this.Rk=Rk
-this.bZ=bZ}cC.builtin$cls="cC"
+function oU(a){this.a=a}oU.builtin$cls="oU"
+if(!"name" in oU)oU.name="oU"
+$desc=$collectedClasses.oU
+if($desc instanceof Array)$desc=$desc[1]
+oU.prototype=$desc
+function cC(Rk,GL){this.Rk=Rk
+this.GL=GL}cC.builtin$cls="cC"
if(!"name" in cC)cC.name="cC"
$desc=$collectedClasses.cC
if($desc instanceof Array)$desc=$desc[1]
@@ -26667,15 +26867,15 @@
$desc=$collectedClasses.RA
if($desc instanceof Array)$desc=$desc[1]
RA.prototype=$desc
-function IY(Aq,i3,G1){this.Aq=Aq
+function IY(F1,i3,G1){this.F1=F1
this.i3=i3
this.G1=G1}IY.builtin$cls="IY"
if(!"name" in IY)IY.name="IY"
$desc=$collectedClasses.IY
if($desc instanceof Array)$desc=$desc[1]
IY.prototype=$desc
-IY.prototype.gAq=function(receiver){return this.Aq}
-IY.prototype.sAq=function(receiver,v){return this.Aq=v}
+IY.prototype.gF1=function(receiver){return this.F1}
+IY.prototype.sF1=function(receiver,v){return this.F1=v}
IY.prototype.gG1=function(receiver){return this.G1}
IY.prototype.sG1=function(receiver,v){return this.G1=v}
function JH(){}JH.builtin$cls="JH"
@@ -26683,15 +26883,24 @@
$desc=$collectedClasses.JH
if($desc instanceof Array)$desc=$desc[1]
JH.prototype=$desc
-function jl(a,b,c,d,e){this.a=a
+function jl(a,b,c,d,e,f){this.a=a
this.b=b
this.c=c
this.d=d
-this.e=e}jl.builtin$cls="jl"
+this.e=e
+this.f=f}jl.builtin$cls="jl"
if(!"name" in jl)jl.name="jl"
$desc=$collectedClasses.jl
if($desc instanceof Array)$desc=$desc[1]
jl.prototype=$desc
+function Vg(a,b,c,d){this.a=a
+this.b=b
+this.c=c
+this.d=d}Vg.builtin$cls="Vg"
+if(!"name" in Vg)Vg.name="Vg"
+$desc=$collectedClasses.Vg
+if($desc instanceof Array)$desc=$desc[1]
+Vg.prototype=$desc
function Iy(){}Iy.builtin$cls="Iy"
if(!"name" in Iy)Iy.name="Iy"
$desc=$collectedClasses.Iy
@@ -26757,22 +26966,22 @@
$desc=$collectedClasses.HU
if($desc instanceof Array)$desc=$desc[1]
HU.prototype=$desc
-function oo(){}oo.builtin$cls="oo"
-if(!"name" in oo)oo.name="oo"
-$desc=$collectedClasses.oo
+function Nt(){}Nt.builtin$cls="Nt"
+if(!"name" in Nt)Nt.name="Nt"
+$desc=$collectedClasses.Nt
if($desc instanceof Array)$desc=$desc[1]
-oo.prototype=$desc
+Nt.prototype=$desc
function OW(a,b){this.a=a
this.b=b}OW.builtin$cls="OW"
if(!"name" in OW)OW.name="OW"
$desc=$collectedClasses.OW
if($desc instanceof Array)$desc=$desc[1]
OW.prototype=$desc
-function Dd(){}Dd.builtin$cls="Dd"
-if(!"name" in Dd)Dd.name="Dd"
-$desc=$collectedClasses.Dd
+function Tf(){}Tf.builtin$cls="Tf"
+if(!"name" in Tf)Tf.name="Tf"
+$desc=$collectedClasses.Tf
if($desc instanceof Array)$desc=$desc[1]
-Dd.prototype=$desc
+Tf.prototype=$desc
function AP(){}AP.builtin$cls="AP"
if(!"name" in AP)AP.name="AP"
$desc=$collectedClasses.AP
@@ -26831,18 +27040,12 @@
if($desc instanceof Array)$desc=$desc[1]
LPe.prototype=$desc
LPe.prototype.gB=function(receiver){return this.B}
-function bw(a,b){this.a=a
-this.b=b}bw.builtin$cls="bw"
-if(!"name" in bw)bw.name="bw"
-$desc=$collectedClasses.bw
+function LD(a,b){this.a=a
+this.b=b}LD.builtin$cls="LD"
+if(!"name" in LD)LD.name="LD"
+$desc=$collectedClasses.LD
if($desc instanceof Array)$desc=$desc[1]
-bw.prototype=$desc
-function WT(a,b){this.a=a
-this.b=b}WT.builtin$cls="WT"
-if(!"name" in WT)WT.name="WT"
-$desc=$collectedClasses.WT
-if($desc instanceof Array)$desc=$desc[1]
-WT.prototype=$desc
+LD.prototype=$desc
function jJ(a){this.a=a}jJ.builtin$cls="jJ"
if(!"name" in jJ)jJ.name="jJ"
$desc=$collectedClasses.jJ
@@ -26887,18 +27090,26 @@
$desc=$collectedClasses.F3
if($desc instanceof Array)$desc=$desc[1]
F3.prototype=$desc
-function FD(mr,Rn,XZ,Rv,hG,Mo,AM){this.mr=mr
+function FD(mr,Rn,XZ,Rv,hG,Mo,AM,NE){this.mr=mr
this.Rn=Rn
this.XZ=XZ
this.Rv=Rv
this.hG=hG
this.Mo=Mo
-this.AM=AM}FD.builtin$cls="FD"
+this.AM=AM
+this.NE=NE}FD.builtin$cls="FD"
if(!"name" in FD)FD.name="FD"
$desc=$collectedClasses.FD
if($desc instanceof Array)$desc=$desc[1]
FD.prototype=$desc
FD.prototype.gRn=function(receiver){return this.Rn}
+function Nv(a,b,c){this.a=a
+this.b=b
+this.c=c}Nv.builtin$cls="Nv"
+if(!"name" in Nv)Nv.name="Nv"
+$desc=$collectedClasses.Nv
+if($desc instanceof Array)$desc=$desc[1]
+Nv.prototype=$desc
function Cj(a,b,c){this.a=a
this.b=b
this.c=c}Cj.builtin$cls="Cj"
@@ -27007,22 +27218,22 @@
v.prototype.gnw=function(){return this.nw}
v.prototype.gjm=function(){return this.jm}
v.prototype.gRA=function(receiver){return this.RA}
-function Ll(Jy){this.Jy=Jy}Ll.builtin$cls="Ll"
+function Ll(QW){this.QW=QW}Ll.builtin$cls="Ll"
if(!"name" in Ll)Ll.name="Ll"
$desc=$collectedClasses.Ll
if($desc instanceof Array)$desc=$desc[1]
Ll.prototype=$desc
-function dN(Jy){this.Jy=Jy}dN.builtin$cls="dN"
-if(!"name" in dN)dN.name="dN"
-$desc=$collectedClasses.dN
+function D2(QW){this.QW=QW}D2.builtin$cls="D2"
+if(!"name" in D2)D2.name="D2"
+$desc=$collectedClasses.D2
if($desc instanceof Array)$desc=$desc[1]
-dN.prototype=$desc
-function GT(oc){this.oc=oc}GT.builtin$cls="GT"
-if(!"name" in GT)GT.name="GT"
-$desc=$collectedClasses.GT
+D2.prototype=$desc
+function my(oc){this.oc=oc}my.builtin$cls="my"
+if(!"name" in my)my.name="my"
+$desc=$collectedClasses.my
if($desc instanceof Array)$desc=$desc[1]
-GT.prototype=$desc
-GT.prototype.goc=function(receiver){return this.oc}
+my.prototype=$desc
+my.prototype.goc=function(receiver){return this.oc}
function Pe(G1){this.G1=G1}Pe.builtin$cls="Pe"
if(!"name" in Pe)Pe.name="Pe"
$desc=$collectedClasses.Pe
@@ -27118,7 +27329,6 @@
$desc=$collectedClasses.EK
if($desc instanceof Array)$desc=$desc[1]
EK.prototype=$desc
-EK.prototype.gQK=function(){return this.QK}
function KW(Gf,rv){this.Gf=Gf
this.rv=rv}KW.builtin$cls="KW"
if(!"name" in KW)KW.name="KW"
@@ -27139,19 +27349,19 @@
$desc=$collectedClasses.tQ
if($desc instanceof Array)$desc=$desc[1]
tQ.prototype=$desc
-function mL(Z6,zf,AJ,Eb,AP,fn){this.Z6=Z6
+function mL(Z6,zf,Eb,AJ,AP,Lk){this.Z6=Z6
this.zf=zf
-this.AJ=AJ
this.Eb=Eb
+this.AJ=AJ
this.AP=AP
-this.fn=fn}mL.builtin$cls="mL"
+this.Lk=Lk}mL.builtin$cls="mL"
if(!"name" in mL)mL.name="mL"
$desc=$collectedClasses.mL
if($desc instanceof Array)$desc=$desc[1]
mL.prototype=$desc
mL.prototype.gZ6=function(){return this.Z6}
mL.prototype.gZ6.$reflectable=1
-mL.prototype.gzf=function(receiver){return this.zf}
+mL.prototype.gzf=function(){return this.zf}
mL.prototype.gzf.$reflectable=1
function Kf(Yb){this.Yb=Yb}Kf.builtin$cls="Kf"
if(!"name" in Kf)Kf.name="Kf"
@@ -27166,79 +27376,10 @@
if($desc instanceof Array)$desc=$desc[1]
qu.prototype=$desc
qu.prototype.gbG=function(receiver){return this.bG}
-function bv(zf,rI,we,jF,XR,Z0,hI,am,y6,c8,LE,qU,yg,YG,jy,AP,fn){this.zf=zf
-this.rI=rI
-this.we=we
-this.jF=jF
-this.XR=XR
-this.Z0=Z0
-this.hI=hI
-this.am=am
-this.y6=y6
-this.c8=c8
-this.LE=LE
-this.qU=qU
-this.yg=yg
-this.YG=YG
-this.jy=jy
-this.AP=AP
-this.fn=fn}bv.builtin$cls="bv"
-if(!"name" in bv)bv.name="bv"
-$desc=$collectedClasses.bv
-if($desc instanceof Array)$desc=$desc[1]
-bv.prototype=$desc
-bv.prototype.gzf=function(receiver){return this.zf}
-bv.prototype.gXR=function(){return this.XR}
-bv.prototype.gXR.$reflectable=1
-bv.prototype.gZ0=function(){return this.Z0}
-bv.prototype.gZ0.$reflectable=1
-bv.prototype.gLE=function(){return this.LE}
-bv.prototype.gLE.$reflectable=1
-function eS(a){this.a=a}eS.builtin$cls="eS"
-if(!"name" in eS)eS.name="eS"
-$desc=$collectedClasses.eS
-if($desc instanceof Array)$desc=$desc[1]
-eS.prototype=$desc
-function IQ(b){this.b=b}IQ.builtin$cls="IQ"
-if(!"name" in IQ)IQ.name="IQ"
-$desc=$collectedClasses.IQ
-if($desc instanceof Array)$desc=$desc[1]
-IQ.prototype=$desc
-function TI(a){this.a=a}TI.builtin$cls="TI"
-if(!"name" in TI)TI.name="TI"
-$desc=$collectedClasses.TI
-if($desc instanceof Array)$desc=$desc[1]
-TI.prototype=$desc
-function at(a,b){this.a=a
-this.b=b}at.builtin$cls="at"
-if(!"name" in at)at.name="at"
-$desc=$collectedClasses.at
-if($desc instanceof Array)$desc=$desc[1]
-at.prototype=$desc
-function wu(a,b){this.a=a
-this.b=b}wu.builtin$cls="wu"
-if(!"name" in wu)wu.name="wu"
-$desc=$collectedClasses.wu
-if($desc instanceof Array)$desc=$desc[1]
-wu.prototype=$desc
-function Vc(c,d){this.c=c
-this.d=d}Vc.builtin$cls="Vc"
-if(!"name" in Vc)Vc.name="Vc"
-$desc=$collectedClasses.Vc
-if($desc instanceof Array)$desc=$desc[1]
-Vc.prototype=$desc
-function KQ(a,b){this.a=a
-this.b=b}KQ.builtin$cls="KQ"
-if(!"name" in KQ)KQ.name="KQ"
-$desc=$collectedClasses.KQ
-if($desc instanceof Array)$desc=$desc[1]
-KQ.prototype=$desc
-function dZ(ec,jF,JL,MU,AP,fn){this.ec=ec
-this.jF=jF
+function dZ(ec,JL,AP,Lk){this.ec=ec
this.JL=JL
-this.MU=MU
this.AP=AP
-this.fn=fn}dZ.builtin$cls="dZ"
+this.Lk=Lk}dZ.builtin$cls="dZ"
if(!"name" in dZ)dZ.name="dZ"
$desc=$collectedClasses.dZ
if($desc instanceof Array)$desc=$desc[1]
@@ -27249,142 +27390,6 @@
$desc=$collectedClasses.Qe
if($desc instanceof Array)$desc=$desc[1]
Qe.prototype=$desc
-function GH(a){this.a=a}GH.builtin$cls="GH"
-if(!"name" in GH)GH.name="GH"
-$desc=$collectedClasses.GH
-if($desc instanceof Array)$desc=$desc[1]
-GH.prototype=$desc
-function Q4(Yu,m7,L4,NC,xb,AP,fn){this.Yu=Yu
-this.m7=m7
-this.L4=L4
-this.NC=NC
-this.xb=xb
-this.AP=AP
-this.fn=fn}Q4.builtin$cls="Q4"
-if(!"name" in Q4)Q4.name="Q4"
-$desc=$collectedClasses.Q4
-if($desc instanceof Array)$desc=$desc[1]
-Q4.prototype=$desc
-Q4.prototype.gYu=function(){return this.Yu}
-Q4.prototype.gYu.$reflectable=1
-Q4.prototype.gm7=function(){return this.m7}
-Q4.prototype.gm7.$reflectable=1
-Q4.prototype.gL4=function(){return this.L4}
-Q4.prototype.gL4.$reflectable=1
-function WAE(Zd){this.Zd=Zd}WAE.builtin$cls="WAE"
-if(!"name" in WAE)WAE.name="WAE"
-$desc=$collectedClasses.WAE
-if($desc instanceof Array)$desc=$desc[1]
-WAE.prototype=$desc
-function N8(Yu,pO,Iw){this.Yu=Yu
-this.pO=pO
-this.Iw=Iw}N8.builtin$cls="N8"
-if(!"name" in N8)N8.name="N8"
-$desc=$collectedClasses.N8
-if($desc instanceof Array)$desc=$desc[1]
-N8.prototype=$desc
-N8.prototype.gYu=function(){return this.Yu}
-function Vi(tT,Av){this.tT=tT
-this.Av=Av}Vi.builtin$cls="Vi"
-if(!"name" in Vi)Vi.name="Vi"
-$desc=$collectedClasses.Vi
-if($desc instanceof Array)$desc=$desc[1]
-Vi.prototype=$desc
-Vi.prototype.gtT=function(receiver){return this.tT}
-Vi.prototype.gAv=function(){return this.Av}
-function kx(fY,vg,Mb,a0,VS,hw,fF,Du,va,tQ,Ge,hI,HJ,AP,fn){this.fY=fY
-this.vg=vg
-this.Mb=Mb
-this.a0=a0
-this.VS=VS
-this.hw=hw
-this.fF=fF
-this.Du=Du
-this.va=va
-this.tQ=tQ
-this.Ge=Ge
-this.hI=hI
-this.HJ=HJ
-this.AP=AP
-this.fn=fn}kx.builtin$cls="kx"
-if(!"name" in kx)kx.name="kx"
-$desc=$collectedClasses.kx
-if($desc instanceof Array)$desc=$desc[1]
-kx.prototype=$desc
-kx.prototype.gfY=function(receiver){return this.fY}
-kx.prototype.ga0=function(){return this.a0}
-kx.prototype.gVS=function(){return this.VS}
-kx.prototype.gfF=function(){return this.fF}
-kx.prototype.gDu=function(){return this.Du}
-kx.prototype.gva=function(){return this.va}
-kx.prototype.gva.$reflectable=1
-function fx(){}fx.builtin$cls="fx"
-if(!"name" in fx)fx.name="fx"
-$desc=$collectedClasses.fx
-if($desc instanceof Array)$desc=$desc[1]
-fx.prototype=$desc
-function CM(Aq,tm,hV){this.Aq=Aq
-this.tm=tm
-this.hV=hV}CM.builtin$cls="CM"
-if(!"name" in CM)CM.name="CM"
-$desc=$collectedClasses.CM
-if($desc instanceof Array)$desc=$desc[1]
-CM.prototype=$desc
-CM.prototype.gAq=function(receiver){return this.Aq}
-CM.prototype.ghV=function(){return this.hV}
-function xn(a){this.a=a}xn.builtin$cls="xn"
-if(!"name" in xn)xn.name="xn"
-$desc=$collectedClasses.xn
-if($desc instanceof Array)$desc=$desc[1]
-xn.prototype=$desc
-function vu(){}vu.builtin$cls="vu"
-if(!"name" in vu)vu.name="vu"
-$desc=$collectedClasses.vu
-if($desc instanceof Array)$desc=$desc[1]
-vu.prototype=$desc
-function c2(Rd,ye,i0,AP,fn){this.Rd=Rd
-this.ye=ye
-this.i0=i0
-this.AP=AP
-this.fn=fn}c2.builtin$cls="c2"
-if(!"name" in c2)c2.name="c2"
-$desc=$collectedClasses.c2
-if($desc instanceof Array)$desc=$desc[1]
-c2.prototype=$desc
-c2.prototype.gRd=function(receiver){return this.Rd}
-c2.prototype.gRd.$reflectable=1
-function rj(I2,VG,pw,tq,Sw,iA,AP,fn){this.I2=I2
-this.VG=VG
-this.pw=pw
-this.tq=tq
-this.Sw=Sw
-this.iA=iA
-this.AP=AP
-this.fn=fn}rj.builtin$cls="rj"
-if(!"name" in rj)rj.name="rj"
-$desc=$collectedClasses.rj
-if($desc instanceof Array)$desc=$desc[1]
-rj.prototype=$desc
-rj.prototype.gSw=function(){return this.Sw}
-rj.prototype.gSw.$reflectable=1
-function af(Aq){this.Aq=Aq}af.builtin$cls="af"
-if(!"name" in af)af.name="af"
-$desc=$collectedClasses.af
-if($desc instanceof Array)$desc=$desc[1]
-af.prototype=$desc
-af.prototype.gAq=function(receiver){return this.Aq}
-function SI(YY,Aq,rI,we,R9,wv,V2,me){this.YY=YY
-this.Aq=Aq
-this.rI=rI
-this.we=we
-this.R9=R9
-this.wv=wv
-this.V2=V2
-this.me=me}SI.builtin$cls="SI"
-if(!"name" in SI)SI.name="SI"
-$desc=$collectedClasses.SI
-if($desc instanceof Array)$desc=$desc[1]
-SI.prototype=$desc
function Y2(eT,yt,wd,oH){this.eT=eT
this.yt=yt
this.wd=wd
@@ -27400,89 +27405,21 @@
Y2.prototype.gwd.$reflectable=1
Y2.prototype.goH=function(){return this.oH}
Y2.prototype.goH.$reflectable=1
-function XN(rO,WT,AP,fn){this.rO=rO
+function XN(rI,WT,AP,Lk){this.rI=rI
this.WT=WT
this.AP=AP
-this.fn=fn}XN.builtin$cls="XN"
+this.Lk=Lk}XN.builtin$cls="XN"
if(!"name" in XN)XN.name="XN"
$desc=$collectedClasses.XN
if($desc instanceof Array)$desc=$desc[1]
XN.prototype=$desc
XN.prototype.gWT=function(receiver){return this.WT}
XN.prototype.gWT.$reflectable=1
-function No(ec,i2){this.ec=ec
-this.i2=i2}No.builtin$cls="No"
-if(!"name" in No)No.name="No"
-$desc=$collectedClasses.No
-if($desc instanceof Array)$desc=$desc[1]
-No.prototype=$desc
-No.prototype.sec=function(v){return this.ec=v}
-No.prototype.gi2=function(){return this.i2}
-No.prototype.gi2.$reflectable=1
-function PG(){}PG.builtin$cls="PG"
-if(!"name" in PG)PG.name="PG"
-$desc=$collectedClasses.PG
-if($desc instanceof Array)$desc=$desc[1]
-PG.prototype=$desc
-function YW(){}YW.builtin$cls="YW"
-if(!"name" in YW)YW.name="YW"
-$desc=$collectedClasses.YW
-if($desc instanceof Array)$desc=$desc[1]
-YW.prototype=$desc
-function BO(a){this.a=a}BO.builtin$cls="BO"
-if(!"name" in BO)BO.name="BO"
-$desc=$collectedClasses.BO
-if($desc instanceof Array)$desc=$desc[1]
-BO.prototype=$desc
-function Yu(a,b){this.a=a
-this.b=b}Yu.builtin$cls="Yu"
-if(!"name" in Yu)Yu.name="Yu"
-$desc=$collectedClasses.Yu
-if($desc instanceof Array)$desc=$desc[1]
-Yu.prototype=$desc
-function y2(c){this.c=c}y2.builtin$cls="y2"
-if(!"name" in y2)y2.name="y2"
-$desc=$collectedClasses.y2
-if($desc instanceof Array)$desc=$desc[1]
-y2.prototype=$desc
-function Hq(d){this.d=d}Hq.builtin$cls="Hq"
-if(!"name" in Hq)Hq.name="Hq"
-$desc=$collectedClasses.Hq
-if($desc instanceof Array)$desc=$desc[1]
-Hq.prototype=$desc
-function Pl(a){this.a=a}Pl.builtin$cls="Pl"
-if(!"name" in Pl)Pl.name="Pl"
-$desc=$collectedClasses.Pl
-if($desc instanceof Array)$desc=$desc[1]
-Pl.prototype=$desc
-function XK(Yu,ec,i2,AP,fn){this.Yu=Yu
-this.ec=ec
-this.i2=i2
+function G6(BW,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.BW=BW
this.AP=AP
-this.fn=fn}XK.builtin$cls="XK"
-if(!"name" in XK)XK.name="XK"
-$desc=$collectedClasses.XK
-if($desc instanceof Array)$desc=$desc[1]
-XK.prototype=$desc
-XK.prototype.gYu=function(){return this.Yu}
-function ho(Ct,pL,ec,i2,AP,fn){this.Ct=Ct
-this.pL=pL
-this.ec=ec
-this.i2=i2
+this.Lk=Lk
this.AP=AP
-this.fn=fn}ho.builtin$cls="ho"
-if(!"name" in ho)ho.name="ho"
-$desc=$collectedClasses.ho
-if($desc instanceof Array)$desc=$desc[1]
-ho.prototype=$desc
-function G6(BW,AP,fn,pC,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.BW=BW
-this.AP=AP
-this.fn=fn
-this.pC=pC
-this.AP=AP
-this.fn=fn
-this.AP=AP
-this.fn=fn
+this.Lk=Lk
this.dZ=dZ
this.Sa=Sa
this.Uk=Uk
@@ -27499,30 +27436,17 @@
G6.prototype.gBW.$reflectable=1
G6.prototype.sBW=function(receiver,v){return receiver.BW=v}
G6.prototype.sBW.$reflectable=1
-function Ur(){}Ur.builtin$cls="Ur"
-if(!"name" in Ur)Ur.name="Ur"
-$desc=$collectedClasses.Ur
+function Vf(){}Vf.builtin$cls="Vf"
+if(!"name" in Vf)Vf.name="Vf"
+$desc=$collectedClasses.Vf
if($desc instanceof Array)$desc=$desc[1]
-Ur.prototype=$desc
-function j3(a){this.a=a}j3.builtin$cls="j3"
-if(!"name" in j3)j3.name="j3"
-$desc=$collectedClasses.j3
-if($desc instanceof Array)$desc=$desc[1]
-j3.prototype=$desc
-function i0(){}i0.builtin$cls="i0"
-if(!"name" in i0)i0.name="i0"
-$desc=$collectedClasses.i0
-if($desc instanceof Array)$desc=$desc[1]
-i0.prototype=$desc
-function Tg(tY,Pe,AP,fn,pC,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.tY=tY
+Vf.prototype=$desc
+function Tg(tY,Pe,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.tY=tY
this.Pe=Pe
this.AP=AP
-this.fn=fn
-this.pC=pC
+this.Lk=Lk
this.AP=AP
-this.fn=fn
-this.AP=AP
-this.fn=fn
+this.Lk=Lk
this.dZ=dZ
this.Sa=Sa
this.Uk=Uk
@@ -27535,14 +27459,11 @@
$desc=$collectedClasses.Tg
if($desc instanceof Array)$desc=$desc[1]
Tg.prototype=$desc
-function Ps(F0,AP,fn,pC,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.F0=F0
+function Jc(F0,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.F0=F0
this.AP=AP
-this.fn=fn
-this.pC=pC
+this.Lk=Lk
this.AP=AP
-this.fn=fn
-this.AP=AP
-this.fn=fn
+this.Lk=Lk
this.dZ=dZ
this.Sa=Sa
this.Uk=Uk
@@ -27550,39 +27471,26 @@
this.Wz=Wz
this.SO=SO
this.B7=B7
-this.X0=X0}Ps.builtin$cls="Ps"
-if(!"name" in Ps)Ps.name="Ps"
-$desc=$collectedClasses.Ps
+this.X0=X0}Jc.builtin$cls="Jc"
+if(!"name" in Jc)Jc.name="Jc"
+$desc=$collectedClasses.Jc
if($desc instanceof Array)$desc=$desc[1]
-Ps.prototype=$desc
-Ps.prototype.gF0=function(receiver){return receiver.F0}
-Ps.prototype.gF0.$reflectable=1
-Ps.prototype.sF0=function(receiver,v){return receiver.F0=v}
-Ps.prototype.sF0.$reflectable=1
-function KU(){}KU.builtin$cls="KU"
-if(!"name" in KU)KU.name="KU"
-$desc=$collectedClasses.KU
+Jc.prototype=$desc
+Jc.prototype.gF0=function(receiver){return receiver.F0}
+Jc.prototype.gF0.$reflectable=1
+Jc.prototype.sF0=function(receiver,v){return receiver.F0=v}
+Jc.prototype.sF0.$reflectable=1
+function pv(){}pv.builtin$cls="pv"
+if(!"name" in pv)pv.name="pv"
+$desc=$collectedClasses.pv
if($desc instanceof Array)$desc=$desc[1]
-KU.prototype=$desc
-function RI(a){this.a=a}RI.builtin$cls="RI"
-if(!"name" in RI)RI.name="RI"
-$desc=$collectedClasses.RI
-if($desc instanceof Array)$desc=$desc[1]
-RI.prototype=$desc
-function Ye(){}Ye.builtin$cls="Ye"
-if(!"name" in Ye)Ye.name="Ye"
-$desc=$collectedClasses.Ye
-if($desc instanceof Array)$desc=$desc[1]
-Ye.prototype=$desc
-function CN(tY,Pe,AP,fn,pC,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.tY=tY
+pv.prototype=$desc
+function CN(tY,Pe,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.tY=tY
this.Pe=Pe
this.AP=AP
-this.fn=fn
-this.pC=pC
+this.Lk=Lk
this.AP=AP
-this.fn=fn
-this.AP=AP
-this.fn=fn
+this.Lk=Lk
this.dZ=dZ
this.Sa=Sa
this.Uk=Uk
@@ -27595,14 +27503,11 @@
$desc=$collectedClasses.CN
if($desc instanceof Array)$desc=$desc[1]
CN.prototype=$desc
-function HT(eJ,AP,fn,pC,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.eJ=eJ
+function Be(Xx,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.Xx=Xx
this.AP=AP
-this.fn=fn
-this.pC=pC
+this.Lk=Lk
this.AP=AP
-this.fn=fn
-this.AP=AP
-this.fn=fn
+this.Lk=Lk
this.dZ=dZ
this.Sa=Sa
this.Uk=Uk
@@ -27610,27 +27515,27 @@
this.Wz=Wz
this.SO=SO
this.B7=B7
-this.X0=X0}HT.builtin$cls="HT"
-if(!"name" in HT)HT.name="HT"
-$desc=$collectedClasses.HT
+this.X0=X0}Be.builtin$cls="Be"
+if(!"name" in Be)Be.name="Be"
+$desc=$collectedClasses.Be
if($desc instanceof Array)$desc=$desc[1]
-HT.prototype=$desc
-HT.prototype.geJ=function(receiver){return receiver.eJ}
-HT.prototype.geJ.$reflectable=1
-HT.prototype.seJ=function(receiver,v){return receiver.eJ=v}
-HT.prototype.seJ.$reflectable=1
-function qbd(){}qbd.builtin$cls="qbd"
-if(!"name" in qbd)qbd.name="qbd"
-$desc=$collectedClasses.qbd
+Be.prototype=$desc
+Be.prototype.gXx=function(receiver){return receiver.Xx}
+Be.prototype.gXx.$reflectable=1
+Be.prototype.sXx=function(receiver,v){return receiver.Xx=v}
+Be.prototype.sXx.$reflectable=1
+function Vfx(){}Vfx.builtin$cls="Vfx"
+if(!"name" in Vfx)Vfx.name="Vfx"
+$desc=$collectedClasses.Vfx
if($desc instanceof Array)$desc=$desc[1]
-qbd.prototype=$desc
-function E0(zh,HX,Uy,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.zh=zh
+Vfx.prototype=$desc
+function E0(zh,HX,Uy,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.zh=zh
this.HX=HX
this.Uy=Uy
this.AP=AP
-this.fn=fn
+this.Lk=Lk
this.AP=AP
-this.fn=fn
+this.Lk=Lk
this.dZ=dZ
this.Sa=Sa
this.Uk=Uk
@@ -27655,18 +27560,18 @@
E0.prototype.gUy.$reflectable=1
E0.prototype.sUy=function(receiver,v){return receiver.Uy=v}
E0.prototype.sUy.$reflectable=1
-function Ds(){}Ds.builtin$cls="Ds"
-if(!"name" in Ds)Ds.name="Ds"
-$desc=$collectedClasses.Ds
+function Dsd(){}Dsd.builtin$cls="Dsd"
+if(!"name" in Dsd)Dsd.name="Dsd"
+$desc=$collectedClasses.Dsd
if($desc instanceof Array)$desc=$desc[1]
-Ds.prototype=$desc
-function lw(GV,Hu,nx,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.GV=GV
+Dsd.prototype=$desc
+function lw(GV,Hu,nx,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.GV=GV
this.Hu=Hu
this.nx=nx
this.AP=AP
-this.fn=fn
+this.Lk=Lk
this.AP=AP
-this.fn=fn
+this.Lk=Lk
this.dZ=dZ
this.Sa=Sa
this.Uk=Uk
@@ -27764,32 +27669,14 @@
$desc=$collectedClasses.kV
if($desc instanceof Array)$desc=$desc[1]
kV.prototype=$desc
-function rR(OI,T6,TQ,lo){this.OI=OI
+function rR(OI,T6,C2,lo){this.OI=OI
this.T6=T6
-this.TQ=TQ
+this.C2=C2
this.lo=lo}rR.builtin$cls="rR"
if(!"name" in rR)rR.name="rR"
$desc=$collectedClasses.rR
if($desc instanceof Array)$desc=$desc[1]
rR.prototype=$desc
-function H6(l6,FT){this.l6=l6
-this.FT=FT}H6.builtin$cls="H6"
-if(!"name" in H6)H6.name="H6"
-$desc=$collectedClasses.H6
-if($desc instanceof Array)$desc=$desc[1]
-H6.prototype=$desc
-function wB(l6,FT){this.l6=l6
-this.FT=FT}wB.builtin$cls="wB"
-if(!"name" in wB)wB.name="wB"
-$desc=$collectedClasses.wB
-if($desc instanceof Array)$desc=$desc[1]
-wB.prototype=$desc
-function U1(OI,FT){this.OI=OI
-this.FT=FT}U1.builtin$cls="U1"
-if(!"name" in U1)U1.name="U1"
-$desc=$collectedClasses.U1
-if($desc instanceof Array)$desc=$desc[1]
-U1.prototype=$desc
function SJ(){}SJ.builtin$cls="SJ"
if(!"name" in SJ)SJ.name="SJ"
$desc=$collectedClasses.SJ
@@ -27800,11 +27687,11 @@
$desc=$collectedClasses.SU7
if($desc instanceof Array)$desc=$desc[1]
SU7.prototype=$desc
-function Qr(){}Qr.builtin$cls="Qr"
-if(!"name" in Qr)Qr.name="Qr"
-$desc=$collectedClasses.Qr
+function Tv(){}Tv.builtin$cls="Tv"
+if(!"name" in Tv)Tv.name="Tv"
+$desc=$collectedClasses.Tv
if($desc instanceof Array)$desc=$desc[1]
-Qr.prototype=$desc
+Tv.prototype=$desc
function w2Y(){}w2Y.builtin$cls="w2Y"
if(!"name" in w2Y)w2Y.name="w2Y"
$desc=$collectedClasses.w2Y
@@ -27821,23 +27708,23 @@
if($desc instanceof Array)$desc=$desc[1]
GD.prototype=$desc
GD.prototype.gfN=function(receiver){return this.fN}
-function Sn(L5,Aq){this.L5=L5
-this.Aq=Aq}Sn.builtin$cls="Sn"
+function Sn(L5,F1){this.L5=L5
+this.F1=F1}Sn.builtin$cls="Sn"
if(!"name" in Sn)Sn.name="Sn"
$desc=$collectedClasses.Sn
if($desc instanceof Array)$desc=$desc[1]
Sn.prototype=$desc
-Sn.prototype.gAq=function(receiver){return this.Aq}
+Sn.prototype.gF1=function(receiver){return this.F1}
function nI(){}nI.builtin$cls="nI"
if(!"name" in nI)nI.name="nI"
$desc=$collectedClasses.nI
if($desc instanceof Array)$desc=$desc[1]
nI.prototype=$desc
-function TY(){}TY.builtin$cls="TY"
-if(!"name" in TY)TY.name="TY"
-$desc=$collectedClasses.TY
+function jU(){}jU.builtin$cls="jU"
+if(!"name" in jU)jU.name="jU"
+$desc=$collectedClasses.jU
if($desc instanceof Array)$desc=$desc[1]
-TY.prototype=$desc
+jU.prototype=$desc
function Lj(MA){this.MA=MA}Lj.builtin$cls="Lj"
if(!"name" in Lj)Lj.name="Lj"
$desc=$collectedClasses.Lj
@@ -27848,14 +27735,14 @@
$desc=$collectedClasses.mb
if($desc instanceof Array)$desc=$desc[1]
mb.prototype=$desc
-function am(If){this.If=If}am.builtin$cls="am"
-if(!"name" in am)am.name="am"
-$desc=$collectedClasses.am
+function cb(If){this.If=If}cb.builtin$cls="cb"
+if(!"name" in cb)cb.name="cb"
+$desc=$collectedClasses.cb
if($desc instanceof Array)$desc=$desc[1]
-am.prototype=$desc
-am.prototype.gIf=function(){return this.If}
-function cw(XP,xW,Nz,LQ,If){this.XP=XP
-this.xW=xW
+cb.prototype=$desc
+cb.prototype.gIf=function(){return this.If}
+function cw(XP,yG,Nz,LQ,If){this.XP=XP
+this.yG=yG
this.Nz=Nz
this.LQ=LQ
this.If=If}cw.builtin$cls="cw"
@@ -27914,10 +27801,10 @@
$desc=$collectedClasses.YX
if($desc instanceof Array)$desc=$desc[1]
YX.prototype=$desc
-function BI(AY,XW,BB,Ra,If){this.AY=AY
+function BI(AY,XW,BB,i1,If){this.AY=AY
this.XW=XW
this.BB=BB
-this.Ra=Ra
+this.i1=i1
this.If=If}BI.builtin$cls="BI"
if(!"name" in BI)BI.name="BI"
$desc=$collectedClasses.BI
@@ -27946,7 +27833,7 @@
$desc=$collectedClasses.mg
if($desc instanceof Array)$desc=$desc[1]
mg.prototype=$desc
-function bl(NK,EZ,ut,Db,uA,b0,M2,T1,fX,FU,qu,qN,qm,Ra,RH,If){this.NK=NK
+function bl(NK,EZ,ut,Db,uA,b0,M2,T1,fX,FU,qu,qN,qm,i1,RH,If){this.NK=NK
this.EZ=EZ
this.ut=ut
this.Db=Db
@@ -27959,7 +27846,7 @@
this.qu=qu
this.qN=qN
this.qm=qm
-this.Ra=Ra
+this.i1=i1
this.RH=RH
this.If=If}bl.builtin$cls="bl"
if(!"name" in bl)bl.name="bl"
@@ -27986,7 +27873,7 @@
$desc=$collectedClasses.Ax
if($desc instanceof Array)$desc=$desc[1]
Ax.prototype=$desc
-function Wf(Cr,Tx,H8,Ht,pz,le,qN,qu,zE,b0,FU,T1,fX,M2,uA,Db,xO,qm,UF,Ra,RH,nz,If){this.Cr=Cr
+function Wf(Cr,Tx,H8,Ht,pz,le,qN,qu,zE,b0,FU,T1,fX,M2,uA,Db,xO,qm,UF,i1,RH,jE,If){this.Cr=Cr
this.Tx=Tx
this.H8=H8
this.Ht=Ht
@@ -28005,9 +27892,9 @@
this.xO=xO
this.qm=qm
this.UF=UF
-this.Ra=Ra
+this.i1=i1
this.RH=RH
-this.nz=nz
+this.jE=jE
this.If=If}Wf.builtin$cls="Wf"
if(!"name" in Wf)Wf.name="Wf"
$desc=$collectedClasses.Wf
@@ -28025,21 +27912,21 @@
$desc=$collectedClasses.Ei
if($desc instanceof Array)$desc=$desc[1]
Ei.prototype=$desc
-function U7(b){this.b=b}U7.builtin$cls="U7"
-if(!"name" in U7)U7.name="U7"
-$desc=$collectedClasses.U7
+function Ci(b){this.b=b}Ci.builtin$cls="Ci"
+if(!"name" in Ci)Ci.name="Ci"
+$desc=$collectedClasses.Ci
if($desc instanceof Array)$desc=$desc[1]
-U7.prototype=$desc
+Ci.prototype=$desc
function t0(a){this.a=a}t0.builtin$cls="t0"
if(!"name" in t0)t0.name="t0"
$desc=$collectedClasses.t0
if($desc instanceof Array)$desc=$desc[1]
t0.prototype=$desc
-function Ld(ao,V5,Fo,n6,nz,Ay,le,If){this.ao=ao
+function Ld(ao,V5,Fo,n6,jE,Ay,le,If){this.ao=ao
this.V5=V5
this.Fo=Fo
this.n6=n6
-this.nz=nz
+this.jE=jE
this.Ay=Ay
this.le=le
this.If=If}Ld.builtin$cls="Ld"
@@ -28048,7 +27935,7 @@
if($desc instanceof Array)$desc=$desc[1]
Ld.prototype=$desc
Ld.prototype.gao=function(){return this.ao}
-Ld.prototype.gV5=function(){return this.V5}
+Ld.prototype.gV5=function(receiver){return this.V5}
Ld.prototype.gFo=function(){return this.Fo}
Ld.prototype.gAy=function(receiver){return this.Ay}
function Sz(Ax,xq){this.Ax=Ax
@@ -28057,14 +27944,14 @@
$desc=$collectedClasses.Sz
if($desc instanceof Array)$desc=$desc[1]
Sz.prototype=$desc
-function Zk(dl,Yq,lT,hB,Fo,xV,qx,nz,le,wM,H3,If){this.dl=dl
+function Zk(dl,Yq,lT,hB,Fo,xV,qx,jE,le,wM,H3,If){this.dl=dl
this.Yq=Yq
this.lT=lT
this.hB=hB
this.Fo=Fo
this.xV=xV
this.qx=qx
-this.nz=nz
+this.jE=jE
this.le=le
this.wM=wM
this.H3=H3
@@ -28183,16 +28070,16 @@
JI.prototype.siE=function(v){return this.iE=v}
JI.prototype.gSJ=function(){return this.SJ}
JI.prototype.sSJ=function(v){return this.SJ=v}
-function LO(iE,SJ){this.iE=iE
-this.SJ=SJ}LO.builtin$cls="LO"
-if(!"name" in LO)LO.name="LO"
-$desc=$collectedClasses.LO
+function WVu(iE,SJ){this.iE=iE
+this.SJ=SJ}WVu.builtin$cls="WVu"
+if(!"name" in WVu)WVu.name="WVu"
+$desc=$collectedClasses.WVu
if($desc instanceof Array)$desc=$desc[1]
-LO.prototype=$desc
-LO.prototype.giE=function(){return this.iE}
-LO.prototype.siE=function(v){return this.iE=v}
-LO.prototype.gSJ=function(){return this.SJ}
-LO.prototype.sSJ=function(v){return this.SJ=v}
+WVu.prototype=$desc
+WVu.prototype.giE=function(){return this.iE}
+WVu.prototype.siE=function(v){return this.iE=v}
+WVu.prototype.gSJ=function(){return this.SJ}
+WVu.prototype.sSJ=function(v){return this.SJ=v}
function dz(nL,QC,Gv,iE,SJ,WX,Ip){this.nL=nL
this.QC=QC
this.Gv=Gv
@@ -28238,19 +28125,6 @@
$desc=$collectedClasses.b8
if($desc instanceof Array)$desc=$desc[1]
b8.prototype=$desc
-function j7(a,b){this.a=a
-this.b=b}j7.builtin$cls="j7"
-if(!"name" in j7)j7.name="j7"
-$desc=$collectedClasses.j7
-if($desc instanceof Array)$desc=$desc[1]
-j7.prototype=$desc
-function ff(a,c,d){this.a=a
-this.c=c
-this.d=d}ff.builtin$cls="ff"
-if(!"name" in ff)ff.name="ff"
-$desc=$collectedClasses.ff
-if($desc instanceof Array)$desc=$desc[1]
-ff.prototype=$desc
function Ia(){}Ia.builtin$cls="Ia"
if(!"name" in Ia)Ia.name="Ia"
$desc=$collectedClasses.Ia
@@ -28282,22 +28156,28 @@
$desc=$collectedClasses.da
if($desc instanceof Array)$desc=$desc[1]
da.prototype=$desc
-function xw(a){this.a=a}xw.builtin$cls="xw"
-if(!"name" in xw)xw.name="xw"
-$desc=$collectedClasses.xw
+function pV(a){this.a=a}pV.builtin$cls="pV"
+if(!"name" in pV)pV.name="pV"
+$desc=$collectedClasses.pV
if($desc instanceof Array)$desc=$desc[1]
-xw.prototype=$desc
-function dm(b){this.b=b}dm.builtin$cls="dm"
-if(!"name" in dm)dm.name="dm"
-$desc=$collectedClasses.dm
+pV.prototype=$desc
+function U7(b){this.b=b}U7.builtin$cls="U7"
+if(!"name" in U7)U7.name="U7"
+$desc=$collectedClasses.U7
if($desc instanceof Array)$desc=$desc[1]
-dm.prototype=$desc
+U7.prototype=$desc
function rH(a,b){this.a=a
this.b=b}rH.builtin$cls="rH"
if(!"name" in rH)rH.name="rH"
$desc=$collectedClasses.rH
if($desc instanceof Array)$desc=$desc[1]
rH.prototype=$desc
+function cX(c,d){this.c=c
+this.d=d}cX.builtin$cls="cX"
+if(!"name" in cX)cX.name="cX"
+$desc=$collectedClasses.cX
+if($desc instanceof Array)$desc=$desc[1]
+cX.prototype=$desc
function ZL(a,b,c){this.a=a
this.b=b
this.c=c}ZL.builtin$cls="ZL"
@@ -28305,39 +28185,39 @@
$desc=$collectedClasses.ZL
if($desc instanceof Array)$desc=$desc[1]
ZL.prototype=$desc
-function rq(b,c,d,e){this.b=b
-this.c=c
+function rq(b,d,e,f){this.b=b
this.d=d
-this.e=e}rq.builtin$cls="rq"
+this.e=e
+this.f=f}rq.builtin$cls="rq"
if(!"name" in rq)rq.name="rq"
$desc=$collectedClasses.rq
if($desc instanceof Array)$desc=$desc[1]
rq.prototype=$desc
-function RW(c,b,f,UI){this.c=c
+function RW(c,b,UI,bK){this.c=c
this.b=b
-this.f=f
-this.UI=UI}RW.builtin$cls="RW"
+this.UI=UI
+this.bK=bK}RW.builtin$cls="RW"
if(!"name" in RW)RW.name="RW"
$desc=$collectedClasses.RW
if($desc instanceof Array)$desc=$desc[1]
RW.prototype=$desc
-function RT(c,b,bK,Gq,Rm){this.c=c
+function RT(c,b,Gq,Rm,w3){this.c=c
this.b=b
-this.bK=bK
this.Gq=Gq
-this.Rm=Rm}RT.builtin$cls="RT"
+this.Rm=Rm
+this.w3=w3}RT.builtin$cls="RT"
if(!"name" in RT)RT.name="RT"
$desc=$collectedClasses.RT
if($desc instanceof Array)$desc=$desc[1]
RT.prototype=$desc
-function jZ(c,w3){this.c=c
-this.w3=w3}jZ.builtin$cls="jZ"
+function jZ(c,HZ){this.c=c
+this.HZ=HZ}jZ.builtin$cls="jZ"
if(!"name" in jZ)jZ.name="jZ"
$desc=$collectedClasses.jZ
if($desc instanceof Array)$desc=$desc[1]
jZ.prototype=$desc
-function FZ(a,HZ){this.a=a
-this.HZ=HZ}FZ.builtin$cls="FZ"
+function FZ(a,mG){this.a=a
+this.mG=mG}FZ.builtin$cls="FZ"
if(!"name" in FZ)FZ.name="FZ"
$desc=$collectedClasses.FZ
if($desc instanceof Array)$desc=$desc[1]
@@ -28356,14 +28236,14 @@
$desc=$collectedClasses.qh
if($desc instanceof Array)$desc=$desc[1]
qh.prototype=$desc
-function tG(a,b,c,d){this.a=a
+function YJ(a,b,c,d){this.a=a
this.b=b
this.c=c
-this.d=d}tG.builtin$cls="tG"
-if(!"name" in tG)tG.name="tG"
-$desc=$collectedClasses.tG
+this.d=d}YJ.builtin$cls="YJ"
+if(!"name" in YJ)YJ.name="YJ"
+$desc=$collectedClasses.YJ
if($desc instanceof Array)$desc=$desc[1]
-tG.prototype=$desc
+YJ.prototype=$desc
function jv(e,f){this.e=e
this.f=f}jv.builtin$cls="jv"
if(!"name" in jv)jv.name="jv"
@@ -28376,11 +28256,11 @@
$desc=$collectedClasses.LB
if($desc instanceof Array)$desc=$desc[1]
LB.prototype=$desc
-function zn(bK){this.bK=bK}zn.builtin$cls="zn"
-if(!"name" in zn)zn.name="zn"
-$desc=$collectedClasses.zn
+function DO(bK){this.bK=bK}DO.builtin$cls="DO"
+if(!"name" in DO)DO.name="DO"
+$desc=$collectedClasses.DO
if($desc instanceof Array)$desc=$desc[1]
-zn.prototype=$desc
+DO.prototype=$desc
function lz(a,b,c,d){this.a=a
this.b=b
this.c=c
@@ -28430,17 +28310,17 @@
$desc=$collectedClasses.eN
if($desc instanceof Array)$desc=$desc[1]
eN.prototype=$desc
-function PI(a){this.a=a}PI.builtin$cls="PI"
+function B5(a){this.a=a}B5.builtin$cls="B5"
+if(!"name" in B5)B5.name="B5"
+$desc=$collectedClasses.B5
+if($desc instanceof Array)$desc=$desc[1]
+B5.prototype=$desc
+function PI(a,b){this.a=a
+this.b=b}PI.builtin$cls="PI"
if(!"name" in PI)PI.name="PI"
$desc=$collectedClasses.PI
if($desc instanceof Array)$desc=$desc[1]
PI.prototype=$desc
-function uO(a,b){this.a=a
-this.b=b}uO.builtin$cls="uO"
-if(!"name" in uO)uO.name="uO"
-$desc=$collectedClasses.uO
-if($desc instanceof Array)$desc=$desc[1]
-uO.prototype=$desc
function j4(a,b){this.a=a
this.b=b}j4.builtin$cls="j4"
if(!"name" in j4)j4.name="j4"
@@ -28488,19 +28368,19 @@
$desc=$collectedClasses.Z5
if($desc instanceof Array)$desc=$desc[1]
Z5.prototype=$desc
-function ii(a,b,c){this.a=a
+function j5(a,b,c){this.a=a
this.b=b
-this.c=c}ii.builtin$cls="ii"
+this.c=c}j5.builtin$cls="j5"
+if(!"name" in j5)j5.name="j5"
+$desc=$collectedClasses.j5
+if($desc instanceof Array)$desc=$desc[1]
+j5.prototype=$desc
+function ii(a,d){this.a=a
+this.d=d}ii.builtin$cls="ii"
if(!"name" in ii)ii.name="ii"
$desc=$collectedClasses.ii
if($desc instanceof Array)$desc=$desc[1]
ii.prototype=$desc
-function ib(a,d){this.a=a
-this.d=d}ib.builtin$cls="ib"
-if(!"name" in ib)ib.name="ib"
-$desc=$collectedClasses.ib
-if($desc instanceof Array)$desc=$desc[1]
-ib.prototype=$desc
function MO(){}MO.builtin$cls="MO"
if(!"name" in MO)MO.name="MO"
$desc=$collectedClasses.MO
@@ -28552,13 +28432,13 @@
$desc=$collectedClasses.ez
if($desc instanceof Array)$desc=$desc[1]
ez.prototype=$desc
-function ti(aw){this.aw=aw}ti.builtin$cls="ti"
-if(!"name" in ti)ti.name="ti"
-$desc=$collectedClasses.ti
+function fIm(aw){this.aw=aw}fIm.builtin$cls="fIm"
+if(!"name" in fIm)fIm.name="fIm"
+$desc=$collectedClasses.fIm
if($desc instanceof Array)$desc=$desc[1]
-ti.prototype=$desc
-ti.prototype.gaw=function(){return this.aw}
-ti.prototype.saw=function(v){return this.aw=v}
+fIm.prototype=$desc
+fIm.prototype.gaw=function(){return this.aw}
+fIm.prototype.saw=function(v){return this.aw=v}
function LV(P,aw){this.P=P
this.aw=aw}LV.builtin$cls="LV"
if(!"name" in LV)LV.name="LV"
@@ -28611,12 +28491,12 @@
$desc=$collectedClasses.uR
if($desc instanceof Array)$desc=$desc[1]
uR.prototype=$desc
-function Q0(a,b){this.a=a
-this.b=b}Q0.builtin$cls="Q0"
-if(!"name" in Q0)Q0.name="Q0"
-$desc=$collectedClasses.Q0
+function GU(a,b){this.a=a
+this.b=b}GU.builtin$cls="GU"
+if(!"name" in GU)GU.name="GU"
+$desc=$collectedClasses.GU
if($desc instanceof Array)$desc=$desc[1]
-Q0.prototype=$desc
+GU.prototype=$desc
function YR(){}YR.builtin$cls="YR"
if(!"name" in YR)YR.name="YR"
$desc=$collectedClasses.YR
@@ -28647,17 +28527,11 @@
$desc=$collectedClasses.t3
if($desc instanceof Array)$desc=$desc[1]
t3.prototype=$desc
-function dq(Em,Sb){this.Em=Em
-this.Sb=Sb}dq.builtin$cls="dq"
-if(!"name" in dq)dq.name="dq"
-$desc=$collectedClasses.dq
+function tU(){}tU.builtin$cls="tU"
+if(!"name" in tU)tU.name="tU"
+$desc=$collectedClasses.tU
if($desc instanceof Array)$desc=$desc[1]
-dq.prototype=$desc
-function lO(){}lO.builtin$cls="lO"
-if(!"name" in lO)lO.name="lO"
-$desc=$collectedClasses.lO
-if($desc instanceof Array)$desc=$desc[1]
-lO.prototype=$desc
+tU.prototype=$desc
function aY(){}aY.builtin$cls="aY"
if(!"name" in aY)aY.name="aY"
$desc=$collectedClasses.aY
@@ -28695,11 +28569,11 @@
$desc=$collectedClasses.e4
if($desc instanceof Array)$desc=$desc[1]
e4.prototype=$desc
-function JB(){}JB.builtin$cls="JB"
-if(!"name" in JB)JB.name="JB"
-$desc=$collectedClasses.JB
+function dl(){}dl.builtin$cls="dl"
+if(!"name" in dl)dl.name="dl"
+$desc=$collectedClasses.dl
if($desc instanceof Array)$desc=$desc[1]
-JB.prototype=$desc
+dl.prototype=$desc
function Id(oh){this.oh=oh}Id.builtin$cls="Id"
if(!"name" in Id)Id.name="Id"
$desc=$collectedClasses.Id
@@ -28740,12 +28614,12 @@
$desc=$collectedClasses.dv
if($desc instanceof Array)$desc=$desc[1]
dv.prototype=$desc
-function pV(c,d){this.c=c
-this.d=d}pV.builtin$cls="pV"
-if(!"name" in pV)pV.name="pV"
-$desc=$collectedClasses.pV
+function ph(c,d){this.c=c
+this.d=d}ph.builtin$cls="ph"
+if(!"name" in ph)ph.name="ph"
+$desc=$collectedClasses.ph
if($desc instanceof Array)$desc=$desc[1]
-pV.prototype=$desc
+ph.prototype=$desc
function uo(eT,zU,R1){this.eT=eT
this.zU=zU
this.R1=R1}uo.builtin$cls="uo"
@@ -28772,11 +28646,11 @@
$desc=$collectedClasses.Ha
if($desc instanceof Array)$desc=$desc[1]
Ha.prototype=$desc
-function nU(){}nU.builtin$cls="nU"
-if(!"name" in nU)nU.name="nU"
-$desc=$collectedClasses.nU
+function W5(){}W5.builtin$cls="W5"
+if(!"name" in W5)W5.name="W5"
+$desc=$collectedClasses.W5
if($desc instanceof Array)$desc=$desc[1]
-nU.prototype=$desc
+W5.prototype=$desc
function R8(){}R8.builtin$cls="R8"
if(!"name" in R8)R8.name="R8"
$desc=$collectedClasses.R8
@@ -28873,36 +28747,6 @@
$desc=$collectedClasses.S9
if($desc instanceof Array)$desc=$desc[1]
S9.prototype=$desc
-function ey(X5,vv,OX,OB,H9,lX,zN){this.X5=X5
-this.vv=vv
-this.OX=OX
-this.OB=OB
-this.H9=H9
-this.lX=lX
-this.zN=zN}ey.builtin$cls="ey"
-if(!"name" in ey)ey.name="ey"
-$desc=$collectedClasses.ey
-if($desc instanceof Array)$desc=$desc[1]
-ey.prototype=$desc
-function xd(m6,Q6,ac,X5,vv,OX,OB,H9,lX,zN){this.m6=m6
-this.Q6=Q6
-this.ac=ac
-this.X5=X5
-this.vv=vv
-this.OX=OX
-this.OB=OB
-this.H9=H9
-this.lX=lX
-this.zN=zN}xd.builtin$cls="xd"
-if(!"name" in xd)xd.name="xd"
-$desc=$collectedClasses.xd
-if($desc instanceof Array)$desc=$desc[1]
-xd.prototype=$desc
-function v6(a){this.a=a}v6.builtin$cls="v6"
-if(!"name" in v6)v6.name="v6"
-$desc=$collectedClasses.v6
-if($desc instanceof Array)$desc=$desc[1]
-v6.prototype=$desc
function db(kh,S4,DG,zQ){this.kh=kh
this.S4=S4
this.DG=DG
@@ -28931,11 +28775,11 @@
$desc=$collectedClasses.N6
if($desc instanceof Array)$desc=$desc[1]
N6.prototype=$desc
-function Rr(){}Rr.builtin$cls="Rr"
-if(!"name" in Rr)Rr.name="Rr"
-$desc=$collectedClasses.Rr
+function UB(){}UB.builtin$cls="UB"
+if(!"name" in UB)UB.name="UB"
+$desc=$collectedClasses.UB
if($desc instanceof Array)$desc=$desc[1]
-Rr.prototype=$desc
+UB.prototype=$desc
function YO(X5,vv,OX,OB,DM){this.X5=X5
this.vv=vv
this.OX=OX
@@ -29052,11 +28896,11 @@
jp.prototype=$desc
jp.prototype.gP=function(receiver){return this.P}
jp.prototype.sP=function(receiver,v){return this.P=v}
-function vX(){}vX.builtin$cls="vX"
-if(!"name" in vX)vX.name="vX"
-$desc=$collectedClasses.vX
+function GZ(){}GZ.builtin$cls="GZ"
+if(!"name" in GZ)GZ.name="GZ"
+$desc=$collectedClasses.GZ
if($desc instanceof Array)$desc=$desc[1]
-vX.prototype=$desc
+GZ.prototype=$desc
function Ba(Cw,ac,aY,iW,P6,qT,bb){this.Cw=Cw
this.ac=ac
this.aY=aY
@@ -29078,13 +28922,13 @@
$desc=$collectedClasses.bF
if($desc instanceof Array)$desc=$desc[1]
bF.prototype=$desc
-function LD(a,b,c){this.a=a
+function BW(a,b,c){this.a=a
this.b=b
-this.c=c}LD.builtin$cls="LD"
-if(!"name" in LD)LD.name="LD"
-$desc=$collectedClasses.LD
+this.c=c}BW.builtin$cls="BW"
+if(!"name" in BW)BW.name="BW"
+$desc=$collectedClasses.BW
if($desc instanceof Array)$desc=$desc[1]
-LD.prototype=$desc
+BW.prototype=$desc
function S6B(){}S6B.builtin$cls="S6B"
if(!"name" in S6B)S6B.name="S6B"
$desc=$collectedClasses.S6B
@@ -29100,8 +28944,8 @@
$desc=$collectedClasses.uM
if($desc instanceof Array)$desc=$desc[1]
uM.prototype=$desc
-function DN(Dn,Ln,qT,bb,ya){this.Dn=Dn
-this.Ln=Ln
+function DN(Dn,Jt,qT,bb,ya){this.Dn=Dn
+this.Jt=Jt
this.qT=qT
this.bb=bb
this.ya=ya}DN.builtin$cls="DN"
@@ -29109,8 +28953,8 @@
$desc=$collectedClasses.DN
if($desc instanceof Array)$desc=$desc[1]
DN.prototype=$desc
-function ZM(Dn,Ln,qT,bb,ya){this.Dn=Dn
-this.Ln=Ln
+function ZM(Dn,Jt,qT,bb,ya){this.Dn=Dn
+this.Jt=Jt
this.qT=qT
this.bb=bb
this.ya=ya}ZM.builtin$cls="ZM"
@@ -29118,8 +28962,8 @@
$desc=$collectedClasses.ZM
if($desc instanceof Array)$desc=$desc[1]
ZM.prototype=$desc
-function HW(Dn,Ln,qT,bb,ya){this.Dn=Dn
-this.Ln=Ln
+function HW(Dn,Jt,qT,bb,ya){this.Dn=Dn
+this.Jt=Jt
this.qT=qT
this.bb=bb
this.ya=ya}HW.builtin$cls="HW"
@@ -29142,23 +28986,23 @@
$desc=$collectedClasses.Uk
if($desc instanceof Array)$desc=$desc[1]
Uk.prototype=$desc
-function wI(){}wI.builtin$cls="wI"
-if(!"name" in wI)wI.name="wI"
-$desc=$collectedClasses.wI
+function zF(){}zF.builtin$cls="zF"
+if(!"name" in zF)zF.name="zF"
+$desc=$collectedClasses.zF
if($desc instanceof Array)$desc=$desc[1]
-wI.prototype=$desc
+zF.prototype=$desc
function Zi(){}Zi.builtin$cls="Zi"
if(!"name" in Zi)Zi.name="Zi"
$desc=$collectedClasses.Zi
if($desc instanceof Array)$desc=$desc[1]
Zi.prototype=$desc
-function Ud(Pc,FN){this.Pc=Pc
+function Ud(Ct,FN){this.Ct=Ct
this.FN=FN}Ud.builtin$cls="Ud"
if(!"name" in Ud)Ud.name="Ud"
$desc=$collectedClasses.Ud
if($desc instanceof Array)$desc=$desc[1]
Ud.prototype=$desc
-function K8(Pc,FN){this.Pc=Pc
+function K8(Ct,FN){this.Ct=Ct
this.FN=FN}K8.builtin$cls="K8"
if(!"name" in K8)K8.name="K8"
$desc=$collectedClasses.K8
@@ -29180,9 +29024,9 @@
$desc=$collectedClasses.Cf
if($desc instanceof Array)$desc=$desc[1]
Cf.prototype=$desc
-function Sh(WE,Mw,JN){this.WE=WE
-this.Mw=Mw
-this.JN=JN}Sh.builtin$cls="Sh"
+function Sh(iY,Vy,qi){this.iY=iY
+this.Vy=Vy
+this.qi=qi}Sh.builtin$cls="Sh"
if(!"name" in Sh)Sh.name="Sh"
$desc=$collectedClasses.Sh
if($desc instanceof Array)$desc=$desc[1]
@@ -29203,7 +29047,7 @@
$desc=$collectedClasses.E3
if($desc instanceof Array)$desc=$desc[1]
E3.prototype=$desc
-function Rw(vn,ZP,EN){this.vn=vn
+function Rw(WF,ZP,EN){this.WF=WF
this.ZP=ZP
this.EN=EN}Rw.builtin$cls="Rw"
if(!"name" in Rw)Rw.name="Rw"
@@ -29230,11 +29074,11 @@
$desc=$collectedClasses.a2
if($desc instanceof Array)$desc=$desc[1]
a2.prototype=$desc
-function Rz(){}Rz.builtin$cls="Rz"
-if(!"name" in Rz)Rz.name="Rz"
-$desc=$collectedClasses.Rz
+function Tx(){}Tx.builtin$cls="Tx"
+if(!"name" in Tx)Tx.name="Tx"
+$desc=$collectedClasses.Tx
if($desc instanceof Array)$desc=$desc[1]
-Rz.prototype=$desc
+Tx.prototype=$desc
function iP(y3,aL){this.y3=y3
this.aL=aL}iP.builtin$cls="iP"
if(!"name" in iP)iP.name="iP"
@@ -29252,21 +29096,6 @@
$desc=$collectedClasses.Rq
if($desc instanceof Array)$desc=$desc[1]
Rq.prototype=$desc
-function Hn(){}Hn.builtin$cls="Hn"
-if(!"name" in Hn)Hn.name="Hn"
-$desc=$collectedClasses.Hn
-if($desc instanceof Array)$desc=$desc[1]
-Hn.prototype=$desc
-function Zl(){}Zl.builtin$cls="Zl"
-if(!"name" in Zl)Zl.name="Zl"
-$desc=$collectedClasses.Zl
-if($desc instanceof Array)$desc=$desc[1]
-Zl.prototype=$desc
-function B5(){}B5.builtin$cls="B5"
-if(!"name" in B5)B5.name="B5"
-$desc=$collectedClasses.B5
-if($desc instanceof Array)$desc=$desc[1]
-B5.prototype=$desc
function a6(Fq){this.Fq=Fq}a6.builtin$cls="a6"
if(!"name" in a6)a6.name="a6"
$desc=$collectedClasses.a6
@@ -29304,16 +29133,16 @@
$desc=$collectedClasses.bJ
if($desc instanceof Array)$desc=$desc[1]
bJ.prototype=$desc
-function Np(){}Np.builtin$cls="Np"
-if(!"name" in Np)Np.name="Np"
-$desc=$collectedClasses.Np
+function yd(){}yd.builtin$cls="yd"
+if(!"name" in yd)yd.name="yd"
+$desc=$collectedClasses.yd
if($desc instanceof Array)$desc=$desc[1]
-Np.prototype=$desc
-function mp(uF,UP,mP,SA,FZ){this.uF=uF
+yd.prototype=$desc
+function mp(uF,UP,mP,SA,mZ){this.uF=uF
this.UP=UP
this.mP=mP
this.SA=SA
-this.FZ=FZ}mp.builtin$cls="mp"
+this.mZ=mZ}mp.builtin$cls="mp"
if(!"name" in mp)mp.name="mp"
$desc=$collectedClasses.mp
if($desc instanceof Array)$desc=$desc[1]
@@ -29341,6 +29170,11 @@
$desc=$collectedClasses.UV
if($desc instanceof Array)$desc=$desc[1]
UV.prototype=$desc
+function kF(){}kF.builtin$cls="kF"
+if(!"name" in kF)kF.name="kF"
+$desc=$collectedClasses.kF
+if($desc instanceof Array)$desc=$desc[1]
+kF.prototype=$desc
function VS(){}VS.builtin$cls="VS"
if(!"name" in VS)VS.name="VS"
$desc=$collectedClasses.VS
@@ -29379,11 +29213,11 @@
$desc=$collectedClasses.EH
if($desc instanceof Array)$desc=$desc[1]
EH.prototype=$desc
-function cX(){}cX.builtin$cls="cX"
-if(!"name" in cX)cX.name="cX"
-$desc=$collectedClasses.cX
+function QV(){}QV.builtin$cls="QV"
+if(!"name" in QV)QV.name="QV"
+$desc=$collectedClasses.QV
if($desc instanceof Array)$desc=$desc[1]
-cX.prototype=$desc
+QV.prototype=$desc
function AC(){}AC.builtin$cls="AC"
if(!"name" in AC)AC.name="AC"
$desc=$collectedClasses.AC
@@ -29438,29 +29272,34 @@
$desc=$collectedClasses.uq
if($desc instanceof Array)$desc=$desc[1]
uq.prototype=$desc
-function iD(NN,HC,r0,Fi,ku,tP,Ka,hO,yW){this.NN=NN
+function iD(NN,HC,r0,Fi,ku,tP,Ka,YG,yW){this.NN=NN
this.HC=HC
this.r0=r0
this.Fi=Fi
this.ku=ku
this.tP=tP
this.Ka=Ka
-this.hO=hO
+this.YG=YG
this.yW=yW}iD.builtin$cls="iD"
if(!"name" in iD)iD.name="iD"
$desc=$collectedClasses.iD
if($desc instanceof Array)$desc=$desc[1]
iD.prototype=$desc
+function hP(){}hP.builtin$cls="hP"
+if(!"name" in hP)hP.name="hP"
+$desc=$collectedClasses.hP
+if($desc instanceof Array)$desc=$desc[1]
+hP.prototype=$desc
+function Uo(a){this.a=a}Uo.builtin$cls="Uo"
+if(!"name" in Uo)Uo.name="Uo"
+$desc=$collectedClasses.Uo
+if($desc instanceof Array)$desc=$desc[1]
+Uo.prototype=$desc
function hb(){}hb.builtin$cls="hb"
if(!"name" in hb)hb.name="hb"
$desc=$collectedClasses.hb
if($desc instanceof Array)$desc=$desc[1]
hb.prototype=$desc
-function XX(){}XX.builtin$cls="XX"
-if(!"name" in XX)XX.name="XX"
-$desc=$collectedClasses.XX
-if($desc instanceof Array)$desc=$desc[1]
-XX.prototype=$desc
function Kd(){}Kd.builtin$cls="Kd"
if(!"name" in Kd)Kd.name="Kd"
$desc=$collectedClasses.Kd
@@ -29622,26 +29461,46 @@
$desc=$collectedClasses.nNL
if($desc instanceof Array)$desc=$desc[1]
nNL.prototype=$desc
-function ecX(){}ecX.builtin$cls="ecX"
-if(!"name" in ecX)ecX.name="ecX"
-$desc=$collectedClasses.ecX
+function ma(){}ma.builtin$cls="ma"
+if(!"name" in ma)ma.name="ma"
+$desc=$collectedClasses.ma
if($desc instanceof Array)$desc=$desc[1]
-ecX.prototype=$desc
-function kI(){}kI.builtin$cls="kI"
-if(!"name" in kI)kI.name="kI"
-$desc=$collectedClasses.kI
+ma.prototype=$desc
+function Ou(){}Ou.builtin$cls="Ou"
+if(!"name" in Ou)Ou.name="Ou"
+$desc=$collectedClasses.Ou
if($desc instanceof Array)$desc=$desc[1]
-kI.prototype=$desc
+Ou.prototype=$desc
function yoo(){}yoo.builtin$cls="yoo"
if(!"name" in yoo)yoo.name="yoo"
$desc=$collectedClasses.yoo
if($desc instanceof Array)$desc=$desc[1]
yoo.prototype=$desc
+function ecX(){}ecX.builtin$cls="ecX"
+if(!"name" in ecX)ecX.name="ecX"
+$desc=$collectedClasses.ecX
+if($desc instanceof Array)$desc=$desc[1]
+ecX.prototype=$desc
+function zLC(){}zLC.builtin$cls="zLC"
+if(!"name" in zLC)zLC.name="zLC"
+$desc=$collectedClasses.zLC
+if($desc instanceof Array)$desc=$desc[1]
+zLC.prototype=$desc
function w1p(){}w1p.builtin$cls="w1p"
if(!"name" in w1p)w1p.name="w1p"
$desc=$collectedClasses.w1p
if($desc instanceof Array)$desc=$desc[1]
w1p.prototype=$desc
+function dxW(){}dxW.builtin$cls="dxW"
+if(!"name" in dxW)dxW.name="dxW"
+$desc=$collectedClasses.dxW
+if($desc instanceof Array)$desc=$desc[1]
+dxW.prototype=$desc
+function kEI(){}kEI.builtin$cls="kEI"
+if(!"name" in kEI)kEI.name="kEI"
+$desc=$collectedClasses.kEI
+if($desc instanceof Array)$desc=$desc[1]
+kEI.prototype=$desc
function tJ(){}tJ.builtin$cls="tJ"
if(!"name" in tJ)tJ.name="tJ"
$desc=$collectedClasses.tJ
@@ -29766,11 +29625,11 @@
$desc=$collectedClasses.RX
if($desc instanceof Array)$desc=$desc[1]
RX.prototype=$desc
-function hP(vm){this.vm=vm}hP.builtin$cls="hP"
-if(!"name" in hP)hP.name="hP"
-$desc=$collectedClasses.hP
+function bO(Ob){this.Ob=Ob}bO.builtin$cls="bO"
+if(!"name" in bO)bO.name="bO"
+$desc=$collectedClasses.bO
if($desc instanceof Array)$desc=$desc[1]
-hP.prototype=$desc
+bO.prototype=$desc
function Gm(){}Gm.builtin$cls="Gm"
if(!"name" in Gm)Gm.name="Gm"
$desc=$collectedClasses.Gm
@@ -29815,11 +29674,11 @@
$desc=$collectedClasses.O7
if($desc instanceof Array)$desc=$desc[1]
O7.prototype=$desc
-function IU(){}IU.builtin$cls="IU"
-if(!"name" in IU)IU.name="IU"
-$desc=$collectedClasses.IU
+function hq(){}hq.builtin$cls="hq"
+if(!"name" in hq)hq.name="hq"
+$desc=$collectedClasses.hq
if($desc instanceof Array)$desc=$desc[1]
-IU.prototype=$desc
+hq.prototype=$desc
function E4(eh){this.eh=eh}E4.builtin$cls="E4"
if(!"name" in E4)E4.name="E4"
$desc=$collectedClasses.E4
@@ -29850,7 +29709,7 @@
$desc=$collectedClasses.DV
if($desc instanceof Array)$desc=$desc[1]
DV.prototype=$desc
-function Hp(){}Hp.builtin$cls="Hp"
+function Hp(a){this.a=a}Hp.builtin$cls="Hp"
if(!"name" in Hp)Hp.name="Hp"
$desc=$collectedClasses.Hp
if($desc instanceof Array)$desc=$desc[1]
@@ -29900,11 +29759,11 @@
$desc=$collectedClasses.Ms
if($desc instanceof Array)$desc=$desc[1]
Ms.prototype=$desc
-function ac(){}ac.builtin$cls="ac"
-if(!"name" in ac)ac.name="ac"
-$desc=$collectedClasses.ac
+function Fw(){}Fw.builtin$cls="Fw"
+if(!"name" in Fw)Fw.name="Fw"
+$desc=$collectedClasses.Fw
if($desc instanceof Array)$desc=$desc[1]
-ac.prototype=$desc
+Fw.prototype=$desc
function RS(){}RS.builtin$cls="RS"
if(!"name" in RS)RS.name="RS"
$desc=$collectedClasses.RS
@@ -29920,10 +29779,10 @@
$desc=$collectedClasses.Ys
if($desc instanceof Array)$desc=$desc[1]
Ys.prototype=$desc
-function Lw(ew,yz,nV,Li){this.ew=ew
+function Lw(ew,yz,nV,f9){this.ew=ew
this.yz=yz
this.nV=nV
-this.Li=Li}Lw.builtin$cls="Lw"
+this.f9=f9}Lw.builtin$cls="Lw"
if(!"name" in Lw)Lw.name="Lw"
$desc=$collectedClasses.Lw
if($desc instanceof Array)$desc=$desc[1]
@@ -29958,11 +29817,11 @@
$desc=$collectedClasses.Dg
if($desc instanceof Array)$desc=$desc[1]
Dg.prototype=$desc
-function Ob(){}Ob.builtin$cls="Ob"
-if(!"name" in Ob)Ob.name="Ob"
-$desc=$collectedClasses.Ob
+function Ui(){}Ui.builtin$cls="Ui"
+if(!"name" in Ui)Ui.name="Ui"
+$desc=$collectedClasses.Ui
if($desc instanceof Array)$desc=$desc[1]
-Ob.prototype=$desc
+Ui.prototype=$desc
function Ip(){}Ip.builtin$cls="Ip"
if(!"name" in Ip)Ip.name="Ip"
$desc=$collectedClasses.Ip
@@ -29973,47 +29832,21 @@
$desc=$collectedClasses.Pg
if($desc instanceof Array)$desc=$desc[1]
Pg.prototype=$desc
-function Nb(){}Nb.builtin$cls="Nb"
-if(!"name" in Nb)Nb.name="Nb"
-$desc=$collectedClasses.Nb
+function ObS(){}ObS.builtin$cls="ObS"
+if(!"name" in ObS)ObS.name="ObS"
+$desc=$collectedClasses.ObS
if($desc instanceof Array)$desc=$desc[1]
-Nb.prototype=$desc
+ObS.prototype=$desc
function nA(){}nA.builtin$cls="nA"
if(!"name" in nA)nA.name="nA"
$desc=$collectedClasses.nA
if($desc instanceof Array)$desc=$desc[1]
nA.prototype=$desc
-function Fv(m0,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.m0=m0
+function E9(Py,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.Py=Py
this.AP=AP
-this.fn=fn
+this.Lk=Lk
this.AP=AP
-this.fn=fn
-this.dZ=dZ
-this.Sa=Sa
-this.Uk=Uk
-this.oq=oq
-this.Wz=Wz
-this.SO=SO
-this.B7=B7
-this.X0=X0}Fv.builtin$cls="Fv"
-if(!"name" in Fv)Fv.name="Fv"
-$desc=$collectedClasses.Fv
-if($desc instanceof Array)$desc=$desc[1]
-Fv.prototype=$desc
-Fv.prototype.gm0=function(receiver){return receiver.m0}
-Fv.prototype.gm0.$reflectable=1
-Fv.prototype.sm0=function(receiver,v){return receiver.m0=v}
-Fv.prototype.sm0.$reflectable=1
-function pv(){}pv.builtin$cls="pv"
-if(!"name" in pv)pv.name="pv"
-$desc=$collectedClasses.pv
-if($desc instanceof Array)$desc=$desc[1]
-pv.prototype=$desc
-function E9(Py,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.Py=Py
-this.AP=AP
-this.fn=fn
-this.AP=AP
-this.fn=fn
+this.Lk=Lk
this.dZ=dZ
this.Sa=Sa
this.Uk=Uk
@@ -30030,20 +29863,63 @@
E9.prototype.gPy.$reflectable=1
E9.prototype.sPy=function(receiver,v){return receiver.Py=v}
E9.prototype.sPy.$reflectable=1
-function Vfx(){}Vfx.builtin$cls="Vfx"
-if(!"name" in Vfx)Vfx.name="Vfx"
-$desc=$collectedClasses.Vfx
+function tuj(){}tuj.builtin$cls="tuj"
+if(!"name" in tuj)tuj.name="tuj"
+$desc=$collectedClasses.tuj
if($desc instanceof Array)$desc=$desc[1]
-Vfx.prototype=$desc
-function m8(tY,Pe,AP,fn,pC,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.tY=tY
+tuj.prototype=$desc
+function rm(fn,Ab,Ln,y4,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.fn=fn
+this.Ab=Ab
+this.Ln=Ln
+this.y4=y4
+this.AP=AP
+this.Lk=Lk
+this.AP=AP
+this.Lk=Lk
+this.dZ=dZ
+this.Sa=Sa
+this.Uk=Uk
+this.oq=oq
+this.Wz=Wz
+this.SO=SO
+this.B7=B7
+this.X0=X0}rm.builtin$cls="rm"
+if(!"name" in rm)rm.name="rm"
+$desc=$collectedClasses.rm
+if($desc instanceof Array)$desc=$desc[1]
+rm.prototype=$desc
+rm.prototype.gfn=function(receiver){return receiver.fn}
+rm.prototype.gfn.$reflectable=1
+rm.prototype.sfn=function(receiver,v){return receiver.fn=v}
+rm.prototype.sfn.$reflectable=1
+rm.prototype.gAb=function(receiver){return receiver.Ab}
+rm.prototype.gAb.$reflectable=1
+rm.prototype.sAb=function(receiver,v){return receiver.Ab=v}
+rm.prototype.sAb.$reflectable=1
+rm.prototype.gLn=function(receiver){return receiver.Ln}
+rm.prototype.gLn.$reflectable=1
+rm.prototype.sLn=function(receiver,v){return receiver.Ln=v}
+rm.prototype.sLn.$reflectable=1
+rm.prototype.gy4=function(receiver){return receiver.y4}
+rm.prototype.gy4.$reflectable=1
+rm.prototype.sy4=function(receiver,v){return receiver.y4=v}
+rm.prototype.sy4.$reflectable=1
+function Vct(){}Vct.builtin$cls="Vct"
+if(!"name" in Vct)Vct.name="Vct"
+$desc=$collectedClasses.Vct
+if($desc instanceof Array)$desc=$desc[1]
+Vct.prototype=$desc
+function YW(a){this.a=a}YW.builtin$cls="YW"
+if(!"name" in YW)YW.name="YW"
+$desc=$collectedClasses.YW
+if($desc instanceof Array)$desc=$desc[1]
+YW.prototype=$desc
+function m8(tY,Pe,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.tY=tY
this.Pe=Pe
this.AP=AP
-this.fn=fn
-this.pC=pC
+this.Lk=Lk
this.AP=AP
-this.fn=fn
-this.AP=AP
-this.fn=fn
+this.Lk=Lk
this.dZ=dZ
this.Sa=Sa
this.Uk=Uk
@@ -30056,14 +29932,11 @@
$desc=$collectedClasses.m8
if($desc instanceof Array)$desc=$desc[1]
m8.prototype=$desc
-function Gk(vt,AP,fn,pC,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.vt=vt
+function Gk(vt,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.vt=vt
this.AP=AP
-this.fn=fn
-this.pC=pC
+this.Lk=Lk
this.AP=AP
-this.fn=fn
-this.AP=AP
-this.fn=fn
+this.Lk=Lk
this.dZ=dZ
this.Sa=Sa
this.Uk=Uk
@@ -30080,30 +29953,17 @@
Gk.prototype.gvt.$reflectable=1
Gk.prototype.svt=function(receiver,v){return receiver.vt=v}
Gk.prototype.svt.$reflectable=1
-function Urj(){}Urj.builtin$cls="Urj"
-if(!"name" in Urj)Urj.name="Urj"
-$desc=$collectedClasses.Urj
+function D13(){}D13.builtin$cls="D13"
+if(!"name" in D13)D13.name="D13"
+$desc=$collectedClasses.D13
if($desc instanceof Array)$desc=$desc[1]
-Urj.prototype=$desc
-function e5(a){this.a=a}e5.builtin$cls="e5"
-if(!"name" in e5)e5.name="e5"
-$desc=$collectedClasses.e5
-if($desc instanceof Array)$desc=$desc[1]
-e5.prototype=$desc
-function Ni(){}Ni.builtin$cls="Ni"
-if(!"name" in Ni)Ni.name="Ni"
-$desc=$collectedClasses.Ni
-if($desc instanceof Array)$desc=$desc[1]
-Ni.prototype=$desc
-function AX(tY,Pe,AP,fn,pC,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.tY=tY
+D13.prototype=$desc
+function qW(tY,Pe,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.tY=tY
this.Pe=Pe
this.AP=AP
-this.fn=fn
-this.pC=pC
+this.Lk=Lk
this.AP=AP
-this.fn=fn
-this.AP=AP
-this.fn=fn
+this.Lk=Lk
this.dZ=dZ
this.Sa=Sa
this.Uk=Uk
@@ -30111,19 +29971,16 @@
this.Wz=Wz
this.SO=SO
this.B7=B7
-this.X0=X0}AX.builtin$cls="AX"
-if(!"name" in AX)AX.name="AX"
-$desc=$collectedClasses.AX
+this.X0=X0}qW.builtin$cls="qW"
+if(!"name" in qW)qW.name="qW"
+$desc=$collectedClasses.qW
if($desc instanceof Array)$desc=$desc[1]
-AX.prototype=$desc
-function yb(Z8,AP,fn,pC,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.Z8=Z8
+qW.prototype=$desc
+function mk(Z8,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.Z8=Z8
this.AP=AP
-this.fn=fn
-this.pC=pC
+this.Lk=Lk
this.AP=AP
-this.fn=fn
-this.AP=AP
-this.fn=fn
+this.Lk=Lk
this.dZ=dZ
this.Sa=Sa
this.Uk=Uk
@@ -30131,31 +29988,21 @@
this.Wz=Wz
this.SO=SO
this.B7=B7
-this.X0=X0}yb.builtin$cls="yb"
-if(!"name" in yb)yb.name="yb"
-$desc=$collectedClasses.yb
+this.X0=X0}mk.builtin$cls="mk"
+if(!"name" in mk)mk.name="mk"
+$desc=$collectedClasses.mk
if($desc instanceof Array)$desc=$desc[1]
-yb.prototype=$desc
-yb.prototype.gZ8=function(receiver){return receiver.Z8}
-yb.prototype.gZ8.$reflectable=1
-yb.prototype.sZ8=function(receiver,v){return receiver.Z8=v}
-yb.prototype.sZ8.$reflectable=1
-function oub(){}oub.builtin$cls="oub"
-if(!"name" in oub)oub.name="oub"
-$desc=$collectedClasses.oub
+mk.prototype=$desc
+mk.prototype.gZ8=function(receiver){return receiver.Z8}
+mk.prototype.gZ8.$reflectable=1
+mk.prototype.sZ8=function(receiver,v){return receiver.Z8=v}
+mk.prototype.sZ8.$reflectable=1
+function WZq(){}WZq.builtin$cls="WZq"
+if(!"name" in WZq)WZq.name="WZq"
+$desc=$collectedClasses.WZq
if($desc instanceof Array)$desc=$desc[1]
-oub.prototype=$desc
-function QR(a){this.a=a}QR.builtin$cls="QR"
-if(!"name" in QR)QR.name="QR"
-$desc=$collectedClasses.QR
-if($desc instanceof Array)$desc=$desc[1]
-QR.prototype=$desc
-function Yx(){}Yx.builtin$cls="Yx"
-if(!"name" in Yx)Yx.name="Yx"
-$desc=$collectedClasses.Yx
-if($desc instanceof Array)$desc=$desc[1]
-Yx.prototype=$desc
-function NM(GQ,J0,Oc,CO,bV,kg,LY,q3,Ol,X3,AP,fn,pC,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.GQ=GQ
+WZq.prototype=$desc
+function jY(GQ,J0,Oc,CO,bV,kg,LY,q3,Ol,X3,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.GQ=GQ
this.J0=J0
this.Oc=Oc
this.CO=CO
@@ -30166,12 +30013,9 @@
this.Ol=Ol
this.X3=X3
this.AP=AP
-this.fn=fn
-this.pC=pC
+this.Lk=Lk
this.AP=AP
-this.fn=fn
-this.AP=AP
-this.fn=fn
+this.Lk=Lk
this.dZ=dZ
this.Sa=Sa
this.Uk=Uk
@@ -30179,56 +30023,56 @@
this.Wz=Wz
this.SO=SO
this.B7=B7
-this.X0=X0}NM.builtin$cls="NM"
-if(!"name" in NM)NM.name="NM"
-$desc=$collectedClasses.NM
+this.X0=X0}jY.builtin$cls="jY"
+if(!"name" in jY)jY.name="jY"
+$desc=$collectedClasses.jY
if($desc instanceof Array)$desc=$desc[1]
-NM.prototype=$desc
-NM.prototype.gGQ=function(receiver){return receiver.GQ}
-NM.prototype.gGQ.$reflectable=1
-NM.prototype.sGQ=function(receiver,v){return receiver.GQ=v}
-NM.prototype.sGQ.$reflectable=1
-NM.prototype.gJ0=function(receiver){return receiver.J0}
-NM.prototype.gJ0.$reflectable=1
-NM.prototype.sJ0=function(receiver,v){return receiver.J0=v}
-NM.prototype.sJ0.$reflectable=1
-NM.prototype.gOc=function(receiver){return receiver.Oc}
-NM.prototype.gOc.$reflectable=1
-NM.prototype.sOc=function(receiver,v){return receiver.Oc=v}
-NM.prototype.sOc.$reflectable=1
-NM.prototype.gCO=function(receiver){return receiver.CO}
-NM.prototype.gCO.$reflectable=1
-NM.prototype.sCO=function(receiver,v){return receiver.CO=v}
-NM.prototype.sCO.$reflectable=1
-NM.prototype.gbV=function(receiver){return receiver.bV}
-NM.prototype.gbV.$reflectable=1
-NM.prototype.sbV=function(receiver,v){return receiver.bV=v}
-NM.prototype.sbV.$reflectable=1
-NM.prototype.gkg=function(receiver){return receiver.kg}
-NM.prototype.gkg.$reflectable=1
-NM.prototype.skg=function(receiver,v){return receiver.kg=v}
-NM.prototype.skg.$reflectable=1
-NM.prototype.gLY=function(receiver){return receiver.LY}
-NM.prototype.gLY.$reflectable=1
-NM.prototype.sLY=function(receiver,v){return receiver.LY=v}
-NM.prototype.sLY.$reflectable=1
-NM.prototype.gq3=function(receiver){return receiver.q3}
-NM.prototype.gq3.$reflectable=1
-NM.prototype.sq3=function(receiver,v){return receiver.q3=v}
-NM.prototype.sq3.$reflectable=1
-NM.prototype.gOl=function(receiver){return receiver.Ol}
-NM.prototype.gOl.$reflectable=1
-NM.prototype.sOl=function(receiver,v){return receiver.Ol=v}
-NM.prototype.sOl.$reflectable=1
-NM.prototype.gX3=function(receiver){return receiver.X3}
-NM.prototype.gX3.$reflectable=1
-NM.prototype.sX3=function(receiver,v){return receiver.X3=v}
-NM.prototype.sX3.$reflectable=1
-function c4r(){}c4r.builtin$cls="c4r"
-if(!"name" in c4r)c4r.name="c4r"
-$desc=$collectedClasses.c4r
+jY.prototype=$desc
+jY.prototype.gGQ=function(receiver){return receiver.GQ}
+jY.prototype.gGQ.$reflectable=1
+jY.prototype.sGQ=function(receiver,v){return receiver.GQ=v}
+jY.prototype.sGQ.$reflectable=1
+jY.prototype.gJ0=function(receiver){return receiver.J0}
+jY.prototype.gJ0.$reflectable=1
+jY.prototype.sJ0=function(receiver,v){return receiver.J0=v}
+jY.prototype.sJ0.$reflectable=1
+jY.prototype.gOc=function(receiver){return receiver.Oc}
+jY.prototype.gOc.$reflectable=1
+jY.prototype.sOc=function(receiver,v){return receiver.Oc=v}
+jY.prototype.sOc.$reflectable=1
+jY.prototype.gCO=function(receiver){return receiver.CO}
+jY.prototype.gCO.$reflectable=1
+jY.prototype.sCO=function(receiver,v){return receiver.CO=v}
+jY.prototype.sCO.$reflectable=1
+jY.prototype.gbV=function(receiver){return receiver.bV}
+jY.prototype.gbV.$reflectable=1
+jY.prototype.sbV=function(receiver,v){return receiver.bV=v}
+jY.prototype.sbV.$reflectable=1
+jY.prototype.gkg=function(receiver){return receiver.kg}
+jY.prototype.gkg.$reflectable=1
+jY.prototype.skg=function(receiver,v){return receiver.kg=v}
+jY.prototype.skg.$reflectable=1
+jY.prototype.gLY=function(receiver){return receiver.LY}
+jY.prototype.gLY.$reflectable=1
+jY.prototype.sLY=function(receiver,v){return receiver.LY=v}
+jY.prototype.sLY.$reflectable=1
+jY.prototype.gq3=function(receiver){return receiver.q3}
+jY.prototype.gq3.$reflectable=1
+jY.prototype.sq3=function(receiver,v){return receiver.q3=v}
+jY.prototype.sq3.$reflectable=1
+jY.prototype.gOl=function(receiver){return receiver.Ol}
+jY.prototype.gOl.$reflectable=1
+jY.prototype.sOl=function(receiver,v){return receiver.Ol=v}
+jY.prototype.sOl.$reflectable=1
+jY.prototype.gX3=function(receiver){return receiver.X3}
+jY.prototype.gX3.$reflectable=1
+jY.prototype.sX3=function(receiver,v){return receiver.X3=v}
+jY.prototype.sX3.$reflectable=1
+function pva(){}pva.builtin$cls="pva"
+if(!"name" in pva)pva.name="pva"
+$desc=$collectedClasses.pva
if($desc instanceof Array)$desc=$desc[1]
-c4r.prototype=$desc
+pva.prototype=$desc
function nx(a){this.a=a}nx.builtin$cls="nx"
if(!"name" in nx)nx.name="nx"
$desc=$collectedClasses.nx
@@ -30239,16 +30083,16 @@
$desc=$collectedClasses.jm
if($desc instanceof Array)$desc=$desc[1]
jm.prototype=$desc
-function xj(a){this.a=a}xj.builtin$cls="xj"
+function ke(a){this.a=a}ke.builtin$cls="ke"
+if(!"name" in ke)ke.name="ke"
+$desc=$collectedClasses.ke
+if($desc instanceof Array)$desc=$desc[1]
+ke.prototype=$desc
+function xj(){}xj.builtin$cls="xj"
if(!"name" in xj)xj.name="xj"
$desc=$collectedClasses.xj
if($desc instanceof Array)$desc=$desc[1]
xj.prototype=$desc
-function VB(){}VB.builtin$cls="VB"
-if(!"name" in VB)VB.name="VB"
-$desc=$collectedClasses.VB
-if($desc instanceof Array)$desc=$desc[1]
-VB.prototype=$desc
function aI(b,c){this.b=b
this.c=c}aI.builtin$cls="aI"
if(!"name" in aI)aI.name="aI"
@@ -30277,12 +30121,12 @@
$desc=$collectedClasses.Tm
if($desc instanceof Array)$desc=$desc[1]
Tm.prototype=$desc
-function q1(a,Gq){this.a=a
-this.Gq=Gq}q1.builtin$cls="q1"
-if(!"name" in q1)q1.name="q1"
-$desc=$collectedClasses.q1
+function ib(a,Gq){this.a=a
+this.Gq=Gq}ib.builtin$cls="ib"
+if(!"name" in ib)ib.name="ib"
+$desc=$collectedClasses.ib
if($desc instanceof Array)$desc=$desc[1]
-q1.prototype=$desc
+ib.prototype=$desc
function CA(a,b){this.a=a
this.b=b}CA.builtin$cls="CA"
if(!"name" in CA)CA.name="CA"
@@ -30327,7 +30171,7 @@
$desc=$collectedClasses.uQ
if($desc instanceof Array)$desc=$desc[1]
uQ.prototype=$desc
-function D7(F1,h2){this.F1=F1
+function D7(qt,h2){this.qt=qt
this.h2=h2}D7.builtin$cls="D7"
if(!"name" in D7)D7.name="D7"
$desc=$collectedClasses.D7
@@ -30343,15 +30187,12 @@
$desc=$collectedClasses.GS
if($desc instanceof Array)$desc=$desc[1]
GS.prototype=$desc
-function pR(tY,Pe,AP,fn,pC,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.tY=tY
+function pR(tY,Pe,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.tY=tY
this.Pe=Pe
this.AP=AP
-this.fn=fn
-this.pC=pC
+this.Lk=Lk
this.AP=AP
-this.fn=fn
-this.AP=AP
-this.fn=fn
+this.Lk=Lk
this.dZ=dZ
this.Sa=Sa
this.Uk=Uk
@@ -30369,19 +30210,11 @@
$desc=$collectedClasses.Js
if($desc instanceof Array)$desc=$desc[1]
Js.prototype=$desc
-function fM(){}fM.builtin$cls="fM"
-if(!"name" in fM)fM.name="fM"
-$desc=$collectedClasses.fM
-if($desc instanceof Array)$desc=$desc[1]
-fM.prototype=$desc
-function hx(Xh,AP,fn,pC,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.Xh=Xh
+function hx(Xh,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.Xh=Xh
this.AP=AP
-this.fn=fn
-this.pC=pC
+this.Lk=Lk
this.AP=AP
-this.fn=fn
-this.AP=AP
-this.fn=fn
+this.Lk=Lk
this.dZ=dZ
this.Sa=Sa
this.Uk=Uk
@@ -30398,42 +30231,16 @@
hx.prototype.gXh.$reflectable=1
hx.prototype.sXh=function(receiver,v){return receiver.Xh=v}
hx.prototype.sXh.$reflectable=1
-function Squ(){}Squ.builtin$cls="Squ"
-if(!"name" in Squ)Squ.name="Squ"
-$desc=$collectedClasses.Squ
+function cda(){}cda.builtin$cls="cda"
+if(!"name" in cda)cda.name="cda"
+$desc=$collectedClasses.cda
if($desc instanceof Array)$desc=$desc[1]
-Squ.prototype=$desc
-function PO(pC,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.pC=pC
+cda.prototype=$desc
+function u7(tf,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.tf=tf
this.AP=AP
-this.fn=fn
+this.Lk=Lk
this.AP=AP
-this.fn=fn
-this.dZ=dZ
-this.Sa=Sa
-this.Uk=Uk
-this.oq=oq
-this.Wz=Wz
-this.SO=SO
-this.B7=B7
-this.X0=X0}PO.builtin$cls="PO"
-if(!"name" in PO)PO.name="PO"
-$desc=$collectedClasses.PO
-if($desc instanceof Array)$desc=$desc[1]
-PO.prototype=$desc
-PO.prototype.gpC=function(receiver){return receiver.pC}
-PO.prototype.gpC.$reflectable=1
-PO.prototype.spC=function(receiver,v){return receiver.pC=v}
-PO.prototype.spC.$reflectable=1
-function Vf(){}Vf.builtin$cls="Vf"
-if(!"name" in Vf)Vf.name="Vf"
-$desc=$collectedClasses.Vf
-if($desc instanceof Array)$desc=$desc[1]
-Vf.prototype=$desc
-function u7(Jh,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.Jh=Jh
-this.AP=AP
-this.fn=fn
-this.AP=AP
-this.fn=fn
+this.Lk=Lk
this.dZ=dZ
this.Sa=Sa
this.Uk=Uk
@@ -30446,17 +30253,16 @@
$desc=$collectedClasses.u7
if($desc instanceof Array)$desc=$desc[1]
u7.prototype=$desc
-function fW(a){this.a=a}fW.builtin$cls="fW"
-if(!"name" in fW)fW.name="fW"
-$desc=$collectedClasses.fW
+u7.prototype.gtf=function(receiver){return receiver.tf}
+u7.prototype.gtf.$reflectable=1
+u7.prototype.stf=function(receiver,v){return receiver.tf=v}
+u7.prototype.stf.$reflectable=1
+function waa(){}waa.builtin$cls="waa"
+if(!"name" in waa)waa.name="waa"
+$desc=$collectedClasses.waa
if($desc instanceof Array)$desc=$desc[1]
-fW.prototype=$desc
-function Ey(b){this.b=b}Ey.builtin$cls="Ey"
-if(!"name" in Ey)Ey.name="Ey"
-$desc=$collectedClasses.Ey
-if($desc instanceof Array)$desc=$desc[1]
-Ey.prototype=$desc
-function qm(Aq,tT,eT,yt,wd,oH,z3,AP,fn){this.Aq=Aq
+waa.prototype=$desc
+function qm(B1,tT,eT,yt,wd,oH,z3,AP,Lk){this.B1=B1
this.tT=tT
this.eT=eT
this.yt=yt
@@ -30464,34 +30270,31 @@
this.oH=oH
this.z3=z3
this.AP=AP
-this.fn=fn}qm.builtin$cls="qm"
+this.Lk=Lk}qm.builtin$cls="qm"
if(!"name" in qm)qm.name="qm"
$desc=$collectedClasses.qm
if($desc instanceof Array)$desc=$desc[1]
qm.prototype=$desc
-qm.prototype.gAq=function(receiver){return this.Aq}
+qm.prototype.gB1=function(receiver){return this.B1}
qm.prototype.gtT=function(receiver){return this.tT}
qm.prototype.gtT.$reflectable=1
-function vO(a){this.a=a}vO.builtin$cls="vO"
-if(!"name" in vO)vO.name="vO"
-$desc=$collectedClasses.vO
+function TI(a){this.a=a}TI.builtin$cls="TI"
+if(!"name" in TI)TI.name="TI"
+$desc=$collectedClasses.TI
if($desc instanceof Array)$desc=$desc[1]
-vO.prototype=$desc
-function E7(SS,fb,qY,qO,Hm,pD,eH,vk,AP,fn,pC,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.SS=SS
+TI.prototype=$desc
+function E7(pD,Dt,BA,FT,vk,fb,qO,Hm,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.pD=pD
+this.Dt=Dt
+this.BA=BA
+this.FT=FT
+this.vk=vk
this.fb=fb
-this.qY=qY
this.qO=qO
this.Hm=Hm
-this.pD=pD
-this.eH=eH
-this.vk=vk
this.AP=AP
-this.fn=fn
-this.pC=pC
+this.Lk=Lk
this.AP=AP
-this.fn=fn
-this.AP=AP
-this.fn=fn
+this.Lk=Lk
this.dZ=dZ
this.Sa=Sa
this.Uk=Uk
@@ -30504,54 +30307,47 @@
$desc=$collectedClasses.E7
if($desc instanceof Array)$desc=$desc[1]
E7.prototype=$desc
-E7.prototype.gSS=function(receiver){return receiver.SS}
-E7.prototype.gSS.$reflectable=1
-E7.prototype.sSS=function(receiver,v){return receiver.SS=v}
-E7.prototype.sSS.$reflectable=1
+E7.prototype.gpD=function(receiver){return receiver.pD}
+E7.prototype.gpD.$reflectable=1
+E7.prototype.spD=function(receiver,v){return receiver.pD=v}
+E7.prototype.spD.$reflectable=1
+E7.prototype.gDt=function(receiver){return receiver.Dt}
+E7.prototype.gDt.$reflectable=1
+E7.prototype.gBA=function(receiver){return receiver.BA}
+E7.prototype.gBA.$reflectable=1
+E7.prototype.sBA=function(receiver,v){return receiver.BA=v}
+E7.prototype.sBA.$reflectable=1
+E7.prototype.gFT=function(receiver){return receiver.FT}
+E7.prototype.gFT.$reflectable=1
+E7.prototype.sFT=function(receiver,v){return receiver.FT=v}
+E7.prototype.sFT.$reflectable=1
+E7.prototype.gvk=function(receiver){return receiver.vk}
+E7.prototype.gvk.$reflectable=1
+E7.prototype.svk=function(receiver,v){return receiver.vk=v}
+E7.prototype.svk.$reflectable=1
E7.prototype.gfb=function(receiver){return receiver.fb}
E7.prototype.gfb.$reflectable=1
-E7.prototype.gqY=function(receiver){return receiver.qY}
-E7.prototype.gqY.$reflectable=1
-E7.prototype.sqY=function(receiver,v){return receiver.qY=v}
-E7.prototype.sqY.$reflectable=1
E7.prototype.gqO=function(receiver){return receiver.qO}
E7.prototype.gqO.$reflectable=1
E7.prototype.gHm=function(receiver){return receiver.Hm}
E7.prototype.gHm.$reflectable=1
E7.prototype.sHm=function(receiver,v){return receiver.Hm=v}
E7.prototype.sHm.$reflectable=1
-E7.prototype.gpD=function(receiver){return receiver.pD}
-E7.prototype.gpD.$reflectable=1
-E7.prototype.spD=function(receiver,v){return receiver.pD=v}
-E7.prototype.spD.$reflectable=1
-E7.prototype.geH=function(receiver){return receiver.eH}
-E7.prototype.geH.$reflectable=1
-E7.prototype.seH=function(receiver,v){return receiver.eH=v}
-E7.prototype.seH.$reflectable=1
-E7.prototype.gvk=function(receiver){return receiver.vk}
-E7.prototype.gvk.$reflectable=1
-E7.prototype.svk=function(receiver,v){return receiver.vk=v}
-E7.prototype.svk.$reflectable=1
-function KUl(){}KUl.builtin$cls="KUl"
-if(!"name" in KUl)KUl.name="KUl"
-$desc=$collectedClasses.KUl
+function V4(){}V4.builtin$cls="V4"
+if(!"name" in V4)V4.name="V4"
+$desc=$collectedClasses.V4
if($desc instanceof Array)$desc=$desc[1]
-KUl.prototype=$desc
+V4.prototype=$desc
function SV(a){this.a=a}SV.builtin$cls="SV"
if(!"name" in SV)SV.name="SV"
$desc=$collectedClasses.SV
if($desc instanceof Array)$desc=$desc[1]
SV.prototype=$desc
-function Mf(){}Mf.builtin$cls="Mf"
-if(!"name" in Mf)Mf.name="Mf"
-$desc=$collectedClasses.Mf
-if($desc instanceof Array)$desc=$desc[1]
-Mf.prototype=$desc
-function Kz(pC,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.pC=pC
+function Kz(Pw,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.Pw=Pw
this.AP=AP
-this.fn=fn
+this.Lk=Lk
this.AP=AP
-this.fn=fn
+this.Lk=Lk
this.dZ=dZ
this.Sa=Sa
this.Uk=Uk
@@ -30564,12 +30360,21 @@
$desc=$collectedClasses.Kz
if($desc instanceof Array)$desc=$desc[1]
Kz.prototype=$desc
-function vj(eb,kf,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.eb=eb
+Kz.prototype.gPw=function(receiver){return receiver.Pw}
+Kz.prototype.gPw.$reflectable=1
+Kz.prototype.sPw=function(receiver,v){return receiver.Pw=v}
+Kz.prototype.sPw.$reflectable=1
+function V9(){}V9.builtin$cls="V9"
+if(!"name" in V9)V9.name="V9"
+$desc=$collectedClasses.V9
+if($desc instanceof Array)$desc=$desc[1]
+V9.prototype=$desc
+function vj(eb,kf,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.eb=eb
this.kf=kf
this.AP=AP
-this.fn=fn
+this.Lk=Lk
this.AP=AP
-this.fn=fn
+this.Lk=Lk
this.dZ=dZ
this.Sa=Sa
this.Uk=Uk
@@ -30590,20 +30395,17 @@
vj.prototype.gkf.$reflectable=1
vj.prototype.skf=function(receiver,v){return receiver.kf=v}
vj.prototype.skf.$reflectable=1
-function tuj(){}tuj.builtin$cls="tuj"
-if(!"name" in tuj)tuj.name="tuj"
-$desc=$collectedClasses.tuj
+function V10(){}V10.builtin$cls="V10"
+if(!"name" in V10)V10.name="V10"
+$desc=$collectedClasses.V10
if($desc instanceof Array)$desc=$desc[1]
-tuj.prototype=$desc
-function LU(tY,Pe,AP,fn,pC,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.tY=tY
+V10.prototype=$desc
+function LU(tY,Pe,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.tY=tY
this.Pe=Pe
this.AP=AP
-this.fn=fn
-this.pC=pC
+this.Lk=Lk
this.AP=AP
-this.fn=fn
-this.AP=AP
-this.fn=fn
+this.Lk=Lk
this.dZ=dZ
this.Sa=Sa
this.Uk=Uk
@@ -30616,14 +30418,11 @@
$desc=$collectedClasses.LU
if($desc instanceof Array)$desc=$desc[1]
LU.prototype=$desc
-function T2(N7,AP,fn,pC,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.N7=N7
+function KL(N7,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.N7=N7
this.AP=AP
-this.fn=fn
-this.pC=pC
+this.Lk=Lk
this.AP=AP
-this.fn=fn
-this.AP=AP
-this.fn=fn
+this.Lk=Lk
this.dZ=dZ
this.Sa=Sa
this.Uk=Uk
@@ -30631,30 +30430,20 @@
this.Wz=Wz
this.SO=SO
this.B7=B7
-this.X0=X0}T2.builtin$cls="T2"
-if(!"name" in T2)T2.name="T2"
-$desc=$collectedClasses.T2
+this.X0=X0}KL.builtin$cls="KL"
+if(!"name" in KL)KL.name="KL"
+$desc=$collectedClasses.KL
if($desc instanceof Array)$desc=$desc[1]
-T2.prototype=$desc
-T2.prototype.gN7=function(receiver){return receiver.N7}
-T2.prototype.gN7.$reflectable=1
-T2.prototype.sN7=function(receiver,v){return receiver.N7=v}
-T2.prototype.sN7.$reflectable=1
-function mHk(){}mHk.builtin$cls="mHk"
-if(!"name" in mHk)mHk.name="mHk"
-$desc=$collectedClasses.mHk
+KL.prototype=$desc
+KL.prototype.gN7=function(receiver){return receiver.N7}
+KL.prototype.gN7.$reflectable=1
+KL.prototype.sN7=function(receiver,v){return receiver.N7=v}
+KL.prototype.sN7.$reflectable=1
+function V11(){}V11.builtin$cls="V11"
+if(!"name" in V11)V11.name="V11"
+$desc=$collectedClasses.V11
if($desc instanceof Array)$desc=$desc[1]
-mHk.prototype=$desc
-function Jq(a){this.a=a}Jq.builtin$cls="Jq"
-if(!"name" in Jq)Jq.name="Jq"
-$desc=$collectedClasses.Jq
-if($desc instanceof Array)$desc=$desc[1]
-Jq.prototype=$desc
-function Yn(){}Yn.builtin$cls="Yn"
-if(!"name" in Yn)Yn.name="Yn"
-$desc=$collectedClasses.Yn
-if($desc instanceof Array)$desc=$desc[1]
-Yn.prototype=$desc
+V11.prototype=$desc
function TJ(oc,eT,n2,Cj,wd,Gs){this.oc=oc
this.eT=eT
this.n2=n2
@@ -30708,66 +30497,35 @@
$desc=$collectedClasses.Lb
if($desc instanceof Array)$desc=$desc[1]
Lb.prototype=$desc
-function PF(Gj,ah,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.Gj=Gj
-this.ah=ah
-this.AP=AP
-this.fn=fn
-this.AP=AP
-this.fn=fn
-this.dZ=dZ
-this.Sa=Sa
-this.Uk=Uk
-this.oq=oq
-this.Wz=Wz
-this.SO=SO
-this.B7=B7
-this.X0=X0}PF.builtin$cls="PF"
-if(!"name" in PF)PF.name="PF"
-$desc=$collectedClasses.PF
+function T4(T9,Bu){this.T9=T9
+this.Bu=Bu}T4.builtin$cls="T4"
+if(!"name" in T4)T4.name="T4"
+$desc=$collectedClasses.T4
if($desc instanceof Array)$desc=$desc[1]
-PF.prototype=$desc
-PF.prototype.gGj=function(receiver){return receiver.Gj}
-PF.prototype.gGj.$reflectable=1
-PF.prototype.sGj=function(receiver,v){return receiver.Gj=v}
-PF.prototype.sGj.$reflectable=1
-PF.prototype.gah=function(receiver){return receiver.ah}
-PF.prototype.gah.$reflectable=1
-PF.prototype.sah=function(receiver,v){return receiver.ah=v}
-PF.prototype.sah.$reflectable=1
-function Vct(){}Vct.builtin$cls="Vct"
-if(!"name" in Vct)Vct.name="Vct"
-$desc=$collectedClasses.Vct
+T4.prototype=$desc
+function tzK(){}tzK.builtin$cls="tzK"
+if(!"name" in tzK)tzK.name="tzK"
+$desc=$collectedClasses.tzK
if($desc instanceof Array)$desc=$desc[1]
-Vct.prototype=$desc
-function fA(T9,Bu){this.T9=T9
-this.Bu=Bu}fA.builtin$cls="fA"
-if(!"name" in fA)fA.name="fA"
-$desc=$collectedClasses.fA
-if($desc instanceof Array)$desc=$desc[1]
-fA.prototype=$desc
-function Qz(){}Qz.builtin$cls="Qz"
-if(!"name" in Qz)Qz.name="Qz"
-$desc=$collectedClasses.Qz
-if($desc instanceof Array)$desc=$desc[1]
-Qz.prototype=$desc
+tzK.prototype=$desc
function jA(oc){this.oc=oc}jA.builtin$cls="jA"
if(!"name" in jA)jA.name="jA"
$desc=$collectedClasses.jA
if($desc instanceof Array)$desc=$desc[1]
jA.prototype=$desc
jA.prototype.goc=function(receiver){return this.oc}
-function Jo(){}Jo.builtin$cls="Jo"
-if(!"name" in Jo)Jo.name="Jo"
-$desc=$collectedClasses.Jo
+function PO(){}PO.builtin$cls="PO"
+if(!"name" in PO)PO.name="PO"
+$desc=$collectedClasses.PO
if($desc instanceof Array)$desc=$desc[1]
-Jo.prototype=$desc
-function c5(){}c5.builtin$cls="c5"
-if(!"name" in c5)c5.name="c5"
-$desc=$collectedClasses.c5
+PO.prototype=$desc
+function oBi(){}oBi.builtin$cls="oBi"
+if(!"name" in oBi)oBi.name="oBi"
+$desc=$collectedClasses.oBi
if($desc instanceof Array)$desc=$desc[1]
-c5.prototype=$desc
-function F1(AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.AP=AP
-this.fn=fn
+oBi.prototype=$desc
+function F1(AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.AP=AP
+this.Lk=Lk
this.dZ=dZ
this.Sa=Sa
this.Uk=Uk
@@ -30780,13 +30538,13 @@
$desc=$collectedClasses.F1
if($desc instanceof Array)$desc=$desc[1]
F1.prototype=$desc
-function aQ(uy,ZC,Jo,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.uy=uy
-this.ZC=ZC
+function aQ(KU,V4,Jo,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.KU=KU
+this.V4=V4
this.Jo=Jo
this.AP=AP
-this.fn=fn
+this.Lk=Lk
this.AP=AP
-this.fn=fn
+this.Lk=Lk
this.dZ=dZ
this.Sa=Sa
this.Uk=Uk
@@ -30799,29 +30557,29 @@
$desc=$collectedClasses.aQ
if($desc instanceof Array)$desc=$desc[1]
aQ.prototype=$desc
-aQ.prototype.guy=function(receiver){return receiver.uy}
-aQ.prototype.guy.$reflectable=1
-aQ.prototype.suy=function(receiver,v){return receiver.uy=v}
-aQ.prototype.suy.$reflectable=1
-aQ.prototype.gZC=function(receiver){return receiver.ZC}
-aQ.prototype.gZC.$reflectable=1
-aQ.prototype.sZC=function(receiver,v){return receiver.ZC=v}
-aQ.prototype.sZC.$reflectable=1
+aQ.prototype.gKU=function(receiver){return receiver.KU}
+aQ.prototype.gKU.$reflectable=1
+aQ.prototype.sKU=function(receiver,v){return receiver.KU=v}
+aQ.prototype.sKU.$reflectable=1
+aQ.prototype.gV4=function(receiver){return receiver.V4}
+aQ.prototype.gV4.$reflectable=1
+aQ.prototype.sV4=function(receiver,v){return receiver.V4=v}
+aQ.prototype.sV4.$reflectable=1
aQ.prototype.gJo=function(receiver){return receiver.Jo}
aQ.prototype.gJo.$reflectable=1
aQ.prototype.sJo=function(receiver,v){return receiver.Jo=v}
aQ.prototype.sJo.$reflectable=1
-function D13(){}D13.builtin$cls="D13"
-if(!"name" in D13)D13.name="D13"
-$desc=$collectedClasses.D13
+function V12(){}V12.builtin$cls="V12"
+if(!"name" in V12)V12.name="V12"
+$desc=$collectedClasses.V12
if($desc instanceof Array)$desc=$desc[1]
-D13.prototype=$desc
-function Ya5(uy,ZC,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.uy=uy
-this.ZC=ZC
+V12.prototype=$desc
+function Qa(KU,V4,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.KU=KU
+this.V4=V4
this.AP=AP
-this.fn=fn
+this.Lk=Lk
this.AP=AP
-this.fn=fn
+this.Lk=Lk
this.dZ=dZ
this.Sa=Sa
this.Uk=Uk
@@ -30829,30 +30587,31 @@
this.Wz=Wz
this.SO=SO
this.B7=B7
-this.X0=X0}Ya5.builtin$cls="Ya5"
-if(!"name" in Ya5)Ya5.name="Ya5"
-$desc=$collectedClasses.Ya5
+this.X0=X0}Qa.builtin$cls="Qa"
+if(!"name" in Qa)Qa.name="Qa"
+$desc=$collectedClasses.Qa
if($desc instanceof Array)$desc=$desc[1]
-Ya5.prototype=$desc
-Ya5.prototype.guy=function(receiver){return receiver.uy}
-Ya5.prototype.guy.$reflectable=1
-Ya5.prototype.suy=function(receiver,v){return receiver.uy=v}
-Ya5.prototype.suy.$reflectable=1
-Ya5.prototype.gZC=function(receiver){return receiver.ZC}
-Ya5.prototype.gZC.$reflectable=1
-Ya5.prototype.sZC=function(receiver,v){return receiver.ZC=v}
-Ya5.prototype.sZC.$reflectable=1
-function WZq(){}WZq.builtin$cls="WZq"
-if(!"name" in WZq)WZq.name="WZq"
-$desc=$collectedClasses.WZq
+Qa.prototype=$desc
+Qa.prototype.gKU=function(receiver){return receiver.KU}
+Qa.prototype.gKU.$reflectable=1
+Qa.prototype.sKU=function(receiver,v){return receiver.KU=v}
+Qa.prototype.sKU.$reflectable=1
+Qa.prototype.gV4=function(receiver){return receiver.V4}
+Qa.prototype.gV4.$reflectable=1
+Qa.prototype.sV4=function(receiver,v){return receiver.V4=v}
+Qa.prototype.sV4.$reflectable=1
+function V13(){}V13.builtin$cls="V13"
+if(!"name" in V13)V13.name="V13"
+$desc=$collectedClasses.V13
if($desc instanceof Array)$desc=$desc[1]
-WZq.prototype=$desc
-function Ww(rU,SB,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.rU=rU
+V13.prototype=$desc
+function Ww(rU,SB,Hq,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.rU=rU
this.SB=SB
+this.Hq=Hq
this.AP=AP
-this.fn=fn
+this.Lk=Lk
this.AP=AP
-this.fn=fn
+this.Lk=Lk
this.dZ=dZ
this.Sa=Sa
this.Uk=Uk
@@ -30873,16 +30632,20 @@
Ww.prototype.gSB.$reflectable=1
Ww.prototype.sSB=function(receiver,v){return receiver.SB=v}
Ww.prototype.sSB.$reflectable=1
-function pva(){}pva.builtin$cls="pva"
-if(!"name" in pva)pva.name="pva"
-$desc=$collectedClasses.pva
+Ww.prototype.gHq=function(receiver){return receiver.Hq}
+Ww.prototype.gHq.$reflectable=1
+Ww.prototype.sHq=function(receiver,v){return receiver.Hq=v}
+Ww.prototype.sHq.$reflectable=1
+function V14(){}V14.builtin$cls="V14"
+if(!"name" in V14)V14.name="V14"
+$desc=$collectedClasses.V14
if($desc instanceof Array)$desc=$desc[1]
-pva.prototype=$desc
-function tz(Jo,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.Jo=Jo
+V14.prototype=$desc
+function tz(Jo,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.Jo=Jo
this.AP=AP
-this.fn=fn
+this.Lk=Lk
this.AP=AP
-this.fn=fn
+this.Lk=Lk
this.dZ=dZ
this.Sa=Sa
this.Uk=Uk
@@ -30899,19 +30662,17 @@
tz.prototype.gJo.$reflectable=1
tz.prototype.sJo=function(receiver,v){return receiver.Jo=v}
tz.prototype.sJo.$reflectable=1
-function cda(){}cda.builtin$cls="cda"
-if(!"name" in cda)cda.name="cda"
-$desc=$collectedClasses.cda
+function V15(){}V15.builtin$cls="V15"
+if(!"name" in V15)V15.name="V15"
+$desc=$collectedClasses.V15
if($desc instanceof Array)$desc=$desc[1]
-cda.prototype=$desc
-function fl(Jo,AP,fn,pC,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.Jo=Jo
+V15.prototype=$desc
+function fl(Jo,iy,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.Jo=Jo
+this.iy=iy
this.AP=AP
-this.fn=fn
-this.pC=pC
+this.Lk=Lk
this.AP=AP
-this.fn=fn
-this.AP=AP
-this.fn=fn
+this.Lk=Lk
this.dZ=dZ
this.Sa=Sa
this.Uk=Uk
@@ -30928,20 +30689,21 @@
fl.prototype.gJo.$reflectable=1
fl.prototype.sJo=function(receiver,v){return receiver.Jo=v}
fl.prototype.sJo.$reflectable=1
-function qFb(){}qFb.builtin$cls="qFb"
-if(!"name" in qFb)qFb.name="qFb"
-$desc=$collectedClasses.qFb
+fl.prototype.giy=function(receiver){return receiver.iy}
+fl.prototype.giy.$reflectable=1
+fl.prototype.siy=function(receiver,v){return receiver.iy=v}
+fl.prototype.siy.$reflectable=1
+function V16(){}V16.builtin$cls="V16"
+if(!"name" in V16)V16.name="V16"
+$desc=$collectedClasses.V16
if($desc instanceof Array)$desc=$desc[1]
-qFb.prototype=$desc
-function oM(Ap,Jo,AP,fn,pC,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.Ap=Ap
+V16.prototype=$desc
+function Zt(Ap,Jo,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.Ap=Ap
this.Jo=Jo
this.AP=AP
-this.fn=fn
-this.pC=pC
+this.Lk=Lk
this.AP=AP
-this.fn=fn
-this.AP=AP
-this.fn=fn
+this.Lk=Lk
this.dZ=dZ
this.Sa=Sa
this.Uk=Uk
@@ -30949,33 +30711,30 @@
this.Wz=Wz
this.SO=SO
this.B7=B7
-this.X0=X0}oM.builtin$cls="oM"
-if(!"name" in oM)oM.name="oM"
-$desc=$collectedClasses.oM
+this.X0=X0}Zt.builtin$cls="Zt"
+if(!"name" in Zt)Zt.name="Zt"
+$desc=$collectedClasses.Zt
if($desc instanceof Array)$desc=$desc[1]
-oM.prototype=$desc
-oM.prototype.gAp=function(receiver){return receiver.Ap}
-oM.prototype.gAp.$reflectable=1
-oM.prototype.sAp=function(receiver,v){return receiver.Ap=v}
-oM.prototype.sAp.$reflectable=1
-oM.prototype.gJo=function(receiver){return receiver.Jo}
-oM.prototype.gJo.$reflectable=1
-oM.prototype.sJo=function(receiver,v){return receiver.Jo=v}
-oM.prototype.sJo.$reflectable=1
-function rna(){}rna.builtin$cls="rna"
-if(!"name" in rna)rna.name="rna"
-$desc=$collectedClasses.rna
+Zt.prototype=$desc
+Zt.prototype.gAp=function(receiver){return receiver.Ap}
+Zt.prototype.gAp.$reflectable=1
+Zt.prototype.sAp=function(receiver,v){return receiver.Ap=v}
+Zt.prototype.sAp.$reflectable=1
+Zt.prototype.gJo=function(receiver){return receiver.Jo}
+Zt.prototype.gJo.$reflectable=1
+Zt.prototype.sJo=function(receiver,v){return receiver.Jo=v}
+Zt.prototype.sJo.$reflectable=1
+function V17(){}V17.builtin$cls="V17"
+if(!"name" in V17)V17.name="V17"
+$desc=$collectedClasses.V17
if($desc instanceof Array)$desc=$desc[1]
-rna.prototype=$desc
-function wM(Au,Jo,AP,fn,pC,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.Au=Au
+V17.prototype=$desc
+function iL(Au,Jo,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.Au=Au
this.Jo=Jo
this.AP=AP
-this.fn=fn
-this.pC=pC
+this.Lk=Lk
this.AP=AP
-this.fn=fn
-this.AP=AP
-this.fn=fn
+this.Lk=Lk
this.dZ=dZ
this.Sa=Sa
this.Uk=Uk
@@ -30983,30 +30742,30 @@
this.Wz=Wz
this.SO=SO
this.B7=B7
-this.X0=X0}wM.builtin$cls="wM"
-if(!"name" in wM)wM.name="wM"
-$desc=$collectedClasses.wM
+this.X0=X0}iL.builtin$cls="iL"
+if(!"name" in iL)iL.name="iL"
+$desc=$collectedClasses.iL
if($desc instanceof Array)$desc=$desc[1]
-wM.prototype=$desc
-wM.prototype.gAu=function(receiver){return receiver.Au}
-wM.prototype.gAu.$reflectable=1
-wM.prototype.sAu=function(receiver,v){return receiver.Au=v}
-wM.prototype.sAu.$reflectable=1
-wM.prototype.gJo=function(receiver){return receiver.Jo}
-wM.prototype.gJo.$reflectable=1
-wM.prototype.sJo=function(receiver,v){return receiver.Jo=v}
-wM.prototype.sJo.$reflectable=1
-function Vba(){}Vba.builtin$cls="Vba"
-if(!"name" in Vba)Vba.name="Vba"
-$desc=$collectedClasses.Vba
+iL.prototype=$desc
+iL.prototype.gAu=function(receiver){return receiver.Au}
+iL.prototype.gAu.$reflectable=1
+iL.prototype.sAu=function(receiver,v){return receiver.Au=v}
+iL.prototype.sAu.$reflectable=1
+iL.prototype.gJo=function(receiver){return receiver.Jo}
+iL.prototype.gJo.$reflectable=1
+iL.prototype.sJo=function(receiver,v){return receiver.Jo=v}
+iL.prototype.sJo.$reflectable=1
+function V18(){}V18.builtin$cls="V18"
+if(!"name" in V18)V18.name="V18"
+$desc=$collectedClasses.V18
if($desc instanceof Array)$desc=$desc[1]
-Vba.prototype=$desc
-function lI(k5,xH,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.k5=k5
+V18.prototype=$desc
+function lI(k5,xH,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.k5=k5
this.xH=xH
this.AP=AP
-this.fn=fn
+this.Lk=Lk
this.AP=AP
-this.fn=fn
+this.Lk=Lk
this.dZ=dZ
this.Sa=Sa
this.Uk=Uk
@@ -31027,13 +30786,13 @@
lI.prototype.gxH.$reflectable=1
lI.prototype.sxH=function(receiver,v){return receiver.xH=v}
lI.prototype.sxH.$reflectable=1
-function waa(){}waa.builtin$cls="waa"
-if(!"name" in waa)waa.name="waa"
-$desc=$collectedClasses.waa
+function V19(){}V19.builtin$cls="V19"
+if(!"name" in V19)V19.name="V19"
+$desc=$collectedClasses.V19
if($desc instanceof Array)$desc=$desc[1]
-waa.prototype=$desc
-function uL(AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.AP=AP
-this.fn=fn
+V19.prototype=$desc
+function uL(AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.AP=AP
+this.Lk=Lk
this.dZ=dZ
this.Sa=Sa
this.Uk=Uk
@@ -31064,18 +30823,18 @@
$desc=$collectedClasses.qI
if($desc instanceof Array)$desc=$desc[1]
qI.prototype=$desc
-qI.prototype.gWA=function(){return this.WA}
+qI.prototype.gWA=function(receiver){return this.WA}
qI.prototype.goc=function(receiver){return this.oc}
qI.prototype.gjL=function(receiver){return this.jL}
qI.prototype.gzZ=function(receiver){return this.zZ}
-function J3(b9,kK,Sv,rk,YX,B6,AP,fn){this.b9=b9
+function J3(b9,kK,Sv,rk,YX,B6,AP,Lk){this.b9=b9
this.kK=kK
this.Sv=Sv
this.rk=rk
this.YX=YX
this.B6=B6
this.AP=AP
-this.fn=fn}J3.builtin$cls="J3"
+this.Lk=Lk}J3.builtin$cls="J3"
if(!"name" in J3)J3.name="J3"
$desc=$collectedClasses.J3
if($desc instanceof Array)$desc=$desc[1]
@@ -31130,7 +30889,7 @@
$desc=$collectedClasses.DA
if($desc instanceof Array)$desc=$desc[1]
DA.prototype=$desc
-DA.prototype.gWA=function(){return this.WA}
+DA.prototype.gWA=function(receiver){return this.WA}
DA.prototype.gIl=function(){return this.Il}
function nd(){}nd.builtin$cls="nd"
if(!"name" in nd)nd.name="nd"
@@ -31153,27 +30912,27 @@
$desc=$collectedClasses.lS
if($desc instanceof Array)$desc=$desc[1]
lS.prototype=$desc
-function xh(L1,AP,fn){this.L1=L1
+function xh(L1,AP,Lk){this.L1=L1
this.AP=AP
-this.fn=fn}xh.builtin$cls="xh"
+this.Lk=Lk}xh.builtin$cls="xh"
if(!"name" in xh)xh.name="xh"
$desc=$collectedClasses.xh
if($desc instanceof Array)$desc=$desc[1]
xh.prototype=$desc
-function wn(b3,xg,h3,AP,fn){this.b3=b3
+function wn(b3,xg,h3,AP,Lk){this.b3=b3
this.xg=xg
this.h3=h3
this.AP=AP
-this.fn=fn}wn.builtin$cls="wn"
+this.Lk=Lk}wn.builtin$cls="wn"
if(!"name" in wn)wn.name="wn"
$desc=$collectedClasses.wn
if($desc instanceof Array)$desc=$desc[1]
wn.prototype=$desc
-function Ay(){}Ay.builtin$cls="Ay"
-if(!"name" in Ay)Ay.name="Ay"
-$desc=$collectedClasses.Ay
+function er(){}er.builtin$cls="er"
+if(!"name" in er)er.name="er"
+$desc=$collectedClasses.er
if($desc instanceof Array)$desc=$desc[1]
-Ay.prototype=$desc
+er.prototype=$desc
function Bj(a){this.a=a}Bj.builtin$cls="Bj"
if(!"name" in Bj)Bj.name="Bj"
$desc=$collectedClasses.Bj
@@ -31191,9 +30950,9 @@
HA.prototype.gG3=function(receiver){return this.G3}
HA.prototype.gjL=function(receiver){return this.jL}
HA.prototype.gzZ=function(receiver){return this.zZ}
-function qC(Zp,AP,fn){this.Zp=Zp
+function qC(Zp,AP,Lk){this.Zp=Zp
this.AP=AP
-this.fn=fn}qC.builtin$cls="qC"
+this.Lk=Lk}qC.builtin$cls="qC"
if(!"name" in qC)qC.name="qC"
$desc=$collectedClasses.qC
if($desc instanceof Array)$desc=$desc[1]
@@ -31208,14 +30967,14 @@
$desc=$collectedClasses.Lo
if($desc instanceof Array)$desc=$desc[1]
Lo.prototype=$desc
-function WR(ay,YB,BK,kN,cs,cT,AP,fn){this.ay=ay
+function WR(ay,YB,BK,kN,cs,cT,AP,Lk){this.ay=ay
this.YB=YB
this.BK=BK
this.kN=kN
this.cs=cs
this.cT=cT
this.AP=AP
-this.fn=fn}WR.builtin$cls="WR"
+this.Lk=Lk}WR.builtin$cls="WR"
if(!"name" in WR)WR.name="WR"
$desc=$collectedClasses.WR
if($desc instanceof Array)$desc=$desc[1]
@@ -31239,11 +30998,11 @@
$desc=$collectedClasses.C4
if($desc instanceof Array)$desc=$desc[1]
C4.prototype=$desc
-function YJ(){}YJ.builtin$cls="YJ"
-if(!"name" in YJ)YJ.name="YJ"
-$desc=$collectedClasses.YJ
+function Md(){}Md.builtin$cls="Md"
+if(!"name" in Md)Md.name="Md"
+$desc=$collectedClasses.Md
if($desc instanceof Array)$desc=$desc[1]
-YJ.prototype=$desc
+Md.prototype=$desc
function km(a){this.a=a}km.builtin$cls="km"
if(!"name" in km)km.name="km"
$desc=$collectedClasses.km
@@ -31254,7 +31013,7 @@
$desc=$collectedClasses.Zj
if($desc instanceof Array)$desc=$desc[1]
Zj.prototype=$desc
-function XP(zx,kw,aa,RT,Q7,NF,hf,xX,cI,lD,Gd,Ei){this.zx=zx
+function XP(zx,kw,aa,RT,Q7,NF,hf,xX,cI,lD,Gd,Ve){this.zx=zx
this.kw=kw
this.aa=aa
this.RT=RT
@@ -31265,7 +31024,7 @@
this.cI=cI
this.lD=lD
this.Gd=Gd
-this.Ei=Ei}XP.builtin$cls="XP"
+this.Ve=Ve}XP.builtin$cls="XP"
if(!"name" in XP)XP.name="XP"
$desc=$collectedClasses.XP
if($desc instanceof Array)$desc=$desc[1]
@@ -31305,11 +31064,11 @@
$desc=$collectedClasses.MX
if($desc instanceof Array)$desc=$desc[1]
MX.prototype=$desc
-function w10(){}w10.builtin$cls="w10"
-if(!"name" in w10)w10.name="w10"
-$desc=$collectedClasses.w10
+function w12(){}w12.builtin$cls="w12"
+if(!"name" in w12)w12.name="w12"
+$desc=$collectedClasses.w12
if($desc instanceof Array)$desc=$desc[1]
-w10.prototype=$desc
+w12.prototype=$desc
function r3y(a){this.a=a}r3y.builtin$cls="r3y"
if(!"name" in r3y)r3y.name="r3y"
$desc=$collectedClasses.r3y
@@ -31409,8 +31168,8 @@
$desc=$collectedClasses.Bf
if($desc instanceof Array)$desc=$desc[1]
Bf.prototype=$desc
-function ir(AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.AP=AP
-this.fn=fn
+function ir(AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.AP=AP
+this.Lk=Lk
this.dZ=dZ
this.Sa=Sa
this.Uk=Uk
@@ -31423,11 +31182,11 @@
$desc=$collectedClasses.ir
if($desc instanceof Array)$desc=$desc[1]
ir.prototype=$desc
-function jpR(X0){this.X0=X0}jpR.builtin$cls="jpR"
-if(!"name" in jpR)jpR.name="jpR"
-$desc=$collectedClasses.jpR
+function Sa(X0){this.X0=X0}Sa.builtin$cls="Sa"
+if(!"name" in Sa)Sa.name="Sa"
+$desc=$collectedClasses.Sa
if($desc instanceof Array)$desc=$desc[1]
-jpR.prototype=$desc
+Sa.prototype=$desc
zs.prototype.gKM=function(receiver){return receiver.X0}
zs.prototype.gKM.$reflectable=1
function GN(){}GN.builtin$cls="GN"
@@ -31460,11 +31219,11 @@
$desc=$collectedClasses.V3
if($desc instanceof Array)$desc=$desc[1]
V3.prototype=$desc
-function Bl(){}Bl.builtin$cls="Bl"
-if(!"name" in Bl)Bl.name="Bl"
-$desc=$collectedClasses.Bl
+function rD(){}rD.builtin$cls="rD"
+if(!"name" in rD)rD.name="rD"
+$desc=$collectedClasses.rD
if($desc instanceof Array)$desc=$desc[1]
-Bl.prototype=$desc
+rD.prototype=$desc
function Fn(){}Fn.builtin$cls="Fn"
if(!"name" in Fn)Fn.name="Fn"
$desc=$collectedClasses.Fn
@@ -31552,17 +31311,17 @@
$desc=$collectedClasses.Xy
if($desc instanceof Array)$desc=$desc[1]
Xy.prototype=$desc
-function G0(a){this.a=a}G0.builtin$cls="G0"
-if(!"name" in G0)G0.name="G0"
-$desc=$collectedClasses.G0
+function uK(a){this.a=a}uK.builtin$cls="uK"
+if(!"name" in uK)uK.name="uK"
+$desc=$collectedClasses.uK
if($desc instanceof Array)$desc=$desc[1]
-G0.prototype=$desc
-function mY(a9,Cu,uI,Y7,AP,fn){this.a9=a9
+uK.prototype=$desc
+function mY(a9,Cu,uI,Y7,AP,Lk){this.a9=a9
this.Cu=Cu
this.uI=uI
this.Y7=Y7
this.AP=AP
-this.fn=fn}mY.builtin$cls="mY"
+this.Lk=Lk}mY.builtin$cls="mY"
if(!"name" in mY)mY.name="mY"
$desc=$collectedClasses.mY
if($desc instanceof Array)$desc=$desc[1]
@@ -31578,10 +31337,10 @@
$desc=$collectedClasses.mB
if($desc instanceof Array)$desc=$desc[1]
mB.prototype=$desc
-function XF(vq,L1,AP,fn){this.vq=vq
+function XF(vq,L1,AP,Lk){this.vq=vq
this.L1=L1
this.AP=AP
-this.fn=fn}XF.builtin$cls="XF"
+this.Lk=Lk}XF.builtin$cls="XF"
if(!"name" in XF)XF.name="XF"
$desc=$collectedClasses.XF
if($desc instanceof Array)$desc=$desc[1]
@@ -31592,11 +31351,6 @@
$desc=$collectedClasses.bX
if($desc instanceof Array)$desc=$desc[1]
bX.prototype=$desc
-function Uf(){}Uf.builtin$cls="Uf"
-if(!"name" in Uf)Uf.name="Uf"
-$desc=$collectedClasses.Uf
-if($desc instanceof Array)$desc=$desc[1]
-Uf.prototype=$desc
function Ra(){}Ra.builtin$cls="Ra"
if(!"name" in Ra)Ra.name="Ra"
$desc=$collectedClasses.Ra
@@ -31667,11 +31421,16 @@
$desc=$collectedClasses.w7
if($desc instanceof Array)$desc=$desc[1]
w7.prototype=$desc
-function w9(){}w9.builtin$cls="w9"
-if(!"name" in w9)w9.name="w9"
-$desc=$collectedClasses.w9
+function w10(){}w10.builtin$cls="w10"
+if(!"name" in w10)w10.name="w10"
+$desc=$collectedClasses.w10
if($desc instanceof Array)$desc=$desc[1]
-w9.prototype=$desc
+w10.prototype=$desc
+function w11(){}w11.builtin$cls="w11"
+if(!"name" in w11)w11.name="w11"
+$desc=$collectedClasses.w11
+if($desc instanceof Array)$desc=$desc[1]
+w11.prototype=$desc
function c4(a){this.a=a}c4.builtin$cls="c4"
if(!"name" in c4)c4.name="c4"
$desc=$collectedClasses.c4
@@ -31686,14 +31445,15 @@
if($desc instanceof Array)$desc=$desc[1]
z6.prototype=$desc
z6.prototype.geT=function(receiver){return this.eT}
-function Ay0(bO,Lv){this.bO=bO
-this.Lv=Lv}Ay0.builtin$cls="Ay0"
-if(!"name" in Ay0)Ay0.name="Ay0"
-$desc=$collectedClasses.Ay0
+z6.prototype.gk8=function(){return this.k8}
+function Ay(bO,Lv){this.bO=bO
+this.Lv=Lv}Ay.builtin$cls="Ay"
+if(!"name" in Ay)Ay.name="Ay"
+$desc=$collectedClasses.Ay
if($desc instanceof Array)$desc=$desc[1]
-Ay0.prototype=$desc
-Ay0.prototype.sbO=function(v){return this.bO=v}
-Ay0.prototype.gLv=function(){return this.Lv}
+Ay.prototype=$desc
+Ay.prototype.sbO=function(v){return this.bO=v}
+Ay.prototype.gLv=function(){return this.Lv}
function Ed(Jd){this.Jd=Jd}Ed.builtin$cls="Ed"
if(!"name" in Ed)Ed.name="Ed"
$desc=$collectedClasses.Ed
@@ -31794,19 +31554,19 @@
if($desc instanceof Array)$desc=$desc[1]
mv.prototype=$desc
mv.prototype.gwz=function(){return this.wz}
-function mG(Bb,T8,KL,bO,tj,Lv,k6){this.Bb=Bb
+function iv(Bb,T8,KL,bO,tj,Lv,k6){this.Bb=Bb
this.T8=T8
this.KL=KL
this.bO=bO
this.tj=tj
this.Lv=Lv
-this.k6=k6}mG.builtin$cls="mG"
-if(!"name" in mG)mG.name="mG"
-$desc=$collectedClasses.mG
+this.k6=k6}iv.builtin$cls="iv"
+if(!"name" in iv)iv.name="iv"
+$desc=$collectedClasses.iv
if($desc instanceof Array)$desc=$desc[1]
-mG.prototype=$desc
-mG.prototype.gBb=function(){return this.Bb}
-mG.prototype.gT8=function(){return this.T8}
+iv.prototype=$desc
+iv.prototype.gBb=function(){return this.Bb}
+iv.prototype.gT8=function(){return this.T8}
function uA(a,b){this.a=a
this.b=b}uA.builtin$cls="uA"
if(!"name" in uA)uA.name="uA"
@@ -31856,11 +31616,11 @@
$desc=$collectedClasses.ja
if($desc instanceof Array)$desc=$desc[1]
ja.prototype=$desc
-function zw(d){this.d=d}zw.builtin$cls="zw"
-if(!"name" in zw)zw.name="zw"
-$desc=$collectedClasses.zw
+function ey(d){this.d=d}ey.builtin$cls="ey"
+if(!"name" in ey)ey.name="ey"
+$desc=$collectedClasses.ey
if($desc instanceof Array)$desc=$desc[1]
-zw.prototype=$desc
+ey.prototype=$desc
function fa(hP,re,KL,bO,tj,Lv,k6){this.hP=hP
this.re=re
this.KL=KL
@@ -32090,16 +31850,16 @@
$desc=$collectedClasses.fr
if($desc instanceof Array)$desc=$desc[1]
fr.prototype=$desc
-function cfS(){}cfS.builtin$cls="cfS"
-if(!"name" in cfS)cfS.name="cfS"
-$desc=$collectedClasses.cfS
+function d2(){}d2.builtin$cls="d2"
+if(!"name" in d2)d2.name="d2"
+$desc=$collectedClasses.d2
if($desc instanceof Array)$desc=$desc[1]
-cfS.prototype=$desc
-function JG(kW,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.kW=kW
+d2.prototype=$desc
+function JG(kW,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.kW=kW
this.AP=AP
-this.fn=fn
+this.Lk=Lk
this.AP=AP
-this.fn=fn
+this.Lk=Lk
this.dZ=dZ
this.Sa=Sa
this.Uk=Uk
@@ -32116,23 +31876,20 @@
JG.prototype.gkW.$reflectable=1
JG.prototype.skW=function(receiver,v){return receiver.kW=v}
JG.prototype.skW.$reflectable=1
-function V0(){}V0.builtin$cls="V0"
-if(!"name" in V0)V0.name="V0"
-$desc=$collectedClasses.V0
+function V20(){}V20.builtin$cls="V20"
+if(!"name" in V20)V20.name="V20"
+$desc=$collectedClasses.V20
if($desc instanceof Array)$desc=$desc[1]
-V0.prototype=$desc
-function knI(zw,AP,fn,tY,Pe,AP,fn,pC,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.zw=zw
+V20.prototype=$desc
+function knI(zw,AP,Lk,tY,Pe,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.zw=zw
this.AP=AP
-this.fn=fn
+this.Lk=Lk
this.tY=tY
this.Pe=Pe
this.AP=AP
-this.fn=fn
-this.pC=pC
+this.Lk=Lk
this.AP=AP
-this.fn=fn
-this.AP=AP
-this.fn=fn
+this.Lk=Lk
this.dZ=dZ
this.Sa=Sa
this.Uk=Uk
@@ -32154,14 +31911,12 @@
$desc=$collectedClasses.T5
if($desc instanceof Array)$desc=$desc[1]
T5.prototype=$desc
-function fI(Uz,AP,fn,pC,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.Uz=Uz
+function fI(Uz,HJ,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.Uz=Uz
+this.HJ=HJ
this.AP=AP
-this.fn=fn
-this.pC=pC
+this.Lk=Lk
this.AP=AP
-this.fn=fn
-this.AP=AP
-this.fn=fn
+this.Lk=Lk
this.dZ=dZ
this.Sa=Sa
this.Uk=Uk
@@ -32178,30 +31933,432 @@
fI.prototype.gUz.$reflectable=1
fI.prototype.sUz=function(receiver,v){return receiver.Uz=v}
fI.prototype.sUz.$reflectable=1
-function oaa(){}oaa.builtin$cls="oaa"
-if(!"name" in oaa)oaa.name="oaa"
-$desc=$collectedClasses.oaa
+fI.prototype.gHJ=function(receiver){return receiver.HJ}
+fI.prototype.gHJ.$reflectable=1
+fI.prototype.sHJ=function(receiver,v){return receiver.HJ=v}
+fI.prototype.sHJ.$reflectable=1
+function V21(){}V21.builtin$cls="V21"
+if(!"name" in V21)V21.name="V21"
+$desc=$collectedClasses.V21
if($desc instanceof Array)$desc=$desc[1]
-oaa.prototype=$desc
-function qq(a){this.a=a}qq.builtin$cls="qq"
+V21.prototype=$desc
+function qq(a,b){this.a=a
+this.b=b}qq.builtin$cls="qq"
if(!"name" in qq)qq.name="qq"
$desc=$collectedClasses.qq
if($desc instanceof Array)$desc=$desc[1]
qq.prototype=$desc
-function FC(){}FC.builtin$cls="FC"
-if(!"name" in FC)FC.name="FC"
-$desc=$collectedClasses.FC
+function G8(F1){this.F1=F1}G8.builtin$cls="G8"
+if(!"name" in G8)G8.name="G8"
+$desc=$collectedClasses.G8
if($desc instanceof Array)$desc=$desc[1]
-FC.prototype=$desc
-function xI(tY,Pe,AP,fn,pC,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.tY=tY
+G8.prototype=$desc
+G8.prototype.gF1=function(receiver){return this.F1}
+function fJ(F1,A4){this.F1=F1
+this.A4=A4}fJ.builtin$cls="fJ"
+if(!"name" in fJ)fJ.name="fJ"
+$desc=$collectedClasses.fJ
+if($desc instanceof Array)$desc=$desc[1]
+fJ.prototype=$desc
+function q1(a){this.a=a}q1.builtin$cls="q1"
+if(!"name" in q1)q1.name="q1"
+$desc=$collectedClasses.q1
+if($desc instanceof Array)$desc=$desc[1]
+q1.prototype=$desc
+function jx(F1,A4){this.F1=F1
+this.A4=A4}jx.builtin$cls="jx"
+if(!"name" in jx)jx.name="jx"
+$desc=$collectedClasses.jx
+if($desc instanceof Array)$desc=$desc[1]
+jx.prototype=$desc
+function yT(){}yT.builtin$cls="yT"
+if(!"name" in yT)yT.name="yT"
+$desc=$collectedClasses.yT
+if($desc instanceof Array)$desc=$desc[1]
+yT.prototype=$desc
+function Cn(){}Cn.builtin$cls="Cn"
+if(!"name" in Cn)Cn.name="Cn"
+$desc=$collectedClasses.Cn
+if($desc instanceof Array)$desc=$desc[1]
+Cn.prototype=$desc
+function du(F1,A4){this.F1=F1
+this.A4=A4}du.builtin$cls="du"
+if(!"name" in du)du.name="du"
+$desc=$collectedClasses.du
+if($desc instanceof Array)$desc=$desc[1]
+du.prototype=$desc
+function xc(F1,A4){this.F1=F1
+this.A4=A4}xc.builtin$cls="xc"
+if(!"name" in xc)xc.name="xc"
+$desc=$collectedClasses.xc
+if($desc instanceof Array)$desc=$desc[1]
+xc.prototype=$desc
+function bv(zf,fq,ne,PH,pw,v9,zb,KT,f5,cL,LE,Cf,W1,S9,AP,Lk,Fm,KG,mQ,nr,bN,GR,AP,Lk){this.zf=zf
+this.fq=fq
+this.ne=ne
+this.PH=PH
+this.pw=pw
+this.v9=v9
+this.zb=zb
+this.KT=KT
+this.f5=f5
+this.cL=cL
+this.LE=LE
+this.Cf=Cf
+this.W1=W1
+this.S9=S9
+this.AP=AP
+this.Lk=Lk
+this.Fm=Fm
+this.KG=KG
+this.mQ=mQ
+this.nr=nr
+this.bN=bN
+this.GR=GR
+this.AP=AP
+this.Lk=Lk}bv.builtin$cls="bv"
+if(!"name" in bv)bv.name="bv"
+$desc=$collectedClasses.bv
+if($desc instanceof Array)$desc=$desc[1]
+bv.prototype=$desc
+bv.prototype.gzf=function(){return this.zf}
+bv.prototype.gbN=function(){return this.KT}
+bv.prototype.sbN=function(v){return this.KT=v}
+bv.prototype.gGR=function(){return this.f5}
+bv.prototype.sGR=function(v){return this.f5=v}
+bv.prototype.gLE=function(){return this.LE}
+bv.prototype.gLE.$reflectable=1
+function D3(){}D3.builtin$cls="D3"
+if(!"name" in D3)D3.name="D3"
+$desc=$collectedClasses.D3
+if($desc instanceof Array)$desc=$desc[1]
+D3.prototype=$desc
+function KQ(a){this.a=a}KQ.builtin$cls="KQ"
+if(!"name" in KQ)KQ.name="KQ"
+$desc=$collectedClasses.KQ
+if($desc instanceof Array)$desc=$desc[1]
+KQ.prototype=$desc
+function Qq(a){this.a=a}Qq.builtin$cls="Qq"
+if(!"name" in Qq)Qq.name="Qq"
+$desc=$collectedClasses.Qq
+if($desc instanceof Array)$desc=$desc[1]
+Qq.prototype=$desc
+function Qd(Gt,i2,Fm,KG,mQ,nr,bN,GR,AP,Lk){this.Gt=Gt
+this.i2=i2
+this.Fm=Fm
+this.KG=KG
+this.mQ=mQ
+this.nr=nr
+this.bN=bN
+this.GR=GR
+this.AP=AP
+this.Lk=Lk}Qd.builtin$cls="Qd"
+if(!"name" in Qd)Qd.name="Qd"
+$desc=$collectedClasses.Qd
+if($desc instanceof Array)$desc=$desc[1]
+Qd.prototype=$desc
+Qd.prototype.gi2=function(receiver){return this.i2}
+Qd.prototype.gi2.$reflectable=1
+function i6(a,b){this.a=a
+this.b=b}i6.builtin$cls="i6"
+if(!"name" in i6)i6.name="i6"
+$desc=$collectedClasses.i6
+if($desc instanceof Array)$desc=$desc[1]
+i6.prototype=$desc
+function r2(c){this.c=c}r2.builtin$cls="r2"
+if(!"name" in r2)r2.name="r2"
+$desc=$collectedClasses.r2
+if($desc instanceof Array)$desc=$desc[1]
+r2.prototype=$desc
+function JB(d){this.d=d}JB.builtin$cls="JB"
+if(!"name" in JB)JB.name="JB"
+$desc=$collectedClasses.JB
+if($desc instanceof Array)$desc=$desc[1]
+JB.prototype=$desc
+function qj(){}qj.builtin$cls="qj"
+if(!"name" in qj)qj.name="qj"
+$desc=$collectedClasses.qj
+if($desc instanceof Array)$desc=$desc[1]
+qj.prototype=$desc
+function BH(a){this.a=a}BH.builtin$cls="BH"
+if(!"name" in BH)BH.name="BH"
+$desc=$collectedClasses.BH
+if($desc instanceof Array)$desc=$desc[1]
+BH.prototype=$desc
+function SI(RF,Fm,KG,mQ,nr,bN,GR,AP,Lk){this.RF=RF
+this.Fm=Fm
+this.KG=KG
+this.mQ=mQ
+this.nr=nr
+this.bN=bN
+this.GR=GR
+this.AP=AP
+this.Lk=Lk}SI.builtin$cls="SI"
+if(!"name" in SI)SI.name="SI"
+$desc=$collectedClasses.SI
+if($desc instanceof Array)$desc=$desc[1]
+SI.prototype=$desc
+function pt(J6,LD,AP,Lk,Fm,KG,mQ,nr,bN,GR,AP,Lk){this.J6=J6
+this.LD=LD
+this.AP=AP
+this.Lk=Lk
+this.Fm=Fm
+this.KG=KG
+this.mQ=mQ
+this.nr=nr
+this.bN=bN
+this.GR=GR
+this.AP=AP
+this.Lk=Lk}pt.builtin$cls="pt"
+if(!"name" in pt)pt.name="pt"
+$desc=$collectedClasses.pt
+if($desc instanceof Array)$desc=$desc[1]
+pt.prototype=$desc
+function wVq(){}wVq.builtin$cls="wVq"
+if(!"name" in wVq)wVq.name="wVq"
+$desc=$collectedClasses.wVq
+if($desc instanceof Array)$desc=$desc[1]
+wVq.prototype=$desc
+function c2(Rd,a4){this.Rd=Rd
+this.a4=a4}c2.builtin$cls="c2"
+if(!"name" in c2)c2.name="c2"
+$desc=$collectedClasses.c2
+if($desc instanceof Array)$desc=$desc[1]
+c2.prototype=$desc
+c2.prototype.gRd=function(receiver){return this.Rd}
+c2.prototype.gRd.$reflectable=1
+c2.prototype.ga4=function(receiver){return this.a4}
+c2.prototype.ga4.$reflectable=1
+function rj(Sw,u9,Gz,J6,Ge,wA,AP,Lk,Fm,KG,mQ,nr,bN,GR,AP,Lk){this.Sw=Sw
+this.u9=u9
+this.Gz=Gz
+this.J6=J6
+this.Ge=Ge
+this.wA=wA
+this.AP=AP
+this.Lk=Lk
+this.Fm=Fm
+this.KG=KG
+this.mQ=mQ
+this.nr=nr
+this.bN=bN
+this.GR=GR
+this.AP=AP
+this.Lk=Lk}rj.builtin$cls="rj"
+if(!"name" in rj)rj.name="rj"
+$desc=$collectedClasses.rj
+if($desc instanceof Array)$desc=$desc[1]
+rj.prototype=$desc
+rj.prototype.gSw=function(){return this.Sw}
+rj.prototype.gSw.$reflectable=1
+rj.prototype.gu9=function(){return this.u9}
+rj.prototype.gu9.$reflectable=1
+function dZL(){}dZL.builtin$cls="dZL"
+if(!"name" in dZL)dZL.name="dZL"
+$desc=$collectedClasses.dZL
+if($desc instanceof Array)$desc=$desc[1]
+dZL.prototype=$desc
+function N8(Yu,Du,fF){this.Yu=Yu
+this.Du=Du
+this.fF=fF}N8.builtin$cls="N8"
+if(!"name" in N8)N8.name="N8"
+$desc=$collectedClasses.N8
+if($desc instanceof Array)$desc=$desc[1]
+N8.prototype=$desc
+N8.prototype.gYu=function(){return this.Yu}
+N8.prototype.gDu=function(){return this.Du}
+N8.prototype.gfF=function(){return this.fF}
+function Q4(Yu,m7,L4,AP,Lk){this.Yu=Yu
+this.m7=m7
+this.L4=L4
+this.AP=AP
+this.Lk=Lk}Q4.builtin$cls="Q4"
+if(!"name" in Q4)Q4.name="Q4"
+$desc=$collectedClasses.Q4
+if($desc instanceof Array)$desc=$desc[1]
+Q4.prototype=$desc
+Q4.prototype.gYu=function(){return this.Yu}
+Q4.prototype.gYu.$reflectable=1
+Q4.prototype.gm7=function(){return this.m7}
+Q4.prototype.gm7.$reflectable=1
+Q4.prototype.gL4=function(){return this.L4}
+Q4.prototype.gL4.$reflectable=1
+function WAE(uX){this.uX=uX}WAE.builtin$cls="WAE"
+if(!"name" in WAE)WAE.name="WAE"
+$desc=$collectedClasses.WAE
+if($desc instanceof Array)$desc=$desc[1]
+WAE.prototype=$desc
+function Vi(tT,Av){this.tT=tT
+this.Av=Av}Vi.builtin$cls="Vi"
+if(!"name" in Vi)Vi.name="Vi"
+$desc=$collectedClasses.Vi
+if($desc instanceof Array)$desc=$desc[1]
+Vi.prototype=$desc
+Vi.prototype.gtT=function(receiver){return this.tT}
+Vi.prototype.gAv=function(){return this.Av}
+function kx(J6,jv,Du,fF,vg,Mb,VS,hw,va,yP,mM,qH,MO,oc,zz,TD,AP,Lk,Fm,KG,mQ,nr,bN,GR,AP,Lk){this.J6=J6
+this.jv=jv
+this.Du=Du
+this.fF=fF
+this.vg=vg
+this.Mb=Mb
+this.VS=VS
+this.hw=hw
+this.va=va
+this.yP=yP
+this.mM=mM
+this.qH=qH
+this.MO=MO
+this.oc=oc
+this.zz=zz
+this.TD=TD
+this.AP=AP
+this.Lk=Lk
+this.Fm=Fm
+this.KG=KG
+this.mQ=mQ
+this.nr=nr
+this.bN=bN
+this.GR=GR
+this.AP=AP
+this.Lk=Lk}kx.builtin$cls="kx"
+if(!"name" in kx)kx.name="kx"
+$desc=$collectedClasses.kx
+if($desc instanceof Array)$desc=$desc[1]
+kx.prototype=$desc
+kx.prototype.gDu=function(){return this.Du}
+kx.prototype.gDu.$reflectable=1
+kx.prototype.sDu=function(v){return this.Du=v}
+kx.prototype.sDu.$reflectable=1
+kx.prototype.gfF=function(){return this.fF}
+kx.prototype.gfF.$reflectable=1
+kx.prototype.sfF=function(v){return this.fF=v}
+kx.prototype.sfF.$reflectable=1
+kx.prototype.gvg=function(){return this.vg}
+kx.prototype.gvg.$reflectable=1
+kx.prototype.svg=function(v){return this.vg=v}
+kx.prototype.svg.$reflectable=1
+kx.prototype.gMb=function(){return this.Mb}
+kx.prototype.gMb.$reflectable=1
+kx.prototype.sMb=function(v){return this.Mb=v}
+kx.prototype.sMb.$reflectable=1
+kx.prototype.gVS=function(){return this.VS}
+kx.prototype.gVS.$reflectable=1
+kx.prototype.ghw=function(){return this.hw}
+kx.prototype.ghw.$reflectable=1
+kx.prototype.gva=function(){return this.va}
+kx.prototype.gva.$reflectable=1
+kx.prototype.gyP=function(){return this.yP}
+kx.prototype.gyP.$reflectable=1
+kx.prototype.goc=function(receiver){return this.oc}
+kx.prototype.soc=function(receiver,v){return this.oc=v}
+kx.prototype.gzz=function(){return this.zz}
+kx.prototype.szz=function(v){return this.zz=v}
+function w8F(){}w8F.builtin$cls="w8F"
+if(!"name" in w8F)w8F.name="w8F"
+$desc=$collectedClasses.w8F
+if($desc instanceof Array)$desc=$desc[1]
+w8F.prototype=$desc
+function fx(){}fx.builtin$cls="fx"
+if(!"name" in fx)fx.name="fx"
+$desc=$collectedClasses.fx
+if($desc instanceof Array)$desc=$desc[1]
+fx.prototype=$desc
+function af(bN,GR){this.bN=bN
+this.GR=GR}af.builtin$cls="af"
+if(!"name" in af)af.name="af"
+$desc=$collectedClasses.af
+if($desc instanceof Array)$desc=$desc[1]
+af.prototype=$desc
+af.prototype.gbN=function(){return this.bN}
+af.prototype.sbN=function(v){return this.bN=v}
+af.prototype.gGR=function(){return this.GR}
+af.prototype.sGR=function(v){return this.GR=v}
+function UZ(a,b,c){this.a=a
+this.b=b
+this.c=c}UZ.builtin$cls="UZ"
+if(!"name" in UZ)UZ.name="UZ"
+$desc=$collectedClasses.UZ
+if($desc instanceof Array)$desc=$desc[1]
+UZ.prototype=$desc
+function No(tl){this.tl=tl}No.builtin$cls="No"
+if(!"name" in No)No.name="No"
+$desc=$collectedClasses.No
+if($desc instanceof Array)$desc=$desc[1]
+No.prototype=$desc
+No.prototype.gtl=function(){return this.tl}
+No.prototype.gtl.$reflectable=1
+No.prototype.stl=function(v){return this.tl=v}
+No.prototype.stl.$reflectable=1
+function Ey(a){this.a=a}Ey.builtin$cls="Ey"
+if(!"name" in Ey)Ey.name="Ey"
+$desc=$collectedClasses.Ey
+if($desc instanceof Array)$desc=$desc[1]
+Ey.prototype=$desc
+function tm(){}tm.builtin$cls="tm"
+if(!"name" in tm)tm.name="tm"
+$desc=$collectedClasses.tm
+if($desc instanceof Array)$desc=$desc[1]
+tm.prototype=$desc
+function XK(Yu,tl,R9,wv,V2,me){this.Yu=Yu
+this.tl=tl
+this.R9=R9
+this.wv=wv
+this.V2=V2
+this.me=me}XK.builtin$cls="XK"
+if(!"name" in XK)XK.name="XK"
+$desc=$collectedClasses.XK
+if($desc instanceof Array)$desc=$desc[1]
+XK.prototype=$desc
+XK.prototype.gYu=function(){return this.Yu}
+function dT(){}dT.builtin$cls="dT"
+if(!"name" in dT)dT.name="dT"
+$desc=$collectedClasses.dT
+if($desc instanceof Array)$desc=$desc[1]
+dT.prototype=$desc
+function ho(ja,yb,tl,R9,wv,V2,me){this.ja=ja
+this.yb=yb
+this.tl=tl
+this.R9=R9
+this.wv=wv
+this.V2=V2
+this.me=me}ho.builtin$cls="ho"
+if(!"name" in ho)ho.name="ho"
+$desc=$collectedClasses.ho
+if($desc instanceof Array)$desc=$desc[1]
+ho.prototype=$desc
+function ob(mC,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.mC=mC
+this.AP=AP
+this.Lk=Lk
+this.AP=AP
+this.Lk=Lk
+this.dZ=dZ
+this.Sa=Sa
+this.Uk=Uk
+this.oq=oq
+this.Wz=Wz
+this.SO=SO
+this.B7=B7
+this.X0=X0}ob.builtin$cls="ob"
+if(!"name" in ob)ob.name="ob"
+$desc=$collectedClasses.ob
+if($desc instanceof Array)$desc=$desc[1]
+ob.prototype=$desc
+ob.prototype.gmC=function(receiver){return receiver.mC}
+ob.prototype.gmC.$reflectable=1
+ob.prototype.smC=function(receiver,v){return receiver.mC=v}
+ob.prototype.smC.$reflectable=1
+function V22(){}V22.builtin$cls="V22"
+if(!"name" in V22)V22.name="V22"
+$desc=$collectedClasses.V22
+if($desc instanceof Array)$desc=$desc[1]
+V22.prototype=$desc
+function xI(tY,Pe,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.tY=tY
this.Pe=Pe
this.AP=AP
-this.fn=fn
-this.pC=pC
+this.Lk=Lk
this.AP=AP
-this.fn=fn
-this.AP=AP
-this.fn=fn
+this.Lk=Lk
this.dZ=dZ
this.Sa=Sa
this.Uk=Uk
@@ -32222,19 +32379,16 @@
xI.prototype.gPe.$reflectable=1
xI.prototype.sPe=function(receiver,v){return receiver.Pe=v}
xI.prototype.sPe.$reflectable=1
-function Sq(){}Sq.builtin$cls="Sq"
-if(!"name" in Sq)Sq.name="Sq"
-$desc=$collectedClasses.Sq
+function Ds(){}Ds.builtin$cls="Ds"
+if(!"name" in Ds)Ds.name="Ds"
+$desc=$collectedClasses.Ds
if($desc instanceof Array)$desc=$desc[1]
-Sq.prototype=$desc
-function nm(Va,AP,fn,pC,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.Va=Va
+Ds.prototype=$desc
+function nm(Va,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.Va=Va
this.AP=AP
-this.fn=fn
-this.pC=pC
+this.Lk=Lk
this.AP=AP
-this.fn=fn
-this.AP=AP
-this.fn=fn
+this.Lk=Lk
this.dZ=dZ
this.Sa=Sa
this.Uk=Uk
@@ -32251,19 +32405,16 @@
nm.prototype.gVa.$reflectable=1
nm.prototype.sVa=function(receiver,v){return receiver.Va=v}
nm.prototype.sVa.$reflectable=1
-function q2(){}q2.builtin$cls="q2"
-if(!"name" in q2)q2.name="q2"
-$desc=$collectedClasses.q2
+function V23(){}V23.builtin$cls="V23"
+if(!"name" in V23)V23.name="V23"
+$desc=$collectedClasses.V23
if($desc instanceof Array)$desc=$desc[1]
-q2.prototype=$desc
-function uwf(Up,AP,fn,pC,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.Up=Up
+V23.prototype=$desc
+function Vu(B3,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.B3=B3
this.AP=AP
-this.fn=fn
-this.pC=pC
+this.Lk=Lk
this.AP=AP
-this.fn=fn
-this.AP=AP
-this.fn=fn
+this.Lk=Lk
this.dZ=dZ
this.Sa=Sa
this.Uk=Uk
@@ -32271,30 +32422,20 @@
this.Wz=Wz
this.SO=SO
this.B7=B7
-this.X0=X0}uwf.builtin$cls="uwf"
-if(!"name" in uwf)uwf.name="uwf"
-$desc=$collectedClasses.uwf
+this.X0=X0}Vu.builtin$cls="Vu"
+if(!"name" in Vu)Vu.name="Vu"
+$desc=$collectedClasses.Vu
if($desc instanceof Array)$desc=$desc[1]
-uwf.prototype=$desc
-uwf.prototype.gUp=function(receiver){return receiver.Up}
-uwf.prototype.gUp.$reflectable=1
-uwf.prototype.sUp=function(receiver,v){return receiver.Up=v}
-uwf.prototype.sUp.$reflectable=1
-function q3(){}q3.builtin$cls="q3"
-if(!"name" in q3)q3.name="q3"
-$desc=$collectedClasses.q3
+Vu.prototype=$desc
+Vu.prototype.gB3=function(receiver){return receiver.B3}
+Vu.prototype.gB3.$reflectable=1
+Vu.prototype.sB3=function(receiver,v){return receiver.B3=v}
+Vu.prototype.sB3.$reflectable=1
+function V24(){}V24.builtin$cls="V24"
+if(!"name" in V24)V24.name="V24"
+$desc=$collectedClasses.V24
if($desc instanceof Array)$desc=$desc[1]
-q3.prototype=$desc
-function At(a){this.a=a}At.builtin$cls="At"
-if(!"name" in At)At.name="At"
-$desc=$collectedClasses.At
-if($desc instanceof Array)$desc=$desc[1]
-At.prototype=$desc
-function Sb(){}Sb.builtin$cls="Sb"
-if(!"name" in Sb)Sb.name="Sb"
-$desc=$collectedClasses.Sb
-if($desc instanceof Array)$desc=$desc[1]
-Sb.prototype=$desc
+V24.prototype=$desc
function V2(N1,mD,Ck){this.N1=N1
this.mD=mD
this.Ck=Ck}V2.builtin$cls="V2"
@@ -32302,38 +32443,38 @@
$desc=$collectedClasses.V2
if($desc instanceof Array)$desc=$desc[1]
V2.prototype=$desc
-function BT(Y0,qP,ZY,xS,PB,eS,ay){this.Y0=Y0
+function D8(Y0,qP,ZY,xS,PB,eS,ay){this.Y0=Y0
this.qP=qP
this.ZY=ZY
this.xS=xS
this.PB=PB
this.eS=eS
-this.ay=ay}BT.builtin$cls="BT"
-if(!"name" in BT)BT.name="BT"
-$desc=$collectedClasses.BT
+this.ay=ay}D8.builtin$cls="D8"
+if(!"name" in D8)D8.name="D8"
+$desc=$collectedClasses.D8
if($desc instanceof Array)$desc=$desc[1]
-BT.prototype=$desc
-function jY(Ca,qP,ZY,xS,PB,eS,ay){this.Ca=Ca
+D8.prototype=$desc
+function zP(Ca,qP,ZY,xS,PB,eS,ay){this.Ca=Ca
this.qP=qP
this.ZY=ZY
this.xS=xS
this.PB=PB
this.eS=eS
-this.ay=ay}jY.builtin$cls="jY"
-if(!"name" in jY)jY.name="jY"
-$desc=$collectedClasses.jY
+this.ay=ay}zP.builtin$cls="zP"
+if(!"name" in zP)zP.name="zP"
+$desc=$collectedClasses.zP
if($desc instanceof Array)$desc=$desc[1]
-jY.prototype=$desc
+zP.prototype=$desc
function H2(){}H2.builtin$cls="H2"
if(!"name" in H2)H2.name="H2"
$desc=$collectedClasses.H2
if($desc instanceof Array)$desc=$desc[1]
H2.prototype=$desc
-function DO(){}DO.builtin$cls="DO"
-if(!"name" in DO)DO.name="DO"
-$desc=$collectedClasses.DO
+function lP(){}lP.builtin$cls="lP"
+if(!"name" in lP)lP.name="lP"
+$desc=$collectedClasses.lP
if($desc instanceof Array)$desc=$desc[1]
-DO.prototype=$desc
+lP.prototype=$desc
function fTP(a){this.a=a}fTP.builtin$cls="fTP"
if(!"name" in fTP)fTP.name="fTP"
$desc=$collectedClasses.fTP
@@ -32405,27 +32546,27 @@
$desc=$collectedClasses.ee
if($desc instanceof Array)$desc=$desc[1]
ee.prototype=$desc
-function XI(Cd,wd,N2,Te){this.Cd=Cd
+function K6(Cd,wd,N2,Te){this.Cd=Cd
this.wd=wd
this.N2=N2
-this.Te=Te}XI.builtin$cls="XI"
-if(!"name" in XI)XI.name="XI"
-$desc=$collectedClasses.XI
+this.Te=Te}K6.builtin$cls="K6"
+if(!"name" in K6)K6.name="K6"
+$desc=$collectedClasses.K6
if($desc instanceof Array)$desc=$desc[1]
-XI.prototype=$desc
-XI.prototype.gCd=function(receiver){return this.Cd}
-XI.prototype.gwd=function(receiver){return this.wd}
-XI.prototype.gN2=function(){return this.N2}
-XI.prototype.gTe=function(){return this.Te}
-function hs(N1,mD,Ck){this.N1=N1
+K6.prototype=$desc
+K6.prototype.gCd=function(receiver){return this.Cd}
+K6.prototype.gwd=function(receiver){return this.wd}
+K6.prototype.gN2=function(){return this.N2}
+K6.prototype.gTe=function(){return this.Te}
+function TU(N1,mD,Ck){this.N1=N1
this.mD=mD
-this.Ck=Ck}hs.builtin$cls="hs"
-if(!"name" in hs)hs.name="hs"
-$desc=$collectedClasses.hs
+this.Ck=Ck}TU.builtin$cls="TU"
+if(!"name" in TU)TU.name="TU"
+$desc=$collectedClasses.TU
if($desc instanceof Array)$desc=$desc[1]
-hs.prototype=$desc
-hs.prototype.gN1=function(){return this.N1}
-hs.prototype.sCk=function(v){return this.Ck=v}
+TU.prototype=$desc
+TU.prototype.gN1=function(){return this.N1}
+TU.prototype.sCk=function(v){return this.Ck=v}
function yp(KO,qW,k8){this.KO=KO
this.qW=qW
this.k8=k8}yp.builtin$cls="yp"
@@ -32433,6 +32574,7 @@
$desc=$collectedClasses.yp
if($desc instanceof Array)$desc=$desc[1]
yp.prototype=$desc
+yp.prototype.gk8=function(){return this.k8}
function ug(N1,mD,Ck){this.N1=N1
this.mD=mD
this.Ck=Ck}ug.builtin$cls="ug"
@@ -32440,10 +32582,10 @@
$desc=$collectedClasses.ug
if($desc instanceof Array)$desc=$desc[1]
ug.prototype=$desc
-function DT(lr,xT,kr,Dsl,QO,jH,mj,IT,dv,N1,mD,Ck){this.lr=lr
+function DT(lr,xT,kr,Mf,QO,jH,mj,IT,dv,N1,mD,Ck){this.lr=lr
this.xT=xT
this.kr=kr
-this.Dsl=Dsl
+this.Mf=Mf
this.QO=QO
this.jH=jH
this.mj=mj
@@ -32468,11 +32610,11 @@
$desc=$collectedClasses.OB
if($desc instanceof Array)$desc=$desc[1]
OB.prototype=$desc
-function lP(){}lP.builtin$cls="lP"
-if(!"name" in lP)lP.name="lP"
-$desc=$collectedClasses.lP
+function Uf(){}Uf.builtin$cls="Uf"
+if(!"name" in Uf)Uf.name="Uf"
+$desc=$collectedClasses.Uf
if($desc instanceof Array)$desc=$desc[1]
-lP.prototype=$desc
+Uf.prototype=$desc
function p8(ud,lr,eS,ay){this.ud=ud
this.lr=lr
this.eS=eS
@@ -32519,21 +32661,21 @@
$desc=$collectedClasses.TG
if($desc instanceof Array)$desc=$desc[1]
TG.prototype=$desc
-function ts(){}ts.builtin$cls="ts"
-if(!"name" in ts)ts.name="ts"
-$desc=$collectedClasses.ts
+function VU(){}VU.builtin$cls="VU"
+if(!"name" in VU)VU.name="VU"
+$desc=$collectedClasses.VU
if($desc instanceof Array)$desc=$desc[1]
-ts.prototype=$desc
+VU.prototype=$desc
function Kj(a){this.a=a}Kj.builtin$cls="Kj"
if(!"name" in Kj)Kj.name="Kj"
$desc=$collectedClasses.Kj
if($desc instanceof Array)$desc=$desc[1]
Kj.prototype=$desc
-function VU(b){this.b=b}VU.builtin$cls="VU"
-if(!"name" in VU)VU.name="VU"
-$desc=$collectedClasses.VU
+function R7(b){this.b=b}R7.builtin$cls="R7"
+if(!"name" in R7)R7.name="R7"
+$desc=$collectedClasses.R7
if($desc instanceof Array)$desc=$desc[1]
-VU.prototype=$desc
+R7.prototype=$desc
function Ya(yT,kU){this.yT=yT
this.kU=kU}Ya.builtin$cls="Ya"
if(!"name" in Ya)Ya.name="Ya"
@@ -32566,11 +32708,11 @@
$desc=$collectedClasses.wl
if($desc instanceof Array)$desc=$desc[1]
wl.prototype=$desc
-function T4(){}T4.builtin$cls="T4"
-if(!"name" in T4)T4.name="T4"
-$desc=$collectedClasses.T4
+function ve(){}ve.builtin$cls="ve"
+if(!"name" in ve)ve.name="ve"
+$desc=$collectedClasses.ve
if($desc instanceof Array)$desc=$desc[1]
-T4.prototype=$desc
+ve.prototype=$desc
function TR(qP){this.qP=qP}TR.builtin$cls="TR"
if(!"name" in TR)TR.name="TR"
$desc=$collectedClasses.TR
@@ -32582,30 +32724,4 @@
$desc=$collectedClasses.VD
if($desc instanceof Array)$desc=$desc[1]
VD.prototype=$desc
-function Zt(Jh,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.Jh=Jh
-this.AP=AP
-this.fn=fn
-this.AP=AP
-this.fn=fn
-this.dZ=dZ
-this.Sa=Sa
-this.Uk=Uk
-this.oq=oq
-this.Wz=Wz
-this.SO=SO
-this.B7=B7
-this.X0=X0}Zt.builtin$cls="Zt"
-if(!"name" in Zt)Zt.name="Zt"
-$desc=$collectedClasses.Zt
-if($desc instanceof Array)$desc=$desc[1]
-Zt.prototype=$desc
-Zt.prototype.gJh=function(receiver){return receiver.Jh}
-Zt.prototype.gJh.$reflectable=1
-Zt.prototype.sJh=function(receiver,v){return receiver.Jh=v}
-Zt.prototype.sJh.$reflectable=1
-function Dsd(){}Dsd.builtin$cls="Dsd"
-if(!"name" in Dsd)Dsd.name="Dsd"
-$desc=$collectedClasses.Dsd
-if($desc instanceof Array)$desc=$desc[1]
-Dsd.prototype=$desc
-return[qE,pa,Gh,A0,na,Mr,zx,P2,Xk,W2,it,Az,QP,QW,jr,Ny,Zv,Yr,BR,di,d7,yJ,He,vz,vHT,n0,Em,pt,rV,K4,QF,Aj,cm,Nh,wj,cv,Fs,Ty,ea,D0,as,hH,Aa,u5,Tq,W4,jP,Cz,tA,wa,Uq,QH,Rt,X2,zU,rk,tX,Sg,pA,Mi,Gt,In,wP,eP,mF,Qj,cS,YI,El,zm,Y7,aB,fJ,BK,Rv,HO,Kk,ZY,Hy,EeC,Qb,Vu,xe,Hw,bn,Imr,Ve,CX,H9,FI,oU,ih,KV,yk,KY,G7,l9,Ql,Xp,bP,FH,SN,HD,ni,jg,qj,nC,KR,ew,fs,LY,BL,fe,By,j2,X4,lp,kd,I0,CY,Wt,uaa,Hd,Ul,G5,bk,Lx,Er,qk,GI,Tb,tV,KP,yY,kJ,AE,xV,Dn,y6,RH,pU,OJ,Qa,dp,vw,aG,J6,u9,Bn,hq,UL,tZ,kc,AK,ty,Nf,F2,nL,QV,q0,Q7,hF,OF,Dh,Ue,mU,NE,lC,y5,jQ,mT,ui,mk,DQ,Sm,LM,es,eG,bd,pf,NV,W1,mCz,wf,n5,bb,Ic,lc,Xu,qM,tk,me,oB,nh,EI,MI,Ub,kK,eW,um,Fu,QN,N9,BA,d0,zp,br,PIw,vd,uzr,Yd,kN,lZ,Gr,XE,mO,lo,NJ,j24,vt,rQ,Lu,LR,d5,hy,mq,Ke,CG,Xe,y0,Rk4,Eo,tL,pyk,ZD,rD,wD,Wv,yz,Fi,Ja,mj,cB,uY,yR,GK,xJ,Nn,Et,NC,nb,Zn,xt,VJ,P0,xlX,SQ,qD,TM,WZ,pF,df,Hg,L3,zz,dE,Eb,dT,N2,eE,V6,Lt,Gv,kn,Jh,QI,FP,is,Q,nM,iY,Jt,P,im,GW,vT,qa,BQ,O,PK,JO,f0,aX,cC,RA,IY,JH,jl,Iy,Z6,Ua,ns,yo,NA,NO,II,fP,X1,HU,oo,OW,Dd,AP,yH,FA,Av,ku,Zd,xQ,F0,oH,LPe,bw,WT,jJ,XR,LI,A2,IW,F3,FD,Cj,u8,Zr,W0,az,vV,Am,XO,dr,TL,KX,uZ,OQ,Tp,Bp,v,Ll,dN,GT,Pe,Eq,lb,tD,hJ,tu,fw,Zz,cu,Lm,dC,wN,VX,VR,EK,KW,Pb,tQ,mL,Kf,qu,bv,eS,IQ,TI,at,wu,Vc,KQ,dZ,Qe,GH,Q4,WAE,N8,Vi,kx,fx,CM,xn,vu,c2,rj,af,SI,Y2,XN,No,PG,YW,BO,Yu,y2,Hq,Pl,XK,ho,G6,Ur,j3,i0,Tg,Ps,KU,RI,Ye,CN,HT,qbd,E0,Ds,lw,LP,wJ,aL,nH,a7,i1,xy,MH,A8,U5,SO,kV,rR,H6,wB,U1,SJ,SU7,Qr,w2Y,iK,GD,Sn,nI,TY,Lj,mb,am,cw,EE,Uz,uh,IB,oP,YX,BI,Un,M2,iu,mg,bl,tB,Oo,Tc,Ax,Wf,vk,Ei,U7,t0,Ld,Sz,Zk,fu,wt,ng,TN,Ar,rh,jB,ye,O1,Oh,Xh,Ca,Ik,JI,LO,dz,tK,OR,Bg,DL,b8,j7,ff,Ia,Zf,vs,da,xw,dm,rH,ZL,rq,RW,RT,jZ,FZ,OM,qh,tG,jv,LB,zn,lz,Rl,Jb,M4,Jp,h7,pr,eN,PI,uO,j4,i9,VV,Dy,lU,OC,UH,Z5,ii,ib,MO,O9,yU,nP,KA,Vo,qB,ez,ti,LV,DS,JF,ht,CR,Qk,v1y,uR,Q0,YR,fB,nO,t3,dq,lO,aY,zG,e4,JB,Id,WH,TF,K5,Cg,Hs,dv,pV,uo,pK,eM,Ha,nU,R8,k6,oi,ce,DJ,PL,Fq,jG,fG,EQ,YB,a1,ou,S9,ey,xd,v6,db,i5,N6,Rr,YO,oz,b6,ef,zQ,Yp,lN,mW,ar,lD,ZQ,Sw,o0,qv,jp,vX,Ba,An,bF,LD,S6B,OG,uM,DN,ZM,HW,JC,f1,Uk,wI,Zi,Ud,K8,by,pD,Cf,Sh,tF,z0,E3,Rw,HB,CL,p4,a2,Rz,iP,MF,Rq,Hn,Zl,B5,a6,P7,DW,Ge,LK,AT,bJ,Np,mp,ub,ds,lj,UV,VS,t7,HG,aE,eV,kM,EH,cX,AC,Z0,L9,a,Od,MN,WU,Rn,wv,uq,iD,hb,XX,Kd,yZ,Gs,pm,Tw,wm,FB,Lk,XZ,Mx,C9,kZ,JT,d9,rI,QZ,VG,wz,B1,M5,Jn,DM,RAp,Gb,Kx,iO,bU,Yg,e7,nNL,ecX,kI,yoo,w1p,tJ,Zc,i7,nF,FK,Si,vf,Iw,Fc,hD,I4,e0,RO,eu,ie,Ea,pu,i2,b0,Ov,qO,RX,hP,Gm,Of,Qg,W9,vZ,dW,Dk,O7,IU,E4,Gn,r7,Tz,Wk,DV,Hp,Nz,Jd,QS,ej,NL,vr,D4,X9,Ms,ac,RS,RY,Ys,Lw,Gj,U4,B8q,Nx,LZ,Dg,Ob,Ip,Pg,Nb,nA,Fv,pv,E9,Vfx,m8,Gk,Urj,e5,Ni,AX,yb,oub,QR,Yx,NM,c4r,nx,jm,xj,VB,aI,rG,yh,wO,Tm,q1,CA,YL,KC,xL,As,GE,rl,uQ,D7,hT,GS,pR,Js,fM,hx,Squ,PO,Vf,u7,fW,Ey,qm,vO,E7,KUl,SV,Mf,Kz,vj,tuj,LU,T2,mHk,Jq,Yn,TJ,dG,qV,HV,em,Lb,PF,Vct,fA,Qz,jA,Jo,c5,F1,aQ,D13,Ya5,WZq,Ww,pva,tz,cda,fl,qFb,oM,rna,wM,Vba,lI,waa,uL,Pi,z2,qI,J3,E5,o5,b5,zI,Zb,id,iV,DA,nd,vly,d3,lS,xh,wn,Ay,Bj,HA,qC,zT,Lo,WR,qL,Px,C4,YJ,km,Zj,XP,q6,CK,LJ,ZG,Oc,MX,w10,r3y,yL,zs,WC,Xi,TV,Mq,Oa,n1,xf,L6,Rs,uJ,hm,Ji,Bf,ir,jpR,GN,bS,HJ,S0,V3,Bl,Fn,e3,pM,jh,W6,Lf,fT,pp,nl,ik,mf,LfS,HK,o8,ex,e9,Xy,G0,mY,GX,mB,XF,bX,Uf,Ra,wJY,zOQ,W6o,MdQ,YJG,DOe,lPa,Ufa,Raa,w0,w4,w5,w7,w9,c4,z6,Ay0,Ed,G1,Os,B8,Wh,x5,ev,ID,qR,ek,Qv,Xm,mv,mG,uA,vl,Li,WK,iT,ja,zw,fa,WW,vQ,a9,VA,J1,fk,wL,B0,tc,hw,EZ,no,kB,ae,XC,w6,jK,uk,K9,zX,x9,Jy,xs,FX,Ae,Bt,vR,Pn,hc,hA,fr,cfS,JG,V0,knI,T5,fI,oaa,qq,FC,xI,Sq,nm,q2,uwf,q3,At,Sb,V2,BT,jY,H2,DO,fTP,ppY,NP,jt,r0,jz,SA,hB,nv,ee,XI,hs,yp,ug,DT,OB,lP,p8,NW,HS,TG,ts,Kj,VU,Ya,XT,ic,wl,T4,TR,VD,Zt,Dsd]}
\ No newline at end of file
+return[qE,zw,Ps,A0,Sb,vp,zx,P2,Xk,W2,zJ,Az,Fy,QW,ca,Ny,Zv,Yr,BR,wT,d7,yJ,He,vz,vHT,hh,Em,NWk,rV,K4,QF,Aj,cm,Nh,wj,cv,Fs,Ty,ea,D0,as,hH,QU,u5,h4,W4,jP,Cz,tA,xn,Uq,QH,Rt,X2,zU,wa,tX,Sg,pA,Mi,Gt,In,wP,eP,mF,Qj,cS,YI,El,zm,Y7,aB,W7,BK,Rv,HO,Kk,ZY,cx,EeC,Qb,PG,xe,Hw,bn,ab,Ve,Wp,H9,o4,Q0,ih,KV,yk,KY,G7,l9,Ql,Xp,bP,mX,SN,HD,ni,jg,GT,nC,KR,ew,fs,LY,BL,fe,By,j2,X4,lp,kd,I0,QR,Sc,uaa,yg,mG,Ul,uj,G5,bk,Lx,fh,qk,GI,Tb,tV,BT,yY,kJ,AE,xV,FH,y6,RH,pU,OJ,Mf,dp,vw,aG,fA,u9,Bn,Eb,UL,tZ,kc,AK,ty,Nf,F2,VB,Cy,q0,c5,LO,Q7,hF,OF,Dh,Ue,mU,NE,Ak,y5,jQ,mT,ui,vO,DQ,Sm,LM,es,eG,lv,pf,NV,W1,mCz,kK,n5,bb,NdT,lc,Xu,qM,Ob,me,oB,NY,EI,MI,rg,um,eW,kL,Fu,QN,N9,BA,d0,zp,br,PIw,vd,Jq,Yd,kN,AW,Gr,XE,GH,lo,NJ,j24,vt,rQ,Lu,LR,d5,hy,mq,Ke,CG,Xe,y0,Rk4,Eo,Dn,pyk,ZD,Rlr,wD,Wv,yz,Fi,Ja,mj,hW,uY,yR,AX,xJ,Nn,Et,NC,nb,Zn,xt,tG,P0,kh,SQ,qD,TM,WZ,pF,df,Hg,L3,zz,dE,IJ,aH,N2,eE,V6,Lt,Gv,kn,Jh,QI,FP,is,Q,nM,iY,Jt,P,im,GW,vT,VP,BQ,O,PK,JO,f0,aX,oU,cC,RA,IY,JH,jl,Vg,Iy,Z6,Ua,ns,yo,NA,NO,II,fP,X1,HU,Nt,OW,Tf,AP,yH,FA,Av,ku,Zd,xQ,F0,oH,LPe,LD,jJ,XR,LI,A2,IW,F3,FD,Nv,Cj,u8,Zr,W0,az,vV,Am,XO,dr,TL,KX,uZ,OQ,Tp,Bp,v,Ll,D2,my,Pe,Eq,lb,tD,hJ,tu,fw,Zz,cu,Lm,dC,wN,VX,VR,EK,KW,Pb,tQ,mL,Kf,qu,dZ,Qe,Y2,XN,G6,Vf,Tg,Jc,pv,CN,Be,Vfx,E0,Dsd,lw,LP,wJ,aL,nH,a7,i1,xy,MH,A8,U5,SO,kV,rR,SJ,SU7,Tv,w2Y,iK,GD,Sn,nI,jU,Lj,mb,cb,cw,EE,Uz,uh,IB,oP,YX,BI,Un,M2,iu,mg,bl,tB,Oo,Tc,Ax,Wf,vk,Ei,Ci,t0,Ld,Sz,Zk,fu,wt,ng,TN,Ar,rh,jB,ye,O1,Oh,Xh,Ca,Ik,JI,WVu,dz,tK,OR,Bg,DL,b8,Ia,Zf,vs,da,pV,U7,rH,cX,ZL,rq,RW,RT,jZ,FZ,OM,qh,YJ,jv,LB,DO,lz,Rl,Jb,M4,Jp,h7,pr,eN,B5,PI,j4,i9,VV,Dy,lU,OC,UH,Z5,j5,ii,MO,O9,yU,nP,KA,Vo,qB,ez,fIm,LV,DS,JF,ht,CR,Qk,v1y,uR,GU,YR,fB,nO,t3,tU,aY,zG,e4,dl,Id,WH,TF,K5,Cg,Hs,dv,ph,uo,pK,eM,Ha,W5,R8,k6,oi,ce,DJ,PL,Fq,jG,fG,EQ,YB,a1,ou,S9,db,i5,N6,UB,YO,oz,b6,ef,zQ,Yp,lN,mW,ar,lD,ZQ,Sw,o0,qv,jp,GZ,Ba,An,bF,BW,S6B,OG,uM,DN,ZM,HW,JC,f1,Uk,zF,Zi,Ud,K8,by,pD,Cf,Sh,tF,z0,E3,Rw,HB,CL,p4,a2,Tx,iP,MF,Rq,a6,P7,DW,Ge,LK,AT,bJ,yd,mp,ub,ds,lj,UV,kF,VS,t7,HG,aE,eV,kM,EH,QV,AC,Z0,L9,a,Od,MN,WU,Rn,wv,uq,iD,hP,Uo,hb,Kd,yZ,Gs,pm,Tw,wm,FB,Lk,XZ,Mx,C9,kZ,JT,d9,rI,QZ,VG,wz,B1,M5,Jn,DM,RAp,Gb,Kx,iO,bU,Yg,e7,nNL,ma,Ou,yoo,ecX,zLC,w1p,dxW,kEI,tJ,Zc,i7,nF,FK,Si,vf,Iw,Fc,hD,I4,e0,RO,eu,ie,Ea,pu,i2,b0,Ov,qO,RX,bO,Gm,Of,Qg,W9,vZ,dW,Dk,O7,hq,E4,Gn,r7,Tz,Wk,DV,Hp,Nz,Jd,QS,ej,NL,vr,D4,X9,Ms,Fw,RS,RY,Ys,Lw,Gj,U4,B8q,Nx,LZ,Dg,Ui,Ip,Pg,ObS,nA,E9,tuj,rm,Vct,YW,m8,Gk,D13,qW,mk,WZq,jY,pva,nx,jm,ke,xj,aI,rG,yh,wO,Tm,ib,CA,YL,KC,xL,As,GE,rl,uQ,D7,hT,GS,pR,Js,hx,cda,u7,waa,qm,TI,E7,V4,SV,Kz,V9,vj,V10,LU,KL,V11,TJ,dG,qV,HV,em,Lb,T4,tzK,jA,PO,oBi,F1,aQ,V12,Qa,V13,Ww,V14,tz,V15,fl,V16,Zt,V17,iL,V18,lI,V19,uL,Pi,z2,qI,J3,E5,o5,b5,zI,Zb,id,iV,DA,nd,vly,d3,lS,xh,wn,er,Bj,HA,qC,zT,Lo,WR,qL,Px,C4,Md,km,Zj,XP,q6,CK,LJ,ZG,Oc,MX,w12,r3y,yL,zs,WC,Xi,TV,Mq,Oa,n1,xf,L6,Rs,uJ,hm,Ji,Bf,ir,Sa,GN,bS,HJ,S0,V3,rD,Fn,e3,pM,jh,W6,Lf,fT,pp,nl,ik,mf,LfS,HK,o8,ex,e9,Xy,uK,mY,GX,mB,XF,bX,Ra,wJY,zOQ,W6o,MdQ,YJG,DOe,lPa,Ufa,Raa,w0,w4,w5,w7,w10,w11,c4,z6,Ay,Ed,G1,Os,B8,Wh,x5,ev,ID,qR,ek,Qv,Xm,mv,iv,uA,vl,Li,WK,iT,ja,ey,fa,WW,vQ,a9,VA,J1,fk,wL,B0,tc,hw,EZ,no,kB,ae,XC,w6,jK,uk,K9,zX,x9,Jy,xs,FX,Ae,Bt,vR,Pn,hc,hA,fr,d2,JG,V20,knI,T5,fI,V21,qq,G8,fJ,q1,jx,yT,Cn,du,xc,bv,D3,KQ,Qq,Qd,i6,r2,JB,qj,BH,SI,pt,wVq,c2,rj,dZL,N8,Q4,WAE,Vi,kx,w8F,fx,af,UZ,No,Ey,tm,XK,dT,ho,ob,V22,xI,Ds,nm,V23,Vu,V24,V2,D8,zP,H2,lP,fTP,ppY,NP,jt,r0,jz,SA,hB,nv,ee,K6,TU,yp,ug,DT,OB,Uf,p8,NW,HS,TG,VU,Kj,R7,Ya,XT,ic,wl,ve,TR,VD]}
\ No newline at end of file
diff --git a/runtime/bin/vmservice/client/deployed/web/index_devtools.html b/runtime/bin/vmservice/client/deployed/web/index_devtools.html
index 45ad494..7edc4c9 100644
--- a/runtime/bin/vmservice/client/deployed/web/index_devtools.html
+++ b/runtime/bin/vmservice/client/deployed/web/index_devtools.html
@@ -13,9 +13,6 @@
<body><polymer-element name="observatory-element">
</polymer-element>
-<polymer-element name="isolate-element" extends="observatory-element">
-
-</polymer-element>
<polymer-element name="nav-bar" extends="observatory-element">
<template>
<style>
@@ -154,10 +151,10 @@
</style>
<li>
<template if="{{ active }}">
- <button class="active" on-click="{{ buttonClick }}">Refresh</button>
+ <button class="active" on-click="{{ buttonClick }}">{{ label }}</button>
</template>
<template if="{{ !active }}">
- <button class="idle" on-click="{{ buttonClick }}">Refresh</button>
+ <button class="idle" on-click="{{ buttonClick }}">{{ label }}</button>
</template>
</li>
</template>
@@ -171,40 +168,40 @@
</template>
</polymer-element>
-<polymer-element name="isolate-nav-menu" extends="isolate-element">
+<polymer-element name="isolate-nav-menu" extends="observatory-element">
<template>
<nav-menu link="#" anchor="{{ isolate.name }}" last="{{ last }}">
- <nav-menu-item link="{{ isolate.hashLink('stacktrace') }}" anchor="stack trace"></nav-menu-item>
- <nav-menu-item link="{{ isolate.hashLink('profile') }}" anchor="cpu profile"></nav-menu-item>
- <nav-menu-item link="{{ isolate.hashLink('allocationprofile') }}" anchor="heap profile"></nav-menu-item>
- <nav-menu-item link="{{ isolate.hashLink('debug/breakpoints') }}" anchor="breakpoints"></nav-menu-item>
+ <nav-menu-item link="{{ isolate.relativeHashLink('stacktrace') }}" anchor="stack trace"></nav-menu-item>
+ <nav-menu-item link="{{ isolate.relativeHashLink('profile') }}" anchor="cpu profile"></nav-menu-item>
+ <nav-menu-item link="{{ isolate.relativeHashLink('allocationprofile') }}" anchor="heap profile"></nav-menu-item>
+ <nav-menu-item link="{{ isolate.relativeHashLink('debug/breakpoints') }}" anchor="breakpoints"></nav-menu-item>
<content></content>
</nav-menu>
</template>
</polymer-element>
-<polymer-element name="library-nav-menu" extends="isolate-element">
+<polymer-element name="library-nav-menu" extends="observatory-element">
<template>
- <nav-menu link="{{ isolate.hashLink(library['id']) }}" anchor="{{ library['name'] }}" last="{{ last }}">
+ <nav-menu link="{{ library.hashLink }}" anchor="{{ library.name }}" last="{{ last }}">
<content></content>
</nav-menu>
</template>
</polymer-element>
-<polymer-element name="class-nav-menu" extends="isolate-element">
+<polymer-element name="class-nav-menu" extends="observatory-element">
<template>
- <nav-menu link="{{ isolate.hashLink(cls['id']) }}" anchor="{{ cls['user_name'] }}" last="{{ last }}">
+ <nav-menu link="{{ cls.hashLink }}" anchor="{{ cls.name }}" last="{{ last }}">
<content></content>
</nav-menu>
</template>
</polymer-element>
-<polymer-element name="breakpoint-list" extends="isolate-element">
+<polymer-element name="breakpoint-list" extends="observatory-element">
<template>
<nav-bar>
<top-nav-menu></top-nav-menu>
- <isolate-nav-menu isolate="{{ isolate }}"></isolate-nav-menu>
+ <isolate-nav-menu isolate="{{ msg.isolate }}"></isolate-nav-menu>
<nav-menu link="." anchor="breakpoints" last="{{ true }}"></nav-menu>
<nav-refresh callback="{{ refresh }}"></nav-refresh>
</nav-bar>
@@ -226,7 +223,7 @@
</template>
</polymer-element>
-<polymer-element name="service-ref" extends="isolate-element">
+<polymer-element name="service-ref" extends="observatory-element">
</polymer-element><polymer-element name="class-ref" extends="service-ref">
<template>
@@ -239,9 +236,9 @@
<div class="row">
<div class="col-md-8 col-md-offset-2">
<div class="panel panel-danger">
- <div class="panel-heading">{{ error['errorType'] }}</div>
+ <div class="panel-heading">{{ error.kind }}</div>
<div class="panel-body">
- <p>{{ error['text'] }}</p>
+ <p>{{ error.message }}</p>
</div>
</div>
</div>
@@ -257,7 +254,7 @@
var
</template>
<template if="{{ (ref['declared_type']['name'] != 'dynamic') }}">
- <class-ref app="{{ app }}" ref="{{ ref['declared_type'] }}"></class-ref>
+ <class-ref ref="{{ ref['declared_type'] }}"></class-ref>
</template>
<a title="{{ hoverText }}" href="{{ url }}">{{ name }}</a>
</div>
@@ -311,52 +308,56 @@
<style>
.member {
vertical-align: top;
- padding: 0 0 0 1em;
+ padding: 1px 0 1px 1em;
}
</style>
<div>
- <template if="{{ isUnexpectedRef(ref['type']) }}">
- unexpected reference type <{{ ref['type'] }}>
+ <template if="{{ isUnexpected(ref.serviceType) }}">
+ unexpected reference type <{{ ref.serviceType }}>
</template>
- <template if="{{ isNullRef(ref['type']) }}">
- <div title="{{ hoverText }}">{{ name }}</div>
+ <template if="{{ isError(ref.serviceType) }}">
+ <pre>{{ ref.message }}</pre>
</template>
- <template if="{{ (isStringRef(ref['type']) ||
- isBoolRef(ref['type']) ||
- isIntRef(ref['type'])) }}">
- <a href="{{ url }}">{{ name }}</a>
+ <template if="{{ isNull(ref.serviceType) }}">
+ <div title="{{ hoverText }}">{{ ref['preview'] }}</div>
</template>
- <template if="{{ isClosureRef(ref['type']) }}">
+ <template if="{{ (isString(ref.serviceType) ||
+ isBool(ref.serviceType) ||
+ isInt(ref.serviceType)) }}">
+ <a href="{{ url }}">{{ ref['preview'] }}</a>
+ </template>
+
+ <template if="{{ isClosure(ref.serviceType) }}">
<a href="{{ url }}">
{{ ref['closureFunc']['user_name'] }}
</a>
</template>
- <template if="{{ isInstanceRef(ref['type']) }}">
+ <template if="{{ isInstance(ref.serviceType) }}">
<a href="{{ url }}"><em>{{ ref['class']['user_name'] }}</em></a>
<curly-block callback="{{ expander() }}">
<table>
<tbody><tr template="" repeat="{{ field in ref['fields'] }}">
<td class="member">{{ field['decl']['user_name'] }}</td>
<td class="member">
- <instance-ref isolate="{{ isolate }}" ref="{{ field['value'] }}"></instance-ref>
+ <instance-ref ref="{{ field['value'] }}"></instance-ref>
</td>
</tr>
</tbody></table>
</curly-block>
</template>
- <template if="{{ isListRef(ref['type']) }}">
+ <template if="{{ isList(ref.serviceType) }}">
<a href="{{ url }}"><em>{{ ref['class']['user_name'] }}</em> ({{ ref['length']}})</a>
<curly-block callback="{{ expander() }}">
<table>
<tbody><tr template="" repeat="{{ element in ref['elements'] }}">
<td class="member">[{{ element['index']}}]</td>
<td class="member">
- <instance-ref isolate="{{ isolate }}" ref="{{ element['value'] }}"></instance-ref>
+ <instance-ref ref="{{ element['value'] }}"></instance-ref>
</td>
</tr>
</tbody></table>
@@ -372,13 +373,13 @@
<a href="{{ url }}">{{ name }}</a>
</template>
-</polymer-element><polymer-element name="class-view" extends="isolate-element">
+</polymer-element><polymer-element name="class-view" extends="observatory-element">
<template>
<nav-bar>
<top-nav-menu></top-nav-menu>
- <isolate-nav-menu isolate="{{ isolate }}"></isolate-nav-menu>
- <library-nav-menu isolate="{{ isolate }}" library="{{ cls['library'] }}"></library-nav-menu>
- <class-nav-menu isolate="{{ isolate }}" cls="{{ cls }}" last="{{ true }}"></class-nav-menu>
+ <isolate-nav-menu isolate="{{ cls.isolate }}"></isolate-nav-menu>
+ <library-nav-menu library="{{ cls['library'] }}"></library-nav-menu>
+ <class-nav-menu cls="{{ cls }}" last="{{ true }}"></class-nav-menu>
<nav-refresh callback="{{ refresh }}"></nav-refresh>
</nav-bar>
@@ -386,12 +387,13 @@
<div class="col-md-8 col-md-offset-2">
<div class="panel panel-warning">
<div class="panel-heading">
- class <strong>{{ cls['user_name'] }}</strong>
+ class <strong>{{ cls.name }}</strong>
<template if="{{ cls['super']['type'] != 'Null' }}">
extends
- <class-ref app="{{ app }}" ref="{{ cls['super'] }}"></class-ref>
+ <class-ref ref="{{ cls['super'] }}"></class-ref>
</template>
- <library-ref app="{{ app }}" ref="{{ cls['library'] }}"></library-ref>
+ <p></p>
+ <library-ref ref="{{ cls['library'] }}"></library-ref>
</div>
<div class="panel-body">
<table class="table table-hover">
@@ -421,8 +423,8 @@
<table class="table table-hover">
<tbody>
<tr template="" repeat="{{ field in cls['fields'] }}">
- <td><field-ref app="{{ app }}" ref="{{ field }}"></field-ref></td>
- <td><instance-ref app="{{ app }}" ref="{{ field['value'] }}"></instance-ref></td>
+ <td><field-ref ref="{{ field }}"></field-ref></td>
+ <td><instance-ref ref="{{ field['value'] }}"></instance-ref></td>
</tr>
</tbody>
</table>
@@ -436,8 +438,8 @@
</thead>
<tbody>
<tr template="" repeat="{{ function in cls['functions'] }}">
- <td><function-ref app="{{ app }}" ref="{{ function }}"></function-ref></td>
- <td><function-ref app="{{ app }}" ref="{{ function }}" internal=""></function-ref></td>
+ <td><function-ref ref="{{ function }}"></function-ref></td>
+ <td><function-ref ref="{{ function }}" internal=""></function-ref></td>
</tr>
</tbody>
</table>
@@ -457,46 +459,77 @@
<a href="{{ url }}">{{ name }}</a>
</template>
-</polymer-element><polymer-element name="disassembly-entry" extends="observatory-element">
- <template>
- <div class="row">
- <div class="col-md-2">{{ instruction.formattedTicks() }}</div>
- <div class="col-md-2">{{ instruction.formattedAddress() }}</div>
- <div class="col-md-4">
- <code>{{ instruction.machine }} {{ instruction.human }}</code>
- </div>
- </div>
- </template>
-
-</polymer-element><polymer-element name="code-view" extends="isolate-element">
+</polymer-element><polymer-element name="code-view" extends="observatory-element">
<template>
<nav-bar>
<top-nav-menu></top-nav-menu>
- <isolate-nav-menu isolate="{{ isolate }}"></isolate-nav-menu>
- <nav-menu link="." anchor="{{ code.functionRef['user_name'] }}" last="{{ true }}"></nav-menu>
- <!-- TODO(turnidge): Implement code refresh -->
+ <isolate-nav-menu isolate="{{ code.isolate }}"></isolate-nav-menu>
+ <nav-menu link="." anchor="{{ code.name }}" last="{{ true }}"></nav-menu>
+ <nav-refresh callback="{{ refresh }}"></nav-refresh>
</nav-bar>
-
- <div class="row">
- <div class="col-md-8 col-md-offset-2">
- <div class="{{ cssPanelClass }}">
- <div class="panel-heading">
- <function-ref isolate="{{ isolate }}" ref="{{ code.functionRef }}"></function-ref>
- </div>
- <div class="panel-body">
- <div class="row">
- <div class="col-md-2"><strong>Samples</strong></div>
- <div class="col-md-2"><strong>Address</strong></div>
- <div><strong>Instruction</strong></div>
- </div>
- <template repeat="{{ instruction in code.instructions }}">
- <disassembly-entry instruction="{{ instruction }}">
- </disassembly-entry>
- </template>
- </div>
- </div>
+ <style>
+ .content {
+ padding-left: 10%;
+ font: 400 14px 'Montserrat', sans-serif;
+ }
+ h1 {
+ font: 400 18px 'Montserrat', sans-serif;
+ }
+ .member, .memberHeader {
+ vertical-align: top;
+ padding: 3px 0 3px 1em;
+ font: 400 14px 'Montserrat', sans-serif;
+ }
+ .monospace {
+ font-family: consolas, courier, monospace;
+ font-size: 1em;
+ line-height: 1.2em;
+ white-space: nowrap;
+ }
+ </style>
+ <div class="content">
+ <h1>Code for {{ code.name }}</h1>
+ <table>
+ <tbody><tr>
+ <td class="memberHeader">kind</td>
+ <td class="member">{{code.kind}}</td>
+ </tr>
+ <tr>
+ <td class="memberHeader">function</td>
+ <td class="member">
+ <function-ref ref="{{code.function}}">
+ </function-ref>
+ </td>
+ </tr>
+ <tr>
+ <td class="memberHeader">Inclusive</td>
+ <td class="member">{{ code.formattedInclusiveTicks }}</td>
+ </tr>
+ <tr>
+ <td class="memberHeader">Exclusive</td>
+ <td class="member">{{ code.formattedExclusiveTicks }}</td>
+ </tr>
+ </tbody></table>
</div>
- </div>
+ <hr>
+ <div class="content">
+ <template if="{{ code.hasDisassembly }}">
+ <div class="row">
+ <div class="col-md-2 memberHeader">Inclusive</div>
+ <div class="col-md-2 memberHeader">Exclusive</div>
+ <div class="col-md-2 memberHeader">Address</div>
+ <div class="col-md-6 memberHeader">Disassembly</div>
+ </div>
+ </template>
+ <template repeat="{{ instruction in code.instructions }}">
+ <div class="row">
+ <div class="col-md-2 monospace">{{ instruction.formattedInclusive(code) }}</div>
+ <div class="col-md-2 monospace">{{ instruction.formattedExclusive(code) }}</div>
+ <div class="col-md-2 monospace">{{ instruction.formattedAddress() }}</div>
+ <div class="col-md-6 monospace">{{ instruction.human }}</div>
+ </div>
+ </template>
+ </div>
</template>
</polymer-element>
@@ -512,17 +545,98 @@
</div>
</template>
-</polymer-element><polymer-element name="field-view" extends="isolate-element">
+</polymer-element><polymer-element name="eval-box" extends="observatory-element">
+ <template>
+ <style>
+ .textbox {
+ width: 80ex;
+ font: 400 16px 'Montserrat', sans-serif;
+ }
+ .bigtextbox {
+ font: 400 16px 'Montserrat', sans-serif;
+ }
+ .button {
+ font: 400 16px 'Montserrat', sans-serif;
+ }
+ .radios {
+ display: inline;
+ }
+ .radios label{
+ padding-left: 15px;
+ }
+ .historyExpr, .historyValue {
+ vertical-align: text-top;
+ font: 400 14px 'Montserrat', sans-serif;
+ }
+ .historyExpr a {
+ display: block;
+ color: black;
+ text-decoration: none;
+ padding: 6px 6px;
+ cursor: pointer;
+ white-space: pre-line;
+ }
+ .historyExpr a:hover {
+ background-color: #e1f5fe
+ }
+ .historyValue {
+ display: block;
+ padding: 6px 6px;
+ }
+ </style>
+ <form>
+ <template if="{{ lineMode == '1-line' }}">
+ <input class="textbox" type="text" value="{{ text }}">
+ </template>
+ <template if="{{ lineMode == 'N-line' }}">
+ <textarea class="bigtextbox" rows="5" cols="80" value="{{ text }}"></textarea>
+ </template>
+
+ <input class="button" type="submit" value="Evaluate" on-click="{{ eval }}">
+ <div class="radios" on-change="{{ updateLineMode }}">
+ <label for="1-line">1-line
+ <input type="radio" name="lineMode" value="1-line" checked="">
+ </label>
+ <label for="N-line">N-line
+ <input type="radio" name="lineMode" value="N-line">
+ </label>
+ </div>
+ </form>
+
+ <br>
+ <template if="{{ results.isNotEmpty }}">
+ <table>
+ <tbody><tr template="" repeat="{{ result in results }}">
+ <td class="historyExpr">
+ <a class="expr" on-click="{{ selectExpr }}" expr="{{ result['expr'] }}">{{ result['expr'] }}</a>
+ </td>
+ <td class="historyValue">
+ <template if="{{ result['value'] == null }}">
+ <div style="color:#aaa;cursor:wait;"><pending></div>
+ </template>
+ <template if="{{ result['value'] != null }}">
+ <instance-ref isolate="{{ isolate }}" ref="{{ result['value'] }}">
+ </instance-ref>
+ </template>
+ </td>
+ </tr>
+ </tbody></table>
+ </template>
+ </template>
+</polymer-element>
+
+
+<polymer-element name="field-view" extends="observatory-element">
<template>
<nav-bar>
<top-nav-menu></top-nav-menu>
- <isolate-nav-menu isolate="{{ isolate }}"></isolate-nav-menu>
- <template if="{{ field['owner']['type'] == '@Class' }}">
+ <isolate-nav-menu isolate="{{ field.isolate }}"></isolate-nav-menu>
+ <template if="{{ field['owner'].serviceType == 'Class' }}">
<!-- TODO(turnidge): Add library nav menu here. -->
- <class-nav-menu isolate="{{ isolate }}" cls="{{ field['owner'] }}"></class-nav-menu>
+ <class-nav-menu cls="{{ field['owner'] }}"></class-nav-menu>
</template>
- <template if="{{ field['owner']['type'] == '@Library' }}">
- <library-nav-menu isolate="{{ isolate }}" library="{{ field['owner'] }}"></library-nav-menu>
+ <template if="{{ field['owner'].serviceType == 'Library' }}">
+ <library-nav-menu library="{{ field['owner'] }}"></library-nav-menu>
</template>
<nav-menu link="." anchor="{{ field['user_name'] }}" last="{{ true }}"></nav-menu>
<nav-refresh callback="{{ refresh }}"></nav-refresh>
@@ -536,7 +650,7 @@
<template if="{{ field['final'] }}">final</template>
<template if="{{ field['const'] }}">const</template>
{{ field['user_name'] }} ({{ field['name'] }})
- <class-ref isolate="{{ isolate }}" ref="{{ field['class'] }}"></class-ref>
+ <class-ref ref="{{ field['owner'] }}"></class-ref>
</div>
<div class="panel-body">
<template if="{{ field['guard_class'] == 'dynamic'}}">
@@ -555,7 +669,7 @@
</div>
</template>
<blockquote>
- <class-ref isolate="{{ isolate }}" ref="{{ field['guard_class'] }}"></class-ref>
+ <class-ref ref="{{ field['guard_class'] }}"></class-ref>
</blockquote>
</template>
</div>
@@ -565,19 +679,19 @@
</template>
</polymer-element>
-<polymer-element name="function-view" extends="isolate-element">
+<polymer-element name="function-view" extends="observatory-element">
<template>
<nav-bar>
<top-nav-menu></top-nav-menu>
- <isolate-nav-menu isolate="{{ isolate }}"></isolate-nav-menu>
+ <isolate-nav-menu isolate="{{ function.isolate }}"></isolate-nav-menu>
<template if="{{ function['owner']['type'] == '@Class' }}">
<!-- TODO(turnidge): Add library nav menu here. -->
- <class-nav-menu isolate="{{ isolate }}" cls="{{ function['owner'] }}"></class-nav-menu>
+ <class-nav-menu cls="{{ function['owner'] }}"></class-nav-menu>
</template>
<template if="{{ function['owner']['type'] == '@Library' }}">
- <library-nav-menu isolate="{{ isolate }}" library="{{ function['owner'] }}"></library-nav-menu>
+ <library-nav-menu library="{{ function['owner'] }}"></library-nav-menu>
</template>
- <nav-menu link="." anchor="{{ function['user_name'] }}" last="{{ true }}"></nav-menu>
+ <nav-menu link="." anchor="{{ function.name }}" last="{{ true }}"></nav-menu>
<nav-refresh callback="{{ refresh }}"></nav-refresh>
</nav-bar>
@@ -586,12 +700,12 @@
<div class="panel panel-warning">
<div class="panel-heading">
{{ function['user_name'] }} ({{ function['name'] }})
- <class-ref isolate="{{ isolate }}" ref="{{ function['class'] }}"></class-ref>
+ <class-ref ref="{{ function['class'] }}"></class-ref>
</div>
<div class="panel-body">
<div>
- <code-ref isolate="{{ isolate }}" ref="{{ function['code'] }}"></code-ref>
- <code-ref isolate="{{ isolate }}" ref="{{ function['unoptimized_code'] }}"></code-ref>
+ <code-ref ref="{{ function['code'] }}"></code-ref>
+ <code-ref ref="{{ function['unoptimized_code'] }}"></code-ref>
</div>
<table class="table table-hover">
<tbody>
@@ -634,7 +748,7 @@
</template>
</polymer-element>
-<polymer-element name="isolate-summary" extends="isolate-element">
+<polymer-element name="isolate-summary" extends="observatory-element">
<template>
<div class="row">
<div class="col-md-1">
@@ -659,9 +773,9 @@
<div class="row">
<small>
- (<a href="{{ isolate.hashLink(isolate.rootLib) }}">library</a>)
- (<a href="{{ isolate.hashLink('debug/breakpoints') }}">breakpoints</a>)
- (<a href="{{ isolate.hashLink('profile') }}">profile</a>)
+ (<a href="{{ isolate.rootLib.hashLink }}">library</a>)
+ (<a href="{{ isolate.relativeHashLink('debug/breakpoints') }}">breakpoints</a>)
+ (<a href="{{ isolate.relativeHashLink('profile') }}">profile</a>)
</small>
</div>
</div>
@@ -694,7 +808,7 @@
</div>
</div>
<div class="col-md-2">
- <a href="{{ isolate.hashLink('allocationprofile') }}">
+ <a href="{{ isolate.relativeHashLink('allocationprofile') }}">
{{ isolate.newHeapUsed | formatSize }}/{{ isolate.oldHeapUsed | formatSize }}
</a>
</div>
@@ -705,7 +819,7 @@
<template if="{{ isolate.topFrame != null }}">
run
</template>
- ( <a href="{{ isolate.hashLink('stacktrace') }}">stack trace</a> )
+ ( <a href="{{ isolate.relativeHashLink('stacktrace') }}">stack trace</a> )
</div>
</div>
<div class="row">
@@ -713,8 +827,8 @@
</div>
<div class="col-md-6">
<template if="{{ isolate.topFrame != null }}">
- <function-ref isolate="{{ isolate }}" ref="{{ isolate.topFrame['function'] }}"></function-ref>
- (<script-ref isolate="{{ isolate }}" ref="{{ isolate.topFrame['script'] }}" line="{{ isolate.topFrame['line'] }}"></script-ref>)
+ <function-ref ref="{{ isolate.topFrame['function'] }}"></function-ref>
+ (<script-ref ref="{{ isolate.topFrame['script'] }}" line="{{ isolate.topFrame['line'] }}"></script-ref>)
<br>
<pre>{{ isolate.topFrame['line'] }} {{ isolate.topFrame['lineString'] }}</pre>
</template>
@@ -725,10 +839,7 @@
</template>
</polymer-element>
-<polymer-element name="vm-element" extends="observatory-element">
-
-</polymer-element>
-<polymer-element name="isolate-list" extends="vm-element">
+<polymer-element name="isolate-list" extends="observatory-element">
<template>
<nav-bar>
<top-nav-menu last="{{ true }}"></top-nav-menu>
@@ -736,7 +847,7 @@
<nav-refresh callback="{{ refresh } }}"></nav-refresh>
</nav-bar>
<ul class="list-group">
- <template repeat="{{ isolate in vm.isolates.values }}">
+ <template repeat="{{ isolate in isolates.isolates.values }}">
<li class="list-group-item">
<isolate-summary isolate="{{ isolate }}"></isolate-summary>
</li>
@@ -745,50 +856,119 @@
</template>
</polymer-element>
-<polymer-element name="instance-view" extends="isolate-element">
+<polymer-element name="instance-view" extends="observatory-element">
<template>
<nav-bar>
<top-nav-menu></top-nav-menu>
- <isolate-nav-menu isolate="{{ isolate }}"></isolate-nav-menu>
+ <isolate-nav-menu isolate="{{ instance.isolate }}"></isolate-nav-menu>
<!-- TODO(turnidge): Add library nav menu here. -->
- <class-nav-menu isolate="{{ isolate }}" cls="{{ instance['class'] }}"></class-nav-menu>
+ <class-nav-menu cls="{{ instance['class'] }}"></class-nav-menu>
<nav-menu link="." anchor="instance" last="{{ true }}"></nav-menu>
- <!-- TODO(turnidge): Add nav refresh here. -->
+ <nav-refresh callback="{{ refresh }}"></nav-refresh>
</nav-bar>
- <div class="row">
- <div class="col-md-8 col-md-offset-2">
- <div class="panel panel-warning">
- <div class="panel-heading">
- Instance of
- <class-ref isolate="{{ isolate }}" ref="{{ instance['class'] }}"></class-ref>
- </div>
- <div class="panel-body">
- <template if="{{ instance['error'] == null }}">
- <table class="table table-hover">
- <tbody>
- <tr>
- <td>Preview</td><td>{{ instance['preview'] }}</td>
- </tr>
- </tbody>
- </table>
- <blockquote><strong>Fields</strong></blockquote>
- <table class="table table-hover">
- <tbody>
- <tr template="" repeat="{{ field in instance['fields'] }}">
- <td><field-ref isolate="{{ isolate }}" ref="{{ field['decl'] }}"></field-ref></td>
- <td><instance-ref isolate="{{ isolate }}" ref="{{ field['value'] }}"></instance-ref></td>
- </tr>
- </tbody>
- </table>
- </template>
- <template if="{{ instance['error'] != null }}">
- <error-view error_obj="{{ instance['error'] }}"></error-view>
- </template>
- </div>
+ <style>
+ .content {
+ padding-left: 10%;
+ font: 400 14px 'Montserrat', sans-serif;
+ }
+ h1 {
+ font: 400 18px 'Montserrat', sans-serif;
+ }
+ .member {
+ vertical-align: top;
+ padding: 3px 0 3px 1em;
+ font: 400 14px 'Montserrat', sans-serif;
+ }
+ .memberBold {
+ vertical-align: top;
+ padding: 3px 0 3px 1em;
+ font: 400 14px 'Montserrat', sans-serif;
+ }
+ </style>
+
+ <template if="{{ instance['error'] != null }}">
+ <error-view error_obj="{{ instance['error'] }}"></error-view>
+ </template>
+
+ <template if="{{ instance['error'] == null }}">
+ <div class="content">
+ <!-- TODO(turnidge): Handle null instances. -->
+ <h1>instance of {{ instance['class']['user_name'] }}</h1>
+ <table>
+ <tbody><tr>
+ <td class="memberBold">class</td>
+ <td class="member">
+ <class-ref ref="{{ instance['class'] }}">
+ </class-ref>
+ </td>
+ </tr>
+ <tr template="" if="{{ instance['preview'] != null }}">
+ <td class="memberBold">preview</td>
+ <td class="member">{{ instance['preview'] }}</td>
+ </tr>
+ <tr>
+ <td class="memberBold">size</td>
+ <td class="member">{{ instance['size'] | formatSize }}</td>
+ </tr>
+ </tbody></table>
</div>
- </div>
- </div>
+
+ <hr>
+
+ <div class="content">
+ <template if="{{ instance['fields'].isNotEmpty }}">
+ fields ({{ instance['fields'].length }})
+ <curly-block>
+ <table>
+ <tbody><tr template="" repeat="{{ field in instance['fields'] }}">
+ <td class="member">
+ <field-ref ref="{{ field['decl'] }}"></field-ref>
+ </td>
+ <td class="member">
+ <instance-ref ref="{{ field['value'] }}"></instance-ref>
+ </td>
+ </tr>
+ </tbody></table>
+ </curly-block>
+ </template>
+
+ <template if="{{ instance['nativeFields'].isNotEmpty }}">
+ native fields ({{ instance['nativeFields'].length }})
+ <curly-block>
+ <table>
+ <tbody><tr template="" repeat="{{ field in instance['nativeFields'] }}">
+ <td class="member">[{{ field['index']}}]</td>
+ <td class="member">[{{ field['value']}}]</td>
+ </tr>
+ </tbody></table>
+ </curly-block>
+ </template>
+
+ <template if="{{ instance['elements'].isNotEmpty }}">
+ elements ({{ instance['elements'].length }})
+ <curly-block>
+ <table>
+ <tbody><tr template="" repeat="{{ element in instance['elements'] }}">
+ <td class="member">[{{ element['index']}}]</td>
+ <td class="member">
+ <instance-ref ref="{{ element['value'] }}">
+ </instance-ref>
+ </td>
+ </tr>
+ </tbody></table>
+ </curly-block>
+ </template>
+ </div>
+
+ <hr>
+
+ <div class="content">
+ <eval-box callback="{{ eval }}"></eval-box>
+ </div>
+ <br><br><br><br>
+ <br><br><br><br>
+ </template>
</template>
</polymer-element>
@@ -822,12 +1002,12 @@
</template>
</polymer-element>
-<polymer-element name="library-view" extends="isolate-element">
+<polymer-element name="library-view" extends="observatory-element">
<template>
<nav-bar>
<top-nav-menu></top-nav-menu>
- <isolate-nav-menu isolate="{{ isolate }}"></isolate-nav-menu>
- <library-nav-menu isolate="{{ isolate }}" library="{{ library }}" last="{{ true }}"></library-nav-menu>
+ <isolate-nav-menu isolate="{{ library.isolate }}"></isolate-nav-menu>
+ <library-nav-menu library="{{ library }}" last="{{ true }}"></library-nav-menu>
<nav-refresh callback="{{ refresh }}"></nav-refresh>
</nav-bar>
@@ -836,10 +1016,10 @@
<tbody>
<tr template="" repeat="{{ script in library['scripts']}}">
<td>
- {{ script['kind'] }}
+ {{ script.kind }}
</td>
<td>
- <script-ref isolate="{{ isolate }}" ref="{{ script }}"></script-ref>
+ <script-ref ref="{{ script }}"></script-ref>
</td>
</tr>
</tbody>
@@ -849,7 +1029,7 @@
<tbody>
<tr template="" repeat="{{ lib in library['libraries'] }}">
<td>
- <library-ref isolate="{{ isolate }}" ref="{{ lib }}"></library-ref>
+ <library-ref ref="{{ lib }}"></library-ref>
</td>
</tr>
</tbody>
@@ -858,8 +1038,8 @@
<table class="table table-hover">
<tbody>
<tr template="" repeat="{{ variable in library['variables'] }}">
- <td><field-ref isolate="{{ isolate }}" ref="{{ variable }}"></field-ref></td>
- <td><instance-ref isolate="{{ isolate }}" ref="{{ variable['value'] }}"></instance-ref></td>
+ <td><field-ref ref="{{ variable }}"></field-ref></td>
+ <td><instance-ref ref="{{ variable['value'] }}"></instance-ref></td>
</tr>
</tbody>
</table>
@@ -868,7 +1048,7 @@
<tbody>
<tr template="" repeat="{{ func in library['functions'] }}">
<td>
- <function-ref isolate="{{ isolate }}" ref="{{ func }}"></function-ref>
+ <function-ref ref="{{ func }}"></function-ref>
</td>
</tr>
</tbody>
@@ -884,10 +1064,10 @@
<tbody>
<tr template="" repeat="{{ cls in library['classes'] }}">
<td>
- <class-ref isolate="{{ isolate }}" ref="{{ cls }}"></class-ref>
+ <class-ref ref="{{ cls }}"></class-ref>
</td>
<td>
- <class-ref isolate="{{ isolate }}" ref="{{ cls }}" internal=""></class-ref>
+ <class-ref ref="{{ cls }}" internal=""></class-ref>
</td>
</tr>
</tbody>
@@ -896,11 +1076,54 @@
</template>
</polymer-element>
-<polymer-element name="heap-profile" extends="isolate-element">
+<polymer-element name="isolate-profile" extends="observatory-element">
+ <template>
+ <nav-bar>
+ <top-nav-menu></top-nav-menu>
+ <isolate-nav-menu isolate="{{ profile.isolate }}"></isolate-nav-menu>
+ <nav-menu link="." anchor="cpu profile" last="{{ true }}"></nav-menu>
+ <nav-refresh callback="{{ refresh }}"></nav-refresh>
+ </nav-bar>
+ <div class="row">
+ <div class="col-md-12">
+ <span>Top</span>
+ <select selectedindex="{{methodCountSelected}}" value="{{methodCounts[methodCountSelected]}}">
+ <option template="" repeat="{{count in methodCounts}}">{{count}}</option>
+ </select>
+ <span>exclusive methods</span>
+ </div>
+ </div>
+ <div class="row">
+ <div class="col-md-12">
+ <p>Refreshed at {{ refreshTime }} with {{ sampleCount }} samples.</p>
+ </div>
+ </div>
+ <table id="tableTree" class="table table-hover">
+ <thead>
+ <tr>
+ <th>Method</th>
+ <th>Exclusive</th>
+ <th>Caller</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr template="" repeat="{{row in tree.rows }}" style="{{}}">
+ <td on-click="{{toggleExpanded}}" class="{{ coloring(row) }}" style="{{ padding(row) }}">
+ <code-ref ref="{{ row.code }}"></code-ref>
+ </td>
+ <td class="{{ coloring(row) }}">{{row.columns[0]}}</td>
+ <td class="{{ coloring(row) }}">{{row.columns[1]}}</td>
+ </tr>
+ </tbody>
+ </table>
+ </template>
+
+</polymer-element>
+<polymer-element name="heap-profile" extends="observatory-element">
<template>
<nav-bar>
<top-nav-menu></top-nav-menu>
- <isolate-nav-menu isolate="{{ isolate }}"></isolate-nav-menu>
+ <isolate-nav-menu isolate="{{ profile.isolate }}"></isolate-nav-menu>
<nav-menu link="." anchor="heap profile" last="{{ true }}"></nav-menu>
<nav-refresh callback="{{ refresh }}"></nav-refresh>
</nav-bar>
@@ -963,72 +1186,31 @@
</template>
</polymer-element>
-<polymer-element name="isolate-profile" extends="isolate-element">
- <template>
- <nav-bar>
- <top-nav-menu></top-nav-menu>
- <isolate-nav-menu isolate="{{ isolate }}"></isolate-nav-menu>
- <nav-menu link="." anchor="cpu profile" last="{{ true }}"></nav-menu>
- <nav-refresh callback="{{ refresh }}"></nav-refresh>
- </nav-bar>
- <div class="row">
- <div class="col-md-12">
- <span>Top</span>
- <select selectedindex="{{methodCountSelected}}" value="{{methodCounts[methodCountSelected]}}">
- <option template="" repeat="{{count in methodCounts}}">{{count}}</option>
- </select>
- <span>exclusive methods</span>
- </div>
- </div>
- <div class="row">
- <div class="col-md-12">
- <p>Refreshed at {{ refreshTime }} with {{ sampleCount }} samples.</p>
- </div>
- </div>
- <table id="tableTree" class="table table-hover">
- <thead>
- <tr>
- <th>Method</th>
- <th>Exclusive</th>
- <th>Caller</th>
- <th>Inclusive</th>
- </tr>
- </thead>
- <tbody>
- <tr template="" repeat="{{row in tree.rows }}" style="{{}}">
- <td on-click="{{toggleExpanded}}" class="{{ coloring(row) }}" style="{{ padding(row) }}">
- <code-ref isolate="{{ isolate }}" ref="{{ row.code.codeRef }}"></code-ref>
- </td>
- <td class="{{ coloring(row) }}">{{row.columns[0]}}</td>
- <td class="{{ coloring(row) }}">{{row.columns[1]}}</td>
- <td class="{{ coloring(row) }}">{{row.columns[2]}}</td>
- </tr>
- </tbody>
- </table>
- </template>
-
-</polymer-element>
-<polymer-element name="script-view" extends="isolate-element">
+<polymer-element name="script-view" extends="observatory-element">
<template>
<nav-bar>
<top-nav-menu></top-nav-menu>
- <isolate-nav-menu isolate="{{ isolate }}">
+ <isolate-nav-menu isolate="{{ script.isolate }}">
</isolate-nav-menu>
- <library-nav-menu isolate="{{ isolate }}" library="{{ script.libraryRef }}"></library-nav-menu>
- <nav-menu link="." anchor="{{ script.shortName }}" last="{{ true }}"></nav-menu>
+ <library-nav-menu library="{{ script.library }}"></library-nav-menu>
+ <nav-menu link="." anchor="{{ script.name }}" last="{{ true }}">
+ <li>
+ <input type="checkbox" checked="{{ showCoverage }}">
+ <label>Show Coverage Data</label>
+ </li>
+ </nav-menu>
+ <nav-refresh callback="{{ refreshCoverage }}" label="Refresh Coverage"></nav-refresh>
+ <nav-refresh callback="{{ refresh }}">
+ </nav-refresh>
</nav-bar>
<div class="row">
<div class="col-md-8 col-md-offset-2">
- <div class="panel-heading">
- <button on-click="{{refreshCoverage}}">Refresh Coverage</button>
- {{ script.scriptRef['user_name'] }}
- {{ script.coveredPercentageFormatted() }}
- </div>
+ <div class="panel-heading">Script source for: {{ script.name }}</div>
<div class="panel-body">
<table style="width:100%">
<tbody>
- <tr template="" repeat="{{ line in script.linesForDisplay }}">
+ <tr template="" repeat="{{ line in script.lines }}">
<td style="{{ hitsStyle(line) }}"> </td>
<td style="font-family: consolas, courier, monospace;font-size: 1em;line-height: 1.2em;white-space: nowrap;">{{line.line}}</td>
<td width="99%" style="font-family: consolas, courier, monospace;font-size: 1em;line-height: 1.2em;white-space: pre;">{{line.text}}</td>
@@ -1041,7 +1223,7 @@
</template>
</polymer-element>
-<polymer-element name="stack-frame" extends="isolate-element">
+<polymer-element name="stack-frame" extends="observatory-element">
<template>
<style>
.member {
@@ -1055,15 +1237,15 @@
#{{ frame['depth'] }}
</div>
<div class="col-md-9">
- <function-ref isolate="{{ isolate }}" ref="{{ frame['function'] }}"></function-ref>
- ( <script-ref isolate="{{ isolate }}" ref="{{ frame['script'] }}" line="{{ frame['line'] }}">
+ <function-ref ref="{{ frame['function'] }}"></function-ref>
+ ( <script-ref ref="{{ frame['script'] }}" line="{{ frame['line'] }}">
</script-ref> )
<curly-block>
<table>
<tbody><tr template="" repeat="{{ v in frame['vars'] }}">
<td class="member">{{ v['name']}}</td>
<td class="member">
- <instance-ref isolate="{{ isolate }}" ref="{{ v['value'] }}"></instance-ref>
+ <instance-ref ref="{{ v['value'] }}"></instance-ref>
</td>
</tr>
</tbody></table>
@@ -1077,11 +1259,11 @@
</template>
</polymer-element>
-<polymer-element name="stack-trace" extends="isolate-element">
+<polymer-element name="stack-trace" extends="observatory-element">
<template>
<nav-bar>
<top-nav-menu></top-nav-menu>
- <isolate-nav-menu isolate="{{ isolate }}"></isolate-nav-menu>
+ <isolate-nav-menu isolate="{{ trace.isolate }}"></isolate-nav-menu>
<nav-menu link="." anchor="stack trace" last="{{ true }}"></nav-menu>
<nav-refresh callback="{{ refresh }}"></nav-refresh>
</nav-bar>
@@ -1096,7 +1278,7 @@
<ul class="list-group">
<template repeat="{{ frame in trace['members'] }}">
<li class="list-group-item">
- <stack-frame isolate="{{ isolate }}" frame="{{ frame }}"></stack-frame>
+ <stack-frame frame="{{ frame }}"></stack-frame>
</li>
</template>
</ul>
@@ -1104,78 +1286,14 @@
</template>
</polymer-element>
-<polymer-element name="message-viewer" extends="observatory-element">
- <!--
- This is a big switch statement which instantiates the custom element
- designated to display the message type.
- -->
- <template>
- <!-- If the message type is an IsolateList -->
- <template if="{{ messageType == 'IsolateList' }}">
- <isolate-list vm="{{ app.vm }}"></isolate-list>
- </template>
- <!-- If the message type is a StackTrace -->
- <template if="{{ messageType == 'StackTrace' }}">
- <stack-trace isolate="{{ app.isolate }}" trace="{{ message }}"></stack-trace>
- </template>
- <template if="{{ messageType == 'BreakpointList' }}">
- <breakpoint-list isolate="{{ app.isolate }}" msg="{{ message }}"></breakpoint-list>
- </template>
- <template if="{{ messageType == 'Error' }}">
- <error-view isolate="{{ app.isolate }}" error="{{ message }}"></error-view>
- </template>
- <template if="{{ messageType == 'Library' }}">
- <library-view isolate="{{ app.isolate }}" library="{{ message }}"></library-view>
- </template>
- <template if="{{ messageType == 'Class' }}">
- <class-view isolate="{{ app.isolate }}" cls="{{ message }}"></class-view>
- </template>
- <template if="{{ messageType == 'Field' }}">
- <field-view isolate="{{ app.isolate }}" field="{{ message }}"></field-view>
- </template>
- <template if="{{ messageType == 'Closure' }}">
- <instance-view isolate="{{ app.isolate }}" instance="{{ message }}"></instance-view>
- </template>
- <template if="{{ messageType == 'Instance' }}">
- <instance-view isolate="{{ app.isolate }}" instance="{{ message }}"></instance-view>
- </template>
- <template if="{{ messageType == 'Array' }}">
- <instance-view isolate="{{ app.isolate }}" instance="{{ message }}"></instance-view>
- </template>
- <template if="{{ messageType == 'GrowableObjectArray' }}">
- <instance-view isolate="{{ app.isolate }}" instance="{{ message }}"></instance-view>
- </template>
- <template if="{{ messageType == 'String' }}">
- <instance-view isolate="{{ app.isolate }}" instance="{{ message }}"></instance-view>
- </template>
- <template if="{{ messageType == 'Bool' }}">
- <instance-view isolate="{{ app.isolate }}" instance="{{ message }}"></instance-view>
- </template>
- <template if="{{ messageType == 'Smi' }}">
- <instance-view isolate="{{ app.isolate }}" instance="{{ message }}"></instance-view>
- </template>
- <template if="{{ messageType == 'Function' }}">
- <function-view isolate="{{ app.isolate }}" function="{{ message }}"></function-view>
- </template>
- <template if="{{ messageType == 'Code' }}">
- <code-view isolate="{{ app.isolate }}" code="{{ message['code'] }}"></code-view>
- </template>
- <template if="{{ messageType == 'Script' }}">
- <script-view isolate="{{ app.isolate }}" script="{{ message['script'] }}"></script-view>
- </template>
- <template if="{{ messageType == 'AllocationProfile' }}">
- <heap-profile isolate="{{ app.isolate }}" profile="{{ message }}"></heap-profile>
- </template>
- <template if="{{ messageType == 'Profile' }}">
- <isolate-profile isolate="{{ app.isolate }}" profile="{{ message }}"></isolate-profile>
- </template>
- <!-- Add new views and message types in the future here. -->
- </template>
+<polymer-element name="service-view" extends="observatory-element">
+ <!-- This element explicitly manages the child elements to avoid setting
+ an observable property on the old element to an invalid type. -->
</polymer-element>
<polymer-element name="response-viewer" extends="observatory-element">
<template>
- <message-viewer app="{{ app }}" message="{{ app.response }}"></message-viewer>
+ <service-view object="{{ app.response }}"></service-view>
</template>
</polymer-element><polymer-element name="observatory-application" extends="observatory-element">
diff --git a/runtime/bin/vmservice/client/deployed/web/index_devtools.html_bootstrap.dart.js b/runtime/bin/vmservice/client/deployed/web/index_devtools.html_bootstrap.dart.js
index a8bb6e0..8bf51c1 100644
--- a/runtime/bin/vmservice/client/deployed/web/index_devtools.html_bootstrap.dart.js
+++ b/runtime/bin/vmservice/client/deployed/web/index_devtools.html_bootstrap.dart.js
@@ -8542,8 +8542,8 @@
function DartObject(o) {
this.o = o;
}
-// Generated by dart2js, the Dart to JavaScript compiler version: 1.2.0-dev.5.15.
-(function($){function dart() {}var A=new dart
+// Generated by dart2js, the Dart to JavaScript compiler version: 1.3.0-dev.3.2.
+(function($){function dart(){this.x=0}var A=new dart
delete A.x
var B=new dart
delete B.x
@@ -8597,7 +8597,7 @@
init()
$=I.p
var $$={}
-;init.mangledNames={gAp:"__$library",gAu:"__$cls",gBW:"__$msg",gCO:"_oldPieChart",gF0:"__$cls",gGQ:"_newPieDataTable",gGV:"__$expanded",gGj:"_message",gHX:"__$displayValue",gHm:"tree",gHu:"__$busy",gJ0:"_newPieChart",gJh:"__$vm",gJo:"__$last",gKM:"$",gL4:"human",gLE:"timers",gLY:"_fullDataTable",gN7:"__$library",gOc:"_oldPieDataTable",gOl:"__$profile",gP:"value",gPe:"__$internal",gPy:"__$error",gRd:"line",gSB:"__$active",gSS:"__$methodCountSelected",gSw:"lines",gUp:"__$trace",gUy:"_collapsed",gUz:"__$script",gVa:"__$frame",gWT:"rows",gX3:"_first",gXR:"scripts",gXh:"__$instance",gYu:"address",gZ0:"codes",gZ6:"locationManager",gZ8:"__$function",gZC:"__$anchor",ga:"a",gah:"__$app",gb:"b",gbV:"_combinedDataTable",geH:"__$sampleCount",geJ:"__$code",geb:"__$json",gfb:"methodCounts",gi2:"isolates",gk5:"__$devtools",gkW:"__$app",gkf:"_count",gkg:"_combinedChart",gm0:"__$instruction",gm7:"machine",gnx:"__$callback",goH:"columns",gpC:"__$isolate",gpD:"__$profile",gq3:"_fullChart",gqO:"_id",gqY:"__$topExclusiveCodes",grU:"__$callback",gtT:"code",gtY:"__$ref",guy:"__$link",gvH:"index",gva:"instructions",gvk:"__$refreshTime",gvt:"__$field",gwd:"children",gxH:"__$app",gyt:"depth",gzf:"vm",gzh:"__$iconClass",gzw:"__$line"};init.mangledGlobalNames={DI:"_closeIconClass",DP:"ACCUMULATED_SIZE",V1g:"LIVE_AFTER_GC_SIZE",Vl:"_openIconClass",WY:"LIVE_AFTER_GC",b7:"ALLOCATED_BEFORE_GC",bQj:"ALLOCATED_BEFORE_GC_SIZE",d6:"ALLOCATED_SINCE_GC_SIZE",pC:"ACCUMULATED",r1K:"ALLOCATED_SINCE_GC"};(function (reflectionData) {
+;init.mangledNames={gAb:"__$lineMode",gAp:"__$library",gAu:"__$cls",gB3:"__$trace",gBA:"__$methodCountSelected",gBW:"__$msg",gCO:"_oldPieChart",gDt:"topExclusiveCodes",gDu:"exclusiveTicks",gF0:"__$cls",gFT:"__$sampleCount",gGQ:"_newPieDataTable",gGV:"__$expanded",gHJ:"__$showCoverage",gHX:"__$displayValue",gHm:"tree",gHq:"__$label",gHu:"__$busy",gJ0:"_newPieChart",gJo:"__$last",gKM:"$",gKU:"__$link",gL4:"human",gLE:"timers",gLY:"_fullDataTable",gLn:"__$callback",gMb:"endAddress",gN7:"__$library",gOc:"_oldPieDataTable",gOl:"__$profile",gP:"value",gPe:"__$internal",gPw:"__$isolate",gPy:"__$error",gRd:"line",gSB:"__$active",gSw:"lines",gUy:"_collapsed",gUz:"__$script",gV4:"__$anchor",gVS:"callers",gVa:"__$frame",gWT:"rows",gX3:"_first",gXh:"__$instance",gXx:"__$code",gYu:"address",gZ6:"locationManager",gZ8:"__$function",ga:"a",ga4:"text",gb:"b",gbV:"_combinedDataTable",geb:"__$json",gfF:"inclusiveTicks",gfb:"methodCounts",gfn:"__$text",ghw:"callees",gi2:"isolates",giy:"__$isolate",gk5:"__$devtools",gkW:"__$app",gkf:"_count",gkg:"_combinedChart",gm7:"machine",gmC:"__$object",gnx:"__$callback",goH:"columns",gpD:"__$profile",gq3:"_fullChart",gqO:"_id",grU:"__$callback",gtT:"code",gtY:"__$ref",gtf:"__$isolates",gtl:"_isolates",gu9:"hits",gvH:"index",gva:"instructions",gvg:"startAddress",gvk:"__$refreshTime",gvt:"__$field",gwd:"children",gxH:"__$app",gy4:"__$results",gyP:"addressTicks",gyt:"depth",gzf:"vm",gzh:"__$iconClass",gzw:"__$line"};init.mangledGlobalNames={BO:"ALLOCATED_BEFORE_GC",CF:"_closeIconClass",DP:"ACCUMULATED_SIZE",V1g:"LIVE_AFTER_GC_SIZE",Vl:"_openIconClass",WY:"LIVE_AFTER_GC",bQj:"ALLOCATED_BEFORE_GC_SIZE",d6:"ALLOCATED_SINCE_GC_SIZE",he:"hitStyleNone",iJN:"hitStyleExecuted",oM:"hitStyleNotExecuted",pC:"ACCUMULATED",r1:"ALLOCATED_SINCE_GC"};(function (reflectionData) {
"use strict";
function map(x){x={x:x};delete x.x;return x}
function processStatics(descriptor) {
@@ -8825,7 +8825,7 @@
if(typeof z!=="number")return z.g()
x=z+1
if(x>=y.length)return H.e(y,x)
-return y[x]},"call$1","eh",2,0,null,11,[]],
+return y[x]},"call$1","Tj",2,0,null,11,[]],
Nq:[function(a,b){var z,y,x
z=J.e1(a)
if(z==null)return
@@ -8836,10 +8836,10 @@
return y[x][b]},"call$2","BJ",4,0,null,11,[],12,[]],
Gv:{
"^":"a;",
-n:[function(a,b){return a===b},"call$1","gUJ",2,0,null,104,[]],
+n:[function(a,b){return a===b},"call$1","gUJ",2,0,null,109,[]],
giO:function(a){return H.eQ(a)},
bu:[function(a){return H.a5(a)},"call$0","gXo",0,0,null],
-T:[function(a,b){throw H.b(P.lr(a,b.gWa(),b.gnd(),b.gVm(),null))},"call$1","gxK",2,0,null,331,[]],
+T:[function(a,b){throw H.b(P.lr(a,b.gWa(),b.gnd(),b.gVm(),null))},"call$1","gxK",2,0,null,329,[]],
gbx:function(a){return new H.cu(H.dJ(a),null)},
$isGv:true,
"%":"DOMImplementation|SVGAnimatedEnumeration|SVGAnimatedNumberList|SVGAnimatedString"},
@@ -8851,7 +8851,7 @@
$isbool:true},
Jh:{
"^":"Null/Gv;",
-n:[function(a,b){return null==b},"call$1","gUJ",2,0,null,104,[]],
+n:[function(a,b){return null==b},"call$1","gUJ",2,0,null,109,[]],
bu:[function(a){return"null"},"call$0","gXo",0,0,null],
giO:function(a){return 0},
gbx:function(a){return C.Qf}},
@@ -8866,41 +8866,41 @@
Q:{
"^":"List/Gv;",
h:[function(a,b){if(!!a.fixed$length)H.vh(P.f("add"))
-a.push(b)},"call$1","ght",2,0,null,23,[]],
+a.push(b)},"call$1","ght",2,0,null,28,[]],
KI:[function(a,b){if(b<0||b>=a.length)throw H.b(new P.bJ("value "+b))
if(!!a.fixed$length)H.vh(P.f("removeAt"))
-return a.splice(b,1)[0]},"call$1","gNM",2,0,null,47,[]],
+return a.splice(b,1)[0]},"call$1","gNM",2,0,null,52,[]],
xe:[function(a,b,c){if(b<0||b>a.length)throw H.b(new P.bJ("value "+b))
if(!!a.fixed$length)H.vh(P.f("insert"))
-a.splice(b,0,c)},"call$2","gQG",4,0,null,47,[],23,[]],
+a.splice(b,0,c)},"call$2","gQG",4,0,null,52,[],28,[]],
Rz:[function(a,b){var z
if(!!a.fixed$length)H.vh(P.f("remove"))
for(z=0;z<a.length;++z)if(J.de(a[z],b)){a.splice(z,1)
-return!0}return!1},"call$1","gRI",2,0,null,129,[]],
-ev:[function(a,b){return H.VM(new H.U5(a,b),[null])},"call$1","gIR",2,0,null,115,[]],
+return!0}return!1},"call$1","guH",2,0,null,132,[]],
+ev:[function(a,b){return H.VM(new H.U5(a,b),[null])},"call$1","gIR",2,0,null,117,[]],
FV:[function(a,b){var z
-for(z=J.GP(b);z.G();)this.h(a,z.gl())},"call$1","gDY",2,0,null,332,[]],
-V1:[function(a){this.sB(a,0)},"call$0","gyP",0,0,null],
-aN:[function(a,b){return H.bQ(a,b)},"call$1","gjw",2,0,null,115,[]],
-ez:[function(a,b){return H.VM(new H.A8(a,b),[null,null])},"call$1","gIr",2,0,null,115,[]],
+for(z=J.GP(b);z.G();)this.h(a,z.gl())},"call$1","gDY",2,0,null,281,[]],
+V1:[function(a){this.sB(a,0)},"call$0","gRa",0,0,null],
+aN:[function(a,b){return H.bQ(a,b)},"call$1","gjw",2,0,null,117,[]],
+ez:[function(a,b){return H.VM(new H.A8(a,b),[null,null])},"call$1","gIr",2,0,null,117,[]],
zV:[function(a,b){var z,y,x,w
z=a.length
y=Array(z)
y.fixed$length=init
for(x=0;x<a.length;++x){w=H.d(a[x])
if(x>=z)return H.e(y,x)
-y[x]=w}return y.join(b)},"call$1","gnr",0,2,null,333,334,[]],
-eR:[function(a,b){return H.j5(a,b,null,null)},"call$1","gZo",2,0,null,292,[]],
+y[x]=w}return y.join(b)},"call$1","gNU",0,2,null,330,331,[]],
+eR:[function(a,b){return H.q9(a,b,null,null)},"call$1","gZo",2,0,null,198,[]],
Zv:[function(a,b){if(b>>>0!==b||b>=a.length)return H.e(a,b)
-return a[b]},"call$1","goY",2,0,null,47,[]],
+return a[b]},"call$1","goY",2,0,null,52,[]],
D6:[function(a,b,c){if(typeof b!=="number"||Math.floor(b)!==b)throw H.b(new P.AT(b))
if(b<0||b>a.length)throw H.b(P.TE(b,0,a.length))
if(c==null)c=a.length
else{if(typeof c!=="number"||Math.floor(c)!==c)throw H.b(new P.AT(c))
if(c<b||c>a.length)throw H.b(P.TE(c,b,a.length))}if(b===c)return H.VM([],[H.Kp(a,0)])
-return H.VM(a.slice(b,c),[H.Kp(a,0)])},function(a,b){return this.D6(a,b,null)},"Jk","call$2",null,"gli",2,2,null,77,120,[],121,[]],
+return H.VM(a.slice(b,c),[H.Kp(a,0)])},function(a,b){return this.D6(a,b,null)},"Jk","call$2",null,"gli",2,2,null,82,123,[],124,[]],
Mu:[function(a,b,c){H.K0(a,b,c)
-return H.j5(a,b,c,null)},"call$2","gYf",4,0,null,120,[],121,[]],
+return H.q9(a,b,c,null)},"call$2","gYf",4,0,null,123,[],124,[]],
gtH:function(a){if(a.length>0)return a[0]
throw H.b(new P.lj("No elements"))},
grZ:function(a){var z=a.length
@@ -8916,15 +8916,15 @@
if(typeof c!=="number")return H.s(c)
H.tb(a,c,a,b,z-c)
if(typeof b!=="number")return H.s(b)
-this.sB(a,z-(c-b))},"call$2","gYH",4,0,null,120,[],121,[]],
-Vr:[function(a,b){return H.Ck(a,b)},"call$1","gG2",2,0,null,115,[]],
+this.sB(a,z-(c-b))},"call$2","gYH",4,0,null,123,[],124,[]],
+Vr:[function(a,b){return H.Ck(a,b)},"call$1","gG2",2,0,null,117,[]],
GT:[function(a,b){if(!!a.immutable$list)H.vh(P.f("sort"))
-H.ZE(a,0,a.length-1,b)},"call$1","gH7",0,2,null,77,133,[]],
-XU:[function(a,b,c){return H.TK(a,b,c,a.length)},function(a,b){return this.XU(a,b,0)},"u8","call$2",null,"gIz",2,2,null,335,129,[],120,[]],
-Pk:[function(a,b,c){return H.eX(a,b,a.length-1)},function(a,b){return this.Pk(a,b,null)},"cn","call$2",null,"gph",2,2,null,77,129,[],120,[]],
+H.rd(a,b)},"call$1","gH7",0,2,null,82,122,[]],
+XU:[function(a,b,c){return H.TK(a,b,c,a.length)},function(a,b){return this.XU(a,b,0)},"u8","call$2",null,"gIz",2,2,null,332,132,[],123,[]],
+Pk:[function(a,b,c){return H.lO(a,b,a.length-1)},function(a,b){return this.Pk(a,b,null)},"cn","call$2",null,"gcb",2,2,null,82,132,[],123,[]],
tg:[function(a,b){var z
for(z=0;z<a.length;++z)if(J.de(a[z],b))return!0
-return!1},"call$1","gdj",2,0,null,104,[]],
+return!1},"call$1","gdj",2,0,null,109,[]],
gl0:function(a){return a.length===0},
gor:function(a){return a.length!==0},
bu:[function(a){return H.mx(a,"[","]")},"call$0","gXo",0,0,null],
@@ -8932,27 +8932,27 @@
if(b)return H.VM(a.slice(),[H.Kp(a,0)])
else{z=H.VM(a.slice(),[H.Kp(a,0)])
z.fixed$length=init
-return z}},function(a){return this.tt(a,!0)},"br","call$1$growable",null,"gRV",0,3,null,336,337,[]],
+return z}},function(a){return this.tt(a,!0)},"br","call$1$growable",null,"gRV",0,3,null,333,334,[]],
gA:function(a){return H.VM(new H.a7(a,a.length,0,null),[H.Kp(a,0)])},
giO:function(a){return H.eQ(a)},
gB:function(a){return a.length},
sB:function(a,b){if(typeof b!=="number"||Math.floor(b)!==b)throw H.b(new P.AT(b))
-if(b<0)throw H.b(P.N(b))
+if(b<0)throw H.b(new P.bJ("value "+H.d(b)))
if(!!a.fixed$length)H.vh(P.f("set length"))
a.length=b},
t:[function(a,b){if(typeof b!=="number"||Math.floor(b)!==b)throw H.b(new P.AT(b))
if(b>=a.length||b<0)throw H.b(P.N(b))
-return a[b]},"call$1","gIA",2,0,null,47,[]],
+return a[b]},"call$1","gIA",2,0,null,52,[]],
u:[function(a,b,c){if(!!a.immutable$list)H.vh(P.f("indexed set"))
if(typeof b!=="number"||Math.floor(b)!==b)throw H.b(new P.AT(b))
-if(b>=a.length||b<0)throw H.b(new P.bJ("value "+H.d(b)))
-a[b]=c},"call$2","gj3",4,0,null,47,[],23,[]],
+if(b>=a.length||b<0)throw H.b(P.N(b))
+a[b]=c},"call$2","gj3",4,0,null,52,[],28,[]],
$isList:true,
$isList:true,
-$asWO:null,
+$aszM:null,
$isyN:true,
-$iscX:true,
-$ascX:null,
+$isQV:true,
+$asQV:null,
static:{Qi:function(a,b){var z
if(typeof a!=="number"||Math.floor(a)!==a||a<0)throw H.b(P.u("Length must be a non-negative integer: "+H.d(a)))
z=H.VM(new Array(a),[b])
@@ -8976,73 +8976,71 @@
if(this.gzP(a)===z)return 0
if(this.gzP(a))return-1
return 1}return 0}else if(isNaN(a)){if(this.gG0(b))return 0
-return 1}else return-1},"call$1","gYc",2,0,null,188,[]],
+return 1}else return-1},"call$1","gYc",2,0,null,187,[]],
gzP:function(a){return a===0?1/a<0:a<0},
gG0:function(a){return isNaN(a)},
gx8:function(a){return isFinite(a)},
-JV:[function(a,b){return a%b},"call$1","gKG",2,0,null,188,[]],
+JV:[function(a,b){return a%b},"call$1","gDH",2,0,null,187,[]],
yu:[function(a){var z
if(a>=-2147483648&&a<=2147483647)return a|0
if(isFinite(a)){z=a<0?Math.ceil(a):Math.floor(a)
return z+0}throw H.b(P.f(''+a))},"call$0","gDi",0,0,null],
-HG:[function(a){return this.yu(this.UD(a))},"call$0","gD5",0,0,null],
+HG:[function(a){return this.yu(this.UD(a))},"call$0","gA0",0,0,null],
UD:[function(a){if(a<0)return-Math.round(-a)
else return Math.round(a)},"call$0","gE8",0,0,null],
yM:[function(a,b){var z
if(b>20)throw H.b(P.C3(b))
z=a.toFixed(b)
if(a===0&&this.gzP(a))return"-"+z
-return z},"call$1","gfE",2,0,null,338,[]],
+return z},"call$1","gfE",2,0,null,335,[]],
WZ:[function(a,b){if(b<2||b>36)throw H.b(P.C3(b))
-return a.toString(b)},"call$1","gEI",2,0,null,28,[]],
+return a.toString(b)},"call$1","gEI",2,0,null,33,[]],
bu:[function(a){if(a===0&&1/a<0)return"-0.0"
else return""+a},"call$0","gXo",0,0,null],
giO:function(a){return a&0x1FFFFFFF},
J:[function(a){return-a},"call$0","gVd",0,0,null],
g:[function(a,b){if(typeof b!=="number")throw H.b(new P.AT(b))
-return a+b},"call$1","gF1n",2,0,null,104,[]],
+return a+b},"call$1","gF1n",2,0,null,109,[]],
W:[function(a,b){if(typeof b!=="number")throw H.b(P.u(b))
-return a-b},"call$1","gTG",2,0,null,104,[]],
+return a-b},"call$1","gTG",2,0,null,109,[]],
V:[function(a,b){if(typeof b!=="number")throw H.b(new P.AT(b))
-return a/b},"call$1","gJj",2,0,null,104,[]],
+return a/b},"call$1","gJj",2,0,null,109,[]],
U:[function(a,b){if(typeof b!=="number")throw H.b(new P.AT(b))
-return a*b},"call$1","gEH",2,0,null,104,[]],
+return a*b},"call$1","gEH",2,0,null,109,[]],
Y:[function(a,b){var z=a%b
if(z===0)return 0
if(z>0)return z
if(b<0)return z-b
-else return z+b},"call$1","gQR",2,0,null,104,[]],
+else return z+b},"call$1","gQR",2,0,null,109,[]],
Z:[function(a,b){if((a|0)===a&&(b|0)===b&&0!==b&&-1!==b)return a/b|0
-else return this.yu(a/b)},"call$1","guP",2,0,null,104,[]],
-cU:[function(a,b){return(a|0)===a?a/b|0:this.yu(a/b)},"call$1","gPf",2,0,null,104,[]],
+else return this.yu(a/b)},"call$1","guP",2,0,null,109,[]],
+cU:[function(a,b){return(a|0)===a?a/b|0:this.yu(a/b)},"call$1","gPf",2,0,null,109,[]],
O:[function(a,b){if(b<0)throw H.b(new P.AT(b))
-return b>31?0:a<<b>>>0},"call$1","gq8",2,0,null,104,[]],
-W4:[function(a,b){return b>31?0:a<<b>>>0},"call$1","gGu",2,0,null,104,[]],
+return b>31?0:a<<b>>>0},"call$1","gq8",2,0,null,109,[]],
+W4:[function(a,b){return b>31?0:a<<b>>>0},"call$1","gGu",2,0,null,109,[]],
m:[function(a,b){var z
if(b<0)throw H.b(new P.AT(b))
if(a>0)z=b>31?0:a>>>b
else{z=b>31?31:b
-z=a>>z>>>0}return z},"call$1","gyp",2,0,null,104,[]],
+z=a>>z>>>0}return z},"call$1","gyp",2,0,null,109,[]],
GG:[function(a,b){var z
if(a>0)z=b>31?0:a>>>b
else{z=b>31?31:b
-z=a>>z>>>0}return z},"call$1","gMe",2,0,null,104,[]],
+z=a>>z>>>0}return z},"call$1","gMe",2,0,null,109,[]],
i:[function(a,b){if(typeof b!=="number")throw H.b(new P.AT(b))
-return(a&b)>>>0},"call$1","gAU",2,0,null,104,[]],
-k:[function(a,b){if(typeof b!=="number")throw H.b(new P.AT(b))
-return(a|b)>>>0},"call$1","gX9",2,0,null,104,[]],
+return(a&b)>>>0},"call$1","gAU",2,0,null,109,[]],
w:[function(a,b){if(typeof b!=="number")throw H.b(P.u(b))
-return(a^b)>>>0},"call$1","gttE",2,0,null,104,[]],
+return(a^b)>>>0},"call$1","gttE",2,0,null,109,[]],
C:[function(a,b){if(typeof b!=="number")throw H.b(P.u(b))
-return a<b},"call$1","gix",2,0,null,104,[]],
+return a<b},"call$1","gix",2,0,null,109,[]],
D:[function(a,b){if(typeof b!=="number")throw H.b(P.u(b))
-return a>b},"call$1","gh1",2,0,null,104,[]],
+return a>b},"call$1","gh1",2,0,null,109,[]],
E:[function(a,b){if(typeof b!=="number")throw H.b(new P.AT(b))
-return a<=b},"call$1","gf5",2,0,null,104,[]],
+return a<=b},"call$1","gER",2,0,null,109,[]],
F:[function(a,b){if(typeof b!=="number")throw H.b(new P.AT(b))
-return a>=b},"call$1","gNH",2,0,null,104,[]],
+return a>=b},"call$1","gNH",2,0,null,109,[]],
$isnum:true,
-static:{"^":"zc,LN"}},
+static:{"^":"SAz,LN"}},
im:{
"^":"int/P;",
gbx:function(a){return C.yw},
@@ -9056,17 +9054,17 @@
$isnum:true},
vT:{
"^":"im;"},
-qa:{
+VP:{
"^":"vT;"},
BQ:{
-"^":"qa;"},
+"^":"VP;"},
O:{
"^":"String/Gv;",
j:[function(a,b){if(typeof b!=="number"||Math.floor(b)!==b)throw H.b(P.u(b))
if(b<0)throw H.b(P.N(b))
if(b>=a.length)throw H.b(P.N(b))
-return a.charCodeAt(b)},"call$1","gSu",2,0,null,47,[]],
-dd:[function(a,b){return H.ZT(a,b)},"call$1","gYv",2,0,null,339,[]],
+return a.charCodeAt(b)},"call$1","gSu",2,0,null,52,[]],
+dd:[function(a,b){return H.ZT(a,b)},"call$1","gYv",2,0,null,336,[]],
wL:[function(a,b,c){var z,y,x,w
if(c<0||c>b.length)throw H.b(P.TE(c,0,b.length))
z=a.length
@@ -9077,21 +9075,21 @@
if(w>=y)H.vh(P.N(w))
w=b.charCodeAt(w)
if(x>=z)H.vh(P.N(x))
-if(w!==a.charCodeAt(x))return}return new H.tQ(c,b,a)},"call$2","grS",2,2,null,335,26,[],120,[]],
+if(w!==a.charCodeAt(x))return}return new H.tQ(c,b,a)},"call$2","grS",2,2,null,332,31,[],123,[]],
g:[function(a,b){if(typeof b!=="string")throw H.b(new P.AT(b))
-return a+b},"call$1","gF1n",2,0,null,104,[]],
+return a+b},"call$1","gF1n",2,0,null,109,[]],
Tc:[function(a,b){var z,y
z=b.length
y=a.length
if(z>y)return!1
-return b===this.yn(a,y-z)},"call$1","gvi",2,0,null,104,[]],
-h8:[function(a,b,c){return H.ys(a,b,c)},"call$2","gcB",4,0,null,105,[],106,[]],
-Fr:[function(a,b){return a.split(b)},"call$1","gOG",2,0,null,98,[]],
+return b===this.yn(a,y-z)},"call$1","gvi",2,0,null,109,[]],
+h8:[function(a,b,c){return H.ys(a,b,c)},"call$2","gcB",4,0,null,110,[],111,[]],
+Fr:[function(a,b){return a.split(b)},"call$1","gOG",2,0,null,103,[]],
Qi:[function(a,b,c){var z
if(c>a.length)throw H.b(P.TE(c,0,a.length))
-if(typeof b==="string"){z=c+b.length
+z=c+b.length
if(z>a.length)return!1
-return b===a.substring(c,z)}return J.I8(b,a,c)!=null},function(a,b){return this.Qi(a,b,0)},"nC","call$2",null,"gcV",2,2,null,335,98,[],47,[]],
+return b===a.substring(c,z)},function(a,b){return this.Qi(a,b,0)},"nC","call$2",null,"gcV",2,2,null,332,103,[],52,[]],
Nj:[function(a,b,c){var z
if(typeof b!=="number"||Math.floor(b)!==b)H.vh(P.u(b))
if(c==null)c=a.length
@@ -9100,19 +9098,35 @@
if(z.C(b,0))throw H.b(P.N(b))
if(z.D(b,c))throw H.b(P.N(b))
if(J.z8(c,a.length))throw H.b(P.N(c))
-return a.substring(b,c)},function(a,b){return this.Nj(a,b,null)},"yn","call$2",null,"gKj",2,2,null,77,80,[],130,[]],
+return a.substring(b,c)},function(a,b){return this.Nj(a,b,null)},"yn","call$2",null,"gKj",2,2,null,82,85,[],133,[]],
hc:[function(a){return a.toLowerCase()},"call$0","gCW",0,0,null],
-bS:[function(a){var z,y,x,w,v
-for(z=a.length,y=0;y<z;){if(y>=z)H.vh(P.N(y))
-x=a.charCodeAt(y)
-if(x===32||x===13||J.Ga(x))++y
-else break}if(y===z)return""
-for(w=z;!0;w=v){v=w-1
-if(v<0)H.vh(P.N(v))
-if(v>=z)H.vh(P.N(v))
-x=a.charCodeAt(v)
-if(x===32||x===13||J.Ga(x));else break}if(y===0&&w===z)return a
-return a.substring(y,w)},"call$0","gZH",0,0,null],
+bS:[function(a){var z,y,x,w,v,u,t,s
+z=a.trim()
+y=z.length
+if(y===0)return z
+x=this.j(z,0)
+if(x===133||x===65279){for(w=1;w<y;){if(w>=y)H.vh(P.N(w))
+v=z.charCodeAt(w)
+if(v===32||v===13||J.Ga(v))++w
+else break}if(w===y)return""}else w=0
+u=y-1
+t=this.j(z,u)
+if(t===133||t===65279)for(;!0;u=s){s=u-1
+if(s<0)H.vh(P.N(s))
+if(s>=y)H.vh(P.N(s))
+v=z.charCodeAt(s)
+if(v===32||v===13||J.Ga(v));else break}else u=y
+if(w===0&&u===y)return z
+return z.substring(w,u)},"call$0","gZH",0,0,null],
+U:[function(a,b){var z,y
+if(typeof b!=="number")return H.s(b)
+if(0>=b)return""
+if(b===1||a.length===0)return a
+if(b!==b>>>0)throw H.b(C.IU)
+for(z=a,y="";!0;){if((b&1)===1)y=z+y
+b=b>>>1
+if(b===0)break
+z+=z}return y},"call$1","gEH",2,0,null,337,[]],
XU:[function(a,b,c){var z,y,x,w
if(b==null)H.vh(new P.AT(null))
if(c<0||c>a.length)throw H.b(P.TE(c,0,a.length))
@@ -9120,7 +9134,7 @@
z=J.rY(b)
if(typeof b==="object"&&b!==null&&!!z.$isVR){y=b.yk(a,c)
return y==null?-1:y.QK.index}for(x=a.length,w=c;w<=x;++w)if(z.wL(b,a,w)!=null)return w
-return-1},function(a,b){return this.XU(a,b,0)},"u8","call$2",null,"gIz",2,2,null,335,98,[],120,[]],
+return-1},function(a,b){return this.XU(a,b,0)},"u8","call$2",null,"gIz",2,2,null,332,103,[],123,[]],
Pk:[function(a,b,c){var z,y,x
c=a.length
if(typeof b==="string"){z=b.length
@@ -9131,17 +9145,17 @@
x=c
while(!0){if(typeof x!=="number")return x.F()
if(!(x>=0))break
-if(z.wL(b,a,x)!=null)return x;--x}return-1},function(a,b){return this.Pk(a,b,null)},"cn","call$2",null,"gph",2,2,null,77,98,[],120,[]],
+if(z.wL(b,a,x)!=null)return x;--x}return-1},function(a,b){return this.Pk(a,b,null)},"cn","call$2",null,"gcb",2,2,null,82,103,[],123,[]],
Is:[function(a,b,c){if(b==null)H.vh(new P.AT(null))
if(c>a.length)throw H.b(P.TE(c,0,a.length))
-return H.m2(a,b,c)},function(a,b){return this.Is(a,b,0)},"tg","call$2",null,"gdj",2,2,null,335,104,[],80,[]],
+return H.m2(a,b,c)},function(a,b){return this.Is(a,b,0)},"tg","call$2",null,"gdj",2,2,null,332,109,[],85,[]],
gl0:function(a){return a.length===0},
gor:function(a){return a.length!==0},
iM:[function(a,b){var z
if(typeof b!=="string")throw H.b(new P.AT(b))
if(a===b)z=0
else z=a<b?-1:1
-return z},"call$1","gYc",2,0,null,104,[]],
+return z},"call$1","gYc",2,0,null,109,[]],
bu:[function(a){return a},"call$0","gXo",0,0,null],
giO:function(a){var z,y,x
for(z=a.length,y=0,x=0;x<z;++x){y=536870911&y+a.charCodeAt(x)
@@ -9153,51 +9167,63 @@
gB:function(a){return a.length},
t:[function(a,b){if(typeof b!=="number"||Math.floor(b)!==b)throw H.b(new P.AT(b))
if(b>=a.length||b<0)throw H.b(P.N(b))
-return a[b]},"call$1","gIA",2,0,null,47,[]],
+return a[b]},"call$1","gIA",2,0,null,52,[]],
$isString:true,
static:{Ga:[function(a){if(a<256)switch(a){case 9:case 10:case 11:case 12:case 13:case 32:case 133:case 160:return!0
default:return!1}switch(a){case 5760:case 6158:case 8192:case 8193:case 8194:case 8195:case 8196:case 8197:case 8198:case 8199:case 8200:case 8201:case 8202:case 8232:case 8233:case 8239:case 8287:case 12288:case 65279:return!0
default:return!1}},"call$1","BD",2,0,null,13,[]]}}}],["_isolate_helper","dart:_isolate_helper",,H,{
"^":"",
-zd:[function(a,b){var z=a.vV(b)
+zd:[function(a,b){var z=a.vV(0,b)
init.globalState.Xz.bL()
return z},"call$2","Ag",4,0,null,14,[],15,[]],
-oT:[function(a){var z,y,x,w,v
-z=new H.f0(0,0,1,null,null,null,null,null,null,null,null,null,a)
-z.i6(a)
-init.globalState=z
+ox:[function(){var z=init.globalState.Xz
+z.GL=z.GL-1},"call$0","q4",0,0,null],
+oT:[function(a,b){var z,y,x,w,v,u
+z={}
+z.a=b
+b=b
+z.a=b
+if(b==null){b=[]
+z.a=b
+y=b}else y=b
+x=J.x(y)
+if(typeof y!=="object"||y===null||y.constructor!==Array&&!x.$isList)throw H.b(new P.AT("Arguments to main must be a List: "+H.d(y)))
+y=new H.f0(0,0,1,null,null,null,null,null,null,null,null,null,a)
+y.i6(a)
+init.globalState=y
if(init.globalState.EF===!0)return
-z=init.globalState
-y=z.Hg
-z.Hg=y+1
-z=P.L5(null,null,null,J.im,H.yo)
-x=P.Ls(null,null,null,J.im)
-w=new H.yo(0,null,!1)
-v=new H.aX(y,z,x,new I(),w,P.Jz(),!1,[],P.Ls(null,null,null,null))
-x.h(0,0)
-v.aU(0,w)
-init.globalState.Nr=v
-init.globalState.N0=v
-z=H.N7()
-y=H.KT(z,[z]).BD(a)
-if(y)v.vV(new H.PK(a))
-else{z=H.KT(z,[z,z]).BD(a)
-if(z)v.vV(new H.JO(a))
-else v.vV(a)}init.globalState.Xz.bL()},"call$1","wr",2,0,null,16,[]],
+y=init.globalState
+x=y.Hg
+y.Hg=x+1
+y=P.L5(null,null,null,J.im,H.yo)
+w=P.Ls(null,null,null,J.im)
+v=new H.yo(0,null,!1)
+u=new H.aX(x,y,w,new I(),v,P.Jz(),P.Jz(),!1,[],P.Ls(null,null,null,null),null,!1)
+w.h(0,0)
+u.aU(0,v)
+init.globalState.Nr=u
+init.globalState.N0=u
+y=H.N7()
+x=H.KT(y,[y]).BD(a)
+if(x)u.vV(0,new H.PK(z,a))
+else{y=H.KT(y,[y,y]).BD(a)
+if(y)u.vV(0,new H.JO(z,a))
+else u.vV(0,a)}init.globalState.Xz.bL()},"call$2","wr",4,0,null,16,[],17,[]],
yl:[function(){var z=init.currentScript
if(z!=null)return String(z.src)
-if(typeof version=="function"&&typeof os=="object"&&"system" in os)return H.ZV()
+if(typeof version=="function"&&typeof os=="object"&&"system" in os)return H.fU()
if(typeof version=="function"&&typeof system=="function")return thisFilename()
+if(init.globalState.EF===!0)return H.fU()
return},"call$0","dY",0,0,null],
-ZV:[function(){var z,y
+fU:[function(){var z,y
z=new Error().stack
if(z==null){z=(function() {try { throw new Error() } catch(e) { return e.stack }})()
if(z==null)throw H.b(P.f("No stack trace"))}y=z.match(new RegExp("^ *at [^(]*\\((.*):[0-9]*:[0-9]*\\)$","m"))
if(y!=null)return y[1]
y=z.match(new RegExp("^[^@]*@(.*):[0-9]*$","m"))
if(y!=null)return y[1]
-throw H.b(P.f("Cannot extract URI from \""+z+"\""))},"call$0","Sx",0,0,null],
-Mg:[function(a,b){var z,y,x,w,v,u,t,s,r,q,p,o,n,m,l,k,j
+throw H.b(P.f("Cannot extract URI from \""+H.d(z)+"\""))},"call$0","mZ",0,0,null],
+Mg:[function(a,b){var z,y,x,w,v,u,t,s,r,q,p,o,n,m,l,k,j,i,h
z=H.Hh(b.data)
y=J.U6(z)
switch(y.t(z,"command")){case"start":init.globalState.oL=y.t(z,"id")
@@ -9206,37 +9232,39 @@
v=y.t(z,"args")
u=H.Hh(y.t(z,"msg"))
t=y.t(z,"isSpawnUri")
-s=H.Hh(y.t(z,"replyTo"))
+s=y.t(z,"startPaused")
+r=H.Hh(y.t(z,"replyTo"))
y=init.globalState
-r=y.Hg
-y.Hg=r+1
+q=y.Hg
+y.Hg=q+1
y=P.L5(null,null,null,J.im,H.yo)
-q=P.Ls(null,null,null,J.im)
-p=new H.yo(0,null,!1)
-o=new H.aX(r,y,q,new I(),p,P.Jz(),!1,[],P.Ls(null,null,null,null))
-q.h(0,0)
-o.aU(0,p)
-init.globalState.Xz.Rk.NZ(0,new H.IY(o,new H.jl(w,v,u,t,s),"worker-start"))
-init.globalState.N0=o
+p=P.Ls(null,null,null,J.im)
+o=new H.yo(0,null,!1)
+n=new H.aX(q,y,p,new I(),o,P.Jz(),P.Jz(),!1,[],P.Ls(null,null,null,null),null,!1)
+p.h(0,0)
+n.aU(0,o)
+init.globalState.Xz.Rk.NZ(0,new H.IY(n,new H.jl(w,v,u,t,s,r),"worker-start"))
+init.globalState.N0=n
init.globalState.Xz.bL()
break
-case"spawn-worker":r=y.t(z,"functionName")
-n=y.t(z,"uri")
-q=y.t(z,"args")
-p=y.t(z,"msg")
-m=y.t(z,"isSpawnUri")
+case"spawn-worker":q=y.t(z,"functionName")
+m=y.t(z,"uri")
+p=y.t(z,"args")
+o=y.t(z,"msg")
+l=y.t(z,"isSpawnUri")
+k=y.t(z,"startPaused")
y=y.t(z,"replyPort")
-if(n==null)n=$.Cl()
-l=new Worker(n)
-l.onmessage=function(e) { H.Mg(l, e); }
-k=init.globalState
-j=k.hJ
-k.hJ=j+1
-$.p6().u(0,l,j)
-init.globalState.XC.u(0,j,l)
-l.postMessage(H.Gy(H.B7(["command","start","id",j,"replyTo",H.Gy(y),"args",q,"msg",H.Gy(p),"isSpawnUri",m,"functionName",r],P.L5(null,null,null,null,null))))
+if(m==null)m=$.Cl()
+j=new Worker(m)
+j.onmessage=function(e) { H.Mg(j, e); }
+i=init.globalState
+h=i.hJ
+i.hJ=h+1
+$.p6().u(0,j,h)
+init.globalState.XC.u(0,h,j)
+j.postMessage(H.Gy(H.B7(["command","start","id",h,"replyTo",H.Gy(y),"args",p,"msg",H.Gy(o),"isSpawnUri",l,"startPaused",k,"functionName",q],P.L5(null,null,null,null,null))))
break
-case"message":if(y.t(z,"port")!=null)J.H4(y.t(z,"port"),y.t(z,"msg"))
+case"message":if(y.t(z,"port")!=null)J.Sq(y.t(z,"port"),y.t(z,"msg"))
init.globalState.Xz.bL()
break
case"close":init.globalState.XC.Rz(0,$.p6().t(0,a))
@@ -9246,39 +9274,51 @@
case"log":H.ZF(y.t(z,"msg"))
break
case"print":if(init.globalState.EF===!0){y=init.globalState.vd
-r=H.Gy(H.B7(["command","print","msg",z],P.L5(null,null,null,null,null)))
+q=H.Gy(H.B7(["command","print","msg",z],P.L5(null,null,null,null,null)))
y.toString
-self.postMessage(r)}else P.JS(y.t(z,"msg"))
+self.postMessage(q)}else P.JS(y.t(z,"msg"))
break
case"error":throw H.b(y.t(z,"msg"))
-default:}},"call$2","NB",4,0,null,17,[],18,[]],
+default:}},"call$2","NB",4,0,null,18,[],19,[]],
ZF:[function(a){var z,y,x,w
if(init.globalState.EF===!0){y=init.globalState.vd
x=H.Gy(H.B7(["command","log","msg",a],P.L5(null,null,null,null,null)))
y.toString
self.postMessage(x)}else try{$.jk().console.log(a)}catch(w){H.Ru(w)
z=new H.XO(w,null)
-throw H.b(P.FM(z))}},"call$1","o3",2,0,null,19,[]],
+throw H.b(P.FM(z))}},"call$1","o3",2,0,null,20,[]],
+Ws:[function(a,b,c,d,e,f){var z,y,x,w
+z=init.globalState.N0
+y=z.jO
+$.te=$.te+("_"+y)
+$.eb=$.eb+("_"+y)
+y=z.EE
+x=init.globalState.N0.jO
+w=z.Qy
+J.Sq(f,["spawned",new H.Z6(y,x),w,z.PX])
+x=new H.Vg(a,b,c,d)
+if(e===!0){z.v8(w,w)
+init.globalState.Xz.Rk.NZ(0,new H.IY(z,x,"start isolate"))}else x.call$0()},"call$6","op",12,0,null,21,[],17,[],22,[],23,[],24,[],25,[]],
Gy:[function(a){var z
if(init.globalState.ji===!0){z=new H.NA(0,new H.X1())
z.il=new H.fP(null)
return z.h7(a)}else{z=new H.NO(new H.X1())
z.il=new H.fP(null)
-return z.h7(a)}},"call$1","hX",2,0,null,20,[]],
+return z.h7(a)}},"call$1","hX",2,0,null,22,[]],
Hh:[function(a){if(init.globalState.ji===!0)return new H.II(null).QS(a)
-else return a},"call$1","m6",2,0,null,20,[]],
-VO:[function(a){return a==null||typeof a==="string"||typeof a==="number"||typeof a==="boolean"},"call$1","vP",2,0,null,21,[]],
-ZR:[function(a){return a==null||typeof a==="string"||typeof a==="number"||typeof a==="boolean"},"call$1","dD",2,0,null,21,[]],
+else return a},"call$1","jr",2,0,null,22,[]],
+VO:[function(a){return a==null||typeof a==="string"||typeof a==="number"||typeof a==="boolean"},"call$1","vP",2,0,null,26,[]],
+ZR:[function(a){return a==null||typeof a==="string"||typeof a==="number"||typeof a==="boolean"},"call$1","dD",2,0,null,26,[]],
PK:{
-"^":"Tp:113;a",
-call$0:[function(){this.a.call$1([])},"call$0",null,0,0,null,"call"],
+"^":"Tp:115;a,b",
+call$0:[function(){this.b.call$1(this.a.a)},"call$0",null,0,0,null,"call"],
$isEH:true},
JO:{
-"^":"Tp:113;b",
-call$0:[function(){this.b.call$2([],null)},"call$0",null,0,0,null,"call"],
+"^":"Tp:115;a,c",
+call$0:[function(){this.c.call$2(this.a.a,null)},"call$0",null,0,0,null,"call"],
$isEH:true},
f0:{
-"^":"a;Hg,oL,hJ,N0,Nr,Xz,vu,EF,ji,i2@,vd,XC,w2<",
+"^":"a;Hg,oL,hJ,N0,Nr,Xz,vu,EF,ji,i2*,vd,XC,w2<",
i6:function(a){var z,y,x,w
z=$.Qm()==null
y=$.Nl()
@@ -9297,9 +9337,10 @@
$.jk().onmessage=w
$.jk().dartPrint = function (object) {}}}},
aX:{
-"^":"a;jO>,Gx,fW,En<,EE<,Qy,RW<,C9<,lJ",
+"^":"a;jO>,Gx,fW,En<,EE<,Qy,PX,RW<,C9<,lJ,Jp,pa",
v8:[function(a,b){if(!this.Qy.n(0,a))return
-if(this.lJ.h(0,b)&&!this.RW)this.RW=!0},"call$2","gfU",4,0,null,340,[],341,[]],
+if(this.lJ.h(0,b)&&!this.RW)this.RW=!0
+this.PC()},"call$2","gfU",4,0,null,338,[],339,[]],
NR:[function(a){var z,y,x,w,v,u
if(!this.RW)return
z=this.lJ
@@ -9315,30 +9356,55 @@
if(w<0||w>=u)return H.e(v,w)
v[w]=x
if(w===y.eZ)y.VW()
-y.qT=y.qT+1}this.RW=!1}},"call$1","gtS",2,0,null,341,[]],
-vV:[function(a){var z,y
+y.qT=y.qT+1}this.RW=!1}this.PC()},"call$1","gtS",2,0,null,339,[]],
+iK:[function(a){var z=this.Jp
+if(z==null){z=[]
+this.Jp=z}if(J.kE(z,a))return
+this.Jp.push(a)},"call$1","gYd",2,0,null,340,[]],
+Hh:[function(a){var z=this.Jp
+if(z==null)return
+J.V1(z,a)},"call$1","gr9",2,0,null,340,[]],
+MZ:[function(a,b){if(!this.PX.n(0,a))return
+this.pa=b},"call$2","gvm",4,0,null,338,[],341,[]],
+Wq:[function(a,b){if(J.de(b,2))init.globalState.Xz.Rk.NZ(0,new H.IY(this,new H.oU(a),"ping"))
+else J.Sq(a,null)},"call$2","gWL",4,0,null,340,[],342,[]],
+vV:[function(a,b){var z,y
z=init.globalState.N0
init.globalState.N0=this
$=this.En
y=null
-try{y=a.call$0()}finally{init.globalState.N0=z
-if(z!=null)$=z.gEn()}return y},"call$1","gZm",2,0,null,141,[]],
+try{y=b.call$0()}finally{init.globalState.N0=z
+if(z!=null)$=z.gEn()}return y},"call$1","gZm",2,0,null,143,[]],
Ds:[function(a){var z=J.U6(a)
switch(z.t(a,0)){case"pause":this.v8(z.t(a,1),z.t(a,2))
break
case"resume":this.NR(z.t(a,1))
break
-default:P.JS("UNKOWN MESSAGE: "+H.d(a))}},"call$1","gNo",2,0,null,20,[]],
-Zt:[function(a){return this.Gx.t(0,a)},"call$1","gQB",2,0,null,342,[]],
+case"add-ondone":this.iK(z.t(a,1))
+break
+case"remove-ondone":this.Hh(z.t(a,1))
+break
+case"set-errors-fatal":this.MZ(z.t(a,1),z.t(a,2))
+break
+case"ping":this.Wq(z.t(a,1),z.t(a,2))
+break
+default:P.JS("UNKNOWN MESSAGE: "+H.d(a))}},"call$1","gNo",2,0,null,22,[]],
+Zt:[function(a){return this.Gx.t(0,a)},"call$1","gQB",2,0,null,343,[]],
aU:[function(a,b){var z=this.Gx
if(z.x4(a))throw H.b(P.FM("Registry: ports must be registered only once."))
-z.u(0,a,b)},"call$2","gPn",4,0,null,342,[],343,[]],
-PC:[function(){var z=this.jO
-if(this.Gx.X5-this.fW.X5>0)init.globalState.i2.u(0,z,this)
-else init.globalState.i2.Rz(0,z)},"call$0","gi8",0,0,null],
+z.u(0,a,b)},"call$2","gPn",4,0,null,343,[],344,[]],
+PC:[function(){if(this.Gx.X5-this.fW.X5>0||this.RW)J.kW(init.globalState.i2,this.jO,this)
+else this.UM()},"call$0","gi8",0,0,null],
+UM:[function(){J.V1(init.globalState.i2,this.jO)
+var z=this.Jp
+if(z!=null)for(z=H.VM(new H.a7(z,z.length,0,null),[H.Kp(z,0)]);z.G();)J.Sq(z.lo,null)},"call$0","gAh",0,0,null],
$isaX:true},
+oU:{
+"^":"Tp:115;a",
+call$0:[function(){J.Sq(this.a,null)},"call$0",null,0,0,null,"call"],
+$isEH:true},
cC:{
-"^":"a;Rk,bZ",
+"^":"a;Rk,GL",
Jc:[function(){var z,y,x,w,v
z=this.Rk
y=z.av
@@ -9350,12 +9416,12 @@
v=x[y]
x[y]=null
z.av=(y+1&w-1)>>>0
-return v},"call$0","glk",0,0,null],
+return v},"call$0","gRe",0,0,null],
xB:[function(){var z,y,x
z=this.Jc()
-if(z==null){if(init.globalState.Nr!=null&&init.globalState.i2.x4(init.globalState.Nr.jO)&&init.globalState.vu===!0&&init.globalState.Nr.Gx.X5===0)H.vh(P.FM("Program exited with open ReceivePorts."))
+if(z==null){if(init.globalState.Nr!=null&&init.globalState.i2.x4(init.globalState.Nr.jO)===!0&&init.globalState.vu===!0&&init.globalState.Nr.Gx.X5===0)H.vh(P.FM("Program exited with open ReceivePorts."))
y=init.globalState
-if(y.EF===!0&&y.i2.X5===0&&y.Xz.bZ===0){y=y.vd
+if(y.EF===!0&&J.FN(y.i2)===!0&&y.Xz.GL===0){y=y.vd
x=H.Gy(H.B7(["command","close"],P.L5(null,null,null,null,null)))
y.toString
self.postMessage(x)}return!1}z.VU()
@@ -9372,34 +9438,31 @@
w.toString
self.postMessage(v)}},"call$0","gcP",0,0,null]},
RA:{
-"^":"Tp:112;a",
+"^":"Tp:114;a",
call$0:[function(){if(!this.a.xB())return
P.rT(C.ny,this)},"call$0",null,0,0,null,"call"],
$isEH:true},
IY:{
-"^":"a;Aq*,i3,G1*",
-VU:[function(){if(this.Aq.gRW()){this.Aq.gC9().push(this)
-return}this.Aq.vV(this.i3)},"call$0","gbF",0,0,null],
+"^":"a;F1*,i3,G1*",
+VU:[function(){if(this.F1.gRW()){this.F1.gC9().push(this)
+return}J.yn(this.F1,this.i3)},"call$0","gjF",0,0,null],
$isIY:true},
JH:{
"^":"a;"},
jl:{
-"^":"Tp:113;a,b,c,d,e",
-call$0:[function(){var z,y,x,w,v,u
-z=this.a
-y=this.b
-x=this.c
-w=init.globalState.N0
-v=w.jO
-$.te=$.te+("_"+v)
-$.eb=$.eb+("_"+v)
-J.H4(this.e,["spawned",new H.Z6(w.EE,init.globalState.N0.jO),w.Qy])
-if(this.d!==!0)z.call$1(x)
-else{v=H.N7()
-u=H.KT(v,[v,v]).BD(z)
-if(u)z.call$2(y,x)
-else{x=H.KT(v,[v]).BD(z)
-if(x)z.call$1(y)
+"^":"Tp:115;a,b,c,d,e,f",
+call$0:[function(){H.Ws(this.a,this.b,this.c,this.d,this.e,this.f)},"call$0",null,0,0,null,"call"],
+$isEH:true},
+Vg:{
+"^":"Tp:114;a,b,c,d",
+call$0:[function(){var z,y,x
+if(this.d!==!0)this.a.call$1(this.c)
+else{z=this.a
+y=H.N7()
+x=H.KT(y,[y,y]).BD(z)
+if(x)z.call$2(this.b,this.c)
+else{y=H.KT(y,[y]).BD(z)
+if(y)z.call$1(this.b)
else z.call$0()}}},"call$0",null,0,0,null,"call"],
$isEH:true},
Iy:{
@@ -9407,10 +9470,10 @@
$isbC:true},
Z6:{
"^":"Iy;JE,Jz",
-wR:[function(a,b){var z,y,x,w,v
+zY:[function(a,b){var z,y,x,w,v
z={}
y=this.Jz
-x=init.globalState.i2.t(0,y)
+x=J.UQ(init.globalState.i2,y)
if(x==null)return
w=this.JE
if(w.gP0())return
@@ -9420,16 +9483,16 @@
if(x.gEE()===w){x.Ds(z.a)
return}y=init.globalState.Xz
w="receive "+H.d(b)
-y.Rk.NZ(0,new H.IY(x,new H.Ua(z,this,v),w))},"call$1","gX8",2,0,null,20,[]],
+y.Rk.NZ(0,new H.IY(x,new H.Ua(z,this,v),w))},"call$1","gX8",2,0,null,22,[]],
n:[function(a,b){var z
if(b==null)return!1
z=J.x(b)
-return typeof b==="object"&&b!==null&&!!z.$isZ6&&J.de(this.JE,b.JE)},"call$1","gUJ",2,0,null,104,[]],
+return typeof b==="object"&&b!==null&&!!z.$isZ6&&J.de(this.JE,b.JE)},"call$1","gUJ",2,0,null,109,[]],
giO:function(a){return J.td(this.JE)},
$isZ6:true,
$isbC:true},
Ua:{
-"^":"Tp:113;a,b,c",
+"^":"Tp:115;a,b,c",
call$0:[function(){var z,y
z=this.b.JE
if(!z.gP0()){if(this.c){y=this.a
@@ -9437,15 +9500,15 @@
$isEH:true},
ns:{
"^":"Iy;hQ,bv,Jz",
-wR:[function(a,b){var z,y
+zY:[function(a,b){var z,y
z=H.Gy(H.B7(["command","message","port",this,"msg",b],P.L5(null,null,null,null,null)))
if(init.globalState.EF===!0){init.globalState.vd.toString
self.postMessage(z)}else{y=init.globalState.XC.t(0,this.hQ)
-if(y!=null)y.postMessage(z)}},"call$1","gX8",2,0,null,20,[]],
+if(y!=null)y.postMessage(z)}},"call$1","gX8",2,0,null,22,[]],
n:[function(a,b){var z
if(b==null)return!1
z=J.x(b)
-return typeof b==="object"&&b!==null&&!!z.$isns&&J.de(this.hQ,b.hQ)&&J.de(this.Jz,b.Jz)&&J.de(this.bv,b.bv)},"call$1","gUJ",2,0,null,104,[]],
+return typeof b==="object"&&b!==null&&!!z.$isns&&J.de(this.hQ,b.hQ)&&J.de(this.Jz,b.Jz)&&J.de(this.bv,b.bv)},"call$1","gUJ",2,0,null,109,[]],
giO:function(a){var z,y,x
z=J.c1(this.hQ,16)
y=J.c1(this.Jz,8)
@@ -9467,23 +9530,23 @@
z.fW.Rz(0,y)
z.PC()},"call$0","gJK",0,0,null],
FL:[function(a,b){if(this.P0)return
-this.wy(b)},"call$1","gT5",2,0,null,344,[]],
+this.wy(b)},"call$1","gT5",2,0,null,345,[]],
$isyo:true,
static:{"^":"Vz"}},
NA:{
-"^":"Dd;CN,il",
+"^":"Tf;CN,il",
DE:[function(a){if(!!a.$isZ6)return["sendport",init.globalState.oL,a.Jz,J.td(a.JE)]
if(!!a.$isns)return["sendport",a.hQ,a.Jz,a.bv]
-throw H.b("Illegal underlying port "+H.d(a))},"call$1","goi",2,0,null,21,[]],
+throw H.b("Illegal underlying port "+H.d(a))},"call$1","goi",2,0,null,26,[]],
yf:[function(a){if(!!a.$isku)return["capability",a.ng]
-throw H.b("Capability not serializable: "+H.d(a))},"call$1","gbM",2,0,null,21,[]]},
+throw H.b("Capability not serializable: "+H.d(a))},"call$1","gbM",2,0,null,26,[]]},
NO:{
-"^":"oo;il",
+"^":"Nt;il",
DE:[function(a){if(!!a.$isZ6)return new H.Z6(a.JE,a.Jz)
if(!!a.$isns)return new H.ns(a.hQ,a.bv,a.Jz)
-throw H.b("Illegal underlying port "+H.d(a))},"call$1","goi",2,0,null,21,[]],
+throw H.b("Illegal underlying port "+H.d(a))},"call$1","goi",2,0,null,26,[]],
yf:[function(a){if(!!a.$isku)return new H.ku(a.ng)
-throw H.b("Capability not serializable: "+H.d(a))},"call$1","gbM",2,0,null,21,[]]},
+throw H.b("Capability not serializable: "+H.d(a))},"call$1","gbM",2,0,null,26,[]]},
II:{
"^":"AP;RZ",
Vf:[function(a){var z,y,x,w,v,u
@@ -9491,17 +9554,17 @@
y=z.t(a,1)
x=z.t(a,2)
w=z.t(a,3)
-if(J.de(y,init.globalState.oL)){v=init.globalState.i2.t(0,x)
+if(J.de(y,init.globalState.oL)){v=J.UQ(init.globalState.i2,x)
if(v==null)return
u=v.Zt(w)
if(u==null)return
-return new H.Z6(u,x)}else return new H.ns(y,w,x)},"call$1","gTm",2,0,null,68,[]],
-Op:[function(a){return new H.ku(J.UQ(a,1))},"call$1","gID",2,0,null,68,[]]},
+return new H.Z6(u,x)}else return new H.ns(y,w,x)},"call$1","gTm",2,0,null,73,[]],
+Op:[function(a){return new H.ku(J.UQ(a,1))},"call$1","gID",2,0,null,73,[]]},
fP:{
"^":"a;MD",
t:[function(a,b){return b.__MessageTraverser__attached_info__},"call$1","gIA",2,0,null,6,[]],
u:[function(a,b,c){this.MD.push(b)
-b.__MessageTraverser__attached_info__=c},"call$2","gj3",4,0,null,6,[],345,[]],
+b.__MessageTraverser__attached_info__=c},"call$2","gj3",4,0,null,6,[],346,[]],
Hn:[function(a){this.MD=[]},"call$0","gb6",0,0,null],
Xq:[function(){var z,y,x
for(z=this.MD.length,y=0;y<z;++y){x=this.MD
@@ -9510,28 +9573,28 @@
X1:{
"^":"a;",
t:[function(a,b){return},"call$1","gIA",2,0,null,6,[]],
-u:[function(a,b,c){},"call$2","gj3",4,0,null,6,[],345,[]],
+u:[function(a,b,c){},"call$2","gj3",4,0,null,6,[],346,[]],
Hn:[function(a){},"call$0","gb6",0,0,null],
-Xq:[function(){return},"call$0","gt6",0,0,null]},
+Xq:[function(){},"call$0","gt6",0,0,null]},
HU:{
"^":"a;",
h7:[function(a){var z
if(H.VO(a))return this.Pq(a)
this.il.Hn(0)
z=null
-try{z=this.I8(a)}finally{this.il.Xq()}return z},"call$1","gyU",2,0,null,21,[]],
+try{z=this.I8(a)}finally{this.il.Xq()}return z},"call$1","gyU",2,0,null,26,[]],
I8:[function(a){var z
if(a==null||typeof a==="string"||typeof a==="number"||typeof a==="boolean")return this.Pq(a)
z=J.x(a)
if(typeof a==="object"&&a!==null&&(a.constructor===Array||!!z.$isList))return this.wb(a)
if(typeof a==="object"&&a!==null&&!!z.$isZ0)return this.TI(a)
if(typeof a==="object"&&a!==null&&!!z.$isbC)return this.DE(a)
-if(typeof a==="object"&&a!==null&&!!z.$isIU)return this.yf(a)
-return this.YZ(a)},"call$1","gRQ",2,0,null,21,[]],
-YZ:[function(a){throw H.b("Message serialization: Illegal value "+H.d(a)+" passed")},"call$1","gSG",2,0,null,21,[]]},
-oo:{
+if(typeof a==="object"&&a!==null&&!!z.$ishq)return this.yf(a)
+return this.YZ(a)},"call$1","gRQ",2,0,null,26,[]],
+YZ:[function(a){throw H.b("Message serialization: Illegal value "+H.d(a)+" passed")},"call$1","gSG",2,0,null,26,[]]},
+Nt:{
"^":"HU;",
-Pq:[function(a){return a},"call$1","gKz",2,0,null,21,[]],
+Pq:[function(a){return a},"call$1","gKz",2,0,null,26,[]],
wb:[function(a){var z,y,x,w,v,u
z=this.il.t(0,a)
if(z!=null)return z
@@ -9543,7 +9606,7 @@
this.il.u(0,a,z)
for(w=z.length,v=0;v<x;++v){u=this.I8(y.t(a,v))
if(v>=w)return H.e(z,v)
-z[v]=u}return z},"call$1","gqb",2,0,null,68,[]],
+z[v]=u}return z},"call$1","gHc",2,0,null,73,[]],
TI:[function(a){var z,y
z={}
y=this.il.t(0,a)
@@ -9553,31 +9616,31 @@
z.a=y
this.il.u(0,a,y)
a.aN(0,new H.OW(z,this))
-return z.a},"call$1","gnM",2,0,null,149,[]],
-DE:[function(a){return H.vh(P.SY(null))},"call$1","goi",2,0,null,21,[]],
-yf:[function(a){return H.vh(P.SY(null))},"call$1","gbM",2,0,null,21,[]]},
+return z.a},"call$1","gnM",2,0,null,151,[]],
+DE:[function(a){return H.vh(P.SY(null))},"call$1","goi",2,0,null,26,[]],
+yf:[function(a){return H.vh(P.SY(null))},"call$1","gbM",2,0,null,26,[]]},
OW:{
-"^":"Tp:346;a,b",
+"^":"Tp:348;a,b",
call$2:[function(a,b){var z=this.b
-J.kW(this.a.a,z.I8(a),z.I8(b))},"call$2",null,4,0,null,42,[],211,[],"call"],
+J.kW(this.a.a,z.I8(a),z.I8(b))},"call$2",null,4,0,null,47,[],347,[],"call"],
$isEH:true},
-Dd:{
+Tf:{
"^":"HU;",
-Pq:[function(a){return a},"call$1","gKz",2,0,null,21,[]],
+Pq:[function(a){return a},"call$1","gKz",2,0,null,26,[]],
wb:[function(a){var z,y
z=this.il.t(0,a)
if(z!=null)return["ref",z]
y=this.CN
this.CN=y+1
this.il.u(0,a,y)
-return["list",y,this.mE(a)]},"call$1","gqb",2,0,null,68,[]],
+return["list",y,this.mE(a)]},"call$1","gHc",2,0,null,73,[]],
TI:[function(a){var z,y
z=this.il.t(0,a)
if(z!=null)return["ref",z]
y=this.CN
this.CN=y+1
this.il.u(0,a,y)
-return["map",y,this.mE(J.qA(a.gvc(a))),this.mE(J.qA(a.gUQ(a)))]},"call$1","gnM",2,0,null,149,[]],
+return["map",y,this.mE(J.qA(a.gvc(a))),this.mE(J.qA(a.gUQ(a)))]},"call$1","gnM",2,0,null,151,[]],
mE:[function(a){var z,y,x,w,v
z=J.U6(a)
y=z.gB(a)
@@ -9587,14 +9650,14 @@
w=0
for(;w<y;++w){v=this.I8(z.t(a,w))
if(w>=x.length)return H.e(x,w)
-x[w]=v}return x},"call$1","gBv",2,0,null,68,[]],
-DE:[function(a){return H.vh(P.SY(null))},"call$1","goi",2,0,null,21,[]],
-yf:[function(a){return H.vh(P.SY(null))},"call$1","gbM",2,0,null,21,[]]},
+x[w]=v}return x},"call$1","gEa",2,0,null,73,[]],
+DE:[function(a){return H.vh(P.SY(null))},"call$1","goi",2,0,null,26,[]],
+yf:[function(a){return H.vh(P.SY(null))},"call$1","gbM",2,0,null,26,[]]},
AP:{
"^":"a;",
QS:[function(a){if(H.ZR(a))return a
this.RZ=P.Py(null,null,null,null,null)
-return this.XE(a)},"call$1","gia",2,0,null,21,[]],
+return this.XE(a)},"call$1","gia",2,0,null,26,[]],
XE:[function(a){var z,y
if(a==null||typeof a==="string"||typeof a==="number"||typeof a==="boolean")return a
z=J.U6(a)
@@ -9604,7 +9667,7 @@
case"map":return this.tv(a)
case"sendport":return this.Vf(a)
case"capability":return this.Op(a)
-default:return this.PR(a)}},"call$1","gN3",2,0,null,21,[]],
+default:return this.PR(a)}},"call$1","gn0",2,0,null,26,[]],
Dj:[function(a){var z,y,x,w,v
z=J.U6(a)
y=z.t(a,1)
@@ -9615,7 +9678,7 @@
if(typeof w!=="number")return H.s(w)
v=0
for(;v<w;++v)z.u(x,v,this.XE(z.t(x,v)))
-return x},"call$1","gMS",2,0,null,21,[]],
+return x},"call$1","gMS",2,0,null,26,[]],
tv:[function(a){var z,y,x,w,v,u,t,s
z=P.L5(null,null,null,null,null)
y=J.U6(a)
@@ -9629,19 +9692,15 @@
t=J.U6(v)
s=0
for(;s<u;++s)z.u(0,this.XE(y.t(w,s)),this.XE(t.t(v,s)))
-return z},"call$1","gwq",2,0,null,21,[]],
-PR:[function(a){throw H.b("Unexpected serialized object")},"call$1","gw1",2,0,null,21,[]]},
+return z},"call$1","gwq",2,0,null,26,[]],
+PR:[function(a){throw H.b("Unexpected serialized object")},"call$1","gw1",2,0,null,26,[]]},
yH:{
"^":"a;Kf,zu,p9",
-ed:[function(){var z,y,x
-z=$.jk()
-if(z.setTimeout!=null){if(this.zu)throw H.b(P.f("Timer in event loop cannot be canceled."))
-y=this.p9
-if(y==null)return
-x=init.globalState.Xz
-x.bZ=x.bZ-1
-if(this.Kf)z.clearTimeout(y)
-else z.clearInterval(y)
+ed:[function(){if($.jk().setTimeout!=null){if(this.zu)throw H.b(P.f("Timer in event loop cannot be canceled."))
+if(this.p9==null)return
+H.ox()
+if(this.Kf)$.jk().clearTimeout(this.p9)
+else $.jk().clearInterval(this.p9)
this.p9=null}else throw H.b(P.f("Canceling a timer."))},"call$0","gZS",0,0,null],
Qa:function(a,b){var z,y
if(a===0)z=$.jk().setTimeout==null||init.globalState.EF===!0
@@ -9652,21 +9711,20 @@
z.Rk.NZ(0,new H.IY(y,new H.FA(this,b),"timer"))
this.zu=!0}else{z=$.jk()
if(z.setTimeout!=null){y=init.globalState.Xz
-y.bZ=y.bZ+1
+y.GL=y.GL+1
this.p9=z.setTimeout(H.tR(new H.Av(this,b),0),a)}else throw H.b(P.f("Timer greater than 0."))}},
static:{cy:function(a,b){var z=new H.yH(!0,!1,null)
z.Qa(a,b)
return z}}},
FA:{
-"^":"Tp:112;a,b",
+"^":"Tp:114;a,b",
call$0:[function(){this.a.p9=null
this.b.call$0()},"call$0",null,0,0,null,"call"],
$isEH:true},
Av:{
-"^":"Tp:112;c,d",
+"^":"Tp:114;c,d",
call$0:[function(){this.c.p9=null
-var z=init.globalState.Xz
-z.bZ=z.bZ-1
+H.ox()
this.d.call$0()},"call$0",null,0,0,null,"call"],
$isEH:true},
ku:{
@@ -9688,14 +9746,14 @@
z=J.x(b)
if(typeof b==="object"&&b!==null&&!!z.$isku){z=this.ng
y=b.ng
-return z==null?y==null:z===y}return!1},"call$1","gUJ",2,0,null,104,[]],
+return z==null?y==null:z===y}return!1},"call$1","gUJ",2,0,null,109,[]],
$isku:true,
-$isIU:true}}],["_js_helper","dart:_js_helper",,H,{
+$ishq:true}}],["_js_helper","dart:_js_helper",,H,{
"^":"",
wV:[function(a,b){var z,y
if(b!=null){z=b.x
if(z!=null)return z}y=J.x(a)
-return typeof a==="object"&&a!==null&&!!y.$isXj},"call$2","b3",4,0,null,6,[],22,[]],
+return typeof a==="object"&&a!==null&&!!y.$isXj},"call$2","b3",4,0,null,6,[],27,[]],
d:[function(a){var z
if(typeof a==="string")return a
if(typeof a==="number"){if(a!==0)return""+a}else if(!0===a)return"true"
@@ -9703,12 +9761,12 @@
else if(a==null)return"null"
z=J.AG(a)
if(typeof z!=="string")throw H.b(P.u(a))
-return z},"call$1","Sa",2,0,null,23,[]],
-Hz:[function(a){throw H.b(P.f("Can't use '"+H.d(a)+"' in reflection because it is not included in a @MirrorsUsed annotation."))},"call$1","IT",2,0,null,24,[]],
+return z},"call$1","mQ",2,0,null,28,[]],
+Hz:[function(a){throw H.b(P.f("Can't use '"+H.d(a)+"' in reflection because it is not included in a @MirrorsUsed annotation."))},"call$1","IT",2,0,null,29,[]],
eQ:[function(a){var z=a.$identityHash
if(z==null){z=Math.random()*0x3fffffff|0
a.$identityHash=z}return z},"call$1","Y0",2,0,null,6,[]],
-vx:[function(a){throw H.b(P.cD(a))},"call$1","Rm",2,0,25,26,[]],
+vx:[function(a){throw H.b(P.cD(a))},"call$1","Rm",2,0,30,31,[]],
BU:[function(a,b,c){var z,y,x,w,v,u
if(c==null)c=H.Rm()
if(typeof a!=="string")H.vh(new P.AT(a))
@@ -9735,7 +9793,7 @@
if(!(v<u))break
y.j(w,0)
if(y.j(w,v)>x)return c.call$1(a);++v}}}}if(z==null)return c.call$1(a)
-return parseInt(a,b)},"call$3","Yv",6,0,null,27,[],28,[],29,[]],
+return parseInt(a,b)},"call$3","Yv",6,0,null,32,[],33,[],34,[]],
IH:[function(a,b){var z,y
if(typeof a!=="string")H.vh(new P.AT(a))
if(b==null)b=H.Rm()
@@ -9743,7 +9801,7 @@
z=parseFloat(a)
if(isNaN(z)){y=J.rr(a)
if(y==="NaN"||y==="+NaN"||y==="-NaN")return z
-return b.call$1(a)}return z},"call$2","zb",4,0,null,27,[],29,[]],
+return b.call$1(a)}return z},"call$2","zb",4,0,null,32,[],34,[]],
lh:[function(a){var z,y,x
z=C.AS(J.x(a))
if(z==="Object"){y=String(a.constructor).match(/^\s*function\s*(\S*)\s*\(/)[1]
@@ -9757,7 +9815,7 @@
for(y=z<=500,x="",w=0;w<z;w+=500){if(y)v=a
else{u=w+500
u=u<z?u:z
-v=a.slice(w,u)}x+=String.fromCharCode.apply(null,v)}return x},"call$1","ma",2,0,null,30,[]],
+v=a.slice(w,u)}x+=String.fromCharCode.apply(null,v)}return x},"call$1","Zl",2,0,null,35,[]],
Cq:[function(a){var z,y,x
z=[]
z.$builtinTypeInfo=[J.im]
@@ -9767,12 +9825,12 @@
if(typeof x!=="number"||Math.floor(x)!==x)throw H.b(P.u(x))
if(x<=65535)z.push(x)
else if(x<=1114111){z.push(55296+(C.jn.GG(x-65536,10)&1023))
-z.push(56320+(x&1023))}else throw H.b(P.u(x))}return H.VK(z)},"call$1","AL",2,0,null,31,[]],
+z.push(56320+(x&1023))}else throw H.b(P.u(x))}return H.VK(z)},"call$1","AL",2,0,null,36,[]],
eT:[function(a){var z,y
for(z=H.VM(new H.a7(a,a.length,0,null),[H.Kp(a,0)]);z.G();){y=z.lo
if(typeof y!=="number"||Math.floor(y)!==y)throw H.b(P.u(y))
if(y<0)throw H.b(P.u(y))
-if(y>65535)return H.Cq(a)}return H.VK(a)},"call$1","Wb",2,0,null,32,[]],
+if(y>65535)return H.Cq(a)}return H.VK(a)},"call$1","Wb",2,0,null,37,[]],
zW:[function(a,b,c,d,e,f,g,h){var z,y,x,w
if(typeof a!=="number"||Math.floor(a)!==a)H.vh(new P.AT(a))
if(typeof b!=="number"||Math.floor(b)!==b)H.vh(new P.AT(b))
@@ -9787,13 +9845,13 @@
if(x.E(a,0)||x.C(a,100)){w=new Date(y)
if(h)w.setUTCFullYear(a)
else w.setFullYear(a)
-return w.valueOf()}return y},"call$8","mV",16,0,null,33,[],34,[],35,[],36,[],37,[],38,[],39,[],40,[]],
+return w.valueOf()}return y},"call$8","mV",16,0,null,38,[],39,[],40,[],41,[],42,[],43,[],44,[],45,[]],
o2:[function(a){if(a.date===void 0)a.date=new Date(a.y3)
-return a.date},"call$1","j1",2,0,null,41,[]],
+return a.date},"call$1","j1",2,0,null,46,[]],
of:[function(a,b){if(a==null||typeof a==="boolean"||typeof a==="number"||typeof a==="string")throw H.b(new P.AT(a))
-return a[b]},"call$2","De",4,0,null,6,[],42,[]],
+return a[b]},"call$2","De",4,0,null,6,[],47,[]],
aw:[function(a,b,c){if(a==null||typeof a==="boolean"||typeof a==="number"||typeof a==="string")throw H.b(new P.AT(a))
-a[b]=c},"call$3","WJ",6,0,null,6,[],42,[],23,[]],
+a[b]=c},"call$3","WJ",6,0,null,6,[],47,[],28,[]],
zo:[function(a,b,c){var z,y,x
z={}
z.a=0
@@ -9802,8 +9860,8 @@
if(b!=null){z.a=0+b.length
C.Nm.FV(y,b)}z.b=""
if(c!=null&&!c.gl0(c))c.aN(0,new H.Cj(z,y,x))
-return J.jf(a,new H.LI(C.Ka,"call$"+z.a+z.b,0,y,x,null))},"call$3","pT",6,0,null,15,[],43,[],44,[]],
-Ek:[function(a,b,c){var z,y,x,w,v,u,t,s,r,q,p
+return J.jf(a,new H.LI(C.Ka,"call$"+z.a+z.b,0,y,x,null))},"call$3","pT",6,0,null,15,[],48,[],49,[]],
+Ek:[function(a,b,c){var z,y,x,w,v,u,t,s,r,q
z={}
if(c!=null&&!c.gl0(c)){y=J.x(a)["call*"]
if(y==null)return H.zo(a,b,c)
@@ -9813,17 +9871,17 @@
w=x.Rv
if(w!==b.length)return H.zo(a,b,c)
v=P.L5(null,null,null,null,null)
-for(u=x.hG,t=x.Rn,s=0;s<u;++s){r=s+w
-v.u(0,init.metadata[t[2*r+u+3]],init.metadata[x.BX(0,r)])}z.a=!1
+for(u=x.hG,t=0;t<u;++t){s=t+w
+v.u(0,x.KE(s),init.metadata[x.Fk(s)])}z.a=!1
c.aN(0,new H.u8(z,v))
if(z.a)return H.zo(a,b,c)
-J.bj(b,v.gUQ(v))
-return y.apply(a,b)}q=[]
-p=0+b.length
-C.Nm.FV(q,b)
-y=a["call$"+p]
+C.Nm.FV(b,v.gUQ(v))
+return y.apply(a,b)}r=[]
+q=0+b.length
+C.Nm.FV(r,b)
+y=a["call$"+q]
if(y==null)return H.zo(a,b,c)
-return y.apply(a,q)},"call$3","ra",6,0,null,15,[],43,[],44,[]],
+return y.apply(a,r)},"call$3","ra",6,0,null,15,[],48,[],49,[]],
pL:[function(a){if(a=="String")return C.Kn
if(a=="int")return C.wq
if(a=="double")return C.yX
@@ -9831,21 +9889,21 @@
if(a=="bool")return C.Fm
if(a=="List")return C.l0
if(a=="Null")return C.x0
-return init.allClasses[a]},"call$1","aC",2,0,null,45,[]],
+return init.allClasses[a]},"call$1","aC",2,0,null,50,[]],
Pq:[function(){var z={x:0}
delete z.x
return z},"call$0","vg",0,0,null],
-s:[function(a){throw H.b(P.u(a))},"call$1","Ff",2,0,null,46,[]],
+s:[function(a){throw H.b(P.u(a))},"call$1","Ff",2,0,null,51,[]],
e:[function(a,b){if(a==null)J.q8(a)
if(typeof b!=="number"||Math.floor(b)!==b)H.s(b)
-throw H.b(P.N(b))},"call$2","x3",4,0,null,41,[],47,[]],
+throw H.b(P.N(b))},"call$2","x3",4,0,null,46,[],52,[]],
b:[function(a){var z
if(a==null)a=new P.LK()
z=new Error()
z.dartException=a
if("defineProperty" in Object){Object.defineProperty(z, "message", { get: H.Ju })
z.name=""}else z.toString=H.Ju
-return z},"call$1","Vb",2,0,null,48,[]],
+return z},"call$1","Cr",2,0,null,53,[]],
Ju:[function(){return J.AG(this.dartException)},"call$0","Eu",0,0,null],
vh:[function(a){var z
if(a==null)a=new P.LK()
@@ -9853,7 +9911,7 @@
z.dartException=a
if("defineProperty" in Object){Object.defineProperty(z, "message", { get: H.Ju })
z.name=""}else z.toString=H.Ju
-throw z},"call$1","wZ",2,0,null,48,[]],
+throw z},"call$1","wZ",2,0,null,53,[]],
Ru:[function(a){var z,y,x,w,v,u,t,s,r,q,p,o,n,m
z=new H.Am(a)
if(a==null)return
@@ -9893,28 +9951,28 @@
return z.call$1(new H.W0(y,v))}}}v=typeof y==="string"?y:""
return z.call$1(new H.vV(v))}if(a instanceof RangeError){if(typeof y==="string"&&y.indexOf("call stack")!==-1)return new P.VS()
return z.call$1(new P.AT(null))}if(typeof InternalError=="function"&&a instanceof InternalError)if(typeof y==="string"&&y==="too much recursion")return new P.VS()
-return a},"call$1","v2",2,0,null,48,[]],
+return a},"call$1","v2",2,0,null,53,[]],
CU:[function(a){if(a==null||typeof a!='object')return J.v1(a)
else return H.eQ(a)},"call$1","Zs",2,0,null,6,[]],
B7:[function(a,b){var z,y,x,w
z=a.length
for(y=0;y<z;y=w){x=y+1
w=x+1
-b.u(0,a[y],a[x])}return b},"call$2","nD",4,0,null,50,[],51,[]],
+b.u(0,a[y],a[x])}return b},"call$2","nD",4,0,null,55,[],56,[]],
ft:[function(a,b,c,d,e,f,g){var z=J.x(c)
if(z.n(c,0))return H.zd(b,new H.dr(a))
else if(z.n(c,1))return H.zd(b,new H.TL(a,d))
else if(z.n(c,2))return H.zd(b,new H.KX(a,d,e))
else if(z.n(c,3))return H.zd(b,new H.uZ(a,d,e,f))
else if(z.n(c,4))return H.zd(b,new H.OQ(a,d,e,f,g))
-else throw H.b(P.FM("Unsupported number of arguments for wrapped closure"))},"call$7","Le",14,0,null,52,[],14,[],53,[],54,[],55,[],56,[],57,[]],
+else throw H.b(P.FM("Unsupported number of arguments for wrapped closure"))},"call$7","Le",14,0,null,57,[],14,[],58,[],59,[],60,[],61,[],62,[]],
tR:[function(a,b){var z
if(a==null)return
z=a.$identity
if(!!z)return z
z=(function(closure, arity, context, invoke) { return function(a1, a2, a3, a4) { return invoke(closure, context, arity, a1, a2, a3, a4); };})(a,b,init.globalState.N0,H.ft)
a.$identity=z
-return z},"call$2","qN",4,0,null,52,[],58,[]],
+return z},"call$2","qN",4,0,null,57,[],63,[]],
iA:[function(a,b,c,d,e,f){var z,y,x,w,v,u,t,s,r,q,p,o,n,m
z=b[0]
z.$stubName
@@ -9943,7 +10001,7 @@
n=o.$callName
if(n!=null){m=d?o:H.SD(o,t)
w[n]=m}}w["call*"]=z
-return v},"call$6","Eh",12,0,null,41,[],59,[],60,[],61,[],62,[],63,[]],
+return v},"call$6","Eh",12,0,null,46,[],64,[],65,[],66,[],67,[],68,[]],
vq:[function(a,b){var z=H.eZ
switch(a){case 0:return function(F,S){return function(){return F.call(S(this))}}(b,z)
case 1:return function(F,S){return function(a){return F.call(S(this),a)}}(b,z)
@@ -9951,7 +10009,7 @@
case 3:return function(F,S){return function(a,b,c){return F.call(S(this),a,b,c)}}(b,z)
case 4:return function(F,S){return function(a,b,c,d){return F.call(S(this),a,b,c,d)}}(b,z)
case 5:return function(F,S){return function(a,b,c,d,e){return F.call(S(this),a,b,c,d,e)}}(b,z)
-default:return function(f,s){return function(){return f.apply(s(this),arguments)}}(b,z)}},"call$2","X5",4,0,null,58,[],15,[]],
+default:return function(f,s){return function(){return f.apply(s(this),arguments)}}(b,z)}},"call$2","X5",4,0,null,63,[],15,[]],
SD:[function(a,b){var z,y,x,w
if(b)return H.Oj(a)
z=a.length
@@ -9968,7 +10026,7 @@
$.bf=x}x=y+H.d(x)+","+w+");"
y=$.OK
$.OK=J.WB(y,1)
-return new Function("F",x+H.d(y)+"}")(a)}else return H.vq(z,a)},"call$2","Fw",4,0,null,15,[],64,[]],
+return new Function("F",x+H.d(y)+"}")(a)}else return H.vq(z,a)},"call$2","jI",4,0,null,15,[],69,[]],
Z4:[function(a,b,c){var z,y
z=H.eZ
y=H.yS
@@ -9979,51 +10037,51 @@
case 4:return function(n,s,r){return function(a,b,c){return s(this)[n](r(this),a,b,c)}}(b,z,y)
case 5:return function(n,s,r){return function(a,b,c,d){return s(this)[n](r(this),a,b,c,d)}}(b,z,y)
case 6:return function(n,s,r){return function(a,b,c,d,e){return s(this)[n](r(this),a,b,c,d,e)}}(b,z,y)
-default:return function(f,s,r,a){return function(){a=[r(this)];Array.prototype.push.apply(a,arguments);return f.apply(s(this),a)}}(c,z,y)}},"call$3","VT",6,0,null,58,[],12,[],15,[]],
+default:return function(f,s,r,a){return function(){a=[r(this)];Array.prototype.push.apply(a,arguments);return f.apply(s(this),a)}}(c,z,y)}},"call$3","VT",6,0,null,63,[],12,[],15,[]],
Oj:[function(a){var z,y,x,w,v
z=a.$stubName
y=a.length
if(typeof dart_precompiled=="function")return H.Z4(y,z,a)
-else if(y===1){x="return this."+H.d(H.oN())+"."+z+"(this."+H.d(H.Wz())+");"
+else if(y===1){x="return this."+H.d(H.oN())+"."+H.d(z)+"(this."+H.d(H.Wz())+");"
w=$.OK
$.OK=J.WB(w,1)
return new Function(x+H.d(w))}else if(1<y&&y<28){v="abcdefghijklmnopqrstuvwxyz".split("").splice(0,y-1).join(",")
-x="return function("+v+"){return this."+H.d(H.oN())+"."+z+"(this."+H.d(H.Wz())+","+v+");"
+x="return function("+v+"){return this."+H.d(H.oN())+"."+H.d(z)+"(this."+H.d(H.Wz())+","+v+");"
w=$.OK
$.OK=J.WB(w,1)
return new Function(x+H.d(w)+"}")()}else return H.Z4(y,z,a)},"call$1","n9",2,0,null,15,[]],
Kq:[function(a,b,c,d,e,f){b.fixed$length=init
c.fixed$length=init
-return H.iA(a,b,c,!!d,e,f)},"call$6","lu",12,0,null,41,[],59,[],60,[],61,[],62,[],12,[]],
+return H.iA(a,b,c,!!d,e,f)},"call$6","lu",12,0,null,46,[],64,[],65,[],66,[],67,[],12,[]],
SE:[function(a,b){var z=J.U6(b)
-throw H.b(H.aq(H.lh(a),z.Nj(b,3,z.gB(b))))},"call$2","H7",4,0,null,23,[],66,[]],
+throw H.b(H.aq(H.lh(a),z.Nj(b,3,z.gB(b))))},"call$2","H7",4,0,null,28,[],71,[]],
Go:[function(a,b){var z
if(a!=null)z=typeof a==="object"&&J.x(a)[b]
else z=!0
if(z)return a
-H.SE(a,b)},"call$2","SR",4,0,null,23,[],66,[]],
-ag:[function(a){throw H.b(P.Gz("Cyclic initialization for static "+H.d(a)))},"call$1","RK",2,0,null,67,[]],
-KT:[function(a,b,c){return new H.tD(a,b,c,null)},"call$3","HN",6,0,null,69,[],70,[],71,[]],
-uK:[function(a,b){var z=a.name
+H.SE(a,b)},"call$2","SR",4,0,null,28,[],71,[]],
+ag:[function(a){throw H.b(P.Gz("Cyclic initialization for static "+H.d(a)))},"call$1","RK",2,0,null,72,[]],
+KT:[function(a,b,c){return new H.tD(a,b,c,null)},"call$3","HN",6,0,null,74,[],75,[],76,[]],
+Og:[function(a,b){var z=a.name
if(b==null||b.length===0)return new H.tu(z)
-return new H.fw(z,b,null)},"call$2","iw",4,0,null,72,[],73,[]],
-N7:[function(){return C.KZ},"call$0","cI",0,0,null],
+return new H.fw(z,b,null)},"call$2","rK",4,0,null,77,[],78,[]],
+N7:[function(){return C.KZ},"call$0","Se",0,0,null],
mm:[function(a){return new H.cu(a,null)},"call$1","ut",2,0,null,12,[]],
VM:[function(a,b){if(a!=null)a.$builtinTypeInfo=b
-return a},"call$2","aa",4,0,null,74,[],75,[]],
+return a},"call$2","Ub",4,0,null,79,[],80,[]],
oX:[function(a){if(a==null)return
-return a.$builtinTypeInfo},"call$1","Qn",2,0,null,74,[]],
-IM:[function(a,b){return H.Y9(a["$as"+H.d(b)],H.oX(a))},"call$2","PE",4,0,null,74,[],76,[]],
+return a.$builtinTypeInfo},"call$1","Qn",2,0,null,79,[]],
+IM:[function(a,b){return H.Y9(a["$as"+H.d(b)],H.oX(a))},"call$2","PE",4,0,null,79,[],81,[]],
ip:[function(a,b,c){var z=H.IM(a,b)
-return z==null?null:z[c]},"call$3","Cn",6,0,null,74,[],76,[],47,[]],
+return z==null?null:z[c]},"call$3","Pk",6,0,null,79,[],81,[],52,[]],
Kp:[function(a,b){var z=H.oX(a)
-return z==null?null:z[b]},"call$2","tC",4,0,null,74,[],47,[]],
+return z==null?null:z[b]},"call$2","tC",4,0,null,79,[],52,[]],
Ko:[function(a,b){if(a==null)return"dynamic"
else if(typeof a==="object"&&a!==null&&a.constructor===Array)return a[0].builtin$cls+H.ia(a,1,b)
else if(typeof a=="function")return a.builtin$cls
else if(typeof a==="number"&&Math.floor(a)===a)if(b==null)return C.jn.bu(a)
else return b.call$1(a)
-else return},"call$2$onTypeVariable","bR",2,3,null,77,11,[],78,[]],
+else return},"call$2$onTypeVariable","bR",2,3,null,82,11,[],83,[]],
ia:[function(a,b,c){var z,y,x,w,v,u
if(a==null)return""
z=P.p9("")
@@ -10033,33 +10091,33 @@
if(v!=null)w=!1
u=H.Ko(v,c)
u=typeof u==="string"?u:H.d(u)
-z.vM=z.vM+u}return w?"":"<"+H.d(z)+">"},"call$3$onTypeVariable","iM",4,3,null,77,79,[],80,[],78,[]],
+z.vM=z.vM+u}return w?"":"<"+H.d(z)+">"},"call$3$onTypeVariable","iM",4,3,null,82,84,[],85,[],83,[]],
dJ:[function(a){var z=typeof a==="object"&&a!==null&&a.constructor===Array?"List":J.x(a).constructor.builtin$cls
-return z+H.ia(a.$builtinTypeInfo,0,null)},"call$1","om",2,0,null,6,[]],
+return z+H.ia(a.$builtinTypeInfo,0,null)},"call$1","Yx",2,0,null,6,[]],
Y9:[function(a,b){if(typeof a==="object"&&a!==null&&a.constructor===Array)b=a
else if(typeof a=="function"){a=H.ml(a,null,b)
if(typeof a==="object"&&a!==null&&a.constructor===Array)b=a
-else if(typeof a=="function")b=H.ml(a,null,b)}return b},"call$2","zL",4,0,null,81,[],82,[]],
+else if(typeof a=="function")b=H.ml(a,null,b)}return b},"call$2","zL",4,0,null,86,[],87,[]],
RB:[function(a,b,c,d){var z,y
if(a==null)return!1
z=H.oX(a)
y=J.x(a)
if(y[b]==null)return!1
-return H.hv(H.Y9(y[d],z),c)},"call$4","Ym",8,0,null,6,[],83,[],84,[],85,[]],
+return H.hv(H.Y9(y[d],z),c)},"call$4","Ym",8,0,null,6,[],88,[],89,[],90,[]],
hv:[function(a,b){var z,y
if(a==null||b==null)return!0
z=a.length
for(y=0;y<z;++y)if(!H.t1(a[y],b[y]))return!1
-return!0},"call$2","QY",4,0,null,86,[],87,[]],
-IG:[function(a,b,c){return H.ml(a,b,H.IM(b,c))},"call$3","k2",6,0,null,88,[],89,[],90,[]],
-Gq:[function(a,b){var z,y
+return!0},"call$2","QY",4,0,null,91,[],92,[]],
+IG:[function(a,b,c){return H.ml(a,b,H.IM(b,c))},"call$3","k2",6,0,null,93,[],94,[],95,[]],
+XY:[function(a,b){var z,y
if(a==null)return b==null||b.builtin$cls==="a"||b.builtin$cls==="Null"
if(b==null)return!0
z=H.oX(a)
a=J.x(a)
if(z!=null){y=z.slice()
y.splice(0,0,a)}else y=a
-return H.t1(y,b)},"call$2","TU",4,0,null,91,[],87,[]],
+return H.t1(y,b)},"call$2","tk",4,0,null,96,[],92,[]],
t1:[function(a,b){var z,y,x,w,v,u,t
if(a===b)return!0
if(a==null||b==null)return!0
@@ -10077,7 +10135,7 @@
if(!y&&t==null||!w)return!0
y=y?a.slice(1):null
w=w?b.slice(1):null
-return H.hv(H.Y9(t,y),w)},"call$2","Mb",4,0,null,86,[],87,[]],
+return H.hv(H.Y9(t,y),w)},"call$2","Mb",4,0,null,91,[],92,[]],
Hc:[function(a,b,c){var z,y,x,w,v
if(b==null&&a==null)return!0
if(b==null)return c
@@ -10087,7 +10145,7 @@
if(c){if(z<y)return!1}else if(z!==y)return!1
for(x=0;x<y;++x){w=a[x]
v=b[x]
-if(!(H.t1(w,v)||H.t1(v,w)))return!1}return!0},"call$3","C6",6,0,null,86,[],87,[],92,[]],
+if(!(H.t1(w,v)||H.t1(v,w)))return!1}return!0},"call$3","C6",6,0,null,91,[],92,[],97,[]],
Vt:[function(a,b){var z,y,x,w,v,u
if(b==null)return!0
if(a==null)return!1
@@ -10098,7 +10156,7 @@
if(!Object.hasOwnProperty.call(a,w))return!1
v=b[w]
u=a[w]
-if(!(H.t1(v,u)||H.t1(u,v)))return!1}return!0},"call$2","oq",4,0,null,86,[],87,[]],
+if(!(H.t1(v,u)||H.t1(u,v)))return!1}return!0},"call$2","y3",4,0,null,91,[],92,[]],
Ly:[function(a,b){var z,y,x,w,v,u,t,s,r,q,p,o,n,m,l
if(!("func" in a))return!1
if("void" in a){if(!("void" in b)&&"ret" in b)return!1}else if(!("void" in b)){z=a.ret
@@ -10120,12 +10178,12 @@
n=w[m]
if(!(H.t1(o,n)||H.t1(n,o)))return!1}for(m=0;m<q;++l,++m){o=v[l]
n=u[m]
-if(!(H.t1(o,n)||H.t1(n,o)))return!1}}return H.Vt(a.named,b.named)},"call$2","Sj",4,0,null,86,[],87,[]],
-ml:[function(a,b,c){return a.apply(b,c)},"call$3","lv",6,0,null,15,[],41,[],82,[]],
+if(!(H.t1(o,n)||H.t1(n,o)))return!1}}return H.Vt(a.named,b.named)},"call$2","Sj",4,0,null,91,[],92,[]],
+ml:[function(a,b,c){return a.apply(b,c)},"call$3","fW",6,0,null,15,[],46,[],87,[]],
uc:[function(a){var z=$.NF
-return"Instance of "+(z==null?"<Unknown>":z.call$1(a))},"call$1","zB",2,0,null,93,[]],
-Su:[function(a){return H.eQ(a)},"call$1","cx",2,0,null,6,[]],
-bm:[function(a,b,c){Object.defineProperty(a, b, {value: c, enumerable: false, writable: true, configurable: true})},"call$3","C5",6,0,null,93,[],66,[],23,[]],
+return"Instance of "+(z==null?"<Unknown>":z.call$1(a))},"call$1","zB",2,0,null,98,[]],
+wzi:[function(a){return H.eQ(a)},"call$1","nR",2,0,null,6,[]],
+iw:[function(a,b,c){Object.defineProperty(a, b, {value: c, enumerable: false, writable: true, configurable: true})},"call$3","OU",6,0,null,98,[],71,[],28,[]],
w3:[function(a){var z,y,x,w,v,u
z=$.NF.call$1(a)
y=$.nw[z]
@@ -10151,16 +10209,16 @@
if(v==="*")throw H.b(P.SY(z))
if(init.leafTags[z]===true){u=H.Va(x)
Object.defineProperty(Object.getPrototypeOf(a), init.dispatchPropertyName, {value: u, enumerable: false, writable: true, configurable: true})
-return u.i}else return H.Lc(a,x)},"call$1","eU",2,0,null,93,[]],
+return u.i}else return H.Lc(a,x)},"call$1","eU",2,0,null,98,[]],
Lc:[function(a,b){var z,y
z=Object.getPrototypeOf(a)
y=J.Qu(b,z,null,null)
Object.defineProperty(z, init.dispatchPropertyName, {value: y, enumerable: false, writable: true, configurable: true})
-return b},"call$2","qF",4,0,null,93,[],7,[]],
+return b},"call$2","qF",4,0,null,98,[],7,[]],
Va:[function(a){return J.Qu(a,!1,null,!!a.$isXj)},"call$1","oe",2,0,null,7,[]],
VF:[function(a,b,c){var z=b.prototype
if(init.leafTags[a]===true)return J.Qu(z,!1,null,!!z.$isXj)
-else return J.Qu(z,c,null,null)},"call$3","vi",6,0,null,94,[],95,[],8,[]],
+else return J.Qu(z,c,null,null)},"call$3","di",6,0,null,99,[],100,[],8,[]],
XD:[function(){if(!0===$.Bv)return
$.Bv=!0
H.Z1()},"call$0","Ki",0,0,null],
@@ -10192,8 +10250,8 @@
t=z.prototypeForTag
$.NF=new H.dC(v)
$.TX=new H.wN(u)
-$.x7=new H.VX(t)},"call$0","Bk",0,0,null],
-ud:[function(a,b){return a(b)||b},"call$2","rM",4,0,null,96,[],97,[]],
+$.x7=new H.VX(t)},"call$0","Hb",0,0,null],
+ud:[function(a,b){return a(b)||b},"call$2","rM",4,0,null,101,[],102,[]],
ZT:[function(a,b){var z,y,x,w,v,u
z=H.VM([],[P.Od])
y=b.length
@@ -10203,13 +10261,13 @@
z.push(new H.tQ(v,b,a))
u=v+x
if(u===y)break
-else w=v===u?w+1:u}return z},"call$2","tl",4,0,null,102,[],103,[]],
+else w=v===u?w+1:u}return z},"call$2","tl",4,0,null,107,[],108,[]],
m2:[function(a,b,c){var z,y
if(typeof b==="string")return C.xB.XU(a,b,c)!==-1
else{z=J.rY(b)
if(typeof b==="object"&&b!==null&&!!z.$isVR){z=C.xB.yn(a,c)
y=b.Ej
-return y.test(z)}else return J.pO(z.dd(b,C.xB.yn(a,c)))}},"call$3","WL",6,0,null,41,[],104,[],80,[]],
+return y.test(z)}else return J.pO(z.dd(b,C.xB.yn(a,c)))}},"call$3","WL",6,0,null,46,[],109,[],85,[]],
ys:[function(a,b,c){var z,y,x,w,v
if(typeof b==="string")if(b==="")if(a==="")return c
else{z=P.p9("")
@@ -10223,7 +10281,7 @@
if(typeof b==="object"&&b!==null&&!!w.$isVR){v=b.gF4()
v.lastIndex=0
return a.replace(v,c.replace("$","$$$$"))}else{if(b==null)H.vh(new P.AT(null))
-throw H.b("String.replaceAll(Pattern) UNIMPLEMENTED")}}},"call$3","uF",6,0,null,41,[],105,[],106,[]],
+throw H.b("String.replaceAll(Pattern) UNIMPLEMENTED")}}},"call$3","uF",6,0,null,46,[],110,[],111,[]],
Zd:{
"^":"a;"},
xQ:{
@@ -10236,36 +10294,35 @@
gor:function(a){return!J.de(this.gB(this),0)},
bu:[function(a){return P.vW(this)},"call$0","gXo",0,0,null],
Ix:[function(){throw H.b(P.f("Cannot modify unmodifiable Map"))},"call$0","gPb",0,0,null],
-u:[function(a,b,c){return this.Ix()},"call$2","gj3",4,0,null,42,[],211,[]],
-Rz:[function(a,b){return this.Ix()},"call$1","gRI",2,0,null,42,[]],
-V1:[function(a){return this.Ix()},"call$0","gyP",0,0,null],
-FV:[function(a,b){return this.Ix()},"call$1","gDY",2,0,null,104,[]],
+u:[function(a,b,c){return this.Ix()},"call$2","gj3",4,0,null,47,[],347,[]],
+Rz:[function(a,b){return this.Ix()},"call$1","guH",2,0,null,47,[]],
+V1:[function(a){return this.Ix()},"call$0","gRa",0,0,null],
+FV:[function(a,b){return this.Ix()},"call$1","gDY",2,0,null,109,[]],
$isZ0:true},
LPe:{
"^":"oH;B>,HV,tc",
-di:[function(a){return this.gUQ(this).Vr(0,new H.bw(this,a))},"call$1","gmc",2,0,null,102,[]],
+di:[function(a){return this.gUQ(this).Vr(0,new H.LD(this,a))},"call$1","gmc",2,0,null,107,[]],
x4:[function(a){if(typeof a!=="string")return!1
-if(a==="__proto__")return!1
-return this.HV.hasOwnProperty(a)},"call$1","gV9",2,0,null,42,[]],
-t:[function(a,b){if(typeof b!=="string")return
-if(!this.x4(b))return
-return this.HV[b]},"call$1","gIA",2,0,null,42,[]],
-aN:[function(a,b){J.kH(this.tc,new H.WT(this,b))},"call$1","gjw",2,0,null,115,[]],
+if("__proto__"===a)return!1
+return this.HV.hasOwnProperty(a)},"call$1","gV9",2,0,null,47,[]],
+t:[function(a,b){if(!this.x4(b))return
+return this.TZ(b)},"call$1","gIA",2,0,null,47,[]],
+TZ:[function(a){return this.HV[a]},"call$1","grz",2,0,null,47,[]],
+aN:[function(a,b){var z,y,x
+z=this.tc
+for(y=0;y<z.length;++y){x=z[y]
+b.call$2(x,this.TZ(x))}},"call$1","gjw",2,0,null,117,[]],
gvc:function(a){return H.VM(new H.XR(this),[H.Kp(this,0)])},
gUQ:function(a){return H.K1(this.tc,new H.jJ(this),H.Kp(this,0),H.Kp(this,1))},
$isyN:true},
-bw:{
+LD:{
"^":"Tp;a,b",
-call$1:[function(a){return J.de(a,this.b)},"call$1",null,2,0,null,23,[],"call"],
+call$1:[function(a){return J.de(a,this.b)},"call$1",null,2,0,null,28,[],"call"],
$isEH:true,
$signature:function(){return H.IG(function(a,b){return{func:"JF",args:[b]}},this.a,"LPe")}},
-WT:{
-"^":"Tp:107;a,b",
-call$1:[function(a){return this.b.call$2(a,this.a.t(0,a))},"call$1",null,2,0,null,42,[],"call"],
-$isEH:true},
jJ:{
-"^":"Tp:107;a",
-call$1:[function(a){return this.a.t(0,a)},"call$1",null,2,0,null,42,[],"call"],
+"^":"Tp:112;a",
+call$1:[function(a){return this.a.TZ(a)},"call$1",null,2,0,null,47,[],"call"],
$isEH:true},
XR:{
"^":"mW;Y3",
@@ -10323,8 +10380,8 @@
else z=null}s=!0}else s=!1
if(typeof u=="function"){if(!("$reflectable" in u))H.Hz(J.GL(this.gWa()))
if(s)return new H.IW(H.zh(u),y,u,x,z)
-else return new H.A2(y,u,x,z)}else return new H.F3(z)},"call$1","gLk",2,0,null,6,[]],
-static:{"^":"hAw,oY,Y8"}},
+else return new H.A2(y,u,x,z)}else return new H.F3(z)},"call$1","gpW",2,0,null,6,[]],
+static:{"^":"hAw,HT,zl"}},
A2:{
"^":"a;Pi<,mr,eK<,Ot",
gpf:function(){return!1},
@@ -10334,7 +10391,7 @@
C.Nm.FV(y,b)
z=this.Ot
z=z!=null?z:a
-b=y}return this.mr.apply(z,b)},"call$2","gUT",4,0,null,145,[],82,[]]},
+b=y}return this.mr.apply(z,b)},"call$2","gUT",4,0,null,147,[],87,[]]},
IW:{
"^":"A2;qa,Pi,mr,eK,Ot",
To:function(a){return this.qa.call$1(a)},
@@ -10353,25 +10410,48 @@
else if(w<y)throw H.b(H.WE("Invocation of unstubbed method '"+z.gx5()+"' with "+w+" arguments (too few)."))
else if(w>x)throw H.b(H.WE("Invocation of unstubbed method '"+z.gx5()+"' with "+w+" arguments (too many)."))
for(t=w;t<x;++t)C.Nm.h(b,init.metadata[z.BX(0,t)])
-return this.mr.apply(v,b)},"call$2","gUT",4,0,null,145,[],82,[]]},
+return this.mr.apply(v,b)},"call$2","gUT",4,0,null,147,[],87,[]]},
F3:{
"^":"a;e0",
gpf:function(){return!0},
Bj:[function(a,b){var z=this.e0
-return J.jf(z==null?a:z,b)},"call$2","gUT",4,0,null,145,[],331,[]]},
+return J.jf(z==null?a:z,b)},"call$2","gUT",4,0,null,147,[],329,[]]},
FD:{
-"^":"a;mr,Rn>,XZ,Rv,hG,Mo,AM",
+"^":"a;mr,Rn>,XZ,Rv,hG,Mo,AM,NE",
+XL:[function(a){return init.metadata[this.Rn[2*a+this.hG+3]]},"call$1","gZj",2,0,null,349,[]],
BX:[function(a,b){var z=this.Rv
+if(typeof b!=="number")return b.C()
if(b<z)return
-return this.Rn[3+b-z]},"call$1","gkv",2,0,null,347,[]],
+return this.Rn[3+b-z]},"call$1","gkv",2,0,null,349,[]],
+Fk:[function(a){var z=this.Rv
+if(a<z)return
+if(!this.Mo||this.hG===1)return this.BX(0,a)
+return this.BX(0,this.e4(a-z))},"call$1","gtW",2,0,null,349,[]],
+KE:[function(a){var z=this.Rv
+if(a<z)return
+if(!this.Mo||this.hG===1)return this.XL(a)
+return this.XL(this.e4(a-z))},"call$1","gX4",2,0,null,349,[]],
+e4:[function(a){var z,y,x,w,v,u,t
+z={}
+if(this.NE==null){y=this.hG
+this.NE=Array(y)
+x=H.VM(H.B7([],P.L5(null,null,null,null,null)),[J.O,J.im])
+for(w=this.Rv,v=this.Rn,u=0;u<y;++u){t=w+u
+x.u(0,init.metadata[v[2*t+y+3]],t)}z.a=0
+y=x.gvc(x)
+y=P.F(y,!0,H.ip(y,"mW",0))
+H.rd(y,null)
+H.bQ(y,new H.Nv(z,this,x))}z=this.NE
+if(a<0||a>=z.length)return H.e(z,a)
+return z[a]},"call$1","gIK",2,0,null,350,[]],
hl:[function(a){var z,y
z=this.AM
if(typeof z=="number")return init.metadata[z]
else if(typeof z=="function"){y=new a()
H.VM(y,y["<>"])
-return z.apply({$receiver:y})}else throw H.b(H.Ef("Unexpected function type"))},"call$1","gIX",2,0,null,348,[]],
+return z.apply({$receiver:y})}else throw H.b(H.Ef("Unexpected function type"))},"call$1","gIX",2,0,null,351,[]],
gx5:function(){return this.mr.$reflectionName},
-static:{"^":"t4,FV,C1,kj",zh:function(a){var z,y,x,w
+static:{"^":"t4,FV,C1,H6",zh:function(a){var z,y,x,w
z=a.$reflectionInfo
if(z==null)return
z.fixed$length=init
@@ -10379,20 +10459,31 @@
y=z[0]
x=y>>1
w=z[1]
-return new H.FD(a,z,(y&1)===1,x,w>>1,(w&1)===1,z[2])}}},
+return new H.FD(a,z,(y&1)===1,x,w>>1,(w&1)===1,z[2],null)}}},
+Nv:{
+"^":"Tp:30;a,b,c",
+call$1:[function(a){var z,y,x
+z=this.b.NE
+y=this.a
+x=y.a
+y.a=x+1
+y=this.c.t(0,a)
+if(x>=z.length)return H.e(z,x)
+z[x]=y},"call$1",null,2,0,null,12,[],"call"],
+$isEH:true},
Cj:{
-"^":"Tp:349;a,b,c",
+"^":"Tp:352;a,b,c",
call$2:[function(a,b){var z=this.a
z.b=z.b+"$"+H.d(a)
this.c.push(a)
this.b.push(b)
-z.a=z.a+1},"call$2",null,4,0,null,12,[],46,[],"call"],
+z.a=z.a+1},"call$2",null,4,0,null,12,[],51,[],"call"],
$isEH:true},
u8:{
-"^":"Tp:349;a,b",
+"^":"Tp:352;a,b",
call$2:[function(a,b){var z=this.b
if(z.x4(a))z.u(0,a,b)
-else this.a.a=!0},"call$2",null,4,0,null,347,[],23,[],"call"],
+else this.a.a=!0},"call$2",null,4,0,null,349,[],28,[],"call"],
$isEH:true},
Zr:{
"^":"a;bT,rq,Xs,Fa,Ga,EP",
@@ -10410,7 +10501,7 @@
if(x!==-1)y.method=z[x+1]
x=this.EP
if(x!==-1)y.receiver=z[x+1]
-return y},"call$1","gul",2,0,null,20,[]],
+return y},"call$1","gul",2,0,null,22,[]],
static:{"^":"lm,k1,Re,fN,qi,rZ,BX,tt,dt,A7",LX:[function(a){var z,y,x,w,v,u
a=a.replace(String({}), '$receiver$').replace(new RegExp("[[\\]{}()*+?.\\\\^$|]",'g'),'\\$&')
z=a.match(/\\\$[a-zA-Z]+\\\$/g)
@@ -10420,20 +10511,20 @@
w=z.indexOf("\\$expr\\$")
v=z.indexOf("\\$method\\$")
u=z.indexOf("\\$receiver\\$")
-return new H.Zr(a.replace('\\$arguments\\$','((?:x|[^x])*)').replace('\\$argumentsExpr\\$','((?:x|[^x])*)').replace('\\$expr\\$','((?:x|[^x])*)').replace('\\$method\\$','((?:x|[^x])*)').replace('\\$receiver\\$','((?:x|[^x])*)'),y,x,w,v,u)},"call$1","dx",2,0,null,20,[]],S7:[function(a){return function($expr$) {
+return new H.Zr(a.replace('\\$arguments\\$','((?:x|[^x])*)').replace('\\$argumentsExpr\\$','((?:x|[^x])*)').replace('\\$expr\\$','((?:x|[^x])*)').replace('\\$method\\$','((?:x|[^x])*)').replace('\\$receiver\\$','((?:x|[^x])*)'),y,x,w,v,u)},"call$1","dx",2,0,null,22,[]],S7:[function(a){return function($expr$) {
var $argumentsExpr$ = '$arguments$'
try {
$expr$.$method$($argumentsExpr$);
} catch (e) {
return e.message;
}
-}(a)},"call$1","LS",2,0,null,49,[]],Mj:[function(a){return function($expr$) {
+}(a)},"call$1","LS",2,0,null,54,[]],Mj:[function(a){return function($expr$) {
try {
$expr$.$method$;
} catch (e) {
return e.message;
}
-}(a)},"call$1","cl",2,0,null,49,[]]}},
+}(a)},"call$1","cl",2,0,null,54,[]]}},
W0:{
"^":"Ge;K9,Ga",
bu:[function(a){var z=this.Ga
@@ -10447,8 +10538,8 @@
z=this.Ga
if(z==null)return"NoSuchMethodError: "+H.d(this.K9)
y=this.EP
-if(y==null)return"NoSuchMethodError: Cannot call \""+z+"\" ("+H.d(this.K9)+")"
-return"NoSuchMethodError: Cannot call \""+z+"\" on \""+y+"\" ("+H.d(this.K9)+")"},"call$0","gXo",0,0,null],
+if(y==null)return"NoSuchMethodError: Cannot call \""+H.d(z)+"\" ("+H.d(this.K9)+")"
+return"NoSuchMethodError: Cannot call \""+H.d(z)+"\" on \""+H.d(y)+"\" ("+H.d(this.K9)+")"},"call$0","gXo",0,0,null],
$ismp:true,
$isGe:true,
static:{T3:function(a,b){var z,y
@@ -10461,10 +10552,10 @@
bu:[function(a){var z=this.K9
return C.xB.gl0(z)?"Error":"Error: "+z},"call$0","gXo",0,0,null]},
Am:{
-"^":"Tp:107;a",
+"^":"Tp:112;a",
call$1:[function(a){var z=J.x(a)
if(typeof a==="object"&&a!==null&&!!z.$isGe)if(a.$thrownJsError==null)a.$thrownJsError=this.a
-return a},"call$1",null,2,0,null,160,[],"call"],
+return a},"call$1",null,2,0,null,159,[],"call"],
$isEH:true},
XO:{
"^":"a;lA,ui",
@@ -10477,23 +10568,23 @@
this.ui=z
return z},"call$0","gXo",0,0,null]},
dr:{
-"^":"Tp:113;a",
+"^":"Tp:115;a",
call$0:[function(){return this.a.call$0()},"call$0",null,0,0,null,"call"],
$isEH:true},
TL:{
-"^":"Tp:113;b,c",
+"^":"Tp:115;b,c",
call$0:[function(){return this.b.call$1(this.c)},"call$0",null,0,0,null,"call"],
$isEH:true},
KX:{
-"^":"Tp:113;d,e,f",
+"^":"Tp:115;d,e,f",
call$0:[function(){return this.d.call$2(this.e,this.f)},"call$0",null,0,0,null,"call"],
$isEH:true},
uZ:{
-"^":"Tp:113;UI,bK,Gq,Rm",
+"^":"Tp:115;UI,bK,Gq,Rm",
call$0:[function(){return this.UI.call$3(this.bK,this.Gq,this.Rm)},"call$0",null,0,0,null,"call"],
$isEH:true},
OQ:{
-"^":"Tp:113;w3,HZ,mG,xC,cj",
+"^":"Tp:115;w3,HZ,mG,xC,cj",
call$0:[function(){return this.w3.call$4(this.HZ,this.mG,this.xC,this.cj)},"call$0",null,0,0,null,"call"],
$isEH:true},
Tp:{
@@ -10510,35 +10601,35 @@
if(this===b)return!0
z=J.x(b)
if(typeof b!=="object"||b===null||!z.$isv)return!1
-return this.nw===b.nw&&this.jm===b.jm&&this.EP===b.EP},"call$1","gUJ",2,0,null,104,[]],
+return this.nw===b.nw&&this.jm===b.jm&&this.EP===b.EP},"call$1","gUJ",2,0,null,109,[]],
giO:function(a){var z,y
z=this.EP
if(z==null)y=H.eQ(this.nw)
else y=typeof z!=="object"?J.v1(z):H.eQ(z)
return J.UN(y,H.eQ(this.jm))},
$isv:true,
-static:{"^":"bf,P4",eZ:[function(a){return a.gnw()},"call$1","PR",2,0,null,52,[]],yS:[function(a){return a.EP},"call$1","h0",2,0,null,52,[]],oN:[function(){var z=$.bf
+static:{"^":"bf,P4",eZ:[function(a){return a.gnw()},"call$1","PR",2,0,null,57,[]],yS:[function(a){return a.EP},"call$1","MZ",2,0,null,57,[]],oN:[function(){var z=$.bf
if(z==null){z=H.B3("self")
$.bf=z}return z},"call$0","uT",0,0,null],Wz:[function(){var z=$.P4
if(z==null){z=H.B3("receiver")
-$.P4=z}return z},"call$0","TT",0,0,null],B3:[function(a){var z,y,x,w,v
+$.P4=z}return z},"call$0","qY",0,0,null],B3:[function(a){var z,y,x,w,v
z=new H.v("self","target","receiver","name")
y=Object.getOwnPropertyNames(z)
y.fixed$length=init
x=y
for(y=x.length,w=0;w<y;++w){v=x[w]
-if(z[v]===a)return v}},"call$1","ec",2,0,null,65,[]]}},
+if(z[v]===a)return v}},"call$1","ec",2,0,null,70,[]]}},
Ll:{
-"^":"a;Jy"},
-dN:{
-"^":"a;Jy"},
-GT:{
+"^":"a;QW"},
+D2:{
+"^":"a;QW"},
+my:{
"^":"a;oc>"},
Pe:{
"^":"Ge;G1>",
bu:[function(a){return this.G1},"call$0","gXo",0,0,null],
$isGe:true,
-static:{aq:function(a,b){return new H.Pe("CastError: Casting value of type "+a+" to incompatible type "+H.d(b))}}},
+static:{aq:function(a,b){return new H.Pe("CastError: Casting value of type "+H.d(a)+" to incompatible type "+H.d(b))}}},
Eq:{
"^":"Ge;G1>",
bu:[function(a){return"RuntimeError: "+H.d(this.G1)},"call$0","gXo",0,0,null],
@@ -10548,9 +10639,9 @@
tD:{
"^":"lb;dw,Iq,is,p6",
BD:[function(a){var z=this.rP(a)
-return z==null?!1:H.Ly(z,this.za())},"call$1","gQ4",2,0,null,49,[]],
+return z==null?!1:H.Ly(z,this.za())},"call$1","gQ4",2,0,null,54,[]],
rP:[function(a){var z=J.x(a)
-return"$signature" in z?z.$signature():null},"call$1","gie",2,0,null,91,[]],
+return"$signature" in z?z.$signature():null},"call$1","gie",2,0,null,96,[]],
za:[function(){var z,y,x,w,v,u,t
z={ "func": "dynafunc" }
y=this.dw
@@ -10585,7 +10676,7 @@
a=a
z=[]
for(y=a.length,x=0;x<y;++x)z.push(a[x].za())
-return z},"call$1","eL",2,0,null,68,[]]}},
+return z},"call$1","At",2,0,null,73,[]]}},
hJ:{
"^":"lb;",
bu:[function(a){return"dynamic"},"call$0","gXo",0,0,null],
@@ -10596,7 +10687,7 @@
za:[function(){var z,y
z=this.oc
y=init.allClasses[z]
-if(y==null)throw H.b("no type for '"+z+"'")
+if(y==null)throw H.b("no type for '"+H.d(z)+"'")
return y},"call$0","gpA",0,0,null],
bu:[function(a){return this.oc},"call$0","gXo",0,0,null]},
fw:{
@@ -10607,11 +10698,11 @@
z=this.oc
y=[init.allClasses[z]]
if(0>=y.length)return H.e(y,0)
-if(y[0]==null)throw H.b("no type for '"+z+"<...>'")
+if(y[0]==null)throw H.b("no type for '"+H.d(z)+"<...>'")
for(z=this.re,z=H.VM(new H.a7(z,z.length,0,null),[H.Kp(z,0)]);z.G();)y.push(z.lo.za())
this.Et=y
return y},"call$0","gpA",0,0,null],
-bu:[function(a){return this.oc+"<"+J.XS(this.re,", ")+">"},"call$0","gXo",0,0,null]},
+bu:[function(a){return H.d(this.oc)+"<"+J.XS(this.re,", ")+">"},"call$0","gXo",0,0,null]},
Zz:{
"^":"Ge;K9",
bu:[function(a){return"Unsupported operation: "+this.K9},"call$0","gXo",0,0,null],
@@ -10632,22 +10723,22 @@
n:[function(a,b){var z
if(b==null)return!1
z=J.x(b)
-return typeof b==="object"&&b!==null&&!!z.$iscu&&J.de(this.LU,b.LU)},"call$1","gUJ",2,0,null,104,[]],
+return typeof b==="object"&&b!==null&&!!z.$iscu&&J.de(this.LU,b.LU)},"call$1","gUJ",2,0,null,109,[]],
$iscu:true,
$isuq:true},
Lm:{
"^":"a;XP<,oc>,kU>"},
dC:{
-"^":"Tp:107;a",
-call$1:[function(a){return this.a(a)},"call$1",null,2,0,null,91,[],"call"],
+"^":"Tp:112;a",
+call$1:[function(a){return this.a(a)},"call$1",null,2,0,null,96,[],"call"],
$isEH:true},
wN:{
-"^":"Tp:350;b",
-call$2:[function(a,b){return this.b(a,b)},"call$2",null,4,0,null,91,[],94,[],"call"],
+"^":"Tp:353;b",
+call$2:[function(a,b){return this.b(a,b)},"call$2",null,4,0,null,96,[],99,[],"call"],
$isEH:true},
VX:{
-"^":"Tp:25;c",
-call$1:[function(a){return this.c(a)},"call$1",null,2,0,null,94,[],"call"],
+"^":"Tp:30;c",
+call$1:[function(a){return this.c(a)},"call$1",null,2,0,null,99,[],"call"],
$isEH:true},
VR:{
"^":"a;Ej,Ii,Ua",
@@ -10667,16 +10758,16 @@
if(typeof a!=="string")H.vh(new P.AT(a))
z=this.Ej.exec(a)
if(z==null)return
-return H.yx(this,z)},"call$1","gvz",2,0,null,339,[]],
+return H.yx(this,z)},"call$1","gvz",2,0,null,336,[]],
zD:[function(a){if(typeof a!=="string")H.vh(new P.AT(a))
-return this.Ej.test(a)},"call$1","guf",2,0,null,339,[]],
-dd:[function(a,b){return new H.KW(this,b)},"call$1","gYv",2,0,null,339,[]],
+return this.Ej.test(a)},"call$1","guf",2,0,null,336,[]],
+dd:[function(a,b){return new H.KW(this,b)},"call$1","gYv",2,0,null,336,[]],
yk:[function(a,b){var z,y
z=this.gF4()
z.lastIndex=b
y=z.exec(a)
if(y==null)return
-return H.yx(this,y)},"call$2","gow",4,0,null,26,[],120,[]],
+return H.yx(this,y)},"call$2","gow",4,0,null,31,[],123,[]],
Bh:[function(a,b){var z,y,x,w
z=this.gAT()
z.lastIndex=b
@@ -10687,15 +10778,15 @@
if(w<0)return H.e(y,w)
if(y[w]!=null)return
J.wg(y,w)
-return H.yx(this,y)},"call$2","gm4",4,0,null,26,[],120,[]],
+return H.yx(this,y)},"call$2","gm4",4,0,null,31,[],123,[]],
wL:[function(a,b,c){var z
if(c>=0){z=J.q8(b)
if(typeof z!=="number")return H.s(z)
z=c>z}else z=!0
if(z)throw H.b(P.TE(c,0,J.q8(b)))
-return this.Bh(b,c)},function(a,b){return this.wL(a,b,0)},"R4","call$2",null,"grS",2,2,null,335,26,[],120,[]],
+return this.Bh(b,c)},function(a,b){return this.wL(a,b,0)},"R4","call$2",null,"grS",2,2,null,332,31,[],123,[]],
$isVR:true,
-$iscT:true,
+$isSP:true,
static:{v4:[function(a,b,c,d){var z,y,x,w,v
z=b?"m":""
y=c?"":"i"
@@ -10703,12 +10794,12 @@
w=(function() {try {return new RegExp(a, z + y + x);} catch (e) {return e;}})()
if(w instanceof RegExp)return w
v=String(w)
-throw H.b(P.cD("Illegal RegExp pattern: "+a+", "+v))},"call$4","ka",8,0,null,98,[],99,[],100,[],101,[]]}},
+throw H.b(P.cD("Illegal RegExp pattern: "+a+", "+v))},"call$4","ka",8,0,null,103,[],104,[],105,[],106,[]]}},
EK:{
-"^":"a;zO,QK<",
+"^":"a;zO,QK",
t:[function(a,b){var z=this.QK
if(b>>>0!==b||b>=z.length)return H.e(z,b)
-return z[b]},"call$1","gIA",2,0,null,47,[]],
+return z[b]},"call$1","gIA",2,0,null,52,[]],
VO:function(a,b){},
$isOd:true,
static:{yx:function(a,b){var z=new H.EK(a,b)
@@ -10718,7 +10809,7 @@
"^":"mW;Gf,rv",
gA:function(a){return new H.Pb(this.Gf,this.rv,null)},
$asmW:function(){return[P.Od]},
-$ascX:function(){return[P.Od]}},
+$asQV:function(){return[P.Od]}},
Pb:{
"^":"a;VV,rv,Wh",
gl:function(){return this.Wh},
@@ -10739,42 +10830,35 @@
tQ:{
"^":"a;M,J9,zO",
t:[function(a,b){if(!J.de(b,0))H.vh(P.N(b))
-return this.zO},"call$1","gIA",2,0,null,351,[]],
+return this.zO},"call$1","gIA",2,0,null,354,[]],
$isOd:true}}],["app","package:observatory/app.dart",,G,{
"^":"",
m7:[function(a){var z
N.Jx("").To("Google Charts API loaded")
z=J.UQ(J.UQ($.cM(),"google"),"visualization")
$.NR=z
-return z},"call$1","vN",2,0,107,108,[]],
-js:[function(a,b){return J.pb(b,new G.BO(a))},"call$2","o4",4,0,null,110,[],111,[]],
+return z},"call$1","vN",2,0,112,113,[]],
mL:{
-"^":["Pi;Z6<-352,zf>-353,AJ,Eb,AP,fn",function(){return[C.mI]},function(){return[C.mI]},null,null,null,null],
-gn9:[function(a){return this.AJ},null,null,1,0,354,"response",355,356],
-sn9:[function(a,b){this.AJ=F.Wi(this,C.mE,this.AJ,b)},null,null,3,0,357,23,[],"response",355],
-gAq:[function(a){return this.Eb},null,null,1,0,358,"isolate",355,356],
-sAq:[function(a,b){this.Eb=F.Wi(this,C.Z8,this.Eb,b)},null,null,3,0,359,23,[],"isolate",355],
-Ww:[function(a,b){var z=H.B7(["type","Error","errorType",b,"text",a],P.L5(null,null,null,null,null))
-z=R.Jk(z)
-this.AJ=F.Wi(this,C.mE,this.AJ,z)
-N.Jx("").hh(a)},function(a){return this.Ww(a,"ResponseError")},"AI","call$2",null,"gug",2,2,null,360,20,[],361,[]],
-TR:[function(){this.zf.sec(this)
-var z=this.Z6
+"^":["Pi;Z6<-355,zf<-356,Eb,AJ,AP,Lk",function(){return[C.mI]},function(){return[C.mI]},null,null,null,null],
+gF1:[function(a){return this.Eb},null,null,1,0,357,"isolate",358,359],
+sF1:[function(a,b){this.Eb=F.Wi(this,C.Z8,this.Eb,b)},null,null,3,0,360,28,[],"isolate",358],
+gn9:[function(a){return this.AJ},null,null,1,0,361,"response",358,359],
+sn9:[function(a,b){this.AJ=F.Wi(this,C.mE,this.AJ,b)},null,null,3,0,362,28,[],"response",358],
+Da:[function(){var z=this.Z6
z.sec(this)
-z.kI()},"call$0","gIo",0,0,null],
-US:function(){this.TR()},
-hq:function(){this.TR()},
-static:{"^":"Tj,pQ"}},
+z.kI()},"call$0","gLW",0,0,null],
+US:function(){this.Da()},
+hq:function(){this.Da()}},
Kf:{
"^":"a;Yb<",
goH:function(){return this.Yb.nQ("getNumberOfColumns")},
gWT:function(a){return this.Yb.nQ("getNumberOfRows")},
-Gl:[function(a,b){this.Yb.V7("addColumn",[a,b])},"call$2","gGU",4,0,null,11,[],362,[]],
+Gl:[function(a,b){this.Yb.V7("addColumn",[a,b])},"call$2","gGU",4,0,null,11,[],363,[]],
lb:[function(){var z=this.Yb
-z.V7("removeRows",[0,z.nQ("getNumberOfRows")])},"call$0","gGL",0,0,null],
+z.V7("removeRows",[0,z.nQ("getNumberOfRows")])},"call$0","gA6",0,0,null],
RP:[function(a,b){var z=[]
C.Nm.FV(z,H.VM(new H.A8(b,P.En()),[null,null]))
-this.Yb.V7("addRow",[H.VM(new P.Tz(z),[null])])},"call$1","gJW",2,0,null,363,[]]},
+this.Yb.V7("addRow",[H.VM(new P.Tz(z),[null])])},"call$1","gJW",2,0,null,364,[]]},
qu:{
"^":"a;vR,bG>",
u5:[function(){var z,y,x
@@ -10782,219 +10866,18 @@
if(z!=null&&!J.de(J.UQ(z,"column"),-1)){y=this.bG
x=J.U6(z)
y.u(0,"sortColumn",x.t(z,"column"))
-y.u(0,"sortAscending",x.t(z,"ascending"))}},"call$0","gIK",0,0,null],
+y.u(0,"sortAscending",x.t(z,"ascending"))}},"call$0","gmf",0,0,null],
W2:[function(a){var z=P.jT(this.bG)
-this.vR.V7("draw",[a.gYb(),z])},"call$1","gW8",2,0,null,186,[]]},
-bv:{
-"^":["Pi;zf>,rI,we,jF,XR<-364,Z0<-365,hI,am,y6,c8,LE<-366,qU,yg,YG,jy,AP,fn",null,null,null,null,function(){return[C.mI]},function(){return[C.mI]},null,null,null,null,function(){return[C.mI]},null,null,null,null,null,null],
-gAq:function(a){return this},
-gPj:function(a){return this.rI},
-gjO:function(a){return this.rI},
-zr:[function(a){return this.zf.Sl(this.rI).ml(new G.eS(this)).ml(new G.IQ(this))},"call$0","gvC",0,0,null],
-Mq:[function(a){return H.d(this.rI)+"/"+H.d(a)},"call$1","gLc",2,0,367,109,[],"relativeLink",355],
-rn:[function(a){return"#/"+(H.d(this.rI)+"/"+H.d(a))},"call$1","gHP",2,0,367,109,[],"hashLink",355],
-gB1:[function(a){return this.jF},null,null,1,0,368,"profile",355,356],
-sB1:[function(a,b){this.jF=F.Wi(this,C.vb,this.jF,b)},null,null,3,0,369,23,[],"profile",355],
-goc:[function(a){return this.hI},null,null,1,0,370,"name",355,356],
-soc:[function(a,b){this.hI=F.Wi(this,C.YS,this.hI,b)},null,null,3,0,25,23,[],"name",355],
-gzz:[function(){return this.am},null,null,1,0,370,"vmName",355,356],
-szz:[function(a){this.am=F.Wi(this,C.KS,this.am,a)},null,null,3,0,25,23,[],"vmName",355],
-gw2:[function(){return this.y6},null,null,1,0,354,"entry",355,356],
-sw2:[function(a){this.y6=F.Wi(this,C.tP,this.y6,a)},null,null,3,0,357,23,[],"entry",355],
-gVc:[function(){return this.c8},null,null,1,0,370,"rootLib",355,356],
-sVc:[function(a){this.c8=F.Wi(this,C.iF,this.c8,a)},null,null,3,0,25,23,[],"rootLib",355],
-gCi:[function(){return this.qU},null,null,1,0,371,"newHeapUsed",355,356],
-sCi:[function(a){this.qU=F.Wi(this,C.IO,this.qU,a)},null,null,3,0,372,23,[],"newHeapUsed",355],
-guq:[function(){return this.yg},null,null,1,0,371,"oldHeapUsed",355,356],
-suq:[function(a){this.yg=F.Wi(this,C.ap,this.yg,a)},null,null,3,0,372,23,[],"oldHeapUsed",355],
-gUu:[function(){return this.YG},null,null,1,0,354,"topFrame",355,356],
-sUu:[function(a){this.YG=F.Wi(this,C.ch,this.YG,a)},null,null,3,0,357,23,[],"topFrame",355],
-gNh:[function(a){return this.jy},null,null,1,0,370,"fileAndLine",355,356],
-bj:function(a,b){return this.gNh(this).call$1(b)},
-sNh:[function(a,b){this.jy=F.Wi(this,C.SK,this.jy,b)},null,null,3,0,25,23,[],"fileAndLine",355],
-eC:[function(a){var z,y,x,w
-z=J.U6(a)
-if(!J.de(z.t(a,"type"),"Isolate")){N.Jx("").hh("Unexpected message type in Isolate.update: "+H.d(z.t(a,"type")))
-return}if(z.t(a,"rootLib")==null||z.t(a,"timers")==null||z.t(a,"heap")==null){N.Jx("").hh("Malformed 'Isolate' response: "+H.d(a))
-return}y=J.UQ(z.t(a,"rootLib"),"id")
-this.c8=F.Wi(this,C.iF,this.c8,y)
-y=z.t(a,"name")
-this.am=F.Wi(this,C.KS,this.am,y)
-if(z.t(a,"entry")!=null){y=z.t(a,"entry")
-y=F.Wi(this,C.tP,this.y6,y)
-this.y6=y
-y=J.UQ(y,"name")
-this.hI=F.Wi(this,C.YS,this.hI,y)}else this.hI=F.Wi(this,C.YS,this.hI,"root isolate")
-if(z.t(a,"topFrame")!=null){y=z.t(a,"topFrame")
-this.YG=F.Wi(this,C.ch,this.YG,y)}x=H.B7([],P.L5(null,null,null,null,null))
-J.kH(z.t(a,"timers"),new G.TI(x))
-y=this.LE
-w=J.w1(y)
-w.u(y,"total",x.t(0,"time_total_runtime"))
-w.u(y,"compile",x.t(0,"time_compilation"))
-w.u(y,"gc",0)
-w.u(y,"init",J.WB(J.WB(J.WB(x.t(0,"time_script_loading"),x.t(0,"time_creating_snapshot")),x.t(0,"time_isolate_initialization")),x.t(0,"time_bootstrap")))
-w.u(y,"dart",x.t(0,"time_dart_execution"))
-y=J.UQ(z.t(a,"heap"),"usedNew")
-this.qU=F.Wi(this,C.IO,this.qU,y)
-z=J.UQ(z.t(a,"heap"),"usedOld")
-this.yg=F.Wi(this,C.ap,this.yg,z)},"call$1","gpn",2,0,null,149,[]],
-bu:[function(a){return H.d(this.rI)},"call$0","gXo",0,0,null],
-hv:[function(a){var z,y,x,w
-z=this.Z0
-y=J.U6(z)
-x=0
-while(!0){w=y.gB(z)
-if(typeof w!=="number")return H.s(w)
-if(!(x<w))break
-if(J.kE(y.t(z,x),a)===!0)return y.t(z,x);++x}return},"call$1","gER",2,0,null,373,[]],
-R7:[function(){var z,y,x,w
-N.Jx("").To("Reset all code ticks.")
-z=this.Z0
-y=J.U6(z)
-x=0
-while(!0){w=y.gB(z)
-if(typeof w!=="number")return H.s(w)
-if(!(x<w))break
-y.t(z,x).FB();++x}},"call$0","gve",0,0,null],
-oe:[function(a){var z,y,x,w,v,u,t
-for(z=J.GP(a),y=this.XR,x=J.U6(y);z.G();){w=z.gl()
-v=J.U6(w)
-u=J.UQ(v.t(w,"script"),"id")
-t=x.t(y,u)
-if(t==null){t=G.Ak(v.t(w,"script"))
-x.u(y,u,t)}t.hC(v.t(w,"hits"))}},"call$1","gHY",2,0,null,374,[]],
-tx:[function(a,b,c){var z,y,x
-z=H.B7(["type",a,b,c],P.L5(null,null,null,null,null))
-y=this.zf.ec
-y.toString
-x=R.Jk(z)
-y.AJ=F.Wi(y,C.mE,y.AJ,x)},"call$3","gmk",6,0,null,11,[],375,[],285,[]],
-XT:[function(a,b){var z,y,x
-z=J.x(a)
-if(typeof a==="object"&&a!==null&&!!z.$isew){z=W.qc(a.target)
-y=J.RE(z)
-x=H.d(y.gys(z))+" "+y.gpo(z)
-if(y.gys(z)===0)x="No service found. Did you run with --enable-vm-service ?"
-this.zf.ec.Ww(x,"RequestError")}else this.zf.ec.AI(H.d(a)+" "+H.d(b))},"call$2","gdT",4,0,376,18,[],377,[]],
-n1:[function(a){var z,y,x
-z=G.Ep(a)
-y=J.x(z)
-if(y.n(z,0)){this.zf.ec.AI(a+" is not a valid code request.")
-return}x=this.hv(z)
-if(x!=null){N.Jx("").To("Found code with 0x"+y.WZ(z,16)+" in isolate.")
-this.tx("Code","code",x)
-return}this.zf.Sl(H.d(this.rI)+"/"+a).ml(new G.at(this,z)).OA(this.gdT())},"call$1","gN8",2,0,null,109,[]],
-PL:[function(a){var z,y
-z=J.UQ(this.XR,a)
-y=z!=null
-if(y&&!z.giI()){N.Jx("").To("Found script "+H.d(J.UQ(z.gKC(),"name"))+" in isolate")
-this.tx("Script","script",z)
-return}if(y){this.zf.Sl(H.d(this.rI)+"/"+a).ml(new G.wu(this,z))
-return}this.zf.Sl(H.d(this.rI)+"/"+a).ml(new G.Vc(this,a))},"call$1","gdk",2,0,null,109,[]],
-ox:[function(a){var z,y
-z=$.Ks().Ej
-y=typeof a!=="string"
-if(y)H.vh(new P.AT(a))
-if(z.test(a)){this.n1(a)
-return}z=$.hK().Ej
-if(y)H.vh(new P.AT(a))
-if(z.test(a)){this.PL(a)
-return}return this.zf.Sl(H.d(this.rI)+"/"+a).ml(new G.KQ(this,a))},"call$1","gVw",2,0,null,109,[]],
-oX:[function(a){return this.zf.Sl(H.d(this.rI)+"/"+H.d(a))},"call$1","guZ",2,0,null,109,[]],
-$isd3:true,
-static:{"^":"rC,lF",Ep:[function(a){var z,y,x,w,v,u
-z=$.Ks().R4(0,a)
-if(z==null)return 0
-try{x=z.gQK().input
-w=z
-v=w.gQK().index
-w=w.gQK()
-if(0>=w.length)return H.e(w,0)
-w=J.q8(w[0])
-if(typeof w!=="number")return H.s(w)
-y=H.BU(C.xB.yn(x,v+w),16,null)
-return y}catch(u){H.Ru(u)
-return 0}},"call$1","VP",2,0,null,109,[]]}},
-eS:{
-"^":"Tp:107;a",
-call$1:[function(a){return this.a.eC(a)},"call$1",null,2,0,null,191,[],"call"],
-$isEH:true},
-IQ:{
-"^":"Tp:107;b",
-call$1:[function(a){return this.b},"call$1",null,2,0,null,108,[],"call"],
-$isEH:true},
-TI:{
-"^":"Tp:107;a",
-call$1:[function(a){var z=J.U6(a)
-this.a.u(0,z.t(a,"name"),z.t(a,"time"))},"call$1",null,2,0,null,378,[],"call"],
-$isEH:true},
-at:{
-"^":"Tp:107;a,b",
-call$1:[function(a){var z,y,x,w,v
-z=R.Jk([])
-y=H.B7([],P.L5(null,null,null,null,null))
-y=R.Jk(y)
-x=H.B7([],P.L5(null,null,null,null,null))
-x=R.Jk(x)
-w=J.U6(a)
-v=new G.kx(C.l8,H.BU(w.t(a,"start"),16,null),H.BU(w.t(a,"end"),16,null),[],[],[],0,0,z,y,x,null,null,null,null)
-v.NV(a)
-N.Jx("").To("Added code with 0x"+J.u1(this.b,16)+" to isolate.")
-x=this.a
-J.bi(x.Z0,v)
-x.tx("Code","code",v)},"call$1",null,2,0,null,149,[],"call"],
-$isEH:true},
-wu:{
-"^":"Tp:107;a,b",
-call$1:[function(a){var z=this.b
-z.qi(J.UQ(a,"source"))
-N.Jx("").To("Grabbed script "+H.d(J.UQ(z.gKC(),"name"))+" source.")
-this.a.tx("Script","script",z)},"call$1",null,2,0,null,379,[],"call"],
-$isEH:true},
-Vc:{
-"^":"Tp:107;c,d",
-call$1:[function(a){var z,y
-z=G.Ak(a)
-N.Jx("").To("Added script "+H.d(J.UQ(z.VG,"name"))+" to isolate.")
-y=this.c
-y.tx("Script","script",z)
-J.kW(y.XR,this.d,z)},"call$1",null,2,0,null,379,[],"call"],
-$isEH:true},
-KQ:{
-"^":"Tp:107;a,b",
-call$1:[function(a){var z,y
-z=this.a
-y=J.U6(a)
-y=new G.SI(H.VM(new V.qC(P.Py(null,null,null,null,null),null,null),[null,null]),z,y.t(a,"id"),y.t(a,"type"),null,null,null,null)
-y.wp(z,a)
-return y},"call$1",null,2,0,null,191,[],"call"],
-$isEH:true},
+this.vR.V7("draw",[a.gYb(),z])},"call$1","gnS",2,0,null,185,[]]},
dZ:{
-"^":"Pi;ec?,jF,JL,MU,AP,fn",
-guw:function(a){return this.ec},
-gB1:[function(a){return this.jF},null,null,1,0,380,"profile",355,356],
-sB1:[function(a,b){this.jF=F.Wi(this,C.vb,this.jF,b)},null,null,3,0,381,23,[],"profile",355],
-gjW:[function(){return this.JL},null,null,1,0,370,"currentHash",355,356],
-sjW:[function(a){this.JL=F.Wi(this,C.h1,this.JL,a)},null,null,3,0,25,23,[],"currentHash",355],
-gXX:[function(){return this.MU},null,null,1,0,382,"currentHashUri",355,356],
-sXX:[function(a){this.MU=F.Wi(this,C.tv,this.MU,a)},null,null,3,0,383,23,[],"currentHashUri",355],
+"^":"Pi;ec?,JL,AP,Lk",
+gjW:[function(){return this.JL},null,null,1,0,365,"currentHash",358,359],
+sjW:[function(a){this.JL=F.Wi(this,C.h1,this.JL,a)},null,null,3,0,30,28,[],"currentHash",358],
kI:[function(){var z=C.PP.aM(window)
H.VM(new W.Ov(0,z.uv,z.Ph,W.aF(new G.Qe(this)),z.Sg),[H.Kp(z,0)]).Zz()
if(!this.S7())this.df()},"call$0","gV3",0,0,null],
-vI:[function(){var z,y,x,w,v
-z=$.oy().R4(0,this.JL)
-if(z==null)return
-y=z.QK
-x=y.input
-w=y.index
-v=y.index
-if(0>=y.length)return H.e(y,0)
-y=J.q8(y[0])
-if(typeof y!=="number")return H.s(y)
-return C.xB.Nj(x,w,v+y)},"call$0","gzJ",0,0,null],
-V4:[function(){var z,y,x,w
-z=$.oy().R4(0,this.JL)
+e8:[function(){var z,y,x,w
+z=$.wM().R4(0,this.JL)
if(z==null)return
y=z.QK
x=y.input
@@ -11002,332 +10885,46 @@
if(0>=y.length)return H.e(y,0)
y=J.q8(y[0])
if(typeof y!=="number")return H.s(y)
-return C.xB.yn(x,w+y)},"call$0","gdQ",0,0,null],
-gwB:[function(){return this.vI()!=null},null,null,1,0,380,"hasCurrentIsolate",356],
-R6:[function(){var z=this.vI()
+return C.xB.yn(x,w+y)},"call$0","gIZ",0,0,null],
+R6:[function(){var z,y,x,w
+z=$.QJ().R4(0,this.JL)
if(z==null)return""
-return J.D8(z,2)},"call$0","gKo",0,0,null],
+y=z.QK
+x=y.input
+w=y.index
+if(0>=y.length)return H.e(y,0)
+y=J.q8(y[0])
+if(typeof y!=="number")return H.s(y)
+return C.xB.Nj(x,2,w+y)},"call$0","gKo",0,0,null],
Pr:[function(){var z=this.R6()
if(z==="")return
-return this.ec.zf.AQ(z)},"call$0","gjf",0,0,358,"currentIsolate",356],
+return J.dm(this.ec.zf).AQ(z)},"call$0","gjf",0,0,357,"currentIsolate",359],
S7:[function(){var z=J.Co(C.ol.gmW(window))
z=F.Wi(this,C.h1,this.JL,z)
this.JL=z
if(J.de(z,"")||J.de(this.JL,"#")){J.We(C.ol.gmW(window),"#/isolates/")
return!0}return!1},"call$0","goO",0,0,null],
-df:[function(){var z,y,x,w
+rR:[function(a){var z=this.ec
+z.AJ=F.Wi(z,C.mE,z.AJ,a)},"call$1","gf8",2,0,366,367,[]],
+df:[function(){var z,y,x
z=J.Co(C.ol.gmW(window))
-z=F.Wi(this,C.h1,this.JL,z)
-this.JL=z
-y=J.D8(z,1)
+this.JL=F.Wi(this,C.h1,this.JL,z)
z=this.ec
-x=this.Pr()
-z.Eb=F.Wi(z,C.Z8,z.Eb,x)
-x=P.r6($.qG().ej(y))
-this.MU=F.Wi(this,C.tv,this.MU,x)
-if(this.ec.Eb==null){N.Jx("").j2("Refreshing isolates.")
-this.ec.zf.r3()
-return}w=this.V4()
-N.Jx("").To("Asking "+H.d(J.F8(this.ec.Eb))+" for "+w)
-this.ec.Eb.ox(w).ml(new G.GH(this))},"call$0","glq",0,0,null],
-static:{"^":"x4,Qq,qY"}},
+y=this.Pr()
+z.Eb=F.Wi(z,C.Z8,z.Eb,y)
+z=this.ec
+if(z.Eb==null){J.am(J.dm(z.zf)).ml(this.gf8())
+return}x=this.e8()
+this.ec.Eb.ox(x).ml(this.gf8())},"call$0","glq",0,0,null],
+static:{"^":"K3D,m6,vi"}},
Qe:{
-"^":"Tp:107;a",
+"^":"Tp:112;a",
call$1:[function(a){var z=this.a
if(z.S7())return
-F.Wi(z,C.D2,z.vI()==null,z.vI()!=null)
-z.df()},"call$1",null,2,0,null,384,[],"call"],
+z.df()},"call$1",null,2,0,null,368,[],"call"],
$isEH:true},
-GH:{
-"^":"Tp:107;a",
-call$1:[function(a){var z=this.a.ec
-z.AJ=F.Wi(z,C.mE,z.AJ,a)},"call$1",null,2,0,null,385,[],"call"],
-$isEH:true},
-Q4:{
-"^":["Pi;Yu<-386,m7<-387,L4<-387,NC,xb,AP,fn",function(){return[C.mI]},function(){return[C.mI]},function(){return[C.mI]},null,null,null,null],
-ga0:[function(){return this.NC},null,null,1,0,371,"ticks",355,356],
-sa0:[function(a){this.NC=F.Wi(this,C.p1,this.NC,a)},null,null,3,0,372,23,[],"ticks",355],
-gGK:[function(){return this.xb},null,null,1,0,388,"percent",355,356],
-sGK:[function(a){this.xb=F.Wi(this,C.tI,this.xb,a)},null,null,3,0,389,23,[],"percent",355],
-oS:[function(){var z=this.xb
-if(z==null||J.Hb(z,0))return""
-return J.Ez(this.xb,2)+"% ("+H.d(this.NC)+")"},"call$0","gu3",0,0,370,"formattedTicks",356],
-xt:[function(){return"0x"+J.u1(this.Yu,16)},"call$0","gDa",0,0,370,"formattedAddress",356]},
-WAE:{
-"^":"a;Zd",
-bu:[function(a){return"CodeKind."+this.Zd},"call$0","gXo",0,0,null],
-static:{"^":"r1,pg,WAg",CQ:[function(a){var z=J.x(a)
-if(z.n(a,"Native"))return C.nj
-else if(z.n(a,"Dart"))return C.l8
-else if(z.n(a,"Collected"))return C.WA
-throw H.b(P.hS())},"call$1","Tx",2,0,null,86,[]]}},
-N8:{
-"^":"a;Yu<,pO,Iw"},
-Vi:{
-"^":"a;tT>,Av<"},
-kx:{
-"^":["Pi;fY>,vg,Mb,a0<,VS<,hw,fF<,Du<,va<-390,tQ,Ge,hI,HJ,AP,fn",null,null,null,null,null,null,null,null,function(){return[C.mI]},null,null,null,null,null,null],
-gkx:[function(){return this.tQ},null,null,1,0,354,"functionRef",355,356],
-skx:[function(a){this.tQ=F.Wi(this,C.yg,this.tQ,a)},null,null,3,0,357,23,[],"functionRef",355],
-gZN:[function(){return this.Ge},null,null,1,0,354,"codeRef",355,356],
-sZN:[function(a){this.Ge=F.Wi(this,C.EX,this.Ge,a)},null,null,3,0,357,23,[],"codeRef",355],
-goc:[function(a){return this.hI},null,null,1,0,370,"name",355,356],
-soc:[function(a,b){this.hI=F.Wi(this,C.YS,this.hI,b)},null,null,3,0,25,23,[],"name",355],
-giK:[function(){return this.HJ},null,null,1,0,370,"userName",355,356],
-siK:[function(a){this.HJ=F.Wi(this,C.ct,this.HJ,a)},null,null,3,0,25,23,[],"userName",355],
-R3:[function(a,b){var z,y,x,w,v,u,t
-z=J.U6(b)
-this.fF=H.BU(z.t(b,"inclusive_ticks"),null,null)
-this.Du=H.BU(z.t(b,"exclusive_ticks"),null,null)
-y=z.t(b,"ticks")
-if(y!=null&&J.z8(J.q8(y),0)){z=J.U6(y)
-x=this.a0
-w=0
-while(!0){v=z.gB(y)
-if(typeof v!=="number")return H.s(v)
-if(!(w<v))break
-u=H.BU(z.t(y,w),16,null)
-t=H.BU(z.t(y,w+1),null,null)
-x.push(new G.N8(u,H.BU(z.t(y,w+2),null,null),t))
-w+=3}}},"call$1","gOT",2,0,null,149,[]],
-QQ:[function(){return this.uL(this.VS)},"call$0","gyj",0,0,null],
-dJ:[function(a){return this.KU(this.VS,a)},"call$1","gf7",2,0,null,141,[]],
-uL:[function(a){var z,y,x
-for(z=H.VM(new H.a7(a,a.length,0,null),[H.Kp(a,0)]),y=0;z.G();){x=z.lo.gAv()
-if(typeof x!=="number")return H.s(x)
-y+=x}return y},"call$1","grr",2,0,null,391,[]],
-KU:[function(a,b){var z,y
-for(z=H.VM(new H.a7(a,a.length,0,null),[H.Kp(a,0)]);z.G();){y=z.lo
-if(J.de(J.on(y),b))return y.gAv()}return 0},"call$2","gKZ",4,0,null,391,[],141,[]],
-xF:[function(a,b){var z=J.U6(a)
-this.lC(this.VS,z.t(a,"callers"),b)
-this.lC(this.hw,z.t(a,"callees"),b)},"call$2","gL0",4,0,null,141,[],392,[]],
-lC:[function(a,b,c){var z,y,x,w,v
-C.Nm.sB(a,0)
-z=J.U6(b)
-y=0
-while(!0){x=z.gB(b)
-if(typeof x!=="number")return H.s(x)
-if(!(y<x))break
-w=H.BU(z.t(b,y),null,null)
-v=H.BU(z.t(b,y+1),null,null)
-if(w>>>0!==w||w>=c.length)return H.e(c,w)
-a.push(new G.Vi(c[w],v))
-y+=2}H.ZE(a,0,a.length-1,new G.fx())},"call$3","gPG",6,0,null,391,[],239,[],392,[]],
-FB:[function(){this.fF=0
-this.Du=0
-C.Nm.sB(this.a0,0)
-for(var z=J.GP(this.va);z.G();)z.gl().sa0(0)},"call$0","gNB",0,0,null],
-iv:[function(a){var z,y,x,w,v
-z=this.va
-y=J.w1(z)
-y.V1(z)
-x=J.U6(a)
-w=0
-while(!0){v=x.gB(a)
-if(typeof v!=="number")return H.s(v)
-if(!(w<v))break
-c$0:{if(J.de(x.t(a,w),""))break c$0
-y.h(z,new G.Q4(H.BU(x.t(a,w),null,null),x.t(a,w+1),x.t(a,w+2),0,null,null,null))}w+=3}},"call$1","goU",2,0,null,393,[]],
-tg:[function(a,b){var z=J.Wx(b)
-return z.F(b,this.vg)&&z.C(b,this.Mb)},"call$1","gdj",2,0,null,373,[]],
-NV:function(a){var z,y
-z=J.U6(a)
-y=z.t(a,"function")
-y=R.Jk(y)
-this.tQ=F.Wi(this,C.yg,this.tQ,y)
-y=R.Jk(a)
-this.Ge=F.Wi(this,C.EX,this.Ge,y)
-y=z.t(a,"name")
-this.hI=F.Wi(this,C.YS,this.hI,y)
-y=z.t(a,"user_name")
-this.HJ=F.Wi(this,C.ct,this.HJ,y)
-if(z.t(a,"disassembly")!=null)this.iv(z.t(a,"disassembly"))},
-$iskx:true},
-fx:{
-"^":"Tp:346;",
-call$2:[function(a,b){return J.xH(b.gAv(),a.gAv())},"call$2",null,4,0,null,128,[],188,[],"call"],
-$isEH:true},
-CM:{
-"^":"a;Aq>,tm,hV<",
-j8:[function(a){var z,y,x,w,v,u,t,s,r,q,p,o
-z=J.U6(a)
-if(!J.de(z.t(a,"type"),"ProfileCode"))return
-y=this.Aq
-x=y.hv(H.BU(J.UQ(z.t(a,"code"),"start"),16,null))
-if(x==null){w=G.CQ(z.t(a,"kind"))
-v=z.t(a,"code")
-z=J.U6(v)
-u=H.BU(z.t(v,"start"),16,null)
-t=H.BU(z.t(v,"end"),16,null)
-s=z.t(v,"name")
-r=z.t(v,"user_name")
-q=R.Jk([])
-p=H.B7([],P.L5(null,null,null,null,null))
-p=R.Jk(p)
-o=H.B7([],P.L5(null,null,null,null,null))
-o=R.Jk(o)
-x=new G.kx(w,u,t,[],[],[],0,0,q,p,o,s,null,null,null)
-x.Ge=F.Wi(x,C.EX,o,v)
-o=z.t(v,"function")
-q=R.Jk(o)
-x.tQ=F.Wi(x,C.yg,x.tQ,q)
-x.HJ=F.Wi(x,C.ct,x.HJ,r)
-if(z.t(v,"disassembly")!=null){x.iv(z.t(v,"disassembly"))
-z.u(v,"disassembly",null)}J.bi(y.gZ0(),x)}J.JD(x,a)
-this.tm.push(x)},"call$1","gWF",2,0,null,394,[]],
-T0:[function(a){var z,y
-z=this.Aq.gZ0()
-y=J.w1(z)
-y.GT(z,new G.vu())
-if(J.u6(y.gB(z),a)||J.de(a,0))return z
-return y.D6(z,0,a)},"call$1","gmZ",2,0,null,127,[]],
-uH:function(a,b){var z,y,x,w,v
-z=J.U6(b)
-y=z.t(b,"codes")
-this.hV=z.t(b,"samples")
-z=J.U6(y)
-N.Jx("").To("Creating profile from "+H.d(this.hV)+" samples and "+H.d(z.gB(y))+" code objects.")
-this.Aq.R7()
-x=this.tm
-C.Nm.sB(x,0)
-z.aN(y,new G.xn(this))
-w=0
-while(!0){v=z.gB(y)
-if(typeof v!=="number")return H.s(v)
-if(!(w<v))break
-if(w>=x.length)return H.e(x,w)
-x[w].xF(z.t(y,w),x);++w}C.Nm.sB(x,0)},
-static:{hh:function(a,b){var z=new G.CM(a,H.VM([],[G.kx]),0)
-z.uH(a,b)
-return z}}},
-xn:{
-"^":"Tp:107;a",
-call$1:[function(a){var z,y,x,w
-try{this.a.j8(a)}catch(x){w=H.Ru(x)
-z=w
-y=new H.XO(x,null)
-N.Jx("").wF("Error processing code object. "+H.d(z)+" "+H.d(y),z,y)}},"call$1",null,2,0,null,141,[],"call"],
-$isEH:true},
-vu:{
-"^":"Tp:395;",
-call$2:[function(a,b){return J.xH(b.gDu(),a.gDu())},"call$2",null,4,0,null,128,[],188,[],"call"],
-$isEH:true},
-c2:{
-"^":["Pi;Rd>-386,ye,i0,AP,fn",function(){return[C.mI]},null,null,null,null],
-gu9:[function(){return this.ye},null,null,1,0,371,"hits",355,356],
-su9:[function(a){this.ye=F.Wi(this,C.K7,this.ye,a)},null,null,3,0,372,23,[],"hits",355],
-ga4:[function(a){return this.i0},null,null,1,0,370,"text",355,356],
-sa4:[function(a,b){this.i0=F.Wi(this,C.MB,this.i0,b)},null,null,3,0,25,23,[],"text",355],
-goG:function(){return J.J5(this.ye,0)},
-gVt:function(){return J.z8(this.ye,0)},
-$isc2:true},
-rj:{
-"^":["Pi;I2,VG,pw,tq,Sw<-396,iA,AP,fn",null,null,null,null,function(){return[C.mI]},null,null,null],
-gfY:[function(a){return this.I2},null,null,1,0,370,"kind",355,356],
-sfY:[function(a,b){this.I2=F.Wi(this,C.fy,this.I2,b)},null,null,3,0,25,23,[],"kind",355],
-gKC:[function(){return this.VG},null,null,1,0,354,"scriptRef",355,356],
-sKC:[function(a){this.VG=F.Wi(this,C.Be,this.VG,a)},null,null,3,0,357,23,[],"scriptRef",355],
-gQT:[function(){return this.pw},null,null,1,0,370,"shortName",355,397],
-sQT:[function(a){this.pw=F.Wi(this,C.Kt,this.pw,a)},null,null,3,0,25,23,[],"shortName",355],
-gBi:[function(){return this.tq},null,null,1,0,354,"libraryRef",355,356],
-sBi:[function(a){this.tq=F.Wi(this,C.cg,this.tq,a)},null,null,3,0,357,23,[],"libraryRef",355],
-giI:function(){return this.iA},
-gHh:[function(){return J.Pr(this.Sw,1)},null,null,1,0,398,"linesForDisplay",356],
-H2:[function(a){var z,y,x,w
-z=this.Sw
-y=J.U6(z)
-x=J.Wx(a)
-if(x.F(a,y.gB(z)))y.sB(z,x.g(a,1))
-w=y.t(z,a)
-if(w==null){w=new G.c2(a,-1,"",null,null)
-y.u(z,a,w)}return w},"call$1","git",2,0,null,399,[]],
-qi:[function(a){var z,y,x,w
-if(a==null)return
-N.Jx("").To("Loading source for "+H.d(J.UQ(this.VG,"name")))
-z=J.uH(a,"\n")
-this.iA=z.length===0
-for(y=0;y<z.length;y=x){x=y+1
-w=this.H2(x)
-if(y>=z.length)return H.e(z,y)
-J.c9(w,z[y])}},"call$1","gUe",2,0,null,27,[]],
-hC:[function(a){var z,y,x
-z=J.U6(a)
-y=0
-while(!0){x=z.gB(a)
-if(typeof x!=="number")return H.s(x)
-if(!(y<x))break
-this.H2(z.t(a,y)).su9(z.t(a,y+1))
-y+=2}F.Wi(this,C.C2,"","("+C.CD.yM(this.Nk(),1)+"% covered)")},"call$1","geL",2,0,null,400,[]],
-Nk:[function(){var z,y,x,w
-for(z=J.GP(this.Sw),y=0,x=0;z.G();){w=z.gl()
-if(w==null)continue
-if(!w.goG())continue;++x
-if(!w.gVt())continue;++y}if(x===0)return 0
-return y/x*100},"call$0","gUO",0,0,388,"coveredPercentage",356],
-Jt:[function(){return"("+C.CD.yM(this.Nk(),1)+"% covered)"},"call$0","gic",0,0,370,"coveredPercentageFormatted",356],
-Ea:function(a){var z,y
-z=J.U6(a)
-y=H.B7(["id",z.t(a,"id"),"name",z.t(a,"name"),"user_name",z.t(a,"user_name")],P.L5(null,null,null,null,null))
-y=R.Jk(y)
-this.VG=F.Wi(this,C.Be,this.VG,y)
-y=J.D8(z.t(a,"name"),J.WB(J.eJ(z.t(a,"name"),"/"),1))
-this.pw=F.Wi(this,C.Kt,this.pw,y)
-y=z.t(a,"library")
-y=R.Jk(y)
-this.tq=F.Wi(this,C.cg,this.tq,y)
-y=z.t(a,"kind")
-this.I2=F.Wi(this,C.fy,this.I2,y)
-this.qi(z.t(a,"source"))},
-$isrj:true,
-static:{Ak:function(a){var z,y,x
-z=H.B7([],P.L5(null,null,null,null,null))
-z=R.Jk(z)
-y=H.B7([],P.L5(null,null,null,null,null))
-y=R.Jk(y)
-x=H.VM([],[G.c2])
-x=R.Jk(x)
-x=new G.rj(null,z,null,y,x,!0,null,null)
-x.Ea(a)
-return x}}},
-af:{
-"^":"d3;Aq>",
-gPj:function(a){return H.d(this.Aq.rI)+"/"+H.d(this.rI)},
-gjO:function(a){return this.rI}},
-SI:{
-"^":"af;YY,Aq,rI,we,R9,wv,V2,me",
-zr:[function(a){var z=this.Aq
-z.zf.Sl(H.d(z.rI)+"/"+H.d(this.rI)).ml(this.gE7())
-return P.Ab(this,null)},"call$0","gvC",0,0,null],
-Tn:[function(a){var z=this.YY
-z.V1(0)
-z.FV(0,a)},"call$1","gE7",2,0,401,191,[]],
-FV:[function(a,b){return this.YY.FV(0,b)},"call$1","gDY",2,0,null,104,[]],
-V1:[function(a){return this.YY.V1(0)},"call$0","gyP",0,0,null],
-di:[function(a){return this.YY.Zp.di(a)},"call$1","gmc",2,0,null,277,[]],
-x4:[function(a){return this.YY.Zp.x4(a)},"call$1","gV9",2,0,null,402,[]],
-aN:[function(a,b){return this.YY.Zp.aN(0,b)},"call$1","gjw",2,0,null,115,[]],
-Rz:[function(a,b){return this.YY.Rz(0,b)},"call$1","gRI",2,0,null,42,[]],
-t:[function(a,b){return this.YY.Zp.t(0,b)},"call$1","gIA",2,0,null,402,[]],
-u:[function(a,b,c){this.YY.u(0,b,c)
-return c},"call$2","gj3",4,0,null,402,[],277,[]],
-gl0:function(a){var z=this.YY.Zp
-return z.gB(z)===0},
-gor:function(a){var z=this.YY.Zp
-return z.gB(z)!==0},
-gvc:function(a){var z=this.YY.Zp
-return z.gvc(z)},
-gUQ:function(a){var z=this.YY.Zp
-return z.gUQ(z)},
-gB:function(a){var z=this.YY.Zp
-return z.gB(z)},
-wp:function(a,b){var z=this.YY
-z.V1(0)
-z.FV(0,b)},
-$isZ0:true,
-$asZ0:function(){return[null,null]}},
Y2:{
-"^":["Pi;eT>,yt<-386,wd>-403,oH<-404",null,function(){return[C.mI]},function(){return[C.mI]},function(){return[C.mI]}],
+"^":["Pi;eT>,yt<-369,wd>-370,oH<-371",null,function(){return[C.mI]},function(){return[C.mI]},function(){return[C.mI]}],
goE:function(a){return this.z3},
soE:function(a,b){var z=this.z3
this.z3=b
@@ -11337,15 +10934,15 @@
return this.z3},"call$0","gMk",0,0,null],
$isY2:true},
XN:{
-"^":["Pi;rO,WT>-403,AP,fn",null,function(){return[C.mI]},null,null],
+"^":["Pi;rI,WT>-370,AP,Lk",null,function(){return[C.mI]},null,null],
rT:[function(a){var z,y
z=this.WT
y=J.w1(z)
y.V1(z)
-y.FV(z,a)},"call$1","gcr",2,0,null,405,[]],
-Mf:[function(a){var z=J.UQ(this.WT,a)
+y.FV(z,a)},"call$1","gcr",2,0,null,372,[]],
+qU:[function(a){var z=J.UQ(this.WT,a)
if(z.r8())this.VE(z)
-else this.PP(z)},"call$1","gMk",2,0,null,406,[]],
+else this.PP(z)},"call$1","gMk",2,0,null,373,[]],
VE:[function(a){var z,y,x,w,v,u,t
z=this.WT
y=J.U6(z)
@@ -11358,7 +10955,7 @@
u=x+v+1
t=J.UQ(w.gwd(a),v)
if(u===-1)y.h(z,t)
-else y.xe(z,u,t);++v}},"call$1","gxY",2,0,null,363,[]],
+else y.xe(z,u,t);++v}},"call$1","gxY",2,0,null,364,[]],
PP:[function(a){var z,y,x,w,v
z=J.RE(a)
y=J.q8(z.gwd(a))
@@ -11369,159 +10966,37 @@
z.soE(a,!1)
z=this.WT
w=J.U6(z)
-for(v=w.u8(z,a)+1,x=0;x<y;++x)w.KI(z,v)},"call$1","gNu",2,0,null,363,[]]},
-No:{
-"^":["Pi;ec?,i2<-407",null,function(){return[C.mI]}],
-guw:[function(a){return this.ec},null,null,1,0,408,"app",356],
-Sl:[function(a){return this.GS(a).ml(new G.PG()).OA(new G.YW())},"call$1","gdI",2,0,null,265,[]],
-AQ:[function(a){var z,y,x,w,v,u
-z=this.i2
-y=J.U6(z)
-x=y.t(z,a)
-if(x!=null)return x
-w=P.L5(null,null,null,J.O,G.rj)
-w=R.Jk(w)
-v=H.VM([],[G.kx])
-u=P.L5(null,null,null,J.O,J.GW)
-u=R.Jk(u)
-x=new G.bv(this,a,"Isolate",null,w,v,"isolate",null,null,null,u,0,0,null,null,null,null)
-y.u(z,a,x)
-return x},"call$1","grE",2,0,null,110,[]],
-GR:[function(a){var z=[]
-J.kH(this.i2,new G.Yu(a,z))
-H.bQ(z,new G.y2(this))
-J.kH(a,new G.Hq(this))},"call$1","gZM",2,0,null,111,[]],
-r3:[function(){this.Sl("isolates").ml(new G.Pl(this))},"call$0","gNI",0,0,null]},
-PG:{
-"^":"Tp:107;",
-call$1:[function(a){var z,y,x,w,v
-try{z=C.xr.kV(a)
-w=R.Jk(z)
-return w}catch(v){w=H.Ru(v)
-y=w
-x=new H.XO(v,null)
-w=H.B7(["type","Error","errorType","DecodeError","text",H.d(y)+" "+H.d(x)],P.L5(null,null,null,null,null))
-w=R.Jk(w)
-return w}},"call$1",null,2,0,null,379,[],"call"],
-$isEH:true},
-YW:{
-"^":"Tp:107;",
-call$1:[function(a){var z=H.B7(["type","Error","errorType","FetchError","text",H.d(a)],P.L5(null,null,null,null,null))
-return R.Jk(z)},"call$1",null,2,0,null,160,[],"call"],
-$isEH:true},
-BO:{
-"^":"Tp:107;a",
-call$1:[function(a){return J.de(J.UQ(a,"id"),this.a)},"call$1",null,2,0,null,409,[],"call"],
-$isEH:true},
-Yu:{
-"^":"Tp:346;a,b",
-call$2:[function(a,b){if(G.js(a,this.a)!==!0)this.b.push(a)},"call$2",null,4,0,null,402,[],277,[],"call"],
-$isEH:true},
-y2:{
-"^":"Tp:107;c",
-call$1:[function(a){J.V1(this.c.i2,a)},"call$1",null,2,0,null,110,[],"call"],
-$isEH:true},
-Hq:{
-"^":"Tp:107;d",
-call$1:[function(a){var z,y,x,w,v,u,t,s,r
-z=J.U6(a)
-y=z.t(a,"id")
-x=this.d
-w=x.i2
-v=J.U6(w)
-u=v.t(w,y)
-if(u==null){t=P.L5(null,null,null,J.O,G.rj)
-t=R.Jk(t)
-s=H.VM([],[G.kx])
-r=P.L5(null,null,null,J.O,J.GW)
-r=R.Jk(r)
-u=new G.bv(x,z.t(a,"id"),"Isolate",null,t,s,z.t(a,"name"),null,null,null,r,0,0,null,null,null,null)
-v.u(w,y,u)}J.KM(u)},"call$1",null,2,0,null,149,[],"call"],
-$isEH:true},
-Pl:{
-"^":"Tp:107;a",
-call$1:[function(a){var z,y
-z=this.a
-z.GR(J.UQ(a,"members"))
-z=z.ec
-z.toString
-y=R.Jk(a)
-z.AJ=F.Wi(z,C.mE,z.AJ,y)},"call$1",null,2,0,null,149,[],"call"],
-$isEH:true},
-XK:{
-"^":["No;Yu<,ec,i2-407,AP,fn",null,null,function(){return[C.mI]},null,null],
-GS:[function(a){var z=this.Yu
-N.Jx("").To("Fetching "+H.d(a)+" from "+z)
-return W.It(C.xB.g(z,a),null,null)},"call$1","gFw",2,0,null,265,[]]},
-ho:{
-"^":["No;Ct,pL,ec,i2-407,AP,fn",null,null,null,function(){return[C.mI]},null,null],
-rz:[function(a){var z,y,x,w,v
-z=J.RE(a)
-y=J.UQ(z.gRn(a),"id")
-x=J.UQ(z.gRn(a),"name")
-w=J.UQ(z.gRn(a),"data")
-if(!J.de(x,"observatoryData"))return
-z=this.Ct
-v=z.t(0,y)
-z.Rz(0,y)
-J.Xf(v,w)},"call$1","gcW",2,0,158,19,[]],
-GS:[function(a){var z,y,x
-z=""+this.pL
-y=H.B7([],P.L5(null,null,null,null,null))
-y.u(0,"id",z)
-y.u(0,"method","observatoryQuery")
-y.u(0,"query","/"+H.d(a))
-this.pL=this.pL+1
-x=H.VM(new P.Zf(P.Dt(null)),[null])
-this.Ct.u(0,z,x)
-J.Ih(W.Pv(window.parent),C.xr.KP(y),"*")
-return x.MM},"call$1","gFw",2,0,null,265,[]]}}],["app_bootstrap","index_devtools.html_bootstrap.dart",,E,{
+for(v=w.u8(z,a)+1,x=0;x<y;++x)w.KI(z,v)},"call$1","gNu",2,0,null,364,[]]}}],["app_bootstrap","index_devtools.html_bootstrap.dart",,E,{
"^":"",
-YF:[function(){$.x2=["package:observatory/src/elements/observatory_element.dart","package:observatory/src/elements/isolate_element.dart","package:observatory/src/elements/nav_bar.dart","package:observatory/src/elements/breakpoint_list.dart","package:observatory/src/elements/service_ref.dart","package:observatory/src/elements/class_ref.dart","package:observatory/src/elements/error_view.dart","package:observatory/src/elements/field_ref.dart","package:observatory/src/elements/function_ref.dart","package:observatory/src/elements/curly_block.dart","package:observatory/src/elements/instance_ref.dart","package:observatory/src/elements/library_ref.dart","package:observatory/src/elements/class_view.dart","package:observatory/src/elements/code_ref.dart","package:observatory/src/elements/disassembly_entry.dart","package:observatory/src/elements/code_view.dart","package:observatory/src/elements/collapsible_content.dart","package:observatory/src/elements/field_view.dart","package:observatory/src/elements/function_view.dart","package:observatory/src/elements/script_ref.dart","package:observatory/src/elements/isolate_summary.dart","package:observatory/src/elements/vm_element.dart","package:observatory/src/elements/isolate_list.dart","package:observatory/src/elements/instance_view.dart","package:observatory/src/elements/json_view.dart","package:observatory/src/elements/library_view.dart","package:observatory/src/elements/heap_profile.dart","package:observatory/src/elements/isolate_profile.dart","package:observatory/src/elements/script_view.dart","package:observatory/src/elements/stack_frame.dart","package:observatory/src/elements/stack_trace.dart","package:observatory/src/elements/message_viewer.dart","package:observatory/src/elements/response_viewer.dart","package:observatory/src/elements/observatory_application.dart","main.dart"]
+YF:[function(){$.x2=["package:observatory/src/elements/observatory_element.dart","package:observatory/src/elements/nav_bar.dart","package:observatory/src/elements/breakpoint_list.dart","package:observatory/src/elements/service_ref.dart","package:observatory/src/elements/class_ref.dart","package:observatory/src/elements/error_view.dart","package:observatory/src/elements/field_ref.dart","package:observatory/src/elements/function_ref.dart","package:observatory/src/elements/curly_block.dart","package:observatory/src/elements/instance_ref.dart","package:observatory/src/elements/library_ref.dart","package:observatory/src/elements/class_view.dart","package:observatory/src/elements/code_ref.dart","package:observatory/src/elements/code_view.dart","package:observatory/src/elements/collapsible_content.dart","package:observatory/src/elements/eval_box.dart","package:observatory/src/elements/field_view.dart","package:observatory/src/elements/function_view.dart","package:observatory/src/elements/script_ref.dart","package:observatory/src/elements/isolate_summary.dart","package:observatory/src/elements/isolate_list.dart","package:observatory/src/elements/instance_view.dart","package:observatory/src/elements/json_view.dart","package:observatory/src/elements/library_view.dart","package:observatory/src/elements/isolate_profile.dart","package:observatory/src/elements/heap_profile.dart","package:observatory/src/elements/script_view.dart","package:observatory/src/elements/stack_frame.dart","package:observatory/src/elements/stack_trace.dart","package:observatory/src/elements/service_view.dart","package:observatory/src/elements/response_viewer.dart","package:observatory/src/elements/observatory_application.dart","main.dart"]
$.uP=!1
-F.E2()},"call$0","nE",0,0,112]},1],["breakpoint_list_element","package:observatory/src/elements/breakpoint_list.dart",,B,{
+F.E2()},"call$0","nE",0,0,114]},1],["breakpoint_list_element","package:observatory/src/elements/breakpoint_list.dart",,B,{
"^":"",
G6:{
-"^":["Ur;BW%-410,AP,fn,pC-411,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0-412",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
-grs:[function(a){return a.BW},null,null,1,0,354,"msg",355,397],
-srs:[function(a,b){a.BW=this.ct(a,C.UX,a.BW,b)},null,null,3,0,357,23,[],"msg",355],
-RF:[function(a,b){a.pC.oX("breakpoints").ml(new B.j3(a)).OA(new B.i0()).YM(b)},"call$1","gvC",2,0,158,413,[],"refresh"],
+"^":["Vf;BW%-374,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0-375",null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.Nw]}],
+grs:[function(a){return a.BW},null,null,1,0,376,"msg",358,377],
+srs:[function(a,b){a.BW=this.ct(a,C.UX,a.BW,b)},null,null,3,0,378,28,[],"msg",358],
+yv:[function(a,b){J.am(a.BW).YM(b)},"call$1","gvC",2,0,157,379,[],"refresh"],
"@":function(){return[C.jy]},
-static:{Dw:[function(a){var z,y,x,w,v
-z=H.B7([],P.L5(null,null,null,null,null))
-z=R.Jk(z)
-y=$.Nd()
-x=P.Py(null,null,null,J.O,W.I0)
-w=J.O
-v=W.cv
-v=H.VM(new V.qC(P.Py(null,null,null,w,v),null,null),[w,v])
-a.BW=z
-a.SO=y
-a.B7=x
-a.X0=v
+static:{Dw:[function(a){var z,y,x,w
+z=$.Nd()
+y=P.Py(null,null,null,J.O,W.I0)
+x=J.O
+w=W.cv
+w=H.VM(new V.qC(P.Py(null,null,null,x,w),null,null),[x,w])
+a.SO=z
+a.B7=y
+a.X0=w
C.J0.ZL(a)
C.J0.G6(a)
-return a},null,null,0,0,113,"new BreakpointListElement$created"]}},
-"+BreakpointListElement":[414],
-Ur:{
-"^":"PO+Pi;",
-$isd3:true},
-j3:{
-"^":"Tp:107;a-77",
-call$1:[function(a){var z,y
-z=this.a
-y=J.RE(z)
-y.sBW(z,y.ct(z,C.UX,y.gBW(z),a))},"call$1",null,2,0,107,149,[],"call"],
-$isEH:true},
-"+BreakpointListElement_refresh_closure":[415],
-i0:{
-"^":"Tp:346;",
-call$2:[function(a,b){N.Jx("").hh("Error while refreshing breakpoint-list: "+H.d(a)+"\n"+H.d(b))},"call$2",null,4,0,346,18,[],416,[],"call"],
-$isEH:true},
-"+BreakpointListElement_refresh_closure":[415]}],["class_ref_element","package:observatory/src/elements/class_ref.dart",,Q,{
+return a},null,null,0,0,115,"new BreakpointListElement$created"]}},
+"+BreakpointListElement":[380],
+Vf:{
+"^":"uL+Pi;",
+$isd3:true}}],["class_ref_element","package:observatory/src/elements/class_ref.dart",,Q,{
"^":"",
Tg:{
-"^":["xI;tY-410,Pe-417,AP,fn,pC-411,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0-412",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
+"^":["xI;tY-381,Pe-382,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0-375",null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.Nw]}],
"@":function(){return[C.OS]},
static:{rt:[function(a){var z,y,x,w
z=$.Nd()
@@ -11535,15 +11010,15 @@
a.X0=w
C.YZ.ZL(a)
C.YZ.G6(a)
-return a},null,null,0,0,113,"new ClassRefElement$created"]}},
-"+ClassRefElement":[418]}],["class_view_element","package:observatory/src/elements/class_view.dart",,Z,{
+return a},null,null,0,0,115,"new ClassRefElement$created"]}},
+"+ClassRefElement":[383]}],["class_view_element","package:observatory/src/elements/class_view.dart",,Z,{
"^":"",
-Ps:{
-"^":["KU;F0%-410,AP,fn,pC-411,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0-412",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
-gRu:[function(a){return a.F0},null,null,1,0,354,"cls",355,397],
-sRu:[function(a,b){a.F0=this.ct(a,C.XA,a.F0,b)},null,null,3,0,357,23,[],"cls",355],
-RF:[function(a,b){a.pC.oX(J.UQ(a.F0,"id")).ml(new Z.RI(a)).OA(new Z.Ye()).YM(b)},"call$1","gvC",2,0,158,413,[],"refresh"],
-"@":function(){return[C.aQx]},
+Jc:{
+"^":["pv;F0%-374,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0-375",null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.Nw]}],
+gRu:[function(a){return a.F0},null,null,1,0,376,"cls",358,377],
+sRu:[function(a,b){a.F0=this.ct(a,C.XA,a.F0,b)},null,null,3,0,378,28,[],"cls",358],
+yv:[function(a,b){J.am(a.F0).YM(b)},"call$1","gvC",2,0,157,379,[],"refresh"],
+"@":function(){return[C.oY]},
static:{zg:[function(a){var z,y,x,w
z=$.Nd()
y=P.Py(null,null,null,J.O,W.I0)
@@ -11555,27 +11030,14 @@
a.X0=w
C.kk.ZL(a)
C.kk.G6(a)
-return a},null,null,0,0,113,"new ClassViewElement$created"]}},
-"+ClassViewElement":[419],
-KU:{
-"^":"PO+Pi;",
-$isd3:true},
-RI:{
-"^":"Tp:107;a-77",
-call$1:[function(a){var z,y
-z=this.a
-y=J.RE(z)
-y.sF0(z,y.ct(z,C.XA,y.gF0(z),a))},"call$1",null,2,0,107,149,[],"call"],
-$isEH:true},
-"+ClassViewElement_refresh_closure":[415],
-Ye:{
-"^":"Tp:346;",
-call$2:[function(a,b){N.Jx("").hh("Error while refreshing class-view: "+H.d(a)+"\n"+H.d(b))},"call$2",null,4,0,346,18,[],416,[],"call"],
-$isEH:true},
-"+ClassViewElement_refresh_closure":[415]}],["code_ref_element","package:observatory/src/elements/code_ref.dart",,O,{
+return a},null,null,0,0,115,"new ClassViewElement$created"]}},
+"+ClassViewElement":[384],
+pv:{
+"^":"uL+Pi;",
+$isd3:true}}],["code_ref_element","package:observatory/src/elements/code_ref.dart",,O,{
"^":"",
CN:{
-"^":["xI;tY-410,Pe-417,AP,fn,pC-411,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0-412",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
+"^":["xI;tY-381,Pe-382,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0-375",null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.Nw]}],
"@":function(){return[C.U8]},
static:{On:[function(a){var z,y,x,w
z=$.Nd()
@@ -11589,15 +11051,21 @@
a.X0=w
C.IK.ZL(a)
C.IK.G6(a)
-return a},null,null,0,0,113,"new CodeRefElement$created"]}},
-"+CodeRefElement":[418]}],["code_view_element","package:observatory/src/elements/code_view.dart",,F,{
+return a},null,null,0,0,115,"new CodeRefElement$created"]}},
+"+CodeRefElement":[383]}],["code_view_element","package:observatory/src/elements/code_view.dart",,F,{
"^":"",
-HT:{
-"^":["qbd;eJ%-420,AP,fn,pC-411,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0-412",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
-gtT:[function(a){return a.eJ},null,null,1,0,421,"code",355,397],
-stT:[function(a,b){a.eJ=this.ct(a,C.b1,a.eJ,b)},null,null,3,0,422,23,[],"code",355],
-grK:[function(a){return"panel panel-success"},null,null,1,0,370,"cssPanelClass"],
-"@":function(){return[C.xW]},
+Be:{
+"^":["Vfx;Xx%-385,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0-375",null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.Nw]}],
+gtT:[function(a){return a.Xx},null,null,1,0,386,"code",358,377],
+stT:[function(a,b){a.Xx=this.ct(a,C.b1,a.Xx,b)},null,null,3,0,387,28,[],"code",358],
+i4:[function(a){var z
+Z.uL.prototype.i4.call(this,a)
+z=a.Xx
+if(z==null)return
+J.SK(z)},"call$0","gQd",0,0,114,"enteredView"],
+yv:[function(a,b){J.am(a.Xx).YM(b)},"call$1","gvC",2,0,157,379,[],"refresh"],
+grK:[function(a){return"panel panel-success"},null,null,1,0,365,"cssPanelClass"],
+"@":function(){return[C.xz]},
static:{Fe:[function(a){var z,y,x,w
z=$.Nd()
y=P.Py(null,null,null,J.O,W.I0)
@@ -11609,34 +11077,34 @@
a.X0=w
C.YD.ZL(a)
C.YD.G6(a)
-return a},null,null,0,0,113,"new CodeViewElement$created"]}},
-"+CodeViewElement":[423],
-qbd:{
-"^":"PO+Pi;",
+return a},null,null,0,0,115,"new CodeViewElement$created"]}},
+"+CodeViewElement":[388],
+Vfx:{
+"^":"uL+Pi;",
$isd3:true}}],["collapsible_content_element","package:observatory/src/elements/collapsible_content.dart",,R,{
"^":"",
E0:{
-"^":["Ds;zh%-387,HX%-387,Uy%-417,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0-412",null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
-gl7:[function(a){return a.zh},null,null,1,0,370,"iconClass",355,356],
-sl7:[function(a,b){a.zh=this.ct(a,C.Di,a.zh,b)},null,null,3,0,25,23,[],"iconClass",355],
-gai:[function(a){return a.HX},null,null,1,0,370,"displayValue",355,356],
-sai:[function(a,b){a.HX=this.ct(a,C.Jw,a.HX,b)},null,null,3,0,25,23,[],"displayValue",355],
-gxj:[function(a){return a.Uy},null,null,1,0,380,"collapsed"],
+"^":["Dsd;zh%-389,HX%-389,Uy%-382,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0-375",null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.Nw]}],
+gl7:[function(a){return a.zh},null,null,1,0,365,"iconClass",358,359],
+sl7:[function(a,b){a.zh=this.ct(a,C.Di,a.zh,b)},null,null,3,0,30,28,[],"iconClass",358],
+gai:[function(a){return a.HX},null,null,1,0,365,"displayValue",358,359],
+sai:[function(a,b){a.HX=this.ct(a,C.Jw,a.HX,b)},null,null,3,0,30,28,[],"displayValue",358],
+gxj:[function(a){return a.Uy},null,null,1,0,390,"collapsed"],
sxj:[function(a,b){a.Uy=b
-this.np(a)},null,null,3,0,381,424,[],"collapsed"],
+this.SS(a)},null,null,3,0,391,392,[],"collapsed"],
i4:[function(a){Z.uL.prototype.i4.call(this,a)
-this.np(a)},"call$0","gQd",0,0,112,"enteredView"],
+this.SS(a)},"call$0","gQd",0,0,114,"enteredView"],
jp:[function(a,b,c,d){a.Uy=a.Uy!==!0
-this.np(a)
-this.np(a)},"call$3","gl8",6,0,425,18,[],306,[],74,[],"toggleDisplay"],
-np:[function(a){var z,y
+this.SS(a)
+this.SS(a)},"call$3","gl8",6,0,393,19,[],304,[],79,[],"toggleDisplay"],
+SS:[function(a){var z,y
z=a.Uy
y=a.zh
if(z===!0){a.zh=this.ct(a,C.Di,y,"glyphicon glyphicon-chevron-down")
a.HX=this.ct(a,C.Jw,a.HX,"none")}else{a.zh=this.ct(a,C.Di,y,"glyphicon glyphicon-chevron-up")
-a.HX=this.ct(a,C.Jw,a.HX,"block")}},"call$0","glg",0,0,112,"_refresh"],
+a.HX=this.ct(a,C.Jw,a.HX,"block")}},"call$0","glg",0,0,114,"_refresh"],
"@":function(){return[C.Gu]},
-static:{"^":"Vl<-387,DI<-387",Hv:[function(a){var z,y,x,w
+static:{"^":"Vl<-389,CF<-389",Hv:[function(a){var z,y,x,w
z=$.Nd()
y=P.Py(null,null,null,J.O,W.I0)
x=J.O
@@ -11650,32 +11118,30 @@
a.X0=w
C.j8.ZL(a)
C.j8.G6(a)
-return a},null,null,0,0,113,"new CollapsibleContentElement$created"]}},
-"+CollapsibleContentElement":[426],
-Ds:{
+return a},null,null,0,0,115,"new CollapsibleContentElement$created"]}},
+"+CollapsibleContentElement":[394],
+Dsd:{
"^":"uL+Pi;",
$isd3:true}}],["curly_block_element","package:observatory/src/elements/curly_block.dart",,R,{
"^":"",
lw:{
-"^":["LP;GV%-417,Hu%-417,nx%-77,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0-412",null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
-goE:[function(a){return a.GV},null,null,1,0,380,"expanded",355,356],
-soE:[function(a,b){a.GV=this.ct(a,C.mr,a.GV,b)},null,null,3,0,381,23,[],"expanded",355],
-gO9:[function(a){return a.Hu},null,null,1,0,380,"busy",355,356],
-sO9:[function(a,b){a.Hu=this.ct(a,C.S4,a.Hu,b)},null,null,3,0,381,23,[],"busy",355],
-gFR:[function(a){return a.nx},null,null,1,0,113,"callback",355,397],
+"^":["LP;GV%-382,Hu%-382,nx%-82,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0-375",null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.Nw]}],
+goE:[function(a){return a.GV},null,null,1,0,390,"expanded",358,359],
+soE:[function(a,b){a.GV=this.ct(a,C.mr,a.GV,b)},null,null,3,0,391,28,[],"expanded",358],
+gO9:[function(a){return a.Hu},null,null,1,0,390,"busy",358,359],
+sO9:[function(a,b){a.Hu=this.ct(a,C.S4,a.Hu,b)},null,null,3,0,391,28,[],"busy",358],
+gFR:[function(a){return a.nx},null,null,1,0,115,"callback",358,377],
Ki:function(a){return this.gFR(a).call$0()},
AV:function(a,b,c){return this.gFR(a).call$2(b,c)},
-sFR:[function(a,b){a.nx=this.ct(a,C.AV,a.nx,b)},null,null,3,0,107,23,[],"callback",355],
-PA:[function(a){var z
-P.JS("done callback")
-z=a.GV
+sFR:[function(a,b){a.nx=this.ct(a,C.AV,a.nx,b)},null,null,3,0,112,28,[],"callback",358],
+PA:[function(a){var z=a.GV
a.GV=this.ct(a,C.mr,z,z!==!0)
-a.Hu=this.ct(a,C.S4,a.Hu,!1)},"call$0","goJ",0,0,112,"doneCallback"],
+a.Hu=this.ct(a,C.S4,a.Hu,!1)},"call$0","goJ",0,0,114,"doneCallback"],
AZ:[function(a,b,c,d){var z=a.Hu
if(z===!0)return
if(a.nx!=null){a.Hu=this.ct(a,C.S4,z,!0)
this.AV(a,a.GV!==!0,this.goJ(a))}else{z=a.GV
-a.GV=this.ct(a,C.mr,z,z!==!0)}},"call$3","gmd",6,0,427,128,[],188,[],283,[],"toggleExpand"],
+a.GV=this.ct(a,C.mr,z,z!==!0)}},"call$3","gHw",6,0,395,131,[],187,[],278,[],"toggleExpand"],
"@":function(){return[C.DKS]},
static:{fR:[function(a){var z,y,x,w
z=$.Nd()
@@ -11691,8 +11157,8 @@
a.X0=w
C.O0.ZL(a)
C.O0.G6(a)
-return a},null,null,0,0,113,"new CurlyBlockElement$created"]}},
-"+CurlyBlockElement":[428],
+return a},null,null,0,0,115,"new CurlyBlockElement$created"]}},
+"+CurlyBlockElement":[396],
LP:{
"^":"ir+Pi;",
$isd3:true}}],["custom_element.polyfill","package:custom_element/polyfill.dart",,B,{
@@ -11704,20 +11170,20 @@
if(y==null)return"registerElement" in document
return J.de(J.UQ(y,"ready"),!0)},
wJ:{
-"^":"Tp:113;",
+"^":"Tp:115;",
call$0:[function(){if(B.G9())return P.Ab(null,null)
var z=H.VM(new W.RO(document,"WebComponentsReady",!1),[null])
return z.gtH(z)},"call$0",null,0,0,null,"call"],
$isEH:true}}],["dart._internal","dart:_internal",,H,{
"^":"",
bQ:[function(a,b){var z
-for(z=H.VM(new H.a7(a,a.length,0,null),[H.Kp(a,0)]);z.G();)b.call$1(z.lo)},"call$2","Mn",4,0,null,114,[],115,[]],
+for(z=H.VM(new H.a7(a,a.length,0,null),[H.Kp(a,0)]);z.G();)b.call$1(z.lo)},"call$2","Mn",4,0,null,116,[],117,[]],
Ck:[function(a,b){var z
for(z=H.VM(new H.a7(a,a.length,0,null),[H.Kp(a,0)]);z.G();)if(b.call$1(z.lo)===!0)return!0
-return!1},"call$2","cs",4,0,null,114,[],115,[]],
+return!1},"call$2","cs",4,0,null,116,[],117,[]],
n3:[function(a,b,c){var z
for(z=H.VM(new H.a7(a,a.length,0,null),[H.Kp(a,0)]);z.G();)b=c.call$2(b,z.lo)
-return b},"call$3","hp",6,0,null,114,[],116,[],117,[]],
+return b},"call$3","hp",6,0,null,116,[],118,[],119,[]],
mx:[function(a,b,c){var z,y,x
for(y=0;x=$.RM(),y<x.length;++y)if(x[y]===a)return H.d(b)+"..."+H.d(c)
z=P.p9("")
@@ -11726,19 +11192,22 @@
z.We(a,", ")
z.KF(c)}finally{x=$.RM()
if(0>=x.length)return H.e(x,0)
-x.pop()}return z.gvM()},"call$3","FQ",6,0,null,114,[],118,[],119,[]],
+x.pop()}return z.gvM()},"call$3","FQ",6,0,null,116,[],120,[],121,[]],
+rd:[function(a,b){if(b==null)b=P.n4()
+H.ZE(a,0,a.length-1,b)},"call$2","xX",4,0,null,73,[],122,[]],
K0:[function(a,b,c){var z=J.Wx(b)
if(z.C(b,0)||z.D(b,a.length))throw H.b(P.TE(b,0,a.length))
z=J.Wx(c)
-if(z.C(c,b)||z.D(c,a.length))throw H.b(P.TE(c,b,a.length))},"call$3","Ze",6,0,null,68,[],120,[],121,[]],
-Og:[function(a,b,c,d,e){var z,y
+if(z.C(c,b)||z.D(c,a.length))throw H.b(P.TE(c,b,a.length))},"call$3","Ze",6,0,null,73,[],123,[],124,[]],
+qG:[function(a,b,c,d,e){var z,y
H.K0(a,b,c)
-z=J.xH(c,b)
-if(J.de(z,0))return
+if(typeof b!=="number")return H.s(b)
+z=c-b
+if(z===0)return
y=J.Wx(e)
if(y.C(e,0))throw H.b(new P.AT(e))
if(J.z8(y.g(e,z),J.q8(d)))throw H.b(new P.lj("Not enough elements"))
-H.tb(d,e,a,b,z)},"call$5","rK",10,0,null,68,[],120,[],121,[],105,[],122,[]],
+H.tb(d,e,a,b,z)},"call$5","it",10,0,null,73,[],123,[],124,[],110,[],125,[]],
IC:[function(a,b,c){var z,y,x,w,v,u
z=J.Wx(b)
if(z.C(b,0)||z.D(b,a.length))throw H.b(P.TE(b,0,a.length))
@@ -11750,41 +11219,42 @@
z=z.g(b,x)
w=a.length
if(!!a.immutable$list)H.vh(P.f("set range"))
-H.Og(a,z,w,a,b)
+H.qG(a,z,w,a,b)
for(z=y.gA(c);z.G();b=u){v=z.lo
u=J.WB(b,1)
-C.Nm.u(a,b,v)}},"call$3","f3",6,0,null,68,[],47,[],114,[]],
+C.Nm.u(a,b,v)}},"call$3","QB",6,0,null,73,[],52,[],116,[]],
tb:[function(a,b,c,d,e){var z,y,x,w,v
z=J.Wx(b)
if(z.C(b,d))for(y=J.xH(z.g(b,e),1),x=J.xH(J.WB(d,e),1),z=J.U6(a);w=J.Wx(y),w.F(y,b);y=w.W(y,1),x=J.xH(x,1))C.Nm.u(c,x,z.t(a,y))
-else for(w=J.U6(a),x=d,y=b;v=J.Wx(y),v.C(y,z.g(b,e));y=v.g(y,1),x=J.WB(x,1))C.Nm.u(c,x,w.t(a,y))},"call$5","e8",10,0,null,123,[],124,[],125,[],126,[],127,[]],
+else for(w=J.U6(a),x=d,y=b;v=J.Wx(y),v.C(y,z.g(b,e));y=v.g(y,1),x=J.WB(x,1))C.Nm.u(c,x,w.t(a,y))},"call$5","e8",10,0,null,126,[],127,[],128,[],129,[],130,[]],
TK:[function(a,b,c,d){var z
if(c>=a.length)return-1
-for(z=c;z<d;++z){if(z>=a.length)return H.e(a,z)
-if(J.de(a[z],b))return z}return-1},"call$4","Yh",8,0,null,128,[],129,[],80,[],130,[]],
-eX:[function(a,b,c){var z,y
+if(c<0)c=0
+for(z=c;z<d;++z){if(z<0||z>=a.length)return H.e(a,z)
+if(J.de(a[z],b))return z}return-1},"call$4","vu",8,0,null,131,[],132,[],85,[],133,[]],
+lO:[function(a,b,c){var z,y
if(typeof c!=="number")return c.C()
if(c<0)return-1
z=a.length
if(c>=z)c=z-1
for(y=c;y>=0;--y){if(y>=a.length)return H.e(a,y)
-if(J.de(a[y],b))return y}return-1},"call$3","Gf",6,0,null,128,[],129,[],80,[]],
-ZE:[function(a,b,c,d){if(J.Hb(J.xH(c,b),32))H.d1(a,b,c,d)
-else H.d4(a,b,c,d)},"call$4","UR",8,0,null,128,[],131,[],132,[],133,[]],
-d1:[function(a,b,c,d){var z,y,x,w,v,u
+if(J.de(a[y],b))return y}return-1},"call$3","MW",6,0,null,131,[],132,[],85,[]],
+ZE:[function(a,b,c,d){if(J.Bl(J.xH(c,b),32))H.w9(a,b,c,d)
+else H.d4(a,b,c,d)},"call$4","UR",8,0,null,131,[],134,[],135,[],122,[]],
+w9:[function(a,b,c,d){var z,y,x,w,v,u
for(z=J.WB(b,1),y=J.U6(a);x=J.Wx(z),x.E(z,c);z=x.g(z,1)){w=y.t(a,z)
v=z
while(!0){u=J.Wx(v)
if(!(u.D(v,b)&&J.z8(d.call$2(y.t(a,u.W(v,1)),w),0)))break
y.u(a,v,y.t(a,u.W(v,1)))
-v=u.W(v,1)}y.u(a,v,w)}},"call$4","aH",8,0,null,128,[],131,[],132,[],133,[]],
+v=u.W(v,1)}y.u(a,v,w)}},"call$4","zc",8,0,null,131,[],134,[],135,[],122,[]],
d4:[function(a,b,a0,a1){var z,y,x,w,v,u,t,s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c
z=J.Wx(a0)
-y=J.IJ(J.WB(z.W(a0,b),1),6)
+y=J.Ts(J.WB(z.W(a0,b),1),6)
x=J.Qc(b)
w=x.g(b,y)
v=z.W(a0,y)
-u=J.IJ(x.g(b,a0),2)
+u=J.Ts(x.g(b,a0),2)
t=J.Wx(u)
s=t.W(u,y)
r=t.g(u,y)
@@ -11878,7 +11348,7 @@
k=e}else{t.u(a,i,t.t(a,j))
d=x.W(j,1)
t.u(a,j,h)
-j=d}break}}H.ZE(a,k,j,a1)}else H.ZE(a,k,j,a1)},"call$4","Hm",8,0,null,128,[],131,[],132,[],133,[]],
+j=d}break}}H.ZE(a,k,j,a1)}else H.ZE(a,k,j,a1)},"call$4","Hm",8,0,null,131,[],134,[],135,[],122,[]],
aL:{
"^":"mW;",
gA:function(a){return H.VM(new H.a7(this,this.gB(this),0,null),[H.ip(this,"aL",0)])},
@@ -11887,7 +11357,7 @@
if(typeof z!=="number")return H.s(z)
y=0
for(;y<z;++y){b.call$1(this.Zv(0,y))
-if(z!==this.gB(this))throw H.b(P.a4(this))}},"call$1","gjw",2,0,null,429,[]],
+if(z!==this.gB(this))throw H.b(P.a4(this))}},"call$1","gjw",2,0,null,397,[]],
gl0:function(a){return J.de(this.gB(this),0)},
grZ:function(a){if(J.de(this.gB(this),0))throw H.b(new P.lj("No elements"))
return this.Zv(0,J.xH(this.gB(this),1))},
@@ -11896,13 +11366,13 @@
if(typeof z!=="number")return H.s(z)
y=0
for(;y<z;++y){if(J.de(this.Zv(0,y),b))return!0
-if(z!==this.gB(this))throw H.b(P.a4(this))}return!1},"call$1","gdj",2,0,null,129,[]],
+if(z!==this.gB(this))throw H.b(P.a4(this))}return!1},"call$1","gdj",2,0,null,132,[]],
Vr:[function(a,b){var z,y
z=this.gB(this)
if(typeof z!=="number")return H.s(z)
y=0
for(;y<z;++y){if(b.call$1(this.Zv(0,y))===!0)return!0
-if(z!==this.gB(this))throw H.b(P.a4(this))}return!1},"call$1","gG2",2,0,null,430,[]],
+if(z!==this.gB(this))throw H.b(P.a4(this))}return!1},"call$1","gG2",2,0,null,398,[]],
zV:[function(a,b){var z,y,x,w,v,u
z=this.gB(this)
if(b.length!==0){y=J.x(z)
@@ -11922,17 +11392,16 @@
for(;v<z;++v){u=this.Zv(0,v)
u=typeof u==="string"?u:H.d(u)
w.vM=w.vM+u
-if(z!==this.gB(this))throw H.b(P.a4(this))}return w.vM}},"call$1","gnr",0,2,null,333,334,[]],
-ev:[function(a,b){return P.mW.prototype.ev.call(this,this,b)},"call$1","gIR",2,0,null,430,[]],
-ez:[function(a,b){return H.VM(new H.A8(this,b),[null,null])},"call$1","gIr",2,0,null,115,[]],
+if(z!==this.gB(this))throw H.b(P.a4(this))}return w.vM}},"call$1","gNU",0,2,null,330,331,[]],
+ev:[function(a,b){return P.mW.prototype.ev.call(this,this,b)},"call$1","gIR",2,0,null,398,[]],
+ez:[function(a,b){return H.VM(new H.A8(this,b),[null,null])},"call$1","gIr",2,0,null,117,[]],
es:[function(a,b,c){var z,y,x
z=this.gB(this)
if(typeof z!=="number")return H.s(z)
y=b
x=0
for(;x<z;++x){y=c.call$2(y,this.Zv(0,x))
-if(z!==this.gB(this))throw H.b(P.a4(this))}return y},"call$2","gTu",4,0,null,116,[],117,[]],
-eR:[function(a,b){return H.j5(this,b,null,null)},"call$1","gZo",2,0,null,127,[]],
+if(z!==this.gB(this))throw H.b(P.a4(this))}return y},"call$2","gTu",4,0,null,118,[],119,[]],
tt:[function(a,b){var z,y,x
if(b){z=H.VM([],[H.ip(this,"aL",0)])
C.Nm.sB(z,this.gB(this))}else{y=this.gB(this)
@@ -11945,7 +11414,7 @@
if(!(x<y))break
y=this.Zv(0,x)
if(x>=z.length)return H.e(z,x)
-z[x]=y;++x}return z},function(a){return this.tt(a,!0)},"br","call$1$growable",null,"gRV",0,3,null,336,337,[]],
+z[x]=y;++x}return z},function(a){return this.tt(a,!0)},"br","call$1$growable",null,"gRV",0,3,null,333,334,[]],
$isyN:true},
nH:{
"^":"aL;l6,SH,AN",
@@ -11968,24 +11437,23 @@
return J.xH(x,y)},
Zv:[function(a,b){var z=J.WB(this.gjX(),b)
if(J.u6(b,0)||J.J5(z,this.gMa()))throw H.b(P.TE(b,0,this.gB(this)))
-return J.i4(this.l6,z)},"call$1","goY",2,0,null,47,[]],
-eR:[function(a,b){return H.j5(this.l6,J.WB(this.SH,b),this.AN,null)},"call$1","gZo",2,0,null,127,[]],
+return J.i4(this.l6,z)},"call$1","goY",2,0,null,52,[]],
qZ:[function(a,b){var z,y,x
-if(J.u6(b,0))throw H.b(P.N(b))
+if(J.u6(b,0))throw H.b(new P.bJ("value "+H.d(b)))
z=this.AN
y=this.SH
-if(z==null)return H.j5(this.l6,y,J.WB(y,b),null)
+if(z==null)return H.q9(this.l6,y,J.WB(y,b),null)
else{x=J.WB(y,b)
if(J.u6(z,x))return this
-return H.j5(this.l6,y,x,null)}},"call$1","grK4",2,0,null,127,[]],
+return H.q9(this.l6,y,x,null)}},"call$1","gVw",2,0,null,130,[]],
Hd:function(a,b,c,d){var z,y,x
z=this.SH
y=J.Wx(z)
-if(y.C(z,0))throw H.b(P.N(z))
+if(y.C(z,0))throw H.b(new P.bJ("value "+H.d(z)))
x=this.AN
-if(x!=null){if(J.u6(x,0))throw H.b(P.N(x))
+if(x!=null){if(J.u6(x,0))throw H.b(new P.bJ("value "+H.d(x)))
if(y.D(z,x))throw H.b(P.TE(z,0,x))}},
-static:{j5:function(a,b,c,d){var z=H.VM(new H.nH(a,b,c),[d])
+static:{q9:function(a,b,c,d){var z=H.VM(new H.nH(a,b,c),[d])
z.Hd(a,b,c,d)
return z}}},
a7:{
@@ -12011,9 +11479,9 @@
gB:function(a){return J.q8(this.l6)},
gl0:function(a){return J.FN(this.l6)},
grZ:function(a){return this.mb(J.MQ(this.l6))},
-Zv:[function(a,b){return this.mb(J.i4(this.l6,b))},"call$1","goY",2,0,null,47,[]],
+Zv:[function(a,b){return this.mb(J.i4(this.l6,b))},"call$1","goY",2,0,null,52,[]],
$asmW:function(a,b){return[b]},
-$ascX:function(a,b){return[b]},
+$asQV:function(a,b){return[b]},
static:{K1:function(a,b,c,d){var z=J.x(a)
if(typeof a==="object"&&a!==null&&!!z.$isyN)return H.VM(new H.xy(a,b),[c,d])
return H.VM(new H.i1(a,b),[c,d])}}},
@@ -12033,10 +11501,10 @@
"^":"aL;CR,T6",
mb:function(a){return this.T6.call$1(a)},
gB:function(a){return J.q8(this.CR)},
-Zv:[function(a,b){return this.mb(J.i4(this.CR,b))},"call$1","goY",2,0,null,47,[]],
+Zv:[function(a,b){return this.mb(J.i4(this.CR,b))},"call$1","goY",2,0,null,52,[]],
$asaL:function(a,b){return[b]},
$asmW:function(a,b){return[b]},
-$ascX:function(a,b){return[b]},
+$asQV:function(a,b){return[b]},
$isyN:true},
U5:{
"^":"mW;l6,T6",
@@ -12055,48 +11523,19 @@
z.$builtinTypeInfo=this.$builtinTypeInfo
return z},
$asmW:function(a,b){return[b]},
-$ascX:function(a,b){return[b]}},
+$asQV:function(a,b){return[b]}},
rR:{
-"^":"a;OI,T6,TQ,lo",
+"^":"a;OI,T6,C2,lo",
mb:function(a){return this.T6.call$1(a)},
gl:function(){return this.lo},
G:[function(){var z,y
-z=this.TQ
+z=this.C2
if(z==null)return!1
for(y=this.OI;!z.G();){this.lo=null
-if(y.G()){this.TQ=null
+if(y.G()){this.C2=null
z=J.GP(this.mb(y.gl()))
-this.TQ=z}else return!1}this.lo=this.TQ.gl()
+this.C2=z}else return!1}this.lo=this.C2.gl()
return!0},"call$0","gqy",0,0,null]},
-H6:{
-"^":"mW;l6,FT",
-eR:[function(a,b){return H.ke(this.l6,this.FT+b,H.Kp(this,0))},"call$1","gZo",2,0,null,292,[]],
-gA:function(a){var z=this.l6
-z=new H.U1(z.gA(z),this.FT)
-z.$builtinTypeInfo=this.$builtinTypeInfo
-return z},
-ap:function(a,b,c){},
-static:{ke:function(a,b,c){var z
-if(!!a.$isyN){z=H.VM(new H.wB(a,b),[c])
-z.ap(a,b,c)
-return z}return H.mi(a,b,c)},mi:function(a,b,c){var z=H.VM(new H.H6(a,b),[c])
-z.ap(a,b,c)
-return z}}},
-wB:{
-"^":"H6;l6,FT",
-gB:function(a){var z,y
-z=this.l6
-y=J.xH(z.gB(z),this.FT)
-if(J.J5(y,0))return y
-return 0},
-$isyN:true},
-U1:{
-"^":"AC;OI,FT",
-G:[function(){var z,y
-for(z=this.OI,y=0;y<this.FT;++y)z.G()
-this.FT=0
-return z.G()},"call$0","gqy",0,0,null],
-gl:function(){return this.OI.gl()}},
SJ:{
"^":"a;",
G:[function(){return!1},"call$0","gqy",0,0,null],
@@ -12104,75 +11543,76 @@
SU7:{
"^":"a;",
sB:function(a,b){throw H.b(P.f("Cannot change the length of a fixed-length list"))},
-h:[function(a,b){throw H.b(P.f("Cannot add to a fixed-length list"))},"call$1","ght",2,0,null,23,[]],
-xe:[function(a,b,c){throw H.b(P.f("Cannot add to a fixed-length list"))},"call$2","gQG",4,0,null,47,[],23,[]],
-FV:[function(a,b){throw H.b(P.f("Cannot add to a fixed-length list"))},"call$1","gDY",2,0,null,114,[]],
-Rz:[function(a,b){throw H.b(P.f("Cannot remove from a fixed-length list"))},"call$1","gRI",2,0,null,129,[]],
-V1:[function(a){throw H.b(P.f("Cannot clear a fixed-length list"))},"call$0","gyP",0,0,null],
-KI:[function(a,b){throw H.b(P.f("Cannot remove from a fixed-length list"))},"call$1","gNM",2,0,null,47,[]]},
-Qr:{
+h:[function(a,b){throw H.b(P.f("Cannot add to a fixed-length list"))},"call$1","ght",2,0,null,28,[]],
+xe:[function(a,b,c){throw H.b(P.f("Cannot add to a fixed-length list"))},"call$2","gQG",4,0,null,52,[],28,[]],
+FV:[function(a,b){throw H.b(P.f("Cannot add to a fixed-length list"))},"call$1","gDY",2,0,null,116,[]],
+Rz:[function(a,b){throw H.b(P.f("Cannot remove from a fixed-length list"))},"call$1","guH",2,0,null,132,[]],
+V1:[function(a){throw H.b(P.f("Cannot clear a fixed-length list"))},"call$0","gRa",0,0,null],
+KI:[function(a,b){throw H.b(P.f("Cannot remove from a fixed-length list"))},"call$1","gNM",2,0,null,52,[]]},
+Tv:{
"^":"a;",
-u:[function(a,b,c){throw H.b(P.f("Cannot modify an unmodifiable list"))},"call$2","gj3",4,0,null,47,[],23,[]],
+u:[function(a,b,c){throw H.b(P.f("Cannot modify an unmodifiable list"))},"call$2","gj3",4,0,null,52,[],28,[]],
sB:function(a,b){throw H.b(P.f("Cannot change the length of an unmodifiable list"))},
-h:[function(a,b){throw H.b(P.f("Cannot add to an unmodifiable list"))},"call$1","ght",2,0,null,23,[]],
-xe:[function(a,b,c){throw H.b(P.f("Cannot add to an unmodifiable list"))},"call$2","gQG",4,0,null,47,[],23,[]],
-FV:[function(a,b){throw H.b(P.f("Cannot add to an unmodifiable list"))},"call$1","gDY",2,0,null,114,[]],
-Rz:[function(a,b){throw H.b(P.f("Cannot remove from an unmodifiable list"))},"call$1","gRI",2,0,null,129,[]],
-GT:[function(a,b){throw H.b(P.f("Cannot modify an unmodifiable list"))},"call$1","gH7",0,2,null,77,133,[]],
-V1:[function(a){throw H.b(P.f("Cannot clear an unmodifiable list"))},"call$0","gyP",0,0,null],
-KI:[function(a,b){throw H.b(P.f("Cannot remove from an unmodifiable list"))},"call$1","gNM",2,0,null,47,[]],
-YW:[function(a,b,c,d,e){throw H.b(P.f("Cannot modify an unmodifiable list"))},"call$4","gaQ",6,2,null,335,120,[],121,[],114,[],122,[]],
+h:[function(a,b){throw H.b(P.f("Cannot add to an unmodifiable list"))},"call$1","ght",2,0,null,28,[]],
+xe:[function(a,b,c){throw H.b(P.f("Cannot add to an unmodifiable list"))},"call$2","gQG",4,0,null,52,[],28,[]],
+FV:[function(a,b){throw H.b(P.f("Cannot add to an unmodifiable list"))},"call$1","gDY",2,0,null,116,[]],
+Rz:[function(a,b){throw H.b(P.f("Cannot remove from an unmodifiable list"))},"call$1","guH",2,0,null,132,[]],
+GT:[function(a,b){throw H.b(P.f("Cannot modify an unmodifiable list"))},"call$1","gH7",0,2,null,82,122,[]],
+V1:[function(a){throw H.b(P.f("Cannot clear an unmodifiable list"))},"call$0","gRa",0,0,null],
+KI:[function(a,b){throw H.b(P.f("Cannot remove from an unmodifiable list"))},"call$1","gNM",2,0,null,52,[]],
+YW:[function(a,b,c,d,e){throw H.b(P.f("Cannot modify an unmodifiable list"))},"call$4","gam",6,2,null,332,123,[],124,[],116,[],125,[]],
$isList:true,
-$asWO:null,
+$aszM:null,
$isyN:true,
-$iscX:true,
-$ascX:null},
+$isQV:true,
+$asQV:null},
w2Y:{
-"^":"ar+Qr;",
+"^":"ar+Tv;",
$isList:true,
-$asWO:null,
+$aszM:null,
$isyN:true,
-$iscX:true,
-$ascX:null},
+$isQV:true,
+$asQV:null},
iK:{
"^":"aL;CR",
gB:function(a){return J.q8(this.CR)},
Zv:[function(a,b){var z,y
z=this.CR
y=J.U6(z)
-return y.Zv(z,J.xH(J.xH(y.gB(z),1),b))},"call$1","goY",2,0,null,47,[]]},
+return y.Zv(z,J.xH(J.xH(y.gB(z),1),b))},"call$1","goY",2,0,null,52,[]]},
GD:{
"^":"a;fN>",
n:[function(a,b){var z
if(b==null)return!1
z=J.x(b)
-return typeof b==="object"&&b!==null&&!!z.$isGD&&J.de(this.fN,b.fN)},"call$1","gUJ",2,0,null,104,[]],
+return typeof b==="object"&&b!==null&&!!z.$isGD&&J.de(this.fN,b.fN)},"call$1","gUJ",2,0,null,109,[]],
giO:function(a){var z=J.v1(this.fN)
if(typeof z!=="number")return H.s(z)
return 536870911&664597*z},
bu:[function(a){return"Symbol(\""+H.d(this.fN)+"\")"},"call$0","gXo",0,0,null],
$isGD:true,
$iswv:true,
-static:{"^":"zP",le:[function(a){var z=J.U6(a)
-if(z.gl0(a)===!0)return a
-if(z.nC(a,"_"))throw H.b(new P.AT("\""+H.d(a)+"\" is a private identifier"))
-z=$.R0().Ej
+static:{"^":"RWj,ES,quP,KG,Np,p1",u1:[function(a){var z,y
+z=J.U6(a)
+if(z.gl0(a)!==!0){y=$.bw().Ej
if(typeof a!=="string")H.vh(new P.AT(a))
-if(!z.test(a))throw H.b(new P.AT("\""+H.d(a)+"\" is not an identifier or an empty String"))
-return a},"call$1","kh",2,0,null,12,[]]}}}],["dart._js_mirrors","dart:_js_mirrors",,H,{
+y=y.test(a)}else y=!0
+if(y)return a
+if(z.nC(a,"_"))throw H.b(new P.AT("\""+H.d(a)+"\" is a private identifier"))
+throw H.b(new P.AT("\""+H.d(a)+"\" is not a valid (qualified) symbol name"))},"call$1","kf",2,0,null,12,[]]}}}],["dart._js_mirrors","dart:_js_mirrors",,H,{
"^":"",
YC:[function(a){if(a==null)return
return new H.GD(a)},"call$1","Rc",2,0,null,12,[]],
-X7:[function(a){return H.YC(H.d(a.fN)+"=")},"call$1","JP",2,0,null,134,[]],
+X7:[function(a){return H.YC(H.d(a.fN)+"=")},"call$1","JP",2,0,null,136,[]],
vn:[function(a){var z=J.x(a)
if(typeof a==="object"&&a!==null&&!!z.$isTp)return new H.Sz(a,4)
-else return new H.iu(a,4)},"call$1","Yf",2,0,135,136,[]],
+else return new H.iu(a,4)},"call$1","Yf",2,0,137,138,[]],
jO:[function(a){var z,y
z=$.Sl().t(0,a)
y=J.x(a)
if(y.n(a,"dynamic"))return $.P8()
if(y.n(a,"void"))return $.oj()
-return H.tT(H.YC(z==null?a:z),a)},"call$1","vC",2,0,null,137,[]],
+return H.tT(H.YC(z==null?a:z),a)},"call$1","vC",2,0,null,139,[]],
tT:[function(a,b){var z,y,x,w,v,u,t,s,r,q,p,o,n,m,l,k
z=J.U6(b)
y=z.u8(b,"/")
@@ -12208,15 +11648,15 @@
if(m==null||m.length===0)x=n
else{for(z=m.length,l="dynamic",k=1;k<z;++k)l+=",dynamic"
x=new H.bl(n,l,null,null,null,null,null,null,null,null,null,null,null,null,null,n.If)}}$.tY[b]=x
-return x},"call$2","ER",4,0,null,134,[],137,[]],
+return x},"call$2","ER",4,0,null,136,[],139,[]],
Vv:[function(a){var z,y,x
z=P.L5(null,null,null,null,null)
for(y=H.VM(new H.a7(a,a.length,0,null),[H.Kp(a,0)]);y.G();){x=y.lo
-if(!x.gxV()&&!x.glT()&&!x.ghB())z.u(0,x.gIf(),x)}return z},"call$1","yM",2,0,null,138,[]],
+if(!x.gxV()&&!x.glT()&&!x.ghB())z.u(0,x.gIf(),x)}return z},"call$1","yM",2,0,null,140,[]],
Fk:[function(a){var z,y,x
z=P.L5(null,null,null,null,null)
for(y=H.VM(new H.a7(a,a.length,0,null),[H.Kp(a,0)]);y.G();){x=y.lo
-if(x.gxV())z.u(0,x.gIf(),x)}return z},"call$1","Pj",2,0,null,138,[]],
+if(x.gxV())z.u(0,x.gIf(),x)}return z},"call$1","Pj",2,0,null,140,[]],
vE:[function(a,b){var z,y,x,w,v,u
z=P.L5(null,null,null,null,null)
z.FV(0,b)
@@ -12226,7 +11666,7 @@
v=z.t(0,H.YC(v.Nj(w,0,J.xH(v.gB(w),1))))
u=J.x(v)
if(typeof v==="object"&&v!==null&&!!u.$isRY)continue}if(x.gxV())continue
-z.to(x.gIf(),new H.YX(x))}return z},"call$2","un",4,0,null,138,[],139,[]],
+z.to(x.gIf(),new H.YX(x))}return z},"call$2","un",4,0,null,140,[],141,[]],
MJ:[function(a,b){var z,y,x,w
z=[]
for(y=H.VM(new H.a7(a,a.length,0,null),[H.Kp(a,0)]);y.G();)z.push(H.jO(y.lo))
@@ -12234,14 +11674,14 @@
x.G()
w=x.lo
for(;x.G();)w=new H.BI(w,x.lo,null,null,H.YC(b))
-return w},"call$2","V8",4,0,null,140,[],137,[]],
+return w},"call$2","V8",4,0,null,142,[],139,[]],
w2:[function(a,b){var z,y,x
z=J.U6(a)
y=0
while(!0){x=z.gB(a)
if(typeof x!=="number")return H.s(x)
if(!(y<x))break
-if(J.de(z.t(a,y).gIf(),H.YC(b)))return y;++y}throw H.b(new P.AT("Type variable not present in list."))},"call$2","QB",4,0,null,142,[],12,[]],
+if(J.de(z.t(a,y).gIf(),H.YC(b)))return y;++y}throw H.b(new P.AT("Type variable not present in list."))},"call$2","CE",4,0,null,144,[],12,[]],
Jf:[function(a,b){var z,y,x,w,v,u,t
z={}
z.a=null
@@ -12258,9 +11698,9 @@
if(typeof b==="number"){t=z.call$1(b)
x=J.x(t)
if(typeof t==="object"&&t!==null&&!!x.$iscw)return t}w=H.Ko(b,new H.jB(z))}}if(w!=null)return H.jO(w)
-return P.re(C.yQ)},"call$2","xN",4,0,null,143,[],11,[]],
+return P.re(C.yQ)},"call$2","na",4,0,null,145,[],11,[]],
fb:[function(a,b){if(a==null)return b
-return H.YC(H.d(a.gUx().fN)+"."+H.d(b.fN))},"call$2","WS",4,0,null,143,[],144,[]],
+return H.YC(H.d(a.gUx().fN)+"."+H.d(b.fN))},"call$2","WS",4,0,null,145,[],146,[]],
pj:[function(a){var z,y,x,w
z=a["@"]
if(z!=null)return z()
@@ -12270,7 +11710,7 @@
return H.VM(new H.A8(y,new H.ye()),[null,null]).br(0)}x=Function.prototype.toString.call(a)
w=C.xB.cn(x,new H.VR(H.v4("\"[0-9,]*\";?[ \n\r]*}",!1,!0,!1),null,null))
if(w===-1)return C.xD;++w
-return H.VM(new H.A8(H.VM(new H.A8(C.xB.Nj(x,w,C.xB.XU(x,"\"",w)).split(","),P.ya()),[null,null]),new H.O1()),[null,null]).br(0)},"call$1","C7",2,0,null,145,[]],
+return H.VM(new H.A8(H.VM(new H.A8(C.xB.Nj(x,w,C.xB.XU(x,"\"",w)).split(","),P.ya()),[null,null]),new H.O1()),[null,null]).br(0)},"call$1","C7",2,0,null,147,[]],
jw:[function(a,b,c,d){var z,y,x,w,v,u,t,s,r
z=J.U6(b)
if(typeof b==="object"&&b!==null&&(b.constructor===Array||!!z.$isList)){y=H.Mk(z.t(b,0),",")
@@ -12281,10 +11721,10 @@
s=x[v]
v=t}else s=null
r=H.pS(u,s,a,c)
-if(r!=null)d.push(r)}},"call$4","Sv",8,0,null,143,[],146,[],61,[],51,[]],
+if(r!=null)d.push(r)}},"call$4","Sv",8,0,null,145,[],148,[],66,[],56,[]],
Mk:[function(a,b){var z=J.U6(a)
if(z.gl0(a)===!0)return H.VM([],[J.O])
-return z.Fr(a,b)},"call$2","nK",4,0,null,26,[],98,[]],
+return z.Fr(a,b)},"call$2","nK",4,0,null,31,[],103,[]],
BF:[function(a){switch(a){case"==":case"[]":case"*":case"/":case"%":case"~/":case"+":case"<<":case">>":case">=":case">":case"<=":case"<":case"&":case"^":case"|":case"-":case"unary-":case"[]=":case"~":return!0
default:return!1}},"call$1","IX",2,0,null,12,[]],
Y6:[function(a){var z,y
@@ -12292,9 +11732,9 @@
if(z.n(a,"^")||z.n(a,"$methodsWithOptionalArguments"))return!0
y=z.t(a,0)
z=J.x(y)
-return z.n(y,"*")||z.n(y,"+")},"call$1","uG",2,0,null,42,[]],
+return z.n(y,"*")||z.n(y,"+")},"call$1","zn",2,0,null,47,[]],
Sn:{
-"^":"a;L5,Aq>",
+"^":"a;L5,F1>",
gvU:function(){var z,y,x,w
z=this.L5
if(z!=null)return z
@@ -12303,70 +11743,70 @@
y.u(0,w.gFP(),w)}z=H.VM(new H.Oh(y),[P.iD,P.D4])
this.L5=z
return z},
-static:{"^":"QG,Q3,Ct",dF:[function(){var z,y,x,w,v,u,t,s,r,q,p,o,n,m,l
+static:{"^":"QG,Q3,Ct",dF:[function(){var z,y,x,w,v,u,t,s,r,q,p,o,n,m
z=P.L5(null,null,null,J.O,[J.Q,P.D4])
y=init.libraries
if(y==null)return z
for(x=H.VM(new H.a7(y,y.length,0,null),[H.Kp(y,0)]);x.G();){w=x.lo
v=J.U6(w)
u=v.t(w,0)
-t=v.t(w,1)
-s=P.r6($.qG().ej(t))
-r=v.t(w,2)
-q=v.t(w,3)
-p=v.t(w,4)
-o=v.t(w,5)
-n=v.t(w,6)
-m=v.t(w,7)
-l=p==null?C.xD:p()
-J.bi(z.to(u,new H.nI()),new H.Uz(s,r,q,l,o,n,m,null,null,null,null,null,null,null,null,null,null,H.YC(u)))}return z},"call$0","jc",0,0,null]}},
+t=P.hK(v.t(w,1))
+s=v.t(w,2)
+r=v.t(w,3)
+q=v.t(w,4)
+p=v.t(w,5)
+o=v.t(w,6)
+n=v.t(w,7)
+m=q==null?C.xD:q()
+J.bi(z.to(u,new H.nI()),new H.Uz(t,s,r,m,p,o,n,null,null,null,null,null,null,null,null,null,null,H.YC(u)))}return z},"call$0","jc",0,0,null]}},
nI:{
-"^":"Tp:113;",
+"^":"Tp:115;",
call$0:[function(){return H.VM([],[P.D4])},"call$0",null,0,0,null,"call"],
$isEH:true},
-TY:{
+jU:{
"^":"a;",
bu:[function(a){return this.gOO()},"call$0","gXo",0,0,null],
-IB:[function(a){throw H.b(P.SY(null))},"call$1","gft",2,0,null,41,[]],
-Hy:[function(a,b){throw H.b(P.SY(null))},"call$2","gfH",4,0,null,41,[],173,[]],
+IB:[function(a){throw H.b(P.SY(null))},"call$1","gft",2,0,null,46,[]],
+Hy:[function(a,b){throw H.b(P.SY(null))},"call$2","gdk",4,0,null,46,[],172,[]],
$isej:true},
Lj:{
-"^":"TY;MA",
+"^":"jU;MA",
gOO:function(){return"Isolate"},
gcZ:function(){var z=$.Cm().gvU().nb
return z.gUQ(z).XG(0,new H.mb())},
$isej:true},
mb:{
-"^":"Tp:432;",
-call$1:[function(a){return a.gGD()},"call$1",null,2,0,null,431,[],"call"],
+"^":"Tp:400;",
+call$1:[function(a){return a.gGD()},"call$1",null,2,0,null,399,[],"call"],
$isEH:true},
-am:{
-"^":"TY;If<",
+cb:{
+"^":"jU;If<",
gUx:function(){return H.fb(this.gXP(),this.gIf())},
gq4:function(){return J.co(this.gIf().fN,"_")},
bu:[function(a){return this.gOO()+" on '"+H.d(this.gIf().fN)+"'"},"call$0","gXo",0,0,null],
-jd:[function(a,b){throw H.b(H.Ef("Should not call _invoke"))},"call$2","gZ7",4,0,null,43,[],44,[]],
+jd:[function(a,b){throw H.b(H.Ef("Should not call _invoke"))},"call$2","gZ7",4,0,null,48,[],49,[]],
$isNL:true,
$isej:true},
cw:{
-"^":"EE;XP<,xW,Nz,LQ,If",
+"^":"EE;XP<,yG,Nz,LQ,If",
n:[function(a,b){var z
if(b==null)return!1
z=J.x(b)
-return typeof b==="object"&&b!==null&&!!z.$iscw&&J.de(this.If,b.If)&&this.XP.n(0,b.XP)},"call$1","gUJ",2,0,null,104,[]],
+return typeof b==="object"&&b!==null&&!!z.$iscw&&J.de(this.If,b.If)&&this.XP.n(0,b.XP)},"call$1","gUJ",2,0,null,109,[]],
giO:function(a){var z,y
z=J.v1(C.Gp.LU)
if(typeof z!=="number")return H.s(z)
y=this.XP
return(1073741823&z^17*J.v1(this.If)^19*y.giO(y))>>>0},
gOO:function(){return"TypeVariableMirror"},
+gFo:function(){return!1},
$iscw:true,
-$isac:true,
+$isFw:true,
$isX9:true,
$isNL:true,
$isej:true},
EE:{
-"^":"am;If",
+"^":"cb;If",
gOO:function(){return"TypeMirror"},
gXP:function(){return},
gc9:function(){return H.vh(P.SY(null))},
@@ -12391,7 +11831,7 @@
w=J.x(x)
if(typeof x==="object"&&x!==null&&!!w.$isMs){x=x.gJi()
if(!!x.$isWf){y.u(0,x.If,x)
-x.nz=this}}}z=H.VM(new H.Oh(y),[P.wv,P.Ms])
+x.jE=this}}}z=H.VM(new H.Oh(y),[P.wv,P.Ms])
this.P8=z
return z},
PU:[function(a,b){var z,y,x,w
@@ -12403,16 +11843,16 @@
if(w==null)w=this.gcc().nb.t(0,a)
if(w==null)throw H.b(P.lr(this,H.X7(a),[b],null,null))
w.Hy(this,b)
-return H.vn(b)},"call$2","gtd",4,0,null,65,[],173,[]],
+return H.vn(b)},"call$2","gtd",4,0,null,70,[],172,[]],
rN:[function(a){var z=this.gQH().nb.t(0,a)
if(z==null)throw H.b(P.lr(this,a,[],null,null))
-return H.vn(z.IB(this))},"call$1","gPo",2,0,null,65,[]],
+return H.vn(z.IB(this))},"call$1","gPo",2,0,null,70,[]],
F2:[function(a,b,c){var z,y
z=this.gQH().nb.t(0,a)
if(z==null)throw H.b(P.lr(this,a,b,c,null))
y=J.x(z)
if(typeof z==="object"&&z!==null&&!!y.$isZk&&!("$reflectable" in z.dl))H.Hz(a.gfN(a))
-return H.vn(z.jd(b,c))},function(a,b){return this.F2(a,b,null)},"CI","call$3",null,"gb2",4,2,null,77,24,[],43,[],44,[]],
+return H.vn(z.jd(b,c))},function(a,b){return this.F2(a,b,null)},"CI","call$3",null,"gb2",4,2,null,82,29,[],48,[],49,[]],
gm8:function(){var z,y,x,w,v,u,t,s,r,q,p
z=this.SD
if(z!=null)return z
@@ -12432,7 +11872,7 @@
if(q){u=C.xB.yn(r,4)
r=H.ys(u,"$",".")}p=H.Sd(r,s,!q,q)
y.push(p)
-p.nz=this}++v}this.SD=y
+p.jE=this}++v}this.SD=y
return y},
gTH:function(){var z,y
z=this.zE
@@ -12500,22 +11940,22 @@
$isej:true,
$isNL:true},
uh:{
-"^":"am+M2;",
+"^":"cb+M2;",
$isej:true},
IB:{
-"^":"Tp:433;a",
-call$2:[function(a,b){this.a.u(0,a,b)},"call$2",null,4,0,null,42,[],23,[],"call"],
+"^":"Tp:401;a",
+call$2:[function(a,b){this.a.u(0,a,b)},"call$2",null,4,0,null,47,[],28,[],"call"],
$isEH:true},
oP:{
-"^":"Tp:433;a",
-call$2:[function(a,b){this.a.u(0,a,b)},"call$2",null,4,0,null,42,[],23,[],"call"],
+"^":"Tp:401;a",
+call$2:[function(a,b){this.a.u(0,a,b)},"call$2",null,4,0,null,47,[],28,[],"call"],
$isEH:true},
YX:{
-"^":"Tp:113;a",
+"^":"Tp:115;a",
call$0:[function(){return this.a},"call$0",null,0,0,null,"call"],
$isEH:true},
BI:{
-"^":"Un;AY<,XW,BB,Ra,If",
+"^":"Un;AY<,XW,BB,i1,If",
gOO:function(){return"ClassMirror"},
gIf:function(){var z,y
z=this.BB
@@ -12527,9 +11967,9 @@
return z},
gUx:function(){return this.gIf()},
gYK:function(){return this.XW.gYK()},
-F2:[function(a,b,c){throw H.b(P.lr(this,a,b,c,null))},function(a,b){return this.F2(a,b,null)},"CI","call$3",null,"gb2",4,2,null,77,24,[],43,[],44,[]],
-rN:[function(a){throw H.b(P.lr(this,a,null,null,null))},"call$1","gPo",2,0,null,65,[]],
-PU:[function(a,b){throw H.b(P.lr(this,H.X7(a),[b],null,null))},"call$2","gtd",4,0,null,65,[],173,[]],
+F2:[function(a,b,c){throw H.b(P.lr(this,a,b,c,null))},function(a,b){return this.F2(a,b,null)},"CI","call$3",null,"gb2",4,2,null,82,29,[],48,[],49,[]],
+rN:[function(a){throw H.b(P.lr(this,a,null,null,null))},"call$1","gPo",2,0,null,70,[]],
+PU:[function(a,b){throw H.b(P.lr(this,H.X7(a),[b],null,null))},"call$2","gtd",4,0,null,70,[],172,[]],
gkZ:function(){return[this.XW]},
gHA:function(){return!0},
gJi:function(){return this},
@@ -12550,7 +11990,7 @@
"^":"M2;Ax<,xq",
gt5:function(a){return H.jO(J.bB(this.Ax).LU)},
F2:[function(a,b,c){var z=J.GL(a)
-return this.tu(a,0,z+":"+b.length+":0",b)},function(a,b){return this.F2(a,b,null)},"CI","call$3",null,"gb2",4,2,null,77,24,[],43,[],44,[]],
+return this.tu(a,0,z+":"+b.length+":0",b)},function(a,b){return this.F2(a,b,null)},"CI","call$3",null,"gb2",4,2,null,82,29,[],48,[],49,[]],
gK8:function(){var z,y,x
z=$.eb
y=this.Ax
@@ -12562,15 +12002,15 @@
z=this.gK8()
y=z[c]
if(y==null){x=$.I6().t(0,c)
-w=b===0?H.j5(J.uH(c,":"),3,null,null).br(0):C.xD
+w=b===0?H.q9(J.uH(c,":"),3,null,null).br(0):C.xD
v=new H.LI(a,x,b,d,w,null)
y=v.ZU(this.Ax)
z[c]=y}else v=null
if(y.gpf()){if(v==null)v=new H.LI(a,$.I6().t(0,c),b,d,[],null)
-return H.vn(y.Bj(this.Ax,v))}else return H.vn(y.Bj(this.Ax,d))},"call$4","gZ7",8,0,null,12,[],11,[],434,[],82,[]],
+return H.vn(y.Bj(this.Ax,v))}else return H.vn(y.Bj(this.Ax,d))},"call$4","gZ7",8,0,null,12,[],11,[],402,[],87,[]],
PU:[function(a,b){var z=H.d(a.gfN(a))+"="
this.tu(H.YC(z),2,z,[b])
-return H.vn(b)},"call$2","gtd",4,0,null,65,[],173,[]],
+return H.vn(b)},"call$2","gtd",4,0,null,70,[],172,[]],
rN:[function(a){var z,y,x,w
$loop$0:{z=this.xq
if(typeof z=="number"||typeof a.$p=="undefined")break $loop$0
@@ -12581,7 +12021,7 @@
else{w=H.vn(x)
y.v=x
y.m=w
-return w}}return this.Dm(a)},"call$1","gPo",2,0,null,65,[]],
+return w}}return this.Dm(a)},"call$1","gPo",2,0,null,70,[]],
Dm:[function(a){var z,y,x,w,v,u,t
z=J.GL(a)
y=this.tu(a,1,z,C.xD)
@@ -12598,14 +12038,14 @@
t=x.geK()?this.QN(u,v):this.x0(u,v)
w[z]=t
t.v=t.m=w
-return y},"call$1","gFf",2,0,null,65,[]],
+return y},"call$1","gFf",2,0,null,70,[]],
ds:[function(a,b){if(b)return(function(b){return eval(b)})("(function probe$"+H.d(a)+"(c){return c."+H.d(a)+"})")
-else return(function(n){return(function(c){return c[n]})})(a)},"call$2","gfu",4,0,null,110,[],435,[]],
+else return(function(n){return(function(c){return c[n]})})(a)},"call$2","gfu",4,0,null,279,[],403,[]],
x0:[function(a,b){if(!b)return(function(n){return(function(o){return o[n]()})})(a)
-return(function(b){return eval(b)})("(function "+this.Ax.constructor.name+"$"+H.d(a)+"(o){return o."+H.d(a)+"()})")},"call$2","gRr",4,0,null,12,[],435,[]],
+return(function(b){return eval(b)})("(function "+this.Ax.constructor.name+"$"+H.d(a)+"(o){return o."+H.d(a)+"()})")},"call$2","gRr",4,0,null,12,[],403,[]],
QN:[function(a,b){var z=J.x(this.Ax)
if(!b)return(function(n,i){return(function(o){return i[n](o)})})(a,z)
-return(function(b,i){return eval(b)})("(function "+z.constructor.name+"$"+H.d(a)+"(o){return i."+H.d(a)+"(o)})",z)},"call$2","gpa",4,0,null,12,[],435,[]],
+return(function(b,i){return eval(b)})("(function "+z.constructor.name+"$"+H.d(a)+"(o){return i."+H.d(a)+"(o)})",z)},"call$2","gj1",4,0,null,12,[],403,[]],
n:[function(a,b){var z,y
if(b==null)return!1
z=J.x(b)
@@ -12613,7 +12053,7 @@
y=b.Ax
y=z==null?y==null:z===y
z=y}else z=!1
-return z},"call$1","gUJ",2,0,null,104,[]],
+return z},"call$1","gUJ",2,0,null,109,[]],
giO:function(a){return J.UN(H.CU(this.Ax),909522486)},
bu:[function(a){return"InstanceMirror on "+H.d(P.hl(this.Ax))},"call$0","gXo",0,0,null],
t:[function(a,b){return H.vh(P.SY(null))},"call$1","gIA",2,0,null,12,[]],
@@ -12621,16 +12061,21 @@
$isvr:true,
$isej:true},
mg:{
-"^":"Tp:436;a",
+"^":"Tp:404;a",
call$2:[function(a,b){var z,y
z=a.gfN(a)
y=this.a
if(y.x4(z))y.u(0,z,b)
-else throw H.b(H.WE("Invoking noSuchMethod with named arguments not implemented"))},"call$2",null,4,0,null,134,[],23,[],"call"],
+else throw H.b(H.WE("Invoking noSuchMethod with named arguments not implemented"))},"call$2",null,4,0,null,136,[],28,[],"call"],
$isEH:true},
bl:{
-"^":"am;NK,EZ,ut,Db,uA,b0,M2,T1,fX,FU,qu,qN,qm,Ra,RH,If",
+"^":"cb;NK,EZ,ut,Db,uA,b0,M2,T1,fX,FU,qu,qN,qm,i1,RH,If",
gOO:function(){return"ClassMirror"},
+bu:[function(a){var z,y,x
+z="ClassMirror on "+H.d(this.NK.gIf().fN)
+if(this.gw8()!=null){y=z+"<"
+x=this.gw8()
+z=y+x.zV(x,", ")+">"}return z},"call$0","gXo",0,0,null],
gCr:function(){for(var z=this.gw8(),z=z.gA(z);z.G();)if(!J.de(z.lo,$.P8()))return H.d(this.NK.gCr())+"<"+this.EZ+">"
return this.NK.gCr()},
gNy:function(){return this.NK.gNy()},
@@ -12681,8 +12126,8 @@
z=H.VM(new H.Oh(y),[P.wv,P.NL])
this.Db=z
return z},
-PU:[function(a,b){return this.NK.PU(a,b)},"call$2","gtd",4,0,null,65,[],173,[]],
-rN:[function(a){return this.NK.rN(a)},"call$1","gPo",2,0,null,65,[]],
+PU:[function(a,b){return this.NK.PU(a,b)},"call$2","gtd",4,0,null,70,[],172,[]],
+rN:[function(a){return this.NK.rN(a)},"call$1","gPo",2,0,null,70,[]],
gXP:function(){return this.NK.gXP()},
gc9:function(){return this.NK.gc9()},
gAY:function(){var z=this.qN
@@ -12690,7 +12135,7 @@
z=H.Jf(this,init.metadata[J.UQ(init.typeInformation[this.NK.gCr()],0)])
this.qN=z
return z},
-F2:[function(a,b,c){return this.NK.F2(a,b,c)},function(a,b){return this.F2(a,b,null)},"CI","call$3",null,"gb2",4,2,null,77,24,[],43,[],44,[]],
+F2:[function(a,b,c){return this.NK.F2(a,b,c)},function(a,b){return this.F2(a,b,null)},"CI","call$3",null,"gb2",4,2,null,82,29,[],48,[],49,[]],
gHA:function(){return!1},
gJi:function(){return this.NK},
gkZ:function(){var z=this.qm
@@ -12709,29 +12154,29 @@
$isX9:true,
$isNL:true},
tB:{
-"^":"Tp:25;a",
+"^":"Tp:30;a",
call$1:[function(a){var z,y,x
z=H.BU(a,null,new H.Oo())
y=this.a
if(J.de(z,-1))y.push(H.jO(J.rr(a)))
else{x=init.metadata[z]
-y.push(new H.cw(P.re(x.gXP()),x,z,null,H.YC(J.O6(x))))}},"call$1",null,2,0,null,437,[],"call"],
+y.push(new H.cw(P.re(x.gXP()),x,z,null,H.YC(J.O6(x))))}},"call$1",null,2,0,null,405,[],"call"],
$isEH:true},
Oo:{
-"^":"Tp:107;",
-call$1:[function(a){return-1},"call$1",null,2,0,null,108,[],"call"],
+"^":"Tp:112;",
+call$1:[function(a){return-1},"call$1",null,2,0,null,113,[],"call"],
$isEH:true},
Tc:{
-"^":"Tp:107;b",
-call$1:[function(a){return this.b.call$1(a)},"call$1",null,2,0,null,87,[],"call"],
+"^":"Tp:112;b",
+call$1:[function(a){return this.b.call$1(a)},"call$1",null,2,0,null,92,[],"call"],
$isEH:true},
Ax:{
-"^":"Tp:107;a",
+"^":"Tp:112;a",
call$1:[function(a){this.a.u(0,a.gIf(),a)
-return a},"call$1",null,2,0,null,438,[],"call"],
+return a},"call$1",null,2,0,null,406,[],"call"],
$isEH:true},
Wf:{
-"^":"vk;Cr<,Tx<,H8,Ht,pz,le,qN,qu,zE,b0,FU,T1,fX,M2,uA,Db,xO,qm,UF,Ra,RH,nz,If",
+"^":"vk;Cr<,Tx<,H8,Ht,pz,le,qN,qu,zE,b0,FU,T1,fX,M2,uA,Db,xO,qm,UF,i1,RH,jE,If",
gOO:function(){return"ClassMirror"},
gaB:function(){var z,y
z=this.Tx
@@ -12755,7 +12200,7 @@
if(t.$reflectable==2)continue
s=H.Sd(u,t,!1,!1)
x.push(s)
-s.nz=a}y=H.kU(init.statics[this.Cr])
+s.jE=a}y=H.kU(init.statics[this.Cr])
for(w=H.VM(new H.a7(y,y.length,0,null),[H.Kp(y,0)]);w.G();){r=w.lo
if(H.Y6(r))continue
q=this.gXP().gae()[r]
@@ -12766,7 +12211,7 @@
p=H.ys(n,"$",".")}}else continue
s=H.Sd(p,q,!o,o)
x.push(s)
-s.nz=a}return x},"call$1","gN4",2,0,null,439,[]],
+s.jE=a}return x},"call$1","gN4",2,0,null,407,[]],
gEO:function(){var z=this.qu
if(z!=null)return z
z=this.ly(this)
@@ -12782,7 +12227,7 @@
C.Nm.FV(x,y)}H.jw(a,x,!1,z)
w=init.statics[this.Cr]
if(w!=null)H.jw(a,w["^"],!0,z)
-return z},"call$1","gMp",2,0,null,440,[]],
+return z},"call$1","gap",2,0,null,408,[]],
gTH:function(){var z=this.zE
if(z!=null)return z
z=this.ws(this)
@@ -12813,32 +12258,32 @@
z=new H.Ei(y)
this.gQH().nb.aN(0,z)
this.gEz().nb.aN(0,z)
-J.kH(this.gNy(),new H.U7(y))
+J.kH(this.gNy(),new H.Ci(y))
z=H.VM(new H.Oh(y),[P.wv,P.NL])
this.Db=z
return z},
PU:[function(a,b){var z,y
z=this.gcc().nb.t(0,a)
-if(z!=null&&z.gFo()&&!z.gV5()){y=z.gao()
+if(z!=null&&z.gFo()&&J.WO(z)!==!0){y=z.gao()
if(!(y in $))throw H.b(H.Ef("Cannot find \""+y+"\" in current isolate."))
$[y]=b
-return H.vn(b)}throw H.b(P.lr(this,H.X7(a),[b],null,null))},"call$2","gtd",4,0,null,65,[],173,[]],
+return H.vn(b)}throw H.b(P.lr(this,H.X7(a),[b],null,null))},"call$2","gtd",4,0,null,70,[],172,[]],
rN:[function(a){var z,y
z=this.gcc().nb.t(0,a)
if(z!=null&&z.gFo()){y=z.gao()
if(!(y in $))throw H.b(H.Ef("Cannot find \""+y+"\" in current isolate."))
if(y in init.lazies)return H.vn($[init.lazies[y]]())
-else return H.vn($[y])}throw H.b(P.lr(this,a,null,null,null))},"call$1","gPo",2,0,null,65,[]],
+else return H.vn($[y])}throw H.b(P.lr(this,a,null,null,null))},"call$1","gPo",2,0,null,70,[]],
gXP:function(){var z,y
-z=this.nz
+z=this.jE
if(z==null){z=this.Tx
y=J.x(z)
-if(typeof z==="object"&&z!==null&&!!y.$isGv)this.nz=H.jO(C.nY.LU).gXP()
+if(typeof z==="object"&&z!==null&&!!y.$isGv)this.jE=H.jO(C.nY.LU).gXP()
else{z=$.vK()
z=z.gUQ(z)
y=new H.MH(null,J.GP(z.l6),z.T6)
y.$builtinTypeInfo=[H.Kp(z,0),H.Kp(z,1)]
-for(;y.G();)for(z=J.GP(y.lo);z.G();)z.gl().gqh()}z=this.nz
+for(;y.G();)for(z=J.GP(y.lo);z.G();)z.gl().gqh()}z=this.jE
if(z==null)throw H.b(new P.lj("Class \""+H.d(this.If.fN)+"\" has no owner"))}return z},
gc9:function(){var z=this.xO
if(z!=null)return z
@@ -12865,13 +12310,13 @@
F2:[function(a,b,c){var z=this.ghp().nb.t(0,a)
if(z==null||!z.gFo())throw H.b(P.lr(this,a,b,c,null))
if(!z.tB())H.Hz(a.gfN(a))
-return H.vn(z.jd(b,c))},function(a,b){return this.F2(a,b,null)},"CI","call$3",null,"gb2",4,2,null,77,24,[],43,[],44,[]],
+return H.vn(z.jd(b,c))},function(a,b){return this.F2(a,b,null)},"CI","call$3",null,"gb2",4,2,null,82,29,[],48,[],49,[]],
gHA:function(){return!0},
gJi:function(){return this},
MR:[function(a){var z,y
z=init.typeInformation[this.Cr]
y=z!=null?H.VM(new H.A8(J.Pr(z,1),new H.t0(a)),[null,null]).br(0):C.Me
-return H.VM(new P.Yp(y),[P.Ms])},"call$1","gki",2,0,null,143,[]],
+return H.VM(new P.Yp(y),[P.Ms])},"call$1","gki",2,0,null,145,[]],
gkZ:function(){var z=this.qm
if(z!=null)return z
z=this.MR(this)
@@ -12901,30 +12346,30 @@
"^":"EE+M2;",
$isej:true},
Ei:{
-"^":"Tp:433;a",
-call$2:[function(a,b){this.a.u(0,a,b)},"call$2",null,4,0,null,42,[],23,[],"call"],
+"^":"Tp:401;a",
+call$2:[function(a,b){this.a.u(0,a,b)},"call$2",null,4,0,null,47,[],28,[],"call"],
$isEH:true},
-U7:{
-"^":"Tp:107;b",
+Ci:{
+"^":"Tp:112;b",
call$1:[function(a){this.b.u(0,a.gIf(),a)
-return a},"call$1",null,2,0,null,438,[],"call"],
+return a},"call$1",null,2,0,null,406,[],"call"],
$isEH:true},
t0:{
-"^":"Tp:442;a",
-call$1:[function(a){return H.Jf(this.a,init.metadata[a])},"call$1",null,2,0,null,441,[],"call"],
+"^":"Tp:410;a",
+call$1:[function(a){return H.Jf(this.a,init.metadata[a])},"call$1",null,2,0,null,409,[],"call"],
$isEH:true},
Ld:{
-"^":"am;ao<,V5<,Fo<,n6,nz,Ay>,le,If",
+"^":"cb;ao<,V5>,Fo<,n6,jE,Ay>,le,If",
gOO:function(){return"VariableMirror"},
-gt5:function(a){return H.Jf(this.nz,init.metadata[this.Ay])},
-gXP:function(){return this.nz},
+gt5:function(a){return H.Jf(this.jE,init.metadata[this.Ay])},
+gXP:function(){return this.jE},
gc9:function(){var z=this.le
if(z==null){z=this.n6
z=z==null?C.xD:z()
this.le=z}return J.C0(z,H.Yf()).br(0)},
-IB:[function(a){return $[this.ao]},"call$1","gft",2,0,null,41,[]],
+IB:[function(a){return $[this.ao]},"call$1","gft",2,0,null,46,[]],
Hy:[function(a,b){if(this.V5)throw H.b(P.lr(this,H.X7(this.If),[b],null,null))
-$[this.ao]=b},"call$2","gfH",4,0,null,41,[],173,[]],
+$[this.ao]=b},"call$2","gdk",4,0,null,46,[],172,[]],
$isRY:true,
$isNL:true,
$isej:true,
@@ -12946,7 +12391,7 @@
s=y.yn(x,r+1)}else q=s
p=d?$.Sl().t(0,q):$.bx().t(0,"g"+q)
if(p==null)p=q
-if(t){o=H.YC(p+"=")
+if(t){o=H.YC(H.d(p)+"=")
y=c.gEO()
v=new H.a7(y,y.length,0,null)
v.$builtinTypeInfo=[H.Kp(y,0)]
@@ -12955,7 +12400,7 @@
return new H.Ld(s,t,d,b,c,H.BU(z[1],null,null),null,H.YC(p))},GQ:[function(a){if(a>=60&&a<=64)return a-59
if(a>=123&&a<=126)return a-117
if(a>=37&&a<=43)return a-27
-return 0},"call$1","fS",2,0,null,141,[]]}},
+return 0},"call$1","fS",2,0,null,143,[]]}},
Sz:{
"^":"iu;Ax,xq",
gMj:function(a){var z,y,x,w,v,u,t,s
@@ -12985,14 +12430,14 @@
$isvr:true,
$isej:true},
Zk:{
-"^":"am;dl,Yq,lT<,hB<,Fo<,xV<,qx,nz,le,wM,H3,If",
+"^":"cb;dl,Yq,lT<,hB<,Fo<,xV<,qx,jE,le,wM,H3,If",
gOO:function(){return"MethodMirror"},
gMP:function(){var z=this.H3
if(z!=null)return z
this.gc9()
return this.H3},
tB:[function(){return"$reflectable" in this.dl},"call$0","gX1",0,0,null],
-gXP:function(){return this.nz},
+gXP:function(){return this.jE},
gdw:function(){this.gc9()
return this.wM},
gc9:function(){var z,y,x,w,v,u,t,s,r,q,p,o,n,m,l,k,j,i
@@ -13009,7 +12454,7 @@
if(z!=null){x=J.x(z)
x=typeof z==="object"&&z!==null&&!!x.$isD4
z=x}else z=!1
-t=z?new H.Ar(v.hl(null),null,null,null,this.nz):new H.Ar(v.hl(this.nz.gJi().gTx()),null,null,null,this.nz)}if(this.xV)this.wM=this.nz
+t=z?new H.Ar(v.hl(null),null,null,null,this.jE):new H.Ar(v.hl(this.jE.gJi().gTx()),null,null,null,this.jE)}if(this.xV)this.wM=this.jE
else this.wM=t.gdw()
s=v.Mo
for(z=t.gMP(),z=z.gA(z),x=w.length,r=v.hG,q=v.Rn,p=0;z.G();p=i){o=z.lo
@@ -13025,11 +12470,11 @@
this.le=z}return z},
jd:[function(a,b){if(!this.Fo&&!this.xV)throw H.b(H.Ef("Cannot invoke instance method without receiver."))
if(!J.de(this.Yq,a.length)||this.dl==null)throw H.b(P.lr(this.gXP(),this.If,a,b,null))
-return this.dl.apply($,P.F(a,!0,null))},"call$2","gZ7",4,0,null,43,[],44,[]],
+return this.dl.apply($,P.F(a,!0,null))},"call$2","gZ7",4,0,null,48,[],49,[]],
IB:[function(a){if(this.lT)return this.jd([],null)
-else throw H.b(P.SY("getField on "+H.d(a)))},"call$1","gft",2,0,null,41,[]],
+else throw H.b(P.SY("getField on "+H.d(a)))},"call$1","gft",2,0,null,46,[]],
Hy:[function(a,b){if(this.hB)return this.jd([b],null)
-else throw H.b(P.lr(this,H.X7(this.If),[],null,null))},"call$2","gfH",4,0,null,41,[],173,[]],
+else throw H.b(P.lr(this,H.X7(this.If),[],null,null))},"call$2","gdk",4,0,null,46,[],172,[]],
guU:function(){return!this.lT&&!this.hB&&!this.xV},
$isZk:true,
$isRS:true,
@@ -13051,25 +12496,26 @@
u=!1}w=H.YC(a)
return new H.Zk(b,J.WB(v,t),u,x,c,d,y,null,null,null,null,w)}}},
fu:{
-"^":"am;XP<,Ay>,Q2<,Sh,BE,QY,If",
+"^":"cb;XP<,Ay>,Q2<,Sh,BE,QY,If",
gOO:function(){return"ParameterMirror"},
gt5:function(a){return H.Jf(this.XP,this.Ay)},
gFo:function(){return!1},
-gV5:function(){return!1},
+gV5:function(a){return!1},
gc9:function(){return J.C0(this.QY,new H.wt()).br(0)},
$isYs:true,
$isRY:true,
$isNL:true,
$isej:true},
wt:{
-"^":"Tp:372;",
-call$1:[function(a){return H.vn(init.metadata[a])},"call$1",null,2,0,null,441,[],"call"],
+"^":"Tp:411;",
+call$1:[function(a){return H.vn(init.metadata[a])},"call$1",null,2,0,null,409,[],"call"],
$isEH:true},
ng:{
-"^":"am;Cr<,CM,If",
+"^":"cb;Cr<,CM,If",
gP:function(a){return this.CM},
r6:function(a,b){return this.gP(this).call$1(b)},
gOO:function(){return"TypedefMirror"},
+gYj:function(){return H.vh(P.SY(null))},
gJi:function(){return H.vh(P.SY(null))},
gXP:function(){return H.vh(P.SY(null))},
gc9:function(){return H.vh(P.SY(null))},
@@ -13084,9 +12530,9 @@
gkZ:function(){return H.vh(P.SY(null))},
gYK:function(){return H.vh(P.SY(null))},
t:[function(a,b){return H.vh(P.SY(null))},"call$1","gIA",2,0,null,12,[]],
-F2:[function(a,b,c){return H.vh(P.SY(null))},function(a,b){return this.F2(a,b,null)},"CI","call$3",null,"gb2",4,2,null,77,24,[],43,[],44,[]],
-rN:[function(a){return H.vh(P.SY(null))},"call$1","gPo",2,0,null,65,[]],
-PU:[function(a,b){return H.vh(P.SY(null))},"call$2","gtd",4,0,null,65,[],23,[]],
+F2:[function(a,b,c){return H.vh(P.SY(null))},function(a,b){return this.F2(a,b,null)},"CI","call$3",null,"gb2",4,2,null,82,29,[],48,[],49,[]],
+rN:[function(a){return H.vh(P.SY(null))},"call$1","gPo",2,0,null,70,[]],
+PU:[function(a,b){return H.vh(P.SY(null))},"call$2","gtd",4,0,null,70,[],28,[]],
gNy:function(){return H.vh(P.SY(null))},
gw8:function(){return H.vh(P.SY(null))},
gJi:function(){return H.vh(P.SY(null))},
@@ -13135,23 +12581,23 @@
z=x+"'"
this.o3=z
return z},"call$0","gXo",0,0,null],
-gwK:function(){return H.vh(P.SY(null))},
-V7:function(a,b){return this.gwK().call$2(a,b)},
-nQ:function(a){return this.gwK().call$1(a)},
+gah:function(){return H.vh(P.SY(null))},
+V7:function(a,b){return this.gah().call$2(a,b)},
+nQ:function(a){return this.gah().call$1(a)},
$isMs:true,
$isej:true,
$isX9:true,
$isNL:true},
rh:{
-"^":"Tp:443;a",
+"^":"Tp:412;a",
call$1:[function(a){var z,y,x
z=init.metadata[a]
y=this.a
x=H.w2(y.a.gNy(),J.O6(z))
-return J.UQ(y.a.gw8(),x)},"call$1",null,2,0,null,47,[],"call"],
+return J.UQ(y.a.gw8(),x)},"call$1",null,2,0,null,52,[],"call"],
$isEH:true},
jB:{
-"^":"Tp:444;b",
+"^":"Tp:413;b",
call$1:[function(a){var z,y
z=this.b.call$1(a)
y=J.x(z)
@@ -13159,33 +12605,33 @@
if((typeof z!=="object"||z===null||!y.$isWf)&&(typeof z!=="object"||z===null||!y.$isbl))if(y.n(z,$.P8()))return"dynamic"
else if(y.n(z,$.oj()))return"void"
else return"dynamic"
-return z.gCr()},"call$1",null,2,0,null,47,[],"call"],
+return z.gCr()},"call$1",null,2,0,null,52,[],"call"],
$isEH:true},
ye:{
-"^":"Tp:372;",
-call$1:[function(a){return init.metadata[a]},"call$1",null,2,0,null,441,[],"call"],
+"^":"Tp:411;",
+call$1:[function(a){return init.metadata[a]},"call$1",null,2,0,null,409,[],"call"],
$isEH:true},
O1:{
-"^":"Tp:372;",
-call$1:[function(a){return init.metadata[a]},"call$1",null,2,0,null,441,[],"call"],
+"^":"Tp:411;",
+call$1:[function(a){return init.metadata[a]},"call$1",null,2,0,null,409,[],"call"],
$isEH:true},
Oh:{
"^":"a;nb",
gB:function(a){return this.nb.X5},
gl0:function(a){return this.nb.X5===0},
gor:function(a){return this.nb.X5!==0},
-t:[function(a,b){return this.nb.t(0,b)},"call$1","gIA",2,0,null,42,[]],
-x4:[function(a){return this.nb.x4(a)},"call$1","gV9",2,0,null,42,[]],
-di:[function(a){return this.nb.di(a)},"call$1","gmc",2,0,null,23,[]],
-aN:[function(a,b){return this.nb.aN(0,b)},"call$1","gjw",2,0,null,115,[]],
+t:[function(a,b){return this.nb.t(0,b)},"call$1","gIA",2,0,null,47,[]],
+x4:[function(a){return this.nb.x4(a)},"call$1","gV9",2,0,null,47,[]],
+di:[function(a){return this.nb.di(a)},"call$1","gmc",2,0,null,28,[]],
+aN:[function(a,b){return this.nb.aN(0,b)},"call$1","gjw",2,0,null,117,[]],
gvc:function(a){var z=this.nb
return H.VM(new P.i5(z),[H.Kp(z,0)])},
gUQ:function(a){var z=this.nb
return z.gUQ(z)},
-u:[function(a,b,c){return H.kT()},"call$2","gj3",4,0,null,42,[],23,[]],
-FV:[function(a,b){return H.kT()},"call$1","gDY",2,0,null,104,[]],
-Rz:[function(a,b){H.kT()},"call$1","gRI",2,0,null,42,[]],
-V1:[function(a){return H.kT()},"call$0","gyP",0,0,null],
+u:[function(a,b,c){return H.kT()},"call$2","gj3",4,0,null,47,[],28,[]],
+FV:[function(a,b){return H.kT()},"call$1","gDY",2,0,null,109,[]],
+Rz:[function(a,b){H.kT()},"call$1","guH",2,0,null,47,[]],
+V1:[function(a){return H.kT()},"call$0","gRa",0,0,null],
$isZ0:true,
static:{kT:[function(){throw H.b(P.f("Cannot modify an unmodifiable Map"))},"call$0","lY",0,0,null]}},
"^":"Sk<"}],["dart._js_names","dart:_js_names",,H,{
@@ -13197,10 +12643,10 @@
u=a[v]
y.u(0,v,u)
if(w){t=J.rY(v)
-if(t.nC(v,"g"))y.u(0,"s"+t.yn(v,1),u+"=")}}return y},"call$2","BH",4,0,null,147,[],148,[]],
+if(t.nC(v,"g"))y.u(0,"s"+t.yn(v,1),u+"=")}}return y},"call$2","Hn",4,0,null,149,[],150,[]],
YK:[function(a){var z=H.VM(H.B7([],P.L5(null,null,null,null,null)),[J.O,J.O])
a.aN(0,new H.Xh(z))
-return z},"call$1","OX",2,0,null,149,[]],
+return z},"call$1","OX",2,0,null,151,[]],
kU:[function(a){var z=H.VM((function(victim, hasOwnProperty) {
var result = [];
for (var key in victim) {
@@ -13209,36 +12655,16 @@
return result;
})(a, Object.prototype.hasOwnProperty),[null])
z.fixed$length=init
-return z},"call$1","wp",2,0,null,145,[]],
+return z},"call$1","wp",2,0,null,147,[]],
Xh:{
-"^":"Tp:445;a",
-call$2:[function(a,b){this.a.u(0,b,a)},"call$2",null,4,0,null,137,[],434,[],"call"],
+"^":"Tp:414;a",
+call$2:[function(a,b){this.a.u(0,b,a)},"call$2",null,4,0,null,139,[],402,[],"call"],
$isEH:true}}],["dart.async","dart:async",,P,{
"^":"",
VH:[function(a,b){var z=H.N7()
z=H.KT(z,[z,z]).BD(a)
if(z)return b.O8(a)
-else return b.cR(a)},"call$2","p3",4,0,null,150,[],151,[]],
-pH:[function(a,b){var z,y,x,w,v,u,t
-z={}
-z.a=null
-z.b=null
-z.c=0
-z.d=null
-z.e=null
-y=new P.j7(z,b)
-for(x=H.VM(new H.a7(a,a.length,0,null),[H.Kp(a,0)]);x.G();){w=x.lo
-v=z.c
-z.c=v+1
-w.Rx(new P.ff(z,b,v),y)}y=z.c
-if(y===0)return P.Ab(C.xD,null)
-u=Array(y)
-u.fixed$length=init
-z.b=u
-y=J.Q
-t=H.VM(new P.Zf(P.Dt(y)),[y])
-z.a=t
-return t.MM},"call$2$eagerError","pk",2,3,null,152,153,[],154,[]],
+else return b.cR(a)},"call$2","p3",4,0,null,152,[],153,[]],
Cx:[function(){var z=$.S6
for(;z!=null;){J.cG(z)
z=z.gaw()
@@ -13247,7 +12673,7 @@
try{P.Cx()}catch(z){H.Ru(z)
P.jL(C.ny,P.qZ())
$.S6=$.S6.gaw()
-throw z}},"call$0","qZ",0,0,112],
+throw z}},"call$0","qZ",0,0,114],
IA:[function(a){var z,y
z=$.k8
if(z==null){z=new P.OM(a,null)
@@ -13255,11 +12681,11 @@
$.S6=z
P.jL(C.ny,P.qZ())}else{y=new P.OM(a,null)
z.aw=y
-$.k8=y}},"call$1","xc",2,0,null,156,[]],
+$.k8=y}},"call$1","vy",2,0,null,155,[]],
rb:[function(a){var z
if(J.de($.X3,C.NU)){$.X3.wr(a)
return}z=$.X3
-z.wr(z.xi(a,!0))},"call$1","Rf",2,0,null,156,[]],
+z.wr(z.xi(a,!0))},"call$1","Rf",2,0,null,155,[]],
bK:function(a,b,c,d){var z
if(c){z=H.VM(new P.dz(b,a,0,null,null,null,null),[d])
z.SJ=z
@@ -13275,56 +12701,56 @@
return}catch(u){w=H.Ru(u)
y=w
x=new H.XO(u,null)
-$.X3.hk(y,x)}},"call$1","DC",2,0,null,157,[]],
-YE:[function(a){},"call$1","bZ",2,0,158,23,[]],
-SZ:[function(a,b){$.X3.hk(a,b)},function(a){return P.SZ(a,null)},null,"call$2","call$1","AY",2,2,159,77,160,[],161,[]],
-dL:[function(){return},"call$0","v3",0,0,112],
+$.X3.hk(y,x)}},"call$1","DC",2,0,null,156,[]],
+YE:[function(a){},"call$1","bZ",2,0,157,28,[]],
+SZ:[function(a,b){$.X3.hk(a,b)},function(a){return P.SZ(a,null)},null,"call$2","call$1","AY",2,2,158,82,159,[],160,[]],
+dL:[function(){},"call$0","v3",0,0,114],
FE:[function(a,b,c){var z,y,x,w
try{b.call$1(a.call$0())}catch(x){w=H.Ru(x)
z=w
y=new H.XO(x,null)
-c.call$2(z,y)}},"call$3","CV",6,0,null,162,[],163,[],164,[]],
+c.call$2(z,y)}},"call$3","CV",6,0,null,161,[],162,[],163,[]],
NX:[function(a,b,c,d){a.ed()
-b.K5(c,d)},"call$4","QD",8,0,null,165,[],166,[],160,[],161,[]],
-TB:[function(a,b){return new P.uR(a,b)},"call$2","cH",4,0,null,165,[],166,[]],
+b.K5(c,d)},"call$4","QD",8,0,null,164,[],165,[],159,[],160,[]],
+TB:[function(a,b){return new P.uR(a,b)},"call$2","cH",4,0,null,164,[],165,[]],
Bb:[function(a,b,c){a.ed()
-b.rX(c)},"call$3","iB",6,0,null,165,[],166,[],23,[]],
+b.rX(c)},"call$3","iB",6,0,null,164,[],165,[],28,[]],
rT:function(a,b){var z
if(J.de($.X3,C.NU))return $.X3.uN(a,b)
z=$.X3
return z.uN(a,z.xi(b,!0))},
jL:[function(a,b){var z=C.jn.cU(a.Fq,1000)
-return H.cy(z<0?0:z,b)},"call$2","et",4,0,null,167,[],156,[]],
+return H.cy(z<0?0:z,b)},"call$2","et",4,0,null,166,[],155,[]],
PJ:[function(a){var z=$.X3
$.X3=a
-return z},"call$1","kb",2,0,null,151,[]],
-L2:[function(a,b,c,d,e){a.Gr(new P.pK(d,e))},"call$5","xP",10,0,168,169,[],170,[],151,[],160,[],161,[]],
+return z},"call$1","kb",2,0,null,153,[]],
+L2:[function(a,b,c,d,e){a.Gr(new P.pK(d,e))},"call$5","xP",10,0,167,168,[],169,[],153,[],159,[],160,[]],
T8:[function(a,b,c,d){var z,y
if(J.de($.X3,c))return d.call$0()
z=P.PJ(c)
try{y=d.call$0()
-return y}finally{$.X3=z}},"call$4","AI",8,0,171,169,[],170,[],151,[],115,[]],
+return y}finally{$.X3=z}},"call$4","AI",8,0,170,168,[],169,[],153,[],117,[]],
V7:[function(a,b,c,d,e){var z,y
if(J.de($.X3,c))return d.call$1(e)
z=P.PJ(c)
try{y=d.call$1(e)
-return y}finally{$.X3=z}},"call$5","MM",10,0,172,169,[],170,[],151,[],115,[],173,[]],
+return y}finally{$.X3=z}},"call$5","MM",10,0,171,168,[],169,[],153,[],117,[],172,[]],
Qx:[function(a,b,c,d,e,f){var z,y
if(J.de($.X3,c))return d.call$2(e,f)
z=P.PJ(c)
try{y=d.call$2(e,f)
-return y}finally{$.X3=z}},"call$6","l4",12,0,174,169,[],170,[],151,[],115,[],54,[],55,[]],
-Ee:[function(a,b,c,d){return d},"call$4","EU",8,0,175,169,[],170,[],151,[],115,[]],
-cQ:[function(a,b,c,d){return d},"call$4","zi",8,0,176,169,[],170,[],151,[],115,[]],
-VI:[function(a,b,c,d){return d},"call$4","uu",8,0,177,169,[],170,[],151,[],115,[]],
-Tk:[function(a,b,c,d){P.IA(C.NU!==c?c.ce(d):d)},"call$4","G2",8,0,178,169,[],170,[],151,[],115,[]],
-h8:[function(a,b,c,d,e){return P.jL(d,C.NU!==c?c.ce(e):e)},"call$5","KF",10,0,179,169,[],170,[],151,[],167,[],156,[]],
-XB:[function(a,b,c,d){H.qw(d)},"call$4","YM",8,0,180,169,[],170,[],151,[],181,[]],
-CI:[function(a){J.O2($.X3,a)},"call$1","Fl",2,0,182,181,[]],
+return y}finally{$.X3=z}},"call$6","l4",12,0,173,168,[],169,[],153,[],117,[],59,[],60,[]],
+Ee:[function(a,b,c,d){return d},"call$4","EU",8,0,174,168,[],169,[],153,[],117,[]],
+cQ:[function(a,b,c,d){return d},"call$4","zi",8,0,175,168,[],169,[],153,[],117,[]],
+VI:[function(a,b,c,d){return d},"call$4","uu",8,0,176,168,[],169,[],153,[],117,[]],
+Tk:[function(a,b,c,d){P.IA(C.NU!==c?c.ce(d):d)},"call$4","G2",8,0,177,168,[],169,[],153,[],117,[]],
+h8:[function(a,b,c,d,e){return P.jL(d,C.NU!==c?c.ce(e):e)},"call$5","KF",10,0,178,168,[],169,[],153,[],166,[],155,[]],
+XB:[function(a,b,c,d){H.qw(d)},"call$4","YM",8,0,179,168,[],169,[],153,[],180,[]],
+CI:[function(a){J.O2($.X3,a)},"call$1","Fl",2,0,181,180,[]],
UA:[function(a,b,c,d,e){var z
$.oK=P.Fl()
z=P.Py(null,null,null,null,null)
-return new P.uo(c,d,z)},"call$5","hn",10,0,183,169,[],170,[],151,[],184,[],185,[]],
+return new P.uo(c,d,z)},"call$5","hn",10,0,182,168,[],169,[],153,[],183,[],184,[]],
Ca:{
"^":"a;kc>,I4<",
$isGe:true},
@@ -13335,10 +12761,10 @@
gY8:function(){return this.Y8},
uR:[function(a){var z=this.Ae
if(typeof z!=="number")return z.i()
-return(z&1)===a},"call$1","gLM",2,0,null,446,[]],
+return(z&1)===a},"call$1","gLM",2,0,null,415,[]],
Ac:[function(){var z=this.Ae
if(typeof z!=="number")return z.w()
-this.Ae=z^1},"call$0","gXI1",0,0,null],
+this.Ae=z^1},"call$0","gUe",0,0,null],
gP4:function(){var z=this.Ae
if(typeof z!=="number")return z.i()
return(z&2)!==0},
@@ -13348,10 +12774,10 @@
gHj:function(){var z=this.Ae
if(typeof z!=="number")return z.i()
return(z&4)!==0},
-uO:[function(){return},"call$0","gp4",0,0,112],
-LP:[function(){return},"call$0","gZ9",0,0,112],
-static:{"^":"FJ,RG,cP"}},
-LO:{
+uO:[function(){},"call$0","gp4",0,0,114],
+LP:[function(){},"call$0","gZ9",0,0,114],
+static:{"^":"FJ,CM,cP"}},
+WVu:{
"^":"a;iE@,SJ@",
gRW:function(){return!1},
gP4:function(){return(this.Gv&2)!==0},
@@ -13366,17 +12792,17 @@
z.siE(y)
y.sSJ(z)
a.sSJ(a)
-a.siE(a)},"call$1","gOo",2,0,null,165,[]],
+a.siE(a)},"call$1","gOo",2,0,null,164,[]],
j0:[function(a){if(a.giE()===a)return
if(a.gP4())a.dK()
else{this.p1(a)
-if((this.Gv&2)===0&&this.iE===this)this.Of()}},"call$1","gOr",2,0,null,165,[]],
+if((this.Gv&2)===0&&this.iE===this)this.Of()}},"call$1","gOr",2,0,null,164,[]],
q7:[function(){if((this.Gv&4)!==0)return new P.lj("Cannot add new events after calling close")
return new P.lj("Cannot add new events while doing an addStream")},"call$0","gVo",0,0,null],
h:[function(a,b){if(this.Gv>=4)throw H.b(this.q7())
-this.Iv(b)},"call$1","ght",2,0,function(){return H.IG(function(a){return{func:"lU",void:true,args:[a]}},this.$receiver,"LO")},239,[]],
+this.Iv(b)},"call$1","ght",2,0,function(){return H.IG(function(a){return{func:"lU",void:true,args:[a]}},this.$receiver,"WVu")},235,[]],
fDe:[function(a,b){if(this.Gv>=4)throw H.b(this.q7())
-this.pb(a,b)},function(a){return this.fDe(a,null)},"JT","call$2","call$1","gXB",2,2,447,77,160,[],161,[]],
+this.pb(a,b)},function(a){return this.fDe(a,null)},"JT","call$2","call$1","gGj",2,2,416,82,159,[],160,[]],
cO:[function(a){var z,y
z=this.Gv
if((z&4)!==0)return this.Ip
@@ -13385,8 +12811,8 @@
y=this.SL()
this.SY()
return y},"call$0","gJK",0,0,null],
-Rg:[function(a,b){this.Iv(b)},"call$1","gHR",2,0,null,239,[]],
-V8:[function(a,b){this.pb(a,b)},"call$2","grd",4,0,null,160,[],161,[]],
+Rg:[function(a,b){this.Iv(b)},"call$1","gHR",2,0,null,235,[]],
+V8:[function(a,b){this.pb(a,b)},"call$2","gEm",4,0,null,159,[],160,[]],
Qj:[function(){var z=this.WX
this.WX=null
this.Gv=this.Gv&4294967287
@@ -13410,92 +12836,67 @@
y.sAe(z&4294967293)
y=w}else y=y.giE()
this.Gv=this.Gv&4294967293
-if(this.iE===this)this.Of()},"call$1","gxd",2,0,null,429,[]],
+if(this.iE===this)this.Of()},"call$1","gxd",2,0,null,397,[]],
Of:[function(){if((this.Gv&4)!==0&&this.Ip.Gv===0)this.Ip.OH(null)
P.ot(this.QC)},"call$0","gVg",0,0,null]},
dz:{
-"^":"LO;nL,QC,Gv,iE,SJ,WX,Ip",
+"^":"WVu;nL,QC,Gv,iE,SJ,WX,Ip",
Iv:[function(a){var z=this.iE
if(z===this)return
if(z.giE()===this){this.Gv=this.Gv|2
this.iE.Rg(0,a)
this.Gv=this.Gv&4294967293
if(this.iE===this)this.Of()
-return}this.nE(new P.tK(this,a))},"call$1","gm9",2,0,null,239,[]],
+return}this.nE(new P.tK(this,a))},"call$1","gm9",2,0,null,235,[]],
pb:[function(a,b){if(this.iE===this)return
-this.nE(new P.OR(this,a,b))},"call$2","gTb",4,0,null,160,[],161,[]],
+this.nE(new P.OR(this,a,b))},"call$2","gTb",4,0,null,159,[],160,[]],
SY:[function(){if(this.iE!==this)this.nE(new P.Bg(this))
else this.Ip.OH(null)},"call$0","gXm",0,0,null]},
tK:{
"^":"Tp;a,b",
-call$1:[function(a){a.Rg(0,this.b)},"call$1",null,2,0,null,165,[],"call"],
+call$1:[function(a){a.Rg(0,this.b)},"call$1",null,2,0,null,164,[],"call"],
$isEH:true,
$signature:function(){return H.IG(function(a){return{func:"DU",args:[[P.KA,a]]}},this.a,"dz")}},
OR:{
"^":"Tp;a,b,c",
-call$1:[function(a){a.V8(this.b,this.c)},"call$1",null,2,0,null,165,[],"call"],
+call$1:[function(a){a.V8(this.b,this.c)},"call$1",null,2,0,null,164,[],"call"],
$isEH:true,
$signature:function(){return H.IG(function(a){return{func:"DU",args:[[P.KA,a]]}},this.a,"dz")}},
Bg:{
"^":"Tp;a",
-call$1:[function(a){a.Qj()},"call$1",null,2,0,null,165,[],"call"],
+call$1:[function(a){a.Qj()},"call$1",null,2,0,null,164,[],"call"],
$isEH:true,
-$signature:function(){return H.IG(function(a){return{func:"Zj",args:[[P.JI,a]]}},this.a,"dz")}},
+$signature:function(){return H.IG(function(a){return{func:"qb",args:[[P.JI,a]]}},this.a,"dz")}},
DL:{
-"^":"LO;nL,QC,Gv,iE,SJ,WX,Ip",
+"^":"WVu;nL,QC,Gv,iE,SJ,WX,Ip",
Iv:[function(a){var z,y
for(z=this.iE;z!==this;z=z.giE()){y=new P.LV(a,null)
y.$builtinTypeInfo=[null]
-z.w6(y)}},"call$1","gm9",2,0,null,239,[]],
+z.w6(y)}},"call$1","gm9",2,0,null,235,[]],
pb:[function(a,b){var z
-for(z=this.iE;z!==this;z=z.giE())z.w6(new P.DS(a,b,null))},"call$2","gTb",4,0,null,160,[],161,[]],
+for(z=this.iE;z!==this;z=z.giE())z.w6(new P.DS(a,b,null))},"call$2","gTb",4,0,null,159,[],160,[]],
SY:[function(){var z=this.iE
if(z!==this)for(;z!==this;z=z.giE())z.w6(C.Wj)
else this.Ip.OH(null)},"call$0","gXm",0,0,null]},
b8:{
"^":"a;",
$isb8:true},
-j7:{
-"^":"Tp:346;a,b",
-call$2:[function(a,b){var z,y,x
-z=this.a
-y=z.b
-z.b=null
-x=z.c-1
-z.c=x
-if(y!=null)if(x===0||this.b)z.a.w0(a,b)
-else{z.d=a
-z.e=b}else if(x===0&&!this.b)z.a.w0(z.d,z.e)},"call$2",null,4,0,null,448,[],449,[],"call"],
-$isEH:true},
-ff:{
-"^":"Tp:450;a,c,d",
-call$1:[function(a){var z,y,x,w
-z=this.a
-y=z.c-1
-z.c=y
-x=z.b
-if(x!=null){w=this.d
-if(w<0||w>=x.length)return H.e(x,w)
-x[w]=a
-if(y===0){z=z.a.MM
-if(z.Gv!==0)H.vh(new P.lj("Future already completed"))
-z.OH(x)}}else if(y===0&&!this.c)z.a.w0(z.d,z.e)},"call$1",null,2,0,null,23,[],"call"],
-$isEH:true},
Ia:{
"^":"a;"},
Zf:{
"^":"Ia;MM",
oo:[function(a,b){var z=this.MM
if(z.Gv!==0)throw H.b(P.w("Future already completed"))
-z.OH(b)},function(a){return this.oo(a,null)},"tZ","call$1","call$0","gv6",0,2,451,77,23,[]],
+z.OH(b)},function(a){return this.oo(a,null)},"tZ","call$1","call$0","gv6",0,2,417,82,28,[]],
w0:[function(a,b){var z
if(a==null)throw H.b(new P.AT("Error must not be null"))
z=this.MM
if(z.Gv!==0)throw H.b(new P.lj("Future already completed"))
-z.CG(a,b)},function(a){return this.w0(a,null)},"pm","call$2","call$1","gYJ",2,2,447,77,160,[],161,[]]},
+z.CG(a,b)},function(a){return this.w0(a,null)},"pm","call$2","call$1","gYJ",2,2,416,82,159,[],160,[]]},
vs:{
"^":"a;Gv,Lj<,jk,BQ@,OY,As,qV,o4",
gcg:function(){return this.Gv>=4},
+gWj:function(){return this.Gv===4},
gNm:function(){return this.Gv===8},
swG:function(a){if(a)this.Gv=2
else this.Gv=0},
@@ -13507,70 +12908,72 @@
z=$.X3
y=H.VM(new P.vs(0,z,null,null,z.cR(a),null,P.VH(b,$.X3),null),[null])
this.au(y)
-return y},function(a){return this.Rx(a,null)},"ml","call$2$onError",null,"gVy",2,3,null,77,115,[],164,[]],
+return y},function(a){return this.Rx(a,null)},"ml","call$2$onError",null,"grf",2,3,null,82,117,[],163,[]],
yd:[function(a,b){var z,y,x
z=$.X3
y=P.VH(a,z)
x=H.VM(new P.vs(0,z,null,null,null,$.X3.cR(b),y,null),[null])
this.au(x)
-return x},function(a){return this.yd(a,null)},"OA","call$2$test",null,"gue",2,3,null,77,164,[],430,[]],
+return x},function(a){return this.yd(a,null)},"OA","call$2$test",null,"gue",2,3,null,82,163,[],398,[]],
YM:[function(a){var z,y
z=$.X3
y=new P.vs(0,z,null,null,null,null,null,z.Al(a))
y.$builtinTypeInfo=this.$builtinTypeInfo
this.au(y)
-return y},"call$1","gE1",2,0,null,429,[]],
+return y},"call$1","gBv",2,0,null,397,[]],
gDL:function(){return this.jk},
gcG:function(){return this.jk},
Am:[function(a){this.Gv=4
-this.jk=a},"call$1","gHa",2,0,null,23,[]],
+this.jk=a},"call$1","goU",2,0,null,28,[]],
E6:[function(a,b){this.Gv=8
-this.jk=new P.Ca(a,b)},"call$2","gM6",4,0,null,160,[],161,[]],
+this.jk=new P.Ca(a,b)},"call$2","gM6",4,0,null,159,[],160,[]],
au:[function(a){if(this.Gv>=4)this.Lj.wr(new P.da(this,a))
else{a.sBQ(this.jk)
-this.jk=a}},"call$1","gXA",2,0,null,297,[]],
+this.jk=a}},"call$1","gXA",2,0,null,295,[]],
L3:[function(){var z,y,x
z=this.jk
this.jk=null
for(y=null;z!=null;y=z,z=x){x=z.gBQ()
-z.sBQ(y)}return y},"call$0","gDH",0,0,null],
+z.sBQ(y)}return y},"call$0","gAw",0,0,null],
rX:[function(a){var z,y
z=J.x(a)
-if(typeof a==="object"&&a!==null&&!!z.$isb8){P.GZ(a,this)
-return}y=this.L3()
+if(typeof a==="object"&&a!==null&&!!z.$isb8)if(typeof a==="object"&&a!==null&&!!z.$isvs)P.A9(a,this)
+else P.k3(a,this)
+else{y=this.L3()
this.Am(a)
-P.HZ(this,y)},"call$1","gJJ",2,0,null,23,[]],
+P.HZ(this,y)}},"call$1","gBO",2,0,null,28,[]],
+R8:[function(a){var z=this.L3()
+this.Am(a)
+P.HZ(this,z)},"call$1","gPN",2,0,null,28,[]],
K5:[function(a,b){var z=this.L3()
this.E6(a,b)
-P.HZ(this,z)},function(a){return this.K5(a,null)},"Lp","call$2","call$1","gbY",2,2,159,77,160,[],161,[]],
-OH:[function(a){var z,y
-z=J.x(a)
-y=typeof a==="object"&&a!==null&&!!z.$isb8
-if(y);if(y)z=typeof a!=="object"||a===null||!z.$isvs||a.Gv<4
-else z=!1
-if(z){this.rX(a)
-return}if(this.Gv!==0)H.vh(P.w("Future already completed"))
+P.HZ(this,z)},function(a){return this.K5(a,null)},"Lp","call$2","call$1","gbY",2,2,158,82,159,[],160,[]],
+OH:[function(a){var z
+if(a==null);else{z=J.x(a)
+if(typeof a==="object"&&a!==null&&!!z.$isb8){if(typeof a==="object"&&a!==null&&!!z.$isvs){z=a.Gv
+if(z>=4&&z===8){if(this.Gv!==0)H.vh(P.w("Future already completed"))
this.Gv=1
-this.Lj.wr(new P.rH(this,a))},"call$1","gZV",2,0,null,23,[]],
+this.Lj.wr(new P.rH(this,a))}else P.A9(a,this)}else P.k3(a,this)
+return}}if(this.Gv!==0)H.vh(P.w("Future already completed"))
+this.Gv=1
+this.Lj.wr(new P.cX(this,a))},"call$1","gZV",2,0,null,28,[]],
CG:[function(a,b){if(this.Gv!==0)H.vh(new P.lj("Future already completed"))
this.Gv=1
-this.Lj.wr(new P.ZL(this,a,b))},"call$2","gFE",4,0,null,160,[],161,[]],
+this.Lj.wr(new P.ZL(this,a,b))},"call$2","glC",4,0,null,159,[],160,[]],
L7:function(a,b){this.OH(a)},
$isvs:true,
$isb8:true,
static:{"^":"ewM,JE,C3n,oN1,NK",Dt:function(a){return H.VM(new P.vs(0,$.X3,null,null,null,null,null,null),[a])},Ab:function(a,b){var z=H.VM(new P.vs(0,$.X3,null,null,null,null,null,null),[b])
z.L7(a,b)
-return z},GZ:[function(a,b){var z
-b.swG(!0)
-z=J.x(a)
-if(typeof a==="object"&&a!==null&&!!z.$isvs)if(a.Gv>=4)P.HZ(a,b)
-else a.au(b)
-else a.Rx(new P.xw(b),new P.dm(b))},"call$2","mX",4,0,null,27,[],74,[]],yE:[function(a,b){var z
+return z},k3:[function(a,b){b.swG(!0)
+a.Rx(new P.pV(b),new P.U7(b))},"call$2","KP",4,0,null,32,[],79,[]],A9:[function(a,b){b.swG(!0)
+if(a.Gv>=4)P.HZ(a,b)
+else a.au(b)},"call$2","dd",4,0,null,32,[],79,[]],yE:[function(a,b){var z
do{z=b.gBQ()
b.sBQ(null)
P.HZ(a,b)
if(z!=null){b=z
-continue}else break}while(!0)},"call$2","cN",4,0,null,27,[],155,[]],HZ:[function(a,b){var z,y,x,w,v,u,t,s,r,q,p
+continue}else break}while(!0)},"call$2","cN",4,0,null,32,[],154,[]],HZ:[function(a,b){var z,y,x,w,v,u,t,s,r,q,p
z={}
z.e=a
for(y=a;!0;){x={}
@@ -13580,62 +12983,66 @@
z.e.gLj().hk(J.w8(v),v.gI4())
return}if(b==null)return
if(b.gBQ()!=null){P.yE(z.e,b)
-return}u=b.gLj()
-if(w&&!z.e.gLj().fC(u)){v=z.e.gcG()
-z.e.gLj().hk(J.w8(v),v.gI4())
-return}t=$.X3
-if(t==null?u!=null:t!==u)$.X3=u
-else t=null
-x.b=null
-x.c=null
+return}x.b=!0
+u=z.e.gWj()?z.e.gDL():null
+x.c=u
x.d=!1
-if(!w)if(b.gO1()!=null)x.b=new P.rq(x,z,b,u).call$0()
-else{x.c=z.e.gDL()
-x.b=!0}else new P.RW(z,x,b,u).call$0()
-if(b.gIa()!=null)new P.RT(z,x,w,b,u).call$0()
-if(t!=null)$.X3=t
+y=!w
+if(!y||b.gO1()!=null||b.gIa()!=null){t=b.gLj()
+if(w&&!z.e.gLj().fC(t)){v=z.e.gcG()
+z.e.gLj().hk(J.w8(v),v.gI4())
+return}s=$.X3
+if(s==null?t!=null:s!==t)$.X3=t
+else s=null
+if(y){if(b.gO1()!=null)x.b=new P.rq(x,b,u,t).call$0()}else new P.RW(z,x,b,t).call$0()
+if(b.gIa()!=null)new P.RT(z,x,w,b,t).call$0()
+if(s!=null)$.X3=s
if(x.d)return
-y=x.b===!0
-if(y){s=x.c
-r=J.x(s)
-r=typeof s==="object"&&s!==null&&!!r.$isb8
-s=r}else s=!1
-if(s){q=x.c
+if(x.b===!0){y=x.c
+if(u==null?y!=null:u!==y){r=J.x(y)
+r=typeof y==="object"&&y!==null&&!!r.$isb8
+y=r}else y=!1}else y=!1
+if(y){q=x.c
y=J.x(q)
-if(typeof q==="object"&&q!==null&&!!y.$isvs&&q.Gv>=4){b.swG(!0)
+if(typeof q==="object"&&q!==null&&!!y.$isvs)if(q.Gv>=4){b.swG(!0)
z.e=q
y=q
-continue}P.GZ(q,b)
-return}if(y){p=b.L3()
+continue}else P.A9(q,b)
+else P.k3(q,b)
+return}}if(x.b===!0){p=b.L3()
b.Am(x.c)}else{p=b.L3()
v=x.c
b.E6(J.w8(v),v.gI4())}z.e=b
y=b
-b=p}},"call$2","DU",4,0,null,27,[],155,[]]}},
+b=p}},"call$2","XX",4,0,null,32,[],154,[]]}},
da:{
-"^":"Tp:113;a,b",
+"^":"Tp:115;a,b",
call$0:[function(){P.HZ(this.a,this.b)},"call$0",null,0,0,null,"call"],
$isEH:true},
-xw:{
-"^":"Tp:107;a",
-call$1:[function(a){this.a.rX(a)},"call$1",null,2,0,null,23,[],"call"],
+pV:{
+"^":"Tp:112;a",
+call$1:[function(a){this.a.R8(a)},"call$1",null,2,0,null,28,[],"call"],
$isEH:true},
-dm:{
-"^":"Tp:452;b",
-call$2:[function(a,b){this.b.K5(a,b)},function(a){return this.call$2(a,null)},"call$1","call$2",null,null,2,2,null,77,160,[],161,[],"call"],
+U7:{
+"^":"Tp:418;b",
+call$2:[function(a,b){this.b.K5(a,b)},function(a){return this.call$2(a,null)},"call$1","call$2",null,null,2,2,null,82,159,[],160,[],"call"],
$isEH:true},
rH:{
-"^":"Tp:113;a,b",
-call$0:[function(){this.a.rX(this.b)},"call$0",null,0,0,null,"call"],
+"^":"Tp:115;a,b",
+call$0:[function(){P.A9(this.b,this.a)},"call$0",null,0,0,null,"call"],
+$isEH:true},
+cX:{
+"^":"Tp:115;c,d",
+call$0:[function(){this.c.R8(this.d)},"call$0",null,0,0,null,"call"],
$isEH:true},
ZL:{
-"^":"Tp:113;a,b,c",
+"^":"Tp:115;a,b,c",
call$0:[function(){this.a.K5(this.b,this.c)},"call$0",null,0,0,null,"call"],
$isEH:true},
rq:{
-"^":"Tp:380;b,c,d,e",
+"^":"Tp:390;b,d,e,f",
call$0:[function(){var z,y,x,w
-try{this.b.c=this.e.FI(this.d.gO1(),this.c.e.gDL())
+try{this.b.c=this.f.FI(this.d.gO1(),this.e)
return!0}catch(x){w=H.Ru(x)
z=w
y=new H.XO(x,null)
@@ -13643,13 +13050,13 @@
return!1}},"call$0",null,0,0,null,"call"],
$isEH:true},
RW:{
-"^":"Tp:112;c,b,f,UI",
+"^":"Tp:114;c,b,UI,bK",
call$0:[function(){var z,y,x,w,v,u,t,s,r,q,p,o,n,m
z=this.c.e.gcG()
-r=this.f
+r=this.UI
y=r.gyK()
x=!0
-if(y!=null)try{x=this.UI.FI(y,J.w8(z))}catch(q){r=H.Ru(q)
+if(y!=null)try{x=this.bK.FI(y,J.w8(z))}catch(q){r=H.Ru(q)
w=r
v=new H.XO(q,null)
r=J.w8(z)
@@ -13662,7 +13069,7 @@
if(x===!0&&u!=null){try{r=u
p=H.N7()
p=H.KT(p,[p,p]).BD(r)
-n=this.UI
+n=this.bK
m=this.b
if(p)m.c=n.mg(u,J.w8(z),z.gI4())
else m.c=n.FI(u,J.w8(z))}catch(q){r=H.Ru(q)
@@ -13679,14 +13086,14 @@
r.b=!1}},"call$0",null,0,0,null,"call"],
$isEH:true},
RT:{
-"^":"Tp:112;c,b,bK,Gq,Rm",
+"^":"Tp:114;c,b,Gq,Rm,w3",
call$0:[function(){var z,y,x,w,v,u
z={}
z.a=null
-try{z.a=this.Rm.Gr(this.Gq.gIa())}catch(w){v=H.Ru(w)
+try{z.a=this.w3.Gr(this.Rm.gIa())}catch(w){v=H.Ru(w)
y=v
x=new H.XO(w,null)
-if(this.bK){v=J.w8(this.c.e.gcG())
+if(this.Gq){v=J.w8(this.c.e.gcG())
u=y
u=v==null?u==null:v===u
v=u}else v=!1
@@ -13695,54 +13102,54 @@
else u.c=new P.Ca(y,x)
u.b=!1}v=z.a
u=J.x(v)
-if(typeof v==="object"&&v!==null&&!!u.$isb8){v=this.Gq
+if(typeof v==="object"&&v!==null&&!!u.$isb8){v=this.Rm
v.swG(!0)
this.b.d=!0
z.a.Rx(new P.jZ(this.c,v),new P.FZ(z,v))}},"call$0",null,0,0,null,"call"],
$isEH:true},
jZ:{
-"^":"Tp:107;c,w3",
-call$1:[function(a){P.HZ(this.c.e,this.w3)},"call$1",null,2,0,null,453,[],"call"],
+"^":"Tp:112;c,HZ",
+call$1:[function(a){P.HZ(this.c.e,this.HZ)},"call$1",null,2,0,null,419,[],"call"],
$isEH:true},
FZ:{
-"^":"Tp:452;a,HZ",
+"^":"Tp:418;a,mG",
call$2:[function(a,b){var z,y,x,w
z=this.a
y=z.a
x=J.x(y)
if(typeof y!=="object"||y===null||!x.$isvs){w=P.Dt(null)
z.a=w
-w.E6(a,b)}P.HZ(z.a,this.HZ)},function(a){return this.call$2(a,null)},"call$1","call$2",null,null,2,2,null,77,160,[],161,[],"call"],
+w.E6(a,b)}P.HZ(z.a,this.mG)},function(a){return this.call$2(a,null)},"call$1","call$2",null,null,2,2,null,82,159,[],160,[],"call"],
$isEH:true},
OM:{
"^":"a;FR>,aw@",
Ki:function(a){return this.FR.call$0()}},
qh:{
"^":"a;",
-ez:[function(a,b){return H.VM(new P.t3(b,this),[H.ip(this,"qh",0),null])},"call$1","gIr",2,0,null,454,[]],
+ez:[function(a,b){return H.VM(new P.t3(b,this),[H.ip(this,"qh",0),null])},"call$1","gIr",2,0,null,420,[]],
tg:[function(a,b){var z,y
z={}
y=P.Dt(J.kn)
z.a=null
-z.a=this.KR(new P.tG(z,this,b,y),!0,new P.zn(y),y.gbY())
-return y},"call$1","gdj",2,0,null,102,[]],
+z.a=this.KR(new P.YJ(z,this,b,y),!0,new P.DO(y),y.gbY())
+return y},"call$1","gdj",2,0,null,107,[]],
aN:[function(a,b){var z,y
z={}
y=P.Dt(null)
z.a=null
z.a=this.KR(new P.lz(z,this,b,y),!0,new P.M4(y),y.gbY())
-return y},"call$1","gjw",2,0,null,429,[]],
+return y},"call$1","gjw",2,0,null,397,[]],
Vr:[function(a,b){var z,y
z={}
y=P.Dt(J.kn)
z.a=null
z.a=this.KR(new P.Jp(z,this,b,y),!0,new P.eN(y),y.gbY())
-return y},"call$1","gG2",2,0,null,430,[]],
+return y},"call$1","gG2",2,0,null,398,[]],
gB:function(a){var z,y
z={}
y=P.Dt(J.im)
z.a=0
-this.KR(new P.PI(z),!0,new P.uO(z,y),y.gbY())
+this.KR(new P.B5(z),!0,new P.PI(z,y),y.gbY())
return y},
gl0:function(a){var z,y
z={}
@@ -13755,9 +13162,6 @@
y=P.Dt([J.Q,H.ip(this,"qh",0)])
this.KR(new P.VV(this,z),!0,new P.Dy(z,y),y.gbY())
return y},"call$0","gRV",0,0,null],
-eR:[function(a,b){var z=H.VM(new P.dq(b,this),[null])
-z.U6(this,b,null)
-return z},"call$1","gZo",2,0,null,127,[]],
gtH:function(a){var z,y
z={}
y=P.Dt(H.ip(this,"qh",0))
@@ -13777,44 +13181,44 @@
if(typeof b!=="number"||Math.floor(b)!==b||J.u6(b,0))throw H.b(new P.AT(z.a))
y=P.Dt(H.ip(this,"qh",0))
z.b=null
-z.b=this.KR(new P.ii(z,this,y),!0,new P.ib(z,y),y.gbY())
-return y},"call$1","goY",2,0,null,47,[]],
+z.b=this.KR(new P.j5(z,this,y),!0,new P.ii(z,y),y.gbY())
+return y},"call$1","goY",2,0,null,52,[]],
$isqh:true},
-tG:{
+YJ:{
"^":"Tp;a,b,c,d",
call$1:[function(a){var z,y
z=this.a
y=this.d
-P.FE(new P.jv(this.c,a),new P.LB(z,y),P.TB(z.a,y))},"call$1",null,2,0,null,129,[],"call"],
+P.FE(new P.jv(this.c,a),new P.LB(z,y),P.TB(z.a,y))},"call$1",null,2,0,null,132,[],"call"],
$isEH:true,
$signature:function(){return H.IG(function(a){return{func:"Lf",args:[a]}},this.b,"qh")}},
jv:{
-"^":"Tp:113;e,f",
+"^":"Tp:115;e,f",
call$0:[function(){return J.de(this.f,this.e)},"call$0",null,0,0,null,"call"],
$isEH:true},
LB:{
-"^":"Tp:381;a,UI",
-call$1:[function(a){if(a===!0)P.Bb(this.a.a,this.UI,!0)},"call$1",null,2,0,null,455,[],"call"],
+"^":"Tp:391;a,UI",
+call$1:[function(a){if(a===!0)P.Bb(this.a.a,this.UI,!0)},"call$1",null,2,0,null,421,[],"call"],
$isEH:true},
-zn:{
-"^":"Tp:113;bK",
+DO:{
+"^":"Tp:115;bK",
call$0:[function(){this.bK.rX(!1)},"call$0",null,0,0,null,"call"],
$isEH:true},
lz:{
"^":"Tp;a,b,c,d",
-call$1:[function(a){P.FE(new P.Rl(this.c,a),new P.Jb(),P.TB(this.a.a,this.d))},"call$1",null,2,0,null,129,[],"call"],
+call$1:[function(a){P.FE(new P.Rl(this.c,a),new P.Jb(),P.TB(this.a.a,this.d))},"call$1",null,2,0,null,132,[],"call"],
$isEH:true,
$signature:function(){return H.IG(function(a){return{func:"Lf",args:[a]}},this.b,"qh")}},
Rl:{
-"^":"Tp:113;e,f",
+"^":"Tp:115;e,f",
call$0:[function(){return this.e.call$1(this.f)},"call$0",null,0,0,null,"call"],
$isEH:true},
Jb:{
-"^":"Tp:107;",
-call$1:[function(a){},"call$1",null,2,0,null,108,[],"call"],
+"^":"Tp:112;",
+call$1:[function(a){},"call$1",null,2,0,null,113,[],"call"],
$isEH:true},
M4:{
-"^":"Tp:113;UI",
+"^":"Tp:115;UI",
call$0:[function(){this.UI.rX(null)},"call$0",null,0,0,null,"call"],
$isEH:true},
Jp:{
@@ -13822,78 +13226,78 @@
call$1:[function(a){var z,y
z=this.a
y=this.d
-P.FE(new P.h7(this.c,a),new P.pr(z,y),P.TB(z.a,y))},"call$1",null,2,0,null,129,[],"call"],
+P.FE(new P.h7(this.c,a),new P.pr(z,y),P.TB(z.a,y))},"call$1",null,2,0,null,132,[],"call"],
$isEH:true,
$signature:function(){return H.IG(function(a){return{func:"Lf",args:[a]}},this.b,"qh")}},
h7:{
-"^":"Tp:113;e,f",
+"^":"Tp:115;e,f",
call$0:[function(){return this.e.call$1(this.f)},"call$0",null,0,0,null,"call"],
$isEH:true},
pr:{
-"^":"Tp:381;a,UI",
-call$1:[function(a){if(a===!0)P.Bb(this.a.a,this.UI,!0)},"call$1",null,2,0,null,455,[],"call"],
+"^":"Tp:391;a,UI",
+call$1:[function(a){if(a===!0)P.Bb(this.a.a,this.UI,!0)},"call$1",null,2,0,null,421,[],"call"],
$isEH:true},
eN:{
-"^":"Tp:113;bK",
+"^":"Tp:115;bK",
call$0:[function(){this.bK.rX(!1)},"call$0",null,0,0,null,"call"],
$isEH:true},
-PI:{
-"^":"Tp:107;a",
+B5:{
+"^":"Tp:112;a",
call$1:[function(a){var z=this.a
-z.a=z.a+1},"call$1",null,2,0,null,108,[],"call"],
+z.a=z.a+1},"call$1",null,2,0,null,113,[],"call"],
$isEH:true},
-uO:{
-"^":"Tp:113;a,b",
+PI:{
+"^":"Tp:115;a,b",
call$0:[function(){this.b.rX(this.a.a)},"call$0",null,0,0,null,"call"],
$isEH:true},
j4:{
-"^":"Tp:107;a,b",
-call$1:[function(a){P.Bb(this.a.a,this.b,!1)},"call$1",null,2,0,null,108,[],"call"],
+"^":"Tp:112;a,b",
+call$1:[function(a){P.Bb(this.a.a,this.b,!1)},"call$1",null,2,0,null,113,[],"call"],
$isEH:true},
i9:{
-"^":"Tp:113;c",
+"^":"Tp:115;c",
call$0:[function(){this.c.rX(!0)},"call$0",null,0,0,null,"call"],
$isEH:true},
VV:{
"^":"Tp;a,b",
-call$1:[function(a){this.b.push(a)},"call$1",null,2,0,null,239,[],"call"],
+call$1:[function(a){this.b.push(a)},"call$1",null,2,0,null,235,[],"call"],
$isEH:true,
$signature:function(){return H.IG(function(a){return{func:"Lf",args:[a]}},this.a,"qh")}},
Dy:{
-"^":"Tp:113;c,d",
+"^":"Tp:115;c,d",
call$0:[function(){this.d.rX(this.c)},"call$0",null,0,0,null,"call"],
$isEH:true},
lU:{
"^":"Tp;a,b,c",
-call$1:[function(a){P.Bb(this.a.a,this.c,a)},"call$1",null,2,0,null,23,[],"call"],
+call$1:[function(a){P.Bb(this.a.a,this.c,a)},"call$1",null,2,0,null,28,[],"call"],
$isEH:true,
$signature:function(){return H.IG(function(a){return{func:"Lf",args:[a]}},this.b,"qh")}},
OC:{
-"^":"Tp:113;d",
+"^":"Tp:115;d",
call$0:[function(){this.d.Lp(new P.lj("No elements"))},"call$0",null,0,0,null,"call"],
$isEH:true},
UH:{
"^":"Tp;a,b",
call$1:[function(a){var z=this.a
z.b=!0
-z.a=a},"call$1",null,2,0,null,23,[],"call"],
+z.a=a},"call$1",null,2,0,null,28,[],"call"],
$isEH:true,
$signature:function(){return H.IG(function(a){return{func:"Lf",args:[a]}},this.b,"qh")}},
Z5:{
-"^":"Tp:113;a,c",
+"^":"Tp:115;a,c",
call$0:[function(){var z=this.a
if(z.b){this.c.rX(z.a)
return}this.c.Lp(new P.lj("No elements"))},"call$0",null,0,0,null,"call"],
$isEH:true},
-ii:{
+j5:{
"^":"Tp;a,b,c",
call$1:[function(a){var z=this.a
if(J.de(z.a,0)){P.Bb(z.b,this.c,a)
-return}z.a=J.xH(z.a,1)},"call$1",null,2,0,null,23,[],"call"],
+return}z.a=J.xH(z.a,1)},"call$1",null,2,0,null,28,[],"call"],
$isEH:true,
$signature:function(){return H.IG(function(a){return{func:"Lf",args:[a]}},this.b,"qh")}},
-ib:{
-"^":"Tp:113;a,d",
+ii:{
+"^":"Tp:115;a,d",
call$0:[function(){this.d.Lp(new P.bJ("value "+H.d(this.a.a)))},"call$0",null,0,0,null,"call"],
$isEH:true},
MO:{
@@ -13916,36 +13320,36 @@
z.SJ=w
w.Ae=z.Gv&1
if(z.iE===w)P.ot(z.nL)
-return w},"call$1","gGE",2,0,null,456,[]],
+return w},"call$1","gmn",2,0,null,422,[]],
giO:function(a){return(H.eQ(this.Y8)^892482866)>>>0},
n:[function(a,b){var z
if(b==null)return!1
if(this===b)return!0
z=J.x(b)
if(typeof b!=="object"||b===null||!z.$isO9)return!1
-return b.Y8===this.Y8},"call$1","gUJ",2,0,null,104,[]],
+return b.Y8===this.Y8},"call$1","gUJ",2,0,null,109,[]],
$isO9:true},
yU:{
"^":"KA;Y8<",
tA:[function(){return this.gY8().j0(this)},"call$0","gQC",0,0,null],
-uO:[function(){this.gY8()},"call$0","gp4",0,0,112],
-LP:[function(){this.gY8()},"call$0","gZ9",0,0,112]},
+uO:[function(){this.gY8()},"call$0","gp4",0,0,114],
+LP:[function(){this.gY8()},"call$0","gZ9",0,0,114]},
nP:{
"^":"a;"},
KA:{
"^":"a;dB,o7<,Bd,Lj<,Gv,lz,Ri",
-fe:[function(a){this.dB=this.Lj.cR(a)},"call$1","gqd",2,0,null,457,[]],
+fe:[function(a){this.dB=this.Lj.cR(a)},"call$1","gqd",2,0,null,423,[]],
fm:[function(a,b){if(b==null)b=P.AY()
-this.o7=P.VH(b,this.Lj)},"call$1","geO",2,0,null,29,[]],
+this.o7=P.VH(b,this.Lj)},"call$1","geO",2,0,null,34,[]],
y5:[function(a){if(a==null)a=P.v3()
-this.Bd=this.Lj.Al(a)},"call$1","gNS",2,0,null,458,[]],
-nB:[function(a,b){var z,y,x
+this.Bd=this.Lj.Al(a)},"call$1","gNS",2,0,null,424,[]],
+Fv:[function(a,b){var z,y,x
z=this.Gv
if((z&8)!==0)return
y=(z+128|4)>>>0
this.Gv=y
if(z<128&&this.Ri!=null){x=this.Ri
-if(x.Gv===1)x.Gv=3}if((z&4)===0&&(y&32)===0)this.J7(this.gp4())},function(a){return this.nB(a,null)},"yy","call$1",null,"gAK",0,2,null,77,459,[]],
+if(x.Gv===1)x.Gv=3}if((z&4)===0&&(y&32)===0)this.J7(this.gp4())},function(a){return this.Fv(a,null)},"yy","call$1",null,"gAK",0,2,null,82,425,[]],
QE:[function(){var z=this.Gv
if((z&8)!==0)return
if(z>=128){z-=128
@@ -13969,19 +13373,19 @@
Rg:[function(a,b){var z=this.Gv
if((z&8)!==0)return
if(z<32)this.Iv(b)
-else this.w6(H.VM(new P.LV(b,null),[null]))},"call$1","gHR",2,0,null,239,[]],
+else this.w6(H.VM(new P.LV(b,null),[null]))},"call$1","gHR",2,0,null,235,[]],
V8:[function(a,b){var z=this.Gv
if((z&8)!==0)return
if(z<32)this.pb(a,b)
-else this.w6(new P.DS(a,b,null))},"call$2","grd",4,0,null,160,[],161,[]],
+else this.w6(new P.DS(a,b,null))},"call$2","gEm",4,0,null,159,[],160,[]],
Qj:[function(){var z=this.Gv
if((z&8)!==0)return
z=(z|2)>>>0
this.Gv=z
if(z<32)this.SY()
else this.w6(C.Wj)},"call$0","gS2",0,0,null],
-uO:[function(){},"call$0","gp4",0,0,112],
-LP:[function(){},"call$0","gZ9",0,0,112],
+uO:[function(){},"call$0","gp4",0,0,114],
+LP:[function(){},"call$0","gZ9",0,0,114],
tA:[function(){},"call$0","gQC",0,0,null],
w6:[function(a){var z,y
z=this.Ri
@@ -13990,19 +13394,19 @@
y=this.Gv
if((y&64)===0){y=(y|64)>>>0
this.Gv=y
-if(y<128)this.Ri.t2(this)}},"call$1","gnX",2,0,null,384,[]],
+if(y<128)this.Ri.t2(this)}},"call$1","gnX",2,0,null,368,[]],
Iv:[function(a){var z=this.Gv
this.Gv=(z|32)>>>0
this.Lj.m1(this.dB,a)
this.Gv=(this.Gv&4294967263)>>>0
-this.Kl((z&4)!==0)},"call$1","gm9",2,0,null,239,[]],
+this.Kl((z&4)!==0)},"call$1","gm9",2,0,null,235,[]],
pb:[function(a,b){var z,y
z=this.Gv
y=new P.Vo(this,a,b)
if((z&1)!==0){this.Gv=(z|16)>>>0
this.Ek()
y.call$0()}else{y.call$0()
-this.Kl((z&4)!==0)}},"call$2","gTb",4,0,null,160,[],161,[]],
+this.Kl((z&4)!==0)}},"call$2","gTb",4,0,null,159,[],160,[]],
SY:[function(){this.Ek()
this.Gv=(this.Gv|16)>>>0
new P.qB(this).call$0()},"call$0","gXm",0,0,null],
@@ -14010,7 +13414,7 @@
this.Gv=(z|32)>>>0
a.call$0()
this.Gv=(this.Gv&4294967263)>>>0
-this.Kl((z&4)!==0)},"call$1","gc2",2,0,null,156,[]],
+this.Kl((z&4)!==0)},"call$1","gEq",2,0,null,155,[]],
Kl:[function(a){var z,y,x
z=this.Gv
if((z&64)!==0&&this.Ri.N6==null){z=(z&4294967231)>>>0
@@ -14026,11 +13430,11 @@
if(x)this.uO()
else this.LP()
z=(this.Gv&4294967263)>>>0
-this.Gv=z}if((z&64)!==0&&z<128)this.Ri.t2(this)},"call$1","ghE",2,0,null,460,[]],
+this.Gv=z}if((z&64)!==0&&z<128)this.Ri.t2(this)},"call$1","ghE",2,0,null,426,[]],
$isMO:true,
-static:{"^":"ry,bG,Q9,Ir,Il,X8,HX,GC,f9"}},
+static:{"^":"ry,bG,Q9,Ir,Kt,Dr,HX,GC,f9"}},
Vo:{
-"^":"Tp:112;a,b,c",
+"^":"Tp:114;a,b,c",
call$0:[function(){var z,y,x,w,v
z=this.a
y=z.Gv
@@ -14046,7 +13450,7 @@
else y.m1(x,v)}z.Gv=(z.Gv&4294967263)>>>0},"call$0",null,0,0,null,"call"],
$isEH:true},
qB:{
-"^":"Tp:112;a",
+"^":"Tp:114;a",
call$0:[function(){var z,y
z=this.a
y=z.Gv
@@ -14061,25 +13465,25 @@
z.fe(a)
z.fm(0,d)
z.y5(c)
-return z},function(a){return this.KR(a,null,null,null)},"yI",function(a,b,c){return this.KR(a,null,b,c)},"zC","call$4$cancelOnError$onDone$onError",null,null,"gp8",2,7,null,77,77,77,461,[],456,[],462,[],164,[]],
+return z},function(a){return this.KR(a,null,null,null)},"yI",function(a,b,c){return this.KR(a,null,b,c)},"zC","call$4$cancelOnError$onDone$onError",null,null,"gp8",2,7,null,82,82,82,427,[],163,[],428,[],422,[]],
w4:[function(a){var z,y
z=$.X3
y=a?1:0
y=new P.KA(null,null,null,z,y,null,null)
y.$builtinTypeInfo=this.$builtinTypeInfo
-return y},"call$1","gGE",2,0,null,456,[]]},
-ti:{
+return y},"call$1","gmn",2,0,null,422,[]]},
+fIm:{
"^":"a;aw@"},
LV:{
-"^":"ti;P>,aw",
+"^":"fIm;P>,aw",
r6:function(a,b){return this.P.call$1(b)},
-dP:[function(a){a.Iv(this.P)},"call$1","gqp",2,0,null,463,[]]},
+dP:[function(a){a.Iv(this.P)},"call$1","gqp",2,0,null,429,[]]},
DS:{
-"^":"ti;kc>,I4<,aw",
-dP:[function(a){a.pb(this.kc,this.I4)},"call$1","gqp",2,0,null,463,[]]},
+"^":"fIm;kc>,I4<,aw",
+dP:[function(a){a.pb(this.kc,this.I4)},"call$1","gqp",2,0,null,429,[]]},
JF:{
"^":"a;",
-dP:[function(a){a.SY()},"call$1","gqp",2,0,null,463,[]],
+dP:[function(a){a.SY()},"call$1","gqp",2,0,null,429,[]],
gaw:function(){return},
saw:function(a){throw H.b(new P.lj("No events after a done."))}},
ht:{
@@ -14088,9 +13492,9 @@
if(z===1)return
if(z>=1){this.Gv=1
return}P.rb(new P.CR(this,a))
-this.Gv=1},"call$1","gQu",2,0,null,463,[]]},
+this.Gv=1},"call$1","gQu",2,0,null,429,[]]},
CR:{
-"^":"Tp:113;a,b",
+"^":"Tp:115;a,b",
call$0:[function(){var z,y
z=this.a
y=z.Gv
@@ -14104,26 +13508,26 @@
h:[function(a,b){var z=this.N6
if(z==null){this.N6=b
this.zR=b}else{z.saw(b)
-this.N6=b}},"call$1","ght",2,0,null,384,[]],
+this.N6=b}},"call$1","ght",2,0,null,368,[]],
TO:[function(a){var z,y
z=this.zR
y=z.gaw()
this.zR=y
if(y==null)this.N6=null
-z.dP(a)},"call$1","gKt",2,0,null,463,[]],
+z.dP(a)},"call$1","gTn",2,0,null,429,[]],
V1:[function(a){if(this.Gv===1)this.Gv=3
this.N6=null
-this.zR=null},"call$0","gyP",0,0,null]},
+this.zR=null},"call$0","gRa",0,0,null]},
v1y:{
-"^":"Tp:113;a,b,c",
+"^":"Tp:115;a,b,c",
call$0:[function(){return this.a.K5(this.b,this.c)},"call$0",null,0,0,null,"call"],
$isEH:true},
uR:{
-"^":"Tp:464;a,b",
-call$2:[function(a,b){return P.NX(this.a,this.b,a,b)},"call$2",null,4,0,null,160,[],161,[],"call"],
+"^":"Tp:430;a,b",
+call$2:[function(a,b){return P.NX(this.a,this.b,a,b)},"call$2",null,4,0,null,159,[],160,[],"call"],
$isEH:true},
-Q0:{
-"^":"Tp:113;a,b",
+GU:{
+"^":"Tp:115;a,b",
call$0:[function(){return this.a.rX(this.b)},"call$0",null,0,0,null,"call"],
$isEH:true},
YR:{
@@ -14139,27 +13543,27 @@
v.fe(a)
v.fm(0,d)
v.y5(c)
-return v},function(a,b,c){return this.KR(a,null,b,c)},"zC",function(a){return this.KR(a,null,null,null)},"yI","call$4$cancelOnError$onDone$onError",null,null,"gp8",2,7,null,77,77,77,461,[],456,[],462,[],164,[]],
-Ml:[function(a,b){b.Rg(0,a)},"call$2","gOa",4,0,null,239,[],465,[]],
+return v},function(a,b,c){return this.KR(a,null,b,c)},"zC",function(a){return this.KR(a,null,null,null)},"yI","call$4$cancelOnError$onDone$onError",null,null,"gp8",2,7,null,82,82,82,427,[],163,[],428,[],422,[]],
+Ml:[function(a,b){b.Rg(0,a)},"call$2","gOa",4,0,null,235,[],431,[]],
$asqh:function(a,b){return[b]}},
fB:{
"^":"KA;UY,Ee,dB,o7,Bd,Lj,Gv,lz,Ri",
Rg:[function(a,b){if((this.Gv&2)!==0)return
-P.KA.prototype.Rg.call(this,this,b)},"call$1","gHR",2,0,null,239,[]],
+P.KA.prototype.Rg.call(this,this,b)},"call$1","gHR",2,0,null,235,[]],
V8:[function(a,b){if((this.Gv&2)!==0)return
-P.KA.prototype.V8.call(this,a,b)},"call$2","grd",4,0,null,160,[],161,[]],
+P.KA.prototype.V8.call(this,a,b)},"call$2","gEm",4,0,null,159,[],160,[]],
uO:[function(){var z=this.Ee
if(z==null)return
-z.yy(0)},"call$0","gp4",0,0,112],
+z.yy(0)},"call$0","gp4",0,0,114],
LP:[function(){var z=this.Ee
if(z==null)return
-z.QE()},"call$0","gZ9",0,0,112],
+z.QE()},"call$0","gZ9",0,0,114],
tA:[function(){var z=this.Ee
if(z!=null){this.Ee=null
z.ed()}return},"call$0","gQC",0,0,null],
-vx:[function(a){this.UY.Ml(a,this)},"call$1","gOa",2,0,function(){return H.IG(function(a,b){return{func:"kA",void:true,args:[a]}},this.$receiver,"fB")},239,[]],
-xL:[function(a,b){this.V8(a,b)},"call$2","gRE",4,0,466,160,[],161,[]],
-nn:[function(){this.Qj()},"call$0","gH1",0,0,112],
+vx:[function(a){this.UY.Ml(a,this)},"call$1","gOa",2,0,function(){return H.IG(function(a,b){return{func:"kA",void:true,args:[a]}},this.$receiver,"fB")},235,[]],
+xL:[function(a,b){this.V8(a,b)},"call$2","gRE",4,0,432,159,[],160,[]],
+nn:[function(){this.Qj()},"call$0","gH1",0,0,114],
S8:function(a,b,c,d){var z,y
z=this.gOa()
y=this.gRE()
@@ -14175,7 +13579,7 @@
y=v
x=new H.XO(w,null)
b.V8(y,x)
-return}if(z===!0)J.QM(b,a)},"call$2","gOa",4,0,null,467,[],465,[]],
+return}if(z===!0)J.QM(b,a)},"call$2","gOa",4,0,null,433,[],431,[]],
$asYR:function(a){return[a,a]},
$asqh:null},
t3:{
@@ -14187,16 +13591,8 @@
y=v
x=new H.XO(w,null)
b.V8(y,x)
-return}J.QM(b,z)},"call$2","gOa",4,0,null,467,[],465,[]]},
-dq:{
-"^":"YR;Em,Sb",
-Ml:[function(a,b){var z=this.Em
-if(z>0){this.Em=z-1
-return}b.Rg(0,a)},"call$2","gOa",4,0,null,467,[],465,[]],
-U6:function(a,b,c){},
-$asYR:function(a){return[a,a]},
-$asqh:null},
-lO:{
+return}J.QM(b,z)},"call$2","gOa",4,0,null,433,[],431,[]]},
+tU:{
"^":"a;"},
aY:{
"^":"a;"},
@@ -14216,7 +13612,7 @@
iT:function(a){return this.iq.call$1$specification(a)}},
e4:{
"^":"a;"},
-JB:{
+dl:{
"^":"a;"},
Id:{
"^":"a;oh",
@@ -14224,102 +13620,102 @@
c1:[function(a,b,c){var z,y
z=this.oh
for(;y=z.gzU(),y.gE2()==null;)z=z.geT(z)
-return y.gE2().call$5(z,new P.Id(z.geT(z)),a,b,c)},"call$3","gE2",6,0,null,151,[],160,[],161,[]],
+return y.gE2().call$5(z,new P.Id(z.geT(z)),a,b,c)},"call$3","gE2",6,0,null,153,[],159,[],160,[]],
Vn:[function(a,b){var z,y
z=this.oh
for(;y=z.gzU(),y.gcP()==null;)z=z.geT(z)
-return y.gcP().call$4(z,new P.Id(z.geT(z)),a,b)},"call$2","gcP",4,0,null,151,[],115,[]],
+return y.gcP().call$4(z,new P.Id(z.geT(z)),a,b)},"call$2","gcP",4,0,null,153,[],117,[]],
qG:[function(a,b,c){var z,y
z=this.oh
for(;y=z.gzU(),y.gJl()==null;)z=z.geT(z)
-return y.gJl().call$5(z,new P.Id(z.geT(z)),a,b,c)},"call$3","gJl",6,0,null,151,[],115,[],173,[]],
+return y.gJl().call$5(z,new P.Id(z.geT(z)),a,b,c)},"call$3","gJl",6,0,null,153,[],117,[],172,[]],
nA:[function(a,b,c,d){var z,y
z=this.oh
for(;y=z.gzU(),y.gpU()==null;)z=z.geT(z)
-return y.gpU().call$6(z,new P.Id(z.geT(z)),a,b,c,d)},"call$4","gpU",8,0,null,151,[],115,[],54,[],55,[]],
+return y.gpU().call$6(z,new P.Id(z.geT(z)),a,b,c,d)},"call$4","gpU",8,0,null,153,[],117,[],59,[],60,[]],
TE:[function(a,b){var z,y
z=this.oh
for(;y=z.gzU().gFh(),y==null;)z=z.geT(z)
-return y.call$4(z,new P.Id(z.geT(z)),a,b)},"call$2","gFh",4,0,null,151,[],115,[]],
+return y.call$4(z,new P.Id(z.geT(z)),a,b)},"call$2","gFh",4,0,null,153,[],117,[]],
V6:[function(a,b){var z,y
z=this.oh
for(;y=z.gzU().gXp(),y==null;)z=z.geT(z)
-return y.call$4(z,new P.Id(z.geT(z)),a,b)},"call$2","gXp",4,0,null,151,[],115,[]],
+return y.call$4(z,new P.Id(z.geT(z)),a,b)},"call$2","gXp",4,0,null,153,[],117,[]],
mz:[function(a,b){var z,y
z=this.oh
for(;y=z.gzU().gaj(),y==null;)z=z.geT(z)
-return y.call$4(z,new P.Id(z.geT(z)),a,b)},"call$2","gaj",4,0,null,151,[],115,[]],
+return y.call$4(z,new P.Id(z.geT(z)),a,b)},"call$2","gaj",4,0,null,153,[],117,[]],
RK:[function(a,b){var z,y,x
z=this.oh
for(;y=z.gzU(),y.grb()==null;)z=z.geT(z)
x=z.geT(z)
-y.grb().call$4(z,new P.Id(x),a,b)},"call$2","grb",4,0,null,151,[],115,[]],
+y.grb().call$4(z,new P.Id(x),a,b)},"call$2","grb",4,0,null,153,[],117,[]],
pX:[function(a,b,c){var z,y
z=this.oh
for(;y=z.gzU(),y.gZq()==null;)z=z.geT(z)
-return y.gZq().call$5(z,new P.Id(z.geT(z)),a,b,c)},"call$3","gZq",6,0,null,151,[],167,[],115,[]],
+return y.gZq().call$5(z,new P.Id(z.geT(z)),a,b,c)},"call$3","gZq",6,0,null,153,[],166,[],117,[]],
RB:[function(a,b,c){var z,y
z=this.oh
for(;y=z.gzU(),y.gJS(y)==null;)z=z.geT(z)
-y.gJS(y).call$4(z,new P.Id(z.geT(z)),b,c)},"call$2","gJS",4,0,null,151,[],181,[]],
+y.gJS(y).call$4(z,new P.Id(z.geT(z)),b,c)},"call$2","gJS",4,0,null,153,[],180,[]],
ld:[function(a,b,c){var z,y,x
z=this.oh
for(;y=z.gzU(),y.giq()==null;)z=z.geT(z)
x=z.geT(z)
-return y.giq().call$5(z,new P.Id(x),a,b,c)},"call$3","giq",6,0,null,151,[],184,[],185,[]]},
+return y.giq().call$5(z,new P.Id(x),a,b,c)},"call$3","giq",6,0,null,153,[],183,[],184,[]]},
WH:{
"^":"a;",
-fC:[function(a){return this.gC5()===a.gC5()},"call$1","gRX",2,0,null,468,[]],
+fC:[function(a){return this.gC5()===a.gC5()},"call$1","gRX",2,0,null,434,[]],
bH:[function(a){var z,y,x,w
try{x=this.Gr(a)
return x}catch(w){x=H.Ru(w)
z=x
y=new H.XO(w,null)
-return this.hk(z,y)}},"call$1","gSI",2,0,null,115,[]],
+return this.hk(z,y)}},"call$1","gSI",2,0,null,117,[]],
m1:[function(a,b){var z,y,x,w
try{x=this.FI(a,b)
return x}catch(w){x=H.Ru(w)
z=x
y=new H.XO(w,null)
-return this.hk(z,y)}},"call$2","gNY",4,0,null,115,[],173,[]],
+return this.hk(z,y)}},"call$2","gNY",4,0,null,117,[],172,[]],
z8:[function(a,b,c){var z,y,x,w
try{x=this.mg(a,b,c)
return x}catch(w){x=H.Ru(w)
z=x
y=new H.XO(w,null)
-return this.hk(z,y)}},"call$3","gLG",6,0,null,115,[],54,[],55,[]],
+return this.hk(z,y)}},"call$3","gLG",6,0,null,117,[],59,[],60,[]],
xi:[function(a,b){var z=this.Al(a)
if(b)return new P.TF(this,z)
-else return new P.K5(this,z)},function(a){return this.xi(a,!0)},"ce","call$2$runGuarded",null,"gAX",2,3,null,336,115,[],469,[]],
+else return new P.K5(this,z)},function(a){return this.xi(a,!0)},"ce","call$2$runGuarded",null,"gAX",2,3,null,333,117,[],435,[]],
oj:[function(a,b){var z=this.cR(a)
if(b)return new P.Cg(this,z)
-else return new P.Hs(this,z)},"call$2$runGuarded","gVF",2,3,null,336,115,[],469,[]],
+else return new P.Hs(this,z)},"call$2$runGuarded","gVF",2,3,null,333,117,[],435,[]],
PT:[function(a,b){var z=this.O8(a)
if(b)return new P.dv(this,z)
-else return new P.pV(this,z)},"call$2$runGuarded","gzg",2,3,null,336,115,[],469,[]]},
+else return new P.ph(this,z)},"call$2$runGuarded","gzg",2,3,null,333,117,[],435,[]]},
TF:{
-"^":"Tp:113;a,b",
+"^":"Tp:115;a,b",
call$0:[function(){return this.a.bH(this.b)},"call$0",null,0,0,null,"call"],
$isEH:true},
K5:{
-"^":"Tp:113;c,d",
+"^":"Tp:115;c,d",
call$0:[function(){return this.c.Gr(this.d)},"call$0",null,0,0,null,"call"],
$isEH:true},
Cg:{
-"^":"Tp:107;a,b",
-call$1:[function(a){return this.a.m1(this.b,a)},"call$1",null,2,0,null,173,[],"call"],
+"^":"Tp:112;a,b",
+call$1:[function(a){return this.a.m1(this.b,a)},"call$1",null,2,0,null,172,[],"call"],
$isEH:true},
Hs:{
-"^":"Tp:107;c,d",
-call$1:[function(a){return this.c.FI(this.d,a)},"call$1",null,2,0,null,173,[],"call"],
+"^":"Tp:112;c,d",
+call$1:[function(a){return this.c.FI(this.d,a)},"call$1",null,2,0,null,172,[],"call"],
$isEH:true},
dv:{
-"^":"Tp:346;a,b",
-call$2:[function(a,b){return this.a.z8(this.b,a,b)},"call$2",null,4,0,null,54,[],55,[],"call"],
+"^":"Tp:348;a,b",
+call$2:[function(a,b){return this.a.z8(this.b,a,b)},"call$2",null,4,0,null,59,[],60,[],"call"],
$isEH:true},
-pV:{
-"^":"Tp:346;c,d",
-call$2:[function(a,b){return this.c.mg(this.d,a,b)},"call$2",null,4,0,null,54,[],55,[],"call"],
+ph:{
+"^":"Tp:348;c,d",
+call$2:[function(a,b){return this.c.mg(this.d,a,b)},"call$2",null,4,0,null,59,[],60,[],"call"],
$isEH:true},
uo:{
"^":"WH;eT>,zU<,R1",
@@ -14328,24 +13724,24 @@
z=this.R1
y=z.t(0,b)
if(y!=null||z.x4(b))return y
-return this.eT.t(0,b)},"call$1","gIA",2,0,null,42,[]],
-hk:[function(a,b){return new P.Id(this).c1(this,a,b)},"call$2","gE2",4,0,null,160,[],161,[]],
-c6:[function(a,b){return new P.Id(this).ld(this,a,b)},function(a){return this.c6(a,null)},"iT","call$2$specification$zoneValues",null,"giq",0,5,null,77,77,184,[],185,[]],
-Gr:[function(a){return new P.Id(this).Vn(this,a)},"call$1","gcP",2,0,null,115,[]],
-FI:[function(a,b){return new P.Id(this).qG(this,a,b)},"call$2","gJl",4,0,null,115,[],173,[]],
-mg:[function(a,b,c){return new P.Id(this).nA(this,a,b,c)},"call$3","gpU",6,0,null,115,[],54,[],55,[]],
-Al:[function(a){return new P.Id(this).TE(this,a)},"call$1","gFh",2,0,null,115,[]],
-cR:[function(a){return new P.Id(this).V6(this,a)},"call$1","gXp",2,0,null,115,[]],
-O8:[function(a){return new P.Id(this).mz(this,a)},"call$1","gaj",2,0,null,115,[]],
-wr:[function(a){new P.Id(this).RK(this,a)},"call$1","grb",2,0,null,115,[]],
-uN:[function(a,b){return new P.Id(this).pX(this,a,b)},"call$2","gZq",4,0,null,167,[],115,[]],
-Ch:[function(a,b){new P.Id(this).RB(0,this,b)},"call$1","gJS",2,0,null,181,[]]},
+return this.eT.t(0,b)},"call$1","gIA",2,0,null,47,[]],
+hk:[function(a,b){return new P.Id(this).c1(this,a,b)},"call$2","gE2",4,0,null,159,[],160,[]],
+c6:[function(a,b){return new P.Id(this).ld(this,a,b)},function(a){return this.c6(a,null)},"iT","call$2$specification$zoneValues",null,"giq",0,5,null,82,82,183,[],184,[]],
+Gr:[function(a){return new P.Id(this).Vn(this,a)},"call$1","gcP",2,0,null,117,[]],
+FI:[function(a,b){return new P.Id(this).qG(this,a,b)},"call$2","gJl",4,0,null,117,[],172,[]],
+mg:[function(a,b,c){return new P.Id(this).nA(this,a,b,c)},"call$3","gpU",6,0,null,117,[],59,[],60,[]],
+Al:[function(a){return new P.Id(this).TE(this,a)},"call$1","gFh",2,0,null,117,[]],
+cR:[function(a){return new P.Id(this).V6(this,a)},"call$1","gXp",2,0,null,117,[]],
+O8:[function(a){return new P.Id(this).mz(this,a)},"call$1","gaj",2,0,null,117,[]],
+wr:[function(a){new P.Id(this).RK(this,a)},"call$1","grb",2,0,null,117,[]],
+uN:[function(a,b){return new P.Id(this).pX(this,a,b)},"call$2","gZq",4,0,null,166,[],117,[]],
+Ch:[function(a,b){new P.Id(this).RB(0,this,b)},"call$1","gJS",2,0,null,180,[]]},
pK:{
-"^":"Tp:113;a,b",
+"^":"Tp:115;a,b",
call$0:[function(){P.IA(new P.eM(this.a,this.b))},"call$0",null,0,0,null,"call"],
$isEH:true},
eM:{
-"^":"Tp:113;c,d",
+"^":"Tp:115;c,d",
call$0:[function(){var z,y,x
z=this.c
P.JS("Uncaught Error: "+H.d(z))
@@ -14357,11 +13753,11 @@
throw H.b(z)},"call$0",null,0,0,null,"call"],
$isEH:true},
Ha:{
-"^":"Tp:436;a",
+"^":"Tp:404;a",
call$2:[function(a,b){if(a==null)throw H.b(new P.AT("ZoneValue key must not be null"))
-this.a.u(0,a,b)},"call$2",null,4,0,null,42,[],23,[],"call"],
+this.a.u(0,a,b)},"call$2",null,4,0,null,47,[],28,[],"call"],
$isEH:true},
-nU:{
+W5:{
"^":"a;",
gE2:function(){return P.xP()},
hk:function(a,b){return this.gE2().call$2(a,b)},
@@ -14391,23 +13787,23 @@
geT:function(a){return},
gzU:function(){return C.v8},
gC5:function(){return this},
-fC:[function(a){return a.gC5()===this},"call$1","gRX",2,0,null,468,[]],
-t:[function(a,b){return},"call$1","gIA",2,0,null,42,[]],
-hk:[function(a,b){return P.L2(this,null,this,a,b)},"call$2","gE2",4,0,null,160,[],161,[]],
-c6:[function(a,b){return P.UA(this,null,this,a,b)},function(a){return this.c6(a,null)},"iT","call$2$specification$zoneValues",null,"giq",0,5,null,77,77,184,[],185,[]],
-Gr:[function(a){return P.T8(this,null,this,a)},"call$1","gcP",2,0,null,115,[]],
-FI:[function(a,b){return P.V7(this,null,this,a,b)},"call$2","gJl",4,0,null,115,[],173,[]],
-mg:[function(a,b,c){return P.Qx(this,null,this,a,b,c)},"call$3","gpU",6,0,null,115,[],54,[],55,[]],
-Al:[function(a){return a},"call$1","gFh",2,0,null,115,[]],
-cR:[function(a){return a},"call$1","gXp",2,0,null,115,[]],
-O8:[function(a){return a},"call$1","gaj",2,0,null,115,[]],
-wr:[function(a){P.Tk(this,null,this,a)},"call$1","grb",2,0,null,115,[]],
-uN:[function(a,b){return P.h8(this,null,this,a,b)},"call$2","gZq",4,0,null,167,[],115,[]],
+fC:[function(a){return a.gC5()===this},"call$1","gRX",2,0,null,434,[]],
+t:[function(a,b){return},"call$1","gIA",2,0,null,47,[]],
+hk:[function(a,b){return P.L2(this,null,this,a,b)},"call$2","gE2",4,0,null,159,[],160,[]],
+c6:[function(a,b){return P.UA(this,null,this,a,b)},function(a){return this.c6(a,null)},"iT","call$2$specification$zoneValues",null,"giq",0,5,null,82,82,183,[],184,[]],
+Gr:[function(a){return P.T8(this,null,this,a)},"call$1","gcP",2,0,null,117,[]],
+FI:[function(a,b){return P.V7(this,null,this,a,b)},"call$2","gJl",4,0,null,117,[],172,[]],
+mg:[function(a,b,c){return P.Qx(this,null,this,a,b,c)},"call$3","gpU",6,0,null,117,[],59,[],60,[]],
+Al:[function(a){return a},"call$1","gFh",2,0,null,117,[]],
+cR:[function(a){return a},"call$1","gXp",2,0,null,117,[]],
+O8:[function(a){return a},"call$1","gaj",2,0,null,117,[]],
+wr:[function(a){P.Tk(this,null,this,a)},"call$1","grb",2,0,null,117,[]],
+uN:[function(a,b){return P.h8(this,null,this,a,b)},"call$2","gZq",4,0,null,166,[],117,[]],
Ch:[function(a,b){H.qw(b)
-return},"call$1","gJS",2,0,null,181,[]]}}],["dart.collection","dart:collection",,P,{
+return},"call$1","gJS",2,0,null,180,[]]}}],["dart.collection","dart:collection",,P,{
"^":"",
-Ou:[function(a,b){return J.de(a,b)},"call$2","iv",4,0,187,128,[],188,[]],
-T9:[function(a){return J.v1(a)},"call$1","py",2,0,189,128,[]],
+R2:[function(a,b){return J.de(a,b)},"call$2","to",4,0,186,131,[],187,[]],
+T9:[function(a){return J.v1(a)},"call$1","py",2,0,188,131,[]],
Py:function(a,b,c,d,e){var z
if(a==null){z=new P.k6(0,null,null,null,null)
z.$builtinTypeInfo=[d,e]
@@ -14422,7 +13818,7 @@
try{P.Vr(a,z)}finally{$.xb().Rz(0,a)}y=P.p9("(")
y.We(z,", ")
y.KF(")")
-return y.vM},"call$1","Zw",2,0,null,114,[]],
+return y.vM},"call$1","Zw",2,0,null,116,[]],
Vr:[function(a,b){var z,y,x,w,v,u,t,s,r,q
z=a.gA(a)
y=0
@@ -14455,10 +13851,8 @@
if(q==null){y+=5
q="..."}}if(q!=null)b.push(q)
b.push(u)
-b.push(v)},"call$2","zE",4,0,null,114,[],190,[]],
-L5:function(a,b,c,d,e){if(b==null){if(a==null)return H.VM(new P.YB(0,null,null,null,null,null,0),[d,e])
-b=P.py()}else{if(P.J2()===b&&P.N3()===a)return H.VM(new P.ey(0,null,null,null,null,null,0),[d,e])
-if(a==null)a=P.iv()}return P.Ex(a,b,c,d,e)},
+b.push(v)},"call$2","wB",4,0,null,116,[],189,[]],
+L5:function(a,b,c,d,e){return H.VM(new P.YB(0,null,null,null,null,null,0),[d,e])},
Ls:function(a,b,c,d){return H.VM(new P.b6(0,null,null,null,null,null,0),[d])},
vW:[function(a){var z,y,x,w
z={}
@@ -14470,7 +13864,7 @@
J.kH(a,new P.ZQ(z,y))
y.KF("}")}finally{z=$.tw()
if(0>=z.length)return H.e(z,0)
-z.pop()}return y.gvM()},"call$1","DH",2,0,null,191,[]],
+z.pop()}return y.gvM()},"call$1","DH",2,0,null,190,[]],
k6:{
"^":"a;X5,vv,OX,OB,wV",
gB:function(a){return this.X5},
@@ -14483,11 +13877,11 @@
return z==null?!1:z[a]!=null}else if(typeof a==="number"&&(a&0x3ffffff)===a){y=this.OX
return y==null?!1:y[a]!=null}else{x=this.OB
if(x==null)return!1
-return this.aH(x[this.nm(a)],a)>=0}},"call$1","gV9",2,0,null,42,[]],
+return this.aH(x[this.nm(a)],a)>=0}},"call$1","gV9",2,0,null,47,[]],
di:[function(a){var z=this.Ig()
z.toString
-return H.Ck(z,new P.ce(this,a))},"call$1","gmc",2,0,null,23,[]],
-FV:[function(a,b){J.kH(b,new P.DJ(this))},"call$1","gDY",2,0,null,104,[]],
+return H.Ck(z,new P.ce(this,a))},"call$1","gmc",2,0,null,28,[]],
+FV:[function(a,b){H.bQ(b,new P.DJ(this))},"call$1","gDY",2,0,null,109,[]],
t:[function(a,b){var z,y,x,w,v,u,t
if(typeof b==="string"&&b!=="__proto__"){z=this.vv
if(z==null)y=null
@@ -14499,7 +13893,7 @@
if(v==null)return
u=v[this.nm(b)]
t=this.aH(u,b)
-return t<0?null:u[t+1]}},"call$1","gIA",2,0,null,42,[]],
+return t<0?null:u[t+1]}},"call$1","gIA",2,0,null,47,[]],
u:[function(a,b,c){var z,y,x,w,v,u
if(typeof b==="string"&&b!=="__proto__"){z=this.vv
if(z==null){z=P.a0()
@@ -14515,7 +13909,7 @@
if(u>=0)v[u+1]=c
else{v.push(b,c)
this.X5=this.X5+1
-this.wV=null}}}},"call$2","gj3",4,0,null,42,[],23,[]],
+this.wV=null}}}},"call$2","gj3",4,0,null,47,[],28,[]],
Rz:[function(a,b){var z,y,x
if(typeof b==="string"&&b!=="__proto__")return this.Nv(this.vv,b)
else if(typeof b==="number"&&(b&0x3ffffff)===b)return this.Nv(this.OX,b)
@@ -14526,17 +13920,17 @@
if(x<0)return
this.X5=this.X5-1
this.wV=null
-return y.splice(x,2)[1]}},"call$1","gRI",2,0,null,42,[]],
+return y.splice(x,2)[1]}},"call$1","guH",2,0,null,47,[]],
V1:[function(a){if(this.X5>0){this.wV=null
this.OB=null
this.OX=null
this.vv=null
-this.X5=0}},"call$0","gyP",0,0,null],
+this.X5=0}},"call$0","gRa",0,0,null],
aN:[function(a,b){var z,y,x,w
z=this.Ig()
for(y=z.length,x=0;x<y;++x){w=z[x]
b.call$2(w,this.t(0,w))
-if(z!==this.wV)throw H.b(P.a4(this))}},"call$1","gjw",2,0,null,429,[]],
+if(z!==this.wV)throw H.b(P.a4(this))}},"call$1","gjw",2,0,null,397,[]],
Ig:[function(){var z,y,x,w,v,u,t,s,r,q,p,o
z=this.wV
if(z!=null)return z
@@ -14557,71 +13951,71 @@
for(o=0;o<p;o+=2){y[u]=q[o];++u}}}this.wV=y
return y},"call$0","gtL",0,0,null],
dg:[function(a,b,c){if(a[b]==null){this.X5=this.X5+1
-this.wV=null}P.cW(a,b,c)},"call$3","gLa",6,0,null,186,[],42,[],23,[]],
+this.wV=null}P.cW(a,b,c)},"call$3","gLa",6,0,null,185,[],47,[],28,[]],
Nv:[function(a,b){var z
if(a!=null&&a[b]!=null){z=P.vL(a,b)
delete a[b]
this.X5=this.X5-1
this.wV=null
-return z}else return},"call$2","got",4,0,null,186,[],42,[]],
-nm:[function(a){return J.v1(a)&0x3ffffff},"call$1","gtU",2,0,null,42,[]],
+return z}else return},"call$2","got",4,0,null,185,[],47,[]],
+nm:[function(a){return J.v1(a)&0x3ffffff},"call$1","gtU",2,0,null,47,[]],
aH:[function(a,b){var z,y
if(a==null)return-1
z=a.length
for(y=0;y<z;y+=2)if(J.de(a[y],b))return y
-return-1},"call$2","gSP",4,0,null,470,[],42,[]],
+return-1},"call$2","gSP",4,0,null,436,[],47,[]],
$isZ0:true,
static:{vL:[function(a,b){var z=a[b]
-return z===a?null:z},"call$2","ME",4,0,null,186,[],42,[]],cW:[function(a,b,c){if(c==null)a[b]=a
-else a[b]=c},"call$3","rn",6,0,null,186,[],42,[],23,[]],a0:[function(){var z=Object.create(null)
+return z===a?null:z},"call$2","ME",4,0,null,185,[],47,[]],cW:[function(a,b,c){if(c==null)a[b]=a
+else a[b]=c},"call$3","rn",6,0,null,185,[],47,[],28,[]],a0:[function(){var z=Object.create(null)
P.cW(z,"<non-identifier-key>",z)
delete z["<non-identifier-key>"]
return z},"call$0","Vd",0,0,null]}},
oi:{
-"^":"Tp:107;a",
-call$1:[function(a){return this.a.t(0,a)},"call$1",null,2,0,null,471,[],"call"],
+"^":"Tp:112;a",
+call$1:[function(a){return this.a.t(0,a)},"call$1",null,2,0,null,437,[],"call"],
$isEH:true},
ce:{
-"^":"Tp:107;a,b",
-call$1:[function(a){return J.de(this.a.t(0,a),this.b)},"call$1",null,2,0,null,471,[],"call"],
+"^":"Tp:112;a,b",
+call$1:[function(a){return J.de(this.a.t(0,a),this.b)},"call$1",null,2,0,null,437,[],"call"],
$isEH:true},
DJ:{
"^":"Tp;a",
-call$2:[function(a,b){this.a.u(0,a,b)},"call$2",null,4,0,null,42,[],23,[],"call"],
+call$2:[function(a,b){this.a.u(0,a,b)},"call$2",null,4,0,null,47,[],28,[],"call"],
$isEH:true,
$signature:function(){return H.IG(function(a,b){return{func:"vP",args:[a,b]}},this.a,"k6")}},
PL:{
"^":"k6;X5,vv,OX,OB,wV",
-nm:[function(a){return H.CU(a)&0x3ffffff},"call$1","gtU",2,0,null,42,[]],
+nm:[function(a){return H.CU(a)&0x3ffffff},"call$1","gtU",2,0,null,47,[]],
aH:[function(a,b){var z,y,x
if(a==null)return-1
z=a.length
for(y=0;y<z;y+=2){x=a[y]
-if(x==null?b==null:x===b)return y}return-1},"call$2","gSP",4,0,null,470,[],42,[]]},
+if(x==null?b==null:x===b)return y}return-1},"call$2","gSP",4,0,null,436,[],47,[]]},
Fq:{
"^":"k6;m6,Q6,ac,X5,vv,OX,OB,wV",
-C2:function(a,b){return this.m6.call$2(a,b)},
+WV:function(a,b){return this.m6.call$2(a,b)},
H5:function(a){return this.Q6.call$1(a)},
Ef:function(a){return this.ac.call$1(a)},
t:[function(a,b){if(this.Ef(b)!==!0)return
-return P.k6.prototype.t.call(this,this,b)},"call$1","gIA",2,0,null,42,[]],
+return P.k6.prototype.t.call(this,this,b)},"call$1","gIA",2,0,null,47,[]],
x4:[function(a){if(this.Ef(a)!==!0)return!1
-return P.k6.prototype.x4.call(this,a)},"call$1","gV9",2,0,null,42,[]],
+return P.k6.prototype.x4.call(this,a)},"call$1","gV9",2,0,null,47,[]],
Rz:[function(a,b){if(this.Ef(b)!==!0)return
-return P.k6.prototype.Rz.call(this,this,b)},"call$1","gRI",2,0,null,42,[]],
-nm:[function(a){return this.H5(a)&0x3ffffff},"call$1","gtU",2,0,null,42,[]],
+return P.k6.prototype.Rz.call(this,this,b)},"call$1","guH",2,0,null,47,[]],
+nm:[function(a){return this.H5(a)&0x3ffffff},"call$1","gtU",2,0,null,47,[]],
aH:[function(a,b){var z,y
if(a==null)return-1
z=a.length
-for(y=0;y<z;y+=2)if(this.C2(a[y],b)===!0)return y
-return-1},"call$2","gSP",4,0,null,470,[],42,[]],
+for(y=0;y<z;y+=2)if(this.WV(a[y],b)===!0)return y
+return-1},"call$2","gSP",4,0,null,436,[],47,[]],
bu:[function(a){return P.vW(this)},"call$0","gXo",0,0,null],
static:{MP:function(a,b,c,d,e){var z=new P.jG(d)
return H.VM(new P.Fq(a,b,z,0,null,null,null,null),[d,e])}}},
jG:{
-"^":"Tp:107;a",
-call$1:[function(a){var z=H.Gq(a,this.a)
-return z},"call$1",null,2,0,null,277,[],"call"],
+"^":"Tp:112;a",
+call$1:[function(a){var z=H.XY(a,this.a)
+return z},"call$1",null,2,0,null,272,[],"call"],
$isEH:true},
fG:{
"^":"mW;Fb",
@@ -14631,12 +14025,12 @@
z=new P.EQ(z,z.Ig(),0,null)
z.$builtinTypeInfo=this.$builtinTypeInfo
return z},
-tg:[function(a,b){return this.Fb.x4(b)},"call$1","gdj",2,0,null,129,[]],
+tg:[function(a,b){return this.Fb.x4(b)},"call$1","gdj",2,0,null,132,[]],
aN:[function(a,b){var z,y,x,w
z=this.Fb
y=z.Ig()
for(x=y.length,w=0;w<x;++w){b.call$1(y[w])
-if(y!==z.wV)throw H.b(P.a4(z))}},"call$1","gjw",2,0,null,115,[]],
+if(y!==z.wV)throw H.b(P.a4(z))}},"call$1","gjw",2,0,null,117,[]],
$isyN:true},
EQ:{
"^":"a;Fb,wV,zi,fD",
@@ -14664,9 +14058,9 @@
if(y==null)return!1
return y[a]!=null}else{x=this.OB
if(x==null)return!1
-return this.aH(x[this.nm(a)],a)>=0}},"call$1","gV9",2,0,null,42,[]],
-di:[function(a){return H.VM(new P.i5(this),[H.Kp(this,0)]).Vr(0,new P.ou(this,a))},"call$1","gmc",2,0,null,23,[]],
-FV:[function(a,b){J.kH(b,new P.S9(this))},"call$1","gDY",2,0,null,104,[]],
+return this.aH(x[this.nm(a)],a)>=0}},"call$1","gV9",2,0,null,47,[]],
+di:[function(a){return H.VM(new P.i5(this),[H.Kp(this,0)]).Vr(0,new P.ou(this,a))},"call$1","gmc",2,0,null,28,[]],
+FV:[function(a,b){J.kH(b,new P.S9(this))},"call$1","gDY",2,0,null,109,[]],
t:[function(a,b){var z,y,x,w,v,u
if(typeof b==="string"&&b!=="__proto__"){z=this.vv
if(z==null)return
@@ -14679,7 +14073,7 @@
v=w[this.nm(b)]
u=this.aH(v,b)
if(u<0)return
-return v[u].gS4()}},"call$1","gIA",2,0,null,42,[]],
+return v[u].gS4()}},"call$1","gIA",2,0,null,47,[]],
u:[function(a,b,c){var z,y,x,w,v,u
if(typeof b==="string"&&b!=="__proto__"){z=this.vv
if(z==null){z=P.Qs()
@@ -14692,12 +14086,12 @@
if(v==null)x[w]=[this.pE(b,c)]
else{u=this.aH(v,b)
if(u>=0)v[u].sS4(c)
-else v.push(this.pE(b,c))}}},"call$2","gj3",4,0,null,42,[],23,[]],
+else v.push(this.pE(b,c))}}},"call$2","gj3",4,0,null,47,[],28,[]],
to:[function(a,b){var z
if(this.x4(a))return this.t(0,a)
z=b.call$0()
this.u(0,a,z)
-return z},"call$2","gMs",4,0,null,42,[],472,[]],
+return z},"call$2","gMs",4,0,null,47,[],438,[]],
Rz:[function(a,b){var z,y,x,w
if(typeof b==="string"&&b!=="__proto__")return this.Nv(this.vv,b)
else if(typeof b==="number"&&(b&0x3ffffff)===b)return this.Nv(this.OX,b)
@@ -14708,30 +14102,30 @@
if(x<0)return
w=y.splice(x,1)[0]
this.Vb(w)
-return w.gS4()}},"call$1","gRI",2,0,null,42,[]],
+return w.gS4()}},"call$1","guH",2,0,null,47,[]],
V1:[function(a){if(this.X5>0){this.lX=null
this.H9=null
this.OB=null
this.OX=null
this.vv=null
this.X5=0
-this.zN=this.zN+1&67108863}},"call$0","gyP",0,0,null],
+this.zN=this.zN+1&67108863}},"call$0","gRa",0,0,null],
aN:[function(a,b){var z,y
z=this.H9
y=this.zN
for(;z!=null;){b.call$2(z.gkh(),z.gS4())
if(y!==this.zN)throw H.b(P.a4(this))
-z=z.gDG()}},"call$1","gjw",2,0,null,429,[]],
+z=z.gDG()}},"call$1","gjw",2,0,null,397,[]],
dg:[function(a,b,c){var z=a[b]
if(z==null)a[b]=this.pE(b,c)
-else z.sS4(c)},"call$3","gLa",6,0,null,186,[],42,[],23,[]],
+else z.sS4(c)},"call$3","gLa",6,0,null,185,[],47,[],28,[]],
Nv:[function(a,b){var z
if(a==null)return
z=a[b]
if(z==null)return
this.Vb(z)
delete a[b]
-return z.gS4()},"call$2","got",4,0,null,186,[],42,[]],
+return z.gS4()},"call$2","got",4,0,null,185,[],47,[]],
pE:[function(a,b){var z,y
z=new P.db(a,b,null,null)
if(this.H9==null){this.lX=z
@@ -14740,7 +14134,7 @@
y.sDG(z)
this.lX=z}this.X5=this.X5+1
this.zN=this.zN+1&67108863
-return z},"call$2","gTM",4,0,null,42,[],23,[]],
+return z},"call$2","gTM",4,0,null,47,[],28,[]],
Vb:[function(a){var z,y
z=a.gzQ()
y=a.gDG()
@@ -14749,13 +14143,13 @@
if(y==null)this.lX=z
else y.szQ(z)
this.X5=this.X5-1
-this.zN=this.zN+1&67108863},"call$1","glZ",2,0,null,473,[]],
-nm:[function(a){return J.v1(a)&0x3ffffff},"call$1","gtU",2,0,null,42,[]],
+this.zN=this.zN+1&67108863},"call$1","glZ",2,0,null,439,[]],
+nm:[function(a){return J.v1(a)&0x3ffffff},"call$1","gtU",2,0,null,47,[]],
aH:[function(a,b){var z,y
if(a==null)return-1
z=a.length
for(y=0;y<z;++y)if(J.de(a[y].gkh(),b))return y
-return-1},"call$2","gSP",4,0,null,470,[],42,[]],
+return-1},"call$2","gSP",4,0,null,436,[],47,[]],
bu:[function(a){return P.vW(this)},"call$0","gXo",0,0,null],
$isFo:true,
$isZ0:true,
@@ -14764,50 +14158,18 @@
delete z["<non-identifier-key>"]
return z},"call$0","Bs",0,0,null]}},
a1:{
-"^":"Tp:107;a",
-call$1:[function(a){return this.a.t(0,a)},"call$1",null,2,0,null,471,[],"call"],
+"^":"Tp:112;a",
+call$1:[function(a){return this.a.t(0,a)},"call$1",null,2,0,null,437,[],"call"],
$isEH:true},
ou:{
-"^":"Tp:107;a,b",
-call$1:[function(a){return J.de(this.a.t(0,a),this.b)},"call$1",null,2,0,null,471,[],"call"],
+"^":"Tp:112;a,b",
+call$1:[function(a){return J.de(this.a.t(0,a),this.b)},"call$1",null,2,0,null,437,[],"call"],
$isEH:true},
S9:{
"^":"Tp;a",
-call$2:[function(a,b){this.a.u(0,a,b)},"call$2",null,4,0,null,42,[],23,[],"call"],
+call$2:[function(a,b){this.a.u(0,a,b)},"call$2",null,4,0,null,47,[],28,[],"call"],
$isEH:true,
$signature:function(){return H.IG(function(a,b){return{func:"oK",args:[a,b]}},this.a,"YB")}},
-ey:{
-"^":"YB;X5,vv,OX,OB,H9,lX,zN",
-nm:[function(a){return H.CU(a)&0x3ffffff},"call$1","gtU",2,0,null,42,[]],
-aH:[function(a,b){var z,y,x
-if(a==null)return-1
-z=a.length
-for(y=0;y<z;++y){x=a[y].gkh()
-if(x==null?b==null:x===b)return y}return-1},"call$2","gSP",4,0,null,470,[],42,[]]},
-xd:{
-"^":"YB;m6,Q6,ac,X5,vv,OX,OB,H9,lX,zN",
-C2:function(a,b){return this.m6.call$2(a,b)},
-H5:function(a){return this.Q6.call$1(a)},
-Ef:function(a){return this.ac.call$1(a)},
-t:[function(a,b){if(this.Ef(b)!==!0)return
-return P.YB.prototype.t.call(this,this,b)},"call$1","gIA",2,0,null,42,[]],
-x4:[function(a){if(this.Ef(a)!==!0)return!1
-return P.YB.prototype.x4.call(this,a)},"call$1","gV9",2,0,null,42,[]],
-Rz:[function(a,b){if(this.Ef(b)!==!0)return
-return P.YB.prototype.Rz.call(this,this,b)},"call$1","gRI",2,0,null,42,[]],
-nm:[function(a){return this.H5(a)&0x3ffffff},"call$1","gtU",2,0,null,42,[]],
-aH:[function(a,b){var z,y
-if(a==null)return-1
-z=a.length
-for(y=0;y<z;++y)if(this.C2(a[y].gkh(),b)===!0)return y
-return-1},"call$2","gSP",4,0,null,470,[],42,[]],
-static:{Ex:function(a,b,c,d,e){var z=new P.v6(d)
-return H.VM(new P.xd(a,b,z,0,null,null,null,null,null,0),[d,e])}}},
-v6:{
-"^":"Tp:107;a",
-call$1:[function(a){var z=H.Gq(a,this.a)
-return z},"call$1",null,2,0,null,277,[],"call"],
-$isEH:true},
db:{
"^":"a;kh<,S4@,DG@,zQ@"},
i5:{
@@ -14820,14 +14182,14 @@
y.$builtinTypeInfo=this.$builtinTypeInfo
y.zq=z.H9
return y},
-tg:[function(a,b){return this.Fb.x4(b)},"call$1","gdj",2,0,null,129,[]],
+tg:[function(a,b){return this.Fb.x4(b)},"call$1","gdj",2,0,null,132,[]],
aN:[function(a,b){var z,y,x
z=this.Fb
y=z.H9
x=z.zN
for(;y!=null;){b.call$1(y.gkh())
if(x!==z.zN)throw H.b(P.a4(z))
-y=y.gDG()}},"call$1","gjw",2,0,null,115,[]],
+y=y.gDG()}},"call$1","gjw",2,0,null,117,[]],
$isyN:true},
N6:{
"^":"a;Fb,zN,zq,fD",
@@ -14839,7 +14201,7 @@
return!1}else{this.fD=z.gkh()
this.zq=this.zq.gDG()
return!0}}},"call$0","gqy",0,0,null]},
-Rr:{
+UB:{
"^":"lN;",
gA:function(a){var z=new P.oz(this,this.Zl(),0,null)
z.$builtinTypeInfo=this.$builtinTypeInfo
@@ -14885,9 +14247,9 @@
else{if(this.aH(u,b)>=0)return!1
u.push(b)}this.X5=this.X5+1
this.DM=null
-return!0}},"call$1","ght",2,0,null,129,[]],
+return!0}},"call$1","ght",2,0,null,132,[]],
FV:[function(a,b){var z
-for(z=J.GP(b);z.G();)this.h(0,z.gl())},"call$1","gDY",2,0,null,474,[]],
+for(z=H.VM(new H.a7(b,b.length,0,null),[H.Kp(b,0)]);z.G();)this.h(0,z.lo)},"call$1","gDY",2,0,null,440,[]],
Rz:[function(a,b){var z,y,x
if(typeof b==="string"&&b!=="__proto__")return this.Nv(this.vv,b)
else if(typeof b==="number"&&(b&0x3ffffff)===b)return this.Nv(this.OX,b)
@@ -14899,12 +14261,12 @@
this.X5=this.X5-1
this.DM=null
y.splice(x,1)
-return!0}},"call$1","gRI",2,0,null,6,[]],
+return!0}},"call$1","guH",2,0,null,6,[]],
V1:[function(a){if(this.X5>0){this.DM=null
this.OB=null
this.OX=null
this.vv=null
-this.X5=0}},"call$0","gyP",0,0,null],
+this.X5=0}},"call$0","gRa",0,0,null],
Zl:[function(){var z,y,x,w,v,u,t,s,r,q,p,o
z=this.DM
if(z!=null)return z
@@ -14928,28 +14290,28 @@
a[b]=0
this.X5=this.X5+1
this.DM=null
-return!0},"call$2","gLa",4,0,null,186,[],129,[]],
+return!0},"call$2","gLa",4,0,null,185,[],132,[]],
Nv:[function(a,b){if(a!=null&&a[b]!=null){delete a[b]
this.X5=this.X5-1
this.DM=null
-return!0}else return!1},"call$2","got",4,0,null,186,[],129,[]],
-nm:[function(a){return J.v1(a)&0x3ffffff},"call$1","gtU",2,0,null,129,[]],
+return!0}else return!1},"call$2","got",4,0,null,185,[],132,[]],
+nm:[function(a){return J.v1(a)&0x3ffffff},"call$1","gtU",2,0,null,132,[]],
aH:[function(a,b){var z,y
if(a==null)return-1
z=a.length
for(y=0;y<z;++y)if(J.de(a[y],b))return y
-return-1},"call$2","gSP",4,0,null,470,[],129,[]],
+return-1},"call$2","gSP",4,0,null,436,[],132,[]],
$isyN:true,
-$iscX:true,
-$ascX:null},
+$isQV:true,
+$asQV:null},
YO:{
-"^":"Rr;X5,vv,OX,OB,DM",
-nm:[function(a){return H.CU(a)&0x3ffffff},"call$1","gtU",2,0,null,42,[]],
+"^":"UB;X5,vv,OX,OB,DM",
+nm:[function(a){return H.CU(a)&0x3ffffff},"call$1","gtU",2,0,null,47,[]],
aH:[function(a,b){var z,y,x
if(a==null)return-1
z=a.length
for(y=0;y<z;++y){x=a[y]
-if(x==null?b==null:x===b)return y}return-1},"call$2","gSP",4,0,null,470,[],129,[]]},
+if(x==null?b==null:x===b)return y}return-1},"call$2","gSP",4,0,null,436,[],132,[]]},
oz:{
"^":"a;O2,DM,zi,fD",
gl:function(){return this.fD},
@@ -14993,7 +14355,7 @@
y=this.zN
for(;z!=null;){b.call$1(z.gGc())
if(y!==this.zN)throw H.b(P.a4(this))
-z=z.gDG()}},"call$1","gjw",2,0,null,429,[]],
+z=z.gDG()}},"call$1","gjw",2,0,null,397,[]],
grZ:function(a){var z=this.lX
if(z==null)throw H.b(new P.lj("No elements"))
return z.gGc()},
@@ -15017,9 +14379,9 @@
u=w[v]
if(u==null)w[v]=[this.xf(b)]
else{if(this.aH(u,b)>=0)return!1
-u.push(this.xf(b))}return!0}},"call$1","ght",2,0,null,129,[]],
+u.push(this.xf(b))}return!0}},"call$1","ght",2,0,null,132,[]],
FV:[function(a,b){var z
-for(z=J.GP(b);z.G();)this.h(0,z.gl())},"call$1","gDY",2,0,null,474,[]],
+for(z=J.GP(b);z.G();)this.h(0,z.gl())},"call$1","gDY",2,0,null,440,[]],
Rz:[function(a,b){var z,y,x
if(typeof b==="string"&&b!=="__proto__")return this.Nv(this.vv,b)
else if(typeof b==="number"&&(b&0x3ffffff)===b)return this.Nv(this.OX,b)
@@ -15029,24 +14391,24 @@
x=this.aH(y,b)
if(x<0)return!1
this.Vb(y.splice(x,1)[0])
-return!0}},"call$1","gRI",2,0,null,6,[]],
+return!0}},"call$1","guH",2,0,null,6,[]],
V1:[function(a){if(this.X5>0){this.lX=null
this.H9=null
this.OB=null
this.OX=null
this.vv=null
this.X5=0
-this.zN=this.zN+1&67108863}},"call$0","gyP",0,0,null],
+this.zN=this.zN+1&67108863}},"call$0","gRa",0,0,null],
cA:[function(a,b){if(a[b]!=null)return!1
a[b]=this.xf(b)
-return!0},"call$2","gLa",4,0,null,186,[],129,[]],
+return!0},"call$2","gLa",4,0,null,185,[],132,[]],
Nv:[function(a,b){var z
if(a==null)return!1
z=a[b]
if(z==null)return!1
this.Vb(z)
delete a[b]
-return!0},"call$2","got",4,0,null,186,[],129,[]],
+return!0},"call$2","got",4,0,null,185,[],132,[]],
xf:[function(a){var z,y
z=new P.ef(a,null,null)
if(this.H9==null){this.lX=z
@@ -15055,7 +14417,7 @@
y.sDG(z)
this.lX=z}this.X5=this.X5+1
this.zN=this.zN+1&67108863
-return z},"call$1","gTM",2,0,null,129,[]],
+return z},"call$1","gTM",2,0,null,132,[]],
Vb:[function(a){var z,y
z=a.gzQ()
y=a.gDG()
@@ -15064,16 +14426,16 @@
if(y==null)this.lX=z
else y.szQ(z)
this.X5=this.X5-1
-this.zN=this.zN+1&67108863},"call$1","glZ",2,0,null,473,[]],
-nm:[function(a){return J.v1(a)&0x3ffffff},"call$1","gtU",2,0,null,129,[]],
+this.zN=this.zN+1&67108863},"call$1","glZ",2,0,null,439,[]],
+nm:[function(a){return J.v1(a)&0x3ffffff},"call$1","gtU",2,0,null,132,[]],
aH:[function(a,b){var z,y
if(a==null)return-1
z=a.length
for(y=0;y<z;++y)if(J.de(a[y].gGc(),b))return y
-return-1},"call$2","gSP",4,0,null,470,[],129,[]],
+return-1},"call$2","gSP",4,0,null,436,[],132,[]],
$isyN:true,
-$iscX:true,
-$ascX:null},
+$isQV:true,
+$asQV:null},
ef:{
"^":"a;Gc<,DG@,zQ@"},
zQ:{
@@ -15089,7 +14451,7 @@
Yp:{
"^":"w2Y;G4",
gB:function(a){return J.q8(this.G4)},
-t:[function(a,b){return J.i4(this.G4,b)},"call$1","gIA",2,0,null,47,[]]},
+t:[function(a,b){return J.i4(this.G4,b)},"call$1","gIA",2,0,null,52,[]]},
lN:{
"^":"mW;",
tt:[function(a,b){var z,y,x,w,v
@@ -15099,20 +14461,20 @@
z=H.VM(y,[H.Kp(this,0)])}for(y=this.gA(this),x=0;y.G();x=v){w=y.gl()
v=x+1
if(x>=z.length)return H.e(z,x)
-z[x]=w}return z},function(a){return this.tt(a,!0)},"br","call$1$growable",null,"gRV",0,3,null,336,337,[]],
+z[x]=w}return z},function(a){return this.tt(a,!0)},"br","call$1$growable",null,"gRV",0,3,null,333,334,[]],
bu:[function(a){return H.mx(this,"{","}")},"call$0","gXo",0,0,null],
$isyN:true,
-$iscX:true,
-$ascX:null},
+$isQV:true,
+$asQV:null},
mW:{
"^":"a;",
-ez:[function(a,b){return H.K1(this,b,H.ip(this,"mW",0),null)},"call$1","gIr",2,0,null,115,[]],
-ev:[function(a,b){return H.VM(new H.U5(this,b),[H.ip(this,"mW",0)])},"call$1","gIR",2,0,null,115,[]],
+ez:[function(a,b){return H.K1(this,b,H.ip(this,"mW",0),null)},"call$1","gIr",2,0,null,117,[]],
+ev:[function(a,b){return H.VM(new H.U5(this,b),[H.ip(this,"mW",0)])},"call$1","gIR",2,0,null,117,[]],
tg:[function(a,b){var z
for(z=this.gA(this);z.G();)if(J.de(z.gl(),b))return!0
-return!1},"call$1","gdj",2,0,null,129,[]],
+return!1},"call$1","gdj",2,0,null,132,[]],
aN:[function(a,b){var z
-for(z=this.gA(this);z.G();)b.call$1(z.gl())},"call$1","gjw",2,0,null,115,[]],
+for(z=this.gA(this);z.G();)b.call$1(z.gl())},"call$1","gjw",2,0,null,117,[]],
zV:[function(a,b){var z,y,x
z=this.gA(this)
if(!z.G())return""
@@ -15122,18 +14484,17 @@
else{y.KF(H.d(z.gl()))
for(;z.G();){y.vM=y.vM+b
x=H.d(z.gl())
-y.vM=y.vM+x}}return y.vM},"call$1","gnr",0,2,null,333,334,[]],
+y.vM=y.vM+x}}return y.vM},"call$1","gNU",0,2,null,330,331,[]],
Vr:[function(a,b){var z
for(z=this.gA(this);z.G();)if(b.call$1(z.gl())===!0)return!0
-return!1},"call$1","gG2",2,0,null,115,[]],
-tt:[function(a,b){return P.F(this,b,H.ip(this,"mW",0))},function(a){return this.tt(a,!0)},"br","call$1$growable",null,"gRV",0,3,null,336,337,[]],
+return!1},"call$1","gG2",2,0,null,117,[]],
+tt:[function(a,b){return P.F(this,b,H.ip(this,"mW",0))},function(a){return this.tt(a,!0)},"br","call$1$growable",null,"gRV",0,3,null,333,334,[]],
gB:function(a){var z,y
z=this.gA(this)
for(y=0;z.G();)++y
return y},
gl0:function(a){return!this.gA(this).G()},
gor:function(a){return this.gl0(this)!==!0},
-eR:[function(a,b){return H.ke(this,b,H.ip(this,"mW",0))},"call$1","gZo",2,0,null,292,[]],
grZ:function(a){var z,y
z=this.gA(this)
if(!z.G())throw H.b(new P.lj("No elements"))
@@ -15142,33 +14503,33 @@
return y},
qA:[function(a,b,c){var z,y
for(z=this.gA(this);z.G();){y=z.gl()
-if(b.call$1(y)===!0)return y}throw H.b(new P.lj("No matching element"))},function(a,b){return this.qA(a,b,null)},"XG","call$2$orElse",null,"gyo",2,3,null,77,430,[],475,[]],
+if(b.call$1(y)===!0)return y}throw H.b(new P.lj("No matching element"))},function(a,b){return this.qA(a,b,null)},"XG","call$2$orElse",null,"gyo",2,3,null,82,398,[],441,[]],
Zv:[function(a,b){var z,y,x,w
if(typeof b!=="number"||Math.floor(b)!==b||b<0)throw H.b(P.N(b))
for(z=this.gA(this),y=b;z.G();){x=z.gl()
w=J.x(y)
if(w.n(y,0))return x
-y=w.W(y,1)}throw H.b(P.N(b))},"call$1","goY",2,0,null,47,[]],
+y=w.W(y,1)}throw H.b(P.N(b))},"call$1","goY",2,0,null,52,[]],
bu:[function(a){return P.FO(this)},"call$0","gXo",0,0,null],
-$iscX:true,
-$ascX:null},
+$isQV:true,
+$asQV:null},
ar:{
"^":"a+lD;",
$isList:true,
-$asWO:null,
+$aszM:null,
$isyN:true,
-$iscX:true,
-$ascX:null},
+$isQV:true,
+$asQV:null},
lD:{
"^":"a;",
gA:function(a){return H.VM(new H.a7(a,this.gB(a),0,null),[H.ip(a,"lD",0)])},
-Zv:[function(a,b){return this.t(a,b)},"call$1","goY",2,0,null,47,[]],
+Zv:[function(a,b){return this.t(a,b)},"call$1","goY",2,0,null,52,[]],
aN:[function(a,b){var z,y
z=this.gB(a)
if(typeof z!=="number")return H.s(z)
y=0
for(;y<z;++y){b.call$1(this.t(a,y))
-if(z!==this.gB(a))throw H.b(P.a4(a))}},"call$1","gjw",2,0,null,429,[]],
+if(z!==this.gB(a))throw H.b(P.a4(a))}},"call$1","gjw",2,0,null,397,[]],
gl0:function(a){return J.de(this.gB(a),0)},
gor:function(a){return!this.gl0(a)},
grZ:function(a){if(J.de(this.gB(a),0))throw H.b(new P.lj("No elements"))
@@ -15181,21 +14542,21 @@
if(typeof w!=="number")return H.s(w)
if(!(x<w))break
if(J.de(this.t(a,x),b))return!0
-if(!y.n(z,this.gB(a)))throw H.b(P.a4(a));++x}return!1},"call$1","gdj",2,0,null,129,[]],
+if(!y.n(z,this.gB(a)))throw H.b(P.a4(a));++x}return!1},"call$1","gdj",2,0,null,132,[]],
Vr:[function(a,b){var z,y
z=this.gB(a)
if(typeof z!=="number")return H.s(z)
y=0
for(;y<z;++y){if(b.call$1(this.t(a,y))===!0)return!0
-if(z!==this.gB(a))throw H.b(P.a4(a))}return!1},"call$1","gG2",2,0,null,430,[]],
+if(z!==this.gB(a))throw H.b(P.a4(a))}return!1},"call$1","gG2",2,0,null,398,[]],
zV:[function(a,b){var z
if(J.de(this.gB(a),0))return""
z=P.p9("")
z.We(a,b)
-return z.vM},"call$1","gnr",0,2,null,333,334,[]],
-ev:[function(a,b){return H.VM(new H.U5(a,b),[H.ip(a,"lD",0)])},"call$1","gIR",2,0,null,430,[]],
-ez:[function(a,b){return H.VM(new H.A8(a,b),[null,null])},"call$1","gIr",2,0,null,115,[]],
-eR:[function(a,b){return H.j5(a,b,null,null)},"call$1","gZo",2,0,null,127,[]],
+return z.vM},"call$1","gNU",0,2,null,330,331,[]],
+ev:[function(a,b){return H.VM(new H.U5(a,b),[H.ip(a,"lD",0)])},"call$1","gIR",2,0,null,398,[]],
+ez:[function(a,b){return H.VM(new H.A8(a,b),[null,null])},"call$1","gIr",2,0,null,117,[]],
+eR:[function(a,b){return H.q9(a,b,null,null)},"call$1","gZo",2,0,null,130,[]],
tt:[function(a,b){var z,y,x
if(b){z=H.VM([],[H.ip(a,"lD",0)])
C.Nm.sB(z,this.gB(a))}else{y=this.gB(a)
@@ -15208,15 +14569,15 @@
if(!(x<y))break
y=this.t(a,x)
if(x>=z.length)return H.e(z,x)
-z[x]=y;++x}return z},function(a){return this.tt(a,!0)},"br","call$1$growable",null,"gRV",0,3,null,336,337,[]],
+z[x]=y;++x}return z},function(a){return this.tt(a,!0)},"br","call$1$growable",null,"gRV",0,3,null,333,334,[]],
h:[function(a,b){var z=this.gB(a)
this.sB(a,J.WB(z,1))
-this.u(a,z,b)},"call$1","ght",2,0,null,129,[]],
+this.u(a,z,b)},"call$1","ght",2,0,null,132,[]],
FV:[function(a,b){var z,y,x
-for(z=J.GP(b);z.G();){y=z.gl()
+for(z=H.VM(new H.a7(b,b.length,0,null),[H.Kp(b,0)]);z.G();){y=z.lo
x=this.gB(a)
this.sB(a,J.WB(x,1))
-this.u(a,x,y)}},"call$1","gDY",2,0,null,114,[]],
+this.u(a,x,y)}},"call$1","gDY",2,0,null,116,[]],
Rz:[function(a,b){var z,y
z=0
while(!0){y=this.gB(a)
@@ -15224,15 +14585,15 @@
if(!(z<y))break
if(J.de(this.t(a,z),b)){this.YW(a,z,J.xH(this.gB(a),1),a,z+1)
this.sB(a,J.xH(this.gB(a),1))
-return!0}++z}return!1},"call$1","gRI",2,0,null,129,[]],
-V1:[function(a){this.sB(a,0)},"call$0","gyP",0,0,null],
-GT:[function(a,b){H.ZE(a,0,J.xH(this.gB(a),1),b)},"call$1","gH7",0,2,null,77,133,[]],
+return!0}++z}return!1},"call$1","guH",2,0,null,132,[]],
+V1:[function(a){this.sB(a,0)},"call$0","gRa",0,0,null],
+GT:[function(a,b){H.ZE(a,0,J.xH(this.gB(a),1),b)},"call$1","gH7",0,2,null,82,122,[]],
pZ:[function(a,b,c){var z=J.Wx(b)
if(z.C(b,0)||z.D(b,this.gB(a)))throw H.b(P.TE(b,0,this.gB(a)))
z=J.Wx(c)
-if(z.C(c,b)||z.D(c,this.gB(a)))throw H.b(P.TE(c,b,this.gB(a)))},"call$2","gbI",4,0,null,120,[],121,[]],
+if(z.C(c,b)||z.D(c,this.gB(a)))throw H.b(P.TE(c,b,this.gB(a)))},"call$2","gm0",4,0,null,123,[],124,[]],
D6:[function(a,b,c){var z,y,x,w
-if(c==null)c=this.gB(a)
+c=this.gB(a)
this.pZ(a,b,c)
z=J.xH(c,b)
y=H.VM([],[H.ip(a,"lD",0)])
@@ -15241,9 +14602,9 @@
x=0
for(;x<z;++x){w=this.t(a,b+x)
if(x>=y.length)return H.e(y,x)
-y[x]=w}return y},function(a,b){return this.D6(a,b,null)},"Jk","call$2",null,"gli",2,2,null,77,120,[],121,[]],
+y[x]=w}return y},function(a,b){return this.D6(a,b,null)},"Jk","call$2",null,"gli",2,2,null,82,123,[],124,[]],
Mu:[function(a,b,c){this.pZ(a,b,c)
-return H.j5(a,b,c,null)},"call$2","gYf",4,0,null,120,[],121,[]],
+return H.q9(a,b,c,null)},"call$2","gYf",4,0,null,123,[],124,[]],
YW:[function(a,b,c,d,e){var z,y,x,w
if(b>=0){z=this.gB(a)
if(typeof z!=="number")return H.s(z)
@@ -15260,20 +14621,21 @@
if(typeof x!=="number")return H.s(x)
if(e+y>x)throw H.b(new P.lj("Not enough elements"))
if(e<b)for(w=y-1;w>=0;--w)this.u(a,b+w,z.t(d,e+w))
-else for(w=0;w<y;++w)this.u(a,b+w,z.t(d,e+w))},"call$4","gaQ",6,2,null,335,120,[],121,[],114,[],122,[]],
+else for(w=0;w<y;++w)this.u(a,b+w,z.t(d,e+w))},"call$4","gam",6,2,null,332,123,[],124,[],116,[],125,[]],
XU:[function(a,b,c){var z,y
z=this.gB(a)
if(typeof z!=="number")return H.s(z)
if(c>=z)return-1
+if(c<0)c=0
y=c
while(!0){z=this.gB(a)
if(typeof z!=="number")return H.s(z)
if(!(y<z))break
-if(J.de(this.t(a,y),b))return y;++y}return-1},function(a,b){return this.XU(a,b,0)},"u8","call$2",null,"gIz",2,2,null,335,129,[],80,[]],
+if(J.de(this.t(a,y),b))return y;++y}return-1},function(a,b){return this.XU(a,b,0)},"u8","call$2",null,"gIz",2,2,null,332,132,[],85,[]],
Pk:[function(a,b,c){var z,y
c=J.xH(this.gB(a),1)
for(z=c;y=J.Wx(z),y.F(z,0);z=y.W(z,1))if(J.de(this.t(a,z),b))return z
-return-1},function(a,b){return this.Pk(a,b,null)},"cn","call$2",null,"gph",2,2,null,77,129,[],80,[]],
+return-1},function(a,b){return this.Pk(a,b,null)},"cn","call$2",null,"gcb",2,2,null,82,132,[],85,[]],
xe:[function(a,b,c){var z
if(b>=0){z=this.gB(a)
if(typeof z!=="number")return H.s(z)
@@ -15282,11 +14644,11 @@
if(b===this.gB(a)){this.h(a,c)
return}this.sB(a,J.WB(this.gB(a),1))
this.YW(a,b+1,this.gB(a),a,b)
-this.u(a,b,c)},"call$2","gQG",4,0,null,47,[],129,[]],
+this.u(a,b,c)},"call$2","gQG",4,0,null,52,[],132,[]],
KI:[function(a,b){var z=this.t(a,b)
this.YW(a,b,J.xH(this.gB(a),1),a,b+1)
this.sB(a,J.xH(this.gB(a),1))
-return z},"call$1","gNM",2,0,null,47,[]],
+return z},"call$1","gNM",2,0,null,52,[]],
bu:[function(a){var z
if($.xb().tg(0,a))return"[...]"
z=P.p9("")
@@ -15295,19 +14657,19 @@
z.We(a,", ")
z.KF("]")}finally{$.xb().Rz(0,a)}return z.gvM()},"call$0","gXo",0,0,null],
$isList:true,
-$asWO:null,
+$aszM:null,
$isyN:true,
-$iscX:true,
-$ascX:null},
+$isQV:true,
+$asQV:null},
ZQ:{
-"^":"Tp:346;a,b",
+"^":"Tp:348;a,b",
call$2:[function(a,b){var z=this.a
if(!z.a)this.b.KF(", ")
z.a=!1
z=this.b
z.KF(a)
z.KF(": ")
-z.KF(b)},"call$2",null,4,0,null,402,[],277,[],"call"],
+z.KF(b)},"call$2",null,4,0,null,442,[],272,[],"call"],
$isEH:true},
Sw:{
"^":"mW;v5,av,eZ,qT",
@@ -15319,16 +14681,17 @@
for(y=this.av;y!==this.eZ;y=(y+1&this.v5.length-1)>>>0){x=this.v5
if(y<0||y>=x.length)return H.e(x,y)
b.call$1(x[y])
-if(z!==this.qT)H.vh(P.a4(this))}},"call$1","gjw",2,0,null,429,[]],
+if(z!==this.qT)H.vh(P.a4(this))}},"call$1","gjw",2,0,null,397,[]],
gl0:function(a){return this.av===this.eZ},
-gB:function(a){return J.mQ(J.xH(this.eZ,this.av),this.v5.length-1)},
-grZ:function(a){var z,y
+gB:function(a){return(this.eZ-this.av&this.v5.length-1)>>>0},
+grZ:function(a){var z,y,x
z=this.av
y=this.eZ
if(z===y)throw H.b(new P.lj("No elements"))
z=this.v5
-y=J.mQ(J.xH(y,1),this.v5.length-1)
-if(y>=z.length)return H.e(z,y)
+x=z.length
+y=(y-1&x-1)>>>0
+if(y<0||y>=x)return H.e(z,y)
return z[y]},
Zv:[function(a,b){var z,y,x
z=J.Wx(b)
@@ -15339,81 +14702,83 @@
x=z.length
y=(y+b&x-1)>>>0
if(y<0||y>=x)return H.e(z,y)
-return z[y]},"call$1","goY",2,0,null,47,[]],
+return z[y]},"call$1","goY",2,0,null,52,[]],
tt:[function(a,b){var z,y
if(b){z=H.VM([],[H.Kp(this,0)])
C.Nm.sB(z,this.gB(this))}else{y=Array(this.gB(this))
y.fixed$length=init
-z=H.VM(y,[H.Kp(this,0)])}this.e4(z)
-return z},function(a){return this.tt(a,!0)},"br","call$1$growable",null,"gRV",0,3,null,336,337,[]],
-h:[function(a,b){this.NZ(0,b)},"call$1","ght",2,0,null,129,[]],
+z=H.VM(y,[H.Kp(this,0)])}this.wR(z)
+return z},function(a){return this.tt(a,!0)},"br","call$1$growable",null,"gRV",0,3,null,333,334,[]],
+h:[function(a,b){this.NZ(0,b)},"call$1","ght",2,0,null,132,[]],
FV:[function(a,b){var z,y,x,w,v,u,t,s,r
-z=J.x(b)
-if(typeof b==="object"&&b!==null&&(b.constructor===Array||!!z.$isList)){y=z.gB(b)
-x=this.gB(this)
-if(typeof y!=="number")return H.s(y)
-z=x+y
+z=b.length
+y=this.gB(this)
+x=y+z
w=this.v5
v=w.length
-if(z>=v){u=P.ua(z)
+if(x>=v){u=P.ua(x)
if(typeof u!=="number")return H.s(u)
w=Array(u)
w.fixed$length=init
t=H.VM(w,[H.Kp(this,0)])
-this.eZ=this.e4(t)
+this.eZ=this.wR(t)
this.v5=t
this.av=0
-H.Og(t,x,z,b,0)
-this.eZ=J.WB(this.eZ,y)}else{z=this.eZ
-if(typeof z!=="number")return H.s(z)
-s=v-z
-if(y<s){H.Og(w,z,z+y,b,0)
-this.eZ=J.WB(this.eZ,y)}else{r=y-s
-H.Og(w,z,z+s,b,0)
-z=this.v5
-H.Og(z,0,r,b,s)
-this.eZ=r}}this.qT=this.qT+1}else for(z=z.gA(b);z.G();)this.NZ(0,z.gl())},"call$1","gDY",2,0,null,476,[]],
+H.qG(t,y,x,b,0)
+this.eZ=this.eZ+z}else{x=this.eZ
+s=v-x
+if(z<s){H.qG(w,x,x+z,b,0)
+this.eZ=this.eZ+z}else{r=z-s
+H.qG(w,x,x+s,b,0)
+x=this.v5
+H.qG(x,0,r,b,s)
+this.eZ=r}}this.qT=this.qT+1},"call$1","gDY",2,0,null,443,[]],
Rz:[function(a,b){var z,y
for(z=this.av;z!==this.eZ;z=(z+1&this.v5.length-1)>>>0){y=this.v5
if(z<0||z>=y.length)return H.e(y,z)
if(J.de(y[z],b)){this.bB(z)
this.qT=this.qT+1
-return!0}}return!1},"call$1","gRI",2,0,null,6,[]],
+return!0}}return!1},"call$1","guH",2,0,null,6,[]],
V1:[function(a){var z,y,x,w,v
z=this.av
y=this.eZ
if(z!==y){for(x=this.v5,w=x.length,v=w-1;z!==y;z=(z+1&v)>>>0){if(z<0||z>=w)return H.e(x,z)
x[z]=null}this.eZ=0
this.av=0
-this.qT=this.qT+1}},"call$0","gyP",0,0,null],
+this.qT=this.qT+1}},"call$0","gRa",0,0,null],
bu:[function(a){return H.mx(this,"{","}")},"call$0","gXo",0,0,null],
-NZ:[function(a,b){var z,y
+NZ:[function(a,b){var z,y,x
z=this.v5
y=this.eZ
-if(y>>>0!==y||y>=z.length)return H.e(z,y)
+x=z.length
+if(y<0||y>=x)return H.e(z,y)
z[y]=b
-y=(y+1&this.v5.length-1)>>>0
-this.eZ=y
-if(this.av===y)this.VW()
-this.qT=this.qT+1},"call$1","gXk",2,0,null,129,[]],
+x=(y+1&x-1)>>>0
+this.eZ=x
+if(this.av===x)this.VW()
+this.qT=this.qT+1},"call$1","gXk",2,0,null,132,[]],
bB:[function(a){var z,y,x,w,v,u,t,s
-z=this.v5.length-1
-if((a-this.av&z)>>>0<J.mQ(J.xH(this.eZ,a),z)){for(y=this.av,x=this.v5,w=x.length,v=a;v!==y;v=u){u=(v-1&z)>>>0
-if(u<0||u>=w)return H.e(x,u)
-t=x[u]
-if(v<0||v>=w)return H.e(x,v)
-x[v]=t}if(y>=w)return H.e(x,y)
-x[y]=null
-this.av=(y+1&z)>>>0
-return(a+1&z)>>>0}else{y=J.mQ(J.xH(this.eZ,1),z)
-this.eZ=y
-for(x=this.v5,w=x.length,v=a;v!==y;v=s){s=(v+1&z)>>>0
-if(s<0||s>=w)return H.e(x,s)
-t=x[s]
-if(v<0||v>=w)return H.e(x,v)
-x[v]=t}if(y>=w)return H.e(x,y)
-x[y]=null
-return a}},"call$1","gzv",2,0,null,477,[]],
+z=this.v5
+y=z.length
+x=y-1
+w=this.av
+v=this.eZ
+if((a-w&x)>>>0<(v-a&x)>>>0){for(u=a;u!==w;u=t){t=(u-1&x)>>>0
+if(t<0||t>=y)return H.e(z,t)
+v=z[t]
+if(u<0||u>=y)return H.e(z,u)
+z[u]=v}if(w>=y)return H.e(z,w)
+z[w]=null
+this.av=(w+1&x)>>>0
+return(a+1&x)>>>0}else{w=(v-1&x)>>>0
+this.eZ=w
+for(u=a;u!==w;u=s){s=(u+1&x)>>>0
+if(s<0||s>=y)return H.e(z,s)
+v=z[s]
+if(u<0||u>=y)return H.e(z,u)
+z[u]=v}if(w<0||w>=y)return H.e(z,w)
+z[w]=null
+return a}},"call$1","gzv",2,0,null,444,[]],
VW:[function(){var z,y,x,w
z=Array(this.v5.length*2)
z.fixed$length=init
@@ -15421,44 +14786,38 @@
z=this.v5
x=this.av
w=z.length-x
-H.Og(y,0,w,z,x)
+H.qG(y,0,w,z,x)
z=this.av
x=this.v5
-H.Og(y,w,w+z,x,0)
+H.qG(y,w,w+z,x,0)
this.av=0
this.eZ=this.v5.length
this.v5=y},"call$0","gJm",0,0,null],
-e4:[function(a){var z,y,x,w
+wR:[function(a){var z,y,x,w,v
z=this.av
y=this.eZ
-if(typeof y!=="number")return H.s(y)
-if(z<=y){x=y-z
-z=this.v5
-y=this.av
-H.Og(a,0,x,z,y)
-return x}else{y=this.v5
-w=y.length-z
-H.Og(a,0,w,y,z)
+x=this.v5
+if(z<=y){w=y-z
+H.qG(a,0,w,x,z)
+return w}else{v=x.length-z
+H.qG(a,0,v,x,z)
z=this.eZ
-if(typeof z!=="number")return H.s(z)
y=this.v5
-H.Og(a,w,w+z,y,0)
-return J.WB(this.eZ,w)}},"call$1","gLR",2,0,null,74,[]],
-Eo:function(a,b){var z
-if(typeof 8!=="number")return H.s(8)
-z=Array(8)
+H.qG(a,v,v+z,y,0)
+return this.eZ+v}},"call$1","gLR",2,0,null,79,[]],
+Eo:function(a,b){var z=Array(8)
z.fixed$length=init
this.v5=H.VM(z,[b])},
$isyN:true,
-$iscX:true,
-$ascX:null,
+$isQV:true,
+$asQV:null,
static:{"^":"Mo",NZ:function(a,b){var z=H.VM(new P.Sw(null,0,0,0),[b])
z.Eo(a,b)
return z},ua:[function(a){var z
if(typeof a!=="number")return a.O()
a=(a<<2>>>0)-1
for(;!0;a=z){z=(a&a-1)>>>0
-if(z===0)return a}},"call$1","bD",2,0,null,192,[]]}},
+if(z===0)return a}},"call$1","bD",2,0,null,191,[]]}},
o0:{
"^":"a;Lz,pP,qT,Dc,fD",
gl:function(){return this.fD},
@@ -15480,7 +14839,7 @@
"^":"qv;P*,G3,Bb,T8",
r6:function(a,b){return this.P.call$1(b)},
$asqv:function(a,b){return[a]}},
-vX:{
+GZ:{
"^":"a;",
vh:[function(a){var z,y,x,w,v,u,t,s
z=this.aY
@@ -15516,10 +14875,10 @@
y.T8=null
y.Bb=null
this.bb=this.bb+1
-return v},"call$1","gST",2,0,null,42,[]],
+return v},"call$1","gST",2,0,null,47,[]],
Xu:[function(a){var z,y
for(z=a;y=z.T8,y!=null;z=y){z.T8=y.Bb
-y.Bb=z}return z},"call$1","gOv",2,0,null,264,[]],
+y.Bb=z}return z},"call$1","gug",2,0,null,260,[]],
bB:[function(a){var z,y,x
if(this.aY==null)return
if(!J.de(this.vh(a),0))return
@@ -15531,7 +14890,7 @@
else{y=this.Xu(y)
this.aY=y
y.T8=x}this.qT=this.qT+1
-return z},"call$1","gzv",2,0,null,42,[]],
+return z},"call$1","gzv",2,0,null,47,[]],
fS:[function(a,b){var z,y
this.P6=this.P6+1
this.qT=this.qT+1
@@ -15542,27 +14901,27 @@
a.T8=y.T8
y.T8=null}else{a.T8=y
a.Bb=y.Bb
-y.Bb=null}this.aY=a},"call$2","gSx",4,0,null,264,[],478,[]]},
+y.Bb=null}this.aY=a},"call$2","gSx",4,0,null,260,[],445,[]]},
Ba:{
-"^":"vX;Cw,ac,aY,iW,P6,qT,bb",
+"^":"GZ;Cw,ac,aY,iW,P6,qT,bb",
wS:function(a,b){return this.Cw.call$2(a,b)},
Ef:function(a){return this.ac.call$1(a)},
-yV:[function(a,b){return this.wS(a,b)},"call$2","gcd",4,0,null,479,[],480,[]],
+yV:[function(a,b){return this.wS(a,b)},"call$2","gNA",4,0,null,446,[],447,[]],
t:[function(a,b){if(b==null)throw H.b(new P.AT(b))
if(this.Ef(b)!==!0)return
if(this.aY!=null)if(J.de(this.vh(b),0))return this.aY.P
-return},"call$1","gIA",2,0,null,42,[]],
+return},"call$1","gIA",2,0,null,47,[]],
Rz:[function(a,b){var z
if(this.Ef(b)!==!0)return
z=this.bB(b)
if(z!=null)return z.P
-return},"call$1","gRI",2,0,null,42,[]],
+return},"call$1","guH",2,0,null,47,[]],
u:[function(a,b,c){var z
if(b==null)throw H.b(new P.AT(b))
z=this.vh(b)
if(J.de(z,0)){this.aY.P=c
-return}this.fS(H.VM(new P.jp(c,b,null,null),[null,null]),z)},"call$2","gj3",4,0,null,42,[],23,[]],
-FV:[function(a,b){J.kH(b,new P.bF(this))},"call$1","gDY",2,0,null,104,[]],
+return}this.fS(H.VM(new P.jp(c,b,null,null),[null,null]),z)},"call$2","gj3",4,0,null,47,[],28,[]],
+FV:[function(a,b){H.bQ(b,new P.bF(this))},"call$1","gDY",2,0,null,109,[]],
gl0:function(a){return this.aY==null},
gor:function(a){return this.aY!=null},
aN:[function(a,b){var z,y,x
@@ -15571,20 +14930,20 @@
y.Qf(this,[P.qv,z])
for(;y.G();){x=y.gl()
z=J.RE(x)
-b.call$2(z.gG3(x),z.gP(x))}},"call$1","gjw",2,0,null,115,[]],
+b.call$2(z.gG3(x),z.gP(x))}},"call$1","gjw",2,0,null,117,[]],
gB:function(a){return this.P6},
V1:[function(a){this.aY=null
this.P6=0
-this.qT=this.qT+1},"call$0","gyP",0,0,null],
-x4:[function(a){return this.Ef(a)===!0&&J.de(this.vh(a),0)},"call$1","gV9",2,0,null,42,[]],
-di:[function(a){return new P.LD(this,a,this.bb).call$1(this.aY)},"call$1","gmc",2,0,null,23,[]],
+this.qT=this.qT+1},"call$0","gRa",0,0,null],
+x4:[function(a){return this.Ef(a)===!0&&J.de(this.vh(a),0)},"call$1","gV9",2,0,null,47,[]],
+di:[function(a){return new P.BW(this,a,this.bb).call$1(this.aY)},"call$1","gmc",2,0,null,28,[]],
gvc:function(a){return H.VM(new P.OG(this),[H.Kp(this,0)])},
gUQ:function(a){var z=new P.uM(this)
z.$builtinTypeInfo=this.$builtinTypeInfo
return z},
bu:[function(a){return P.vW(this)},"call$0","gXo",0,0,null],
$isBa:true,
-$asvX:function(a,b){return[a]},
+$asGZ:function(a,b){return[a]},
$asZ0:null,
$isZ0:true,
static:{GV:function(a,b,c,d){var z,y
@@ -15592,47 +14951,47 @@
y=new P.An(c)
return H.VM(new P.Ba(z,y,null,H.VM(new P.qv(null,null,null),[c]),0,0,0),[c,d])}}},
An:{
-"^":"Tp:107;a",
-call$1:[function(a){var z=H.Gq(a,this.a)
-return z},"call$1",null,2,0,null,277,[],"call"],
+"^":"Tp:112;a",
+call$1:[function(a){var z=H.XY(a,this.a)
+return z},"call$1",null,2,0,null,272,[],"call"],
$isEH:true},
bF:{
"^":"Tp;a",
-call$2:[function(a,b){this.a.u(0,a,b)},"call$2",null,4,0,null,42,[],23,[],"call"],
+call$2:[function(a,b){this.a.u(0,a,b)},"call$2",null,4,0,null,47,[],28,[],"call"],
$isEH:true,
$signature:function(){return H.IG(function(a,b){return{func:"ri",args:[a,b]}},this.a,"Ba")}},
-LD:{
-"^":"Tp:481;a,b,c",
+BW:{
+"^":"Tp:448;a,b,c",
call$1:[function(a){var z,y,x,w
for(z=this.c,y=this.a,x=this.b;a!=null;){if(J.de(a.P,x))return!0
if(z!==y.bb)throw H.b(P.a4(y))
w=a.T8
if(w!=null&&this.call$1(w)===!0)return!0
-a=a.Bb}return!1},"call$1",null,2,0,null,264,[],"call"],
+a=a.Bb}return!1},"call$1",null,2,0,null,260,[],"call"],
$isEH:true},
S6B:{
"^":"a;",
gl:function(){var z=this.ya
if(z==null)return
return this.Wb(z)},
-WV:[function(a){var z
-for(z=this.Ln;a!=null;){z.push(a)
-a=a.Bb}},"call$1","gBl",2,0,null,264,[]],
+p0:[function(a){var z
+for(z=this.Jt;a!=null;){z.push(a)
+a=a.Bb}},"call$1","gBl",2,0,null,260,[]],
G:[function(){var z,y,x
z=this.Dn
if(this.qT!==z.qT)throw H.b(P.a4(z))
-y=this.Ln
+y=this.Jt
if(y.length===0){this.ya=null
return!1}if(z.bb!==this.bb&&this.ya!=null){x=this.ya
C.Nm.sB(y,0)
-if(x==null)this.WV(z.aY)
+if(x==null)this.p0(z.aY)
else{z.vh(x.G3)
-this.WV(z.aY.T8)}}if(0>=y.length)return H.e(y,0)
+this.p0(z.aY.T8)}}if(0>=y.length)return H.e(y,0)
z=y.pop()
this.ya=z
-this.WV(z.T8)
+this.p0(z.T8)
return!0},"call$0","gqy",0,0,null],
-Qf:function(a,b){this.WV(a.aY)}},
+Qf:function(a,b){this.p0(a.aY)}},
OG:{
"^":"mW;Dn",
gB:function(a){return this.Dn.P6},
@@ -15655,39 +15014,36 @@
y.Qf(z,H.Kp(this,1))
return y},
$asmW:function(a,b){return[b]},
-$ascX:function(a,b){return[b]},
+$asQV:function(a,b){return[b]},
$isyN:true},
DN:{
-"^":"S6B;Dn,Ln,qT,bb,ya",
-Wb:[function(a){return a.G3},"call$1","gBL",2,0,null,264,[]]},
+"^":"S6B;Dn,Jt,qT,bb,ya",
+Wb:[function(a){return a.G3},"call$1","gBL",2,0,null,260,[]]},
ZM:{
-"^":"S6B;Dn,Ln,qT,bb,ya",
-Wb:[function(a){return a.P},"call$1","gBL",2,0,null,264,[]],
+"^":"S6B;Dn,Jt,qT,bb,ya",
+Wb:[function(a){return a.P},"call$1","gBL",2,0,null,260,[]],
$asS6B:function(a,b){return[b]}},
HW:{
-"^":"S6B;Dn,Ln,qT,bb,ya",
-Wb:[function(a){return a},"call$1","gBL",2,0,null,264,[]],
+"^":"S6B;Dn,Jt,qT,bb,ya",
+Wb:[function(a){return a},"call$1","gBL",2,0,null,260,[]],
$asS6B:function(a){return[[P.qv,a]]}}}],["dart.convert","dart:convert",,P,{
"^":"",
VQ:[function(a,b){var z=new P.JC()
-return z.call$2(null,new P.f1(z).call$1(a))},"call$2","os",4,0,null,193,[],194,[]],
+return z.call$2(null,new P.f1(z).call$1(a))},"call$2","os",4,0,null,192,[],193,[]],
BS:[function(a,b){var z,y,x,w
x=a
if(typeof x!=="string")throw H.b(new P.AT(a))
z=null
try{z=JSON.parse(a)}catch(w){x=H.Ru(w)
y=x
-throw H.b(P.cD(String(y)))}return P.VQ(z,b)},"call$2","H44",4,0,null,27,[],194,[]],
-tp:[function(a){return a.Lt()},"call$1","BC",2,0,195,6,[]],
-Md:[function(a){a.i(0,64512)
-return!1},"call$1","bO",2,0,null,13,[]],
-ZZ:[function(a,b){return(65536+(a.i(0,1023)<<10>>>0)|b&1023)>>>0},"call$2","hz",4,0,null,198,[],199,[]],
+throw H.b(P.cD(String(y)))}return P.VQ(z,b)},"call$2","H4",4,0,null,32,[],193,[]],
+tp:[function(a){return a.Lt()},"call$1","BC",2,0,194,6,[]],
JC:{
-"^":"Tp:346;",
-call$2:[function(a,b){return b},"call$2",null,4,0,null,42,[],23,[],"call"],
+"^":"Tp:348;",
+call$2:[function(a,b){return b},"call$2",null,4,0,null,47,[],28,[],"call"],
$isEH:true},
f1:{
-"^":"Tp:107;a",
+"^":"Tp:112;a",
call$1:[function(a){var z,y,x,w,v,u,t
if(a==null||typeof a!="object")return a
if(Object.getPrototypeOf(a)===Array.prototype){z=a
@@ -15697,96 +15053,48 @@
for(y=this.a,x=0;x<w.length;++x){u=w[x]
v.u(0,u,y.call$2(u,this.call$1(a[u])))}t=a.__proto__
if(typeof t!=="undefined"&&t!==Object.prototype)v.u(0,"__proto__",y.call$2("__proto__",this.call$1(t)))
-return v},"call$1",null,2,0,null,18,[],"call"],
+return v},"call$1",null,2,0,null,19,[],"call"],
$isEH:true},
Uk:{
"^":"a;"},
-wI:{
+zF:{
"^":"a;"},
Zi:{
"^":"Uk;",
$asUk:function(){return[J.O,[J.Q,J.im]]}},
Ud:{
-"^":"Ge;Pc,FN",
+"^":"Ge;Ct,FN",
bu:[function(a){if(this.FN!=null)return"Converting object to an encodable object failed."
else return"Converting object did not return an encodable object."},"call$0","gXo",0,0,null],
-static:{ox:function(a,b){return new P.Ud(a,b)}}},
+static:{NM:function(a,b){return new P.Ud(a,b)}}},
K8:{
-"^":"Ud;Pc,FN",
+"^":"Ud;Ct,FN",
bu:[function(a){return"Cyclic error in JSON stringify"},"call$0","gXo",0,0,null],
static:{TP:function(a){return new P.K8(a,null)}}},
by:{
"^":"Uk;N5,iY",
-pW:[function(a,b){return P.BS(a,this.gHe().N5)},function(a){return this.pW(a,null)},"kV","call$2$reviver",null,"gzL",2,3,null,77,27,[],194,[]],
-PN:[function(a,b){return P.Vg(a,this.gZE().Xi)},function(a){return this.PN(a,null)},"KP","call$2$toEncodable",null,"gV0",2,3,null,77,23,[],196,[]],
+c8:[function(a,b){return P.BS(a,this.gHe().N5)},function(a){return this.c8(a,null)},"kV","call$2$reviver",null,"gzL",2,3,null,82,32,[],193,[]],
+Co:[function(a,b){return P.Ks(a,this.gZE().Xi)},function(a){return this.Co(a,null)},"KP","call$2$toEncodable",null,"gV0",2,3,null,82,28,[],195,[]],
gZE:function(){return C.Ap},
gHe:function(){return C.A3},
$asUk:function(){return[P.a,J.O]}},
pD:{
-"^":"wI;Xi",
-$aswI:function(){return[P.a,J.O]}},
+"^":"zF;Xi",
+$aszF:function(){return[P.a,J.O]}},
Cf:{
-"^":"wI;N5",
-$aswI:function(){return[J.O,P.a]}},
+"^":"zF;N5",
+$aszF:function(){return[J.O,P.a]}},
Sh:{
-"^":"a;WE,Mw,JN",
-Tt:function(a){return this.WE.call$1(a)},
-WD:[function(a){var z=this.JN
-if(z.tg(0,a))throw H.b(P.TP(a))
-z.h(0,a)},"call$1","gUW",2,0,null,6,[]],
-rl:[function(a){var z,y,x,w,v
-if(!this.IS(a)){x=a
-w=this.JN
-if(w.tg(0,x))H.vh(P.TP(x))
-w.h(0,x)
-try{z=this.Tt(a)
-if(!this.IS(z)){x=P.ox(a,null)
-throw H.b(x)}w.Rz(0,a)}catch(v){x=H.Ru(v)
-y=x
-throw H.b(P.ox(a,y))}}},"call$1","gO5",2,0,null,6,[]],
-IS:[function(a){var z,y,x,w
-z={}
-if(typeof a==="number"){if(!C.CD.gx8(a))return!1
-this.Mw.KF(C.CD.bu(a))
-return!0}else if(a===!0){this.Mw.KF("true")
-return!0}else if(a===!1){this.Mw.KF("false")
-return!0}else if(a==null){this.Mw.KF("null")
-return!0}else if(typeof a==="string"){z=this.Mw
-z.KF("\"")
-P.NY(z,a)
-z.KF("\"")
-return!0}else{y=J.x(a)
-if(typeof a==="object"&&a!==null&&(a.constructor===Array||!!y.$isList)){this.WD(a)
-z=this.Mw
-z.KF("[")
-if(J.z8(y.gB(a),0)){this.rl(y.t(a,0))
-x=1
-while(!0){w=y.gB(a)
-if(typeof w!=="number")return H.s(w)
-if(!(x<w))break
-z.vM=z.vM+","
-this.rl(y.t(a,x));++x}}z.KF("]")
-this.JN.Rz(0,a)
-return!0}else if(typeof a==="object"&&a!==null&&!!y.$isZ0){this.WD(a)
-w=this.Mw
-w.KF("{")
-z.a=!0
-y.aN(a,new P.tF(z,this))
-w.KF("}")
-this.JN.Rz(0,a)
-return!0}else return!1}},"call$1","gjQ",2,0,null,6,[]],
-static:{"^":"P3,Ib,IE,Yz,ij,fg,SW,KQz,MU,ql,NXu,CE,QVv",Vg:[function(a,b){var z
-b=P.BC()
-z=P.p9("")
-new P.Sh(b,z,P.yv(null)).rl(a)
-return z.vM},"call$2","ab",4,0,null,6,[],196,[]],NY:[function(a,b){var z,y,x,w,v,u,t
-z=J.U6(b)
-y=z.gB(b)
+"^":"a;iY,Vy,qi",
+Wt:function(a){return this.iY.call$1(a)},
+aK:[function(a){var z,y,x,w,v,u,t
+z=J.U6(a)
+y=z.gB(a)
x=H.VM([],[J.im])
if(typeof y!=="number")return H.s(y)
w=!1
v=0
-for(;v<y;++v){u=z.j(b,v)
+for(;v<y;++v){u=z.j(a,v)
if(u<32){x.push(92)
switch(u){case 8:x.push(98)
break
@@ -15809,81 +15117,156 @@
x.push(t<10?48+t:87+t)
break}w=!0}else if(u===34||u===92){x.push(92)
x.push(u)
-w=!0}else x.push(u)}a.KF(w?P.HM(x):b)},"call$2","qW",4,0,null,197,[],86,[]]}},
+w=!0}else x.push(u)}z=w?P.HM(x):a
+this.Vy.KF(z)},"call$1","gOx",2,0,null,91,[]],
+WD:[function(a){var z=this.qi
+if(z.tg(0,a))throw H.b(P.TP(a))
+z.h(0,a)},"call$1","gUW",2,0,null,6,[]],
+rl:[function(a){var z,y,x,w,v
+if(!this.IS(a)){x=a
+w=this.qi
+if(w.tg(0,x))H.vh(P.TP(x))
+w.h(0,x)
+try{z=this.Wt(a)
+if(!this.IS(z)){x=P.NM(a,null)
+throw H.b(x)}w.Rz(0,a)}catch(v){x=H.Ru(v)
+y=x
+throw H.b(P.NM(a,y))}}},"call$1","gO5",2,0,null,6,[]],
+IS:[function(a){var z,y,x,w
+z={}
+if(typeof a==="number"){if(!C.CD.gx8(a))return!1
+this.Vy.KF(C.CD.bu(a))
+return!0}else if(a===!0){this.Vy.KF("true")
+return!0}else if(a===!1){this.Vy.KF("false")
+return!0}else if(a==null){this.Vy.KF("null")
+return!0}else if(typeof a==="string"){z=this.Vy
+z.KF("\"")
+this.aK(a)
+z.KF("\"")
+return!0}else{y=J.x(a)
+if(typeof a==="object"&&a!==null&&(a.constructor===Array||!!y.$isList)){this.WD(a)
+z=this.Vy
+z.KF("[")
+if(J.z8(y.gB(a),0)){this.rl(y.t(a,0))
+x=1
+while(!0){w=y.gB(a)
+if(typeof w!=="number")return H.s(w)
+if(!(x<w))break
+z.vM=z.vM+","
+this.rl(y.t(a,x));++x}}z.KF("]")
+this.qi.Rz(0,a)
+return!0}else if(typeof a==="object"&&a!==null&&!!y.$isZ0){this.WD(a)
+w=this.Vy
+w.KF("{")
+z.a=!0
+y.aN(a,new P.tF(z,this))
+w.KF("}")
+this.qi.Rz(0,a)
+return!0}else return!1}},"call$1","gjQ",2,0,null,6,[]],
+static:{"^":"P3,Ib,FC,Yz,ij,fg,SW,eJ,MU,ql,NXu,PBv,QVv",Ks:[function(a,b){var z
+b=P.BC()
+z=P.p9("")
+new P.Sh(b,z,P.yv(null)).rl(a)
+return z.vM},"call$2","nB",4,0,null,6,[],195,[]]}},
tF:{
-"^":"Tp:482;a,b",
+"^":"Tp:449;a,b",
call$2:[function(a,b){var z,y,x
z=this.a
y=this.b
-if(!z.a){x=y.Mw
-x.KF(",\"")}else{x=y.Mw
-x.KF("\"")}P.NY(x,a)
+if(!z.a){x=y.Vy
+x.KF(",\"")}else{x=y.Vy
+x.KF("\"")}y.aK(a)
x.KF("\":")
y.rl(b)
-z.a=!1},"call$2",null,4,0,null,42,[],23,[],"call"],
+z.a=!1},"call$2",null,4,0,null,47,[],28,[],"call"],
$isEH:true},
z0:{
"^":"Zi;lH",
goc:function(a){return"utf-8"},
gZE:function(){return new P.E3()}},
E3:{
-"^":"wI;",
+"^":"zF;",
WJ:[function(a){var z,y,x
-z=a.gB(a)
-y=H.VM(Array(z.U(0,3)),[J.im])
+z=J.U6(a)
+y=J.vX(z.gB(a),3)
+if(typeof y!=="number")return H.s(y)
+y=H.VM(Array(y),[J.im])
x=new P.Rw(0,0,y)
-x.fJ(a,0,z)
-x.Lb(a.j(0,z.W(0,1)),0)
-return C.Nm.D6(y,0,x.ZP)},"call$1","gmC",2,0,null,26,[]],
-$aswI:function(){return[J.O,[J.Q,J.im]]}},
+if(x.fJ(a,0,z.gB(a))!==z.gB(a))x.Lb(z.j(a,J.xH(z.gB(a),1)),0)
+return C.Nm.D6(y,0,x.ZP)},"call$1","gj5",2,0,null,31,[]],
+$aszF:function(){return[J.O,[J.Q,J.im]]}},
Rw:{
-"^":"a;vn,ZP,EN",
-Lb:[function(a,b){var z,y,x,w
-if((b&64512)===56320)P.ZZ(a,b)
-else{z=this.EN
+"^":"a;WF,ZP,EN",
+Lb:[function(a,b){var z,y,x,w,v
+z=this.EN
y=this.ZP
+if((b&64512)===56320){x=65536+((a&1023)<<10>>>0)|b&1023
+w=y+1
+this.ZP=w
+v=z.length
+if(y>=v)return H.e(z,y)
+z[y]=(240|x>>>18)>>>0
+y=w+1
+this.ZP=y
+if(w>=v)return H.e(z,w)
+z[w]=128|x>>>12&63
+w=y+1
+this.ZP=w
+if(y>=v)return H.e(z,y)
+z[y]=128|x>>>6&63
+this.ZP=w+1
+if(w>=v)return H.e(z,w)
+z[w]=128|x&63
+return!0}else{w=y+1
+this.ZP=w
+v=z.length
+if(y>=v)return H.e(z,y)
+z[y]=224|a>>>12
+y=w+1
+this.ZP=y
+if(w>=v)return H.e(z,w)
+z[w]=128|a>>>6&63
this.ZP=y+1
-x=C.jn.k(224,a.m(0,12))
-w=z.length
-if(y>=w)return H.e(z,y)
-z[y]=x
-x=this.ZP
-this.ZP=x+1
-y=a.m(0,6).i(0,63)
-if(x>=w)return H.e(z,x)
-z[x]=128|y
-y=this.ZP
-this.ZP=y+1
-x=a.i(0,63)
-if(y>=w)return H.e(z,y)
-z[y]=128|x
-return!1}},"call$2","gkL",4,0,null,483,[],484,[]],
-fJ:[function(a,b,c){var z,y,x,w,v,u
-P.Md(a.j(0,c.W(0,1)))
-for(z=this.EN,y=z.length,x=b;C.jn.C(x,c);++x){w=a.j(0,x)
-w.E(0,127)
-P.Md(w)
-w.E(0,2047)
-v=this.ZP
-if(v+2>=y)break
-this.ZP=v+1
-u=C.jn.k(224,w.m(0,12))
-if(v>=y)return H.e(z,v)
-z[v]=u
-u=this.ZP
+if(y>=v)return H.e(z,y)
+z[y]=128|a&63
+return!1}},"call$2","gkL",4,0,null,450,[],451,[]],
+fJ:[function(a,b,c){var z,y,x,w,v,u,t,s
+if(b!==c&&(J.lE(a,J.xH(c,1))&64512)===55296)c=J.xH(c,1)
+if(typeof c!=="number")return H.s(c)
+z=this.EN
+y=z.length
+x=J.rY(a)
+w=b
+for(;w<c;++w){v=x.j(a,w)
+if(v<=127){u=this.ZP
+if(u>=y)break
this.ZP=u+1
-v=w.m(0,6).i(0,63)
+z[u]=v}else if((v&64512)===55296){if(this.ZP+3>=y)break
+t=w+1
+if(this.Lb(v,x.j(a,t)))w=t}else if(v<=2047){u=this.ZP
+s=u+1
+if(s>=y)break
+this.ZP=s
if(u>=y)return H.e(z,u)
-z[u]=128|v
-v=this.ZP
-this.ZP=v+1
-u=w.i(0,63)
-if(v>=y)return H.e(z,v)
-z[v]=128|u}return x},"call$3","gkH",6,0,null,339,[],120,[],121,[]],
-static:{"^":"Jf4"}}}],["dart.core","dart:core",,P,{
+z[u]=192|v>>>6
+this.ZP=s+1
+z[s]=128|v&63}else{u=this.ZP
+if(u+2>=y)break
+s=u+1
+this.ZP=s
+if(u>=y)return H.e(z,u)
+z[u]=224|v>>>12
+u=s+1
+this.ZP=u
+if(s>=y)return H.e(z,s)
+z[s]=128|v>>>6&63
+this.ZP=u+1
+if(u>=y)return H.e(z,u)
+z[u]=128|v&63}}return w},"call$3","gkH",6,0,null,336,[],123,[],124,[]],
+static:{"^":"Ni"}}}],["dart.core","dart:core",,P,{
"^":"",
-Te:[function(a){return},"call$1","PM",2,0,null,44,[]],
-Wc:[function(a,b){return J.oE(a,b)},"call$2","n4",4,0,200,128,[],188,[]],
+Te:[function(a){return},"call$1","Ex",2,0,null,49,[]],
+Wc:[function(a,b){return J.oE(a,b)},"call$2","n4",4,0,196,131,[],187,[]],
hl:[function(a){var z,y,x,w,v,u
if(typeof a==="number"||typeof a==="boolean"||null==a)return J.AG(a)
if(typeof a==="string"){z=new P.Rn("")
@@ -15909,44 +15292,38 @@
z.vM=y
return y}return"Instance of '"+H.lh(a)+"'"},"call$1","Zx",2,0,null,6,[]],
FM:function(a){return new P.HG(a)},
-ad:[function(a,b){return a==null?b==null:a===b},"call$2","N3",4,0,202,128,[],188,[]],
-xv:[function(a){return H.CU(a)},"call$1","J2",2,0,203,6,[]],
-QA:[function(a,b,c){return H.BU(a,c,b)},function(a){return P.QA(a,null,null)},null,function(a,b){return P.QA(a,b,null)},null,"call$3$onError$radix","call$1","call$2$onError","ya",2,5,204,77,77,27,[],164,[],28,[]],
+ad:[function(a,b){return a==null?b==null:a===b},"call$2","N3",4,0,199,131,[],187,[]],
+NS:[function(a){return H.CU(a)},"call$1","cE",2,0,200,6,[]],
+QA:[function(a,b,c){return H.BU(a,c,b)},function(a){return P.QA(a,null,null)},null,function(a,b){return P.QA(a,b,null)},null,"call$3$onError$radix","call$1","call$2$onError","ya",2,5,201,82,82,32,[],33,[],163,[]],
O8:function(a,b,c){var z,y,x
z=J.Qi(a,c)
if(a!==0&&b!=null)for(y=z.length,x=0;x<y;++x)z[x]=b
return z},
-F:function(a,b,c){var z,y,x,w,v,u,t
+F:function(a,b,c){var z,y
z=H.VM([],[c])
for(y=J.GP(a);y.G();)z.push(y.gl())
if(b)return z
-x=z.length
-y=Array(x)
-y.fixed$length=init
-w=H.VM(y,[c])
-for(y=z.length,v=w.length,u=0;u<x;++u){if(u>=y)return H.e(z,u)
-t=z[u]
-if(u>=v)return H.e(w,u)
-w[u]=t}return w},
+z.fixed$length=init
+return z},
JS:[function(a){var z,y
z=H.d(a)
y=$.oK
if(y==null)H.qw(z)
-else y.call$1(z)},"call$1","Qki",2,0,null,6,[]],
+else y.call$1(z)},"call$1","Pl",2,0,null,6,[]],
HM:function(a){return H.eT(a)},
fc:function(a){return P.HM(P.O8(1,a,J.im))},
HB:{
-"^":"Tp:346;a",
-call$2:[function(a,b){this.a.u(0,a.gfN(a),b)},"call$2",null,4,0,null,134,[],23,[],"call"],
+"^":"Tp:348;a",
+call$2:[function(a,b){this.a.u(0,a.gfN(a),b)},"call$2",null,4,0,null,136,[],28,[],"call"],
$isEH:true},
CL:{
-"^":"Tp:436;a",
+"^":"Tp:404;a",
call$2:[function(a,b){var z=this.a
if(z.b>0)z.a.KF(", ")
z.a.KF(J.GL(a))
z.a.KF(": ")
z.a.KF(P.hl(b))
-z.b=z.b+1},"call$2",null,4,0,null,42,[],23,[],"call"],
+z.b=z.b+1},"call$2",null,4,0,null,47,[],28,[],"call"],
$isEH:true},
p4:{
"^":"a;OF",
@@ -15955,7 +15332,7 @@
"^":"a;",
bu:[function(a){return this?"true":"false"},"call$0","gXo",0,0,null],
$isbool:true},
-Rz:{
+Tx:{
"^":"a;"},
iP:{
"^":"a;y3<,aL",
@@ -15963,29 +15340,26 @@
if(b==null)return!1
z=J.x(b)
if(typeof b!=="object"||b===null||!z.$isiP)return!1
-return this.y3===b.y3&&this.aL===b.aL},"call$1","gUJ",2,0,null,104,[]],
-iM:[function(a,b){return C.CD.iM(this.y3,b.gy3())},"call$1","gYc",2,0,null,104,[]],
+return this.y3===b.y3&&this.aL===b.aL},"call$1","gUJ",2,0,null,109,[]],
+iM:[function(a,b){return C.CD.iM(this.y3,b.gy3())},"call$1","gYc",2,0,null,109,[]],
giO:function(a){return this.y3},
-bu:[function(a){var z,y,x,w,v,u,t,s,r,q
-z=new P.B5()
-y=this.aL
-x=y?H.o2(this).getUTCFullYear()+0:H.o2(this).getFullYear()+0
-w=new P.Hn().call$1(x)
-v=z.call$1(y?H.o2(this).getUTCMonth()+1:H.o2(this).getMonth()+1)
-u=z.call$1(y?H.o2(this).getUTCDate()+0:H.o2(this).getDate()+0)
-t=z.call$1(y?H.o2(this).getUTCHours()+0:H.o2(this).getHours()+0)
-s=z.call$1(y?H.o2(this).getUTCMinutes()+0:H.o2(this).getMinutes()+0)
-r=z.call$1(y?H.o2(this).getUTCSeconds()+0:H.o2(this).getSeconds()+0)
-z=y?H.o2(this).getUTCMilliseconds()+0:H.o2(this).getMilliseconds()+0
-q=new P.Zl().call$1(z)
-if(y)return H.d(w)+"-"+H.d(v)+"-"+H.d(u)+" "+H.d(t)+":"+H.d(s)+":"+H.d(r)+"."+H.d(q)+"Z"
-else return H.d(w)+"-"+H.d(v)+"-"+H.d(u)+" "+H.d(t)+":"+H.d(s)+":"+H.d(r)+"."+H.d(q)},"call$0","gXo",0,0,null],
-h:[function(a,b){return P.Wu(this.y3+b.gVs(),this.aL)},"call$1","ght",2,0,null,167,[]],
+bu:[function(a){var z,y,x,w,v,u,t,s
+z=this.aL
+y=P.Gq(z?H.o2(this).getUTCFullYear()+0:H.o2(this).getFullYear()+0)
+x=P.h0(z?H.o2(this).getUTCMonth()+1:H.o2(this).getMonth()+1)
+w=P.h0(z?H.o2(this).getUTCDate()+0:H.o2(this).getDate()+0)
+v=P.h0(z?H.o2(this).getUTCHours()+0:H.o2(this).getHours()+0)
+u=P.h0(z?H.o2(this).getUTCMinutes()+0:H.o2(this).getMinutes()+0)
+t=P.h0(z?H.o2(this).getUTCSeconds()+0:H.o2(this).getSeconds()+0)
+s=P.Vx(z?H.o2(this).getUTCMilliseconds()+0:H.o2(this).getMilliseconds()+0)
+if(z)return y+"-"+x+"-"+w+" "+v+":"+u+":"+t+"."+s+"Z"
+else return y+"-"+x+"-"+w+" "+v+":"+u+":"+t+"."+s},"call$0","gXo",0,0,null],
+h:[function(a,b){return P.Wu(this.y3+b.gVs(),this.aL)},"call$1","ght",2,0,null,166,[]],
EK:function(){H.o2(this)},
RM:function(a,b){if(Math.abs(a)>8640000000000000)throw H.b(new P.AT(a))},
$isiP:true,
-static:{"^":"aV,bI,dfk,Kw,h2,mo,EQe,NXt,tp1,Xs,k3,cR,Oq,fH,Ne,Nr,bmS,lX,hZ,PW,dM,lme",Gl:[function(a){var z,y,x,w,v,u,t,s,r,q,p,o,n
-z=new H.VR(H.v4("^([+-]?\\d?\\d\\d\\d\\d)-?(\\d\\d)-?(\\d\\d)(?:[ T](\\d\\d)(?::?(\\d\\d)(?::?(\\d\\d)(.\\d{1,6})?)?)?( ?[zZ]| ?\\+00(?::?00)?)?)?$",!1,!0,!1),null,null).ej(a)
+static:{"^":"aV,bI,Hq,Kw,oA,mo,EQe,DU,tp1,Gi,fo,cR,Sx,KeL,Ne,Nr,bm,FI,hZ,PW,dM,lme",Gl:[function(a){var z,y,x,w,v,u,t,s,r,q,p,o,n,m,l,k,j
+z=new H.VR(H.v4("^([+-]?\\d{4,5})-?(\\d\\d)-?(\\d\\d)(?:[ T](\\d\\d)(?::?(\\d\\d)(?::?(\\d\\d)(.\\d{1,6})?)?)?( ?[zZ]| ?([-+])(\\d\\d)(?::?(\\d\\d))?)?)?$",!1,!0,!1),null,null).ej(a)
if(z!=null){y=new P.MF()
x=z.QK
if(1>=x.length)return H.e(x,1)
@@ -16001,68 +15375,65 @@
if(6>=x.length)return H.e(x,6)
r=y.call$1(x[6])
if(7>=x.length)return H.e(x,7)
-q=J.LL(J.p0(new P.Rq().call$1(x[7]),1000))
+q=J.LL(J.vX(new P.Rq().call$1(x[7]),1000))
if(q===1000){p=!0
q=999}else p=!1
-if(8>=x.length)return H.e(x,8)
-o=x[8]!=null
-n=H.zW(w,v,u,t,s,r,q,o)
-return P.Wu(p?n+1:n,o)}else throw H.b(P.cD(a))},"call$1","zZ",2,0,null,201,[]],Wu:function(a,b){var z=new P.iP(a,b)
+o=x.length
+if(8>=o)return H.e(x,8)
+if(x[8]!=null){if(9>=o)return H.e(x,9)
+o=x[9]
+if(o!=null){n=J.de(o,"-")?-1:1
+if(10>=x.length)return H.e(x,10)
+m=H.BU(x[10],null,null)
+if(11>=x.length)return H.e(x,11)
+l=y.call$1(x[11])
+if(typeof m!=="number")return H.s(m)
+l=J.WB(l,60*m)
+if(typeof l!=="number")return H.s(l)
+s=J.xH(s,n*l)}k=!0}else k=!1
+j=H.zW(w,v,u,t,s,r,q,k)
+return P.Wu(p?j+1:j,k)}else throw H.b(P.cD(a))},"call$1","le",2,0,null,197,[]],Wu:function(a,b){var z=new P.iP(a,b)
z.RM(a,b)
-return z},Gi:function(){var z=new P.iP(Date.now(),!1)
-z.EK()
-return z}}},
-MF:{
-"^":"Tp:486;",
-call$1:[function(a){if(a==null)return 0
-return H.BU(a,null,null)},"call$1",null,2,0,null,485,[],"call"],
-$isEH:true},
-Rq:{
-"^":"Tp:487;",
-call$1:[function(a){if(a==null)return 0
-return H.IH(a,null)},"call$1",null,2,0,null,485,[],"call"],
-$isEH:true},
-Hn:{
-"^":"Tp:444;",
-call$1:[function(a){var z,y
+return z},Gq:[function(a){var z,y
z=Math.abs(a)
y=a<0?"-":""
if(z>=1000)return""+a
if(z>=100)return y+"0"+H.d(z)
if(z>=10)return y+"00"+H.d(z)
-return y+"000"+H.d(z)},"call$1",null,2,0,null,292,[],"call"],
-$isEH:true},
-Zl:{
-"^":"Tp:444;",
-call$1:[function(a){if(a>=100)return""+a
+return y+"000"+H.d(z)},"call$1","Cp",2,0,null,198,[]],Vx:[function(a){if(a>=100)return""+a
if(a>=10)return"0"+a
-return"00"+a},"call$1",null,2,0,null,292,[],"call"],
+return"00"+a},"call$1","Dv",2,0,null,198,[]],h0:[function(a){if(a>=10)return""+a
+return"0"+a},"call$1","wI",2,0,null,198,[]]}},
+MF:{
+"^":"Tp:453;",
+call$1:[function(a){if(a==null)return 0
+return H.BU(a,null,null)},"call$1",null,2,0,null,452,[],"call"],
$isEH:true},
-B5:{
-"^":"Tp:444;",
-call$1:[function(a){if(a>=10)return""+a
-return"0"+a},"call$1",null,2,0,null,292,[],"call"],
+Rq:{
+"^":"Tp:454;",
+call$1:[function(a){if(a==null)return 0
+return H.IH(a,null)},"call$1",null,2,0,null,452,[],"call"],
$isEH:true},
a6:{
"^":"a;Fq<",
-g:[function(a,b){return P.k5(0,0,this.Fq+b.gFq(),0,0,0)},"call$1","gF1n",2,0,null,104,[]],
-W:[function(a,b){return P.k5(0,0,this.Fq-b.gFq(),0,0,0)},"call$1","gTG",2,0,null,104,[]],
+g:[function(a,b){return P.k5(0,0,this.Fq+b.gFq(),0,0,0)},"call$1","gF1n",2,0,null,109,[]],
+W:[function(a,b){return P.k5(0,0,this.Fq-b.gFq(),0,0,0)},"call$1","gTG",2,0,null,109,[]],
U:[function(a,b){if(typeof b!=="number")return H.s(b)
-return P.k5(0,0,C.CD.yu(C.CD.UD(this.Fq*b)),0,0,0)},"call$1","gEH",2,0,null,488,[]],
-Z:[function(a,b){if(b===0)throw H.b(P.zl())
-return P.k5(0,0,C.jn.Z(this.Fq,b),0,0,0)},"call$1","guP",2,0,null,489,[]],
-C:[function(a,b){return this.Fq<b.gFq()},"call$1","gix",2,0,null,104,[]],
-D:[function(a,b){return this.Fq>b.gFq()},"call$1","gh1",2,0,null,104,[]],
-E:[function(a,b){return this.Fq<=b.gFq()},"call$1","gf5",2,0,null,104,[]],
-F:[function(a,b){return this.Fq>=b.gFq()},"call$1","gNH",2,0,null,104,[]],
+return P.k5(0,0,C.CD.yu(C.CD.UD(this.Fq*b)),0,0,0)},"call$1","gEH",2,0,null,455,[]],
+Z:[function(a,b){if(b===0)throw H.b(P.ts())
+return P.k5(0,0,C.jn.Z(this.Fq,b),0,0,0)},"call$1","guP",2,0,null,456,[]],
+C:[function(a,b){return this.Fq<b.gFq()},"call$1","gix",2,0,null,109,[]],
+D:[function(a,b){return this.Fq>b.gFq()},"call$1","gh1",2,0,null,109,[]],
+E:[function(a,b){return this.Fq<=b.gFq()},"call$1","gER",2,0,null,109,[]],
+F:[function(a,b){return this.Fq>=b.gFq()},"call$1","gNH",2,0,null,109,[]],
gVs:function(){return C.jn.cU(this.Fq,1000)},
n:[function(a,b){var z
if(b==null)return!1
z=J.x(b)
if(typeof b!=="object"||b===null||!z.$isa6)return!1
-return this.Fq===b.Fq},"call$1","gUJ",2,0,null,104,[]],
+return this.Fq===b.Fq},"call$1","gUJ",2,0,null,109,[]],
giO:function(a){return this.Fq&0x1FFFFFFF},
-iM:[function(a,b){return C.jn.iM(this.Fq,b.gFq())},"call$1","gYc",2,0,null,104,[]],
+iM:[function(a,b){return C.jn.iM(this.Fq,b.gFq())},"call$1","gYc",2,0,null,109,[]],
bu:[function(a){var z,y,x,w,v
z=new P.DW()
y=this.Fq
@@ -16072,20 +15443,20 @@
v=new P.P7().call$1(C.jn.JV(y,1000000))
return""+C.jn.cU(y,3600000000)+":"+H.d(x)+":"+H.d(w)+"."+H.d(v)},"call$0","gXo",0,0,null],
$isa6:true,
-static:{"^":"Kl,S4d,dk,uU,RD,b2,q9,ll,Do,f4,kTB,IJZ,iI,Vk,Nw,yn",k5:function(a,b,c,d,e,f){return new P.a6(a*86400000000+b*3600000000+e*60000000+f*1000000+d*1000+c)}}},
+static:{"^":"Kl,S4d,pk,LoB,RD,b2,jS,ll,Do,f4,kTB,IJZ,iI,Vk,fm,yW",k5:function(a,b,c,d,e,f){return new P.a6(a*86400000000+b*3600000000+e*60000000+f*1000000+d*1000+c)}}},
P7:{
-"^":"Tp:444;",
+"^":"Tp:413;",
call$1:[function(a){if(a>=100000)return""+a
if(a>=10000)return"0"+a
if(a>=1000)return"00"+a
if(a>=100)return"000"+a
if(a>=10)return"0000"+a
-return"00000"+a},"call$1",null,2,0,null,292,[],"call"],
+return"00000"+a},"call$1",null,2,0,null,198,[],"call"],
$isEH:true},
DW:{
-"^":"Tp:444;",
+"^":"Tp:413;",
call$1:[function(a){if(a>=10)return""+a
-return"0"+a},"call$1",null,2,0,null,292,[],"call"],
+return"0"+a},"call$1",null,2,0,null,198,[],"call"],
$isEH:true},
Ge:{
"^":"a;",
@@ -16104,11 +15475,11 @@
"^":"AT;G1",
bu:[function(a){return"RangeError: "+H.d(this.G1)},"call$0","gXo",0,0,null],
static:{C3:function(a){return new P.bJ(a)},N:function(a){return new P.bJ("value "+H.d(a))},TE:function(a,b,c){return new P.bJ("value "+H.d(a)+" not in range "+H.d(b)+".."+H.d(c))}}},
-Np:{
+yd:{
"^":"Ge;",
-static:{hS:function(){return new P.Np()}}},
+static:{hS:function(){return new P.yd()}}},
mp:{
-"^":"Ge;uF,UP,mP,SA,FZ",
+"^":"Ge;uF,UP,mP,SA,mZ",
bu:[function(a){var z,y,x,w,v,u,t
z={}
z.a=P.p9("")
@@ -16144,6 +15515,11 @@
if(z==null)return"Concurrent modification during iteration."
return"Concurrent modification during iteration: "+H.d(P.hl(z))+"."},"call$0","gXo",0,0,null],
static:{a4:function(a){return new P.UV(a)}}},
+kF:{
+"^":"a;",
+bu:[function(a){return"Out of Memory"},"call$0","gXo",0,0,null],
+gI4:function(){return},
+$isGe:true},
VS:{
"^":"a;",
bu:[function(a){return"Stack Overflow"},"call$0","gXo",0,0,null],
@@ -16165,15 +15541,15 @@
eV:{
"^":"a;",
bu:[function(a){return"IntegerDivisionByZeroException"},"call$0","gXo",0,0,null],
-static:{zl:function(){return new P.eV()}}},
+static:{ts:function(){return new P.eV()}}},
kM:{
"^":"a;oc>",
-bu:[function(a){return"Expando:"+this.oc},"call$0","gXo",0,0,null],
+bu:[function(a){return"Expando:"+H.d(this.oc)},"call$0","gXo",0,0,null],
t:[function(a,b){var z=H.of(b,"expando$values")
return z==null?null:H.of(z,this.Qz())},"call$1","gIA",2,0,null,6,[]],
u:[function(a,b,c){var z=H.of(b,"expando$values")
if(z==null){z=new P.a()
-H.aw(b,"expando$values",z)}H.aw(z,this.Qz(),c)},"call$2","gj3",4,0,null,6,[],23,[]],
+H.aw(b,"expando$values",z)}H.aw(z,this.Qz(),c)},"call$2","gj3",4,0,null,6,[],28,[]],
Qz:[function(){var z,y
z=H.of(this,"expando$key")
if(z==null){y=$.Ss
@@ -16184,10 +15560,10 @@
EH:{
"^":"a;",
$isEH:true},
-cX:{
+QV:{
"^":"a;",
-$iscX:true,
-$ascX:null},
+$isQV:true,
+$asQV:null},
AC:{
"^":"a;"},
Z0:{
@@ -16198,10 +15574,10 @@
bu:[function(a){return"null"},"call$0","gXo",0,0,null]},
a:{
"^":";",
-n:[function(a,b){return this===b},"call$1","gUJ",2,0,null,104,[]],
+n:[function(a,b){return this===b},"call$1","gUJ",2,0,null,109,[]],
giO:function(a){return H.eQ(this)},
bu:[function(a){return H.a5(this)},"call$0","gXo",0,0,null],
-T:[function(a,b){throw H.b(P.lr(this,b.gWa(),b.gnd(),b.gVm(),null))},"call$1","gxK",2,0,null,331,[]],
+T:[function(a,b){throw H.b(P.lr(this,b.gWa(),b.gnd(),b.gVm(),null))},"call$1","gxK",2,0,null,329,[]],
gbx:function(a){return new H.cu(H.dJ(this),null)},
$isa:true},
Od:{
@@ -16235,7 +15611,7 @@
gl0:function(a){return this.vM.length===0},
gor:function(a){return this.vM.length!==0},
KF:[function(a){var z=typeof a==="string"?a:H.d(a)
-this.vM=this.vM+z},"call$1","gMG",2,0,null,93,[]],
+this.vM=this.vM+z},"call$1","gMG",2,0,null,98,[]],
We:[function(a,b){var z,y
z=J.GP(a)
if(!z.G())return
@@ -16246,8 +15622,8 @@
for(;z.G();){this.vM=this.vM+b
y=z.gl()
y=typeof y==="string"?y:H.d(y)
-this.vM=this.vM+y}}},"call$2","gS9",2,2,null,333,474,[],334,[]],
-V1:[function(a){this.vM=""},"call$0","gyP",0,0,null],
+this.vM=this.vM+y}}},"call$2","gCA",2,2,null,330,440,[],331,[]],
+V1:[function(a){this.vM=""},"call$0","gRa",0,0,null],
bu:[function(a){return this.vM},"call$0","gXo",0,0,null],
PD:function(a){if(typeof a==="string")this.vM=a
else this.KF(a)},
@@ -16261,40 +15637,34 @@
"^":"a;",
$isuq:true},
iD:{
-"^":"a;NN,HC,r0,Fi,ku,tP,Ka,hO,yW",
-gWu:function(){if(J.de(this.gJf(this),""))return""
+"^":"a;NN,HC,r0,Fi,ku,tP,Ka,YG,yW",
+gWu:function(){if(this.gJf(this)==="")return""
var z=P.p9("")
this.tb(z)
return z.vM},
-gJf:function(a){var z,y
-z=this.NN
-if(z!=null&&J.co(z,"[")){y=J.U6(z)
-return y.Nj(z,1,J.xH(y.gB(z),1))}return z},
-gtp:function(a){var z,y
+gJf:function(a){var z
+if(C.xB.nC(this.NN,"[")){z=this.NN
+return C.xB.Nj(z,1,z.length-1)}return this.NN},
+gtp:function(a){var z
if(J.de(this.HC,0)){z=this.Fi
-y=J.x(z)
-if(y.n(z,"http"))return 80
-if(y.n(z,"https"))return 443}return this.HC},
+if(z==="http")return 80
+if(z==="https")return 443}return this.HC},
Ja:function(a,b){return this.tP.call$1(b)},
x6:[function(a,b){var z,y
z=a==null
if(z&&!0)return""
z=!z
if(z);y=z?P.Xc(a):C.jN.ez(b,new P.Kd()).zV(0,"/")
-if(!J.de(this.gJf(this),"")||J.de(this.Fi,"file")){z=J.U6(y)
-z=z.gor(y)&&!z.nC(y,"/")}else z=!1
-if(z)return"/"+H.d(y)
-return y},"call$2","gbQ",4,0,null,265,[],490,[]],
-Ky:[function(a,b){var z=J.x(a)
-if(z.n(a,""))return"/"+H.d(b)
-return z.Nj(a,0,J.WB(z.cn(a,"/"),1))+H.d(b)},"call$2","gAj",4,0,null,491,[],492,[]],
-uo:[function(a){var z=J.U6(a)
-if(J.z8(z.gB(a),0)&&z.j(a,0)===58)return!0
-return z.u8(a,"/.")!==-1},"call$1","gaO",2,0,null,265,[]],
+if((this.gJf(this)!==""||this.Fi==="file")&&C.xB.gor(y)&&!C.xB.nC(y,"/"))return"/"+y
+return y},"call$2","gbQ",4,0,null,261,[],457,[]],
+Ky:[function(a,b){if(a==="")return"/"+H.d(b)
+return C.xB.Nj(a,0,J.U6(a).cn(a,"/")+1)+H.d(b)},"call$2","gAj",4,0,null,458,[],459,[]],
+uo:[function(a){if(a.length>0&&J.lE(a,0)===58)return!0
+return J.UU(a,"/.")!==-1},"call$1","gaO",2,0,null,261,[]],
SK:[function(a){var z,y,x,w,v
if(!this.uo(a))return a
z=[]
-for(y=J.uH(a,"/"),y=H.VM(new H.a7(y,y.length,0,null),[H.Kp(y,0)]),x=!1;y.G();){w=y.lo
+for(y=a.split("/"),y=H.VM(new H.a7(y,y.length,0,null),[H.Kp(y,0)]),x=!1;y.G();){w=y.lo
if(J.de(w,"..")){v=z.length
if(v!==0)if(v===1){if(0>=v)return H.e(z,0)
v=!J.de(z[0],"")}else v=!0
@@ -16303,94 +15673,123 @@
z.pop()}x=!0}else if("."===w)x=!0
else{z.push(w)
x=!1}}if(x)z.push("")
-return C.Nm.zV(z,"/")},"call$1","ghK",2,0,null,265,[]],
+return C.Nm.zV(z,"/")},"call$1","ghK",2,0,null,261,[]],
tb:[function(a){var z=this.ku
if(""!==z){a.KF(z)
-a.KF("@")}z=this.NN
-a.KF(z==null?"null":z)
+a.KF("@")}a.KF(this.NN)
if(!J.de(this.HC,0)){a.KF(":")
-a.KF(J.AG(this.HC))}},"call$1","gyL",2,0,null,493,[]],
+a.KF(J.AG(this.HC))}},"call$1","gyL",2,0,null,460,[]],
bu:[function(a){var z,y
z=P.p9("")
y=this.Fi
if(""!==y){z.KF(y)
-z.KF(":")}if(!J.de(this.gJf(this),"")||J.de(y,"file")){z.KF("//")
+z.KF(":")}if(this.gJf(this)!==""||y==="file"){z.KF("//")
this.tb(z)}z.KF(this.r0)
y=this.tP
if(""!==y){z.KF("?")
z.KF(y)}y=this.Ka
if(""!==y){z.KF("#")
z.KF(y)}return z.vM},"call$0","gXo",0,0,null],
-n:[function(a,b){var z
+n:[function(a,b){var z,y
if(b==null)return!1
z=J.RE(b)
if(typeof b!=="object"||b===null||!z.$isiD)return!1
-return J.de(this.Fi,b.Fi)&&J.de(this.ku,b.ku)&&J.de(this.gJf(this),z.gJf(b))&&J.de(this.gtp(this),z.gtp(b))&&J.de(this.r0,b.r0)&&J.de(this.tP,b.tP)&&J.de(this.Ka,b.Ka)},"call$1","gUJ",2,0,null,104,[]],
+if(this.Fi===b.Fi)if(this.ku===b.ku)if(this.gJf(this)===z.gJf(b))if(J.de(this.gtp(this),z.gtp(b))){z=this.r0
+y=b.r0
+z=(z==null?y==null:z===y)&&this.tP===b.tP&&this.Ka===b.Ka}else z=!1
+else z=!1
+else z=!1
+else z=!1
+return z},"call$1","gUJ",2,0,null,109,[]],
giO:function(a){var z=new P.XZ()
return z.call$2(this.Fi,z.call$2(this.ku,z.call$2(this.gJf(this),z.call$2(this.gtp(this),z.call$2(this.r0,z.call$2(this.tP,z.call$2(this.Ka,1)))))))},
-n3:function(a,b,c,d,e,f,g,h,i){var z=J.x(h)
-if(z.n(h,"http")&&J.de(e,80))this.HC=0
-else if(z.n(h,"https")&&J.de(e,443))this.HC=0
+n3:function(a,b,c,d,e,f,g,h,i){if(h==="http"&&J.de(e,80))this.HC=0
+else if(h==="https"&&J.de(e,443))this.HC=0
else this.HC=e
this.r0=this.x6(c,d)},
$isiD:true,
-static:{"^":"Um,B4,Bx,iR,OO,My,nR,jJY,d2,n2,q7,ux,vI,SF,fd,IL,Q5,zk,yt,fC,Ft,eq,qf,ML,y3,Pk,R1,qs,lL,I9,t2,H5,wb,eK,ws,Sp,aJ,Qd,Ai,ne",r6:function(a){var z,y,x,w,v,u,t,s
-z=a.QK
-if(1>=z.length)return H.e(z,1)
-y=z[1]
-y=P.iy(y!=null?y:"")
-x=z.length
-if(2>=x)return H.e(z,2)
-w=z[2]
-w=w!=null?w:""
-if(3>=x)return H.e(z,3)
-v=z[3]
-if(4>=x)return H.e(z,4)
-v=P.K6(v,z[4])
-if(5>=x)return H.e(z,5)
-x=P.n7(z[5])
-u=z.length
-if(6>=u)return H.e(z,6)
-t=z[6]
-t=t!=null?t:""
-if(7>=u)return H.e(z,7)
-s=z[7]
-s=s!=null?s:""
-if(8>=u)return H.e(z,8)
-z=z[8]
-z=z!=null?z:""
-u=P.iy(y)
-u=new P.iD(P.L7(v),null,null,u,w,P.LE(s,null),P.UJ(z),null,null)
-u.n3(z,v,t,null,x,s,null,y,w)
-return u},R6:function(a,b,c,d,e,f,g,h,i){var z=P.iy(h)
+static:{"^":"y2,q7,tv,ux,vI,SF,fd,IL,dH,zk,yt,fC,O5,eq,qf,ML,j3,r5,R1,qs,lL,WT,t2,H5,wb,eK,ws,Sp,aJ,JA7,dN,SQU,ne",hK:[function(a1){var z,y,x,w,v,u,t,s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0
+x=new P.hP()
+w=new P.Uo(a1)
+v=J.U6(a1)
+u=v.gB(a1)
+if(J.de(u,0))return P.R6("","",null,null,0,null,null,null,"")
+if(v.j(a1,0)!==47){if(typeof u!=="number")return H.s(u)
+t=0
+for(;s=0,t<u;t=r){r=t+1
+q=v.j(a1,t)
+if(q<128){p=q>>>4
+if(p>=8)return H.e(C.mK,p)
+p=(C.mK[p]&C.jn.W4(1,q&15))!==0}else p=!1
+if(!p){if(q===58){s=r
+t=s}else{t=r-1
+s=0}break}}}else{t=0
+s=0}if(s===t){p=s+1
+if(typeof u!=="number")return H.s(u)
+p=p<u&&v.j(a1,s)===47&&v.j(a1,p)===47}else p=!1
+if(p){o=s+2
+for(n=-1;p=J.Wx(o),m=-1,p.C(o,u);){l=p.g(o,1)
+q=v.j(a1,o)
+if(x.call$1(q)!==!0)if(q===91)o=w.call$1(l)
+else{if(J.de(n,-1)&&q===58);else{p=q===64||q===58
+o=l-1
+if(p){m=v.XU(a1,"@",o)
+if(m===-1){o=t
+break}o=m+1
+for(n=-1;p=J.Wx(o),p.C(o,u);){l=p.g(o,1)
+q=v.j(a1,o)
+if(x.call$1(q)!==!0)if(q===91)o=w.call$1(l)
+else{if(q===58){if(!J.de(n,-1))throw H.b(P.cD("Double port in host"))}else{o=l-1
+break}o=l
+n=o}else o=l}break}else{m=-1
+break}}o=l
+n=o}else o=l}}else{o=s
+m=-1
+n=-1}for(k=o;x=J.Wx(k),x.C(k,u);k=j){j=x.g(k,1)
+q=v.j(a1,k)
+if(q===63||q===35){k=j-1
+break}}x=J.Wx(k)
+if(x.C(k,u)&&v.j(a1,k)===63)for(i=k;w=J.Wx(i),w.C(i,u);i=h){h=w.g(i,1)
+if(v.j(a1,i)===35){i=h-1
+break}}else i=k
+g=s>0?v.Nj(a1,0,s-1):null
+z=0
+if(s!==o){f=s+2
+if(m>0){e=v.Nj(a1,f,m)
+f=m+1}else e=""
+w=J.Wx(n)
+if(w.D(n,0)){y=v.Nj(a1,n,o)
+try{z=H.BU(y,null,null)}catch(d){H.Ru(d)
+throw H.b(P.cD("Invalid port: '"+H.d(y)+"'"))}c=v.Nj(a1,f,w.W(n,1))}else c=v.Nj(a1,f,o)}else{c=""
+e=""}b=v.Nj(a1,o,k)
+a=x.C(k,i)?v.Nj(a1,x.g(k,1),i):""
+x=J.Wx(i)
+a0=x.C(i,u)?v.Nj(a1,x.g(i,1),u):""
+return P.R6(a0,c,b,null,z,a,null,g,e)},"call$1","rp",2,0,null,202,[]],R6:function(a,b,c,d,e,f,g,h,i){var z=P.iy(h)
z=new P.iD(P.L7(b),null,null,z,i,P.LE(f,g),P.UJ(a),null,null)
z.n3(a,b,c,d,e,f,g,h,i)
-return z},L7:[function(a){var z,y,x
-if(a==null||J.FN(a)===!0)return a
-z=J.rY(a)
-if(z.j(a,0)===91){if(z.j(a,J.xH(z.gB(a),1))!==93)throw H.b(P.cD("Missing end `]` to match `[` in host"))
-P.eg(z.Nj(a,1,J.xH(z.gB(a),1)))
-return a}y=0
-while(!0){x=z.gB(a)
-if(typeof x!=="number")return H.s(x)
-if(!(y<x))break
-if(z.j(a,y)===58){P.eg(a)
-return"["+H.d(a)+"]"}++y}return a},"call$1","jC",2,0,null,205,[]],iy:[function(a){var z,y,x,w,v,u,t,s
+return z},L7:[function(a){var z,y
+if(a.length===0)return a
+if(C.xB.j(a,0)===91){z=a.length-1
+if(C.xB.j(a,z)!==93)throw H.b(P.cD("Missing end `]` to match `[` in host"))
+P.eg(C.xB.Nj(a,1,z))
+return a}for(z=a.length,y=0;y<z;++y){if(y>=z)H.vh(new P.bJ("value "+y))
+if(a.charCodeAt(y)===58){P.eg(a)
+return"["+a+"]"}}return a},"call$1","jC",2,0,null,203,[]],iy:[function(a){var z,y,x,w,v,u
z=new P.hb()
-y=new P.XX()
if(a==null)return""
-x=J.U6(a)
-w=x.gB(a)
-if(typeof w!=="number")return H.s(w)
-v=!0
-u=0
-for(;u<w;++u){t=x.j(a,u)
-if(u===0){if(!(t>=97&&t<=122))s=t>=65&&t<=90
-else s=!0
-s=!s}else s=!1
-if(s)throw H.b(new P.AT("Illegal scheme: "+H.d(a)))
-if(z.call$1(t)!==!0){if(y.call$1(t)===!0);else throw H.b(new P.AT("Illegal scheme: "+H.d(a)))
-v=!1}}return v?a:x.hc(a)},"call$1","oL",2,0,null,206,[]],LE:[function(a,b){var z,y,x
+y=a.length
+for(x=!0,w=0;w<y;++w){if(w>=y)H.vh(new P.bJ("value "+w))
+v=a.charCodeAt(w)
+if(w===0){if(!(v>=97&&v<=122))u=v>=65&&v<=90
+else u=!0
+u=!u}else u=!1
+if(u)throw H.b(new P.AT("Illegal scheme: "+a))
+if(z.call$1(v)!==!0){if(v<128){u=v>>>4
+if(u>=8)return H.e(C.mK,u)
+u=(C.mK[u]&C.jn.W4(1,v&15))!==0}else u=!1
+if(u);else throw H.b(new P.AT("Illegal scheme: "+a))
+x=!1}}return x?a:a.toLowerCase()},"call$1","Um",2,0,null,204,[]],LE:[function(a,b){var z,y,x
z={}
y=a==null
if(y&&!0)return""
@@ -16399,65 +15798,59 @@
x=P.p9("")
z.a=!0
C.jN.aN(b,new P.yZ(z,x))
-return x.vM},"call$2","wF",4,0,null,207,[],208,[]],UJ:[function(a){if(a==null)return""
-return P.Xc(a)},"call$1","p7",2,0,null,209,[]],Xc:[function(a){var z,y,x,w,v,u,t,s,r,q,p,o,n,m,l
+return x.vM},"call$2","wF",4,0,null,205,[],206,[]],UJ:[function(a){return P.Xc(a)},"call$1","p7",2,0,null,207,[]],Xc:[function(a){var z,y,x,w,v,u,t,s,r,q,p,o,n,m,l
z={}
-y=new P.Gs()
-x=new P.Tw()
-w=new P.wm(a,y,new P.pm())
-v=new P.FB(a)
-z.a=null
-u=J.U6(a)
-t=u.gB(a)
-z.b=0
+y=J.U6(a).u8(a,"%")
+z.a=y
+if(y<0)return a
+x=new P.Gs()
+w=new P.Tw()
+v=new P.wm(a,x,new P.pm())
+u=new P.FB(a)
+z.b=null
+t=a.length
z.c=0
s=new P.Lk(z,a)
-if(typeof t!=="number")return H.s(t)
-r=0
-for(;r<t;)if(u.j(a,r)===37){r=z.b
-if(t<r+2)throw H.b(new P.AT("Invalid percent-encoding in URI component: "+H.d(a)))
-q=u.j(a,r+1)
-p=u.j(a,z.b+2)
-o=v.call$1(z.b+1)
-if(y.call$1(q)===!0&&y.call$1(p)===!0&&x.call$1(o)!==!0){n=z.b+3
-z.b=n
-r=n}else{s.call$0()
-r=x.call$1(o)
-m=z.a
-if(r===!0){m.toString
-l=P.O8(1,o,J.im)
-r=H.eT(l)
-m.vM=m.vM+r}else{m.toString
-m.vM=m.vM+"%"
-r=w.call$1(z.b+1)
-m.toString
-l=P.O8(1,r,J.im)
-r=H.eT(l)
-m.vM=m.vM+r
-r=z.a
-m=w.call$1(z.b+2)
+for(r=y;r<t;){if(t<r+2)throw H.b(new P.AT("Invalid percent-encoding in URI component: "+a))
+q=C.xB.j(a,r+1)
+p=C.xB.j(a,z.a+2)
+o=u.call$1(z.a+1)
+if(x.call$1(q)===!0&&x.call$1(p)===!0&&w.call$1(o)!==!0){y=z.a+3
+z.a=y
+r=y}else{s.call$0()
+r=w.call$1(o)
+n=z.b
+if(r===!0){n.toString
+m=P.O8(1,o,J.im)
+r=H.eT(m)
+n.vM=n.vM+r}else{n.toString
+n.vM=n.vM+"%"
+r=v.call$1(z.a+1)
+n.toString
+m=P.O8(1,r,J.im)
+r=H.eT(m)
+n.vM=n.vM+r
+r=z.b
+n=v.call$1(z.a+2)
r.toString
-l=P.O8(1,m,J.im)
-m=H.eT(l)
-r.vM=r.vM+m}n=z.b+3
-z.b=n
-z.c=n
-r=n}}else{n=z.b+1
-z.b=n
-r=n}if(z.a!=null&&z.c!==r)s.call$0()
-z=z.a
-if(z==null)return a
-return J.AG(z)},"call$1","Sy",2,0,null,210,[]],n7:[function(a){if(a!=null&&!J.de(a,""))return H.BU(a,null,null)
-else return 0},"call$1","dl",2,0,null,211,[]],K6:[function(a,b){if(a!=null)return a
-if(b!=null)return b
-return""},"call$2","xX",4,0,null,212,[],213,[]],q5:[function(a){var z,y
+m=P.O8(1,n,J.im)
+n=H.eT(m)
+r.vM=r.vM+n}y=z.a+3
+z.a=y
+z.c=y
+r=y}l=C.xB.XU(a,"%",r)
+if(l>=z.a){z.a=l
+r=l}else{z.a=t
+r=t}}if(z.b==null)return a
+if(z.c!==r)s.call$0()
+return J.AG(z.b)},"call$1","Sy",2,0,null,208,[]],q5:[function(a){var z,y
z=new P.Mx()
y=a.split(".")
if(y.length!==4)z.call$1("IPv4 address should contain exactly 4 parts")
-return H.VM(new H.A8(y,new P.C9(z)),[null,null]).br(0)},"call$1","cf",2,0,null,205,[]],eg:[function(a){var z,y,x,w,v,u,t,s,r,q,p,o
+return H.VM(new H.A8(y,new P.C9(z)),[null,null]).br(0)},"call$1","cf",2,0,null,203,[]],eg:[function(a){var z,y,x,w,v,u,t,s,r,q,p,o
z=new P.kZ()
y=new P.JT(a,z)
-if(J.u6(J.q8(a),2))z.call$1("address is too short")
+if(J.q8(a)<2)z.call$1("address is too short")
x=[]
w=0
u=!1
@@ -16465,29 +15858,35 @@
while(!0){s=J.q8(a)
if(typeof s!=="number")return H.s(s)
if(!(t<s))break
-if(J.lE(a,t)===58){if(t===0){++t
-if(J.lE(a,t)!==58)z.call$1("invalid start colon.")
+s=a
+r=J.q8(s)
+if(typeof r!=="number")return H.s(r)
+if(t>=r)H.vh(new P.bJ("value "+t))
+if(s.charCodeAt(t)===58){if(t===0){++t
+s=a
+if(t>=J.q8(s))H.vh(new P.bJ("value "+t))
+if(s.charCodeAt(t)!==58)z.call$1("invalid start colon.")
w=t}if(t===w){if(u)z.call$1("only one wildcard `::` is allowed")
J.bi(x,-1)
u=!0}else J.bi(x,y.call$2(w,t))
w=t+1}++t}if(J.q8(x)===0)z.call$1("too few parts")
-r=J.de(w,J.q8(a))
-q=J.de(J.MQ(x),-1)
-if(r&&!q)z.call$1("expected a part after last `:`")
-if(!r)try{J.bi(x,y.call$2(w,J.q8(a)))}catch(p){H.Ru(p)
-try{v=P.q5(J.D8(a,w))
+q=J.de(w,J.q8(a))
+p=J.de(J.MQ(x),-1)
+if(q&&!p)z.call$1("expected a part after last `:`")
+if(!q)try{J.bi(x,y.call$2(w,J.q8(a)))}catch(o){H.Ru(o)
+try{v=P.q5(J.ZZ(a,w))
s=J.c1(J.UQ(v,0),8)
-o=J.UQ(v,1)
-if(typeof o!=="number")return H.s(o)
-J.bi(x,(s|o)>>>0)
-o=J.c1(J.UQ(v,2),8)
+r=J.UQ(v,1)
+if(typeof r!=="number")return H.s(r)
+J.bi(x,(s|r)>>>0)
+r=J.c1(J.UQ(v,2),8)
s=J.UQ(v,3)
if(typeof s!=="number")return H.s(s)
-J.bi(x,(o|s)>>>0)}catch(p){H.Ru(p)
+J.bi(x,(r|s)>>>0)}catch(o){H.Ru(o)
z.call$1("invalid end of IPv6 address.")}}if(u){if(J.q8(x)>7)z.call$1("an address with a wildcard must have less than 7 parts")}else if(J.q8(x)!==8)z.call$1("an address without a wildcard must contain exactly 8 parts")
s=new H.kV(x,new P.d9(x))
s.$builtinTypeInfo=[null,null]
-return P.F(s,!0,H.ip(s,"mW",0))},"call$1","y9",2,0,null,205,[]],jW:[function(a,b,c,d){var z,y,x,w,v,u,t,s
+return P.F(s,!0,H.ip(s,"mW",0))},"call$1","kS",2,0,null,203,[]],jW:[function(a,b,c,d){var z,y,x,w,v,u,t,s
z=new P.rI()
y=P.p9("")
x=c.gZE().WJ(b)
@@ -16503,29 +15902,35 @@
y.vM=y.vM+u}else{s=P.O8(1,37,J.im)
u=H.eT(s)
y.vM=y.vM+u
-z.call$2(v,y)}}return y.vM},"call$4$encoding$spaceToPlus","jd",4,5,null,214,152,215,[],216,[],217,[],218,[]]}},
+z.call$2(v,y)}}return y.vM},"call$4$encoding$spaceToPlus","jd",4,5,null,209,210,211,[],212,[],213,[],214,[]]}},
+hP:{
+"^":"Tp:462;",
+call$1:[function(a){var z
+if(a<128){z=a>>>4
+if(z>=8)return H.e(C.aa,z)
+z=(C.aa[z]&C.jn.W4(1,a&15))!==0}else z=!1
+return z},"call$1",null,2,0,null,461,[],"call"],
+$isEH:true},
+Uo:{
+"^":"Tp:463;a",
+call$1:[function(a){a=J.aK(this.a,"]",a)
+if(a===-1)throw H.b(P.cD("Bad end of IPv6 host"))
+return a+1},"call$1",null,2,0,null,52,[],"call"],
+$isEH:true},
hb:{
-"^":"Tp:495;",
+"^":"Tp:462;",
call$1:[function(a){var z
if(a<128){z=a>>>4
if(z>=8)return H.e(C.HE,z)
z=(C.HE[z]&C.jn.W4(1,a&15))!==0}else z=!1
-return z},"call$1",null,2,0,null,494,[],"call"],
-$isEH:true},
-XX:{
-"^":"Tp:495;",
-call$1:[function(a){var z
-if(a<128){z=a>>>4
-if(z>=8)return H.e(C.mK,z)
-z=(C.mK[z]&C.jn.W4(1,a&15))!==0}else z=!1
-return z},"call$1",null,2,0,null,494,[],"call"],
+return z},"call$1",null,2,0,null,461,[],"call"],
$isEH:true},
Kd:{
-"^":"Tp:107;",
-call$1:[function(a){return P.jW(C.Wd,a,C.xM,!1)},"call$1",null,2,0,null,86,[],"call"],
+"^":"Tp:112;",
+call$1:[function(a){return P.jW(C.Wd,a,C.xM,!1)},"call$1",null,2,0,null,91,[],"call"],
$isEH:true},
yZ:{
-"^":"Tp:346;a,b",
+"^":"Tp:348;a,b",
call$2:[function(a,b){var z=this.a
if(!z.a)this.b.KF("&")
z.a=!1
@@ -16533,105 +15938,105 @@
z.KF(P.jW(C.kg,a,C.xM,!0))
b.gl0(b)
z.KF("=")
-z.KF(P.jW(C.kg,b,C.xM,!0))},"call$2",null,4,0,null,42,[],23,[],"call"],
+z.KF(P.jW(C.kg,b,C.xM,!0))},"call$2",null,4,0,null,47,[],28,[],"call"],
$isEH:true},
Gs:{
-"^":"Tp:495;",
+"^":"Tp:462;",
call$1:[function(a){var z
if(!(48<=a&&a<=57))z=65<=a&&a<=70
else z=!0
-return z},"call$1",null,2,0,null,496,[],"call"],
+return z},"call$1",null,2,0,null,464,[],"call"],
$isEH:true},
pm:{
-"^":"Tp:495;",
-call$1:[function(a){return 97<=a&&a<=102},"call$1",null,2,0,null,496,[],"call"],
+"^":"Tp:462;",
+call$1:[function(a){return 97<=a&&a<=102},"call$1",null,2,0,null,464,[],"call"],
$isEH:true},
Tw:{
-"^":"Tp:495;",
+"^":"Tp:462;",
call$1:[function(a){var z
if(a<128){z=C.jn.GG(a,4)
if(z>=8)return H.e(C.kg,z)
z=(C.kg[z]&C.jn.W4(1,a&15))!==0}else z=!1
-return z},"call$1",null,2,0,null,494,[],"call"],
+return z},"call$1",null,2,0,null,461,[],"call"],
$isEH:true},
wm:{
-"^":"Tp:497;b,c,d",
+"^":"Tp:463;b,c,d",
call$1:[function(a){var z,y
z=this.b
-y=J.lE(z,a)
+y=C.xB.j(z,a)
if(this.d.call$1(y)===!0)return y-32
-else if(this.c.call$1(y)!==!0)throw H.b(new P.AT("Invalid URI component: "+H.d(z)))
-else return y},"call$1",null,2,0,null,47,[],"call"],
+else if(this.c.call$1(y)!==!0)throw H.b(new P.AT("Invalid URI component: "+z))
+else return y},"call$1",null,2,0,null,52,[],"call"],
$isEH:true},
FB:{
-"^":"Tp:497;e",
-call$1:[function(a){var z,y,x,w,v
-for(z=this.e,y=J.rY(z),x=0,w=0;w<2;++w){v=y.j(z,a+w)
-if(48<=v&&v<=57)x=x*16+v-48
-else{v|=32
-if(97<=v&&v<=102)x=x*16+v-97+10
-else throw H.b(new P.AT("Invalid percent-encoding in URI component: "+H.d(z)))}}return x},"call$1",null,2,0,null,47,[],"call"],
+"^":"Tp:463;e",
+call$1:[function(a){var z,y,x,w
+for(z=this.e,y=0,x=0;x<2;++x){w=C.xB.j(z,a+x)
+if(48<=w&&w<=57)y=y*16+w-48
+else{w|=32
+if(97<=w&&w<=102)y=y*16+w-97+10
+else throw H.b(new P.AT("Invalid percent-encoding in URI component: "+z))}}return y},"call$1",null,2,0,null,52,[],"call"],
$isEH:true},
Lk:{
-"^":"Tp:112;a,f",
+"^":"Tp:114;a,f",
call$0:[function(){var z,y,x,w,v
z=this.a
-y=z.a
+y=z.b
x=z.c
w=this.f
-v=z.b
-if(y==null)z.a=P.p9(J.Nj(w,x,v))
-else y.KF(J.Nj(w,x,v))},"call$0",null,0,0,null,"call"],
+v=z.a
+if(y==null)z.b=P.p9(C.xB.Nj(w,x,v))
+else y.KF(C.xB.Nj(w,x,v))},"call$0",null,0,0,null,"call"],
$isEH:true},
XZ:{
-"^":"Tp:499;",
+"^":"Tp:466;",
call$2:[function(a,b){var z=J.v1(a)
if(typeof z!=="number")return H.s(z)
-return b*31+z&1073741823},"call$2",null,4,0,null,498,[],245,[],"call"],
+return b*31+z&1073741823},"call$2",null,4,0,null,465,[],241,[],"call"],
$isEH:true},
Mx:{
-"^":"Tp:182;",
-call$1:[function(a){throw H.b(P.cD("Illegal IPv4 address, "+a))},"call$1",null,2,0,null,19,[],"call"],
+"^":"Tp:181;",
+call$1:[function(a){throw H.b(P.cD("Illegal IPv4 address, "+a))},"call$1",null,2,0,null,20,[],"call"],
$isEH:true},
C9:{
-"^":"Tp:107;a",
+"^":"Tp:112;a",
call$1:[function(a){var z,y
z=H.BU(a,null,null)
y=J.Wx(z)
if(y.C(z,0)||y.D(z,255))this.a.call$1("each part must be in the range of `0..255`")
-return z},"call$1",null,2,0,null,500,[],"call"],
+return z},"call$1",null,2,0,null,467,[],"call"],
$isEH:true},
kZ:{
-"^":"Tp:182;",
-call$1:[function(a){throw H.b(P.cD("Illegal IPv6 address, "+a))},"call$1",null,2,0,null,19,[],"call"],
+"^":"Tp:181;",
+call$1:[function(a){throw H.b(P.cD("Illegal IPv6 address, "+a))},"call$1",null,2,0,null,20,[],"call"],
$isEH:true},
JT:{
-"^":"Tp:501;a,b",
+"^":"Tp:468;a,b",
call$2:[function(a,b){var z,y
-if(J.z8(J.xH(b,a),4))this.b.call$1("an IPv6 part can only contain a maximum of 4 hex digits")
-z=H.BU(J.Nj(this.a,a,b),16,null)
+if(b-a>4)this.b.call$1("an IPv6 part can only contain a maximum of 4 hex digits")
+z=H.BU(C.xB.Nj(this.a,a,b),16,null)
y=J.Wx(z)
if(y.C(z,0)||y.D(z,65535))this.b.call$1("each part must be in the range of `0x0..0xFFFF`")
-return z},"call$2",null,4,0,null,120,[],121,[],"call"],
+return z},"call$2",null,4,0,null,123,[],124,[],"call"],
$isEH:true},
d9:{
-"^":"Tp:107;c",
+"^":"Tp:112;c",
call$1:[function(a){var z=J.x(a)
if(z.n(a,-1))return P.O8((9-this.c.length)*2,0,null)
-else return[z.m(a,8)&255,z.i(a,255)]},"call$1",null,2,0,null,23,[],"call"],
+else return[z.m(a,8)&255,z.i(a,255)]},"call$1",null,2,0,null,28,[],"call"],
$isEH:true},
rI:{
-"^":"Tp:346;",
+"^":"Tp:348;",
call$2:[function(a,b){var z=J.Wx(a)
b.KF(P.fc(C.xB.j("0123456789ABCDEF",z.m(a,4))))
-b.KF(P.fc(C.xB.j("0123456789ABCDEF",z.i(a,15))))},"call$2",null,4,0,null,502,[],503,[],"call"],
+b.KF(P.fc(C.xB.j("0123456789ABCDEF",z.i(a,15))))},"call$2",null,4,0,null,469,[],470,[],"call"],
$isEH:true}}],["dart.dom.html","dart:html",,W,{
"^":"",
UE:[function(a){if(P.F7()===!0)return"webkitTransitionEnd"
else if(P.dg()===!0)return"oTransitionEnd"
-return"transitionend"},"call$1","pq",2,0,219,18,[]],
-r3:[function(a,b){return document.createElement(a)},"call$2","Oe",4,0,null,94,[],220,[]],
-It:[function(a,b,c){return W.lt(a,null,null,b,null,null,null,c).ml(new W.Kx())},"call$3$onProgress$withCredentials","xF",2,5,null,77,77,221,[],222,[],223,[]],
+return"transitionend"},"call$1","pq",2,0,215,19,[]],
+r3:[function(a,b){return document.createElement(a)},"call$2","Oe",4,0,null,99,[],216,[]],
+It:[function(a,b,c){return W.lt(a,null,null,b,null,null,null,c).ml(new W.Kx())},"call$3$onProgress$withCredentials","xF",2,5,null,82,82,217,[],218,[],219,[]],
lt:[function(a,b,c,d,e,f,g,h){var z,y,x
z=W.zU
y=H.VM(new P.Zf(P.Dt(z)),[z])
@@ -16642,7 +16047,7 @@
z=C.MD.aM(x)
H.VM(new W.Ov(0,z.uv,z.Ph,W.aF(y.gYJ()),z.Sg),[H.Kp(z,0)]).Zz()
x.send()
-return y.MM},"call$8$method$mimeType$onProgress$requestHeaders$responseType$sendData$withCredentials","Za",2,15,null,77,77,77,77,77,77,77,221,[],224,[],225,[],222,[],226,[],227,[],228,[],223,[]],
+return y.MM},"call$8$method$mimeType$onProgress$requestHeaders$responseType$sendData$withCredentials","Za",2,15,null,82,82,82,82,82,82,82,217,[],220,[],218,[],221,[],222,[],223,[],224,[],219,[]],
ED:function(a){var z,y
z=document.createElement("input",null)
if(a!=null)try{J.Lp(z,a)}catch(y){H.Ru(y)}return z},
@@ -16650,23 +16055,23 @@
try{z=a
y=J.x(z)
return typeof z==="object"&&z!==null&&!!y.$iscS}catch(x){H.Ru(x)
-return!1}},"call$1","EF",2,0,null,229,[]],
+return!1}},"call$1","tn",2,0,null,225,[]],
Pv:[function(a){if(a==null)return
-return W.P1(a)},"call$1","Ie",2,0,null,230,[]],
+return W.P1(a)},"call$1","Ie",2,0,null,226,[]],
qc:[function(a){var z,y
if(a==null)return
if("setInterval" in a){z=W.P1(a)
y=J.x(z)
if(typeof z==="object"&&z!==null&&!!y.$isD0)return z
-return}else return a},"call$1","Wq",2,0,null,18,[]],
-qr:[function(a){return a},"call$1","Ku",2,0,null,18,[]],
+return}else return a},"call$1","Wq",2,0,null,19,[]],
+qr:[function(a){return a},"call$1","Ku",2,0,null,19,[]],
Z9:[function(a){var z=J.x(a)
if(typeof a==="object"&&a!==null&&!!z.$isQF)return a
-return P.o7(a,!0)},"call$1","cj",2,0,null,91,[]],
-YT:[function(a,b){return new W.vZ(a,b)},"call$2","AD",4,0,null,231,[],7,[]],
-GO:[function(a){return J.TD(a)},"call$1","V5",2,0,107,41,[]],
-Yb:[function(a){return J.Vq(a)},"call$1","cn",2,0,107,41,[]],
-Qp:[function(a,b,c,d){return J.qd(a,b,c,d)},"call$4","A6",8,0,232,41,[],12,[],233,[],234,[]],
+return P.o7(a,!0)},"call$1","cj",2,0,null,96,[]],
+YT:[function(a,b){return new W.vZ(a,b)},"call$2","AD",4,0,null,227,[],7,[]],
+GO:[function(a){return J.TD(a)},"call$1","V5",2,0,112,46,[]],
+Yb:[function(a){return J.Vq(a)},"call$1","cn",2,0,112,46,[]],
+Qp:[function(a,b,c,d){return J.qd(a,b,c,d)},"call$4","A6",8,0,228,46,[],12,[],229,[],230,[]],
wi:[function(a,b,c,d,e){var z,y,x,w,v,u,t,s,r,q
z=J.Xr(d)
if(z==null)throw H.b(new P.AT(d))
@@ -16705,29 +16110,29 @@
Object.defineProperty(s, init.dispatchPropertyName, {value: r, enumerable: false, writable: true, configurable: true})
q={prototype: s}
if(!v)q.extends=e
-b.registerElement(c,q)},"call$5","uz",10,0,null,89,[],235,[],94,[],11,[],236,[]],
+b.registerElement(c,q)},"call$5","uz",10,0,null,94,[],231,[],99,[],11,[],232,[]],
aF:[function(a){if(J.de($.X3,C.NU))return a
if(a==null)return
-return $.X3.oj(a,!0)},"call$1","Rj",2,0,null,156,[]],
+return $.X3.oj(a,!0)},"call$1","Rj",2,0,null,155,[]],
K2:[function(a){if(J.de($.X3,C.NU))return a
-return $.X3.PT(a,!0)},"call$1","ZJ",2,0,null,156,[]],
+return $.X3.PT(a,!0)},"call$1","ZJ",2,0,null,155,[]],
qE:{
"^":"cv;",
-"%":"HTMLAppletElement|HTMLBRElement|HTMLCanvasElement|HTMLContentElement|HTMLDListElement|HTMLDetailsElement|HTMLDialogElement|HTMLDirectoryElement|HTMLDivElement|HTMLFontElement|HTMLFrameElement|HTMLHRElement|HTMLHeadElement|HTMLHeadingElement|HTMLHtmlElement|HTMLMarqueeElement|HTMLMenuElement|HTMLModElement|HTMLOptGroupElement|HTMLParagraphElement|HTMLPreElement|HTMLQuoteElement|HTMLShadowElement|HTMLSpanElement|HTMLTableCaptionElement|HTMLTableCellElement|HTMLTableColElement|HTMLTableDataCellElement|HTMLTableHeaderCellElement|HTMLTitleElement|HTMLUListElement|HTMLUnknownElement;HTMLElement;jpR|GN|ir|uL|Vf|PO|Ur|G6|Sq|xI|Tg|KU|Ps|CN|qbd|HT|Ds|E0|LP|lw|pv|Fv|Vfx|E9|m8|Urj|Gk|AX|oub|yb|c4r|NM|pR|Squ|hx|Dsd|Zt|u7|KUl|E7|Kz|tuj|vj|LU|mHk|T2|Vct|PF|F1|D13|aQ|WZq|Ya5|pva|Ww|cda|tz|qFb|fl|rna|oM|Vba|wM|waa|lI|XP|V0|JG|T5|knI|oaa|fI|q2|nm|q3|uwf"},
-pa:{
+"%":"HTMLAppletElement|HTMLBRElement|HTMLCanvasElement|HTMLContentElement|HTMLDListElement|HTMLDetailsElement|HTMLDialogElement|HTMLDirectoryElement|HTMLDivElement|HTMLFontElement|HTMLFrameElement|HTMLHRElement|HTMLHeadElement|HTMLHeadingElement|HTMLHtmlElement|HTMLMarqueeElement|HTMLMenuElement|HTMLModElement|HTMLParagraphElement|HTMLPreElement|HTMLQuoteElement|HTMLShadowElement|HTMLSpanElement|HTMLTableCaptionElement|HTMLTableCellElement|HTMLTableColElement|HTMLTableDataCellElement|HTMLTableHeaderCellElement|HTMLTitleElement|HTMLUListElement|HTMLUnknownElement;HTMLElement;Sa|GN|ir|uL|Vf|G6|Ds|xI|Tg|pv|Jc|CN|Vfx|Be|Dsd|E0|LP|lw|tuj|E9|Vct|rm|m8|D13|Gk|qW|WZq|mk|pva|jY|pR|cda|hx|waa|u7|V4|E7|V9|Kz|V10|vj|LU|V11|KL|F1|V12|aQ|V13|Qa|V14|Ww|V15|tz|V16|fl|V17|Zt|V18|iL|V19|lI|XP|V20|JG|T5|knI|V21|fI|V22|ob|V23|nm|V24|Vu"},
+zw:{
"^":"Gv;",
$isList:true,
-$asWO:function(){return[W.M5]},
+$aszM:function(){return[W.M5]},
$isyN:true,
-$iscX:true,
-$ascX:function(){return[W.M5]},
+$isQV:true,
+$asQV:function(){return[W.M5]},
"%":"EntryArray"},
-Gh:{
+Ps:{
"^":"qE;N:target=,t5:type%,cC:hash%,mH:href=",
bu:[function(a){return a.toString()},"call$0","gXo",0,0,null],
$isGv:true,
"%":"HTMLAnchorElement"},
-na:{
+Sb:{
"^":"qE;N:target=,cC:hash%,mH:href=",
bu:[function(a){return a.toString()},"call$0","gXo",0,0,null],
$isGv:true,
@@ -16742,7 +16147,7 @@
"^":"Gv;t5:type=",
$isAz:true,
"%":";Blob"},
-QP:{
+Fy:{
"^":"qE;",
$isD0:true,
$isGv:true,
@@ -16758,8 +16163,8 @@
Yr:{
"^":"ea;tT:code=",
"%":"CloseEvent"},
-di:{
-"^":"Qa;Rn:data=",
+wT:{
+"^":"Mf;Rn:data=",
"%":"CompositionEvent"},
He:{
"^":"ea;",
@@ -16773,15 +16178,15 @@
"%":"HTMLDataListElement"},
QF:{
"^":"KV;",
-JP:[function(a){return a.createDocumentFragment()},"call$0","gf8",0,0,null],
-Kb:[function(a,b){return a.getElementById(b)},"call$1","giu",2,0,null,293,[]],
-ek:[function(a,b,c){return a.importNode(b,c)},"call$2","gPp",2,2,null,77,264,[],294,[]],
+JP:[function(a){return a.createDocumentFragment()},"call$0","gL9",0,0,null],
+Kb:[function(a,b){return a.getElementById(b)},"call$1","giu",2,0,null,291,[]],
+ek:[function(a,b,c){return a.importNode(b,c)},"call$2","gPp",2,2,null,82,260,[],292,[]],
gi9:function(a){return C.mt.aM(a)},
gVl:function(a){return C.pi.aM(a)},
gLm:function(a){return C.i3.aM(a)},
-Md:[function(a,b){return W.vD(a.querySelectorAll(b),null)},"call$1","gnk",2,0,null,295,[]],
-Ja:[function(a,b){return a.querySelector(b)},"call$1","gtP",2,0,null,296,[]],
-pr:[function(a,b){return W.vD(a.querySelectorAll(b),null)},"call$1","gTU",2,0,null,296,[]],
+Md:[function(a,b){return W.vD(a.querySelectorAll(b),null)},"call$1","gnk",2,0,null,293,[]],
+Ja:[function(a,b){return a.querySelector(b)},"call$1","gtP",2,0,null,294,[]],
+pr:[function(a,b){return W.vD(a.querySelectorAll(b),null)},"call$1","gTU",2,0,null,294,[]],
$isQF:true,
"%":"Document|HTMLDocument|SVGDocument"},
Aj:{
@@ -16794,9 +16199,9 @@
x=J.w1(y)
x.V1(y)
x.FV(y,z)},
-Md:[function(a,b){return W.vD(a.querySelectorAll(b),null)},"call$1","gnk",2,0,null,295,[]],
-Ja:[function(a,b){return a.querySelector(b)},"call$1","gtP",2,0,null,296,[]],
-pr:[function(a,b){return W.vD(a.querySelectorAll(b),null)},"call$1","gTU",2,0,null,296,[]],
+Md:[function(a,b){return W.vD(a.querySelectorAll(b),null)},"call$1","gnk",2,0,null,293,[]],
+Ja:[function(a,b){return a.querySelector(b)},"call$1","gtP",2,0,null,294,[]],
+pr:[function(a,b){return W.vD(a.querySelectorAll(b),null)},"call$1","gTU",2,0,null,294,[]],
$isGv:true,
"%":";DocumentFragment"},
cm:{
@@ -16820,13 +16225,13 @@
y=this.gwd(a)
y.V1(0)
y.FV(0,z)},
-Md:[function(a,b){return W.vD(a.querySelectorAll(b),null)},"call$1","gnk",2,0,null,295,[]],
-Ja:[function(a,b){return a.querySelector(b)},"call$1","gtP",2,0,null,296,[]],
-pr:[function(a,b){return W.vD(a.querySelectorAll(b),null)},"call$1","gTU",2,0,null,296,[]],
+Md:[function(a,b){return W.vD(a.querySelectorAll(b),null)},"call$1","gnk",2,0,null,293,[]],
+Ja:[function(a,b){return a.querySelector(b)},"call$1","gtP",2,0,null,294,[]],
+pr:[function(a,b){return W.vD(a.querySelectorAll(b),null)},"call$1","gTU",2,0,null,294,[]],
gDD:function(a){return new W.I4(a)},
i4:[function(a){},"call$0","gQd",0,0,null],
xo:[function(a){},"call$0","gbt",0,0,null],
-aC:[function(a,b,c,d){},"call$3","gxR",6,0,null,12,[],233,[],234,[]],
+aC:[function(a,b,c,d){},"call$3","gxR",6,0,null,12,[],229,[],230,[]],
gqn:function(a){return a.localName},
bu:[function(a){return a.localName},"call$0","gXo",0,0,null],
WO:[function(a,b){if(!!a.matches)return a.matches(b)
@@ -16834,14 +16239,15 @@
else if(!!a.mozMatchesSelector)return a.mozMatchesSelector(b)
else if(!!a.msMatchesSelector)return a.msMatchesSelector(b)
else if(!!a.oMatchesSelector)return a.oMatchesSelector(b)
-else throw H.b(P.f("Not supported on this platform"))},"call$1","grM",2,0,null,295,[]],
+else throw H.b(P.f("Not supported on this platform"))},"call$1","grM",2,0,null,293,[]],
bA:[function(a,b){var z=a
do{if(J.RF(z,b))return!0
z=z.parentElement}while(z!=null)
-return!1},"call$1","gMn",2,0,null,295,[]],
+return!1},"call$1","gMn",2,0,null,293,[]],
er:[function(a){return(a.createShadowRoot||a.webkitCreateShadowRoot).call(a)},"call$0","gzd",0,0,null],
-gKE:function(a){return a.shadowRoot||a.webkitShadowRoot},
+gIW:function(a){return a.shadowRoot||a.webkitShadowRoot},
gI:function(a){return new W.DM(a,a)},
+GE:[function(a,b){return a.getAttribute(b)},"call$1","gBy",2,0,null,12,[]],
gi9:function(a){return C.mt.f0(a)},
gVl:function(a){return C.pi.f0(a)},
gLm:function(a){return C.i3.f0(a)},
@@ -16859,13 +16265,14 @@
ea:{
"^":"Gv;It:_selector},Xt:bubbles=,t5:type=",
gN:function(a){return W.qc(a.target)},
+e6:[function(a){return a.preventDefault()},"call$0","gwl",0,0,null],
$isea:true,
-"%":"AudioProcessingEvent|AutocompleteErrorEvent|BeforeUnloadEvent|CSSFontFaceLoadEvent|DeviceMotionEvent|DeviceOrientationEvent|HashChangeEvent|IDBVersionChangeEvent|MIDIConnectionEvent|MediaKeyNeededEvent|MediaStreamEvent|MediaStreamTrackEvent|MutationEvent|OfflineAudioCompletionEvent|OverflowEvent|PageTransitionEvent|PopStateEvent|RTCDTMFToneChangeEvent|RTCDataChannelEvent|RTCIceCandidateEvent|SecurityPolicyViolationEvent|SpeechInputEvent|SpeechRecognitionEvent|TrackEvent|WebGLContextEvent|WebKitAnimationEvent;Event"},
+"%":"AudioProcessingEvent|AutocompleteErrorEvent|BeforeUnloadEvent|CSSFontFaceLoadEvent|DeviceMotionEvent|DeviceOrientationEvent|HashChangeEvent|IDBVersionChangeEvent|MIDIConnectionEvent|MediaKeyNeededEvent|MediaStreamEvent|MediaStreamTrackEvent|MutationEvent|OfflineAudioCompletionEvent|OverflowEvent|PageTransitionEvent|PopStateEvent|RTCDTMFToneChangeEvent|RTCDataChannelEvent|RTCIceCandidateEvent|SecurityPolicyViolationEvent|TrackEvent|WebGLContextEvent|WebKitAnimationEvent;Event"},
D0:{
"^":"Gv;",
gI:function(a){return new W.Jn(a)},
-On:[function(a,b,c,d){return a.addEventListener(b,H.tR(c,1),d)},"call$3","gIV",4,2,null,77,11,[],297,[],298,[]],
-Y9:[function(a,b,c,d){return a.removeEventListener(b,H.tR(c,1),d)},"call$3","gcF",4,2,null,77,11,[],297,[],298,[]],
+On:[function(a,b,c,d){return a.addEventListener(b,H.tR(c,1),d)},"call$3","gIV",4,2,null,82,11,[],295,[],296,[]],
+Y9:[function(a,b,c,d){return a.removeEventListener(b,H.tR(c,1),d)},"call$3","gcF",4,2,null,82,11,[],295,[],296,[]],
$isD0:true,
"%":";EventTarget"},
as:{
@@ -16875,40 +16282,40 @@
"^":"Az;oc:name=",
$ishH:true,
"%":"File"},
-Aa:{
+QU:{
"^":"cm;tT:code=",
"%":"FileError"},
-Tq:{
+h4:{
"^":"qE;B:length=,bP:method=,oc:name%,N:target=",
"%":"HTMLFormElement"},
-wa:{
+xn:{
"^":"Gb;",
gB:function(a){return a.length},
t:[function(a,b){var z=a.length
if(b>>>0!==b||b>=z)throw H.b(P.TE(b,0,z))
-return a[b]},"call$1","gIA",2,0,null,47,[]],
-u:[function(a,b,c){throw H.b(P.f("Cannot assign element of immutable List."))},"call$2","gj3",4,0,null,47,[],23,[]],
+return a[b]},"call$1","gIA",2,0,null,52,[]],
+u:[function(a,b,c){throw H.b(P.f("Cannot assign element of immutable List."))},"call$2","gj3",4,0,null,52,[],28,[]],
sB:function(a,b){throw H.b(P.f("Cannot resize immutable List."))},
grZ:function(a){var z=a.length
if(z>0)return a[z-1]
throw H.b(new P.lj("No elements"))},
Zv:[function(a,b){if(b>>>0!==b||b>=a.length)return H.e(a,b)
-return a[b]},"call$1","goY",2,0,null,47,[]],
+return a[b]},"call$1","goY",2,0,null,52,[]],
$isList:true,
-$asWO:function(){return[W.KV]},
+$aszM:function(){return[W.KV]},
$isyN:true,
-$iscX:true,
-$ascX:function(){return[W.KV]},
+$isQV:true,
+$asQV:function(){return[W.KV]},
$isXj:true,
"%":"HTMLCollection|HTMLFormControlsCollection|HTMLOptionsCollection"},
zU:{
-"^":"rk;iC:responseText=,ys:status=,po:statusText=",
+"^":"wa;iC:responseText=",
gn9:function(a){return W.Z9(a.response)},
-Yh:[function(a,b,c,d,e,f){return a.open(b,c,d,f,e)},function(a,b,c,d){return a.open(b,c,d)},"eo","call$5$async$password$user",null,"gnI",4,7,null,77,77,77,224,[],221,[],299,[],300,[],301,[]],
-wR:[function(a,b){return a.send(b)},"call$1","gX8",0,2,null,77,239,[]],
+R3:[function(a,b,c,d,e,f){return a.open(b,c,d,f,e)},function(a,b,c,d){return a.open(b,c,d)},"eo","call$5$async$password$user",null,"gnI",4,7,null,82,82,82,220,[],217,[],297,[],298,[],299,[]],
+zY:[function(a,b){return a.send(b)},"call$1","gX8",0,2,null,82,235,[]],
$iszU:true,
"%":"XMLHttpRequest"},
-rk:{
+wa:{
"^":"D0;",
"%":";XMLHttpRequestEventTarget"},
tX:{
@@ -16923,7 +16330,7 @@
oo:function(a,b){return a.complete.call$1(b)},
"%":"HTMLImageElement"},
Mi:{
-"^":"qE;Tq:checked%,MB:form=,aK:list=,oc:name%,LA:src=,t5:type%,P:value%",
+"^":"qE;Tq:checked%,MB:form=,o6:list=,oc:name%,LA:src=,t5:type%,P:value%",
RR:function(a,b){return a.accept.call$1(b)},
r6:function(a,b){return a.value.call$1(b)},
$isMi:true,
@@ -16951,6 +16358,7 @@
"%":"HTMLLinkElement"},
cS:{
"^":"Gv;cC:hash%,mH:href=",
+VD:[function(a){return a.reload()},"call$0","gQU",0,0,null],
bu:[function(a){return a.toString()},"call$0","gXo",0,0,null],
$iscS:true,
"%":"Location"},
@@ -16959,6 +16367,7 @@
"%":"HTMLMapElement"},
El:{
"^":"qE;kc:error=,LA:src=",
+xW:[function(a){return a.load()},"call$0","gnB",0,0,null],
"%":"HTMLAudioElement|HTMLMediaElement|HTMLVideoElement"},
zm:{
"^":"Gv;tT:code=",
@@ -16969,16 +16378,16 @@
aB:{
"^":"ea;G1:message=",
"%":"MediaKeyEvent"},
-fJ:{
+W7:{
"^":"ea;G1:message=",
"%":"MediaKeyMessageEvent"},
Rv:{
-"^":"D0;jO:id=",
+"^":"D0;jO:id=,ph:label=",
"%":"MediaStream"},
-Hy:{
+cx:{
"^":"ea;",
gRn:function(a){return P.o7(a.data,!0)},
-$isHy:true,
+$iscx:true,
"%":"MessageEvent"},
EeC:{
"^":"qE;jb:content=,oc:name%",
@@ -16991,17 +16400,17 @@
"^":"ea;Rn:data=",
"%":"MIDIMessageEvent"},
bn:{
-"^":"Imr;",
-LV:[function(a,b,c){return a.send(b,c)},function(a,b){return a.send(b)},"wR","call$2",null,"gX8",2,2,null,77,239,[],302,[]],
+"^":"ab;",
+LV:[function(a,b,c){return a.send(b,c)},function(a,b){return a.send(b)},"zY","call$2",null,"gX8",2,2,null,82,235,[],300,[]],
"%":"MIDIOutput"},
-Imr:{
+ab:{
"^":"D0;jO:id=,oc:name=,t5:type=",
"%":"MIDIInput;MIDIPort"},
-CX:{
-"^":"Qa;",
+Wp:{
+"^":"Mf;",
nH:[function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p){a.initMouseEvent(b,c,d,e,f,g,h,i,j,k,l,m,n,o,W.qr(p))
-return},"call$15","gEx",30,0,null,11,[],303,[],304,[],305,[],306,[],307,[],308,[],309,[],310,[],311,[],312,[],313,[],314,[],315,[],316,[]],
-$isCX:true,
+return},"call$15","gEx",30,0,null,11,[],301,[],302,[],303,[],304,[],305,[],306,[],307,[],308,[],309,[],310,[],311,[],312,[],313,[],314,[]],
+$isWp:true,
"%":"DragEvent|MSPointerEvent|MouseEvent|MouseScrollEvent|MouseWheelEvent|PointerEvent|WheelEvent"},
H9:{
"^":"Gv;",
@@ -17014,12 +16423,12 @@
y.call$2("subtree",i)
y.call$2("attributeOldValue",d)
y.call$2("characterDataOldValue",g)
-a.observe(b,z)},function(a,b,c,d){return this.jh(a,b,null,null,null,null,null,c,d)},"yN","call$8$attributeFilter$attributeOldValue$attributes$characterData$characterDataOldValue$childList$subtree",null,"gTT",2,15,null,77,77,77,77,77,77,77,74,[],317,[],318,[],319,[],320,[],321,[],322,[],323,[]],
+a.observe(b,z)},function(a,b,c,d){return this.jh(a,b,null,null,null,null,null,c,d)},"yN","call$8$attributeFilter$attributeOldValue$attributes$characterData$characterDataOldValue$childList$subtree",null,"gTT",2,15,null,82,82,82,82,82,82,82,79,[],315,[],316,[],317,[],318,[],319,[],320,[],321,[]],
"%":"MutationObserver|WebKitMutationObserver"},
-FI:{
+o4:{
"^":"Gv;jL:oldValue=,N:target=,t5:type=",
"%":"MutationRecord"},
-oU:{
+Q0:{
"^":"Gv;",
$isGv:true,
"%":"Navigator"},
@@ -17030,36 +16439,36 @@
"^":"D0;q6:firstChild=,uD:nextSibling=,M0:ownerDocument=,eT:parentElement=,KV:parentNode=,a4:textContent%",
gyT:function(a){return new W.e7(a)},
wg:[function(a){var z=a.parentNode
-if(z!=null)z.removeChild(a)},"call$0","gRI",0,0,null],
+if(z!=null)z.removeChild(a)},"call$0","guH",0,0,null],
Tk:[function(a,b){var z,y
try{z=a.parentNode
-J.ky(z,b,a)}catch(y){H.Ru(y)}return a},"call$1","gdA",2,0,null,324,[]],
+J.ky(z,b,a)}catch(y){H.Ru(y)}return a},"call$1","gdA",2,0,null,322,[]],
bu:[function(a){var z=a.nodeValue
return z==null?J.Gv.prototype.bu.call(this,a):z},"call$0","gXo",0,0,null],
-jx:[function(a,b){return a.appendChild(b)},"call$1","gp3",2,0,null,325,[]],
-tg:[function(a,b){return a.contains(b)},"call$1","gdj",2,0,null,104,[]],
-mK:[function(a,b,c){return a.insertBefore(b,c)},"call$2","gHc",4,0,null,325,[],326,[]],
-dR:[function(a,b,c){return a.replaceChild(b,c)},"call$2","ghn",4,0,null,325,[],327,[]],
+jx:[function(a,b){return a.appendChild(b)},"call$1","gp3",2,0,null,323,[]],
+tg:[function(a,b){return a.contains(b)},"call$1","gdj",2,0,null,109,[]],
+mK:[function(a,b,c){return a.insertBefore(b,c)},"call$2","gys",4,0,null,323,[],324,[]],
+dR:[function(a,b,c){return a.replaceChild(b,c)},"call$2","ghn",4,0,null,323,[],325,[]],
$isKV:true,
"%":"Entity|Notation;Node"},
yk:{
-"^":"ecX;",
+"^":"ma;",
gB:function(a){return a.length},
t:[function(a,b){var z=a.length
if(b>>>0!==b||b>=z)throw H.b(P.TE(b,0,z))
-return a[b]},"call$1","gIA",2,0,null,47,[]],
-u:[function(a,b,c){throw H.b(P.f("Cannot assign element of immutable List."))},"call$2","gj3",4,0,null,47,[],23,[]],
+return a[b]},"call$1","gIA",2,0,null,52,[]],
+u:[function(a,b,c){throw H.b(P.f("Cannot assign element of immutable List."))},"call$2","gj3",4,0,null,52,[],28,[]],
sB:function(a,b){throw H.b(P.f("Cannot resize immutable List."))},
grZ:function(a){var z=a.length
if(z>0)return a[z-1]
throw H.b(new P.lj("No elements"))},
Zv:[function(a,b){if(b>>>0!==b||b>=a.length)return H.e(a,b)
-return a[b]},"call$1","goY",2,0,null,47,[]],
+return a[b]},"call$1","goY",2,0,null,52,[]],
$isList:true,
-$asWO:function(){return[W.KV]},
+$aszM:function(){return[W.KV]},
$isyN:true,
-$iscX:true,
-$ascX:function(){return[W.KV]},
+$isQV:true,
+$asQV:function(){return[W.KV]},
$isXj:true,
"%":"NodeList|RadioNodeList"},
KY:{
@@ -17068,8 +16477,11 @@
G7:{
"^":"qE;Rn:data=,MB:form=,oc:name%,t5:type%",
"%":"HTMLObjectElement"},
+l9:{
+"^":"qE;ph:label%",
+"%":"HTMLOptGroupElement"},
Ql:{
-"^":"qE;MB:form=,vH:index=,P:value%",
+"^":"qE;MB:form=,vH:index=,ph:label%,P:value%",
r6:function(a,b){return a.value.call$1(b)},
$isQl:true,
"%":"HTMLOptionElement"},
@@ -17106,21 +16518,33 @@
"^":"qE;MB:form=,B:length%,oc:name%,ig:selectedIndex%,t5:type=,P:value%",
r6:function(a,b){return a.value.call$1(b)},
gbG:function(a){var z=W.vD(a.querySelectorAll("option"),null)
-z=z.ev(z,new W.kI())
+z=z.ev(z,new W.Ou())
return H.VM(new P.Yp(P.F(z,!0,H.ip(z,"mW",0))),[null])},
$islp:true,
"%":"HTMLSelectElement"},
I0:{
"^":"Aj;pQ:applyAuthorStyles=",
-Kb:[function(a,b){return a.getElementById(b)},"call$1","giu",2,0,null,293,[]],
+Kb:[function(a,b){return a.getElementById(b)},"call$1","giu",2,0,null,291,[]],
$isI0:true,
"%":"ShadowRoot"},
-CY:{
+QR:{
"^":"qE;LA:src=,t5:type%",
"%":"HTMLSourceElement"},
-Hd:{
+uaa:{
+"^":"ea;PK:results=",
+"%":"SpeechInputEvent"},
+yg:{
+"^":"Gv;",
+"%":"SpeechInputResult"},
+mG:{
"^":"ea;kc:error=,G1:message=",
"%":"SpeechRecognitionError"},
+Ul:{
+"^":"ea;PK:results=",
+"%":"SpeechRecognitionEvent"},
+uj:{
+"^":"Gv;V5:isFinal=,B:length=",
+"%":"SpeechRecognitionResult"},
G5:{
"^":"ea;oc:name=",
"%":"SpeechSynthesisEvent"},
@@ -17138,7 +16562,7 @@
"^":"qE;",
$istV:true,
"%":"HTMLTableRowElement"},
-KP:{
+BT:{
"^":"qE;",
gWT:function(a){return H.VM(new W.Of(a.rows),[W.tV])},
"%":"HTMLTableSectionElement"},
@@ -17156,25 +16580,25 @@
$isAE:true,
"%":"HTMLTextAreaElement"},
xV:{
-"^":"Qa;Rn:data=",
+"^":"Mf;Rn:data=",
"%":"TextEvent"},
RH:{
-"^":"qE;fY:kind%,LA:src=",
+"^":"qE;fY:kind%,ph:label%,LA:src=",
"%":"HTMLTrackElement"},
OJ:{
"^":"ea;",
$isOJ:true,
"%":"TransitionEvent|WebKitTransitionEvent"},
-Qa:{
+Mf:{
"^":"ea;",
"%":"FocusEvent|KeyboardEvent|SVGZoomEvent|TouchEvent;UIEvent"},
u9:{
-"^":"D0;oc:name%,ys:status=",
+"^":"D0;oc:name%",
gmW:function(a){var z=a.location
if(W.uC(z)===!0)return z
if(null==a._location_wrapper)a._location_wrapper=new W.Dk(z)
return a._location_wrapper},
-oB:[function(a,b){return a.requestAnimationFrame(H.tR(b,1))},"call$1","gfl",2,0,null,156,[]],
+oB:[function(a,b){return a.requestAnimationFrame(H.tR(b,1))},"call$1","gfl",2,0,null,155,[]],
hr:[function(a){if(!!(a.requestAnimationFrame&&a.cancelAnimationFrame))return
(function($this) {
var vendors = ['ms', 'moz', 'webkit', 'o'];
@@ -17195,7 +16619,7 @@
geT:function(a){return W.Pv(a.parent)},
cO:[function(a){return a.close()},"call$0","gJK",0,0,null],
xc:[function(a,b,c,d){a.postMessage(P.bL(b),c)
-return},function(a,b,c){return this.xc(a,b,c,null)},"X6","call$3",null,"gmF",4,2,null,77,20,[],328,[],329,[]],
+return},function(a,b,c){return this.xc(a,b,c,null)},"X6","call$3",null,"gmF",4,2,null,82,22,[],326,[],327,[]],
bu:[function(a){return a.toString()},"call$0","gXo",0,0,null],
gi9:function(a){return C.mt.aM(a)},
gVl:function(a){return C.pi.aM(a)},
@@ -17208,7 +16632,7 @@
"^":"KV;oc:name=,P:value%",
r6:function(a,b){return a.value.call$1(b)},
"%":"Attr"},
-hq:{
+Eb:{
"^":"KV;",
$isGv:true,
"%":"DocumentType"},
@@ -17217,60 +16641,99 @@
$isD0:true,
$isGv:true,
"%":"HTMLFrameSetElement"},
-QV:{
-"^":"w1p;",
+Cy:{
+"^":"ecX;",
gB:function(a){return a.length},
t:[function(a,b){var z=a.length
if(b>>>0!==b||b>=z)throw H.b(P.TE(b,0,z))
-return a[b]},"call$1","gIA",2,0,null,47,[]],
-u:[function(a,b,c){throw H.b(P.f("Cannot assign element of immutable List."))},"call$2","gj3",4,0,null,47,[],23,[]],
+return a[b]},"call$1","gIA",2,0,null,52,[]],
+u:[function(a,b,c){throw H.b(P.f("Cannot assign element of immutable List."))},"call$2","gj3",4,0,null,52,[],28,[]],
sB:function(a,b){throw H.b(P.f("Cannot resize immutable List."))},
grZ:function(a){var z=a.length
if(z>0)return a[z-1]
throw H.b(new P.lj("No elements"))},
Zv:[function(a,b){if(b>>>0!==b||b>=a.length)return H.e(a,b)
-return a[b]},"call$1","goY",2,0,null,47,[]],
+return a[b]},"call$1","goY",2,0,null,52,[]],
$isList:true,
-$asWO:function(){return[W.KV]},
+$aszM:function(){return[W.KV]},
$isyN:true,
-$iscX:true,
-$ascX:function(){return[W.KV]},
+$isQV:true,
+$asQV:function(){return[W.KV]},
$isXj:true,
"%":"MozNamedAttrMap|NamedNodeMap"},
+c5:{
+"^":"w1p;",
+gB:function(a){return a.length},
+t:[function(a,b){var z=a.length
+if(b>>>0!==b||b>=z)throw H.b(P.TE(b,0,z))
+return a[b]},"call$1","gIA",2,0,null,52,[]],
+u:[function(a,b,c){throw H.b(P.f("Cannot assign element of immutable List."))},"call$2","gj3",4,0,null,52,[],28,[]],
+sB:function(a,b){throw H.b(P.f("Cannot resize immutable List."))},
+grZ:function(a){var z=a.length
+if(z>0)return a[z-1]
+throw H.b(new P.lj("No elements"))},
+Zv:[function(a,b){if(b>>>0!==b||b>=a.length)return H.e(a,b)
+return a[b]},"call$1","goY",2,0,null,52,[]],
+$isList:true,
+$aszM:function(){return[W.yg]},
+$isyN:true,
+$isQV:true,
+$asQV:function(){return[W.yg]},
+$isXj:true,
+"%":"SpeechInputResultList"},
+LO:{
+"^":"kEI;",
+gB:function(a){return a.length},
+t:[function(a,b){var z=a.length
+if(b>>>0!==b||b>=z)throw H.b(P.TE(b,0,z))
+return a[b]},"call$1","gIA",2,0,null,52,[]],
+u:[function(a,b,c){throw H.b(P.f("Cannot assign element of immutable List."))},"call$2","gj3",4,0,null,52,[],28,[]],
+sB:function(a,b){throw H.b(P.f("Cannot resize immutable List."))},
+grZ:function(a){var z=a.length
+if(z>0)return a[z-1]
+throw H.b(new P.lj("No elements"))},
+Zv:[function(a,b){if(b>>>0!==b||b>=a.length)return H.e(a,b)
+return a[b]},"call$1","goY",2,0,null,52,[]],
+$isList:true,
+$aszM:function(){return[W.uj]},
+$isyN:true,
+$isQV:true,
+$asQV:function(){return[W.uj]},
+$isXj:true,
+"%":"SpeechRecognitionResultList"},
QZ:{
"^":"a;",
-HH:[function(a){return typeof console!="undefined"?console.count(a):null},"call$1","gAv",2,0,504,173,[]],
-Wt:[function(a,b){return typeof console!="undefined"?console.error(b):null},"call$1","gkc",2,0,504,173,[]],
-To:[function(a){return typeof console!="undefined"?console.info(a):null},"call$1","gqa",2,0,null,173,[]],
-De:[function(a,b){return typeof console!="undefined"?console.profile(b):null},"call$1","gB1",2,0,182,505,[]],
-uj:[function(a){return typeof console!="undefined"?console.time(a):null},"call$1","gFl",2,0,182,505,[]],
-WL:[function(a,b){return typeof console!="undefined"?console.trace(b):null},"call$1","gtN",2,0,504,173,[]],
+HH:[function(a){return typeof console!="undefined"?console.count(a):null},"call$1","gAv",2,0,471,172,[]],
+Z3:[function(a,b){return typeof console!="undefined"?console.error(b):null},"call$1","gkc",2,0,471,172,[]],
+To:[function(a){return typeof console!="undefined"?console.info(a):null},"call$1","gqa",2,0,null,172,[]],
+De:[function(a,b){return typeof console!="undefined"?console.profile(b):null},"call$1","gB1",2,0,181,472,[]],
+uj:[function(a){return typeof console!="undefined"?console.time(a):null},"call$1","gFl",2,0,181,472,[]],
+wn:[function(a,b){return typeof console!="undefined"?console.trace(b):null},"call$1","gtN",2,0,471,172,[]],
static:{"^":"wk"}},
VG:{
"^":"ar;MW,vG",
-tg:[function(a,b){return J.kE(this.vG,b)},"call$1","gdj",2,0,null,129,[]],
+tg:[function(a,b){return J.kE(this.vG,b)},"call$1","gdj",2,0,null,132,[]],
gl0:function(a){return this.MW.firstElementChild==null},
gB:function(a){return this.vG.length},
t:[function(a,b){var z=this.vG
if(b>>>0!==b||b>=z.length)return H.e(z,b)
-return z[b]},"call$1","gIA",2,0,null,47,[]],
+return z[b]},"call$1","gIA",2,0,null,52,[]],
u:[function(a,b,c){var z=this.vG
if(b>>>0!==b||b>=z.length)return H.e(z,b)
-this.MW.replaceChild(c,z[b])},"call$2","gj3",4,0,null,47,[],23,[]],
+this.MW.replaceChild(c,z[b])},"call$2","gj3",4,0,null,52,[],28,[]],
sB:function(a,b){throw H.b(P.f("Cannot resize element lists"))},
h:[function(a,b){this.MW.appendChild(b)
-return b},"call$1","ght",2,0,null,23,[]],
+return b},"call$1","ght",2,0,null,28,[]],
gA:function(a){var z=this.br(this)
return H.VM(new H.a7(z,z.length,0,null),[H.Kp(z,0)])},
FV:[function(a,b){var z,y
-z=J.x(b)
-for(z=J.GP(typeof b==="object"&&b!==null&&!!z.$ise7?P.F(b,!0,null):b),y=this.MW;z.G();)y.appendChild(z.gl())},"call$1","gDY",2,0,null,114,[]],
-GT:[function(a,b){throw H.b(P.f("Cannot sort element lists"))},"call$1","gH7",0,2,null,77,133,[]],
-YW:[function(a,b,c,d,e){throw H.b(P.SY(null))},"call$4","gaQ",6,2,null,335,120,[],121,[],114,[],122,[]],
+for(z=H.VM(new H.a7(b,b.length,0,null),[H.Kp(b,0)]),y=this.MW;z.G();)y.appendChild(z.lo)},"call$1","gDY",2,0,null,116,[]],
+GT:[function(a,b){throw H.b(P.f("Cannot sort element lists"))},"call$1","gH7",0,2,null,82,122,[]],
+YW:[function(a,b,c,d,e){throw H.b(P.SY(null))},"call$4","gam",6,2,null,332,123,[],124,[],116,[],125,[]],
Rz:[function(a,b){var z=J.x(b)
if(typeof b==="object"&&b!==null&&!!z.$iscv){z=this.MW
if(b.parentNode===z){z.removeChild(b)
-return!0}}return!1},"call$1","gRI",2,0,null,6,[]],
+return!0}}return!1},"call$1","guH",2,0,null,6,[]],
xe:[function(a,b,c){var z,y,x
if(b<0||b>this.vG.length)throw H.b(P.TE(b,0,this.vG.length))
z=this.vG
@@ -17278,29 +16741,29 @@
x=this.MW
if(b===y)x.appendChild(c)
else{if(b<0||b>=y)return H.e(z,b)
-x.insertBefore(c,z[b])}},"call$2","gQG",4,0,null,47,[],129,[]],
-V1:[function(a){this.MW.textContent=""},"call$0","gyP",0,0,null],
+x.insertBefore(c,z[b])}},"call$2","gQG",4,0,null,52,[],132,[]],
+V1:[function(a){J.c9(this.MW,"")},"call$0","gRa",0,0,null],
KI:[function(a,b){var z,y
z=this.vG
if(b<0||b>=z.length)return H.e(z,b)
y=z[b]
this.MW.removeChild(y)
-return y},"call$1","gNM",2,0,null,47,[]],
+return y},"call$1","gNM",2,0,null,52,[]],
grZ:function(a){var z=this.MW.lastElementChild
if(z==null)throw H.b(new P.lj("No elements"))
return z},
$asar:function(){return[W.cv]},
-$asWO:function(){return[W.cv]},
-$ascX:function(){return[W.cv]}},
+$aszM:function(){return[W.cv]},
+$asQV:function(){return[W.cv]}},
wz:{
"^":"ar;Sn,Sc",
gB:function(a){return this.Sn.length},
t:[function(a,b){var z=this.Sn
if(b>>>0!==b||b>=z.length)return H.e(z,b)
-return z[b]},"call$1","gIA",2,0,null,47,[]],
-u:[function(a,b,c){throw H.b(P.f("Cannot modify list"))},"call$2","gj3",4,0,null,47,[],23,[]],
+return z[b]},"call$1","gIA",2,0,null,52,[]],
+u:[function(a,b,c){throw H.b(P.f("Cannot modify list"))},"call$2","gj3",4,0,null,52,[],28,[]],
sB:function(a,b){throw H.b(P.f("Cannot modify list"))},
-GT:[function(a,b){throw H.b(P.f("Cannot sort list"))},"call$1","gH7",0,2,null,77,133,[]],
+GT:[function(a,b){throw H.b(P.f("Cannot sort list"))},"call$1","gH7",0,2,null,82,122,[]],
grZ:function(a){return C.t5.grZ(this.Sn)},
gDD:function(a){return W.or(this.Sc)},
gi9:function(a){return C.mt.vo(this)},
@@ -17309,17 +16772,17 @@
nJ:function(a,b){var z=C.t5.ev(this.Sn,new W.B1())
this.Sc=P.F(z,!0,H.ip(z,"mW",0))},
$isList:true,
-$asWO:null,
+$aszM:null,
$isyN:true,
-$iscX:true,
-$ascX:null,
+$isQV:true,
+$asQV:null,
static:{vD:function(a,b){var z=H.VM(new W.wz(a,null),[b])
z.nJ(a,b)
return z}}},
B1:{
-"^":"Tp:107;",
+"^":"Tp:112;",
call$1:[function(a){var z=J.x(a)
-return typeof a==="object"&&a!==null&&!!z.$iscv},"call$1",null,2,0,null,18,[],"call"],
+return typeof a==="object"&&a!==null&&!!z.$iscv},"call$1",null,2,0,null,19,[],"call"],
$isEH:true},
M5:{
"^":"Gv;"},
@@ -17337,27 +16800,27 @@
RAp:{
"^":"Gv+lD;",
$isList:true,
-$asWO:function(){return[W.KV]},
+$aszM:function(){return[W.KV]},
$isyN:true,
-$iscX:true,
-$ascX:function(){return[W.KV]}},
+$isQV:true,
+$asQV:function(){return[W.KV]}},
Gb:{
"^":"RAp+Gm;",
$isList:true,
-$asWO:function(){return[W.KV]},
+$aszM:function(){return[W.KV]},
$isyN:true,
-$iscX:true,
-$ascX:function(){return[W.KV]}},
+$isQV:true,
+$asQV:function(){return[W.KV]}},
Kx:{
-"^":"Tp:107;",
-call$1:[function(a){return J.EC(a)},"call$1",null,2,0,null,506,[],"call"],
+"^":"Tp:112;",
+call$1:[function(a){return J.EC(a)},"call$1",null,2,0,null,473,[],"call"],
$isEH:true},
iO:{
-"^":"Tp:346;a",
-call$2:[function(a,b){this.a.setRequestHeader(a,b)},"call$2",null,4,0,null,507,[],23,[],"call"],
+"^":"Tp:348;a",
+call$2:[function(a,b){this.a.setRequestHeader(a,b)},"call$2",null,4,0,null,474,[],28,[],"call"],
$isEH:true},
bU:{
-"^":"Tp:107;b,c",
+"^":"Tp:112;b,c",
call$1:[function(a){var z,y,x
z=this.c
y=z.status
@@ -17366,24 +16829,20 @@
x=this.b
if(y){y=x.MM
if(y.Gv!==0)H.vh(new P.lj("Future already completed"))
-y.OH(z)}else x.pm(a)},"call$1",null,2,0,null,18,[],"call"],
+y.OH(z)}else x.pm(a)},"call$1",null,2,0,null,19,[],"call"],
$isEH:true},
Yg:{
-"^":"Tp:346;a",
-call$2:[function(a,b){if(b!=null)this.a[a]=b},"call$2",null,4,0,null,42,[],23,[],"call"],
+"^":"Tp:348;a",
+call$2:[function(a,b){if(b!=null)this.a[a]=b},"call$2",null,4,0,null,47,[],28,[],"call"],
$isEH:true},
e7:{
"^":"ar;NL",
grZ:function(a){var z=this.NL.lastChild
if(z==null)throw H.b(new P.lj("No elements"))
return z},
-h:[function(a,b){this.NL.appendChild(b)},"call$1","ght",2,0,null,23,[]],
-FV:[function(a,b){var z,y,x,w
-z=J.w1(b)
-if(typeof b==="object"&&b!==null&&!!z.$ise7){z=b.NL
-y=this.NL
-if(z!==y)for(x=z.childNodes.length,w=0;w<x;++w)y.appendChild(z.firstChild)
-return}for(z=z.gA(b),y=this.NL;z.G();)y.appendChild(z.gl())},"call$1","gDY",2,0,null,114,[]],
+h:[function(a,b){this.NL.appendChild(b)},"call$1","ght",2,0,null,28,[]],
+FV:[function(a,b){var z,y
+for(z=H.VM(new H.a7(b,b.length,0,null),[H.Kp(b,0)]),y=this.NL;z.G();)y.appendChild(z.lo)},"call$1","gDY",2,0,null,116,[]],
xe:[function(a,b,c){var z,y,x
if(b<0||b>this.NL.childNodes.length)throw H.b(P.TE(b,0,this.NL.childNodes.length))
z=this.NL
@@ -17391,81 +16850,108 @@
x=y.length
if(b===x)z.appendChild(c)
else{if(b<0||b>=x)return H.e(y,b)
-z.insertBefore(c,y[b])}},"call$2","gQG",4,0,null,47,[],264,[]],
+z.insertBefore(c,y[b])}},"call$2","gQG",4,0,null,52,[],260,[]],
KI:[function(a,b){var z,y,x
z=this.NL
y=z.childNodes
if(b<0||b>=y.length)return H.e(y,b)
x=y[b]
z.removeChild(x)
-return x},"call$1","gNM",2,0,null,47,[]],
+return x},"call$1","gNM",2,0,null,52,[]],
Rz:[function(a,b){var z=J.x(b)
if(typeof b!=="object"||b===null||!z.$isKV)return!1
z=this.NL
if(z!==b.parentNode)return!1
z.removeChild(b)
-return!0},"call$1","gRI",2,0,null,6,[]],
-V1:[function(a){this.NL.textContent=""},"call$0","gyP",0,0,null],
+return!0},"call$1","guH",2,0,null,6,[]],
+V1:[function(a){J.c9(this.NL,"")},"call$0","gRa",0,0,null],
u:[function(a,b,c){var z,y
z=this.NL
y=z.childNodes
if(b>>>0!==b||b>=y.length)return H.e(y,b)
-z.replaceChild(c,y[b])},"call$2","gj3",4,0,null,47,[],23,[]],
+z.replaceChild(c,y[b])},"call$2","gj3",4,0,null,52,[],28,[]],
gA:function(a){return C.t5.gA(this.NL.childNodes)},
-GT:[function(a,b){throw H.b(P.f("Cannot sort Node list"))},"call$1","gH7",0,2,null,77,133,[]],
-YW:[function(a,b,c,d,e){throw H.b(P.f("Cannot setRange on Node list"))},"call$4","gaQ",6,2,null,335,120,[],121,[],114,[],122,[]],
+GT:[function(a,b){throw H.b(P.f("Cannot sort Node list"))},"call$1","gH7",0,2,null,82,122,[]],
+YW:[function(a,b,c,d,e){throw H.b(P.f("Cannot setRange on Node list"))},"call$4","gam",6,2,null,332,123,[],124,[],116,[],125,[]],
gB:function(a){return this.NL.childNodes.length},
sB:function(a,b){throw H.b(P.f("Cannot set length on immutable List."))},
t:[function(a,b){var z=this.NL.childNodes
if(b>>>0!==b||b>=z.length)return H.e(z,b)
-return z[b]},"call$1","gIA",2,0,null,47,[]],
-$ise7:true,
+return z[b]},"call$1","gIA",2,0,null,52,[]],
$asar:function(){return[W.KV]},
-$asWO:function(){return[W.KV]},
-$ascX:function(){return[W.KV]}},
+$aszM:function(){return[W.KV]},
+$asQV:function(){return[W.KV]}},
nNL:{
"^":"Gv+lD;",
$isList:true,
-$asWO:function(){return[W.KV]},
+$aszM:function(){return[W.KV]},
$isyN:true,
-$iscX:true,
-$ascX:function(){return[W.KV]}},
-ecX:{
+$isQV:true,
+$asQV:function(){return[W.KV]}},
+ma:{
"^":"nNL+Gm;",
$isList:true,
-$asWO:function(){return[W.KV]},
+$aszM:function(){return[W.KV]},
$isyN:true,
-$iscX:true,
-$ascX:function(){return[W.KV]}},
-kI:{
-"^":"Tp:107;",
+$isQV:true,
+$asQV:function(){return[W.KV]}},
+Ou:{
+"^":"Tp:112;",
call$1:[function(a){var z=J.x(a)
-return typeof a==="object"&&a!==null&&!!z.$isQl},"call$1",null,2,0,null,18,[],"call"],
+return typeof a==="object"&&a!==null&&!!z.$isQl},"call$1",null,2,0,null,19,[],"call"],
$isEH:true},
yoo:{
"^":"Gv+lD;",
$isList:true,
-$asWO:function(){return[W.KV]},
+$aszM:function(){return[W.KV]},
$isyN:true,
-$iscX:true,
-$ascX:function(){return[W.KV]}},
-w1p:{
+$isQV:true,
+$asQV:function(){return[W.KV]}},
+ecX:{
"^":"yoo+Gm;",
$isList:true,
-$asWO:function(){return[W.KV]},
+$aszM:function(){return[W.KV]},
$isyN:true,
-$iscX:true,
-$ascX:function(){return[W.KV]}},
+$isQV:true,
+$asQV:function(){return[W.KV]}},
+zLC:{
+"^":"Gv+lD;",
+$isList:true,
+$aszM:function(){return[W.yg]},
+$isyN:true,
+$isQV:true,
+$asQV:function(){return[W.yg]}},
+w1p:{
+"^":"zLC+Gm;",
+$isList:true,
+$aszM:function(){return[W.yg]},
+$isyN:true,
+$isQV:true,
+$asQV:function(){return[W.yg]}},
+dxW:{
+"^":"Gv+lD;",
+$isList:true,
+$aszM:function(){return[W.uj]},
+$isyN:true,
+$isQV:true,
+$asQV:function(){return[W.uj]}},
+kEI:{
+"^":"dxW+Gm;",
+$isList:true,
+$aszM:function(){return[W.uj]},
+$isyN:true,
+$isQV:true,
+$asQV:function(){return[W.uj]}},
tJ:{
"^":"a;",
-FV:[function(a,b){J.kH(b,new W.Zc(this))},"call$1","gDY",2,0,null,104,[]],
+FV:[function(a,b){H.bQ(b,new W.Zc(this))},"call$1","gDY",2,0,null,109,[]],
di:[function(a){var z
-for(z=this.gUQ(this),z=H.VM(new H.a7(z,z.length,0,null),[H.Kp(z,0)]);z.G(););return!1},"call$1","gmc",2,0,null,23,[]],
+for(z=this.gUQ(this),z=H.VM(new H.a7(z,z.length,0,null),[H.Kp(z,0)]);z.G(););return!1},"call$1","gmc",2,0,null,28,[]],
V1:[function(a){var z
-for(z=this.gvc(this),z=H.VM(new H.a7(z,z.length,0,null),[H.Kp(z,0)]);z.G();)this.Rz(0,z.lo)},"call$0","gyP",0,0,null],
+for(z=this.gvc(this),z=H.VM(new H.a7(z,z.length,0,null),[H.Kp(z,0)]);z.G();)this.Rz(0,z.lo)},"call$0","gRa",0,0,null],
aN:[function(a,b){var z,y
for(z=this.gvc(this),z=H.VM(new H.a7(z,z.length,0,null),[H.Kp(z,0)]);z.G();){y=z.lo
-b.call$2(y,this.t(0,y))}},"call$1","gjw",2,0,null,115,[]],
+b.call$2(y,this.t(0,y))}},"call$1","gjw",2,0,null,117,[]],
gvc:function(a){var z,y,x,w
z=this.MW.attributes
y=H.VM([],[J.O])
@@ -17483,21 +16969,21 @@
$isZ0:true,
$asZ0:function(){return[J.O,J.O]}},
Zc:{
-"^":"Tp:346;a",
-call$2:[function(a,b){this.a.u(0,a,b)},"call$2",null,4,0,null,402,[],277,[],"call"],
+"^":"Tp:348;a",
+call$2:[function(a,b){this.a.u(0,a,b)},"call$2",null,4,0,null,442,[],272,[],"call"],
$isEH:true},
i7:{
"^":"tJ;MW",
-x4:[function(a){return this.MW.hasAttribute(a)},"call$1","gV9",2,0,null,42,[]],
-t:[function(a,b){return this.MW.getAttribute(b)},"call$1","gIA",2,0,null,42,[]],
-u:[function(a,b,c){this.MW.setAttribute(b,c)},"call$2","gj3",4,0,null,42,[],23,[]],
+x4:[function(a){return this.MW.hasAttribute(a)},"call$1","gV9",2,0,null,47,[]],
+t:[function(a,b){return this.MW.getAttribute(b)},"call$1","gIA",2,0,null,47,[]],
+u:[function(a,b,c){this.MW.setAttribute(b,c)},"call$2","gj3",4,0,null,47,[],28,[]],
Rz:[function(a,b){var z,y
z=this.MW
y=z.getAttribute(b)
z.removeAttribute(b)
-return y},"call$1","gRI",2,0,null,42,[]],
+return y},"call$1","guH",2,0,null,47,[]],
gB:function(a){return this.gvc(this).length},
-FJ:[function(a){return a.namespaceURI==null},"call$1","giG",2,0,null,264,[]]},
+FJ:[function(a){return a.namespaceURI==null},"call$1","giG",2,0,null,260,[]]},
nF:{
"^":"As;QX,Kd",
lF:[function(){var z=P.Ls(null,null,null,J.O)
@@ -17505,38 +16991,38 @@
return z},"call$0","gt8",0,0,null],
p5:[function(a){var z,y
z=C.Nm.zV(P.F(a,!0,null)," ")
-for(y=this.QX,y=H.VM(new H.a7(y,y.length,0,null),[H.Kp(y,0)]);y.G();)J.Pw(y.lo,z)},"call$1","gpJ",2,0,null,86,[]],
-OS:[function(a){this.Kd.aN(0,new W.vf(a))},"call$1","gFd",2,0,null,115,[]],
-O4:[function(a,b){return this.xz(new W.Iw(a,b))},function(a){return this.O4(a,null)},"Mf","call$2",null,"gMk",2,2,null,77,23,[],508,[]],
-Rz:[function(a,b){return this.xz(new W.Fc(b))},"call$1","gRI",2,0,null,23,[]],
-xz:[function(a){return this.Kd.es(0,!1,new W.hD(a))},"call$1","gVz",2,0,null,115,[]],
+for(y=this.QX,y=H.VM(new H.a7(y,y.length,0,null),[H.Kp(y,0)]);y.G();)J.Pw(y.lo,z)},"call$1","gVH",2,0,null,91,[]],
+OS:[function(a){this.Kd.aN(0,new W.vf(a))},"call$1","gFd",2,0,null,117,[]],
+O4:[function(a,b){return this.xz(new W.Iw(a,b))},function(a){return this.O4(a,null)},"qU","call$2",null,"gMk",2,2,null,82,28,[],475,[]],
+Rz:[function(a,b){return this.xz(new W.Fc(b))},"call$1","guH",2,0,null,28,[]],
+xz:[function(a){return this.Kd.es(0,!1,new W.hD(a))},"call$1","gVz",2,0,null,117,[]],
yJ:function(a){this.Kd=H.VM(new H.A8(P.F(this.QX,!0,null),new W.FK()),[null,null])},
static:{or:function(a){var z=new W.nF(a,null)
z.yJ(a)
return z}}},
FK:{
-"^":"Tp:107;",
-call$1:[function(a){return new W.I4(a)},"call$1",null,2,0,null,18,[],"call"],
+"^":"Tp:112;",
+call$1:[function(a){return new W.I4(a)},"call$1",null,2,0,null,19,[],"call"],
$isEH:true},
Si:{
-"^":"Tp:107;a",
-call$1:[function(a){return this.a.FV(0,a.lF())},"call$1",null,2,0,null,18,[],"call"],
+"^":"Tp:112;a",
+call$1:[function(a){return this.a.FV(0,a.lF())},"call$1",null,2,0,null,19,[],"call"],
$isEH:true},
vf:{
-"^":"Tp:107;a",
-call$1:[function(a){return a.OS(this.a)},"call$1",null,2,0,null,18,[],"call"],
+"^":"Tp:112;a",
+call$1:[function(a){return a.OS(this.a)},"call$1",null,2,0,null,19,[],"call"],
$isEH:true},
Iw:{
-"^":"Tp:107;a,b",
-call$1:[function(a){return a.O4(this.a,this.b)},"call$1",null,2,0,null,18,[],"call"],
+"^":"Tp:112;a,b",
+call$1:[function(a){return a.O4(this.a,this.b)},"call$1",null,2,0,null,19,[],"call"],
$isEH:true},
Fc:{
-"^":"Tp:107;a",
-call$1:[function(a){return J.V1(a,this.a)},"call$1",null,2,0,null,18,[],"call"],
+"^":"Tp:112;a",
+call$1:[function(a){return J.V1(a,this.a)},"call$1",null,2,0,null,19,[],"call"],
$isEH:true},
hD:{
-"^":"Tp:346;a",
-call$2:[function(a,b){return this.a.call$1(b)===!0||a===!0},"call$2",null,4,0,null,509,[],129,[],"call"],
+"^":"Tp:348;a",
+call$2:[function(a,b){return this.a.call$1(b)===!0||a===!0},"call$2",null,4,0,null,476,[],132,[],"call"],
$isEH:true},
I4:{
"^":"As;MW",
@@ -17545,36 +17031,36 @@
for(y=J.uf(this.MW).split(" "),y=H.VM(new H.a7(y,y.length,0,null),[H.Kp(y,0)]);y.G();){x=J.rr(y.lo)
if(x.length!==0)z.h(0,x)}return z},"call$0","gt8",0,0,null],
p5:[function(a){P.F(a,!0,null)
-J.Pw(this.MW,a.zV(0," "))},"call$1","gpJ",2,0,null,86,[]]},
+J.Pw(this.MW,a.zV(0," "))},"call$1","gVH",2,0,null,91,[]]},
e0:{
"^":"a;Ph",
-zc:[function(a,b){return H.VM(new W.RO(a,this.Ph,b),[null])},function(a){return this.zc(a,!1)},"aM","call$2$useCapture",null,"gII",2,3,null,152,18,[],298,[]],
-Qm:[function(a,b){return H.VM(new W.eu(a,this.Ph,b),[null])},function(a){return this.Qm(a,!1)},"f0","call$2$useCapture",null,"gAW",2,3,null,152,18,[],298,[]],
-jl:[function(a,b){return H.VM(new W.pu(a,b,this.Ph),[null])},function(a){return this.jl(a,!1)},"vo","call$2$useCapture",null,"gcJ",2,3,null,152,18,[],298,[]]},
+zc:[function(a,b){return H.VM(new W.RO(a,this.Ph,b),[null])},function(a){return this.zc(a,!1)},"aM","call$2$useCapture",null,"gII",2,3,null,210,19,[],296,[]],
+Qm:[function(a,b){return H.VM(new W.eu(a,this.Ph,b),[null])},function(a){return this.Qm(a,!1)},"f0","call$2$useCapture",null,"gAW",2,3,null,210,19,[],296,[]],
+jl:[function(a,b){return H.VM(new W.pu(a,b,this.Ph),[null])},function(a){return this.jl(a,!1)},"vo","call$2$useCapture",null,"gcJ",2,3,null,210,19,[],296,[]]},
RO:{
"^":"qh;uv,Ph,Sg",
KR:[function(a,b,c,d){var z=new W.Ov(0,this.uv,this.Ph,W.aF(a),this.Sg)
z.$builtinTypeInfo=this.$builtinTypeInfo
z.Zz()
-return z},function(a,b,c){return this.KR(a,null,b,c)},"zC",function(a){return this.KR(a,null,null,null)},"yI","call$4$cancelOnError$onDone$onError",null,null,"gp8",2,7,null,77,77,77,461,[],456,[],462,[],164,[]]},
+return z},function(a,b,c){return this.KR(a,null,b,c)},"zC",function(a){return this.KR(a,null,null,null)},"yI","call$4$cancelOnError$onDone$onError",null,null,"gp8",2,7,null,82,82,82,427,[],163,[],428,[],422,[]]},
eu:{
"^":"RO;uv,Ph,Sg",
WO:[function(a,b){var z=H.VM(new P.nO(new W.ie(b),this),[H.ip(this,"qh",0)])
-return H.VM(new P.t3(new W.Ea(b),z),[H.ip(z,"qh",0),null])},"call$1","grM",2,0,null,510,[]],
+return H.VM(new P.t3(new W.Ea(b),z),[H.ip(z,"qh",0),null])},"call$1","grM",2,0,null,477,[]],
$isqh:true},
ie:{
-"^":"Tp:107;a",
-call$1:[function(a){return J.NQ(J.l2(a),this.a)},"call$1",null,2,0,null,384,[],"call"],
+"^":"Tp:112;a",
+call$1:[function(a){return J.NQ(J.l2(a),this.a)},"call$1",null,2,0,null,368,[],"call"],
$isEH:true},
Ea:{
-"^":"Tp:107;b",
+"^":"Tp:112;b",
call$1:[function(a){J.og(a,this.b)
-return a},"call$1",null,2,0,null,18,[],"call"],
+return a},"call$1",null,2,0,null,19,[],"call"],
$isEH:true},
pu:{
"^":"qh;DI,Sg,Ph",
WO:[function(a,b){var z=H.VM(new P.nO(new W.i2(b),this),[H.ip(this,"qh",0)])
-return H.VM(new P.t3(new W.b0(b),z),[H.ip(z,"qh",0),null])},"call$1","grM",2,0,null,510,[]],
+return H.VM(new P.t3(new W.b0(b),z),[H.ip(z,"qh",0),null])},"call$1","grM",2,0,null,477,[]],
KR:[function(a,b,c,d){var z,y,x,w,v
z=H.VM(new W.qO(null,P.L5(null,null,null,[P.qh,null],[P.MO,null])),[null])
z.KS(null)
@@ -17582,16 +17068,16 @@
v.$builtinTypeInfo=[null]
z.h(0,v)}y=z.aV
y.toString
-return H.VM(new P.Ik(y),[H.Kp(y,0)]).KR(a,b,c,d)},function(a,b,c){return this.KR(a,null,b,c)},"zC",function(a){return this.KR(a,null,null,null)},"yI","call$4$cancelOnError$onDone$onError",null,null,"gp8",2,7,null,77,77,77,461,[],456,[],462,[],164,[]],
+return H.VM(new P.Ik(y),[H.Kp(y,0)]).KR(a,b,c,d)},function(a,b,c){return this.KR(a,null,b,c)},"zC",function(a){return this.KR(a,null,null,null)},"yI","call$4$cancelOnError$onDone$onError",null,null,"gp8",2,7,null,82,82,82,427,[],163,[],428,[],422,[]],
$isqh:true},
i2:{
-"^":"Tp:107;a",
-call$1:[function(a){return J.NQ(J.l2(a),this.a)},"call$1",null,2,0,null,384,[],"call"],
+"^":"Tp:112;a",
+call$1:[function(a){return J.NQ(J.l2(a),this.a)},"call$1",null,2,0,null,368,[],"call"],
$isEH:true},
b0:{
-"^":"Tp:107;b",
+"^":"Tp:112;b",
call$1:[function(a){J.og(a,this.b)
-return a},"call$1",null,2,0,null,18,[],"call"],
+return a},"call$1",null,2,0,null,19,[],"call"],
$isEH:true},
Ov:{
"^":"MO;VP,uv,Ph,u7,Sg",
@@ -17600,9 +17086,9 @@
this.uv=null
this.u7=null
return},"call$0","gZS",0,0,null],
-nB:[function(a,b){if(this.uv==null)return
+Fv:[function(a,b){if(this.uv==null)return
this.VP=this.VP+1
-this.Ns()},function(a){return this.nB(a,null)},"yy","call$1",null,"gAK",0,2,null,77,459,[]],
+this.Ns()},function(a){return this.Fv(a,null)},"yy","call$1",null,"gAK",0,2,null,82,425,[]],
gRW:function(){return this.VP>0},
QE:[function(){if(this.uv==null||this.VP<=0)return
this.VP=this.VP-1
@@ -17617,57 +17103,57 @@
z=this.eM
if(z.x4(b))return
y=this.aV
-z.u(0,b,b.zC(y.ght(y),new W.RX(this,b),this.aV.gXB()))},"call$1","ght",2,0,null,511,[]],
+z.u(0,b,b.zC(y.ght(y),new W.RX(this,b),this.aV.gGj()))},"call$1","ght",2,0,null,478,[]],
Rz:[function(a,b){var z=this.eM.Rz(0,b)
-if(z!=null)z.ed()},"call$1","gRI",2,0,null,511,[]],
+if(z!=null)z.ed()},"call$1","guH",2,0,null,478,[]],
cO:[function(a){var z,y
for(z=this.eM,y=z.gUQ(z),y=H.VM(new H.MH(null,J.GP(y.l6),y.T6),[H.Kp(y,0),H.Kp(y,1)]);y.G();)y.lo.ed()
z.V1(0)
-this.aV.cO(0)},"call$0","gJK",0,0,112],
+this.aV.cO(0)},"call$0","gJK",0,0,114],
KS:function(a){this.aV=P.bK(this.gJK(this),null,!0,a)}},
RX:{
-"^":"Tp:113;a,b",
+"^":"Tp:115;a,b",
call$0:[function(){return this.a.Rz(0,this.b)},"call$0",null,0,0,null,"call"],
$isEH:true},
-hP:{
-"^":"a;vm",
-cN:function(a){return this.vm.call$1(a)},
-zc:[function(a,b){return H.VM(new W.RO(a,this.cN(a),b),[null])},function(a){return this.zc(a,!1)},"aM","call$2$useCapture",null,"gII",2,3,null,152,18,[],298,[]]},
+bO:{
+"^":"a;Ob",
+cN:function(a){return this.Ob.call$1(a)},
+zc:[function(a,b){return H.VM(new W.RO(a,this.cN(a),b),[null])},function(a){return this.zc(a,!1)},"aM","call$2$useCapture",null,"gII",2,3,null,210,19,[],296,[]]},
Gm:{
"^":"a;",
gA:function(a){return H.VM(new W.W9(a,this.gB(a),-1,null),[H.ip(a,"Gm",0)])},
-h:[function(a,b){throw H.b(P.f("Cannot add to immutable List."))},"call$1","ght",2,0,null,23,[]],
-FV:[function(a,b){throw H.b(P.f("Cannot add to immutable List."))},"call$1","gDY",2,0,null,114,[]],
-GT:[function(a,b){throw H.b(P.f("Cannot sort immutable List."))},"call$1","gH7",0,2,null,77,133,[]],
-xe:[function(a,b,c){throw H.b(P.f("Cannot add to immutable List."))},"call$2","gQG",4,0,null,47,[],129,[]],
-KI:[function(a,b){throw H.b(P.f("Cannot remove from immutable List."))},"call$1","gNM",2,0,null,512,[]],
-Rz:[function(a,b){throw H.b(P.f("Cannot remove from immutable List."))},"call$1","gRI",2,0,null,6,[]],
-YW:[function(a,b,c,d,e){throw H.b(P.f("Cannot setRange on immutable List."))},"call$4","gaQ",6,2,null,335,120,[],121,[],114,[],122,[]],
+h:[function(a,b){throw H.b(P.f("Cannot add to immutable List."))},"call$1","ght",2,0,null,28,[]],
+FV:[function(a,b){throw H.b(P.f("Cannot add to immutable List."))},"call$1","gDY",2,0,null,116,[]],
+GT:[function(a,b){throw H.b(P.f("Cannot sort immutable List."))},"call$1","gH7",0,2,null,82,122,[]],
+xe:[function(a,b,c){throw H.b(P.f("Cannot add to immutable List."))},"call$2","gQG",4,0,null,52,[],132,[]],
+KI:[function(a,b){throw H.b(P.f("Cannot remove from immutable List."))},"call$1","gNM",2,0,null,479,[]],
+Rz:[function(a,b){throw H.b(P.f("Cannot remove from immutable List."))},"call$1","guH",2,0,null,6,[]],
+YW:[function(a,b,c,d,e){throw H.b(P.f("Cannot setRange on immutable List."))},"call$4","gam",6,2,null,332,123,[],124,[],116,[],125,[]],
$isList:true,
-$asWO:null,
+$aszM:null,
$isyN:true,
-$iscX:true,
-$ascX:null},
+$isQV:true,
+$asQV:null},
Of:{
"^":"ar;xa",
gA:function(a){return H.VM(new W.Qg(J.GP(this.xa)),[null])},
gB:function(a){return this.xa.length},
-h:[function(a,b){J.bi(this.xa,b)},"call$1","ght",2,0,null,129,[]],
-Rz:[function(a,b){return J.V1(this.xa,b)},"call$1","gRI",2,0,null,129,[]],
-V1:[function(a){J.U2(this.xa)},"call$0","gyP",0,0,null],
+h:[function(a,b){J.bi(this.xa,b)},"call$1","ght",2,0,null,132,[]],
+Rz:[function(a,b){return J.V1(this.xa,b)},"call$1","guH",2,0,null,132,[]],
+V1:[function(a){J.U2(this.xa)},"call$0","gRa",0,0,null],
t:[function(a,b){var z=this.xa
if(b>>>0!==b||b>=z.length)return H.e(z,b)
-return z[b]},"call$1","gIA",2,0,null,47,[]],
+return z[b]},"call$1","gIA",2,0,null,52,[]],
u:[function(a,b,c){var z=this.xa
if(b>>>0!==b||b>=z.length)return H.e(z,b)
-z[b]=c},"call$2","gj3",4,0,null,47,[],23,[]],
+z[b]=c},"call$2","gj3",4,0,null,52,[],28,[]],
sB:function(a,b){J.wg(this.xa,b)},
-GT:[function(a,b){J.LH(this.xa,b)},"call$1","gH7",0,2,null,77,133,[]],
-XU:[function(a,b,c){return J.hf(this.xa,b,c)},function(a,b){return this.XU(a,b,0)},"u8","call$2",null,"gIz",2,2,null,335,129,[],120,[]],
-Pk:[function(a,b,c){return J.pB(this.xa,b,c)},function(a,b){return this.Pk(a,b,null)},"cn","call$2",null,"gph",2,2,null,77,129,[],120,[]],
-xe:[function(a,b,c){return J.Nv(this.xa,b,c)},"call$2","gQG",4,0,null,47,[],129,[]],
-KI:[function(a,b){return J.tH(this.xa,b)},"call$1","gNM",2,0,null,47,[]],
-YW:[function(a,b,c,d,e){J.QQ(this.xa,b,c,d,e)},"call$4","gaQ",6,2,null,335,120,[],121,[],114,[],122,[]]},
+GT:[function(a,b){J.LH(this.xa,b)},"call$1","gH7",0,2,null,82,122,[]],
+XU:[function(a,b,c){return J.aK(this.xa,b,c)},function(a,b){return this.XU(a,b,0)},"u8","call$2",null,"gIz",2,2,null,332,132,[],123,[]],
+Pk:[function(a,b,c){return J.ff(this.xa,b,c)},function(a,b){return this.Pk(a,b,null)},"cn","call$2",null,"gcb",2,2,null,82,132,[],123,[]],
+xe:[function(a,b,c){return J.BM(this.xa,b,c)},"call$2","gQG",4,0,null,52,[],132,[]],
+KI:[function(a,b){return J.tH(this.xa,b)},"call$1","gNM",2,0,null,52,[]],
+YW:[function(a,b,c,d,e){J.L0(this.xa,b,c,d,e)},"call$4","gam",6,2,null,332,123,[],124,[],116,[],125,[]]},
Qg:{
"^":"a;je",
G:[function(){return this.je.G()},"call$0","gqy",0,0,null],
@@ -17684,29 +17170,30 @@
return!1},"call$0","gqy",0,0,null],
gl:function(){return this.QZ}},
vZ:{
-"^":"Tp:107;a,b",
+"^":"Tp:112;a,b",
call$1:[function(a){var z=H.Va(this.b)
Object.defineProperty(a, init.dispatchPropertyName, {value: z, enumerable: false, writable: true, configurable: true})
a.constructor=a.__proto__.constructor
-return this.a(a)},"call$1",null,2,0,null,41,[],"call"],
+return this.a(a)},"call$1",null,2,0,null,46,[],"call"],
$isEH:true},
dW:{
"^":"a;Ui",
geT:function(a){return W.P1(this.Ui.parent)},
cO:[function(a){return this.Ui.close()},"call$0","gJK",0,0,null],
-xc:[function(a,b,c,d){this.Ui.postMessage(b,c)},function(a,b,c){return this.xc(a,b,c,null)},"X6","call$3",null,"gmF",4,2,null,77,20,[],328,[],329,[]],
+xc:[function(a,b,c,d){this.Ui.postMessage(b,c)},function(a,b,c){return this.xc(a,b,c,null)},"X6","call$3",null,"gmF",4,2,null,82,22,[],326,[],327,[]],
gI:function(a){return H.vh(P.SY(null))},
-On:[function(a,b,c,d){return H.vh(P.SY(null))},"call$3","gIV",4,2,null,77,11,[],297,[],298,[]],
-Y9:[function(a,b,c,d){return H.vh(P.SY(null))},"call$3","gcF",4,2,null,77,11,[],297,[],298,[]],
+On:[function(a,b,c,d){return H.vh(P.SY(null))},"call$3","gIV",4,2,null,82,11,[],295,[],296,[]],
+Y9:[function(a,b,c,d){return H.vh(P.SY(null))},"call$3","gcF",4,2,null,82,11,[],295,[],296,[]],
$isD0:true,
$isGv:true,
static:{P1:[function(a){if(a===window)return a
-else return new W.dW(a)},"call$1","lG",2,0,null,237,[]]}},
+else return new W.dW(a)},"call$1","lG",2,0,null,233,[]]}},
Dk:{
"^":"a;WK",
gcC:function(a){return this.WK.hash},
scC:function(a,b){this.WK.hash=b},
gmH:function(a){return this.WK.href},
+VD:[function(a){return this.WK.reload()},"call$0","gQU",0,0,null],
bu:[function(a){return this.WK.toString()},"call$0","gXo",0,0,null],
$iscS:true,
$isGv:true}}],["dart.dom.indexed_db","dart:indexed_db",,P,{
@@ -17728,7 +17215,7 @@
"^":"d5;",
$isGv:true,
"%":"SVGAnimateColorElement|SVGAnimateElement|SVGAnimateMotionElement|SVGAnimateTransformElement|SVGAnimationElement|SVGSetElement"},
-mk:{
+vO:{
"^":"d0;",
$isGv:true,
"%":"SVGCircleElement"},
@@ -17748,7 +17235,7 @@
"^":"d5;",
$isGv:true,
"%":"SVGFEBlendElement"},
-bd:{
+lv:{
"^":"d5;t5:type=,UQ:values=",
$isGv:true,
"%":"SVGFEColorMatrixElement"},
@@ -17768,7 +17255,7 @@
"^":"d5;",
$isGv:true,
"%":"SVGFEDiffuseLightingElement"},
-wf:{
+kK:{
"^":"d5;",
$isGv:true,
"%":"SVGFEDisplacementMapElement"},
@@ -17776,7 +17263,7 @@
"^":"d5;",
$isGv:true,
"%":"SVGFEFloodElement"},
-tk:{
+Ob:{
"^":"d5;",
$isGv:true,
"%":"SVGFEGaussianBlurElement"},
@@ -17796,11 +17283,11 @@
"^":"d5;",
$isGv:true,
"%":"SVGFEOffsetElement"},
-kK:{
+um:{
"^":"d5;",
$isGv:true,
"%":"SVGFESpecularLightingElement"},
-um:{
+kL:{
"^":"d5;",
$isGv:true,
"%":"SVGFETileElement"},
@@ -17835,7 +17322,7 @@
"^":"d0;",
$isGv:true,
"%":"SVGLineElement"},
-uzr:{
+Jq:{
"^":"d5;",
$isGv:true,
"%":"SVGMarkerElement"},
@@ -17843,7 +17330,7 @@
"^":"d5;",
$isGv:true,
"%":"SVGMaskElement"},
-lZ:{
+AW:{
"^":"d0;",
$isGv:true,
"%":"SVGPathElement"},
@@ -17855,7 +17342,7 @@
"^":"d0;",
$isGv:true,
"%":"SVGPolygonElement"},
-mO:{
+GH:{
"^":"d0;",
$isGv:true,
"%":"SVGPolylineElement"},
@@ -17876,7 +17363,7 @@
return a._cssClassSet},
gwd:function(a){return H.VM(new P.D7(a,new W.e7(a)),[W.cv])},
swd:function(a,b){var z=H.VM(new P.D7(a,new W.e7(a)),[W.cv])
-z.h2.NL.textContent=""
+J.c9(z.h2.NL,"")
z.FV(0,b)},
gi9:function(a){return C.mt.f0(a)},
gVl:function(a){return C.pi.f0(a)},
@@ -17886,7 +17373,7 @@
"%":"SVGAltGlyphDefElement|SVGAltGlyphItemElement|SVGComponentTransferFunctionElement|SVGDescElement|SVGFEDistantLightElement|SVGFEFuncAElement|SVGFEFuncBElement|SVGFEFuncGElement|SVGFEFuncRElement|SVGFEMergeNodeElement|SVGFEPointLightElement|SVGFESpotLightElement|SVGFontElement|SVGFontFaceElement|SVGFontFaceFormatElement|SVGFontFaceNameElement|SVGFontFaceSrcElement|SVGFontFaceUriElement|SVGGlyphElement|SVGHKernElement|SVGMetadataElement|SVGMissingGlyphElement|SVGStopElement|SVGTitleElement|SVGVKernElement;SVGElement"},
hy:{
"^":"zp;",
-Kb:[function(a,b){return a.getElementById(b)},"call$1","giu",2,0,null,293,[]],
+Kb:[function(a,b){return a.getElementById(b)},"call$1","giu",2,0,null,291,[]],
$ishy:true,
$isGv:true,
"%":"SVGSVGElement"},
@@ -17925,7 +17412,7 @@
"^":"d5;",
$isGv:true,
"%":"SVGCursorElement"},
-cB:{
+hW:{
"^":"d5;",
$isGv:true,
"%":"SVGFEDropShadowElement"},
@@ -17945,27 +17432,27 @@
if(z==null)return y
for(x=z.split(" "),x=H.VM(new H.a7(x,x.length,0,null),[H.Kp(x,0)]);x.G();){w=J.rr(x.lo)
if(w.length!==0)y.h(0,w)}return y},"call$0","gt8",0,0,null],
-p5:[function(a){this.LO.setAttribute("class",a.zV(0," "))},"call$1","gpJ",2,0,null,86,[]]}}],["dart.dom.web_sql","dart:web_sql",,P,{
+p5:[function(a){this.LO.setAttribute("class",a.zV(0," "))},"call$1","gVH",2,0,null,91,[]]}}],["dart.dom.web_sql","dart:web_sql",,P,{
"^":"",
TM:{
"^":"Gv;tT:code=,G1:message=",
"%":"SQLError"}}],["dart.isolate","dart:isolate",,P,{
"^":"",
-IU:{
+hq:{
"^":"a;",
-$isIU:true,
+$ishq:true,
static:{Jz:function(){return new H.ku((Math.random()*0x100000000>>>0)+(Math.random()*0x100000000>>>0)*4294967296)}}}}],["dart.js","dart:js",,P,{
"^":"",
-xZ:[function(a,b){return function(_call, f, captureThis) {return function() {return _call(f, captureThis, this, Array.prototype.slice.apply(arguments));}}(P.R4, a, b)},"call$2$captureThis","Kc",2,3,null,152,115,[],238,[]],
+xZ:[function(a,b){return function(_call, f, captureThis) {return function() {return _call(f, captureThis, this, Array.prototype.slice.apply(arguments));}}(P.R4, a, b)},"call$2$captureThis","oo",2,3,null,210,117,[],234,[]],
R4:[function(a,b,c,d){var z
if(b===!0){z=[c]
C.Nm.FV(z,d)
-d=z}return P.wY(H.Ek(a,P.F(J.C0(d,P.Xl()),!0,null),P.Te(null)))},"call$4","qH",8,0,null,156,[],238,[],169,[],82,[]],
+d=z}return P.wY(H.Ek(a,P.F(J.C0(d,P.Xl()),!0,null),P.Te(null)))},"call$4","qH",8,0,null,155,[],234,[],168,[],87,[]],
Dm:[function(a,b,c){var z
if(Object.isExtensible(a))try{Object.defineProperty(a, b, { value: c})
-return!0}catch(z){H.Ru(z)}return!1},"call$3","bE",6,0,null,91,[],12,[],23,[]],
+return!0}catch(z){H.Ru(z)}return!1},"call$3","bE",6,0,null,96,[],12,[],28,[]],
Om:[function(a,b){if(Object.prototype.hasOwnProperty.call(a,b))return a[b]
-return},"call$2","Cb",4,0,null,91,[],12,[]],
+return},"call$2","Cb",4,0,null,96,[],12,[]],
wY:[function(a){var z
if(a==null)return
else{if(typeof a!=="string")if(typeof a!=="number")if(typeof a!=="boolean"){z=J.x(a)
@@ -17977,44 +17464,45 @@
if(typeof a==="object"&&a!==null&&!!z.$isiP)return H.o2(a)
else if(typeof a==="object"&&a!==null&&!!z.$isE4)return a.eh
else if(typeof a==="object"&&a!==null&&!!z.$isEH)return P.hE(a,"$dart_jsFunction",new P.DV())
-else return P.hE(a,"_$dart_jsObject",new P.Hp())}}},"call$1","En",2,0,107,91,[]],
+else return P.hE(a,"_$dart_jsObject",new P.Hp($.hs()))}}},"call$1","En",2,0,112,96,[]],
hE:[function(a,b,c){var z=P.Om(a,b)
if(z==null){z=c.call$1(a)
-P.Dm(a,b,z)}return z},"call$3","nB",6,0,null,91,[],63,[],240,[]],
+P.Dm(a,b,z)}return z},"call$3","dw",6,0,null,96,[],68,[],236,[]],
dU:[function(a){var z
if(a==null||typeof a=="string"||typeof a=="number"||typeof a=="boolean")return a
else{if(a instanceof Object){z=J.x(a)
z=typeof a==="object"&&a!==null&&!!z.$isAz||typeof a==="object"&&a!==null&&!!z.$isea||typeof a==="object"&&a!==null&&!!z.$ishF||typeof a==="object"&&a!==null&&!!z.$isSg||typeof a==="object"&&a!==null&&!!z.$isKV||typeof a==="object"&&a!==null&&!!z.$isHY||typeof a==="object"&&a!==null&&!!z.$isu9}else z=!1
if(z)return a
-else if(a instanceof Date)return P.Wu(a.getMilliseconds(),!1)
-else if(a.constructor===DartObject)return a.o
-else return P.ND(a)}},"call$1","Xl",2,0,195,91,[]],
+else if(a instanceof Date)return P.Wu(a.getTime(),!1)
+else if(a.constructor===$.hs())return a.o
+else return P.ND(a)}},"call$1","Xl",2,0,194,96,[]],
ND:[function(a){if(typeof a=="function")return P.iQ(a,$.Dp(),new P.Nz())
else if(a instanceof Array)return P.iQ(a,$.Iq(),new P.Jd())
-else return P.iQ(a,$.Iq(),new P.QS())},"call$1","ln",2,0,null,91,[]],
+else return P.iQ(a,$.Iq(),new P.QS())},"call$1","ln",2,0,null,96,[]],
iQ:[function(a,b,c){var z=P.Om(a,b)
if(z==null||!(a instanceof Object)){z=c.call$1(a)
-P.Dm(a,b,z)}return z},"call$3","yF",6,0,null,91,[],63,[],240,[]],
+P.Dm(a,b,z)}return z},"call$3","yF",6,0,null,96,[],68,[],236,[]],
E4:{
"^":"a;eh",
t:[function(a,b){if(typeof b!=="string"&&typeof b!=="number")throw H.b(new P.AT("property is not a String or num"))
-return P.dU(this.eh[b])},"call$1","gIA",2,0,null,66,[]],
+return P.dU(this.eh[b])},"call$1","gIA",2,0,null,71,[]],
u:[function(a,b,c){if(typeof b!=="string"&&typeof b!=="number")throw H.b(new P.AT("property is not a String or num"))
-this.eh[b]=P.wY(c)},"call$2","gj3",4,0,null,66,[],23,[]],
+this.eh[b]=P.wY(c)},"call$2","gj3",4,0,null,71,[],28,[]],
giO:function(a){return 0},
n:[function(a,b){var z
if(b==null)return!1
z=J.x(b)
-return typeof b==="object"&&b!==null&&!!z.$isE4&&this.eh===b.eh},"call$1","gUJ",2,0,null,104,[]],
-Bm:[function(a){return a in this.eh},"call$1","gVOe",2,0,null,66,[]],
+return typeof b==="object"&&b!==null&&!!z.$isE4&&this.eh===b.eh},"call$1","gUJ",2,0,null,109,[]],
+Bm:[function(a){return a in this.eh},"call$1","gVOe",2,0,null,71,[]],
bu:[function(a){var z,y
try{z=String(this.eh)
return z}catch(y){H.Ru(y)
return P.a.prototype.bu.call(this,this)}},"call$0","gXo",0,0,null],
V7:[function(a,b){var z,y
z=this.eh
-y=b==null?null:P.F(J.C0(b,P.En()),!0,null)
-return P.dU(z[a].apply(z,y))},function(a){return this.V7(a,null)},"nQ","call$2",null,"gwK",2,2,null,77,224,[],268,[]],
+if(b==null)y=null
+else{b.toString
+y=P.F(H.VM(new H.A8(b,P.En()),[null,null]),!0,null)}return P.dU(z[a].apply(z,y))},function(a){return this.V7(a,null)},"nQ","call$2",null,"gah",2,2,null,82,220,[],17,[]],
$isE4:true,
static:{uw:function(a,b){var z,y,x
z=P.wY(a)
@@ -18024,9 +17512,9 @@
C.Nm.FV(y,H.VM(new H.A8(b,P.En()),[null,null]))
x=z.bind.apply(z,y)
String(x)
-return P.ND(new x())},jT:function(a){return P.ND(P.M0(a))},M0:[function(a){return new P.Gn(P.UD(null,null)).call$1(a)},"call$1","Ij",2,0,null,239,[]]}},
+return P.ND(new x())},jT:function(a){return P.ND(P.M0(a))},M0:[function(a){return new P.Gn(P.UD(null,null)).call$1(a)},"call$1","Ij",2,0,null,235,[]]}},
Gn:{
-"^":"Tp:107;a",
+"^":"Tp:112;a",
call$1:[function(a){var z,y,x,w,v
z=this.a
if(z.x4(a))return z.t(0,a)
@@ -18034,10 +17522,10 @@
if(typeof a==="object"&&a!==null&&!!y.$isZ0){x={}
z.u(0,a,x)
for(z=J.GP(y.gvc(a));z.G();){w=z.gl()
-x[w]=this.call$1(y.t(a,w))}return x}else if(typeof a==="object"&&a!==null&&(a.constructor===Array||!!y.$iscX)){v=[]
+x[w]=this.call$1(y.t(a,w))}return x}else if(typeof a==="object"&&a!==null&&(a.constructor===Array||!!y.$isQV)){v=[]
z.u(0,a,v)
C.Nm.FV(v,y.ez(a,this))
-return v}else return P.wY(a)},"call$1",null,2,0,null,91,[],"call"],
+return v}else return P.wY(a)},"call$1",null,2,0,null,96,[],"call"],
$isEH:true},
r7:{
"^":"E4;eh"},
@@ -18048,31 +17536,31 @@
if(typeof z!=="number")return H.s(z)
z=b>=z}else z=!0
else z=!1
-if(z)throw H.b(P.TE(b,0,P.E4.prototype.t.call(this,this,"length")))},"call$1","gvs",2,0,null,47,[]],
+if(z)throw H.b(P.TE(b,0,P.E4.prototype.t.call(this,this,"length")))},"call$1","gvs",2,0,null,52,[]],
t:[function(a,b){var z
if(typeof b==="number"&&b===C.CD.yu(b)){if(typeof b==="number"&&Math.floor(b)===b)if(!(b<0)){z=P.E4.prototype.t.call(this,this,"length")
if(typeof z!=="number")return H.s(z)
z=b>=z}else z=!0
else z=!1
-if(z)H.vh(P.TE(b,0,P.E4.prototype.t.call(this,this,"length")))}return P.E4.prototype.t.call(this,this,b)},"call$1","gIA",2,0,null,47,[]],
+if(z)H.vh(P.TE(b,0,P.E4.prototype.t.call(this,this,"length")))}return P.E4.prototype.t.call(this,this,b)},"call$1","gIA",2,0,null,52,[]],
u:[function(a,b,c){var z
if(typeof b==="number"&&b===C.CD.yu(b)){if(typeof b==="number"&&Math.floor(b)===b)if(!(b<0)){z=P.E4.prototype.t.call(this,this,"length")
if(typeof z!=="number")return H.s(z)
z=b>=z}else z=!0
else z=!1
-if(z)H.vh(P.TE(b,0,P.E4.prototype.t.call(this,this,"length")))}P.E4.prototype.u.call(this,this,b,c)},"call$2","gj3",4,0,null,47,[],23,[]],
+if(z)H.vh(P.TE(b,0,P.E4.prototype.t.call(this,this,"length")))}P.E4.prototype.u.call(this,this,b,c)},"call$2","gj3",4,0,null,52,[],28,[]],
gB:function(a){return P.E4.prototype.t.call(this,this,"length")},
sB:function(a,b){P.E4.prototype.u.call(this,this,"length",b)},
-h:[function(a,b){this.V7("push",[b])},"call$1","ght",2,0,null,23,[]],
-FV:[function(a,b){this.V7("push",b instanceof Array?b:P.F(b,!0,null))},"call$1","gDY",2,0,null,114,[]],
+h:[function(a,b){this.V7("push",[b])},"call$1","ght",2,0,null,28,[]],
+FV:[function(a,b){this.V7("push",b instanceof Array?b:P.F(b,!0,null))},"call$1","gDY",2,0,null,116,[]],
xe:[function(a,b,c){var z
if(b>=0){z=J.WB(P.E4.prototype.t.call(this,this,"length"),1)
if(typeof z!=="number")return H.s(z)
z=b>=z}else z=!0
if(z)H.vh(P.TE(b,0,P.E4.prototype.t.call(this,this,"length")))
-this.V7("splice",[b,0,c])},"call$2","gQG",4,0,null,47,[],129,[]],
+this.V7("splice",[b,0,c])},"call$2","gQG",4,0,null,52,[],132,[]],
KI:[function(a,b){this.fz(0,b)
-return J.UQ(this.V7("splice",[b,1]),0)},"call$1","gNM",2,0,null,47,[]],
+return J.UQ(this.V7("splice",[b,1]),0)},"call$1","gNM",2,0,null,52,[]],
YW:[function(a,b,c,d,e){var z,y,x
if(b>=0){z=P.E4.prototype.t.call(this,this,"length")
if(typeof z!=="number")return H.s(z)
@@ -18086,38 +17574,37 @@
x=[b,y]
z=new H.nH(d,e,null)
z.$builtinTypeInfo=[null]
-if(e<0)H.vh(P.N(e))
C.Nm.FV(x,z.qZ(0,y))
-this.V7("splice",x)},"call$4","gaQ",6,2,null,335,120,[],121,[],114,[],122,[]],
-GT:[function(a,b){this.V7("sort",[b])},"call$1","gH7",0,2,null,77,133,[]]},
+this.V7("splice",x)},"call$4","gam",6,2,null,332,123,[],124,[],116,[],125,[]],
+GT:[function(a,b){this.V7("sort",[b])},"call$1","gH7",0,2,null,82,122,[]]},
Wk:{
"^":"E4+lD;",
$isList:true,
-$asWO:null,
+$aszM:null,
$isyN:true,
-$iscX:true,
-$ascX:null},
+$isQV:true,
+$asQV:null},
DV:{
-"^":"Tp:107;",
+"^":"Tp:112;",
call$1:[function(a){var z=P.xZ(a,!1)
P.Dm(z,$.Dp(),a)
-return z},"call$1",null,2,0,null,91,[],"call"],
+return z},"call$1",null,2,0,null,96,[],"call"],
$isEH:true},
Hp:{
-"^":"Tp:107;",
-call$1:[function(a){return new DartObject(a)},"call$1",null,2,0,null,91,[],"call"],
+"^":"Tp:112;a",
+call$1:[function(a){return new this.a(a)},"call$1",null,2,0,null,96,[],"call"],
$isEH:true},
Nz:{
-"^":"Tp:107;",
-call$1:[function(a){return new P.r7(a)},"call$1",null,2,0,null,91,[],"call"],
+"^":"Tp:112;",
+call$1:[function(a){return new P.r7(a)},"call$1",null,2,0,null,96,[],"call"],
$isEH:true},
Jd:{
-"^":"Tp:107;",
-call$1:[function(a){return H.VM(new P.Tz(a),[null])},"call$1",null,2,0,null,91,[],"call"],
+"^":"Tp:112;",
+call$1:[function(a){return H.VM(new P.Tz(a),[null])},"call$1",null,2,0,null,96,[],"call"],
$isEH:true},
QS:{
-"^":"Tp:107;",
-call$1:[function(a){return new P.E4(a)},"call$1",null,2,0,null,91,[],"call"],
+"^":"Tp:112;",
+call$1:[function(a){return new P.E4(a)},"call$1",null,2,0,null,96,[],"call"],
$isEH:true}}],["dart.math","dart:math",,P,{
"^":"",
J:[function(a,b){var z
@@ -18129,7 +17616,7 @@
if(a===0)z=b===0?1/b<0:b<0
else z=!1
if(z||isNaN(b))return b
-return a}return a},"call$2","yT",4,0,null,128,[],188,[]],
+return a}return a},"call$2","If",4,0,null,131,[],187,[]],
y:[function(a,b){if(typeof a!=="number")throw H.b(new P.AT(a))
if(typeof b!=="number")throw H.b(new P.AT(b))
if(a>b)return a
@@ -18137,7 +17624,7 @@
if(typeof b==="number"){if(typeof a==="number")if(a===0)return a+b
if(C.ON.gG0(b))return b
return a}if(b===0&&C.CD.gzP(a))return b
-return a},"call$2","Rb",4,0,null,128,[],188,[]]}],["dart.mirrors","dart:mirrors",,P,{
+return a},"call$2","Rb",4,0,null,131,[],187,[]]}],["dart.mirrors","dart:mirrors",,P,{
"^":"",
re:[function(a){var z,y
z=J.x(a)
@@ -18145,9 +17632,9 @@
y=P.o1(a)
z=J.x(y)
if(typeof y!=="object"||y===null||!z.$isMs)throw H.b(new P.AT(H.d(a)+" does not denote a class"))
-return y.gJi()},"call$1","vG",2,0,null,42,[]],
+return y.gJi()},"call$1","vG",2,0,null,47,[]],
o1:[function(a){if(J.de(a,C.HH)){$.Cm().toString
-return $.P8()}return H.jO(a.gLU())},"call$1","o9",2,0,null,42,[]],
+return $.P8()}return H.jO(a.gLU())},"call$1","o9",2,0,null,47,[]],
ej:{
"^":"a;",
$isej:true},
@@ -18175,9 +17662,9 @@
$isej:true,
$isX9:true,
$isNL:true},
-ac:{
+Fw:{
"^":"X9;",
-$isac:true},
+$isFw:true},
RS:{
"^":"a;",
$isRS:true,
@@ -18195,9 +17682,9 @@
$isNL:true,
$isej:true},
Lw:{
-"^":"a;ew,yz,nV,Li"}}],["dart.pkg.collection.wrappers","package:collection/wrappers.dart",,Q,{
+"^":"a;ew,yz,nV,f9"}}],["dart.pkg.collection.wrappers","package:collection/wrappers.dart",,Q,{
"^":"",
-ah:[function(){throw H.b(P.f("Cannot modify an unmodifiable Map"))},"call$0","A9",0,0,null],
+ah:[function(){throw H.b(P.f("Cannot modify an unmodifiable Map"))},"call$0","rX",0,0,null],
Gj:{
"^":"U4;EV"},
U4:{
@@ -18205,26 +17692,26 @@
$isZ0:true},
B8q:{
"^":"a;",
-u:[function(a,b,c){return Q.ah()},"call$2","gj3",4,0,null,42,[],23,[]],
-FV:[function(a,b){return Q.ah()},"call$1","gDY",2,0,null,104,[]],
-Rz:[function(a,b){Q.ah()},"call$1","gRI",2,0,null,42,[]],
-V1:[function(a){return Q.ah()},"call$0","gyP",0,0,null],
+u:[function(a,b,c){return Q.ah()},"call$2","gj3",4,0,null,47,[],28,[]],
+FV:[function(a,b){return Q.ah()},"call$1","gDY",2,0,null,109,[]],
+Rz:[function(a,b){Q.ah()},"call$1","guH",2,0,null,47,[]],
+V1:[function(a){return Q.ah()},"call$0","gRa",0,0,null],
$isZ0:true},
Nx:{
"^":"a;",
-t:[function(a,b){return this.EV.t(0,b)},"call$1","gIA",2,0,null,42,[]],
-u:[function(a,b,c){this.EV.u(0,b,c)},"call$2","gj3",4,0,null,42,[],23,[]],
-FV:[function(a,b){this.EV.FV(0,b)},"call$1","gDY",2,0,null,104,[]],
-V1:[function(a){this.EV.V1(0)},"call$0","gyP",0,0,null],
-x4:[function(a){return this.EV.x4(a)},"call$1","gV9",2,0,null,42,[]],
-di:[function(a){return this.EV.di(a)},"call$1","gmc",2,0,null,23,[]],
-aN:[function(a,b){this.EV.aN(0,b)},"call$1","gjw",2,0,null,115,[]],
+t:[function(a,b){return this.EV.t(0,b)},"call$1","gIA",2,0,null,47,[]],
+u:[function(a,b,c){this.EV.u(0,b,c)},"call$2","gj3",4,0,null,47,[],28,[]],
+FV:[function(a,b){this.EV.FV(0,b)},"call$1","gDY",2,0,null,109,[]],
+V1:[function(a){this.EV.V1(0)},"call$0","gRa",0,0,null],
+x4:[function(a){return this.EV.x4(a)},"call$1","gV9",2,0,null,47,[]],
+di:[function(a){return this.EV.di(a)},"call$1","gmc",2,0,null,28,[]],
+aN:[function(a,b){this.EV.aN(0,b)},"call$1","gjw",2,0,null,117,[]],
gl0:function(a){return this.EV.X5===0},
gor:function(a){return this.EV.X5!==0},
gvc:function(a){var z=this.EV
return H.VM(new P.i5(z),[H.Kp(z,0)])},
gB:function(a){return this.EV.X5},
-Rz:[function(a,b){return this.EV.Rz(0,b)},"call$1","gRI",2,0,null,42,[]],
+Rz:[function(a,b){return this.EV.Rz(0,b)},"call$1","guH",2,0,null,47,[]],
gUQ:function(a){var z=this.EV
return z.gUQ(z)},
$isZ0:true}}],["dart.typed_data.implementation","dart:_native_typed_data",,H,{
@@ -18244,18 +17731,13 @@
"^":"Gv;",
J2:[function(a,b,c){var z=J.Wx(b)
if(z.C(b,0)||z.F(b,c))throw H.b(P.TE(b,0,c))
-else throw H.b(new P.AT("Invalid list index "+H.d(b)))},"call$2","gYE",4,0,null,47,[],330,[]],
-XL:[function(a,b,c){if(b>>>0!=b||J.J5(b,c))this.J2(a,b,c)},"call$2","gDR",4,0,null,47,[],330,[]],
-PZ:[function(a,b,c,d){var z=d+1
-this.XL(a,b,z)
-if(c==null)return d
-this.XL(a,c,z)
-if(typeof c!=="number")return H.s(c)
-if(b>c)throw H.b(P.TE(b,0,c))
-return c},"call$3","gyD",6,0,null,120,[],121,[],330,[]],
+else throw H.b(new P.AT("Invalid list index "+H.d(b)))},"call$2","gYE",4,0,null,52,[],328,[]],
+ZF:[function(a,b,c){if(b>>>0!==b||b>=c)this.J2(a,b,c)},"call$2","gDR",4,0,null,52,[],328,[]],
+PZ:[function(a,b,c,d){this.ZF(a,b,d+1)
+return d},"call$3","gyD",6,0,null,123,[],124,[],328,[]],
$ispF:true,
$isHY:true,
-"%":";ArrayBufferView;LZ|Ob|Ip|Dg|Nb|nA|Pg"},
+"%":";ArrayBufferView;LZ|Ui|Ip|Dg|ObS|nA|Pg"},
df:{
"^":"pF;",
gbx:function(a){return C.T1},
@@ -18265,119 +17747,119 @@
"^":"Dg;",
gbx:function(a){return C.hN},
t:[function(a,b){var z=a.length
-if(b>>>0!=b||J.J5(b,z))this.J2(a,b,z)
-return a[b]},"call$1","gIA",2,0,null,47,[]],
+if(b>>>0!==b||b>=z)this.J2(a,b,z)
+return a[b]},"call$1","gIA",2,0,null,52,[]],
u:[function(a,b,c){var z=a.length
-if(b>>>0!=b||J.J5(b,z))this.J2(a,b,z)
-a[b]=c},"call$2","gj3",4,0,null,47,[],23,[]],
-D6:[function(a,b,c){return new Float32Array(a.subarray(b,this.PZ(a,b,c,a.length)))},function(a,b){return this.D6(a,b,null)},"Jk","call$2",null,"gli",2,2,null,77,120,[],121,[]],
+if(b>>>0!==b||b>=z)this.J2(a,b,z)
+a[b]=c},"call$2","gj3",4,0,null,52,[],28,[]],
+D6:[function(a,b,c){return new Float32Array(a.subarray(b,this.PZ(a,b,c,a.length)))},function(a,b){return this.D6(a,b,null)},"Jk","call$2",null,"gli",2,2,null,82,123,[],124,[]],
$isList:true,
-$asWO:function(){return[J.GW]},
+$aszM:function(){return[J.GW]},
$isyN:true,
-$iscX:true,
-$ascX:function(){return[J.GW]},
+$isQV:true,
+$asQV:function(){return[J.GW]},
$isHY:true,
"%":"Float32Array"},
L3:{
"^":"Dg;",
gbx:function(a){return C.lk},
t:[function(a,b){var z=a.length
-if(b>>>0!=b||J.J5(b,z))this.J2(a,b,z)
-return a[b]},"call$1","gIA",2,0,null,47,[]],
+if(b>>>0!==b||b>=z)this.J2(a,b,z)
+return a[b]},"call$1","gIA",2,0,null,52,[]],
u:[function(a,b,c){var z=a.length
-if(b>>>0!=b||J.J5(b,z))this.J2(a,b,z)
-a[b]=c},"call$2","gj3",4,0,null,47,[],23,[]],
-D6:[function(a,b,c){return new Float64Array(a.subarray(b,this.PZ(a,b,c,a.length)))},function(a,b){return this.D6(a,b,null)},"Jk","call$2",null,"gli",2,2,null,77,120,[],121,[]],
+if(b>>>0!==b||b>=z)this.J2(a,b,z)
+a[b]=c},"call$2","gj3",4,0,null,52,[],28,[]],
+D6:[function(a,b,c){return new Float64Array(a.subarray(b,this.PZ(a,b,c,a.length)))},function(a,b){return this.D6(a,b,null)},"Jk","call$2",null,"gli",2,2,null,82,123,[],124,[]],
$isList:true,
-$asWO:function(){return[J.GW]},
+$aszM:function(){return[J.GW]},
$isyN:true,
-$iscX:true,
-$ascX:function(){return[J.GW]},
+$isQV:true,
+$asQV:function(){return[J.GW]},
$isHY:true,
"%":"Float64Array"},
zz:{
"^":"Pg;",
gbx:function(a){return C.jV},
t:[function(a,b){var z=a.length
-if(b>>>0!=b||J.J5(b,z))this.J2(a,b,z)
-return a[b]},"call$1","gIA",2,0,null,47,[]],
+if(b>>>0!==b||b>=z)this.J2(a,b,z)
+return a[b]},"call$1","gIA",2,0,null,52,[]],
u:[function(a,b,c){var z=a.length
-if(b>>>0!=b||J.J5(b,z))this.J2(a,b,z)
-a[b]=c},"call$2","gj3",4,0,null,47,[],23,[]],
-D6:[function(a,b,c){return new Int16Array(a.subarray(b,this.PZ(a,b,c,a.length)))},function(a,b){return this.D6(a,b,null)},"Jk","call$2",null,"gli",2,2,null,77,120,[],121,[]],
+if(b>>>0!==b||b>=z)this.J2(a,b,z)
+a[b]=c},"call$2","gj3",4,0,null,52,[],28,[]],
+D6:[function(a,b,c){return new Int16Array(a.subarray(b,this.PZ(a,b,c,a.length)))},function(a,b){return this.D6(a,b,null)},"Jk","call$2",null,"gli",2,2,null,82,123,[],124,[]],
$isList:true,
-$asWO:function(){return[J.im]},
+$aszM:function(){return[J.im]},
$isyN:true,
-$iscX:true,
-$ascX:function(){return[J.im]},
+$isQV:true,
+$asQV:function(){return[J.im]},
$isHY:true,
"%":"Int16Array"},
dE:{
"^":"Pg;",
gbx:function(a){return C.Im},
t:[function(a,b){var z=a.length
-if(b>>>0!=b||J.J5(b,z))this.J2(a,b,z)
-return a[b]},"call$1","gIA",2,0,null,47,[]],
+if(b>>>0!==b||b>=z)this.J2(a,b,z)
+return a[b]},"call$1","gIA",2,0,null,52,[]],
u:[function(a,b,c){var z=a.length
-if(b>>>0!=b||J.J5(b,z))this.J2(a,b,z)
-a[b]=c},"call$2","gj3",4,0,null,47,[],23,[]],
-D6:[function(a,b,c){return new Int32Array(a.subarray(b,this.PZ(a,b,c,a.length)))},function(a,b){return this.D6(a,b,null)},"Jk","call$2",null,"gli",2,2,null,77,120,[],121,[]],
+if(b>>>0!==b||b>=z)this.J2(a,b,z)
+a[b]=c},"call$2","gj3",4,0,null,52,[],28,[]],
+D6:[function(a,b,c){return new Int32Array(a.subarray(b,this.PZ(a,b,c,a.length)))},function(a,b){return this.D6(a,b,null)},"Jk","call$2",null,"gli",2,2,null,82,123,[],124,[]],
$isList:true,
-$asWO:function(){return[J.im]},
+$aszM:function(){return[J.im]},
$isyN:true,
-$iscX:true,
-$ascX:function(){return[J.im]},
+$isQV:true,
+$asQV:function(){return[J.im]},
$isHY:true,
"%":"Int32Array"},
-Eb:{
+IJ:{
"^":"Pg;",
gbx:function(a){return C.la},
t:[function(a,b){var z=a.length
-if(b>>>0!=b||J.J5(b,z))this.J2(a,b,z)
-return a[b]},"call$1","gIA",2,0,null,47,[]],
+if(b>>>0!==b||b>=z)this.J2(a,b,z)
+return a[b]},"call$1","gIA",2,0,null,52,[]],
u:[function(a,b,c){var z=a.length
-if(b>>>0!=b||J.J5(b,z))this.J2(a,b,z)
-a[b]=c},"call$2","gj3",4,0,null,47,[],23,[]],
-D6:[function(a,b,c){return new Int8Array(a.subarray(b,this.PZ(a,b,c,a.length)))},function(a,b){return this.D6(a,b,null)},"Jk","call$2",null,"gli",2,2,null,77,120,[],121,[]],
+if(b>>>0!==b||b>=z)this.J2(a,b,z)
+a[b]=c},"call$2","gj3",4,0,null,52,[],28,[]],
+D6:[function(a,b,c){return new Int8Array(a.subarray(b,this.PZ(a,b,c,a.length)))},function(a,b){return this.D6(a,b,null)},"Jk","call$2",null,"gli",2,2,null,82,123,[],124,[]],
$isList:true,
-$asWO:function(){return[J.im]},
+$aszM:function(){return[J.im]},
$isyN:true,
-$iscX:true,
-$ascX:function(){return[J.im]},
+$isQV:true,
+$asQV:function(){return[J.im]},
$isHY:true,
"%":"Int8Array"},
-dT:{
+aH:{
"^":"Pg;",
gbx:function(a){return C.iN},
t:[function(a,b){var z=a.length
-if(b>>>0!=b||J.J5(b,z))this.J2(a,b,z)
-return a[b]},"call$1","gIA",2,0,null,47,[]],
+if(b>>>0!==b||b>=z)this.J2(a,b,z)
+return a[b]},"call$1","gIA",2,0,null,52,[]],
u:[function(a,b,c){var z=a.length
-if(b>>>0!=b||J.J5(b,z))this.J2(a,b,z)
-a[b]=c},"call$2","gj3",4,0,null,47,[],23,[]],
-D6:[function(a,b,c){return new Uint16Array(a.subarray(b,this.PZ(a,b,c,a.length)))},function(a,b){return this.D6(a,b,null)},"Jk","call$2",null,"gli",2,2,null,77,120,[],121,[]],
+if(b>>>0!==b||b>=z)this.J2(a,b,z)
+a[b]=c},"call$2","gj3",4,0,null,52,[],28,[]],
+D6:[function(a,b,c){return new Uint16Array(a.subarray(b,this.PZ(a,b,c,a.length)))},function(a,b){return this.D6(a,b,null)},"Jk","call$2",null,"gli",2,2,null,82,123,[],124,[]],
$isList:true,
-$asWO:function(){return[J.im]},
+$aszM:function(){return[J.im]},
$isyN:true,
-$iscX:true,
-$ascX:function(){return[J.im]},
+$isQV:true,
+$asQV:function(){return[J.im]},
$isHY:true,
"%":"Uint16Array"},
N2:{
"^":"Pg;",
gbx:function(a){return C.Vh},
t:[function(a,b){var z=a.length
-if(b>>>0!=b||J.J5(b,z))this.J2(a,b,z)
-return a[b]},"call$1","gIA",2,0,null,47,[]],
+if(b>>>0!==b||b>=z)this.J2(a,b,z)
+return a[b]},"call$1","gIA",2,0,null,52,[]],
u:[function(a,b,c){var z=a.length
-if(b>>>0!=b||J.J5(b,z))this.J2(a,b,z)
-a[b]=c},"call$2","gj3",4,0,null,47,[],23,[]],
-D6:[function(a,b,c){return new Uint32Array(a.subarray(b,this.PZ(a,b,c,a.length)))},function(a,b){return this.D6(a,b,null)},"Jk","call$2",null,"gli",2,2,null,77,120,[],121,[]],
+if(b>>>0!==b||b>=z)this.J2(a,b,z)
+a[b]=c},"call$2","gj3",4,0,null,52,[],28,[]],
+D6:[function(a,b,c){return new Uint32Array(a.subarray(b,this.PZ(a,b,c,a.length)))},function(a,b){return this.D6(a,b,null)},"Jk","call$2",null,"gli",2,2,null,82,123,[],124,[]],
$isList:true,
-$asWO:function(){return[J.im]},
+$aszM:function(){return[J.im]},
$isyN:true,
-$iscX:true,
-$ascX:function(){return[J.im]},
+$isQV:true,
+$asQV:function(){return[J.im]},
$isHY:true,
"%":"Uint32Array"},
eE:{
@@ -18385,17 +17867,17 @@
gbx:function(a){return C.nG},
gB:function(a){return a.length},
t:[function(a,b){var z=a.length
-if(b>>>0!=b||J.J5(b,z))this.J2(a,b,z)
-return a[b]},"call$1","gIA",2,0,null,47,[]],
+if(b>>>0!==b||b>=z)this.J2(a,b,z)
+return a[b]},"call$1","gIA",2,0,null,52,[]],
u:[function(a,b,c){var z=a.length
-if(b>>>0!=b||J.J5(b,z))this.J2(a,b,z)
-a[b]=c},"call$2","gj3",4,0,null,47,[],23,[]],
-D6:[function(a,b,c){return new Uint8ClampedArray(a.subarray(b,this.PZ(a,b,c,a.length)))},function(a,b){return this.D6(a,b,null)},"Jk","call$2",null,"gli",2,2,null,77,120,[],121,[]],
+if(b>>>0!==b||b>=z)this.J2(a,b,z)
+a[b]=c},"call$2","gj3",4,0,null,52,[],28,[]],
+D6:[function(a,b,c){return new Uint8ClampedArray(a.subarray(b,this.PZ(a,b,c,a.length)))},function(a,b){return this.D6(a,b,null)},"Jk","call$2",null,"gli",2,2,null,82,123,[],124,[]],
$isList:true,
-$asWO:function(){return[J.im]},
+$aszM:function(){return[J.im]},
$isyN:true,
-$iscX:true,
-$ascX:function(){return[J.im]},
+$isQV:true,
+$asQV:function(){return[J.im]},
$isHY:true,
"%":"CanvasPixelArray|Uint8ClampedArray"},
V6:{
@@ -18403,17 +17885,17 @@
gbx:function(a){return C.eY},
gB:function(a){return a.length},
t:[function(a,b){var z=a.length
-if(b>>>0!=b||J.J5(b,z))this.J2(a,b,z)
-return a[b]},"call$1","gIA",2,0,null,47,[]],
+if(b>>>0!==b||b>=z)this.J2(a,b,z)
+return a[b]},"call$1","gIA",2,0,null,52,[]],
u:[function(a,b,c){var z=a.length
-if(b>>>0!=b||J.J5(b,z))this.J2(a,b,z)
-a[b]=c},"call$2","gj3",4,0,null,47,[],23,[]],
-D6:[function(a,b,c){return new Uint8Array(a.subarray(b,this.PZ(a,b,c,a.length)))},function(a,b){return this.D6(a,b,null)},"Jk","call$2",null,"gli",2,2,null,77,120,[],121,[]],
+if(b>>>0!==b||b>=z)this.J2(a,b,z)
+a[b]=c},"call$2","gj3",4,0,null,52,[],28,[]],
+D6:[function(a,b,c){return new Uint8Array(a.subarray(b,this.PZ(a,b,c,a.length)))},function(a,b){return this.D6(a,b,null)},"Jk","call$2",null,"gli",2,2,null,82,123,[],124,[]],
$isList:true,
-$asWO:function(){return[J.im]},
+$aszM:function(){return[J.im]},
$isyN:true,
-$iscX:true,
-$ascX:function(){return[J.im]},
+$isQV:true,
+$asQV:function(){return[J.im]},
$isHY:true,
"%":";Uint8Array"},
LZ:{
@@ -18421,8 +17903,8 @@
gB:function(a){return a.length},
oZ:[function(a,b,c,d,e){var z,y,x
z=a.length+1
-this.XL(a,b,z)
-this.XL(a,c,z)
+this.ZF(a,b,z)
+this.ZF(a,c,z)
if(typeof c!=="number")return H.s(c)
if(b>c)throw H.b(P.TE(b,0,c))
y=c-b
@@ -18430,81 +17912,59 @@
x=d.length
if(x-e<y)throw H.b(new P.lj("Not enough elements"))
if(e!==0||x!==y)d=d.subarray(e,e+y)
-a.set(d,b)},"call$4","gP7",8,0,null,120,[],121,[],27,[],122,[]],
+a.set(d,b)},"call$4","gP7",8,0,null,123,[],124,[],32,[],125,[]],
$isXj:true},
Dg:{
"^":"Ip;",
YW:[function(a,b,c,d,e){var z=J.x(d)
if(!!z.$isDg){this.oZ(a,b,c,d,e)
-return}P.lD.prototype.YW.call(this,a,b,c,d,e)},"call$4","gaQ",6,2,null,335,120,[],121,[],114,[],122,[]],
+return}P.lD.prototype.YW.call(this,a,b,c,d,e)},"call$4","gam",6,2,null,332,123,[],124,[],116,[],125,[]],
$isDg:true,
$isList:true,
-$asWO:function(){return[J.GW]},
+$aszM:function(){return[J.GW]},
$isyN:true,
-$iscX:true,
-$ascX:function(){return[J.GW]}},
-Ob:{
+$isQV:true,
+$asQV:function(){return[J.GW]}},
+Ui:{
"^":"LZ+lD;",
$isList:true,
-$asWO:function(){return[J.GW]},
+$aszM:function(){return[J.GW]},
$isyN:true,
-$iscX:true,
-$ascX:function(){return[J.GW]}},
+$isQV:true,
+$asQV:function(){return[J.GW]}},
Ip:{
-"^":"Ob+SU7;"},
+"^":"Ui+SU7;"},
Pg:{
"^":"nA;",
YW:[function(a,b,c,d,e){var z=J.x(d)
if(!!z.$isPg){this.oZ(a,b,c,d,e)
-return}P.lD.prototype.YW.call(this,a,b,c,d,e)},"call$4","gaQ",6,2,null,335,120,[],121,[],114,[],122,[]],
+return}P.lD.prototype.YW.call(this,a,b,c,d,e)},"call$4","gam",6,2,null,332,123,[],124,[],116,[],125,[]],
$isPg:true,
$isList:true,
-$asWO:function(){return[J.im]},
+$aszM:function(){return[J.im]},
$isyN:true,
-$iscX:true,
-$ascX:function(){return[J.im]}},
-Nb:{
+$isQV:true,
+$asQV:function(){return[J.im]}},
+ObS:{
"^":"LZ+lD;",
$isList:true,
-$asWO:function(){return[J.im]},
+$aszM:function(){return[J.im]},
$isyN:true,
-$iscX:true,
-$ascX:function(){return[J.im]}},
+$isQV:true,
+$asQV:function(){return[J.im]}},
nA:{
-"^":"Nb+SU7;"}}],["dart2js._js_primitives","dart:_js_primitives",,H,{
+"^":"ObS+SU7;"}}],["dart2js._js_primitives","dart:_js_primitives",,H,{
"^":"",
qw:[function(a){if(typeof dartPrint=="function"){dartPrint(a)
return}if(typeof console=="object"&&typeof console.log=="function"){console.log(a)
return}if(typeof window=="object")return
if(typeof print=="function"){print(a)
-return}throw "Unable to print message: " + String(a)},"call$1","Kg",2,0,null,26,[]]}],["disassembly_entry_element","package:observatory/src/elements/disassembly_entry.dart",,E,{
-"^":"",
-Fv:{
-"^":["pv;m0%-513,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0-412",null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
-gkX:[function(a){return a.m0},null,null,1,0,514,"instruction",355,397],
-skX:[function(a,b){a.m0=this.ct(a,C.i6,a.m0,b)},null,null,3,0,515,23,[],"instruction",355],
-"@":function(){return[C.Vy]},
-static:{AH:[function(a){var z,y,x,w
-z=$.Nd()
-y=P.Py(null,null,null,J.O,W.I0)
-x=J.O
-w=W.cv
-w=H.VM(new V.qC(P.Py(null,null,null,x,w),null,null),[x,w])
-a.SO=z
-a.B7=y
-a.X0=w
-C.er.ZL(a)
-C.er.G6(a)
-return a},null,null,0,0,113,"new DisassemblyEntryElement$created"]}},
-"+DisassemblyEntryElement":[516],
-pv:{
-"^":"uL+Pi;",
-$isd3:true}}],["error_view_element","package:observatory/src/elements/error_view.dart",,F,{
+return}throw "Unable to print message: " + String(a)},"call$1","Kg",2,0,null,31,[]]}],["error_view_element","package:observatory/src/elements/error_view.dart",,F,{
"^":"",
E9:{
-"^":["Vfx;Py%-410,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0-412",null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
-gkc:[function(a){return a.Py},null,null,1,0,354,"error",355,397],
-skc:[function(a,b){a.Py=this.ct(a,C.YU,a.Py,b)},null,null,3,0,357,23,[],"error",355],
+"^":["tuj;Py%-381,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0-375",null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.Nw]}],
+gkc:[function(a){return a.Py},null,null,1,0,361,"error",358,377],
+skc:[function(a,b){a.Py=this.ct(a,C.YU,a.Py,b)},null,null,3,0,362,28,[],"error",358],
"@":function(){return[C.uW]},
static:{TW:[function(a){var z,y,x,w
z=$.Nd()
@@ -18517,16 +17977,70 @@
a.X0=w
C.OD.ZL(a)
C.OD.G6(a)
-return a},null,null,0,0,113,"new ErrorViewElement$created"]}},
-"+ErrorViewElement":[517],
-Vfx:{
+return a},null,null,0,0,115,"new ErrorViewElement$created"]}},
+"+ErrorViewElement":[480],
+tuj:{
"^":"uL+Pi;",
-$isd3:true}}],["field_ref_element","package:observatory/src/elements/field_ref.dart",,D,{
+$isd3:true}}],["eval_box_element","package:observatory/src/elements/eval_box.dart",,L,{
+"^":"",
+rm:{
+"^":["Vct;fn%-389,Ab%-389,Ln%-481,y4%-482,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0-375",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.Nw]}],
+ga4:[function(a){return a.fn},null,null,1,0,365,"text",358,359],
+sa4:[function(a,b){a.fn=this.ct(a,C.mi,a.fn,b)},null,null,3,0,30,28,[],"text",358],
+gzW:[function(a){return a.Ab},null,null,1,0,365,"lineMode",358,359],
+szW:[function(a,b){a.Ab=this.ct(a,C.eh,a.Ab,b)},null,null,3,0,30,28,[],"lineMode",358],
+gFR:[function(a){return a.Ln},null,null,1,0,483,"callback",358,377],
+Ki:function(a){return this.gFR(a).call$0()},
+VN:function(a,b){return this.gFR(a).call$1(b)},
+sFR:[function(a,b){a.Ln=this.ct(a,C.AV,a.Ln,b)},null,null,3,0,484,28,[],"callback",358],
+gPK:[function(a){return a.y4},null,null,1,0,485,"results",358,359],
+sPK:[function(a,b){a.y4=this.ct(a,C.Aa,a.y4,b)},null,null,3,0,486,28,[],"results",358],
+az:[function(a,b,c,d){var z=H.Go(J.l2(b),"$isMi").value
+z=this.ct(a,C.eh,a.Ab,z)
+a.Ab=z
+if(J.de(z,"1-line")){z=J.JA(a.fn,"\n"," ")
+a.fn=this.ct(a,C.mi,a.fn,z)}},"call$3","gxb",6,0,393,19,[],304,[],79,[],"updateLineMode"],
+lp:[function(a,b,c,d){var z,y,x
+J.xW(b)
+z=a.fn
+a.fn=this.ct(a,C.mi,z,"")
+if(a.Ln!=null){y=H.B7([],P.L5(null,null,null,null,null))
+x=R.Jk(y)
+J.kW(x,"expr",z)
+J.BM(a.y4,0,x)
+this.VN(a,z).ml(new L.YW(x))}},"call$3","gZm",6,0,393,19,[],304,[],79,[],"eval"],
+A3:[function(a,b){var z=J.iz(J.l2(b),"expr")
+a.fn=this.ct(a,C.mi,a.fn,z)},"call$1","gHo",2,0,487,19,[],"selectExpr"],
+"@":function(){return[C.Qz]},
+static:{Rp:[function(a){var z,y,x,w,v
+z=R.Jk([])
+y=$.Nd()
+x=P.Py(null,null,null,J.O,W.I0)
+w=J.O
+v=W.cv
+v=H.VM(new V.qC(P.Py(null,null,null,w,v),null,null),[w,v])
+a.Ab="1-line"
+a.y4=z
+a.SO=y
+a.B7=x
+a.X0=v
+C.Gh.ZL(a)
+C.Gh.G6(a)
+return a},null,null,0,0,115,"new EvalBoxElement$created"]}},
+"+EvalBoxElement":[488],
+Vct:{
+"^":"uL+Pi;",
+$isd3:true},
+YW:{
+"^":"Tp:112;a-82",
+call$1:[function(a){J.kW(this.a,"value",a)},"call$1",null,2,0,112,56,[],"call"],
+$isEH:true},
+"+ YW":[489]}],["field_ref_element","package:observatory/src/elements/field_ref.dart",,D,{
"^":"",
m8:{
-"^":["xI;tY-410,Pe-417,AP,fn,pC-411,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0-412",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
+"^":["xI;tY-381,Pe-382,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0-375",null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.Nw]}],
"@":function(){return[C.E6]},
-static:{Tt:[function(a){var z,y,x,w
+static:{zY:[function(a){var z,y,x,w
z=$.Nd()
y=P.Py(null,null,null,J.O,W.I0)
x=J.O
@@ -18538,16 +18052,16 @@
a.X0=w
C.MC.ZL(a)
C.MC.G6(a)
-return a},null,null,0,0,113,"new FieldRefElement$created"]}},
-"+FieldRefElement":[418]}],["field_view_element","package:observatory/src/elements/field_view.dart",,A,{
+return a},null,null,0,0,115,"new FieldRefElement$created"]}},
+"+FieldRefElement":[383]}],["field_view_element","package:observatory/src/elements/field_view.dart",,A,{
"^":"",
Gk:{
-"^":["Urj;vt%-410,AP,fn,pC-411,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0-412",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
-gt0:[function(a){return a.vt},null,null,1,0,354,"field",355,397],
-st0:[function(a,b){a.vt=this.ct(a,C.WQ,a.vt,b)},null,null,3,0,357,23,[],"field",355],
-RF:[function(a,b){a.pC.oX(J.UQ(a.vt,"id")).ml(new A.e5(a)).OA(new A.Ni()).YM(b)},"call$1","gvC",2,0,158,413,[],"refresh"],
-"@":function(){return[C.vc]},
-static:{cY:[function(a){var z,y,x,w
+"^":["D13;vt%-374,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0-375",null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.Nw]}],
+gt0:[function(a){return a.vt},null,null,1,0,376,"field",358,377],
+st0:[function(a,b){a.vt=this.ct(a,C.WQ,a.vt,b)},null,null,3,0,378,28,[],"field",358],
+yv:[function(a,b){J.am(a.vt).YM(b)},"call$1","gvC",2,0,157,379,[],"refresh"],
+"@":function(){return[C.My]},
+static:{bH:[function(a){var z,y,x,w
z=$.Nd()
y=P.Py(null,null,null,J.O,W.I0)
x=J.O
@@ -18558,29 +18072,16 @@
a.X0=w
C.LT.ZL(a)
C.LT.G6(a)
-return a},null,null,0,0,113,"new FieldViewElement$created"]}},
-"+FieldViewElement":[518],
-Urj:{
-"^":"PO+Pi;",
-$isd3:true},
-e5:{
-"^":"Tp:107;a-77",
-call$1:[function(a){var z,y
-z=this.a
-y=J.RE(z)
-y.svt(z,y.ct(z,C.WQ,y.gvt(z),a))},"call$1",null,2,0,107,149,[],"call"],
-$isEH:true},
-"+FieldViewElement_refresh_closure":[415],
-Ni:{
-"^":"Tp:346;",
-call$2:[function(a,b){N.Jx("").hh("Error while refreshing field-view: "+H.d(a)+"\n"+H.d(b))},"call$2",null,4,0,346,18,[],416,[],"call"],
-$isEH:true},
-"+FieldViewElement_refresh_closure":[415]}],["function_ref_element","package:observatory/src/elements/function_ref.dart",,U,{
+return a},null,null,0,0,115,"new FieldViewElement$created"]}},
+"+FieldViewElement":[490],
+D13:{
+"^":"uL+Pi;",
+$isd3:true}}],["function_ref_element","package:observatory/src/elements/function_ref.dart",,U,{
"^":"",
-AX:{
-"^":["xI;tY-410,Pe-417,AP,fn,pC-411,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0-412",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
-"@":function(){return[C.YQ]},
-static:{wH:[function(a){var z,y,x,w
+qW:{
+"^":["xI;tY-381,Pe-382,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0-375",null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.Nw]}],
+"@":function(){return[C.R0]},
+static:{ZV:[function(a){var z,y,x,w
z=$.Nd()
y=P.Py(null,null,null,J.O,W.I0)
x=J.O
@@ -18592,14 +18093,14 @@
a.X0=w
C.Xo.ZL(a)
C.Xo.G6(a)
-return a},null,null,0,0,113,"new FunctionRefElement$created"]}},
-"+FunctionRefElement":[418]}],["function_view_element","package:observatory/src/elements/function_view.dart",,N,{
+return a},null,null,0,0,115,"new FunctionRefElement$created"]}},
+"+FunctionRefElement":[383]}],["function_view_element","package:observatory/src/elements/function_view.dart",,N,{
"^":"",
-yb:{
-"^":["oub;Z8%-410,AP,fn,pC-411,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0-412",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
-gMj:[function(a){return a.Z8},null,null,1,0,354,"function",355,397],
-sMj:[function(a,b){a.Z8=this.ct(a,C.nf,a.Z8,b)},null,null,3,0,357,23,[],"function",355],
-RF:[function(a,b){a.pC.oX(J.UQ(a.Z8,"id")).ml(new N.QR(a)).OA(new N.Yx()).YM(b)},"call$1","gvC",2,0,158,413,[],"refresh"],
+mk:{
+"^":["WZq;Z8%-374,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0-375",null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.Nw]}],
+gMj:[function(a){return a.Z8},null,null,1,0,376,"function",358,377],
+sMj:[function(a,b){a.Z8=this.ct(a,C.nf,a.Z8,b)},null,null,3,0,378,28,[],"function",358],
+yv:[function(a,b){J.am(a.Z8).YM(b)},"call$1","gvC",2,0,157,379,[],"refresh"],
"@":function(){return[C.nu]},
static:{N0:[function(a){var z,y,x,w
z=$.Nd()
@@ -18610,31 +18111,18 @@
a.SO=z
a.B7=y
a.X0=w
-C.h4.ZL(a)
-C.h4.G6(a)
-return a},null,null,0,0,113,"new FunctionViewElement$created"]}},
-"+FunctionViewElement":[519],
-oub:{
-"^":"PO+Pi;",
-$isd3:true},
-QR:{
-"^":"Tp:107;a-77",
-call$1:[function(a){var z,y
-z=this.a
-y=J.RE(z)
-y.sZ8(z,y.ct(z,C.nf,y.gZ8(z),a))},"call$1",null,2,0,107,149,[],"call"],
-$isEH:true},
-"+FunctionViewElement_refresh_closure":[415],
-Yx:{
-"^":"Tp:346;",
-call$2:[function(a,b){N.Jx("").hh("Error while refreshing field-view: "+H.d(a)+"\n"+H.d(b))},"call$2",null,4,0,346,18,[],416,[],"call"],
-$isEH:true},
-"+FunctionViewElement_refresh_closure":[415]}],["heap_profile_element","package:observatory/src/elements/heap_profile.dart",,K,{
+C.Yu.ZL(a)
+C.Yu.G6(a)
+return a},null,null,0,0,115,"new FunctionViewElement$created"]}},
+"+FunctionViewElement":[491],
+WZq:{
+"^":"uL+Pi;",
+$isd3:true}}],["heap_profile_element","package:observatory/src/elements/heap_profile.dart",,K,{
"^":"",
-NM:{
-"^":["c4r;GQ%-77,J0%-77,Oc%-77,CO%-77,bV%-77,kg%-77,LY%-77,q3%-77,Ol%-410,X3%-417,AP,fn,pC-411,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0-412",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
-gB1:[function(a){return a.Ol},null,null,1,0,354,"profile",355,397],
-sB1:[function(a,b){a.Ol=this.ct(a,C.vb,a.Ol,b)},null,null,3,0,357,23,[],"profile",355],
+jY:{
+"^":["pva;GQ%-82,J0%-82,Oc%-82,CO%-82,bV%-82,kg%-82,LY%-82,q3%-82,Ol%-374,X3%-382,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0-375",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.Nw]}],
+gB1:[function(a){return a.Ol},null,null,1,0,376,"profile",358,377],
+sB1:[function(a,b){a.Ol=this.ct(a,C.vb,a.Ol,b)},null,null,3,0,378,28,[],"profile",358],
i4:[function(a){var z,y
Z.uL.prototype.i4.call(this,a)
z=(a.shadowRoot||a.webkitShadowRoot).querySelector("#table")
@@ -18661,7 +18149,7 @@
z.bG.u(0,"allowHtml",!0)
J.kW(J.wc(a.kg),"sortColumn",1)
J.kW(J.wc(a.kg),"sortAscending",!1)
-this.uB(a)},"call$0","gQd",0,0,112,"enteredView"],
+this.uB(a)},"call$0","gQd",0,0,114,"enteredView"],
hZ:[function(a){var z,y,x,w,v,u
z=a.Ol
if(z!=null){z=J.UQ(z,"members")
@@ -18674,33 +18162,35 @@
if(this.K1(a,x))continue
y=J.U6(x)
w=J.UQ(y.t(x,"class"),"name")
-v=a.pC.Mq(J.UQ(y.t(x,"class"),"id"))
+v=y.t(x,"class").gHP()
J.N5(a.LY,["<a title=\""+H.d(w)+"\" href=\""+v+"\">"+H.d(this.iF(a,x,0))+"</a>",this.iF(a,x,1),this.iF(a,x,2),this.iF(a,x,3),this.iF(a,x,4),this.iF(a,x,5),this.iF(a,x,6),this.iF(a,x,7),this.iF(a,x,8)])
-J.N5(a.bV,["<a title=\""+H.d(w)+"\" href=\""+v+"\">"+H.d(this.Wj(a,x,0))+"</a>",this.Wj(a,x,1),this.Wj(a,x,2),this.Wj(a,x,3),this.Wj(a,x,4),this.Wj(a,x,5),this.Wj(a,x,6)])}a.GQ.lb()
+J.N5(a.bV,["<a title=\""+H.d(w)+"\" href=\""+v+"\">"+H.d(this.VI(a,x,0))+"</a>",this.VI(a,x,1),this.VI(a,x,2),this.VI(a,x,3),this.VI(a,x,4),this.VI(a,x,5),this.VI(a,x,6)])}a.GQ.lb()
u=J.UQ(J.UQ(a.Ol,"heaps"),"new")
z=J.U6(u)
J.N5(a.GQ,["Used",z.t(u,"used")])
J.N5(a.GQ,["Free",J.xH(z.t(u,"capacity"),z.t(u,"used"))])
+J.N5(a.GQ,["External",z.t(u,"external")])
a.Oc.lb()
u=J.UQ(J.UQ(a.Ol,"heaps"),"old")
z=J.U6(u)
J.N5(a.Oc,["Used",z.t(u,"used")])
J.N5(a.Oc,["Free",J.xH(z.t(u,"capacity"),z.t(u,"used"))])
-this.uB(a)},"call$0","gYs",0,0,112,"_updateChartData"],
+J.N5(a.Oc,["External",z.t(u,"external")])
+this.uB(a)},"call$0","gYs",0,0,114,"_updateChartData"],
uB:[function(a){if(a.q3==null||a.kg==null)return
a.kg.u5()
a.kg.W2(a.bV)
a.q3.u5()
a.q3.W2(a.LY)
a.J0.W2(a.GQ)
-a.CO.W2(a.Oc)},"call$0","goI",0,0,112,"_draw"],
+a.CO.W2(a.Oc)},"call$0","goI",0,0,114,"_draw"],
K1:[function(a,b){var z,y,x
z=J.U6(b)
y=z.t(b,"new")
x=z.t(b,"old")
for(z=J.GP(y);z.G();)if(!J.de(z.gl(),0))return!1
for(z=J.GP(x);z.G();)if(!J.de(z.gl(),0))return!1
-return!0},"call$1","gbU",2,0,520,277,[],"_classHasNoAllocations"],
+return!0},"call$1","gbU",2,0,492,272,[],"_classHasNoAllocations"],
iF:[function(a,b,c){var z
switch(c){case 0:return J.UQ(J.UQ(b,"class"),"user_name")
case 1:z=J.U6(b)
@@ -18713,8 +18203,8 @@
case 6:return J.UQ(J.UQ(b,"old"),5)
case 7:return J.UQ(J.UQ(b,"old"),1)
case 8:return J.UQ(J.UQ(b,"old"),3)
-default:}throw H.b(P.hS())},"call$2","gym",4,0,521,277,[],47,[],"_fullTableColumnValue"],
-Wj:[function(a,b,c){var z
+default:}throw H.b(P.hS())},"call$2","gym",4,0,493,272,[],52,[],"_fullTableColumnValue"],
+VI:[function(a,b,c){var z
switch(c){case 0:return J.UQ(J.UQ(b,"class"),"user_name")
case 1:z=J.U6(b)
return J.WB(J.UQ(z.t(b,"new"),7),J.UQ(z.t(b,"old"),7))
@@ -18728,30 +18218,34 @@
return J.WB(J.UQ(z.t(b,"new"),1),J.UQ(z.t(b,"old"),1))
case 6:z=J.U6(b)
return J.WB(J.UQ(z.t(b,"new"),3),J.UQ(z.t(b,"old"),3))
-default:}throw H.b(P.hS())},"call$2","gPI",4,0,521,277,[],47,[],"_combinedTableColumnValue"],
-RF:[function(a,b){a.pC.oX("/allocationprofile").ml(new K.nx(a)).OA(new K.jm()).YM(b)},"call$1","gvC",2,0,158,413,[],"refresh"],
-ii:[function(a,b,c,d){a.pC.oX("/allocationprofile/reset").ml(new K.xj(a)).OA(new K.VB())},"call$3","gNb",6,0,425,18,[],306,[],74,[],"resetAccumulator"],
+default:}throw H.b(P.hS())},"call$2","gcY",4,0,493,272,[],52,[],"_combinedTableColumnValue"],
+yv:[function(a,b){var z=a.Ol
+if(z==null)return
+J.QP(z).ox("/allocationprofile").ml(new K.nx(a)).OA(new K.jm()).YM(b)},"call$1","gvC",2,0,157,379,[],"refresh"],
+ii:[function(a,b,c,d){var z=a.Ol
+if(z==null)return
+J.QP(z).ox("/allocationprofile/reset").ml(new K.ke(a)).OA(new K.xj())},"call$3","gNb",6,0,393,19,[],304,[],79,[],"resetAccumulator"],
pM:[function(a,b){this.hZ(a)
this.ct(a,C.Aq,[],this.gOd(a))
this.ct(a,C.ST,[],this.goN(a))
-this.ct(a,C.WG,[],this.gBo(a))},"call$1","gaz",2,0,158,233,[],"profileChanged"],
+this.ct(a,C.WG,[],this.gJN(a))},"call$1","gwm",2,0,157,229,[],"profileChanged"],
ps:[function(a,b){var z,y,x
z=a.Ol
if(z==null)return""
y=b===!0?"new":"old"
x=J.UQ(J.UQ(z,"heaps"),y)
z=J.U6(x)
-return C.CD.yM(J.FW(J.p0(z.t(x,"time"),1000),z.t(x,"collections")),2)+" ms"},"call$1","gOd",2,0,522,523,[],"formattedAverage",356],
-uW:[function(a,b){var z,y
+return C.CD.yM(J.FW(J.vX(z.t(x,"time"),1000),z.t(x,"collections")),2)+" ms"},"call$1","gOd",2,0,494,495,[],"formattedAverage",359],
+NC:[function(a,b){var z,y
z=a.Ol
if(z==null)return""
y=b===!0?"new":"old"
-return H.d(J.UQ(J.UQ(J.UQ(z,"heaps"),y),"collections"))},"call$1","gBo",2,0,522,523,[],"formattedCollections",356],
+return H.d(J.UQ(J.UQ(J.UQ(z,"heaps"),y),"collections"))},"call$1","gJN",2,0,494,495,[],"formattedCollections",359],
Q0:[function(a,b){var z,y
z=a.Ol
if(z==null)return""
y=b===!0?"new":"old"
-return J.Ez(J.UQ(J.UQ(J.UQ(z,"heaps"),y),"time"),2)+" secs"},"call$1","goN",2,0,522,523,[],"formattedTotalCollectionTime",356],
+return J.Ez(J.UQ(J.UQ(J.UQ(z,"heaps"),y),"time"),2)+" secs"},"call$1","goN",2,0,494,495,[],"formattedTotalCollectionTime",359],
Dd:[function(a){var z=new G.Kf(P.uw(J.UQ($.NR,"DataTable"),null))
a.LY=z
z.Gl("string","Class")
@@ -18779,9 +18273,9 @@
a.bV.Gl("number","Current")
a.bV.Gl("number","Allocated Since GC")
a.bV.Gl("number","Total before GC")
-a.bV.Gl("number","Survivors after GC")},null,null,0,0,113,"created"],
+a.bV.Gl("number","Survivors after GC")},null,null,0,0,115,"created"],
"@":function(){return[C.dA]},
-static:{"^":"b7<-77,bQj<-77,WY<-77,V1g<-77,r1K<-77,d6<-77,pC<-77,DP<-77",op:[function(a){var z,y,x,w
+static:{"^":"BO<-82,bQj<-82,WY<-82,V1g<-82,r1<-82,d6<-82,pC<-82,DP<-82",US:[function(a){var z,y,x,w
z=$.Nd()
y=P.Py(null,null,null,J.O,W.I0)
x=J.O
@@ -18791,48 +18285,48 @@
a.SO=z
a.B7=y
a.X0=w
-C.RJ.ZL(a)
-C.RJ.G6(a)
-C.RJ.Dd(a)
-return a},null,null,0,0,113,"new HeapProfileElement$created"]}},
-"+HeapProfileElement":[524],
-c4r:{
-"^":"PO+Pi;",
+C.Vc.ZL(a)
+C.Vc.G6(a)
+C.Vc.Dd(a)
+return a},null,null,0,0,115,"new HeapProfileElement$created"]}},
+"+HeapProfileElement":[496],
+pva:{
+"^":"uL+Pi;",
$isd3:true},
nx:{
-"^":"Tp:357;a-77",
+"^":"Tp:378;a-82",
call$1:[function(a){var z,y
z=this.a
y=J.RE(z)
-y.sOl(z,y.ct(z,C.vb,y.gOl(z),a))},"call$1",null,2,0,357,379,[],"call"],
+y.sOl(z,y.ct(z,C.vb,y.gOl(z),a))},"call$1",null,2,0,378,497,[],"call"],
$isEH:true},
-"+HeapProfileElement_refresh_closure":[415],
+"+ nx":[489],
jm:{
-"^":"Tp:346;",
-call$2:[function(a,b){N.Jx("").To(H.d(a)+" "+H.d(b))},"call$2",null,4,0,346,18,[],377,[],"call"],
+"^":"Tp:348;",
+call$2:[function(a,b){N.Jx("").To(H.d(a)+" "+H.d(b))},"call$2",null,4,0,348,19,[],498,[],"call"],
$isEH:true},
-"+HeapProfileElement_refresh_closure":[415],
-xj:{
-"^":"Tp:357;a-77",
+"+ jm":[489],
+ke:{
+"^":"Tp:378;a-82",
call$1:[function(a){var z,y
z=this.a
y=J.RE(z)
-y.sOl(z,y.ct(z,C.vb,y.gOl(z),a))},"call$1",null,2,0,357,379,[],"call"],
+y.sOl(z,y.ct(z,C.vb,y.gOl(z),a))},"call$1",null,2,0,378,497,[],"call"],
$isEH:true},
-"+HeapProfileElement_resetAccumulator_closure":[415],
-VB:{
-"^":"Tp:346;",
-call$2:[function(a,b){N.Jx("").To(H.d(a)+" "+H.d(b))},"call$2",null,4,0,346,18,[],377,[],"call"],
+"+ ke":[489],
+xj:{
+"^":"Tp:348;",
+call$2:[function(a,b){N.Jx("").To(H.d(a)+" "+H.d(b))},"call$2",null,4,0,348,19,[],498,[],"call"],
$isEH:true},
-"+HeapProfileElement_resetAccumulator_closure":[415]}],["html_common","dart:html_common",,P,{
+"+ xj":[489]}],["html_common","dart:html_common",,P,{
"^":"",
bL:[function(a){var z,y
z=[]
y=new P.Tm(new P.aI([],z),new P.rG(z),new P.yh(z)).call$1(a)
new P.wO().call$0()
-return y},"call$1","Lq",2,0,null,23,[]],
+return y},"call$1","Lq",2,0,null,28,[]],
o7:[function(a,b){var z=[]
-return new P.xL(b,new P.CA([],z),new P.YL(z),new P.KC(z)).call$1(a)},"call$2$mustCopy","A1",2,3,null,152,6,[],241,[]],
+return new P.xL(b,new P.CA([],z),new P.YL(z),new P.KC(z)).call$1(a)},"call$2$mustCopy","A1",2,3,null,210,6,[],237,[]],
dg:function(){var z=$.L4
if(z==null){z=J.Vw(window.navigator.userAgent,"Opera",0)
$.L4=z}return z},
@@ -18840,33 +18334,33 @@
if(z==null){z=P.dg()!==!0&&J.Vw(window.navigator.userAgent,"WebKit",0)
$.PN=z}return z},
aI:{
-"^":"Tp:189;b,c",
+"^":"Tp:188;b,c",
call$1:[function(a){var z,y,x
z=this.b
y=z.length
for(x=0;x<y;++x)if(z[x]===a)return x
z.push(a)
this.c.push(null)
-return y},"call$1",null,2,0,null,23,[],"call"],
+return y},"call$1",null,2,0,null,28,[],"call"],
$isEH:true},
rG:{
-"^":"Tp:372;d",
+"^":"Tp:411;d",
call$1:[function(a){var z=this.d
if(a>=z.length)return H.e(z,a)
-return z[a]},"call$1",null,2,0,null,441,[],"call"],
+return z[a]},"call$1",null,2,0,null,409,[],"call"],
$isEH:true},
yh:{
-"^":"Tp:525;e",
+"^":"Tp:499;e",
call$2:[function(a,b){var z=this.e
if(a>=z.length)return H.e(z,a)
-z[a]=b},"call$2",null,4,0,null,441,[],21,[],"call"],
+z[a]=b},"call$2",null,4,0,null,409,[],26,[],"call"],
$isEH:true},
wO:{
-"^":"Tp:113;",
+"^":"Tp:115;",
call$0:[function(){},"call$0",null,0,0,null,"call"],
$isEH:true},
Tm:{
-"^":"Tp:107;f,UI,bK",
+"^":"Tp:112;f,UI,bK",
call$1:[function(a){var z,y,x,w,v,u
z={}
if(a==null)return a
@@ -18875,7 +18369,7 @@
if(typeof a==="string")return a
y=J.x(a)
if(typeof a==="object"&&a!==null&&!!y.$isiP)return new Date(a.y3)
-if(typeof a==="object"&&a!==null&&!!y.$iscT)throw H.b(P.SY("structured clone of RegExp"))
+if(typeof a==="object"&&a!==null&&!!y.$isSP)throw H.b(P.SY("structured clone of RegExp"))
if(typeof a==="object"&&a!==null&&!!y.$ishH)return a
if(typeof a==="object"&&a!==null&&!!y.$isAz)return a
if(typeof a==="object"&&a!==null&&!!y.$isSg)return a
@@ -18888,7 +18382,7 @@
w={}
z.a=w
this.bK.call$2(x,w)
-y.aN(a,new P.q1(z,this))
+y.aN(a,new P.ib(z,this))
return z.a}if(typeof a==="object"&&a!==null&&(a.constructor===Array||!!y.$isList)){v=y.gB(a)
x=this.f.call$1(a)
w=this.UI.call$1(x)
@@ -18899,36 +18393,36 @@
u=0
for(;u<v;++u){z=this.call$1(y.t(a,u))
if(u>=w.length)return H.e(w,u)
-w[u]=z}return w}throw H.b(P.SY("structured clone of other type"))},"call$1",null,2,0,null,18,[],"call"],
+w[u]=z}return w}throw H.b(P.SY("structured clone of other type"))},"call$1",null,2,0,null,19,[],"call"],
$isEH:true},
-q1:{
-"^":"Tp:346;a,Gq",
-call$2:[function(a,b){this.a.a[a]=this.Gq.call$1(b)},"call$2",null,4,0,null,42,[],23,[],"call"],
+ib:{
+"^":"Tp:348;a,Gq",
+call$2:[function(a,b){this.a.a[a]=this.Gq.call$1(b)},"call$2",null,4,0,null,47,[],28,[],"call"],
$isEH:true},
CA:{
-"^":"Tp:189;a,b",
+"^":"Tp:188;a,b",
call$1:[function(a){var z,y,x,w
z=this.a
y=z.length
for(x=0;x<y;++x){w=z[x]
if(w==null?a==null:w===a)return x}z.push(a)
this.b.push(null)
-return y},"call$1",null,2,0,null,23,[],"call"],
+return y},"call$1",null,2,0,null,28,[],"call"],
$isEH:true},
YL:{
-"^":"Tp:372;c",
+"^":"Tp:411;c",
call$1:[function(a){var z=this.c
if(a>=z.length)return H.e(z,a)
-return z[a]},"call$1",null,2,0,null,441,[],"call"],
+return z[a]},"call$1",null,2,0,null,409,[],"call"],
$isEH:true},
KC:{
-"^":"Tp:525;d",
+"^":"Tp:499;d",
call$2:[function(a,b){var z=this.d
if(a>=z.length)return H.e(z,a)
-z[a]=b},"call$2",null,4,0,null,441,[],21,[],"call"],
+z[a]=b},"call$2",null,4,0,null,409,[],26,[],"call"],
$isEH:true},
xL:{
-"^":"Tp:107;e,f,UI,bK",
+"^":"Tp:112;e,f,UI,bK",
call$1:[function(a){var z,y,x,w,v,u,t
if(a==null)return a
if(typeof a==="boolean")return a
@@ -18953,7 +18447,7 @@
u=J.w1(y)
t=0
for(;t<v;++t)u.u(y,t,this.call$1(x.t(a,t)))
-return y}return a},"call$1",null,2,0,null,18,[],"call"],
+return y}return a},"call$1",null,2,0,null,19,[],"call"],
$isEH:true},
As:{
"^":"a;",
@@ -18963,90 +18457,86 @@
if(!z.tg(0,a)===!0){z.h(0,a)
y=!0}else{z.Rz(0,a)
y=!1}this.p5(z)
-return y},function(a){return this.O4(a,null)},"Mf","call$2",null,"gMk",2,2,null,77,23,[],508,[]],
+return y},function(a){return this.O4(a,null)},"qU","call$2",null,"gMk",2,2,null,82,28,[],475,[]],
gA:function(a){var z=this.lF()
z=H.VM(new P.zQ(z,z.zN,null,null),[null])
z.zq=z.O2.H9
return z},
-aN:[function(a,b){this.lF().aN(0,b)},"call$1","gjw",2,0,null,115,[]],
-zV:[function(a,b){return this.lF().zV(0,b)},"call$1","gnr",0,2,null,333,334,[]],
+aN:[function(a,b){this.lF().aN(0,b)},"call$1","gjw",2,0,null,117,[]],
+zV:[function(a,b){return this.lF().zV(0,b)},"call$1","gNU",0,2,null,330,331,[]],
ez:[function(a,b){var z=this.lF()
-return H.K1(z,b,H.ip(z,"mW",0),null)},"call$1","gIr",2,0,null,115,[]],
+return H.K1(z,b,H.ip(z,"mW",0),null)},"call$1","gIr",2,0,null,117,[]],
ev:[function(a,b){var z=this.lF()
-return H.VM(new H.U5(z,b),[H.ip(z,"mW",0)])},"call$1","gIR",2,0,null,115,[]],
-Vr:[function(a,b){return this.lF().Vr(0,b)},"call$1","gG2",2,0,null,115,[]],
+return H.VM(new H.U5(z,b),[H.ip(z,"mW",0)])},"call$1","gIR",2,0,null,117,[]],
+Vr:[function(a,b){return this.lF().Vr(0,b)},"call$1","gG2",2,0,null,117,[]],
gl0:function(a){return this.lF().X5===0},
gor:function(a){return this.lF().X5!==0},
gB:function(a){return this.lF().X5},
-tg:[function(a,b){return this.lF().tg(0,b)},"call$1","gdj",2,0,null,23,[]],
-Zt:[function(a){return this.lF().tg(0,a)?a:null},"call$1","gQB",2,0,null,23,[]],
-h:[function(a,b){return this.OS(new P.GE(b))},"call$1","ght",2,0,null,23,[]],
+tg:[function(a,b){return this.lF().tg(0,b)},"call$1","gdj",2,0,null,28,[]],
+Zt:[function(a){return this.lF().tg(0,a)?a:null},"call$1","gQB",2,0,null,28,[]],
+h:[function(a,b){return this.OS(new P.GE(b))},"call$1","ght",2,0,null,28,[]],
Rz:[function(a,b){var z,y
if(typeof b!=="string")return!1
z=this.lF()
y=z.Rz(0,b)
this.p5(z)
-return y},"call$1","gRI",2,0,null,23,[]],
-FV:[function(a,b){this.OS(new P.rl(b))},"call$1","gDY",2,0,null,114,[]],
+return y},"call$1","guH",2,0,null,28,[]],
+FV:[function(a,b){this.OS(new P.rl(b))},"call$1","gDY",2,0,null,116,[]],
grZ:function(a){var z=this.lF().lX
if(z==null)H.vh(new P.lj("No elements"))
return z.gGc()},
-tt:[function(a,b){return this.lF().tt(0,b)},function(a){return this.tt(a,!0)},"br","call$1$growable",null,"gRV",0,3,null,336,337,[]],
-eR:[function(a,b){var z=this.lF()
-return H.ke(z,b,H.ip(z,"mW",0))},"call$1","gZo",2,0,null,292,[]],
-Zv:[function(a,b){return this.lF().Zv(0,b)},"call$1","goY",2,0,null,47,[]],
-V1:[function(a){this.OS(new P.uQ())},"call$0","gyP",0,0,null],
+tt:[function(a,b){return this.lF().tt(0,b)},function(a){return this.tt(a,!0)},"br","call$1$growable",null,"gRV",0,3,null,333,334,[]],
+Zv:[function(a,b){return this.lF().Zv(0,b)},"call$1","goY",2,0,null,52,[]],
+V1:[function(a){this.OS(new P.uQ())},"call$0","gRa",0,0,null],
OS:[function(a){var z,y
z=this.lF()
y=a.call$1(z)
this.p5(z)
-return y},"call$1","gFd",2,0,null,115,[]],
+return y},"call$1","gFd",2,0,null,117,[]],
$isyN:true,
-$iscX:true,
-$ascX:function(){return[J.O]}},
+$isQV:true,
+$asQV:function(){return[J.O]}},
GE:{
-"^":"Tp:107;a",
-call$1:[function(a){return a.h(0,this.a)},"call$1",null,2,0,null,86,[],"call"],
+"^":"Tp:112;a",
+call$1:[function(a){return a.h(0,this.a)},"call$1",null,2,0,null,91,[],"call"],
$isEH:true},
rl:{
-"^":"Tp:107;a",
-call$1:[function(a){return a.FV(0,this.a)},"call$1",null,2,0,null,86,[],"call"],
+"^":"Tp:112;a",
+call$1:[function(a){return a.FV(0,this.a)},"call$1",null,2,0,null,91,[],"call"],
$isEH:true},
uQ:{
-"^":"Tp:107;",
-call$1:[function(a){return a.V1(0)},"call$1",null,2,0,null,86,[],"call"],
+"^":"Tp:112;",
+call$1:[function(a){return a.V1(0)},"call$1",null,2,0,null,91,[],"call"],
$isEH:true},
D7:{
-"^":"ar;F1,h2",
+"^":"ar;qt,h2",
gzT:function(){var z=this.h2
return P.F(z.ev(z,new P.hT()),!0,W.cv)},
-aN:[function(a,b){H.bQ(this.gzT(),b)},"call$1","gjw",2,0,null,115,[]],
+aN:[function(a,b){H.bQ(this.gzT(),b)},"call$1","gjw",2,0,null,117,[]],
u:[function(a,b,c){var z=this.gzT()
if(b>>>0!==b||b>=z.length)return H.e(z,b)
-J.ZP(z[b],c)},"call$2","gj3",4,0,null,47,[],23,[]],
+J.ZP(z[b],c)},"call$2","gj3",4,0,null,52,[],28,[]],
sB:function(a,b){var z,y
z=this.gzT().length
y=J.Wx(b)
if(y.F(b,z))return
else if(y.C(b,0))throw H.b(new P.AT("Invalid list length"))
this.UZ(0,b,z)},
-h:[function(a,b){this.h2.NL.appendChild(b)},"call$1","ght",2,0,null,23,[]],
+h:[function(a,b){this.h2.NL.appendChild(b)},"call$1","ght",2,0,null,28,[]],
FV:[function(a,b){var z,y
-for(z=J.GP(b),y=this.h2.NL;z.G();)y.appendChild(z.gl())},"call$1","gDY",2,0,null,114,[]],
-tg:[function(a,b){var z=J.x(b)
-if(typeof b!=="object"||b===null||!z.$iscv)return!1
-return b.parentNode===this.F1},"call$1","gdj",2,0,null,102,[]],
-GT:[function(a,b){throw H.b(P.f("Cannot sort filtered list"))},"call$1","gH7",0,2,null,77,133,[]],
-YW:[function(a,b,c,d,e){throw H.b(P.f("Cannot setRange on filtered list"))},"call$4","gaQ",6,2,null,335,120,[],121,[],114,[],122,[]],
-UZ:[function(a,b,c){H.bQ(C.Nm.D6(this.gzT(),b,c),new P.GS())},"call$2","gYH",4,0,null,120,[],121,[]],
-V1:[function(a){this.h2.NL.textContent=""},"call$0","gyP",0,0,null],
-xe:[function(a,b,c){this.h2.xe(0,b,c)},"call$2","gQG",4,0,null,47,[],23,[]],
+for(z=H.VM(new H.a7(b,b.length,0,null),[H.Kp(b,0)]),y=this.h2.NL;z.G();)y.appendChild(z.lo)},"call$1","gDY",2,0,null,116,[]],
+tg:[function(a,b){return!1},"call$1","gdj",2,0,null,107,[]],
+GT:[function(a,b){throw H.b(P.f("Cannot sort filtered list"))},"call$1","gH7",0,2,null,82,122,[]],
+YW:[function(a,b,c,d,e){throw H.b(P.f("Cannot setRange on filtered list"))},"call$4","gam",6,2,null,332,123,[],124,[],116,[],125,[]],
+UZ:[function(a,b,c){H.bQ(C.Nm.D6(this.gzT(),b,c),new P.GS())},"call$2","gYH",4,0,null,123,[],124,[]],
+V1:[function(a){J.c9(this.h2.NL,"")},"call$0","gRa",0,0,null],
+xe:[function(a,b,c){this.h2.xe(0,b,c)},"call$2","gQG",4,0,null,52,[],28,[]],
KI:[function(a,b){var z,y
z=this.gzT()
if(b<0||b>=z.length)return H.e(z,b)
y=z[b]
J.QC(y)
-return y},"call$1","gNM",2,0,null,47,[]],
+return y},"call$1","gNM",2,0,null,52,[]],
Rz:[function(a,b){var z,y,x
z=J.x(b)
if(typeof b!=="object"||b===null||!z.$iscv)return!1
@@ -19054,43 +18544,40 @@
if(y>=z.length)return H.e(z,y)
x=z[y]
if(x==null?b==null:x===b){J.QC(x)
-return!0}}return!1},"call$1","gRI",2,0,null,129,[]],
+return!0}}return!1},"call$1","guH",2,0,null,132,[]],
gB:function(a){return this.gzT().length},
t:[function(a,b){var z=this.gzT()
if(b>>>0!==b||b>=z.length)return H.e(z,b)
-return z[b]},"call$1","gIA",2,0,null,47,[]],
+return z[b]},"call$1","gIA",2,0,null,52,[]],
gA:function(a){var z=this.gzT()
return H.VM(new H.a7(z,z.length,0,null),[H.Kp(z,0)])}},
hT:{
-"^":"Tp:107;",
+"^":"Tp:112;",
call$1:[function(a){var z=J.x(a)
-return typeof a==="object"&&a!==null&&!!z.$iscv},"call$1",null,2,0,null,292,[],"call"],
+return typeof a==="object"&&a!==null&&!!z.$iscv},"call$1",null,2,0,null,198,[],"call"],
$isEH:true},
GS:{
-"^":"Tp:107;",
-call$1:[function(a){return J.QC(a)},"call$1",null,2,0,null,288,[],"call"],
+"^":"Tp:112;",
+call$1:[function(a){return J.QC(a)},"call$1",null,2,0,null,287,[],"call"],
$isEH:true}}],["instance_ref_element","package:observatory/src/elements/instance_ref.dart",,B,{
"^":"",
pR:{
-"^":["xI;tY-410,Pe-417,AP,fn,pC-411,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0-412",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
-goc:[function(a){var z=a.tY
-if(z==null)return Q.xI.prototype.goc.call(this,a)
-return J.UQ(z,"preview")},null,null,1,0,370,"name"],
-gJp:[function(a){var z=a.tY
-if(z!=null)if(J.de(J.UQ(z,"type"),"@Null"))if(J.de(J.UQ(a.tY,"id"),"objects/optimized-out"))return"This object is no longer needed and has been removed by the optimizing compiler."
-else if(J.de(J.UQ(a.tY,"id"),"objects/collected"))return"This object has been reclaimed by the garbage collector."
-else if(J.de(J.UQ(a.tY,"id"),"objects/expired"))return"The handle to this object has expired. Consider refreshing the page."
-else if(J.de(J.UQ(a.tY,"id"),"objects/not-initialized"))return"This object will be initialized once it is accessed by the program."
-else if(J.de(J.UQ(a.tY,"id"),"objects/being-initialized"))return"This object is currently being initialized."
-return""},null,null,1,0,370,"hoverText"],
-Qx:[function(a){return this.gNe(a)},"call$0","gyX",0,0,113,"expander"],
+"^":["xI;tY-381,Pe-382,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0-375",null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.Nw]}],
+gD5:[function(a){var z=a.tY
+if(z!=null)if(J.de(z.gzS(),"Null"))if(J.de(J.F8(a.tY),"objects/optimized-out"))return"This object is no longer needed and has been removed by the optimizing compiler."
+else if(J.de(J.F8(a.tY),"objects/collected"))return"This object has been reclaimed by the garbage collector."
+else if(J.de(J.F8(a.tY),"objects/expired"))return"The handle to this object has expired. Consider refreshing the page."
+else if(J.de(J.F8(a.tY),"objects/not-initialized"))return"This object will be initialized once it is accessed by the program."
+else if(J.de(J.F8(a.tY),"objects/being-initialized"))return"This object is currently being initialized."
+return Q.xI.prototype.gD5.call(this,a)},null,null,1,0,365,"hoverText"],
+Qx:[function(a){return this.gNe(a)},"call$0","gyX",0,0,115,"expander"],
SF:[function(a,b,c){var z,y
-P.JS("Calling expandEvent")
-if(b===!0){z=a.pC
-y=a.tY
-z.oX(y==null?"":J.UQ(y,"id")).ml(new B.Js(a)).OA(new B.fM()).YM(c)}else{J.kW(a.tY,"fields",null)
-J.kW(a.tY,"elements",null)
-c.call$0()}},"call$2","gNe",4,0,526,527,[],413,[],"expandEvent"],
+z=a.tY
+if(b===!0)J.am(z).ml(new B.Js(a)).YM(c)
+else{y=J.w1(z)
+y.u(z,"fields",null)
+y.u(z,"elements",null)
+c.call$0()}},"call$2","gNe",4,0,500,501,[],379,[],"expandEvent"],
"@":function(){return[C.VW]},
static:{b4:[function(a){var z,y,x,w
z=$.Nd()
@@ -19104,34 +18591,26 @@
a.X0=w
C.cp.ZL(a)
C.cp.G6(a)
-return a},null,null,0,0,113,"new InstanceRefElement$created"]}},
-"+InstanceRefElement":[418],
+return a},null,null,0,0,115,"new InstanceRefElement$created"]}},
+"+InstanceRefElement":[383],
Js:{
-"^":"Tp:107;a-77",
-call$1:[function(a){var z,y,x
+"^":"Tp:112;a-82",
+call$1:[function(a){var z,y
z=J.U6(a)
-y=this.a
-if(J.de(z.t(a,"type"),"Null")){z.u(a,"type","@Null")
-x=J.RE(y)
-x.stY(y,x.ct(y,C.kY,x.gtY(y),a))}else{x=J.RE(y)
-J.kW(x.gtY(y),"fields",z.t(a,"fields"))
-J.kW(x.gtY(y),"elements",z.t(a,"elements"))
-J.kW(x.gtY(y),"length",z.t(a,"length"))}x=J.RE(y)
-J.kW(x.gtY(y),"fields",z.t(a,"fields"))
-J.kW(x.gtY(y),"elements",z.t(a,"elements"))
-J.kW(x.gtY(y),"length",z.t(a,"length"))},"call$1",null,2,0,107,149,[],"call"],
+if(z.t(a,"preview")!=null){z.soc(a,z.t(a,"preview"))
+a.szz(z.t(a,"preview"))}z=this.a
+y=J.RE(z)
+y.stY(z,y.ct(z,C.kY,y.gtY(z),a))
+y.ct(z,C.kY,0,1)},"call$1",null,2,0,112,56,[],"call"],
$isEH:true},
-"+InstanceRefElement_expandEvent_closure":[415],
-fM:{
-"^":"Tp:346;",
-call$2:[function(a,b){N.Jx("").hh("Error while expanding instance-ref: "+H.d(a)+"\n"+H.d(b))},"call$2",null,4,0,346,18,[],416,[],"call"],
-$isEH:true},
-"+InstanceRefElement_expandEvent_closure":[415]}],["instance_view_element","package:observatory/src/elements/instance_view.dart",,Z,{
+"+ Js":[489]}],["instance_view_element","package:observatory/src/elements/instance_view.dart",,Z,{
"^":"",
hx:{
-"^":["Squ;Xh%-410,AP,fn,pC-411,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0-412",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
-gQr:[function(a){return a.Xh},null,null,1,0,354,"instance",355,397],
-sQr:[function(a,b){a.Xh=this.ct(a,C.fn,a.Xh,b)},null,null,3,0,357,23,[],"instance",355],
+"^":["cda;Xh%-374,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0-375",null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.Nw]}],
+gQr:[function(a){return a.Xh},null,null,1,0,376,"instance",358,377],
+sQr:[function(a,b){a.Xh=this.ct(a,C.fn,a.Xh,b)},null,null,3,0,378,28,[],"instance",358],
+vV:[function(a,b){return J.QP(a.Xh).ox(J.WB(J.F8(a.Xh),"/eval?expr="+P.jW(C.yD,b,C.xM,!1)))},"call$1","gZm",2,0,502,212,[],"eval"],
+yv:[function(a,b){J.am(a.Xh).YM(b)},"call$1","gvC",2,0,157,379,[],"refresh"],
"@":function(){return[C.be]},
static:{HC:[function(a){var z,y,x,w
z=$.Nd()
@@ -19144,39 +18623,17 @@
a.X0=w
C.yK.ZL(a)
C.yK.G6(a)
-return a},null,null,0,0,113,"new InstanceViewElement$created"]}},
-"+InstanceViewElement":[528],
-Squ:{
-"^":"PO+Pi;",
-$isd3:true}}],["isolate_element","package:observatory/src/elements/isolate_element.dart",,S,{
-"^":"",
-PO:{
-"^":["Vf;pC%-411,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0-412",null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
-gAq:[function(a){return a.pC},null,null,1,0,358,"isolate",355,397],
-sAq:[function(a,b){a.pC=this.ct(a,C.Z8,a.pC,b)},null,null,3,0,359,23,[],"isolate",355],
-"@":function(){return[C.EA]},
-static:{O5:[function(a){var z,y,x,w
-z=$.Nd()
-y=P.Py(null,null,null,J.O,W.I0)
-x=J.O
-w=W.cv
-w=H.VM(new V.qC(P.Py(null,null,null,x,w),null,null),[x,w])
-a.SO=z
-a.B7=y
-a.X0=w
-C.wx.ZL(a)
-C.wx.G6(a)
-return a},null,null,0,0,113,"new IsolateElement$created"]}},
-"+IsolateElement":[529],
-Vf:{
+return a},null,null,0,0,115,"new InstanceViewElement$created"]}},
+"+InstanceViewElement":[503],
+cda:{
"^":"uL+Pi;",
$isd3:true}}],["isolate_list_element","package:observatory/src/elements/isolate_list.dart",,L,{
"^":"",
u7:{
-"^":["Zt;Jh-353,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0-412",null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
-RF:[function(a,b){var z=[]
-J.kH(a.Jh.gi2(),new L.fW(z))
-P.pH(z,!1).ml(new L.Ey(b))},"call$1","gvC",2,0,158,413,[],"refresh"],
+"^":["waa;tf%-504,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0-375",null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.Nw]}],
+gi2:[function(a){return a.tf},null,null,1,0,505,"isolates",358,377],
+si2:[function(a,b){a.tf=this.ct(a,C.za,a.tf,b)},null,null,3,0,506,28,[],"isolates",358],
+yv:[function(a,b){J.am(a.tf).YM(b)},"call$1","gvC",2,0,157,379,[],"refresh"],
"@":function(){return[C.jF]},
static:{Cu:[function(a){var z,y,x,w
z=$.Nd()
@@ -19189,150 +18646,134 @@
a.X0=w
C.b9.ZL(a)
C.b9.G6(a)
-return a},null,null,0,0,113,"new IsolateListElement$created"]}},
-"+IsolateListElement":[530],
-fW:{
-"^":"Tp:346;a-77",
-call$2:[function(a,b){J.bi(this.a,J.KM(b))},"call$2",null,4,0,346,110,[],14,[],"call"],
-$isEH:true},
-"+IsolateListElement_refresh_closure":[415],
-Ey:{
-"^":"Tp:107;b-77",
-call$1:[function(a){return this.b.call$0()},"call$1",null,2,0,107,108,[],"call"],
-$isEH:true},
-"+IsolateListElement_refresh_closure":[415]}],["isolate_profile_element","package:observatory/src/elements/isolate_profile.dart",,X,{
+return a},null,null,0,0,115,"new IsolateListElement$created"]}},
+"+IsolateListElement":[507],
+waa:{
+"^":"uL+Pi;",
+$isd3:true}}],["isolate_profile_element","package:observatory/src/elements/isolate_profile.dart",,X,{
"^":"",
qm:{
-"^":["Y2;Aq>,tT>-420,eT,yt-386,wd-403,oH-404,z3,AP,fn",null,function(){return[C.mI]},null,function(){return[C.mI]},function(){return[C.mI]},function(){return[C.mI]},null,null,null],
+"^":["Y2;B1>,tT>-385,eT,yt-369,wd-370,oH-371,z3,AP,Lk",null,function(){return[C.Nw]},null,function(){return[C.mI]},function(){return[C.mI]},function(){return[C.mI]},null,null,null],
C4:[function(a){if(J.z8(J.q8(this.wd),0))return
-H.bQ(this.tT.gVS(),new X.vO(this))},"call$0","gz7",0,0,null],
-o8:[function(){return},"call$0","gDT",0,0,null],
-Af:function(a,b,c){var z,y,x,w,v,u
-z=this.oH
-y=this.tT
-x=this.Aq
-w=J.RE(x)
-v=J.w1(z)
-v.h(z,X.eI(y.gDu(),w.gB1(x).ghV()))
-if(c==null)v.h(z,"")
-else{u=c.tT
-v.h(z,X.eI(u.dJ(y),u.QQ()))}v.h(z,X.eI(y.gfF(),w.gB1(x).ghV()))},
-static:{eI:[function(a,b){return C.CD.yM(100*J.FW(a,b),2)+"%"},"call$2","uV",4,0,null,128,[],242,[]],Tl:function(a,b,c){var z,y
+J.kH(this.tT.gVS(),new X.TI(this))},"call$0","gz7",0,0,null],
+o8:[function(){},"call$0","gDT",0,0,null],
+Af:function(a,b,c){var z,y,x,w,v
+z=J.UQ(this.B1,"samples")
+y=this.oH
+x=this.tT
+w=J.w1(y)
+w.h(y,X.eI(x.gDu(),z))
+if(c==null)w.h(y,"")
+else{v=c.tT
+w.h(y,X.eI(v.dJ(x),v.QQ()))}},
+static:{eI:[function(a,b){return C.CD.yM(100*J.FW(a,b),2)+"%"},"call$2","rC",4,0,null,131,[],238,[]],Tl:function(a,b,c){var z,y
z=H.VM([],[G.Y2])
y=c!=null?J.WB(c.yt,1):0
z=new X.qm(a,b,c,y,z,[],!1,null,null)
z.Af(a,b,c)
return z}}},
-vO:{
-"^":"Tp:532;a",
+TI:{
+"^":"Tp:509;a",
call$1:[function(a){var z=this.a
-J.bi(z.wd,X.Tl(z.Aq,J.on(a),z))},"call$1",null,2,0,null,531,[],"call"],
+J.bi(z.wd,X.Tl(z.B1,J.on(a),z))},"call$1",null,2,0,null,508,[],"call"],
$isEH:true},
E7:{
-"^":["KUl;SS%-386,fb=-533,qY%-533,qO=-77,Hm%-534,pD%-410,eH%-387,vk%-387,AP,fn,pC-411,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0-412",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
-gXc:[function(a){return a.SS},null,null,1,0,371,"methodCountSelected",355,356],
-sXc:[function(a,b){a.SS=this.ct(a,C.fQ,a.SS,b)},null,null,3,0,372,23,[],"methodCountSelected",355],
-gDt:[function(a){return a.qY},null,null,1,0,535,"topExclusiveCodes",355,356],
-sDt:[function(a,b){a.qY=this.ct(a,C.jI,a.qY,b)},null,null,3,0,536,23,[],"topExclusiveCodes",355],
-gB1:[function(a){return a.pD},null,null,1,0,354,"profile",355,397],
-sB1:[function(a,b){a.pD=this.ct(a,C.vb,a.pD,b)},null,null,3,0,357,23,[],"profile",355],
-gLW:[function(a){return a.eH},null,null,1,0,370,"sampleCount",355,356],
-sLW:[function(a,b){a.eH=this.ct(a,C.XU,a.eH,b)},null,null,3,0,25,23,[],"sampleCount",355],
-gUo:[function(a){return a.vk},null,null,1,0,370,"refreshTime",355,356],
-sUo:[function(a,b){a.vk=this.ct(a,C.Dj,a.vk,b)},null,null,3,0,25,23,[],"refreshTime",355],
-pM:[function(a,b){var z,y
-if(a.pD==null)return
-P.JS("profile changed")
-z=J.UQ(a.pD,"samples")
-this.IW(a,a.pC,z,a.pD)
-y=a.pC
-this.oC(a,y)
-this.f9(a,y)},"call$1","gaz",2,0,158,233,[],"profileChanged"],
+"^":["V4;pD%-374,Dt=-82,BA%-369,FT%-389,vk%-389,fb=-510,qO=-82,Hm%-511,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0-375",null,function(){return[C.Nw]},null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.Nw]}],
+gB1:[function(a){return a.pD},null,null,1,0,376,"profile",358,377],
+sB1:[function(a,b){a.pD=this.ct(a,C.vb,a.pD,b)},null,null,3,0,378,28,[],"profile",358],
+gXc:[function(a){return a.BA},null,null,1,0,512,"methodCountSelected",358,359],
+sXc:[function(a,b){a.BA=this.ct(a,C.fQ,a.BA,b)},null,null,3,0,411,28,[],"methodCountSelected",358],
+gJy:[function(a){return a.FT},null,null,1,0,365,"sampleCount",358,359],
+sJy:[function(a,b){a.FT=this.ct(a,C.XU,a.FT,b)},null,null,3,0,30,28,[],"sampleCount",358],
+gUo:[function(a){return a.vk},null,null,1,0,365,"refreshTime",358,359],
+sUo:[function(a,b){a.vk=this.ct(a,C.Dj,a.vk,b)},null,null,3,0,30,28,[],"refreshTime",358],
+pM:[function(a,b){var z,y,x
+z=a.pD
+if(z==null)return
+y=J.UQ(z,"samples")
+x=new P.iP(Date.now(),!1)
+x.EK()
+z=J.AG(y)
+a.FT=this.ct(a,C.XU,a.FT,z)
+z=x.bu(0)
+a.vk=this.ct(a,C.Dj,a.vk,z)
+J.QP(a.pD).N3(a.pD)
+this.Cx(a)},"call$1","gwm",2,0,157,229,[],"profileChanged"],
i4:[function(a){var z,y
z=[]
y=R.Jk([])
-C.Nm.FV(z,["Method","Exclusive","Caller","Inclusive"])
+C.Nm.FV(z,["Method","Exclusive","Caller"])
a.Hm=new G.XN(z,y,null,null)
-y=a.pC
-this.oC(a,y)
-this.f9(a,y)},"call$0","gQd",0,0,112,"enteredView"],
-wW:[function(a,b){var z=a.pC
-this.oC(a,z)
-this.f9(a,z)},"call$1","ghj",2,0,107,233,[],"methodCountSelectedChanged"],
-RF:[function(a,b){a.pC.oX("profile").ml(new X.SV(a)).OA(new X.Mf()).YM(b)},"call$1","gvC",2,0,158,413,[],"refresh"],
-IW:[function(a,b,c,d){var z=J.AG(c)
-a.eH=this.ct(a,C.XU,a.eH,z)
-z=P.Gi().bu(0)
-a.vk=this.ct(a,C.Dj,a.vk,z)
-J.CJ(b,G.hh(b,d))
-this.oC(a,b)
-this.f9(a,b)},"call$3","gja",6,0,537,14,[],538,[],379,[],"_loadProfileData"],
-yF:[function(a,b){this.oC(a,b)
-this.f9(a,b)},"call$1","gAL",2,0,539,14,[],"_refresh"],
-f9:[function(a,b){var z,y
+this.Cx(a)},"call$0","gQd",0,0,114,"enteredView"],
+wW:[function(a,b){this.Cx(a)},"call$1","ghj",2,0,112,229,[],"methodCountSelectedChanged"],
+yv:[function(a,b){J.QP(a.pD).ox("profile").ml(new X.SV(a)).YM(b)},"call$1","gvC",2,0,157,379,[],"refresh"],
+Cx:[function(a){var z,y,x
+if(a.pD==null)return
+z=J.UQ(a.fb,a.BA)
+y=a.Dt
+x=J.w1(y)
+x.V1(y)
+x.FV(y,J.QP(a.pD).gZ0().T0(z))
+this.zr(a)},"call$0","gBn",0,0,114,"_update"],
+Ti:[function(a){var z,y,x
+z=J.UQ(a.fb,a.BA)
+y=a.Dt
+x=J.w1(y)
+x.V1(y)
+x.FV(y,J.QP(a.pD).gZ0().T0(z))},"call$0","guE",0,0,114,"_refreshTopMethods"],
+zr:[function(a){var z,y,x
z=[]
-for(y=J.GP(a.qY);y.G();)z.push(X.Tl(b,y.gl(),null))
-a.Hm.rT(z)
-this.ct(a,C.ep,null,a.Hm)},"call$1","gCK",2,0,539,14,[],"_refreshTree"],
-oC:[function(a,b){var z,y
-J.U2(a.qY)
-if(b==null||J.Tv(b)==null)return
-z=J.UQ(a.fb,a.SS)
-y=J.Tv(b).T0(z)
-J.bj(a.qY,y)},"call$1","guE",2,0,539,14,[],"_refreshTopMethods"],
-ka:[function(a,b){return"padding-left: "+H.d(J.p0(b.gyt(),16))+"px;"},"call$1","gGX",2,0,540,363,[],"padding",356],
+for(y=J.GP(a.Dt);y.G();){x=y.gl()
+z.push(X.Tl(a.pD,x,null))}a.Hm.rT(z)
+this.ct(a,C.ep,null,a.Hm)},"call$0","gdX",0,0,114,"_rebuildTree"],
+ub:[function(a,b){return"padding-left: "+H.d(J.vX(b.gyt(),16))+"px;"},"call$1","gGX",2,0,513,364,[],"padding",359],
ZZ:[function(a,b){var z=J.bY(b.gyt(),5)
if(z>>>0!==z||z>=5)return H.e(C.PQ,z)
-return C.PQ[z]},"call$1","gth",2,0,540,363,[],"coloring",356],
+return C.PQ[z]},"call$1","gth",2,0,513,364,[],"coloring",359],
YF:[function(a,b,c,d){var z,y,x
z=J.u3(d)
y=J.x(z)
if(typeof z==="object"&&z!==null&&!!y.$istV){y=a.Hm
x=z.rowIndex
if(typeof x!=="number")return x.W()
-y.Mf(x-1)}},"call$3","gpR",6,0,541,18,[],306,[],74,[],"toggleExpanded",356],
+y.qU(x-1)}},"call$3","gpR",6,0,514,19,[],304,[],79,[],"toggleExpanded",359],
"@":function(){return[C.jR]},
static:{jD:[function(a){var z,y,x,w,v
-z=R.Jk([])
+z=Q.uX(null,D.kx)
y=$.Nd()
x=P.Py(null,null,null,J.O,W.I0)
w=J.O
v=W.cv
v=H.VM(new V.qC(P.Py(null,null,null,w,v),null,null),[w,v])
-a.SS=0
-a.fb=[10,20,50]
-a.qY=z
-a.qO="#tableTree"
-a.eH=""
+a.Dt=z
+a.BA=0
+a.FT=""
a.vk=""
+a.fb=[10,20,50]
+a.qO="#tableTree"
a.SO=y
a.B7=x
a.X0=v
C.XH.ZL(a)
C.XH.G6(a)
-return a},null,null,0,0,113,"new IsolateProfileElement$created"]}},
-"+IsolateProfileElement":[542],
-KUl:{
-"^":"PO+Pi;",
+return a},null,null,0,0,115,"new IsolateProfileElement$created"]}},
+"+IsolateProfileElement":[515],
+V4:{
+"^":"uL+Pi;",
$isd3:true},
SV:{
-"^":"Tp:357;a-77",
-call$1:[function(a){var z,y,x
-z=J.UQ(a,"samples")
-N.Jx("").To("Profile contains "+H.d(z)+" samples.")
-y=this.a
-x=J.RE(y)
-x.IW(y,x.gpC(y),z,a)},"call$1",null,2,0,357,543,[],"call"],
+"^":"Tp:378;a-82",
+call$1:[function(a){var z,y
+z=this.a
+y=J.RE(z)
+y.spD(z,y.ct(z,C.vb,y.gpD(z),a))},"call$1",null,2,0,378,190,[],"call"],
$isEH:true},
-"+IsolateProfileElement_refresh_closure":[415],
-Mf:{
-"^":"Tp:346;",
-call$2:[function(a,b){N.Jx("").wF("Error refreshing profile",a,b)},"call$2",null,4,0,346,18,[],377,[],"call"],
-$isEH:true},
-"+IsolateProfileElement_refresh_closure":[415]}],["isolate_summary_element","package:observatory/src/elements/isolate_summary.dart",,D,{
+"+ SV":[489]}],["isolate_summary_element","package:observatory/src/elements/isolate_summary.dart",,D,{
"^":"",
Kz:{
-"^":["PO;pC-411,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0-412",null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
+"^":["V9;Pw%-516,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0-375",null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.Nw]}],
+gF1:[function(a){return a.Pw},null,null,1,0,357,"isolate",358,377],
+sF1:[function(a,b){a.Pw=this.ct(a,C.Z8,a.Pw,b)},null,null,3,0,360,28,[],"isolate",358],
"@":function(){return[C.aM]},
static:{JR:[function(a){var z,y,x,w
z=$.Nd()
@@ -19345,37 +18786,40 @@
a.X0=w
C.Qt.ZL(a)
C.Qt.G6(a)
-return a},null,null,0,0,113,"new IsolateSummaryElement$created"]}},
-"+IsolateSummaryElement":[544]}],["json_view_element","package:observatory/src/elements/json_view.dart",,Z,{
+return a},null,null,0,0,115,"new IsolateSummaryElement$created"]}},
+"+IsolateSummaryElement":[517],
+V9:{
+"^":"uL+Pi;",
+$isd3:true}}],["json_view_element","package:observatory/src/elements/json_view.dart",,Z,{
"^":"",
vj:{
-"^":["tuj;eb%-77,kf%-77,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0-412",null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
-gvL:[function(a){return a.eb},null,null,1,0,113,"json",355,397],
-svL:[function(a,b){a.eb=this.ct(a,C.Gd,a.eb,b)},null,null,3,0,107,23,[],"json",355],
+"^":["V10;eb%-82,kf%-82,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0-375",null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.Nw]}],
+gvL:[function(a){return a.eb},null,null,1,0,115,"json",358,377],
+svL:[function(a,b){a.eb=this.ct(a,C.Gd,a.eb,b)},null,null,3,0,112,28,[],"json",358],
i4:[function(a){Z.uL.prototype.i4.call(this,a)
-a.kf=0},"call$0","gQd",0,0,112,"enteredView"],
-yC:[function(a,b){this.ct(a,C.eR,"a","b")},"call$1","gHl",2,0,158,233,[],"jsonChanged"],
-gW0:[function(a){return J.AG(a.eb)},null,null,1,0,370,"primitiveString"],
+a.kf=0},"call$0","gQd",0,0,114,"enteredView"],
+yC:[function(a,b){this.ct(a,C.eR,"a","b")},"call$1","gHl",2,0,157,229,[],"jsonChanged"],
+gW0:[function(a){return J.AG(a.eb)},null,null,1,0,365,"primitiveString"],
gmm:[function(a){var z,y
z=a.eb
y=J.x(z)
if(typeof z==="object"&&z!==null&&!!y.$isZ0)return"Map"
else if(typeof z==="object"&&z!==null&&(z.constructor===Array||!!y.$isList))return"List"
-return"Primitive"},null,null,1,0,370,"valueType"],
+return"Primitive"},null,null,1,0,365,"valueType"],
gkG:[function(a){var z=a.kf
a.kf=J.WB(z,1)
-return z},null,null,1,0,371,"counter"],
-gaK:[function(a){var z,y
+return z},null,null,1,0,512,"counter"],
+go6:[function(a){var z,y
z=a.eb
y=J.x(z)
if(typeof z==="object"&&z!==null&&(z.constructor===Array||!!y.$isList))return z
-return[]},null,null,1,0,535,"list"],
+return[]},null,null,1,0,518,"list"],
gvc:[function(a){var z,y
z=a.eb
y=J.RE(z)
if(typeof z==="object"&&z!==null&&!!y.$isZ0)return J.qA(y.gvc(z))
-return[]},null,null,1,0,535,"keys"],
-r6:[function(a,b){return J.UQ(a.eb,b)},"call$1","gP",2,0,25,42,[],"value"],
+return[]},null,null,1,0,518,"keys"],
+r6:[function(a,b){return J.UQ(a.eb,b)},"call$1","gP",2,0,30,47,[],"value"],
"@":function(){return[C.KH]},
static:{mA:[function(a){var z,y,x,w
z=$.Nd()
@@ -19388,17 +18832,17 @@
a.SO=z
a.B7=y
a.X0=w
-C.GB.ZL(a)
-C.GB.G6(a)
-return a},null,null,0,0,113,"new JsonViewElement$created"]}},
-"+JsonViewElement":[545],
-tuj:{
+C.Yt.ZL(a)
+C.Yt.G6(a)
+return a},null,null,0,0,115,"new JsonViewElement$created"]}},
+"+JsonViewElement":[519],
+V10:{
"^":"uL+Pi;",
$isd3:true}}],["library_ref_element","package:observatory/src/elements/library_ref.dart",,R,{
"^":"",
LU:{
-"^":["xI;tY-410,Pe-417,AP,fn,pC-411,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0-412",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
-"@":function(){return[C.QU]},
+"^":["xI;tY-381,Pe-382,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0-375",null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.Nw]}],
+"@":function(){return[C.uy]},
static:{rA:[function(a){var z,y,x,w
z=$.Nd()
y=P.Py(null,null,null,J.O,W.I0)
@@ -19411,47 +18855,31 @@
a.X0=w
C.Z3.ZL(a)
C.Z3.G6(a)
-return a},null,null,0,0,113,"new LibraryRefElement$created"]}},
-"+LibraryRefElement":[418]}],["library_view_element","package:observatory/src/elements/library_view.dart",,M,{
+return a},null,null,0,0,115,"new LibraryRefElement$created"]}},
+"+LibraryRefElement":[383]}],["library_view_element","package:observatory/src/elements/library_view.dart",,M,{
"^":"",
-T2:{
-"^":["mHk;N7%-410,AP,fn,pC-411,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0-412",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
-gtD:[function(a){return a.N7},null,null,1,0,354,"library",355,397],
-stD:[function(a,b){a.N7=this.ct(a,C.EV,a.N7,b)},null,null,3,0,357,23,[],"library",355],
-RF:[function(a,b){a.pC.oX(J.UQ(a.N7,"id")).ml(new M.Jq(a)).OA(new M.Yn()).YM(b)},"call$1","gvC",2,0,158,413,[],"refresh"],
+KL:{
+"^":["V11;N7%-374,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0-375",null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.Nw]}],
+gtD:[function(a){return a.N7},null,null,1,0,376,"library",358,377],
+stD:[function(a,b){a.N7=this.ct(a,C.EV,a.N7,b)},null,null,3,0,378,28,[],"library",358],
+yv:[function(a,b){J.am(a.N7).YM(b)},"call$1","gvC",2,0,157,379,[],"refresh"],
"@":function(){return[C.Gg]},
-static:{SP:[function(a){var z,y,x,w,v
-z=H.B7([],P.L5(null,null,null,null,null))
-z=R.Jk(z)
-y=$.Nd()
-x=P.Py(null,null,null,J.O,W.I0)
-w=J.O
-v=W.cv
-v=H.VM(new V.qC(P.Py(null,null,null,w,v),null,null),[w,v])
-a.N7=z
-a.SO=y
-a.B7=x
-a.X0=v
+static:{Ro:[function(a){var z,y,x,w
+z=$.Nd()
+y=P.Py(null,null,null,J.O,W.I0)
+x=J.O
+w=W.cv
+w=H.VM(new V.qC(P.Py(null,null,null,x,w),null,null),[x,w])
+a.SO=z
+a.B7=y
+a.X0=w
C.MG.ZL(a)
C.MG.G6(a)
-return a},null,null,0,0,113,"new LibraryViewElement$created"]}},
-"+LibraryViewElement":[546],
-mHk:{
-"^":"PO+Pi;",
-$isd3:true},
-Jq:{
-"^":"Tp:107;a-77",
-call$1:[function(a){var z,y
-z=this.a
-y=J.RE(z)
-y.sN7(z,y.ct(z,C.EV,y.gN7(z),a))},"call$1",null,2,0,107,149,[],"call"],
-$isEH:true},
-"+LibraryViewElement_refresh_closure":[415],
-Yn:{
-"^":"Tp:346;",
-call$2:[function(a,b){N.Jx("").hh("Error while refreshing library-view: "+H.d(a)+"\n"+H.d(b))},"call$2",null,4,0,346,18,[],416,[],"call"],
-$isEH:true},
-"+LibraryViewElement_refresh_closure":[415]}],["logging","package:logging/logging.dart",,N,{
+return a},null,null,0,0,115,"new LibraryViewElement$created"]}},
+"+LibraryViewElement":[520],
+V11:{
+"^":"uL+Pi;",
+$isd3:true}}],["logging","package:logging/logging.dart",,N,{
"^":"",
TJ:{
"^":"a;oc>,eT>,n2,Cj>,wd>,Gs",
@@ -19468,34 +18896,35 @@
else{if(this.eT!=null)throw H.b(P.f("Please set \"hierarchicalLoggingEnabled\" to true if you want to change the level on a non-root logger."))
$.Y4=a}},
gSZ:function(){return this.IE()},
-Im:[function(a){return a.P>=this.gOR().P},"call$1","goT",2,0,null,23,[]],
+Im:[function(a){return a.P>=this.gOR().P},"call$1","goT",2,0,null,28,[]],
Y6:[function(a,b,c,d){var z,y,x,w,v
if(a.P>=this.gOR().P){z=this.gB8()
-y=P.Gi()
+y=new P.iP(Date.now(),!1)
+y.EK()
x=$.xO
$.xO=x+1
w=new N.HV(a,b,z,y,x,c,d)
if($.RL)for(v=this;v!=null;){z=J.RE(v)
z.od(v,w)
-v=z.geT(v)}else J.EY(N.Jx(""),w)}},"call$4","gA9",4,4,null,77,77,547,[],20,[],160,[],161,[]],
-X2:[function(a,b,c){return this.Y6(C.VZ,a,b,c)},function(a){return this.X2(a,null,null)},"x9","call$3",null,"gEX",2,4,null,77,77,20,[],160,[],161,[]],
-yl:[function(a,b,c){return this.Y6(C.R5,a,b,c)},function(a){return this.yl(a,null,null)},"J4","call$3",null,"gmU",2,4,null,77,77,20,[],160,[],161,[]],
-ZG:[function(a,b,c){return this.Y6(C.IF,a,b,c)},function(a){return this.ZG(a,null,null)},"To","call$3",null,"gqa",2,4,null,77,77,20,[],160,[],161,[]],
-wF:[function(a,b,c){return this.Y6(C.UP,a,b,c)},function(a){return this.wF(a,null,null)},"j2","call$3",null,"goa",2,4,null,77,77,20,[],160,[],161,[]],
-WB:[function(a,b,c){return this.Y6(C.cV,a,b,c)},function(a){return this.WB(a,null,null)},"hh","call$3",null,"gxx",2,4,null,77,77,20,[],160,[],161,[]],
+v=z.geT(v)}else J.EY(N.Jx(""),w)}},"call$4","gA9",4,4,null,82,82,521,[],22,[],159,[],160,[]],
+X2:[function(a,b,c){return this.Y6(C.VZ,a,b,c)},function(a){return this.X2(a,null,null)},"x9","call$3",null,"git",2,4,null,82,82,22,[],159,[],160,[]],
+yl:[function(a,b,c){return this.Y6(C.R5,a,b,c)},function(a){return this.yl(a,null,null)},"J4","call$3",null,"gmU",2,4,null,82,82,22,[],159,[],160,[]],
+ZG:[function(a,b,c){return this.Y6(C.IF,a,b,c)},function(a){return this.ZG(a,null,null)},"To","call$3",null,"gqa",2,4,null,82,82,22,[],159,[],160,[]],
+OW:[function(a,b,c){return this.Y6(C.UP,a,b,c)},function(a){return this.OW(a,null,null)},"j2","call$3",null,"goa",2,4,null,82,82,22,[],159,[],160,[]],
+WB:[function(a,b,c){return this.Y6(C.cV,a,b,c)},function(a){return this.WB(a,null,null)},"hh","call$3",null,"gpo",2,4,null,82,82,22,[],159,[],160,[]],
IE:[function(){if($.RL||this.eT==null){var z=this.Gs
if(z==null){z=P.bK(null,null,!0,N.HV)
this.Gs=z}z.toString
return H.VM(new P.Ik(z),[H.Kp(z,0)])}else return N.Jx("").IE()},"call$0","gnc",0,0,null],
od:[function(a,b){var z=this.Gs
if(z!=null){if(z.Gv>=4)H.vh(z.q7())
-z.Iv(b)}},"call$1","gBq",2,0,null,22,[]],
+z.Iv(b)}},"call$1","gBq",2,0,null,27,[]],
QL:function(a,b,c){var z=this.eT
if(z!=null)J.Tr(z).u(0,this.oc,this)},
$isTJ:true,
static:{"^":"DY",Jx:function(a){return $.U0().to(a,new N.dG(a))}}},
dG:{
-"^":"Tp:113;a",
+"^":"Tp:115;a",
call$0:[function(){var z,y,x,w,v
z=this.a
if(C.xB.nC(z,"."))H.vh(new P.AT("name shouldn't start with a '.'"))
@@ -19513,29 +18942,29 @@
n:[function(a,b){var z
if(b==null)return!1
z=J.x(b)
-return typeof b==="object"&&b!==null&&!!z.$isqV&&this.P===b.P},"call$1","gUJ",2,0,null,104,[]],
+return typeof b==="object"&&b!==null&&!!z.$isqV&&this.P===b.P},"call$1","gUJ",2,0,null,109,[]],
C:[function(a,b){var z=J.Vm(b)
if(typeof z!=="number")return H.s(z)
-return this.P<z},"call$1","gix",2,0,null,104,[]],
+return this.P<z},"call$1","gix",2,0,null,109,[]],
E:[function(a,b){var z=J.Vm(b)
if(typeof z!=="number")return H.s(z)
-return this.P<=z},"call$1","gf5",2,0,null,104,[]],
+return this.P<=z},"call$1","gER",2,0,null,109,[]],
D:[function(a,b){var z=J.Vm(b)
if(typeof z!=="number")return H.s(z)
-return this.P>z},"call$1","gh1",2,0,null,104,[]],
+return this.P>z},"call$1","gh1",2,0,null,109,[]],
F:[function(a,b){var z=J.Vm(b)
if(typeof z!=="number")return H.s(z)
-return this.P>=z},"call$1","gNH",2,0,null,104,[]],
+return this.P>=z},"call$1","gNH",2,0,null,109,[]],
iM:[function(a,b){var z=J.Vm(b)
if(typeof z!=="number")return H.s(z)
-return this.P-z},"call$1","gYc",2,0,null,104,[]],
+return this.P-z},"call$1","gYc",2,0,null,109,[]],
giO:function(a){return this.P},
bu:[function(a){return this.oc},"call$0","gXo",0,0,null],
$isqV:true,
-static:{"^":"V7K,tmj,Enk,us,reI,pd,Wr,AN,JY,lM,B9"}},
+static:{"^":"V7K,tmj,Enk,us,IQ,pd,Wr,AN,JY,lM,B9"}},
HV:{
"^":"a;OR<,G1>,iJ,Fl<,O0,kc>,I4<",
-bu:[function(a){return"["+this.OR.oc+"] "+this.iJ+": "+this.G1},"call$0","gXo",0,0,null],
+bu:[function(a){return"["+this.OR.oc+"] "+this.iJ+": "+H.d(this.G1)},"call$0","gXo",0,0,null],
$isHV:true,
static:{"^":"xO"}}}],["","main.dart",,F,{
"^":"",
@@ -19547,60 +18976,30 @@
J.UQ($.cM(),"google").V7("load",["visualization","1",P.jT(H.B7(["packages",["corechart","table"],"callback",new P.r7(P.xZ(z.gv6(z),!0))],P.L5(null,null,null,null,null)))])
z.MM.ml(G.vN()).ml(new F.Lb())},"call$0","qg",0,0,null],
em:{
-"^":"Tp:549;",
-call$1:[function(a){P.JS(a.gOR().oc+": "+H.d(a.gFl())+": "+H.d(J.yj(a)))},"call$1",null,2,0,null,548,[],"call"],
+"^":"Tp:523;",
+call$1:[function(a){P.JS(a.gOR().oc+": "+H.d(a.gFl())+": "+H.d(J.yj(a)))},"call$1",null,2,0,null,522,[],"call"],
$isEH:true},
Lb:{
-"^":"Tp:107;",
+"^":"Tp:112;",
call$1:[function(a){N.Jx("").To("Initializing Polymer")
-A.Ok()},"call$1",null,2,0,null,108,[],"call"],
-$isEH:true}}],["message_viewer_element","package:observatory/src/elements/message_viewer.dart",,L,{
+A.Ok()},"call$1",null,2,0,null,113,[],"call"],
+$isEH:true}}],["metadata","../../../../../../../../../dart/dart-sdk/lib/html/html_common/metadata.dart",,B,{
"^":"",
-PF:{
-"^":["Vct;Gj%-410,ah%-550,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0-412",null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
-gG1:[function(a){return a.Gj},null,null,1,0,354,"message",397],
-guw:[function(a){return a.ah},null,null,1,0,408,"app",355,397],
-suw:[function(a,b){a.ah=this.ct(a,C.wh,a.ah,b)},null,null,3,0,551,23,[],"app",355],
-sG1:[function(a,b){if(b==null){N.Jx("").To("Viewing null message.")
-return}N.Jx("").To("Viewing message of type '"+H.d(J.UQ(b,"type"))+"'")
-a.Gj=b
-this.ct(a,C.US,"",this.gQW(a))},null,null,3,0,357,191,[],"message",397],
-gQW:[function(a){var z=a.Gj
-if(z==null||J.UQ(z,"type")==null)return"Error"
-return J.UQ(a.Gj,"type")},null,null,1,0,370,"messageType"],
-"@":function(){return[C.rc]},
-static:{A5:[function(a){var z,y,x,w
-z=$.Nd()
-y=P.Py(null,null,null,J.O,W.I0)
-x=J.O
-w=W.cv
-w=H.VM(new V.qC(P.Py(null,null,null,x,w),null,null),[x,w])
-a.SO=z
-a.B7=y
-a.X0=w
-C.Wp.ZL(a)
-C.Wp.G6(a)
-return a},null,null,0,0,113,"new MessageViewerElement$created"]}},
-"+MessageViewerElement":[552],
-Vct:{
-"^":"uL+Pi;",
-$isd3:true}}],["metadata","../../../../../../../../../dart/dart-sdk/lib/html/html_common/metadata.dart",,B,{
-"^":"",
-fA:{
+T4:{
"^":"a;T9,Bu",
static:{"^":"Xd,en,pjg,PZ,xa"}},
-Qz:{
+tzK:{
"^":"a;"},
jA:{
"^":"a;oc>"},
-Jo:{
+PO:{
"^":"a;"},
-c5:{
+oBi:{
"^":"a;"}}],["nav_bar_element","package:observatory/src/elements/nav_bar.dart",,A,{
"^":"",
F1:{
-"^":["uL;AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0-412",null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
-"@":function(){return[C.nW]},
+"^":["uL;AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0-375",null,null,null,null,null,null,null,null,null,function(){return[C.Nw]}],
+"@":function(){return[C.Ug]},
static:{z5:[function(a){var z,y,x,w
z=$.Nd()
y=P.Py(null,null,null,J.O,W.I0)
@@ -19612,16 +19011,16 @@
a.X0=w
C.kD.ZL(a)
C.kD.G6(a)
-return a},null,null,0,0,113,"new NavBarElement$created"]}},
-"+NavBarElement":[553],
+return a},null,null,0,0,115,"new NavBarElement$created"]}},
+"+NavBarElement":[524],
aQ:{
-"^":["D13;uy%-387,ZC%-387,Jo%-417,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0-412",null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
-gPj:[function(a){return a.uy},null,null,1,0,370,"link",355,397],
-sPj:[function(a,b){a.uy=this.ct(a,C.dB,a.uy,b)},null,null,3,0,25,23,[],"link",355],
-gdU:[function(a){return a.ZC},null,null,1,0,370,"anchor",355,397],
-sdU:[function(a,b){a.ZC=this.ct(a,C.Es,a.ZC,b)},null,null,3,0,25,23,[],"anchor",355],
-grZ:[function(a){return a.Jo},null,null,1,0,380,"last",355,397],
-srZ:[function(a,b){a.Jo=this.ct(a,C.QL,a.Jo,b)},null,null,3,0,381,23,[],"last",355],
+"^":["V12;KU%-389,V4%-389,Jo%-382,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0-375",null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.Nw]}],
+gPj:[function(a){return a.KU},null,null,1,0,365,"link",358,377],
+sPj:[function(a,b){a.KU=this.ct(a,C.dB,a.KU,b)},null,null,3,0,30,28,[],"link",358],
+gdU:[function(a){return a.V4},null,null,1,0,365,"anchor",358,377],
+sdU:[function(a,b){a.V4=this.ct(a,C.cg,a.V4,b)},null,null,3,0,30,28,[],"anchor",358],
+grZ:[function(a){return a.Jo},null,null,1,0,390,"last",358,377],
+srZ:[function(a,b){a.Jo=this.ct(a,C.QL,a.Jo,b)},null,null,3,0,391,28,[],"last",358],
"@":function(){return[C.pc]},
static:{AJ:[function(a){var z,y,x,w
z=$.Nd()
@@ -19629,57 +19028,59 @@
x=J.O
w=W.cv
w=H.VM(new V.qC(P.Py(null,null,null,x,w),null,null),[x,w])
-a.uy="#"
-a.ZC="---"
+a.KU="#"
+a.V4="---"
a.Jo=!1
a.SO=z
a.B7=y
a.X0=w
C.SU.ZL(a)
C.SU.G6(a)
-return a},null,null,0,0,113,"new NavMenuElement$created"]}},
-"+NavMenuElement":[554],
-D13:{
+return a},null,null,0,0,115,"new NavMenuElement$created"]}},
+"+NavMenuElement":[525],
+V12:{
"^":"uL+Pi;",
$isd3:true},
-Ya5:{
-"^":["WZq;uy%-387,ZC%-387,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0-412",null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
-gPj:[function(a){return a.uy},null,null,1,0,370,"link",355,397],
-sPj:[function(a,b){a.uy=this.ct(a,C.dB,a.uy,b)},null,null,3,0,25,23,[],"link",355],
-gdU:[function(a){return a.ZC},null,null,1,0,370,"anchor",355,397],
-sdU:[function(a,b){a.ZC=this.ct(a,C.Es,a.ZC,b)},null,null,3,0,25,23,[],"anchor",355],
-"@":function(){return[C.qT]},
+Qa:{
+"^":["V13;KU%-389,V4%-389,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0-375",null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.Nw]}],
+gPj:[function(a){return a.KU},null,null,1,0,365,"link",358,377],
+sPj:[function(a,b){a.KU=this.ct(a,C.dB,a.KU,b)},null,null,3,0,30,28,[],"link",358],
+gdU:[function(a){return a.V4},null,null,1,0,365,"anchor",358,377],
+sdU:[function(a,b){a.V4=this.ct(a,C.cg,a.V4,b)},null,null,3,0,30,28,[],"anchor",358],
+"@":function(){return[C.nh]},
static:{EL:[function(a){var z,y,x,w
z=$.Nd()
y=P.Py(null,null,null,J.O,W.I0)
x=J.O
w=W.cv
w=H.VM(new V.qC(P.Py(null,null,null,x,w),null,null),[x,w])
-a.uy="#"
-a.ZC="---"
+a.KU="#"
+a.V4="---"
a.SO=z
a.B7=y
a.X0=w
C.nn.ZL(a)
C.nn.G6(a)
-return a},null,null,0,0,113,"new NavMenuItemElement$created"]}},
-"+NavMenuItemElement":[555],
-WZq:{
+return a},null,null,0,0,115,"new NavMenuItemElement$created"]}},
+"+NavMenuItemElement":[526],
+V13:{
"^":"uL+Pi;",
$isd3:true},
Ww:{
-"^":["pva;rU%-77,SB%-417,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0-412",null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
-gFR:[function(a){return a.rU},null,null,1,0,113,"callback",355,397],
+"^":["V14;rU%-82,SB%-382,Hq%-389,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0-375",null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.Nw]}],
+gFR:[function(a){return a.rU},null,null,1,0,115,"callback",358,377],
Ki:function(a){return this.gFR(a).call$0()},
VN:function(a,b){return this.gFR(a).call$1(b)},
-sFR:[function(a,b){a.rU=this.ct(a,C.AV,a.rU,b)},null,null,3,0,107,23,[],"callback",355],
-gxw:[function(a){return a.SB},null,null,1,0,380,"active",355,397],
-sxw:[function(a,b){a.SB=this.ct(a,C.aP,a.SB,b)},null,null,3,0,381,23,[],"active",355],
+sFR:[function(a,b){a.rU=this.ct(a,C.AV,a.rU,b)},null,null,3,0,112,28,[],"callback",358],
+gxw:[function(a){return a.SB},null,null,1,0,390,"active",358,377],
+sxw:[function(a,b){a.SB=this.ct(a,C.aP,a.SB,b)},null,null,3,0,391,28,[],"active",358],
+gph:[function(a){return a.Hq},null,null,1,0,365,"label",358,377],
+sph:[function(a,b){a.Hq=this.ct(a,C.hf,a.Hq,b)},null,null,3,0,30,28,[],"label",358],
Ty:[function(a,b,c,d){var z=a.SB
if(z===!0)return
a.SB=this.ct(a,C.aP,z,!0)
-if(a.rU!=null)this.VN(a,this.gCB(a))},"call$3","gzY",6,0,425,18,[],306,[],74,[],"buttonClick"],
-wY:[function(a){a.SB=this.ct(a,C.aP,a.SB,!1)},"call$0","gCB",0,0,112,"refreshDone"],
+if(a.rU!=null)this.VN(a,this.gCB(a))},"call$3","gyr",6,0,393,19,[],304,[],79,[],"buttonClick"],
+wY:[function(a){a.SB=this.ct(a,C.aP,a.SB,!1)},"call$0","gCB",0,0,114,"refreshDone"],
"@":function(){return[C.XG]},
static:{ZC:[function(a){var z,y,x,w
z=$.Nd()
@@ -19688,20 +19089,21 @@
w=W.cv
w=H.VM(new V.qC(P.Py(null,null,null,x,w),null,null),[x,w])
a.SB=!1
+a.Hq="Refresh"
a.SO=z
a.B7=y
a.X0=w
C.J7.ZL(a)
C.J7.G6(a)
-return a},null,null,0,0,113,"new NavRefreshElement$created"]}},
-"+NavRefreshElement":[556],
-pva:{
+return a},null,null,0,0,115,"new NavRefreshElement$created"]}},
+"+NavRefreshElement":[527],
+V14:{
"^":"uL+Pi;",
$isd3:true},
tz:{
-"^":["cda;Jo%-417,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0-412",null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
-grZ:[function(a){return a.Jo},null,null,1,0,380,"last",355,397],
-srZ:[function(a,b){a.Jo=this.ct(a,C.QL,a.Jo,b)},null,null,3,0,381,23,[],"last",355],
+"^":["V15;Jo%-382,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0-375",null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.Nw]}],
+grZ:[function(a){return a.Jo},null,null,1,0,390,"last",358,377],
+srZ:[function(a,b){a.Jo=this.ct(a,C.QL,a.Jo,b)},null,null,3,0,391,28,[],"last",358],
"@":function(){return[C.NT]},
static:{J8:[function(a){var z,y,x,w
z=$.Nd()
@@ -19715,17 +19117,19 @@
a.X0=w
C.lx.ZL(a)
C.lx.G6(a)
-return a},null,null,0,0,113,"new TopNavMenuElement$created"]}},
-"+TopNavMenuElement":[557],
-cda:{
+return a},null,null,0,0,115,"new TopNavMenuElement$created"]}},
+"+TopNavMenuElement":[528],
+V15:{
"^":"uL+Pi;",
$isd3:true},
fl:{
-"^":["qFb;Jo%-417,AP,fn,pC-411,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0-412",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
-grZ:[function(a){return a.Jo},null,null,1,0,380,"last",355,397],
-srZ:[function(a,b){a.Jo=this.ct(a,C.QL,a.Jo,b)},null,null,3,0,381,23,[],"last",355],
+"^":["V16;Jo%-382,iy%-516,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0-375",null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.Nw]}],
+grZ:[function(a){return a.Jo},null,null,1,0,390,"last",358,377],
+srZ:[function(a,b){a.Jo=this.ct(a,C.QL,a.Jo,b)},null,null,3,0,391,28,[],"last",358],
+gF1:[function(a){return a.iy},null,null,1,0,357,"isolate",358,377],
+sF1:[function(a,b){a.iy=this.ct(a,C.Z8,a.iy,b)},null,null,3,0,360,28,[],"isolate",358],
"@":function(){return[C.zaS]},
-static:{Yt:[function(a){var z,y,x,w
+static:{Du:[function(a){var z,y,x,w
z=$.Nd()
y=P.Py(null,null,null,J.O,W.I0)
x=J.O
@@ -19737,17 +19141,17 @@
a.X0=w
C.RR.ZL(a)
C.RR.G6(a)
-return a},null,null,0,0,113,"new IsolateNavMenuElement$created"]}},
-"+IsolateNavMenuElement":[558],
-qFb:{
-"^":"PO+Pi;",
+return a},null,null,0,0,115,"new IsolateNavMenuElement$created"]}},
+"+IsolateNavMenuElement":[529],
+V16:{
+"^":"uL+Pi;",
$isd3:true},
-oM:{
-"^":["rna;Ap%-410,Jo%-417,AP,fn,pC-411,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0-412",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
-gtD:[function(a){return a.Ap},null,null,1,0,354,"library",355,397],
-stD:[function(a,b){a.Ap=this.ct(a,C.EV,a.Ap,b)},null,null,3,0,357,23,[],"library",355],
-grZ:[function(a){return a.Jo},null,null,1,0,380,"last",355,397],
-srZ:[function(a,b){a.Jo=this.ct(a,C.QL,a.Jo,b)},null,null,3,0,381,23,[],"last",355],
+Zt:{
+"^":["V17;Ap%-374,Jo%-382,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0-375",null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.Nw]}],
+gtD:[function(a){return a.Ap},null,null,1,0,376,"library",358,377],
+stD:[function(a,b){a.Ap=this.ct(a,C.EV,a.Ap,b)},null,null,3,0,378,28,[],"library",358],
+grZ:[function(a){return a.Jo},null,null,1,0,390,"last",358,377],
+srZ:[function(a,b){a.Jo=this.ct(a,C.QL,a.Jo,b)},null,null,3,0,391,28,[],"last",358],
"@":function(){return[C.KI]},
static:{IV:[function(a){var z,y,x,w
z=$.Nd()
@@ -19759,19 +19163,19 @@
a.SO=z
a.B7=y
a.X0=w
-C.S3.ZL(a)
-C.S3.G6(a)
-return a},null,null,0,0,113,"new LibraryNavMenuElement$created"]}},
-"+LibraryNavMenuElement":[559],
-rna:{
-"^":"PO+Pi;",
+C.ct.ZL(a)
+C.ct.G6(a)
+return a},null,null,0,0,115,"new LibraryNavMenuElement$created"]}},
+"+LibraryNavMenuElement":[530],
+V17:{
+"^":"uL+Pi;",
$isd3:true},
-wM:{
-"^":["Vba;Au%-410,Jo%-417,AP,fn,pC-411,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0-412",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
-gRu:[function(a){return a.Au},null,null,1,0,354,"cls",355,397],
-sRu:[function(a,b){a.Au=this.ct(a,C.XA,a.Au,b)},null,null,3,0,357,23,[],"cls",355],
-grZ:[function(a){return a.Jo},null,null,1,0,380,"last",355,397],
-srZ:[function(a,b){a.Jo=this.ct(a,C.QL,a.Jo,b)},null,null,3,0,381,23,[],"last",355],
+iL:{
+"^":["V18;Au%-374,Jo%-382,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0-375",null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.Nw]}],
+gRu:[function(a){return a.Au},null,null,1,0,376,"cls",358,377],
+sRu:[function(a,b){a.Au=this.ct(a,C.XA,a.Au,b)},null,null,3,0,378,28,[],"cls",358],
+grZ:[function(a){return a.Jo},null,null,1,0,390,"last",358,377],
+srZ:[function(a,b){a.Jo=this.ct(a,C.QL,a.Jo,b)},null,null,3,0,391,28,[],"last",358],
"@":function(){return[C.t9]},
static:{lT:[function(a){var z,y,x,w
z=$.Nd()
@@ -19785,29 +19189,30 @@
a.X0=w
C.xE.ZL(a)
C.xE.G6(a)
-return a},null,null,0,0,113,"new ClassNavMenuElement$created"]}},
-"+ClassNavMenuElement":[560],
-Vba:{
-"^":"PO+Pi;",
+return a},null,null,0,0,115,"new ClassNavMenuElement$created"]}},
+"+ClassNavMenuElement":[531],
+V18:{
+"^":"uL+Pi;",
$isd3:true}}],["observatory_application_element","package:observatory/src/elements/observatory_application.dart",,V,{
"^":"",
lI:{
-"^":["waa;k5%-417,xH%-550,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0-412",null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
-gzj:[function(a){return a.k5},null,null,1,0,380,"devtools",355,397],
-szj:[function(a,b){a.k5=this.ct(a,C.Na,a.k5,b)},null,null,3,0,381,23,[],"devtools",355],
-guw:[function(a){return a.xH},null,null,1,0,408,"app",355,356],
-suw:[function(a,b){a.xH=this.ct(a,C.wh,a.xH,b)},null,null,3,0,551,23,[],"app",355],
-ZB:[function(a){var z,y
-if(a.k5===!0){z=new G.ho(P.L5(null,null,null,null,null),0,null,H.VM(new V.qC(P.Py(null,null,null,null,null),null,null),[null,null]),null,null)
-y=C.ph.aM(window)
-H.VM(new W.Ov(0,y.uv,y.Ph,W.aF(z.gcW()),y.Sg),[H.Kp(y,0)]).Zz()
-P.JS("Connected to DartiumVM")
-z=new G.mL(new G.dZ(null,!1,"",null,null,null),z,null,null,null,null)
+"^":["V19;k5%-382,xH%-532,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0-375",null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.Nw]}],
+gzj:[function(a){return a.k5},null,null,1,0,390,"devtools",358,377],
+szj:[function(a,b){a.k5=this.ct(a,C.Na,a.k5,b)},null,null,3,0,391,28,[],"devtools",358],
+guw:[function(a){return a.xH},null,null,1,0,533,"app",358,359],
+suw:[function(a,b){a.xH=this.ct(a,C.wh,a.xH,b)},null,null,3,0,534,28,[],"app",358],
+ZB:[function(a){var z
+if(a.k5===!0){z=new U.ho(P.L5(null,null,null,null,null),0,null,null,null,null,null)
+z.pC()
+z.PI()
+z=new G.mL(new G.dZ(null,"",null,null),z,null,null,null,null)
z.hq()
-a.xH=this.ct(a,C.wh,a.xH,z)}else{z=new G.mL(new G.dZ(null,!1,"",null,null,null),new G.XK("http://127.0.0.1:8181/",null,H.VM(new V.qC(P.Py(null,null,null,null,null),null,null),[null,null]),null,null),null,null,null,null)
+a.xH=this.ct(a,C.wh,a.xH,z)}else{z=new U.XK("http://127.0.0.1:8181/",null,null,null,null,null)
+z.pC()
+z=new G.mL(new G.dZ(null,"",null,null),z,null,null,null,null)
z.US()
-a.xH=this.ct(a,C.wh,a.xH,z)}},null,null,0,0,113,"created"],
-"@":function(){return[C.kR]},
+a.xH=this.ct(a,C.wh,a.xH,z)}},null,null,0,0,115,"created"],
+"@":function(){return[C.bd]},
static:{fv:[function(a){var z,y,x,w
z=$.Nd()
y=P.Py(null,null,null,J.O,W.I0)
@@ -19821,49 +19226,51 @@
C.k0.ZL(a)
C.k0.G6(a)
C.k0.ZB(a)
-return a},null,null,0,0,113,"new ObservatoryApplicationElement$created"]}},
-"+ObservatoryApplicationElement":[561],
-waa:{
+return a},null,null,0,0,115,"new ObservatoryApplicationElement$created"]}},
+"+ObservatoryApplicationElement":[535],
+V19:{
"^":"uL+Pi;",
$isd3:true}}],["observatory_element","package:observatory/src/elements/observatory_element.dart",,Z,{
"^":"",
uL:{
-"^":["ir;AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0-412",null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
-i4:[function(a){A.zs.prototype.i4.call(this,a)},"call$0","gQd",0,0,112,"enteredView"],
-xo:[function(a){A.zs.prototype.xo.call(this,a)},"call$0","gbt",0,0,112,"leftView"],
-aC:[function(a,b,c,d){A.zs.prototype.aC.call(this,a,b,c,d)},"call$3","gxR",6,0,562,12,[],233,[],234,[],"attributeChanged"],
-gpQ:[function(a){return!0},null,null,1,0,380,"applyAuthorStyles"],
+"^":["ir;AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0-375",null,null,null,null,null,null,null,null,null,function(){return[C.Nw]}],
+i4:[function(a){A.zs.prototype.i4.call(this,a)},"call$0","gQd",0,0,114,"enteredView"],
+xo:[function(a){A.zs.prototype.xo.call(this,a)},"call$0","gbt",0,0,114,"leftView"],
+aC:[function(a,b,c,d){A.zs.prototype.aC.call(this,a,b,c,d)},"call$3","gxR",6,0,536,12,[],229,[],230,[],"attributeChanged"],
+gpQ:[function(a){return!0},null,null,1,0,390,"applyAuthorStyles"],
Om:[function(a,b){var z,y,x,w
if(b==null)return"-"
-z=J.LL(J.p0(b,1000))
+z=J.LL(J.vX(b,1000))
y=C.jn.cU(z,3600000)
z=C.jn.Y(z,3600000)
x=C.jn.cU(z,60000)
z=C.jn.Y(z,60000)
w=C.jn.cU(z,1000)
z=C.jn.Y(z,1000)
-return Z.Ce(y,2)+":"+Z.Ce(x,2)+":"+Z.Ce(w,2)+"."+Z.Ce(z,3)},"call$1","gSs",2,0,563,564,[],"formatTime"],
-Ze:[function(a,b){var z=J.Wx(b)
+return Z.Ce(y,2)+":"+Z.Ce(x,2)+":"+Z.Ce(w,2)+"."+Z.Ce(z,3)},"call$1","gSs",2,0,537,538,[],"formatTime"],
+Yy:[function(a,b){return J.Ez(b,2)},"call$1","ghY",2,0,537,26,[],"formatSeconds"],
+A5:[function(a,b){var z=J.Wx(b)
if(z.C(b,1024))return H.d(b)+"B"
else if(z.C(b,1048576))return""+C.CD.yu(C.CD.UD(z.V(b,1024)))+"KB"
else if(z.C(b,1073741824))return""+C.CD.yu(C.CD.UD(z.V(b,1048576)))+"MB"
else if(z.C(b,1099511627776))return""+C.CD.yu(C.CD.UD(z.V(b,1073741824)))+"GB"
-else return""+C.CD.yu(C.CD.UD(z.V(b,1099511627776)))+"TB"},"call$1","gbJ",2,0,444,565,[],"formatSize"],
+else return""+C.CD.yu(C.CD.UD(z.V(b,1099511627776)))+"TB"},"call$1","gbJ",2,0,413,539,[],"formatSize"],
bj:[function(a,b){var z,y,x
z=J.U6(b)
y=J.UQ(z.t(b,"script"),"user_name")
x=J.U6(y)
-return x.yn(y,J.WB(x.cn(y,"/"),1))+":"+H.d(z.t(b,"line"))},"call$1","gNh",2,0,566,567,[],"fileAndLine"],
-nt:[function(a,b){return J.de(b,"@Null")},"call$1","gYx",2,0,568,11,[],"isNullRef"],
-Qq:[function(a,b){var z=J.x(b)
-return z.n(b,"@Smi")||z.n(b,"@Mint")||z.n(b,"@Bigint")},"call$1","gBI",2,0,568,11,[],"isIntRef"],
-TJ:[function(a,b){return J.de(b,"@Bool")},"call$1","gX4",2,0,568,11,[],"isBoolRef"],
-qH:[function(a,b){return J.de(b,"@String")},"call$1","gwm",2,0,568,11,[],"isStringRef"],
-JG:[function(a,b){return J.de(b,"@Instance")},"call$1","gUq",2,0,568,11,[],"isInstanceRef"],
-CL:[function(a,b){return J.de(b,"@Closure")},"call$1","gj7",2,0,568,11,[],"isClosureRef"],
-Bk:[function(a,b){var z=J.x(b)
-return z.n(b,"@GrowableObjectArray")||z.n(b,"@Array")},"call$1","gmv",2,0,568,11,[],"isListRef"],
-VR:[function(a,b){return!C.Nm.tg(["@Null","@Smi","@Mint","@Biginit","@Bool","@String","@Closure","@Instance","@GrowableObjectArray","@Array"],b)},"call$1","gua",2,0,568,11,[],"isUnexpectedRef"],
+return x.yn(y,J.WB(x.cn(y,"/"),1))+":"+H.d(z.t(b,"line"))},"call$1","gNh",2,0,540,541,[],"fileAndLine"],
+z4:[function(a,b){return J.de(b,"Null")},"call$1","gXj",2,0,542,11,[],"isNull"],
+i5:[function(a,b){return J.de(b,"Error")},"call$1","gt3",2,0,542,11,[],"isError"],
+OP:[function(a,b){var z=J.x(b)
+return z.n(b,"Smi")||z.n(b,"Mint")||z.n(b,"Bigint")},"call$1","gTB",2,0,542,11,[],"isInt"],
+RU:[function(a,b){return J.de(b,"Bool")},"call$1","gjS",2,0,542,11,[],"isBool"],
+KJ:[function(a,b){return J.de(b,"String")},"call$1","gfI",2,0,542,11,[],"isString"],
+fZ:[function(a,b){return J.de(b,"Instance")},"call$1","gnD",2,0,542,11,[],"isInstance"],
+F6:[function(a,b){return J.de(b,"Closure")},"call$1","gBF",2,0,542,11,[],"isClosure"],
+Cp:[function(a,b){var z=J.x(b)
+return z.n(b,"GrowableObjectArray")||z.n(b,"Array")},"call$1","gwc",2,0,542,11,[],"isList"],
+Cn:[function(a,b){return!C.Nm.tg(["Null","Smi","Mint","Biginit","Bool","String","Closure","Instance","GrowableObjectArray","Array","Error"],b)},"call$1","gaE",2,0,542,11,[],"isUnexpected"],
"@":function(){return[C.Br]},
static:{Hx:[function(a){var z,y,x,w
z=$.Nd()
@@ -19876,12 +19283,12 @@
a.X0=w
C.Pf.ZL(a)
C.Pf.G6(a)
-return a},null,null,0,0,113,"new ObservatoryElement$created"],Ce:[function(a,b){var z,y,x,w
+return a},null,null,0,0,115,"new ObservatoryElement$created"],Ce:[function(a,b){var z,y,x,w
for(z=J.Wx(a),y="";x=J.Wx(b),x.D(b,1);){w=x.W(b,1)
if(typeof w!=="number")H.vh(new P.AT(w))
if(z.C(a,Math.pow(10,w)))y+="0"
-b=x.W(b,1)}return y+H.d(a)},"call$2","px",4,0,243,23,[],244,[],"_zeroPad"]}},
-"+ObservatoryElement":[569]}],["observe.src.change_notifier","package:observe/src/change_notifier.dart",,O,{
+b=x.W(b,1)}return y+H.d(a)},"call$2","Rz",4,0,239,28,[],240,[],"_zeroPad"]}},
+"+ObservatoryElement":[543]}],["observe.src.change_notifier","package:observe/src/change_notifier.dart",,O,{
"^":"",
Pi:{
"^":"a;",
@@ -19890,46 +19297,40 @@
z=P.bK(this.gl1(a),z,!0,null)
a.AP=z}z.toString
return H.VM(new P.Ik(z),[H.Kp(z,0)])},
-k0:[function(a){},"call$0","gqw",0,0,112],
-ni:[function(a){a.AP=null},"call$0","gl1",0,0,112],
+k0:[function(a){},"call$0","gqw",0,0,114],
+ni:[function(a){a.AP=null},"call$0","gl1",0,0,114],
BN:[function(a){var z,y,x
-z=a.fn
-a.fn=null
-y=a.AP
-if(y!=null){x=y.iE
-x=x==null?y!=null:x!==y}else x=!1
-if(x&&z!=null){x=H.VM(new P.Yp(z),[T.z2])
+z=a.Lk
+a.Lk=null
+if(this.gnz(a)&&z!=null){y=a.AP
+x=H.VM(new P.Yp(z),[T.z2])
if(y.Gv>=4)H.vh(y.q7())
y.Iv(x)
-return!0}return!1},"call$0","gDx",0,0,380],
-gUV:function(a){var z,y
+return!0}return!1},"call$0","gDx",0,0,390],
+gnz:function(a){var z,y
z=a.AP
if(z!=null){y=z.iE
z=y==null?z!=null:y!==z}else z=!1
return z},
-ct:[function(a,b,c,d){return F.Wi(a,b,c,d)},"call$3","gAn",6,0,null,257,[],233,[],234,[]],
-nq:[function(a,b){var z,y
-z=a.AP
-if(z!=null){y=z.iE
-z=y==null?z!=null:y!==z}else z=!1
-if(!z)return
-if(a.fn==null){a.fn=[]
-P.rb(this.gDx(a))}a.fn.push(b)},"call$1","gbW",2,0,null,22,[]],
+ct:[function(a,b,c,d){return F.Wi(a,b,c,d)},"call$3","gAn",6,0,null,253,[],229,[],230,[]],
+nq:[function(a,b){if(!this.gnz(a))return
+if(a.Lk==null){a.Lk=[]
+P.rb(this.gDx(a))}a.Lk.push(b)},"call$1","giA",2,0,null,27,[]],
$isd3:true}}],["observe.src.change_record","package:observe/src/change_record.dart",,T,{
"^":"",
z2:{
"^":"a;",
$isz2:true},
qI:{
-"^":"z2;WA<,oc>,jL>,zZ>",
+"^":"z2;WA>,oc>,jL>,zZ>",
bu:[function(a){return"#<PropertyChangeRecord "+H.d(this.oc)+" from: "+H.d(this.jL)+" to: "+H.d(this.zZ)+">"},"call$0","gXo",0,0,null],
$isqI:true}}],["observe.src.compound_path_observer","package:observe/src/compound_path_observer.dart",,Y,{
"^":"",
J3:{
-"^":"Pi;b9,kK,Sv,rk,YX,B6,AP,fn",
+"^":"Pi;b9,kK,Sv,rk,YX,B6,AP,Lk",
kb:function(a){return this.rk.call$1(a)},
gB:function(a){return this.b9.length},
-gP:[function(a){return this.Sv},null,null,1,0,113,"value",355],
+gP:[function(a){return this.Sv},null,null,1,0,115,"value",358],
r6:function(a,b){return this.gP(this).call$1(b)},
wE:[function(a){var z,y,x,w,v
if(this.YX)return
@@ -19943,14 +19344,14 @@
x.push(w)}this.Ow()},"call$0","gM",0,0,null],
TF:[function(a){if(this.B6)return
this.B6=!0
-P.rb(this.gMc())},"call$1","geu",2,0,158,108,[]],
+P.rb(this.gMc())},"call$1","geu",2,0,157,113,[]],
Ow:[function(){var z,y
this.B6=!1
z=this.b9
if(z.length===0)return
y=H.VM(new H.A8(z,new Y.E5()),[null,null]).br(0)
if(this.rk!=null)y=this.kb(y)
-this.Sv=F.Wi(this,C.ls,this.Sv,y)},"call$0","gMc",0,0,112],
+this.Sv=F.Wi(this,C.ls,this.Sv,y)},"call$0","gMc",0,0,114],
cO:[function(a){var z,y
z=this.b9
if(z.length===0)return
@@ -19958,12 +19359,12 @@
C.Nm.sB(z,0)
C.Nm.sB(this.kK,0)
this.Sv=null},"call$0","gJK",0,0,null],
-k0:[function(a){return this.wE(0)},"call$0","gqw",0,0,113],
-ni:[function(a){return this.cO(0)},"call$0","gl1",0,0,113],
+k0:[function(a){return this.wE(0)},"call$0","gqw",0,0,115],
+ni:[function(a){return this.cO(0)},"call$0","gl1",0,0,115],
$isJ3:true},
E5:{
-"^":"Tp:107;",
-call$1:[function(a){return J.Vm(a)},"call$1",null,2,0,null,91,[],"call"],
+"^":"Tp:112;",
+call$1:[function(a){return J.Vm(a)},"call$1",null,2,0,null,96,[],"call"],
$isEH:true}}],["observe.src.dirty_check","package:observe/src/dirty_check.dart",,O,{
"^":"",
Y3:[function(){var z,y,x,w,v,u,t,s,r,q
@@ -19995,36 +19396,36 @@
z=new O.o5(z)
return new P.zG(null,null,null,null,new O.zI(z),new O.id(z),null,null,null,null,null,null)},"call$0","Zq",0,0,null],
o5:{
-"^":"Tp:570;a",
+"^":"Tp:544;a",
call$2:[function(a,b){var z=this.a
if(z.a)return
z.a=!0
-a.RK(b,new O.b5(z))},"call$2",null,4,0,null,170,[],151,[],"call"],
+a.RK(b,new O.b5(z))},"call$2",null,4,0,null,169,[],153,[],"call"],
$isEH:true},
b5:{
-"^":"Tp:113;a",
+"^":"Tp:115;a",
call$0:[function(){this.a.a=!1
O.Y3()},"call$0",null,0,0,null,"call"],
$isEH:true},
zI:{
-"^":"Tp:171;b",
+"^":"Tp:170;b",
call$4:[function(a,b,c,d){if(d==null)return d
-return new O.Zb(this.b,b,c,d)},"call$4",null,8,0,null,169,[],170,[],151,[],115,[],"call"],
+return new O.Zb(this.b,b,c,d)},"call$4",null,8,0,null,168,[],169,[],153,[],117,[],"call"],
$isEH:true},
Zb:{
-"^":"Tp:113;c,d,e,f",
+"^":"Tp:115;c,d,e,f",
call$0:[function(){this.c.call$2(this.d,this.e)
return this.f.call$0()},"call$0",null,0,0,null,"call"],
$isEH:true},
id:{
-"^":"Tp:571;UI",
+"^":"Tp:545;UI",
call$4:[function(a,b,c,d){if(d==null)return d
-return new O.iV(this.UI,b,c,d)},"call$4",null,8,0,null,169,[],170,[],151,[],115,[],"call"],
+return new O.iV(this.UI,b,c,d)},"call$4",null,8,0,null,168,[],169,[],153,[],117,[],"call"],
$isEH:true},
iV:{
-"^":"Tp:107;bK,Gq,Rm,w3",
+"^":"Tp:112;bK,Gq,Rm,w3",
call$1:[function(a){this.bK.call$2(this.Gq,this.Rm)
-return this.w3.call$1(a)},"call$1",null,2,0,null,21,[],"call"],
+return this.w3.call$1(a)},"call$1",null,2,0,null,26,[],"call"],
$isEH:true}}],["observe.src.list_diff","package:observe/src/list_diff.dart",,G,{
"^":"",
f6:[function(a,b,c,d,e,f){var z,y,x,w,v,u,t,s,r,q,p,o,n,m,l
@@ -20062,7 +19463,7 @@
if(typeof n!=="number")return n.g()
n=P.J(o+1,n+1)
if(t>=l)return H.e(m,t)
-m[t]=n}}return x},"call$6","cL",12,0,null,245,[],246,[],247,[],248,[],249,[],250,[]],
+m[t]=n}}return x},"call$6","cL",12,0,null,241,[],242,[],243,[],244,[],245,[],246,[]],
Mw:[function(a){var z,y,x,w,v,u,t,s,r,q,p,o,n
z=a.length
y=z-1
@@ -20097,10 +19498,10 @@
v=p
y=w}else{u.push(2)
v=o
-x=s}}}return H.VM(new H.iK(u),[null]).br(0)},"call$1","fZ",2,0,null,251,[]],
+x=s}}}return H.VM(new H.iK(u),[null]).br(0)},"call$1","fZ",2,0,null,247,[]],
rB:[function(a,b,c){var z,y,x
for(z=J.U6(a),y=J.U6(b),x=0;x<c;++x)if(!J.de(z.t(a,x),y.t(b,x)))return x
-return c},"call$3","UF",6,0,null,252,[],253,[],254,[]],
+return c},"call$3","UF",6,0,null,248,[],249,[],250,[]],
xU:[function(a,b,c){var z,y,x,w,v,u
z=J.U6(a)
y=z.gB(a)
@@ -20111,7 +19512,7 @@
u=z.t(a,y)
w=J.xH(w,1)
u=J.de(u,x.t(b,w))}else u=!1
-if(!u)break;++v}return v},"call$3","M9",6,0,null,252,[],253,[],254,[]],
+if(!u)break;++v}return v},"call$3","M9",6,0,null,248,[],249,[],250,[]],
jj:[function(a,b,c,d,e,f){var z,y,x,w,v,u,t,s,r,q,p,o,n,m
z=J.Wx(c)
y=J.Wx(f)
@@ -20161,16 +19562,17 @@
s=new G.DA(a,y,t,n,0)}J.bi(s.Il,z.t(d,o));++o
break
default:}if(s!=null)p.push(s)
-return p},"call$6","Lr",12,0,null,245,[],246,[],247,[],248,[],249,[],250,[]],
+return p},"call$6","mu",12,0,null,241,[],242,[],243,[],244,[],245,[],246,[]],
m1:[function(a,b){var z,y,x,w,v,u,t,s,r,q,p,o,n,m
-z=b.gWA()
-y=J.zj(b)
+z=J.RE(b)
+y=z.gWA(b)
+z=z.gvH(b)
x=J.qA(b.gIl())
w=b.gNg()
if(w==null)w=0
v=new P.Yp(x)
v.$builtinTypeInfo=[null]
-u=new G.DA(z,v,x,y,w)
+u=new G.DA(y,v,x,z,w)
for(t=!1,s=0,r=0;z=a.length,r<z;++r){if(r<0)return H.e(a,r)
q=a[r]
q.jr=J.WB(q.jr,s)
@@ -20200,11 +19602,11 @@
q.jr=J.WB(q.jr,m)
if(typeof m!=="number")return H.s(m)
s+=m
-t=!0}else t=!1}if(!t)a.push(u)},"call$2","c7",4,0,null,255,[],22,[]],
+t=!0}else t=!1}if(!t)a.push(u)},"call$2","c7",4,0,null,251,[],27,[]],
xl:[function(a,b){var z,y
z=H.VM([],[G.DA])
for(y=H.VM(new H.a7(b,b.length,0,null),[H.Kp(b,0)]);y.G();)G.m1(z,y.lo)
-return z},"call$2","bN",4,0,null,68,[],256,[]],
+return z},"call$2","bN",4,0,null,73,[],252,[]],
u2:[function(a,b){var z,y,x,w,v,u
if(b.length===1)return b
z=[]
@@ -20214,9 +19616,9 @@
if(u>>>0!==u||u>=x.length)return H.e(x,u)
if(!J.de(v,x[u]))z.push(w)
continue}v=J.RE(w)
-C.Nm.FV(z,G.jj(a,v.gvH(w),J.WB(v.gvH(w),w.gNg()),w.gIl(),0,J.q8(w.gRt().G4)))}return z},"call$2","W5",4,0,null,68,[],256,[]],
+C.Nm.FV(z,G.jj(a,v.gvH(w),J.WB(v.gvH(w),w.gNg()),w.gIl(),0,J.q8(w.gRt().G4)))}return z},"call$2","AH",4,0,null,73,[],252,[]],
DA:{
-"^":"a;WA<,ok,Il<,jr,dM",
+"^":"a;WA>,ok,Il<,jr,dM",
gvH:function(a){return this.jr},
gRt:function(){return this.ok},
gNg:function(){return this.dM},
@@ -20227,7 +19629,7 @@
if(!J.de(this.dM,J.q8(this.ok.G4)))return!0
z=J.WB(this.jr,this.dM)
if(typeof z!=="number")return H.s(z)
-return a<z},"call$1","gw9",2,0,null,42,[]],
+return a<z},"call$1","gcW",2,0,null,47,[]],
bu:[function(a){return"#<ListChangeRecord index: "+H.d(this.jr)+", removed: "+H.d(this.ok)+", addedCount: "+H.d(this.dM)+">"},"call$0","gXo",0,0,null],
$isDA:true,
static:{XM:function(a,b,c,d){var z
@@ -20244,8 +19646,8 @@
"^":"a;"}}],["observe.src.observable","package:observe/src/observable.dart",,F,{
"^":"",
Wi:[function(a,b,c,d){var z=J.RE(a)
-if(z.gUV(a)&&!J.de(c,d))z.nq(a,H.VM(new T.qI(a,b,c,d),[null]))
-return d},"call$4","T7",8,0,null,93,[],257,[],233,[],234,[]],
+if(z.gnz(a)&&!J.de(c,d))z.nq(a,H.VM(new T.qI(a,b,c,d),[null]))
+return d},"call$4","T7",8,0,null,98,[],253,[],229,[],230,[]],
d3:{
"^":"a;",
gUj:function(a){var z=this.R9
@@ -20253,7 +19655,7 @@
z=P.bK(this.gkk(),z,!0,null)
this.R9=z}z.toString
return H.VM(new P.Ik(z),[H.Kp(z,0)])},
-gUV:function(a){var z,y
+gnz:function(a){var z,y
z=this.R9
if(z!=null){y=z.iE
z=y==null?z!=null:y!==z}else z=!1
@@ -20270,16 +19672,16 @@
v=new H.MH(null,J.GP(z.l6),z.T6)
v.$builtinTypeInfo=[H.Kp(z,0),H.Kp(z,1)]
for(;v.G();){u=v.lo
-z=J.x(u)
-if(typeof u!=="object"||u===null||!z.$isRY||u.gV5()||u.gFo()||u.gq4())continue
+z=J.RE(u)
+if(typeof u!=="object"||u===null||!z.$isRY||z.gV5(u)||u.gFo()||u.gq4())continue
for(z=J.GP(u.gc9());z.G();){t=z.lo.gAx()
s=J.x(t)
if(typeof t==="object"&&t!==null&&!!s.$isnd){r=u.gIf()
x.u(0,r,y.rN(r).gAx())
break}}}}this.wv=y
-this.V2=x},"call$0","gFW",0,0,112],
+this.V2=x},"call$0","gFW",0,0,114],
B0:[function(){if(this.V2!=null){this.wv=null
-this.V2=null}},"call$0","gkk",0,0,112],
+this.V2=null}},"call$0","gkk",0,0,114],
BN:[function(a){var z,y,x,w
z={}
y=this.V2
@@ -20298,7 +19700,7 @@
if(y.Gv>=4)H.vh(y.q7())
y.Iv(z)
return!0},"call$0","gDx",0,0,null],
-ct:[function(a,b,c,d){return F.Wi(this,b,c,d)},"call$3","gAn",6,0,null,257,[],233,[],234,[]],
+ct:[function(a,b,c,d){return F.Wi(this,b,c,d)},"call$3","gAn",6,0,null,253,[],229,[],230,[]],
nq:[function(a,b){var z,y
z=this.R9
if(z!=null){y=z.iE
@@ -20306,10 +19708,10 @@
if(!z)return
z=this.me
if(z==null){z=[]
-this.me=z}z.push(b)},"call$1","gbW",2,0,null,22,[]],
+this.me=z}z.push(b)},"call$1","giA",2,0,null,27,[]],
$isd3:true},
lS:{
-"^":"Tp:346;a,b",
+"^":"Tp:348;a,b",
call$2:[function(a,b){var z,y,x,w,v
z=this.b
y=z.wv.rN(a).gAx()
@@ -20319,23 +19721,23 @@
x.a=v
x=v}else x=w
x.push(H.VM(new T.qI(z,a,b,y),[null]))
-z.V2.u(0,a,y)}},"call$2",null,4,0,null,12,[],233,[],"call"],
+z.V2.u(0,a,y)}},"call$2",null,4,0,null,12,[],229,[],"call"],
$isEH:true}}],["observe.src.observable_box","package:observe/src/observable_box.dart",,A,{
"^":"",
xh:{
-"^":"Pi;L1,AP,fn",
-gP:[function(a){return this.L1},null,null,1,0,function(){return H.IG(function(a){return{func:"Oy",ret:a}},this.$receiver,"xh")},"value",355],
+"^":"Pi;L1,AP,Lk",
+gP:[function(a){return this.L1},null,null,1,0,function(){return H.IG(function(a){return{func:"Oy",ret:a}},this.$receiver,"xh")},"value",358],
r6:function(a,b){return this.gP(this).call$1(b)},
-sP:[function(a,b){this.L1=F.Wi(this,C.ls,this.L1,b)},null,null,3,0,function(){return H.IG(function(a){return{func:"lU6",void:true,args:[a]}},this.$receiver,"xh")},234,[],"value",355],
+sP:[function(a,b){this.L1=F.Wi(this,C.ls,this.L1,b)},null,null,3,0,function(){return H.IG(function(a){return{func:"lU6",void:true,args:[a]}},this.$receiver,"xh")},230,[],"value",358],
bu:[function(a){return"#<"+H.d(new H.cu(H.dJ(this),null))+" value: "+H.d(this.L1)+">"},"call$0","gXo",0,0,null]}}],["observe.src.observable_list","package:observe/src/observable_list.dart",,Q,{
"^":"",
wn:{
-"^":"Ay;b3,xg,h3,AP,fn",
+"^":"er;b3,xg,h3,AP,Lk",
gvp:function(){var z=this.xg
if(z==null){z=P.bK(new Q.Bj(this),null,!0,null)
this.xg=z}z.toString
return H.VM(new P.Ik(z),[H.Kp(z,0)])},
-gB:[function(a){return this.h3.length},null,null,1,0,371,"length",355],
+gB:[function(a){return this.h3.length},null,null,1,0,512,"length",358],
sB:[function(a,b){var z,y,x,w,v,u
z=this.h3
y=z.length
@@ -20363,10 +19765,10 @@
u=[]
w=new P.Yp(u)
w.$builtinTypeInfo=[null]
-this.iH(new G.DA(this,w,u,y,x))}C.Nm.sB(z,b)},null,null,3,0,372,23,[],"length",355],
+this.iH(new G.DA(this,w,u,y,x))}C.Nm.sB(z,b)},null,null,3,0,411,28,[],"length",358],
t:[function(a,b){var z=this.h3
if(b>>>0!==b||b>=z.length)return H.e(z,b)
-return z[b]},"call$1","gIA",2,0,function(){return H.IG(function(a){return{func:"dG",ret:a,args:[J.im]}},this.$receiver,"wn")},47,[],"[]",355],
+return z[b]},"call$1","gIA",2,0,function(){return H.IG(function(a){return{func:"dG",ret:a,args:[J.im]}},this.$receiver,"wn")},52,[],"[]",358],
u:[function(a,b,c){var z,y,x,w
z=this.h3
if(b>>>0!==b||b>=z.length)return H.e(z,b)
@@ -20378,9 +19780,9 @@
w=new P.Yp(x)
w.$builtinTypeInfo=[null]
this.iH(new G.DA(this,w,x,b,1))}if(b>=z.length)return H.e(z,b)
-z[b]=c},"call$2","gj3",4,0,function(){return H.IG(function(a){return{func:"UR",void:true,args:[J.im,a]}},this.$receiver,"wn")},47,[],23,[],"[]=",355],
-gl0:[function(a){return P.lD.prototype.gl0.call(this,this)},null,null,1,0,380,"isEmpty",355],
-gor:[function(a){return P.lD.prototype.gor.call(this,this)},null,null,1,0,380,"isNotEmpty",355],
+z[b]=c},"call$2","gj3",4,0,function(){return H.IG(function(a){return{func:"UR",void:true,args:[J.im,a]}},this.$receiver,"wn")},52,[],28,[],"[]=",358],
+gl0:[function(a){return P.lD.prototype.gl0.call(this,this)},null,null,1,0,390,"isEmpty",358],
+gor:[function(a){return P.lD.prototype.gor.call(this,this)},null,null,1,0,390,"isNotEmpty",358],
h:[function(a,b){var z,y,x,w
z=this.h3
y=z.length
@@ -20389,7 +19791,7 @@
if(x!=null){w=x.iE
x=w==null?x!=null:w!==x}else x=!1
if(x)this.iH(G.XM(this,y,1,null))
-C.Nm.h(z,b)},"call$1","ght",2,0,null,23,[]],
+C.Nm.h(z,b)},"call$1","ght",2,0,null,28,[]],
FV:[function(a,b){var z,y,x,w
z=this.h3
y=z.length
@@ -20399,10 +19801,10 @@
z=this.xg
if(z!=null){w=z.iE
z=w==null?z!=null:w!==z}else z=!1
-if(z&&x>0)this.iH(G.XM(this,y,x,null))},"call$1","gDY",2,0,null,114,[]],
+if(z&&x>0)this.iH(G.XM(this,y,x,null))},"call$1","gDY",2,0,null,116,[]],
Rz:[function(a,b){var z,y
for(z=this.h3,y=0;y<z.length;++y)if(J.de(z[y],b)){this.UZ(0,y,y+1)
-return!0}return!1},"call$1","gRI",2,0,null,129,[]],
+return!0}return!1},"call$1","guH",2,0,null,132,[]],
UZ:[function(a,b,c){var z,y,x,w,v,u,t
z=b>=0
if(!z||b>this.h3.length)H.vh(P.TE(b,0,this.h3.length))
@@ -20430,7 +19832,7 @@
z=z.br(0)
y=new P.Yp(z)
y.$builtinTypeInfo=[null]
-this.iH(new G.DA(this,y,z,b,0))}C.Nm.UZ(w,b,c)},"call$2","gYH",4,0,null,120,[],121,[]],
+this.iH(new G.DA(this,y,z,b,0))}C.Nm.UZ(w,b,c)},"call$2","gYH",4,0,null,123,[],124,[]],
xe:[function(a,b,c){var z,y,x
if(b<0||b>this.h3.length)throw H.b(P.TE(b,0,this.h3.length))
z=this.h3
@@ -20438,7 +19840,7 @@
if(b===y){this.h(0,c)
return}C.Nm.sB(z,y+1)
y=z.length
-H.Og(z,b+1,y,this,b)
+H.qG(z,b+1,y,this,b)
y=z.length
this.nU(y-1,y)
y=this.xg
@@ -20446,27 +19848,27 @@
y=x==null?y!=null:x!==y}else y=!1
if(y)this.iH(G.XM(this,b,1,null))
if(b<0||b>=z.length)return H.e(z,b)
-z[b]=c},"call$2","gQG",4,0,null,47,[],129,[]],
+z[b]=c},"call$2","gQG",4,0,null,52,[],132,[]],
KI:[function(a,b){var z,y
z=this.h3
if(b<0||b>=z.length)return H.e(z,b)
y=z[b]
this.UZ(0,b,b+1)
-return y},"call$1","gNM",2,0,null,47,[]],
+return y},"call$1","gNM",2,0,null,52,[]],
iH:[function(a){var z,y
z=this.xg
if(z!=null){y=z.iE
z=y==null?z!=null:y!==z}else z=!1
if(!z)return
if(this.b3==null){this.b3=[]
-P.rb(this.gL6())}this.b3.push(a)},"call$1","gSi",2,0,null,22,[]],
+P.rb(this.gL6())}this.b3.push(a)},"call$1","gSi",2,0,null,27,[]],
nU:[function(a,b){var z,y
this.ct(this,C.Wn,a,b)
z=a===0
y=J.x(b)
this.ct(this,C.ai,z,y.n(b,0))
-this.ct(this,C.nZ,!z,!y.n(b,0))},"call$2","gdX",4,0,null,233,[],234,[]],
-cv:[function(){var z,y,x
+this.ct(this,C.nZ,!z,!y.n(b,0))},"call$2","gNQ",4,0,null,229,[],230,[]],
+oC:[function(){var z,y,x
z=this.b3
if(z==null)return!1
y=G.u2(this,z)
@@ -20477,15 +19879,15 @@
if(x){x=H.VM(new P.Yp(y),[G.DA])
if(z.Gv>=4)H.vh(z.q7())
z.Iv(x)
-return!0}return!1},"call$0","gL6",0,0,380],
+return!0}return!1},"call$0","gL6",0,0,390],
$iswn:true,
static:{uX:function(a,b){var z=H.VM([],[b])
return H.VM(new Q.wn(null,null,z,null,null),[b])}}},
-Ay:{
+er:{
"^":"ar+Pi;",
$isd3:true},
Bj:{
-"^":"Tp:113;a",
+"^":"Tp:115;a",
call$0:[function(){this.a.xg=null},"call$0",null,0,0,null,"call"],
$isEH:true}}],["observe.src.observable_map","package:observe/src/observable_map.dart",,V,{
"^":"",
@@ -20497,20 +19899,20 @@
return"#<MapChangeRecord "+z+" "+H.d(this.G3)+" from: "+H.d(this.jL)+" to: "+H.d(this.zZ)+">"},"call$0","gXo",0,0,null],
$isHA:true},
qC:{
-"^":"Pi;Zp,AP,fn",
+"^":"Pi;Zp,AP,Lk",
gvc:[function(a){var z=this.Zp
-return z.gvc(z)},null,null,1,0,function(){return H.IG(function(a,b){return{func:"NE",ret:[P.cX,a]}},this.$receiver,"qC")},"keys",355],
+return z.gvc(z)},null,null,1,0,function(){return H.IG(function(a,b){return{func:"dt",ret:[P.QV,a]}},this.$receiver,"qC")},"keys",358],
gUQ:[function(a){var z=this.Zp
-return z.gUQ(z)},null,null,1,0,function(){return H.IG(function(a,b){return{func:"wa",ret:[P.cX,b]}},this.$receiver,"qC")},"values",355],
+return z.gUQ(z)},null,null,1,0,function(){return H.IG(function(a,b){return{func:"wa",ret:[P.QV,b]}},this.$receiver,"qC")},"values",358],
gB:[function(a){var z=this.Zp
-return z.gB(z)},null,null,1,0,371,"length",355],
+return z.gB(z)},null,null,1,0,512,"length",358],
gl0:[function(a){var z=this.Zp
-return z.gB(z)===0},null,null,1,0,380,"isEmpty",355],
+return z.gB(z)===0},null,null,1,0,390,"isEmpty",358],
gor:[function(a){var z=this.Zp
-return z.gB(z)!==0},null,null,1,0,380,"isNotEmpty",355],
-di:[function(a){return this.Zp.di(a)},"call$1","gmc",2,0,572,23,[],"containsValue",355],
-x4:[function(a){return this.Zp.x4(a)},"call$1","gV9",2,0,572,42,[],"containsKey",355],
-t:[function(a,b){return this.Zp.t(0,b)},"call$1","gIA",2,0,function(){return H.IG(function(a,b){return{func:"JB",ret:b,args:[P.a]}},this.$receiver,"qC")},42,[],"[]",355],
+return z.gB(z)!==0},null,null,1,0,390,"isNotEmpty",358],
+di:[function(a){return this.Zp.di(a)},"call$1","gmc",2,0,546,28,[],"containsValue",358],
+x4:[function(a){return this.Zp.x4(a)},"call$1","gV9",2,0,546,47,[],"containsKey",358],
+t:[function(a,b){return this.Zp.t(0,b)},"call$1","gIA",2,0,function(){return H.IG(function(a,b){return{func:"JB",ret:b,args:[P.a]}},this.$receiver,"qC")},47,[],"[]",358],
u:[function(a,b,c){var z,y,x,w,v
z=this.Zp
y=z.gB(z)
@@ -20521,8 +19923,8 @@
w=v==null?w!=null:v!==w}else w=!1
if(w){z=z.gB(z)
if(y!==z){F.Wi(this,C.Wn,y,z)
-this.nq(this,H.VM(new V.HA(b,null,c,!0,!1),[null,null]))}else if(!J.de(x,c))this.nq(this,H.VM(new V.HA(b,x,c,!1,!1),[null,null]))}},"call$2","gj3",4,0,function(){return H.IG(function(a,b){return{func:"fK",void:true,args:[a,b]}},this.$receiver,"qC")},42,[],23,[],"[]=",355],
-FV:[function(a,b){J.kH(b,new V.zT(this))},"call$1","gDY",2,0,null,104,[]],
+this.nq(this,H.VM(new V.HA(b,null,c,!0,!1),[null,null]))}else if(!J.de(x,c))this.nq(this,H.VM(new V.HA(b,x,c,!1,!1),[null,null]))}},"call$2","gj3",4,0,function(){return H.IG(function(a,b){return{func:"LF",void:true,args:[a,b]}},this.$receiver,"qC")},47,[],28,[],"[]=",358],
+FV:[function(a,b){J.kH(b,new V.zT(this))},"call$1","gDY",2,0,null,109,[]],
Rz:[function(a,b){var z,y,x,w,v
z=this.Zp
y=z.gB(z)
@@ -20531,7 +19933,7 @@
if(w!=null){v=w.iE
w=v==null?w!=null:v!==w}else w=!1
if(w&&y!==z.gB(z)){this.nq(this,H.VM(new V.HA(b,x,null,!1,!0),[null,null]))
-F.Wi(this,C.Wn,y,z.gB(z))}return x},"call$1","gRI",2,0,null,42,[]],
+F.Wi(this,C.Wn,y,z.gB(z))}return x},"call$1","guH",2,0,null,47,[]],
V1:[function(a){var z,y,x,w
z=this.Zp
y=z.gB(z)
@@ -20539,9 +19941,10 @@
if(x!=null){w=x.iE
x=w==null?x!=null:w!==x}else x=!1
if(x&&y>0){z.aN(0,new V.Lo(this))
-F.Wi(this,C.Wn,y,0)}z.V1(0)},"call$0","gyP",0,0,null],
-aN:[function(a,b){return this.Zp.aN(0,b)},"call$1","gjw",2,0,null,115,[]],
+F.Wi(this,C.Wn,y,0)}z.V1(0)},"call$0","gRa",0,0,null],
+aN:[function(a,b){return this.Zp.aN(0,b)},"call$1","gjw",2,0,null,117,[]],
bu:[function(a){return P.vW(this)},"call$0","gXo",0,0,null],
+$isqC:true,
$isZ0:true,
static:{WF:function(a,b,c){var z=V.Bq(a,b,c)
z.FV(0,a)
@@ -20552,20 +19955,20 @@
return y}}},
zT:{
"^":"Tp;a",
-call$2:[function(a,b){this.a.u(0,a,b)},"call$2",null,4,0,null,42,[],23,[],"call"],
+call$2:[function(a,b){this.a.u(0,a,b)},"call$2",null,4,0,null,47,[],28,[],"call"],
$isEH:true,
-$signature:function(){return H.IG(function(a,b){return{func:"vPt",args:[a,b]}},this.a,"qC")}},
+$signature:function(){return H.IG(function(a,b){return{func:"Bi",args:[a,b]}},this.a,"qC")}},
Lo:{
-"^":"Tp:346;a",
+"^":"Tp:348;a",
call$2:[function(a,b){var z=this.a
-z.nq(z,H.VM(new V.HA(a,b,null,!1,!0),[null,null]))},"call$2",null,4,0,null,42,[],23,[],"call"],
+z.nq(z,H.VM(new V.HA(a,b,null,!1,!0),[null,null]))},"call$2",null,4,0,null,47,[],28,[],"call"],
$isEH:true}}],["observe.src.path_observer","package:observe/src/path_observer.dart",,L,{
"^":"",
Wa:[function(a,b){var z=J.x(a)
if(typeof a==="object"&&a!==null&&!!z.$isqI)return J.de(a.oc,b)
if(typeof a==="object"&&a!==null&&!!z.$isHA){z=J.RE(b)
if(typeof b==="object"&&b!==null&&!!z.$iswv)b=z.gfN(b)
-return J.de(a.G3,b)}return!1},"call$2","mD",4,0,null,22,[],42,[]],
+return J.de(a.G3,b)}return!1},"call$2","mD",4,0,null,27,[],47,[]],
yf:[function(a,b){var z,y,x,w,v
if(a==null)return
x=b
@@ -20581,7 +19984,7 @@
w=J.x(x)
if(typeof x==="object"&&x!==null&&!!w.$ismp){if(!L.M6(y,C.OV))throw v}else throw v}}}x=$.aT()
if(x.Im(C.VZ))x.x9("can't get "+H.d(b)+" in "+H.d(a))
-return},"call$2","MT",4,0,null,6,[],66,[]],
+return},"call$2","MT",4,0,null,6,[],71,[]],
h6:[function(a,b,c){var z,y,x,w,v
if(a==null)return!1
x=b
@@ -20598,14 +20001,14 @@
w=J.x(x)
if(typeof x==="object"&&x!==null&&!!w.$ismp){if(!L.M6(y,C.OV))throw v}else throw v}}}x=$.aT()
if(x.Im(C.VZ))x.x9("can't set "+H.d(b)+" in "+H.d(a))
-return!1},"call$3","nV",6,0,null,6,[],66,[],23,[]],
+return!1},"call$3","nV",6,0,null,6,[],71,[],28,[]],
TH:[function(a,b){var z
for(;!J.de(a,$.aA());){z=a.gYK().nb
if(z.x4(b))return!0
if(z.x4(C.OV))return!0
a=L.pY(a)}return!1},"call$2","fY",4,0,null,11,[],12,[]],
dR:[function(a,b){var z,y,x,w
-z=new H.GD(H.le(H.d(b.gfN(b))+"="))
+z=new H.GD(H.u1(H.d(b.gfN(b))+"="))
for(;!J.de(a,$.aA());){y=a.gYK().nb
x=y.t(0,b)
w=J.x(x)
@@ -20617,20 +20020,20 @@
for(;!J.de(a,$.aA());){z=a.gYK().nb.t(0,b)
y=J.x(z)
if(typeof z==="object"&&z!==null&&!!y.$isRS&&z.guU())return!0
-a=L.pY(a)}return!1},"call$2","Cp",4,0,null,11,[],12,[]],
+a=L.pY(a)}return!1},"call$2","Wt",4,0,null,11,[],12,[]],
pY:[function(a){var z,y
try{z=a.gAY()
return z}catch(y){H.Ru(y)
return $.aA()}},"call$1","WV",2,0,null,11,[]],
-rd:[function(a){a=J.JA(a,$.c3(),"")
+cB:[function(a){a=J.JA(a,$.c3(),"")
if(a==="")return!0
if(0>=a.length)return H.e(a,0)
if(a[0]===".")return!1
-return $.tN().zD(a)},"call$1","KL",2,0,null,86,[]],
+return $.tN().zD(a)},"call$1","wf",2,0,null,91,[]],
WR:{
-"^":"Pi;ay,YB,BK,kN,cs,cT,AP,fn",
+"^":"Pi;ay,YB,BK,kN,cs,cT,AP,Lk",
E4:function(a){return this.cT.call$1(a)},
-gWA:function(){var z=this.kN
+gWA:function(a){var z=this.kN
if(0>=z.length)return H.e(z,0)
return z[0]},
gP:[function(a){var z,y
@@ -20639,7 +20042,7 @@
if(z!=null){y=z.iE
z=y==null?z!=null:y!==z}else z=!1
if(!z)this.ov()
-return C.Nm.grZ(this.kN)},null,null,1,0,113,"value",355],
+return C.Nm.grZ(this.kN)},null,null,1,0,115,"value",358],
r6:function(a,b){return this.gP(this).call$1(b)},
sP:[function(a,b){var z,y,x,w
z=this.BK
@@ -20656,16 +20059,16 @@
if(w>=z.length)return H.e(z,w)
if(L.h6(x,z[w],b)){z=this.kN
if(y>=z.length)return H.e(z,y)
-z[y]=b}},null,null,3,0,504,234,[],"value",355],
+z[y]=b}},null,null,3,0,471,230,[],"value",358],
k0:[function(a){O.Pi.prototype.k0.call(this,this)
this.ov()
-this.XI()},"call$0","gqw",0,0,112],
+this.XI()},"call$0","gqw",0,0,114],
ni:[function(a){var z,y
for(z=0;y=this.cs,z<y.length;++z){y=y[z]
if(y!=null){y.ed()
y=this.cs
if(z>=y.length)return H.e(y,z)
-y[z]=null}}O.Pi.prototype.ni.call(this,this)},"call$0","gl1",0,0,112],
+y[z]=null}}O.Pi.prototype.ni.call(this,this)},"call$0","gl1",0,0,114],
Zy:[function(a){var z,y,x,w,v,u
if(a==null)a=this.BK.length
z=this.BK
@@ -20681,7 +20084,7 @@
if(w===y&&x)u=this.E4(u)
v=this.kN;++w
if(w>=v.length)return H.e(v,w)
-v[w]=u}},function(){return this.Zy(null)},"ov","call$1$end",null,"gFD",0,3,null,77,121,[]],
+v[w]=u}},function(){return this.Zy(null)},"ov","call$1$end",null,"gFD",0,3,null,82,124,[]],
hd:[function(a){var z,y,x,w,v,u,t,s,r
for(z=this.BK,y=z.length-1,x=this.cT!=null,w=a,v=null,u=null;w<=y;w=s){t=this.kN
s=w+1
@@ -20697,9 +20100,9 @@
return}t=this.kN
if(s>=t.length)return H.e(t,s)
t[s]=u}this.ij(a)
-if(this.gUV(this)&&!J.de(v,u)){z=new T.qI(this,C.ls,v,u)
+if(this.gnz(this)&&!J.de(v,u)){z=new T.qI(this,C.ls,v,u)
z.$builtinTypeInfo=[null]
-this.nq(this,z)}},"call$1$start","gHi",0,3,null,335,120,[]],
+this.nq(this,z)}},"call$1$start","gHi",0,3,null,332,123,[]],
Rl:[function(a,b){var z,y
if(b==null)b=this.BK.length
if(typeof b!=="number")return H.s(b)
@@ -20708,7 +20111,7 @@
if(z>=y.length)return H.e(y,z)
y=y[z]
if(y!=null)y.ed()
-this.Kh(z)}},function(){return this.Rl(0,null)},"XI",function(a){return this.Rl(a,null)},"ij","call$2",null,null,"gmi",0,4,null,335,77,120,[],121,[]],
+this.Kh(z)}},function(){return this.Rl(0,null)},"XI",function(a){return this.Rl(a,null)},"ij","call$2",null,null,"gmi",0,4,null,332,82,123,[],124,[]],
Kh:[function(a){var z,y,x,w,v
z=this.kN
if(a>=z.length)return H.e(z,a)
@@ -20732,12 +20135,12 @@
w.o7=P.VH(P.AY(),z)
w.Bd=z.Al(P.v3())
if(a>=v.length)return H.e(v,a)
-v[a]=w}}},"call$1","gCf",2,0,null,441,[]],
+v[a]=w}}},"call$1","gzm",2,0,null,409,[]],
d4:function(a,b,c){var z,y,x,w
if(this.YB)for(z=J.rr(b).split("."),z=H.VM(new H.a7(z,z.length,0,null),[H.Kp(z,0)]),y=this.BK;z.G();){x=z.lo
if(J.de(x,""))continue
w=H.BU(x,10,new L.qL())
-y.push(w!=null?w:new H.GD(H.le(x)))}z=this.BK
+y.push(w!=null?w:new H.GD(H.u1(x)))}z=this.BK
this.kN=H.VM(Array(z.length+1),[P.a])
if(z.length===0&&c!=null)a=c.call$1(a)
y=this.kN
@@ -20745,27 +20148,27 @@
y[0]=a
this.cs=H.VM(Array(z.length),[P.MO])},
$isWR:true,
-static:{ao:function(a,b,c){var z=new L.WR(b,L.rd(b),H.VM([],[P.a]),null,null,c,null,null)
+static:{ao:function(a,b,c){var z=new L.WR(b,L.cB(b),H.VM([],[P.a]),null,null,c,null,null)
z.d4(a,b,c)
return z}}},
qL:{
-"^":"Tp:107;",
-call$1:[function(a){return},"call$1",null,2,0,null,108,[],"call"],
+"^":"Tp:112;",
+call$1:[function(a){return},"call$1",null,2,0,null,113,[],"call"],
$isEH:true},
Px:{
-"^":"Tp:573;a,b,c",
+"^":"Tp:547;a,b,c",
call$1:[function(a){var z,y
for(z=J.GP(a),y=this.c;z.G();)if(z.gl().ck(y)){this.a.hd(this.b)
-return}},"call$1",null,2,0,null,256,[],"call"],
+return}},"call$1",null,2,0,null,252,[],"call"],
$isEH:true},
C4:{
-"^":"Tp:574;d,e,f",
+"^":"Tp:548;d,e,f",
call$1:[function(a){var z,y
for(z=J.GP(a),y=this.f;z.G();)if(L.Wa(z.gl(),y)){this.d.hd(this.e)
-return}},"call$1",null,2,0,null,256,[],"call"],
+return}},"call$1",null,2,0,null,252,[],"call"],
$isEH:true},
-YJ:{
-"^":"Tp:113;",
+Md:{
+"^":"Tp:115;",
call$0:[function(){return new H.VR(H.v4("^(?:(?:[$_a-zA-Z]+[$_a-zA-Z0-9]*|(?:[0-9]|[1-9]+[0-9]+)))(?:\\.(?:[$_a-zA-Z]+[$_a-zA-Z0-9]*|(?:[0-9]|[1-9]+[0-9]+)))*$",!1,!0,!1),null,null)},"call$0",null,0,0,null,"call"],
$isEH:true}}],["observe.src.to_observable","package:observe/src/to_observable.dart",,R,{
"^":"",
@@ -20774,18 +20177,18 @@
if(typeof a==="object"&&a!==null&&!!z.$isd3)return a
if(typeof a==="object"&&a!==null&&!!z.$isZ0){y=V.Bq(a,null,null)
z.aN(a,new R.km(y))
-return y}if(typeof a==="object"&&a!==null&&(a.constructor===Array||!!z.$iscX)){z=z.ez(a,R.np())
+return y}if(typeof a==="object"&&a!==null&&(a.constructor===Array||!!z.$isQV)){z=z.ez(a,R.np())
x=Q.uX(null,null)
x.FV(0,z)
-return x}return a},"call$1","np",2,0,107,23,[]],
+return x}return a},"call$1","np",2,0,112,28,[]],
km:{
-"^":"Tp:346;a",
-call$2:[function(a,b){this.a.u(0,R.Jk(a),R.Jk(b))},"call$2",null,4,0,null,402,[],277,[],"call"],
+"^":"Tp:348;a",
+call$2:[function(a,b){this.a.u(0,R.Jk(a),R.Jk(b))},"call$2",null,4,0,null,442,[],272,[],"call"],
$isEH:true}}],["polymer","package:polymer/polymer.dart",,A,{
"^":"",
JX:[function(){var z,y
z=document.createElement("style",null)
-z.textContent=".polymer-veiled { opacity: 0; } \n.polymer-unveil{ -webkit-transition: opacity 0.3s; transition: opacity 0.3s; }\n"
+J.c9(z,".polymer-veiled { opacity: 0; } \n.polymer-unveil{ -webkit-transition: opacity 0.3s; transition: opacity 0.3s; }\n")
y=document.querySelector("head")
y.insertBefore(z,y.firstChild)
A.B2()
@@ -20797,28 +20200,28 @@
z=$.xY().Rz(0,a)
if(z!=null)for(y=J.GP(z);y.G();)J.Or(y.gl())},"call$1","Km",2,0,null,12,[]],
oF:[function(a,b){var z,y,x,w,v,u
-if(J.de(a,$.Tf()))return b
+if(J.de(a,$.H8()))return b
b=A.oF(a.gAY(),b)
for(z=a.gYK().nb,z=z.gUQ(z),z=H.VM(new H.MH(null,J.GP(z.l6),z.T6),[H.Kp(z,0),H.Kp(z,1)]);z.G();){y=z.lo
if(y.gFo()||y.gq4())continue
-x=J.x(y)
-if(!(typeof y==="object"&&y!==null&&!!x.$isRY&&!y.gV5()))w=typeof y==="object"&&y!==null&&!!x.$isRS&&y.glT()
+x=J.RE(y)
+if(!(typeof y==="object"&&y!==null&&!!x.$isRY&&!x.gV5(y)))w=typeof y==="object"&&y!==null&&!!x.$isRS&&y.glT()
else w=!0
if(w)for(w=J.GP(y.gc9());w.G();){v=w.lo.gAx()
u=J.x(v)
if(typeof v==="object"&&v!==null&&!!u.$isyL){if(typeof y!=="object"||y===null||!x.$isRS||A.bc(a,y)){if(b==null)b=H.B7([],P.L5(null,null,null,null,null))
-b.u(0,y.gIf(),y)}break}}}return b},"call$2","Cd",4,0,null,258,[],259,[]],
+b.u(0,y.gIf(),y)}break}}}return b},"call$2","Cd",4,0,null,254,[],255,[]],
Oy:[function(a,b){var z,y
do{z=a.gYK().nb.t(0,b)
y=J.x(z)
if(typeof z==="object"&&z!==null&&!!y.$isRS&&z.glT()&&A.bc(a,z)||typeof z==="object"&&z!==null&&!!y.$isRY)return z
-a=a.gAY()}while(!J.de(a,$.Tf()))
-return},"call$2","il",4,0,null,258,[],66,[]],
+a=a.gAY()}while(!J.de(a,$.H8()))
+return},"call$2","il",4,0,null,254,[],71,[]],
bc:[function(a,b){var z,y
-z=H.le(H.d(b.gIf().fN)+"=")
+z=H.u1(H.d(b.gIf().fN)+"=")
y=a.gYK().nb.t(0,new H.GD(z))
z=J.x(y)
-return typeof y==="object"&&y!==null&&!!z.$isRS&&y.ghB()},"call$2","i8",4,0,null,258,[],260,[]],
+return typeof y==="object"&&y!==null&&!!z.$isRS&&y.ghB()},"call$2","i8",4,0,null,254,[],256,[]],
YG:[function(a,b,c){var z,y,x
z=$.cM()
if(z==null||a==null)return
@@ -20827,7 +20230,7 @@
if(y==null)return
x=J.UQ(y,"ShadowCSS")
if(x==null)return
-x.V7("shimStyling",[a,b,c])},"call$3","OA",6,0,null,261,[],12,[],262,[]],
+x.V7("shimStyling",[a,b,c])},"call$3","OA",6,0,null,257,[],12,[],258,[]],
Hl:[function(a){var z,y,x,w,v,u,t
if(a==null)return""
w=J.RE(a)
@@ -20847,28 +20250,28 @@
if(typeof w==="object"&&w!==null&&!!t.$isNh){y=w
x=new H.XO(u,null)
$.vM().J4("failed to get stylesheet text href=\""+H.d(z)+"\" error: "+H.d(y)+", trace: "+H.d(x))
-return""}else throw u}},"call$1","NI",2,0,null,263,[]],
+return""}else throw u}},"call$1","NI",2,0,null,259,[]],
Ad:[function(a,b){var z
if(b==null)b=C.hG
$.Ej().u(0,a,b)
z=$.p2().Rz(0,a)
-if(z!=null)J.Or(z)},"call$2","ZK",2,2,null,77,12,[],11,[]],
-zM:[function(a){A.Vx(a,new A.Mq())},"call$1","jU",2,0,null,264,[]],
-Vx:[function(a,b){var z
+if(z!=null)J.Or(z)},"call$2","ZK",2,2,null,82,12,[],11,[]],
+xv:[function(a){A.om(a,new A.Mq())},"call$1","J2",2,0,null,260,[]],
+om:[function(a,b){var z
if(a==null)return
b.call$1(a)
-for(z=a.firstChild;z!=null;z=z.nextSibling)A.Vx(z,b)},"call$2","Dv",4,0,null,264,[],156,[]],
+for(z=a.firstChild;z!=null;z=z.nextSibling)A.om(z,b)},"call$2","Wm",4,0,null,260,[],155,[]],
lJ:[function(a,b,c,d){if(!J.co(b,"on-"))return d.call$3(a,b,c)
-return new A.L6(a,b)},"call$4","y4",8,0,null,265,[],12,[],264,[],266,[]],
-Hr:[function(a){var z
+return new A.L6(a,b)},"call$4","y4",8,0,null,261,[],12,[],260,[],262,[]],
+z9:[function(a){var z
for(;z=J.RE(a),z.gKV(a)!=null;)a=z.gKV(a)
-return $.od().t(0,a)},"call$1","Fd",2,0,null,264,[]],
+return $.od().t(0,a)},"call$1","DI",2,0,null,260,[]],
HR:[function(a,b,c){var z,y,x
z=H.vn(a)
y=A.Rk(H.jO(J.bB(z.Ax).LU),b)
if(y!=null){x=y.gMP()
x=x.ev(x,new A.uJ())
-C.Nm.sB(c,x.gB(x))}return z.CI(b,c).Ax},"call$3","xi",6,0,null,41,[],267,[],268,[]],
+C.Nm.sB(c,x.gB(x))}return z.CI(b,c).Ax},"call$3","xi",6,0,null,46,[],263,[],17,[]],
Rk:[function(a,b){var z,y
do{z=a.gYK().nb.t(0,b)
y=J.x(z)
@@ -20877,10 +20280,10 @@
ZI:[function(a,b){var z,y
if(a==null)return
z=document.createElement("style",null)
-z.textContent=a.textContent
+J.c9(z,J.nJ(a))
y=a.getAttribute("element")
if(y!=null)z.setAttribute("element",y)
-b.appendChild(z)},"call$2","tO",4,0,null,269,[],270,[]],
+b.appendChild(z)},"call$2","tO",4,0,null,264,[],265,[]],
pX:[function(){var z=window
C.ol.hr(z)
C.ol.oB(z,W.aF(new A.hm()))},"call$0","ji",0,0,null],
@@ -20889,7 +20292,7 @@
y=typeof b==="object"&&b!==null&&!!z.$isRY?z.gt5(b):H.Go(b,"$isRS").gdw()
if(J.de(y.gUx(),C.PU)||J.de(y.gUx(),C.nN))if(a!=null){x=A.h5(a)
if(x!=null)return P.re(x)
-return H.jO(J.bB(H.vn(a).Ax).LU)}return y},"call$2","mN",4,0,null,23,[],66,[]],
+return H.jO(J.bB(H.vn(a).Ax).LU)}return y},"call$2","mN",4,0,null,28,[],71,[]],
h5:[function(a){var z
if(a==null)return C.Qf
if(typeof a==="number"&&Math.floor(a)===a)return C.yw
@@ -20898,7 +20301,7 @@
if(typeof a==="string")return C.Db
z=J.x(a)
if(typeof a==="object"&&a!==null&&!!z.$isiP)return C.Yc
-return},"call$1","v9",2,0,null,23,[]],
+return},"call$1","v9",2,0,null,28,[]],
Ok:[function(){if($.uP){var z=$.X3.iT(O.Ht())
z.Gr(A.PB())
return z}A.ei()
@@ -20907,7 +20310,7 @@
W.wi(window,z,"polymer-element",C.Bm,null)
A.Jv()
A.JX()
-$.ax().ml(new A.Bl())},"call$0","PB",0,0,112],
+$.ax().ml(new A.rD())},"call$0","PB",0,0,114],
Jv:[function(){var z,y,x,w,v,u,t
for(w=$.nT(),w=H.VM(new H.a7(w,w.length,0,null),[H.Kp(w,0)]);w.G();){z=w.lo
try{A.pw(z)}catch(v){u=H.Ru(v)
@@ -20919,7 +20322,7 @@
t=y
if(t==null)H.vh(new P.AT("Error must not be null"))
if(u.Gv!==0)H.vh(new P.lj("Future already completed"))
-u.CG(t,x)}}},"call$0","xm",0,0,null],
+u.CG(t,x)}}},"call$0","vH",0,0,null],
GA:[function(a,b,c,d){var z,y,x,w,v,u
if(c==null)c=P.Ls(null,null,null,W.QF)
if(d==null){d=[]
@@ -20937,67 +20340,66 @@
x=!0}else{z="warning: more than one Dart script tag in "+H.d(b)+". Dartium currently only allows a single Dart script tag per document."
v=$.oK
if(v==null)H.qw(z)
-else v.call$1(z)}}return d},"call$4","fE",4,4,null,77,77,271,[],272,[],273,[],274,[]],
+else v.call$1(z)}}return d},"call$4","fE",4,4,null,82,82,266,[],267,[],268,[],269,[]],
pw:[function(a){var z,y,x,w,v,u,t,s,r,q,p,o,n,m,l,k,j,i
z=$.RQ()
z.toString
-y=$.qG()
-x=P.r6(y.ej(a))
-w=x.Fi
-if(!J.de(w,"")){v=x.ku
-u=x.gJf(x)
-t=x.gtp(x)
-s=z.SK(x.r0)
-r=x.tP}else{if(!J.de(x.gJf(x),"")){v=x.ku
-u=x.gJf(x)
-t=x.gtp(x)
-s=z.SK(x.r0)
-r=x.tP}else{if(J.de(x.r0,"")){s=z.r0
-r=x.tP
-r=!J.de(r,"")?r:z.tP}else{q=J.co(x.r0,"/")
-p=x.r0
-s=q?z.SK(p):z.SK(z.Ky(z.r0,p))
-r=x.tP}v=z.ku
-u=z.gJf(z)
-t=z.gtp(z)}w=z.Fi}o=P.R6(x.Ka,u,s,null,t,r,null,w,v)
-x=$.UG().nb
-n=x.t(0,o)
-m=o.r0
-if(J.de(o.Fi,z.Fi))if(o.gWu()===z.gWu()){z=J.rY(m)
-if(z.Tc(m,".dart"))z=z.tg(m,"/packages/")===!0||z.nC(m,"packages/")
-else z=!1}else z=!1
+y=P.hK(a)
+x=y.Fi
+if(x!==""){w=y.ku
+v=y.gJf(y)
+u=y.gtp(y)
+t=z.SK(y.r0)
+s=y.tP}else{if(y.gJf(y)!==""){w=y.ku
+v=y.gJf(y)
+u=y.gtp(y)
+t=z.SK(y.r0)
+s=y.tP}else{r=y.r0
+if(r===""){t=z.r0
+s=y.tP
+s=s!==""?s:z.tP}else{r=J.co(r,"/")
+q=y.r0
+t=r?z.SK(q):z.SK(z.Ky(z.r0,q))
+s=y.tP}w=z.ku
+v=z.gJf(z)
+u=z.gtp(z)}x=z.Fi}p=P.R6(y.Ka,v,t,null,u,s,null,x,w)
+y=$.UG().nb
+o=y.t(0,p)
+n=p.r0
+if(p.Fi===z.Fi)if(p.gWu()===z.gWu())if(J.rY(n).Tc(n,".dart"))z=C.xB.tg(n,"/packages/")||C.xB.nC(n,"packages/")
else z=!1
-if(z){z=o.r0
-q=J.U6(z)
-l=x.t(0,P.r6(y.ej("package:"+q.yn(z,J.WB(q.cn(z,"packages/"),9)))))
-if(l!=null)n=l}if(n==null){$.M7().To(H.d(o)+" library not found")
-return}z=n.gYK().nb
+else z=!1
+else z=!1
+if(z){z=p.r0
+m=y.t(0,P.hK("package:"+C.xB.yn(z,J.U6(z).cn(z,"packages/")+9)))
+if(m!=null)o=m}if(o==null){$.M7().To(H.d(p)+" library not found")
+return}z=o.gYK().nb
z=z.gUQ(z)
y=new A.Fn()
-x=new H.U5(z,y)
-x.$builtinTypeInfo=[H.ip(z,"mW",0)]
+r=new H.U5(z,y)
+r.$builtinTypeInfo=[H.ip(z,"mW",0)]
z=z.gA(z)
y=new H.SO(z,y)
-y.$builtinTypeInfo=[H.Kp(x,0)]
-for(;y.G();)A.ZB(n,z.gl())
-z=n.gYK().nb
+y.$builtinTypeInfo=[H.Kp(r,0)]
+for(;y.G();)A.ZB(o,z.gl())
+z=o.gYK().nb
z=z.gUQ(z)
y=new A.e3()
-x=new H.U5(z,y)
-x.$builtinTypeInfo=[H.ip(z,"mW",0)]
+r=new H.U5(z,y)
+r.$builtinTypeInfo=[H.ip(z,"mW",0)]
z=z.gA(z)
y=new H.SO(z,y)
-y.$builtinTypeInfo=[H.Kp(x,0)]
-for(;y.G();){k=z.gl()
-for(x=J.GP(k.gc9());x.G();){j=x.lo.gAx()
-q=J.x(j)
-if(typeof j==="object"&&j!==null&&!!q.$isV3){q=j.ns
-p=k.gYj()
-$.Ej().u(0,q,p)
+y.$builtinTypeInfo=[H.Kp(r,0)]
+for(;y.G();){l=z.gl()
+for(r=J.GP(l.gc9());r.G();){k=r.lo.gAx()
+q=J.x(k)
+if(typeof k==="object"&&k!==null&&!!q.$isV3){q=k.ns
+j=l.gYj()
+$.Ej().u(0,q,j)
i=$.p2().Rz(0,q)
-if(i!=null)J.Or(i)}}}},"call$1","Xz",2,0,null,275,[]],
+if(i!=null)J.Or(i)}}}},"call$1","Xz",2,0,null,270,[]],
ZB:[function(a,b){var z,y,x
-for(z=J.GP(b.gc9());y=!1,z.G();)if(z.lo.gAx()===C.za){y=!0
+for(z=J.GP(b.gc9());y=!1,z.G();)if(z.lo.gAx()===C.xd){y=!0
break}if(!y)return
if(!b.gFo()){x="warning: methods marked with @initMethod should be static, "+H.d(b.gIf())+" is not."
z=$.oK
@@ -21009,20 +20411,20 @@
z=$.oK
if(z==null)H.qw(x)
else z.call$1(x)
-return}a.CI(b.gIf(),C.xD)},"call$2","K0n",4,0,null,93,[],224,[]],
+return}a.CI(b.gIf(),C.xD)},"call$2","Ii",4,0,null,98,[],220,[]],
Zj:{
-"^":"Tp:107;",
-call$1:[function(a){A.pX()},"call$1",null,2,0,null,108,[],"call"],
+"^":"Tp:112;",
+call$1:[function(a){A.pX()},"call$1",null,2,0,null,113,[],"call"],
$isEH:true},
XP:{
-"^":"qE;zx,kw,aa,RT,Q7=,NF=,hf=,xX=,cI,lD,Gd=,Ei",
+"^":"qE;zx,kw,aa,RT,Q7=,NF=,hf=,xX=,cI,lD,Gd=,Ve",
gt5:function(a){return a.zx},
gP1:function(a){return a.aa},
goc:function(a){return a.RT},
gZf:function(a){var z,y,x
z=a.querySelector("template")
if(z!=null){y=J.x(z)
-x=J.nX(typeof z==="object"&&z!==null&&!!y.$ishs?z:M.Ky(z))
+x=J.nX(typeof z==="object"&&z!==null&&!!y.$isTU?z:M.Ky(z))
y=x}else y=null
return y},
yx:[function(a){var z,y,x,w,v
@@ -21058,9 +20460,9 @@
y0:[function(a,b){if($.Ej().t(0,b)!=null)return!1
$.p2().u(0,b,a)
if(a.hasAttribute("noscript")===!0)A.Ad(b,null)
-return!0},"call$1","gLD",2,0,null,12,[]],
+return!0},"call$1","gXX",2,0,null,12,[]],
PM:[function(a,b){if(b!=null&&J.UU(b,"-")>=0)if(!$.cd().x4(b)){J.bi($.xY().to(b,new A.q6()),a)
-return!0}return!1},"call$1","gmL",2,0,null,262,[]],
+return!0}return!1},"call$1","gmL",2,0,null,258,[]],
Ba:[function(a,b){var z,y,x,w
for(z=a,y=null;z!=null;){x=J.RE(z)
y=x.gQg(z).MW.getAttribute("extends")
@@ -21079,23 +20481,23 @@
if(w!==""){y=a.Q7
y=y!=null&&y.x4(w)}else y=!1
if(y)continue
-v=new H.GD(H.le(w))
+v=new H.GD(H.u1(w))
u=A.Oy(b,v)
if(u==null){window
y=$.pl()
-t="property for attribute "+w+" of polymer-element name="+a.RT+" not found."
+t="property for attribute "+w+" of polymer-element name="+H.d(a.RT)+" not found."
y.toString
if(typeof console!="undefined")console.warn(t)
continue}y=a.Q7
if(y==null){y=H.B7([],P.L5(null,null,null,null,null))
-a.Q7=y}y.u(0,v,u)}}},"call$2","gvQ",4,0,null,258,[],575,[]],
+a.Q7=y}y.u(0,v,u)}}},"call$2","gvQ",4,0,null,254,[],549,[]],
Vk:[function(a){var z,y
z=P.L5(null,null,null,J.O,P.a)
a.xX=z
y=a.aa
if(y!=null)z.FV(0,J.Ng(y))
new W.i7(a).aN(0,new A.CK(a))},"call$0","gYi",0,0,null],
-W3:[function(a,b){new W.i7(a).aN(0,new A.LJ(b))},"call$1","gSX",2,0,null,576,[]],
+W3:[function(a,b){new W.i7(a).aN(0,new A.LJ(b))},"call$1","gSX",2,0,null,550,[]],
Mi:[function(a){var z=this.Hs(a,"[rel=stylesheet]")
a.cI=z
for(z=H.VM(new H.a7(z,z.length,0,null),[H.Kp(z,0)]);z.G();)J.QC(z.lo)},"call$0","gax",0,0,null],
@@ -21113,15 +20515,15 @@
t=w.vM+u
w.vM=t
w.vM=t+"\n"}if(w.vM.length>0){z=document.createElement("style",null)
-z.textContent=H.d(w)
+J.c9(z,H.d(w))
v=J.RE(x)
-v.mK(x,z,v.gq6(x))}}},"call$0","gysu",0,0,null],
+v.mK(x,z,v.gq6(x))}}},"call$0","gnt",0,0,null],
oP:[function(a,b,c){var z,y,x
z=W.vD(a.querySelectorAll(b),null)
y=z.br(z)
x=this.gZf(a)
if(x!=null)C.Nm.FV(y,J.pe(x,b))
-return y},function(a,b){return this.oP(a,b,null)},"Hs","call$2",null,"gKQ",2,2,null,77,510,[],577,[]],
+return y},function(a,b){return this.oP(a,b,null)},"Hs","call$2",null,"gKQ",2,2,null,82,477,[],551,[]],
kO:[function(a,b){var z,y,x,w,v,u
z=P.p9("")
y=new A.Oc("[polymer-scope="+b+"]")
@@ -21132,16 +20534,15 @@
z.vM=u+"\n\n"}for(x=a.lD,x.toString,y=H.VM(new H.U5(x,y),[null]),y=H.VM(new H.SO(J.GP(y.l6),y.T6),[H.Kp(y,0)]),x=y.OI;y.G();){w=x.gl().ghg()
w=z.vM+w
z.vM=w
-z.vM=w+"\n\n"}return z.vM},"call$1","gvf",2,0,null,578,[]],
+z.vM=w+"\n\n"}return z.vM},"call$1","gvf",2,0,null,552,[]],
J3:[function(a,b,c){var z
if(b==="")return
z=document.createElement("style",null)
-z.textContent=b
-z.toString
-z.setAttribute("element",a.RT+"-"+c)
-return z},"call$2","gNG",4,0,null,579,[],578,[]],
+J.c9(z,b)
+z.setAttribute("element",H.d(a.RT)+"-"+c)
+return z},"call$2","gNG",4,0,null,553,[],552,[]],
q1:[function(a,b){var z,y,x,w
-if(J.de(b,$.Tf()))return
+if(J.de(b,$.H8()))return
this.q1(a,b.gAY())
for(z=b.gYK().nb,z=z.gUQ(z),z=H.VM(new H.MH(null,J.GP(z.l6),z.T6),[H.Kp(z,0),H.Kp(z,1)]);z.G();){y=z.lo
x=J.x(y)
@@ -21150,10 +20551,10 @@
x=J.rY(w)
if(x.Tc(w,"Changed")&&!x.n(w,"attributeChanged")){if(a.hf==null)a.hf=P.L5(null,null,null,null,null)
w=x.Nj(w,0,J.xH(x.gB(w),7))
-a.hf.u(0,new H.GD(H.le(w)),y.gIf())}}},"call$1","gHv",2,0,null,258,[]],
+a.hf.u(0,new H.GD(H.u1(w)),y.gIf())}}},"call$1","gHv",2,0,null,254,[]],
qC:[function(a,b){var z=P.L5(null,null,null,J.O,null)
b.aN(0,new A.MX(z))
-return z},"call$1","gir",2,0,null,580,[]],
+return z},"call$1","gir",2,0,null,554,[]],
du:function(a){a.RT=a.getAttribute("name")
this.yx(a)},
$isXP:true,
@@ -21162,48 +20563,48 @@
C.xk.du(a)
return a}}},
q6:{
-"^":"Tp:113;",
+"^":"Tp:115;",
call$0:[function(){return[]},"call$0",null,0,0,null,"call"],
$isEH:true},
CK:{
-"^":"Tp:346;a",
-call$2:[function(a,b){if(C.kr.x4(a)!==!0&&!J.co(a,"on-"))this.a.xX.u(0,a,b)},"call$2",null,4,0,null,12,[],23,[],"call"],
+"^":"Tp:348;a",
+call$2:[function(a,b){if(C.kr.x4(a)!==!0&&!J.co(a,"on-"))this.a.xX.u(0,a,b)},"call$2",null,4,0,null,12,[],28,[],"call"],
$isEH:true},
LJ:{
-"^":"Tp:346;a",
+"^":"Tp:348;a",
call$2:[function(a,b){var z,y,x
z=J.rY(a)
if(z.nC(a,"on-")){y=J.U6(b).u8(b,"{{")
x=C.xB.cn(b,"}}")
-if(y>=0&&x>=0)this.a.u(0,z.yn(a,3),C.xB.bS(C.xB.Nj(b,y+2,x)))}},"call$2",null,4,0,null,12,[],23,[],"call"],
+if(y>=0&&x>=0)this.a.u(0,z.yn(a,3),C.xB.bS(C.xB.Nj(b,y+2,x)))}},"call$2",null,4,0,null,12,[],28,[],"call"],
$isEH:true},
ZG:{
-"^":"Tp:107;",
-call$1:[function(a){return J.Vs(a).MW.hasAttribute("polymer-scope")!==!0},"call$1",null,2,0,null,86,[],"call"],
+"^":"Tp:112;",
+call$1:[function(a){return J.Vs(a).MW.hasAttribute("polymer-scope")!==!0},"call$1",null,2,0,null,91,[],"call"],
$isEH:true},
Oc:{
-"^":"Tp:107;a",
-call$1:[function(a){return J.RF(a,this.a)},"call$1",null,2,0,null,86,[],"call"],
+"^":"Tp:112;a",
+call$1:[function(a){return J.RF(a,this.a)},"call$1",null,2,0,null,91,[],"call"],
$isEH:true},
MX:{
-"^":"Tp:346;a",
-call$2:[function(a,b){this.a.u(0,J.Mz(J.GL(a)),b)},"call$2",null,4,0,null,12,[],23,[],"call"],
+"^":"Tp:348;a",
+call$2:[function(a,b){this.a.u(0,J.Mz(J.GL(a)),b)},"call$2",null,4,0,null,12,[],28,[],"call"],
$isEH:true},
-w10:{
-"^":"Tp:113;",
+w12:{
+"^":"Tp:115;",
call$0:[function(){var z=P.L5(null,null,null,J.O,J.O)
C.FS.aN(0,new A.r3y(z))
return z},"call$0",null,0,0,null,"call"],
$isEH:true},
r3y:{
-"^":"Tp:346;a",
-call$2:[function(a,b){this.a.u(0,b,a)},"call$2",null,4,0,null,581,[],582,[],"call"],
+"^":"Tp:348;a",
+call$2:[function(a,b){this.a.u(0,b,a)},"call$2",null,4,0,null,555,[],556,[],"call"],
$isEH:true},
yL:{
"^":"nd;",
$isyL:true},
zs:{
-"^":["a;KM:X0=-412",function(){return[C.nJ]}],
+"^":["a;KM:X0=-375",function(){return[C.Nw]}],
gpQ:function(a){return!1},
Pa:[function(a){if(W.Pv(this.gM0(a).defaultView)!=null||$.Bh>0)this.Ec(a)},"call$0","gu1",0,0,null],
Ec:[function(a){var z,y
@@ -21216,12 +20617,12 @@
this.Uc(a)
$.Bh=$.Bh+1
this.z2(a,a.dZ)
-$.Bh=$.Bh-1},"call$0","gUr",0,0,null],
+$.Bh=$.Bh-1},"call$0","gLi",0,0,null],
i4:[function(a){if(a.dZ==null)this.Ec(a)
this.BT(a,!0)},"call$0","gQd",0,0,null],
xo:[function(a){this.x3(a)},"call$0","gbt",0,0,null],
z2:[function(a,b){if(b!=null){this.z2(a,J.lB(b))
-this.d0(a,b)}},"call$1","gET",2,0,null,583,[]],
+this.d0(a,b)}},"call$1","gET",2,0,null,557,[]],
d0:[function(a,b){var z,y,x,w,v
z=J.RE(b)
y=z.Ja(b,"template")
@@ -21232,32 +20633,32 @@
if(typeof x!=="object"||x===null||!w.$isI0)return
v=z.gQg(b).MW.getAttribute("name")
if(v==null)return
-a.B7.u(0,v,x)},"call$1","gcY",2,0,null,584,[]],
+a.B7.u(0,v,x)},"call$1","gEB",2,0,null,558,[]],
Se:[function(a,b){var z,y
if(b==null)return
z=J.x(b)
-z=typeof b==="object"&&b!==null&&!!z.$ishs?b:M.Ky(b)
+z=typeof b==="object"&&b!==null&&!!z.$isTU?b:M.Ky(b)
y=z.ZK(a,a.SO)
this.jx(a,y)
this.lj(a,a)
-return y},"call$1","gAt",2,0,null,261,[]],
+return y},"call$1","gAt",2,0,null,257,[]],
Tp:[function(a,b){var z,y
if(b==null)return
-this.gKE(a)
+this.gIW(a)
z=this.er(a)
$.od().u(0,z,a)
z.applyAuthorStyles=this.gpQ(a)
z.resetStyleInheritance=!1
y=J.x(b)
-y=typeof b==="object"&&b!==null&&!!y.$ishs?b:M.Ky(b)
+y=typeof b==="object"&&b!==null&&!!y.$isTU?b:M.Ky(b)
z.appendChild(y.ZK(a,a.SO))
this.lj(a,z)
-return z},"call$1","gQb",2,0,null,261,[]],
+return z},"call$1","gQb",2,0,null,257,[]],
lj:[function(a,b){var z,y,x,w
for(z=J.pe(b,"[id]"),z=z.gA(z),y=a.X0,x=J.w1(y);z.G();){w=z.lo
-x.u(y,J.F8(w),w)}},"call$1","gb7",2,0,null,585,[]],
+x.u(y,J.F8(w),w)}},"call$1","gb7",2,0,null,559,[]],
aC:[function(a,b,c,d){var z=J.x(b)
-if(!z.n(b,"class")&&!z.n(b,"style"))this.D3(a,b,d)},"call$3","gxR",6,0,null,12,[],233,[],234,[]],
+if(!z.n(b,"class")&&!z.n(b,"style"))this.D3(a,b,d)},"call$3","gxR",6,0,null,12,[],229,[],230,[]],
Z2:[function(a){J.Ng(a.dZ).aN(0,new A.WC(a))},"call$0","gGN",0,0,null],
fk:[function(a){if(J.ak(a.dZ)==null)return
this.gQg(a).aN(0,this.ghW(a))},"call$0","goQ",0,0,null],
@@ -21268,14 +20669,14 @@
y=H.vn(a)
x=y.rN(z.gIf()).gAx()
w=Z.Zh(c,x,A.al(x,z))
-if(w==null?x!=null:w!==x)y.PU(z.gIf(),w)},"call$2","ghW",4,0,586,12,[],23,[]],
+if(w==null?x!=null:w!==x)y.PU(z.gIf(),w)},"call$2","ghW",4,0,560,12,[],28,[]],
B2:[function(a,b){var z=J.ak(a.dZ)
if(z==null)return
return z.t(0,b)},"call$1","gHf",2,0,null,12,[]],
TW:[function(a,b){if(b==null)return
if(typeof b==="boolean")return b?"":null
else if(typeof b==="string"||typeof b==="number"&&Math.floor(b)===b||typeof b==="number")return H.d(b)
-return},"call$1","gt4",2,0,null,23,[]],
+return},"call$1","gt4",2,0,null,28,[]],
Id:[function(a,b){var z,y
z=H.vn(a).rN(b).gAx()
y=this.TW(a,z)
@@ -21288,7 +20689,7 @@
else{J.MV(M.Ky(a),b)
y=z.gIf()
x=$.ZH()
-if(x.Im(C.R5))x.J4("["+H.d(c)+"]: bindProperties: ["+H.d(d)+"] to ["+this.gqn(a)+"].["+H.d(y)+"]")
+if(x.Im(C.R5))x.J4("["+H.d(c)+"]: bindProperties: ["+H.d(d)+"] to ["+H.d(this.gqn(a))+"].["+H.d(y)+"]")
w=L.ao(c,d,null)
if(w.gP(w)==null)w.sP(0,H.vn(a).rN(y).gAx())
x=H.vn(a)
@@ -21299,12 +20700,12 @@
t.bw(a,y,c,d)
this.Id(a,z.gIf())
J.kW(J.QE(M.Ky(a)),b,t)
-return t}},"call$3","gxfG",4,2,null,77,12,[],285,[],265,[]],
+return t}},"call$3","gxfG",4,2,null,82,12,[],284,[],261,[]],
gCd:function(a){return J.QE(M.Ky(a))},
Ih:[function(a,b){return J.MV(M.Ky(a),b)},"call$1","gC8",2,0,null,12,[]],
x3:[function(a){var z,y
if(a.Uk===!0)return
-$.P5().J4("["+this.gqn(a)+"] asyncUnbindAll")
+$.P5().J4("["+H.d(this.gqn(a))+"] asyncUnbindAll")
z=a.oq
y=this.gJg(a)
if(z!=null)z.TP(0)
@@ -21318,16 +20719,16 @@
if(z!=null){z.ed()
a.Wz=null}this.C0(a)
J.AA(M.Ky(a))
-y=this.gKE(a)
-for(;y!=null;){A.zM(y)
-y=y.olderShadowRoot}a.Uk=!0},"call$0","gJg",0,0,112],
+y=this.gIW(a)
+for(;y!=null;){A.xv(y)
+y=y.olderShadowRoot}a.Uk=!0},"call$0","gJg",0,0,114],
BT:[function(a,b){var z
-if(a.Uk===!0){$.P5().j2("["+this.gqn(a)+"] already unbound, cannot cancel unbindAll")
-return}$.P5().J4("["+this.gqn(a)+"] cancelUnbindAll")
+if(a.Uk===!0){$.P5().j2("["+H.d(this.gqn(a))+"] already unbound, cannot cancel unbindAll")
+return}$.P5().J4("["+H.d(this.gqn(a))+"] cancelUnbindAll")
z=a.oq
if(z!=null){z.TP(0)
a.oq=null}if(b===!0)return
-A.Vx(this.gKE(a),new A.TV())},function(a){return this.BT(a,null)},"oW","call$1$preventCascade",null,"gF7",0,3,null,77,587,[]],
+A.om(this.gIW(a),new A.TV())},function(a){return this.BT(a,null)},"oW","call$1$preventCascade",null,"gF7",0,3,null,82,561,[]],
Xl:[function(a){var z,y,x,w,v,u
z=J.xR(a.dZ)
y=J.YP(a.dZ)
@@ -21341,7 +20742,7 @@
for(w=J.GP(b);w.G();){v=w.gl()
u=J.x(v)
if(typeof v!=="object"||v===null||!u.$isqI)continue
-J.iG(x.to(v.oc,new A.Oa(v)),v.zZ)}x.aN(0,new A.n1(a,b,z,y))},"call$1","gnu",2,0,588,589,[]],
+J.iG(x.to(v.oc,new A.Oa(v)),v.zZ)}x.aN(0,new A.n1(a,b,z,y))},"call$1","gnu",2,0,562,563,[]],
rJ:[function(a,b,c,d){var z,y,x,w,v
z=J.xR(a.dZ)
if(z==null)return
@@ -21349,10 +20750,10 @@
if(y==null)return
x=J.x(d)
if(typeof d==="object"&&d!==null&&!!x.$iswn){x=$.a3()
-if(x.Im(C.R5))x.J4("["+this.gqn(a)+"] observeArrayValue: unregister observer "+H.d(b))
+if(x.Im(C.R5))x.J4("["+H.d(this.gqn(a))+"] observeArrayValue: unregister observer "+H.d(b))
this.l5(a,H.d(J.GL(b))+"__array")}x=J.x(c)
if(typeof c==="object"&&c!==null&&!!x.$iswn){x=$.a3()
-if(x.Im(C.R5))x.J4("["+this.gqn(a)+"] observeArrayValue: register observer "+H.d(b))
+if(x.Im(C.R5))x.J4("["+H.d(this.gqn(a))+"] observeArrayValue: register observer "+H.d(b))
w=c.gvp().w4(!1)
x=w.Lj
w.dB=x.cR(new A.xf(a,d,y))
@@ -21361,7 +20762,7 @@
x=H.d(J.GL(b))+"__array"
v=a.Sa
if(v==null){v=P.L5(null,null,null,J.O,P.MO)
-a.Sa=v}v.u(0,x,w)}},"call$3","gDW",6,0,null,12,[],23,[],248,[]],
+a.Sa=v}v.u(0,x,w)}},"call$3","gDW",6,0,null,12,[],28,[],244,[]],
l5:[function(a,b){var z=a.Sa.Rz(0,b)
if(z==null)return!1
z.ed()
@@ -21372,11 +20773,11 @@
a.Sa.V1(0)
a.Sa=null},"call$0","gNX",0,0,null],
Uc:[function(a){var z,y
-z=J.wX(a.dZ)
+z=J.yxg(a.dZ)
if(z.gl0(z))return
y=$.SS()
-if(y.Im(C.R5))y.J4("["+this.gqn(a)+"] addHostListeners: "+H.d(z))
-this.UH(a,a,z.gvc(z),this.gD4(a))},"call$0","ghu",0,0,null],
+if(y.Im(C.R5))y.J4("["+H.d(this.gqn(a))+"] addHostListeners: "+H.d(z))
+this.UH(a,a,z.gvc(z),this.gD4(a))},"call$0","gxD",0,0,null],
UH:[function(a,b,c,d){var z,y,x,w,v,u,t
for(z=c.Fb,z=H.VM(new P.N6(z,z.zN,null,null),[H.Kp(c,0)]),z.zq=z.Fb.H9,y=J.RE(b);z.G();){x=z.fD
w=y.gI(b).t(0,x)
@@ -21385,61 +20786,61 @@
t=new W.Ov(0,w.uv,v,W.aF(d),u)
t.$builtinTypeInfo=[H.Kp(w,0)]
w=t.u7
-if(w!=null&&t.VP<=0)J.cZ(t.uv,v,w,u)}},"call$3","gPm",6,0,null,264,[],590,[],297,[]],
+if(w!=null&&t.VP<=0)J.cZ(t.uv,v,w,u)}},"call$3","gPm",6,0,null,260,[],564,[],295,[]],
iw:[function(a,b){var z,y,x,w,v,u,t
z=J.RE(b)
if(z.gXt(b)!==!0)return
y=$.SS()
x=y.Im(C.R5)
-if(x)y.J4(">>> ["+this.gqn(a)+"]: hostEventListener("+H.d(z.gt5(b))+")")
-w=J.wX(a.dZ)
+if(x)y.J4(">>> ["+H.d(this.gqn(a))+"]: hostEventListener("+H.d(z.gt5(b))+")")
+w=J.yxg(a.dZ)
v=z.gt5(b)
u=J.UQ($.QX(),v)
t=w.t(0,u!=null?u:v)
-if(t!=null){if(x)y.J4("["+this.gqn(a)+"] found host handler name ["+t+"]")
-this.ea(a,a,t,[b,typeof b==="object"&&b!==null&&!!z.$isHe?z.gey(b):null,a])}if(x)y.J4("<<< ["+this.gqn(a)+"]: hostEventListener("+H.d(z.gt5(b))+")")},"call$1","gD4",2,0,591,384,[]],
+if(t!=null){if(x)y.J4("["+H.d(this.gqn(a))+"] found host handler name ["+H.d(t)+"]")
+this.ea(a,a,t,[b,typeof b==="object"&&b!==null&&!!z.$isHe?z.gey(b):null,a])}if(x)y.J4("<<< ["+H.d(this.gqn(a))+"]: hostEventListener("+H.d(z.gt5(b))+")")},"call$1","gD4",2,0,565,368,[]],
ea:[function(a,b,c,d){var z,y,x
z=$.SS()
y=z.Im(C.R5)
-if(y)z.J4(">>> ["+this.gqn(a)+"]: dispatch "+H.d(c))
+if(y)z.J4(">>> ["+H.d(this.gqn(a))+"]: dispatch "+H.d(c))
x=J.x(c)
if(typeof c==="object"&&c!==null&&!!x.$isEH)H.Ek(c,d,P.Te(null))
-else if(typeof c==="string")A.HR(b,new H.GD(H.le(c)),d)
+else if(typeof c==="string")A.HR(b,new H.GD(H.u1(c)),d)
else z.j2("invalid callback")
-if(y)z.To("<<< ["+this.gqn(a)+"]: dispatch "+H.d(c))},"call$3","gtW",6,0,null,6,[],592,[],268,[]],
+if(y)z.To("<<< ["+H.d(this.gqn(a))+"]: dispatch "+H.d(c))},"call$3","gEi",6,0,null,6,[],566,[],17,[]],
$iszs:true,
-$ishs:true,
+$isTU:true,
$isd3:true,
$iscv:true,
$isGv:true,
$isD0:true,
$isKV:true},
WC:{
-"^":"Tp:346;a",
+"^":"Tp:348;a",
call$2:[function(a,b){var z=J.Vs(this.a)
if(z.x4(a)!==!0)z.u(0,a,new A.Xi(b).call$0())
-z.t(0,a)},"call$2",null,4,0,null,12,[],23,[],"call"],
+z.t(0,a)},"call$2",null,4,0,null,12,[],28,[],"call"],
$isEH:true},
Xi:{
-"^":"Tp:113;b",
+"^":"Tp:115;b",
call$0:[function(){return this.b},"call$0",null,0,0,null,"call"],
$isEH:true},
TV:{
-"^":"Tp:107;",
+"^":"Tp:112;",
call$1:[function(a){var z=J.RE(a)
-if(typeof a==="object"&&a!==null&&!!z.$iszs)z.oW(a)},"call$1",null,2,0,null,292,[],"call"],
+if(typeof a==="object"&&a!==null&&!!z.$iszs)z.oW(a)},"call$1",null,2,0,null,198,[],"call"],
$isEH:true},
Mq:{
-"^":"Tp:107;",
+"^":"Tp:112;",
call$1:[function(a){var z=J.x(a)
-return J.AA(typeof a==="object"&&a!==null&&!!z.$ishs?a:M.Ky(a))},"call$1",null,2,0,null,264,[],"call"],
+return J.AA(typeof a==="object"&&a!==null&&!!z.$isTU?a:M.Ky(a))},"call$1",null,2,0,null,260,[],"call"],
$isEH:true},
Oa:{
-"^":"Tp:113;a",
+"^":"Tp:115;a",
call$0:[function(){return new A.bS(this.a.jL,null)},"call$0",null,0,0,null,"call"],
$isEH:true},
n1:{
-"^":"Tp:346;b,c,d,e",
+"^":"Tp:348;b,c,d,e",
call$2:[function(a,b){var z,y,x
z=this.e
if(z!=null&&z.x4(a))J.Jr(this.b,a)
@@ -21449,29 +20850,29 @@
if(y!=null){z=this.b
x=J.RE(b)
J.Ut(z,a,x.gzZ(b),x.gjL(b))
-A.HR(z,y,[x.gjL(b),x.gzZ(b),this.c])}},"call$2",null,4,0,null,12,[],593,[],"call"],
+A.HR(z,y,[x.gjL(b),x.gzZ(b),this.c])}},"call$2",null,4,0,null,12,[],567,[],"call"],
$isEH:true},
xf:{
-"^":"Tp:107;a,b,c",
-call$1:[function(a){A.HR(this.a,this.c,[this.b])},"call$1",null,2,0,null,589,[],"call"],
+"^":"Tp:112;a,b,c",
+call$1:[function(a){A.HR(this.a,this.c,[this.b])},"call$1",null,2,0,null,563,[],"call"],
$isEH:true},
L6:{
-"^":"Tp:346;a,b",
+"^":"Tp:348;a,b",
call$2:[function(a,b){var z,y,x
z=$.SS()
if(z.Im(C.R5))z.J4("event: ["+H.d(b)+"]."+H.d(this.b)+" => ["+H.d(a)+"]."+this.a+"())")
-y=J.D8(this.b,3)
+y=J.ZZ(this.b,3)
x=C.FS.t(0,y)
if(x!=null)y=x
z=J.f5(b).t(0,y)
H.VM(new W.Ov(0,z.uv,z.Ph,W.aF(new A.Rs(this.a,a,b)),z.Sg),[H.Kp(z,0)]).Zz()
-return H.VM(new A.xh(null,null,null),[null])},"call$2",null,4,0,null,285,[],264,[],"call"],
+return H.VM(new A.xh(null,null,null),[null])},"call$2",null,4,0,null,284,[],260,[],"call"],
$isEH:true},
Rs:{
-"^":"Tp:107;c,d,e",
+"^":"Tp:112;c,d,e",
call$1:[function(a){var z,y,x,w,v,u
z=this.e
-y=A.Hr(z)
+y=A.z9(z)
x=J.RE(y)
if(typeof y!=="object"||y===null||!x.$iszs)return
w=this.c
@@ -21480,25 +20881,25 @@
u=L.ao(v,C.xB.yn(w,1),null)
w=u.gP(u)}else v=y
u=J.RE(a)
-x.ea(y,v,w,[a,typeof a==="object"&&a!==null&&!!u.$isHe?u.gey(a):null,z])},"call$1",null,2,0,null,384,[],"call"],
+x.ea(y,v,w,[a,typeof a==="object"&&a!==null&&!!u.$isHe?u.gey(a):null,z])},"call$1",null,2,0,null,368,[],"call"],
$isEH:true},
uJ:{
-"^":"Tp:107;",
-call$1:[function(a){return!a.gQ2()},"call$1",null,2,0,null,594,[],"call"],
+"^":"Tp:112;",
+call$1:[function(a){return!a.gQ2()},"call$1",null,2,0,null,568,[],"call"],
$isEH:true},
hm:{
-"^":"Tp:107;",
+"^":"Tp:112;",
call$1:[function(a){var z,y,x
z=W.vD(document.querySelectorAll(".polymer-veiled"),null)
for(y=z.gA(z);y.G();){x=J.pP(y.lo)
x.h(0,"polymer-unveil")
x.Rz(x,"polymer-veiled")}if(z.gor(z)){y=C.hi.aM(window)
-y.gtH(y).ml(new A.Ji(z))}},"call$1",null,2,0,null,108,[],"call"],
+y.gtH(y).ml(new A.Ji(z))}},"call$1",null,2,0,null,113,[],"call"],
$isEH:true},
Ji:{
-"^":"Tp:107;a",
+"^":"Tp:112;a",
call$1:[function(a){var z
-for(z=this.a,z=z.gA(z);z.G();)J.pP(z.lo).Rz(0,"polymer-unveil")},"call$1",null,2,0,null,108,[],"call"],
+for(z=this.a,z=z.gA(z);z.G();)J.pP(z.lo).Rz(0,"polymer-unveil")},"call$1",null,2,0,null,113,[],"call"],
$isEH:true},
Bf:{
"^":"TR;I6,iU,Jq,dY,qP,ZY,xS,PB,eS,ay",
@@ -21506,17 +20907,17 @@
this.Jq.ed()
X.TR.prototype.cO.call(this,this)},"call$0","gJK",0,0,null],
EC:[function(a){this.dY=a
-this.I6.PU(this.iU,a)},"call$1","gH0",2,0,null,234,[]],
-ho:[function(a){var z,y,x,w,v
+this.I6.PU(this.iU,a)},"call$1","gH0",2,0,null,230,[]],
+aL4:[function(a){var z,y,x,w,v
for(z=J.GP(a),y=this.iU;z.G();){x=z.gl()
w=J.x(x)
if(typeof x==="object"&&x!==null&&!!w.$isqI&&J.de(x.oc,y)){v=this.I6.rN(y).gAx()
z=this.dY
if(z==null?v!=null:z!==v)J.ta(this.xS,v)
-return}}},"call$1","giz",2,0,595,256,[]],
+return}}},"call$1","giz",2,0,569,252,[]],
bw:function(a,b,c,d){this.Jq=J.xq(a).yI(this.giz())}},
ir:{
-"^":["GN;AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0-412",null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
+"^":["GN;AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0-375",null,null,null,null,null,null,null,null,null,function(){return[C.Nw]}],
G6:function(a){this.Pa(a)},
static:{oa:function(a){var z,y,x,w
z=$.Nd()
@@ -21530,17 +20931,17 @@
C.Iv.ZL(a)
C.Iv.G6(a)
return a}}},
-jpR:{
-"^":["qE+zs;KM:X0=-412",function(){return[C.nJ]}],
+Sa:{
+"^":["qE+zs;KM:X0=-375",function(){return[C.Nw]}],
$iszs:true,
-$ishs:true,
+$isTU:true,
$isd3:true,
$iscv:true,
$isGv:true,
$isD0:true,
$isKV:true},
GN:{
-"^":"jpR+Pi;",
+"^":"Sa+Pi;",
$isd3:true},
bS:{
"^":"a;jL>,zZ*",
@@ -21554,30 +20955,30 @@
if(z!=null){z.ed()
this.ih=null}},"call$0","gol",0,0,null],
tZ:[function(a){if(this.ih!=null){this.TP(0)
-this.Ws()}},"call$0","gv6",0,0,112]},
+this.Ws()}},"call$0","gv6",0,0,114]},
V3:{
"^":"a;ns",
$isV3:true},
-Bl:{
-"^":"Tp:107;",
+rD:{
+"^":"Tp:112;",
call$1:[function(a){var z=$.mC().MM
if(z.Gv!==0)H.vh(new P.lj("Future already completed"))
z.OH(null)
-return},"call$1",null,2,0,null,108,[],"call"],
+return},"call$1",null,2,0,null,113,[],"call"],
$isEH:true},
Fn:{
-"^":"Tp:107;",
+"^":"Tp:112;",
call$1:[function(a){var z=J.x(a)
-return typeof a==="object"&&a!==null&&!!z.$isRS},"call$1",null,2,0,null,596,[],"call"],
+return typeof a==="object"&&a!==null&&!!z.$isRS},"call$1",null,2,0,null,570,[],"call"],
$isEH:true},
e3:{
-"^":"Tp:107;",
+"^":"Tp:112;",
call$1:[function(a){var z=J.x(a)
-return typeof a==="object"&&a!==null&&!!z.$isMs},"call$1",null,2,0,null,596,[],"call"],
+return typeof a==="object"&&a!==null&&!!z.$isMs},"call$1",null,2,0,null,570,[],"call"],
$isEH:true},
pM:{
-"^":"Tp:107;",
-call$1:[function(a){return!a.gQ2()},"call$1",null,2,0,null,594,[],"call"],
+"^":"Tp:112;",
+call$1:[function(a){return!a.gQ2()},"call$1",null,2,0,null,568,[],"call"],
$isEH:true},
jh:{
"^":"a;"}}],["polymer.deserialize","package:polymer/deserialize.dart",,Z,{
@@ -21587,72 +20988,72 @@
if(z!=null)return z.call$2(a,b)
try{y=C.xr.kV(J.JA(a,"'","\""))
return y}catch(x){H.Ru(x)
-return a}},"call$3","jo",6,0,null,23,[],276,[],11,[]],
+return a}},"call$3","jo",6,0,null,28,[],271,[],11,[]],
W6:{
-"^":"Tp:113;",
+"^":"Tp:115;",
call$0:[function(){var z=P.L5(null,null,null,null,null)
z.u(0,C.AZ,new Z.Lf())
z.u(0,C.ok,new Z.fT())
z.u(0,C.N4,new Z.pp())
-z.u(0,C.Ts,new Z.nl())
+z.u(0,C.Kc,new Z.nl())
z.u(0,C.PC,new Z.ik())
z.u(0,C.md,new Z.LfS())
return z},"call$0",null,0,0,null,"call"],
$isEH:true},
Lf:{
-"^":"Tp:346;",
-call$2:[function(a,b){return a},"call$2",null,4,0,null,21,[],108,[],"call"],
+"^":"Tp:348;",
+call$2:[function(a,b){return a},"call$2",null,4,0,null,26,[],113,[],"call"],
$isEH:true},
fT:{
-"^":"Tp:346;",
-call$2:[function(a,b){return a},"call$2",null,4,0,null,21,[],108,[],"call"],
+"^":"Tp:348;",
+call$2:[function(a,b){return a},"call$2",null,4,0,null,26,[],113,[],"call"],
$isEH:true},
pp:{
-"^":"Tp:346;",
+"^":"Tp:348;",
call$2:[function(a,b){var z,y
try{z=P.Gl(a)
return z}catch(y){H.Ru(y)
-return b}},"call$2",null,4,0,null,21,[],597,[],"call"],
+return b}},"call$2",null,4,0,null,26,[],571,[],"call"],
$isEH:true},
nl:{
-"^":"Tp:346;",
-call$2:[function(a,b){return!J.de(a,"false")},"call$2",null,4,0,null,21,[],108,[],"call"],
+"^":"Tp:348;",
+call$2:[function(a,b){return!J.de(a,"false")},"call$2",null,4,0,null,26,[],113,[],"call"],
$isEH:true},
ik:{
-"^":"Tp:346;",
-call$2:[function(a,b){return H.BU(a,null,new Z.mf(b))},"call$2",null,4,0,null,21,[],597,[],"call"],
+"^":"Tp:348;",
+call$2:[function(a,b){return H.BU(a,null,new Z.mf(b))},"call$2",null,4,0,null,26,[],571,[],"call"],
$isEH:true},
mf:{
-"^":"Tp:107;a",
-call$1:[function(a){return this.a},"call$1",null,2,0,null,108,[],"call"],
+"^":"Tp:112;a",
+call$1:[function(a){return this.a},"call$1",null,2,0,null,113,[],"call"],
$isEH:true},
LfS:{
-"^":"Tp:346;",
-call$2:[function(a,b){return H.IH(a,new Z.HK(b))},"call$2",null,4,0,null,21,[],597,[],"call"],
+"^":"Tp:348;",
+call$2:[function(a,b){return H.IH(a,new Z.HK(b))},"call$2",null,4,0,null,26,[],571,[],"call"],
$isEH:true},
HK:{
-"^":"Tp:107;b",
-call$1:[function(a){return this.b},"call$1",null,2,0,null,108,[],"call"],
+"^":"Tp:112;b",
+call$1:[function(a){return this.b},"call$1",null,2,0,null,113,[],"call"],
$isEH:true}}],["polymer_expressions","package:polymer_expressions/polymer_expressions.dart",,T,{
"^":"",
ul:[function(a){var z=J.x(a)
if(typeof a==="object"&&a!==null&&!!z.$isZ0)z=J.vo(z.gvc(a),new T.o8(a)).zV(0," ")
-else z=typeof a==="object"&&a!==null&&(a.constructor===Array||!!z.$iscX)?z.zV(a," "):a
-return z},"call$1","qP",2,0,195,277,[]],
+else z=typeof a==="object"&&a!==null&&(a.constructor===Array||!!z.$isQV)?z.zV(a," "):a
+return z},"call$1","qP",2,0,194,272,[]],
PX:[function(a){var z=J.x(a)
if(typeof a==="object"&&a!==null&&!!z.$isZ0)z=J.C0(z.gvc(a),new T.ex(a)).zV(0,";")
-else z=typeof a==="object"&&a!==null&&(a.constructor===Array||!!z.$iscX)?z.zV(a,";"):a
-return z},"call$1","Fx",2,0,195,277,[]],
+else z=typeof a==="object"&&a!==null&&(a.constructor===Array||!!z.$isQV)?z.zV(a,";"):a
+return z},"call$1","Fx",2,0,194,272,[]],
o8:{
-"^":"Tp:107;a",
-call$1:[function(a){return J.de(this.a.t(0,a),!0)},"call$1",null,2,0,null,402,[],"call"],
+"^":"Tp:112;a",
+call$1:[function(a){return J.de(this.a.t(0,a),!0)},"call$1",null,2,0,null,442,[],"call"],
$isEH:true},
ex:{
-"^":"Tp:107;a",
-call$1:[function(a){return H.d(a)+": "+H.d(this.a.t(0,a))},"call$1",null,2,0,null,402,[],"call"],
+"^":"Tp:112;a",
+call$1:[function(a){return H.d(a)+": "+H.d(this.a.t(0,a))},"call$1",null,2,0,null,442,[],"call"],
$isEH:true},
e9:{
-"^":"T4;",
+"^":"ve;",
cl:[function(a,b,c){var z,y,x
if(a==null)return
z=new Y.hc(H.VM([],[Y.Pn]),P.p9(""),new P.WU(a,0,0,null),null)
@@ -21667,41 +21068,41 @@
if(z.n(b,"bind")||z.n(b,"repeat")){z=J.x(x)
z=typeof x==="object"&&x!==null&&!!z.$isEZ}else z=!1}else z=!1
if(z)return
-return new T.Xy(this,b,x)},"call$3","gca",6,0,598,265,[],12,[],264,[]],
-CE:[function(a){return new T.G0(this)},"call$1","gb4",2,0,null,261,[]]},
+return new T.Xy(this,b,x)},"call$3","gca",6,0,572,261,[],12,[],260,[]],
+CE:[function(a){return new T.uK(this)},"call$1","gb4",2,0,null,257,[]]},
Xy:{
-"^":"Tp:346;a,b,c",
+"^":"Tp:348;a,b,c",
call$2:[function(a,b){var z=J.x(a)
if(typeof a!=="object"||a===null||!z.$isz6){z=this.a.nF
a=new K.z6(null,a,V.WF(z==null?H.B7([],P.L5(null,null,null,null,null)):z,null,null),null)}z=J.x(b)
z=typeof b==="object"&&b!==null&&!!z.$iscv
if(z&&J.de(this.b,"class"))return T.FL(this.c,a,T.qP())
if(z&&J.de(this.b,"style"))return T.FL(this.c,a,T.Fx())
-return T.FL(this.c,a,null)},"call$2",null,4,0,null,285,[],264,[],"call"],
+return T.FL(this.c,a,null)},"call$2",null,4,0,null,284,[],260,[],"call"],
$isEH:true},
-G0:{
-"^":"Tp:107;a",
+uK:{
+"^":"Tp:112;a",
call$1:[function(a){var z=J.x(a)
if(typeof a==="object"&&a!==null&&!!z.$isz6)z=a
else{z=this.a.nF
-z=new K.z6(null,a,V.WF(z==null?H.B7([],P.L5(null,null,null,null,null)):z,null,null),null)}return z},"call$1",null,2,0,null,285,[],"call"],
+z=new K.z6(null,a,V.WF(z==null?H.B7([],P.L5(null,null,null,null,null)):z,null,null),null)}return z},"call$1",null,2,0,null,284,[],"call"],
$isEH:true},
mY:{
-"^":"Pi;a9,Cu,uI,Y7,AP,fn",
+"^":"Pi;a9,Cu,uI,Y7,AP,Lk",
u0:function(a){return this.uI.call$1(a)},
KX:[function(a){var z,y
z=this.Y7
y=J.x(a)
if(typeof a==="object"&&a!==null&&!!y.$isfk){y=J.C0(a.bm,new T.mB(this,a)).tt(0,!1)
this.Y7=y}else{y=this.uI==null?a:this.u0(a)
-this.Y7=y}F.Wi(this,C.ls,z,y)},"call$1","gUG",2,0,107,277,[]],
-gP:[function(a){return this.Y7},null,null,1,0,113,"value",355],
+this.Y7=y}F.Wi(this,C.ls,z,y)},"call$1","gUG",2,0,112,272,[]],
+gP:[function(a){return this.Y7},null,null,1,0,115,"value",358],
r6:function(a,b){return this.gP(this).call$1(b)},
sP:[function(a,b){var z,y,x,w
try{K.jX(this.Cu,b,this.a9)}catch(y){x=H.Ru(y)
w=J.x(x)
if(typeof x==="object"&&x!==null&&!!w.$isB0){z=x
-$.eH().j2("Error evaluating expression '"+H.d(this.Cu)+"': "+J.yj(z))}else throw y}},null,null,3,0,107,277,[],"value",355],
+$.eH().j2("Error evaluating expression '"+H.d(this.Cu)+"': "+J.yj(z))}else throw y}},null,null,3,0,112,272,[],"value",358],
yB:function(a,b,c){var z,y,x,w,v
y=this.Cu
y.gju().yI(this.gUG()).fm(0,new T.GX(this))
@@ -21715,18 +21116,18 @@
z.yB(a,b,c)
return z}}},
GX:{
-"^":"Tp:107;a",
-call$1:[function(a){$.eH().j2("Error evaluating expression '"+H.d(this.a.Cu)+"': "+H.d(J.yj(a)))},"call$1",null,2,0,null,18,[],"call"],
+"^":"Tp:112;a",
+call$1:[function(a){$.eH().j2("Error evaluating expression '"+H.d(this.a.Cu)+"': "+H.d(J.yj(a)))},"call$1",null,2,0,null,19,[],"call"],
$isEH:true},
mB:{
-"^":"Tp:107;a,b",
+"^":"Tp:112;a,b",
call$1:[function(a){var z=P.L5(null,null,null,null,null)
z.u(0,this.b.kF,a)
-return new K.z6(this.a.a9,null,V.WF(z,null,null),null)},"call$1",null,2,0,null,441,[],"call"],
+return new K.z6(this.a.a9,null,V.WF(z,null,null),null)},"call$1",null,2,0,null,409,[],"call"],
$isEH:true}}],["polymer_expressions.async","package:polymer_expressions/async.dart",,B,{
"^":"",
XF:{
-"^":"xh;vq,L1,AP,fn",
+"^":"xh;vq,L1,AP,Lk",
vb:function(a,b){this.vq.yI(new B.bX(b,this))},
$asxh:function(a){return[null]},
static:{z4:function(a,b){var z=H.VM(new B.XF(a,null,null,null),[b])
@@ -21735,13 +21136,13 @@
bX:{
"^":"Tp;a,b",
call$1:[function(a){var z=this.b
-z.L1=F.Wi(z,C.ls,z.L1,a)},"call$1",null,2,0,null,441,[],"call"],
+z.L1=F.Wi(z,C.ls,z.L1,a)},"call$1",null,2,0,null,409,[],"call"],
$isEH:true,
$signature:function(){return H.IG(function(a){return{func:"CJ",args:[a]}},this.b,"XF")}}}],["polymer_expressions.eval","package:polymer_expressions/eval.dart",,K,{
"^":"",
OH:[function(a,b){var z=J.UK(a,new K.G1(b,P.NZ(null,null)))
J.UK(z,new K.Ed(b))
-return z.gLv()},"call$2","ly",4,0,null,278,[],270,[]],
+return z.gLv()},"call$2","ly",4,0,null,273,[],265,[]],
jX:[function(a,b,c){var z,y,x,w,v,u,t,s,r,q,p
z={}
z.a=a
@@ -21771,83 +21172,83 @@
throw H.b(K.kG("filter must implement Transformer: "+H.d(r)))}p=K.OH(t,c)
if(p==null)throw H.b(K.kG("Can't assign to null: "+H.d(t)))
if(s)J.kW(p,u,b)
-else H.vn(p).PU(new H.GD(H.le(u)),b)},"call$3","wA",6,0,null,278,[],23,[],270,[]],
+else H.vn(p).PU(new H.GD(H.u1(u)),b)},"call$3","wA",6,0,null,273,[],28,[],265,[]],
ci:[function(a){var z=J.x(a)
if(typeof a==="object"&&a!==null&&!!z.$isqh)return B.z4(a,null)
-return a},"call$1","Af",2,0,null,277,[]],
-Uf:{
-"^":"Tp:346;",
-call$2:[function(a,b){return J.WB(a,b)},"call$2",null,4,0,null,128,[],188,[],"call"],
-$isEH:true},
+return a},"call$1","Af",2,0,null,272,[]],
Ra:{
-"^":"Tp:346;",
-call$2:[function(a,b){return J.xH(a,b)},"call$2",null,4,0,null,128,[],188,[],"call"],
+"^":"Tp:348;",
+call$2:[function(a,b){return J.WB(a,b)},"call$2",null,4,0,null,131,[],187,[],"call"],
$isEH:true},
wJY:{
-"^":"Tp:346;",
-call$2:[function(a,b){return J.p0(a,b)},"call$2",null,4,0,null,128,[],188,[],"call"],
+"^":"Tp:348;",
+call$2:[function(a,b){return J.xH(a,b)},"call$2",null,4,0,null,131,[],187,[],"call"],
$isEH:true},
zOQ:{
-"^":"Tp:346;",
-call$2:[function(a,b){return J.FW(a,b)},"call$2",null,4,0,null,128,[],188,[],"call"],
+"^":"Tp:348;",
+call$2:[function(a,b){return J.vX(a,b)},"call$2",null,4,0,null,131,[],187,[],"call"],
$isEH:true},
W6o:{
-"^":"Tp:346;",
-call$2:[function(a,b){return J.de(a,b)},"call$2",null,4,0,null,128,[],188,[],"call"],
+"^":"Tp:348;",
+call$2:[function(a,b){return J.FW(a,b)},"call$2",null,4,0,null,131,[],187,[],"call"],
$isEH:true},
MdQ:{
-"^":"Tp:346;",
-call$2:[function(a,b){return!J.de(a,b)},"call$2",null,4,0,null,128,[],188,[],"call"],
+"^":"Tp:348;",
+call$2:[function(a,b){return J.de(a,b)},"call$2",null,4,0,null,131,[],187,[],"call"],
$isEH:true},
YJG:{
-"^":"Tp:346;",
-call$2:[function(a,b){return J.z8(a,b)},"call$2",null,4,0,null,128,[],188,[],"call"],
+"^":"Tp:348;",
+call$2:[function(a,b){return!J.de(a,b)},"call$2",null,4,0,null,131,[],187,[],"call"],
$isEH:true},
DOe:{
-"^":"Tp:346;",
-call$2:[function(a,b){return J.J5(a,b)},"call$2",null,4,0,null,128,[],188,[],"call"],
+"^":"Tp:348;",
+call$2:[function(a,b){return J.z8(a,b)},"call$2",null,4,0,null,131,[],187,[],"call"],
$isEH:true},
lPa:{
-"^":"Tp:346;",
-call$2:[function(a,b){return J.u6(a,b)},"call$2",null,4,0,null,128,[],188,[],"call"],
+"^":"Tp:348;",
+call$2:[function(a,b){return J.J5(a,b)},"call$2",null,4,0,null,131,[],187,[],"call"],
$isEH:true},
Ufa:{
-"^":"Tp:346;",
-call$2:[function(a,b){return J.Hb(a,b)},"call$2",null,4,0,null,128,[],188,[],"call"],
+"^":"Tp:348;",
+call$2:[function(a,b){return J.u6(a,b)},"call$2",null,4,0,null,131,[],187,[],"call"],
$isEH:true},
Raa:{
-"^":"Tp:346;",
-call$2:[function(a,b){return a===!0||b===!0},"call$2",null,4,0,null,128,[],188,[],"call"],
+"^":"Tp:348;",
+call$2:[function(a,b){return J.Bl(a,b)},"call$2",null,4,0,null,131,[],187,[],"call"],
$isEH:true},
w0:{
-"^":"Tp:346;",
-call$2:[function(a,b){return a===!0&&b===!0},"call$2",null,4,0,null,128,[],188,[],"call"],
+"^":"Tp:348;",
+call$2:[function(a,b){return a===!0||b===!0},"call$2",null,4,0,null,131,[],187,[],"call"],
$isEH:true},
w4:{
-"^":"Tp:346;",
-call$2:[function(a,b){var z=H.uK(P.a)
-z=H.KT(z,[z]).BD(b)
-if(z)return b.call$1(a)
-throw H.b(K.kG("Filters must be a one-argument function."))},"call$2",null,4,0,null,128,[],115,[],"call"],
+"^":"Tp:348;",
+call$2:[function(a,b){return a===!0&&b===!0},"call$2",null,4,0,null,131,[],187,[],"call"],
$isEH:true},
w5:{
-"^":"Tp:107;",
-call$1:[function(a){return a},"call$1",null,2,0,null,128,[],"call"],
+"^":"Tp:348;",
+call$2:[function(a,b){var z=H.Og(P.a)
+z=H.KT(z,[z]).BD(b)
+if(z)return b.call$1(a)
+throw H.b(K.kG("Filters must be a one-argument function."))},"call$2",null,4,0,null,131,[],117,[],"call"],
$isEH:true},
w7:{
-"^":"Tp:107;",
-call$1:[function(a){return J.Z7(a)},"call$1",null,2,0,null,128,[],"call"],
+"^":"Tp:112;",
+call$1:[function(a){return a},"call$1",null,2,0,null,131,[],"call"],
$isEH:true},
-w9:{
-"^":"Tp:107;",
-call$1:[function(a){return a!==!0},"call$1",null,2,0,null,128,[],"call"],
+w10:{
+"^":"Tp:112;",
+call$1:[function(a){return J.Z7(a)},"call$1",null,2,0,null,131,[],"call"],
+$isEH:true},
+w11:{
+"^":"Tp:112;",
+call$1:[function(a){return a!==!0},"call$1",null,2,0,null,131,[],"call"],
$isEH:true},
c4:{
-"^":"Tp:113;a",
+"^":"Tp:115;a",
call$0:[function(){return H.vh(K.kG("Expression is not assignable: "+H.d(this.a.a)))},"call$0",null,0,0,null,"call"],
$isEH:true},
z6:{
-"^":"a;eT>,k8,bq,G9",
+"^":"a;eT>,k8<,bq,G9",
gCH:function(){var z=this.G9
if(z!=null)return z
z=H.vn(this.k8)
@@ -21857,7 +21258,7 @@
if(J.de(b,"this"))return this.k8
else{z=this.bq.Zp
if(z.x4(b))return K.ci(z.t(0,b))
-else if(this.k8!=null){y=new H.GD(H.le(b))
+else if(this.k8!=null){y=new H.GD(H.u1(b))
x=Z.y1(H.jO(J.bB(this.gCH().Ax).LU),y)
z=J.x(x)
if(typeof x!=="object"||x===null||!z.$isRY)w=typeof x==="object"&&x!==null&&!!z.$isRS&&x.glT()
@@ -21870,26 +21271,27 @@
if(J.de(a,"this"))return
else{z=this.bq
if(z.Zp.x4(a))return z
-else{z=H.le(a)
+else{z=H.u1(a)
if(Z.y1(H.jO(J.bB(this.gCH().Ax).LU),new H.GD(z))!=null)return this.k8}}z=this.eT
if(z!=null)return z.tI(a)},"call$1","gXe",2,0,null,12,[]],
tg:[function(a,b){var z
if(this.bq.Zp.x4(b))return!0
-else{z=H.le(b)
+else{z=H.u1(b)
if(Z.y1(H.jO(J.bB(this.gCH().Ax).LU),new H.GD(z))!=null)return!0}z=this.eT
if(z!=null)return z.tg(0,b)
return!1},"call$1","gdj",2,0,null,12,[]],
$isz6:true},
-Ay0:{
+Ay:{
"^":"a;bO?,Lv<",
gju:function(){var z=this.k6
return H.VM(new P.Ik(z),[H.Kp(z,0)])},
gLl:function(){return this.Lv},
-Qh:[function(a){},"call$1","gVj",2,0,null,270,[]],
+eC:[function(a){return this.Qh(a)},"call$1","gpn",2,0,null,265,[]],
+Qh:[function(a){},"call$1","gVj",2,0,null,265,[]],
DX:[function(a){var z
this.yc(0,a)
z=this.bO
-if(z!=null)z.DX(a)},"call$1","gFO",2,0,null,270,[]],
+if(z!=null)z.DX(a)},"call$1","gFO",2,0,null,265,[]],
yc:[function(a,b){var z,y,x
z=this.tj
if(z!=null){z.ed()
@@ -21898,30 +21300,30 @@
z=this.Lv
if(z==null?y!=null:z!==y){x=this.k6
if(x.Gv>=4)H.vh(x.q7())
-x.Iv(z)}},"call$1","gcz",2,0,null,270,[]],
+x.Iv(z)}},"call$1","gcz",2,0,null,265,[]],
bu:[function(a){return this.KL.bu(0)},"call$0","gXo",0,0,null],
$ishw:true},
Ed:{
-"^":"cfS;Jd",
-xn:[function(a){a.yc(0,this.Jd)},"call$1","gBe",2,0,null,18,[]],
+"^":"d2;Jd",
+xn:[function(a){a.yc(0,this.Jd)},"call$1","gBe",2,0,null,19,[]],
ky:[function(a){J.UK(a.gT8(),this)
-a.yc(0,this.Jd)},"call$1","gXf",2,0,null,283,[]]},
+a.yc(0,this.Jd)},"call$1","gU6",2,0,null,278,[]]},
G1:{
"^":"fr;Jd,Le",
-W9:[function(a){return new K.Wh(a,null,null,null,P.bK(null,null,!1,null))},"call$1","glO",2,0,null,18,[]],
-LT:[function(a){return a.wz.RR(0,this)},"call$1","gff",2,0,null,18,[]],
+W9:[function(a){return new K.Wh(a,null,null,null,P.bK(null,null,!1,null))},"call$1","glO",2,0,null,19,[]],
+LT:[function(a){return a.wz.RR(0,this)},"call$1","gff",2,0,null,19,[]],
co:[function(a){var z,y
z=J.UK(a.ghP(),this)
y=new K.vl(z,a,null,null,null,P.bK(null,null,!1,null))
z.sbO(y)
-return y},"call$1","gEW",2,0,null,351,[]],
+return y},"call$1","gEW",2,0,null,354,[]],
CU:[function(a){var z,y,x
z=J.UK(a.ghP(),this)
y=J.UK(a.gJn(),this)
x=new K.iT(z,y,a,null,null,null,P.bK(null,null,!1,null))
z.sbO(x)
y.sbO(x)
-return x},"call$1","gA2",2,0,null,441,[]],
+return x},"call$1","gA2",2,0,null,409,[]],
ZR:[function(a){var z,y,x,w,v
z=J.UK(a.ghP(),this)
y=a.gre()
@@ -21931,115 +21333,115 @@
x=H.VM(new H.A8(y,w),[null,null]).tt(0,!1)}v=new K.fa(z,x,a,null,null,null,P.bK(null,null,!1,null))
z.sbO(v)
if(x!=null){x.toString
-H.bQ(x,new K.Os(v))}return v},"call$1","gES",2,0,null,441,[]],
-ti:[function(a){return new K.x5(a,null,null,null,P.bK(null,null,!1,null))},"call$1","gXj",2,0,null,279,[]],
+H.bQ(x,new K.Os(v))}return v},"call$1","gES",2,0,null,409,[]],
+ti:[function(a){return new K.x5(a,null,null,null,P.bK(null,null,!1,null))},"call$1","gHb",2,0,null,274,[]],
o0:[function(a){var z,y
z=H.VM(new H.A8(a.gPu(a),this.gnG()),[null,null]).tt(0,!1)
y=new K.ev(z,a,null,null,null,P.bK(null,null,!1,null))
H.bQ(z,new K.B8(y))
-return y},"call$1","gX7",2,0,null,279,[]],
+return y},"call$1","gmd",2,0,null,274,[]],
YV:[function(a){var z,y,x
z=J.UK(a.gG3(a),this)
y=J.UK(a.gv4(),this)
x=new K.qR(z,y,a,null,null,null,P.bK(null,null,!1,null))
z.sbO(x)
y.sbO(x)
-return x},"call$1","ghH",2,0,null,18,[]],
-qv:[function(a){return new K.ek(a,null,null,null,P.bK(null,null,!1,null))},"call$1","gFs",2,0,null,441,[]],
+return x},"call$1","ghH",2,0,null,19,[]],
+qv:[function(a){return new K.ek(a,null,null,null,P.bK(null,null,!1,null))},"call$1","gFs",2,0,null,409,[]],
im:[function(a){var z,y,x
z=J.UK(a.gBb(),this)
y=J.UK(a.gT8(),this)
-x=new K.mG(z,y,a,null,null,null,P.bK(null,null,!1,null))
+x=new K.iv(z,y,a,null,null,null,P.bK(null,null,!1,null))
z.sbO(x)
y.sbO(x)
-return x},"call$1","glf",2,0,null,91,[]],
+return x},"call$1","glf",2,0,null,96,[]],
Hx:[function(a){var z,y
z=J.UK(a.gwz(),this)
y=new K.mv(z,a,null,null,null,P.bK(null,null,!1,null))
z.sbO(y)
-return y},"call$1","ghe",2,0,null,91,[]],
+return y},"call$1","ghe",2,0,null,96,[]],
ky:[function(a){var z,y,x
z=J.UK(a.gBb(),this)
y=J.UK(a.gT8(),this)
x=new K.VA(z,y,a,null,null,null,P.bK(null,null,!1,null))
y.sbO(x)
-return x},"call$1","gXf",2,0,null,441,[]]},
+return x},"call$1","gU6",2,0,null,409,[]]},
Os:{
-"^":"Tp:107;a",
+"^":"Tp:112;a",
call$1:[function(a){var z=this.a
a.sbO(z)
-return z},"call$1",null,2,0,null,128,[],"call"],
+return z},"call$1",null,2,0,null,131,[],"call"],
$isEH:true},
B8:{
-"^":"Tp:107;a",
+"^":"Tp:112;a",
call$1:[function(a){var z=this.a
a.sbO(z)
-return z},"call$1",null,2,0,null,18,[],"call"],
+return z},"call$1",null,2,0,null,19,[],"call"],
$isEH:true},
Wh:{
-"^":"Ay0;KL,bO,tj,Lv,k6",
-Qh:[function(a){this.Lv=a.k8},"call$1","gVj",2,0,null,270,[]],
-RR:[function(a,b){return b.W9(this)},"call$1","gaH6",2,0,null,277,[]],
-$asAy0:function(){return[U.EZ]},
+"^":"Ay;KL,bO,tj,Lv,k6",
+Qh:[function(a){this.Lv=a.gk8()},"call$1","gVj",2,0,null,265,[]],
+RR:[function(a,b){return b.W9(this)},"call$1","gZC",2,0,null,272,[]],
+$asAy:function(){return[U.EZ]},
$isEZ:true,
$ishw:true},
x5:{
-"^":"Ay0;KL,bO,tj,Lv,k6",
+"^":"Ay;KL,bO,tj,Lv,k6",
gP:function(a){var z=this.KL
return z.gP(z)},
r6:function(a,b){return this.gP(this).call$1(b)},
Qh:[function(a){var z=this.KL
-this.Lv=z.gP(z)},"call$1","gVj",2,0,null,270,[]],
-RR:[function(a,b){return b.ti(this)},"call$1","gaH6",2,0,null,277,[]],
-$asAy0:function(){return[U.no]},
+this.Lv=z.gP(z)},"call$1","gVj",2,0,null,265,[]],
+RR:[function(a,b){return b.ti(this)},"call$1","gZC",2,0,null,272,[]],
+$asAy:function(){return[U.no]},
$asno:function(){return[null]},
$isno:true,
$ishw:true},
ev:{
-"^":"Ay0;Pu>,KL,bO,tj,Lv,k6",
-Qh:[function(a){this.Lv=H.n3(this.Pu,P.L5(null,null,null,null,null),new K.ID())},"call$1","gVj",2,0,null,270,[]],
-RR:[function(a,b){return b.o0(this)},"call$1","gaH6",2,0,null,277,[]],
-$asAy0:function(){return[U.kB]},
+"^":"Ay;Pu>,KL,bO,tj,Lv,k6",
+Qh:[function(a){this.Lv=H.n3(this.Pu,P.L5(null,null,null,null,null),new K.ID())},"call$1","gVj",2,0,null,265,[]],
+RR:[function(a,b){return b.o0(this)},"call$1","gZC",2,0,null,272,[]],
+$asAy:function(){return[U.kB]},
$iskB:true,
$ishw:true},
ID:{
-"^":"Tp:346;",
+"^":"Tp:348;",
call$2:[function(a,b){J.kW(a,J.WI(b).gLv(),b.gv4().gLv())
-return a},"call$2",null,4,0,null,191,[],18,[],"call"],
+return a},"call$2",null,4,0,null,190,[],19,[],"call"],
$isEH:true},
qR:{
-"^":"Ay0;G3>,v4<,KL,bO,tj,Lv,k6",
-RR:[function(a,b){return b.YV(this)},"call$1","gaH6",2,0,null,277,[]],
-$asAy0:function(){return[U.ae]},
+"^":"Ay;G3>,v4<,KL,bO,tj,Lv,k6",
+RR:[function(a,b){return b.YV(this)},"call$1","gZC",2,0,null,272,[]],
+$asAy:function(){return[U.ae]},
$isae:true,
$ishw:true},
ek:{
-"^":"Ay0;KL,bO,tj,Lv,k6",
+"^":"Ay;KL,bO,tj,Lv,k6",
gP:function(a){var z=this.KL
return z.gP(z)},
r6:function(a,b){return this.gP(this).call$1(b)},
Qh:[function(a){var z,y,x
z=this.KL
-this.Lv=a.t(0,z.gP(z))
+this.Lv=J.UQ(a,z.gP(z))
y=a.tI(z.gP(z))
x=J.RE(y)
-if(typeof y==="object"&&y!==null&&!!x.$isd3){z=H.le(z.gP(z))
-this.tj=x.gUj(y).yI(new K.Qv(this,a,new H.GD(z)))}},"call$1","gVj",2,0,null,270,[]],
-RR:[function(a,b){return b.qv(this)},"call$1","gaH6",2,0,null,277,[]],
-$asAy0:function(){return[U.w6]},
+if(typeof y==="object"&&y!==null&&!!x.$isd3){z=H.u1(z.gP(z))
+this.tj=x.gUj(y).yI(new K.Qv(this,a,new H.GD(z)))}},"call$1","gVj",2,0,null,265,[]],
+RR:[function(a,b){return b.qv(this)},"call$1","gZC",2,0,null,272,[]],
+$asAy:function(){return[U.w6]},
$isw6:true,
$ishw:true},
Qv:{
-"^":"Tp:107;a,b,c",
-call$1:[function(a){if(J.pb(a,new K.Xm(this.c))===!0)this.a.DX(this.b)},"call$1",null,2,0,null,589,[],"call"],
+"^":"Tp:112;a,b,c",
+call$1:[function(a){if(J.pb(a,new K.Xm(this.c))===!0)this.a.DX(this.b)},"call$1",null,2,0,null,563,[],"call"],
$isEH:true},
Xm:{
-"^":"Tp:107;d",
+"^":"Tp:112;d",
call$1:[function(a){var z=J.x(a)
-return typeof a==="object"&&a!==null&&!!z.$isqI&&J.de(a.oc,this.d)},"call$1",null,2,0,null,283,[],"call"],
+return typeof a==="object"&&a!==null&&!!z.$isqI&&J.de(a.oc,this.d)},"call$1",null,2,0,null,278,[],"call"],
$isEH:true},
mv:{
-"^":"Ay0;wz<,KL,bO,tj,Lv,k6",
+"^":"Ay;wz<,KL,bO,tj,Lv,k6",
gkp:function(a){var z=this.KL
return z.gkp(z)},
Qh:[function(a){var z,y
@@ -22047,13 +21449,13 @@
y=$.ww().t(0,z.gkp(z))
if(J.de(z.gkp(z),"!")){z=this.wz.gLv()
this.Lv=y.call$1(z==null?!1:z)}else{z=this.wz
-this.Lv=z.gLv()==null?null:y.call$1(z.gLv())}},"call$1","gVj",2,0,null,270,[]],
-RR:[function(a,b){return b.Hx(this)},"call$1","gaH6",2,0,null,277,[]],
-$asAy0:function(){return[U.jK]},
+this.Lv=z.gLv()==null?null:y.call$1(z.gLv())}},"call$1","gVj",2,0,null,265,[]],
+RR:[function(a,b){return b.Hx(this)},"call$1","gZC",2,0,null,272,[]],
+$asAy:function(){return[U.jK]},
$isjK:true,
$ishw:true},
-mG:{
-"^":"Ay0;Bb<,T8<,KL,bO,tj,Lv,k6",
+iv:{
+"^":"Ay;Bb<,T8<,KL,bO,tj,Lv,k6",
gkp:function(a){var z=this.KL
return z.gkp(z)},
Qh:[function(a){var z,y,x,w
@@ -22070,64 +21472,64 @@
w=typeof z==="object"&&z!==null&&!!w.$iswn
z=w}else z=!1
if(z)this.tj=H.Go(x.gLv(),"$iswn").gvp().yI(new K.uA(this,a))
-this.Lv=y.call$2(x.gLv(),this.T8.gLv())}}},"call$1","gVj",2,0,null,270,[]],
-RR:[function(a,b){return b.im(this)},"call$1","gaH6",2,0,null,277,[]],
-$asAy0:function(){return[U.uk]},
+this.Lv=y.call$2(x.gLv(),this.T8.gLv())}}},"call$1","gVj",2,0,null,265,[]],
+RR:[function(a,b){return b.im(this)},"call$1","gZC",2,0,null,272,[]],
+$asAy:function(){return[U.uk]},
$isuk:true,
$ishw:true},
uA:{
-"^":"Tp:107;a,b",
-call$1:[function(a){return this.a.DX(this.b)},"call$1",null,2,0,null,108,[],"call"],
+"^":"Tp:112;a,b",
+call$1:[function(a){return this.a.DX(this.b)},"call$1",null,2,0,null,113,[],"call"],
$isEH:true},
vl:{
-"^":"Ay0;hP<,KL,bO,tj,Lv,k6",
+"^":"Ay;hP<,KL,bO,tj,Lv,k6",
goc:function(a){var z=this.KL
return z.goc(z)},
Qh:[function(a){var z,y,x
z=this.hP.gLv()
if(z==null){this.Lv=null
return}y=this.KL
-x=new H.GD(H.le(y.goc(y)))
+x=new H.GD(H.u1(y.goc(y)))
this.Lv=H.vn(z).rN(x).gAx()
y=J.RE(z)
-if(typeof z==="object"&&z!==null&&!!y.$isd3)this.tj=y.gUj(z).yI(new K.Li(this,a,x))},"call$1","gVj",2,0,null,270,[]],
-RR:[function(a,b){return b.co(this)},"call$1","gaH6",2,0,null,277,[]],
-$asAy0:function(){return[U.x9]},
+if(typeof z==="object"&&z!==null&&!!y.$isd3)this.tj=y.gUj(z).yI(new K.Li(this,a,x))},"call$1","gVj",2,0,null,265,[]],
+RR:[function(a,b){return b.co(this)},"call$1","gZC",2,0,null,272,[]],
+$asAy:function(){return[U.x9]},
$isx9:true,
$ishw:true},
Li:{
-"^":"Tp:107;a,b,c",
-call$1:[function(a){if(J.pb(a,new K.WK(this.c))===!0)this.a.DX(this.b)},"call$1",null,2,0,null,589,[],"call"],
+"^":"Tp:112;a,b,c",
+call$1:[function(a){if(J.pb(a,new K.WK(this.c))===!0)this.a.DX(this.b)},"call$1",null,2,0,null,563,[],"call"],
$isEH:true},
WK:{
-"^":"Tp:107;d",
+"^":"Tp:112;d",
call$1:[function(a){var z=J.x(a)
-return typeof a==="object"&&a!==null&&!!z.$isqI&&J.de(a.oc,this.d)},"call$1",null,2,0,null,283,[],"call"],
+return typeof a==="object"&&a!==null&&!!z.$isqI&&J.de(a.oc,this.d)},"call$1",null,2,0,null,278,[],"call"],
$isEH:true},
iT:{
-"^":"Ay0;hP<,Jn<,KL,bO,tj,Lv,k6",
+"^":"Ay;hP<,Jn<,KL,bO,tj,Lv,k6",
Qh:[function(a){var z,y,x
z=this.hP.gLv()
if(z==null){this.Lv=null
return}y=this.Jn.gLv()
x=J.U6(z)
this.Lv=x.t(z,y)
-if(typeof z==="object"&&z!==null&&!!x.$isd3)this.tj=x.gUj(z).yI(new K.ja(this,a,y))},"call$1","gVj",2,0,null,270,[]],
-RR:[function(a,b){return b.CU(this)},"call$1","gaH6",2,0,null,277,[]],
-$asAy0:function(){return[U.zX]},
+if(typeof z==="object"&&z!==null&&!!x.$isd3)this.tj=x.gUj(z).yI(new K.ja(this,a,y))},"call$1","gVj",2,0,null,265,[]],
+RR:[function(a,b){return b.CU(this)},"call$1","gZC",2,0,null,272,[]],
+$asAy:function(){return[U.zX]},
$iszX:true,
$ishw:true},
ja:{
-"^":"Tp:107;a,b,c",
-call$1:[function(a){if(J.pb(a,new K.zw(this.c))===!0)this.a.DX(this.b)},"call$1",null,2,0,null,589,[],"call"],
+"^":"Tp:112;a,b,c",
+call$1:[function(a){if(J.pb(a,new K.ey(this.c))===!0)this.a.DX(this.b)},"call$1",null,2,0,null,563,[],"call"],
$isEH:true},
-zw:{
-"^":"Tp:107;d",
+ey:{
+"^":"Tp:112;d",
call$1:[function(a){var z=J.x(a)
-return typeof a==="object"&&a!==null&&!!z.$isHA&&J.de(a.G3,this.d)},"call$1",null,2,0,null,283,[],"call"],
+return typeof a==="object"&&a!==null&&!!z.$isHA&&J.de(a.G3,this.d)},"call$1",null,2,0,null,278,[],"call"],
$isEH:true},
fa:{
-"^":"Ay0;hP<,re<,KL,bO,tj,Lv,k6",
+"^":"Ay;hP<,re<,KL,bO,tj,Lv,k6",
gbP:function(a){var z=this.KL
return z.gbP(z)},
Qh:[function(a){var z,y,x,w
@@ -22138,52 +21540,52 @@
if(x==null){this.Lv=null
return}z=this.KL
if(z.gbP(z)==null){z=J.x(x)
-this.Lv=K.ci(typeof x==="object"&&x!==null&&!!z.$iswL?x.lR.F2(x.ex,y,null).Ax:H.Ek(x,y,P.Te(null)))}else{w=new H.GD(H.le(z.gbP(z)))
+this.Lv=K.ci(typeof x==="object"&&x!==null&&!!z.$iswL?x.lR.F2(x.ex,y,null).Ax:H.Ek(x,y,P.Te(null)))}else{w=new H.GD(H.u1(z.gbP(z)))
this.Lv=H.vn(x).F2(w,y,null).Ax
z=J.RE(x)
-if(typeof x==="object"&&x!==null&&!!z.$isd3)this.tj=z.gUj(x).yI(new K.vQ(this,a,w))}},"call$1","gVj",2,0,null,270,[]],
-RR:[function(a,b){return b.ZR(this)},"call$1","gaH6",2,0,null,277,[]],
-$asAy0:function(){return[U.Jy]},
+if(typeof x==="object"&&x!==null&&!!z.$isd3)this.tj=z.gUj(x).yI(new K.vQ(this,a,w))}},"call$1","gVj",2,0,null,265,[]],
+RR:[function(a,b){return b.ZR(this)},"call$1","gZC",2,0,null,272,[]],
+$asAy:function(){return[U.Jy]},
$isJy:true,
$ishw:true},
WW:{
-"^":"Tp:107;",
-call$1:[function(a){return a.gLv()},"call$1",null,2,0,null,128,[],"call"],
+"^":"Tp:112;",
+call$1:[function(a){return a.gLv()},"call$1",null,2,0,null,131,[],"call"],
$isEH:true},
vQ:{
-"^":"Tp:574;a,b,c",
-call$1:[function(a){if(J.pb(a,new K.a9(this.c))===!0)this.a.DX(this.b)},"call$1",null,2,0,null,589,[],"call"],
+"^":"Tp:548;a,b,c",
+call$1:[function(a){if(J.pb(a,new K.a9(this.c))===!0)this.a.DX(this.b)},"call$1",null,2,0,null,563,[],"call"],
$isEH:true},
a9:{
-"^":"Tp:107;d",
+"^":"Tp:112;d",
call$1:[function(a){var z=J.x(a)
-return typeof a==="object"&&a!==null&&!!z.$isqI&&J.de(a.oc,this.d)},"call$1",null,2,0,null,283,[],"call"],
+return typeof a==="object"&&a!==null&&!!z.$isqI&&J.de(a.oc,this.d)},"call$1",null,2,0,null,278,[],"call"],
$isEH:true},
VA:{
-"^":"Ay0;Bb<,T8<,KL,bO,tj,Lv,k6",
+"^":"Ay;Bb<,T8<,KL,bO,tj,Lv,k6",
Qh:[function(a){var z,y,x,w
z=this.Bb
y=this.T8.gLv()
x=J.x(y)
-if((typeof y!=="object"||y===null||y.constructor!==Array&&!x.$iscX)&&y!=null)throw H.b(K.kG("right side of 'in' is not an iterator"))
+if((typeof y!=="object"||y===null||y.constructor!==Array&&!x.$isQV)&&y!=null)throw H.b(K.kG("right side of 'in' is not an iterator"))
if(typeof y==="object"&&y!==null&&!!x.$iswn)this.tj=y.gvp().yI(new K.J1(this,a))
x=J.Vm(z)
w=y!=null?y:C.xD
-this.Lv=new K.fk(x,w)},"call$1","gVj",2,0,null,270,[]],
-RR:[function(a,b){return b.ky(this)},"call$1","gaH6",2,0,null,277,[]],
-$asAy0:function(){return[U.K9]},
+this.Lv=new K.fk(x,w)},"call$1","gVj",2,0,null,265,[]],
+RR:[function(a,b){return b.ky(this)},"call$1","gZC",2,0,null,272,[]],
+$asAy:function(){return[U.K9]},
$isK9:true,
$ishw:true},
J1:{
-"^":"Tp:107;a,b",
-call$1:[function(a){return this.a.DX(this.b)},"call$1",null,2,0,null,108,[],"call"],
+"^":"Tp:112;a,b",
+call$1:[function(a){return this.a.DX(this.b)},"call$1",null,2,0,null,113,[],"call"],
$isEH:true},
fk:{
"^":"a;kF,bm",
$isfk:true},
wL:{
-"^":"a:107;lR,ex",
-call$1:[function(a){return this.lR.F2(this.ex,[a],null).Ax},"call$1","gQl",2,0,null,599,[]],
+"^":"a:112;lR,ex",
+call$1:[function(a){return this.lR.F2(this.ex,[a],null).Ax},"call$1","gKu",2,0,null,573,[]],
$iswL:true,
$isEH:true},
B0:{
@@ -22192,70 +21594,65 @@
$isB0:true,
static:{kG:function(a){return new K.B0(a)}}}}],["polymer_expressions.expression","package:polymer_expressions/expression.dart",,U,{
"^":"",
-Pu:[function(a,b){var z,y,x
-z=J.x(a)
-if(z.n(a,b))return!0
+Pu:[function(a,b){var z,y
+if(a==null?b==null:a===b)return!0
if(a==null||b==null)return!1
-if(!J.de(z.gB(a),b.length))return!1
-y=0
-while(!0){x=z.gB(a)
-if(typeof x!=="number")return H.s(x)
-if(!(y<x))break
-x=z.t(a,y)
-if(y>=b.length)return H.e(b,y)
-if(!J.de(x,b[y]))return!1;++y}return!0},"call$2","OE",4,0,null,128,[],188,[]],
+if(a.length!==b.length)return!1
+for(z=0;z<a.length;++z){y=a[z]
+if(z>=b.length)return H.e(b,z)
+if(!J.de(y,b[z]))return!1}return!0},"call$2","OE",4,0,null,131,[],187,[]],
au:[function(a){a.toString
-return U.Up(H.n3(a,0,new U.xs()))},"call$1","bT",2,0,null,279,[]],
+return U.Up(H.n3(a,0,new U.xs()))},"call$1","bT",2,0,null,274,[]],
Zm:[function(a,b){var z=J.WB(a,b)
if(typeof z!=="number")return H.s(z)
a=536870911&z
a=536870911&a+((524287&a)<<10>>>0)
-return a^a>>>6},"call$2","uN",4,0,null,280,[],23,[]],
+return a^a>>>6},"call$2","uN",4,0,null,275,[],28,[]],
Up:[function(a){if(typeof a!=="number")return H.s(a)
a=536870911&a+((67108863&a)<<3>>>0)
a=(a^a>>>11)>>>0
-return 536870911&a+((16383&a)<<15>>>0)},"call$1","Hj",2,0,null,280,[]],
+return 536870911&a+((16383&a)<<15>>>0)},"call$1","fM",2,0,null,275,[]],
tc:{
"^":"a;",
-Bf:[function(a,b,c){return new U.zX(b,c)},"call$2","gvH",4,0,600,18,[],128,[]],
-F2:[function(a,b,c){return new U.Jy(a,b,c)},"call$3","gb2",6,0,null,18,[],191,[],128,[]]},
+Bf:[function(a,b,c){return new U.zX(b,c)},"call$2","gvH",4,0,574,19,[],131,[]],
+F2:[function(a,b,c){return new U.Jy(a,b,c)},"call$3","gb2",6,0,null,19,[],190,[],131,[]]},
hw:{
"^":"a;",
$ishw:true},
EZ:{
"^":"hw;",
-RR:[function(a,b){return b.W9(this)},"call$1","gaH6",2,0,null,277,[]],
+RR:[function(a,b){return b.W9(this)},"call$1","gZC",2,0,null,272,[]],
$isEZ:true},
no:{
"^":"hw;P>",
r6:function(a,b){return this.P.call$1(b)},
-RR:[function(a,b){return b.ti(this)},"call$1","gaH6",2,0,null,277,[]],
+RR:[function(a,b){return b.ti(this)},"call$1","gZC",2,0,null,272,[]],
bu:[function(a){var z=this.P
return typeof z==="string"?"\""+H.d(z)+"\"":H.d(z)},"call$0","gXo",0,0,null],
n:[function(a,b){var z
if(b==null)return!1
z=H.RB(b,"$isno",[H.Kp(this,0)],"$asno")
-return z&&J.de(J.Vm(b),this.P)},"call$1","gUJ",2,0,null,91,[]],
+return z&&J.de(J.Vm(b),this.P)},"call$1","gUJ",2,0,null,96,[]],
giO:function(a){return J.v1(this.P)},
$isno:true},
kB:{
"^":"hw;Pu>",
-RR:[function(a,b){return b.o0(this)},"call$1","gaH6",2,0,null,277,[]],
+RR:[function(a,b){return b.o0(this)},"call$1","gZC",2,0,null,272,[]],
bu:[function(a){return"{"+H.d(this.Pu)+"}"},"call$0","gXo",0,0,null],
n:[function(a,b){var z
if(b==null)return!1
z=J.RE(b)
-return typeof b==="object"&&b!==null&&!!z.$iskB&&U.Pu(z.gPu(b),this.Pu)},"call$1","gUJ",2,0,null,91,[]],
+return typeof b==="object"&&b!==null&&!!z.$iskB&&U.Pu(z.gPu(b),this.Pu)},"call$1","gUJ",2,0,null,96,[]],
giO:function(a){return U.au(this.Pu)},
$iskB:true},
ae:{
"^":"hw;G3>,v4<",
-RR:[function(a,b){return b.YV(this)},"call$1","gaH6",2,0,null,277,[]],
+RR:[function(a,b){return b.YV(this)},"call$1","gZC",2,0,null,272,[]],
bu:[function(a){return H.d(this.G3)+": "+H.d(this.v4)},"call$0","gXo",0,0,null],
n:[function(a,b){var z
if(b==null)return!1
z=J.RE(b)
-return typeof b==="object"&&b!==null&&!!z.$isae&&J.de(z.gG3(b),this.G3)&&J.de(b.gv4(),this.v4)},"call$1","gUJ",2,0,null,91,[]],
+return typeof b==="object"&&b!==null&&!!z.$isae&&J.de(z.gG3(b),this.G3)&&J.de(b.gv4(),this.v4)},"call$1","gUJ",2,0,null,96,[]],
giO:function(a){var z,y
z=J.v1(this.G3.P)
y=J.v1(this.v4)
@@ -22263,33 +21660,33 @@
$isae:true},
XC:{
"^":"hw;wz",
-RR:[function(a,b){return b.LT(this)},"call$1","gaH6",2,0,null,277,[]],
+RR:[function(a,b){return b.LT(this)},"call$1","gZC",2,0,null,272,[]],
bu:[function(a){return"("+H.d(this.wz)+")"},"call$0","gXo",0,0,null],
n:[function(a,b){var z
if(b==null)return!1
z=J.x(b)
-return typeof b==="object"&&b!==null&&!!z.$isXC&&J.de(b.wz,this.wz)},"call$1","gUJ",2,0,null,91,[]],
+return typeof b==="object"&&b!==null&&!!z.$isXC&&J.de(b.wz,this.wz)},"call$1","gUJ",2,0,null,96,[]],
giO:function(a){return J.v1(this.wz)},
$isXC:true},
w6:{
"^":"hw;P>",
r6:function(a,b){return this.P.call$1(b)},
-RR:[function(a,b){return b.qv(this)},"call$1","gaH6",2,0,null,277,[]],
+RR:[function(a,b){return b.qv(this)},"call$1","gZC",2,0,null,272,[]],
bu:[function(a){return this.P},"call$0","gXo",0,0,null],
n:[function(a,b){var z
if(b==null)return!1
z=J.RE(b)
-return typeof b==="object"&&b!==null&&!!z.$isw6&&J.de(z.gP(b),this.P)},"call$1","gUJ",2,0,null,91,[]],
+return typeof b==="object"&&b!==null&&!!z.$isw6&&J.de(z.gP(b),this.P)},"call$1","gUJ",2,0,null,96,[]],
giO:function(a){return J.v1(this.P)},
$isw6:true},
jK:{
"^":"hw;kp>,wz<",
-RR:[function(a,b){return b.Hx(this)},"call$1","gaH6",2,0,null,277,[]],
+RR:[function(a,b){return b.Hx(this)},"call$1","gZC",2,0,null,272,[]],
bu:[function(a){return H.d(this.kp)+" "+H.d(this.wz)},"call$0","gXo",0,0,null],
n:[function(a,b){var z
if(b==null)return!1
z=J.RE(b)
-return typeof b==="object"&&b!==null&&!!z.$isjK&&J.de(z.gkp(b),this.kp)&&J.de(b.gwz(),this.wz)},"call$1","gUJ",2,0,null,91,[]],
+return typeof b==="object"&&b!==null&&!!z.$isjK&&J.de(z.gkp(b),this.kp)&&J.de(b.gwz(),this.wz)},"call$1","gUJ",2,0,null,96,[]],
giO:function(a){var z,y
z=J.v1(this.kp)
y=J.v1(this.wz)
@@ -22297,12 +21694,12 @@
$isjK:true},
uk:{
"^":"hw;kp>,Bb<,T8<",
-RR:[function(a,b){return b.im(this)},"call$1","gaH6",2,0,null,277,[]],
+RR:[function(a,b){return b.im(this)},"call$1","gZC",2,0,null,272,[]],
bu:[function(a){return"("+H.d(this.Bb)+" "+H.d(this.kp)+" "+H.d(this.T8)+")"},"call$0","gXo",0,0,null],
n:[function(a,b){var z
if(b==null)return!1
z=J.RE(b)
-return typeof b==="object"&&b!==null&&!!z.$isuk&&J.de(z.gkp(b),this.kp)&&J.de(b.gBb(),this.Bb)&&J.de(b.gT8(),this.T8)},"call$1","gUJ",2,0,null,91,[]],
+return typeof b==="object"&&b!==null&&!!z.$isuk&&J.de(z.gkp(b),this.kp)&&J.de(b.gBb(),this.Bb)&&J.de(b.gT8(),this.T8)},"call$1","gUJ",2,0,null,96,[]],
giO:function(a){var z,y,x
z=J.v1(this.kp)
y=J.v1(this.Bb)
@@ -22311,12 +21708,12 @@
$isuk:true},
K9:{
"^":"hw;Bb<,T8<",
-RR:[function(a,b){return b.ky(this)},"call$1","gaH6",2,0,null,277,[]],
+RR:[function(a,b){return b.ky(this)},"call$1","gZC",2,0,null,272,[]],
bu:[function(a){return"("+H.d(this.Bb)+" in "+H.d(this.T8)+")"},"call$0","gXo",0,0,null],
n:[function(a,b){var z
if(b==null)return!1
z=J.x(b)
-return typeof b==="object"&&b!==null&&!!z.$isK9&&J.de(b.gBb(),this.Bb)&&J.de(b.gT8(),this.T8)},"call$1","gUJ",2,0,null,91,[]],
+return typeof b==="object"&&b!==null&&!!z.$isK9&&J.de(b.gBb(),this.Bb)&&J.de(b.gT8(),this.T8)},"call$1","gUJ",2,0,null,96,[]],
giO:function(a){var z,y
z=this.Bb
z=z.giO(z)
@@ -22325,12 +21722,12 @@
$isK9:true},
zX:{
"^":"hw;hP<,Jn<",
-RR:[function(a,b){return b.CU(this)},"call$1","gaH6",2,0,null,277,[]],
+RR:[function(a,b){return b.CU(this)},"call$1","gZC",2,0,null,272,[]],
bu:[function(a){return H.d(this.hP)+"["+H.d(this.Jn)+"]"},"call$0","gXo",0,0,null],
n:[function(a,b){var z
if(b==null)return!1
z=J.x(b)
-return typeof b==="object"&&b!==null&&!!z.$iszX&&J.de(b.ghP(),this.hP)&&J.de(b.gJn(),this.Jn)},"call$1","gUJ",2,0,null,91,[]],
+return typeof b==="object"&&b!==null&&!!z.$iszX&&J.de(b.ghP(),this.hP)&&J.de(b.gJn(),this.Jn)},"call$1","gUJ",2,0,null,96,[]],
giO:function(a){var z,y
z=J.v1(this.hP)
y=J.v1(this.Jn)
@@ -22338,12 +21735,12 @@
$iszX:true},
x9:{
"^":"hw;hP<,oc>",
-RR:[function(a,b){return b.co(this)},"call$1","gaH6",2,0,null,277,[]],
+RR:[function(a,b){return b.co(this)},"call$1","gZC",2,0,null,272,[]],
bu:[function(a){return H.d(this.hP)+"."+H.d(this.oc)},"call$0","gXo",0,0,null],
n:[function(a,b){var z
if(b==null)return!1
z=J.RE(b)
-return typeof b==="object"&&b!==null&&!!z.$isx9&&J.de(b.ghP(),this.hP)&&J.de(z.goc(b),this.oc)},"call$1","gUJ",2,0,null,91,[]],
+return typeof b==="object"&&b!==null&&!!z.$isx9&&J.de(b.ghP(),this.hP)&&J.de(z.goc(b),this.oc)},"call$1","gUJ",2,0,null,96,[]],
giO:function(a){var z,y
z=J.v1(this.hP)
y=J.v1(this.oc)
@@ -22351,12 +21748,12 @@
$isx9:true},
Jy:{
"^":"hw;hP<,bP>,re<",
-RR:[function(a,b){return b.ZR(this)},"call$1","gaH6",2,0,null,277,[]],
+RR:[function(a,b){return b.ZR(this)},"call$1","gZC",2,0,null,272,[]],
bu:[function(a){return H.d(this.hP)+"."+H.d(this.bP)+"("+H.d(this.re)+")"},"call$0","gXo",0,0,null],
n:[function(a,b){var z
if(b==null)return!1
z=J.RE(b)
-return typeof b==="object"&&b!==null&&!!z.$isJy&&J.de(b.ghP(),this.hP)&&J.de(z.gbP(b),this.bP)&&U.Pu(b.gre(),this.re)},"call$1","gUJ",2,0,null,91,[]],
+return typeof b==="object"&&b!==null&&!!z.$isJy&&J.de(b.ghP(),this.hP)&&J.de(z.gbP(b),this.bP)&&U.Pu(b.gre(),this.re)},"call$1","gUJ",2,0,null,96,[]],
giO:function(a){var z,y,x
z=J.v1(this.hP)
y=J.v1(this.bP)
@@ -22364,8 +21761,8 @@
return U.Up(U.Zm(U.Zm(U.Zm(0,z),y),x))},
$isJy:true},
xs:{
-"^":"Tp:346;",
-call$2:[function(a,b){return U.Zm(a,J.v1(b))},"call$2",null,4,0,null,601,[],602,[],"call"],
+"^":"Tp:348;",
+call$2:[function(a,b){return U.Zm(a,J.v1(b))},"call$2",null,4,0,null,575,[],576,[],"call"],
$isEH:true}}],["polymer_expressions.parser","package:polymer_expressions/parser.dart",,T,{
"^":"",
FX:{
@@ -22373,8 +21770,8 @@
XJ:[function(a,b){var z
if(!(a!=null&&!J.de(J.Iz(this.fL.lo),a)))z=b!=null&&!J.de(J.Vm(this.fL.lo),b)
else z=!0
-if(z)throw H.b(Y.RV("Expected "+b+": "+H.d(this.fL.lo)))
-this.fL.G()},function(){return this.XJ(null,null)},"w5","call$2",null,"gXO",0,4,null,77,77,603,[],23,[]],
+if(z)throw H.b(Y.RV("Expected "+H.d(b)+": "+H.d(this.fL.lo)))
+this.fL.G()},function(){return this.XJ(null,null)},"w5","call$2",null,"gnp",0,4,null,82,82,577,[],28,[]],
o9:[function(){if(this.fL.lo==null){this.Sk.toString
return C.OL}var z=this.Dl()
return z==null?null:this.BH(z,0)},"call$0","gKx",0,0,null],
@@ -22392,7 +21789,7 @@
z.toString
a=new U.K9(a,v)}else if(J.de(J.Iz(this.fL.lo),8)&&J.J5(this.fL.lo.gG8(),b))a=this.Tw(a)
else break
-return a},"call$2","gHr",4,0,null,131,[],604,[]],
+return a},"call$2","gTv",4,0,null,134,[],578,[]],
qL:[function(a,b){var z,y
if(typeof b==="object"&&b!==null&&!!b.$isw6){z=b.gP(b)
this.Sk.toString
@@ -22403,7 +21800,7 @@
if(z){z=J.Vm(b.ghP())
y=b.gre()
this.Sk.toString
-return new U.Jy(a,z,y)}else throw H.b(Y.RV("expected identifier: "+H.d(b)))}},"call$2","gE5",4,0,null,131,[],132,[]],
+return new U.Jy(a,z,y)}else throw H.b(Y.RV("expected identifier: "+H.d(b)))}},"call$2","gE5",4,0,null,134,[],135,[]],
Tw:[function(a){var z,y,x
z=this.fL.lo
this.w5()
@@ -22414,7 +21811,7 @@
if(!x)break
y=this.BH(y,this.fL.lo.gG8())}x=J.Vm(z)
this.Sk.toString
-return new U.uk(x,a,y)},"call$1","gvB",2,0,null,131,[]],
+return new U.uk(x,a,y)},"call$1","gvB",2,0,null,134,[]],
Dl:[function(){var z,y,x,w
if(J.de(J.Iz(this.fL.lo),8)){z=J.Vm(this.fL.lo)
y=J.x(z)
@@ -22504,34 +21901,34 @@
this.Sk.toString
y=H.VM(new U.no(z),[null])
this.w5()
-return y},"call$0","gJ1",0,0,null],
-pT0:[function(a){var z,y
+return y},"call$0","gJA",0,0,null],
+pT:[function(a){var z,y
z=H.BU(H.d(a)+H.d(J.Vm(this.fL.lo)),null,null)
this.Sk.toString
y=H.VM(new U.no(z),[null])
this.w5()
-return y},function(){return this.pT0("")},"Ud","call$1",null,"gwo",0,2,null,333,605,[]],
-Fj:[function(a){var z,y
+return y},function(){return this.pT("")},"Ud","call$1",null,"gwo",0,2,null,330,579,[]],
+yj:[function(a){var z,y
z=H.IH(H.d(a)+H.d(J.Vm(this.fL.lo)),null)
this.Sk.toString
y=H.VM(new U.no(z),[null])
this.w5()
-return y},function(){return this.Fj("")},"tw","call$1",null,"gSE",0,2,null,333,605,[]]}}],["polymer_expressions.src.globals","package:polymer_expressions/src/globals.dart",,K,{
+return y},function(){return this.yj("")},"tw","call$1",null,"gSE",0,2,null,330,579,[]]}}],["polymer_expressions.src.globals","package:polymer_expressions/src/globals.dart",,K,{
"^":"",
-Dc:[function(a){return H.VM(new K.Bt(a),[null])},"call$1","UM",2,0,281,114,[]],
+Dc:[function(a){return H.VM(new K.Bt(a),[null])},"call$1","UM",2,0,276,116,[]],
Ae:{
-"^":"a;vH>-386,P>-606",
+"^":"a;vH>-369,P>-580",
r6:function(a,b){return this.P.call$1(b)},
n:[function(a,b){var z
if(b==null)return!1
z=J.x(b)
-return typeof b==="object"&&b!==null&&!!z.$isAe&&J.de(b.vH,this.vH)&&J.de(b.P,this.P)},"call$1","gUJ",2,0,107,91,[],"=="],
-giO:[function(a){return J.v1(this.P)},null,null,1,0,371,"hashCode"],
-bu:[function(a){return"("+H.d(this.vH)+", "+H.d(this.P)+")"},"call$0","gXo",0,0,370,"toString"],
+return typeof b==="object"&&b!==null&&!!z.$isAe&&J.de(b.vH,this.vH)&&J.de(b.P,this.P)},"call$1","gUJ",2,0,112,96,[],"=="],
+giO:[function(a){return J.v1(this.P)},null,null,1,0,512,"hashCode"],
+bu:[function(a){return"("+H.d(this.vH)+", "+H.d(this.P)+")"},"call$0","gXo",0,0,365,"toString"],
$isAe:true,
-"@":function(){return[C.nJ]},
+"@":function(){return[C.Nw]},
"<>":[3],
-static:{iz:[function(a,b,c){return H.VM(new K.Ae(a,b),[c])},null,null,4,0,function(){return H.IG(function(a){return{func:"ep",args:[J.im,a]}},this.$receiver,"Ae")},47,[],23,[],"new IndexedValue"]}},
+static:{i0:[function(a,b,c){return H.VM(new K.Ae(a,b),[c])},null,null,4,0,function(){return H.IG(function(a){return{func:"ep",args:[J.im,a]}},this.$receiver,"Ae")},52,[],28,[],"new IndexedValue"]}},
"+IndexedValue":[0],
Bt:{
"^":"mW;YR",
@@ -22548,9 +21945,9 @@
return z},
Zv:[function(a,b){var z=new K.Ae(b,J.i4(this.YR,b))
z.$builtinTypeInfo=this.$builtinTypeInfo
-return z},"call$1","goY",2,0,null,47,[]],
+return z},"call$1","goY",2,0,null,52,[]],
$asmW:function(a){return[[K.Ae,a]]},
-$ascX:function(a){return[[K.Ae,a]]}},
+$asQV:function(a){return[[K.Ae,a]]}},
vR:{
"^":"AC;WS,wX,CD",
gl:function(){return this.CD},
@@ -22568,14 +21965,14 @@
z=a.gAY()
if(z!=null&&!J.de(z.gUx(),C.PU)){y=Z.y1(a.gAY(),b)
if(y!=null)return y}for(x=J.GP(a.gkZ());x.G();){y=Z.y1(x.lo,b)
-if(y!=null)return y}return},"call$2","tm",4,0,null,282,[],12,[]]}],["polymer_expressions.tokenizer","package:polymer_expressions/tokenizer.dart",,Y,{
+if(y!=null)return y}return},"call$2","Nb",4,0,null,277,[],12,[]]}],["polymer_expressions.tokenizer","package:polymer_expressions/tokenizer.dart",,Y,{
"^":"",
-aK:[function(a){switch(a){case 102:return 12
+wX:[function(a){switch(a){case 102:return 12
case 110:return 10
case 114:return 13
case 116:return 9
case 118:return 11
-default:return a}},"call$1","aN",2,0,null,283,[]],
+default:return a}},"call$1","uO",2,0,null,278,[]],
Pn:{
"^":"a;fY>,P>,G8<",
r6:function(a,b){return this.P.call$1(b)},
@@ -22620,14 +22017,14 @@
if(x===92){x=y.G()?y.Wn:null
this.VQ=x
if(x==null)throw H.b(Y.RV("unterminated string"))
-v=P.O8(1,Y.aK(x),J.im)
+v=P.O8(1,Y.wX(x),J.im)
x=H.eT(v)
w.vM=w.vM+x}else{v=P.O8(1,x,J.im)
x=H.eT(v)
w.vM=w.vM+x}x=y.G()?y.Wn:null
this.VQ=x}this.MV.push(new Y.Pn(1,w.vM,0))
w.vM=""
-this.VQ=y.G()?y.Wn:null},"call$0","gxs",0,0,null],
+this.VQ=y.G()?y.Wn:null},"call$0","gPJ",0,0,null],
zI:[function(){var z,y,x,w,v,u
z=this.jI
y=this.zy
@@ -22681,43 +22078,43 @@
"^":"",
fr:{
"^":"a;",
-DV:[function(a){return J.UK(a,this)},"call$1","gnG",2,0,607,86,[]]},
-cfS:{
+DV:[function(a){return J.UK(a,this)},"call$1","gnG",2,0,581,91,[]]},
+d2:{
"^":"fr;",
-W9:[function(a){return this.xn(a)},"call$1","glO",2,0,null,18,[]],
+W9:[function(a){return this.xn(a)},"call$1","glO",2,0,null,19,[]],
LT:[function(a){a.wz.RR(0,this)
-this.xn(a)},"call$1","gff",2,0,null,18,[]],
+this.xn(a)},"call$1","gff",2,0,null,19,[]],
co:[function(a){J.UK(a.ghP(),this)
-this.xn(a)},"call$1","gEW",2,0,null,441,[]],
+this.xn(a)},"call$1","gEW",2,0,null,409,[]],
CU:[function(a){J.UK(a.ghP(),this)
J.UK(a.gJn(),this)
-this.xn(a)},"call$1","gA2",2,0,null,441,[]],
+this.xn(a)},"call$1","gA2",2,0,null,409,[]],
ZR:[function(a){var z
J.UK(a.ghP(),this)
z=a.gre()
if(z!=null)for(z=H.VM(new H.a7(z,z.length,0,null),[H.Kp(z,0)]);z.G();)J.UK(z.lo,this)
-this.xn(a)},"call$1","gES",2,0,null,441,[]],
-ti:[function(a){return this.xn(a)},"call$1","gXj",2,0,null,279,[]],
+this.xn(a)},"call$1","gES",2,0,null,409,[]],
+ti:[function(a){return this.xn(a)},"call$1","gHb",2,0,null,274,[]],
o0:[function(a){var z
for(z=a.gPu(a),z=H.VM(new H.a7(z,z.length,0,null),[H.Kp(z,0)]);z.G();)J.UK(z.lo,this)
-this.xn(a)},"call$1","gX7",2,0,null,279,[]],
+this.xn(a)},"call$1","gmd",2,0,null,274,[]],
YV:[function(a){J.UK(a.gG3(a),this)
J.UK(a.gv4(),this)
-this.xn(a)},"call$1","ghH",2,0,null,18,[]],
-qv:[function(a){return this.xn(a)},"call$1","gFs",2,0,null,441,[]],
+this.xn(a)},"call$1","ghH",2,0,null,19,[]],
+qv:[function(a){return this.xn(a)},"call$1","gFs",2,0,null,409,[]],
im:[function(a){J.UK(a.gBb(),this)
J.UK(a.gT8(),this)
-this.xn(a)},"call$1","glf",2,0,null,91,[]],
+this.xn(a)},"call$1","glf",2,0,null,96,[]],
Hx:[function(a){J.UK(a.gwz(),this)
-this.xn(a)},"call$1","ghe",2,0,null,91,[]],
+this.xn(a)},"call$1","ghe",2,0,null,96,[]],
ky:[function(a){J.UK(a.gBb(),this)
J.UK(a.gT8(),this)
-this.xn(a)},"call$1","gXf",2,0,null,283,[]]}}],["response_viewer_element","package:observatory/src/elements/response_viewer.dart",,Q,{
+this.xn(a)},"call$1","gU6",2,0,null,278,[]]}}],["response_viewer_element","package:observatory/src/elements/response_viewer.dart",,Q,{
"^":"",
JG:{
-"^":["V0;kW%-550,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0-412",null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
-guw:[function(a){return a.kW},null,null,1,0,408,"app",355,397],
-suw:[function(a,b){a.kW=this.ct(a,C.wh,a.kW,b)},null,null,3,0,551,23,[],"app",355],
+"^":["V20;kW%-532,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0-375",null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.Nw]}],
+guw:[function(a){return a.kW},null,null,1,0,533,"app",358,377],
+suw:[function(a,b){a.kW=this.ct(a,C.wh,a.kW,b)},null,null,3,0,534,28,[],"app",358],
"@":function(){return[C.Is]},
static:{Zo:[function(a){var z,y,x,w
z=$.Nd()
@@ -22730,33 +22127,29 @@
a.X0=w
C.Cc.ZL(a)
C.Cc.G6(a)
-return a},null,null,0,0,113,"new ResponseViewerElement$created"]}},
-"+ResponseViewerElement":[608],
-V0:{
+return a},null,null,0,0,115,"new ResponseViewerElement$created"]}},
+"+ResponseViewerElement":[582],
+V20:{
"^":"uL+Pi;",
$isd3:true}}],["script_ref_element","package:observatory/src/elements/script_ref.dart",,A,{
"^":"",
knI:{
-"^":["T5;zw%-386,AP,fn,tY-410,Pe-417,AP,fn,pC-411,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0-412",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
-gRd:[function(a){return a.zw},null,null,1,0,371,"line",355,397],
-sRd:[function(a,b){a.zw=this.ct(a,C.Cv,a.zw,b)},null,null,3,0,372,23,[],"line",355],
-grp:[function(a){if(J.u6(a.zw,0))return Q.xI.prototype.grp.call(this,a)
-return H.d(Q.xI.prototype.grp.call(this,a))+"?line="+H.d(a.zw)},null,null,1,0,370,"objectId"],
-gJp:[function(a){var z,y
-if(a.tY==null)return""
+"^":["T5;zw%-369,AP,Lk,tY-381,Pe-382,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0-375",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.Nw]}],
+gRd:[function(a){return a.zw},null,null,1,0,512,"line",358,377],
+sRd:[function(a,b){a.zw=this.ct(a,C.Cv,a.zw,b)},null,null,3,0,411,28,[],"line",358],
+gD5:[function(a){var z,y
+if(a.tY==null)return Q.xI.prototype.gD5.call(this,a)
z=J.u6(a.zw,0)
y=a.tY
-if(z)return J.UQ(y,"user_name")
-else return H.d(J.UQ(y,"user_name"))+":"+H.d(a.zw)},null,null,1,0,370,"hoverText"],
-goc:[function(a){var z,y,x
-z=a.tY
-if(z==null)return""
-y=J.UQ(z,"user_name")
-z=J.U6(y)
-x=z.yn(y,J.WB(z.cn(y,"/"),1))
-if(J.u6(a.zw,0))return x
-else return x+":"+H.d(a.zw)},null,null,1,0,370,"name"],
-"@":function(){return[C.h9]},
+if(z)return y.gzz()
+else return H.d(y.gzz())+":"+H.d(a.zw)},null,null,1,0,365,"hoverText"],
+goc:[function(a){var z,y
+if(a.tY==null)return Q.xI.prototype.goc.call(this,a)
+z=J.u6(a.zw,0)
+y=a.tY
+if(z)return J.O6(y)
+else return H.d(J.O6(y))+":"+H.d(a.zw)},null,null,1,0,365,"name"],
+"@":function(){return[C.Ur]},
static:{Th:[function(a){var z,y,x,w
z=$.Nd()
y=P.Py(null,null,null,J.O,W.I0)
@@ -22770,22 +22163,820 @@
a.X0=w
C.c0.ZL(a)
C.c0.G6(a)
-return a},null,null,0,0,113,"new ScriptRefElement$created"]}},
-"+ScriptRefElement":[609],
+return a},null,null,0,0,115,"new ScriptRefElement$created"]}},
+"+ScriptRefElement":[583],
T5:{
"^":"xI+Pi;",
$isd3:true}}],["script_view_element","package:observatory/src/elements/script_view.dart",,U,{
"^":"",
fI:{
-"^":["oaa;Uz%-610,AP,fn,pC-411,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0-412",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
-gNl:[function(a){return a.Uz},null,null,1,0,611,"script",355,397],
-sNl:[function(a,b){a.Uz=this.ct(a,C.fX,a.Uz,b)},null,null,3,0,612,23,[],"script",355],
-PQ:[function(a,b){if(J.de(b.gu9(),-1))return"min-width:32px;"
-else if(J.de(b.gu9(),0))return"min-width:32px;background-color:red"
-return"min-width:32px;background-color:green"},"call$1","gXa",2,0,613,181,[],"hitsStyle"],
-wH:[function(a,b,c,d){a.pC.oX("coverage").ml(new U.qq(a)).OA(new U.FC())},"call$3","gWp",6,0,425,18,[],306,[],74,[],"refreshCoverage"],
+"^":["V21;Uz%-584,HJ%-382,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0-375",null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.Nw]}],
+gNl:[function(a){return a.Uz},null,null,1,0,585,"script",358,377],
+sNl:[function(a,b){a.Uz=this.ct(a,C.fX,a.Uz,b)},null,null,3,0,586,28,[],"script",358],
+gnN:[function(a){return a.HJ},null,null,1,0,390,"showCoverage",358,377],
+snN:[function(a,b){a.HJ=this.ct(a,C.V0,a.HJ,b)},null,null,3,0,391,28,[],"showCoverage",358],
+i4:[function(a){var z
+Z.uL.prototype.i4.call(this,a)
+z=a.Uz
+if(z==null)return
+J.SK(z)},"call$0","gQd",0,0,114,"enteredView"],
+da:[function(a){this.ct(a,C.YH,0,1)},"call$0","gze",0,0,114,"_triggerHitRefresh"],
+ib:[function(a,b){this.ct(a,C.YH,0,1)},"call$1","gKg",2,0,112,229,[],"showCoverageChanged"],
+PQ:[function(a,b){var z,y
+z=a.Uz
+if(z==null||a.HJ!==!0)return"min-width:32px;"
+y=J.UQ(z.gu9(),J.f2(b))
+if(y==null)return"min-width:32px;"
+if(J.de(y,0))return"min-width:32px;background-color:red"
+return"min-width:32px;background-color:green"},"call$1","gXa",2,0,587,180,[],"hitsStyle",359],
+yv:[function(a,b){J.am(a.Uz).YM(b)},"call$1","gvC",2,0,157,379,[],"refresh"],
+j9:[function(a,b){J.y9(J.QP(a.Uz)).ml(new U.qq(a,b))},"call$1","gWp",2,0,157,379,[],"refreshCoverage"],
"@":function(){return[C.I3]},
-static:{Ry:[function(a){var z,y,x,w
+static:{"^":"he<-82,iJN<-82,oM<-82",Ry:[function(a){var z,y,x,w
+z=$.Nd()
+y=P.Py(null,null,null,J.O,W.I0)
+x=J.O
+w=W.cv
+w=H.VM(new V.qC(P.Py(null,null,null,x,w),null,null),[x,w])
+a.HJ=!1
+a.SO=z
+a.B7=y
+a.X0=w
+C.cJ.ZL(a)
+C.cJ.G6(a)
+return a},null,null,0,0,115,"new ScriptViewElement$created"]}},
+"+ScriptViewElement":[588],
+V21:{
+"^":"uL+Pi;",
+$isd3:true},
+qq:{
+"^":"Tp:112;a-82,b-82",
+call$1:[function(a){J.Q5(this.a,C.YH,0,1)
+this.b.call$0()},"call$1",null,2,0,112,113,[],"call"],
+$isEH:true},
+"+ qq":[489]}],["service","package:observatory/service.dart",,D,{
+"^":"",
+Er:[function(a){var z
+if(a!=null){z=J.U6(a)
+z=z.t(a,"id")!=null&&z.t(a,"type")!=null}else z=!1
+return z},"call$1","XI",2,0,null,190,[]],
+Io:[function(a){var z=J.rY(a)
+if(!z.nC(a,"@"))return a
+return z.yn(a,1)},"call$1","GK",2,0,null,11,[]],
+Ch:[function(a,b,c){var z=J.x(a)
+if(typeof a==="object"&&a!==null&&!!z.$isqC)D.Gf(a,b,c)
+else if(typeof a==="object"&&a!==null&&!!z.$iswn)D.f3(a,b,c)},"call$3","H3",6,0,null,281,[],282,[],14,[]],
+Gf:[function(a,b,c){a.aN(0,new D.UZ(a,b,c))},"call$3","Xb",6,0,null,151,[],282,[],14,[]],
+f3:[function(a,b,c){var z,y,x,w,v
+for(z=a.h3,y=0;y<z.length;++y){x=z[y]
+w=J.U6(x)
+v=typeof x==="object"&&x!==null&&!!w.$isqC
+if(v&&w.t(x,"id")!=null&&w.t(x,"type")!=null)a.u(0,y,D.Lr(b,c,x))
+else if(typeof x==="object"&&x!==null&&!!w.$iswn)D.f3(x,b,c)
+else if(v)D.Gf(x,b,c)}},"call$3","PV",6,0,null,73,[],282,[],14,[]],
+Lr:[function(a,b,c){var z
+if(c!=null){z=J.U6(c)
+z=z.t(c,"id")!=null&&z.t(c,"type")!=null}else z=!1
+if(!z)N.Jx("").hh("Malformed service object: "+H.d(c))
+switch(D.Io(J.UQ(c,"type"))){case"Error":z=new D.pt(null,null,null,null,b,null,null,null,null,null,null,null)
+z.H4(b,c)
+return z
+case"IsolateList":a.tl.eC(c)
+return a.tl
+case"Script":return b.fq.Jb(c)
+case"Code":return b.ne.Jb(c)
+case"Isolate":return a.tl.Ze(c)
+case"Class":return b.PH.Jb(c)
+case"Function":return b.pw.Jb(c)
+default:}z=new V.qC(P.Py(null,null,null,null,null),null,null)
+z.$builtinTypeInfo=[null,null]
+z=new D.SI(z,b,null,null,null,null,null,null,null)
+z.H4(b,c)
+return z},"call$3","d1",6,0,null,282,[],14,[],190,[]],
+G8:{
+"^":"a;F1>",
+tg:[function(a,b){return this.A4.Zp.t(0,b)!=null},"call$1","gdj",2,0,null,279,[]],
+t:[function(a,b){return this.A4.Zp.t(0,b)},"call$1","gIA",2,0,null,279,[]],
+u:[function(a,b,c){this.A4.u(0,b,c)},"call$2","gj3",4,0,null,279,[],367,[]],
+ox:[function(a){var z=this.A4.Zp.t(0,a)
+if(z!=null)return P.Ab(z,null)
+return this.F1.ox(a).ml(this.gat())},"call$1","gRD",2,0,null,279,[]],
+Jb:[function(a){var z,y
+z=J.U6(a)
+y=z.t(a,"id")
+z.t(a,"type")
+if(!this.pJ(y))N.Jx("").j2("Cache does not cache this id: "+H.d(y))
+if(this.tg(0,y))return this.A4.Zp.t(0,y)
+z=this.tR(a)
+this.A4.u(0,z.gjO(z),z)
+return z},"call$1","gMs",2,0,null,98,[]],
+LJ:[function(a){this.A4.u(0,J.F8(a),a)
+return a},"call$1","gat",2,0,function(){return H.IG(function(a){return{func:"NO",ret:a,args:[a]}},this.$receiver,"G8")},589,[]]},
+fJ:{
+"^":"G8;F1,A4",
+pJ:[function(a){var z=$.cI().Ej
+if(typeof a!=="string")H.vh(new P.AT(a))
+return z.test(a)},"call$1","guT",2,0,null,279,[]],
+tR:[function(a){var z,y,x
+z=this.F1
+y=J.im
+x=J.im
+x=new D.rj(Q.uX(null,D.c2),H.VM(new V.qC(P.Py(null,null,null,y,x),null,null),[y,x]),null,null,null,null,null,null,z,null,null,null,null,null,null,null)
+x.H4(z,a)
+return x},"call$1","gUU",2,0,null,98,[]],
+Vc:[function(a){J.kH(J.UQ(a,"coverage"),new D.q1(this))},"call$1","gJJ",2,0,590,591,[]],
+$asG8:function(){return[D.rj]},
+static:{"^":"RI"}},
+q1:{
+"^":"Tp:112;a",
+call$1:[function(a){var z=J.U6(a)
+z.t(a,"script").aq(z.t(a,"hits"))},"call$1",null,2,0,null,592,[],"call"],
+$isEH:true},
+jx:{
+"^":"G8;F1,A4",
+pJ:[function(a){var z=$.xN().Ej
+if(typeof a!=="string")H.vh(new P.AT(a))
+return z.test(a)},"call$1","guT",2,0,null,279,[]],
+tR:[function(a){var z,y,x
+z=this.F1
+y=J.im
+x=D.N8
+x=new D.kx(null,0,0,0,0,0,H.VM([],[D.Vi]),H.VM([],[D.Vi]),Q.uX(null,D.Q4),H.VM(new V.qC(P.Py(null,null,null,y,x),null,null),[y,x]),"","",null,null,null,!1,null,null,z,null,null,null,null,null,null,null)
+x.H4(z,a)
+return x},"call$1","gUU",2,0,null,98,[]],
+T0:[function(a){var z,y
+z=this.A4.Zp
+z=z.gUQ(z)
+y=P.F(z,!0,H.ip(z,"mW",0))
+H.rd(y,new D.yT())
+z=y.length
+if(typeof a!=="number")return H.s(a)
+if(z<a)return y
+C.Nm.sB(y,a)
+return y},"call$1","gy8",2,0,null,130,[]],
+c2:[function(){this.A4.Zp.aN(0,new D.Cn())},"call$0","gKW",0,0,null],
+pl:[function(a,b){var z,y,x,w
+z=J.U6(a)
+y=z.t(a,"codes")
+x=z.t(a,"samples")
+for(z=J.GP(y);z.G();){w=z.gl()
+J.UQ(w,"code").eL(w,b,x)}},"call$2","gxl",4,0,null,593,[],594,[]],
+$asG8:function(){return[D.kx]},
+static:{"^":"PA"}},
+yT:{
+"^":"Tp:595;",
+call$2:[function(a,b){return J.xH(b.gDu(),a.gDu())},"call$2",null,4,0,null,131,[],187,[],"call"],
+$isEH:true},
+Cn:{
+"^":"Tp:596;",
+call$2:[function(a,b){b.PF()},"call$2",null,4,0,null,442,[],143,[],"call"],
+$isEH:true},
+du:{
+"^":"G8;F1,A4",
+pJ:[function(a){var z=$.Yk().Ej
+if(typeof a!=="string")H.vh(new P.AT(a))
+return z.test(a)},"call$1","guT",2,0,null,279,[]],
+tR:[function(a){var z,y
+z=this.F1
+y=new D.SI(H.VM(new V.qC(P.Py(null,null,null,null,null),null,null),[null,null]),z,null,null,null,null,null,null,null)
+y.H4(z,a)
+return y},"call$1","gUU",2,0,null,98,[]],
+$asG8:function(){return[D.SI]},
+static:{"^":"Oi"}},
+xc:{
+"^":"G8;F1,A4",
+pJ:[function(a){var z=$.uG().Ej
+if(typeof a!=="string")H.vh(new P.AT(a))
+return z.test(a)},"call$1","guT",2,0,null,279,[]],
+tR:[function(a){var z,y
+z=this.F1
+y=new D.SI(H.VM(new V.qC(P.Py(null,null,null,null,null),null,null),[null,null]),z,null,null,null,null,null,null,null)
+y.H4(z,a)
+return y},"call$1","gUU",2,0,null,98,[]],
+$asG8:function(){return[D.SI]},
+static:{"^":"TO"}},
+bv:{
+"^":["D3;zf<,fq,ne,PH,pw,v9,zb,bN:KT@,GR:f5@,cL,LE<-597,Cf,W1,S9,AP,Lk,Fm,KG,mQ,nr,bN,GR,AP,Lk",null,null,null,null,null,null,null,null,null,null,function(){return[C.mI]},null,null,null,null,null,null,null,null,null,null,null,null,null],
+gPj:function(a){return this.KG},
+gHP:function(){return"#/"+H.d(this.KG)},
+gZ0:function(){return this.ne},
+gDD:function(a){return this.PH},
+pC:[function(){var z,y
+this.Fm=this
+z=D.rj
+y=J.O
+this.fq=new D.fJ(this,H.VM(new V.qC(P.Py(null,null,null,y,z),null,null),[y,z]))
+z=D.kx
+y=J.O
+this.ne=new D.jx(this,H.VM(new V.qC(P.Py(null,null,null,y,z),null,null),[y,z]))
+z=D.SI
+y=J.O
+this.PH=new D.du(this,H.VM(new V.qC(P.Py(null,null,null,y,z),null,null),[y,z]))
+z=D.SI
+y=J.O
+this.pw=new D.xc(this,H.VM(new V.qC(P.Py(null,null,null,y,z),null,null),[y,z]))},"call$0","gWR",0,0,null],
+Mq:[function(a){return H.d(this.KG)+"/"+H.d(a)},"call$1","gua",2,0,598,279,[],"relativeLink",358],
+xQ:[function(a){return"#/"+(H.d(this.KG)+"/"+H.d(a))},"call$1","gz9",2,0,598,279,[],"relativeHashLink",358],
+lh:[function(a){return this.ox("coverage").ml(this.fq.gJJ())},"call$0","gWp",0,0,null],
+N3:[function(a){var z,y
+z=H.VM([],[D.kx])
+for(y=J.GP(J.UQ(a,"codes"));y.G();)z.push(J.UQ(y.gl(),"code"))
+this.ne.c2()
+this.ne.pl(a,z)},"call$1","gNk",2,0,null,593,[]],
+ox:[function(a){var z,y
+this.fq.toString
+z=$.cI().Ej
+y=typeof a!=="string"
+if(y)H.vh(new P.AT(a))
+if(z.test(a))return this.fq.ox(a)
+this.ne.toString
+z=$.xN().Ej
+if(y)H.vh(new P.AT(a))
+if(z.test(a))return this.ne.ox(a)
+this.PH.toString
+z=$.Yk().Ej
+if(y)H.vh(new P.AT(a))
+if(z.test(a))return this.PH.ox(a)
+this.pw.toString
+z=$.uG().Ej
+if(y)H.vh(new P.AT(a))
+if(z.test(a))return this.pw.ox(a)
+return this.zf.jU(H.d(this.KG)+"/"+H.d(a)).ml(new D.KQ(this))},"call$1","gRD",2,0,null,599,[]],
+gZA:[function(){return this.v9},null,null,1,0,376,"rootLib",358,359],
+sZA:[function(a){this.v9=F.Wi(this,C.iF,this.v9,a)},null,null,3,0,378,28,[],"rootLib",358],
+gUu:[function(){return this.zb},null,null,1,0,600,"topFrame",358,359],
+sUu:[function(a){this.zb=F.Wi(this,C.ch,this.zb,a)},null,null,3,0,601,28,[],"topFrame",358],
+goc:[function(a){return this.KT},null,null,1,0,365,"name",358,359],
+soc:[function(a,b){this.KT=F.Wi(this,C.YS,this.KT,b)},null,null,3,0,30,28,[],"name",358],
+gzz:[function(){return this.f5},null,null,1,0,365,"vmName",358,359],
+szz:[function(a){this.f5=F.Wi(this,C.KS,this.f5,a)},null,null,3,0,30,28,[],"vmName",358],
+gw2:[function(){return this.cL},null,null,1,0,602,"entry",358,359],
+sw2:[function(a){this.cL=F.Wi(this,C.tP,this.cL,a)},null,null,3,0,603,28,[],"entry",358],
+gCi:[function(){return this.Cf},null,null,1,0,512,"newHeapUsed",358,359],
+sCi:[function(a){this.Cf=F.Wi(this,C.IO,this.Cf,a)},null,null,3,0,411,28,[],"newHeapUsed",358],
+guq:[function(){return this.W1},null,null,1,0,512,"oldHeapUsed",358,359],
+suq:[function(a){this.W1=F.Wi(this,C.ap,this.W1,a)},null,null,3,0,411,28,[],"oldHeapUsed",358],
+gNh:[function(a){return this.S9},null,null,1,0,365,"fileAndLine",358,359],
+bj:function(a,b){return this.gNh(this).call$1(b)},
+sNh:[function(a,b){this.S9=F.Wi(this,C.CX,this.S9,b)},null,null,3,0,30,28,[],"fileAndLine",358],
+tM:[function(a,b){var z,y,x,w
+D.Ch(b,this.zf,this)
+this.nr=!1
+z=J.U6(b)
+if(z.t(b,"rootLib")==null||z.t(b,"timers")==null||z.t(b,"heap")==null){N.Jx("").hh("Malformed 'Isolate' response: "+H.d(b))
+return}y=z.t(b,"rootLib")
+this.v9=F.Wi(this,C.iF,this.v9,y)
+y=z.t(b,"name")
+this.f5=F.Wi(this,C.KS,this.f5,y)
+if(z.t(b,"entry")!=null){y=z.t(b,"entry")
+y=F.Wi(this,C.tP,this.cL,y)
+this.cL=y
+y=J.UQ(y,"name")
+this.KT=F.Wi(this,C.YS,this.KT,y)}else this.KT=F.Wi(this,C.YS,this.KT,"root isolate")
+if(z.t(b,"topFrame")!=null){y=z.t(b,"topFrame")
+this.zb=F.Wi(this,C.ch,this.zb,y)}else this.zb=F.Wi(this,C.ch,this.zb,null)
+x=H.B7([],P.L5(null,null,null,null,null))
+J.kH(z.t(b,"timers"),new D.Qq(x))
+y=this.LE
+w=J.w1(y)
+w.u(y,"total",x.t(0,"time_total_runtime"))
+w.u(y,"compile",x.t(0,"time_compilation"))
+w.u(y,"gc",0)
+w.u(y,"init",J.WB(J.WB(J.WB(x.t(0,"time_script_loading"),x.t(0,"time_creating_snapshot")),x.t(0,"time_isolate_initialization")),x.t(0,"time_bootstrap")))
+w.u(y,"dart",x.t(0,"time_dart_execution"))
+y=J.UQ(z.t(b,"heap"),"usedNew")
+this.Cf=F.Wi(this,C.IO,this.Cf,y)
+z=J.UQ(z.t(b,"heap"),"usedOld")
+this.W1=F.Wi(this,C.ap,this.W1,z)},"call$1","gYh",2,0,null,151,[]],
+$isbv:true},
+D3:{
+"^":"af+Pi;",
+$isd3:true},
+KQ:{
+"^":"Tp:601;a",
+call$1:[function(a){var z=this.a
+return D.Lr(z.zf,z,a)},"call$1",null,2,0,null,190,[],"call"],
+$isEH:true},
+Qq:{
+"^":"Tp:112;a",
+call$1:[function(a){var z=J.U6(a)
+this.a.u(0,z.t(a,"name"),z.t(a,"time"))},"call$1",null,2,0,null,604,[],"call"],
+$isEH:true},
+Qd:{
+"^":["af;Gt,i2>-82,Fm,KG,mQ,nr,bN,GR,AP,Lk",null,function(){return[C.mI]},null,null,null,null,null,null,null,null],
+gzf:function(){return this.Gt},
+VD:[function(a){return this.Gt.jU(this.KG).ml(this.gpn())},"call$0","gQU",0,0,null],
+tM:[function(a,b){this.l9(J.UQ(b,"members"))},"call$1","gYh",2,0,null,151,[]],
+l9:[function(a){var z=[]
+J.kH(this.i2,new D.i6(a,z))
+H.bQ(z,new D.r2(this))
+J.kH(a,new D.JB(this))
+this.Mm()},"call$1","geV",2,0,null,280,[]],
+Mm:[function(){J.kH(this.i2,new D.qj())},"call$0","gU2",0,0,null],
+AQ:[function(a){var z,y,x,w
+z=this.i2
+y=J.U6(z)
+x=y.t(z,a)
+if(x!=null)return x
+w=P.L5(null,null,null,J.O,J.GW)
+w=R.Jk(w)
+x=new D.bv(this.Gt,null,null,null,null,null,null,null,null,null,w,0,0,null,null,null,null,a,"@Isolate",null,null,null,null,null)
+x.nr=C.xB.nC("@Isolate","@")
+x.mQ=D.Io("@Isolate")
+x.DC(0)
+x.pC()
+y.u(z,a,x)
+x.xW(0)
+return x},"call$1","grE",2,0,null,279,[]],
+Ze:[function(a){var z,y,x,w,v
+z=J.UQ(a,"id")
+y=this.i2
+x=J.U6(y)
+w=x.t(y,z)
+if(w!=null){w.eC(a)
+return w}v=P.L5(null,null,null,J.O,J.GW)
+v=R.Jk(v)
+w=new D.bv(this.Gt,null,null,null,null,null,null,null,null,null,v,0,0,null,null,null,null,null,null,null,null,null,null,null)
+w.H4(null,a)
+w.pC()
+x.u(y,z,w)
+w.xW(0)
+return w},"call$1","gwB",2,0,null,190,[]],
+static:{ow:[function(a,b){return J.pb(b,new D.BH(a))},"call$2","nW",4,0,null,279,[],280,[]]}},
+i6:{
+"^":"Tp:348;a,b",
+call$2:[function(a,b){if(D.ow(a,this.a)!==!0)this.b.push(a)},"call$2",null,4,0,null,442,[],272,[],"call"],
+$isEH:true},
+r2:{
+"^":"Tp:112;c",
+call$1:[function(a){J.V1(this.c.i2,a)
+N.Jx("").To("Isolate '"+H.d(a)+"' has gone away.")},"call$1",null,2,0,null,279,[],"call"],
+$isEH:true},
+JB:{
+"^":"Tp:112;d",
+call$1:[function(a){var z,y,x,w,v,u
+z=J.UQ(a,"id")
+y=this.d
+x=y.i2
+w=J.U6(x)
+if(w.t(x,z)==null){v=P.L5(null,null,null,J.O,J.GW)
+v=R.Jk(v)
+u=new D.bv(y.Gt,null,null,null,null,null,null,null,null,null,v,0,0,null,null,null,null,null,null,null,null,null,null,null)
+u.H4(null,a)
+u.pC()
+N.Jx("").To("Created ServiceObject for '"+H.d(u.KG)+"' with type '"+H.d(u.mQ)+"'")
+w.u(x,z,u)}},"call$1",null,2,0,null,151,[],"call"],
+$isEH:true},
+qj:{
+"^":"Tp:605;",
+call$2:[function(a,b){J.am(b)},"call$2",null,4,0,null,442,[],14,[],"call"],
+$isEH:true},
+BH:{
+"^":"Tp:112;a",
+call$1:[function(a){return J.de(J.UQ(a,"id"),this.a)},"call$1",null,2,0,null,606,[],"call"],
+$isEH:true},
+SI:{
+"^":"af;RF,Fm,KG,mQ,nr,bN,GR,AP,Lk",
+bu:[function(a){return P.vW(this.RF)},"call$0","gXo",0,0,null],
+tM:[function(a,b){var z,y,x
+z=this.RF
+z.V1(0)
+z.FV(0,b)
+y=z.Zp
+x=y.t(0,"user_name")
+this.bN=this.ct(0,C.YS,this.bN,x)
+y=y.t(0,"name")
+this.GR=this.ct(this,C.KS,this.GR,y)
+y=this.Fm
+D.Ch(z,y.zf,y)},"call$1","gYh",2,0,null,190,[]],
+FV:[function(a,b){return this.RF.FV(0,b)},"call$1","gDY",2,0,null,109,[]],
+V1:[function(a){return this.RF.V1(0)},"call$0","gRa",0,0,null],
+di:[function(a){return this.RF.Zp.di(a)},"call$1","gmc",2,0,null,272,[]],
+x4:[function(a){return this.RF.Zp.x4(a)},"call$1","gV9",2,0,null,442,[]],
+aN:[function(a,b){return this.RF.Zp.aN(0,b)},"call$1","gjw",2,0,null,117,[]],
+Rz:[function(a,b){return this.RF.Rz(0,b)},"call$1","guH",2,0,null,47,[]],
+t:[function(a,b){return this.RF.Zp.t(0,b)},"call$1","gIA",2,0,null,442,[]],
+u:[function(a,b,c){this.RF.u(0,b,c)
+return c},"call$2","gj3",4,0,null,442,[],272,[]],
+gl0:function(a){var z=this.RF.Zp
+return z.gB(z)===0},
+gor:function(a){var z=this.RF.Zp
+return z.gB(z)!==0},
+gvc:function(a){var z=this.RF.Zp
+return z.gvc(z)},
+gUQ:function(a){var z=this.RF.Zp
+return z.gUQ(z)},
+gB:function(a){var z=this.RF.Zp
+return z.gB(z)},
+BN:[function(a){var z=this.RF
+return z.BN(z)},"call$0","gDx",0,0,390],
+nq:[function(a,b){var z=this.RF
+return z.nq(z,b)},"call$1","giA",2,0,null,27,[]],
+ct:[function(a,b,c,d){return F.Wi(this.RF,b,c,d)},"call$3","gAn",6,0,null,253,[],229,[],230,[]],
+k0:[function(a){return},"call$0","gqw",0,0,114],
+ni:[function(a){this.RF.AP=null
+return},"call$0","gl1",0,0,114],
+gUj:function(a){var z=this.RF
+return z.gUj(z)},
+gnz:function(a){var z,y
+z=this.RF.AP
+if(z!=null){y=z.iE
+z=y==null?z!=null:y!==z}else z=!1
+return z},
+$isSI:true,
+$isqC:true,
+$asqC:function(){return[null,null]},
+$isZ0:true,
+$asZ0:function(){return[null,null]},
+$isd3:true},
+pt:{
+"^":"wVq;J6,LD,AP,Lk,Fm,KG,mQ,nr,bN,GR,AP,Lk",
+gfY:[function(a){return this.J6},null,null,1,0,365,"kind",358,359],
+sfY:[function(a,b){this.J6=F.Wi(this,C.fy,this.J6,b)},null,null,3,0,30,28,[],"kind",358],
+gG1:[function(a){return this.LD},null,null,1,0,365,"message",358,359],
+sG1:[function(a,b){this.LD=F.Wi(this,C.h2,this.LD,b)},null,null,3,0,30,28,[],"message",358],
+tM:[function(a,b){var z,y
+z=J.U6(b)
+y=z.t(b,"kind")
+this.J6=F.Wi(this,C.fy,this.J6,y)
+z=z.t(b,"message")
+this.LD=F.Wi(this,C.h2,this.LD,z)
+z="ServiceError "+H.d(this.J6)
+z=this.ct(this,C.YS,this.bN,z)
+this.bN=z
+this.GR=this.ct(this,C.KS,this.GR,z)},"call$1","gYh",2,0,null,151,[]]},
+wVq:{
+"^":"af+Pi;",
+$isd3:true},
+c2:{
+"^":["a;Rd>-369,a4>-389",function(){return[C.Nw]},function(){return[C.Nw]}],
+$isc2:true},
+rj:{
+"^":["dZL;Sw<-82,u9<-82,Gz,J6,Ge,wA,AP,Lk,Fm,KG,mQ,nr,bN,GR,AP,Lk",function(){return[C.Nw]},function(){return[C.Nw]},null,null,null,null,null,null,null,null,null,null,null,null,null,null],
+gtD:[function(a){return this.Gz},null,null,1,0,361,"library",358,359],
+stD:[function(a,b){this.Gz=F.Wi(this,C.EV,this.Gz,b)},null,null,3,0,362,28,[],"library",358],
+gfY:[function(a){return this.J6},null,null,1,0,365,"kind",358,359],
+sfY:[function(a,b){this.J6=F.Wi(this,C.fy,this.J6,b)},null,null,3,0,30,28,[],"kind",358],
+tM:[function(a,b){var z,y,x
+z=J.U6(b)
+if(J.de(z.t(b,"type"),"Error")&&J.de(z.t(b,"kind"),"NotFoundError")){N.Jx("").To(z.t(b,"message"))
+return}y=z.t(b,"name")
+this.wA=y
+x=J.U6(y)
+y=x.yn(y,J.WB(x.cn(y,"/"),1))
+this.Ge=y
+this.bN=this.ct(this,C.YS,this.bN,y)
+y=this.wA
+this.GR=this.ct(this,C.KS,this.GR,y)
+y=z.t(b,"kind")
+this.J6=F.Wi(this,C.fy,this.J6,y)
+this.W8(z.t(b,"source"))},"call$1","gYh",2,0,null,190,[]],
+aq:[function(a){var z,y,x,w,v
+if(this.nr)this.xW(0)
+z=J.U6(a)
+y=this.u9
+x=J.w1(y)
+w=0
+while(!0){v=z.gB(a)
+if(typeof v!=="number")return H.s(v)
+if(!(w<v))break
+x.u(y,z.t(a,w),z.t(a,w+1))
+w+=2}},"call$1","gHS",2,0,null,607,[]],
+W8:[function(a){var z,y,x,w,v
+this.nr=!0
+if(a==null)return
+z=J.uH(a,"\n")
+if(z.length===0)return
+this.nr=!1
+y=this.Sw
+x=J.w1(y)
+x.V1(y)
+N.Jx("").To("Adding "+z.length+" source lines for "+H.d(this.wA))
+for(w=0;w<z.length;w=v){v=w+1
+x.h(y,new D.c2(v,z[w]))}},"call$1","gf4",2,0,null,32,[]],
+$isrj:true},
+dZL:{
+"^":"af+Pi;",
+$isd3:true},
+N8:{
+"^":"a;Yu<,Du<,fF<",
+$isN8:true},
+Q4:{
+"^":["Pi;Yu<-369,m7<-389,L4<-389,AP,Lk",function(){return[C.mI]},function(){return[C.mI]},function(){return[C.mI]},null,null],
+xt:[function(){var z,y
+z=this.Yu
+y=J.x(z)
+if(y.n(z,0))return""
+return"0x"+y.WZ(z,16)},"call$0","gZd",0,0,365,"formattedAddress",358],
+Io:[function(a){var z
+if(a==null)return""
+z=J.UQ(a.gyP(),this.Yu)
+if(z==null)return""
+if(J.de(z.gfF(),z.gDu()))return""
+return D.Tn(z.gfF(),a.glt())+" ("+H.d(z.gfF())+")"},"call$1","gcQ",2,0,608,143,[],"formattedInclusive",358],
+HU:[function(a){var z
+if(a==null)return""
+z=J.UQ(a.gyP(),this.Yu)
+if(z==null)return""
+return D.Tn(z.gDu(),a.glt())+" ("+H.d(z.gDu())+")"},"call$1","gGK",2,0,608,143,[],"formattedExclusive",358],
+$isQ4:true,
+static:{Tn:[function(a,b){return C.CD.yM(100*J.FW(a,b),2)+"%"},"call$2","Ai",4,0,null,131,[],238,[]]}},
+WAE:{
+"^":"a;uX",
+bu:[function(a){return this.uX},"call$0","gXo",0,0,null],
+static:{"^":"j6,pg,WAg,PM",CQ:[function(a){var z=J.x(a)
+if(z.n(a,"Native"))return C.nj
+else if(z.n(a,"Dart"))return C.l8
+else if(z.n(a,"Collected"))return C.WA
+else if(z.n(a,"Reused"))return C.yP
+N.Jx("").j2("Unknown code kind "+H.d(a))
+throw H.b(P.hS())},"call$1","J6",2,0,null,91,[]]}},
+Vi:{
+"^":"a;tT>,Av<",
+$isVi:true},
+kx:{
+"^":["w8F;J6,jv,Du@-369,fF@-369,vg@-369,Mb@-369,VS<-82,hw<-82,va<-82,yP<-82,mM,qH,MO,oc*,zz@,TD,AP,Lk,Fm,KG,mQ,nr,bN,GR,AP,Lk",null,null,function(){return[C.Nw]},function(){return[C.Nw]},function(){return[C.Nw]},function(){return[C.Nw]},function(){return[C.Nw]},function(){return[C.Nw]},function(){return[C.Nw]},function(){return[C.Nw]},null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],
+gfY:[function(a){return this.J6},null,null,1,0,609,"kind",358,359],
+sfY:[function(a,b){this.J6=F.Wi(this,C.fy,this.J6,b)},null,null,3,0,610,28,[],"kind",358],
+glt:[function(){return this.jv},null,null,1,0,512,"totalSamplesInProfile",358,359],
+slt:[function(a){this.jv=F.Wi(this,C.QK,this.jv,a)},null,null,3,0,411,28,[],"totalSamplesInProfile",358],
+gAg:[function(){return this.mM},null,null,1,0,365,"formattedInclusiveTicks",358,359],
+sAg:[function(a){this.mM=F.Wi(this,C.EF,this.mM,a)},null,null,3,0,30,28,[],"formattedInclusiveTicks",358],
+ga3:[function(){return this.qH},null,null,1,0,365,"formattedExclusiveTicks",358,359],
+sa3:[function(a){this.qH=F.Wi(this,C.uU,this.qH,a)},null,null,3,0,30,28,[],"formattedExclusiveTicks",358],
+gMj:[function(a){return this.MO},null,null,1,0,376,"function",358,359],
+sMj:[function(a,b){this.MO=F.Wi(this,C.nf,this.MO,b)},null,null,3,0,378,28,[],"function",358],
+PF:[function(){this.jv=F.Wi(this,C.QK,this.jv,0)
+this.Du=0
+this.fF=0
+this.mM=F.Wi(this,C.EF,this.mM,"")
+this.qH=F.Wi(this,C.uU,this.qH,"")
+J.U2(this.VS)
+J.U2(this.hw)
+J.U2(this.yP)},"call$0","gEQ",0,0,null],
+VD:[function(a){if(J.de(this.J6,C.l8))return D.af.prototype.VD.call(this,this)
+return P.Ab(this,null)},"call$0","gQU",0,0,null],
+fp:[function(a,b,c){var z,y,x,w,v,u
+z=J.U6(b)
+y=J.w1(a)
+x=0
+while(!0){w=z.gB(b)
+if(typeof w!=="number")return H.s(w)
+if(!(x<w))break
+v=H.BU(z.t(b,x),null,null)
+u=H.BU(z.t(b,x+1),null,null)
+if(v>>>0!==v||v>=c.length)return H.e(c,v)
+y.h(a,new D.Vi(c[v],u))
+x+=2}y.GT(a,new D.fx())},"call$3","goR",6,0,null,611,[],235,[],612,[]],
+eL:[function(a,b,c){var z,y
+this.jv=F.Wi(this,C.QK,this.jv,c)
+z=J.U6(a)
+this.fF=H.BU(z.t(a,"inclusive_ticks"),null,null)
+this.Du=H.BU(z.t(a,"exclusive_ticks"),null,null)
+this.fp(this.VS,z.t(a,"callers"),b)
+this.fp(this.hw,z.t(a,"callees"),b)
+y=z.t(a,"ticks")
+if(y!=null)this.pd(y)
+z=D.Vb(this.fF,this.jv)+" ("+H.d(this.fF)+")"
+this.mM=F.Wi(this,C.EF,this.mM,z)
+z=D.Vb(this.Du,this.jv)+" ("+H.d(this.fF)+")"
+this.qH=F.Wi(this,C.uU,this.qH,z)},"call$3","gI1",6,0,null,613,[],594,[],614,[]],
+tM:[function(a,b){var z,y,x
+z=J.U6(b)
+this.oc=z.t(b,"user_name")
+this.zz=z.t(b,"name")
+y=D.CQ(z.t(b,"kind"))
+this.J6=F.Wi(this,C.fy,this.J6,y)
+this.vg=H.BU(z.t(b,"start"),16,null)
+this.Mb=H.BU(z.t(b,"end"),16,null)
+y=this.Fm
+y=D.Lr(y.zf,y,z.t(b,"function"))
+this.MO=F.Wi(this,C.nf,this.MO,y)
+x=z.t(b,"disassembly")
+if(x!=null)this.xs(x)
+z=this.va
+y=J.U6(z)
+this.nr=J.de(y.gB(z),0)&&J.de(this.J6,C.l8)
+z=!J.de(y.gB(z),0)&&J.de(this.J6,C.l8)
+this.TD=F.Wi(this,C.zS,this.TD,z)},"call$1","gYh",2,0,null,190,[]],
+gvS:[function(){return this.TD},null,null,1,0,390,"hasDisassembly",358,359],
+svS:[function(a){this.TD=F.Wi(this,C.zS,this.TD,a)},null,null,3,0,391,28,[],"hasDisassembly",358],
+xs:[function(a){var z,y,x,w,v,u,t,s
+z=this.va
+y=J.w1(z)
+y.V1(z)
+x=J.U6(a)
+w=0
+while(!0){v=x.gB(a)
+if(typeof v!=="number")return H.s(v)
+if(!(w<v))break
+u=x.t(a,w+1)
+t=x.t(a,w+2)
+s=!J.de(x.t(a,w),"")?H.BU(x.t(a,w),null,null):0
+y.h(z,new D.Q4(s,u,t,null,null))
+w+=3}},"call$1","gxk",2,0,null,615,[]],
+pd:[function(a){var z,y,x,w,v,u
+z=J.U6(a)
+y=this.yP
+x=J.w1(y)
+w=0
+while(!0){v=z.gB(a)
+if(typeof v!=="number")return H.s(v)
+if(!(w<v))break
+u=H.BU(z.t(a,w),16,null)
+x.u(y,u,new D.N8(u,H.BU(z.t(a,w+1),null,null),H.BU(z.t(a,w+2),null,null)))
+w+=3}},"call$1","gfi",2,0,null,616,[]],
+tg:[function(a,b){J.J5(b,this.vg)
+return!1},"call$1","gdj",2,0,null,617,[]],
+QQ:[function(){return this.F3(this.VS)},"call$0","gOh",0,0,null],
+dJ:[function(a){return this.Ov(this.VS,a)},"call$1","gf7",2,0,null,143,[]],
+F3:[function(a){var z,y,x
+for(z=J.GP(a),y=0;z.G();){x=z.gl().gAv()
+if(typeof x!=="number")return H.s(x)
+y+=x}return y},"call$1","gh9",2,0,null,611,[]],
+Ov:[function(a,b){var z,y
+for(z=J.GP(a);z.G();){y=z.gl()
+if(J.de(J.on(y),b))return y.gAv()}return 0},"call$2","gHp",4,0,null,611,[],143,[]],
+$iskx:true,
+static:{Vb:[function(a,b){return C.CD.yM(100*J.FW(a,b),2)+"%"},"call$2","Mr",4,0,null,131,[],238,[]]}},
+w8F:{
+"^":"af+Pi;",
+$isd3:true},
+fx:{
+"^":"Tp:348;",
+call$2:[function(a,b){return J.xH(b.gAv(),a.gAv())},"call$2",null,4,0,null,131,[],187,[],"call"],
+$isEH:true},
+af:{
+"^":"Pi;bN@,GR@",
+gF1:[function(a){return this.Fm},null,null,1,0,357,"isolate",358],
+gzf:[function(){return this.Fm.zf},null,null,1,0,618,"vm",358],
+gPj:[function(a){var z,y
+z=this.Fm
+y=this.KG
+return H.d(z.KG)+"/"+H.d(y)},null,null,1,0,365,"link",358],
+gHP:[function(){var z,y
+z=this.Fm
+y=this.KG
+return"#/"+(H.d(z.KG)+"/"+H.d(y))},null,null,1,0,365,"hashLink",358],
+gjO:[function(a){return this.KG},null,null,1,0,365,"id",358],
+gzS:[function(){return this.mQ},null,null,1,0,365,"serviceType",358],
+goc:[function(a){return this.gbN()},null,null,1,0,365,"name",358,359],
+soc:[function(a,b){this.sbN(this.ct(this,C.YS,this.gbN(),b))},null,null,3,0,30,28,[],"name",358],
+gzz:[function(){return this.gGR()},null,null,1,0,365,"vmName",358,359],
+szz:[function(a){this.sGR(this.ct(this,C.KS,this.gGR(),a))},null,null,3,0,30,28,[],"vmName",358],
+xW:[function(a){if(!this.nr)return P.Ab(this,null)
+return this.VD(0)},"call$0","gnB",0,0,null],
+VD:[function(a){if(J.de(this.KG,""))return P.Ab(this,null)
+return this.Fm.zf.jU(this.gPj(this)).ml(this.gpn())},"call$0","gQU",0,0,null],
+eC:[function(a){var z=J.U6(a)
+if(J.de(z.t(a,"type"),"Error")&&!J.de(this.mQ,"Error"))return D.Lr(this.gzf(),this.Fm,a)
+this.KG=z.t(a,"id")
+this.mQ=D.Io(z.t(a,"type"))
+this.tM(0,a)
+return this},"call$1","gpn",2,0,619,190,[]],
+DC:[function(a){var z=this.nr?" Created from reference.":""
+N.Jx("").To("Created ServiceObject for '"+H.d(this.KG)+"' with type '"+H.d(this.mQ)+"'."+z)},"call$0","gEX",0,0,null],
+H4:function(a,b){var z=J.U6(b)
+this.KG=z.t(b,"id")
+this.nr=J.co(z.t(b,"type"),"@")
+this.mQ=D.Io(z.t(b,"type"))
+this.DC(0)
+this.eC(b)}},
+UZ:{
+"^":"Tp:348;a,b,c",
+call$2:[function(a,b){var z,y
+z=J.x(b)
+y=typeof b==="object"&&b!==null&&!!z.$isqC
+if(y&&D.Er(b))this.a.u(0,a,D.Lr(this.b,this.c,b))
+else if(typeof b==="object"&&b!==null&&!!z.$iswn)D.f3(b,this.b,this.c)
+else if(y)D.Gf(b,this.b,this.c)},"call$2",null,4,0,null,442,[],272,[],"call"],
+$isEH:true},
+No:{
+"^":["d3;tl@-504",function(){return[C.Nw]}],
+gi2:[function(a){return this.tl},null,null,1,0,505,"isolates",358],
+pC:[function(){var z,y
+z=J.O
+y=D.bv
+y=new D.Qd(this,H.VM(new V.qC(P.Py(null,null,null,z,y),null,null),[z,y]),null,"isolates","IsolateList",null,null,null,null,null)
+y.nr=C.xB.nC("IsolateList","@")
+y.mQ=D.Io("IsolateList")
+y.DC(0)
+z=y.ct(y,C.YS,y.bN,"IsolateList")
+y.bN=z
+y.GR=y.ct(y,C.KS,y.GR,z)
+this.tl=y},"call$0","gWR",0,0,null],
+jU:[function(a){return this.z6(0,a).ml(new D.Ey(a)).OA(new D.tm())},"call$1","gGp",2,0,null,279,[]]},
+Ey:{
+"^":"Tp:112;a",
+call$1:[function(a){var z,y,x,w
+try{z=C.xr.kV(a)
+N.Jx("").To("Decoded "+H.d(this.a))
+x=R.Jk(z)
+return x}catch(w){x=H.Ru(w)
+y=x
+x=H.B7(["type","Error","id","","kind","DecodeError","message",H.d(y)],P.L5(null,null,null,null,null))
+x=R.Jk(x)
+return x}},"call$1",null,2,0,null,497,[],"call"],
+$isEH:true},
+tm:{
+"^":"Tp:112;",
+call$1:[function(a){var z=H.B7(["type","Error","id","","kind","LastResort","message",H.d(a)],P.L5(null,null,null,null,null))
+return R.Jk(z)},"call$1",null,2,0,null,159,[],"call"],
+$isEH:true}}],["service_html","package:observatory/service_html.dart",,U,{
+"^":"",
+XK:{
+"^":["No;Yu<,tl-504,R9,wv,V2,me",null,function(){return[C.Nw]},null,null,null,null],
+z6:[function(a,b){var z=this.Yu
+N.Jx("").To("Fetching "+H.d(b)+" from "+z)
+return W.It(C.xB.g(z,b),null,null).OA(new U.dT())},"call$1","gpV",2,0,null,279,[]]},
+dT:{
+"^":"Tp:112;",
+call$1:[function(a){N.Jx("").hh("HttpRequest.getString failed.")
+return C.xr.KP(H.B7(["type","Error","id","","kind","NetworkError","message","Could not connect to service. Check that you started the VM with the following flags:\n --enable-vm-service --pin-isolates"],P.L5(null,null,null,null,null)))},"call$1",null,2,0,null,159,[],"call"],
+$isEH:true},
+ho:{
+"^":["No;ja,yb,tl-504,R9,wv,V2,me",null,null,function(){return[C.Nw]},null,null,null,null],
+bI:[function(a){var z,y,x,w,v
+z=J.RE(a)
+y=J.UQ(z.gRn(a),"id")
+x=J.UQ(z.gRn(a),"name")
+w=J.UQ(z.gRn(a),"data")
+if(!J.de(x,"observatoryData"))return
+z=this.ja
+v=z.t(0,y)
+z.Rz(0,y)
+J.Xf(v,w)},"call$1","gVx",2,0,157,20,[]],
+z6:[function(a,b){var z,y,x
+z=""+this.yb
+y=H.B7([],P.L5(null,null,null,null,null))
+y.u(0,"id",z)
+y.u(0,"method","observatoryQuery")
+y.u(0,"query","/"+H.d(b))
+this.yb=this.yb+1
+x=H.VM(new P.Zf(P.Dt(null)),[null])
+this.ja.u(0,z,x)
+J.Ih(W.Pv(window.parent),C.xr.KP(y),"*")
+return x.MM},"call$1","gpV",2,0,null,261,[]],
+PI:function(){var z=C.Ns.aM(window)
+H.VM(new W.Ov(0,z.uv,z.Ph,W.aF(this.gVx()),z.Sg),[H.Kp(z,0)]).Zz()
+N.Jx("").To("Connected to DartiumVM")}}}],["service_object_view_element","package:observatory/src/elements/service_view.dart",,U,{
+"^":"",
+ob:{
+"^":["V22;mC%-381,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0-375",null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.Nw]}],
+gWA:[function(a){return a.mC},null,null,1,0,361,"object",358,377],
+sWA:[function(a,b){a.mC=this.ct(a,C.VJ,a.mC,b)},null,null,3,0,362,28,[],"object",358],
+hu:[function(a){var z
+switch(a.mC.gzS()){case"AllocationProfile":z=W.r3("heap-profile",null)
+J.CJ(z,a.mC)
+return z
+case"BreakpointList":z=W.r3("breakpoint-list",null)
+J.X8(z,a.mC)
+return z
+case"Class":z=W.r3("class-view",null)
+J.QQ(z,a.mC)
+return z
+case"Code":z=W.r3("code-view",null)
+J.fH(z,a.mC)
+return z
+case"Error":z=W.r3("error-view",null)
+J.Qr(z,a.mC)
+return z
+case"Field":z=W.r3("field-view",null)
+J.JZ(z,a.mC)
+return z
+case"Function":z=W.r3("function-view",null)
+J.dk(z,a.mC)
+return z
+case"Array":case"Bool":case"Closure":case"GrowableObjectArray":case"Instance":case"Smi":case"String":z=W.r3("instance-view",null)
+J.ti(z,a.mC)
+return z
+case"IsolateList":z=W.r3("isolate-list",null)
+J.oq(z,a.mC)
+return z
+case"Library":z=W.r3("library-view",null)
+J.F6(z,a.mC)
+return z
+case"Profile":z=W.r3("isolate-profile",null)
+J.CJ(z,a.mC)
+return z
+case"Script":z=W.r3("script-view",null)
+J.Tt(z,a.mC)
+return z
+case"StackTrace":z=W.r3("stack-trace",null)
+J.yO(z,a.mC)
+return z
+default:return}},"call$0","gbs",0,0,620,"_constructElementForObject"],
+fa:[function(a,b){var z,y,x
+a.textContent=""
+z=a.mC
+if(z==null){N.Jx("").To("Viewing null object.")
+return}y=z.gzS()
+x=this.hu(a)
+if(x==null){N.Jx("").To("Unable to find a view element for '"+H.d(y)+"'")
+return}a.appendChild(x)
+N.Jx("").To("Viewing object of '"+H.d(y)+"'")},"call$1","gYQ",2,0,112,229,[],"objectChanged"],
+"@":function(){return[C.hpj]},
+static:{zy:[function(a){var z,y,x,w
z=$.Nd()
y=P.Py(null,null,null,J.O,W.I0)
x=J.O
@@ -22794,56 +22985,36 @@
a.SO=z
a.B7=y
a.X0=w
-C.cJ.ZL(a)
-C.cJ.G6(a)
-return a},null,null,0,0,113,"new ScriptViewElement$created"]}},
-"+ScriptViewElement":[614],
-oaa:{
-"^":"PO+Pi;",
-$isd3:true},
-qq:{
-"^":"Tp:357;a-77",
-call$1:[function(a){var z,y
-z=this.a
-y=J.RE(z)
-y.gpC(z).oe(J.UQ(a,"coverage"))
-y.ct(z,C.YH,"",y.gXa(z))},"call$1",null,2,0,357,615,[],"call"],
-$isEH:true},
-"+ScriptViewElement_refreshCoverage_closure":[415],
-FC:{
-"^":"Tp:346;",
-call$2:[function(a,b){P.JS("refreshCoverage "+H.d(a)+" "+H.d(b))},"call$2",null,4,0,346,18,[],377,[],"call"],
-$isEH:true},
-"+ScriptViewElement_refreshCoverage_closure":[415]}],["service_ref_element","package:observatory/src/elements/service_ref.dart",,Q,{
+C.ZO.ZL(a)
+C.ZO.G6(a)
+return a},null,null,0,0,115,"new ServiceObjectViewElement$created"]}},
+"+ServiceObjectViewElement":[621],
+V22:{
+"^":"uL+Pi;",
+$isd3:true}}],["service_ref_element","package:observatory/src/elements/service_ref.dart",,Q,{
"^":"",
xI:{
-"^":["Sq;tY%-410,Pe%-417,AP,fn,pC-411,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0-412",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
-gnv:[function(a){return a.tY},null,null,1,0,354,"ref",355,397],
-snv:[function(a,b){a.tY=this.ct(a,C.kY,a.tY,b)},null,null,3,0,357,23,[],"ref",355],
-gjT:[function(a){return a.Pe},null,null,1,0,380,"internal",355,397],
-sjT:[function(a,b){a.Pe=this.ct(a,C.zD,a.Pe,b)},null,null,3,0,381,23,[],"internal",355],
+"^":["Ds;tY%-381,Pe%-382,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0-375",null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.Nw]}],
+gnv:[function(a){return a.tY},null,null,1,0,361,"ref",358,377],
+snv:[function(a,b){a.tY=this.ct(a,C.kY,a.tY,b)},null,null,3,0,362,28,[],"ref",358],
+gjT:[function(a){return a.Pe},null,null,1,0,390,"internal",358,377],
+sjT:[function(a,b){a.Pe=this.ct(a,C.zD,a.Pe,b)},null,null,3,0,391,28,[],"internal",358],
aZ:[function(a,b){this.ct(a,C.Fh,"",this.gO3(a))
this.ct(a,C.YS,[],this.goc(a))
-this.ct(a,C.bA,"",this.gJp(a))},"call$1","gma",2,0,158,233,[],"refChanged"],
-gO3:[function(a){var z=a.pC
-if(z==null||a.tY==null)return""
-return z.rn(this.grp(a))},null,null,1,0,370,"url"],
-grp:[function(a){var z=a.tY
-return z==null?"":J.UQ(z,"id")},null,null,1,0,370,"objectId"],
-gJp:[function(a){var z,y
-z=a.tY
-if(z==null)return""
-y=J.UQ(z,"name")
-return y!=null?y:""},null,null,1,0,370,"hoverText"],
-goc:[function(a){var z,y
-z=a.tY
+this.ct(a,C.bA,"",this.gD5(a))},"call$1","gma",2,0,157,229,[],"refChanged"],
+gO3:[function(a){var z=a.tY
if(z==null)return"NULL REF"
-y=a.Pe===!0?"name":"user_name"
-if(J.UQ(z,y)!=null)return J.UQ(a.tY,y)
-else if(J.UQ(a.tY,"name")!=null)return J.UQ(a.tY,"name")
-else if(J.UQ(a.tY,"user_name")!=null)return J.UQ(a.tY,"user_name")
-return""},null,null,1,0,370,"name"],
-"@":function(){return[C.Ldf]},
+return z.gHP()},null,null,1,0,365,"url"],
+gOL:[function(a){var z=a.tY
+if(z==null)return"NULL REF"
+return J.F8(z)},null,null,1,0,365,"serviceId"],
+gD5:[function(a){var z=a.tY
+if(z==null)return"NULL REF"
+return z.gzz()},null,null,1,0,365,"hoverText"],
+goc:[function(a){var z=a.tY
+if(z==null)return"NULL REF"
+return J.O6(z)},null,null,1,0,365,"name"],
+"@":function(){return[C.JD]},
static:{lK:[function(a){var z,y,x,w
z=$.Nd()
y=P.Py(null,null,null,J.O,W.I0)
@@ -22856,85 +23027,66 @@
a.X0=w
C.wU.ZL(a)
C.wU.G6(a)
-return a},null,null,0,0,113,"new ServiceRefElement$created"]}},
-"+ServiceRefElement":[616],
-Sq:{
-"^":"PO+Pi;",
+return a},null,null,0,0,115,"new ServiceRefElement$created"]}},
+"+ServiceRefElement":[622],
+Ds:{
+"^":"uL+Pi;",
$isd3:true}}],["stack_frame_element","package:observatory/src/elements/stack_frame.dart",,K,{
"^":"",
nm:{
-"^":["q2;Va%-410,AP,fn,pC-411,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0-412",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
-gz1:[function(a){return a.Va},null,null,1,0,354,"frame",355,397],
-sz1:[function(a,b){a.Va=this.ct(a,C.rE,a.Va,b)},null,null,3,0,357,23,[],"frame",355],
+"^":["V23;Va%-623,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0-375",null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.Nw]}],
+gz1:[function(a){return a.Va},null,null,1,0,600,"frame",358,377],
+sz1:[function(a,b){a.Va=this.ct(a,C.rE,a.Va,b)},null,null,3,0,601,28,[],"frame",358],
"@":function(){return[C.pE]},
-static:{an:[function(a){var z,y,x,w,v
-z=H.B7([],P.L5(null,null,null,null,null))
-z=R.Jk(z)
-y=$.Nd()
-x=P.Py(null,null,null,J.O,W.I0)
-w=J.O
-v=W.cv
-v=H.VM(new V.qC(P.Py(null,null,null,w,v),null,null),[w,v])
-a.Va=z
-a.SO=y
-a.B7=x
-a.X0=v
+static:{an:[function(a){var z,y,x,w
+z=$.Nd()
+y=P.Py(null,null,null,J.O,W.I0)
+x=J.O
+w=W.cv
+w=H.VM(new V.qC(P.Py(null,null,null,x,w),null,null),[x,w])
+a.SO=z
+a.B7=y
+a.X0=w
C.dX.ZL(a)
C.dX.G6(a)
-return a},null,null,0,0,113,"new StackFrameElement$created"]}},
-"+StackFrameElement":[617],
-q2:{
-"^":"PO+Pi;",
+return a},null,null,0,0,115,"new StackFrameElement$created"]}},
+"+StackFrameElement":[624],
+V23:{
+"^":"uL+Pi;",
$isd3:true}}],["stack_trace_element","package:observatory/src/elements/stack_trace.dart",,X,{
"^":"",
-uwf:{
-"^":["q3;Up%-410,AP,fn,pC-411,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0-412",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
-gtN:[function(a){return a.Up},null,null,1,0,354,"trace",355,397],
-stN:[function(a,b){a.Up=this.ct(a,C.kw,a.Up,b)},null,null,3,0,357,23,[],"trace",355],
-RF:[function(a,b){a.pC.oX("stacktrace").ml(new X.At(a)).OA(new X.Sb()).YM(b)},"call$1","gvC",2,0,158,413,[],"refresh"],
-"@":function(){return[C.Yi]},
-static:{bV:[function(a){var z,y,x,w,v
-z=H.B7([],P.L5(null,null,null,null,null))
-z=R.Jk(z)
-y=$.Nd()
-x=P.Py(null,null,null,J.O,W.I0)
-w=J.O
-v=W.cv
-v=H.VM(new V.qC(P.Py(null,null,null,w,v),null,null),[w,v])
-a.Up=z
-a.SO=y
-a.B7=x
-a.X0=v
+Vu:{
+"^":["V24;B3%-374,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0-375",null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.Nw]}],
+gtN:[function(a){return a.B3},null,null,1,0,376,"trace",358,377],
+stN:[function(a,b){a.B3=this.ct(a,C.kw,a.B3,b)},null,null,3,0,378,28,[],"trace",358],
+yv:[function(a,b){J.am(a.B3).YM(b)},"call$1","gvC",2,0,157,379,[],"refresh"],
+"@":function(){return[C.js]},
+static:{bV:[function(a){var z,y,x,w
+z=$.Nd()
+y=P.Py(null,null,null,J.O,W.I0)
+x=J.O
+w=W.cv
+w=H.VM(new V.qC(P.Py(null,null,null,x,w),null,null),[x,w])
+a.SO=z
+a.B7=y
+a.X0=w
C.bg.ZL(a)
C.bg.G6(a)
-return a},null,null,0,0,113,"new StackTraceElement$created"]}},
-"+StackTraceElement":[618],
-q3:{
-"^":"PO+Pi;",
-$isd3:true},
-At:{
-"^":"Tp:107;a-77",
-call$1:[function(a){var z,y
-z=this.a
-y=J.RE(z)
-y.sUp(z,y.ct(z,C.kw,y.gUp(z),a))},"call$1",null,2,0,107,149,[],"call"],
-$isEH:true},
-"+StackTraceElement_refresh_closure":[415],
-Sb:{
-"^":"Tp:346;",
-call$2:[function(a,b){N.Jx("").hh("Error while reloading stack trace: "+H.d(a)+"\n"+H.d(b))},"call$2",null,4,0,346,18,[],416,[],"call"],
-$isEH:true},
-"+StackTraceElement_refresh_closure":[415]}],["template_binding","package:template_binding/template_binding.dart",,M,{
+return a},null,null,0,0,115,"new StackTraceElement$created"]}},
+"+StackTraceElement":[625],
+V24:{
+"^":"uL+Pi;",
+$isd3:true}}],["template_binding","package:template_binding/template_binding.dart",,M,{
"^":"",
IP:[function(a){var z=J.RE(a)
if(typeof a==="object"&&a!==null&&!!z.$isQl)return C.i3.f0(a)
switch(z.gt5(a)){case"checkbox":return $.FF().aM(a)
case"radio":case"select-multiple":case"select-one":return z.gi9(a)
-default:return z.gLm(a)}},"call$1","nc",2,0,null,129,[]],
+default:return z.gLm(a)}},"call$1","nc",2,0,null,132,[]],
iX:[function(a,b){var z,y,x,w,v,u,t,s
z=M.pN(a,b)
y=J.x(a)
-if(typeof a==="object"&&a!==null&&!!y.$iscv)if(y.gqn(a)!=="template")x=y.gQg(a).MW.hasAttribute("template")===!0&&C.uE.x4(y.gqn(a))===!0
+if(typeof a==="object"&&a!==null&&!!y.$iscv)if(a.localName!=="template")x=y.gQg(a).MW.hasAttribute("template")===!0&&C.uE.x4(y.gqn(a))===!0
else x=!0
else x=!1
w=x?a:null
@@ -22942,7 +23094,7 @@
if(s==null)continue
if(u==null)u=P.Py(null,null,null,null,null)
u.u(0,t,s)}if(z==null&&u==null&&w==null)return
-return new M.XI(z,u,w,t)},"call$2","Nc",4,0,null,264,[],284,[]],
+return new M.K6(z,u,w,t)},"call$2","Nc",4,0,null,260,[],283,[]],
HP:[function(a,b,c,d,e){var z,y,x
if(b==null)return
if(b.gN2()!=null){z=b.gN2()
@@ -22952,16 +23104,16 @@
if(z.gwd(b)==null)return
y=b.gTe()-a.childNodes.length
for(x=a.firstChild;x!=null;x=x.nextSibling,++y){if(y<0)continue
-M.HP(x,J.UQ(z.gwd(b),y),c,d,e)}},"call$5","Yy",10,0,null,264,[],149,[],285,[],284,[],286,[]],
+M.HP(x,J.UQ(z.gwd(b),y),c,d,e)}},"call$5","Yy",10,0,null,260,[],151,[],284,[],283,[],285,[]],
bM:[function(a){var z
for(;z=J.RE(a),z.gKV(a)!=null;)a=z.gKV(a)
if(typeof a==="object"&&a!==null&&!!z.$isQF||typeof a==="object"&&a!==null&&!!z.$isI0||typeof a==="object"&&a!==null&&!!z.$ishy)return a
-return},"call$1","ay",2,0,null,264,[]],
+return},"call$1","ay",2,0,null,260,[]],
pN:[function(a,b){var z,y
z=J.x(a)
if(typeof a==="object"&&a!==null&&!!z.$iscv)return M.F5(a,b)
if(typeof a==="object"&&a!==null&&!!z.$iskJ){y=M.F4(a.textContent,"text",a,b)
-if(y!=null)return["text",y]}return},"call$2","SG",4,0,null,264,[],284,[]],
+if(y!=null)return["text",y]}return},"call$2","SG",4,0,null,260,[],283,[]],
F5:[function(a,b){var z,y,x
z={}
z.a=null
@@ -22972,9 +23124,9 @@
if(y==null){x=[]
z.a=x
y=x}y.push("bind")
-y.push(M.F4("{{}}","bind",a,b))}return z.a},"call$2","OT",4,0,null,129,[],284,[]],
+y.push(M.F4("{{}}","bind",a,b))}return z.a},"call$2","OT",4,0,null,132,[],283,[]],
Iu:[function(a,b,c,d){var z,y,x,w,v,u,t,s,r,q,p,o,n,m,l,k,j,i
-for(z=J.U6(a),y=d!=null,x=J.x(b),x=typeof b==="object"&&b!==null&&!!x.$ishs,w=0;w<z.gB(a);w+=2){v=z.t(a,w)
+for(z=J.U6(a),y=d!=null,x=J.x(b),x=typeof b==="object"&&b!==null&&!!x.$isTU,w=0;w<z.gB(a);w+=2){v=z.t(a,w)
u=z.t(a,w+1)
t=u.gEJ()
if(1>=t.length)return H.e(t,1)
@@ -23002,7 +23154,7 @@
t.push(L.ao(j,l,null))}o.wE(0)
p=o
s="value"}i=J.Jj(x?b:M.Ky(b),v,p,s)
-if(y)d.push(i)}},"call$4","S5",6,2,null,77,291,[],264,[],285,[],286,[]],
+if(y)d.push(i)}},"call$4","S5",6,2,null,82,290,[],260,[],284,[],285,[]],
F4:[function(a,b,c,d){var z,y,x,w,v,u,t,s,r
z=a.length
if(z===0)return
@@ -23020,13 +23172,13 @@
v=t+2}if(v===z)w.push("")
z=new M.HS(w,null)
z.Yn(w)
-return z},"call$4","tE",8,0,null,86,[],12,[],264,[],284,[]],
+return z},"call$4","tE",8,0,null,91,[],12,[],260,[],283,[]],
SH:[function(a,b){var z,y
z=a.firstChild
if(z==null)return
y=new M.yp(z,a.lastChild,b)
for(;z!=null;){M.Ky(z).sCk(y)
-z=z.nextSibling}},"call$2","St",4,0,null,209,[],285,[]],
+z=z.nextSibling}},"call$2","St",4,0,null,207,[],284,[]],
Ky:[function(a){var z,y,x,w
z=$.rw()
z.toString
@@ -23037,18 +23189,18 @@
if(typeof a==="object"&&a!==null&&!!w.$isMi)x=new M.ee(a,null,null)
else if(typeof a==="object"&&a!==null&&!!w.$islp)x=new M.ug(a,null,null)
else if(typeof a==="object"&&a!==null&&!!w.$isAE)x=new M.wl(a,null,null)
-else if(typeof a==="object"&&a!==null&&!!w.$iscv){if(w.gqn(a)!=="template")w=w.gQg(a).MW.hasAttribute("template")===!0&&C.uE.x4(w.gqn(a))===!0
+else if(typeof a==="object"&&a!==null&&!!w.$iscv){if(a.localName!=="template")w=w.gQg(a).MW.hasAttribute("template")===!0&&C.uE.x4(w.gqn(a))===!0
else w=!0
-x=w?new M.DT(null,null,null,!1,null,null,null,null,null,a,null,null):new M.V2(a,null,null)}else x=typeof a==="object"&&a!==null&&!!w.$iskJ?new M.XT(a,null,null):new M.hs(a,null,null)
+x=w?new M.DT(null,null,null,!1,null,null,null,null,null,a,null,null):new M.V2(a,null,null)}else x=typeof a==="object"&&a!==null&&!!w.$iskJ?new M.XT(a,null,null):new M.TU(a,null,null)
z.u(0,a,x)
-return x},"call$1","La",2,0,null,264,[]],
+return x},"call$1","La",2,0,null,260,[]],
wR:[function(a){var z=J.RE(a)
-if(typeof a==="object"&&a!==null&&!!z.$iscv)if(z.gqn(a)!=="template")z=z.gQg(a).MW.hasAttribute("template")===!0&&C.uE.x4(z.gqn(a))===!0
+if(typeof a==="object"&&a!==null&&!!z.$iscv)if(a.localName!=="template")z=z.gQg(a).MW.hasAttribute("template")===!0&&C.uE.x4(z.gqn(a))===!0
else z=!0
else z=!1
-return z},"call$1","xS",2,0,null,292,[]],
+return z},"call$1","xS",2,0,null,198,[]],
V2:{
-"^":"hs;N1,mD,Ck",
+"^":"TU;N1,mD,Ck",
Z1:[function(a,b,c,d){var z,y,x,w,v
J.MV(this.glN(),b)
z=this.gN1()
@@ -23060,17 +23212,17 @@
new W.i7(y).Rz(0,b)
z=this.gN1()
y=d!=null?d:""
-x=new M.jY(null,z,c,null,null,"value",y)
+x=new M.zP(null,z,c,null,null,"value",y)
x.Og(z,"value",c,d)
x.Ca=M.IP(z).yI(x.gqf())}else{z=J.rY(b)
w=z.Tc(b,"?")
if(w){J.Vs(y).Rz(0,b)
v=z.Nj(b,0,J.xH(z.gB(b),1))}else v=b
z=d!=null?d:""
-x=new M.BT(w,y,c,null,null,v,z)
+x=new M.D8(w,y,c,null,null,v,z)
x.Og(y,v,c,d)}this.gCd(this).u(0,b,x)
-return x},"call$3","gxfG",4,2,null,77,12,[],285,[],265,[]]},
-BT:{
+return x},"call$3","gxfG",4,2,null,82,12,[],284,[],261,[]]},
+D8:{
"^":"TR;Y0,qP,ZY,xS,PB,eS,ay",
EC:[function(a){var z,y
if(this.Y0){z=null!=a&&!1!==a
@@ -23078,8 +23230,8 @@
if(z)J.Vs(X.TR.prototype.gH.call(this)).MW.setAttribute(y,"")
else J.Vs(X.TR.prototype.gH.call(this)).Rz(0,y)}else{z=J.Vs(X.TR.prototype.gH.call(this))
y=a==null?"":H.d(a)
-z.MW.setAttribute(this.eS,y)}},"call$1","gH0",2,0,null,23,[]]},
-jY:{
+z.MW.setAttribute(this.eS,y)}},"call$1","gH0",2,0,null,28,[]]},
+zP:{
"^":"NP;Ca,qP,ZY,xS,PB,eS,ay",
gH:function(){return M.NP.prototype.gH.call(this)},
EC:[function(a){var z,y,x,w,v,u
@@ -23091,14 +23243,14 @@
u=x}else{v=null
u=null}}else{v=null
u=null}M.NP.prototype.EC.call(this,a)
-if(u!=null&&u.gqP()!=null&&!J.de(y.gP(z),v))u.FC(null)},"call$1","gH0",2,0,null,234,[]]},
+if(u!=null&&u.gqP()!=null&&!J.de(y.gP(z),v))u.FC(null)},"call$1","gH0",2,0,null,230,[]]},
H2:{
"^":"TR;",
cO:[function(a){if(this.qP==null)return
this.Ca.ed()
X.TR.prototype.cO.call(this,this)},"call$0","gJK",0,0,null]},
-DO:{
-"^":"Tp:113;",
+lP:{
+"^":"Tp:115;",
call$0:[function(){var z,y,x,w,v
z=document.createElement("div",null).appendChild(W.ED(null))
y=J.RE(z)
@@ -23115,25 +23267,25 @@
return x.length===1?C.mt:C.Nm.gtH(x)},"call$0",null,0,0,null,"call"],
$isEH:true},
fTP:{
-"^":"Tp:107;a",
-call$1:[function(a){this.a.push(C.pi)},"call$1",null,2,0,null,18,[],"call"],
+"^":"Tp:112;a",
+call$1:[function(a){this.a.push(C.pi)},"call$1",null,2,0,null,19,[],"call"],
$isEH:true},
ppY:{
-"^":"Tp:107;b",
-call$1:[function(a){this.b.push(C.mt)},"call$1",null,2,0,null,18,[],"call"],
+"^":"Tp:112;b",
+call$1:[function(a){this.b.push(C.mt)},"call$1",null,2,0,null,19,[],"call"],
$isEH:true},
NP:{
"^":"H2;Ca,qP,ZY,xS,PB,eS,ay",
gH:function(){return X.TR.prototype.gH.call(this)},
EC:[function(a){var z=this.gH()
-J.ta(z,a==null?"":H.d(a))},"call$1","gH0",2,0,null,234,[]],
+J.ta(z,a==null?"":H.d(a))},"call$1","gH0",2,0,null,230,[]],
FC:[function(a){var z=J.Vm(this.gH())
J.ta(this.xS,z)
-O.Y3()},"call$1","gqf",2,0,158,18,[]]},
+O.Y3()},"call$1","gqf",2,0,157,19,[]]},
jt:{
"^":"H2;Ca,qP,ZY,xS,PB,eS,ay",
EC:[function(a){var z=X.TR.prototype.gH.call(this)
-J.rP(z,null!=a&&!1!==a)},"call$1","gH0",2,0,null,234,[]],
+J.rP(z,null!=a&&!1!==a)},"call$1","gH0",2,0,null,230,[]],
FC:[function(a){var z,y,x,w
z=J.Hf(X.TR.prototype.gH.call(this))
J.ta(this.xS,z)
@@ -23141,8 +23293,8 @@
y=J.x(z)
if(typeof z==="object"&&z!==null&&!!y.$isMi&&J.de(J.zH(X.TR.prototype.gH.call(this)),"radio"))for(z=J.GP(M.kv(X.TR.prototype.gH.call(this)));z.G();){x=z.gl()
y=J.x(x)
-w=J.UQ(J.QE(typeof x==="object"&&x!==null&&!!y.$ishs?x:M.Ky(x)),"checked")
-if(w!=null)J.ta(w,!1)}O.Y3()},"call$1","gqf",2,0,158,18,[]],
+w=J.UQ(J.QE(typeof x==="object"&&x!==null&&!!y.$isTU?x:M.Ky(x)),"checked")
+if(w!=null)J.ta(w,!1)}O.Y3()},"call$1","gqf",2,0,157,19,[]],
static:{kv:[function(a){var z,y,x
z=J.RE(a)
if(z.gMB(a)!=null){z=z.gMB(a)
@@ -23151,9 +23303,9 @@
return z.ev(z,new M.r0(a))}else{y=M.bM(a)
if(y==null)return C.xD
x=J.MK(y,"input[type=\"radio\"][name=\""+H.d(z.goc(a))+"\"]")
-return x.ev(x,new M.jz(a))}},"call$1","VE",2,0,null,129,[]]}},
+return x.ev(x,new M.jz(a))}},"call$1","VE",2,0,null,132,[]]}},
r0:{
-"^":"Tp:107;a",
+"^":"Tp:112;a",
call$1:[function(a){var z,y
z=this.a
y=J.x(a)
@@ -23162,12 +23314,12 @@
z=y==null?z==null:y===z}else z=!1
else z=!1
else z=!1
-return z},"call$1",null,2,0,null,288,[],"call"],
+return z},"call$1",null,2,0,null,287,[],"call"],
$isEH:true},
jz:{
-"^":"Tp:107;b",
+"^":"Tp:112;b",
call$1:[function(a){var z=J.x(a)
-return!z.n(a,this.b)&&z.gMB(a)==null},"call$1",null,2,0,null,288,[],"call"],
+return!z.n(a,this.b)&&z.gMB(a)==null},"call$1",null,2,0,null,287,[],"call"],
$isEH:true},
SA:{
"^":"H2;Dh,Ca,qP,ZY,xS,PB,eS,ay",
@@ -23176,7 +23328,7 @@
if(this.Gh(a)===!0)return
z=new (window.MutationObserver||window.WebKitMutationObserver||window.MozMutationObserver)(H.tR(W.K2(new M.hB(this)),2))
C.S2.yN(z,X.TR.prototype.gH.call(this),!0,!0)
-this.Dh=z},"call$1","gH0",2,0,null,234,[]],
+this.Dh=z},"call$1","gH0",2,0,null,230,[]],
Gh:[function(a){var z,y,x
z=this.eS
y=J.x(z)
@@ -23185,28 +23337,28 @@
z=J.m4(X.TR.prototype.gH.call(this))
return z==null?x==null:z===x}else if(y.n(z,"value")){z=X.TR.prototype.gH.call(this)
J.ta(z,a==null?"":H.d(a))
-return J.de(J.Vm(X.TR.prototype.gH.call(this)),a)}},"call$1","goz",2,0,null,234,[]],
+return J.de(J.Vm(X.TR.prototype.gH.call(this)),a)}},"call$1","goz",2,0,null,230,[]],
C7:[function(){var z=this.Dh
if(z!=null){z.disconnect()
-this.Dh=null}},"call$0","gln",0,0,null],
+this.Dh=null}},"call$0","glnT",0,0,null],
FC:[function(a){var z,y
this.C7()
z=this.eS
y=J.x(z)
if(y.n(z,"selectedIndex")){z=J.m4(X.TR.prototype.gH.call(this))
J.ta(this.xS,z)}else if(y.n(z,"value")){z=J.Vm(X.TR.prototype.gH.call(this))
-J.ta(this.xS,z)}},"call$1","gqf",2,0,158,18,[]],
+J.ta(this.xS,z)}},"call$1","gqf",2,0,157,19,[]],
$isSA:true,
static:{qb:[function(a){if(typeof a==="string")return H.BU(a,null,new M.nv())
-return typeof a==="number"&&Math.floor(a)===a?a:0},"call$1","v7",2,0,null,23,[]]}},
+return typeof a==="number"&&Math.floor(a)===a?a:0},"call$1","v7",2,0,null,28,[]]}},
hB:{
-"^":"Tp:346;a",
+"^":"Tp:348;a",
call$2:[function(a,b){var z=this.a
-if(z.Gh(J.Vm(z.xS))===!0)z.C7()},"call$2",null,4,0,null,21,[],619,[],"call"],
+if(z.Gh(J.Vm(z.xS))===!0)z.C7()},"call$2",null,4,0,null,26,[],626,[],"call"],
$isEH:true},
nv:{
-"^":"Tp:107;",
-call$1:[function(a){return 0},"call$1",null,2,0,null,108,[],"call"],
+"^":"Tp:112;",
+call$1:[function(a){return 0},"call$1",null,2,0,null,113,[],"call"],
$isEH:true},
ee:{
"^":"V2;N1,mD,Ck",
@@ -23216,7 +23368,7 @@
if(!z.n(b,"value")&&!z.n(b,"checked"))return M.V2.prototype.Z1.call(this,this,b,c,d)
y=this.gN1()
x=J.x(y)
-J.MV(typeof y==="object"&&y!==null&&!!x.$ishs?y:this,b)
+J.MV(typeof y==="object"&&y!==null&&!!x.$isTU?y:this,b)
J.Vs(this.N1).Rz(0,b)
y=this.gCd(this)
if(z.n(b,"value")){z=this.N1
@@ -23230,17 +23382,17 @@
x.Og(z,"checked",c,d)
x.Ca=M.IP(z).yI(x.gqf())
z=x}y.u(0,b,z)
-return z},"call$3","gxfG",4,2,null,77,12,[],285,[],265,[]]},
-XI:{
+return z},"call$3","gxfG",4,2,null,82,12,[],284,[],261,[]]},
+K6:{
"^":"a;Cd>,wd>,N2<,Te<"},
-hs:{
+TU:{
"^":"a;N1<,mD,Ck?",
Z1:[function(a,b,c,d){var z,y
window
z=$.pl()
y="Unhandled binding to Node: "+H.d(this)+" "+H.d(b)+" "+H.d(c)+" "+H.d(d)
z.toString
-if(typeof console!="undefined")console.error(y)},"call$3","gxfG",4,2,null,77,12,[],285,[],265,[]],
+if(typeof console!="undefined")console.error(y)},"call$3","gxfG",4,2,null,82,12,[],284,[],261,[]],
Ih:[function(a,b){var z
if(this.mD==null)return
z=this.gCd(this).Rz(0,b)
@@ -23255,10 +23407,10 @@
glN:function(){var z,y
z=this.gN1()
y=J.x(z)
-return typeof z==="object"&&z!==null&&!!y.$ishs?z:this},
-$ishs:true},
+return typeof z==="object"&&z!==null&&!!y.$isTU?z:this},
+$isTU:true},
yp:{
-"^":"a;KO,qW,k8"},
+"^":"a;KO,qW,k8<"},
ug:{
"^":"V2;N1,mD,Ck",
gN1:function(){return this.N1},
@@ -23268,7 +23420,7 @@
if(!z.n(b,"selectedIndex")&&!z.n(b,"value"))return M.V2.prototype.Z1.call(this,this,b,c,d)
z=this.gN1()
y=J.x(z)
-J.MV(typeof z==="object"&&z!==null&&!!y.$ishs?z:this,b)
+J.MV(typeof z==="object"&&z!==null&&!!y.$isTU?z:this,b)
J.Vs(this.N1).Rz(0,b)
z=this.gCd(this)
x=this.N1
@@ -23277,9 +23429,9 @@
y.Og(x,b,c,d)
y.Ca=M.IP(x).yI(y.gqf())
z.u(0,b,y)
-return y},"call$3","gxfG",4,2,null,77,12,[],285,[],265,[]]},
+return y},"call$3","gxfG",4,2,null,82,12,[],284,[],261,[]]},
DT:{
-"^":"V2;lr,xT?,kr<,Dsl,QO?,jH?,mj?,IT,dv@,N1,mD,Ck",
+"^":"V2;lr,xT?,kr<,Mf,QO?,jH?,mj?,IT,dv@,N1,mD,Ck",
gN1:function(){return this.N1},
glN:function(){var z,y
z=this.N1
@@ -23310,7 +23462,7 @@
z=new M.p8(this,c,b,d)
this.gCd(this).u(0,b,z)
return z
-default:return M.V2.prototype.Z1.call(this,this,b,c,d)}},"call$3","gxfG",4,2,null,77,12,[],285,[],265,[]],
+default:return M.V2.prototype.Z1.call(this,this,b,c,d)}},"call$3","gxfG",4,2,null,82,12,[],284,[],261,[]],
Ih:[function(a,b){var z
switch(b){case"bind":z=this.kr
if(z==null)return
@@ -23336,7 +23488,7 @@
this.jq()
this.gCd(this).Rz(0,b)
return
-default:M.hs.prototype.Ih.call(this,this,b)
+default:M.TU.prototype.Ih.call(this,this,b)
return}},"call$1","gC8",2,0,null,12,[]],
jq:[function(){var z=this.kr
if(!z.t9){z.t9=!0
@@ -23344,7 +23496,7 @@
a5:[function(a,b,c){var z,y,x,w,v,u,t
z=this.gnv(this)
y=J.x(z)
-z=typeof z==="object"&&z!==null&&!!y.$ishs?z:M.Ky(z)
+z=typeof z==="object"&&z!==null&&!!y.$isTU?z:M.Ky(z)
x=J.nX(z)
w=z.gdv()
if(w==null){w=M.iX(x,b)
@@ -23357,7 +23509,8 @@
y=u}t=M.Fz(x,y)
M.HP(t,w,a,b,c)
M.SH(t,a)
-return t},function(a,b){return this.a5(a,b,null)},"ZK","call$3",null,"gmJ",0,6,null,77,77,77,285,[],284,[],286,[]],
+return t},function(a,b){return this.a5(a,b,null)},"ZK","call$3",null,"gmJ",0,6,null,82,82,82,284,[],283,[],285,[]],
+gk8:function(){return this.lr},
gzH:function(){return this.xT},
gnv:function(a){var z,y,x,w,v
this.Sy()
@@ -23366,7 +23519,7 @@
x=y!=null?J.K3(y,z):null}else x=null
if(x==null){x=this.QO
if(x==null)return this.N1}w=J.x(x)
-v=J.IS(typeof x==="object"&&x!==null&&!!w.$ishs?x:M.Ky(x))
+v=J.IS(typeof x==="object"&&x!==null&&!!w.$isTU?x:M.Ky(x))
return v!=null?v:x},
gjb:function(a){var z
this.Sy()
@@ -23384,9 +23537,9 @@
y=J.RE(z)
z=y.gQg(z).MW.hasAttribute("template")===!0&&C.uE.x4(y.gqn(z))===!0}else z=!1
if(z){if(a!=null)throw H.b(new P.AT("instanceRef should not be supplied for attribute templates."))
-v=M.pZ(this.N1)
+v=M.eX(this.N1)
z=J.x(v)
-v=typeof v==="object"&&v!==null&&!!z.$ishs?v:M.Ky(v)
+v=typeof v==="object"&&v!==null&&!!z.$isTU?v:M.Ky(v)
v.smj(!0)
z=v.gN1()
y=J.x(z)
@@ -23396,23 +23549,23 @@
if(a!=null)v.sQO(a)
else if(w)M.KE(v,this.N1,u)
else M.GM(J.nX(v))
-return!0},function(){return this.wh(null)},"Sy","call$1",null,"ga6",0,2,null,77,620,[]],
+return!0},function(){return this.wh(null)},"Sy","call$1",null,"ga6",0,2,null,82,627,[]],
$isDT:true,
static:{"^":"mn,EW,Sf,To",Fz:[function(a,b){var z,y,x
z=J.Lh(b,a,!1)
y=J.RE(z)
-if(typeof z==="object"&&z!==null&&!!y.$iscv)if(y.gqn(z)!=="template")y=y.gQg(z).MW.hasAttribute("template")===!0&&C.uE.x4(y.gqn(z))===!0
+if(typeof z==="object"&&z!==null&&!!y.$iscv)if(z.localName!=="template")y=y.gQg(z).MW.hasAttribute("template")===!0&&C.uE.x4(y.gqn(z))===!0
else y=!0
else y=!1
if(y)return z
for(x=J.cO(a);x!=null;x=x.nextSibling)z.appendChild(M.Fz(x,b))
-return z},"call$2","Tkw",4,0,null,264,[],287,[]],TA:[function(a){var z,y,x,w
+return z},"call$2","G0",4,0,null,260,[],286,[]],TA:[function(a){var z,y,x,w
z=J.VN(a)
if(W.Pv(z.defaultView)==null)return z
y=$.LQ().t(0,z)
if(y==null){y=z.implementation.createHTMLDocument("")
for(;x=y.lastChild,x!=null;){w=x.parentNode
-if(w!=null)w.removeChild(x)}$.LQ().u(0,z,y)}return y},"call$1","nt",2,0,null,261,[]],pZ:[function(a){var z,y,x,w,v,u
+if(w!=null)w.removeChild(x)}$.LQ().u(0,z,y)}return y},"call$1","nt",2,0,null,257,[]],eX:[function(a){var z,y,x,w,v,u
z=J.RE(a)
y=z.gM0(a).createElement("template",null)
z.gKV(a).insertBefore(y,a)
@@ -23427,30 +23580,31 @@
v.removeAttribute(w)
y.setAttribute(w,u)
break
-default:}}return y},"call$1","fo",2,0,null,288,[]],KE:[function(a,b,c){var z,y,x,w
+default:}}return y},"call$1","Bw",2,0,null,287,[]],KE:[function(a,b,c){var z,y,x,w
z=J.nX(a)
if(c){J.Kv(z,b)
-return}for(y=J.RE(b),x=J.RE(z);w=y.gq6(b),w!=null;)x.jx(z,w)},"call$3","BZ",6,0,null,261,[],288,[],289,[]],GM:[function(a){var z,y
+return}for(y=J.RE(b),x=J.RE(z);w=y.gq6(b),w!=null;)x.jx(z,w)},"call$3","BZ",6,0,null,257,[],287,[],288,[]],GM:[function(a){var z,y
z=new M.OB()
y=J.MK(a,$.cz())
if(M.wR(a))z.call$1(a)
-y.aN(y,z)},"call$1","DR",2,0,null,290,[]],oR:[function(){if($.To===!0)return
+y.aN(y,z)},"call$1","DR",2,0,null,289,[]],oR:[function(){if($.To===!0)return
$.To=!0
var z=document.createElement("style",null)
-z.textContent=$.cz()+" { display: none; }"
+J.c9(z,H.d($.cz())+" { display: none; }")
document.head.appendChild(z)},"call$0","Lv",0,0,null]}},
OB:{
-"^":"Tp:158;",
+"^":"Tp:157;",
call$1:[function(a){var z
if(!M.Ky(a).wh(null)){z=J.x(a)
-M.GM(J.nX(typeof a==="object"&&a!==null&&!!z.$ishs?a:M.Ky(a)))}},"call$1",null,2,0,null,261,[],"call"],
+M.GM(J.nX(typeof a==="object"&&a!==null&&!!z.$isTU?a:M.Ky(a)))}},"call$1",null,2,0,null,257,[],"call"],
$isEH:true},
-lP:{
-"^":"Tp:107;",
-call$1:[function(a){return H.d(a)+"[template]"},"call$1",null,2,0,null,402,[],"call"],
+Uf:{
+"^":"Tp:112;",
+call$1:[function(a){return H.d(a)+"[template]"},"call$1",null,2,0,null,442,[],"call"],
$isEH:true},
p8:{
"^":"a;ud,lr,eS,ay",
+gk8:function(){return this.lr},
gP:function(a){return J.Vm(this.gND())},
r6:function(a,b){return this.gP(this).call$1(b)},
sP:function(a,b){J.ta(this.gND(),b)},
@@ -23466,7 +23620,7 @@
this.ud=null},"call$0","gJK",0,0,null],
$isTR:true},
NW:{
-"^":"Tp:346;a,b,c,d",
+"^":"Tp:348;a,b,c,d",
call$2:[function(a,b){var z,y,x,w
for(;z=J.U6(a),J.de(z.t(a,0),"_");)a=z.yn(a,1)
if(this.d)if(z.n(a,"if")){this.a.b=!0
@@ -23478,7 +23632,7 @@
z.a=w
z=w}else z=x
z.push(a)
-z.push(y)}},"call$2",null,4,0,null,12,[],23,[],"call"],
+z.push(y)}},"call$2",null,4,0,null,12,[],28,[],"call"],
$isEH:true},
HS:{
"^":"a;EJ<,bX",
@@ -23497,7 +23651,7 @@
if(0>=z.length)return H.e(z,0)
y=H.d(z[0])+H.d(a)
if(3>=z.length)return H.e(z,3)
-return y+H.d(z[3])},"call$1","gBg",2,0,621,23,[]],
+return y+H.d(z[3])},"call$1","gBg",2,0,628,28,[]],
DJ:[function(a){var z,y,x,w,v,u,t
z=this.EJ
if(0>=z.length)return H.e(z,0)
@@ -23508,7 +23662,7 @@
if(t>=z.length)return H.e(z,t)
u=z[t]
u=typeof u==="string"?u:H.d(u)
-y.vM=y.vM+u}return y.vM},"call$1","gqD",2,0,622,623,[]],
+y.vM=y.vM+u}return y.vM},"call$1","gqD",2,0,629,630,[]],
Yn:function(a){this.bX=this.EJ.length===4?this.gBg():this.gqD()}},
TG:{
"^":"a;e9,YC,xG,pq,t9,A7,js,Q3,JM,d6,rV,yO,XV,eD,FS,IY,U9,DO,Fy",
@@ -23521,28 +23675,28 @@
if(!z&&!this.js){this.Az(null)
return}y=z?this.JM:this.d6
x=z?this.yO:this.XV
-if(!this.Q3)w=L.ao(y,x,z?null:new M.ts())
+if(!this.Q3)w=L.ao(y,x,z?null:new M.VU())
else{v=[]
w=new Y.J3(v,[],null,new M.Kj(z),!1,!1,null,null)
v.push(L.ao(y,x,null))
z=this.rV
u=this.eD
v.push(L.ao(z,u,null))
-w.wE(0)}this.FS=w.gUj(w).yI(new M.VU(this))
-this.Az(w.gP(w))},"call$0","gjM",0,0,113],
+w.wE(0)}this.FS=w.gUj(w).yI(new M.R7(this))
+this.Az(w.gP(w))},"call$0","gjM",0,0,115],
Az:[function(a){var z,y,x,w
z=this.xG
this.Gb()
y=J.w1(a)
if(typeof a==="object"&&a!==null&&(a.constructor===Array||!!y.$isList)){this.xG=a
-x=a}else if(typeof a==="object"&&a!==null&&(a.constructor===Array||!!y.$iscX)){x=y.br(a)
+x=a}else if(typeof a==="object"&&a!==null&&(a.constructor===Array||!!y.$isQV)){x=y.br(a)
this.xG=x}else{this.xG=null
x=null}if(x!=null&&typeof a==="object"&&a!==null&&!!y.$iswn)this.IY=a.gvp().yI(this.gZX())
y=z!=null?z:[]
x=this.xG
x=x!=null?x:[]
w=G.jj(x,0,J.q8(x),y,0,J.q8(y))
-if(w.length!==0)this.El(w)},"call$1","gbe",2,0,null,234,[]],
+if(w.length!==0)this.El(w)},"call$1","ghC",2,0,null,230,[]],
wx:[function(a){var z,y,x,w
z=J.x(a)
if(z.n(a,-1))return this.e9.N1
@@ -23555,7 +23709,7 @@
if(z)return x
w=M.Ky(x).gkr()
if(w==null)return x
-return w.wx(C.jn.cU(w.YC.length,2)-1)},"call$1","gzm",2,0,null,47,[]],
+return w.wx(C.jn.cU(w.YC.length,2)-1)},"call$1","gzt",2,0,null,52,[]],
lP:[function(a,b,c,d){var z,y,x,w,v,u
z=J.Wx(a)
y=this.wx(z.W(a,1))
@@ -23568,7 +23722,7 @@
v=J.TZ(this.e9.N1)
u=J.tx(y)
if(x)v.insertBefore(b,u)
-else if(c!=null)for(z=J.GP(c);z.G();)v.insertBefore(z.gl(),u)},"call$4","gaF",8,0,null,47,[],209,[],624,[],286,[]],
+else if(c!=null)for(z=J.GP(c);z.G();)v.insertBefore(z.gl(),u)},"call$4","gaF",8,0,null,52,[],207,[],631,[],285,[]],
MC:[function(a){var z,y,x,w,v,u,t,s
z=[]
z.$builtinTypeInfo=[W.KV]
@@ -23585,7 +23739,7 @@
if(s==null?w==null:s===w)w=x
v=s.parentNode
if(v!=null)v.removeChild(s)
-z.push(s)}return new M.Ya(z,t)},"call$1","gLu",2,0,null,47,[]],
+z.push(s)}return new M.Ya(z,t)},"call$1","gtx",2,0,null,52,[]],
El:[function(a){var z,y,x,w,v,u,t,s,r,q,p,o,n,m,l,k
if(this.pq)return
z=this.e9
@@ -23611,9 +23765,9 @@
k=null}else{m=[]
if(this.DO!=null)o=this.Mv(o)
k=o!=null?z.a5(o,v,m):null
-l=null}this.lP(p,k,l,m)}}for(z=u.gUQ(u),z=H.VM(new H.MH(null,J.GP(z.l6),z.T6),[H.Kp(z,0),H.Kp(z,1)]);z.G();)this.uS(J.AB(z.lo))},"call$1","gZX",2,0,625,255,[]],
+l=null}this.lP(p,k,l,m)}}for(z=u.gUQ(u),z=H.VM(new H.MH(null,J.GP(z.l6),z.T6),[H.Kp(z,0),H.Kp(z,1)]);z.G();)this.uS(J.AB(z.lo))},"call$1","gZX",2,0,632,251,[]],
uS:[function(a){var z
-for(z=J.GP(a);z.G();)J.wC(z.gl())},"call$1","gYl",2,0,null,286,[]],
+for(z=J.GP(a);z.G();)J.wC(z.gl())},"call$1","gYl",2,0,null,285,[]],
Gb:[function(){var z=this.IY
if(z==null)return
z.ed()
@@ -23627,30 +23781,30 @@
if(z!=null){z.ed()
this.FS=null}this.e9.kr=null
this.pq=!0},"call$0","gJK",0,0,null]},
-ts:{
-"^":"Tp:107;",
-call$1:[function(a){return[a]},"call$1",null,2,0,null,21,[],"call"],
+VU:{
+"^":"Tp:112;",
+call$1:[function(a){return[a]},"call$1",null,2,0,null,26,[],"call"],
$isEH:true},
Kj:{
-"^":"Tp:536;a",
+"^":"Tp:633;a",
call$1:[function(a){var z,y,x
z=J.U6(a)
y=z.t(a,0)
x=z.t(a,1)
if(!(null!=x&&!1!==x))return
-return this.a?y:[y]},"call$1",null,2,0,null,623,[],"call"],
+return this.a?y:[y]},"call$1",null,2,0,null,630,[],"call"],
$isEH:true},
-VU:{
-"^":"Tp:107;b",
-call$1:[function(a){return this.b.Az(J.iZ(J.MQ(a)))},"call$1",null,2,0,null,424,[],"call"],
+R7:{
+"^":"Tp:112;b",
+call$1:[function(a){return this.b.Az(J.iZ(J.MQ(a)))},"call$1",null,2,0,null,392,[],"call"],
$isEH:true},
Ya:{
"^":"a;yT>,kU>",
$isYa:true},
XT:{
-"^":"hs;N1,mD,Ck",
+"^":"TU;N1,mD,Ck",
Z1:[function(a,b,c,d){var z,y,x
-if(!J.de(b,"text"))return M.hs.prototype.Z1.call(this,this,b,c,d)
+if(!J.de(b,"text"))return M.TU.prototype.Z1.call(this,this,b,c,d)
this.Ih(0,b)
z=this.gCd(this)
y=this.N1
@@ -23658,11 +23812,11 @@
x=new M.ic(y,c,null,null,"text",x)
x.Og(y,"text",c,d)
z.u(0,b,x)
-return x},"call$3","gxfG",4,2,null,77,12,[],285,[],265,[]]},
+return x},"call$3","gxfG",4,2,null,82,12,[],284,[],261,[]]},
ic:{
"^":"TR;qP,ZY,xS,PB,eS,ay",
EC:[function(a){var z=this.qP
-J.c9(z,a==null?"":H.d(a))},"call$1","gH0",2,0,null,234,[]]},
+J.c9(z,a==null?"":H.d(a))},"call$1","gH0",2,0,null,230,[]]},
wl:{
"^":"V2;N1,mD,Ck",
gN1:function(){return this.N1},
@@ -23670,7 +23824,7 @@
if(!J.de(b,"value"))return M.V2.prototype.Z1.call(this,this,b,c,d)
z=this.gN1()
y=J.x(z)
-J.MV(typeof z==="object"&&z!==null&&!!y.$ishs?z:this,b)
+J.MV(typeof z==="object"&&z!==null&&!!y.$isTU?z:this,b)
J.Vs(this.N1).Rz(0,b)
z=this.gCd(this)
x=this.N1
@@ -23679,14 +23833,15 @@
y.Og(x,"value",c,d)
y.Ca=M.IP(x).yI(y.gqf())
z.u(0,b,y)
-return y},"call$3","gxfG",4,2,null,77,12,[],285,[],265,[]]}}],["template_binding.src.binding_delegate","package:template_binding/src/binding_delegate.dart",,O,{
+return y},"call$3","gxfG",4,2,null,82,12,[],284,[],261,[]]}}],["template_binding.src.binding_delegate","package:template_binding/src/binding_delegate.dart",,O,{
"^":"",
-T4:{
+ve:{
"^":"a;"}}],["template_binding.src.node_binding","package:template_binding/src/node_binding.dart",,X,{
"^":"",
TR:{
"^":"a;qP<",
gH:function(){return this.qP},
+gk8:function(){return this.ZY},
gP:function(a){return J.Vm(this.xS)},
r6:function(a,b){return this.gP(this).call$1(b)},
sP:function(a,b){J.ta(this.xS,b)},
@@ -23709,70 +23864,50 @@
this.EC(J.Vm(this.xS))},
$isTR:true},
VD:{
-"^":"Tp:107;a",
+"^":"Tp:112;a",
call$1:[function(a){var z=this.a
-return z.EC(J.Vm(z.xS))},"call$1",null,2,0,null,424,[],"call"],
-$isEH:true}}],["vm_element","package:observatory/src/elements/vm_element.dart",,R,{
-"^":"",
-Zt:{
-"^":["Dsd;Jh%-353,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0-412",null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
-gzf:[function(a){return a.Jh},null,null,1,0,626,"vm",355,397],
-szf:[function(a,b){a.Jh=this.ct(a,C.DD,a.Jh,b)},null,null,3,0,627,23,[],"vm",355],
-"@":function(){return[C.rm]},
-static:{xip:[function(a){var z,y,x,w
-z=$.Nd()
-y=P.Py(null,null,null,J.O,W.I0)
-x=J.O
-w=W.cv
-w=H.VM(new V.qC(P.Py(null,null,null,x,w),null,null),[x,w])
-a.SO=z
-a.B7=y
-a.X0=w
-C.Qh.ZL(a)
-C.Qh.G6(a)
-return a},null,null,0,0,113,"new VMElement$created"]}},
-"+VMElement":[628],
-Dsd:{
-"^":"uL+Pi;",
-$isd3:true}}],])
+return z.EC(J.Vm(z.xS))},"call$1",null,2,0,null,392,[],"call"],
+$isEH:true}}],])
I.$finishClasses($$,$,null)
$$=null
J.O.$isString=true
-J.O.$isRz=true
-J.O.$asRz=[J.O]
+J.O.$isTx=true
+J.O.$asTx=[J.O]
J.O.$isa=true
-J.P.$isRz=true
-J.P.$asRz=[J.P]
+J.P.$isTx=true
+J.P.$asTx=[J.P]
J.P.$isa=true
J.im.$isint=true
-J.im.$isRz=true
-J.im.$asRz=[J.P]
-J.im.$isRz=true
-J.im.$asRz=[J.P]
-J.im.$isRz=true
-J.im.$asRz=[J.P]
+J.im.$isTx=true
+J.im.$asTx=[J.P]
+J.im.$isTx=true
+J.im.$asTx=[J.P]
+J.im.$isTx=true
+J.im.$asTx=[J.P]
J.im.$isa=true
J.GW.$isdouble=true
-J.GW.$isRz=true
-J.GW.$asRz=[J.P]
-J.GW.$isRz=true
-J.GW.$asRz=[J.P]
+J.GW.$isTx=true
+J.GW.$asTx=[J.P]
+J.GW.$isTx=true
+J.GW.$asTx=[J.P]
J.GW.$isa=true
W.KV.$isKV=true
W.KV.$isD0=true
W.KV.$isa=true
W.M5.$isa=true
-N.qV.$isRz=true
-N.qV.$asRz=[N.qV]
+W.yg.$isa=true
+W.uj.$isa=true
+N.qV.$isTx=true
+N.qV.$asTx=[N.qV]
N.qV.$isa=true
P.a6.$isa6=true
-P.a6.$isRz=true
-P.a6.$asRz=[P.a6]
+P.a6.$isTx=true
+P.a6.$asTx=[P.a6]
P.a6.$isa=true
-P.Od.$isa=true
J.Q.$isList=true
-J.Q.$iscX=true
+J.Q.$isQV=true
J.Q.$isa=true
+P.Od.$isa=true
P.a.$isa=true
W.cv.$iscv=true
W.cv.$isKV=true
@@ -23806,11 +23941,25 @@
U.kB.$isa=true
K.Ae.$isAe=true
K.Ae.$isa=true
+D.rj.$isaf=true
+D.rj.$isa=true
+D.kx.$iskx=true
+D.kx.$isaf=true
+D.kx.$isa=true
+D.SI.$isSI=true
+D.SI.$isaf=true
+D.SI.$isqC=true
+D.SI.$asqC=[null,null]
+D.SI.$isZ0=true
+D.SI.$asZ0=[null,null]
+D.SI.$isa=true
N.TJ.$isa=true
P.wv.$iswv=true
P.wv.$isa=true
J.kn.$isbool=true
J.kn.$isa=true
+T.z2.$isz2=true
+T.z2.$isa=true
W.OJ.$isea=true
W.OJ.$isa=true
A.XP.$isXP=true
@@ -23838,9 +23987,9 @@
P.ej.$isa=true
P.RY.$isej=true
P.RY.$isa=true
-P.ac.$isX9=true
-P.ac.$isej=true
-P.ac.$isa=true
+P.Fw.$isX9=true
+P.Fw.$isej=true
+P.Fw.$isa=true
P.X9.$isX9=true
P.X9.$isej=true
P.X9.$isa=true
@@ -23853,16 +24002,14 @@
P.Ys.$isa=true
X.TR.$isa=true
F.d3.$isa=true
-T.z2.$isz2=true
-T.z2.$isa=true
P.MO.$isMO=true
P.MO.$isa=true
W.ea.$isea=true
W.ea.$isa=true
P.qh.$isqh=true
P.qh.$isa=true
-W.CX.$isea=true
-W.CX.$isa=true
+W.Wp.$isea=true
+W.Wp.$isa=true
G.DA.$isDA=true
G.DA.$isa=true
M.Ya.$isa=true
@@ -23890,17 +24037,20 @@
W.I0.$isKV=true
W.I0.$isD0=true
W.I0.$isa=true
-W.Hy.$isea=true
-W.Hy.$isa=true
+W.cx.$isea=true
+W.cx.$isa=true
+D.bv.$isbv=true
+D.bv.$isaf=true
+D.bv.$isa=true
+D.c2.$isa=true
+D.Vi.$isVi=true
+D.Vi.$isa=true
+D.Q4.$isa=true
+D.N8.$isa=true
W.zU.$isD0=true
W.zU.$isa=true
W.ew.$isea=true
W.ew.$isa=true
-G.kx.$iskx=true
-G.kx.$isa=true
-G.rj.$isa=true
-G.c2.$isc2=true
-G.c2.$isa=true
W.tV.$iscv=true
W.tV.$isKV=true
W.tV.$isD0=true
@@ -23927,39 +24077,41 @@
H.Uz.$isa=true
P.e4.$ise4=true
P.e4.$isa=true
-P.JB.$isJB=true
-P.JB.$isa=true
-P.Z0.$isZ0=true
-P.Z0.$isa=true
-G.Vi.$isVi=true
-G.Vi.$isa=true
+P.dl.$isdl=true
+P.dl.$isa=true
+V.qC.$isqC=true
+V.qC.$isZ0=true
+V.qC.$isa=true
P.jp.$isjp=true
P.jp.$isa=true
+P.Tx.$isTx=true
+P.Tx.$isa=true
W.D0.$isD0=true
W.D0.$isa=true
-P.Rz.$isRz=true
-P.Rz.$isa=true
P.aY.$isaY=true
P.aY.$isa=true
-P.lO.$islO=true
-P.lO.$isa=true
-P.cX.$iscX=true
-P.cX.$isa=true
+P.Z0.$isZ0=true
+P.Z0.$isa=true
+P.tU.$istU=true
+P.tU.$isa=true
+P.QV.$isQV=true
+P.QV.$isa=true
P.nP.$isnP=true
P.nP.$isa=true
P.iP.$isiP=true
-P.iP.$isRz=true
-P.iP.$asRz=[null]
+P.iP.$isTx=true
+P.iP.$asTx=[null]
P.iP.$isa=true
-P.ti.$isti=true
-P.ti.$isa=true
+P.fIm.$isfIm=true
+P.fIm.$isa=true
P.b8.$isb8=true
P.b8.$isa=true
+D.af.$isaf=true
+D.af.$isa=true
+K.z6.$isz6=true
+K.z6.$isa=true
P.EH.$isEH=true
P.EH.$isa=true
-$.$signature_bh={func:"bh",args:[null,null]}
-$.$signature_HB={func:"HB",ret:P.a,args:[P.a]}
-$.$signature_Dv={func:"Dv",args:[null]}
J.Qc=function(a){if(typeof a=="number")return J.P.prototype
if(typeof a=="string")return J.O.prototype
if(a==null)return a
@@ -23999,15 +24151,18 @@
J.AA=function(a){return J.RE(a).GB(a)}
J.AB=function(a){return J.RE(a).gkU(a)}
J.AG=function(a){return J.x(a).bu(a)}
+J.BM=function(a,b,c){return J.w1(a).xe(a,b,c)}
+J.Bl=function(a,b){if(typeof a=="number"&&typeof b=="number")return a<=b
+return J.Wx(a).E(a,b)}
J.C0=function(a,b){return J.w1(a).ez(a,b)}
J.CC=function(a){return J.RE(a).gmH(a)}
J.CJ=function(a,b){return J.RE(a).sB1(a,b)}
J.Co=function(a){return J.RE(a).gcC(a)}
-J.D8=function(a,b){return J.rY(a).yn(a,b)}
J.EC=function(a){return J.RE(a).giC(a)}
J.EY=function(a,b){return J.RE(a).od(a,b)}
J.Eg=function(a,b){return J.rY(a).Tc(a,b)}
J.Ez=function(a,b){return J.Wx(a).yM(a,b)}
+J.F6=function(a,b){return J.RE(a).stD(a,b)}
J.F8=function(a){return J.RE(a).gjO(a)}
J.FN=function(a){return J.U6(a).gl0(a)}
J.FW=function(a,b){if(typeof a=="number"&&typeof b=="number")return a/b
@@ -24015,24 +24170,19 @@
J.GJ=function(a,b,c,d){return J.RE(a).Y9(a,b,c,d)}
J.GL=function(a){return J.RE(a).gfN(a)}
J.GP=function(a){return J.w1(a).gA(a)}
-J.H4=function(a,b){return J.RE(a).wR(a,b)}
-J.Hb=function(a,b){if(typeof a=="number"&&typeof b=="number")return a<=b
-return J.Wx(a).E(a,b)}
J.Hf=function(a){return J.RE(a).gTq(a)}
-J.I8=function(a,b,c){return J.rY(a).wL(a,b,c)}
-J.IJ=function(a,b){return J.Wx(a).Z(a,b)}
J.IS=function(a){return J.RE(a).gnv(a)}
J.Ih=function(a,b,c){return J.RE(a).X6(a,b,c)}
J.Iz=function(a){return J.RE(a).gfY(a)}
J.J5=function(a,b){if(typeof a=="number"&&typeof b=="number")return a>=b
return J.Wx(a).F(a,b)}
J.JA=function(a,b,c){return J.rY(a).h8(a,b,c)}
-J.JD=function(a,b){return J.RE(a).R3(a,b)}
+J.JZ=function(a,b){return J.RE(a).st0(a,b)}
J.Jj=function(a,b,c,d){return J.RE(a).Z1(a,b,c,d)}
J.Jr=function(a,b){return J.RE(a).Id(a,b)}
J.K3=function(a,b){return J.RE(a).Kb(a,b)}
-J.KM=function(a){return J.RE(a).zr(a)}
J.Kv=function(a,b){return J.RE(a).jx(a,b)}
+J.L0=function(a,b,c,d,e){return J.w1(a).YW(a,b,c,d,e)}
J.LH=function(a,b){return J.w1(a).GT(a,b)}
J.LL=function(a){return J.Wx(a).HG(a)}
J.Lh=function(a,b,c){return J.RE(a).ek(a,b,c)}
@@ -24045,22 +24195,26 @@
J.N5=function(a,b){return J.RE(a).RP(a,b)}
J.NQ=function(a,b){return J.RE(a).bA(a,b)}
J.Ng=function(a){return J.RE(a).gxX(a)}
-J.Nj=function(a,b,c){return J.rY(a).Nj(a,b,c)}
-J.Nv=function(a,b,c){return J.w1(a).xe(a,b,c)}
J.O2=function(a,b){return J.RE(a).Ch(a,b)}
J.O6=function(a){return J.RE(a).goc(a)}
J.Or=function(a){return J.RE(a).yx(a)}
J.Pr=function(a,b){return J.w1(a).eR(a,b)}
J.Pw=function(a,b){return J.RE(a).sxr(a,b)}
+J.Q5=function(a,b,c,d){return J.RE(a).ct(a,b,c,d)}
J.QC=function(a){return J.w1(a).wg(a)}
J.QE=function(a){return J.RE(a).gCd(a)}
J.QM=function(a,b){return J.RE(a).Rg(a,b)}
-J.QQ=function(a,b,c,d,e){return J.w1(a).YW(a,b,c,d,e)}
+J.QP=function(a){return J.RE(a).gF1(a)}
+J.QQ=function(a,b){return J.RE(a).sRu(a,b)}
+J.Qr=function(a,b){return J.RE(a).skc(a,b)}
J.RF=function(a,b){return J.RE(a).WO(a,b)}
+J.SK=function(a){return J.RE(a).xW(a)}
+J.Sq=function(a,b){return J.RE(a).zY(a,b)}
J.TD=function(a){return J.RE(a).i4(a)}
J.TZ=function(a){return J.RE(a).gKV(a)}
J.Tr=function(a){return J.RE(a).gCj(a)}
-J.Tv=function(a){return J.RE(a).gB1(a)}
+J.Ts=function(a,b){return J.Wx(a).Z(a,b)}
+J.Tt=function(a,b){return J.RE(a).sNl(a,b)}
J.U2=function(a){return J.w1(a).V1(a)}
J.UK=function(a,b){return J.RE(a).RR(a,b)}
J.UN=function(a,b){if(typeof a=="number"&&typeof b=="number")return(a^b)>>>0
@@ -24078,7 +24232,9 @@
J.WB=function(a,b){if(typeof a=="number"&&typeof b=="number")return a+b
return J.Qc(a).g(a,b)}
J.WI=function(a){return J.RE(a).gG3(a)}
+J.WO=function(a){return J.RE(a).gV5(a)}
J.We=function(a,b){return J.RE(a).scC(a,b)}
+J.X8=function(a,b){return J.RE(a).srs(a,b)}
J.XS=function(a,b){return J.w1(a).zV(a,b)}
J.Xf=function(a,b){return J.RE(a).oo(a,b)}
J.Y5=function(a){return J.RE(a).gyT(a)}
@@ -24087,7 +24243,10 @@
J.Z7=function(a){if(typeof a=="number")return-a
return J.Wx(a).J(a)}
J.ZP=function(a,b){return J.RE(a).Tk(a,b)}
+J.ZZ=function(a,b){return J.rY(a).yn(a,b)}
+J.aK=function(a,b,c){return J.U6(a).XU(a,b,c)}
J.ak=function(a){return J.RE(a).gNF(a)}
+J.am=function(a){return J.RE(a).VD(a)}
J.bB=function(a){return J.x(a).gbx(a)}
J.bY=function(a,b){return J.Wx(a).Y(a,b)}
J.bi=function(a,b){return J.w1(a).h(a,b)}
@@ -24102,13 +24261,17 @@
J.de=function(a,b){if(a==null)return b==null
if(typeof a!="object")return b!=null&&a===b
return J.x(a).n(a,b)}
+J.dk=function(a,b){return J.RE(a).sMj(a,b)}
+J.dm=function(a){return J.RE(a).gi2(a)}
J.e2=function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p){return J.RE(a).nH(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p)}
-J.eJ=function(a,b){return J.U6(a).cn(a,b)}
+J.f2=function(a){return J.RE(a).gRd(a)}
J.f5=function(a){return J.RE(a).gI(a)}
-J.hf=function(a,b,c){return J.U6(a).XU(a,b,c)}
+J.fH=function(a,b){return J.RE(a).stT(a,b)}
+J.ff=function(a,b,c){return J.U6(a).Pk(a,b,c)}
J.i4=function(a,b){return J.w1(a).Zv(a,b)}
J.iG=function(a,b){return J.RE(a).szZ(a,b)}
J.iZ=function(a){return J.RE(a).gzZ(a)}
+J.iz=function(a,b){return J.RE(a).GE(a,b)}
J.jf=function(a,b){return J.x(a).T(a,b)}
J.kE=function(a,b){return J.U6(a).tg(a,b)}
J.kH=function(a,b){return J.w1(a).aN(a,b)}
@@ -24119,15 +24282,12 @@
J.lB=function(a){return J.RE(a).gP1(a)}
J.lE=function(a,b){return J.rY(a).j(a,b)}
J.m4=function(a){return J.RE(a).gig(a)}
-J.mQ=function(a,b){if(typeof a=="number"&&typeof b=="number")return(a&b)>>>0
-return J.Wx(a).i(a,b)}
+J.nJ=function(a){return J.RE(a).ga4(a)}
J.nX=function(a){return J.RE(a).gjb(a)}
J.oE=function(a,b){return J.Qc(a).iM(a,b)}
J.og=function(a,b){return J.RE(a).sIt(a,b)}
J.on=function(a){return J.RE(a).gtT(a)}
-J.p0=function(a,b){if(typeof a=="number"&&typeof b=="number")return a*b
-return J.Wx(a).U(a,b)}
-J.pB=function(a,b,c){return J.U6(a).Pk(a,b,c)}
+J.oq=function(a,b){return J.RE(a).si2(a,b)}
J.pO=function(a){return J.U6(a).gor(a)}
J.pP=function(a){return J.RE(a).gDD(a)}
J.pb=function(a,b){return J.w1(a).Vr(a,b)}
@@ -24141,8 +24301,8 @@
J.tH=function(a,b){return J.w1(a).KI(a,b)}
J.ta=function(a,b){return J.RE(a).sP(a,b)}
J.td=function(a){return J.RE(a).gng(a)}
+J.ti=function(a,b){return J.RE(a).sQr(a,b)}
J.tx=function(a){return J.RE(a).guD(a)}
-J.u1=function(a,b){return J.Wx(a).WZ(a,b)}
J.u3=function(a){return J.RE(a).geT(a)}
J.u6=function(a,b){if(typeof a=="number"&&typeof b=="number")return a<b
return J.Wx(a).C(a,b)}
@@ -24150,17 +24310,23 @@
J.uf=function(a){return J.RE(a).gxr(a)}
J.v1=function(a){return J.x(a).giO(a)}
J.vF=function(a){return J.RE(a).gbP(a)}
+J.vX=function(a,b){if(typeof a=="number"&&typeof b=="number")return a*b
+return J.Qc(a).U(a,b)}
J.vo=function(a,b){return J.w1(a).ev(a,b)}
J.w8=function(a){return J.RE(a).gkc(a)}
J.wC=function(a){return J.RE(a).cO(a)}
-J.wX=function(a){return J.RE(a).gGd(a)}
J.wc=function(a){return J.RE(a).gbG(a)}
J.wg=function(a,b){return J.U6(a).sB(a,b)}
J.xH=function(a,b){if(typeof a=="number"&&typeof b=="number")return a-b
return J.Wx(a).W(a,b)}
J.xR=function(a){return J.RE(a).ghf(a)}
+J.xW=function(a){return J.RE(a).e6(a)}
J.xq=function(a){return J.RE(a).gUj(a)}
+J.y9=function(a){return J.RE(a).lh(a)}
+J.yO=function(a,b){return J.RE(a).stN(a,b)}
J.yj=function(a){return J.RE(a).gG1(a)}
+J.yn=function(a,b){return J.RE(a).vV(a,b)}
+J.yxg=function(a){return J.RE(a).gGd(a)}
J.z8=function(a,b){if(typeof a=="number"&&typeof b=="number")return a>b
return J.Wx(a).D(a,b)}
J.zH=function(a){return J.RE(a).gt5(a)}
@@ -24177,23 +24343,24 @@
C.oD=new J.P()
C.Kn=new J.O()
C.mI=new K.nd()
+C.IU=new P.kF()
C.Us=new A.yL()
-C.nJ=new K.vly()
+C.Nw=new K.vly()
C.Wj=new P.JF()
-C.za=new A.jh()
+C.xd=new A.jh()
C.NU=new P.R8()
-C.v8=new P.nU()
-C.xE=A.wM.prototype
+C.v8=new P.W5()
+C.xE=A.iL.prototype
C.YZ=Q.Tg.prototype
-C.kk=Z.Ps.prototype
-C.WA=new G.WAE("Collected")
-C.l8=new G.WAE("Dart")
-C.nj=new G.WAE("Native")
+C.kk=Z.Jc.prototype
+C.WA=new D.WAE("Collected")
+C.l8=new D.WAE("Dart")
+C.nj=new D.WAE("Native")
+C.yP=new D.WAE("Reused")
C.IK=O.CN.prototype
-C.YD=F.HT.prototype
+C.YD=F.Be.prototype
C.j8=R.E0.prototype
C.O0=R.lw.prototype
-C.Vy=new A.V3("disassembly-entry")
C.Br=new A.V3("observatory-element")
C.dA=new A.V3("heap-profile")
C.I3=new A.V3("script-view")
@@ -24201,58 +24368,56 @@
C.E6=new A.V3("field-ref")
C.aM=new A.V3("isolate-summary")
C.Is=new A.V3("response-viewer")
-C.qT=new A.V3("nav-menu-item")
+C.nh=new A.V3("nav-menu-item")
C.KI=new A.V3("library-nav-menu")
+C.hpj=new A.V3("service-view")
C.nu=new A.V3("function-view")
C.jR=new A.V3("isolate-profile")
-C.xW=new A.V3("code-view")
-C.aQx=new A.V3("class-view")
+C.xz=new A.V3("code-view")
+C.oY=new A.V3("class-view")
C.Gg=new A.V3("library-view")
C.U8=new A.V3("code-ref")
-C.rc=new A.V3("message-viewer")
-C.rm=new A.V3("vm-element")
C.NT=new A.V3("top-nav-menu")
-C.Yi=new A.V3("stack-trace")
-C.h9=new A.V3("script-ref")
+C.js=new A.V3("stack-trace")
+C.Ur=new A.V3("script-ref")
C.OS=new A.V3("class-ref")
C.jF=new A.V3("isolate-list")
C.jy=new A.V3("breakpoint-list")
C.VW=new A.V3("instance-ref")
C.Gu=new A.V3("collapsible-content")
C.pE=new A.V3("stack-frame")
-C.kR=new A.V3("observatory-application")
+C.bd=new A.V3("observatory-application")
+C.Qz=new A.V3("eval-box")
C.zaS=new A.V3("isolate-nav-menu")
C.t9=new A.V3("class-nav-menu")
C.uW=new A.V3("error-view")
C.pc=new A.V3("nav-menu")
C.KH=new A.V3("json-view")
-C.YQ=new A.V3("function-ref")
-C.QU=new A.V3("library-ref")
-C.EA=new A.V3("isolate-element")
-C.vc=new A.V3("field-view")
-C.Ldf=new A.V3("service-ref")
-C.nW=new A.V3("nav-bar")
+C.R0=new A.V3("function-ref")
+C.uy=new A.V3("library-ref")
+C.My=new A.V3("field-view")
+C.JD=new A.V3("service-ref")
+C.Ug=new A.V3("nav-bar")
C.DKS=new A.V3("curly-block")
C.be=new A.V3("instance-view")
-C.er=E.Fv.prototype
C.ny=new P.a6(0)
C.OD=F.E9.prototype
+C.Gh=L.rm.prototype
C.mt=H.VM(new W.e0("change"),[W.ea])
-C.pi=H.VM(new W.e0("click"),[W.CX])
+C.pi=H.VM(new W.e0("click"),[W.Wp])
C.MD=H.VM(new W.e0("error"),[W.ew])
C.PP=H.VM(new W.e0("hashchange"),[W.ea])
C.i3=H.VM(new W.e0("input"),[W.ea])
C.fK=H.VM(new W.e0("load"),[W.ew])
-C.ph=H.VM(new W.e0("message"),[W.Hy])
+C.Ns=H.VM(new W.e0("message"),[W.cx])
C.MC=D.m8.prototype
C.LT=A.Gk.prototype
-C.Xo=U.AX.prototype
-C.h4=N.yb.prototype
-C.RJ=K.NM.prototype
+C.Xo=U.qW.prototype
+C.Yu=N.mk.prototype
+C.Vc=K.jY.prototype
C.W3=W.zU.prototype
C.cp=B.pR.prototype
C.yK=Z.hx.prototype
-C.wx=S.PO.prototype
C.b9=L.u7.prototype
C.RR=A.fl.prototype
C.XH=X.E7.prototype
@@ -24396,15 +24561,15 @@
C.xr=new P.by(null,null)
C.A3=new P.Cf(null)
C.Ap=new P.pD(null)
-C.GB=Z.vj.prototype
+C.Yt=Z.vj.prototype
C.VZ=new N.qV("FINER",400)
C.R5=new N.qV("FINE",500)
C.IF=new N.qV("INFO",800)
C.cV=new N.qV("SEVERE",1000)
C.UP=new N.qV("WARNING",900)
-C.S3=A.oM.prototype
+C.ct=A.Zt.prototype
C.Z3=R.LU.prototype
-C.MG=M.T2.prototype
+C.MG=M.KL.prototype
I.makeConstantList = function(list) {
list.immutable$list = init;
list.fixed$length = init;
@@ -24412,33 +24577,34 @@
};
C.HE=I.makeConstantList([0,0,26624,1023,0,0,65534,2047])
C.mK=I.makeConstantList([0,0,26624,1023,65534,2047,65534,2047])
+C.yD=I.makeConstantList([0,0,26498,1023,65534,34815,65534,18431])
C.PQ=I.makeConstantList(["active","success","warning","danger","info"])
C.xu=I.makeConstantList([43,45,42,47,33,38,60,61,62,63,94,124])
C.u0=I.makeConstantList(["==","!=","<=",">=","||","&&"])
C.Me=H.VM(I.makeConstantList([]),[P.Ms])
-C.dn=H.VM(I.makeConstantList([]),[P.ac])
+C.dn=H.VM(I.makeConstantList([]),[P.Fw])
C.hU=H.VM(I.makeConstantList([]),[P.X9])
C.iH=H.VM(I.makeConstantList([]),[J.im])
C.xD=I.makeConstantList([])
C.Qy=I.makeConstantList(["in","this"])
C.kg=I.makeConstantList([0,0,24576,1023,65534,34815,65534,18431])
+C.aa=I.makeConstantList([0,0,32754,11263,65534,34815,65534,18431])
C.Wd=I.makeConstantList([0,0,32722,12287,65535,34815,65534,18431])
C.iq=I.makeConstantList([40,41,91,93,123,125])
-C.zJ=I.makeConstantList(["caption","col","colgroup","option","optgroup","tbody","td","tfoot","th","thead","tr"])
-C.uE=new H.LPe(11,{caption:null,col:null,colgroup:null,option:null,optgroup:null,tbody:null,td:null,tfoot:null,th:null,thead:null,tr:null},C.zJ)
+C.jH=I.makeConstantList(["caption","col","colgroup","option","optgroup","tbody","td","tfoot","th","thead","tr"])
+C.uE=new H.LPe(11,{caption:null,col:null,colgroup:null,option:null,optgroup:null,tbody:null,td:null,tfoot:null,th:null,thead:null,tr:null},C.jH)
C.uS=I.makeConstantList(["webkitanimationstart","webkitanimationend","webkittransitionend","domfocusout","domfocusin","animationend","animationiteration","animationstart","doubleclick","fullscreenchange","fullscreenerror","keyadded","keyerror","keymessage","needkey","speechchange"])
C.FS=new H.LPe(16,{webkitanimationstart:"webkitAnimationStart",webkitanimationend:"webkitAnimationEnd",webkittransitionend:"webkitTransitionEnd",domfocusout:"DOMFocusOut",domfocusin:"DOMFocusIn",animationend:"webkitAnimationEnd",animationiteration:"webkitAnimationIteration",animationstart:"webkitAnimationStart",doubleclick:"dblclick",fullscreenchange:"webkitfullscreenchange",fullscreenerror:"webkitfullscreenerror",keyadded:"webkitkeyadded",keyerror:"webkitkeyerror",keymessage:"webkitkeymessage",needkey:"webkitneedkey",speechchange:"webkitSpeechChange"},C.uS)
-C.a5k=I.makeConstantList(["!",":",",",")","]","}","?","||","&&","|","^","&","!=","==",">=",">","<=","<","+","-","%","/","*","(","[",".","{"])
-C.dj=new H.LPe(27,{"!":0,":":0,",":0,")":0,"]":0,"}":0,"?":1,"||":2,"&&":3,"|":4,"^":5,"&":6,"!=":7,"==":7,">=":8,">":8,"<=":8,"<":8,"+":9,"-":9,"%":10,"/":10,"*":10,"(":11,"[":11,".":11,"{":11},C.a5k)
-C.paX=I.makeConstantList(["name","extends","constructor","noscript","attributes"])
-C.kr=new H.LPe(5,{name:1,extends:1,constructor:1,noscript:1,attributes:1},C.paX)
+C.p5=I.makeConstantList(["!",":",",",")","]","}","?","||","&&","|","^","&","!=","==",">=",">","<=","<","+","-","%","/","*","(","[",".","{"])
+C.dj=new H.LPe(27,{"!":0,":":0,",":0,")":0,"]":0,"}":0,"?":1,"||":2,"&&":3,"|":4,"^":5,"&":6,"!=":7,"==":7,">=":8,">":8,"<=":8,"<":8,"+":9,"-":9,"%":10,"/":10,"*":10,"(":11,"[":11,".":11,"{":11},C.p5)
+C.pa=I.makeConstantList(["name","extends","constructor","noscript","attributes"])
+C.kr=new H.LPe(5,{name:1,extends:1,constructor:1,noscript:1,attributes:1},C.pa)
C.MEG=I.makeConstantList(["enumerate"])
C.va=new H.LPe(1,{enumerate:K.UM()},C.MEG)
-C.Wp=L.PF.prototype
C.S2=W.H9.prototype
C.kD=A.F1.prototype
C.SU=A.aQ.prototype
-C.nn=A.Ya5.prototype
+C.nn=A.Qa.prototype
C.J7=A.Ww.prototype
C.t5=W.yk.prototype
C.k0=V.lI.prototype
@@ -24448,25 +24614,23 @@
C.Cc=Q.JG.prototype
C.c0=A.knI.prototype
C.cJ=U.fI.prototype
+C.ZO=U.ob.prototype
C.wU=Q.xI.prototype
C.dX=K.nm.prototype
-C.bg=X.uwf.prototype
+C.bg=X.Vu.prototype
C.PU=new H.GD("dart.core.Object")
C.N4=new H.GD("dart.core.DateTime")
-C.Ts=new H.GD("dart.core.bool")
+C.Kc=new H.GD("dart.core.bool")
C.fz=new H.GD("[]")
C.aP=new H.GD("active")
-C.Es=new H.GD("anchor")
+C.cg=new H.GD("anchor")
C.wh=new H.GD("app")
C.S4=new H.GD("busy")
C.Ka=new H.GD("call")
C.AV=new H.GD("callback")
C.XA=new H.GD("cls")
C.b1=new H.GD("code")
-C.EX=new H.GD("codeRef")
-C.C2=new H.GD("coveredPercentageFormatted")
C.h1=new H.GD("currentHash")
-C.tv=new H.GD("currentHashUri")
C.Na=new H.GD("devtools")
C.Jw=new H.GD("displayValue")
C.nN=new H.GD("dynamic")
@@ -24474,153 +24638,148 @@
C.YU=new H.GD("error")
C.mr=new H.GD("expanded")
C.WQ=new H.GD("field")
-C.SK=new H.GD("fileAndLine")
+C.CX=new H.GD("fileAndLine")
C.Aq=new H.GD("formattedAverage")
C.WG=new H.GD("formattedCollections")
+C.uU=new H.GD("formattedExclusiveTicks")
+C.EF=new H.GD("formattedInclusiveTicks")
C.ST=new H.GD("formattedTotalCollectionTime")
C.rE=new H.GD("frame")
C.nf=new H.GD("function")
-C.yg=new H.GD("functionRef")
-C.D2=new H.GD("hasCurrentIsolate")
-C.K7=new H.GD("hits")
+C.zS=new H.GD("hasDisassembly")
C.YH=new H.GD("hitsStyle")
C.bA=new H.GD("hoverText")
C.AZ=new H.GD("dart.core.String")
C.Di=new H.GD("iconClass")
C.fn=new H.GD("instance")
-C.i6=new H.GD("instruction")
C.zD=new H.GD("internal")
C.ai=new H.GD("isEmpty")
C.nZ=new H.GD("isNotEmpty")
C.Z8=new H.GD("isolate")
+C.za=new H.GD("isolates")
C.Gd=new H.GD("json")
C.fy=new H.GD("kind")
+C.hf=new H.GD("label")
C.QL=new H.GD("last")
C.Wn=new H.GD("length")
C.EV=new H.GD("library")
-C.cg=new H.GD("libraryRef")
C.Cv=new H.GD("line")
+C.eh=new H.GD("lineMode")
C.dB=new H.GD("link")
C.PC=new H.GD("dart.core.int")
-C.US=new H.GD("messageType")
+C.h2=new H.GD("message")
C.fQ=new H.GD("methodCountSelected")
C.UX=new H.GD("msg")
C.YS=new H.GD("name")
C.IO=new H.GD("newHeapUsed")
C.OV=new H.GD("noSuchMethod")
+C.VJ=new H.GD("object")
C.ap=new H.GD("oldHeapUsed")
-C.tI=new H.GD("percent")
C.vb=new H.GD("profile")
C.kY=new H.GD("ref")
C.Dj=new H.GD("refreshTime")
C.c8=new H.GD("registerCallback")
C.mE=new H.GD("response")
+C.Aa=new H.GD("results")
C.iF=new H.GD("rootLib")
C.ok=new H.GD("dart.core.Null")
C.md=new H.GD("dart.core.double")
C.XU=new H.GD("sampleCount")
C.fX=new H.GD("script")
-C.Be=new H.GD("scriptRef")
C.eC=new H.GD("[]=")
-C.Kt=new H.GD("shortName")
-C.MB=new H.GD("text")
-C.p1=new H.GD("ticks")
-C.jI=new H.GD("topExclusiveCodes")
+C.V0=new H.GD("showCoverage")
+C.mi=new H.GD("text")
C.ch=new H.GD("topFrame")
+C.QK=new H.GD("totalSamplesInProfile")
C.kw=new H.GD("trace")
C.ep=new H.GD("tree")
C.Fh=new H.GD("url")
-C.ct=new H.GD("userName")
C.ls=new H.GD("value")
C.eR=new H.GD("valueType")
-C.DD=new H.GD("vm")
C.KS=new H.GD("vmName")
-C.z9=new H.GD("void")
+C.v6=new H.GD("void")
C.lx=A.tz.prototype
C.SX=H.mm('qC')
C.WP=new H.Lm(C.SX,"K",0)
C.SL=H.mm('Ae')
C.xC=new H.Lm(C.SL,"V",0)
-C.QJ=H.mm('xh')
-C.wW=new H.Lm(C.QJ,"T",0)
+C.Yn=H.mm('xh')
+C.wW=new H.Lm(C.Yn,"T",0)
C.Gsc=H.mm('wn')
C.io=new H.Lm(C.Gsc,"E",0)
C.nz=new H.Lm(C.SX,"V",0)
C.RP=H.mm('hx')
C.Ln=H.mm('Dg')
C.z6Y=H.mm('Tg')
+C.IZ=H.mm('rm')
C.eY=H.mm('n6')
C.Vh=H.mm('Pz')
-C.I5=H.mm('JG')
+C.zq=H.mm('Qa')
+C.tf=H.mm('Zt')
+C.RJ=H.mm('JG')
+C.Ye=H.mm('qW')
C.z7=H.mm('G6')
C.Ma=H.mm('F1')
C.nY=H.mm('a')
C.Yc=H.mm('iP')
+C.jRs=H.mm('Be')
C.kA=H.mm('u7')
C.PT=H.mm('I2')
C.Wup=H.mm('LZ')
C.P0k=H.mm('lI')
-C.Lz=H.mm('PO')
C.T1=H.mm('Wy')
C.hG=H.mm('ir')
C.aj=H.mm('fI')
-C.Qw=H.mm('Fv')
C.la=H.mm('ZX')
C.G4=H.mm('CN')
C.O4=H.mm('double')
C.yw=H.mm('int')
-C.Mh=H.mm('Zt')
-C.Lf0=H.mm('uwf')
C.RcY=H.mm('aQ')
-C.ld=H.mm('AX')
+C.KJ=H.mm('mk')
C.yiu=H.mm('knI')
-C.oW=H.mm('Ya5')
C.iN=H.mm('yc')
C.HI=H.mm('Pg')
C.ila=H.mm('xI')
C.lk=H.mm('mJ')
C.lpG=H.mm('LU')
+C.Yte=H.mm('KL')
C.mR=H.mm('fl')
C.jV=H.mm('rF')
-C.JZ=H.mm('E7')
-C.wd=H.mm('vj')
+C.SB=H.mm('E7')
+C.Tq=H.mm('vj')
C.JW=H.mm('Ww')
-C.Rg=H.mm('yb')
-C.wHJ=H.mm('Kz')
+C.qo=H.mm('jY')
+C.wH=H.mm('Kz')
C.cx5=H.mm('m8')
C.l49=H.mm('uL')
C.yQ=H.mm('EH')
C.Im=H.mm('X6')
-C.GG=H.mm('PF')
C.FU=H.mm('lw')
-C.p5=H.mm('oM')
-C.yD=H.mm('E0')
+C.rd6=H.mm('E0')
C.nG=H.mm('zt')
C.yG=H.mm('nm')
-C.vA=H.mm('tz')
-C.ow=H.mm('E9')
-C.PV=H.mm('wM')
+C.px=H.mm('tz')
+C.epC=H.mm('Jc')
+C.Fd=H.mm('E9')
C.Db=H.mm('String')
-C.EP=H.mm('NM')
C.Bm=H.mm('XP')
-C.Tn=H.mm('T2')
C.hg=H.mm('hd')
-C.dd=H.mm('pR')
-C.Ud8=H.mm('Ps')
-C.Io=H.mm('HT')
+C.Fv=H.mm('ob')
+C.Wza=H.mm('pR')
C.HL=H.mm('bool')
C.Qf=H.mm('Null')
C.HH=H.mm('dynamic')
+C.l6=H.mm('iL')
C.Gp=H.mm('cw')
C.ri=H.mm('yy')
C.CS=H.mm('vm')
C.Hk=H.mm('Gk')
C.hN=H.mm('oI')
+C.r6=H.mm('Vu')
C.vB=J.is.prototype
C.xM=new P.z0(!1)
-C.Qh=R.Zt.prototype
C.ol=W.u9.prototype
-C.hi=H.VM(new W.hP(W.pq()),[W.OJ])
+C.hi=H.VM(new W.bO(W.pq()),[W.OJ])
$.libraries_to_load = {}
$.te="$cachedFunction"
$.eb="$cachedInvocation"
@@ -24652,8 +24811,8 @@
$.Bh=0
$.uP=!0
$.To=null
-$.Dq=["AZ","B2","BN","BT","BX","Ba","Bf","Bk","C","C0","C4","CL","Ch","D","D3","D6","Dd","De","E","Ec","F","FL","FV","Fr","G6","GB","GG","GT","HG","Hn","Hs","IW","Id","Ih","Is","J","J2","J3","JG","JP","JV","Ja","Jk","K1","KI","Kb","LV","Md","Mi","Mu","NZ","Nj","O","Om","On","PA","PM","PQ","PZ","Pa","Pk","Pv","Q0","Qi","Qq","Qx","R3","R4","RB","RF","RP","RR","Rg","Rz","SF","Se","T","TJ","TP","TW","Tc","Tk","Tp","Ty","U","UD","UH","UZ","Uc","V","V1","VR","Vk","Vr","W","W3","W4","WL","WO","WZ","Wj","Wt","X6","XG","XL","XU","Xl","Y","Y9","YF","YU","YW","Yh","Z","Z1","Z2","ZB","ZL","ZZ","Ze","Zv","aC","aN","aZ","bA","bS","bj","br","bu","cO","cU","cn","ct","d0","dR","dd","du","eR","ea","ek","eo","er","es","ev","ez","f6","f9","fk","fm","fz","g","gA","gAp","gAq","gAu","gAy","gB","gB1","gBW","gCO","gCY","gCd","gCj","gDD","gDt","gEh","gF0","gFR","gG0","gG1","gG3","gGQ","gGV","gGd","gGj","gHX","gHm","gHu","gI","gIF","gIt","gJ0","gJS","gJf","gJh","gJo","gJp","gKE","gKM","gKV","gLA","gLW","gLY","gLm","gLx","gM0","gMB","gMj","gN","gN7","gNF","gNh","gNl","gO3","gO9","gOc","gOl","gP","gP1","gPe","gPj","gPu","gPy","gQ7","gQW","gQg","gQr","gRA","gRd","gRn","gRu","gSB","gSS","gTB","gTq","gUQ","gUV","gUj","gUo","gUp","gUy","gUz","gVa","gVl","gW0","gWT","gX3","gXc","gXh","gXt","gZ8","gZC","gZf","ga4","gaK","gah","gai","gbG","gbP","gbV","gbx","gcC","gcL","gdU","geH","geJ","geT","geb","gey","gfN","gfY","gfb","gfc","ghU","ghf","gi9","giC","giO","gig","gjL","gjO","gjT","gjb","gk5","gkG","gkU","gkW","gkX","gkc","gkf","gkg","gkp","gl0","gl7","gm0","gm2","gmH","gmW","gmm","gn9","gng","gnv","gnx","goE","goc","gor","gpC","gpD","gpQ","gpo","gq3","gq6","gqO","gqY","gqn","grK","grU","grZ","grp","grs","gt0","gt5","gtD","gtH","gtN","gtT","gtY","gtp","guD","guw","guy","gvH","gvL","gvc","gvk","gvt","gwd","gx8","gxH","gxX","gxj","gxr","gxw","gyH","gyT","gys","gz1","gzP","gzZ","gzf","gzh","gzj","gzw","h","h8","hZ","hc","hr","i","i4","iF","iM","ii","iw","j","jh","jp","jx","k","k0","kO","ka","l5","lj","m","mK","n","nB","nC","nH","ni","np","nq","nt","oB","oC","oP","oW","oZ","od","oo","pM","pZ","pr","ps","q1","qA","qC","qH","qZ","r6","rJ","sAp","sAq","sAu","sAy","sB","sB1","sBW","sCO","sCY","sCd","sCj","sDt","sEh","sF0","sFR","sG1","sG3","sGQ","sGV","sGd","sGj","sHX","sHm","sHu","sIF","sIt","sJ0","sJS","sJh","sJo","sKM","sKV","sLA","sLW","sLY","sLx","sM0","sMB","sMj","sN","sN7","sNF","sNh","sNl","sO3","sO9","sOc","sOl","sP","sPe","sPj","sPu","sPy","sQ7","sQr","sRA","sRd","sRn","sRu","sSB","sSS","sTB","sTq","sUQ","sUo","sUp","sUy","sUz","sVa","sWT","sX3","sXc","sXh","sXt","sZ8","sZC","sa4","saK","sah","sai","sbG","sbP","sbV","scC","scL","sdU","seH","seJ","seT","seb","sfN","sfY","sfb","sfc","shU","shf","siC","sig","sjL","sjO","sjT","sjb","sk5","skG","skU","skW","skX","skc","skf","skg","skp","sl7","sm0","sm2","smH","sn9","sng","snv","snx","soE","soc","spC","spD","spQ","spo","sq3","sq6","sqO","sqY","srU","srZ","srs","st0","st5","stD","stN","stT","stY","suD","suw","suy","svH","svL","svk","svt","swd","sxH","sxX","sxj","sxr","sxw","syH","syT","sys","sz1","szZ","szf","szh","szj","szw","t","tZ","tg","tt","u","u8","uB","uW","w","wE","wH","wL","wR","wW","wY","wg","x3","xc","xe","xo","y0","yC","yF","yM","yN","yc","yn","yq","yu","yx","yy","z2","zV","zr"]
-$.Au=[C.RP,Z.hx,{created:Z.HC},C.Ln,H.Dg,{"":H.bu},C.z6Y,Q.Tg,{created:Q.rt},C.I5,Q.JG,{created:Q.Zo},C.z7,B.G6,{created:B.Dw},C.Ma,A.F1,{created:A.z5},C.kA,L.u7,{created:L.Cu},C.Wup,H.LZ,{"":H.UI},C.P0k,V.lI,{created:V.fv},C.Lz,S.PO,{created:S.O5},C.hG,A.ir,{created:A.oa},C.aj,U.fI,{created:U.Ry},C.Qw,E.Fv,{created:E.AH},C.G4,O.CN,{created:O.On},C.Mh,R.Zt,{created:R.xip},C.Lf0,X.uwf,{created:X.bV},C.RcY,A.aQ,{created:A.AJ},C.ld,U.AX,{created:U.wH},C.yiu,A.knI,{created:A.Th},C.oW,A.Ya5,{created:A.EL},C.HI,H.Pg,{"":H.aR},C.ila,Q.xI,{created:Q.lK},C.lpG,R.LU,{created:R.rA},C.mR,A.fl,{created:A.Yt},C.JZ,X.E7,{created:X.jD},C.wd,Z.vj,{created:Z.mA},C.JW,A.Ww,{created:A.ZC},C.Rg,N.yb,{created:N.N0},C.wHJ,D.Kz,{created:D.JR},C.cx5,D.m8,{created:D.Tt},C.l49,Z.uL,{created:Z.Hx},C.GG,L.PF,{created:L.A5},C.FU,R.lw,{created:R.fR},C.p5,A.oM,{created:A.IV},C.yD,R.E0,{created:R.Hv},C.yG,K.nm,{created:K.an},C.vA,A.tz,{created:A.J8},C.ow,F.E9,{created:F.TW},C.PV,A.wM,{created:A.lT},C.EP,K.NM,{created:K.op},C.Bm,A.XP,{created:A.XL},C.Tn,M.T2,{created:M.SP},C.hg,W.hd,{},C.dd,B.pR,{created:B.b4},C.Ud8,Z.Ps,{created:Z.zg},C.Io,F.HT,{created:F.Fe},C.ri,W.yy,{},C.Hk,A.Gk,{created:A.cY}]
+$.Dq=["A3","A5","AZ","B2","BN","BT","BX","Ba","Bf","C","C0","C4","Ch","Cn","Cp","Cx","D","D3","D6","DC","Dd","De","E","Ec","F","F6","FL","FV","Fr","Fv","G6","GB","GE","GG","GT","HG","Hn","Hs","Id","Ih","Is","J","J2","J3","JP","JV","Ja","Jk","K1","KI","KJ","Kb","LV","Md","Mi","Mu","NC","NZ","Nj","O","OP","Om","On","PA","PM","PQ","PZ","Pa","Pk","Pv","Q0","Qi","Qx","R3","R4","RB","RP","RR","RU","Rg","Rz","SF","SS","Se","T","TP","TW","Tc","Ti","Tk","Tp","Ty","U","UD","UH","UZ","Uc","V","V1","VD","VI","Vk","Vr","W","W3","W4","WO","WZ","X6","XG","XU","Xl","Y","Y9","YF","YU","YW","Yy","Z","Z1","Z2","Z3","ZB","ZF","ZL","ZZ","Zv","aC","aN","aZ","az","bA","bS","bj","br","bu","cO","cU","cn","ct","d0","dR","da","dd","du","e6","eR","ea","ek","eo","er","es","ev","ez","f6","fZ","fa","fk","fm","fz","g","gA","gAS","gAb","gAp","gAu","gAy","gB","gB1","gB3","gBA","gBP","gBW","gCO","gCY","gCd","gCj","gD5","gDD","gDt","gEh","gF0","gF1","gFR","gFT","gFw","gG0","gG1","gG3","gGQ","gGV","gGd","gHJ","gHX","gHm","gHq","gHu","gI","gIF","gIW","gIt","gJ0","gJS","gJf","gJo","gJy","gKM","gKU","gKV","gLA","gLY","gLm","gLn","gLx","gM0","gMB","gMj","gN","gN7","gNF","gNh","gNl","gO3","gO9","gOL","gOc","gOl","gP","gP1","gPK","gPe","gPj","gPu","gPw","gPy","gQ7","gQg","gQr","gRA","gRd","gRn","gRu","gSB","gTq","gUQ","gUj","gUo","gUy","gUz","gV4","gV5","gVa","gVl","gW0","gWA","gWT","gX3","gXc","gXh","gXt","gXx","gZ8","gZf","ga4","gai","gbG","gbP","gbV","gbx","gcC","gdU","geT","geb","gey","gfN","gfY","gfb","gfc","gfn","ghU","ghf","gho","gi2","gi9","giC","giO","gig","giy","gjL","gjO","gjT","gjb","gk5","gkG","gkU","gkW","gkc","gkf","gkg","gkp","gl0","gl7","gm2","gmC","gmH","gmW","gmm","gn9","gnN","gng","gnv","gnx","gnz","go6","goE","goc","gor","gpD","gpQ","gph","gq3","gq6","gqO","gqn","grK","grU","grZ","grs","gt0","gt5","gtD","gtH","gtN","gtT","gtY","gtf","gtp","guD","guw","gvH","gvL","gvc","gvk","gvt","gwd","gx8","gxA","gxH","gxX","gxj","gxr","gxw","gy4","gyH","gyT","gz1","gzP","gzW","gzZ","gzh","gzj","gzw","h","h8","hZ","hc","hr","hu","i","i4","i5","iF","iM","ib","ii","iw","j","j9","jh","jp","jx","k0","kO","l5","lh","lj","lp","m","mK","n","nC","nH","ni","nq","oB","oP","oW","oZ","od","oo","pM","pZ","pr","ps","q1","qA","qC","qZ","r6","rJ","sAS","sAb","sAp","sAu","sAy","sB","sB1","sB3","sBA","sBP","sBW","sCO","sCY","sCd","sCj","sDt","sEh","sF0","sF1","sFR","sFT","sFw","sG1","sG3","sGQ","sGV","sGd","sHJ","sHX","sHm","sHq","sHu","sIF","sIt","sJ0","sJS","sJo","sJy","sKM","sKU","sKV","sLA","sLY","sLn","sLx","sM0","sMB","sMj","sN","sN7","sNF","sNh","sNl","sO3","sO9","sOc","sOl","sP","sPK","sPe","sPj","sPu","sPw","sPy","sQ7","sQr","sRA","sRd","sRn","sRu","sSB","sTq","sUQ","sUo","sUy","sUz","sV4","sV5","sVa","sWA","sWT","sX3","sXc","sXh","sXt","sXx","sZ8","sa4","sai","sbG","sbP","sbV","scC","sdU","seT","seb","sfN","sfY","sfb","sfc","sfn","shU","shf","sho","si2","siC","sig","siy","sjL","sjO","sjT","sjb","sk5","skG","skU","skW","skc","skf","skg","skp","sl7","sm2","smC","smH","sn9","snN","sng","snv","snx","so6","soE","soc","spD","spQ","sph","sq3","sq6","sqO","srU","srZ","srs","st0","st5","stD","stN","stT","stY","stf","suD","suw","svH","svL","svk","svt","swd","sxA","sxH","sxX","sxj","sxr","sxw","sy4","syH","syT","sz1","szW","szZ","szh","szj","szw","t","tM","tZ","tg","tt","u","u8","uB","ub","vV","w","wE","wL","wW","wY","wg","wn","x3","xW","xc","xe","xo","y0","yC","yM","yN","yc","yn","yq","yu","yv","yx","yy","z2","z4","z6","zV","zY","zr"]
+$.Au=[C.RP,Z.hx,{created:Z.HC},C.Ln,H.Dg,{"":H.bu},C.z6Y,Q.Tg,{created:Q.rt},C.IZ,L.rm,{created:L.Rp},C.zq,A.Qa,{created:A.EL},C.tf,A.Zt,{created:A.IV},C.RJ,Q.JG,{created:Q.Zo},C.Ye,U.qW,{created:U.ZV},C.z7,B.G6,{created:B.Dw},C.Ma,A.F1,{created:A.z5},C.jRs,F.Be,{created:F.Fe},C.kA,L.u7,{created:L.Cu},C.Wup,H.LZ,{"":H.UI},C.P0k,V.lI,{created:V.fv},C.hG,A.ir,{created:A.oa},C.aj,U.fI,{created:U.Ry},C.G4,O.CN,{created:O.On},C.RcY,A.aQ,{created:A.AJ},C.KJ,N.mk,{created:N.N0},C.yiu,A.knI,{created:A.Th},C.HI,H.Pg,{"":H.aR},C.ila,Q.xI,{created:Q.lK},C.lpG,R.LU,{created:R.rA},C.Yte,M.KL,{created:M.Ro},C.mR,A.fl,{created:A.Du},C.SB,X.E7,{created:X.jD},C.Tq,Z.vj,{created:Z.mA},C.JW,A.Ww,{created:A.ZC},C.qo,K.jY,{created:K.US},C.wH,D.Kz,{created:D.JR},C.cx5,D.m8,{created:D.zY},C.l49,Z.uL,{created:Z.Hx},C.FU,R.lw,{created:R.fR},C.rd6,R.E0,{created:R.Hv},C.yG,K.nm,{created:K.an},C.px,A.tz,{created:A.J8},C.epC,Z.Jc,{created:Z.zg},C.Fd,F.E9,{created:F.TW},C.Bm,A.XP,{created:A.XL},C.hg,W.hd,{},C.Fv,U.ob,{created:U.zy},C.Wza,B.pR,{created:B.b4},C.l6,A.iL,{created:A.lT},C.ri,W.yy,{},C.Hk,A.Gk,{created:A.bH},C.r6,X.Vu,{created:X.bV}]
I.$lazy($,"globalThis","DX","jk",function(){return function() { return this; }()})
I.$lazy($,"globalWindow","pG","Qm",function(){return $.jk().window})
I.$lazy($,"globalWorker","zA","Nl",function(){return $.jk().Worker})
@@ -24696,14 +24855,13 @@
return e.message;
}
}())})
-I.$lazy($,"_codeMatcher","rC","Ks",function(){return new H.VR(H.v4("/code/",!1,!0,!1),null,null)})
-I.$lazy($,"_scriptMatcher","lF","hK",function(){return new H.VR(H.v4("scripts/.+",!1,!0,!1),null,null)})
-I.$lazy($,"currentIsolateMatcher","qY","oy",function(){return new H.VR(H.v4("#/isolates/\\d+",!1,!0,!1),null,null)})
+I.$lazy($,"_currentIsolateMatcher","m6","QJ",function(){return new H.VR(H.v4("#/isolates/\\d+",!1,!0,!1),null,null)})
+I.$lazy($,"_currentObjectMatcher","vi","wM",function(){return new H.VR(H.v4("#/isolates/\\d+/",!1,!0,!1),null,null)})
I.$lazy($,"customElementsReady","xp","ax",function(){return new B.wJ().call$0()})
I.$lazy($,"_toStringList","Ml","RM",function(){return[]})
-I.$lazy($,"validationPattern","zP","R0",function(){return new H.VR(H.v4("^(?:[a-zA-Z$][a-zA-Z$0-9_]*\\.)*(?:[a-zA-Z$][a-zA-Z$0-9_]*=?|-|unary-|\\[\\]=|~|==|\\[\\]|\\*|/|%|~/|\\+|<<|>>|>=|>|<=|<|&|\\^|\\|)$",!1,!0,!1),null,null)})
+I.$lazy($,"publicSymbolPattern","Np","bw",function(){return new H.VR(H.v4("^(?:(?:[\\-+*/%&|^]|\\[\\]=?|==|~/?|<[<=]?|>[>=]?|unary-)$|(?!(?:assert|break|c(?:a(?:se|tch)|lass|on(?:st|tinue))|d(?:efault|o)|e(?:lse|num|xtends)|f(?:alse|inal(?:ly)?|or)|i[fns]|n(?:ew|ull)|ret(?:hrow|urn)|s(?:uper|witch)|t(?:h(?:is|row)|r(?:ue|y))|v(?:ar|oid)|w(?:hile|ith))\\b(?!\\$))[a-zA-Z$][\\w$]*(?:=?$|[.](?!$)))+?$",!1,!0,!1),null,null)})
I.$lazy($,"_dynamicType","QG","P8",function(){return new H.EE(C.nN)})
-I.$lazy($,"_voidType","Q3","oj",function(){return new H.EE(C.z9)})
+I.$lazy($,"_voidType","Q3","oj",function(){return new H.EE(C.v6)})
I.$lazy($,"librariesByName","Ct","vK",function(){return H.dF()})
I.$lazy($,"currentJsMirrorSystem","GR","Cm",function(){return new H.Sn(null,new H.Lj(init.globalState.N0))})
I.$lazy($,"mangledNames","tj","bx",function(){return H.hY(init.mangledNames,!1)})
@@ -24711,25 +24869,25 @@
I.$lazy($,"mangledGlobalNames","iC","Sl",function(){return H.hY(init.mangledGlobalNames,!0)})
I.$lazy($,"_toStringVisiting","xg","xb",function(){return P.yv(null)})
I.$lazy($,"_toStringList","yu","tw",function(){return[]})
-I.$lazy($,"_splitRe","Um","qG",function(){return new H.VR(H.v4("^(?:([^:/?#]+):)?(?://(?:([^/?#]*)@)?(?:([\\w\\d\\-\\u0100-\\uffff.%]*)|\\[([A-Fa-f0-9:.]*)\\])(?::([0-9]+))?)?([^?#[]+)?(?:\\?([^#]*))?(?:#(.*))?$",!1,!0,!1),null,null)})
I.$lazy($,"_safeConsole","wk","pl",function(){return new W.QZ()})
I.$lazy($,"webkitEvents","fD","Vp",function(){return H.B7(["animationend","webkitAnimationEnd","animationiteration","webkitAnimationIteration","animationstart","webkitAnimationStart","fullscreenchange","webkitfullscreenchange","fullscreenerror","webkitfullscreenerror","keyadded","webkitkeyadded","keyerror","webkitkeyerror","keymessage","webkitkeymessage","needkey","webkitneedkey","pointerlockchange","webkitpointerlockchange","pointerlockerror","webkitpointerlockerror","resourcetimingbufferfull","webkitresourcetimingbufferfull","transitionend","webkitTransitionEnd","speechchange","webkitSpeechChange"],P.L5(null,null,null,null,null))})
I.$lazy($,"context","eo","cM",function(){return P.ND(function() { return this; }())})
I.$lazy($,"_DART_OBJECT_PROPERTY_NAME","kt","Iq",function(){return init.getIsolateTag("_$dart_dartObject")})
I.$lazy($,"_DART_CLOSURE_PROPERTY_NAME","Ri","Dp",function(){return init.getIsolateTag("_$dart_dartClosure")})
+I.$lazy($,"_dartProxyCtor","Je","hs",function(){return function DartObject(o) { this.o = o; }})
I.$lazy($,"_loggers","DY","U0",function(){return H.VM(H.B7([],P.L5(null,null,null,null,null)),[J.O,N.TJ])})
I.$lazy($,"_logger","G3","iU",function(){return N.Jx("Observable.dirtyCheck")})
I.$lazy($,"objectType","XV","aA",function(){return P.re(C.nY)})
-I.$lazy($,"_pathRegExp","Jm","tN",function(){return new L.YJ().call$0()})
+I.$lazy($,"_pathRegExp","Jm","tN",function(){return new L.Md().call$0()})
I.$lazy($,"_spacesRegExp","JV","c3",function(){return new H.VR(H.v4("\\s",!1,!0,!1),null,null)})
I.$lazy($,"_logger","y7","aT",function(){return N.Jx("observe.PathObserver")})
I.$lazy($,"_typesByName","Hi","Ej",function(){return P.L5(null,null,null,J.O,P.uq)})
I.$lazy($,"_waitType","Mp","p2",function(){return P.L5(null,null,null,J.O,A.XP)})
I.$lazy($,"_waitSuper","uv","xY",function(){return P.L5(null,null,null,J.O,[J.Q,A.XP])})
I.$lazy($,"_declarations","EJ","cd",function(){return P.L5(null,null,null,J.O,A.XP)})
-I.$lazy($,"_objectType","Cy","Tf",function(){return P.re(C.nY)})
+I.$lazy($,"_objectType","p0","H8",function(){return P.re(C.nY)})
I.$lazy($,"_sheetLog","Fa","vM",function(){return N.Jx("polymer.stylesheet")})
-I.$lazy($,"_reverseEventTranslations","fp","QX",function(){return new A.w10().call$0()})
+I.$lazy($,"_reverseEventTranslations","fp","QX",function(){return new A.w12().call$0()})
I.$lazy($,"bindPattern","ZA","VC",function(){return new H.VR(H.v4("\\{\\{([^{}]*)}}",!1,!0,!1),null,null)})
I.$lazy($,"_polymerSyntax","Df","Nd",function(){var z=P.L5(null,null,null,J.O,P.a)
z.FV(0,C.va)
@@ -24743,20 +24901,24 @@
I.$lazy($,"_shadowHost","cU","od",function(){return H.VM(new P.kM(null),[A.zs])})
I.$lazy($,"_librariesToLoad","x2","nT",function(){return A.GA(document,J.CC(C.ol.gmW(window)),null,null)})
I.$lazy($,"_libs","D9","UG",function(){return $.Cm().gvU()})
-I.$lazy($,"_rootUri","aU","RQ",function(){return $.Cm().Aq.gcZ().gFP()})
+I.$lazy($,"_rootUri","aU","RQ",function(){return $.Cm().F1.gcZ().gFP()})
I.$lazy($,"_loaderLog","ha","M7",function(){return N.Jx("polymer.loader")})
I.$lazy($,"_typeHandlers","lq","CT",function(){return new Z.W6().call$0()})
I.$lazy($,"_logger","m0","eH",function(){return N.Jx("polymer_expressions")})
-I.$lazy($,"_BINARY_OPERATORS","AM","e6",function(){return H.B7(["+",new K.Uf(),"-",new K.Ra(),"*",new K.wJY(),"/",new K.zOQ(),"==",new K.W6o(),"!=",new K.MdQ(),">",new K.YJG(),">=",new K.DOe(),"<",new K.lPa(),"<=",new K.Ufa(),"||",new K.Raa(),"&&",new K.w0(),"|",new K.w4()],P.L5(null,null,null,null,null))})
-I.$lazy($,"_UNARY_OPERATORS","ju","ww",function(){return H.B7(["+",new K.w5(),"-",new K.w7(),"!",new K.w9()],P.L5(null,null,null,null,null))})
-I.$lazy($,"_checkboxEventType","S8","FF",function(){return new M.DO().call$0()})
+I.$lazy($,"_BINARY_OPERATORS","AM","e6",function(){return H.B7(["+",new K.Ra(),"-",new K.wJY(),"*",new K.zOQ(),"/",new K.W6o(),"==",new K.MdQ(),"!=",new K.YJG(),">",new K.DOe(),">=",new K.lPa(),"<",new K.Ufa(),"<=",new K.Raa(),"||",new K.w0(),"&&",new K.w4(),"|",new K.w5()],P.L5(null,null,null,null,null))})
+I.$lazy($,"_UNARY_OPERATORS","ju","ww",function(){return H.B7(["+",new K.w7(),"-",new K.w10(),"!",new K.w11()],P.L5(null,null,null,null,null))})
+I.$lazy($,"_matcher","RI","cI",function(){return new H.VR(H.v4("scripts/.+",!1,!0,!1),null,null)})
+I.$lazy($,"_matcher","PA","xN",function(){return new H.VR(H.v4("code/.+",!1,!0,!1),null,null)})
+I.$lazy($,"_matcher","Oi","Yk",function(){return new H.VR(H.v4("classes/\\d+$",!1,!0,!1),null,null)})
+I.$lazy($,"_matcher","TO","uG",function(){return new H.VR(H.v4("^functions/native-.+|^functions/collected-.+|^functions/reused-.+|^functions/stub-.+|^classes/\\d+/functions/.+|^classes/\\d+/closures/.+|^classes/\\d+/implicit_closures/.+|^classes/\\d+/dispatchers/.+",!1,!0,!1),null,null)})
+I.$lazy($,"_checkboxEventType","S8","FF",function(){return new M.lP().call$0()})
I.$lazy($,"_contentsOwner","mn","LQ",function(){return H.VM(new P.kM(null),[null])})
I.$lazy($,"_ownerStagingDocument","EW","JM",function(){return H.VM(new P.kM(null),[null])})
-I.$lazy($,"_allTemplatesSelectors","Sf","cz",function(){return"template, "+J.C0(C.uE.gvc(C.uE),new M.lP()).zV(0,", ")})
+I.$lazy($,"_allTemplatesSelectors","Sf","cz",function(){return"template, "+J.C0(C.uE.gvc(C.uE),new M.Uf()).zV(0,", ")})
I.$lazy($,"_expando","fF","rw",function(){return H.VM(new P.kM("template_binding"),[null])})
init.functionAliases={}
-init.metadata=[P.a,C.WP,C.nz,C.xC,C.io,C.wW,"object","interceptor","proto","extension","indexability","type","name","codeUnit","isolate","function","entry","sender","e","msg","message","x","record","value","memberName",{func:"pd",args:[J.O]},"string","source","radix","handleError","array","codePoints","charCodes","years","month","day","hours","minutes","seconds","milliseconds","isUtc","receiver","key","positionalArguments","namedArguments","className","argument","index","ex","expression","keyValuePairs","result","closure","numberOfArguments","arg1","arg2","arg3","arg4","arity","functions","reflectionInfo","isStatic","jsArguments","propertyName","isIntercepted","fieldName","property","staticName","list","returnType","parameterTypes","optionalParameterTypes","rti","typeArguments","target","typeInfo","substitutionName",,"onTypeVariable","types","startIndex","substitution","arguments","isField","checks","asField","s","t","signature","context","contextName","o","allowShorter","obj","tag","interceptorClass","transformer","hooks","pattern","multiLine","caseSensitive","global","needle","haystack","other","from","to",{func:"Dv",args:[null]},"_","objectId","id","members",{func:"kl",void:true},{func:"NT"},"iterable","f","initialValue","combine","leftDelimiter","rightDelimiter","start","end","skipCount","src","srcStart","dst","dstStart","count","a","element","endIndex","left","right","compare","symbol",{func:"pB",ret:P.vr,args:[P.a]},"reflectee","mangledName","methods","variables","mixinNames","code","typeVariables","owner","simpleName","victim","fieldSpecification","jsMangledNames","isGlobal","map","errorHandler","zone",!1,"futures","eagerError","listeners","callback","notificationHandler",{func:"G5",void:true,args:[null]},{func:"Vx",void:true,args:[null],opt:[P.MN]},"error","stackTrace","userCode","onSuccess","onError","subscription","future","duration",{func:"cX",void:true,args:[P.JB,P.e4,P.JB,null,P.MN]},"self","parent",{func:"aD",args:[P.JB,P.e4,P.JB,{func:"NT"}]},{func:"wD",args:[P.JB,P.e4,P.JB,{func:"Dv",args:[null]},null]},"arg",{func:"ta",args:[P.JB,P.e4,P.JB,{func:"bh",args:[null,null]},null,null]},{func:"HQ",ret:{func:"NT"},args:[P.JB,P.e4,P.JB,{func:"NT"}]},{func:"v7",ret:{func:"Dv",args:[null]},args:[P.JB,P.e4,P.JB,{func:"Dv",args:[null]}]},{func:"IU",ret:{func:"bh",args:[null,null]},args:[P.JB,P.e4,P.JB,{func:"bh",args:[null,null]}]},{func:"iV",void:true,args:[P.JB,P.e4,P.JB,{func:"NT"}]},{func:"xN",ret:P.lO,args:[P.JB,P.e4,P.JB,P.a6,{func:"kl",void:true}]},{func:"Zb",void:true,args:[P.JB,P.e4,P.JB,J.O]},"line",{func:"xM",void:true,args:[J.O]},{func:"Nf",ret:P.JB,args:[P.JB,P.e4,P.JB,P.aY,[P.Z0,P.wv,null]]},"specification","zoneValues","table",{func:"Ib",ret:J.kn,args:[null,null]},"b",{func:"Re",ret:J.im,args:[null]},"parts","m","number","json","reviver",{func:"uJ",ret:P.a,args:[null]},"toEncodable","sb","lead","tail",{func:"P2",ret:J.im,args:[P.Rz,P.Rz]},"formattedString",{func:"E0",ret:J.kn,args:[P.a,P.a]},{func:"DZ",ret:J.im,args:[P.a]},{func:"K4",ret:J.im,args:[J.O],named:{onError:{func:"Tl",ret:J.im,args:[J.O]},radix:J.im}},"host","scheme","query","queryParameters","fragment","component","val","val1","val2",C.xM,"canonicalTable","text","encoding","spaceToPlus",{func:"Tf",ret:J.O,args:[W.D0]},"typeExtension","url","onProgress","withCredentials","method","mimeType","requestHeaders","responseType","sendData","thing","win","constructor",{func:"jn",args:[null,null,null,null]},"oldValue","newValue","document","extendsTagName","w","captureThis","data","createProxy","mustCopy","total",{func:"qE",ret:J.O,args:[J.im,J.im]},"pad","current","currentStart","currentEnd","old","oldStart","oldEnd","distances","arr1","arr2","searchLength","splices","records","field","cls","props","getter","template","extendee","sheet","node","path","originalPrepareBinding","methodName","args","style","scope","doc","baseUri","seen","scripts","uriString","currentValue","v","expr","l","hash",{func:"qq",ret:[P.cX,K.Ae],args:[P.cX]},"classMirror","c","delegate","model","bound","stagingDocument","el","useRoot","content","bindings","n","elementId","deep","selectors","relativeSelectors","listener","useCapture","async","password","user","timestamp","canBubble","cancelable","view","detail","screenX","screenY","clientX","clientY","ctrlKey","altKey","shiftKey","metaKey","button","relatedTarget","attributeFilter","attributeOldValue","attributes","characterData","characterDataOldValue","childList","subtree","otherNode","newChild","refChild","oldChild","targetOrigin","messagePorts","length","invocation","collection","","separator",0,!0,"growable","fractionDigits","str","authentification","resume","portId","port","dataEvent","info",{func:"bh",args:[null,null]},"parameter","jsConstructor",{func:"Za",args:[J.O,null]},{func:"TS",args:[null,J.O]},"g",G.dZ,G.No,{func:"qo",ret:P.Z0},C.nJ,C.mI,{func:"Hw",args:[P.Z0]},{func:"Wy",ret:G.bv},{func:"Gt",args:[G.bv]},"ResponseError","errorType","label","row",[P.Z0,J.O,G.rj],[J.Q,G.kx],[P.Z0,J.O,J.GW],{func:"zs",ret:J.O,args:[J.O]},{func:"NA",ret:G.CM},{func:"Ve",args:[G.CM]},{func:"I0",ret:J.O},{func:"cH",ret:J.im},{func:"Z5",args:[J.im]},"address","coverages","modelName",{func:"Tz",void:true,args:[null,null]},"st","timer","response",{func:"Uf",ret:J.kn},{func:"zk",args:[J.kn]},{func:"EU",ret:P.iD},{func:"Y4",args:[P.iD]},"event","so",J.im,J.O,{func:"fP",ret:J.GW},{func:"Ku",args:[J.GW]},[J.Q,G.Q4],"calls","codes","instructionList","profileCode",{func:"VL",args:[G.kx,G.kx]},[J.Q,G.c2],C.Us,{func:"dt",ret:P.cX},"lineNumber","hits",{func:"cM",void:true,args:[P.Z0]},"k",[J.Q,G.Y2],[J.Q,J.O],"children","rowIndex",V.qC,{func:"ru",ret:G.mL},"E",P.Z0,G.bv,[P.Z0,J.O,W.cv],"done",B.Ur,H.Tp,"trace",J.kn,Q.xI,Z.KU,G.kx,{func:"bR",ret:G.kx},{func:"VI",args:[G.kx]},F.qbd,"r",{func:"Np",void:true,args:[W.ea,null,W.KV]},R.Ds,{func:"ZT",void:true,args:[null,null,null]},R.LP,"action","test","library",{func:"h0",args:[H.Uz]},{func:"rm",args:[P.wv,P.ej]},"reflectiveName","useEval",{func:"lv",args:[P.wv,null]},"typeArgument","tv","methodOwner","fieldOwner","i",{func:"qe",ret:P.Ms,args:[J.im]},{func:"K6",ret:P.X9,args:[J.im]},{func:"Pt",ret:J.O,args:[J.im]},{func:"ag",args:[J.O,J.O]},"eventId",{func:"uu",void:true,args:[P.a],opt:[P.MN]},"theError","theStackTrace",{func:"rf",args:[P.a]},{func:"YP",void:true,opt:[null]},{func:"BG",args:[null],opt:[null]},"ignored","convert","isMatch","cancelOnError","handleData","handleDone","resumeSignal","wasInputPaused","onData","onDone","dispatch",{func:"ha",args:[null,P.MN]},"sink",{func:"aR",void:true,args:[null,P.MN]},"inputEvent","otherZone","runGuarded","bucket","each","ifAbsent","cell","objects","orElse","elements","offset","comp","key1","key2",{func:"Q5",ret:J.kn,args:[P.jp]},{func:"dc",args:[J.O,P.a]},"leadingSurrogate","nextCodeUnit","matched",{func:"Tl",ret:J.im,args:[J.O]},{func:"Zh",ret:J.GW,args:[J.O]},"factor","quotient","pathSegments","base","reference","ss","ch",{func:"hs",ret:J.kn,args:[J.im]},"digit",{func:"an",ret:J.im,args:[J.im]},"part",{func:"wJ",ret:J.im,args:[null,null]},"byteString",{func:"BC",ret:J.im,args:[J.im,J.im]},"byte","buffer",{func:"YI",void:true,args:[P.a]},"title","xhr","header","shouldAdd","prevValue","selector","stream","pos",G.Q4,{func:"JA",ret:G.Q4},{func:"Qs",args:[G.Q4]},E.pv,F.Vfx,A.Urj,N.oub,{func:"Rs",ret:J.kn,args:[P.Z0]},{func:"Xb",args:[P.Z0,J.im]},{func:"hN",ret:J.O,args:[J.kn]},"newSpace",K.c4r,{func:"iR",args:[J.im,null]},{func:"W7",void:true,args:[J.kn,null]},"expand",Z.Squ,S.Vf,R.Zt,"codeCaller",{func:"SR",args:[G.Vi]},J.Q,G.XN,{func:"r5",ret:J.Q},{func:"mR",args:[J.Q]},{func:"ub",void:true,args:[G.bv,J.im,P.Z0]},"totalSamples",{func:"F9",void:true,args:[G.bv]},{func:"bN",ret:J.O,args:[G.Y2]},{func:"Sz",void:true,args:[W.ea,null,W.cv]},X.KUl,"profile",S.PO,Z.tuj,M.mHk,"logLevel","rec",{func:"IM",args:[N.HV]},G.mL,{func:"pu",args:[G.mL]},L.Vct,Z.uL,A.D13,A.WZq,A.pva,A.cda,A.qFb,A.rna,A.Vba,V.waa,{func:"wA",void:true,args:[J.O,null,null]},{func:"Pz",ret:J.O,args:[J.GW]},"time","bytes",{func:"pT",ret:J.O,args:[P.Z0]},"frame",{func:"h6",ret:J.kn,args:[J.O]},A.ir,{func:"Aa",args:[P.e4,P.JB]},{func:"Zg",args:[P.JB,P.e4,P.JB,{func:"Dv",args:[null]}]},{func:"S5",ret:J.kn,args:[P.a]},{func:"ZD",args:[[J.Q,G.DA]]},{func:"D8",args:[[J.Q,T.z2]]},"superDecl","delegates","matcher","scopeDescriptor","cssText","properties","onName","eventType","declaration","elementElement","root",{func:"rj",void:true,args:[J.O,J.O]},"preventCascade",{func:"KT",void:true,args:[[P.cX,T.z2]]},"changes","events",{func:"WW",void:true,args:[W.ea]},"callbackOrMethod","pair","p",{func:"YT",void:true,args:[[J.Q,T.z2]]},"d","def",{func:"Zu",args:[J.O,null,null]},"arg0",{func:"pp",ret:U.zX,args:[U.hw,U.hw]},"h","item","kind","precedence","prefix",3,{func:"mM",args:[U.hw]},Q.V0,A.T5,G.rj,{func:"ls",ret:G.rj},{func:"PF",args:[G.rj]},{func:"Yg",ret:J.O,args:[G.c2]},U.oaa,"coverage",Q.Sq,K.q2,X.q3,"y","instanceRef",{func:"en",ret:J.O,args:[P.a]},{func:"QF",ret:J.O,args:[[J.Q,P.a]]},"values","instanceNodes",{func:"K7",void:true,args:[[J.Q,G.DA]]},{func:"Lr",ret:G.No},{func:"AfY",args:[G.No]},R.Dsd,];$=null
+init.metadata=[P.a,C.WP,C.nz,C.xC,C.io,C.wW,"object","interceptor","proto","extension","indexability","type","name","codeUnit","isolate","function","entry","args","sender","e","msg","topLevel","message","isSpawnUri","startPaused","replyTo","x","record","value","memberName",{func:"pL",args:[J.O]},"string","source","radix","handleError","array","codePoints","charCodes","years","month","day","hours","minutes","seconds","milliseconds","isUtc","receiver","key","positionalArguments","namedArguments","className","argument","index","ex","expression","keyValuePairs","result","closure","numberOfArguments","arg1","arg2","arg3","arg4","arity","functions","reflectionInfo","isStatic","jsArguments","propertyName","isIntercepted","fieldName","property","staticName","list","returnType","parameterTypes","optionalParameterTypes","rti","typeArguments","target","typeInfo","substitutionName",,"onTypeVariable","types","startIndex","substitution","arguments","isField","checks","asField","s","t","signature","context","contextName","o","allowShorter","obj","tag","interceptorClass","transformer","hooks","pattern","multiLine","caseSensitive","global","needle","haystack","other","from","to",{func:"Dv",args:[null]},"_",{func:"kl",void:true},{func:"NT"},"iterable","f","initialValue","combine","leftDelimiter","rightDelimiter","compare","start","end","skipCount","src","srcStart","dst","dstStart","count","a","element","endIndex","left","right","symbol",{func:"pB",ret:P.vr,args:[P.a]},"reflectee","mangledName","methods","variables","mixinNames","code","typeVariables","owner","simpleName","victim","fieldSpecification","jsMangledNames","isGlobal","map","errorHandler","zone","listeners","callback","notificationHandler",{func:"G5",void:true,args:[null]},{func:"Mx",void:true,args:[null],opt:[P.MN]},"error","stackTrace","userCode","onSuccess","onError","subscription","future","duration",{func:"cX",void:true,args:[P.dl,P.e4,P.dl,null,P.MN]},"self","parent",{func:"aD",args:[P.dl,P.e4,P.dl,{func:"NT"}]},{func:"wD",args:[P.dl,P.e4,P.dl,{func:"Dv",args:[null]},null]},"arg",{func:"ta",args:[P.dl,P.e4,P.dl,{func:"bh",args:[null,null]},null,null]},{func:"HQ",ret:{func:"NT"},args:[P.dl,P.e4,P.dl,{func:"NT"}]},{func:"XR",ret:{func:"Dv",args:[null]},args:[P.dl,P.e4,P.dl,{func:"Dv",args:[null]}]},{func:"IU",ret:{func:"bh",args:[null,null]},args:[P.dl,P.e4,P.dl,{func:"bh",args:[null,null]}]},{func:"iV",void:true,args:[P.dl,P.e4,P.dl,{func:"NT"}]},{func:"xN",ret:P.tU,args:[P.dl,P.e4,P.dl,P.a6,{func:"kl",void:true}]},{func:"Zb",void:true,args:[P.dl,P.e4,P.dl,J.O]},"line",{func:"xM",void:true,args:[J.O]},{func:"Nf",ret:P.dl,args:[P.dl,P.e4,P.dl,P.aY,[P.Z0,P.wv,null]]},"specification","zoneValues","table",{func:"Ib",ret:J.kn,args:[null,null]},"b",{func:"bZ",ret:J.im,args:[null]},"parts","m","number","json","reviver",{func:"uJ",ret:P.a,args:[null]},"toEncodable",{func:"P2",ret:J.im,args:[P.Tx,P.Tx]},"formattedString","n",{func:"E0",ret:J.kn,args:[P.a,P.a]},{func:"DZ",ret:J.im,args:[P.a]},{func:"K4",ret:J.im,args:[J.O],named:{onError:{func:"Tl",ret:J.im,args:[J.O]},radix:J.im}},"uri","host","scheme","query","queryParameters","fragment","component",C.xM,!1,"canonicalTable","text","encoding","spaceToPlus",{func:"Tf",ret:J.O,args:[W.D0]},"typeExtension","url","withCredentials","onProgress","method","responseType","mimeType","requestHeaders","sendData","thing","win","constructor",{func:"jn",args:[null,null,null,null]},"oldValue","newValue","document","extendsTagName","w","captureThis","data","createProxy","mustCopy","total",{func:"qE",ret:J.O,args:[J.im,J.im]},"pad","current","currentStart","currentEnd","old","oldStart","oldEnd","distances","arr1","arr2","searchLength","splices","records","field","cls","props","getter","template","extendee","sheet","node","path","originalPrepareBinding","methodName","style","scope","doc","baseUri","seen","scripts","uriString","currentValue","v","expr","l","hash",{func:"qq",ret:[P.QV,K.Ae],args:[P.QV]},"classMirror","c","id","members","collection","vm","delegate","model","bound","stagingDocument","el","useRoot","content","bindings","elementId","deep","selectors","relativeSelectors","listener","useCapture","async","user","password","timestamp","canBubble","cancelable","view","detail","screenX","screenY","clientX","clientY","ctrlKey","altKey","shiftKey","metaKey","button","relatedTarget","childList","attributes","characterData","subtree","attributeOldValue","characterDataOldValue","attributeFilter","otherNode","newChild","refChild","oldChild","targetOrigin","messagePorts","length","invocation","","separator",0,!0,"growable","fractionDigits","str","times","authentification","resume","responsePort","errorsAreFatal","pingType","portId","port","dataEvent","info","val",{func:"bh",args:[null,null]},"parameter","unsortedIndex","jsConstructor",{func:"Za",args:[J.O,null]},{func:"TS",args:[null,J.O]},"g",G.dZ,D.No,{func:"Wy",ret:D.bv},C.Nw,C.mI,{func:"UO",args:[D.bv]},{func:"e2",ret:D.af},{func:"fK",args:[D.af]},"label","row",{func:"I0",ret:J.O},{func:"Hr",void:true,args:[D.af]},"serviceObject","event",J.im,[J.Q,G.Y2],[J.Q,J.O],"children","rowIndex",D.SI,[P.Z0,J.O,W.cv],{func:"rm",ret:D.SI},C.Us,{func:"Q5",args:[D.SI]},"done",B.Vf,D.af,J.kn,Q.xI,Z.pv,D.kx,{func:"bR",ret:D.kx},{func:"oX",args:[D.kx]},F.Vfx,J.O,{func:"Uf",ret:J.kn},{func:"zk",args:[J.kn]},"r",{func:"Np",void:true,args:[W.ea,null,W.KV]},R.Dsd,{func:"ZT",void:true,args:[null,null,null]},R.LP,"action","test","library",{func:"h0",args:[H.Uz]},{func:"Gk",args:[P.wv,P.ej]},"reflectiveName","useEval",{func:"lv",args:[P.wv,null]},"typeArgument","tv","methodOwner","fieldOwner","i",{func:"qe",ret:P.Ms,args:[J.im]},{func:"Z5",args:[J.im]},{func:"K6",ret:P.X9,args:[J.im]},{func:"Pt",ret:J.O,args:[J.im]},{func:"ag",args:[J.O,J.O]},"eventId",{func:"uu",void:true,args:[P.a],opt:[P.MN]},{func:"YP",void:true,opt:[null]},{func:"BG",args:[null],opt:[null]},"ignored","convert","isMatch","cancelOnError","handleData","handleDone","resumeSignal","wasInputPaused","onData","onDone","dispatch",{func:"ha",args:[null,P.MN]},"sink",{func:"aR",void:true,args:[null,P.MN]},"inputEvent","otherZone","runGuarded","bucket","each","ifAbsent","cell","objects","orElse","k","elements","offset","comp","key1","key2",{func:"Yz",ret:J.kn,args:[P.jp]},{func:"dc",args:[J.O,P.a]},"leadingSurrogate","nextCodeUnit","matched",{func:"Tl",ret:J.im,args:[J.O]},{func:"Zh",ret:J.GW,args:[J.O]},"factor","quotient","pathSegments","base","reference","ss","ch",{func:"cd",ret:J.kn,args:[J.im]},{func:"an",ret:J.im,args:[J.im]},"digit","part",{func:"wJ",ret:J.im,args:[null,null]},"byteString",{func:"BC",ret:J.im,args:[J.im,J.im]},"byte","buffer",{func:"YI",void:true,args:[P.a]},"title","xhr","header","shouldAdd","prevValue","selector","stream","pos",F.tuj,{func:"Wr",ret:[P.b8,V.qC],args:[J.O]},Q.wn,{func:"fT",ret:{func:"Wr",ret:[P.b8,V.qC],args:[J.O]}},{func:"kP",args:[{func:"Wr",ret:[P.b8,V.qC],args:[J.O]}]},{func:"ln",ret:Q.wn},{func:"FG",args:[Q.wn]},{func:"uG",void:true,args:[W.Wp]},L.Vct,H.Tp,A.D13,N.WZq,{func:"Rs",ret:J.kn,args:[P.Z0]},{func:"Xb",args:[P.Z0,J.im]},{func:"hN",ret:J.O,args:[J.kn]},"newSpace",K.pva,"response","st",{func:"iR",args:[J.im,null]},{func:"W7",void:true,args:[J.kn,null]},"expand",{func:"vl",ret:[P.b8,D.af],args:[J.O]},Z.cda,D.Qd,{func:"eJ",ret:D.Qd},{func:"us",args:[D.Qd]},L.waa,"codeCaller",{func:"SR",args:[D.Vi]},J.Q,G.XN,{func:"cH",ret:J.im},{func:"Df",ret:J.O,args:[G.Y2]},{func:"Sz",void:true,args:[W.ea,null,W.cv]},X.V4,D.bv,D.V9,{func:"r5",ret:J.Q},Z.V10,M.V11,"logLevel","rec",{func:"IM",args:[N.HV]},Z.uL,A.V12,A.V13,A.V14,A.V15,A.V16,A.V17,A.V18,G.mL,{func:"ru",ret:G.mL},{func:"pu",args:[G.mL]},V.V19,{func:"a7",void:true,args:[J.O,null,null]},{func:"Pz",ret:J.O,args:[J.GW]},"time","bytes",{func:"vI",ret:J.O,args:[P.Z0]},"frame",{func:"h6",ret:J.kn,args:[J.O]},A.ir,{func:"Aa",args:[P.e4,P.dl]},{func:"Zg",args:[P.dl,P.e4,P.dl,{func:"Dv",args:[null]}]},{func:"Lc",ret:J.kn,args:[P.a]},{func:"mR",args:[[J.Q,G.DA]]},{func:"ZD",args:[[J.Q,T.z2]]},"superDecl","delegates","matcher","scopeDescriptor","cssText","properties","onName","eventType","declaration","elementElement","root",{func:"rd",void:true,args:[J.O,J.O]},"preventCascade",{func:"CS",void:true,args:[[P.QV,T.z2]]},"changes","events",{func:"WW",void:true,args:[W.ea]},"callbackOrMethod","pair","p",{func:"YT",void:true,args:[[J.Q,T.z2]]},"d","def",{func:"Zu",args:[J.O,null,null]},"arg0",{func:"pp",ret:U.zX,args:[U.hw,U.hw]},"h","item","kind","precedence","prefix",3,{func:"qo",args:[U.hw]},Q.V20,A.T5,D.rj,{func:"ls",ret:D.rj},{func:"J5",args:[D.rj]},{func:"Yg",ret:J.O,args:[D.c2]},U.V21,"so",{func:"Mg",void:true,args:[D.SI]},"coverage","scriptCoverage","profile","codeTable",{func:"VL",args:[D.kx,D.kx]},{func:"KK",args:[null,D.kx]},[P.Z0,J.O,J.GW],{func:"zs",ret:J.O,args:[J.O]},"serviceId",{func:"c7",ret:V.qC},{func:"JC",args:[V.qC]},{func:"Tt",ret:P.Z0},{func:"BV",args:[P.Z0]},"timer",{func:"zn",args:[null,D.bv]},"E","scriptHits",{func:"H6",ret:J.O,args:[D.kx]},{func:"jB",ret:D.WAE},{func:"aS",args:[D.WAE]},"calls","codes","profileData","sampleCount","disassembly","profileTicks","address",{func:"Lr",ret:D.No},{func:"HB",ret:D.af,args:[V.qC]},{func:"nR",ret:Z.uL},U.V22,Q.Ds,V.qC,K.V23,X.V24,"y","instanceRef",{func:"en",ret:J.O,args:[P.a]},{func:"QF",ret:J.O,args:[[J.Q,P.a]]},"values","instanceNodes",{func:"K7",void:true,args:[[J.Q,G.DA]]},{func:"oe",args:[J.Q]},];$=null
I = I.$finishIsolateConstructor(I)
$=new I()
function convertToFastObject(properties) {
@@ -24825,9 +24987,9 @@
init.currentScript = currentScript;
if (typeof dartMainRunner === "function") {
- dartMainRunner(function() { H.oT(E.nE()); });
+ dartMainRunner((function(a){H.oT(E.nE(),a)}), []);
} else {
- H.oT(E.nE());
+ (function(a){H.oT(E.nE(),a)})([]);
}
})
function init(){I.p={}
@@ -24955,41 +25117,41 @@
$desc=$collectedClasses.qE
if($desc instanceof Array)$desc=$desc[1]
qE.prototype=$desc
-function pa(){}pa.builtin$cls="pa"
-if(!"name" in pa)pa.name="pa"
-$desc=$collectedClasses.pa
+function zw(){}zw.builtin$cls="zw"
+if(!"name" in zw)zw.name="zw"
+$desc=$collectedClasses.zw
if($desc instanceof Array)$desc=$desc[1]
-pa.prototype=$desc
-function Gh(){}Gh.builtin$cls="Gh"
-if(!"name" in Gh)Gh.name="Gh"
-$desc=$collectedClasses.Gh
+zw.prototype=$desc
+function Ps(){}Ps.builtin$cls="Ps"
+if(!"name" in Ps)Ps.name="Ps"
+$desc=$collectedClasses.Ps
if($desc instanceof Array)$desc=$desc[1]
-Gh.prototype=$desc
-Gh.prototype.gN=function(receiver){return receiver.target}
-Gh.prototype.gt5=function(receiver){return receiver.type}
-Gh.prototype.st5=function(receiver,v){return receiver.type=v}
-Gh.prototype.gcC=function(receiver){return receiver.hash}
-Gh.prototype.scC=function(receiver,v){return receiver.hash=v}
-Gh.prototype.gmH=function(receiver){return receiver.href}
+Ps.prototype=$desc
+Ps.prototype.gN=function(receiver){return receiver.target}
+Ps.prototype.gt5=function(receiver){return receiver.type}
+Ps.prototype.st5=function(receiver,v){return receiver.type=v}
+Ps.prototype.gcC=function(receiver){return receiver.hash}
+Ps.prototype.scC=function(receiver,v){return receiver.hash=v}
+Ps.prototype.gmH=function(receiver){return receiver.href}
function A0(){}A0.builtin$cls="A0"
if(!"name" in A0)A0.name="A0"
$desc=$collectedClasses.A0
if($desc instanceof Array)$desc=$desc[1]
A0.prototype=$desc
-function na(){}na.builtin$cls="na"
-if(!"name" in na)na.name="na"
-$desc=$collectedClasses.na
+function Sb(){}Sb.builtin$cls="Sb"
+if(!"name" in Sb)Sb.name="Sb"
+$desc=$collectedClasses.Sb
if($desc instanceof Array)$desc=$desc[1]
-na.prototype=$desc
-na.prototype.gN=function(receiver){return receiver.target}
-na.prototype.gcC=function(receiver){return receiver.hash}
-na.prototype.scC=function(receiver,v){return receiver.hash=v}
-na.prototype.gmH=function(receiver){return receiver.href}
-function Mr(){}Mr.builtin$cls="Mr"
-if(!"name" in Mr)Mr.name="Mr"
-$desc=$collectedClasses.Mr
+Sb.prototype=$desc
+Sb.prototype.gN=function(receiver){return receiver.target}
+Sb.prototype.gcC=function(receiver){return receiver.hash}
+Sb.prototype.scC=function(receiver,v){return receiver.hash=v}
+Sb.prototype.gmH=function(receiver){return receiver.href}
+function vp(){}vp.builtin$cls="vp"
+if(!"name" in vp)vp.name="vp"
+$desc=$collectedClasses.vp
if($desc instanceof Array)$desc=$desc[1]
-Mr.prototype=$desc
+vp.prototype=$desc
function zx(){}zx.builtin$cls="zx"
if(!"name" in zx)zx.name="zx"
$desc=$collectedClasses.zx
@@ -25013,22 +25175,22 @@
if($desc instanceof Array)$desc=$desc[1]
W2.prototype=$desc
W2.prototype.gO3=function(receiver){return receiver.url}
-function it(){}it.builtin$cls="it"
-if(!"name" in it)it.name="it"
-$desc=$collectedClasses.it
+function zJ(){}zJ.builtin$cls="zJ"
+if(!"name" in zJ)zJ.name="zJ"
+$desc=$collectedClasses.zJ
if($desc instanceof Array)$desc=$desc[1]
-it.prototype=$desc
+zJ.prototype=$desc
function Az(){}Az.builtin$cls="Az"
if(!"name" in Az)Az.name="Az"
$desc=$collectedClasses.Az
if($desc instanceof Array)$desc=$desc[1]
Az.prototype=$desc
Az.prototype.gt5=function(receiver){return receiver.type}
-function QP(){}QP.builtin$cls="QP"
-if(!"name" in QP)QP.name="QP"
-$desc=$collectedClasses.QP
+function Fy(){}Fy.builtin$cls="Fy"
+if(!"name" in Fy)Fy.name="Fy"
+$desc=$collectedClasses.Fy
if($desc instanceof Array)$desc=$desc[1]
-QP.prototype=$desc
+Fy.prototype=$desc
function QW(){}QW.builtin$cls="QW"
if(!"name" in QW)QW.name="QW"
$desc=$collectedClasses.QW
@@ -25041,11 +25203,11 @@
QW.prototype.st5=function(receiver,v){return receiver.type=v}
QW.prototype.gP=function(receiver){return receiver.value}
QW.prototype.sP=function(receiver,v){return receiver.value=v}
-function jr(){}jr.builtin$cls="jr"
-if(!"name" in jr)jr.name="jr"
-$desc=$collectedClasses.jr
+function ca(){}ca.builtin$cls="ca"
+if(!"name" in ca)ca.name="ca"
+$desc=$collectedClasses.ca
if($desc instanceof Array)$desc=$desc[1]
-jr.prototype=$desc
+ca.prototype=$desc
function Ny(){}Ny.builtin$cls="Ny"
if(!"name" in Ny)Ny.name="Ny"
$desc=$collectedClasses.Ny
@@ -25069,12 +25231,12 @@
$desc=$collectedClasses.BR
if($desc instanceof Array)$desc=$desc[1]
BR.prototype=$desc
-function di(){}di.builtin$cls="di"
-if(!"name" in di)di.name="di"
-$desc=$collectedClasses.di
+function wT(){}wT.builtin$cls="wT"
+if(!"name" in wT)wT.name="wT"
+$desc=$collectedClasses.wT
if($desc instanceof Array)$desc=$desc[1]
-di.prototype=$desc
-di.prototype.gRn=function(receiver){return receiver.data}
+wT.prototype=$desc
+wT.prototype.gRn=function(receiver){return receiver.data}
function d7(){}d7.builtin$cls="d7"
if(!"name" in d7)d7.name="d7"
$desc=$collectedClasses.d7
@@ -25101,21 +25263,21 @@
if($desc instanceof Array)$desc=$desc[1]
vHT.prototype=$desc
vHT.prototype.gbG=function(receiver){return receiver.options}
-function n0(){}n0.builtin$cls="n0"
-if(!"name" in n0)n0.name="n0"
-$desc=$collectedClasses.n0
+function hh(){}hh.builtin$cls="hh"
+if(!"name" in hh)hh.name="hh"
+$desc=$collectedClasses.hh
if($desc instanceof Array)$desc=$desc[1]
-n0.prototype=$desc
+hh.prototype=$desc
function Em(){}Em.builtin$cls="Em"
if(!"name" in Em)Em.name="Em"
$desc=$collectedClasses.Em
if($desc instanceof Array)$desc=$desc[1]
Em.prototype=$desc
-function pt(){}pt.builtin$cls="pt"
-if(!"name" in pt)pt.name="pt"
-$desc=$collectedClasses.pt
+function NWk(){}NWk.builtin$cls="NWk"
+if(!"name" in NWk)NWk.name="NWk"
+$desc=$collectedClasses.NWk
if($desc instanceof Array)$desc=$desc[1]
-pt.prototype=$desc
+NWk.prototype=$desc
function rV(){}rV.builtin$cls="rV"
if(!"name" in rV)rV.name="rV"
$desc=$collectedClasses.rV
@@ -25207,27 +25369,27 @@
if($desc instanceof Array)$desc=$desc[1]
hH.prototype=$desc
hH.prototype.goc=function(receiver){return receiver.name}
-function Aa(){}Aa.builtin$cls="Aa"
-if(!"name" in Aa)Aa.name="Aa"
-$desc=$collectedClasses.Aa
+function QU(){}QU.builtin$cls="QU"
+if(!"name" in QU)QU.name="QU"
+$desc=$collectedClasses.QU
if($desc instanceof Array)$desc=$desc[1]
-Aa.prototype=$desc
-Aa.prototype.gtT=function(receiver){return receiver.code}
+QU.prototype=$desc
+QU.prototype.gtT=function(receiver){return receiver.code}
function u5(){}u5.builtin$cls="u5"
if(!"name" in u5)u5.name="u5"
$desc=$collectedClasses.u5
if($desc instanceof Array)$desc=$desc[1]
u5.prototype=$desc
-function Tq(){}Tq.builtin$cls="Tq"
-if(!"name" in Tq)Tq.name="Tq"
-$desc=$collectedClasses.Tq
+function h4(){}h4.builtin$cls="h4"
+if(!"name" in h4)h4.name="h4"
+$desc=$collectedClasses.h4
if($desc instanceof Array)$desc=$desc[1]
-Tq.prototype=$desc
-Tq.prototype.gB=function(receiver){return receiver.length}
-Tq.prototype.gbP=function(receiver){return receiver.method}
-Tq.prototype.goc=function(receiver){return receiver.name}
-Tq.prototype.soc=function(receiver,v){return receiver.name=v}
-Tq.prototype.gN=function(receiver){return receiver.target}
+h4.prototype=$desc
+h4.prototype.gB=function(receiver){return receiver.length}
+h4.prototype.gbP=function(receiver){return receiver.method}
+h4.prototype.goc=function(receiver){return receiver.name}
+h4.prototype.soc=function(receiver,v){return receiver.name=v}
+h4.prototype.gN=function(receiver){return receiver.target}
function W4(){}W4.builtin$cls="W4"
if(!"name" in W4)W4.name="W4"
$desc=$collectedClasses.W4
@@ -25248,11 +25410,11 @@
$desc=$collectedClasses.tA
if($desc instanceof Array)$desc=$desc[1]
tA.prototype=$desc
-function wa(){}wa.builtin$cls="wa"
-if(!"name" in wa)wa.name="wa"
-$desc=$collectedClasses.wa
+function xn(){}xn.builtin$cls="xn"
+if(!"name" in xn)xn.name="xn"
+$desc=$collectedClasses.xn
if($desc instanceof Array)$desc=$desc[1]
-wa.prototype=$desc
+xn.prototype=$desc
function Uq(){}Uq.builtin$cls="Uq"
if(!"name" in Uq)Uq.name="Uq"
$desc=$collectedClasses.Uq
@@ -25279,13 +25441,11 @@
if($desc instanceof Array)$desc=$desc[1]
zU.prototype=$desc
zU.prototype.giC=function(receiver){return receiver.responseText}
-zU.prototype.gys=function(receiver){return receiver.status}
-zU.prototype.gpo=function(receiver){return receiver.statusText}
-function rk(){}rk.builtin$cls="rk"
-if(!"name" in rk)rk.name="rk"
-$desc=$collectedClasses.rk
+function wa(){}wa.builtin$cls="wa"
+if(!"name" in wa)wa.name="wa"
+$desc=$collectedClasses.wa
if($desc instanceof Array)$desc=$desc[1]
-rk.prototype=$desc
+wa.prototype=$desc
function tX(){}tX.builtin$cls="tX"
if(!"name" in tX)tX.name="tX"
$desc=$collectedClasses.tX
@@ -25314,7 +25474,7 @@
Mi.prototype.gTq=function(receiver){return receiver.checked}
Mi.prototype.sTq=function(receiver,v){return receiver.checked=v}
Mi.prototype.gMB=function(receiver){return receiver.form}
-Mi.prototype.gaK=function(receiver){return receiver.list}
+Mi.prototype.go6=function(receiver){return receiver.list}
Mi.prototype.goc=function(receiver){return receiver.name}
Mi.prototype.soc=function(receiver,v){return receiver.name=v}
Mi.prototype.gLA=function(receiver){return receiver.src}
@@ -25403,12 +25563,12 @@
if($desc instanceof Array)$desc=$desc[1]
aB.prototype=$desc
aB.prototype.gG1=function(receiver){return receiver.message}
-function fJ(){}fJ.builtin$cls="fJ"
-if(!"name" in fJ)fJ.name="fJ"
-$desc=$collectedClasses.fJ
+function W7(){}W7.builtin$cls="W7"
+if(!"name" in W7)W7.name="W7"
+$desc=$collectedClasses.W7
if($desc instanceof Array)$desc=$desc[1]
-fJ.prototype=$desc
-fJ.prototype.gG1=function(receiver){return receiver.message}
+W7.prototype=$desc
+W7.prototype.gG1=function(receiver){return receiver.message}
function BK(){}BK.builtin$cls="BK"
if(!"name" in BK)BK.name="BK"
$desc=$collectedClasses.BK
@@ -25420,6 +25580,7 @@
if($desc instanceof Array)$desc=$desc[1]
Rv.prototype=$desc
Rv.prototype.gjO=function(receiver){return receiver.id}
+Rv.prototype.gph=function(receiver){return receiver.label}
function HO(){}HO.builtin$cls="HO"
if(!"name" in HO)HO.name="HO"
$desc=$collectedClasses.HO
@@ -25435,11 +25596,11 @@
$desc=$collectedClasses.ZY
if($desc instanceof Array)$desc=$desc[1]
ZY.prototype=$desc
-function Hy(){}Hy.builtin$cls="Hy"
-if(!"name" in Hy)Hy.name="Hy"
-$desc=$collectedClasses.Hy
+function cx(){}cx.builtin$cls="cx"
+if(!"name" in cx)cx.name="cx"
+$desc=$collectedClasses.cx
if($desc instanceof Array)$desc=$desc[1]
-Hy.prototype=$desc
+cx.prototype=$desc
function EeC(){}EeC.builtin$cls="EeC"
if(!"name" in EeC)EeC.name="EeC"
$desc=$collectedClasses.EeC
@@ -25455,11 +25616,11 @@
Qb.prototype=$desc
Qb.prototype.gP=function(receiver){return receiver.value}
Qb.prototype.sP=function(receiver,v){return receiver.value=v}
-function Vu(){}Vu.builtin$cls="Vu"
-if(!"name" in Vu)Vu.name="Vu"
-$desc=$collectedClasses.Vu
+function PG(){}PG.builtin$cls="PG"
+if(!"name" in PG)PG.name="PG"
+$desc=$collectedClasses.PG
if($desc instanceof Array)$desc=$desc[1]
-Vu.prototype=$desc
+PG.prototype=$desc
function xe(){}xe.builtin$cls="xe"
if(!"name" in xe)xe.name="xe"
$desc=$collectedClasses.xe
@@ -25476,42 +25637,42 @@
$desc=$collectedClasses.bn
if($desc instanceof Array)$desc=$desc[1]
bn.prototype=$desc
-function Imr(){}Imr.builtin$cls="Imr"
-if(!"name" in Imr)Imr.name="Imr"
-$desc=$collectedClasses.Imr
+function ab(){}ab.builtin$cls="ab"
+if(!"name" in ab)ab.name="ab"
+$desc=$collectedClasses.ab
if($desc instanceof Array)$desc=$desc[1]
-Imr.prototype=$desc
-Imr.prototype.gjO=function(receiver){return receiver.id}
-Imr.prototype.goc=function(receiver){return receiver.name}
-Imr.prototype.gt5=function(receiver){return receiver.type}
+ab.prototype=$desc
+ab.prototype.gjO=function(receiver){return receiver.id}
+ab.prototype.goc=function(receiver){return receiver.name}
+ab.prototype.gt5=function(receiver){return receiver.type}
function Ve(){}Ve.builtin$cls="Ve"
if(!"name" in Ve)Ve.name="Ve"
$desc=$collectedClasses.Ve
if($desc instanceof Array)$desc=$desc[1]
Ve.prototype=$desc
-function CX(){}CX.builtin$cls="CX"
-if(!"name" in CX)CX.name="CX"
-$desc=$collectedClasses.CX
+function Wp(){}Wp.builtin$cls="Wp"
+if(!"name" in Wp)Wp.name="Wp"
+$desc=$collectedClasses.Wp
if($desc instanceof Array)$desc=$desc[1]
-CX.prototype=$desc
+Wp.prototype=$desc
function H9(){}H9.builtin$cls="H9"
if(!"name" in H9)H9.name="H9"
$desc=$collectedClasses.H9
if($desc instanceof Array)$desc=$desc[1]
H9.prototype=$desc
-function FI(){}FI.builtin$cls="FI"
-if(!"name" in FI)FI.name="FI"
-$desc=$collectedClasses.FI
+function o4(){}o4.builtin$cls="o4"
+if(!"name" in o4)o4.name="o4"
+$desc=$collectedClasses.o4
if($desc instanceof Array)$desc=$desc[1]
-FI.prototype=$desc
-FI.prototype.gjL=function(receiver){return receiver.oldValue}
-FI.prototype.gN=function(receiver){return receiver.target}
-FI.prototype.gt5=function(receiver){return receiver.type}
-function oU(){}oU.builtin$cls="oU"
-if(!"name" in oU)oU.name="oU"
-$desc=$collectedClasses.oU
+o4.prototype=$desc
+o4.prototype.gjL=function(receiver){return receiver.oldValue}
+o4.prototype.gN=function(receiver){return receiver.target}
+o4.prototype.gt5=function(receiver){return receiver.type}
+function Q0(){}Q0.builtin$cls="Q0"
+if(!"name" in Q0)Q0.name="Q0"
+$desc=$collectedClasses.Q0
if($desc instanceof Array)$desc=$desc[1]
-oU.prototype=$desc
+Q0.prototype=$desc
function ih(){}ih.builtin$cls="ih"
if(!"name" in ih)ih.name="ih"
$desc=$collectedClasses.ih
@@ -25559,6 +25720,8 @@
$desc=$collectedClasses.l9
if($desc instanceof Array)$desc=$desc[1]
l9.prototype=$desc
+l9.prototype.gph=function(receiver){return receiver.label}
+l9.prototype.sph=function(receiver,v){return receiver.label=v}
function Ql(){}Ql.builtin$cls="Ql"
if(!"name" in Ql)Ql.name="Ql"
$desc=$collectedClasses.Ql
@@ -25566,6 +25729,8 @@
Ql.prototype=$desc
Ql.prototype.gMB=function(receiver){return receiver.form}
Ql.prototype.gvH=function(receiver){return receiver.index}
+Ql.prototype.gph=function(receiver){return receiver.label}
+Ql.prototype.sph=function(receiver,v){return receiver.label=v}
Ql.prototype.gP=function(receiver){return receiver.value}
Ql.prototype.sP=function(receiver,v){return receiver.value=v}
function Xp(){}Xp.builtin$cls="Xp"
@@ -25584,11 +25749,11 @@
$desc=$collectedClasses.bP
if($desc instanceof Array)$desc=$desc[1]
bP.prototype=$desc
-function FH(){}FH.builtin$cls="FH"
-if(!"name" in FH)FH.name="FH"
-$desc=$collectedClasses.FH
+function mX(){}mX.builtin$cls="mX"
+if(!"name" in mX)mX.name="mX"
+$desc=$collectedClasses.mX
if($desc instanceof Array)$desc=$desc[1]
-FH.prototype=$desc
+mX.prototype=$desc
function SN(){}SN.builtin$cls="SN"
if(!"name" in SN)SN.name="SN"
$desc=$collectedClasses.SN
@@ -25615,11 +25780,11 @@
jg.prototype=$desc
jg.prototype.gtT=function(receiver){return receiver.code}
jg.prototype.gG1=function(receiver){return receiver.message}
-function qj(){}qj.builtin$cls="qj"
-if(!"name" in qj)qj.name="qj"
-$desc=$collectedClasses.qj
+function GT(){}GT.builtin$cls="GT"
+if(!"name" in GT)GT.name="GT"
+$desc=$collectedClasses.GT
if($desc instanceof Array)$desc=$desc[1]
-qj.prototype=$desc
+GT.prototype=$desc
function nC(){}nC.builtin$cls="nC"
if(!"name" in nC)nC.name="nC"
$desc=$collectedClasses.nC
@@ -25703,36 +25868,50 @@
if($desc instanceof Array)$desc=$desc[1]
I0.prototype=$desc
I0.prototype.gpQ=function(receiver){return receiver.applyAuthorStyles}
-function CY(){}CY.builtin$cls="CY"
-if(!"name" in CY)CY.name="CY"
-$desc=$collectedClasses.CY
+function QR(){}QR.builtin$cls="QR"
+if(!"name" in QR)QR.name="QR"
+$desc=$collectedClasses.QR
if($desc instanceof Array)$desc=$desc[1]
-CY.prototype=$desc
-CY.prototype.gLA=function(receiver){return receiver.src}
-CY.prototype.gt5=function(receiver){return receiver.type}
-CY.prototype.st5=function(receiver,v){return receiver.type=v}
-function Wt(){}Wt.builtin$cls="Wt"
-if(!"name" in Wt)Wt.name="Wt"
-$desc=$collectedClasses.Wt
+QR.prototype=$desc
+QR.prototype.gLA=function(receiver){return receiver.src}
+QR.prototype.gt5=function(receiver){return receiver.type}
+QR.prototype.st5=function(receiver,v){return receiver.type=v}
+function Sc(){}Sc.builtin$cls="Sc"
+if(!"name" in Sc)Sc.name="Sc"
+$desc=$collectedClasses.Sc
if($desc instanceof Array)$desc=$desc[1]
-Wt.prototype=$desc
+Sc.prototype=$desc
function uaa(){}uaa.builtin$cls="uaa"
if(!"name" in uaa)uaa.name="uaa"
$desc=$collectedClasses.uaa
if($desc instanceof Array)$desc=$desc[1]
uaa.prototype=$desc
-function Hd(){}Hd.builtin$cls="Hd"
-if(!"name" in Hd)Hd.name="Hd"
-$desc=$collectedClasses.Hd
+uaa.prototype.gPK=function(receiver){return receiver.results}
+function yg(){}yg.builtin$cls="yg"
+if(!"name" in yg)yg.name="yg"
+$desc=$collectedClasses.yg
if($desc instanceof Array)$desc=$desc[1]
-Hd.prototype=$desc
-Hd.prototype.gkc=function(receiver){return receiver.error}
-Hd.prototype.gG1=function(receiver){return receiver.message}
+yg.prototype=$desc
+function mG(){}mG.builtin$cls="mG"
+if(!"name" in mG)mG.name="mG"
+$desc=$collectedClasses.mG
+if($desc instanceof Array)$desc=$desc[1]
+mG.prototype=$desc
+mG.prototype.gkc=function(receiver){return receiver.error}
+mG.prototype.gG1=function(receiver){return receiver.message}
function Ul(){}Ul.builtin$cls="Ul"
if(!"name" in Ul)Ul.name="Ul"
$desc=$collectedClasses.Ul
if($desc instanceof Array)$desc=$desc[1]
Ul.prototype=$desc
+Ul.prototype.gPK=function(receiver){return receiver.results}
+function uj(){}uj.builtin$cls="uj"
+if(!"name" in uj)uj.name="uj"
+$desc=$collectedClasses.uj
+if($desc instanceof Array)$desc=$desc[1]
+uj.prototype=$desc
+uj.prototype.gV5=function(receiver){return receiver.isFinal}
+uj.prototype.gB=function(receiver){return receiver.length}
function G5(){}G5.builtin$cls="G5"
if(!"name" in G5)G5.name="G5"
$desc=$collectedClasses.G5
@@ -25755,11 +25934,11 @@
Lx.prototype=$desc
Lx.prototype.gt5=function(receiver){return receiver.type}
Lx.prototype.st5=function(receiver,v){return receiver.type=v}
-function Er(){}Er.builtin$cls="Er"
-if(!"name" in Er)Er.name="Er"
-$desc=$collectedClasses.Er
+function fh(){}fh.builtin$cls="fh"
+if(!"name" in fh)fh.name="fh"
+$desc=$collectedClasses.fh
if($desc instanceof Array)$desc=$desc[1]
-Er.prototype=$desc
+fh.prototype=$desc
function qk(){}qk.builtin$cls="qk"
if(!"name" in qk)qk.name="qk"
$desc=$collectedClasses.qk
@@ -25780,11 +25959,11 @@
$desc=$collectedClasses.tV
if($desc instanceof Array)$desc=$desc[1]
tV.prototype=$desc
-function KP(){}KP.builtin$cls="KP"
-if(!"name" in KP)KP.name="KP"
-$desc=$collectedClasses.KP
+function BT(){}BT.builtin$cls="BT"
+if(!"name" in BT)BT.name="BT"
+$desc=$collectedClasses.BT
if($desc instanceof Array)$desc=$desc[1]
-KP.prototype=$desc
+BT.prototype=$desc
function yY(){}yY.builtin$cls="yY"
if(!"name" in yY)yY.name="yY"
$desc=$collectedClasses.yY
@@ -25815,11 +25994,11 @@
if($desc instanceof Array)$desc=$desc[1]
xV.prototype=$desc
xV.prototype.gRn=function(receiver){return receiver.data}
-function Dn(){}Dn.builtin$cls="Dn"
-if(!"name" in Dn)Dn.name="Dn"
-$desc=$collectedClasses.Dn
+function FH(){}FH.builtin$cls="FH"
+if(!"name" in FH)FH.name="FH"
+$desc=$collectedClasses.FH
if($desc instanceof Array)$desc=$desc[1]
-Dn.prototype=$desc
+FH.prototype=$desc
function y6(){}y6.builtin$cls="y6"
if(!"name" in y6)y6.name="y6"
$desc=$collectedClasses.y6
@@ -25832,6 +26011,8 @@
RH.prototype=$desc
RH.prototype.gfY=function(receiver){return receiver.kind}
RH.prototype.sfY=function(receiver,v){return receiver.kind=v}
+RH.prototype.gph=function(receiver){return receiver.label}
+RH.prototype.sph=function(receiver,v){return receiver.label=v}
RH.prototype.gLA=function(receiver){return receiver.src}
function pU(){}pU.builtin$cls="pU"
if(!"name" in pU)pU.name="pU"
@@ -25843,11 +26024,11 @@
$desc=$collectedClasses.OJ
if($desc instanceof Array)$desc=$desc[1]
OJ.prototype=$desc
-function Qa(){}Qa.builtin$cls="Qa"
-if(!"name" in Qa)Qa.name="Qa"
-$desc=$collectedClasses.Qa
+function Mf(){}Mf.builtin$cls="Mf"
+if(!"name" in Mf)Mf.name="Mf"
+$desc=$collectedClasses.Mf
if($desc instanceof Array)$desc=$desc[1]
-Qa.prototype=$desc
+Mf.prototype=$desc
function dp(){}dp.builtin$cls="dp"
if(!"name" in dp)dp.name="dp"
$desc=$collectedClasses.dp
@@ -25863,11 +26044,11 @@
$desc=$collectedClasses.aG
if($desc instanceof Array)$desc=$desc[1]
aG.prototype=$desc
-function J6(){}J6.builtin$cls="J6"
-if(!"name" in J6)J6.name="J6"
-$desc=$collectedClasses.J6
+function fA(){}fA.builtin$cls="fA"
+if(!"name" in fA)fA.name="fA"
+$desc=$collectedClasses.fA
if($desc instanceof Array)$desc=$desc[1]
-J6.prototype=$desc
+fA.prototype=$desc
function u9(){}u9.builtin$cls="u9"
if(!"name" in u9)u9.name="u9"
$desc=$collectedClasses.u9
@@ -25875,7 +26056,6 @@
u9.prototype=$desc
u9.prototype.goc=function(receiver){return receiver.name}
u9.prototype.soc=function(receiver,v){return receiver.name=v}
-u9.prototype.gys=function(receiver){return receiver.status}
function Bn(){}Bn.builtin$cls="Bn"
if(!"name" in Bn)Bn.name="Bn"
$desc=$collectedClasses.Bn
@@ -25884,11 +26064,11 @@
Bn.prototype.goc=function(receiver){return receiver.name}
Bn.prototype.gP=function(receiver){return receiver.value}
Bn.prototype.sP=function(receiver,v){return receiver.value=v}
-function hq(){}hq.builtin$cls="hq"
-if(!"name" in hq)hq.name="hq"
-$desc=$collectedClasses.hq
+function Eb(){}Eb.builtin$cls="Eb"
+if(!"name" in Eb)Eb.name="Eb"
+$desc=$collectedClasses.Eb
if($desc instanceof Array)$desc=$desc[1]
-hq.prototype=$desc
+Eb.prototype=$desc
function UL(){}UL.builtin$cls="UL"
if(!"name" in UL)UL.name="UL"
$desc=$collectedClasses.UL
@@ -25924,21 +26104,31 @@
$desc=$collectedClasses.F2
if($desc instanceof Array)$desc=$desc[1]
F2.prototype=$desc
-function nL(){}nL.builtin$cls="nL"
-if(!"name" in nL)nL.name="nL"
-$desc=$collectedClasses.nL
+function VB(){}VB.builtin$cls="VB"
+if(!"name" in VB)VB.name="VB"
+$desc=$collectedClasses.VB
if($desc instanceof Array)$desc=$desc[1]
-nL.prototype=$desc
-function QV(){}QV.builtin$cls="QV"
-if(!"name" in QV)QV.name="QV"
-$desc=$collectedClasses.QV
+VB.prototype=$desc
+function Cy(){}Cy.builtin$cls="Cy"
+if(!"name" in Cy)Cy.name="Cy"
+$desc=$collectedClasses.Cy
if($desc instanceof Array)$desc=$desc[1]
-QV.prototype=$desc
+Cy.prototype=$desc
function q0(){}q0.builtin$cls="q0"
if(!"name" in q0)q0.name="q0"
$desc=$collectedClasses.q0
if($desc instanceof Array)$desc=$desc[1]
q0.prototype=$desc
+function c5(){}c5.builtin$cls="c5"
+if(!"name" in c5)c5.name="c5"
+$desc=$collectedClasses.c5
+if($desc instanceof Array)$desc=$desc[1]
+c5.prototype=$desc
+function LO(){}LO.builtin$cls="LO"
+if(!"name" in LO)LO.name="LO"
+$desc=$collectedClasses.LO
+if($desc instanceof Array)$desc=$desc[1]
+LO.prototype=$desc
function Q7(){}Q7.builtin$cls="Q7"
if(!"name" in Q7)Q7.name="Q7"
$desc=$collectedClasses.Q7
@@ -25977,11 +26167,11 @@
$desc=$collectedClasses.NE
if($desc instanceof Array)$desc=$desc[1]
NE.prototype=$desc
-function lC(){}lC.builtin$cls="lC"
-if(!"name" in lC)lC.name="lC"
-$desc=$collectedClasses.lC
+function Ak(){}Ak.builtin$cls="Ak"
+if(!"name" in Ak)Ak.name="Ak"
+$desc=$collectedClasses.Ak
if($desc instanceof Array)$desc=$desc[1]
-lC.prototype=$desc
+Ak.prototype=$desc
function y5(){}y5.builtin$cls="y5"
if(!"name" in y5)y5.name="y5"
$desc=$collectedClasses.y5
@@ -26002,11 +26192,11 @@
$desc=$collectedClasses.ui
if($desc instanceof Array)$desc=$desc[1]
ui.prototype=$desc
-function mk(){}mk.builtin$cls="mk"
-if(!"name" in mk)mk.name="mk"
-$desc=$collectedClasses.mk
+function vO(){}vO.builtin$cls="vO"
+if(!"name" in vO)vO.name="vO"
+$desc=$collectedClasses.vO
if($desc instanceof Array)$desc=$desc[1]
-mk.prototype=$desc
+vO.prototype=$desc
function DQ(){}DQ.builtin$cls="DQ"
if(!"name" in DQ)DQ.name="DQ"
$desc=$collectedClasses.DQ
@@ -26032,13 +26222,13 @@
$desc=$collectedClasses.eG
if($desc instanceof Array)$desc=$desc[1]
eG.prototype=$desc
-function bd(){}bd.builtin$cls="bd"
-if(!"name" in bd)bd.name="bd"
-$desc=$collectedClasses.bd
+function lv(){}lv.builtin$cls="lv"
+if(!"name" in lv)lv.name="lv"
+$desc=$collectedClasses.lv
if($desc instanceof Array)$desc=$desc[1]
-bd.prototype=$desc
-bd.prototype.gt5=function(receiver){return receiver.type}
-bd.prototype.gUQ=function(receiver){return receiver.values}
+lv.prototype=$desc
+lv.prototype.gt5=function(receiver){return receiver.type}
+lv.prototype.gUQ=function(receiver){return receiver.values}
function pf(){}pf.builtin$cls="pf"
if(!"name" in pf)pf.name="pf"
$desc=$collectedClasses.pf
@@ -26060,11 +26250,11 @@
$desc=$collectedClasses.mCz
if($desc instanceof Array)$desc=$desc[1]
mCz.prototype=$desc
-function wf(){}wf.builtin$cls="wf"
-if(!"name" in wf)wf.name="wf"
-$desc=$collectedClasses.wf
+function kK(){}kK.builtin$cls="kK"
+if(!"name" in kK)kK.name="kK"
+$desc=$collectedClasses.kK
if($desc instanceof Array)$desc=$desc[1]
-wf.prototype=$desc
+kK.prototype=$desc
function n5(){}n5.builtin$cls="n5"
if(!"name" in n5)n5.name="n5"
$desc=$collectedClasses.n5
@@ -26075,11 +26265,11 @@
$desc=$collectedClasses.bb
if($desc instanceof Array)$desc=$desc[1]
bb.prototype=$desc
-function Ic(){}Ic.builtin$cls="Ic"
-if(!"name" in Ic)Ic.name="Ic"
-$desc=$collectedClasses.Ic
+function NdT(){}NdT.builtin$cls="NdT"
+if(!"name" in NdT)NdT.name="NdT"
+$desc=$collectedClasses.NdT
if($desc instanceof Array)$desc=$desc[1]
-Ic.prototype=$desc
+NdT.prototype=$desc
function lc(){}lc.builtin$cls="lc"
if(!"name" in lc)lc.name="lc"
$desc=$collectedClasses.lc
@@ -26095,11 +26285,11 @@
$desc=$collectedClasses.qM
if($desc instanceof Array)$desc=$desc[1]
qM.prototype=$desc
-function tk(){}tk.builtin$cls="tk"
-if(!"name" in tk)tk.name="tk"
-$desc=$collectedClasses.tk
+function Ob(){}Ob.builtin$cls="Ob"
+if(!"name" in Ob)Ob.name="Ob"
+$desc=$collectedClasses.Ob
if($desc instanceof Array)$desc=$desc[1]
-tk.prototype=$desc
+Ob.prototype=$desc
function me(){}me.builtin$cls="me"
if(!"name" in me)me.name="me"
$desc=$collectedClasses.me
@@ -26111,11 +26301,11 @@
$desc=$collectedClasses.oB
if($desc instanceof Array)$desc=$desc[1]
oB.prototype=$desc
-function nh(){}nh.builtin$cls="nh"
-if(!"name" in nh)nh.name="nh"
-$desc=$collectedClasses.nh
+function NY(){}NY.builtin$cls="NY"
+if(!"name" in NY)NY.name="NY"
+$desc=$collectedClasses.NY
if($desc instanceof Array)$desc=$desc[1]
-nh.prototype=$desc
+NY.prototype=$desc
function EI(){}EI.builtin$cls="EI"
if(!"name" in EI)EI.name="EI"
$desc=$collectedClasses.EI
@@ -26127,26 +26317,26 @@
$desc=$collectedClasses.MI
if($desc instanceof Array)$desc=$desc[1]
MI.prototype=$desc
-function Ub(){}Ub.builtin$cls="Ub"
-if(!"name" in Ub)Ub.name="Ub"
-$desc=$collectedClasses.Ub
+function rg(){}rg.builtin$cls="rg"
+if(!"name" in rg)rg.name="rg"
+$desc=$collectedClasses.rg
if($desc instanceof Array)$desc=$desc[1]
-Ub.prototype=$desc
-function kK(){}kK.builtin$cls="kK"
-if(!"name" in kK)kK.name="kK"
-$desc=$collectedClasses.kK
-if($desc instanceof Array)$desc=$desc[1]
-kK.prototype=$desc
-function eW(){}eW.builtin$cls="eW"
-if(!"name" in eW)eW.name="eW"
-$desc=$collectedClasses.eW
-if($desc instanceof Array)$desc=$desc[1]
-eW.prototype=$desc
+rg.prototype=$desc
function um(){}um.builtin$cls="um"
if(!"name" in um)um.name="um"
$desc=$collectedClasses.um
if($desc instanceof Array)$desc=$desc[1]
um.prototype=$desc
+function eW(){}eW.builtin$cls="eW"
+if(!"name" in eW)eW.name="eW"
+$desc=$collectedClasses.eW
+if($desc instanceof Array)$desc=$desc[1]
+eW.prototype=$desc
+function kL(){}kL.builtin$cls="kL"
+if(!"name" in kL)kL.name="kL"
+$desc=$collectedClasses.kL
+if($desc instanceof Array)$desc=$desc[1]
+kL.prototype=$desc
function Fu(){}Fu.builtin$cls="Fu"
if(!"name" in Fu)Fu.name="Fu"
$desc=$collectedClasses.Fu
@@ -26195,11 +26385,11 @@
$desc=$collectedClasses.vd
if($desc instanceof Array)$desc=$desc[1]
vd.prototype=$desc
-function uzr(){}uzr.builtin$cls="uzr"
-if(!"name" in uzr)uzr.name="uzr"
-$desc=$collectedClasses.uzr
+function Jq(){}Jq.builtin$cls="Jq"
+if(!"name" in Jq)Jq.name="Jq"
+$desc=$collectedClasses.Jq
if($desc instanceof Array)$desc=$desc[1]
-uzr.prototype=$desc
+Jq.prototype=$desc
function Yd(){}Yd.builtin$cls="Yd"
if(!"name" in Yd)Yd.name="Yd"
$desc=$collectedClasses.Yd
@@ -26210,11 +26400,11 @@
$desc=$collectedClasses.kN
if($desc instanceof Array)$desc=$desc[1]
kN.prototype=$desc
-function lZ(){}lZ.builtin$cls="lZ"
-if(!"name" in lZ)lZ.name="lZ"
-$desc=$collectedClasses.lZ
+function AW(){}AW.builtin$cls="AW"
+if(!"name" in AW)AW.name="AW"
+$desc=$collectedClasses.AW
if($desc instanceof Array)$desc=$desc[1]
-lZ.prototype=$desc
+AW.prototype=$desc
function Gr(){}Gr.builtin$cls="Gr"
if(!"name" in Gr)Gr.name="Gr"
$desc=$collectedClasses.Gr
@@ -26226,11 +26416,11 @@
$desc=$collectedClasses.XE
if($desc instanceof Array)$desc=$desc[1]
XE.prototype=$desc
-function mO(){}mO.builtin$cls="mO"
-if(!"name" in mO)mO.name="mO"
-$desc=$collectedClasses.mO
+function GH(){}GH.builtin$cls="GH"
+if(!"name" in GH)GH.name="GH"
+$desc=$collectedClasses.GH
if($desc instanceof Array)$desc=$desc[1]
-mO.prototype=$desc
+GH.prototype=$desc
function lo(){}lo.builtin$cls="lo"
if(!"name" in lo)lo.name="lo"
$desc=$collectedClasses.lo
@@ -26318,11 +26508,11 @@
$desc=$collectedClasses.Eo
if($desc instanceof Array)$desc=$desc[1]
Eo.prototype=$desc
-function tL(){}tL.builtin$cls="tL"
-if(!"name" in tL)tL.name="tL"
-$desc=$collectedClasses.tL
+function Dn(){}Dn.builtin$cls="Dn"
+if(!"name" in Dn)Dn.name="Dn"
+$desc=$collectedClasses.Dn
if($desc instanceof Array)$desc=$desc[1]
-tL.prototype=$desc
+Dn.prototype=$desc
function pyk(){}pyk.builtin$cls="pyk"
if(!"name" in pyk)pyk.name="pyk"
$desc=$collectedClasses.pyk
@@ -26334,11 +26524,11 @@
$desc=$collectedClasses.ZD
if($desc instanceof Array)$desc=$desc[1]
ZD.prototype=$desc
-function rD(){}rD.builtin$cls="rD"
-if(!"name" in rD)rD.name="rD"
-$desc=$collectedClasses.rD
+function Rlr(){}Rlr.builtin$cls="Rlr"
+if(!"name" in Rlr)Rlr.name="Rlr"
+$desc=$collectedClasses.Rlr
if($desc instanceof Array)$desc=$desc[1]
-rD.prototype=$desc
+Rlr.prototype=$desc
function wD(){}wD.builtin$cls="wD"
if(!"name" in wD)wD.name="wD"
$desc=$collectedClasses.wD
@@ -26370,11 +26560,11 @@
$desc=$collectedClasses.mj
if($desc instanceof Array)$desc=$desc[1]
mj.prototype=$desc
-function cB(){}cB.builtin$cls="cB"
-if(!"name" in cB)cB.name="cB"
-$desc=$collectedClasses.cB
+function hW(){}hW.builtin$cls="hW"
+if(!"name" in hW)hW.name="hW"
+$desc=$collectedClasses.hW
if($desc instanceof Array)$desc=$desc[1]
-cB.prototype=$desc
+hW.prototype=$desc
function uY(){}uY.builtin$cls="uY"
if(!"name" in uY)uY.name="uY"
$desc=$collectedClasses.uY
@@ -26385,11 +26575,11 @@
$desc=$collectedClasses.yR
if($desc instanceof Array)$desc=$desc[1]
yR.prototype=$desc
-function GK(){}GK.builtin$cls="GK"
-if(!"name" in GK)GK.name="GK"
-$desc=$collectedClasses.GK
+function AX(){}AX.builtin$cls="AX"
+if(!"name" in AX)AX.name="AX"
+$desc=$collectedClasses.AX
if($desc instanceof Array)$desc=$desc[1]
-GK.prototype=$desc
+AX.prototype=$desc
function xJ(){}xJ.builtin$cls="xJ"
if(!"name" in xJ)xJ.name="xJ"
$desc=$collectedClasses.xJ
@@ -26425,21 +26615,21 @@
$desc=$collectedClasses.xt
if($desc instanceof Array)$desc=$desc[1]
xt.prototype=$desc
-function VJ(){}VJ.builtin$cls="VJ"
-if(!"name" in VJ)VJ.name="VJ"
-$desc=$collectedClasses.VJ
+function tG(){}tG.builtin$cls="tG"
+if(!"name" in tG)tG.name="tG"
+$desc=$collectedClasses.tG
if($desc instanceof Array)$desc=$desc[1]
-VJ.prototype=$desc
+tG.prototype=$desc
function P0(){}P0.builtin$cls="P0"
if(!"name" in P0)P0.name="P0"
$desc=$collectedClasses.P0
if($desc instanceof Array)$desc=$desc[1]
P0.prototype=$desc
-function xlX(){}xlX.builtin$cls="xlX"
-if(!"name" in xlX)xlX.name="xlX"
-$desc=$collectedClasses.xlX
+function kh(){}kh.builtin$cls="kh"
+if(!"name" in kh)kh.name="kh"
+$desc=$collectedClasses.kh
if($desc instanceof Array)$desc=$desc[1]
-xlX.prototype=$desc
+kh.prototype=$desc
function SQ(){}SQ.builtin$cls="SQ"
if(!"name" in SQ)SQ.name="SQ"
$desc=$collectedClasses.SQ
@@ -26492,16 +26682,16 @@
$desc=$collectedClasses.dE
if($desc instanceof Array)$desc=$desc[1]
dE.prototype=$desc
-function Eb(){}Eb.builtin$cls="Eb"
-if(!"name" in Eb)Eb.name="Eb"
-$desc=$collectedClasses.Eb
+function IJ(){}IJ.builtin$cls="IJ"
+if(!"name" in IJ)IJ.name="IJ"
+$desc=$collectedClasses.IJ
if($desc instanceof Array)$desc=$desc[1]
-Eb.prototype=$desc
-function dT(){}dT.builtin$cls="dT"
-if(!"name" in dT)dT.name="dT"
-$desc=$collectedClasses.dT
+IJ.prototype=$desc
+function aH(){}aH.builtin$cls="aH"
+if(!"name" in aH)aH.name="aH"
+$desc=$collectedClasses.aH
if($desc instanceof Array)$desc=$desc[1]
-dT.prototype=$desc
+aH.prototype=$desc
function N2(){}N2.builtin$cls="N2"
if(!"name" in N2)N2.name="N2"
$desc=$collectedClasses.N2
@@ -26593,11 +26783,11 @@
$desc=$collectedClasses.vT
if($desc instanceof Array)$desc=$desc[1]
vT.prototype=$desc
-function qa(){}qa.builtin$cls="qa"
-if(!"name" in qa)qa.name="qa"
-$desc=$collectedClasses.qa
+function VP(){}VP.builtin$cls="VP"
+if(!"name" in VP)VP.name="VP"
+$desc=$collectedClasses.VP
if($desc instanceof Array)$desc=$desc[1]
-qa.prototype=$desc
+VP.prototype=$desc
function BQ(){}BQ.builtin$cls="BQ"
if(!"name" in BQ)BQ.name="BQ"
$desc=$collectedClasses.BQ
@@ -26608,12 +26798,14 @@
$desc=$collectedClasses.O
if($desc instanceof Array)$desc=$desc[1]
O.prototype=$desc
-function PK(a){this.a=a}PK.builtin$cls="PK"
+function PK(a,b){this.a=a
+this.b=b}PK.builtin$cls="PK"
if(!"name" in PK)PK.name="PK"
$desc=$collectedClasses.PK
if($desc instanceof Array)$desc=$desc[1]
PK.prototype=$desc
-function JO(b){this.b=b}JO.builtin$cls="JO"
+function JO(a,c){this.a=a
+this.c=c}JO.builtin$cls="JO"
if(!"name" in JO)JO.name="JO"
$desc=$collectedClasses.JO
if($desc instanceof Array)$desc=$desc[1]
@@ -26635,18 +26827,21 @@
$desc=$collectedClasses.f0
if($desc instanceof Array)$desc=$desc[1]
f0.prototype=$desc
-f0.prototype.gi2=function(){return this.i2}
-f0.prototype.si2=function(v){return this.i2=v}
+f0.prototype.gi2=function(receiver){return this.i2}
+f0.prototype.si2=function(receiver,v){return this.i2=v}
f0.prototype.gw2=function(){return this.w2}
-function aX(jO,Gx,fW,En,EE,Qy,RW,C9,lJ){this.jO=jO
+function aX(jO,Gx,fW,En,EE,Qy,PX,RW,C9,lJ,Jp,pa){this.jO=jO
this.Gx=Gx
this.fW=fW
this.En=En
this.EE=EE
this.Qy=Qy
+this.PX=PX
this.RW=RW
this.C9=C9
-this.lJ=lJ}aX.builtin$cls="aX"
+this.lJ=lJ
+this.Jp=Jp
+this.pa=pa}aX.builtin$cls="aX"
if(!"name" in aX)aX.name="aX"
$desc=$collectedClasses.aX
if($desc instanceof Array)$desc=$desc[1]
@@ -26656,8 +26851,13 @@
aX.prototype.gEE=function(){return this.EE}
aX.prototype.gRW=function(){return this.RW}
aX.prototype.gC9=function(){return this.C9}
-function cC(Rk,bZ){this.Rk=Rk
-this.bZ=bZ}cC.builtin$cls="cC"
+function oU(a){this.a=a}oU.builtin$cls="oU"
+if(!"name" in oU)oU.name="oU"
+$desc=$collectedClasses.oU
+if($desc instanceof Array)$desc=$desc[1]
+oU.prototype=$desc
+function cC(Rk,GL){this.Rk=Rk
+this.GL=GL}cC.builtin$cls="cC"
if(!"name" in cC)cC.name="cC"
$desc=$collectedClasses.cC
if($desc instanceof Array)$desc=$desc[1]
@@ -26667,15 +26867,15 @@
$desc=$collectedClasses.RA
if($desc instanceof Array)$desc=$desc[1]
RA.prototype=$desc
-function IY(Aq,i3,G1){this.Aq=Aq
+function IY(F1,i3,G1){this.F1=F1
this.i3=i3
this.G1=G1}IY.builtin$cls="IY"
if(!"name" in IY)IY.name="IY"
$desc=$collectedClasses.IY
if($desc instanceof Array)$desc=$desc[1]
IY.prototype=$desc
-IY.prototype.gAq=function(receiver){return this.Aq}
-IY.prototype.sAq=function(receiver,v){return this.Aq=v}
+IY.prototype.gF1=function(receiver){return this.F1}
+IY.prototype.sF1=function(receiver,v){return this.F1=v}
IY.prototype.gG1=function(receiver){return this.G1}
IY.prototype.sG1=function(receiver,v){return this.G1=v}
function JH(){}JH.builtin$cls="JH"
@@ -26683,15 +26883,24 @@
$desc=$collectedClasses.JH
if($desc instanceof Array)$desc=$desc[1]
JH.prototype=$desc
-function jl(a,b,c,d,e){this.a=a
+function jl(a,b,c,d,e,f){this.a=a
this.b=b
this.c=c
this.d=d
-this.e=e}jl.builtin$cls="jl"
+this.e=e
+this.f=f}jl.builtin$cls="jl"
if(!"name" in jl)jl.name="jl"
$desc=$collectedClasses.jl
if($desc instanceof Array)$desc=$desc[1]
jl.prototype=$desc
+function Vg(a,b,c,d){this.a=a
+this.b=b
+this.c=c
+this.d=d}Vg.builtin$cls="Vg"
+if(!"name" in Vg)Vg.name="Vg"
+$desc=$collectedClasses.Vg
+if($desc instanceof Array)$desc=$desc[1]
+Vg.prototype=$desc
function Iy(){}Iy.builtin$cls="Iy"
if(!"name" in Iy)Iy.name="Iy"
$desc=$collectedClasses.Iy
@@ -26757,22 +26966,22 @@
$desc=$collectedClasses.HU
if($desc instanceof Array)$desc=$desc[1]
HU.prototype=$desc
-function oo(){}oo.builtin$cls="oo"
-if(!"name" in oo)oo.name="oo"
-$desc=$collectedClasses.oo
+function Nt(){}Nt.builtin$cls="Nt"
+if(!"name" in Nt)Nt.name="Nt"
+$desc=$collectedClasses.Nt
if($desc instanceof Array)$desc=$desc[1]
-oo.prototype=$desc
+Nt.prototype=$desc
function OW(a,b){this.a=a
this.b=b}OW.builtin$cls="OW"
if(!"name" in OW)OW.name="OW"
$desc=$collectedClasses.OW
if($desc instanceof Array)$desc=$desc[1]
OW.prototype=$desc
-function Dd(){}Dd.builtin$cls="Dd"
-if(!"name" in Dd)Dd.name="Dd"
-$desc=$collectedClasses.Dd
+function Tf(){}Tf.builtin$cls="Tf"
+if(!"name" in Tf)Tf.name="Tf"
+$desc=$collectedClasses.Tf
if($desc instanceof Array)$desc=$desc[1]
-Dd.prototype=$desc
+Tf.prototype=$desc
function AP(){}AP.builtin$cls="AP"
if(!"name" in AP)AP.name="AP"
$desc=$collectedClasses.AP
@@ -26831,18 +27040,12 @@
if($desc instanceof Array)$desc=$desc[1]
LPe.prototype=$desc
LPe.prototype.gB=function(receiver){return this.B}
-function bw(a,b){this.a=a
-this.b=b}bw.builtin$cls="bw"
-if(!"name" in bw)bw.name="bw"
-$desc=$collectedClasses.bw
+function LD(a,b){this.a=a
+this.b=b}LD.builtin$cls="LD"
+if(!"name" in LD)LD.name="LD"
+$desc=$collectedClasses.LD
if($desc instanceof Array)$desc=$desc[1]
-bw.prototype=$desc
-function WT(a,b){this.a=a
-this.b=b}WT.builtin$cls="WT"
-if(!"name" in WT)WT.name="WT"
-$desc=$collectedClasses.WT
-if($desc instanceof Array)$desc=$desc[1]
-WT.prototype=$desc
+LD.prototype=$desc
function jJ(a){this.a=a}jJ.builtin$cls="jJ"
if(!"name" in jJ)jJ.name="jJ"
$desc=$collectedClasses.jJ
@@ -26887,18 +27090,26 @@
$desc=$collectedClasses.F3
if($desc instanceof Array)$desc=$desc[1]
F3.prototype=$desc
-function FD(mr,Rn,XZ,Rv,hG,Mo,AM){this.mr=mr
+function FD(mr,Rn,XZ,Rv,hG,Mo,AM,NE){this.mr=mr
this.Rn=Rn
this.XZ=XZ
this.Rv=Rv
this.hG=hG
this.Mo=Mo
-this.AM=AM}FD.builtin$cls="FD"
+this.AM=AM
+this.NE=NE}FD.builtin$cls="FD"
if(!"name" in FD)FD.name="FD"
$desc=$collectedClasses.FD
if($desc instanceof Array)$desc=$desc[1]
FD.prototype=$desc
FD.prototype.gRn=function(receiver){return this.Rn}
+function Nv(a,b,c){this.a=a
+this.b=b
+this.c=c}Nv.builtin$cls="Nv"
+if(!"name" in Nv)Nv.name="Nv"
+$desc=$collectedClasses.Nv
+if($desc instanceof Array)$desc=$desc[1]
+Nv.prototype=$desc
function Cj(a,b,c){this.a=a
this.b=b
this.c=c}Cj.builtin$cls="Cj"
@@ -27007,22 +27218,22 @@
v.prototype.gnw=function(){return this.nw}
v.prototype.gjm=function(){return this.jm}
v.prototype.gRA=function(receiver){return this.RA}
-function Ll(Jy){this.Jy=Jy}Ll.builtin$cls="Ll"
+function Ll(QW){this.QW=QW}Ll.builtin$cls="Ll"
if(!"name" in Ll)Ll.name="Ll"
$desc=$collectedClasses.Ll
if($desc instanceof Array)$desc=$desc[1]
Ll.prototype=$desc
-function dN(Jy){this.Jy=Jy}dN.builtin$cls="dN"
-if(!"name" in dN)dN.name="dN"
-$desc=$collectedClasses.dN
+function D2(QW){this.QW=QW}D2.builtin$cls="D2"
+if(!"name" in D2)D2.name="D2"
+$desc=$collectedClasses.D2
if($desc instanceof Array)$desc=$desc[1]
-dN.prototype=$desc
-function GT(oc){this.oc=oc}GT.builtin$cls="GT"
-if(!"name" in GT)GT.name="GT"
-$desc=$collectedClasses.GT
+D2.prototype=$desc
+function my(oc){this.oc=oc}my.builtin$cls="my"
+if(!"name" in my)my.name="my"
+$desc=$collectedClasses.my
if($desc instanceof Array)$desc=$desc[1]
-GT.prototype=$desc
-GT.prototype.goc=function(receiver){return this.oc}
+my.prototype=$desc
+my.prototype.goc=function(receiver){return this.oc}
function Pe(G1){this.G1=G1}Pe.builtin$cls="Pe"
if(!"name" in Pe)Pe.name="Pe"
$desc=$collectedClasses.Pe
@@ -27118,7 +27329,6 @@
$desc=$collectedClasses.EK
if($desc instanceof Array)$desc=$desc[1]
EK.prototype=$desc
-EK.prototype.gQK=function(){return this.QK}
function KW(Gf,rv){this.Gf=Gf
this.rv=rv}KW.builtin$cls="KW"
if(!"name" in KW)KW.name="KW"
@@ -27139,19 +27349,19 @@
$desc=$collectedClasses.tQ
if($desc instanceof Array)$desc=$desc[1]
tQ.prototype=$desc
-function mL(Z6,zf,AJ,Eb,AP,fn){this.Z6=Z6
+function mL(Z6,zf,Eb,AJ,AP,Lk){this.Z6=Z6
this.zf=zf
-this.AJ=AJ
this.Eb=Eb
+this.AJ=AJ
this.AP=AP
-this.fn=fn}mL.builtin$cls="mL"
+this.Lk=Lk}mL.builtin$cls="mL"
if(!"name" in mL)mL.name="mL"
$desc=$collectedClasses.mL
if($desc instanceof Array)$desc=$desc[1]
mL.prototype=$desc
mL.prototype.gZ6=function(){return this.Z6}
mL.prototype.gZ6.$reflectable=1
-mL.prototype.gzf=function(receiver){return this.zf}
+mL.prototype.gzf=function(){return this.zf}
mL.prototype.gzf.$reflectable=1
function Kf(Yb){this.Yb=Yb}Kf.builtin$cls="Kf"
if(!"name" in Kf)Kf.name="Kf"
@@ -27166,79 +27376,10 @@
if($desc instanceof Array)$desc=$desc[1]
qu.prototype=$desc
qu.prototype.gbG=function(receiver){return this.bG}
-function bv(zf,rI,we,jF,XR,Z0,hI,am,y6,c8,LE,qU,yg,YG,jy,AP,fn){this.zf=zf
-this.rI=rI
-this.we=we
-this.jF=jF
-this.XR=XR
-this.Z0=Z0
-this.hI=hI
-this.am=am
-this.y6=y6
-this.c8=c8
-this.LE=LE
-this.qU=qU
-this.yg=yg
-this.YG=YG
-this.jy=jy
-this.AP=AP
-this.fn=fn}bv.builtin$cls="bv"
-if(!"name" in bv)bv.name="bv"
-$desc=$collectedClasses.bv
-if($desc instanceof Array)$desc=$desc[1]
-bv.prototype=$desc
-bv.prototype.gzf=function(receiver){return this.zf}
-bv.prototype.gXR=function(){return this.XR}
-bv.prototype.gXR.$reflectable=1
-bv.prototype.gZ0=function(){return this.Z0}
-bv.prototype.gZ0.$reflectable=1
-bv.prototype.gLE=function(){return this.LE}
-bv.prototype.gLE.$reflectable=1
-function eS(a){this.a=a}eS.builtin$cls="eS"
-if(!"name" in eS)eS.name="eS"
-$desc=$collectedClasses.eS
-if($desc instanceof Array)$desc=$desc[1]
-eS.prototype=$desc
-function IQ(b){this.b=b}IQ.builtin$cls="IQ"
-if(!"name" in IQ)IQ.name="IQ"
-$desc=$collectedClasses.IQ
-if($desc instanceof Array)$desc=$desc[1]
-IQ.prototype=$desc
-function TI(a){this.a=a}TI.builtin$cls="TI"
-if(!"name" in TI)TI.name="TI"
-$desc=$collectedClasses.TI
-if($desc instanceof Array)$desc=$desc[1]
-TI.prototype=$desc
-function at(a,b){this.a=a
-this.b=b}at.builtin$cls="at"
-if(!"name" in at)at.name="at"
-$desc=$collectedClasses.at
-if($desc instanceof Array)$desc=$desc[1]
-at.prototype=$desc
-function wu(a,b){this.a=a
-this.b=b}wu.builtin$cls="wu"
-if(!"name" in wu)wu.name="wu"
-$desc=$collectedClasses.wu
-if($desc instanceof Array)$desc=$desc[1]
-wu.prototype=$desc
-function Vc(c,d){this.c=c
-this.d=d}Vc.builtin$cls="Vc"
-if(!"name" in Vc)Vc.name="Vc"
-$desc=$collectedClasses.Vc
-if($desc instanceof Array)$desc=$desc[1]
-Vc.prototype=$desc
-function KQ(a,b){this.a=a
-this.b=b}KQ.builtin$cls="KQ"
-if(!"name" in KQ)KQ.name="KQ"
-$desc=$collectedClasses.KQ
-if($desc instanceof Array)$desc=$desc[1]
-KQ.prototype=$desc
-function dZ(ec,jF,JL,MU,AP,fn){this.ec=ec
-this.jF=jF
+function dZ(ec,JL,AP,Lk){this.ec=ec
this.JL=JL
-this.MU=MU
this.AP=AP
-this.fn=fn}dZ.builtin$cls="dZ"
+this.Lk=Lk}dZ.builtin$cls="dZ"
if(!"name" in dZ)dZ.name="dZ"
$desc=$collectedClasses.dZ
if($desc instanceof Array)$desc=$desc[1]
@@ -27249,142 +27390,6 @@
$desc=$collectedClasses.Qe
if($desc instanceof Array)$desc=$desc[1]
Qe.prototype=$desc
-function GH(a){this.a=a}GH.builtin$cls="GH"
-if(!"name" in GH)GH.name="GH"
-$desc=$collectedClasses.GH
-if($desc instanceof Array)$desc=$desc[1]
-GH.prototype=$desc
-function Q4(Yu,m7,L4,NC,xb,AP,fn){this.Yu=Yu
-this.m7=m7
-this.L4=L4
-this.NC=NC
-this.xb=xb
-this.AP=AP
-this.fn=fn}Q4.builtin$cls="Q4"
-if(!"name" in Q4)Q4.name="Q4"
-$desc=$collectedClasses.Q4
-if($desc instanceof Array)$desc=$desc[1]
-Q4.prototype=$desc
-Q4.prototype.gYu=function(){return this.Yu}
-Q4.prototype.gYu.$reflectable=1
-Q4.prototype.gm7=function(){return this.m7}
-Q4.prototype.gm7.$reflectable=1
-Q4.prototype.gL4=function(){return this.L4}
-Q4.prototype.gL4.$reflectable=1
-function WAE(Zd){this.Zd=Zd}WAE.builtin$cls="WAE"
-if(!"name" in WAE)WAE.name="WAE"
-$desc=$collectedClasses.WAE
-if($desc instanceof Array)$desc=$desc[1]
-WAE.prototype=$desc
-function N8(Yu,pO,Iw){this.Yu=Yu
-this.pO=pO
-this.Iw=Iw}N8.builtin$cls="N8"
-if(!"name" in N8)N8.name="N8"
-$desc=$collectedClasses.N8
-if($desc instanceof Array)$desc=$desc[1]
-N8.prototype=$desc
-N8.prototype.gYu=function(){return this.Yu}
-function Vi(tT,Av){this.tT=tT
-this.Av=Av}Vi.builtin$cls="Vi"
-if(!"name" in Vi)Vi.name="Vi"
-$desc=$collectedClasses.Vi
-if($desc instanceof Array)$desc=$desc[1]
-Vi.prototype=$desc
-Vi.prototype.gtT=function(receiver){return this.tT}
-Vi.prototype.gAv=function(){return this.Av}
-function kx(fY,vg,Mb,a0,VS,hw,fF,Du,va,tQ,Ge,hI,HJ,AP,fn){this.fY=fY
-this.vg=vg
-this.Mb=Mb
-this.a0=a0
-this.VS=VS
-this.hw=hw
-this.fF=fF
-this.Du=Du
-this.va=va
-this.tQ=tQ
-this.Ge=Ge
-this.hI=hI
-this.HJ=HJ
-this.AP=AP
-this.fn=fn}kx.builtin$cls="kx"
-if(!"name" in kx)kx.name="kx"
-$desc=$collectedClasses.kx
-if($desc instanceof Array)$desc=$desc[1]
-kx.prototype=$desc
-kx.prototype.gfY=function(receiver){return this.fY}
-kx.prototype.ga0=function(){return this.a0}
-kx.prototype.gVS=function(){return this.VS}
-kx.prototype.gfF=function(){return this.fF}
-kx.prototype.gDu=function(){return this.Du}
-kx.prototype.gva=function(){return this.va}
-kx.prototype.gva.$reflectable=1
-function fx(){}fx.builtin$cls="fx"
-if(!"name" in fx)fx.name="fx"
-$desc=$collectedClasses.fx
-if($desc instanceof Array)$desc=$desc[1]
-fx.prototype=$desc
-function CM(Aq,tm,hV){this.Aq=Aq
-this.tm=tm
-this.hV=hV}CM.builtin$cls="CM"
-if(!"name" in CM)CM.name="CM"
-$desc=$collectedClasses.CM
-if($desc instanceof Array)$desc=$desc[1]
-CM.prototype=$desc
-CM.prototype.gAq=function(receiver){return this.Aq}
-CM.prototype.ghV=function(){return this.hV}
-function xn(a){this.a=a}xn.builtin$cls="xn"
-if(!"name" in xn)xn.name="xn"
-$desc=$collectedClasses.xn
-if($desc instanceof Array)$desc=$desc[1]
-xn.prototype=$desc
-function vu(){}vu.builtin$cls="vu"
-if(!"name" in vu)vu.name="vu"
-$desc=$collectedClasses.vu
-if($desc instanceof Array)$desc=$desc[1]
-vu.prototype=$desc
-function c2(Rd,ye,i0,AP,fn){this.Rd=Rd
-this.ye=ye
-this.i0=i0
-this.AP=AP
-this.fn=fn}c2.builtin$cls="c2"
-if(!"name" in c2)c2.name="c2"
-$desc=$collectedClasses.c2
-if($desc instanceof Array)$desc=$desc[1]
-c2.prototype=$desc
-c2.prototype.gRd=function(receiver){return this.Rd}
-c2.prototype.gRd.$reflectable=1
-function rj(I2,VG,pw,tq,Sw,iA,AP,fn){this.I2=I2
-this.VG=VG
-this.pw=pw
-this.tq=tq
-this.Sw=Sw
-this.iA=iA
-this.AP=AP
-this.fn=fn}rj.builtin$cls="rj"
-if(!"name" in rj)rj.name="rj"
-$desc=$collectedClasses.rj
-if($desc instanceof Array)$desc=$desc[1]
-rj.prototype=$desc
-rj.prototype.gSw=function(){return this.Sw}
-rj.prototype.gSw.$reflectable=1
-function af(Aq){this.Aq=Aq}af.builtin$cls="af"
-if(!"name" in af)af.name="af"
-$desc=$collectedClasses.af
-if($desc instanceof Array)$desc=$desc[1]
-af.prototype=$desc
-af.prototype.gAq=function(receiver){return this.Aq}
-function SI(YY,Aq,rI,we,R9,wv,V2,me){this.YY=YY
-this.Aq=Aq
-this.rI=rI
-this.we=we
-this.R9=R9
-this.wv=wv
-this.V2=V2
-this.me=me}SI.builtin$cls="SI"
-if(!"name" in SI)SI.name="SI"
-$desc=$collectedClasses.SI
-if($desc instanceof Array)$desc=$desc[1]
-SI.prototype=$desc
function Y2(eT,yt,wd,oH){this.eT=eT
this.yt=yt
this.wd=wd
@@ -27400,89 +27405,21 @@
Y2.prototype.gwd.$reflectable=1
Y2.prototype.goH=function(){return this.oH}
Y2.prototype.goH.$reflectable=1
-function XN(rO,WT,AP,fn){this.rO=rO
+function XN(rI,WT,AP,Lk){this.rI=rI
this.WT=WT
this.AP=AP
-this.fn=fn}XN.builtin$cls="XN"
+this.Lk=Lk}XN.builtin$cls="XN"
if(!"name" in XN)XN.name="XN"
$desc=$collectedClasses.XN
if($desc instanceof Array)$desc=$desc[1]
XN.prototype=$desc
XN.prototype.gWT=function(receiver){return this.WT}
XN.prototype.gWT.$reflectable=1
-function No(ec,i2){this.ec=ec
-this.i2=i2}No.builtin$cls="No"
-if(!"name" in No)No.name="No"
-$desc=$collectedClasses.No
-if($desc instanceof Array)$desc=$desc[1]
-No.prototype=$desc
-No.prototype.sec=function(v){return this.ec=v}
-No.prototype.gi2=function(){return this.i2}
-No.prototype.gi2.$reflectable=1
-function PG(){}PG.builtin$cls="PG"
-if(!"name" in PG)PG.name="PG"
-$desc=$collectedClasses.PG
-if($desc instanceof Array)$desc=$desc[1]
-PG.prototype=$desc
-function YW(){}YW.builtin$cls="YW"
-if(!"name" in YW)YW.name="YW"
-$desc=$collectedClasses.YW
-if($desc instanceof Array)$desc=$desc[1]
-YW.prototype=$desc
-function BO(a){this.a=a}BO.builtin$cls="BO"
-if(!"name" in BO)BO.name="BO"
-$desc=$collectedClasses.BO
-if($desc instanceof Array)$desc=$desc[1]
-BO.prototype=$desc
-function Yu(a,b){this.a=a
-this.b=b}Yu.builtin$cls="Yu"
-if(!"name" in Yu)Yu.name="Yu"
-$desc=$collectedClasses.Yu
-if($desc instanceof Array)$desc=$desc[1]
-Yu.prototype=$desc
-function y2(c){this.c=c}y2.builtin$cls="y2"
-if(!"name" in y2)y2.name="y2"
-$desc=$collectedClasses.y2
-if($desc instanceof Array)$desc=$desc[1]
-y2.prototype=$desc
-function Hq(d){this.d=d}Hq.builtin$cls="Hq"
-if(!"name" in Hq)Hq.name="Hq"
-$desc=$collectedClasses.Hq
-if($desc instanceof Array)$desc=$desc[1]
-Hq.prototype=$desc
-function Pl(a){this.a=a}Pl.builtin$cls="Pl"
-if(!"name" in Pl)Pl.name="Pl"
-$desc=$collectedClasses.Pl
-if($desc instanceof Array)$desc=$desc[1]
-Pl.prototype=$desc
-function XK(Yu,ec,i2,AP,fn){this.Yu=Yu
-this.ec=ec
-this.i2=i2
+function G6(BW,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.BW=BW
this.AP=AP
-this.fn=fn}XK.builtin$cls="XK"
-if(!"name" in XK)XK.name="XK"
-$desc=$collectedClasses.XK
-if($desc instanceof Array)$desc=$desc[1]
-XK.prototype=$desc
-XK.prototype.gYu=function(){return this.Yu}
-function ho(Ct,pL,ec,i2,AP,fn){this.Ct=Ct
-this.pL=pL
-this.ec=ec
-this.i2=i2
+this.Lk=Lk
this.AP=AP
-this.fn=fn}ho.builtin$cls="ho"
-if(!"name" in ho)ho.name="ho"
-$desc=$collectedClasses.ho
-if($desc instanceof Array)$desc=$desc[1]
-ho.prototype=$desc
-function G6(BW,AP,fn,pC,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.BW=BW
-this.AP=AP
-this.fn=fn
-this.pC=pC
-this.AP=AP
-this.fn=fn
-this.AP=AP
-this.fn=fn
+this.Lk=Lk
this.dZ=dZ
this.Sa=Sa
this.Uk=Uk
@@ -27499,30 +27436,17 @@
G6.prototype.gBW.$reflectable=1
G6.prototype.sBW=function(receiver,v){return receiver.BW=v}
G6.prototype.sBW.$reflectable=1
-function Ur(){}Ur.builtin$cls="Ur"
-if(!"name" in Ur)Ur.name="Ur"
-$desc=$collectedClasses.Ur
+function Vf(){}Vf.builtin$cls="Vf"
+if(!"name" in Vf)Vf.name="Vf"
+$desc=$collectedClasses.Vf
if($desc instanceof Array)$desc=$desc[1]
-Ur.prototype=$desc
-function j3(a){this.a=a}j3.builtin$cls="j3"
-if(!"name" in j3)j3.name="j3"
-$desc=$collectedClasses.j3
-if($desc instanceof Array)$desc=$desc[1]
-j3.prototype=$desc
-function i0(){}i0.builtin$cls="i0"
-if(!"name" in i0)i0.name="i0"
-$desc=$collectedClasses.i0
-if($desc instanceof Array)$desc=$desc[1]
-i0.prototype=$desc
-function Tg(tY,Pe,AP,fn,pC,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.tY=tY
+Vf.prototype=$desc
+function Tg(tY,Pe,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.tY=tY
this.Pe=Pe
this.AP=AP
-this.fn=fn
-this.pC=pC
+this.Lk=Lk
this.AP=AP
-this.fn=fn
-this.AP=AP
-this.fn=fn
+this.Lk=Lk
this.dZ=dZ
this.Sa=Sa
this.Uk=Uk
@@ -27535,14 +27459,11 @@
$desc=$collectedClasses.Tg
if($desc instanceof Array)$desc=$desc[1]
Tg.prototype=$desc
-function Ps(F0,AP,fn,pC,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.F0=F0
+function Jc(F0,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.F0=F0
this.AP=AP
-this.fn=fn
-this.pC=pC
+this.Lk=Lk
this.AP=AP
-this.fn=fn
-this.AP=AP
-this.fn=fn
+this.Lk=Lk
this.dZ=dZ
this.Sa=Sa
this.Uk=Uk
@@ -27550,39 +27471,26 @@
this.Wz=Wz
this.SO=SO
this.B7=B7
-this.X0=X0}Ps.builtin$cls="Ps"
-if(!"name" in Ps)Ps.name="Ps"
-$desc=$collectedClasses.Ps
+this.X0=X0}Jc.builtin$cls="Jc"
+if(!"name" in Jc)Jc.name="Jc"
+$desc=$collectedClasses.Jc
if($desc instanceof Array)$desc=$desc[1]
-Ps.prototype=$desc
-Ps.prototype.gF0=function(receiver){return receiver.F0}
-Ps.prototype.gF0.$reflectable=1
-Ps.prototype.sF0=function(receiver,v){return receiver.F0=v}
-Ps.prototype.sF0.$reflectable=1
-function KU(){}KU.builtin$cls="KU"
-if(!"name" in KU)KU.name="KU"
-$desc=$collectedClasses.KU
+Jc.prototype=$desc
+Jc.prototype.gF0=function(receiver){return receiver.F0}
+Jc.prototype.gF0.$reflectable=1
+Jc.prototype.sF0=function(receiver,v){return receiver.F0=v}
+Jc.prototype.sF0.$reflectable=1
+function pv(){}pv.builtin$cls="pv"
+if(!"name" in pv)pv.name="pv"
+$desc=$collectedClasses.pv
if($desc instanceof Array)$desc=$desc[1]
-KU.prototype=$desc
-function RI(a){this.a=a}RI.builtin$cls="RI"
-if(!"name" in RI)RI.name="RI"
-$desc=$collectedClasses.RI
-if($desc instanceof Array)$desc=$desc[1]
-RI.prototype=$desc
-function Ye(){}Ye.builtin$cls="Ye"
-if(!"name" in Ye)Ye.name="Ye"
-$desc=$collectedClasses.Ye
-if($desc instanceof Array)$desc=$desc[1]
-Ye.prototype=$desc
-function CN(tY,Pe,AP,fn,pC,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.tY=tY
+pv.prototype=$desc
+function CN(tY,Pe,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.tY=tY
this.Pe=Pe
this.AP=AP
-this.fn=fn
-this.pC=pC
+this.Lk=Lk
this.AP=AP
-this.fn=fn
-this.AP=AP
-this.fn=fn
+this.Lk=Lk
this.dZ=dZ
this.Sa=Sa
this.Uk=Uk
@@ -27595,14 +27503,11 @@
$desc=$collectedClasses.CN
if($desc instanceof Array)$desc=$desc[1]
CN.prototype=$desc
-function HT(eJ,AP,fn,pC,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.eJ=eJ
+function Be(Xx,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.Xx=Xx
this.AP=AP
-this.fn=fn
-this.pC=pC
+this.Lk=Lk
this.AP=AP
-this.fn=fn
-this.AP=AP
-this.fn=fn
+this.Lk=Lk
this.dZ=dZ
this.Sa=Sa
this.Uk=Uk
@@ -27610,27 +27515,27 @@
this.Wz=Wz
this.SO=SO
this.B7=B7
-this.X0=X0}HT.builtin$cls="HT"
-if(!"name" in HT)HT.name="HT"
-$desc=$collectedClasses.HT
+this.X0=X0}Be.builtin$cls="Be"
+if(!"name" in Be)Be.name="Be"
+$desc=$collectedClasses.Be
if($desc instanceof Array)$desc=$desc[1]
-HT.prototype=$desc
-HT.prototype.geJ=function(receiver){return receiver.eJ}
-HT.prototype.geJ.$reflectable=1
-HT.prototype.seJ=function(receiver,v){return receiver.eJ=v}
-HT.prototype.seJ.$reflectable=1
-function qbd(){}qbd.builtin$cls="qbd"
-if(!"name" in qbd)qbd.name="qbd"
-$desc=$collectedClasses.qbd
+Be.prototype=$desc
+Be.prototype.gXx=function(receiver){return receiver.Xx}
+Be.prototype.gXx.$reflectable=1
+Be.prototype.sXx=function(receiver,v){return receiver.Xx=v}
+Be.prototype.sXx.$reflectable=1
+function Vfx(){}Vfx.builtin$cls="Vfx"
+if(!"name" in Vfx)Vfx.name="Vfx"
+$desc=$collectedClasses.Vfx
if($desc instanceof Array)$desc=$desc[1]
-qbd.prototype=$desc
-function E0(zh,HX,Uy,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.zh=zh
+Vfx.prototype=$desc
+function E0(zh,HX,Uy,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.zh=zh
this.HX=HX
this.Uy=Uy
this.AP=AP
-this.fn=fn
+this.Lk=Lk
this.AP=AP
-this.fn=fn
+this.Lk=Lk
this.dZ=dZ
this.Sa=Sa
this.Uk=Uk
@@ -27655,18 +27560,18 @@
E0.prototype.gUy.$reflectable=1
E0.prototype.sUy=function(receiver,v){return receiver.Uy=v}
E0.prototype.sUy.$reflectable=1
-function Ds(){}Ds.builtin$cls="Ds"
-if(!"name" in Ds)Ds.name="Ds"
-$desc=$collectedClasses.Ds
+function Dsd(){}Dsd.builtin$cls="Dsd"
+if(!"name" in Dsd)Dsd.name="Dsd"
+$desc=$collectedClasses.Dsd
if($desc instanceof Array)$desc=$desc[1]
-Ds.prototype=$desc
-function lw(GV,Hu,nx,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.GV=GV
+Dsd.prototype=$desc
+function lw(GV,Hu,nx,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.GV=GV
this.Hu=Hu
this.nx=nx
this.AP=AP
-this.fn=fn
+this.Lk=Lk
this.AP=AP
-this.fn=fn
+this.Lk=Lk
this.dZ=dZ
this.Sa=Sa
this.Uk=Uk
@@ -27764,32 +27669,14 @@
$desc=$collectedClasses.kV
if($desc instanceof Array)$desc=$desc[1]
kV.prototype=$desc
-function rR(OI,T6,TQ,lo){this.OI=OI
+function rR(OI,T6,C2,lo){this.OI=OI
this.T6=T6
-this.TQ=TQ
+this.C2=C2
this.lo=lo}rR.builtin$cls="rR"
if(!"name" in rR)rR.name="rR"
$desc=$collectedClasses.rR
if($desc instanceof Array)$desc=$desc[1]
rR.prototype=$desc
-function H6(l6,FT){this.l6=l6
-this.FT=FT}H6.builtin$cls="H6"
-if(!"name" in H6)H6.name="H6"
-$desc=$collectedClasses.H6
-if($desc instanceof Array)$desc=$desc[1]
-H6.prototype=$desc
-function wB(l6,FT){this.l6=l6
-this.FT=FT}wB.builtin$cls="wB"
-if(!"name" in wB)wB.name="wB"
-$desc=$collectedClasses.wB
-if($desc instanceof Array)$desc=$desc[1]
-wB.prototype=$desc
-function U1(OI,FT){this.OI=OI
-this.FT=FT}U1.builtin$cls="U1"
-if(!"name" in U1)U1.name="U1"
-$desc=$collectedClasses.U1
-if($desc instanceof Array)$desc=$desc[1]
-U1.prototype=$desc
function SJ(){}SJ.builtin$cls="SJ"
if(!"name" in SJ)SJ.name="SJ"
$desc=$collectedClasses.SJ
@@ -27800,11 +27687,11 @@
$desc=$collectedClasses.SU7
if($desc instanceof Array)$desc=$desc[1]
SU7.prototype=$desc
-function Qr(){}Qr.builtin$cls="Qr"
-if(!"name" in Qr)Qr.name="Qr"
-$desc=$collectedClasses.Qr
+function Tv(){}Tv.builtin$cls="Tv"
+if(!"name" in Tv)Tv.name="Tv"
+$desc=$collectedClasses.Tv
if($desc instanceof Array)$desc=$desc[1]
-Qr.prototype=$desc
+Tv.prototype=$desc
function w2Y(){}w2Y.builtin$cls="w2Y"
if(!"name" in w2Y)w2Y.name="w2Y"
$desc=$collectedClasses.w2Y
@@ -27821,23 +27708,23 @@
if($desc instanceof Array)$desc=$desc[1]
GD.prototype=$desc
GD.prototype.gfN=function(receiver){return this.fN}
-function Sn(L5,Aq){this.L5=L5
-this.Aq=Aq}Sn.builtin$cls="Sn"
+function Sn(L5,F1){this.L5=L5
+this.F1=F1}Sn.builtin$cls="Sn"
if(!"name" in Sn)Sn.name="Sn"
$desc=$collectedClasses.Sn
if($desc instanceof Array)$desc=$desc[1]
Sn.prototype=$desc
-Sn.prototype.gAq=function(receiver){return this.Aq}
+Sn.prototype.gF1=function(receiver){return this.F1}
function nI(){}nI.builtin$cls="nI"
if(!"name" in nI)nI.name="nI"
$desc=$collectedClasses.nI
if($desc instanceof Array)$desc=$desc[1]
nI.prototype=$desc
-function TY(){}TY.builtin$cls="TY"
-if(!"name" in TY)TY.name="TY"
-$desc=$collectedClasses.TY
+function jU(){}jU.builtin$cls="jU"
+if(!"name" in jU)jU.name="jU"
+$desc=$collectedClasses.jU
if($desc instanceof Array)$desc=$desc[1]
-TY.prototype=$desc
+jU.prototype=$desc
function Lj(MA){this.MA=MA}Lj.builtin$cls="Lj"
if(!"name" in Lj)Lj.name="Lj"
$desc=$collectedClasses.Lj
@@ -27848,14 +27735,14 @@
$desc=$collectedClasses.mb
if($desc instanceof Array)$desc=$desc[1]
mb.prototype=$desc
-function am(If){this.If=If}am.builtin$cls="am"
-if(!"name" in am)am.name="am"
-$desc=$collectedClasses.am
+function cb(If){this.If=If}cb.builtin$cls="cb"
+if(!"name" in cb)cb.name="cb"
+$desc=$collectedClasses.cb
if($desc instanceof Array)$desc=$desc[1]
-am.prototype=$desc
-am.prototype.gIf=function(){return this.If}
-function cw(XP,xW,Nz,LQ,If){this.XP=XP
-this.xW=xW
+cb.prototype=$desc
+cb.prototype.gIf=function(){return this.If}
+function cw(XP,yG,Nz,LQ,If){this.XP=XP
+this.yG=yG
this.Nz=Nz
this.LQ=LQ
this.If=If}cw.builtin$cls="cw"
@@ -27914,10 +27801,10 @@
$desc=$collectedClasses.YX
if($desc instanceof Array)$desc=$desc[1]
YX.prototype=$desc
-function BI(AY,XW,BB,Ra,If){this.AY=AY
+function BI(AY,XW,BB,i1,If){this.AY=AY
this.XW=XW
this.BB=BB
-this.Ra=Ra
+this.i1=i1
this.If=If}BI.builtin$cls="BI"
if(!"name" in BI)BI.name="BI"
$desc=$collectedClasses.BI
@@ -27946,7 +27833,7 @@
$desc=$collectedClasses.mg
if($desc instanceof Array)$desc=$desc[1]
mg.prototype=$desc
-function bl(NK,EZ,ut,Db,uA,b0,M2,T1,fX,FU,qu,qN,qm,Ra,RH,If){this.NK=NK
+function bl(NK,EZ,ut,Db,uA,b0,M2,T1,fX,FU,qu,qN,qm,i1,RH,If){this.NK=NK
this.EZ=EZ
this.ut=ut
this.Db=Db
@@ -27959,7 +27846,7 @@
this.qu=qu
this.qN=qN
this.qm=qm
-this.Ra=Ra
+this.i1=i1
this.RH=RH
this.If=If}bl.builtin$cls="bl"
if(!"name" in bl)bl.name="bl"
@@ -27986,7 +27873,7 @@
$desc=$collectedClasses.Ax
if($desc instanceof Array)$desc=$desc[1]
Ax.prototype=$desc
-function Wf(Cr,Tx,H8,Ht,pz,le,qN,qu,zE,b0,FU,T1,fX,M2,uA,Db,xO,qm,UF,Ra,RH,nz,If){this.Cr=Cr
+function Wf(Cr,Tx,H8,Ht,pz,le,qN,qu,zE,b0,FU,T1,fX,M2,uA,Db,xO,qm,UF,i1,RH,jE,If){this.Cr=Cr
this.Tx=Tx
this.H8=H8
this.Ht=Ht
@@ -28005,9 +27892,9 @@
this.xO=xO
this.qm=qm
this.UF=UF
-this.Ra=Ra
+this.i1=i1
this.RH=RH
-this.nz=nz
+this.jE=jE
this.If=If}Wf.builtin$cls="Wf"
if(!"name" in Wf)Wf.name="Wf"
$desc=$collectedClasses.Wf
@@ -28025,21 +27912,21 @@
$desc=$collectedClasses.Ei
if($desc instanceof Array)$desc=$desc[1]
Ei.prototype=$desc
-function U7(b){this.b=b}U7.builtin$cls="U7"
-if(!"name" in U7)U7.name="U7"
-$desc=$collectedClasses.U7
+function Ci(b){this.b=b}Ci.builtin$cls="Ci"
+if(!"name" in Ci)Ci.name="Ci"
+$desc=$collectedClasses.Ci
if($desc instanceof Array)$desc=$desc[1]
-U7.prototype=$desc
+Ci.prototype=$desc
function t0(a){this.a=a}t0.builtin$cls="t0"
if(!"name" in t0)t0.name="t0"
$desc=$collectedClasses.t0
if($desc instanceof Array)$desc=$desc[1]
t0.prototype=$desc
-function Ld(ao,V5,Fo,n6,nz,Ay,le,If){this.ao=ao
+function Ld(ao,V5,Fo,n6,jE,Ay,le,If){this.ao=ao
this.V5=V5
this.Fo=Fo
this.n6=n6
-this.nz=nz
+this.jE=jE
this.Ay=Ay
this.le=le
this.If=If}Ld.builtin$cls="Ld"
@@ -28048,7 +27935,7 @@
if($desc instanceof Array)$desc=$desc[1]
Ld.prototype=$desc
Ld.prototype.gao=function(){return this.ao}
-Ld.prototype.gV5=function(){return this.V5}
+Ld.prototype.gV5=function(receiver){return this.V5}
Ld.prototype.gFo=function(){return this.Fo}
Ld.prototype.gAy=function(receiver){return this.Ay}
function Sz(Ax,xq){this.Ax=Ax
@@ -28057,14 +27944,14 @@
$desc=$collectedClasses.Sz
if($desc instanceof Array)$desc=$desc[1]
Sz.prototype=$desc
-function Zk(dl,Yq,lT,hB,Fo,xV,qx,nz,le,wM,H3,If){this.dl=dl
+function Zk(dl,Yq,lT,hB,Fo,xV,qx,jE,le,wM,H3,If){this.dl=dl
this.Yq=Yq
this.lT=lT
this.hB=hB
this.Fo=Fo
this.xV=xV
this.qx=qx
-this.nz=nz
+this.jE=jE
this.le=le
this.wM=wM
this.H3=H3
@@ -28183,16 +28070,16 @@
JI.prototype.siE=function(v){return this.iE=v}
JI.prototype.gSJ=function(){return this.SJ}
JI.prototype.sSJ=function(v){return this.SJ=v}
-function LO(iE,SJ){this.iE=iE
-this.SJ=SJ}LO.builtin$cls="LO"
-if(!"name" in LO)LO.name="LO"
-$desc=$collectedClasses.LO
+function WVu(iE,SJ){this.iE=iE
+this.SJ=SJ}WVu.builtin$cls="WVu"
+if(!"name" in WVu)WVu.name="WVu"
+$desc=$collectedClasses.WVu
if($desc instanceof Array)$desc=$desc[1]
-LO.prototype=$desc
-LO.prototype.giE=function(){return this.iE}
-LO.prototype.siE=function(v){return this.iE=v}
-LO.prototype.gSJ=function(){return this.SJ}
-LO.prototype.sSJ=function(v){return this.SJ=v}
+WVu.prototype=$desc
+WVu.prototype.giE=function(){return this.iE}
+WVu.prototype.siE=function(v){return this.iE=v}
+WVu.prototype.gSJ=function(){return this.SJ}
+WVu.prototype.sSJ=function(v){return this.SJ=v}
function dz(nL,QC,Gv,iE,SJ,WX,Ip){this.nL=nL
this.QC=QC
this.Gv=Gv
@@ -28238,19 +28125,6 @@
$desc=$collectedClasses.b8
if($desc instanceof Array)$desc=$desc[1]
b8.prototype=$desc
-function j7(a,b){this.a=a
-this.b=b}j7.builtin$cls="j7"
-if(!"name" in j7)j7.name="j7"
-$desc=$collectedClasses.j7
-if($desc instanceof Array)$desc=$desc[1]
-j7.prototype=$desc
-function ff(a,c,d){this.a=a
-this.c=c
-this.d=d}ff.builtin$cls="ff"
-if(!"name" in ff)ff.name="ff"
-$desc=$collectedClasses.ff
-if($desc instanceof Array)$desc=$desc[1]
-ff.prototype=$desc
function Ia(){}Ia.builtin$cls="Ia"
if(!"name" in Ia)Ia.name="Ia"
$desc=$collectedClasses.Ia
@@ -28282,22 +28156,28 @@
$desc=$collectedClasses.da
if($desc instanceof Array)$desc=$desc[1]
da.prototype=$desc
-function xw(a){this.a=a}xw.builtin$cls="xw"
-if(!"name" in xw)xw.name="xw"
-$desc=$collectedClasses.xw
+function pV(a){this.a=a}pV.builtin$cls="pV"
+if(!"name" in pV)pV.name="pV"
+$desc=$collectedClasses.pV
if($desc instanceof Array)$desc=$desc[1]
-xw.prototype=$desc
-function dm(b){this.b=b}dm.builtin$cls="dm"
-if(!"name" in dm)dm.name="dm"
-$desc=$collectedClasses.dm
+pV.prototype=$desc
+function U7(b){this.b=b}U7.builtin$cls="U7"
+if(!"name" in U7)U7.name="U7"
+$desc=$collectedClasses.U7
if($desc instanceof Array)$desc=$desc[1]
-dm.prototype=$desc
+U7.prototype=$desc
function rH(a,b){this.a=a
this.b=b}rH.builtin$cls="rH"
if(!"name" in rH)rH.name="rH"
$desc=$collectedClasses.rH
if($desc instanceof Array)$desc=$desc[1]
rH.prototype=$desc
+function cX(c,d){this.c=c
+this.d=d}cX.builtin$cls="cX"
+if(!"name" in cX)cX.name="cX"
+$desc=$collectedClasses.cX
+if($desc instanceof Array)$desc=$desc[1]
+cX.prototype=$desc
function ZL(a,b,c){this.a=a
this.b=b
this.c=c}ZL.builtin$cls="ZL"
@@ -28305,39 +28185,39 @@
$desc=$collectedClasses.ZL
if($desc instanceof Array)$desc=$desc[1]
ZL.prototype=$desc
-function rq(b,c,d,e){this.b=b
-this.c=c
+function rq(b,d,e,f){this.b=b
this.d=d
-this.e=e}rq.builtin$cls="rq"
+this.e=e
+this.f=f}rq.builtin$cls="rq"
if(!"name" in rq)rq.name="rq"
$desc=$collectedClasses.rq
if($desc instanceof Array)$desc=$desc[1]
rq.prototype=$desc
-function RW(c,b,f,UI){this.c=c
+function RW(c,b,UI,bK){this.c=c
this.b=b
-this.f=f
-this.UI=UI}RW.builtin$cls="RW"
+this.UI=UI
+this.bK=bK}RW.builtin$cls="RW"
if(!"name" in RW)RW.name="RW"
$desc=$collectedClasses.RW
if($desc instanceof Array)$desc=$desc[1]
RW.prototype=$desc
-function RT(c,b,bK,Gq,Rm){this.c=c
+function RT(c,b,Gq,Rm,w3){this.c=c
this.b=b
-this.bK=bK
this.Gq=Gq
-this.Rm=Rm}RT.builtin$cls="RT"
+this.Rm=Rm
+this.w3=w3}RT.builtin$cls="RT"
if(!"name" in RT)RT.name="RT"
$desc=$collectedClasses.RT
if($desc instanceof Array)$desc=$desc[1]
RT.prototype=$desc
-function jZ(c,w3){this.c=c
-this.w3=w3}jZ.builtin$cls="jZ"
+function jZ(c,HZ){this.c=c
+this.HZ=HZ}jZ.builtin$cls="jZ"
if(!"name" in jZ)jZ.name="jZ"
$desc=$collectedClasses.jZ
if($desc instanceof Array)$desc=$desc[1]
jZ.prototype=$desc
-function FZ(a,HZ){this.a=a
-this.HZ=HZ}FZ.builtin$cls="FZ"
+function FZ(a,mG){this.a=a
+this.mG=mG}FZ.builtin$cls="FZ"
if(!"name" in FZ)FZ.name="FZ"
$desc=$collectedClasses.FZ
if($desc instanceof Array)$desc=$desc[1]
@@ -28356,14 +28236,14 @@
$desc=$collectedClasses.qh
if($desc instanceof Array)$desc=$desc[1]
qh.prototype=$desc
-function tG(a,b,c,d){this.a=a
+function YJ(a,b,c,d){this.a=a
this.b=b
this.c=c
-this.d=d}tG.builtin$cls="tG"
-if(!"name" in tG)tG.name="tG"
-$desc=$collectedClasses.tG
+this.d=d}YJ.builtin$cls="YJ"
+if(!"name" in YJ)YJ.name="YJ"
+$desc=$collectedClasses.YJ
if($desc instanceof Array)$desc=$desc[1]
-tG.prototype=$desc
+YJ.prototype=$desc
function jv(e,f){this.e=e
this.f=f}jv.builtin$cls="jv"
if(!"name" in jv)jv.name="jv"
@@ -28376,11 +28256,11 @@
$desc=$collectedClasses.LB
if($desc instanceof Array)$desc=$desc[1]
LB.prototype=$desc
-function zn(bK){this.bK=bK}zn.builtin$cls="zn"
-if(!"name" in zn)zn.name="zn"
-$desc=$collectedClasses.zn
+function DO(bK){this.bK=bK}DO.builtin$cls="DO"
+if(!"name" in DO)DO.name="DO"
+$desc=$collectedClasses.DO
if($desc instanceof Array)$desc=$desc[1]
-zn.prototype=$desc
+DO.prototype=$desc
function lz(a,b,c,d){this.a=a
this.b=b
this.c=c
@@ -28430,17 +28310,17 @@
$desc=$collectedClasses.eN
if($desc instanceof Array)$desc=$desc[1]
eN.prototype=$desc
-function PI(a){this.a=a}PI.builtin$cls="PI"
+function B5(a){this.a=a}B5.builtin$cls="B5"
+if(!"name" in B5)B5.name="B5"
+$desc=$collectedClasses.B5
+if($desc instanceof Array)$desc=$desc[1]
+B5.prototype=$desc
+function PI(a,b){this.a=a
+this.b=b}PI.builtin$cls="PI"
if(!"name" in PI)PI.name="PI"
$desc=$collectedClasses.PI
if($desc instanceof Array)$desc=$desc[1]
PI.prototype=$desc
-function uO(a,b){this.a=a
-this.b=b}uO.builtin$cls="uO"
-if(!"name" in uO)uO.name="uO"
-$desc=$collectedClasses.uO
-if($desc instanceof Array)$desc=$desc[1]
-uO.prototype=$desc
function j4(a,b){this.a=a
this.b=b}j4.builtin$cls="j4"
if(!"name" in j4)j4.name="j4"
@@ -28488,19 +28368,19 @@
$desc=$collectedClasses.Z5
if($desc instanceof Array)$desc=$desc[1]
Z5.prototype=$desc
-function ii(a,b,c){this.a=a
+function j5(a,b,c){this.a=a
this.b=b
-this.c=c}ii.builtin$cls="ii"
+this.c=c}j5.builtin$cls="j5"
+if(!"name" in j5)j5.name="j5"
+$desc=$collectedClasses.j5
+if($desc instanceof Array)$desc=$desc[1]
+j5.prototype=$desc
+function ii(a,d){this.a=a
+this.d=d}ii.builtin$cls="ii"
if(!"name" in ii)ii.name="ii"
$desc=$collectedClasses.ii
if($desc instanceof Array)$desc=$desc[1]
ii.prototype=$desc
-function ib(a,d){this.a=a
-this.d=d}ib.builtin$cls="ib"
-if(!"name" in ib)ib.name="ib"
-$desc=$collectedClasses.ib
-if($desc instanceof Array)$desc=$desc[1]
-ib.prototype=$desc
function MO(){}MO.builtin$cls="MO"
if(!"name" in MO)MO.name="MO"
$desc=$collectedClasses.MO
@@ -28552,13 +28432,13 @@
$desc=$collectedClasses.ez
if($desc instanceof Array)$desc=$desc[1]
ez.prototype=$desc
-function ti(aw){this.aw=aw}ti.builtin$cls="ti"
-if(!"name" in ti)ti.name="ti"
-$desc=$collectedClasses.ti
+function fIm(aw){this.aw=aw}fIm.builtin$cls="fIm"
+if(!"name" in fIm)fIm.name="fIm"
+$desc=$collectedClasses.fIm
if($desc instanceof Array)$desc=$desc[1]
-ti.prototype=$desc
-ti.prototype.gaw=function(){return this.aw}
-ti.prototype.saw=function(v){return this.aw=v}
+fIm.prototype=$desc
+fIm.prototype.gaw=function(){return this.aw}
+fIm.prototype.saw=function(v){return this.aw=v}
function LV(P,aw){this.P=P
this.aw=aw}LV.builtin$cls="LV"
if(!"name" in LV)LV.name="LV"
@@ -28611,12 +28491,12 @@
$desc=$collectedClasses.uR
if($desc instanceof Array)$desc=$desc[1]
uR.prototype=$desc
-function Q0(a,b){this.a=a
-this.b=b}Q0.builtin$cls="Q0"
-if(!"name" in Q0)Q0.name="Q0"
-$desc=$collectedClasses.Q0
+function GU(a,b){this.a=a
+this.b=b}GU.builtin$cls="GU"
+if(!"name" in GU)GU.name="GU"
+$desc=$collectedClasses.GU
if($desc instanceof Array)$desc=$desc[1]
-Q0.prototype=$desc
+GU.prototype=$desc
function YR(){}YR.builtin$cls="YR"
if(!"name" in YR)YR.name="YR"
$desc=$collectedClasses.YR
@@ -28647,17 +28527,11 @@
$desc=$collectedClasses.t3
if($desc instanceof Array)$desc=$desc[1]
t3.prototype=$desc
-function dq(Em,Sb){this.Em=Em
-this.Sb=Sb}dq.builtin$cls="dq"
-if(!"name" in dq)dq.name="dq"
-$desc=$collectedClasses.dq
+function tU(){}tU.builtin$cls="tU"
+if(!"name" in tU)tU.name="tU"
+$desc=$collectedClasses.tU
if($desc instanceof Array)$desc=$desc[1]
-dq.prototype=$desc
-function lO(){}lO.builtin$cls="lO"
-if(!"name" in lO)lO.name="lO"
-$desc=$collectedClasses.lO
-if($desc instanceof Array)$desc=$desc[1]
-lO.prototype=$desc
+tU.prototype=$desc
function aY(){}aY.builtin$cls="aY"
if(!"name" in aY)aY.name="aY"
$desc=$collectedClasses.aY
@@ -28695,11 +28569,11 @@
$desc=$collectedClasses.e4
if($desc instanceof Array)$desc=$desc[1]
e4.prototype=$desc
-function JB(){}JB.builtin$cls="JB"
-if(!"name" in JB)JB.name="JB"
-$desc=$collectedClasses.JB
+function dl(){}dl.builtin$cls="dl"
+if(!"name" in dl)dl.name="dl"
+$desc=$collectedClasses.dl
if($desc instanceof Array)$desc=$desc[1]
-JB.prototype=$desc
+dl.prototype=$desc
function Id(oh){this.oh=oh}Id.builtin$cls="Id"
if(!"name" in Id)Id.name="Id"
$desc=$collectedClasses.Id
@@ -28740,12 +28614,12 @@
$desc=$collectedClasses.dv
if($desc instanceof Array)$desc=$desc[1]
dv.prototype=$desc
-function pV(c,d){this.c=c
-this.d=d}pV.builtin$cls="pV"
-if(!"name" in pV)pV.name="pV"
-$desc=$collectedClasses.pV
+function ph(c,d){this.c=c
+this.d=d}ph.builtin$cls="ph"
+if(!"name" in ph)ph.name="ph"
+$desc=$collectedClasses.ph
if($desc instanceof Array)$desc=$desc[1]
-pV.prototype=$desc
+ph.prototype=$desc
function uo(eT,zU,R1){this.eT=eT
this.zU=zU
this.R1=R1}uo.builtin$cls="uo"
@@ -28772,11 +28646,11 @@
$desc=$collectedClasses.Ha
if($desc instanceof Array)$desc=$desc[1]
Ha.prototype=$desc
-function nU(){}nU.builtin$cls="nU"
-if(!"name" in nU)nU.name="nU"
-$desc=$collectedClasses.nU
+function W5(){}W5.builtin$cls="W5"
+if(!"name" in W5)W5.name="W5"
+$desc=$collectedClasses.W5
if($desc instanceof Array)$desc=$desc[1]
-nU.prototype=$desc
+W5.prototype=$desc
function R8(){}R8.builtin$cls="R8"
if(!"name" in R8)R8.name="R8"
$desc=$collectedClasses.R8
@@ -28873,36 +28747,6 @@
$desc=$collectedClasses.S9
if($desc instanceof Array)$desc=$desc[1]
S9.prototype=$desc
-function ey(X5,vv,OX,OB,H9,lX,zN){this.X5=X5
-this.vv=vv
-this.OX=OX
-this.OB=OB
-this.H9=H9
-this.lX=lX
-this.zN=zN}ey.builtin$cls="ey"
-if(!"name" in ey)ey.name="ey"
-$desc=$collectedClasses.ey
-if($desc instanceof Array)$desc=$desc[1]
-ey.prototype=$desc
-function xd(m6,Q6,ac,X5,vv,OX,OB,H9,lX,zN){this.m6=m6
-this.Q6=Q6
-this.ac=ac
-this.X5=X5
-this.vv=vv
-this.OX=OX
-this.OB=OB
-this.H9=H9
-this.lX=lX
-this.zN=zN}xd.builtin$cls="xd"
-if(!"name" in xd)xd.name="xd"
-$desc=$collectedClasses.xd
-if($desc instanceof Array)$desc=$desc[1]
-xd.prototype=$desc
-function v6(a){this.a=a}v6.builtin$cls="v6"
-if(!"name" in v6)v6.name="v6"
-$desc=$collectedClasses.v6
-if($desc instanceof Array)$desc=$desc[1]
-v6.prototype=$desc
function db(kh,S4,DG,zQ){this.kh=kh
this.S4=S4
this.DG=DG
@@ -28931,11 +28775,11 @@
$desc=$collectedClasses.N6
if($desc instanceof Array)$desc=$desc[1]
N6.prototype=$desc
-function Rr(){}Rr.builtin$cls="Rr"
-if(!"name" in Rr)Rr.name="Rr"
-$desc=$collectedClasses.Rr
+function UB(){}UB.builtin$cls="UB"
+if(!"name" in UB)UB.name="UB"
+$desc=$collectedClasses.UB
if($desc instanceof Array)$desc=$desc[1]
-Rr.prototype=$desc
+UB.prototype=$desc
function YO(X5,vv,OX,OB,DM){this.X5=X5
this.vv=vv
this.OX=OX
@@ -29052,11 +28896,11 @@
jp.prototype=$desc
jp.prototype.gP=function(receiver){return this.P}
jp.prototype.sP=function(receiver,v){return this.P=v}
-function vX(){}vX.builtin$cls="vX"
-if(!"name" in vX)vX.name="vX"
-$desc=$collectedClasses.vX
+function GZ(){}GZ.builtin$cls="GZ"
+if(!"name" in GZ)GZ.name="GZ"
+$desc=$collectedClasses.GZ
if($desc instanceof Array)$desc=$desc[1]
-vX.prototype=$desc
+GZ.prototype=$desc
function Ba(Cw,ac,aY,iW,P6,qT,bb){this.Cw=Cw
this.ac=ac
this.aY=aY
@@ -29078,13 +28922,13 @@
$desc=$collectedClasses.bF
if($desc instanceof Array)$desc=$desc[1]
bF.prototype=$desc
-function LD(a,b,c){this.a=a
+function BW(a,b,c){this.a=a
this.b=b
-this.c=c}LD.builtin$cls="LD"
-if(!"name" in LD)LD.name="LD"
-$desc=$collectedClasses.LD
+this.c=c}BW.builtin$cls="BW"
+if(!"name" in BW)BW.name="BW"
+$desc=$collectedClasses.BW
if($desc instanceof Array)$desc=$desc[1]
-LD.prototype=$desc
+BW.prototype=$desc
function S6B(){}S6B.builtin$cls="S6B"
if(!"name" in S6B)S6B.name="S6B"
$desc=$collectedClasses.S6B
@@ -29100,8 +28944,8 @@
$desc=$collectedClasses.uM
if($desc instanceof Array)$desc=$desc[1]
uM.prototype=$desc
-function DN(Dn,Ln,qT,bb,ya){this.Dn=Dn
-this.Ln=Ln
+function DN(Dn,Jt,qT,bb,ya){this.Dn=Dn
+this.Jt=Jt
this.qT=qT
this.bb=bb
this.ya=ya}DN.builtin$cls="DN"
@@ -29109,8 +28953,8 @@
$desc=$collectedClasses.DN
if($desc instanceof Array)$desc=$desc[1]
DN.prototype=$desc
-function ZM(Dn,Ln,qT,bb,ya){this.Dn=Dn
-this.Ln=Ln
+function ZM(Dn,Jt,qT,bb,ya){this.Dn=Dn
+this.Jt=Jt
this.qT=qT
this.bb=bb
this.ya=ya}ZM.builtin$cls="ZM"
@@ -29118,8 +28962,8 @@
$desc=$collectedClasses.ZM
if($desc instanceof Array)$desc=$desc[1]
ZM.prototype=$desc
-function HW(Dn,Ln,qT,bb,ya){this.Dn=Dn
-this.Ln=Ln
+function HW(Dn,Jt,qT,bb,ya){this.Dn=Dn
+this.Jt=Jt
this.qT=qT
this.bb=bb
this.ya=ya}HW.builtin$cls="HW"
@@ -29142,23 +28986,23 @@
$desc=$collectedClasses.Uk
if($desc instanceof Array)$desc=$desc[1]
Uk.prototype=$desc
-function wI(){}wI.builtin$cls="wI"
-if(!"name" in wI)wI.name="wI"
-$desc=$collectedClasses.wI
+function zF(){}zF.builtin$cls="zF"
+if(!"name" in zF)zF.name="zF"
+$desc=$collectedClasses.zF
if($desc instanceof Array)$desc=$desc[1]
-wI.prototype=$desc
+zF.prototype=$desc
function Zi(){}Zi.builtin$cls="Zi"
if(!"name" in Zi)Zi.name="Zi"
$desc=$collectedClasses.Zi
if($desc instanceof Array)$desc=$desc[1]
Zi.prototype=$desc
-function Ud(Pc,FN){this.Pc=Pc
+function Ud(Ct,FN){this.Ct=Ct
this.FN=FN}Ud.builtin$cls="Ud"
if(!"name" in Ud)Ud.name="Ud"
$desc=$collectedClasses.Ud
if($desc instanceof Array)$desc=$desc[1]
Ud.prototype=$desc
-function K8(Pc,FN){this.Pc=Pc
+function K8(Ct,FN){this.Ct=Ct
this.FN=FN}K8.builtin$cls="K8"
if(!"name" in K8)K8.name="K8"
$desc=$collectedClasses.K8
@@ -29180,9 +29024,9 @@
$desc=$collectedClasses.Cf
if($desc instanceof Array)$desc=$desc[1]
Cf.prototype=$desc
-function Sh(WE,Mw,JN){this.WE=WE
-this.Mw=Mw
-this.JN=JN}Sh.builtin$cls="Sh"
+function Sh(iY,Vy,qi){this.iY=iY
+this.Vy=Vy
+this.qi=qi}Sh.builtin$cls="Sh"
if(!"name" in Sh)Sh.name="Sh"
$desc=$collectedClasses.Sh
if($desc instanceof Array)$desc=$desc[1]
@@ -29203,7 +29047,7 @@
$desc=$collectedClasses.E3
if($desc instanceof Array)$desc=$desc[1]
E3.prototype=$desc
-function Rw(vn,ZP,EN){this.vn=vn
+function Rw(WF,ZP,EN){this.WF=WF
this.ZP=ZP
this.EN=EN}Rw.builtin$cls="Rw"
if(!"name" in Rw)Rw.name="Rw"
@@ -29230,11 +29074,11 @@
$desc=$collectedClasses.a2
if($desc instanceof Array)$desc=$desc[1]
a2.prototype=$desc
-function Rz(){}Rz.builtin$cls="Rz"
-if(!"name" in Rz)Rz.name="Rz"
-$desc=$collectedClasses.Rz
+function Tx(){}Tx.builtin$cls="Tx"
+if(!"name" in Tx)Tx.name="Tx"
+$desc=$collectedClasses.Tx
if($desc instanceof Array)$desc=$desc[1]
-Rz.prototype=$desc
+Tx.prototype=$desc
function iP(y3,aL){this.y3=y3
this.aL=aL}iP.builtin$cls="iP"
if(!"name" in iP)iP.name="iP"
@@ -29252,21 +29096,6 @@
$desc=$collectedClasses.Rq
if($desc instanceof Array)$desc=$desc[1]
Rq.prototype=$desc
-function Hn(){}Hn.builtin$cls="Hn"
-if(!"name" in Hn)Hn.name="Hn"
-$desc=$collectedClasses.Hn
-if($desc instanceof Array)$desc=$desc[1]
-Hn.prototype=$desc
-function Zl(){}Zl.builtin$cls="Zl"
-if(!"name" in Zl)Zl.name="Zl"
-$desc=$collectedClasses.Zl
-if($desc instanceof Array)$desc=$desc[1]
-Zl.prototype=$desc
-function B5(){}B5.builtin$cls="B5"
-if(!"name" in B5)B5.name="B5"
-$desc=$collectedClasses.B5
-if($desc instanceof Array)$desc=$desc[1]
-B5.prototype=$desc
function a6(Fq){this.Fq=Fq}a6.builtin$cls="a6"
if(!"name" in a6)a6.name="a6"
$desc=$collectedClasses.a6
@@ -29304,16 +29133,16 @@
$desc=$collectedClasses.bJ
if($desc instanceof Array)$desc=$desc[1]
bJ.prototype=$desc
-function Np(){}Np.builtin$cls="Np"
-if(!"name" in Np)Np.name="Np"
-$desc=$collectedClasses.Np
+function yd(){}yd.builtin$cls="yd"
+if(!"name" in yd)yd.name="yd"
+$desc=$collectedClasses.yd
if($desc instanceof Array)$desc=$desc[1]
-Np.prototype=$desc
-function mp(uF,UP,mP,SA,FZ){this.uF=uF
+yd.prototype=$desc
+function mp(uF,UP,mP,SA,mZ){this.uF=uF
this.UP=UP
this.mP=mP
this.SA=SA
-this.FZ=FZ}mp.builtin$cls="mp"
+this.mZ=mZ}mp.builtin$cls="mp"
if(!"name" in mp)mp.name="mp"
$desc=$collectedClasses.mp
if($desc instanceof Array)$desc=$desc[1]
@@ -29341,6 +29170,11 @@
$desc=$collectedClasses.UV
if($desc instanceof Array)$desc=$desc[1]
UV.prototype=$desc
+function kF(){}kF.builtin$cls="kF"
+if(!"name" in kF)kF.name="kF"
+$desc=$collectedClasses.kF
+if($desc instanceof Array)$desc=$desc[1]
+kF.prototype=$desc
function VS(){}VS.builtin$cls="VS"
if(!"name" in VS)VS.name="VS"
$desc=$collectedClasses.VS
@@ -29379,11 +29213,11 @@
$desc=$collectedClasses.EH
if($desc instanceof Array)$desc=$desc[1]
EH.prototype=$desc
-function cX(){}cX.builtin$cls="cX"
-if(!"name" in cX)cX.name="cX"
-$desc=$collectedClasses.cX
+function QV(){}QV.builtin$cls="QV"
+if(!"name" in QV)QV.name="QV"
+$desc=$collectedClasses.QV
if($desc instanceof Array)$desc=$desc[1]
-cX.prototype=$desc
+QV.prototype=$desc
function AC(){}AC.builtin$cls="AC"
if(!"name" in AC)AC.name="AC"
$desc=$collectedClasses.AC
@@ -29438,29 +29272,34 @@
$desc=$collectedClasses.uq
if($desc instanceof Array)$desc=$desc[1]
uq.prototype=$desc
-function iD(NN,HC,r0,Fi,ku,tP,Ka,hO,yW){this.NN=NN
+function iD(NN,HC,r0,Fi,ku,tP,Ka,YG,yW){this.NN=NN
this.HC=HC
this.r0=r0
this.Fi=Fi
this.ku=ku
this.tP=tP
this.Ka=Ka
-this.hO=hO
+this.YG=YG
this.yW=yW}iD.builtin$cls="iD"
if(!"name" in iD)iD.name="iD"
$desc=$collectedClasses.iD
if($desc instanceof Array)$desc=$desc[1]
iD.prototype=$desc
+function hP(){}hP.builtin$cls="hP"
+if(!"name" in hP)hP.name="hP"
+$desc=$collectedClasses.hP
+if($desc instanceof Array)$desc=$desc[1]
+hP.prototype=$desc
+function Uo(a){this.a=a}Uo.builtin$cls="Uo"
+if(!"name" in Uo)Uo.name="Uo"
+$desc=$collectedClasses.Uo
+if($desc instanceof Array)$desc=$desc[1]
+Uo.prototype=$desc
function hb(){}hb.builtin$cls="hb"
if(!"name" in hb)hb.name="hb"
$desc=$collectedClasses.hb
if($desc instanceof Array)$desc=$desc[1]
hb.prototype=$desc
-function XX(){}XX.builtin$cls="XX"
-if(!"name" in XX)XX.name="XX"
-$desc=$collectedClasses.XX
-if($desc instanceof Array)$desc=$desc[1]
-XX.prototype=$desc
function Kd(){}Kd.builtin$cls="Kd"
if(!"name" in Kd)Kd.name="Kd"
$desc=$collectedClasses.Kd
@@ -29622,26 +29461,46 @@
$desc=$collectedClasses.nNL
if($desc instanceof Array)$desc=$desc[1]
nNL.prototype=$desc
-function ecX(){}ecX.builtin$cls="ecX"
-if(!"name" in ecX)ecX.name="ecX"
-$desc=$collectedClasses.ecX
+function ma(){}ma.builtin$cls="ma"
+if(!"name" in ma)ma.name="ma"
+$desc=$collectedClasses.ma
if($desc instanceof Array)$desc=$desc[1]
-ecX.prototype=$desc
-function kI(){}kI.builtin$cls="kI"
-if(!"name" in kI)kI.name="kI"
-$desc=$collectedClasses.kI
+ma.prototype=$desc
+function Ou(){}Ou.builtin$cls="Ou"
+if(!"name" in Ou)Ou.name="Ou"
+$desc=$collectedClasses.Ou
if($desc instanceof Array)$desc=$desc[1]
-kI.prototype=$desc
+Ou.prototype=$desc
function yoo(){}yoo.builtin$cls="yoo"
if(!"name" in yoo)yoo.name="yoo"
$desc=$collectedClasses.yoo
if($desc instanceof Array)$desc=$desc[1]
yoo.prototype=$desc
+function ecX(){}ecX.builtin$cls="ecX"
+if(!"name" in ecX)ecX.name="ecX"
+$desc=$collectedClasses.ecX
+if($desc instanceof Array)$desc=$desc[1]
+ecX.prototype=$desc
+function zLC(){}zLC.builtin$cls="zLC"
+if(!"name" in zLC)zLC.name="zLC"
+$desc=$collectedClasses.zLC
+if($desc instanceof Array)$desc=$desc[1]
+zLC.prototype=$desc
function w1p(){}w1p.builtin$cls="w1p"
if(!"name" in w1p)w1p.name="w1p"
$desc=$collectedClasses.w1p
if($desc instanceof Array)$desc=$desc[1]
w1p.prototype=$desc
+function dxW(){}dxW.builtin$cls="dxW"
+if(!"name" in dxW)dxW.name="dxW"
+$desc=$collectedClasses.dxW
+if($desc instanceof Array)$desc=$desc[1]
+dxW.prototype=$desc
+function kEI(){}kEI.builtin$cls="kEI"
+if(!"name" in kEI)kEI.name="kEI"
+$desc=$collectedClasses.kEI
+if($desc instanceof Array)$desc=$desc[1]
+kEI.prototype=$desc
function tJ(){}tJ.builtin$cls="tJ"
if(!"name" in tJ)tJ.name="tJ"
$desc=$collectedClasses.tJ
@@ -29766,11 +29625,11 @@
$desc=$collectedClasses.RX
if($desc instanceof Array)$desc=$desc[1]
RX.prototype=$desc
-function hP(vm){this.vm=vm}hP.builtin$cls="hP"
-if(!"name" in hP)hP.name="hP"
-$desc=$collectedClasses.hP
+function bO(Ob){this.Ob=Ob}bO.builtin$cls="bO"
+if(!"name" in bO)bO.name="bO"
+$desc=$collectedClasses.bO
if($desc instanceof Array)$desc=$desc[1]
-hP.prototype=$desc
+bO.prototype=$desc
function Gm(){}Gm.builtin$cls="Gm"
if(!"name" in Gm)Gm.name="Gm"
$desc=$collectedClasses.Gm
@@ -29815,11 +29674,11 @@
$desc=$collectedClasses.O7
if($desc instanceof Array)$desc=$desc[1]
O7.prototype=$desc
-function IU(){}IU.builtin$cls="IU"
-if(!"name" in IU)IU.name="IU"
-$desc=$collectedClasses.IU
+function hq(){}hq.builtin$cls="hq"
+if(!"name" in hq)hq.name="hq"
+$desc=$collectedClasses.hq
if($desc instanceof Array)$desc=$desc[1]
-IU.prototype=$desc
+hq.prototype=$desc
function E4(eh){this.eh=eh}E4.builtin$cls="E4"
if(!"name" in E4)E4.name="E4"
$desc=$collectedClasses.E4
@@ -29850,7 +29709,7 @@
$desc=$collectedClasses.DV
if($desc instanceof Array)$desc=$desc[1]
DV.prototype=$desc
-function Hp(){}Hp.builtin$cls="Hp"
+function Hp(a){this.a=a}Hp.builtin$cls="Hp"
if(!"name" in Hp)Hp.name="Hp"
$desc=$collectedClasses.Hp
if($desc instanceof Array)$desc=$desc[1]
@@ -29900,11 +29759,11 @@
$desc=$collectedClasses.Ms
if($desc instanceof Array)$desc=$desc[1]
Ms.prototype=$desc
-function ac(){}ac.builtin$cls="ac"
-if(!"name" in ac)ac.name="ac"
-$desc=$collectedClasses.ac
+function Fw(){}Fw.builtin$cls="Fw"
+if(!"name" in Fw)Fw.name="Fw"
+$desc=$collectedClasses.Fw
if($desc instanceof Array)$desc=$desc[1]
-ac.prototype=$desc
+Fw.prototype=$desc
function RS(){}RS.builtin$cls="RS"
if(!"name" in RS)RS.name="RS"
$desc=$collectedClasses.RS
@@ -29920,10 +29779,10 @@
$desc=$collectedClasses.Ys
if($desc instanceof Array)$desc=$desc[1]
Ys.prototype=$desc
-function Lw(ew,yz,nV,Li){this.ew=ew
+function Lw(ew,yz,nV,f9){this.ew=ew
this.yz=yz
this.nV=nV
-this.Li=Li}Lw.builtin$cls="Lw"
+this.f9=f9}Lw.builtin$cls="Lw"
if(!"name" in Lw)Lw.name="Lw"
$desc=$collectedClasses.Lw
if($desc instanceof Array)$desc=$desc[1]
@@ -29958,11 +29817,11 @@
$desc=$collectedClasses.Dg
if($desc instanceof Array)$desc=$desc[1]
Dg.prototype=$desc
-function Ob(){}Ob.builtin$cls="Ob"
-if(!"name" in Ob)Ob.name="Ob"
-$desc=$collectedClasses.Ob
+function Ui(){}Ui.builtin$cls="Ui"
+if(!"name" in Ui)Ui.name="Ui"
+$desc=$collectedClasses.Ui
if($desc instanceof Array)$desc=$desc[1]
-Ob.prototype=$desc
+Ui.prototype=$desc
function Ip(){}Ip.builtin$cls="Ip"
if(!"name" in Ip)Ip.name="Ip"
$desc=$collectedClasses.Ip
@@ -29973,47 +29832,21 @@
$desc=$collectedClasses.Pg
if($desc instanceof Array)$desc=$desc[1]
Pg.prototype=$desc
-function Nb(){}Nb.builtin$cls="Nb"
-if(!"name" in Nb)Nb.name="Nb"
-$desc=$collectedClasses.Nb
+function ObS(){}ObS.builtin$cls="ObS"
+if(!"name" in ObS)ObS.name="ObS"
+$desc=$collectedClasses.ObS
if($desc instanceof Array)$desc=$desc[1]
-Nb.prototype=$desc
+ObS.prototype=$desc
function nA(){}nA.builtin$cls="nA"
if(!"name" in nA)nA.name="nA"
$desc=$collectedClasses.nA
if($desc instanceof Array)$desc=$desc[1]
nA.prototype=$desc
-function Fv(m0,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.m0=m0
+function E9(Py,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.Py=Py
this.AP=AP
-this.fn=fn
+this.Lk=Lk
this.AP=AP
-this.fn=fn
-this.dZ=dZ
-this.Sa=Sa
-this.Uk=Uk
-this.oq=oq
-this.Wz=Wz
-this.SO=SO
-this.B7=B7
-this.X0=X0}Fv.builtin$cls="Fv"
-if(!"name" in Fv)Fv.name="Fv"
-$desc=$collectedClasses.Fv
-if($desc instanceof Array)$desc=$desc[1]
-Fv.prototype=$desc
-Fv.prototype.gm0=function(receiver){return receiver.m0}
-Fv.prototype.gm0.$reflectable=1
-Fv.prototype.sm0=function(receiver,v){return receiver.m0=v}
-Fv.prototype.sm0.$reflectable=1
-function pv(){}pv.builtin$cls="pv"
-if(!"name" in pv)pv.name="pv"
-$desc=$collectedClasses.pv
-if($desc instanceof Array)$desc=$desc[1]
-pv.prototype=$desc
-function E9(Py,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.Py=Py
-this.AP=AP
-this.fn=fn
-this.AP=AP
-this.fn=fn
+this.Lk=Lk
this.dZ=dZ
this.Sa=Sa
this.Uk=Uk
@@ -30030,20 +29863,63 @@
E9.prototype.gPy.$reflectable=1
E9.prototype.sPy=function(receiver,v){return receiver.Py=v}
E9.prototype.sPy.$reflectable=1
-function Vfx(){}Vfx.builtin$cls="Vfx"
-if(!"name" in Vfx)Vfx.name="Vfx"
-$desc=$collectedClasses.Vfx
+function tuj(){}tuj.builtin$cls="tuj"
+if(!"name" in tuj)tuj.name="tuj"
+$desc=$collectedClasses.tuj
if($desc instanceof Array)$desc=$desc[1]
-Vfx.prototype=$desc
-function m8(tY,Pe,AP,fn,pC,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.tY=tY
+tuj.prototype=$desc
+function rm(fn,Ab,Ln,y4,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.fn=fn
+this.Ab=Ab
+this.Ln=Ln
+this.y4=y4
+this.AP=AP
+this.Lk=Lk
+this.AP=AP
+this.Lk=Lk
+this.dZ=dZ
+this.Sa=Sa
+this.Uk=Uk
+this.oq=oq
+this.Wz=Wz
+this.SO=SO
+this.B7=B7
+this.X0=X0}rm.builtin$cls="rm"
+if(!"name" in rm)rm.name="rm"
+$desc=$collectedClasses.rm
+if($desc instanceof Array)$desc=$desc[1]
+rm.prototype=$desc
+rm.prototype.gfn=function(receiver){return receiver.fn}
+rm.prototype.gfn.$reflectable=1
+rm.prototype.sfn=function(receiver,v){return receiver.fn=v}
+rm.prototype.sfn.$reflectable=1
+rm.prototype.gAb=function(receiver){return receiver.Ab}
+rm.prototype.gAb.$reflectable=1
+rm.prototype.sAb=function(receiver,v){return receiver.Ab=v}
+rm.prototype.sAb.$reflectable=1
+rm.prototype.gLn=function(receiver){return receiver.Ln}
+rm.prototype.gLn.$reflectable=1
+rm.prototype.sLn=function(receiver,v){return receiver.Ln=v}
+rm.prototype.sLn.$reflectable=1
+rm.prototype.gy4=function(receiver){return receiver.y4}
+rm.prototype.gy4.$reflectable=1
+rm.prototype.sy4=function(receiver,v){return receiver.y4=v}
+rm.prototype.sy4.$reflectable=1
+function Vct(){}Vct.builtin$cls="Vct"
+if(!"name" in Vct)Vct.name="Vct"
+$desc=$collectedClasses.Vct
+if($desc instanceof Array)$desc=$desc[1]
+Vct.prototype=$desc
+function YW(a){this.a=a}YW.builtin$cls="YW"
+if(!"name" in YW)YW.name="YW"
+$desc=$collectedClasses.YW
+if($desc instanceof Array)$desc=$desc[1]
+YW.prototype=$desc
+function m8(tY,Pe,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.tY=tY
this.Pe=Pe
this.AP=AP
-this.fn=fn
-this.pC=pC
+this.Lk=Lk
this.AP=AP
-this.fn=fn
-this.AP=AP
-this.fn=fn
+this.Lk=Lk
this.dZ=dZ
this.Sa=Sa
this.Uk=Uk
@@ -30056,14 +29932,11 @@
$desc=$collectedClasses.m8
if($desc instanceof Array)$desc=$desc[1]
m8.prototype=$desc
-function Gk(vt,AP,fn,pC,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.vt=vt
+function Gk(vt,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.vt=vt
this.AP=AP
-this.fn=fn
-this.pC=pC
+this.Lk=Lk
this.AP=AP
-this.fn=fn
-this.AP=AP
-this.fn=fn
+this.Lk=Lk
this.dZ=dZ
this.Sa=Sa
this.Uk=Uk
@@ -30080,30 +29953,17 @@
Gk.prototype.gvt.$reflectable=1
Gk.prototype.svt=function(receiver,v){return receiver.vt=v}
Gk.prototype.svt.$reflectable=1
-function Urj(){}Urj.builtin$cls="Urj"
-if(!"name" in Urj)Urj.name="Urj"
-$desc=$collectedClasses.Urj
+function D13(){}D13.builtin$cls="D13"
+if(!"name" in D13)D13.name="D13"
+$desc=$collectedClasses.D13
if($desc instanceof Array)$desc=$desc[1]
-Urj.prototype=$desc
-function e5(a){this.a=a}e5.builtin$cls="e5"
-if(!"name" in e5)e5.name="e5"
-$desc=$collectedClasses.e5
-if($desc instanceof Array)$desc=$desc[1]
-e5.prototype=$desc
-function Ni(){}Ni.builtin$cls="Ni"
-if(!"name" in Ni)Ni.name="Ni"
-$desc=$collectedClasses.Ni
-if($desc instanceof Array)$desc=$desc[1]
-Ni.prototype=$desc
-function AX(tY,Pe,AP,fn,pC,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.tY=tY
+D13.prototype=$desc
+function qW(tY,Pe,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.tY=tY
this.Pe=Pe
this.AP=AP
-this.fn=fn
-this.pC=pC
+this.Lk=Lk
this.AP=AP
-this.fn=fn
-this.AP=AP
-this.fn=fn
+this.Lk=Lk
this.dZ=dZ
this.Sa=Sa
this.Uk=Uk
@@ -30111,19 +29971,16 @@
this.Wz=Wz
this.SO=SO
this.B7=B7
-this.X0=X0}AX.builtin$cls="AX"
-if(!"name" in AX)AX.name="AX"
-$desc=$collectedClasses.AX
+this.X0=X0}qW.builtin$cls="qW"
+if(!"name" in qW)qW.name="qW"
+$desc=$collectedClasses.qW
if($desc instanceof Array)$desc=$desc[1]
-AX.prototype=$desc
-function yb(Z8,AP,fn,pC,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.Z8=Z8
+qW.prototype=$desc
+function mk(Z8,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.Z8=Z8
this.AP=AP
-this.fn=fn
-this.pC=pC
+this.Lk=Lk
this.AP=AP
-this.fn=fn
-this.AP=AP
-this.fn=fn
+this.Lk=Lk
this.dZ=dZ
this.Sa=Sa
this.Uk=Uk
@@ -30131,31 +29988,21 @@
this.Wz=Wz
this.SO=SO
this.B7=B7
-this.X0=X0}yb.builtin$cls="yb"
-if(!"name" in yb)yb.name="yb"
-$desc=$collectedClasses.yb
+this.X0=X0}mk.builtin$cls="mk"
+if(!"name" in mk)mk.name="mk"
+$desc=$collectedClasses.mk
if($desc instanceof Array)$desc=$desc[1]
-yb.prototype=$desc
-yb.prototype.gZ8=function(receiver){return receiver.Z8}
-yb.prototype.gZ8.$reflectable=1
-yb.prototype.sZ8=function(receiver,v){return receiver.Z8=v}
-yb.prototype.sZ8.$reflectable=1
-function oub(){}oub.builtin$cls="oub"
-if(!"name" in oub)oub.name="oub"
-$desc=$collectedClasses.oub
+mk.prototype=$desc
+mk.prototype.gZ8=function(receiver){return receiver.Z8}
+mk.prototype.gZ8.$reflectable=1
+mk.prototype.sZ8=function(receiver,v){return receiver.Z8=v}
+mk.prototype.sZ8.$reflectable=1
+function WZq(){}WZq.builtin$cls="WZq"
+if(!"name" in WZq)WZq.name="WZq"
+$desc=$collectedClasses.WZq
if($desc instanceof Array)$desc=$desc[1]
-oub.prototype=$desc
-function QR(a){this.a=a}QR.builtin$cls="QR"
-if(!"name" in QR)QR.name="QR"
-$desc=$collectedClasses.QR
-if($desc instanceof Array)$desc=$desc[1]
-QR.prototype=$desc
-function Yx(){}Yx.builtin$cls="Yx"
-if(!"name" in Yx)Yx.name="Yx"
-$desc=$collectedClasses.Yx
-if($desc instanceof Array)$desc=$desc[1]
-Yx.prototype=$desc
-function NM(GQ,J0,Oc,CO,bV,kg,LY,q3,Ol,X3,AP,fn,pC,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.GQ=GQ
+WZq.prototype=$desc
+function jY(GQ,J0,Oc,CO,bV,kg,LY,q3,Ol,X3,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.GQ=GQ
this.J0=J0
this.Oc=Oc
this.CO=CO
@@ -30166,12 +30013,9 @@
this.Ol=Ol
this.X3=X3
this.AP=AP
-this.fn=fn
-this.pC=pC
+this.Lk=Lk
this.AP=AP
-this.fn=fn
-this.AP=AP
-this.fn=fn
+this.Lk=Lk
this.dZ=dZ
this.Sa=Sa
this.Uk=Uk
@@ -30179,56 +30023,56 @@
this.Wz=Wz
this.SO=SO
this.B7=B7
-this.X0=X0}NM.builtin$cls="NM"
-if(!"name" in NM)NM.name="NM"
-$desc=$collectedClasses.NM
+this.X0=X0}jY.builtin$cls="jY"
+if(!"name" in jY)jY.name="jY"
+$desc=$collectedClasses.jY
if($desc instanceof Array)$desc=$desc[1]
-NM.prototype=$desc
-NM.prototype.gGQ=function(receiver){return receiver.GQ}
-NM.prototype.gGQ.$reflectable=1
-NM.prototype.sGQ=function(receiver,v){return receiver.GQ=v}
-NM.prototype.sGQ.$reflectable=1
-NM.prototype.gJ0=function(receiver){return receiver.J0}
-NM.prototype.gJ0.$reflectable=1
-NM.prototype.sJ0=function(receiver,v){return receiver.J0=v}
-NM.prototype.sJ0.$reflectable=1
-NM.prototype.gOc=function(receiver){return receiver.Oc}
-NM.prototype.gOc.$reflectable=1
-NM.prototype.sOc=function(receiver,v){return receiver.Oc=v}
-NM.prototype.sOc.$reflectable=1
-NM.prototype.gCO=function(receiver){return receiver.CO}
-NM.prototype.gCO.$reflectable=1
-NM.prototype.sCO=function(receiver,v){return receiver.CO=v}
-NM.prototype.sCO.$reflectable=1
-NM.prototype.gbV=function(receiver){return receiver.bV}
-NM.prototype.gbV.$reflectable=1
-NM.prototype.sbV=function(receiver,v){return receiver.bV=v}
-NM.prototype.sbV.$reflectable=1
-NM.prototype.gkg=function(receiver){return receiver.kg}
-NM.prototype.gkg.$reflectable=1
-NM.prototype.skg=function(receiver,v){return receiver.kg=v}
-NM.prototype.skg.$reflectable=1
-NM.prototype.gLY=function(receiver){return receiver.LY}
-NM.prototype.gLY.$reflectable=1
-NM.prototype.sLY=function(receiver,v){return receiver.LY=v}
-NM.prototype.sLY.$reflectable=1
-NM.prototype.gq3=function(receiver){return receiver.q3}
-NM.prototype.gq3.$reflectable=1
-NM.prototype.sq3=function(receiver,v){return receiver.q3=v}
-NM.prototype.sq3.$reflectable=1
-NM.prototype.gOl=function(receiver){return receiver.Ol}
-NM.prototype.gOl.$reflectable=1
-NM.prototype.sOl=function(receiver,v){return receiver.Ol=v}
-NM.prototype.sOl.$reflectable=1
-NM.prototype.gX3=function(receiver){return receiver.X3}
-NM.prototype.gX3.$reflectable=1
-NM.prototype.sX3=function(receiver,v){return receiver.X3=v}
-NM.prototype.sX3.$reflectable=1
-function c4r(){}c4r.builtin$cls="c4r"
-if(!"name" in c4r)c4r.name="c4r"
-$desc=$collectedClasses.c4r
+jY.prototype=$desc
+jY.prototype.gGQ=function(receiver){return receiver.GQ}
+jY.prototype.gGQ.$reflectable=1
+jY.prototype.sGQ=function(receiver,v){return receiver.GQ=v}
+jY.prototype.sGQ.$reflectable=1
+jY.prototype.gJ0=function(receiver){return receiver.J0}
+jY.prototype.gJ0.$reflectable=1
+jY.prototype.sJ0=function(receiver,v){return receiver.J0=v}
+jY.prototype.sJ0.$reflectable=1
+jY.prototype.gOc=function(receiver){return receiver.Oc}
+jY.prototype.gOc.$reflectable=1
+jY.prototype.sOc=function(receiver,v){return receiver.Oc=v}
+jY.prototype.sOc.$reflectable=1
+jY.prototype.gCO=function(receiver){return receiver.CO}
+jY.prototype.gCO.$reflectable=1
+jY.prototype.sCO=function(receiver,v){return receiver.CO=v}
+jY.prototype.sCO.$reflectable=1
+jY.prototype.gbV=function(receiver){return receiver.bV}
+jY.prototype.gbV.$reflectable=1
+jY.prototype.sbV=function(receiver,v){return receiver.bV=v}
+jY.prototype.sbV.$reflectable=1
+jY.prototype.gkg=function(receiver){return receiver.kg}
+jY.prototype.gkg.$reflectable=1
+jY.prototype.skg=function(receiver,v){return receiver.kg=v}
+jY.prototype.skg.$reflectable=1
+jY.prototype.gLY=function(receiver){return receiver.LY}
+jY.prototype.gLY.$reflectable=1
+jY.prototype.sLY=function(receiver,v){return receiver.LY=v}
+jY.prototype.sLY.$reflectable=1
+jY.prototype.gq3=function(receiver){return receiver.q3}
+jY.prototype.gq3.$reflectable=1
+jY.prototype.sq3=function(receiver,v){return receiver.q3=v}
+jY.prototype.sq3.$reflectable=1
+jY.prototype.gOl=function(receiver){return receiver.Ol}
+jY.prototype.gOl.$reflectable=1
+jY.prototype.sOl=function(receiver,v){return receiver.Ol=v}
+jY.prototype.sOl.$reflectable=1
+jY.prototype.gX3=function(receiver){return receiver.X3}
+jY.prototype.gX3.$reflectable=1
+jY.prototype.sX3=function(receiver,v){return receiver.X3=v}
+jY.prototype.sX3.$reflectable=1
+function pva(){}pva.builtin$cls="pva"
+if(!"name" in pva)pva.name="pva"
+$desc=$collectedClasses.pva
if($desc instanceof Array)$desc=$desc[1]
-c4r.prototype=$desc
+pva.prototype=$desc
function nx(a){this.a=a}nx.builtin$cls="nx"
if(!"name" in nx)nx.name="nx"
$desc=$collectedClasses.nx
@@ -30239,16 +30083,16 @@
$desc=$collectedClasses.jm
if($desc instanceof Array)$desc=$desc[1]
jm.prototype=$desc
-function xj(a){this.a=a}xj.builtin$cls="xj"
+function ke(a){this.a=a}ke.builtin$cls="ke"
+if(!"name" in ke)ke.name="ke"
+$desc=$collectedClasses.ke
+if($desc instanceof Array)$desc=$desc[1]
+ke.prototype=$desc
+function xj(){}xj.builtin$cls="xj"
if(!"name" in xj)xj.name="xj"
$desc=$collectedClasses.xj
if($desc instanceof Array)$desc=$desc[1]
xj.prototype=$desc
-function VB(){}VB.builtin$cls="VB"
-if(!"name" in VB)VB.name="VB"
-$desc=$collectedClasses.VB
-if($desc instanceof Array)$desc=$desc[1]
-VB.prototype=$desc
function aI(b,c){this.b=b
this.c=c}aI.builtin$cls="aI"
if(!"name" in aI)aI.name="aI"
@@ -30277,12 +30121,12 @@
$desc=$collectedClasses.Tm
if($desc instanceof Array)$desc=$desc[1]
Tm.prototype=$desc
-function q1(a,Gq){this.a=a
-this.Gq=Gq}q1.builtin$cls="q1"
-if(!"name" in q1)q1.name="q1"
-$desc=$collectedClasses.q1
+function ib(a,Gq){this.a=a
+this.Gq=Gq}ib.builtin$cls="ib"
+if(!"name" in ib)ib.name="ib"
+$desc=$collectedClasses.ib
if($desc instanceof Array)$desc=$desc[1]
-q1.prototype=$desc
+ib.prototype=$desc
function CA(a,b){this.a=a
this.b=b}CA.builtin$cls="CA"
if(!"name" in CA)CA.name="CA"
@@ -30327,7 +30171,7 @@
$desc=$collectedClasses.uQ
if($desc instanceof Array)$desc=$desc[1]
uQ.prototype=$desc
-function D7(F1,h2){this.F1=F1
+function D7(qt,h2){this.qt=qt
this.h2=h2}D7.builtin$cls="D7"
if(!"name" in D7)D7.name="D7"
$desc=$collectedClasses.D7
@@ -30343,15 +30187,12 @@
$desc=$collectedClasses.GS
if($desc instanceof Array)$desc=$desc[1]
GS.prototype=$desc
-function pR(tY,Pe,AP,fn,pC,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.tY=tY
+function pR(tY,Pe,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.tY=tY
this.Pe=Pe
this.AP=AP
-this.fn=fn
-this.pC=pC
+this.Lk=Lk
this.AP=AP
-this.fn=fn
-this.AP=AP
-this.fn=fn
+this.Lk=Lk
this.dZ=dZ
this.Sa=Sa
this.Uk=Uk
@@ -30369,19 +30210,11 @@
$desc=$collectedClasses.Js
if($desc instanceof Array)$desc=$desc[1]
Js.prototype=$desc
-function fM(){}fM.builtin$cls="fM"
-if(!"name" in fM)fM.name="fM"
-$desc=$collectedClasses.fM
-if($desc instanceof Array)$desc=$desc[1]
-fM.prototype=$desc
-function hx(Xh,AP,fn,pC,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.Xh=Xh
+function hx(Xh,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.Xh=Xh
this.AP=AP
-this.fn=fn
-this.pC=pC
+this.Lk=Lk
this.AP=AP
-this.fn=fn
-this.AP=AP
-this.fn=fn
+this.Lk=Lk
this.dZ=dZ
this.Sa=Sa
this.Uk=Uk
@@ -30398,42 +30231,16 @@
hx.prototype.gXh.$reflectable=1
hx.prototype.sXh=function(receiver,v){return receiver.Xh=v}
hx.prototype.sXh.$reflectable=1
-function Squ(){}Squ.builtin$cls="Squ"
-if(!"name" in Squ)Squ.name="Squ"
-$desc=$collectedClasses.Squ
+function cda(){}cda.builtin$cls="cda"
+if(!"name" in cda)cda.name="cda"
+$desc=$collectedClasses.cda
if($desc instanceof Array)$desc=$desc[1]
-Squ.prototype=$desc
-function PO(pC,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.pC=pC
+cda.prototype=$desc
+function u7(tf,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.tf=tf
this.AP=AP
-this.fn=fn
+this.Lk=Lk
this.AP=AP
-this.fn=fn
-this.dZ=dZ
-this.Sa=Sa
-this.Uk=Uk
-this.oq=oq
-this.Wz=Wz
-this.SO=SO
-this.B7=B7
-this.X0=X0}PO.builtin$cls="PO"
-if(!"name" in PO)PO.name="PO"
-$desc=$collectedClasses.PO
-if($desc instanceof Array)$desc=$desc[1]
-PO.prototype=$desc
-PO.prototype.gpC=function(receiver){return receiver.pC}
-PO.prototype.gpC.$reflectable=1
-PO.prototype.spC=function(receiver,v){return receiver.pC=v}
-PO.prototype.spC.$reflectable=1
-function Vf(){}Vf.builtin$cls="Vf"
-if(!"name" in Vf)Vf.name="Vf"
-$desc=$collectedClasses.Vf
-if($desc instanceof Array)$desc=$desc[1]
-Vf.prototype=$desc
-function u7(Jh,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.Jh=Jh
-this.AP=AP
-this.fn=fn
-this.AP=AP
-this.fn=fn
+this.Lk=Lk
this.dZ=dZ
this.Sa=Sa
this.Uk=Uk
@@ -30446,17 +30253,16 @@
$desc=$collectedClasses.u7
if($desc instanceof Array)$desc=$desc[1]
u7.prototype=$desc
-function fW(a){this.a=a}fW.builtin$cls="fW"
-if(!"name" in fW)fW.name="fW"
-$desc=$collectedClasses.fW
+u7.prototype.gtf=function(receiver){return receiver.tf}
+u7.prototype.gtf.$reflectable=1
+u7.prototype.stf=function(receiver,v){return receiver.tf=v}
+u7.prototype.stf.$reflectable=1
+function waa(){}waa.builtin$cls="waa"
+if(!"name" in waa)waa.name="waa"
+$desc=$collectedClasses.waa
if($desc instanceof Array)$desc=$desc[1]
-fW.prototype=$desc
-function Ey(b){this.b=b}Ey.builtin$cls="Ey"
-if(!"name" in Ey)Ey.name="Ey"
-$desc=$collectedClasses.Ey
-if($desc instanceof Array)$desc=$desc[1]
-Ey.prototype=$desc
-function qm(Aq,tT,eT,yt,wd,oH,z3,AP,fn){this.Aq=Aq
+waa.prototype=$desc
+function qm(B1,tT,eT,yt,wd,oH,z3,AP,Lk){this.B1=B1
this.tT=tT
this.eT=eT
this.yt=yt
@@ -30464,34 +30270,31 @@
this.oH=oH
this.z3=z3
this.AP=AP
-this.fn=fn}qm.builtin$cls="qm"
+this.Lk=Lk}qm.builtin$cls="qm"
if(!"name" in qm)qm.name="qm"
$desc=$collectedClasses.qm
if($desc instanceof Array)$desc=$desc[1]
qm.prototype=$desc
-qm.prototype.gAq=function(receiver){return this.Aq}
+qm.prototype.gB1=function(receiver){return this.B1}
qm.prototype.gtT=function(receiver){return this.tT}
qm.prototype.gtT.$reflectable=1
-function vO(a){this.a=a}vO.builtin$cls="vO"
-if(!"name" in vO)vO.name="vO"
-$desc=$collectedClasses.vO
+function TI(a){this.a=a}TI.builtin$cls="TI"
+if(!"name" in TI)TI.name="TI"
+$desc=$collectedClasses.TI
if($desc instanceof Array)$desc=$desc[1]
-vO.prototype=$desc
-function E7(SS,fb,qY,qO,Hm,pD,eH,vk,AP,fn,pC,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.SS=SS
+TI.prototype=$desc
+function E7(pD,Dt,BA,FT,vk,fb,qO,Hm,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.pD=pD
+this.Dt=Dt
+this.BA=BA
+this.FT=FT
+this.vk=vk
this.fb=fb
-this.qY=qY
this.qO=qO
this.Hm=Hm
-this.pD=pD
-this.eH=eH
-this.vk=vk
this.AP=AP
-this.fn=fn
-this.pC=pC
+this.Lk=Lk
this.AP=AP
-this.fn=fn
-this.AP=AP
-this.fn=fn
+this.Lk=Lk
this.dZ=dZ
this.Sa=Sa
this.Uk=Uk
@@ -30504,54 +30307,47 @@
$desc=$collectedClasses.E7
if($desc instanceof Array)$desc=$desc[1]
E7.prototype=$desc
-E7.prototype.gSS=function(receiver){return receiver.SS}
-E7.prototype.gSS.$reflectable=1
-E7.prototype.sSS=function(receiver,v){return receiver.SS=v}
-E7.prototype.sSS.$reflectable=1
+E7.prototype.gpD=function(receiver){return receiver.pD}
+E7.prototype.gpD.$reflectable=1
+E7.prototype.spD=function(receiver,v){return receiver.pD=v}
+E7.prototype.spD.$reflectable=1
+E7.prototype.gDt=function(receiver){return receiver.Dt}
+E7.prototype.gDt.$reflectable=1
+E7.prototype.gBA=function(receiver){return receiver.BA}
+E7.prototype.gBA.$reflectable=1
+E7.prototype.sBA=function(receiver,v){return receiver.BA=v}
+E7.prototype.sBA.$reflectable=1
+E7.prototype.gFT=function(receiver){return receiver.FT}
+E7.prototype.gFT.$reflectable=1
+E7.prototype.sFT=function(receiver,v){return receiver.FT=v}
+E7.prototype.sFT.$reflectable=1
+E7.prototype.gvk=function(receiver){return receiver.vk}
+E7.prototype.gvk.$reflectable=1
+E7.prototype.svk=function(receiver,v){return receiver.vk=v}
+E7.prototype.svk.$reflectable=1
E7.prototype.gfb=function(receiver){return receiver.fb}
E7.prototype.gfb.$reflectable=1
-E7.prototype.gqY=function(receiver){return receiver.qY}
-E7.prototype.gqY.$reflectable=1
-E7.prototype.sqY=function(receiver,v){return receiver.qY=v}
-E7.prototype.sqY.$reflectable=1
E7.prototype.gqO=function(receiver){return receiver.qO}
E7.prototype.gqO.$reflectable=1
E7.prototype.gHm=function(receiver){return receiver.Hm}
E7.prototype.gHm.$reflectable=1
E7.prototype.sHm=function(receiver,v){return receiver.Hm=v}
E7.prototype.sHm.$reflectable=1
-E7.prototype.gpD=function(receiver){return receiver.pD}
-E7.prototype.gpD.$reflectable=1
-E7.prototype.spD=function(receiver,v){return receiver.pD=v}
-E7.prototype.spD.$reflectable=1
-E7.prototype.geH=function(receiver){return receiver.eH}
-E7.prototype.geH.$reflectable=1
-E7.prototype.seH=function(receiver,v){return receiver.eH=v}
-E7.prototype.seH.$reflectable=1
-E7.prototype.gvk=function(receiver){return receiver.vk}
-E7.prototype.gvk.$reflectable=1
-E7.prototype.svk=function(receiver,v){return receiver.vk=v}
-E7.prototype.svk.$reflectable=1
-function KUl(){}KUl.builtin$cls="KUl"
-if(!"name" in KUl)KUl.name="KUl"
-$desc=$collectedClasses.KUl
+function V4(){}V4.builtin$cls="V4"
+if(!"name" in V4)V4.name="V4"
+$desc=$collectedClasses.V4
if($desc instanceof Array)$desc=$desc[1]
-KUl.prototype=$desc
+V4.prototype=$desc
function SV(a){this.a=a}SV.builtin$cls="SV"
if(!"name" in SV)SV.name="SV"
$desc=$collectedClasses.SV
if($desc instanceof Array)$desc=$desc[1]
SV.prototype=$desc
-function Mf(){}Mf.builtin$cls="Mf"
-if(!"name" in Mf)Mf.name="Mf"
-$desc=$collectedClasses.Mf
-if($desc instanceof Array)$desc=$desc[1]
-Mf.prototype=$desc
-function Kz(pC,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.pC=pC
+function Kz(Pw,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.Pw=Pw
this.AP=AP
-this.fn=fn
+this.Lk=Lk
this.AP=AP
-this.fn=fn
+this.Lk=Lk
this.dZ=dZ
this.Sa=Sa
this.Uk=Uk
@@ -30564,12 +30360,21 @@
$desc=$collectedClasses.Kz
if($desc instanceof Array)$desc=$desc[1]
Kz.prototype=$desc
-function vj(eb,kf,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.eb=eb
+Kz.prototype.gPw=function(receiver){return receiver.Pw}
+Kz.prototype.gPw.$reflectable=1
+Kz.prototype.sPw=function(receiver,v){return receiver.Pw=v}
+Kz.prototype.sPw.$reflectable=1
+function V9(){}V9.builtin$cls="V9"
+if(!"name" in V9)V9.name="V9"
+$desc=$collectedClasses.V9
+if($desc instanceof Array)$desc=$desc[1]
+V9.prototype=$desc
+function vj(eb,kf,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.eb=eb
this.kf=kf
this.AP=AP
-this.fn=fn
+this.Lk=Lk
this.AP=AP
-this.fn=fn
+this.Lk=Lk
this.dZ=dZ
this.Sa=Sa
this.Uk=Uk
@@ -30590,20 +30395,17 @@
vj.prototype.gkf.$reflectable=1
vj.prototype.skf=function(receiver,v){return receiver.kf=v}
vj.prototype.skf.$reflectable=1
-function tuj(){}tuj.builtin$cls="tuj"
-if(!"name" in tuj)tuj.name="tuj"
-$desc=$collectedClasses.tuj
+function V10(){}V10.builtin$cls="V10"
+if(!"name" in V10)V10.name="V10"
+$desc=$collectedClasses.V10
if($desc instanceof Array)$desc=$desc[1]
-tuj.prototype=$desc
-function LU(tY,Pe,AP,fn,pC,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.tY=tY
+V10.prototype=$desc
+function LU(tY,Pe,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.tY=tY
this.Pe=Pe
this.AP=AP
-this.fn=fn
-this.pC=pC
+this.Lk=Lk
this.AP=AP
-this.fn=fn
-this.AP=AP
-this.fn=fn
+this.Lk=Lk
this.dZ=dZ
this.Sa=Sa
this.Uk=Uk
@@ -30616,14 +30418,11 @@
$desc=$collectedClasses.LU
if($desc instanceof Array)$desc=$desc[1]
LU.prototype=$desc
-function T2(N7,AP,fn,pC,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.N7=N7
+function KL(N7,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.N7=N7
this.AP=AP
-this.fn=fn
-this.pC=pC
+this.Lk=Lk
this.AP=AP
-this.fn=fn
-this.AP=AP
-this.fn=fn
+this.Lk=Lk
this.dZ=dZ
this.Sa=Sa
this.Uk=Uk
@@ -30631,30 +30430,20 @@
this.Wz=Wz
this.SO=SO
this.B7=B7
-this.X0=X0}T2.builtin$cls="T2"
-if(!"name" in T2)T2.name="T2"
-$desc=$collectedClasses.T2
+this.X0=X0}KL.builtin$cls="KL"
+if(!"name" in KL)KL.name="KL"
+$desc=$collectedClasses.KL
if($desc instanceof Array)$desc=$desc[1]
-T2.prototype=$desc
-T2.prototype.gN7=function(receiver){return receiver.N7}
-T2.prototype.gN7.$reflectable=1
-T2.prototype.sN7=function(receiver,v){return receiver.N7=v}
-T2.prototype.sN7.$reflectable=1
-function mHk(){}mHk.builtin$cls="mHk"
-if(!"name" in mHk)mHk.name="mHk"
-$desc=$collectedClasses.mHk
+KL.prototype=$desc
+KL.prototype.gN7=function(receiver){return receiver.N7}
+KL.prototype.gN7.$reflectable=1
+KL.prototype.sN7=function(receiver,v){return receiver.N7=v}
+KL.prototype.sN7.$reflectable=1
+function V11(){}V11.builtin$cls="V11"
+if(!"name" in V11)V11.name="V11"
+$desc=$collectedClasses.V11
if($desc instanceof Array)$desc=$desc[1]
-mHk.prototype=$desc
-function Jq(a){this.a=a}Jq.builtin$cls="Jq"
-if(!"name" in Jq)Jq.name="Jq"
-$desc=$collectedClasses.Jq
-if($desc instanceof Array)$desc=$desc[1]
-Jq.prototype=$desc
-function Yn(){}Yn.builtin$cls="Yn"
-if(!"name" in Yn)Yn.name="Yn"
-$desc=$collectedClasses.Yn
-if($desc instanceof Array)$desc=$desc[1]
-Yn.prototype=$desc
+V11.prototype=$desc
function TJ(oc,eT,n2,Cj,wd,Gs){this.oc=oc
this.eT=eT
this.n2=n2
@@ -30708,66 +30497,35 @@
$desc=$collectedClasses.Lb
if($desc instanceof Array)$desc=$desc[1]
Lb.prototype=$desc
-function PF(Gj,ah,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.Gj=Gj
-this.ah=ah
-this.AP=AP
-this.fn=fn
-this.AP=AP
-this.fn=fn
-this.dZ=dZ
-this.Sa=Sa
-this.Uk=Uk
-this.oq=oq
-this.Wz=Wz
-this.SO=SO
-this.B7=B7
-this.X0=X0}PF.builtin$cls="PF"
-if(!"name" in PF)PF.name="PF"
-$desc=$collectedClasses.PF
+function T4(T9,Bu){this.T9=T9
+this.Bu=Bu}T4.builtin$cls="T4"
+if(!"name" in T4)T4.name="T4"
+$desc=$collectedClasses.T4
if($desc instanceof Array)$desc=$desc[1]
-PF.prototype=$desc
-PF.prototype.gGj=function(receiver){return receiver.Gj}
-PF.prototype.gGj.$reflectable=1
-PF.prototype.sGj=function(receiver,v){return receiver.Gj=v}
-PF.prototype.sGj.$reflectable=1
-PF.prototype.gah=function(receiver){return receiver.ah}
-PF.prototype.gah.$reflectable=1
-PF.prototype.sah=function(receiver,v){return receiver.ah=v}
-PF.prototype.sah.$reflectable=1
-function Vct(){}Vct.builtin$cls="Vct"
-if(!"name" in Vct)Vct.name="Vct"
-$desc=$collectedClasses.Vct
+T4.prototype=$desc
+function tzK(){}tzK.builtin$cls="tzK"
+if(!"name" in tzK)tzK.name="tzK"
+$desc=$collectedClasses.tzK
if($desc instanceof Array)$desc=$desc[1]
-Vct.prototype=$desc
-function fA(T9,Bu){this.T9=T9
-this.Bu=Bu}fA.builtin$cls="fA"
-if(!"name" in fA)fA.name="fA"
-$desc=$collectedClasses.fA
-if($desc instanceof Array)$desc=$desc[1]
-fA.prototype=$desc
-function Qz(){}Qz.builtin$cls="Qz"
-if(!"name" in Qz)Qz.name="Qz"
-$desc=$collectedClasses.Qz
-if($desc instanceof Array)$desc=$desc[1]
-Qz.prototype=$desc
+tzK.prototype=$desc
function jA(oc){this.oc=oc}jA.builtin$cls="jA"
if(!"name" in jA)jA.name="jA"
$desc=$collectedClasses.jA
if($desc instanceof Array)$desc=$desc[1]
jA.prototype=$desc
jA.prototype.goc=function(receiver){return this.oc}
-function Jo(){}Jo.builtin$cls="Jo"
-if(!"name" in Jo)Jo.name="Jo"
-$desc=$collectedClasses.Jo
+function PO(){}PO.builtin$cls="PO"
+if(!"name" in PO)PO.name="PO"
+$desc=$collectedClasses.PO
if($desc instanceof Array)$desc=$desc[1]
-Jo.prototype=$desc
-function c5(){}c5.builtin$cls="c5"
-if(!"name" in c5)c5.name="c5"
-$desc=$collectedClasses.c5
+PO.prototype=$desc
+function oBi(){}oBi.builtin$cls="oBi"
+if(!"name" in oBi)oBi.name="oBi"
+$desc=$collectedClasses.oBi
if($desc instanceof Array)$desc=$desc[1]
-c5.prototype=$desc
-function F1(AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.AP=AP
-this.fn=fn
+oBi.prototype=$desc
+function F1(AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.AP=AP
+this.Lk=Lk
this.dZ=dZ
this.Sa=Sa
this.Uk=Uk
@@ -30780,13 +30538,13 @@
$desc=$collectedClasses.F1
if($desc instanceof Array)$desc=$desc[1]
F1.prototype=$desc
-function aQ(uy,ZC,Jo,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.uy=uy
-this.ZC=ZC
+function aQ(KU,V4,Jo,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.KU=KU
+this.V4=V4
this.Jo=Jo
this.AP=AP
-this.fn=fn
+this.Lk=Lk
this.AP=AP
-this.fn=fn
+this.Lk=Lk
this.dZ=dZ
this.Sa=Sa
this.Uk=Uk
@@ -30799,29 +30557,29 @@
$desc=$collectedClasses.aQ
if($desc instanceof Array)$desc=$desc[1]
aQ.prototype=$desc
-aQ.prototype.guy=function(receiver){return receiver.uy}
-aQ.prototype.guy.$reflectable=1
-aQ.prototype.suy=function(receiver,v){return receiver.uy=v}
-aQ.prototype.suy.$reflectable=1
-aQ.prototype.gZC=function(receiver){return receiver.ZC}
-aQ.prototype.gZC.$reflectable=1
-aQ.prototype.sZC=function(receiver,v){return receiver.ZC=v}
-aQ.prototype.sZC.$reflectable=1
+aQ.prototype.gKU=function(receiver){return receiver.KU}
+aQ.prototype.gKU.$reflectable=1
+aQ.prototype.sKU=function(receiver,v){return receiver.KU=v}
+aQ.prototype.sKU.$reflectable=1
+aQ.prototype.gV4=function(receiver){return receiver.V4}
+aQ.prototype.gV4.$reflectable=1
+aQ.prototype.sV4=function(receiver,v){return receiver.V4=v}
+aQ.prototype.sV4.$reflectable=1
aQ.prototype.gJo=function(receiver){return receiver.Jo}
aQ.prototype.gJo.$reflectable=1
aQ.prototype.sJo=function(receiver,v){return receiver.Jo=v}
aQ.prototype.sJo.$reflectable=1
-function D13(){}D13.builtin$cls="D13"
-if(!"name" in D13)D13.name="D13"
-$desc=$collectedClasses.D13
+function V12(){}V12.builtin$cls="V12"
+if(!"name" in V12)V12.name="V12"
+$desc=$collectedClasses.V12
if($desc instanceof Array)$desc=$desc[1]
-D13.prototype=$desc
-function Ya5(uy,ZC,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.uy=uy
-this.ZC=ZC
+V12.prototype=$desc
+function Qa(KU,V4,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.KU=KU
+this.V4=V4
this.AP=AP
-this.fn=fn
+this.Lk=Lk
this.AP=AP
-this.fn=fn
+this.Lk=Lk
this.dZ=dZ
this.Sa=Sa
this.Uk=Uk
@@ -30829,30 +30587,31 @@
this.Wz=Wz
this.SO=SO
this.B7=B7
-this.X0=X0}Ya5.builtin$cls="Ya5"
-if(!"name" in Ya5)Ya5.name="Ya5"
-$desc=$collectedClasses.Ya5
+this.X0=X0}Qa.builtin$cls="Qa"
+if(!"name" in Qa)Qa.name="Qa"
+$desc=$collectedClasses.Qa
if($desc instanceof Array)$desc=$desc[1]
-Ya5.prototype=$desc
-Ya5.prototype.guy=function(receiver){return receiver.uy}
-Ya5.prototype.guy.$reflectable=1
-Ya5.prototype.suy=function(receiver,v){return receiver.uy=v}
-Ya5.prototype.suy.$reflectable=1
-Ya5.prototype.gZC=function(receiver){return receiver.ZC}
-Ya5.prototype.gZC.$reflectable=1
-Ya5.prototype.sZC=function(receiver,v){return receiver.ZC=v}
-Ya5.prototype.sZC.$reflectable=1
-function WZq(){}WZq.builtin$cls="WZq"
-if(!"name" in WZq)WZq.name="WZq"
-$desc=$collectedClasses.WZq
+Qa.prototype=$desc
+Qa.prototype.gKU=function(receiver){return receiver.KU}
+Qa.prototype.gKU.$reflectable=1
+Qa.prototype.sKU=function(receiver,v){return receiver.KU=v}
+Qa.prototype.sKU.$reflectable=1
+Qa.prototype.gV4=function(receiver){return receiver.V4}
+Qa.prototype.gV4.$reflectable=1
+Qa.prototype.sV4=function(receiver,v){return receiver.V4=v}
+Qa.prototype.sV4.$reflectable=1
+function V13(){}V13.builtin$cls="V13"
+if(!"name" in V13)V13.name="V13"
+$desc=$collectedClasses.V13
if($desc instanceof Array)$desc=$desc[1]
-WZq.prototype=$desc
-function Ww(rU,SB,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.rU=rU
+V13.prototype=$desc
+function Ww(rU,SB,Hq,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.rU=rU
this.SB=SB
+this.Hq=Hq
this.AP=AP
-this.fn=fn
+this.Lk=Lk
this.AP=AP
-this.fn=fn
+this.Lk=Lk
this.dZ=dZ
this.Sa=Sa
this.Uk=Uk
@@ -30873,16 +30632,20 @@
Ww.prototype.gSB.$reflectable=1
Ww.prototype.sSB=function(receiver,v){return receiver.SB=v}
Ww.prototype.sSB.$reflectable=1
-function pva(){}pva.builtin$cls="pva"
-if(!"name" in pva)pva.name="pva"
-$desc=$collectedClasses.pva
+Ww.prototype.gHq=function(receiver){return receiver.Hq}
+Ww.prototype.gHq.$reflectable=1
+Ww.prototype.sHq=function(receiver,v){return receiver.Hq=v}
+Ww.prototype.sHq.$reflectable=1
+function V14(){}V14.builtin$cls="V14"
+if(!"name" in V14)V14.name="V14"
+$desc=$collectedClasses.V14
if($desc instanceof Array)$desc=$desc[1]
-pva.prototype=$desc
-function tz(Jo,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.Jo=Jo
+V14.prototype=$desc
+function tz(Jo,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.Jo=Jo
this.AP=AP
-this.fn=fn
+this.Lk=Lk
this.AP=AP
-this.fn=fn
+this.Lk=Lk
this.dZ=dZ
this.Sa=Sa
this.Uk=Uk
@@ -30899,19 +30662,17 @@
tz.prototype.gJo.$reflectable=1
tz.prototype.sJo=function(receiver,v){return receiver.Jo=v}
tz.prototype.sJo.$reflectable=1
-function cda(){}cda.builtin$cls="cda"
-if(!"name" in cda)cda.name="cda"
-$desc=$collectedClasses.cda
+function V15(){}V15.builtin$cls="V15"
+if(!"name" in V15)V15.name="V15"
+$desc=$collectedClasses.V15
if($desc instanceof Array)$desc=$desc[1]
-cda.prototype=$desc
-function fl(Jo,AP,fn,pC,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.Jo=Jo
+V15.prototype=$desc
+function fl(Jo,iy,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.Jo=Jo
+this.iy=iy
this.AP=AP
-this.fn=fn
-this.pC=pC
+this.Lk=Lk
this.AP=AP
-this.fn=fn
-this.AP=AP
-this.fn=fn
+this.Lk=Lk
this.dZ=dZ
this.Sa=Sa
this.Uk=Uk
@@ -30928,20 +30689,21 @@
fl.prototype.gJo.$reflectable=1
fl.prototype.sJo=function(receiver,v){return receiver.Jo=v}
fl.prototype.sJo.$reflectable=1
-function qFb(){}qFb.builtin$cls="qFb"
-if(!"name" in qFb)qFb.name="qFb"
-$desc=$collectedClasses.qFb
+fl.prototype.giy=function(receiver){return receiver.iy}
+fl.prototype.giy.$reflectable=1
+fl.prototype.siy=function(receiver,v){return receiver.iy=v}
+fl.prototype.siy.$reflectable=1
+function V16(){}V16.builtin$cls="V16"
+if(!"name" in V16)V16.name="V16"
+$desc=$collectedClasses.V16
if($desc instanceof Array)$desc=$desc[1]
-qFb.prototype=$desc
-function oM(Ap,Jo,AP,fn,pC,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.Ap=Ap
+V16.prototype=$desc
+function Zt(Ap,Jo,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.Ap=Ap
this.Jo=Jo
this.AP=AP
-this.fn=fn
-this.pC=pC
+this.Lk=Lk
this.AP=AP
-this.fn=fn
-this.AP=AP
-this.fn=fn
+this.Lk=Lk
this.dZ=dZ
this.Sa=Sa
this.Uk=Uk
@@ -30949,33 +30711,30 @@
this.Wz=Wz
this.SO=SO
this.B7=B7
-this.X0=X0}oM.builtin$cls="oM"
-if(!"name" in oM)oM.name="oM"
-$desc=$collectedClasses.oM
+this.X0=X0}Zt.builtin$cls="Zt"
+if(!"name" in Zt)Zt.name="Zt"
+$desc=$collectedClasses.Zt
if($desc instanceof Array)$desc=$desc[1]
-oM.prototype=$desc
-oM.prototype.gAp=function(receiver){return receiver.Ap}
-oM.prototype.gAp.$reflectable=1
-oM.prototype.sAp=function(receiver,v){return receiver.Ap=v}
-oM.prototype.sAp.$reflectable=1
-oM.prototype.gJo=function(receiver){return receiver.Jo}
-oM.prototype.gJo.$reflectable=1
-oM.prototype.sJo=function(receiver,v){return receiver.Jo=v}
-oM.prototype.sJo.$reflectable=1
-function rna(){}rna.builtin$cls="rna"
-if(!"name" in rna)rna.name="rna"
-$desc=$collectedClasses.rna
+Zt.prototype=$desc
+Zt.prototype.gAp=function(receiver){return receiver.Ap}
+Zt.prototype.gAp.$reflectable=1
+Zt.prototype.sAp=function(receiver,v){return receiver.Ap=v}
+Zt.prototype.sAp.$reflectable=1
+Zt.prototype.gJo=function(receiver){return receiver.Jo}
+Zt.prototype.gJo.$reflectable=1
+Zt.prototype.sJo=function(receiver,v){return receiver.Jo=v}
+Zt.prototype.sJo.$reflectable=1
+function V17(){}V17.builtin$cls="V17"
+if(!"name" in V17)V17.name="V17"
+$desc=$collectedClasses.V17
if($desc instanceof Array)$desc=$desc[1]
-rna.prototype=$desc
-function wM(Au,Jo,AP,fn,pC,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.Au=Au
+V17.prototype=$desc
+function iL(Au,Jo,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.Au=Au
this.Jo=Jo
this.AP=AP
-this.fn=fn
-this.pC=pC
+this.Lk=Lk
this.AP=AP
-this.fn=fn
-this.AP=AP
-this.fn=fn
+this.Lk=Lk
this.dZ=dZ
this.Sa=Sa
this.Uk=Uk
@@ -30983,30 +30742,30 @@
this.Wz=Wz
this.SO=SO
this.B7=B7
-this.X0=X0}wM.builtin$cls="wM"
-if(!"name" in wM)wM.name="wM"
-$desc=$collectedClasses.wM
+this.X0=X0}iL.builtin$cls="iL"
+if(!"name" in iL)iL.name="iL"
+$desc=$collectedClasses.iL
if($desc instanceof Array)$desc=$desc[1]
-wM.prototype=$desc
-wM.prototype.gAu=function(receiver){return receiver.Au}
-wM.prototype.gAu.$reflectable=1
-wM.prototype.sAu=function(receiver,v){return receiver.Au=v}
-wM.prototype.sAu.$reflectable=1
-wM.prototype.gJo=function(receiver){return receiver.Jo}
-wM.prototype.gJo.$reflectable=1
-wM.prototype.sJo=function(receiver,v){return receiver.Jo=v}
-wM.prototype.sJo.$reflectable=1
-function Vba(){}Vba.builtin$cls="Vba"
-if(!"name" in Vba)Vba.name="Vba"
-$desc=$collectedClasses.Vba
+iL.prototype=$desc
+iL.prototype.gAu=function(receiver){return receiver.Au}
+iL.prototype.gAu.$reflectable=1
+iL.prototype.sAu=function(receiver,v){return receiver.Au=v}
+iL.prototype.sAu.$reflectable=1
+iL.prototype.gJo=function(receiver){return receiver.Jo}
+iL.prototype.gJo.$reflectable=1
+iL.prototype.sJo=function(receiver,v){return receiver.Jo=v}
+iL.prototype.sJo.$reflectable=1
+function V18(){}V18.builtin$cls="V18"
+if(!"name" in V18)V18.name="V18"
+$desc=$collectedClasses.V18
if($desc instanceof Array)$desc=$desc[1]
-Vba.prototype=$desc
-function lI(k5,xH,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.k5=k5
+V18.prototype=$desc
+function lI(k5,xH,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.k5=k5
this.xH=xH
this.AP=AP
-this.fn=fn
+this.Lk=Lk
this.AP=AP
-this.fn=fn
+this.Lk=Lk
this.dZ=dZ
this.Sa=Sa
this.Uk=Uk
@@ -31027,13 +30786,13 @@
lI.prototype.gxH.$reflectable=1
lI.prototype.sxH=function(receiver,v){return receiver.xH=v}
lI.prototype.sxH.$reflectable=1
-function waa(){}waa.builtin$cls="waa"
-if(!"name" in waa)waa.name="waa"
-$desc=$collectedClasses.waa
+function V19(){}V19.builtin$cls="V19"
+if(!"name" in V19)V19.name="V19"
+$desc=$collectedClasses.V19
if($desc instanceof Array)$desc=$desc[1]
-waa.prototype=$desc
-function uL(AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.AP=AP
-this.fn=fn
+V19.prototype=$desc
+function uL(AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.AP=AP
+this.Lk=Lk
this.dZ=dZ
this.Sa=Sa
this.Uk=Uk
@@ -31064,18 +30823,18 @@
$desc=$collectedClasses.qI
if($desc instanceof Array)$desc=$desc[1]
qI.prototype=$desc
-qI.prototype.gWA=function(){return this.WA}
+qI.prototype.gWA=function(receiver){return this.WA}
qI.prototype.goc=function(receiver){return this.oc}
qI.prototype.gjL=function(receiver){return this.jL}
qI.prototype.gzZ=function(receiver){return this.zZ}
-function J3(b9,kK,Sv,rk,YX,B6,AP,fn){this.b9=b9
+function J3(b9,kK,Sv,rk,YX,B6,AP,Lk){this.b9=b9
this.kK=kK
this.Sv=Sv
this.rk=rk
this.YX=YX
this.B6=B6
this.AP=AP
-this.fn=fn}J3.builtin$cls="J3"
+this.Lk=Lk}J3.builtin$cls="J3"
if(!"name" in J3)J3.name="J3"
$desc=$collectedClasses.J3
if($desc instanceof Array)$desc=$desc[1]
@@ -31130,7 +30889,7 @@
$desc=$collectedClasses.DA
if($desc instanceof Array)$desc=$desc[1]
DA.prototype=$desc
-DA.prototype.gWA=function(){return this.WA}
+DA.prototype.gWA=function(receiver){return this.WA}
DA.prototype.gIl=function(){return this.Il}
function nd(){}nd.builtin$cls="nd"
if(!"name" in nd)nd.name="nd"
@@ -31153,27 +30912,27 @@
$desc=$collectedClasses.lS
if($desc instanceof Array)$desc=$desc[1]
lS.prototype=$desc
-function xh(L1,AP,fn){this.L1=L1
+function xh(L1,AP,Lk){this.L1=L1
this.AP=AP
-this.fn=fn}xh.builtin$cls="xh"
+this.Lk=Lk}xh.builtin$cls="xh"
if(!"name" in xh)xh.name="xh"
$desc=$collectedClasses.xh
if($desc instanceof Array)$desc=$desc[1]
xh.prototype=$desc
-function wn(b3,xg,h3,AP,fn){this.b3=b3
+function wn(b3,xg,h3,AP,Lk){this.b3=b3
this.xg=xg
this.h3=h3
this.AP=AP
-this.fn=fn}wn.builtin$cls="wn"
+this.Lk=Lk}wn.builtin$cls="wn"
if(!"name" in wn)wn.name="wn"
$desc=$collectedClasses.wn
if($desc instanceof Array)$desc=$desc[1]
wn.prototype=$desc
-function Ay(){}Ay.builtin$cls="Ay"
-if(!"name" in Ay)Ay.name="Ay"
-$desc=$collectedClasses.Ay
+function er(){}er.builtin$cls="er"
+if(!"name" in er)er.name="er"
+$desc=$collectedClasses.er
if($desc instanceof Array)$desc=$desc[1]
-Ay.prototype=$desc
+er.prototype=$desc
function Bj(a){this.a=a}Bj.builtin$cls="Bj"
if(!"name" in Bj)Bj.name="Bj"
$desc=$collectedClasses.Bj
@@ -31191,9 +30950,9 @@
HA.prototype.gG3=function(receiver){return this.G3}
HA.prototype.gjL=function(receiver){return this.jL}
HA.prototype.gzZ=function(receiver){return this.zZ}
-function qC(Zp,AP,fn){this.Zp=Zp
+function qC(Zp,AP,Lk){this.Zp=Zp
this.AP=AP
-this.fn=fn}qC.builtin$cls="qC"
+this.Lk=Lk}qC.builtin$cls="qC"
if(!"name" in qC)qC.name="qC"
$desc=$collectedClasses.qC
if($desc instanceof Array)$desc=$desc[1]
@@ -31208,14 +30967,14 @@
$desc=$collectedClasses.Lo
if($desc instanceof Array)$desc=$desc[1]
Lo.prototype=$desc
-function WR(ay,YB,BK,kN,cs,cT,AP,fn){this.ay=ay
+function WR(ay,YB,BK,kN,cs,cT,AP,Lk){this.ay=ay
this.YB=YB
this.BK=BK
this.kN=kN
this.cs=cs
this.cT=cT
this.AP=AP
-this.fn=fn}WR.builtin$cls="WR"
+this.Lk=Lk}WR.builtin$cls="WR"
if(!"name" in WR)WR.name="WR"
$desc=$collectedClasses.WR
if($desc instanceof Array)$desc=$desc[1]
@@ -31239,11 +30998,11 @@
$desc=$collectedClasses.C4
if($desc instanceof Array)$desc=$desc[1]
C4.prototype=$desc
-function YJ(){}YJ.builtin$cls="YJ"
-if(!"name" in YJ)YJ.name="YJ"
-$desc=$collectedClasses.YJ
+function Md(){}Md.builtin$cls="Md"
+if(!"name" in Md)Md.name="Md"
+$desc=$collectedClasses.Md
if($desc instanceof Array)$desc=$desc[1]
-YJ.prototype=$desc
+Md.prototype=$desc
function km(a){this.a=a}km.builtin$cls="km"
if(!"name" in km)km.name="km"
$desc=$collectedClasses.km
@@ -31254,7 +31013,7 @@
$desc=$collectedClasses.Zj
if($desc instanceof Array)$desc=$desc[1]
Zj.prototype=$desc
-function XP(zx,kw,aa,RT,Q7,NF,hf,xX,cI,lD,Gd,Ei){this.zx=zx
+function XP(zx,kw,aa,RT,Q7,NF,hf,xX,cI,lD,Gd,Ve){this.zx=zx
this.kw=kw
this.aa=aa
this.RT=RT
@@ -31265,7 +31024,7 @@
this.cI=cI
this.lD=lD
this.Gd=Gd
-this.Ei=Ei}XP.builtin$cls="XP"
+this.Ve=Ve}XP.builtin$cls="XP"
if(!"name" in XP)XP.name="XP"
$desc=$collectedClasses.XP
if($desc instanceof Array)$desc=$desc[1]
@@ -31305,11 +31064,11 @@
$desc=$collectedClasses.MX
if($desc instanceof Array)$desc=$desc[1]
MX.prototype=$desc
-function w10(){}w10.builtin$cls="w10"
-if(!"name" in w10)w10.name="w10"
-$desc=$collectedClasses.w10
+function w12(){}w12.builtin$cls="w12"
+if(!"name" in w12)w12.name="w12"
+$desc=$collectedClasses.w12
if($desc instanceof Array)$desc=$desc[1]
-w10.prototype=$desc
+w12.prototype=$desc
function r3y(a){this.a=a}r3y.builtin$cls="r3y"
if(!"name" in r3y)r3y.name="r3y"
$desc=$collectedClasses.r3y
@@ -31409,8 +31168,8 @@
$desc=$collectedClasses.Bf
if($desc instanceof Array)$desc=$desc[1]
Bf.prototype=$desc
-function ir(AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.AP=AP
-this.fn=fn
+function ir(AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.AP=AP
+this.Lk=Lk
this.dZ=dZ
this.Sa=Sa
this.Uk=Uk
@@ -31423,11 +31182,11 @@
$desc=$collectedClasses.ir
if($desc instanceof Array)$desc=$desc[1]
ir.prototype=$desc
-function jpR(X0){this.X0=X0}jpR.builtin$cls="jpR"
-if(!"name" in jpR)jpR.name="jpR"
-$desc=$collectedClasses.jpR
+function Sa(X0){this.X0=X0}Sa.builtin$cls="Sa"
+if(!"name" in Sa)Sa.name="Sa"
+$desc=$collectedClasses.Sa
if($desc instanceof Array)$desc=$desc[1]
-jpR.prototype=$desc
+Sa.prototype=$desc
zs.prototype.gKM=function(receiver){return receiver.X0}
zs.prototype.gKM.$reflectable=1
function GN(){}GN.builtin$cls="GN"
@@ -31460,11 +31219,11 @@
$desc=$collectedClasses.V3
if($desc instanceof Array)$desc=$desc[1]
V3.prototype=$desc
-function Bl(){}Bl.builtin$cls="Bl"
-if(!"name" in Bl)Bl.name="Bl"
-$desc=$collectedClasses.Bl
+function rD(){}rD.builtin$cls="rD"
+if(!"name" in rD)rD.name="rD"
+$desc=$collectedClasses.rD
if($desc instanceof Array)$desc=$desc[1]
-Bl.prototype=$desc
+rD.prototype=$desc
function Fn(){}Fn.builtin$cls="Fn"
if(!"name" in Fn)Fn.name="Fn"
$desc=$collectedClasses.Fn
@@ -31552,17 +31311,17 @@
$desc=$collectedClasses.Xy
if($desc instanceof Array)$desc=$desc[1]
Xy.prototype=$desc
-function G0(a){this.a=a}G0.builtin$cls="G0"
-if(!"name" in G0)G0.name="G0"
-$desc=$collectedClasses.G0
+function uK(a){this.a=a}uK.builtin$cls="uK"
+if(!"name" in uK)uK.name="uK"
+$desc=$collectedClasses.uK
if($desc instanceof Array)$desc=$desc[1]
-G0.prototype=$desc
-function mY(a9,Cu,uI,Y7,AP,fn){this.a9=a9
+uK.prototype=$desc
+function mY(a9,Cu,uI,Y7,AP,Lk){this.a9=a9
this.Cu=Cu
this.uI=uI
this.Y7=Y7
this.AP=AP
-this.fn=fn}mY.builtin$cls="mY"
+this.Lk=Lk}mY.builtin$cls="mY"
if(!"name" in mY)mY.name="mY"
$desc=$collectedClasses.mY
if($desc instanceof Array)$desc=$desc[1]
@@ -31578,10 +31337,10 @@
$desc=$collectedClasses.mB
if($desc instanceof Array)$desc=$desc[1]
mB.prototype=$desc
-function XF(vq,L1,AP,fn){this.vq=vq
+function XF(vq,L1,AP,Lk){this.vq=vq
this.L1=L1
this.AP=AP
-this.fn=fn}XF.builtin$cls="XF"
+this.Lk=Lk}XF.builtin$cls="XF"
if(!"name" in XF)XF.name="XF"
$desc=$collectedClasses.XF
if($desc instanceof Array)$desc=$desc[1]
@@ -31592,11 +31351,6 @@
$desc=$collectedClasses.bX
if($desc instanceof Array)$desc=$desc[1]
bX.prototype=$desc
-function Uf(){}Uf.builtin$cls="Uf"
-if(!"name" in Uf)Uf.name="Uf"
-$desc=$collectedClasses.Uf
-if($desc instanceof Array)$desc=$desc[1]
-Uf.prototype=$desc
function Ra(){}Ra.builtin$cls="Ra"
if(!"name" in Ra)Ra.name="Ra"
$desc=$collectedClasses.Ra
@@ -31667,11 +31421,16 @@
$desc=$collectedClasses.w7
if($desc instanceof Array)$desc=$desc[1]
w7.prototype=$desc
-function w9(){}w9.builtin$cls="w9"
-if(!"name" in w9)w9.name="w9"
-$desc=$collectedClasses.w9
+function w10(){}w10.builtin$cls="w10"
+if(!"name" in w10)w10.name="w10"
+$desc=$collectedClasses.w10
if($desc instanceof Array)$desc=$desc[1]
-w9.prototype=$desc
+w10.prototype=$desc
+function w11(){}w11.builtin$cls="w11"
+if(!"name" in w11)w11.name="w11"
+$desc=$collectedClasses.w11
+if($desc instanceof Array)$desc=$desc[1]
+w11.prototype=$desc
function c4(a){this.a=a}c4.builtin$cls="c4"
if(!"name" in c4)c4.name="c4"
$desc=$collectedClasses.c4
@@ -31686,14 +31445,15 @@
if($desc instanceof Array)$desc=$desc[1]
z6.prototype=$desc
z6.prototype.geT=function(receiver){return this.eT}
-function Ay0(bO,Lv){this.bO=bO
-this.Lv=Lv}Ay0.builtin$cls="Ay0"
-if(!"name" in Ay0)Ay0.name="Ay0"
-$desc=$collectedClasses.Ay0
+z6.prototype.gk8=function(){return this.k8}
+function Ay(bO,Lv){this.bO=bO
+this.Lv=Lv}Ay.builtin$cls="Ay"
+if(!"name" in Ay)Ay.name="Ay"
+$desc=$collectedClasses.Ay
if($desc instanceof Array)$desc=$desc[1]
-Ay0.prototype=$desc
-Ay0.prototype.sbO=function(v){return this.bO=v}
-Ay0.prototype.gLv=function(){return this.Lv}
+Ay.prototype=$desc
+Ay.prototype.sbO=function(v){return this.bO=v}
+Ay.prototype.gLv=function(){return this.Lv}
function Ed(Jd){this.Jd=Jd}Ed.builtin$cls="Ed"
if(!"name" in Ed)Ed.name="Ed"
$desc=$collectedClasses.Ed
@@ -31794,19 +31554,19 @@
if($desc instanceof Array)$desc=$desc[1]
mv.prototype=$desc
mv.prototype.gwz=function(){return this.wz}
-function mG(Bb,T8,KL,bO,tj,Lv,k6){this.Bb=Bb
+function iv(Bb,T8,KL,bO,tj,Lv,k6){this.Bb=Bb
this.T8=T8
this.KL=KL
this.bO=bO
this.tj=tj
this.Lv=Lv
-this.k6=k6}mG.builtin$cls="mG"
-if(!"name" in mG)mG.name="mG"
-$desc=$collectedClasses.mG
+this.k6=k6}iv.builtin$cls="iv"
+if(!"name" in iv)iv.name="iv"
+$desc=$collectedClasses.iv
if($desc instanceof Array)$desc=$desc[1]
-mG.prototype=$desc
-mG.prototype.gBb=function(){return this.Bb}
-mG.prototype.gT8=function(){return this.T8}
+iv.prototype=$desc
+iv.prototype.gBb=function(){return this.Bb}
+iv.prototype.gT8=function(){return this.T8}
function uA(a,b){this.a=a
this.b=b}uA.builtin$cls="uA"
if(!"name" in uA)uA.name="uA"
@@ -31856,11 +31616,11 @@
$desc=$collectedClasses.ja
if($desc instanceof Array)$desc=$desc[1]
ja.prototype=$desc
-function zw(d){this.d=d}zw.builtin$cls="zw"
-if(!"name" in zw)zw.name="zw"
-$desc=$collectedClasses.zw
+function ey(d){this.d=d}ey.builtin$cls="ey"
+if(!"name" in ey)ey.name="ey"
+$desc=$collectedClasses.ey
if($desc instanceof Array)$desc=$desc[1]
-zw.prototype=$desc
+ey.prototype=$desc
function fa(hP,re,KL,bO,tj,Lv,k6){this.hP=hP
this.re=re
this.KL=KL
@@ -32090,16 +31850,16 @@
$desc=$collectedClasses.fr
if($desc instanceof Array)$desc=$desc[1]
fr.prototype=$desc
-function cfS(){}cfS.builtin$cls="cfS"
-if(!"name" in cfS)cfS.name="cfS"
-$desc=$collectedClasses.cfS
+function d2(){}d2.builtin$cls="d2"
+if(!"name" in d2)d2.name="d2"
+$desc=$collectedClasses.d2
if($desc instanceof Array)$desc=$desc[1]
-cfS.prototype=$desc
-function JG(kW,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.kW=kW
+d2.prototype=$desc
+function JG(kW,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.kW=kW
this.AP=AP
-this.fn=fn
+this.Lk=Lk
this.AP=AP
-this.fn=fn
+this.Lk=Lk
this.dZ=dZ
this.Sa=Sa
this.Uk=Uk
@@ -32116,23 +31876,20 @@
JG.prototype.gkW.$reflectable=1
JG.prototype.skW=function(receiver,v){return receiver.kW=v}
JG.prototype.skW.$reflectable=1
-function V0(){}V0.builtin$cls="V0"
-if(!"name" in V0)V0.name="V0"
-$desc=$collectedClasses.V0
+function V20(){}V20.builtin$cls="V20"
+if(!"name" in V20)V20.name="V20"
+$desc=$collectedClasses.V20
if($desc instanceof Array)$desc=$desc[1]
-V0.prototype=$desc
-function knI(zw,AP,fn,tY,Pe,AP,fn,pC,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.zw=zw
+V20.prototype=$desc
+function knI(zw,AP,Lk,tY,Pe,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.zw=zw
this.AP=AP
-this.fn=fn
+this.Lk=Lk
this.tY=tY
this.Pe=Pe
this.AP=AP
-this.fn=fn
-this.pC=pC
+this.Lk=Lk
this.AP=AP
-this.fn=fn
-this.AP=AP
-this.fn=fn
+this.Lk=Lk
this.dZ=dZ
this.Sa=Sa
this.Uk=Uk
@@ -32154,14 +31911,12 @@
$desc=$collectedClasses.T5
if($desc instanceof Array)$desc=$desc[1]
T5.prototype=$desc
-function fI(Uz,AP,fn,pC,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.Uz=Uz
+function fI(Uz,HJ,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.Uz=Uz
+this.HJ=HJ
this.AP=AP
-this.fn=fn
-this.pC=pC
+this.Lk=Lk
this.AP=AP
-this.fn=fn
-this.AP=AP
-this.fn=fn
+this.Lk=Lk
this.dZ=dZ
this.Sa=Sa
this.Uk=Uk
@@ -32178,30 +31933,432 @@
fI.prototype.gUz.$reflectable=1
fI.prototype.sUz=function(receiver,v){return receiver.Uz=v}
fI.prototype.sUz.$reflectable=1
-function oaa(){}oaa.builtin$cls="oaa"
-if(!"name" in oaa)oaa.name="oaa"
-$desc=$collectedClasses.oaa
+fI.prototype.gHJ=function(receiver){return receiver.HJ}
+fI.prototype.gHJ.$reflectable=1
+fI.prototype.sHJ=function(receiver,v){return receiver.HJ=v}
+fI.prototype.sHJ.$reflectable=1
+function V21(){}V21.builtin$cls="V21"
+if(!"name" in V21)V21.name="V21"
+$desc=$collectedClasses.V21
if($desc instanceof Array)$desc=$desc[1]
-oaa.prototype=$desc
-function qq(a){this.a=a}qq.builtin$cls="qq"
+V21.prototype=$desc
+function qq(a,b){this.a=a
+this.b=b}qq.builtin$cls="qq"
if(!"name" in qq)qq.name="qq"
$desc=$collectedClasses.qq
if($desc instanceof Array)$desc=$desc[1]
qq.prototype=$desc
-function FC(){}FC.builtin$cls="FC"
-if(!"name" in FC)FC.name="FC"
-$desc=$collectedClasses.FC
+function G8(F1){this.F1=F1}G8.builtin$cls="G8"
+if(!"name" in G8)G8.name="G8"
+$desc=$collectedClasses.G8
if($desc instanceof Array)$desc=$desc[1]
-FC.prototype=$desc
-function xI(tY,Pe,AP,fn,pC,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.tY=tY
+G8.prototype=$desc
+G8.prototype.gF1=function(receiver){return this.F1}
+function fJ(F1,A4){this.F1=F1
+this.A4=A4}fJ.builtin$cls="fJ"
+if(!"name" in fJ)fJ.name="fJ"
+$desc=$collectedClasses.fJ
+if($desc instanceof Array)$desc=$desc[1]
+fJ.prototype=$desc
+function q1(a){this.a=a}q1.builtin$cls="q1"
+if(!"name" in q1)q1.name="q1"
+$desc=$collectedClasses.q1
+if($desc instanceof Array)$desc=$desc[1]
+q1.prototype=$desc
+function jx(F1,A4){this.F1=F1
+this.A4=A4}jx.builtin$cls="jx"
+if(!"name" in jx)jx.name="jx"
+$desc=$collectedClasses.jx
+if($desc instanceof Array)$desc=$desc[1]
+jx.prototype=$desc
+function yT(){}yT.builtin$cls="yT"
+if(!"name" in yT)yT.name="yT"
+$desc=$collectedClasses.yT
+if($desc instanceof Array)$desc=$desc[1]
+yT.prototype=$desc
+function Cn(){}Cn.builtin$cls="Cn"
+if(!"name" in Cn)Cn.name="Cn"
+$desc=$collectedClasses.Cn
+if($desc instanceof Array)$desc=$desc[1]
+Cn.prototype=$desc
+function du(F1,A4){this.F1=F1
+this.A4=A4}du.builtin$cls="du"
+if(!"name" in du)du.name="du"
+$desc=$collectedClasses.du
+if($desc instanceof Array)$desc=$desc[1]
+du.prototype=$desc
+function xc(F1,A4){this.F1=F1
+this.A4=A4}xc.builtin$cls="xc"
+if(!"name" in xc)xc.name="xc"
+$desc=$collectedClasses.xc
+if($desc instanceof Array)$desc=$desc[1]
+xc.prototype=$desc
+function bv(zf,fq,ne,PH,pw,v9,zb,KT,f5,cL,LE,Cf,W1,S9,AP,Lk,Fm,KG,mQ,nr,bN,GR,AP,Lk){this.zf=zf
+this.fq=fq
+this.ne=ne
+this.PH=PH
+this.pw=pw
+this.v9=v9
+this.zb=zb
+this.KT=KT
+this.f5=f5
+this.cL=cL
+this.LE=LE
+this.Cf=Cf
+this.W1=W1
+this.S9=S9
+this.AP=AP
+this.Lk=Lk
+this.Fm=Fm
+this.KG=KG
+this.mQ=mQ
+this.nr=nr
+this.bN=bN
+this.GR=GR
+this.AP=AP
+this.Lk=Lk}bv.builtin$cls="bv"
+if(!"name" in bv)bv.name="bv"
+$desc=$collectedClasses.bv
+if($desc instanceof Array)$desc=$desc[1]
+bv.prototype=$desc
+bv.prototype.gzf=function(){return this.zf}
+bv.prototype.gbN=function(){return this.KT}
+bv.prototype.sbN=function(v){return this.KT=v}
+bv.prototype.gGR=function(){return this.f5}
+bv.prototype.sGR=function(v){return this.f5=v}
+bv.prototype.gLE=function(){return this.LE}
+bv.prototype.gLE.$reflectable=1
+function D3(){}D3.builtin$cls="D3"
+if(!"name" in D3)D3.name="D3"
+$desc=$collectedClasses.D3
+if($desc instanceof Array)$desc=$desc[1]
+D3.prototype=$desc
+function KQ(a){this.a=a}KQ.builtin$cls="KQ"
+if(!"name" in KQ)KQ.name="KQ"
+$desc=$collectedClasses.KQ
+if($desc instanceof Array)$desc=$desc[1]
+KQ.prototype=$desc
+function Qq(a){this.a=a}Qq.builtin$cls="Qq"
+if(!"name" in Qq)Qq.name="Qq"
+$desc=$collectedClasses.Qq
+if($desc instanceof Array)$desc=$desc[1]
+Qq.prototype=$desc
+function Qd(Gt,i2,Fm,KG,mQ,nr,bN,GR,AP,Lk){this.Gt=Gt
+this.i2=i2
+this.Fm=Fm
+this.KG=KG
+this.mQ=mQ
+this.nr=nr
+this.bN=bN
+this.GR=GR
+this.AP=AP
+this.Lk=Lk}Qd.builtin$cls="Qd"
+if(!"name" in Qd)Qd.name="Qd"
+$desc=$collectedClasses.Qd
+if($desc instanceof Array)$desc=$desc[1]
+Qd.prototype=$desc
+Qd.prototype.gi2=function(receiver){return this.i2}
+Qd.prototype.gi2.$reflectable=1
+function i6(a,b){this.a=a
+this.b=b}i6.builtin$cls="i6"
+if(!"name" in i6)i6.name="i6"
+$desc=$collectedClasses.i6
+if($desc instanceof Array)$desc=$desc[1]
+i6.prototype=$desc
+function r2(c){this.c=c}r2.builtin$cls="r2"
+if(!"name" in r2)r2.name="r2"
+$desc=$collectedClasses.r2
+if($desc instanceof Array)$desc=$desc[1]
+r2.prototype=$desc
+function JB(d){this.d=d}JB.builtin$cls="JB"
+if(!"name" in JB)JB.name="JB"
+$desc=$collectedClasses.JB
+if($desc instanceof Array)$desc=$desc[1]
+JB.prototype=$desc
+function qj(){}qj.builtin$cls="qj"
+if(!"name" in qj)qj.name="qj"
+$desc=$collectedClasses.qj
+if($desc instanceof Array)$desc=$desc[1]
+qj.prototype=$desc
+function BH(a){this.a=a}BH.builtin$cls="BH"
+if(!"name" in BH)BH.name="BH"
+$desc=$collectedClasses.BH
+if($desc instanceof Array)$desc=$desc[1]
+BH.prototype=$desc
+function SI(RF,Fm,KG,mQ,nr,bN,GR,AP,Lk){this.RF=RF
+this.Fm=Fm
+this.KG=KG
+this.mQ=mQ
+this.nr=nr
+this.bN=bN
+this.GR=GR
+this.AP=AP
+this.Lk=Lk}SI.builtin$cls="SI"
+if(!"name" in SI)SI.name="SI"
+$desc=$collectedClasses.SI
+if($desc instanceof Array)$desc=$desc[1]
+SI.prototype=$desc
+function pt(J6,LD,AP,Lk,Fm,KG,mQ,nr,bN,GR,AP,Lk){this.J6=J6
+this.LD=LD
+this.AP=AP
+this.Lk=Lk
+this.Fm=Fm
+this.KG=KG
+this.mQ=mQ
+this.nr=nr
+this.bN=bN
+this.GR=GR
+this.AP=AP
+this.Lk=Lk}pt.builtin$cls="pt"
+if(!"name" in pt)pt.name="pt"
+$desc=$collectedClasses.pt
+if($desc instanceof Array)$desc=$desc[1]
+pt.prototype=$desc
+function wVq(){}wVq.builtin$cls="wVq"
+if(!"name" in wVq)wVq.name="wVq"
+$desc=$collectedClasses.wVq
+if($desc instanceof Array)$desc=$desc[1]
+wVq.prototype=$desc
+function c2(Rd,a4){this.Rd=Rd
+this.a4=a4}c2.builtin$cls="c2"
+if(!"name" in c2)c2.name="c2"
+$desc=$collectedClasses.c2
+if($desc instanceof Array)$desc=$desc[1]
+c2.prototype=$desc
+c2.prototype.gRd=function(receiver){return this.Rd}
+c2.prototype.gRd.$reflectable=1
+c2.prototype.ga4=function(receiver){return this.a4}
+c2.prototype.ga4.$reflectable=1
+function rj(Sw,u9,Gz,J6,Ge,wA,AP,Lk,Fm,KG,mQ,nr,bN,GR,AP,Lk){this.Sw=Sw
+this.u9=u9
+this.Gz=Gz
+this.J6=J6
+this.Ge=Ge
+this.wA=wA
+this.AP=AP
+this.Lk=Lk
+this.Fm=Fm
+this.KG=KG
+this.mQ=mQ
+this.nr=nr
+this.bN=bN
+this.GR=GR
+this.AP=AP
+this.Lk=Lk}rj.builtin$cls="rj"
+if(!"name" in rj)rj.name="rj"
+$desc=$collectedClasses.rj
+if($desc instanceof Array)$desc=$desc[1]
+rj.prototype=$desc
+rj.prototype.gSw=function(){return this.Sw}
+rj.prototype.gSw.$reflectable=1
+rj.prototype.gu9=function(){return this.u9}
+rj.prototype.gu9.$reflectable=1
+function dZL(){}dZL.builtin$cls="dZL"
+if(!"name" in dZL)dZL.name="dZL"
+$desc=$collectedClasses.dZL
+if($desc instanceof Array)$desc=$desc[1]
+dZL.prototype=$desc
+function N8(Yu,Du,fF){this.Yu=Yu
+this.Du=Du
+this.fF=fF}N8.builtin$cls="N8"
+if(!"name" in N8)N8.name="N8"
+$desc=$collectedClasses.N8
+if($desc instanceof Array)$desc=$desc[1]
+N8.prototype=$desc
+N8.prototype.gYu=function(){return this.Yu}
+N8.prototype.gDu=function(){return this.Du}
+N8.prototype.gfF=function(){return this.fF}
+function Q4(Yu,m7,L4,AP,Lk){this.Yu=Yu
+this.m7=m7
+this.L4=L4
+this.AP=AP
+this.Lk=Lk}Q4.builtin$cls="Q4"
+if(!"name" in Q4)Q4.name="Q4"
+$desc=$collectedClasses.Q4
+if($desc instanceof Array)$desc=$desc[1]
+Q4.prototype=$desc
+Q4.prototype.gYu=function(){return this.Yu}
+Q4.prototype.gYu.$reflectable=1
+Q4.prototype.gm7=function(){return this.m7}
+Q4.prototype.gm7.$reflectable=1
+Q4.prototype.gL4=function(){return this.L4}
+Q4.prototype.gL4.$reflectable=1
+function WAE(uX){this.uX=uX}WAE.builtin$cls="WAE"
+if(!"name" in WAE)WAE.name="WAE"
+$desc=$collectedClasses.WAE
+if($desc instanceof Array)$desc=$desc[1]
+WAE.prototype=$desc
+function Vi(tT,Av){this.tT=tT
+this.Av=Av}Vi.builtin$cls="Vi"
+if(!"name" in Vi)Vi.name="Vi"
+$desc=$collectedClasses.Vi
+if($desc instanceof Array)$desc=$desc[1]
+Vi.prototype=$desc
+Vi.prototype.gtT=function(receiver){return this.tT}
+Vi.prototype.gAv=function(){return this.Av}
+function kx(J6,jv,Du,fF,vg,Mb,VS,hw,va,yP,mM,qH,MO,oc,zz,TD,AP,Lk,Fm,KG,mQ,nr,bN,GR,AP,Lk){this.J6=J6
+this.jv=jv
+this.Du=Du
+this.fF=fF
+this.vg=vg
+this.Mb=Mb
+this.VS=VS
+this.hw=hw
+this.va=va
+this.yP=yP
+this.mM=mM
+this.qH=qH
+this.MO=MO
+this.oc=oc
+this.zz=zz
+this.TD=TD
+this.AP=AP
+this.Lk=Lk
+this.Fm=Fm
+this.KG=KG
+this.mQ=mQ
+this.nr=nr
+this.bN=bN
+this.GR=GR
+this.AP=AP
+this.Lk=Lk}kx.builtin$cls="kx"
+if(!"name" in kx)kx.name="kx"
+$desc=$collectedClasses.kx
+if($desc instanceof Array)$desc=$desc[1]
+kx.prototype=$desc
+kx.prototype.gDu=function(){return this.Du}
+kx.prototype.gDu.$reflectable=1
+kx.prototype.sDu=function(v){return this.Du=v}
+kx.prototype.sDu.$reflectable=1
+kx.prototype.gfF=function(){return this.fF}
+kx.prototype.gfF.$reflectable=1
+kx.prototype.sfF=function(v){return this.fF=v}
+kx.prototype.sfF.$reflectable=1
+kx.prototype.gvg=function(){return this.vg}
+kx.prototype.gvg.$reflectable=1
+kx.prototype.svg=function(v){return this.vg=v}
+kx.prototype.svg.$reflectable=1
+kx.prototype.gMb=function(){return this.Mb}
+kx.prototype.gMb.$reflectable=1
+kx.prototype.sMb=function(v){return this.Mb=v}
+kx.prototype.sMb.$reflectable=1
+kx.prototype.gVS=function(){return this.VS}
+kx.prototype.gVS.$reflectable=1
+kx.prototype.ghw=function(){return this.hw}
+kx.prototype.ghw.$reflectable=1
+kx.prototype.gva=function(){return this.va}
+kx.prototype.gva.$reflectable=1
+kx.prototype.gyP=function(){return this.yP}
+kx.prototype.gyP.$reflectable=1
+kx.prototype.goc=function(receiver){return this.oc}
+kx.prototype.soc=function(receiver,v){return this.oc=v}
+kx.prototype.gzz=function(){return this.zz}
+kx.prototype.szz=function(v){return this.zz=v}
+function w8F(){}w8F.builtin$cls="w8F"
+if(!"name" in w8F)w8F.name="w8F"
+$desc=$collectedClasses.w8F
+if($desc instanceof Array)$desc=$desc[1]
+w8F.prototype=$desc
+function fx(){}fx.builtin$cls="fx"
+if(!"name" in fx)fx.name="fx"
+$desc=$collectedClasses.fx
+if($desc instanceof Array)$desc=$desc[1]
+fx.prototype=$desc
+function af(bN,GR){this.bN=bN
+this.GR=GR}af.builtin$cls="af"
+if(!"name" in af)af.name="af"
+$desc=$collectedClasses.af
+if($desc instanceof Array)$desc=$desc[1]
+af.prototype=$desc
+af.prototype.gbN=function(){return this.bN}
+af.prototype.sbN=function(v){return this.bN=v}
+af.prototype.gGR=function(){return this.GR}
+af.prototype.sGR=function(v){return this.GR=v}
+function UZ(a,b,c){this.a=a
+this.b=b
+this.c=c}UZ.builtin$cls="UZ"
+if(!"name" in UZ)UZ.name="UZ"
+$desc=$collectedClasses.UZ
+if($desc instanceof Array)$desc=$desc[1]
+UZ.prototype=$desc
+function No(tl){this.tl=tl}No.builtin$cls="No"
+if(!"name" in No)No.name="No"
+$desc=$collectedClasses.No
+if($desc instanceof Array)$desc=$desc[1]
+No.prototype=$desc
+No.prototype.gtl=function(){return this.tl}
+No.prototype.gtl.$reflectable=1
+No.prototype.stl=function(v){return this.tl=v}
+No.prototype.stl.$reflectable=1
+function Ey(a){this.a=a}Ey.builtin$cls="Ey"
+if(!"name" in Ey)Ey.name="Ey"
+$desc=$collectedClasses.Ey
+if($desc instanceof Array)$desc=$desc[1]
+Ey.prototype=$desc
+function tm(){}tm.builtin$cls="tm"
+if(!"name" in tm)tm.name="tm"
+$desc=$collectedClasses.tm
+if($desc instanceof Array)$desc=$desc[1]
+tm.prototype=$desc
+function XK(Yu,tl,R9,wv,V2,me){this.Yu=Yu
+this.tl=tl
+this.R9=R9
+this.wv=wv
+this.V2=V2
+this.me=me}XK.builtin$cls="XK"
+if(!"name" in XK)XK.name="XK"
+$desc=$collectedClasses.XK
+if($desc instanceof Array)$desc=$desc[1]
+XK.prototype=$desc
+XK.prototype.gYu=function(){return this.Yu}
+function dT(){}dT.builtin$cls="dT"
+if(!"name" in dT)dT.name="dT"
+$desc=$collectedClasses.dT
+if($desc instanceof Array)$desc=$desc[1]
+dT.prototype=$desc
+function ho(ja,yb,tl,R9,wv,V2,me){this.ja=ja
+this.yb=yb
+this.tl=tl
+this.R9=R9
+this.wv=wv
+this.V2=V2
+this.me=me}ho.builtin$cls="ho"
+if(!"name" in ho)ho.name="ho"
+$desc=$collectedClasses.ho
+if($desc instanceof Array)$desc=$desc[1]
+ho.prototype=$desc
+function ob(mC,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.mC=mC
+this.AP=AP
+this.Lk=Lk
+this.AP=AP
+this.Lk=Lk
+this.dZ=dZ
+this.Sa=Sa
+this.Uk=Uk
+this.oq=oq
+this.Wz=Wz
+this.SO=SO
+this.B7=B7
+this.X0=X0}ob.builtin$cls="ob"
+if(!"name" in ob)ob.name="ob"
+$desc=$collectedClasses.ob
+if($desc instanceof Array)$desc=$desc[1]
+ob.prototype=$desc
+ob.prototype.gmC=function(receiver){return receiver.mC}
+ob.prototype.gmC.$reflectable=1
+ob.prototype.smC=function(receiver,v){return receiver.mC=v}
+ob.prototype.smC.$reflectable=1
+function V22(){}V22.builtin$cls="V22"
+if(!"name" in V22)V22.name="V22"
+$desc=$collectedClasses.V22
+if($desc instanceof Array)$desc=$desc[1]
+V22.prototype=$desc
+function xI(tY,Pe,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.tY=tY
this.Pe=Pe
this.AP=AP
-this.fn=fn
-this.pC=pC
+this.Lk=Lk
this.AP=AP
-this.fn=fn
-this.AP=AP
-this.fn=fn
+this.Lk=Lk
this.dZ=dZ
this.Sa=Sa
this.Uk=Uk
@@ -32222,19 +32379,16 @@
xI.prototype.gPe.$reflectable=1
xI.prototype.sPe=function(receiver,v){return receiver.Pe=v}
xI.prototype.sPe.$reflectable=1
-function Sq(){}Sq.builtin$cls="Sq"
-if(!"name" in Sq)Sq.name="Sq"
-$desc=$collectedClasses.Sq
+function Ds(){}Ds.builtin$cls="Ds"
+if(!"name" in Ds)Ds.name="Ds"
+$desc=$collectedClasses.Ds
if($desc instanceof Array)$desc=$desc[1]
-Sq.prototype=$desc
-function nm(Va,AP,fn,pC,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.Va=Va
+Ds.prototype=$desc
+function nm(Va,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.Va=Va
this.AP=AP
-this.fn=fn
-this.pC=pC
+this.Lk=Lk
this.AP=AP
-this.fn=fn
-this.AP=AP
-this.fn=fn
+this.Lk=Lk
this.dZ=dZ
this.Sa=Sa
this.Uk=Uk
@@ -32251,19 +32405,16 @@
nm.prototype.gVa.$reflectable=1
nm.prototype.sVa=function(receiver,v){return receiver.Va=v}
nm.prototype.sVa.$reflectable=1
-function q2(){}q2.builtin$cls="q2"
-if(!"name" in q2)q2.name="q2"
-$desc=$collectedClasses.q2
+function V23(){}V23.builtin$cls="V23"
+if(!"name" in V23)V23.name="V23"
+$desc=$collectedClasses.V23
if($desc instanceof Array)$desc=$desc[1]
-q2.prototype=$desc
-function uwf(Up,AP,fn,pC,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.Up=Up
+V23.prototype=$desc
+function Vu(B3,AP,Lk,AP,Lk,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.B3=B3
this.AP=AP
-this.fn=fn
-this.pC=pC
+this.Lk=Lk
this.AP=AP
-this.fn=fn
-this.AP=AP
-this.fn=fn
+this.Lk=Lk
this.dZ=dZ
this.Sa=Sa
this.Uk=Uk
@@ -32271,30 +32422,20 @@
this.Wz=Wz
this.SO=SO
this.B7=B7
-this.X0=X0}uwf.builtin$cls="uwf"
-if(!"name" in uwf)uwf.name="uwf"
-$desc=$collectedClasses.uwf
+this.X0=X0}Vu.builtin$cls="Vu"
+if(!"name" in Vu)Vu.name="Vu"
+$desc=$collectedClasses.Vu
if($desc instanceof Array)$desc=$desc[1]
-uwf.prototype=$desc
-uwf.prototype.gUp=function(receiver){return receiver.Up}
-uwf.prototype.gUp.$reflectable=1
-uwf.prototype.sUp=function(receiver,v){return receiver.Up=v}
-uwf.prototype.sUp.$reflectable=1
-function q3(){}q3.builtin$cls="q3"
-if(!"name" in q3)q3.name="q3"
-$desc=$collectedClasses.q3
+Vu.prototype=$desc
+Vu.prototype.gB3=function(receiver){return receiver.B3}
+Vu.prototype.gB3.$reflectable=1
+Vu.prototype.sB3=function(receiver,v){return receiver.B3=v}
+Vu.prototype.sB3.$reflectable=1
+function V24(){}V24.builtin$cls="V24"
+if(!"name" in V24)V24.name="V24"
+$desc=$collectedClasses.V24
if($desc instanceof Array)$desc=$desc[1]
-q3.prototype=$desc
-function At(a){this.a=a}At.builtin$cls="At"
-if(!"name" in At)At.name="At"
-$desc=$collectedClasses.At
-if($desc instanceof Array)$desc=$desc[1]
-At.prototype=$desc
-function Sb(){}Sb.builtin$cls="Sb"
-if(!"name" in Sb)Sb.name="Sb"
-$desc=$collectedClasses.Sb
-if($desc instanceof Array)$desc=$desc[1]
-Sb.prototype=$desc
+V24.prototype=$desc
function V2(N1,mD,Ck){this.N1=N1
this.mD=mD
this.Ck=Ck}V2.builtin$cls="V2"
@@ -32302,38 +32443,38 @@
$desc=$collectedClasses.V2
if($desc instanceof Array)$desc=$desc[1]
V2.prototype=$desc
-function BT(Y0,qP,ZY,xS,PB,eS,ay){this.Y0=Y0
+function D8(Y0,qP,ZY,xS,PB,eS,ay){this.Y0=Y0
this.qP=qP
this.ZY=ZY
this.xS=xS
this.PB=PB
this.eS=eS
-this.ay=ay}BT.builtin$cls="BT"
-if(!"name" in BT)BT.name="BT"
-$desc=$collectedClasses.BT
+this.ay=ay}D8.builtin$cls="D8"
+if(!"name" in D8)D8.name="D8"
+$desc=$collectedClasses.D8
if($desc instanceof Array)$desc=$desc[1]
-BT.prototype=$desc
-function jY(Ca,qP,ZY,xS,PB,eS,ay){this.Ca=Ca
+D8.prototype=$desc
+function zP(Ca,qP,ZY,xS,PB,eS,ay){this.Ca=Ca
this.qP=qP
this.ZY=ZY
this.xS=xS
this.PB=PB
this.eS=eS
-this.ay=ay}jY.builtin$cls="jY"
-if(!"name" in jY)jY.name="jY"
-$desc=$collectedClasses.jY
+this.ay=ay}zP.builtin$cls="zP"
+if(!"name" in zP)zP.name="zP"
+$desc=$collectedClasses.zP
if($desc instanceof Array)$desc=$desc[1]
-jY.prototype=$desc
+zP.prototype=$desc
function H2(){}H2.builtin$cls="H2"
if(!"name" in H2)H2.name="H2"
$desc=$collectedClasses.H2
if($desc instanceof Array)$desc=$desc[1]
H2.prototype=$desc
-function DO(){}DO.builtin$cls="DO"
-if(!"name" in DO)DO.name="DO"
-$desc=$collectedClasses.DO
+function lP(){}lP.builtin$cls="lP"
+if(!"name" in lP)lP.name="lP"
+$desc=$collectedClasses.lP
if($desc instanceof Array)$desc=$desc[1]
-DO.prototype=$desc
+lP.prototype=$desc
function fTP(a){this.a=a}fTP.builtin$cls="fTP"
if(!"name" in fTP)fTP.name="fTP"
$desc=$collectedClasses.fTP
@@ -32405,27 +32546,27 @@
$desc=$collectedClasses.ee
if($desc instanceof Array)$desc=$desc[1]
ee.prototype=$desc
-function XI(Cd,wd,N2,Te){this.Cd=Cd
+function K6(Cd,wd,N2,Te){this.Cd=Cd
this.wd=wd
this.N2=N2
-this.Te=Te}XI.builtin$cls="XI"
-if(!"name" in XI)XI.name="XI"
-$desc=$collectedClasses.XI
+this.Te=Te}K6.builtin$cls="K6"
+if(!"name" in K6)K6.name="K6"
+$desc=$collectedClasses.K6
if($desc instanceof Array)$desc=$desc[1]
-XI.prototype=$desc
-XI.prototype.gCd=function(receiver){return this.Cd}
-XI.prototype.gwd=function(receiver){return this.wd}
-XI.prototype.gN2=function(){return this.N2}
-XI.prototype.gTe=function(){return this.Te}
-function hs(N1,mD,Ck){this.N1=N1
+K6.prototype=$desc
+K6.prototype.gCd=function(receiver){return this.Cd}
+K6.prototype.gwd=function(receiver){return this.wd}
+K6.prototype.gN2=function(){return this.N2}
+K6.prototype.gTe=function(){return this.Te}
+function TU(N1,mD,Ck){this.N1=N1
this.mD=mD
-this.Ck=Ck}hs.builtin$cls="hs"
-if(!"name" in hs)hs.name="hs"
-$desc=$collectedClasses.hs
+this.Ck=Ck}TU.builtin$cls="TU"
+if(!"name" in TU)TU.name="TU"
+$desc=$collectedClasses.TU
if($desc instanceof Array)$desc=$desc[1]
-hs.prototype=$desc
-hs.prototype.gN1=function(){return this.N1}
-hs.prototype.sCk=function(v){return this.Ck=v}
+TU.prototype=$desc
+TU.prototype.gN1=function(){return this.N1}
+TU.prototype.sCk=function(v){return this.Ck=v}
function yp(KO,qW,k8){this.KO=KO
this.qW=qW
this.k8=k8}yp.builtin$cls="yp"
@@ -32433,6 +32574,7 @@
$desc=$collectedClasses.yp
if($desc instanceof Array)$desc=$desc[1]
yp.prototype=$desc
+yp.prototype.gk8=function(){return this.k8}
function ug(N1,mD,Ck){this.N1=N1
this.mD=mD
this.Ck=Ck}ug.builtin$cls="ug"
@@ -32440,10 +32582,10 @@
$desc=$collectedClasses.ug
if($desc instanceof Array)$desc=$desc[1]
ug.prototype=$desc
-function DT(lr,xT,kr,Dsl,QO,jH,mj,IT,dv,N1,mD,Ck){this.lr=lr
+function DT(lr,xT,kr,Mf,QO,jH,mj,IT,dv,N1,mD,Ck){this.lr=lr
this.xT=xT
this.kr=kr
-this.Dsl=Dsl
+this.Mf=Mf
this.QO=QO
this.jH=jH
this.mj=mj
@@ -32468,11 +32610,11 @@
$desc=$collectedClasses.OB
if($desc instanceof Array)$desc=$desc[1]
OB.prototype=$desc
-function lP(){}lP.builtin$cls="lP"
-if(!"name" in lP)lP.name="lP"
-$desc=$collectedClasses.lP
+function Uf(){}Uf.builtin$cls="Uf"
+if(!"name" in Uf)Uf.name="Uf"
+$desc=$collectedClasses.Uf
if($desc instanceof Array)$desc=$desc[1]
-lP.prototype=$desc
+Uf.prototype=$desc
function p8(ud,lr,eS,ay){this.ud=ud
this.lr=lr
this.eS=eS
@@ -32519,21 +32661,21 @@
$desc=$collectedClasses.TG
if($desc instanceof Array)$desc=$desc[1]
TG.prototype=$desc
-function ts(){}ts.builtin$cls="ts"
-if(!"name" in ts)ts.name="ts"
-$desc=$collectedClasses.ts
+function VU(){}VU.builtin$cls="VU"
+if(!"name" in VU)VU.name="VU"
+$desc=$collectedClasses.VU
if($desc instanceof Array)$desc=$desc[1]
-ts.prototype=$desc
+VU.prototype=$desc
function Kj(a){this.a=a}Kj.builtin$cls="Kj"
if(!"name" in Kj)Kj.name="Kj"
$desc=$collectedClasses.Kj
if($desc instanceof Array)$desc=$desc[1]
Kj.prototype=$desc
-function VU(b){this.b=b}VU.builtin$cls="VU"
-if(!"name" in VU)VU.name="VU"
-$desc=$collectedClasses.VU
+function R7(b){this.b=b}R7.builtin$cls="R7"
+if(!"name" in R7)R7.name="R7"
+$desc=$collectedClasses.R7
if($desc instanceof Array)$desc=$desc[1]
-VU.prototype=$desc
+R7.prototype=$desc
function Ya(yT,kU){this.yT=yT
this.kU=kU}Ya.builtin$cls="Ya"
if(!"name" in Ya)Ya.name="Ya"
@@ -32566,11 +32708,11 @@
$desc=$collectedClasses.wl
if($desc instanceof Array)$desc=$desc[1]
wl.prototype=$desc
-function T4(){}T4.builtin$cls="T4"
-if(!"name" in T4)T4.name="T4"
-$desc=$collectedClasses.T4
+function ve(){}ve.builtin$cls="ve"
+if(!"name" in ve)ve.name="ve"
+$desc=$collectedClasses.ve
if($desc instanceof Array)$desc=$desc[1]
-T4.prototype=$desc
+ve.prototype=$desc
function TR(qP){this.qP=qP}TR.builtin$cls="TR"
if(!"name" in TR)TR.name="TR"
$desc=$collectedClasses.TR
@@ -32582,30 +32724,4 @@
$desc=$collectedClasses.VD
if($desc instanceof Array)$desc=$desc[1]
VD.prototype=$desc
-function Zt(Jh,AP,fn,AP,fn,dZ,Sa,Uk,oq,Wz,SO,B7,X0){this.Jh=Jh
-this.AP=AP
-this.fn=fn
-this.AP=AP
-this.fn=fn
-this.dZ=dZ
-this.Sa=Sa
-this.Uk=Uk
-this.oq=oq
-this.Wz=Wz
-this.SO=SO
-this.B7=B7
-this.X0=X0}Zt.builtin$cls="Zt"
-if(!"name" in Zt)Zt.name="Zt"
-$desc=$collectedClasses.Zt
-if($desc instanceof Array)$desc=$desc[1]
-Zt.prototype=$desc
-Zt.prototype.gJh=function(receiver){return receiver.Jh}
-Zt.prototype.gJh.$reflectable=1
-Zt.prototype.sJh=function(receiver,v){return receiver.Jh=v}
-Zt.prototype.sJh.$reflectable=1
-function Dsd(){}Dsd.builtin$cls="Dsd"
-if(!"name" in Dsd)Dsd.name="Dsd"
-$desc=$collectedClasses.Dsd
-if($desc instanceof Array)$desc=$desc[1]
-Dsd.prototype=$desc
-return[qE,pa,Gh,A0,na,Mr,zx,P2,Xk,W2,it,Az,QP,QW,jr,Ny,Zv,Yr,BR,di,d7,yJ,He,vz,vHT,n0,Em,pt,rV,K4,QF,Aj,cm,Nh,wj,cv,Fs,Ty,ea,D0,as,hH,Aa,u5,Tq,W4,jP,Cz,tA,wa,Uq,QH,Rt,X2,zU,rk,tX,Sg,pA,Mi,Gt,In,wP,eP,mF,Qj,cS,YI,El,zm,Y7,aB,fJ,BK,Rv,HO,Kk,ZY,Hy,EeC,Qb,Vu,xe,Hw,bn,Imr,Ve,CX,H9,FI,oU,ih,KV,yk,KY,G7,l9,Ql,Xp,bP,FH,SN,HD,ni,jg,qj,nC,KR,ew,fs,LY,BL,fe,By,j2,X4,lp,kd,I0,CY,Wt,uaa,Hd,Ul,G5,bk,Lx,Er,qk,GI,Tb,tV,KP,yY,kJ,AE,xV,Dn,y6,RH,pU,OJ,Qa,dp,vw,aG,J6,u9,Bn,hq,UL,tZ,kc,AK,ty,Nf,F2,nL,QV,q0,Q7,hF,OF,Dh,Ue,mU,NE,lC,y5,jQ,mT,ui,mk,DQ,Sm,LM,es,eG,bd,pf,NV,W1,mCz,wf,n5,bb,Ic,lc,Xu,qM,tk,me,oB,nh,EI,MI,Ub,kK,eW,um,Fu,QN,N9,BA,d0,zp,br,PIw,vd,uzr,Yd,kN,lZ,Gr,XE,mO,lo,NJ,j24,vt,rQ,Lu,LR,d5,hy,mq,Ke,CG,Xe,y0,Rk4,Eo,tL,pyk,ZD,rD,wD,Wv,yz,Fi,Ja,mj,cB,uY,yR,GK,xJ,Nn,Et,NC,nb,Zn,xt,VJ,P0,xlX,SQ,qD,TM,WZ,pF,df,Hg,L3,zz,dE,Eb,dT,N2,eE,V6,Lt,Gv,kn,Jh,QI,FP,is,Q,nM,iY,Jt,P,im,GW,vT,qa,BQ,O,PK,JO,f0,aX,cC,RA,IY,JH,jl,Iy,Z6,Ua,ns,yo,NA,NO,II,fP,X1,HU,oo,OW,Dd,AP,yH,FA,Av,ku,Zd,xQ,F0,oH,LPe,bw,WT,jJ,XR,LI,A2,IW,F3,FD,Cj,u8,Zr,W0,az,vV,Am,XO,dr,TL,KX,uZ,OQ,Tp,Bp,v,Ll,dN,GT,Pe,Eq,lb,tD,hJ,tu,fw,Zz,cu,Lm,dC,wN,VX,VR,EK,KW,Pb,tQ,mL,Kf,qu,bv,eS,IQ,TI,at,wu,Vc,KQ,dZ,Qe,GH,Q4,WAE,N8,Vi,kx,fx,CM,xn,vu,c2,rj,af,SI,Y2,XN,No,PG,YW,BO,Yu,y2,Hq,Pl,XK,ho,G6,Ur,j3,i0,Tg,Ps,KU,RI,Ye,CN,HT,qbd,E0,Ds,lw,LP,wJ,aL,nH,a7,i1,xy,MH,A8,U5,SO,kV,rR,H6,wB,U1,SJ,SU7,Qr,w2Y,iK,GD,Sn,nI,TY,Lj,mb,am,cw,EE,Uz,uh,IB,oP,YX,BI,Un,M2,iu,mg,bl,tB,Oo,Tc,Ax,Wf,vk,Ei,U7,t0,Ld,Sz,Zk,fu,wt,ng,TN,Ar,rh,jB,ye,O1,Oh,Xh,Ca,Ik,JI,LO,dz,tK,OR,Bg,DL,b8,j7,ff,Ia,Zf,vs,da,xw,dm,rH,ZL,rq,RW,RT,jZ,FZ,OM,qh,tG,jv,LB,zn,lz,Rl,Jb,M4,Jp,h7,pr,eN,PI,uO,j4,i9,VV,Dy,lU,OC,UH,Z5,ii,ib,MO,O9,yU,nP,KA,Vo,qB,ez,ti,LV,DS,JF,ht,CR,Qk,v1y,uR,Q0,YR,fB,nO,t3,dq,lO,aY,zG,e4,JB,Id,WH,TF,K5,Cg,Hs,dv,pV,uo,pK,eM,Ha,nU,R8,k6,oi,ce,DJ,PL,Fq,jG,fG,EQ,YB,a1,ou,S9,ey,xd,v6,db,i5,N6,Rr,YO,oz,b6,ef,zQ,Yp,lN,mW,ar,lD,ZQ,Sw,o0,qv,jp,vX,Ba,An,bF,LD,S6B,OG,uM,DN,ZM,HW,JC,f1,Uk,wI,Zi,Ud,K8,by,pD,Cf,Sh,tF,z0,E3,Rw,HB,CL,p4,a2,Rz,iP,MF,Rq,Hn,Zl,B5,a6,P7,DW,Ge,LK,AT,bJ,Np,mp,ub,ds,lj,UV,VS,t7,HG,aE,eV,kM,EH,cX,AC,Z0,L9,a,Od,MN,WU,Rn,wv,uq,iD,hb,XX,Kd,yZ,Gs,pm,Tw,wm,FB,Lk,XZ,Mx,C9,kZ,JT,d9,rI,QZ,VG,wz,B1,M5,Jn,DM,RAp,Gb,Kx,iO,bU,Yg,e7,nNL,ecX,kI,yoo,w1p,tJ,Zc,i7,nF,FK,Si,vf,Iw,Fc,hD,I4,e0,RO,eu,ie,Ea,pu,i2,b0,Ov,qO,RX,hP,Gm,Of,Qg,W9,vZ,dW,Dk,O7,IU,E4,Gn,r7,Tz,Wk,DV,Hp,Nz,Jd,QS,ej,NL,vr,D4,X9,Ms,ac,RS,RY,Ys,Lw,Gj,U4,B8q,Nx,LZ,Dg,Ob,Ip,Pg,Nb,nA,Fv,pv,E9,Vfx,m8,Gk,Urj,e5,Ni,AX,yb,oub,QR,Yx,NM,c4r,nx,jm,xj,VB,aI,rG,yh,wO,Tm,q1,CA,YL,KC,xL,As,GE,rl,uQ,D7,hT,GS,pR,Js,fM,hx,Squ,PO,Vf,u7,fW,Ey,qm,vO,E7,KUl,SV,Mf,Kz,vj,tuj,LU,T2,mHk,Jq,Yn,TJ,dG,qV,HV,em,Lb,PF,Vct,fA,Qz,jA,Jo,c5,F1,aQ,D13,Ya5,WZq,Ww,pva,tz,cda,fl,qFb,oM,rna,wM,Vba,lI,waa,uL,Pi,z2,qI,J3,E5,o5,b5,zI,Zb,id,iV,DA,nd,vly,d3,lS,xh,wn,Ay,Bj,HA,qC,zT,Lo,WR,qL,Px,C4,YJ,km,Zj,XP,q6,CK,LJ,ZG,Oc,MX,w10,r3y,yL,zs,WC,Xi,TV,Mq,Oa,n1,xf,L6,Rs,uJ,hm,Ji,Bf,ir,jpR,GN,bS,HJ,S0,V3,Bl,Fn,e3,pM,jh,W6,Lf,fT,pp,nl,ik,mf,LfS,HK,o8,ex,e9,Xy,G0,mY,GX,mB,XF,bX,Uf,Ra,wJY,zOQ,W6o,MdQ,YJG,DOe,lPa,Ufa,Raa,w0,w4,w5,w7,w9,c4,z6,Ay0,Ed,G1,Os,B8,Wh,x5,ev,ID,qR,ek,Qv,Xm,mv,mG,uA,vl,Li,WK,iT,ja,zw,fa,WW,vQ,a9,VA,J1,fk,wL,B0,tc,hw,EZ,no,kB,ae,XC,w6,jK,uk,K9,zX,x9,Jy,xs,FX,Ae,Bt,vR,Pn,hc,hA,fr,cfS,JG,V0,knI,T5,fI,oaa,qq,FC,xI,Sq,nm,q2,uwf,q3,At,Sb,V2,BT,jY,H2,DO,fTP,ppY,NP,jt,r0,jz,SA,hB,nv,ee,XI,hs,yp,ug,DT,OB,lP,p8,NW,HS,TG,ts,Kj,VU,Ya,XT,ic,wl,T4,TR,VD,Zt,Dsd]}
\ No newline at end of file
+return[qE,zw,Ps,A0,Sb,vp,zx,P2,Xk,W2,zJ,Az,Fy,QW,ca,Ny,Zv,Yr,BR,wT,d7,yJ,He,vz,vHT,hh,Em,NWk,rV,K4,QF,Aj,cm,Nh,wj,cv,Fs,Ty,ea,D0,as,hH,QU,u5,h4,W4,jP,Cz,tA,xn,Uq,QH,Rt,X2,zU,wa,tX,Sg,pA,Mi,Gt,In,wP,eP,mF,Qj,cS,YI,El,zm,Y7,aB,W7,BK,Rv,HO,Kk,ZY,cx,EeC,Qb,PG,xe,Hw,bn,ab,Ve,Wp,H9,o4,Q0,ih,KV,yk,KY,G7,l9,Ql,Xp,bP,mX,SN,HD,ni,jg,GT,nC,KR,ew,fs,LY,BL,fe,By,j2,X4,lp,kd,I0,QR,Sc,uaa,yg,mG,Ul,uj,G5,bk,Lx,fh,qk,GI,Tb,tV,BT,yY,kJ,AE,xV,FH,y6,RH,pU,OJ,Mf,dp,vw,aG,fA,u9,Bn,Eb,UL,tZ,kc,AK,ty,Nf,F2,VB,Cy,q0,c5,LO,Q7,hF,OF,Dh,Ue,mU,NE,Ak,y5,jQ,mT,ui,vO,DQ,Sm,LM,es,eG,lv,pf,NV,W1,mCz,kK,n5,bb,NdT,lc,Xu,qM,Ob,me,oB,NY,EI,MI,rg,um,eW,kL,Fu,QN,N9,BA,d0,zp,br,PIw,vd,Jq,Yd,kN,AW,Gr,XE,GH,lo,NJ,j24,vt,rQ,Lu,LR,d5,hy,mq,Ke,CG,Xe,y0,Rk4,Eo,Dn,pyk,ZD,Rlr,wD,Wv,yz,Fi,Ja,mj,hW,uY,yR,AX,xJ,Nn,Et,NC,nb,Zn,xt,tG,P0,kh,SQ,qD,TM,WZ,pF,df,Hg,L3,zz,dE,IJ,aH,N2,eE,V6,Lt,Gv,kn,Jh,QI,FP,is,Q,nM,iY,Jt,P,im,GW,vT,VP,BQ,O,PK,JO,f0,aX,oU,cC,RA,IY,JH,jl,Vg,Iy,Z6,Ua,ns,yo,NA,NO,II,fP,X1,HU,Nt,OW,Tf,AP,yH,FA,Av,ku,Zd,xQ,F0,oH,LPe,LD,jJ,XR,LI,A2,IW,F3,FD,Nv,Cj,u8,Zr,W0,az,vV,Am,XO,dr,TL,KX,uZ,OQ,Tp,Bp,v,Ll,D2,my,Pe,Eq,lb,tD,hJ,tu,fw,Zz,cu,Lm,dC,wN,VX,VR,EK,KW,Pb,tQ,mL,Kf,qu,dZ,Qe,Y2,XN,G6,Vf,Tg,Jc,pv,CN,Be,Vfx,E0,Dsd,lw,LP,wJ,aL,nH,a7,i1,xy,MH,A8,U5,SO,kV,rR,SJ,SU7,Tv,w2Y,iK,GD,Sn,nI,jU,Lj,mb,cb,cw,EE,Uz,uh,IB,oP,YX,BI,Un,M2,iu,mg,bl,tB,Oo,Tc,Ax,Wf,vk,Ei,Ci,t0,Ld,Sz,Zk,fu,wt,ng,TN,Ar,rh,jB,ye,O1,Oh,Xh,Ca,Ik,JI,WVu,dz,tK,OR,Bg,DL,b8,Ia,Zf,vs,da,pV,U7,rH,cX,ZL,rq,RW,RT,jZ,FZ,OM,qh,YJ,jv,LB,DO,lz,Rl,Jb,M4,Jp,h7,pr,eN,B5,PI,j4,i9,VV,Dy,lU,OC,UH,Z5,j5,ii,MO,O9,yU,nP,KA,Vo,qB,ez,fIm,LV,DS,JF,ht,CR,Qk,v1y,uR,GU,YR,fB,nO,t3,tU,aY,zG,e4,dl,Id,WH,TF,K5,Cg,Hs,dv,ph,uo,pK,eM,Ha,W5,R8,k6,oi,ce,DJ,PL,Fq,jG,fG,EQ,YB,a1,ou,S9,db,i5,N6,UB,YO,oz,b6,ef,zQ,Yp,lN,mW,ar,lD,ZQ,Sw,o0,qv,jp,GZ,Ba,An,bF,BW,S6B,OG,uM,DN,ZM,HW,JC,f1,Uk,zF,Zi,Ud,K8,by,pD,Cf,Sh,tF,z0,E3,Rw,HB,CL,p4,a2,Tx,iP,MF,Rq,a6,P7,DW,Ge,LK,AT,bJ,yd,mp,ub,ds,lj,UV,kF,VS,t7,HG,aE,eV,kM,EH,QV,AC,Z0,L9,a,Od,MN,WU,Rn,wv,uq,iD,hP,Uo,hb,Kd,yZ,Gs,pm,Tw,wm,FB,Lk,XZ,Mx,C9,kZ,JT,d9,rI,QZ,VG,wz,B1,M5,Jn,DM,RAp,Gb,Kx,iO,bU,Yg,e7,nNL,ma,Ou,yoo,ecX,zLC,w1p,dxW,kEI,tJ,Zc,i7,nF,FK,Si,vf,Iw,Fc,hD,I4,e0,RO,eu,ie,Ea,pu,i2,b0,Ov,qO,RX,bO,Gm,Of,Qg,W9,vZ,dW,Dk,O7,hq,E4,Gn,r7,Tz,Wk,DV,Hp,Nz,Jd,QS,ej,NL,vr,D4,X9,Ms,Fw,RS,RY,Ys,Lw,Gj,U4,B8q,Nx,LZ,Dg,Ui,Ip,Pg,ObS,nA,E9,tuj,rm,Vct,YW,m8,Gk,D13,qW,mk,WZq,jY,pva,nx,jm,ke,xj,aI,rG,yh,wO,Tm,ib,CA,YL,KC,xL,As,GE,rl,uQ,D7,hT,GS,pR,Js,hx,cda,u7,waa,qm,TI,E7,V4,SV,Kz,V9,vj,V10,LU,KL,V11,TJ,dG,qV,HV,em,Lb,T4,tzK,jA,PO,oBi,F1,aQ,V12,Qa,V13,Ww,V14,tz,V15,fl,V16,Zt,V17,iL,V18,lI,V19,uL,Pi,z2,qI,J3,E5,o5,b5,zI,Zb,id,iV,DA,nd,vly,d3,lS,xh,wn,er,Bj,HA,qC,zT,Lo,WR,qL,Px,C4,Md,km,Zj,XP,q6,CK,LJ,ZG,Oc,MX,w12,r3y,yL,zs,WC,Xi,TV,Mq,Oa,n1,xf,L6,Rs,uJ,hm,Ji,Bf,ir,Sa,GN,bS,HJ,S0,V3,rD,Fn,e3,pM,jh,W6,Lf,fT,pp,nl,ik,mf,LfS,HK,o8,ex,e9,Xy,uK,mY,GX,mB,XF,bX,Ra,wJY,zOQ,W6o,MdQ,YJG,DOe,lPa,Ufa,Raa,w0,w4,w5,w7,w10,w11,c4,z6,Ay,Ed,G1,Os,B8,Wh,x5,ev,ID,qR,ek,Qv,Xm,mv,iv,uA,vl,Li,WK,iT,ja,ey,fa,WW,vQ,a9,VA,J1,fk,wL,B0,tc,hw,EZ,no,kB,ae,XC,w6,jK,uk,K9,zX,x9,Jy,xs,FX,Ae,Bt,vR,Pn,hc,hA,fr,d2,JG,V20,knI,T5,fI,V21,qq,G8,fJ,q1,jx,yT,Cn,du,xc,bv,D3,KQ,Qq,Qd,i6,r2,JB,qj,BH,SI,pt,wVq,c2,rj,dZL,N8,Q4,WAE,Vi,kx,w8F,fx,af,UZ,No,Ey,tm,XK,dT,ho,ob,V22,xI,Ds,nm,V23,Vu,V24,V2,D8,zP,H2,lP,fTP,ppY,NP,jt,r0,jz,SA,hB,nv,ee,K6,TU,yp,ug,DT,OB,Uf,p8,NW,HS,TG,VU,Kj,R7,Ya,XT,ic,wl,ve,TR,VD]}
\ No newline at end of file
diff --git a/runtime/bin/vmservice/client/lib/app.dart b/runtime/bin/vmservice/client/lib/app.dart
index 912e60c..210b048 100644
--- a/runtime/bin/vmservice/client/lib/app.dart
+++ b/runtime/bin/vmservice/client/lib/app.dart
@@ -1,18 +1,18 @@
+// Copyright (c) 2014, 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 app;
import 'dart:async';
-import 'dart:convert';
import 'dart:html';
import 'dart:js';
import 'package:logging/logging.dart';
+import 'package:observatory/service_html.dart';
import 'package:polymer/polymer.dart';
part 'src/app/application.dart';
part 'src/app/chart.dart';
-part 'src/app/isolate.dart';
part 'src/app/location_manager.dart';
-part 'src/app/model.dart';
-part 'src/app/service.dart';
part 'src/app/view_model.dart';
-part 'src/app/vm.dart';
diff --git a/runtime/bin/vmservice/client/lib/elements.dart b/runtime/bin/vmservice/client/lib/elements.dart
index 1607de3..0b59620 100644
--- a/runtime/bin/vmservice/client/lib/elements.dart
+++ b/runtime/bin/vmservice/client/lib/elements.dart
@@ -9,6 +9,7 @@
export 'package:observatory/src/elements/collapsible_content.dart';
export 'package:observatory/src/elements/curly_block.dart';
export 'package:observatory/src/elements/error_view.dart';
+export 'package:observatory/src/elements/eval_box.dart';
export 'package:observatory/src/elements/field_ref.dart';
export 'package:observatory/src/elements/field_view.dart';
export 'package:observatory/src/elements/function_ref.dart';
@@ -17,10 +18,12 @@
export 'package:observatory/src/elements/instance_view.dart';
export 'package:observatory/src/elements/isolate_list.dart';
export 'package:observatory/src/elements/isolate_summary.dart';
+export 'package:observatory/src/elements/isolate_profile.dart';
+export 'package:observatory/src/elements/heap_profile.dart';
export 'package:observatory/src/elements/json_view.dart';
export 'package:observatory/src/elements/library_ref.dart';
export 'package:observatory/src/elements/library_view.dart';
-export 'package:observatory/src/elements/message_viewer.dart';
+export 'package:observatory/src/elements/service_view.dart';
export 'package:observatory/src/elements/nav_bar.dart';
export 'package:observatory/src/elements/observatory_application.dart';
export 'package:observatory/src/elements/response_viewer.dart';
diff --git a/runtime/bin/vmservice/client/lib/elements.html b/runtime/bin/vmservice/client/lib/elements.html
index a19a572..4746eac 100644
--- a/runtime/bin/vmservice/client/lib/elements.html
+++ b/runtime/bin/vmservice/client/lib/elements.html
@@ -8,8 +8,8 @@
<link rel="import" href="src/elements/code_view.html">
<link rel="import" href="src/elements/curly_block.html">
<link rel="import" href="src/elements/collapsible_content.html">
- <link rel="import" href="src/elements/disassembly_entry.html">
<link rel="import" href="src/elements/error_view.html">
+ <link rel="import" href="src/elements/eval_box.html">
<link rel="import" href="src/elements/field_ref.html">
<link rel="import" href="src/elements/field_view.html">
<link rel="import" href="src/elements/function_ref.html">
@@ -21,14 +21,14 @@
<link rel="import" href="src/elements/json_view.html">
<link rel="import" href="src/elements/library_ref.html">
<link rel="import" href="src/elements/library_view.html">
- <link rel="import" href="src/elements/message_viewer.html">
<link rel="import" href="src/elements/nav_bar.html">
<link rel="import" href="src/elements/observatory_application.html">
<link rel="import" href="src/elements/observatory_element.html">
<link rel="import" href="src/elements/response_viewer.html">
- <link rel="import" href="src/elements/service_ref.html">
<link rel="import" href="src/elements/script_ref.html">
<link rel="import" href="src/elements/script_view.html">
+ <link rel="import" href="src/elements/service_ref.html">
+ <link rel="import" href="src/elements/service_view.html">
<link rel="import" href="src/elements/stack_frame.html">
<link rel="import" href="src/elements/stack_trace.html">
</head>
diff --git a/runtime/bin/vmservice/client/lib/service.dart b/runtime/bin/vmservice/client/lib/service.dart
new file mode 100644
index 0000000..e513701
--- /dev/null
+++ b/runtime/bin/vmservice/client/lib/service.dart
@@ -0,0 +1,16 @@
+// Copyright (c) 2014, 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 service;
+
+import 'dart:async';
+import 'dart:convert';
+
+import 'package:logging/logging.dart';
+import 'package:observe/observe.dart';
+
+part 'src/service/cache.dart';
+part 'src/service/object.dart';
+part 'src/service/service.dart';
+part 'src/service/vm.dart';
diff --git a/runtime/bin/vmservice/client/lib/service_html.dart b/runtime/bin/vmservice/client/lib/service_html.dart
new file mode 100644
index 0000000..83df4d2
--- /dev/null
+++ b/runtime/bin/vmservice/client/lib/service_html.dart
@@ -0,0 +1,73 @@
+// Copyright (c) 2014, 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 service_html;
+
+import 'dart:async';
+import 'dart:convert';
+import 'dart:html';
+
+import 'package:logging/logging.dart';
+import 'package:observatory/service.dart';
+
+// Export the service library.
+export 'package:observatory/service.dart';
+
+class HttpVM extends VM {
+ final String address;
+
+ HttpVM(this.address) : super();
+
+ Future<String> getString(String id) {
+ Logger.root.info('Fetching $id from $address');
+ return HttpRequest.getString(address + id).catchError((error) {
+ // If we get an error here, the network request has failed.
+ Logger.root.severe('HttpRequest.getString failed.');
+ return JSON.encode({
+ 'type': 'Error',
+ 'id': '',
+ 'kind': 'NetworkError',
+ 'message': 'Could not connect to service. Check that you started the'
+ ' VM with the following flags:\n --enable-vm-service'
+ ' --pin-isolates'
+ });
+ });
+ }
+}
+
+class DartiumVM extends VM {
+ final Map _outstandingRequests = new Map();
+ int _requestSerial = 0;
+
+ DartiumVM() : super() {
+ window.onMessage.listen(_messageHandler);
+ Logger.root.info('Connected to DartiumVM');
+ }
+
+ void _messageHandler(msg) {
+ var id = msg.data['id'];
+ var name = msg.data['name'];
+ var data = msg.data['data'];
+ if (name != 'observatoryData') {
+ return;
+ }
+ var completer = _outstandingRequests[id];
+ assert(completer != null);
+ _outstandingRequests.remove(id);
+ completer.complete(data);
+ }
+
+ Future<String> getString(String path) {
+ var idString = '$_requestSerial';
+ Map message = {};
+ message['id'] = idString;
+ message['method'] = 'observatoryQuery';
+ message['query'] = '/$path';
+ _requestSerial++;
+ var completer = new Completer();
+ _outstandingRequests[idString] = completer;
+ window.parent.postMessage(JSON.encode(message), '*');
+ return completer.future;
+ }
+}
diff --git a/runtime/bin/vmservice/client/lib/src/app/application.dart b/runtime/bin/vmservice/client/lib/src/app/application.dart
index 0c2c050..1efd625 100644
--- a/runtime/bin/vmservice/client/lib/src/app/application.dart
+++ b/runtime/bin/vmservice/client/lib/src/app/application.dart
@@ -12,24 +12,16 @@
class ObservatoryApplication extends Observable {
@observable final LocationManager locationManager;
@observable final VM vm;
- @observable Map response;
@observable Isolate isolate;
+ @observable ServiceObject response;
- void setResponse(Map response) {
- this.response = toObservable(response);
+ void setResponse(ServiceObject response) {
+ this.response = response;
}
- void setResponseError(String message, [String errorType = 'ResponseError']) {
- this.response = toObservable({
- 'type': 'Error',
- 'errorType': errorType,
- 'text': message
- });
- Logger.root.severe(message);
- }
-
- void _setup() {
- vm._app = this;
+ void _initOnce() {
+ // Only called once.
+ assert(locationManager._app == null);
locationManager._app = this;
locationManager.init();
}
@@ -37,30 +29,12 @@
ObservatoryApplication.devtools() :
locationManager = new LocationManager(),
vm = new DartiumVM() {
- _setup();
+ _initOnce();
}
ObservatoryApplication() :
locationManager = new LocationManager(),
vm = new HttpVM('http://127.0.0.1:8181/') {
- _setup();
- }
-
- static const int KB = 1024;
- static const int MB = KB * 1024;
- static String scaledSizeUnits(int x) {
- if (x > 2 * MB) {
- var y = x / MB;
- return '${y.toStringAsFixed(1)} MB';
- } else if (x > 2 * KB) {
- var y = x / KB;
- return '${y.toStringAsFixed(1)} KB';
- }
- var y = x.toDouble();
- return '${y.toStringAsFixed(1)} B';
- }
-
- static String timeUnits(double x) {
- return x.toStringAsFixed(2);
+ _initOnce();
}
}
diff --git a/runtime/bin/vmservice/client/lib/src/app/isolate.dart b/runtime/bin/vmservice/client/lib/src/app/isolate.dart
deleted file mode 100644
index 34b649f..0000000
--- a/runtime/bin/vmservice/client/lib/src/app/isolate.dart
+++ /dev/null
@@ -1,253 +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.
-
-part of app;
-
-/// State for a running isolate.
-class Isolate extends Observable implements ServiceObject {
- final VM vm;
- String _id;
- String _serviceType = 'Isolate';
- Isolate get isolate => this;
- String get link => _id;
- String get id => _id;
- String get serviceType => _serviceType;
-
- Isolate(this.vm, this._id);
-
- /// Refresh [this]. Returns a future which completes to [this].
- Future refresh() {
- return vm.fetchMap(_id).then((m) => update(m)).then((_) => this);
- }
-
- /// Creates a link to [objectId] relative to [this].
- @reflectable String relativeLink(String objectId) => '$id/$objectId';
- /// Creates a relative link to [objectId] with a '#/' prefix.
- @reflectable String hashLink(String objectId) => '#/${relativeLink(objectId)}';
-
- @observable Profile profile;
- @observable final Map<String, Script> scripts =
- toObservable(new Map<String, Script>());
- @observable final List<Code> codes = new List<Code>();
- @observable String name;
- @observable String vmName;
- @observable Map entry;
- @observable String rootLib;
- @observable final Map<String, double> timers =
- toObservable(new Map<String, double>());
-
- @observable int newHeapUsed = 0;
- @observable int oldHeapUsed = 0;
-
- @observable Map topFrame = null;
- @observable String fileAndLine = null;
-
- Isolate.fromId(this.vm, this._id) : name = 'isolate' {}
-
- Isolate.fromMap(this.vm, Map map)
- : _id = map['id'], name = map['name'] {
- }
-
- void update(Map map) {
- if (map['type'] != 'Isolate') {
- Logger.root.severe('Unexpected message type in Isolate.update: ${map["type"]}');
- return;
- }
- if (map['rootLib'] == null ||
- map['timers'] == null ||
- map['heap'] == null) {
- Logger.root.severe("Malformed 'Isolate' response: $map");
- return;
- }
- rootLib = map['rootLib']['id'];
- vmName = map['name'];
- if (map['entry'] != null) {
- entry = map['entry'];
- name = entry['name'];
- } else {
- // fred
- name = 'root isolate';
- }
- if (map['topFrame'] != null) {
- topFrame = map['topFrame'];
- }
-
- var timerMap = {};
- map['timers'].forEach((timer) {
- timerMap[timer['name']] = timer['time'];
- });
- timers['total'] = timerMap['time_total_runtime'];
- timers['compile'] = timerMap['time_compilation'];
- timers['gc'] = 0.0; // TODO(turnidge): Export this from VM.
- timers['init'] = (timerMap['time_script_loading'] +
- timerMap['time_creating_snapshot'] +
- timerMap['time_isolate_initialization'] +
- timerMap['time_bootstrap']);
- timers['dart'] = timerMap['time_dart_execution'];
-
- newHeapUsed = map['heap']['usedNew'];
- oldHeapUsed = map['heap']['usedOld'];
- }
-
- String toString() => '$id';
-
- Code findCodeByAddress(int address) {
- for (var i = 0; i < codes.length; i++) {
- if (codes[i].contains(address)) {
- return codes[i];
- }
- }
- return null;
- }
-
- Code findCodeByName(String name) {
- for (var i = 0; i < codes.length; i++) {
- if (codes[i].name == name) {
- return codes[i];
- }
- }
- return null;
- }
-
- void resetCodeTicks() {
- Logger.root.info('Reset all code ticks.');
- for (var i = 0; i < codes.length; i++) {
- codes[i].resetTicks();
- }
- }
-
- void updateCoverage(List coverages) {
- for (var coverage in coverages) {
- var id = coverage['script']['id'];
- var script = scripts[id];
- if (script == null) {
- script = new Script.fromMap(coverage['script']);
- scripts[id] = script;
- }
- assert(script != null);
- script._processCoverageHits(coverage['hits']);
- }
- }
-
- // TODO(johnmccutchan): Remove this once everything is a ServiceObject.
- void _setModelResponse(String type, String modelName, dynamic model) {
- var response = {
- 'type': type,
- modelName: model
- };
- vm.app.setResponse(response);
- }
-
- void _setResponseRequestError(HttpRequest request) {
- String error = '${request.status} ${request.statusText}';
- if (request.status == 0) {
- error = 'No service found. Did you run with --enable-vm-service ?';
- }
- vm.app.setResponseError(error, 'RequestError');
- }
-
- void _requestCatchError(e, st) {
- if (e is ProgressEvent) {
- _setResponseRequestError(e.target);
- } else {
- vm.app.setResponseError('$e $st');
- }
- }
-
- static final RegExp _codeMatcher = new RegExp(r'/code/');
- static bool isCodeId(objectId) => _codeMatcher.hasMatch(objectId);
- static int codeAddressFromRequest(String objectId) {
- Match m = _codeMatcher.matchAsPrefix(objectId);
- if (m == null) {
- return 0;
- }
- try {
- var a = int.parse(m.input.substring(m.end), radix: 16);
- return a;
- } catch (e) {
- return 0;
- }
- }
-
- /// Handle 'Code' requests
- void _getCode(String objectId) {
- var address = codeAddressFromRequest(objectId);
- if (address == 0) {
- vm.app.setResponseError('$objectId is not a valid code request.');
- return;
- }
- var code = isolate.findCodeByAddress(address);
- if (code != null) {
- Logger.root.info(
- 'Found code with 0x${address.toRadixString(16)} in isolate.');
- _setModelResponse('Code', 'code', code);
- return;
- }
- getMap(objectId).then((map) {
- assert(map['type'] == 'Code');
- var code = new Code.fromMap(map);
- Logger.root.info(
- 'Added code with 0x${address.toRadixString(16)} to isolate.');
- isolate.codes.add(code);
- _setModelResponse('Code', 'code', code);
- }).catchError(_requestCatchError);
- }
-
- static final RegExp _scriptMatcher = new RegExp(r'scripts/.+');
- static bool isScriptId(objectId) => _scriptMatcher.hasMatch(objectId);
- void _getScript(String objectId) {
- var script = scripts[objectId];
- if ((script != null) && !script.needsSource) {
- Logger.root.info('Found script ${script.scriptRef['name']} in isolate');
- _setModelResponse('Script', 'script', script);
- return;
- }
- if (script != null) {
- // The isolate has the script but no script source code.
- getMap(objectId).then((response) {
- assert(response['type'] == 'Script');
- script._processSource(response['source']);
- Logger.root.info(
- 'Grabbed script ${script.scriptRef['name']} source.');
- _setModelResponse('Script', 'script', script);
- });
- return;
- }
- // New script.
- getMap(objectId).then((response) {
- assert(response['type'] == 'Script');
- var script = new Script.fromMap(response);
- Logger.root.info(
- 'Added script ${script.scriptRef['name']} to isolate.');
- _setModelResponse('Script', 'script', script);
- scripts[objectId] = script;
- });
- }
-
- /// Requests [objectId] from [this]. Completes to a [ServiceObject].
- Future<ServiceObject> get(String objectId) {
- if (isCodeId(objectId)) {
- _getCode(objectId);
- // TODO(johnmccutchan): FIX.
- return null;
- }
- if (isScriptId(objectId)) {
- _getScript(objectId);
- // TODO(johnmccutchan): FIX.
- return null;
- }
- return vm.fetchMap(relativeLink(objectId)).then((m) =>
- upgradeToServiceObject(objectId, m));
- }
-
- /// Requests [objectId] from [this]. Completes to a [Map].
- Future<ObservableMap> getMap(String objectId) {
- return vm.fetchMap(relativeLink(objectId));
- }
-
- /// Upgrades response ([m]) for [objectId] to a [ServiceObject].
- ServiceObject upgradeToServiceObject(String objectId, Map m) {
- return new ServiceMap.fromMap(this, m);
- }
-}
diff --git a/runtime/bin/vmservice/client/lib/src/app/location_manager.dart b/runtime/bin/vmservice/client/lib/src/app/location_manager.dart
index 29fc074..dba7f88 100644
--- a/runtime/bin/vmservice/client/lib/src/app/location_manager.dart
+++ b/runtime/bin/vmservice/client/lib/src/app/location_manager.dart
@@ -8,24 +8,18 @@
/// URL in window.location. The text after the '#' is used as the request
/// string for the VM service.
class LocationManager extends Observable {
- static const int InvalidIsolateId = 0;
static const String defaultHash = '#/isolates/';
- static final RegExp currentIsolateMatcher = new RegExp(r"#/isolates/\d+");
-
+ static final RegExp _currentIsolateMatcher = new RegExp(r'#/isolates/\d+');
+ static final RegExp _currentObjectMatcher = new RegExp(r'#/isolates/\d+/');
ObservatoryApplication _app;
- ObservatoryApplication get app => _app;
-
- @observable bool profile = false;
@observable String currentHash = '';
- @observable Uri currentHashUri;
+
void init() {
window.onHashChange.listen((event) {
if (setDefaultHash()) {
// We just triggered another onHashChange event.
return;
}
- notifyPropertyChange(#hasCurrentIsolate, !hasCurrentIsolate,
- hasCurrentIsolate);
// Request the current anchor.
requestCurrentHash();
});
@@ -36,40 +30,23 @@
}
}
-
- /// Returns the current isolate prefix, i.e. '#/isolates/XX/' if one
- /// is present and null otherwise.
- String currentIsolateAnchorPrefix() {
- Match m = currentIsolateMatcher.matchAsPrefix(currentHash);
- if (m == null) {
- return null;
- }
- return m.input.substring(m.start, m.end);
- }
-
- /// Returns the current object id.
- String currentObjectId() {
- Match m = currentIsolateMatcher.matchAsPrefix(currentHash);
+ /// Parses the location entry and extracts the id for the object
+ /// inside the current isolate.
+ String currentIsolateObjectId() {
+ Match m = _currentObjectMatcher.matchAsPrefix(currentHash);
if (m == null) {
return null;
}
return m.input.substring(m.end);
}
- /// Predicate, does the current URL have a current isolate ID in it?
- @observable bool get hasCurrentIsolate {
- return currentIsolateAnchorPrefix() != null;
- }
-
- /// Extract the current isolate id as an integer. Returns [InvalidIsolateId]
- /// if none is present in window.location.
+ /// Parses the location entry and extracts the id for the current isolate.
String currentIsolateId() {
- var prefix = currentIsolateAnchorPrefix();
- if (prefix == null) {
+ Match m = _currentIsolateMatcher.matchAsPrefix(currentHash);
+ if (m == null) {
return '';
}
- // Chop off the '/#'.
- return prefix.substring(2);
+ return m.input.substring(2, m.end);
}
/// Returns the current isolate.
@@ -78,7 +55,7 @@
if (id == '') {
return null;
}
- return app.vm.getIsolate(id);
+ return _app.vm.isolates.getIsolate(id);
}
/// If no anchor is set, set the default anchor and return true.
@@ -92,23 +69,21 @@
return false;
}
- /// Take the current request string from window.location and submit the
- /// request to the request manager.
+ void _setResponse(ServiceObject serviceObject) {
+ _app.response = serviceObject;
+ }
+
+ /// Refresh the service object reference in the location entry.
void requestCurrentHash() {
currentHash = window.location.hash;
- // Chomp off the #
- String requestUrl = currentHash.substring(1);
- app.isolate = currentIsolate();
- currentHashUri = Uri.parse(requestUrl);
- if (app.isolate == null) {
- Logger.root.warning('Refreshing isolates.');
- app.vm.refreshIsolates();
+ _app.isolate = currentIsolate();
+ if (_app.isolate == null) {
+ // No current isolate, refresh the isolate list.
+ _app.vm.isolates.reload().then(_setResponse);
return;
}
- var objectId = currentObjectId();
- Logger.root.info('Asking ${app.isolate.id} for ${objectId}');
- app.isolate.get(objectId).then((so) {
- app.response = so;
- });
+ // Have a current isolate, request object.
+ var objectId = currentIsolateObjectId();
+ _app.isolate.get(objectId).then(_setResponse);
}
}
diff --git a/runtime/bin/vmservice/client/lib/src/app/model.dart b/runtime/bin/vmservice/client/lib/src/app/model.dart
deleted file mode 100644
index ddca7c8..0000000
--- a/runtime/bin/vmservice/client/lib/src/app/model.dart
+++ /dev/null
@@ -1,392 +0,0 @@
-// Copyright (c) 2014, 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.
-
-part of app;
-
-class CodeInstruction extends Observable {
- @observable final int address;
- @observable final String machine;
- @observable final String human;
- @observable int ticks = 0;
- @observable double percent;
- @observable String formattedTicks() {
- if (percent == null || percent <= 0.0) {
- return '';
- }
- return '${percent.toStringAsFixed(2)}% (${ticks})';
- }
- @observable String formattedAddress() {
- return '0x${address.toRadixString(16)}';
- }
- CodeInstruction(this.address, this.machine, this.human);
- void updateTickString(Code code) {
- if ((code == null) || (code.inclusiveTicks == 0)) {
- percent = null;
- return;
- }
- percent = (ticks / code.inclusiveTicks) * 100.0;
- if (percent <= 0.00) {
- percent = null;
- return;
- }
- }
-}
-
-class CodeKind {
- final _value;
- const CodeKind._internal(this._value);
- String toString() => 'CodeKind.$_value';
-
- static CodeKind fromString(String s) {
- if (s == 'Native') {
- return Native;
- } else if (s == 'Dart') {
- return Dart;
- } else if (s == 'Collected') {
- return Collected;
- }
- throw new FallThroughError();
- }
- static const Native = const CodeKind._internal('Native');
- static const Dart = const CodeKind._internal('Dart');
- static const Collected = const CodeKind._internal('Collected');
-}
-
-class CodeTick {
- final int address;
- final int exclusive_ticks;
- final int inclusive_ticks;
- CodeTick(this.address, this.exclusive_ticks, this.inclusive_ticks);
-}
-
-class CodeCallCount {
- final Code code;
- final int count;
- CodeCallCount(this.code, this.count);
-}
-
-class Code extends Observable {
- final CodeKind kind;
- final int startAddress;
- final int endAddress;
- final List<CodeTick> ticks = [];
- final List<CodeCallCount> callers = [];
- final List<CodeCallCount> callees = [];
- int inclusiveTicks = 0;
- int exclusiveTicks = 0;
- @observable final List<CodeInstruction> instructions = toObservable([]);
- @observable Map functionRef = toObservable({});
- @observable Map codeRef = toObservable({});
- @observable String name;
- @observable String userName;
-
- Code(this.kind, this.name, this.startAddress, this.endAddress);
-
- Code.fromMap(Map map) :
- kind = CodeKind.Dart,
- startAddress = int.parse(map['start'], radix: 16),
- endAddress = int.parse(map['end'], radix: 16) {
- functionRef = toObservable(map['function']);
- codeRef = toObservable(map);
- name = map['name'];
- userName = map['user_name'];
- if (map['disassembly'] != null) {
- _loadInstructions(map['disassembly']);
- }
- }
-
- factory Code.fromProfileMap(Map map) {
- var kind = CodeKind.fromString(map['kind']);
- var startAddress;
- var endAddress;
- var name;
- var userName;
- var codeRef = map['code'];
- assert(codeRef != null);
- startAddress = int.parse(codeRef['start'], radix:16);
- endAddress = int.parse(codeRef['end'], radix:16);
- name = codeRef['name'];
- userName = codeRef['user_name'];
- var code = new Code(kind, name, startAddress, endAddress);
- code.codeRef = codeRef;
- code.functionRef = toObservable(codeRef['function']);;
- code.userName = userName;
- if (codeRef['disassembly'] != null) {
- code._loadInstructions(codeRef['disassembly']);
- // Throw the JSON version away after loading the disassembly.
- codeRef['disassembly'] = null;
- }
- return code;
- }
-
- // Refresh tick counts, etc for a code object.
- void _refresh(Map map) {
- inclusiveTicks = int.parse(map['inclusive_ticks']);
- exclusiveTicks = int.parse(map['exclusive_ticks']);
- // Load address ticks.
- var ticksList = map['ticks'];
- if ((ticksList != null) && (ticksList.length > 0)) {
- assert((ticks.length % 3) == 0);
- for (var i = 0; i < ticksList.length; i += 3) {
- var address = int.parse(ticksList[i], radix:16);
- var inclusive_ticks = int.parse(ticksList[i + 1]);
- var exclusive_ticks = int.parse(ticksList[i + 2]);
- var codeTick = new CodeTick(address, exclusive_ticks, inclusive_ticks);
- ticks.add(codeTick);
- }
- }
- }
-
- /// Sum all caller counts.
- int sumCallersCount() => _sumCallCount(callers);
- /// Specific caller count.
- int callersCount(Code code) => _callCount(callers, code);
- /// Sum of callees count.
- int sumCalleesCount() => _sumCallCount(callees);
- /// Specific callee count.
- int calleesCount(Code code) => _callCount(callees, code);
-
- int _sumCallCount(List<CodeCallCount> calls) {
- var sum = 0;
- for (CodeCallCount caller in calls) {
- sum += caller.count;
- }
- return sum;
- }
-
- int _callCount(List<CodeCallCount> calls, Code code) {
- for (CodeCallCount caller in calls) {
- if (caller.code == code) {
- return caller.count;
- }
- }
- return 0;
- }
-
- void resolveCalls(Map code, List<Code> codes) {
- _resolveCalls(callers, code['callers'], codes);
- _resolveCalls(callees, code['callees'], codes);
- }
-
- void _resolveCalls(List<CodeCallCount> calls, List data, List<Code> codes) {
- // Clear.
- calls.clear();
- // Resolve.
- for (var i = 0; i < data.length; i += 2) {
- var index = int.parse(data[i]);
- var count = int.parse(data[i + 1]);
- assert(index >= 0);
- assert(index < codes.length);
- calls.add(new CodeCallCount(codes[index], count));
- }
- // Sort to descending count order.
- calls.sort((a, b) => b.count - a.count);
- }
-
- /// Resets all tick counts to 0.
- void resetTicks() {
- inclusiveTicks = 0;
- exclusiveTicks = 0;
- ticks.clear();
- for (var instruction in instructions) {
- instruction.ticks = 0;
- }
- }
-
- /// Adds [count] to the tick count for the instruction at [address].
- void tick(int address, int count) {
- for (var instruction in instructions) {
- if (instruction.address == address) {
- instruction.ticks += count;
- return;
- }
- }
- }
-
- /// Clears [instructions] and then adds all instructions from
- /// [instructionList].
- void _loadInstructions(List instructionList) {
- instructions.clear();
- // Load disassembly into code object.
- for (int i = 0; i < instructionList.length; i += 3) {
- if (instructionList[i] == '') {
- // Code comment.
- // TODO(johnmccutchan): Insert code comments into instructions.
- continue;
- }
- var address = int.parse(instructionList[i]);
- var machine = instructionList[i + 1];
- var human = instructionList[i + 2];
- instructions.add(new CodeInstruction(address, machine, human));
- }
- }
-
- /// returns true if [address] is inside the address range.
- bool contains(int address) {
- return (address >= startAddress) && (address < endAddress);
- }
-}
-
-class Profile {
- final Isolate isolate;
- final List<Code> _codeObjectsInImportOrder = new List<Code>();
- int totalSamples = 0;
-
- Profile.fromMap(this.isolate, Map m) {
- var codes = m['codes'];
- totalSamples = m['samples'];
- Logger.root.info('Creating profile from ${totalSamples} samples '
- 'and ${codes.length} code objects.');
- isolate.resetCodeTicks();
- _codeObjectsInImportOrder.clear();
- codes.forEach((code) {
- try {
- _processCode(code);
- } catch (e, st) {
- Logger.root.warning('Error processing code object. $e $st', e, st);
- }
- });
- // Now that code objects have been loaded, post-process them
- // and resolve callers and callees.
- assert(_codeObjectsInImportOrder.length == codes.length);
- for (var i = 0; i < codes.length; i++) {
- Code code = _codeObjectsInImportOrder[i];
- code.resolveCalls(codes[i], _codeObjectsInImportOrder);
- }
- _codeObjectsInImportOrder.clear();
- }
-
- int _extractCodeStartAddress(Map code) {
- return int.parse(code['code']['start'], radix:16);
- }
-
- void _processCode(Map profileCode) {
- if (profileCode['type'] != 'ProfileCode') {
- return;
- }
- int address = _extractCodeStartAddress(profileCode);
- var code = isolate.findCodeByAddress(address);
- if (code == null) {
- // Never seen a code object at this address before, create a new one.
- code = new Code.fromProfileMap(profileCode);
- isolate.codes.add(code);
- }
- code._refresh(profileCode);
- _codeObjectsInImportOrder.add(code);
- }
-
- List<Code> topExclusive(int count) {
- List<Code> exclusive = isolate.codes;
- exclusive.sort((Code a, Code b) {
- return b.exclusiveTicks - a.exclusiveTicks;
- });
- if ((exclusive.length < count) || (count == 0)) {
- return exclusive;
- }
- return exclusive.sublist(0, count);
- }
-}
-
-class ScriptLine extends Observable {
- @observable final int line;
- @observable int hits = -1;
- @observable String text = '';
- /// Is this a line of executable code?
- bool get executable => hits >= 0;
- /// Has this line executed before?
- bool get covered => hits > 0;
- ScriptLine(this.line);
-}
-
-class Script extends Observable {
- @observable String kind = null;
- @observable Map scriptRef = toObservable({});
- @published String shortName;
- @observable Map libraryRef = toObservable({});
- @observable final List<ScriptLine> lines =
- toObservable(new List<ScriptLine>());
- bool _needsSource = true;
- bool get needsSource => _needsSource;
- Script.fromMap(Map map) {
- scriptRef = toObservable({
- 'id': map['id'],
- 'name': map['name'],
- 'user_name': map['user_name']
- });
- shortName = map['name'].substring(map['name'].lastIndexOf('/') + 1);
- libraryRef = toObservable(map['library']);
- kind = map['kind'];
- _processSource(map['source']);
- }
-
- // Iterable of lines for display. Skips line '0'.
- @observable Iterable get linesForDisplay {
- return lines.skip(1);
- }
-
- // Fetch (possibly create) the ScriptLine for [lineNumber].
- ScriptLine _getLine(int lineNumber) {
- assert(lineNumber != 0);
- if (lineNumber >= lines.length) {
- // Grow lines list.
- lines.length = lineNumber + 1;
- }
- var line = lines[lineNumber];
- if (line == null) {
- // Create this line.
- line = new ScriptLine(lineNumber);
- lines[lineNumber] = line;
- }
- return line;
- }
-
- void _processSource(String source) {
- if (source == null) {
- return;
- }
- Logger.root.info('Loading source for ${scriptRef['name']}');
- var sourceLines = source.split('\n');
- _needsSource = sourceLines.length == 0;
- for (var i = 0; i < sourceLines.length; i++) {
- var line = _getLine(i + 1);
- line.text = sourceLines[i];
- }
- }
-
- void _processCoverageHits(List hits) {
- for (var i = 0; i < hits.length; i += 2) {
- var line = _getLine(hits[i]);
- line.hits = hits[i + 1];
- }
- notifyPropertyChange(#coveredPercentageFormatted, '',
- coveredPercentageFormatted());
- }
-
- /// What percentage of lines in this script have been covered?
- @observable double coveredPercentage() {
- int coveredLines = 0;
- int executableLines = 0;
- for (var line in lines) {
- if (line == null) {
- continue;
- }
- if (!line.executable) {
- continue;
- }
- executableLines++;
- if (!line.covered) {
- continue;
- }
- coveredLines++;
- }
- if (executableLines == 0) {
- return 0.0;
- }
- return (coveredLines / executableLines) * 100.0;
- }
-
- @observable String coveredPercentageFormatted() {
- return '(' + coveredPercentage().toStringAsFixed(1) + '% covered)';
- }
-}
diff --git a/runtime/bin/vmservice/client/lib/src/app/service.dart b/runtime/bin/vmservice/client/lib/src/app/service.dart
deleted file mode 100644
index c82182e..0000000
--- a/runtime/bin/vmservice/client/lib/src/app/service.dart
+++ /dev/null
@@ -1,68 +0,0 @@
-// Copyright (c) 2014, 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.
-
-part of app;
-
-/// A [ServiceObject] is an object known to the VM service and is tied
-/// to an owning [Isolate].
-abstract class ServiceObject extends Observable {
- /// Owning isolate.
- final Isolate isolate;
- /// The complete service url of this object.
- String get link => isolate.relativeLink(_id);
- String _id;
- /// The id of this object.
- String get id => _id;
- String _serviceType;
- /// The service type of this object.
- String get serviceType => _serviceType;
-
- /// Refresh [this]. Returns a future which completes to [this].
- Future refresh();
-
- ServiceObject(this.isolate, this._id, this._serviceType);
-}
-
-
-/// A [ServiceObject] which implements [Map].
-class ServiceMap extends ServiceObject implements Map {
- final Map _map = new ObservableMap();
-
- ServiceMap(Isolate isolate, String id, String serviceType) :
- super(isolate, id, serviceType) {
- }
-
- ServiceMap.fromMap(Isolate isolate, Map m) :
- super(isolate, m['id'], m['type']) {
- _fill(m);
- }
-
- Future refresh() {
- isolate.getMap(_id).then(_fill);
- return new Future.value(this);
- }
-
- void _fill(Map m) {
- _map.clear();
- _map.addAll(m);
- // TODO(johnmccutchan): Recursively promote all contained Maps to
- // ServiceMaps if they have a 'type' key.
- }
-
- // Implement Map by forwarding methods to _map.
- void addAll(Map other) => _map.addAll(other);
- void clear() => _map.clear();
- bool containsValue(v) => _map.containsValue(v);
- bool containsKey(k) => _map.containsKey(k);
- void forEach(Function f) => _map.forEach(f);
- putIfAbsent(key, Function ifAbsent) => _map.putIfAbsent(key, ifAbsent);
- void remove(key) => _map.remove(key);
- operator [](k) => _map[k];
- operator []=(k, v) => _map[k] = v;
- bool get isEmpty => _map.isEmpty;
- bool get isNotEmpty => _map.isNotEmpty;
- Iterable get keys => _map.keys;
- Iterable get values => _map.values;
- int get length => _map.length;
-}
diff --git a/runtime/bin/vmservice/client/lib/src/app/vm.dart b/runtime/bin/vmservice/client/lib/src/app/vm.dart
deleted file mode 100644
index 3002912..0000000
--- a/runtime/bin/vmservice/client/lib/src/app/vm.dart
+++ /dev/null
@@ -1,127 +0,0 @@
-// Copyright (c) 2014, 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.
-
-part of app;
-
-abstract class VM extends Observable {
- @observable ObservatoryApplication get app => _app;
- ObservatoryApplication _app;
-
- Future<String> fetchString(String path);
-
- Future<ObservableMap> fetchMap(String path) {
- return fetchString(path).then((response) {
- try {
- var map = JSON.decode(response);
- return toObservable(map);
- } catch (e, st) {
- return toObservable({
- 'type': 'Error',
- 'errorType': 'DecodeError',
- 'text': '$e $st'
- });
- }
- }).catchError((error) {
- return toObservable({
- 'type': 'Error',
- 'errorType': 'FetchError',
- 'text': '$error'
- });
- });
- }
-
- @observable final ObservableMap isolates = new ObservableMap();
- Isolate getIsolate(String id) {
- var isolate = isolates[id];
- if (isolate != null) {
- return isolate;
- }
- isolate = new Isolate.fromId(this, id);
- isolates[id] = isolate;
- return isolate;
- }
-
- static bool _foundIsolateInMembers(String id, List<Map> members) {
- return members.any((E) => E['id'] == id);
- }
-
- void _updateIsolates(List<Map> members) {
- // Find dead isolates.
- var deadIsolates = [];
- isolates.forEach((k, v) {
- if (!_foundIsolateInMembers(k, members)) {
- deadIsolates.add(k);
- }
- });
- // Remove them.
- deadIsolates.forEach((id) {
- isolates.remove(id);
- });
- // Add new isolates.
- members.forEach((map) {
- var id = map['id'];
- var isolate = isolates[id];
- if (isolate == null) {
- isolate = new Isolate.fromMap(this, map);
- isolates[id] = isolate;
- }
- isolate.refresh();
- });
- }
-
- void refreshIsolates() {
- fetchMap('isolates').then((map) {
- assert(map['type'] == 'IsolateList');
- _updateIsolates(map['members']);
- app.setResponse(map);
- });
- }
-}
-
-
-class HttpVM extends VM {
- final String address;
- HttpVM(this.address);
-
- Future<String> fetchString(String path) {
- Logger.root.info('Fetching $path from $address');
- return HttpRequest.getString(address + path);
- }
-}
-
-class DartiumVM extends VM {
- final Map _outstandingRequests = new Map();
- int _requestSerial = 0;
-
- DartiumVM() {
- window.onMessage.listen(_messageHandler);
- print('Connected to DartiumVM');
- }
-
- void _messageHandler(msg) {
- var id = msg.data['id'];
- var name = msg.data['name'];
- var data = msg.data['data'];
- if (name != 'observatoryData') {
- return;
- }
- var completer = _outstandingRequests[id];
- assert(completer != null);
- _outstandingRequests.remove(id);
- completer.complete(data);
- }
-
- Future<String> fetchString(String path) {
- var idString = '$_requestSerial';
- Map message = {};
- message['id'] = idString;
- message['method'] = 'observatoryQuery';
- message['query'] = '/$path';
- _requestSerial++;
- var completer = new Completer();
- _outstandingRequests[idString] = completer;
- window.parent.postMessage(JSON.encode(message), '*');
- return completer.future;
- }
-}
diff --git a/runtime/bin/vmservice/client/lib/src/elements/breakpoint_list.dart b/runtime/bin/vmservice/client/lib/src/elements/breakpoint_list.dart
index 7a3f55b..157e6c5 100644
--- a/runtime/bin/vmservice/client/lib/src/elements/breakpoint_list.dart
+++ b/runtime/bin/vmservice/client/lib/src/elements/breakpoint_list.dart
@@ -4,22 +4,18 @@
library breakpoint_list_element;
-import 'isolate_element.dart';
-import 'package:logging/logging.dart';
+import 'observatory_element.dart';
+import 'package:observatory/service.dart';
import 'package:polymer/polymer.dart';
// TODO(turnidge): Is a breakpoint list associated with a VM or an isolate?
@CustomTag('breakpoint-list')
-class BreakpointListElement extends IsolateElement {
- @published Map msg = toObservable({});
+class BreakpointListElement extends ObservatoryElement {
+ @published ServiceMap msg;
BreakpointListElement.created() : super.created();
void refresh(var done) {
- isolate.getMap('breakpoints').then((map) {
- msg = map;
- }).catchError((e, trace) {
- Logger.root.severe('Error while refreshing breakpoint-list: $e\n$trace');
- }).whenComplete(done);
+ msg.reload().whenComplete(done);
}
}
diff --git a/runtime/bin/vmservice/client/lib/src/elements/breakpoint_list.html b/runtime/bin/vmservice/client/lib/src/elements/breakpoint_list.html
index 3785531..ae4439b 100644
--- a/runtime/bin/vmservice/client/lib/src/elements/breakpoint_list.html
+++ b/runtime/bin/vmservice/client/lib/src/elements/breakpoint_list.html
@@ -1,12 +1,12 @@
<head>
<link rel="import" href="nav_bar.html">
- <link rel="import" href="isolate_element.html">
+ <link rel="import" href="observatory_element.html">
</head>
-<polymer-element name="breakpoint-list" extends="isolate-element">
+<polymer-element name="breakpoint-list" extends="observatory-element">
<template>
<nav-bar>
<top-nav-menu></top-nav-menu>
- <isolate-nav-menu isolate="{{ isolate }}"></isolate-nav-menu>
+ <isolate-nav-menu isolate="{{ msg.isolate }}"></isolate-nav-menu>
<nav-menu link="." anchor="breakpoints" last="{{ true }}"></nav-menu>
<nav-refresh callback="{{ refresh }}"></nav-refresh>
</nav-bar>
diff --git a/runtime/bin/vmservice/client/lib/src/elements/class_view.dart b/runtime/bin/vmservice/client/lib/src/elements/class_view.dart
index bfdc050..fd53d20 100644
--- a/runtime/bin/vmservice/client/lib/src/elements/class_view.dart
+++ b/runtime/bin/vmservice/client/lib/src/elements/class_view.dart
@@ -4,20 +4,16 @@
library class_view_element;
-import 'isolate_element.dart';
-import 'package:logging/logging.dart';
+import 'observatory_element.dart';
+import 'package:observatory/service.dart';
import 'package:polymer/polymer.dart';
@CustomTag('class-view')
-class ClassViewElement extends IsolateElement {
- @published Map cls;
+class ClassViewElement extends ObservatoryElement {
+ @published ServiceMap cls;
ClassViewElement.created() : super.created();
void refresh(var done) {
- isolate.getMap(cls['id']).then((map) {
- cls = map;
- }).catchError((e, trace) {
- Logger.root.severe('Error while refreshing class-view: $e\n$trace');
- }).whenComplete(done);
+ cls.reload().whenComplete(done);
}
}
\ No newline at end of file
diff --git a/runtime/bin/vmservice/client/lib/src/elements/class_view.html b/runtime/bin/vmservice/client/lib/src/elements/class_view.html
index cc906b2..8bffd2c 100644
--- a/runtime/bin/vmservice/client/lib/src/elements/class_view.html
+++ b/runtime/bin/vmservice/client/lib/src/elements/class_view.html
@@ -5,15 +5,15 @@
<link rel="import" href="instance_ref.html">
<link rel="import" href="library_ref.html">
<link rel="import" href="nav_bar.html">
- <link rel="import" href="isolate_element.html">
+ <link rel="import" href="observatory_element.html">
</head>
-<polymer-element name="class-view" extends="isolate-element">
+<polymer-element name="class-view" extends="observatory-element">
<template>
<nav-bar>
<top-nav-menu></top-nav-menu>
- <isolate-nav-menu isolate="{{ isolate }}"></isolate-nav-menu>
- <library-nav-menu isolate="{{ isolate }}" library="{{ cls['library'] }}"></library-nav-menu>
- <class-nav-menu isolate="{{ isolate }}" cls="{{ cls }}" last="{{ true }}"></class-nav-menu>
+ <isolate-nav-menu isolate="{{ cls.isolate }}"></isolate-nav-menu>
+ <library-nav-menu library="{{ cls['library'] }}"></library-nav-menu>
+ <class-nav-menu cls="{{ cls }}" last="{{ true }}"></class-nav-menu>
<nav-refresh callback="{{ refresh }}"></nav-refresh>
</nav-bar>
@@ -21,12 +21,13 @@
<div class="col-md-8 col-md-offset-2">
<div class="panel panel-warning">
<div class="panel-heading">
- class <strong>{{ cls['user_name'] }}</strong>
+ class <strong>{{ cls.name }}</strong>
<template if="{{ cls['super']['type'] != 'Null' }}">
extends
- <class-ref app="{{ app }}" ref="{{ cls['super'] }}"></class-ref>
+ <class-ref ref="{{ cls['super'] }}"></class-ref>
</template>
- <library-ref app="{{ app }}" ref="{{ cls['library'] }}"></library-ref>
+ <p></p>
+ <library-ref ref="{{ cls['library'] }}"></library-ref>
</div>
<div class="panel-body">
<table class="table table-hover">
@@ -56,8 +57,8 @@
<table class="table table-hover">
<tbody>
<tr template repeat="{{ field in cls['fields'] }}">
- <td><field-ref app="{{ app }}" ref="{{ field }}"></field-ref></td>
- <td><instance-ref app="{{ app }}" ref="{{ field['value'] }}"></instance-ref></td>
+ <td><field-ref ref="{{ field }}"></field-ref></td>
+ <td><instance-ref ref="{{ field['value'] }}"></instance-ref></td>
</tr>
</tbody>
</table>
@@ -71,8 +72,8 @@
</thead>
<tbody>
<tr template repeat="{{ function in cls['functions'] }}">
- <td><function-ref app="{{ app }}" ref="{{ function }}"></function-ref></td>
- <td><function-ref app="{{ app }}" ref="{{ function }}" internal></function-ref></td>
+ <td><function-ref ref="{{ function }}"></function-ref></td>
+ <td><function-ref ref="{{ function }}" internal></function-ref></td>
</tr>
</tbody>
</table>
diff --git a/runtime/bin/vmservice/client/lib/src/elements/code_view.dart b/runtime/bin/vmservice/client/lib/src/elements/code_view.dart
index 884241b..dacbab8 100644
--- a/runtime/bin/vmservice/client/lib/src/elements/code_view.dart
+++ b/runtime/bin/vmservice/client/lib/src/elements/code_view.dart
@@ -4,15 +4,27 @@
library code_view_element;
-import 'isolate_element.dart';
+import 'observatory_element.dart';
+import 'package:observatory/service.dart';
import 'package:polymer/polymer.dart';
-import 'package:observatory/app.dart';
@CustomTag('code-view')
-class CodeViewElement extends IsolateElement {
+class CodeViewElement extends ObservatoryElement {
@published Code code;
CodeViewElement.created() : super.created();
+ void enteredView() {
+ super.enteredView();
+ if (code == null) {
+ return;
+ }
+ code.load();
+ }
+
+ void refresh(var done) {
+ code.reload().whenComplete(done);
+ }
+
String get cssPanelClass {
return 'panel panel-success';
}
diff --git a/runtime/bin/vmservice/client/lib/src/elements/code_view.html b/runtime/bin/vmservice/client/lib/src/elements/code_view.html
index c2fee73..cc6166c 100644
--- a/runtime/bin/vmservice/client/lib/src/elements/code_view.html
+++ b/runtime/bin/vmservice/client/lib/src/elements/code_view.html
@@ -1,38 +1,77 @@
-<head>
- <link rel="import" href="disassembly_entry.html">
- <link rel="import" href="function_ref.html">
- <link rel="import" href="isolate_element.html">
- <link rel="import" href="nav_bar.html">
-</head>
-<polymer-element name="code-view" extends="isolate-element">
+<link rel="import" href="function_ref.html">
+<link rel="import" href="observatory_element.html">
+<link rel="import" href="nav_bar.html">
+<polymer-element name="code-view" extends="observatory-element">
<template>
<nav-bar>
<top-nav-menu></top-nav-menu>
- <isolate-nav-menu isolate="{{ isolate }}"></isolate-nav-menu>
- <nav-menu link="." anchor="{{ code.functionRef['user_name'] }}" last="{{ true }}"></nav-menu>
- <!-- TODO(turnidge): Implement code refresh -->
+ <isolate-nav-menu isolate="{{ code.isolate }}"></isolate-nav-menu>
+ <nav-menu link="." anchor="{{ code.name }}" last="{{ true }}"></nav-menu>
+ <nav-refresh callback="{{ refresh }}"></nav-refresh>
</nav-bar>
-
- <div class="row">
- <div class="col-md-8 col-md-offset-2">
- <div class="{{ cssPanelClass }}">
- <div class="panel-heading">
- <function-ref isolate="{{ isolate }}" ref="{{ code.functionRef }}"></function-ref>
- </div>
- <div class="panel-body">
- <div class="row">
- <div class="col-md-2"><strong>Samples</strong></div>
- <div class="col-md-2"><strong>Address</strong></div>
- <div><strong>Instruction</strong></div>
- </div>
- <template repeat="{{ instruction in code.instructions }}">
- <disassembly-entry instruction="{{ instruction }}">
- </disassembly-entry>
- </template>
- </div>
- </div>
+ <style>
+ .content {
+ padding-left: 10%;
+ font: 400 14px 'Montserrat', sans-serif;
+ }
+ h1 {
+ font: 400 18px 'Montserrat', sans-serif;
+ }
+ .member, .memberHeader {
+ vertical-align: top;
+ padding: 3px 0 3px 1em;
+ font: 400 14px 'Montserrat', sans-serif;
+ }
+ .monospace {
+ font-family: consolas, courier, monospace;
+ font-size: 1em;
+ line-height: 1.2em;
+ white-space: nowrap;
+ }
+ </style>
+ <div class="content">
+ <h1>Code for {{ code.name }}</h1>
+ <table>
+ <tr>
+ <td class="memberHeader">kind</td>
+ <td class="member">{{code.kind}}</td>
+ </tr>
+ <tr>
+ <td class="memberHeader">function</td>
+ <td class="member">
+ <function-ref ref="{{code.function}}">
+ </function-ref>
+ </td>
+ </tr>
+ <tr>
+ <td class="memberHeader">Inclusive</td>
+ <td class="member">{{ code.formattedInclusiveTicks }}</td>
+ </tr>
+ <tr>
+ <td class="memberHeader">Exclusive</td>
+ <td class="member">{{ code.formattedExclusiveTicks }}</td>
+ </tr>
+ </table>
</div>
- </div>
+ <hr>
+ <div class="content">
+ <template if="{{ code.hasDisassembly }}">
+ <div class="row">
+ <div class="col-md-2 memberHeader">Inclusive</div>
+ <div class="col-md-2 memberHeader">Exclusive</div>
+ <div class="col-md-2 memberHeader">Address</div>
+ <div class="col-md-6 memberHeader">Disassembly</div>
+ </div>
+ </template>
+ <template repeat="{{ instruction in code.instructions }}">
+ <div class="row">
+ <div class="col-md-2 monospace">{{ instruction.formattedInclusive(code) }}</div>
+ <div class="col-md-2 monospace">{{ instruction.formattedExclusive(code) }}</div>
+ <div class="col-md-2 monospace">{{ instruction.formattedAddress() }}</div>
+ <div class="col-md-6 monospace">{{ instruction.human }}</div>
+ </div>
+ </template>
+ </div>
</template>
<script type="application/dart" src="code_view.dart"></script>
</polymer-element>
diff --git a/runtime/bin/vmservice/client/lib/src/elements/curly_block.dart b/runtime/bin/vmservice/client/lib/src/elements/curly_block.dart
index 4b32108..9b76ef6 100644
--- a/runtime/bin/vmservice/client/lib/src/elements/curly_block.dart
+++ b/runtime/bin/vmservice/client/lib/src/elements/curly_block.dart
@@ -15,7 +15,6 @@
@published var callback = null;
void doneCallback() {
- print("done callback");
expanded = !expanded;
busy = false;
}
diff --git a/runtime/bin/vmservice/client/lib/src/elements/disassembly_entry.dart b/runtime/bin/vmservice/client/lib/src/elements/disassembly_entry.dart
deleted file mode 100644
index 751dada..0000000
--- a/runtime/bin/vmservice/client/lib/src/elements/disassembly_entry.dart
+++ /dev/null
@@ -1,15 +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.
-
-library disassembly_entry_element;
-
-import 'package:observatory/app.dart';
-import 'package:polymer/polymer.dart';
-import 'observatory_element.dart';
-
-@CustomTag('disassembly-entry')
-class DisassemblyEntryElement extends ObservatoryElement {
- @published CodeInstruction instruction;
- DisassemblyEntryElement.created() : super.created();
-}
\ No newline at end of file
diff --git a/runtime/bin/vmservice/client/lib/src/elements/disassembly_entry.html b/runtime/bin/vmservice/client/lib/src/elements/disassembly_entry.html
deleted file mode 100644
index 79b7516..0000000
--- a/runtime/bin/vmservice/client/lib/src/elements/disassembly_entry.html
+++ /dev/null
@@ -1,15 +0,0 @@
-<head>
- <link rel="import" href="observatory_element.html">
-</head>
-<polymer-element name="disassembly-entry" extends="observatory-element">
- <template>
- <div class="row">
- <div class="col-md-2">{{ instruction.formattedTicks() }}</div>
- <div class="col-md-2">{{ instruction.formattedAddress() }}</div>
- <div class="col-md-4">
- <code>{{ instruction.machine }} {{ instruction.human }}</code>
- </div>
- </div>
- </template>
- <script type="application/dart" src="disassembly_entry.dart"></script>
-</polymer-element>
\ No newline at end of file
diff --git a/runtime/bin/vmservice/client/lib/src/elements/error_view.dart b/runtime/bin/vmservice/client/lib/src/elements/error_view.dart
index 7b99628..2061929 100644
--- a/runtime/bin/vmservice/client/lib/src/elements/error_view.dart
+++ b/runtime/bin/vmservice/client/lib/src/elements/error_view.dart
@@ -4,13 +4,14 @@
library error_view_element;
-import 'package:polymer/polymer.dart';
import 'observatory_element.dart';
+import 'package:polymer/polymer.dart';
+import 'package:observatory/service.dart';
-/// Displays an Error response.
+/// Displays an Error ServiceObject.
@CustomTag('error-view')
class ErrorViewElement extends ObservatoryElement {
- @published Map error;
+ @published ServiceObject error;
ErrorViewElement.created() : super.created();
}
\ No newline at end of file
diff --git a/runtime/bin/vmservice/client/lib/src/elements/error_view.html b/runtime/bin/vmservice/client/lib/src/elements/error_view.html
index 336cc0c..9229178 100644
--- a/runtime/bin/vmservice/client/lib/src/elements/error_view.html
+++ b/runtime/bin/vmservice/client/lib/src/elements/error_view.html
@@ -6,9 +6,9 @@
<div class="row">
<div class="col-md-8 col-md-offset-2">
<div class="panel panel-danger">
- <div class="panel-heading">{{ error['errorType'] }}</div>
+ <div class="panel-heading">{{ error.kind }}</div>
<div class="panel-body">
- <p>{{ error['text'] }}</p>
+ <p>{{ error.message }}</p>
</div>
</div>
</div>
diff --git a/runtime/bin/vmservice/client/lib/src/elements/eval_box.dart b/runtime/bin/vmservice/client/lib/src/elements/eval_box.dart
new file mode 100644
index 0000000..4322866
--- /dev/null
+++ b/runtime/bin/vmservice/client/lib/src/elements/eval_box.dart
@@ -0,0 +1,57 @@
+// 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 eval_box_element;
+
+import 'dart:async';
+import 'dart:html';
+import 'observatory_element.dart';
+import 'package:polymer/polymer.dart';
+
+
+typedef Future<ObservableMap> evalType(String text);
+
+
+@CustomTag('eval-box')
+class EvalBoxElement extends ObservatoryElement {
+ @observable String text;
+ @observable String lineMode = "1-line";
+
+ @published evalType callback;
+ @observable ObservableList results = toObservable([]);
+
+ void updateLineMode(Event e, var detail, Node target) {
+ lineMode = (e.target as InputElement).value;
+ if (lineMode == '1-line') {
+ text = text.replaceAll('\n', ' ');
+ }
+ }
+
+ void eval(Event e, var detail, Node target) {
+ // Prevent any form action.
+ e.preventDefault();
+
+ // Clear the text box.
+ var expr = text;
+ text = '';
+
+ // Use provided callback to eval the expression.
+ if (callback != null) {
+ var map = toObservable({});
+ map['expr'] = expr;
+ results.insert(0, map);
+ callback(expr).then((result) {
+ map['value'] = result;
+ });
+ }
+ }
+
+ void selectExpr(MouseEvent e) {
+ assert(e.target is Element);
+ Element targetElement = e.target;
+ text = targetElement.getAttribute('expr');
+ }
+
+ EvalBoxElement.created() : super.created();
+}
diff --git a/runtime/bin/vmservice/client/lib/src/elements/eval_box.html b/runtime/bin/vmservice/client/lib/src/elements/eval_box.html
new file mode 100644
index 0000000..6709dd7
--- /dev/null
+++ b/runtime/bin/vmservice/client/lib/src/elements/eval_box.html
@@ -0,0 +1,88 @@
+<head>
+ <link rel="import" href="instance_ref.html">
+ <link rel="import" href="observatory_element.html">
+</head>
+<polymer-element name="eval-box" extends="observatory-element">
+ <template>
+ <style>
+ .textbox {
+ width: 80ex;
+ font: 400 16px 'Montserrat', sans-serif;
+ }
+ .bigtextbox {
+ font: 400 16px 'Montserrat', sans-serif;
+ }
+ .button {
+ font: 400 16px 'Montserrat', sans-serif;
+ }
+ .radios {
+ display: inline;
+ }
+ .radios label{
+ padding-left: 15px;
+ }
+ .historyExpr, .historyValue {
+ vertical-align: text-top;
+ font: 400 14px 'Montserrat', sans-serif;
+ }
+ .historyExpr a {
+ display: block;
+ color: black;
+ text-decoration: none;
+ padding: 6px 6px;
+ cursor: pointer;
+ white-space: pre-line;
+ }
+ .historyExpr a:hover {
+ background-color: #e1f5fe
+ }
+ .historyValue {
+ display: block;
+ padding: 6px 6px;
+ }
+ </style>
+ <form>
+ <template if="{{ lineMode == '1-line' }}">
+ <input class="textbox" type="text" value="{{ text }}">
+ </template>
+ <template if="{{ lineMode == 'N-line' }}">
+ <textarea class="bigtextbox" rows="5" cols="80"
+ value="{{ text }}"></textarea>
+ </template>
+
+ <input class="button" type="submit" value="Evaluate" on-click="{{ eval }}">
+ <div class="radios" on-change="{{ updateLineMode }}">
+ <label for="1-line">1-line
+ <input type="radio" name="lineMode" value="1-line" checked>
+ </label>
+ <label for="N-line">N-line
+ <input type="radio" name="lineMode" value="N-line">
+ </label>
+ </div>
+ </form>
+
+ <br>
+ <template if="{{ results.isNotEmpty }}">
+ <table>
+ <tr template repeat="{{ result in results }}">
+ <td class="historyExpr">
+ <a class="expr" on-click="{{ selectExpr }}"
+ expr="{{ result['expr'] }}">{{ result['expr'] }}</a>
+ </td>
+ <td class="historyValue">
+ <template if="{{ result['value'] == null }}">
+ <div style="color:#aaa;cursor:wait;"><pending></div>
+ </template>
+ <template if="{{ result['value'] != null }}">
+ <instance-ref isolate="{{ isolate }}"
+ ref="{{ result['value'] }}">
+ </instance-ref>
+ </template>
+ </td>
+ </tr>
+ </table>
+ </template>
+ </template>
+</polymer-element>
+
+<script type="application/dart" src="eval_box.dart"></script>
diff --git a/runtime/bin/vmservice/client/lib/src/elements/field_ref.html b/runtime/bin/vmservice/client/lib/src/elements/field_ref.html
index 69a4754..179b4918 100644
--- a/runtime/bin/vmservice/client/lib/src/elements/field_ref.html
+++ b/runtime/bin/vmservice/client/lib/src/elements/field_ref.html
@@ -1,6 +1,5 @@
<head>
<link rel="import" href="class_ref.html">
-<link rel="import" href="isolate_element.html">
<link rel="import" href="observatory_element.html">
<link rel="import" href="service_ref.html">
</head>
@@ -13,7 +12,7 @@
var
</template>
<template if="{{ (ref['declared_type']['name'] != 'dynamic') }}">
- <class-ref app="{{ app }}" ref="{{ ref['declared_type'] }}"></class-ref>
+ <class-ref ref="{{ ref['declared_type'] }}"></class-ref>
</template>
<a title="{{ hoverText }}" href="{{ url }}">{{ name }}</a>
</div>
diff --git a/runtime/bin/vmservice/client/lib/src/elements/field_view.dart b/runtime/bin/vmservice/client/lib/src/elements/field_view.dart
index 6fa83e7..4f33992 100644
--- a/runtime/bin/vmservice/client/lib/src/elements/field_view.dart
+++ b/runtime/bin/vmservice/client/lib/src/elements/field_view.dart
@@ -4,20 +4,16 @@
library field_view_element;
-import 'isolate_element.dart';
-import 'package:logging/logging.dart';
+import 'observatory_element.dart';
+import 'package:observatory/service.dart';
import 'package:polymer/polymer.dart';
@CustomTag('field-view')
-class FieldViewElement extends IsolateElement {
- @published Map field;
+class FieldViewElement extends ObservatoryElement {
+ @published ServiceMap field;
FieldViewElement.created() : super.created();
void refresh(var done) {
- isolate.getMap(field['id']).then((map) {
- field = map;
- }).catchError((e, trace) {
- Logger.root.severe('Error while refreshing field-view: $e\n$trace');
- }).whenComplete(done);
+ field.reload().whenComplete(done);
}
}
\ No newline at end of file
diff --git a/runtime/bin/vmservice/client/lib/src/elements/field_view.html b/runtime/bin/vmservice/client/lib/src/elements/field_view.html
index 1c591ca..8857d5e0 100644
--- a/runtime/bin/vmservice/client/lib/src/elements/field_view.html
+++ b/runtime/bin/vmservice/client/lib/src/elements/field_view.html
@@ -3,17 +3,17 @@
<link rel="import" href="nav_bar.html">
<link rel="import" href="observatory_element.html">
</head>
-<polymer-element name="field-view" extends="isolate-element">
+<polymer-element name="field-view" extends="observatory-element">
<template>
<nav-bar>
<top-nav-menu></top-nav-menu>
- <isolate-nav-menu isolate="{{ isolate }}"></isolate-nav-menu>
- <template if="{{ field['owner']['type'] == '@Class' }}">
+ <isolate-nav-menu isolate="{{ field.isolate }}"></isolate-nav-menu>
+ <template if="{{ field['owner'].serviceType == 'Class' }}">
<!-- TODO(turnidge): Add library nav menu here. -->
- <class-nav-menu isolate="{{ isolate }}" cls="{{ field['owner'] }}"></class-nav-menu>
+ <class-nav-menu cls="{{ field['owner'] }}"></class-nav-menu>
</template>
- <template if="{{ field['owner']['type'] == '@Library' }}">
- <library-nav-menu isolate="{{ isolate }}" library="{{ field['owner'] }}"></library-nav-menu>
+ <template if="{{ field['owner'].serviceType == 'Library' }}">
+ <library-nav-menu library="{{ field['owner'] }}"></library-nav-menu>
</template>
<nav-menu link="." anchor="{{ field['user_name'] }}" last="{{ true }}"></nav-menu>
<nav-refresh callback="{{ refresh }}"></nav-refresh>
@@ -27,7 +27,7 @@
<template if="{{ field['final'] }}">final</template>
<template if="{{ field['const'] }}">const</template>
{{ field['user_name'] }} ({{ field['name'] }})
- <class-ref isolate="{{ isolate }}" ref="{{ field['class'] }}"></class-ref>
+ <class-ref ref="{{ field['owner'] }}"></class-ref>
</div>
<div class="panel-body">
<template if="{{ field['guard_class'] == 'dynamic'}}">
@@ -46,7 +46,7 @@
</div>
</template>
<blockquote>
- <class-ref isolate="{{ isolate }}" ref="{{ field['guard_class'] }}"></class-ref>
+ <class-ref ref="{{ field['guard_class'] }}"></class-ref>
</blockquote>
</template>
</div>
diff --git a/runtime/bin/vmservice/client/lib/src/elements/function_view.dart b/runtime/bin/vmservice/client/lib/src/elements/function_view.dart
index 5119a7e..1c3620c 100644
--- a/runtime/bin/vmservice/client/lib/src/elements/function_view.dart
+++ b/runtime/bin/vmservice/client/lib/src/elements/function_view.dart
@@ -4,21 +4,17 @@
library function_view_element;
-import 'isolate_element.dart';
-import 'package:logging/logging.dart';
+import 'observatory_element.dart';
+import 'package:observatory/service.dart';
+
import 'package:polymer/polymer.dart';
-
@CustomTag('function-view')
-class FunctionViewElement extends IsolateElement {
- @published Map function;
+class FunctionViewElement extends ObservatoryElement {
+ @published ServiceMap function;
FunctionViewElement.created() : super.created();
void refresh(var done) {
- isolate.getMap(function['id']).then((map) {
- function = map;
- }).catchError((e, trace) {
- Logger.root.severe('Error while refreshing field-view: $e\n$trace');
- }).whenComplete(done);
+ function.reload().whenComplete(done);
}
}
\ No newline at end of file
diff --git a/runtime/bin/vmservice/client/lib/src/elements/function_view.html b/runtime/bin/vmservice/client/lib/src/elements/function_view.html
index 9a2af8b..1f474f6 100644
--- a/runtime/bin/vmservice/client/lib/src/elements/function_view.html
+++ b/runtime/bin/vmservice/client/lib/src/elements/function_view.html
@@ -1,22 +1,22 @@
<head>
<link rel="import" href="class_ref.html">
<link rel="import" href="code_ref.html">
- <link rel="import" href="isolate_element.html">
+ <link rel="import" href="observatory_element.html">
<link rel="import" href="nav_bar.html">
</head>
-<polymer-element name="function-view" extends="isolate-element">
+<polymer-element name="function-view" extends="observatory-element">
<template>
<nav-bar>
<top-nav-menu></top-nav-menu>
- <isolate-nav-menu isolate="{{ isolate }}"></isolate-nav-menu>
+ <isolate-nav-menu isolate="{{ function.isolate }}"></isolate-nav-menu>
<template if="{{ function['owner']['type'] == '@Class' }}">
<!-- TODO(turnidge): Add library nav menu here. -->
- <class-nav-menu isolate="{{ isolate }}" cls="{{ function['owner'] }}"></class-nav-menu>
+ <class-nav-menu cls="{{ function['owner'] }}"></class-nav-menu>
</template>
<template if="{{ function['owner']['type'] == '@Library' }}">
- <library-nav-menu isolate="{{ isolate }}" library="{{ function['owner'] }}"></library-nav-menu>
+ <library-nav-menu library="{{ function['owner'] }}"></library-nav-menu>
</template>
- <nav-menu link="." anchor="{{ function['user_name'] }}" last="{{ true }}"></nav-menu>
+ <nav-menu link="." anchor="{{ function.name }}" last="{{ true }}"></nav-menu>
<nav-refresh callback="{{ refresh }}"></nav-refresh>
</nav-bar>
@@ -25,12 +25,12 @@
<div class="panel panel-warning">
<div class="panel-heading">
{{ function['user_name'] }} ({{ function['name'] }})
- <class-ref isolate="{{ isolate }}" ref="{{ function['class'] }}"></class-ref>
+ <class-ref ref="{{ function['class'] }}"></class-ref>
</div>
<div class="panel-body">
<div>
- <code-ref isolate="{{ isolate }}" ref="{{ function['code'] }}"></code-ref>
- <code-ref isolate="{{ isolate }}" ref="{{ function['unoptimized_code'] }}"></code-ref>
+ <code-ref ref="{{ function['code'] }}"></code-ref>
+ <code-ref ref="{{ function['unoptimized_code'] }}"></code-ref>
</div>
<table class="table table-hover">
<tbody>
diff --git a/runtime/bin/vmservice/client/lib/src/elements/heap_profile.dart b/runtime/bin/vmservice/client/lib/src/elements/heap_profile.dart
index b7c6063..cc9c8fe 100644
--- a/runtime/bin/vmservice/client/lib/src/elements/heap_profile.dart
+++ b/runtime/bin/vmservice/client/lib/src/elements/heap_profile.dart
@@ -5,14 +5,15 @@
library heap_profile_element;
import 'dart:html';
-import 'isolate_element.dart';
+import 'observatory_element.dart';
+import 'package:observatory/service.dart';
import 'package:logging/logging.dart';
import 'package:polymer/polymer.dart';
import 'package:observatory/app.dart';
/// Displays an Error response.
@CustomTag('heap-profile')
-class HeapProfileElement extends IsolateElement {
+class HeapProfileElement extends ObservatoryElement {
// Indexes into VM provided map.
static const ALLOCATED_BEFORE_GC = 0;
static const ALLOCATED_BEFORE_GC_SIZE = 1;
@@ -39,7 +40,7 @@
var _fullDataTable;
var _fullChart;
- @published Map profile;
+ @published ServiceMap profile;
HeapProfileElement.created() : super.created() {
_fullDataTable = new DataTable();
@@ -100,13 +101,13 @@
assert(_combinedDataTable != null);
_fullDataTable.clearRows();
_combinedDataTable.clearRows();
- for (Map cls in profile['members']) {
+ for (ServiceMap cls in profile['members']) {
if (_classHasNoAllocations(cls)) {
// If a class has no allocations, don't display it.
continue;
}
var vm_name = cls['class']['name'];
- var url = isolate.relativeLink(cls['class']['id']);
+ var url = cls['class'].hashLink;
_fullDataTable.addRow([
'<a title="$vm_name" href="$url">'
'${_fullTableColumnValue(cls, 0)}</a>',
@@ -132,10 +133,12 @@
var heap = profile['heaps']['new'];
_newPieDataTable.addRow(['Used', heap['used']]);
_newPieDataTable.addRow(['Free', heap['capacity'] - heap['used']]);
+ _newPieDataTable.addRow(['External', heap['external']]);
_oldPieDataTable.clearRows();
heap = profile['heaps']['old'];
_oldPieDataTable.addRow(['Used', heap['used']]);
_oldPieDataTable.addRow(['Free', heap['capacity'] - heap['used']]);
+ _oldPieDataTable.addRow(['External', heap['external']]);
_draw();
}
@@ -223,7 +226,10 @@
}
void refresh(var done) {
- isolate.getMap('/allocationprofile').then((Map response) {
+ if (profile == null) {
+ return;
+ }
+ profile.isolate.get('/allocationprofile').then((ServiceMap response) {
assert(response['type'] == 'AllocationProfile');
profile = response;
}).catchError((e, st) {
@@ -232,7 +238,10 @@
}
void resetAccumulator(Event e, var detail, Node target) {
- isolate.getMap('/allocationprofile/reset').then((Map response) {
+ if (profile == null) {
+ return;
+ }
+ profile.isolate.get('/allocationprofile/reset').then((ServiceMap response) {
assert(response['type'] == 'AllocationProfile');
profile = response;
}).catchError((e, st) {
@@ -273,6 +282,6 @@
}
String space = newSpace ? 'new' : 'old';
Map heap = profile['heaps'][space];
- return '${ObservatoryApplication.timeUnits(heap['time'])} secs';
+ return '${formatSeconds(heap['time'])} secs';
}
}
\ No newline at end of file
diff --git a/runtime/bin/vmservice/client/lib/src/elements/heap_profile.html b/runtime/bin/vmservice/client/lib/src/elements/heap_profile.html
index 624bd27..ada00da 100644
--- a/runtime/bin/vmservice/client/lib/src/elements/heap_profile.html
+++ b/runtime/bin/vmservice/client/lib/src/elements/heap_profile.html
@@ -1,13 +1,13 @@
<head>
<link rel="import" href="class_ref.html">
- <link rel="import" href="isolate_element.html">
+ <link rel="import" href="observatory_element.html">
<link rel="import" href="nav_bar.html">
</head>
-<polymer-element name="heap-profile" extends="isolate-element">
+<polymer-element name="heap-profile" extends="observatory-element">
<template>
<nav-bar>
<top-nav-menu></top-nav-menu>
- <isolate-nav-menu isolate="{{ isolate }}"></isolate-nav-menu>
+ <isolate-nav-menu isolate="{{ profile.isolate }}"></isolate-nav-menu>
<nav-menu link="." anchor="heap profile" last="{{ true }}"></nav-menu>
<nav-refresh callback="{{ refresh }}"></nav-refresh>
</nav-bar>
diff --git a/runtime/bin/vmservice/client/lib/src/elements/instance_ref.dart b/runtime/bin/vmservice/client/lib/src/elements/instance_ref.dart
index a256472..c97e484 100644
--- a/runtime/bin/vmservice/client/lib/src/elements/instance_ref.dart
+++ b/runtime/bin/vmservice/client/lib/src/elements/instance_ref.dart
@@ -4,38 +4,31 @@
library instance_ref_element;
-import 'package:logging/logging.dart';
import 'package:polymer/polymer.dart';
+import 'package:observatory/service.dart';
import 'service_ref.dart';
@CustomTag('instance-ref')
class InstanceRefElement extends ServiceRefElement {
InstanceRefElement.created() : super.created();
- String get name {
- if (ref == null) {
- return super.name;
- }
- return ref['preview'];
- }
-
String get hoverText {
if (ref != null) {
- if (ref['type'] == '@Null') {
- if (ref['id'] == 'objects/optimized-out') {
+ if (ref.serviceType == 'Null') {
+ if (ref.id == 'objects/optimized-out') {
return 'This object is no longer needed and has been removed by the optimizing compiler.';
- } else if (ref['id'] == 'objects/collected') {
+ } else if (ref.id == 'objects/collected') {
return 'This object has been reclaimed by the garbage collector.';
- } else if (ref['id'] == 'objects/expired') {
+ } else if (ref.id == 'objects/expired') {
return 'The handle to this object has expired. Consider refreshing the page.';
- } else if (ref['id'] == 'objects/not-initialized') {
+ } else if (ref.id == 'objects/not-initialized') {
return 'This object will be initialized once it is accessed by the program.';
- } else if (ref['id'] == 'objects/being-initialized') {
+ } else if (ref.id == 'objects/being-initialized') {
return 'This object is currently being initialized.';
}
}
}
- return '';
+ return super.hoverText;
}
// TODO(turnidge): This is here to workaround vm/dart2js differences.
@@ -44,29 +37,20 @@
}
void expandEvent(bool expand, var done) {
- print("Calling expandEvent");
+ assert(ref is ServiceMap);
if (expand) {
- isolate.getMap(objectId).then((map) {
- if (map['type'] == 'Null') {
- // The object is no longer available. For example, the
- // object id may have expired or the object may have been
- // collected by the gc.
- map['type'] = '@Null';
- ref = map;
- } else {
- ref['fields'] = map['fields'];
- ref['elements'] = map['elements'];
- ref['length'] = map['length'];
- }
- ref['fields'] = map['fields'];
- ref['elements'] = map['elements'];
- ref['length'] = map['length'];
- }).catchError((e, trace) {
- Logger.root.severe('Error while expanding instance-ref: $e\n$trace');
+ ref.reload().then((result) {
+ if (result['preview'] != null) {
+ result.name = result['preview'];
+ result.vmName = result['preview'];
+ }
+ ref = result;
+ notifyPropertyChange(#ref, 0, 1);
}).whenComplete(done);
} else {
- ref['fields'] = null;
- ref['elements'] = null;
+ ServiceMap refMap = ref;
+ refMap['fields'] = null;
+ refMap['elements'] = null;
done();
}
}
diff --git a/runtime/bin/vmservice/client/lib/src/elements/instance_ref.html b/runtime/bin/vmservice/client/lib/src/elements/instance_ref.html
index a2ed2c4..e03e1d2 100644
--- a/runtime/bin/vmservice/client/lib/src/elements/instance_ref.html
+++ b/runtime/bin/vmservice/client/lib/src/elements/instance_ref.html
@@ -8,52 +8,56 @@
<style>
.member {
vertical-align: top;
- padding: 0 0 0 1em;
+ padding: 1px 0 1px 1em;
}
</style>
<div>
- <template if="{{ isUnexpectedRef(ref['type']) }}">
- unexpected reference type <{{ ref['type'] }}>
+ <template if="{{ isUnexpected(ref.serviceType) }}">
+ unexpected reference type <{{ ref.serviceType }}>
</template>
- <template if="{{ isNullRef(ref['type']) }}">
- <div title="{{ hoverText }}">{{ name }}</div>
+ <template if="{{ isError(ref.serviceType) }}">
+ <pre>{{ ref.message }}</pre>
</template>
- <template if="{{ (isStringRef(ref['type']) ||
- isBoolRef(ref['type']) ||
- isIntRef(ref['type'])) }}">
- <a href="{{ url }}">{{ name }}</a>
+ <template if="{{ isNull(ref.serviceType) }}">
+ <div title="{{ hoverText }}">{{ ref['preview'] }}</div>
</template>
- <template if="{{ isClosureRef(ref['type']) }}">
+ <template if="{{ (isString(ref.serviceType) ||
+ isBool(ref.serviceType) ||
+ isInt(ref.serviceType)) }}">
+ <a href="{{ url }}">{{ ref['preview'] }}</a>
+ </template>
+
+ <template if="{{ isClosure(ref.serviceType) }}">
<a href="{{ url }}">
{{ ref['closureFunc']['user_name'] }}
</a>
</template>
- <template if="{{ isInstanceRef(ref['type']) }}">
+ <template if="{{ isInstance(ref.serviceType) }}">
<a href="{{ url }}"><em>{{ ref['class']['user_name'] }}</em></a>
<curly-block callback="{{ expander() }}">
<table>
<tr template repeat="{{ field in ref['fields'] }}">
<td class="member">{{ field['decl']['user_name'] }}</td>
<td class="member">
- <instance-ref isolate="{{ isolate }}" ref="{{ field['value'] }}"></instance-ref>
+ <instance-ref ref="{{ field['value'] }}"></instance-ref>
</td>
</tr>
</table>
</curly-block>
</template>
- <template if="{{ isListRef(ref['type']) }}">
+ <template if="{{ isList(ref.serviceType) }}">
<a href="{{ url }}"><em>{{ ref['class']['user_name'] }}</em> ({{ ref['length']}})</a>
<curly-block callback="{{ expander() }}">
<table>
<tr template repeat="{{ element in ref['elements'] }}">
<td class="member">[{{ element['index']}}]</td>
<td class="member">
- <instance-ref isolate="{{ isolate }}" ref="{{ element['value'] }}"></instance-ref>
+ <instance-ref ref="{{ element['value'] }}"></instance-ref>
</td>
</tr>
</table>
diff --git a/runtime/bin/vmservice/client/lib/src/elements/instance_view.dart b/runtime/bin/vmservice/client/lib/src/elements/instance_view.dart
index fb7fcd1..5a0f9ba 100644
--- a/runtime/bin/vmservice/client/lib/src/elements/instance_view.dart
+++ b/runtime/bin/vmservice/client/lib/src/elements/instance_view.dart
@@ -4,11 +4,24 @@
library instance_view_element;
-import 'isolate_element.dart';
+import 'observatory_element.dart';
+import 'package:observatory/service.dart';
import 'package:polymer/polymer.dart';
+import 'dart:async';
+
@CustomTag('instance-view')
-class InstanceViewElement extends IsolateElement {
- @published Map instance;
+class InstanceViewElement extends ObservatoryElement {
+ @published ServiceMap instance;
+
InstanceViewElement.created() : super.created();
+
+ Future<ServiceObject> eval(String text) {
+ return instance.isolate.get(
+ instance.id + "/eval?expr=${Uri.encodeComponent(text)}");
+ }
+
+ void refresh(var done) {
+ instance.reload().whenComplete(done);
+ }
}
diff --git a/runtime/bin/vmservice/client/lib/src/elements/instance_view.html b/runtime/bin/vmservice/client/lib/src/elements/instance_view.html
index 813b4ad..c39183d 100644
--- a/runtime/bin/vmservice/client/lib/src/elements/instance_view.html
+++ b/runtime/bin/vmservice/client/lib/src/elements/instance_view.html
@@ -1,55 +1,125 @@
<head>
<link rel="import" href="class_ref.html">
<link rel="import" href="error_view.html">
+ <link rel="import" href="eval_box.html">
<link rel="import" href="field_ref.html">
<link rel="import" href="instance_ref.html">
- <link rel="import" href="isolate_element.html">
+ <link rel="import" href="observatory_element.html">
<link rel="import" href="nav_bar.html">
</head>
-<polymer-element name="instance-view" extends="isolate-element">
+<polymer-element name="instance-view" extends="observatory-element">
<template>
<nav-bar>
<top-nav-menu></top-nav-menu>
- <isolate-nav-menu isolate="{{ isolate }}"></isolate-nav-menu>
+ <isolate-nav-menu isolate="{{ instance.isolate }}"></isolate-nav-menu>
<!-- TODO(turnidge): Add library nav menu here. -->
- <class-nav-menu isolate="{{ isolate }}" cls="{{ instance['class'] }}"></class-nav-menu>
+ <class-nav-menu cls="{{ instance['class'] }}"></class-nav-menu>
<nav-menu link="." anchor="instance" last="{{ true }}"></nav-menu>
- <!-- TODO(turnidge): Add nav refresh here. -->
+ <nav-refresh callback="{{ refresh }}"></nav-refresh>
</nav-bar>
- <div class="row">
- <div class="col-md-8 col-md-offset-2">
- <div class="panel panel-warning">
- <div class="panel-heading">
- Instance of
- <class-ref isolate="{{ isolate }}" ref="{{ instance['class'] }}"></class-ref>
- </div>
- <div class="panel-body">
- <template if="{{ instance['error'] == null }}">
- <table class="table table-hover">
- <tbody>
- <tr>
- <td>Preview</td><td>{{ instance['preview'] }}</td>
- </tr>
- </tbody>
- </table>
- <blockquote><strong>Fields</strong></blockquote>
- <table class="table table-hover">
- <tbody>
- <tr template repeat="{{ field in instance['fields'] }}">
- <td><field-ref isolate="{{ isolate }}" ref="{{ field['decl'] }}"></field-ref></td>
- <td><instance-ref isolate="{{ isolate }}" ref="{{ field['value'] }}"></instance-ref></td>
- </tr>
- </tbody>
- </table>
- </template>
- <template if="{{ instance['error'] != null }}">
- <error-view error_obj="{{ instance['error'] }}"></error-view>
- </template>
- </div>
+ <style>
+ .content {
+ padding-left: 10%;
+ font: 400 14px 'Montserrat', sans-serif;
+ }
+ h1 {
+ font: 400 18px 'Montserrat', sans-serif;
+ }
+ .member {
+ vertical-align: top;
+ padding: 3px 0 3px 1em;
+ font: 400 14px 'Montserrat', sans-serif;
+ }
+ .memberBold {
+ vertical-align: top;
+ padding: 3px 0 3px 1em;
+ font: 400 14px 'Montserrat', sans-serif;
+ }
+ </style>
+
+ <template if="{{ instance['error'] != null }}">
+ <error-view error_obj="{{ instance['error'] }}"></error-view>
+ </template>
+
+ <template if="{{ instance['error'] == null }}">
+ <div class="content">
+ <!-- TODO(turnidge): Handle null instances. -->
+ <h1>instance of {{ instance['class']['user_name'] }}</h1>
+ <table>
+ <tr>
+ <td class="memberBold">class</td>
+ <td class="member">
+ <class-ref ref="{{ instance['class'] }}">
+ </class-ref>
+ </td>
+ </tr>
+ <tr template if="{{ instance['preview'] != null }}">
+ <td class="memberBold">preview</td>
+ <td class="member">{{ instance['preview'] }}</td>
+ </tr>
+ <tr>
+ <td class="memberBold">size</td>
+ <td class="member">{{ instance['size'] | formatSize }}</td>
+ </tr>
+ </table>
</div>
- </div>
- </div>
+
+ <hr>
+
+ <div class="content">
+ <template if="{{ instance['fields'].isNotEmpty }}">
+ fields ({{ instance['fields'].length }})
+ <curly-block>
+ <table>
+ <tr template repeat="{{ field in instance['fields'] }}">
+ <td class="member">
+ <field-ref ref="{{ field['decl'] }}"></field-ref>
+ </td>
+ <td class="member">
+ <instance-ref ref="{{ field['value'] }}"></instance-ref>
+ </td>
+ </tr>
+ </table>
+ </curly-block>
+ </template>
+
+ <template if="{{ instance['nativeFields'].isNotEmpty }}">
+ native fields ({{ instance['nativeFields'].length }})
+ <curly-block>
+ <table>
+ <tr template repeat="{{ field in instance['nativeFields'] }}">
+ <td class="member">[{{ field['index']}}]</td>
+ <td class="member">[{{ field['value']}}]</td>
+ </tr>
+ </table>
+ </curly-block>
+ </template>
+
+ <template if="{{ instance['elements'].isNotEmpty }}">
+ elements ({{ instance['elements'].length }})
+ <curly-block>
+ <table>
+ <tr template repeat="{{ element in instance['elements'] }}">
+ <td class="member">[{{ element['index']}}]</td>
+ <td class="member">
+ <instance-ref ref="{{ element['value'] }}">
+ </instance-ref>
+ </td>
+ </tr>
+ </table>
+ </curly-block>
+ </template>
+ </div>
+
+ <hr>
+
+ <div class="content">
+ <eval-box callback="{{ eval }}"></eval-box>
+ </div>
+ <br><br><br><br>
+ <br><br><br><br>
+ </template>
</template>
<script type="application/dart" src="instance_view.dart"></script>
</polymer-element>
diff --git a/runtime/bin/vmservice/client/lib/src/elements/isolate_element.dart b/runtime/bin/vmservice/client/lib/src/elements/isolate_element.dart
deleted file mode 100644
index 8b906e5..0000000
--- a/runtime/bin/vmservice/client/lib/src/elements/isolate_element.dart
+++ /dev/null
@@ -1,17 +0,0 @@
-// Copyright (c) 2014, 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 isolate_element;
-
-import 'package:observatory/app.dart';
-import 'package:polymer/polymer.dart';
-import 'observatory_element.dart';
-
-/// Base class for all custom elements which reference an isolate.
-/// Holds an observable [Isolate].
-@CustomTag('isolate-element')
-class IsolateElement extends ObservatoryElement {
- IsolateElement.created() : super.created();
- @published Isolate isolate;
-}
diff --git a/runtime/bin/vmservice/client/lib/src/elements/isolate_element.html b/runtime/bin/vmservice/client/lib/src/elements/isolate_element.html
deleted file mode 100644
index 696ccf1..0000000
--- a/runtime/bin/vmservice/client/lib/src/elements/isolate_element.html
+++ /dev/null
@@ -1,6 +0,0 @@
-<head>
- <link rel="import" href="observatory_element.html">
-</head>
-<polymer-element name="isolate-element" extends="observatory-element">
- <script type="application/dart" src="isolate_element.dart"></script>
-</polymer-element>
diff --git a/runtime/bin/vmservice/client/lib/src/elements/isolate_list.dart b/runtime/bin/vmservice/client/lib/src/elements/isolate_list.dart
index 5b6ffea..95691b54 100644
--- a/runtime/bin/vmservice/client/lib/src/elements/isolate_list.dart
+++ b/runtime/bin/vmservice/client/lib/src/elements/isolate_list.dart
@@ -4,20 +4,17 @@
library isolate_list_element;
-import 'vm_element.dart';
-import 'dart:async';
import 'package:polymer/polymer.dart';
+import 'observatory_element.dart';
+import 'package:observatory/service.dart';
/// Displays an IsolateList response.
@CustomTag('isolate-list')
-class IsolateListElement extends VMElement {
+class IsolateListElement extends ObservatoryElement {
IsolateListElement.created() : super.created();
+ @published IsolateList isolates;
void refresh(var done) {
- var futures = [];
- vm.isolates.forEach((id, isolate) {
- futures.add(isolate.refresh());
- });
- Future.wait(futures).then((_) => done());
+ isolates.reload().whenComplete(done);
}
}
\ No newline at end of file
diff --git a/runtime/bin/vmservice/client/lib/src/elements/isolate_list.html b/runtime/bin/vmservice/client/lib/src/elements/isolate_list.html
index 0a817d1..5c03caa 100644
--- a/runtime/bin/vmservice/client/lib/src/elements/isolate_list.html
+++ b/runtime/bin/vmservice/client/lib/src/elements/isolate_list.html
@@ -1,9 +1,9 @@
<head>
<link rel="import" href="isolate_summary.html">
<link rel="import" href="nav_bar.html">
- <link rel="import" href="vm_element.html">
+ <link rel="import" href="observatory_element.html">
</head>
-<polymer-element name="isolate-list" extends="vm-element">
+<polymer-element name="isolate-list" extends="observatory-element">
<template>
<nav-bar>
<top-nav-menu last="{{ true }}"></top-nav-menu>
@@ -11,7 +11,7 @@
<nav-refresh callback="{{ refresh } }}"></nav-refresh>
</nav-bar>
<ul class="list-group">
- <template repeat="{{ isolate in vm.isolates.values }}">
+ <template repeat="{{ isolate in isolates.isolates.values }}">
<li class="list-group-item">
<isolate-summary isolate="{{ isolate }}"></isolate-summary>
</li>
diff --git a/runtime/bin/vmservice/client/lib/src/elements/isolate_profile.dart b/runtime/bin/vmservice/client/lib/src/elements/isolate_profile.dart
index 8a2961b..39092b3 100644
--- a/runtime/bin/vmservice/client/lib/src/elements/isolate_profile.dart
+++ b/runtime/bin/vmservice/client/lib/src/elements/isolate_profile.dart
@@ -5,25 +5,28 @@
library isolate_profile_element;
import 'dart:html';
-import 'isolate_element.dart';
-import 'package:logging/logging.dart';
+import 'observatory_element.dart';
+import 'package:observatory/service.dart';
import 'package:observatory/app.dart';
import 'package:polymer/polymer.dart';
class ProfileCallerTreeRow extends TableTreeRow {
- final Isolate isolate;
- @observable final Code code;
+ final ServiceMap profile;
+ @reflectable final Code code;
static String formatPercent(num a, num total) {
var percent = 100.0 * (a / total);
return '${percent.toStringAsFixed(2)}%';
}
- ProfileCallerTreeRow(this.isolate, this.code, ProfileCallerTreeRow parent) :
+ ProfileCallerTreeRow(this.profile, this.code, ProfileCallerTreeRow parent) :
super(parent) {
+ assert(profile != null);
+ assert(code != null);
+ var totalSamples = profile['samples'];
// When the row is created, fill out the columns.
columns.add(
- formatPercent(code.exclusiveTicks, isolate.profile.totalSamples));
+ formatPercent(code.exclusiveTicks, totalSamples));
if (parent == null) {
// Fill with dummy data.
columns.add('');
@@ -32,8 +35,6 @@
var totalParentCalls = parent.code.sumCallersCount();
columns.add(formatPercent(totalAttributedCalls, totalParentCalls));
}
- columns.add(
- formatPercent(code.inclusiveTicks, isolate.profile.totalSamples));
}
void onShow() {
@@ -44,7 +45,7 @@
// Create child rows on demand.
code.callers.forEach((CodeCallCount codeCaller) {
var row =
- new ProfileCallerTreeRow(isolate, codeCaller.code, this);
+ new ProfileCallerTreeRow(profile, codeCaller.code, this);
children.add(row);
});
}
@@ -55,81 +56,73 @@
/// Displays an IsolateProfile
@CustomTag('isolate-profile')
-class IsolateProfileElement extends IsolateElement {
+class IsolateProfileElement extends ObservatoryElement {
IsolateProfileElement.created() : super.created();
+ @published ServiceMap profile;
+ @reflectable final topExclusiveCodes = new ObservableList<Code>();
@observable int methodCountSelected = 0;
- final List methodCounts = [10, 20, 50];
- @observable List topExclusiveCodes = toObservable([]);
- final _id = '#tableTree';
- TableTree tree;
- @published Map profile;
@observable String sampleCount = '';
@observable String refreshTime = '';
+ final List methodCounts = [10, 20, 50];
+ final _id = '#tableTree';
+ TableTree tree;
+
void profileChanged(oldValue) {
if (profile == null) {
return;
}
- print('profile changed');
- var samples = profile['samples'];
- _loadProfileData(isolate, samples, profile);
- _refresh(isolate);
+ var totalSamples = profile['samples'];
+ var now = new DateTime.now();
+ sampleCount = totalSamples.toString();
+ refreshTime = now.toString();
+ profile.isolate.processProfile(profile);
+ _update();
}
void enteredView() {
- tree = new TableTree(['Method', 'Exclusive', 'Caller', 'Inclusive']);
- _refresh(isolate);
+ tree = new TableTree(['Method', 'Exclusive', 'Caller']);
+ _update();
}
methodCountSelectedChanged(oldValue) {
- _refresh(isolate);
+ _update();
}
void refresh(var done) {
- isolate.getMap('profile').then((Map profile) {
- assert(profile['type'] == 'Profile');
- var samples = profile['samples'];
- Logger.root.info('Profile contains ${samples} samples.');
- _loadProfileData(isolate, samples, profile);
- }).catchError((e, st) {
- Logger.root.warning('Error refreshing profile', e, st);
+ profile.isolate.get('profile').then((ServiceMap m) {
+ // Assert we got back the a profile.
+ assert(m.serviceType == 'Profile');
+ profile = m;
}).whenComplete(done);
}
- void _loadProfileData(Isolate isolate, int totalSamples, Map response) {
- sampleCount = totalSamples.toString();
- var now = new DateTime.now();
- refreshTime = now.toString();
- isolate.profile = new Profile.fromMap(isolate, response);
- _refresh(isolate);
+ void _update() {
+ if (profile == null) {
+ return;
+ }
+ _refreshTopMethods();
+ _rebuildTree();
}
- void _refresh(Isolate isolate) {
- _refreshTopMethods(isolate);
- _refreshTree(isolate);
+ void _refreshTopMethods() {
+ assert(profile != null);
+ var count = methodCounts[methodCountSelected];
+ topExclusiveCodes.clear();
+ topExclusiveCodes.addAll(profile.isolate.codes.topExclusive(count));
}
- void _refreshTree(Isolate isolate) {
+ void _rebuildTree() {
+ assert(profile != null);
var rootChildren = [];
for (var code in topExclusiveCodes) {
- var row = new ProfileCallerTreeRow(isolate, code, null);
+ var row = new ProfileCallerTreeRow(profile, code, null);
rootChildren.add(row);
}
tree.initialize(rootChildren);
notifyPropertyChange(#tree, null, tree);
}
-
- void _refreshTopMethods(Isolate isolate) {
- topExclusiveCodes.clear();
- if ((isolate == null) || (isolate.profile == null)) {
- return;
- }
- var count = methodCounts[methodCountSelected];
- var topExclusive = isolate.profile.topExclusive(count);
- topExclusiveCodes.addAll(topExclusive);
- }
-
@observable String padding(TableTreeRow row) {
return 'padding-left: ${row.depth * 16}px;';
}
@@ -147,4 +140,5 @@
tree.toggle(row.rowIndex - 1);
}
}
+
}
diff --git a/runtime/bin/vmservice/client/lib/src/elements/isolate_profile.html b/runtime/bin/vmservice/client/lib/src/elements/isolate_profile.html
index 7d2fe1a..f8d14aa 100644
--- a/runtime/bin/vmservice/client/lib/src/elements/isolate_profile.html
+++ b/runtime/bin/vmservice/client/lib/src/elements/isolate_profile.html
@@ -3,11 +3,11 @@
<link rel="import" href="nav_bar.html">
<link rel="import" href="observatory_element.html">
</head>
-<polymer-element name="isolate-profile" extends="isolate-element">
+<polymer-element name="isolate-profile" extends="observatory-element">
<template>
<nav-bar>
<top-nav-menu></top-nav-menu>
- <isolate-nav-menu isolate="{{ isolate }}"></isolate-nav-menu>
+ <isolate-nav-menu isolate="{{ profile.isolate }}"></isolate-nav-menu>
<nav-menu link="." anchor="cpu profile" last="{{ true }}"></nav-menu>
<nav-refresh callback="{{ refresh }}"></nav-refresh>
</nav-bar>
@@ -31,7 +31,6 @@
<th>Method</th>
<th>Exclusive</th>
<th>Caller</th>
- <th>Inclusive</th>
</tr>
</thead>
<tbody>
@@ -39,11 +38,10 @@
<td on-click="{{toggleExpanded}}"
class="{{ coloring(row) }}"
style="{{ padding(row) }}">
- <code-ref isolate="{{ isolate }}" ref="{{ row.code.codeRef }}"></code-ref>
+ <code-ref ref="{{ row.code }}"></code-ref>
</td>
<td class="{{ coloring(row) }}">{{row.columns[0]}}</td>
<td class="{{ coloring(row) }}">{{row.columns[1]}}</td>
- <td class="{{ coloring(row) }}">{{row.columns[2]}}</td>
</tr>
</tbody>
</table>
diff --git a/runtime/bin/vmservice/client/lib/src/elements/isolate_summary.dart b/runtime/bin/vmservice/client/lib/src/elements/isolate_summary.dart
index 3085702..56baabf 100644
--- a/runtime/bin/vmservice/client/lib/src/elements/isolate_summary.dart
+++ b/runtime/bin/vmservice/client/lib/src/elements/isolate_summary.dart
@@ -4,10 +4,12 @@
library isolate_summary_element;
-import 'isolate_element.dart';
+import 'package:observatory/service.dart';
import 'package:polymer/polymer.dart';
+import 'observatory_element.dart';
@CustomTag('isolate-summary')
-class IsolateSummaryElement extends IsolateElement {
+class IsolateSummaryElement extends ObservatoryElement {
IsolateSummaryElement.created() : super.created();
+ @published Isolate isolate;
}
diff --git a/runtime/bin/vmservice/client/lib/src/elements/isolate_summary.html b/runtime/bin/vmservice/client/lib/src/elements/isolate_summary.html
index 62b6c83..a5dbe18 100644
--- a/runtime/bin/vmservice/client/lib/src/elements/isolate_summary.html
+++ b/runtime/bin/vmservice/client/lib/src/elements/isolate_summary.html
@@ -3,7 +3,7 @@
<link rel="import" href="observatory_element.html">
<link rel="import" href="script_ref.html">
</head>
-<polymer-element name="isolate-summary" extends="isolate-element">
+<polymer-element name="isolate-summary" extends="observatory-element">
<template>
<div class="row">
<div class="col-md-1">
@@ -28,9 +28,9 @@
<div class="row">
<small>
- (<a href="{{ isolate.hashLink(isolate.rootLib) }}">library</a>)
- (<a href="{{ isolate.hashLink('debug/breakpoints') }}">breakpoints</a>)
- (<a href="{{ isolate.hashLink('profile') }}">profile</a>)
+ (<a href="{{ isolate.rootLib.hashLink }}">library</a>)
+ (<a href="{{ isolate.relativeHashLink('debug/breakpoints') }}">breakpoints</a>)
+ (<a href="{{ isolate.relativeHashLink('profile') }}">profile</a>)
</small>
</div>
</div>
@@ -63,7 +63,7 @@
</div>
</div>
<div class="col-md-2">
- <a href="{{ isolate.hashLink('allocationprofile') }}">
+ <a href="{{ isolate.relativeHashLink('allocationprofile') }}">
{{ isolate.newHeapUsed | formatSize }}/{{ isolate.oldHeapUsed | formatSize }}
</a>
</div>
@@ -74,7 +74,7 @@
<template if="{{ isolate.topFrame != null }}">
run
</template>
- ( <a href="{{ isolate.hashLink('stacktrace') }}">stack trace</a> )
+ ( <a href="{{ isolate.relativeHashLink('stacktrace') }}">stack trace</a> )
</div>
</div>
<div class="row">
@@ -82,10 +82,8 @@
</div>
<div class="col-md-6">
<template if="{{ isolate.topFrame != null }}">
- <function-ref isolate="{{ isolate }}"
- ref="{{ isolate.topFrame['function'] }}"></function-ref>
- (<script-ref isolate="{{ isolate }}"
- ref="{{ isolate.topFrame['script'] }}"
+ <function-ref ref="{{ isolate.topFrame['function'] }}"></function-ref>
+ (<script-ref ref="{{ isolate.topFrame['script'] }}"
line="{{ isolate.topFrame['line'] }}"></script-ref>)
<br>
<pre>{{ isolate.topFrame['line'] }} {{ isolate.topFrame['lineString'] }}</pre>
diff --git a/runtime/bin/vmservice/client/lib/src/elements/library_view.dart b/runtime/bin/vmservice/client/lib/src/elements/library_view.dart
index 08e23d3..398c508 100644
--- a/runtime/bin/vmservice/client/lib/src/elements/library_view.dart
+++ b/runtime/bin/vmservice/client/lib/src/elements/library_view.dart
@@ -4,21 +4,18 @@
library library_view_element;
-import 'isolate_element.dart';
-import 'package:logging/logging.dart';
+import 'observatory_element.dart';
+import 'package:observatory/service.dart';
+
import 'package:polymer/polymer.dart';
@CustomTag('library-view')
-class LibraryViewElement extends IsolateElement {
- @published Map library = toObservable({});
+class LibraryViewElement extends ObservatoryElement {
+ @published ServiceMap library;
LibraryViewElement.created() : super.created();
void refresh(var done) {
- isolate.getMap(library['id']).then((map) {
- library = map;
- }).catchError((e, trace) {
- Logger.root.severe('Error while refreshing library-view: $e\n$trace');
- }).whenComplete(done);
+ library.reload().whenComplete(done);
}
}
diff --git a/runtime/bin/vmservice/client/lib/src/elements/library_view.html b/runtime/bin/vmservice/client/lib/src/elements/library_view.html
index 2a195b0..b54eb21 100644
--- a/runtime/bin/vmservice/client/lib/src/elements/library_view.html
+++ b/runtime/bin/vmservice/client/lib/src/elements/library_view.html
@@ -3,17 +3,17 @@
<link rel="import" href="field_ref.html">
<link rel="import" href="function_ref.html">
<link rel="import" href="instance_ref.html">
- <link rel="import" href="isolate_element.html">
+ <link rel="import" href="observatory_element.html">
<link rel="import" href="library_ref.html">
<link rel="import" href="nav_bar.html">
<link rel="import" href="script_ref.html">
</head>
-<polymer-element name="library-view" extends="isolate-element">
+<polymer-element name="library-view" extends="observatory-element">
<template>
<nav-bar>
<top-nav-menu></top-nav-menu>
- <isolate-nav-menu isolate="{{ isolate }}"></isolate-nav-menu>
- <library-nav-menu isolate="{{ isolate }}" library="{{ library }}" last="{{ true }}"></library-nav-menu>
+ <isolate-nav-menu isolate="{{ library.isolate }}"></isolate-nav-menu>
+ <library-nav-menu library="{{ library }}" last="{{ true }}"></library-nav-menu>
<nav-refresh callback="{{ refresh }}"></nav-refresh>
</nav-bar>
@@ -22,10 +22,10 @@
<tbody>
<tr template repeat="{{ script in library['scripts']}}">
<td>
- {{ script['kind'] }}
+ {{ script.kind }}
</td>
<td>
- <script-ref isolate="{{ isolate }}" ref="{{ script }}"></script-ref>
+ <script-ref ref="{{ script }}"></script-ref>
</td>
</tr>
</tbody>
@@ -35,7 +35,7 @@
<tbody>
<tr template repeat="{{ lib in library['libraries'] }}">
<td>
- <library-ref isolate="{{ isolate }}" ref="{{ lib }}"></library-ref>
+ <library-ref ref="{{ lib }}"></library-ref>
</td>
</tr>
</tbody>
@@ -44,8 +44,8 @@
<table class="table table-hover">
<tbody>
<tr template repeat="{{ variable in library['variables'] }}">
- <td><field-ref isolate="{{ isolate }}" ref="{{ variable }}"></field-ref></td>
- <td><instance-ref isolate="{{ isolate }}" ref="{{ variable['value'] }}"></instance-ref></td>
+ <td><field-ref ref="{{ variable }}"></field-ref></td>
+ <td><instance-ref ref="{{ variable['value'] }}"></instance-ref></td>
</tr>
</tbody>
</table>
@@ -54,7 +54,7 @@
<tbody>
<tr template repeat="{{ func in library['functions'] }}">
<td>
- <function-ref isolate="{{ isolate }}" ref="{{ func }}"></function-ref>
+ <function-ref ref="{{ func }}"></function-ref>
</td>
</tr>
</tbody>
@@ -70,10 +70,10 @@
<tbody>
<tr template repeat="{{ cls in library['classes'] }}">
<td>
- <class-ref isolate="{{ isolate }}" ref="{{ cls }}"></class-ref>
+ <class-ref ref="{{ cls }}"></class-ref>
</td>
<td>
- <class-ref isolate="{{ isolate }}" ref="{{ cls }}" internal></class-ref>
+ <class-ref ref="{{ cls }}" internal></class-ref>
</td>
</tr>
</tbody>
diff --git a/runtime/bin/vmservice/client/lib/src/elements/message_viewer.dart b/runtime/bin/vmservice/client/lib/src/elements/message_viewer.dart
deleted file mode 100644
index 9979d7a..0000000
--- a/runtime/bin/vmservice/client/lib/src/elements/message_viewer.dart
+++ /dev/null
@@ -1,36 +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.
-
-library message_viewer_element;
-
-import 'package:logging/logging.dart';
-import 'package:observatory/app.dart';
-import 'package:polymer/polymer.dart';
-import 'observatory_element.dart';
-
-@CustomTag('message-viewer')
-class MessageViewerElement extends ObservatoryElement {
- Map _message;
- @published Map get message => _message;
- @published ObservatoryApplication app;
-
- @published set message(Map m) {
- if (m == null) {
- Logger.root.info('Viewing null message.');
- return;
- }
- Logger.root.info('Viewing message of type \'${m['type']}\'');
- _message = m;
- notifyPropertyChange(#messageType, "", messageType);
- }
-
- MessageViewerElement.created() : super.created();
-
- String get messageType {
- if (message == null || message['type'] == null) {
- return 'Error';
- }
- return message['type'];
- }
-}
diff --git a/runtime/bin/vmservice/client/lib/src/elements/message_viewer.html b/runtime/bin/vmservice/client/lib/src/elements/message_viewer.html
deleted file mode 100644
index a00b2ff..0000000
--- a/runtime/bin/vmservice/client/lib/src/elements/message_viewer.html
+++ /dev/null
@@ -1,85 +0,0 @@
-<head>
- <link rel="import" href="breakpoint_list.html">
- <link rel="import" href="class_view.html">
- <link rel="import" href="code_view.html">
- <link rel="import" href="error_view.html">
- <link rel="import" href="field_view.html">
- <link rel="import" href="function_view.html">
- <link rel="import" href="heap_profile.html">
- <link rel="import" href="instance_view.html">
- <link rel="import" href="isolate_list.html">
- <link rel="import" href="isolate_profile.html">
- <link rel="import" href="library_view.html">
- <link rel="import" href="observatory_element.html">
- <link rel="import" href="script_view.html">
- <link rel="import" href="stack_trace.html">
-</head>
-<polymer-element name="message-viewer" extends="observatory-element">
- <!--
- This is a big switch statement which instantiates the custom element
- designated to display the message type.
- -->
- <template>
- <!-- If the message type is an IsolateList -->
- <template if="{{ messageType == 'IsolateList' }}">
- <isolate-list vm="{{ app.vm }}"></isolate-list>
- </template>
- <!-- If the message type is a StackTrace -->
- <template if="{{ messageType == 'StackTrace' }}">
- <stack-trace isolate="{{ app.isolate }}" trace="{{ message }}"></stack-trace>
- </template>
- <template if="{{ messageType == 'BreakpointList' }}">
- <breakpoint-list isolate="{{ app.isolate }}" msg="{{ message }}"></breakpoint-list>
- </template>
- <template if="{{ messageType == 'Error' }}">
- <error-view isolate="{{ app.isolate }}" error="{{ message }}"></error-view>
- </template>
- <template if="{{ messageType == 'Library' }}">
- <library-view isolate="{{ app.isolate }}" library="{{ message }}"></library-view>
- </template>
- <template if="{{ messageType == 'Class' }}">
- <class-view isolate="{{ app.isolate }}" cls="{{ message }}"></class-view>
- </template>
- <template if="{{ messageType == 'Field' }}">
- <field-view isolate="{{ app.isolate }}" field="{{ message }}"></field-view>
- </template>
- <template if="{{ messageType == 'Closure' }}">
- <instance-view isolate="{{ app.isolate }}" instance="{{ message }}"></instance-view>
- </template>
- <template if="{{ messageType == 'Instance' }}">
- <instance-view isolate="{{ app.isolate }}" instance="{{ message }}"></instance-view>
- </template>
- <template if="{{ messageType == 'Array' }}">
- <instance-view isolate="{{ app.isolate }}" instance="{{ message }}"></instance-view>
- </template>
- <template if="{{ messageType == 'GrowableObjectArray' }}">
- <instance-view isolate="{{ app.isolate }}" instance="{{ message }}"></instance-view>
- </template>
- <template if="{{ messageType == 'String' }}">
- <instance-view isolate="{{ app.isolate }}" instance="{{ message }}"></instance-view>
- </template>
- <template if="{{ messageType == 'Bool' }}">
- <instance-view isolate="{{ app.isolate }}" instance="{{ message }}"></instance-view>
- </template>
- <template if="{{ messageType == 'Smi' }}">
- <instance-view isolate="{{ app.isolate }}" instance="{{ message }}"></instance-view>
- </template>
- <template if="{{ messageType == 'Function' }}">
- <function-view isolate="{{ app.isolate }}" function="{{ message }}"></function-view>
- </template>
- <template if="{{ messageType == 'Code' }}">
- <code-view isolate="{{ app.isolate }}" code="{{ message['code'] }}"></code-view>
- </template>
- <template if="{{ messageType == 'Script' }}">
- <script-view isolate="{{ app.isolate }}" script="{{ message['script'] }}"></script-view>
- </template>
- <template if="{{ messageType == 'AllocationProfile' }}">
- <heap-profile isolate="{{ app.isolate }}" profile="{{ message }}"></heap-profile>
- </template>
- <template if="{{ messageType == 'Profile' }}">
- <isolate-profile isolate="{{ app.isolate }}" profile="{{ message }}"></isolate-profile>
- </template>
- <!-- Add new views and message types in the future here. -->
- </template>
- <script type="application/dart" src="message_viewer.dart"></script>
-</polymer-element>
diff --git a/runtime/bin/vmservice/client/lib/src/elements/nav_bar.dart b/runtime/bin/vmservice/client/lib/src/elements/nav_bar.dart
index 96cb731..ad58d58 100644
--- a/runtime/bin/vmservice/client/lib/src/elements/nav_bar.dart
+++ b/runtime/bin/vmservice/client/lib/src/elements/nav_bar.dart
@@ -5,9 +5,8 @@
library nav_bar_element;
import 'dart:html';
-import 'isolate_element.dart';
import 'observatory_element.dart';
-import 'package:observatory/app.dart';
+import 'package:observatory/service.dart';
import 'package:polymer/polymer.dart';
@@ -37,6 +36,7 @@
class NavRefreshElement extends ObservatoryElement {
@published var callback;
@published bool active = false;
+ @published String label = 'Refresh';
NavRefreshElement.created() : super.created();
@@ -63,23 +63,24 @@
}
@CustomTag('isolate-nav-menu')
-class IsolateNavMenuElement extends IsolateElement {
+class IsolateNavMenuElement extends ObservatoryElement {
@published bool last = false;
+ @published Isolate isolate;
IsolateNavMenuElement.created() : super.created();
}
@CustomTag('library-nav-menu')
-class LibraryNavMenuElement extends IsolateElement {
- @published Map library;
+class LibraryNavMenuElement extends ObservatoryElement {
+ @published ServiceMap library;
@published bool last = false;
LibraryNavMenuElement.created() : super.created();
}
@CustomTag('class-nav-menu')
-class ClassNavMenuElement extends IsolateElement {
- @published Map cls;
+class ClassNavMenuElement extends ObservatoryElement {
+ @published ServiceMap cls;
@published bool last = false;
ClassNavMenuElement.created() : super.created();
diff --git a/runtime/bin/vmservice/client/lib/src/elements/nav_bar.html b/runtime/bin/vmservice/client/lib/src/elements/nav_bar.html
index 4d8a362..dbd2006 100644
--- a/runtime/bin/vmservice/client/lib/src/elements/nav_bar.html
+++ b/runtime/bin/vmservice/client/lib/src/elements/nav_bar.html
@@ -1,6 +1,5 @@
<head>
<link rel="import" href="observatory_element.html">
- <link rel="import" href="isolate_element.html">
</head>
<polymer-element name="nav-bar" extends="observatory-element">
@@ -141,10 +140,10 @@
</style>
<li>
<template if="{{ active }}">
- <button class="active" on-click="{{ buttonClick }}">Refresh</button>
+ <button class="active" on-click="{{ buttonClick }}">{{ label }}</button>
</template>
<template if="{{ !active }}">
- <button class="idle" on-click="{{ buttonClick }}">Refresh</button>
+ <button class="idle" on-click="{{ buttonClick }}">{{ label }}</button>
</template>
</li>
</template>
@@ -158,35 +157,35 @@
</template>
</polymer-element>
-<polymer-element name="isolate-nav-menu" extends="isolate-element">
+<polymer-element name="isolate-nav-menu" extends="observatory-element">
<template>
<nav-menu link="#" anchor="{{ isolate.name }}" last="{{ last }}">
- <nav-menu-item link="{{ isolate.hashLink('stacktrace') }}"
+ <nav-menu-item link="{{ isolate.relativeHashLink('stacktrace') }}"
anchor="stack trace"></nav-menu-item>
- <nav-menu-item link="{{ isolate.hashLink('profile') }}"
+ <nav-menu-item link="{{ isolate.relativeHashLink('profile') }}"
anchor="cpu profile"></nav-menu-item>
- <nav-menu-item link="{{ isolate.hashLink('allocationprofile') }}"
+ <nav-menu-item link="{{ isolate.relativeHashLink('allocationprofile') }}"
anchor="heap profile"></nav-menu-item>
- <nav-menu-item link="{{ isolate.hashLink('debug/breakpoints') }}"
+ <nav-menu-item link="{{ isolate.relativeHashLink('debug/breakpoints') }}"
anchor="breakpoints"></nav-menu-item>
<content></content>
</nav-menu>
</template>
</polymer-element>
-<polymer-element name="library-nav-menu" extends="isolate-element">
+<polymer-element name="library-nav-menu" extends="observatory-element">
<template>
- <nav-menu link="{{ isolate.hashLink(library['id']) }}"
- anchor="{{ library['name'] }}" last="{{ last }}">
+ <nav-menu link="{{ library.hashLink }}"
+ anchor="{{ library.name }}" last="{{ last }}">
<content></content>
</nav-menu>
</template>
</polymer-element>
-<polymer-element name="class-nav-menu" extends="isolate-element">
+<polymer-element name="class-nav-menu" extends="observatory-element">
<template>
- <nav-menu link="{{ isolate.hashLink(cls['id']) }}"
- anchor="{{ cls['user_name'] }}" last="{{ last }}">
+ <nav-menu link="{{ cls.hashLink }}"
+ anchor="{{ cls.name }}" last="{{ last }}">
<content></content>
</nav-menu>
</template>
diff --git a/runtime/bin/vmservice/client/lib/src/elements/observatory_element.dart b/runtime/bin/vmservice/client/lib/src/elements/observatory_element.dart
index a5537a0..76c2347 100644
--- a/runtime/bin/vmservice/client/lib/src/elements/observatory_element.dart
+++ b/runtime/bin/vmservice/client/lib/src/elements/observatory_element.dart
@@ -64,6 +64,11 @@
}
+ String formatSeconds(double x) {
+ return x.toStringAsFixed(2);
+ }
+
+
String formatSize(int bytes) {
const int bytesPerKB = 1024;
const int bytesPerMB = 1024 * bytesPerKB;
@@ -89,47 +94,52 @@
return "${shortFile}:${frame['line']}";
}
- bool isNullRef(String type) {
- return type == '@Null';
+ bool isNull(String type) {
+ return type == 'Null';
+ }
+
+ bool isError(String type) {
+ return type == 'Error';
}
- bool isIntRef(String type) {
- return (type == '@Smi' ||
- type == '@Mint' ||
- type == '@Bigint');
+ bool isInt(String type) {
+ return (type == 'Smi' ||
+ type == 'Mint' ||
+ type == 'Bigint');
}
- bool isBoolRef(String type) {
- return type == '@Bool';
+ bool isBool(String type) {
+ return type == 'Bool';
}
- bool isStringRef(String type) {
- return type == '@String';
+ bool isString(String type) {
+ return type == 'String';
}
- bool isInstanceRef(String type) {
- return type == '@Instance';
+ bool isInstance(String type) {
+ return type == 'Instance';
}
- bool isClosureRef(String type) {
- return type == '@Closure';
+ bool isClosure(String type) {
+ return type == 'Closure';
}
- bool isListRef(String type) {
- return (type == '@GrowableObjectArray' ||
- type == '@Array');
+ bool isList(String type) {
+ return (type == 'GrowableObjectArray' ||
+ type == 'Array');
}
- bool isUnexpectedRef(String type) {
- return (!['@Null',
- '@Smi',
- '@Mint',
- '@Biginit',
- '@Bool',
- '@String',
- '@Closure',
- '@Instance',
- '@GrowableObjectArray',
- '@Array'].contains(type));
+ bool isUnexpected(String type) {
+ return (!['Null',
+ 'Smi',
+ 'Mint',
+ 'Biginit',
+ 'Bool',
+ 'String',
+ 'Closure',
+ 'Instance',
+ 'GrowableObjectArray',
+ 'Array',
+ 'Error'].contains(type));
}
}
diff --git a/runtime/bin/vmservice/client/lib/src/elements/response_viewer.html b/runtime/bin/vmservice/client/lib/src/elements/response_viewer.html
index 18185f1..230120a 100644
--- a/runtime/bin/vmservice/client/lib/src/elements/response_viewer.html
+++ b/runtime/bin/vmservice/client/lib/src/elements/response_viewer.html
@@ -1,10 +1,10 @@
<head>
<link rel="import" href="observatory_element.html">
- <link rel="import" href="message_viewer.html">
+ <link rel="import" href="service_view.html">
</head>
<polymer-element name="response-viewer" extends="observatory-element">
<template>
- <message-viewer app="{{ app }}" message="{{ app.response }}"></message-viewer>
+ <service-view object="{{ app.response }}"></service-view>
</template>
<script type="application/dart" src="response_viewer.dart"></script>
</polymer-element>
\ No newline at end of file
diff --git a/runtime/bin/vmservice/client/lib/src/elements/script_ref.dart b/runtime/bin/vmservice/client/lib/src/elements/script_ref.dart
index 4f2794b..1eaf1b4 100644
--- a/runtime/bin/vmservice/client/lib/src/elements/script_ref.dart
+++ b/runtime/bin/vmservice/client/lib/src/elements/script_ref.dart
@@ -11,36 +11,25 @@
class ScriptRefElement extends ServiceRefElement {
@published int line = -1;
- String get objectId {
- if (line < 0) {
- return super.objectId;
- }
- // TODO(johnmccutchan): Add a ?line=XX invalidates the idea that this
- // method returns an objectId.
- return '${super.objectId}?line=$line';
- }
-
String get hoverText {
if (ref == null) {
- return '';
+ return super.hoverText;
}
if (line < 0) {
- return ref['user_name'];
+ return ref.vmName;
} else {
- return "${ref['user_name']}:$line";
+ return '${ref.vmName}:$line';
}
}
String get name {
if (ref == null) {
- return '';
+ return super.name;
}
- var scriptUrl = ref['user_name'];
- var shortScriptUrl = scriptUrl.substring(scriptUrl.lastIndexOf('/') + 1);
if (line < 0) {
- return shortScriptUrl;
+ return ref.name;
} else {
- return "$shortScriptUrl:$line";
+ return '${ref.name}:$line';
}
}
diff --git a/runtime/bin/vmservice/client/lib/src/elements/script_view.dart b/runtime/bin/vmservice/client/lib/src/elements/script_view.dart
index 7d04c2b..687f078 100644
--- a/runtime/bin/vmservice/client/lib/src/elements/script_view.dart
+++ b/runtime/bin/vmservice/client/lib/src/elements/script_view.dart
@@ -4,36 +4,61 @@
library script_view_element;
-import 'dart:html';
-import 'isolate_element.dart';
-import 'package:observatory/app.dart';
+import 'observatory_element.dart';
+import 'package:observatory/service.dart';
import 'package:polymer/polymer.dart';
/// Displays an Error response.
@CustomTag('script-view')
-class ScriptViewElement extends IsolateElement {
+class ScriptViewElement extends ObservatoryElement {
@published Script script;
+ @published bool showCoverage = false;
ScriptViewElement.created() : super.created();
- String hitsStyle(ScriptLine line) {
- if (line.hits == -1) {
- return 'min-width:32px;';
- } else if (line.hits == 0) {
- return 'min-width:32px;background-color:red';
+ void enteredView() {
+ super.enteredView();
+ if (script == null) {
+ return;
}
- return 'min-width:32px;background-color:green';
+ script.load();
}
- void refreshCoverage(Event e, var detail, Node target) {
- isolate.getMap('coverage').then((Map coverage) {
- assert(coverage['type'] == 'CodeCoverage');
- isolate.updateCoverage(coverage['coverage']);
- notifyPropertyChange(#hitsStyle, "", hitsStyle);
- }).catchError((e, st) {
- print('refreshCoverage $e $st');
+ void _triggerHitRefresh() {
+ notifyPropertyChange(#hitsStyle, 0, 1);
+ }
+
+ showCoverageChanged(oldValue) {
+ _triggerHitRefresh();
+ }
+
+ static const hitStyleNone = 'min-width:32px;';
+ static const hitStyleExecuted = 'min-width:32px;background-color:green';
+ static const hitStyleNotExecuted = 'min-width:32px;background-color:red';
+
+ @observable String hitsStyle(ScriptLine line) {
+ if ((script == null) || !showCoverage) {
+ return hitStyleNone;
+ }
+ var hit = script.hits[line.line];
+ if (hit == null) {
+ return hitStyleNone;
+ }
+ if (hit == 0) {
+ return hitStyleNotExecuted;
+ }
+ assert(hit > 0);
+ return hitStyleExecuted;
+ }
+
+ void refresh(var done) {
+ script.reload().whenComplete(done);
+ }
+
+ void refreshCoverage(var done) {
+ script.isolate.refreshCoverage().then((_) {
+ _triggerHitRefresh();
+ done();
});
}
-
-
}
diff --git a/runtime/bin/vmservice/client/lib/src/elements/script_view.html b/runtime/bin/vmservice/client/lib/src/elements/script_view.html
index af8b8f7..ef6b4a7 100644
--- a/runtime/bin/vmservice/client/lib/src/elements/script_view.html
+++ b/runtime/bin/vmservice/client/lib/src/elements/script_view.html
@@ -1,28 +1,32 @@
<head>
<link rel="import" href="nav_bar.html">
- <link rel="import" href="isolate_element.html">
+ <link rel="import" href="observatory_element.html">
</head>
-<polymer-element name="script-view" extends="isolate-element">
+<polymer-element name="script-view" extends="observatory-element">
<template>
<nav-bar>
<top-nav-menu></top-nav-menu>
- <isolate-nav-menu isolate="{{ isolate }}">
+ <isolate-nav-menu isolate="{{ script.isolate }}">
</isolate-nav-menu>
- <library-nav-menu isolate="{{ isolate }}" library="{{ script.libraryRef }}"></library-nav-menu>
- <nav-menu link="." anchor="{{ script.shortName }}" last="{{ true }}"></nav-menu>
+ <library-nav-menu library="{{ script.library }}"></library-nav-menu>
+ <nav-menu link="." anchor="{{ script.name }}" last="{{ true }}">
+ <li>
+ <input type="checkbox" checked="{{ showCoverage }}">
+ <label>Show Coverage Data</label>
+ </li>
+ </nav-menu>
+ <nav-refresh callback="{{ refreshCoverage }}" label="Refresh Coverage"></nav-refresh>
+ <nav-refresh callback="{{ refresh }}">
+ </nav-refresh>
</nav-bar>
<div class="row">
<div class="col-md-8 col-md-offset-2">
- <div class="panel-heading">
- <button on-click="{{refreshCoverage}}">Refresh Coverage</button>
- {{ script.scriptRef['user_name'] }}
- {{ script.coveredPercentageFormatted() }}
- </div>
+ <div class="panel-heading">Script source for: {{ script.name }}</div>
<div class="panel-body">
<table style="width:100%">
<tbody>
- <tr template repeat="{{ line in script.linesForDisplay }}">
+ <tr template repeat="{{ line in script.lines }}">
<td style="{{ hitsStyle(line) }}"> </td>
<td style="font-family: consolas, courier, monospace;font-size: 1em;line-height: 1.2em;white-space: nowrap;">{{line.line}}</td>
<td width="99%" style="font-family: consolas, courier, monospace;font-size: 1em;line-height: 1.2em;white-space: pre;">{{line.text}}</td>
diff --git a/runtime/bin/vmservice/client/lib/src/elements/service_ref.dart b/runtime/bin/vmservice/client/lib/src/elements/service_ref.dart
index 00c4175..9af8c16 100644
--- a/runtime/bin/vmservice/client/lib/src/elements/service_ref.dart
+++ b/runtime/bin/vmservice/client/lib/src/elements/service_ref.dart
@@ -5,11 +5,12 @@
library service_ref_element;
import 'package:polymer/polymer.dart';
-import 'isolate_element.dart';
+import 'observatory_element.dart';
+import 'package:observatory/service.dart';
@CustomTag('service-ref')
-class ServiceRefElement extends IsolateElement {
- @published Map ref;
+class ServiceRefElement extends ObservatoryElement {
+ @published ServiceObject ref;
@published bool internal = false;
ServiceRefElement.created() : super.created();
@@ -20,35 +21,30 @@
}
String get url {
- if ((isolate == null) || (ref == null)) {
- return '';
+ if (ref == null) {
+ return 'NULL REF';
}
- return isolate.hashLink(objectId);
+ return ref.hashLink;
}
- String get objectId => ref == null ? '' : ref['id'];
+ String get serviceId {
+ if (ref == null) {
+ return 'NULL REF';
+ }
+ return ref.id;
+ }
String get hoverText {
if (ref == null) {
- return '';
+ return 'NULL REF';
}
- // Return the VM name by default.
- var name = ref['name'];
- return name != null ? name : '';
+ return ref.vmName;
}
String get name {
if (ref == null) {
return 'NULL REF';
}
- String name_key = internal ? 'name' : 'user_name';
- if (ref[name_key] != null) {
- return ref[name_key];
- } else if (ref['name'] != null) {
- return ref['name'];
- } else if (ref['user_name'] != null) {
- return ref['user_name'];
- }
- return '';
+ return ref.name;
}
}
diff --git a/runtime/bin/vmservice/client/lib/src/elements/service_ref.html b/runtime/bin/vmservice/client/lib/src/elements/service_ref.html
index e7e2779..1818675 100644
--- a/runtime/bin/vmservice/client/lib/src/elements/service_ref.html
+++ b/runtime/bin/vmservice/client/lib/src/elements/service_ref.html
@@ -1,6 +1,6 @@
<head>
- <link rel="import" href="isolate_element.html">
+ <link rel="import" href="observatory_element.html">
</head>
-<polymer-element name="service-ref" extends="isolate-element">
+<polymer-element name="service-ref" extends="observatory-element">
<script type="application/dart" src="service_ref.dart"></script>
</polymer-element>
\ No newline at end of file
diff --git a/runtime/bin/vmservice/client/lib/src/elements/service_view.dart b/runtime/bin/vmservice/client/lib/src/elements/service_view.dart
new file mode 100644
index 0000000..2a81626
--- /dev/null
+++ b/runtime/bin/vmservice/client/lib/src/elements/service_view.dart
@@ -0,0 +1,102 @@
+// 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 service_object_view_element;
+
+import 'dart:html';
+import 'package:logging/logging.dart';
+import 'package:observatory/service.dart';
+import 'package:observatory/elements.dart';
+import 'package:polymer/polymer.dart';
+import 'observatory_element.dart';
+
+@CustomTag('service-view')
+class ServiceObjectViewElement extends ObservatoryElement {
+ @published ServiceObject object;
+
+ ServiceObjectViewElement.created() : super.created();
+
+ ObservatoryElement _constructElementForObject() {
+ var type = object.serviceType;
+ switch (type) {
+ case 'AllocationProfile':
+ HeapProfileElement element = new Element.tag('heap-profile');
+ element.profile = object;
+ return element;
+ case 'BreakpointList':
+ BreakpointListElement element = new Element.tag('breakpoint-list');
+ element.msg = object;
+ return element;
+ case 'Class':
+ ClassViewElement element = new Element.tag('class-view');
+ element.cls = object;
+ return element;
+ case 'Code':
+ CodeViewElement element = new Element.tag('code-view');
+ element.code = object;
+ return element;
+ case 'Error':
+ ErrorViewElement element = new Element.tag('error-view');
+ element.error = object;
+ return element;
+ case 'Field':
+ FieldViewElement element = new Element.tag('field-view');
+ element.field = object;
+ return element;
+ case 'Function':
+ FunctionViewElement element = new Element.tag('function-view');
+ element.function = object;
+ return element;
+ case 'Array':
+ case 'Bool':
+ case 'Closure':
+ case 'GrowableObjectArray':
+ case 'Instance':
+ case 'Smi':
+ case 'String':
+ InstanceViewElement element = new Element.tag('instance-view');
+ element.instance = object;
+ return element;
+ case 'IsolateList':
+ IsolateListElement element = new Element.tag('isolate-list');
+ element.isolates = object;
+ return element;
+ case 'Library':
+ LibraryViewElement element = new Element.tag('library-view');
+ element.library = object;
+ return element;
+ case 'Profile':
+ IsolateProfileElement element = new Element.tag('isolate-profile');
+ element.profile = object;
+ return element;
+ case 'Script':
+ ScriptViewElement element = new Element.tag('script-view');
+ element.script = object;
+ return element;
+ case 'StackTrace':
+ StackTraceElement element = new Element.tag('stack-trace');
+ element.trace = object;
+ return element;
+ default:
+ return null;
+ }
+ }
+
+ objectChanged(oldValue) {
+ // Remove the current view.
+ children.clear();
+ if (object == null) {
+ Logger.root.info('Viewing null object.');
+ return;
+ }
+ var type = object.serviceType;
+ var element = _constructElementForObject();
+ if (element == null) {
+ Logger.root.info('Unable to find a view element for \'${type}\'');
+ return;
+ }
+ children.add(element);
+ Logger.root.info('Viewing object of \'${type}\'');
+ }
+}
diff --git a/runtime/bin/vmservice/client/lib/src/elements/service_view.html b/runtime/bin/vmservice/client/lib/src/elements/service_view.html
new file mode 100644
index 0000000..93fadd0
--- /dev/null
+++ b/runtime/bin/vmservice/client/lib/src/elements/service_view.html
@@ -0,0 +1,21 @@
+<head>
+ <link rel="import" href="breakpoint_list.html">
+ <link rel="import" href="class_view.html">
+ <link rel="import" href="code_view.html">
+ <link rel="import" href="error_view.html">
+ <link rel="import" href="field_view.html">
+ <link rel="import" href="function_view.html">
+ <link rel="import" href="heap_profile.html">
+ <link rel="import" href="instance_view.html">
+ <link rel="import" href="isolate_list.html">
+ <link rel="import" href="isolate_profile.html">
+ <link rel="import" href="library_view.html">
+ <link rel="import" href="observatory_element.html">
+ <link rel="import" href="script_view.html">
+ <link rel="import" href="stack_trace.html">
+</head>
+<polymer-element name="service-view" extends="observatory-element">
+ <!-- This element explicitly manages the child elements to avoid setting
+ an observable property on the old element to an invalid type. -->
+ <script type="application/dart" src="service_view.dart"></script>
+</polymer-element>
diff --git a/runtime/bin/vmservice/client/lib/src/elements/stack_frame.dart b/runtime/bin/vmservice/client/lib/src/elements/stack_frame.dart
index 021e111..51ae660 100644
--- a/runtime/bin/vmservice/client/lib/src/elements/stack_frame.dart
+++ b/runtime/bin/vmservice/client/lib/src/elements/stack_frame.dart
@@ -4,11 +4,11 @@
library stack_frame_element;
-import 'isolate_element.dart';
+import 'observatory_element.dart';
import 'package:polymer/polymer.dart';
@CustomTag('stack-frame')
-class StackFrameElement extends IsolateElement {
- @published Map frame = toObservable({});
+class StackFrameElement extends ObservatoryElement {
+ @published ObservableMap frame;
StackFrameElement.created() : super.created();
}
diff --git a/runtime/bin/vmservice/client/lib/src/elements/stack_frame.html b/runtime/bin/vmservice/client/lib/src/elements/stack_frame.html
index c453c75..ca7313c 100644
--- a/runtime/bin/vmservice/client/lib/src/elements/stack_frame.html
+++ b/runtime/bin/vmservice/client/lib/src/elements/stack_frame.html
@@ -2,10 +2,10 @@
<link rel="import" href="curly_block.html">
<link rel="import" href="function_ref.html">
<link rel="import" href="instance_ref.html">
- <link rel="import" href="isolate_element.html">
+ <link rel="import" href="observatory_element.html">
<link rel="import" href="script_ref.html">
</head>
-<polymer-element name="stack-frame" extends="isolate-element">
+<polymer-element name="stack-frame" extends="observatory-element">
<template>
<style>
.member {
@@ -19,15 +19,15 @@
#{{ frame['depth'] }}
</div>
<div class="col-md-9">
- <function-ref isolate="{{ isolate }}" ref="{{ frame['function'] }}"></function-ref>
- ( <script-ref isolate="{{ isolate }}" ref="{{ frame['script'] }}" line="{{ frame['line'] }}">
+ <function-ref ref="{{ frame['function'] }}"></function-ref>
+ ( <script-ref ref="{{ frame['script'] }}" line="{{ frame['line'] }}">
</script-ref> )
<curly-block>
<table>
<tr template repeat="{{ v in frame['vars'] }}">
<td class="member">{{ v['name']}}</td>
<td class="member">
- <instance-ref isolate="{{ isolate }}" ref="{{ v['value'] }}"></instance-ref>
+ <instance-ref ref="{{ v['value'] }}"></instance-ref>
</td>
</tr>
</table>
diff --git a/runtime/bin/vmservice/client/lib/src/elements/stack_trace.dart b/runtime/bin/vmservice/client/lib/src/elements/stack_trace.dart
index 6ccbab2..f92630e 100644
--- a/runtime/bin/vmservice/client/lib/src/elements/stack_trace.dart
+++ b/runtime/bin/vmservice/client/lib/src/elements/stack_trace.dart
@@ -4,21 +4,17 @@
library stack_trace_element;
-import 'package:logging/logging.dart';
import 'package:polymer/polymer.dart';
-import 'isolate_element.dart';
+import 'observatory_element.dart';
+import 'package:observatory/service.dart';
@CustomTag('stack-trace')
-class StackTraceElement extends IsolateElement {
- @published Map trace = toObservable({});
+class StackTraceElement extends ObservatoryElement {
+ @published ServiceMap trace;
StackTraceElement.created() : super.created();
void refresh(var done) {
- isolate.getMap('stacktrace').then((map) {
- trace = map;
- }).catchError((e, trace) {
- Logger.root.severe('Error while reloading stack trace: $e\n$trace');
- }).whenComplete(done);
+ trace.reload().whenComplete(done);
}
}
diff --git a/runtime/bin/vmservice/client/lib/src/elements/stack_trace.html b/runtime/bin/vmservice/client/lib/src/elements/stack_trace.html
index 9044754..a5625406 100644
--- a/runtime/bin/vmservice/client/lib/src/elements/stack_trace.html
+++ b/runtime/bin/vmservice/client/lib/src/elements/stack_trace.html
@@ -1,13 +1,13 @@
<head>
<link rel="import" href="nav_bar.html">
- <link rel="import" href="isolate_element.html">
+ <link rel="import" href="observatory_element.html">
<link rel="import" href="stack_frame.html">
</head>
-<polymer-element name="stack-trace" extends="isolate-element">
+<polymer-element name="stack-trace" extends="observatory-element">
<template>
<nav-bar>
<top-nav-menu></top-nav-menu>
- <isolate-nav-menu isolate="{{ isolate }}"></isolate-nav-menu>
+ <isolate-nav-menu isolate="{{ trace.isolate }}"></isolate-nav-menu>
<nav-menu link="." anchor="stack trace" last="{{ true }}"></nav-menu>
<nav-refresh callback="{{ refresh }}"></nav-refresh>
</nav-bar>
@@ -22,7 +22,7 @@
<ul class="list-group">
<template repeat="{{ frame in trace['members'] }}">
<li class="list-group-item">
- <stack-frame isolate="{{ isolate }}" frame="{{ frame }}"></stack-frame>
+ <stack-frame frame="{{ frame }}"></stack-frame>
</li>
</template>
</ul>
diff --git a/runtime/bin/vmservice/client/lib/src/elements/vm_element.dart b/runtime/bin/vmservice/client/lib/src/elements/vm_element.dart
deleted file mode 100644
index ec63553..0000000
--- a/runtime/bin/vmservice/client/lib/src/elements/vm_element.dart
+++ /dev/null
@@ -1,17 +0,0 @@
-// Copyright (c) 2014, 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 vm_element;
-
-import 'observatory_element.dart';
-import 'package:observatory/app.dart';
-import 'package:polymer/polymer.dart';
-
-/// Base class for all custom elements which reference a VM.
-/// Holds an observable [VM].
-@CustomTag('vm-element')
-class VMElement extends ObservatoryElement {
- VMElement.created() : super.created();
- @published VM vm;
-}
diff --git a/runtime/bin/vmservice/client/lib/src/elements/vm_element.html b/runtime/bin/vmservice/client/lib/src/elements/vm_element.html
deleted file mode 100644
index 842ef6f..0000000
--- a/runtime/bin/vmservice/client/lib/src/elements/vm_element.html
+++ /dev/null
@@ -1,6 +0,0 @@
-<head>
- <link rel="import" href="observatory_element.html">
-</head>
-<polymer-element name="vm-element" extends="observatory-element">
- <script type="application/dart" src="vm_element.dart"></script>
-</polymer-element>
diff --git a/runtime/bin/vmservice/client/lib/src/service/cache.dart b/runtime/bin/vmservice/client/lib/src/service/cache.dart
new file mode 100644
index 0000000..6feb94a
--- /dev/null
+++ b/runtime/bin/vmservice/client/lib/src/service/cache.dart
@@ -0,0 +1,161 @@
+// Copyright (c) 2014, 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.
+
+part of service;
+
+/// Abstract [ServiceObjectCache].
+abstract class ServiceObjectCache<T extends ServiceObject> {
+ final Isolate isolate;
+ final _cache = new ObservableMap<String, T>();
+
+ ServiceObjectCache(this.isolate) {
+ assert(isolate != null);
+ }
+
+ /// Returns true if [this] caches objects with this [id].
+ bool cachesId(String id);
+
+ /// Upgrades [obj] into a [T].
+ T _upgrade(ObservableMap map);
+
+ /// Returns true if [this] has [id] in its cache.
+ bool contains(String id) {
+ assert(cachesId(id));
+ return _cache[id] != null;
+ }
+
+ /// Gets [id] from the cache. Returns null if not contained.
+ T operator[](String id) {
+ assert(cachesId(id));
+ return _cache[id];
+ }
+
+ /// Caches [serviceObject] with [id].
+ operator[]=(String id, T serviceObject) {
+ assert(cachesId(id));
+ _cache[id] = serviceObject;
+ }
+
+ /// Gets [id] from the cache or makes a network request for [id].
+ Future<T> get(String id) {
+ assert(cachesId(id));
+ T cached = _cache[id];
+ if (cached != null) {
+ return new Future.value(cached);
+ }
+ return isolate.get(id).then(_addToCache);
+ }
+
+ /// If [obj] is cached, return the cached object. Otherwise, upgrades [obj]
+ /// and adds the upgraded value to the cache.
+ T putIfAbsent(ObservableMap obj) {
+ assert(ServiceObject.isServiceMap(obj));
+ String id = obj['id'];
+ var type = obj['type'];
+ if (!cachesId(id)) {
+ Logger.root.warning('Cache does not cache this id: $id');
+ }
+ assert(cachesId(id));
+ if (contains(id)) {
+ return this[id];
+ }
+ return _addToCache(_upgrade(obj));
+ }
+
+ T _addToCache(T so) {
+ this[so.id] = so;
+ return so;
+ }
+}
+
+class ScriptCache extends ServiceObjectCache<Script> {
+ ScriptCache(Isolate isolate) : super(isolate);
+
+ bool cachesId(String id) => _matcher.hasMatch(id);
+ Script _upgrade(ObservableMap obj) => new Script.fromMap(isolate, obj);
+ static final RegExp _matcher = new RegExp(r'scripts/.+');
+
+ void _processCoverage(ServiceMap coverage) {
+ assert(coverage.serviceType == 'CodeCoverage');
+ var coverageList = coverage['coverage'];
+ assert(coverageList != null);
+ coverageList.forEach((scriptCoverage) {
+ _processScriptCoverage(scriptCoverage);
+ });
+ }
+
+ void _processScriptCoverage(ObservableMap scriptCoverage) {
+ // Because the coverage data was upgraded into a ServiceObject,
+ // the script can be directly accessed.
+ Script script = scriptCoverage['script'];
+ script._processHits(scriptCoverage['hits']);
+ }
+}
+
+class CodeCache extends ServiceObjectCache<Code> {
+ CodeCache(Isolate isolate) : super(isolate);
+
+ bool cachesId(String id) => _matcher.hasMatch(id);
+ Code _upgrade(ObservableMap obj) => new Code.fromMap(isolate, obj);
+
+ static final RegExp _matcher = new RegExp(r'code/.+');
+
+ List<Code> topExclusive(int count) {
+ var codeList = _cache.values.toList();
+ codeList.sort((Code a, Code b) {
+ return b.exclusiveTicks - a.exclusiveTicks;
+ });
+ if (codeList.length < count) {
+ return codeList;
+ }
+ codeList.length = count;
+ return codeList;
+ }
+
+ void _resetProfileData() {
+ _cache.forEach((k, Code code) {
+ code.resetProfileData();
+ });
+ }
+
+ void _updateProfileData(ServiceMap profile, List<Code> codeTable) {
+ var codeRegions = profile['codes'];
+ var sampleCount = profile['samples'];
+ for (var codeRegion in codeRegions) {
+ Code code = codeRegion['code'];
+ code.updateProfileData(codeRegion, codeTable, sampleCount);
+ }
+ }
+}
+
+class ClassCache extends ServiceObjectCache<ServiceMap> {
+ ClassCache(Isolate isolate) : super(isolate);
+
+ bool cachesId(String id) => _matcher.hasMatch(id);
+ bool cachesType(String type) => ServiceObject.stripRef(type) == 'Class';
+ ServiceMap _upgrade(ObservableMap obj) =>
+ new ServiceMap.fromMap(isolate, obj);
+
+ static final RegExp _matcher = new RegExp(r'classes/\d+$');
+}
+
+class FunctionCache extends ServiceObjectCache<ServiceMap> {
+ FunctionCache(Isolate isolate) : super(isolate);
+
+ bool cachesId(String id) => _matcher.hasMatch(id);
+
+ bool cachesType(String type) => ServiceObject.stripRef(type) == 'Function';
+ ServiceMap _upgrade(ObservableMap obj) =>
+ new ServiceMap.fromMap(isolate, obj);
+
+ static final RegExp _matcher =
+ new RegExp(r'^functions/native-.+|'
+ r'^functions/collected-.+|'
+ r'^functions/reused-.+|'
+ r'^functions/stub-.+|'
+ r'^classes/\d+/functions/.+|'
+ r'^classes/\d+/closures/.+|'
+ r'^classes/\d+/implicit_closures/.+|'
+ r'^classes/\d+/dispatchers/.+');
+}
diff --git a/runtime/bin/vmservice/client/lib/src/service/object.dart b/runtime/bin/vmservice/client/lib/src/service/object.dart
new file mode 100644
index 0000000..bbfe10a
--- /dev/null
+++ b/runtime/bin/vmservice/client/lib/src/service/object.dart
@@ -0,0 +1,634 @@
+// Copyright (c) 2014, 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.
+
+part of service;
+
+/// State for a running isolate.
+class Isolate extends ServiceObject {
+ final VM vm;
+ String get link => _id;
+ String get hashLink => '#/$_id';
+
+ ScriptCache _scripts;
+ /// Script cache.
+ ScriptCache get scripts => _scripts;
+ CodeCache _codes;
+ /// Code cache.
+ CodeCache get codes => _codes;
+ /// Class cache.
+ ClassCache _classes;
+ ClassCache get classes => _classes;
+ /// Function cache.
+ FunctionCache _functions;
+ FunctionCache get functions => _functions;
+
+ void _initOnce() {
+ // Only called once.
+ assert(_isolate == null);
+ _isolate = this;
+ _scripts = new ScriptCache(this);
+ _codes = new CodeCache(this);
+ _classes = new ClassCache(this);
+ _functions = new FunctionCache(this);
+ }
+
+ Isolate.fromId(this.vm, String id) : super(null, id, '@Isolate') {
+ _initOnce();
+ }
+
+ Isolate.fromMap(this.vm, Map map) : super.fromMap(null, map) {
+ _initOnce();
+ }
+
+ /// Creates a link to [id] relative to [this].
+ @reflectable String relativeLink(String id) => '${this.id}/$id';
+ /// Creates a relative link to [id] with a '#/' prefix.
+ @reflectable String relativeHashLink(String id) => '#/${relativeLink(id)}';
+
+ Future<ScriptCache> refreshCoverage() {
+ return get('coverage').then(_scripts._processCoverage);
+ }
+
+ void processProfile(ServiceMap profile) {
+ assert(profile.serviceType == 'Profile');
+ var codeTable = new List<Code>();
+ var codeRegions = profile['codes'];
+ for (var codeRegion in codeRegions) {
+ Code code = codeRegion['code'];
+ assert(code != null);
+ codeTable.add(code);
+ }
+ _codes._resetProfileData();
+ _codes._updateProfileData(profile, codeTable);
+ }
+
+ /// Requests [serviceId] from [this]. Completes to a [ServiceObject].
+ /// Can return pre-existing, cached, [ServiceObject]s.
+ Future<ServiceObject> get(String serviceId) {
+ if (_scripts.cachesId(serviceId)) {
+ return _scripts.get(serviceId);
+ }
+ if (_codes.cachesId(serviceId)) {
+ return _codes.get(serviceId);
+ }
+ if (_classes.cachesId(serviceId)) {
+ return _classes.get(serviceId);
+ }
+ if (_functions.cachesId(serviceId)) {
+ return _functions.get(serviceId);
+ }
+ return vm.getAsMap(relativeLink(serviceId)).then((ObservableMap m) {
+ return _upgradeToServiceObject(vm, this, m);
+ });
+ }
+
+ @observable ServiceMap rootLib;
+ @observable ObservableMap topFrame;
+
+ @observable String name;
+ @observable String vmName;
+ @observable Map entry;
+
+ @observable final Map<String, double> timers =
+ toObservable(new Map<String, double>());
+
+ @observable int newHeapUsed = 0;
+ @observable int oldHeapUsed = 0;
+
+ @observable String fileAndLine;
+
+ void _update(ObservableMap map) {
+ upgradeCollection(map, vm, this);
+ _ref = false;
+ if (map['rootLib'] == null ||
+ map['timers'] == null ||
+ map['heap'] == null) {
+ Logger.root.severe("Malformed 'Isolate' response: $map");
+ return;
+ }
+ rootLib = map['rootLib'];
+ vmName = map['name'];
+ if (map['entry'] != null) {
+ entry = map['entry'];
+ name = entry['name'];
+ } else {
+ // fred
+ name = 'root isolate';
+ }
+ if (map['topFrame'] != null) {
+ topFrame = map['topFrame'];
+ } else {
+ topFrame = null ;
+ }
+
+ var timerMap = {};
+ map['timers'].forEach((timer) {
+ timerMap[timer['name']] = timer['time'];
+ });
+ timers['total'] = timerMap['time_total_runtime'];
+ timers['compile'] = timerMap['time_compilation'];
+ timers['gc'] = 0.0; // TODO(turnidge): Export this from VM.
+ timers['init'] = (timerMap['time_script_loading'] +
+ timerMap['time_creating_snapshot'] +
+ timerMap['time_isolate_initialization'] +
+ timerMap['time_bootstrap']);
+ timers['dart'] = timerMap['time_dart_execution'];
+
+ newHeapUsed = map['heap']['usedNew'];
+ oldHeapUsed = map['heap']['usedOld'];
+ }
+}
+
+// TODO(johnmccutchan): Make this into an IsolateCache.
+class IsolateList extends ServiceObject {
+ final VM _vm;
+ VM get vm => _vm;
+ @observable final isolates = new ObservableMap<String, Isolate>();
+ IsolateList(this._vm) : super(null, 'isolates', 'IsolateList') {
+ name = 'IsolateList';
+ vmName = name;
+ }
+ IsolateList.fromMap(this._vm, Map m) : super.fromMap(null, m) {
+ name = 'IsolateList';
+ vmName = name;
+ }
+
+ Future<ServiceObject> reload() {
+ return vm.getAsMap(id).then(update);
+ }
+
+ void _update(ObservableMap map) {
+ _updateIsolates(map['members']);
+ }
+
+ void _updateIsolates(List<Map> members) {
+ // Find dead isolates.
+ var deadIsolates = [];
+ isolates.forEach((k, v) {
+ if (!_foundIsolateInMembers(k, members)) {
+ deadIsolates.add(k);
+ }
+ });
+ // Remove them.
+ deadIsolates.forEach((id) {
+ isolates.remove(id);
+ Logger.root.info('Isolate \'$id\' has gone away.');
+ });
+
+ // Add new isolates.
+ members.forEach((map) {
+ var id = map['id'];
+ var isolate = isolates[id];
+ if (isolate == null) {
+ isolate = new Isolate.fromMap(vm, map);
+ Logger.root.info('Created ServiceObject for \'${isolate.id}\' with '
+ 'type \'${isolate.serviceType}\'');
+ isolates[id] = isolate;
+ }
+ });
+
+ // After updating the isolate list, refresh each isolate.
+ _refreshIsolates();
+ }
+
+ void _refreshIsolates() {
+ // This is technically asynchronous but we don't need to wait for
+ // the result.
+ isolates.forEach((k, Isolate isolate) {
+ isolate.reload();
+ });
+ }
+
+ Isolate getIsolate(String id) {
+ assert(id.startsWith('isolates/'));
+ var isolate = isolates[id];
+ if (isolate != null) {
+ return isolate;
+ }
+ isolate = new Isolate.fromId(vm, id);
+ isolates[id] = isolate;
+ isolate.load();
+ return isolate;
+ }
+
+ Isolate getIsolateFromMap(ObservableMap m) {
+ assert(ServiceObject.isServiceMap(m));
+ String id = m['id'];
+ assert(id.startsWith('isolates/'));
+ var isolate = isolates[id];
+ if (isolate != null) {
+ isolate.update(m);
+ return isolate;
+ }
+ isolate = new Isolate.fromMap(vm, m);
+ isolates[id] = isolate;
+ isolate.load();
+ return isolate;
+ }
+
+ static bool _foundIsolateInMembers(String id, List<Map> members) {
+ return members.any((E) => E['id'] == id);
+ }
+}
+
+
+/// A [ServiceObject] which implements [ObservableMap].
+class ServiceMap extends ServiceObject implements ObservableMap {
+ final ObservableMap _map = new ObservableMap();
+ ServiceMap(Isolate isolate, String id, String serviceType) :
+ super(isolate, id, serviceType) {
+ }
+
+ ServiceMap.fromMap(Isolate isolate, ObservableMap m) :
+ super.fromMap(isolate, m);
+
+ String toString() => _map.toString();
+
+ void _upgradeValues() {
+ assert(isolate != null);
+ upgradeCollection(_map, vm, isolate);
+ }
+
+ void _update(ObservableMap m) {
+ _map.clear();
+ _map.addAll(m);
+ name = _map['user_name'];
+ vmName = _map['name'];
+ _upgradeValues();
+ }
+
+ // Forward Map interface calls.
+ void addAll(Map other) => _map.addAll(other);
+ void clear() => _map.clear();
+ bool containsValue(v) => _map.containsValue(v);
+ bool containsKey(k) => _map.containsKey(k);
+ void forEach(Function f) => _map.forEach(f);
+ putIfAbsent(key, Function ifAbsent) => _map.putIfAbsent(key, ifAbsent);
+ void remove(key) => _map.remove(key);
+ operator [](k) => _map[k];
+ operator []=(k, v) => _map[k] = v;
+ bool get isEmpty => _map.isEmpty;
+ bool get isNotEmpty => _map.isNotEmpty;
+ Iterable get keys => _map.keys;
+ Iterable get values => _map.values;
+ int get length => _map.length;
+
+ // Forward ChangeNotifier interface calls.
+ bool deliverChanges() => _map.deliverChanges();
+ void notifyChange(ChangeRecord record) => _map.notifyChange(record);
+ notifyPropertyChange(Symbol field, Object oldValue, Object newValue) =>
+ _map.notifyPropertyChange(field, oldValue, newValue);
+ void observed() => _map.observed();
+ void unobserved() => _map.unobserved();
+ Stream<List<ChangeRecord>> get changes => _map.changes;
+ bool get hasObservers => _map.hasObservers;
+}
+
+class ServiceError extends ServiceObject {
+ ServiceError.fromMap(Isolate isolate, Map m) : super.fromMap(isolate, m);
+
+ @observable String kind;
+ @observable String message;
+
+ void _update(ObservableMap map) {
+ kind = map['kind'];
+ message = map['message'];
+ name = 'ServiceError $kind';
+ vmName = name;
+ }
+
+ // TODO: stackTrace?
+}
+
+class ScriptLine {
+ @reflectable final int line;
+ @reflectable final String text;
+ ScriptLine(this.line, this.text);
+}
+
+class Script extends ServiceObject {
+ @reflectable final lines = new ObservableList<ScriptLine>();
+ @reflectable final hits = new ObservableMap<int, int>();
+ @observable ServiceObject library;
+ @observable String kind;
+
+ String _shortUrl;
+ String _url;
+
+ Script.fromMap(Isolate isolate, Map m) : super.fromMap(isolate, m);
+
+ void _update(ObservableMap m) {
+ // Assert that m is a service map.
+ assert(ServiceObject.isServiceMap(m));
+ if ((m['type'] == 'Error') && (m['kind'] == 'NotFoundError')) {
+ // TODO(johnmccutchan): Find out why dart:core/identical.dart can't
+ // be found but shows up in coverage. i.e. a function has reference
+ // to script that no library does.
+ Logger.root.info(m['message']);
+ return;
+ }
+ // Assert that the id hasn't changed.
+ assert(m['id'] == _id);
+ // Assert that the type hasn't changed.
+ assert(ServiceObject.stripRef(m['type']) == _serviceType);
+ _url = m['name'];
+ _shortUrl = _url.substring(_url.lastIndexOf('/') + 1);
+ name = _shortUrl;
+ vmName = _url;
+ kind = m['kind'];
+ _processSource(m['source']);
+ }
+
+ void _processHits(List scriptHits) {
+ if (_ref) {
+ // Eagerly grab script source.
+ load();
+ }
+ // Update hits table.
+ for (var i = 0; i < scriptHits.length; i += 2) {
+ var line = scriptHits[i];
+ var hit = scriptHits[i + 1]; // hit status.
+ assert(line >= 1); // Lines start at 1.
+ hits[line] = hit;
+ }
+ }
+
+ void _processSource(String source) {
+ // Preemptyively mark that this is a reference.
+ _ref = true;
+ if (source == null) {
+ return;
+ }
+ var sourceLines = source.split('\n');
+ if (sourceLines.length == 0) {
+ return;
+ }
+ // We have the source to the script. This is no longer a reference.
+ _ref = false;
+ lines.clear();
+ Logger.root.info('Adding ${sourceLines.length} source lines for ${_url}');
+ for (var i = 0; i < sourceLines.length; i++) {
+ lines.add(new ScriptLine(i + 1, sourceLines[i]));
+ }
+ }
+
+
+}
+
+class CodeTick {
+ final int address;
+ final int exclusiveTicks;
+ final int inclusiveTicks;
+ CodeTick(this.address, this.exclusiveTicks, this.inclusiveTicks);
+}
+
+
+class CodeInstruction extends Observable {
+ @observable final int address;
+ @observable final String machine;
+ @observable final String human;
+
+ static String formatPercent(num a, num total) {
+ var percent = 100.0 * (a / total);
+ return '${percent.toStringAsFixed(2)}%';
+ }
+
+ CodeInstruction(this.address, this.machine, this.human);
+
+ @reflectable String formattedAddress() {
+ if (address == 0) {
+ return '';
+ }
+ return '0x${address.toRadixString(16)}';
+ }
+
+ @reflectable String formattedInclusive(Code code) {
+ if (code == null) {
+ return '';
+ }
+ var tick = code.addressTicks[address];
+ if (tick == null) {
+ return '';
+ }
+ // Don't show inclusive ticks if they are the same as exclusive ticks.
+ if (tick.inclusiveTicks == tick.exclusiveTicks) {
+ return '';
+ }
+ var pcent = formatPercent(tick.inclusiveTicks, code.totalSamplesInProfile);
+ return '$pcent (${tick.inclusiveTicks})';
+ }
+
+ @reflectable String formattedExclusive(Code code) {
+ if (code == null) {
+ return '';
+ }
+ var tick = code.addressTicks[address];
+ if (tick == null) {
+ return '';
+ }
+ var pcent = formatPercent(tick.exclusiveTicks, code.totalSamplesInProfile);
+ return '$pcent (${tick.exclusiveTicks})';
+ }
+}
+
+class CodeKind {
+ final _value;
+ const CodeKind._internal(this._value);
+ String toString() => '$_value';
+
+ static CodeKind fromString(String s) {
+ if (s == 'Native') {
+ return Native;
+ } else if (s == 'Dart') {
+ return Dart;
+ } else if (s == 'Collected') {
+ return Collected;
+ } else if (s == 'Reused') {
+ return Reused;
+ }
+ Logger.root.warning('Unknown code kind $s');
+ throw new FallThroughError();
+ }
+ static const Native = const CodeKind._internal('Native');
+ static const Dart = const CodeKind._internal('Dart');
+ static const Collected = const CodeKind._internal('Collected');
+ static const Reused = const CodeKind._internal('Reused');
+}
+
+class CodeCallCount {
+ final Code code;
+ final int count;
+ CodeCallCount(this.code, this.count);
+}
+
+class Code extends ServiceObject {
+ @observable CodeKind kind;
+ @observable int totalSamplesInProfile = 0;
+ @reflectable int exclusiveTicks = 0;
+ @reflectable int inclusiveTicks = 0;
+ @reflectable int startAddress = 0;
+ @reflectable int endAddress = 0;
+ @reflectable final callers = new List<CodeCallCount>();
+ @reflectable final callees = new List<CodeCallCount>();
+ @reflectable final instructions = new ObservableList<CodeInstruction>();
+ @reflectable final addressTicks = new ObservableMap<int, CodeTick>();
+ @observable String formattedInclusiveTicks = '';
+ @observable String formattedExclusiveTicks = '';
+
+ @observable ServiceMap function;
+ String name;
+ String vmName;
+
+ Code.fromMap(Isolate isolate, Map map) : super.fromMap(isolate, map);
+
+ // Reset all data associated with a profile.
+ void resetProfileData() {
+ totalSamplesInProfile = 0;
+ exclusiveTicks = 0;
+ inclusiveTicks = 0;
+ formattedInclusiveTicks = '';
+ formattedExclusiveTicks = '';
+ callers.clear();
+ callees.clear();
+ addressTicks.clear();
+ }
+
+ /// Reload [this]. Returns a future which completes to [this] or
+ /// a [ServiceError].
+ Future<ServiceObject> reload() {
+ assert(kind != null);
+ if (kind == CodeKind.Dart) {
+ // We only reload Dart code.
+ return super.reload();
+ }
+ return new Future.value(this);
+ }
+
+ void _resolveCalls(List<CodeCallCount> calls, List data, List<Code> codes) {
+ // Assert that this has been cleared.
+ assert(calls.length == 0);
+ // Resolve.
+ for (var i = 0; i < data.length; i += 2) {
+ var index = int.parse(data[i]);
+ var count = int.parse(data[i + 1]);
+ assert(index >= 0);
+ assert(index < codes.length);
+ calls.add(new CodeCallCount(codes[index], count));
+ }
+ // Sort to descending count order.
+ calls.sort((a, b) => b.count - a.count);
+ }
+
+
+ static String formatPercent(num a, num total) {
+ var percent = 100.0 * (a / total);
+ return '${percent.toStringAsFixed(2)}%';
+ }
+
+ void updateProfileData(Map profileData,
+ List<Code> codeTable,
+ int sampleCount) {
+ // Assert we have a CodeRegion entry.
+ assert(profileData['type'] == 'CodeRegion');
+ // Assert we are handed profile data for this code object.
+ assert(profileData['code'] == this);
+ totalSamplesInProfile = sampleCount;
+ inclusiveTicks = int.parse(profileData['inclusive_ticks']);
+ exclusiveTicks = int.parse(profileData['exclusive_ticks']);
+ _resolveCalls(callers, profileData['callers'], codeTable);
+ _resolveCalls(callees, profileData['callees'], codeTable);
+ var ticks = profileData['ticks'];
+ if (ticks != null) {
+ _processTicks(ticks);
+ }
+ formattedInclusiveTicks =
+ '${formatPercent(inclusiveTicks, totalSamplesInProfile)} '
+ '($inclusiveTicks)';
+ formattedExclusiveTicks =
+ '${formatPercent(exclusiveTicks, totalSamplesInProfile)} '
+ '($inclusiveTicks)';
+ }
+
+ void _update(ObservableMap m) {
+ assert(ServiceObject.isServiceMap(m));
+ assert(m['id'] == _id);
+ assert(ServiceObject.stripRef(m['type']) == _serviceType);
+ name = m['user_name'];
+ vmName = m['name'];
+ kind = CodeKind.fromString(m['kind']);
+ startAddress = int.parse(m['start'], radix:16);
+ endAddress = int.parse(m['end'], radix:16);
+ // Upgrade the function.
+ function = _upgradeToServiceObject(isolate.vm, isolate, m['function']);
+ var disassembly = m['disassembly'];
+ if (disassembly != null) {
+ _processDisassembly(disassembly);
+ }
+ // We are a reference if we don't have instructions and are Dart code.
+ _ref = (instructions.length == 0) && (kind == CodeKind.Dart);
+ hasDisassembly = (instructions.length != 0) && (kind == CodeKind.Dart);
+ }
+
+ @observable bool hasDisassembly = false;
+
+ void _processDisassembly(List<String> disassembly){
+ assert(disassembly != null);
+ instructions.clear();
+ assert((disassembly.length % 3) == 0);
+ for (var i = 0; i < disassembly.length; i += 3) {
+ var address = 0; // Assume code comment.
+ var machine = disassembly[i + 1];
+ var human = disassembly[i + 2];
+ if (disassembly[i] != '') {
+ // Not a code comment, extract address.
+ address = int.parse(disassembly[i]);
+ }
+ var instruction = new CodeInstruction(address, machine, human);
+ instructions.add(instruction);
+ }
+ }
+
+ void _processTicks(List<String> profileTicks) {
+ assert(profileTicks != null);
+ assert((profileTicks.length % 3) == 0);
+ for (var i = 0; i < profileTicks.length; i += 3) {
+ var address = int.parse(profileTicks[i], radix:16);
+ var exclusive = int.parse(profileTicks[i + 1]);
+ var inclusive = int.parse(profileTicks[i + 2]);
+ var tick = new CodeTick(address, exclusive, inclusive);
+ addressTicks[address] = tick;
+ }
+ }
+
+ /// Returns true if [address] is contained inside [this].
+ bool contains(int address) {
+ return (address >= startAddress) && (address < endAddress);
+ }
+
+ /// Sum all caller counts.
+ int sumCallersCount() => _sumCallCount(callers);
+ /// Specific caller count.
+ int callersCount(Code code) => _callCount(callers, code);
+ /// Sum of callees count.
+ int sumCalleesCount() => _sumCallCount(callees);
+ /// Specific callee count.
+ int calleesCount(Code code) => _callCount(callees, code);
+
+ int _sumCallCount(List<CodeCallCount> calls) {
+ var sum = 0;
+ for (CodeCallCount caller in calls) {
+ sum += caller.count;
+ }
+ return sum;
+ }
+
+ int _callCount(List<CodeCallCount> calls, Code code) {
+ for (CodeCallCount caller in calls) {
+ if (caller.code == code) {
+ return caller.count;
+ }
+ }
+ return 0;
+ }
+}
diff --git a/runtime/bin/vmservice/client/lib/src/service/service.dart b/runtime/bin/vmservice/client/lib/src/service/service.dart
new file mode 100644
index 0000000..3671116
--- /dev/null
+++ b/runtime/bin/vmservice/client/lib/src/service/service.dart
@@ -0,0 +1,190 @@
+// Copyright (c) 2014, 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.
+
+part of service;
+
+/// A [ServiceObject] is an object known to the VM service and is tied
+/// to an owning [Isolate].
+abstract class ServiceObject extends Observable {
+ Isolate _isolate;
+
+ /// Owning isolate.
+ @reflectable Isolate get isolate => _isolate;
+
+ /// Owning vm.
+ @reflectable VM get vm => _isolate.vm;
+
+ /// The complete service url of this object.
+ @reflectable String get link => isolate.relativeLink(_id);
+
+ /// The complete service url of this object with a '#/' prefix.
+ @reflectable String get hashLink => isolate.relativeHashLink(_id);
+ set hashLink(var o) { /* silence polymer */ }
+
+ String _id;
+ /// The id of this object.
+ @reflectable String get id => _id;
+
+ String _serviceType;
+ /// The service type of this object.
+ @reflectable String get serviceType => _serviceType;
+
+ bool _ref;
+
+ @observable String name;
+ @observable String vmName;
+
+ ServiceObject(this._isolate, this._id, this._serviceType) {
+ _ref = isRefType(_serviceType);
+ _serviceType = stripRef(_serviceType);
+ _created();
+ }
+
+ ServiceObject.fromMap(this._isolate, ObservableMap m) {
+ assert(isServiceMap(m));
+ _id = m['id'];
+ _ref = isRefType(m['type']);
+ _serviceType = stripRef(m['type']);
+ _created();
+ update(m);
+ }
+
+ /// If [this] was created from a reference, load the full object
+ /// from the service by calling [reload]. Else, return [this].
+ Future<ServiceObject> load() {
+ if (!_ref) {
+ // Not a reference.
+ return new Future.value(this);
+ }
+ // Call refresh which will fill in the entire object.
+ return reload();
+ }
+
+ /// Reload [this]. Returns a future which completes to [this] or
+ /// a [ServiceError].
+ Future<ServiceObject> reload() {
+ assert(isolate != null);
+ if (id == '') {
+ // Errors don't have ids.
+ assert(serviceType == 'Error');
+ return new Future.value(this);
+ }
+ return isolate.vm.getAsMap(link).then(update);
+ }
+
+ /// Update [this] using [m] as a source. [m] can be a reference.
+ ServiceObject update(ObservableMap m) {
+ // Assert that m is a service map.
+ assert(ServiceObject.isServiceMap(m));
+ if ((m['type'] == 'Error') && (_serviceType != 'Error')) {
+ // Got an unexpected error. Don't update the object.
+ return _upgradeToServiceObject(vm, isolate, m);
+ }
+ // TODO(johnmccutchan): Should we allow for a ServiceObject's id
+ // or type to change?
+ _id = m['id'];
+ _serviceType = stripRef(m['type']);
+ _update(m);
+ return this;
+ }
+
+ // update internal state from [map]. [map] can be a reference.
+ void _update(ObservableMap map);
+
+ /// Returns true if [this] has only been partially initialized via
+ /// a reference. See [load].
+ bool isRef() => _ref;
+
+ void _created() {
+ var refNotice = _ref ? ' Created from reference.' : '';
+ Logger.root.info('Created ServiceObject for \'${_id}\' with type '
+ '\'${_serviceType}\'.' + refNotice);
+ }
+
+ /// Returns true if [map] is a service map. i.e. it has the following keys:
+ /// 'id' and a 'type'.
+ static bool isServiceMap(ObservableMap m) {
+ return (m != null) && (m['id'] != null) && (m['type'] != null);
+ }
+
+ /// Returns true if [type] is a reference type. i.e. it begins with an
+ /// '@' character.
+ static bool isRefType(String type) {
+ return type.startsWith('@');
+ }
+
+ /// Returns the unreffed version of [type].
+ static String stripRef(String type) {
+ if (!isRefType(type)) {
+ return type;
+ }
+ // Strip off the '@' character.
+ return type.substring(1);
+ }
+}
+
+/// Recursively upgrades all [ServiceObject]s inside [collection] which must
+/// be an [ObservableMap] or an [ObservableList]. Upgraded elements will be
+/// associated with [vm] and [isolate].
+void upgradeCollection(collection, VM vm, Isolate isolate) {
+ if (collection is ObservableMap) {
+ _upgradeObservableMap(collection, vm, isolate);
+ } else if (collection is ObservableList) {
+ _upgradeObservableList(collection, vm, isolate);
+ }
+}
+
+void _upgradeObservableMap(ObservableMap map, VM vm, Isolate isolate) {
+ map.forEach((k, v) {
+ if ((v is ObservableMap) && ServiceObject.isServiceMap(v)) {
+ map[k] = v = _upgradeToServiceObject(vm, isolate, v);
+ } else if (v is ObservableList) {
+ _upgradeObservableList(v, vm, isolate);
+ } else if (v is ObservableMap) {
+ _upgradeObservableMap(v, vm, isolate);
+ }
+ });
+}
+
+void _upgradeObservableList(ObservableList list, VM vm, Isolate isolate) {
+ for (var i = 0; i < list.length; i++) {
+ var v = list[i];
+ if ((v is ObservableMap) && ServiceObject.isServiceMap(v)) {
+ list[i] = _upgradeToServiceObject(vm, isolate, v);
+ } else if (v is ObservableList) {
+ _upgradeObservableList(v, vm, isolate);
+ } else if (v is ObservableMap) {
+ _upgradeObservableMap(v, vm, isolate);
+ }
+ }
+}
+
+/// Upgrades response ([m]) from [vm] and [isolate] to a [ServiceObject].
+/// This acts like a factory which consumes an ObservableMap and returns
+/// a fully upgraded ServiceObject.
+ServiceObject _upgradeToServiceObject(VM vm, Isolate isolate, ObservableMap m) {
+ if (!ServiceObject.isServiceMap(m)) {
+ Logger.root.severe("Malformed service object: $m");
+ }
+ assert(ServiceObject.isServiceMap(m));
+ var type = ServiceObject.stripRef(m['type']);
+ switch (type) {
+ case 'Error':
+ return new ServiceError.fromMap(isolate, m);
+ case 'IsolateList':
+ vm.isolates.update(m);
+ return vm.isolates;
+ case 'Script':
+ return isolate.scripts.putIfAbsent(m);
+ case 'Code':
+ return isolate.codes.putIfAbsent(m);
+ case 'Isolate':
+ return vm.isolates.getIsolateFromMap(m);
+ case 'Class':
+ return isolate.classes.putIfAbsent(m);
+ case 'Function':
+ return isolate.functions.putIfAbsent(m);
+ }
+ return new ServiceMap.fromMap(isolate, m);
+}
diff --git a/runtime/bin/vmservice/client/lib/src/service/vm.dart b/runtime/bin/vmservice/client/lib/src/service/vm.dart
new file mode 100644
index 0000000..4886517
--- /dev/null
+++ b/runtime/bin/vmservice/client/lib/src/service/vm.dart
@@ -0,0 +1,47 @@
+// Copyright (c) 2014, 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.
+
+part of service;
+
+abstract class VM extends Observable {
+ @reflectable IsolateList _isolates;
+ @reflectable IsolateList get isolates => _isolates;
+
+ void _initOnce() {
+ assert(_isolates == null);
+ _isolates = new IsolateList(this);
+ }
+
+ VM() {
+ _initOnce();
+ }
+
+ /// Get [id] as an [ObservableMap] from the service directly.
+ Future<ObservableMap> getAsMap(String id) {
+ return getString(id).then((response) {
+ try {
+ var map = JSON.decode(response);
+ Logger.root.info('Decoded $id');
+ return toObservable(map);
+ } catch (e, st) {
+ return toObservable({
+ 'type': 'Error',
+ 'id': '',
+ 'kind': 'DecodeError',
+ 'message': '$e',
+ });
+ }
+ }).catchError((error) {
+ return toObservable({
+ 'type': 'Error',
+ 'id': '',
+ 'kind': 'LastResort',
+ 'message': '$error'
+ });
+ });
+ }
+
+ /// Get [id] as a [String] from the service directly. See [getAsMap].
+ Future<String> getString(String id);
+}
diff --git a/runtime/bin/vmservice/server.dart b/runtime/bin/vmservice/server.dart
index 6467b7d..1dbbbfc 100644
--- a/runtime/bin/vmservice/server.dart
+++ b/runtime/bin/vmservice/server.dart
@@ -57,7 +57,8 @@
class HttpRequestClient extends Client {
- static ContentType jsonContentType = ContentType.parse('application/json');
+ static ContentType jsonContentType =
+ new ContentType("application", "json", charset: "utf-8");
final HttpRequest request;
HttpRequestClient(this.request, service) : super(service);
diff --git a/runtime/include/dart_api.h b/runtime/include/dart_api.h
index 28d87f0..a048d5b 100755
--- a/runtime/include/dart_api.h
+++ b/runtime/include/dart_api.h
@@ -442,15 +442,18 @@
* persistent handle and the peer as arguments. This gives the native code the
* ability to cleanup data associated with the object and to delete the weak
* persistent handle. It is illegal to call into the VM from the callback,
- * except to delete the weak persistent handle.
+ * except to delete the weak persistent handle. If the handle is deleted before
+ * the object becomes unreachable, the callback is never invoked.
*
* Requires there to be a current isolate.
*
* \param object An object.
* \param peer A pointer to a native object or NULL. This value is
* provided to callback when it is invoked.
+ * \param external_allocation_size The number of externally allocated
+ * bytes for peer. Used to inform the garbage collector.
* \param callback A function pointer that will be invoked sometime
- * after the object is garbage collected.
+ * after the object is garbage collected, unless the handle has been deleted.
*
* \return Success if the weak persistent handle was
* created. Otherwise, returns an error.
@@ -458,6 +461,7 @@
DART_EXPORT Dart_WeakPersistentHandle Dart_NewWeakPersistentHandle(
Dart_Handle object,
void* peer,
+ intptr_t external_allocation_size,
Dart_WeakPersistentHandleFinalizer callback);
DART_EXPORT void Dart_DeleteWeakPersistentHandle(
@@ -484,8 +488,10 @@
* \param object An object.
* \param peer A pointer to a native object or NULL. This value is
* provided to callback when it is invoked.
+ * \param external_allocation_size The number of externally allocated
+ * bytes for peer. Used to inform the garbage collector.
* \param callback A function pointer that will be invoked sometime
- * after the object is garbage collected.
+ * after the object is garbage collected, unless the handle has been deleted.
*
* \return Success if the prologue weak persistent handle was created.
* Otherwise, returns an error.
@@ -493,6 +499,7 @@
DART_EXPORT Dart_WeakPersistentHandle Dart_NewPrologueWeakPersistentHandle(
Dart_Handle object,
void* peer,
+ intptr_t external_allocation_size,
Dart_WeakPersistentHandleFinalizer callback);
/**
@@ -549,56 +556,24 @@
typedef void (*Dart_GcEpilogueCallback)();
/**
- * Adds a garbage collection prologue callback.
+ * Adds garbage collection callbacks (prologue and epilogue).
*
- * \param callback A function pointer to a prologue callback function.
- * This function must not have been previously added as a prologue
- * callback.
+ * \param prologue_callback A function pointer to a prologue callback function.
+ * A prologue callback function should not be already set when this function
+ * is called. A NULL value removes the existing prologue callback function
+ * if any.
*
- * \return Success if the callback was added. Otherwise, returns an
+ * \param epilogue_callback A function pointer to an epilogue callback function.
+ * An epilogue callback function should not be already set when this function
+ * is called. A NULL value removes the existing epilogue callback function
+ * if any.
+ *
+ * \return Success if the callbacks were added. Otherwise, returns an
* error handle.
*/
-DART_EXPORT Dart_Handle Dart_AddGcPrologueCallback(
- Dart_GcPrologueCallback callback);
-
-/**
- * Removes a garbage collection prologue callback.
- *
- * \param callback A function pointer to a prologue callback function.
- * This function must have been added as a prologue callback.
- *
- * \return Success if the callback was removed. Otherwise, returns an
- * error handle.
- */
-DART_EXPORT Dart_Handle Dart_RemoveGcPrologueCallback(
- Dart_GcPrologueCallback callback);
-
-/**
- * Adds a garbage collection epilogue callback.
- *
- * \param callback A function pointer to an epilogue callback
- * function. This function must not have been previously added as
- * an epilogue callback.
- *
- * \return Success if the callback was added. Otherwise, returns an
- * error handle.
- */
-DART_EXPORT Dart_Handle Dart_AddGcEpilogueCallback(
- Dart_GcEpilogueCallback callback);
-
-/**
- * Removes a garbage collection epilogue callback.
- *
- * \param callback A function pointer to an epilogue callback
- * function. This function must have been added as an epilogue
- * callback.
- *
- * \return Success if the callback was removed. Otherwise, returns an
- * error handle.
- */
-DART_EXPORT Dart_Handle Dart_RemoveGcEpilogueCallback(
- Dart_GcEpilogueCallback callback);
-
+DART_EXPORT Dart_Handle Dart_SetGcCallbacks(
+ Dart_GcPrologueCallback prologue_callback,
+ Dart_GcEpilogueCallback epilogue_callback);
/*
* ==========================
@@ -863,8 +838,9 @@
* isolate. */
/**
- * Shuts down the current isolate. After this call, the current
- * isolate is NULL.
+ * Shuts down the current isolate. After this call, the current isolate
+ * is NULL. Invokes the shutdown callback and any callbacks of remaining
+ * weak persistent handles.
*
* Requires there to be a current isolate.
*/
diff --git a/runtime/lib/integers.dart b/runtime/lib/integers.dart
index 9c503c4..5c9f7d8 100644
--- a/runtime/lib/integers.dart
+++ b/runtime/lib/integers.dart
@@ -260,40 +260,174 @@
int _shrFromInt(int other) native "Smi_shrFromInt";
int _shlFromInt(int other) native "Smi_shlFromInt";
+ /**
+ * The digits of '00', '01', ... '99' as a single array.
+ *
+ * Get the digits of `n`, with `0 <= n < 100`, as
+ * `_digitTable[n * 2]` and `_digitTable[n * 2 + 1]`.
+ */
+ static const _digitTable = const [
+ 0x30, 0x30, 0x30, 0x31, 0x30, 0x32, 0x30, 0x33,
+ 0x30, 0x34, 0x30, 0x35, 0x30, 0x36, 0x30, 0x37,
+ 0x30, 0x38, 0x30, 0x39, 0x31, 0x30, 0x31, 0x31,
+ 0x31, 0x32, 0x31, 0x33, 0x31, 0x34, 0x31, 0x35,
+ 0x31, 0x36, 0x31, 0x37, 0x31, 0x38, 0x31, 0x39,
+ 0x32, 0x30, 0x32, 0x31, 0x32, 0x32, 0x32, 0x33,
+ 0x32, 0x34, 0x32, 0x35, 0x32, 0x36, 0x32, 0x37,
+ 0x32, 0x38, 0x32, 0x39, 0x33, 0x30, 0x33, 0x31,
+ 0x33, 0x32, 0x33, 0x33, 0x33, 0x34, 0x33, 0x35,
+ 0x33, 0x36, 0x33, 0x37, 0x33, 0x38, 0x33, 0x39,
+ 0x34, 0x30, 0x34, 0x31, 0x34, 0x32, 0x34, 0x33,
+ 0x34, 0x34, 0x34, 0x35, 0x34, 0x36, 0x34, 0x37,
+ 0x34, 0x38, 0x34, 0x39, 0x35, 0x30, 0x35, 0x31,
+ 0x35, 0x32, 0x35, 0x33, 0x35, 0x34, 0x35, 0x35,
+ 0x35, 0x36, 0x35, 0x37, 0x35, 0x38, 0x35, 0x39,
+ 0x36, 0x30, 0x36, 0x31, 0x36, 0x32, 0x36, 0x33,
+ 0x36, 0x34, 0x36, 0x35, 0x36, 0x36, 0x36, 0x37,
+ 0x36, 0x38, 0x36, 0x39, 0x37, 0x30, 0x37, 0x31,
+ 0x37, 0x32, 0x37, 0x33, 0x37, 0x34, 0x37, 0x35,
+ 0x37, 0x36, 0x37, 0x37, 0x37, 0x38, 0x37, 0x39,
+ 0x38, 0x30, 0x38, 0x31, 0x38, 0x32, 0x38, 0x33,
+ 0x38, 0x34, 0x38, 0x35, 0x38, 0x36, 0x38, 0x37,
+ 0x38, 0x38, 0x38, 0x39, 0x39, 0x30, 0x39, 0x31,
+ 0x39, 0x32, 0x39, 0x33, 0x39, 0x34, 0x39, 0x35,
+ 0x39, 0x36, 0x39, 0x37, 0x39, 0x38, 0x39, 0x39
+ ];
+
+ // Powers of 10 above 1000000 are indistinguishable.
+ static const int _POW_10_7 = 10000000;
+ static const int _POW_10_8 = 100000000;
+ static const int _POW_10_9 = 1000000000;
+ static const int _POW_10_10 = 10000000000;
+
+ // Find the number of decimal digits in a positive smi.
+ static int _positiveBase10Length(var smi) {
+ // A positive smi has length <= 19 if 63-bit, <=10 if 31-bit.
+ // Avoid comparing a 31-bit smi to a non-smi.
+ if (smi < 1000) return 3;
+ if (smi < 10000) return 4;
+ if (smi < _POW_10_7) {
+ if (smi < 100000) return 5;
+ if (smi < 1000000) return 6;
+ return 7;
+ }
+ if (smi < _POW_10_10) {
+ if (smi < _POW_10_8) return 8;
+ if (smi < _POW_10_9) return 9;
+ return 10;
+ }
+ smi = smi ~/ _POW_10_10;
+ if (smi < 10) return 11;
+ if (smi < 100) return 12;
+ return 10 + _positiveBase10Length(smi);
+ }
+
String toString() {
- if (this == 0) return "0";
- var reversed = _toStringBuffer;
- var negative = false;
- var val = this;
- int index = 0;
-
- if (this < 0) {
- negative = true;
- // Handle the first digit as negative to avoid negating the minimum
- // smi, for which the negation is not a smi.
- int digit = -(val.remainder(10));
- reversed[index++] = digit + 0x30;
- val = -(val ~/ 10);
+ if (this < 0) return _negativeToString(this);
+ // Inspired by Andrei Alexandrescu: "Three Optimization Tips for C++"
+ // Avoid expensive remainder operation by doing it on more than
+ // one digit at a time.
+ const int DIGIT_ZERO = 0x30;
+ if (this < 10) {
+ return _OneByteString._allocate(1).._setAt(0, DIGIT_ZERO + this);
}
-
- while (val > 0) {
- int digit = val % 10;
- val = val ~/ 10;
- reversed[index++] = (digit + 0x30);
+ if (this < 100) {
+ int digitIndex = 2 * this;
+ return _OneByteString._allocate(2)
+ .._setAt(0, _digitTable[digitIndex])
+ .._setAt(1, _digitTable[digitIndex + 1]);
}
- if (negative) reversed[index++] = 0x2D; // '-'.
-
- _OneByteString string = _OneByteString._allocate(index);
- for (int i = 0, j = index; i < index; i++) {
- string._setAt(i, reversed[--j]);
+ int length = _positiveBase10Length(this);
+ _OneByteString result = _OneByteString._allocate(length);
+ int index = length - 1;
+ var smi = this;
+ do {
+ // Two digits at a time.
+ var twoDigits = smi.remainder(100);
+ smi = smi ~/ 100;
+ int digitIndex = twoDigits * 2;
+ result._setAt(index, _digitTable[digitIndex + 1]);
+ result._setAt(index - 1, _digitTable[digitIndex]);
+ index -= 2;
+ } while (smi >= 100);
+ if (smi < 10) {
+ // Character code for '0'.
+ result._setAt(index, DIGIT_ZERO + smi);
+ } else {
+ // No remainder for this case.
+ int digitIndex = smi * 2;
+ result._setAt(index, _digitTable[digitIndex + 1]);
+ result._setAt(index - 1, _digitTable[digitIndex]);
}
- return string;
+ return result;
+ }
+
+ // Find the number of decimal digits in a negative smi.
+ static int _negativeBase10Length(var negSmi) {
+ // A negative smi has length <= 19 if 63-bit, <=10 if 31-bit.
+ // Avoid comparing a 31-bit smi to a non-smi.
+ if (negSmi > -1000) return 3;
+ if (negSmi > -10000) return 4;
+ if (negSmi > -_POW_10_7) {
+ if (negSmi > -100000) return 5;
+ if (negSmi > -1000000) return 6;
+ return 7;
+ }
+ if (negSmi > -_POW_10_10) {
+ if (negSmi > -_POW_10_8) return 8;
+ if (negSmi > -_POW_10_9) return 9;
+ return 10;
+ }
+ negSmi = negSmi ~/ _POW_10_10;
+ if (negSmi > -10) return 11;
+ if (negSmi > -100) return 12;
+ return 10 + _negativeBase10Length(negSmi);
+ }
+
+ // Convert a negative smi to a string.
+ // Doesn't negate the smi to avoid negating the most negative smi, which
+ // would become a non-smi.
+ static String _negativeToString(int negSmi) {
+ // Character code for '-'
+ const int MINUS_SIGN = 0x2d;
+ // Character code for '0'.
+ const int DIGIT_ZERO = 0x30;
+ if (negSmi > -10) {
+ return _OneByteString._allocate(2).._setAt(0, MINUS_SIGN)
+ .._setAt(1, DIGIT_ZERO - negSmi);
+ }
+ if (negSmi > -100) {
+ int digitIndex = 2 * -negSmi;
+ return _OneByteString._allocate(3)
+ .._setAt(0, MINUS_SIGN)
+ .._setAt(1, _digitTable[digitIndex])
+ .._setAt(2, _digitTable[digitIndex + 1]);
+ }
+ // Number of digits, not including minus.
+ int digitCount = _negativeBase10Length(negSmi);
+ _OneByteString result = _OneByteString._allocate(digitCount + 1);
+ result._setAt(0, MINUS_SIGN); // '-'.
+ int index = digitCount;
+ do {
+ var twoDigits = negSmi.remainder(100);
+ negSmi = negSmi ~/ 100;
+ int digitIndex = -twoDigits * 2;
+ result._setAt(index, _digitTable[digitIndex + 1]);
+ result._setAt(index - 1, _digitTable[digitIndex]);
+ index -= 2;
+ } while (negSmi <= -100);
+ if (negSmi > -10) {
+ result._setAt(index, DIGIT_ZERO - negSmi);
+ } else {
+ // No remainder necessary for this case.
+ int digitIndex = -negSmi * 2;
+ result._setAt(index, _digitTable[digitIndex + 1]);
+ result._setAt(index - 1, _digitTable[digitIndex]);
+ }
+ return result;
}
}
-// Reusable buffer used by smi.toString.
-final List _toStringBuffer = new Uint8List(20);
-
// Represents integers that cannot be represented by Smi but fit into 64bits.
class _Mint extends _IntegerImplementation implements int {
factory _Mint._uninstantiable() {
diff --git a/runtime/lib/mirrors.cc b/runtime/lib/mirrors.cc
index 94cda1b..098ef1e 100644
--- a/runtime/lib/mirrors.cc
+++ b/runtime/lib/mirrors.cc
@@ -376,6 +376,111 @@
}
+static RawInstance* CreateCombinatorMirror(const Object& identifiers,
+ bool is_show) {
+ const Array& args = Array::Handle(Array::New(2));
+ args.SetAt(0, identifiers);
+ args.SetAt(1, Bool::Get(is_show));
+ return CreateMirror(Symbols::_LocalCombinatorMirror(), args);
+}
+
+
+static RawInstance* CreateLibraryDependencyMirror(const Instance& importer,
+ const Namespace& ns,
+ const String& prefix,
+ bool is_import) {
+ const Library& importee = Library::Handle(ns.library());
+ const Instance& importee_mirror =
+ Instance::Handle(CreateLibraryMirror(importee));
+
+ const Array& show_names = Array::Handle(ns.show_names());
+ const Array& hide_names = Array::Handle(ns.hide_names());
+ intptr_t n = show_names.IsNull() ? 0 : show_names.Length();
+ intptr_t m = hide_names.IsNull() ? 0 : hide_names.Length();
+ const Array& combinators = Array::Handle(Array::New(n + m));
+ Object& t = Object::Handle();
+ intptr_t i = 0;
+ for (intptr_t j = 0; j < n; j++) {
+ t = show_names.At(j);
+ t = CreateCombinatorMirror(t, true);
+ combinators.SetAt(i++, t);
+ }
+ for (intptr_t j = 0; j < m; j++) {
+ t = hide_names.At(j);
+ t = CreateCombinatorMirror(t, false);
+ combinators.SetAt(i++, t);
+ }
+
+ Object& metadata = Object::Handle(ns.GetMetadata());
+ if (metadata.IsError()) {
+ ThrowInvokeError(Error::Cast(metadata));
+ UNREACHABLE();
+ }
+
+ const Array& args = Array::Handle(Array::New(6));
+ args.SetAt(0, importer);
+ args.SetAt(1, importee_mirror);
+ args.SetAt(2, combinators);
+ args.SetAt(3, prefix);
+ args.SetAt(4, Bool::Get(is_import));
+ args.SetAt(5, metadata);
+ // is_deferred?
+ return CreateMirror(Symbols::_LocalLibraryDependencyMirror(), args);
+}
+
+
+DEFINE_NATIVE_ENTRY(LibraryMirror_libraryDependencies, 2) {
+ GET_NON_NULL_NATIVE_ARGUMENT(Instance, lib_mirror, arguments->NativeArgAt(0));
+ GET_NON_NULL_NATIVE_ARGUMENT(MirrorReference, ref, arguments->NativeArgAt(1));
+ const Library& lib = Library::Handle(ref.GetLibraryReferent());
+
+ Array& ports = Array::Handle();
+ Namespace& ns = Namespace::Handle();
+ Instance& dep = Instance::Handle();
+ String& prefix = String::Handle();
+ GrowableObjectArray& deps =
+ GrowableObjectArray::Handle(GrowableObjectArray::New());
+
+ // Unprefixed imports.
+ ports = lib.imports();
+ for (intptr_t i = 0; i < ports.Length(); i++) {
+ ns ^= ports.At(i);
+ if (!ns.IsNull()) {
+ dep = CreateLibraryDependencyMirror(lib_mirror, ns, prefix, true);
+ deps.Add(dep);
+ }
+ }
+
+ // Exports.
+ ports = lib.exports();
+ for (intptr_t i = 0; i < ports.Length(); i++) {
+ ns ^= ports.At(i);
+ dep = CreateLibraryDependencyMirror(lib_mirror, ns, prefix, false);
+ deps.Add(dep);
+ }
+
+ // Prefixed imports.
+ DictionaryIterator entries(lib);
+ Object& entry = Object::Handle();
+ while (entries.HasNext()) {
+ entry = entries.GetNext();
+ if (entry.IsLibraryPrefix()) {
+ const LibraryPrefix& lib_prefix = LibraryPrefix::Cast(entry);
+ prefix = lib_prefix.name();
+ ports = lib_prefix.imports();
+ for (intptr_t i = 0; i < ports.Length(); i++) {
+ ns ^= ports.At(i);
+ if (!ns.IsNull()) {
+ dep = CreateLibraryDependencyMirror(lib_mirror, ns, prefix, true);
+ deps.Add(dep);
+ }
+ }
+ }
+ }
+
+ return deps.raw();
+}
+
static RawInstance* CreateTypeMirror(const AbstractType& type) {
if (type.IsTypeRef()) {
AbstractType& ref_type = AbstractType::Handle(TypeRef::Cast(type).type());
@@ -1871,37 +1976,27 @@
if (function.IsNull()) {
// Didn't find a method: try to find a getter and invoke call on its result.
- const String& getter_name =
- String::Handle(Field::GetterName(function_name));
- function = library.LookupLocalFunction(getter_name);
- if (!function.IsNull()) {
- // Invoke getter.
- const Object& getter_result = Object::Handle(
- DartEntry::InvokeFunction(function, Object::empty_array()));
- if (getter_result.IsError()) {
- ThrowInvokeError(Error::Cast(getter_result));
- UNREACHABLE();
- }
- // Make room for the closure (receiver) in arguments.
- intptr_t numArgs = args.Length();
- const Array& call_args = Array::Handle(Array::New(numArgs + 1));
- Object& temp = Object::Handle();
- for (int i = 0; i < numArgs; i++) {
- temp = args.At(i);
- call_args.SetAt(i + 1, temp);
- }
- call_args.SetAt(0, getter_result);
- const Array& call_args_descriptor_array =
- Array::Handle(ArgumentsDescriptor::New(call_args.Length(), arg_names));
- // Call closure.
- const Object& call_result = Object::Handle(
- DartEntry::InvokeClosure(call_args, call_args_descriptor_array));
- if (call_result.IsError()) {
- ThrowInvokeError(Error::Cast(call_result));
- UNREACHABLE();
- }
- return call_result.raw();
+ const Instance& getter_result =
+ Instance::Handle(InvokeLibraryGetter(library, function_name, true));
+ // Make room for the closure (receiver) in arguments.
+ intptr_t numArgs = args.Length();
+ const Array& call_args = Array::Handle(Array::New(numArgs + 1));
+ Object& temp = Object::Handle();
+ for (int i = 0; i < numArgs; i++) {
+ temp = args.At(i);
+ call_args.SetAt(i + 1, temp);
}
+ call_args.SetAt(0, getter_result);
+ const Array& call_args_descriptor_array =
+ Array::Handle(ArgumentsDescriptor::New(call_args.Length(), arg_names));
+ // Call closure.
+ const Object& call_result = Object::Handle(
+ DartEntry::InvokeClosure(call_args, call_args_descriptor_array));
+ if (call_result.IsError()) {
+ ThrowInvokeError(Error::Cast(call_result));
+ UNREACHABLE();
+ }
+ return call_result.raw();
}
const Array& args_descriptor_array =
diff --git a/runtime/lib/mirrors_impl.dart b/runtime/lib/mirrors_impl.dart
index acb421b..bb8b56e 100644
--- a/runtime/lib/mirrors_impl.dart
+++ b/runtime/lib/mirrors_impl.dart
@@ -155,18 +155,6 @@
String toString() => "IsolateMirror on '$debugName'";
}
-class _InvocationTrampoline implements Function {
- final ObjectMirror _receiver;
- final Symbol _selector;
- _InvocationTrampoline(this._receiver, this._selector);
- noSuchMethod(Invocation msg) {
- if (msg.memberName != #call) return super.noSuchMethod(msg);
- return _receiver.invoke(_selector,
- msg.positionalArguments,
- msg.namedArguments);
- }
-}
-
class _SyntheticAccessor implements MethodMirror {
final DeclarationMirror owner;
final Symbol simpleName;
@@ -321,23 +309,6 @@
return identityHashCode(_reflectee) ^ 0x36363636;
}
- Function operator [](Symbol selector) {
- bool found = false;
- for (ClassMirror c = type; c != null; c = c.superclass) {
- var target = c._methods[selector];
- if (target != null && !target.isStatic && target.isRegularMethod) {
- found = true;
- break;
- }
- }
- if (!found) {
- throw new ArgumentError(
- "${MirrorSystem.getName(type.simpleName)} has no instance method "
- "${MirrorSystem.getName(selector)}");
- }
- return new _InvocationTrampoline(this, selector);
- }
-
// TODO(16539): Make these weak or soft.
static var _getFieldClosures = new HashMap();
static var _setFieldClosures = new HashMap();
@@ -814,16 +785,6 @@
String toString() => "ClassMirror on '${MirrorSystem.getName(simpleName)}'";
- Function operator [](Symbol selector) {
- var target = _methods[selector];
- if (target == null || !target.isStatic || !target.isRegularMethod) {
- throw new ArgumentError(
- "${MirrorSystem.getName(simpleName)} has no static method "
- "${MirrorSystem.getName(selector)}");
- }
- return new _InvocationTrampoline(this, selector);
- }
-
InstanceMirror newInstance(Symbol constructorName,
List positionalArguments,
[Map<Symbol, dynamic> namedArguments]) {
@@ -1257,14 +1218,6 @@
return _cachedMembers;
}
- Map<Symbol, MethodMirror> _cachedFunctions;
- Map<Symbol, MethodMirror> get _functions {
- if (_cachedFunctions == null) {
- _cachedFunctions = _filterMap(_members, (key, value) => (value is MethodMirror));
- }
- return _cachedFunctions;
- }
-
List<InstanceMirror> get metadata {
// Get the metadata objects, convert them into InstanceMirrors using
// reflect() and then make them into a Dart list.
@@ -1280,16 +1233,17 @@
String toString() => "LibraryMirror on '${_n(simpleName)}'";
- Function operator [](Symbol selector) {
- var target = _functions[selector];
- if (target == null || !target.isRegularMethod) {
- throw new ArgumentError(
- "${MirrorSystem.getName(simpleName)} has no top-level method "
- "${MirrorSystem.getName(selector)}");
+ var _cachedLibraryDependencies;
+ get libraryDependencies {
+ if (_cachedLibraryDependencies == null) {
+ _cachedLibraryDependencies = _libraryDependencies(_reflectee);
}
- return new _InvocationTrampoline(this, selector);
+ return _cachedLibraryDependencies;
}
+ _libraryDependencies(reflectee)
+ native 'LibraryMirror_libraryDependencies';
+
_invoke(reflectee, memberName, arguments, argumentNames)
native 'LibraryMirror_invoke';
@@ -1303,6 +1257,37 @@
native "LibraryMirror_members";
}
+class _LocalLibraryDependencyMirror
+ extends _LocalMirror implements LibraryDependencyMirror {
+ final LibraryMirror sourceLibrary;
+ final LibraryMirror targetLibrary;
+ final List<CombinatorMirror> combinators;
+ final Symbol prefix;
+ final bool isImport;
+ final List<InstanceMirror> metadata;
+
+ _LocalLibraryDependencyMirror(this.sourceLibrary,
+ this.targetLibrary,
+ this.combinators,
+ prefixString,
+ this.isImport,
+ unwrappedMetadata)
+ : prefix = _s(prefixString),
+ metadata = new UnmodifiableListView(unwrappedMetadata.map(reflect));
+
+ bool get isExport => !isImport;
+}
+
+class _LocalCombinatorMirror extends _LocalMirror implements CombinatorMirror {
+ final List<Symbol> identifiers;
+ final bool isShow;
+
+ _LocalCombinatorMirror(identifierString, this.isShow)
+ : this.identifiers = [_s(identifierString)];
+
+ bool get isHide => !isShow;
+}
+
class _LocalMethodMirror extends _LocalDeclarationMirror
implements MethodMirror {
final bool isStatic;
diff --git a/runtime/lib/string_patch.dart b/runtime/lib/string_patch.dart
index 1bececf..667a087 100644
--- a/runtime/lib/string_patch.dart
+++ b/runtime/lib/string_patch.dart
@@ -294,12 +294,50 @@
}
}
if ((first == 0) && (last == (len - 1))) {
- // Returns this string if it does not have leading or trailing
+ // Returns this string since it does not have leading or trailing
// whitespaces.
return this;
- } else {
- return _substringUnchecked(first, last + 1);
}
+ return _substringUnchecked(first, last + 1);
+ }
+
+ String trimLeft() {
+ final len = this.length;
+ int first = 0;
+ for (; first < len; first++) {
+ if (!_isWhitespace(this.codeUnitAt(first))) {
+ break;
+ }
+ }
+ if (len == first) {
+ // String contains only whitespaces.
+ return "";
+ }
+ if (first == 0) {
+ // Returns this string since it does not have leading or trailing
+ // whitespaces.
+ return this;
+ }
+ return _substringUnchecked(first, len);
+ }
+
+ String trimRight() {
+ final len = this.length;
+ int last = len - 1;
+ for (; last >= 0; last--) {
+ if (!_isWhitespace(this.codeUnitAt(last))) {
+ break;
+ }
+ }
+ if (last == -1) {
+ // String contains only whitespaces.
+ return "";
+ }
+ if (last == (len - 1)) {
+ // Returns this string since it does not have trailing whitespaces.
+ return this;
+ }
+ return _substringUnchecked(0, last + 1);
}
String operator*(int times) {
diff --git a/runtime/lib/typed_data.cc b/runtime/lib/typed_data.cc
index 65f5e74..e77ccdd 100644
--- a/runtime/lib/typed_data.cc
+++ b/runtime/lib/typed_data.cc
@@ -71,58 +71,97 @@
template <typename DstType, typename SrcType>
static RawBool* CopyData(const Instance& dst, const Instance& src,
const Smi& dst_start, const Smi& src_start,
- const Smi& length) {
+ const Smi& length,
+ bool clamped) {
const DstType& dst_array = DstType::Cast(dst);
const SrcType& src_array = SrcType::Cast(src);
const intptr_t dst_offset_in_bytes = dst_start.Value();
const intptr_t src_offset_in_bytes = src_start.Value();
const intptr_t length_in_bytes = length.Value();
- if (dst_array.ElementType() != src_array.ElementType()) {
- return Bool::False().raw();
- }
ASSERT(Utils::RangeCheck(
src_offset_in_bytes, length_in_bytes, src_array.LengthInBytes()));
ASSERT(Utils::RangeCheck(
dst_offset_in_bytes, length_in_bytes, dst_array.LengthInBytes()));
- TypedData::Copy<DstType, SrcType>(dst_array, dst_offset_in_bytes,
- src_array, src_offset_in_bytes,
- length_in_bytes);
+ if (clamped) {
+ TypedData::ClampedCopy<DstType, SrcType>(dst_array, dst_offset_in_bytes,
+ src_array, src_offset_in_bytes,
+ length_in_bytes);
+ } else {
+ TypedData::Copy<DstType, SrcType>(dst_array, dst_offset_in_bytes,
+ src_array, src_offset_in_bytes,
+ length_in_bytes);
+ }
return Bool::True().raw();
}
-DEFINE_NATIVE_ENTRY(TypedData_setRange, 5) {
- GET_NON_NULL_NATIVE_ARGUMENT(Instance, dst, arguments->NativeArgAt(0));
- GET_NON_NULL_NATIVE_ARGUMENT(Smi, dst_start, arguments->NativeArgAt(1));
- GET_NON_NULL_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(2));
- GET_NON_NULL_NATIVE_ARGUMENT(Instance, src, arguments->NativeArgAt(3));
- GET_NON_NULL_NATIVE_ARGUMENT(Smi, src_start, arguments->NativeArgAt(4));
+
+static bool IsClamped(intptr_t cid) {
+ switch (cid) {
+ case kTypedDataUint8ClampedArrayCid:
+ case kExternalTypedDataUint8ClampedArrayCid:
+ case kTypedDataUint8ClampedArrayViewCid:
+ return true;
+ default:
+ return false;
+ }
+}
+
+
+static bool IsUint8(intptr_t cid) {
+ switch (cid) {
+ case kTypedDataUint8ClampedArrayCid:
+ case kExternalTypedDataUint8ClampedArrayCid:
+ case kTypedDataUint8ClampedArrayViewCid:
+ case kTypedDataUint8ArrayCid:
+ case kExternalTypedDataUint8ArrayCid:
+ case kTypedDataUint8ArrayViewCid:
+ return true;
+ default:
+ return false;
+ }
+}
+
+
+DEFINE_NATIVE_ENTRY(TypedData_setRange, 7) {
+ const Instance& dst = Instance::CheckedHandle(arguments->NativeArgAt(0));
+ const Smi& dst_start = Smi::CheckedHandle(arguments->NativeArgAt(1));
+ const Smi& length = Smi::CheckedHandle(arguments->NativeArgAt(2));
+ const Instance& src = Instance::CheckedHandle(arguments->NativeArgAt(3));
+ const Smi& src_start = Smi::CheckedHandle(arguments->NativeArgAt(4));
+ const Smi& to_cid_smi = Smi::CheckedHandle(arguments->NativeArgAt(5));
+ const Smi& from_cid_smi = Smi::CheckedHandle(arguments->NativeArgAt(6));
if (length.Value() < 0) {
const String& error = String::Handle(String::NewFormatted(
"length (%" Pd ") must be non-negative", length.Value()));
Exceptions::ThrowArgumentError(error);
}
+ const intptr_t to_cid = to_cid_smi.Value();
+ const intptr_t from_cid = from_cid_smi.Value();
+
+ const bool needs_clamping = IsClamped(to_cid) && !IsUint8(from_cid);
if (dst.IsTypedData()) {
if (src.IsTypedData()) {
return CopyData<TypedData, TypedData>(
- dst, src, dst_start, src_start, length);
+ dst, src, dst_start, src_start, length, needs_clamping);
} else if (src.IsExternalTypedData()) {
return CopyData<TypedData, ExternalTypedData>(
- dst, src, dst_start, src_start, length);
+ dst, src, dst_start, src_start, length, needs_clamping);
}
} else if (dst.IsExternalTypedData()) {
if (src.IsTypedData()) {
return CopyData<ExternalTypedData, TypedData>(
- dst, src, dst_start, src_start, length);
+ dst, src, dst_start, src_start, length, needs_clamping);
} else if (src.IsExternalTypedData()) {
return CopyData<ExternalTypedData, ExternalTypedData>(
- dst, src, dst_start, src_start, length);
+ dst, src, dst_start, src_start, length, needs_clamping);
}
}
UNREACHABLE();
return Bool::False().raw();
}
+
// We check the length parameter against a possible maximum length for the
// array based on available physical addressable memory on the system. The
// maximum possible length is a scaled value of kSmiMax which is set up based
diff --git a/runtime/lib/typed_data.dart b/runtime/lib/typed_data.dart
index 49c8b20..53c59d1 100644
--- a/runtime/lib/typed_data.dart
+++ b/runtime/lib/typed_data.dart
@@ -56,8 +56,6 @@
int length]) {
return new _Uint8ClampedArrayView(buffer, offsetInBytes, length);
}
-
- bool _isClamped() { return true; }
}
@@ -528,8 +526,6 @@
return IterableMixinWorkaround.getRangeList(this, start, end);
}
- bool _isClamped() { return false; }
-
void setRange(int start, int end, Iterable from, [int skipCount = 0]) {
// Check ranges.
if ((start < 0) || (start > length)) {
@@ -551,17 +547,16 @@
}
if (from is _TypedListBase) {
- final needsClamping =
- this._isClamped() && (this._isClamped() != from._isClamped());
if (this.elementSizeInBytes == from.elementSizeInBytes) {
- if (needsClamping) {
+ if ((count < 10) && (from.buffer != this.buffer)) {
Lists.copy(from, skipCount, this, start, count);
return;
} else if (this.buffer._setRange(
- start * elementSizeInBytes + this.offsetInBytes,
- count * elementSizeInBytes,
- from.buffer,
- skipCount * elementSizeInBytes + from.offsetInBytes)) {
+ start * elementSizeInBytes + this.offsetInBytes,
+ count * elementSizeInBytes,
+ from.buffer,
+ skipCount * elementSizeInBytes + from.offsetInBytes,
+ this._cid, from._cid)) {
return;
}
} else if (from.buffer == this.buffer) {
@@ -602,11 +597,16 @@
// Internal utility methods.
// Returns true if operation succeeds.
- // Returns false if 'from' and 'this' do not have the same element types.
- // The copy occurs using a memory copy (no clamping, conversion, etc).
+ // 'fromCid' and 'toCid' may be cid-s of the views and therefore may not
+ // match the cids of 'this' and 'from'.
+ // Uses toCid and fromCid to decide if clamping is necessary.
+ // Element size of toCid and fromCid must match (test at caller).
bool _setRange(int startInBytes, int lengthInBytes,
- _TypedListBase from, int startFromInBytes)
+ _TypedListBase from, int startFromInBytes,
+ int toCid, int fromCid)
native "TypedData_setRange";
+
+ int get _cid native "Object_cid";
}
@@ -797,8 +797,6 @@
return new _Uint8ClampedArrayView(buffer, offsetInBytes, length);
}
- bool _isClamped() { return true; }
-
// Methods implementing List interface.
int operator[](int index) {
@@ -1624,8 +1622,6 @@
return _new(length);
}
- bool _isClamped() { return true; }
-
// Method(s) implementing the List interface.
int operator[](int index) {
@@ -2660,8 +2656,6 @@
}
- bool _isClamped() { return true; }
-
// Method(s) implementing List interface.
int operator[](int index) {
diff --git a/runtime/platform/globals.h b/runtime/platform/globals.h
index 78693ad..6001a2f 100644
--- a/runtime/platform/globals.h
+++ b/runtime/platform/globals.h
@@ -246,6 +246,10 @@
#define DART_UINT64_C(x) x##ULL
#endif
+// Replace calls to strtoll with _strtoi64 on Windows.
+#ifdef _MSC_VER
+#define strtoll _strtoi64
+#endif
// The following macro works on both 32 and 64-bit platforms.
// Usage: instead of writing 0x1234567890123456ULL
@@ -325,14 +329,12 @@
const int kNanosecondsPerSecond = (kNanosecondsPerMicrosecond *
kMicrosecondsPerSecond);
-// Helpers to round micro second times to human understandable values.
-inline double RoundMicrosecondsToSeconds(int64_t micros) {
- const int k1M = 1000000; // Converting us to secs.
- return static_cast<double>(micros + (k1M >> 1)) / k1M;
+// Helpers to scale micro second times to human understandable values.
+inline double MicrosecondsToSeconds(int64_t micros) {
+ return static_cast<double>(micros) / kMicrosecondsPerSecond;
}
-inline double RoundMicrosecondsToMilliseconds(int64_t micros) {
- const int k1K = 1000; // Conversting us to ms.
- return static_cast<double>(micros + (k1K >> 1)) / k1K;
+inline double MicrosecondsToMilliseconds(int64_t micros) {
+ return static_cast<double>(micros) / kMicrosecondsPerMillisecond;
}
// A macro to disallow the copy constructor and operator= functions.
diff --git a/runtime/tests/vm/vm.status b/runtime/tests/vm/vm.status
index e275f20..72e6022 100644
--- a/runtime/tests/vm/vm.status
+++ b/runtime/tests/vm/vm.status
@@ -43,7 +43,7 @@
cc/ThreadInterrupterMedium: Skip
cc/ThreadInterrupterLow: Skip
-[ $arch == simmips ]
+[ $arch == simmips && $arch == mips ]
cc/Service_Coverage: Skip # Dart bug 16250
[ $compiler == dart2js ]
@@ -68,9 +68,9 @@
*: Skip
[ $arch == mips ]
-cc/Sdc1Ldc1: Crash # Illegal instructions
-cc/Cop1CvtDL: Crash
-cc/Cop1CvtDL_neg: Crash
+cc/Cop1CvtDL: Crash # Illegal instructions
+cc/Cop1CvtDL_neg: Crash # Illegal instructions
+cc/StaticNonNullSumCallCodegen: Crash # dartbug.com/17440
[ $compiler == none && ($runtime == drt || $runtime == dartium) ]
dart/mirrored_compilation_error_test: Skip # Can't pass needed VM flag
diff --git a/runtime/vm/allocation.h b/runtime/vm/allocation.h
index 99a00b5..bb23185 100644
--- a/runtime/vm/allocation.h
+++ b/runtime/vm/allocation.h
@@ -62,16 +62,11 @@
BaseIsolate* isolate() const { return isolate_; }
- // The delete operator should be private instead of public, but unfortunately
- // the compiler complains when compiling the destructors for subclasses.
- void operator delete(void* pointer) { UNREACHABLE(); }
-
private:
- BaseIsolate* isolate_; // Current isolate for this stack resource.
+ BaseIsolate* const isolate_; // Current isolate for this stack resource.
StackResource* previous_;
- void* operator new(uword size);
-
+ DISALLOW_ALLOCATION();
DISALLOW_IMPLICIT_CONSTRUCTORS(StackResource);
};
diff --git a/runtime/vm/assembler_arm.cc b/runtime/vm/assembler_arm.cc
index cd02b44..2bbdc40 100644
--- a/runtime/vm/assembler_arm.cc
+++ b/runtime/vm/assembler_arm.cc
@@ -23,7 +23,6 @@
DEFINE_FLAG(bool, print_stop_message, true, "Print stop message.");
DECLARE_FLAG(bool, inline_alloc);
-
// Instruction encoding bits.
enum {
H = 1 << 5, // halfword (or byte)
@@ -1458,11 +1457,7 @@
if (ShifterOperand::CanHold(offset_hi, &shifter_op)) {
add(rd, PP, shifter_op, cond);
} else {
- movw(rd, Utils::Low16Bits(offset_hi));
- const uint16_t value_high = Utils::High16Bits(offset_hi);
- if (value_high != 0) {
- movt(rd, value_high, cond);
- }
+ LoadImmediate(rd, offset_hi, cond);
add(rd, PP, ShifterOperand(LR), cond);
}
ldr(rd, Address(rd, offset_lo), cond);
@@ -1485,11 +1480,7 @@
} else if (object.InVMHeap()) {
// Make sure that class CallPattern is able to decode this load immediate.
const int32_t object_raw = reinterpret_cast<int32_t>(object.raw());
- movw(rd, Utils::Low16Bits(object_raw), cond);
- const uint16_t value_high = Utils::High16Bits(object_raw);
- if (value_high != 0) {
- movt(rd, value_high, cond);
- }
+ LoadImmediate(rd, object_raw, cond);
} else {
// Make sure that class CallPattern is able to decode this load from the
// object pool.
@@ -1668,7 +1659,7 @@
}
-static int32_t DecodeLoadImmediate(int32_t movt, int32_t movw) {
+static int32_t DecodeARMv7LoadImmediate(int32_t movt, int32_t movw) {
int32_t offset = 0;
offset |= (movt & 0xf0000) << 12;
offset |= (movt & 0xfff) << 16;
@@ -1678,18 +1669,78 @@
}
+static int32_t DecodeARMv6LoadImmediate(int32_t mov, int32_t or1,
+ int32_t or2, int32_t or3) {
+ int32_t offset = 0;
+ offset |= (mov & 0xff) << 24;
+ offset |= (or1 & 0xff) << 16;
+ offset |= (or2 & 0xff) << 8;
+ offset |= (or3 & 0xff);
+ return offset;
+}
+
+
class PatchFarBranch : public AssemblerFixup {
public:
PatchFarBranch() {}
void Process(const MemoryRegion& region, intptr_t position) {
+ if (TargetCPUFeatures::arm_version() == ARMv6) {
+ ProcessARMv6(region, position);
+ } else {
+ ASSERT(TargetCPUFeatures::arm_version() == ARMv7);
+ ProcessARMv7(region, position);
+ }
+ }
+
+ private:
+ void ProcessARMv6(const MemoryRegion& region, intptr_t position) {
+ const int32_t mov = region.Load<int32_t>(position);
+ const int32_t or1 = region.Load<int32_t>(position + 1*Instr::kInstrSize);
+ const int32_t or2 = region.Load<int32_t>(position + 2*Instr::kInstrSize);
+ const int32_t or3 = region.Load<int32_t>(position + 3*Instr::kInstrSize);
+ const int32_t bx = region.Load<int32_t>(position + 4*Instr::kInstrSize);
+
+ if (((mov & 0xffffff00) == 0xe3a0c400) && // mov IP, (byte3 rot 4)
+ ((or1 & 0xffffff00) == 0xe38cc800) && // orr IP, IP, (byte2 rot 8)
+ ((or2 & 0xffffff00) == 0xe38ccc00) && // orr IP, IP, (byte1 rot 12)
+ ((or3 & 0xffffff00) == 0xe38cc000)) { // orr IP, IP, byte0
+ const int32_t offset = DecodeARMv6LoadImmediate(mov, or1, or2, or3);
+ const int32_t dest = region.start() + offset;
+ const int32_t dest0 = (dest & 0x000000ff);
+ const int32_t dest1 = (dest & 0x0000ff00) >> 8;
+ const int32_t dest2 = (dest & 0x00ff0000) >> 16;
+ const int32_t dest3 = (dest & 0xff000000) >> 24;
+ const int32_t patched_mov = 0xe3a0c400 | dest3;
+ const int32_t patched_or1 = 0xe38cc800 | dest2;
+ const int32_t patched_or2 = 0xe38ccc00 | dest1;
+ const int32_t patched_or3 = 0xe38cc000 | dest0;
+
+ region.Store<int32_t>(position + 0 * Instr::kInstrSize, patched_mov);
+ region.Store<int32_t>(position + 1 * Instr::kInstrSize, patched_or1);
+ region.Store<int32_t>(position + 2 * Instr::kInstrSize, patched_or2);
+ region.Store<int32_t>(position + 3 * Instr::kInstrSize, patched_or3);
+ return;
+ }
+
+ // If the offset loading instructions aren't there, we must have replaced
+ // the far branch with a near one, and so these instructions
+ // should be NOPs.
+ ASSERT((or1 == Instr::kNopInstruction) &&
+ (or2 == Instr::kNopInstruction) &&
+ (or3 == Instr::kNopInstruction) &&
+ (bx == Instr::kNopInstruction));
+ }
+
+
+ void ProcessARMv7(const MemoryRegion& region, intptr_t position) {
const int32_t movw = region.Load<int32_t>(position);
const int32_t movt = region.Load<int32_t>(position + Instr::kInstrSize);
const int32_t bx = region.Load<int32_t>(position + 2 * Instr::kInstrSize);
if (((movt & 0xfff0f000) == 0xe340c000) && // movt IP, high
((movw & 0xfff0f000) == 0xe300c000)) { // movw IP, low
- const int32_t offset = DecodeLoadImmediate(movt, movw);
+ const int32_t offset = DecodeARMv7LoadImmediate(movt, movw);
const int32_t dest = region.start() + offset;
const uint16_t dest_high = Utils::High16Bits(dest);
const uint16_t dest_low = Utils::Low16Bits(dest);
@@ -1704,7 +1755,8 @@
}
// If the offset loading instructions aren't there, we must have replaced
- // the far branch with a near one, and so these instructions should be NOPs.
+ // the far branch with a near one, and so these instructions
+ // should be NOPs.
ASSERT((movt == Instr::kNopInstruction) &&
(bx == Instr::kNopInstruction));
}
@@ -1714,11 +1766,8 @@
void Assembler::EmitFarBranch(Condition cond, int32_t offset, bool link) {
- const uint16_t low = Utils::Low16Bits(offset);
- const uint16_t high = Utils::High16Bits(offset);
buffer_.EmitFixup(new PatchFarBranch());
- movw(IP, low);
- movt(IP, high);
+ LoadPatchableImmediate(IP, offset);
if (link) {
blx(IP, cond);
} else {
@@ -1749,7 +1798,7 @@
}
-void Assembler::Bind(Label* label) {
+void Assembler::BindARMv6(Label* label) {
ASSERT(!label->IsBound());
intptr_t bound_pc = buffer_.Size();
while (label->IsLinked()) {
@@ -1759,34 +1808,45 @@
// Far branches are enabled and we can't encode the branch offset.
// Grab instructions that load the offset.
- const int32_t movw =
+ const int32_t mov =
buffer_.Load<int32_t>(position);
- const int32_t movt =
+ const int32_t or1 =
buffer_.Load<int32_t>(position + 1 * Instr::kInstrSize);
+ const int32_t or2 =
+ buffer_.Load<int32_t>(position + 2 * Instr::kInstrSize);
+ const int32_t or3 =
+ buffer_.Load<int32_t>(position + 3 * Instr::kInstrSize);
- // Change from relative to the branch to relative to the assembler buffer.
+ // Change from relative to the branch to relative to the assembler
+ // buffer.
dest = buffer_.Size();
- const uint16_t dest_high = Utils::High16Bits(dest);
- const uint16_t dest_low = Utils::Low16Bits(dest);
- const int32_t patched_movt =
- 0xe340c000 | ((dest_high >> 12) << 16) | (dest_high & 0xfff);
- const int32_t patched_movw =
- 0xe300c000 | ((dest_low >> 12) << 16) | (dest_low & 0xfff);
+ const int32_t dest0 = (dest & 0x000000ff);
+ const int32_t dest1 = (dest & 0x0000ff00) >> 8;
+ const int32_t dest2 = (dest & 0x00ff0000) >> 16;
+ const int32_t dest3 = (dest & 0xff000000) >> 24;
+ const int32_t patched_mov = 0xe3a0c400 | dest3;
+ const int32_t patched_or1 = 0xe38cc800 | dest2;
+ const int32_t patched_or2 = 0xe38ccc00 | dest1;
+ const int32_t patched_or3 = 0xe38cc000 | dest0;
// Rewrite the instructions.
- buffer_.Store<int32_t>(position, patched_movw);
- buffer_.Store<int32_t>(position + 1 * Instr::kInstrSize, patched_movt);
- label->position_ = DecodeLoadImmediate(movt, movw);
+ buffer_.Store<int32_t>(position + 0 * Instr::kInstrSize, patched_mov);
+ buffer_.Store<int32_t>(position + 1 * Instr::kInstrSize, patched_or1);
+ buffer_.Store<int32_t>(position + 2 * Instr::kInstrSize, patched_or2);
+ buffer_.Store<int32_t>(position + 3 * Instr::kInstrSize, patched_or3);
+ label->position_ = DecodeARMv6LoadImmediate(mov, or1, or2, or3);
} else if (use_far_branches() && CanEncodeBranchOffset(dest)) {
- // Far branches are enabled, but we can encode the branch offset.
-
// Grab instructions that load the offset, and the branch.
- const int32_t movw =
+ const int32_t mov =
buffer_.Load<int32_t>(position);
- const int32_t movt =
+ const int32_t or1 =
buffer_.Load<int32_t>(position + 1 * Instr::kInstrSize);
- const int32_t branch =
+ const int32_t or2 =
buffer_.Load<int32_t>(position + 2 * Instr::kInstrSize);
+ const int32_t or3 =
+ buffer_.Load<int32_t>(position + 3 * Instr::kInstrSize);
+ const int32_t branch =
+ buffer_.Load<int32_t>(position + 4 * Instr::kInstrSize);
// Grab the branch condition, and encode the link bit.
const int32_t cond = branch & 0xf0000000;
@@ -1802,8 +1862,12 @@
Instr::kNopInstruction);
buffer_.Store<int32_t>(position + 2 * Instr::kInstrSize,
Instr::kNopInstruction);
+ buffer_.Store<int32_t>(position + 3 * Instr::kInstrSize,
+ Instr::kNopInstruction);
+ buffer_.Store<int32_t>(position + 4 * Instr::kInstrSize,
+ Instr::kNopInstruction);
- label->position_ = DecodeLoadImmediate(movt, movw);
+ label->position_ = DecodeARMv6LoadImmediate(mov, or1, or2, or3);
} else {
int32_t next = buffer_.Load<int32_t>(position);
int32_t encoded = Assembler::EncodeBranchOffset(dest, next);
@@ -1815,6 +1879,84 @@
}
+void Assembler::BindARMv7(Label* label) {
+ ASSERT(!label->IsBound());
+ intptr_t bound_pc = buffer_.Size();
+ while (label->IsLinked()) {
+ const int32_t position = label->Position();
+ int32_t dest = bound_pc - position;
+ if (use_far_branches() && !CanEncodeBranchOffset(dest)) {
+ // Far branches are enabled and we can't encode the branch offset.
+
+ // Grab instructions that load the offset.
+ const int32_t movw =
+ buffer_.Load<int32_t>(position + 0 * Instr::kInstrSize);
+ const int32_t movt =
+ buffer_.Load<int32_t>(position + 1 * Instr::kInstrSize);
+
+ // Change from relative to the branch to relative to the assembler
+ // buffer.
+ dest = buffer_.Size();
+ const uint16_t dest_high = Utils::High16Bits(dest);
+ const uint16_t dest_low = Utils::Low16Bits(dest);
+ const int32_t patched_movt =
+ 0xe340c000 | ((dest_high >> 12) << 16) | (dest_high & 0xfff);
+ const int32_t patched_movw =
+ 0xe300c000 | ((dest_low >> 12) << 16) | (dest_low & 0xfff);
+
+ // Rewrite the instructions.
+ buffer_.Store<int32_t>(position + 0 * Instr::kInstrSize, patched_movw);
+ buffer_.Store<int32_t>(position + 1 * Instr::kInstrSize, patched_movt);
+ label->position_ = DecodeARMv7LoadImmediate(movt, movw);
+ } else if (use_far_branches() && CanEncodeBranchOffset(dest)) {
+ // Far branches are enabled, but we can encode the branch offset.
+
+ // Grab instructions that load the offset, and the branch.
+ const int32_t movw =
+ buffer_.Load<int32_t>(position + 0 * Instr::kInstrSize);
+ const int32_t movt =
+ buffer_.Load<int32_t>(position + 1 * Instr::kInstrSize);
+ const int32_t branch =
+ buffer_.Load<int32_t>(position + 2 * Instr::kInstrSize);
+
+ // Grab the branch condition, and encode the link bit.
+ const int32_t cond = branch & 0xf0000000;
+ const int32_t link = (branch & 0x20) << 19;
+
+ // Encode the branch and the offset.
+ const int32_t new_branch = cond | link | 0x0a000000;
+ const int32_t encoded = EncodeBranchOffset(dest, new_branch);
+
+ // Write the encoded branch instruction followed by two nops.
+ buffer_.Store<int32_t>(position + 0 * Instr::kInstrSize,
+ encoded);
+ buffer_.Store<int32_t>(position + 1 * Instr::kInstrSize,
+ Instr::kNopInstruction);
+ buffer_.Store<int32_t>(position + 2 * Instr::kInstrSize,
+ Instr::kNopInstruction);
+
+ label->position_ = DecodeARMv7LoadImmediate(movt, movw);
+ } else {
+ int32_t next = buffer_.Load<int32_t>(position);
+ int32_t encoded = Assembler::EncodeBranchOffset(dest, next);
+ buffer_.Store<int32_t>(position, encoded);
+ label->position_ = Assembler::DecodeBranchOffset(next);
+ }
+ }
+ label->BindTo(bound_pc);
+}
+
+
+void Assembler::Bind(Label* label) {
+ if (TargetCPUFeatures::arm_version() == ARMv6) {
+ BindARMv6(label);
+ } else {
+ ASSERT(TargetCPUFeatures::arm_version() == ARMv7);
+ BindARMv7(label);
+ }
+}
+
+
bool Address::CanHoldLoadOffset(OperandSize type,
int32_t offset,
int32_t* offset_mask) {
@@ -2024,8 +2166,7 @@
// with this branch sequence.
// Contrarily to BranchLinkPatchable, BranchPatchable requires an instruction
// cache flush upon patching.
- movw(IP, Utils::Low16Bits(label->address()));
- movt(IP, Utils::High16Bits(label->address()));
+ LoadPatchableImmediate(IP, label->address());
bx(IP);
}
@@ -2064,6 +2205,43 @@
}
+void Assembler::LoadPatchableImmediate(
+ Register rd, int32_t value, Condition cond) {
+ if (TargetCPUFeatures::arm_version() == ARMv6) {
+ // This sequence is patched in a few places, and should remain fixed.
+ const uint32_t byte0 = (value & 0x000000ff);
+ const uint32_t byte1 = (value & 0x0000ff00) >> 8;
+ const uint32_t byte2 = (value & 0x00ff0000) >> 16;
+ const uint32_t byte3 = (value & 0xff000000) >> 24;
+ mov(rd, ShifterOperand(4, byte3), cond);
+ orr(rd, rd, ShifterOperand(8, byte2), cond);
+ orr(rd, rd, ShifterOperand(12, byte1), cond);
+ orr(rd, rd, ShifterOperand(byte0), cond);
+ } else {
+ ASSERT(TargetCPUFeatures::arm_version() == ARMv7);
+ const uint16_t value_low = Utils::Low16Bits(value);
+ const uint16_t value_high = Utils::High16Bits(value);
+ movw(rd, value_low, cond);
+ movt(rd, value_high, cond);
+ }
+}
+
+
+void Assembler::LoadDecodableImmediate(
+ Register rd, int32_t value, Condition cond) {
+ if (TargetCPUFeatures::arm_version() == ARMv6) {
+ LoadPatchableImmediate(rd, value, cond);
+ } else {
+ ASSERT(TargetCPUFeatures::arm_version() == ARMv7);
+ movw(rd, Utils::Low16Bits(value), cond);
+ const uint16_t value_high = Utils::High16Bits(value);
+ if (value_high != 0) {
+ movt(rd, value_high, cond);
+ }
+ }
+}
+
+
void Assembler::LoadImmediate(Register rd, int32_t value, Condition cond) {
ShifterOperand shifter_op;
if (ShifterOperand::CanHold(value, &shifter_op)) {
@@ -2071,11 +2249,7 @@
} else if (ShifterOperand::CanHold(~value, &shifter_op)) {
mvn(rd, shifter_op, cond);
} else {
- movw(rd, Utils::Low16Bits(value), cond);
- const uint16_t value_high = Utils::High16Bits(value);
- if (value_high != 0) {
- movt(rd, value_high, cond);
- }
+ LoadDecodableImmediate(rd, value, cond);
}
}
@@ -2241,7 +2415,7 @@
void Assembler::AddImmediate(Register rd, Register rn, int32_t value,
- Condition cond) {
+ Condition cond) {
if (value == 0) {
if (rd != rn) {
mov(rd, ShifterOperand(rn), cond);
@@ -2265,11 +2439,7 @@
mvn(IP, shifter_op, cond);
sub(rd, rn, ShifterOperand(IP), cond);
} else {
- movw(IP, Utils::Low16Bits(value), cond);
- const uint16_t value_high = Utils::High16Bits(value);
- if (value_high != 0) {
- movt(IP, value_high, cond);
- }
+ LoadDecodableImmediate(IP, value, cond);
add(rd, rn, ShifterOperand(IP), cond);
}
}
@@ -2292,11 +2462,7 @@
mvn(IP, shifter_op, cond);
subs(rd, rn, ShifterOperand(IP), cond);
} else {
- movw(IP, Utils::Low16Bits(value), cond);
- const uint16_t value_high = Utils::High16Bits(value);
- if (value_high != 0) {
- movt(IP, value_high, cond);
- }
+ LoadDecodableImmediate(IP, value, cond);
adds(rd, rn, ShifterOperand(IP), cond);
}
}
@@ -2319,11 +2485,7 @@
mvn(IP, shifter_op, cond);
sbc(rd, rn, ShifterOperand(IP), cond);
} else {
- movw(IP, Utils::Low16Bits(value), cond);
- const uint16_t value_high = Utils::High16Bits(value);
- if (value_high != 0) {
- movt(IP, value_high, cond);
- }
+ LoadDecodableImmediate(IP, value, cond);
adc(rd, rn, ShifterOperand(IP), cond);
}
}
diff --git a/runtime/vm/assembler_arm.h b/runtime/vm/assembler_arm.h
index 10d9a7f..479deb0 100644
--- a/runtime/vm/assembler_arm.h
+++ b/runtime/vm/assembler_arm.h
@@ -63,6 +63,7 @@
DISALLOW_COPY_AND_ASSIGN(Label);
};
+
// Encodes Addressing Mode 1 - Data-processing operands.
class ShifterOperand : public ValueObject {
public:
@@ -590,6 +591,8 @@
DRegister tmpl, DRegister tmpr);
// Load and Store. May clobber IP.
+ void LoadPatchableImmediate(Register rd, int32_t value, Condition cond = AL);
+ void LoadDecodableImmediate(Register rd, int32_t value, Condition cond = AL);
void LoadImmediate(Register rd, int32_t value, Condition cond = AL);
void LoadSImmediate(SRegister sd, float value, Condition cond = AL);
void LoadDImmediate(DRegister dd, double value,
@@ -755,6 +758,9 @@
int32_t AddObject(const Object& obj);
int32_t AddExternalLabel(const ExternalLabel* label);
+ void BindARMv6(Label* label);
+ void BindARMv7(Label* label);
+
class CodeComment : public ZoneAllocated {
public:
CodeComment(intptr_t pc_offset, const String& comment)
diff --git a/runtime/vm/assembler_arm_test.cc b/runtime/vm/assembler_arm_test.cc
index f4f4887..60880ab 100644
--- a/runtime/vm/assembler_arm_test.cc
+++ b/runtime/vm/assembler_arm_test.cc
@@ -59,9 +59,18 @@
ASSEMBLER_TEST_GENERATE(MovImm16, assembler) {
- __ movw(R0, 0x5678);
- __ movt(R0, 0x1234);
+#if defined(USING_SIMULATOR)
+ // ARMv7 is the default.
+ HostCPUFeatures::set_arm_version(ARMv6);
+ __ LoadDecodableImmediate(R0, 0x12345678 << 1);
+ HostCPUFeatures::set_arm_version(ARMv7);
+ __ LoadDecodableImmediate(R1, 0x12345678);
+ __ sub(R0, R0, ShifterOperand(R1));
__ bx(LR);
+#else
+ __ LoadDecodableImmediate(R0, 0x12345678);
+ __ bx(LR);
+#endif
}
diff --git a/runtime/vm/assembler_ia32.cc b/runtime/vm/assembler_ia32.cc
index 9d2f409..c071936 100644
--- a/runtime/vm/assembler_ia32.cc
+++ b/runtime/vm/assembler_ia32.cc
@@ -921,6 +921,17 @@
}
+void Assembler::shufpd(XmmRegister dst, XmmRegister src, const Immediate& imm) {
+ AssemblerBuffer::EnsureCapacity ensured(&buffer_);
+ EmitUint8(0x66);
+ EmitUint8(0x0F);
+ EmitUint8(0xC6);
+ EmitXmmRegisterOperand(dst, src);
+ ASSERT(imm.is_uint8());
+ EmitUint8(imm.value());
+}
+
+
void Assembler::subsd(XmmRegister dst, XmmRegister src) {
AssemblerBuffer::EnsureCapacity ensured(&buffer_);
EmitUint8(0xF2);
diff --git a/runtime/vm/assembler_ia32.h b/runtime/vm/assembler_ia32.h
index 1c88535..e21cc4c 100644
--- a/runtime/vm/assembler_ia32.h
+++ b/runtime/vm/assembler_ia32.h
@@ -438,6 +438,7 @@
void sqrtpd(XmmRegister dst);
void cvtps2pd(XmmRegister dst, XmmRegister src);
void cvtpd2ps(XmmRegister dst, XmmRegister src);
+ void shufpd(XmmRegister dst, XmmRegister src, const Immediate& mask);
void cvtsi2ss(XmmRegister dst, Register src);
void cvtsi2sd(XmmRegister dst, Register src);
diff --git a/runtime/vm/assembler_ia32_test.cc b/runtime/vm/assembler_ia32_test.cc
index a652b8f..99152cf 100644
--- a/runtime/vm/assembler_ia32_test.cc
+++ b/runtime/vm/assembler_ia32_test.cc
@@ -1746,6 +1746,34 @@
}
+ASSEMBLER_TEST_GENERATE(PackedDoubleShuffle, assembler) {
+ static const struct ALIGN16 {
+ double a;
+ double b;
+ } constant0 = { 2.0, 9.0 };
+ __ movups(XMM0, Address::Absolute(reinterpret_cast<uword>(&constant0)));
+ // Splat Y across all lanes.
+ __ shufpd(XMM0, XMM0, Immediate(0x33));
+ // Splat X across all lanes.
+ __ shufpd(XMM0, XMM0, Immediate(0x0));
+ // Set return value.
+ __ pushl(EAX);
+ __ pushl(EAX);
+ __ movsd(Address(ESP, 0), XMM0);
+ __ fldl(Address(ESP, 0));
+ __ popl(EAX);
+ __ popl(EAX);
+ __ ret();
+}
+
+
+ASSEMBLER_TEST_RUN(PackedDoubleShuffle, test) {
+ typedef double (*PackedDoubleShuffle)();
+ double res = reinterpret_cast<PackedDoubleShuffle>(test->entry())();
+ EXPECT_FLOAT_EQ(9.0, res, 0.000001f);
+}
+
+
ASSEMBLER_TEST_GENERATE(PackedDoubleToSingle, assembler) {
static const struct ALIGN16 {
double a;
diff --git a/runtime/vm/assembler_x64.cc b/runtime/vm/assembler_x64.cc
index a3bc9eb..4bedd21 100644
--- a/runtime/vm/assembler_x64.cc
+++ b/runtime/vm/assembler_x64.cc
@@ -1129,6 +1129,18 @@
}
+void Assembler::shufpd(XmmRegister dst, XmmRegister src, const Immediate& imm) {
+ AssemblerBuffer::EnsureCapacity ensured(&buffer_);
+ EmitUint8(0x66);
+ EmitREX_RB(dst, src);
+ EmitUint8(0x0F);
+ EmitUint8(0xC6);
+ EmitXmmRegisterOperand(dst & 7, src);
+ ASSERT(imm.is_uint8());
+ EmitUint8(imm.value());
+}
+
+
void Assembler::comisd(XmmRegister a, XmmRegister b) {
ASSERT(a <= XMM15);
ASSERT(b <= XMM15);
diff --git a/runtime/vm/assembler_x64.h b/runtime/vm/assembler_x64.h
index 1b12f5f..522928e 100644
--- a/runtime/vm/assembler_x64.h
+++ b/runtime/vm/assembler_x64.h
@@ -453,6 +453,7 @@
void sqrtpd(XmmRegister dst);
void cvtps2pd(XmmRegister dst, XmmRegister src);
void cvtpd2ps(XmmRegister dst, XmmRegister src);
+ void shufpd(XmmRegister dst, XmmRegister src, const Immediate& mask);
void comisd(XmmRegister a, XmmRegister b);
void cvtsi2sd(XmmRegister a, Register b);
diff --git a/runtime/vm/assembler_x64_test.cc b/runtime/vm/assembler_x64_test.cc
index 38567f0..8892ed4 100644
--- a/runtime/vm/assembler_x64_test.cc
+++ b/runtime/vm/assembler_x64_test.cc
@@ -1638,6 +1638,30 @@
}
+ASSEMBLER_TEST_GENERATE(PackedDoubleShuffle, assembler) {
+ static const struct ALIGN16 {
+ double a;
+ double b;
+ } constant0 = { 2.0, 9.0 };
+ __ movq(RAX, Immediate(reinterpret_cast<uword>(&constant0)));
+ __ movups(XMM10, Address(RAX, 0));
+ // Splat Y across all lanes.
+ __ shufpd(XMM10, XMM10, Immediate(0x33));
+ // Splat X across all lanes.
+ __ shufpd(XMM10, XMM10, Immediate(0x0));
+ // Set return value.
+ __ movaps(XMM0, XMM10);
+ __ ret();
+}
+
+
+ASSEMBLER_TEST_RUN(PackedDoubleShuffle, test) {
+ typedef double (*PackedDoubleShuffle)();
+ double res = reinterpret_cast<PackedDoubleShuffle>(test->entry())();
+ EXPECT_FLOAT_EQ(9.0, res, 0.000001f);
+}
+
+
ASSEMBLER_TEST_GENERATE(PackedDoubleToSingle, assembler) {
static const struct ALIGN16 {
double a;
diff --git a/runtime/vm/ast_printer_test.cc b/runtime/vm/ast_printer_test.cc
index 79e47c3..872d5bb 100644
--- a/runtime/vm/ast_printer_test.cc
+++ b/runtime/vm/ast_printer_test.cc
@@ -16,7 +16,7 @@
const intptr_t kPos = Scanner::kNoSourcePos;
LocalVariable* v =
new LocalVariable(kPos,
- String::ZoneHandle(String::New("wurscht")),
+ String::ZoneHandle(Symbols::New("wurscht")),
Type::ZoneHandle(Type::DynamicType()));
v->set_index(5);
LoadLocalNode* ll = new LoadLocalNode(kPos, v);
diff --git a/runtime/vm/ast_test.cc b/runtime/vm/ast_test.cc
index 70b9f6e..83fea1b 100644
--- a/runtime/vm/ast_test.cc
+++ b/runtime/vm/ast_test.cc
@@ -14,7 +14,7 @@
TEST_CASE(Ast) {
LocalVariable* v = new LocalVariable(Scanner::kNoSourcePos,
- String::ZoneHandle(String::New("v")),
+ String::ZoneHandle(Symbols::New("v")),
Type::ZoneHandle(Type::DynamicType()));
AstNode* ll = new LoadLocalNode(Scanner::kNoSourcePos, v);
EXPECT(ll->IsLoadLocalNode());
@@ -25,7 +25,7 @@
EXPECT_EQ(1, v->index());
LocalVariable* p = new LocalVariable(Scanner::kNoSourcePos,
- String::ZoneHandle(String::New("p")),
+ String::ZoneHandle(Symbols::New("p")),
Type::ZoneHandle(Type::DynamicType()));
EXPECT(!p->HasIndex());
p->set_index(-1);
diff --git a/runtime/vm/base_isolate.h b/runtime/vm/base_isolate.h
index e445209..5fb336d 100644
--- a/runtime/vm/base_isolate.h
+++ b/runtime/vm/base_isolate.h
@@ -95,16 +95,6 @@
}
#if defined(DEBUG)
- void set_reusable_handle_scope_active(bool value) {
- reusable_handle_scope_active_ = value;
- }
-
- bool reusable_handle_scope_active() {
- return reusable_handle_scope_active_;
- }
-#endif
-
-#if defined(DEBUG)
static void AssertCurrent(BaseIsolate* isolate);
#endif
@@ -116,7 +106,6 @@
top_handle_scope_(NULL),
no_handle_scope_depth_(0),
no_gc_scope_depth_(0),
- reusable_handle_scope_active_(false),
#endif
no_callback_scope_depth_(0)
{}
@@ -131,7 +120,6 @@
HandleScope* top_handle_scope_;
int32_t no_handle_scope_depth_;
int32_t no_gc_scope_depth_;
- bool reusable_handle_scope_active_;
#endif
int32_t no_callback_scope_depth_;
diff --git a/runtime/vm/bootstrap_natives.h b/runtime/vm/bootstrap_natives.h
index d1418c1..172952f 100644
--- a/runtime/vm/bootstrap_natives.h
+++ b/runtime/vm/bootstrap_natives.h
@@ -163,7 +163,7 @@
V(ExternalTypedData_Int32x4Array_new, 1) \
V(ExternalTypedData_Float64x2Array_new, 1) \
V(TypedData_length, 1) \
- V(TypedData_setRange, 5) \
+ V(TypedData_setRange, 7) \
V(TypedData_GetInt8, 2) \
V(TypedData_SetInt8, 3) \
V(TypedData_GetUint8, 2) \
@@ -309,6 +309,7 @@
V(ClassMirror_members, 2) \
V(ClassMirror_constructors, 2) \
V(LibraryMirror_members, 2) \
+ V(LibraryMirror_libraryDependencies, 2) \
V(ClassMirror_invoke, 5) \
V(ClassMirror_invokeGetter, 3) \
V(ClassMirror_invokeSetter, 4) \
diff --git a/runtime/vm/class_finalizer.cc b/runtime/vm/class_finalizer.cc
index ded1104..c49794a 100644
--- a/runtime/vm/class_finalizer.cc
+++ b/runtime/vm/class_finalizer.cc
@@ -1188,7 +1188,7 @@
super_class_name.ToCString());
}
}
- if (field.is_static() && (field.is_const() || field.is_final()) &&
+ if (field.is_static() &&
(field.value() != Object::null()) &&
(field.value() != Object::sentinel().raw())) {
// The parser does not preset the value if the type is a type parameter or
diff --git a/runtime/vm/class_table.cc b/runtime/vm/class_table.cc
index 8c05780..9052091 100644
--- a/runtime/vm/class_table.cc
+++ b/runtime/vm/class_table.cc
@@ -243,6 +243,7 @@
void ClassHeapStats::PrintTOJSONArray(const Class& cls, JSONArray* array) {
JSONObject obj(array);
obj.AddProperty("type", "ClassHeapStats");
+ obj.AddPropertyF("id", "allocationprofile/%" Pd "", cls.id());
obj.AddProperty("class", cls);
{
JSONArray new_stats(&obj, "new");
@@ -331,6 +332,7 @@
ASSERT(heap != NULL);
JSONObject obj(stream);
obj.AddProperty("type", "AllocationProfile");
+ obj.AddProperty("id", "allocationprofile");
{
JSONObject heaps(&obj, "heaps");
{
diff --git a/runtime/vm/code_generator.cc b/runtime/vm/code_generator.cc
index 1f77260..0c284c2 100644
--- a/runtime/vm/code_generator.cc
+++ b/runtime/vm/code_generator.cc
@@ -1026,11 +1026,18 @@
ic_data,
&result)) {
ArgumentsDescriptor desc(args_descriptor);
- const Function& target_function =
- Function::Handle(receiver_class.GetInvocationDispatcher(
- target_name,
- args_descriptor,
- RawFunction::kNoSuchMethodDispatcher));
+ Function& target_function = Function::Handle();
+ if (receiver.IsClosure() && target_name.Equals(Symbols::Call())) {
+ target_function = receiver_class.GetInvocationDispatcher(
+ target_name,
+ args_descriptor,
+ RawFunction::kInvokeClosureDispatcher);
+ } else {
+ target_function = receiver_class.GetInvocationDispatcher(
+ target_name,
+ args_descriptor,
+ RawFunction::kNoSuchMethodDispatcher);
+ }
// Update IC data.
ASSERT(!target_function.IsNull());
intptr_t receiver_cid = receiver.GetClassId();
diff --git a/runtime/vm/code_patcher_arm.cc b/runtime/vm/code_patcher_arm.cc
index 6a769cd..43072b2 100644
--- a/runtime/vm/code_patcher_arm.cc
+++ b/runtime/vm/code_patcher_arm.cc
@@ -59,7 +59,7 @@
void CodePatcher::InsertCallAt(uword start, uword target) {
// The inserted call should not overlap the lazy deopt jump code.
- ASSERT(start + CallPattern::kFixedLengthInBytes <= target);
+ ASSERT(start + CallPattern::LengthInBytes() <= target);
CallPattern::InsertAt(start, target);
}
diff --git a/runtime/vm/compiler.cc b/runtime/vm/compiler.cc
index 656481a..14e5a87 100644
--- a/runtime/vm/compiler.cc
+++ b/runtime/vm/compiler.cc
@@ -748,7 +748,7 @@
return Error::null();
}
if (setjmp(*jump.Set()) == 0) {
- TIMERSCOPE(time_compilation);
+ TIMERSCOPE(isolate, time_compilation);
Timer per_compile_timer(FLAG_trace_compiler, "Compilation time");
per_compile_timer.Start();
ParsedFunction* parsed_function =
diff --git a/runtime/vm/compiler_stats.cc b/runtime/vm/compiler_stats.cc
index 786fff9..c0ae73f 100644
--- a/runtime/vm/compiler_stats.cc
+++ b/runtime/vm/compiler_stats.cc
@@ -13,10 +13,10 @@
DEFINE_FLAG(bool, compiler_stats, false, "Compiler stat counters.");
// Bytes allocated for generated code.
-intptr_t CompilerStats::code_allocated = 0;
+int64_t CompilerStats::code_allocated = 0;
// Total number of characters in source.
-intptr_t CompilerStats::src_length = 0;
+int64_t CompilerStats::src_length = 0;
// Cumulative runtime of parser.
Timer CompilerStats::parser_timer(true, "parser timer");
@@ -53,44 +53,55 @@
Timer CompilerStats::codefinalizer_timer(true, "code finalization timer");
-intptr_t CompilerStats::num_tokens_total = 0;
-intptr_t CompilerStats::num_literal_tokens_total = 0;
-intptr_t CompilerStats::num_ident_tokens_total = 0;
-intptr_t CompilerStats::num_tokens_consumed = 0;
-intptr_t CompilerStats::num_token_checks = 0;
-intptr_t CompilerStats::num_tokens_rewind = 0;
-intptr_t CompilerStats::num_tokens_lookahead = 0;
+int64_t CompilerStats::num_tokens_total = 0;
+int64_t CompilerStats::num_literal_tokens_total = 0;
+int64_t CompilerStats::num_ident_tokens_total = 0;
+int64_t CompilerStats::num_tokens_consumed = 0;
+int64_t CompilerStats::num_token_checks = 0;
+int64_t CompilerStats::num_tokens_rewind = 0;
+int64_t CompilerStats::num_tokens_lookahead = 0;
-intptr_t CompilerStats::num_lib_cache_hit = 0;
-intptr_t CompilerStats::num_names_cached = 0;
-intptr_t CompilerStats::make_accessor_name = 0;
-intptr_t CompilerStats::make_field_name = 0;
+int64_t CompilerStats::num_lib_cache_hit = 0;
+int64_t CompilerStats::num_names_cached = 0;
+int64_t CompilerStats::make_accessor_name = 0;
+int64_t CompilerStats::make_field_name = 0;
+
+int64_t CompilerStats::num_classes_compiled = 0;
+int64_t CompilerStats::num_functions_compiled = 0;
+
+int64_t CompilerStats::num_implicit_final_getters = 0;
+int64_t CompilerStats::num_static_initializer_funcs = 0;
void CompilerStats::Print() {
if (!FLAG_compiler_stats) {
return;
}
OS::Print("==== Compiler Stats ====\n");
- OS::Print("Number of tokens: %" Pd "\n", num_tokens_total);
- OS::Print(" Literal tokens: %" Pd "\n", num_literal_tokens_total);
- OS::Print(" Ident tokens: %" Pd "\n", num_ident_tokens_total);
- OS::Print("Tokens consumed: %" Pd " (%.2f times number of tokens)\n",
+ OS::Print("Number of tokens: %" Pd64 "\n", num_tokens_total);
+ OS::Print(" Literal tokens: %" Pd64 "\n", num_literal_tokens_total);
+ OS::Print(" Ident tokens: %" Pd64 "\n", num_ident_tokens_total);
+ OS::Print("Tokens consumed: %" Pd64 " (%.2f times number of tokens)\n",
num_tokens_consumed,
(1.0 * num_tokens_consumed) / num_tokens_total);
- OS::Print("Tokens checked: %" Pd " (%.2f times tokens consumed)\n",
+ OS::Print("Tokens checked: %" Pd64 " (%.2f times tokens consumed)\n",
num_token_checks, (1.0 * num_token_checks) / num_tokens_consumed);
- OS::Print("Token rewind: %" Pd " (%" Pd "%% of tokens checked)\n",
+ OS::Print("Token rewind: %" Pd64 " (%" Pd64 "%% of tokens checked)\n",
num_tokens_rewind, (100 * num_tokens_rewind) / num_token_checks);
- OS::Print("Token lookahead: %" Pd " (%" Pd "%% of tokens checked)\n",
+ OS::Print("Token lookahead: %" Pd64 " (%" Pd64 "%% of tokens checked)\n",
num_tokens_lookahead,
(100 * num_tokens_lookahead) / num_token_checks);
- OS::Print("Lib names cached: %" Pd "\n", num_names_cached);
- OS::Print("Lib name cache hit: %" Pd "\n", num_lib_cache_hit);
- OS::Print("Accessor mangling: %" Pd " field->acc %" Pd " acc->field\n",
+ OS::Print("Classes parsed: %" Pd64 "\n", num_classes_compiled);
+ OS::Print("Functions compiled: %" Pd64 "\n", num_functions_compiled);
+ OS::Print(" Impl getters: %" Pd64 "\n", num_implicit_final_getters);
+ OS::Print(" Init funcs: %" Pd64 "\n", num_static_initializer_funcs);
+
+ OS::Print("Lib names cached: %" Pd64 "\n", num_names_cached);
+ OS::Print("Lib name cache hit: %" Pd64 "\n", num_lib_cache_hit);
+ OS::Print("Accessor mangling: %" Pd64 " field->acc %" Pd64 " acc->field\n",
make_accessor_name, make_field_name);
- OS::Print("Source length: %" Pd " characters\n", src_length);
+ OS::Print("Source length: %" Pd64 " characters\n", src_length);
int64_t scan_usecs = scanner_timer.TotalElapsedTime();
OS::Print("Scanner time: %" Pd64 " msecs\n",
scan_usecs / 1000);
@@ -136,11 +147,11 @@
OS::Print(" Code finalizer: %" Pd64 " msecs\n",
codefinalizer_usecs / 1000);
OS::Print("Compilation speed: %" Pd64 " tokens per msec\n",
- 1000 * num_tokens_total / (parse_usecs + codegen_usecs));
- OS::Print("Code size: %" Pd " KB\n",
+ (1000 * num_tokens_total) / (parse_usecs + codegen_usecs));
+ OS::Print("Code size: %" Pd64 " KB\n",
code_allocated / 1024);
- OS::Print("Code density: %" Pd " tokens per KB\n",
- num_tokens_total * 1024 / code_allocated);
+ OS::Print("Code density: %" Pd64 " tokens per KB\n",
+ (num_tokens_total * 1024) / code_allocated);
}
} // namespace dart
diff --git a/runtime/vm/compiler_stats.h b/runtime/vm/compiler_stats.h
index 57d4d65..1e0fd25 100644
--- a/runtime/vm/compiler_stats.h
+++ b/runtime/vm/compiler_stats.h
@@ -17,21 +17,26 @@
class CompilerStats : AllStatic {
public:
- static intptr_t num_tokens_total;
- static intptr_t num_literal_tokens_total;
- static intptr_t num_ident_tokens_total;
- static intptr_t num_tokens_consumed;
- static intptr_t num_token_checks;
- static intptr_t num_tokens_rewind;
- static intptr_t num_tokens_lookahead;
+ static int64_t num_tokens_total;
+ static int64_t num_literal_tokens_total;
+ static int64_t num_ident_tokens_total;
+ static int64_t num_tokens_consumed;
+ static int64_t num_token_checks;
+ static int64_t num_tokens_rewind;
+ static int64_t num_tokens_lookahead;
- static intptr_t num_lib_cache_hit;
- static intptr_t num_names_cached;
- static intptr_t make_accessor_name;
- static intptr_t make_field_name;
+ static int64_t num_lib_cache_hit;
+ static int64_t num_names_cached;
+ static int64_t make_accessor_name;
+ static int64_t make_field_name;
- static intptr_t src_length; // Total number of characters in source.
- static intptr_t code_allocated; // Bytes allocated for generated code.
+ static int64_t num_classes_compiled;
+ static int64_t num_functions_compiled;
+ static int64_t num_implicit_final_getters;
+ static int64_t num_static_initializer_funcs;
+
+ static int64_t src_length; // Total number of characters in source.
+ static int64_t code_allocated; // Bytes allocated for generated code.
static Timer parser_timer; // Cumulative runtime of parser.
static Timer scanner_timer; // Cumulative runtime of scanner.
static Timer codegen_timer; // Cumulative runtime of code generator.
diff --git a/runtime/vm/coverage.cc b/runtime/vm/coverage.cc
index b15857f..b766c15 100644
--- a/runtime/vm/coverage.cc
+++ b/runtime/vm/coverage.cc
@@ -182,6 +182,7 @@
Class& cls = Class::Handle();
JSONObject coverage(stream);
coverage.AddProperty("type", "CodeCoverage");
+ coverage.AddProperty("id", "coverage");
{
JSONArray jsarr(&coverage, "coverage");
for (int i = 0; i < libs.Length(); i++) {
diff --git a/runtime/vm/cpu_arm.cc b/runtime/vm/cpu_arm.cc
index 73f2ec0..a7ad919 100644
--- a/runtime/vm/cpu_arm.cc
+++ b/runtime/vm/cpu_arm.cc
@@ -54,6 +54,7 @@
bool HostCPUFeatures::integer_division_supported_ = false;
bool HostCPUFeatures::neon_supported_ = false;
const char* HostCPUFeatures::hardware_ = NULL;
+ARMVersion HostCPUFeatures::arm_version_ = ARMvUnknown;
#if defined(DEBUG)
bool HostCPUFeatures::initialized_ = false;
#endif
@@ -63,12 +64,20 @@
void HostCPUFeatures::InitOnce() {
CpuInfo::InitOnce();
hardware_ = CpuInfo::GetCpuModel();
- // Implements ARMv7.
- ASSERT(CpuInfo::FieldContains(kCpuInfoProcessor, "ARMv7"));
+ // Check for ARMv6 or ARMv7. It can be in either the Processor or
+ // Model information fields.
+ if (CpuInfo::FieldContains(kCpuInfoProcessor, "ARMv6") ||
+ CpuInfo::FieldContains(kCpuInfoModel, "ARMv6")) {
+ arm_version_ = ARMv6;
+ } else {
+ ASSERT(CpuInfo::FieldContains(kCpuInfoProcessor, "ARMv7") ||
+ CpuInfo::FieldContains(kCpuInfoModel, "ARMv7"));
+ arm_version_ = ARMv7;
+ }
// Has floating point unit.
ASSERT(CpuInfo::FieldContains(kCpuInfoFeatures, "vfp"));
// Has integer division.
- bool is_krait = CpuInfo::FieldContains(kCpuInfoModel, "QCT APQ8064");
+ bool is_krait = CpuInfo::FieldContains(kCpuInfoHardware, "QCT APQ8064");
if (is_krait) {
// Special case for Qualcomm Krait CPUs in Nexus 4 and 7.
integer_division_supported_ = true;
@@ -101,6 +110,7 @@
hardware_ = CpuInfo::GetCpuModel();
integer_division_supported_ = true;
neon_supported_ = true;
+ arm_version_ = ARMv7;
#if defined(DEBUG)
initialized_ = true;
#endif
diff --git a/runtime/vm/cpu_arm.h b/runtime/vm/cpu_arm.h
index cbcac11..92be988 100644
--- a/runtime/vm/cpu_arm.h
+++ b/runtime/vm/cpu_arm.h
@@ -18,6 +18,12 @@
// additionally mock the options needed for the target architecture so that
// they may be altered for testing.
+enum ARMVersion {
+ ARMv6,
+ ARMv7,
+ ARMvUnknown,
+};
+
class HostCPUFeatures: public AllStatic {
public:
static void InitOnce();
@@ -34,6 +40,10 @@
DEBUG_ASSERT(initialized_);
return neon_supported_;
}
+ static ARMVersion arm_version() {
+ DEBUG_ASSERT(initialized_);
+ return arm_version_;
+ }
#if !defined(HOST_ARCH_ARM)
static void set_integer_division_supported(bool supported) {
@@ -44,12 +54,17 @@
DEBUG_ASSERT(initialized_);
neon_supported_ = supported;
}
+ static void set_arm_version(ARMVersion version) {
+ DEBUG_ASSERT(initialized_);
+ arm_version_ = version;
+ }
#endif // !defined(HOST_ARCH_ARM)
private:
static const char* hardware_;
static bool integer_division_supported_;
static bool neon_supported_;
+ static ARMVersion arm_version_;
#if defined(DEBUG)
static bool initialized_;
#endif
@@ -75,6 +90,9 @@
static const char* hardware() {
return HostCPUFeatures::hardware();
}
+ static ARMVersion arm_version() {
+ return HostCPUFeatures::arm_version();
+ }
};
} // namespace dart
diff --git a/runtime/vm/cpuinfo.h b/runtime/vm/cpuinfo.h
index f0f73b5..b468ee2 100644
--- a/runtime/vm/cpuinfo.h
+++ b/runtime/vm/cpuinfo.h
@@ -58,8 +58,8 @@
// Returns the field describing the CPU model. Caller is responsible for
// freeing the result.
static const char* GetCpuModel() {
- ASSERT(HasField(FieldName(kCpuInfoModel)));
- return ExtractField(kCpuInfoModel);
+ ASSERT(HasField(FieldName(kCpuInfoHardware)));
+ return ExtractField(kCpuInfoHardware);
}
private:
diff --git a/runtime/vm/cpuinfo_android.cc b/runtime/vm/cpuinfo_android.cc
index ba90d25..fbbbe29 100644
--- a/runtime/vm/cpuinfo_android.cc
+++ b/runtime/vm/cpuinfo_android.cc
@@ -27,7 +27,7 @@
fields_[kCpuInfoFeatures] = "flags";
#elif defined(HOST_ARCH_ARM)
fields_[kCpuInfoProcessor] = "Processor";
- fields_[kCpuInfoModel] = "Hardware";
+ fields_[kCpuInfoModel] = "model name";
fields_[kCpuInfoHardware] = "Hardware";
fields_[kCpuInfoFeatures] = "Features";
#elif defined(HOST_ARCH_MIPS)
diff --git a/runtime/vm/cpuinfo_linux.cc b/runtime/vm/cpuinfo_linux.cc
index 8e80ab9..e96e0d5 100644
--- a/runtime/vm/cpuinfo_linux.cc
+++ b/runtime/vm/cpuinfo_linux.cc
@@ -30,7 +30,7 @@
CpuId::InitOnce();
#elif defined(HOST_ARCH_ARM)
fields_[kCpuInfoProcessor] = "Processor";
- fields_[kCpuInfoModel] = "Hardware";
+ fields_[kCpuInfoModel] = "model name";
fields_[kCpuInfoHardware] = "Hardware";
fields_[kCpuInfoFeatures] = "Features";
method_ = kCpuInfoSystem;
diff --git a/runtime/vm/dart.cc b/runtime/vm/dart.cc
index 45f51e3..43f7b03 100644
--- a/runtime/vm/dart.cc
+++ b/runtime/vm/dart.cc
@@ -118,13 +118,13 @@
HandleScope handle_scope(vm_isolate_);
Heap::Init(vm_isolate_);
ObjectStore::Init(vm_isolate_);
+ TargetCPUFeatures::InitOnce();
Object::InitOnce();
ArgumentsDescriptor::InitOnce();
StubCode::InitOnce();
Symbols::InitOnce(vm_isolate_);
Scanner::InitOnce();
Object::CreateInternalMetaData();
- TargetCPUFeatures::InitOnce();
#if defined(TARGET_ARCH_IA32) || defined(TARGET_ARCH_X64)
// Dart VM requires at least SSE2.
if (!TargetCPUFeatures::sse2_supported()) {
@@ -175,11 +175,12 @@
ShutdownIsolate();
vm_isolate_ = NULL;
+
+ TargetCPUFeatures::Cleanup();
#endif
Profiler::Shutdown();
CodeObservers::DeleteAll();
- TargetCPUFeatures::Cleanup();
return NULL;
}
@@ -195,8 +196,8 @@
RawError* Dart::InitializeIsolate(const uint8_t* snapshot_buffer, void* data) {
// Initialize the new isolate.
- TIMERSCOPE(time_isolate_initialization);
Isolate* isolate = Isolate::Current();
+ TIMERSCOPE(isolate, time_isolate_initialization);
ASSERT(isolate != NULL);
StackZone zone(isolate);
HandleScope handle_scope(isolate);
diff --git a/runtime/vm/dart_api_impl.cc b/runtime/vm/dart_api_impl.cc
index 1ab063e..7ea19a5 100644
--- a/runtime/vm/dart_api_impl.cc
+++ b/runtime/vm/dart_api_impl.cc
@@ -623,11 +623,12 @@
Dart_Handle object,
bool is_prologue,
void* peer,
+ intptr_t external_allocation_size,
Dart_WeakPersistentHandleFinalizer callback) {
ApiState* state = isolate->api_state();
ASSERT(state != NULL);
- ReusableObjectHandleScope reused_obj_handle(isolate);
- Object& ref = reused_obj_handle.Handle();
+ REUSABLE_OBJECT_HANDLESCOPE(isolate);
+ Object& ref = isolate->ObjectHandle();
ref = Api::UnwrapHandle(object);
FinalizablePersistentHandle* finalizable_ref = is_prologue ?
state->prologue_weak_persistent_handles().AllocateHandle() :
@@ -636,6 +637,7 @@
finalizable_ref->set_raw(ref);
finalizable_ref->set_peer(peer);
finalizable_ref->set_callback(callback);
+ finalizable_ref->SetExternalSize(external_allocation_size, isolate);
if (is_prologue) {
return finalizable_ref->apiPrologueHandle();
} else {
@@ -647,6 +649,7 @@
DART_EXPORT Dart_WeakPersistentHandle Dart_NewWeakPersistentHandle(
Dart_Handle object,
void* peer,
+ intptr_t external_allocation_size,
Dart_WeakPersistentHandleFinalizer callback) {
Isolate* isolate = Isolate::Current();
CHECK_ISOLATE(isolate);
@@ -654,6 +657,7 @@
object,
false,
peer,
+ external_allocation_size,
callback);
}
@@ -661,6 +665,7 @@
DART_EXPORT Dart_WeakPersistentHandle Dart_NewPrologueWeakPersistentHandle(
Dart_Handle object,
void* peer,
+ intptr_t external_allocation_size,
Dart_WeakPersistentHandleFinalizer callback) {
Isolate* isolate = Isolate::Current();
CHECK_ISOLATE(isolate);
@@ -668,6 +673,7 @@
object,
true,
peer,
+ external_allocation_size,
callback);
}
@@ -697,11 +703,13 @@
ASSERT(state->IsValidPrologueWeakPersistentHandle(object));
FinalizablePersistentHandle* weak_ref =
FinalizablePersistentHandle::Cast(object);
+ weak_ref->EnsureFreeExternal(isolate);
state->prologue_weak_persistent_handles().FreeHandle(weak_ref);
} else {
ASSERT(!state->IsValidPrologueWeakPersistentHandle(object));
FinalizablePersistentHandle* weak_ref =
FinalizablePersistentHandle::Cast(object);
+ weak_ref->EnsureFreeExternal(isolate);
state->weak_persistent_handles().FreeHandle(weak_ref);
}
}
@@ -756,64 +764,41 @@
// --- Garbage Collection Callbacks --
-DART_EXPORT Dart_Handle Dart_AddGcPrologueCallback(
- Dart_GcPrologueCallback callback) {
+DART_EXPORT Dart_Handle Dart_SetGcCallbacks(
+ Dart_GcPrologueCallback prologue_callback,
+ Dart_GcEpilogueCallback epilogue_callback) {
Isolate* isolate = Isolate::Current();
CHECK_ISOLATE(isolate);
- GcPrologueCallbacks& callbacks = isolate->gc_prologue_callbacks();
- if (callbacks.Contains(callback)) {
- return Api::NewError(
- "%s permits only one instance of 'callback' to be present in the "
- "prologue callback list.",
- CURRENT_FUNC);
+ if (prologue_callback != NULL) {
+ if (isolate->gc_prologue_callback() != NULL) {
+ return Api::NewError(
+ "%s permits only one gc prologue callback to be registered, please "
+ "remove the existing callback and then add this callback",
+ CURRENT_FUNC);
+ }
+ } else {
+ if (isolate->gc_prologue_callback() == NULL) {
+ return Api::NewError(
+ "%s expects 'prologue_callback' to be present in the callback set.",
+ CURRENT_FUNC);
+ }
}
- callbacks.Add(callback);
- return Api::Success();
-}
-
-
-DART_EXPORT Dart_Handle Dart_RemoveGcPrologueCallback(
- Dart_GcPrologueCallback callback) {
- Isolate* isolate = Isolate::Current();
- CHECK_ISOLATE(isolate);
- GcPrologueCallbacks& callbacks = isolate->gc_prologue_callbacks();
- if (!callbacks.Contains(callback)) {
- return Api::NewError(
- "%s expects 'callback' to be present in the prologue callback list.",
- CURRENT_FUNC);
+ if (epilogue_callback != NULL) {
+ if (isolate->gc_epilogue_callback() != NULL) {
+ return Api::NewError(
+ "%s permits only one gc epilogue callback to be registered, please "
+ "remove the existing callback and then add this callback",
+ CURRENT_FUNC);
+ }
+ } else {
+ if (isolate->gc_epilogue_callback() == NULL) {
+ return Api::NewError(
+ "%s expects 'epilogue_callback' to be present in the callback set.",
+ CURRENT_FUNC);
+ }
}
- callbacks.Remove(callback);
- return Api::Success();
-}
-
-
-DART_EXPORT Dart_Handle Dart_AddGcEpilogueCallback(
- Dart_GcEpilogueCallback callback) {
- Isolate* isolate = Isolate::Current();
- CHECK_ISOLATE(isolate);
- GcEpilogueCallbacks& callbacks = isolate->gc_epilogue_callbacks();
- if (callbacks.Contains(callback)) {
- return Api::NewError(
- "%s permits only one instance of 'callback' to be present in the "
- "epilogue callback list.",
- CURRENT_FUNC);
- }
- callbacks.Add(callback);
- return Api::Success();
-}
-
-
-DART_EXPORT Dart_Handle Dart_RemoveGcEpilogueCallback(
- Dart_GcEpilogueCallback callback) {
- Isolate* isolate = Isolate::Current();
- CHECK_ISOLATE(isolate);
- GcEpilogueCallbacks& callbacks = isolate->gc_epilogue_callbacks();
- if (!callbacks.Contains(callback)) {
- return Api::NewError(
- "%s expects 'callback' to be present in the epilogue callback list.",
- CURRENT_FUNC);
- }
- callbacks.Remove(callback);
+ isolate->set_gc_prologue_callback(prologue_callback);
+ isolate->set_gc_epilogue_callback(epilogue_callback);
return Api::Success();
}
@@ -924,7 +909,7 @@
if (FLAG_check_function_fingerprints) {
Library::CheckFunctionFingerprints();
}
- START_TIMER(time_total_runtime);
+ START_TIMER(isolate, time_total_runtime);
return reinterpret_cast<Dart_Isolate>(isolate);
}
*error = strdup(error_obj.ToErrorCString());
@@ -942,7 +927,7 @@
HandleScope handle_scope(isolate);
Dart::RunShutdownCallback();
}
- STOP_TIMER(time_total_runtime);
+ STOP_TIMER(isolate, time_total_runtime);
Dart::ShutdownIsolate();
}
@@ -1004,7 +989,7 @@
intptr_t* size) {
Isolate* isolate = Isolate::Current();
DARTSCOPE(isolate);
- TIMERSCOPE(time_creating_snapshot);
+ TIMERSCOPE(isolate, time_creating_snapshot);
if (buffer == NULL) {
RETURN_NULL_ERROR(buffer);
}
@@ -1028,7 +1013,7 @@
intptr_t* size) {
Isolate* isolate = Isolate::Current();
DARTSCOPE(isolate);
- TIMERSCOPE(time_creating_snapshot);
+ TIMERSCOPE(isolate, time_creating_snapshot);
if (buffer == NULL) {
RETURN_NULL_ERROR(buffer);
}
@@ -1387,8 +1372,8 @@
DART_EXPORT bool Dart_IsInstance(Dart_Handle object) {
Isolate* isolate = Isolate::Current();
CHECK_ISOLATE(isolate);
- ReusableObjectHandleScope reused_obj_handle(isolate);
- Object& ref = reused_obj_handle.Handle();
+ REUSABLE_OBJECT_HANDLESCOPE(isolate);
+ Object& ref = isolate->ObjectHandle();
ref = Api::UnwrapHandle(object);
return ref.IsInstance();
}
@@ -3131,7 +3116,9 @@
if (type_obj.IsNull()) {
RETURN_TYPE_ERROR(isolate, type, Type);
}
- const Class& cls = Class::Handle(isolate, type_obj.type_class());
+ REUSABLE_CLASS_HANDLESCOPE(isolate);
+ Class& cls = isolate->ClassHandle();
+ cls = type_obj.type_class();
if (!cls.is_fields_marked_nullable()) {
// Mark all fields as nullable.
@@ -3152,6 +3139,13 @@
}
}
+ REUSABLE_ERROR_HANDLESCOPE(isolate);
+ Error& error = isolate->ErrorHandle();
+ error = cls.EnsureIsFinalized(isolate);
+ if (!error.IsNull()) {
+ // An error occurred, return error object.
+ return Api::NewHandle(isolate, error.raw());
+ }
// Allocate an object for the given class.
return Api::NewHandle(isolate, Instance::New(cls));
}
@@ -3275,7 +3269,7 @@
CHECK_CALLBACK_STATE(isolate);
// TODO(turnidge): This is a bit simplistic. It overcounts when
// other operations (gc, compilation) are active.
- TIMERSCOPE(time_dart_execution);
+ TIMERSCOPE(isolate, time_dart_execution);
const String& function_name = Api::UnwrapStringHandle(isolate, name);
if (function_name.IsNull()) {
@@ -3828,7 +3822,7 @@
int index,
intptr_t* value) {
Isolate* isolate = Isolate::Current();
- DARTSCOPE(isolate);
+ CHECK_ISOLATE(isolate);
ReusableObjectHandleScope reused_obj_handle(isolate);
const Instance& instance = Api::UnwrapInstanceHandle(reused_obj_handle, obj);
if (instance.IsNull()) {
@@ -3908,8 +3902,8 @@
}
Isolate* isolate = arguments->isolate();
CHECK_ISOLATE(isolate);
- ReusableObjectHandleScope reused_obj_handle(isolate);
- Object& obj = reused_obj_handle.Handle();
+ REUSABLE_OBJECT_HANDLESCOPE(isolate);
+ Object& obj = isolate->ObjectHandle();
obj = arguments->NativeArgAt(arg_index);
if (obj.IsNull()) {
for (intptr_t i = 0; i < num_fields; i++) {
@@ -3959,8 +3953,8 @@
return Api::Success();
}
*peer = NULL;
- ReusableObjectHandleScope reused_obj_handle(isolate);
- Object& obj = reused_obj_handle.Handle();
+ REUSABLE_OBJECT_HANDLESCOPE(isolate);
+ Object& obj = isolate->ObjectHandle();
obj = arguments->NativeArgAt(arg_index);
if (RawObject::IsStringClassId(obj.GetClassId())) {
return Api::NewHandle(isolate, obj.raw());
@@ -3984,8 +3978,8 @@
CURRENT_FUNC, arguments->NativeArgCount() - 1, index);
}
Isolate* isolate = arguments->isolate();
- ReusableObjectHandleScope reused_obj_handle(isolate);
- Object& obj = reused_obj_handle.Handle();
+ REUSABLE_OBJECT_HANDLESCOPE(isolate);
+ Object& obj = isolate->ObjectHandle();
obj = arguments->NativeArgAt(index);
intptr_t cid = obj.GetClassId();
if (cid == kSmiCid) {
@@ -4041,8 +4035,8 @@
CURRENT_FUNC, arguments->NativeArgCount() - 1, index);
}
Isolate* isolate = arguments->isolate();
- ReusableObjectHandleScope reused_obj_handle(isolate);
- Object& obj = reused_obj_handle.Handle();
+ REUSABLE_OBJECT_HANDLESCOPE(isolate);
+ Object& obj = isolate->ObjectHandle();
obj = arguments->NativeArgAt(index);
intptr_t cid = obj.GetClassId();
if (cid == kDoubleCid) {
@@ -4181,9 +4175,9 @@
Dart_Handle source,
intptr_t line_offset,
intptr_t col_offset) {
- TIMERSCOPE(time_script_loading);
Isolate* isolate = Isolate::Current();
DARTSCOPE(isolate);
+ TIMERSCOPE(isolate, time_script_loading);
const String& url_str = Api::UnwrapStringHandle(isolate, url);
if (url_str.IsNull()) {
RETURN_TYPE_ERROR(isolate, url, String);
@@ -4229,7 +4223,7 @@
intptr_t buffer_len) {
Isolate* isolate = Isolate::Current();
DARTSCOPE(isolate);
- TIMERSCOPE(time_script_loading);
+ TIMERSCOPE(isolate, time_script_loading);
if (buffer == NULL) {
RETURN_NULL_ERROR(buffer);
}
@@ -4409,9 +4403,9 @@
DART_EXPORT Dart_Handle Dart_LoadLibrary(Dart_Handle url,
Dart_Handle source) {
- TIMERSCOPE(time_script_loading);
Isolate* isolate = Isolate::Current();
DARTSCOPE(isolate);
+ TIMERSCOPE(isolate, time_script_loading);
const String& url_str = Api::UnwrapStringHandle(isolate, url);
if (url_str.IsNull()) {
RETURN_TYPE_ERROR(isolate, url, String);
@@ -4501,9 +4495,9 @@
DART_EXPORT Dart_Handle Dart_LoadSource(Dart_Handle library,
Dart_Handle url,
Dart_Handle source) {
- TIMERSCOPE(time_script_loading);
Isolate* isolate = Isolate::Current();
DARTSCOPE(isolate);
+ TIMERSCOPE(isolate, time_script_loading);
const Library& lib = Api::UnwrapLibraryHandle(isolate, library);
if (lib.IsNull()) {
RETURN_TYPE_ERROR(isolate, library, Library);
@@ -4531,9 +4525,9 @@
DART_EXPORT Dart_Handle Dart_LibraryLoadPatch(Dart_Handle library,
Dart_Handle url,
Dart_Handle patch_source) {
- TIMERSCOPE(time_script_loading);
Isolate* isolate = Isolate::Current();
DARTSCOPE(isolate);
+ TIMERSCOPE(isolate, time_script_loading);
const Library& lib = Api::UnwrapLibraryHandle(isolate, library);
if (lib.IsNull()) {
RETURN_TYPE_ERROR(isolate, library, Library);
@@ -4580,8 +4574,8 @@
}
Isolate* isolate = Isolate::Current();
CHECK_ISOLATE(isolate);
- ReusableObjectHandleScope reused_obj_handle(isolate);
- Object& obj = reused_obj_handle.Handle();
+ REUSABLE_OBJECT_HANDLESCOPE(isolate);
+ Object& obj = isolate->ObjectHandle();
obj = Api::UnwrapHandle(object);
if (obj.IsNull() || obj.IsNumber() || obj.IsBool()) {
const char* msg =
@@ -4600,8 +4594,8 @@
DART_EXPORT Dart_Handle Dart_SetPeer(Dart_Handle object, void* peer) {
Isolate* isolate = Isolate::Current();
CHECK_ISOLATE(isolate);
- ReusableObjectHandleScope reused_obj_handle(isolate);
- Object& obj = reused_obj_handle.Handle();
+ REUSABLE_OBJECT_HANDLESCOPE(isolate);
+ Object& obj = isolate->ObjectHandle();
obj = Api::UnwrapHandle(object);
if (obj.IsNull() || obj.IsNumber() || obj.IsBool()) {
const char* msg =
diff --git a/runtime/vm/dart_api_impl_test.cc b/runtime/vm/dart_api_impl_test.cc
index 4cd09d8..62c9e6d 100644
--- a/runtime/vm/dart_api_impl_test.cc
+++ b/runtime/vm/dart_api_impl_test.cc
@@ -1794,7 +1794,8 @@
Dart_TypedData_kUint8,
data,
ARRAY_SIZE(data));
- Dart_NewWeakPersistentHandle(obj, &peer, ExternalTypedDataFinalizer);
+ Dart_NewWeakPersistentHandle(
+ obj, &peer, sizeof(data), ExternalTypedDataFinalizer);
EXPECT_VALID(obj);
Dart_ExitScope();
}
@@ -1849,7 +1850,8 @@
{
Dart_Handle lcl = Dart_NewExternalTypedData(
Dart_TypedData_kFloat32x4, data, 10);
- Dart_NewWeakPersistentHandle(lcl, &peer, ExternalTypedDataFinalizer);
+ Dart_NewWeakPersistentHandle(
+ lcl, &peer, sizeof(data), ExternalTypedDataFinalizer);
CheckFloat32x4Data(lcl);
}
Dart_ExitScope();
@@ -2037,11 +2039,11 @@
TEST_CASE(WeakPersistentHandle) {
Dart_Handle local_new_ref = Dart_Null();
Dart_WeakPersistentHandle weak_new_ref = Dart_NewWeakPersistentHandle(
- local_new_ref, NULL, NULL);
+ local_new_ref, NULL, 0, NULL);
Dart_Handle local_old_ref = Dart_Null();
Dart_WeakPersistentHandle weak_old_ref = Dart_NewWeakPersistentHandle(
- local_old_ref, NULL, NULL);
+ local_old_ref, NULL, 0, NULL);
{
Dart_EnterScope();
@@ -2060,12 +2062,12 @@
}
// Create a weak ref to the new space object.
- weak_new_ref = Dart_NewWeakPersistentHandle(new_ref, NULL, NULL);
+ weak_new_ref = Dart_NewWeakPersistentHandle(new_ref, NULL, 0, NULL);
EXPECT_VALID(AsHandle(weak_new_ref));
EXPECT(!Dart_IsNull(AsHandle(weak_new_ref)));
// Create a weak ref to the old space object.
- weak_old_ref = Dart_NewWeakPersistentHandle(old_ref, NULL, NULL);
+ weak_old_ref = Dart_NewWeakPersistentHandle(old_ref, NULL, 0, NULL);
EXPECT_VALID(AsHandle(weak_old_ref));
EXPECT(!Dart_IsNull(AsHandle(weak_old_ref)));
@@ -2157,7 +2159,7 @@
Dart_EnterScope();
Dart_Handle obj = NewString("new string");
EXPECT_VALID(obj);
- weak_ref = Dart_NewWeakPersistentHandle(obj, &peer,
+ weak_ref = Dart_NewWeakPersistentHandle(obj, &peer, 0,
WeakPersistentHandlePeerFinalizer);
EXPECT_VALID(AsHandle(weak_ref));
EXPECT(peer == 0);
@@ -2179,7 +2181,7 @@
Dart_EnterScope();
Dart_Handle obj = NewString("new string");
EXPECT_VALID(obj);
- weak_ref = Dart_NewWeakPersistentHandle(obj, &peer,
+ weak_ref = Dart_NewWeakPersistentHandle(obj, &peer, 0,
WeakPersistentHandlePeerFinalizer);
Dart_ExitScope();
}
@@ -2202,12 +2204,148 @@
int peer = 1234;
Dart_NewWeakPersistentHandle(ref,
&peer,
+ 0,
WeakPersistentHandlePeerFinalizer);
Dart_ShutdownIsolate();
EXPECT(peer == 42);
}
+TEST_CASE(WeakPersistentHandleExternalAllocationSize) {
+ Heap* heap = Isolate::Current()->heap();
+ EXPECT(heap->ExternalInWords(Heap::kNew) == 0);
+ EXPECT(heap->ExternalInWords(Heap::kOld) == 0);
+ Dart_WeakPersistentHandle weak1 = NULL;
+ static const intptr_t kWeak1ExternalSize = 1 * KB;
+ {
+ Dart_EnterScope();
+ Dart_Handle obj = NewString("weakly referenced string");
+ EXPECT_VALID(obj);
+ weak1 = Dart_NewWeakPersistentHandle(obj, NULL, kWeak1ExternalSize, NULL);
+ EXPECT_VALID(AsHandle(weak1));
+ EXPECT(!Dart_IsPrologueWeakPersistentHandle(weak1));
+ Dart_ExitScope();
+ }
+ Dart_PersistentHandle strong_ref = NULL;
+ Dart_WeakPersistentHandle weak2 = NULL;
+ static const intptr_t kWeak2ExternalSize = 2 * KB;
+ {
+ Dart_EnterScope();
+ Dart_Handle obj = NewString("strongly referenced string");
+ EXPECT_VALID(obj);
+ strong_ref = Dart_NewPersistentHandle(obj);
+ weak2 = Dart_NewWeakPersistentHandle(obj, NULL, kWeak2ExternalSize, NULL);
+ EXPECT_VALID(AsHandle(strong_ref));
+ Dart_ExitScope();
+ }
+ Isolate::Current()->heap()->CollectGarbage(Heap::kOld);
+ EXPECT(heap->ExternalInWords(Heap::kNew) ==
+ (kWeak1ExternalSize + kWeak2ExternalSize) / kWordSize);
+ // Collect weakly referenced string, and promote strongly referenced string.
+ GCTestHelper::CollectNewSpace(Heap::kIgnoreApiCallbacks);
+ GCTestHelper::CollectNewSpace(Heap::kIgnoreApiCallbacks);
+ EXPECT(heap->ExternalInWords(Heap::kNew) == 0);
+ EXPECT(heap->ExternalInWords(Heap::kOld) == kWeak2ExternalSize / kWordSize);
+ Dart_Isolate isolate = reinterpret_cast<Dart_Isolate>(Isolate::Current());
+ Dart_DeleteWeakPersistentHandle(isolate, weak1);
+ Dart_DeleteWeakPersistentHandle(isolate, weak2);
+ Dart_DeletePersistentHandle(strong_ref);
+ Isolate::Current()->heap()->CollectGarbage(Heap::kOld);
+ EXPECT(heap->ExternalInWords(Heap::kOld) == 0);
+}
+
+
+TEST_CASE(PrologueWeakPersistentHandleExternalAllocationSize) {
+ Heap* heap = Isolate::Current()->heap();
+ EXPECT(heap->ExternalInWords(Heap::kNew) == 0);
+ EXPECT(heap->ExternalInWords(Heap::kOld) == 0);
+ Dart_WeakPersistentHandle pwph = NULL;
+ static const intptr_t kWeakExternalSize = 1 * KB;
+ {
+ Dart_EnterScope();
+ Dart_Handle obj = NewString("a string");
+ EXPECT_VALID(obj);
+ pwph = Dart_NewPrologueWeakPersistentHandle(
+ obj, NULL, kWeakExternalSize, NULL);
+ EXPECT_VALID(AsHandle(pwph));
+ Dart_ExitScope();
+ }
+ EXPECT(heap->ExternalInWords(Heap::kNew) == kWeakExternalSize / kWordSize);
+ EXPECT(heap->ExternalInWords(Heap::kOld) == 0);
+ // Promoting the string should transfer the external size to old.
+ GCTestHelper::CollectNewSpace(Heap::kIgnoreApiCallbacks);
+ GCTestHelper::CollectNewSpace(Heap::kIgnoreApiCallbacks);
+ EXPECT(heap->ExternalInWords(Heap::kNew) == 0);
+ EXPECT(heap->ExternalInWords(Heap::kOld) == kWeakExternalSize / kWordSize);
+ Isolate::Current()->heap()->CollectGarbage(Heap::kOld);
+ EXPECT(heap->ExternalInWords(Heap::kOld) == 0);
+}
+
+
+TEST_CASE(WeakPersistentHandleExternalAllocationSizeOversized) {
+ Heap* heap = Isolate::Current()->heap();
+ Dart_WeakPersistentHandle weak1 = NULL;
+ const intptr_t kWeak1ExternalSize = 100 * MB;
+ {
+ Dart_EnterScope();
+ Dart_Handle obj = NewString("weakly referenced string");
+ EXPECT_VALID(obj);
+ weak1 = Dart_NewWeakPersistentHandle(obj, NULL, kWeak1ExternalSize, NULL);
+ EXPECT_VALID(AsHandle(weak1));
+ // While new space is "full" of external data, any allocation will
+ // trigger GC, so after two of them, obj should be promoted.
+ Dart_Handle trigger1 = NewString("trigger1");
+ EXPECT_VALID(trigger1);
+ Dart_Handle trigger2 = NewString("trigger2");
+ EXPECT_VALID(trigger2);
+ {
+ DARTSCOPE(Isolate::Current());
+ String& handle = String::Handle();
+ handle ^= Api::UnwrapHandle(obj);
+ EXPECT(handle.IsOld());
+ }
+ EXPECT(heap->ExternalInWords(Heap::kNew) == 0);
+ EXPECT(heap->ExternalInWords(Heap::kOld) == kWeak1ExternalSize / kWordSize);
+ Dart_ExitScope();
+ }
+ Dart_Isolate isolate = reinterpret_cast<Dart_Isolate>(Isolate::Current());
+ Dart_DeleteWeakPersistentHandle(isolate, weak1);
+ Isolate::Current()->heap()->CollectGarbage(Heap::kOld);
+ EXPECT(heap->ExternalInWords(Heap::kOld) == 0);
+}
+
+
+TEST_CASE(WeakPersistentHandleExternalAllocationSizeOddReferents) {
+ Heap* heap = Isolate::Current()->heap();
+ Dart_WeakPersistentHandle weak1 = NULL;
+ static const intptr_t kWeak1ExternalSize = 1 * KB;
+ Dart_WeakPersistentHandle weak2 = NULL;
+ static const intptr_t kWeak2ExternalSize = 2 * KB;
+ {
+ Dart_EnterScope();
+ Dart_Handle dart_null = Dart_Null(); // VM heap object.
+ EXPECT_VALID(dart_null);
+ weak1 = Dart_NewWeakPersistentHandle(
+ dart_null, NULL, kWeak1ExternalSize, NULL);
+ EXPECT_VALID(AsHandle(weak1));
+ Dart_Handle zero = Dart_NewInteger(0); // Smi.
+ EXPECT_VALID(dart_null);
+ weak2 = Dart_NewWeakPersistentHandle(
+ zero, NULL, kWeak2ExternalSize, NULL);
+ EXPECT_VALID(AsHandle(weak2));
+ // Both should be charged to old space.
+ EXPECT(heap->ExternalInWords(Heap::kOld) ==
+ (kWeak1ExternalSize + kWeak2ExternalSize) / kWordSize);
+ Dart_ExitScope();
+ }
+ Dart_Isolate isolate = reinterpret_cast<Dart_Isolate>(Isolate::Current());
+ Dart_DeleteWeakPersistentHandle(isolate, weak1);
+ Dart_DeleteWeakPersistentHandle(isolate, weak2);
+ Isolate::Current()->heap()->CollectGarbage(Heap::kOld);
+ EXPECT(heap->ExternalInWords(Heap::kOld) == 0);
+}
+
+
TEST_CASE(ObjectGroups) {
Dart_PersistentHandle strong = NULL;
Dart_WeakPersistentHandle strong_weak = NULL;
@@ -2225,31 +2363,31 @@
Dart_Handle local = Api::NewHandle(
isolate, String::New("strongly reachable", Heap::kOld));
strong = Dart_NewPersistentHandle(local);
- strong_weak = Dart_NewWeakPersistentHandle(local, NULL, NULL);
+ strong_weak = Dart_NewWeakPersistentHandle(local, NULL, 0, NULL);
EXPECT_VALID(AsHandle(strong));
EXPECT(!Dart_IsNull(AsHandle(strong)));
weak1 = Dart_NewWeakPersistentHandle(
Api::NewHandle(isolate, String::New("weakly reachable 1", Heap::kOld)),
- NULL, NULL);
+ NULL, 0, NULL);
EXPECT_VALID(AsHandle(weak1));
EXPECT(!Dart_IsNull(AsHandle(weak1)));
weak2 = Dart_NewWeakPersistentHandle(
Api::NewHandle(isolate, String::New("weakly reachable 2", Heap::kOld)),
- NULL, NULL);
+ NULL, 0, NULL);
EXPECT_VALID(AsHandle(weak2));
EXPECT(!Dart_IsNull(AsHandle(weak2)));
weak3 = Dart_NewWeakPersistentHandle(
Api::NewHandle(isolate, String::New("weakly reachable 3", Heap::kOld)),
- NULL, NULL);
+ NULL, 0, NULL);
EXPECT_VALID(AsHandle(weak3));
EXPECT(!Dart_IsNull(AsHandle(weak3)));
weak4 = Dart_NewWeakPersistentHandle(
Api::NewHandle(isolate, String::New("weakly reachable 4", Heap::kOld)),
- NULL, NULL);
+ NULL, 0, NULL);
EXPECT_VALID(AsHandle(weak4));
EXPECT(!Dart_IsNull(AsHandle(weak4)));
}
@@ -2442,13 +2580,13 @@
new_pwph = Dart_NewPrologueWeakPersistentHandle(
Api::NewHandle(isolate,
String::New("new space prologue weak", Heap::kNew)),
- NULL, NULL);
+ NULL, 0, NULL);
EXPECT_VALID(AsHandle(new_pwph));
EXPECT(!Dart_IsNull(AsHandle(new_pwph)));
old_pwph = Dart_NewPrologueWeakPersistentHandle(
Api::NewHandle(isolate,
String::New("old space prologue weak", Heap::kOld)),
- NULL, NULL);
+ NULL, 0, NULL);
EXPECT_VALID(AsHandle(old_pwph));
EXPECT(!Dart_IsNull(AsHandle(old_pwph)));
}
@@ -2530,7 +2668,7 @@
Dart_Handle local = Api::NewHandle(
isolate, String::New("strongly reachable", Heap::kOld));
strong = Dart_NewPersistentHandle(local);
- strong_weak = Dart_NewWeakPersistentHandle(local, NULL, NULL);
+ strong_weak = Dart_NewWeakPersistentHandle(local, NULL, 0, NULL);
EXPECT(!Dart_IsNull(AsHandle(strong)));
EXPECT_VALID(AsHandle(strong));
@@ -2540,19 +2678,19 @@
weak1 = Dart_NewWeakPersistentHandle(
Api::NewHandle(isolate, String::New("weakly reachable 1", Heap::kOld)),
- NULL, NULL);
+ NULL, 0, NULL);
EXPECT(!Dart_IsNull(AsHandle(weak1)));
EXPECT_VALID(AsHandle(weak1));
weak2 = Dart_NewWeakPersistentHandle(
Api::NewHandle(isolate, String::New("weakly reachable 2", Heap::kOld)),
- NULL, NULL);
+ NULL, 0, NULL);
EXPECT(!Dart_IsNull(AsHandle(weak2)));
EXPECT_VALID(AsHandle(weak2));
weak3 = Dart_NewWeakPersistentHandle(
Api::NewHandle(isolate, String::New("weakly reachable 3", Heap::kOld)),
- NULL, NULL);
+ NULL, 0, NULL);
EXPECT(!Dart_IsNull(AsHandle(weak3)));
EXPECT_VALID(AsHandle(weak3));
}
@@ -2636,7 +2774,7 @@
Dart_Handle local = Api::NewHandle(
isolate, String::New("strongly reachable", Heap::kOld));
strong = Dart_NewPersistentHandle(local);
- strong_weak = Dart_NewWeakPersistentHandle(local, NULL, NULL);
+ strong_weak = Dart_NewWeakPersistentHandle(local, NULL, 0, NULL);
EXPECT(!Dart_IsNull(AsHandle(strong)));
EXPECT_VALID(AsHandle(strong));
@@ -2646,19 +2784,19 @@
weak1 = Dart_NewWeakPersistentHandle(
Api::NewHandle(isolate, String::New("weakly reachable 1", Heap::kNew)),
- NULL, NULL);
+ NULL, 0, NULL);
EXPECT(!Dart_IsNull(AsHandle(weak1)));
EXPECT_VALID(AsHandle(weak1));
weak2 = Dart_NewWeakPersistentHandle(
Api::NewHandle(isolate, String::New("weakly reachable 2", Heap::kNew)),
- NULL, NULL);
+ NULL, 0, NULL);
EXPECT(!Dart_IsNull(AsHandle(weak2)));
EXPECT_VALID(AsHandle(weak2));
weak3 = Dart_NewWeakPersistentHandle(
Api::NewHandle(isolate, String::New("weakly reachable 3", Heap::kNew)),
- NULL, NULL);
+ NULL, 0, NULL);
EXPECT(!Dart_IsNull(AsHandle(weak3)));
EXPECT_VALID(AsHandle(weak3));
}
@@ -2732,6 +2870,10 @@
static int global_epilogue_callback_status;
+static void EpilogueCallbackNOP() {
+}
+
+
static void EpilogueCallbackTimes4() {
global_epilogue_callback_status *= 4;
}
@@ -2742,87 +2884,40 @@
}
-TEST_CASE(AddGarbageCollectionCallbacks) {
- // Add a prologue callback.
- EXPECT_VALID(Dart_AddGcPrologueCallback(&PrologueCallbackTimes2));
+TEST_CASE(SetGarbageCollectionCallbacks) {
+ // GC callback addition testing.
- // Add the same prologue callback again. This is an error.
- EXPECT(Dart_IsError(Dart_AddGcPrologueCallback(&PrologueCallbackTimes2)));
+ // Add GC callbacks.
+ EXPECT_VALID(Dart_SetGcCallbacks(&PrologueCallbackTimes2,
+ &EpilogueCallbackTimes4));
- // Add another prologue callback.
- EXPECT_VALID(Dart_AddGcPrologueCallback(&PrologueCallbackTimes3));
+ // Add the same callbacks again. This is an error.
+ EXPECT(Dart_IsError(Dart_SetGcCallbacks(&PrologueCallbackTimes2,
+ &EpilogueCallbackTimes4)));
- // Add the same prologue callback again. This is an error.
- EXPECT(Dart_IsError(Dart_AddGcPrologueCallback(&PrologueCallbackTimes3)));
+ // Add another callback. This is an error.
+ EXPECT(Dart_IsError(Dart_SetGcCallbacks(&PrologueCallbackTimes3,
+ &EpilogueCallbackTimes5)));
- // Add an epilogue callback.
- EXPECT_VALID(Dart_AddGcEpilogueCallback(&EpilogueCallbackTimes4));
+ // GC callback removal testing.
- // Add the same epilogue callback again. This is an error.
- EXPECT(Dart_IsError(Dart_AddGcEpilogueCallback(&EpilogueCallbackTimes4)));
+ // Remove GC callbacks.
+ EXPECT_VALID(Dart_SetGcCallbacks(NULL, NULL));
- // Add annother epilogue callback.
- EXPECT_VALID(Dart_AddGcEpilogueCallback(&EpilogueCallbackTimes5));
+ // Remove GC callbacks whennone exist. This is an error.
+ EXPECT(Dart_IsError(Dart_SetGcCallbacks(NULL, NULL)));
- // Add the same epilogue callback again. This is an error.
- EXPECT(Dart_IsError(Dart_AddGcEpilogueCallback(&EpilogueCallbackTimes5)));
-}
-
-
-TEST_CASE(RemoveGarbageCollectionCallbacks) {
- // Remove a prologue callback that has not been added. This is an error.
- EXPECT(Dart_IsError(Dart_RemoveGcPrologueCallback(&PrologueCallbackTimes2)));
-
- // Add a prologue callback.
- EXPECT_VALID(Dart_AddGcPrologueCallback(&PrologueCallbackTimes2));
-
- // Remove a prologue callback.
- EXPECT_VALID(Dart_RemoveGcPrologueCallback(&PrologueCallbackTimes2));
-
- // Remove a prologue callback again. This is an error.
- EXPECT(Dart_IsError(Dart_RemoveGcPrologueCallback(&PrologueCallbackTimes2)));
-
- // Add two prologue callbacks.
- EXPECT_VALID(Dart_AddGcPrologueCallback(&PrologueCallbackTimes2));
- EXPECT_VALID(Dart_AddGcPrologueCallback(&PrologueCallbackTimes3));
-
- // Remove two prologue callbacks.
- EXPECT_VALID(Dart_RemoveGcPrologueCallback(&PrologueCallbackTimes3));
- EXPECT_VALID(Dart_RemoveGcPrologueCallback(&PrologueCallbackTimes2));
-
- // Remove epilogue callbacks again. This is an error.
- EXPECT(Dart_IsError(Dart_RemoveGcEpilogueCallback(&EpilogueCallbackTimes4)));
- EXPECT(Dart_IsError(Dart_RemoveGcEpilogueCallback(&EpilogueCallbackTimes5)));
-
- // Remove a epilogue callback that has not been added. This is an error.
- EXPECT(Dart_IsError(Dart_RemoveGcEpilogueCallback(&EpilogueCallbackTimes5)));
-
- // Add a epilogue callback.
- EXPECT_VALID(Dart_AddGcEpilogueCallback(&EpilogueCallbackTimes4));
-
- // Remove a epilogue callback.
- EXPECT_VALID(Dart_RemoveGcEpilogueCallback(&EpilogueCallbackTimes4));
-
- // Remove a epilogue callback again. This is an error.
- EXPECT(Dart_IsError(Dart_RemoveGcEpilogueCallback(&EpilogueCallbackTimes4)));
-
- // Add two epilogue callbacks.
- EXPECT_VALID(Dart_AddGcEpilogueCallback(&EpilogueCallbackTimes4));
- EXPECT_VALID(Dart_AddGcEpilogueCallback(&EpilogueCallbackTimes5));
-
- // Remove two epilogue callbacks.
- EXPECT_VALID(Dart_RemoveGcEpilogueCallback(&EpilogueCallbackTimes5));
- EXPECT_VALID(Dart_RemoveGcEpilogueCallback(&EpilogueCallbackTimes4));
-
- // Remove epilogue callbacks again. This is an error.
- EXPECT(Dart_IsError(Dart_RemoveGcEpilogueCallback(&EpilogueCallbackTimes4)));
- EXPECT(Dart_IsError(Dart_RemoveGcEpilogueCallback(&EpilogueCallbackTimes5)));
+ EXPECT_VALID(Dart_SetGcCallbacks(&PrologueCallbackTimes2,
+ &EpilogueCallbackTimes4));
+ EXPECT(Dart_IsError(Dart_SetGcCallbacks(&PrologueCallbackTimes2, NULL)));
+ EXPECT(Dart_IsError(Dart_SetGcCallbacks(NULL, &EpilogueCallbackTimes4)));
}
TEST_CASE(SingleGarbageCollectionCallback) {
// Add a prologue callback.
- EXPECT_VALID(Dart_AddGcPrologueCallback(&PrologueCallbackTimes2));
+ EXPECT_VALID(Dart_SetGcCallbacks(&PrologueCallbackTimes2,
+ &EpilogueCallbackNOP));
// Garbage collect new space ignoring callbacks. This should not
// invoke the prologue callback. No status values should change.
@@ -2864,7 +2959,9 @@
EXPECT_EQ(7, global_epilogue_callback_status);
// Add an epilogue callback.
- EXPECT_VALID(Dart_AddGcEpilogueCallback(&EpilogueCallbackTimes4));
+ EXPECT_VALID(Dart_SetGcCallbacks(NULL, NULL));
+ EXPECT_VALID(Dart_SetGcCallbacks(&PrologueCallbackTimes2,
+ &EpilogueCallbackTimes4));
// Garbage collect new space. This should not invoke the prologue
// or the epilogue callback. No status values should change.
@@ -2904,91 +3001,7 @@
EXPECT_EQ(112, global_epilogue_callback_status);
// Remove the prologue and epilogue callbacks
- EXPECT_VALID(Dart_RemoveGcPrologueCallback(&PrologueCallbackTimes2));
- EXPECT_VALID(Dart_RemoveGcEpilogueCallback(&EpilogueCallbackTimes4));
-
- // Garbage collect old space. No callbacks should be invoked. No
- // status values should change.
- global_prologue_callback_status = 3;
- global_epilogue_callback_status = 7;
- Isolate::Current()->heap()->CollectGarbage(Heap::kOld);
- EXPECT_EQ(3, global_prologue_callback_status);
- EXPECT_EQ(7, global_epilogue_callback_status);
-}
-
-TEST_CASE(MultipleGarbageCollectionCallbacks) {
- // Add prologue callbacks.
- EXPECT_VALID(Dart_AddGcPrologueCallback(&PrologueCallbackTimes2));
- EXPECT_VALID(Dart_AddGcPrologueCallback(&PrologueCallbackTimes3));
-
- // Add an epilogue callback.
- EXPECT_VALID(Dart_AddGcEpilogueCallback(&EpilogueCallbackTimes4));
-
- // Garbage collect new space. This should not invoke the prologue
- // or epilogue callbacks. No status values should change.
- global_prologue_callback_status = 3;
- global_epilogue_callback_status = 7;
- GCTestHelper::CollectNewSpace(Heap::kIgnoreApiCallbacks);
- EXPECT_EQ(3, global_prologue_callback_status);
- EXPECT_EQ(7, global_epilogue_callback_status);
-
- // Garbage collect old space. This should invoke both prologue
- // callbacks and the epilogue callback. The prologue and epilogue
- // status values should change.
- global_prologue_callback_status = 3;
- global_epilogue_callback_status = 7;
- Isolate::Current()->heap()->CollectGarbage(Heap::kOld);
- EXPECT_EQ(18, global_prologue_callback_status);
- EXPECT_EQ(28, global_epilogue_callback_status);
-
- // Add another GC epilogue callback.
- EXPECT_VALID(Dart_AddGcEpilogueCallback(&EpilogueCallbackTimes5));
-
- // Garbage collect old space. This should invoke both prologue
- // callbacks and both epilogue callbacks. The prologue and epilogue
- // status values should change.
- global_prologue_callback_status = 3;
- global_epilogue_callback_status = 7;
- Isolate::Current()->heap()->CollectGarbage(Heap::kOld);
- EXPECT_EQ(18, global_prologue_callback_status);
- EXPECT_EQ(140, global_epilogue_callback_status);
-
- // Remove an epilogue callback.
- EXPECT_VALID(Dart_RemoveGcEpilogueCallback(&EpilogueCallbackTimes4));
-
- // Garbage collect old space. This should invoke both prologue
- // callbacks and the remaining epilogue callback. The prologue and
- // epilogue status values should change.
- global_prologue_callback_status = 3;
- global_epilogue_callback_status = 7;
- Isolate::Current()->heap()->CollectGarbage(Heap::kOld);
- EXPECT_EQ(18, global_prologue_callback_status);
- EXPECT_EQ(35, global_epilogue_callback_status);
-
- // Remove the remaining epilogue callback.
- EXPECT_VALID(Dart_RemoveGcEpilogueCallback(&EpilogueCallbackTimes5));
-
- // Garbage collect old space. This should invoke both prologue
- // callbacks. The prologue status value should change.
- global_prologue_callback_status = 3;
- global_epilogue_callback_status = 7;
- Isolate::Current()->heap()->CollectGarbage(Heap::kOld);
- EXPECT_EQ(18, global_prologue_callback_status);
- EXPECT_EQ(7, global_epilogue_callback_status);
-
- // Remove a prologue callback.
- EXPECT_VALID(Dart_RemoveGcPrologueCallback(&PrologueCallbackTimes3));
-
- // Garbage collect old space. This should invoke the remaining
- // prologue callback. The prologue status value should change.
- global_prologue_callback_status = 3;
- global_epilogue_callback_status = 7;
- Isolate::Current()->heap()->CollectGarbage(Heap::kOld);
- EXPECT_EQ(6, global_prologue_callback_status);
- EXPECT_EQ(7, global_epilogue_callback_status);
-
- // Remove the remaining prologue callback.
- EXPECT_VALID(Dart_RemoveGcPrologueCallback(&PrologueCallbackTimes2));
+ EXPECT_VALID(Dart_SetGcCallbacks(NULL, NULL));
// Garbage collect old space. No callbacks should be invoked. No
// status values should change.
diff --git a/runtime/vm/dart_api_state.h b/runtime/vm/dart_api_state.h
index 1f63276..32593fa 100644
--- a/runtime/vm/dart_api_state.h
+++ b/runtime/vm/dart_api_state.h
@@ -8,6 +8,8 @@
#include "include/dart_api.h"
#include "platform/thread.h"
+#include "platform/utils.h"
+#include "vm/bitfield.h"
#include "vm/dart_api_impl.h"
#include "vm/flags.h"
#include "vm/growable_array.h"
@@ -212,11 +214,70 @@
return reinterpret_cast<Dart_WeakPersistentHandle>(this);
}
+ void SetExternalSize(intptr_t size, Isolate* isolate) {
+ ASSERT(size >= 0);
+ set_external_size(Utils::RoundUp(size, kObjectAlignment));
+ if (SpaceForExternal() == Heap::kNew) {
+ SetExternalNewSpaceBit();
+ }
+ // TODO(koda): On repeated/large external allocations for existing objects,
+ // without any intervening normal allocation, GC will not trigger.
+ isolate->heap()->AllocateExternal(external_size(), SpaceForExternal());
+ }
+
+ // Called when the referent becomes unreachable.
+ void UpdateUnreachable(Isolate* isolate, bool is_prologue_weak) {
+ EnsureFreeExternal(isolate);
+ Finalize(isolate, this, is_prologue_weak);
+ }
+
+ // Called when the referent has moved, potentially between generations.
+ void UpdateRelocated(Isolate* isolate) {
+ if (IsSetNewSpaceBit() && (SpaceForExternal() == Heap::kOld)) {
+ isolate->heap()->FreeExternal(external_size(), Heap::kNew);
+ isolate->heap()->AllocateExternal(external_size(), Heap::kOld);
+ ClearExternalNewSpaceBit();
+ }
+ }
+
+ // Idempotent. Called when the handle is explicitly deleted or the
+ // referent becomes unreachable.
+ void EnsureFreeExternal(Isolate* isolate) {
+ isolate->heap()->FreeExternal(external_size(), SpaceForExternal());
+ set_external_size(0);
+ }
+
static bool IsPrologueWeakPersistentHandle(Dart_WeakPersistentHandle handle) {
uword addr = reinterpret_cast<uword>(handle);
return (addr & kWeakPersistentTagMask) == kPrologueWeakPersistentTag;
}
static FinalizablePersistentHandle* Cast(Dart_WeakPersistentHandle handle);
+
+ private:
+ enum {
+ kWeakPersistentTag = 0,
+ kPrologueWeakPersistentTag = 1,
+ kWeakPersistentTagSize = 1,
+ kWeakPersistentTagMask = 1,
+ };
+
+ // This part of external_data_ is the number of externally allocated bytes.
+ // TODO(koda): Measure size in words instead.
+ class ExternalSizeBits : public BitField<intptr_t, 1, kBitsPerWord - 1> {};
+ // This bit of external_data_ is true if the referent was created in new
+ // space and UpdateRelocated has not yet detected any promotion.
+ class ExternalNewSpaceBit : public BitField<bool, 0, 1> {};
+ // TODO(koda): Use bitfield also for the prologue tag.
+
+ friend class FinalizablePersistentHandles;
+
+ FinalizablePersistentHandle()
+ : raw_(NULL),
+ peer_(NULL),
+ external_data_(0),
+ callback_(NULL) { }
+ ~FinalizablePersistentHandle() { }
+
static void Finalize(Isolate* isolate,
FinalizablePersistentHandle* handle,
bool is_prologue_weak) {
@@ -233,19 +294,6 @@
}
}
- private:
- enum {
- kWeakPersistentTag = 0,
- kPrologueWeakPersistentTag = 1,
- kWeakPersistentTagSize = 1,
- kWeakPersistentTagMask = 1,
- };
-
- friend class FinalizablePersistentHandles;
-
- FinalizablePersistentHandle() : raw_(NULL), peer_(NULL), callback_(NULL) { }
- ~FinalizablePersistentHandle() { }
-
// Overload the raw_ field as a next pointer when adding freed
// handles to the free list.
FinalizablePersistentHandle* Next() {
@@ -263,11 +311,40 @@
void Clear() {
raw_ = Object::null();
peer_ = NULL;
+ external_data_ = 0;
callback_ = NULL;
}
+ intptr_t external_size() const {
+ return ExternalSizeBits::decode(external_data_);
+ }
+
+ void set_external_size(intptr_t size) {
+ external_data_ = ExternalSizeBits::update(size, external_data_);
+ }
+
+ bool IsSetNewSpaceBit() const {
+ return ExternalNewSpaceBit::decode(external_data_);
+ }
+
+ void SetExternalNewSpaceBit() {
+ external_data_ = ExternalNewSpaceBit::update(true, external_data_);
+ }
+
+ void ClearExternalNewSpaceBit() {
+ external_data_ = ExternalNewSpaceBit::update(false, external_data_);
+ }
+
+ // Returns the space to charge for the external size.
+ Heap::Space SpaceForExternal() const {
+ // Non-heap and VM-heap objects count as old space here.
+ return (raw_->IsHeapObject() && raw_->IsNewObject()) ?
+ Heap::kNew : Heap::kOld;
+ }
+
RawObject* raw_;
void* peer_;
+ uword external_data_;
Dart_WeakPersistentHandleFinalizer callback_;
DISALLOW_ALLOCATION(); // Allocated through AllocateHandle methods.
DISALLOW_COPY_AND_ASSIGN(FinalizablePersistentHandle);
@@ -470,7 +547,7 @@
handle = reinterpret_cast<FinalizablePersistentHandle*>(
AllocateScopedHandle());
}
- handle->set_callback(NULL);
+ handle->Clear();
return handle;
}
diff --git a/runtime/vm/debugger.cc b/runtime/vm/debugger.cc
index 00ea8f8..69fc769 100644
--- a/runtime/vm/debugger.cc
+++ b/runtime/vm/debugger.cc
@@ -1474,6 +1474,7 @@
(kind == RawFunction::kMethodExtractor) ||
(kind == RawFunction::kNoSuchMethodDispatcher) ||
(kind == RawFunction::kInvokeFieldDispatcher) ||
+ (kind == RawFunction::kInvokeClosureDispatcher) ||
func.IsImplicitConstructor()) {
return false;
}
diff --git a/runtime/vm/deopt_instructions.cc b/runtime/vm/deopt_instructions.cc
index 3e31cb2..80e217b 100644
--- a/runtime/vm/deopt_instructions.cc
+++ b/runtime/vm/deopt_instructions.cc
@@ -191,6 +191,7 @@
case DeoptInstr::kInt64StackSlot:
case DeoptInstr::kFloat32x4StackSlot:
case DeoptInstr::kInt32x4StackSlot:
+ case DeoptInstr::kFloat64x2StackSlot:
case DeoptInstr::kPp:
case DeoptInstr::kCallerPp:
case DeoptInstr::kMaterializedObjectRef:
@@ -201,6 +202,7 @@
case DeoptInstr::kInt64FpuRegister:
case DeoptInstr::kFloat32x4FpuRegister:
case DeoptInstr::kInt32x4FpuRegister:
+ case DeoptInstr::kFloat64x2FpuRegister:
// 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
diff --git a/runtime/vm/disassembler_ia32.cc b/runtime/vm/disassembler_ia32.cc
index eca4dd4..3651210 100644
--- a/runtime/vm/disassembler_ia32.cc
+++ b/runtime/vm/disassembler_ia32.cc
@@ -1648,6 +1648,19 @@
Print(",");
PrintXmmRegister(rm);
data += 2;
+ } else if (*data == 0xC6) {
+ int mod, regop, rm;
+ data++;
+ GetModRm(*data, &mod, ®op, &rm);
+ Print("shufpd ");
+ PrintXmmRegister(regop);
+ Print(",");
+ data += PrintRightXmmOperand(data);
+ int comparison = *data;
+ Print(" [");
+ PrintHex(comparison);
+ Print("]");
+ data++;
} else {
UNIMPLEMENTED();
}
diff --git a/runtime/vm/disassembler_x64.cc b/runtime/vm/disassembler_x64.cc
index 40a0e45..3c751e5 100644
--- a/runtime/vm/disassembler_x64.cc
+++ b/runtime/vm/disassembler_x64.cc
@@ -1199,7 +1199,14 @@
if (operand_size_ == 0x66) {
// 0x66 0x0F prefix.
int mod, regop, rm;
- if (opcode == 0x3A) {
+ if (opcode == 0xC6) {
+ int mod, regop, rm;
+ get_modrm(*current, &mod, ®op, &rm);
+ AppendToBuffer("shufpd %s, ", NameOfXMMRegister(regop));
+ current += PrintRightXMMOperand(current);
+ AppendToBuffer(" [%x]", *current);
+ current++;
+ } else if (opcode == 0x3A) {
uint8_t third_byte = *current;
current = data + 3;
if (third_byte == 0x17) {
diff --git a/runtime/vm/flow_graph.cc b/runtime/vm/flow_graph.cc
index be34899..98a774b 100644
--- a/runtime/vm/flow_graph.cc
+++ b/runtime/vm/flow_graph.cc
@@ -868,11 +868,10 @@
(push != NULL) ||
(drop != NULL) ||
(constant != NULL)) {
- intptr_t index;
- Definition* result;
+ Definition* result = NULL;
if (store != NULL) {
// Update renaming environment.
- index = store->local().BitIndexIn(num_non_copied_params_);
+ intptr_t index = store->local().BitIndexIn(num_non_copied_params_);
result = store->value()->definition();
if (variable_liveness->IsStoreAlive(block_entry, store)) {
@@ -884,7 +883,7 @@
// The graph construction ensures we do not have an unused LoadLocal
// computation.
ASSERT(definition->is_used());
- index = load->local().BitIndexIn(num_non_copied_params_);
+ intptr_t index = load->local().BitIndexIn(num_non_copied_params_);
result = (*env)[index];
PhiInstr* phi = result->AsPhi();
@@ -906,7 +905,10 @@
for (intptr_t j = 0; j < drop->num_temps(); j++) {
env->RemoveLast();
}
- result = drop->value()->definition();
+ if (drop->value() != NULL) {
+ result = drop->value()->definition();
+ }
+ ASSERT((drop->value() != NULL) || !drop->is_used());
} else {
ASSERT(definition->is_used());
result = GetConstant(constant->value());
diff --git a/runtime/vm/flow_graph_builder.cc b/runtime/vm/flow_graph_builder.cc
index 853034e..ae60f3f 100644
--- a/runtime/vm/flow_graph_builder.cc
+++ b/runtime/vm/flow_graph_builder.cc
@@ -2106,34 +2106,19 @@
void EffectGraphVisitor::VisitLetNode(LetNode* node) {
+ BuildLetTempExpressions(node);
+
+ // Visit body.
+ for (intptr_t i = 0; i < node->nodes().length(); ++i) {
+ EffectGraphVisitor for_effect(owner());
+ node->nodes()[i]->Visit(&for_effect);
+ Append(for_effect);
+ }
+
intptr_t num_temps = node->num_temps();
if (num_temps > 0) {
- BuildLetTempExpressions(node);
- // TODO(fschneider): Generate better code for effect context by visiting the
- // body for effect. Currently, the value of the body expression is
- // materialized and then dropped. This also requires changing DropTempsInstr
- // to have zero or one inputs.
-
- // Visit body.
- for (intptr_t i = 0; i < node->nodes().length() - 1; ++i) {
- EffectGraphVisitor for_effect(owner());
- node->nodes()[i]->Visit(&for_effect);
- Append(for_effect);
- }
- // Visit the last body expression for value.
- ValueGraphVisitor for_value(owner());
- node->nodes().Last()->Visit(&for_value);
- Append(for_value);
- Value* result_value = for_value.value();
owner()->DeallocateTemps(num_temps);
- Do(new DropTempsInstr(num_temps, result_value));
- } else {
- ASSERT(num_temps == 0);
- for (intptr_t i = 0; i < node->nodes().length(); ++i) {
- EffectGraphVisitor for_effect(owner());
- node->nodes()[i]->Visit(&for_effect);
- Append(for_effect);
- }
+ Do(new DropTempsInstr(num_temps));
}
}
@@ -2277,35 +2262,13 @@
arguments);
alloc->set_closure_function(function);
- // Create fake fields for function and context. Only the context field is
- // stored at the allocation to be used later when inlining a closure call.
- const Field& function_field =
- Field::ZoneHandle(
- Field::New(Symbols::ClosureFunctionField(),
- false, // !static
- true, // final
- false, // !const
- alloc->cls(),
- 0)); // No token position.
- function_field.SetOffset(Closure::function_offset());
- const Field& context_field =
- Field::ZoneHandle(Field::New(
- Symbols::ClosureContextField(),
- false, // !static
- true, // final
- false, // !const
- alloc->cls(),
- 0)); // No token position.
- context_field.SetOffset(Closure::context_offset());
- alloc->set_context_field(context_field);
-
Value* closure_val = Bind(alloc);
{ LocalVariable* closure_tmp_var = EnterTempLocalScope(closure_val);
// Store function.
Value* closure_tmp_val = Bind(new LoadLocalInstr(*closure_tmp_var));
Value* func_val =
Bind(new ConstantInstr(Function::ZoneHandle(function.raw())));
- Do(new StoreInstanceFieldInstr(function_field,
+ Do(new StoreInstanceFieldInstr(Closure::function_offset(),
closure_tmp_val,
func_val,
kEmitStoreBarrier));
@@ -2329,7 +2292,7 @@
// Store new context in closure.
closure_tmp_val = Bind(new LoadLocalInstr(*closure_tmp_var));
context_tmp_val = Bind(new LoadLocalInstr(*context_tmp_var));
- Do(new StoreInstanceFieldInstr(context_field,
+ Do(new StoreInstanceFieldInstr(Closure::context_offset(),
closure_tmp_val,
context_tmp_val,
kEmitStoreBarrier));
@@ -2339,7 +2302,7 @@
// Store current context in closure.
closure_tmp_val = Bind(new LoadLocalInstr(*closure_tmp_var));
Value* context = Bind(new CurrentContextInstr());
- Do(new StoreInstanceFieldInstr(context_field,
+ Do(new StoreInstanceFieldInstr(Closure::context_offset(),
closure_tmp_val,
context,
kEmitStoreBarrier));
@@ -3039,7 +3002,8 @@
load->set_recognized_kind(kind);
return ReturnDefinition(load);
}
- case MethodRecognizer::kObjectCid: {
+ case MethodRecognizer::kObjectCid:
+ case MethodRecognizer::kTypedListBaseCid: {
Value* receiver = Bind(BuildLoadThisVar(node->scope()));
LoadClassIdInstr* load = new LoadClassIdInstr(receiver);
return ReturnDefinition(load);
@@ -3469,8 +3433,7 @@
ASSERT(parameter.owner() == scope);
if (parameter.is_captured()) {
// Create a temporary local describing the original position.
- const String& temp_name = String::ZoneHandle(String::Concat(
- parameter.name(), String::Handle(Symbols::New("-orig"))));
+ const String& temp_name = Symbols::TempParam();
LocalVariable* temp_local = new LocalVariable(
0, // Token index.
temp_name,
diff --git a/runtime/vm/flow_graph_compiler.cc b/runtime/vm/flow_graph_compiler.cc
index 0940572..137da67 100644
--- a/runtime/vm/flow_graph_compiler.cc
+++ b/runtime/vm/flow_graph_compiler.cc
@@ -581,6 +581,7 @@
break;
case kUnboxedFloat32x4:
case kUnboxedInt32x4:
+ case kUnboxedFloat64x2:
it.SetCurrentLocation(Location::QuadStackSlot(index));
break;
default:
diff --git a/runtime/vm/flow_graph_compiler.h b/runtime/vm/flow_graph_compiler.h
index dd8bc52..278f9bb 100644
--- a/runtime/vm/flow_graph_compiler.h
+++ b/runtime/vm/flow_graph_compiler.h
@@ -246,7 +246,7 @@
static bool SupportsUnboxedMints();
static bool SupportsSinCos();
- static bool SupportsUnboxedFloat32x4();
+ static bool SupportsUnboxedSimd128();
// Accessors.
Assembler* assembler() const { return assembler_; }
diff --git a/runtime/vm/flow_graph_compiler_arm.cc b/runtime/vm/flow_graph_compiler_arm.cc
index c31dbaf..8a98431 100644
--- a/runtime/vm/flow_graph_compiler_arm.cc
+++ b/runtime/vm/flow_graph_compiler_arm.cc
@@ -44,7 +44,7 @@
}
-bool FlowGraphCompiler::SupportsUnboxedFloat32x4() {
+bool FlowGraphCompiler::SupportsUnboxedSimd128() {
return TargetCPUFeatures::neon_supported() && FLAG_enable_simd_inline;
}
diff --git a/runtime/vm/flow_graph_compiler_ia32.cc b/runtime/vm/flow_graph_compiler_ia32.cc
index f540b32..436fd82 100644
--- a/runtime/vm/flow_graph_compiler_ia32.cc
+++ b/runtime/vm/flow_graph_compiler_ia32.cc
@@ -48,7 +48,7 @@
}
-bool FlowGraphCompiler::SupportsUnboxedFloat32x4() {
+bool FlowGraphCompiler::SupportsUnboxedSimd128() {
return FLAG_enable_simd_inline;
}
diff --git a/runtime/vm/flow_graph_compiler_mips.cc b/runtime/vm/flow_graph_compiler_mips.cc
index 42578b9..683a232 100644
--- a/runtime/vm/flow_graph_compiler_mips.cc
+++ b/runtime/vm/flow_graph_compiler_mips.cc
@@ -42,7 +42,7 @@
}
-bool FlowGraphCompiler::SupportsUnboxedFloat32x4() {
+bool FlowGraphCompiler::SupportsUnboxedSimd128() {
return false;
}
diff --git a/runtime/vm/flow_graph_compiler_x64.cc b/runtime/vm/flow_graph_compiler_x64.cc
index 871d955..638f612 100644
--- a/runtime/vm/flow_graph_compiler_x64.cc
+++ b/runtime/vm/flow_graph_compiler_x64.cc
@@ -44,7 +44,7 @@
}
-bool FlowGraphCompiler::SupportsUnboxedFloat32x4() {
+bool FlowGraphCompiler::SupportsUnboxedSimd128() {
return FLAG_enable_simd_inline;
}
diff --git a/runtime/vm/flow_graph_inliner.cc b/runtime/vm/flow_graph_inliner.cc
index 5424cd4..cc72cd6 100644
--- a/runtime/vm/flow_graph_inliner.cc
+++ b/runtime/vm/flow_graph_inliner.cc
@@ -675,20 +675,9 @@
// TODO(fschneider): Avoid setting the context, if not needed.
Definition* closure =
closure_call->PushArgumentAt(0)->value()->definition();
- AllocateObjectInstr* alloc =
- closure_call->ArgumentAt(0)->AsAllocateObject();
- Definition* context = NULL;
- if ((alloc != NULL) && !alloc->closure_function().IsNull()) {
- ASSERT(!alloc->context_field().IsNull());
- context = new LoadFieldInstr(new Value(closure),
- &alloc->context_field(),
- Type::ZoneHandle());
- } else {
- context = new LoadFieldInstr(new Value(closure),
- Closure::context_offset(),
- Type::ZoneHandle());
- }
-
+ Definition* context = new LoadFieldInstr(new Value(closure),
+ Closure::context_offset(),
+ Type::ZoneHandle());
context->set_ssa_temp_index(caller_graph()->alloc_ssa_temp_index());
context->InsertAfter(callee_entry);
StoreContextInstr* set_context =
diff --git a/runtime/vm/flow_graph_optimizer.cc b/runtime/vm/flow_graph_optimizer.cc
index afa0bb9..5ee1e2f 100644
--- a/runtime/vm/flow_graph_optimizer.cc
+++ b/runtime/vm/flow_graph_optimizer.cc
@@ -48,7 +48,7 @@
static bool ShouldInlineSimd() {
- return FlowGraphCompiler::SupportsUnboxedFloat32x4();
+ return FlowGraphCompiler::SupportsUnboxedSimd128();
}
@@ -1943,6 +1943,8 @@
operands_type = kFloat32x4Cid;
} else if (HasOnlyTwoOf(ic_data, kInt32x4Cid)) {
operands_type = kInt32x4Cid;
+ } else if (HasOnlyTwoOf(ic_data, kFloat64x2Cid)) {
+ operands_type = kFloat64x2Cid;
} else {
return false;
}
@@ -1958,6 +1960,8 @@
operands_type = kDoubleCid;
} else if (HasOnlyTwoOf(ic_data, kFloat32x4Cid)) {
operands_type = kFloat32x4Cid;
+ } else if (HasOnlyTwoOf(ic_data, kFloat64x2Cid)) {
+ operands_type = kFloat64x2Cid;
} else {
return false;
}
@@ -1968,6 +1972,8 @@
operands_type = kDoubleCid;
} else if (HasOnlyTwoOf(ic_data, kFloat32x4Cid)) {
operands_type = kFloat32x4Cid;
+ } else if (HasOnlyTwoOf(ic_data, kFloat64x2Cid)) {
+ operands_type = kFloat64x2Cid;
} else {
return false;
}
@@ -2063,6 +2069,8 @@
return InlineFloat32x4BinaryOp(call, op_kind);
} else if (operands_type == kInt32x4Cid) {
return InlineInt32x4BinaryOp(call, op_kind);
+ } else if (operands_type == kFloat64x2Cid) {
+ return InlineFloat64x2BinaryOp(call, op_kind);
} else if (op_kind == Token::kMOD) {
ASSERT(operands_type == kSmiCid);
if (right->IsConstant()) {
@@ -2333,6 +2341,29 @@
}
+bool FlowGraphOptimizer::InlineFloat64x2Getter(InstanceCallInstr* call,
+ MethodRecognizer::Kind getter) {
+ AddCheckClass(call->ArgumentAt(0),
+ ICData::ZoneHandle(
+ call->ic_data()->AsUnaryClassChecksForArgNr(0)),
+ call->deopt_id(),
+ call->env(),
+ call);
+ if ((getter == MethodRecognizer::kFloat64x2GetX) ||
+ (getter == MethodRecognizer::kFloat64x2GetY)) {
+ Simd64x2ShuffleInstr* instr = new Simd64x2ShuffleInstr(
+ getter,
+ new Value(call->ArgumentAt(0)),
+ 0,
+ call->deopt_id());
+ ReplaceCall(call, instr);
+ return true;
+ }
+ UNREACHABLE();
+ return false;
+}
+
+
bool FlowGraphOptimizer::InlineInt32x4Getter(InstanceCallInstr* call,
MethodRecognizer::Kind getter) {
if (!ShouldInlineSimd()) {
@@ -2471,6 +2502,37 @@
}
+bool FlowGraphOptimizer::InlineFloat64x2BinaryOp(InstanceCallInstr* call,
+ Token::Kind op_kind) {
+ if (!ShouldInlineSimd()) {
+ return false;
+ }
+ ASSERT(call->ArgumentCount() == 2);
+ Definition* left = call->ArgumentAt(0);
+ Definition* right = call->ArgumentAt(1);
+ // Type check left.
+ AddCheckClass(left,
+ ICData::ZoneHandle(
+ call->ic_data()->AsUnaryClassChecksForArgNr(0)),
+ call->deopt_id(),
+ call->env(),
+ call);
+ // Type check right.
+ AddCheckClass(right,
+ ICData::ZoneHandle(
+ call->ic_data()->AsUnaryClassChecksForArgNr(1)),
+ call->deopt_id(),
+ call->env(),
+ call);
+ // Replace call.
+ BinaryFloat64x2OpInstr* float64x2_bin_op =
+ new BinaryFloat64x2OpInstr(op_kind, new Value(left), new Value(right),
+ call->deopt_id());
+ ReplaceCall(call, float64x2_bin_op);
+ return true;
+}
+
+
// Only unique implicit instance getters can be currently handled.
bool FlowGraphOptimizer::TryInlineInstanceGetter(InstanceCallInstr* call) {
ASSERT(call->HasICData());
@@ -2863,6 +2925,10 @@
return TryInlineInt32x4Method(call, recognized_kind);
}
+ if ((class_ids[0] == kFloat64x2Cid) && (ic_data.NumberOfChecks() == 1)) {
+ return TryInlineFloat64x2Method(call, recognized_kind);
+ }
+
if (recognized_kind == MethodRecognizer::kIntegerLeftShiftWithMask32) {
ASSERT(call->ArgumentCount() == 3);
ASSERT(ic_data.num_args_tested() == 2);
@@ -2958,6 +3024,46 @@
call->deopt_id());
ReplaceCall(call, cast);
return true;
+ } else if (recognized_kind == MethodRecognizer::kFloat32x4FromFloat64x2) {
+ Float64x2ToFloat32x4Instr* cast =
+ new Float64x2ToFloat32x4Instr(new Value(call->ArgumentAt(1)),
+ call->deopt_id());
+ ReplaceCall(call, cast);
+ return true;
+ }
+ return false;
+}
+
+
+bool FlowGraphOptimizer::TryInlineFloat64x2Constructor(
+ StaticCallInstr* call,
+ MethodRecognizer::Kind recognized_kind) {
+ if (!ShouldInlineSimd()) {
+ return false;
+ }
+ if (recognized_kind == MethodRecognizer::kFloat64x2Zero) {
+ Float64x2ZeroInstr* zero = new Float64x2ZeroInstr(call->deopt_id());
+ ReplaceCall(call, zero);
+ return true;
+ } else if (recognized_kind == MethodRecognizer::kFloat64x2Splat) {
+ Float64x2SplatInstr* splat =
+ new Float64x2SplatInstr(new Value(call->ArgumentAt(1)),
+ call->deopt_id());
+ ReplaceCall(call, splat);
+ return true;
+ } else if (recognized_kind == MethodRecognizer::kFloat64x2Constructor) {
+ Float64x2ConstructorInstr* con =
+ new Float64x2ConstructorInstr(new Value(call->ArgumentAt(1)),
+ new Value(call->ArgumentAt(2)),
+ call->deopt_id());
+ ReplaceCall(call, con);
+ return true;
+ } else if (recognized_kind == MethodRecognizer::kFloat64x2FromFloat32x4) {
+ Float32x4ToFloat64x2Instr* cast =
+ new Float32x4ToFloat64x2Instr(new Value(call->ArgumentAt(1)),
+ call->deopt_id());
+ ReplaceCall(call, cast);
+ return true;
}
return false;
}
@@ -3144,6 +3250,63 @@
}
+bool FlowGraphOptimizer::TryInlineFloat64x2Method(
+ InstanceCallInstr* call,
+ MethodRecognizer::Kind recognized_kind) {
+ if (!ShouldInlineSimd()) {
+ return false;
+ }
+ ASSERT(call->HasICData());
+ switch (recognized_kind) {
+ case MethodRecognizer::kFloat64x2GetX:
+ case MethodRecognizer::kFloat64x2GetY:
+ ASSERT(call->ic_data()->HasReceiverClassId(kFloat64x2Cid));
+ ASSERT(call->ic_data()->HasOneTarget());
+ return InlineFloat64x2Getter(call, recognized_kind);
+ case MethodRecognizer::kFloat64x2Negate:
+ case MethodRecognizer::kFloat64x2Abs:
+ case MethodRecognizer::kFloat64x2Sqrt:
+ case MethodRecognizer::kFloat64x2GetSignMask: {
+ Definition* left = call->ArgumentAt(0);
+ // Type check left.
+ AddCheckClass(left,
+ ICData::ZoneHandle(
+ call->ic_data()->AsUnaryClassChecksForArgNr(0)),
+ call->deopt_id(),
+ call->env(),
+ call);
+ Float64x2ZeroArgInstr* zeroArg =
+ new Float64x2ZeroArgInstr(recognized_kind, new Value(left),
+ call->deopt_id());
+ ReplaceCall(call, zeroArg);
+ return true;
+ }
+ case MethodRecognizer::kFloat64x2Scale:
+ case MethodRecognizer::kFloat64x2WithX:
+ case MethodRecognizer::kFloat64x2WithY:
+ case MethodRecognizer::kFloat64x2Min:
+ case MethodRecognizer::kFloat64x2Max: {
+ Definition* left = call->ArgumentAt(0);
+ Definition* right = call->ArgumentAt(1);
+ // Type check left.
+ AddCheckClass(left,
+ ICData::ZoneHandle(
+ call->ic_data()->AsUnaryClassChecksForArgNr(0)),
+ call->deopt_id(),
+ call->env(),
+ call);
+ Float64x2OneArgInstr* zeroArg =
+ new Float64x2OneArgInstr(recognized_kind, new Value(left),
+ new Value(right), call->deopt_id());
+ ReplaceCall(call, zeroArg);
+ return true;
+ }
+ default:
+ return false;
+ }
+}
+
+
bool FlowGraphOptimizer::TryInlineInt32x4Method(
InstanceCallInstr* call,
MethodRecognizer::Kind recognized_kind) {
@@ -3818,8 +3981,14 @@
ReplaceCall(call, math_unary);
} else if ((recognized_kind == MethodRecognizer::kFloat32x4Zero) ||
(recognized_kind == MethodRecognizer::kFloat32x4Splat) ||
- (recognized_kind == MethodRecognizer::kFloat32x4Constructor)) {
+ (recognized_kind == MethodRecognizer::kFloat32x4Constructor) ||
+ (recognized_kind == MethodRecognizer::kFloat32x4FromFloat64x2)) {
TryInlineFloat32x4Constructor(call, recognized_kind);
+ } else if ((recognized_kind == MethodRecognizer::kFloat64x2Constructor) ||
+ (recognized_kind == MethodRecognizer::kFloat64x2Zero) ||
+ (recognized_kind == MethodRecognizer::kFloat64x2Splat) ||
+ (recognized_kind == MethodRecognizer::kFloat64x2FromFloat32x4)) {
+ TryInlineFloat64x2Constructor(call, recognized_kind);
} else if (recognized_kind == MethodRecognizer::kInt32x4BoolConstructor) {
TryInlineInt32x4Constructor(call, recognized_kind);
} else if (recognized_kind == MethodRecognizer::kObjectConstructor) {
@@ -4869,8 +5038,8 @@
// All indexed load/stores alias each other.
// TODO(vegorov): incorporate type of array into alias to disambiguate
// different typed data and normal arrays.
- static Alias Indexes() {
- return Alias(kIndexesAlias, 0);
+ static Alias UnknownIndex(intptr_t id) {
+ return Alias(kUnknownIndexAlias, id);
}
static Alias ConstantIndex(intptr_t id) {
@@ -4889,10 +5058,9 @@
// VMField load/stores alias each other when field offset matches.
// TODO(vegorov) storing a context variable does not alias loading array
// length.
- static Alias VMField(intptr_t offset_in_bytes) {
- ASSERT(offset_in_bytes >= 0);
- const intptr_t idx = offset_in_bytes / kWordSize;
- return Alias(kVMFieldAlias, idx);
+ static Alias VMField(intptr_t id) {
+ ASSERT(id != 0);
+ return Alias(kVMFieldAlias, id);
}
// Current context load/stores alias each other.
@@ -4927,7 +5095,7 @@
enum Kind {
kNoneAlias = -1,
kCurrentContextAlias = 0,
- kIndexesAlias = 1,
+ kUnknownIndexAlias = 1,
kFieldAlias = 2,
kVMFieldAlias = 3,
kConstantIndex = 4,
@@ -5264,7 +5432,11 @@
max_field_id_(0),
field_ids_(),
max_index_id_(0),
- index_ids_() { }
+ index_ids_(),
+ max_unknown_index_id_(0),
+ unknown_index_ids_(),
+ max_vm_field_id_(0),
+ vm_field_ids_() { }
Alias ComputeAlias(Place* place) {
switch (place->kind()) {
@@ -5272,15 +5444,18 @@
if (place->index()->IsConstant()) {
const Object& index = place->index()->AsConstant()->value();
if (index.IsSmi()) {
- return Alias::ConstantIndex(GetIndexId(Smi::Cast(index).Value()));
+ return Alias::ConstantIndex(
+ GetInstanceIndexId(place->instance(),
+ Smi::Cast(index).Value()));
}
}
- return Alias::Indexes();
+ return Alias::UnknownIndex(GetUnknownIndexId(place->instance()));
case Place::kField:
return Alias::Field(
GetInstanceFieldId(place->instance(), place->field()));
case Place::kVMField:
- return Alias::VMField(place->offset_in_bytes());
+ return Alias::VMField(
+ GetInstanceVMFieldId(place->instance(), place->offset_in_bytes()));
case Place::kContext:
return Alias::CurrentContext();
case Place::kNone:
@@ -5294,14 +5469,16 @@
Alias ComputeAliasForStore(Instruction* instr) {
StoreIndexedInstr* store_indexed = instr->AsStoreIndexed();
if (store_indexed != NULL) {
+ Definition* instance = store_indexed->array()->definition();
if (store_indexed->index()->definition()->IsConstant()) {
const Object& index =
store_indexed->index()->definition()->AsConstant()->value();
if (index.IsSmi()) {
- return Alias::ConstantIndex(GetIndexId(Smi::Cast(index).Value()));
+ return Alias::ConstantIndex(
+ GetInstanceIndexId(instance, Smi::Cast(index).Value()));
}
}
- return Alias::Indexes();
+ return Alias::UnknownIndex(GetUnknownIndexId(instance));
}
StoreInstanceFieldInstr* store_instance_field =
@@ -5309,10 +5486,12 @@
if (store_instance_field != NULL) {
Definition* instance = store_instance_field->instance()->definition();
if (!store_instance_field->field().IsNull()) {
- return Alias::Field(GetInstanceFieldId(instance,
- store_instance_field->field()));
+ return Alias::Field(
+ GetInstanceFieldId(instance, store_instance_field->field()));
}
- return Alias::VMField(store_instance_field->offset_in_bytes());
+ return Alias::VMField(
+ GetInstanceVMFieldId(instance,
+ store_instance_field->offset_in_bytes()));
}
if (instr->IsStoreContext()) {
@@ -5342,27 +5521,32 @@
}
}
- void EnsureAliasingForIndexes() {
- BitVector* indexes = Get(Alias::Indexes());
- if (indexes == NULL) {
- return;
- }
-
- // Constant indexes alias all non-constant indexes.
- // Non-constant indexes alias all constant indexes.
- // First update alias set for const-indices, then
- // update set for all indices. Ids start at 1.
- for (intptr_t id = 1; id <= max_index_id_; id++) {
- BitVector* const_indexes = Get(Alias::ConstantIndex(id));
- if (const_indexes != NULL) {
- const_indexes->AddAll(indexes);
+ void EnsureAliasingForUnknownIndices() {
+ // Ids start at 1 because the hash-map uses 0 for element not found.
+ for (intptr_t unknown_index_id = 1;
+ unknown_index_id <= max_unknown_index_id_;
+ unknown_index_id++) {
+ BitVector* unknown_index = Get(Alias::UnknownIndex(unknown_index_id));
+ if (unknown_index == NULL) {
+ return;
}
- }
- for (intptr_t id = 1; id <= max_index_id_; id++) {
- BitVector* const_indexes = Get(Alias::ConstantIndex(id));
- if (const_indexes != NULL) {
- indexes->AddAll(const_indexes);
+ // Constant indexes alias all non-constant indexes.
+ // Non-constant indexes alias all constant indexes.
+ // First update alias set for const-indices, then
+ // update set for all indices. Ids start at 1.
+ for (intptr_t id = 1; id <= max_index_id_; id++) {
+ BitVector* const_indexes = Get(Alias::ConstantIndex(id));
+ if (const_indexes != NULL) {
+ const_indexes->AddAll(unknown_index);
+ }
+ }
+
+ for (intptr_t id = 1; id <= max_index_id_; id++) {
+ BitVector* const_indexes = Get(Alias::ConstantIndex(id));
+ if (const_indexes != NULL) {
+ unknown_index->AddAll(const_indexes);
+ }
}
}
}
@@ -5408,8 +5592,12 @@
// some other SSA variable and false otherwise. Currently simply checks if
// this value is stored in a field, escapes to another function or
// participates in a phi.
- static bool CanBeAliased(AllocateObjectInstr* alloc) {
- if (alloc->identity() == AllocateObjectInstr::kUnknown) {
+ static bool CanBeAliased(Definition* alloc) {
+ ASSERT(alloc->IsAllocateObject() ||
+ alloc->IsCreateArray() ||
+ (alloc->IsStaticCall() &&
+ alloc->AsStaticCall()->IsRecognizedFactory()));
+ if (alloc->Identity() == kIdentityUnknown) {
bool escapes = false;
for (Value* use = alloc->input_use_list();
use != NULL;
@@ -5429,11 +5617,10 @@
}
}
- alloc->set_identity(escapes ? AllocateObjectInstr::kAliased
- : AllocateObjectInstr::kNotAliased);
+ alloc->SetIdentity(escapes ? kIdentityAliased : kIdentityNotAliased);
}
- return alloc->identity() != AllocateObjectInstr::kNotAliased;
+ return alloc->Identity() != kIdentityNotAliased;
}
private:
@@ -5448,12 +5635,14 @@
return id;
}
- intptr_t GetIndexId(intptr_t index) {
- intptr_t id = index_ids_.Lookup(index);
+ intptr_t GetIndexId(intptr_t instance_id, intptr_t index) {
+ intptr_t id = index_ids_.Lookup(
+ ConstantIndexIdPair::Key(instance_id, index));
if (id == 0) {
// Zero is used to indicate element not found. The first id is one.
id = ++max_index_id_;
- index_ids_.Insert(IndexIdPair(index, id));
+ index_ids_.Insert(ConstantIndexIdPair(
+ ConstantIndexIdPair::Key(instance_id, index), id));
}
return id;
}
@@ -5487,6 +5676,66 @@
return GetFieldId(instance_id, field);
}
+ intptr_t GetInstanceVMFieldId(Definition* defn, intptr_t offset) {
+ intptr_t instance_id = kAnyInstance;
+
+ ASSERT(defn != NULL);
+ if ((defn->IsAllocateObject() ||
+ defn->IsCreateArray() ||
+ (defn->IsStaticCall() &&
+ defn->AsStaticCall()->IsRecognizedFactory())) &&
+ !CanBeAliased(defn)) {
+ instance_id = defn->ssa_temp_index();
+ ASSERT(instance_id != kAnyInstance);
+ }
+
+ intptr_t id = vm_field_ids_.Lookup(VMFieldIdPair::Key(instance_id, offset));
+ if (id == 0) {
+ id = ++max_vm_field_id_;
+ vm_field_ids_.Insert(
+ VMFieldIdPair(VMFieldIdPair::Key(instance_id, offset), id));
+ }
+ return id;
+ }
+
+ intptr_t GetInstanceIndexId(Definition* defn, intptr_t index) {
+ intptr_t instance_id = kAnyInstance;
+
+ ASSERT(defn != NULL);
+ if ((defn->IsCreateArray() ||
+ (defn->IsStaticCall() &&
+ defn->AsStaticCall()->IsRecognizedFactory())) &&
+ !CanBeAliased(defn)) {
+ instance_id = defn->ssa_temp_index();
+ ASSERT(instance_id != kAnyInstance);
+ }
+
+ return GetIndexId(instance_id, index);
+ }
+
+ intptr_t GetUnknownIndexId(Definition* defn) {
+ intptr_t instance_id = kAnyInstance;
+
+ ASSERT(defn != NULL);
+ if ((defn->IsCreateArray() ||
+ (defn->IsStaticCall() &&
+ defn->AsStaticCall()->IsRecognizedFactory())) &&
+ !CanBeAliased(defn)) {
+ instance_id = defn->ssa_temp_index();
+ ASSERT(instance_id != kAnyInstance);
+ }
+
+ intptr_t id = unknown_index_ids_.Lookup(
+ UnknownIndexIdPair::Key(instance_id));
+ if (id == 0) {
+ // Zero is used to indicate element not found. The first id is one.
+ id = ++max_unknown_index_id_;
+ unknown_index_ids_.Insert(
+ UnknownIndexIdPair(UnknownIndexIdPair::Key(instance_id), id));
+ }
+ return id;
+ }
+
// Get or create an identifier for a static field.
intptr_t GetStaticFieldId(const Field& field) {
ASSERT(field.is_static());
@@ -5560,27 +5809,63 @@
Value value_;
};
- class IndexIdPair {
+ class ConstantIndexIdPair {
public:
- typedef intptr_t Key;
+ struct Key {
+ Key(intptr_t instance_id, intptr_t index)
+ : instance_id_(instance_id), index_(index) { }
+
+ intptr_t instance_id_;
+ intptr_t index_;
+ };
typedef intptr_t Value;
- typedef IndexIdPair Pair;
+ typedef ConstantIndexIdPair Pair;
- IndexIdPair(Key key, Value value) : key_(key), value_(value) { }
+ ConstantIndexIdPair(Key key, Value value) : key_(key), value_(value) { }
- static Key KeyOf(IndexIdPair kv) {
+ static Key KeyOf(ConstantIndexIdPair kv) {
return kv.key_;
}
- static Value ValueOf(IndexIdPair kv) {
+ static Value ValueOf(ConstantIndexIdPair kv) {
return kv.value_;
}
static intptr_t Hashcode(Key key) {
- return key;
+ return (key.instance_id_ + 1) * 1024 + key.index_;
}
- static inline bool IsKeyEqual(IndexIdPair kv, Key key) {
+ static inline bool IsKeyEqual(ConstantIndexIdPair kv, Key key) {
+ return (KeyOf(kv).index_ == key.index_)
+ && (KeyOf(kv).instance_id_ == key.instance_id_);
+ }
+
+ private:
+ Key key_;
+ Value value_;
+ };
+
+ class UnknownIndexIdPair {
+ public:
+ typedef intptr_t Key;
+ typedef intptr_t Value;
+ typedef UnknownIndexIdPair Pair;
+
+ UnknownIndexIdPair(Key key, Value value) : key_(key), value_(value) { }
+
+ static Key KeyOf(UnknownIndexIdPair kv) {
+ return kv.key_;
+ }
+
+ static Value ValueOf(UnknownIndexIdPair kv) {
+ return kv.value_;
+ }
+
+ static intptr_t Hashcode(Key key) {
+ return key + 1;
+ }
+
+ static inline bool IsKeyEqual(UnknownIndexIdPair kv, Key key) {
return KeyOf(kv) == key;
}
@@ -5589,6 +5874,43 @@
Value value_;
};
+ class VMFieldIdPair {
+ public:
+ struct Key {
+ Key(intptr_t instance_id, intptr_t offset)
+ : instance_id_(instance_id), offset_(offset) { }
+
+ intptr_t instance_id_;
+ intptr_t offset_;
+ };
+
+ typedef intptr_t Value;
+ typedef VMFieldIdPair Pair;
+
+ VMFieldIdPair(Key key, Value value) : key_(key), value_(value) { }
+
+ static Key KeyOf(Pair kv) {
+ return kv.key_;
+ }
+
+ static Value ValueOf(Pair kv) {
+ return kv.value_;
+ }
+
+ static intptr_t Hashcode(Key key) {
+ return (key.instance_id_ + 1) * 1024 + key.offset_;
+ }
+
+ static inline bool IsKeyEqual(Pair kv, Key key) {
+ return (KeyOf(kv).offset_ == key.offset_) &&
+ (KeyOf(kv).instance_id_ == key.instance_id_);
+ }
+
+ private:
+ Key key_;
+ Value value_;
+ };
+
const ZoneGrowableArray<Place*>& places_;
const PhiPlaceMoves* phi_moves_;
@@ -5604,7 +5926,13 @@
DirectChainedHashMap<FieldIdPair> field_ids_;
intptr_t max_index_id_;
- DirectChainedHashMap<IndexIdPair> index_ids_;
+ DirectChainedHashMap<ConstantIndexIdPair> index_ids_;
+
+ intptr_t max_unknown_index_id_;
+ DirectChainedHashMap<UnknownIndexIdPair> unknown_index_ids_;
+
+ intptr_t max_vm_field_id_;
+ DirectChainedHashMap<VMFieldIdPair> vm_field_ids_;
};
@@ -5739,7 +6067,7 @@
aliased_set->AddRepresentative(place);
}
- aliased_set->EnsureAliasingForIndexes();
+ aliased_set->EnsureAliasingForUnknownIndices();
return aliased_set;
}
@@ -7735,6 +8063,58 @@
}
+void ConstantPropagator::VisitSimd64x2Shuffle(Simd64x2ShuffleInstr* instr) {
+ SetValue(instr, non_constant_);
+}
+
+
+void ConstantPropagator::VisitBinaryFloat64x2Op(BinaryFloat64x2OpInstr* instr) {
+ SetValue(instr, non_constant_);
+}
+
+
+void ConstantPropagator::VisitFloat32x4ToFloat64x2(
+ Float32x4ToFloat64x2Instr* instr) {
+ SetValue(instr, non_constant_);
+}
+
+
+void ConstantPropagator::VisitFloat64x2ToFloat32x4(
+ Float64x2ToFloat32x4Instr* instr) {
+ SetValue(instr, non_constant_);
+}
+
+
+void ConstantPropagator::VisitFloat64x2Zero(
+ Float64x2ZeroInstr* instr) {
+ SetValue(instr, non_constant_);
+}
+
+
+void ConstantPropagator::VisitFloat64x2Splat(
+ Float64x2SplatInstr* instr) {
+ SetValue(instr, non_constant_);
+}
+
+
+void ConstantPropagator::VisitFloat64x2Constructor(
+ Float64x2ConstructorInstr* instr) {
+ SetValue(instr, non_constant_);
+}
+
+
+void ConstantPropagator::VisitFloat64x2ZeroArg(Float64x2ZeroArgInstr* instr) {
+ // TODO(johnmccutchan): Implement constant propagation.
+ SetValue(instr, non_constant_);
+}
+
+
+void ConstantPropagator::VisitFloat64x2OneArg(Float64x2OneArgInstr* instr) {
+ // TODO(johnmccutchan): Implement constant propagation.
+ SetValue(instr, non_constant_);
+}
+
+
void ConstantPropagator::VisitMathUnary(MathUnaryInstr* instr) {
const Object& value = instr->value()->definition()->constant_value();
if (IsNonConstant(value)) {
@@ -8491,7 +8871,7 @@
}
// All sinking candidate are known to be not aliased.
- alloc->set_identity(AllocateObjectInstr::kNotAliased);
+ alloc->SetIdentity(kIdentityNotAliased);
candidates.Add(alloc);
}
@@ -8556,15 +8936,15 @@
}
-// Add the given field to the list of fields if it is not yet present there.
-static void AddField(ZoneGrowableArray<const Field*>* fields,
- const Field& field) {
- for (intptr_t i = 0; i < fields->length(); i++) {
- if ((*fields)[i]->raw() == field.raw()) {
+// Add a field/offset to the list of fields if it is not yet present there.
+static void AddSlot(ZoneGrowableArray<const Object*>* slots,
+ const Object& slot) {
+ for (intptr_t i = 0; i < slots->length(); i++) {
+ if ((*slots)[i]->raw() == slot.raw()) {
return;
}
}
- fields->Add(&field);
+ slots->Add(&slot);
}
@@ -8588,22 +8968,25 @@
Instruction* exit,
AllocateObjectInstr* alloc,
const Class& cls,
- const ZoneGrowableArray<const Field*>& fields) {
+ const ZoneGrowableArray<const Object*>& slots) {
ZoneGrowableArray<Value*>* values =
- new ZoneGrowableArray<Value*>(fields.length());
+ new ZoneGrowableArray<Value*>(slots.length());
// Insert load instruction for every field.
- for (intptr_t i = 0; i < fields.length(); i++) {
- const Field* field = fields[i];
- LoadFieldInstr* load = new LoadFieldInstr(new Value(alloc),
- field,
- AbstractType::ZoneHandle());
+ for (intptr_t i = 0; i < slots.length(); i++) {
+ LoadFieldInstr* load = slots[i]->IsField()
+ ? new LoadFieldInstr(new Value(alloc),
+ &Field::Cast(*slots[i]),
+ AbstractType::ZoneHandle())
+ : new LoadFieldInstr(new Value(alloc),
+ Smi::Cast(*slots[i]).Value(),
+ AbstractType::ZoneHandle());
flow_graph_->InsertBefore(
exit, load, NULL, Definition::kValue);
values->Add(new Value(load));
}
- MaterializeObjectInstr* mat = new MaterializeObjectInstr(cls, fields, values);
+ MaterializeObjectInstr* mat = new MaterializeObjectInstr(cls, slots, values);
flow_graph_->InsertBefore(exit, mat, NULL, Definition::kValue);
// Replace all mentions of this allocation with a newly inserted
@@ -8628,29 +9011,24 @@
void AllocationSinking::InsertMaterializations(AllocateObjectInstr* alloc) {
// Collect all fields that are written for this instance.
- ZoneGrowableArray<const Field*>* fields =
- new ZoneGrowableArray<const Field*>(5);
+ ZoneGrowableArray<const Object*>* slots =
+ new ZoneGrowableArray<const Object*>(5);
for (Value* use = alloc->input_use_list();
use != NULL;
use = use->next_use()) {
- ASSERT(use->instruction()->IsStoreInstanceField());
- AddField(fields, use->instruction()->AsStoreInstanceField()->field());
+ StoreInstanceFieldInstr* store = use->instruction()->AsStoreInstanceField();
+ if (!store->field().IsNull()) {
+ AddSlot(slots, store->field());
+ } else {
+ AddSlot(slots, Smi::ZoneHandle(Smi::New(store->offset_in_bytes())));
+ }
}
if (alloc->ArgumentCount() > 0) {
ASSERT(alloc->ArgumentCount() == 1);
- const String& name = String::Handle(Symbols::New(":type_args"));
- const Field& type_args_field =
- Field::ZoneHandle(Field::New(
- name,
- false, // !static
- false, // !final
- false, // !const
- alloc->cls(),
- 0)); // No token position.
- type_args_field.SetOffset(alloc->cls().type_arguments_field_offset());
- AddField(fields, type_args_field);
+ intptr_t type_args_offset = alloc->cls().type_arguments_field_offset();
+ AddSlot(slots, Smi::ZoneHandle(Smi::New(type_args_offset)));
}
// Collect all instructions that mention this object in the environment.
@@ -8663,7 +9041,7 @@
// Insert materializations at environment uses.
for (intptr_t i = 0; i < exits.length(); i++) {
- CreateMaterializationAt(exits[i], alloc, alloc->cls(), *fields);
+ CreateMaterializationAt(exits[i], alloc, alloc->cls(), *slots);
}
}
diff --git a/runtime/vm/flow_graph_optimizer.h b/runtime/vm/flow_graph_optimizer.h
index f68f52b..9b8d841 100644
--- a/runtime/vm/flow_graph_optimizer.h
+++ b/runtime/vm/flow_graph_optimizer.h
@@ -111,10 +111,14 @@
bool TryInlineInstanceMethod(InstanceCallInstr* call);
bool TryInlineFloat32x4Constructor(StaticCallInstr* call,
MethodRecognizer::Kind recognized_kind);
+ bool TryInlineFloat64x2Constructor(StaticCallInstr* call,
+ MethodRecognizer::Kind recognized_kind);
bool TryInlineInt32x4Constructor(StaticCallInstr* call,
MethodRecognizer::Kind recognized_kind);
bool TryInlineFloat32x4Method(InstanceCallInstr* call,
MethodRecognizer::Kind recognized_kind);
+ bool TryInlineFloat64x2Method(InstanceCallInstr* call,
+ MethodRecognizer::Kind recognized_kind);
bool TryInlineInt32x4Method(InstanceCallInstr* call,
MethodRecognizer::Kind recognized_kind);
void ReplaceWithInstanceOf(InstanceCallInstr* instr);
@@ -208,12 +212,16 @@
bool InlineFloat32x4Getter(InstanceCallInstr* call,
MethodRecognizer::Kind getter);
+ bool InlineFloat64x2Getter(InstanceCallInstr* call,
+ MethodRecognizer::Kind getter);
bool InlineInt32x4Getter(InstanceCallInstr* call,
MethodRecognizer::Kind getter);
bool InlineFloat32x4BinaryOp(InstanceCallInstr* call,
Token::Kind op_kind);
bool InlineInt32x4BinaryOp(InstanceCallInstr* call,
Token::Kind op_kind);
+ bool InlineFloat64x2BinaryOp(InstanceCallInstr* call,
+ Token::Kind op_kind);
void InlineImplicitInstanceGetter(InstanceCallInstr* call);
RawBool* InstanceOfAsBool(const ICData& ic_data,
@@ -398,7 +406,7 @@
Instruction* exit,
AllocateObjectInstr* alloc,
const Class& cls,
- const ZoneGrowableArray<const Field*>& fields);
+ const ZoneGrowableArray<const Object*>& fields);
FlowGraph* flow_graph_;
diff --git a/runtime/vm/flow_graph_type_propagator.cc b/runtime/vm/flow_graph_type_propagator.cc
index bbb4667..e83951c 100644
--- a/runtime/vm/flow_graph_type_propagator.cc
+++ b/runtime/vm/flow_graph_type_propagator.cc
@@ -1132,6 +1132,54 @@
}
+CompileType Simd64x2ShuffleInstr::ComputeType() const {
+ if ((op_kind() == MethodRecognizer::kFloat64x2GetX) ||
+ (op_kind() == MethodRecognizer::kFloat64x2GetY)) {
+ return CompileType::FromCid(kDoubleCid);
+ }
+ UNREACHABLE();
+ return CompileType::FromCid(kDoubleCid);
+}
+
+
+CompileType Float64x2ZeroInstr::ComputeType() const {
+ return CompileType::FromCid(kFloat64x2Cid);
+}
+
+
+CompileType Float64x2SplatInstr::ComputeType() const {
+ return CompileType::FromCid(kFloat64x2Cid);
+}
+
+
+CompileType Float64x2ConstructorInstr::ComputeType() const {
+ return CompileType::FromCid(kFloat64x2Cid);
+}
+
+
+CompileType Float32x4ToFloat64x2Instr::ComputeType() const {
+ return CompileType::FromCid(kFloat64x2Cid);
+}
+
+
+CompileType Float64x2ToFloat32x4Instr::ComputeType() const {
+ return CompileType::FromCid(kFloat32x4Cid);
+}
+
+
+CompileType Float64x2ZeroArgInstr::ComputeType() const {
+ if (op_kind() == MethodRecognizer::kFloat64x2GetSignMask) {
+ return CompileType::Int();
+ }
+ return CompileType::FromCid(kFloat64x2Cid);
+}
+
+
+CompileType Float64x2OneArgInstr::ComputeType() const {
+ return CompileType::FromCid(kFloat64x2Cid);
+}
+
+
CompileType Int32x4BoolConstructorInstr::ComputeType() const {
return CompileType::FromCid(kInt32x4Cid);
}
@@ -1162,6 +1210,11 @@
}
+CompileType BinaryFloat64x2OpInstr::ComputeType() const {
+ return CompileType::FromCid(kFloat64x2Cid);
+}
+
+
CompileType MathUnaryInstr::ComputeType() const {
return CompileType::FromCid(kDoubleCid);
}
diff --git a/runtime/vm/gc_callbacks.h b/runtime/vm/gc_callbacks.h
deleted file mode 100644
index 1081fa8..0000000
--- a/runtime/vm/gc_callbacks.h
+++ /dev/null
@@ -1,111 +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.
-
-#ifndef VM_GC_CALLBACKS_H_
-#define VM_GC_CALLBACKS_H_
-
-#include "include/dart_api.h"
-#include "platform/utils.h"
-
-namespace dart {
-
-// A container for garbage collection callback function pointers.
-// Pointers to the callback methods are stored within linked list
-// nodes managed by the container.
-template<typename T>
-class GcCallbacks {
- public:
- GcCallbacks() : head_(NULL) {
- }
-
- ~GcCallbacks() {
- while (head_ != NULL) {
- Link* prev = head_;
- head_ = head_->next_;
- delete prev;
- }
- }
-
- // Adds a new callback to the list. The new callback must not
- // already be present in the list.
- void Add(T callback) {
- ASSERT(callback != NULL);
- Link* link = new Link(callback, head_);
- head_ = link;
- }
-
- // Removes a callback from the list. The callback must be present
- // in the list.
- void Remove(T callback) {
- ASSERT(callback != NULL);
- if (head_ == NULL) return;
- Link* prev = head_;
- Link* curr = head_->next_;
- if (prev->callback_ == callback) {
- head_ = curr;
- delete prev;
- return;
- }
- while (curr != NULL) {
- if (curr->callback_ == callback) {
- prev->next_ = curr->next_;
- delete curr;
- return;
- }
- prev = curr;
- curr = curr->next_;
- }
- }
-
- // Iterates through all of the callbacks in the list and invokes
- // their callback methods.
- void Invoke() const {
- for (Link* curr = head_; curr != NULL; curr = curr->next_) {
- (*curr->callback_)();
- }
- }
-
- // Returns the number of callbacks stored in the list.
- intptr_t Count() const {
- intptr_t sum = 0;
- for (Link* curr = head_; curr != NULL; curr = curr->next_) {
- ++sum;
- }
- return sum;
- }
-
- // Returns true if the specified callback is present in the
- // container.
- bool Contains(T callback) const {
- for (Link* curr = head_; curr != NULL; curr = curr->next_) {
- if (curr->callback_ == callback) {
- return true;
- }
- }
- return false;
- }
-
- private:
- // A linked-list element.
- struct Link {
- Link(T callback, Link* next) : callback_(callback), next_(next) {
- }
- T callback_;
- Link* next_;
- };
-
- Link* head_;
-};
-
-
-// A container for storing garbage collection prologue methods.
-class GcPrologueCallbacks : public GcCallbacks<Dart_GcPrologueCallback> {};
-
-
-// A container for storing garbage collection epilogue methods.
-class GcEpilogueCallbacks : public GcCallbacks<Dart_GcEpilogueCallback> {};
-
-}; // namespace dart
-
-#endif // VM_GC_CALLBACKS_H_
diff --git a/runtime/vm/gc_marker.cc b/runtime/vm/gc_marker.cc
index a8ce1be..f0737bc 100644
--- a/runtime/vm/gc_marker.cc
+++ b/runtime/vm/gc_marker.cc
@@ -306,9 +306,7 @@
reinterpret_cast<FinalizablePersistentHandle*>(addr);
RawObject* raw_obj = handle->raw();
if (IsUnreachable(raw_obj)) {
- FinalizablePersistentHandle::Finalize(isolate(),
- handle,
- is_prologue_weak);
+ handle->UpdateUnreachable(isolate(), is_prologue_weak);
}
}
@@ -318,8 +316,8 @@
void GCMarker::Prologue(Isolate* isolate, bool invoke_api_callbacks) {
- if (invoke_api_callbacks) {
- isolate->gc_prologue_callbacks().Invoke();
+ if (invoke_api_callbacks && (isolate->gc_prologue_callback() != NULL)) {
+ (isolate->gc_prologue_callback())();
}
// The store buffers will be rebuilt as part of marking, reset them now.
isolate->store_buffer()->Reset();
@@ -327,8 +325,8 @@
void GCMarker::Epilogue(Isolate* isolate, bool invoke_api_callbacks) {
- if (invoke_api_callbacks) {
- isolate->gc_epilogue_callbacks().Invoke();
+ if (invoke_api_callbacks && (isolate->gc_epilogue_callback() != NULL)) {
+ (isolate->gc_epilogue_callback())();
}
}
diff --git a/runtime/vm/heap.cc b/runtime/vm/heap.cc
index e2e97c2..4348d6b 100644
--- a/runtime/vm/heap.cc
+++ b/runtime/vm/heap.cc
@@ -90,6 +90,23 @@
return addr;
}
+void Heap::AllocateExternal(intptr_t size, Space space) {
+ if (space == kNew) {
+ new_space_->AllocateExternal(size);
+ } else {
+ ASSERT(space == kOld);
+ old_space_->AllocateExternal(size);
+ }
+}
+
+void Heap::FreeExternal(intptr_t size, Space space) {
+ if (space == kNew) {
+ new_space_->FreeExternal(size);
+ } else {
+ ASSERT(space == kOld);
+ old_space_->FreeExternal(size);
+ }
+}
bool Heap::Contains(uword addr) const {
return new_space_->Contains(addr) ||
@@ -324,6 +341,10 @@
old_space_->CapacityInWords();
}
+intptr_t Heap::ExternalInWords(Space space) const {
+ return space == kNew ? new_space_->ExternalInWords() :
+ old_space_->ExternalInWords();
+}
int64_t Heap::GCTimeInMicros(Space space) const {
if (space == kNew) {
@@ -410,8 +431,10 @@
stats_.before_.micros_ = OS::GetCurrentTimeMicros();
stats_.before_.new_used_in_words_ = new_space_->UsedInWords();
stats_.before_.new_capacity_in_words_ = new_space_->CapacityInWords();
+ stats_.before_.new_external_in_words_ = new_space_->ExternalInWords();
stats_.before_.old_used_in_words_ = old_space_->UsedInWords();
stats_.before_.old_capacity_in_words_ = old_space_->CapacityInWords();
+ stats_.before_.old_external_in_words_ = old_space_->ExternalInWords();
stats_.times_[0] = 0;
stats_.times_[1] = 0;
stats_.times_[2] = 0;
@@ -435,8 +458,10 @@
}
stats_.after_.new_used_in_words_ = new_space_->UsedInWords();
stats_.after_.new_capacity_in_words_ = new_space_->CapacityInWords();
+ stats_.after_.new_external_in_words_ = new_space_->ExternalInWords();
stats_.after_.old_used_in_words_ = old_space_->UsedInWords();
stats_.after_.old_capacity_in_words_ = old_space_->CapacityInWords();
+ stats_.after_.old_external_in_words_ = old_space_->ExternalInWords();
ASSERT(gc_in_progress_);
gc_in_progress_ = false;
}
@@ -451,7 +476,7 @@
OS::PrintErr("[ GC | space | count | start | gc time | "
"new gen (KB) | old gen (KB) | timers | data ]\n"
"[ (isolate)| (reason)| | (s) | (ms) | "
- " used , cap | used , cap | (ms) | ]\n");
+ "used,cap,ext | used,cap,ext | (ms) | ]\n");
}
const char* space_str = stats_.space_ == kNew ? "Scavenge" : "Mark-Sweep";
@@ -462,28 +487,34 @@
"%.3f, " // total time
"%" Pd ", %" Pd ", " // new gen: in use before/after
"%" Pd ", %" Pd ", " // new gen: capacity before/after
+ "%" Pd ", %" Pd ", " // new gen: external before/after
"%" Pd ", %" Pd ", " // old gen: in use before/after
"%" Pd ", %" Pd ", " // old gen: capacity before/after
+ "%" Pd ", %" Pd ", " // old gen: external before/after
"%.3f, %.3f, %.3f, %.3f, " // times
"%" Pd ", %" Pd ", %" Pd ", %" Pd ", " // data
"]\n", // End with a comma to make it easier to import in spreadsheets.
isolate->main_port(), space_str, GCReasonToString(stats_.reason_),
stats_.num_,
- RoundMicrosecondsToSeconds(stats_.before_.micros_ - isolate->start_time()),
- RoundMicrosecondsToMilliseconds(stats_.after_.micros_ -
+ MicrosecondsToSeconds(stats_.before_.micros_ - isolate->start_time()),
+ MicrosecondsToMilliseconds(stats_.after_.micros_ -
stats_.before_.micros_),
RoundWordsToKB(stats_.before_.new_used_in_words_),
RoundWordsToKB(stats_.after_.new_used_in_words_),
RoundWordsToKB(stats_.before_.new_capacity_in_words_),
RoundWordsToKB(stats_.after_.new_capacity_in_words_),
+ RoundWordsToKB(stats_.before_.new_external_in_words_),
+ RoundWordsToKB(stats_.after_.new_external_in_words_),
RoundWordsToKB(stats_.before_.old_used_in_words_),
RoundWordsToKB(stats_.after_.old_used_in_words_),
RoundWordsToKB(stats_.before_.old_capacity_in_words_),
RoundWordsToKB(stats_.after_.old_capacity_in_words_),
- RoundMicrosecondsToMilliseconds(stats_.times_[0]),
- RoundMicrosecondsToMilliseconds(stats_.times_[1]),
- RoundMicrosecondsToMilliseconds(stats_.times_[2]),
- RoundMicrosecondsToMilliseconds(stats_.times_[3]),
+ RoundWordsToKB(stats_.before_.old_external_in_words_),
+ RoundWordsToKB(stats_.after_.old_external_in_words_),
+ MicrosecondsToMilliseconds(stats_.times_[0]),
+ MicrosecondsToMilliseconds(stats_.times_[1]),
+ MicrosecondsToMilliseconds(stats_.times_[2]),
+ MicrosecondsToMilliseconds(stats_.times_[3]),
stats_.data_[0],
stats_.data_[1],
stats_.data_[2],
diff --git a/runtime/vm/heap.h b/runtime/vm/heap.h
index 45d6963..7365714 100644
--- a/runtime/vm/heap.h
+++ b/runtime/vm/heap.h
@@ -102,6 +102,10 @@
return 0;
}
+ // Track external data.
+ void AllocateExternal(intptr_t size, Space space);
+ void FreeExternal(intptr_t size, Space space);
+
// Heap contains the specified address.
bool Contains(uword addr) const;
bool NewContains(uword addr) const;
@@ -162,9 +166,10 @@
// Print heap sizes.
void PrintSizes() const;
- // Return amount of memory used and capacity in a space.
+ // Return amount of memory used and capacity in a space, excluding external.
intptr_t UsedInWords(Space space) const;
intptr_t CapacityInWords(Space space) const;
+ intptr_t ExternalInWords(Space space) const;
// Return the amount of GCing in microseconds.
int64_t GCTimeInMicros(Space space) const;
@@ -234,6 +239,11 @@
void PrintToJSONObject(Space space, JSONObject* object) const;
+ // The heap map is an array of sizes and class ids (except freelist is 0).
+ void PrintHeapMapToJSONStream(JSONStream* stream) const {
+ return old_space_->PrintHeapMapToJSONStream(stream);
+ }
+
private:
class GCStats : public ValueObject {
public:
@@ -248,8 +258,10 @@
int64_t micros_;
intptr_t new_used_in_words_;
intptr_t new_capacity_in_words_;
+ intptr_t new_external_in_words_;
intptr_t old_used_in_words_;
intptr_t old_capacity_in_words_;
+ intptr_t old_external_in_words_;
private:
DISALLOW_COPY_AND_ASSIGN(Data);
};
diff --git a/runtime/vm/il_printer.cc b/runtime/vm/il_printer.cc
index 032e74b..a349017 100644
--- a/runtime/vm/il_printer.cc
+++ b/runtime/vm/il_printer.cc
@@ -312,8 +312,11 @@
void DropTempsInstr::PrintOperandsTo(BufferFormatter* f) const {
- f->Print("%" Pd ", ", num_temps());
- value()->PrintTo(f);
+ f->Print("%" Pd "", num_temps());
+ if (value() != NULL) {
+ f->Print(", ");
+ value()->PrintTo(f);
+ }
}
@@ -493,7 +496,7 @@
f->Print("%s", String::Handle(cls_.Name()).ToCString());
for (intptr_t i = 0; i < InputCount(); i++) {
f->Print(", ");
- f->Print("%s: ", String::Handle(fields_[i]->name()).ToCString());
+ f->Print("%s: ", slots_[i]->ToCString());
InputAt(i)->PrintTo(f);
}
}
@@ -593,12 +596,21 @@
}
+void BinaryFloat64x2OpInstr::PrintOperandsTo(BufferFormatter* f) const {
+ f->Print("%s, ", Token::Str(op_kind()));
+ left()->PrintTo(f);
+ f->Print(", ");
+ right()->PrintTo(f);
+}
+
+
void Simd32x4ShuffleInstr::PrintOperandsTo(BufferFormatter* f) const {
// TODO(johnmccutchan): Add proper string enumeration of shuffle.
f->Print("%s, ", MethodRecognizer::KindToCString(op_kind()));
value()->PrintTo(f);
}
+
void Simd32x4ShuffleMixInstr::PrintOperandsTo(BufferFormatter* f) const {
f->Print("%s, ", MethodRecognizer::KindToCString(op_kind()));
xy()->PrintTo(f);
@@ -699,8 +711,59 @@
}
+void Simd64x2ShuffleInstr::PrintOperandsTo(BufferFormatter* f) const {
+ // TODO(johnmccutchan): Add proper string enumeration of shuffle.
+ f->Print("%s, ", MethodRecognizer::KindToCString(op_kind()));
+ value()->PrintTo(f);
+}
+void Float64x2ZeroInstr::PrintOperandsTo(BufferFormatter* f) const {
+ f->Print("Float64x2.zero ");
+}
+
+
+void Float64x2SplatInstr::PrintOperandsTo(BufferFormatter* f) const {
+ f->Print("Float64x2.splat ");
+ value()->PrintTo(f);
+}
+
+
+void Float64x2ConstructorInstr::PrintOperandsTo(BufferFormatter* f) const {
+ f->Print("Float64x2(");
+ value0()->PrintTo(f);
+ f->Print(", ");
+ value1()->PrintTo(f);
+ f->Print(")");
+}
+
+
+void Float32x4ToFloat64x2Instr::PrintOperandsTo(BufferFormatter* f) const {
+ f->Print("Float64x2.fromFloat32x4 ");
+ left()->PrintTo(f);
+}
+
+
+void Float64x2ToFloat32x4Instr::PrintOperandsTo(BufferFormatter* f) const {
+ f->Print("Float32x4.fromFloat64x2 ");
+ left()->PrintTo(f);
+}
+
+
+void Float64x2ZeroArgInstr::PrintOperandsTo(BufferFormatter* f) const {
+ f->Print("%s, ", MethodRecognizer::KindToCString(op_kind()));
+ left()->PrintTo(f);
+}
+
+
+void Float64x2OneArgInstr::PrintOperandsTo(BufferFormatter* f) const {
+ f->Print("%s(", MethodRecognizer::KindToCString(op_kind()));
+ left()->PrintTo(f);
+ f->Print(", ");
+ right()->PrintTo(f);
+ f->Print(")");
+}
+
void Int32x4BoolConstructorInstr::PrintOperandsTo(BufferFormatter* f) const {
f->Print("Int32x4.bool(");
diff --git a/runtime/vm/instructions_arm.cc b/runtime/vm/instructions_arm.cc
index 9cc0d58..03aff85 100644
--- a/runtime/vm/instructions_arm.cc
+++ b/runtime/vm/instructions_arm.cc
@@ -5,6 +5,7 @@
#include "vm/globals.h" // Needed here to get TARGET_ARCH_ARM.
#if defined(TARGET_ARCH_ARM)
+#include "vm/assembler.h"
#include "vm/constants_arm.h"
#include "vm/cpu.h"
#include "vm/instructions.h"
@@ -33,6 +34,16 @@
}
+int CallPattern::LengthInBytes() {
+ if (TargetCPUFeatures::arm_version() == ARMv6) {
+ return 5 * Instr::kInstrSize;
+ } else {
+ ASSERT(TargetCPUFeatures::arm_version() == ARMv7);
+ return 3 * Instr::kInstrSize;
+ }
+}
+
+
// Decodes a load sequence ending at 'end' (the last instruction of the load
// sequence is the instruction before the one at end). Returns a pointer to
// the first instruction in the sequence. Returns the register being loaded
@@ -69,17 +80,41 @@
uword start = end - Instr::kInstrSize;
int32_t instr = Instr::At(start)->InstructionBits();
intptr_t imm = 0;
- if ((instr & 0xfff00000) == 0xe3400000) { // movt reg, #imm_hi
- imm |= (instr & 0xf0000) << 12;
- imm |= (instr & 0xfff) << 16;
+ if (TargetCPUFeatures::arm_version() == ARMv6) {
+ ASSERT((instr & 0xfff00000) == 0xe3800000); // orr rd, rd, byte0
+ imm |= (instr & 0x000000ff);
+
start -= Instr::kInstrSize;
instr = Instr::At(start)->InstructionBits();
+ ASSERT((instr & 0xfff00000) == 0xe3800c00); // orr rd, rd, (byte1 rot 12)
+ imm |= (instr & 0x000000ff);
+
+ start -= Instr::kInstrSize;
+ instr = Instr::At(start)->InstructionBits();
+ ASSERT((instr & 0xfff00f00) == 0xe3800800); // orr rd, rd, (byte2 rot 8)
+ imm |= (instr & 0x000000ff);
+
+ start -= Instr::kInstrSize;
+ instr = Instr::At(start)->InstructionBits();
+ ASSERT((instr & 0xffff0f00) == 0xe3a00400); // mov rd, (byte3 rot 4)
+ imm |= (instr & 0x000000ff);
+
+ *reg = static_cast<Register>((instr & 0x0000f000) >> 12);
+ *value = imm;
+ } else {
+ ASSERT(TargetCPUFeatures::arm_version() == ARMv7);
+ if ((instr & 0xfff00000) == 0xe3400000) { // movt reg, #imm_hi
+ imm |= (instr & 0xf0000) << 12;
+ imm |= (instr & 0xfff) << 16;
+ start -= Instr::kInstrSize;
+ instr = Instr::At(start)->InstructionBits();
+ }
+ ASSERT((instr & 0xfff00000) == 0xe3000000); // movw reg, #imm_lo
+ imm |= (instr & 0xf0000) >> 4;
+ imm |= instr & 0xfff;
+ *reg = static_cast<Register>((instr & 0xf000) >> 12);
+ *value = imm;
}
- ASSERT((instr & 0xfff00000) == 0xe3000000); // movw reg, #imm_lo
- imm |= (instr & 0xf0000) >> 4;
- imm |= instr & 0xfff;
- *reg = static_cast<Register>((instr & 0xf000) >> 12);
- *value = imm;
return start;
}
@@ -168,49 +203,138 @@
void CallPattern::InsertAt(uword pc, uword target_address) {
- uint16_t target_lo = target_address & 0xffff;
- uint16_t target_hi = target_address >> 16;
- uword movw_ip = 0xe300c000 | ((target_lo >> 12) << 16) | (target_lo & 0xfff);
- uword movt_ip = 0xe340c000 | ((target_hi >> 12) << 16) | (target_hi & 0xfff);
- uword blx_ip = 0xe12fff3c;
- *reinterpret_cast<uword*>(pc + (0 * Instr::kInstrSize)) = movw_ip;
- *reinterpret_cast<uword*>(pc + (1 * Instr::kInstrSize)) = movt_ip;
- *reinterpret_cast<uword*>(pc + (2 * Instr::kInstrSize)) = blx_ip;
- ASSERT(kFixedLengthInBytes == 3 * Instr::kInstrSize);
- CPU::FlushICache(pc, kFixedLengthInBytes);
+ if (TargetCPUFeatures::arm_version() == ARMv6) {
+ const uint32_t byte0 = (target_address & 0x000000ff);
+ const uint32_t byte1 = (target_address & 0x0000ff00) >> 8;
+ const uint32_t byte2 = (target_address & 0x00ff0000) >> 16;
+ const uint32_t byte3 = (target_address & 0xff000000) >> 24;
+
+ const uword mov_ip = 0xe3a0c400 | byte3; // mov ip, (byte3 rot 4)
+ const uword or1_ip = 0xe38cc800 | byte2; // orr ip, ip, (byte2 rot 8)
+ const uword or2_ip = 0xe38ccc00 | byte1; // orr ip, ip, (byte1 rot 12)
+ const uword or3_ip = 0xe38cc000 | byte0; // orr ip, ip, byte0
+ const uword blx_ip = 0xe12fff3c;
+
+ *reinterpret_cast<uword*>(pc + (0 * Instr::kInstrSize)) = mov_ip;
+ *reinterpret_cast<uword*>(pc + (1 * Instr::kInstrSize)) = or1_ip;
+ *reinterpret_cast<uword*>(pc + (2 * Instr::kInstrSize)) = or2_ip;
+ *reinterpret_cast<uword*>(pc + (3 * Instr::kInstrSize)) = or3_ip;
+ *reinterpret_cast<uword*>(pc + (4 * Instr::kInstrSize)) = blx_ip;
+
+ ASSERT(LengthInBytes() == 5 * Instr::kInstrSize);
+ CPU::FlushICache(pc, LengthInBytes());
+ } else {
+ ASSERT(TargetCPUFeatures::arm_version() == ARMv7);
+ const uint16_t target_lo = target_address & 0xffff;
+ const uint16_t target_hi = target_address >> 16;
+
+ const uword movw_ip =
+ 0xe300c000 | ((target_lo >> 12) << 16) | (target_lo & 0xfff);
+ const uword movt_ip =
+ 0xe340c000 | ((target_hi >> 12) << 16) | (target_hi & 0xfff);
+ const uword blx_ip = 0xe12fff3c;
+
+ *reinterpret_cast<uword*>(pc + (0 * Instr::kInstrSize)) = movw_ip;
+ *reinterpret_cast<uword*>(pc + (1 * Instr::kInstrSize)) = movt_ip;
+ *reinterpret_cast<uword*>(pc + (2 * Instr::kInstrSize)) = blx_ip;
+
+ ASSERT(LengthInBytes() == 3 * Instr::kInstrSize);
+ CPU::FlushICache(pc, LengthInBytes());
+ }
}
JumpPattern::JumpPattern(uword pc, const Code& code) : pc_(pc) { }
+int JumpPattern::pattern_length_in_bytes() {
+ if (TargetCPUFeatures::arm_version() == ARMv6) {
+ return 5 * Instr::kInstrSize;
+ } else {
+ ASSERT(TargetCPUFeatures::arm_version() == ARMv7);
+ return 3 * Instr::kInstrSize;
+ }
+}
+
+
bool JumpPattern::IsValid() const {
- Instr* movw_ip = Instr::At(pc_ + (0 * Instr::kInstrSize)); // target_lo
- Instr* movt_ip = Instr::At(pc_ + (1 * Instr::kInstrSize)); // target_hi
- Instr* bx_ip = Instr::At(pc_ + (2 * Instr::kInstrSize));
- return (movw_ip->InstructionBits() & 0xfff0f000) == 0xe300c000 &&
- (movt_ip->InstructionBits() & 0xfff0f000) == 0xe340c000 &&
- (bx_ip->InstructionBits() & 0xffffffff) == 0xe12fff1c;
+ if (TargetCPUFeatures::arm_version() == ARMv6) {
+ Instr* mov_ip = Instr::At(pc_ + (0 * Instr::kInstrSize));
+ Instr* or1_ip = Instr::At(pc_ + (1 * Instr::kInstrSize));
+ Instr* or2_ip = Instr::At(pc_ + (2 * Instr::kInstrSize));
+ Instr* or3_ip = Instr::At(pc_ + (3 * Instr::kInstrSize));
+ Instr* bx_ip = Instr::At(pc_ + (4 * Instr::kInstrSize));
+ return ((mov_ip->InstructionBits() & 0xffffff00) == 0xe3a0c400) &&
+ ((or1_ip->InstructionBits() & 0xffffff00) == 0xe38cc800) &&
+ ((or2_ip->InstructionBits() & 0xffffff00) == 0xe38ccc00) &&
+ ((or3_ip->InstructionBits() & 0xffffff00) == 0xe38cc000) &&
+ ((bx_ip->InstructionBits() & 0xffffffff) == 0xe12fff1c);
+ } else {
+ ASSERT(TargetCPUFeatures::arm_version() == ARMv7);
+ Instr* movw_ip = Instr::At(pc_ + (0 * Instr::kInstrSize)); // target_lo
+ Instr* movt_ip = Instr::At(pc_ + (1 * Instr::kInstrSize)); // target_hi
+ Instr* bx_ip = Instr::At(pc_ + (2 * Instr::kInstrSize));
+ return (movw_ip->InstructionBits() & 0xfff0f000) == 0xe300c000 &&
+ (movt_ip->InstructionBits() & 0xfff0f000) == 0xe340c000 &&
+ (bx_ip->InstructionBits() & 0xffffffff) == 0xe12fff1c;
+ }
}
uword JumpPattern::TargetAddress() const {
- Instr* movw_ip = Instr::At(pc_ + (0 * Instr::kInstrSize)); // target_lo
- Instr* movt_ip = Instr::At(pc_ + (1 * Instr::kInstrSize)); // target_hi
- uint16_t target_lo = movw_ip->MovwField();
- uint16_t target_hi = movt_ip->MovwField();
- return (target_hi << 16) | target_lo;
+ if (TargetCPUFeatures::arm_version() == ARMv6) {
+ Instr* mov_ip = Instr::At(pc_ + (0 * Instr::kInstrSize));
+ Instr* or1_ip = Instr::At(pc_ + (1 * Instr::kInstrSize));
+ Instr* or2_ip = Instr::At(pc_ + (2 * Instr::kInstrSize));
+ Instr* or3_ip = Instr::At(pc_ + (3 * Instr::kInstrSize));
+ uword imm = 0;
+ imm |= or3_ip->Immed8Field();
+ imm |= or2_ip->Immed8Field() << 8;
+ imm |= or1_ip->Immed8Field() << 16;
+ imm |= mov_ip->Immed8Field() << 24;
+ return imm;
+ } else {
+ ASSERT(TargetCPUFeatures::arm_version() == ARMv7);
+ Instr* movw_ip = Instr::At(pc_ + (0 * Instr::kInstrSize)); // target_lo
+ Instr* movt_ip = Instr::At(pc_ + (1 * Instr::kInstrSize)); // target_hi
+ uint16_t target_lo = movw_ip->MovwField();
+ uint16_t target_hi = movt_ip->MovwField();
+ return (target_hi << 16) | target_lo;
+ }
}
void JumpPattern::SetTargetAddress(uword target_address) const {
- uint16_t target_lo = target_address & 0xffff;
- uint16_t target_hi = target_address >> 16;
- uword movw_ip = 0xe300c000 | ((target_lo >> 12) << 16) | (target_lo & 0xfff);
- uword movt_ip = 0xe340c000 | ((target_hi >> 12) << 16) | (target_hi & 0xfff);
- *reinterpret_cast<uword*>(pc_ + (0 * Instr::kInstrSize)) = movw_ip;
- *reinterpret_cast<uword*>(pc_ + (1 * Instr::kInstrSize)) = movt_ip;
- CPU::FlushICache(pc_, 2 * Instr::kInstrSize);
+ if (TargetCPUFeatures::arm_version() == ARMv6) {
+ const uint32_t byte0 = (target_address & 0x000000ff);
+ const uint32_t byte1 = (target_address & 0x0000ff00) >> 8;
+ const uint32_t byte2 = (target_address & 0x00ff0000) >> 16;
+ const uint32_t byte3 = (target_address & 0xff000000) >> 24;
+
+ const uword mov_ip = 0xe3a0c400 | byte3; // mov ip, (byte3 rot 4)
+ const uword or1_ip = 0xe38cc800 | byte2; // orr ip, ip, (byte2 rot 8)
+ const uword or2_ip = 0xe38ccc00 | byte1; // orr ip, ip, (byte1 rot 12)
+ const uword or3_ip = 0xe38cc000 | byte0; // orr ip, ip, byte0
+
+ *reinterpret_cast<uword*>(pc_ + (0 * Instr::kInstrSize)) = mov_ip;
+ *reinterpret_cast<uword*>(pc_ + (1 * Instr::kInstrSize)) = or1_ip;
+ *reinterpret_cast<uword*>(pc_ + (2 * Instr::kInstrSize)) = or2_ip;
+ *reinterpret_cast<uword*>(pc_ + (3 * Instr::kInstrSize)) = or3_ip;
+ CPU::FlushICache(pc_, 4 * Instr::kInstrSize);
+ } else {
+ ASSERT(TargetCPUFeatures::arm_version() == ARMv7);
+ const uint16_t target_lo = target_address & 0xffff;
+ const uint16_t target_hi = target_address >> 16;
+
+ const uword movw_ip =
+ 0xe300c000 | ((target_lo >> 12) << 16) | (target_lo & 0xfff);
+ const uword movt_ip =
+ 0xe340c000 | ((target_hi >> 12) << 16) | (target_hi & 0xfff);
+
+ *reinterpret_cast<uword*>(pc_ + (0 * Instr::kInstrSize)) = movw_ip;
+ *reinterpret_cast<uword*>(pc_ + (1 * Instr::kInstrSize)) = movt_ip;
+ CPU::FlushICache(pc_, 2 * Instr::kInstrSize);
+ }
}
} // namespace dart
diff --git a/runtime/vm/instructions_arm.h b/runtime/vm/instructions_arm.h
index 05235d1..b802fa6 100644
--- a/runtime/vm/instructions_arm.h
+++ b/runtime/vm/instructions_arm.h
@@ -59,7 +59,7 @@
// This constant length is only valid for inserted call patterns used for
// lazy deoptimization. Regular call pattern may vary in length.
- static const int kFixedLengthInBytes = 3 * Instr::kInstrSize;
+ static int LengthInBytes();
static void InsertAt(uword pc, uword target_address);
@@ -84,9 +84,7 @@
static const int kLengthInBytes = 3 * Instr::kInstrSize;
- int pattern_length_in_bytes() const {
- return kLengthInBytes;
- }
+ static int pattern_length_in_bytes();
bool IsValid() const;
uword TargetAddress() const;
diff --git a/runtime/vm/instructions_arm_test.cc b/runtime/vm/instructions_arm_test.cc
index 9970592..46dbb1c 100644
--- a/runtime/vm/instructions_arm_test.cc
+++ b/runtime/vm/instructions_arm_test.cc
@@ -6,6 +6,7 @@
#if defined(TARGET_ARCH_ARM)
#include "vm/assembler.h"
+#include "vm/cpu.h"
#include "vm/instructions.h"
#include "vm/stub_code.h"
#include "vm/unit_test.h"
@@ -62,6 +63,45 @@
jump2.TargetAddress());
}
+
+#if defined(USING_SIMULATOR)
+ASSEMBLER_TEST_GENERATE(JumpARMv6, assembler) {
+ // ARMv7 is the default.
+ HostCPUFeatures::set_arm_version(ARMv6);
+ __ BranchPatchable(&StubCode::InstanceFunctionLookupLabel());
+ __ BranchPatchable(&StubCode::AllocateArrayLabel());
+ HostCPUFeatures::set_arm_version(ARMv7);
+}
+
+
+ASSEMBLER_TEST_RUN(JumpARMv6, test) {
+ HostCPUFeatures::set_arm_version(ARMv6);
+ const Code& code = test->code();
+ const Instructions& instrs = Instructions::Handle(code.instructions());
+ bool status =
+ VirtualMemory::Protect(reinterpret_cast<void*>(instrs.EntryPoint()),
+ instrs.size(),
+ VirtualMemory::kReadWrite);
+ EXPECT(status);
+ JumpPattern jump1(test->entry(), test->code());
+ EXPECT_EQ(StubCode::InstanceFunctionLookupLabel().address(),
+ jump1.TargetAddress());
+ JumpPattern jump2(test->entry() + jump1.pattern_length_in_bytes(),
+ test->code());
+ EXPECT_EQ(StubCode::AllocateArrayLabel().address(),
+ jump2.TargetAddress());
+ uword target1 = jump1.TargetAddress();
+ uword target2 = jump2.TargetAddress();
+ jump1.SetTargetAddress(target2);
+ jump2.SetTargetAddress(target1);
+ EXPECT_EQ(StubCode::AllocateArrayLabel().address(),
+ jump1.TargetAddress());
+ EXPECT_EQ(StubCode::InstanceFunctionLookupLabel().address(),
+ jump2.TargetAddress());
+ HostCPUFeatures::set_arm_version(ARMv7);
+}
+#endif
+
} // namespace dart
#endif // defined TARGET_ARCH_ARM
diff --git a/runtime/vm/intermediate_language.cc b/runtime/vm/intermediate_language.cc
index cf8301f..41890cb 100644
--- a/runtime/vm/intermediate_language.cc
+++ b/runtime/vm/intermediate_language.cc
@@ -162,6 +162,8 @@
return kUnboxedDouble;
case kFloat32x4Cid:
return kUnboxedFloat32x4;
+ case kFloat64x2Cid:
+ return kUnboxedFloat64x2;
default:
UNREACHABLE();
}
@@ -194,6 +196,8 @@
return kUnboxedDouble;
case kFloat32x4Cid:
return kUnboxedFloat32x4;
+ case kFloat64x2Cid:
+ return kUnboxedFloat64x2;
default:
UNREACHABLE();
}
@@ -2058,17 +2062,20 @@
LocationSummary* DropTempsInstr::MakeLocationSummary(bool optimizing) const {
- return LocationSummary::Make(1,
- Location::SameAsFirstInput(),
- LocationSummary::kNoCall);
+ return (InputCount() == 1)
+ ? LocationSummary::Make(1,
+ Location::SameAsFirstInput(),
+ LocationSummary::kNoCall)
+ : LocationSummary::Make(0,
+ Location::NoLocation(),
+ LocationSummary::kNoCall);
}
void DropTempsInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
ASSERT(!compiler->is_optimizing());
- Register value = locs()->in(0).reg();
- Register result = locs()->out().reg();
- ASSERT(result == value); // Assert that register assignment is correct.
+ // Assert that register assignment is correct.
+ ASSERT((InputCount() == 0) || locs()->out().reg() == locs()->in(0).reg());
__ Drop(num_temps());
}
@@ -3036,6 +3043,12 @@
// StoreIndexed(v2, v3, v4) -- v3:constant index, v4: value.
// ..
// v8 <- StringInterpolate(v2)
+
+ // Don't compile-time fold when optimizing the interpolation function itself.
+ if (flow_graph->parsed_function().function().raw() == CallFunction().raw()) {
+ return this;
+ }
+
CreateArrayInstr* create_array = value()->definition()->AsCreateArray();
ASSERT(create_array != NULL);
// Check if the string interpolation has only constant inputs.
@@ -3080,13 +3093,14 @@
const Array& interpolate_arg = Array::Handle(Array::New(1));
interpolate_arg.SetAt(0, array_argument);
// Call interpolation function.
- String& concatenated = String::ZoneHandle();
- concatenated ^=
- DartEntry::InvokeFunction(CallFunction(), interpolate_arg);
- if (concatenated.IsUnhandledException()) {
+ const Object& result = Object::Handle(
+ DartEntry::InvokeFunction(CallFunction(), interpolate_arg));
+ if (result.IsUnhandledException()) {
return this;
}
- concatenated = Symbols::New(concatenated);
+ ASSERT(result.IsString());
+ const String& concatenated =
+ String::ZoneHandle(Symbols::New(String::Cast(result)));
return flow_graph->GetConstant(concatenated);
}
diff --git a/runtime/vm/intermediate_language.h b/runtime/vm/intermediate_language.h
index d794a99..0a77113 100644
--- a/runtime/vm/intermediate_language.h
+++ b/runtime/vm/intermediate_language.h
@@ -41,6 +41,7 @@
V(Object, ==, ObjectEquals, 1068471689) \
V(Object, Object., ObjectConstructor, 1058615085) \
V(Object, get:_cid, ObjectCid, 1498751301) \
+ V(_TypedListBase, get:_cid, TypedListBaseCid, 1938244762) \
V(_List, get:length, ObjectArrayLength, 215183186) \
V(_ImmutableList, get:length, ImmutableArrayLength, 578762861) \
V(_TypedList, get:length, TypedDataLength, 26646119) \
@@ -94,6 +95,7 @@
V(Float32x4, Float32x4.splat, Float32x4Splat, 1148280442) \
V(Float32x4, Float32x4.fromInt32x4Bits, Float32x4FromInt32x4Bits, \
872145194) \
+ V(Float32x4, Float32x4.fromFloat64x2, Float32x4FromFloat64x2, 1511660322) \
V(_Float32x4, shuffle, Float32x4Shuffle, 1178727105) \
V(_Float32x4, shuffleMix, Float32x4ShuffleMix, 927956119) \
V(_Float32x4, get:x, Float32x4ShuffleX, 1351747629) \
@@ -120,6 +122,21 @@
V(_Float32x4, withY, Float32x4WithY, 1806065938) \
V(_Float32x4, withZ, Float32x4WithZ, 320659034) \
V(_Float32x4, withW, Float32x4WithW, 1108437255) \
+ V(Float64x2, Float64x2., Float64x2Constructor, 1283521526) \
+ V(Float64x2, Float64x2.zero, Float64x2Zero, 1971574037) \
+ V(Float64x2, Float64x2.splat, Float64x2Splat, 823230813) \
+ V(Float64x2, Float64x2.fromFloat32x4, Float64x2FromFloat32x4, 1383666060) \
+ V(_Float64x2, get:x, Float64x2GetX, 176817227) \
+ V(_Float64x2, get:y, Float64x2GetY, 1858031019) \
+ V(_Float64x2, _negate, Float64x2Negate, 1345265430) \
+ V(_Float64x2, abs, Float64x2Abs, 778551930) \
+ V(_Float64x2, sqrt, Float64x2Sqrt, 591345168) \
+ V(_Float64x2, get:signMask, Float64x2GetSignMask, 601579087) \
+ V(_Float64x2, scale, Float64x2Scale, 1781090062) \
+ V(_Float64x2, withX, Float64x2WithX, 1624377250) \
+ V(_Float64x2, withY, Float64x2WithY, 2078610265) \
+ V(_Float64x2, min, Float64x2Min, 876488999) \
+ V(_Float64x2, max, Float64x2Max, 389912972) \
V(Int32x4, Int32x4.bool, Int32x4BoolConstructor, 295910141) \
V(Int32x4, Int32x4.fromFloat32x4Bits, Int32x4FromFloat32x4Bits, \
893850947) \
@@ -753,6 +770,15 @@
M(TestSmi) \
M(BoxFloat64x2) \
M(UnboxFloat64x2) \
+ M(BinaryFloat64x2Op) \
+ M(Float64x2Zero) \
+ M(Float64x2Constructor) \
+ M(Float64x2Splat) \
+ M(Float32x4ToFloat64x2) \
+ M(Float64x2ToFloat32x4) \
+ M(Simd64x2Shuffle) \
+ M(Float64x2ZeroArg) \
+ M(Float64x2OneArg) \
#define FORWARD_DECLARATION(type) class type##Instr;
@@ -1037,12 +1063,21 @@
friend class Float32x4ClampInstr;
friend class Float32x4WithInstr;
friend class Float32x4ToInt32x4Instr;
+ friend class Simd64x2ShuffleInstr;
+ friend class Float64x2ZeroArgInstr;
+ friend class Float64x2OneArgInstr;
+ friend class Float32x4ToFloat64x2Instr;
+ friend class Float64x2ToFloat32x4Instr;
+ friend class Float64x2ZeroInstr;
+ friend class Float64x2SplatInstr;
+ friend class Float64x2ConstructorInstr;
friend class Int32x4BoolConstructorInstr;
friend class Int32x4GetFlagInstr;
friend class Int32x4SetFlagInstr;
friend class Int32x4SelectInstr;
friend class Int32x4ToFloat32x4Instr;
friend class BinaryInt32x4OpInstr;
+ friend class BinaryFloat64x2OpInstr;
friend class BinaryMintOpInstr;
friend class BinarySmiOpInstr;
friend class UnarySmiOpInstr;
@@ -1685,6 +1720,16 @@
};
+// If the result of the allocation is not stored into any field, passed
+// as an argument or used in a phi then it can't alias with any other
+// SSA value.
+enum AliasIdentity {
+ kIdentityUnknown,
+ kIdentityAliased,
+ kIdentityNotAliased
+};
+
+
// Abstract super-class of all instructions that define a value (Bind, Phi).
class Definition : public Instruction {
public:
@@ -1822,6 +1867,16 @@
temp_index_ = reinterpret_cast<intptr_t>(other);
}
+ virtual AliasIdentity Identity() const {
+ // Only implemented for allocation instructions.
+ UNREACHABLE();
+ return kIdentityUnknown;
+ }
+
+ virtual void SetIdentity(AliasIdentity identity) {
+ UNREACHABLE();
+ }
+
protected:
friend class RangeAnalysis;
friend class Value;
@@ -3244,7 +3299,8 @@
arguments_(arguments),
result_cid_(kDynamicCid),
is_known_list_constructor_(false),
- is_native_list_factory_(false) {
+ is_native_list_factory_(false),
+ identity_(kIdentityUnknown) {
ASSERT(function.IsZoneHandle());
ASSERT(argument_names.IsZoneHandle() || argument_names.InVMHeap());
}
@@ -3288,8 +3344,15 @@
is_native_list_factory_ = value;
}
+ bool IsRecognizedFactory() const {
+ return is_known_list_constructor() || is_native_list_factory();
+ }
+
virtual bool MayThrow() const { return true; }
+ virtual AliasIdentity Identity() const { return identity_; }
+ virtual void SetIdentity(AliasIdentity identity) { identity_ = identity; }
+
private:
const ICData* ic_data_;
const intptr_t token_pos_;
@@ -3302,6 +3365,8 @@
bool is_known_list_constructor_;
bool is_native_list_factory_;
+ AliasIdentity identity_;
+
DISALLOW_COPY_AND_ASSIGN(StaticCallInstr);
};
@@ -3370,16 +3435,24 @@
};
-class DropTempsInstr : public TemplateDefinition<1> {
+class DropTempsInstr : public Definition {
public:
- explicit DropTempsInstr(intptr_t num_temps, Value* value)
- : num_temps_(num_temps) {
- SetInputAt(0, value);
+ explicit DropTempsInstr(intptr_t num_temps, Value* value = NULL)
+ : num_temps_(num_temps), value_(NULL) {
+ if (value != NULL) {
+ SetInputAt(0, value);
+ }
}
DECLARE_INSTRUCTION(DropTemps)
- Value* value() const { return inputs_[0]; }
+ virtual intptr_t InputCount() const { return value_ != NULL ? 1 : 0; }
+ virtual Value* InputAt(intptr_t i) const {
+ ASSERT((value_ != NULL) && (i == 0));
+ return value_;
+ }
+
+ Value* value() const { return value_; }
intptr_t num_temps() const { return num_temps_; }
@@ -3400,7 +3473,12 @@
}
private:
- intptr_t num_temps_;
+ virtual void RawSetInputAt(intptr_t i, Value* value) {
+ value_ = value;
+ }
+
+ const intptr_t num_temps_;
+ Value* value_;
DISALLOW_COPY_AND_ASSIGN(DropTempsInstr);
};
@@ -4016,9 +4094,8 @@
: token_pos_(token_pos),
cls_(cls),
arguments_(arguments),
- identity_(kUnknown),
- closure_function_(Function::ZoneHandle()),
- context_field_(Field::ZoneHandle()) {
+ identity_(kIdentityUnknown),
+ closure_function_(Function::ZoneHandle()) {
// Either no arguments or one type-argument and one instantiator.
ASSERT(arguments->is_empty() || (arguments->length() == 1));
}
@@ -4039,11 +4116,6 @@
closure_function_ ^= function.raw();
}
- const Field& context_field() const { return context_field_; }
- void set_context_field(const Field& field) {
- context_field_ ^= field.raw();
- }
-
virtual void PrintOperandsTo(BufferFormatter* f) const;
virtual bool CanDeoptimize() const { return false; }
@@ -4052,25 +4124,15 @@
virtual bool MayThrow() const { return false; }
- // If the result of the allocation is not stored into any field, passed
- // as an argument or used in a phi then it can't alias with any other
- // SSA value.
- enum Identity {
- kUnknown,
- kAliased,
- kNotAliased
- };
-
- Identity identity() const { return identity_; }
- void set_identity(Identity identity) { identity_ = identity; }
+ virtual AliasIdentity Identity() const { return identity_; }
+ virtual void SetIdentity(AliasIdentity identity) { identity_ = identity; }
private:
const intptr_t token_pos_;
const Class& cls_;
ZoneGrowableArray<PushArgumentInstr*>* const arguments_;
- Identity identity_;
+ AliasIdentity identity_;
Function& closure_function_;
- Field& context_field_;
DISALLOW_COPY_AND_ASSIGN(AllocateObjectInstr);
};
@@ -4082,10 +4144,10 @@
class MaterializeObjectInstr : public Definition {
public:
MaterializeObjectInstr(const Class& cls,
- const ZoneGrowableArray<const Field*>& fields,
+ const ZoneGrowableArray<const Object*>& slots,
ZoneGrowableArray<Value*>* values)
- : cls_(cls), fields_(fields), values_(values), locations_(NULL) {
- ASSERT(fields_.length() == values_->length());
+ : cls_(cls), slots_(slots), values_(values), locations_(NULL) {
+ ASSERT(slots_.length() == values_->length());
for (intptr_t i = 0; i < InputCount(); i++) {
InputAt(i)->set_instruction(this);
InputAt(i)->set_use_index(i);
@@ -4094,7 +4156,9 @@
const Class& cls() const { return cls_; }
intptr_t FieldOffsetAt(intptr_t i) const {
- return fields_[i]->Offset();
+ return slots_[i]->IsField()
+ ? Field::Cast(*slots_[i]).Offset()
+ : Smi::Cast(*slots_[i]).Value();
}
const Location& LocationAt(intptr_t i) {
return locations_[i];
@@ -4135,7 +4199,7 @@
}
const Class& cls_;
- const ZoneGrowableArray<const Field*>& fields_;
+ const ZoneGrowableArray<const Object*>& slots_;
ZoneGrowableArray<Value*>* values_;
Location* locations_;
@@ -4148,7 +4212,7 @@
CreateArrayInstr(intptr_t token_pos,
Value* element_type,
Value* num_elements)
- : token_pos_(token_pos) {
+ : token_pos_(token_pos), identity_(kIdentityUnknown) {
SetInputAt(kElementTypePos, element_type);
SetInputAt(kLengthPos, num_elements);
}
@@ -4174,8 +4238,12 @@
virtual bool MayThrow() const { return false; }
+ virtual AliasIdentity Identity() const { return identity_; }
+ virtual void SetIdentity(AliasIdentity identity) { identity_ = identity; }
+
private:
const intptr_t token_pos_;
+ AliasIdentity identity_;
DISALLOW_COPY_AND_ASSIGN(CreateArrayInstr);
};
@@ -5723,6 +5791,72 @@
};
+class Simd64x2ShuffleInstr : public TemplateDefinition<1> {
+ public:
+ Simd64x2ShuffleInstr(MethodRecognizer::Kind op_kind, Value* value,
+ intptr_t mask,
+ intptr_t deopt_id)
+ : op_kind_(op_kind), mask_(mask) {
+ SetInputAt(0, value);
+ deopt_id_ = deopt_id;
+ }
+
+ Value* value() const { return inputs_[0]; }
+
+ MethodRecognizer::Kind op_kind() const { return op_kind_; }
+
+ intptr_t mask() const { return mask_; }
+
+ virtual void PrintOperandsTo(BufferFormatter* f) const;
+
+ virtual bool CanDeoptimize() const { return false; }
+
+ virtual Representation representation() const {
+ if ((op_kind_ == MethodRecognizer::kFloat64x2GetX) ||
+ (op_kind_ == MethodRecognizer::kFloat64x2GetY)) {
+ return kUnboxedDouble;
+ }
+ UNIMPLEMENTED();
+ return kUnboxedDouble;
+ }
+
+ virtual Representation RequiredInputRepresentation(intptr_t idx) const {
+ ASSERT(idx == 0);
+ if ((op_kind_ == MethodRecognizer::kFloat64x2GetX) ||
+ (op_kind_ == MethodRecognizer::kFloat64x2GetY)) {
+ return kUnboxedFloat64x2;
+ }
+ UNIMPLEMENTED();
+ return kUnboxedFloat64x2;
+ }
+
+ virtual intptr_t DeoptimizationTarget() const {
+ // Direct access since this instruction cannot deoptimize, and the deopt-id
+ // was inherited from another instruction that could deoptimize.
+ return deopt_id_;
+ }
+
+ DECLARE_INSTRUCTION(Simd64x2Shuffle)
+ 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->AsSimd64x2Shuffle()->op_kind()) &&
+ (mask() == other->AsSimd64x2Shuffle()->mask());
+ }
+
+ virtual bool MayThrow() const { return false; }
+
+ private:
+ const MethodRecognizer::Kind op_kind_;
+ const intptr_t mask_;
+
+ DISALLOW_COPY_AND_ASSIGN(Simd64x2ShuffleInstr);
+};
+
+
class Float32x4ToInt32x4Instr : public TemplateDefinition<1> {
public:
Float32x4ToInt32x4Instr(Value* left, intptr_t deopt_id) {
@@ -5766,6 +5900,334 @@
};
+class Float32x4ToFloat64x2Instr : public TemplateDefinition<1> {
+ public:
+ Float32x4ToFloat64x2Instr(Value* left, intptr_t deopt_id) {
+ SetInputAt(0, left);
+ deopt_id_ = deopt_id;
+ }
+
+ Value* left() const { return inputs_[0]; }
+
+ virtual void PrintOperandsTo(BufferFormatter* f) const;
+
+ virtual bool CanDeoptimize() const { return false; }
+
+ virtual Representation representation() const {
+ return kUnboxedFloat64x2;
+ }
+
+ virtual Representation RequiredInputRepresentation(intptr_t idx) const {
+ ASSERT(idx == 0);
+ return kUnboxedFloat32x4;
+ }
+
+ virtual intptr_t DeoptimizationTarget() const {
+ // Direct access since this instruction cannot deoptimize, and the deopt-id
+ // was inherited from another instruction that could deoptimize.
+ return deopt_id_;
+ }
+
+ DECLARE_INSTRUCTION(Float32x4ToFloat64x2)
+ 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 true; }
+
+ virtual bool MayThrow() const { return false; }
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(Float32x4ToFloat64x2Instr);
+};
+
+
+class Float64x2ToFloat32x4Instr : public TemplateDefinition<1> {
+ public:
+ Float64x2ToFloat32x4Instr(Value* left, intptr_t deopt_id) {
+ SetInputAt(0, left);
+ deopt_id_ = deopt_id;
+ }
+
+ Value* left() const { return inputs_[0]; }
+
+ virtual void PrintOperandsTo(BufferFormatter* f) const;
+
+ virtual bool CanDeoptimize() const { return false; }
+
+ virtual Representation representation() const {
+ return kUnboxedFloat32x4;
+ }
+
+ virtual Representation RequiredInputRepresentation(intptr_t idx) const {
+ ASSERT(idx == 0);
+ return kUnboxedFloat64x2;
+ }
+
+ virtual intptr_t DeoptimizationTarget() const {
+ // Direct access since this instruction cannot deoptimize, and the deopt-id
+ // was inherited from another instruction that could deoptimize.
+ return deopt_id_;
+ }
+
+ DECLARE_INSTRUCTION(Float64x2ToFloat32x4)
+ 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 true; }
+
+ virtual bool MayThrow() const { return false; }
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(Float64x2ToFloat32x4Instr);
+};
+
+
+class Float64x2ConstructorInstr : public TemplateDefinition<2> {
+ public:
+ Float64x2ConstructorInstr(Value* value0, Value* value1, intptr_t deopt_id) {
+ SetInputAt(0, value0);
+ SetInputAt(1, value1);
+ deopt_id_ = deopt_id;
+ }
+
+ Value* value0() const { return inputs_[0]; }
+ Value* value1() const { return inputs_[1]; }
+
+ virtual void PrintOperandsTo(BufferFormatter* f) const;
+
+ virtual bool CanDeoptimize() const { return false; }
+
+ virtual Representation representation() const {
+ return kUnboxedFloat64x2;
+ }
+
+ virtual Representation RequiredInputRepresentation(intptr_t idx) const {
+ ASSERT(idx >= 0 && idx < 2);
+ return kUnboxedDouble;
+ }
+
+ virtual intptr_t DeoptimizationTarget() const {
+ // Direct access since this instruction cannot deoptimize, and the deopt-id
+ // was inherited from another instruction that could deoptimize.
+ return deopt_id_;
+ }
+
+ DECLARE_INSTRUCTION(Float64x2Constructor)
+ 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 true; }
+
+ virtual bool MayThrow() const { return false; }
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(Float64x2ConstructorInstr);
+};
+
+
+class Float64x2SplatInstr : public TemplateDefinition<1> {
+ public:
+ Float64x2SplatInstr(Value* value, intptr_t deopt_id) {
+ SetInputAt(0, value);
+ deopt_id_ = deopt_id;
+ }
+
+ Value* value() const { return inputs_[0]; }
+
+ virtual void PrintOperandsTo(BufferFormatter* f) const;
+
+ virtual bool CanDeoptimize() const { return false; }
+
+ virtual Representation representation() const {
+ return kUnboxedFloat64x2;
+ }
+
+ virtual Representation RequiredInputRepresentation(intptr_t idx) const {
+ ASSERT(idx == 0);
+ return kUnboxedDouble;
+ }
+
+ virtual intptr_t DeoptimizationTarget() const {
+ // Direct access since this instruction cannot deoptimize, and the deopt-id
+ // was inherited from another instruction that could deoptimize.
+ return deopt_id_;
+ }
+
+ DECLARE_INSTRUCTION(Float64x2Splat)
+ 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 true; }
+
+ virtual bool MayThrow() const { return false; }
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(Float64x2SplatInstr);
+};
+
+
+class Float64x2ZeroInstr : public TemplateDefinition<0> {
+ public:
+ explicit Float64x2ZeroInstr(intptr_t deopt_id) {
+ deopt_id_ = deopt_id;
+ }
+
+ virtual void PrintOperandsTo(BufferFormatter* f) const;
+
+ virtual bool CanDeoptimize() const { return false; }
+
+ virtual Representation representation() const {
+ return kUnboxedFloat64x2;
+ }
+
+ virtual Representation RequiredInputRepresentation(intptr_t idx) const {
+ UNIMPLEMENTED();
+ return kUnboxedFloat64x2;
+ }
+
+ virtual intptr_t DeoptimizationTarget() const {
+ // Direct access since this instruction cannot deoptimize, and the deopt-id
+ // was inherited from another instruction that could deoptimize.
+ return deopt_id_;
+ }
+
+ DECLARE_INSTRUCTION(Float64x2Zero)
+ 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 true; }
+
+ virtual bool MayThrow() const { return false; }
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(Float64x2ZeroInstr);
+};
+
+
+class Float64x2ZeroArgInstr : public TemplateDefinition<1> {
+ public:
+ Float64x2ZeroArgInstr(MethodRecognizer::Kind op_kind, Value* left,
+ intptr_t deopt_id) : op_kind_(op_kind) {
+ SetInputAt(0, left);
+ deopt_id_ = deopt_id;
+ }
+
+ Value* left() const { return inputs_[0]; }
+
+ MethodRecognizer::Kind op_kind() const { return op_kind_; }
+
+ virtual void PrintOperandsTo(BufferFormatter* f) const;
+
+ virtual bool CanDeoptimize() const { return false; }
+
+ virtual Representation representation() const {
+ if (op_kind() == MethodRecognizer::kFloat64x2GetSignMask) {
+ // Smi.
+ return kTagged;
+ }
+ return kUnboxedFloat64x2;
+ }
+
+ virtual Representation RequiredInputRepresentation(intptr_t idx) const {
+ ASSERT(idx == 0);
+ return kUnboxedFloat64x2;
+ }
+
+ virtual intptr_t DeoptimizationTarget() const {
+ // Direct access since this instruction cannot deoptimize, and the deopt-id
+ // was inherited from another instruction that could deoptimize.
+ return deopt_id_;
+ }
+
+ DECLARE_INSTRUCTION(Float64x2ZeroArg)
+ 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->AsFloat64x2ZeroArg()->op_kind();
+ }
+
+ virtual bool MayThrow() const { return false; }
+
+ private:
+ const MethodRecognizer::Kind op_kind_;
+
+ DISALLOW_COPY_AND_ASSIGN(Float64x2ZeroArgInstr);
+};
+
+
+class Float64x2OneArgInstr : public TemplateDefinition<2> {
+ public:
+ Float64x2OneArgInstr(MethodRecognizer::Kind op_kind, Value* left,
+ Value* right, intptr_t deopt_id) : op_kind_(op_kind) {
+ SetInputAt(0, left);
+ SetInputAt(1, right);
+ deopt_id_ = deopt_id;
+ }
+
+ Value* left() const { return inputs_[0]; }
+ Value* right() const { return inputs_[1]; }
+
+ MethodRecognizer::Kind op_kind() const { return op_kind_; }
+
+ virtual void PrintOperandsTo(BufferFormatter* f) const;
+
+ virtual bool CanDeoptimize() const { return false; }
+
+ virtual Representation representation() const {
+ return kUnboxedFloat64x2;
+ }
+
+ virtual Representation RequiredInputRepresentation(intptr_t idx) const {
+ if (idx == 0) {
+ return kUnboxedFloat64x2;
+ }
+ ASSERT(idx == 1);
+ if ((op_kind() == MethodRecognizer::kFloat64x2WithX) ||
+ (op_kind() == MethodRecognizer::kFloat64x2WithY) ||
+ (op_kind() == MethodRecognizer::kFloat64x2Scale)) {
+ return kUnboxedDouble;
+ }
+ return kUnboxedFloat64x2;
+ }
+
+ virtual intptr_t DeoptimizationTarget() const {
+ // Direct access since this instruction cannot deoptimize, and the deopt-id
+ // was inherited from another instruction that could deoptimize.
+ return deopt_id_;
+ }
+
+ DECLARE_INSTRUCTION(Float64x2OneArg)
+ 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->AsFloat64x2OneArg()->op_kind();
+ }
+
+ virtual bool MayThrow() const { return false; }
+
+ private:
+ const MethodRecognizer::Kind op_kind_;
+
+ DISALLOW_COPY_AND_ASSIGN(Float64x2OneArgInstr);
+};
+
+
class Int32x4BoolConstructorInstr : public TemplateDefinition<4> {
public:
Int32x4BoolConstructorInstr(Value* value0, Value* value1, Value* value2,
@@ -6125,6 +6587,63 @@
DISALLOW_COPY_AND_ASSIGN(BinaryInt32x4OpInstr);
};
+
+class BinaryFloat64x2OpInstr : public TemplateDefinition<2> {
+ public:
+ BinaryFloat64x2OpInstr(Token::Kind op_kind,
+ Value* left,
+ Value* right,
+ intptr_t deopt_id)
+ : op_kind_(op_kind) {
+ SetInputAt(0, left);
+ SetInputAt(1, right);
+ deopt_id_ = deopt_id;
+ }
+
+ Value* left() const { return inputs_[0]; }
+ Value* right() const { return inputs_[1]; }
+
+ Token::Kind op_kind() const { return op_kind_; }
+
+ virtual bool CanDeoptimize() const { return false; }
+
+ virtual Representation representation() const {
+ return kUnboxedFloat64x2;
+ }
+
+ virtual Representation RequiredInputRepresentation(intptr_t idx) const {
+ ASSERT((idx == 0) || (idx == 1));
+ return kUnboxedFloat64x2;
+ }
+
+ virtual void PrintOperandsTo(BufferFormatter* f) const;
+
+ virtual intptr_t DeoptimizationTarget() const {
+ // Direct access since this instruction cannot deoptimize, and the deopt-id
+ // was inherited from another instruction that could deoptimize.
+ return deopt_id_;
+ }
+
+ DECLARE_INSTRUCTION(BinaryFloat64x2Op)
+ 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 {
+ ASSERT(other->IsBinaryFloat64x2Op());
+ return op_kind() == other->AsBinaryFloat64x2Op()->op_kind();
+ }
+
+ virtual bool MayThrow() const { return false; }
+
+ private:
+ const Token::Kind op_kind_;
+
+ DISALLOW_COPY_AND_ASSIGN(BinaryFloat64x2OpInstr);
+};
+
+
class BinaryMintOpInstr : public TemplateDefinition<2> {
public:
BinaryMintOpInstr(Token::Kind op_kind,
diff --git a/runtime/vm/intermediate_language_arm.cc b/runtime/vm/intermediate_language_arm.cc
index 9cda279..4b6e712 100644
--- a/runtime/vm/intermediate_language_arm.cc
+++ b/runtime/vm/intermediate_language_arm.cc
@@ -1687,6 +1687,9 @@
case kFloat32x4Cid:
cls = &compiler->float32x4_class();
break;
+ case kFloat64x2Cid:
+ cls = &compiler->float64x2_class();
+ break;
default:
UNREACHABLE();
}
@@ -1719,6 +1722,13 @@
__ StoreDToOffset(value_odd, temp,
Float32x4::value_offset() + 2 * kWordSize - kHeapObjectTag);
break;
+ case kFloat64x2Cid:
+ __ Comment("UnboxedFloat64x2StoreInstanceFieldInstr");
+ __ StoreDToOffset(value, temp,
+ Float64x2::value_offset() - kHeapObjectTag);
+ __ StoreDToOffset(value_odd, temp,
+ Float64x2::value_offset() + 2 * kWordSize - kHeapObjectTag);
+ break;
default:
UNREACHABLE();
}
@@ -1736,6 +1746,7 @@
Label store_pointer;
Label store_double;
Label store_float32x4;
+ Label store_float64x2;
__ LoadObject(temp, Field::ZoneHandle(field().raw()));
@@ -1755,6 +1766,10 @@
__ CompareImmediate(temp2, kFloat32x4Cid);
__ b(&store_float32x4, EQ);
+ __ ldr(temp2, FieldAddress(temp, Field::guarded_cid_offset()));
+ __ CompareImmediate(temp2, kFloat64x2Cid);
+ __ b(&store_float64x2, EQ);
+
// Fall through.
__ b(&store_pointer);
@@ -1828,6 +1843,40 @@
__ b(&skip_store);
}
+ {
+ __ Bind(&store_float64x2);
+ Label copy_float64x2;
+ StoreInstanceFieldSlowPath* slow_path =
+ new StoreInstanceFieldSlowPath(this, compiler->float64x2_class());
+ compiler->AddSlowPathCode(slow_path);
+
+ __ ldr(temp, FieldAddress(instance_reg, offset_in_bytes_));
+ __ CompareImmediate(temp,
+ reinterpret_cast<intptr_t>(Object::null()));
+ __ b(©_float64x2, NE);
+
+ __ TryAllocate(compiler->float64x2_class(),
+ slow_path->entry_label(),
+ temp,
+ temp2);
+ __ Bind(slow_path->exit_label());
+ __ MoveRegister(temp2, temp);
+ __ StoreIntoObject(instance_reg,
+ FieldAddress(instance_reg, offset_in_bytes_),
+ temp2);
+ __ Bind(©_float64x2);
+ // TODO(zra): Maybe use vldmd here.
+ __ LoadDFromOffset(fpu_temp, value_reg,
+ Float64x2::value_offset() - kHeapObjectTag);
+ __ LoadDFromOffset(fpu_temp_odd, value_reg,
+ Float64x2::value_offset() + 2 * kWordSize - kHeapObjectTag);
+ __ StoreDToOffset(fpu_temp, temp,
+ Float64x2::value_offset() - kHeapObjectTag);
+ __ StoreDToOffset(fpu_temp_odd, temp,
+ Float64x2::value_offset() + 2 * kWordSize - kHeapObjectTag);
+ __ b(&skip_store);
+ }
+
__ Bind(&store_pointer);
}
@@ -2094,6 +2143,14 @@
__ LoadDFromOffset(result_odd, temp,
Float32x4::value_offset() + 2 * kWordSize - kHeapObjectTag);
break;
+ case kFloat64x2Cid:
+ __ Comment("UnboxedFloat64x2LoadFieldInstr");
+ // TODO(zra): Maybe use vldmd here.
+ __ LoadDFromOffset(result, temp,
+ Float64x2::value_offset() - kHeapObjectTag);
+ __ LoadDFromOffset(result_odd, temp,
+ Float64x2::value_offset() + 2 * kWordSize - kHeapObjectTag);
+ break;
default:
UNREACHABLE();
}
@@ -2110,6 +2167,7 @@
Label load_pointer;
Label load_double;
Label load_float32x4;
+ Label load_float64x2;
__ LoadObject(result_reg, Field::ZoneHandle(field()->raw()));
@@ -2129,6 +2187,10 @@
__ CompareImmediate(temp, kFloat32x4Cid);
__ b(&load_float32x4, EQ);
+ __ ldr(temp, field_cid_operand);
+ __ CompareImmediate(temp, kFloat64x2Cid);
+ __ b(&load_float64x2, EQ);
+
// Fall through.
__ b(&load_pointer);
@@ -2177,6 +2239,29 @@
__ b(&done);
}
+ {
+ __ Bind(&load_float64x2);
+ BoxFloat64x2SlowPath* slow_path = new BoxFloat64x2SlowPath(this);
+ compiler->AddSlowPathCode(slow_path);
+
+ __ TryAllocate(compiler->float64x2_class(),
+ slow_path->entry_label(),
+ result_reg,
+ temp);
+ __ Bind(slow_path->exit_label());
+ __ ldr(temp, FieldAddress(instance_reg, offset_in_bytes()));
+ // TODO(zra): Maybe use vldmd here.
+ __ LoadDFromOffset(value, temp,
+ Float64x2::value_offset() - kHeapObjectTag);
+ __ LoadDFromOffset(value_odd, temp,
+ Float64x2::value_offset() + 2 * kWordSize - kHeapObjectTag);
+ __ StoreDToOffset(value, result_reg,
+ Float64x2::value_offset() - kHeapObjectTag);
+ __ StoreDToOffset(value_odd, result_reg,
+ Float64x2::value_offset() + 2 * kWordSize - kHeapObjectTag);
+ __ b(&done);
+ }
+
__ Bind(&load_pointer);
}
__ LoadFromOffset(kWord, result_reg,
@@ -3310,6 +3395,54 @@
}
+LocationSummary* BinaryFloat64x2OpInstr::MakeLocationSummary(bool opt) const {
+ const intptr_t kNumInputs = 2;
+ const intptr_t kNumTemps = 0;
+ LocationSummary* summary =
+ new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall);
+ summary->set_in(0, Location::RequiresFpuRegister());
+ summary->set_in(1, Location::RequiresFpuRegister());
+ summary->set_out(Location::RequiresFpuRegister());
+ return summary;
+}
+
+
+void BinaryFloat64x2OpInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+ QRegister left = locs()->in(0).fpu_reg();
+ QRegister right = locs()->in(1).fpu_reg();
+ QRegister result = locs()->out().fpu_reg();
+
+ DRegister left0 = EvenDRegisterOf(left);
+ DRegister left1 = OddDRegisterOf(left);
+
+ DRegister right0 = EvenDRegisterOf(right);
+ DRegister right1 = OddDRegisterOf(right);
+
+ DRegister result0 = EvenDRegisterOf(result);
+ DRegister result1 = OddDRegisterOf(result);
+
+ switch (op_kind()) {
+ case Token::kADD:
+ __ vaddd(result0, left0, right0);
+ __ vaddd(result1, left1, right1);
+ break;
+ case Token::kSUB:
+ __ vsubd(result0, left0, right0);
+ __ vsubd(result1, left1, right1);
+ break;
+ case Token::kMUL:
+ __ vmuld(result0, left0, right0);
+ __ vmuld(result1, left1, right1);
+ break;
+ case Token::kDIV:
+ __ vdivd(result0, left0, right0);
+ __ vdivd(result1, left1, right1);
+ break;
+ default: UNREACHABLE();
+ }
+}
+
+
LocationSummary* Simd32x4ShuffleInstr::MakeLocationSummary(bool opt) const {
const intptr_t kNumInputs = 1;
const intptr_t kNumTemps = 0;
@@ -3813,6 +3946,310 @@
}
+LocationSummary* Simd64x2ShuffleInstr::MakeLocationSummary(bool opt) const {
+ const intptr_t kNumInputs = 1;
+ const intptr_t kNumTemps = 0;
+ LocationSummary* summary =
+ new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall);
+ summary->set_in(0, Location::RequiresFpuRegister());
+ summary->set_out(Location::RequiresFpuRegister());
+ return summary;
+}
+
+
+void Simd64x2ShuffleInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+ QRegister value = locs()->in(0).fpu_reg();
+
+ DRegister dvalue0 = EvenDRegisterOf(value);
+ DRegister dvalue1 = OddDRegisterOf(value);
+
+ QRegister result = locs()->out().fpu_reg();
+
+ DRegister dresult0 = EvenDRegisterOf(result);
+
+ switch (op_kind()) {
+ case MethodRecognizer::kFloat64x2GetX:
+ __ vmovd(dresult0, dvalue0);
+ break;
+ case MethodRecognizer::kFloat64x2GetY:
+ __ vmovd(dresult0, dvalue1);
+ break;
+ default: UNREACHABLE();
+ }
+}
+
+
+LocationSummary* Float64x2ZeroInstr::MakeLocationSummary(bool opt) const {
+ const intptr_t kNumInputs = 0;
+ const intptr_t kNumTemps = 0;
+ LocationSummary* summary =
+ new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall);
+ summary->set_out(Location::RequiresFpuRegister());
+ return summary;
+}
+
+
+void Float64x2ZeroInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+ QRegister q = locs()->out().fpu_reg();
+ __ veorq(q, q, q);
+}
+
+
+LocationSummary* Float64x2SplatInstr::MakeLocationSummary(bool opt) const {
+ const intptr_t kNumInputs = 1;
+ const intptr_t kNumTemps = 0;
+ LocationSummary* summary =
+ new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall);
+ summary->set_in(0, Location::RequiresFpuRegister());
+ summary->set_out(Location::RequiresFpuRegister());
+ return summary;
+}
+
+
+void Float64x2SplatInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+ QRegister value = locs()->in(0).fpu_reg();
+
+ DRegister dvalue = EvenDRegisterOf(value);
+
+ QRegister result = locs()->out().fpu_reg();
+
+ DRegister dresult0 = EvenDRegisterOf(result);
+ DRegister dresult1 = OddDRegisterOf(result);
+
+ // Splat across all lanes.
+ __ vmovd(dresult0, dvalue);
+ __ vmovd(dresult1, dvalue);
+}
+
+
+LocationSummary* Float64x2ConstructorInstr::MakeLocationSummary(
+ bool opt) const {
+ const intptr_t kNumInputs = 2;
+ const intptr_t kNumTemps = 0;
+ LocationSummary* summary =
+ new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall);
+ summary->set_in(0, Location::RequiresFpuRegister());
+ summary->set_in(1, Location::RequiresFpuRegister());
+ summary->set_out(Location::RequiresFpuRegister());
+ return summary;
+}
+
+
+void Float64x2ConstructorInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+ QRegister q0 = locs()->in(0).fpu_reg();
+ QRegister q1 = locs()->in(1).fpu_reg();
+ QRegister r = locs()->out().fpu_reg();
+
+ DRegister d0 = EvenDRegisterOf(q0);
+ DRegister d1 = EvenDRegisterOf(q1);
+
+ DRegister dr0 = EvenDRegisterOf(r);
+ DRegister dr1 = OddDRegisterOf(r);
+
+ __ vmovd(dr0, d0);
+ __ vmovd(dr1, d1);
+}
+
+
+LocationSummary* Float64x2ToFloat32x4Instr::MakeLocationSummary(
+ bool opt) const {
+ const intptr_t kNumInputs = 1;
+ const intptr_t kNumTemps = 0;
+ LocationSummary* summary =
+ new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall);
+ summary->set_in(0, Location::RequiresFpuRegister());
+ // Low (< 7) Q registers are needed for the vcvtsd instruction.
+ summary->set_out(Location::FpuRegisterLocation(Q6));
+ return summary;
+}
+
+
+void Float64x2ToFloat32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) {
+ QRegister q = locs()->in(0).fpu_reg();
+ QRegister r = locs()->out().fpu_reg();
+
+ DRegister dq0 = EvenDRegisterOf(q);
+ DRegister dq1 = OddDRegisterOf(q);
+
+ DRegister dr0 = EvenDRegisterOf(r);
+
+ // Zero register.
+ __ veorq(r, r, r);
+ // Set X lane.
+ __ vcvtsd(EvenSRegisterOf(dr0), dq0);
+ // Set Y lane.
+ __ vcvtsd(OddSRegisterOf(dr0), dq1);
+}
+
+
+LocationSummary* Float32x4ToFloat64x2Instr::MakeLocationSummary(
+ bool opt) const {
+ const intptr_t kNumInputs = 1;
+ const intptr_t kNumTemps = 0;
+ LocationSummary* summary =
+ new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall);
+ summary->set_in(0, Location::RequiresFpuRegister());
+ // Low (< 7) Q registers are needed for the vcvtsd instruction.
+ summary->set_out(Location::FpuRegisterLocation(Q6));
+ return summary;
+}
+
+
+void Float32x4ToFloat64x2Instr::EmitNativeCode(FlowGraphCompiler* compiler) {
+ QRegister q = locs()->in(0).fpu_reg();
+ QRegister r = locs()->out().fpu_reg();
+
+ DRegister dq0 = EvenDRegisterOf(q);
+
+ DRegister dr0 = EvenDRegisterOf(r);
+ DRegister dr1 = OddDRegisterOf(r);
+
+ // Set X.
+ __ vcvtds(dr0, EvenSRegisterOf(dq0));
+ // Set Y.
+ __ vcvtds(dr1, OddSRegisterOf(dq0));
+}
+
+
+LocationSummary* Float64x2ZeroArgInstr::MakeLocationSummary(bool opt) const {
+ const intptr_t kNumInputs = 1;
+ const intptr_t kNumTemps = 0;
+ LocationSummary* summary =
+ new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall);
+
+ if (representation() == kTagged) {
+ ASSERT(op_kind() == MethodRecognizer::kFloat64x2GetSignMask);
+ // Grabbing the S components means we need a low (< 7) Q.
+ summary->set_in(0, Location::FpuRegisterLocation(Q6));
+ summary->set_out(Location::RequiresRegister());
+ summary->AddTemp(Location::RequiresRegister());
+ } else {
+ summary->set_in(0, Location::RequiresFpuRegister());
+ summary->set_out(Location::RequiresFpuRegister());
+ }
+ return summary;
+}
+
+
+void Float64x2ZeroArgInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+ QRegister q = locs()->in(0).fpu_reg();
+
+ if ((op_kind() == MethodRecognizer::kFloat64x2GetSignMask)) {
+ DRegister dvalue0 = EvenDRegisterOf(q);
+ DRegister dvalue1 = OddDRegisterOf(q);
+
+ Register out = locs()->out().reg();
+ Register temp = locs()->temp(0).reg();
+
+ // Upper 32-bits of X lane.
+ __ vmovrs(out, OddSRegisterOf(dvalue0));
+ __ Lsr(out, out, 31);
+ // Upper 32-bits of Y lane.
+ __ vmovrs(temp, OddSRegisterOf(dvalue1));
+ __ Lsr(temp, temp, 31);
+ __ orr(out, out, ShifterOperand(temp, LSL, 1));
+ // Tag.
+ __ SmiTag(out);
+ return;
+ }
+ ASSERT(representation() == kUnboxedFloat64x2);
+ QRegister r = locs()->out().fpu_reg();
+
+ DRegister dvalue0 = EvenDRegisterOf(q);
+ DRegister dvalue1 = OddDRegisterOf(q);
+ DRegister dresult0 = EvenDRegisterOf(r);
+ DRegister dresult1 = OddDRegisterOf(r);
+
+ switch (op_kind()) {
+ case MethodRecognizer::kFloat64x2Negate:
+ __ vnegd(dresult0, dvalue0);
+ __ vnegd(dresult1, dvalue1);
+ break;
+ case MethodRecognizer::kFloat64x2Abs:
+ __ vabsd(dresult0, dvalue0);
+ __ vabsd(dresult1, dvalue1);
+ break;
+ case MethodRecognizer::kFloat64x2Sqrt:
+ __ vsqrtd(dresult0, dvalue0);
+ __ vsqrtd(dresult1, dvalue1);
+ break;
+ default: UNREACHABLE();
+ }
+}
+
+
+LocationSummary* Float64x2OneArgInstr::MakeLocationSummary(bool opt) const {
+ const intptr_t kNumInputs = 2;
+ const intptr_t kNumTemps = 0;
+ LocationSummary* summary =
+ new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall);
+ summary->set_in(0, Location::RequiresFpuRegister());
+ summary->set_in(1, Location::RequiresFpuRegister());
+ summary->set_out(Location::SameAsFirstInput());
+ return summary;
+}
+
+
+void Float64x2OneArgInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+ QRegister left = locs()->in(0).fpu_reg();
+ DRegister left0 = EvenDRegisterOf(left);
+ DRegister left1 = OddDRegisterOf(left);
+ QRegister right = locs()->in(1).fpu_reg();
+ DRegister right0 = EvenDRegisterOf(right);
+ DRegister right1 = OddDRegisterOf(right);
+ QRegister out = locs()->out().fpu_reg();
+ ASSERT(left == out);
+
+ switch (op_kind()) {
+ case MethodRecognizer::kFloat64x2Scale:
+ __ vmuld(left0, left0, right0);
+ __ vmuld(left1, left1, right0);
+ break;
+ case MethodRecognizer::kFloat64x2WithX:
+ __ vmovd(left0, right0);
+ break;
+ case MethodRecognizer::kFloat64x2WithY:
+ __ vmovd(left1, right0);
+ break;
+ case MethodRecognizer::kFloat64x2Min: {
+ // X lane.
+ Label l0;
+ __ vcmpd(left0, right0);
+ __ vmstat();
+ __ b(&l0, LT);
+ __ vmovd(left0, right0);
+ __ Bind(&l0);
+ // Y lane.
+ Label l1;
+ __ vcmpd(left1, right1);
+ __ vmstat();
+ __ b(&l1, LT);
+ __ vmovd(left1, right1);
+ __ Bind(&l1);
+ break;
+ }
+ case MethodRecognizer::kFloat64x2Max: {
+ // X lane.
+ Label g0;
+ __ vcmpd(left0, right0);
+ __ vmstat();
+ __ b(&g0, GT);
+ __ vmovd(left0, right0);
+ __ Bind(&g0);
+ // Y lane.
+ Label g1;
+ __ vcmpd(left1, right1);
+ __ vmstat();
+ __ b(&g1, GT);
+ __ vmovd(left1, right1);
+ __ Bind(&g1);
+ break;
+ }
+ default: UNREACHABLE();
+ }
+}
+
+
LocationSummary* Int32x4BoolConstructorInstr::MakeLocationSummary(
bool opt) const {
const intptr_t kNumInputs = 4;
diff --git a/runtime/vm/intermediate_language_ia32.cc b/runtime/vm/intermediate_language_ia32.cc
index aca4b09..1649a8c 100644
--- a/runtime/vm/intermediate_language_ia32.cc
+++ b/runtime/vm/intermediate_language_ia32.cc
@@ -1677,6 +1677,9 @@
case kFloat32x4Cid:
cls = &compiler->float32x4_class();
break;
+ case kFloat64x2Cid:
+ cls = &compiler->float64x2_class();
+ break;
default:
UNREACHABLE();
}
@@ -1707,6 +1710,10 @@
__ Comment("UnboxedFloat32x4StoreInstanceFieldInstr");
__ movups(FieldAddress(temp, Float32x4::value_offset()), value);
break;
+ case kFloat64x2Cid:
+ __ Comment("UnboxedFloat64x2StoreInstanceFieldInstr");
+ __ movups(FieldAddress(temp, Float64x2::value_offset()), value);
+ break;
default:
UNREACHABLE();
}
@@ -1722,6 +1729,7 @@
Label store_pointer;
Label store_double;
Label store_float32x4;
+ Label store_float64x2;
__ LoadObject(temp, Field::ZoneHandle(field().raw()));
@@ -1741,6 +1749,10 @@
Immediate(kFloat32x4Cid));
__ j(EQUAL, &store_float32x4);
+ __ cmpl(FieldAddress(temp, Field::guarded_cid_offset()),
+ Immediate(kFloat64x2Cid));
+ __ j(EQUAL, &store_float64x2);
+
// Fall through.
__ jmp(&store_pointer);
@@ -1811,6 +1823,38 @@
__ movups(FieldAddress(temp, Float32x4::value_offset()), fpu_temp);
__ jmp(&skip_store);
}
+
+ {
+ __ Bind(&store_float64x2);
+ Label copy_float64x2;
+
+ StoreInstanceFieldSlowPath* slow_path =
+ new StoreInstanceFieldSlowPath(this, compiler->float64x2_class());
+ compiler->AddSlowPathCode(slow_path);
+
+ const Immediate& raw_null =
+ Immediate(reinterpret_cast<intptr_t>(Object::null()));
+ __ movl(temp, FieldAddress(instance_reg, offset_in_bytes_));
+ __ cmpl(temp, raw_null);
+ __ j(NOT_EQUAL, ©_float64x2);
+
+ __ TryAllocate(compiler->float64x2_class(),
+ slow_path->entry_label(),
+ Assembler::kFarJump,
+ temp,
+ temp2);
+ __ Bind(slow_path->exit_label());
+ __ movl(temp2, temp);
+ __ StoreIntoObject(instance_reg,
+ FieldAddress(instance_reg, offset_in_bytes_),
+ temp2);
+
+ __ Bind(©_float64x2);
+ __ movups(fpu_temp, FieldAddress(value_reg, Float64x2::value_offset()));
+ __ movups(FieldAddress(temp, Float64x2::value_offset()), fpu_temp);
+ __ jmp(&skip_store);
+ }
+
__ Bind(&store_pointer);
}
@@ -2072,6 +2116,10 @@
__ Comment("UnboxedFloat32x4LoadFieldInstr");
__ movups(result, FieldAddress(temp, Float32x4::value_offset()));
break;
+ case kFloat64x2Cid:
+ __ Comment("UnboxedFloat64x2LoadFieldInstr");
+ __ movups(result, FieldAddress(temp, Float64x2::value_offset()));
+ break;
default:
UNREACHABLE();
}
@@ -2088,6 +2136,7 @@
Label load_pointer;
Label load_double;
Label load_float32x4;
+ Label load_float64x2;
__ LoadObject(result, Field::ZoneHandle(field()->raw()));
@@ -2103,6 +2152,9 @@
__ cmpl(field_cid_operand, Immediate(kFloat32x4Cid));
__ j(EQUAL, &load_float32x4);
+ __ cmpl(field_cid_operand, Immediate(kFloat64x2Cid));
+ __ j(EQUAL, &load_float64x2);
+
// Fall through.
__ jmp(&load_pointer);
@@ -2145,6 +2197,24 @@
__ jmp(&done);
}
+ {
+ __ Bind(&load_float64x2);
+
+ BoxFloat64x2SlowPath* slow_path = new BoxFloat64x2SlowPath(this);
+ compiler->AddSlowPathCode(slow_path);
+
+ __ TryAllocate(compiler->float64x2_class(),
+ slow_path->entry_label(),
+ Assembler::kFarJump,
+ result,
+ temp);
+ __ Bind(slow_path->exit_label());
+ __ movl(temp, FieldAddress(instance_reg, offset_in_bytes()));
+ __ movups(value, FieldAddress(temp, Float64x2::value_offset()));
+ __ movups(FieldAddress(result, Float64x2::value_offset()), value);
+ __ jmp(&done);
+ }
+
__ Bind(&load_pointer);
}
__ movl(result, FieldAddress(instance_reg, offset_in_bytes()));
@@ -3404,6 +3474,34 @@
}
+LocationSummary* BinaryFloat64x2OpInstr::MakeLocationSummary(bool opt) const {
+ const intptr_t kNumInputs = 2;
+ const intptr_t kNumTemps = 0;
+ LocationSummary* summary =
+ new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall);
+ summary->set_in(0, Location::RequiresFpuRegister());
+ summary->set_in(1, Location::RequiresFpuRegister());
+ summary->set_out(Location::SameAsFirstInput());
+ return summary;
+}
+
+
+void BinaryFloat64x2OpInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+ XmmRegister left = locs()->in(0).fpu_reg();
+ XmmRegister right = locs()->in(1).fpu_reg();
+
+ ASSERT(locs()->out().fpu_reg() == left);
+
+ switch (op_kind()) {
+ case Token::kADD: __ addpd(left, right); break;
+ case Token::kSUB: __ subpd(left, right); break;
+ case Token::kMUL: __ mulpd(left, right); break;
+ case Token::kDIV: __ divpd(left, right); break;
+ default: UNREACHABLE();
+ }
+}
+
+
LocationSummary* Simd32x4ShuffleInstr::MakeLocationSummary(bool opt) const {
const intptr_t kNumInputs = 1;
const intptr_t kNumTemps = 0;
@@ -3422,7 +3520,7 @@
switch (op_kind()) {
case MethodRecognizer::kFloat32x4ShuffleX:
- __ shufps(value, value, Immediate(0x00));
+ // Shuffle not necessary.
__ cvtss2sd(value, value);
break;
case MethodRecognizer::kFloat32x4ShuffleY:
@@ -3835,6 +3933,224 @@
}
+LocationSummary* Simd64x2ShuffleInstr::MakeLocationSummary(bool opt) const {
+ const intptr_t kNumInputs = 1;
+ const intptr_t kNumTemps = 0;
+ LocationSummary* summary =
+ new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall);
+ summary->set_in(0, Location::RequiresFpuRegister());
+ summary->set_out(Location::SameAsFirstInput());
+ return summary;
+}
+
+
+void Simd64x2ShuffleInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+ XmmRegister value = locs()->in(0).fpu_reg();
+
+ ASSERT(locs()->out().fpu_reg() == value);
+
+ switch (op_kind()) {
+ case MethodRecognizer::kFloat64x2GetX:
+ // nop.
+ break;
+ case MethodRecognizer::kFloat64x2GetY:
+ __ shufpd(value, value, Immediate(0x33));
+ break;
+ default: UNREACHABLE();
+ }
+}
+
+
+
+LocationSummary* Float64x2ZeroInstr::MakeLocationSummary(bool opt) const {
+ const intptr_t kNumInputs = 0;
+ const intptr_t kNumTemps = 0;
+ LocationSummary* summary =
+ new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall);
+ summary->set_out(Location::RequiresFpuRegister());
+ return summary;
+}
+
+
+void Float64x2ZeroInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+ XmmRegister value = locs()->out().fpu_reg();
+ __ xorpd(value, value);
+}
+
+
+LocationSummary* Float64x2SplatInstr::MakeLocationSummary(bool opt) const {
+ const intptr_t kNumInputs = 1;
+ const intptr_t kNumTemps = 0;
+ LocationSummary* summary =
+ new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall);
+ summary->set_in(0, Location::RequiresFpuRegister());
+ summary->set_out(Location::SameAsFirstInput());
+ return summary;
+}
+
+
+void Float64x2SplatInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+ XmmRegister value = locs()->out().fpu_reg();
+ __ shufpd(value, value, Immediate(0x0));
+}
+
+
+LocationSummary* Float64x2ConstructorInstr::MakeLocationSummary(
+ bool opt) const {
+ const intptr_t kNumInputs = 2;
+ const intptr_t kNumTemps = 0;
+ LocationSummary* summary =
+ new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall);
+ summary->set_in(0, Location::RequiresFpuRegister());
+ summary->set_in(1, Location::RequiresFpuRegister());
+ summary->set_out(Location::SameAsFirstInput());
+ return summary;
+}
+
+
+void Float64x2ConstructorInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+ XmmRegister v0 = locs()->in(0).fpu_reg();
+ XmmRegister v1 = locs()->in(1).fpu_reg();
+ ASSERT(v0 == locs()->out().fpu_reg());
+ __ subl(ESP, Immediate(16));
+ __ movsd(Address(ESP, 0), v0);
+ __ movsd(Address(ESP, 8), v1);
+ __ movups(v0, Address(ESP, 0));
+ __ addl(ESP, Immediate(16));
+}
+
+
+LocationSummary* Float64x2ToFloat32x4Instr::MakeLocationSummary(
+ bool opt) const {
+ const intptr_t kNumInputs = 1;
+ const intptr_t kNumTemps = 0;
+ LocationSummary* summary =
+ new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall);
+ summary->set_in(0, Location::RequiresFpuRegister());
+ summary->set_out(Location::SameAsFirstInput());
+ return summary;
+}
+
+
+void Float64x2ToFloat32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) {
+ XmmRegister value = locs()->out().fpu_reg();
+ __ cvtpd2ps(value, value);
+}
+
+
+LocationSummary* Float32x4ToFloat64x2Instr::MakeLocationSummary(
+ bool opt) const {
+ const intptr_t kNumInputs = 1;
+ const intptr_t kNumTemps = 0;
+ LocationSummary* summary =
+ new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall);
+ summary->set_in(0, Location::RequiresFpuRegister());
+ summary->set_out(Location::SameAsFirstInput());
+ return summary;
+}
+
+
+void Float32x4ToFloat64x2Instr::EmitNativeCode(FlowGraphCompiler* compiler) {
+ XmmRegister value = locs()->out().fpu_reg();
+ __ cvtps2pd(value, value);
+}
+
+
+LocationSummary* Float64x2ZeroArgInstr::MakeLocationSummary(bool opt) const {
+ const intptr_t kNumInputs = 1;
+ const intptr_t kNumTemps = 0;
+ LocationSummary* summary =
+ new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall);
+ summary->set_in(0, Location::RequiresFpuRegister());
+ if (representation() == kTagged) {
+ ASSERT(op_kind() == MethodRecognizer::kFloat64x2GetSignMask);
+ summary->set_out(Location::RequiresRegister());
+ } else {
+ ASSERT(representation() == kUnboxedFloat64x2);
+ summary->set_out(Location::SameAsFirstInput());
+ }
+ return summary;
+}
+
+
+void Float64x2ZeroArgInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+ XmmRegister left = locs()->in(0).fpu_reg();
+
+ ASSERT((op_kind() == MethodRecognizer::kFloat64x2GetSignMask) ||
+ (locs()->out().fpu_reg() == left));
+
+ switch (op_kind()) {
+ case MethodRecognizer::kFloat64x2Negate:
+ __ negatepd(left);
+ break;
+ case MethodRecognizer::kFloat64x2Abs:
+ __ abspd(left);
+ break;
+ case MethodRecognizer::kFloat64x2Sqrt:
+ __ sqrtpd(left);
+ break;
+ case MethodRecognizer::kFloat64x2GetSignMask:
+ __ movmskpd(locs()->out().reg(), left);
+ __ SmiTag(locs()->out().reg());
+ break;
+ default: UNREACHABLE();
+ }
+}
+
+
+LocationSummary* Float64x2OneArgInstr::MakeLocationSummary(bool opt) const {
+ const intptr_t kNumInputs = 2;
+ const intptr_t kNumTemps = 0;
+ LocationSummary* summary =
+ new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall);
+ summary->set_in(0, Location::RequiresFpuRegister());
+ summary->set_in(1, Location::RequiresFpuRegister());
+ summary->set_out(Location::SameAsFirstInput());
+ return summary;
+}
+
+
+void Float64x2OneArgInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+ XmmRegister left = locs()->in(0).fpu_reg();
+ XmmRegister right = locs()->in(1).fpu_reg();
+ ASSERT((locs()->out().fpu_reg() == left));
+
+ switch (op_kind()) {
+ case MethodRecognizer::kFloat64x2Scale:
+ __ shufpd(right, right, Immediate(0x00));
+ __ mulpd(left, right);
+ break;
+ case MethodRecognizer::kFloat64x2WithX:
+ __ subl(ESP, Immediate(16));
+ // Move value to stack.
+ __ movups(Address(ESP, 0), left);
+ // Write over X value.
+ __ movsd(Address(ESP, 0), right);
+ // Move updated value into output register.
+ __ movups(left, Address(ESP, 0));
+ __ addl(ESP, Immediate(16));
+ break;
+ case MethodRecognizer::kFloat64x2WithY:
+ __ subl(ESP, Immediate(16));
+ // Move value to stack.
+ __ movups(Address(ESP, 0), left);
+ // Write over Y value.
+ __ movsd(Address(ESP, 8), right);
+ // Move updated value into output register.
+ __ movups(left, Address(ESP, 0));
+ __ addl(ESP, Immediate(16));
+ break;
+ case MethodRecognizer::kFloat64x2Min:
+ __ minpd(left, right);
+ break;
+ case MethodRecognizer::kFloat64x2Max:
+ __ maxpd(left, right);
+ break;
+ default: UNREACHABLE();
+ }
+}
+
+
LocationSummary* Int32x4BoolConstructorInstr::MakeLocationSummary(
bool opt) const {
const intptr_t kNumInputs = 4;
diff --git a/runtime/vm/intermediate_language_mips.cc b/runtime/vm/intermediate_language_mips.cc
index 5682843..4a063cd 100644
--- a/runtime/vm/intermediate_language_mips.cc
+++ b/runtime/vm/intermediate_language_mips.cc
@@ -3039,6 +3039,17 @@
}
+LocationSummary* BinaryFloat64x2OpInstr::MakeLocationSummary(bool opt) const {
+ UNIMPLEMENTED();
+ return NULL;
+}
+
+
+void BinaryFloat64x2OpInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+ UNIMPLEMENTED();
+}
+
+
LocationSummary* Simd32x4ShuffleInstr::MakeLocationSummary(bool opt) const {
UNIMPLEMENTED();
return NULL;
@@ -3184,6 +3195,97 @@
}
+LocationSummary* Simd64x2ShuffleInstr::MakeLocationSummary(bool opt) const {
+ UNIMPLEMENTED();
+ return NULL;
+}
+
+
+void Simd64x2ShuffleInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+ UNIMPLEMENTED();
+}
+
+
+LocationSummary* Float64x2ZeroInstr::MakeLocationSummary(bool opt) const {
+ UNIMPLEMENTED();
+ return NULL;
+}
+
+
+void Float64x2ZeroInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+ UNIMPLEMENTED();
+}
+
+
+LocationSummary* Float64x2SplatInstr::MakeLocationSummary(bool opt) const {
+ UNIMPLEMENTED();
+ return NULL;
+}
+
+
+void Float64x2SplatInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+ UNIMPLEMENTED();
+}
+
+
+LocationSummary* Float64x2ConstructorInstr::MakeLocationSummary(
+ bool opt) const {
+ UNIMPLEMENTED();
+ return NULL;
+}
+
+
+void Float64x2ConstructorInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+ UNIMPLEMENTED();
+}
+
+
+LocationSummary* Float64x2ToFloat32x4Instr::MakeLocationSummary(
+ bool opt) const {
+ UNIMPLEMENTED();
+ return NULL;
+}
+
+
+void Float64x2ToFloat32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) {
+ UNIMPLEMENTED();
+}
+
+
+LocationSummary* Float32x4ToFloat64x2Instr::MakeLocationSummary(
+ bool opt) const {
+ UNIMPLEMENTED();
+ return NULL;
+}
+
+
+void Float32x4ToFloat64x2Instr::EmitNativeCode(FlowGraphCompiler* compiler) {
+ UNIMPLEMENTED();
+}
+
+
+LocationSummary* Float64x2ZeroArgInstr::MakeLocationSummary(bool opt) const {
+ UNIMPLEMENTED();
+ return NULL;
+}
+
+
+void Float64x2ZeroArgInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+ UNIMPLEMENTED();
+}
+
+
+LocationSummary* Float64x2OneArgInstr::MakeLocationSummary(bool opt) const {
+ UNIMPLEMENTED();
+ return NULL;
+}
+
+
+void Float64x2OneArgInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+ UNIMPLEMENTED();
+}
+
+
LocationSummary* Int32x4BoolConstructorInstr::MakeLocationSummary(
bool opt) const {
UNIMPLEMENTED();
diff --git a/runtime/vm/intermediate_language_x64.cc b/runtime/vm/intermediate_language_x64.cc
index 2fb6ded..20e8c49 100644
--- a/runtime/vm/intermediate_language_x64.cc
+++ b/runtime/vm/intermediate_language_x64.cc
@@ -1578,6 +1578,9 @@
case kFloat32x4Cid:
cls = &compiler->float32x4_class();
break;
+ case kFloat64x2Cid:
+ cls = &compiler->float64x2_class();
+ break;
default:
UNREACHABLE();
}
@@ -1608,6 +1611,10 @@
__ Comment("UnboxedFloat32x4StoreInstanceFieldInstr");
__ movups(FieldAddress(temp, Float32x4::value_offset()), value);
break;
+ case kFloat64x2Cid:
+ __ Comment("UnboxedFloat64x2StoreInstanceFieldInstr");
+ __ movups(FieldAddress(temp, Float64x2::value_offset()), value);
+ break;
default:
UNREACHABLE();
}
@@ -1623,6 +1630,7 @@
Label store_pointer;
Label store_double;
Label store_float32x4;
+ Label store_float64x2;
__ LoadObject(temp, Field::ZoneHandle(field().raw()), PP);
@@ -1642,6 +1650,10 @@
Immediate(kFloat32x4Cid));
__ j(EQUAL, &store_float32x4);
+ __ cmpl(FieldAddress(temp, Field::guarded_cid_offset()),
+ Immediate(kFloat64x2Cid));
+ __ j(EQUAL, &store_float64x2);
+
// Fall through.
__ jmp(&store_pointer);
@@ -1706,6 +1718,35 @@
__ jmp(&skip_store);
}
+ {
+ __ Bind(&store_float64x2);
+ Label copy_float64x2;
+
+ StoreInstanceFieldSlowPath* slow_path =
+ new StoreInstanceFieldSlowPath(this, compiler->float64x2_class());
+ compiler->AddSlowPathCode(slow_path);
+
+ __ movq(temp, FieldAddress(instance_reg, offset_in_bytes_));
+ __ CompareObject(temp, Object::null_object(), PP);
+ __ j(NOT_EQUAL, ©_float64x2);
+
+ __ TryAllocate(compiler->float64x2_class(),
+ slow_path->entry_label(),
+ Assembler::kFarJump,
+ temp,
+ temp2);
+ __ Bind(slow_path->exit_label());
+ __ movq(temp2, temp);
+ __ StoreIntoObject(instance_reg,
+ FieldAddress(instance_reg, offset_in_bytes_),
+ temp2);
+
+ __ Bind(©_float64x2);
+ __ movups(fpu_temp, FieldAddress(value_reg, Float64x2::value_offset()));
+ __ movups(FieldAddress(temp, Float64x2::value_offset()), fpu_temp);
+ __ jmp(&skip_store);
+ }
+
__ Bind(&store_pointer);
}
@@ -1963,6 +2004,10 @@
__ Comment("UnboxedFloat32x4LoadFieldInstr");
__ movups(result, FieldAddress(temp, Float32x4::value_offset()));
break;
+ case kFloat64x2Cid:
+ __ Comment("UnboxedFloat64x2LoadFieldInstr");
+ __ movups(result, FieldAddress(temp, Float64x2::value_offset()));
+ break;
default:
UNREACHABLE();
}
@@ -1978,6 +2023,7 @@
Label load_pointer;
Label load_double;
Label load_float32x4;
+ Label load_float64x2;
__ LoadObject(result, Field::ZoneHandle(field()->raw()), PP);
@@ -1993,6 +2039,10 @@
Immediate(kFloat32x4Cid));
__ j(EQUAL, &load_float32x4);
+ __ cmpq(FieldAddress(result, Field::guarded_cid_offset()),
+ Immediate(kFloat64x2Cid));
+ __ j(EQUAL, &load_float64x2);
+
// Fall through.
__ jmp(&load_pointer);
@@ -2032,6 +2082,23 @@
__ movups(FieldAddress(result, Float32x4::value_offset()), value);
__ jmp(&done);
}
+ {
+ __ Bind(&load_float64x2);
+
+ BoxFloat64x2SlowPath* slow_path = new BoxFloat64x2SlowPath(this);
+ compiler->AddSlowPathCode(slow_path);
+
+ __ TryAllocate(compiler->float64x2_class(),
+ slow_path->entry_label(),
+ Assembler::kFarJump,
+ result,
+ temp);
+ __ Bind(slow_path->exit_label());
+ __ movq(temp, FieldAddress(instance_reg, offset_in_bytes()));
+ __ movups(value, FieldAddress(temp, Float64x2::value_offset()));
+ __ movups(FieldAddress(result, Float64x2::value_offset()), value);
+ __ jmp(&done);
+ }
__ Bind(&load_pointer);
}
@@ -3270,6 +3337,34 @@
}
+LocationSummary* BinaryFloat64x2OpInstr::MakeLocationSummary(bool opt) const {
+ const intptr_t kNumInputs = 2;
+ const intptr_t kNumTemps = 0;
+ LocationSummary* summary =
+ new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall);
+ summary->set_in(0, Location::RequiresFpuRegister());
+ summary->set_in(1, Location::RequiresFpuRegister());
+ summary->set_out(Location::SameAsFirstInput());
+ return summary;
+}
+
+
+void BinaryFloat64x2OpInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+ XmmRegister left = locs()->in(0).fpu_reg();
+ XmmRegister right = locs()->in(1).fpu_reg();
+
+ ASSERT(locs()->out().fpu_reg() == left);
+
+ switch (op_kind()) {
+ case Token::kADD: __ addpd(left, right); break;
+ case Token::kSUB: __ subpd(left, right); break;
+ case Token::kMUL: __ mulpd(left, right); break;
+ case Token::kDIV: __ divpd(left, right); break;
+ default: UNREACHABLE();
+ }
+}
+
+
LocationSummary* Simd32x4ShuffleInstr::MakeLocationSummary(bool opt) const {
const intptr_t kNumInputs = 1;
const intptr_t kNumTemps = 0;
@@ -3288,7 +3383,7 @@
switch (op_kind()) {
case MethodRecognizer::kFloat32x4ShuffleX:
- __ shufps(value, value, Immediate(0x00));
+ // Shuffle not necessary.
__ cvtss2sd(value, value);
break;
case MethodRecognizer::kFloat32x4ShuffleY:
@@ -3701,6 +3796,222 @@
}
+LocationSummary* Simd64x2ShuffleInstr::MakeLocationSummary(bool opt) const {
+ const intptr_t kNumInputs = 1;
+ const intptr_t kNumTemps = 0;
+ LocationSummary* summary =
+ new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall);
+ summary->set_in(0, Location::RequiresFpuRegister());
+ summary->set_out(Location::SameAsFirstInput());
+ return summary;
+}
+
+
+void Simd64x2ShuffleInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+ XmmRegister value = locs()->in(0).fpu_reg();
+
+ ASSERT(locs()->out().fpu_reg() == value);
+ switch (op_kind()) {
+ case MethodRecognizer::kFloat64x2GetX:
+ // nop.
+ break;
+ case MethodRecognizer::kFloat64x2GetY:
+ __ shufpd(value, value, Immediate(0x33));
+ break;
+ default: UNREACHABLE();
+ }
+}
+
+
+LocationSummary* Float64x2ZeroInstr::MakeLocationSummary(bool opt) const {
+ const intptr_t kNumInputs = 0;
+ const intptr_t kNumTemps = 0;
+ LocationSummary* summary =
+ new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall);
+ summary->set_out(Location::RequiresFpuRegister());
+ return summary;
+}
+
+
+void Float64x2ZeroInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+ XmmRegister value = locs()->out().fpu_reg();
+ __ xorpd(value, value);
+}
+
+
+LocationSummary* Float64x2SplatInstr::MakeLocationSummary(bool opt) const {
+ const intptr_t kNumInputs = 1;
+ const intptr_t kNumTemps = 0;
+ LocationSummary* summary =
+ new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall);
+ summary->set_in(0, Location::RequiresFpuRegister());
+ summary->set_out(Location::SameAsFirstInput());
+ return summary;
+}
+
+
+void Float64x2SplatInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+ XmmRegister value = locs()->out().fpu_reg();
+ __ shufpd(value, value, Immediate(0x0));
+}
+
+
+LocationSummary* Float64x2ConstructorInstr::MakeLocationSummary(
+ bool opt) const {
+ const intptr_t kNumInputs = 2;
+ const intptr_t kNumTemps = 0;
+ LocationSummary* summary =
+ new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall);
+ summary->set_in(0, Location::RequiresFpuRegister());
+ summary->set_in(1, Location::RequiresFpuRegister());
+ summary->set_out(Location::SameAsFirstInput());
+ return summary;
+}
+
+
+void Float64x2ConstructorInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+ XmmRegister v0 = locs()->in(0).fpu_reg();
+ XmmRegister v1 = locs()->in(1).fpu_reg();
+ ASSERT(v0 == locs()->out().fpu_reg());
+ __ AddImmediate(RSP, Immediate(-16), PP);
+ __ movsd(Address(RSP, 0), v0);
+ __ movsd(Address(RSP, 8), v1);
+ __ movups(v0, Address(RSP, 0));
+ __ AddImmediate(RSP, Immediate(16), PP);
+}
+
+
+LocationSummary* Float64x2ToFloat32x4Instr::MakeLocationSummary(
+ bool opt) const {
+ const intptr_t kNumInputs = 1;
+ const intptr_t kNumTemps = 0;
+ LocationSummary* summary =
+ new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall);
+ summary->set_in(0, Location::RequiresFpuRegister());
+ summary->set_out(Location::SameAsFirstInput());
+ return summary;
+}
+
+
+void Float64x2ToFloat32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) {
+ XmmRegister value = locs()->out().fpu_reg();
+ __ cvtpd2ps(value, value);
+}
+
+
+LocationSummary* Float32x4ToFloat64x2Instr::MakeLocationSummary(
+ bool opt) const {
+ const intptr_t kNumInputs = 1;
+ const intptr_t kNumTemps = 0;
+ LocationSummary* summary =
+ new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall);
+ summary->set_in(0, Location::RequiresFpuRegister());
+ summary->set_out(Location::SameAsFirstInput());
+ return summary;
+}
+
+
+void Float32x4ToFloat64x2Instr::EmitNativeCode(FlowGraphCompiler* compiler) {
+ XmmRegister value = locs()->out().fpu_reg();
+ __ cvtps2pd(value, value);
+}
+
+
+LocationSummary* Float64x2ZeroArgInstr::MakeLocationSummary(bool opt) const {
+ const intptr_t kNumInputs = 1;
+ const intptr_t kNumTemps = 0;
+ LocationSummary* summary =
+ new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall);
+ summary->set_in(0, Location::RequiresFpuRegister());
+ if (representation() == kTagged) {
+ ASSERT(op_kind() == MethodRecognizer::kFloat64x2GetSignMask);
+ summary->set_out(Location::RequiresRegister());
+ } else {
+ ASSERT(representation() == kUnboxedFloat64x2);
+ summary->set_out(Location::SameAsFirstInput());
+ }
+ return summary;
+}
+
+
+void Float64x2ZeroArgInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+ XmmRegister left = locs()->in(0).fpu_reg();
+
+ ASSERT((op_kind() == MethodRecognizer::kFloat64x2GetSignMask) ||
+ (locs()->out().fpu_reg() == left));
+
+ switch (op_kind()) {
+ case MethodRecognizer::kFloat64x2Negate:
+ __ negatepd(left);
+ break;
+ case MethodRecognizer::kFloat64x2Abs:
+ __ abspd(left);
+ break;
+ case MethodRecognizer::kFloat64x2Sqrt:
+ __ sqrtpd(left);
+ break;
+ case MethodRecognizer::kFloat64x2GetSignMask:
+ __ movmskpd(locs()->out().reg(), left);
+ __ SmiTag(locs()->out().reg());
+ break;
+ default: UNREACHABLE();
+ }
+}
+
+
+LocationSummary* Float64x2OneArgInstr::MakeLocationSummary(bool opt) const {
+ const intptr_t kNumInputs = 2;
+ const intptr_t kNumTemps = 0;
+ LocationSummary* summary =
+ new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall);
+ summary->set_in(0, Location::RequiresFpuRegister());
+ summary->set_in(1, Location::RequiresFpuRegister());
+ summary->set_out(Location::SameAsFirstInput());
+ return summary;
+}
+
+
+void Float64x2OneArgInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+ XmmRegister left = locs()->in(0).fpu_reg();
+ XmmRegister right = locs()->in(1).fpu_reg();
+ ASSERT((locs()->out().fpu_reg() == left));
+
+ switch (op_kind()) {
+ case MethodRecognizer::kFloat64x2Scale:
+ __ shufpd(right, right, Immediate(0x00));
+ __ mulpd(left, right);
+ break;
+ case MethodRecognizer::kFloat64x2WithX:
+ __ subq(RSP, Immediate(16));
+ // Move value to stack.
+ __ movups(Address(RSP, 0), left);
+ // Write over X value.
+ __ movsd(Address(RSP, 0), right);
+ // Move updated value into output register.
+ __ movups(left, Address(RSP, 0));
+ __ addq(RSP, Immediate(16));
+ break;
+ case MethodRecognizer::kFloat64x2WithY:
+ __ subq(RSP, Immediate(16));
+ // Move value to stack.
+ __ movups(Address(RSP, 0), left);
+ // Write over Y value.
+ __ movsd(Address(RSP, 8), right);
+ // Move updated value into output register.
+ __ movups(left, Address(RSP, 0));
+ __ addq(RSP, Immediate(16));
+ break;
+ case MethodRecognizer::kFloat64x2Min:
+ __ minpd(left, right);
+ break;
+ case MethodRecognizer::kFloat64x2Max:
+ __ maxpd(left, right);
+ break;
+ default: UNREACHABLE();
+ }
+}
+
+
LocationSummary* Int32x4BoolConstructorInstr::MakeLocationSummary(
bool opt) const {
const intptr_t kNumInputs = 4;
diff --git a/runtime/vm/intrinsifier.cc b/runtime/vm/intrinsifier.cc
index a405284..993fe06 100644
--- a/runtime/vm/intrinsifier.cc
+++ b/runtime/vm/intrinsifier.cc
@@ -109,6 +109,9 @@
cls = lib.LookupClassAllowPrivate(str); \
ASSERT(!cls.IsNull()); \
error = cls.EnsureIsFinalized(isolate); \
+ if (!error.IsNull()) { \
+ OS::PrintErr("%s\n", error.ToErrorCString()); \
+ } \
ASSERT(error.IsNull()); \
if (#function_name[0] == '.') { \
str = String::New(#class_name#function_name); \
diff --git a/runtime/vm/isolate.cc b/runtime/vm/isolate.cc
index d2b863b..b5de9a3 100644
--- a/runtime/vm/isolate.cc
+++ b/runtime/vm/isolate.cc
@@ -116,7 +116,7 @@
HandleScope handle_scope(isolate_);
// TODO(turnidge): Rework collection total dart execution. This can
// overcount when other things (gc, compilation) are active.
- TIMERSCOPE(time_dart_execution);
+ TIMERSCOPE(isolate_, time_dart_execution);
// If the message is in band we lookup the receive port to dispatch to. If
// the receive port is closed, we drop the message without deserializing it.
@@ -281,8 +281,14 @@
void BaseIsolate::AssertCurrent(BaseIsolate* isolate) {
ASSERT(isolate == Isolate::Current());
}
-#endif
+#endif // defined(DEBUG)
+#if defined(DEBUG)
+#define REUSABLE_HANDLE_SCOPE_INIT(object) \
+ reusable_##object##_handle_scope_active_(false),
+#else
+#define REUSABLE_HANDLE_SCOPE_INIT(object)
+#endif // defined(DEBUG)
#define REUSABLE_HANDLE_INITIALIZERS(object) \
object##_handle_(NULL),
@@ -316,8 +322,8 @@
message_handler_(NULL),
spawn_state_(NULL),
is_runnable_(false),
- gc_prologue_callbacks_(),
- gc_epilogue_callbacks_(),
+ gc_prologue_callback_(NULL),
+ gc_epilogue_callback_(NULL),
defer_finalization_count_(0),
deopt_context_(NULL),
stacktrace_(NULL),
@@ -328,8 +334,10 @@
thread_state_(NULL),
next_(NULL),
REUSABLE_HANDLE_LIST(REUSABLE_HANDLE_INITIALIZERS)
+ REUSABLE_HANDLE_LIST(REUSABLE_HANDLE_SCOPE_INIT)
reusable_handles_() {
}
+#undef REUSABLE_HANDLE_SCOPE_INIT
#undef REUSABLE_HANDLE_INITIALIZERS
@@ -405,8 +413,7 @@
// Setup the isolate specific resuable handles.
#define REUSABLE_HANDLE_ALLOCATION(object) \
- result->object##_handle_ = result->AllocateReusableHandle<object>(); \
-
+ result->object##_handle_ = result->AllocateReusableHandle<object>();
REUSABLE_HANDLE_LIST(REUSABLE_HANDLE_ALLOCATION)
#undef REUSABLE_HANDLE_ALLOCATION
@@ -734,7 +741,7 @@
void VisitHandle(uword addr, bool is_prologue_weak) {
FinalizablePersistentHandle* handle =
reinterpret_cast<FinalizablePersistentHandle*>(addr);
- FinalizablePersistentHandle::Finalize(isolate(), handle, is_prologue_weak);
+ handle->UpdateUnreachable(isolate(), is_prologue_weak);
}
private:
diff --git a/runtime/vm/isolate.h b/runtime/vm/isolate.h
index 77544cd..5410ab8 100644
--- a/runtime/vm/isolate.h
+++ b/runtime/vm/isolate.h
@@ -10,7 +10,6 @@
#include "platform/thread.h"
#include "vm/base_isolate.h"
#include "vm/class_table.h"
-#include "vm/gc_callbacks.h"
#include "vm/handles.h"
#include "vm/megamorphic_cache_table.h"
#include "vm/random.h"
@@ -27,6 +26,7 @@
class CodeIndexTable;
class Debugger;
class DeoptContext;
+class Error;
class Field;
class Function;
class HandleScope;
@@ -63,18 +63,6 @@
class ObjectIdRing;
-#define REUSABLE_HANDLE_LIST(V) \
- V(Object) \
- V(Array) \
- V(String) \
- V(Instance) \
- V(Function) \
- V(Field) \
- V(Class) \
- V(TypeParameter) \
- V(TypeArguments) \
-
-
class IsolateVisitor {
public:
IsolateVisitor() {}
@@ -86,6 +74,17 @@
DISALLOW_COPY_AND_ASSIGN(IsolateVisitor);
};
+#define REUSABLE_HANDLE_LIST(V) \
+ V(Array) \
+ V(Class) \
+ V(Error) \
+ V(Field) \
+ V(Function) \
+ V(Instance) \
+ V(Object) \
+ V(String) \
+ V(TypeArguments) \
+ V(TypeParameter) \
class Isolate : public BaseIsolate {
public:
@@ -306,12 +305,20 @@
Simulator* simulator() const { return simulator_; }
void set_simulator(Simulator* value) { simulator_ = value; }
- GcPrologueCallbacks& gc_prologue_callbacks() {
- return gc_prologue_callbacks_;
+ Dart_GcPrologueCallback gc_prologue_callback() const {
+ return gc_prologue_callback_;
}
- GcEpilogueCallbacks& gc_epilogue_callbacks() {
- return gc_epilogue_callbacks_;
+ void set_gc_prologue_callback(Dart_GcPrologueCallback callback) {
+ gc_prologue_callback_ = callback;
+ }
+
+ Dart_GcEpilogueCallback gc_epilogue_callback() const {
+ return gc_epilogue_callback_;
+ }
+
+ void set_gc_epilogue_callback(Dart_GcEpilogueCallback callback) {
+ gc_epilogue_callback_ = callback;
}
static void SetCreateCallback(Dart_IsolateCreateCallback cb) {
@@ -438,6 +445,25 @@
return thread_state_;
}
+#if defined(DEBUG)
+#define REUSABLE_HANDLE_SCOPE_ACCESSORS(object) \
+ void set_reusable_##object##_handle_scope_active(bool value) { \
+ reusable_##object##_handle_scope_active_ = value; \
+ } \
+ bool reusable_##object##_handle_scope_active() const { \
+ return reusable_##object##_handle_scope_active_; \
+ }
+ REUSABLE_HANDLE_LIST(REUSABLE_HANDLE_SCOPE_ACCESSORS)
+#undef REUSABLE_HANDLE_SCOPE_ACCESSORS
+#endif // defined(DEBUG)
+
+#define REUSABLE_HANDLE(object) \
+ object& object##Handle() const { \
+ return *object##_handle_; \
+ }
+ REUSABLE_HANDLE_LIST(REUSABLE_HANDLE)
+#undef REUSABLE_HANDLE
+
static void VisitIsolates(IsolateVisitor* visitor);
private:
@@ -480,8 +506,8 @@
MessageHandler* message_handler_;
IsolateSpawnState* spawn_state_;
bool is_runnable_;
- GcPrologueCallbacks gc_prologue_callbacks_;
- GcEpilogueCallbacks gc_epilogue_callbacks_;
+ Dart_GcPrologueCallback gc_prologue_callback_;
+ Dart_GcEpilogueCallback gc_epilogue_callback_;
intptr_t defer_finalization_count_;
DeoptContext* deopt_context_;
@@ -503,10 +529,17 @@
// Reusable handles support.
#define REUSABLE_HANDLE_FIELDS(object) \
- object* object##_handle_; \
-
+ object* object##_handle_;
REUSABLE_HANDLE_LIST(REUSABLE_HANDLE_FIELDS)
#undef REUSABLE_HANDLE_FIELDS
+
+#if defined(DEBUG)
+#define REUSABLE_HANDLE_SCOPE_VARIABLE(object) \
+ bool reusable_##object##_handle_scope_active_;
+ REUSABLE_HANDLE_LIST(REUSABLE_HANDLE_SCOPE_VARIABLE);
+#undef REUSABLE_HANDLE_SCOPE_VARIABLE
+#endif // defined(DEBUG)
+
VMHandles reusable_handles_;
static Dart_IsolateCreateCallback create_callback_;
@@ -528,8 +561,10 @@
static Monitor* isolates_list_monitor_;
static Isolate* isolates_list_head_;
- friend class ReusableHandleScope;
- friend class ReusableObjectHandleScope;
+#define REUSABLE_FRIEND_DECLARATION(name) \
+ friend class Reusable##name##HandleScope;
+REUSABLE_HANDLE_LIST(REUSABLE_FRIEND_DECLARATION)
+#undef REUSABLE_FRIEND_DECLARATION
DISALLOW_COPY_AND_ASSIGN(Isolate);
};
diff --git a/runtime/vm/json_stream.cc b/runtime/vm/json_stream.cc
index 9fffcae..5c4ec91 100644
--- a/runtime/vm/json_stream.cc
+++ b/runtime/vm/json_stream.cc
@@ -9,6 +9,7 @@
#include "vm/json_stream.h"
#include "vm/message.h"
#include "vm/object.h"
+#include "vm/unicode.h"
namespace dart {
@@ -80,8 +81,12 @@
Isolate* isolate = Isolate::Current();
ASSERT(isolate != NULL);
const char* isolate_name = isolate->name();
- OS::Print("Isolate %s processing service request /%s\n",
+ OS::Print("Isolate %s processing service request /%s",
isolate_name, command_);
+ for (intptr_t i = 1; i < num_arguments(); i++) {
+ OS::Print("/%s", GetArgument(i));
+ }
+ OS::Print("\n");
setup_time_micros_ = OS::GetCurrentTimeMicros();
}
}
@@ -114,8 +119,12 @@
Isolate* isolate = Isolate::Current();
ASSERT(isolate != NULL);
const char* isolate_name = isolate->name();
- OS::Print("Isolate %s processed service request /%s in %" Pd64" us.\n",
- isolate_name, command_, process_delta_micros);
+ OS::Print("Isolate %s processed service request /%s",
+ isolate_name, command_);
+ for (intptr_t i = 1; i < num_arguments(); i++) {
+ OS::Print("/%s", GetArgument(i));
+ }
+ OS::Print(" in %" Pd64" us.\n", process_delta_micros);
}
}
@@ -197,7 +206,7 @@
void JSONStream::PrintValue(const char* s) {
PrintCommaIfNeeded();
buffer_.AddChar('"');
- buffer_.AddEscapedString(s);
+ AddEscapedUTF8String(s);
buffer_.AddChar('"');
}
@@ -215,7 +224,7 @@
va_end(args);
ASSERT(len == len2);
buffer_.AddChar('"');
- buffer_.AddEscapedString(p);
+ AddEscapedUTF8String(p);
buffer_.AddChar('"');
free(p);
}
@@ -275,7 +284,7 @@
va_end(args);
ASSERT(len == len2);
buffer_.AddChar('"');
- buffer_.AddEscapedString(p);
+ AddEscapedUTF8String(p);
buffer_.AddChar('"');
free(p);
}
@@ -311,7 +320,7 @@
ASSERT(name != NULL);
PrintCommaIfNeeded();
buffer_.AddChar('"');
- buffer_.AddEscapedString(name);
+ AddEscapedUTF8String(name);
buffer_.AddChar('"');
buffer_.AddChar(':');
}
@@ -335,6 +344,23 @@
}
+void JSONStream::AddEscapedUTF8String(const char* s) {
+ intptr_t len = strlen(s);
+ const uint8_t* s8 = reinterpret_cast<const uint8_t*>(s);
+ intptr_t i = 0;
+ for (; i < len; ) {
+ // Extract next UTF8 character.
+ int32_t ch = 0;
+ int32_t ch_len = Utf8::Decode(&s8[i], len - i, &ch);
+ ASSERT(ch_len != 0);
+ buffer_.AddEscapedChar(ch);
+ // Move i forward.
+ i += ch_len;
+ }
+ ASSERT(i == len);
+}
+
+
JSONObject::JSONObject(const JSONArray* arr) : stream_(arr->stream_) {
stream_->OpenObject();
}
@@ -353,7 +379,7 @@
va_end(args);
ASSERT(len == len2);
stream_->buffer_.AddChar('"');
- stream_->buffer_.AddEscapedString(p);
+ stream_->AddEscapedUTF8String(p);
stream_->buffer_.AddChar('"');
free(p);
}
@@ -371,7 +397,7 @@
va_end(args);
ASSERT(len == len2);
stream_->buffer_.AddChar('"');
- stream_->buffer_.AddEscapedString(p);
+ stream_->AddEscapedUTF8String(p);
stream_->buffer_.AddChar('"');
free(p);
}
diff --git a/runtime/vm/json_stream.h b/runtime/vm/json_stream.h
index 81b3272..50a9e23 100644
--- a/runtime/vm/json_stream.h
+++ b/runtime/vm/json_stream.h
@@ -92,6 +92,8 @@
void PrintCommaIfNeeded();
bool NeedComma();
+ void AddEscapedUTF8String(const char* s);
+
intptr_t nesting_level() const { return open_objects_; }
intptr_t open_objects_;
diff --git a/runtime/vm/longjump.cc b/runtime/vm/longjump.cc
index ed6b82d..791fab1 100644
--- a/runtime/vm/longjump.cc
+++ b/runtime/vm/longjump.cc
@@ -44,6 +44,13 @@
Isolate* isolate = Isolate::Current();
+#if defined(DEBUG)
+#define CHECK_REUSABLE_HANDLE(name) \
+ ASSERT(!isolate->reusable_##name##_handle_scope_active());
+REUSABLE_HANDLE_LIST(CHECK_REUSABLE_HANDLE)
+#undef CHECK_REUSABLE_HANDLE
+#endif // defined(DEBUG)
+
// Remember the error in the sticky error of this isolate.
isolate->object_store()->set_sticky_error(error);
diff --git a/runtime/vm/object.cc b/runtime/vm/object.cc
index ba744e3..ec96fea 100644
--- a/runtime/vm/object.cc
+++ b/runtime/vm/object.cc
@@ -902,7 +902,7 @@
RawError* Object::Init(Isolate* isolate) {
- TIMERSCOPE(time_bootstrap);
+ TIMERSCOPE(isolate, time_bootstrap);
ObjectStore* object_store = isolate->object_store();
Class& cls = Class::Handle();
@@ -1336,7 +1336,7 @@
void Object::InitFromSnapshot(Isolate* isolate) {
- TIMERSCOPE(time_bootstrap);
+ TIMERSCOPE(isolate, time_bootstrap);
ObjectStore* object_store = isolate->object_store();
Class& cls = Class::Handle();
@@ -1808,11 +1808,12 @@
if (EnsureIsFinalized(isolate) != Error::null()) {
return -1;
}
- ReusableHandleScope reused_handles(isolate);
- Array& funcs = reused_handles.ArrayHandle();
+ REUSABLE_ARRAY_HANDLESCOPE(isolate);
+ REUSABLE_FUNCTION_HANDLESCOPE(isolate);
+ Array& funcs = isolate->ArrayHandle();
+ Function& function = isolate->FunctionHandle();
funcs ^= functions();
ASSERT(!funcs.IsNull());
- Function& function = reused_handles.FunctionHandle();
const intptr_t len = funcs.Length();
for (intptr_t i = 0; i < len; i++) {
function ^= funcs.At(i);
@@ -1860,12 +1861,13 @@
if (EnsureIsFinalized(isolate) != Error::null()) {
return -1;
}
- ReusableHandleScope reused_handles(isolate);
- Array& funcs = reused_handles.ArrayHandle();
+ REUSABLE_ARRAY_HANDLESCOPE(isolate);
+ REUSABLE_FUNCTION_HANDLESCOPE(isolate);
+ Array& funcs = isolate->ArrayHandle();
+ Function& function = isolate->FunctionHandle();
funcs ^= functions();
ASSERT(!funcs.IsNull());
- Function& function = reused_handles.FunctionHandle();
- Function& implicit_closure = Function::Handle();
+ Function& implicit_closure = Function::Handle(isolate);
const intptr_t len = funcs.Length();
for (intptr_t i = 0; i < len; i++) {
function ^= funcs.At(i);
@@ -1890,11 +1892,12 @@
if (EnsureIsFinalized(isolate) != Error::null()) {
return -1;
}
- ReusableHandleScope reused_handles(isolate);
- Array& funcs = reused_handles.ArrayHandle();
+ REUSABLE_ARRAY_HANDLESCOPE(isolate);
+ REUSABLE_OBJECT_HANDLESCOPE(isolate);
+ Array& funcs = isolate->ArrayHandle();
+ Object& object = isolate->ObjectHandle();
funcs ^= invocation_dispatcher_cache();
ASSERT(!funcs.IsNull());
- Object& object = reused_handles.ObjectHandle();
const intptr_t len = funcs.Length();
for (intptr_t i = 0; i < len; i++) {
object = funcs.At(i);
@@ -1902,7 +1905,7 @@
// are functions.
if (object.IsFunction()) {
if (Function::Cast(object).raw() == needle.raw()) {
- return i;
+ return i;
}
}
}
@@ -1913,10 +1916,12 @@
RawFunction* Class::InvocationDispatcherFunctionFromIndex(intptr_t idx) const {
- ReusableHandleScope reused_handles(Isolate::Current());
- Array& dispatcher_cache = reused_handles.ArrayHandle();
+ Isolate* isolate = Isolate::Current();
+ REUSABLE_ARRAY_HANDLESCOPE(isolate);
+ REUSABLE_OBJECT_HANDLESCOPE(isolate);
+ Array& dispatcher_cache = isolate->ArrayHandle();
+ Object& object = isolate->ObjectHandle();
dispatcher_cache ^= invocation_dispatcher_cache();
- Object& object = reused_handles.ObjectHandle();
object = dispatcher_cache.At(idx);
if (!object.IsFunction()) {
return Function::null();
@@ -1970,10 +1975,10 @@
return -1;
}
Isolate* isolate = Isolate::Current();
- ReusableHandleScope reused_handles(isolate);
const GrowableObjectArray& closures_array =
GrowableObjectArray::Handle(isolate, closures());
- Function& closure = reused_handles.FunctionHandle();
+ REUSABLE_FUNCTION_HANDLESCOPE(isolate);
+ Function& closure = isolate->FunctionHandle();
intptr_t num_closures = closures_array.Length();
for (intptr_t i = 0; i < num_closures; i++) {
closure ^= closures_array.At(i);
@@ -2027,8 +2032,8 @@
if (type_parameters() == TypeArguments::null()) {
return 0;
}
- ReusableHandleScope reused_handles(isolate);
- TypeArguments& type_params = reused_handles.TypeArgumentsHandle();
+ REUSABLE_TYPE_ARGUMENTS_HANDLESCOPE(isolate);
+ TypeArguments& type_params = isolate->TypeArgumentsHandle();
type_params = type_parameters();
return type_params.Length();
}
@@ -2168,11 +2173,14 @@
RawTypeParameter* Class::LookupTypeParameter(const String& type_name) const {
ASSERT(!type_name.IsNull());
Isolate* isolate = Isolate::Current();
- ReusableHandleScope reused_handles(isolate);
- TypeArguments& type_params = reused_handles.TypeArgumentsHandle();
+ REUSABLE_TYPE_ARGUMENTS_HANDLESCOPE(isolate);
+ REUSABLE_TYPE_PARAMETER_HANDLESCOPE(isolate);
+ REUSABLE_STRING_HANDLESCOPE(isolate);
+ TypeArguments& type_params = isolate->TypeArgumentsHandle();
+ TypeParameter& type_param = isolate->TypeParameterHandle();
+ String& type_param_name = isolate->StringHandle();
+
type_params ^= type_parameters();
- TypeParameter& type_param = reused_handles.TypeParameterHandle();
- String& type_param_name = reused_handles.StringHandle();
if (!type_params.IsNull()) {
const intptr_t num_type_params = type_params.Length();
for (intptr_t i = 0; i < num_type_params; i++) {
@@ -2246,7 +2254,8 @@
};
ASSERT(kind == RawFunction::kNoSuchMethodDispatcher ||
- kind == RawFunction::kInvokeFieldDispatcher);
+ kind == RawFunction::kInvokeFieldDispatcher ||
+ kind == RawFunction::kInvokeClosureDispatcher);
Function& dispatcher = Function::Handle();
Array& cache = Array::Handle(invocation_dispatcher_cache());
ASSERT(!cache.IsNull());
@@ -2707,12 +2716,14 @@
if (EnsureIsFinalized(isolate) != Error::null()) {
return -1;
}
- ReusableHandleScope reused_handles(isolate);
- Array& fields_array = reused_handles.ArrayHandle();
+ REUSABLE_ARRAY_HANDLESCOPE(isolate);
+ REUSABLE_FIELD_HANDLESCOPE(isolate);
+ REUSABLE_STRING_HANDLESCOPE(isolate);
+ Array& fields_array = isolate->ArrayHandle();
+ Field& field = isolate->FieldHandle();
+ String& field_name = isolate->StringHandle();
fields_array ^= fields();
ASSERT(!fields_array.IsNull());
- Field& field = reused_handles.FieldHandle();
- String& field_name = reused_handles.StringHandle();
String& needle_name = String::Handle(isolate);
needle_name ^= needle.name();
const intptr_t len = fields_array.Length();
@@ -3552,12 +3563,13 @@
if (EnsureIsFinalized(isolate) != Error::null()) {
return Function::null();
}
- ReusableHandleScope reused_handles(isolate);
- Array& funcs = reused_handles.ArrayHandle();
+ REUSABLE_ARRAY_HANDLESCOPE(isolate);
+ REUSABLE_FUNCTION_HANDLESCOPE(isolate);
+ Array& funcs = isolate->ArrayHandle();
funcs ^= functions();
ASSERT(!funcs.IsNull());
- Function& function = reused_handles.FunctionHandle();
const intptr_t len = funcs.Length();
+ Function& function = isolate->FunctionHandle();
if (name.IsSymbol()) {
// Quick Symbol compare.
NoGCScope no_gc;
@@ -3568,7 +3580,8 @@
}
}
} else {
- String& function_name = reused_handles.StringHandle();
+ REUSABLE_STRING_HANDLESCOPE(isolate);
+ String& function_name = isolate->StringHandle();
for (intptr_t i = 0; i < len; i++) {
function ^= funcs.At(i);
function_name ^= function.name();
@@ -3588,13 +3601,15 @@
if (EnsureIsFinalized(isolate) != Error::null()) {
return Function::null();
}
- ReusableHandleScope reused_handles(isolate);
- Array& funcs = reused_handles.ArrayHandle();
+ REUSABLE_ARRAY_HANDLESCOPE(isolate);
+ REUSABLE_FUNCTION_HANDLESCOPE(isolate);
+ REUSABLE_STRING_HANDLESCOPE(isolate);
+ Array& funcs = isolate->ArrayHandle();
funcs ^= functions();
ASSERT(!funcs.IsNull());
- Function& function = reused_handles.FunctionHandle();
- String& function_name = reused_handles.StringHandle();
intptr_t len = funcs.Length();
+ Function& function = isolate->FunctionHandle();
+ String& function_name = isolate->StringHandle();
for (intptr_t i = 0; i < len; i++) {
function ^= funcs.At(i);
function_name ^= function.name();
@@ -3624,12 +3639,14 @@
if (EnsureIsFinalized(isolate) != Error::null()) {
return Function::null();
}
- ReusableHandleScope reused_handles(isolate);
- Array& funcs = reused_handles.ArrayHandle();
+ REUSABLE_ARRAY_HANDLESCOPE(isolate);
+ REUSABLE_FUNCTION_HANDLESCOPE(isolate);
+ REUSABLE_STRING_HANDLESCOPE(isolate);
+ Array& funcs = isolate->ArrayHandle();
funcs ^= functions();
- Function& function = reused_handles.FunctionHandle();
- String& function_name = reused_handles.StringHandle();
intptr_t len = funcs.Length();
+ Function& function = isolate->FunctionHandle();
+ String& function_name = isolate->StringHandle();
for (intptr_t i = 0; i < len; i++) {
function ^= funcs.At(i);
function_name ^= function.name();
@@ -3689,13 +3706,15 @@
if (EnsureIsFinalized(isolate) != Error::null()) {
return Field::null();
}
- ReusableHandleScope reused_handles(isolate);
- Array& flds = reused_handles.ArrayHandle();
+ REUSABLE_ARRAY_HANDLESCOPE(isolate);
+ REUSABLE_FIELD_HANDLESCOPE(isolate);
+ REUSABLE_STRING_HANDLESCOPE(isolate);
+ Array& flds = isolate->ArrayHandle();
flds ^= fields();
ASSERT(!flds.IsNull());
- Field& field = reused_handles.FieldHandle();
- String& field_name = reused_handles.StringHandle();
intptr_t len = flds.Length();
+ Field& field = isolate->FieldHandle();
+ String& field_name = isolate->StringHandle();
for (intptr_t i = 0; i < len; i++) {
field ^= flds.At(i);
field_name ^= field.name();
@@ -4638,7 +4657,8 @@
RawArray* Function::saved_args_desc() const {
ASSERT(kind() == RawFunction::kNoSuchMethodDispatcher ||
- kind() == RawFunction::kInvokeFieldDispatcher);
+ kind() == RawFunction::kInvokeFieldDispatcher ||
+ kind() == RawFunction::kInvokeClosureDispatcher);
const Object& obj = Object::Handle(raw_ptr()->data_);
ASSERT(obj.IsArray());
return Array::Cast(obj).raw();
@@ -4647,7 +4667,8 @@
void Function::set_saved_args_desc(const Array& value) const {
ASSERT(kind() == RawFunction::kNoSuchMethodDispatcher ||
- kind() == RawFunction::kInvokeFieldDispatcher);
+ kind() == RawFunction::kInvokeFieldDispatcher ||
+ kind() == RawFunction::kInvokeClosureDispatcher);
ASSERT(raw_ptr()->data_ == Object::null());
set_data(value);
}
@@ -4796,6 +4817,9 @@
case RawFunction::kInvokeFieldDispatcher:
return "kInvokeFieldDispatcher";
break;
+ case RawFunction::kInvokeClosureDispatcher:
+ return "kInvokeClosureDispatcher";
+ break;
default:
UNREACHABLE();
return NULL;
@@ -6048,6 +6072,9 @@
case RawFunction::kInvokeFieldDispatcher:
kind_str = "invoke-field-dispatcher";
break;
+ case RawFunction::kInvokeClosureDispatcher:
+ kind_str = "invoke-closure-dispatcher";
+ break;
default:
UNREACHABLE();
}
@@ -6079,7 +6106,9 @@
} else if (IsImplicitClosureFunction()) {
id = cls.FindImplicitClosureFunctionIndex(*this);
selector = "implicit_closures";
- } else if (IsNoSuchMethodDispatcher() || IsInvokeFieldDispatcher()) {
+ } else if (IsNoSuchMethodDispatcher() ||
+ IsInvokeFieldDispatcher() ||
+ IsInvokeClosureDispatcher()) {
id = cls.FindInvocationDispatcherFunctionIndex(*this);
selector = "dispatchers";
} else {
@@ -6093,13 +6122,14 @@
jsobj.AddPropertyF("id", "classes/%" Pd "/%s/%" Pd "", cid, selector, id);
jsobj.AddProperty("name", internal_name);
jsobj.AddProperty("user_name", user_name);
+ jsobj.AddProperty("class", cls);
+ const char* kind_string = Function::KindToCString(kind());
+ jsobj.AddProperty("kind", kind_string);
if (ref) return;
jsobj.AddProperty("is_static", is_static());
jsobj.AddProperty("is_const", is_const());
jsobj.AddProperty("is_optimizable", is_optimizable());
jsobj.AddProperty("is_inlinable", IsInlineable());
- const char* kind_string = Function::KindToCString(kind());
- jsobj.AddProperty("kind", kind_string);
jsobj.AddProperty("unoptimized_code", Object::Handle(unoptimized_code()));
jsobj.AddProperty("usage_counter", usage_counter());
jsobj.AddProperty("optimized_call_site_count", optimized_call_site_count());
@@ -6352,8 +6382,10 @@
bool Field::IsUnboxedField() const {
bool valid_class = (guarded_cid() == kDoubleCid) ||
- (FlowGraphCompiler::SupportsUnboxedFloat32x4() &&
- (guarded_cid() == kFloat32x4Cid));
+ (FlowGraphCompiler::SupportsUnboxedSimd128() &&
+ (guarded_cid() == kFloat32x4Cid)) ||
+ (FlowGraphCompiler::SupportsUnboxedSimd128() &&
+ (guarded_cid() == kFloat64x2Cid));
return is_unboxing_candidate() && !is_final() && !is_nullable() &&
valid_class;
}
@@ -6761,12 +6793,17 @@
switch (curr) {
case Token::kLBRACE:
case Token::kRBRACE:
+ if (next != Token::kNEWLINE) {
+ separator = &Symbols::Blank();
+ }
+ break;
case Token::kPERIOD:
case Token::kLBRACK:
case Token::kINTERPOL_VAR:
case Token::kINTERPOL_START:
case Token::kINTERPOL_END:
case Token::kBIT_NOT:
+ case Token::kNOT:
break;
// In case we see an opening parentheses '(' we increase the indent to
// align multi-line parameters accordingly. The indent will be removed as
@@ -6802,10 +6839,10 @@
switch (next) {
case Token::kRBRACE:
break;
+ case Token::kNEWLINE:
case Token::kSEMICOLON:
case Token::kPERIOD:
case Token::kCOMMA:
- case Token::kLPAREN:
case Token::kRPAREN:
case Token::kLBRACK:
case Token::kRBRACK:
@@ -6814,6 +6851,13 @@
case Token::kINTERPOL_END:
separator = NULL;
break;
+ case Token::kLPAREN:
+ if (curr == Token::kCATCH) {
+ separator = &Symbols::Blank();
+ } else {
+ separator = NULL;
+ }
+ break;
case Token::kELSE:
separator = &Symbols::Blank();
break;
@@ -8018,14 +8062,15 @@
RawObject* Library::LookupEntry(const String& name, intptr_t *index) const {
Isolate* isolate = Isolate::Current();
- ReusableHandleScope reused_handles(isolate);
- Array& dict = reused_handles.ArrayHandle();
+ REUSABLE_ARRAY_HANDLESCOPE(isolate);
+ REUSABLE_OBJECT_HANDLESCOPE(isolate);
+ REUSABLE_STRING_HANDLESCOPE(isolate);
+ Array& dict = isolate->ArrayHandle();
dict ^= dictionary();
intptr_t dict_size = dict.Length() - 1;
*index = name.Hash() % dict_size;
-
- Object& entry = reused_handles.ObjectHandle();
- String& entry_name = reused_handles.StringHandle();
+ Object& entry = isolate->ObjectHandle();
+ String& entry_name = isolate->StringHandle();
entry = dict.At(*index);
// Search the entry in the hash set.
while (!entry.IsNull()) {
@@ -8947,6 +8992,45 @@
}
+void Namespace::set_metadata_field(const Field& value) const {
+ StorePointer(&raw_ptr()->metadata_field_, value.raw());
+}
+
+
+void Namespace::AddMetadata(intptr_t token_pos, const Class& owner_class) {
+ ASSERT(Field::Handle(metadata_field()).IsNull());
+ Field& field = Field::Handle(Field::New(Symbols::TopLevel(),
+ true, // is_static
+ false, // is_final
+ false, // is_const
+ owner_class,
+ token_pos));
+ field.set_type(Type::Handle(Type::DynamicType()));
+ field.set_value(Array::empty_array());
+ set_metadata_field(field);
+}
+
+
+RawObject* Namespace::GetMetadata() const {
+ Field& field = Field::Handle(metadata_field());
+ if (field.IsNull()) {
+ // There is no metadata for this object.
+ return Object::empty_array().raw();
+ }
+ Object& metadata = Object::Handle();
+ metadata = field.value();
+ if (field.value() == Object::empty_array().raw()) {
+ metadata = Parser::ParseMetadata(Class::Handle(field.owner()),
+ field.token_pos());
+ if (metadata.IsArray()) {
+ ASSERT(Array::Cast(metadata).raw() != Object::empty_array().raw());
+ field.set_value(Array::Cast(metadata));
+ }
+ }
+ return metadata.raw();
+}
+
+
const char* Namespace::ToCString() const {
const char* kFormat = "Namespace for library '%s'";
const Library& lib = Library::Handle(library());
@@ -10185,6 +10269,7 @@
result.set_is_optimized(false);
result.set_is_alive(false);
result.set_comments(Comments::New(0));
+ result.set_compile_timestamp(0);
result.set_pc_descriptors(Object::empty_descriptors());
}
return result.raw();
@@ -10211,6 +10296,7 @@
assembler->FinalizeInstructions(region);
CPU::FlushICache(instrs.EntryPoint(), instrs.size());
+ code.set_compile_timestamp(OS::GetCurrentTimeMicros());
CodeObservers::NotifyAll(name,
instrs.EntryPoint(),
assembler->prologue_offset(),
@@ -10306,6 +10392,24 @@
}
+// Given a pc and a timestamp, lookup the code.
+RawCode* Code::FindCode(uword pc, int64_t timestamp) {
+ Code& code = Code::Handle(Code::LookupCode(pc));
+ if (!code.IsNull() && (code.compile_timestamp() == timestamp) &&
+ (code.EntryPoint() == pc)) {
+ // Found code in isolate.
+ return code.raw();
+ }
+ code ^= Code::LookupCodeInVmIsolate(pc);
+ if (!code.IsNull() && (code.compile_timestamp() == timestamp) &&
+ (code.EntryPoint() == pc)) {
+ // Found code in VM isolate.
+ return code.raw();
+ }
+ return Code::null();
+}
+
+
intptr_t Code::GetTokenIndexOfPC(uword pc) const {
intptr_t token_pos = -1;
const PcDescriptors& descriptors = PcDescriptors::Handle(pc_descriptors());
@@ -10399,11 +10503,13 @@
void Code::PrintToJSONStream(JSONStream* stream, bool ref) const {
JSONObject jsobj(stream);
jsobj.AddProperty("type", JSONType(ref));
- jsobj.AddPropertyF("id", "code/%" Px "", EntryPoint());
+ jsobj.AddPropertyF("id", "code/%" Px64"-%" Px "", compile_timestamp(),
+ EntryPoint());
jsobj.AddPropertyF("start", "%" Px "", EntryPoint());
jsobj.AddPropertyF("end", "%" Px "", EntryPoint() + Size());
jsobj.AddProperty("is_optimized", is_optimized());
jsobj.AddProperty("is_alive", is_alive());
+ jsobj.AddProperty("kind", "Dart");
const String& name = String::Handle(Name());
const String& user_name = String::Handle(UserName());
const char* name_prefix = is_optimized() ? "*" : "";
@@ -10412,6 +10518,14 @@
const Object& obj = Object::Handle(owner());
if (obj.IsFunction()) {
jsobj.AddProperty("function", obj);
+ } else {
+ // Generate a fake function reference.
+ JSONObject func(&jsobj, "function");
+ func.AddProperty("type", "@Function");
+ func.AddProperty("kind", "Stub");
+ func.AddPropertyF("id", "functions/stub-%" Pd "", EntryPoint());
+ func.AddProperty("user_name", user_name.ToCString());
+ func.AddProperty("name", name.ToCString());
}
if (ref) {
return;
@@ -10761,7 +10875,7 @@
intptr_t ICData::NumberOfChecks() const {
// Do not count the sentinel;
- return (Array::Handle(ic_data()).Length() / TestEntryLength()) - 1;
+ return (Smi::Value(ic_data()->ptr()->length_) / TestEntryLength()) - 1;
}
@@ -11373,9 +11487,7 @@
void Error::PrintToJSONStream(JSONStream* stream, bool ref) const {
- JSONObject jsobj(stream);
- jsobj.AddProperty("type", JSONType(false));
- jsobj.AddProperty("error_msg", ToErrorCString());
+ UNREACHABLE();
}
@@ -11421,8 +11533,10 @@
void ApiError::PrintToJSONStream(JSONStream* stream, bool ref) const {
JSONObject jsobj(stream);
- jsobj.AddProperty("type", JSONType(false));
- jsobj.AddProperty("error_msg", ToErrorCString());
+ jsobj.AddProperty("type", "Error");
+ jsobj.AddProperty("id", "");
+ jsobj.AddProperty("kind", JSONType(false));
+ jsobj.AddProperty("message", ToErrorCString());
}
@@ -11607,8 +11721,10 @@
void LanguageError::PrintToJSONStream(JSONStream* stream, bool ref) const {
JSONObject jsobj(stream);
- jsobj.AddProperty("type", JSONType(false));
- jsobj.AddProperty("error_msg", ToErrorCString());
+ jsobj.AddProperty("type", "Error");
+ jsobj.AddProperty("id", "");
+ jsobj.AddProperty("kind", JSONType(false));
+ jsobj.AddProperty("message", ToErrorCString());
}
@@ -11680,11 +11796,20 @@
}
+
void UnhandledException::PrintToJSONStream(JSONStream* stream,
bool ref) const {
JSONObject jsobj(stream);
- jsobj.AddProperty("type", JSONType(false));
- jsobj.AddProperty("error_msg", ToErrorCString());
+ jsobj.AddProperty("type", "Error");
+ jsobj.AddProperty("id", "");
+ jsobj.AddProperty("kind", JSONType(false));
+ jsobj.AddProperty("message", ToErrorCString());
+
+ Instance& instance = Instance::Handle();
+ instance = exception();
+ jsobj.AddProperty("exception", instance);
+ instance = stacktrace();
+ jsobj.AddProperty("stacktrace", instance);
}
@@ -11721,8 +11846,10 @@
void UnwindError::PrintToJSONStream(JSONStream* stream, bool ref) const {
JSONObject jsobj(stream);
- jsobj.AddProperty("type", JSONType(false));
- jsobj.AddProperty("error_msg", ToErrorCString());
+ jsobj.AddProperty("type", "Error");
+ jsobj.AddProperty("id", "");
+ jsobj.AddProperty("kind", JSONType(false));
+ jsobj.AddProperty("message", ToErrorCString());
}
@@ -12052,7 +12179,10 @@
bool Instance::IsValidFieldOffset(intptr_t offset) const {
- const Class& cls = Class::Handle(clazz());
+ Isolate* isolate = Isolate::Current();
+ REUSABLE_CLASS_HANDLESCOPE(isolate);
+ Class& cls = isolate->ClassHandle();
+ cls = clazz();
return (offset >= 0 && offset <= (cls.instance_size() - kWordSize));
}
@@ -12110,20 +12240,22 @@
void Instance::PrintToJSONStream(JSONStream* stream, bool ref) const {
JSONObject jsobj(stream);
Class& cls = Class::Handle(this->clazz());
- jsobj.AddProperty("preview", ToUserCString(40));
// TODO(turnidge): Handle <optimized out> like other null-like values.
if (IsNull()) {
jsobj.AddProperty("type", ref ? "@Null" : "Null");
jsobj.AddProperty("id", "objects/null");
+ jsobj.AddProperty("preview", "null");
return;
} else if (raw() == Object::sentinel().raw()) {
jsobj.AddProperty("type", ref ? "@Null" : "Null");
jsobj.AddProperty("id", "objects/not-initialized");
+ jsobj.AddProperty("preview", "<not initialized>");
return;
} else if (raw() == Object::transition_sentinel().raw()) {
jsobj.AddProperty("type", ref ? "@Null" : "Null");
jsobj.AddProperty("id", "objects/being-initialized");
+ jsobj.AddProperty("preview", "<being initialized>");
return;
} else if (raw() == Symbols::OptimizedOut().raw()) {
// TODO(turnidge): This is a hack. The user could have this
@@ -12145,6 +12277,7 @@
}
jsobj.AddPropertyF("id", "objects/%" Pd "", id);
jsobj.AddProperty("class", cls);
+ jsobj.AddProperty("preview", ToUserCString(40));
}
if (ref) {
return;
@@ -12171,6 +12304,18 @@
cls = cls.SuperClass();
}
}
+
+ if (NumNativeFields() > 0) {
+ JSONArray jsarr(&jsobj, "nativeFields");
+ for (intptr_t i = 0; i < NumNativeFields(); i++) {
+ intptr_t value = GetNativeField(i);
+ JSONObject jsfield(&jsarr);
+ jsfield.AddProperty("index", i);
+ jsfield.AddProperty("value", value);
+ }
+ }
+
+ jsobj.AddProperty("size", raw()->Size());
}
@@ -14169,7 +14314,7 @@
void Smi::PrintToJSONStream(JSONStream* stream, bool ref) const {
JSONObject jsobj(stream);
jsobj.AddProperty("type", JSONType(ref));
- jsobj.AddPropertyF("id", "objects/int/%" Pd "", Value());
+ jsobj.AddPropertyF("id", "objects/int-%" Pd "", Value());
class Class& cls = Class::Handle(this->clazz());
jsobj.AddProperty("class", cls);
jsobj.AddPropertyF("preview", "%" Pd "", Value());
@@ -16209,7 +16354,7 @@
const char* str = ToCString();
JSONObject jsobj(stream);
jsobj.AddProperty("type", JSONType(ref));
- jsobj.AddPropertyF("id", "objects/bool/%s", str);
+ jsobj.AddPropertyF("id", "objects/bool-%s", str);
class Class& cls = Class::Handle(this->clazz());
jsobj.AddProperty("class", cls);
jsobj.AddPropertyF("preview", "%s", str);
diff --git a/runtime/vm/object.h b/runtime/vm/object.h
index b1c89e8..7105637 100644
--- a/runtime/vm/object.h
+++ b/runtime/vm/object.h
@@ -35,8 +35,12 @@
class DeoptInstr;
class FinalizablePersistentHandle;
class LocalScope;
-class ReusableHandleScope;
-class ReusableObjectHandleScope;
+
+#define REUSABLE_FORWARD_DECLARATION(name) \
+ class Reusable##name##HandleScope;
+REUSABLE_HANDLE_LIST(REUSABLE_FORWARD_DECLARATION)
+#undef REUSABLE_FORWARD_DECLARATION
+
class Symbols;
#if defined(DEBUG)
@@ -89,6 +93,9 @@
initializeHandle(obj, object::null()); \
return obj; \
} \
+ static object& ZoneHandle(Isolate* isolate) { \
+ return ZoneHandle(isolate, object::null()); \
+ } \
static object& ZoneHandle() { \
return ZoneHandle(Isolate::Current(), object::null()); \
} \
@@ -639,8 +646,10 @@
friend class ExternalOneByteString;
friend class ExternalTwoByteString;
friend class Isolate;
- friend class ReusableHandleScope;
- friend class ReusableObjectHandleScope;
+#define REUSABLE_FRIEND_DECLARATION(name) \
+ friend class Reusable##name##HandleScope;
+REUSABLE_HANDLE_LIST(REUSABLE_FRIEND_DECLARATION)
+#undef REUSABLE_FRIEND_DECLARATION
DISALLOW_ALLOCATION();
DISALLOW_COPY_AND_ASSIGN(Object);
@@ -1535,6 +1544,10 @@
return kind() == RawFunction::kInvokeFieldDispatcher;
}
+ bool IsInvokeClosureDispatcher() const {
+ return kind() == RawFunction::kInvokeClosureDispatcher;
+ }
+
// Returns true iff an implicit closure function has been created
// for this function.
bool HasImplicitClosureFunction() const {
@@ -1587,6 +1600,7 @@
case RawFunction::kMethodExtractor:
case RawFunction::kNoSuchMethodDispatcher:
case RawFunction::kInvokeFieldDispatcher:
+ case RawFunction::kInvokeClosureDispatcher:
return true;
case RawFunction::kClosureFunction:
case RawFunction::kConstructor:
@@ -2553,6 +2567,8 @@
RawArray* anonymous_classes() const { return raw_ptr()->anonymous_classes_; }
// Library imports.
+ RawArray* imports() const { return raw_ptr()->imports_; }
+ RawArray* exports() const { return raw_ptr()->exports_; }
void AddImport(const Namespace& ns) const;
intptr_t num_imports() const { return raw_ptr()->num_imports_; }
RawNamespace* ImportAt(intptr_t index) const;
@@ -2644,8 +2660,6 @@
void set_num_imports(intptr_t value) const {
raw_ptr()->num_imports_ = value;
}
- RawArray* imports() const { return raw_ptr()->imports_; }
- RawArray* exports() const { return raw_ptr()->exports_; }
bool HasExports() const;
RawArray* loaded_scripts() const { return raw_ptr()->loaded_scripts_; }
RawGrowableObjectArray* metadata() const { return raw_ptr()->metadata_; }
@@ -2729,6 +2743,9 @@
RawArray* show_names() const { return raw_ptr()->show_names_; }
RawArray* hide_names() const { return raw_ptr()->hide_names_; }
+ void AddMetadata(intptr_t token_pos, const Class& owner_class);
+ RawObject* GetMetadata() const;
+
static intptr_t InstanceSize() {
return RoundedAllocationSize(sizeof(RawNamespace));
}
@@ -2743,6 +2760,9 @@
private:
static RawNamespace* New();
+ RawField* metadata_field() const { return raw_ptr()->metadata_field_; }
+ void set_metadata_field(const Field& value) const;
+
FINAL_HEAP_OBJECT_IMPLEMENTATION(Namespace, Object);
friend class Class;
};
@@ -3323,6 +3343,7 @@
bool optimized = false);
static RawCode* LookupCode(uword pc);
static RawCode* LookupCodeInVmIsolate(uword pc);
+ static RawCode* FindCode(uword pc, int64_t timestamp);
int32_t GetPointerOffsetAt(int index) const {
return *PointerOffsetAddrAt(index);
@@ -3352,6 +3373,10 @@
RawString* Name() const;
RawString* UserName() const;
+ int64_t compile_timestamp() const {
+ return raw_ptr()->compile_timestamp_;
+ }
+
private:
void set_state_bits(intptr_t bits) const;
@@ -3384,6 +3409,10 @@
static const intptr_t kEntrySize = sizeof(int32_t); // NOLINT
+ void set_compile_timestamp(int64_t timestamp) const {
+ raw_ptr()->compile_timestamp_ = timestamp;
+ }
+
void set_instructions(RawInstructions* instructions) {
// RawInstructions are never allocated in New space and hence a
// store buffer update is not needed here.
@@ -6064,7 +6093,6 @@
static void Copy(const DstType& dst, intptr_t dst_offset_in_bytes,
const SrcType& src, intptr_t src_offset_in_bytes,
intptr_t length_in_bytes) {
- ASSERT(dst.ElementType() == src.ElementType());
ASSERT(Utils::RangeCheck(src_offset_in_bytes,
length_in_bytes,
src.LengthInBytes()));
@@ -6081,6 +6109,35 @@
}
}
+
+ template <typename DstType, typename SrcType>
+ static void ClampedCopy(const DstType& dst, intptr_t dst_offset_in_bytes,
+ const SrcType& src, intptr_t src_offset_in_bytes,
+ intptr_t length_in_bytes) {
+ ASSERT(Utils::RangeCheck(src_offset_in_bytes,
+ length_in_bytes,
+ src.LengthInBytes()));
+ ASSERT(Utils::RangeCheck(dst_offset_in_bytes,
+ length_in_bytes,
+ dst.LengthInBytes()));
+ {
+ NoGCScope no_gc;
+ if (length_in_bytes > 0) {
+ uint8_t* dst_data =
+ reinterpret_cast<uint8_t*>(dst.DataAddr(dst_offset_in_bytes));
+ int8_t* src_data =
+ reinterpret_cast<int8_t*>(src.DataAddr(src_offset_in_bytes));
+ for (intptr_t ix = 0; ix < length_in_bytes; ix++) {
+ int8_t v = *src_data;
+ if (v < 0) v = 0;
+ *dst_data = v;
+ src_data++;
+ dst_data++;
+ }
+ }
+ }
+ }
+
static bool IsTypedData(const Instance& obj) {
ASSERT(!obj.IsNull());
intptr_t cid = obj.raw()->GetClassId();
diff --git a/runtime/vm/object_test.cc b/runtime/vm/object_test.cc
index cad024b..f333897 100644
--- a/runtime/vm/object_test.cc
+++ b/runtime/vm/object_test.cc
@@ -185,6 +185,40 @@
}
+TEST_CASE(GenerateExactSource) {
+ // Verify the exact formatting of generated sources.
+ const char* kScriptChars =
+ "\n"
+ "class A {\n"
+ " static bar() { return 42; }\n"
+ " static fly() { return 5; }\n"
+ " void catcher(x) {\n"
+ " try {\n"
+ " if (x) {\n"
+ " fly();\n"
+ " } else {\n"
+ " !fly();\n"
+ " }\n"
+ " } on Blah catch (a) {\n"
+ " _print(17);\n"
+ " } catch (e, s) {\n"
+ " bar()\n"
+ " }\n"
+ " }\n"
+ "}\n";
+
+ String& url = String::Handle(String::New("dart-test:GenerateExactSource"));
+ String& source = String::Handle(String::New(kScriptChars));
+ Script& script = Script::Handle(Script::New(url,
+ source,
+ RawScript::kScriptTag));
+ script.Tokenize(String::Handle(String::New("")));
+ const TokenStream& tokens = TokenStream::Handle(script.tokens());
+ const String& gen_source = String::Handle(tokens.GenerateSource());
+ EXPECT_STREQ(source.ToCString(), gen_source.ToCString());
+}
+
+
TEST_CASE(InstanceClass) {
// Allocate the class first.
String& class_name = String::Handle(Symbols::New("EmptyClass"));
diff --git a/runtime/vm/pages.cc b/runtime/vm/pages.cc
index 3081414..bddb9be 100644
--- a/runtime/vm/pages.cc
+++ b/runtime/vm/pages.cc
@@ -126,6 +126,7 @@
max_capacity_in_words_(max_capacity_in_words),
capacity_in_words_(0),
used_in_words_(0),
+ external_in_words_(0),
sweeping_(false),
page_space_controller_(FLAG_heap_growth_space_ratio,
FLAG_heap_growth_rate,
@@ -272,6 +273,18 @@
}
+void PageSpace::AllocateExternal(intptr_t size) {
+ intptr_t size_in_words = size >> kWordSizeLog2;
+ external_in_words_ += size_in_words;
+}
+
+
+void PageSpace::FreeExternal(intptr_t size) {
+ intptr_t size_in_words = size >> kWordSizeLog2;
+ external_in_words_ -= size_in_words;
+}
+
+
bool PageSpace::Contains(uword addr) const {
HeapPage* page = pages_;
while (page != NULL) {
@@ -410,7 +423,42 @@
space.AddProperty("collections", collections());
space.AddProperty("used", UsedInWords() * kWordSize);
space.AddProperty("capacity", CapacityInWords() * kWordSize);
- space.AddProperty("time", RoundMicrosecondsToSeconds(gc_time_micros()));
+ space.AddProperty("external", ExternalInWords() * kWordSize);
+ space.AddProperty("time", MicrosecondsToSeconds(gc_time_micros()));
+}
+
+
+class HeapMapAsJSONVisitor : public ObjectVisitor {
+ public:
+ explicit HeapMapAsJSONVisitor(JSONArray* array)
+ : ObjectVisitor(NULL), array_(array) {}
+ virtual void VisitObject(RawObject* obj) {
+ array_->AddValue(obj->Size() / kObjectAlignment);
+ array_->AddValue(obj->GetClassId());
+ }
+ private:
+ JSONArray* array_;
+};
+
+
+void PageSpace::PrintHeapMapToJSONStream(JSONStream* stream) {
+ JSONObject heap_map(stream);
+ heap_map.AddProperty("type", "HeapMap");
+ heap_map.AddProperty("id", "heapmap");
+ heap_map.AddProperty("free_class_id",
+ static_cast<intptr_t>(kFreeListElement));
+ heap_map.AddProperty("unit_size_bytes",
+ static_cast<intptr_t>(kObjectAlignment));
+ {
+ // "pages" is an array [page0, page1, ..., pageN], each page an array
+ // [size, class id, size, class id, ...] (size unit is kObjectAlignment).
+ JSONArray all_pages(&heap_map, "pages");
+ for (HeapPage* page = pages_; page != NULL; page = page->next()) {
+ JSONArray page_map(&all_pages);
+ HeapMapAsJSONVisitor printer(&page_map);
+ page->VisitObjects(&printer);
+ }
+ }
}
@@ -473,6 +521,9 @@
}
}
+ // Save old value before GCMarker visits the weak persistent handles.
+ intptr_t external_before_in_words = external_in_words_;
+
// Mark all reachable old-gen objects.
bool collect_code = FLAG_collect_code && ShouldCollectCode();
GCMarker marker(heap_);
@@ -546,10 +597,11 @@
int64_t end = OS::GetCurrentTimeMicros();
- // Record signals for growth control.
- page_space_controller_.EvaluateGarbageCollection(used_before_in_words,
- used_in_words,
- start, end);
+ // Record signals for growth control. Include size of external allocations.
+ page_space_controller_.EvaluateGarbageCollection(
+ used_before_in_words + external_before_in_words,
+ used_in_words + external_in_words_,
+ start, end);
heap_->RecordTime(kMarkObjects, mid1 - start);
heap_->RecordTime(kResetFreeLists, mid2 - mid1);
diff --git a/runtime/vm/pages.h b/runtime/vm/pages.h
index f20b440..2fbc2a2 100644
--- a/runtime/vm/pages.h
+++ b/runtime/vm/pages.h
@@ -188,6 +188,9 @@
intptr_t UsedInWords() const { return used_in_words_; }
intptr_t CapacityInWords() const { return capacity_in_words_; }
+ intptr_t ExternalInWords() const {
+ return external_in_words_;
+ }
bool Contains(uword addr) const;
bool Contains(uword addr, HeapPage::PageType type) const;
@@ -237,6 +240,10 @@
}
void PrintToJSONObject(JSONObject* object);
+ void PrintHeapMapToJSONStream(JSONStream* stream);
+
+ void AllocateExternal(intptr_t size);
+ void FreeExternal(intptr_t size);
private:
// Ids for time and data records in Heap::GCStats.
@@ -280,6 +287,7 @@
intptr_t max_capacity_in_words_;
intptr_t capacity_in_words_;
intptr_t used_in_words_;
+ intptr_t external_in_words_;
// Keep track whether a MarkSweep is currently running.
bool sweeping_;
diff --git a/runtime/vm/parser.cc b/runtime/vm/parser.cc
index 1cf58b5..10a4034 100644
--- a/runtime/vm/parser.cc
+++ b/runtime/vm/parser.cc
@@ -761,6 +761,7 @@
void Parser::ParseFunction(ParsedFunction* parsed_function) {
TimerScope timer(FLAG_compiler_stats, &CompilerStats::parser_timer);
+ CompilerStats::num_functions_compiled++;
Isolate* isolate = Isolate::Current();
ASSERT(isolate->long_jump_base()->IsSafeToJump());
ASSERT(parsed_function != NULL);
@@ -792,9 +793,11 @@
break;
case RawFunction::kImplicitStaticFinalGetter:
node_sequence = parser.ParseStaticFinalGetter(func);
+ CompilerStats::num_implicit_final_getters++;
break;
case RawFunction::kStaticInitializer:
node_sequence = parser.ParseStaticInitializer(func);
+ CompilerStats::num_static_initializer_funcs++;
break;
case RawFunction::kMethodExtractor:
node_sequence = parser.ParseMethodExtractor(func);
@@ -807,6 +810,10 @@
node_sequence =
parser.ParseInvokeFieldDispatcher(func, default_parameter_values);
break;
+ case RawFunction::kInvokeClosureDispatcher:
+ node_sequence =
+ parser.ParseInvokeClosureDispatcher(func, default_parameter_values);
+ break;
default:
UNREACHABLE();
}
@@ -1402,6 +1409,53 @@
}
+SequenceNode* Parser::ParseInvokeClosureDispatcher(const Function& func,
+ Array& default_values) {
+ TRACE_PARSER("ParseInvokeClosureDispatcher");
+
+ ASSERT(func.IsInvokeClosureDispatcher());
+ intptr_t token_pos = func.token_pos();
+ ASSERT(func.token_pos() == 0);
+ ASSERT(current_class().raw() == func.Owner());
+
+ const Array& args_desc = Array::Handle(func.saved_args_desc());
+ ArgumentsDescriptor desc(args_desc);
+ ASSERT(desc.Count() > 0);
+
+ // Set up scope for this function.
+ BuildDispatcherScope(func, desc, default_values);
+
+ // Receiver is local 0.
+ LocalScope* scope = current_block_->scope;
+ LoadLocalNode* receiver = new LoadLocalNode(token_pos, scope->VariableAt(0));
+
+ // Pass arguments 1..n to the closure call.
+ ArgumentListNode* closure_args = new ArgumentListNode(token_pos);
+ const Array& names = Array::Handle(Array::New(desc.NamedCount(), Heap::kOld));
+ // Positional parameters.
+ intptr_t i = 1;
+ for (; i < desc.PositionalCount(); ++i) {
+ closure_args->Add(new LoadLocalNode(token_pos, scope->VariableAt(i)));
+ }
+ // Named parameters.
+ for (; i < desc.Count(); i++) {
+ closure_args->Add(new LoadLocalNode(token_pos, scope->VariableAt(i)));
+ intptr_t index = i - desc.PositionalCount();
+ names.SetAt(index, String::Handle(desc.NameAt(index)));
+ }
+ closure_args->set_names(names);
+
+ EnsureSavedCurrentContext();
+ ClosureCallNode* closure_call = new ClosureCallNode(token_pos,
+ receiver,
+ closure_args);
+
+ ReturnNode* return_node = new ReturnNode(token_pos, closure_call);
+ current_block_->statements->Add(return_node);
+ return CloseBlock();
+}
+
+
void Parser::SkipBlock() {
ASSERT(CurrentToken() == Token::kLBRACE);
GrowableArray<Token::Kind> token_stack(8);
@@ -3405,22 +3459,19 @@
if (has_initializer) {
ConsumeToken();
init_value = Object::sentinel().raw();
- // For static const fields and static final non-const fields, the
- // initialization expression will be parsed through the
- // kImplicitStaticFinalGetter method invocation/compilation.
+ // For static fields, the initialization expression will be parsed
+ // through the kImplicitStaticFinalGetter method invocation/compilation.
// For instance fields, the expression is parsed when a constructor
// is compiled.
- // For static const fields and static final non-const fields with very
- // simple initializer expressions (e.g. a literal number or string), we
- // optimize away the kImplicitStaticFinalGetter and initialize the field
- // here. However, the class finalizer will check the value type for
+ // For static fields with very simple initializer expressions
+ // (e.g. a literal number or string), we optimize away the
+ // kImplicitStaticFinalGetter and initialize the field here.
+ // However, the class finalizer will check the value type for
// assignability once the declared field type can be resolved. If the
// value is not assignable (assuming checked mode and disregarding actual
// mode), the field value is reset and a kImplicitStaticFinalGetter is
// created at finalization time.
-
- if (field->has_static && (field->has_const || field->has_final) &&
- (LookaheadToken(1) == Token::kSEMICOLON)) {
+ if (field->has_static && (LookaheadToken(1) == Token::kSEMICOLON)) {
has_simple_literal = IsSimpleLiteral(*field->type, &init_value);
}
SkipExpr();
@@ -3966,6 +4017,7 @@
void Parser::ParseClassDefinition(const Class& cls) {
TRACE_PARSER("ParseClassDefinition");
+ CompilerStats::num_classes_compiled++;
set_current_class(cls);
is_top_level_ = true;
String& class_name = String::Handle(cls.Name());
@@ -4580,7 +4632,7 @@
ConsumeToken();
Instance& field_value = Instance::Handle(Object::sentinel().raw());
bool has_simple_literal = false;
- if ((is_const || is_final) && (LookaheadToken(1) == Token::kSEMICOLON)) {
+ if (LookaheadToken(1) == Token::kSEMICOLON) {
has_simple_literal = IsSimpleLiteral(type, &field_value);
}
SkipExpr();
@@ -4925,7 +4977,7 @@
}
-void Parser::ParseLibraryImportExport() {
+void Parser::ParseLibraryImportExport(intptr_t metadata_pos) {
bool is_import = (CurrentToken() == Token::kIMPORT);
bool is_export = (CurrentToken() == Token::kEXPORT);
ASSERT(is_import || is_export);
@@ -4988,8 +5040,13 @@
library.Register();
}
}
- const Namespace& ns =
- Namespace::Handle(Namespace::New(library, show_names, hide_names));
+
+ Namespace& ns =
+ Namespace::Handle(Namespace::New(library, show_names, hide_names));
+ if (metadata_pos >= 0) {
+ ns.AddMetadata(metadata_pos, current_class());
+ }
+
if (is_import) {
// Ensure that private dart:_ libraries are only imported into dart:
// libraries.
@@ -5062,7 +5119,7 @@
}
while ((CurrentToken() == Token::kIMPORT) ||
(CurrentToken() == Token::kEXPORT)) {
- ParseLibraryImportExport();
+ ParseLibraryImportExport(metadata_pos);
rewind_pos = TokenPos();
metadata_pos = SkipMetadata();
}
@@ -5827,8 +5884,7 @@
// resolved at class finalization time, and if the type of the literal is one
// of int, double, String, or bool, then preset the field with the value and
// perform the type check (in checked mode only) at finalization time.
- if (type.IsTypeParameter() ||
- (type.arguments() != TypeArguments::null())) {
+ if (type.IsTypeParameter() || (type.arguments() != TypeArguments::null())) {
// Type parameters are always resolved eagerly by the parser and never
// resolved later by the class finalizer. Therefore, we know here that if
// 'type' is not a type parameter (an unresolved type will not get resolved
@@ -8847,12 +8903,13 @@
AstNode* Parser::RunStaticFieldInitializer(const Field& field,
intptr_t field_ref_pos) {
ASSERT(field.is_static());
- const Class& field_owner = Class::ZoneHandle(field.owner());
- const String& field_name = String::ZoneHandle(field.name());
- const String& getter_name = String::Handle(Field::GetterName(field_name));
- const Function& getter =
- Function::Handle(field_owner.LookupStaticFunction(getter_name));
- const Instance& value = Instance::Handle(field.value());
+ const Class& field_owner = Class::ZoneHandle(isolate(), field.owner());
+ const String& field_name = String::ZoneHandle(isolate(), field.name());
+ const String& getter_name = String::Handle(isolate(),
+ Field::GetterName(field_name));
+ const Function& getter = Function::Handle(
+ isolate(), field_owner.LookupStaticFunction(getter_name));
+ const Instance& value = Instance::Handle(isolate(), field.value());
if (value.raw() == Object::transition_sentinel().raw()) {
if (field.is_const()) {
ErrorMsg("circular dependency while initializing static field '%s'",
@@ -8872,15 +8929,18 @@
if (field.is_const()) {
field.set_value(Object::transition_sentinel());
const int kNumArguments = 0; // no arguments.
- const Function& func =
- Function::Handle(Resolver::ResolveStatic(field_owner,
- getter_name,
- kNumArguments,
- Object::empty_array()));
+ const Function& func = Function::Handle(
+ isolate(), Resolver::ResolveStatic(field_owner,
+ getter_name,
+ kNumArguments,
+ Object::empty_array()));
ASSERT(!func.IsNull());
ASSERT(func.kind() == RawFunction::kImplicitStaticFinalGetter);
- Object& const_value = Object::Handle(
- DartEntry::InvokeFunction(func, Object::empty_array()));
+ Object& const_value = Object::Handle(isolate());
+ {
+ PAUSETIMERSCOPE(isolate(), time_compilation);
+ const_value = DartEntry::InvokeFunction(func, Object::empty_array());
+ }
if (const_value.IsError()) {
const Error& error = Error::Cast(const_value);
if (error.IsUnhandledException()) {
@@ -8934,8 +8994,9 @@
// Constructors have 2 extra arguments: rcvr and construction phase.
const int kNumExtraArgs = constructor.IsFactory() ? 1 : 2;
const int num_arguments = arguments->length() + kNumExtraArgs;
- const Array& arg_values = Array::Handle(Array::New(num_arguments));
- Instance& instance = Instance::Handle();
+ const Array& arg_values = Array::Handle(isolate(),
+ Array::New(num_arguments));
+ Instance& instance = Instance::Handle(isolate());
if (!constructor.IsFactory()) {
instance = Instance::New(type_class, Heap::kOld);
if (!type_arguments.IsNull()) {
@@ -8958,13 +9019,14 @@
ASSERT(arg->IsLiteralNode());
arg_values.SetAt((i + kNumExtraArgs), arg->AsLiteralNode()->literal());
}
- const Array& args_descriptor =
- Array::Handle(ArgumentsDescriptor::New(num_arguments,
- arguments->names()));
- const Object& result =
- Object::Handle(DartEntry::InvokeFunction(constructor,
- arg_values,
- args_descriptor));
+ const Array& args_descriptor = Array::Handle(
+ isolate(), ArgumentsDescriptor::New(num_arguments, arguments->names()));
+ Object& result = Object::Handle(isolate());
+ {
+ PAUSETIMERSCOPE(isolate(), time_compilation);
+ result = DartEntry::InvokeFunction(
+ constructor, arg_values, args_descriptor);
+ }
if (result.IsError()) {
// An exception may not occur in every parse attempt, i.e., the
// generated AST is not deterministic. Therefore mark the function as
@@ -10128,28 +10190,31 @@
String& Parser::Interpolate(const GrowableArray<AstNode*>& values) {
- const Class& cls =
- Class::Handle(Library::LookupCoreClass(Symbols::StringBase()));
+ const Class& cls = Class::Handle(
+ isolate(), Library::LookupCoreClass(Symbols::StringBase()));
ASSERT(!cls.IsNull());
- const Function& func =
- Function::Handle(cls.LookupStaticFunction(
- Library::PrivateCoreLibName(Symbols::Interpolate())));
+ const Function& func = Function::Handle(isolate(), cls.LookupStaticFunction(
+ Library::PrivateCoreLibName(Symbols::Interpolate())));
ASSERT(!func.IsNull());
// Build the array of literal values to interpolate.
- const Array& value_arr = Array::Handle(Array::New(values.length()));
+ const Array& value_arr = Array::Handle(isolate(),
+ Array::New(values.length()));
for (int i = 0; i < values.length(); i++) {
ASSERT(values[i]->IsLiteralNode());
value_arr.SetAt(i, values[i]->AsLiteralNode()->literal());
}
// Build argument array to pass to the interpolation function.
- const Array& interpolate_arg = Array::Handle(Array::New(1));
+ const Array& interpolate_arg = Array::Handle(isolate(), Array::New(1));
interpolate_arg.SetAt(0, value_arr);
// Call interpolation function.
- String& concatenated = String::ZoneHandle();
- concatenated ^= DartEntry::InvokeFunction(func, interpolate_arg);
+ String& concatenated = String::ZoneHandle(isolate());
+ {
+ PAUSETIMERSCOPE(isolate(), time_compilation);
+ concatenated ^= DartEntry::InvokeFunction(func, interpolate_arg);
+ }
if (concatenated.IsUnhandledException()) {
ErrorMsg("Exception thrown in Parser::Interpolate");
}
diff --git a/runtime/vm/parser.h b/runtime/vm/parser.h
index 6595632..97ff35f 100644
--- a/runtime/vm/parser.h
+++ b/runtime/vm/parser.h
@@ -346,7 +346,7 @@
void ParseIdentList(GrowableObjectArray* names);
void ParseLibraryDefinition();
void ParseLibraryName();
- void ParseLibraryImportExport();
+ void ParseLibraryImportExport(intptr_t metadata_pos);
void ParseLibraryPart();
void ParsePartHeader();
void ParseLibraryNameObsoleteSyntax();
@@ -450,6 +450,8 @@
Array& default_values);
SequenceNode* ParseInvokeFieldDispatcher(const Function& func,
Array& default_values);
+ SequenceNode* ParseInvokeClosureDispatcher(const Function& func,
+ Array& default_values);
void BuildDispatcherScope(const Function& func,
const ArgumentsDescriptor& desc,
Array& default_values);
diff --git a/runtime/vm/profiler.cc b/runtime/vm/profiler.cc
index 53bc048..112183a 100644
--- a/runtime/vm/profiler.cc
+++ b/runtime/vm/profiler.cc
@@ -162,6 +162,31 @@
}
+class ScopeStopwatch : public ValueObject {
+ public:
+ explicit ScopeStopwatch(const char* name) : name_(name) {
+ start_ = FLAG_trace_profiled_isolates ? OS::GetCurrentTimeMillis() : 0;
+ }
+
+ intptr_t GetElapsed() const {
+ intptr_t end = OS::GetCurrentTimeMillis();
+ ASSERT(end >= start_);
+ return end - start_;
+ }
+
+ ~ScopeStopwatch() {
+ if (FLAG_trace_profiled_isolates) {
+ intptr_t elapsed = GetElapsed();
+ OS::Print("%s took %" Pd " millis.\n", name_, elapsed);
+ }
+ }
+
+ private:
+ const char* name_;
+ intptr_t start_;
+};
+
+
struct AddressEntry {
uword pc;
intptr_t exclusive_ticks;
@@ -183,16 +208,20 @@
typedef bool (*RegionCompare)(uword pc, uword region_start, uword region_end);
-// A region of code. Each region is a kind of code (Dart, Collected, or Native).
+// A contiguous address region that holds code. Each CodeRegion has a "kind"
+// which describes the type of code contained inside the region. Each
+// region covers the following interval: [start, end).
class CodeRegion : public ZoneAllocated {
public:
enum Kind {
- kDartCode,
- kCollectedCode,
- kNativeCode
+ kDartCode, // Live Dart code.
+ kCollectedCode, // Dead Dart code.
+ kNativeCode, // Native code.
+ kReusedCode, // Dead Dart code that has been reused by new kDartCode.
+ kTagCode, // A special kind of code representing a tag.
};
- CodeRegion(Kind kind, uword start, uword end) :
+ CodeRegion(Kind kind, uword start, uword end, int64_t timestamp) :
kind_(kind),
start_(start),
end_(end),
@@ -200,14 +229,14 @@
exclusive_ticks_(0),
inclusive_tick_serial_(0),
name_(NULL),
+ compile_timestamp_(timestamp),
+ creation_serial_(0),
address_table_(new ZoneGrowableArray<AddressEntry>()),
callers_table_(new ZoneGrowableArray<CallEntry>()),
callees_table_(new ZoneGrowableArray<CallEntry>()) {
ASSERT(start_ < end_);
}
- ~CodeRegion() {
- }
uword start() const { return start_; }
void set_start(uword start) {
@@ -241,6 +270,15 @@
contains(other->end() - 1);
}
+ intptr_t creation_serial() const { return creation_serial_; }
+ void set_creation_serial(intptr_t serial) {
+ creation_serial_ = serial;
+ }
+ int64_t compile_timestamp() const { return compile_timestamp_; }
+ void set_compile_timestamp(int64_t timestamp) {
+ compile_timestamp_ = timestamp;
+ }
+
intptr_t inclusive_ticks() const { return inclusive_ticks_; }
void set_inclusive_ticks(intptr_t inclusive_ticks) {
inclusive_ticks_ = inclusive_ticks;
@@ -272,17 +310,25 @@
return "Collected";
case kNativeCode:
return "Native";
+ case kReusedCode:
+ return "Overwritten";
+ case kTagCode:
+ return "Tag";
}
UNREACHABLE();
return NULL;
}
void DebugPrint() const {
- printf("%s [%" Px ", %" Px ") %s\n", KindToCString(kind_), start(), end(),
- name_);
+ OS::Print("%s [%" Px ", %" Px ") %" Pd " %" Pd64 "\n",
+ KindToCString(kind_),
+ start(),
+ end(),
+ creation_serial_,
+ compile_timestamp_);
}
- void AddTickAtAddress(uword pc, bool exclusive, intptr_t serial) {
+ void Tick(uword pc, bool exclusive, intptr_t serial) {
// Assert that exclusive ticks are never passed a valid serial number.
ASSERT((exclusive && (serial == -1)) || (!exclusive && (serial != -1)));
if (!exclusive && (inclusive_tick_serial_ == serial)) {
@@ -293,35 +339,11 @@
if (exclusive) {
exclusive_ticks_++;
} else {
+ inclusive_ticks_++;
// Mark the last serial we ticked the inclusive count.
inclusive_tick_serial_ = serial;
- inclusive_ticks_++;
}
- // Tick the address entry.
- const intptr_t length = address_table_->length();
- intptr_t i = 0;
- for (; i < length; i++) {
- AddressEntry& entry = (*address_table_)[i];
- if (entry.pc == pc) {
- entry.tick(exclusive);
- return;
- }
- if (entry.pc > pc) {
- break;
- }
- }
- AddressEntry entry;
- entry.pc = pc;
- entry.exclusive_ticks = 0;
- entry.inclusive_ticks = 0;
- entry.tick(exclusive);
- if (i < length) {
- // Insert at i.
- address_table_->InsertAt(i, entry);
- } else {
- // Add to end.
- address_table_->Add(entry);
- }
+ TickAddress(pc, exclusive);
}
void AddCaller(intptr_t index) {
@@ -341,7 +363,16 @@
obj.AddProperty("user_name", name());
obj.AddPropertyF("start", "%" Px "", start());
obj.AddPropertyF("end", "%" Px "", end());
- obj.AddPropertyF("id", "code/native/%" Px "", start());
+ obj.AddPropertyF("id", "code/native-%" Px "", start());
+ {
+ // Generate a fake function entry.
+ JSONObject func(&obj, "function");
+ func.AddProperty("type", "@Function");
+ func.AddPropertyF("id", "functions/native-%" Px "", start());
+ func.AddProperty("name", name());
+ func.AddProperty("user_name", name());
+ func.AddProperty("kind", "Native");
+ }
}
void PrintCollectedCode(JSONObject* profile_code_obj) {
@@ -353,18 +384,48 @@
obj.AddProperty("user_name", name());
obj.AddPropertyF("start", "%" Px "", start());
obj.AddPropertyF("end", "%" Px "", end());
- obj.AddPropertyF("id", "code/collected/%" Px "", start());
+ obj.AddPropertyF("id", "code/collected-%" Px "", start());
+ {
+ // Generate a fake function entry.
+ JSONObject func(&obj, "function");
+ func.AddProperty("type", "@Function");
+ obj.AddPropertyF("id", "functions/collected-%" Px "", start());
+ func.AddProperty("name", name());
+ func.AddProperty("user_name", name());
+ func.AddProperty("kind", "Collected");
+ }
+ }
+
+ void PrintOverwrittenCode(JSONObject* profile_code_obj) {
+ ASSERT(kind() == kReusedCode);
+ JSONObject obj(profile_code_obj, "code");
+ obj.AddProperty("type", "@Code");
+ obj.AddProperty("kind", "Reused");
+ obj.AddProperty("name", name());
+ obj.AddProperty("user_name", name());
+ obj.AddPropertyF("start", "%" Px "", start());
+ obj.AddPropertyF("end", "%" Px "", end());
+ obj.AddPropertyF("id", "code/reused-%" Px "", start());
+ {
+ // Generate a fake function entry.
+ JSONObject func(&obj, "function");
+ func.AddProperty("type", "@Function");
+ obj.AddPropertyF("id", "functions/reused-%" Px "", start());
+ func.AddProperty("name", name());
+ func.AddProperty("user_name", name());
+ func.AddProperty("kind", "Reused");
+ }
}
void PrintToJSONArray(Isolate* isolate, JSONArray* events, bool full) {
JSONObject obj(events);
- obj.AddProperty("type", "ProfileCode");
+ obj.AddProperty("type", "CodeRegion");
obj.AddProperty("kind", KindToCString(kind()));
obj.AddPropertyF("inclusive_ticks", "%" Pd "", inclusive_ticks());
obj.AddPropertyF("exclusive_ticks", "%" Pd "", exclusive_ticks());
if (kind() == kDartCode) {
// Look up code in Dart heap.
- Code& code = Code::Handle();
+ Code& code = Code::Handle(isolate);
code ^= Code::LookupCode(start());
if (code.IsNull()) {
// Code is a stub in the Vm isolate.
@@ -375,14 +436,20 @@
} else if (kind() == kCollectedCode) {
if (name() == NULL) {
// Lazily set generated name.
- GenerateAndSetSymbolName("Collected");
+ GenerateAndSetSymbolName("[Collected]");
}
PrintCollectedCode(&obj);
+ } else if (kind() == kReusedCode) {
+ if (name() == NULL) {
+ // Lazily set generated name.
+ GenerateAndSetSymbolName("[Reused]");
+ }
+ PrintOverwrittenCode(&obj);
} else {
ASSERT(kind() == kNativeCode);
if (name() == NULL) {
// Lazily set generated name.
- GenerateAndSetSymbolName("Native");
+ GenerateAndSetSymbolName("[Native]");
}
PrintNativeCode(&obj);
}
@@ -414,6 +481,36 @@
}
private:
+ void TickAddress(uword pc, bool exclusive) {
+ const intptr_t length = address_table_->length();
+ intptr_t i = 0;
+ for (; i < length; i++) {
+ AddressEntry& entry = (*address_table_)[i];
+ if (entry.pc == pc) {
+ // Tick the address entry.
+ entry.tick(exclusive);
+ return;
+ }
+ if (entry.pc > pc) {
+ break;
+ }
+ }
+ // New address, add entry.
+ AddressEntry entry;
+ entry.pc = pc;
+ entry.exclusive_ticks = 0;
+ entry.inclusive_ticks = 0;
+ entry.tick(exclusive);
+ if (i < length) {
+ // Insert at i.
+ address_table_->InsertAt(i, entry);
+ } else {
+ // Add to end.
+ address_table_->Add(entry);
+ }
+ }
+
+
void AddCallEntry(ZoneGrowableArray<CallEntry>* table, intptr_t index) {
const intptr_t length = table->length();
intptr_t i = 0;
@@ -445,77 +542,72 @@
SetName(buff);
}
- Kind kind_;
+ // CodeRegion kind.
+ const Kind kind_;
+ // CodeRegion start address.
uword start_;
+ // CodeRegion end address.
uword end_;
+ // Inclusive ticks.
intptr_t inclusive_ticks_;
+ // Exclusive ticks.
intptr_t exclusive_ticks_;
+ // Inclusive tick serial number, ensures that each CodeRegion is only given
+ // a single inclusive tick per sample.
intptr_t inclusive_tick_serial_;
+ // Name of code region.
const char* name_;
+ // The compilation timestamp associated with this code region.
+ int64_t compile_timestamp_;
+ // Serial number at which this CodeRegion was created.
+ intptr_t creation_serial_;
ZoneGrowableArray<AddressEntry>* address_table_;
ZoneGrowableArray<CallEntry>* callers_table_;
ZoneGrowableArray<CallEntry>* callees_table_;
DISALLOW_COPY_AND_ASSIGN(CodeRegion);
};
-
-class ScopeStopwatch : public ValueObject {
+// A sorted table of CodeRegions. Does not allow for overlap.
+class CodeRegionTable : public ValueObject {
public:
- explicit ScopeStopwatch(const char* name) : name_(name) {
- start_ = OS::GetCurrentTimeMillis();
- }
+ enum TickResult {
+ kTicked = 0, // CodeRegion found and ticked.
+ kNotFound = -1, // No CodeRegion found.
+ kNewerCode = -2, // CodeRegion found but it was compiled after sample.
+ };
- intptr_t GetElapsed() const {
- intptr_t end = OS::GetCurrentTimeMillis();
- ASSERT(end >= start_);
- return end - start_;
- }
-
- ~ScopeStopwatch() {
- if (FLAG_trace_profiled_isolates) {
- intptr_t elapsed = GetElapsed();
- OS::Print("%s took %" Pd " millis.\n", name_, elapsed);
- }
- }
-
- private:
- const char* name_;
- intptr_t start_;
-};
-
-
-// All code regions. Code region tables are built on demand when a profile
-// is requested (through the service or on isolate shutdown).
-class ProfilerCodeRegionTable : public ValueObject {
- public:
- explicit ProfilerCodeRegionTable(Isolate* isolate) :
- heap_(isolate->heap()),
+ CodeRegionTable() :
code_region_table_(new ZoneGrowableArray<CodeRegion*>(64)) {
}
- ~ProfilerCodeRegionTable() {
- }
-
- void AddTick(uword pc, bool exclusive, intptr_t serial) {
+ // Ticks the CodeRegion containing pc if it is alive at timestamp.
+ TickResult Tick(uword pc, bool exclusive, intptr_t serial,
+ int64_t timestamp) {
intptr_t index = FindIndex(pc);
if (index < 0) {
- CodeRegion* code_region = CreateCodeRegion(pc);
- ASSERT(code_region != NULL);
- index = InsertCodeRegion(code_region);
+ // Not found.
+ return kNotFound;
}
- ASSERT(index >= 0);
ASSERT(index < code_region_table_->length());
-
- // Update code object counters.
- (*code_region_table_)[index]->AddTickAtAddress(pc, exclusive, serial);
+ CodeRegion* region = At(index);
+ if (region->compile_timestamp() > timestamp) {
+ // Compiled after tick.
+ return kNewerCode;
+ }
+ region->Tick(pc, exclusive, serial);
+ return kTicked;
}
+ // Table length.
intptr_t Length() const { return code_region_table_->length(); }
- CodeRegion* At(intptr_t idx) {
- return (*code_region_table_)[idx];
+ // Get the CodeRegion at index.
+ CodeRegion* At(intptr_t index) const {
+ return (*code_region_table_)[index];
}
+ // Find the table index to the CodeRegion containing pc.
+ // Returns < 0 if not found.
intptr_t FindIndex(uword pc) const {
intptr_t index = FindRegionIndex(pc, &CompareLowerBound);
const CodeRegion* code_region = NULL;
@@ -523,12 +615,71 @@
// Not present.
return -1;
}
- code_region = (*code_region_table_)[index];
+ code_region = At(index);
if (code_region->contains(pc)) {
// Found at index.
return index;
}
- return -1;
+ return -2;
+ }
+
+ // Insert code_region into the table. Returns the table index where the
+ // CodeRegion was inserted. Will merge with an overlapping CodeRegion if
+ // one is present.
+ intptr_t InsertCodeRegion(CodeRegion* code_region) {
+ const uword start = code_region->start();
+ const uword end = code_region->end();
+ const intptr_t length = code_region_table_->length();
+ if (length == 0) {
+ code_region_table_->Add(code_region);
+ return length;
+ }
+ // Determine the correct place to insert or merge code_region into table.
+ intptr_t lo = FindRegionIndex(start, &CompareLowerBound);
+ intptr_t hi = FindRegionIndex(end - 1, &CompareUpperBound);
+ // TODO(johnmccutchan): Simplify below logic.
+ if ((lo == length) && (hi == length)) {
+ lo = length - 1;
+ }
+ if (lo == length) {
+ CodeRegion* region = At(hi);
+ if (region->overlaps(code_region)) {
+ HandleOverlap(region, code_region, start, end);
+ return hi;
+ }
+ code_region_table_->Add(code_region);
+ return length;
+ } else if (hi == length) {
+ CodeRegion* region = At(lo);
+ if (region->overlaps(code_region)) {
+ HandleOverlap(region, code_region, start, end);
+ return lo;
+ }
+ code_region_table_->Add(code_region);
+ return length;
+ } else if (lo == hi) {
+ CodeRegion* region = At(lo);
+ if (region->overlaps(code_region)) {
+ HandleOverlap(region, code_region, start, end);
+ return lo;
+ }
+ code_region_table_->InsertAt(lo, code_region);
+ return lo;
+ } else {
+ CodeRegion* region = At(lo);
+ if (region->overlaps(code_region)) {
+ HandleOverlap(region, code_region, start, end);
+ return lo;
+ }
+ region = At(hi);
+ if (region->overlaps(code_region)) {
+ HandleOverlap(region, code_region, start, end);
+ return hi;
+ }
+ code_region_table_->InsertAt(hi, code_region);
+ return hi;
+ }
+ UNREACHABLE();
}
#if defined(DEBUG)
@@ -538,6 +689,14 @@
}
#endif
+ void DebugPrint() {
+ OS::Print("Dumping CodeRegionTable:\n");
+ for (intptr_t i = 0; i < code_region_table_->length(); i++) {
+ CodeRegion* region = At(i);
+ region->DebugPrint();
+ }
+ }
+
private:
intptr_t FindRegionIndex(uword pc, RegionCompare comparator) const {
ASSERT(comparator != NULL);
@@ -547,7 +706,7 @@
intptr_t it = first;
intptr_t step = count / 2;
it += step;
- const CodeRegion* code_region = (*code_region_table_)[it];
+ const CodeRegion* code_region = At(it);
if (comparator(pc, code_region->start(), code_region->end())) {
first = ++it;
count -= (step + 1);
@@ -566,38 +725,6 @@
return end <= pc;
}
- CodeRegion* CreateCodeRegion(uword pc) {
- Code& code = Code::Handle();
- code ^= Code::LookupCode(pc);
- if (!code.IsNull()) {
- return new CodeRegion(CodeRegion::kDartCode, code.EntryPoint(),
- code.EntryPoint() + code.Size());
- }
- code ^= Code::LookupCodeInVmIsolate(pc);
- if (!code.IsNull()) {
- return new CodeRegion(CodeRegion::kDartCode, code.EntryPoint(),
- code.EntryPoint() + code.Size());
- }
- if (heap_->CodeContains(pc)) {
- const intptr_t kDartCodeAlignment = OS::PreferredCodeAlignment();
- const intptr_t kDartCodeAlignmentMask = ~(kDartCodeAlignment - 1);
- return new CodeRegion(CodeRegion::kCollectedCode, pc,
- (pc & kDartCodeAlignmentMask) + kDartCodeAlignment);
- }
- uintptr_t native_start = 0;
- char* native_name = NativeSymbolResolver::LookupSymbolName(pc,
- &native_start);
- if (native_name == NULL) {
- return new CodeRegion(CodeRegion::kNativeCode, pc, pc + 1);
- }
- ASSERT(pc >= native_start);
- CodeRegion* code_region =
- new CodeRegion(CodeRegion::kNativeCode, native_start, pc + 1);
- code_region->SetName(native_name);
- free(native_name);
- return code_region;
- }
-
void HandleOverlap(CodeRegion* region, CodeRegion* code_region,
uword start, uword end) {
// We should never see overlapping Dart code regions.
@@ -607,61 +734,6 @@
region->AdjustExtent(start, end);
}
- intptr_t InsertCodeRegion(CodeRegion* code_region) {
- const uword start = code_region->start();
- const uword end = code_region->end();
- const intptr_t length = code_region_table_->length();
- if (length == 0) {
- code_region_table_->Add(code_region);
- return length;
- }
- // Determine the correct place to insert or merge code_region into table.
- intptr_t lo = FindRegionIndex(start, &CompareLowerBound);
- intptr_t hi = FindRegionIndex(end - 1, &CompareUpperBound);
- if ((lo == length) && (hi == length)) {
- lo = length - 1;
- }
- if (lo == length) {
- CodeRegion* region = (*code_region_table_)[hi];
- if (region->overlaps(code_region)) {
- HandleOverlap(region, code_region, start, end);
- return hi;
- }
- code_region_table_->Add(code_region);
- return length;
- } else if (hi == length) {
- CodeRegion* region = (*code_region_table_)[lo];
- if (region->overlaps(code_region)) {
- HandleOverlap(region, code_region, start, end);
- return lo;
- }
- code_region_table_->Add(code_region);
- return length;
- } else if (lo == hi) {
- CodeRegion* region = (*code_region_table_)[lo];
- if (region->overlaps(code_region)) {
- HandleOverlap(region, code_region, start, end);
- return lo;
- }
- code_region_table_->InsertAt(lo, code_region);
- return lo;
- } else {
- CodeRegion* region = (*code_region_table_)[lo];
- if (region->overlaps(code_region)) {
- HandleOverlap(region, code_region, start, end);
- return lo;
- }
- region = (*code_region_table_)[hi];
- if (region->overlaps(code_region)) {
- HandleOverlap(region, code_region, start, end);
- return hi;
- }
- code_region_table_->InsertAt(hi, code_region);
- return hi;
- }
- UNREACHABLE();
- }
-
#if defined(DEBUG)
void VerifyOrder() {
const intptr_t length = code_region_table_->length();
@@ -691,7 +763,6 @@
}
#endif
- Heap* heap_;
ZoneGrowableArray<CodeRegion*>* code_region_table_;
};
@@ -699,11 +770,20 @@
class CodeRegionTableBuilder : public SampleVisitor {
public:
CodeRegionTableBuilder(Isolate* isolate,
- ProfilerCodeRegionTable* code_region_table)
- : SampleVisitor(isolate), code_region_table_(code_region_table) {
+ CodeRegionTable* live_code_table,
+ CodeRegionTable* dead_code_table)
+ : SampleVisitor(isolate),
+ live_code_table_(live_code_table),
+ dead_code_table_(dead_code_table),
+ isolate_(isolate),
+ vm_isolate_(Dart::vm_isolate()) {
+ ASSERT(live_code_table_ != NULL);
+ ASSERT(dead_code_table_ != NULL);
frames_ = 0;
min_time_ = kMaxInt64;
max_time_ = 0;
+ ASSERT(isolate_ != NULL);
+ ASSERT(vm_isolate_ != NULL);
}
void VisitSample(Sample* sample) {
@@ -714,44 +794,148 @@
if (timestamp < min_time_) {
min_time_ = timestamp;
}
- // Give the bottom frame an exclusive tick.
- code_region_table_->AddTick(sample->At(0), true, -1);
- // Give all frames (including the bottom) an inclusive tick.
+ // Exclusive tick for bottom frame.
+ Tick(sample->At(0), true, timestamp);
+ // Inclusive tick for all frames.
for (intptr_t i = 0; i < FLAG_profile_depth; i++) {
if (sample->At(i) == 0) {
break;
}
frames_++;
- code_region_table_->AddTick(sample->At(i), false, visited());
+ Tick(sample->At(i), false, timestamp);
}
}
intptr_t frames() const { return frames_; }
+
intptr_t TimeDeltaMicros() const {
return static_cast<intptr_t>(max_time_ - min_time_);
}
int64_t max_time() const { return max_time_; }
private:
+ void Tick(uword pc, bool exclusive, int64_t timestamp) {
+ CodeRegionTable::TickResult r;
+ intptr_t serial = exclusive ? -1 : visited();
+ r = live_code_table_->Tick(pc, exclusive, serial, timestamp);
+ if (r == CodeRegionTable::kTicked) {
+ // Live code found and ticked.
+ return;
+ }
+ if (r == CodeRegionTable::kNewerCode) {
+ // Code has been overwritten by newer code.
+ // Update shadow table of dead code regions.
+ r = dead_code_table_->Tick(pc, exclusive, serial, timestamp);
+ ASSERT(r != CodeRegionTable::kNewerCode);
+ if (r == CodeRegionTable::kTicked) {
+ // Dead code found and ticked.
+ return;
+ }
+ ASSERT(r == CodeRegionTable::kNotFound);
+ CreateAndTickDeadCodeRegion(pc, exclusive, serial);
+ return;
+ }
+ // Create new live CodeRegion.
+ ASSERT(r == CodeRegionTable::kNotFound);
+ CodeRegion* region = CreateCodeRegion(pc);
+ region->set_creation_serial(visited());
+ intptr_t index = live_code_table_->InsertCodeRegion(region);
+ ASSERT(index >= 0);
+ region = live_code_table_->At(index);
+ if (region->compile_timestamp() <= timestamp) {
+ region->Tick(pc, exclusive, serial);
+ return;
+ }
+ // We have created a new code region but it's for a CodeRegion
+ // compiled after the sample.
+ ASSERT(region->kind() == CodeRegion::kDartCode);
+ CreateAndTickDeadCodeRegion(pc, exclusive, serial);
+ }
+
+ void CreateAndTickDeadCodeRegion(uword pc, bool exclusive, intptr_t serial) {
+ // Need to create dead code.
+ CodeRegion* region = new CodeRegion(CodeRegion::kReusedCode,
+ pc,
+ pc + 1,
+ 0);
+ intptr_t index = dead_code_table_->InsertCodeRegion(region);
+ region->set_creation_serial(visited());
+ ASSERT(index >= 0);
+ dead_code_table_->At(index)->Tick(pc, exclusive, serial);
+ }
+
+ CodeRegion* CreateCodeRegion(uword pc) {
+ const intptr_t kDartCodeAlignment = OS::PreferredCodeAlignment();
+ const intptr_t kDartCodeAlignmentMask = ~(kDartCodeAlignment - 1);
+ Code& code = Code::Handle(isolate_);
+ // Check current isolate for pc.
+ if (isolate_->heap()->CodeContains(pc)) {
+ code ^= Code::LookupCode(pc);
+ if (!code.IsNull()) {
+ return new CodeRegion(CodeRegion::kDartCode, code.EntryPoint(),
+ code.EntryPoint() + code.Size(),
+ code.compile_timestamp());
+ }
+ return new CodeRegion(CodeRegion::kCollectedCode, pc,
+ (pc & kDartCodeAlignmentMask) + kDartCodeAlignment,
+ 0);
+ }
+ // Check VM isolate for pc.
+ if (vm_isolate_->heap()->CodeContains(pc)) {
+ code ^= Code::LookupCodeInVmIsolate(pc);
+ if (!code.IsNull()) {
+ return new CodeRegion(CodeRegion::kDartCode, code.EntryPoint(),
+ code.EntryPoint() + code.Size(),
+ code.compile_timestamp());
+ }
+ return new CodeRegion(CodeRegion::kCollectedCode, pc,
+ (pc & kDartCodeAlignmentMask) + kDartCodeAlignment,
+ 0);
+ }
+ // Check NativeSymbolResolver for pc.
+ uintptr_t native_start = 0;
+ char* native_name = NativeSymbolResolver::LookupSymbolName(pc,
+ &native_start);
+ if (native_name == NULL) {
+ // No native name found.
+ return new CodeRegion(CodeRegion::kNativeCode, pc, pc + 1, 0);
+ }
+ ASSERT(pc >= native_start);
+ CodeRegion* code_region =
+ new CodeRegion(CodeRegion::kNativeCode, native_start, pc + 1, 0);
+ code_region->SetName(native_name);
+ free(native_name);
+ return code_region;
+ }
+
intptr_t frames_;
int64_t min_time_;
int64_t max_time_;
- ProfilerCodeRegionTable* code_region_table_;
+ CodeRegionTable* live_code_table_;
+ CodeRegionTable* dead_code_table_;
+ Isolate* isolate_;
+ Isolate* vm_isolate_;
};
class CodeRegionTableCallersBuilder : public SampleVisitor {
public:
CodeRegionTableCallersBuilder(Isolate* isolate,
- ProfilerCodeRegionTable* code_region_table)
- : SampleVisitor(isolate), code_region_table_(code_region_table) {
- ASSERT(code_region_table_ != NULL);
+ CodeRegionTable* live_code_table,
+ CodeRegionTable* dead_code_table)
+ : SampleVisitor(isolate),
+ live_code_table_(live_code_table),
+ dead_code_table_(dead_code_table) {
+ ASSERT(live_code_table_ != NULL);
+ ASSERT(dead_code_table_ != NULL);
+ dead_code_table_offset_ = live_code_table_->Length();
}
void VisitSample(Sample* sample) {
- intptr_t current_index = code_region_table_->FindIndex(sample->At(0));
- ASSERT(current_index != -1);
- CodeRegion* current = code_region_table_->At(current_index);
+ int64_t timestamp = sample->timestamp();
+ intptr_t current_index = FindFinalIndex(sample->At(0), timestamp);
+ ASSERT(current_index >= 0);
+ CodeRegion* current = At(current_index);
intptr_t caller_index = -1;
CodeRegion* caller = NULL;
intptr_t callee_index = -1;
@@ -760,9 +944,9 @@
if (sample->At(i) == 0) {
break;
}
- caller_index = code_region_table_->FindIndex(sample->At(i));
- ASSERT(caller_index != -1);
- caller = code_region_table_->At(caller_index);
+ caller_index = FindFinalIndex(sample->At(i), timestamp);
+ ASSERT(caller_index >= 0);
+ caller = At(caller_index);
current->AddCaller(caller_index);
if (callee != NULL) {
current->AddCallee(callee_index);
@@ -776,7 +960,36 @@
}
private:
- ProfilerCodeRegionTable* code_region_table_;
+ intptr_t FindFinalIndex(uword pc, int64_t timestamp) const {
+ intptr_t index = live_code_table_->FindIndex(pc);
+ ASSERT(index >= 0);
+ CodeRegion* region = live_code_table_->At(index);
+ ASSERT(region->contains(pc));
+ if (region->compile_timestamp() > timestamp) {
+ // Overwritten code, find in dead code table.
+ index = dead_code_table_->FindIndex(pc);
+ ASSERT(index >= 0);
+ region = dead_code_table_->At(index);
+ ASSERT(region->contains(pc));
+ ASSERT(region->compile_timestamp() <= timestamp);
+ return index + dead_code_table_offset_;
+ }
+ ASSERT(region->compile_timestamp() <= timestamp);
+ return index;
+ }
+
+ CodeRegion* At(intptr_t final_index) {
+ ASSERT(final_index >= 0);
+ if (final_index < dead_code_table_offset_) {
+ return live_code_table_->At(final_index);
+ } else {
+ return dead_code_table_->At(final_index - dead_code_table_offset_);
+ }
+ }
+
+ CodeRegionTable* live_code_table_;
+ CodeRegionTable* dead_code_table_;
+ intptr_t dead_code_table_offset_;
};
void Profiler::PrintToJSONStream(Isolate* isolate, JSONStream* stream,
@@ -797,38 +1010,59 @@
{
StackZone zone(isolate);
{
- // Build code region table.
- ProfilerCodeRegionTable code_region_table(isolate);
- CodeRegionTableBuilder builder(isolate, &code_region_table);
- CodeRegionTableCallersBuilder build_callers(isolate, &code_region_table);
+ // Live code holds Dart, Native, and Collected CodeRegions.
+ CodeRegionTable live_code_table;
+ // Dead code holds Overwritten CodeRegions.
+ CodeRegionTable dead_code_table;
+ CodeRegionTableBuilder builder(isolate,
+ &live_code_table,
+ &dead_code_table);
{
+ // Build CodeRegion tables.
ScopeStopwatch sw("CodeTableBuild");
sample_buffer->VisitSamples(&builder);
}
-#if defined(DEBUG)
- code_region_table.Verify();
-#endif
- {
- ScopeStopwatch sw("CodeTableCallersBuild");
- sample_buffer->VisitSamples(&build_callers);
- }
- // Number of samples we processed.
intptr_t samples = builder.visited();
intptr_t frames = builder.frames();
if (FLAG_trace_profiled_isolates) {
- OS::Print("%" Pd " frames produced %" Pd " code objects.\n",
- frames, code_region_table.Length());
+ intptr_t total_live_code_objects = live_code_table.Length();
+ intptr_t total_dead_code_objects = dead_code_table.Length();
+ OS::Print("Processed %" Pd " frames\n", frames);
+ OS::Print("CodeTables: live=%" Pd " dead=%" Pd "\n",
+ total_live_code_objects,
+ total_dead_code_objects);
+ }
+#if defined(DEBUG)
+ live_code_table.Verify();
+ dead_code_table.Verify();
+ if (FLAG_trace_profiled_isolates) {
+ OS::Print("CodeRegionTables verified to be ordered and not overlap.\n");
+ }
+#endif
+ CodeRegionTableCallersBuilder build_callers(isolate,
+ &live_code_table,
+ &dead_code_table);
+ {
+ // Build CodeRegion callers.
+ ScopeStopwatch sw("CodeTableCallersBuild");
+ sample_buffer->VisitSamples(&build_callers);
}
{
ScopeStopwatch sw("CodeTableStream");
// Serialize to JSON.
JSONObject obj(stream);
obj.AddProperty("type", "Profile");
+ obj.AddProperty("id", "profile");
obj.AddProperty("samples", samples);
obj.AddProperty("time_delta_micros", builder.TimeDeltaMicros());
JSONArray codes(&obj, "codes");
- for (intptr_t i = 0; i < code_region_table.Length(); i++) {
- CodeRegion* region = code_region_table.At(i);
+ for (intptr_t i = 0; i < live_code_table.Length(); i++) {
+ CodeRegion* region = live_code_table.At(i);
+ ASSERT(region != NULL);
+ region->PrintToJSONArray(isolate, &codes, full);
+ }
+ for (intptr_t i = 0; i < dead_code_table.Length(); i++) {
+ CodeRegion* region = dead_code_table.At(i);
ASSERT(region != NULL);
region->PrintToJSONArray(isolate, &codes, full);
}
diff --git a/runtime/vm/raw_object.h b/runtime/vm/raw_object.h
index 21f97e2..087be7d 100644
--- a/runtime/vm/raw_object.h
+++ b/runtime/vm/raw_object.h
@@ -444,6 +444,7 @@
friend class GCMarker;
friend class ExternalTypedData;
friend class Heap;
+ friend class HeapMapAsJSONVisitor;
friend class ClassStatsVisitor;
friend class MarkingVisitor;
friend class Object;
@@ -591,6 +592,7 @@
kMethodExtractor, // converts method into implicit closure on the receiver.
kNoSuchMethodDispatcher, // invokes noSuchMethod.
kInvokeFieldDispatcher, // invokes a field as a closure.
+ kInvokeClosureDispatcher // invokes this as a closure (implements .call)
};
private:
@@ -803,8 +805,10 @@
RawLibrary* library_; // library with name dictionary.
RawArray* show_names_; // list of names that are exported.
RawArray* hide_names_; // blacklist of names that are not exported.
+ RawField* metadata_field_; // remembers the token pos of metadata if any,
+ // and the metadata values if computed.
RawObject** to() {
- return reinterpret_cast<RawObject**>(&ptr()->hide_names_);
+ return reinterpret_cast<RawObject**>(&ptr()->metadata_field_);
}
};
@@ -832,6 +836,8 @@
return reinterpret_cast<RawObject**>(&ptr()->comments_);
}
+ // Compilation timestamp.
+ int64_t compile_timestamp_;
intptr_t pointer_offsets_length_;
// Alive: If true, the embedded object pointers will be visited during GC.
// This field cannot be shorter because of alignment issues on x64
diff --git a/runtime/vm/reusable_handles.h b/runtime/vm/reusable_handles.h
index ba9b256..4cbf721 100644
--- a/runtime/vm/reusable_handles.h
+++ b/runtime/vm/reusable_handles.h
@@ -24,120 +24,78 @@
// Array& funcs = reused_handles.ArrayHandle();
// ....
// }
+
#if defined(DEBUG)
-class ReusableObjectHandleScope : public StackResource {
- public:
- explicit ReusableObjectHandleScope(Isolate* isolate)
- : StackResource(isolate), isolate_(isolate) {
- ASSERT(!isolate->reusable_handle_scope_active());
- isolate->set_reusable_handle_scope_active(true);
- }
- ReusableObjectHandleScope()
- : StackResource(Isolate::Current()), isolate_(Isolate::Current()) {
- ASSERT(!isolate()->reusable_handle_scope_active());
- isolate()->set_reusable_handle_scope_active(true);
- }
- ~ReusableObjectHandleScope() {
- ASSERT(isolate()->reusable_handle_scope_active());
- isolate()->set_reusable_handle_scope_active(false);
- Handle().raw_ = Object::null();
- }
- Object& Handle() const {
- ASSERT(isolate_->Object_handle_ != NULL);
- return *isolate_->Object_handle_;
- }
-
- private:
- Isolate* isolate_;
- DISALLOW_COPY_AND_ASSIGN(ReusableObjectHandleScope);
-};
-
-
-class ReusableHandleScope : public StackResource {
- public:
- explicit ReusableHandleScope(Isolate* isolate)
- : StackResource(isolate), isolate_(isolate) {
- ASSERT(!isolate->reusable_handle_scope_active());
- isolate->set_reusable_handle_scope_active(true);
- }
- ReusableHandleScope()
- : StackResource(Isolate::Current()), isolate_(Isolate::Current()) {
- ASSERT(!isolate()->reusable_handle_scope_active());
- isolate()->set_reusable_handle_scope_active(true);
- }
- ~ReusableHandleScope() {
- ASSERT(isolate()->reusable_handle_scope_active());
- isolate()->set_reusable_handle_scope_active(false);
-#define CLEAR_REUSABLE_HANDLE(object) \
- object##Handle().raw_ = Object::null(); \
-
- REUSABLE_HANDLE_LIST(CLEAR_REUSABLE_HANDLE);
- }
-
-#define REUSABLE_HANDLE_ACCESSORS(object) \
- object& object##Handle() const { \
- ASSERT(isolate_->object##_handle_ != NULL); \
- return *isolate_->object##_handle_; \
- } \
-
- REUSABLE_HANDLE_LIST(REUSABLE_HANDLE_ACCESSORS)
-#undef REUSABLE_HANDLE_ACCESSORS
-
- private:
- void ResetHandles();
- Isolate* isolate_;
- DISALLOW_COPY_AND_ASSIGN(ReusableHandleScope);
-};
+#define REUSABLE_SCOPE(name) \
+ class Reusable##name##HandleScope : public ValueObject { \
+ public: \
+ explicit Reusable##name##HandleScope(Isolate* isolate) \
+ : isolate_(isolate) { \
+ ASSERT(!isolate->reusable_##name##_handle_scope_active()); \
+ isolate->set_reusable_##name##_handle_scope_active(true); \
+ } \
+ Reusable##name##HandleScope() : isolate_(Isolate::Current()) { \
+ ASSERT(!isolate_->reusable_##name##_handle_scope_active()); \
+ isolate_->set_reusable_##name##_handle_scope_active(true); \
+ } \
+ ~Reusable##name##HandleScope() { \
+ ASSERT(isolate_->reusable_##name##_handle_scope_active()); \
+ isolate_->set_reusable_##name##_handle_scope_active(false); \
+ Handle().raw_ = name::null(); \
+ } \
+ name& Handle() const { \
+ ASSERT(isolate_->name##_handle_ != NULL); \
+ return *isolate_->name##_handle_; \
+ } \
+ private: \
+ Isolate* isolate_; \
+ DISALLOW_COPY_AND_ASSIGN(Reusable##name##HandleScope); \
+ };
#else
-class ReusableObjectHandleScope : public ValueObject {
- public:
- explicit ReusableObjectHandleScope(Isolate* isolate)
- : handle_(isolate->Object_handle_) {
- }
- ReusableObjectHandleScope() : handle_(Isolate::Current()->Object_handle_) {
- }
- ~ReusableObjectHandleScope() {
- handle_->raw_ = Object::null();
- }
- Object& Handle() const {
- ASSERT(handle_ != NULL);
- return *handle_;
- }
-
- private:
- Object* handle_;
- DISALLOW_COPY_AND_ASSIGN(ReusableObjectHandleScope);
-};
-
-
-class ReusableHandleScope : public ValueObject {
- public:
- explicit ReusableHandleScope(Isolate* isolate) : isolate_(isolate) {
- }
- ReusableHandleScope() : isolate_(Isolate::Current()) {
- }
- ~ReusableHandleScope() {
-#define CLEAR_REUSABLE_HANDLE(object) \
- object##Handle().raw_ = Object::null(); \
-
- REUSABLE_HANDLE_LIST(CLEAR_REUSABLE_HANDLE);
- }
-
-#define REUSABLE_HANDLE_ACCESSORS(object) \
- object& object##Handle() const { \
- ASSERT(isolate_->object##_handle_ != NULL); \
- return *isolate_->object##_handle_; \
- } \
-
- REUSABLE_HANDLE_LIST(REUSABLE_HANDLE_ACCESSORS)
-#undef REUSABLE_HANDLE_ACCESSORS
-
- private:
- void ResetHandles();
- Isolate* isolate_;
- DISALLOW_COPY_AND_ASSIGN(ReusableHandleScope);
-};
+#define REUSABLE_SCOPE(name) \
+ class Reusable##name##HandleScope : public ValueObject { \
+ public: \
+ explicit Reusable##name##HandleScope(Isolate* isolate) \
+ : handle_(isolate->name##_handle_) { \
+ } \
+ Reusable##name##HandleScope() \
+ : handle_(Isolate::Current()->name##_handle_) { \
+ } \
+ ~Reusable##name##HandleScope() { \
+ handle_->raw_ = name::null(); \
+ } \
+ name& Handle() const { \
+ ASSERT(handle_ != NULL); \
+ return *handle_; \
+ } \
+ private: \
+ name* handle_; \
+ DISALLOW_COPY_AND_ASSIGN(Reusable##name##HandleScope); \
+ };
#endif // defined(DEBUG)
+REUSABLE_HANDLE_LIST(REUSABLE_SCOPE)
+#undef REUSABLE_SCOPE
+
+#define REUSABLE_OBJECT_HANDLESCOPE(isolate) \
+ ReusableObjectHandleScope reused_object_handle(isolate);
+#define REUSABLE_ERROR_HANDLESCOPE(isolate) \
+ ReusableErrorHandleScope reused_error_handle(isolate);
+#define REUSABLE_ARRAY_HANDLESCOPE(isolate) \
+ ReusableArrayHandleScope reused_array_handle(isolate);
+#define REUSABLE_STRING_HANDLESCOPE(isolate) \
+ ReusableStringHandleScope reused_string_handle(isolate);
+#define REUSABLE_INSTANCE_HANDLESCOPE(isolate) \
+ ReusableInstanceHandleScope reused_instance_handle(isolate);
+#define REUSABLE_FUNCTION_HANDLESCOPE(isolate) \
+ ReusableFunctionHandleScope reused_function_handle(isolate);
+#define REUSABLE_FIELD_HANDLESCOPE(isolate) \
+ ReusableFieldHandleScope reused_field_handle(isolate);
+#define REUSABLE_CLASS_HANDLESCOPE(isolate) \
+ ReusableClassHandleScope reused_class_handle(isolate);
+#define REUSABLE_TYPE_PARAMETER_HANDLESCOPE(isolate) \
+ ReusableTypeParameterHandleScope reused_type_parameter(isolate);
+#define REUSABLE_TYPE_ARGUMENTS_HANDLESCOPE(isolate) \
+ ReusableTypeArgumentsHandleScope reused_type_arguments_handle(isolate);
} // namespace dart
diff --git a/runtime/vm/scavenger.cc b/runtime/vm/scavenger.cc
index ae6501e..4b6ebe8 100644
--- a/runtime/vm/scavenger.cc
+++ b/runtime/vm/scavenger.cc
@@ -271,24 +271,29 @@
class ScavengerWeakVisitor : public HandleVisitor {
public:
- explicit ScavengerWeakVisitor(Scavenger* scavenger)
+ // 'prologue_weak_were_strong' is currently only used for sanity checking.
+ explicit ScavengerWeakVisitor(Scavenger* scavenger,
+ bool prologue_weak_were_strong)
: HandleVisitor(Isolate::Current()),
- scavenger_(scavenger) {
+ scavenger_(scavenger),
+ prologue_weak_were_strong_(prologue_weak_were_strong) {
}
void VisitHandle(uword addr, bool is_prologue_weak) {
FinalizablePersistentHandle* handle =
- reinterpret_cast<FinalizablePersistentHandle*>(addr);
+ reinterpret_cast<FinalizablePersistentHandle*>(addr);
RawObject** p = handle->raw_addr();
if (scavenger_->IsUnreachable(p)) {
- FinalizablePersistentHandle::Finalize(isolate(),
- handle,
- is_prologue_weak);
+ ASSERT(!is_prologue_weak || !prologue_weak_were_strong_);
+ handle->UpdateUnreachable(isolate(), is_prologue_weak);
+ } else {
+ handle->UpdateRelocated(isolate());
}
}
private:
Scavenger* scavenger_;
+ bool prologue_weak_were_strong_;
DISALLOW_COPY_AND_ASSIGN(ScavengerWeakVisitor);
};
@@ -324,7 +329,8 @@
object_alignment_(object_alignment),
scavenging_(false),
gc_time_micros_(0),
- collections_(0) {
+ collections_(0),
+ external_size_(0) {
// Verify assumptions about the first word in objects which the scavenger is
// going to use for forwarding pointers.
ASSERT(Object::tags_offset() == 0);
@@ -371,8 +377,8 @@
void Scavenger::Prologue(Isolate* isolate, bool invoke_api_callbacks) {
- if (invoke_api_callbacks) {
- isolate->gc_prologue_callbacks().Invoke();
+ if (invoke_api_callbacks && (isolate->gc_prologue_callback() != NULL)) {
+ (isolate->gc_prologue_callback())();
}
// Flip the two semi-spaces so that to_ is always the space for allocating
// objects.
@@ -408,8 +414,8 @@
memset(from_->pointer(), 0xf3, from_->size());
#endif // defined(DEBUG)
- if (invoke_api_callbacks) {
- isolate->gc_epilogue_callbacks().Invoke();
+ if (invoke_api_callbacks && (isolate->gc_epilogue_callback() != NULL)) {
+ (isolate->gc_epilogue_callback())();
}
}
@@ -686,16 +692,27 @@
OS::PrintErr(" done.\n");
}
+ // During from/to flip and promoted stack use, move external allocation
+ // out of tospace temporarily.
+ intptr_t saved_external = external_size_;
+ FreeExternal(saved_external);
+
// Setup the visitor and run a scavenge.
ScavengerVisitor visitor(isolate, this);
Prologue(isolate, invoke_api_callbacks);
- IterateRoots(isolate, &visitor, !invoke_api_callbacks);
+ const bool prologue_weak_are_strong = !invoke_api_callbacks;
+ IterateRoots(isolate, &visitor, prologue_weak_are_strong);
int64_t start = OS::GetCurrentTimeMicros();
ProcessToSpace(&visitor);
int64_t middle = OS::GetCurrentTimeMicros();
IterateWeakReferences(isolate, &visitor);
- ScavengerWeakVisitor weak_visitor(this);
- IterateWeakRoots(isolate, &weak_visitor, invoke_api_callbacks);
+ // Done with promoted stack; restore external allocation.
+ ASSERT(!PromotedStackHasMore());
+ AllocateExternal(saved_external);
+ ScavengerWeakVisitor weak_visitor(this, prologue_weak_are_strong);
+ // Include the prologue weak handles, since we must process any promotion.
+ const bool visit_prologue_weak_handles = true;
+ IterateWeakRoots(isolate, &weak_visitor, visit_prologue_weak_handles);
visitor.Finalize();
ProcessWeakTables();
int64_t end = OS::GetCurrentTimeMicros();
@@ -730,8 +747,24 @@
space.AddProperty("collections", collections());
space.AddProperty("used", UsedInWords() * kWordSize);
space.AddProperty("capacity", CapacityInWords() * kWordSize);
- space.AddProperty("time", RoundMicrosecondsToSeconds(gc_time_micros()));
+ space.AddProperty("external", ExternalInWords() * kWordSize);
+ space.AddProperty("time", MicrosecondsToSeconds(gc_time_micros()));
}
+void Scavenger::AllocateExternal(intptr_t size) {
+ ASSERT(size >= 0);
+ external_size_ += size;
+ intptr_t remaining = end_ - top_;
+ end_ -= Utils::Minimum(remaining, size);
+}
+
+
+void Scavenger::FreeExternal(intptr_t size) {
+ ASSERT(size >= 0);
+ external_size_ -= size;
+ ASSERT(external_size_ >= 0);
+ end_ = Utils::Minimum(to_->end(), end_ + size);
+}
+
} // namespace dart
diff --git a/runtime/vm/scavenger.h b/runtime/vm/scavenger.h
index 83e8a57..a9995a8 100644
--- a/runtime/vm/scavenger.h
+++ b/runtime/vm/scavenger.h
@@ -73,7 +73,12 @@
intptr_t UsedInWords() const {
return (top_ - FirstObjectStart()) >> kWordSizeLog2;
}
- intptr_t CapacityInWords() const { return space_->size() >> kWordSizeLog2; }
+ intptr_t CapacityInWords() const {
+ return (end_ - FirstObjectStart()) >> kWordSizeLog2;
+ }
+ intptr_t ExternalInWords() const {
+ return external_size_ >> kWordSizeLog2;
+ }
void VisitObjects(ObjectVisitor* visitor) const;
void VisitObjectPointers(ObjectPointerVisitor* visitor) const;
@@ -108,6 +113,9 @@
void PrintToJSONObject(JSONObject* object);
+ void AllocateExternal(intptr_t size);
+ void FreeExternal(intptr_t size);
+
private:
// Ids for time and data records in Heap::GCStats.
enum {
@@ -149,17 +157,23 @@
// object sizes are always greater than sizeof(uword) and promoted objects do
// not consume space in the to space they leave enough room for this stack.
void PushToPromotedStack(uword addr) {
+ ASSERT(scavenging_);
+ ASSERT(external_size_ == 0);
end_ -= sizeof(addr);
ASSERT(end_ > top_);
*reinterpret_cast<uword*>(end_) = addr;
}
uword PopFromPromotedStack() {
+ ASSERT(scavenging_);
+ ASSERT(external_size_ == 0);
uword result = *reinterpret_cast<uword*>(end_);
end_ += sizeof(result);
ASSERT(end_ <= to_->end());
return result;
}
bool PromotedStackHasMore() const {
+ ASSERT(scavenging_);
+ ASSERT(external_size_ == 0);
return end_ < to_->end();
}
@@ -194,6 +208,10 @@
int64_t gc_time_micros_;
intptr_t collections_;
+ // The total size of external data associated with objects in this scavenger.
+ // External allocations decrease end_. If promoted stack is in use, this is 0.
+ intptr_t external_size_;
+
friend class ScavengerVisitor;
friend class ScavengerWeakVisitor;
diff --git a/runtime/vm/scopes.cc b/runtime/vm/scopes.cc
index ba9d031..38e83b1 100644
--- a/runtime/vm/scopes.cc
+++ b/runtime/vm/scopes.cc
@@ -81,9 +81,10 @@
NameReference* LocalScope::FindReference(const String& name) const {
+ ASSERT(name.IsSymbol());
intptr_t num_references = referenced_.length();
for (intptr_t i = 0; i < num_references; i++) {
- if (name.Equals(referenced_[i]->name())) {
+ if (name.raw() == referenced_[i]->name().raw()) {
return referenced_[i];
}
}
@@ -300,7 +301,7 @@
desc.info.end_pos = var->owner()->end_token_pos();
desc.info.index = var->index();
vars->Add(desc);
- } else if (var->name().Equals(Symbols::SavedEntryContextVar())) {
+ } else if (var->name().raw() == Symbols::SavedEntryContextVar().raw()) {
// This is the local variable in which the function saves the
// caller's chain of closure contexts (caller's CTX register).
VarDesc desc;
@@ -311,7 +312,7 @@
desc.info.end_pos = 0;
desc.info.index = var->index();
vars->Add(desc);
- } else if (var->name().Equals(Symbols::SavedCurrentContextVar())) {
+ } else if (var->name().raw() == Symbols::SavedCurrentContextVar().raw()) {
// This is the local variable in which the function saves its
// own context before calling a closure function.
VarDesc desc;
@@ -334,9 +335,10 @@
SourceLabel* LocalScope::LocalLookupLabel(const String& name) const {
+ ASSERT(name.IsSymbol());
for (intptr_t i = 0; i < labels_.length(); i++) {
SourceLabel* label = labels_[i];
- if (label->name().Equals(name)) {
+ if (label->name().raw() == name.raw()) {
return label;
}
}
diff --git a/runtime/vm/scopes.h b/runtime/vm/scopes.h
index 89851e9..3836a21 100644
--- a/runtime/vm/scopes.h
+++ b/runtime/vm/scopes.h
@@ -35,6 +35,7 @@
index_(LocalVariable::kUninitializedIndex) {
ASSERT(type.IsZoneHandle());
ASSERT(type.IsFinalized());
+ ASSERT(name.IsSymbol());
}
intptr_t token_pos() const { return token_pos_; }
@@ -122,6 +123,7 @@
NameReference(intptr_t token_pos, const String& name)
: token_pos_(token_pos),
name_(name) {
+ ASSERT(name.IsSymbol());
}
const String& name() const { return name_; }
intptr_t token_pos() const { return token_pos_; }
@@ -151,6 +153,7 @@
name_(name),
owner_(NULL),
kind_(kind) {
+ ASSERT(name.IsSymbol());
}
static SourceLabel* New(intptr_t token_pos, String* name, Kind kind) {
diff --git a/runtime/vm/service.cc b/runtime/vm/service.cc
index 1019498..1903e4b 100644
--- a/runtime/vm/service.cc
+++ b/runtime/vm/service.cc
@@ -483,7 +483,7 @@
static void PrintArgumentsAndOptions(const JSONObject& obj, JSONStream* js) {
- JSONObject jsobj(&obj, "message");
+ JSONObject jsobj(&obj, "request");
{
JSONArray jsarr(&jsobj, "arguments");
for (intptr_t i = 0; i < js->num_arguments(); i++) {
@@ -505,7 +505,8 @@
}
-static void PrintError(JSONStream* js, const char* format, ...) {
+static void PrintError(JSONStream* js,
+ const char* format, ...) {
Isolate* isolate = Isolate::Current();
va_list args;
@@ -521,7 +522,33 @@
JSONObject jsobj(js);
jsobj.AddProperty("type", "Error");
- jsobj.AddProperty("text", buffer);
+ jsobj.AddProperty("id", "");
+ jsobj.AddProperty("message", buffer);
+ PrintArgumentsAndOptions(jsobj, js);
+}
+
+
+static void PrintErrorWithKind(JSONStream* js,
+ const char* kind,
+ const char* format, ...) {
+ Isolate* isolate = Isolate::Current();
+
+ va_list args;
+ va_start(args, format);
+ intptr_t len = OS::VSNPrint(NULL, 0, format, args);
+ va_end(args);
+
+ char* buffer = isolate->current_zone()->Alloc<char>(len + 1);
+ va_list args2;
+ va_start(args2, format);
+ OS::VSNPrint(buffer, (len + 1), format, args2);
+ va_end(args2);
+
+ JSONObject jsobj(js);
+ jsobj.AddProperty("type", "Error");
+ jsobj.AddProperty("id", "");
+ jsobj.AddProperty("kind", kind);
+ jsobj.AddProperty("message", buffer);
PrintArgumentsAndOptions(jsobj, js);
}
@@ -604,6 +631,7 @@
DebuggerStackTrace* stack = isolate->debugger()->StackTrace();
JSONObject jsobj(js);
jsobj.AddProperty("type", "StackTrace");
+ jsobj.AddProperty("id", "stacktrace");
JSONArray jsarr(&jsobj, "members");
intptr_t num_frames = stack->Length();
for (intptr_t i = 0; i < num_frames; i++) {
@@ -688,6 +716,70 @@
}
+static bool GetInteger64Id(const char* s, int64_t* id, int base = 10) {
+ if ((s == NULL) || (*s == '\0')) {
+ // Empty string.
+ return false;
+ }
+ if (id == NULL) {
+ // No id pointer.
+ return false;
+ }
+ int64_t r = 0;
+ char* end_ptr = NULL;
+ r = strtoll(s, &end_ptr, base);
+ if (end_ptr == s) {
+ // String was not advanced at all, cannot be valid.
+ return false;
+ }
+ *id = r;
+ return true;
+}
+
+// Scans the string until the '-' character. Returns pointer to string
+// at '-' character. Returns NULL if not found.
+const char* ScanUntilDash(const char* s) {
+ if ((s == NULL) || (*s == '\0')) {
+ // Empty string.
+ return NULL;
+ }
+ while (*s != '\0') {
+ if (*s == '-') {
+ return s;
+ }
+ s++;
+ }
+ return NULL;
+}
+
+
+static bool GetCodeId(const char* s, int64_t* timestamp, uword* address) {
+ if ((s == NULL) || (*s == '\0')) {
+ // Empty string.
+ return false;
+ }
+ if ((timestamp == NULL) || (address == NULL)) {
+ // Bad arguments.
+ return false;
+ }
+ // Extract the timestamp.
+ if (!GetInteger64Id(s, timestamp, 16) || (*timestamp < 0)) {
+ return false;
+ }
+ s = ScanUntilDash(s);
+ if (s == NULL) {
+ return false;
+ }
+ // Skip the dash.
+ s++;
+ // Extract the PC.
+ if (!GetUnsignedIntegerId(s, address, 16)) {
+ return false;
+ }
+ return true;
+}
+
+
static bool HandleClassesClosures(Isolate* isolate, const Class& cls,
JSONStream* js) {
intptr_t id;
@@ -867,97 +959,168 @@
}
-static bool HandleObjects(Isolate* isolate, JSONStream* js) {
- REQUIRE_COLLECTION_ID("objects");
- ASSERT(js->num_arguments() >= 2);
- const char* arg = js->GetArgument(1);
-
- // TODO(turnidge): Handle <optimized out> the same way as other
- // special nulls.
- if (strcmp(arg, "null") == 0) {
- Object::null_object().PrintToJSONStream(js, false);
- return true;
-
- } else if (strcmp(arg, "not-initialized") == 0) {
- Object::sentinel().PrintToJSONStream(js, false);
- return true;
-
- } else if (strcmp(arg, "being-initialized") == 0) {
- Object::transition_sentinel().PrintToJSONStream(js, false);
- return true;
-
- } else if (strcmp(arg, "optimized-out") == 0) {
- Symbols::OptimizedOut().PrintToJSONStream(js, false);
- return true;
-
- } else if (strcmp(arg, "collected") == 0) {
- PrintPseudoNull(js, "objects/collected", "<collected>");
- return true;
-
- } else if (strcmp(arg, "expired") == 0) {
- PrintPseudoNull(js, "objects/expired", "<expired>");
- return true;
-
- } else if (strcmp(arg, "int") == 0) {
- if (js->num_arguments() < 3) {
- PrintError(js, "expected 3 arguments but found %" Pd "\n",
- js->num_arguments());
- return true;
- }
+static RawObject* LookupObjectId(Isolate* isolate,
+ const char* arg,
+ bool* error) {
+ *error = false;
+ if (strncmp(arg, "int-", 4) == 0) {
+ arg += 4;
int64_t value = 0;
- if (!OS::StringToInt64(js->GetArgument(2), &value) ||
+ if (!OS::StringToInt64(arg, &value) ||
!Smi::IsValid64(value)) {
- PrintError(js, "integer value too large\n",
- js->num_arguments());
- return true;
+ *error = true;
+ return Object::null();
}
const Integer& obj =
Integer::Handle(isolate, Smi::New(static_cast<intptr_t>(value)));
- obj.PrintToJSONStream(js, false);
- return true;
+ return obj.raw();
- } else if (strcmp(arg, "bool") == 0) {
- if (js->num_arguments() < 3) {
- PrintError(js, "expected 3 arguments but found %" Pd "\n",
- js->num_arguments());
- return true;
- }
- const char* value_str = js->GetArgument(2);
- bool value = false;
- if (strcmp(value_str, "false") == 0) {
- value = false;
- } else if (strcmp(value_str, "true") == 0) {
- value = true;
- } else {
- PrintError(js, "expected 'true' or 'false' but found %s\n", value_str);
- return true;
- }
- Bool::Get(value).PrintToJSONStream(js, false);
- return true;
+ } else if (strcmp(arg, "bool-true") == 0) {
+ return Bool::True().raw();
+
+ } else if (strcmp(arg, "bool-false") == 0) {
+ return Bool::False().raw();
}
ObjectIdRing* ring = isolate->object_id_ring();
ASSERT(ring != NULL);
intptr_t id = -1;
if (!GetIntegerId(arg, &id)) {
- Object::null_object().PrintToJSONStream(js, false);
- return true;
+ *error = true;
+ return Instance::null();
}
- Object& obj = Object::Handle(ring->GetObjectForId(id));
- if (obj.IsNull()) {
- // The object has been collected by the gc.
- PrintPseudoNull(js, "objects/collected", "<collected>");
- return true;
- } else if (obj.raw() == Object::sentinel().raw()) {
- // The object id has expired.
- PrintPseudoNull(js, "objects/expired", "<expired>");
- return true;
- }
- obj.PrintToJSONStream(js, false);
- return true;
+ return ring->GetObjectForId(id);
}
+static bool HandleObjects(Isolate* isolate, JSONStream* js) {
+ REQUIRE_COLLECTION_ID("objects");
+ if (js->num_arguments() < 2) {
+ PrintError(js, "expected at least 2 arguments but found %" Pd "\n",
+ js->num_arguments());
+ return true;
+ }
+ const char* arg = js->GetArgument(1);
+
+ // Handle special objects first.
+ if (strcmp(arg, "null") == 0) {
+ if (js->num_arguments() > 2) {
+ PrintError(js, "expected at most 2 arguments but found %" Pd "\n",
+ js->num_arguments());
+ } else {
+ Instance::null_instance().PrintToJSONStream(js, false);
+ }
+ return true;
+
+ } else if (strcmp(arg, "not-initialized") == 0) {
+ if (js->num_arguments() > 2) {
+ PrintError(js, "expected at most 2 arguments but found %" Pd "\n",
+ js->num_arguments());
+ } else {
+ Object::sentinel().PrintToJSONStream(js, false);
+ }
+ return true;
+
+ } else if (strcmp(arg, "being-initialized") == 0) {
+ if (js->num_arguments() > 2) {
+ PrintError(js, "expected at most 2 arguments but found %" Pd "\n",
+ js->num_arguments());
+ } else {
+ Object::transition_sentinel().PrintToJSONStream(js, false);
+ }
+ return true;
+
+ } else if (strcmp(arg, "optimized-out") == 0) {
+ if (js->num_arguments() > 2) {
+ PrintError(js, "expected at most 2 arguments but found %" Pd "\n",
+ js->num_arguments());
+ } else {
+ Symbols::OptimizedOut().PrintToJSONStream(js, false);
+ }
+ return true;
+
+ } else if (strcmp(arg, "collected") == 0) {
+ if (js->num_arguments() > 2) {
+ PrintError(js, "expected at most 2 arguments but found %" Pd "\n",
+ js->num_arguments());
+ } else {
+ PrintPseudoNull(js, "objects/collected", "<collected>");
+ }
+ return true;
+
+ } else if (strcmp(arg, "expired") == 0) {
+ if (js->num_arguments() > 2) {
+ PrintError(js, "expected at most 2 arguments but found %" Pd "\n",
+ js->num_arguments());
+ } else {
+ PrintPseudoNull(js, "objects/expired", "<expired>");
+ }
+ return true;
+ }
+
+ // Lookup the object.
+ Object& obj = Object::Handle(isolate);
+ bool error = false;
+ obj = LookupObjectId(isolate, arg, &error);
+ if (error) {
+ PrintError(js, "unrecognized object id '%s'", arg);
+ return true;
+ }
+
+ // Now what should we do with the object?
+ if (js->num_arguments() == 2) {
+ // Print.
+ if (obj.IsNull()) {
+ // The object has been collected by the gc.
+ PrintPseudoNull(js, "objects/collected", "<collected>");
+ return true;
+ } else if (obj.raw() == Object::sentinel().raw()) {
+ // The object id has expired.
+ PrintPseudoNull(js, "objects/expired", "<expired>");
+ return true;
+ }
+ obj.PrintToJSONStream(js, false);
+ return true;
+ }
+ ASSERT(js->num_arguments() > 2);
+
+ const char* action = js->GetArgument(2);
+ if (strcmp(action, "eval") == 0) {
+ if (js->num_arguments() > 3) {
+ PrintError(js, "expected at most 3 arguments but found %" Pd "\n",
+ js->num_arguments());
+ return true;
+ }
+ if (obj.IsNull()) {
+ PrintErrorWithKind(js, "EvalCollected",
+ "attempt to evaluate against collected object\n",
+ js->num_arguments());
+ return true;
+ }
+ if (obj.raw() == Object::sentinel().raw()) {
+ PrintErrorWithKind(js, "EvalExpired",
+ "attempt to evaluate against expired object\n",
+ js->num_arguments());
+ return true;
+ }
+ const char* expr = js->LookupOption("expr");
+ if (expr == NULL) {
+ PrintError(js, "eval expects an 'expr' option\n",
+ js->num_arguments());
+ return true;
+ }
+ const String& expr_str = String::Handle(isolate, String::New(expr));
+ ASSERT(obj.IsInstance());
+ const Instance& instance = Instance::Cast(obj);
+ const Object& result = Object::Handle(instance.Evaluate(expr_str));
+ result.PrintToJSONStream(js, true);
+ return true;
+ }
+
+ PrintError(js, "unrecognized action '%s'\n", action);
+ return true;
+}
+
static bool HandleScriptsEnumerate(Isolate* isolate, JSONStream* js) {
JSONObject jsobj(js);
@@ -1012,7 +1175,8 @@
}
}
}
- PrintError(js, "Cannot find script %s\n", requested_url.ToCString());
+ PrintErrorWithKind(js, "NotFoundError", "Cannot find script %s",
+ requested_url.ToCString());
return true;
}
@@ -1080,6 +1244,8 @@
static bool HandleNullCode(uintptr_t pc, JSONStream* js) {
+ // TODO(turnidge): Consider adding/using Object::null_code() for
+ // consistent "type".
Object::null_object().PrintToJSONStream(js, false);
return true;
}
@@ -1087,42 +1253,55 @@
static bool HandleCode(Isolate* isolate, JSONStream* js) {
REQUIRE_COLLECTION_ID("code");
- uintptr_t pc;
- if (js->num_arguments() > 3) {
+ uword pc;
+ if (js->num_arguments() > 2) {
PrintError(js, "Command too long");
return true;
}
- if (js->num_arguments() == 3) {
- const char* command = js->GetArgument(1);
- if ((strcmp("collected", command) == 0) ||
- (strcmp("native", command) == 0)) {
- if (!GetUnsignedIntegerId(js->GetArgument(1), &pc, 16)) {
- PrintError(js, "Must specify code address: code/%s/c0deadd0.", command);
- return true;
- }
- return HandleNullCode(pc, js);
- } else {
- PrintError(js, "Unrecognized subcommand '%s'", js->GetArgument(1));
+ ASSERT(js->num_arguments() == 2);
+ static const char* kCollectedPrefix = "collected-";
+ static intptr_t kCollectedPrefixLen = strlen(kCollectedPrefix);
+ static const char* kNativePrefix = "native-";
+ static intptr_t kNativePrefixLen = strlen(kNativePrefix);
+ static const char* kReusedPrefix = "reused-";
+ static intptr_t kReusedPrefixLen = strlen(kReusedPrefix);
+ const char* command = js->GetArgument(1);
+ if (strncmp(kCollectedPrefix, command, kCollectedPrefixLen) == 0) {
+ if (!GetUnsignedIntegerId(&command[kCollectedPrefixLen], &pc, 16)) {
+ PrintError(js, "Must specify code address: code/%sc0deadd0.",
+ kCollectedPrefix);
return true;
}
+ return HandleNullCode(pc, js);
}
- ASSERT(js->num_arguments() == 2);
- if (!GetUnsignedIntegerId(js->GetArgument(1), &pc, 16)) {
- PrintError(js, "Must specify code address: code/c0deadd0.");
+ if (strncmp(kNativePrefix, command, kNativePrefixLen) == 0) {
+ if (!GetUnsignedIntegerId(&command[kNativePrefixLen], &pc, 16)) {
+ PrintError(js, "Must specify code address: code/%sc0deadd0.",
+ kNativePrefix);
+ return true;
+ }
+ // TODO(johnmccutchan): Support native Code.
+ return HandleNullCode(pc, js);
+ }
+ if (strncmp(kReusedPrefix, command, kReusedPrefixLen) == 0) {
+ if (!GetUnsignedIntegerId(&command[kReusedPrefixLen], &pc, 16)) {
+ PrintError(js, "Must specify code address: code/%sc0deadd0.",
+ kReusedPrefix);
+ return true;
+ }
+ return HandleNullCode(pc, js);
+ }
+ int64_t timestamp = 0;
+ if (!GetCodeId(command, ×tamp, &pc) || (timestamp < 0)) {
+ PrintError(js, "Malformed code id: %s", command);
return true;
}
- Code& code = Code::Handle();
- code ^= Code::LookupCode(pc);
+ Code& code = Code::Handle(Code::FindCode(pc, timestamp));
if (!code.IsNull()) {
code.PrintToJSONStream(js, false);
return true;
}
- code ^= Code::LookupCodeInVmIsolate(pc);
- if (!code.IsNull()) {
- code.PrintToJSONStream(js, false);
- return true;
- }
- PrintError(js, "Could not find code at %" Px "", pc);
+ PrintError(js, "Could not find code with id: %s", command);
return true;
}
@@ -1169,6 +1348,12 @@
}
+static bool HandleHeapMap(Isolate* isolate, JSONStream* js) {
+ isolate->heap()->PrintHeapMapToJSONStream(js);
+ return true;
+}
+
+
static IsolateMessageHandlerEntry isolate_handlers[] = {
{ "_echo", HandleIsolateEcho },
{ "", HandleIsolate },
@@ -1178,6 +1363,7 @@
{ "coverage", HandleCoverage },
{ "cpu", HandleCpu },
{ "debug", HandleDebug },
+ { "heapmap", HandleHeapMap },
{ "libraries", HandleLibraries },
{ "objects", HandleObjects },
{ "profile", HandleProfile },
diff --git a/runtime/vm/service/running_isolates.dart b/runtime/vm/service/running_isolates.dart
index e371453..afa1e78 100644
--- a/runtime/vm/service/running_isolates.dart
+++ b/runtime/vm/service/running_isolates.dart
@@ -29,6 +29,7 @@
});
});
result['type'] = 'IsolateList';
+ result['id'] = 'isolates';
result['members'] = members;
message.setResponse(JSON.encode(result));
}
diff --git a/runtime/vm/service_test.cc b/runtime/vm/service_test.cc
index 0ed1e23..7c16a22 100644
--- a/runtime/vm/service_test.cc
+++ b/runtime/vm/service_test.cc
@@ -8,6 +8,7 @@
#include "vm/debugger.h"
#include "vm/globals.h"
#include "vm/message_handler.h"
+#include "vm/object_id_ring.h"
#include "vm/os.h"
#include "vm/port.h"
#include "vm/service.h"
@@ -38,6 +39,44 @@
return true;
}
+ // Removes a given json key:value from _msg.
+ void filterMsg(const char* key) {
+ int key_len = strlen(key);
+ int old_len = strlen(_msg);
+ char* new_msg = reinterpret_cast<char*>(malloc(old_len + 1));
+ int old_pos = 0;
+ int new_pos = 0;
+ while (_msg[old_pos] != '\0') {
+ if (_msg[old_pos] == '\"') {
+ old_pos++;
+ if ((old_len - old_pos) > key_len &&
+ strncmp(&_msg[old_pos], key, key_len) == 0 &&
+ _msg[old_pos + key_len] == '\"') {
+ old_pos += (key_len + 2);
+ // Skip until next , or }.
+ while (_msg[old_pos] != '\0' &&
+ _msg[old_pos] != ',' &&
+ _msg[old_pos] != '}') {
+ old_pos++;
+ }
+ if (_msg[old_pos] == ',') {
+ old_pos++;
+ }
+ } else {
+ new_msg[new_pos] = '\"';;
+ new_pos++;
+ }
+ } else {
+ new_msg[new_pos] = _msg[old_pos];
+ new_pos++;
+ old_pos++;
+ }
+ }
+ new_msg[new_pos] = '\0';
+ free(_msg);
+ _msg = new_msg;
+ }
+
const char* msg() const { return _msg; }
private:
@@ -189,7 +228,7 @@
Service::HandleIsolateMessage(isolate, service_msg);
handler.HandleNextMessage();
EXPECT_STREQ(
- "{\"type\":\"StackTrace\",\"members\":[]}",
+ "{\"type\":\"StackTrace\",\"id\":\"stacktrace\",\"members\":[]}",
handler.msg());
// Malformed request.
@@ -197,8 +236,8 @@
Service::HandleIsolateMessage(isolate, service_msg);
handler.HandleNextMessage();
EXPECT_STREQ(
- "{\"type\":\"Error\",\"text\":\"Command too long\","
- "\"message\":{\"arguments\":[\"stacktrace\",\"jamboree\"],"
+ "{\"type\":\"Error\",\"id\":\"\",\"message\":\"Command too long\","
+ "\"request\":{\"arguments\":[\"stacktrace\",\"jamboree\"],"
"\"option_keys\":[],\"option_values\":[]}}",
handler.msg());
}
@@ -257,9 +296,9 @@
Service::HandleIsolateMessage(isolate, service_msg);
handler.HandleNextMessage();
EXPECT_STREQ(
- "{\"type\":\"Error\","
- "\"text\":\"Must specify a subcommand\","
- "\"message\":{\"arguments\":[\"debug\"],\"option_keys\":[],"
+ "{\"type\":\"Error\",\"id\":\"\","
+ "\"message\":\"Must specify a subcommand\","
+ "\"request\":{\"arguments\":[\"debug\"],\"option_keys\":[],"
"\"option_values\":[]}}",
handler.msg());
@@ -267,9 +306,9 @@
service_msg = Eval(lib, "[port, ['debug', 'breakpoints', '1111'], [], []]");
Service::HandleIsolateMessage(isolate, service_msg);
handler.HandleNextMessage();
- EXPECT_STREQ("{\"type\":\"Error\","
- "\"text\":\"Unrecognized breakpoint id 1111\","
- "\"message\":{"
+ EXPECT_STREQ("{\"type\":\"Error\",\"id\":\"\","
+ "\"message\":\"Unrecognized breakpoint id 1111\","
+ "\"request\":{"
"\"arguments\":[\"debug\",\"breakpoints\",\"1111\"],"
"\"option_keys\":[],\"option_values\":[]}}",
handler.msg());
@@ -279,8 +318,9 @@
Eval(lib, "[port, ['debug', 'breakpoints', '1111', 'green'], [], []]");
Service::HandleIsolateMessage(isolate, service_msg);
handler.HandleNextMessage();
- EXPECT_STREQ("{\"type\":\"Error\",\"text\":\"Command too long\","
- "\"message\":{\"arguments\":[\"debug\",\"breakpoints\","
+ EXPECT_STREQ("{\"type\":\"Error\",\"id\":\"\","
+ "\"message\":\"Command too long\","
+ "\"request\":{\"arguments\":[\"debug\",\"breakpoints\","
"\"1111\",\"green\"],"
"\"option_keys\":[],\"option_values\":[]}}",
handler.msg());
@@ -289,14 +329,204 @@
service_msg = Eval(lib, "[port, ['debug', 'nosferatu'], [], []]");
Service::HandleIsolateMessage(isolate, service_msg);
handler.HandleNextMessage();
- EXPECT_STREQ("{\"type\":\"Error\","
- "\"text\":\"Unrecognized subcommand 'nosferatu'\","
- "\"message\":{\"arguments\":[\"debug\",\"nosferatu\"],"
+ EXPECT_STREQ("{\"type\":\"Error\",\"id\":\"\","
+ "\"message\":\"Unrecognized subcommand 'nosferatu'\","
+ "\"request\":{\"arguments\":[\"debug\",\"nosferatu\"],"
"\"option_keys\":[],\"option_values\":[]}}",
handler.msg());
}
+TEST_CASE(Service_Objects) {
+ // TODO(turnidge): Extend this test to cover a non-trivial stack trace.
+ const char* kScript =
+ "var port;\n" // Set to our mock port by C++.
+ "var validId;\n" // Set to a valid object id by C++.
+ "\n"
+ "main() {\n"
+ "}";
+
+ Isolate* isolate = Isolate::Current();
+ Dart_Handle lib = TestCase::LoadTestScript(kScript, NULL);
+ EXPECT_VALID(lib);
+
+ // Build a mock message handler and wrap it in a dart port.
+ ServiceTestMessageHandler handler;
+ Dart_Port port_id = PortMap::CreatePort(&handler);
+ Dart_Handle port =
+ Api::NewHandle(isolate, DartLibraryCalls::NewSendPort(port_id));
+ EXPECT_VALID(port);
+ EXPECT_VALID(Dart_SetField(lib, NewString("port"), port));
+
+ ObjectIdRing* ring = isolate->object_id_ring();
+ const String& str = String::Handle(String::New("value"));
+ intptr_t str_id = ring->GetIdForObject(str.raw());
+ Dart_Handle valid_id = Dart_NewInteger(str_id);
+ EXPECT_VALID(valid_id);
+ EXPECT_VALID(Dart_SetField(lib, NewString("validId"), valid_id));
+
+ Instance& service_msg = Instance::Handle();
+
+ // null
+ service_msg = Eval(lib, "[port, ['objects', 'null'], [], []]");
+ Service::HandleIsolateMessage(isolate, service_msg);
+ handler.HandleNextMessage();
+ handler.filterMsg("name");
+ EXPECT_STREQ(
+ "{\"type\":\"Null\",\"id\":\"objects\\/null\","
+ "\"preview\":\"null\"}",
+ handler.msg());
+
+ // not initialized
+ service_msg = Eval(lib, "[port, ['objects', 'not-initialized'], [], []]");
+ Service::HandleIsolateMessage(isolate, service_msg);
+ handler.HandleNextMessage();
+ handler.filterMsg("name");
+ EXPECT_STREQ(
+ "{\"type\":\"Null\",\"id\":\"objects\\/not-initialized\","
+ "\"preview\":\"<not initialized>\"}",
+ handler.msg());
+
+ // being initialized
+ service_msg = Eval(lib, "[port, ['objects', 'being-initialized'], [], []]");
+ Service::HandleIsolateMessage(isolate, service_msg);
+ handler.HandleNextMessage();
+ handler.filterMsg("name");
+ EXPECT_STREQ(
+ "{\"type\":\"Null\",\"id\":\"objects\\/being-initialized\","
+ "\"preview\":\"<being initialized>\"}",
+ handler.msg());
+
+ // optimized out
+ service_msg = Eval(lib, "[port, ['objects', 'optimized-out'], [], []]");
+ Service::HandleIsolateMessage(isolate, service_msg);
+ handler.HandleNextMessage();
+ handler.filterMsg("name");
+ EXPECT_STREQ(
+ "{\"type\":\"Null\",\"id\":\"objects\\/optimized-out\","
+ "\"preview\":\"<optimized out>\"}",
+ handler.msg());
+
+ // collected
+ service_msg = Eval(lib, "[port, ['objects', 'collected'], [], []]");
+ Service::HandleIsolateMessage(isolate, service_msg);
+ handler.HandleNextMessage();
+ handler.filterMsg("name");
+ EXPECT_STREQ(
+ "{\"type\":\"Null\",\"id\":\"objects\\/collected\","
+ "\"preview\":\"<collected>\"}",
+ handler.msg());
+
+ // expired
+ service_msg = Eval(lib, "[port, ['objects', 'expired'], [], []]");
+ Service::HandleIsolateMessage(isolate, service_msg);
+ handler.HandleNextMessage();
+ handler.filterMsg("name");
+ EXPECT_STREQ(
+ "{\"type\":\"Null\",\"id\":\"objects\\/expired\","
+ "\"preview\":\"<expired>\"}",
+ handler.msg());
+
+ // bool
+ service_msg = Eval(lib, "[port, ['objects', 'bool-true'], [], []]");
+ Service::HandleIsolateMessage(isolate, service_msg);
+ handler.HandleNextMessage();
+ handler.filterMsg("name");
+ EXPECT_STREQ(
+ "{\"type\":\"Bool\",\"id\":\"objects\\/bool-true\","
+ "\"class\":{\"type\":\"@Class\",\"id\":\"classes\\/46\","
+ "\"user_name\":\"bool\"},\"preview\":\"true\"}",
+ handler.msg());
+
+ // int
+ service_msg = Eval(lib, "[port, ['objects', 'int-123'], [], []]");
+ Service::HandleIsolateMessage(isolate, service_msg);
+ handler.HandleNextMessage();
+ handler.filterMsg("name");
+ EXPECT_STREQ(
+ "{\"type\":\"Smi\",\"id\":\"objects\\/int-123\","
+ "\"class\":{\"type\":\"@Class\",\"id\":\"classes\\/42\","
+ "\"user_name\":\"int\"},\"preview\":\"123\"}",
+ handler.msg());
+
+ // object id ring / valid
+ service_msg = Eval(lib, "[port, ['objects', '$validId'], [], []]");
+ Service::HandleIsolateMessage(isolate, service_msg);
+ handler.HandleNextMessage();
+ handler.filterMsg("name");
+ handler.filterMsg("size");
+ EXPECT_STREQ(
+ "{\"type\":\"String\",\"id\":\"objects\\/1\","
+ "\"class\":{\"type\":\"@Class\",\"id\":\"classes\\/60\","
+ "\"user_name\":\"String\"},\"preview\":\"\\\"value\\\"\","
+ "\"fields\":[],}",
+ handler.msg());
+
+ // object id ring / invalid => expired
+ service_msg = Eval(lib, "[port, ['objects', '99999999'], [], []]");
+ Service::HandleIsolateMessage(isolate, service_msg);
+ handler.HandleNextMessage();
+ handler.filterMsg("name");
+ EXPECT_STREQ(
+ "{\"type\":\"Null\",\"id\":\"objects\\/expired\","
+ "\"preview\":\"<expired>\"}",
+ handler.msg());
+
+ // expired/eval => error
+ service_msg = Eval(lib, "[port, ['objects', 'expired', 'eval'], [], []]");
+ Service::HandleIsolateMessage(isolate, service_msg);
+ handler.HandleNextMessage();
+ handler.filterMsg("name");
+ EXPECT_STREQ(
+ "{\"type\":\"Error\",\"id\":\"\","
+ "\"message\":\"expected at most 2 arguments but found 3\\n\","
+ "\"request\":{\"arguments\":[\"objects\",\"expired\",\"eval\"],"
+ "\"option_keys\":[],\"option_values\":[]}}",
+ handler.msg());
+
+ // int/eval => good
+ service_msg = Eval(lib,
+ "[port, ['objects', 'int-123', 'eval'], "
+ "['expr'], ['this+99']]");
+ Service::HandleIsolateMessage(isolate, service_msg);
+ handler.HandleNextMessage();
+ handler.filterMsg("name");
+ EXPECT_STREQ(
+ "{\"type\":\"@Smi\",\"id\":\"objects\\/int-222\","
+ "\"class\":{\"type\":\"@Class\",\"id\":\"classes\\/42\","
+ "\"user_name\":\"int\"},\"preview\":\"222\"}",
+ handler.msg());
+
+ // object id ring / invalid => expired
+ service_msg = Eval(lib, "[port, ['objects', '99999999', 'eval'], "
+ "['expr'], ['this']]");
+ Service::HandleIsolateMessage(isolate, service_msg);
+ handler.HandleNextMessage();
+ handler.filterMsg("name");
+ EXPECT_STREQ(
+ "{\"type\":\"Error\",\"id\":\"\",\"kind\":\"EvalExpired\","
+ "\"message\":\"attempt to evaluate against expired object\\n\","
+ "\"request\":{\"arguments\":[\"objects\",\"99999999\",\"eval\"],"
+ "\"option_keys\":[\"expr\"],\"option_values\":[\"this\"]}}",
+ handler.msg());
+
+ // Extra arg to eval.
+ service_msg = Eval(lib,
+ "[port, ['objects', 'int-123', 'eval', 'foo'], "
+ "['expr'], ['this+99']]");
+ Service::HandleIsolateMessage(isolate, service_msg);
+ handler.HandleNextMessage();
+ handler.filterMsg("name");
+ EXPECT_STREQ(
+ "{\"type\":\"Error\",\"id\":\"\","
+ "\"message\":\"expected at most 3 arguments but found 4\\n\","
+ "\"request\":{\"arguments\":[\"objects\",\"int-123\",\"eval\",\"foo\"],"
+ "\"option_keys\":[\"expr\"],\"option_values\":[\"this+99\"]}}",
+ handler.msg());
+}
+
+
+
TEST_CASE(Service_Classes) {
const char* kScript =
"var port;\n" // Set to our mock port by C++.
@@ -342,8 +572,9 @@
Service::HandleIsolateMessage(isolate, service_msg);
handler.HandleNextMessage();
EXPECT_STREQ(
- "{\"type\":\"Error\",\"text\":\"999999 is not a valid class id.\","
- "\"message\":{\"arguments\":[\"classes\",\"999999\"],"
+ "{\"type\":\"Error\",\"id\":\"\","
+ "\"message\":\"999999 is not a valid class id.\","
+ "\"request\":{\"arguments\":[\"classes\",\"999999\"],"
"\"option_keys\":[],\"option_values\":[]}}", handler.msg());
// Request the class A over the service.
@@ -380,7 +611,8 @@
Service::HandleIsolateMessage(isolate, service_msg);
handler.HandleNextMessage();
ExpectSubstringF(handler.msg(),
- "{\"type\":\"Error\",\"text\":\"Invalid sub collection huh\",\"message\":"
+ "{\"type\":\"Error\",\"id\":\"\",\"message\":\"Invalid sub collection huh\""
+ ",\"request\":"
"{\"arguments\":[\"classes\",\"%" Pd "\",\"huh\",\"0\"],\"option_keys\":[],"
"\"option_values\":[]}}", cid);
@@ -390,8 +622,8 @@
Service::HandleIsolateMessage(isolate, service_msg);
handler.HandleNextMessage();
ExpectSubstringF(handler.msg(),
- "{\"type\":\"Error\",\"text\":\"Field 9 not found\","
- "\"message\":{\"arguments\":[\"classes\",\"%" Pd "\",\"fields\",\"9\"],"
+ "{\"type\":\"Error\",\"id\":\"\",\"message\":\"Field 9 not found\","
+ "\"request\":{\"arguments\":[\"classes\",\"%" Pd "\",\"fields\",\"9\"],"
"\"option_keys\":[],\"option_values\":[]}}", cid);
// Invalid function request.
@@ -400,8 +632,8 @@
Service::HandleIsolateMessage(isolate, service_msg);
handler.HandleNextMessage();
ExpectSubstringF(handler.msg(),
- "{\"type\":\"Error\",\"text\":\"Function 9 not found\","
- "\"message\":{\"arguments\":[\"classes\",\"%" Pd "\",\"functions\",\"9\"],"
+ "{\"type\":\"Error\",\"id\":\"\",\"message\":\"Function 9 not found\","
+ "\"request\":{\"arguments\":[\"classes\",\"%" Pd "\",\"functions\",\"9\"],"
"\"option_keys\":[],\"option_values\":[]}}", cid);
@@ -411,7 +643,8 @@
Service::HandleIsolateMessage(isolate, service_msg);
handler.HandleNextMessage();
ExpectSubstringF(handler.msg(),
- "{\"type\":\"Error\",\"text\":\"Command too long\",\"message\":"
+ "{\"type\":\"Error\",\"id\":\"\",\"message\":\"Command too long\","
+ "\"request\":"
"{\"arguments\":[\"classes\",\"%" Pd "\",\"fields\",\"9\",\"x\"],"
"\"option_keys\":[],\"option_values\":[]}}", cid);
@@ -421,7 +654,8 @@
Service::HandleIsolateMessage(isolate, service_msg);
handler.HandleNextMessage();
ExpectSubstringF(handler.msg(),
- "{\"type\":\"Error\",\"text\":\"Command too long\",\"message\":"
+ "{\"type\":\"Error\",\"id\":\"\",\"message\":\"Command too long\","
+ "\"request\":"
"{\"arguments\":[\"classes\",\"%" Pd "\",\"functions\",\"9\",\"x\"],"
"\"option_keys\":[],\"option_values\":[]}}", cid);
}
@@ -461,6 +695,7 @@
EXPECT(!code_c.IsNull());
// Use the entry of the code object as it's reference.
uword entry = code_c.EntryPoint();
+ int64_t compile_timestamp = code_c.compile_timestamp();
EXPECT_GT(code_c.Size(), 16);
uword last = entry + code_c.Size();
@@ -479,15 +714,15 @@
Service::HandleIsolateMessage(isolate, service_msg);
handler.HandleNextMessage();
EXPECT_STREQ(
- "{\"type\":\"Error\",\"text\":\"Could not find code at 0\",\"message\":"
- "{\"arguments\":[\"code\",\"0\"],"
+ "{\"type\":\"Error\",\"id\":\"\",\"message\":\"Malformed code id: 0\","
+ "\"request\":{\"arguments\":[\"code\",\"0\"],"
"\"option_keys\":[],\"option_values\":[]}}", handler.msg());
- // The following four tests check that a code object can be found
- // inside the range: [code.EntryPoint(), code.EntryPoint() + code.Size()).
- // Request code object at code.EntryPoint()
- // Expect this to succeed as it is inside [entry, entry + size).
- service_msg = EvalF(h_lib, "[port, ['code', '%" Px "'], [], []]", entry);
+ // The following test checks that a code object can be found only
+ // at compile_timestamp()-code.EntryPoint().
+ service_msg = EvalF(h_lib, "[port, ['code', '%" Px64"-%" Px "'], [], []]",
+ compile_timestamp,
+ entry);
Service::HandleIsolateMessage(isolate, service_msg);
handler.HandleNextMessage();
{
@@ -495,14 +730,18 @@
const intptr_t kBufferSize = 512;
char buffer[kBufferSize];
OS::SNPrint(buffer, kBufferSize-1,
- "{\"type\":\"Code\",\"id\":\"code\\/%" Px "\",", entry);
+ "{\"type\":\"Code\",\"id\":\"code\\/%" Px64 "-%" Px "\",",
+ compile_timestamp,
+ entry);
EXPECT_SUBSTRING(buffer, handler.msg());
}
- // Request code object at code.EntryPoint() + 16.
- // Expect this to succeed as it is inside [entry, entry + size).
+ // Request code object at compile_timestamp-code.EntryPoint() + 16
+ // Expect this to fail because the address is not the entry point.
uintptr_t address = entry + 16;
- service_msg = EvalF(h_lib, "[port, ['code', '%" Px "'], [], []]", address);
+ service_msg = EvalF(h_lib, "[port, ['code', '%" Px64"-%" Px "'], [], []]",
+ compile_timestamp,
+ address);
Service::HandleIsolateMessage(isolate, service_msg);
handler.HandleNextMessage();
{
@@ -510,14 +749,18 @@
const intptr_t kBufferSize = 512;
char buffer[kBufferSize];
OS::SNPrint(buffer, kBufferSize-1,
- "{\"type\":\"Code\",\"id\":\"code\\/%" Px "\",", entry);
+ "Could not find code with id: %" Px64 "-%" Px "",
+ compile_timestamp,
+ address);
EXPECT_SUBSTRING(buffer, handler.msg());
}
- // Request code object at code.EntryPoint() + code.Size() - 1.
- // Expect this to succeed as it is inside [entry, entry + size).
- address = last - 1;
- service_msg = EvalF(h_lib, "[port, ['code', '%" Px "'], [], []]", address);
+ // Request code object at (compile_timestamp - 1)-code.EntryPoint()
+ // Expect this to fail because the timestamp is wrong.
+ address = entry;
+ service_msg = EvalF(h_lib, "[port, ['code', '%" Px64"-%" Px "'], [], []]",
+ compile_timestamp - 1,
+ address);
Service::HandleIsolateMessage(isolate, service_msg);
handler.HandleNextMessage();
{
@@ -525,25 +768,26 @@
const intptr_t kBufferSize = 512;
char buffer[kBufferSize];
OS::SNPrint(buffer, kBufferSize-1,
- "{\"type\":\"Code\",\"id\":\"code\\/%" Px "\",", entry);
+ "Could not find code with id: %" Px64 "-%" Px "",
+ compile_timestamp - 1,
+ address);
EXPECT_SUBSTRING(buffer, handler.msg());
}
- // Request code object at code.EntryPoint() + code.Size(). Expect this
- // to fail as it's outside of [entry, entry + size).
+ // Request native code at address. Expect the null code object back.
address = last;
- service_msg = EvalF(h_lib, "[port, ['code', '%" Px "'], [], []]", address);
+ service_msg = EvalF(h_lib, "[port, ['code', 'native-%" Px "'], [], []]",
+ address);
Service::HandleIsolateMessage(isolate, service_msg);
handler.HandleNextMessage();
- {
- const intptr_t kBufferSize = 1024;
- char buffer[kBufferSize];
- OS::SNPrint(buffer, kBufferSize-1,
- "{\"type\":\"Error\",\"text\":\"Could not find code at %" Px "\","
- "\"message\":{\"arguments\":[\"code\",\"%" Px "\"],"
- "\"option_keys\":[],\"option_values\":[]}}", address, address);
- EXPECT_STREQ(buffer, handler.msg());
- }
+ EXPECT_STREQ("{\"type\":\"null\"}", handler.msg());
+
+ // Request malformed native code.
+ service_msg = EvalF(h_lib, "[port, ['code', 'native%" Px "'], [], []]",
+ address);
+ Service::HandleIsolateMessage(isolate, service_msg);
+ handler.HandleNextMessage();
+ EXPECT_SUBSTRING("\"message\":\"Malformed code id:", handler.msg());
}
@@ -611,7 +855,7 @@
"\"type\":\"@Script\",\"id\":\"scripts\\/dart%3Atest-lib\","
"\"name\":\"dart:test-lib\",\"user_name\":\"dart:test-lib\","
"\"kind\":\"script\"},\"hits\":"
- "[3,0,3,1,5,1,5,1,5,1,6,1,6,1]}", handler.msg());
+ "[5,1,6,1]}", handler.msg());
}
@@ -650,6 +894,35 @@
}
+TEST_CASE(Service_HeapMap) {
+ const char* kScript =
+ "var port;\n" // Set to our mock port by C++.
+ "\n"
+ "main() {\n"
+ "}";
+
+ Isolate* isolate = Isolate::Current();
+ Dart_Handle lib = TestCase::LoadTestScript(kScript, NULL);
+ EXPECT_VALID(lib);
+
+ // Build a mock message handler and wrap it in a dart port.
+ ServiceTestMessageHandler handler;
+ Dart_Port port_id = PortMap::CreatePort(&handler);
+ Dart_Handle port =
+ Api::NewHandle(isolate, DartLibraryCalls::NewSendPort(port_id));
+ EXPECT_VALID(port);
+ EXPECT_VALID(Dart_SetField(lib, NewString("port"), port));
+
+ Instance& service_msg = Instance::Handle();
+ service_msg = Eval(lib, "[port, ['heapmap'], [], []]");
+ Service::HandleIsolateMessage(isolate, service_msg);
+ handler.HandleNextMessage();
+ EXPECT_SUBSTRING("\"type\":\"HeapMap\"", handler.msg());
+ EXPECT_SUBSTRING("\"pages\":[[", handler.msg());
+ EXPECT_SUBSTRING("]]", handler.msg());
+}
+
+
static const char* alpha_callback(
const char* name,
const char** arguments,
diff --git a/runtime/vm/stub_code_arm.cc b/runtime/vm/stub_code_arm.cc
index a84d57e..ea1334f 100644
--- a/runtime/vm/stub_code_arm.cc
+++ b/runtime/vm/stub_code_arm.cc
@@ -528,7 +528,7 @@
void StubCode::GenerateDeoptimizeLazyStub(Assembler* assembler) {
// Correct return address to point just after the call that is being
// deoptimized.
- __ AddImmediate(LR, -CallPattern::kFixedLengthInBytes);
+ __ AddImmediate(LR, -CallPattern::LengthInBytes());
GenerateDeoptimizationSequence(assembler, true); // Preserve R0.
}
diff --git a/runtime/vm/symbols.h b/runtime/vm/symbols.h
index 309ccc9..41882b0 100644
--- a/runtime/vm/symbols.h
+++ b/runtime/vm/symbols.h
@@ -296,6 +296,8 @@
V(_LocalClassMirror, "_LocalClassMirror") \
V(_LocalFunctionTypeMirror, "_LocalFunctionTypeMirror") \
V(_LocalLibraryMirror, "_LocalLibraryMirror") \
+ V(_LocalLibraryDependencyMirror, "_LocalLibraryDependencyMirror") \
+ V(_LocalCombinatorMirror, "_LocalCombinatorMirror") \
V(_LocalMethodMirror, "_LocalMethodMirror") \
V(_LocalVariableMirror, "_LocalVariableMirror") \
V(_LocalParameterMirror, "_LocalParameterMirror") \
@@ -309,6 +311,7 @@
V(NotInitialized, "<not initialized>") \
V(ClassId, "get:_classId") \
V(AllocationStubFor, "Allocation stub for ") \
+ V(TempParam, ":temp_param") \
// Contains a list of frequently used strings in a canonicalized form. This
diff --git a/runtime/vm/timer.cc b/runtime/vm/timer.cc
index 4a98bf5..840bd21 100644
--- a/runtime/vm/timer.cc
+++ b/runtime/vm/timer.cc
@@ -26,7 +26,7 @@
#define TIMER_FIELD_REPORT(name, msg) \
- if (name().report() && name().message() != NULL) { \
+ if (name().report() && name().message() != NULL) { \
OS::Print("%s : %" Pd64 " micros.\n", \
name().message(), \
name().TotalElapsedTime()); \
diff --git a/runtime/vm/timer.h b/runtime/vm/timer.h
index 0db1781..5775444 100644
--- a/runtime/vm/timer.h
+++ b/runtime/vm/timer.h
@@ -109,18 +109,10 @@
DISALLOW_COPY_AND_ASSIGN(TimerList);
};
-// Timer Usage.
-#define START_TIMER(name) \
- Isolate::Current()->timer_list().name().Start();
-
-#define STOP_TIMER(name) \
- Isolate::Current()->timer_list().name().Stop();
-
// The class TimerScope is used to start and stop a timer within a scope.
// It is used as follows:
// {
-// TIMERSCOPE(name_of_timer);
-// ....
+// TimerScope timer(FLAG_name_of_flag, timer, isolate);
// .....
// code that needs to be timed.
// ....
@@ -146,15 +138,59 @@
}
private:
- bool flag_;
+ const bool flag_;
bool nested_;
- Timer* timer_;
+ Timer* const timer_;
+
+ DISALLOW_ALLOCATION();
DISALLOW_COPY_AND_ASSIGN(TimerScope);
};
-#define TIMERSCOPE(name) \
- TimerScope vm_internal_timer_(true, \
- &(Isolate::Current()->timer_list().name()))
+
+class PauseTimerScope : public StackResource {
+ public:
+ PauseTimerScope(bool flag, Timer* timer, BaseIsolate* isolate = NULL)
+ : StackResource(isolate), flag_(flag), nested_(false), timer_(timer) {
+ if (flag_) {
+ if (timer_->running()) {
+ timer_->Stop();
+ } else {
+ nested_ = true;
+ }
+ }
+ }
+ ~PauseTimerScope() {
+ if (flag_) {
+ if (!nested_) {
+ timer_->Start();
+ }
+ }
+ }
+
+ private:
+ const bool flag_;
+ bool nested_;
+ Timer* const timer_;
+
+ DISALLOW_ALLOCATION();
+ DISALLOW_COPY_AND_ASSIGN(PauseTimerScope);
+};
+
+
+// Macros to deal with named timers in the isolate.
+#define START_TIMER(isolate, name) \
+isolate->timer_list().name().Start();
+
+#define STOP_TIMER(isolate, name) \
+isolate->timer_list().name().Stop();
+
+#define TIMERSCOPE(isolate, name) \
+ TimerScope vm_internal_timer_(true, &(isolate->timer_list().name()), isolate)
+
+#define PAUSETIMERSCOPE(isolate, name) \
+PauseTimerScope vm_internal_timer_(true, \
+ &(isolate->timer_list().name()), \
+ isolate)
} // namespace dart
diff --git a/sdk/lib/_internal/compiler/compiler.dart b/sdk/lib/_internal/compiler/compiler.dart
index e40c74a..b79ab22 100644
--- a/sdk/lib/_internal/compiler/compiler.dart
+++ b/sdk/lib/_internal/compiler/compiler.dart
@@ -85,7 +85,7 @@
Uri packageRoot,
CompilerInputProvider inputProvider,
DiagnosticHandler handler,
- [List<String> options = const [],
+ [List<String> options = const [],
CompilerOutputProvider outputProvider,
Map<String, dynamic> environment = const {}]) {
if (!libraryRoot.path.endsWith("/")) {
@@ -107,13 +107,6 @@
return compiler.run(script).then((_) {
String code = compiler.assembledCode;
if (code != null && outputProvider != null) {
- String outputType = 'js';
- if (options.contains('--output-type=dart')) {
- outputType = 'dart';
- }
- outputProvider('', outputType)
- ..add(code)
- ..close();
code = ''; // Non-null signals success.
}
return code;
diff --git a/sdk/lib/_internal/compiler/implementation/apiimpl.dart b/sdk/lib/_internal/compiler/implementation/apiimpl.dart
index 3995d34..f7a72f1 100644
--- a/sdk/lib/_internal/compiler/implementation/apiimpl.dart
+++ b/sdk/lib/_internal/compiler/implementation/apiimpl.dart
@@ -57,7 +57,8 @@
hasOption(options, '--disable-type-inference'),
preserveComments: hasOption(options, '--preserve-comments'),
verbose: hasOption(options, '--verbose'),
- sourceMapUri: extractSourceMapUri(options),
+ sourceMapUri: extractUriOption(options, '--source-map='),
+ outputUri: extractUriOption(options, '--out='),
terseDiagnostics: hasOption(options, '--terse'),
dumpInfo: hasOption(options, '--dump-info'),
buildId: extractStringOption(
@@ -84,8 +85,8 @@
return defaultValue;
}
- static Uri extractSourceMapUri(List<String> options) {
- var option = extractStringOption(options, '--source-map=', null);
+ static Uri extractUriOption(List<String> options, String prefix) {
+ var option = extractStringOption(options, prefix, null);
return (option == null) ? null : Uri.parse(option);
}
@@ -195,7 +196,7 @@
// the scheme in the script because [Script.uri] is used for resolving
// relative URIs mentioned in the script. See the comment on
// [LibraryLoader] for more details.
- return new leg.Script(readableUri, sourceFile);
+ return new leg.Script(readableUri, resourceUri, sourceFile);
}).catchError((error) {
reportReadError(error);
return null;
diff --git a/sdk/lib/_internal/compiler/implementation/closure.dart b/sdk/lib/_internal/compiler/implementation/closure.dart
index eacf7df..72b7b3d 100644
--- a/sdk/lib/_internal/compiler/implementation/closure.dart
+++ b/sdk/lib/_internal/compiler/implementation/closure.dart
@@ -29,7 +29,7 @@
String get name => "Closure Simplifier";
ClosureClassMap computeClosureToClassMapping(Element element,
- Expression node,
+ Node node,
TreeElements elements) {
return measure(() {
ClosureClassMap cached = closureMappingCache[node];
@@ -44,13 +44,17 @@
translator.translateFunction(element, node);
} else if (element.isSynthesized) {
return new ClosureClassMap(null, null, null, new ThisElement(element));
- } else if (node is SendSet) {
- // The lazy initializer of a static.
- translator.translateLazyInitializer(element, node);
} else {
- assert(element.isInstanceMember() && element.isField());
- closureMappingCache[node] =
- new ClosureClassMap(null, null, null, new ThisElement(element));
+ assert(element.isField());
+ VariableElement field = element;
+ if (field.initializer != null) {
+ // The lazy initializer of a static.
+ translator.translateLazyInitializer(element, node, field.initializer);
+ } else {
+ assert(element.isInstanceMember());
+ closureMappingCache[node] =
+ new ClosureClassMap(null, null, null, new ThisElement(element));
+ }
}
assert(closureMappingCache[node] != null);
return closureMappingCache[node];
@@ -80,15 +84,10 @@
ClassElement enclosing)
: super(name, ElementKind.FIELD, enclosing);
- VariableListElement get variables {
- throw new SpannableAssertionFailure(
- variableElement, 'Should not access variables of ClosureFieldElement.');
- }
-
- Expression get cachedNode {
+ Expression get initializer {
throw new SpannableAssertionFailure(
variableElement,
- 'Should not access cachedNode of ClosureFieldElement.');
+ 'Should not access initializer of ClosureFieldElement.');
}
bool isInstanceMember() => true;
@@ -346,10 +345,10 @@
updateClosures();
}
- void translateLazyInitializer(Element element, SendSet node) {
- assert(node.assignmentOperator.source == "=");
- Expression initialValue = node.argumentsNode.nodes.head;
- visitInvokable(element, node, () { visit(initialValue); });
+ void translateLazyInitializer(VariableElement element,
+ VariableDefinitions node,
+ Expression initializer) {
+ visitInvokable(element, node, () { visit(initializer); });
updateClosures();
}
@@ -719,7 +718,7 @@
callElement, thisElement);
}
- void visitInvokable(Element element, Expression node, void visitChildren()) {
+ void visitInvokable(Element element, Node node, void visitChildren()) {
bool oldInsideClosure = insideClosure;
Element oldFunctionElement = currentElement;
ClosureClassMap oldClosureData = closureData;
diff --git a/sdk/lib/_internal/compiler/implementation/compile_time_constants.dart b/sdk/lib/_internal/compiler/implementation/compile_time_constants.dart
index 1a57ccb..aeeae12 100644
--- a/sdk/lib/_internal/compiler/implementation/compile_time_constants.dart
+++ b/sdk/lib/_internal/compiler/implementation/compile_time_constants.dart
@@ -107,15 +107,14 @@
}
pendingVariables.add(element);
- SendSet assignment = node.asSendSet();
+ Expression initializer = element.initializer;
Constant value;
- if (assignment == null) {
+ if (initializer == null) {
// No initial value.
value = new NullConstant();
} else {
- Node right = assignment.arguments.head;
- value =
- compileNodeWithDefinitions(right, definitions, isConst: isConst);
+ value = compileNodeWithDefinitions(
+ initializer, definitions, isConst: isConst);
if (compiler.enableTypeAssertions &&
value != null &&
element.isField()) {
@@ -628,6 +627,21 @@
if (Elements.isUnresolved(constructor)) {
return signalNotCompileTimeConstant(node);
}
+
+ // Deferred types can not be used in const instance creation expressions.
+ // Check if the constructor comes from a deferred library.
+ Send selectorSend = node.send.selector.asSend();
+ if (selectorSend != null) {
+ Identifier receiver = selectorSend.receiver.asIdentifier();
+ if (receiver != null) {
+ Element element = elements[receiver];
+ if (element.isPrefix() && (element as PrefixElement).isDeferred) {
+ return signalNotCompileTimeConstant(node,
+ message: MessageKind.DEFERRED_COMPILE_TIME_CONSTANT);
+ }
+ }
+ }
+
// TODO(ahe): This is nasty: we must eagerly analyze the
// constructor to ensure the redirectionTarget has been computed
// correctly. Find a way to avoid this.
@@ -739,16 +753,16 @@
return node.expression.accept(this);
}
- error(Node node) {
+ error(Node node, MessageKind message) {
// TODO(floitsch): get the list of constants that are currently compiled
// and present some kind of stack-trace.
- compiler.reportFatalError(
- node, MessageKind.NOT_A_COMPILE_TIME_CONSTANT);
+ compiler.reportFatalError(node, message);
}
- Constant signalNotCompileTimeConstant(Node node) {
+ Constant signalNotCompileTimeConstant(Node node,
+ {MessageKind message: MessageKind.NOT_A_COMPILE_TIME_CONSTANT}) {
if (isEvaluatingConstant) {
- error(node);
+ error(node, message);
}
// Else we don't need to do anything. The final handler is only
// optimistically trying to compile constants. So it is normal that we
@@ -765,11 +779,10 @@
Compiler compiler)
: super(handler, elements, compiler, isConst: true);
- error(Node node) {
+ error(Node node, MessageKind message) {
// Just fail without reporting it anywhere.
throw new CompileTimeConstantError(
- MessageKind.NOT_A_COMPILE_TIME_CONSTANT, const {},
- compiler.terseDiagnostics);
+ message, const {}, compiler.terseDiagnostics);
}
}
diff --git a/sdk/lib/_internal/compiler/implementation/compiler.dart b/sdk/lib/_internal/compiler/implementation/compiler.dart
index aa38e28..05fe6c7 100644
--- a/sdk/lib/_internal/compiler/implementation/compiler.dart
+++ b/sdk/lib/_internal/compiler/implementation/compiler.dart
@@ -394,6 +394,11 @@
*/
final Uri sourceMapUri;
+ /**
+ * URI of the main output if the compiler is generating source maps.
+ */
+ final Uri outputUri;
+
/// Emit terse diagnostics without howToFix.
final bool terseDiagnostics;
@@ -621,20 +626,23 @@
this.enableNativeLiveTypeAnalysis: false,
bool emitJavaScript: true,
bool generateSourceMap: true,
- this.analyzeAllFlag: false,
+ bool analyzeAllFlag: false,
bool analyzeOnly: false,
bool analyzeSignaturesOnly: false,
this.preserveComments: false,
this.verbose: false,
this.sourceMapUri: null,
+ this.outputUri: null,
this.buildId: UNDETERMINED_BUILD_ID,
this.terseDiagnostics: false,
this.dumpInfo: false,
this.showPackageWarnings: false,
outputProvider,
List<String> strips: const []})
- : this.analyzeOnly = analyzeOnly || analyzeSignaturesOnly,
+ : this.analyzeOnly =
+ analyzeOnly || analyzeSignaturesOnly || analyzeAllFlag,
this.analyzeSignaturesOnly = analyzeSignaturesOnly,
+ this.analyzeAllFlag = analyzeAllFlag,
this.outputProvider = (outputProvider == null)
? NullSink.outputProvider
: outputProvider {
@@ -756,7 +764,7 @@
} else if (node is Element) {
return spanFromElement(node);
} else if (node is MetadataAnnotation) {
- Uri uri = node.annotatedElement.getCompilationUnit().script.uri;
+ Uri uri = node.annotatedElement.getCompilationUnit().script.readableUri;
return spanFromTokens(node.beginToken, node.endToken, uri);
} else {
throw 'No error location.';
@@ -1019,16 +1027,16 @@
return scanBuiltinLibraries().then((_) {
if (librariesToAnalyzeWhenRun != null) {
return Future.forEach(librariesToAnalyzeWhenRun, (libraryUri) {
- log('analyzing $libraryUri ($buildId)');
+ log('Analyzing $libraryUri ($buildId)');
return libraryLoader.loadLibrary(libraryUri, null, libraryUri);
});
}
}).then((_) {
if (uri != null) {
if (analyzeOnly) {
- log('analyzing $uri ($buildId)');
+ log('Analyzing $uri ($buildId)');
} else {
- log('compiling $uri ($buildId)');
+ log('Compiling $uri ($buildId)');
}
return libraryLoader.loadLibrary(uri, null, uri)
.then((LibraryElement library) {
@@ -1461,7 +1469,7 @@
throw 'Cannot find tokens to produce error message.';
}
if (uri == null && currentElement != null) {
- uri = currentElement.getCompilationUnit().script.uri;
+ uri = currentElement.getCompilationUnit().script.readableUri;
}
return SourceSpan.withCharacterOffsets(begin, end,
(beginOffset, endOffset) => new SourceSpan(uri, beginOffset, endOffset));
@@ -1490,7 +1498,7 @@
element = currentElement;
}
Token position = element.position();
- Uri uri = element.getCompilationUnit().script.uri;
+ Uri uri = element.getCompilationUnit().script.readableUri;
return (position == null)
? new SourceSpan(uri, 0, 0)
: spanFromTokens(position, position, uri);
@@ -1503,7 +1511,7 @@
if (position == null) return spanFromElement(element);
Token token = position.token;
if (token == null) return spanFromElement(element);
- Uri uri = element.getCompilationUnit().script.uri;
+ Uri uri = element.getCompilationUnit().script.readableUri;
return spanFromTokens(token, token, uri);
}
diff --git a/sdk/lib/_internal/compiler/implementation/constants.dart b/sdk/lib/_internal/compiler/implementation/constants.dart
index 53a6362..213f28b 100644
--- a/sdk/lib/_internal/compiler/implementation/constants.dart
+++ b/sdk/lib/_internal/compiler/implementation/constants.dart
@@ -23,6 +23,7 @@
abstract class Constant {
const Constant();
+ // TODO: Make all the isXXX in Constant checks getters.
bool isNull() => false;
bool isBool() => false;
bool isTrue() => false;
@@ -45,6 +46,8 @@
bool isNaN() => false;
bool isMinusZero() => false;
+ bool isZero() => false;
+ bool isOne() => false;
// TODO(johnniwinther): Replace with a 'type' getter.
DartType computeType(Compiler compiler);
@@ -161,6 +164,8 @@
bool isUInt31() => value >= 0 && value < (1 << 31);
bool isUInt32() => value >= 0 && value < (1 << 32);
bool isPositive() => value >= 0;
+ bool isZero() => value == 0;
+ bool isOne() => value == 1;
DartType computeType(Compiler compiler) {
return compiler.intClass.computeType(compiler);
@@ -211,6 +216,8 @@
bool isNaN() => value.isNaN;
// We need to check for the negative sign since -0.0 == 0.0.
bool isMinusZero() => value == 0.0 && value.isNegative;
+ bool isZero() => value == 0.0;
+ bool isOne() => value == 1.0;
DartType computeType(Compiler compiler) {
return compiler.doubleClass.computeType(compiler);
diff --git a/sdk/lib/_internal/compiler/implementation/dart2js.dart b/sdk/lib/_internal/compiler/implementation/dart2js.dart
index 49c002f..6a0363a 100644
--- a/sdk/lib/_internal/compiler/implementation/dart2js.dart
+++ b/sdk/lib/_internal/compiler/implementation/dart2js.dart
@@ -56,7 +56,7 @@
// m[0] is the entire match (which will be equal to argument). m[1]
// is something like "-o" or "--out=", and m[2] is the parameter.
Match m = new RegExp('^(-[a-z]|--.+=)(.*)').firstMatch(argument);
- if (m == null) helpAndFail('Error: Unknown option "$argument".');
+ if (m == null) helpAndFail('Unknown option "$argument".');
return m[2];
}
@@ -109,6 +109,9 @@
String outputLanguage = 'JavaScript';
bool stripArgumentSet = false;
bool analyzeOnly = false;
+ bool analyzeAll = false;
+ // List of provided options that imply that output is expected.
+ List<String> optionsImplyCompilation = <String>[];
bool hasDisallowUnsafeEval = false;
// TODO(johnniwinther): Measure time for reading files.
SourceFileProvider inputProvider = new CompilerSourceFileProvider();
@@ -130,6 +133,7 @@
}
setOutput(Iterator<String> arguments) {
+ optionsImplyCompilation.add(arguments.current);
String path;
if (arguments.current == '-o') {
if (!arguments.moveNext()) {
@@ -145,6 +149,7 @@
}
setOutputType(String argument) {
+ optionsImplyCompilation.add(argument);
if (argument == '--output-type=dart') {
outputLanguage = OUTPUT_LANGUAGE_DART;
if (!explicitOut) {
@@ -162,6 +167,7 @@
}
setStrip(String argument) {
+ optionsImplyCompilation.add(argument);
stripArgumentSet = true;
passThrough(argument);
}
@@ -171,11 +177,21 @@
passThrough(argument);
}
+ setAnalyzeAll(String argument) {
+ analyzeAll = true;
+ passThrough(argument);
+ }
+
setVerbose(_) {
diagnosticHandler.verbose = true;
passThrough('--verbose');
}
+ implyCompilation(String argument) {
+ optionsImplyCompilation.add(argument);
+ passThrough(argument);
+ }
+
addInEnvironment(String argument) {
int eqIndex = argument.indexOf('=');
String name = argument.substring(2, eqIndex);
@@ -198,7 +214,7 @@
String allowedCategoriesString = allowedCategoriesList.join(', ');
for (String category in categories) {
if (!allowedCategories.contains(category)) {
- fail('Error: unsupported library category "$category", '
+ fail('Unsupported library category "$category", '
'supported categories are: $allowedCategoriesString');
}
}
@@ -221,7 +237,7 @@
passThrough('--enable-checked-mode');
break;
case 'm':
- passThrough('--minify');
+ implyCompilation('--minify');
break;
default:
throw 'Internal error: "$shortOption" did not match';
@@ -255,7 +271,7 @@
new OptionHandler('--library-root=.+', setLibraryRoot),
new OptionHandler('--out=.+|-o.*', setOutput, multipleArguments: true),
new OptionHandler('--allow-mock-compilation', passThrough),
- new OptionHandler('--minify|-m', passThrough),
+ new OptionHandler('--minify|-m', implyCompilation),
new OptionHandler('--force-strip=.*', setStrip),
new OptionHandler('--disable-diagnostic-colors',
(_) => diagnosticHandler.enableColors = false),
@@ -264,19 +280,20 @@
new OptionHandler('--enable[_-]checked[_-]mode|--checked',
(_) => passThrough('--enable-checked-mode')),
new OptionHandler('--enable-concrete-type-inference',
- (_) => passThrough('--enable-concrete-type-inference')),
+ (_) => implyCompilation(
+ '--enable-concrete-type-inference')),
new OptionHandler('--trust-type-annotations',
- (_) => passThrough('--trust-type-annotations')),
+ (_) => implyCompilation('--trust-type-annotations')),
new OptionHandler(r'--help|/\?|/h', (_) => wantHelp = true),
new OptionHandler('--package-root=.+|-p.+', setPackageRoot),
- new OptionHandler('--analyze-all', passThrough),
+ new OptionHandler('--analyze-all', setAnalyzeAll),
new OptionHandler('--analyze-only', setAnalyzeOnly),
- new OptionHandler('--analyze-signatures-only', passThrough),
+ new OptionHandler('--analyze-signatures-only', setAnalyzeOnly),
new OptionHandler('--disable-native-live-type-analysis', passThrough),
new OptionHandler('--categories=.*', setCategories),
- new OptionHandler('--disable-type-inference', passThrough),
+ new OptionHandler('--disable-type-inference', implyCompilation),
new OptionHandler('--terse', passThrough),
- new OptionHandler('--dump-info', passThrough),
+ new OptionHandler('--dump-info', implyCompilation),
new OptionHandler('--disallow-unsafe-eval',
(_) => hasDisallowUnsafeEval = true),
new OptionHandler('--show-package-warnings', passThrough),
@@ -284,7 +301,7 @@
// The following two options must come last.
new OptionHandler('-.*', (String argument) {
- helpAndFail('Error: Unknown option "$argument".');
+ helpAndFail("Unknown option '$argument'.");
}),
new OptionHandler('.*', (String argument) {
arguments.add(nativeToUriPath(argument));
@@ -299,21 +316,21 @@
if (hasDisallowUnsafeEval) {
String precompiledName =
relativize(currentDirectory, computePrecompiledUri(), isWindows);
- helpAndFail("Error: option '--disallow-unsafe-eval' has been removed."
+ helpAndFail("Option '--disallow-unsafe-eval' has been removed."
" Instead, the compiler generates a file named"
" '$precompiledName'.");
}
if (outputLanguage != OUTPUT_LANGUAGE_DART && stripArgumentSet) {
- helpAndFail('Error: --force-strip may only be used with '
- '--output-type=dart');
+ helpAndFail("Option '--force-strip' may only be used with "
+ "'--output-type=dart'.");
}
if (arguments.isEmpty) {
- helpAndFail('Error: No Dart file specified.');
+ helpAndFail('No Dart file specified.');
}
if (arguments.length > 1) {
var extra = arguments.sublist(1);
- helpAndFail('Error: Extra arguments: ${extra.join(" ")}');
+ helpAndFail('Extra arguments: ${extra.join(" ")}');
}
Uri uri = currentDirectory.resolve(arguments[0]);
@@ -321,10 +338,24 @@
packageRoot = uri.resolve('./packages/');
}
- diagnosticHandler.info('package root is $packageRoot');
+ if ((analyzeOnly || analyzeAll) && !optionsImplyCompilation.isEmpty) {
+ if (!analyzeOnly) {
+ diagnosticHandler.info(
+ "Option '--analyze-all' implies '--analyze-only'.",
+ api.Diagnostic.INFO);
+ }
+ diagnosticHandler.info(
+ "Options $optionsImplyCompilation indicate that output is expected, "
+ "but compilation is turned off by the option '--analyze-only'.",
+ api.Diagnostic.INFO);
+ }
+ if (analyzeAll) analyzeOnly = true;
+
+ diagnosticHandler.info('Package root is $packageRoot');
int totalCharactersWritten = 0;
+ options.add('--out=$out');
options.add('--source-map=$sourceMapOut');
List<String> allOutputFiles = new List<String>();
@@ -332,12 +363,12 @@
compilationDone(String code) {
if (analyzeOnly) return;
if (code == null) {
- fail('Error: Compilation failed.');
+ fail('Compilation failed.');
}
writeString(Uri.parse('$out.deps'),
getDepsOutput(inputProvider.sourceFiles));
diagnosticHandler.info(
- 'compiled ${inputProvider.dartCharactersRead} characters Dart '
+ 'Compiled ${inputProvider.dartCharactersRead} characters Dart '
'-> $totalCharactersWritten characters $outputLanguage '
'in ${relativize(currentDirectory, out, isWindows)}');
if (diagnosticHandler.verbose) {
@@ -375,14 +406,14 @@
String outName = out.path.substring(out.path.lastIndexOf('/') + 1);
uri = out.resolve('${outName}.$extension');
} else {
- fail('Error: Unknown extension: $extension');
+ fail('Unknown extension: $extension');
}
} else {
uri = out.resolve('$name.$extension');
}
if (uri.scheme != 'file') {
- fail('Error: Unhandled scheme ${uri.scheme} in $uri.');
+ fail('Unhandled scheme ${uri.scheme} in $uri.');
}
RandomAccessFile output;
@@ -410,21 +441,6 @@
}
onDone() {
- if (sourceMapFileName != null) {
- // Using # is the new proposed standard. @ caused problems in Internet
- // Explorer due to "Conditional Compilation Statements" in JScript,
- // see:
- // http://msdn.microsoft.com/en-us/library/7kx09ct1(v=vs.80).aspx
- // About source maps, see:
- // https://docs.google.com/a/google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit
- // TODO(http://dartbug.com/11914): Remove @ line.
- String sourceMapTag = '''
-
-//# sourceMappingURL=$sourceMapFileName
-//@ sourceMappingURL=$sourceMapFileName
-''';
- writeStringSync(sourceMapTag);
- }
output.closeSync();
if (isPrimaryOutput) {
totalCharactersWritten += charactersWritten;
@@ -460,7 +476,7 @@
void writeString(Uri uri, String text) {
if (uri.scheme != 'file') {
- fail('Error: Unhandled scheme ${uri.scheme}.');
+ fail('Unhandled scheme ${uri.scheme}.');
}
var file = new File(uri.toFilePath()).openSync(mode: FileMode.WRITE);
file.writeStringSync(text);
@@ -472,7 +488,7 @@
diagnosticHandler.diagnosticHandler(
null, -1, -1, message, api.Diagnostic.ERROR);
} else {
- print(message);
+ print('Error: $message');
}
exitFunc(1);
}
@@ -534,9 +550,7 @@
--analyze-all
Analyze all code. Without this option, the compiler only analyzes
- code that is reachable from [main]. This option is useful for
- finding errors in libraries, but using it can result in bigger and
- slower output.
+ code that is reachable from [main]. This option implies --analyze-only.
--analyze-only
Analyze but do not generate code.
diff --git a/sdk/lib/_internal/compiler/implementation/dart_backend/backend.dart b/sdk/lib/_internal/compiler/implementation/dart_backend/backend.dart
index 6f824f5..57e36da 100644
--- a/sdk/lib/_internal/compiler/implementation/dart_backend/backend.dart
+++ b/sdk/lib/_internal/compiler/implementation/dart_backend/backend.dart
@@ -17,50 +17,6 @@
: this.treeElements = new TreeElementMapping(null);
}
-// TODO(ahe): This class should not subclass [TreeElementMapping], if
-// anything, it should implement TreeElements.
-class AggregatedTreeElements extends TreeElementMapping {
- final List<TreeElements> treeElements;
-
- AggregatedTreeElements() : treeElements = <TreeElements>[], super(null);
-
- Element operator[](Node node) {
- final result = super[node];
- return result != null ? result : getFirstNotNullResult((e) => e[node]);
- }
-
- Selector getSelector(Send send) {
- final result = super.getSelector(send);
- return result != null ?
- result : getFirstNotNullResult((e) => e.getSelector(send));
- }
-
- DartType getType(Node node) {
- final result = super.getType(node);
- return result != null ?
- result : getFirstNotNullResult((e) => e.getType(node));
- }
-
- getFirstNotNullResult(f(TreeElements element)) {
- for (final element in treeElements) {
- final result = f(element);
- if (result != null) return result;
- }
-
- return null;
- }
-}
-
-class VariableListAst extends ElementAst {
- VariableListAst(ast) : super(ast, new AggregatedTreeElements());
-
- add(VariableElement element, TreeElements treeElements) {
- AggregatedTreeElements e = this.treeElements;
- e[element.cachedNode] = element;
- e.treeElements.add(treeElements);
- }
-}
-
class DartBackend extends Backend {
final List<CompilerTask> tasks;
final bool forceStripTypes;
@@ -310,13 +266,6 @@
resolvedElements.forEach((element, treeElements) {
if (!shouldOutput(element) || treeElements == null) return;
var elementAst = new ElementAst(parse(element), treeElements);
- if (element.isField()) {
- final list = (element as VariableElement).variables;
- elementAst = elementAsts.putIfAbsent(
- list, () => new VariableListAst(parse(list)));
- (elementAst as VariableListAst).add(element, treeElements);
- element = list;
- }
if (element.isMember()) {
ClassElement enclosingClass = element.getEnclosingClass();
@@ -449,7 +398,11 @@
final unparser = new EmitterUnparser(renames);
emitCode(unparser, imports, topLevelNodes, memberNodes);
- compiler.assembledCode = unparser.result;
+ String assembledCode = unparser.result;
+ compiler.outputProvider('', 'dart')
+ ..add(assembledCode)
+ ..close();
+ compiler.assembledCode = assembledCode;
// Output verbose info about size ratio of resulting bundle to all
// referenced non-platform sources.
@@ -552,12 +505,10 @@
final newClassElementCallback;
ReferencedElementCollector(this.compiler,
- Element rootElement,
+ this.rootElement,
this.treeElements,
this.newTypedefElementCallback,
- this.newClassElementCallback)
- : this.rootElement =
- rootElement is VariableElement ? rootElement.variables : rootElement;
+ this.newClassElementCallback);
visitNode(Node node) {
node.visitChildren(this);
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 fec7db6..6faf905 100644
--- a/sdk/lib/_internal/compiler/implementation/dart_backend/placeholder_collector.dart
+++ b/sdk/lib/_internal/compiler/implementation/dart_backend/placeholder_collector.dart
@@ -226,12 +226,12 @@
Node elementNode = elementAst.ast;
if (element is FunctionElement) {
collectFunctionDeclarationPlaceholders(element, elementNode);
- } else if (element is VariableListElement) {
+ } else if (element is VariableElement) {
VariableDefinitions definitions = elementNode;
- for (Node definition in definitions.definitions) {
- final definitionElement = treeElements[definition];
- // definitionElement == null if variable is actually unused.
- if (definitionElement == null) continue;
+ Node definition = definitions.definitions.nodes.head;
+ final definitionElement = treeElements[elementNode];
+ // definitionElement == null if variable is actually unused.
+ if (definitionElement != null) {
collectFieldDeclarationPlaceholders(definitionElement, definition);
}
makeVarDeclarationTypePlaceholder(definitions);
@@ -505,6 +505,10 @@
}
visitVariableDefinitions(VariableDefinitions node) {
+ Element definitionElement = treeElements[node];
+ if (definitionElement == backend.mirrorHelperSymbolsMap) {
+ backend.registerMirrorHelperElement(definitionElement, node);
+ }
// Collect only local placeholders.
for (Node definition in node.definitions.nodes) {
Element definitionElement = treeElements[definition];
@@ -513,9 +517,6 @@
// TODO(smok): Fix this when resolver correctly deals with
// such cases.
if (definitionElement == null) continue;
- if (definitionElement == backend.mirrorHelperSymbolsMap) {
- backend.registerMirrorHelperElement(definitionElement, node);
- }
Send send = definition.asSend();
if (send != null) {
// May get FunctionExpression here in definition.selector
diff --git a/sdk/lib/_internal/compiler/implementation/dart_types.dart b/sdk/lib/_internal/compiler/implementation/dart_types.dart
index 04aceea..aedc7ea 100644
--- a/sdk/lib/_internal/compiler/implementation/dart_types.dart
+++ b/sdk/lib/_internal/compiler/implementation/dart_types.dart
@@ -1175,7 +1175,7 @@
final PotentialSubtypeVisitor potentialSubtypeVisitor;
factory Types(Compiler compiler, BaseClassElementX dynamicElement) {
- LibraryElement library = new LibraryElementX(new Script(null, null));
+ LibraryElement library = new LibraryElementX(new Script(null, null, null));
VoidType voidType = new VoidType(new VoidElementX(library));
DynamicType dynamicType = new DynamicType(dynamicElement);
dynamicElement.rawTypeCache = dynamicElement.thisType = dynamicType;
diff --git a/sdk/lib/_internal/compiler/implementation/deferred_load.dart b/sdk/lib/_internal/compiler/implementation/deferred_load.dart
index 7fdb796..3e92c1c 100644
--- a/sdk/lib/_internal/compiler/implementation/deferred_load.dart
+++ b/sdk/lib/_internal/compiler/implementation/deferred_load.dart
@@ -13,6 +13,9 @@
StringConstant,
invariant;
+import 'dart_backend/dart_backend.dart' show
+ DartBackend;
+
import 'elements/elements.dart' show
Element,
ClassElement,
@@ -22,6 +25,7 @@
LibraryElement,
MetadataAnnotation,
ScopeContainerElement,
+ PrefixElement,
ClosureContainer;
import 'util/util.dart' show
@@ -186,17 +190,31 @@
/// Answers whether the [import] has a [DeferredLibrary] annotation.
bool _isImportDeferred(Import import) {
- Link<MetadataAnnotation> metadatalist = import.metadata;
- if (metadatalist == null) return false;
- for (MetadataAnnotation metadata in metadatalist) {
+ return _allDeferredImports.containsKey(import);
+ }
+
+ /// Checks whether the [import] has a [DeferredLibrary] annotation and stores
+ /// the information in [_allDeferredImports] and on the corresponding
+ /// prefixElement.
+ void _markIfDeferred(Import import, LibraryElement library) {
+ Link<MetadataAnnotation> metadataList = import.metadata;
+ if (metadataList == null) return;
+ for (MetadataAnnotation metadata in metadataList) {
metadata.ensureResolved(compiler);
Element element = metadata.value.computeType(compiler).element;
- if (metadata.value.computeType(compiler).element
- == deferredLibraryClass) {
- return true;
+ if (element == deferredLibraryClass) {
+ _allDeferredImports[import] = library.getLibraryFromTag(import);
+ // On encountering a deferred library without a prefix we report an
+ // error, but continue the compilation to possibly give more
+ // information. Therefore it is neccessary to check if there is a prefix
+ // here.
+ Element maybePrefix = library.find(import.prefix.toString());
+ if (maybePrefix != null && maybePrefix.isPrefix()) {
+ PrefixElement prefix = maybePrefix;
+ prefix.markAsDeferred();
+ }
}
}
- return false;
}
/// Answers whether [element] is explicitly deferred when referred to from
@@ -635,7 +653,6 @@
void ensureMetadataResolved(Compiler compiler) {
_allDeferredImports[_fakeMainImport] = compiler.mainApp;
- bool deferredUsedFromMain = false;
var lastDeferred;
// When detecting duplicate prefixes of deferred libraries there are 4
// cases of duplicate prefixes:
@@ -652,7 +669,7 @@
// import "lib.dart" as a;
// import "lib2.dart" as a;
// We must be able to signal error for case 1, 2, 3, but accept case 4.
-
+
// The prefixes that have been used by any imports in this library.
Setlet<String> usedPrefixes = new Setlet<String>();
// The last deferred import we saw with a given prefix (if any).
@@ -666,6 +683,7 @@
for (LibraryTag tag in library.tags) {
if (tag is! Import) continue;
Import import = tag;
+ _markIfDeferred(import, library);
String prefix = (import.prefix != null)
? import.prefix.toString()
: null;
@@ -680,11 +698,7 @@
prefixDeferredImport[prefix] = import;
}
splitProgram = true;
- _allDeferredImports[tag] = library.getLibraryFromTag(tag);
lastDeferred = import.metadata.first;
- if (library == compiler.mainApp) {
- deferredUsedFromMain = true;
- }
}
if (prefix != null) {
if (previousDeferredImport != null ||
@@ -700,11 +714,12 @@
}
});
}
- if (splitProgram && !deferredUsedFromMain) {
+ if (splitProgram && compiler.backend is DartBackend) {
+ // TODO(sigurdm): Implement deferred loading for dart2dart.
+ splitProgram = false;
compiler.reportInfo(
lastDeferred,
- MessageKind.DEFERRED_LIBRARY_NOT_FROM_MAIN);
- splitProgram = false;
+ MessageKind.DEFERRED_LIBRARY_DART_2_DART);
}
}
}
diff --git a/sdk/lib/_internal/compiler/implementation/dump_info.dart b/sdk/lib/_internal/compiler/implementation/dump_info.dart
index 37c54b5..63eb7ea 100644
--- a/sdk/lib/_internal/compiler/implementation/dump_info.dart
+++ b/sdk/lib/_internal/compiler/implementation/dump_info.dart
@@ -292,7 +292,7 @@
return null;
}
int size = 0;
- DartType type = element.variables.type;
+ DartType type = element.computeType(compiler);
List<InfoNode> contents = new List<InfoNode>();
if (emittedCode != null) {
contents.add(new CodeInfoNode(
diff --git a/sdk/lib/_internal/compiler/implementation/elements/elements.dart b/sdk/lib/_internal/compiler/implementation/elements/elements.dart
index 3a9c4c7..010438f 100644
--- a/sdk/lib/_internal/compiler/implementation/elements/elements.dart
+++ b/sdk/lib/_internal/compiler/implementation/elements/elements.dart
@@ -743,6 +743,9 @@
abstract class PrefixElement extends Element {
void addImport(Element element, Import import, DiagnosticListener listener);
Element lookupLocalMember(String memberName);
+ /// Is true if this prefix belongs to a deferred import.
+ bool get isDeferred;
+ void markAsDeferred();
}
abstract class TypedefElement extends Element
@@ -763,26 +766,18 @@
}
abstract class VariableElement extends Element {
- VariableListElement get variables;
-
- // TODO(kasperl): Try to get rid of this.
- Expression get cachedNode;
+ Expression get initializer;
}
abstract class FieldElement extends VariableElement
implements ClosureContainer {}
-abstract class FieldParameterElement extends VariableElement {
- VariableElement get fieldElement;
+abstract class ParameterElement extends VariableElement {
+ FunctionSignature get functionSignature;
}
-// TODO(johnniwinther): Remove this interface.
-abstract class VariableListElement extends Element {
- DartType get type;
- FunctionSignature get functionSignature;
-
- // TODO(kasperl): Try to get rid of this.
- void set type(DartType value);
+abstract class FieldParameterElement extends ParameterElement {
+ VariableElement get fieldElement;
}
/**
diff --git a/sdk/lib/_internal/compiler/implementation/elements/modelx.dart b/sdk/lib/_internal/compiler/implementation/elements/modelx.dart
index 9a226bc..707aaa8 100644
--- a/sdk/lib/_internal/compiler/implementation/elements/modelx.dart
+++ b/sdk/lib/_internal/compiler/implementation/elements/modelx.dart
@@ -60,6 +60,10 @@
void addMetadata(MetadataAnnotation annotation) {
assert(annotation.annotatedElement == null);
annotation.annotatedElement = this;
+ addMetadataInternal(annotation);
+ }
+
+ void addMetadataInternal(MetadataAnnotation annotation) {
metadata = metadata.prepend(annotation);
}
@@ -639,7 +643,7 @@
int compareTo(CompilationUnitElement other) {
if (this == other) return 0;
- return '${script.uri}'.compareTo('${other.script.uri}');
+ return '${script.readableUri}'.compareTo('${other.script.readableUri}');
}
accept(ElementVisitor visitor) => visitor.visitCompilationUnitElement(this);
@@ -789,7 +793,8 @@
new Map<LibraryDependency, LibraryElement>();
LibraryElementX(Script script, [Uri canonicalUri, LibraryElement this.origin])
- : this.canonicalUri = ((canonicalUri == null) ? script.uri : canonicalUri),
+ : this.canonicalUri =
+ ((canonicalUri == null) ? script.readableUri : canonicalUri),
super(script.name, ElementKind.LIBRARY, null) {
entryCompilationUnit = new CompilationUnitElementX(script, this);
if (isPatch) {
@@ -1016,6 +1021,8 @@
final ImportScope importScope = new ImportScope();
+ bool isDeferred = false;
+
PrefixElementX(String prefix, Element enclosing, this.firstPosition)
: super(prefix, ElementKind.PREFIX, enclosing);
@@ -1030,6 +1037,10 @@
}
accept(ElementVisitor visitor) => visitor.visitPrefixElement(this);
+
+ void markAsDeferred() {
+ isDeferred = true;
+ }
}
class TypedefElementX extends ElementX implements TypedefElement {
@@ -1117,64 +1128,119 @@
accept(ElementVisitor visitor) => visitor.visitTypedefElement(this);
}
-abstract class MetadataContainer extends Element {
- Link<MetadataAnnotation> metadata;
+// This class holds common information for a list of variable or field
+// declarations. It contains the node, and the type. A [VariableElementX]
+// forwards its [computeType] and [parseNode] methods to this class.
+class VariableList {
+ VariableDefinitions definitions;
+ DartType type;
+ final Modifiers modifiers;
+ Link<MetadataAnnotation> metadata = const Link<MetadataAnnotation>();
+
+ VariableList(Modifiers this.modifiers);
+
+ VariableList.node(VariableDefinitions node, this.type)
+ : this.definitions = node,
+ this.modifiers = node.modifiers {
+ assert(modifiers != null);
+ }
+
+ VariableDefinitions parseNode(Element element, DiagnosticListener listener) {
+ return definitions;
+ }
+
+ DartType computeType(Element element, Compiler compiler) => type;
}
-class VariableElementX extends ElementX implements VariableElement,
- MetadataContainer {
- final VariableListElement variables;
- Expression cachedNode; // The send or the identifier in the variables list.
+class VariableElementX extends ElementX implements VariableElement {
+ final Token token;
+ final VariableList variables;
+ VariableDefinitions definitionsCache;
+ Expression initializerCache;
Modifiers get modifiers => variables.modifiers;
VariableElementX(String name,
- VariableListElement variables,
ElementKind kind,
- this.cachedNode)
+ Element enclosingElement,
+ VariableList variables,
+ this.token)
: this.variables = variables,
- super(name, kind, variables.enclosingElement);
+ super(name, kind, enclosingElement);
VariableElementX.synthetic(String name,
- ElementKind kind,
- Element enclosing) :
+ ElementKind kind,
+ Element enclosing)
+ : token = null,
variables = null,
super(name, kind, enclosing);
- void addMetadata(MetadataAnnotation metadata) {
- variables.addMetadata(metadata);
- }
-
+ // TODO(johnniwinther): Ensure that the [TreeElements] for this variable hold
+ // the mappings for all its metadata.
Link<MetadataAnnotation> get metadata => variables.metadata;
+ void addMetadataInternal(MetadataAnnotation annotation) {
+ variables.metadata = variables.metadata.prepend(annotation);
+ }
+
+ Expression get initializer {
+ assert(invariant(this, definitionsCache != null,
+ message: "Initializer has not been computed for $this."));
+ return initializerCache;
+ }
+
Node parseNode(DiagnosticListener listener) {
- if (cachedNode != null) return cachedNode;
- VariableDefinitions definitions = variables.parseNode(listener);
+ if (definitionsCache != null) return definitionsCache;
+
+ VariableDefinitions definitions = variables.parseNode(this, listener);
+ Expression node;
+ int count = 0;
for (Link<Node> link = definitions.definitions.nodes;
!link.isEmpty; link = link.tail) {
Expression initializedIdentifier = link.head;
Identifier identifier = initializedIdentifier.asIdentifier();
if (identifier == null) {
- identifier = initializedIdentifier.asSendSet().selector.asIdentifier();
+ SendSet sendSet = initializedIdentifier.asSendSet();
+ identifier = sendSet.selector.asIdentifier();
+ if (identical(name, identifier.source)) {
+ node = initializedIdentifier;
+ initializerCache = sendSet.arguments.first;
+ }
+ } else if (identical(name, identifier.source)) {
+ node = initializedIdentifier;
}
- if (identical(name, identifier.source)) {
- cachedNode = initializedIdentifier;
- return cachedNode;
- }
+ count++;
}
- listener.cancel('internal error: could not find $name', node: variables);
- return null;
+ if (node == null) {
+ listener.cancel('internal error: could not find $name',
+ node: definitions);
+ }
+ if (count == 1) {
+ definitionsCache = definitions;
+ } else {
+ // Create a [VariableDefinitions] node for the single definition of
+ // [node].
+ definitionsCache = new VariableDefinitions(definitions.type,
+ definitions.modifiers, new NodeList(
+ definitions.definitions.beginToken,
+ const Link<Node>().prepend(node),
+ definitions.definitions.endToken));
+ }
+ return definitionsCache;
}
DartType computeType(Compiler compiler) {
- return variables.computeType(compiler);
+ // Call [parseNode] to ensure that [definitionsCache] and [initializerCache]
+ // are set as a consequence of calling [computeType].
+ parseNode(compiler);
+ return variables.computeType(this, compiler);
}
- bool isInstanceMember() => variables.isInstanceMember();
+ bool isInstanceMember() => isMember() && !modifiers.isStatic();
// Note: cachedNode.getBeginToken() will not be correct in all
// cases, for example, for function typed parameters.
- Token position() => findMyName(variables.position());
+ Token position() => token;
accept(ElementVisitor visitor) => visitor.visitVariableElement(this);
}
@@ -1182,10 +1248,11 @@
class FieldElementX extends VariableElementX implements FieldElement {
List<FunctionElement> nestedClosures = new List<FunctionElement>();
- FieldElementX(String name,
- VariableListElement variables,
- Expression cachedNode)
- : super(name, variables, ElementKind.FIELD, cachedNode);
+ FieldElementX(Identifier name,
+ Element enclosingElement,
+ VariableList variables)
+ : super(name.source, ElementKind.FIELD, enclosingElement,
+ variables, name.token);
accept(ElementVisitor visitor) => visitor.visitFieldElement(this);
}
@@ -1198,13 +1265,13 @@
implements FieldParameterElement {
VariableElement fieldElement;
- FieldParameterElementX(String name,
- Element enclosingElement,
+ FieldParameterElementX(Element enclosingElement,
VariableDefinitions variables,
- Expression node,
+ Identifier identifier,
+ Expression initializer,
this.fieldElement)
- : super(name, enclosingElement, ElementKind.FIELD_PARAMETER,
- variables, node);
+ : super(ElementKind.FIELD_PARAMETER, enclosingElement,
+ variables, identifier, initializer);
DartType computeType(Compiler compiler) {
if (definitions.type == null) {
@@ -1216,69 +1283,16 @@
accept(ElementVisitor visitor) => visitor.visitFieldParameterElement(this);
}
-// This element represents a list of variable or field declaration.
-// It contains the node, and the type. A [VariableElement] always
-// references its [VariableListElement]. It forwards its
-// [computeType] and [parseNode] methods to this element.
-class VariableListElementX extends ElementX implements VariableListElement,
- MetadataContainer {
- VariableDefinitions cachedNode;
- DartType type;
- final Modifiers modifiers;
-
- FunctionSignature get functionSignature => null;
-
- VariableListElementX(ElementKind kind,
- Modifiers this.modifiers,
- Element enclosing)
- : super(null, kind, enclosing);
-
- VariableListElementX.node(VariableDefinitions node,
- ElementKind kind,
- Element enclosing)
- : super(null, kind, enclosing),
- this.cachedNode = node,
- this.modifiers = node.modifiers {
- assert(modifiers != null);
- }
-
- VariableDefinitions parseNode(DiagnosticListener listener) {
- return cachedNode;
- }
-
- DartType computeType(Compiler compiler) {
- if (type != null) return type;
- compiler.withCurrentElement(this, () {
- VariableDefinitions node = parseNode(compiler);
- if (node.type != null) {
- type = compiler.resolveTypeAnnotation(this, node.type);
- } else {
- type = compiler.types.dynamicType;
- }
- });
- assert(type != null);
- return type;
- }
-
- Token position() => cachedNode.getBeginToken();
-
- bool isInstanceMember() {
- return isMember() && !modifiers.isStatic();
- }
-
- accept(ElementVisitor visitor) => visitor.visitVariableListElement(this);
-}
-
/// [Element] for a formal parameter.
///
/// A [ParameterElementX] can be patched. A parameter of an external method is
/// patched with the corresponding parameter of the patch method. This is done
/// to ensure that default values on parameters are computed once (on the
/// origin parameter) but can be found through both the origin and the patch.
-class ParameterElementX extends ElementX
- implements VariableElement, VariableListElement, MetadataContainer {
- VariableDefinitions definitions;
- Expression cachedNode;
+class ParameterElementX extends ElementX implements ParameterElement {
+ final VariableDefinitions definitions;
+ final Identifier identifier;
+ final Expression initializer;
DartType type;
/**
@@ -1288,22 +1302,19 @@
*/
FunctionSignature functionSignature;
- ParameterElementX(String name,
+ ParameterElementX(ElementKind elementKind,
Element enclosingElement,
- ElementKind elementKind,
- VariableDefinitions definitions,
- Expression node)
- : this.definitions = definitions,
- this.cachedNode = node,
- super(name, elementKind, enclosingElement);
-
- VariableListElement get variables => this;
+ this.definitions,
+ Identifier identifier,
+ this.initializer)
+ : this.identifier = identifier,
+ super(identifier.source, elementKind, enclosingElement);
Modifiers get modifiers => definitions.modifiers;
- Token position() => cachedNode.getBeginToken();
+ Token position() => identifier.getBeginToken();
- Node parseNode(DiagnosticListener listener) => cachedNode;
+ Node parseNode(DiagnosticListener listener) => definitions;
DartType computeType(Compiler compiler) {
assert(invariant(this, type != null,
diff --git a/sdk/lib/_internal/compiler/implementation/elements/visitor.dart b/sdk/lib/_internal/compiler/implementation/elements/visitor.dart
index 38d88b3..b234f16 100644
--- a/sdk/lib/_internal/compiler/implementation/elements/visitor.dart
+++ b/sdk/lib/_internal/compiler/implementation/elements/visitor.dart
@@ -29,7 +29,6 @@
R visitVariableElement(VariableElement e) => visitElement(e);
R visitFieldElement(FieldElement e) => visitVariableElement(e);
R visitFieldParameterElement(FieldParameterElement e) => visitElement(e);
- R visitVariableListElement(VariableListElement e) => visitElement(e);
R visitAbstractFieldElement(AbstractFieldElement e) => visitElement(e);
R visitFunctionElement(FunctionElement e) => visitElement(e);
R visitConstructorBodyElement(ConstructorBodyElement e) => visitElement(e);
diff --git a/sdk/lib/_internal/compiler/implementation/enqueue.dart b/sdk/lib/_internal/compiler/implementation/enqueue.dart
index 4300207..85c558e 100644
--- a/sdk/lib/_internal/compiler/implementation/enqueue.dart
+++ b/sdk/lib/_internal/compiler/implementation/enqueue.dart
@@ -641,10 +641,12 @@
queue.add(new ResolutionWorkItem(element, itemCompilationContextCreator()));
- // Enable isolate support if we start using something from the
- // isolate library, or timers for the async library.
+ // Enable isolate support if we start using something from the isolate
+ // library, or timers for the async library. We exclude constant fields,
+ // which are ending here because their initializing expression is compiled.
LibraryElement library = element.getLibrary();
- if (!compiler.hasIsolateSupport()) {
+ if (!compiler.hasIsolateSupport() &&
+ (!element.isField() || !element.modifiers.isConst())) {
String uri = library.canonicalUri.toString();
if (uri == 'dart:isolate') {
enableIsolateSupport(library);
diff --git a/sdk/lib/_internal/compiler/implementation/inferrer/concrete_types_inferrer.dart b/sdk/lib/_internal/compiler/implementation/inferrer/concrete_types_inferrer.dart
index 76aaa00..3533dcc 100644
--- a/sdk/lib/_internal/compiler/implementation/inferrer/concrete_types_inferrer.dart
+++ b/sdk/lib/_internal/compiler/implementation/inferrer/concrete_types_inferrer.dart
@@ -1589,11 +1589,11 @@
return null;
}
- handleLeftoverOptionalParameter(Element parameter) {
- Send send = parameter.parseNode(compiler).asSendSet();
- result[parameter] = (send == null)
+ handleLeftoverOptionalParameter(ParameterElement parameter) {
+ Expression initializer = parameter.initializer;
+ result[parameter] = (initializer == null)
? nullConcreteType
- : analyzeDefaultValue(function, send.arguments.head);
+ : analyzeDefaultValue(function, initializer);
}
final Iterator<ConcreteType> remainingPositionalArguments =
@@ -1770,11 +1770,11 @@
* Analyze the initializer of a field and update [inferredFieldTypes]
* accordingly. Invalidate the readers of the field if needed.
*/
- ConcreteType analyzeFieldInitialization(Element field) {
+ ConcreteType analyzeFieldInitialization(VariableElement field) {
Visitor visitor = new TypeInferrerVisitor(field, this, null, new Map());
- Node tree = field.parseNode(compiler);
- ConcreteType type = initializerDo(tree, (node) => node.accept(visitor));
- if (type != null) {
+ ConcreteType type;
+ if (field.initializer != null) {
+ type = field.initializer.accept(visitor);
inferredFieldTypes[field] = type;
invalidateReaders(field);
}
diff --git a/sdk/lib/_internal/compiler/implementation/inferrer/simple_types_inferrer.dart b/sdk/lib/_internal/compiler/implementation/inferrer/simple_types_inferrer.dart
index 89e9015..03d318f 100644
--- a/sdk/lib/_internal/compiler/implementation/inferrer/simple_types_inferrer.dart
+++ b/sdk/lib/_internal/compiler/implementation/inferrer/simple_types_inferrer.dart
@@ -442,10 +442,15 @@
T run() {
var node = analyzedElement.parseNode(compiler);
- if (analyzedElement.isField() && node.asSendSet() == null) {
- // Eagerly bailout, because computing the closure data only
- // works for functions and field assignments.
- return types.nullType;
+ ast.Expression initializer;
+ if (analyzedElement.isField()) {
+ VariableElement fieldElement = analyzedElement;
+ initializer = fieldElement.initializer;
+ if (initializer == null) {
+ // Eagerly bailout, because computing the closure data only
+ // works for functions and field assignments.
+ return types.nullType;
+ }
}
// Update the locals that are boxed in [locals]. These locals will
// be handled specially, in that we are computing their LUB at
@@ -461,15 +466,14 @@
locals.setCapturedAndBoxed(variable, field);
});
if (analyzedElement.isField()) {
- return visit(node.asSendSet().arguments.head);
+ return visit(initializer);
}
FunctionElement function = analyzedElement;
FunctionSignature signature = function.computeSignature(compiler);
signature.forEachOptionalParameter((element) {
- ast.Node node = element.parseNode(compiler);
- ast.Send send = node.asSendSet();
- T type = (send == null) ? types.nullType : visit(send.arguments.head);
+ ast.Expression defaultValue = element.initializer;
+ T type = (defaultValue == null) ? types.nullType : visit(defaultValue);
inferrer.setDefaultTypeOfParameter(element, type);
});
@@ -530,7 +534,7 @@
cls.forEachInstanceField((_, field) {
if (field.modifiers.isFinal()) return;
T type = locals.fieldScope.readField(field);
- if (type == null && field.parseNode(compiler).asSendSet() == null) {
+ if (type == null && field.initializer == null) {
inferrer.recordTypeOfNonFinalField(node, field, types.nullType);
}
});
@@ -681,7 +685,7 @@
&& isInClassOrSubclass(element)
&& !element.modifiers.isFinal()
&& locals.fieldScope.readField(element) == null
- && element.parseNode(compiler).asSendSet() == null) {
+ && element.initializer == null) {
// If the field is being used before this constructor
// actually had a chance to initialize it, say it can be
// null.
diff --git a/sdk/lib/_internal/compiler/implementation/inferrer/type_graph_inferrer.dart b/sdk/lib/_internal/compiler/implementation/inferrer/type_graph_inferrer.dart
index c87036e..bac4d44 100644
--- a/sdk/lib/_internal/compiler/implementation/inferrer/type_graph_inferrer.dart
+++ b/sdk/lib/_internal/compiler/implementation/inferrer/type_graph_inferrer.dart
@@ -634,11 +634,12 @@
addedInGraph++;
if (element.isField()) {
- ast.Node node = element.parseNode(compiler);
+ VariableElement fieldElement = element;
+ ast.Node node = fieldElement.parseNode(compiler);
if (element.modifiers.isFinal() || element.modifiers.isConst()) {
// If [element] is final and has an initializer, we record
// the inferred type.
- if (node.asSendSet() != null) {
+ if (fieldElement.initializer != null) {
if (type is! ListTypeInformation) {
// For non-container types, the constant handler does
// constant folding that could give more precise results.
@@ -657,7 +658,7 @@
} else if (!element.isInstanceMember()) {
recordType(element, types.nullType);
}
- } else if (node.asSendSet() == null) {
+ } else if (fieldElement.initializer == null) {
// Only update types of static fields if there is no
// assignment. Instance fields are dealt with in the constructor.
if (Elements.isStaticOrTopLevelField(element)) {
@@ -667,9 +668,9 @@
recordTypeOfNonFinalField(node, element, type);
}
if (Elements.isStaticOrTopLevelField(element) &&
- node.asSendSet() != null &&
+ fieldElement.initializer != null &&
!element.modifiers.isConst()) {
- var argument = node.asSendSet().arguments.head;
+ var argument = fieldElement.initializer;
// TODO(13429): We could do better here by using the
// constant handler to figure out if it's a lazy field or not.
if (argument.asSend() != null ||
diff --git a/sdk/lib/_internal/compiler/implementation/ir/ir_nodes.dart b/sdk/lib/_internal/compiler/implementation/ir/ir_nodes.dart
index d130377..b2ed5a6 100644
--- a/sdk/lib/_internal/compiler/implementation/ir/ir_nodes.dart
+++ b/sdk/lib/_internal/compiler/implementation/ir/ir_nodes.dart
@@ -182,3 +182,66 @@
T visitParameter(Parameter triv) => visitTrivial(triv);
T visitContinuation(Continuation triv) => visitTrivial(triv);
}
+
+// Generate a Lisp-like S-expression representation of an IR node as a string.
+// The representation is not pretty-printed, but it can easily be quoted and
+// dropped into the REPL of one's favorite Lisp or Scheme implementation to be
+// pretty-printed.
+class SExpressionStringifier extends Visitor<String> {
+ final Map<Trivial, String> names = <Trivial, String>{};
+
+ int _valueCounter = 0;
+ int _continuationCounter = 0;
+
+ String newValueName() => 'v${_valueCounter++}';
+ String newContinuationName() => 'k${_continuationCounter++}';
+
+ String visitFunction(Function node) {
+ names[node.returnContinuation] = 'return';
+ return '(Function ${node.body.accept(this)})';
+ }
+
+ String visitLetVal(LetVal expr) {
+ String name = newValueName();
+ names[expr.value] = name;
+ String value = expr.value.accept(this);
+ String body = expr.body.accept(this);
+ return '(LetVal $name $value) $body';
+ }
+
+ String visitLetCont(LetCont expr) {
+ String cont = newContinuationName();
+ String param = newValueName();
+ names[expr.continuation] = cont;
+ names[expr.continuation.parameter] = param;
+ String contBody = expr.continuation.body.accept(this);
+ String body = expr.body == null ? 'null' : expr.body.accept(this);
+ return '(LetCont ($cont $param) $contBody) $body';
+ }
+
+ String visitInvokeStatic(InvokeStatic expr) {
+ String name = expr.target.name;
+ String cont = names[expr.continuation.definition];
+ List<String> args =
+ expr.arguments.map((v) => names[v.definition]).toList(growable: false);
+ return '(InvokeStatic $name $cont ${args.join(' ')})';
+ }
+
+ String visitInvokeContinuation(InvokeContinuation expr) {
+ String cont = names[expr.continuation.definition];
+ String arg = names[expr.argument.definition];
+ return '(InvokeContinuation $cont $arg)';
+ }
+
+ String visitConstant(Constant triv) {
+ return '(Constant ${triv.value})';
+ }
+
+ String visitParameter(Parameter triv) {
+ return '(Unexpected Parameter)';
+ }
+
+ String visitContinuation(Continuation triv) {
+ return '(Unexpected Continuation)';
+ }
+}
diff --git a/sdk/lib/_internal/compiler/implementation/ir/ir_unpickler.dart b/sdk/lib/_internal/compiler/implementation/ir/ir_unpickler.dart
index 3ca270d..2ac626b 100644
--- a/sdk/lib/_internal/compiler/implementation/ir/ir_unpickler.dart
+++ b/sdk/lib/_internal/compiler/implementation/ir/ir_unpickler.dart
@@ -28,6 +28,14 @@
ByteData doubleData = new ByteData(8);
ConstantSystem get constantSystem => compiler.backend.constantSystem;
+
+ // A partially constructed expression is one that has a single 'hole' where
+ // there is an expression missing. Just like the IR builder, the unpickler
+ // represents such an expression by its root and by the 'current' expression
+ // that immediately contains the hole. If there is no hole (e.g., an
+ // expression in tail position has been seen), then current is null.
+ ir.Expression root;
+ ir.Expression current;
ir.Function unpickle(List<int> data) {
this.data = data;
@@ -35,6 +43,7 @@
int numEntries = readInt();
unpickled = new List<Object>(numEntries);
index = 0;
+ root = current = null;
return readFunctionNode();
}
@@ -99,48 +108,58 @@
return result;
}
- static ir.Expression addExpression(ir.Expression context,
- ir.Expression expr) {
- return (context == null) ? expr : context.plug(expr);
+ void addExpression(ir.Expression expr) {
+ if (root == null) {
+ root = current = expr;
+ } else {
+ current = current.plug(expr);
+ }
}
- // Read a single expression and plug it into an outer context. If the read
- // expression is not in tail position, return it. Otherwise, return null.
- ir.Expression readExpressionNode(ir.Expression context) {
+ // Read a single expression and plug it into the outer context.
+ ir.Expression readExpressionNode() {
int tag = readByte();
switch (tag) {
case Pickles.NODE_CONSTANT:
ir.Trivial constant = readConstantNode();
unpickled[index++] = constant;
- return addExpression(context, new ir.LetVal(constant));
+ addExpression(new ir.LetVal(constant));
+ break;
case Pickles.NODE_LET_CONT:
ir.Parameter parameter = new ir.Parameter();
ir.Continuation continuation = new ir.Continuation(parameter);
unpickled[index++] = continuation;
ir.Expression body = readDelimitedExpressionNode();
unpickled[index++] = parameter;
- return addExpression(context, new ir.LetCont(continuation, body));
+ addExpression(new ir.LetCont(continuation, body));
+ break;
case Pickles.NODE_INVOKE_STATIC:
- addExpression(context, readInvokeStaticNode());
- return null;
+ addExpression(readInvokeStaticNode());
+ current = null;
+ break;
case Pickles.NODE_INVOKE_CONTINUATION:
- addExpression(context, readInvokeContinuationNode());
- return null;
+ addExpression(readInvokeContinuationNode());
+ current = null;
+ break;
default:
compiler.internalError("Unexpected expression entry tag: $tag");
- return null;
+ break;
}
}
// Iteratively read expressions until an expression in a tail position
- // (e.g., an invocation) is found.
+ // (e.g., an invocation) is found. Do not change the outer context.
ir.Expression readDelimitedExpressionNode() {
- ir.Expression root = readExpressionNode(null);
- ir.Expression context = root;
- while (context != null) {
- context = readExpressionNode(context);
- }
- return root;
+ ir.Expression previous_root = root;
+ ir.Expression previous_current = current;
+ root = current = null;
+ do {
+ readExpressionNode();
+ } while (current != null);
+ ir.Expression result = root;
+ root = previous_root;
+ current = previous_current;
+ return result;
}
Object readBackReference() {
diff --git a/sdk/lib/_internal/compiler/implementation/js/builder.dart b/sdk/lib/_internal/compiler/implementation/js/builder.dart
index ab05952..5ae235e 100644
--- a/sdk/lib/_internal/compiler/implementation/js/builder.dart
+++ b/sdk/lib/_internal/compiler/implementation/js/builder.dart
@@ -45,6 +45,36 @@
return call(source, expression);
}
+ /// Creates a litteral js string from [value].
+ LiteralString escapedString(String value) {
+ // Do not escape unicode characters and ' because they are allowed in the
+ // string literal anyway.
+ String escaped =
+ value.replaceAllMapped(new RegExp('\n|"|\\|\0|\b|\t|\v'), (match) {
+ switch (match.group(0)) {
+ case "\n" : return r"\n";
+ case "\\" : return r"\\";
+ case "\"" : return r'\"';
+ case "\0" : return r"\0";
+ case "\b" : return r"\b";
+ case "\t" : return r"\t";
+ case "\f" : return r"\f";
+ case "\v" : return r"\v";
+ }
+ });
+ LiteralString result = string(escaped);
+ // We don't escape ' under the assumption that the string is wrapped
+ // into ". Verify that assumption.
+ assert(result.value.codeUnitAt(0) == '"'.codeUnitAt(0));
+ return result;
+ }
+
+ /// Creates a litteral js string from [value].
+ ///
+ /// Note that this function only puts quotes around [value]. It does not do
+ /// any escaping, so use only when you can guarantee that [value] does not
+ /// contain newlines or backslashes. For escaping the string use
+ /// [escapedString].
LiteralString string(String value) => new LiteralString('"$value"');
LiteralNumber number(num value) => new LiteralNumber('$value');
diff --git a/sdk/lib/_internal/compiler/implementation/js/js.dart b/sdk/lib/_internal/compiler/implementation/js/js.dart
index f8a2f61..8bfdd51 100644
--- a/sdk/lib/_internal/compiler/implementation/js/js.dart
+++ b/sdk/lib/_internal/compiler/implementation/js/js.dart
@@ -6,6 +6,7 @@
import 'precedence.dart';
import '../util/characters.dart' as charCodes;
+import '../util/util.dart';
// TODO(floitsch): remove this dependency (currently necessary for the
// CodeBuffer).
diff --git a/sdk/lib/_internal/compiler/implementation/js_backend/checked_mode_helpers.dart b/sdk/lib/_internal/compiler/implementation/js_backend/checked_mode_helpers.dart
index 254f270..5b3efd8 100644
--- a/sdk/lib/_internal/compiler/implementation/js_backend/checked_mode_helpers.dart
+++ b/sdk/lib/_internal/compiler/implementation/js_backend/checked_mode_helpers.dart
@@ -73,7 +73,7 @@
HTypeConversion node,
List<jsAst.Expression> arguments) {
ErroneousElement element = node.typeExpression.element;
- arguments.add(js.string(element.message));
+ arguments.add(js.escapedString(element.message));
}
}
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 d7eea27..d0218e4 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
@@ -1529,8 +1529,19 @@
} else {
mainBuffer.add('\n');
}
- compiler.assembledCode = mainBuffer.getText();
- outputSourceMap(compiler.assembledCode, '');
+ String assembledCode = mainBuffer.getText();
+ String sourceMapTags = "";
+ if (generateSourceMap) {
+ outputSourceMap(assembledCode, mainBuffer, '',
+ compiler.sourceMapUri, compiler.outputUri);
+ sourceMapTags =
+ generateSourceMapTag(compiler.sourceMapUri, compiler.outputUri);
+ }
+ compiler.outputProvider('', 'js')
+ ..add(assembledCode)
+ ..add(sourceMapTags)
+ ..close();
+ compiler.assembledCode = assembledCode;
mainBuffer.write(
jsAst.prettyPrint(
@@ -1547,6 +1558,25 @@
return compiler.assembledCode;
}
+ String generateSourceMapTag(Uri sourceMapUri, Uri fileUri) {
+ if (sourceMapUri != null && fileUri != null) {
+ // Using # is the new proposed standard. @ caused problems in Internet
+ // Explorer due to "Conditional Compilation Statements" in JScript,
+ // see:
+ // http://msdn.microsoft.com/en-us/library/7kx09ct1(v=vs.80).aspx
+ // About source maps, see:
+ // https://docs.google.com/a/google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit
+ // TODO(http://dartbug.com/11914): Remove @ line.
+ String sourceMapFileName = relativize(fileUri, sourceMapUri, false);
+ return '''
+
+//# sourceMappingURL=$sourceMapFileName
+//@ sourceMappingURL=$sourceMapFileName
+''';
+ }
+ return '';
+ }
+
ClassBuilder getElementDescriptorForOutputUnit(Element element,
OutputUnit outputUnit) {
Map<OutputUnit, ClassBuilder> descriptors =
@@ -1623,7 +1653,8 @@
compiler.outputProvider(outputUnit.name, 'js')
..add(code)
..close();
- outputSourceMap(compiler.assembledCode, outputUnit.name);
+
+ // TODO(johnniwinther): Support source maps for deferred code.
}
}
@@ -1633,20 +1664,16 @@
return '// Generated by dart2js, the Dart to JavaScript compiler$suffix.\n';
}
- String buildSourceMap(CodeBuffer buffer, SourceFile compiledFile) {
- SourceMapBuilder sourceMapBuilder =
- new SourceMapBuilder(compiler.sourceMapUri);
- buffer.forEachSourceLocation(sourceMapBuilder.addMapping);
- return sourceMapBuilder.build(compiledFile);
- }
-
- void outputSourceMap(String code, String name) {
+ void outputSourceMap(String code, CodeBuffer buffer, String name,
+ [Uri sourceMapUri, Uri fileUri]) {
if (!generateSourceMap) return;
// Create a source file for the compilation output. This allows using
// [:getLine:] to transform offsets to line numbers in [SourceMapBuilder].
- SourceFile compiledFile =
- new StringSourceFile(null, compiler.assembledCode);
- String sourceMap = buildSourceMap(mainBuffer, compiledFile);
+ SourceFile compiledFile = new StringSourceFile(null, code);
+ SourceMapBuilder sourceMapBuilder =
+ new SourceMapBuilder(sourceMapUri, fileUri);
+ buffer.forEachSourceLocation(sourceMapBuilder.addMapping);
+ String sourceMap = sourceMapBuilder.build(compiledFile);
compiler.outputProvider(name, 'js.map')
..add(sourceMap)
..close();
diff --git a/sdk/lib/_internal/compiler/implementation/library_loader.dart b/sdk/lib/_internal/compiler/implementation/library_loader.dart
index 53e79da..7daad88 100644
--- a/sdk/lib/_internal/compiler/implementation/library_loader.dart
+++ b/sdk/lib/_internal/compiler/implementation/library_loader.dart
@@ -223,6 +223,8 @@
String get name => 'LibraryLoader';
List onLibraryLoadedCallbacks = [];
+ final Map<Uri, LibraryElement> libraryResourceUriMap =
+ new Map<Uri, LibraryElement>();
final Map<String, LibraryElement> libraryNames =
new Map<String, LibraryElement>();
@@ -277,7 +279,7 @@
bool importsDartCore = false;
var libraryDependencies = new LinkBuilder<LibraryDependency>();
- Uri base = library.entryCompilationUnit.script.uri;
+ Uri base = library.entryCompilationUnit.script.readableUri;
// TODO(rnystrom): Remove .toList() here if #11523 is fixed.
return Future.forEach(library.tags.reverse().toList(), (LibraryTag tag) {
@@ -299,7 +301,6 @@
} else {
library.libraryTag = tag;
}
- checkDuplicatedLibraryName(library);
} else if (tag.isPart) {
Part part = tag;
StringNode uri = part.uri;
@@ -312,6 +313,7 @@
});
}).then((_) {
return compiler.withCurrentElement(library, () {
+ checkDuplicatedLibraryName(library);
// Apply patch, if any.
if (library.isPlatformLibrary) {
return patchDartLibrary(handler, library, library.canonicalUri.path);
@@ -337,11 +339,30 @@
}
void checkDuplicatedLibraryName(LibraryElement library) {
+ Uri resourceUri = library.entryCompilationUnit.script.resourceUri;
LibraryName tag = library.libraryTag;
- if (tag != null) {
+ LibraryElement existing =
+ libraryResourceUriMap.putIfAbsent(resourceUri, () => library);
+ if (!identical(existing, library)) {
+ if (tag != null) {
+ compiler.withCurrentElement(library, () {
+ compiler.reportWarning(tag.name,
+ MessageKind.DUPLICATED_LIBRARY_RESOURCE,
+ {'libraryName': tag.name,
+ 'resourceUri': resourceUri,
+ 'canonicalUri1': library.canonicalUri,
+ 'canonicalUri2': existing.canonicalUri});
+ });
+ } else {
+ compiler.reportHint(library,
+ MessageKind.DUPLICATED_RESOURCE,
+ {'resourceUri': resourceUri,
+ 'canonicalUri1': library.canonicalUri,
+ 'canonicalUri2': existing.canonicalUri});
+ }
+ } else if (tag != null) {
String name = library.getLibraryOrScriptName();
- LibraryElement existing =
- libraryNames.putIfAbsent(name, () => library);
+ existing = libraryNames.putIfAbsent(name, () => library);
if (!identical(existing, library)) {
compiler.withCurrentElement(library, () {
compiler.reportWarning(tag.name,
@@ -395,6 +416,7 @@
return compiler.readScript(readableUri, library, part).
then((Script sourceScript) {
if (sourceScript == null) return;
+
CompilationUnitElement unit =
new CompilationUnitElementX(sourceScript, library);
compiler.withCurrentElement(unit, () {
@@ -414,7 +436,7 @@
Future registerLibraryFromTag(LibraryDependencyHandler handler,
LibraryElement library,
LibraryDependency tag) {
- Uri base = library.entryCompilationUnit.script.uri;
+ Uri base = library.entryCompilationUnit.script.readableUri;
Uri resolvedUri = base.resolve(tag.uri.dartString.slowToString());
return createLibrary(handler, library, resolvedUri, tag.uri, resolvedUri)
.then((LibraryElement loadedLibrary) {
diff --git a/sdk/lib/_internal/compiler/implementation/mirrors/dart2js_library_mirror.dart b/sdk/lib/_internal/compiler/implementation/mirrors/dart2js_library_mirror.dart
index ee87e74..132308b 100644
--- a/sdk/lib/_internal/compiler/implementation/mirrors/dart2js_library_mirror.dart
+++ b/sdk/lib/_internal/compiler/implementation/mirrors/dart2js_library_mirror.dart
@@ -9,7 +9,7 @@
extends Dart2JsElementMirror
with ObjectMirrorMixin, ContainerMixin
implements LibrarySourceMirror {
- List<LibraryDependencyMirror> _libraryDependencies;
+ List<LibraryDependencySourceMirror> _libraryDependencies;
Dart2JsLibraryMirror(Dart2JsMirrorSystem system, LibraryElement library)
: super(system, library);
@@ -83,7 +83,7 @@
void _ensureLibraryDependenciesAnalyzed() {
if (_libraryDependencies == null) {
- _libraryDependencies = <LibraryDependencyMirror>[];
+ _libraryDependencies = <LibraryDependencySourceMirror>[];
for (LibraryTag node in _element.tags.reverse()) {
LibraryDependency libraryDependency = node.asLibraryDependency();
if (libraryDependency != null) {
@@ -105,7 +105,7 @@
}
}
-class Dart2JsLibraryDependencyMirror implements LibraryDependencyMirror {
+class Dart2JsLibraryDependencyMirror implements LibraryDependencySourceMirror {
final LibraryDependency _node;
final Dart2JsLibraryMirror _sourceLibrary;
final Dart2JsLibraryMirror _targetLibrary;
@@ -142,7 +142,7 @@
LibraryMirror get targetLibrary => _targetLibrary;
- String get prefix {
+ /*String*/ get prefix {
Import import = _node.asImport();
if (import != null && import.prefix != null) {
return import.prefix.source;
@@ -155,8 +155,8 @@
bool get isExport => _node.asExport() != null;
}
-class Dart2JsCombinatorMirror implements CombinatorMirror {
- final List<String> identifiers;
+class Dart2JsCombinatorMirror implements CombinatorSourceMirror {
+ final List/*<String>*/ identifiers;
final bool isShow;
Dart2JsCombinatorMirror(this.identifiers, {bool isShow: true})
@@ -228,7 +228,7 @@
String get text => _script.text.substring(_span.begin, _span.end);
- Uri get sourceUri => _script.uri;
+ Uri get sourceUri => _script.resourceUri;
String get sourceText => _script.text;
}
diff --git a/sdk/lib/_internal/compiler/implementation/mirrors/dart2js_member_mirrors.dart b/sdk/lib/_internal/compiler/implementation/mirrors/dart2js_member_mirrors.dart
index ec0b945..64ba2d3 100644
--- a/sdk/lib/_internal/compiler/implementation/mirrors/dart2js_member_mirrors.dart
+++ b/sdk/lib/_internal/compiler/implementation/mirrors/dart2js_member_mirrors.dart
@@ -186,8 +186,6 @@
this._variable = variable,
super(owner.mirrorSystem, variable);
- Element get _beginElement => _variable.variables;
-
bool get isTopLevel => owner is LibraryMirror;
bool get isStatic => _variable.modifiers.isStatic();
@@ -198,6 +196,8 @@
TypeMirror get type =>
owner._getTypeMirror(_variable.computeType(mirrorSystem.compiler));
+
+
}
class Dart2JsParameterMirror extends Dart2JsMemberMirror
@@ -207,7 +207,7 @@
final bool isNamed;
factory Dart2JsParameterMirror(Dart2JsDeclarationMirror owner,
- VariableElement element,
+ ParameterElement element,
{bool isOptional: false,
bool isNamed: false}) {
if (element is FieldParameterElement) {
@@ -219,19 +219,17 @@
}
Dart2JsParameterMirror._normal(Dart2JsDeclarationMirror owner,
- VariableElement element,
+ ParameterElement element,
this.isOptional,
this.isNamed)
: this.owner = owner,
super(owner.mirrorSystem, element);
- Element get _beginElement => _variableElement.variables;
-
- VariableElement get _variableElement => _element;
+ ParameterElement get _element => super._element;
TypeMirror get type => owner._getTypeMirror(
- _variableElement.computeType(mirrorSystem.compiler),
- _variableElement.variables.functionSignature);
+ _element.computeType(mirrorSystem.compiler),
+ _element.functionSignature);
bool get isFinal => false;
@@ -241,17 +239,17 @@
InstanceMirror get defaultValue {
if (hasDefaultValue) {
Constant constant = mirrorSystem.compiler.constantHandler
- .getConstantForVariable(_variableElement);
- assert(invariant(_variableElement, constant != null,
+ .getConstantForVariable(_element);
+ assert(invariant(_element, constant != null,
message: "Missing constant for parameter "
- "$_variableElement with default value."));
+ "$_element with default value."));
return _convertConstantToInstanceMirror(mirrorSystem, constant);
}
return null;
}
bool get hasDefaultValue {
- return _variableElement.cachedNode.asSendSet() != null;
+ return _element.initializer != null;
}
bool get isInitializingFormal => false;
diff --git a/sdk/lib/_internal/compiler/implementation/mirrors/dart2js_mirrors.dart b/sdk/lib/_internal/compiler/implementation/mirrors/dart2js_mirrors.dart
index 549d4d1..5359a09 100644
--- a/sdk/lib/_internal/compiler/implementation/mirrors/dart2js_mirrors.dart
+++ b/sdk/lib/_internal/compiler/implementation/mirrors/dart2js_mirrors.dart
@@ -148,15 +148,6 @@
assert (_element != null);
}
- /**
- * Returns the element to be used to determine the begin token of this
- * declaration and the metadata associated with this declaration.
- *
- * This indirection is needed to use the [VariableListElement] as the location
- * for type and metadata information on a [VariableElement].
- */
- Element get _beginElement => _element;
-
String get _simpleNameString => _element.name;
bool get isNameSynthetic => false;
@@ -167,9 +158,9 @@
*/
Token getBeginToken() {
// TODO(johnniwinther): Avoid calling [parseNode].
- Node node = _beginElement.parseNode(mirrorSystem.compiler);
+ Node node = _element.parseNode(mirrorSystem.compiler);
if (node == null) {
- return _beginElement.position();
+ return _element.position();
}
return node.getBeginToken();
}
@@ -192,8 +183,8 @@
* metadata annotations.
*/
Token getFirstToken() {
- if (!_beginElement.metadata.isEmpty) {
- for (MetadataAnnotation metadata in _beginElement.metadata) {
+ if (!_element.metadata.isEmpty) {
+ for (MetadataAnnotation metadata in _element.metadata) {
if (metadata.beginToken != null) {
return metadata.beginToken;
}
@@ -209,11 +200,11 @@
Script script = getScript();
SourceSpan span;
if (beginToken == null) {
- span = new SourceSpan(script.uri, 0, 0);
+ span = new SourceSpan(script.readableUri, 0, 0);
} else {
Token endToken = getEndToken();
span = mirrorSystem.compiler.spanFromTokens(
- beginToken, endToken, script.uri);
+ beginToken, endToken, script.readableUri);
}
return new Dart2JsSourceLocation(script, span);
}
@@ -454,7 +445,7 @@
Iterable<DeclarationMirror> _getDeclarationMirrors(Element element) =>
_library._getDeclarationMirrors(element);
- Uri get uri => _element.script.uri;
+ Uri get uri => _element.script.resourceUri;
}
/**
diff --git a/sdk/lib/_internal/compiler/implementation/mirrors/source_mirrors.dart b/sdk/lib/_internal/compiler/implementation/mirrors/source_mirrors.dart
index 1a80852..0afbd8e 100644
--- a/sdk/lib/_internal/compiler/implementation/mirrors/source_mirrors.dart
+++ b/sdk/lib/_internal/compiler/implementation/mirrors/source_mirrors.dart
@@ -118,7 +118,8 @@
}
/// A mirror on an import or export declaration.
-abstract class LibraryDependencyMirror extends Mirror {
+abstract class LibraryDependencySourceMirror
+ extends Mirror implements LibraryDependencyMirror {
/// Is `true` if this dependency is an import.
bool get isImport;
@@ -133,7 +134,7 @@
LibraryMirror get targetLibrary;
/// Returns the prefix if this is a prefixed import and `null` otherwise.
- String get prefix;
+ /*String*/ get prefix;
/// Returns the list of show/hide combinators on the import/export
/// declaration.
@@ -144,9 +145,10 @@
}
/// A mirror on a show/hide combinator declared on a library dependency.
-abstract class CombinatorMirror extends Mirror {
+abstract class CombinatorSourceMirror
+ extends Mirror implements CombinatorMirror {
/// The list of identifiers on the combinator.
- List<String> get identifiers;
+ List/*<String>*/ get identifiers;
/// Is `true` if this is a 'show' combinator.
bool get isShow;
diff --git a/sdk/lib/_internal/compiler/implementation/resolution/members.dart b/sdk/lib/_internal/compiler/implementation/resolution/members.dart
index e5b2b8b..3e5e15f 100644
--- a/sdk/lib/_internal/compiler/implementation/resolution/members.dart
+++ b/sdk/lib/_internal/compiler/implementation/resolution/members.dart
@@ -340,27 +340,6 @@
patchParameter.origin == originParameter));
assert(invariant(patchParameter, patchParameter.patch == null));
patchParameter.origin = originParameter;
- // Hack: Use unparser to test parameter equality. This only works because
- // we are restricting patch uses and the approach cannot be used
- // elsewhere.
- String originParameterText =
- originParameter.parseNode(compiler).toString();
- String patchParameterText =
- patchParameter.parseNode(compiler).toString();
- if (originParameterText != patchParameterText
- // We special case the list constructor because of the
- // optional parameter.
- && origin != compiler.unnamedListConstructor) {
- compiler.reportError(
- originParameter.parseNode(compiler),
- MessageKind.PATCH_PARAMETER_MISMATCH,
- {'methodName': origin.name,
- 'originParameter': originParameterText,
- 'patchParameter': patchParameterText});
- compiler.reportInfo(patchParameter,
- MessageKind.PATCH_POINT_TO_PARAMETER,
- {'parameterName': patchParameter.name});
- }
DartType originParameterType = originParameter.computeType(compiler);
DartType patchParameterType = patchParameter.computeType(compiler);
if (originParameterType != patchParameterType) {
@@ -374,6 +353,31 @@
compiler.reportInfo(patchParameter,
MessageKind.PATCH_POINT_TO_PARAMETER,
{'parameterName': patchParameter.name});
+ } else {
+ // Hack: Use unparser to test parameter equality. This only works
+ // because we are restricting patch uses and the approach cannot be used
+ // elsewhere.
+
+ // The node contains the type, so there is a potential overlap.
+ // Therefore we only check the text if the types are identical.
+ String originParameterText =
+ originParameter.parseNode(compiler).toString();
+ String patchParameterText =
+ patchParameter.parseNode(compiler).toString();
+ if (originParameterText != patchParameterText
+ // We special case the list constructor because of the
+ // optional parameter.
+ && origin != compiler.unnamedListConstructor) {
+ compiler.reportError(
+ originParameter.parseNode(compiler),
+ MessageKind.PATCH_PARAMETER_MISMATCH,
+ {'methodName': origin.name,
+ 'originParameter': originParameterText,
+ 'patchParameter': patchParameterText});
+ compiler.reportInfo(patchParameter,
+ MessageKind.PATCH_POINT_TO_PARAMETER,
+ {'parameterName': patchParameter.name});
+ }
}
originParameters = originParameters.tail;
@@ -550,21 +554,28 @@
return new ResolverVisitor(compiler, element, mapping);
}
- TreeElements resolveField(VariableElement element) {
- Node tree = element.parseNode(compiler);
- if(element.modifiers.isStatic() && element.variables.isTopLevel()) {
+ TreeElements resolveField(VariableElementX element) {
+ VariableDefinitions tree = element.parseNode(compiler);
+ if(element.modifiers.isStatic() && element.isTopLevel()) {
error(element.modifiers.getStatic(),
MessageKind.TOP_LEVEL_VARIABLE_DECLARED_STATIC);
}
ResolverVisitor visitor = visitorFor(element);
+ // TODO(johnniwinther): Share the resolved type between all variables
+ // declared in the same declaration.
+ if (tree.type != null) {
+ element.variables.type = visitor.resolveTypeAnnotation(tree.type);
+ } else {
+ element.variables.type = compiler.types.dynamicType;
+ }
visitor.useElement(tree, element);
- SendSet send = tree.asSendSet();
+ Expression initializer = element.initializer;
Modifiers modifiers = element.modifiers;
- if (send != null) {
+ if (initializer != null) {
// TODO(johnniwinther): Avoid analyzing initializers if
// [Compiler.analyzeSignaturesOnly] is set.
- visitor.visit(send.arguments.head);
+ visitor.visit(initializer);
} else if (modifiers.isConst()) {
compiler.reportError(element, MessageKind.CONST_WITHOUT_INITIALIZER);
} else if (modifiers.isFinal() && !element.isInstanceMember()) {
@@ -576,7 +587,7 @@
compiler.constantHandler.compileVariable(
element, isConst: element.modifiers.isConst());
});
- if (tree.asSendSet() != null) {
+ if (initializer != null) {
if (!element.modifiers.isConst()) {
// TODO(johnniwinther): Determine the const-ness eagerly to avoid
// unnecessary registrations.
@@ -594,10 +605,10 @@
return visitor.mapping;
}
- TreeElements resolveParameter(Element element) {
- Node tree = element.parseNode(compiler);
+ TreeElements resolveParameter(ParameterElement element) {
+ element.parseNode(compiler);
ResolverVisitor visitor = visitorFor(element.enclosingElement);
- initializerDo(tree, visitor.visit);
+ visitor.visit(element.initializer);
return visitor.mapping;
}
@@ -1228,16 +1239,17 @@
compiler.reportFatalError(node, kind, arguments);
}
- resolveMetadata(MetadataContainer variables, VariableDefinitions node) {
+ Link<MetadataAnnotation> resolveMetadata(Element element,
+ VariableDefinitions node) {
LinkBuilder<MetadataAnnotation> metadata =
new LinkBuilder<MetadataAnnotation>();
for (Metadata annotation in node.metadata.nodes) {
ParameterMetadataAnnotation metadataAnnotation =
new ParameterMetadataAnnotation(annotation);
- metadataAnnotation.annotatedElement = variables;
+ metadataAnnotation.annotatedElement = element;
metadata.addLast(metadataAnnotation.ensureResolved(compiler));
}
- variables.metadata = metadata.toLink();
+ return metadata.toLink();
}
}
@@ -1291,16 +1303,17 @@
MessageKind.ALREADY_INITIALIZED, {'fieldName': field.name});
}
- void checkForDuplicateInitializers(Element field, Node init) {
+ void checkForDuplicateInitializers(VariableElement field, Node init) {
// [field] can be null if it could not be resolved.
if (field == null) return;
String name = field.name;
if (initialized.containsKey(field)) {
reportDuplicateInitializerError(field, init, initialized[field]);
} else if (field.modifiers.isFinal()) {
- Node fieldNode = field.parseNode(visitor.compiler).asSendSet();
- if (fieldNode != null) {
- reportDuplicateInitializerError(field, init, fieldNode);
+ field.parseNode(visitor.compiler);
+ Expression initializer = field.initializer;
+ if (initializer != null) {
+ reportDuplicateInitializerError(field, init, initializer);
}
}
initialized[field] = init;
@@ -1461,11 +1474,11 @@
// that we can ensure that fields are initialized only once.
FunctionSignature functionParameters =
constructor.computeSignature(visitor.compiler);
- functionParameters.forEachParameter((Element element) {
+ functionParameters.forEachParameter((ParameterElement element) {
if (identical(element.kind, ElementKind.FIELD_PARAMETER)) {
FieldParameterElement fieldParameter = element;
checkForDuplicateInitializers(fieldParameter.fieldElement,
- element.parseNode(visitor.compiler));
+ element.initializer);
}
});
@@ -1666,34 +1679,52 @@
TypeResolver(this.compiler);
- Element resolveTypeName(Scope scope,
- Identifier prefixName,
- Identifier typeName) {
+ /// Tries to resolve the type name as an element.
+ Element resolveTypeName(Identifier prefixName,
+ Identifier typeName,
+ Scope scope,
+ {bool deferredIsMalformed: true}) {
+ Element element;
+ bool deferredTypeAnnotation = false;
if (prefixName != null) {
- Element element =
+ Element prefixElement =
lookupInScope(compiler, prefixName, scope, prefixName.source);
- if (element != null && element.isPrefix()) {
+ if (prefixElement != null && prefixElement.isPrefix()) {
// The receiver is a prefix. Lookup in the imported members.
- PrefixElement prefix = element;
- return prefix.lookupLocalMember(typeName.source);
+ PrefixElement prefix = prefixElement;
+ element = prefix.lookupLocalMember(typeName.source);
+ // TODO(17260, sigurdm): The test for DartBackend is there because
+ // dart2dart outputs malformed types with prefix.
+ if (element != null &&
+ prefix.isDeferred &&
+ deferredIsMalformed &&
+ compiler.backend is! DartBackend) {
+ element = new ErroneousElementX(MessageKind.DEFERRED_TYPE_ANNOTATION,
+ {'node': typeName},
+ element.name,
+ element);
+ }
+ } else {
+ // The caller of this method will create the ErroneousElement for
+ // the MalformedType.
+ element = null;
}
- // The caller of this method will create the ErroneousElement for
- // the MalformedType.
- return null;
} else {
String stringValue = typeName.source;
if (identical(stringValue, 'void')) {
- return compiler.types.voidType.element;
+ element = compiler.types.voidType.element;
} else if (identical(stringValue, 'dynamic')) {
- return compiler.dynamicClass;
+ element = compiler.dynamicClass;
} else {
- return lookupInScope(compiler, typeName, scope, typeName.source);
+ element = lookupInScope(compiler, typeName, scope, typeName.source);
}
}
+ return element;
}
DartType resolveTypeAnnotation(MappingVisitor visitor, TypeAnnotation node,
- {bool malformedIsError: false}) {
+ {bool malformedIsError: false,
+ bool deferredIsMalformed: true}) {
Identifier typeName;
Identifier prefixName;
Send send = node.typeName.asSend();
@@ -1705,20 +1736,24 @@
typeName = node.typeName.asIdentifier();
}
- Element element = resolveTypeName(visitor.scope, prefixName, typeName);
+ Element element = resolveTypeName(prefixName, typeName, visitor.scope,
+ deferredIsMalformed: deferredIsMalformed);
DartType reportFailureAndCreateType(MessageKind messageKind,
Map messageArguments,
- {DartType userProvidedBadType}) {
+ {DartType userProvidedBadType,
+ Element erroneousElement}) {
if (malformedIsError) {
visitor.error(node, messageKind, messageArguments);
} else {
compiler.backend.registerThrowRuntimeError(visitor.mapping);
visitor.warning(node, messageKind, messageArguments);
}
- Element erroneousElement = new ErroneousElementX(
- messageKind, messageArguments, typeName.source,
- visitor.enclosingElement);
+ if (erroneousElement == null) {
+ erroneousElement = new ErroneousElementX(
+ messageKind, messageArguments, typeName.source,
+ visitor.enclosingElement);
+ }
LinkBuilder<DartType> arguments = new LinkBuilder<DartType>();
resolveTypeArguments(visitor, node, null, arguments);
return new MalformedType(erroneousElement,
@@ -1738,6 +1773,7 @@
return type;
}
+ // Try to construct the type from the element.
DartType type;
if (element == null) {
type = reportFailureAndCreateType(
@@ -1747,6 +1783,11 @@
type = reportFailureAndCreateType(
ambiguous.messageKind, ambiguous.messageArguments);
ambiguous.diagnose(visitor.mapping.currentElement, compiler);
+ } else if (element.isErroneous()) {
+ ErroneousElement erroneousElement = element;
+ type = reportFailureAndCreateType(
+ erroneousElement.messageKind, erroneousElement.messageArguments,
+ erroneousElement: erroneousElement);
} else if (!element.impliesType()) {
type = reportFailureAndCreateType(
MessageKind.NOT_A_TYPE, {'node': node.typeName});
@@ -2199,20 +2240,20 @@
function.computeSignature(compiler);
Link<Node> parameterNodes = (node.parameters == null)
? const Link<Node>() : node.parameters.nodes;
- functionParameters.forEachParameter((Element element) {
+ functionParameters.forEachParameter((ParameterElement element) {
if (element == functionParameters.optionalParameters.head) {
NodeList nodes = parameterNodes.head;
parameterNodes = nodes.nodes;
}
+ visit(element.initializer);
VariableDefinitions variableDefinitions = parameterNodes.head;
Node parameterNode = variableDefinitions.definitions.nodes.head;
- initializerDo(parameterNode, (n) => n.accept(this));
// Field parameters (this.x) are not visible inside the constructor. The
// fields they reference are visible, but must be resolved independently.
if (element.kind == ElementKind.FIELD_PARAMETER) {
useElement(parameterNode, element);
} else {
- defineElement(variableDefinitions.definitions.nodes.head, element);
+ defineElement(parameterNode, element);
}
parameterNodes = parameterNodes.tail;
});
@@ -2968,19 +3009,17 @@
}
visitVariableDefinitions(VariableDefinitions node) {
+ DartType type;
+ if (node.type != null) {
+ type = resolveTypeAnnotation(node.type);
+ } else {
+ type = compiler.types.dynamicType;
+ }
+ VariableList variables = new VariableList.node(node, type);
VariableDefinitionsVisitor visitor =
new VariableDefinitionsVisitor(compiler, node, this,
- ElementKind.VARIABLE);
- VariableListElementX variables = visitor.variables;
- // Ensure that we set the type of the [VariableListElement] since it depends
- // on the current scope. If the current scope is a [MethodScope] or
- // [BlockScope] it will not be available for the
- // [VariableListElement.computeType] method.
- if (node.type != null) {
- variables.type = resolveTypeAnnotation(node.type);
- } else {
- variables.type = compiler.types.dynamicType;
- }
+ ElementKind.VARIABLE,
+ variables);
Modifiers modifiers = node.modifiers;
void reportExtraModifier(String modifier) {
@@ -3012,7 +3051,8 @@
}
}
if (node.metadata != null) {
- compiler.resolver.resolveMetadata(variables, node);
+ variables.metadata =
+ compiler.resolver.resolveMetadata(enclosingElement, node);
}
visitor.visit(node.definitions);
}
@@ -3181,9 +3221,11 @@
}
DartType resolveTypeAnnotation(TypeAnnotation node,
- {bool malformedIsError: false}) {
+ {bool malformedIsError: false,
+ bool deferredIsMalformed: true}) {
DartType type = typeResolver.resolveTypeAnnotation(
- this, node, malformedIsError: malformedIsError);
+ this, node, malformedIsError: malformedIsError,
+ deferredIsMalformed: deferredIsMalformed);
if (type == null) return null;
if (inCheckContext) {
compiler.enqueuer.resolution.registerIsCheck(type, mapping);
@@ -4407,20 +4449,21 @@
}
}
-class VariableDefinitionsVisitor extends CommonResolverVisitor<String> {
+class VariableDefinitionsVisitor extends CommonResolverVisitor<Identifier> {
VariableDefinitions definitions;
ResolverVisitor resolver;
ElementKind kind;
- VariableListElement variables;
+ VariableList variables;
VariableDefinitionsVisitor(Compiler compiler,
- this.definitions, this.resolver, this.kind)
+ this.definitions,
+ this.resolver,
+ this.kind,
+ this.variables)
: super(compiler) {
- variables = new VariableListElementX.node(
- definitions, ElementKind.VARIABLE_LIST, resolver.enclosingElement);
}
- String visitSendSet(SendSet node) {
+ Identifier visitSendSet(SendSet node) {
assert(node.arguments.tail.isEmpty); // Sanity check
Identifier identifier = node.selector;
String name = identifier.source;
@@ -4429,12 +4472,12 @@
resolver.visitIn(node.arguments.head, scope);
if (scope.variableReferencedInInitializer) {
resolver.error(identifier, MessageKind.REFERENCE_IN_INITIALIZATION,
- {'variableName': name.toString()});
+ {'variableName': name});
}
- return name;
+ return identifier;
}
- String visitIdentifier(Identifier node) {
+ Identifier visitIdentifier(Identifier node) {
// The variable is initialized to null.
resolver.world.registerInstantiatedClass(compiler.nullClass,
resolver.mapping);
@@ -4445,14 +4488,15 @@
!resolver.allowFinalWithoutInitializer) {
compiler.reportError(node, MessageKind.FINAL_WITHOUT_INITIALIZER);
}
- return node.source;
+ return node;
}
visitNodeList(NodeList node) {
for (Link<Node> link = node.nodes; !link.isEmpty; link = link.tail) {
- String name = visit(link.head);
- VariableElement element =
- new VariableElementX(name, variables, kind, link.head);
+ Identifier name = visit(link.head);
+ VariableElement element = new VariableElementX(
+ name.source, kind, resolver.enclosingElement,
+ variables, name.token);
resolver.defineElement(link.head, element);
if (definitions.modifiers.isConst()) {
compiler.enqueuer.resolution.addDeferredAction(element, () {
@@ -4567,8 +4611,11 @@
Element visitTypeAnnotation(TypeAnnotation node) {
assert(invariant(node, type == null));
+ // This is not really resolving a type-annotation, but the name of the
+ // constructor. Therefore we allow deferred types.
type = resolver.resolveTypeAnnotation(node,
- malformedIsError: inConstContext);
+ malformedIsError: inConstContext,
+ deferredIsMalformed: false);
compiler.backend.registerRequiredType(type, resolver.enclosingElement);
return type.element;
}
@@ -4608,6 +4655,7 @@
String name = node.source;
Element element = resolver.reportLookupErrorIfAny(
lookupInScope(compiler, node, resolver.scope, name), node, name);
+ resolver.useElement(node, element);
// TODO(johnniwinther): Change errors to warnings, cf. 11.11.1.
if (element == null) {
return failOrReturnErroneousElement(resolver.enclosingElement, node, name,
diff --git a/sdk/lib/_internal/compiler/implementation/resolution/resolution.dart b/sdk/lib/_internal/compiler/implementation/resolution/resolution.dart
index 57fcedc..0b59263 100644
--- a/sdk/lib/_internal/compiler/implementation/resolution/resolution.dart
+++ b/sdk/lib/_internal/compiler/implementation/resolution/resolution.dart
@@ -16,7 +16,7 @@
ErroneousElementX,
VariableElementX,
FieldParameterElementX,
- VariableListElementX,
+ VariableList,
FunctionSignatureX,
LabelElementX,
TargetElementX,
@@ -33,6 +33,7 @@
import 'secret_tree_element.dart' show getTreeElement, setTreeElement;
import '../ordered_typeset.dart' show OrderedTypeSet, OrderedTypeSetBuilder;
import 'class_members.dart' show MembersCreator;
+import '../dart_backend/dart_backend.dart' show DartBackend;
part 'members.dart';
part 'scope.dart';
diff --git a/sdk/lib/_internal/compiler/implementation/resolution/signatures.dart b/sdk/lib/_internal/compiler/implementation/resolution/signatures.dart
index cd21970..fd29dc9 100644
--- a/sdk/lib/_internal/compiler/implementation/resolution/signatures.dart
+++ b/sdk/lib/_internal/compiler/implementation/resolution/signatures.dart
@@ -7,7 +7,7 @@
/**
* [SignatureResolver] resolves function signatures.
*/
-class SignatureResolver extends MappingVisitor<Element> {
+class SignatureResolver extends MappingVisitor<ParameterElementX> {
final Element enclosingElement;
final Scope scope;
final MessageKind defaultValuesError;
@@ -27,7 +27,7 @@
bool get defaultValuesAllowed => defaultValuesError == null;
- Element visitNodeList(NodeList node) {
+ visitNodeList(NodeList node) {
// This must be a list of optional arguments.
String value = node.beginToken.stringValue;
if ((!identical(value, '[')) && (!identical(value, '{'))) {
@@ -38,10 +38,9 @@
LinkBuilder<Element> elements = analyzeNodes(node.nodes);
optionalParameterCount = elements.length;
optionalParameters = elements.toLink();
- return null;
}
- Element visitVariableDefinitions(VariableDefinitions node) {
+ ParameterElementX visitVariableDefinitions(VariableDefinitions node) {
Link<Node> definitions = node.definitions.nodes;
if (definitions.isEmpty) {
cancel(node, 'internal error: no parameter definition');
@@ -66,9 +65,9 @@
cancel(node, 'function type parameters not supported');
}
currentDefinitions = node;
- Element element = definition.accept(this);
+ ParameterElementX element = definition.accept(this);
if (currentDefinitions.metadata != null) {
- compiler.resolver.resolveMetadata(element, node);
+ element.metadata = compiler.resolver.resolveMetadata(element, node);
}
currentDefinitions = null;
return element;
@@ -108,7 +107,7 @@
}
Element visitIdentifier(Identifier node) {
- return createParameter(node, node);
+ return createParameter(node, null);
}
Identifier getParameterName(Send node) {
@@ -133,19 +132,20 @@
// The only valid [Send] can be in constructors and must be of the form
// [:this.x:] (where [:x:] represents an instance field).
FieldParameterElementX visitSend(Send node) {
- return createFieldParameter(node);
+ return createFieldParameter(node, null);
}
- ParameterElementX createParameter(Node node, Identifier name) {
+ ParameterElementX createParameter(Identifier name, Expression initializer) {
validateName(name);
ParameterElementX parameter = new ParameterElementX(
- name.source,
- enclosingElement, ElementKind.PARAMETER, currentDefinitions, node);
+ ElementKind.PARAMETER, enclosingElement,
+ currentDefinitions, name, initializer);
computeParameterType(parameter);
return parameter;
}
- FieldParameterElementX createFieldParameter(Send node) {
+ FieldParameterElementX createFieldParameter(Send node,
+ Expression initializer) {
FieldParameterElementX element;
if (node.receiver.asIdentifier() == null ||
!node.receiver.asIdentifier().isThis()) {
@@ -163,8 +163,8 @@
} else if (!fieldElement.isInstanceMember()) {
error(node, MessageKind.NOT_INSTANCE_FIELD, {'fieldName': name});
}
- element = new FieldParameterElementX(name.source,
- enclosingElement, currentDefinitions, node, fieldElement);
+ element = new FieldParameterElementX(enclosingElement,
+ currentDefinitions, name, initializer, fieldElement);
computeParameterType(element);
}
return element;
@@ -174,10 +174,10 @@
Element visitSendSet(SendSet node) {
ParameterElementX element;
if (node.receiver != null) {
- element = createFieldParameter(node);
+ element = createFieldParameter(node, node.arguments.first);
} else if (node.selector.asIdentifier() != null ||
node.selector.asFunctionExpression() != null) {
- element = createParameter(node, getParameterName(node));
+ element = createParameter(getParameterName(node), node.arguments.first);
}
Node defaultValue = node.arguments.head;
if (!defaultValuesAllowed) {
@@ -200,7 +200,7 @@
compiler.reportError(modifiers, MessageKind.VAR_FUNCTION_TYPE_PARAMETER);
}
- return createParameter(node, node.name);
+ return createParameter(node.name, null);
}
LinkBuilder<Element> analyzeNodes(Link<Node> link) {
diff --git a/sdk/lib/_internal/compiler/implementation/scanner/class_element_parser.dart b/sdk/lib/_internal/compiler/implementation/scanner/class_element_parser.dart
index 1cfc71c..75fe874 100644
--- a/sdk/lib/_internal/compiler/implementation/scanner/class_element_parser.dart
+++ b/sdk/lib/_internal/compiler/implementation/scanner/class_element_parser.dart
@@ -164,9 +164,9 @@
VariableDefinitions variableDefinitions = popNode();
Modifiers modifiers = variableDefinitions.modifiers;
pushNode(null);
- void buildFieldElement(String name, Element fields) {
+ void buildFieldElement(Identifier name, VariableList fields) {
Element element =
- new FieldElementX(name, fields, null);
+ new FieldElementX(name, enclosingElement, fields);
addMember(element);
}
buildFieldElements(modifiers, variableDefinitions.definitions,
diff --git a/sdk/lib/_internal/compiler/implementation/scanner/listener.dart b/sdk/lib/_internal/compiler/implementation/scanner/listener.dart
index 02715ad..92d19f6 100644
--- a/sdk/lib/_internal/compiler/implementation/scanner/listener.dart
+++ b/sdk/lib/_internal/compiler/implementation/scanner/listener.dart
@@ -863,8 +863,9 @@
}
void endTopLevelFields(int count, Token beginToken, Token endToken) {
- void buildFieldElement(String name, Element fields) {
- pushElement(new FieldElementX(name, fields, null));
+ void buildFieldElement(Identifier name, VariableList fields) {
+ pushElement(
+ new FieldElementX(name, compilationUnitElement, fields));
}
NodeList variables = makeNodeList(count, null, null, ",");
TypeAnnotation type = popNode();
@@ -877,13 +878,11 @@
void buildFieldElements(Modifiers modifiers,
NodeList variables,
Element enclosingElement,
- void buildFieldElement(String name,
- Element fields),
+ void buildFieldElement(Identifier name,
+ VariableList fields),
Token beginToken, Token endToken) {
- Element fields = new PartialFieldListElement(beginToken,
- endToken,
- modifiers,
- enclosingElement);
+ VariableList fields =
+ new PartialFieldList(beginToken, endToken, modifiers);
for (Link<Node> variableNodes = variables.nodes;
!variableNodes.isEmpty;
variableNodes = variableNodes.tail) {
@@ -892,8 +891,7 @@
if (identifier == null) {
identifier = initializedIdentifier.asSendSet().selector.asIdentifier();
}
- String name = identifier.source;
- buildFieldElement(name, fields);
+ buildFieldElement(identifier, fields);
}
}
@@ -1961,33 +1959,45 @@
Token position() => _position;
}
-class PartialFieldListElement extends VariableListElementX {
+class PartialFieldList extends VariableList {
final Token beginToken;
final Token endToken;
- PartialFieldListElement(Token this.beginToken,
- Token this.endToken,
- Modifiers modifiers,
- Element enclosing)
- : super(ElementKind.VARIABLE_LIST, modifiers, enclosing);
+ PartialFieldList(Token this.beginToken,
+ Token this.endToken,
+ Modifiers modifiers)
+ : super(modifiers);
- VariableDefinitions parseNode(DiagnosticListener listener) {
- if (cachedNode != null) return cachedNode;
- cachedNode = parse(listener,
- getCompilationUnit(),
+ VariableDefinitions parseNode(Element element, DiagnosticListener listener) {
+ if (definitions != null) return definitions;
+ definitions = parse(listener,
+ element.getCompilationUnit(),
(p) => p.parseVariablesDeclaration(beginToken));
- if (!cachedNode.modifiers.isVar() &&
- !cachedNode.modifiers.isFinal() &&
- !cachedNode.modifiers.isConst() &&
- cachedNode.type == null) {
+ if (!definitions.modifiers.isVar() &&
+ !definitions.modifiers.isFinal() &&
+ !definitions.modifiers.isConst() &&
+ definitions.type == null) {
listener.cancel('A field declaration must start with var, final, '
'const, or a type annotation.',
- node: cachedNode);
+ node: definitions);
}
- return cachedNode;
+ return definitions;
}
- Token position() => beginToken; // findMyName doesn't work. I'm nameless.
+ computeType(Element element, Compiler compiler) {
+ if (type != null) return type;
+ // TODO(johnniwinther): Compute this in the resolver.
+ compiler.withCurrentElement(element, () {
+ VariableDefinitions node = parseNode(element, compiler);
+ if (node.type != null) {
+ type = compiler.resolveTypeAnnotation(element, node.type);
+ } else {
+ type = compiler.types.dynamicType;
+ }
+ });
+ assert(type != null);
+ return type;
+ }
}
class PartialTypedefElement extends TypedefElementX {
diff --git a/sdk/lib/_internal/compiler/implementation/scanner/scanner_task.dart b/sdk/lib/_internal/compiler/implementation/scanner/scanner_task.dart
index 0fa7c57..955fd87 100644
--- a/sdk/lib/_internal/compiler/implementation/scanner/scanner_task.dart
+++ b/sdk/lib/_internal/compiler/implementation/scanner/scanner_task.dart
@@ -9,13 +9,13 @@
String get name => 'Scanner';
void scanLibrary(LibraryElement library) {
- var compilationUnit = library.entryCompilationUnit;
- var canonicalUri = library.canonicalUri.toString();
- var resolvedUri = compilationUnit.script.uri.toString();
+ CompilationUnitElement compilationUnit = library.entryCompilationUnit;
+ String canonicalUri = library.canonicalUri.toString();
+ String resolvedUri = compilationUnit.script.readableUri.toString();
if (canonicalUri == resolvedUri) {
- compiler.log("scanning library $canonicalUri");
+ compiler.log("Scanning library $canonicalUri");
} else {
- compiler.log("scanning library $canonicalUri ($resolvedUri)");
+ compiler.log("Scanning library $canonicalUri ($resolvedUri)");
}
scan(compilationUnit);
}
diff --git a/sdk/lib/_internal/compiler/implementation/scanner/scannerlib.dart b/sdk/lib/_internal/compiler/implementation/scanner/scannerlib.dart
index 20a71f6..b27bd15 100644
--- a/sdk/lib/_internal/compiler/implementation/scanner/scannerlib.dart
+++ b/sdk/lib/_internal/compiler/implementation/scanner/scannerlib.dart
@@ -13,7 +13,7 @@
TypedefElementX,
VariableElementX,
FieldElementX,
- VariableListElementX,
+ VariableList,
ClassElementX,
MetadataAnnotationX,
MixinApplicationElementX;
diff --git a/sdk/lib/_internal/compiler/implementation/script.dart b/sdk/lib/_internal/compiler/implementation/script.dart
index 396f4bd..9ceafb4 100644
--- a/sdk/lib/_internal/compiler/implementation/script.dart
+++ b/sdk/lib/_internal/compiler/implementation/script.dart
@@ -12,9 +12,17 @@
*
* See [LibraryLoader] for terminology on URIs.
*/
- final Uri uri;
+ final Uri readableUri;
- Script(this.uri, this.file);
+
+ /**
+ * The resource URI from which this script was loaded.
+ *
+ * See [LibraryLoader] for terminology on URIs.
+ */
+ final Uri resourceUri;
+
+ Script(this.readableUri, this.resourceUri, this.file);
String get text => (file == null) ? null : file.slowText();
String get name => (file == null) ? null : file.filename;
diff --git a/sdk/lib/_internal/compiler/implementation/source_file_provider.dart b/sdk/lib/_internal/compiler/implementation/source_file_provider.dart
index 861bc2e..76e7ad3 100644
--- a/sdk/lib/_internal/compiler/implementation/source_file_provider.dart
+++ b/sdk/lib/_internal/compiler/implementation/source_file_provider.dart
@@ -114,14 +114,15 @@
if (isAborting) return;
isAborting = (kind == api.Diagnostic.CRASH);
- message = prefixMessage(message, kind);
-
bool fatal = (kind.ordinal & FATAL) != 0;
bool isInfo = (kind.ordinal & INFO) != 0;
if (isInfo && uri == null && kind != api.Diagnostic.INFO) {
info(message, kind);
return;
}
+
+ message = prefixMessage(message, kind);
+
// [previousKind]/[lastKind] records the previous non-INFO kind we saw.
// This is used to suppress info about a warning when warnings are
// suppressed, and similar for hints.
diff --git a/sdk/lib/_internal/compiler/implementation/source_map_builder.dart b/sdk/lib/_internal/compiler/implementation/source_map_builder.dart
index a4d2e4b..1f5e908 100644
--- a/sdk/lib/_internal/compiler/implementation/source_map_builder.dart
+++ b/sdk/lib/_internal/compiler/implementation/source_map_builder.dart
@@ -19,6 +19,7 @@
'opqrstuvwxyz0123456789+/';
final Uri uri;
+ final Uri fileUri;
List<SourceMapEntry> entries;
@@ -35,7 +36,7 @@
int previousSourceNameIndex;
bool firstEntryInLine;
- SourceMapBuilder(this.uri) {
+ SourceMapBuilder(this.uri, this.fileUri) {
entries = new List<SourceMapEntry>();
sourceUrlMap = new Map<String, int>();
@@ -76,6 +77,9 @@
StringBuffer buffer = new StringBuffer();
buffer.write('{\n');
buffer.write(' "version": 3,\n');
+ if (uri != null && fileUri != null) {
+ buffer.write(' "file": "${relativize(uri, fileUri, false)}",\n');
+ }
buffer.write(' "sourceRoot": "",\n');
buffer.write(' "sources": ');
if (uri != null) {
diff --git a/sdk/lib/_internal/compiler/implementation/ssa/builder.dart b/sdk/lib/_internal/compiler/implementation/ssa/builder.dart
index 85ac0e1..f785e40 100644
--- a/sdk/lib/_internal/compiler/implementation/ssa/builder.dart
+++ b/sdk/lib/_internal/compiler/implementation/ssa/builder.dart
@@ -223,7 +223,7 @@
*
* Invariant: [function] must be an implementation element.
*/
- void startFunction(Element element, ast.Expression node) {
+ void startFunction(Element element, ast.Node node) {
assert(invariant(element, element.isImplementation));
Compiler compiler = builder.compiler;
closureData = compiler.closureToClassMapper.computeClosureToClassMapping(
@@ -1453,11 +1453,10 @@
}
HGraph buildLazyInitializer(VariableElement variable) {
- ast.SendSet node = variable.parseNode(compiler);
+ ast.Node node = variable.parseNode(compiler);
openFunction(variable, node);
- Link<ast.Node> link = node.arguments;
- assert(!link.isEmpty && link.tail.isEmpty);
- visit(link.head);
+ assert(variable.initializer != null);
+ visit(variable.initializer);
HInstruction value = pop();
value = potentiallyCheckType(value, variable.computeType(compiler));
closeAndGotoExit(new HReturn(value));
@@ -1827,19 +1826,19 @@
Map<Element, HInstruction> fieldValues) {
assert(invariant(classElement, classElement.isImplementation));
classElement.forEachInstanceField(
- (ClassElement enclosingClass, Element member) {
+ (ClassElement enclosingClass, VariableElement member) {
compiler.withCurrentElement(member, () {
TreeElements definitions = compiler.analyzeElement(member);
ast.Node node = member.parseNode(compiler);
- ast.SendSet assignment = node.asSendSet();
- if (assignment == null) {
+ ast.Expression initializer = member.initializer;
+ if (initializer == null) {
// Unassigned fields of native classes are not initialized to
// prevent overwriting pre-initialized native properties.
if (!Elements.isNativeOrExtendsNative(classElement)) {
fieldValues[member] = graph.addConstantNull(compiler);
}
} else {
- ast.Node right = assignment.arguments.head;
+ ast.Node right = initializer;
TreeElements savedElements = elements;
elements = definitions;
// In case the field initializer uses closures, run the
@@ -2095,7 +2094,7 @@
*
* Invariant: [functionElement] must be the implementation element.
*/
- void openFunction(Element element, ast.Expression node) {
+ void openFunction(Element element, ast.Node node) {
assert(invariant(element, element.isImplementation));
HBasicBlock block = graph.addNewBlock();
open(graph.entry);
diff --git a/sdk/lib/_internal/compiler/implementation/ssa/codegen.dart b/sdk/lib/_internal/compiler/implementation/ssa/codegen.dart
index 4f14f50..bd98b6b 100644
--- a/sdk/lib/_internal/compiler/implementation/ssa/codegen.dart
+++ b/sdk/lib/_internal/compiler/implementation/ssa/codegen.dart
@@ -255,6 +255,7 @@
}
void preGenerateMethod(HGraph graph) {
+ new SsaInstructionSelection(compiler).visitGraph(graph);
new SsaTypeKnownRemover().visitGraph(graph);
new SsaInstructionMerger(generateAtUseSite, compiler).visitGraph(graph);
new SsaConditionMerger(
@@ -1199,10 +1200,10 @@
}
}
- void emitIdentityComparison(HInstruction left,
- HInstruction right,
- bool inverse) {
- String op = singleIdentityComparison(left, right, compiler);
+ void emitIdentityComparison(HIdentity instruction, bool inverse) {
+ String op = instruction.singleComparisonOp;
+ HInstruction left = instruction.left;
+ HInstruction right = instruction.right;
if (op != null) {
use(left);
js.Expression jsLeft = pop();
@@ -1227,7 +1228,7 @@
}
visitIdentity(HIdentity node) {
- emitIdentityComparison(node.left, node.right, false);
+ emitIdentityComparison(node, false);
}
visitAdd(HAdd node) => visitInvokeBinary(node, '+');
@@ -1812,11 +1813,12 @@
handledBySpecialCase = true;
if (input is HIs) {
emitIs(input, '!==');
+ } else if (input is HIsViaInterceptor) {
+ emitIsViaInterceptor(input, true);
} else if (input is HNot) {
use(input.inputs[0]);
} else if (input is HIdentity) {
- HIdentity identity = input;
- emitIdentityComparison(identity.left, identity.right, true);
+ emitIdentityComparison(input, true);
} else if (input is HBoolify) {
use(input.inputs[0]);
push(new js.Binary("!==", pop(), newLiteralBool(true)), input);
@@ -2240,13 +2242,17 @@
return;
}
if (interceptor != null) {
- use(interceptor);
+ checkTypeViaProperty(interceptor, type, negative);
} else {
- use(input);
+ checkTypeViaProperty(input, type, negative);
}
+ }
+ void checkTypeViaProperty(HInstruction input, DartType type, bool negative) {
world.registerIsCheck(type, work.resolutionTree);
+ use(input);
+
js.PropertyAccess field =
new js.PropertyAccess.field(pop(), backend.namer.operatorIsType(type));
// We always negate at least once so that the result is boolified.
@@ -2319,6 +2325,10 @@
emitIs(node, "===");
}
+ void visitIsViaInterceptor(HIsViaInterceptor node) {
+ emitIsViaInterceptor(node, false);
+ }
+
void emitIs(HIs node, String relation) {
DartType type = node.typeExpression;
world.registerIsCheck(type, work.resolutionTree);
@@ -2398,6 +2408,11 @@
}
}
+ void emitIsViaInterceptor(HIsViaInterceptor node, bool negative) {
+ checkTypeViaProperty(node.interceptor, node.typeExpression, negative);
+ attachLocationToLast(node);
+ }
+
js.Expression generateTest(HInstruction input, TypeMask checkedType) {
TypeMask receiver = input.instructionType;
// Figure out if it is beneficial to turn this into a null check.
@@ -2651,20 +2666,3 @@
return backend.namer.elementAccess(helper);
}
}
-
-String singleIdentityComparison(HInstruction left,
- HInstruction right,
- Compiler compiler) {
- // Returns the single identity comparison (== or ===) or null if a more
- // complex expression is required.
- if (left.canBeNull() && right.canBeNull()) {
- if (left.isConstantNull() || right.isConstantNull() ||
- (left.isPrimitive(compiler) &&
- left.instructionType == right.instructionType)) {
- return '==';
- }
- return null;
- } else {
- return '===';
- }
-}
diff --git a/sdk/lib/_internal/compiler/implementation/ssa/codegen_helpers.dart b/sdk/lib/_internal/compiler/implementation/ssa/codegen_helpers.dart
index 8a72f49..1e83906 100644
--- a/sdk/lib/_internal/compiler/implementation/ssa/codegen_helpers.dart
+++ b/sdk/lib/_internal/compiler/implementation/ssa/codegen_helpers.dart
@@ -5,6 +5,89 @@
part of ssa;
/**
+ * Replaces some instructions with specialized versions to make codegen easier.
+ * Caches codegen information on nodes.
+ */
+class SsaInstructionSelection extends HBaseVisitor {
+ final Compiler compiler;
+
+ SsaInstructionSelection(this.compiler);
+
+ void visitGraph(HGraph graph) {
+ visitDominatorTree(graph);
+ }
+
+ visitBasicBlock(HBasicBlock block) {
+ HInstruction instruction = block.first;
+ while (instruction != null) {
+ HInstruction next = instruction.next;
+ HInstruction replacement = instruction.accept(this);
+ if (replacement != instruction) {
+ block.rewrite(instruction, replacement);
+
+ // If the replacement instruction does not know its source element, use
+ // the source element of the instruction.
+ if (replacement.sourceElement == null) {
+ replacement.sourceElement = instruction.sourceElement;
+ }
+ if (replacement.sourcePosition == null) {
+ replacement.sourcePosition = instruction.sourcePosition;
+ }
+ if (!replacement.isInBasicBlock()) {
+ // The constant folding can return an instruction that is already
+ // part of the graph (like an input), so we only add the replacement
+ // if necessary.
+ block.addAfter(instruction, replacement);
+ // Visit the replacement as the next instruction in case it can also
+ // be constant folded away.
+ next = replacement;
+ }
+ block.remove(instruction);
+ }
+ instruction = next;
+ }
+ }
+
+ HInstruction visitInstruction(HInstruction node) {
+ return node;
+ }
+
+ HInstruction visitIs(HIs node) {
+ if (node.kind == HIs.RAW_CHECK) {
+ HInstruction interceptor = node.interceptor;
+ if (interceptor != null) {
+ JavaScriptBackend backend = compiler.backend;
+ return new HIsViaInterceptor(node.typeExpression, interceptor,
+ backend.boolType);
+ }
+ }
+ return node;
+ }
+
+ HInstruction visitIdentity(HIdentity node) {
+ node.singleComparisonOp = simpleOp(node.left, node.right);
+ return node;
+ }
+
+ String simpleOp(HInstruction left, HInstruction right) {
+ // Returns the single identity comparison (== or ===) or null if a more
+ // complex expression is required.
+ TypeMask leftType = left.instructionType;
+ TypeMask rightType = right.instructionType;
+ if (leftType.isNullable && rightType.isNullable) {
+ if (left.isConstantNull() ||
+ right.isConstantNull() ||
+ (left.isPrimitive(compiler) &&
+ leftType == rightType)) {
+ return '==';
+ }
+ return null;
+ }
+ return '===';
+ }
+}
+
+/**
* Remove [HTypeKnown] instructions from the graph, to make codegen
* analysis easier.
*/
@@ -124,9 +207,7 @@
// does not require an expression with multiple uses (because of null /
// undefined).
void visitIdentity(HIdentity instruction) {
- HInstruction left = instruction.left;
- HInstruction right = instruction.right;
- if (singleIdentityComparison(left, right, compiler) != null) {
+ if (instruction.singleComparisonOp != null) {
super.visitIdentity(instruction);
}
// Do nothing.
diff --git a/sdk/lib/_internal/compiler/implementation/ssa/interceptor_simplifier.dart b/sdk/lib/_internal/compiler/implementation/ssa/interceptor_simplifier.dart
index f2ae1a5..6e2f2fe 100644
--- a/sdk/lib/_internal/compiler/implementation/ssa/interceptor_simplifier.dart
+++ b/sdk/lib/_internal/compiler/implementation/ssa/interceptor_simplifier.dart
@@ -173,11 +173,12 @@
// it with a set of classes it intercepts.
Set<ClassElement> interceptedClasses;
JavaScriptBackend backend = compiler.backend;
- HInstruction dominator =
- findDominator(node.usedBy.where((i) => i is HInvokeDynamic));
- // If there is an instruction that dominates all others, we can
- // use only the selector of that instruction.
- if (dominator != null) {
+ HInstruction dominator = findDominator(node.usedBy);
+ // If there is a call that dominates all other uses, we can use just the
+ // selector of that instruction.
+ if (dominator is HInvokeDynamic &&
+ dominator.isCallOnInterceptor(compiler) &&
+ node == dominator.receiver) {
interceptedClasses =
backend.getInterceptedClassesOn(dominator.selector.name);
@@ -201,15 +202,17 @@
} else {
interceptedClasses = new Set<ClassElement>();
for (HInstruction user in node.usedBy) {
- if (user is HIs) {
- // Is-checks can be performed on any intercepted class.
+ if (user is HInvokeDynamic &&
+ user.isCallOnInterceptor(compiler) &&
+ node == user.receiver) {
+ interceptedClasses.addAll(
+ backend.getInterceptedClassesOn(user.selector.name));
+ } else {
+ // Use a most general interceptor for other instructions, example,
+ // is-checks and escaping interceptors.
interceptedClasses.addAll(backend.interceptedClasses);
break;
}
- if (user is! HInvoke) continue;
- // We don't handle escaping interceptors yet.
- interceptedClasses.addAll(
- backend.getInterceptedClassesOn(user.selector.name));
}
}
diff --git a/sdk/lib/_internal/compiler/implementation/ssa/nodes.dart b/sdk/lib/_internal/compiler/implementation/ssa/nodes.dart
index 774ab84..3b0443e 100644
--- a/sdk/lib/_internal/compiler/implementation/ssa/nodes.dart
+++ b/sdk/lib/_internal/compiler/implementation/ssa/nodes.dart
@@ -38,6 +38,7 @@
R visitInvokeSuper(HInvokeSuper node);
R visitInvokeConstructorBody(HInvokeConstructorBody node);
R visitIs(HIs node);
+ R visitIsViaInterceptor(HIsViaInterceptor node);
R visitLazyStatic(HLazyStatic node);
R visitLess(HLess node);
R visitLessEqual(HLessEqual node);
@@ -335,6 +336,7 @@
visitTruncatingDivide(HTruncatingDivide node) => visitBinaryArithmetic(node);
visitTry(HTry node) => visitControlFlow(node);
visitIs(HIs node) => visitInstruction(node);
+ visitIsViaInterceptor(HIsViaInterceptor node) => visitInstruction(node);
visitTypeConversion(HTypeConversion node) => visitCheck(node);
visitTypeKnown(HTypeKnown node) => visitCheck(node);
visitReadTypeVariable(HReadTypeVariable node) => visitInstruction(node);
@@ -801,6 +803,7 @@
static const int INTERFACE_TYPE_TYPECODE = 34;
static const int DYNAMIC_TYPE_TYPECODE = 35;
static const int TRUNCATING_DIVIDE_TYPECODE = 36;
+ static const int IS_VIA_INTERCEPTOR_TYPECODE = 37;
HInstruction(this.inputs, this.instructionType)
: id = idCounter++, usedBy = <HInstruction>[] {
@@ -1237,6 +1240,15 @@
}
}
+/**
+ * Late instructions are used after the main optimization phases. They capture
+ * codegen decisions just prior to generating JavaScript.
+ */
+abstract class HLateInstruction extends HInstruction {
+ HLateInstruction(List<HInstruction> inputs, TypeMask type)
+ : super(inputs, type);
+}
+
class HBoolify extends HInstruction {
HBoolify(HInstruction value, TypeMask type)
: super(<HInstruction>[value], type) {
@@ -2025,6 +2037,9 @@
}
class HIdentity extends HRelational {
+ // Cached codegen decision.
+ String singleComparisonOp; // null, '===', '=='
+
HIdentity(left, right, selector, type) : super(left, right, selector, type);
accept(HVisitor visitor) => visitor.visitIdentity(this);
@@ -2342,6 +2357,30 @@
}
}
+/**
+ * HIsViaInterceptor is a late-stage instruction for a type test that can be
+ * done entirely on an interceptor. It is not a HCheck because the checked
+ * input is not one of the inputs.
+ */
+class HIsViaInterceptor extends HLateInstruction {
+ final DartType typeExpression;
+ HIsViaInterceptor(this.typeExpression, HInstruction interceptor,
+ TypeMask type)
+ : super(<HInstruction>[interceptor], type) {
+ setUseGvn();
+ }
+
+ HInstruction get interceptor => inputs[0];
+
+ accept(HVisitor visitor) => visitor.visitIsViaInterceptor(this);
+ toString() => "$interceptor is $typeExpression";
+ int typeCode() => HInstruction.IS_VIA_INTERCEPTOR_TYPECODE;
+ bool typeEquals(HInstruction other) => other is HIsViaInterceptor;
+ bool dataEquals(HIs other) {
+ return typeExpression == other.typeExpression;
+ }
+}
+
class HTypeConversion extends HCheck {
final DartType typeExpression;
final int kind;
diff --git a/sdk/lib/_internal/compiler/implementation/ssa/optimize.dart b/sdk/lib/_internal/compiler/implementation/ssa/optimize.dart
index bea5bd5..7931074 100644
--- a/sdk/lib/_internal/compiler/implementation/ssa/optimize.dart
+++ b/sdk/lib/_internal/compiler/implementation/ssa/optimize.dart
@@ -426,6 +426,28 @@
return null;
}
+ HInstruction visitAdd(HAdd node) {
+ HInstruction left = node.left;
+ HInstruction right = node.right;
+ // We can only perform this rewriting on Integer, as it is not
+ // valid for -0.0.
+ if (left.isInteger(compiler) && right.isInteger(compiler)) {
+ if (left is HConstant && left.constant.isZero()) return right;
+ if (right is HConstant && right.constant.isZero()) return left;
+ }
+ return super.visitAdd(node);
+ }
+
+ HInstruction visitMultiply(HMultiply node) {
+ HInstruction left = node.left;
+ HInstruction right = node.right;
+ if (left.isNumber(compiler) && right.isNumber(compiler)) {
+ if (left is HConstant && left.constant.isOne()) return right;
+ if (right is HConstant && right.constant.isOne()) return left;
+ }
+ return super.visitMultiply(node);
+ }
+
HInstruction visitInvokeBinary(HInvokeBinary node) {
HInstruction left = node.left;
HInstruction right = node.right;
diff --git a/sdk/lib/_internal/compiler/implementation/ssa/tracer.dart b/sdk/lib/_internal/compiler/implementation/ssa/tracer.dart
index 37731ba..1d8404c 100644
--- a/sdk/lib/_internal/compiler/implementation/ssa/tracer.dart
+++ b/sdk/lib/_internal/compiler/implementation/ssa/tracer.dart
@@ -329,6 +329,11 @@
String visitInterceptor(HInterceptor node) {
String value = temporaryId(node.inputs[0]);
+ if (node.interceptedClasses != null) {
+ JavaScriptBackend backend = compiler.backend;
+ String cls = backend.namer.getInterceptorSuffix(node.interceptedClasses);
+ return "Intercept ($cls): $value";
+ }
return "Intercept: $value";
}
@@ -508,6 +513,11 @@
return "TypeTest: ${temporaryId(node.expression)} is $type";
}
+ String visitIsViaInterceptor(HIsViaInterceptor node) {
+ String type = node.typeExpression.toString();
+ return "TypeTest: ${temporaryId(node.inputs[0])} is $type";
+ }
+
String visitTypeConversion(HTypeConversion node) {
assert(node.inputs.length <= 2);
String otherInput = (node.inputs.length == 2)
diff --git a/sdk/lib/_internal/compiler/implementation/ssa/value_range_analyzer.dart b/sdk/lib/_internal/compiler/implementation/ssa/value_range_analyzer.dart
index ed6852e..775cd43 100644
--- a/sdk/lib/_internal/compiler/implementation/ssa/value_range_analyzer.dart
+++ b/sdk/lib/_internal/compiler/implementation/ssa/value_range_analyzer.dart
@@ -783,6 +783,39 @@
}
}
+ Range handleInvokeModulo(HInvokeDynamicMethod invoke) {
+ HInstruction left = invoke.inputs[1];
+ HInstruction right = invoke.inputs[1];
+ Range divisor = ranges[right];
+ if (divisor != null) {
+ // For Integer values we can be precise in the upper bound,
+ // so special case those.
+ if (left.isInteger(compiler) && right.isInteger(compiler)) {
+ if (divisor.isPositive) {
+ return info.newNormalizedRange(info.intZero, divisor.upper -
+ info.intOne);
+ } else if (divisor.isNegative) {
+ return info.newNormalizedRange(info.intZero, info.newNegateValue(
+ divisor.lower) - info.intOne);
+ }
+ } else if (left.isNumber(compiler) && right.isNumber(compiler)) {
+ if (divisor.isPositive) {
+ return info.newNormalizedRange(info.intZero, divisor.upper);
+ } else if (divisor.isNegative) {
+ return info.newNormalizedRange(info.intZero, info.newNegateValue(
+ divisor.lower));
+ }
+ }
+ }
+ return info.newUnboundRange();
+ }
+
+ Range visitInvokeDynamicMethod(HInvokeDynamicMethod invoke) {
+ if ((invoke.inputs.length == 3) && (invoke.selector.name == "%"))
+ return handleInvokeModulo(invoke);
+ return super.visitInvokeDynamicMethod(invoke);
+ }
+
Range handleBinaryOperation(HBinaryArithmetic instruction) {
if (!instruction.isInteger(compiler)) return info.newUnboundRange();
return instruction.operation(constantSystem).apply(
diff --git a/sdk/lib/_internal/compiler/implementation/tree/nodes.dart b/sdk/lib/_internal/compiler/implementation/tree/nodes.dart
index 04b6000..40ec287 100644
--- a/sdk/lib/_internal/compiler/implementation/tree/nodes.dart
+++ b/sdk/lib/_internal/compiler/implementation/tree/nodes.dart
@@ -2114,15 +2114,3 @@
=> node.isInterpolation;
}
-/**
- * If the given node is a send set, it visits its initializer (first
- * argument).
- *
- * TODO(ahe): This method is controversial, the team needs to discuss
- * if top-level methods are acceptable and what naming conventions to
- * use.
- */
-initializerDo(Node node, f(Node node)) {
- SendSet send = node.asSendSet();
- if (send != null) return f(send.arguments.head);
-}
diff --git a/sdk/lib/_internal/compiler/implementation/universe/universe.dart b/sdk/lib/_internal/compiler/implementation/universe/universe.dart
index fe81a31..ee598d7 100644
--- a/sdk/lib/_internal/compiler/implementation/universe/universe.dart
+++ b/sdk/lib/_internal/compiler/implementation/universe/universe.dart
@@ -478,10 +478,9 @@
builder.addLast(node);
});
if (signature.optionalParametersAreNamed) {
- signature.forEachOptionalParameter((Element element) {
- Node node = element.parseNode(compiler);
- mapping[node] = element;
- builder.addLast(new NamedArgument(null, null, node));
+ signature.forEachOptionalParameter((ParameterElement element) {
+ mapping[element.initializer] = element;
+ builder.addLast(new NamedArgument(null, null, element.initializer));
});
} else {
signature.forEachOptionalParameter((Element element) {
@@ -493,7 +492,9 @@
return builder.toLink();
}
- internalCompileArgument(Node node) => compileArgument(mapping[node]);
+ internalCompileArgument(Node node) {
+ return compileArgument(mapping[node]);
+ }
Link<Node> nodes = computeCallNodesFromParameters();
diff --git a/sdk/lib/_internal/compiler/implementation/use_unused_api.dart b/sdk/lib/_internal/compiler/implementation/use_unused_api.dart
index eb3f390..ca5d04d 100644
--- a/sdk/lib/_internal/compiler/implementation/use_unused_api.dart
+++ b/sdk/lib/_internal/compiler/implementation/use_unused_api.dart
@@ -140,7 +140,6 @@
..visitTypeVariableElement(null)
..visitTypedefElement(null)
..visitVariableElement(null)
- ..visitVariableListElement(null)
..visitVoidElement(null)
..visitWarnOnUseElement(null);
}
diff --git a/sdk/lib/_internal/compiler/implementation/util/uri_extras.dart b/sdk/lib/_internal/compiler/implementation/util/uri_extras.dart
index 654341d..65a4ed2 100644
--- a/sdk/lib/_internal/compiler/implementation/util/uri_extras.dart
+++ b/sdk/lib/_internal/compiler/implementation/util/uri_extras.dart
@@ -34,8 +34,9 @@
base.port == uri.port &&
uri.query == "" && uri.fragment == "") {
if (normalize(uri.path).startsWith(normalize(base.path))) {
- return uri.path.substring(base.path.length);
+ return uri.path.substring(base.path.lastIndexOf('/') + 1);
}
+
List<String> uriParts = uri.path.split('/');
List<String> baseParts = base.path.split('/');
int common = 0;
@@ -48,7 +49,10 @@
// The first part will always be an empty string because the
// paths are absolute. On Windows, we must also consider drive
// letters or hostnames.
- return uri.path;
+ if (baseParts.length > common + 1) {
+ // Avoid using '..' to go to the root, unless we are already there.
+ return uri.path;
+ }
}
StringBuffer sb = new StringBuffer();
for (int i = common + 1; i < baseParts.length; i++) {
diff --git a/sdk/lib/_internal/compiler/implementation/warnings.dart b/sdk/lib/_internal/compiler/implementation/warnings.dart
index 9b923d1..a67dc21 100644
--- a/sdk/lib/_internal/compiler/implementation/warnings.dart
+++ b/sdk/lib/_internal/compiler/implementation/warnings.dart
@@ -553,6 +553,9 @@
static const MessageKind NOT_A_COMPILE_TIME_CONSTANT = const MessageKind(
"Not a compile-time constant.");
+ static const MessageKind DEFERRED_COMPILE_TIME_CONSTANT = const MessageKind(
+ "Deferred classes cannot be used to create compile-time constants.");
+
static const MessageKind CYCLIC_COMPILE_TIME_CONSTANTS = const MessageKind(
"Cycle in the compile-time constant computation.");
@@ -1082,6 +1085,15 @@
static const MessageKind DUPLICATED_LIBRARY_NAME = const MessageKind(
"Duplicated library name '#{libraryName}'.");
+ static const MessageKind DUPLICATED_RESOURCE = const MessageKind(
+ "The resource '#{resourceUri}' is loaded through both "
+ "'#{canonicalUri1}' and '#{canonicalUri2}'.");
+
+ static const MessageKind DUPLICATED_LIBRARY_RESOURCE =
+ const MessageKind(
+ "The library '#{libraryName}' in '#{resourceUri}' is loaded through "
+ "both '#{canonicalUri1}' and '#{canonicalUri2}'.");
+
// This is used as an exception.
static const MessageKind INVALID_SOURCE_FILE_LOCATION = const MessageKind('''
Invalid offset (#{offset}) in source map.
@@ -1152,13 +1164,10 @@
static const MessageKind MISSING_FACTORY_KEYWORD = const MessageKind(
"Did you forget a factory keyword here?");
- static const MessageKind DEFERRED_LIBRARY_NOT_FROM_MAIN =
+ static const MessageKind DEFERRED_LIBRARY_DART_2_DART =
const MessageKind(
- "DeferredLibrary used as an annotation here, "
- "but not used in the main library. Will not split the output.",
- howToFix:
- "Try adding a '@DeferredLibrary(...)' annotation in the main "
- "library");
+ "Deferred loading is not supported by the dart backend yet. "
+ "Will not split the output.");
static const MessageKind DEFERRED_LIBRARY_WITHOUT_PREFIX =
const MessageKind(
@@ -1172,6 +1181,13 @@
howToFix:
"Try changing the import prefix.");
+ static const MessageKind DEFERRED_TYPE_ANNOTATION =
+ const MessageKind(
+ "The type #{node} is deferred. "
+ "Deferred types are not valid as type annotations.",
+ howToFix:
+ "Try using a non-deferred abstract class as an interface.");
+
static const MessageKind ILLEGAL_STATIC = const MessageKind(
"Modifier static is only allowed on functions declared in "
"a class.");
diff --git a/sdk/lib/_internal/lib/io_patch.dart b/sdk/lib/_internal/lib/io_patch.dart
index b9bb8f0..0bd0544 100644
--- a/sdk/lib/_internal/lib/io_patch.dart
+++ b/sdk/lib/_internal/lib/io_patch.dart
@@ -15,7 +15,7 @@
patch static String _systemTemp() {
throw new UnsupportedError("Directory._systemTemp");
}
- patch static int _exists(String path) {
+ patch static _exists(String path) {
throw new UnsupportedError("Directory._exists");
}
patch static _create(String path) {
@@ -276,13 +276,13 @@
}
patch class RawSocket {
- patch static Future<RawSocket> connect(var host, int port) {
+ patch static Future<RawSocket> connect(host, int port) {
throw new UnsupportedError("RawSocket constructor");
}
}
patch class Socket {
- patch static Future<Socket> connect(var host, int port) {
+ patch static Future<Socket> connect(host, int port) {
throw new UnsupportedError("Socket constructor");
}
}
diff --git a/sdk/lib/_internal/lib/js_helper.dart b/sdk/lib/_internal/lib/js_helper.dart
index 36ecb47..74df1a4 100644
--- a/sdk/lib/_internal/lib/js_helper.dart
+++ b/sdk/lib/_internal/lib/js_helper.dart
@@ -1019,9 +1019,24 @@
return JS('var', '#.apply(#, #)', jsFunction, function, arguments);
}
- static getConstructorOrInterceptor(String className) {
+ static getConstructorOrInterceptorToken(String className) {
// TODO(ahe): Generalize this and improve test coverage of
// reflecting on intercepted classes.
+
+ // We should probably not be mappling the dart:core interface names to the
+ // interceptor library implementation classes like this. `JSArray` is just
+ // one implementation of `List`, there are others that have no relationship
+ // with JSArray other than implementing a common interface.
+ //
+ // For now `List` in dart:core and `JSArray` is in dart:_interceptors. We
+ // need to maintain a distinction to get the correct library mirror.
+ //
+ // TODO(17394): Short term: Refactor to avoid two copies of the list of
+ // known interceptor implementations.
+ //
+ // TODO(17394): Longer term: The proper interfaces with abstract methods
+ // should be emitted.
+
if (JS('bool', '# == "String"', className)) return const JSString();
if (JS('bool', '# == "int"', className)) return const JSInt();
if (JS('bool', '# == "double"', className)) return const JSDouble();
@@ -1032,6 +1047,18 @@
return JS('var', 'init.allClasses[#]', className);
}
+ static bool isInterceptorToken(var object) {
+ // This must match the list of tokens returned by
+ // [getConstructorOrInterceptorToken] above.
+ return JS('bool', '# === #', object, const JSString())
+ || JS('bool', '# === #', object, const JSInt())
+ || JS('bool', '# === #', object, const JSDouble())
+ || JS('bool', '# === #', object, const JSNumber())
+ || JS('bool', '# === #', object, const JSBool())
+ || JS('bool', '# === #', object, const JSArray())
+ || JS('bool', '# === #', object, const JSNull());
+ }
+
static bool identicalImplementation(a, b) {
return JS('bool', '# == null', a)
? JS('bool', '# == null', b)
diff --git a/sdk/lib/_internal/lib/js_mirrors.dart b/sdk/lib/_internal/lib/js_mirrors.dart
index 2f2069b..6876993 100644
--- a/sdk/lib/_internal/lib/js_mirrors.dart
+++ b/sdk/lib/_internal/lib/js_mirrors.dart
@@ -485,8 +485,7 @@
// TODO(ahe): Test this getter.
DeclarationMirror get owner => null;
- // TODO(ahe): Implement this.
- Function operator [](Symbol name)
+ List<LibraryDependencyMirror> get libraryDependencies
=> throw new UnimplementedError();
}
@@ -544,7 +543,7 @@
return mirror;
}
var constructorOrInterceptor =
- Primitives.getConstructorOrInterceptor(mangledName);
+ Primitives.getConstructorOrInterceptorToken(mangledName);
if (constructorOrInterceptor == null) {
int index = JS('int|Null', 'init.functionAliases[#]', mangledName);
if (index != null) {
@@ -556,7 +555,7 @@
// TODO(ahe): How to handle intercepted classes?
throw new UnsupportedError('Cannot find class for: ${n(symbol)}');
}
- var constructor = (constructorOrInterceptor is Interceptor)
+ var constructor = (Primitives.isInterceptorToken(constructorOrInterceptor))
? JS('', '#.constructor', constructorOrInterceptor)
: constructorOrInterceptor;
var descriptor = JS('', '#["@"]', constructor);
@@ -788,9 +787,6 @@
List<TypeMirror> get typeArguments => const <TypeMirror>[];
- // TODO(ahe): Implement this.
- Function operator [](Symbol name) => throw new UnimplementedError();
-
bool get isAbstract => throw new UnimplementedError();
bool isSubclassOf(ClassMirror other) {
@@ -1100,9 +1096,6 @@
// TODO(ahe): Remove this method from the API.
MirrorSystem get mirrors => currentJsMirrorSystem;
-
- // TODO(ahe): Implement this method.
- Function operator [](Symbol name) => throw new UnimplementedError();
}
/**
@@ -1400,9 +1393,6 @@
// TODO(ahe): Implement this.
ClassMirror get mixin => throw new UnimplementedError();
- // TODO(ahe): Implement this.
- Function operator [](Symbol name) => throw new UnimplementedError();
-
bool isSubtypeOf(TypeMirror other) => throw new UnimplementedError();
bool isAssignableTo(TypeMirror other) => throw new UnimplementedError();
@@ -1511,7 +1501,7 @@
String get _prettyName => 'ClassMirror';
get _jsConstructor {
- if (_jsConstructorOrInterceptor is Interceptor) {
+ if (Primitives.isInterceptorToken(_jsConstructorOrInterceptor)) {
return JS('', '#.constructor', _jsConstructorOrInterceptor);
} else {
return _jsConstructorOrInterceptor;
@@ -1781,7 +1771,7 @@
JsLibraryMirror get owner {
if (_owner == null) {
- if (_jsConstructorOrInterceptor is Interceptor) {
+ if (Primitives.isInterceptorToken(_jsConstructorOrInterceptor)) {
_owner = reflectType(Object).owner;
} else {
for (var list in JsMirrorSystem.librariesByName.values) {
@@ -1912,9 +1902,6 @@
// TODO(ahe): Implement this.
ClassMirror get mixin => throw new UnimplementedError();
- // TODO(ahe): Implement this.
- Function operator [](Symbol name) => throw new UnimplementedError();
-
bool get isAbstract => throw new UnimplementedError();
bool isSubclassOf(ClassMirror other) {
@@ -2106,9 +2093,6 @@
InstanceMirror findInContext(Symbol name, {ifAbsent: null}) {
throw new UnsupportedError("ClosureMirror.findInContext not yet supported");
}
-
- // TODO(ahe): Implement this method.
- Function operator [](Symbol name) => throw new UnimplementedError();
}
class JsMethodMirror extends JsDeclarationMirror implements MethodMirror {
@@ -2409,7 +2393,6 @@
Symbol constructorName,
List positionalArguments,
[Map<Symbol, dynamic> namedArguments]) => throw new UnimplementedError();
- Function operator [](Symbol name) => throw new UnimplementedError();
InstanceMirror invoke(Symbol memberName,
List positionalArguments,
[Map<Symbol, dynamic> namedArguments])
diff --git a/sdk/lib/_internal/lib/js_string.dart b/sdk/lib/_internal/lib/js_string.dart
index 4055647..36372f4 100644
--- a/sdk/lib/_internal/lib/js_string.dart
+++ b/sdk/lib/_internal/lib/js_string.dart
@@ -175,33 +175,54 @@
}
}
- // Dart2js can't use JavaScript trim, because JavaScript does not trim
- // the NEXT LINE character (0x85) and BOMs (0xFEFF).
- String trim() {
- const int CARRIAGE_RETURN = 0x0D;
+ /// Finds the index of the first non-whitespace character, or the
+ /// end of the string. Start looking at position [index].
+ static int _skipLeadingWhitespace(String string, int index) {
const int SPACE = 0x20;
- const int NEL = 0x85;
- const int BOM = 0xFEFF;
+ const int CARRIAGE_RETURN = 0x0D;
+ while (index < string.length) {
+ int codeUnit = string.codeUnitAt(index);
+ if (codeUnit != SPACE &&
+ codeUnit != CARRIAGE_RETURN &&
+ !_isWhitespace(codeUnit)) {
+ break;
+ }
+ index++;
+ }
+ return index;
+ }
- // Start by doing JS trim. Then check if it leaves a NEL or BOM at
+ /// Finds the index after the the last non-whitespace character, or 0.
+ /// Start looking at position [index - 1].
+ static int _skipTrailingWhitespace(String string, int index) {
+ const int SPACE = 0x20;
+ const int CARRIAGE_RETURN = 0x0D;
+ while (index > 0) {
+ int codeUnit = string.codeUnitAt(index - 1);
+ if (codeUnit != SPACE &&
+ codeUnit != CARRIAGE_RETURN &&
+ !_isWhitespace(codeUnit)) {
+ break;
+ }
+ index--;
+ }
+ return index;
+ }
+
+ // Dart2js can't use JavaScript trim directly,
+ // because JavaScript does not trim
+ // the NEXT LINE (NEL) character (0x85).
+ String trim() {
+ const int NEL = 0x85;
+
+ // Start by doing JS trim. Then check if it leaves a NEL at
// either end of the string.
String result = JS('String', '#.trim()', this);
-
if (result.length == 0) return result;
int firstCode = result.codeUnitAt(0);
int startIndex = 0;
- if (firstCode == NEL || firstCode == BOM) {
- startIndex++;
- while (startIndex < result.length) {
- int codeUnit = result.codeUnitAt(startIndex);
- if (codeUnit == SPACE ||
- codeUnit == CARRIAGE_RETURN ||
- _isWhitespace(codeUnit)) {
- startIndex++;
- } else {
- break;
- }
- }
+ if (firstCode == NEL) {
+ startIndex = _skipLeadingWhitespace(result, 1);
if (startIndex == result.length) return "";
}
@@ -209,23 +230,69 @@
// We know that there is at least one character that is non-whitespace.
// Therefore we don't need to verify that endIndex > startIndex.
int lastCode = result.codeUnitAt(endIndex - 1);
- if (lastCode == NEL || lastCode == BOM) {
- endIndex--;
- while (true) {
- int codeUnit = result.codeUnitAt(endIndex - 1);
- if (codeUnit == SPACE ||
- codeUnit == CARRIAGE_RETURN ||
- _isWhitespace(codeUnit)) {
- endIndex--;
- } else {
- break;
- }
- }
+ if (lastCode == NEL) {
+ endIndex = _skipTrailingWhitespace(result, endIndex - 1);
}
if (startIndex == 0 && endIndex == result.length) return result;
return JS('String', r'#.substring(#, #)', result, startIndex, endIndex);
}
+ // Dart2js can't use JavaScript trimLeft directly,
+ // because it is not in ES5, so not every browser implements it,
+ // and because those that do will not trim the NEXT LINE character (0x85).
+ String trimLeft() {
+ const int NEL = 0x85;
+
+ // Start by doing JS trim. Then check if it leaves a NEL at
+ // the beginning of the string.
+ String result;
+ int startIndex = 0;
+ if (JS('bool', 'typeof #.trimLeft != "undefined"', this)) {
+ result = JS('String', '#.trimLeft()', this);
+ if (result.length == 0) return result;
+ int firstCode = result.codeUnitAt(0);
+ if (firstCode == NEL) {
+ startIndex = _skipLeadingWhitespace(result, 1);
+ }
+ } else {
+ result = this;
+ startIndex = _skipLeadingWhitespace(this, 0);
+ }
+ if (startIndex == 0) return result;
+ if (startIndex == result.length) return "";
+ return JS('String', r'#.substring(#)', result, startIndex);
+ }
+
+ // Dart2js can't use JavaScript trimRight directly,
+ // because it is not in ES5 and because JavaScript does not trim
+ // the NEXT LINE character (0x85).
+ String trimRight() {
+ const int NEL = 0x85;
+
+ // Start by doing JS trim. Then check if it leaves a NEL or BOM at
+ // the end of the string.
+ String result;
+ int endIndex;
+ // trimRight is implemented by Firefox and Chrome/Blink,
+ // so use it if it is there.
+ if (JS('bool', 'typeof #.trimRight != "undefined"', this)) {
+ result = JS('String', '#.trimRight()', this);
+ endIndex = result.length;
+ if (endIndex == 0) return result;
+ int lastCode = result.codeUnitAt(endIndex - 1);
+ if (lastCode == NEL) {
+ endIndex = _skipTrailingWhitespace(result, endIndex - 1);
+ }
+ } else {
+ result = this;
+ endIndex = _skipTrailingWhitespace(this, this.length);
+ }
+
+ if (endIndex == result.length) return result;
+ if (endIndex == 0) return "";
+ return JS('String', r'#.substring(#, #)', result, 0, endIndex);
+ }
+
String operator*(int times) {
if (0 >= times) return ''; // Unnecessary but hoists argument type check.
if (times == 1 || this.length == 0) return this;
diff --git a/sdk/lib/_internal/pub/bin/pub.dart b/sdk/lib/_internal/pub/bin/pub.dart
index ecc8318..8d06b80 100644
--- a/sdk/lib/_internal/pub/bin/pub.dart
+++ b/sdk/lib/_internal/pub/bin/pub.dart
@@ -88,11 +88,19 @@
captureStackChains: captureStackChains).catchError((error, Chain chain) {
// This is basically the top-level exception handler so that we don't
// spew a stack trace on our users.
- var message;
-
- log.error(getErrorMessage(error));
+ var message = getErrorMessage(error);
+ log.error(message);
log.fine("Exception type: ${error.runtimeType}");
+ if (log.json.enabled) {
+ if (error is UsageException) {
+ // Don't print usage info in JSON output.
+ log.json.error(error.message);
+ } else {
+ log.json.error(error);
+ }
+ }
+
if (options['trace'] || !isUserFacingException(error)) {
log.error(chain.terse);
} else {
@@ -131,7 +139,7 @@
if (exception is HttpException || exception is HttpException ||
exception is SocketException || exception is PubHttpException) {
return exit_codes.UNAVAILABLE;
- } else if (exception is FormatException) {
+ } else if (exception is FormatException || exception is DataException) {
return exit_codes.DATA;
} else if (exception is UsageException) {
return exit_codes.USAGE;
diff --git a/sdk/lib/_internal/pub/lib/src/barback/build_environment.dart b/sdk/lib/_internal/pub/lib/src/barback/build_environment.dart
index 55f9f1d..9cc8128 100644
--- a/sdk/lib/_internal/pub/lib/src/barback/build_environment.dart
+++ b/sdk/lib/_internal/pub/lib/src/barback/build_environment.dart
@@ -8,7 +8,7 @@
import 'dart:io';
import 'package:barback/barback.dart';
-import 'package:path/path.dart' as path;
+import 'package:path/path.dart' as p;
import 'package:stack_trace/stack_trace.dart';
import 'package:watcher/watcher.dart';
@@ -159,6 +159,18 @@
return _builtInTransformers;
}
+ /// Gets the names of the top-level directories in [package] whose contents
+ /// should be provided as source assets.
+ Set<String> getPublicDirectories(String package) {
+ var directories = ["asset", "lib"];
+
+ if (package == graph.entrypoint.root.name) {
+ directories.addAll(_rootDirectories);
+ }
+
+ return directories.toSet();
+ }
+
/// Loads the assets and transformers for this environment.
///
/// This transforms and serves all library and asset files in all packages in
@@ -178,8 +190,15 @@
// whole program.
var subscriptions = [
barback.errors.listen((error) {
- if (error is TransformerException) error = error.error;
- if (!completer.isCompleted) {
+ if (error is TransformerException) {
+ var message = error.error.toString();
+ if (error.stackTrace != null) {
+ message += "\n" + error.stackTrace.terse.toString();
+ }
+
+ _log(new LogEntry(error.transform, error.transform.primaryId,
+ LogLevel.ERROR, message, null));
+ } else if (!completer.isCompleted) {
completer.completeError(error, new Chain.current());
}
}),
@@ -226,8 +245,7 @@
/// Provides all of the source assets in the environment to barback.
Future _loadSources(Barback barback) {
- return Future.wait(graph.packages.values.map(
- (package) => _updateSources(graph.entrypoint, package)));
+ return Future.wait(graph.packages.values.map(_updateSources));
}
/// Adds all of the source assets in this environment to barback and then
@@ -243,13 +261,12 @@
var packageId = graph.lockFile.packages[package.name];
if (packageId != null &&
graph.entrypoint.cache.sources[packageId.source].shouldCache) {
- return _updateSources(graph.entrypoint, package);
+ return _updateSources(package);
}
// Watch the visible package directories for changes.
- return Future.wait(_getPublicDirectories(graph.entrypoint, package)
- .map((name) {
- var subdirectory = path.join(package.dir, name);
+ return Future.wait(getPublicDirectories(package.name).map((name) {
+ var subdirectory = p.join(package.dir, name);
if (!dirExists(subdirectory)) return new Future.value();
// TODO(nweiz): close these watchers when [barback] is closed.
@@ -257,7 +274,7 @@
watcher.events.listen((event) {
// Don't watch files symlinked into these directories.
// TODO(rnystrom): If pub gets rid of symlinks, remove this.
- var parts = path.split(event.path);
+ var parts = p.split(event.path);
if (parts.contains("packages") || parts.contains("assets")) return;
// Skip files that were (most likely) compiled from nearby ".dart"
@@ -274,7 +291,7 @@
if (event.path.endsWith(".dart.precompiled.js")) return;
var id = new AssetId(package.name,
- path.relative(event.path, from: package.dir));
+ p.relative(event.path, from: package.dir));
if (event.type == ChangeType.REMOVE) {
barback.removeSources([id]);
} else {
@@ -282,7 +299,7 @@
}
});
return watcher.ready;
- })).then((_) => _updateSources(graph.entrypoint, package));
+ })).then((_) => _updateSources(package));
}));
}
@@ -295,10 +312,9 @@
/// For large packages, listing the contents is a performance bottleneck, so
/// this is optimized for our needs in here instead of using the more general
/// but slower [listDir].
- Future _updateSources(Entrypoint entrypoint, Package package) {
- return Future.wait(_getPublicDirectories(entrypoint, package)
- .map((dirPath) {
- var dir = path.join(package.dir, dirPath);
+ Future _updateSources(Package package) {
+ return Future.wait(getPublicDirectories(package.name).map((dirPath) {
+ var dir = p.join(package.dir, dirPath);
if (!dirExists(dir)) return new Future.value();
return new Directory(dir).list(recursive: true, followLinks: true)
@@ -307,11 +323,11 @@
if (entry is Directory) return [];
if (entry is Link) return [];
- var relative = path.normalize(
- path.relative(entry.path, from: package.dir));
+ var relative = p.normalize(
+ p.relative(entry.path, from: package.dir));
// Ignore hidden files or files in "packages" and hidden directories.
- if (path.split(relative).any((part) =>
+ if (p.split(relative).any((part) =>
part.startsWith(".") || part == "packages")) {
return [];
}
@@ -333,19 +349,6 @@
}).toList().then(barback.updateSources);
}));
}
-
- /// Gets the names of the top-level directories in [package] whose contents
- /// should be provided as source assets.
- Iterable<String> _getPublicDirectories(Entrypoint entrypoint,
- Package package) {
- var directories = ["asset", "lib"];
-
- if (package.name == entrypoint.root.name) {
- directories.addAll(_rootDirectories);
- }
-
- return directories;
- }
}
/// Log [entry] using Pub's logging infrastructure.
@@ -354,9 +357,12 @@
/// show the same context like the file where an error occurred, this tries
/// to avoid showing redundant data in the entry.
void _log(LogEntry entry) {
- messageMentions(String text) {
- return entry.message.toLowerCase().contains(text.toLowerCase());
- }
+ messageMentions(text) =>
+ entry.message.toLowerCase().contains(text.toLowerCase());
+
+ messageMentionsAsset(id) =>
+ messageMentions(id.toString()) ||
+ messageMentions(p.joinAll(p.url.split(entry.assetId.path)));
var prefixParts = [];
@@ -369,14 +375,14 @@
prefixParts.add(entry.transform.transformer);
// Mention the primary input of the transform unless the message seems to.
- if (!messageMentions(entry.transform.primaryId.path)) {
+ if (!messageMentionsAsset(entry.transform.primaryId)) {
prefixParts.add("on ${entry.transform.primaryId}");
}
// If the relevant asset isn't the primary input, mention it unless the
// message already does.
if (entry.assetId != entry.transform.primaryId &&
- !messageMentions(entry.assetId.path)) {
+ !messageMentionsAsset(entry.assetId)) {
prefixParts.add("with input ${entry.assetId}");
}
diff --git a/sdk/lib/_internal/pub/lib/src/barback/dart2js_transformer.dart b/sdk/lib/_internal/pub/lib/src/barback/dart2js_transformer.dart
index 6f23229..44225d6 100644
--- a/sdk/lib/_internal/pub/lib/src/barback/dart2js_transformer.dart
+++ b/sdk/lib/_internal/pub/lib/src/barback/dart2js_transformer.dart
@@ -57,15 +57,30 @@
Dart2JSTransformer(BuildEnvironment environment, BarbackMode mode)
: this.withSettings(environment, new BarbackSettings({}, mode));
- /// Only ".dart" files within a buildable directory are processed.
+ /// Only ".dart" entrypoint files within a buildable directory are processed.
Future<bool> isPrimary(Asset asset) {
if (asset.id.extension != ".dart") return new Future.value(false);
- for (var dir in ["benchmark", "example", "test", "web"]) {
- if (asset.id.path.startsWith("$dir/")) return new Future.value(true);
+ if (!["benchmark", "example", "test", "web"]
+ .any((dir) => asset.id.path.startsWith("$dir/"))) {
+ return new Future.value(false);
}
- return new Future.value(false);
+ return asset.readAsString().then((code) {
+ try {
+ var name = asset.id.path;
+ if (asset.id.package != _environment.rootPackage.name) {
+ name += " in ${asset.id.package}";
+ }
+
+ var parsed = parseCompilationUnit(code, name: name);
+ return dart.isEntrypoint(parsed);
+ } on AnalyzerErrorGroup catch (e) {
+ // If we get a parse error, consider the asset primary so we report
+ // dart2js's more detailed error message instead.
+ return true;
+ }
+ });
}
Future apply(Transform transform) {
@@ -76,54 +91,41 @@
transform.logger.info("Compiling ${transform.primaryInput.id}...");
stopwatch.start();
- return transform.primaryInput.readAsString().then((code) {
- try {
- var id = transform.primaryInput.id;
- var name = id.path;
- if (id.package != _environment.rootPackage.name) {
- name += " in ${id.package}";
- }
+ var provider = new _BarbackCompilerProvider(_environment, transform,
+ generateSourceMaps: _settings.mode != BarbackMode.RELEASE);
- var parsed = parseCompilationUnit(code, name: name);
- if (!dart.isEntrypoint(parsed)) return null;
- } on AnalyzerErrorGroup catch (e) {
- transform.logger.error(e.message);
- return null;
- }
+ // Create a "path" to the entrypoint script. The entrypoint may not
+ // actually be on disk, but this gives dart2js a root to resolve relative
+ // paths against.
+ var id = transform.primaryInput.id;
- var provider = new _BarbackCompilerProvider(_environment, transform);
+ var entrypoint = path.join(_environment.graph.packages[id.package].dir,
+ id.path);
- // Create a "path" to the entrypoint script. The entrypoint may not
- // actually be on disk, but this gives dart2js a root to resolve
- // relative paths against.
- var id = transform.primaryInput.id;
-
- var entrypoint = path.join(_environment.graph.packages[id.package].dir,
- id.path);
-
- // TODO(rnystrom): Should have more sophisticated error-handling here.
- // Need to report compile errors to the user in an easily visible way.
- // Need to make sure paths in errors are mapped to the original source
- // path so they can understand them.
- return Chain.track(dart.compile(
- entrypoint, provider,
- commandLineOptions: _configCommandLineOptions,
- checked: _configBool('checked'),
- minify: _configBool(
- 'minify', defaultsTo: _settings.mode == BarbackMode.RELEASE),
- verbose: _configBool('verbose'),
- environment: _configEnvironment,
- packageRoot: path.join(_environment.rootPackage.dir,
- "packages"),
- analyzeAll: _configBool('analyzeAll'),
- suppressWarnings: _configBool('suppressWarnings'),
- suppressHints: _configBool('suppressHints'),
- suppressPackageWarnings: _configBool(
- 'suppressPackageWarnings', defaultsTo: true),
- terse: _configBool('terse'))).then((_) {
- stopwatch.stop();
- transform.logger.info("Took ${stopwatch.elapsed} to compile $id.");
- });
+ // TODO(rnystrom): Should have more sophisticated error-handling here.
+ // Need to report compile errors to the user in an easily visible way.
+ // Need to make sure paths in errors are mapped to the original source
+ // path so they can understand them.
+ return Chain.track(dart.compile(
+ entrypoint, provider,
+ commandLineOptions: _configCommandLineOptions,
+ checked: _configBool('checked'),
+ minify: _configBool(
+ 'minify', defaultsTo: _settings.mode == BarbackMode.RELEASE),
+ verbose: _configBool('verbose'),
+ environment: _configEnvironment,
+ packageRoot: path.join(_environment.rootPackage.dir,
+ "packages"),
+ analyzeAll: _configBool('analyzeAll'),
+ suppressWarnings: _configBool('suppressWarnings'),
+ suppressHints: _configBool('suppressHints'),
+ suppressPackageWarnings: _configBool(
+ 'suppressPackageWarnings', defaultsTo: true),
+ terse: _configBool('terse'),
+ includeSourceMapUrls: _settings.mode != BarbackMode.RELEASE))
+ .then((_) {
+ stopwatch.stop();
+ transform.logger.info("Took ${stopwatch.elapsed} to compile $id.");
});
});
}
@@ -209,6 +211,8 @@
/// errors.
var _isAborting = false;
+ final bool generateSourceMaps;
+
compiler.Diagnostic _lastKind = null;
static final int _FATAL =
@@ -218,7 +222,8 @@
compiler.Diagnostic.INFO.ordinal |
compiler.Diagnostic.VERBOSE_INFO.ordinal;
- _BarbackCompilerProvider(this._environment, this._transform);
+ _BarbackCompilerProvider(this._environment, this._transform,
+ {this.generateSourceMaps: true});
/// A [CompilerInputProvider] for dart2js.
Future<String> provideInput(Uri resourceUri) {
@@ -242,6 +247,11 @@
// for it.
assert(name == "");
+ // TODO(rnystrom): Do this more cleanly. See: #17403.
+ if (!generateSourceMaps && extension.endsWith(".map")) {
+ return new NullSink<String>();
+ }
+
var primaryId = _transform.primaryInput.id;
var id = new AssetId(primaryId.package, "${primaryId.path}.$extension");
@@ -341,12 +351,11 @@
// See if it's a path to a "public" asset within the root package. All
// other files in the root package are not visible to transformers, so
// should be loaded directly from disk.
- var rootDir = _environment.rootPackage.dir;
var sourcePath = path.fromUri(url);
- if (isBeneath(sourcePath, path.join(rootDir, "lib")) ||
- isBeneath(sourcePath, path.join(rootDir, "asset")) ||
- isBeneath(sourcePath, path.join(rootDir, "web"))) {
- var relative = path.relative(sourcePath, from: rootDir);
+ if (_environment.getPublicDirectories(_environment.rootPackage.name)
+ .any((dir) => path.isWithin(dir, sourcePath))) {
+ var relative = path.relative(sourcePath,
+ from: _environment.rootPackage.dir);
return new AssetId(_environment.rootPackage.name, relative);
}
@@ -354,3 +363,11 @@
return null;
}
}
+
+/// An [EventSink] that discards all data. Provided to dart2js when we don't
+/// want an actual output.
+class NullSink<T> implements EventSink<T> {
+ void add(T event) {}
+ void addError(errorEvent, [StackTrace stackTrace]) {}
+ void close() {}
+}
diff --git a/sdk/lib/_internal/pub/lib/src/command.dart b/sdk/lib/_internal/pub/lib/src/command.dart
index 6907646..c155f32 100644
--- a/sdk/lib/_internal/pub/lib/src/command.dart
+++ b/sdk/lib/_internal/pub/lib/src/command.dart
@@ -47,6 +47,7 @@
buffer.writeln();
buffer.writeln('Global options:');
buffer.writeln(pubArgParser.getUsage());
+ buffer.writeln();
buffer.write(_listCommands(mainCommands));
buffer.writeln();
buffer.writeln(
@@ -59,7 +60,7 @@
/// [commands].
static void usageErrorWithCommands(Map<String, PubCommand> commands,
String message) {
- throw new UsageException("$message\n${_listCommands(commands)}");
+ throw new UsageException(message, _listCommands(commands));
}
/// Writes [commands] in a nicely formatted list to [buffer].
@@ -81,7 +82,6 @@
var isSubcommand = commands != mainCommands;
var buffer = new StringBuffer();
- buffer.writeln();
buffer.writeln('Available ${isSubcommand ? "sub" : ""}commands:');
for (var name in names) {
buffer.writeln(' ${padRight(name, length)} '
@@ -190,10 +190,18 @@
}
// TODO(rnystrom): Use this in other places handle usage failures.
- /// Throw an [ApplicationException] for a usage error of this command with
+ /// Throw a [UsageException] for a usage error of this command with
/// [message].
void usageError(String message) {
- throw new UsageException("$message\n\n${_getUsage()}");
+ throw new UsageException(message, _getUsage());
+ }
+
+ /// Throw a [DataException] with [message] to indicate that the command has
+ /// failed because of invalid input data.
+ ///
+ /// This will report the error and cause pub to exit with [exit_codes.DATA].
+ void dataError(String message) {
+ throw new DataException(message);
}
/// Generates a string of usage information for this command.
@@ -203,8 +211,8 @@
var commandUsage = commandParser.getUsage();
if (!commandUsage.isEmpty) {
- buffer.write('\n');
- buffer.write(commandUsage);
+ buffer.writeln();
+ buffer.writeln(commandUsage);
}
if (subcommands.isNotEmpty) {
diff --git a/sdk/lib/_internal/pub/lib/src/command/build.dart b/sdk/lib/_internal/pub/lib/src/command/build.dart
index 6373935..d57be72 100644
--- a/sdk/lib/_internal/pub/lib/src/command/build.dart
+++ b/sdk/lib/_internal/pub/lib/src/command/build.dart
@@ -33,10 +33,10 @@
// TODO(nweiz): make this configurable.
/// The path to the application's build output directory.
- String get target => path.join(entrypoint.root.dir, 'build');
+ String get target => 'build';
/// The build mode.
- BarbackMode get mode => new BarbackMode(commandOptions['mode']);
+ BarbackMode get mode => new BarbackMode(commandOptions["mode"]);
/// The number of files that have been built and written to disc so far.
int builtFiles = 0;
@@ -45,19 +45,26 @@
final buildDirectories = new Set<String>();
BuildCommand() {
- commandParser.addOption('mode', defaultsTo: BarbackMode.RELEASE.toString(),
- help: 'Mode to run transformers in.');
+ commandParser.addOption("format",
+ help: "How output should be displayed.",
+ allowed: ["text", "json"], defaultsTo: "text");
- commandParser.addFlag('all', help: "Build all buildable directories.",
+ commandParser.addOption("mode", defaultsTo: BarbackMode.RELEASE.toString(),
+ help: "Mode to run transformers in.");
+
+ commandParser.addFlag("all", help: "Build all buildable directories.",
defaultsTo: false, negatable: false);
}
Future onRun() {
- var exitCode = _parseBuildDirectories();
- if (exitCode != exit_codes.SUCCESS) return flushThenExit(exitCode);
+ log.json.enabled = commandOptions["format"] == "json";
+ _parseBuildDirectories();
cleanDir(target);
+ var errorsJson = [];
+ var logJson = [];
+
// Since this server will only be hit by the transformer loader and isn't
// user-facing, just use an IPv4 address to avoid a weird bug on the
// OS X buildbots.
@@ -69,8 +76,23 @@
// by getAllAssets().
environment.barback.errors.listen((error) {
log.error(log.red("Build error:\n$error"));
+
+ if (log.json.enabled) {
+ // Wrap the error in a map in case we end up decorating it with more
+ // properties later.
+ errorsJson.add({
+ "error": error.toString()
+ });
+ }
});
+ // If we're using JSON output, the regular server logging is disabled.
+ // Instead, we collect it here to include in the final JSON result.
+ if (log.json.enabled) {
+ environment.barback.log.listen(
+ (entry) => logJson.add(_logEntryToJson(entry)));
+ }
+
return log.progress("Building ${entrypoint.root.name}",
() => environment.barback.getAllAssets()).then((assets) {
// Find all of the JS entrypoints we built.
@@ -80,7 +102,15 @@
return Future.wait(assets.map(_writeAsset)).then((_) {
builtFiles += _copyBrowserJsFiles(dart2JSEntrypoints);
- log.message("Built $builtFiles ${pluralize('file', builtFiles)}!");
+ log.message('Built $builtFiles ${pluralize('file', builtFiles)} '
+ 'to "$target".');
+
+ log.json.message({
+ "buildResult": "success",
+ "outputDirectory": target,
+ "numFiles": builtFiles,
+ "log": logJson
+ });
});
});
}).catchError((error) {
@@ -89,6 +119,12 @@
if (error is! BarbackException) throw error;
log.error(log.red("Build failed."));
+ log.json.message({
+ "buildResult": "failure",
+ "errors": errorsJson,
+ "log": logJson
+ });
+
return flushThenExit(exit_codes.DATA);
});
}
@@ -103,13 +139,12 @@
///
/// Otherwise, all arguments should be the names of directories to include.
///
- /// Returns the exit code of an error, or zero if it parsed correctly.
- int _parseBuildDirectories() {
+ /// Throws an exception if the arguments are invalid.
+ void _parseBuildDirectories() {
if (commandOptions["all"]) {
if (commandOptions.rest.isNotEmpty) {
- log.error(
+ usageError(
'Build directory names are not allowed if "--all" is passed.');
- return exit_codes.USAGE;
}
// Include every build directory that exists in the package.
@@ -119,13 +154,12 @@
if (allowed.isEmpty) {
var buildDirs = toSentence(ordered(_allowedBuildDirectories.map(
(name) => '"$name"')));
- log.error('There are no buildable directories.\n'
+ dataError('There are no buildable directories.\n'
'The supported directories are $buildDirs.');
- return exit_codes.DATA;
}
buildDirectories.addAll(allowed);
- return exit_codes.SUCCESS;
+ return;
}
buildDirectories.addAll(commandOptions.rest);
@@ -144,9 +178,8 @@
var names = toSentence(ordered(disallowed).map((name) => '"$name"'));
var allowed = toSentence(ordered(_allowedBuildDirectories.map(
(name) => '"$name"')));
- log.error('Unsupported build $dirs $names.\n'
- 'The allowed directories are $allowed.');
- return exit_codes.USAGE;
+ usageError('Unsupported build $dirs $names.\n'
+ 'The allowed directories are $allowed.');
}
// Make sure all of the build directories exist.
@@ -154,15 +187,11 @@
(dir) => !dirExists(path.join(entrypoint.root.dir, dir)));
if (missing.length == 1) {
- log.error('Directory "${missing.single}" does not exist.');
- return exit_codes.DATA;
+ dataError('Directory "${missing.single}" does not exist.');
} else if (missing.isNotEmpty) {
var names = toSentence(ordered(missing).map((name) => '"$name"'));
- log.error('Directories $names do not exist.');
- return exit_codes.DATA;
+ dataError('Directories $names do not exist.');
}
-
- return exit_codes.SUCCESS;
}
/// Writes [asset] to the appropriate build directory.
@@ -277,7 +306,7 @@
/// Ensures that the [name].js file is copied into [directory] in [target],
/// under `packages/browser/`.
void _addBrowserJs(String directory, String name) {
- var jsPath = path.join(
+ var jsPath = path.join(entrypoint.root.dir,
target, directory, 'packages', 'browser', '$name.js');
ensureDir(path.dirname(jsPath));
@@ -286,4 +315,39 @@
// directory.
copyFile(path.join(entrypoint.packagesDir, 'browser', '$name.js'), jsPath);
}
+
+ /// Converts [entry] to a JSON object for use with JSON-formatted output.
+ Map _logEntryToJson(LogEntry entry) {
+ var data = {
+ "level": entry.level.name,
+ "transformer": {
+ "name": entry.transform.transformer.toString(),
+ "primaryInput": {
+ "package": entry.transform.primaryId.package,
+ "path": entry.transform.primaryId.path
+ },
+ },
+ "assetId": {
+ "package": entry.assetId.package,
+ "path": entry.assetId.path
+ },
+ "message": entry.message
+ };
+
+ if (entry.span != null) {
+ data["span"] = {
+ "url": entry.span.sourceUrl,
+ "start": {
+ "line": entry.span.start.line,
+ "column": entry.span.start.column
+ },
+ "end": {
+ "line": entry.span.end.line,
+ "column": entry.span.end.column
+ },
+ };
+ }
+
+ return data;
+ }
}
diff --git a/sdk/lib/_internal/pub/lib/src/command/list_package_dirs.dart b/sdk/lib/_internal/pub/lib/src/command/list_package_dirs.dart
index 31c6916..922a4aa 100644
--- a/sdk/lib/_internal/pub/lib/src/command/list_package_dirs.dart
+++ b/sdk/lib/_internal/pub/lib/src/command/list_package_dirs.dart
@@ -5,13 +5,10 @@
library pub.command.list_package_dirs;
import 'dart:async';
-import 'dart:convert';
import 'package:path/path.dart' as path;
import '../command.dart';
-import '../exit_codes.dart' as exit_codes;
-import '../io.dart';
import '../log.dart' as log;
/// Handles the `list-package-dirs` pub command.
@@ -27,10 +24,10 @@
}
Future onRun() {
+ log.json.enabled = true;
+
if (!entrypoint.lockFileExists) {
- log.error(JSON.encode(
- 'Package "myapp" has no lockfile. Please run "pub get" first.'));
- return flushThenExit(exit_codes.NO_INPUT);
+ dataError('Package "myapp" has no lockfile. Please run "pub get" first.');
}
var output = {};
@@ -55,7 +52,7 @@
output["input_files"] = [entrypoint.lockFilePath];
return Future.wait(futures).then((_) {
- log.message(JSON.encode(output));
+ log.json.message(output);
});
}
}
diff --git a/sdk/lib/_internal/pub/lib/src/command/serve.dart b/sdk/lib/_internal/pub/lib/src/command/serve.dart
index eb7c517..9bf6876 100644
--- a/sdk/lib/_internal/pub/lib/src/command/serve.dart
+++ b/sdk/lib/_internal/pub/lib/src/command/serve.dart
@@ -153,7 +153,7 @@
}
var directories = commandOptions.rest.map(p.normalize).toList();
- var invalid = directories.where((dir) => !isBeneath(dir, '.'));
+ var invalid = directories.where((dir) => !p.isWithin('.', dir));
if (invalid.isNotEmpty) {
usageError("${_directorySentence(invalid, "isn't", "aren't")} in this "
"package.");
diff --git a/sdk/lib/_internal/pub/lib/src/dart.dart b/sdk/lib/_internal/pub/lib/src/dart.dart
index cc9146f..530c798 100644
--- a/sdk/lib/_internal/pub/lib/src/dart.dart
+++ b/sdk/lib/_internal/pub/lib/src/dart.dart
@@ -11,6 +11,7 @@
import 'package:analyzer/analyzer.dart';
import 'package:path/path.dart' as path;
import 'package:stack_trace/stack_trace.dart';
+
import '../../../compiler/compiler.dart' as compiler;
import '../../../compiler/implementation/filenames.dart'
show appendSlash;
@@ -61,6 +62,7 @@
bool suppressHints: false,
bool suppressPackageWarnings: true,
bool terse: false,
+ bool includeSourceMapUrls: false,
bool toDart: false}) {
return syncFuture(() {
var options = <String>['--categories=Client,Server'];
@@ -74,6 +76,13 @@
if (terse) options.add('--terse');
if (toDart) options.add('--output-type=dart');
+ // Add the source map URLs.
+ if (includeSourceMapUrls) {
+ var sourceUrl = path.toUri(entrypoint);
+ options.add("--out=$sourceUrl.js");
+ options.add("--source-map=$sourceUrl.js.map");
+ }
+
if (environment == null) environment = {};
if (commandLineOptions != null) options.addAll(commandLineOptions);
diff --git a/sdk/lib/_internal/pub/lib/src/entrypoint.dart b/sdk/lib/_internal/pub/lib/src/entrypoint.dart
index 918736a..c098eec 100644
--- a/sdk/lib/_internal/pub/lib/src/entrypoint.dart
+++ b/sdk/lib/_internal/pub/lib/src/entrypoint.dart
@@ -248,20 +248,33 @@
});
}
- /// Warns users if they have directory or file named `assets` _anywhere_
- /// inside `web` directory.
+ /// Warns users if they have directory or file named `assets` directly
+ /// inside a top-level directory.
void _warnOnAssetsPaths() {
- var webDir = path.join(root.dir, 'web');
- if (!dirExists(webDir)) return;
+ var buffer = new StringBuffer();
- listDir(webDir, recursive: true)
- .where((p) => path.basename(p) == 'assets')
- .forEach((p) {
- var assetsPath = path.relative(p, from: root.dir);
- log.warning(
+ warn(message) {
+ if (buffer.isEmpty) {
+ buffer.writeln(
'Warning: Pub reserves paths containing "assets" for using assets '
- 'from packages. Please rename the path "$assetsPath".');
- });
+ 'from packages.');
+ }
+
+ buffer.writeln(message);
+ }
+
+ // Look inside all of the top-level directories.
+ for (var dir in ordered(listDir(root.dir))) {
+ var assetsPath = path.join(dir, "assets");
+ var relative = path.relative(assetsPath, from: root.dir);
+ if (dirExists(assetsPath)) {
+ warn('Please rename the directory "$relative".');
+ } else if (entryExists(assetsPath)) {
+ warn('Please rename the file "$relative".');
+ }
+ }
+
+ if (buffer.isNotEmpty) log.warning(buffer);
}
/// Loads the package graph for the application and all of its transitive
diff --git a/sdk/lib/_internal/pub/lib/src/io.dart b/sdk/lib/_internal/pub/lib/src/io.dart
index 79c2931..e05713d 100644
--- a/sdk/lib/_internal/pub/lib/src/io.dart
+++ b/sdk/lib/_internal/pub/lib/src/io.dart
@@ -31,13 +31,6 @@
/// additional throughput.
final _descriptorPool = new Pool(32);
-/// Returns whether or not [entry] is nested somewhere within [dir]. This just
-/// performs a path comparison; it doesn't look at the actual filesystem.
-bool isBeneath(String entry, String dir) {
- var relative = path.relative(entry, from: dir);
- return !path.isAbsolute(relative) && path.split(relative)[0] != '..';
-}
-
/// Determines if a file or directory exists at [path].
bool entryExists(String path) =>
dirExists(path) || fileExists(path) || linkExists(path);
@@ -795,7 +788,7 @@
baseDir = path.absolute(baseDir);
contents = contents.map((entry) {
entry = path.absolute(entry);
- if (!isBeneath(entry, baseDir)) {
+ if (!path.isWithin(baseDir, entry)) {
throw new ArgumentError('Entry $entry is not inside $baseDir.');
}
return path.relative(entry, from: baseDir);
diff --git a/sdk/lib/_internal/pub/lib/src/log.dart b/sdk/lib/_internal/pub/lib/src/log.dart
index fd1166d..07a1195 100644
--- a/sdk/lib/_internal/pub/lib/src/log.dart
+++ b/sdk/lib/_internal/pub/lib/src/log.dart
@@ -6,14 +6,21 @@
library pub.log;
import 'dart:async';
+import 'dart:convert';
import 'dart:io';
import 'package:path/path.dart' as p;
+import 'package:stack_trace/stack_trace.dart';
import 'io.dart';
import 'transcript.dart';
import 'utils.dart';
+/// The singleton instance so that we can have a nice api like:
+///
+/// log.json.error(...);
+final json = new _JsonLogger();
+
typedef LogFn(Entry entry);
final Map<Level, LogFn> _loggers = new Map<Level, LogFn>();
@@ -209,7 +216,9 @@
if (_transcript == null) return;
stderr.writeln('---- Log transcript ----');
- _transcript.forEach(_logToStderrWithLabel, (discarded) {
+ _transcript.forEach((entry) {
+ _printToStream(stderr, entry, showLabel: true);
+ }, (discarded) {
stderr.writeln('---- ($discarded discarded) ----');
});
stderr.writeln('---- End log transcript ----');
@@ -219,6 +228,8 @@
/// future returned by [callback] completes. If anything else is logged during
/// this, it cancels the progress.
Future progress(String message, Future callback()) {
+ if (json.enabled) return callback();
+
if (_progressTimer != null) throw new StateError("Already in progress.");
_progressMessage = '$message...';
@@ -356,6 +367,12 @@
}
void _logToStream(IOSink sink, Entry entry, {bool showLabel}) {
+ if (json.enabled) return;
+
+ _printToStream(sink, entry, showLabel: showLabel);
+}
+
+void _printToStream(IOSink sink, Entry entry, {bool showLabel}) {
_stopProgress();
bool firstLine = true;
@@ -373,3 +390,35 @@
firstLine = false;
}
}
+
+/// Namespace-like class for collecting the methods for JSON logging.
+class _JsonLogger {
+ /// Whether logging should use machine-friendly JSON output or human-friendly
+ /// text.
+ ///
+ /// If set to `true`, then no regular logging is printed. Logged messages
+ /// will still be recorded and displayed if the transcript is printed.
+ bool enabled = false;
+
+ /// Creates an error JSON object for [error] and prints it if JSON output
+ /// is enabled.
+ ///
+ /// Always prints to stdout.
+ void error(error, [stackTrace]) {
+ var errorJson = {"error": error.toString()};
+
+ if (stackTrace == null && error is Error) stackTrace = error.stackTrace;
+ if (stackTrace != null) {
+ errorJson["stackTrace"] = new Chain.forTrace(stackTrace).toString();
+ }
+
+ this.message(errorJson);
+ }
+
+ /// Encodes [message] to JSON and prints it if JSON output is enabled.
+ void message(message) {
+ if (!enabled) return;
+
+ print(JSON.encode(message));
+ }
+}
diff --git a/sdk/lib/_internal/pub/lib/src/pubspec.dart b/sdk/lib/_internal/pub/lib/src/pubspec.dart
index ac8e6cd..e6344a4 100644
--- a/sdk/lib/_internal/pub/lib/src/pubspec.dart
+++ b/sdk/lib/_internal/pub/lib/src/pubspec.dart
@@ -221,8 +221,12 @@
'Could not find a file named "pubspec.yaml" in "$packageDir".');
}
- return new Pubspec.parse(readTextFile(pubspecPath), sources,
- expectedName: expectedName, location: pubspecUri);
+ try {
+ return new Pubspec.parse(readTextFile(pubspecPath), sources,
+ expectedName: expectedName, location: pubspecUri);
+ } on YamlException catch (error) {
+ throw new PubspecException(expectedName, pubspecUri, error.toString());
+ }
}
Pubspec(this._name, this._version, this._dependencies, this._devDependencies,
diff --git a/sdk/lib/_internal/pub/lib/src/utils.dart b/sdk/lib/_internal/pub/lib/src/utils.dart
index e9d4acb..2584bc4 100644
--- a/sdk/lib/_internal/pub/lib/src/utils.dart
+++ b/sdk/lib/_internal/pub/lib/src/utils.dart
@@ -859,7 +859,20 @@
/// A class for command usage exceptions.
class UsageException extends ApplicationException {
- UsageException(String message)
+ /// The command usage information.
+ final String usage;
+
+ UsageException(String message, this.usage)
+ : super(message);
+
+ String toString() => "$message\n\n$usage";
+}
+
+/// A class for errors in a command's input data.
+///
+/// This corresponds to the [exit_codes.DATA] exit code.
+class DataException extends ApplicationException {
+ DataException(String message)
: super(message);
}
diff --git a/sdk/lib/_internal/pub/lib/src/validator/pubspec_field.dart b/sdk/lib/_internal/pub/lib/src/validator/pubspec_field.dart
index 7ff8ec7..546eb26 100644
--- a/sdk/lib/_internal/pub/lib/src/validator/pubspec_field.dart
+++ b/sdk/lib/_internal/pub/lib/src/validator/pubspec_field.dart
@@ -54,7 +54,7 @@
if (authors != null &&
(authors is! List || authors.any((author) => author is! String))) {
- errors.add('Your pubspec.yaml\'s "authors" field must be a string, but '
+ errors.add('Your pubspec.yaml\'s "authors" field must be a list, but '
'it was "$authors".');
return;
}
diff --git a/sdk/lib/_internal/pub/test/build/all_includes_all_buildable_directories_test.dart b/sdk/lib/_internal/pub/test/build/all_includes_all_buildable_directories_test.dart
index 1a9e464..86171da 100644
--- a/sdk/lib/_internal/pub/test/build/all_includes_all_buildable_directories_test.dart
+++ b/sdk/lib/_internal/pub/test/build/all_includes_all_buildable_directories_test.dart
@@ -32,7 +32,7 @@
]).create();
schedulePub(args: ["build", "--all"],
- output: new RegExp(r"Built 5 files!"));
+ output: new RegExp(r'Built 5 files to "build".'));
d.dir(appPath, [
d.dir('build', [
diff --git a/sdk/lib/_internal/pub/test/build/all_with_no_buildable_directories_test.dart b/sdk/lib/_internal/pub/test/build/all_with_no_buildable_directories_test.dart
index c83d94c..32ee191 100644
--- a/sdk/lib/_internal/pub/test/build/all_with_no_buildable_directories_test.dart
+++ b/sdk/lib/_internal/pub/test/build/all_with_no_buildable_directories_test.dart
@@ -18,4 +18,16 @@
'"test" and "web".',
exitCode: exit_codes.DATA);
});
+
+ integration("build --all --format json with no buildable directories", () {
+ d.appDir().create();
+
+ schedulePub(args: ["build", "--all", "--format", "json"],
+ outputJson: {'error':
+ 'There are no buildable directories.\n'
+ 'The supported directories are "benchmark", "bin", "example", '
+ '"test" and "web".'
+ },
+ exitCode: exit_codes.DATA);
+ });
}
diff --git a/sdk/lib/_internal/pub/test/build/allows_multiple_dir_name_args_test.dart b/sdk/lib/_internal/pub/test/build/allows_multiple_dir_name_args_test.dart
index d662147..c6f9531 100644
--- a/sdk/lib/_internal/pub/test/build/allows_multiple_dir_name_args_test.dart
+++ b/sdk/lib/_internal/pub/test/build/allows_multiple_dir_name_args_test.dart
@@ -23,7 +23,7 @@
]).create();
schedulePub(args: ["build", "example", "test"],
- output: new RegExp(r"Built 2 files!"));
+ output: new RegExp(r'Built 2 files to "build".'));
d.dir(appPath, [
d.dir('build', [
diff --git a/sdk/lib/_internal/pub/test/build/cleans_entire_build_directory_test.dart b/sdk/lib/_internal/pub/test/build/cleans_entire_build_directory_test.dart
index 142914a..16d25c2 100644
--- a/sdk/lib/_internal/pub/test/build/cleans_entire_build_directory_test.dart
+++ b/sdk/lib/_internal/pub/test/build/cleans_entire_build_directory_test.dart
@@ -21,11 +21,11 @@
// Make a build directory containing "example".
schedulePub(args: ["build", "example"],
- output: new RegExp(r"Built 1 file!"));
+ output: new RegExp(r'Built 1 file to "build".'));
// Now build again with just "test". Should wipe out "example".
schedulePub(args: ["build", "test"],
- output: new RegExp(r"Built 1 file!"));
+ output: new RegExp(r'Built 1 file to "build".'));
d.dir(appPath, [
d.dir('build', [
diff --git a/sdk/lib/_internal/pub/test/build/compiles_entrypoints_in_benchmark_test.dart b/sdk/lib/_internal/pub/test/build/compiles_entrypoints_in_benchmark_test.dart
index 68edc38..0b1632e 100644
--- a/sdk/lib/_internal/pub/test/build/compiles_entrypoints_in_benchmark_test.dart
+++ b/sdk/lib/_internal/pub/test/build/compiles_entrypoints_in_benchmark_test.dart
@@ -27,20 +27,18 @@
]).create();
schedulePub(args: ["build", "benchmark"],
- output: new RegExp(r"Built 6 files!"));
+ output: new RegExp(r'Built 4 files to "build".'));
d.dir(appPath, [
d.dir('build', [
d.dir('benchmark', [
d.matcherFile('file.dart.js', isNot(isEmpty)),
d.matcherFile('file.dart.precompiled.js', isNot(isEmpty)),
- d.matcherFile('file.dart.js.map', isNot(isEmpty)),
d.nothing('file.dart'),
d.nothing('lib.dart'),
d.dir('subdir', [
d.matcherFile('subfile.dart.js', isNot(isEmpty)),
d.matcherFile('subfile.dart.precompiled.js', isNot(isEmpty)),
- d.matcherFile('subfile.dart.js.map', isNot(isEmpty)),
d.nothing('subfile.dart')
])
])
diff --git a/sdk/lib/_internal/pub/test/build/compiles_entrypoints_in_example_test.dart b/sdk/lib/_internal/pub/test/build/compiles_entrypoints_in_example_test.dart
index 5b54d3a..0ced048 100644
--- a/sdk/lib/_internal/pub/test/build/compiles_entrypoints_in_example_test.dart
+++ b/sdk/lib/_internal/pub/test/build/compiles_entrypoints_in_example_test.dart
@@ -27,20 +27,18 @@
]).create();
schedulePub(args: ["build", "example"],
- output: new RegExp(r"Built 6 files!"));
+ output: new RegExp(r'Built 4 files to "build".'));
d.dir(appPath, [
d.dir('build', [
d.dir('example', [
d.matcherFile('file.dart.js', isNot(isEmpty)),
d.matcherFile('file.dart.precompiled.js', isNot(isEmpty)),
- d.matcherFile('file.dart.js.map', isNot(isEmpty)),
d.nothing('file.dart'),
d.nothing('lib.dart'),
d.dir('subdir', [
d.matcherFile('subfile.dart.js', isNot(isEmpty)),
d.matcherFile('subfile.dart.precompiled.js', isNot(isEmpty)),
- d.matcherFile('subfile.dart.js.map', isNot(isEmpty)),
d.nothing('subfile.dart')
])
])
diff --git a/sdk/lib/_internal/pub/test/build/compiles_entrypoints_in_test_test.dart b/sdk/lib/_internal/pub/test/build/compiles_entrypoints_in_test_test.dart
index 2b585d4..8d03346 100644
--- a/sdk/lib/_internal/pub/test/build/compiles_entrypoints_in_test_test.dart
+++ b/sdk/lib/_internal/pub/test/build/compiles_entrypoints_in_test_test.dart
@@ -27,20 +27,18 @@
]).create();
schedulePub(args: ["build", "test"],
- output: new RegExp(r"Built 6 files!"));
+ output: new RegExp(r'Built 4 files to "build".'));
d.dir(appPath, [
d.dir('build', [
d.dir('test', [
d.matcherFile('file.dart.js', isNot(isEmpty)),
d.matcherFile('file.dart.precompiled.js', isNot(isEmpty)),
- d.matcherFile('file.dart.js.map', isNot(isEmpty)),
d.nothing('file.dart'),
d.nothing('lib.dart'),
d.dir('subdir', [
d.matcherFile('subfile.dart.js', isNot(isEmpty)),
d.matcherFile('subfile.dart.precompiled.js', isNot(isEmpty)),
- d.matcherFile('subfile.dart.js.map', isNot(isEmpty)),
d.nothing('subfile.dart')
])
])
diff --git a/sdk/lib/_internal/pub/test/build/compiles_entrypoints_in_web_test.dart b/sdk/lib/_internal/pub/test/build/compiles_entrypoints_in_web_test.dart
index ec942b6..9ceaead 100644
--- a/sdk/lib/_internal/pub/test/build/compiles_entrypoints_in_web_test.dart
+++ b/sdk/lib/_internal/pub/test/build/compiles_entrypoints_in_web_test.dart
@@ -27,20 +27,18 @@
]).create();
schedulePub(args: ["build"],
- output: new RegExp(r"Built 6 files!"));
+ output: new RegExp(r'Built 4 files to "build".'));
d.dir(appPath, [
d.dir('build', [
d.dir('web', [
d.matcherFile('file.dart.js', isNot(isEmpty)),
d.matcherFile('file.dart.precompiled.js', isNot(isEmpty)),
- d.matcherFile('file.dart.js.map', isNot(isEmpty)),
d.nothing('file.dart'),
d.nothing('lib.dart'),
d.dir('subdir', [
d.matcherFile('subfile.dart.js', isNot(isEmpty)),
d.matcherFile('subfile.dart.precompiled.js', isNot(isEmpty)),
- d.matcherFile('subfile.dart.js.map', isNot(isEmpty)),
d.nothing('subfile.dart')
])
])
diff --git a/sdk/lib/_internal/pub/test/build/copies_browser_js_next_to_entrypoints_test.dart b/sdk/lib/_internal/pub/test/build/copies_browser_js_next_to_entrypoints_test.dart
index 43e779c..80c1f55 100644
--- a/sdk/lib/_internal/pub/test/build/copies_browser_js_next_to_entrypoints_test.dart
+++ b/sdk/lib/_internal/pub/test/build/copies_browser_js_next_to_entrypoints_test.dart
@@ -37,14 +37,13 @@
pubGet();
schedulePub(args: ["build", "--all"],
- output: new RegExp(r"Built 20 files!"));
+ output: new RegExp(r'Built 16 files to "build".'));
d.dir(appPath, [
d.dir('build', [
d.dir('example', [
d.matcherFile('file.dart.js', isNot(isEmpty)),
d.matcherFile('file.dart.precompiled.js', isNot(isEmpty)),
- d.matcherFile('file.dart.js.map', isNot(isEmpty)),
d.dir('packages', [d.dir('browser', [
d.file('dart.js', 'contents of dart.js'),
d.file('interop.js', 'contents of interop.js')
@@ -56,13 +55,11 @@
])]),
d.matcherFile('subfile.dart.js', isNot(isEmpty)),
d.matcherFile('subfile.dart.precompiled.js', isNot(isEmpty)),
- d.matcherFile('subfile.dart.js.map', isNot(isEmpty))
])
]),
d.dir('web', [
d.matcherFile('file.dart.js', isNot(isEmpty)),
d.matcherFile('file.dart.precompiled.js', isNot(isEmpty)),
- d.matcherFile('file.dart.js.map', isNot(isEmpty)),
d.dir('packages', [d.dir('browser', [
d.file('dart.js', 'contents of dart.js'),
d.file('interop.js', 'contents of interop.js')
@@ -73,8 +70,7 @@
d.file('interop.js', 'contents of interop.js')
])]),
d.matcherFile('subfile.dart.js', isNot(isEmpty)),
- d.matcherFile('subfile.dart.precompiled.js', isNot(isEmpty)),
- d.matcherFile('subfile.dart.js.map', isNot(isEmpty))
+ d.matcherFile('subfile.dart.precompiled.js', isNot(isEmpty))
])
])
])
diff --git a/sdk/lib/_internal/pub/test/build/copies_browser_js_with_dependency_override_test.dart b/sdk/lib/_internal/pub/test/build/copies_browser_js_with_dependency_override_test.dart
index 7d2bb90..59d0ace 100644
--- a/sdk/lib/_internal/pub/test/build/copies_browser_js_with_dependency_override_test.dart
+++ b/sdk/lib/_internal/pub/test/build/copies_browser_js_with_dependency_override_test.dart
@@ -36,7 +36,7 @@
pubGet();
schedulePub(args: ["build", "--all"],
- output: new RegExp(r"Built 5 files!"));
+ output: new RegExp(r'Built 4 files to "build".'));
d.dir(appPath, [
d.dir('build', [
diff --git a/sdk/lib/_internal/pub/test/build/copies_browser_js_with_dev_dependency_test.dart b/sdk/lib/_internal/pub/test/build/copies_browser_js_with_dev_dependency_test.dart
index 3849227..831de86 100644
--- a/sdk/lib/_internal/pub/test/build/copies_browser_js_with_dev_dependency_test.dart
+++ b/sdk/lib/_internal/pub/test/build/copies_browser_js_with_dev_dependency_test.dart
@@ -36,7 +36,7 @@
pubGet();
schedulePub(args: ["build", "--all"],
- output: new RegExp(r"Built 5 files!"));
+ output: new RegExp(r'Built 4 files to "build".'));
d.dir(appPath, [
d.dir('build', [
diff --git a/sdk/lib/_internal/pub/test/build/copies_non_dart_files_to_build_test.dart b/sdk/lib/_internal/pub/test/build/copies_non_dart_files_to_build_test.dart
index 76abba2..fecee29 100644
--- a/sdk/lib/_internal/pub/test/build/copies_non_dart_files_to_build_test.dart
+++ b/sdk/lib/_internal/pub/test/build/copies_non_dart_files_to_build_test.dart
@@ -24,7 +24,7 @@
]).create();
schedulePub(args: ["build"],
- output: new RegExp(r"Built 2 files!"));
+ output: new RegExp(r'Built 2 files to "build".'));
d.dir(appPath, [
d.dir('build', [
diff --git a/sdk/lib/_internal/pub/test/build/dart2js_finds_imports_across_packages_test.dart b/sdk/lib/_internal/pub/test/build/dart2js_finds_imports_across_packages_test.dart
index d5d9b88..3218499 100644
--- a/sdk/lib/_internal/pub/test/build/dart2js_finds_imports_across_packages_test.dart
+++ b/sdk/lib/_internal/pub/test/build/dart2js_finds_imports_across_packages_test.dart
@@ -47,14 +47,13 @@
]).create();
schedulePub(args: ["build"],
- output: new RegExp(r"Built 3 files!"));
+ output: new RegExp(r'Built 2 files to "build".'));
d.dir(appPath, [
d.dir('build', [
d.dir('web', [
d.matcherFile('main.dart.js', isNot(isEmpty)),
- d.matcherFile('main.dart.precompiled.js', isNot(isEmpty)),
- d.matcherFile('main.dart.js.map', isNot(isEmpty))
+ d.matcherFile('main.dart.precompiled.js', isNot(isEmpty))
])
])
]).validate();
diff --git a/sdk/lib/_internal/pub/test/build/does_not_allow_args_with_all_test.dart b/sdk/lib/_internal/pub/test/build/does_not_allow_args_with_all_test.dart
index 5cd9dcf..3f3868c 100644
--- a/sdk/lib/_internal/pub/test/build/does_not_allow_args_with_all_test.dart
+++ b/sdk/lib/_internal/pub/test/build/does_not_allow_args_with_all_test.dart
@@ -15,7 +15,31 @@
]).create();
schedulePub(args: ["build", "example", "--all"],
- error: 'Build directory names are not allowed if "--all" is passed.',
+ error: '''
+ Build directory names are not allowed if "--all" is passed.
+
+ Usage: pub build [options]
+ -h, --help Print usage information for this command.
+ --format How output should be displayed.
+ [text (default), json]
+
+ --mode Mode to run transformers in.
+ (defaults to "release")
+
+ --all Build all buildable directories.''',
exitCode: exit_codes.USAGE);
});
+
+ integration("does not allow directory names with --all with JSON output", () {
+ d.dir(appPath, [
+ d.appPubspec()
+ ]).create();
+
+ schedulePub(args: ["build", "example", "--all", "--format", "json"],
+ outputJson: {
+ "error": 'Build directory names are not allowed if "--all" is passed.'
+ },
+ exitCode: exit_codes.USAGE);
+ });
+
}
diff --git a/sdk/lib/_internal/pub/test/build/handles_long_paths_test.dart b/sdk/lib/_internal/pub/test/build/handles_long_paths_test.dart
index 78ddcf7..fe9bc0d 100644
--- a/sdk/lib/_internal/pub/test/build/handles_long_paths_test.dart
+++ b/sdk/lib/_internal/pub/test/build/handles_long_paths_test.dart
@@ -55,7 +55,7 @@
]).create();
schedulePub(args: ["build"],
- output: new RegExp(r"Built 2 files!"));
+ output: new RegExp(r'Built 2 files to "build".'));
d.dir(appPath, [
d.dir('build', [
diff --git a/sdk/lib/_internal/pub/test/build/ignores_entrypoints_in_asset_test.dart b/sdk/lib/_internal/pub/test/build/ignores_entrypoints_in_asset_test.dart
index 27fd082..0f41ae1 100644
--- a/sdk/lib/_internal/pub/test/build/ignores_entrypoints_in_asset_test.dart
+++ b/sdk/lib/_internal/pub/test/build/ignores_entrypoints_in_asset_test.dart
@@ -20,7 +20,7 @@
]).create();
schedulePub(args: ["build", "--all"],
- output: new RegExp(r"Built 1 file!"));
+ output: new RegExp(r'Built 1 file to "build".'));
d.dir(appPath, [
d.dir('build', [
diff --git a/sdk/lib/_internal/pub/test/build/ignores_entrypoints_in_bin_test.dart b/sdk/lib/_internal/pub/test/build/ignores_entrypoints_in_bin_test.dart
index 148d5db..0ec7d0e 100644
--- a/sdk/lib/_internal/pub/test/build/ignores_entrypoints_in_bin_test.dart
+++ b/sdk/lib/_internal/pub/test/build/ignores_entrypoints_in_bin_test.dart
@@ -20,7 +20,7 @@
]).create();
schedulePub(args: ["build", "--all"],
- output: new RegExp(r"Built 1 file!"));
+ output: new RegExp(r'Built 1 file to "build".'));
d.dir(appPath, [
d.dir('build', [
diff --git a/sdk/lib/_internal/pub/test/build/ignores_entrypoints_in_lib_test.dart b/sdk/lib/_internal/pub/test/build/ignores_entrypoints_in_lib_test.dart
index e42d762..cc543f4 100644
--- a/sdk/lib/_internal/pub/test/build/ignores_entrypoints_in_lib_test.dart
+++ b/sdk/lib/_internal/pub/test/build/ignores_entrypoints_in_lib_test.dart
@@ -20,7 +20,7 @@
]).create();
schedulePub(args: ["build", "--all"],
- output: new RegExp(r"Built 1 file!"));
+ output: new RegExp(r'Built 1 file to "build".'));
d.dir(appPath, [
d.dir('build', [
diff --git a/sdk/lib/_internal/pub/test/build/ignores_existing_compiled_js_files_test.dart b/sdk/lib/_internal/pub/test/build/ignores_existing_compiled_js_files_test.dart
index f9d16c6..feb904b 100644
--- a/sdk/lib/_internal/pub/test/build/ignores_existing_compiled_js_files_test.dart
+++ b/sdk/lib/_internal/pub/test/build/ignores_existing_compiled_js_files_test.dart
@@ -31,8 +31,8 @@
])
]).create();
- schedulePub(args: ["build"],
- output: new RegExp(r"Built 6 files!"));
+ schedulePub(args: ["build", "--mode", "debug"],
+ output: new RegExp(r'Built 8 files to "build".'));
d.dir(appPath, [
d.dir('build', [
diff --git a/sdk/lib/_internal/pub/test/build/ignores_non_entrypoint_dart_files_test.dart b/sdk/lib/_internal/pub/test/build/ignores_non_entrypoint_dart_files_test.dart
index d4f3f64..fea77a6 100644
--- a/sdk/lib/_internal/pub/test/build/ignores_non_entrypoint_dart_files_test.dart
+++ b/sdk/lib/_internal/pub/test/build/ignores_non_entrypoint_dart_files_test.dart
@@ -20,7 +20,7 @@
]).create();
schedulePub(args: ["build"],
- output: new RegExp(r"Built 0 files!"));
+ output: new RegExp(r'Built 0 files to "build".'));
d.dir(appPath, [
d.dir('build', [
diff --git a/sdk/lib/_internal/pub/test/build/includes_assets_from_dependencies_in_lib_test.dart b/sdk/lib/_internal/pub/test/build/includes_assets_from_dependencies_in_lib_test.dart
index 6af3a81..6661940 100644
--- a/sdk/lib/_internal/pub/test/build/includes_assets_from_dependencies_in_lib_test.dart
+++ b/sdk/lib/_internal/pub/test/build/includes_assets_from_dependencies_in_lib_test.dart
@@ -41,7 +41,7 @@
]).create();
schedulePub(args: ["build", "--all"],
- output: new RegExp(r"Built 7 files!"));
+ output: new RegExp(r'Built 7 files to "build".'));
d.dir(appPath, [
d.dir('build', [
diff --git a/sdk/lib/_internal/pub/test/build/includes_assets_from_dependencies_test.dart b/sdk/lib/_internal/pub/test/build/includes_assets_from_dependencies_test.dart
index 35bda64..380a115 100644
--- a/sdk/lib/_internal/pub/test/build/includes_assets_from_dependencies_test.dart
+++ b/sdk/lib/_internal/pub/test/build/includes_assets_from_dependencies_test.dart
@@ -41,7 +41,7 @@
]).create();
schedulePub(args: ["build", "--all"],
- output: new RegExp(r"Built 7 files!"));
+ output: new RegExp(r'Built 7 files to "build".'));
d.dir(appPath, [
d.dir('build', [
diff --git a/sdk/lib/_internal/pub/test/build/includes_dart_files_from_dependencies_in_debug_test.dart b/sdk/lib/_internal/pub/test/build/includes_dart_files_from_dependencies_in_debug_test.dart
index f8a719b..577282e 100644
--- a/sdk/lib/_internal/pub/test/build/includes_dart_files_from_dependencies_in_debug_test.dart
+++ b/sdk/lib/_internal/pub/test/build/includes_dart_files_from_dependencies_in_debug_test.dart
@@ -38,7 +38,7 @@
]).create();
schedulePub(args: ["build", "--mode", "debug", "example"],
- output: new RegExp(r"Built 4 files!"));
+ output: new RegExp(r'Built 4 files to "build".'));
d.dir(appPath, [
d.dir('build', [
diff --git a/sdk/lib/_internal/pub/test/build/includes_dart_files_in_debug_mode_test.dart b/sdk/lib/_internal/pub/test/build/includes_dart_files_in_debug_mode_test.dart
index 54130274..5b7ed18 100644
--- a/sdk/lib/_internal/pub/test/build/includes_dart_files_in_debug_mode_test.dart
+++ b/sdk/lib/_internal/pub/test/build/includes_dart_files_in_debug_mode_test.dart
@@ -22,7 +22,7 @@
]).create();
schedulePub(args: ["build", "--mode", "debug"],
- output: new RegExp(r"Built 4 files!"));
+ output: new RegExp(r'Built 4 files to "build".'));
d.dir(appPath, [
d.dir('build', [
diff --git a/sdk/lib/_internal/pub/test/build/missing_build_directories_test.dart b/sdk/lib/_internal/pub/test/build/missing_build_directories_test.dart
index dc6ec8db..ee64895 100644
--- a/sdk/lib/_internal/pub/test/build/missing_build_directories_test.dart
+++ b/sdk/lib/_internal/pub/test/build/missing_build_directories_test.dart
@@ -24,4 +24,25 @@
error: 'Directories "benchmark" and "test" do not exist.',
exitCode: exit_codes.DATA);
});
+
+ integration("fails if any specified build directories don't exist with JSON "
+ "output", () {
+ d.dir(appPath, [
+ d.appPubspec(),
+ d.dir('example', [
+ d.file('file.txt', 'example')
+ ]),
+ d.dir('web', [
+ d.file('file.txt', 'test')
+ ])
+ ]).create();
+
+ schedulePub(args: ["build", "benchmark", "example", "test", "web",
+ "--format", "json"],
+ outputJson: {
+ "error": 'Directories "benchmark" and "test" do not exist.'
+ },
+ exitCode: exit_codes.DATA);
+ });
+
}
diff --git a/sdk/lib/_internal/pub/test/build/missing_web_directory_test.dart b/sdk/lib/_internal/pub/test/build/missing_web_directory_test.dart
index ccf4264..953ee74 100644
--- a/sdk/lib/_internal/pub/test/build/missing_web_directory_test.dart
+++ b/sdk/lib/_internal/pub/test/build/missing_web_directory_test.dart
@@ -16,4 +16,15 @@
error: 'Directory "web" does not exist.',
exitCode: exit_codes.DATA);
});
+
+ integration("fails if 'web' doesn't exist and no directory is specified "
+ "with JSON output", () {
+ d.appDir().create();
+
+ schedulePub(args: ["build", "--format", "json"],
+ outputJson: {
+ "error": 'Directory "web" does not exist.'
+ },
+ exitCode: exit_codes.DATA);
+ });
}
diff --git a/sdk/lib/_internal/pub/test/build/name_arg_builds_only_that_directory_test.dart b/sdk/lib/_internal/pub/test/build/name_arg_builds_only_that_directory_test.dart
index 699cc73..55badf8 100644
--- a/sdk/lib/_internal/pub/test/build/name_arg_builds_only_that_directory_test.dart
+++ b/sdk/lib/_internal/pub/test/build/name_arg_builds_only_that_directory_test.dart
@@ -23,7 +23,7 @@
]).create();
schedulePub(args: ["build", "example"],
- output: new RegExp(r"Built 2 files!"));
+ output: new RegExp(r'Built 2 files to "build".'));
d.dir(appPath, [
d.dir('build', [
diff --git a/sdk/lib/_internal/pub/test/build/outputs_error_to_json_test.dart b/sdk/lib/_internal/pub/test/build/outputs_error_to_json_test.dart
new file mode 100644
index 0000000..074690a
--- /dev/null
+++ b/sdk/lib/_internal/pub/test/build/outputs_error_to_json_test.dart
@@ -0,0 +1,62 @@
+// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS d.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 pub_tests;
+
+import 'package:scheduled_test/scheduled_test.dart';
+
+import '../../lib/src/exit_codes.dart' as exit_codes;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+
+const TRANSFORMER = """
+import 'dart:async';
+
+import 'package:barback/barback.dart';
+
+class RewriteTransformer extends Transformer {
+ RewriteTransformer.asPlugin();
+
+ String get allowedExtensions => '.txt';
+
+ Future apply(Transform transform) => throw new Exception('oh no!');
+}
+""";
+
+main() {
+ initConfig();
+ integration("outputs error to JSON in a failed build", () {
+ // Loading transformers takes several seconds, so make sure we don't
+ // timeout.
+ currentSchedule.timeout *= 2;
+
+ d.dir(appPath, [
+ d.pubspec({
+ "name": "myapp",
+ "transformers": ["myapp"]
+ }),
+ d.dir("lib", [
+ d.file("transformer.dart", TRANSFORMER)
+ ]),
+ d.dir("web", [
+ d.file("foo.txt", "foo")
+ ])
+ ]).create();
+
+ createLockFile('myapp', pkg: ['barback']);
+
+ schedulePub(args: ["build", "--format", "json"],
+ outputJson: {
+ "buildResult": "failure",
+ "errors": [
+ {
+ "error": startsWith(
+ "Transform Rewrite on myapp|web/foo.txt threw error: oh no!")
+ }
+ ],
+ "log": []
+ },
+ exitCode: exit_codes.DATA);
+ });
+}
diff --git a/sdk/lib/_internal/pub/test/build/outputs_results_to_json_test.dart b/sdk/lib/_internal/pub/test/build/outputs_results_to_json_test.dart
new file mode 100644
index 0000000..c641f18
--- /dev/null
+++ b/sdk/lib/_internal/pub/test/build/outputs_results_to_json_test.dart
@@ -0,0 +1,52 @@
+// Copyright (c) 2014, 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:scheduled_test/scheduled_test.dart';
+
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+
+main() {
+ initConfig();
+
+ integration("outputs results to JSON in a successful build", () {
+ // Dart2js can take a long time to compile dart code, so we increase the
+ // timeout to cope with that.
+ currentSchedule.timeout *= 3;
+
+ d.dir(appPath, [
+ d.appPubspec(),
+ d.dir('web', [
+ d.file('main.dart', 'void main() => print("hello");')
+ ])
+ ]).create();
+
+ schedulePub(args: ["build", "--format", "json"],
+ outputJson: {
+ 'buildResult': 'success',
+ 'outputDirectory': 'build',
+ 'numFiles': 2,
+ 'log': [
+ {
+ 'level': 'Info',
+ 'transformer': {
+ 'name': 'Dart2JS',
+ 'primaryInput': {'package': 'myapp', 'path': 'web/main.dart'}
+ },
+ 'assetId': {'package': 'myapp', 'path': 'web/main.dart'},
+ 'message': 'Compiling myapp|web/main.dart...'
+ },
+ {
+ 'level': 'Info',
+ 'transformer': {
+ 'name': 'Dart2JS',
+ 'primaryInput': {'package': 'myapp', 'path': 'web/main.dart'}
+ },
+ 'assetId': {'package': 'myapp', 'path': 'web/main.dart'},
+ 'message': contains(r'to compile myapp|web/main.dart.')
+ }
+ ]
+ });
+ });
+}
diff --git a/sdk/lib/_internal/pub/test/build/reports_dart_parse_errors_test.dart b/sdk/lib/_internal/pub/test/build/reports_dart_parse_errors_test.dart
index c05eab5..bd0db68 100644
--- a/sdk/lib/_internal/pub/test/build/reports_dart_parse_errors_test.dart
+++ b/sdk/lib/_internal/pub/test/build/reports_dart_parse_errors_test.dart
@@ -2,7 +2,9 @@
// 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:path/path.dart' as p;
import 'package:scheduled_test/scheduled_test.dart';
+import 'package:scheduled_test/scheduled_stream.dart';
import '../../lib/src/exit_codes.dart' as exit_codes;
import '../descriptor.dart' as d;
@@ -27,16 +29,25 @@
])
]).create();
- schedulePub(args: ["build"],
- // TODO(rnystrom): Figure out why dart2js errors aren't deterministic.
- // Use a lookahead regexp to do two searches in one regexp.
- // Checked all non-matching cases for bad performance.
- error: new RegExp(
- r"(?=(.|\n)*^Error on line 1 of .*[/\\]file\.dart:)"
- r"(.|\n)*^Error on line 1 of .*[/\\]subfile\.dart:",
- multiLine: true),
- output: new RegExp(r"Building myapp\.\.\.*"),
- exitCode: exit_codes.DATA);
+ var pub = startPub(args: ["build"]);
+ pub.stdout.expect(startsWith("Building myapp..."));
+
+ var consumeFile = consumeThrough(inOrder([
+ "[Error from Dart2JS]:",
+ startsWith(p.join("web", "file.dart") + ":")
+ ]));
+ var consumeSubfile = consumeThrough(inOrder([
+ "[Error from Dart2JS]:",
+ startsWith(p.join("web", "subdir", "subfile.dart") + ":")
+ ]));
+
+ // It's nondeterministic what order the dart2js transformers start running,
+ // so we allow the error messages to be emitted in either order.
+ pub.stderr.expect(either(
+ inOrder([consumeFile, consumeSubfile]),
+ inOrder([consumeSubfile, consumeFile])));
+
+ pub.shouldExit(exit_codes.DATA);
// Doesn't output anything if an error occurred.
d.dir(appPath, [
diff --git a/sdk/lib/_internal/pub/test/build/unsupported_build_directories_test.dart b/sdk/lib/_internal/pub/test/build/unsupported_build_directories_test.dart
index 7e3c203..73b2b65 100644
--- a/sdk/lib/_internal/pub/test/build/unsupported_build_directories_test.dart
+++ b/sdk/lib/_internal/pub/test/build/unsupported_build_directories_test.dart
@@ -13,9 +13,33 @@
d.appDir().create();
schedulePub(args: ["build", "foo", "bar"],
- error: 'Unsupported build directories "bar" and "foo".\n'
- 'The allowed directories are "benchmark", "bin", "example", '
- '"test" and "web".',
+ error: '''
+ Unsupported build directories "bar" and "foo".
+ The allowed directories are "benchmark", "bin", "example", "test" and "web".
+
+ Usage: pub build [options]
+ -h, --help Print usage information for this command.
+ --format How output should be displayed.
+ [text (default), json]
+
+ --mode Mode to run transformers in.
+ (defaults to "release")
+
+ --all Build all buildable directories.''',
+ exitCode: exit_codes.USAGE);
+ });
+
+ integration("fails if given directories are not buildable with json "
+ "output", () {
+ d.appDir().create();
+
+ schedulePub(args: ["build", "foo", "bar", "--format", "json"],
+ outputJson: {
+ "error":
+ 'Unsupported build directories "bar" and "foo".\n'
+ 'The allowed directories are "benchmark", "bin", "example", '
+ '"test" and "web".'
+ },
exitCode: exit_codes.USAGE);
});
}
diff --git a/sdk/lib/_internal/pub/test/build/warns_on_assets_paths_test.dart b/sdk/lib/_internal/pub/test/build/warns_on_assets_paths_test.dart
index 963ebf1..bd3bb4e 100644
--- a/sdk/lib/_internal/pub/test/build/warns_on_assets_paths_test.dart
+++ b/sdk/lib/_internal/pub/test/build/warns_on_assets_paths_test.dart
@@ -6,92 +6,74 @@
import 'package:path/path.dart' as path;
-import '../../lib/src/utils.dart';
import '../descriptor.dart' as d;
import '../test_pub.dart';
-getWarningRegExp(String assetsPath) {
- // Escape backslashes since they are metacharacters in a regex.
- assetsPath = quoteRegExp(assetsPath);
- return new RegExp(
- '^Warning: Pub reserves paths containing "assets" for using assets from '
- 'packages\\. Please rename the path "$assetsPath"\\.\$');
-}
-
main() {
initConfig();
- integration('warns user about assets dir in the root of "web"', () {
+ integration('warns user about top-level "assets" directories', () {
d.dir(appPath, [
d.appPubspec(),
+ d.dir('bin', [
+ d.dir('assets')
+ ]),
+ d.dir('test', [
+ d.dir('assets')
+ ]),
d.dir('web', [
d.file('index.html'),
d.dir('assets')
])
]).create();
- var assetsPath = path.join('web', 'assets');
- schedulePub(args: ['build'],
- error: getWarningRegExp(assetsPath));
+ schedulePub(args: ['build', 'bin', 'test', 'web'],
+ error: """
+Warning: Pub reserves paths containing "assets" for using assets from packages.
+Please rename the directory "${path.join('bin', 'assets')}".
+Please rename the directory "${path.join('test', 'assets')}".
+Please rename the directory "${path.join('web', 'assets')}".
+""");
});
- integration('warns user about assets dir nested anywhere in "web"', () {
+ integration('warns user about top-level "assets" files', () {
+ d.dir(appPath, [
+ d.appPubspec(),
+ d.dir('bin', [
+ d.file('assets', '...')
+ ]),
+ d.dir('test', [
+ d.file('assets', '...')
+ ]),
+ d.dir('web', [
+ d.file('index.html'),
+ d.file('assets', '...')
+ ])
+ ]).create();
+
+ schedulePub(args: ['build', 'bin', 'test', 'web'],
+ error: """
+Warning: Pub reserves paths containing "assets" for using assets from packages.
+Please rename the file "${path.join('bin', 'assets')}".
+Please rename the file "${path.join('test', 'assets')}".
+Please rename the file "${path.join('web', 'assets')}".
+""");
+ });
+
+ integration('does not warn on "assets" in subdirectories', () {
d.dir(appPath, [
d.appPubspec(),
d.dir('web', [
d.file('index.html'),
d.dir('foo', [
d.dir('assets')
+ ]),
+ d.dir('bar', [
+ d.file('assets', '...')
])
])
]).create();
- var assetsPath = path.join('web', 'foo', 'assets');
- schedulePub(args: ['build'],
- error: getWarningRegExp(assetsPath));
- });
-
- integration('warns user about assets file in the root of "web"', () {
- d.dir(appPath, [
- d.appPubspec(),
- d.dir('web', [
- d.file('index.html'),
- d.file('assets')
- ])
- ]).create();
-
- var assetsPath = path.join('web', 'assets');
- schedulePub(args: ['build'],
- error: getWarningRegExp(assetsPath));
- });
-
- integration('warns user about assets file nested anywhere in "web"', () {
- d.dir(appPath, [
- d.appPubspec(),
- d.dir('web', [
- d.file('index.html'),
- d.dir('foo', [
- d.file('assets')
- ])
- ])
- ]).create();
-
- var assetsPath = path.join('web', 'foo', 'assets');
- schedulePub(args: ['build'],
- error: getWarningRegExp(assetsPath));
- });
-
- integration('does not warn if no assets dir or file anywhere in "web"', () {
- d.dir(appPath, [
- d.appPubspec(),
- d.dir('web', [
- d.file('index.html'),
- d.dir('foo')
- ])
- ]).create();
-
- schedulePub(args: ['build'],
- error: new RegExp(
- r'^(?!Warning: Pub reserves paths containing "assets").*$'));
+ schedulePub(args: ['build'], error: new RegExp(r"^$"));
});
}
diff --git a/sdk/lib/_internal/pub/test/list_package_dirs/no_lockfile_test.dart b/sdk/lib/_internal/pub/test/list_package_dirs/no_lockfile_test.dart
index 5d7446c..3bbc72a 100644
--- a/sdk/lib/_internal/pub/test/list_package_dirs/no_lockfile_test.dart
+++ b/sdk/lib/_internal/pub/test/list_package_dirs/no_lockfile_test.dart
@@ -15,9 +15,10 @@
]).create();
schedulePub(args: ["list-package-dirs", "--format=json"],
- error: '''
- "Package \\"myapp\\" has no lockfile. Please run \\"pub get\\" first."
- ''',
- exitCode: exit_codes.NO_INPUT);
+ outputJson: {
+ "error":
+ 'Package "myapp" has no lockfile. Please run "pub get" first.'
+ },
+ exitCode: exit_codes.DATA);
});
}
\ No newline at end of file
diff --git a/sdk/lib/_internal/pub/test/package_files_test.dart b/sdk/lib/_internal/pub/test/package_files_test.dart
index 6f104bd..9598c76 100644
--- a/sdk/lib/_internal/pub/test/package_files_test.dart
+++ b/sdk/lib/_internal/pub/test/package_files_test.dart
@@ -2,7 +2,7 @@
// 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 lock_file_test;
+library packages_files_test;
import 'package:path/path.dart' as path;
import 'package:scheduled_test/scheduled_test.dart';
diff --git a/sdk/lib/_internal/pub/test/serve/does_not_crash_if_an_unused_dart_file_has_a_syntax_error_test.dart b/sdk/lib/_internal/pub/test/serve/does_not_crash_if_an_unused_dart_file_has_a_syntax_error_test.dart
new file mode 100644
index 0000000..81d6c00
--- /dev/null
+++ b/sdk/lib/_internal/pub/test/serve/does_not_crash_if_an_unused_dart_file_has_a_syntax_error_test.dart
@@ -0,0 +1,38 @@
+// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS d.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 pub_tests;
+
+import 'package:scheduled_test/scheduled_test.dart';
+
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import 'utils.dart';
+
+main() {
+ initConfig();
+ integration("doesn't crash if an unused .dart file has a syntax error", () {
+ d.dir(appPath, [
+ d.pubspec({
+ "name": "myapp",
+ "transformers": ["myapp/src/transformer"]
+ }),
+ d.dir("lib", [d.dir("src", [
+ d.file("transformer.dart", REWRITE_TRANSFORMER),
+ d.file("unused.dart", "(*&^#@")
+ ])]),
+ d.dir("web", [
+ d.file("foo.txt", "foo")
+ ])
+ ]).create();
+
+ createLockFile('myapp', pkg: ['barback']);
+
+ var server = pubServe();
+ server.stderr.expect("[RewriteImport]:");
+ server.stderr.expect(startsWith("Error in myapp|lib/src/unused.dart:"));
+ requestShouldSucceed("foo.out", "foo.out");
+ endPubServe();
+ });
+}
diff --git a/sdk/lib/_internal/pub/test/serve/warns_on_assets_paths_test.dart b/sdk/lib/_internal/pub/test/serve/warns_on_assets_paths_test.dart
index 05f9933..3d16fd1 100644
--- a/sdk/lib/_internal/pub/test/serve/warns_on_assets_paths_test.dart
+++ b/sdk/lib/_internal/pub/test/serve/warns_on_assets_paths_test.dart
@@ -8,25 +8,21 @@
import 'package:scheduled_test/scheduled_stream.dart';
import 'package:scheduled_test/scheduled_test.dart';
-import '../../lib/src/utils.dart';
import '../descriptor.dart' as d;
import '../test_pub.dart';
import 'utils.dart';
-getWarningRegExp(String assetsPath) {
- // Escape backslashes since they are metacharacters in a regex.
- assetsPath = quoteRegExp(assetsPath);
- return new RegExp(
- r'^Warning: Pub reserves paths containing "assets" for using assets from '
- 'packages\\. Please rename the path "$assetsPath"\\.\$');
-}
-
main() {
initConfig();
-
- integration('warns user about assets dir in the root of "web"', () {
+ integration('warns user about top-level "assets" directories', () {
d.dir(appPath, [
d.appPubspec(),
+ d.dir('bin', [
+ d.dir('assets')
+ ]),
+ d.dir('test', [
+ d.dir('assets')
+ ]),
d.dir('web', [
d.file('index.html'),
d.dir('assets')
@@ -36,80 +32,56 @@
var pub = pubServe();
waitForBuildSuccess();
- var assetsPath = path.join('web', 'assets');
- pub.stderr.expect(consumeThrough(matches(getWarningRegExp(assetsPath))));
+ pub.stderr.expect(emitsLines('''
+Warning: Pub reserves paths containing "assets" for using assets from packages.
+Please rename the directory "${path.join('bin', 'assets')}".
+Please rename the directory "${path.join('test', 'assets')}".
+Please rename the directory "${path.join('web', 'assets')}".'''));
endPubServe();
});
- integration('warns user about assets dir nested anywhere in "web"', () {
+ integration('warns user about top-level "assets" files', () {
+ d.dir(appPath, [
+ d.appPubspec(),
+ d.dir('bin', [
+ d.file('assets', '...')
+ ]),
+ d.dir('test', [
+ d.file('assets', '...')
+ ]),
+ d.dir('web', [
+ d.file('index.html'),
+ d.file('assets', '...')
+ ])
+ ]).create();
+
+ var pub = pubServe();
+ waitForBuildSuccess();
+ pub.stderr.expect(emitsLines('''
+Warning: Pub reserves paths containing "assets" for using assets from packages.
+Please rename the file "${path.join('bin', 'assets')}".
+Please rename the file "${path.join('test', 'assets')}".
+Please rename the file "${path.join('web', 'assets')}".'''));
+ endPubServe();
+ });
+
+ integration('does not warn on "assets" in subdirectories', () {
d.dir(appPath, [
d.appPubspec(),
d.dir('web', [
d.file('index.html'),
d.dir('foo', [
d.dir('assets')
+ ]),
+ d.dir('bar', [
+ d.file('assets', '...')
])
])
]).create();
var pub = pubServe();
waitForBuildSuccess();
-
- var assetsPath = path.join('web', 'foo', 'assets');
- pub.stderr.expect(consumeThrough(matches(getWarningRegExp(assetsPath))));
endPubServe();
- });
-
- integration('warns user about assets file in the root of "web"', () {
- d.dir(appPath, [
- d.appPubspec(),
- d.dir('web', [
- d.file('index.html'),
- d.file('assets')
- ])
- ]).create();
-
- var pub = pubServe();
- waitForBuildSuccess();
-
- var assetsPath = path.join('web', 'assets');
- pub.stderr.expect(consumeThrough(matches(getWarningRegExp(assetsPath))));
- endPubServe();
- });
-
- integration('warns user about assets file nested anywhere in "web"', () {
- d.dir(appPath, [
- d.appPubspec(),
- d.dir('web', [
- d.file('index.html'),
- d.dir('foo', [
- d.file('assets')
- ])
- ])
- ]).create();
-
- var pub = pubServe();
- waitForBuildSuccess();
-
- var assetsPath = path.join('web', 'foo', 'assets');
- pub.stderr.expect(consumeThrough(matches(getWarningRegExp(assetsPath))));
- endPubServe();
- });
-
- integration('does not warn if no assets dir or file anywhere in "web"', () {
- d.dir(appPath, [
- d.appPubspec(),
- d.dir('web', [
- d.file('index.html'),
- d.dir('foo')
- ])
- ]).create();
-
- var pub = pubServe();
- waitForBuildSuccess();
- endPubServe();
-
- pub.stderr.expect(never(startsWith('Warning: Pub reserves paths containing '
- '"assets"')));
+ pub.stderr.expect(never(contains("Warning")));
});
}
diff --git a/sdk/lib/_internal/pub/test/serve/web_socket/asset_id_to_urls_root_directory_test.dart b/sdk/lib/_internal/pub/test/serve/web_socket/asset_id_to_urls_root_directory_test.dart
deleted file mode 100644
index 4913344..0000000
--- a/sdk/lib/_internal/pub/test/serve/web_socket/asset_id_to_urls_root_directory_test.dart
+++ /dev/null
@@ -1,55 +0,0 @@
-// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS d.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 pub_tests;
-
-import 'package:path/path.dart' as path;
-import 'package:scheduled_test/scheduled_test.dart';
-
-import '../../descriptor.dart' as d;
-import '../../test_pub.dart';
-import '../utils.dart';
-
-main() {
- // TODO(rnystrom): Split into independent tests.
- initConfig();
- integration("assetIdToUrls handles files in the top-level directory", () {
- d.dir(appPath, [
- d.appPubspec(),
- d.file("top.txt", "top"),
- d.dir("web", [
- d.file("index.html", "<body>"),
- d.dir("sub", [
- d.file("bar.html", "bar"),
- ])
- ])
- ]).create();
-
- pubServe(args: [".", "web", path.join("web", "sub")]);
-
- schedule(() {
- expectWebSocketCall({
- "command": "assetIdToUrls",
- "path": "top.txt"
- }, replyEquals: {
- "urls": [
- getServerUrl(".", "top.txt")
- ]
- });
-
- expectWebSocketCall({
- "command": "assetIdToUrls",
- "path": "web/sub/bar.html"
- }, replyEquals: {
- "urls": [
- getServerUrl("web", "sub/bar.html"),
- getServerUrl(".", "web/sub/bar.html"),
- getServerUrl(path.join("web", "sub"), "bar.html")
- ]
- });
- });
-
- endPubServe();
- });
-}
diff --git a/sdk/lib/_internal/pub/test/test_pub.dart b/sdk/lib/_internal/pub/test/test_pub.dart
index ac4bbb8..2ed23a9 100644
--- a/sdk/lib/_internal/pub/test/test_pub.dart
+++ b/sdk/lib/_internal/pub/test/test_pub.dart
@@ -381,8 +381,11 @@
/// Schedules a call to the Pub command-line utility.
///
/// Runs Pub with [args] and validates that its results match [output] (or
-/// [outputJson]), [error], and [exitCode]. If [outputJson] is given, validates
-/// that pub outputs stringified JSON matching that object.
+/// [outputJson]), [error], and [exitCode].
+///
+/// If [outputJson] is given, validates that pub outputs stringified JSON
+/// matching that object, which can be a literal JSON object or any other
+/// [Matcher].
void schedulePub({List args, Pattern output, Pattern error, outputJson,
Future<Uri> tokenEndpoint, int exitCode: exit_codes.SUCCESS}) {
// Cannot pass both output and outputJson.
@@ -812,6 +815,8 @@
}
}
+/// Validates that [actualText] is a string of JSON that matches [expected],
+/// which may be a literal JSON object, or any other [Matcher].
void _validateOutputJson(List<String> failures, String pipe,
expected, String actualText) {
var actual;
@@ -824,8 +829,8 @@
failures.add(actualText);
}
- // Do a deep comparison of the JSON objects.
- expect(actual, equals(expected));
+ // Match against the expectation.
+ expect(actual, expected);
}
/// A function that creates a [Validator] subclass.
diff --git a/sdk/lib/_internal/pub/test/transformer/dart2js/compiles_generated_file_from_dependency_outside_web_test.dart b/sdk/lib/_internal/pub/test/transformer/dart2js/compiles_generated_file_from_dependency_outside_web_test.dart
new file mode 100644
index 0000000..b41e0ca
--- /dev/null
+++ b/sdk/lib/_internal/pub/test/transformer/dart2js/compiles_generated_file_from_dependency_outside_web_test.dart
@@ -0,0 +1,46 @@
+// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS d.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 pub_tests;
+
+import 'package:scheduled_test/scheduled_test.dart';
+
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+import '../../serve/utils.dart';
+
+main() {
+ // This is a regression test for issue 17198.
+ initConfig();
+ integration("compiles a Dart file that imports a generated file to JS "
+ "outside web/", () {
+ d.dir(appPath, [
+ d.pubspec({
+ "name": "myapp",
+ "version": "0.0.1",
+ "transformers": ["myapp/transformer"]
+ }),
+ d.dir("lib", [
+ d.file("transformer.dart", dartTransformer("munge"))
+ ]),
+ d.dir("test", [
+ d.file("main.dart", """
+import "other.dart";
+void main() => print(TOKEN);
+"""),
+d.file("other.dart", """
+library other;
+const TOKEN = "before";
+""")
+ ])
+ ]).create();
+
+ createLockFile('myapp', pkg: ['barback']);
+
+ pubServe(args: ["test"]);
+ requestShouldSucceed("main.dart.js", contains("(before, munge)"),
+ root: "test");
+ endPubServe();
+ });
+}
diff --git a/sdk/lib/_internal/pub/test/transformer/dart2js/does_not_compile_until_its_output_is_requested_test.dart b/sdk/lib/_internal/pub/test/transformer/dart2js/does_not_compile_until_its_output_is_requested_test.dart
index ba124f4..28e9acf 100644
--- a/sdk/lib/_internal/pub/test/transformer/dart2js/does_not_compile_until_its_output_is_requested_test.dart
+++ b/sdk/lib/_internal/pub/test/transformer/dart2js/does_not_compile_until_its_output_is_requested_test.dart
@@ -4,6 +4,8 @@
library pub_tests;
+import 'package:scheduled_test/scheduled_stream.dart';
+
import '../../descriptor.dart' as d;
import '../../test_pub.dart';
import '../../serve/utils.dart';
@@ -30,8 +32,8 @@
requestShould404("syntax-error.dart.js");
server.stdout.expect(emitsLines(
"[Info from Dart2JS]:\n"
- "Compiling myapp|web/syntax-error.dart...\n"
- "Build completed with 1 errors."));
+ "Compiling myapp|web/syntax-error.dart..."));
+ server.stdout.expect(consumeThrough("Build completed with 1 errors."));
endPubServe();
});
}
diff --git a/sdk/lib/_internal/pub/test/transformer/dart2js/includes_source_maps_in_debug_test.dart b/sdk/lib/_internal/pub/test/transformer/dart2js/includes_source_maps_in_debug_test.dart
new file mode 100644
index 0000000..c59a9cc
--- /dev/null
+++ b/sdk/lib/_internal/pub/test/transformer/dart2js/includes_source_maps_in_debug_test.dart
@@ -0,0 +1,36 @@
+// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS d.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 pub_tests;
+
+import 'package:scheduled_test/scheduled_test.dart';
+
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+
+main() {
+ initConfig();
+ integration("includes source map URLs in a debug build", () {
+ d.dir(appPath, [
+ d.appPubspec(),
+ d.dir("web", [
+ d.file("main.dart", "void main() => print('hello');")
+ ])
+ ]).create();
+
+ schedulePub(args: ["build", "--mode", "debug"],
+ output: new RegExp(r'Built 4 files to "build".'),
+ exitCode: 0);
+
+ d.dir(appPath, [
+ d.dir('build', [
+ d.dir('web', [
+ d.matcherFile('main.dart.js',
+ contains("# sourceMappingURL=main.dart.js.map")),
+ d.matcherFile('main.dart.js.map', contains('"file": "main.dart.js"'))
+ ])
+ ])
+ ]).validate();
+ });
+}
diff --git a/sdk/lib/_internal/pub/test/transformer/dart2js/omits_source_map_in_release_test.dart b/sdk/lib/_internal/pub/test/transformer/dart2js/omits_source_map_in_release_test.dart
new file mode 100644
index 0000000..e4548d6
--- /dev/null
+++ b/sdk/lib/_internal/pub/test/transformer/dart2js/omits_source_map_in_release_test.dart
@@ -0,0 +1,32 @@
+// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS d.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 pub_tests;
+
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+
+main() {
+ initConfig();
+ integration("omits source maps from a release build", () {
+ d.dir(appPath, [
+ d.appPubspec(),
+ d.dir("web", [
+ d.file("main.dart", "void main() => print('hello');")
+ ])
+ ]).create();
+
+ schedulePub(args: ["build"],
+ output: new RegExp(r'Built 2 files to "build".'),
+ exitCode: 0);
+
+ d.dir(appPath, [
+ d.dir('build', [
+ d.dir('web', [
+ d.nothing('main.dart.js.map')
+ ])
+ ])
+ ]).validate();
+ });
+}
diff --git a/sdk/lib/_internal/pub/test/transformer/dart2js/supports_configuration_with_build_test.dart b/sdk/lib/_internal/pub/test/transformer/dart2js/supports_configuration_with_build_test.dart
index e407ee4..c85d023 100644
--- a/sdk/lib/_internal/pub/test/transformer/dart2js/supports_configuration_with_build_test.dart
+++ b/sdk/lib/_internal/pub/test/transformer/dart2js/supports_configuration_with_build_test.dart
@@ -69,7 +69,7 @@
pubGet();
schedulePub(args: ["build"],
- output: new RegExp(r"Built 5 files!"),
+ output: new RegExp(r'Built 4 files to "build".'),
exitCode: 0);
d.dir(appPath, [
@@ -77,7 +77,6 @@
d.dir('web', [
d.matcherFile('file.dart.js', isMinifiedDart2JSOutput),
d.matcherFile('file.dart.precompiled.js', isNot(isEmpty)),
- d.matcherFile('file.dart.js.map', isNot(isEmpty)),
d.dir('packages', [
d.dir('browser', [
d.file('dart.js', 'contents of dart.js'),
diff --git a/sdk/lib/_internal/pub/test/transformer/fails_to_load_a_transform_with_a_syntax_error_test.dart b/sdk/lib/_internal/pub/test/transformer/fails_to_load_a_transform_with_a_syntax_error_test.dart
index 4a617ef..6d3e8a8 100644
--- a/sdk/lib/_internal/pub/test/transformer/fails_to_load_a_transform_with_a_syntax_error_test.dart
+++ b/sdk/lib/_internal/pub/test/transformer/fails_to_load_a_transform_with_a_syntax_error_test.dart
@@ -30,7 +30,8 @@
createLockFile('myapp', pkg: ['barback']);
var pub = startPubServe();
- pub.stderr.expect(startsWith('Error on line'));
+ pub.stderr.expect('[RewriteImport]:');
+ pub.stderr.expect(startsWith('Error in'));
pub.shouldExit(1);
pub.stderr.expect(never(contains('This is an unexpected error')));
});
diff --git a/sdk/lib/_internal/pub/test/transformer/mode_defaults_to_release_in_build_test.dart b/sdk/lib/_internal/pub/test/transformer/mode_defaults_to_release_in_build_test.dart
index b077d71..6fbc0b0 100644
--- a/sdk/lib/_internal/pub/test/transformer/mode_defaults_to_release_in_build_test.dart
+++ b/sdk/lib/_internal/pub/test/transformer/mode_defaults_to_release_in_build_test.dart
@@ -47,7 +47,7 @@
createLockFile('myapp', pkg: ['barback']);
schedulePub(args: ["build"],
- output: new RegExp(r"Built 1 file!"));
+ output: new RegExp(r'Built 1 file to "build".'));
d.dir(appPath, [
d.dir('build', [
diff --git a/sdk/lib/async/future.dart b/sdk/lib/async/future.dart
index b7ad177..5e02069 100644
--- a/sdk/lib/async/future.dart
+++ b/sdk/lib/async/future.dart
@@ -7,21 +7,25 @@
/**
* An object representing a delayed computation.
*
- * A [Future] is used to obtain a not yet
- * available value, or error, sometime in the future. Receivers of a
- * [Future] can register callbacks that handle the value or error once it is
- * available. For example:
+ * A [Future] is used to represent a potential value, or error,
+ * that will be available at some time in the future.
+ * Receivers of a [Future] can register callbacks
+ * that handle the value or error once it is available.
+ * For example:
*
* Future<int> future = getFuture();
* future.then((value) => handleValue(value))
* .catchError((error) => handleError(error));
*
- * A [Future] can be completed in two ways: with a value ("the future succeeds")
- * or with an error ("the future fails"). Users can install callbacks for each
- * case. The result of registering a pair of callbacks is a new Future (the
+ * A [Future] can complete in two ways:
+ * with a value ("the future succeeds")
+ * or with an error ("the future fails").
+ * Users can install callbacks for each case.
+ * The result of registering a pair of callbacks is a new Future (the
* "successor") which in turn is completed with the result of invoking the
- * corresponding callback. The successor is completed with an error if the
- * invoked callback throws. For example:
+ * corresponding callback.
+ * The successor is completed with an error if the invoked callback throws.
+ * For example:
*
* Future<int> successor = future.then((int value) {
* // Invoked when the future is completed with a value.
@@ -36,31 +40,33 @@
* }
* });
*
- * If a future does not have a successor but is completed with an error, it
- * forwards the error message to the global error-handler. This special casing
- * makes sure that no error is silently dropped. However, it also means that
- * error handlers should be installed early, so that they are present as soon
- * as a future is completed with an error. The following example demonstrates
- * this potential bug:
+ * If a future does not have a successor when it completes with an error,
+ * it forwards the error message to the global error-handler.
+ * This behavior makes sure that no error is silently dropped.
+ * However, it also means that error handlers should be installed early,
+ * so that they are present as soon as a future is completed with an error.
+ * The following example demonstrates this potential bug:
*
* var future = getFuture();
* new Timer(new Duration(milliseconds: 5), () {
- * // The error-handler is only attached 5ms after the future has been
- * // received. If the future fails in the mean-time it will forward the
- * // error to the global error-handler, even though there is code (just
- * // below) to handle the error.
+ * // The error-handler is not attached until 5 ms after the future has
+ * // been received. If the future fails before that, the error is
+ * // forwarded to the global error-handler, even though there is code
+ * // (just below) to eventually handle the error.
* future.then((value) { useValue(value); },
* onError: (e) { handleError(e); });
* });
*
- * In general we discourage registering the two callbacks at the same time, but
- * prefer to use [then] with one argument (the value handler), and to use
- * [catchError] for handling errors. The missing callbacks (the error-handler
- * for [then], and the value-handler for [catchError]), are automatically
- * configured to "forward" the value/error. Separating value and error-handling
- * into separate registration calls usually leads to code that is easier to
- * reason about. In fact it makes asynchronous code very similar to synchronous
- * code:
+ * When registering callbacks, it's often more readable to register the two
+ * callbacks separately, by first using [then] with one argument
+ * (the value handler) and using a second [catchError] for handling errors.
+ * Each of these will forward the result that they don't handle
+ * to their successors, and together they handle both value and error result.
+ * It also has the additional benefit of the [catchError] handling errors in the
+ * [then] value callback too.
+ * Using sequential handlers instead of parallel ones often leads to code that
+ * is easier to reason about.
+ * It also makes asynchronous code very similar to synchronous code:
*
* // Synchronous code.
* try {
@@ -70,21 +76,23 @@
* return 499;
* }
*
- * Equivalent asynchronous code, based on futures:
+ * Equivalent asynchronous code, based on futures:
*
- * Future<int> future = foo(); // foo now returns a future.
+ * Future<int> future = new Future(foo); // Result of foo() as a future.
* future.then((int value) => bar(value))
* .catchError((e) => 499);
*
* Similar to the synchronous code, the error handler (registered with
- * [catchError]) is handling the errors for exceptions coming from calls to
- * 'foo', as well as 'bar'. This would not be the case if the error-handler was
- * registered at the same time as the value-handler.
+ * [catchError]) is handling any errors thrown by either `foo` or `bar`.
+ * If the error-handler had been registered as the `onError` parameter of
+ * the `then` call, it would not catch errors from the `bar` call.
*
- * Futures can have more than one callback-pairs registered. Each successor is
+ * Futures can have more than one callback-pair registered. Each successor is
* treated independently and is handled as if it was the only successor.
+ *
+ * A future may also fail to ever complete. In that case, no callbacks are
+ * called.
*/
-// TODO(floitsch): document chaining.
abstract class Future<T> {
// The `_nullFuture` is a completed Future with the value `null`.
static final _Future _nullFuture = new Future.value(null);
@@ -100,7 +108,8 @@
* the created future will wait until the returned future completes,
* and will then complete with the same result.
*
- * If a value is returned, it becomes the result of the created future.
+ * If a non-future value is returned, the returned future is completed
+ * with that value.
*/
factory Future(computation()) {
_Future result = new _Future<T>();
@@ -118,14 +127,15 @@
* Creates a future containing the result of calling [computation]
* asynchronously with [scheduleMicrotask].
*
- * If the result of executing [computation] throws, the returned future is
- * completed with the error.
+ * If executing [computation] throws,
+ * the returned future is completed with the thrown error.
*
- * If the returned value is itself a [Future], completion of
+ * If calling [computation] returns a [Future], completion of
* the created future will wait until the returned future completes,
* and will then complete with the same result.
*
- * If a value is returned, it becomes the result of the created future.
+ * If calling [computation] returns a non-future value,
+ * the returned future is completed with that value.
*/
factory Future.microtask(computation()) {
_Future result = new _Future<T>();
@@ -146,9 +156,12 @@
* If calling [computation] throws, the returned future is completed with the
* error.
*
- * If the returned value is itself a [Future], completion of
+ * If calling [computation] returns a [Future], completion of
* the created future will wait until the returned future completes,
* and will then complete with the same result.
+ *
+ * If calling [computation] returns a non-future value,
+ * the returned future is completed with that value.
*/
factory Future.sync(computation()) {
try {
@@ -165,7 +178,7 @@
* If [value] is not a [Future], using this constructor is equivalent
* to [:new Future<T>.sync(() => value):].
*
- * See [Completer] to create a Future and complete it later.
+ * Use [Completer] to create a Future and complete it later.
*/
factory Future.value([value]) {
return new _Future<T>.immediate(value);
@@ -174,7 +187,7 @@
/**
* A future that completes with an error in the next event-loop iteration.
*
- * See [Completer] to create a Future and complete it later.
+ * Use [Completer] to create a Future and complete it later.
*/
factory Future.error(Object error, [StackTrace stackTrace]) {
return new _Future<T>.immediateError(error, stackTrace);
@@ -187,14 +200,15 @@
* the result of calling [computation]. If the duration is 0 or less, it
* completes no sooner than in the next event-loop iteration.
*
- * If [computation] is not given or [:null:] then it will behave as if
- * [computation] was set to [:() => null:]. That is, it will complete with
- * [:null:].
+ * If [computation] is omitted,
+ * it will be treated as if [computation] was set to `() => null`,
+ * and the future will eventually complete with the `null` value.
*
* If calling [computation] throws, the created future will complete with the
* error.
*
- * See [Completer]s, for futures with values that are computed asynchronously.
+ * See also [Completer] for a way to complete a future at a later
+ * time that isn't a known fixed duration.
*/
factory Future.delayed(Duration duration, [T computation()]) {
Completer completer = new Completer.sync();
@@ -316,7 +330,7 @@
* the returned future is completed with the thrown error
* and a stack trace for the error.
* In the case of `onError`,
- * if the exception thrown is the same as the argument to `onError`,
+ * if the exception thrown is `identical` to the error argument to `onError`,
* the throw is considered a rethrow,
* and the original stack trace is used instead.
*
@@ -324,7 +338,8 @@
* the future returned by `then` will be completed with
* the same result of the future returned by the callback.
*
- * If [onError] is not given it forwards the error to `f`.
+ * If [onError] is not given, and this future completes with an error,
+ * the error is forwarded directly to the returned future.
*
* In most cases, it is more readable to use [catchError] separately, possibly
* with a `test` parameter, instead of handling both value and error in a
diff --git a/sdk/lib/convert/json.dart b/sdk/lib/convert/json.dart
index 8a9c936..db5659c 100644
--- a/sdk/lib/convert/json.dart
+++ b/sdk/lib/convert/json.dart
@@ -82,10 +82,15 @@
* If [reviver] is omitted, it defaults to returning the value argument.
*
* The [toEncodable] function is used during encoding. It is invoked for
- * values that are not directly encodable to a JSON
+ * values that are not directly encodable to a JSON1toE
* string (a value that is not a number, boolean, string, null, list or a map
* with string keys). The function must return an object that is directly
- * encodable.
+ * encodable. The elements of a returned list and values of a returned map
+ * do not need be directly encodable, and if they aren't, `toEncodable` will
+ * be used on them as well.
+ * Please notice that it is possible to cause an infinite recursive
+ * regress in this way, by effectively creating an infinite data structure
+ * through repeated call to `toEncodable`.
*
* If [toEncodable] is omitted, it defaults to a function that returns the
* result of calling `.toJson()` on the unencodable object.
diff --git a/sdk/lib/core/map.dart b/sdk/lib/core/map.dart
index fc29d64..db6d7bc 100644
--- a/sdk/lib/core/map.dart
+++ b/sdk/lib/core/map.dart
@@ -16,7 +16,7 @@
*
* * The plain [HashMap] is unordered (no order is guaranteed),
* * the [LinkedHashMap] iterates in key insertion order,
- * * and a sorted my like [SplayTreeMap] iterates the keys in sorted order.
+ * * and a sorted map like [SplayTreeMap] iterates the keys in sorted order.
*
* It is generally not allowed to modify the map (add or remove keys) while
* an operation is being performed on the map, for example in functions called
diff --git a/sdk/lib/core/num.dart b/sdk/lib/core/num.dart
index fd8ca9b..825dba0 100644
--- a/sdk/lib/core/num.dart
+++ b/sdk/lib/core/num.dart
@@ -92,11 +92,11 @@
*
* Returns the remainder of the euclidean division. The euclidean division of
* two integers `a` and `b` yields two integers `q` and `r` such that
- * `a == b*q + r` and `0 <= r < a.abs()`.
+ * `a == b * q + r` and `0 <= r < b.abs()`.
*
* The euclidean division is only defined for integers, but can be easily
* extended to work with doubles. In that case `r` may have a non-integer
- * value, but it still verifies `0 <= r < |a|`.
+ * value, but it still verifies `0 <= r < |b|`.
*
* The sign of the returned value `r` is always positive.
*
diff --git a/sdk/lib/core/string.dart b/sdk/lib/core/string.dart
index fce1249..5488a2f 100644
--- a/sdk/lib/core/string.dart
+++ b/sdk/lib/core/string.dart
@@ -290,7 +290,7 @@
String substring(int startIndex, [int endIndex]);
/**
- * Removes leading and trailing whitespace from a string.
+ * Returns the string without any leading and trailing whitespace.
*
* If the string contains leading or trailing whitespace, a new string with no
* leading and no trailing whitespace is returned:
@@ -326,6 +326,20 @@
String trim();
/**
+ * Returns the string without any leading whitespace.
+ *
+ * As [trim], but only removes leading whitespace.
+ */
+ String trimLeft();
+
+ /**
+ * Returns the string without any trailing whitespace.
+ *
+ * As [trim], but only removes trailing whitespace.
+ */
+ String trimRight();
+
+ /**
* Creates a new string by concatenating this string with itself a number
* of times.
*
diff --git a/sdk/lib/html/dart2js/html_dart2js.dart b/sdk/lib/html/dart2js/html_dart2js.dart
index 15967d9..82454e3 100644
--- a/sdk/lib/html/dart2js/html_dart2js.dart
+++ b/sdk/lib/html/dart2js/html_dart2js.dart
@@ -35411,15 +35411,19 @@
}
// TODO(efortuna): Remove this method. dartbug.com/16814
- Events get on => throw new UnimplementedError();
+ Events get on => throw new UnsupportedError(
+ 'You can only attach EventListeners to your own window.');
// TODO(efortuna): Remove this method. dartbug.com/16814
void addEventListener(String type, EventListener listener, [bool useCapture])
- => throw new UnimplementedError();
+ => throw new UnsupportedError(
+ 'You can only attach EventListeners to your own window.');
// TODO(efortuna): Remove this method. dartbug.com/16814
- bool dispatchEvent(Event event) => throw new UnimplementedError();
+ bool dispatchEvent(Event event) => throw new UnsupportedError(
+ 'You can only attach EventListeners to your own window.');
// TODO(efortuna): Remove this method. dartbug.com/16814
void removeEventListener(String type, EventListener listener,
- [bool useCapture]) => throw new UnimplementedError();
+ [bool useCapture]) => throw new UnsupportedError(
+ 'You can only attach EventListeners to your own window.');
}
class _LocationCrossFrame implements LocationBase {
diff --git a/sdk/lib/html/dartium/html_dartium.dart b/sdk/lib/html/dartium/html_dartium.dart
index 3cc7cd5..a698bd9 100644
--- a/sdk/lib/html/dartium/html_dartium.dart
+++ b/sdk/lib/html/dartium/html_dartium.dart
@@ -38770,6 +38770,21 @@
// Implementation support.
String get typeName => "Window";
+
+ // TODO(efortuna): Remove this method. dartbug.com/16814
+ Events get on => throw new UnsupportedError(
+ 'You can only attach EventListeners to your own window.');
+ // TODO(efortuna): Remove this method. dartbug.com/16814
+ void addEventListener(String type, EventListener listener, [bool useCapture])
+ => throw new UnsupportedError(
+ 'You can only attach EventListeners to your own window.');
+ // TODO(efortuna): Remove this method. dartbug.com/16814
+ bool dispatchEvent(Event event) => throw new UnsupportedError(
+ 'You can only attach EventListeners to your own window.');
+ // TODO(efortuna): Remove this method. dartbug.com/16814
+ void removeEventListener(String type, EventListener listener,
+ [bool useCapture]) => throw new UnsupportedError(
+ 'You can only attach EventListeners to your own window.');
}
class _HistoryCrossFrame extends NativeFieldWrapperClass2 implements HistoryBase {
diff --git a/sdk/lib/io/data_transformer.dart b/sdk/lib/io/data_transformer.dart
index 9bb5071..378253f 100644
--- a/sdk/lib/io/data_transformer.dart
+++ b/sdk/lib/io/data_transformer.dart
@@ -201,19 +201,18 @@
/**
* Tunes the compression algorithm. Use the value
- * [ZlibConstant.STRATEGY_DEFAULT] for normal data,
- * [ZlibConstant.STRATEGY_FILTERED] for data produced by a filter
- * (or predictor),
- * [ZlibConstant.STRATEGY_HUFFMAN_ONLY] to force Huffman encoding only (no
- * string match), or [ZlibConstant.STRATEGY_RLE] to limit match distances to
- * one (run-length encoding).
+ * [ZLibOption.STRATEGY_DEFAULT] for normal data,
+ * [ZLibOption.STRATEGY_FILTERED] for data produced by a filter
+ * (or predictor), [ZLibOption.STRATEGY_HUFFMAN_ONLY] to force Huffman
+ * encoding only (no string match), or [ZLibOption.STRATEGY_RLE] to limit
+ * match distances to one (run-length encoding).
*/
final int strategy;
/**
* Base two logarithm of the window size (the size of the history buffer). It
- * should be in the range 8..15. Larger values result in better compression at
- * the expense of memory usage. The default value is 15
+ * should be in the range `8..15`. Larger values result in better compression
+ * at the expense of memory usage. The default value is `15`
*/
final int windowBits;
@@ -304,19 +303,18 @@
/**
* Tunes the compression algorithm. Use the value
- * [ZlibConstant.STRATEGY_DEFAULT] for normal data,
- * [ZlibConstant.STRATEGY_FILTERED] for data produced by a filter
- * (or predictor),
- * [ZlibConstant.STRATEGY_HUFFMAN_ONLY] to force Huffman encoding only (no
- * string match), or [ZlibConstant.STRATEGY_RLE] to limit match distances to
- * one (run-length encoding).
+ * [ZLibOption.STRATEGY_DEFAULT] for normal data,
+ * [ZLibOption.STRATEGY_FILTERED] for data produced by a filter
+ * (or predictor), [ZLibOption.STRATEGY_HUFFMAN_ONLY] to force Huffman
+ * encoding only (no string match), or [ZLibOption.STRATEGY_RLE] to limit
+ * match distances to one (run-length encoding).
*/
final int strategy;
/**
* Base two logarithm of the window size (the size of the history buffer). It
- * should be in the range 8..15. Larger values result in better compression at
- * the expense of memory usage. The default value is 15
+ * should be in the range `8..15`. Larger values result in better compression
+ * at the expense of memory usage. The default value is `15`
*/
final int windowBits;
@@ -386,8 +384,8 @@
class ZLibDecoder extends Converter<List<int>, List<int>> {
/**
* Base two logarithm of the window size (the size of the history buffer). It
- * should be in the range 8..15. Larger values result in better compression at
- * the expense of memory usage. The default value is 15
+ * should be in the range `8..15`. Larger values result in better compression
+ * at the expense of memory usage. The default value is `15`.
*/
final int windowBits;
diff --git a/sdk/lib/io/directory_impl.dart b/sdk/lib/io/directory_impl.dart
index dd789c7..00c0450 100644
--- a/sdk/lib/io/directory_impl.dart
+++ b/sdk/lib/io/directory_impl.dart
@@ -18,7 +18,7 @@
external static _setCurrent(path);
external static _createTemp(String path);
external static String _systemTemp();
- external static int _exists(String path);
+ external static _exists(String path);
external static _create(String path);
external static _deleteNative(String path, bool recursive);
external static _rename(String path, String newPath);
diff --git a/sdk/lib/io/file_impl.dart b/sdk/lib/io/file_impl.dart
index dfa75f6..71e3ffe 100644
--- a/sdk/lib/io/file_impl.dart
+++ b/sdk/lib/io/file_impl.dart
@@ -181,11 +181,6 @@
_openFuture = _file.open(mode: mode);
}
- _FileStreamConsumer.fromStdio(int fd) {
- assert(1 <= fd && fd <= 2);
- _openFuture = new Future.value(_File._openStdioSync(fd));
- }
-
Future<File> addStream(Stream<List<int>> stream) {
Completer<File> completer = new Completer<File>();
_openFuture
diff --git a/sdk/lib/io/stdio.dart b/sdk/lib/io/stdio.dart
index 5b5e62f..9c034f4 100644
--- a/sdk/lib/io/stdio.dart
+++ b/sdk/lib/io/stdio.dart
@@ -202,6 +202,36 @@
}
+class _StdConsumer implements StreamConsumer<List<int>> {
+ final _file;
+
+ _StdConsumer(int fd) : _file = _File._openStdioSync(fd);
+
+ Future addStream(Stream<List<int>> stream) {
+ var completer = new Completer();
+ var sub;
+ sub = stream.listen(
+ (data) {
+ try {
+ _file.writeFromSync(data);
+ } catch (e, s) {
+ sub.cancel();
+ completer.completeError(e, s);
+ }
+ },
+ onError: completer.completeError,
+ onDone: completer.complete,
+ cancelOnError: true);
+ return completer.future;
+ }
+
+ Future close() {
+ _file.closeSync();
+ return new Future.value();
+ }
+}
+
+
class _StdSink implements IOSink {
final IOSink _sink;
diff --git a/sdk/lib/mirrors/mirrors.dart b/sdk/lib/mirrors/mirrors.dart
index 0c29931..1866969 100644
--- a/sdk/lib/mirrors/mirrors.dart
+++ b/sdk/lib/mirrors/mirrors.dart
@@ -482,30 +482,6 @@
* invocation.namedArguments);
*/
delegate(Invocation invocation);
-
- /**
- * Returns a closure for invoking the regular method named [name].
- *
- * If [:type.instanceLookup(name):] returns a regular method m, the result of
- * this method is a closure equivalent to:
- *
- * (r1, ..., rn, {p1: d1, ..., pk: dk}) {
- * return this.invoke(name, [r1, ..., rn], {#p1: p1, ..., #pk: pk});
- * }
- *
- * if m has required parameters r1, ..., rn, and named parameters p1, ..., pk
- * with defaults d1, ..., dk. The result of this method is a
- * closure equivalent to:
- *
- * (r1, ..., rn, [p1 = d1, ..., pk = dk]) {
- * return this.invoke(name, [r1, ..., rn, p1, ..., pk]);
- * }
- *
- * if m has required parameters r1, ..., rn, and optional positional
- * parameters p1, ..., pk with defaults d1, ..., dk. Otherwise, an
- * [ArgumentError] is thrown.
- */
- Function operator [](Symbol name);
}
/**
@@ -587,26 +563,49 @@
bool operator ==(other);
/**
- * If [:declarations[name]:] is a regular method m, the result of this method
- * is a closure equivalent to:
- *
- * (r1, ..., rn, {p1: d1, ..., pk: dk}) {
- * return this.invoke(name, [r1, ..., rn], {#p1: p1, ..., #pk: pk});
- * }
- *
- * if m has required parameters r1, ..., rn, and named parameters p1, ..., pk
- * with defaults d1, ..., dk. The result of this method is a
- * closure equivalent to:
- *
- * (r1, ..., rn, [p1 = d1, ..., pk = dk]) {
- * return this.invoke(name, [r1, ..., rn, p1, ..., pk]);
- * }
- *
- * if m has required parameters r1, ..., rn, and optional positional
- * parameters p1, ..., pk with defaults d1, ..., dk. Otherwise, an
- * [ArgumentError] is thrown.
+ * Returns a list of the imports and exports in this library;
*/
- Function operator [](Symbol name);
+ List<LibraryDependencyMirror> get libraryDependencies;
+}
+
+/// A mirror on an import or export declaration.
+abstract class LibraryDependencyMirror {
+ /// Is `true` if this dependency is an import.
+ bool get isImport;
+
+ /// Is `true` if this dependency is an export.
+ bool get isExport;
+
+ /// Returns the library mirror of the library that imports or exports the
+ /// [targetLibrary].
+ LibraryMirror get sourceLibrary;
+
+ /// Returns the library mirror of the library that is imported or exported.
+ LibraryMirror get targetLibrary;
+
+ /// Returns the prefix if this is a prefixed import and `null` otherwise.
+ Symbol get prefix;
+
+ /// Returns the list of show/hide combinators on the import/export
+ /// declaration.
+ List<CombinatorMirror> get combinators;
+
+ /// Returns the source location for this import/export declaration.
+ SourceLocation get location;
+
+ List<InstanceMirror> get metadata;
+}
+
+/// A mirror on a show/hide combinator declared on a library dependency.
+abstract class CombinatorMirror {
+ /// The list of identifiers on the combinator.
+ List<Symbol> get identifiers;
+
+ /// Is `true` if this is a 'show' combinator.
+ bool get isShow;
+
+ /// Is `true` if this is a 'hide' combinator.
+ bool get isHide;
}
/**
@@ -812,28 +811,6 @@
bool operator == (other);
/**
- * If [:declarations[name]:] is a regular method m, the result of this method
- * is a closure equivalent to:
- *
- * (r1, ..., rn, {p1: d1, ..., pk: dk}) {
- * return this.invoke(name, [r1, ..., rn], {#p1: p1, ..., #pk: pk});
- * }
- *
- * if m has required parameters r1, ..., rn, and named parameters p1, ..., pk
- * with defaults d1, ..., dk. The result of this method is a
- * closure equivalent to:
- *
- * (r1, ..., rn, [p1 = d1, ..., pk = dk]) {
- * return this.invoke(name, [r1, ..., rn, p1, ..., pk]);
- * }
- *
- * if m has required parameters r1, ..., rn, and optional positional
- * parameters p1, ..., pk with defaults d1, ..., dk. Otherwise, an
- * [ArgumentError] is thrown.
- */
- Function operator [](Symbol name);
-
- /**
* Returns whether the class denoted by the receiver is a subclass of the
* class denoted by the argument.
*
diff --git a/tests/co19/co19-runtime.status b/tests/co19/co19-runtime.status
index 10039ae..e98b79b 100644
--- a/tests/co19/co19-runtime.status
+++ b/tests/co19/co19-runtime.status
@@ -61,8 +61,16 @@
LibTest/core/int/operator_left_shift_A01_t02: Fail # co19 issue 129
[ $compiler == none && $runtime == vm && $arch == mips ]
-LibTest/math/log_A01_t01: Fail
LibTest/core/double/toInt_A01_t01: Fail
+# These tests take too much memory (300 MB) for our 1 GB test machine.
+# co19 issue 673. http://code.google.com/p/co19/issues/detail?id=673
+LibTest/core/List/List_class_A01_t01: Skip # co19 issue 673
+LibTest/collection/ListMixin/ListMixin_class_A01_t01: Skip # co19 issue 673
+LibTest/collection/ListBase/ListBase_class_A01_t01: Skip # co19 issue 673
+
+[ $compiler == none && $runtime == vm && $arch == mips && $mode == debug ]
+LibTest/isolate/Isolate/spawnUri_A01_t04: Crash # dartbug.com/17440
+LibTest/isolate/Isolate/spawn_A01_t04: Crash # dartbug.com/17440
[ $compiler == none && $runtime == vm && ($arch == simarm || $arch == simmips) ]
LibTest/core/Uri/Uri_A06_t03: Skip # Timeouts, co19-roll r576: Please triage this failure
diff --git a/tests/compiler/dart2js/analyze_only_test.dart b/tests/compiler/dart2js/analyze_only_test.dart
index cce56d6..a49cd42 100644
--- a/tests/compiler/dart2js/analyze_only_test.dart
+++ b/tests/compiler/dart2js/analyze_only_test.dart
@@ -139,8 +139,8 @@
['--analyze-only', '--analyze-all'],
(String code, List errors, List warnings) {
Expect.isNull(code);
- Expect.isTrue(errors.isEmpty);
- Expect.equals(1, warnings.length);
+ Expect.isTrue(errors.isEmpty, 'Unexpected errors: $errors.');
+ Expect.equals(1, warnings.length, 'Unexpected warning count: $warnings.');
Expect.equals(
"Cannot resolve type 'Foo'.", warnings[0].toString());
});
diff --git a/tests/compiler/dart2js/arithmetic_simplification_test.dart b/tests/compiler/dart2js/arithmetic_simplification_test.dart
new file mode 100644
index 0000000..5350a33
--- /dev/null
+++ b/tests/compiler/dart2js/arithmetic_simplification_test.dart
@@ -0,0 +1,88 @@
+// Copyright (c) 2014, 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 constant folding on numbers.
+
+import "package:expect/expect.dart";
+import 'compiler_helper.dart';
+
+const String INT_PLUS_ZERO = """
+int foo(x) => x;
+void main() {
+ var x = foo(0);
+ return (x & 1) + 0;
+}
+""";
+
+const String ZERO_PLUS_INT = """
+int foo(x) => x;
+void main() {
+ var x = foo(0);
+ return 0 + (x & 1);
+}
+""";
+
+const String NUM_PLUS_ZERO = """
+int foo(x) => x;
+void main() {
+ var x = foo(0);
+ return x + 0;
+}
+""";
+
+const String ZERO_PLUS_NUM = """
+int foo(x) => x;
+void main() {
+ var x = foo(0);
+ return 0 + x;
+}
+""";
+
+
+const String INT_TIMES_ONE = """
+int foo(x) => x;
+void main() {
+ var x = foo(0);
+ return (x & 1) * 1;
+}
+""";
+
+const String ONE_TIMES_INT = """
+int foo(x) => x;
+void main() {
+ var x = foo(0);
+ return 1 * (x & 1);
+}
+""";
+
+const String NUM_TIMES_ONE = """
+int foo(x) => x;
+void main() {
+ var x = foo(0);
+ return x * 1;
+}
+""";
+
+const String ONE_TIMES_NUM = """
+int foo(x) => x;
+void main() {
+ var x = foo(0);
+ return 1 * x;
+}
+""";
+
+main() {
+ var plusZero = new RegExp(r"\+ 0");
+ var zeroPlus = new RegExp(r"0 \+");
+ compileAndDoNotMatch(INT_PLUS_ZERO, 'main', plusZero);
+ compileAndDoNotMatch(ZERO_PLUS_INT, 'main', zeroPlus);
+ compileAndMatch(NUM_PLUS_ZERO, 'main', plusZero);
+ compileAndMatch(ZERO_PLUS_NUM, 'main', zeroPlus);
+
+ var timesOne = new RegExp(r"\* 1");
+ var oneTimes = new RegExp(r"1 \*");
+ compileAndDoNotMatch(INT_TIMES_ONE, 'main', timesOne);
+ compileAndDoNotMatch(ONE_TIMES_INT, 'main', oneTimes);
+ compileAndDoNotMatch(NUM_TIMES_ONE, 'main', timesOne);
+ compileAndDoNotMatch(ONE_TIMES_NUM, 'main', oneTimes);
+}
diff --git a/tests/compiler/dart2js/codegen_helper.dart b/tests/compiler/dart2js/codegen_helper.dart
index 1d1f455..20a8f0a 100644
--- a/tests/compiler/dart2js/codegen_helper.dart
+++ b/tests/compiler/dart2js/codegen_helper.dart
@@ -28,7 +28,7 @@
Expect.isTrue(success);
Map<String, String> result = new Map<String, String>();
for (var element in compiler.backend.generatedCode.keys) {
- if (element.getCompilationUnit().script.uri != uri) continue;
+ if (element.getCompilationUnit().script.readableUri != uri) continue;
var name = element.name;
var code = compiler.backend.assembleCode(element);
result[name] = code;
diff --git a/tests/compiler/dart2js/dart2js.status b/tests/compiler/dart2js/dart2js.status
index 2f94eb2..ac12f23 100644
--- a/tests/compiler/dart2js/dart2js.status
+++ b/tests/compiler/dart2js/dart2js.status
@@ -2,8 +2,6 @@
# 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.
-mirrors_used_test: Fail # Issue 17313
-
identity_test: Fail # Issue 6638
boolified_operator_test: Fail # Issue 8001
@@ -17,6 +15,13 @@
logical_expression_test: Fail # Issue 17027
+mirrors/library_exports_hidden_test: Fail
+mirrors/library_exports_shown_test: Fail
+mirrors/library_imports_hidden_test: Fail
+mirrors/library_imports_prefixed_test: Fail
+mirrors/library_imports_prefixed_show_hide_test: Fail
+mirrors/library_imports_shown_test: Fail
+
[ $mode == debug ]
mirror_final_field_inferrer2_test: Crash, Pass, Slow # dartbug.com/15581
diff --git a/tests/compiler/dart2js/dart_backend_test.dart b/tests/compiler/dart2js/dart_backend_test.dart
index 98595af..9e52599 100644
--- a/tests/compiler/dart2js/dart_backend_test.dart
+++ b/tests/compiler/dart2js/dart_backend_test.dart
@@ -267,11 +267,12 @@
''';
var expectedResult =
'globalfoo(){}var globalVar;'
- 'var globalVarInitialized=6,globalVarInitialized2=7;'
+ 'var globalVarInitialized=6;var globalVarInitialized2=7;'
'class A{A(){}A.fromFoo(){}static staticfoo(){}foo(){}'
'static const field=5;}'
'A_globalfoo(){}'
- 'var A_globalVar;var A_globalVarInitialized=6,A_globalVarInitialized2=7;'
+ 'var A_globalVar;var A_globalVarInitialized=6;'
+ 'var A_globalVarInitialized2=7;'
'class A_A{A_A(){}A_A.A_fromFoo(){}static A_staticfoo(){}foo(){}'
'static const A_field=5;}'
'main(){A_globalVar;A_globalVarInitialized;'
diff --git a/tests/compiler/dart2js/deferred_emit_type_checks_test.dart b/tests/compiler/dart2js/deferred_emit_type_checks_test.dart
index 45955b5..832d323 100644
--- a/tests/compiler/dart2js/deferred_emit_type_checks_test.dart
+++ b/tests/compiler/dart2js/deferred_emit_type_checks_test.dart
@@ -65,18 +65,20 @@
const Map MEMORY_SOURCE_FILES = const {"main.dart": """
import "dart:async";
-@def import 'lib.dart' as lib show f, A;
+@def import 'lib.dart' as lib show f, A, instance;
const def = const DeferredLibrary("deferred");
void main() {
def.load().then((_) {
- print(lib.f(new lib.A<lib.A>()));
+ print(lib.f(lib.instance));
});
}
""", "lib.dart": """
class A<T> {}
+A<A> instance = new A<A>();
+
bool f (Object o) {
return o is A<A>;
}
diff --git a/tests/compiler/dart2js/deferred_not_in_main_test.dart b/tests/compiler/dart2js/deferred_not_in_main_test.dart
index a7002c2..a2d828a 100644
--- a/tests/compiler/dart2js/deferred_not_in_main_test.dart
+++ b/tests/compiler/dart2js/deferred_not_in_main_test.dart
@@ -48,12 +48,12 @@
var outputClassLists = compiler.backend.emitter.outputClassLists;
- Expect.equals(mainOutputUnit, outputUnitForElement(foo2));
+ Expect.notEquals(mainOutputUnit, outputUnitForElement(foo2));
}));
}
// lib1 imports lib2 deferred. But mainlib never uses DeferredLibrary.
-// Therefore we should not split the program.
+// Test that this case works.
const Map MEMORY_SOURCE_FILES = const {
"main.dart":"""
library mainlib;
diff --git a/tests/compiler/dart2js/duplicate_library_test.dart b/tests/compiler/dart2js/duplicate_library_test.dart
new file mode 100644
index 0000000..43a1deb
--- /dev/null
+++ b/tests/compiler/dart2js/duplicate_library_test.dart
@@ -0,0 +1,138 @@
+// Copyright (c) 2014, 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 that duplicate library names result in different messages depending
+// on whether the libraries are based on the same resource.
+
+import 'package:async_helper/async_helper.dart';
+import 'package:expect/expect.dart';
+
+import 'memory_compiler.dart';
+
+void check(String kind,
+ Iterable<DiagnosticMessage> messages,
+ List<String> prefixes) {
+ Expect.equals(messages.length, prefixes.length,
+ "Unexpected $kind count: $messages");
+ int i = 0;
+ messages.forEach((DiagnosticMessage message) {
+ Expect.isTrue(message.message.startsWith(prefixes[i++]));
+ });
+}
+
+void test(Map<String, String> source,
+ {List<String> warnings: const <String>[],
+ List<String> hints: const <String>[]}) {
+ DiagnosticCollector collector = new DiagnosticCollector();
+ var compiler = compilerFor(source,
+ diagnosticHandler: collector,
+ showDiagnostics: true,
+ options: ['--analyze-only', '--analyze-all'],
+ packageRoot: Uri.parse('memory:pkg/'));
+ asyncTest(() => compiler.run(Uri.parse('memory:main.dart')).then((_) {
+ Expect.isTrue(collector.errors.isEmpty);
+ check('warning', collector.warnings, warnings);
+ check('hint', collector.hints, hints);
+ Expect.isTrue(collector.infos.isEmpty);
+ }));
+}
+
+void main() {
+ test({
+ 'main.dart': """
+library main;
+
+import 'package:lib/foo.dart';
+import 'pkg/lib/foo.dart';
+""",
+ 'pkg/lib/foo.dart': """
+library lib.foo;
+"""},
+ warnings: ["The library 'lib.foo' in 'memory:pkg/lib/foo.dart' is loaded"]);
+
+ test({
+ 'main.dart': """
+library main;
+
+import 'package:lib/bar.dart';
+import 'pkg/foo.dart';
+""",
+ 'pkg/foo.dart': """
+library foo;
+
+import 'lib/bar.dart';
+""",
+ 'pkg/lib/bar.dart': """
+library lib.bar;
+"""},
+ warnings: ["The library 'lib.bar' in 'memory:pkg/lib/bar.dart' is loaded"]);
+
+ test({
+ 'main.dart': """
+library main;
+
+import 'foo.dart';
+import 'pkg/lib/baz.dart';
+""",
+ 'foo.dart': """
+library foo;
+
+import 'package:lib/baz.dart';
+""",
+ 'pkg/lib/baz.dart': """
+library lib.baz;
+"""},
+ warnings: ["The library 'lib.baz' in 'memory:pkg/lib/baz.dart' is loaded"]);
+
+ test({
+ 'main.dart': """
+library main;
+
+import 'foo.dart';
+import 'pkg/bar.dart';
+""",
+ 'foo.dart': """
+library foo;
+
+import 'package:lib/boz.dart';
+""",
+ 'pkg/bar.dart': """
+library bar;
+
+import 'lib/boz.dart';
+""",
+ 'pkg/lib/boz.dart': """
+library lib.boz;
+"""},
+ warnings: ["The library 'lib.boz' in 'memory:pkg/lib/boz.dart' is loaded"]);
+
+ test({
+ 'main.dart': """
+library main;
+
+import 'package:lib/qux.dart';
+import 'pkg/lib/qux.dart';
+""",
+ 'pkg/lib/qux.dart': """
+// No library tag.
+"""},
+ hints: ["The resource 'memory:pkg/lib/qux.dart' is loaded"]);
+
+ test({
+ 'main.dart': """
+library main;
+
+import 'foo.dart';
+import 'bar.dart';
+""",
+ 'foo.dart': """
+library lib;
+""",
+ 'bar.dart': """
+library lib;
+"""},
+ warnings: ["Duplicated library name 'lib'.",
+ "Duplicated library name 'lib'."]);
+}
+
diff --git a/tests/compiler/dart2js/memory_compiler.dart b/tests/compiler/dart2js/memory_compiler.dart
index b4091f3..392f51b 100644
--- a/tests/compiler/dart2js/memory_compiler.dart
+++ b/tests/compiler/dart2js/memory_compiler.dart
@@ -10,7 +10,7 @@
show NullSink;
import '../../../sdk/lib/_internal/compiler/compiler.dart'
- show Diagnostic, DiagnosticHandler;
+ show Diagnostic, DiagnosticHandler, CompilerOutputProvider;
import 'dart:async';
@@ -59,6 +59,41 @@
}
}
+class BufferedEventSink implements EventSink<String> {
+ StringBuffer sb = new StringBuffer();
+ String text;
+
+ void add(String event) {
+ sb.write(event);
+ }
+
+ void addError(errorEvent, [StackTrace stackTrace]) {
+ // Do not support this.
+ }
+
+ void close() {
+ text = sb.toString();
+ sb = null;
+ }
+}
+
+class OutputCollector {
+ Map<String, Map<String, BufferedEventSink>> outputMap = {};
+
+ EventSink<String> call(String name, String extension) {
+ Map<String, BufferedEventSink> sinkMap =
+ outputMap.putIfAbsent(extension, () => {});
+ return sinkMap.putIfAbsent(name, () => new BufferedEventSink());
+ }
+
+ String getOutput(String name, String extension) {
+ Map<String, BufferedEventSink> sinkMap = outputMap[extension];
+ if (sinkMap == null) return null;
+ BufferedEventSink sink = sinkMap[name];
+ return sink != null ? sink.text : null;
+ }
+}
+
DiagnosticHandler createDiagnosticHandler(DiagnosticHandler diagnosticHandler,
SourceFileProvider provider,
bool showDiagnostics) {
@@ -84,6 +119,7 @@
Compiler compilerFor(Map<String,String> memorySourceFiles,
{DiagnosticHandler diagnosticHandler,
+ CompilerOutputProvider outputProvider,
List<String> options: const [],
Compiler cachedCompiler,
bool showDiagnostics: true,
@@ -112,10 +148,13 @@
var handler =
createDiagnosticHandler(diagnosticHandler, provider, showDiagnostics);
- EventSink<String> outputProvider(String name, String extension) {
+ EventSink<String> noOutputProvider(String name, String extension) {
if (name != '') throw 'Attempt to output file "$name.$extension"';
return new NullSink('$name.$extension');
}
+ if (outputProvider == null) {
+ outputProvider = noOutputProvider;
+ }
Compiler compiler = new Compiler(readStringFromUri,
outputProvider,
diff --git a/tests/compiler/dart2js/message_kind_test.dart b/tests/compiler/dart2js/message_kind_test.dart
index 7a882d4..b2f1e46 100644
--- a/tests/compiler/dart2js/message_kind_test.dart
+++ b/tests/compiler/dart2js/message_kind_test.dart
@@ -23,9 +23,6 @@
var value = cls.getField(name).reflectee;
if (value is MessageKind) {
kinds[MirrorSystem.getName(name)] = value;
- } else if (value is DualKind) {
- kinds['${MirrorSystem.getName(name)}.error'] = value.error;
- kinds['${MirrorSystem.getName(name)}.warning'] = value.warning;
} else {
Expect.fail("Weird static field: '${MirrorSystem.getName(name)}'.");
}
diff --git a/tests/compiler/dart2js/metadata_test.dart b/tests/compiler/dart2js/metadata_test.dart
index f1bc8da..ab302eb 100644
--- a/tests/compiler/dart2js/metadata_test.dart
+++ b/tests/compiler/dart2js/metadata_test.dart
@@ -30,7 +30,8 @@
compileAndCheck(source1, name, (compiler, element) {
compiler.enqueuer.resolution.queueIsClosed = false;
- Expect.equals(1, length(element.metadata));
+ Expect.equals(1, length(element.metadata),
+ 'Unexpected metadata count on $element.');
PartialMetadataAnnotation annotation = element.metadata.head;
annotation.ensureResolved(compiler);
Constant value = annotation.value;
@@ -136,6 +137,7 @@
void testTopLevelFieldMetadata() {
checkAnnotation('foo', 'var foo;');
+ checkAnnotation('bar', 'var foo, bar;');
}
void testLibraryTags() {
diff --git a/tests/compiler/dart2js/mirrors/library_exports_hidden_test.dart b/tests/compiler/dart2js/mirrors/library_exports_hidden_test.dart
new file mode 100644
index 0000000..f01441e
--- /dev/null
+++ b/tests/compiler/dart2js/mirrors/library_exports_hidden_test.dart
@@ -0,0 +1,17 @@
+// Copyright (c) 2014, 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 "dart:mirrors";
+
+import "package:async_helper/async_helper.dart";
+
+import "mirrors_test_helper.dart";
+import "../../../lib/mirrors/library_exports_hidden_test.dart";
+
+main() {
+ asyncTest(() => analyze("library_exports_hidden_test.dart").
+ then((MirrorSystem mirrors) {
+ test(mirrors);
+ }));
+}
diff --git a/tests/compiler/dart2js/mirrors/library_exports_shown_test.dart b/tests/compiler/dart2js/mirrors/library_exports_shown_test.dart
new file mode 100644
index 0000000..87f3369
--- /dev/null
+++ b/tests/compiler/dart2js/mirrors/library_exports_shown_test.dart
@@ -0,0 +1,17 @@
+// Copyright (c) 2014, 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 "dart:mirrors";
+
+import "package:async_helper/async_helper.dart";
+
+import "mirrors_test_helper.dart";
+import "../../../lib/mirrors/library_exports_shown_test.dart";
+
+main() {
+ asyncTest(() => analyze("library_exports_shown_test.dart").
+ then((MirrorSystem mirrors) {
+ test(mirrors);
+ }));
+}
diff --git a/tests/compiler/dart2js/mirrors/library_imports_hidden_test.dart b/tests/compiler/dart2js/mirrors/library_imports_hidden_test.dart
new file mode 100644
index 0000000..ad4ba20
--- /dev/null
+++ b/tests/compiler/dart2js/mirrors/library_imports_hidden_test.dart
@@ -0,0 +1,17 @@
+// Copyright (c) 2014, 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 "dart:mirrors";
+
+import "package:async_helper/async_helper.dart";
+
+import "mirrors_test_helper.dart";
+import "../../../lib/mirrors/library_imports_hidden_test.dart";
+
+main() {
+ asyncTest(() => analyze("library_imports_hidden_test.dart").
+ then((MirrorSystem mirrors) {
+ test(mirrors);
+ }));
+}
diff --git a/tests/compiler/dart2js/mirrors/library_imports_prefixed_show_hide_test.dart b/tests/compiler/dart2js/mirrors/library_imports_prefixed_show_hide_test.dart
new file mode 100644
index 0000000..910dde5
--- /dev/null
+++ b/tests/compiler/dart2js/mirrors/library_imports_prefixed_show_hide_test.dart
@@ -0,0 +1,17 @@
+// Copyright (c) 2014, 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 "dart:mirrors";
+
+import "package:async_helper/async_helper.dart";
+
+import "mirrors_test_helper.dart";
+import "../../../lib/mirrors/library_imports_prefixed_show_hide_test.dart";
+
+main() {
+ asyncTest(() => analyze("library_imports_prefixed_show_hide_test.dart").
+ then((MirrorSystem mirrors) {
+ test(mirrors);
+ }));
+}
diff --git a/tests/compiler/dart2js/mirrors/library_imports_prefixed_test.dart b/tests/compiler/dart2js/mirrors/library_imports_prefixed_test.dart
new file mode 100644
index 0000000..5695e98
--- /dev/null
+++ b/tests/compiler/dart2js/mirrors/library_imports_prefixed_test.dart
@@ -0,0 +1,17 @@
+// Copyright (c) 2014, 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 "dart:mirrors";
+
+import "package:async_helper/async_helper.dart";
+
+import "mirrors_test_helper.dart";
+import "../../../lib/mirrors/library_imports_prefixed_test.dart";
+
+main() {
+ asyncTest(() => analyze("library_imports_prefixed_test.dart").
+ then((MirrorSystem mirrors) {
+ test(mirrors);
+ }));
+}
diff --git a/tests/compiler/dart2js/mirrors/library_imports_shown_test.dart b/tests/compiler/dart2js/mirrors/library_imports_shown_test.dart
new file mode 100644
index 0000000..3f84ce7
--- /dev/null
+++ b/tests/compiler/dart2js/mirrors/library_imports_shown_test.dart
@@ -0,0 +1,17 @@
+// Copyright (c) 2014, 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 "dart:mirrors";
+
+import "package:async_helper/async_helper.dart";
+
+import "mirrors_test_helper.dart";
+import "../../../lib/mirrors/library_imports_shown_test.dart";
+
+main() {
+ asyncTest(() => analyze("library_imports_shown_test.dart").
+ then((MirrorSystem mirrors) {
+ test(mirrors);
+ }));
+}
diff --git a/tests/compiler/dart2js/mirrors_used_test.dart b/tests/compiler/dart2js/mirrors_used_test.dart
index dec6f63..846c7f9 100644
--- a/tests/compiler/dart2js/mirrors_used_test.dart
+++ b/tests/compiler/dart2js/mirrors_used_test.dart
@@ -58,7 +58,7 @@
// 2. Some code was refactored, and there are more methods.
// Either situation could be problematic, but in situation 2, it is often
// acceptable to increase [expectedMethodCount] a little.
- int expectedMethodCount = 375;
+ int expectedMethodCount = 376;
Expect.isTrue(
generatedCode.length <= expectedMethodCount,
'Too many compiled methods: '
diff --git a/tests/compiler/dart2js/mock_compiler.dart b/tests/compiler/dart2js/mock_compiler.dart
index 472c1f9..eef31b3 100644
--- a/tests/compiler/dart2js/mock_compiler.dart
+++ b/tests/compiler/dart2js/mock_compiler.dart
@@ -336,7 +336,7 @@
*/
LibraryElement createLibrary(String name, String source) {
Uri uri = new Uri(scheme: "dart", path: name);
- var script = new Script(uri, new MockFile(source));
+ var script = new Script(uri, uri, new MockFile(source));
var library = new LibraryElementX(script);
library.libraryTag = new LibraryName(null, null, null);
parseScript(source, library);
@@ -447,7 +447,7 @@
Future<Script> readScript(Uri uri, [Element element, Node node]) {
SourceFile sourceFile = sourceFiles[uri.toString()];
if (sourceFile == null) throw new ArgumentError(uri);
- return new Future.value(new Script(uri, sourceFile));
+ return new Future.value(new Script(uri, uri, sourceFile));
}
Element lookupElementIn(ScopeContainerElement container, name) {
@@ -536,7 +536,7 @@
LibraryElement mockLibrary(Compiler compiler, String source) {
Uri uri = new Uri(scheme: "source");
- var library = new LibraryElementX(new Script(uri, new MockFile(source)));
+ var library = new LibraryElementX(new Script(uri, uri, new MockFile(source)));
importLibrary(library, compiler.coreLibrary, compiler);
library.setExports(<Element>[]);
return library;
diff --git a/tests/compiler/dart2js/parser_helper.dart b/tests/compiler/dart2js/parser_helper.dart
index acf46ea..926b5ee 100644
--- a/tests/compiler/dart2js/parser_helper.dart
+++ b/tests/compiler/dart2js/parser_helper.dart
@@ -69,10 +69,8 @@
{DiagnosticListener diagnosticHandler}) {
Token tokens = scan(text);
if (diagnosticHandler == null) diagnosticHandler = new LoggerCanceler();
- Script script =
- new Script(
- new Uri(scheme: "source"),
- new MockFile(text));
+ Uri uri = new Uri(scheme: "source");
+ Script script = new Script(uri, uri,new MockFile(text));
LibraryElement library = new LibraryElementX(script);
library.canUseNative = true;
NodeListener listener =
@@ -116,7 +114,7 @@
if (registerSource != null) {
registerSource(uri, text);
}
- var script = new Script(uri, new MockFile(text));
+ var script = new Script(uri, uri, new MockFile(text));
var unit = new CompilationUnitElementX(script, library);
int id = 0;
ElementListener listener = new ElementListener(compiler, unit, () => id++);
diff --git a/tests/compiler/dart2js/resolver_test.dart b/tests/compiler/dart2js/resolver_test.dart
index 5d448c8d9..d75a605 100644
--- a/tests/compiler/dart2js/resolver_test.dart
+++ b/tests/compiler/dart2js/resolver_test.dart
@@ -615,7 +615,7 @@
compiler.parseScript("int a;");
VariableElement element = compiler.mainApp.find("a");
Expect.equals(ElementKind.FIELD, element.kind);
- VariableDefinitions node = element.variables.parseNode(compiler);
+ VariableDefinitions node = element.variables.parseNode(element, compiler);
Identifier typeName = node.type.typeName;
Expect.equals(typeName.source, 'int');
@@ -626,8 +626,8 @@
Expect.equals(ElementKind.FIELD, cElement.kind);
Expect.isTrue(bElement != cElement);
- VariableDefinitions bNode = bElement.variables.parseNode(compiler);
- VariableDefinitions cNode = cElement.variables.parseNode(compiler);
+ VariableDefinitions bNode = bElement.variables.parseNode(bElement, compiler);
+ VariableDefinitions cNode = cElement.variables.parseNode(cElement, compiler);
Expect.equals(bNode, cNode);
Expect.isNull(bNode.type);
Expect.isTrue(bNode.modifiers.isVar());
diff --git a/tests/compiler/dart2js/source_map_test.dart b/tests/compiler/dart2js/source_map_test.dart
new file mode 100644
index 0000000..ee133f5
--- /dev/null
+++ b/tests/compiler/dart2js/source_map_test.dart
@@ -0,0 +1,75 @@
+// Copyright (c) 2014, 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 that options '--source-map' and '--out' correctly adds
+// `sourceMappingURL` and "file" attributes to source file and source map file.
+
+library test.source_map;
+
+import 'package:async_helper/async_helper.dart';
+import 'package:expect/expect.dart';
+import 'memory_compiler.dart';
+
+const SOURCE = const {
+ '/main.dart': """
+main() {}
+""",
+};
+
+void find(String text, String substring, bool expected) {
+ bool found = text.contains(substring);
+
+ if (expected && !found) {
+ Expect.isTrue(found, 'Expected "$substring" in:\n$text');
+ }
+ if (!expected && found) {
+ Expect.isFalse(found,
+ 'Unexpected "$substring" in:\n'
+ '${text.substring(text.indexOf(substring))}');
+ }
+}
+
+void test({String out, String sourceMap, String mapping, String file}) {
+ OutputCollector collector = new OutputCollector();
+ List<String> options = <String>[];
+ if (out != null) {
+ options.add("--out=$out");
+ }
+ if (sourceMap != null) {
+ options.add("--source-map=$sourceMap");
+ }
+ var compiler = compilerFor(SOURCE,
+ showDiagnostics: true,
+ outputProvider: collector,
+ options: options);
+ asyncTest(() => compiler.runCompiler(Uri.parse('memory:/main.dart')).then(
+ (_) {
+ String jsOutput = collector.getOutput('', 'js');
+ Expect.isNotNull(jsOutput);
+ if (mapping != null) {
+ find(jsOutput, '//# sourceMappingURL=$mapping', true);
+ find(jsOutput, '//@ sourceMappingURL=$mapping', true);
+ } else {
+ find(jsOutput, '//# sourceMappingURL=', false);
+ find(jsOutput, '//@ sourceMappingURL=', false);
+ }
+ String jsSourceMapOutput = collector.getOutput('', 'js.map');
+ Expect.isNotNull(jsSourceMapOutput);
+ if (file != null) {
+ find(jsSourceMapOutput, '"file": "$file"', true);
+ } else {
+ find(jsSourceMapOutput, '"file": ', false);
+ }
+ }));
+}
+
+void main() {
+ test();
+ test(sourceMap: 'file:/out.js.map');
+ test(out: 'file:/out.js');
+ test(out: 'file:/out.js', sourceMap: 'file:/out.js.map',
+ file: 'out.js', mapping: 'out.js.map');
+ test(out: 'file:/dir/out.js', sourceMap: 'file:/dir/out.js.map',
+ file: 'out.js', mapping: 'out.js.map');
+}
\ No newline at end of file
diff --git a/tests/compiler/dart2js/strength_eq_test.dart b/tests/compiler/dart2js/strength_eq_test.dart
new file mode 100644
index 0000000..bddafaa
--- /dev/null
+++ b/tests/compiler/dart2js/strength_eq_test.dart
@@ -0,0 +1,31 @@
+// Copyright (c) 2014, 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 constant folding on numbers.
+
+import "package:expect/expect.dart";
+import 'compiler_helper.dart';
+
+const String CODE = """
+class A {
+ var link;
+}
+int foo(x) {
+ if (new DateTime.now().millisecondsSinceEpoch == 42) return null;
+ var a = new A();
+ if (new DateTime.now().millisecondsSinceEpoch == 42) return a;
+ a.link = a;
+ return a;
+}
+void main() {
+ var x = foo(0);
+ return x == x.link;
+}
+""";
+
+main() {
+ // The `==` is strengthened to a HIdentity instruction. The HIdentity follows
+ // `x.link`, so x cannot be `null`.
+ var compare = new RegExp(r'x === x\.get\$link\(\)');
+ compileAndMatch(CODE, 'main', compare);
+}
diff --git a/tests/compiler/dart2js/type_checker_test.dart b/tests/compiler/dart2js/type_checker_test.dart
index 59cd008..fb14e82 100644
--- a/tests/compiler/dart2js/type_checker_test.dart
+++ b/tests/compiler/dart2js/type_checker_test.dart
@@ -1891,7 +1891,7 @@
parser.parseStatement(tokens);
Node node = listener.popNode();
Element compilationUnit =
- new CompilationUnitElementX(new Script(null, null), compiler.mainApp);
+ new CompilationUnitElementX(new Script(null, null, null), compiler.mainApp);
Element function = new FunctionElementX(
'', ElementKind.FUNCTION, Modifiers.EMPTY, compilationUnit, false);
TreeElements elements = compiler.resolveNodeStatement(node, function);
diff --git a/tests/compiler/dart2js/unparser2_test.dart b/tests/compiler/dart2js/unparser2_test.dart
index cd0d458..5129619 100644
--- a/tests/compiler/dart2js/unparser2_test.dart
+++ b/tests/compiler/dart2js/unparser2_test.dart
@@ -57,7 +57,7 @@
String doUnparse(String source) {
MessageCollector diagnosticListener = new MessageCollector();
- Script script = new Script(null, null);
+ Script script = new Script(null, null, null);
LibraryElement lib = new LibraryElementX(script);
CompilationUnitElement element = new CompilationUnitElementX(script, lib);
StringScanner scanner = new StringScanner.fromString(source);
diff --git a/tests/compiler/dart2js/uri_extras_test.dart b/tests/compiler/dart2js/uri_extras_test.dart
index 7045384..477b84c 100644
--- a/tests/compiler/dart2js/uri_extras_test.dart
+++ b/tests/compiler/dart2js/uri_extras_test.dart
@@ -14,38 +14,41 @@
c(expected, base, path, false);
return;
}
- String r;
- r = relativize(Uri.parse('file:$base'),
- Uri.parse('file:$path'),
- isWindows);
- Expect.stringEquals(expected, r);
+ test(Uri base, Uri uri) {
+ String r = relativize(base, uri, isWindows);
+ Uri resolved = base.resolve(r);
+ Expect.equals(uri.scheme.toLowerCase(), resolved.scheme.toLowerCase());
+ if (isWindows) {
+ Expect.equals(uri.path.toLowerCase(), resolved.path.toLowerCase());
+ } else {
+ Expect.equals(uri.path, resolved.path);
+ }
+ Expect.stringEquals(expected, r);
+ }
- r = relativize(Uri.parse('FILE:$base'),
- Uri.parse('FILE:$path'),
- isWindows);
- Expect.stringEquals(expected, r);
+ test(Uri.parse('file:$base'),
+ Uri.parse('file:$path'));
- r = relativize(Uri.parse('file:$base'),
- Uri.parse('FILE:$path'),
- isWindows);
- Expect.stringEquals(expected, r);
+ test(Uri.parse('FILE:$base'),
+ Uri.parse('FILE:$path'));
- r = relativize(Uri.parse('FILE:$base'),
- Uri.parse('file:$path'),
- isWindows);
- Expect.stringEquals(expected, r);
+ test(Uri.parse('file:$base'),
+ Uri.parse('FILE:$path'));
+
+ test(Uri.parse('FILE:$base'),
+ Uri.parse('file:$path'));
}
c('bar', '/', '/bar', null);
- c('/bar', '/foo', '/bar', null);
+ c('bar', '/foo', '/bar', null);
c('/bar', '/foo/', '/bar', null);
c('bar', '///c:/', '///c:/bar', true);
- c('/c:/bar', '///c:/foo', '///c:/bar', true);
+ c('bar', '///c:/foo', '///c:/bar', true);
c('/c:/bar', '///c:/foo/', '///c:/bar', true);
c('BAR', '///c:/', '///c:/BAR', true);
- c('/c:/BAR', '///c:/foo', '///c:/BAR', true);
+ c('BAR', '///c:/foo', '///c:/BAR', true);
c('/c:/BAR', '///c:/foo/', '///c:/BAR', true);
c('../sdk/lib/_internal/compiler/implementation/dart2js.dart',
@@ -63,6 +66,29 @@
c('/Users/person/file.dart', '/Users/other/', '/Users/person/file.dart',
true);
+
+ c('out.js.map', '/Users/person/out.js', '/Users/person/out.js.map', null);
+
+ c('../person/out.js.map',
+ '/Users/other/out.js',
+ '/Users/person/out.js.map', false);
+
+ c('/Users/person/out.js.map',
+ '/Users/other/out.js',
+ '/Users/person/out.js.map', true);
+
+ c('out.js', '/Users/person/out.js.map', '/Users/person/out.js', null);
+
+ c('../person/out.js',
+ '/Users/other/out.js.map',
+ '/Users/person/out.js', false);
+
+ c('/Users/person/out.js',
+ '/Users/other/out.js.map',
+ '/Users/person/out.js', true);
+
+ c('out.js', '/out.js.map', '/out.js', null);
+
}
void main() {
diff --git a/tests/corelib/corelib.status b/tests/corelib/corelib.status
index 42709dc..3c56c5c 100644
--- a/tests/corelib/corelib.status
+++ b/tests/corelib/corelib.status
@@ -86,6 +86,7 @@
[ $compiler == dart2js ]
error_stack_trace1_test: RuntimeError # Issue 12399
hash_set_test/01: RuntimeError # Issue 11551
+integer_to_string_test/01: RuntimeError # Issue 1533
big_integer_vm_test: RuntimeError, OK # VM specific test.
bit_twiddling_bigint_test: RuntimeError # Requires bigint support.
@@ -110,6 +111,9 @@
[ $compiler == dart2js && ($runtime == firefox || $runtime == safari || $runtime == chrome || $runtime == drt) ]
+[ $compiler == dart2js && ($runtime == d8 || $runtime == chrome || $runtime == drt || $runtime == safari) ]
+string_trimlr_test/none: Fail # Bug in v8. Fixed in v8 r19222, 2014-02-10.
+
[ $compiler == dart2dart ]
compare_to2_test: Fail # inherited from VM
unicode_test: Fail # inherited from VM
diff --git a/tests/corelib/integer_to_string_test.dart b/tests/corelib/integer_to_string_test.dart
new file mode 100644
index 0000000..8b7061a
--- /dev/null
+++ b/tests/corelib/integer_to_string_test.dart
@@ -0,0 +1,88 @@
+// 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";
+
+main() {
+ /// Test that converting [value] to a string gives [expect].
+ /// Also test that `-value` gives `"-"+expect`.
+ test(int value, String expect) {
+ Expect.equals(expect, value.toString());
+ Expect.equals(expect, "$value");
+ Expect.equals(expect, (new StringBuffer()..write(value)).toString());
+ if (value == 0) return;
+ expect = "-$expect";
+ value = -value;
+ Expect.equals(expect, value.toString());
+ Expect.equals(expect, "$value");
+ Expect.equals(expect, (new StringBuffer()..write(value)).toString());
+ }
+
+ // Null.
+ test(0, "0");
+ test(1, "1");
+ test(2, "2");
+ test(5, "5");
+
+ // Binary special cases.
+
+ // ~2^30.
+ test(0x3fffffff, "1073741823");
+ test(0x40000000, "1073741824");
+ test(0x40000001, "1073741825");
+ // ~2^31.
+ test(0x7fffffff, "2147483647");
+ test(0x80000000, "2147483648");
+ test(0x80000001, "2147483649");
+ // ~2^32.
+ test(0xffffffff, "4294967295");
+ test(0x100000000, "4294967296");
+ test(0x100000001, "4294967297");
+
+ // ~2^51.
+ test(0x7ffffffffffff, "2251799813685247");
+ test(0x8000000000000, "2251799813685248");
+ test(0x8000000000001, "2251799813685249");
+ // ~2^52.
+ test(0xfffffffffffff, "4503599627370495");
+ test(0x10000000000000, "4503599627370496");
+ test(0x10000000000001, "4503599627370497");
+ // ~2^53.
+ test(0x1fffffffffffff, "9007199254740991");
+ test(0x20000000000000, "9007199254740992");
+ test(0x20000000000001, "9007199254740993"); /// 01: ok
+ // ~2^62.
+ test(0x3fffffffffffffff, "4611686018427387903"); /// 01: continued
+ test(0x4000000000000000, "4611686018427387904"); /// 01: continued
+ test(0x4000000000000001, "4611686018427387905"); /// 01: continued
+ // ~2^63.
+ test(0x7fffffffffffffff, "9223372036854775807"); /// 01: continued
+ test(0x8000000000000000, "9223372036854775808"); /// 01: continued
+ test(0x8000000000000001, "9223372036854775809"); /// 01: continued
+ // ~2^64.
+ test(0xffffffffffffffff, "18446744073709551615"); /// 01: continued
+ test(0x10000000000000000, "18446744073709551616"); /// 01: continued
+ test(0x10000000000000001, "18446744073709551617"); /// 01: continued
+ // Big bignum.
+ test(123456789012345678901234567890, /// 01: continued
+ "123456789012345678901234567890"); /// 01: continued
+
+ // Decimal special cases.
+
+ int number = 10;
+ // Numbers 99..99, 100...00, and 100..01 up to 23 digits.
+ for (int i = 1; i < 15; i++) { // Works in dart2js up to 10^15.
+ test(number - 1, "9" * i);
+ test(number, "1" + "0" * i);
+ test(number + 1, "1" + "0" * (i - 1) + "1");
+ number *= 10;
+ }
+ // Fails to represent exactly in dart2js.
+ for (int i = 15; i < 22; i++) { /// 01: continued
+ test(number - 1, "9" * i); /// 01: continued
+ test(number, "1" + "0" * i); /// 01: continued
+ test(number + 1, "1" + "0" * (i - 1) + "1"); /// 01: continued
+ number *= 10; /// 01: continued
+ } /// 01: continued
+}
diff --git a/tests/corelib/string_trim2_test.dart b/tests/corelib/string_trim2_test.dart
index fc894a2..11379dd 100644
--- a/tests/corelib/string_trim2_test.dart
+++ b/tests/corelib/string_trim2_test.dart
@@ -36,14 +36,14 @@
main() {
for (var ws in WHITESPACE) {
- Expect.equals("", new String.fromCharCode(ws).trim());
- }
- Expect.equals("", new String.fromCharCodes(WHITESPACE).trim());
- for (var ws in WHITESPACE) {
+ var name = ws.toRadixString(16);
var c = new String.fromCharCode(ws);
- Expect.equals("a", ("a" + c).trim());
- Expect.equals("a", (c + "a").trim());
- Expect.equals("a", (c + c + "a" + c + c).trim());
- Expect.equals("a" + c + "a", (c + c + "a" + c + "a" + c + c).trim());
+ Expect.equals("", c.trim(), "$name");
+ Expect.equals("a", ("a" + c).trim(), "a-$name");
+ Expect.equals("a", (c + "a").trim(), "$name-a");
+ Expect.equals("a", (c + c + "a" + c + c).trim(), "$name around");
+ Expect.equals("a" + c + "a", (c + c + "a" + c + "a" + c + c).trim(),
+ "$name many");
}
+ Expect.equals("", new String.fromCharCodes(WHITESPACE).trim(), "ALL");
}
diff --git a/tests/corelib/string_trimlr_test.dart b/tests/corelib/string_trimlr_test.dart
new file mode 100644
index 0000000..cf47ffc
--- /dev/null
+++ b/tests/corelib/string_trimlr_test.dart
@@ -0,0 +1,103 @@
+// 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";
+
+// Characters with Whitespace property (Unicode 6.2).
+// 0009..000D ; White_Space # Cc <control-0009>..<control-000D>
+// 0020 ; White_Space # Zs SPACE
+// 0085 ; White_Space # Cc <control-0085>
+// 00A0 ; White_Space # Zs NO-BREAK SPACE
+// 1680 ; White_Space # Zs OGHAM SPACE MARK
+// 180E ; White_Space # Zs MONGOLIAN VOWEL SEPARATOR
+// 2000..200A ; White_Space # Zs EN QUAD..HAIR SPACE
+// 2028 ; White_Space # Zl LINE SEPARATOR
+// 2029 ; White_Space # Zp PARAGRAPH SEPARATOR
+// 202F ; White_Space # Zs NARROW NO-BREAK SPACE
+// 205F ; White_Space # Zs MEDIUM MATHEMATICAL SPACE
+// 3000 ; White_Space # Zs IDEOGRAPHIC SPACE
+// And BOM:
+// FEFF ; Byte order mark.
+const WHITESPACE = const [
+ 0x09,
+ 0x0A,
+ 0x0B,
+ 0x0C,
+ 0x0D,
+ 0x20,
+ 0x85,
+ 0xA0,
+ 0x1680,
+ 0x180E,
+ 0x2000,
+ 0x2001,
+ 0x2002,
+ 0x2003,
+ 0x2004,
+ 0x2005,
+ 0x2006,
+ 0x2007,
+ 0x2008,
+ 0x2009,
+ 0x200A,
+ 0x2028,
+ 0x2029,
+ 0x202F,
+ 0x205F,
+ 0x3000,
+ 0xFEFF,
+];
+
+main() {
+ // Test the whitespace in different positions.
+ test(ws) {
+ // trimLeft
+ Expect.equals("", ws.trimLeft(), "K1");
+ Expect.equals("", (ws + ws).trimLeft(), "L2");
+ Expect.equals("a" + ws, ("a" + ws).trimLeft(), "L3");
+ Expect.equals("a", (ws + "a").trimLeft(), "L4");
+ Expect.equals("a" + ws + ws, (ws + ws + "a" + ws + ws).trimLeft(), "L5");
+ Expect.equals("a" + ws + "a", (ws + ws + "a" + ws + "a").trimLeft(), "L6");
+ var untrimmable = "a" + ws + "a";
+ Expect.identical(untrimmable, untrimmable.trimLeft(), "L7");
+ // trimRight
+ Expect.equals("", ws.trimRight(), "R1");
+ Expect.equals("", (ws + ws).trimRight(), "R2");
+ Expect.equals("a", ("a" + ws).trimRight(), "R3");
+ Expect.equals(ws + "a", (ws + "a").trimRight(), "R4");
+ Expect.equals(ws + ws + "a", (ws + ws + "a" + ws + ws).trimRight(), "R5");
+ Expect.equals("a" + ws + "a", ("a" + ws + "a" + ws + ws).trimRight(), "R6");
+ Expect.identical(untrimmable, untrimmable.trimRight(), "R7");
+ }
+
+ // Test each whitespace at different locations.
+ for (var ws in WHITESPACE) {
+ var c = new String.fromCharCode(ws);
+ test(c);
+ }
+ // Test all whitespaces at once at different locations.
+ test(new String.fromCharCodes(WHITESPACE));
+
+ // Empty strings.
+ Expect.identical("", "".trimLeft());
+ Expect.identical("", "".trimRight());
+
+ // Test all BMP chars and one surrogate pair.
+ for (int i = 0, j = 0; i <= 0x10000; i++) {
+ if (j < WHITESPACE.length && i == WHITESPACE[j]) {
+ j++;
+ continue;
+ }
+ // U+200b is currently being treated as whitespace by some JS engines.
+ // Should be fixed in tip-of-tree V8 per 2014-02-10.
+ // This line makes string_trimlr_test/none fail but /01 succeede where
+ // this bug is in the JS. Both succeede on the VM and where the bug is
+ // not. Remove this line and comment if all JS engines fix it.
+ if (i == 0x200b) continue; /// 01: ok
+
+ var s = new String.fromCharCode(i);
+ Expect.identical(s, s.trimLeft());
+ Expect.identical(s, s.trimRight());
+ }
+}
diff --git a/tests/html/dromaeo_smoke_test.dart b/tests/html/dromaeo_smoke_test.dart
index fd92124..1334954 100644
--- a/tests/html/dromaeo_smoke_test.dart
+++ b/tests/html/dromaeo_smoke_test.dart
@@ -5,7 +5,7 @@
library dromaeo;
import '../../pkg/unittest/lib/unittest.dart';
import '../../pkg/unittest/lib/html_config.dart';
-import '../../samples/third_party/dromaeo/Dromaeo.dart' as originalTest;
+import '../../samples/third_party/dromaeo/web/Dromaeo.dart' as originalTest;
import 'dart:html';
import 'dart:async';
diff --git a/tests/isolate/isolate.status b/tests/isolate/isolate.status
index e39b4e4..60c52fe 100644
--- a/tests/isolate/isolate.status
+++ b/tests/isolate/isolate.status
@@ -6,6 +6,9 @@
browser/*: SkipByDesign # Browser specific tests
isolate_stress_test: Fail # Issue 12588: This should be able to pass when we have wrapper-less tests.
+[ $runtime == vm && $arch == mips && $mode == debug ]
+mandel_isolate_test: Skip # Uses 600 MB Ram on our 1 GB test device.
+
[ $compiler == none || $compiler == dart2dart ]
serialization_test: SkipByDesign # Tests dart2js-specific serialization code
isolate_throws_test/01: Skip # Issue 12587
diff --git a/tests/language/call_closurization_test.dart b/tests/language/call_closurization_test.dart
new file mode 100644
index 0000000..6c8dc71
--- /dev/null
+++ b/tests/language/call_closurization_test.dart
@@ -0,0 +1,48 @@
+// Copyright (c) 2014, 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=--optimization_counter_threshold=10
+
+import "package:expect/expect.dart";
+
+main() {
+ bar(a) {
+ return a is String;
+ }
+ var bar_tearOff = bar.call;
+
+ for (var i = 0; i < 20; i++) {
+ Expect.isFalse(bar_tearOff(1));
+ Expect.isTrue(bar_tearOff.call('foo'));
+ Expect.isFalse(bar_tearOff.call(1));
+ Expect.isTrue(bar_tearOff('foo'));
+ }
+
+ opt_arg([a = "a"]) => a is String;
+ var opt_arg_tearOff = opt_arg.call;
+
+ for (var i = 0; i < 20; i++) {
+ Expect.isFalse(opt_arg_tearOff(1));
+ Expect.isFalse(opt_arg_tearOff.call(1));
+ Expect.isTrue(opt_arg_tearOff());
+ Expect.isTrue(opt_arg_tearOff.call());
+ Expect.isTrue(opt_arg_tearOff("b"));
+ Expect.isTrue(opt_arg_tearOff.call("b"));
+ }
+
+ named_arg({x: 11, y: 22}) => "$x$y";
+ var named_arg_tearOff = named_arg.call;
+
+ for (var i = 0; i < 20; i++) {
+ Expect.equals("1122", named_arg_tearOff());
+ Expect.equals("1122", named_arg_tearOff.call());
+ Expect.equals("4455", named_arg_tearOff(y:55, x:44));
+ Expect.equals("4455", named_arg_tearOff.call(y:55, x:44));
+ Expect.equals("4455", named_arg_tearOff(x:44, y:55));
+ Expect.equals("4455", named_arg_tearOff.call(x:44, y:55));
+ }
+
+ Expect.throws(() => bar_tearOff.call(), (e) => e is NoSuchMethodError);
+ Expect.throws(() => opt_arg_tearOff.call(x:"p"), (e) => e is NoSuchMethodError);
+ Expect.throws(() => named_arg_tearOff.call("p", "q"), (e) => e is NoSuchMethodError);
+}
diff --git a/tests/language/call_test.dart b/tests/language/call_test.dart
index bd6d24f..59d2407 100644
--- a/tests/language/call_test.dart
+++ b/tests/language/call_test.dart
@@ -1,6 +1,7 @@
// 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.
+// VMOptions=--optimization_counter_threshold=10
import "package:expect/expect.dart";
@@ -8,6 +9,35 @@
bar(a) {
return a is String;
}
- Expect.isFalse(bar(1));
- Expect.isTrue(bar.call('foo'));
+
+ for (var i = 0; i < 20; i++) {
+ Expect.isFalse(bar(1));
+ Expect.isTrue(bar.call('foo'));
+ }
+
+ opt_arg([a = "a"]) => a is String;
+
+ for (var i = 0; i < 20; i++) {
+ Expect.isFalse(opt_arg(1));
+ Expect.isFalse(opt_arg.call(1));
+ Expect.isTrue(opt_arg());
+ Expect.isTrue(opt_arg.call());
+ Expect.isTrue(opt_arg("b"));
+ Expect.isTrue(opt_arg.call("b"));
+ }
+
+ named_arg({x: 11, y: 22}) => "$x$y";
+
+ for (var i = 0; i < 20; i++) {
+ Expect.equals("1122", named_arg());
+ Expect.equals("1122", named_arg.call());
+ Expect.equals("4455", named_arg(y:55, x:44));
+ Expect.equals("4455", named_arg.call(y:55, x:44));
+ Expect.equals("4455", named_arg(x:44, y:55));
+ Expect.equals("4455", named_arg.call(x:44, y:55));
+ }
+
+ Expect.throws(() => bar.call(), (e) => e is NoSuchMethodError);
+ Expect.throws(() => opt_arg.call(x:"p"), (e) => e is NoSuchMethodError);
+ Expect.throws(() => named_arg.call("p", "q"), (e) => e is NoSuchMethodError);
}
diff --git a/tests/language/deferred_constraints_lib.dart b/tests/language/deferred_constraints_lib.dart
index cdc9d4d..9f4d207 100644
--- a/tests/language/deferred_constraints_lib.dart
+++ b/tests/language/deferred_constraints_lib.dart
@@ -2,7 +2,11 @@
// 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.
-class C {}
+class C {
+ static int staticMethod() => 42;
+}
+
+class G<T> {}
class Const {
const Const();
diff --git a/tests/language/deferred_constraints_lib2.dart b/tests/language/deferred_constraints_lib2.dart
index 7352126..830705f 100644
--- a/tests/language/deferred_constraints_lib2.dart
+++ b/tests/language/deferred_constraints_lib2.dart
@@ -2,4 +2,6 @@
// 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.
-foo () => 42;
\ No newline at end of file
+foo() => 42;
+
+class C {}
diff --git a/tests/language/deferred_constraints_test.dart b/tests/language/deferred_constraints_test.dart
new file mode 100644
index 0000000..6992b78
--- /dev/null
+++ b/tests/language/deferred_constraints_test.dart
@@ -0,0 +1,61 @@
+// Copyright (c) 2014, 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 "dart:async";
+import 'package:expect/expect.dart';
+import 'package:async_helper/async_helper.dart';
+
+@lazy import "deferred_constraints_lib.dart" as lib;
+import "deferred_constraints_lib.dart" as lib2; /// type_annotation_non_deferred: ok
+
+const lazy = const DeferredLibrary('lib');
+
+class F {}
+class G2<T> {}
+
+void f({a: const lib.Const()}) {} /// const_default_argument: compile-time error
+
+@lib.Const() class H {} /// const_annotation: compile-time error
+
+void main() {
+ Expect.throws(() { /// type_annotation1: static type warning
+ lib.C a = new lib.C(); /// type_annotation1: continued
+ }, (e) => e is NoSuchMethodError); /// type_annotation1: continued
+ lib.C a = null; /// type_annotation_null: static type warning
+
+ // In this case we do not defer C.
+ lib2.C a1 = new lib2.C(); /// type_annotation_non_deferred: continued
+ asyncStart();
+ lazy.load().then((_) {
+ lib.C a2 = new lib.C(); /// type_annotation2: dynamic type error, static type warning
+ lib.G<F> a3 = new lib.G<F>(); /// type_annotation_generic1: dynamic type error, static type warning
+ G2<lib.C> a4 = new G2(); /// type_annotation_generic2: static type warning
+ G2<lib.C> a5 = new G2<lib.C>(); /// type_annotation_generic3: static type warning
+ lib.G<lib.C> a = new lib.G<lib.C>(); /// type_annotation_generic4: dynamic type error, static type warning
+ var a6 = new lib.C(); /// new: ok
+ var g1 = new lib.G<F>(); /// new_generic1: ok
+ // new G2<lib.C>() does not give a dynamic type error because a malformed
+ // type used as type-parameter is treated as dynamic.
+ var g2 = new G2<lib.C>(); /// new_generic2: static type warning
+ var g3 = new lib.G<lib.C>(); /// new_generic3: static type warning
+ var instance = lib.constantInstance;
+ Expect.throws(() { /// is_check: static type warning
+ bool a7 = instance is lib.Const; /// is_check: continued
+ }, (e) => e is TypeError); /// is_check: continued
+ Expect.throws(() { /// as_operation: static type warning
+ instance as lib.Const; /// as_operation: continued
+ }, (e) => e is TypeError); /// as_operation: continued
+ Expect.throws(() { /// catch_check: static type warning
+ try { throw instance; } on lib.Const {} /// catch_check: continued
+ }, (e) => e is TypeError); /// catch_check: continued
+ int i = lib.C.staticMethod(); /// static_method: ok
+ var c1 = const lib.Const(); /// const: compile-time error
+ f(); /// const_default_argument: continued
+ var constInstance = lib.constantInstance; /// const_instance: ok
+ var h = new H(); /// const_annotation: continued
+ asyncEnd();
+ });
+}
+
+lib.C a9 = null; /// type_annotation_top_level: static type warning
diff --git a/tests/language/deferred_duplicate_prefix1_test.dart b/tests/language/deferred_duplicate_prefix1_test.dart
index 495d061..2665a09 100644
--- a/tests/language/deferred_duplicate_prefix1_test.dart
+++ b/tests/language/deferred_duplicate_prefix1_test.dart
@@ -4,8 +4,8 @@
import "dart:async";
-import "deferred_constraints_lib2.dart" as lib;
-@lazy import "deferred_constraints_lib.dart" as lib; /// 01: compile-time error
+import "deferred_prefix_constraints_lib2.dart" as lib;
+@lazy import "deferred_prefix_constraints_lib.dart" as lib; /// 01: compile-time error
const lazy = const DeferredLibrary('lib');
diff --git a/tests/language/deferred_duplicate_prefix2_test.dart b/tests/language/deferred_duplicate_prefix2_test.dart
index 06af454..9e520a8 100644
--- a/tests/language/deferred_duplicate_prefix2_test.dart
+++ b/tests/language/deferred_duplicate_prefix2_test.dart
@@ -4,8 +4,8 @@
import "dart:async";
-@lazy import "deferred_constraints_lib.dart" as lib; /// 01: compile-time error
-import "deferred_constraints_lib2.dart" as lib;
+@lazy import "deferred_prefix_constraints_lib.dart" as lib; /// 01: compile-time error
+import "deferred_prefix_constraints_lib2.dart" as lib;
const lazy = const DeferredLibrary('lib');
diff --git a/tests/language/deferred_duplicate_prefix3_test.dart b/tests/language/deferred_duplicate_prefix3_test.dart
index 15d5e6d..fb54f79 100644
--- a/tests/language/deferred_duplicate_prefix3_test.dart
+++ b/tests/language/deferred_duplicate_prefix3_test.dart
@@ -4,8 +4,8 @@
import "dart:async";
-@lazy import "deferred_constraints_lib.dart" as lib;
-@lazy2 import "deferred_constraints_lib2.dart" as lib; /// 01: compile-time error
+@lazy import "deferred_prefix_constraints_lib.dart" as lib;
+@lazy2 import "deferred_prefix_constraints_lib2.dart" as lib; /// 01: compile-time error
const lazy = const DeferredLibrary('lib');
const lazy2 = const DeferredLibrary('lib2');
diff --git a/tests/language/deferred_no_prefix_test.dart b/tests/language/deferred_no_prefix_test.dart
index 3fed27b..c1674ab 100644
--- a/tests/language/deferred_no_prefix_test.dart
+++ b/tests/language/deferred_no_prefix_test.dart
@@ -9,4 +9,9 @@
const lazy = const DeferredLibrary('lib');
-void main() {}
+void main() {
+ lazy.load().then((_) { /// 01: continued
+ C c = new C(); /// 01: continued
+ print(c); /// 01: continued
+ }); /// 01: continued
+}
diff --git a/tests/language/deferred_prefix_constraints_lib.dart b/tests/language/deferred_prefix_constraints_lib.dart
new file mode 100644
index 0000000..c79d4e5
--- /dev/null
+++ b/tests/language/deferred_prefix_constraints_lib.dart
@@ -0,0 +1,5 @@
+// Copyright (c) 2014, 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.
+
+foo() => 24;
diff --git a/tests/language/deferred_prefix_constraints_lib2.dart b/tests/language/deferred_prefix_constraints_lib2.dart
new file mode 100644
index 0000000..c79d4e5
--- /dev/null
+++ b/tests/language/deferred_prefix_constraints_lib2.dart
@@ -0,0 +1,5 @@
+// Copyright (c) 2014, 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.
+
+foo() => 24;
diff --git a/tests/language/interceptor9_test.dart b/tests/language/interceptor9_test.dart
new file mode 100644
index 0000000..a9f057f
--- /dev/null
+++ b/tests/language/interceptor9_test.dart
@@ -0,0 +1,31 @@
+// Copyright (c) 2014, 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.
+
+// Regression test for dart2js whose codegen in some cases did not take is
+// tests into account when computing the set of classes for interceptors.
+// See http://dartbug.com/17325
+
+import "package:expect/expect.dart";
+import "dart:typed_data";
+
+confuse(x, [y=null]) => new DateTime.now().day == 42 ? y : x;
+
+boom() {
+ var x = confuse(new Uint8List(22), "");
+ Expect.isTrue(x is Uint8List);
+ x.startsWith("a");
+ x.endsWith("u");
+}
+
+main() {
+ try {
+ var f;
+ if (confuse(true)) { // prevent inlining
+ f = boom;
+ }
+ f();
+ } catch (e) {
+ if (e is ExpectException) throw e;
+ }
+}
diff --git a/tests/language/is_malformed_type_test.dart b/tests/language/is_malformed_type_test.dart
index b5afacc..539dd1f 100644
--- a/tests/language/is_malformed_type_test.dart
+++ b/tests/language/is_malformed_type_test.dart
@@ -12,7 +12,7 @@
// Test that a runtime error is thrown when the 'is' operator checks for a
// malformed type.
try {
- if (e is Undefined) Expect.fail("unreachable");
+ if (e is Undefined) Expect.fail("unreachable"); /// 99: continued
Expect.fail("unreachable");
} catch(exc) {
Expect.isTrue(exc is TypeError);
@@ -23,7 +23,7 @@
// Test that a runtime error is thrown when the 'as' operator checks for a
// malformed type.
try {
- if (e as Undefined) Expect.fail("unreachable");
+ if (e as Undefined) Expect.fail("unreachable"); /// 98: continued
Expect.fail("unreachable");
} catch(exc) {
Expect.isTrue(exc is TypeError);
@@ -36,7 +36,7 @@
// with malformed type is parsed, but not executed at runtime.
// Regression test for issue 16985.
evalCount = 0;
- if (e is Undefined && testEval(e)) Expect.fail("unreachable");
+ if (e is Undefined && testEval(e)) Expect.fail("unreachable"); /// 97: continued
Expect.fail("unreachable");
} catch(exc) {
Expect.isTrue(exc is TypeError);
@@ -50,7 +50,7 @@
// with malformed type is parsed, but not executed at runtime.
// Regression test for issue 16985.
evalCount = 0;
- if (e as Undefined && testEval(e)) Expect.fail("unreachable");
+ if (e as Undefined && testEval(e)) Expect.fail("unreachable"); /// 96: continued
Expect.fail("unreachable");
} catch(exc) {
Expect.isTrue(exc is TypeError);
@@ -63,7 +63,7 @@
// runtime error is thrown.
try {
evalCount = 0;
- if (testEval(e) is Undefined) Expect.fail("unreachable");
+ if (testEval(e) is Undefined) Expect.fail("unreachable"); /// 95: continued
Expect.fail("unreachable");
} catch(exc) {
Expect.isTrue(exc is TypeError);
@@ -76,7 +76,7 @@
// runtime error is thrown.
try {
evalCount = 0;
- if (testEval(e) as Undefined) Expect.fail("unreachable");
+ if (testEval(e) as Undefined) Expect.fail("unreachable"); /// 94: continued
Expect.fail("unreachable");
} catch(exc) {
Expect.isTrue(exc is TypeError);
@@ -85,10 +85,10 @@
}
main() {
- test99("99 bottles"); /// 99: ok
- test98("98 bottles"); /// 98: ok
- test97("97 bottles"); /// 97: ok
- test96("96 bottles"); /// 96: ok
- test95("95 bottles"); /// 95: ok
- test94("94 bottles"); /// 94: ok
+ test99("99 bottles"); /// 99: static type warning
+ test98("98 bottles"); /// 98: static type warning
+ test97("97 bottles"); /// 97: static type warning
+ test96("96 bottles"); /// 96: static type warning
+ test95("95 bottles"); /// 95: static type warning
+ test94("94 bottles"); /// 94: static type warning
}
diff --git a/tests/language/language.status b/tests/language/language.status
index ca70884e..7dc0382 100644
--- a/tests/language/language.status
+++ b/tests/language/language.status
@@ -20,6 +20,29 @@
duplicate_export_negative_test: Fail # Issue 6134
mixin_forwarding_constructor2_test: Fail # Issue 13641
+# The vm does not support deferred loading.
+deferred_constraints_test/const: Fail
+deferred_constraints_test/const_annotation: Fail
+deferred_constraints_test/const_default_argument: Fail
+
+[ ($compiler == none || $compiler == dart2dart) && $unchecked ]
+# The vm and dart2dart does not support deferred loading.
+deferred_constraints_test/is_check: Fail
+deferred_constraints_test/as_operation: Fail
+deferred_constraints_test/catch_check: Fail
+deferred_constraints_test/type_annotation1: Fail
+
+[ ($compiler == none || $compiler == dart2dart) && $checked ]
+# The vm and dart2dart does not support deferred loading.
+deferred_constraints_test/as_operation: Fail
+deferred_constraints_test/is_check: Fail
+deferred_constraints_test/catch_check: Fail
+deferred_constraints_test/type_annotation1: Fail
+deferred_constraints_test/type_annotation2: Fail
+deferred_constraints_test/as_operation: Fail
+deferred_constraints_test/type_annotation_generic1: Fail
+deferred_constraints_test/type_annotation_generic4: Fail
+
[ $compiler == none || $compiler == dartanalyzer || $compiler == dart2analyzer ]
# The vm and analyzer do not support deferred loading.
deferred_no_prefix_test/01: Fail
@@ -57,8 +80,8 @@
malformed2_test/01: Fail, OK
[ $runtime == vm || (($runtime == drt || $runtime == dartium) && $compiler == none) ]
-call_test: Fail # Issue 12602
dynamic_prefix_core_test/01: Fail # Issue 12478
+call_closurization_test: Fail # Issue 17473
[ $compiler == none && ($runtime == vm || $runtime == drt || $runtime == dartium) ]
dynamic_prefix_core_test/none: Fail # Issue 12478
@@ -95,3 +118,6 @@
vm/optimized_guarded_field_isolates_test: Fail # Issue 13921.
override_inheritance_mixed_test/08: Fail # Issue 16137
override_inheritance_mixed_test/09: Fail # Issue 16137
+
+[ $compiler == none && $runtime == vm && $arch == mips && $checked ]
+generic_instanceof3_test: Pass, Crash # dartbug.com/17440
diff --git a/tests/language/language_analyzer.status b/tests/language/language_analyzer.status
index 319229e..f4c89cf 100644
--- a/tests/language/language_analyzer.status
+++ b/tests/language/language_analyzer.status
@@ -5,7 +5,6 @@
[ $compiler == dartanalyzer ]
# Runtime negative test. No static errors or warnings.
closure_call_wrong_argument_count_negative_test: skip
-is_malformed_type_test/*: Fail # don't know how to tell analyzer to expect static warning
# Test issue 12694 (was analyzer issue), (1) when "abstract" is import prefix using it as type is warning; (2) currently analyzer resolves prefix as field (don't ask)
built_in_identifier_prefix_test: CompileTimeError # Issue 12694
@@ -28,6 +27,8 @@
const_map2_test/00: MissingCompileTimeError # Issue 17209
switch_case_test/none: CompileTimeError # Issue 17209
+call_closurization_test: StaticWarning # Issue 17476
+
# Please add new failing tests before this line.
# Section below is for invalid tests.
#
@@ -474,3 +475,19 @@
vm/type_cast_vm_test: StaticWarning
vm/type_vm_test: StaticWarning
void_type_test: StaticWarning
+deferred_constraints_test/type_annotation1: MissingStaticWarning
+deferred_constraints_test/type_annotation2: MissingStaticWarning
+deferred_constraints_test/type_annotation_generic1: MissingStaticWarning
+deferred_constraints_test/type_annotation_generic2: MissingStaticWarning
+deferred_constraints_test/type_annotation_generic3: MissingStaticWarning
+deferred_constraints_test/type_annotation_generic4: MissingStaticWarning
+deferred_constraints_test/type_annotation_null: MissingStaticWarning
+deferred_constraints_test/type_annotation_top_level: MissingStaticWarning
+deferred_constraints_test/as_operation: MissingStaticWarning
+deferred_constraints_test/is_check: MissingStaticWarning
+deferred_constraints_test/new_generic2: MissingStaticWarning
+deferred_constraints_test/new_generic3: MissingStaticWarning
+deferred_constraints_test/catch_check: MissingStaticWarning
+deferred_constraints_test/const: MissingCompileTimeError
+deferred_constraints_test/const_annotation: MissingCompileTimeError
+deferred_constraints_test/const_default_argument: MissingCompileTimeError
diff --git a/tests/language/language_analyzer2.status b/tests/language/language_analyzer2.status
index 8531ff2..86e489a 100644
--- a/tests/language/language_analyzer2.status
+++ b/tests/language/language_analyzer2.status
@@ -5,7 +5,6 @@
[ $compiler == dart2analyzer ]
# Runtime negative test. No static errors or warnings.
closure_call_wrong_argument_count_negative_test: skip
-is_malformed_type_test/*: Fail # don't know how to tell analyzer to expect static warning
# Test issue 12694 (was analyzer issue), (1) when "abstract" is import prefix using it as type is warning; (2) currently analyzer resolves prefix as field (don't ask)
built_in_identifier_prefix_test: CompileTimeError # Issue 12694
@@ -28,6 +27,8 @@
const_map2_test/00: MissingCompileTimeError # Issue 17209
switch_case_test/none: CompileTimeError # Issue 17209
+call_closurization_test: StaticWarning # Issue 17476
+
# Please add new failing tests before this line.
# Section below is for invalid tests.
#
@@ -474,3 +475,19 @@
vm/type_cast_vm_test: StaticWarning
vm/type_vm_test: StaticWarning
void_type_test: StaticWarning
+deferred_constraints_test/type_annotation1: MissingStaticWarning
+deferred_constraints_test/type_annotation2: MissingStaticWarning
+deferred_constraints_test/type_annotation_generic1: MissingStaticWarning
+deferred_constraints_test/type_annotation_generic2: MissingStaticWarning
+deferred_constraints_test/type_annotation_generic3: MissingStaticWarning
+deferred_constraints_test/type_annotation_generic4: MissingStaticWarning
+deferred_constraints_test/type_annotation_null: MissingStaticWarning
+deferred_constraints_test/type_annotation_top_level: MissingStaticWarning
+deferred_constraints_test/as_operation: MissingStaticWarning
+deferred_constraints_test/is_check: MissingStaticWarning
+deferred_constraints_test/new_generic2: MissingStaticWarning
+deferred_constraints_test/new_generic3: MissingStaticWarning
+deferred_constraints_test/catch_check: MissingStaticWarning
+deferred_constraints_test/const: MissingCompileTimeError
+deferred_constraints_test/const_annotation: MissingCompileTimeError
+deferred_constraints_test/const_default_argument: MissingCompileTimeError
diff --git a/tests/language/language_dart2js.status b/tests/language/language_dart2js.status
index 48b3140..3f55762 100644
--- a/tests/language/language_dart2js.status
+++ b/tests/language/language_dart2js.status
@@ -130,6 +130,7 @@
truncdiv_test: RuntimeError # Issue 15246
invocation_mirror2_test: RuntimeError # Issue 6490 (wrong retval).
generic_closure_test: RuntimeError # Issue 12605
+call_closurization_test: RuntimeError # Issue 17474
# Compilation errors.
const_var_test: CompileTimeError # Issue 12793
@@ -292,6 +293,10 @@
[ $runtime == ie9 ]
stack_trace_test: Fail, OK # Stack traces not available in IE9.
+deferred_constraints_test/*: Fail, Pass # http://dartbug.com/12635
[ $compiler == dart2js && $host_checked ]
const_factory_with_body_test/01: Crash
+
+[ ($compiler == dart2js && $csp)]
+deferred_constraints_test/*: Skip # Issue 16898
diff --git a/tests/language/vm/load_to_load_forwarding_vm_test.dart b/tests/language/vm/load_to_load_forwarding_vm_test.dart
index be99d88..5926305 100644
--- a/tests/language/vm/load_to_load_forwarding_vm_test.dart
+++ b/tests/language/vm/load_to_load_forwarding_vm_test.dart
@@ -266,6 +266,24 @@
}
return a[0] + a[1];
}
+
+
+testIndexedAliasedStore3(i) {
+ var a = new List(2);
+ a[0] = 1;
+ a[i] = 3;
+ return a[0];
+}
+
+
+testIndexedAliasedStore4(b) {
+ var a = new List(2);
+ a[0] = 1;
+ b[0] = 3;
+ return a[0];
+}
+
+
var indices = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
class Z {
@@ -349,6 +367,16 @@
for (var i = 0; i < 20; i++) {
Expect.equals(4, testIndexedAliasedStore2(array, array, indices[1]));
}
+ for (var i = 0; i < 20; i++) {
+ Expect.equals(3, testIndexedAliasedStore3(indices[0]));
+ }
+ for (var i = 0; i < 20; i++) {
+ Expect.equals(1, testIndexedAliasedStore3(indices[1]));
+ }
+
+ for (var i = 0; i < 20; i++) {
+ Expect.equals(1, testIndexedAliasedStore4(array));
+ }
var test_array = new List(1);
for (var i = 0; i < 20; i++) {
diff --git a/tests/lib/lib.status b/tests/lib/lib.status
index da7a51c..e8fd11f 100644
--- a/tests/lib/lib.status
+++ b/tests/lib/lib.status
@@ -59,14 +59,24 @@
mirrors/instance_members_test: RuntimeError # Issue 14633
mirrors/instantiate_abstract_class_test: RuntimeError # Issue 6490
mirrors/invoke_test: RuntimeError # Issue 11954
+mirrors/invoke_call_through_getter_previously_accessed_test: RuntimeError # Issue 15138
mirrors/invoke_call_through_getter_test: RuntimeError # Issue 15138
+mirrors/invoke_call_through_implicit_getter_previously_accessed_test: RuntimeError # Issue 15138
+mirrors/invoke_call_through_implicit_getter_test: RuntimeError # Issue 15138
mirrors/invoke_closurization_test: RuntimeError # Issue 13002
mirrors/invoke_named_test/none: RuntimeError # Issue 12863
mirrors/invoke_private_test: CompileTimeError # Issue 12164
mirrors/invoke_private_wrong_library_test: CompileTimeError # Issue 12164
-mirrors/invoke_subscript_test: RuntimeError # Issue 13002
mirrors/invoke_throws_test: RuntimeError # Issue 11954
mirrors/library_declarations_test/none: RuntimeError # Issue 13439, Issue 13733
+mirrors/library_exports_shown_test: RuntimeError # Issue 6490
+mirrors/library_exports_hidden_test: RuntimeError # Issue 6490
+mirrors/library_imports_metadata_test: RuntimeError # Issue 6490
+mirrors/library_imports_bad_metadata_test/none: RuntimeError # Issue 6490
+mirrors/library_imports_shown_test: RuntimeError # Issue 6490
+mirrors/library_imports_hidden_test: RuntimeError # Issue 6490
+mirrors/library_imports_prefixed_test: RuntimeError # Issue 6490
+mirrors/library_imports_prefixed_show_hide_test: RuntimeError # Issue 6490
mirrors/library_uri_io_test: Skip # Not intended for dart2js as it uses dart:io.
mirrors/metadata_allowed_values_test/01: MissingCompileTimeError # Issue 14548
mirrors/metadata_allowed_values_test/05: MissingCompileTimeError # Issue 14548
@@ -116,7 +126,6 @@
[ $compiler == dart2js && $runtime == chromeOnAndroid ]
typed_data/setRange_2_test: RuntimeError # TODO(dart2js-team): Please triage this failure.
typed_data/setRange_3_test: RuntimeError # TODO(dart2js-team): Please triage this failure.
-mirrors/invoke_subscript_test: RuntimeError, Timeout # Issue 15610
[ $compiler == dart2js && $runtime != jsshell && $runtime != safari && $runtime != ff && $runtime != ie9 && $runtime != ie10]
math/math_test: RuntimeError
diff --git a/tests/lib/mirrors/invoke_call_through_getter_previously_accessed_test.dart b/tests/lib/mirrors/invoke_call_through_getter_previously_accessed_test.dart
new file mode 100644
index 0000000..0f9c591
--- /dev/null
+++ b/tests/lib/mirrors/invoke_call_through_getter_previously_accessed_test.dart
@@ -0,0 +1,140 @@
+// 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 test.invoke_call_through_getter;
+
+import 'dart:mirrors';
+
+import 'package:expect/expect.dart';
+
+class FakeFunctionCall {
+ call(x, y) => '1 $x $y';
+}
+class FakeFunctionNSM {
+ noSuchMethod(msg) => msg.positionalArguments.join(', ');
+}
+
+class C {
+ get fakeFunctionCall => new FakeFunctionCall();
+ get fakeFunctionNSM => new FakeFunctionNSM();
+ get closure => (x, y) => '2 $this $x $y';
+ get closureOpt => (x, y, [z, w]) => '3 $this $x $y $z $w';
+ get closureNamed => (x, y, {z, w}) => '4 $this $x $y $z $w';
+ get notAClosure => 'Not a closure';
+ noSuchMethod(msg) => 'DNU';
+
+ toString() => 'C';
+}
+
+testInstanceBase() {
+ var c = new C();
+
+ Expect.equals('1 5 6', c.fakeFunctionCall(5, 6));
+ Expect.equals('7, 8', c.fakeFunctionNSM(7, 8));
+ Expect.equals('2 C 9 10', c.closure(9, 10));
+ Expect.equals('3 C 11 12 13 null', c.closureOpt(11, 12, 13));
+ Expect.equals('4 C 14 15 null 16', c.closureNamed(14, 15, w: 16));
+ Expect.equals('DNU', c.doesNotExist(17, 18));
+ Expect.throws(() => c.closure('wrong arity'), (e) => e is NoSuchMethodError);
+ Expect.throws(() => c.notAClosure(), (e) => e is NoSuchMethodError);
+}
+
+testInstanceReflective() {
+ InstanceMirror im = reflect(new C());
+
+ Expect.equals('1 5 6',
+ im.invoke(#fakeFunctionCall, [5, 6]).reflectee);
+ Expect.equals('7, 8',
+ im.invoke(#fakeFunctionNSM, [7, 8]).reflectee);
+ Expect.equals('2 C 9 10',
+ im.invoke(#closure, [9, 10]).reflectee);
+ Expect.equals('3 C 11 12 13 null',
+ im.invoke(#closureOpt, [11, 12, 13]).reflectee);
+ Expect.equals('4 C 14 15 null 16',
+ im.invoke(#closureNamed, [14, 15], {#w: 16}).reflectee);
+ Expect.equals('DNU',
+ im.invoke(#doesNotExist, [17, 18]).reflectee);
+ Expect.throws(() => im.invoke(#closure, ['wrong arity']),
+ (e) => e is NoSuchMethodError);
+ Expect.throws(() => im.invoke(#notAClosure, []),
+ (e) => e is NoSuchMethodError);
+}
+
+class D {
+ static get fakeFunctionCall => new FakeFunctionCall();
+ static get fakeFunctionNSM => new FakeFunctionNSM();
+ static get closure => (x, y) => '2 $x $y';
+ static get closureOpt => (x, y, [z, w]) => '3 $x $y $z $w';
+ static get closureNamed => (x, y, {z, w}) => '4 $x $y $z $w';
+ static get notAClosure => 'Not a closure';
+}
+
+testClassBase() {
+ Expect.equals('1 5 6', D.fakeFunctionCall(5, 6));
+ Expect.equals('7, 8', D.fakeFunctionNSM(7, 8));
+ Expect.equals('2 9 10', D.closure(9, 10));
+ Expect.equals('3 11 12 13 null', D.closureOpt(11, 12, 13));
+ Expect.equals('4 14 15 null 16', D.closureNamed(14, 15, w: 16));
+ Expect.throws(() => D.closure('wrong arity'), (e) => e is NoSuchMethodError);
+}
+
+testClassReflective() {
+ ClassMirror cm = reflectClass(D);
+
+ Expect.equals('1 5 6',
+ cm.invoke(#fakeFunctionCall, [5, 6]).reflectee);
+ Expect.equals('7, 8',
+ cm.invoke(#fakeFunctionNSM, [7, 8]).reflectee);
+ Expect.equals('2 9 10',
+ cm.invoke(#closure, [9, 10]).reflectee);
+ Expect.equals('3 11 12 13 null',
+ cm.invoke(#closureOpt, [11, 12, 13]).reflectee);
+ Expect.equals('4 14 15 null 16',
+ cm.invoke(#closureNamed, [14, 15], {#w: 16}).reflectee);
+ Expect.throws(() => cm.invoke(#closure, ['wrong arity']),
+ (e) => e is NoSuchMethodError);
+}
+
+get fakeFunctionCall => new FakeFunctionCall();
+get fakeFunctionNSM => new FakeFunctionNSM();
+get closure => (x, y) => '2 $x $y';
+get closureOpt => (x, y, [z, w]) => '3 $x $y $z $w';
+get closureNamed => (x, y, {z, w}) => '4 $x $y $z $w';
+get notAClosure => 'Not a closure';
+
+testLibraryBase() {
+ Expect.equals('1 5 6', fakeFunctionCall(5, 6));
+ Expect.equals('7, 8', fakeFunctionNSM(7, 8));
+ Expect.equals('2 9 10', closure(9, 10));
+ Expect.equals('3 11 12 13 null', closureOpt(11, 12, 13));
+ Expect.equals('4 14 15 null 16', closureNamed(14, 15, w: 16));
+ Expect.throws(() => closure('wrong arity'), (e) => e is NoSuchMethodError);
+}
+
+testLibraryReflective() {
+ LibraryMirror lm = reflectClass(D).owner;
+
+ Expect.equals('1 5 6',
+ lm.invoke(#fakeFunctionCall, [5, 6]).reflectee);
+ Expect.equals('7, 8',
+ lm.invoke(#fakeFunctionNSM, [7, 8]).reflectee);
+ Expect.equals('2 9 10',
+ lm.invoke(#closure, [9, 10]).reflectee);
+ Expect.equals('3 11 12 13 null',
+ lm.invoke(#closureOpt, [11, 12, 13]).reflectee);
+ Expect.equals('4 14 15 null 16',
+ lm.invoke(#closureNamed, [14, 15], {#w: 16}).reflectee);
+ Expect.throws(() => lm.invoke(#closure, ['wrong arity']),
+ (e) => e is NoSuchMethodError);
+}
+
+main() {
+ // Access the getters/closures at the base level in this variant.
+ testInstanceBase();
+ testInstanceReflective();
+ testClassBase();
+ testClassReflective();
+ testLibraryBase();
+ testLibraryReflective();
+}
diff --git a/tests/lib/mirrors/invoke_call_through_getter_test.dart b/tests/lib/mirrors/invoke_call_through_getter_test.dart
index 71dca68..a4afdd6 100644
--- a/tests/lib/mirrors/invoke_call_through_getter_test.dart
+++ b/tests/lib/mirrors/invoke_call_through_getter_test.dart
@@ -130,10 +130,11 @@
}
main() {
- testInstanceBase();
+ // Do not access the getters/closures at the base level in this variant.
+ //testInstanceBase();
testInstanceReflective();
- testClassBase();
+ //testClassBase();
testClassReflective();
- testLibraryBase();
+ //testLibraryBase();
testLibraryReflective();
}
diff --git a/tests/lib/mirrors/invoke_call_through_implicit_getter_previously_accessed_test.dart b/tests/lib/mirrors/invoke_call_through_implicit_getter_previously_accessed_test.dart
new file mode 100644
index 0000000..edda37c
--- /dev/null
+++ b/tests/lib/mirrors/invoke_call_through_implicit_getter_previously_accessed_test.dart
@@ -0,0 +1,145 @@
+// Copyright (c) 2014, 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 test.invoke_call_through_implicit_getter;
+
+import 'dart:mirrors';
+
+import 'package:expect/expect.dart';
+
+class FakeFunctionCall {
+ call(x, y) => '1 $x $y';
+}
+class FakeFunctionNSM {
+ noSuchMethod(msg) => msg.positionalArguments.join(', ');
+}
+
+class C {
+ var fakeFunctionCall = new FakeFunctionCall();
+ var fakeFunctionNSM = new FakeFunctionNSM();
+ var closure; // = (x, y) => '2 $this $x $y';
+ var closureOpt; // = (x, y, [z, w]) => '3 $this $x $y $z $w';
+ var closureNamed; // = (x, y, {z, w}) => '4 $this $x $y $z $w';
+ var notAClosure = 'Not a closure';
+ noSuchMethod(msg) => 'DNU';
+
+ C() {
+ closure = (x, y) => '2 $this $x $y';
+ closureOpt = (x, y, [z, w]) => '3 $this $x $y $z $w';
+ closureNamed = (x, y, {z, w}) => '4 $this $x $y $z $w';
+ }
+
+ toString() => 'C';
+}
+
+testInstanceBase() {
+ var c = new C();
+
+ Expect.equals('1 5 6', c.fakeFunctionCall(5, 6));
+ Expect.equals('7, 8', c.fakeFunctionNSM(7, 8));
+ Expect.equals('2 C 9 10', c.closure(9, 10));
+ Expect.equals('3 C 11 12 13 null', c.closureOpt(11, 12, 13));
+ Expect.equals('4 C 14 15 null 16', c.closureNamed(14, 15, w: 16));
+ Expect.equals('DNU', c.doesNotExist(17, 18));
+ Expect.throws(() => c.closure('wrong arity'), (e) => e is NoSuchMethodError);
+ Expect.throws(() => c.notAClosure(), (e) => e is NoSuchMethodError);
+}
+
+testInstanceReflective() {
+ InstanceMirror im = reflect(new C());
+
+ Expect.equals('1 5 6',
+ im.invoke(#fakeFunctionCall, [5, 6]).reflectee);
+ Expect.equals('7, 8',
+ im.invoke(#fakeFunctionNSM, [7, 8]).reflectee);
+ Expect.equals('2 C 9 10',
+ im.invoke(#closure, [9, 10]).reflectee);
+ Expect.equals('3 C 11 12 13 null',
+ im.invoke(#closureOpt, [11, 12, 13]).reflectee);
+ Expect.equals('4 C 14 15 null 16',
+ im.invoke(#closureNamed, [14, 15], {#w: 16}).reflectee);
+ Expect.equals('DNU',
+ im.invoke(#doesNotExist, [17, 18]).reflectee);
+ Expect.throws(() => im.invoke(#closure, ['wrong arity']),
+ (e) => e is NoSuchMethodError);
+ Expect.throws(() => im.invoke(#notAClosure, []),
+ (e) => e is NoSuchMethodError);
+}
+
+class D {
+ static var fakeFunctionCall = new FakeFunctionCall();
+ static var fakeFunctionNSM = new FakeFunctionNSM();
+ static var closure = (x, y) => '2 $x $y';
+ static var closureOpt = (x, y, [z, w]) => '3 $x $y $z $w';
+ static var closureNamed = (x, y, {z, w}) => '4 $x $y $z $w';
+ static var notAClosure = 'Not a closure';
+}
+
+testClassBase() {
+ Expect.equals('1 5 6', D.fakeFunctionCall(5, 6));
+ Expect.equals('7, 8', D.fakeFunctionNSM(7, 8));
+ Expect.equals('2 9 10', D.closure(9, 10));
+ Expect.equals('3 11 12 13 null', D.closureOpt(11, 12, 13));
+ Expect.equals('4 14 15 null 16', D.closureNamed(14, 15, w: 16));
+ Expect.throws(() => D.closure('wrong arity'), (e) => e is NoSuchMethodError);
+}
+
+testClassReflective() {
+ ClassMirror cm = reflectClass(D);
+
+ Expect.equals('1 5 6',
+ cm.invoke(#fakeFunctionCall, [5, 6]).reflectee);
+ Expect.equals('7, 8',
+ cm.invoke(#fakeFunctionNSM, [7, 8]).reflectee);
+ Expect.equals('2 9 10',
+ cm.invoke(#closure, [9, 10]).reflectee);
+ Expect.equals('3 11 12 13 null',
+ cm.invoke(#closureOpt, [11, 12, 13]).reflectee);
+ Expect.equals('4 14 15 null 16',
+ cm.invoke(#closureNamed, [14, 15], {#w: 16}).reflectee);
+ Expect.throws(() => cm.invoke(#closure, ['wrong arity']),
+ (e) => e is NoSuchMethodError);
+}
+
+var fakeFunctionCall = new FakeFunctionCall();
+var fakeFunctionNSM = new FakeFunctionNSM();
+var closure = (x, y) => '2 $x $y';
+var closureOpt = (x, y, [z, w]) => '3 $x $y $z $w';
+var closureNamed = (x, y, {z, w}) => '4 $x $y $z $w';
+var notAClosure = 'Not a closure';
+
+testLibraryBase() {
+ Expect.equals('1 5 6', fakeFunctionCall(5, 6));
+ Expect.equals('7, 8', fakeFunctionNSM(7, 8));
+ Expect.equals('2 9 10', closure(9, 10));
+ Expect.equals('3 11 12 13 null', closureOpt(11, 12, 13));
+ Expect.equals('4 14 15 null 16', closureNamed(14, 15, w: 16));
+ Expect.throws(() => closure('wrong arity'), (e) => e is NoSuchMethodError);
+}
+
+testLibraryReflective() {
+ LibraryMirror lm = reflectClass(D).owner;
+
+ Expect.equals('1 5 6',
+ lm.invoke(#fakeFunctionCall, [5, 6]).reflectee);
+ Expect.equals('7, 8',
+ lm.invoke(#fakeFunctionNSM, [7, 8]).reflectee);
+ Expect.equals('2 9 10',
+ lm.invoke(#closure, [9, 10]).reflectee);
+ Expect.equals('3 11 12 13 null',
+ lm.invoke(#closureOpt, [11, 12, 13]).reflectee);
+ Expect.equals('4 14 15 null 16',
+ lm.invoke(#closureNamed, [14, 15], {#w: 16}).reflectee);
+ Expect.throws(() => lm.invoke(#closure, ['wrong arity']),
+ (e) => e is NoSuchMethodError);
+}
+
+main() {
+ testInstanceBase();
+ testInstanceReflective();
+ testClassBase();
+ testClassReflective();
+ testLibraryBase();
+ testLibraryReflective();
+}
diff --git a/tests/lib/mirrors/invoke_call_through_implicit_getter_test.dart b/tests/lib/mirrors/invoke_call_through_implicit_getter_test.dart
new file mode 100644
index 0000000..6aa5cdf
--- /dev/null
+++ b/tests/lib/mirrors/invoke_call_through_implicit_getter_test.dart
@@ -0,0 +1,146 @@
+// Copyright (c) 2014, 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 test.invoke_call_through_implicit_getter;
+
+import 'dart:mirrors';
+
+import 'package:expect/expect.dart';
+
+class FakeFunctionCall {
+ call(x, y) => '1 $x $y';
+}
+class FakeFunctionNSM {
+ noSuchMethod(msg) => msg.positionalArguments.join(', ');
+}
+
+class C {
+ var fakeFunctionCall = new FakeFunctionCall();
+ var fakeFunctionNSM = new FakeFunctionNSM();
+ var closure; // = (x, y) => '2 $this $x $y';
+ var closureOpt; // = (x, y, [z, w]) => '3 $this $x $y $z $w';
+ var closureNamed; // = (x, y, {z, w}) => '4 $this $x $y $z $w';
+ var notAClosure = 'Not a closure';
+ noSuchMethod(msg) => 'DNU';
+
+ C() {
+ closure = (x, y) => '2 $this $x $y';
+ closureOpt = (x, y, [z, w]) => '3 $this $x $y $z $w';
+ closureNamed = (x, y, {z, w}) => '4 $this $x $y $z $w';
+ }
+
+ toString() => 'C';
+}
+
+testInstanceBase() {
+ var c = new C();
+
+ Expect.equals('1 5 6', c.fakeFunctionCall(5, 6));
+ Expect.equals('7, 8', c.fakeFunctionNSM(7, 8));
+ Expect.equals('2 C 9 10', c.closure(9, 10));
+ Expect.equals('3 C 11 12 13 null', c.closureOpt(11, 12, 13));
+ Expect.equals('4 C 14 15 null 16', c.closureNamed(14, 15, w: 16));
+ Expect.equals('DNU', c.doesNotExist(17, 18));
+ Expect.throws(() => c.closure('wrong arity'), (e) => e is NoSuchMethodError);
+ Expect.throws(() => c.notAClosure(), (e) => e is NoSuchMethodError);
+}
+
+testInstanceReflective() {
+ InstanceMirror im = reflect(new C());
+
+ Expect.equals('1 5 6',
+ im.invoke(#fakeFunctionCall, [5, 6]).reflectee);
+ Expect.equals('7, 8',
+ im.invoke(#fakeFunctionNSM, [7, 8]).reflectee);
+ Expect.equals('2 C 9 10',
+ im.invoke(#closure, [9, 10]).reflectee);
+ Expect.equals('3 C 11 12 13 null',
+ im.invoke(#closureOpt, [11, 12, 13]).reflectee);
+ Expect.equals('4 C 14 15 null 16',
+ im.invoke(#closureNamed, [14, 15], {#w: 16}).reflectee);
+ Expect.equals('DNU',
+ im.invoke(#doesNotExist, [17, 18]).reflectee);
+ Expect.throws(() => im.invoke(#closure, ['wrong arity']),
+ (e) => e is NoSuchMethodError);
+ Expect.throws(() => im.invoke(#notAClosure, []),
+ (e) => e is NoSuchMethodError);
+}
+
+class D {
+ static var fakeFunctionCall = new FakeFunctionCall();
+ static var fakeFunctionNSM = new FakeFunctionNSM();
+ static var closure = (x, y) => '2 $x $y';
+ static var closureOpt = (x, y, [z, w]) => '3 $x $y $z $w';
+ static var closureNamed = (x, y, {z, w}) => '4 $x $y $z $w';
+ static var notAClosure = 'Not a closure';
+}
+
+testClassBase() {
+ Expect.equals('1 5 6', D.fakeFunctionCall(5, 6));
+ Expect.equals('7, 8', D.fakeFunctionNSM(7, 8));
+ Expect.equals('2 9 10', D.closure(9, 10));
+ Expect.equals('3 11 12 13 null', D.closureOpt(11, 12, 13));
+ Expect.equals('4 14 15 null 16', D.closureNamed(14, 15, w: 16));
+ Expect.throws(() => D.closure('wrong arity'), (e) => e is NoSuchMethodError);
+}
+
+testClassReflective() {
+ ClassMirror cm = reflectClass(D);
+
+ Expect.equals('1 5 6',
+ cm.invoke(#fakeFunctionCall, [5, 6]).reflectee);
+ Expect.equals('7, 8',
+ cm.invoke(#fakeFunctionNSM, [7, 8]).reflectee);
+ Expect.equals('2 9 10',
+ cm.invoke(#closure, [9, 10]).reflectee);
+ Expect.equals('3 11 12 13 null',
+ cm.invoke(#closureOpt, [11, 12, 13]).reflectee);
+ Expect.equals('4 14 15 null 16',
+ cm.invoke(#closureNamed, [14, 15], {#w: 16}).reflectee);
+ Expect.throws(() => cm.invoke(#closure, ['wrong arity']),
+ (e) => e is NoSuchMethodError);
+}
+
+var fakeFunctionCall = new FakeFunctionCall();
+var fakeFunctionNSM = new FakeFunctionNSM();
+var closure = (x, y) => '2 $x $y';
+var closureOpt = (x, y, [z, w]) => '3 $x $y $z $w';
+var closureNamed = (x, y, {z, w}) => '4 $x $y $z $w';
+var notAClosure = 'Not a closure';
+
+testLibraryBase() {
+ Expect.equals('1 5 6', fakeFunctionCall(5, 6));
+ Expect.equals('7, 8', fakeFunctionNSM(7, 8));
+ Expect.equals('2 9 10', closure(9, 10));
+ Expect.equals('3 11 12 13 null', closureOpt(11, 12, 13));
+ Expect.equals('4 14 15 null 16', closureNamed(14, 15, w: 16));
+ Expect.throws(() => closure('wrong arity'), (e) => e is NoSuchMethodError);
+}
+
+testLibraryReflective() {
+ LibraryMirror lm = reflectClass(D).owner;
+
+ Expect.equals('1 5 6',
+ lm.invoke(#fakeFunctionCall, [5, 6]).reflectee);
+ Expect.equals('7, 8',
+ lm.invoke(#fakeFunctionNSM, [7, 8]).reflectee);
+ Expect.equals('2 9 10',
+ lm.invoke(#closure, [9, 10]).reflectee);
+ Expect.equals('3 11 12 13 null',
+ lm.invoke(#closureOpt, [11, 12, 13]).reflectee);
+ Expect.equals('4 14 15 null 16',
+ lm.invoke(#closureNamed, [14, 15], {#w: 16}).reflectee);
+ Expect.throws(() => lm.invoke(#closure, ['wrong arity']),
+ (e) => e is NoSuchMethodError);
+}
+
+main() {
+ // Do not access the getters/closures at the base level in this variant.
+ //testInstanceBase();
+ testInstanceReflective();
+ //testClassBase();
+ testClassReflective();
+ //testLibraryBase();
+ testLibraryReflective();
+}
diff --git a/tests/lib/mirrors/invoke_subscript_test.dart b/tests/lib/mirrors/invoke_subscript_test.dart
deleted file mode 100644
index 301091a..0000000
--- a/tests/lib/mirrors/invoke_subscript_test.dart
+++ /dev/null
@@ -1,107 +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.
-
-library test.invoke_subscript_test;
-
-import 'dart:mirrors';
-import 'package:expect/expect.dart';
-
-class Super {
- inheritedMethod(a, b) => a + b;
- staticFunctionInSuper(x) => x;
-}
-
-class Class extends Super {
- var field = 'f';
- get getter => 'g';
- set setter(v) => 's';
- method(x, y, z) => '$x-$y-$z';
- methodWithNamed(x, {y, z:'Z'}) => '$x+$y+$z';
- methodWithOptPos(x, [y, z='Z']) => '$x*$y*$z';
-
- static var staticField = 'sf';
- static get staticGetter => 'sg';
- static set staticSetter(v) => 'ss';
- static staticFunction(x, y, z) => '$x-$y-$z';
- static staticFunctionWithNamed(x, {y, z:'Z'}) => '$x+$y+$z';
- static staticFunctionWithOptPos(x, [y, z='Z']) => '$x*$y*$z';
-
-}
-
-var toplevelField ='tf';
-get toplevelGetter => 'tg';
-set toplevelSetter(v) => 'ts';
-toplevelFunction(x, y, z) => '$x-$y-$z';
-toplevelFunctionWithNamed(x, {y, z:'Z'}) => '$x+$y+$z';
-toplevelFunctionWithOptPos(x, [y, z='Z']) => '$x*$y*$z';
-
-expectArgumentError(f) {
- Expect.throws(f, (e) => e is ArgumentError);
-}
-
-main() {
- InstanceMirror im = reflect(new Class());
- Expect.equals('A-B-C', im[#method]('A', 'B', 'C').reflectee);
- Expect.throws(() => im[#method]('A', 'B', 'C', 'D'),
- (e) => e is NoSuchMethodError,
- 'Wrong arity');
- Expect.equals(7, im[#inheritedMethod](3, 4).reflectee);
- expectArgumentError(() => im[#field]);
- expectArgumentError(() => im[#getter]);
- expectArgumentError(() => im[#setter]);
- expectArgumentError(() => im[#doesntExist]);
- expectArgumentError(() => im[#staticFunction]);
-
- ClassMirror cm = reflectClass(Class);
- Expect.equals('A-B-C', cm[#staticFunction]('A', 'B', 'C').reflectee);
- Expect.throws(() => cm[#staticFunction]('A', 'B', 'C', 'D'),
- (e) => e is NoSuchMethodError,
- 'Wrong arity');
- expectArgumentError(() => cm[#staticField]);
- expectArgumentError(() => cm[#staticGetter]);
- expectArgumentError(() => cm[#staticSetter]);
- expectArgumentError(() => cm[#staticDoesntExist]);
- expectArgumentError(() => cm[#staticFunctionInSuper]);
- expectArgumentError(() => cm[#method]);
-
- LibraryMirror lm = cm.owner;
- Expect.equals('A-B-C', lm[#toplevelFunction]('A', 'B', 'C').reflectee);
- Expect.throws(() => lm[#toplevelFunction]('A', 'B', 'C', 'D'),
- (e) => e is NoSuchMethodError,
- 'Wrong arity');
-
- expectArgumentError(() => lm[#toplevelField]);
- expectArgumentError(() => lm[#toplevelGetter]);
- expectArgumentError(() => lm[#toplevelSetter]);
- expectArgumentError(() => lm[#toplevelDoesntExist]);
-
- // dart2js might stop testing here.
-
- Expect.equals('A+B+Z', im[#methodWithNamed]('A', y: 'B').reflectee);
- Expect.equals('A*B*Z', im[#methodWithOptPos]('A', 'B').reflectee);
- Expect.throws(() => im[#methodWithNamed]('A', w: 'D'),
- (e) => e is NoSuchMethodError,
- 'Wrong arity');
- Expect.throws(() => im[#method](),
- (e) => e is NoSuchMethodError,
- 'Wrong arity');
-
- Expect.equals('A+B+Z', cm[#staticFunctionWithNamed]('A', y: 'B').reflectee);
- Expect.equals('A*B*Z', cm[#staticFunctionWithOptPos]('A', 'B').reflectee);
- Expect.throws(() => cm[#staticFunctionWithNamed]('A', w: 'D'),
- (e) => e is NoSuchMethodError,
- 'Wrong arity');
- Expect.throws(() => cm[#staticFunctionWithOptPos](),
- (e) => e is NoSuchMethodError,
- 'Wrong arity');
-
- Expect.equals('A+B+Z', lm[#toplevelFunctionWithNamed]('A', y: 'B').reflectee);
- Expect.equals('A*B*Z', lm[#toplevelFunctionWithOptPos]('A', 'B').reflectee);
- Expect.throws(() => lm[#toplevelFunctionWithNamed]('A', w: 'D'),
- (e) => e is NoSuchMethodError,
- 'Wrong arity');
- Expect.throws(() => lm[#toplevelFunctionWithOptPos](),
- (e) => e is NoSuchMethodError,
- 'Wrong arity');
-}
diff --git a/tests/lib/mirrors/library_exports_hidden.dart b/tests/lib/mirrors/library_exports_hidden.dart
new file mode 100644
index 0000000..c1ea081
--- /dev/null
+++ b/tests/lib/mirrors/library_exports_hidden.dart
@@ -0,0 +1,10 @@
+// Copyright (c) 2014, 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 library_exports_hidden;
+
+export 'library_imports_a.dart' hide somethingFromA, somethingFromBoth;
+export 'library_imports_b.dart' hide somethingFromB;
+
+var somethingFromHidden;
diff --git a/tests/lib/mirrors/library_exports_hidden_test.dart b/tests/lib/mirrors/library_exports_hidden_test.dart
new file mode 100644
index 0000000..990dbb1
--- /dev/null
+++ b/tests/lib/mirrors/library_exports_hidden_test.dart
@@ -0,0 +1,34 @@
+// Copyright (c) 2014, 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 test.library_imports;
+
+import 'dart:mirrors';
+import 'package:expect/expect.dart';
+import 'stringify.dart';
+
+import 'library_exports_hidden.dart';
+
+test(MirrorSystem mirrors) {
+ LibraryMirror hidden = mirrors.findLibrary(#library_exports_hidden);
+ LibraryMirror a = mirrors.findLibrary(#library_imports_a);
+ LibraryMirror b = mirrors.findLibrary(#library_imports_b);
+ LibraryMirror core = mirrors.findLibrary(#dart.core);
+
+ Expect.setEquals([a, b, core],
+ hidden.libraryDependencies.map((dep) => dep.targetLibrary));
+
+ Expect.stringEquals(
+ 'import dart.core\n'
+ 'export library_imports_a\n'
+ ' hide somethingFromA\n'
+ ' hide somethingFromBoth\n'
+ 'export library_imports_b\n'
+ ' hide somethingFromB\n',
+ stringifyDependencies(hidden));
+}
+
+main() {
+ test(currentMirrorSystem());
+}
diff --git a/tests/lib/mirrors/library_exports_shown.dart b/tests/lib/mirrors/library_exports_shown.dart
new file mode 100644
index 0000000..524ab4c
--- /dev/null
+++ b/tests/lib/mirrors/library_exports_shown.dart
@@ -0,0 +1,10 @@
+// Copyright (c) 2014, 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 library_exports_shown;
+
+export 'library_imports_a.dart' show somethingFromA, somethingFromBoth;
+export 'library_imports_b.dart' show somethingFromB;
+
+var somethingFromShown;
diff --git a/tests/lib/mirrors/library_exports_shown_test.dart b/tests/lib/mirrors/library_exports_shown_test.dart
new file mode 100644
index 0000000..66592f1
--- /dev/null
+++ b/tests/lib/mirrors/library_exports_shown_test.dart
@@ -0,0 +1,35 @@
+// Copyright (c) 2014, 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 test.library_imports;
+
+import 'dart:mirrors';
+import 'package:expect/expect.dart';
+import 'stringify.dart';
+
+import 'library_exports_shown.dart';
+
+test(MirrorSystem mirrors) {
+ LibraryMirror shown = mirrors.findLibrary(#library_exports_shown);
+ LibraryMirror a = mirrors.findLibrary(#library_imports_a);
+ LibraryMirror b = mirrors.findLibrary(#library_imports_b);
+
+ LibraryMirror core = mirrors.findLibrary(#dart.core);
+
+ Expect.setEquals([a, b, core],
+ shown.libraryDependencies.map((dep) => dep.targetLibrary));
+
+ Expect.stringEquals(
+ 'import dart.core\n'
+ 'export library_imports_a\n'
+ ' show somethingFromA\n'
+ ' show somethingFromBoth\n'
+ 'export library_imports_b\n'
+ ' show somethingFromB\n',
+ stringifyDependencies(shown));
+}
+
+main() {
+ test(currentMirrorSystem());
+}
diff --git a/tests/lib/mirrors/library_imports_a.dart b/tests/lib/mirrors/library_imports_a.dart
new file mode 100644
index 0000000..afdc329
--- /dev/null
+++ b/tests/lib/mirrors/library_imports_a.dart
@@ -0,0 +1,8 @@
+// Copyright (c) 2014, 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 library_imports_a;
+
+var somethingFromA;
+var somethingFromBoth;
diff --git a/tests/lib/mirrors/library_imports_b.dart b/tests/lib/mirrors/library_imports_b.dart
new file mode 100644
index 0000000..493f323
--- /dev/null
+++ b/tests/lib/mirrors/library_imports_b.dart
@@ -0,0 +1,8 @@
+// Copyright (c) 2014, 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 library_imports_b;
+
+var somethingFromB;
+var somethingFromBoth;
diff --git a/tests/lib/mirrors/library_imports_bad_metadata_test.dart b/tests/lib/mirrors/library_imports_bad_metadata_test.dart
new file mode 100644
index 0000000..51c756e
--- /dev/null
+++ b/tests/lib/mirrors/library_imports_bad_metadata_test.dart
@@ -0,0 +1,18 @@
+// Copyright (c) 2014, 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 test.library_imports_bad_metadata;
+
+@undefined /// 01: compile-time error
+import 'dart:mirrors';
+import 'package:expect/expect.dart';
+
+main() {
+ LibraryMirror thisLibrary =
+ currentMirrorSystem().findLibrary(#test.library_imports_bad_metadata);
+
+ thisLibrary.libraryDependencies.forEach((dep) {
+ Expect.listEquals([], dep.metadata);
+ });
+}
diff --git a/tests/lib/mirrors/library_imports_hidden.dart b/tests/lib/mirrors/library_imports_hidden.dart
new file mode 100644
index 0000000..deccc64
--- /dev/null
+++ b/tests/lib/mirrors/library_imports_hidden.dart
@@ -0,0 +1,10 @@
+// Copyright (c) 2014, 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 library_imports_hidden;
+
+import 'library_imports_a.dart' hide somethingFromA, somethingFromBoth;
+import 'library_imports_b.dart' hide somethingFromB;
+
+var somethingFromHidden;
diff --git a/tests/lib/mirrors/library_imports_hidden_test.dart b/tests/lib/mirrors/library_imports_hidden_test.dart
new file mode 100644
index 0000000..3f1dcb0
--- /dev/null
+++ b/tests/lib/mirrors/library_imports_hidden_test.dart
@@ -0,0 +1,34 @@
+// Copyright (c) 2014, 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 test.library_imports;
+
+import 'dart:mirrors';
+import 'package:expect/expect.dart';
+import 'stringify.dart';
+
+import 'library_imports_hidden.dart';
+
+test(MirrorSystem mirrors) {
+ LibraryMirror hidden = mirrors.findLibrary(#library_imports_hidden);
+ LibraryMirror a = mirrors.findLibrary(#library_imports_a);
+ LibraryMirror b = mirrors.findLibrary(#library_imports_b);
+ LibraryMirror core = mirrors.findLibrary(#dart.core);
+
+ Expect.setEquals([a, b, core],
+ hidden.libraryDependencies.map((dep) => dep.targetLibrary));
+
+ Expect.stringEquals(
+ 'import dart.core\n'
+ 'import library_imports_a\n'
+ ' hide somethingFromA\n'
+ ' hide somethingFromBoth\n'
+ 'import library_imports_b\n'
+ ' hide somethingFromB\n',
+ stringifyDependencies(hidden));
+}
+
+main() {
+ test(currentMirrorSystem());
+}
diff --git a/tests/lib/mirrors/library_imports_metadata.dart b/tests/lib/mirrors/library_imports_metadata.dart
new file mode 100644
index 0000000..9507269
--- /dev/null
+++ b/tests/lib/mirrors/library_imports_metadata.dart
@@ -0,0 +1,17 @@
+// Copyright (c) 2014, 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 library_imports_metadata;
+
+@m1
+import 'dart:mirrors' as mirrors;
+
+@m2 @m3
+import 'dart:collection';
+
+import 'dart:async';
+
+const m1 = const Object();
+const m2 = const Object();
+const m3 = const Object();
diff --git a/tests/lib/mirrors/library_imports_metadata_test.dart b/tests/lib/mirrors/library_imports_metadata_test.dart
new file mode 100644
index 0000000..aa96d01
--- /dev/null
+++ b/tests/lib/mirrors/library_imports_metadata_test.dart
@@ -0,0 +1,50 @@
+// Copyright (c) 2014, 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 test.library_imports;
+
+import 'dart:mirrors';
+import 'package:expect/expect.dart';
+import 'stringify.dart';
+
+import 'library_imports_metadata.dart';
+
+main() {
+ LibraryMirror lib = currentMirrorSystem().findLibrary(#library_imports_metadata);
+
+ LibraryMirror core = currentMirrorSystem().findLibrary(#dart.core);
+ LibraryMirror mirrors = currentMirrorSystem().findLibrary(#dart.mirrors);
+ LibraryMirror collection = currentMirrorSystem().findLibrary(#dart.collection);
+ LibraryMirror async = currentMirrorSystem().findLibrary(#dart.async);
+
+ Expect.setEquals([core, mirrors, collection, async],
+ lib.libraryDependencies.map((dep) => dep.targetLibrary));
+
+ Expect.stringEquals(
+ 'import dart.async\n'
+ 'import dart.collection\n'
+ 'import dart.core\n'
+ 'import dart.mirrors as mirrors\n',
+ stringifyDependencies(lib));
+
+ Expect.listEquals(
+ [].map(reflect).toList(),
+ lib.libraryDependencies
+ .singleWhere((dep) => dep.targetLibrary == core).metadata);
+
+ Expect.listEquals(
+ [m1].map(reflect).toList(),
+ lib.libraryDependencies
+ .singleWhere((dep) => dep.targetLibrary == mirrors).metadata);
+
+ Expect.listEquals(
+ [m2, m3].map(reflect).toList(),
+ lib.libraryDependencies
+ .singleWhere((dep) => dep.targetLibrary == collection).metadata);
+
+ Expect.listEquals(
+ [].map(reflect).toList(),
+ lib.libraryDependencies
+ .singleWhere((dep) => dep.targetLibrary == async).metadata);
+}
diff --git a/tests/lib/mirrors/library_imports_prefixed.dart b/tests/lib/mirrors/library_imports_prefixed.dart
new file mode 100644
index 0000000..ad50f42
--- /dev/null
+++ b/tests/lib/mirrors/library_imports_prefixed.dart
@@ -0,0 +1,10 @@
+// Copyright (c) 2014, 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 library_imports_prefixed;
+
+import 'library_imports_a.dart' as prefixa;
+import 'library_imports_b.dart' as prefixb;
+
+var somethingFromPrefixed;
diff --git a/tests/lib/mirrors/library_imports_prefixed_show_hide.dart b/tests/lib/mirrors/library_imports_prefixed_show_hide.dart
new file mode 100644
index 0000000..ea7c71f
--- /dev/null
+++ b/tests/lib/mirrors/library_imports_prefixed_show_hide.dart
@@ -0,0 +1,10 @@
+// Copyright (c) 2014, 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 library_imports_prefixed_show_hide;
+
+import 'library_imports_a.dart' as prefixa show somethingFromA;
+import 'library_imports_b.dart' as prefixb hide somethingFromB;
+
+var somethingFromPrefixed;
diff --git a/tests/lib/mirrors/library_imports_prefixed_show_hide_test.dart b/tests/lib/mirrors/library_imports_prefixed_show_hide_test.dart
new file mode 100644
index 0000000..eb865a1
--- /dev/null
+++ b/tests/lib/mirrors/library_imports_prefixed_show_hide_test.dart
@@ -0,0 +1,33 @@
+// Copyright (c) 2014, 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 test.library_imports;
+
+import 'dart:mirrors';
+import 'package:expect/expect.dart';
+import 'stringify.dart';
+
+import 'library_imports_prefixed_show_hide.dart';
+
+test(MirrorSystem mirrors) {
+ LibraryMirror prefixed_show_hide = mirrors.findLibrary(#library_imports_prefixed_show_hide);
+ LibraryMirror a = mirrors.findLibrary(#library_imports_a);
+ LibraryMirror b = mirrors.findLibrary(#library_imports_b);
+ LibraryMirror core = mirrors.findLibrary(#dart.core);
+
+ Expect.setEquals([a, b, core],
+ prefixed_show_hide.libraryDependencies.map((dep) => dep.targetLibrary));
+
+ Expect.stringEquals(
+ 'import dart.core\n'
+ 'import library_imports_a as prefixa\n'
+ ' show somethingFromA\n'
+ 'import library_imports_b as prefixb\n'
+ ' hide somethingFromB\n',
+ stringifyDependencies(prefixed_show_hide));
+}
+
+main() {
+ test(currentMirrorSystem());
+}
diff --git a/tests/lib/mirrors/library_imports_prefixed_test.dart b/tests/lib/mirrors/library_imports_prefixed_test.dart
new file mode 100644
index 0000000..beda171
--- /dev/null
+++ b/tests/lib/mirrors/library_imports_prefixed_test.dart
@@ -0,0 +1,31 @@
+// Copyright (c) 2014, 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 test.library_imports;
+
+import 'dart:mirrors';
+import 'package:expect/expect.dart';
+import 'stringify.dart';
+
+import 'library_imports_prefixed.dart';
+
+test(MirrorSystem mirrors) {
+ LibraryMirror prefixed = mirrors.findLibrary(#library_imports_prefixed);
+ LibraryMirror a = mirrors.findLibrary(#library_imports_a);
+ LibraryMirror b = mirrors.findLibrary(#library_imports_b);
+ LibraryMirror core = mirrors.findLibrary(#dart.core);
+
+ Expect.setEquals([a, b, core],
+ prefixed.libraryDependencies.map((dep) => dep.targetLibrary));
+
+ Expect.stringEquals(
+ 'import dart.core\n'
+ 'import library_imports_a as prefixa\n'
+ 'import library_imports_b as prefixb\n',
+ stringifyDependencies(prefixed));
+}
+
+main() {
+ test(currentMirrorSystem());
+}
diff --git a/tests/lib/mirrors/library_imports_shown.dart b/tests/lib/mirrors/library_imports_shown.dart
new file mode 100644
index 0000000..6790902
--- /dev/null
+++ b/tests/lib/mirrors/library_imports_shown.dart
@@ -0,0 +1,10 @@
+// Copyright (c) 2014, 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 library_imports_shown;
+
+import 'library_imports_a.dart' show somethingFromA, somethingFromBoth;
+import 'library_imports_b.dart' show somethingFromB;
+
+var somethingFromShown;
diff --git a/tests/lib/mirrors/library_imports_shown_test.dart b/tests/lib/mirrors/library_imports_shown_test.dart
new file mode 100644
index 0000000..fb16df2
--- /dev/null
+++ b/tests/lib/mirrors/library_imports_shown_test.dart
@@ -0,0 +1,34 @@
+// Copyright (c) 2014, 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 test.library_imports;
+
+import 'dart:mirrors';
+import 'package:expect/expect.dart';
+import 'stringify.dart';
+
+import 'library_imports_shown.dart';
+
+test(MirrorSystem mirrors) {
+ LibraryMirror shown = mirrors.findLibrary(#library_imports_shown);
+ LibraryMirror a = mirrors.findLibrary(#library_imports_a);
+ LibraryMirror b = mirrors.findLibrary(#library_imports_b);
+ LibraryMirror core = mirrors.findLibrary(#dart.core);
+
+ Expect.setEquals([a, b, core],
+ shown.libraryDependencies.map((dep) => dep.targetLibrary));
+
+ Expect.stringEquals(
+ 'import dart.core\n'
+ 'import library_imports_a\n'
+ ' show somethingFromA\n'
+ ' show somethingFromBoth\n'
+ 'import library_imports_b\n'
+ ' show somethingFromB\n',
+ stringifyDependencies(shown));
+}
+
+main() {
+ test(currentMirrorSystem());
+}
diff --git a/tests/lib/mirrors/stringify.dart b/tests/lib/mirrors/stringify.dart
index c848f93..067769a 100644
--- a/tests/lib/mirrors/stringify.dart
+++ b/tests/lib/mirrors/stringify.dart
@@ -114,6 +114,39 @@
return 'Method($buffer)';
}
+stringifyDependencies(LibraryMirror l) {
+ n(s) => s is Symbol ? MirrorSystem.getName(s) : s;
+ compareDep(a, b) =>
+ n(a.targetLibrary.simpleName).compareTo(n(b.targetLibrary.simpleName));
+ compareCom(a, b) => n(a.identifier).compareTo(n(b.identifier));
+ compareFirst(a, b) => a[0].compareTo(b[0]);
+ sortBy(c, p) => new List.from(c)..sort(p);
+
+ var buffer = new StringBuffer();
+ sortBy(l.libraryDependencies, compareDep).forEach((dep) {
+ if (dep.isImport) buffer.write('import ');
+ if (dep.isExport) buffer.write('export ');
+ buffer.write(n(dep.targetLibrary.simpleName));
+ if (dep.prefix != null) buffer.write(' as ${n(dep.prefix)}');
+ buffer.write('\n');
+
+ List flattenedCombinators = new List();
+ dep.combinators.forEach((com) {
+ com.identifiers.forEach((ident) {
+ flattenedCombinators.add([n(ident), com.isShow, com.isHide]);
+ });
+ });
+ sortBy(flattenedCombinators, compareFirst).forEach((triple) {
+ buffer.write(' ');
+ if (triple[1]) buffer.write('show ');
+ if (triple[2]) buffer.write('hide ');
+ buffer.write(triple[0]);
+ buffer.write('\n');
+ });
+ });
+ return buffer.toString();
+}
+
stringify(value) {
if (value is Map) return stringifyMap(value);
if (value is Iterable) return stringifyIterable(value);
diff --git a/tests/standalone/io/signal_test_script.dart b/tests/standalone/io/signal_test_script.dart
index 7f43c5a..02b2c25 100644
--- a/tests/standalone/io/signal_test_script.dart
+++ b/tests/standalone/io/signal_test_script.dart
@@ -3,9 +3,12 @@
// BSD-style license that can be found in the LICENSE file.
import "dart:io";
+import "dart:async";
void main(args) {
var signal;
+ // This process should die if it never receives a signal.
+ var timeout = new Timer(new Duration(seconds: 25), () => exit(1));
switch (args[0]) {
case 'SIGHUP': signal = ProcessSignal.SIGHUP; break;
case 'SIGINT': signal = ProcessSignal.SIGINT; break;
@@ -18,7 +21,7 @@
if (signal != s) exit(1);
if (signal.toString() != args[0]) exit(1);
print('got signal');
+ timeout.cancel();
});
print("ready");
}
-
diff --git a/tests/standalone/io/test_harness_analyzer_test.dart b/tests/standalone/io/test_harness_analyzer_test.dart
index 82b289d..f2a2b40 100644
--- a/tests/standalone/io/test_harness_analyzer_test.dart
+++ b/tests/standalone/io/test_harness_analyzer_test.dart
@@ -4,7 +4,6 @@
import '../../../tools/test.dart' as test_dart;
import '../../../tools/testing/dart/launch_browser.dart' as launch_browser;
-import '../../../tools/testing/dart/browser_perf_testing/lib/browser_perf_testing.dart' as browser_perf_testing;
// The purpose of this test is to run the analyzer on it and make sure our
// testing scripts are free of warnings/errors.
diff --git a/tests/standalone/issue14236_test.dart b/tests/standalone/issue14236_test.dart
index 3baeb38..cb41800 100644
--- a/tests/standalone/issue14236_test.dart
+++ b/tests/standalone/issue14236_test.dart
Binary files differ
diff --git a/tests/standalone/standalone.status b/tests/standalone/standalone.status
index e21c3b4..f5d3421 100644
--- a/tests/standalone/standalone.status
+++ b/tests/standalone/standalone.status
@@ -104,6 +104,9 @@
out_of_memory_test: Skip # passes on Mac, crashes on Linux
oom_error_stacktrace_test: Skip # Fails on Linux
+[ $arch == arm ]
+vmservice/isolate_echo_test: Fail # Issue 17431
+
[ $arch == simmips || $arch == mips ]
io/web_socket_test: Pass, Slow
io/http_server_response_test: Pass, Slow
@@ -111,10 +114,8 @@
oom_error_stacktrace_test: Skip # Fails on Linux
[ $arch == mips ]
-io/test_extension_test: Fail
-io/test_extension_fail_test: Fail
-io/dart_std_io_pipe_test: Fail
-io/file_read_special_device_test: Fail
+io/signals_test: Fail # dartbug.com/17440
+io/file_stat_test: Fail # dartbug.com/17440
[ $compiler == none && $runtime == dartium && $unchecked ]
assert_test: Fail # Issue 13719: Please triage this failure.
diff --git a/tests/standalone/vmservice/isolate_echo_test.dart b/tests/standalone/vmservice/isolate_echo_test.dart
index d305248..2f311d2 100644
--- a/tests/standalone/vmservice/isolate_echo_test.dart
+++ b/tests/standalone/vmservice/isolate_echo_test.dart
@@ -14,22 +14,22 @@
onRequestCompleted(Map reply) {
Expect.equals('message', reply['type']);
- Expect.equals(3, reply['message']['arguments'].length);
- Expect.equals('_echo', reply['message']['arguments'][0]);
- Expect.equals('foo', reply['message']['arguments'][1]);
- Expect.equals('bar', reply['message']['arguments'][2]);
+ Expect.equals(3, reply['request']['arguments'].length);
+ Expect.equals('_echo', reply['request']['arguments'][0]);
+ Expect.equals('foo', reply['request']['arguments'][1]);
+ Expect.equals('bar', reply['request']['arguments'][2]);
- Expect.equals(4, reply['message']['option_keys'].length);
- Expect.equals('a', reply['message']['option_keys'][0]);
- Expect.equals('k', reply['message']['option_keys'][1]);
- Expect.equals('d', reply['message']['option_keys'][2]);
- Expect.equals('z', reply['message']['option_keys'][3]);
+ Expect.equals(4, reply['request']['option_keys'].length);
+ Expect.equals('a', reply['request']['option_keys'][0]);
+ Expect.equals('k', reply['request']['option_keys'][1]);
+ Expect.equals('d', reply['request']['option_keys'][2]);
+ Expect.equals('z', reply['request']['option_keys'][3]);
- Expect.equals(4, reply['message']['option_values'].length);
- Expect.equals('b', reply['message']['option_values'][0]);
- Expect.equals('', reply['message']['option_values'][1]);
- Expect.equals('e', reply['message']['option_values'][2]);
- Expect.equals('w', reply['message']['option_values'][3]);
+ Expect.equals(4, reply['request']['option_values'].length);
+ Expect.equals('b', reply['request']['option_values'][0]);
+ Expect.equals('', reply['request']['option_values'][1]);
+ Expect.equals('e', reply['request']['option_values'][2]);
+ Expect.equals('w', reply['request']['option_values'][3]);
}
}
diff --git a/tools/VERSION b/tools/VERSION
index 893bf1a..bc3ad81 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
MAJOR 1
MINOR 3
PATCH 0
-PRERELEASE 3
-PRERELEASE_PATCH 2
+PRERELEASE 4
+PRERELEASE_PATCH 0
diff --git a/tools/bots/bot_utils.py b/tools/bots/bot_utils.py
index 44366db..ab49a1c 100644
--- a/tools/bots/bot_utils.py
+++ b/tools/bots/bot_utils.py
@@ -210,23 +210,31 @@
class GSUtil(object):
GSUTIL_IS_SHELL_SCRIPT = False
GSUTIL_PATH = None
+ USE_DART_REPO_VERSION = False
def _layzCalculateGSUtilPath(self):
if not GSUtil.GSUTIL_PATH:
buildbot_gsutil = utils.GetBuildbotGSUtilPath()
- if os.path.isfile(buildbot_gsutil):
+ if os.path.isfile(buildbot_gsutil) and not GSUtil.USE_DART_REPO_VERSION:
GSUtil.GSUTIL_IS_SHELL_SCRIPT = True
GSUtil.GSUTIL_PATH = buildbot_gsutil
else:
dart_gsutil = os.path.join(DART_DIR, 'third_party', 'gsutil', 'gsutil')
- possible_locations = (list(os.environ['PATH'].split(os.pathsep))
- + [dart_gsutil])
- for directory in possible_locations:
- location = os.path.join(directory, 'gsutil')
- if os.path.isfile(location):
- GSUtil.GSUTIL_IS_SHELL_SCRIPT = False
- GSUtil.GSUTIL_PATH = location
- break
+ if os.path.isfile(dart_gsutil):
+ GSUtil.GSUTIL_IS_SHELL_SCRIPT = False
+ GSUtil.GSUTIL_PATH = dart_gsutil
+ elif GSUtil.USE_DART_REPO_VERSION:
+ raise Exception("Dart repository version of gsutil required, "
+ "but not found.")
+ else:
+ # We did not find gsutil, look in path
+ possible_locations = list(os.environ['PATH'].split(os.pathsep))
+ for directory in possible_locations:
+ location = os.path.join(directory, 'gsutil')
+ if os.path.isfile(location):
+ GSUtil.GSUTIL_IS_SHELL_SCRIPT = False
+ GSUtil.GSUTIL_PATH = location
+ break
assert GSUtil.GSUTIL_PATH
def execute(self, gsutil_args):
diff --git a/tools/bots/compiler.py b/tools/bots/compiler.py
index fd4880a..a53d90b 100644
--- a/tools/bots/compiler.py
+++ b/tools/bots/compiler.py
@@ -25,7 +25,7 @@
r'dart2js-(linux|mac|windows)(-(jsshell))?-(debug|release)(-(checked|host-checked))?(-(host-checked))?(-(minified))?(-(x64))?-?(\d*)-?(\d*)')
DART2JS_FULL_BUILDER = r'dart2js-full-(linux|mac|windows)(-checked)?(-minified)?-(\d+)-(\d+)'
WEB_BUILDER = (
- r'dart2js-(ie9|ie10|ff|safari|chrome|chromeOnAndroid|opera|drt)-(win7|win8|mac10\.8|mac10\.7|linux)(-(all|html))?(-(csp))?(-(\d+)-(\d+))?')
+ r'dart2js-(ie9|ie10|ie11|ff|safari|chrome|chromeOnAndroid|opera|drt)-(win7|win8|mac10\.8|mac10\.7|linux)(-(all|html))?(-(csp))?(-(\d+)-(\d+))?')
DART2JS_FULL_CONFIGURATIONS = {
'linux' : [ ],
@@ -136,8 +136,8 @@
def NeedsXterm(compiler, runtime):
- return runtime in ['ie9', 'ie10', 'chrome', 'safari', 'opera', 'ff', 'drt',
- 'dartium']
+ return runtime in ['ie9', 'ie10', 'ie11', 'chrome', 'safari', 'opera',
+ 'ff', 'drt', 'dartium']
def TestStepName(name, flags):
@@ -261,7 +261,7 @@
TestStep("dart2js_unit", mode, system, 'none', 'vm', ['dart2js'],
unit_test_flags, arch)
- if compiler == 'dart2js' and system == 'windows' and runtime == 'ie10':
+ if compiler == 'dart2js' and runtime in ['ie10', 'ie11']:
TestStep("%s-%s" % (compiler, runtime), mode, system, compiler, runtime,
['html'], flags, arch)
else:
diff --git a/tools/bots/dartium_android.py b/tools/bots/dartium_android.py
index 7fd4af4..138c7dc 100644
--- a/tools/bots/dartium_android.py
+++ b/tools/bots/dartium_android.py
@@ -44,9 +44,11 @@
with bot.BuildStep('Upload apk'):
revision = utils.GetSVNRevision()
namer = bot_utils.GCSNamer(internal=True)
+ # The version of gsutil we have on the bots is not new enough to support
+ # the acl set commands.
+ bot_utils.GSUtil.USE_DART_REPO_VERSION = True
gsutil = bot_utils.GSUtil()
-
# Archive dartuim
local = os.path.join(options.build_products_dir, APK_LOCATION)
# TODO(whesse): pass in arch and mode from reciepe
@@ -82,8 +84,7 @@
print "No build products directory given."
sys.exit(1)
- # Reenable once we have new gsutil working
- # UploadAPKs(options)
+ UploadAPKs(options)
sys.exit(0)
if __name__ == '__main__':
diff --git a/tools/build.py b/tools/build.py
index 1e83352..7fc3187 100755
--- a/tools/build.py
+++ b/tools/build.py
@@ -105,7 +105,7 @@
print ("Cross-compilation to %s is not supported on host os %s."
% (os, HOST_OS))
return False
- if not arch in ['ia32', 'arm']:
+ if not arch in ['ia32', 'arm', 'mips']:
print ("Cross-compilation to %s is not supported for architecture %s."
% (os, arch))
return False
@@ -114,9 +114,6 @@
if args == []:
print "For android builds you must specify a target, such as 'runtime'."
return False
- if 'v8' in args:
- print "The v8 target is not supported for android builds."
- return False
return True
diff --git a/tools/create_tarball.py b/tools/create_tarball.py
index caaa81c..e71ebf1 100755
--- a/tools/create_tarball.py
+++ b/tools/create_tarball.py
@@ -40,7 +40,7 @@
versiondir = ''
# Ignore Git/SVN files, checked-in binaries, backup files, etc..
-ignoredPaths = ['tools/testing/bin'
+ignoredPaths = ['tools/testing/bin',
'third_party/7zip', 'third_party/android_tools',
'third_party/clang', 'third_party/d8',
'third_party/firefox_jsshell']
diff --git a/tools/dom/src/dart2js_DOMImplementation.dart b/tools/dom/src/dart2js_DOMImplementation.dart
index 78a54b3..a844f23 100644
--- a/tools/dom/src/dart2js_DOMImplementation.dart
+++ b/tools/dom/src/dart2js_DOMImplementation.dart
@@ -51,15 +51,19 @@
}
// TODO(efortuna): Remove this method. dartbug.com/16814
- Events get on => throw new UnimplementedError();
+ Events get on => throw new UnsupportedError(
+ 'You can only attach EventListeners to your own window.');
// TODO(efortuna): Remove this method. dartbug.com/16814
void addEventListener(String type, EventListener listener, [bool useCapture])
- => throw new UnimplementedError();
+ => throw new UnsupportedError(
+ 'You can only attach EventListeners to your own window.');
// TODO(efortuna): Remove this method. dartbug.com/16814
- bool dispatchEvent(Event event) => throw new UnimplementedError();
+ bool dispatchEvent(Event event) => throw new UnsupportedError(
+ 'You can only attach EventListeners to your own window.');
// TODO(efortuna): Remove this method. dartbug.com/16814
void removeEventListener(String type, EventListener listener,
- [bool useCapture]) => throw new UnimplementedError();
+ [bool useCapture]) => throw new UnsupportedError(
+ 'You can only attach EventListeners to your own window.');
}
class _LocationCrossFrame implements LocationBase {
diff --git a/tools/dom/src/native_DOMImplementation.dart b/tools/dom/src/native_DOMImplementation.dart
index d84e396..af81731 100644
--- a/tools/dom/src/native_DOMImplementation.dart
+++ b/tools/dom/src/native_DOMImplementation.dart
@@ -473,6 +473,21 @@
// Implementation support.
String get typeName => "Window";
+
+ // TODO(efortuna): Remove this method. dartbug.com/16814
+ Events get on => throw new UnsupportedError(
+ 'You can only attach EventListeners to your own window.');
+ // TODO(efortuna): Remove this method. dartbug.com/16814
+ void addEventListener(String type, EventListener listener, [bool useCapture])
+ => throw new UnsupportedError(
+ 'You can only attach EventListeners to your own window.');
+ // TODO(efortuna): Remove this method. dartbug.com/16814
+ bool dispatchEvent(Event event) => throw new UnsupportedError(
+ 'You can only attach EventListeners to your own window.');
+ // TODO(efortuna): Remove this method. dartbug.com/16814
+ void removeEventListener(String type, EventListener listener,
+ [bool useCapture]) => throw new UnsupportedError(
+ 'You can only attach EventListeners to your own window.');
}
class _HistoryCrossFrame extends NativeFieldWrapperClass2 implements HistoryBase {
diff --git a/tools/get_archive.py b/tools/get_archive.py
index a7cf26d..a00bb9c 100755
--- a/tools/get_archive.py
+++ b/tools/get_archive.py
@@ -55,7 +55,7 @@
# Dictionary storing the earliest revision of each download we have stored.
LAST_VALID = {'dartium': 4285, 'chromedriver': 7823, 'sdk': 9761, 'drt': 5342}
-sys.path.append(os.path.join(GSUTIL_DIR, 'boto'))
+sys.path.append(os.path.join(GSUTIL_DIR, 'third_party', 'boto'))
import boto
diff --git a/tools/gyp/configurations.gypi b/tools/gyp/configurations.gypi
index 79f93dd..4100beb 100644
--- a/tools/gyp/configurations.gypi
+++ b/tools/gyp/configurations.gypi
@@ -95,42 +95,47 @@
# Configurations
'DebugIA32': {
'inherit_from': [
- 'Dart_Base', 'Dart_ia32_Base', 'Dart_Debug',
- 'Dart_<(dart_target_os)_Base',
- 'Dart_<(dart_target_os)_ia32_Base',
- 'Dart_<(dart_target_os)_Debug',],
+ 'Dart_Base', 'Dart_ia32_Base', 'Dart_Debug',
+ 'Dart_<(dart_target_os)_Base',
+ 'Dart_<(dart_target_os)_ia32_Base',
+ 'Dart_<(dart_target_os)_Debug',
+ ],
},
'ReleaseIA32': {
'inherit_from': [
- 'Dart_Base', 'Dart_ia32_Base', 'Dart_Release',
- 'Dart_<(dart_target_os)_Base',
- 'Dart_<(dart_target_os)_ia32_Base',
- 'Dart_<(dart_target_os)_Release',],
+ 'Dart_Base', 'Dart_ia32_Base', 'Dart_Release',
+ 'Dart_<(dart_target_os)_Base',
+ 'Dart_<(dart_target_os)_ia32_Base',
+ 'Dart_<(dart_target_os)_Release',
+ ],
},
'DebugX64': {
'inherit_from': [
- 'Dart_Base', 'Dart_x64_Base', 'Dart_Debug',
- 'Dart_<(dart_target_os)_Base',
- 'Dart_<(dart_target_os)_x64_Base',
- 'Dart_<(dart_target_os)_Debug',],
+ 'Dart_Base', 'Dart_x64_Base', 'Dart_Debug',
+ 'Dart_<(dart_target_os)_Base',
+ 'Dart_<(dart_target_os)_x64_Base',
+ 'Dart_<(dart_target_os)_Debug',
+ ],
},
'ReleaseX64': {
'inherit_from': [
- 'Dart_Base', 'Dart_x64_Base', 'Dart_Release',
- 'Dart_<(dart_target_os)_Base',
- 'Dart_<(dart_target_os)_x64_Base',
- 'Dart_<(dart_target_os)_Release',],
+ 'Dart_Base', 'Dart_x64_Base', 'Dart_Release',
+ 'Dart_<(dart_target_os)_Base',
+ 'Dart_<(dart_target_os)_x64_Base',
+ 'Dart_<(dart_target_os)_Release',
+ ],
},
'DebugSIMARM': {
'inherit_from': [
- 'Dart_Base', 'Dart_simarm_Base', 'Dart_Debug',
- 'Dart_<(dart_target_os)_Base',
- 'Dart_<(dart_target_os)_simarm_Base',
- 'Dart_<(dart_target_os)_Debug',],
+ 'Dart_Base', 'Dart_simarm_Base', 'Dart_Debug',
+ 'Dart_<(dart_target_os)_Base',
+ 'Dart_<(dart_target_os)_simarm_Base',
+ 'Dart_<(dart_target_os)_Debug',
+ ],
'defines': [
'DEBUG',
],
@@ -138,18 +143,20 @@
'ReleaseSIMARM': {
'inherit_from': [
- 'Dart_Base', 'Dart_simarm_Base', 'Dart_Release',
- 'Dart_<(dart_target_os)_Base',
- 'Dart_<(dart_target_os)_simarm_Base',
- 'Dart_<(dart_target_os)_Release',],
+ 'Dart_Base', 'Dart_simarm_Base', 'Dart_Release',
+ 'Dart_<(dart_target_os)_Base',
+ 'Dart_<(dart_target_os)_simarm_Base',
+ 'Dart_<(dart_target_os)_Release',
+ ],
},
'DebugSIMMIPS': {
'inherit_from': [
- 'Dart_Base', 'Dart_simmips_Base', 'Dart_Debug',
- 'Dart_<(dart_target_os)_Base',
- 'Dart_<(dart_target_os)_simmips_Base',
- 'Dart_<(dart_target_os)_Debug',],
+ 'Dart_Base', 'Dart_simmips_Base', 'Dart_Debug',
+ 'Dart_<(dart_target_os)_Base',
+ 'Dart_<(dart_target_os)_simmips_Base',
+ 'Dart_<(dart_target_os)_Debug',
+ ],
'defines': [
'DEBUG',
],
@@ -157,44 +164,85 @@
'ReleaseSIMMIPS': {
'inherit_from': [
- 'Dart_Base', 'Dart_simmips_Base', 'Dart_Release',
- 'Dart_<(dart_target_os)_Base',
- 'Dart_<(dart_target_os)_simmips_Base',
- 'Dart_<(dart_target_os)_Release',],
+ 'Dart_Base', 'Dart_simmips_Base', 'Dart_Release',
+ 'Dart_<(dart_target_os)_Base',
+ 'Dart_<(dart_target_os)_simmips_Base',
+ 'Dart_<(dart_target_os)_Release',
+ ],
},
# ARM and MIPS hardware configurations are only for Linux and Android.
+ 'DebugXARM': {
+ 'inherit_from': [
+ 'Dart_Base', 'Dart_arm_Base', 'Dart_Debug',
+ 'Dart_Linux_Base',
+ 'Dart_Linux_xarm_Base',
+ 'Dart_Linux_Debug',
+ ],
+ },
+
+ 'ReleaseXARM': {
+ 'inherit_from': [
+ 'Dart_Base', 'Dart_arm_Base', 'Dart_Release',
+ 'Dart_Linux_Base',
+ 'Dart_Linux_xarm_Base',
+ 'Dart_Linux_Release',
+ ],
+ },
+
'DebugARM': {
'inherit_from': [
- 'Dart_Base', 'Dart_arm_Base', 'Dart_Debug',
- 'Dart_Linux_Base',
- 'Dart_Linux_arm_Base',
- 'Dart_Linux_Debug',],
+ 'Dart_Base', 'Dart_arm_Base', 'Dart_Debug',
+ 'Dart_Linux_Base',
+ 'Dart_Linux_arm_Base',
+ 'Dart_Linux_Debug',
+ ],
},
'ReleaseARM': {
'inherit_from': [
- 'Dart_Base', 'Dart_arm_Base', 'Dart_Release',
- 'Dart_Linux_Base',
- 'Dart_Linux_arm_Base',
- 'Dart_Linux_Release',],
+ 'Dart_Base', 'Dart_arm_Base', 'Dart_Release',
+ 'Dart_Linux_Base',
+ 'Dart_Linux_arm_Base',
+ 'Dart_Linux_Release',
+ ],
+ },
+
+ 'DebugXMIPS': {
+ 'inherit_from': [
+ 'Dart_Base', 'Dart_mips_Base', 'Dart_Debug',
+ 'Dart_Linux_Base',
+ 'Dart_Linux_xmips_Base',
+ 'Dart_Linux_Debug',
+ ],
+ },
+
+ 'ReleaseXMIPS': {
+ 'inherit_from': [
+ 'Dart_Base', 'Dart_mips_Base', 'Dart_Release',
+ 'Dart_Linux_Base',
+ 'Dart_Linux_xmips_Base',
+ 'Dart_Linux_Release',
+ ],
},
'DebugMIPS': {
'inherit_from': [
- 'Dart_Base', 'Dart_mips_Base', 'Dart_Debug',
- 'Dart_Linux_Base',
- 'Dart_Linux_mips_Base',
- 'Dart_Linux_Debug',],
+ 'Dart_Base', 'Dart_mips_Base', 'Dart_Debug',
+ 'Dart_Linux_Base',
+ 'Dart_Linux_mips_Base',
+ 'Dart_Linux_Debug',
+ ],
},
'ReleaseMIPS': {
'inherit_from': [
- 'Dart_Base', 'Dart_mips_Base', 'Dart_Release',
- 'Dart_Linux_Base',
- 'Dart_Linux_mips_Base',
- 'Dart_Linux_Release',],
+ 'Dart_Base', 'Dart_mips_Base', 'Dart_Release',
+ 'Dart_Linux_Base',
+ 'Dart_Linux_mips_Base',
+ 'Dart_Linux_Release',
+ ],
},
# Android configurations. The configuration names explicitly include
@@ -204,34 +252,38 @@
# gyp, it will still be 'linux'.
'DebugAndroidIA32': {
'inherit_from': [
- 'Dart_Base', 'Dart_ia32_Base', 'Dart_Debug',
- 'Dart_Android_Base',
- 'Dart_Android_ia32_Base',
- 'Dart_Android_Debug',],
+ 'Dart_Base', 'Dart_ia32_Base', 'Dart_Debug',
+ 'Dart_Android_Base',
+ 'Dart_Android_ia32_Base',
+ 'Dart_Android_Debug',
+ ],
},
'ReleaseAndroidIA32': {
'inherit_from': [
- 'Dart_Base', 'Dart_ia32_Base', 'Dart_Release',
- 'Dart_Android_Base',
- 'Dart_Android_ia32_Base',
- 'Dart_Android_Release',],
+ 'Dart_Base', 'Dart_ia32_Base', 'Dart_Release',
+ 'Dart_Android_Base',
+ 'Dart_Android_ia32_Base',
+ 'Dart_Android_Release',
+ ],
},
'DebugAndroidARM': {
'inherit_from': [
- 'Dart_Base', 'Dart_arm_Base', 'Dart_Debug',
- 'Dart_Android_Base',
- 'Dart_Android_arm_Base',
- 'Dart_Android_Debug',],
+ 'Dart_Base', 'Dart_arm_Base', 'Dart_Debug',
+ 'Dart_Android_Base',
+ 'Dart_Android_arm_Base',
+ 'Dart_Android_Debug',
+ ],
},
'ReleaseAndroidARM': {
'inherit_from': [
- 'Dart_Base', 'Dart_arm_Base', 'Dart_Release',
- 'Dart_Android_Base',
- 'Dart_Android_arm_Base',
- 'Dart_Android_Release',],
+ 'Dart_Base', 'Dart_arm_Base', 'Dart_Release',
+ 'Dart_Android_Base',
+ 'Dart_Android_arm_Base',
+ 'Dart_Android_Release',
+ ],
},
# These targets assume that target_arch is passed in explicitly
diff --git a/tools/gyp/configurations_make.gypi b/tools/gyp/configurations_make.gypi
index b7a9f74..4f9d748 100644
--- a/tools/gyp/configurations_make.gypi
+++ b/tools/gyp/configurations_make.gypi
@@ -49,13 +49,13 @@
],
},
- 'Dart_Linux_arm_Base': {
+ # ARM cross-build
+ 'Dart_Linux_xarm_Base': {
'abstract': 1,
'target_conditions': [
['_toolset=="target"', {
'cflags': [
'-marm',
- '-march=armv7-a',
'-mfpu=vfp',
'-Wno-psabi', # suppresses va_list warning
'-fno-strict-overflow',
@@ -71,13 +71,29 @@
}]]
},
+ # ARM native build
+ 'Dart_Linux_arm_Base': {
+ 'abstract': 1,
+ 'cflags': [
+ '-marm',
+ '-mfpu=vfp',
+ '-Wno-psabi', # suppresses va_list warning
+ '-fno-strict-overflow',
+ ],
+ 'defines': [
+ # In build.py, we specify the hf compiler.
+ 'ARM_FLOAT_ABI_HARD',
+ ],
+ },
+
'Dart_Linux_simmips_Base': {
'abstract': 1,
'cflags': [ '-O3', '-m32', '-msse2' ],
'ldflags': [ '-m32', ],
},
- 'Dart_Linux_mips_Base': {
+ # MIPS cross-build
+ 'Dart_Linux_xmips_Base': {
'abstract': 1,
'target_conditions': [
['_toolset=="target"', {
@@ -93,6 +109,16 @@
}]]
},
+ # MIPS native build
+ 'Dart_Linux_mips_Base': {
+ 'abstract': 1,
+ 'cflags': [
+ '-march=mips32',
+ '-mhard-float',
+ '-fno-strict-overflow',
+ ],
+ },
+
'Dart_Linux_Debug': {
'abstract': 1,
'cflags': [
diff --git a/tools/testing/dart/browser_perf_testing/lib/browser_perf_testing.dart b/tools/testing/dart/browser_perf_testing/lib/browser_perf_testing.dart
deleted file mode 100644
index 2a79ab8..0000000
--- a/tools/testing/dart/browser_perf_testing/lib/browser_perf_testing.dart
+++ /dev/null
@@ -1,146 +0,0 @@
-// Copyright (c) 2014, 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.
-
-/// Dart script to launch performance tests without WebDriver/Selenium.
-///
-/// WARNING: Although this is laid out like a package, it is not really a
-/// package since it relies on test.dart files!
-library browser_perf_testing;
-
-import '../../browser_controller.dart';
-import '../../utils.dart';
-import '../../http_server.dart';
-import 'dart:async';
-import 'dart:io';
-import 'dart:convert';
-import 'package:path/path.dart' as path;
-import 'package:args/args.dart' as args_parser;
-
-final String ADDRESS = '127.0.0.1';
-
-/// A map that is passed to the testing framework to specify what ports the
-/// browser controller runs on.
-final Map SERVER_CONFIG = {
- 'test_driver_port': 0,
- 'test_driver_error_port': 0
-};
-
-void main (List<String> args) {
- var options = _parseArguments(args);
-
- // Start a server to serve the entire repo: the http server is available on
- // window.location.port.
- var servers = new TestingServers(
- new Path('/Users/efortuna/dart-git2/dart/xcodebuild/ReleaseIA32'),
- false, options['browser'], path.dirname(path.dirname(path.dirname(
- path.dirname(path.dirname(path.dirname(Platform.script.path)))))));
- servers.startServers(ADDRESS).then((_) {
- _runPerfTests(options, servers);
- });
-}
-
-/// Helper function to parse the arguments for this file.
-Map _parseArguments(List<String> args) {
- var parser = new args_parser.ArgParser();
- parser.addOption('browser', defaultsTo: 'chrome', help: 'Name of the browser'
- ' to run this test with.');
- parser.addOption('termination_test_file', defaultsTo:
- '/root_dart/samples/third_party/dromaeo/dromaeo_end_condition.js',
- help: 'Path to a javascript file that contains the function '
- '"testIsComplete" tests whether the performance test has finished '
- 'running. This is in a form that can be served up by '
- 'http_server.dart, so it begins with /root_dart or some other server '
- 'understood prefix.');
- parser.addOption('test_path', defaultsTo:
- '/root_dart/samples/third_party/dromaeo/index-js.html?jsANDqueryORjs'
- 'ANDtraverseORjsANDattributes', help: 'Path to the performance test we '
- 'wish to run. This is in a form that can be served up by '
- 'http_server.dart, so it begins with /root_dart or some other server '
- 'understood prefix.');
- parser.addOption('checked', defaultsTo: false,
- help: 'Run this test in checked mode.');
- parser.addFlag('help', abbr: 'h', negatable: false, callback: (help) {
- if (help) {
- print(parser.getUsage());
- exit(0);
- };
- });
- parser.addOption('timeout', defaultsTo: 300,
- help: 'Maximum amount of time to let a test run, in seconds.');
- return parser.parse(args);
-}
-
-void _runPerfTests(Map options, TestingServers servers) {
- var browserName = options['browser'];
-
- var testRunner = new BrowserTestRunner(SERVER_CONFIG, ADDRESS, browserName, 1,
- checkedMode: options['checked'],
- testingServer: new BrowserPerfTestingServer(browserName,
- options['termination_test_file'], servers.port));
-
- var url = 'http://$ADDRESS:${servers.port}${options["test_path"]}';
-
- BrowserTest browserTest = new BrowserTest(url,
- (BrowserTestOutput output) {
- var eventQueue = JSON.decode(output.lastKnownMessage);
- var lastEvent = eventQueue.last;
- var lines = lastEvent['value'].split('\n');
- for (var line in lines) {
- print(line);
- }
- testRunner.terminate();
- servers.stopServers();
- }, options['timeout']);
-
- testRunner.start().then((started) {
- if (started) {
- testRunner.queueTest(browserTest);
- } else {
- print("Issue starting browser test runner $started");
- exit(1);
- }
- });
-}
-
-/// Server for controlling and running performance tests. Note the tests
-/// themselves are served on the local file system (to eliminate any additional
-/// potential sources of lag), but we need a server to communicate when the test
-/// is done.
-class BrowserPerfTestingServer extends BrowserTestingServer {
- // Path to the script containing the ending condition of the performance test,
- // in the form of /root_dart, /root_build, or some other, as per the form of
- // url expected from http_server.dart.
- String endConditionScript;
- /// Port number to access the server serving the whole Dart repository.
- int repoPort;
-
- BrowserPerfTestingServer(String browserName, this.endConditionScript,
- this.repoPort) : super(SERVER_CONFIG, ADDRESS,
- !Browser.BROWSERS_WITH_WINDOW_SUPPORT.contains(browserName));
-
- /// We create a slightly modified version of the original browser_controller
- /// driver page.
- String getDriverPage(String browserId) {
- var orig = super.getDriverPage(browserId);
- //TODO(efortuna): Hacky!
- var insertIndex = orig.indexOf('<script type');
- var otherInsert = orig.indexOf('} else {',
- orig.indexOf('if (isStatusUpdate)'));
- var result = orig.substring(0, insertIndex) + """
- <!-- To create a performance test, you must write a script that provides an
- ending condition for the particular test, in the form /root_dart/foo (or
- whatever base from http_server). // TODO not hard code.-->
- <script src="http://$localIp:$repoPort$endConditionScript"></script>
-""" + orig.substring(insertIndex, otherInsert) + """
- if (testIsComplete(msg)) {
- var obj = new Object();
- obj['message'] = msg;
- obj['is_first_message'] = false;
- obj['is_status_update'] = false;
- obj['is_done'] = true;
- window.postMessage(JSON.stringify(obj), '*');
- }""" + orig.substring(otherInsert);
- return result;
- }
-}
diff --git a/tools/testing/dart/perf_test_controller.js b/tools/testing/dart/perf_test_controller.js
deleted file mode 100644
index f6990bb..0000000
--- a/tools/testing/dart/perf_test_controller.js
+++ /dev/null
@@ -1,9 +0,0 @@
-// Copyright (c) 2014, 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.
-
-/// Helper file to make performance tests run with the Dart browser controller
-/// in test.dart.
-
-// First import test_controller.js
-dartPrint('unittest-suite-wait-for-done');
diff --git a/tools/testing/dart/test_suite.dart b/tools/testing/dart/test_suite.dart
index 4937643..7c69d32 100644
--- a/tools/testing/dart/test_suite.dart
+++ b/tools/testing/dart/test_suite.dart
@@ -2068,16 +2068,28 @@
if (configuration['build_directory'] != '') {
return configuration['build_directory'];
}
- var outputDir = '';
- var system = configuration['system'];
- if (system == 'linux') {
- outputDir = 'out/';
- } else if (system == 'macos') {
- outputDir = 'xcodebuild/';
- } else if (system == 'windows') {
- outputDir = 'build/';
+
+ return "${outputDir(configuration)}${configurationDir(configuration)}";
+ }
+
+ static getValidOutputDir(Map configuration, String mode, String arch) {
+ // We allow our code to have been cross compiled, i.e., that there
+ // is an X in front of the arch. We don't allow both a cross compiled
+ // and a normal version to be present (except if you specifically pass
+ // in the build_directory).
+ var normal = '$mode$arch';
+ var cross = '${mode}X$arch';
+ var outDir = outputDir(configuration);
+ var normalDir = new Directory(new Path('$outDir$normal').toNativePath());
+ var crossDir = new Directory(new Path('$outDir$cross').toNativePath());
+ if (normalDir.existsSync() && crossDir.existsSync()) {
+ throw "You can't have both $normalDir and $crossDir, we don't know which"
+ " binary to use";
}
- return "$outputDir${configurationDir(configuration)}";
+ if (crossDir.existsSync()) {
+ return cross;
+ }
+ return normal;
}
static String configurationDir(Map configuration) {
@@ -2088,7 +2100,7 @@
var mode = (configuration['mode'] == 'debug') ? 'Debug' : 'Release';
var arch = configuration['arch'].toUpperCase();
if (currentWorkingDirectory != dartDir()) {
- return '$mode$arch';
+ return getValidOutputDir(configuration, mode, arch);
} else {
return mode;
}
diff --git a/tools/testing/perf_testing/run_perf_tests.py b/tools/testing/perf_testing/run_perf_tests.py
index 8b790cb2..1034e6d 100755
--- a/tools/testing/perf_testing/run_perf_tests.py
+++ b/tools/testing/perf_testing/run_perf_tests.py
@@ -174,7 +174,7 @@
# don't have test statistics for what's passing on x64. Eliminate arch
# specification when we have tests running on x64, too.
shutil.rmtree(os.path.join(os.getcwd(),
- utils.GetBuildRoot(utils.GuessOS(), 'release', 'ia32')),
+ utils.GetBuildRoot(utils.GuessOS())),
onerror=TestRunner._OnRmError)
lines = self.RunCmd([os.path.join('.', 'tools', 'build.py'), '-m',
'release', '--arch=ia32', 'create_sdk'])
@@ -721,14 +721,20 @@
return
# Build tests.
- dromaeo_path = os.path.join('samples', 'third_party', 'dromaeo')
+ # TODO(efortuna): Make the pub functionality a separate function.
current_path = os.getcwd()
- os.chdir(dromaeo_path)
- stdout, _ = self.test.test_runner.RunCmd(
- ['python', 'generate_perf_and_dart2js_tests.py'])
+ os.chdir(os.path.join(DART_REPO_LOC, 'samples', 'third_party',
+ 'dromaeo'))
+ self.test.test_runner.RunCmd([os.path.join(DART_REPO_LOC,
+ utils.GetBuildRoot(utils.GuessOS(), 'release', 'ia32'),
+ 'dart-sdk', 'bin', 'pub'), 'install']) # TODO: pub upgrade?
+ stdout, _ = self.test.test_runner.RunCmd([os.path.join(DART_REPO_LOC,
+ utils.GetBuildRoot(utils.GuessOS(), 'release', 'ia32'),
+ 'dart-sdk', 'bin', 'pub'), 'build'])
os.chdir(current_path)
- if 'Error: Compilation failed' in stdout:
+ if 'failed' in stdout:
return
+
versions = DromaeoTester.GetDromaeoVersions()
for browser in BrowserTester.GetBrowsers():
@@ -741,29 +747,19 @@
'tools', 'testing', 'perf_testing', self.test.result_folder_name,
'dromaeo-%s-%s-%s' % (self.test.cur_time, browser, version_name))
self.AddSvnRevisionToTrace(self.test.trace_file, browser)
- url_path = '/'.join(['/root_dart', dromaeo_path, 'index%s.html?%s'% (
+ url_path = '/'.join(['/code_root', 'build', 'web', 'index%s.html?%s'%(
'-dart' if version_name == 'dart_html' else '-js',
version)])
- # TODO(efortuna): Make this a separate function. We should do this
- # once per cycle.
- os.chdir(os.path.join(DART_REPO_LOC, 'tools', 'testing', 'dart',
- 'browser_perf_testing'))
- self.test.test_runner.RunCmd([os.path.join(DART_REPO_LOC,
- utils.GetBuildRoot(utils.GuessOS(), 'release', 'ia32'),
- 'dart-sdk', 'bin', 'pub'), 'install'])
- os.chdir(current_path)
-
self.test.test_runner.RunCmd(
- [os.path.join(utils.GetBuildRoot(
+ [os.path.join(DART_REPO_LOC, utils.GetBuildRoot(
utils.GuessOS(), 'release', 'ia32'), 'dart-sdk', 'bin', 'dart'),
- '--package-root=%s' % os.path.join(DART_REPO_LOC, 'tools',
- 'testing', 'dart', 'browser_perf_testing', 'packages'),
- os.path.join('tools', 'testing', 'dart', 'browser_perf_testing',
- 'lib', 'browser_perf_testing.dart'),
- '--browser', browser, '--termination_test_file',
- '/root_dart/samples/third_party/dromaeo/dromaeo_end_condition.'
- 'js', '--test_path', url_path], self.test.trace_file,
+ '--package-root=%s' % os.path.join(DART_REPO_LOC, 'samples',
+ 'third_party', 'dromaeo', 'packages'), os.path.join(
+ DART_REPO_LOC, 'samples', 'third_party', 'dromaeo', 'packages',
+ 'browser_controller', 'browser_perf_testing.dart'),
+ '--browser', browser,
+ '--test_path', url_path], self.test.trace_file,
append=True)
@staticmethod
diff --git a/tools/utils.py b/tools/utils.py
index a8ad21d..57d2c00 100644
--- a/tools/utils.py
+++ b/tools/utils.py
@@ -50,6 +50,8 @@
id = platform.machine()
if id.startswith('arm'):
return 'arm'
+ elif id.startswith('mips'):
+ return 'mips'
elif (not id) or (not re.match('(x|i[3-6])86', id) is None):
return 'ia32'
elif id == 'i86pc':
@@ -57,6 +59,10 @@
elif '64' in id:
return 'x64'
else:
+ guess_os = GuessOS()
+ print "Warning: Guessing architecture %s based on os %s\n" % (id, guess_os)
+ if guess_os == 'win32':
+ return 'ia32'
return None
@@ -207,6 +213,19 @@
'macos': os.path.join('xcodebuild'),
}
+ARCH_FAMILY = {
+ 'ia32': 'ia32',
+ 'x64': 'ia32',
+ 'arm': 'arm',
+ 'mips': 'mips',
+ 'simarm': 'ia32',
+ 'simmips': 'ia32',
+}
+
+ARCH_GUESS = GuessArchitecture()
+BASE_DIR = os.path.abspath(os.path.join(os.curdir, '..'))
+DART_DIR = os.path.abspath(os.path.join(__file__, '..', '..'))
+
def GetBuildbotGSUtilPath():
gsutil = '/b/build/scripts/slave/gsutil'
if platform.system() == 'Windows':
@@ -216,16 +235,20 @@
def GetBuildMode(mode):
return BUILD_MODES[mode]
+def GetArchFamily(arch):
+ return ARCH_FAMILY[arch]
+
def GetBuildConf(mode, arch, conf_os=None):
if conf_os == 'android':
return '%s%s%s' % (GetBuildMode(mode), conf_os.title(), arch.upper())
else:
- return '%s%s' % (GetBuildMode(mode), arch.upper())
-
-ARCH_GUESS = GuessArchitecture()
-BASE_DIR = os.path.abspath(os.path.join(os.curdir, '..'))
-DART_DIR = os.path.abspath(os.path.join(__file__, '..', '..'))
-
+ # Ask for a cross build if the host and target architectures don't match.
+ host_arch = ARCH_GUESS
+ cross_build = ''
+ if GetArchFamily(host_arch) != GetArchFamily(arch):
+ print "GetBuildConf: Cross-build of %s on %s\n" % (arch, host_arch)
+ cross_build = 'X'
+ return '%s%s%s' % (GetBuildMode(mode), cross_build, arch.upper())
def GetBuildDir(host_os, target_os):
return BUILD_ROOT[host_os]
@@ -503,6 +526,8 @@
system = GuessOS()
if arch == 'arm':
return os.path.join(dart_binary_prefix, system, 'dart-arm')
+ elif arch == 'mips':
+ return os.path.join(dart_binary_prefix, system, 'dart-mips')
else:
return os.path.join(dart_binary_prefix, system, 'dart')