VERSION 0.2.1.0
svn merge -r 13839:14147 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
git-svn-id: http://dart.googlecode.com/svn/trunk@14152 260f80e4-7a28-3924-810f-c04153c831b5
diff --git a/README.dart-sdk b/README.dart-sdk
index 498b754..9a967c0 100644
--- a/README.dart-sdk
+++ b/README.dart-sdk
@@ -17,6 +17,6 @@
pkg/ Additional packages that are shipped outside of the Dart
runtime. More information is available at api.dartlang.org.
-revision dart.googlecode.com SVN revision number used to build this SDK.
+version The version number of the SDK (ex. 0.1.2.0_r1234).
util/ Support files for dart_analyzer and pub.
diff --git a/client/tools/buildbot_annotated_steps.py b/client/tools/buildbot_annotated_steps.py
old mode 100644
new mode 100755
index 91bf125..a07d666
--- a/client/tools/buildbot_annotated_steps.py
+++ b/client/tools/buildbot_annotated_steps.py
@@ -96,7 +96,7 @@
toolsBuildScript = os.path.join('.', 'editor', 'build', 'build.py')
- # TODO(devoncarew): should we move this into GetBuildInfo()?
+ # TODO(devoncarew): should we move this into GetBuildInfo()?
# get the latest changed revision from the current repository sub-tree
version = GetLatestChangedRevision()
@@ -120,18 +120,19 @@
return subprocess.call(cmds, env=local_env)
-def ProcessCompiler(name):
+def ProcessBot(name, target):
'''
- build and test the compiler
+ Build and test the named bot target (compiler, android, pub). We look for
+ the supporting script in tools/bots/ to run the tests and build.
'''
- print 'ProcessCompiler'
+ print 'Process%s' % target.capitalize()
has_shell=False
- if 'windows' in name:
+ if '-win' in name:
# In Windows we need to run in the shell, so that we have all the
# environment variables available.
has_shell=True
return subprocess.call([sys.executable,
- os.path.join('utils', 'compiler', 'buildbot.py')],
+ os.path.join('tools', 'bots', target + '.py')],
env=os.environ, shell=has_shell)
def FixJavaHome():
@@ -159,15 +160,15 @@
def RunDart(scriptPath):
if sys.platform == 'darwin':
pipe = subprocess.Popen(
- ['./tools/testing/bin/macos/dart', scriptPath],
+ ['./tools/testing/bin/macos/dart', scriptPath],
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
elif os.name == 'posix':
pipe = subprocess.Popen(
- ['./tools/testing/bin/linux/dart', scriptPath],
+ ['./tools/testing/bin/linux/dart', scriptPath],
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
else:
pipe = subprocess.Popen(
- ['tools\\testing\\bin\\windows\\dart.exe', scriptPath],
+ ['tools\\testing\\bin\\windows\\dart.exe', scriptPath],
stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
output = pipe.communicate()
@@ -208,11 +209,15 @@
# TODO (danrubel) Fix dart-editor builds so that we can call FixJavaHome() before the build
FixJavaHome()
status = ProcessTools('release', name, version)
+ elif name.startswith('pub-'):
+ status = ProcessBot(name, 'pub')
+ elif name.startswith('vm-android'):
+ status = ProcessBot(name, 'android')
else:
# The buildbot will set a BUILDBOT_JAVA_HOME relative to the dart
# root directory, set JAVA_HOME based on that.
FixJavaHome()
- status = ProcessCompiler(name)
+ status = ProcessBot(name, 'compiler')
if status:
print '@@@STEP_FAILURE@@@'
diff --git a/compiler/java/com/google/dart/compiler/DartCompiler.java b/compiler/java/com/google/dart/compiler/DartCompiler.java
index 751c7f6..e82153e 100644
--- a/compiler/java/com/google/dart/compiler/DartCompiler.java
+++ b/compiler/java/com/google/dart/compiler/DartCompiler.java
@@ -649,9 +649,15 @@
boolean hasIO = false;
boolean hasHTML = false;
for (LibraryNode importNode : lib.getImportPaths()) {
+ String libSpec = importNode.getText();
String prefix = importNode.getPrefix();
- hasIO |= "dart:io".equals(importNode.getText());
- hasHTML |= "dart:html".equals(importNode.getText());
+ hasIO |= "dart:io".equals(libSpec);
+ hasHTML |= "dart:html".equals(libSpec);
+ // "dart:mirrors" are not done yet
+ if ("dart:mirrors".equals(libSpec)) {
+ context.onError(new DartCompilationError(importNode,
+ DartCompilerErrorCode.MIRRORS_NOT_FULLY_IMPLEMENTED));
+ }
// validate import prefix
if (DartParser.PSEUDO_KEYWORDS_SET.contains(prefix)) {
context.onError(new DartCompilationError(importNode.getSourceInfo(),
@@ -1364,20 +1370,20 @@
}
private static void showVersion(CompilerOptions options) {
- String revision = getSdkRevision(options);
- if (revision == null) {
- revision = "<unkown>";
+ String version = getSdkVersion(options);
+ if (version == null) {
+ version = "<unkown>";
}
- System.out.println("dart_analyzer version " + revision);
+ System.out.println("dart_analyzer version " + version);
}
/**
* @return the numeric revision of SDK, may be <code>null</code> if cannot find.
*/
- private static String getSdkRevision(CompilerOptions options) {
+ private static String getSdkVersion(CompilerOptions options) {
try {
File sdkPath = options.getDartSdkPath();
- File revisionFile = new File(sdkPath, "revision");
+ File revisionFile = new File(sdkPath, "version");
if (revisionFile.exists() && revisionFile.isFile()) {
BufferedReader br = new BufferedReader(new FileReader(revisionFile));
try {
diff --git a/compiler/java/com/google/dart/compiler/DartCompilerErrorCode.java b/compiler/java/com/google/dart/compiler/DartCompilerErrorCode.java
index 5fa71d3..0744833 100644
--- a/compiler/java/com/google/dart/compiler/DartCompilerErrorCode.java
+++ b/compiler/java/com/google/dart/compiler/DartCompilerErrorCode.java
@@ -19,6 +19,7 @@
ILLEGAL_DIRECTIVES_IN_SOURCED_UNIT("This part was included by %s via a "
+ "part directive, so cannot itself contain directives other than a part of directive"),
IO("Input/Output error: %s"),
+ MIRRORS_NOT_FULLY_IMPLEMENTED(ErrorSeverity.WARNING, "dart:mirrors is not fully implemented yet"),
MISSING_LIBRARY_DIRECTIVE("a library which is imported is missing a library directive: %s"),
MISSING_SOURCE("Cannot find referenced source: %s"),
UNIT_WAS_ALREADY_INCLUDED("Unit '%s' was already included");
diff --git a/compiler/java/com/google/dart/compiler/ast/LibraryExport.java b/compiler/java/com/google/dart/compiler/ast/LibraryExport.java
index ef1d689..81104f5 100644
--- a/compiler/java/com/google/dart/compiler/ast/LibraryExport.java
+++ b/compiler/java/com/google/dart/compiler/ast/LibraryExport.java
@@ -4,7 +4,6 @@
package com.google.dart.compiler.ast;
-import com.google.common.base.Objects;
import com.google.common.collect.Sets;
import java.util.List;
@@ -24,21 +23,6 @@
this.hideNames = createCombinatorsSet(combinators, false);
}
- @Override
- public int hashCode() {
- return Objects.hashCode(library);
- }
-
- @Override
- public boolean equals(Object obj) {
- if (obj instanceof LibraryExport) {
- LibraryExport other = (LibraryExport) obj;
- return Objects.equal(library, other.library) && Objects.equal(showNames, other.showNames)
- && Objects.equal(hideNames, other.hideNames);
- }
- return false;
- }
-
public LibraryUnit getLibrary() {
return library;
}
diff --git a/compiler/java/com/google/dart/compiler/ast/LibraryImport.java b/compiler/java/com/google/dart/compiler/ast/LibraryImport.java
index 986fb3c..300093d 100644
--- a/compiler/java/com/google/dart/compiler/ast/LibraryImport.java
+++ b/compiler/java/com/google/dart/compiler/ast/LibraryImport.java
@@ -4,7 +4,6 @@
package com.google.dart.compiler.ast;
-import com.google.common.base.Objects;
import com.google.common.collect.Sets;
import java.util.List;
@@ -26,21 +25,6 @@
this.hideNames = createCombinatorsSet(combinators, false);
}
- @Override
- public int hashCode() {
- return Objects.hashCode(prefix, library);
- }
-
- @Override
- public boolean equals(Object obj) {
- if (obj instanceof LibraryImport) {
- LibraryImport other = (LibraryImport) obj;
- return Objects.equal(library, other.library) && Objects.equal(prefix, other.prefix)
- && Objects.equal(showNames, other.showNames) && Objects.equal(hideNames, other.hideNames);
- }
- return false;
- }
-
public LibraryUnit getLibrary() {
return library;
}
@@ -48,7 +32,7 @@
public String getPrefix() {
return prefix;
}
-
+
public boolean isVisible(String name) {
if (hideNames.contains(name)) {
return false;
diff --git a/compiler/java/com/google/dart/compiler/ast/LibraryUnit.java b/compiler/java/com/google/dart/compiler/ast/LibraryUnit.java
index f5b0d3f..d6e2a31 100644
--- a/compiler/java/com/google/dart/compiler/ast/LibraryUnit.java
+++ b/compiler/java/com/google/dart/compiler/ast/LibraryUnit.java
@@ -164,7 +164,13 @@
}
public boolean hasImport(LibraryUnit unit) {
- return imports.contains(new LibraryImport(unit, null, ImmutableList.<ImportCombinator> of()));
+ for (LibraryImport libraryImport : imports) {
+ if (libraryImport.getPrefix() == null && Objects.equal(libraryImport.getLibrary(), unit)) {
+ return true;
+ }
+ }
+ return false;
+// return imports.contains(new LibraryImport(unit, null, ImmutableList.<ImportCombinator> of()));
}
public DartExpression getEntryPoint() {
diff --git a/compiler/java/com/google/dart/compiler/parser/AbstractParser.java b/compiler/java/com/google/dart/compiler/parser/AbstractParser.java
index a5c13b0..273313b 100644
--- a/compiler/java/com/google/dart/compiler/parser/AbstractParser.java
+++ b/compiler/java/com/google/dart/compiler/parser/AbstractParser.java
@@ -21,6 +21,7 @@
*/
abstract class AbstractParser {
+ private final TerminalAnnotationsCache terminalAnnotationsCache = new TerminalAnnotationsCache();
protected final ParserContext ctx;
private int lastErrorPosition = Integer.MIN_VALUE;
@@ -33,10 +34,10 @@
}
private static class TerminalAnnotationsCache {
- private static Map<String, Class<?>> classes;
- private static Map<String, List<Token>> methods;
+ private Map<String, Class<?>> classes;
+ private Map<String, List<Token>> methods;
- private static void init(StackTraceElement[] stackTrace) {
+ private void init(StackTraceElement[] stackTrace) {
if (classes == null) {
classes = Maps.newHashMap();
methods = Maps.newHashMap();
@@ -72,7 +73,7 @@
}
}
- public static Set<Token> terminalsForStack(StackTraceElement[] stackTrace) {
+ public Set<Token> terminalsForStack(StackTraceElement[] stackTrace) {
Set<Token> results = Sets.newHashSet();
for (StackTraceElement frame: stackTrace) {
List<Token> found = methods.get(frame.getClassName() + "." + frame.getMethodName());
@@ -94,9 +95,9 @@
protected Set<Token> collectTerminalAnnotations() {
StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace();
// Get methods for every class and associated Terminals annotations & stick them in a hash
- TerminalAnnotationsCache.init(stackTrace);
+ terminalAnnotationsCache.init(stackTrace);
// Create the set of terminals to return
- return TerminalAnnotationsCache.terminalsForStack(stackTrace);
+ return terminalAnnotationsCache.terminalsForStack(stackTrace);
}
/**
diff --git a/compiler/java/com/google/dart/compiler/parser/DartParser.java b/compiler/java/com/google/dart/compiler/parser/DartParser.java
index c32c0d6..4b51d39 100644
--- a/compiler/java/com/google/dart/compiler/parser/DartParser.java
+++ b/compiler/java/com/google/dart/compiler/parser/DartParser.java
@@ -143,11 +143,7 @@
private static final String ABSTRACT_KEYWORD = "abstract";
private static final String AS_KEYWORD = "as";
private static final String CALL_KEYWORD = "call";
- public static final String DYNAMIC_KEYWORD = "dynamic";
- // TODO(scheglov) remove "Dynamic" support after
- // http://code.google.com/p/dart/issues/detail?id=5117
- // http://code.google.com/p/dart/issues/detail?id=5118
- public static final String DYNAMIC_KEYWORD_DEPRECATED = "Dynamic";
+ private static final String DYNAMIC_KEYWORD = "dynamic";
private static final String EXPORT_KEYWORD = "export";
private static final String EXTERNAL_KEYWORD = "external";
private static final String FACTORY_KEYWORD = "factory";
@@ -175,7 +171,6 @@
ABSTRACT_KEYWORD,
AS_KEYWORD,
DYNAMIC_KEYWORD,
- DYNAMIC_KEYWORD_DEPRECATED,
EXPORT_KEYWORD,
EXTERNAL_KEYWORD,
FACTORY_KEYWORD,
@@ -4878,6 +4873,7 @@
List<DartSwitchMember> members = new ArrayList<DartSwitchMember>();
if (peek(0) != Token.LBRACE) {
+ reportUnexpectedToken(position(), Token.LBRACE, peek(0));
return done(new DartSwitchStatement(expr, members));
}
boolean foundOpenBrace = expect(Token.LBRACE);
diff --git a/compiler/java/com/google/dart/compiler/resolver/CompileTimeConstantAnalyzer.java b/compiler/java/com/google/dart/compiler/resolver/CompileTimeConstantAnalyzer.java
index 48e501d..4c15ab1 100644
--- a/compiler/java/com/google/dart/compiler/resolver/CompileTimeConstantAnalyzer.java
+++ b/compiler/java/com/google/dart/compiler/resolver/CompileTimeConstantAnalyzer.java
@@ -486,7 +486,7 @@
@Override
public Void visitPropertyAccess(DartPropertyAccess x) {
- switch (ElementKind.of(x.getQualifier().getElement())) {
+ switch (ElementKind.of(x.getRealTarget().getElement())) {
case CLASS:
case LIBRARY_PREFIX:
case LIBRARY:
diff --git a/compiler/java/com/google/dart/compiler/resolver/DynamicElementImplementation.java b/compiler/java/com/google/dart/compiler/resolver/DynamicElementImplementation.java
index fb2bd2b..33332a9 100644
--- a/compiler/java/com/google/dart/compiler/resolver/DynamicElementImplementation.java
+++ b/compiler/java/com/google/dart/compiler/resolver/DynamicElementImplementation.java
@@ -23,7 +23,7 @@
class DynamicElementImplementation extends AbstractNodeElement implements DynamicElement, MethodNodeElement {
private DynamicElementImplementation() {
- super(null, "Dynamic");
+ super(null, "dynamic");
}
@Override
@@ -162,7 +162,7 @@
@Override
public String getDeclarationNameWithTypeParameters() {
- return "Dynamic";
+ return "dynamic";
}
@Override
diff --git a/compiler/java/com/google/dart/compiler/resolver/ResolutionContext.java b/compiler/java/com/google/dart/compiler/resolver/ResolutionContext.java
index a38c424..8b6f83c 100644
--- a/compiler/java/com/google/dart/compiler/resolver/ResolutionContext.java
+++ b/compiler/java/com/google/dart/compiler/resolver/ResolutionContext.java
@@ -213,8 +213,7 @@
// Built-in identifier can not be used as a type annotation.
if (identifier instanceof DartIdentifier) {
String name = ((DartIdentifier) identifier).getName();
- if (DartParser.PSEUDO_KEYWORDS_SET.contains(name) && !DartParser.DYNAMIC_KEYWORD.equals(name)
- && !DartParser.DYNAMIC_KEYWORD_DEPRECATED.equals(name)) {
+ if (DartParser.PSEUDO_KEYWORDS_SET.contains(name) && !"dynamic".equals(name)) {
onError(identifier, ResolverErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE, name);
return Types.newDynamicType();
}
@@ -258,10 +257,7 @@
if (Elements.isIdentifierName(identifier, "void")) {
return typeProvider.getVoidType();
}
- if (Elements.isIdentifierName(identifier, DartParser.DYNAMIC_KEYWORD)) {
- return typeProvider.getDynamicType();
- }
- if (Elements.isIdentifierName(identifier, DartParser.DYNAMIC_KEYWORD_DEPRECATED)) {
+ if (Elements.isIdentifierName(identifier, "dynamic")) {
return typeProvider.getDynamicType();
}
onError(identifier, errorCode, identifier);
diff --git a/compiler/java/com/google/dart/compiler/resolver/Resolver.java b/compiler/java/com/google/dart/compiler/resolver/Resolver.java
index 34d96b5..b95c726 100644
--- a/compiler/java/com/google/dart/compiler/resolver/Resolver.java
+++ b/compiler/java/com/google/dart/compiler/resolver/Resolver.java
@@ -2144,7 +2144,7 @@
// fall through
case 0:
typeArgs.add(implicitKey);
- DartTypeNode implicitValue = new DartTypeNode(new DartIdentifier("Dynamic"));
+ DartTypeNode implicitValue = new DartTypeNode(new DartIdentifier("dynamic"));
typeArgs.add(implicitValue);
break;
}
diff --git a/compiler/java/com/google/dart/compiler/resolver/Scope.java b/compiler/java/com/google/dart/compiler/resolver/Scope.java
index 916d4b8..a20d7ee 100644
--- a/compiler/java/com/google/dart/compiler/resolver/Scope.java
+++ b/compiler/java/com/google/dart/compiler/resolver/Scope.java
@@ -101,14 +101,6 @@
return false;
}
- public void markStateProgress() {
- this.stateProgress = true;
- }
-
- public boolean isStateProgress() {
- return stateProgress;
- }
-
public void markStateReady() {
this.stateReady = true;
}
diff --git a/compiler/java/com/google/dart/compiler/resolver/SupertypeResolver.java b/compiler/java/com/google/dart/compiler/resolver/SupertypeResolver.java
index 9d35c22..9481433 100644
--- a/compiler/java/com/google/dart/compiler/resolver/SupertypeResolver.java
+++ b/compiler/java/com/google/dart/compiler/resolver/SupertypeResolver.java
@@ -26,7 +26,7 @@
*/
public class SupertypeResolver {
private static final Set<String> BLACK_LISTED_TYPES = ImmutableSet.of(
- "Dynamic",
+ "dynamic",
"Function",
"bool",
"num",
diff --git a/compiler/java/com/google/dart/compiler/resolver/TopLevelElementBuilder.java b/compiler/java/com/google/dart/compiler/resolver/TopLevelElementBuilder.java
index 2a4e52b..3cb47c7 100644
--- a/compiler/java/com/google/dart/compiler/resolver/TopLevelElementBuilder.java
+++ b/compiler/java/com/google/dart/compiler/resolver/TopLevelElementBuilder.java
@@ -7,6 +7,7 @@
import com.google.common.annotations.VisibleForTesting;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
+import com.google.common.collect.Sets;
import com.google.dart.compiler.DartCompilationError;
import com.google.dart.compiler.DartCompilerContext;
import com.google.dart.compiler.DartCompilerListener;
@@ -35,6 +36,7 @@
import java.util.Collections;
import java.util.List;
import java.util.Map;
+import java.util.Set;
/**
* Builds all class elements and types of a library. Once all libraries
@@ -63,18 +65,25 @@
* libraries.
*/
public void fillInLibraryScope(LibraryUnit library, DartCompilerListener listener) {
+ fillInLibraryScope(library, listener, Sets.newHashSet());
+ }
+
+ /**
+ * Fill the scope for this library, using its own top-level elements and elements from imported
+ * libraries.
+ */
+ private void fillInLibraryScope(LibraryUnit library, DartCompilerListener listener,
+ Set<Object> processedObjects) {
Scope importScope = library.getElement().getImportScope();
Scope scope = library.getElement().getScope();
- // We are processing this library now, or already done this.
- if (library.getElement().getScope().isStateProgress()
- || library.getElement().getScope().isStateReady()) {
+ // We are done with this library.
+ if (library.getElement().getScope().isStateReady()) {
return;
}
- library.getElement().getScope().markStateProgress();
// Fill "library" scope.
- {
+ if (processedObjects.add(library)) {
List<Element> exportedElements = Lists.newArrayList();
{
DartUnit selfUnit = library.getSelfDartUnit();
@@ -100,8 +109,12 @@
}
}
+ // Fill "import" scope.
Map<String, LibraryPrefixElement> libraryPrefixElements = Maps.newHashMap();
for (LibraryImport libraryImport : library.getImports()) {
+ if (!processedObjects.add(libraryImport)) {
+ continue;
+ }
LibraryUnit lib = libraryImport.getLibrary();
// Prepare scope for this import.
Scope scopeForImport;
@@ -128,7 +141,7 @@
}
}
// Prepare "lib" scope.
- fillInLibraryScope(lib, listener);
+ fillInLibraryScope(lib, listener, processedObjects);
// Fill "library" scope with element exported from "lib".
for (Element element : lib.getElement().getExportedElements()) {
String name = element.getName();
@@ -141,10 +154,14 @@
}
}
}
+
// Fill "library" export scope with re-exports.
for (LibraryExport export : library.getExports()) {
+ if (!processedObjects.add(export)) {
+ continue;
+ }
LibraryUnit lib = export.getLibrary();
- fillInLibraryScope(lib, listener);
+ fillInLibraryScope(lib, listener, processedObjects);
for (Element element : lib.getElement().getExportedElements()) {
String name = element.getName();
// re-export only in not defined locally
@@ -157,6 +174,7 @@
}
}
}
+
// Done.
library.getElement().getScope().markStateReady();
}
diff --git a/compiler/java/com/google/dart/compiler/type/TypeAnalyzer.java b/compiler/java/com/google/dart/compiler/type/TypeAnalyzer.java
index 8fad370..3ccd7e2 100644
--- a/compiler/java/com/google/dart/compiler/type/TypeAnalyzer.java
+++ b/compiler/java/com/google/dart/compiler/type/TypeAnalyzer.java
@@ -781,7 +781,7 @@
}
/**
- * @return the {@link Type} which is both "a" and "b" types. May be "Dynamic" if "a" and "b"
+ * @return the {@link Type} which is both "a" and "b" types. May be "dynamic" if "a" and "b"
* don't form hierarchy.
*/
Type getUnionType(Type a, Type b) {
diff --git a/compiler/java/com/google/dart/compiler/type/Types.java b/compiler/java/com/google/dart/compiler/type/Types.java
index 6250466..43d6813 100644
--- a/compiler/java/com/google/dart/compiler/type/Types.java
+++ b/compiler/java/com/google/dart/compiler/type/Types.java
@@ -72,7 +72,7 @@
}
public Type intersection(List<Type> types) {
- // exclude Dynamic type
+ // exclude 'dynamic' type
{
List<Type> newTypes = Lists.newArrayList();
for (Type type : types) {
diff --git a/compiler/javatests/com/google/dart/compiler/end2end/inc/IncrementalCompilation2Test.java b/compiler/javatests/com/google/dart/compiler/end2end/inc/IncrementalCompilation2Test.java
index 8f586e5..9b1c945 100644
--- a/compiler/javatests/com/google/dart/compiler/end2end/inc/IncrementalCompilation2Test.java
+++ b/compiler/javatests/com/google/dart/compiler/end2end/inc/IncrementalCompilation2Test.java
@@ -1123,6 +1123,115 @@
assertTrue(errors.toString().contains("libB.TypeBB"));
}
+ public void test_newLibrarySyntax_export2() throws Exception {
+ appSource.setContent(
+ "A.dart",
+ makeCode(
+ "// filler filler filler filler filler filler filler filler filler filler filler",
+ "library libA;",
+ "class SourceString {}",
+ ""));
+ appSource.setContent(
+ "B.dart",
+ makeCode(
+ "// filler filler filler filler filler filler filler filler filler filler filler",
+ "library libB;",
+ "import 'C.dart';",
+ "export 'A.dart' show SourceString;",
+ ""));
+ appSource.setContent(
+ "C.dart",
+ makeCode(
+ "// filler filler filler filler filler filler filler filler filler filler filler",
+ "library libC;",
+ "import 'B.dart';",
+ "foo() {",
+ " SourceString s;",
+ "}",
+ ""));
+ appSource.setContent(
+ APP,
+ makeCode(
+ "// filler filler filler filler filler filler filler filler filler filler filler",
+ "library app;",
+ "import 'B.dart';",
+ ""));
+ compile();
+ assertErrors(errors);
+ }
+
+ public void test_newLibrarySyntax_export3() throws Exception {
+ appSource.setContent(
+ "A.dart",
+ makeCode(
+ "// filler filler filler filler filler filler filler filler filler filler filler",
+ "library libA;",
+ "class SourceString {}",
+ ""));
+ appSource.setContent(
+ "B.dart",
+ makeCode(
+ "// filler filler filler filler filler filler filler filler filler filler filler",
+ "library libB;",
+ "export 'C.dart';",
+ "export 'A.dart' show SourceString;",
+ ""));
+ appSource.setContent(
+ "C.dart",
+ makeCode(
+ "// filler filler filler filler filler filler filler filler filler filler filler",
+ "library libC;",
+ "import 'B.dart';",
+ "foo() {",
+ " SourceString s;",
+ "}",
+ ""));
+ appSource.setContent(
+ APP,
+ makeCode(
+ "// filler filler filler filler filler filler filler filler filler filler filler",
+ "library app;",
+ "import 'B.dart';",
+ ""));
+ compile();
+ assertErrors(errors);
+ }
+
+ public void test_newLibrarySyntax_export4() throws Exception {
+ appSource.setContent(
+ "p1.dart",
+ makeCode(
+ "// filler filler filler filler filler filler filler filler filler filler filler",
+ "library lib1;",
+ "export 'p3.dart';",
+ ""));
+ appSource.setContent(
+ "p2.dart",
+ makeCode(
+ "// filler filler filler filler filler filler filler filler filler filler filler",
+ "library lib2;",
+ "export 'p3.dart';",
+ ""));
+ appSource.setContent(
+ "p3.dart",
+ makeCode(
+ "// filler filler filler filler filler filler filler filler filler filler filler",
+ "library lib3;",
+ "class MyClass {}",
+ ""));
+ appSource.setContent(
+ APP,
+ makeCode(
+ "// filler filler filler filler filler filler filler filler filler filler filler",
+ "library app;",
+ "import 'p1.dart' hide MyClass;",
+ "import 'p2.dart';",
+ "MyClass topLevelField;",
+ ""));
+ compile();
+ assertErrors(errors);
+ }
+
public void test_newLibrarySyntax_export_hide() throws Exception {
appSource.setContent(
"A.dart",
@@ -1305,7 +1414,7 @@
"library application;",
"import 'A.dart' as abstract;",
"import 'A.dart' as as;",
- "import 'A.dart' as Dynamic;",
+ "import 'A.dart' as dynamic;",
"import 'A.dart' as export;",
"import 'A.dart' as external;",
"import 'A.dart' as factory;",
@@ -1407,6 +1516,20 @@
compile();
assertErrors(errors);
}
+
+ /**
+ * <p>
+ * http://code.google.com/p/dart/issues/detail?id=6077
+ */
+ public void test_dartMirrors_notFullyImplemented() throws Exception {
+ appSource.setContent(
+ APP,
+ makeCode("// filler filler filler filler filler filler filler filler filler filler filler",
+ "import 'dart:mirrors';"));
+ // do compile, no errors expected
+ compile();
+ assertErrors(errors, errEx(DartCompilerErrorCode.MIRRORS_NOT_FULLY_IMPLEMENTED, 2, 1, 22));
+ }
private void assertAppBuilt() {
didWrite(APP, EXTENSION_DEPS);
diff --git a/compiler/javatests/com/google/dart/compiler/parser/NegativeParserTest.java b/compiler/javatests/com/google/dart/compiler/parser/NegativeParserTest.java
index f742650..f627314 100644
--- a/compiler/javatests/com/google/dart/compiler/parser/NegativeParserTest.java
+++ b/compiler/javatests/com/google/dart/compiler/parser/NegativeParserTest.java
@@ -823,7 +823,7 @@
"// filler filler filler filler filler filler filler filler filler filler",
"class abstract {}",
"class as {}",
- "class Dynamic {}",
+ "class dynamic {}",
"class export {}",
"class external {}",
"class factory {}",
@@ -839,7 +839,7 @@
""),
errEx(ParserErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE_NAME, 2, 7, 8), // abstract
errEx(ParserErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE_NAME, 3, 7, 2), // as
- errEx(ParserErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE_NAME, 4, 7, 7), // Dynamic
+ errEx(ParserErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE_NAME, 4, 7, 7), // dynamic
errEx(ParserErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE_NAME, 5, 7, 6), // export
errEx(ParserErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE_NAME, 6, 7, 8), // external
errEx(ParserErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE_NAME, 7, 7, 7), // factory
@@ -868,7 +868,7 @@
"// filler filler filler filler filler filler filler filler filler filler",
"class C01<abstract> {}",
"class C02<as> {}",
- "class C03<Dynamic> {}",
+ "class C03<dynamic> {}",
"class C04<export> {}",
"class C05<external> {}",
"class C06<factory> {}",
@@ -884,7 +884,7 @@
""),
errEx(ParserErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE_VARIABLE_NAME, 2, 11, 8), // abstract
errEx(ParserErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE_VARIABLE_NAME, 3, 11, 2), // as
- errEx(ParserErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE_VARIABLE_NAME, 4, 11, 7), // Dynamic
+ errEx(ParserErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE_VARIABLE_NAME, 4, 11, 7), // dynamic
errEx(ParserErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE_VARIABLE_NAME, 5, 11, 6), // export
errEx(ParserErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE_VARIABLE_NAME, 6, 11, 8), // external
errEx(ParserErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE_VARIABLE_NAME, 7, 11, 7), // factory
@@ -913,7 +913,7 @@
"// filler filler filler filler filler filler filler filler filler filler",
"typedef abstract();",
"typedef as();",
- "typedef Dynamic();",
+ "typedef dynamic();",
"typedef export();",
"typedef external();",
"typedef factory();",
@@ -929,7 +929,7 @@
""),
errEx(ParserErrorCode.BUILT_IN_IDENTIFIER_AS_TYPEDEF_NAME, 2, 9, 8), // abstract
errEx(ParserErrorCode.BUILT_IN_IDENTIFIER_AS_TYPEDEF_NAME, 3, 9, 2), // as
- errEx(ParserErrorCode.BUILT_IN_IDENTIFIER_AS_TYPEDEF_NAME, 4, 9, 7), // Dynamic
+ errEx(ParserErrorCode.BUILT_IN_IDENTIFIER_AS_TYPEDEF_NAME, 4, 9, 7), // dynamic
errEx(ParserErrorCode.BUILT_IN_IDENTIFIER_AS_TYPEDEF_NAME, 5, 9, 6), // export
errEx(ParserErrorCode.BUILT_IN_IDENTIFIER_AS_TYPEDEF_NAME, 6, 9, 8), // external
errEx(ParserErrorCode.BUILT_IN_IDENTIFIER_AS_TYPEDEF_NAME, 7, 9, 7), // factory
diff --git a/compiler/javatests/com/google/dart/compiler/parser/StringBuffer.dart b/compiler/javatests/com/google/dart/compiler/parser/StringBuffer.dart
index 79faa29..8d247eb 100644
--- a/compiler/javatests/com/google/dart/compiler/parser/StringBuffer.dart
+++ b/compiler/javatests/com/google/dart/compiler/parser/StringBuffer.dart
@@ -49,7 +49,7 @@
* Appends [str] to the buffer.
*/
void append(String str) {
- if (str === null || str.isEmpty()) return;
+ if (str === null || str.isEmpty) return;
buffer_.add(str);
length_ += str.length;
}
diff --git a/compiler/javatests/com/google/dart/compiler/parser/SyntaxTest.java b/compiler/javatests/com/google/dart/compiler/parser/SyntaxTest.java
index 4b96e97..64474bd 100644
--- a/compiler/javatests/com/google/dart/compiler/parser/SyntaxTest.java
+++ b/compiler/javatests/com/google/dart/compiler/parser/SyntaxTest.java
@@ -64,6 +64,16 @@
assertEquals("import ;\n", dir.toSource());
}
+ public void test_switch_noLBrace() {
+ parseUnit("test.dart", Joiner.on("\n").join(
+ "// filler filler filler filler filler filler filler filler filler filler",
+ "main() {",
+ " switch (0)",
+ "}",
+ ""),
+ ParserErrorCode.EXPECTED_TOKEN, 3, 12);
+ }
+
public void test_getter() {
parseUnit("getter.dart", Joiner.on("\n").join(
"class G {",
diff --git a/compiler/javatests/com/google/dart/compiler/resolver/CompileTimeConstantTest.java b/compiler/javatests/com/google/dart/compiler/resolver/CompileTimeConstantTest.java
index 5b2d316..765bab7 100644
--- a/compiler/javatests/com/google/dart/compiler/resolver/CompileTimeConstantTest.java
+++ b/compiler/javatests/com/google/dart/compiler/resolver/CompileTimeConstantTest.java
@@ -247,6 +247,21 @@
errEx(ResolverErrorCode.EXPECTED_CONSTANT_EXPRESSION, 4, 21, 1));
}
+ public void test_cascade() {
+ resolveAndTestCtConstExpectErrors(
+ Joiner.on("\n").join(
+ "// filler filler filler filler filler filler filler filler filler filler",
+ "main() {",
+ " var v;",
+ " const c = v..foo;",
+ "}",
+ "class Object {}",
+ "class int {}",
+ ""),
+ errEx(ResolverErrorCode.EXPECTED_CONSTANT_EXPRESSION, 4, 12, 1),
+ errEx(ResolverErrorCode.EXPECTED_CONSTANT_EXPRESSION, 4, 13, 5));
+ }
+
public void test_stringInterpolation_referenceConstVar_String() {
resolveAndTestCtConstExpectErrors(Joiner.on("\n").join(
"// filler filler filler filler filler filler filler filler filler filler",
diff --git a/compiler/javatests/com/google/dart/compiler/resolver/NegativeResolverTest.java b/compiler/javatests/com/google/dart/compiler/resolver/NegativeResolverTest.java
index abf0f48..bba5949 100644
--- a/compiler/javatests/com/google/dart/compiler/resolver/NegativeResolverTest.java
+++ b/compiler/javatests/com/google/dart/compiler/resolver/NegativeResolverTest.java
@@ -898,18 +898,18 @@
};
}
- public void test_blackListed_Dynamic() throws Exception {
+ public void test_blackListed_dynamic() throws Exception {
checkSourceErrors(
makeCode(
"// filler filler filler filler filler filler filler filler filler filler",
- "class A extends Dynamic {",
+ "class A extends dynamic {",
"}",
- "class B implements Dynamic {",
+ "class B implements dynamic {",
"}"),
errEx(ResolverErrorCode.BLACK_LISTED_EXTENDS, 2, 17, 7),
errEx(ResolverErrorCode.BLACK_LISTED_IMPLEMENTS, 4, 20, 7));
- assertEquals("'Dynamic' can not be used as superclass", errors.get(0).getMessage());
- assertEquals("'Dynamic' can not be used as superinterface", errors.get(1).getMessage());
+ assertEquals("'dynamic' can not be used as superclass", errors.get(0).getMessage());
+ assertEquals("'dynamic' can not be used as superinterface", errors.get(1).getMessage());
}
public void test_blackListed_Function() throws Exception {
@@ -1007,7 +1007,7 @@
public void test_explicitDynamicTypeArgument() throws Exception {
checkSourceErrors(makeCode(
"// filler filler filler filler filler filler filler filler filler filler",
- "class MyClass implements Map<Object, Dynamic> {",
+ "class MyClass implements Map<Object, dynamic> {",
"}"));
}
diff --git a/compiler/javatests/com/google/dart/compiler/resolver/ResolverTest.java b/compiler/javatests/com/google/dart/compiler/resolver/ResolverTest.java
index 3dbef86..9192064 100644
--- a/compiler/javatests/com/google/dart/compiler/resolver/ResolverTest.java
+++ b/compiler/javatests/com/google/dart/compiler/resolver/ResolverTest.java
@@ -1224,7 +1224,7 @@
resolveAndTest(Joiner.on("\n").join(
"class Object {}",
"class int {}",
- "typedef Dynamic F1<T>(Dynamic x, T y);",
+ "typedef dynamic F1<T>(dynamic x, T y);",
"class MyClass {",
" main() {",
" F1<int> f1 = (Object o, int i) => null;",
diff --git a/compiler/javatests/com/google/dart/compiler/resolver/ResolverTestCase.java b/compiler/javatests/com/google/dart/compiler/resolver/ResolverTestCase.java
index 190d9e3..b5f4233 100644
--- a/compiler/javatests/com/google/dart/compiler/resolver/ResolverTestCase.java
+++ b/compiler/javatests/com/google/dart/compiler/resolver/ResolverTestCase.java
@@ -185,7 +185,7 @@
private final ClassElement objectElement;
{
- ClassElement dynamicElement = Elements.classNamed("Dynamic");
+ ClassElement dynamicElement = Elements.classNamed("dynamic");
dynamicType = Types.interfaceType(dynamicElement, Collections.<Type>emptyList());
dynamicElement.setType(dynamicType);
diff --git a/compiler/javatests/com/google/dart/compiler/type/TypeAnalyzerCompilerTest.java b/compiler/javatests/com/google/dart/compiler/type/TypeAnalyzerCompilerTest.java
index 3bfd3fa..e532d26 100644
--- a/compiler/javatests/com/google/dart/compiler/type/TypeAnalyzerCompilerTest.java
+++ b/compiler/javatests/com/google/dart/compiler/type/TypeAnalyzerCompilerTest.java
@@ -863,7 +863,7 @@
"class A {",
" void set foo(bool a) {}",
" set bar(bool a) {}",
- " Dynamic set baz(bool a) {}",
+ " dynamic set baz(bool a) {}",
" bool set bob(bool a) {}",
"}"));
assertErrors(
@@ -1212,7 +1212,7 @@
" assert('message');", // not 'bool'
" assert('null');", // not 'bool'
" assert(0);", // not 'bool'
- " assert(f() {});", // OK, Dynamic
+ " assert(f() {});", // OK, dynamic
" assert(bool f() {});", // OK, '() -> bool'
" assert(Object f() {});", // OK, 'Object' compatible with 'bool'
" assert(String f() {});", // not '() -> bool', return type
@@ -1269,7 +1269,7 @@
"// filler filler filler filler filler filler filler filler filler filler",
"class A {",
" final double f;",
- " A.useDynamic(Dynamic this.f);",
+ " A.useDynamic(dynamic this.f);",
" A.useNum(num this.f);",
" A.useString(String this.f);",
"}",
@@ -1471,7 +1471,7 @@
makeCode(
"// filler filler filler filler filler filler filler filler filler filler",
"int fA() {}",
- "Dynamic fB() {}",
+ "dynamic fB() {}",
"void fC() {}",
"fD() {}",
""));
@@ -1483,7 +1483,7 @@
}
{
DartMethodDefinition fB = (DartMethodDefinition) unit.getTopLevelNodes().get(1);
- assertEquals("Dynamic", fB.getElement().getReturnType().getElement().getName());
+ assertEquals("dynamic", fB.getElement().getReturnType().getElement().getName());
}
{
DartMethodDefinition fC = (DartMethodDefinition) unit.getTopLevelNodes().get(2);
@@ -1491,7 +1491,7 @@
}
{
DartMethodDefinition fD = (DartMethodDefinition) unit.getTopLevelNodes().get(3);
- assertEquals("Dynamic", fD.getElement().getReturnType().getElement().getName());
+ assertEquals("dynamic", fD.getElement().getReturnType().getElement().getName());
}
}
@@ -2375,7 +2375,7 @@
}
/**
- * Prefer specific type, not Dynamic type argument.
+ * Prefer specific type, not "dynamic" type argument.
* <p>
* http://code.google.com/p/dart/issues/detail?id=4792
*/
@@ -2436,7 +2436,7 @@
}
/**
- * When we can not identify type of assigned value we should keep "Dynamic" as type of variable.
+ * When we can not identify type of assigned value we should keep "dynamic" as type of variable.
*/
public void test_typesPropagation_assign_newUnknownType() throws Exception {
analyzeLibrary(
@@ -2510,7 +2510,7 @@
" if (a is num) {",
" var a1 = a;",
" }",
- " if (a is Dynamic) {",
+ " if (a is dynamic) {",
" var a2 = a;",
" }",
" if (b is int) {",
@@ -2525,7 +2525,7 @@
/**
* When single variable has conflicting type constraints, right now we don't try to unify them,
- * instead we fall back to "Dynamic".
+ * instead we fall back to "dynamic".
*/
public void test_typesPropagation_ifIsType_conflictingTypes() throws Exception {
analyzeLibrary(
@@ -3464,7 +3464,7 @@
/**
* The spec in the section 10.28 says:
- * "It is a compile-time error to use a built-in identifier other than Dynamic as a type annotation."
+ * "It is a compile-time error to use a built-in identifier other than dynamic as a type annotation."
* <p>
* http://code.google.com/p/dart/issues/detail?id=3307
*/
@@ -3474,7 +3474,7 @@
"main() {",
" abstract v01;",
" as v02;",
- " Dynamic v03;",
+ " dynamic v03;",
" export v04;",
" external v05;",
" factory v06;",
@@ -3493,7 +3493,7 @@
libraryResult.getErrors(),
errEx(ResolverErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE, 3, 3, 8), // abstract
errEx(ResolverErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE, 4, 3, 2), // as
- // Dynamic
+ // dynamic
errEx(ResolverErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE, 6, 3, 6), // export
errEx(ResolverErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE, 7, 3, 8), // external
errEx(ResolverErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE, 8, 3, 7), // factory
diff --git a/compiler/scripts/dart_analyzer.sh b/compiler/scripts/dart_analyzer.sh
index fc3c57e..8abaf52 100755
--- a/compiler/scripts/dart_analyzer.sh
+++ b/compiler/scripts/dart_analyzer.sh
@@ -57,13 +57,12 @@
fi
EXTRA_JVMARGS="-Xss2M "
-OS=`uname | tr [A-Z] [a-z]`
+OS=`uname | tr "[A-Z]" "[a-z]"`
if [ "$OS" == "darwin" ] ; then
# Bump up the heap on Mac VMs, some of which default to 128M or less.
- # Users can specify DART_JVMARGS in the environment to override
- # this setting. Force to 32 bit client vm. 64 bit and server VM make for
- # poor performance.
- EXTRA_JVMARGS+=" -Xmx256M -client -d32 "
+ # Users can specify DART_JVMARGS in the environment to override this
+ # setting.
+ EXTRA_JVMARGS+=" -Xmx256M -client "
else
# On other architectures
# -batch invocations will do better with a server vm
diff --git a/lib/compiler/implementation/closure.dart b/lib/compiler/implementation/closure.dart
index 090a8e9..23d5e9e 100644
--- a/lib/compiler/implementation/closure.dart
+++ b/lib/compiler/implementation/closure.dart
@@ -115,7 +115,7 @@
ClosureScope(this.boxElement, this.capturedVariableMapping)
: boxedLoopVariables = const <Element>[];
- bool hasBoxedLoopVariables() => !boxedLoopVariables.isEmpty();
+ bool hasBoxedLoopVariables() => !boxedLoopVariables.isEmpty;
}
class ClosureClassMap {
@@ -231,7 +231,7 @@
Map<Element, Element> freeVariableMapping = data.freeVariableMapping;
// We get a copy of the keys and iterate over it, to avoid modifications
// to the map while iterating over it.
- freeVariableMapping.getKeys().forEach((Element fromElement) {
+ freeVariableMapping.keys.forEach((Element fromElement) {
assert(fromElement == freeVariableMapping[fromElement]);
Element updatedElement = capturedVariableMapping[fromElement];
assert(updatedElement != null);
@@ -250,7 +250,7 @@
}
});
ClassElement closureElement = data.closureClassElement;
- assert(closureElement != null || fieldCaptures.isEmpty());
+ assert(closureElement != null || fieldCaptures.isEmpty);
for (Element capturedElement in fieldCaptures) {
SourceString name;
if (capturedElement is BoxElement) {
@@ -302,7 +302,7 @@
visitVariableDefinitions(VariableDefinitions node) {
for (Link<Node> link = node.definitions.nodes;
- !link.isEmpty();
+ !link.isEmpty;
link = link.tail) {
Node definition = link.head;
Element element = elements[definition];
@@ -436,7 +436,7 @@
capturedVariableMapping[element] = boxed;
}
}
- if (!scopeMapping.isEmpty()) {
+ if (!scopeMapping.isEmpty) {
ClosureScope scope = new ClosureScope(box, scopeMapping);
closureData.capturingScopes[node] = scope;
}
@@ -469,7 +469,7 @@
if (scopeData == null) return;
List<Element> result = <Element>[];
for (Link<Node> link = definitions.definitions.nodes;
- !link.isEmpty();
+ !link.isEmpty;
link = link.tail) {
Node definition = link.head;
Element element = elements[definition];
@@ -586,8 +586,8 @@
// Mark all free variables as captured and use them in the outer function.
List<Element> freeVariables =
- savedClosureData.freeVariableMapping.getKeys();
- assert(freeVariables.isEmpty() || savedInsideClosure);
+ savedClosureData.freeVariableMapping.keys;
+ assert(freeVariables.isEmpty || savedInsideClosure);
for (Element freeElement in freeVariables) {
if (capturedVariableMapping[freeElement] != null &&
capturedVariableMapping[freeElement] != freeElement) {
diff --git a/lib/compiler/implementation/code_buffer.dart b/lib/compiler/implementation/code_buffer.dart
index 1e618c5..023db92 100644
--- a/lib/compiler/implementation/code_buffer.dart
+++ b/lib/compiler/implementation/code_buffer.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.
+part of dart2js;
+
class CodeBuffer implements StringBuffer {
StringBuffer buffer;
List<CodeBufferMarker> markers;
@@ -14,8 +16,8 @@
int get length => buffer.length;
- bool isEmpty() {
- return buffer.isEmpty();
+ bool get isEmpty {
+ return buffer.isEmpty;
}
/**
diff --git a/lib/compiler/implementation/compile_time_constants.dart b/lib/compiler/implementation/compile_time_constants.dart
index aa6a7a5..1569de6 100644
--- a/lib/compiler/implementation/compile_time_constants.dart
+++ b/lib/compiler/implementation/compile_time_constants.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.
+part of dart2js;
+
/**
* The [ConstantHandler] keeps track of compile-time constants,
* initializations of global and static fields, and default values of
@@ -58,7 +60,7 @@
if (result != null) return result;
if (lazyStatics.contains(element)) return null;
result = compileVariableWithDefinitions(element, work.resolutionTree);
- assert(pendingVariables.isEmpty());
+ assert(pendingVariables.isEmpty);
return result;
});
}
@@ -187,7 +189,7 @@
* other.
*/
List<VariableElement> getStaticNonFinalFieldsForEmission() {
- return initialVariableValues.getKeys().filter((element) {
+ return initialVariableValues.keys.filter((element) {
return element.kind == ElementKind.FIELD
&& !element.isInstanceMember()
&& !element.modifiers.isFinal();
@@ -200,7 +202,7 @@
* other.
*/
List<VariableElement> getStaticFinalFieldsForEmission() {
- return initialVariableValues.getKeys().filter((element) {
+ return initialVariableValues.keys.filter((element) {
return element.kind == ElementKind.FIELD
&& !element.isInstanceMember()
&& element.modifiers.isFinal();
@@ -286,7 +288,7 @@
}
List<Constant> arguments = <Constant>[];
for (Link<Node> link = node.elements.nodes;
- !link.isEmpty();
+ !link.isEmpty;
link = link.tail) {
arguments.add(evaluateConstant(link.head));
}
@@ -305,7 +307,7 @@
List<StringConstant> keys = <StringConstant>[];
Map<StringConstant, Constant> map = new Map<StringConstant, Constant>();
for (Link<Node> link = node.entries.nodes;
- !link.isEmpty();
+ !link.isEmpty;
link = link.tail) {
LiteralMapEntry entry = link.head;
Constant key = evaluateConstant(entry.key);
@@ -737,7 +739,7 @@
if (initializerList != null) {
for (Link<Node> link = initializerList.nodes;
- !link.isEmpty();
+ !link.isEmpty;
link = link.tail) {
assert(link.head is Send);
if (link.head is !SendSet) {
@@ -753,7 +755,7 @@
// A field initializer.
SendSet init = link.head;
Link<Node> initArguments = init.arguments;
- assert(!initArguments.isEmpty() && initArguments.tail.isEmpty());
+ assert(!initArguments.isEmpty && initArguments.tail.isEmpty);
Constant fieldValue = evaluate(initArguments.head);
updateFieldValue(init, elements[init], fieldValue);
}
diff --git a/lib/compiler/implementation/compiler.dart b/lib/compiler/implementation/compiler.dart
index 6245eab..97fad39 100644
--- a/lib/compiler/implementation/compiler.dart
+++ b/lib/compiler/implementation/compiler.dart
@@ -2,6 +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.
+part of dart2js;
/**
* If true, print a warning for each method that was resolved, but not
@@ -106,7 +107,7 @@
// TODO(5074): Remove this field once we don't accept the
// deprecated parameter specification.
- static final bool REJECT_NAMED_ARGUMENT_AS_POSITIONAL = false;
+ static final bool REJECT_NAMED_ARGUMENT_AS_POSITIONAL = true;
final Tracer tracer;
@@ -143,7 +144,7 @@
return f();
} on CompilerCancelledException catch (ex) {
throw;
- } on StackOverflowException catch (ex) {
+ } on StackOverflowError catch (ex) {
// We cannot report anything useful in this case, because we
// do not have enough stack space.
throw;
@@ -511,7 +512,7 @@
}
void processQueue(Enqueuer world, Element main) {
- backend.processNativeClasses(world, libraries.getValues());
+ backend.processNativeClasses(world, libraries.values);
world.addToWorkList(main);
progress.reset();
world.forEach((WorkItem work) {
@@ -537,8 +538,8 @@
internalErrorOnElement(work.element, "Work list is not empty.");
});
}
- var resolved = new Set.from(enqueuer.resolution.resolvedElements.getKeys());
- for (Element e in codegenWorld.generatedCode.getKeys()) {
+ var resolved = new Set.from(enqueuer.resolution.resolvedElements.keys);
+ for (Element e in codegenWorld.generatedCode.keys) {
resolved.remove(e);
}
for (Element e in new Set.from(resolved)) {
@@ -601,7 +602,7 @@
enqueuer.resolution.resolvedElements[work.element] = work.resolutionTree;
return work.resolutionTree;
}
- if (progress.elapsedInMs() > 500) {
+ if (progress.elapsedMilliseconds > 500) {
// TODO(ahe): Add structured diagnostics to the compiler API and
// use it to separate this from the --verbose option.
if (phase == PHASE_RESOLVING) {
@@ -625,7 +626,7 @@
void codegen(WorkItem work, Enqueuer world) {
if (!identical(world, enqueuer.codegen)) return null;
- if (progress.elapsedInMs() > 500) {
+ if (progress.elapsedMilliseconds > 500) {
// TODO(ahe): Add structured diagnostics to the compiler API and
// use it to separate this from the --verbose option.
log('Compiled ${codegenWorld.generatedCode.length} methods.');
@@ -783,7 +784,7 @@
CompilerTask(this.compiler) : watch = new Stopwatch();
String get name => 'Unknown task';
- int get timing => watch.elapsedInMs();
+ int get timing => watch.elapsedMilliseconds;
measure(Function action) {
// TODO(kasperl): Do we have to worry about exceptions here?
diff --git a/lib/compiler/implementation/constant_system.dart b/lib/compiler/implementation/constant_system.dart
index aef3a84..566c673 100644
--- a/lib/compiler/implementation/constant_system.dart
+++ b/lib/compiler/implementation/constant_system.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.
+part of dart2js;
+
interface Operation {
final SourceString name;
bool isUserDefinable();
diff --git a/lib/compiler/implementation/constant_system_dart.dart b/lib/compiler/implementation/constant_system_dart.dart
index ee38d71..ad01e99 100644
--- a/lib/compiler/implementation/constant_system_dart.dart
+++ b/lib/compiler/implementation/constant_system_dart.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.
+part of dart2js;
+
const DART_CONSTANT_SYSTEM = const DartConstantSystem();
class BitNotOperation implements UnaryOperation {
diff --git a/lib/compiler/implementation/constants.dart b/lib/compiler/implementation/constants.dart
index 5268e8b..d4b0e8a 100644
--- a/lib/compiler/implementation/constants.dart
+++ b/lib/compiler/implementation/constants.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.
+part of dart2js;
+
abstract class ConstantVisitor<R> {
R visitSentinel(SentinelConstant constant);
R visitFunction(FunctionConstant constant);
@@ -54,7 +56,7 @@
List<Constant> getDependencies() => const <Constant>[];
// Just use a random value.
- int hashCode() => 24297418;
+ int get hashCode => 24297418;
bool isSentinel() => true;
@@ -85,7 +87,7 @@
return compiler.functionClass.computeType(compiler);
}
- int hashCode() => (17 * element.hashCode()) & 0x7fffffff;
+ int get hashCode => (17 * element.hashCode) & 0x7fffffff;
accept(ConstantVisitor visitor) => visitor.visitFunction(this);
}
@@ -126,7 +128,7 @@
}
// The magic constant has no meaning. It is just a random value.
- int hashCode() => 785965825;
+ int get hashCode => 785965825;
DartString toDartString() => const LiteralDartString("null");
accept(ConstantVisitor visitor) => visitor.visitNull(this);
@@ -175,7 +177,7 @@
return value == otherInt.value;
}
- int hashCode() => value.hashCode();
+ int get hashCode => value.hashCode;
DartString toDartString() => new DartString.literal(value.toString());
accept(ConstantVisitor visitor) => visitor.visitInt(this);
@@ -184,13 +186,13 @@
class DoubleConstant extends NumConstant {
final double value;
factory DoubleConstant(double value) {
- if (value.isNaN()) {
+ if (value.isNaN) {
return const DoubleConstant._internal(double.NAN);
} else if (value == double.INFINITY) {
return const DoubleConstant._internal(double.INFINITY);
} else if (value == -double.INFINITY) {
return const DoubleConstant._internal(-double.INFINITY);
- } else if (value == 0.0 && !value.isNegative()) {
+ } else if (value == 0.0 && !value.isNegative) {
return const DoubleConstant._internal(0.0);
} else if (value == 1.0) {
return const DoubleConstant._internal(1.0);
@@ -200,9 +202,9 @@
}
const DoubleConstant._internal(this.value);
bool isDouble() => true;
- bool isNaN() => value.isNaN();
+ 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 isMinusZero() => value == 0.0 && value.isNegative;
DartType computeType(Compiler compiler) {
return compiler.doubleClass.computeType(compiler);
@@ -213,15 +215,15 @@
DoubleConstant otherDouble = other;
double otherValue = otherDouble.value;
if (value == 0.0 && otherValue == 0.0) {
- return value.isNegative() == otherValue.isNegative();
- } else if (value.isNaN()) {
- return otherValue.isNaN();
+ return value.isNegative == otherValue.isNegative;
+ } else if (value.isNaN) {
+ return otherValue.isNaN;
} else {
return value == otherValue;
}
}
- int hashCode() => value.hashCode();
+ int get hashCode => value.hashCode;
DartString toDartString() => new DartString.literal(value.toString());
accept(ConstantVisitor visitor) => visitor.visitDouble(this);
@@ -253,7 +255,7 @@
bool operator ==(var other) => identical(this, other);
// The magic constant is just a random value. It does not have any
// significance.
- int hashCode() => 499;
+ int get hashCode => 499;
DartString toDartString() => const LiteralDartString("true");
accept(ConstantVisitor visitor) => visitor.visitTrue(this);
@@ -271,7 +273,7 @@
bool operator ==(var other) => identical(this, other);
// The magic constant is just a random value. It does not have any
// significance.
- int hashCode() => 536555975;
+ int get hashCode => 536555975;
DartString toDartString() => const LiteralDartString("false");
accept(ConstantVisitor visitor) => visitor.visitFalse(this);
@@ -279,15 +281,15 @@
class StringConstant extends PrimitiveConstant {
final DartString value;
- int _hashCode;
+ final int hashCode;
final Node node;
- StringConstant(this.value, this.node) {
- // TODO(floitsch): cache StringConstants.
- // TODO(floitsch): compute hashcode without calling toString() on the
- // DartString.
- _hashCode = value.slowToString().hashCode();
- }
+ // TODO(floitsch): cache StringConstants.
+ // TODO(floitsch): compute hashcode without calling toString() on the
+ // DartString.
+ StringConstant(DartString value, this.node)
+ : this.value = value,
+ this.hashCode = value.slowToString().hashCode;
bool isString() => true;
DartType computeType(Compiler compiler) {
@@ -297,10 +299,9 @@
bool operator ==(var other) {
if (other is !StringConstant) return false;
StringConstant otherString = other;
- return (_hashCode == otherString._hashCode) && (value == otherString.value);
+ return (hashCode == otherString.hashCode) && (value == otherString.value);
}
- int hashCode() => _hashCode;
DartString toDartString() => value;
int get length => value.length;
@@ -317,25 +318,30 @@
// TODO(1603): The class should be marked as abstract, but the VM doesn't
// currently allow this.
- abstract int hashCode();
+ abstract int get hashCode;
}
class ListConstant extends ObjectConstant {
final List<Constant> entries;
- int _hashCode;
+ final int hashCode;
- ListConstant(DartType type, this.entries) : super(type) {
+ ListConstant(DartType type, List<Constant> entries)
+ : this.entries = entries,
+ hashCode = _computeHash(entries),
+ super(type);
+ bool isList() => true;
+
+ static int _computeHash(List<Constant> entries) {
// TODO(floitsch): create a better hash.
int hash = 0;
- for (Constant input in entries) hash ^= input.hashCode();
- _hashCode = hash;
+ for (Constant input in entries) hash ^= input.hashCode;
+ return hash;
}
- bool isList() => true;
bool operator ==(var other) {
if (other is !ListConstant) return false;
ListConstant otherList = other;
- if (hashCode() != otherList.hashCode()) return false;
+ if (hashCode != otherList.hashCode) return false;
// TODO(floitsch): verify that the generic types are the same.
if (entries.length != otherList.entries.length) return false;
for (int i = 0; i < entries.length; i++) {
@@ -344,8 +350,6 @@
return true;
}
- int hashCode() => _hashCode;
-
List<Constant> getDependencies() => entries;
int get length => entries.length;
@@ -373,21 +377,25 @@
final ListConstant keys;
final List<Constant> values;
final Constant protoValue;
- int _hashCode;
+ final int hashCode;
- MapConstant(DartType type, this.keys, this.values, this.protoValue)
- : super(type) {
+ MapConstant(DartType type, this.keys, List<Constant> values, this.protoValue)
+ : this.values = values,
+ this.hashCode = computeHash(values),
+ super(type);
+ bool isMap() => true;
+
+ static int computeHash(List<Constant> values) {
// TODO(floitsch): create a better hash.
int hash = 0;
- for (Constant value in values) hash ^= value.hashCode();
- _hashCode = hash;
+ for (Constant value in values) hash ^= value.hashCode;
+ return hash;
}
- bool isMap() => true;
bool operator ==(var other) {
if (other is !MapConstant) return false;
MapConstant otherMap = other;
- if (hashCode() != otherMap.hashCode()) return false;
+ if (hashCode != otherMap.hashCode) return false;
// TODO(floitsch): verify that the generic types are the same.
if (keys != otherMap.keys) return false;
for (int i = 0; i < values.length; i++) {
@@ -396,8 +404,6 @@
return true;
}
- int hashCode() => _hashCode;
-
List<Constant> getDependencies() {
List<Constant> result = <Constant>[keys];
result.addAll(values);
@@ -411,24 +417,30 @@
class ConstructedConstant extends ObjectConstant {
final List<Constant> fields;
- int _hashCode;
+ final int hashCode;
- ConstructedConstant(DartType type, this.fields) : super(type) {
+ ConstructedConstant(DartType type, List<Constant> fields)
+ : this.fields = fields,
+ hashCode = computeHash(type, fields),
+ super(type) {
assert(type != null);
+ }
+ bool isConstructedObject() => true;
+
+ static int computeHash(DartType type, List<Constant> fields) {
// TODO(floitsch): create a better hash.
int hash = 0;
for (Constant field in fields) {
- hash ^= field.hashCode();
+ hash ^= field.hashCode;
}
- hash ^= type.element.hashCode();
- _hashCode = hash;
+ hash ^= type.element.hashCode;
+ return hash;
}
- bool isConstructedObject() => true;
bool operator ==(var otherVar) {
if (otherVar is !ConstructedConstant) return false;
ConstructedConstant other = otherVar;
- if (hashCode() != other.hashCode()) return false;
+ if (hashCode != other.hashCode) return false;
// TODO(floitsch): verify that the (generic) types are the same.
if (type.element != other.type.element) return false;
if (fields.length != other.fields.length) return false;
@@ -438,7 +450,6 @@
return true;
}
- int hashCode() => _hashCode;
List<Constant> getDependencies() => fields;
accept(ConstantVisitor visitor) => visitor.visitConstructed(this);
diff --git a/lib/compiler/implementation/dart2js.dart b/lib/compiler/implementation/dart2js.dart
index 526652c..eafb1e6 100644
--- a/lib/compiler/implementation/dart2js.dart
+++ b/lib/compiler/implementation/dart2js.dart
@@ -54,7 +54,7 @@
var pattern = new RegExp('^(${Strings.join(patterns, ")\$|(")})\$');
OUTER: for (String argument in argv) {
Match match = pattern.firstMatch(argument);
- assert(match.groupCount() == handlers.length);
+ assert(match.groupCount == handlers.length);
for (int i = 0; i < handlers.length; i++) {
if (match[i + 1] != null) {
handlers[i].handle(argument);
@@ -173,7 +173,7 @@
helpAndFail('Error: --force-strip may only be used with '
'--output-type=dart');
}
- if (arguments.isEmpty()) {
+ if (arguments.isEmpty) {
helpAndFail('Error: No Dart file specified.');
}
if (arguments.length > 1) {
diff --git a/lib/compiler/implementation/dart_backend/backend.dart b/lib/compiler/implementation/dart_backend/backend.dart
index 45eef3f..8f46463 100644
--- a/lib/compiler/implementation/dart_backend/backend.dart
+++ b/lib/compiler/implementation/dart_backend/backend.dart
@@ -2,6 +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.
+part of dart_backend;
+
+// TODO(ahe): This class is simply wrong. This backend should use
+// elements when it can, not AST nodes. Perhaps a [Map<Element,
+// TreeElements>] is what is needed.
class ElementAst {
final Node ast;
final TreeElements treeElements;
@@ -15,13 +20,15 @@
}
ElementAst.forClassLike(this.ast)
- : this.treeElements = new TreeElementMapping();
+ : 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>[];
+ AggregatedTreeElements() : treeElements = <TreeElements>[], super(null);
Element operator[](Node node) {
final result = super[node];
@@ -85,7 +92,7 @@
rewiteStatement(Statement statement) {
if (statement is Block) {
Link statements = statement.statements.nodes;
- if (!statements.isEmpty() && statements.tail.isEmpty()) {
+ if (!statements.isEmpty && statements.tail.isEmpty) {
Statement single = statements.head;
bool isDeclaration =
single is VariableDefinitions || single is FunctionDeclaration;
@@ -130,7 +137,7 @@
Set<DartType> processedTypes = new Set<DartType>();
List<DartType> workQueue = new List<DartType>();
workQueue.addAll(
- classMembers.getKeys().map((classElement) => classElement.type));
+ classMembers.keys.map((classElement) => classElement.type));
workQueue.addAll(compiler.resolverWorld.isChecks);
Element typeErrorElement =
compiler.coreLibrary.find(new SourceString('TypeError'));
@@ -154,7 +161,7 @@
}
}
- while (!workQueue.isEmpty()) {
+ while (!workQueue.isEmpty) {
DartType type = workQueue.removeLast();
if (processedTypes.contains(type)) continue;
processedTypes.add(type);
@@ -221,7 +228,7 @@
// however as of today there are problems with names of some core library
// interfaces, most probably for interfaces of literals.
final fixedMemberNames = new Set<String>();
- for (final library in compiler.libraries.getValues()) {
+ for (final library in compiler.libraries.values) {
if (!library.isPlatformLibrary) continue;
library.implementation.forEachLocalMember((Element element) {
if (element is ClassElement) {
@@ -237,7 +244,7 @@
// Fetch name of named constructors and factories if any,
// otherwise store regular name.
// TODO(antonm): better way to analyze the name.
- fixedMemberNames.add(name.split(r'$').last());
+ fixedMemberNames.add(name.split(r'$').last);
}
}
// Even class names are added due to a delicate problem we have:
@@ -326,7 +333,7 @@
processElement(element, elementAst);
} else {
if (!element.isTopLevel()) {
- compiler.cancel(reason: 'Cannot process $element', element: element);
+ compiler.cancel('Cannot process $element', element: element);
}
addTopLevel(element, elementAst);
}
@@ -339,11 +346,11 @@
new Identifier(new StringToken(IDENTIFIER_INFO, '', -1));
NextClassElement:
- for (ClassElement classElement in classMembers.getKeys()) {
+ for (ClassElement classElement in classMembers.keys) {
for (Element member in classMembers[classElement]) {
if (member.isConstructor()) continue NextClassElement;
}
- if (classElement.constructors.isEmpty()) continue NextClassElement;
+ if (classElement.constructors.isEmpty) continue NextClassElement;
// TODO(antonm): check with AAR team if there is better approach.
// As an idea: provide template as a Dart code---class C { C.name(); }---
@@ -364,7 +371,7 @@
classMembers[classElement].add(constructor);
elementAsts[constructor] =
- new ElementAst(constructor.cachedNode, new TreeElementMapping());
+ new ElementAst(constructor.cachedNode, new TreeElementMapping(null));
}
// Create all necessary placeholders.
@@ -440,7 +447,7 @@
void logResultBundleSizeInfo(Set<Element> topLevelElements) {
Collection<LibraryElement> referencedLibraries =
- compiler.libraries.getValues().filter(isUserLibrary);
+ compiler.libraries.values.filter(isUserLibrary);
// Sum total size of scripts in each referenced library.
int nonPlatformSize = 0;
for (LibraryElement lib in referencedLibraries) {
diff --git a/lib/compiler/implementation/dart_backend/emitter.dart b/lib/compiler/implementation/dart_backend/emitter.dart
index d3bc217..4cf87767 100644
--- a/lib/compiler/implementation/dart_backend/emitter.dart
+++ b/lib/compiler/implementation/dart_backend/emitter.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.
+part of dart_backend;
+
String emitCode(
Unparser unparser,
Map<LibraryElement, String> imports,
diff --git a/lib/compiler/implementation/dart_backend/placeholder_collector.dart b/lib/compiler/implementation/dart_backend/placeholder_collector.dart
index d4c8c41..52a578a 100644
--- a/lib/compiler/implementation/dart_backend/placeholder_collector.dart
+++ b/lib/compiler/implementation/dart_backend/placeholder_collector.dart
@@ -2,11 +2,13 @@
// 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 dart_backend;
+
class LocalPlaceholder {
final String identifier;
final Set<Node> nodes;
LocalPlaceholder(this.identifier) : nodes = new Set<Node>();
- int hashCode() => identifier.hashCode();
+ int get hashCode => identifier.hashCode;
String toString() =>
'local_placeholder[id($identifier), nodes($nodes)]';
}
@@ -368,7 +370,7 @@
}
void internalError(String reason, {Node node}) {
- compiler.cancel(reason: reason, node: node);
+ compiler.cancel(reason, node: node);
}
void unreachable() { internalError('Unreachable case'); }
diff --git a/lib/compiler/implementation/dart_backend/renamer.dart b/lib/compiler/implementation/dart_backend/renamer.dart
index 8f8521e..bf35ab3 100644
--- a/lib/compiler/implementation/dart_backend/renamer.dart
+++ b/lib/compiler/implementation/dart_backend/renamer.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.
+part of dart_backend;
+
Function get _compareNodes =>
compareBy((n) => n.getBeginToken().charOffset);
@@ -76,7 +78,7 @@
}
sortedForEach(Map<Element, Dynamic> map, f) {
- for (Element element in sortElements(map.getKeys())) {
+ for (Element element in sortElements(map.keys)) {
f(element, map[element]);
}
}
@@ -112,7 +114,7 @@
if (compiler.enableMinification) {
MinifyingGenerator generator = new MinifyingGenerator();
Set<String> forbiddenIdentifiers = new Set<String>.from(['main']);
- forbiddenIdentifiers.addAll(Keyword.keywords.getKeys());
+ forbiddenIdentifiers.addAll(Keyword.keywords.keys);
forbiddenIdentifiers.addAll(fixedMemberNames);
generateUniqueName = (_) =>
generator.generate(forbiddenIdentifiers.contains);
@@ -120,14 +122,14 @@
Function renameElement = makeElementRenamer(rename, generateUniqueName);
Set<String> allParameterIdentifiers = new Set<String>();
- for (var functionScope in placeholderCollector.functionScopes.getValues()) {
+ for (var functionScope in placeholderCollector.functionScopes.values) {
allParameterIdentifiers.addAll(functionScope.parameterIdentifiers);
}
// Build a sorted (by usage) list of local nodes that will be renamed to
// the same identifier. So the top-used local variables in all functions
// will be renamed first and will all share the same new identifier.
List<Set<Node>> allSortedLocals = new List<Set<Node>>();
- for (var functionScope in placeholderCollector.functionScopes.getValues()) {
+ for (var functionScope in placeholderCollector.functionScopes.values) {
// Add current sorted local identifiers to the whole sorted list
// of all local identifiers for all functions.
List<LocalPlaceholder> currentSortedPlaceholders =
@@ -175,11 +177,10 @@
renameNodes(renamable.nodes, (_) => newName);
}
} else {
- // TODO(antonm): we should also populate this set with top-level
- // names from core library.
// Never rename anything to 'main'.
final usedTopLevelOrMemberIdentifiers = new Set<String>();
usedTopLevelOrMemberIdentifiers.add('main');
+ usedTopLevelOrMemberIdentifiers.addAll(fixedMemberNames);
generateUniqueName = (originalName) {
String newName = conservativeGenerator(
originalName, usedTopLevelOrMemberIdentifiers.contains);
diff --git a/lib/compiler/implementation/dart_backend/utils.dart b/lib/compiler/implementation/dart_backend/utils.dart
index 44ea494..4c4547d 100644
--- a/lib/compiler/implementation/dart_backend/utils.dart
+++ b/lib/compiler/implementation/dart_backend/utils.dart
@@ -2,27 +2,26 @@
// 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 dart_backend;
+
class CloningVisitor implements Visitor<Node> {
final TreeElements originalTreeElements;
final TreeElementMapping cloneTreeElements;
- CloningVisitor(this.originalTreeElements)
- : cloneTreeElements = new TreeElementMapping();
+ CloningVisitor(originalTreeElements)
+ : cloneTreeElements =
+ new TreeElementMapping(originalTreeElements.currentElement),
+ this.originalTreeElements = originalTreeElements;
visit(Node node) {
if (node == null) return null;
final clone = node.accept(this);
+
final originalElement = originalTreeElements[node];
- if (originalElement != null) {
- cloneTreeElements[clone] = originalElement;
- }
- TypeAnnotation asTypeAnnotation = node.asTypeAnnotation();
- if (asTypeAnnotation != null) {
- final originalType = originalTreeElements.getType(asTypeAnnotation);
- if (originalType != null) {
- cloneTreeElements.setType(clone.asTypeAnnotation(), originalType);
- }
- }
+ if (originalElement != null) cloneTreeElements[clone] = originalElement;
+
+ final originalType = originalTreeElements.getType(node);
+ if (originalType != null) cloneTreeElements.setType(clone, originalType);
return clone;
}
@@ -133,11 +132,11 @@
// Special case for classes which exist in hierarchy, but not
// in the visitor.
if (node is Prefix) {
- return node.nodes.isEmpty() ?
+ return node.nodes.isEmpty ?
new Prefix() : new Prefix.singleton(visit(node.nodes.head));
}
if (node is Postfix) {
- return node.nodes.isEmpty() ?
+ return node.nodes.isEmpty ?
new Postfix() : new Postfix.singleton(visit(node.nodes.head));
}
LinkBuilder<Node> builder = new LinkBuilder<Node>();
diff --git a/lib/compiler/implementation/diagnostic_listener.dart b/lib/compiler/implementation/diagnostic_listener.dart
index e684e9e..fa335e0 100644
--- a/lib/compiler/implementation/diagnostic_listener.dart
+++ b/lib/compiler/implementation/diagnostic_listener.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.
+part of dart2js;
+
abstract class DiagnosticListener {
// TODO(karlklose): replace cancel with better error reporting mechanism.
void cancel(String reason, {node, token, instruction, element});
diff --git a/lib/compiler/implementation/elements/elements.dart b/lib/compiler/implementation/elements/elements.dart
index e3a46e2..1fcdac5 100644
--- a/lib/compiler/implementation/elements/elements.dart
+++ b/lib/compiler/implementation/elements/elements.dart
@@ -123,9 +123,12 @@
}
class Element implements Spannable {
+ static int elementHashCode = 0;
+
final SourceString name;
final ElementKind kind;
final Element enclosingElement;
+ final int hashCode = ++elementHashCode;
Link<MetadataAnnotation> metadata = const Link<MetadataAnnotation>();
Element(this.name, this.kind, this.enclosingElement) {
@@ -231,11 +234,11 @@
Element get declaration => isPatch ? origin : this;
Element get patch {
- throw new UnsupportedOperationException('patch is not supported on $this');
+ throw new UnsupportedError('patch is not supported on $this');
}
Element get origin {
- throw new UnsupportedOperationException('origin is not supported on $this');
+ throw new UnsupportedError('origin is not supported on $this');
}
// TODO(johnniwinther): This breaks for libraries (for which enclosing
@@ -261,11 +264,6 @@
return token;
}
- // TODO(kasperl): This is a very bad hash code for the element and
- // there's no reason why two elements with the same name should have
- // the same hash code. Replace this with a simple id in the element?
- int hashCode() => name == null ? 0 : name.hashCode();
-
CompilationUnitElement getCompilationUnit() {
Element element = this;
while (!element.isCompilationUnit()) {
@@ -316,20 +314,9 @@
}
/**
- * Creates the scope for this element. The scope of the
- * enclosing element will be the parent scope.
+ * Creates the scope for this element.
*/
- // TODO(johnniwinther): Clean up scope generation. Possibly generation scopes
- // externally.
- Scope buildScope({bool patchScope: false}) =>
- buildEnclosingScope(patchScope: patchScope);
-
- /**
- * Creates the scope for the enclosing element.
- */
- // TODO(johnniwinther): Remove buildEnclosingScope as part of scope clean-up.
- Scope buildEnclosingScope({bool patchScope: false}) =>
- enclosingElement.buildScope(patchScope: patchScope);
+ Scope buildScope() => enclosingElement.buildScope();
String toString() {
// TODO(johnniwinther): Test for nullness of name, or make non-nullness an
@@ -391,6 +378,11 @@
Link<MetadataAnnotation> get metadata => unsupported();
getLibrary() => enclosingElement.getLibrary();
+
+ String toString() {
+ String n = targetName.slowToString();
+ return '<$n: ${messageKind.message(messageArguments)}>';
+ }
}
class ErroneousFunctionElement extends ErroneousElement
@@ -546,7 +538,7 @@
api_e.Diagnostic.WARNING);
return;
}
- if (!localMembers.isEmpty()) {
+ if (!localMembers.isEmpty) {
listener.reportMessage(
listener.spanFromNode(tag),
MessageKind.BEFORE_TOP_LEVEL.error(),
@@ -700,10 +692,18 @@
*/
Element find(SourceString elementName) {
Element result = localScope[elementName];
- if (result == null) {
- result = importScope[elementName];
+ if (result != null) return result;
+ if (origin != null) {
+ result = origin.localScope[elementName];
+ if (result != null) return result;
}
- return result;
+ result = importScope[elementName];
+ if (result != null) return result;
+ if (origin != null) {
+ result = origin.importScope[elementName];
+ if (result != null) return result;
+ }
+ return null;
}
/** Look up a top-level element in this library, but only look for
@@ -754,16 +754,7 @@
}
}
- // TODO(johnniwinther): Rewrite to avoid the optional argument.
- Scope buildEnclosingScope({bool patchScope: false}) {
- if (origin != null) {
- return new PatchLibraryScope(origin, this);
- } if (patchScope && patch != null) {
- return new PatchLibraryScope(this, patch);
- } else {
- return new TopScope(this);
- }
- }
+ Scope buildScope() => new LibraryScope(this);
bool get isPlatformLibrary => uri.scheme == "dart";
@@ -826,10 +817,8 @@
Link<DartType> get typeVariables => cachedType.typeArguments;
- // TODO(johnniwinther): Rewrite to avoid the optional argument.
- Scope buildScope({bool patchScope: false}) {
- return new TypeDeclarationScope(
- enclosingElement.buildScope(patchScope: patchScope), this);
+ Scope buildScope() {
+ return new TypeDeclarationScope(enclosingElement.buildScope(), this);
}
}
@@ -850,7 +839,7 @@
if (cachedNode != null) return cachedNode;
VariableDefinitions definitions = variables.parseNode(listener);
for (Link<Node> link = definitions.definitions.nodes;
- !link.isEmpty(); link = link.tail) {
+ !link.isEmpty; link = link.tail) {
Expression initializedIdentifier = link.head;
Identifier identifier = initializedIdentifier.asIdentifier();
if (identifier == null) {
@@ -934,9 +923,9 @@
} else {
// Is node.definitions exactly one FunctionExpression?
Link<Node> link = node.definitions.nodes;
- if (!link.isEmpty() &&
+ if (!link.isEmpty &&
link.head.asFunctionExpression() != null &&
- link.tail.isEmpty()) {
+ link.tail.isEmpty) {
FunctionExpression functionExpression = link.head;
// We found exactly one FunctionExpression
functionSignature =
@@ -1040,7 +1029,7 @@
void forEachRequiredParameter(void function(Element parameter)) {
for (Link<Element> link = requiredParameters;
- !link.isEmpty();
+ !link.isEmpty;
link = link.tail) {
function(link.head);
}
@@ -1048,7 +1037,7 @@
void forEachOptionalParameter(void function(Element parameter)) {
for (Link<Element> link = optionalParameters;
- !link.isEmpty();
+ !link.isEmpty;
link = link.tail) {
function(link.head);
}
@@ -1279,7 +1268,7 @@
// Create types and elements for type variable.
var arguments = new LinkBuilder<DartType>();
- for (Link link = parameters.nodes; !link.isEmpty(); link = link.tail) {
+ for (Link link = parameters.nodes; !link.isEmpty; link = link.tail) {
TypeVariable node = link.head;
SourceString variableName = node.name.source;
TypeVariableElement variableElement =
@@ -1493,9 +1482,7 @@
SourceString normalizedName;
SourceString className = this.name;
SourceString constructorName = selector.name;
- if (!identical(constructorName, const SourceString('')) &&
- ((className == null) ||
- (constructorName.slowToString() != className.slowToString()))) {
+ if (constructorName != const SourceString('')) {
normalizedName = Elements.constructConstructorName(className,
constructorName);
} else {
@@ -1514,7 +1501,7 @@
bool get hasConstructor {
// Search in scope to be sure we search patched constructors.
- for (var element in localScope.getValues()) {
+ for (var element in localScope.values) {
if (element.isConstructor()) return true;
}
return false;
@@ -1639,29 +1626,9 @@
bool isInterface() => false;
bool isNative() => nativeName != null;
- int hashCode() => id;
+ int get hashCode => id;
- // TODO(johnniwinther): Rewrite to avoid the optional argument.
- Scope buildScope({bool patchScope: false}) {
- if (origin != null) {
- return new PatchClassScope(
- enclosingElement.buildScope(patchScope: patchScope), origin, this);
- } else if (patchScope && patch != null) {
- return new PatchClassScope(
- enclosingElement.buildScope(patchScope: patchScope), this, patch);
- } else {
- return new ClassScope(
- enclosingElement.buildScope(patchScope: patchScope), this);
- }
- }
-
- Scope buildLocalScope() {
- if (origin != null) {
- return new LocalPatchClassScope(origin, this);
- } else {
- return new LocalClassScope(this);
- }
- }
+ Scope buildScope() => new ClassScope(enclosingElement.buildScope(), this);
Link<DartType> get allSupertypesAndSelf {
return allSupertypes.prepend(new InterfaceType(this));
diff --git a/lib/compiler/implementation/enqueue.dart b/lib/compiler/implementation/enqueue.dart
index 0e97273..6ac8d8f 100644
--- a/lib/compiler/implementation/enqueue.dart
+++ b/lib/compiler/implementation/enqueue.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.
+part of dart2js;
+
class EnqueueTask extends CompilerTask {
final Enqueuer codegen;
final Enqueuer resolution;
@@ -209,7 +211,7 @@
cls.ensureResolved(compiler);
for (Link<DartType> supertypes = cls.allSupertypesAndSelf;
- !supertypes.isEmpty(); supertypes = supertypes.tail) {
+ !supertypes.isEmpty; supertypes = supertypes.tail) {
cls = supertypes.head.element;
if (seenClasses.contains(cls)) continue;
seenClasses.add(cls);
@@ -278,7 +280,7 @@
Link<Element> members = instanceMembersByName[memberName];
if (members != null) {
LinkBuilder<Element> remaining = new LinkBuilder<Element>();
- for (; !members.isEmpty(); members = members.tail) {
+ for (; !members.isEmpty; members = members.tail) {
if (!f(members.head)) remaining.addLast(members.head);
}
instanceMembersByName[memberName] = remaining.toLink();
@@ -355,7 +357,7 @@
}
void forEach(f(WorkItem work)) {
- while (!queue.isEmpty()) {
+ while (!queue.isEmpty) {
f(queue.removeLast()); // TODO(kasperl): Why isn't this removeFirst?
}
}
diff --git a/lib/compiler/implementation/js/nodes.dart b/lib/compiler/implementation/js/nodes.dart
index dcdba6e..ae0ae14 100644
--- a/lib/compiler/implementation/js/nodes.dart
+++ b/lib/compiler/implementation/js/nodes.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.
+part of js;
+
abstract class NodeVisitor<T> {
T visitProgram(Program node);
diff --git a/lib/compiler/implementation/js/printer.dart b/lib/compiler/implementation/js/printer.dart
index 02982ff..d2f7fab 100644
--- a/lib/compiler/implementation/js/printer.dart
+++ b/lib/compiler/implementation/js/printer.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.
+part of js;
+
class Printer implements NodeVisitor {
final bool shouldCompressOutput;
leg.Compiler compiler;
@@ -18,7 +20,7 @@
outBuffer = new leg.CodeBuffer(),
danglingElseVisitor = new DanglingElseVisitor(compiler),
namer = determineRenamer(compiler.enableMinification);
-
+
static Namer determineRenamer(bool shouldCompressOutput) {
// TODO(erikcorry): Re-enable the MinifyRenamer after M1.
return new IdentityNamer();
@@ -331,7 +333,7 @@
visitNestedExpression(node.expression, EXPRESSION,
newInForInit: false, newAtStatementBegin: false);
outLn(":");
- if (!node.body.statements.isEmpty()) {
+ if (!node.body.statements.isEmpty) {
indentLevel++;
blockOutWithoutBraces(node.body);
indentLevel--;
@@ -340,7 +342,7 @@
visitDefault(Default node) {
outIndentLn("default:");
- if (!node.body.statements.isEmpty()) {
+ if (!node.body.statements.isEmpty) {
indentLevel++;
blockOutWithoutBraces(node.body);
indentLevel--;
@@ -945,7 +947,7 @@
String declareName(String oldName) {
const LETTERS = 52;
const DIGITS = 10;
- if (maps.isEmpty()) return oldName;
+ if (maps.isEmpty) return oldName;
String newName;
int n = nameNumber;
@@ -978,7 +980,7 @@
}
assert(const RegExp(r'[a-zA-Z][a-zA-Z0-9]*').hasMatch(newName));
nameNumber++;
- maps.last()[oldName] = newName;
+ maps.last[oldName] = newName;
return newName;
}
}
diff --git a/lib/compiler/implementation/js_backend/backend.dart b/lib/compiler/implementation/js_backend/backend.dart
index a196406..9f79fcc 100644
--- a/lib/compiler/implementation/js_backend/backend.dart
+++ b/lib/compiler/implementation/js_backend/backend.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.
+part of js_backend;
+
typedef void Recompile(Element element);
class ReturnInfo {
@@ -422,9 +424,9 @@
void dump() {
Set<Element> allFields = new Set<Element>();
- fieldInitializerTypeMap.getKeys().forEach(allFields.add);
- fieldConstructorTypeMap.getKeys().forEach(allFields.add);
- fieldTypeMap.getKeys().forEach(allFields.add);
+ fieldInitializerTypeMap.keys.forEach(allFields.add);
+ fieldConstructorTypeMap.keys.forEach(allFields.add);
+ fieldTypeMap.keys.forEach(allFields.add);
allFields.forEach((Element field) {
print("Inferred $field has type ${optimisticFieldType(field)}");
});
diff --git a/lib/compiler/implementation/js_backend/constant_emitter.dart b/lib/compiler/implementation/js_backend/constant_emitter.dart
index 792cf27..ad7b2b0 100644
--- a/lib/compiler/implementation/js_backend/constant_emitter.dart
+++ b/lib/compiler/implementation/js_backend/constant_emitter.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.
+part of js_backend;
+
class ConstantEmitter implements ConstantVisitor {
final Compiler compiler;
final Namer namer;
@@ -63,7 +65,7 @@
void visitDouble(DoubleConstant constant) {
double value = constant.value;
- if (value.isNaN()) {
+ if (value.isNaN) {
buffer.add("(0/0)");
} else if (value == double.INFINITY) {
buffer.add("(1/0)");
@@ -91,7 +93,7 @@
CodeBuffer buffer,
Node diagnosticNode) {
Iterator<int> iterator = string.iterator();
- while (iterator.hasNext()) {
+ while (iterator.hasNext) {
int code = iterator.next();
if (identical(code, $SQ)) {
buffer.add(r"\'");
diff --git a/lib/compiler/implementation/js_backend/constant_system_javascript.dart b/lib/compiler/implementation/js_backend/constant_system_javascript.dart
index f4532b5..b36c71c 100644
--- a/lib/compiler/implementation/js_backend/constant_system_javascript.dart
+++ b/lib/compiler/implementation/js_backend/constant_system_javascript.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.
+part of js_backend;
+
const JAVA_SCRIPT_CONSTANT_SYSTEM = const JavaScriptConstantSystem();
class JavaScriptBitNotOperation extends BitNotOperation {
@@ -196,7 +198,7 @@
} else if (constant.isDouble()) {
DoubleConstant doubleResult = constant;
double doubleValue = doubleResult.value;
- if (!doubleValue.isInfinite() && !doubleValue.isNaN() &&
+ if (!doubleValue.isInfinite && !doubleValue.isNaN &&
!constant.isMinusZero()) {
int intValue = doubleValue.toInt();
if (intValue == doubleValue && integerFitsIntoDouble(intValue)) {
diff --git a/lib/compiler/implementation/js_backend/emitter.dart b/lib/compiler/implementation/js_backend/emitter.dart
index ad1d1fa..f164a85 100644
--- a/lib/compiler/implementation/js_backend/emitter.dart
+++ b/lib/compiler/implementation/js_backend/emitter.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.
+part of js_backend;
+
/**
* A function element that represents a closure call. The signature is copied
* from the given element.
@@ -610,7 +612,7 @@
}
FunctionElement function = member;
FunctionSignature parameters = function.computeSignature(compiler);
- if (!parameters.optionalParameters.isEmpty()) {
+ if (!parameters.optionalParameters.isEmpty) {
addParameterStubs(member, defineInstanceMember);
}
} else if (!member.isField()) {
@@ -1181,7 +1183,7 @@
ConstantHandler handler = compiler.constantHandler;
List<VariableElement> lazyFields =
handler.getLazilyInitializedFieldsForEmission();
- if (!lazyFields.isEmpty()) {
+ if (!lazyFields.isEmpty) {
needsLazyInitializer = true;
for (VariableElement element in lazyFields) {
assert(compiler.codegenWorld.generatedBailoutCode[element] == null);
@@ -1214,6 +1216,8 @@
for (Constant constant in constants) {
// No need to emit functions. We already did that.
if (constant.isFunction()) continue;
+ // Numbers, strings and booleans are currently always inlined.
+ if (constant.isPrimitive()) continue;
String name = namer.constantName(constant);
// The name is null when the constant is already a JS constant.
@@ -1250,7 +1254,7 @@
assert(invariant(member, member.isDeclaration));
if (member.isGetter() || member.isField()) {
Set<Selector> selectors = compiler.codegenWorld.invokedNames[member.name];
- if (selectors != null && !selectors.isEmpty()) {
+ if (selectors != null && !selectors.isEmpty) {
emitCallStubForGetter(member, selectors, defineInstanceMember);
}
} else if (member.isFunction()) {
@@ -1262,7 +1266,7 @@
void emitNoSuchMethodHandlers(DefineMemberFunction defineInstanceMember) {
// Do not generate no such method handlers if there is no class.
- if (compiler.codegenWorld.instantiatedClasses.isEmpty()) return;
+ if (compiler.codegenWorld.instantiatedClasses.isEmpty) return;
String noSuchMethodName =
namer.publicInstanceMethodNameByArity(Compiler.NO_SUCH_METHOD, 2);
diff --git a/lib/compiler/implementation/js_backend/emitter_no_eval.dart b/lib/compiler/implementation/js_backend/emitter_no_eval.dart
index f658c93..db2463e 100644
--- a/lib/compiler/implementation/js_backend/emitter_no_eval.dart
+++ b/lib/compiler/implementation/js_backend/emitter_no_eval.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.
+part of js_backend;
+
class CodeEmitterNoEvalTask extends CodeEmitterTask {
CodeEmitterNoEvalTask(Compiler compiler,
Namer namer,
diff --git a/lib/compiler/implementation/js_backend/namer.dart b/lib/compiler/implementation/js_backend/namer.dart
index 21c46c3..1236aa6 100644
--- a/lib/compiler/implementation/js_backend/namer.dart
+++ b/lib/compiler/implementation/js_backend/namer.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.
+part of js_backend;
+
/**
* Assigns JavaScript identifiers to Dart variables, class-names and members.
*/
@@ -82,6 +84,10 @@
return 'c\$${target.nestingLevel}';
}
+ /**
+ * If the [name] is not private returns [:name.slowToString():]. Otherwise
+ * mangles the [name] so that each library has a unique name.
+ */
String privateName(LibraryElement lib, SourceString name) {
if (name.isPrivate()) {
String nameString = name.slowToString();
@@ -116,7 +122,7 @@
'${privateName(lib, name)}\$${signature.parameterCount}';
if (!signature.optionalParametersAreNamed) {
return methodName;
- } else if (!signature.optionalParameters.isEmpty()) {
+ } else if (!signature.optionalParameters.isEmpty) {
StringBuffer buffer = new StringBuffer();
signature.orderedOptionalParameters.forEach((Element element) {
buffer.add('\$${JsNames.getValid(element.name.slowToString())}');
@@ -163,6 +169,13 @@
return 'set\$$fieldName';
}
+ String publicGetterName(SourceString name) {
+ // We dynamically create getters from the field-name. The getter name must
+ // therefore be derived from the instance field-name.
+ String fieldName = safeName(name.slowToString());
+ return 'get\$$fieldName';
+ }
+
String getterName(LibraryElement lib, SourceString name) {
// We dynamically create getters from the field-name. The getter name must
// therefore be derived from the instance field-name.
diff --git a/lib/compiler/implementation/js_backend/native_emitter.dart b/lib/compiler/implementation/js_backend/native_emitter.dart
index d4321b2..7b92fcd 100644
--- a/lib/compiler/implementation/js_backend/native_emitter.dart
+++ b/lib/compiler/implementation/js_backend/native_emitter.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.
+part of js_backend;
+
class NativeEmitter {
CodeEmitterTask emitter;
@@ -153,7 +155,7 @@
void generateNativeClass(ClassElement classElement) {
nativeClasses.add(classElement);
- assert(classElement.backendMembers.isEmpty());
+ assert(classElement.backendMembers.isEmpty);
String quotedName = classElement.nativeName.slowToString();
if (isNativeLiteral(quotedName)) {
generateNativeLiteral(classElement);
@@ -172,9 +174,9 @@
CodeBuffer methodBuffer = new CodeBuffer();
emitter.emitInstanceMembers(classElement, methodBuffer, false);
- if (methodBuffer.isEmpty()
- && fieldBuffer.isEmpty()
- && getterSetterBuffer.isEmpty()) {
+ if (methodBuffer.isEmpty
+ && fieldBuffer.isEmpty
+ && getterSetterBuffer.isEmpty) {
return;
}
@@ -182,17 +184,17 @@
nativeBuffer.add("$defineNativeClassName('$nativeName', ");
nativeBuffer.add('{');
bool firstInMap = true;
- if (!fieldBuffer.isEmpty()) {
+ if (!fieldBuffer.isEmpty) {
firstInMap = false;
nativeBuffer.add(fieldBuffer);
}
- if (!getterSetterBuffer.isEmpty()) {
+ if (!getterSetterBuffer.isEmpty) {
if (!firstInMap) nativeBuffer.add(",");
firstInMap = false;
nativeBuffer.add("\n ");
nativeBuffer.add(getterSetterBuffer);
}
- if (!methodBuffer.isEmpty()) {
+ if (!methodBuffer.isEmpty) {
if (!firstInMap) nativeBuffer.add(",");
nativeBuffer.add(methodBuffer);
}
@@ -275,7 +277,7 @@
}
void emitDynamicDispatchMetadata() {
- if (classesWithDynamicDispatch.isEmpty()) return;
+ if (classesWithDynamicDispatch.isEmpty) return;
int length = classesWithDynamicDispatch.length;
nativeBuffer.add('// $length dynamic classes.\n');
@@ -295,12 +297,12 @@
}
Collection<ClassElement> dispatchClasses = classes.filter(
- (cls) => !getDirectSubclasses(cls).isEmpty() &&
+ (cls) => !getDirectSubclasses(cls).isEmpty &&
classesWithDynamicDispatch.contains(cls));
nativeBuffer.add('// ${classes.length} classes\n');
Collection<ClassElement> classesThatHaveSubclasses = classes.filter(
- (ClassElement t) => !getDirectSubclasses(t).isEmpty());
+ (ClassElement t) => !getDirectSubclasses(t).isEmpty);
nativeBuffer.add('// ${classesThatHaveSubclasses.length} !leaf\n');
// Generate code that builds the map from cls tags used in dynamic dispatch
@@ -365,7 +367,7 @@
}
// Write out a thunk that builds the metadata.
- if (!tagDefns.isEmpty()) {
+ if (!tagDefns.isEmpty) {
nativeBuffer.add('(function(){\n');
for (final String varName in varNames) {
@@ -426,7 +428,7 @@
}
void assembleCode(CodeBuffer targetBuffer) {
- if (nativeClasses.isEmpty()) return;
+ if (nativeClasses.isEmpty) return;
emitDynamicDispatchMetadata();
targetBuffer.add('$defineNativeClassName = '
'$defineNativeClassFunction;\n\n');
@@ -447,8 +449,8 @@
'function() { return $toStringHelperName(this); }';
// Same as above, but for hashCode.
- String hashCodeName = backend.namer.publicInstanceMethodNameByArity(
- const SourceString('hashCode'), 0);
+ String hashCodeName = backend.namer.publicGetterName(
+ const SourceString('hashCode'));
objectProperties[hashCodeName] =
'function() { return $hashCodeHelperName(this); }';
@@ -462,7 +464,7 @@
// If we have any properties to add to Object.prototype, we run
// through them and add them using defineProperty.
- if (!objectProperties.isEmpty()) {
+ if (!objectProperties.isEmpty) {
targetBuffer.add("(function(table) {\n"
" for (var key in table) {\n"
" $defPropName(Object.prototype, key, table[key]);\n"
diff --git a/lib/compiler/implementation/lib/constant_map.dart b/lib/compiler/implementation/lib/constant_map.dart
index 1407213..fcbd58a 100644
--- a/lib/compiler/implementation/lib/constant_map.dart
+++ b/lib/compiler/implementation/lib/constant_map.dart
@@ -11,7 +11,7 @@
final List<String> _keys;
bool containsValue(V needle) {
- return getValues().some((V value) => value == needle);
+ return values.some((V value) => value == needle);
}
bool containsKey(String key) {
@@ -28,25 +28,25 @@
_keys.forEach((String key) => f(key, this[key]));
}
- Collection<String> getKeys() => _keys;
+ Collection<String> get keys => _keys;
- Collection<V> getValues() {
+ Collection<V> get values {
List<V> result = <V>[];
_keys.forEach((String key) => result.add(this[key]));
return result;
}
- bool isEmpty() => length == 0;
+ bool get isEmpty => length == 0;
String toString() => Maps.mapToString(this);
- _throwImmutable() {
- throw const IllegalAccessException();
+ _throwUnmodifiable() {
+ throw new UnsupportedError("Cannot modify unmodifiable Map");
}
- void operator []=(String key, V val) => _throwImmutable();
- V putIfAbsent(String key, V ifAbsent()) => _throwImmutable();
- V remove(String key) => _throwImmutable();
- void clear() => _throwImmutable();
+ void operator []=(String key, V val) => _throwUnmodifiable();
+ V putIfAbsent(String key, V ifAbsent()) => _throwUnmodifiable();
+ V remove(String key) => _throwUnmodifiable();
+ void clear() => _throwUnmodifiable();
}
// This class has no constructor. This is on purpose since the instantiation
diff --git a/lib/compiler/implementation/lib/core_patch.dart b/lib/compiler/implementation/lib/core_patch.dart
index 9641920..d458e74 100644
--- a/lib/compiler/implementation/lib/core_patch.dart
+++ b/lib/compiler/implementation/lib/core_patch.dart
@@ -15,7 +15,7 @@
// Patch for Object implementation.
patch class Object {
- patch int hashCode() => Primitives.objectHashCode(this);
+ patch int get hashCode => Primitives.objectHashCode(this);
patch String toString() => Primitives.objectToString(this);
@@ -84,3 +84,60 @@
return Primitives.objectToString(object);
}
}
+
+
+// Patch for Date implementation.
+patch class _DateImpl {
+ patch _DateImpl(int year,
+ int month,
+ int day,
+ int hour,
+ int minute,
+ int second,
+ int millisecond,
+ bool isUtc)
+ : this.isUtc = checkNull(isUtc),
+ millisecondsSinceEpoch = Primitives.valueFromDecomposedDate(
+ year, month, day, hour, minute, second, millisecond, isUtc) {
+ Primitives.lazyAsJsDate(this);
+ }
+
+ patch _DateImpl.now()
+ : isUtc = false,
+ millisecondsSinceEpoch = Primitives.dateNow() {
+ Primitives.lazyAsJsDate(this);
+ }
+
+ patch static int _brokenDownDateToMillisecondsSinceEpoch(
+ int year, int month, int day, int hour, int minute, int second,
+ int millisecond, bool isUtc) {
+ return Primitives.valueFromDecomposedDate(
+ year, month, day, hour, minute, second, millisecond, isUtc);
+ }
+
+ patch String get timeZoneName {
+ if (isUtc) return "UTC";
+ return Primitives.getTimeZoneName(this);
+ }
+
+ patch Duration get timeZoneOffset {
+ if (isUtc) return new Duration();
+ return new Duration(minutes: Primitives.getTimeZoneOffsetInMinutes(this));
+ }
+
+ patch int get year => Primitives.getYear(this);
+
+ patch int get month => Primitives.getMonth(this);
+
+ patch int get day => Primitives.getDay(this);
+
+ patch int get hour => Primitives.getHours(this);
+
+ patch int get minute => Primitives.getMinutes(this);
+
+ patch int get second => Primitives.getSeconds(this);
+
+ patch int get millisecond => Primitives.getMilliseconds(this);
+
+ patch int get weekday => Primitives.getWeekday(this);
+}
diff --git a/lib/compiler/implementation/lib/coreimpl_patch.dart b/lib/compiler/implementation/lib/coreimpl_patch.dart
index 9b63064..ef73b1c 100644
--- a/lib/compiler/implementation/lib/coreimpl_patch.dart
+++ b/lib/compiler/implementation/lib/coreimpl_patch.dart
@@ -69,65 +69,6 @@
}
-// Patch for Date implementation.
-// TODO(ager): Split out into date_patch.dart and allow #source
-// in patch files?
-patch class DateImplementation {
- patch DateImplementation(int year,
- int month,
- int day,
- int hour,
- int minute,
- int second,
- int millisecond,
- bool isUtc)
- : this.isUtc = checkNull(isUtc),
- millisecondsSinceEpoch = Primitives.valueFromDecomposedDate(
- year, month, day, hour, minute, second, millisecond, isUtc) {
- Primitives.lazyAsJsDate(this);
- }
-
- patch DateImplementation.now()
- : isUtc = false,
- millisecondsSinceEpoch = Primitives.dateNow() {
- Primitives.lazyAsJsDate(this);
- }
-
- patch static int _brokenDownDateToMillisecondsSinceEpoch(
- int year, int month, int day, int hour, int minute, int second,
- int millisecond, bool isUtc) {
- return Primitives.valueFromDecomposedDate(
- year, month, day, hour, minute, second, millisecond, isUtc);
- }
-
- patch String get timeZoneName {
- if (isUtc) return "UTC";
- return Primitives.getTimeZoneName(this);
- }
-
- patch Duration get timeZoneOffset {
- if (isUtc) return new Duration();
- return new Duration(minutes: Primitives.getTimeZoneOffsetInMinutes(this));
- }
-
- patch int get year => Primitives.getYear(this);
-
- patch int get month => Primitives.getMonth(this);
-
- patch int get day => Primitives.getDay(this);
-
- patch int get hour => Primitives.getHours(this);
-
- patch int get minute => Primitives.getMinutes(this);
-
- patch int get second => Primitives.getSeconds(this);
-
- patch int get millisecond => Primitives.getMilliseconds(this);
-
- patch int get weekday => Primitives.getWeekday(this);
-}
-
-
// Patch for Stopwatch implementation.
// TODO(ager): Split out into stopwatch_patch.dart and allow #source
// in patch files?
@@ -191,22 +132,20 @@
class _MatchImplementation implements Match {
final String pattern;
final String str;
- final int _start;
- final int _end;
+ final int start;
+ final int end;
final List<String> _groups;
const _MatchImplementation(
String this.pattern,
String this.str,
- int this._start,
- int this._end,
+ int this.start,
+ int this.end,
List<String> this._groups);
- int start() => _start;
- int end() => _end;
String group(int index) => _groups[index];
String operator [](int index) => group(index);
- int groupCount() => _groups.length - 1;
+ int get groupCount => _groups.length - 1;
List<String> groups(List<int> groups) {
List<String> out = [];
@@ -236,8 +175,8 @@
: _done = false, _re = JSSyntaxRegExp._globalVersionOf(re);
Match next() {
- if (!hasNext()) {
- throw const NoMoreElementsException();
+ if (!hasNext) {
+ throw new StateError("No more elements");
}
// _next is set by [hasNext].
@@ -246,7 +185,7 @@
return next;
}
- bool hasNext() {
+ bool get hasNext {
if (_done) {
return false;
} else if (_next != null) {
diff --git a/lib/compiler/implementation/lib/interceptors.dart b/lib/compiler/implementation/lib/interceptors.dart
index 8aa6509..1467ca8 100644
--- a/lib/compiler/implementation/lib/interceptors.dart
+++ b/lib/compiler/implementation/lib/interceptors.dart
@@ -101,11 +101,11 @@
}
}
-isEmpty(receiver) {
+get$isEmpty(receiver) {
if (receiver is String || isJsArray(receiver)) {
return JS('bool', r'#.length === 0', receiver);
}
- return UNINTERCEPTED(receiver.isEmpty());
+ return UNINTERCEPTED(receiver.isEmpty);
}
compareTo(a, b) {
@@ -116,15 +116,15 @@
return 1;
} else if (a == b) {
if (a == 0) {
- bool aIsNegative = a.isNegative();
- bool bIsNegative = b.isNegative();
+ bool aIsNegative = a.isNegative;
+ bool bIsNegative = b.isNegative;
if (aIsNegative == bIsNegative) return 0;
if (aIsNegative) return -1;
return 1;
}
return 0;
- } else if (a.isNaN()) {
- if (b.isNaN()) {
+ } else if (a.isNaN) {
+ if (b.isNaN) {
return 0;
}
return 1;
@@ -145,7 +145,7 @@
// TODO(ahe): Use for-in when it is implemented correctly.
var iterator = collection.iterator();
- while (iterator.hasNext()) {
+ while (iterator.hasNext) {
receiver.add(iterator.next());
}
}
@@ -246,9 +246,9 @@
return listInsertRange(receiver, start, length, initialValue);
}
-last(receiver) {
+get$last(receiver) {
if (!isJsArray(receiver)) {
- return UNINTERCEPTED(receiver.last());
+ return UNINTERCEPTED(receiver.last);
}
return receiver[receiver.length - 1];
}
@@ -364,28 +364,28 @@
sort$0(receiver) {
if (!isJsArray(receiver)) return UNINTERCEPTED(receiver.sort());
checkMutable(receiver, 'sort');
- DualPivotQuicksort.sort(receiver, Comparable.compare);
+ coreSort(receiver, Comparable.compare);
}
sort$1(receiver, compare) {
if (!isJsArray(receiver)) return UNINTERCEPTED(receiver.sort(compare));
checkMutable(receiver, 'sort');
- DualPivotQuicksort.sort(receiver, compare);
+ coreSort(receiver, compare);
}
-isNegative(receiver) {
+get$isNegative(receiver) {
if (receiver is num) {
return (receiver == 0) ? (1 / receiver) < 0 : receiver < 0;
} else {
- return UNINTERCEPTED(receiver.isNegative());
+ return UNINTERCEPTED(receiver.isNegative);
}
}
-isNaN(receiver) {
+get$isNaN(receiver) {
if (receiver is num) {
return JS('bool', r'isNaN(#)', receiver);
} else {
- return UNINTERCEPTED(receiver.isNaN());
+ return UNINTERCEPTED(receiver.isNaN);
}
}
@@ -406,9 +406,9 @@
toInt(receiver) {
if (receiver is !num) return UNINTERCEPTED(receiver.toInt());
- if (receiver.isNaN()) throw new FormatException('NaN');
+ if (receiver.isNaN) throw new FormatException('NaN');
- if (receiver.isInfinite()) throw new FormatException('Infinity');
+ if (receiver.isInfinite) throw new FormatException('Infinity');
var truncated = receiver.truncate();
return JS('bool', r'# == -0.0', truncated) ? 0 : truncated;
@@ -426,8 +426,8 @@
return JS('num', r'Math.floor(#)', receiver);
}
-isInfinite(receiver) {
- if (receiver is !num) return UNINTERCEPTED(receiver.isInfinite());
+get$isInfinite(receiver) {
+ if (receiver is !num) return UNINTERCEPTED(receiver.isInfinite);
return JS('bool', r'# == Infinity', receiver)
|| JS('bool', r'# == -Infinity', receiver);
@@ -462,7 +462,7 @@
checkNum(fractionDigits);
String result = JS('String', r'#.toFixed(#)', receiver, fractionDigits);
- if (receiver == 0 && receiver.isNegative()) return "-$result";
+ if (receiver == 0 && receiver.isNegative) return "-$result";
return result;
}
@@ -477,7 +477,7 @@
} else {
result = JS('String', r'#.toExponential()', receiver);
}
- if (receiver == 0 && receiver.isNegative()) return "-$result";
+ if (receiver == 0 && receiver.isNegative) return "-$result";
return result;
}
@@ -489,7 +489,7 @@
String result = JS('String', r'#.toPrecision(#)',
receiver, fractionDigits);
- if (receiver == 0 && receiver.isNegative()) return "-$result";
+ if (receiver == 0 && receiver.isNegative) return "-$result";
return result;
}
@@ -626,14 +626,14 @@
*
* [1]: http://en.wikipedia.org/wiki/Jenkins_hash_function
*/
-hashCode(receiver) {
+get$hashCode(receiver) {
// TODO(ahe): This method shouldn't have to use JS. Update when our
// optimizations are smarter.
if (receiver == null) return 0;
if (receiver is num) return JS('int', r'# & 0x1FFFFFFF', receiver);
if (receiver is bool) return receiver ? 0x40377024 : 0xc18c0076;
if (isJsArray(receiver)) return Primitives.objectHashCode(receiver);
- if (receiver is !String) return UNINTERCEPTED(receiver.hashCode());
+ if (receiver is !String) return UNINTERCEPTED(receiver.hashCode);
int hash = 0;
int length = JS('int', r'#.length', receiver);
for (int i = 0; i < length; i++) {
@@ -646,8 +646,8 @@
return 0x1fffffff & (hash + JS('int', r'# << #', 0x00003fff & hash, 15));
}
-charCodes(receiver) {
- if (receiver is !String) return UNINTERCEPTED(receiver.charCodes());
+get$charCodes(receiver) {
+ if (receiver is !String) return UNINTERCEPTED(receiver.charCodes);
int len = receiver.length;
List<int> result = new List<int>(len);
for (int i = 0; i < len; i++) {
@@ -656,13 +656,13 @@
return result;
}
-isEven(receiver) {
- if (receiver is !int) return UNINTERCEPTED(receiver.isEven());
+get$isEven(receiver) {
+ if (receiver is !int) return UNINTERCEPTED(receiver.isEven);
return (receiver & 1) == 0;
}
-isOdd(receiver) {
- if (receiver is !int) return UNINTERCEPTED(receiver.isOdd());
+get$isOdd(receiver) {
+ if (receiver is !int) return UNINTERCEPTED(receiver.isOdd);
return (receiver & 1) == 1;
}
@@ -687,5 +687,3 @@
// TODO(lrn): These getters should be generated automatically for all
// intercepted methods.
get$toString(receiver) => () => toString(receiver);
-
-get$hashCode(receiver) => () => hashCode(receiver);
diff --git a/lib/compiler/implementation/lib/io.dart b/lib/compiler/implementation/lib/io.dart
index 8d544b2..aeeff9e 100644
--- a/lib/compiler/implementation/lib/io.dart
+++ b/lib/compiler/implementation/lib/io.dart
@@ -80,7 +80,7 @@
/** Converts an OSError object to a string representation. */
String toString() {
- throw UnsupportedOperationException('OSError.toString');
+ throw new UnsupportedError('OSError.toString');
}
/**
@@ -97,52 +97,52 @@
}
List _ensureFastAndSerializableBuffer(List buffer, int offset, int bytes) {
- throw new UnsupportedOperationException('_ensureFastAndSerializableBuffer');
+ throw new UnsupportedError('_ensureFastAndSerializableBuffer');
}
class _File {
factory _File(arg) {
- throw new UnsupportedOperationException('new File($arg)');
+ throw new UnsupportedError('new File($arg)');
}
factory _File.fromPath(arg) {
- throw new UnsupportedOperationException('new File.fromPath($arg)');
+ throw new UnsupportedError('new File.fromPath($arg)');
}
}
class _Platform {
static int get numberOfProcessors {
- throw new UnsupportedOperationException('_Platform.numberOfProcessors');
+ throw new UnsupportedError('_Platform.numberOfProcessors');
}
static String get pathSeparator {
- throw new UnsupportedOperationException('_Platform.pathSeparator');
+ throw new UnsupportedError('_Platform.pathSeparator');
}
static String get operatingSystem {
- throw new UnsupportedOperationException('_Platform.operatingSystem');
+ throw new UnsupportedError('_Platform.operatingSystem');
}
static String get localHostname {
- throw new UnsupportedOperationException('_Platform.localHostname');
+ throw new UnsupportedError('_Platform.localHostname');
}
static Map<String, String> get environment {
- throw new UnsupportedOperationException('_Platform.environment');
+ throw new UnsupportedError('_Platform.environment');
}
}
class _Directory {
factory _Directory(arg) {
- throw new UnsupportedOperationException('new Directory($arg)');
+ throw new UnsupportedError('new Directory($arg)');
}
factory _Directory.fromPath(arg) {
- throw new UnsupportedOperationException('new Directory.fromPath($arg)');
+ throw new UnsupportedError('new Directory.fromPath($arg)');
}
factory _Directory.current() {
- throw new UnsupportedOperationException('new Directory.current()');
+ throw new UnsupportedError('new Directory.current()');
}
}
@@ -150,7 +150,7 @@
}
void _exit(int exitCode) {
- throw new UnsupportedOperationException("exit($exitCode)");
+ throw new UnsupportedError("exit($exitCode)");
}
class _Process {
@@ -158,50 +158,50 @@
List<String> arguments,
[ProcessOptions options]) {
var msg = 'Process.start($executable, $arguments, $options)';
- throw new UnsupportedOperationException(msg);
+ throw new UnsupportedError(msg);
}
static Future<ProcessResult> run(String executable,
List<String> arguments,
[ProcessOptions options]) {
var msg = 'Process.run($executable, $arguments, $options)';
- throw new UnsupportedOperationException(msg);
+ throw new UnsupportedError(msg);
}
}
class _ServerSocket {
factory _ServerSocket(String bindAddress, int port, int backlog) {
- throw new UnsupportedOperationException(
+ throw new UnsupportedError(
'new ServerSocket($bindAddress, $port, $backlog)');
}
}
class _Socket {
factory _Socket(String host, int port) {
- throw new UnsupportedOperationException('new Socket($host, $port)');
+ throw new UnsupportedError('new Socket($host, $port)');
}
}
class _EventHandler {
factory _EventHandler() {
- throw new UnsupportedOperationException('new _EventHandler()');
+ throw new UnsupportedError('new _EventHandler()');
}
static void _start() {
- throw new UnsupportedOperationException('_EventHandler._start()');
+ throw new UnsupportedError('_EventHandler._start()');
}
static _sendData(int id, ReceivePort receivePort, int data) {
var msg = '_EventHandler._sendData($id, $receivePort, $data)';
- throw new UnsupportedOperationException(msg);
+ throw new UnsupportedError(msg);
}
static _EventHandler get _eventHandler {
- throw new UnsupportedOperationException('_EventHandler._eventhandler');
+ throw new UnsupportedError('_EventHandler._eventhandler');
}
static void set _eventHandler(_EventHandler e) {
- throw new UnsupportedOperationException('_EventHandler._eventhandler = $e');
+ throw new UnsupportedError('_EventHandler._eventhandler = $e');
}
}
diff --git a/lib/compiler/implementation/lib/isolate_patch.dart b/lib/compiler/implementation/lib/isolate_patch.dart
index 5bec001..58b8093 100644
--- a/lib/compiler/implementation/lib/isolate_patch.dart
+++ b/lib/compiler/implementation/lib/isolate_patch.dart
@@ -85,7 +85,7 @@
// TODO(eub, sigmund): move the "manager" to be entirely in JS.
// Running any Dart code outside the context of an isolate gives it
// the change to break the isolate abstraction.
-_Manager get _globalState() => JS("Object", r"$globalState");
+_Manager get _globalState => JS("Object", r"$globalState");
set _globalState(_Manager val) {
JS("void", r"$globalState = #", val);
}
@@ -106,7 +106,7 @@
patch SendPort spawnFunction(void topLevelFunction()) {
final name = _IsolateNatives._getJSFunctionName(topLevelFunction);
if (name == null) {
- throw new UnsupportedOperationException(
+ throw new UnsupportedError(
"only top-level functions can be spawned.");
}
return _IsolateNatives._spawn(name, null, false);
@@ -208,7 +208,7 @@
/** Close the worker running this code if all isolates are done. */
void maybeCloseWorker() {
- if (isolates.isEmpty()) {
+ if (isolates.isEmpty) {
mainManager.postMessage(_serializeMessage({'command': 'close'}));
}
}
@@ -269,7 +269,7 @@
/** Unregister a port on this isolate. */
void unregister(int portId) {
ports.remove(portId);
- if (ports.isEmpty()) {
+ if (ports.isEmpty) {
_globalState.isolates.remove(id); // indicate this isolate is not active
}
}
@@ -286,7 +286,7 @@
}
_IsolateEvent dequeue() {
- if (events.isEmpty()) return null;
+ if (events.isEmpty) return null;
return events.removeFirst();
}
@@ -300,7 +300,7 @@
_globalState.isolates.containsKey(
_globalState.rootContext.id) &&
_globalState.fromCommandLine &&
- _globalState.rootContext.ports.isEmpty()) {
+ _globalState.rootContext.ports.isEmpty) {
// We want to reach here only on the main [_Manager] and only
// on the command-line. In the browser the isolate might
// still be alive due to DOM callbacks, but the presumption is
@@ -409,7 +409,7 @@
* The src url for the script tag that loaded this code. Used to create
* JavaScript workers.
*/
- static String get _thisScript() => JS("String", r"$thisScriptUrl");
+ static String get _thisScript => JS("String", r"$thisScriptUrl");
/** Starts a new worker with the given URL. */
static _WorkerStub _newWorker(url) => JS("Object", r"new Worker(#)", url);
@@ -561,7 +561,7 @@
static SendPort _startNonWorker(
String functionName, String uri, SendPort replyPort) {
// TODO(eub): support IE9 using an iframe -- Dart issue 1702.
- if (uri != null) throw new UnsupportedOperationException(
+ if (uri != null) throw new UnsupportedError(
"Currently spawnUri is not supported without web workers.");
_globalState.topEventLoop.enqueue(new _IsolateContext(), function() {
final func = _getJSFunctionFromName(functionName);
@@ -650,7 +650,7 @@
abstract void send(var message, [SendPort replyTo]);
abstract bool operator ==(var other);
- abstract int hashCode();
+ abstract int get hashCode;
}
/** A send port that delivers messages in-memory via native JavaScript calls. */
@@ -697,7 +697,7 @@
bool operator ==(var other) => (other is _NativeJsSendPort) &&
(_receivePort == other._receivePort);
- int hashCode() => _receivePort._id;
+ int get hashCode => _receivePort._id;
}
/** A send port that delivers messages via worker.postMessage. */
@@ -734,7 +734,7 @@
(_receivePortId == other._receivePortId);
}
- int hashCode() {
+ int get hashCode {
// TODO(sigmund): use a standard hash when we get one available in corelib.
return (_workerId << 16) ^ (_isolateId << 8) ^ _receivePortId;
}
@@ -787,7 +787,7 @@
bool operator ==(var other) =>
other is _BufferingSendPort && _id == other._id;
- int hashCode() => _id;
+ int get hashCode => _id;
}
/** Default factory for receive ports. */
@@ -855,8 +855,8 @@
_visited[map] = true;
// TODO(sigmund): replace with the following: (bug #1660)
- // map.getValues().forEach(_dispatch);
- map.getValues().forEach((e) => _dispatch(e));
+ // map.values.forEach(_dispatch);
+ map.values.forEach((e) => _dispatch(e));
}
visitSendPort(SendPort port) {
@@ -1153,8 +1153,8 @@
int id = _nextFreeRefId++;
_visited[map] = id;
- var keys = _serializeList(map.getKeys());
- var values = _serializeList(map.getValues());
+ var keys = _serializeList(map.keys);
+ var values = _serializeList(map.values);
// TODO(floitsch): we are losing the generic type.
return ['map', id, keys, values];
}
diff --git a/lib/compiler/implementation/lib/js_helper.dart b/lib/compiler/implementation/lib/js_helper.dart
index d2e5810..fcfa49b 100644
--- a/lib/compiler/implementation/lib/js_helper.dart
+++ b/lib/compiler/implementation/lib/js_helper.dart
@@ -323,13 +323,13 @@
checkMutable(list, reason) {
if (JS('bool', r'!!(#.immutable$list)', list)) {
- throw new UnsupportedOperationException(reason);
+ throw new UnsupportedError(reason);
}
}
checkGrowable(list, reason) {
if (JS('bool', r'!!(#.fixed$length)', list)) {
- throw new UnsupportedOperationException(reason);
+ throw new UnsupportedError(reason);
}
}
@@ -343,9 +343,9 @@
int i;
List<T> list;
ListIterator(List<T> this.list) : i = 0;
- bool hasNext() => i < JS('int', r'#.length', list);
+ bool get hasNext => i < JS('int', r'#.length', list);
T next() {
- if (!hasNext()) throw new NoMoreElementsException();
+ if (!hasNext) throw new StateError("No more elements");
var value = JS('Object', r'#[#]', list, i);
i += 1;
return value;
@@ -409,7 +409,7 @@
var base = 10;
if (match[1] != null) base = 16;
var result = JS('num', r'parseInt(#, #)', string, base);
- if (result.isNaN()) throw new FormatException(string);
+ if (result.isNaN) throw new FormatException(string);
return result;
}
@@ -427,7 +427,7 @@
throw new FormatException(string);
}
var result = JS('num', r'parseFloat(#)', string);
- if (result.isNaN() && string != 'NaN') {
+ if (result.isNaN && string != 'NaN') {
throw new FormatException(string);
}
return result;
@@ -509,7 +509,7 @@
value = JS('num', r'new Date(#, #, #, #, #, #, #).valueOf()',
years, jsMonth, day, hours, minutes, seconds, milliseconds);
}
- if (value.isNaN() ||
+ if (value.isNaN ||
value < -MAX_MILLISECONDS_SINCE_EPOCH ||
value > MAX_MILLISECONDS_SINCE_EPOCH) {
throw new ArgumentError();
@@ -537,6 +537,10 @@
return JS('Date', r'#.date', receiver);
}
+ // The getters for date and time parts below add a positive integer to ensure
+ // that the result is really an integer, because the JavaScript implementation
+ // may return -0.0 instead of 0.
+
static getYear(receiver) {
return (receiver.isUtc)
? JS('int', r'(#.getUTCFullYear() + 0)', lazyAsJsDate(receiver))
@@ -591,7 +595,7 @@
checkNull(str);
if (str is !String) throw new ArgumentError(str);
var value = JS('num', r'Date.parse(#)', str);
- if (value.isNaN()) throw new ArgumentError(str);
+ if (value.isNaN) throw new ArgumentError(str);
return value;
}
@@ -625,10 +629,10 @@
// Sort the named arguments to get the right selector name and
// arguments order.
- if (namedArguments != null && !namedArguments.isEmpty()) {
+ if (namedArguments != null && !namedArguments.isEmpty) {
// Call new List.from to make sure we get a JavaScript array.
List<String> listOfNamedArguments =
- new List<String>.from(namedArguments.getKeys());
+ new List<String>.from(namedArguments.keys);
argumentCount += namedArguments.length;
// We're sorting on strings, and the behavior is the same between
// Dart string sort and JS string sort. To avoid needing the Dart
@@ -757,7 +761,7 @@
base = 16;
}
var ret = JS('num', r'parseInt(#, #)', trimmed, base);
- if (ret.isNaN()) throw new FormatException(str);
+ if (ret.isNaN) throw new FormatException(str);
return ret;
}
@@ -768,7 +772,7 @@
// TODO(ahe): This is unspecified, but tested by co19.
ret = JS('num', r'parseInt(#)', str);
}
- if (ret.isNaN() && str != 'NaN' && str != '-NaN') {
+ if (ret.isNaN && str != 'NaN' && str != '-NaN') {
throw new FormatException(str);
}
return ret;
@@ -882,17 +886,9 @@
type == 'called_non_callable' ||
type == 'non_object_property_call' ||
type == 'non_object_property_load') {
- if (name is String && name.startsWith(r'call$')) {
- return new ObjectNotClosureException();
- } else {
- return new NullPointerException();
- }
+ return new NullPointerException();
} else if (type == 'undefined_method') {
- if (name is String && name.startsWith(r'call$')) {
- return new ObjectNotClosureException();
- } else {
- return new NoSuchMethodError('', name, []);
- }
+ return new NoSuchMethodError('', name, []);
}
var ieErrorCode = JS('int', '#.number & 0xffff', ex);
@@ -925,7 +921,7 @@
if (JS('bool', r'# instanceof RangeError', ex)) {
if (message is String && message.contains('call stack')) {
- return new StackOverflowException();
+ return new StackOverflowError();
}
// In general, a RangeError is thrown when trying to pass a number
@@ -939,7 +935,7 @@
r"typeof InternalError == 'function' && # instanceof InternalError",
ex)) {
if (message is String && message == 'too much recursion') {
- return new StackOverflowException();
+ return new StackOverflowError();
}
}
@@ -971,7 +967,7 @@
makeLiteralMap(List keyValuePairs) {
Iterator iterator = keyValuePairs.iterator();
Map result = new LinkedHashMap();
- while (iterator.hasNext()) {
+ while (iterator.hasNext) {
String key = iterator.next();
var value = iterator.next();
result[key] = value;
@@ -1052,7 +1048,7 @@
*/
class Null {
factory Null() {
- throw new UnsupportedOperationException('new Null()');
+ throw new UnsupportedError('new Null()');
}
}
diff --git a/lib/compiler/implementation/lib/mirrors.dart b/lib/compiler/implementation/lib/mirrors.dart
index f717d9b..243de22 100644
--- a/lib/compiler/implementation/lib/mirrors.dart
+++ b/lib/compiler/implementation/lib/mirrors.dart
@@ -13,14 +13,14 @@
*/
class _Mirrors {
static MirrorSystem currentMirrorSystem() {
- throw new UnsupportedOperationException("MirrorSystem not implemented");
+ throw new UnsupportedError("MirrorSystem not implemented");
}
static Future<MirrorSystem> mirrorSystemOf(SendPort port) {
- throw new UnsupportedOperationException("MirrorSystem not implemented");
+ throw new UnsupportedError("MirrorSystem not implemented");
}
static InstanceMirror reflect(Object reflectee) {
- throw new UnsupportedOperationException("MirrorSystem not implemented");
+ throw new UnsupportedError("MirrorSystem not implemented");
}
}
diff --git a/lib/compiler/implementation/lib/scalarlist_patch.dart b/lib/compiler/implementation/lib/scalarlist_patch.dart
index b8df2d4..f743916 100644
--- a/lib/compiler/implementation/lib/scalarlist_patch.dart
+++ b/lib/compiler/implementation/lib/scalarlist_patch.dart
@@ -8,111 +8,111 @@
patch class Int8List {
patch factory Int8List(int length) {
- throw new UnsupportedOperationException('Int8List');
+ throw new UnsupportedError('Int8List');
}
patch factory Int8List.view(ByteArray array, [int start = 0, int length]) {
- throw new UnsupportedOperationException('Int8List.view');
+ throw new UnsupportedError('Int8List.view');
}
}
patch class Uint8List {
patch factory Uint8List(int length) {
- throw new UnsupportedOperationException('Uint8List');
+ throw new UnsupportedError('Uint8List');
}
patch factory Uint8List.view(ByteArray array,
[int start = 0, int length]) {
- throw new UnsupportedOperationException('Uint8List.view');
+ throw new UnsupportedError('Uint8List.view');
}
}
patch class Int16List {
patch factory Int16List(int length) {
- throw new UnsupportedOperationException('Int16List');
+ throw new UnsupportedError('Int16List');
}
patch factory Int16List.view(ByteArray array, [int start = 0, int length]) {
- throw new UnsupportedOperationException('Int16List.view');
+ throw new UnsupportedError('Int16List.view');
}
}
patch class Uint16List {
patch factory Uint16List(int length) {
- throw new UnsupportedOperationException('Uint16List');
+ throw new UnsupportedError('Uint16List');
}
patch factory Uint16List.view(ByteArray array, [int start = 0, int length]) {
- throw new UnsupportedOperationException('Uint16List.view');
+ throw new UnsupportedError('Uint16List.view');
}
}
patch class Int32List {
patch factory Int32List(int length) {
- throw new UnsupportedOperationException('Int32List');
+ throw new UnsupportedError('Int32List');
}
patch factory Int32List.view(ByteArray array, [int start = 0, int length]) {
- throw new UnsupportedOperationException('Int32List.view');
+ throw new UnsupportedError('Int32List.view');
}
}
patch class Uint32List {
patch factory Uint32List(int length) {
- throw new UnsupportedOperationException('Uint32List');
+ throw new UnsupportedError('Uint32List');
}
patch factory Uint32List.view(ByteArray array, [int start = 0, int length]) {
- throw new UnsupportedOperationException('Uint32List.view');
+ throw new UnsupportedError('Uint32List.view');
}
}
patch class Int64List {
patch factory Int64List(int length) {
- throw new UnsupportedOperationException('Int64List');
+ throw new UnsupportedError('Int64List');
}
patch factory Int64List.view(ByteArray array, [int start = 0, int length]) {
- throw new UnsupportedOperationException('Int64List.view');
+ throw new UnsupportedError('Int64List.view');
}
}
patch class Uint64List {
patch factory Uint64List(int length) {
- throw new UnsupportedOperationException('Uint64List');
+ throw new UnsupportedError('Uint64List');
}
patch factory Uint64List.view(ByteArray array, [int start = 0, int length]) {
- throw new UnsupportedOperationException('Uint64List.view');
+ throw new UnsupportedError('Uint64List.view');
}
}
patch class Float32List {
patch factory Float32List(int length) {
- throw new UnsupportedOperationException('Float32List');
+ throw new UnsupportedError('Float32List');
}
patch factory Float32List.view(ByteArray array, [int start = 0, int length]) {
- throw new UnsupportedOperationException('Float32List.view');
+ throw new UnsupportedError('Float32List.view');
}
}
patch class Float64List {
patch factory Float64List(int length) {
- throw new UnsupportedOperationException('Float64List');
+ throw new UnsupportedError('Float64List');
}
patch factory Float64List.view(ByteArray array, [int start = 0, int length]) {
- throw new UnsupportedOperationException('Float64List.view');
+ throw new UnsupportedError('Float64List.view');
}
}
diff --git a/lib/compiler/implementation/lib/string_helper.dart b/lib/compiler/implementation/lib/string_helper.dart
index a4b4ef4..eaf132c 100644
--- a/lib/compiler/implementation/lib/string_helper.dart
+++ b/lib/compiler/implementation/lib/string_helper.dart
@@ -3,14 +3,13 @@
// BSD-style license that can be found in the LICENSE file.
class StringMatch implements Match {
- const StringMatch(int this._start,
+ const StringMatch(int this.start,
String this.str,
String this.pattern);
- int start() => _start;
- int end() => _start + pattern.length;
+ int get end => start + pattern.length;
String operator[](int g) => group(g);
- int groupCount() => 0;
+ int get groupCount => 0;
String group(int group_) {
if (group_ != 0) {
@@ -27,7 +26,7 @@
return result;
}
- final int _start;
+ final int start;
final String str;
final String pattern;
}
@@ -64,7 +63,7 @@
return other.hasMatch(receiver.substring(startIndex));
} else {
var substr = receiver.substring(startIndex);
- return other.allMatches(substr).iterator().hasNext();
+ return other.allMatches(substr).iterator().hasNext;
}
}
diff --git a/lib/compiler/implementation/library_loader.dart b/lib/compiler/implementation/library_loader.dart
index 7d6bef4..9b56a38 100644
--- a/lib/compiler/implementation/library_loader.dart
+++ b/lib/compiler/implementation/library_loader.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.
+part of dart2js;
+
/**
* [CompilerTask] for loading libraries and setting up the import/export scopes.
*/
@@ -127,7 +129,7 @@
String get name => 'LibraryLoader';
final Map<String, LibraryElement> libraryNames =
- new Map<String, LibraryElement>();
+ new LinkedHashMap<String, LibraryElement>();
LibraryDependencyHandler currentHandler;
@@ -445,6 +447,9 @@
*/
class LibraryDependencyNode {
final LibraryElement library;
+ int get hashCode => ++hashCodeCounter; // VM implementation of hashCode is slow.
+ static int hashCodeCounter = 0;
+
/**
* A linked list of the import tags that import [library] mapped to the
@@ -463,7 +468,8 @@
* The export scope for [library] which is gradually computed by the work-list
* computation in [LibraryDependencyHandler.computeExports].
*/
- Map<SourceString, Element> exportScope = new Map<SourceString, Element>();
+ Map<SourceString, Element> exportScope =
+ new LinkedHashMap<SourceString, Element>();
/**
* The set of exported elements that need to be propageted to dependent
@@ -500,7 +506,7 @@
*/
void registerInitialExports() {
pendingExportSet.addAll(
- library.localScope.getValues().filter((Element element) {
+ library.localScope.values.filter((Element element) {
// At this point [localScope] only contains members so we don't need
// to check for foreign or prefix elements.
return !element.name.isPrivate();
@@ -511,7 +517,7 @@
* Registers the compute export scope with the node library.
*/
void registerExports() {
- library.setExports(exportScope.getValues());
+ library.setExports(exportScope.values);
}
/**
@@ -600,7 +606,7 @@
* already been computed.
*/
Map<LibraryElement,LibraryDependencyNode> nodeMap =
- new Map<LibraryElement,LibraryDependencyNode>();
+ new LinkedHashMap<LibraryElement,LibraryDependencyNode>();
LibraryDependencyHandler(Compiler this.compiler);
@@ -613,8 +619,19 @@
bool changed = true;
while (changed) {
changed = false;
+ Map<LibraryDependencyNode, List<Element>> tasks =
+ new LinkedHashMap<LibraryDependencyNode, List<Element>>();
+
+ // Locally defined elements take precedence over exported
+ // elements. So we must propagate local elements first. We
+ // ensure this by pulling the pending exports before
+ // propagating. This enforces that we handle exports
+ // breadth-first, with locally defined elements being level 0.
nodeMap.forEach((_, LibraryDependencyNode node) {
- var pendingExports = node.pullPendingExports();
+ List<Element> pendingExports = node.pullPendingExports();
+ tasks[node] = pendingExports;
+ });
+ tasks.forEach((LibraryDependencyNode node, List<Element> pendingExports) {
pendingExports.forEach((Element element) {
element = node.addElementToExportScope(compiler, element);
if (node.propagateElement(element)) {
diff --git a/lib/compiler/implementation/patch_parser.dart b/lib/compiler/implementation/patch_parser.dart
index 9d1b7d3..009e22d 100644
--- a/lib/compiler/implementation/patch_parser.dart
+++ b/lib/compiler/implementation/patch_parser.dart
@@ -181,7 +181,7 @@
Token token = parser.parseTopLevelDeclaration(element.beginToken);
assert(identical(token, element.endToken.next));
element.cachedNode = listener.popNode();
- assert(listener.nodes.isEmpty());
+ assert(listener.nodes.isEmpty);
Link<Element> patches = element.localMembers;
applyContainerPatch(element.origin, patches);
@@ -190,7 +190,7 @@
void applyContainerPatch(ScopeContainerElement original,
Link<Element> patches) {
- while (!patches.isEmpty()) {
+ while (!patches.isEmpty) {
Element patchElement = patches.head;
Element originalElement = original.localLookup(patchElement.name);
if (patchElement.isAccessor() && originalElement != null) {
@@ -221,7 +221,7 @@
bool isPatchElement(Element element) {
// TODO(lrn): More checks needed if we introduce metadata for real.
// In that case, it must have the identifier "native" as metadata.
- for (Link link = element.metadata; !link.isEmpty(); link = link.tail) {
+ for (Link link = element.metadata; !link.isEmpty; link = link.tail) {
if (link.head is PatchMetadataAnnotation) return true;
}
return false;
diff --git a/lib/compiler/implementation/resolution/members.dart b/lib/compiler/implementation/resolution/members.dart
index d62146da..34cec51 100644
--- a/lib/compiler/implementation/resolution/members.dart
+++ b/lib/compiler/implementation/resolution/members.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.
+part of resolution;
+
abstract class TreeElements {
Element operator[](Node node);
Selector getSelector(Send send);
@@ -11,14 +13,12 @@
class TreeElementMapping implements TreeElements {
final Element currentElement;
- final Map<Node, Element> map;
final Map<Node, Selector> selectors;
final Map<Node, DartType> types;
final Set<Element> checkedParameters;
- TreeElementMapping([Element this.currentElement])
- : map = new LinkedHashMap<Node, Element>(),
- selectors = new LinkedHashMap<Node, Selector>(),
+ TreeElementMapping(this.currentElement)
+ : selectors = new LinkedHashMap<Node, Selector>(),
types = new LinkedHashMap<Node, DartType>(),
checkedParameters = new Set<Element>();
@@ -37,11 +37,20 @@
}
return true;
}));
+ // TODO(ahe): Investigate why the invariant below doesn't hold.
+ // assert(invariant(node,
+ // getTreeElement(node) == element ||
+ // getTreeElement(node) == null,
+ // message: '${getTreeElement(node)}; $element'));
- map[node] = element;
+ setTreeElement(node, element);
}
- operator [](Node node) => map[node];
- void remove(Node node) { map.remove(node); }
+
+ operator [](Node node) => getTreeElement(node);
+
+ void remove(Node node) {
+ setTreeElement(node, null);
+ }
void setType(Node node, DartType type) {
types[node] = type;
@@ -87,51 +96,15 @@
});
}
- bool isNamedConstructor(Send node) => node.receiver != null;
-
- SourceString getConstructorName(Send node) {
- return node.selector.asIdentifier().source;
- }
-
String constructorNameForDiagnostics(SourceString className,
SourceString constructorName) {
String classNameString = className.slowToString();
String constructorNameString = constructorName.slowToString();
- return (identical(constructorName, const SourceString('')))
+ return (constructorName == const SourceString(''))
? classNameString
: "$classNameString.$constructorNameString";
}
- FunctionElement resolveConstructorRedirection(InitializerResolver resolver,
- FunctionElement constructor) {
- if (constructor.isPatched) {
- checkMatchingPatchSignatures(constructor, constructor.patch);
- constructor = constructor.patch;
- }
- FunctionExpression node = constructor.parseNode(compiler);
-
- // A synthetic constructor does not have a node.
- if (node == null) return null;
- if (node.initializers == null) return null;
- Link<Node> initializers = node.initializers.nodes;
- if (!initializers.isEmpty() &&
- Initializers.isConstructorRedirect(initializers.head)) {
- final ClassElement classElement = constructor.getEnclosingClass();
- Selector selector;
- if (isNamedConstructor(initializers.head)) {
- SourceString constructorName = getConstructorName(initializers.head);
- selector = new Selector.callConstructor(
- constructorName,
- resolver.visitor.enclosingElement.getLibrary());
- } else {
- selector = new Selector.callDefaultConstructor(
- resolver.visitor.enclosingElement.getLibrary());
- }
- return classElement.lookupConstructor(selector);
- }
- return null;
- }
-
void resolveRedirectingConstructor(InitializerResolver resolver,
Node node,
FunctionElement constructor,
@@ -144,14 +117,19 @@
return;
}
seen.add(redirection);
- redirection = resolveConstructorRedirection(resolver, redirection);
+
+ if (redirection.isPatched) {
+ checkMatchingPatchSignatures(constructor, redirection.patch);
+ redirection = redirection.patch;
+ }
+ redirection = resolver.visitor.resolveConstructorRedirection(redirection);
}
}
void checkMatchingPatchParameters(FunctionElement origin,
Link<Element> originParameters,
Link<Element> patchParameters) {
- while (!originParameters.isEmpty()) {
+ while (!originParameters.isEmpty) {
Element originParameter = originParameters.head;
Element patchParameter = patchParameters.head;
// Hack: Use unparser to test parameter equality. This only works because
@@ -258,7 +236,7 @@
}
resolveConstructorImplementation(element, tree);
}
- ResolverVisitor visitor = new ResolverVisitor(compiler, element);
+ ResolverVisitor visitor = visitorFor(element);
visitor.useElement(tree, element);
visitor.setupFunction(tree, element);
@@ -281,6 +259,13 @@
});
}
+ /// This method should only be used by this library (or tests of
+ /// this library).
+ ResolverVisitor visitorFor(Element element) {
+ var mapping = new TreeElementMapping(element);
+ return new ResolverVisitor(compiler, element, mapping);
+ }
+
void visitBody(ResolverVisitor visitor, Statement body) {
visitor.visit(body);
}
@@ -350,15 +335,14 @@
if(element.modifiers.isStatic() && element.variables.isTopLevel()) {
error(element.modifiers.getStatic(), MessageKind.TOP_LEVEL_VARIABLE_DECLARED_STATIC);
}
- ResolverVisitor visitor = new ResolverVisitor(compiler, element);
+ ResolverVisitor visitor = visitorFor(element);
initializerDo(tree, visitor.visit);
return visitor.mapping;
}
TreeElements resolveParameter(Element element) {
Node tree = element.parseNode(compiler);
- ResolverVisitor visitor =
- new ResolverVisitor(compiler, element.enclosingElement);
+ ResolverVisitor visitor = visitorFor(element.enclosingElement);
initializerDo(tree, visitor.visit);
return visitor.mapping;
}
@@ -373,8 +357,7 @@
DartType resolveReturnType(Element element, TypeAnnotation annotation) {
if (annotation == null) return compiler.types.dynamicType;
- ResolverVisitor visitor = new ResolverVisitor(compiler, element);
- DartType result = visitor.resolveTypeAnnotation(annotation);
+ DartType result = visitorFor(element).resolveTypeAnnotation(annotation);
if (result == null) {
// TODO(karklose): warning.
return compiler.types.dynamicType;
@@ -624,7 +607,7 @@
FunctionSignature signature) {
LinkBuilder<DartType> parameterTypes = new LinkBuilder<DartType>();
for (Link<Element> link = signature.requiredParameters;
- !link.isEmpty();
+ !link.isEmpty;
link = link.tail) {
parameterTypes.addLast(link.head.computeType(compiler));
// TODO(karlklose): optional parameters.
@@ -640,8 +623,8 @@
annotation.resolutionState = STATE_STARTED;
Node node = annotation.parseNode(compiler);
- ResolverVisitor visitor = new ResolverVisitor(
- compiler, annotation.annotatedElement.enclosingElement);
+ ResolverVisitor visitor =
+ visitorFor(annotation.annotatedElement.enclosingElement);
node.accept(visitor);
annotation.value = compiler.constantHandler.compileNodeWithDefinitions(
node, visitor.mapping);
@@ -695,8 +678,7 @@
// Lookup target field.
Element target;
if (isFieldInitializer(init)) {
- Scope localScope = constructor.getEnclosingClass().buildLocalScope();
- target = localScope.lookup(name);
+ target = constructor.getEnclosingClass().lookupLocalMember(name);
if (target == null) {
error(selector, MessageKind.CANNOT_RESOLVE, [name]);
} else if (target.kind != ElementKind.FIELD) {
@@ -744,35 +726,23 @@
ClassElement lookupTarget = getSuperOrThisLookupTarget(constructor,
isSuperCall,
call);
- final SourceString className = lookupTarget.name;
-
- SourceString constructorName;
- Selector lookupSelector;
- if (resolver.isNamedConstructor(call)) {
- constructorName = resolver.getConstructorName(call);
- lookupSelector = new Selector.callConstructor(
- constructorName,
- visitor.enclosingElement.getLibrary());
- } else {
- constructorName = const SourceString('');
- lookupSelector = new Selector.callDefaultConstructor(
- visitor.enclosingElement.getLibrary());
- }
-
- FunctionElement lookedupConstructor =
- lookupTarget.lookupConstructor(lookupSelector);
+ Selector constructorSelector =
+ visitor.getRedirectingThisOrSuperConstructorSelector(call);
+ FunctionElement calledConstructor =
+ lookupTarget.lookupConstructor(constructorSelector);
final bool isImplicitSuperCall = false;
- verifyThatConstructorMatchesCall(lookedupConstructor,
+ final SourceString className = lookupTarget.name;
+ verifyThatConstructorMatchesCall(calledConstructor,
selector,
isImplicitSuperCall,
call,
- constructorName,
- className);
+ className,
+ constructorSelector);
- visitor.useElement(call, lookedupConstructor);
- visitor.world.registerStaticUse(lookedupConstructor);
- return lookedupConstructor;
+ visitor.useElement(call, calledConstructor);
+ visitor.world.registerStaticUse(calledConstructor);
+ return calledConstructor;
}
void resolveImplicitSuperConstructorSend(FunctionElement constructor,
@@ -793,18 +763,19 @@
ClassElement lookupTarget = getSuperOrThisLookupTarget(constructor,
isSuperCall,
functionNode);
- final SourceString className = lookupTarget.name;
+ Selector constructorSelector = new Selector.callDefaultConstructor(
+ visitor.enclosingElement.getLibrary());
Element calledConstructor = lookupTarget.lookupConstructor(
- new Selector.callDefaultConstructor(
- visitor.enclosingElement.getLibrary()));
+ constructorSelector);
+ final SourceString className = lookupTarget.name;
final bool isImplicitSuperCall = true;
verifyThatConstructorMatchesCall(calledConstructor,
callToMatch,
isImplicitSuperCall,
functionNode,
className,
- const SourceString(''));
+ constructorSelector);
visitor.world.registerStaticUse(calledConstructor);
}
@@ -816,12 +787,13 @@
bool isImplicitSuperCall,
Node diagnosticNode,
SourceString className,
- SourceString constructorName) {
+ Selector constructorSelector) {
if (lookedupConstructor == null
|| !lookedupConstructor.isGenerativeConstructor()) {
var fullConstructorName =
- visitor.compiler.resolver.constructorNameForDiagnostics(className,
- constructorName);
+ visitor.compiler.resolver.constructorNameForDiagnostics(
+ className,
+ constructorSelector.name);
MessageKind kind = isImplicitSuperCall
? MessageKind.CANNOT_RESOLVE_CONSTRUCTOR_FOR_IMPLICIT
: MessageKind.CANNOT_RESOLVE_CONSTRUCTOR;
@@ -840,7 +812,7 @@
FunctionExpression functionNode) {
if (functionNode.initializers == null) return null;
Link<Node> link = functionNode.initializers.nodes;
- if (!link.isEmpty() && Initializers.isConstructorRedirect(link.head)) {
+ if (!link.isEmpty && Initializers.isConstructorRedirect(link.head)) {
return resolveSuperOrThisForSend(constructor, functionNode, link.head);
}
return null;
@@ -871,7 +843,7 @@
FunctionElement result;
bool resolvedSuper = false;
for (Link<Node> link = initializers;
- !link.isEmpty();
+ !link.isEmpty;
link = link.tail) {
if (link.head.asSendSet() != null) {
final SendSet init = link.head.asSendSet();
@@ -890,7 +862,7 @@
error(functionNode, MessageKind.REDIRECTING_CONSTRUCTOR_HAS_BODY);
}
// Check that there are no other initializers.
- if (!initializers.tail.isEmpty()) {
+ if (!initializers.tail.isEmpty) {
error(call, MessageKind.REDIRECTING_CONSTRUCTOR_HAS_INITIALIZER);
}
return resolveSuperOrThisForSend(constructor, functionNode, call);
@@ -1002,10 +974,10 @@
}
TargetElement currentBreakTarget() =>
- breakTargetStack.isEmpty() ? null : breakTargetStack.head;
+ breakTargetStack.isEmpty ? null : breakTargetStack.head;
TargetElement currentContinueTarget() =>
- continueTargetStack.isEmpty() ? null : continueTargetStack.head;
+ continueTargetStack.isEmpty ? null : continueTargetStack.head;
void enterLabelScope(Map<String, LabelElement> elements) {
labels = new LabeledStatementLabelScope(labels, elements);
@@ -1127,7 +1099,7 @@
Link<DartType> arguments =
resolveTypeArguments(node, cls.typeVariables, scope,
onFailure, whenResolved);
- if (cls.typeVariables.isEmpty() && arguments.isEmpty()) {
+ if (cls.typeVariables.isEmpty && arguments.isEmpty) {
// Use the canonical type if it has no type parameters.
type = cls.computeType(compiler);
} else {
@@ -1141,7 +1113,7 @@
Link<DartType> arguments = resolveTypeArguments(
node, typdef.typeVariables,
scope, onFailure, whenResolved);
- if (typdef.typeVariables.isEmpty() && arguments.isEmpty()) {
+ if (typdef.typeVariables.isEmpty && arguments.isEmpty) {
// Return the canonical type if it has no type parameters.
type = typdef.computeType(compiler);
} else {
@@ -1166,9 +1138,9 @@
}
var arguments = new LinkBuilder<DartType>();
for (Link<Node> typeArguments = node.typeArguments.nodes;
- !typeArguments.isEmpty();
+ !typeArguments.isEmpty;
typeArguments = typeArguments.tail) {
- if (typeVariables.isEmpty()) {
+ if (typeVariables.isEmpty) {
onFailure(typeArguments.head, MessageKind.ADDITIONAL_TYPE_ARGUMENT);
}
DartType argType = resolveTypeAnnotationInContext(scope,
@@ -1176,17 +1148,23 @@
onFailure,
whenResolved);
arguments.addLast(argType);
- if (!typeVariables.isEmpty()) {
+ if (!typeVariables.isEmpty) {
typeVariables = typeVariables.tail;
}
}
- if (!typeVariables.isEmpty()) {
+ if (!typeVariables.isEmpty) {
onFailure(node.typeArguments, MessageKind.MISSING_TYPE_ARGUMENT);
}
return arguments.toLink();
}
}
+/**
+ * Core implementation of resolution.
+ *
+ * Do not subclass or instantiate this class outside this library
+ * except for testing.
+ */
class ResolverVisitor extends CommonResolverVisitor<Element> {
final TreeElementMapping mapping;
Element enclosingElement;
@@ -1201,9 +1179,8 @@
StatementScope statementScope;
int allowedCategory = ElementCategory.VARIABLE | ElementCategory.FUNCTION;
- ResolverVisitor(Compiler compiler, Element element)
- : this.mapping = new TreeElementMapping(element),
- this.enclosingElement = element,
+ ResolverVisitor(Compiler compiler, Element element, this.mapping)
+ : this.enclosingElement = element,
// When the element is a field, we are actually resolving its
// initial value, which should not have access to instance
// fields.
@@ -1346,6 +1323,37 @@
return type;
}
+ bool isNamedConstructor(Send node) => node.receiver != null;
+
+ Selector getRedirectingThisOrSuperConstructorSelector(Send node) {
+ if (isNamedConstructor(node)) {
+ SourceString constructorName = node.selector.asIdentifier().source;
+ return new Selector.callConstructor(
+ constructorName,
+ enclosingElement.getLibrary());
+ } else {
+ return new Selector.callDefaultConstructor(
+ enclosingElement.getLibrary());
+ }
+ }
+
+ FunctionElement resolveConstructorRedirection(FunctionElement constructor) {
+ FunctionExpression node = constructor.parseNode(compiler);
+
+ // A synthetic constructor does not have a node.
+ if (node == null) return null;
+ if (node.initializers == null) return null;
+ Link<Node> initializers = node.initializers.nodes;
+ if (!initializers.isEmpty &&
+ Initializers.isConstructorRedirect(initializers.head)) {
+ Selector selector =
+ getRedirectingThisOrSuperConstructorSelector(initializers.head);
+ final ClassElement classElement = constructor.getEnclosingClass();
+ return classElement.lookupConstructor(selector);
+ }
+ return null;
+ }
+
void setupFunction(FunctionExpression node, FunctionElement function) {
scope = new MethodScope(scope, function);
@@ -1386,9 +1394,10 @@
}
visitIn(Node node, Scope nestedScope) {
+ Scope oldScope = scope;
scope = nestedScope;
Element element = visit(node);
- scope = scope.parent;
+ scope = oldScope;
return element;
}
@@ -1453,18 +1462,19 @@
FunctionElement function = new FunctionElement.node(
name, node, ElementKind.FUNCTION, Modifiers.EMPTY,
enclosingElement);
+ Scope oldScope = scope; // The scope is modified by [setupFunction].
setupFunction(node, function);
defineElement(node, function, doAddToScope: node.name !== null);
Element previousEnclosingElement = enclosingElement;
enclosingElement = function;
// Run the body in a fresh statement scope.
- StatementScope oldScope = statementScope;
+ StatementScope oldStatementScope = statementScope;
statementScope = new StatementScope();
visit(node.body);
- statementScope = oldScope;
+ statementScope = oldStatementScope;
- scope = scope.parent;
+ scope = oldScope;
enclosingElement = previousEnclosingElement;
}
@@ -1537,7 +1547,7 @@
} else if (identical(resolvedReceiver.kind, ElementKind.CLASS)) {
ClassElement receiverClass = resolvedReceiver;
receiverClass.ensureResolved(compiler);
- target = receiverClass.buildLocalScope().lookup(name);
+ target = receiverClass.lookupLocalMember(name);
if (target == null) {
// TODO(johnniwinther): With the simplified [TreeElements] invariant,
// try to resolve injected elements if [currentClass] is in the patch
@@ -1556,7 +1566,9 @@
PrefixElement prefix = resolvedReceiver;
target = prefix.lookupLocalMember(name);
if (target == null) {
- error(node, MessageKind.NO_SUCH_LIBRARY_MEMBER, [prefix.name, name]);
+ return warnAndCreateErroneousElement(
+ node, name, MessageKind.NO_SUCH_LIBRARY_MEMBER,
+ [prefix.name, name]);
}
}
return target;
@@ -1589,7 +1601,7 @@
identical(string, '>>>')) {
return null;
}
- return node.arguments.isEmpty()
+ return node.arguments.isEmpty
? new Selector.unaryOperator(source)
: new Selector.binaryOperator(source);
}
@@ -1606,7 +1618,7 @@
int arity = 0;
List<SourceString> named = <SourceString>[];
for (Link<Node> link = node.argumentsNode.nodes;
- !link.isEmpty();
+ !link.isEmpty;
link = link.tail) {
Expression argument = link.head;
NamedArgument namedArgument = argument.asNamedArgument();
@@ -1632,7 +1644,7 @@
void resolveArguments(NodeList list) {
if (list == null) return;
bool seenNamedArgument = false;
- for (Link<Node> link = list.nodes; !link.isEmpty(); link = link.tail) {
+ for (Link<Node> link = list.nodes; !link.isEmpty; link = link.tail) {
Expression argument = link.head;
visit(argument);
if (argument.asNamedArgument() != null) {
@@ -1661,7 +1673,7 @@
if (node.isOperator) {
String operatorString = node.selector.asOperator().source.stringValue;
if (identical(operatorString, 'is') || identical(operatorString, 'as')) {
- assert(node.arguments.tail.isEmpty());
+ assert(node.arguments.tail.isEmpty);
DartType type = resolveTypeTest(node.arguments.head);
if (type != null) {
compiler.enqueuer.resolution.registerIsCheck(type);
@@ -1821,7 +1833,7 @@
}
visitNodeList(NodeList node) {
- for (Link<Node> link = node.nodes; !link.isEmpty(); link = link.tail) {
+ for (Link<Node> link = node.nodes; !link.isEmpty; link = link.tail) {
visit(link.head);
}
}
@@ -1990,11 +2002,11 @@
NodeList arguments = node.typeArguments;
if (arguments != null) {
Link<Node> nodes = arguments.nodes;
- if (nodes.isEmpty()) {
+ if (nodes.isEmpty) {
error(arguments, MessageKind.MISSING_TYPE_ARGUMENT, []);
} else {
resolveTypeRequired(nodes.head);
- for (nodes = nodes.tail; !nodes.isEmpty(); nodes = nodes.tail) {
+ for (nodes = nodes.tail; !nodes.isEmpty; nodes = nodes.tail) {
error(nodes.head, MessageKind.ADDITIONAL_TYPE_ARGUMENT, []);
resolveTypeRequired(nodes.head);
}
@@ -2040,6 +2052,12 @@
label.setBreakTarget();
mapping[node.target] = label;
}
+ if (mapping[node] != null) {
+ // TODO(ahe): I'm not sure why this node already has an element
+ // that is different from target. I will talk to Lasse and
+ // figure out what is going on.
+ mapping.remove(node);
+ }
mapping[node] = target;
}
@@ -2078,13 +2096,18 @@
world.registerDynamicInvocation(name, selector);
}
+ registerImplicitFieldGet(SourceString name) {
+ Selector selector = new Selector.getter(name, null);
+ world.registerDynamicGetter(name, selector);
+ }
+
visitForIn(ForIn node) {
for (final name in const [
const SourceString('iterator'),
- const SourceString('next'),
- const SourceString('hasNext')]) {
+ const SourceString('next')]) {
registerImplicitInvocation(name, 0);
}
+ registerImplicitFieldGet(const SourceString('hasNext'));
visit(node.expression);
Scope blockScope = new BlockScope(scope);
Node declaration = node.declaredIdentifier;
@@ -2095,7 +2118,7 @@
if ((declaration is !Send || declaration.asSend().selector is !Identifier
|| declaration.asSend().receiver != null)
&& (declaration is !VariableDefinitions ||
- !declaration.asVariableDefinitions().definitions.nodes.tail.isEmpty()))
+ !declaration.asVariableDefinitions().definitions.nodes.tail.isEmpty))
{
// The variable declaration is either not an identifier, not a
// declaration, or it's declaring more than one variable.
@@ -2152,7 +2175,7 @@
TargetElement breakElement = getOrCreateTargetElement(node);
Map<String, LabelElement> continueLabels = <String, LabelElement>{};
Link<Node> cases = node.cases.nodes;
- while (!cases.isEmpty()) {
+ while (!cases.isEmpty) {
SwitchCase switchCase = cases.head;
for (Node labelOrCase in switchCase.labelsAndCases) {
if (labelOrCase is! Label) continue;
@@ -2178,6 +2201,10 @@
new TargetElement(switchCase,
statementScope.nestingLevel,
enclosingElement);
+ if (mapping[switchCase] != null) {
+ // TODO(ahe): Talk to Lasse about this.
+ mapping.remove(switchCase);
+ }
mapping[switchCase] = targetElement;
LabelElement labelElement =
@@ -2188,7 +2215,7 @@
}
cases = cases.tail;
// Test that only the last case, if any, is a default case.
- if (switchCase.defaultKeyword != null && !cases.isEmpty()) {
+ if (switchCase.defaultKeyword != null && !cases.isEmpty) {
error(switchCase, MessageKind.INVALID_CASE_DEFAULT);
}
}
@@ -2219,7 +2246,7 @@
visitTryStatement(TryStatement node) {
visit(node.tryBlock);
- if (node.catchBlocks.isEmpty() && node.finallyBlock == null) {
+ if (node.catchBlocks.isEmpty && node.finallyBlock == null) {
// TODO(ngeoffray): The precise location is
// node.getEndtoken.next. Adjust when issue #1581 is fixed.
error(node, MessageKind.NO_CATCH_NOR_FINALLY);
@@ -2232,11 +2259,11 @@
// Check that if catch part is present, then
// it has one or two formal parameters.
if (node.formals != null) {
- if (node.formals.isEmpty()) {
+ if (node.formals.isEmpty) {
error(node, MessageKind.EMPTY_CATCH_DECLARATION);
}
- if (!node.formals.nodes.tail.isEmpty() &&
- !node.formals.nodes.tail.tail.isEmpty()) {
+ if (!node.formals.nodes.tail.isEmpty &&
+ !node.formals.nodes.tail.tail.isEmpty) {
for (Node extra in node.formals.nodes.tail.tail) {
error(extra, MessageKind.EXTRA_CATCH_DECLARATION);
}
@@ -2245,7 +2272,7 @@
// Check that the formals aren't optional and that they have no
// modifiers or type.
for (Link<Node> link = node.formals.nodes;
- !link.isEmpty();
+ !link.isEmpty;
link = link.tail) {
// If the formal parameter is a node list, it means that it is a
// sequence of optional parameters.
@@ -2289,7 +2316,7 @@
TypeDefinitionVisitor(Compiler compiler, TypeDeclarationElement element)
: this.element = element,
- scope = element.buildEnclosingScope(),
+ scope = Scope.buildEnclosingScope(element),
typeResolver = new TypeResolver(compiler),
super(compiler);
@@ -2300,7 +2327,7 @@
// Resolve the bounds of type variables.
Link<DartType> typeLink = element.typeVariables;
Link<Node> nodeLink = node.nodes;
- while (!nodeLink.isEmpty()) {
+ while (!nodeLink.isEmpty) {
TypeVariableType typeVariable = typeLink.head;
SourceString typeName = typeVariable.name;
TypeVariable typeNode = nodeLink.head;
@@ -2330,7 +2357,7 @@
nodeLink = nodeLink.tail;
typeLink = typeLink.tail;
}
- assert(typeLink.isEmpty());
+ assert(typeLink.isEmpty);
}
}
@@ -2408,7 +2435,7 @@
assert(element.interfaces == null);
Link<DartType> interfaces = const Link<DartType>();
for (Link<Node> link = node.interfaces.nodes;
- !link.isEmpty();
+ !link.isEmpty;
link = link.tail) {
DartType interfaceType = visit(link.head);
if (interfaceType != null && interfaceType.element.isExtendable()) {
@@ -2489,7 +2516,7 @@
assert(superSupertypes != null);
Link<DartType> supertypes = superSupertypes.prepend(supertype);
for (Link<DartType> interfaces = cls.interfaces;
- !interfaces.isEmpty();
+ !interfaces.isEmpty;
interfaces = interfaces.tail) {
ClassElement element = interfaces.head.element;
Link<DartType> interfaceSupertypes = element.allSupertypes;
@@ -2545,7 +2572,7 @@
ClassElement classElement;
ClassSupertypeResolver(Compiler compiler, ClassElement cls)
- : context = cls.buildEnclosingScope(),
+ : context = Scope.buildEnclosingScope(cls),
this.classElement = cls,
super(compiler);
@@ -2563,7 +2590,7 @@
node.superclass.accept(this);
}
for (Link<Node> link = node.interfaces.nodes;
- !link.isEmpty();
+ !link.isEmpty;
link = link.tail) {
link.head.accept(this);
}
@@ -2623,11 +2650,11 @@
this.definitions, this.resolver, this.kind)
: super(compiler) {
variables = new VariableListElement.node(
- definitions, ElementKind.VARIABLE_LIST, resolver.scope.element);
+ definitions, ElementKind.VARIABLE_LIST, resolver.enclosingElement);
}
SourceString visitSendSet(SendSet node) {
- assert(node.arguments.tail.isEmpty()); // Sanity check
+ assert(node.arguments.tail.isEmpty); // Sanity check
resolver.visit(node.arguments.head);
return visit(node.selector);
}
@@ -2635,7 +2662,7 @@
SourceString visitIdentifier(Identifier node) => node.source;
visitNodeList(NodeList node) {
- for (Link<Node> link = node.nodes; !link.isEmpty(); link = link.tail) {
+ for (Link<Node> link = node.nodes; !link.isEmpty; link = link.tail) {
SourceString name = visit(link.head);
VariableElement element =
new VariableElement(name, variables, kind, link.head);
@@ -2671,11 +2698,11 @@
Element visitVariableDefinitions(VariableDefinitions node) {
Link<Node> definitions = node.definitions.nodes;
- if (definitions.isEmpty()) {
+ if (definitions.isEmpty) {
cancel(node, 'internal error: no parameter definition');
return null;
}
- if (!definitions.tail.isEmpty()) {
+ if (!definitions.tail.isEmpty) {
cancel(definitions.tail.head, 'internal error: extra definition');
return null;
}
@@ -2768,14 +2795,14 @@
LinkBuilder<Element> analyzeNodes(Link<Node> link) {
LinkBuilder<Element> elements = new LinkBuilder<Element>();
- for (; !link.isEmpty(); link = link.tail) {
+ for (; !link.isEmpty; link = link.tail) {
Element element = link.head.accept(this);
if (element != null) {
elements.addLast(element);
} else {
// If parameter is null, the current node should be the last,
// and a list of optional named parameters.
- if (!link.tail.isEmpty() || (link.head is !NodeList)) {
+ if (!link.tail.isEmpty || (link.head is !NodeList)) {
internalError(link.head, "expected optional parameters");
}
}
@@ -2828,7 +2855,8 @@
// TODO(ahe): This is temporary.
void resolveExpression(Node node) {
if (node == null) return;
- node.accept(new ResolverVisitor(compiler, enclosingElement));
+ node.accept(new ResolverVisitor(compiler, enclosingElement,
+ new TreeElementMapping(enclosingElement)));
}
// TODO(ahe): This is temporary.
@@ -2965,235 +2993,3 @@
return e;
}
}
-
-abstract class Scope {
- final Element element;
- final Scope parent;
-
- Scope(this.parent, this.element);
- abstract Element add(Element element);
-
- Element lookup(SourceString name) {
- Element result = localLookup(name);
- if (result != null) return result;
- return parent.lookup(name);
- }
-
- abstract Element localLookup(SourceString name);
-}
-
-/**
- * [TypeDeclarationScope] defines the outer scope of a type declaration in
- * which the declared type variables and the entities in the enclosing scope are
- * available but where declared and inherited members are not available. This
- * scope is only used for class/interface declarations during resolution of the
- * class hierarchy. In all other cases [ClassScope] is used.
- */
-class TypeDeclarationScope extends Scope {
- TypeDeclarationElement get element => super.element;
-
- TypeDeclarationScope(parent, TypeDeclarationElement element)
- : super(parent, element) {
- assert(parent != null);
- }
-
- Element add(Element newElement) {
- throw "Cannot add element to TypeDeclarationScope";
- }
-
- Element localLookup(SourceString name) {
- Link<DartType> typeVariableLink = element.typeVariables;
- while (!typeVariableLink.isEmpty()) {
- TypeVariableType typeVariable = typeVariableLink.head;
- if (typeVariable.name == name) {
- return typeVariable.element;
- }
- typeVariableLink = typeVariableLink.tail;
- }
- return null;
- }
-
- String toString() =>
- 'TypeDeclarationScope($element)';
-}
-
-class MethodScope extends Scope {
- final Map<SourceString, Element> elements;
-
- MethodScope(Scope parent, Element element)
- : super(parent, element),
- this.elements = new Map<SourceString, Element>() {
- assert(parent != null);
- }
-
- Element localLookup(SourceString name) => elements[name];
-
- Element add(Element newElement) {
- if (elements.containsKey(newElement.name)) {
- return elements[newElement.name];
- }
- elements[newElement.name] = newElement;
- return newElement;
- }
-
- String toString() => '$element${elements.getKeys()}';
-}
-
-class BlockScope extends MethodScope {
- BlockScope(Scope parent) : super(parent, parent.element);
-
- String toString() => 'block${elements.getKeys()}';
-}
-
-/**
- * [ClassScope] defines the inner scope of a class/interface declaration in
- * which declared members, declared type variables, entities in the enclosing
- * scope and inherited members are available, in the given order.
- */
-class ClassScope extends TypeDeclarationScope {
- ClassElement get element => super.element;
-
- ClassScope(Scope parentScope, ClassElement element)
- : super(parentScope, element) {
- assert(parent != null);
- }
-
- Element localLookup(SourceString name) {
- Element result = element.lookupLocalMember(name);
- if (result != null) return result;
- return super.localLookup(name);
- }
-
- Element lookup(SourceString name) {
- Element result = localLookup(name);
- if (result != null) return result;
- result = parent.lookup(name);
- if (result != null) return result;
- return element.lookupSuperMember(name);
- }
-
- Element add(Element newElement) {
- throw "Cannot add an element in a class scope";
- }
-
- String toString() => 'ClassScope($element)';
-}
-
-// TODO(johnniwinther): Refactor scopes to avoid class explosion.
-class PatchClassScope extends TypeDeclarationScope {
- ClassElement get origin => element;
- final ClassElement patch;
-
- PatchClassScope(Scope parentScope,
- ClassElement origin, ClassElement this.patch)
- : super(parentScope, origin) {
- assert(parent != null);
- }
-
- Element localLookup(SourceString name) {
- Element result = patch.lookupLocalMember(name);
- if (result != null) return result;
- result = origin.lookupLocalMember(name);
- if (result != null) return result;
- result = super.localLookup(name);
- if (result != null) return result;
- result = parent.lookup(name);
- if (result != null) return result;
- return result;
- }
-
- Element lookup(SourceString name) {
- Element result = localLookup(name);
- if (result != null) return result;
- // TODO(johnniwinther): Should we support patch lookup on supertypes?
- return origin.lookupSuperMember(name);
- }
-
- Element add(Element newElement) {
- throw "Cannot add an element in a class scope";
- }
-
- String toString() => 'PatchClassScope($origin,$patch)';
-}
-
-class LocalClassScope extends Scope {
- LocalClassScope(ClassElement element)
- : super(null, element);
-
- Element lookup(SourceString name) => localLookup(name);
-
- Element localLookup(SourceString name) {
- ClassElement cls = element;
- return cls.lookupLocalMember(name);
- }
-
- Element add(Element newElement) {
- throw "Cannot add an element in a class scope";
- }
-
- String toString() => 'LocalClassScope($element)';
-}
-
-class LocalPatchClassScope extends Scope {
- ClassElement get origin => element;
- final ClassElement patch;
-
- LocalPatchClassScope(ClassElement origin, ClassElement this.patch)
- : super(null, origin);
-
- Element lookup(SourceString name) => localLookup(name);
-
- Element localLookup(SourceString name) {
- Element result = patch.lookupLocalMember(name);
- if (result != null) return result;
- return origin.lookupLocalMember(name);
- }
-
- Element add(Element newElement) {
- throw "Cannot add an element in a class scope";
- }
-
- String toString() => 'LocalPatchClassScope($origin,$patch)';
-}
-
-class TopScope extends Scope {
- LibraryElement get library => element;
-
- TopScope(LibraryElement library) : super(null, library);
-
- Element localLookup(SourceString name) => library.find(name);
- Element lookup(SourceString name) => localLookup(name);
- Element lexicalLookup(SourceString name) => localLookup(name);
-
- Element add(Element newElement) {
- throw "Cannot add an element in the top scope";
- }
- String toString() => 'LibraryScope($element)';
-}
-
-class PatchLibraryScope extends Scope {
- LibraryElement get origin => element;
- final LibraryElement patch;
-
- PatchLibraryScope(LibraryElement origin, LibraryElement this.patch)
- : super(null, origin);
-
- Element localLookup(SourceString name) {
- Element result = patch.find(name);
- if (result != null) {
- return result;
- }
- result = origin.find(name);
- if (result != null) {
- return result;
- }
- return result;
- }
- Element lookup(SourceString name) => localLookup(name);
- Element lexicalLookup(SourceString name) => localLookup(name);
-
- Element add(Element newElement) {
- throw "Cannot add an element in a patch library scope";
- }
- String toString() => 'PatchLibraryScope($origin,$patch)';
-}
diff --git a/lib/compiler/implementation/resolution/resolution.dart b/lib/compiler/implementation/resolution/resolution.dart
index 832090c..3d44fee 100644
--- a/lib/compiler/implementation/resolution/resolution.dart
+++ b/lib/compiler/implementation/resolution/resolution.dart
@@ -11,4 +11,7 @@
import '../util/util.dart';
import '../scanner/scannerlib.dart' show PartialMetadataAnnotation;
+import 'secret_tree_element.dart' show getTreeElement, setTreeElement;
+
part 'members.dart';
+part 'scope.dart';
diff --git a/lib/compiler/implementation/resolution/scope.dart b/lib/compiler/implementation/resolution/scope.dart
new file mode 100644
index 0000000..519cb66
--- /dev/null
+++ b/lib/compiler/implementation/resolution/scope.dart
@@ -0,0 +1,163 @@
+// 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.
+
+part of resolution;
+
+abstract class Scope {
+ /**
+ * Adds [element] to this scope. This operation is only allowed on mutable
+ * scopes such as [MethodScope] and [BlockScope].
+ */
+ abstract Element add(Element element);
+
+ /**
+ * Looks up the [Element] for [name] in this scope.
+ */
+ abstract Element lookup(SourceString name);
+
+ static Scope buildEnclosingScope(Element element) {
+ return element.enclosingElement != null
+ ? element.enclosingElement.buildScope() : element.buildScope();
+ }
+}
+
+abstract class NestedScope extends Scope {
+ final Scope parent;
+
+ NestedScope(this.parent);
+
+ Element lookup(SourceString name) {
+ Element result = localLookup(name);
+ if (result != null) return result;
+ return parent.lookup(name);
+ }
+
+ abstract Element localLookup(SourceString name);
+
+ static Scope buildEnclosingScope(Element element) {
+ return element.enclosingElement != null
+ ? element.enclosingElement.buildScope() : element.buildScope();
+ }
+}
+
+/**
+ * [TypeDeclarationScope] defines the outer scope of a type declaration in
+ * which the declared type variables and the entities in the enclosing scope are
+ * available but where declared and inherited members are not available. This
+ * scope is only used for class/interface declarations during resolution of the
+ * class hierarchy. In all other cases [ClassScope] is used.
+ */
+class TypeDeclarationScope extends NestedScope {
+ final TypeDeclarationElement element;
+
+ TypeDeclarationScope(parent, this.element)
+ : super(parent) {
+ assert(parent != null);
+ }
+
+ Element add(Element newElement) {
+ throw "Cannot add element to TypeDeclarationScope";
+ }
+
+ Element lookupTypeVariable(SourceString name) {
+ Link<DartType> typeVariableLink = element.typeVariables;
+ while (!typeVariableLink.isEmpty) {
+ TypeVariableType typeVariable = typeVariableLink.head;
+ if (typeVariable.name == name) {
+ return typeVariable.element;
+ }
+ typeVariableLink = typeVariableLink.tail;
+ }
+ return null;
+ }
+
+ Element localLookup(SourceString name) => lookupTypeVariable(name);
+
+ String toString() =>
+ 'TypeDeclarationScope($element)';
+}
+
+abstract class MutableScope extends NestedScope {
+ final Map<SourceString, Element> elements;
+
+ MutableScope(Scope parent)
+ : super(parent),
+ this.elements = new Map<SourceString, Element>() {
+ assert(parent != null);
+ }
+
+ Element add(Element newElement) {
+ if (elements.containsKey(newElement.name)) {
+ return elements[newElement.name];
+ }
+ elements[newElement.name] = newElement;
+ return newElement;
+ }
+
+ Element localLookup(SourceString name) => elements[name];
+}
+
+class MethodScope extends MutableScope {
+ final Element element;
+
+ MethodScope(Scope parent, this.element)
+ : super(parent);
+
+ String toString() => 'MethodScope($element${elements.keys})';
+}
+
+class BlockScope extends MutableScope {
+ BlockScope(Scope parent) : super(parent);
+
+ String toString() => 'BlockScope(${elements.keys})';
+}
+
+/**
+ * [ClassScope] defines the inner scope of a class/interface declaration in
+ * which declared members, declared type variables, entities in the enclosing
+ * scope and inherited members are available, in the given order.
+ */
+class ClassScope extends TypeDeclarationScope {
+ ClassElement get element => super.element;
+
+ ClassScope(Scope parentScope, ClassElement element)
+ : super(parentScope, element) {
+ assert(parent != null);
+ }
+
+ Element localLookup(SourceString name) {
+ Element result = element.lookupLocalMember(name);
+ if (result != null) return result;
+ return super.localLookup(name);
+ }
+
+ Element lookup(SourceString name) {
+ Element result = localLookup(name);
+ if (result != null) return result;
+ result = parent.lookup(name);
+ if (result != null) return result;
+ return element.lookupSuperMember(name);
+ }
+
+ Element add(Element newElement) {
+ throw "Cannot add an element in a class scope";
+ }
+
+ String toString() => 'ClassScope($element)';
+}
+
+class LibraryScope implements Scope {
+ final LibraryElement library;
+
+ LibraryScope(LibraryElement this.library);
+
+ Element localLookup(SourceString name) => library.find(name);
+ Element lookup(SourceString name) => localLookup(name);
+
+ Element add(Element newElement) {
+ throw "Cannot add an element to a library scope";
+ }
+
+ String toString() => 'LibraryScope($library)';
+}
diff --git a/lib/compiler/implementation/resolution/secret_tree_element.dart b/lib/compiler/implementation/resolution/secret_tree_element.dart
new file mode 100644
index 0000000..e8ee0f1
--- /dev/null
+++ b/lib/compiler/implementation/resolution/secret_tree_element.dart
@@ -0,0 +1,46 @@
+// 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.
+
+/**
+ * Encapsulates the field [TreeElementMixin._element].
+ *
+ * This library is an implementation detail of dart2js, and should not
+ * be imported except by resolution and tree node libraries, or for
+ * testing.
+ *
+ * We have taken great care to ensure AST nodes can be cached between
+ * compiler instances. Part of this is requires that we always access
+ * resolution results through [TreeElements].
+ *
+ * So please, do not add additional elements to this library, and do
+ * not import it.
+ */
+library secret_tree_element;
+
+/**
+ * The superclass of all AST nodes.
+ */
+abstract class TreeElementMixin {
+ // Deliberately using [Object] here to thwart code completion.
+ // You're not really supposed to access this field anyways.
+ Object _element;
+}
+
+/**
+ * Do not call this method directly. Instead, use an instance of
+ * [TreeElements].
+ *
+ * Using [Object] as return type to thwart code completion.
+ */
+Object getTreeElement(TreeElementMixin node) {
+ return node._element;
+}
+
+/**
+ * Do not call this method directly. Instead, use an instance of
+ * [TreeElements].
+ */
+void setTreeElement(TreeElementMixin node, Object value) {
+ node._element = value;
+}
diff --git a/lib/compiler/implementation/resolved_visitor.dart b/lib/compiler/implementation/resolved_visitor.dart
index 47fcb88..8120ac4 100644
--- a/lib/compiler/implementation/resolved_visitor.dart
+++ b/lib/compiler/implementation/resolved_visitor.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.
+part of dart2js;
+
abstract class ResolvedVisitor<R> extends Visitor<R> {
TreeElements elements;
diff --git a/lib/compiler/implementation/runtime_types.dart b/lib/compiler/implementation/runtime_types.dart
index e1a51e6..9b0820f 100644
--- a/lib/compiler/implementation/runtime_types.dart
+++ b/lib/compiler/implementation/runtime_types.dart
@@ -33,7 +33,7 @@
bool hasTypeArguments(DartType type) {
if (type is InterfaceType) {
InterfaceType interfaceType = type;
- return !interfaceType.arguments.isEmpty();
+ return !interfaceType.arguments.isEmpty;
}
return false;
}
@@ -69,7 +69,7 @@
*/
String generateRuntimeTypeString(ClassElement element, int numberOfInputs) {
String elementName = getName(element);
- if (element.typeVariables.isEmpty()) return "'$elementName'";
+ if (element.typeVariables.isEmpty) return "'$elementName'";
String stringify(_, bool hasValue) => hasValue ? "' + # + '" : "Dynamic";
String arguments = stringifyTypeVariables(element.typeVariables,
numberOfInputs,
diff --git a/lib/compiler/implementation/scanner/array_based_scanner.dart b/lib/compiler/implementation/scanner/array_based_scanner.dart
index 0e02b0d..f0cb22f 100644
--- a/lib/compiler/implementation/scanner/array_based_scanner.dart
+++ b/lib/compiler/implementation/scanner/array_based_scanner.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.
+part of scanner_implementation;
+
abstract
class ArrayBasedScanner<S extends SourceString> extends AbstractScanner<S> {
int get charOffset => byteOffset + extraCharOffset;
@@ -65,7 +67,7 @@
// EOF points to itself so there's always infinite look-ahead.
tail.next = tail;
discardOpenLt();
- while (!groupingStack.isEmpty()) {
+ while (!groupingStack.isEmpty) {
BeginGroupToken begin = groupingStack.head;
begin.endGroup = tail;
groupingStack = groupingStack.tail;
@@ -104,7 +106,7 @@
assert(!identical(openKind, LT_TOKEN));
appendStringToken(info, value);
discardOpenLt();
- if (groupingStack.isEmpty()) {
+ if (groupingStack.isEmpty) {
return advance();
}
BeginGroupToken begin = groupingStack.head;
@@ -128,7 +130,7 @@
void appendGt(PrecedenceInfo info, String value) {
appendStringToken(info, value);
- if (groupingStack.isEmpty()) return;
+ if (groupingStack.isEmpty) return;
if (identical(groupingStack.head.kind, LT_TOKEN)) {
groupingStack.head.endGroup = tail;
groupingStack = groupingStack.tail;
@@ -137,11 +139,11 @@
void appendGtGt(PrecedenceInfo info, String value) {
appendStringToken(info, value);
- if (groupingStack.isEmpty()) return;
+ if (groupingStack.isEmpty) return;
if (identical(groupingStack.head.kind, LT_TOKEN)) {
groupingStack = groupingStack.tail;
}
- if (groupingStack.isEmpty()) return;
+ if (groupingStack.isEmpty) return;
if (identical(groupingStack.head.kind, LT_TOKEN)) {
groupingStack.head.endGroup = tail;
groupingStack = groupingStack.tail;
@@ -150,15 +152,15 @@
void appendGtGtGt(PrecedenceInfo info, String value) {
appendStringToken(info, value);
- if (groupingStack.isEmpty()) return;
+ if (groupingStack.isEmpty) return;
if (identical(groupingStack.head.kind, LT_TOKEN)) {
groupingStack = groupingStack.tail;
}
- if (groupingStack.isEmpty()) return;
+ if (groupingStack.isEmpty) return;
if (identical(groupingStack.head.kind, LT_TOKEN)) {
groupingStack = groupingStack.tail;
}
- if (groupingStack.isEmpty()) return;
+ if (groupingStack.isEmpty) return;
if (identical(groupingStack.head.kind, LT_TOKEN)) {
groupingStack.head.endGroup = tail;
groupingStack = groupingStack.tail;
@@ -172,7 +174,7 @@
}
void discardOpenLt() {
- while (!groupingStack.isEmpty()
+ while (!groupingStack.isEmpty
&& identical(groupingStack.head.kind, LT_TOKEN)) {
groupingStack = groupingStack.tail;
}
diff --git a/lib/compiler/implementation/scanner/byte_strings.dart b/lib/compiler/implementation/scanner/byte_strings.dart
index 9f3c454..6a89fb2 100644
--- a/lib/compiler/implementation/scanner/byte_strings.dart
+++ b/lib/compiler/implementation/scanner/byte_strings.dart
@@ -26,7 +26,7 @@
Iterator<int> iterator() => new Utf8Decoder(bytes, offset, length);
- int hashCode() {
+ int get hashCode {
if (_hashCode == null) {
_hashCode = computeHashCode();
}
@@ -46,8 +46,8 @@
sb.add(slowToString());
}
- bool isEmpty() => length == 0;
- bool isPrivate() => !isEmpty() && identical(bytes[offset], $_);
+ bool get isEmpty => length == 0;
+ bool isPrivate() => !isEmpty && identical(bytes[offset], $_);
String get stringValue => null;
}
@@ -75,7 +75,7 @@
static AsciiString fromString(String string) {
- List<int> bytes = string.charCodes();
+ List<int> bytes = string.charCodes;
return AsciiString.of(bytes, 0, bytes.length);
}
}
@@ -89,7 +89,7 @@
: this.bytes = bytes, offset = 0, end = bytes.length;
AsciiStringIterator.range(List<int> bytes, int from, int length)
: this.bytes = bytes, offset = from, end = from + length;
- bool hasNext() => offset < end;
+ bool get hasNext => offset < end;
int next() => bytes[offset++];
}
diff --git a/lib/compiler/implementation/scanner/class_element_parser.dart b/lib/compiler/implementation/scanner/class_element_parser.dart
index 0e536d9..39e6d25 100644
--- a/lib/compiler/implementation/scanner/class_element_parser.dart
+++ b/lib/compiler/implementation/scanner/class_element_parser.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.
+part of scanner;
+
class ClassElementParser extends PartialParser {
ClassElementParser(Listener listener) : super(listener);
@@ -41,7 +43,7 @@
Token token = parser.parseTopLevelDeclaration(beginToken);
assert(identical(token, endToken.next));
cachedNode = listener.popNode();
- assert(listener.nodes.isEmpty());
+ assert(listener.nodes.isEmpty);
});
compiler.patchParser.measure(() {
if (isPatched) {
@@ -169,7 +171,7 @@
}
void addMember(Element memberElement) {
- for (Link link = metadata; !link.isEmpty(); link = link.tail) {
+ for (Link link = metadata; !link.isEmpty; link = link.tail) {
memberElement.addMetadata(link.head);
}
metadata = const Link<MetadataAnnotation>();
diff --git a/lib/compiler/implementation/scanner/keyword.dart b/lib/compiler/implementation/scanner/keyword.dart
index 768dedf..335951c 100644
--- a/lib/compiler/implementation/scanner/keyword.dart
+++ b/lib/compiler/implementation/scanner/keyword.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.
+part of scanner;
+
/**
* A keyword in the Dart programming language.
*/
@@ -94,7 +96,7 @@
return result;
}
- int hashCode() => syntax.hashCode();
+ int get hashCode => syntax.hashCode;
bool operator ==(other) {
return other is SourceString && toString() == other.slowToString();
@@ -115,7 +117,7 @@
return this;
}
- bool isEmpty() => false;
+ bool get isEmpty => false;
bool isPrivate() => false;
}
diff --git a/lib/compiler/implementation/scanner/listener.dart b/lib/compiler/implementation/scanner/listener.dart
index 2a0572d..8d309ae 100644
--- a/lib/compiler/implementation/scanner/listener.dart
+++ b/lib/compiler/implementation/scanner/listener.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.
+part of scanner;
+
const bool VERBOSE = false;
/**
@@ -654,7 +656,7 @@
// Library tags are only allowed in the library file itself, not
// in sourced files.
LibraryElement library = compilationUnitElement.getLibrary();
- return compilationUnitElement.localMembers.isEmpty()
+ return compilationUnitElement.localMembers.isEmpty
&& library.entryCompilationUnit == compilationUnitElement;
}
@@ -842,7 +844,7 @@
modifiers,
enclosingElement);
for (Link<Node> variableNodes = variables.nodes;
- !variableNodes.isEmpty();
+ !variableNodes.isEmpty;
variableNodes = variableNodes.tail) {
Expression initializedIdentifier = variableNodes.head;
Identifier identifier = initializedIdentifier.asIdentifier();
@@ -990,7 +992,7 @@
}
void pushElement(Element element) {
- for (Link link = metadata; !link.isEmpty(); link = link.tail) {
+ for (Link link = metadata; !link.isEmpty; link = link.tail) {
element.addMetadata(link.head);
}
metadata = const Link<MetadataAnnotation>();
@@ -1019,7 +1021,7 @@
}
Node popNode() {
- assert(!nodes.isEmpty());
+ assert(!nodes.isEmpty);
Node node = nodes.head;
nodes = nodes.tail;
if (VERBOSE) log("pop $nodes");
@@ -1027,7 +1029,7 @@
}
Node peekNode() {
- assert(!nodes.isEmpty());
+ assert(!nodes.isEmpty);
Node node = nodes.head;
if (VERBOSE) log("peek $node");
return node;
@@ -1913,6 +1915,6 @@
NodeListener listener = new NodeListener(diagnosticListener, element);
doParse(new Parser(listener));
Node node = listener.popNode();
- assert(listener.nodes.isEmpty());
+ assert(listener.nodes.isEmpty);
return node;
}
diff --git a/lib/compiler/implementation/scanner/parser.dart b/lib/compiler/implementation/scanner/parser.dart
index a7f9fcd..5f3e99a 100644
--- a/lib/compiler/implementation/scanner/parser.dart
+++ b/lib/compiler/implementation/scanner/parser.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.
+part of scanner;
+
/**
* An event generating parser of Dart programs. This parser expects
* all tokens in a linked list (aka a token stream).
@@ -573,13 +575,13 @@
listener.beginTopLevelMember(token);
Link<Token> identifiers = findMemberName(token);
- if (identifiers.isEmpty()) {
+ if (identifiers.isEmpty) {
return listener.unexpected(start);
}
Token name = identifiers.head;
identifiers = identifiers.tail;
Token getOrSet;
- if (!identifiers.isEmpty()) {
+ if (!identifiers.isEmpty) {
String value = identifiers.head.stringValue;
if ((identical(value, 'get')) || (identical(value, 'set'))) {
getOrSet = identifiers.head;
@@ -587,7 +589,7 @@
}
}
Token type;
- if (!identifiers.isEmpty()) {
+ if (!identifiers.isEmpty) {
if (isValidTypeReference(identifiers.head)) {
type = identifiers.head;
identifiers = identifiers.tail;
@@ -771,7 +773,7 @@
void parseModifierList(Link<Token> tokens) {
int count = 0;
- for (; !tokens.isEmpty(); tokens = tokens.tail) {
+ for (; !tokens.isEmpty; tokens = tokens.tail) {
Token token = tokens.head;
if (isModifier(token)) {
parseModifier(token);
@@ -867,26 +869,26 @@
listener.beginMember(token);
Link<Token> identifiers = findMemberName(token);
- if (identifiers.isEmpty()) {
+ if (identifiers.isEmpty) {
return listener.unexpected(start);
}
Token name = identifiers.head;
identifiers = identifiers.tail;
- if (!identifiers.isEmpty()) {
+ if (!identifiers.isEmpty) {
if (optional('operator', identifiers.head)) {
name = identifiers.head;
identifiers = identifiers.tail;
}
}
Token getOrSet;
- if (!identifiers.isEmpty()) {
+ if (!identifiers.isEmpty) {
if (isGetOrSet(identifiers.head)) {
getOrSet = identifiers.head;
identifiers = identifiers.tail;
}
}
Token type;
- if (!identifiers.isEmpty()) {
+ if (!identifiers.isEmpty) {
if (isValidTypeReference(identifiers.head)) {
type = identifiers.head;
identifiers = identifiers.tail;
@@ -1538,7 +1540,7 @@
}
Token parseParenthesizedExpression(Token token) {
- Token begin = token;
+ var begin = token;
token = expect('(', token);
token = parseExpression(token);
if (!identical(begin.endGroup, token)) {
diff --git a/lib/compiler/implementation/scanner/parser_task.dart b/lib/compiler/implementation/scanner/parser_task.dart
index 01d43ad..eca572b 100644
--- a/lib/compiler/implementation/scanner/parser_task.dart
+++ b/lib/compiler/implementation/scanner/parser_task.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.
+part of scanner;
+
class ParserTask extends CompilerTask {
ParserTask(Compiler compiler) : super(compiler);
String get name => 'Parser';
diff --git a/lib/compiler/implementation/scanner/partial_parser.dart b/lib/compiler/implementation/scanner/partial_parser.dart
index fe2bcd7..7516e6c 100644
--- a/lib/compiler/implementation/scanner/partial_parser.dart
+++ b/lib/compiler/implementation/scanner/partial_parser.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.
+part of scanner;
+
class PartialParser extends Parser {
PartialParser(Listener listener) : super(listener);
diff --git a/lib/compiler/implementation/scanner/scanner.dart b/lib/compiler/implementation/scanner/scanner.dart
index 7c51c03..647880b 100644
--- a/lib/compiler/implementation/scanner/scanner.dart
+++ b/lib/compiler/implementation/scanner/scanner.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.
+part of scanner;
+
abstract class Scanner {
Token tokenize();
}
@@ -256,7 +258,7 @@
}
// TODO(ahe): Would a range check be faster?
- if (identical(next, $1) || identical(next, $2) || identical(next, $3)
+ if (identical(next, $1) || identical(next, $2) || identical(next, $3)
|| identical(next, $4) || identical(next, $5) || identical(next, $6)
|| identical(next, $7) || identical(next, $8) || identical(next, $9)) {
return tokenizeNumber(next);
diff --git a/lib/compiler/implementation/scanner/scanner_implementation.dart b/lib/compiler/implementation/scanner/scanner_implementation.dart
index 5bc43e7..1bd8327 100644
--- a/lib/compiler/implementation/scanner/scanner_implementation.dart
+++ b/lib/compiler/implementation/scanner/scanner_implementation.dart
@@ -2,8 +2,10 @@
// 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('scanner_implementation');
-#import('scannerlib.dart');
-#import('../util/util.dart');
-#import('../util/characters.dart');
-#source('array_based_scanner.dart');
+library scanner_implementation;
+
+import 'scannerlib.dart';
+import '../util/util.dart';
+import '../util/characters.dart';
+
+part 'array_based_scanner.dart';
diff --git a/lib/compiler/implementation/scanner/scanner_task.dart b/lib/compiler/implementation/scanner/scanner_task.dart
index 171a145..63b9381 100644
--- a/lib/compiler/implementation/scanner/scanner_task.dart
+++ b/lib/compiler/implementation/scanner/scanner_task.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.
+part of scanner;
+
class ScannerTask extends CompilerTask {
ScannerTask(Compiler compiler) : super(compiler);
String get name => 'Scanner';
diff --git a/lib/compiler/implementation/scanner/string_scanner.dart b/lib/compiler/implementation/scanner/string_scanner.dart
index 51851e2..23f7c4bc 100644
--- a/lib/compiler/implementation/scanner/string_scanner.dart
+++ b/lib/compiler/implementation/scanner/string_scanner.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.
+part of scanner;
+
/**
* Scanner that reads from a String and creates tokens that points to
* substrings.
@@ -38,11 +40,18 @@
final String internalString;
final int begin;
final int end;
+ int cashedHash = 0;
+ String cachedSubString;
- const SubstringWrapper(String this.internalString,
- int this.begin, int this.end);
+ SubstringWrapper(String this.internalString,
+ int this.begin, int this.end);
- int hashCode() => slowToString().hashCode();
+ int get hashCode {
+ if (0 == cashedHash) {
+ cashedHash = slowToString().hashCode;
+ }
+ return cashedHash;
+ }
bool operator ==(other) {
return other is SourceString && slowToString() == other.slowToString();
@@ -52,7 +61,12 @@
sb.add(internalString.substring(begin, end));
}
- String slowToString() => internalString.substring(begin, end);
+ String slowToString() {
+ if (cachedSubString == null) {
+ cachedSubString = internalString.substring(begin, end);
+ }
+ return cachedSubString;
+ }
String toString() => "SubstringWrapper(${slowToString()})";
@@ -69,7 +83,7 @@
begin + initial, end - terminal);
}
- bool isEmpty() => begin == end;
+ bool get isEmpty => begin == end;
- bool isPrivate() => !isEmpty() && identical(internalString.charCodeAt(begin), $_);
+ bool isPrivate() => !isEmpty && identical(internalString.charCodeAt(begin), $_);
}
diff --git a/lib/compiler/implementation/scanner/token.dart b/lib/compiler/implementation/scanner/token.dart
index 99055fe..9012021 100644
--- a/lib/compiler/implementation/scanner/token.dart
+++ b/lib/compiler/implementation/scanner/token.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.
+part of scanner;
+
const int EOF_TOKEN = 0;
const int KEYWORD_TOKEN = $k;
@@ -190,7 +192,7 @@
String slowToString();
- bool isEmpty();
+ bool get isEmpty;
bool isPrivate();
}
@@ -200,7 +202,7 @@
const StringWrapper(String this.stringValue);
- int hashCode() => stringValue.hashCode();
+ int get hashCode => stringValue.hashCode;
bool operator ==(other) {
return other is SourceString && toString() == other.slowToString();
@@ -224,9 +226,9 @@
stringValue.substring(initial, stringValue.length - terminal));
}
- bool isEmpty() => stringValue.isEmpty();
+ bool get isEmpty => stringValue.isEmpty;
- bool isPrivate() => !isEmpty() && identical(stringValue.charCodeAt(0), $_);
+ bool isPrivate() => !isEmpty && identical(stringValue.charCodeAt(0), $_);
}
class StringCodeIterator implements Iterator<int> {
@@ -243,7 +245,7 @@
assert(end <= string.length);
}
- bool hasNext() => index < end;
+ bool get hasNext => index < end;
int next() => string.charCodeAt(index++);
}
diff --git a/lib/compiler/implementation/script.dart b/lib/compiler/implementation/script.dart
index 79dc7d7..8383686 100644
--- a/lib/compiler/implementation/script.dart
+++ b/lib/compiler/implementation/script.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.
+part of dart2js;
+
class Script {
// TODO(kasperl): Once MockFile in tests/compiler/dart2js/parser_helper.dart
// implements SourceFile, we should be able to type the [file] field as
diff --git a/lib/compiler/implementation/source_file.dart b/lib/compiler/implementation/source_file.dart
index c32225b..d517e76 100644
--- a/lib/compiler/implementation/source_file.dart
+++ b/lib/compiler/implementation/source_file.dart
@@ -40,7 +40,7 @@
int getLine(int position) {
List<int> starts = lineStarts;
- if (position < 0 || starts.last() <= position) {
+ if (position < 0 || starts.last <= position) {
throw 'bad position #$position in file $filename with '
'length ${text.length}.';
}
diff --git a/lib/compiler/implementation/ssa/bailout.dart b/lib/compiler/implementation/ssa/bailout.dart
index af15533..bd6223f 100644
--- a/lib/compiler/implementation/ssa/bailout.dart
+++ b/lib/compiler/implementation/ssa/bailout.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.
+part of ssa;
+
class BailoutInfo {
int instructionId;
int bailoutId;
@@ -59,7 +61,7 @@
loopMarkers.addAll(other.loopMarkers);
}
- bool isEmpty() => lives.isEmpty() && loopMarkers.isEmpty();
+ bool get isEmpty => lives.isEmpty && loopMarkers.isEmpty;
}
@@ -263,7 +265,7 @@
void visitGraph(HGraph graph) {
visitPostDominatorTree(graph);
- if (!liveInstructions[graph.entry].isEmpty()) {
+ if (!liveInstructions[graph.entry].isEmpty) {
compiler.internalError('Bailout environment computation',
node: compiler.currentElement.parseNode(compiler));
}
@@ -417,7 +419,7 @@
void visitGraph(HGraph graph) {
subGraph = new SubGraph(graph.entry, graph.exit);
visitBasicBlock(graph.entry);
- if (!blocks.isEmpty()) {
+ if (!blocks.isEmpty) {
compiler.internalError('Bailout propagation',
node: compiler.currentElement.parseNode(compiler));
}
@@ -430,7 +432,7 @@
if (block.isLoopHeader()) {
blocks.addLast(block);
} else if (block.isLabeledBlock()
- && (blocks.isEmpty() || !identical(blocks.last(), block))) {
+ && (blocks.isEmpty || !identical(blocks.last, block))) {
HLabeledBlockInformation info = block.blockFlow.body;
visitStatements(info.body);
return;
@@ -530,7 +532,7 @@
if (inputLength > maxBailoutParameters) {
maxBailoutParameters = inputLength;
}
- if (blocks.isEmpty()) {
+ if (blocks.isEmpty) {
if (firstBailoutTarget == null) {
firstBailoutTarget = target;
} else {
diff --git a/lib/compiler/implementation/ssa/builder.dart b/lib/compiler/implementation/ssa/builder.dart
index d48f76e..1ef011b 100644
--- a/lib/compiler/implementation/ssa/builder.dart
+++ b/lib/compiler/implementation/ssa/builder.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.
+part of ssa;
+
class Interceptors {
Compiler compiler;
Interceptors(Compiler this.compiler);
@@ -948,7 +950,7 @@
SendSet node = variable.parseNode(compiler);
openFunction(variable, node);
Link<Node> link = node.arguments;
- assert(!link.isEmpty() && link.tail.isEmpty());
+ assert(!link.isEmpty && link.tail.isEmpty);
visit(link.head);
HInstruction value = pop();
value = potentiallyCheckType(value, variable);
@@ -970,12 +972,12 @@
// If we know the body doesn't have any code, we don't generate it.
if (node.body.asBlock() != null) {
NodeList statements = node.body.asBlock().statements;
- if (statements.isEmpty()) return null;
+ if (statements.isEmpty) return null;
}
ClassElement classElement = constructor.getEnclosingClass();
ConstructorBodyElement bodyElement;
for (Link<Element> backendMembers = classElement.backendMembers;
- !backendMembers.isEmpty();
+ !backendMembers.isEmpty;
backendMembers = backendMembers.tail) {
Element backendMember = backendMembers.head;
if (backendMember.isGenerativeConstructorBody()) {
@@ -991,7 +993,8 @@
// [:resolveMethodElement:] require the passed element to be a
// declaration.
TreeElements treeElements =
- compiler.resolver.resolveMethodElement(constructor.declaration);
+ compiler.enqueuer.resolution.getCachedElements(
+ constructor.declaration);
classElement.backendMembers =
classElement.backendMembers.prepend(bodyElement);
@@ -1161,7 +1164,8 @@
// Build the initializers in the context of the new constructor.
TreeElements oldElements = elements;
- elements = compiler.resolver.resolveMethodElement(constructor);
+ elements =
+ compiler.enqueuer.resolution.getCachedElements(constructor);
buildInitializers(constructor, constructors, fieldValues);
elements = oldElements;
});
@@ -1187,7 +1191,7 @@
if (functionNode.initializers != null) {
Link<Node> initializers = functionNode.initializers.nodes;
- for (Link<Node> link = initializers; !link.isEmpty(); link = link.tail) {
+ for (Link<Node> link = initializers; !link.isEmpty; link = link.tail) {
assert(link.head is Send);
if (link.head is !SendSet) {
// A super initializer or constructor redirection.
@@ -1204,7 +1208,7 @@
// A field initializer.
SendSet init = link.head;
Link<Node> arguments = init.arguments;
- assert(!arguments.isEmpty() && arguments.tail.isEmpty());
+ assert(!arguments.isEmpty && arguments.tail.isEmpty);
sourceElementStack.add(constructor);
visit(arguments.head);
sourceElementStack.removeLast();
@@ -1545,7 +1549,7 @@
}
void dup() {
- stack.add(stack.last());
+ stack.add(stack.last);
}
HInstruction popBoolified() {
@@ -1573,7 +1577,7 @@
sourceFileLocationForToken(node, node.getEndToken());
SourceFileLocation sourceFileLocationForToken(Node node, Token token) {
- Element element = sourceElementStack.last();
+ Element element = sourceElementStack.last;
// TODO(johnniwinther): remove the 'element.patch' hack.
if (element is FunctionElement) {
FunctionElement functionElement = element;
@@ -1595,17 +1599,17 @@
visitBlock(Block node) {
for (Link<Node> link = node.statements.nodes;
- !link.isEmpty();
+ !link.isEmpty;
link = link.tail) {
visit(link.head);
if (isAborted()) {
// The block has been aborted by a return or a throw.
- if (!stack.isEmpty()) compiler.cancel('non-empty instruction stack');
+ if (!stack.isEmpty) compiler.cancel('non-empty instruction stack');
return;
}
}
assert(!current.isClosed());
- if (!stack.isEmpty()) compiler.cancel('non-empty instruction stack');
+ if (!stack.isEmpty) compiler.cancel('non-empty instruction stack');
}
visitClassNode(ClassNode node) {
@@ -1657,7 +1661,7 @@
branchBlock.addSuccessor(loopExitBlock);
open(loopExitBlock);
localsHandler.endLoop(loopEntry);
- if (!breakLocals.isEmpty()) {
+ if (!breakLocals.isEmpty) {
breakLocals.add(savedLocals);
localsHandler = savedLocals.mergeMultiple(breakLocals, loopExitBlock);
} else {
@@ -1751,7 +1755,7 @@
HLabeledBlockInformation labelInfo;
List<LabelElement> labels = jumpHandler.labels();
TargetElement target = elements[loop];
- if (!labels.isEmpty()) {
+ if (!labels.isEmpty) {
beginBodyBlock.setBlockFlow(
new HLabeledBlockInformation(
new HSubGraphBlockInformation(bodyGraph),
@@ -1873,7 +1877,7 @@
continueLocals.add(locals);
});
bodyExitBlock.addSuccessor(conditionBlock);
- if (!continueLocals.isEmpty()) {
+ if (!continueLocals.isEmpty) {
continueLocals.add(localsHandler);
localsHandler = savedLocals.mergeMultiple(continueLocals, conditionBlock);
SubGraph bodyGraph = new SubGraph(bodyEntryBlock, bodyExitBlock);
@@ -1881,7 +1885,7 @@
HSubGraphBlockInformation bodyInfo =
new HSubGraphBlockInformation(bodyGraph);
HLabeledBlockInformation info;
- if (!labels.isEmpty()) {
+ if (!labels.isEmpty) {
info = new HLabeledBlockInformation(bodyInfo, labels, isContinue: true);
} else {
info = new HLabeledBlockInformation.implicit(bodyInfo, target,
@@ -1934,7 +1938,7 @@
compiler.enqueuer.codegen.addToWorkList(callElement, elements);
// TODO(ahe): This should be registered in codegen, not here.
compiler.enqueuer.codegen.registerInstantiatedClass(closureClassElement);
- assert(closureClassElement.localScope.isEmpty());
+ assert(closureClassElement.localScope.isEmpty);
List<HInstruction> capturedVariables = <HInstruction>[];
for (Element member in closureClassElement.backendMembers) {
@@ -2198,7 +2202,7 @@
// An erroneous element indicates an unresolved static getter.
generateThrowNoSuchMethod(send,
getTargetName(element, 'get'),
- const Link<Node>());
+ argumentNodes: const Link<Node>());
} else {
stack.add(localsHandler.readLocal(element));
}
@@ -2247,7 +2251,7 @@
// An erroneous element indicates an unresolved static setter.
generateThrowNoSuchMethod(send,
getTargetName(element, 'set'),
- send.arguments);
+ argumentNodes: send.arguments);
} else {
stack.add(value);
// If the value does not already have a name, give it here.
@@ -2395,7 +2399,7 @@
new Map<SourceString, HInstruction>();
List<SourceString> namedArguments = selector.namedArguments;
int nameIndex = 0;
- for (; !arguments.isEmpty(); arguments = arguments.tail) {
+ for (; !arguments.isEmpty; arguments = arguments.tail) {
visit(arguments.head);
instructions[namedArguments[nameIndex++]] = pop();
}
@@ -2447,7 +2451,7 @@
}
void addGenericSendArgumentsToList(Link<Node> link, List<HInstruction> list) {
- for (; !link.isEmpty(); link = link.tail) {
+ for (; !link.isEmpty; link = link.tail) {
visit(link.head);
list.add(pop());
}
@@ -2459,7 +2463,7 @@
SourceString dartMethodName;
bool isNotEquals = false;
- if (node.isIndex && !node.arguments.tail.isEmpty()) {
+ if (node.isIndex && !node.arguments.tail.isEmpty) {
dartMethodName = Elements.constructOperatorName(
const SourceString('[]='), false);
} else if (node.selector.asOperator() != null) {
@@ -2528,7 +2532,7 @@
// If the invoke is on foreign code, don't visit the first
// argument, which is the type, and the second argument,
// which is the foreign code.
- if (link.isEmpty() || link.tail.isEmpty()) {
+ if (link.isEmpty || link.tail.isEmpty) {
compiler.cancel('At least two arguments expected',
node: node.argumentsNode);
}
@@ -2559,7 +2563,7 @@
void handleForeignUnintercepted(Send node) {
Link<Node> link = node.arguments;
- if (!link.tail.isEmpty()) {
+ if (!link.tail.isEmpty) {
compiler.cancel(
'More than one expression in UNINTERCEPTED()', node: node);
}
@@ -2571,7 +2575,7 @@
void handleForeignJsHasEquals(Send node) {
List<HInstruction> inputs = <HInstruction>[];
- if (!node.arguments.tail.isEmpty()) {
+ if (!node.arguments.tail.isEmpty) {
compiler.cancel(
'More than one expression in JS_HAS_EQUALS()', node: node);
}
@@ -2584,7 +2588,7 @@
}
void handleForeignJsCurrentIsolate(Send node) {
- if (!node.arguments.isEmpty()) {
+ if (!node.arguments.isEmpty) {
compiler.cancel(
'Too many arguments to JS_CURRENT_ISOLATE', node: node);
}
@@ -2635,7 +2639,7 @@
}
void handleForeignDartClosureToJs(Send node) {
- if (node.arguments.isEmpty() || !node.arguments.tail.isEmpty()) {
+ if (node.arguments.isEmpty || !node.arguments.tail.isEmpty) {
compiler.cancel('Exactly one argument required',
node: node.argumentsNode);
}
@@ -2806,7 +2810,7 @@
} else if (type is InterfaceType) {
bool isFirstVariable = true;
InterfaceType interfaceType = type;
- bool hasTypeArguments = !interfaceType.arguments.isEmpty();
+ bool hasTypeArguments = !interfaceType.arguments.isEmpty;
if (!isInQuotes) template.add("'");
template.add(rti.getName(type.element));
if (hasTypeArguments) {
@@ -2853,7 +2857,7 @@
void callSetRuntimeTypeInfo(ClassElement element,
List<HInstruction> rtiInputs,
HInstruction newObject) {
- bool needsRti = compiler.world.needsRti(element) && !rtiInputs.isEmpty();
+ bool needsRti = compiler.world.needsRti(element) && !rtiInputs.isEmpty;
bool runtimeTypeIsUsed = compiler.enabledRuntimeType;
if (!needsRti && !runtimeTypeIsUsed) return;
@@ -2904,7 +2908,7 @@
Element originalElement = elements[node];
if (identical(originalElement.getEnclosingClass(), compiler.listClass)) {
isListConstructor = true;
- if (node.arguments.isEmpty()) {
+ if (node.arguments.isEmpty) {
return HType.EXTENDABLE_ARRAY;
} else {
return HType.MUTABLE_ARRAY;
@@ -2974,7 +2978,9 @@
Selector selector = elements.getSelector(node);
Element element = elements[node];
if (element.isErroneous()) {
- generateThrowNoSuchMethod(node, getTargetName(element), node.arguments);
+ generateThrowNoSuchMethod(node,
+ getTargetName(element),
+ argumentNodes: node.arguments);
return;
}
if (identical(element, compiler.assertMethod) && !compiler.enableUserAssertions) {
@@ -3053,8 +3059,8 @@
void generateThrowNoSuchMethod(Node diagnosticNode,
String methodName,
- [Link<Node> argumentNodes,
- List<HInstruction> argumentValues]) {
+ {Link<Node> argumentNodes,
+ List<HInstruction> argumentValues}) {
Element helper =
compiler.findHelper(const SourceString('throwNoSuchMethod'));
Constant receiverConstant =
@@ -3084,7 +3090,7 @@
if (error.messageKind == MessageKind.CANNOT_FIND_CONSTRUCTOR) {
generateThrowNoSuchMethod(node.send,
getTargetName(error, 'constructor'),
- node.send.arguments);
+ argumentNodes: node.send.arguments);
} else if (error.messageKind == MessageKind.CANNOT_RESOLVE) {
Message message = error.messageKind.message(error.messageArguments);
generateRuntimeError(node.send, message.toString());
@@ -3167,7 +3173,7 @@
} else if (const SourceString("=") == op.source) {
Element element = elements[node];
Link<Node> link = node.arguments;
- assert(!link.isEmpty() && link.tail.isEmpty());
+ assert(!link.isEmpty && link.tail.isEmpty);
visit(link.head);
HInstruction value = pop();
generateSetter(node, element, value);
@@ -3178,7 +3184,7 @@
const SourceString("--") == op.source ||
node.assignmentOperator.source.stringValue.endsWith("="));
Element element = elements[node];
- bool isCompoundAssignment = !node.arguments.isEmpty();
+ bool isCompoundAssignment = !node.arguments.isEmpty;
bool isPrefix = !node.isPostfix; // Compound assignments are prefix.
// [receiver] is only used if the node is an instance send.
@@ -3246,7 +3252,7 @@
}
visitNodeList(NodeList node) {
- for (Link<Node> link = node.nodes; !link.isEmpty(); link = link.tail) {
+ for (Link<Node> link = node.nodes; !link.isEmpty; link = link.tail) {
if (isAborted()) {
compiler.reportWarning(link.head, 'dead code');
} else {
@@ -3291,7 +3297,7 @@
visit(node.expression);
value = pop();
}
- if (!inliningStack.isEmpty()) {
+ if (!inliningStack.isEmpty) {
localsHandler.updateLocal(returnElement, value);
} else {
close(attachPosition(new HReturn(value), node)).addSuccessor(graph.exit);
@@ -3320,7 +3326,7 @@
visitVariableDefinitions(VariableDefinitions node) {
for (Link<Node> link = node.definitions.nodes;
- !link.isEmpty();
+ !link.isEmpty;
link = link.tail) {
Node definition = link.head;
if (definition is Identifier) {
@@ -3344,7 +3350,7 @@
List<HInstruction> inputs = <HInstruction>[];
for (Link<Node> link = node.elements.nodes;
- !link.isEmpty();
+ !link.isEmpty;
link = link.tail) {
visit(link.head);
inputs.add(pop());
@@ -3424,7 +3430,7 @@
visitForIn(ForIn node) {
// Generate a structure equivalent to:
// Iterator<E> $iter = <iterable>.iterator()
- // while ($iter.hasNext()) {
+ // while ($iter.hasNext) {
// E <declaredIdentifier> = $iter.next();
// <body>
// }
@@ -3441,8 +3447,13 @@
}
HInstruction buildCondition() {
SourceString name = const SourceString('hasNext');
- Selector call = new Selector.call(name, work.element.getLibrary(), 0);
- push(new HInvokeDynamicMethod(call, <HInstruction>[iterator]));
+ Selector selector = new Selector.getter(name, work.element.getLibrary());
+ if (interceptors.getStaticGetInterceptor(name) != null) {
+ compiler.internalError("hasNext getter must not be intercepted",
+ node: node);
+ }
+ bool hasGetter = compiler.world.hasAnyUserDefinedGetter(selector);
+ push(new HInvokeDynamicGetter(selector, null, iterator, !hasGetter));
return popBoolified();
}
void buildBody() {
@@ -3462,7 +3473,7 @@
if (variable.isErroneous()) {
generateThrowNoSuchMethod(node,
getTargetName(variable, 'set'),
- <HInstruction>[oldVariable]);
+ argumentValues: <HInstruction>[oldVariable]);
pop();
} else {
localsHandler.updateLocal(variable, oldVariable);
@@ -3535,7 +3546,7 @@
}
List<HInstruction> inputs = <HInstruction>[];
for (Link<Node> link = node.entries.nodes;
- !link.isEmpty();
+ !link.isEmpty;
link = link.tail) {
visit(link.head);
inputs.addLast(pop());
@@ -3562,7 +3573,7 @@
HBasicBlock startBlock = openNewBlock();
visit(node.expression);
HInstruction expression = pop();
- if (node.cases.isEmpty()) {
+ if (node.cases.isEmpty) {
return;
}
@@ -3661,7 +3672,7 @@
HBasicBlock expressionStart = openNewBlock();
visit(node.expression);
HInstruction expression = pop();
- if (node.cases.isEmpty()) {
+ if (node.cases.isEmpty) {
return true;
}
HBasicBlock expressionEnd = current;
@@ -3677,7 +3688,7 @@
Element getFallThroughErrorElement =
compiler.findHelper(const SourceString("getFallThroughError"));
Iterator<Node> caseIterator = node.cases.iterator();
- while (caseIterator.hasNext()) {
+ while (caseIterator.hasNext) {
SwitchCase switchCase = caseIterator.next();
List<Constant> caseConstants = <Constant>[];
HBasicBlock block = graph.addNewBlock();
@@ -3702,7 +3713,7 @@
open(block);
localsHandler = new LocalsHandler.from(savedLocals);
visit(switchCase.statements);
- if (!isAborted() && caseIterator.hasNext()) {
+ if (!isAborted() && caseIterator.hasNext) {
pushInvokeHelper0(getFallThroughErrorElement);
HInstruction error = pop();
close(new HThrow(error));
@@ -3827,14 +3838,14 @@
}
Link<Node> skipLabels(Link<Node> labelsAndCases) {
- while (!labelsAndCases.isEmpty() && labelsAndCases.head is Label) {
+ while (!labelsAndCases.isEmpty && labelsAndCases.head is Label) {
labelsAndCases = labelsAndCases.tail;
}
return labelsAndCases;
}
Link<Node> labelsAndCases = skipLabels(node.labelsAndCases.nodes);
- if (labelsAndCases.isEmpty()) {
+ if (labelsAndCases.isEmpty) {
// Default case with no expressions.
if (!node.isDefaultCase) {
compiler.internalError("Case with no expression and not default",
@@ -3870,7 +3881,7 @@
// If this is the last expression, just return it.
Link<Node> tail = skipLabels(remainingCases.tail);
- if (tail.isEmpty()) {
+ if (tail.isEmpty) {
left();
return;
}
@@ -3885,7 +3896,7 @@
if (node.isDefaultCase) {
// Default case must be last.
- assert(cases.tail.isEmpty());
+ assert(cases.tail.isEmpty);
// Perform the tests until one of them match, but then always execute the
// statements.
// TODO(lrn): Stop performing tests when all expressions are compile-time
@@ -3893,7 +3904,7 @@
handleIf(node, () { buildTests(labelsAndCases); }, (){}, null);
visit(node.statements);
} else {
- if (cases.tail.isEmpty()) {
+ if (cases.tail.isEmpty) {
handleIf(node,
() { buildTests(labelsAndCases); },
() { visit(node.statements); },
@@ -3944,7 +3955,7 @@
SubGraph catchGraph = null;
HParameterValue exception = null;
- if (!node.catchBlocks.isEmpty()) {
+ if (!node.catchBlocks.isEmpty) {
localsHandler = new LocalsHandler.from(savedLocals);
startCatchBlock = graph.addNewBlock();
open(startCatchBlock);
@@ -4009,7 +4020,7 @@
}
void visitElse() {
- if (link.isEmpty()) {
+ if (link.isEmpty) {
close(new HThrow(exception, isRethrow: true));
} else {
CatchBlock newBlock = link.head;
@@ -4444,7 +4455,7 @@
(isAnd ? send.isLogicalAnd : send.isLogicalOr)) {
Node newLeft = send.receiver;
Link<Node> link = send.argumentsNode.nodes;
- assert(link.tail.isEmpty());
+ assert(link.tail.isEmpty);
Node middle = link.head;
handleLogicalAndOrWithLeftNode(
newLeft,
@@ -4486,7 +4497,7 @@
HBasicBlock elseBlock = elseBranch.block;
HBasicBlock joinBlock;
// If at least one branch did not abort, open the joinBranch.
- if (!joinBranch.block.predecessors.isEmpty()) {
+ if (!joinBranch.block.predecessors.isEmpty) {
startBranch(joinBranch);
joinBlock = joinBranch.block;
}
diff --git a/lib/compiler/implementation/ssa/codegen.dart b/lib/compiler/implementation/ssa/codegen.dart
index d8cda34..fdf877a 100644
--- a/lib/compiler/implementation/ssa/codegen.dart
+++ b/lib/compiler/implementation/ssa/codegen.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.
+part of ssa;
+
class SsaCodeGeneratorTask extends CompilerTask {
final JavaScriptBackend backend;
@@ -85,7 +87,7 @@
parameters.add(new js.Parameter(name));
});
addTypeParameters(work.element, parameters, parameterNames);
- String parametersString = Strings.join(parameterNames.getValues(), ", ");
+ String parametersString = Strings.join(parameterNames.values, ", ");
SsaOptimizedCodeGenerator codegen = new SsaOptimizedCodeGenerator(
backend, work, parameters, parameterNames);
codegen.visitGraph(graph);
@@ -319,7 +321,7 @@
* to the [statement].
*/
void pushStatement(js.Statement statement, [HInstruction instruction]) {
- assert(expressionStack.isEmpty());
+ assert(expressionStack.isEmpty);
if (instruction != null) {
attachLocation(statement, instruction);
}
@@ -351,7 +353,7 @@
}
attachLocationToLast(HInstruction instruction) {
- attachLocation(expressionStack.last(), instruction);
+ attachLocation(expressionStack.last, instruction);
}
js.Node attachLocation(js.Node jsNode, HInstruction instruction) {
@@ -405,7 +407,7 @@
subGraph = new SubGraph(graph.entry, graph.exit);
HBasicBlock start = beginGraph(graph);
visitBasicBlock(start);
- if (!delayedVariableDeclarations.isEmpty()) {
+ if (!delayedVariableDeclarations.isEmpty) {
List<js.VariableInitialization> declarations =
<js.VariableInitialization>[];
delayedVariableDeclarations.forEach((String name) {
@@ -460,8 +462,8 @@
// HFieldSet generates code on the form x.y = ..., which isn't
// valid in a declaration, but it also always have no uses, so
// it's caught by that test too.
- assert(current is! HFieldSet || current.usedBy.isEmpty());
- if (current.usedBy.isEmpty()) {
+ assert(current is! HFieldSet || current.usedBy.isEmpty);
+ if (current.usedBy.isEmpty) {
result = TYPE_EXPRESSION;
}
current = current.next;
@@ -559,7 +561,7 @@
visitSubGraph(expressionSubGraph.subExpression);
expressionStack = oldExpressionStack;
isGeneratingExpression = oldIsGeneratingExpression;
- if (sequenceElements.isEmpty()) {
+ if (sequenceElements.isEmpty) {
// Happens when the initializer, condition or update of a loop is empty.
return null;
} else if (sequenceElements.length == 1) {
@@ -687,7 +689,7 @@
visitStatement(HInstruction node) {
assert(!isGeneratingExpression);
visit(node);
- if (!expressionStack.isEmpty()) {
+ if (!expressionStack.isEmpty) {
assert(expressionStack.length == 1);
pushExpressionAsStatement(pop());
}
@@ -1005,7 +1007,7 @@
endLabeledBlock(labeledBlockInfo);
if (labeledBlockInfo.isContinue) {
- while (!continueOverrides.isEmpty()) {
+ while (!continueOverrides.isEmpty) {
continueAction.remove(continueOverrides.head);
continueOverrides = continueOverrides.tail;
}
@@ -1146,8 +1148,8 @@
}
}
- while (!worklist.isEmpty()) {
- while (!ready.isEmpty()) {
+ while (!worklist.isEmpty) {
+ while (!ready.isEmpty) {
String destination = ready.removeLast();
String source = initialValue[destination];
// Since [source] might have been updated, use the current
@@ -1323,7 +1325,7 @@
// one dominated block (since it has only one successor).
// If the successor is dominated by another block, then the other block
// is responsible for visiting the successor.
- if (dominated.isEmpty()) return;
+ if (dominated.isEmpty) return;
if (dominated.length > 2) {
compiler.internalError('dominated.length = ${dominated.length}',
instruction: node);
@@ -1675,7 +1677,7 @@
String code = node.code.slowToString();
List<HInstruction> inputs = node.inputs;
if (node.isJsStatement(types)) {
- if (!inputs.isEmpty()) {
+ if (!inputs.isEmpty) {
compiler.internalError("foreign statement with inputs: $code",
instruction: node);
}
@@ -2693,7 +2695,7 @@
}
String currentLabel() {
- return labels.last();
+ return labels.last;
}
js.VariableUse generateStateUse()
@@ -2822,7 +2824,7 @@
void startBailoutCase(List<HBailoutTarget> bailouts1,
[List<HBailoutTarget> bailouts2 = const []]) {
- if (!defaultClauseUsedInBailoutStack.last() &&
+ if (!defaultClauseUsedInBailoutStack.last &&
bailouts1.length + bailouts2.length >= 2) {
currentContainer = new js.Block.empty();
currentBailoutSwitch.cases.add(new js.Default(currentContainer));
@@ -2831,7 +2833,7 @@
} else {
_handleBailoutCase(bailouts1);
_handleBailoutCase(bailouts2);
- currentContainer = currentBailoutSwitch.cases.last().body;
+ currentContainer = currentBailoutSwitch.cases.last.body;
}
}
diff --git a/lib/compiler/implementation/ssa/codegen_helpers.dart b/lib/compiler/implementation/ssa/codegen_helpers.dart
index 611dcf1..d7c8547 100644
--- a/lib/compiler/implementation/ssa/codegen_helpers.dart
+++ b/lib/compiler/implementation/ssa/codegen_helpers.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.
+part of ssa;
+
/**
* Instead of emitting each SSA instruction with a temporary variable
* mark instructions that can be emitted at their use-site.
@@ -132,7 +134,7 @@
// Pop instructions from expectedInputs until instruction is found.
// Return true if it is found, or false if not.
bool findInInputsAndPopNonMatching(HInstruction instruction) {
- while (!expectedInputs.isEmpty()) {
+ while (!expectedInputs.isEmpty) {
HInstruction nextInput = expectedInputs.removeLast();
assert(!generateAtUseSite.contains(nextInput));
assert(nextInput.usedBy.length == 1);
@@ -162,14 +164,14 @@
if (findInInputsAndPopNonMatching(instruction)) {
tryGenerateAtUseSite(instruction);
} else {
- assert(expectedInputs.isEmpty());
+ assert(expectedInputs.isEmpty);
}
instruction.accept(this);
}
if (block.predecessors.length == 1
&& isBlockSinglePredecessor(block.predecessors[0])) {
- assert(block.phis.isEmpty());
+ assert(block.phis.isEmpty);
tryMergingExpressions(block.predecessors[0]);
} else {
expectedInputs = null;
@@ -276,7 +278,7 @@
// phi(phi1, true|false)
if (end == null) return;
- if (end.phis.isEmpty()) return;
+ if (end.phis.isEmpty) return;
if (!identical(end.phis.first, end.phis.last)) return;
HBasicBlock elseBlock = startIf.elseBlock;
@@ -308,7 +310,7 @@
if (otherJoin.first != otherJoin.last) return;
if (otherJoin.successors.length != 1) return;
if (otherJoin.successors[0] != end) return;
- if (otherJoin.phis.isEmpty()) return;
+ if (otherJoin.phis.isEmpty) return;
if (!identical(otherJoin.phis.first, otherJoin.phis.last)) return;
HPhi otherPhi = otherJoin.phis.first;
if (thenInput != otherPhi) return;
diff --git a/lib/compiler/implementation/ssa/js_names.dart b/lib/compiler/implementation/ssa/js_names.dart
index baa468e..4a4ae60 100644
--- a/lib/compiler/implementation/ssa/js_names.dart
+++ b/lib/compiler/implementation/ssa/js_names.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.
+part of ssa;
+
class JsNames {
static const javaScriptKeywords = const <String>[
// These are current keywords
diff --git a/lib/compiler/implementation/ssa/nodes.dart b/lib/compiler/implementation/ssa/nodes.dart
index 1dcd138..78e8e74 100644
--- a/lib/compiler/implementation/ssa/nodes.dart
+++ b/lib/compiler/implementation/ssa/nodes.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.
+part of ssa;
+
abstract class HVisitor<R> {
R visitAdd(HAdd node);
R visitBailoutTarget(HBailoutTarget node);
@@ -365,13 +367,13 @@
HInstruction first = null;
HInstruction last = null;
- bool isEmpty() {
+ bool get isEmpty {
return first == null;
}
void addAfter(HInstruction cursor, HInstruction instruction) {
if (cursor == null) {
- assert(isEmpty());
+ assert(isEmpty);
first = last = instruction;
} else if (identical(cursor, last)) {
last.next = instruction;
@@ -387,7 +389,7 @@
void addBefore(HInstruction cursor, HInstruction instruction) {
if (cursor == null) {
- assert(isEmpty());
+ assert(isEmpty);
first = last = instruction;
} else if (identical(cursor, first)) {
first.previous = instruction;
@@ -419,7 +421,7 @@
}
void remove(HInstruction instruction) {
- assert(instruction.usedBy.isEmpty());
+ assert(instruction.usedBy.isEmpty);
detach(instruction);
}
@@ -465,7 +467,7 @@
dominatedBlocks = <HBasicBlock>[],
bailoutTargets = <HBailoutTarget>[];
- int hashCode() => id;
+ int get hashCode => id;
bool isNew() => status == STATUS_NEW;
bool isOpen() => status == STATUS_OPEN;
@@ -488,7 +490,7 @@
return parentLoopHeader;
}
- bool hasBailoutTargets() => !bailoutTargets.isEmpty();
+ bool hasBailoutTargets() => !bailoutTargets.isEmpty;
void open() {
assert(isNew());
@@ -581,7 +583,7 @@
}
void addSuccessor(HBasicBlock block) {
- if (successors.isEmpty()) {
+ if (successors.isEmpty) {
successors = [block];
} else {
successors.add(block);
@@ -623,7 +625,7 @@
}
}
- if (better.isEmpty()) return rewrite(from, to);
+ if (better.isEmpty) return rewrite(from, to);
L1: for (HInstruction user in from.usedBy) {
for (HCheck check in better) {
@@ -816,7 +818,7 @@
: id = idCounter++,
usedBy = <HInstruction>[];
- int hashCode() => id;
+ int get hashCode => id;
bool getFlag(int position) => (flags & (1 << position)) != 0;
void setFlag(int position) { flags |= (1 << position); }
@@ -985,7 +987,7 @@
void notifyRemovedFromBlock() {
assert(isInBasicBlock());
- assert(usedBy.isEmpty());
+ assert(usedBy.isEmpty);
// Remove [this] from the inputs' uses.
for (int i = 0; i < inputs.length; i++) {
@@ -1765,7 +1767,7 @@
* the expression. If the switch had no default case, this is the
* following join-block.
*/
- HBasicBlock get defaultTarget => block.successors.last();
+ HBasicBlock get defaultTarget => block.successors.last;
accept(HVisitor visitor) => visitor.visitSwitch(this);
@@ -2015,7 +2017,7 @@
HTry() : super(const <HInstruction>[]);
toString() => 'try';
accept(HVisitor visitor) => visitor.visitTry(this);
- HBasicBlock get joinBlock => this.block.successors.last();
+ HBasicBlock get joinBlock => this.block.successors.last;
}
class HIf extends HConditionalBranch {
@@ -2421,7 +2423,7 @@
toString() => 'static ${element.name}';
accept(HVisitor visitor) => visitor.visitStatic(this);
- int gvnHashCode() => super.gvnHashCode() ^ element.hashCode();
+ int gvnHashCode() => super.gvnHashCode() ^ element.hashCode;
int typeCode() => HInstruction.STATIC_TYPECODE;
bool typeEquals(other) => other is HStatic;
bool dataEquals(HStatic other) => element == other.element;
@@ -2806,7 +2808,7 @@
HStatementSequenceInformation(this.statements);
HBasicBlock get start => statements[0].start;
- HBasicBlock get end => statements.last().end;
+ HBasicBlock get end => statements.last.end;
bool accept(HStatementInformationVisitor visitor) =>
visitor.visitSequenceInfo(this);
@@ -2974,8 +2976,8 @@
HBasicBlock get start => expression.start;
HBasicBlock get end {
// We don't create a switch block if there are no cases.
- assert(!statements.isEmpty());
- return statements.last().end;
+ assert(!statements.isEmpty);
+ return statements.last.end;
}
bool accept(HStatementInformationVisitor visitor) =>
diff --git a/lib/compiler/implementation/ssa/optimize.dart b/lib/compiler/implementation/ssa/optimize.dart
index d83f85b..5e2685c 100644
--- a/lib/compiler/implementation/ssa/optimize.dart
+++ b/lib/compiler/implementation/ssa/optimize.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.
+part of ssa;
+
abstract class OptimizationPhase {
String get name;
void visitGraph(HGraph graph);
@@ -81,7 +83,7 @@
// propagated the type array for a call to the List constructor.
new SsaCheckInserter(backend, types, context.boundsChecked)];
runPhases(graph, phases);
- return !work.guards.isEmpty();
+ return !work.guards.isEmpty;
});
}
@@ -739,7 +741,7 @@
bool isDeadCode(HInstruction instruction) {
return !instruction.hasSideEffects(types)
- && instruction.usedBy.isEmpty()
+ && instruction.usedBy.isEmpty
// A dynamic getter that has no side effect can still throw
// a NoSuchMethodError or a NullPointerException.
&& instruction is !HInvokeDynamicGetter
@@ -785,7 +787,7 @@
}
// Process the worklist by propagating liveness to phi inputs.
- while (!worklist.isEmpty()) {
+ while (!worklist.isEmpty) {
HPhi phi = worklist.removeLast();
for (final input in phi.inputs) {
if (input is HPhi && !livePhis.contains(input)) {
@@ -809,7 +811,7 @@
next = current.next;
if (!livePhis.contains(current)
// TODO(ahe): Not sure the following is correct.
- && current.usedBy.isEmpty()) {
+ && current.usedBy.isEmpty) {
block.removePhi(current);
}
current = next;
@@ -829,7 +831,7 @@
block.forEachPhi((HPhi phi) => worklist.add(phi));
}
- while (!worklist.isEmpty()) {
+ while (!worklist.isEmpty) {
HPhi phi = worklist.removeLast();
// If the phi has already been processed, continue.
@@ -972,7 +974,7 @@
// any path from the current block to the dominated block so we
// don't have to do anything either.
assert(block.id < dominated.id);
- if (!successorValues.isEmpty() && block.id + 1 < dominated.id) {
+ if (!successorValues.isEmpty && block.id + 1 < dominated.id) {
visited.clear();
int changesFlags = getChangesFlagsForDominatedBlock(block, dominated);
successorValues.kill(changesFlags);
@@ -1083,7 +1085,7 @@
instructions = instructions.intersection(other);
}
- if (!instructions.isEmpty()) {
+ if (!instructions.isEmpty) {
List<HInstruction> list = instructions.toList();
for (HInstruction instruction in list) {
// Move the instruction to the current block.
@@ -1158,7 +1160,7 @@
HInstruction input,
HType convertedType) {
Set<HInstruction> dominatedUsers = input.dominatedUsers(dominator.first);
- if (dominatedUsers.isEmpty()) return;
+ if (dominatedUsers.isEmpty) return;
HTypeConversion newInput = new HTypeConversion(convertedType, input);
dominator.addBefore(dominator.first, newInput);
@@ -1185,7 +1187,7 @@
}
}
- if (ifUsers.isEmpty() && notIfUsers.isEmpty()) return;
+ if (ifUsers.isEmpty && notIfUsers.isEmpty) return;
for (HIf ifUser in ifUsers) {
changeUsesDominatedBy(ifUser.thenBlock, input, convertedType);
diff --git a/lib/compiler/implementation/ssa/tracer.dart b/lib/compiler/implementation/ssa/tracer.dart
index 4b3520d..b08bfd0 100644
--- a/lib/compiler/implementation/ssa/tracer.dart
+++ b/lib/compiler/implementation/ssa/tracer.dart
@@ -50,7 +50,7 @@
}
void addPredecessors(HBasicBlock block) {
- if (block.predecessors.isEmpty()) {
+ if (block.predecessors.isEmpty) {
printEmptyProperty("predecessors");
} else {
addIndent();
@@ -63,7 +63,7 @@
}
void addSuccessors(HBasicBlock block) {
- if (block.successors.isEmpty()) {
+ if (block.successors.isEmpty) {
printEmptyProperty("successors");
} else {
addIndent();
@@ -446,7 +446,7 @@
buf.add(", ");
}
buf.add("default: B");
- buf.add(node.block.successors.last().id);
+ buf.add(node.block.successors.last.id);
return buf.toString();
}
@@ -472,7 +472,7 @@
}
return "Try: $tryBlock, Catch: $catchBlock, Finally: $finallyBlock, "
- "Join: B${successors.last().id}";
+ "Join: B${successors.last.id}";
}
String visitTypeGuard(HTypeGuard node) {
diff --git a/lib/compiler/implementation/ssa/types.dart b/lib/compiler/implementation/ssa/types.dart
index b5dd364..b8277bf 100644
--- a/lib/compiler/implementation/ssa/types.dart
+++ b/lib/compiler/implementation/ssa/types.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.
+part of ssa;
+
abstract class HType {
const HType();
diff --git a/lib/compiler/implementation/ssa/types_propagation.dart b/lib/compiler/implementation/ssa/types_propagation.dart
index 377f233..e4809c87 100644
--- a/lib/compiler/implementation/ssa/types_propagation.dart
+++ b/lib/compiler/implementation/ssa/types_propagation.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.
+part of ssa;
+
class SsaTypePropagator extends HGraphVisitor implements OptimizationPhase {
final Map<int, HInstruction> workmap;
@@ -98,7 +100,7 @@
void processWorklist() {
do {
- while (!worklist.isEmpty()) {
+ while (!worklist.isEmpty) {
int id = worklist.removeLast();
HInstruction instruction = workmap[id];
assert(instruction != null);
@@ -112,7 +114,7 @@
// replaced operands, so we may need to take another stab at
// emptying the worklist afterwards.
processPendingOptimizations();
- } while (!worklist.isEmpty());
+ } while (!worklist.isEmpty);
}
void addDependentInstructionsToWorkList(HInstruction instruction) {
diff --git a/lib/compiler/implementation/ssa/validate.dart b/lib/compiler/implementation/ssa/validate.dart
index 94bc136..29051a2 100644
--- a/lib/compiler/implementation/ssa/validate.dart
+++ b/lib/compiler/implementation/ssa/validate.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.
+part of ssa;
+
class HValidator extends HInstructionVisitor {
bool isValid = true;
HGraph graph;
@@ -46,14 +48,14 @@
(block.successors.length != 1 || !block.successors[0].isExitBlock())) {
markInvalid("Return node with > 1 succesor or not going to exit-block");
}
- if (block.last is HExit && !block.successors.isEmpty()) {
+ if (block.last is HExit && !block.successors.isEmpty) {
markInvalid("Exit block with successor");
}
- if (block.last is HThrow && !block.successors.isEmpty()) {
+ if (block.last is HThrow && !block.successors.isEmpty) {
markInvalid("Throw block with successor");
}
- if (block.successors.isEmpty() &&
+ if (block.successors.isEmpty &&
block.last is !HThrow &&
!block.isExitBlock()) {
markInvalid("Non-exit or throw block without successor");
diff --git a/lib/compiler/implementation/ssa/value_range_analyzer.dart b/lib/compiler/implementation/ssa/value_range_analyzer.dart
index 0fd49fe..79970b7 100644
--- a/lib/compiler/implementation/ssa/value_range_analyzer.dart
+++ b/lib/compiler/implementation/ssa/value_range_analyzer.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.
+part of ssa;
+
/**
* A [Value] represents both symbolic values like the value of a
* parameter, or the length of an array, and concrete values, like
@@ -20,8 +22,8 @@
if (other == const MinIntValue()) return other;
if (other == const MaxIntValue()) return this;
Value value = this - other;
- if (value.isPositive()) return other;
- if (value.isNegative()) return this;
+ if (value.isPositive) return other;
+ if (value.isNegative) return this;
return const UnknownValue();
}
@@ -30,14 +32,14 @@
if (other == const MinIntValue()) return this;
if (other == const MaxIntValue()) return other;
Value value = this - other;
- if (value.isPositive()) return this;
- if (value.isNegative()) return other;
+ if (value.isPositive) return this;
+ if (value.isNegative) return other;
return const UnknownValue();
}
- bool isNegative() => false;
- bool isPositive() => false;
- bool isZero() => false;
+ bool get isNegative => false;
+ bool get isPositive => false;
+ bool get isZero => false;
}
/**
@@ -48,26 +50,26 @@
const IntValue(this.value);
Value operator +(other) {
- if (other.isZero()) return this;
+ if (other.isZero) return this;
if (other is !IntValue) return other + this;
return new IntValue(value + other.value);
}
Value operator -(other) {
- if (other.isZero()) return this;
+ if (other.isZero) return this;
if (other is !IntValue) return -other + this;
return new IntValue(value - other.value);
}
Value operator -() {
- if (isZero()) return this;
+ if (isZero) return this;
return new IntValue(-value);
}
Value operator &(other) {
if (other is !IntValue) {
- if (isPositive()) return this;
- if (other.isPositive()) return new IntValue(-value);
+ if (isPositive) return this;
+ if (other.isPositive) return new IntValue(-value);
return const UnknownValue();
}
return new IntValue(value & other.value);
@@ -89,9 +91,9 @@
}
String toString() => 'IntValue $value';
- bool isNegative() => value < 0;
- bool isPositive() => value >= 0;
- bool isZero() => value == 0;
+ bool get isNegative => value < 0;
+ bool get isPositive => value >= 0;
+ bool get isZero => value == 0;
}
/**
@@ -104,15 +106,15 @@
Value operator -(Value other) => this;
Value operator -() => const MinIntValue();
Value operator &(Value other) {
- if (other.isPositive()) return other;
- if (other.isNegative()) return const IntValue(0);
+ if (other.isPositive) return other;
+ if (other.isNegative) return const IntValue(0);
return this;
}
Value min(Value other) => other;
Value max(Value other) => this;
String toString() => 'Max';
- bool isNegative() => false;
- bool isPositive() => true;
+ bool get isNegative => false;
+ bool get isPositive => true;
}
/**
@@ -125,14 +127,14 @@
Value operator -(Value other) => this;
Value operator -() => const MaxIntValue();
Value operator &(Value other) {
- if (other.isPositive()) return const IntValue(0);
+ if (other.isPositive) return const IntValue(0);
return this;
}
Value min(Value other) => this;
Value max(Value other) => other;
String toString() => 'Min';
- bool isNegative() => true;
- bool isPositive() => false;
+ bool get isNegative => true;
+ bool get isPositive => false;
}
/**
@@ -147,8 +149,8 @@
Value operator &(Value other) => const UnknownValue();
Value min(Value other) => const UnknownValue();
Value max(Value other) => const UnknownValue();
- bool isNegative() => false;
- bool isPositive() => false;
+ bool get isNegative => false;
+ bool get isPositive => false;
String toString() => 'Unknown';
}
@@ -165,9 +167,9 @@
}
Value operator +(Value other) {
- if (other.isZero()) return this;
+ if (other.isZero) return this;
if (other is IntValue) {
- if (other.isNegative()) {
+ if (other.isNegative) {
return new SubtractValue(this, -other);
}
return new AddValue(this, other);
@@ -179,10 +181,10 @@
}
Value operator -(Value other) {
- if (other.isZero()) return this;
+ if (other.isZero) return this;
if (this == other) return const IntValue(0);
if (other is IntValue) {
- if (other.isNegative()) {
+ if (other.isNegative) {
return new AddValue(this, -other);
}
return new SubtractValue(this, other);
@@ -202,8 +204,8 @@
return this;
}
- bool isNegative() => false;
- bool isPositive() => false;
+ bool get isNegative => false;
+ bool get isPositive => false;
String toString() => 'Instruction: $instruction';
}
@@ -215,7 +217,7 @@
*/
class LengthValue extends InstructionValue {
LengthValue(HInstruction instruction) : super(instruction);
- bool isPositive() => true;
+ bool get isPositive => true;
String toString() => 'Length: $instruction';
}
@@ -246,7 +248,7 @@
Value operator -() => -left - right;
Value operator +(Value other) {
- if (other.isZero()) return this;
+ if (other.isZero) return this;
Value value = left + other;
if (value != const UnknownValue() && value is! BinaryOperationValue) {
return value + right;
@@ -261,7 +263,7 @@
}
Value operator -(Value other) {
- if (other.isZero()) return this;
+ if (other.isZero) return this;
Value value = left - other;
if (value != const UnknownValue() && value is! BinaryOperationValue) {
return value + right;
@@ -275,8 +277,8 @@
return const UnknownValue();
}
- bool isNegative() => left.isNegative() && right.isNegative();
- bool isPositive() => left.isPositive() && right.isPositive();
+ bool get isNegative => left.isNegative && right.isNegative;
+ bool get isPositive => left.isPositive && right.isPositive;
String toString() => '$left + $right';
}
@@ -292,7 +294,7 @@
Value operator -() => right - left;
Value operator +(Value other) {
- if (other.isZero()) return this;
+ if (other.isZero) return this;
Value value = left + other;
if (value != const UnknownValue() && value is! BinaryOperationValue) {
return value - right;
@@ -307,7 +309,7 @@
}
Value operator -(Value other) {
- if (other.isZero()) return this;
+ if (other.isZero) return this;
Value value = left - other;
if (value != const UnknownValue() && value is! BinaryOperationValue) {
return value - right;
@@ -321,8 +323,8 @@
return const UnknownValue();
}
- bool isNegative() => left.isNegative() && right.isPositive();
- bool isPositive() => left.isPositive() && right.isNegative();
+ bool get isNegative => left.isNegative && right.isPositive;
+ bool get isPositive => left.isPositive && right.isNegative;
String toString() => '$left - $right';
}
@@ -336,11 +338,11 @@
}
Value operator +(other) {
- if (other.isZero()) return this;
+ if (other.isZero) return this;
if (other == value) return const IntValue(0);
if (other is NegateValue) return this - other.value;
if (other is IntValue) {
- if (other.isNegative()) {
+ if (other.isNegative) {
return new SubtractValue(this, -other);
}
return new SubtractValue(other, value);
@@ -354,9 +356,9 @@
Value operator &(Value other) => const UnknownValue();
Value operator -(other) {
- if (other.isZero()) return this;
+ if (other.isZero) return this;
if (other is IntValue) {
- if (other.isNegative()) {
+ if (other.isNegative) {
return new SubtractValue(-other, value);
}
return new SubtractValue(this, other);
@@ -370,8 +372,8 @@
Value operator -() => value;
- bool isNegative() => value.isPositive();
- bool isPositive() => value.isNegative();
+ bool get isNegative => value.isPositive;
+ bool get isPositive => value.isNegative;
String toString() => '-$value';
}
@@ -430,13 +432,13 @@
}
Range operator &(Range other) {
- if (isSingleValue()
- && other.isSingleValue()
+ if (isSingleValue
+ && other.isSingleValue
&& lower is IntValue
&& other.lower is IntValue) {
return new Range(lower & other.lower, upper & other.upper);
}
- if (isPositive() && other.isPositive()) {
+ if (isPositive && other.isPositive) {
Value up = upper.min(other.upper);
if (up == const UnknownValue()) {
// If we could not find a trivial bound, just try to use the
@@ -447,9 +449,9 @@
if (up is! IntValue && upper != other.upper) up = const MaxIntValue();
}
return new Range(const IntValue(0), up);
- } else if (isPositive()) {
+ } else if (isPositive) {
return new Range(const IntValue(0), upper);
- } else if (other.isPositive()) {
+ } else if (other.isPositive) {
return new Range(const IntValue(0), other.upper);
} else {
return const Range.unbound();
@@ -477,9 +479,9 @@
return lower.max(other.upper) == lower;
}
- bool isNegative() => upper.isNegative();
- bool isPositive() => lower.isPositive();
- bool isSingleValue() => lower == upper;
+ bool get isNegative => upper.isNegative;
+ bool get isPositive => lower.isPositive;
+ bool get isSingleValue => lower == upper;
String toString() => '[$lower, $upper]';
}
@@ -609,21 +611,21 @@
belowLength = belowLength
|| (indexRange.upper != lengthRange.lower
&& indexRange.upper.min(lengthRange.lower) == indexRange.upper);
- if (indexRange.isPositive() && belowLength) {
+ if (indexRange.isPositive && belowLength) {
check.block.rewrite(check, check.index);
check.block.remove(check);
- } else if (indexRange.isNegative() || lengthRange < indexRange) {
+ } else if (indexRange.isNegative || lengthRange < indexRange) {
check.staticChecks = HBoundsCheck.ALWAYS_FALSE;
// The check is always false, and whatever instruction it
// dominates is dead code.
return indexRange;
- } else if (indexRange.isPositive()) {
+ } else if (indexRange.isPositive) {
check.staticChecks = HBoundsCheck.ALWAYS_ABOVE_ZERO;
} else if (belowLength) {
check.staticChecks = HBoundsCheck.ALWAYS_BELOW_LENGTH;
}
- if (indexRange.isPositive()) {
+ if (indexRange.isPositive) {
// If the test passes, we know the lower bound of the length is
// greater or equal than the lower bound of the index.
Value low = lengthRange.lower.max(indexRange.lower);
@@ -653,7 +655,7 @@
HInstruction left = relational.left;
if (!left.isInteger(types)) return const Range.unbound();
if (!right.isInteger(types)) return const Range.unbound();
- Operation operation = relational.operation(constantSystem);
+ BinaryOperation operation = relational.operation(constantSystem);
Range rightRange = ranges[relational.right];
Range leftRange = ranges[relational.left];
@@ -674,7 +676,7 @@
void handleEqualityCheck(HRelational node) {
Range right = ranges[node.right];
Range left = ranges[node.left];
- if (left.isSingleValue() && right.isSingleValue() && left == right) {
+ if (left.isSingleValue && right.isSingleValue && left == right) {
node.block.rewrite(
node, graph.addConstantBool(true, constantSystem));
node.block.remove(node);
@@ -705,9 +707,9 @@
Range tryComputeRange(HInstruction instruction) {
Range range = ranges[instruction];
- if (range.isPositive()) {
+ if (range.isPositive) {
return new Range(const IntValue(0), range.upper);
- } else if (range.isNegative()) {
+ } else if (range.isNegative) {
return new Range(range.lower, const IntValue(0));
}
return const Range.unbound();
@@ -742,7 +744,7 @@
return newInstruction;
}
- static Operation reverseOperation(BinaryOperation operation) {
+ static BinaryOperation reverseOperation(BinaryOperation operation) {
if (operation == const LessOperation()) {
return const GreaterEqualOperation();
} else if (operation == const LessEqualOperation()) {
@@ -855,9 +857,9 @@
Range range = getRangeForRecognizableOperation(operation);
if (range == null) return const Range.unbound();
Range initial = ranges[loopPhi.inputs[0]];
- if (range.isPositive()) {
+ if (range.isPositive) {
return new Range(initial.lower, const MaxIntValue());
- } else if (range.isNegative()) {
+ } else if (range.isNegative) {
return new Range(const MinIntValue(), initial.upper);
}
return const Range.unbound();
@@ -867,9 +869,9 @@
Range range = getRangeForRecognizableOperation(operation);
if (range == null) return const Range.unbound();
Range initial = ranges[loopPhi.inputs[0]];
- if (range.isPositive()) {
+ if (range.isPositive) {
return new Range(const MinIntValue(), initial.upper);
- } else if (range.isNegative()) {
+ } else if (range.isNegative) {
return new Range(initial.lower, const MaxIntValue());
}
return const Range.unbound();
diff --git a/lib/compiler/implementation/ssa/value_set.dart b/lib/compiler/implementation/ssa/value_set.dart
index bb50d61..b68e688 100644
--- a/lib/compiler/implementation/ssa/value_set.dart
+++ b/lib/compiler/implementation/ssa/value_set.dart
@@ -2,13 +2,15 @@
// 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 ssa;
+
class ValueSet {
int size = 0;
List<HInstruction> table;
ValueSetNode collisions;
ValueSet() : table = new List<HInstruction>(8);
- bool isEmpty() => size == 0;
+ bool get isEmpty => size == 0;
int get length => size;
void add(HInstruction instruction) {
@@ -38,7 +40,7 @@
if (probe != null && probe.gvnEquals(instruction)) return probe;
// Look in the collisions list.
for (ValueSetNode node = collisions; node != null; node = node.next) {
- if (node.hashCode() == hashCode) {
+ if (node.hashCode == hashCode) {
HInstruction cached = node.value;
if (cached.gvnEquals(instruction)) return cached;
}
@@ -149,7 +151,7 @@
class ValueSetNode {
final HInstruction value;
final int hash;
- int hashCode() => hash;
+ int get hashCode => hash;
ValueSetNode next;
ValueSetNode(this.value, this.hash, this.next);
}
diff --git a/lib/compiler/implementation/ssa/variable_allocator.dart b/lib/compiler/implementation/ssa/variable_allocator.dart
index 8844a8c..50f308c 100644
--- a/lib/compiler/implementation/ssa/variable_allocator.dart
+++ b/lib/compiler/implementation/ssa/variable_allocator.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.
+part of ssa;
+
/**
* The [LiveRange] class covers a range where an instruction is live.
*/
@@ -180,7 +182,7 @@
loopMarkers.remove(header);
}
- bool isEmpty() => liveInstructions.isEmpty() && loopMarkers.isEmpty();
+ bool get isEmpty => liveInstructions.isEmpty && loopMarkers.isEmpty;
bool contains(HInstruction instruction) =>
liveInstructions.containsKey(instruction);
String toString() => liveInstructions.toString();
@@ -219,7 +221,7 @@
void visitGraph(HGraph graph) {
visitPostDominatorTree(graph);
- if (!liveInstructions[graph.entry].isEmpty()) {
+ if (!liveInstructions[graph.entry].isEmpty) {
compiler.internalError('LiveIntervalBuilder',
node: compiler.currentElement.parseNode(compiler));
}
@@ -358,7 +360,7 @@
}
String toString() => 'Copies: $copies, assignments: $assignments';
- bool isEmpty() => copies.isEmpty() && assignments.isEmpty();
+ bool get isEmpty => copies.isEmpty && assignments.isEmpty;
}
/**
@@ -389,7 +391,7 @@
/** Returns a fresh variable with the given prefix. */
static String computeFreshWithPrefix(String prefix,
Map<Element, String> parameterNames) {
- Set<String> parameters = new Set<String>.from(parameterNames.getValues());
+ Set<String> parameters = new Set<String>.from(parameterNames.values);
String name = '${prefix}0';
int i = 1;
while (parameters.contains(name)) name = '$prefix${i++}';
@@ -458,7 +460,7 @@
}
String allocateTemporary() {
- while (!freeTemporaryNames.isEmpty()) {
+ while (!freeTemporaryNames.isEmpty) {
String name = freeTemporaryNames.removeLast();
if (!usedNames.contains(name)) return name;
}
@@ -590,7 +592,7 @@
* have no users or that are generated at use site does not need a name.
*/
bool needsName(HInstruction instruction) {
- if (instruction.usedBy.isEmpty()) return false;
+ if (instruction.usedBy.isEmpty) return false;
// TODO(ngeoffray): locals/parameters are being generated at use site,
// but we need a name for them. We should probably not make
// them generate at use site to make things simpler.
diff --git a/lib/compiler/implementation/string_validator.dart b/lib/compiler/implementation/string_validator.dart
index 2951f56..a5f15e2 100644
--- a/lib/compiler/implementation/string_validator.dart
+++ b/lib/compiler/implementation/string_validator.dart
@@ -53,24 +53,24 @@
raw = true;
quoteChar = source.next();
}
- assert(identical(quoteChar, $SQ) || identical(quoteChar, $DQ));
+ assert(quoteChar == $SQ || quoteChar == $DQ);
// String has at least one quote. Check it if has three.
// If it only have two, the string must be an empty string literal,
// and end after the second quote.
bool multiline = false;
- if (source.hasNext() && identical(source.next(), quoteChar) && source.hasNext()) {
+ if (source.hasNext && source.next() == quoteChar && source.hasNext) {
int code = source.next();
- assert(identical(code, quoteChar)); // If not, there is a bug in the parser.
+ assert(code == quoteChar); // If not, there is a bug in the parser.
quoteLength = 3;
// Check if a multiline string starts with a newline (CR, LF or CR+LF).
- if (source.hasNext()) {
+ if (source.hasNext) {
code = source.next();
- if (identical(code, $CR)) {
+ if (code == $CR) {
quoteLength += 1;
- if (source.hasNext() && identical(source.next(), $LF)) {
+ if (source.hasNext && source.next() == $LF) {
quoteLength += 1;
}
- } else if (identical(code, $LF)) {
+ } else if (code == $LF) {
quoteLength += 1;
}
}
@@ -96,21 +96,21 @@
int length = 0;
int index = startOffset;
bool containsEscape = false;
- for(Iterator<int> iter = string.iterator(); iter.hasNext(); length++) {
+ for(Iterator<int> iter = string.iterator(); iter.hasNext; length++) {
index++;
int code = iter.next();
- if (identical(code, $BACKSLASH)) {
+ if (code == $BACKSLASH) {
if (quoting.raw) continue;
containsEscape = true;
- if (!iter.hasNext()) {
+ if (!iter.hasNext) {
stringParseError("Incomplete escape sequence",token, index);
return null;
}
index++;
code = iter.next();
- if (identical(code, $x)) {
+ if (code == $x) {
for (int i = 0; i < 2; i++) {
- if (!iter.hasNext()) {
+ if (!iter.hasNext) {
stringParseError("Incomplete escape sequence", token, index);
return null;
}
@@ -124,7 +124,7 @@
}
// A two-byte hex escape can't generate an invalid value.
continue;
- } else if (identical(code, $u)) {
+ } else if (code == $u) {
int escapeStart = index - 1;
index++;
code = iter.next();
diff --git a/lib/compiler/implementation/tools/mini_parser.dart b/lib/compiler/implementation/tools/mini_parser.dart
index 492b815..356e6f0 100644
--- a/lib/compiler/implementation/tools/mini_parser.dart
+++ b/lib/compiler/implementation/tools/mini_parser.dart
@@ -38,7 +38,7 @@
void printStats() {
int kb = (charCount / 1024).round().toInt();
String stats =
- '$classCount classes (${kb}Kb) in ${stopwatch.elapsedInMs()}ms';
+ '$classCount classes (${kb}Kb) in ${stopwatch.elapsedMilliseconds}ms';
if (errorCount != 0) {
stats = '$stats with $errorCount errors';
}
@@ -114,7 +114,7 @@
}
if (options.buildAst) {
MyNodeListener l = listener;
- if (!l.nodes.isEmpty()) {
+ if (!l.nodes.isEmpty) {
String message = 'Stack not empty after parsing';
print(formatError(message, l.nodes.head.getBeginToken(),
l.nodes.head.getEndToken(), file));
diff --git a/lib/compiler/implementation/tree/dartstring.dart b/lib/compiler/implementation/tree/dartstring.dart
index 0d7f70c..ac50e27 100644
--- a/lib/compiler/implementation/tree/dartstring.dart
+++ b/lib/compiler/implementation/tree/dartstring.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.
+part of tree;
+
/**
* The [DartString] type represents a Dart string value as a sequence of Unicode
* Scalar Values.
@@ -19,13 +21,13 @@
factory DartString.escapedString(SourceString source, int length) =>
new EscapedSourceDartString(source, length);
factory DartString.concat(DartString first, DartString second) {
- if (first.isEmpty()) return second;
- if (second.isEmpty()) return first;
+ if (first.isEmpty) return second;
+ if (second.isEmpty) return first;
return new ConsDartString(first, second);
}
const DartString();
abstract int get length;
- bool isEmpty() => length == 0;
+ bool get isEmpty => length == 0;
abstract Iterator<int> iterator();
abstract String slowToString();
@@ -35,7 +37,7 @@
if (length != otherString.length) return false;
Iterator it1 = iterator();
Iterator it2 = otherString.iterator();
- while (it1.hasNext()) {
+ while (it1.hasNext) {
if (it1.next() != it2.next()) return false;
}
return true;
@@ -96,7 +98,7 @@
if (toStringCache != null) return toStringCache;
StringBuffer buffer = new StringBuffer();
StringEscapeIterator it = new StringEscapeIterator(source);
- while (it.hasNext()) {
+ while (it.hasNext) {
buffer.addCharCode(it.next());
}
toStringCache = buffer.toString();
@@ -134,18 +136,18 @@
ConsDartStringIterator(ConsDartString cons)
: current = cons.left.iterator(),
right = cons.right {
- hasNextLookAhead = current.hasNext();
+ hasNextLookAhead = current.hasNext;
if (!hasNextLookAhead) {
nextPart();
}
}
- bool hasNext() {
+ bool get hasNext {
return hasNextLookAhead;
}
int next() {
assert(hasNextLookAhead);
int result = current.next();
- hasNextLookAhead = current.hasNext();
+ hasNextLookAhead = current.hasNext;
if (!hasNextLookAhead) {
nextPart();
}
@@ -155,7 +157,7 @@
if (right != null) {
current = right.iterator();
right = null;
- hasNextLookAhead = current.hasNext();
+ hasNextLookAhead = current.hasNext;
}
}
}
@@ -166,7 +168,7 @@
class StringEscapeIterator implements Iterator<int>{
final Iterator<int> source;
StringEscapeIterator(SourceString source) : this.source = source.iterator();
- bool hasNext() => source.hasNext();
+ bool get hasNext => source.hasNext;
int next() {
int code = source.next();
if (!identical(code, $BACKSLASH)) {
diff --git a/lib/compiler/implementation/tree/nodes.dart b/lib/compiler/implementation/tree/nodes.dart
index 0024c59..3c261ec 100644
--- a/lib/compiler/implementation/tree/nodes.dart
+++ b/lib/compiler/implementation/tree/nodes.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.
+part of tree;
+
abstract class Visitor<R> {
const Visitor();
@@ -108,13 +110,11 @@
* token stream. These references are stored in fields ending with
* "Token".
*/
-abstract class Node implements Spannable {
- final int _hashCode;
+abstract class Node extends TreeElementMixin implements Spannable {
+ final int hashCode;
static int _HASH_COUNTER = 0;
- Node() : _hashCode = ++_HASH_COUNTER;
-
- hashCode() => _hashCode;
+ Node() : hashCode = ++_HASH_COUNTER;
abstract accept(Visitor visitor);
@@ -434,7 +434,7 @@
final Token beginToken;
final Token endToken;
final SourceString delimiter;
- bool isEmpty() => nodes.isEmpty();
+ bool get isEmpty => nodes.isEmpty;
NodeList([this.beginToken, this.nodes, this.endToken, this.delimiter]);
@@ -447,7 +447,7 @@
int length() {
int result = 0;
- for (Link<Node> cursor = nodes; !cursor.isEmpty(); cursor = cursor.tail) {
+ for (Link<Node> cursor = nodes; !cursor.isEmpty; cursor = cursor.tail) {
result++;
}
return result;
@@ -457,7 +457,7 @@
visitChildren(Visitor visitor) {
if (nodes == null) return;
- for (Link<Node> link = nodes; !link.isEmpty(); link = link.tail) {
+ for (Link<Node> link = nodes; !link.isEmpty; link = link.tail) {
if (link.head != null) link.head.accept(visitor);
}
}
@@ -465,7 +465,7 @@
Token getBeginToken() {
if (beginToken != null) return beginToken;
if (nodes != null) {
- for (Link<Node> link = nodes; !link.isEmpty(); link = link.tail) {
+ for (Link<Node> link = nodes; !link.isEmpty; link = link.tail) {
if (link.head.getBeginToken() != null) {
return link.head.getBeginToken();
}
@@ -481,8 +481,8 @@
if (endToken != null) return endToken;
if (nodes != null) {
Link<Node> link = nodes;
- if (link.isEmpty()) return beginToken;
- while (!link.tail.isEmpty()) link = link.tail;
+ if (link.isEmpty) return beginToken;
+ while (!link.tail.isEmpty) link = link.tail;
if (link.head.getEndToken() != null) return link.head.getEndToken();
if (link.head.getBeginToken() != null) return link.head.getBeginToken();
}
@@ -661,7 +661,7 @@
// TODO(karlklose,ahe): refactor AST nodes (issue 1713).
if (body.asReturn() != null) return true;
NodeList statements = body.asBlock().statements;
- return (!statements.nodes.isEmpty() ||
+ return (!statements.nodes.isEmpty ||
!identical(statements.getBeginToken().kind, $SEMICOLON));
}
@@ -1160,7 +1160,7 @@
static int computeFlags(Link<Node> nodes) {
int flags = 0;
- for (; !nodes.isEmpty(); nodes = nodes.tail) {
+ for (; !nodes.isEmpty; nodes = nodes.tail) {
String value = nodes.head.asIdentifier().source.stringValue;
if (identical(value, 'static')) flags |= FLAG_STATIC;
else if (identical(value, 'abstract')) flags |= FLAG_ABSTRACT;
@@ -1176,7 +1176,7 @@
Node findModifier(String modifier) {
Link<Node> nodeList = nodes.nodes;
- for (; !nodeList.isEmpty(); nodeList = nodeList.tail) {
+ for (; !nodeList.isEmpty; nodeList = nodeList.tail) {
String value = nodeList.head.asIdentifier().source.stringValue;
if(identical(value, modifier)) {
return nodeList.head;
@@ -1494,7 +1494,7 @@
}
Token getEndToken() {
- if (statements.nodes.isEmpty()) {
+ if (statements.nodes.isEmpty) {
// All cases must have at least one expression or be the default.
if (defaultKeyword != null) {
// The colon after 'default'.
@@ -1896,7 +1896,7 @@
Token getEndToken() {
if (finallyBlock != null) return finallyBlock.getEndToken();
- if (!catchBlocks.isEmpty()) return catchBlocks.getEndToken();
+ if (!catchBlocks.isEmpty) return catchBlocks.getEndToken();
return tryBlock.getEndToken();
}
}
@@ -1950,15 +1950,15 @@
accept(Visitor visitor) => visitor.visitCatchBlock(this);
Node get exception {
- if (formals == null || formals.nodes.isEmpty()) return null;
+ if (formals == null || formals.nodes.isEmpty) return null;
VariableDefinitions declarations = formals.nodes.head;
return declarations.definitions.nodes.head;
}
Node get trace {
- if (formals == null || formals.nodes.isEmpty()) return null;
+ if (formals == null || formals.nodes.isEmpty) return null;
Link<Node> declarations = formals.nodes.tail;
- if (declarations.isEmpty()) return null;
+ if (declarations.isEmpty) return null;
VariableDefinitions head = declarations.head;
return head.definitions.nodes.head;
}
diff --git a/lib/compiler/implementation/tree/prettyprint.dart b/lib/compiler/implementation/tree/prettyprint.dart
index 7f4470a..683ab5a 100644
--- a/lib/compiler/implementation/tree/prettyprint.dart
+++ b/lib/compiler/implementation/tree/prettyprint.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.
+part of tree;
+
/**
* Pretty-prints Node tree in XML-like format.
*
@@ -25,7 +27,7 @@
}
String popTag() {
- assert(!tagStack.isEmpty());
+ assert(!tagStack.isEmpty);
String tag = tagStack.head;
tagStack = tagStack.tail;
return tag;
diff --git a/lib/compiler/implementation/tree/tree.dart b/lib/compiler/implementation/tree/tree.dart
index 2e4c5af..3222838 100644
--- a/lib/compiler/implementation/tree/tree.dart
+++ b/lib/compiler/implementation/tree/tree.dart
@@ -2,16 +2,18 @@
// 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('tree');
+library tree;
-#import('dart:math');
+import 'dart:math';
-#import('../scanner/scannerlib.dart');
-#import('../util/util.dart');
-#import('../util/characters.dart');
+import '../scanner/scannerlib.dart';
+import '../util/util.dart';
+import '../util/characters.dart';
-#source('dartstring.dart');
-#source('nodes.dart');
-#source('prettyprint.dart');
-#source('unparser.dart');
-#source('visitors.dart');
+import '../resolution/secret_tree_element.dart' show TreeElementMixin;
+
+part 'dartstring.dart';
+part 'nodes.dart';
+part 'prettyprint.dart';
+part 'unparser.dart';
+part 'visitors.dart';
diff --git a/lib/compiler/implementation/tree/unparser.dart b/lib/compiler/implementation/tree/unparser.dart
index 4bfd890..9eb2794 100644
--- a/lib/compiler/implementation/tree/unparser.dart
+++ b/lib/compiler/implementation/tree/unparser.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.
+part of tree;
+
String unparse(Node node) {
Unparser unparser = new Unparser();
unparser.unparse(node);
@@ -60,7 +62,7 @@
addToken(node.extendsKeyword);
visit(node.superclass);
}
- if (!node.interfaces.isEmpty()) {
+ if (!node.interfaces.isEmpty) {
sb.add(' ');
visit(node.interfaces);
}
@@ -206,7 +208,7 @@
visit(node.typeArguments);
visit(node.elements);
// If list is empty, emit space after [] to disambiguate cases like []==[].
- if (node.elements.isEmpty()) sb.add(' ');
+ if (node.elements.isEmpty) sb.add(' ');
}
visitModifiers(Modifiers node) => node.visitChildren(this);
@@ -215,10 +217,10 @@
* Unparses given NodeList starting from specific node.
*/
unparseNodeListFrom(NodeList node, Link<Node> from) {
- if (from.isEmpty()) return;
+ if (from.isEmpty) return;
String delimiter = (node.delimiter == null) ? "" : "${node.delimiter}";
visit(from.head);
- for (Link link = from.tail; !link.isEmpty(); link = link.tail) {
+ for (Link link = from.tail; !link.isEmpty; link = link.tail) {
sb.add(delimiter);
visit(link.head);
}
diff --git a/lib/compiler/implementation/tree/visitors.dart b/lib/compiler/implementation/tree/visitors.dart
index bab85b0..9096cff 100644
--- a/lib/compiler/implementation/tree/visitors.dart
+++ b/lib/compiler/implementation/tree/visitors.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.
+part of tree;
+
/**
* This visitor takes another visitor and applies it to every
* node in the tree. There is currently no way to control the
diff --git a/lib/compiler/implementation/tree_validator.dart b/lib/compiler/implementation/tree_validator.dart
index bef2891..6a3b93f 100644
--- a/lib/compiler/implementation/tree_validator.dart
+++ b/lib/compiler/implementation/tree_validator.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.
+part of dart2js;
+
class TreeValidatorTask extends CompilerTask {
TreeValidatorTask(Compiler compiler) : super(compiler);
@@ -19,7 +21,7 @@
final validator = new ValidatorVisitor(report);
tree.accept(new TraversingVisitor(validator));
- return errors.isEmpty();
+ return errors.isEmpty;
}
}
@@ -44,12 +46,12 @@
if (identical(name, '++') || identical(name, '--')) {
expect(node, node.assignmentOperator is Operator);
if (node.isIndex) {
- expect(node.arguments.tail.head, node.arguments.tail.isEmpty());
+ expect(node.arguments.tail.head, node.arguments.tail.isEmpty);
} else {
- expect(node.arguments.head, node.arguments.isEmpty());
+ expect(node.arguments.head, node.arguments.isEmpty);
}
} else {
- expect(node, !node.arguments.isEmpty());
+ expect(node, !node.arguments.isEmpty);
}
}
diff --git a/lib/compiler/implementation/typechecker.dart b/lib/compiler/implementation/typechecker.dart
index 33b1dce..81d0e23 100644
--- a/lib/compiler/implementation/typechecker.dart
+++ b/lib/compiler/implementation/typechecker.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.
+part of dart2js;
+
class TypeCheckerTask extends CompilerTask {
TypeCheckerTask(Compiler compiler) : super(compiler);
String get name => "Type checker";
@@ -62,7 +64,7 @@
DartType unalias(Compiler compiler) => this;
- int hashCode() => 17 * element.hashCode();
+ int get hashCode => 17 * element.hashCode;
bool operator ==(other) {
if (other is !TypeVariableType) return false;
@@ -94,7 +96,7 @@
DartType unalias(Compiler compiler) => this;
- int hashCode() => 17 * stringName.hashCode();
+ int get hashCode => 17 * stringName.hashCode;
bool operator ==(other) {
if (other is !StatementType) return false;
@@ -111,7 +113,7 @@
DartType unalias(Compiler compiler) => this;
- int hashCode() => 1729;
+ int get hashCode => 1729;
bool operator ==(other) => other is VoidType;
@@ -132,7 +134,7 @@
String toString() {
StringBuffer sb = new StringBuffer();
sb.add(name.slowToString());
- if (!arguments.isEmpty()) {
+ if (!arguments.isEmpty) {
sb.add('<');
arguments.printOn(sb, ', ');
sb.add('>');
@@ -140,12 +142,12 @@
return sb.toString();
}
- int hashCode() {
- int hash = element.hashCode();
+ int get hashCode {
+ int hash = element.hashCode;
for (Link<DartType> arguments = this.arguments;
- !arguments.isEmpty();
+ !arguments.isEmpty;
arguments = arguments.tail) {
- int argumentHash = arguments.head != null ? arguments.head.hashCode() : 0;
+ int argumentHash = arguments.head != null ? arguments.head.hashCode : 0;
hash = 17 * hash + 3 * argumentHash;
}
return hash;
@@ -194,12 +196,12 @@
parameterTypes = other.parameterTypes;
}
- int hashCode() {
- int hash = 17 * element.hashCode() + 3 * returnType.hashCode();
+ int get hashCode {
+ int hash = 17 * element.hashCode + 3 * returnType.hashCode;
for (Link<DartType> parameters = parameterTypes;
- !parameters.isEmpty();
+ !parameters.isEmpty;
parameters = parameters.tail) {
- hash = 17 * hash + 3 * parameters.head.hashCode();
+ hash = 17 * hash + 3 * parameters.head.hashCode;
}
return hash;
}
@@ -229,7 +231,7 @@
String toString() {
StringBuffer sb = new StringBuffer();
sb.add(name.slowToString());
- if (!typeArguments.isEmpty()) {
+ if (!typeArguments.isEmpty) {
sb.add('<');
typeArguments.printOn(sb, ', ');
sb.add('>');
@@ -237,7 +239,7 @@
return sb.toString();
}
- int hashCode() => 17 * element.hashCode();
+ int get hashCode => 17 * element.hashCode;
bool operator ==(other) {
if (other is !TypedefType) return false;
@@ -281,7 +283,7 @@
ClassElement tc = t.element;
if (identical(tc, s.element)) return true;
for (Link<DartType> supertypes = tc.allSupertypes;
- supertypes != null && !supertypes.isEmpty();
+ supertypes != null && !supertypes.isEmpty;
supertypes = supertypes.tail) {
DartType supertype = supertypes.head;
if (identical(supertype.element, s.element)) return true;
@@ -294,12 +296,12 @@
FunctionType sf = s;
Link<DartType> tps = tf.parameterTypes;
Link<DartType> sps = sf.parameterTypes;
- while (!tps.isEmpty() && !sps.isEmpty()) {
+ while (!tps.isEmpty && !sps.isEmpty) {
if (!isAssignable(tps.head, sps.head)) return false;
tps = tps.tail;
sps = sps.tail;
}
- if (!tps.isEmpty() || !sps.isEmpty()) return false;
+ if (!tps.isEmpty || !sps.isEmpty) return false;
if (!isAssignable(sf.returnType, tf.returnType)) return false;
return true;
} else if (t is TypeVariableType) {
@@ -524,7 +526,7 @@
if (member == null) {
classElement.ensureResolved(compiler);
for (Link<DartType> supertypes = classElement.allSupertypes;
- !supertypes.isEmpty() && member == null;
+ !supertypes.isEmpty && member == null;
supertypes = supertypes.tail) {
ClassElement lookupTarget = supertypes.head.element;
member = lookupTarget.lookupLocalMember(name);
@@ -541,22 +543,22 @@
void analyzeArguments(Send send, DartType type) {
Link<Node> arguments = send.arguments;
if (type == null || identical(type, types.dynamicType)) {
- while(!arguments.isEmpty()) {
+ while(!arguments.isEmpty) {
analyze(arguments.head);
arguments = arguments.tail;
}
} else {
FunctionType funType = type;
Link<DartType> parameterTypes = funType.parameterTypes;
- while (!arguments.isEmpty() && !parameterTypes.isEmpty()) {
+ while (!arguments.isEmpty && !parameterTypes.isEmpty) {
checkAssignable(arguments.head, parameterTypes.head,
analyze(arguments.head));
arguments = arguments.tail;
parameterTypes = parameterTypes.tail;
}
- if (!arguments.isEmpty()) {
+ if (!arguments.isEmpty) {
reportTypeWarning(arguments.head, MessageKind.ADDITIONAL_ARGUMENT);
- } else if (!parameterTypes.isEmpty()) {
+ } else if (!parameterTypes.isEmpty) {
reportTypeWarning(send, MessageKind.MISSING_ARGUMENT,
[parameterTypes.head]);
}
@@ -581,7 +583,7 @@
final Node firstArgument = node.receiver;
final DartType firstArgumentType = analyze(node.receiver);
final arguments = node.arguments;
- final Node secondArgument = arguments.isEmpty() ? null : arguments.head;
+ final Node secondArgument = arguments.isEmpty ? null : arguments.head;
final DartType secondArgumentType =
analyzeWithDefault(secondArgument, null);
@@ -597,7 +599,7 @@
return boolType;
} else if (identical(name, '||') || identical(name, '&&') || identical(name, '!')) {
checkAssignable(firstArgument, boolType, firstArgumentType);
- if (!arguments.isEmpty()) {
+ if (!arguments.isEmpty) {
// TODO(karlklose): check number of arguments in validator.
checkAssignable(secondArgument, boolType, secondArgumentType);
}
@@ -723,7 +725,7 @@
DartType visitNodeList(NodeList node) {
DartType type = StatementType.NOT_RETURNING;
bool reportedDeadCode = false;
- for (Link<Node> link = node.nodes; !link.isEmpty(); link = link.tail) {
+ for (Link<Node> link = node.nodes; !link.isEmpty; link = link.tail) {
DartType nextType = analyze(link.head);
if (type == StatementType.RETURNING) {
if (!reportedDeadCode) {
@@ -808,7 +810,7 @@
reportTypeWarning(node.type, MessageKind.VOID_VARIABLE);
type = types.dynamicType;
}
- for (Link<Node> link = node.definitions.nodes; !link.isEmpty();
+ for (Link<Node> link = node.definitions.nodes; !link.isEmpty;
link = link.tail) {
Node initialization = link.head;
compiler.ensure(initialization is Identifier
@@ -989,4 +991,8 @@
DartType visitStringNode(StringNode node) {
compiler.unimplemented('visitNode', node: node);
}
+
+ DartType visitLibraryDependency(LibraryDependency node) {
+ compiler.unimplemented('visitNode', node: node);
+ }
}
diff --git a/lib/compiler/implementation/types/concrete_types_inferrer.dart b/lib/compiler/implementation/types/concrete_types_inferrer.dart
index 780241d..dd66e61 100644
--- a/lib/compiler/implementation/types/concrete_types_inferrer.dart
+++ b/lib/compiler/implementation/types/concrete_types_inferrer.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.
+part of types;
+
class CancelTypeInferenceException {
final Node node;
final String reason;
@@ -35,7 +37,7 @@
if (other is! ClassBaseType) return false;
return element == other.element;
}
- int hashCode() => element.hashCode();
+ int get hashCode => element.hashCode;
String toString() => element.name.slowToString();
bool isClass() => true;
bool isUnknown() => false;
@@ -48,7 +50,7 @@
class UnknownBaseType implements BaseType {
const UnknownBaseType();
bool operator ==(BaseType other) => other is UnknownBaseType;
- int hashCode() => 0;
+ int get hashCode => 0;
bool isClass() => false;
bool isUnknown() => true;
bool isNull() => false;
@@ -61,7 +63,7 @@
class NullBaseType implements BaseType {
const NullBaseType();
bool operator ==(BaseType other) => other is NullBaseType;
- int hashCode() => 1;
+ int get hashCode => 1;
bool isClass() => false;
bool isUnknown() => false;
bool isNull() => true;
@@ -110,7 +112,7 @@
bool operator ==(ConcreteType other) => identical(this, other);
Set<BaseType> get baseTypes =>
new Set<BaseType>.from([const UnknownBaseType()]);
- int hashCode() => 0;
+ int get hashCode => 0;
ConcreteType union(ConcreteType other) => this;
ClassElement getUniqueType() => null;
toString() => "unknown";
@@ -136,14 +138,18 @@
return baseTypes.containsAll(other.baseTypes);
}
- int hashCode() {
+ int get hashCode {
int result = 1;
for (final baseType in baseTypes) {
- result = 31 * result + baseType.hashCode();
+ result = 31 * result + baseType.hashCode;
}
return result;
}
+ // TODO(polux): Collapse {num, int, ...}, {num, double, ...} and
+ // {int, double,...} into {num, ...} as an optimization. It will require
+ // UnionType to know about these class elements, which is cumbersome because
+ // there are no nested classes. We need factory methods instead.
ConcreteType union(ConcreteType other) {
if (other.isUnkown()) {
return const UnknownConcreteType();
@@ -179,7 +185,7 @@
final BaseType baseTypeOfThis;
final Map<Element, ConcreteType> concreteTypes;
ConcreteTypeCartesianProduct(this.baseTypeOfThis, this.concreteTypes);
- Iterator iterator() => concreteTypes.isEmpty()
+ Iterator iterator() => concreteTypes.isEmpty
? [new ConcreteTypesEnvironment(baseTypeOfThis)].iterator()
: new ConcreteTypeCartesianProductIterator(baseTypeOfThis, concreteTypes);
String toString() {
@@ -205,17 +211,17 @@
this.concreteTypes = concreteTypes,
nextValues = new Map<Element, BaseType>(),
state = new Map<Element, Iterator>() {
- if (concreteTypes.isEmpty()) {
+ if (concreteTypes.isEmpty) {
size = 0;
return;
}
- for (final e in concreteTypes.getKeys()) {
+ for (final e in concreteTypes.keys) {
final baseTypes = concreteTypes[e].baseTypes;
size *= baseTypes.length;
}
}
- bool hasNext() {
+ bool get hasNext {
return counter < size;
}
@@ -226,11 +232,11 @@
}
ConcreteTypesEnvironment next() {
- if (!hasNext()) throw new NoMoreElementsException();
+ if (!hasNext) throw new StateError("No more elements");
Element keyToIncrement = null;
- for (final key in concreteTypes.getKeys()) {
+ for (final key in concreteTypes.keys) {
final iterator = state[key];
- if (iterator != null && iterator.hasNext()) {
+ if (iterator != null && iterator.hasNext) {
nextValues[key] = state[key].next();
break;
}
@@ -249,6 +255,7 @@
class BaseTypes {
final BaseType intBaseType;
final BaseType doubleBaseType;
+ final BaseType numBaseType;
final BaseType boolBaseType;
final BaseType stringBaseType;
final BaseType listBaseType;
@@ -258,6 +265,7 @@
BaseTypes(Compiler compiler) :
intBaseType = new ClassBaseType(compiler.intClass),
doubleBaseType = new ClassBaseType(compiler.doubleClass),
+ numBaseType = new ClassBaseType(compiler.numClass),
boolBaseType = new ClassBaseType(compiler.boolClass),
stringBaseType = new ClassBaseType(compiler.stringClass),
listBaseType = new ClassBaseType(compiler.listClass),
@@ -311,7 +319,7 @@
if (other is! ConcreteTypesEnvironment) return false;
if (typeOfThis != other.typeOfThis) return false;
if (environment.length != other.environment.length) return false;
- for (Element key in environment.getKeys()) {
+ for (Element key in environment.keys) {
if (!other.environment.containsKey(key)
|| (environment[key] != other.environment[key])) {
return false;
@@ -320,11 +328,11 @@
return true;
}
- int hashCode() {
- int result = (typeOfThis != null) ? typeOfThis.hashCode() : 1;
+ int get hashCode {
+ int result = (typeOfThis != null) ? typeOfThis.hashCode : 1;
environment.forEach((element, concreteType) {
- result = 31 * (31 * result + element.hashCode()) +
- concreteType.hashCode();
+ result = 31 * (31 * result + element.hashCode) +
+ concreteType.hashCode;
});
return result;
}
@@ -403,6 +411,69 @@
callers = new Map<FunctionElement, Set<FunctionElement>>(),
readers = new Map<Element, Set<FunctionElement>>();
+ /**
+ * Populates [cache] with ad hoc rules like:
+ *
+ * {int} + {int} -> {int}
+ * {int} + {double} -> {num}
+ * {int} + {num} -> {double}
+ * ...
+ */
+ populateCacheWithBuiltinRules() {
+ // Builds the environment that would be looked up if we were to analyze
+ // o.method(arg) where o has concrete type {receiverType} and arg has
+ // concrete type {argumentType}.
+ ConcreteTypesEnvironment makeEnvironment(BaseType receiverType,
+ FunctionElement method,
+ BaseType argumentType) {
+ ArgumentsTypes argumentsTypes = new ArgumentsTypes(
+ [new ConcreteType.singleton(argumentType)],
+ new Map());
+ Map<Element, ConcreteType> argumentMap =
+ associateArguments(method, argumentsTypes);
+ return new ConcreteTypesEnvironment.of(argumentMap, receiverType);
+ }
+
+ // Adds the rule {receiverType}.method({argumentType}) -> {returnType}
+ // to cache.
+ void rule(ClassBaseType receiverType, String method,
+ BaseType argumentType, BaseType returnType) {
+ // The following line shouldn't be needed but the mock compiler doesn't
+ // resolve num for some reason.
+ receiverType.element.ensureResolved(compiler);
+ FunctionElement methodElement =
+ receiverType.element.lookupMember(new SourceString(method));
+ ConcreteTypesEnvironment environment =
+ makeEnvironment(receiverType, methodElement, argumentType);
+ Map<ConcreteTypesEnvironment, ConcreteType> map =
+ cache.containsKey(methodElement)
+ ? cache[methodElement]
+ : new Map<ConcreteTypesEnvironment, ConcreteType>();
+ map[environment] = new ConcreteType.singleton(returnType);
+ cache[methodElement] = map;
+ }
+
+ // The hardcoded typing rules.
+ final ClassBaseType int = baseTypes.intBaseType;
+ final ClassBaseType double = baseTypes.doubleBaseType;
+ final ClassBaseType num = baseTypes.numBaseType;
+ for (String operator in ['add', 'mul', 'sub']) {
+ final String method = r"operator$".concat(operator);
+
+ rule(int, method, int, int);
+ rule(int, method, double, num);
+ rule(int, method, num, num);
+
+ rule(double, method, double, double);
+ rule(double, method, int, num);
+ rule(double, method, num, num);
+
+ rule(num, method, int, num);
+ rule(num, method, double, num);
+ rule(num, method, num, num);
+ }
+ }
+
// --- utility methods ---
/**
@@ -554,7 +625,7 @@
Map<Element, ConcreteType> associateArguments(FunctionElement function,
ArgumentsTypes argumentsTypes) {
final Map<Element, ConcreteType> result = new Map<Element, ConcreteType>();
- final FunctionSignature signature = function.functionSignature;
+ final FunctionSignature signature = function.computeSignature(compiler);
// too many arguments
if (argumentsTypes.length > signature.parameterCount) {
return null;
@@ -568,7 +639,7 @@
// we attach each positional parameter to its corresponding positional
// argument
for (Link<Element> requiredParameters = signature.requiredParameters;
- !requiredParameters.isEmpty();
+ !requiredParameters.isEmpty;
requiredParameters = requiredParameters.tail) {
final Element requiredParameter = requiredParameters.head;
// we know next() is defined because of the guard above
@@ -577,7 +648,7 @@
// we attach the remaining positional arguments to their corresponding
// named arguments
Link<Element> remainingNamedParameters = signature.optionalParameters;
- while (remainingPositionalArguments.hasNext()) {
+ while (remainingPositionalArguments.hasNext) {
final Element namedParameter = remainingNamedParameters.head;
result[namedParameter] = remainingPositionalArguments.next();
// we know tail is defined because of the guard above
@@ -587,14 +658,14 @@
final Map<SourceString, Element> leftOverNamedParameters =
new Map<SourceString, Element>();
for (;
- !remainingNamedParameters.isEmpty();
+ !remainingNamedParameters.isEmpty;
remainingNamedParameters = remainingNamedParameters.tail) {
final Element namedParameter = remainingNamedParameters.head;
leftOverNamedParameters[namedParameter.name] = namedParameter;
}
// we attach the named arguments to their corresponding named paramaters
// (we don't use foreach because we want to be able to return early)
- for (Identifier identifier in argumentsTypes.named.getKeys()) {
+ for (Identifier identifier in argumentsTypes.named.keys) {
final ConcreteType concreteType = argumentsTypes.named[identifier];
SourceString source = identifier.source;
final Element namedParameter = leftOverNamedParameters[source];
@@ -644,6 +715,11 @@
ConcreteType analyzeMethod(FunctionElement element,
ConcreteTypesEnvironment environment) {
FunctionExpression tree = element.parseNode(compiler);
+ // This should never happen since we only deal with concrete types, except
+ // for external methods whose typing rules have not been hardcoded yet.
+ if (!tree.hasBody()) {
+ return new ConcreteType.unknown();
+ }
TreeElements elements =
compiler.enqueuer.resolution.resolvedElements[element];
Visitor visitor =
@@ -702,10 +778,11 @@
void analyzeMain(Element element) {
baseTypes = new BaseTypes(compiler);
cache[element] = new Map<ConcreteTypesEnvironment, ConcreteType>();
+ populateCacheWithBuiltinRules();
try {
workQueue.addLast(
new InferenceWorkItem(element, new ConcreteTypesEnvironment()));
- while (!workQueue.isEmpty()) {
+ while (!workQueue.isEmpty) {
InferenceWorkItem item = workQueue.removeFirst();
ConcreteType concreteType = analyze(item.method, item.environment);
var template = cache[item.method];
@@ -802,7 +879,7 @@
final positional = new List<ConcreteType>();
final named = new Map<Identifier, ConcreteType>();
for(Link<Node> iterator = arguments;
- !iterator.isEmpty();
+ !iterator.isEmpty;
iterator = iterator.tail) {
Node node = iterator.head;
NamedArgument namedArgument = node.asNamedArgument();
@@ -861,7 +938,23 @@
}
ConcreteType visitFor(For node) {
- inferrer.fail(node, 'not yet implemented');
+ if (node.initializer != null) {
+ analyze(node.initializer);
+ }
+ analyze(node.conditionStatement);
+ ConcreteType result = new ConcreteType.empty();
+ ConcreteTypesEnvironment oldEnvironment;
+ do {
+ oldEnvironment = environment;
+ analyze(node.conditionStatement);
+ analyze(node.body);
+ analyze(node.update);
+ environment = oldEnvironment.join(environment);
+ // TODO(polux): Maybe have a destructive join-method that returns a boolean
+ // value indicating whether something changed to avoid performing this
+ // comparison twice.
+ } while (oldEnvironment != environment);
+ return result;
}
ConcreteType visitFunctionDeclaration(FunctionDeclaration node) {
@@ -991,7 +1084,7 @@
ConcreteType type = new ConcreteType.empty();
// The concrete type of a sequence of statements is the union of the
// statement's types.
- for (Link<Node> link = node.nodes; !link.isEmpty(); link = link.tail) {
+ for (Link<Node> link = node.nodes; !link.isEmpty; link = link.tail) {
type = type.union(analyze(link.head));
}
return type;
@@ -1022,7 +1115,7 @@
}
ConcreteType visitVariableDefinitions(VariableDefinitions node) {
- for (Link<Node> link = node.definitions.nodes; !link.isEmpty();
+ for (Link<Node> link = node.definitions.nodes; !link.isEmpty;
link = link.tail) {
analyze(link.head);
}
@@ -1098,6 +1191,7 @@
}
ConcreteType visitLiteralMapEntry(LiteralMapEntry node) {
+ // We don't need to visit the key, it's always a string.
return analyze(node.value);
}
@@ -1138,7 +1232,7 @@
}
ConcreteType visitOperatorSend(Send node) {
- inferrer.fail(node, 'not implemented');
+ return visitDynamicSend(node);
}
ConcreteType visitGetterSend(Send node) {
@@ -1205,14 +1299,58 @@
inferrer.fail(node, 'not implemented');
}
+ // TODO(polux): handle unary operators and share this list with the rest of
+ // dart2js.
+ final Set<SourceString> operators = new Set<SourceString>()
+ ..add(const SourceString('=='))
+ ..add(const SourceString('!='))
+ ..add(const SourceString('~'))
+ ..add(const SourceString('[]'))
+ ..add(const SourceString('[]='))
+ ..add(const SourceString('*'))
+ ..add(const SourceString('*='))
+ ..add(const SourceString('/'))
+ ..add(const SourceString('/='))
+ ..add(const SourceString('%'))
+ ..add(const SourceString('%='))
+ ..add(const SourceString('~/'))
+ ..add(const SourceString('~/='))
+ ..add(const SourceString('+'))
+ ..add(const SourceString('+='))
+ ..add(const SourceString('-'))
+ ..add(const SourceString('-='))
+ ..add(const SourceString('<<'))
+ ..add(const SourceString('<<='))
+ ..add(const SourceString('>>'))
+ ..add(const SourceString('>>='))
+ ..add(const SourceString('>='))
+ ..add(const SourceString('>'))
+ ..add(const SourceString('<='))
+ ..add(const SourceString('<'))
+ ..add(const SourceString('&'))
+ ..add(const SourceString('&='))
+ ..add(const SourceString('^'))
+ ..add(const SourceString('^='))
+ ..add(const SourceString('|'))
+ ..add(const SourceString('|='));
+
+ SourceString canonicalizeMethodName(SourceString s) {
+ return operators.contains(s)
+ ? Elements.constructOperatorName(s, false)
+ : s;
+ }
+
ConcreteType visitDynamicSend(Send node) {
- ConcreteType receiverType = analyze(node.receiver);
+ ConcreteType receiverType = (node.receiver != null)
+ ? analyze(node.receiver)
+ : new ConcreteType.singleton(
+ new ClassBaseType(currentMethod.getEnclosingClass()));
ConcreteType result = new ConcreteType.empty();
final argumentsTypes = analyzeArguments(node.arguments);
if (receiverType.isUnkown()) {
- List<FunctionElement> methods =
- inferrer.getMembersByName(node.selector.asIdentifier().source);
+ List<FunctionElement> methods = inferrer.getMembersByName(
+ canonicalizeMethodName(node.selector.asIdentifier().source));
for (final method in methods) {
inferrer.addCaller(method, currentMethod);
Element classElem = method.enclosingElement;
@@ -1224,8 +1362,9 @@
} else {
for (BaseType baseReceiverType in receiverType.baseTypes) {
if (!baseReceiverType.isNull()) {
- FunctionElement method = (baseReceiverType as ClassBaseType).element
- .lookupMember(node.selector.asIdentifier().source);
+ ClassBaseType classBaseReceiverType = baseReceiverType;
+ FunctionElement method = classBaseReceiverType.element
+ .lookupMember(canonicalizeMethodName(node.selector.asIdentifier().source));
if (method != null) {
inferrer.addCaller(method, currentMethod);
result = result.union(inferrer.getSendReturnType(method,
diff --git a/lib/compiler/implementation/types/types.dart b/lib/compiler/implementation/types/types.dart
index 428102b..c41fd93 100644
--- a/lib/compiler/implementation/types/types.dart
+++ b/lib/compiler/implementation/types/types.dart
@@ -68,7 +68,7 @@
FunctionElement function = holder;
FunctionSignature signature = function.computeSignature(compiler);
for (Element parameter in signature.requiredParameters) {
- if (types.isEmpty()) return null;
+ if (types.isEmpty) return null;
if (element == parameter) {
return new ConcreteType.singleton(new ClassBaseType(types.head));
}
@@ -165,7 +165,7 @@
Link<Element> computeConcreteSendArguments(Send node) {
if (node.argumentsNode == null) return null;
- if (node.arguments.isEmpty()) return const Link<Element>();
+ if (node.arguments.isEmpty) return const Link<Element>();
if (node.receiver != null && concreteTypes[node.receiver] == null) {
return null;
}
@@ -226,14 +226,14 @@
*/
Link<Element> computeLubs(Link<Element> a, Link<Element> b) {
LinkBuilder<Element> lubs = new LinkBuilder<Element>();
- while (!a.isEmpty() && !b.isEmpty()) {
+ while (!a.isEmpty && !b.isEmpty) {
Element lub = computeLub(a.head, b.head);
if (lub == null) return null;
lubs.addLast(lub);
a = a.tail;
b = b.tail;
}
- return (a.isEmpty() && b.isEmpty()) ? lubs.toLink() : null;
+ return (a.isEmpty && b.isEmpty) ? lubs.toLink() : null;
}
/**
diff --git a/lib/compiler/implementation/universe/function_set.dart b/lib/compiler/implementation/universe/function_set.dart
index 8dd7d58..f55ad50 100644
--- a/lib/compiler/implementation/universe/function_set.dart
+++ b/lib/compiler/implementation/universe/function_set.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.
+part of universe;
+
// TODO(kasperl): This actually holds getters and setters just fine
// too and stricly they aren't functions. Maybe this needs a better
// name -- something like ElementSet seems a bit too generic.
diff --git a/lib/compiler/implementation/universe/partial_type_tree.dart b/lib/compiler/implementation/universe/partial_type_tree.dart
index 721585f..cbe1be0 100644
--- a/lib/compiler/implementation/universe/partial_type_tree.dart
+++ b/lib/compiler/implementation/universe/partial_type_tree.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.
-class PartialTypeTree {
+part of universe;
+
+abstract class PartialTypeTree {
final Compiler compiler;
PartialTypeTreeNode root;
@@ -44,7 +46,7 @@
// tree. If so, we have a tree with interface subtypes. If not,
// keep track of them so we can deal with it if the interface is
// added to the tree later.
- for (Link link = type.interfaces; !link.isEmpty(); link = link.tail) {
+ for (Link link = type.interfaces; !link.isEmpty; link = link.tail) {
InterfaceType superType = link.head;
ClassElement superTypeElement = superType.element;
if (nodes.containsKey(superTypeElement)) {
@@ -86,11 +88,11 @@
// current node to being children of a new node if we need
// to insert that.
Link<PartialTypeTreeNode> subtypes = const Link();
- for (Link link = current.children; !link.isEmpty(); link = link.tail) {
+ for (Link link = current.children; !link.isEmpty; link = link.tail) {
PartialTypeTreeNode child = link.head;
ClassElement childType = child.type;
if (type.isSubclassOf(childType)) {
- assert(subtypes.isEmpty());
+ assert(subtypes.isEmpty);
current = child;
continue L;
} else if (childType.isSubclassOf(type)) {
@@ -105,10 +107,10 @@
// that are subtypes of the type of the new node below the new
// node in the hierarchy.
PartialTypeTreeNode newNode = newNode(type);
- if (!subtypes.isEmpty()) {
+ if (!subtypes.isEmpty) {
newNode.children = subtypes;
Link<PartialTypeTreeNode> remaining = const Link();
- for (Link link = current.children; !link.isEmpty(); link = link.tail) {
+ for (Link link = current.children; !link.isEmpty; link = link.tail) {
PartialTypeTreeNode child = link.head;
if (!child.type.isSubclassOf(type)) {
remaining = remaining.prepend(child);
@@ -137,7 +139,7 @@
L: while (!identical(current.type, type)) {
assert(type.isSubclassOf(current.type));
if (!visit(current)) return;
- for (Link link = current.children; !link.isEmpty(); link = link.tail) {
+ for (Link link = current.children; !link.isEmpty; link = link.tail) {
PartialTypeTreeNode child = link.head;
ClassElement childType = child.type;
if (type.isSubclassOf(childType)) {
@@ -167,7 +169,7 @@
*/
bool visitRecursively(bool visit(PartialTypeTreeNode node)) {
if (!visit(this)) return false;
- for (Link link = children; !link.isEmpty(); link = link.tail) {
+ for (Link link = children; !link.isEmpty; link = link.tail) {
PartialTypeTreeNode child = link.head;
if (!child.visitRecursively(visit)) return false;
}
diff --git a/lib/compiler/implementation/universe/selector_map.dart b/lib/compiler/implementation/universe/selector_map.dart
index b5aa0d2..f4a416d 100644
--- a/lib/compiler/implementation/universe/selector_map.dart
+++ b/lib/compiler/implementation/universe/selector_map.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.
+part of universe;
+
class SelectorMap<T> extends PartialTypeTree {
SelectorMap(Compiler compiler) : super(compiler);
@@ -14,7 +16,7 @@
if (node == null) return null;
Link<SelectorValue<T>> selectors = node.selectorsByName[selector.name];
if (selectors == null) return null;
- for (Link link = selectors; !link.isEmpty(); link = link.tail) {
+ for (Link link = selectors; !link.isEmpty; link = link.tail) {
SelectorValue<T> existing = link.head;
if (existing.selector.equalsUntyped(selector)) return existing.value;
}
@@ -33,7 +35,7 @@
} else {
// Run through the linked list of selectors with the same name. If
// we find one that matches, we update the value in the mapping.
- for (Link link = selectors; !link.isEmpty(); link = link.tail) {
+ for (Link link = selectors; !link.isEmpty; link = link.tail) {
SelectorValue<T> existing = link.head;
// It is safe to ignore the type here, because all selector
// mappings that are stored in a single node have the same type.
@@ -55,7 +57,7 @@
if (node == null) return false;
Link<SelectorValue<T>> selectors = node.selectorsByName[selector.name];
if (selectors == null) return false;
- for (Link link = selectors; !link.isEmpty(); link = link.tail) {
+ for (Link link = selectors; !link.isEmpty; link = link.tail) {
SelectorValue<T> existing = link.head;
if (existing.selector.equalsUntyped(selector)) return true;
}
@@ -83,7 +85,7 @@
root.visitRecursively((SelectorMapNode<T> node) {
Link<SelectorValue<T>> selectors = node.selectorsByName[member.name];
if (selectors == null) return true;
- for (Link link = selectors; !link.isEmpty(); link = link.tail) {
+ for (Link link = selectors; !link.isEmpty; link = link.tail) {
SelectorValue<T> existing = link.head;
Selector selector = existing.selector;
// Since we're running through the entire tree we have to use
@@ -100,7 +102,7 @@
visitHierarchy(member.getEnclosingClass(), (SelectorMapNode<T> node) {
Link<SelectorValue<T>> selectors = node.selectorsByName[member.name];
if (selectors == null) return true;
- for (Link link = selectors; !link.isEmpty(); link = link.tail) {
+ for (Link link = selectors; !link.isEmpty; link = link.tail) {
SelectorValue<T> existing = link.head;
Selector selector = existing.selector;
if (selector.appliesUntyped(member, compiler)) {
diff --git a/lib/compiler/implementation/universe/universe.dart b/lib/compiler/implementation/universe/universe.dart
index 76a9aa5..d9df893 100644
--- a/lib/compiler/implementation/universe/universe.dart
+++ b/lib/compiler/implementation/universe/universe.dart
@@ -136,7 +136,7 @@
: this.name = name,
this.library = name.isPrivate() ? library : null,
this.namedArguments = namedArguments,
- this.orderedNamedArguments = namedArguments.isEmpty()
+ this.orderedNamedArguments = namedArguments.isEmpty
? namedArguments
: <SourceString>[] {
assert(!name.isPrivate() || library != null);
@@ -214,7 +214,7 @@
/** Check whether this is a call to 'assert'. */
bool isAssert() => isCall() && identical(name.stringValue, "assert");
- int hashCode() => argumentCount + 1000 * namedArguments.length;
+ int get hashCode => argumentCount + 1000 * namedArguments.length;
int get namedArgumentCount => namedArguments.length;
int get positionalArgumentCount => argumentCount - namedArgumentCount;
DartType get receiverType => null;
@@ -246,7 +246,7 @@
// number of positional arguments are not greater than the
// number of parameters.
assert(positionalArgumentCount <= parameters.parameterCount);
- return namedArguments.isEmpty();
+ return namedArguments.isEmpty;
}
} else {
if (positionalArgumentCount > requiredParameterCount) return false;
@@ -275,8 +275,8 @@
int requiredParameterCount = parameters.requiredParameterCount;
int optionalParameterCount = parameters.optionalParameterCount;
- bool hasOptionalParameters = !parameters.optionalParameters.isEmpty();
- if (namedArguments.isEmpty()) {
+ bool hasOptionalParameters = !parameters.optionalParameters.isEmpty;
+ if (namedArguments.isEmpty) {
if (!hasOptionalParameters) {
return requiredParameterCount == argumentCount;
} else {
@@ -291,7 +291,7 @@
}
Set<SourceString> nameSet = new Set<SourceString>();
for (;
- !remainingNamedParameters.isEmpty();
+ !remainingNamedParameters.isEmpty;
remainingNamedParameters = remainingNamedParameters.tail) {
nameSet.add(remainingNamedParameters.head.name);
}
@@ -328,7 +328,7 @@
// Visit named arguments and add them into a temporary list.
List compiledNamedArguments = [];
- for (; !arguments.isEmpty(); arguments = arguments.tail) {
+ for (; !arguments.isEmpty; arguments = arguments.tail) {
NamedArgument namedArgument = arguments.head;
compiledNamedArguments.add(compileArgument(namedArgument.expression));
}
@@ -346,7 +346,7 @@
// their values: either in the temporary list or using the
// default value.
for (;
- !remainingNamedParameters.isEmpty();
+ !remainingNamedParameters.isEmpty;
remainingNamedParameters = remainingNamedParameters.tail) {
Element parameter = remainingNamedParameters.head;
int foundIndex = namedArguments.indexOf(parameter.name);
@@ -389,7 +389,7 @@
compiler);
} else {
parameters.forEachOptionalParameter((element) {
- if (!arguments.isEmpty()) {
+ if (!arguments.isEmpty) {
list.add(compileArgument(arguments.head));
arguments = arguments.tail;
} else {
@@ -400,7 +400,7 @@
} else {
// Visit named arguments and add them into a temporary list.
List compiledNamedArguments = [];
- for (; !arguments.isEmpty(); arguments = arguments.tail) {
+ for (; !arguments.isEmpty; arguments = arguments.tail) {
NamedArgument namedArgument = arguments.head;
compiledNamedArguments.add(compileArgument(namedArgument.expression));
}
@@ -441,8 +441,8 @@
}
List<SourceString> getOrderedNamedArguments() {
- if (namedArguments.isEmpty()) return namedArguments;
- if (!orderedNamedArguments.isEmpty()) return orderedNamedArguments;
+ if (namedArguments.isEmpty) return namedArguments;
+ if (!orderedNamedArguments.isEmpty) return orderedNamedArguments;
orderedNamedArguments.addAll(namedArguments);
orderedNamedArguments.sort((SourceString first, SourceString second) {
diff --git a/lib/compiler/implementation/util/characters.dart b/lib/compiler/implementation/util/characters.dart
index c6815c2..064efe7 100644
--- a/lib/compiler/implementation/util/characters.dart
+++ b/lib/compiler/implementation/util/characters.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("characters");
+library characters;
const int $EOF = 0;
const int $STX = 2;
diff --git a/lib/compiler/implementation/util/link.dart b/lib/compiler/implementation/util/link.dart
index 1029363..b50b86a 100644
--- a/lib/compiler/implementation/util/link.dart
+++ b/lib/compiler/implementation/util/link.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.
+part of org_dartlang_compiler_util;
+
class Link<T> implements Iterable<T> {
T get head => null;
Link<T> get tail => null;
@@ -39,12 +41,12 @@
List toList() => new List<T>(0);
- bool isEmpty() => true;
+ bool get isEmpty => true;
Link<T> reverse() => this;
Link<T> reversePrependAll(Link<T> from) {
- if (from.isEmpty()) return this;
+ if (from.isEmpty) return this;
return this.prepend(from.head).reversePrependAll(from.tail);
}
@@ -52,7 +54,7 @@
bool operator ==(other) {
if (other is !Link<T>) return false;
- return other.isEmpty();
+ return other.isEmpty;
}
String toString() => "[]";
diff --git a/lib/compiler/implementation/util/link_implementation.dart b/lib/compiler/implementation/util/link_implementation.dart
index a7da8ec..15da76f 100644
--- a/lib/compiler/implementation/util/link_implementation.dart
+++ b/lib/compiler/implementation/util/link_implementation.dart
@@ -2,10 +2,12 @@
// 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 util_implementation;
+
class LinkIterator<T> implements Iterator<T> {
Link<T> current;
LinkIterator(Link<T> this.current);
- bool hasNext() => !current.isEmpty();
+ bool get hasNext => !current.isEmpty;
T next() {
T result = current.head;
current = current.tail;
@@ -28,7 +30,7 @@
void printOn(StringBuffer buffer, [separatedBy]) {
buffer.add(head);
if (separatedBy == null) separatedBy = '';
- for (Link link = tail; !link.isEmpty(); link = link.tail) {
+ for (Link link = tail; !link.isEmpty; link = link.tail) {
buffer.add(separatedBy);
buffer.add(link.head);
}
@@ -44,7 +46,7 @@
Link<T> reverse() {
Link<T> result = const Link();
- for (Link<T> link = this; !link.isEmpty(); link = link.tail) {
+ for (Link<T> link = this; !link.isEmpty; link = link.tail) {
result = result.prepend(link.head);
}
return result;
@@ -52,25 +54,25 @@
Link<T> reversePrependAll(Link<T> from) {
Link<T> result;
- for (result = this; !from.isEmpty(); from = from.tail) {
+ for (result = this; !from.isEmpty; from = from.tail) {
result = result.prepend(from.head);
}
return result;
}
- bool isEmpty() => false;
+ bool get isEmpty => false;
List<T> toList() {
List<T> list = new List<T>();
- for (Link<T> link = this; !link.isEmpty(); link = link.tail) {
+ for (Link<T> link = this; !link.isEmpty; link = link.tail) {
list.addLast(link.head);
}
return list;
}
void forEach(void f(T element)) {
- for (Link<T> link = this; !link.isEmpty(); link = link.tail) {
+ for (Link<T> link = this; !link.isEmpty; link = link.tail) {
f(link.head);
}
}
@@ -78,14 +80,14 @@
bool operator ==(other) {
if (other is !Link<T>) return false;
Link<T> myElements = this;
- while (!myElements.isEmpty() && !other.isEmpty()) {
+ while (!myElements.isEmpty && !other.isEmpty) {
if (myElements.head != other.head) {
return false;
}
myElements = myElements.tail;
other = other.tail;
}
- return myElements.isEmpty() && other.isEmpty();
+ return myElements.isEmpty && other.isEmpty;
}
}
diff --git a/lib/compiler/implementation/util/uri_extras.dart b/lib/compiler/implementation/util/uri_extras.dart
index 6c3d767..aa2f93a 100644
--- a/lib/compiler/implementation/util/uri_extras.dart
+++ b/lib/compiler/implementation/util/uri_extras.dart
@@ -58,7 +58,7 @@
for (int i = common; i < uriParts.length - 1; i++) {
sb.add('${uriParts[i]}/');
}
- sb.add('${uriParts.last()}');
+ sb.add('${uriParts.last}');
return sb.toString();
}
return uri.toString();
diff --git a/lib/compiler/implementation/util/util.dart b/lib/compiler/implementation/util/util.dart
index f00d146..ef3b0f6 100644
--- a/lib/compiler/implementation/util/util.dart
+++ b/lib/compiler/implementation/util/util.dart
@@ -2,9 +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.
-#library('org.dartlang.compiler.util');
-#import('util_implementation.dart');
-#source('link.dart');
+library org_dartlang_compiler_util;
+
+import 'util_implementation.dart';
+
+part 'link.dart';
/**
* Tagging interface for classes from which source spans can be generated.
diff --git a/lib/compiler/implementation/util/util_implementation.dart b/lib/compiler/implementation/util/util_implementation.dart
index ed4228a..bbb852a 100644
--- a/lib/compiler/implementation/util/util_implementation.dart
+++ b/lib/compiler/implementation/util/util_implementation.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('util_implementation');
-#import('util.dart');
-#source('link_implementation.dart');
+library util_implementation;
+
+import 'util.dart';
+
+part 'link_implementation.dart';
diff --git a/lib/compiler/implementation/warnings.dart b/lib/compiler/implementation/warnings.dart
index 5814036..f1198a2 100644
--- a/lib/compiler/implementation/warnings.dart
+++ b/lib/compiler/implementation/warnings.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.
+part of dart2js;
+
class MessageKind {
final String template;
const MessageKind(this.template);
diff --git a/lib/compiler/implementation/world.dart b/lib/compiler/implementation/world.dart
index ee91eef..836d47c 100644
--- a/lib/compiler/implementation/world.dart
+++ b/lib/compiler/implementation/world.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.
+part of dart2js;
+
class World {
final Compiler compiler;
final Map<ClassElement, Set<ClassElement>> subtypes;
@@ -40,7 +42,7 @@
// (3) subclasses of (2) and (3).
void potentiallyAddForRti(ClassElement cls, Function callback) {
- if (cls.typeVariables.isEmpty()) return;
+ if (cls.typeVariables.isEmpty) return;
if (classesNeedingRti.contains(cls)) return;
classesNeedingRti.add(cls);
if (callback != null) {
@@ -56,7 +58,7 @@
compiler.resolverWorld.isChecks.forEach((DartType type) {
if (type is InterfaceType) {
InterfaceType itf = type;
- if (!itf.arguments.isEmpty()) {
+ if (!itf.arguments.isEmpty) {
potentiallyAddForRti(itf.element, null);
}
}
@@ -64,7 +66,7 @@
List<ClassElement> worklist =
new List<ClassElement>.from(classesNeedingRti);
- while (!worklist.isEmpty()) {
+ while (!worklist.isEmpty) {
Element e = worklist.removeLast();
Set<Element> dependencies = rtiDependencies[e];
if (dependencies == null) continue;
@@ -189,5 +191,5 @@
elements.add(element);
}
- bool isEmpty() => elements.isEmpty();
+ bool get isEmpty => elements.isEmpty;
}
diff --git a/lib/compiler/samples/leap/leap_leg.dart b/lib/compiler/samples/leap/leap_leg.dart
index 5890ab9..c04f674 100644
--- a/lib/compiler/samples/leap/leap_leg.dart
+++ b/lib/compiler/samples/leap/leap_leg.dart
@@ -127,7 +127,7 @@
Stopwatch sw = new Stopwatch()..start();
compiler.scanBuiltinLibraries();
sw.stop();
- return 'Scanned core libraries in ${sw.elapsedInMs()}ms';
+ return 'Scanned core libraries in ${sw.elapsedMilliseconds}ms';
}
String update(String codeText) {
@@ -197,7 +197,7 @@
}
}
- compiler.log("Outline ${sw.elapsedInMs()}");
+ compiler.log("Outline ${sw.elapsedMilliseconds}");
return sb.toString();
}
@@ -270,7 +270,7 @@
log('compilation failed');
return null;
}
- log('compilation succeeded: ${sw.elapsedInMs()}ms');
+ log('compilation succeeded: ${sw.elapsedMilliseconds}ms');
return e;
}
diff --git a/lib/core/bool.dart b/lib/core/bool.dart
index 3225a99..e34b058 100644
--- a/lib/core/bool.dart
+++ b/lib/core/bool.dart
@@ -6,7 +6,7 @@
class bool {
factory bool._uninstantiable() {
- throw const UnsupportedOperationException(
+ throw new UnsupportedError(
"class bool cannot be instantiated");
}
}
diff --git a/lib/core/collection.dart b/lib/core/collection.dart
index 22381ab..51ffc39 100644
--- a/lib/core/collection.dart
+++ b/lib/core/collection.dart
@@ -95,5 +95,5 @@
/**
* Returns true if there is no element in this collection.
*/
- bool isEmpty() => !iterator().hasNext();
+ bool get isEmpty => !iterator().hasNext;
}
diff --git a/lib/core/core.dart b/lib/core/core.dart
index 5ba5969..f602943 100644
--- a/lib/core/core.dart
+++ b/lib/core/core.dart
@@ -18,9 +18,11 @@
#source("expect.dart");
#source("function.dart");
#source("future.dart");
+#source("future_impl.dart");
#source("hashable.dart");
#source("identical.dart");
#source("int.dart");
+#source("invocation_mirror.dart");
#source("iterable.dart");
#source("iterator.dart");
#source("list.dart");
@@ -34,6 +36,7 @@
#source("regexp.dart");
#source("sequences.dart");
#source("set.dart");
+#source("sort.dart");
#source("stopwatch.dart");
#source("string.dart");
#source("string_buffer.dart");
diff --git a/lib/core/corelib_sources.gypi b/lib/core/corelib_sources.gypi
index a94025b..91f7ff5 100644
--- a/lib/core/corelib_sources.gypi
+++ b/lib/core/corelib_sources.gypi
@@ -15,9 +15,11 @@
'expando.dart',
'expect.dart',
'future.dart',
+ 'future_impl.dart',
'function.dart',
'identical.dart',
'int.dart',
+ 'invocation_mirror.dart',
'hashable.dart',
'iterable.dart',
'iterator.dart',
@@ -32,6 +34,7 @@
'regexp.dart',
'sequences.dart',
'set.dart',
+ 'sort.dart',
'stopwatch.dart',
'string.dart',
'strings.dart',
diff --git a/lib/core/date.dart b/lib/core/date.dart
index 1c496ae..7ab46cf 100644
--- a/lib/core/date.dart
+++ b/lib/core/date.dart
@@ -52,9 +52,8 @@
int minute = 0,
int second = 0,
int millisecond = 0]) {
- return new DateImplementation(year, month, day,
- hour, minute, second,
- millisecond, false);
+ return new _DateImpl(
+ year, month, day, hour, minute, second, millisecond, false);
}
/**
@@ -72,22 +71,21 @@
int minute = 0,
int second = 0,
int millisecond = 0]) {
- return new DateImplementation(year, month, day,
- hour, minute, second,
- millisecond, true);
+ return new _DateImpl(
+ year, month, day, hour, minute, second, millisecond, true);
}
/**
* Constructs a new [Date] instance with current date time value in the
* local time zone.
*/
- factory Date.now() => new DateImplementation.now();
+ factory Date.now() => new _DateImpl.now();
/**
* Constructs a new [Date] instance based on [formattedString].
*/
factory Date.fromString(String formattedString)
- => new DateImplementation.fromString(formattedString);
+ => new _DateImpl.fromString(formattedString);
/**
* Constructs a new [Date] instance with the given [millisecondsSinceEpoch].
@@ -102,8 +100,8 @@
// TODO(lrn): Have two constructors instead of taking an optional bool.
factory Date.fromMillisecondsSinceEpoch(int millisecondsSinceEpoch,
{bool isUtc: false}) {
- return new DateImplementation.fromMillisecondsSinceEpoch(
- millisecondsSinceEpoch, isUtc);
+ return new _DateImpl.fromMillisecondsSinceEpoch(millisecondsSinceEpoch,
+ isUtc);
}
/**
@@ -244,3 +242,187 @@
*/
Duration difference(Date other);
}
+
+class _DateImpl implements Date {
+ final int millisecondsSinceEpoch;
+ final bool isUtc;
+
+ factory _DateImpl.fromString(String formattedString) {
+ // Read in (a subset of) ISO 8601.
+ // Examples:
+ // - "2012-02-27 13:27:00"
+ // - "2012-02-27 13:27:00.423z"
+ // - "20120227 13:27:00"
+ // - "20120227T132700"
+ // - "20120227"
+ // - "2012-02-27T14Z"
+ // - "-123450101 00:00:00 Z" // In the year -12345.
+ final RegExp re = const RegExp(
+ r'^([+-]?\d?\d\d\d\d)-?(\d\d)-?(\d\d)' // The day part.
+ r'(?:[ T](\d\d)(?::?(\d\d)(?::?(\d\d)(.\d{1,6})?)?)? ?([zZ])?)?$');
+ Match match = re.firstMatch(formattedString);
+ if (match !== null) {
+ int parseIntOrZero(String matched) {
+ // TODO(floitsch): we should not need to test against the empty string.
+ if (matched === null || matched == "") return 0;
+ return int.parse(matched);
+ }
+
+ double parseDoubleOrZero(String matched) {
+ // TODO(floitsch): we should not need to test against the empty string.
+ if (matched === null || matched == "") return 0.0;
+ return double.parse(matched);
+ }
+
+ int years = int.parse(match[1]);
+ int month = int.parse(match[2]);
+ int day = int.parse(match[3]);
+ int hour = parseIntOrZero(match[4]);
+ int minute = parseIntOrZero(match[5]);
+ int second = parseIntOrZero(match[6]);
+ bool addOneMillisecond = false;
+ int millisecond = (parseDoubleOrZero(match[7]) * 1000).round().toInt();
+ if (millisecond == 1000) {
+ addOneMillisecond = true;
+ millisecond = 999;
+ }
+ // TODO(floitsch): we should not need to test against the empty string.
+ bool isUtc = (match[8] !== null) && (match[8] != "");
+ int millisecondsSinceEpoch = _brokenDownDateToMillisecondsSinceEpoch(
+ years, month, day, hour, minute, second, millisecond, isUtc);
+ if (millisecondsSinceEpoch === null) {
+ throw new ArgumentError(formattedString);
+ }
+ if (addOneMillisecond) millisecondsSinceEpoch++;
+ return new Date.fromMillisecondsSinceEpoch(millisecondsSinceEpoch,
+ isUtc: isUtc);
+ } else {
+ throw new ArgumentError(formattedString);
+ }
+ }
+
+ static const int _MAX_MILLISECONDS_SINCE_EPOCH = 8640000000000000;
+
+ _DateImpl.fromMillisecondsSinceEpoch(this.millisecondsSinceEpoch,
+ this.isUtc) {
+ if (millisecondsSinceEpoch.abs() > _MAX_MILLISECONDS_SINCE_EPOCH) {
+ throw new ArgumentError(millisecondsSinceEpoch);
+ }
+ if (isUtc === null) throw new ArgumentError(isUtc);
+ }
+
+ bool operator ==(other) {
+ if (!(other is Date)) return false;
+ return (millisecondsSinceEpoch == other.millisecondsSinceEpoch);
+ }
+
+ bool operator <(Date other)
+ => millisecondsSinceEpoch < other.millisecondsSinceEpoch;
+
+ bool operator <=(Date other)
+ => millisecondsSinceEpoch <= other.millisecondsSinceEpoch;
+
+ bool operator >(Date other)
+ => millisecondsSinceEpoch > other.millisecondsSinceEpoch;
+
+ bool operator >=(Date other)
+ => millisecondsSinceEpoch >= other.millisecondsSinceEpoch;
+
+ int compareTo(Date other)
+ => millisecondsSinceEpoch.compareTo(other.millisecondsSinceEpoch);
+
+ int get hashCode => millisecondsSinceEpoch;
+
+ Date toLocal() {
+ if (isUtc) {
+ return new Date.fromMillisecondsSinceEpoch(millisecondsSinceEpoch,
+ isUtc: false);
+ }
+ return this;
+ }
+
+ Date toUtc() {
+ if (isUtc) return this;
+ return new Date.fromMillisecondsSinceEpoch(millisecondsSinceEpoch,
+ isUtc: true);
+ }
+
+ String toString() {
+ String fourDigits(int n) {
+ int absN = n.abs();
+ String sign = n < 0 ? "-" : "";
+ if (absN >= 1000) return "$n";
+ if (absN >= 100) return "${sign}0$absN";
+ if (absN >= 10) return "${sign}00$absN";
+ return "${sign}000$absN";
+ }
+
+ String threeDigits(int n) {
+ if (n >= 100) return "${n}";
+ if (n >= 10) return "0${n}";
+ return "00${n}";
+ }
+
+ String twoDigits(int n) {
+ if (n >= 10) return "${n}";
+ return "0${n}";
+ }
+
+ String y = fourDigits(year);
+ String m = twoDigits(month);
+ String d = twoDigits(day);
+ String h = twoDigits(hour);
+ String min = twoDigits(minute);
+ String sec = twoDigits(second);
+ String ms = threeDigits(millisecond);
+ if (isUtc) {
+ return "$y-$m-$d $h:$min:$sec.${ms}Z";
+ } else {
+ return "$y-$m-$d $h:$min:$sec.$ms";
+ }
+ }
+
+ /** Returns a new [Date] with the [duration] added to [this]. */
+ Date add(Duration duration) {
+ int ms = millisecondsSinceEpoch;
+ return new Date.fromMillisecondsSinceEpoch(
+ ms + duration.inMilliseconds, isUtc: isUtc);
+ }
+
+ /** Returns a new [Date] with the [duration] subtracted from [this]. */
+ Date subtract(Duration duration) {
+ int ms = millisecondsSinceEpoch;
+ return new Date.fromMillisecondsSinceEpoch(
+ ms - duration.inMilliseconds, isUtc: isUtc);
+ }
+
+ /** Returns a [Duration] with the difference of [this] and [other]. */
+ Duration difference(Date other) {
+ int ms = millisecondsSinceEpoch;
+ int otherMs = other.millisecondsSinceEpoch;
+ return new Duration(milliseconds: ms - otherMs);
+ }
+
+ external _DateImpl(int year,
+ int month,
+ int day,
+ int hour,
+ int minute,
+ int second,
+ int millisecond,
+ bool isUtc);
+ external _DateImpl.now();
+ external static int _brokenDownDateToMillisecondsSinceEpoch(
+ int year, int month, int day, int hour, int minute, int second,
+ int millisecond, bool isUtc);
+ external String get timeZoneName;
+ external Duration get timeZoneOffset;
+ external int get year;
+ external int get month;
+ external int get day;
+ external int get hour;
+ external int get minute;
+ external int get second;
+ external int get millisecond;
+ external int get weekday;
+}
diff --git a/lib/core/duration.dart b/lib/core/duration.dart
index aa3d4be..710d877 100644
--- a/lib/core/duration.dart
+++ b/lib/core/duration.dart
@@ -85,8 +85,8 @@
return inMilliseconds == other.inMilliseconds;
}
- int hashCode() {
- return inMilliseconds.hashCode();
+ int get hashCode {
+ return inMilliseconds.hashCode;
}
int compareTo(Duration other) {
diff --git a/lib/core/errors.dart b/lib/core/errors.dart
index 97465fc..9a16d83 100644
--- a/lib/core/errors.dart
+++ b/lib/core/errors.dart
@@ -6,19 +6,28 @@
const Error();
}
+/**
+ * Error thrown by the runtime system when an assert statement fails.
+ */
class AssertionError implements Error {
}
+/**
+ * Error thrown by the runtime system when a type assertion fails.
+ */
class TypeError implements AssertionError {
}
+/**
+ * Error thrown by the runtime system when a cast operation fails.
+ */
class CastError implements Error {
}
/**
* Error thrown when a function is passed an unacceptable argument.
*/
-class ArgumentError implements Error {
+ class ArgumentError implements Error {
final message;
/** The [message] describes the erroneous argument. */
@@ -41,7 +50,14 @@
const IllegalArgumentException([argument = ""]) : super(argument);
}
-
+/**
+ * Error thrown when control reaches the end of a switch case.
+ *
+ * The Dart specification requires this error to be thrown when
+ * control reaches the end of a switch case (except the last case
+ * of a switch) without meeting a break or similar end of the control
+ * flow.
+ */
class FallThroughError implements Error {
const FallThroughError();
}
@@ -131,7 +147,37 @@
}
-class OutOfMemoryError implements Exception {
+/**
+ * The operation was not allowed by the object.
+ *
+ * This [Error] is thrown when a class cannot implement
+ * one of the methods in its signature.
+ */
+class UnsupportedError implements Error {
+ final String message;
+ UnsupportedError(this.message);
+ String toString() => "Unsupported operation: message";
+}
+
+/**
+ * The operation was not allowed by the current state of the object.
+ *
+ * This is a generic error used for a variety of different erroneous
+ * actions. The message should be descriptive.
+ */
+class StateError implements Error {
+ final String message;
+ StateError(this.message);
+ String toString() => "Bad state: message";
+}
+
+
+class OutOfMemoryError implements Error {
const OutOfMemoryError();
String toString() => "Out of Memory";
}
+
+class StackOverflowError implements Error {
+ const StackOverflowError();
+ String toString() => "Stack Overflow";
+}
diff --git a/lib/core/exceptions.dart b/lib/core/exceptions.dart
index c57603a..c1774ef 100644
--- a/lib/core/exceptions.dart
+++ b/lib/core/exceptions.dart
@@ -34,32 +34,6 @@
final _value;
}
-/**
- * Exception thrown because of attempt to modify an immutable object.
- */
-class IllegalAccessException implements Exception {
- const IllegalAccessException();
- String toString() => "Attempt to modify an immutable object";
-}
-
-
-class ClosureArgumentMismatchException implements Exception {
- const ClosureArgumentMismatchException();
- String toString() => "Closure argument mismatch";
-}
-
-
-class ObjectNotClosureException implements Exception {
- const ObjectNotClosureException();
- String toString() => "Object is not closure";
-}
-
-
-class StackOverflowException implements Exception {
- const StackOverflowException();
- String toString() => "Stack Overflow";
-}
-
/**
* Exception thrown when a string or some other data does not have an expected
@@ -80,12 +54,6 @@
}
-class WrongArgumentCountException implements Exception {
- const WrongArgumentCountException();
- String toString() => "WrongArgumentCountException";
-}
-
-
class NullPointerException implements Exception {
const NullPointerException([this.functionName, this.arguments = const []]);
String toString() {
@@ -105,25 +73,6 @@
}
-class NoMoreElementsException implements Exception {
- const NoMoreElementsException();
- String toString() => "NoMoreElementsException";
-}
-
-
-class EmptyQueueException implements Exception {
- const EmptyQueueException();
- String toString() => "EmptyQueueException";
-}
-
-
-class UnsupportedOperationException implements Exception {
- const UnsupportedOperationException(String this._message);
- String toString() => "UnsupportedOperationException: $_message";
- final String _message;
-}
-
-
class NotImplementedException implements Exception {
const NotImplementedException([String message]) : this._message = message;
String toString() => (this._message !== null
diff --git a/lib/core/expect.dart b/lib/core/expect.dart
index 2b87297..adf0604 100644
--- a/lib/core/expect.dart
+++ b/lib/core/expect.dart
@@ -131,7 +131,7 @@
String msg = _getMessage(reason);
// Make sure all of the values are present in both and match.
- for (final key in expected.getKeys()) {
+ for (final key in expected.keys) {
if (!actual.containsKey(key)) {
_fail('Expect.mapEquals(missing expected key: <$key>$msg) fails');
}
@@ -140,7 +140,7 @@
}
// Make sure the actual map doesn't have any extra keys.
- for (final key in actual.getKeys()) {
+ for (final key in actual.keys) {
if (!expected.containsKey(key)) {
_fail('Expect.mapEquals(unexpected key: <$key>$msg) fails');
}
@@ -227,12 +227,12 @@
final extraSet = new Set.from(actual);
extraSet.removeAll(expected);
- if (extraSet.isEmpty() && missingSet.isEmpty()) return;
+ if (extraSet.isEmpty && missingSet.isEmpty) return;
String msg = _getMessage(reason);
StringBuffer sb = new StringBuffer("Expect.setEquals($msg) fails");
// Report any missing items.
- if (!missingSet.isEmpty()) {
+ if (!missingSet.isEmpty) {
sb.add('\nExpected collection does not contain: ');
}
@@ -241,7 +241,7 @@
}
// Report any extra items.
- if (!extraSet.isEmpty()) {
+ if (!extraSet.isEmpty) {
sb.add('\nExpected collection should not contain: ');
}
diff --git a/lib/core/future.dart b/lib/core/future.dart
index 99af241..c14318b 100644
--- a/lib/core/future.dart
+++ b/lib/core/future.dart
@@ -29,7 +29,7 @@
*/
abstract class Future<T> {
/** A future whose value is immediately available. */
- factory Future.immediate(T value) => new FutureImpl<T>.immediate(value);
+ factory Future.immediate(T value) => new _FutureImpl<T>.immediate(value);
/** The value provided. Throws an exception if [hasValue] is false. */
T get value;
@@ -161,7 +161,7 @@
*/
abstract class Completer<T> {
- factory Completer() => new CompleterImpl<T>();
+ factory Completer() => new _CompleterImpl<T>();
/** The future that will contain the value produced by this completer. */
Future get future;
@@ -193,6 +193,28 @@
String toString() => "Exception: future already completed";
}
+/**
+ * Wraps unhandled exceptions provided to [Completer.completeException]. It is
+ * used to show both the error message and the stack trace for unhandled
+ * exceptions.
+ */
+class FutureUnhandledException implements Exception {
+ /** Wrapped exception. */
+ var source;
+
+ /** Trace for the wrapped exception. */
+ Object stackTrace;
+
+ FutureUnhandledException(this.source, this.stackTrace);
+
+ String toString() {
+ return 'FutureUnhandledException: exception while executing Future\n '
+ '${source.toString().replaceAll("\n", "\n ")}\n'
+ 'original stack trace:\n '
+ '${stackTrace.toString().replaceAll("\n","\n ")}';
+ }
+}
+
/**
* [Futures] holds additional utility functions that operate on [Future]s (for
@@ -206,7 +228,7 @@
* returned future will be a list of all the values that were produced.)
*/
static Future<List> wait(List<Future> futures) {
- if (futures.isEmpty()) {
+ if (futures.isEmpty) {
return new Future<List>.immediate(const []);
}
diff --git a/lib/coreimpl/future_implementation.dart b/lib/core/future_impl.dart
similarity index 89%
rename from lib/coreimpl/future_implementation.dart
rename to lib/core/future_impl.dart
index 9f0caff..bbae82d 100644
--- a/lib/coreimpl/future_implementation.dart
+++ b/lib/core/future_impl.dart
@@ -1,7 +1,7 @@
// Copyright 2012 Google Inc. All Rights Reserved.
// Dart core library.
-class FutureImpl<T> implements Future<T> {
+class _FutureImpl<T> implements Future<T> {
bool _isComplete = false;
@@ -41,13 +41,13 @@
*/
final List<Function> _completionListeners;
- FutureImpl()
+ _FutureImpl()
: _successListeners = [],
_exceptionHandlers = [],
_completionListeners = [];
- factory FutureImpl.immediate(T value) {
- final res = new FutureImpl();
+ factory _FutureImpl.immediate(T value) {
+ final res = new _FutureImpl();
res._setValue(value);
return res;
}
@@ -56,8 +56,8 @@
if (!isComplete) {
throw new FutureNotCompleteException();
}
- if (_exception !== null) {
- throw _exception;
+ if (_exception != null) {
+ throw new FutureUnhandledException(_exception, stackTrace);
}
return _value;
}
@@ -81,7 +81,7 @@
}
bool get hasValue {
- return isComplete && _exception === null;
+ return isComplete && _exception == null;
}
void then(void onSuccess(T value)) {
@@ -90,7 +90,7 @@
} else if (!isComplete) {
_successListeners.add(onSuccess);
} else if (!_exceptionHandled) {
- throw _exception;
+ throw new FutureUnhandledException(_exception, stackTrace);
}
}
@@ -119,7 +119,7 @@
_isComplete = true;
try {
- if (_exception !== null) {
+ if (_exception != null) {
for (Function handler in _exceptionHandlers) {
// Explicitly check for true here so that if the handler returns null,
// we don't get an exception in checked mode.
@@ -136,7 +136,7 @@
}
} else {
if (!_exceptionHandled && _successListeners.length > 0) {
- throw _exception;
+ throw new FutureUnhandledException(_exception, stackTrace);
}
}
} finally {
@@ -157,7 +157,7 @@
}
void _setException(Object exception, Object stackTrace) {
- if (exception === null) {
+ if (exception == null) {
// null is not a legal value for the exception of a Future.
throw new ArgumentError(null);
}
@@ -250,11 +250,11 @@
}
}
-class CompleterImpl<T> implements Completer<T> {
+class _CompleterImpl<T> implements Completer<T> {
- final FutureImpl<T> _futureImpl;
+ final _FutureImpl<T> _futureImpl;
- CompleterImpl() : _futureImpl = new FutureImpl() {}
+ _CompleterImpl() : _futureImpl = new _FutureImpl() {}
Future<T> get future {
return _futureImpl;
@@ -268,3 +268,4 @@
_futureImpl._setException(exception, stackTrace);
}
}
+
diff --git a/lib/core/hashable.dart b/lib/core/hashable.dart
index f9f35ff..aaf345b 100644
--- a/lib/core/hashable.dart
+++ b/lib/core/hashable.dart
@@ -13,5 +13,5 @@
*/
abstract class Hashable {
// TODO(lrn): http://darbug.com/5522
- abstract int hashCode();
+ abstract int get hashCode;
}
diff --git a/lib/core/int.dart b/lib/core/int.dart
index 2bc75be..b0f6c13 100644
--- a/lib/core/int.dart
+++ b/lib/core/int.dart
@@ -36,10 +36,10 @@
int operator >>(int shiftAmount);
/** Returns true if and only if this integer is even. */
- bool isEven();
+ bool get isEven;
/** Returns true if and only if this integer is odd. */
- bool isOdd();
+ bool get isOdd;
/** Negate operator. Negating an integer produces an integer. */
int operator -();
@@ -47,16 +47,16 @@
/** Returns the absolute value of this integer. */
int abs();
- /** For integers the round method is the identify function. */
+ /** Returns [this]. */
int round();
- /** For integers the floor method is the identify function. */
+ /** Returns [this]. */
int floor();
- /** For integers the ceil method is the identify function. */
+ /** Returns [this]. */
int ceil();
- /** For integers the truncate method is the identify function. */
+ /** Returns [this]. */
int truncate();
/**
diff --git a/lib/core/invocation_mirror.dart b/lib/core/invocation_mirror.dart
new file mode 100644
index 0000000..b83ced2
--- /dev/null
+++ b/lib/core/invocation_mirror.dart
@@ -0,0 +1,50 @@
+// 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.
+
+/**
+ * Representation of the invocation of a member on an object.
+ *
+ * This is the type of objects passed to [Object.noSuchMethod] when
+ * an object doesn't support the member invocation that was attempted
+ * on it.
+ */
+abstract class InvocationMirror {
+ /** The name of the invoked member. */
+ String get memberName;
+
+ /** An unmodifiable view of the positional arguments of the call. */
+ List get positionalArguments;
+
+ /** An unmodifiable view of the named arguments of the call. */
+ Map<String, Dynamic> get namedArguments;
+
+ /** Whether the invocation was a method call. */
+ bool get isMethod;
+
+ /**
+ * Whether the invocation was a getter call.
+ * If so, both types of arguments will be null.
+ */
+ bool get isGetter;
+
+ /**
+ * Whether the invocation was a setter call.
+ *
+ * If so, [arguments] will have exactly one positonal argument,
+ * and namedArguments will be null.
+ */
+ bool get isSetter;
+
+ /** Whether the invocation was a getter or a setter call. */
+ bool get isAccessor => isGetter || isSetter;
+
+ /**
+ * Perform the invocation on the provided object.
+ *
+ * If the object doesn't support the invocation, its [noSuchMethod]
+ * method will be called with either this [InvocationMirror] or another
+ * equivalent [InvocationMirror].
+ */
+ invokeOn(Object receiver);
+}
diff --git a/lib/core/iterator.dart b/lib/core/iterator.dart
index c3a346d..2e324f6 100644
--- a/lib/core/iterator.dart
+++ b/lib/core/iterator.dart
@@ -13,12 +13,12 @@
abstract class Iterator<E> {
/**
* Gets the next element in the iteration. Throws a
- * [NoMoreElementsException] if no element is left.
+ * [StateError] if no element is left.
*/
E next();
/**
* Returns whether the [Iterator] has elements left.
*/
- bool hasNext();
+ bool hasNext;
}
diff --git a/lib/core/list.dart b/lib/core/list.dart
index 04ad11f..6dd841f 100644
--- a/lib/core/list.dart
+++ b/lib/core/list.dart
@@ -40,20 +40,20 @@
/**
* Changes the length of the list. If [newLength] is greater than
* the current [length], entries are initialized to [:null:]. Throws
- * an [UnsupportedOperationException] if the list is not extendable.
+ * an [UnsupportedError] if the list is not extendable.
*/
void set length(int newLength);
/**
* Adds [value] at the end of the list, extending the length by
- * one. Throws an [UnsupportedOperationException] if the list is not
+ * one. Throws an [UnsupportedError] if the list is not
* extendable.
*/
void add(E value);
/**
* Adds [value] at the end of the list, extending the length by
- * one. Throws an [UnsupportedOperationException] if the list is not
+ * one. Throws an [UnsupportedError] if the list is not
* extendable.
*/
void addLast(E value);
@@ -61,7 +61,7 @@
/**
* Appends all elements of the [collection] to the end of this list.
* Extends the length of the list by the number of elements in [collection].
- * Throws an [UnsupportedOperationException] if this list is not
+ * Throws an [UnsupportedError] if this list is not
* extendable.
*/
void addAll(Collection<E> collection);
@@ -96,7 +96,7 @@
* Removes all elements in the list.
*
* The length of the list becomes zero.
- * Throws an [UnsupportedOperationException], and retains all elements, if the
+ * Throws an [UnsupportedError], and retains all elements, if the
* length of the list cannot be changed.
*/
void clear();
@@ -110,14 +110,14 @@
* Throws an [ArgumentError] if [index] is not an [int].
* Throws an [IndexOutOfRangeException] if the [index] does not point inside
* the list.
- * Throws an [UnsupportedOperationException], and doesn't remove the element,
+ * Throws an [UnsupportedError], and doesn't remove the element,
* if the length of the list cannot be changed.
*/
E removeAt(int index);
/**
* Pops and returns the last element of the list.
- * Throws a [UnsupportedOperationException] if the length of the
+ * Throws a [UnsupportedError] if the length of the
* list cannot be changed.
*/
E removeLast();
@@ -126,7 +126,7 @@
* Returns the last element of the list, or throws an out of bounds
* exception if the list is empty.
*/
- E last();
+ E get last;
/**
* Returns a new list containing [length] elements from the list,
@@ -151,7 +151,7 @@
/**
* Removes [length] elements from the list, beginning at [start].
- * Throws an [UnsupportedOperationException] if the list is
+ * Throws an [UnsupportedError] if the list is
* not extendable.
* If [length] is 0, this method does not do anything.
* Throws an [ArgumentError] if [length] is negative.
@@ -163,7 +163,7 @@
/**
* Inserts a new range into the list, starting from [start] to
* [:start + length - 1:]. The entries are filled with [initialValue].
- * Throws an [UnsupportedOperationException] if the list is
+ * Throws an [UnsupportedError] if the list is
* not extendable.
* If [length] is 0, this method does not do anything.
* If [start] is the length of the list, this method inserts the
diff --git a/lib/core/map.dart b/lib/core/map.dart
index f984deb..530d4ee 100644
--- a/lib/core/map.dart
+++ b/lib/core/map.dart
@@ -69,12 +69,12 @@
/**
* Returns a collection containing all the keys in the map.
*/
- Collection<K> getKeys();
+ Collection<K> get keys;
/**
* Returns a collection containing all the values in the map.
*/
- Collection<V> getValues();
+ Collection<V> get values;
/**
* The number of {key, value} pairs in the map.
@@ -84,13 +84,13 @@
/**
* Returns true if there is no {key, value} pair in the map.
*/
- bool isEmpty();
+ bool get isEmpty;
}
/**
* Hash map version of the [Map] interface. A [HashMap] does not
- * provide any guarantees on the order of keys and values in [getKeys]
- * and [getValues].
+ * provide any guarantees on the order of keys and values in [keys]
+ * and [values].
*/
interface HashMap<K, V> extends Map<K, V>
default HashMapImplementation<K, V> {
diff --git a/lib/core/num.dart b/lib/core/num.dart
index 6bcee59..a506ade 100644
--- a/lib/core/num.dart
+++ b/lib/core/num.dart
@@ -49,11 +49,11 @@
/** Relational greater than or equal operator. */
bool operator >=(num other);
- bool isNaN();
+ bool get isNaN;
- bool isNegative();
+ bool get isNegative;
- bool isInfinite();
+ bool get isInfinite;
/** Returns the absolute value of this [num]. */
num abs();
diff --git a/lib/core/object.dart b/lib/core/object.dart
index 30de4df..ba41cb8 100644
--- a/lib/core/object.dart
+++ b/lib/core/object.dart
@@ -38,7 +38,7 @@
* If a subclass overrides [hashCode] it should override the
* equality operator as well to maintain consistency.
*/
- external int hashCode();
+ external int get hashCode;
/**
* Returns a string representation of this object.
diff --git a/lib/core/options.dart b/lib/core/options.dart
index 0685d17..3377c30 100644
--- a/lib/core/options.dart
+++ b/lib/core/options.dart
@@ -13,7 +13,7 @@
* A newly constructed Options object contains the arguments exactly as they
* have been passed to the isolate.
*/
- factory Options() => new RuntimeOptions();
+ factory Options() => new _OptionsImpl();
/**
* Returns a list of arguments that have been passed to this isolate. Any
@@ -42,3 +42,32 @@
*/
String get script;
}
+
+class _OptionsImpl implements Options {
+ List<String> get arguments {
+ if (_arguments === null) {
+ // On first access make a copy of the native arguments.
+ _arguments = _nativeArguments.getRange(0, _nativeArguments.length);
+ }
+ return _arguments;
+ }
+
+ String get executable {
+ return _nativeExecutable;
+ }
+
+ String get script {
+ return _nativeScript;
+ }
+
+ List<String> _arguments = null;
+
+ // This arguments singleton is written to by the embedder if applicable.
+ static List<String> _nativeArguments = const [];
+
+ // This executable singleton is written to by the embedder if applicable.
+ static String _nativeExecutable = '';
+
+ // This script singleton is written to by the embedder if applicable.
+ static String _nativeScript = '';
+}
diff --git a/lib/core/queue.dart b/lib/core/queue.dart
index beff3d7..ecdfe36 100644
--- a/lib/core/queue.dart
+++ b/lib/core/queue.dart
@@ -22,13 +22,13 @@
/**
* Removes and returns the first element of this queue. Throws an
- * [EmptyQueueException] exception if this queue is empty.
+ * [StateError] exception if this queue is empty.
*/
E removeFirst();
/**
* Removes and returns the last element of the queue. Throws an
- * [EmptyQueueException] exception if this queue is empty.
+ * [StateError] exception if this queue is empty.
*/
E removeLast();
@@ -55,15 +55,15 @@
/**
* Returns the first element of the queue. Throws an
- * [EmptyQueueException] exception if this queue is empty.
+ * [StateError] exception if this queue is empty.
*/
- E first();
+ E get first;
/**
* Returns the last element of the queue. Throws an
- * [EmptyQueueException] exception if this queue is empty.
+ * [StateError] exception if this queue is empty.
*/
- E last();
+ E get last;
/**
* Removes all elements in the queue. The size of the queue becomes zero.
diff --git a/lib/core/regexp.dart b/lib/core/regexp.dart
index 5d2db7f..99f8bef 100644
--- a/lib/core/regexp.dart
+++ b/lib/core/regexp.dart
@@ -28,13 +28,13 @@
/**
* Returns the index in the string where the match starts.
*/
- int start();
+ int get start;
/**
* Returns the index in the string after the last character of the
* match.
*/
- int end();
+ int get end;
/**
* Returns the string matched by the given [group]. If [group] is 0,
@@ -52,7 +52,7 @@
/**
* Returns the number of groups in the regular expression.
*/
- int groupCount();
+ int get groupCount;
/**
* The string on which this matcher was computed.
diff --git a/lib/core/sequences.dart b/lib/core/sequences.dart
index 5ed4366..32a3b40 100644
--- a/lib/core/sequences.dart
+++ b/lib/core/sequences.dart
@@ -85,7 +85,7 @@
return false;
}
- bool isEmpty() {
+ bool get isEmpty {
return this.length == 0;
}
}
@@ -117,7 +117,7 @@
return -1;
}
- E last() => sequence[sequence.length - 1];
+ E get last => sequence[sequence.length - 1];
List<E> getRange(int start, int length) {
List<E> result = <E>[];
@@ -128,62 +128,62 @@
}
void operator []=(int index, E value) {
- throw new UnsupportedOperationException(
+ throw new UnsupportedError(
"Cannot modify an unmodifiable list");
}
void set length(int newLength) {
- throw new UnsupportedOperationException(
+ throw new UnsupportedError(
"Cannot change the length of an unmodifiable list");
}
void add(E value) {
- throw new UnsupportedOperationException(
+ throw new UnsupportedError(
"Cannot add to an unmodifiable list");
}
void addLast(E value) {
- throw new UnsupportedOperationException(
+ throw new UnsupportedError(
"Cannot add to an unmodifiable list");
}
void addAll(Collection<E> collection) {
- throw new UnsupportedOperationException(
+ throw new UnsupportedError(
"Cannot add to an unmodifiable list");
}
void sort([Comparator<E> compare]) {
- throw new UnsupportedOperationException(
+ throw new UnsupportedError(
"Cannot modify an unmodifiable list");
}
void clear() {
- throw new UnsupportedOperationException(
+ throw new UnsupportedError(
"Cannot clear an unmodifiable list");
}
E removeAt(int index) {
- throw new UnsupportedOperationException(
+ throw new UnsupportedError(
"Cannot remove in an unmodifiable list");
}
E removeLast() {
- throw new UnsupportedOperationException(
+ throw new UnsupportedError(
"Cannot remove in an unmodifiable list");
}
void setRange(int start, int length, List<E> from, [int startFrom]) {
- throw new UnsupportedOperationException(
+ throw new UnsupportedError(
"Cannot modify an unmodifiable list");
}
void removeRange(int start, int length) {
- throw new UnsupportedOperationException(
+ throw new UnsupportedError(
"Cannot remove in an unmodifiable list");
}
void insertRange(int start, int length, [E initialValue]) {
- throw new UnsupportedOperationException(
+ throw new UnsupportedError(
"Cannot insert range in an unmodifiable list");
}
}
@@ -195,10 +195,10 @@
Sequence<E> _sequence;
int _position;
SequenceIterator(this._sequence) : _position = 0;
- bool hasNext() => _position < _sequence.length;
+ bool get hasNext => _position < _sequence.length;
E next() {
- if (hasNext()) return _sequence[_position++];
- throw new NoMoreElementsException();
+ if (hasNext) return _sequence[_position++];
+ throw new StateError("No more elements");
}
}
diff --git a/lib/coreimpl/dual_pivot_quicksort.dart b/lib/core/sort.dart
similarity index 97%
rename from lib/coreimpl/dual_pivot_quicksort.dart
rename to lib/core/sort.dart
index c74e90f..252a110 100644
--- a/lib/coreimpl/dual_pivot_quicksort.dart
+++ b/lib/core/sort.dart
@@ -2,6 +2,12 @@
// 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.
+// TODO(ajohnsen): Remove once coreimpl is eliminated.
+/**
+ * WARNING: This method is temporary and will go away soon.
+ */
+void coreSort(List l, int compare(a, b)) => _Sort.sort(l, compare);
+
/**
* Dual-Pivot Quicksort algorithm.
*
@@ -10,7 +16,7 @@
*
* Some improvements have been copied from Android's implementation.
*/
-class DualPivotQuicksort {
+class _Sort {
// When a list has less then [:_INSERTION_SORT_THRESHOLD:] elements it will
// be sorted by an insertion sort.
static const int _INSERTION_SORT_THRESHOLD = 32;
diff --git a/lib/core/stopwatch.dart b/lib/core/stopwatch.dart
index e43f52d..2cb77a7 100644
--- a/lib/core/stopwatch.dart
+++ b/lib/core/stopwatch.dart
@@ -45,21 +45,20 @@
* Returns 0 if the [Stopwatch] has never been started.
* The elapsed number of clock ticks increases by [frequency] every second.
*/
- int elapsed();
+ int get elapsedTicks;
/**
- * Returns the [elapsed] counter converted to microseconds.
+ * Returns the [elapsedTicks] counter converted to microseconds.
*/
- int elapsedInUs();
+ int get elapsedMicroseconds;
/**
- * Returns the [elapsed] counter converted to milliseconds.
+ * Returns the [elapsedTicks] counter converted to milliseconds.
*/
- int elapsedInMs();
+ int get elapsedMilliseconds;
/**
* Returns the frequency of the elapsed counter in Hz.
*/
- int frequency();
-
+ int get frequency;
}
diff --git a/lib/core/string.dart b/lib/core/string.dart
index 7d23302..801e415 100644
--- a/lib/core/string.dart
+++ b/lib/core/string.dart
@@ -64,7 +64,7 @@
/**
* Returns whether this string is empty.
*/
- bool isEmpty();
+ bool get isEmpty;
/**
* Creates a new string by concatenating this string with [other].
@@ -117,7 +117,7 @@
/**
* Returns a list of the scalar character codes of this string.
*/
- List<int> charCodes();
+ List<int> get charCodes;
/**
* If this string is not already all lower case, returns a new string
diff --git a/lib/core/string_buffer.dart b/lib/core/string_buffer.dart
index 8095f6a..7530cdb 100644
--- a/lib/core/string_buffer.dart
+++ b/lib/core/string_buffer.dart
@@ -11,7 +11,8 @@
/**
* Creates the string buffer with an initial content.
*/
- factory StringBuffer([Object content = ""]) => new StringBufferImpl(content);
+ factory StringBuffer([Object content = ""])
+ => new _StringBufferImpl(content);
/**
* Returns the length of the buffer.
@@ -21,7 +22,7 @@
/**
* Returns whether the buffer is empty.
*/
- bool isEmpty();
+ bool get isEmpty;
/**
* Converts [obj] to a string and adds it to the buffer. Returns [:this:].
@@ -49,3 +50,81 @@
*/
String toString();
}
+
+class _StringBufferImpl implements StringBuffer {
+ /**
+ * Creates the string buffer with an initial content.
+ */
+ _StringBufferImpl(Object content) {
+ clear();
+ add(content);
+ }
+
+ /**
+ * Returns the length of the buffer.
+ */
+ int get length {
+ return _length;
+ }
+
+ bool get isEmpty {
+ return _length === 0;
+ }
+
+ /**
+ * Adds [obj] to the buffer. Returns [this].
+ */
+ StringBuffer add(Object obj) {
+ String str = obj.toString();
+ if (str === null || str.isEmpty) {
+ return this;
+ }
+ _buffer.add(str);
+ _length += str.length;
+ return this;
+ }
+
+ /**
+ * Adds all items in [objects] to the buffer. Returns [this].
+ */
+ StringBuffer addAll(Collection objects) {
+ for (Object obj in objects) {
+ add(obj);
+ }
+ return this;
+ }
+
+ /**
+ * Adds the string representation of [charCode] to the buffer.
+ * Returns [this].
+ */
+ StringBuffer addCharCode(int charCode) {
+ return add(new String.fromCharCodes([charCode]));
+ }
+
+ /**
+ * Clears the string buffer. Returns [this].
+ */
+ StringBuffer clear() {
+ _buffer = new List<String>();
+ _length = 0;
+ return this;
+ }
+
+ /**
+ * Returns the contents of buffer as a concatenated string.
+ */
+ String toString() {
+ if (_buffer.length === 0) return "";
+ if (_buffer.length === 1) return _buffer[0];
+ String result = StringImplementation.concatAll(_buffer);
+ _buffer.clear();
+ _buffer.add(result);
+ // Since we track the length at each add operation, there is no
+ // need to update it in this function.
+ return result;
+ }
+
+ List<String> _buffer;
+ int _length;
+}
diff --git a/lib/coreimpl/collections.dart b/lib/coreimpl/collections.dart
index 55e76fa..873e9cd 100644
--- a/lib/coreimpl/collections.dart
+++ b/lib/coreimpl/collections.dart
@@ -59,7 +59,7 @@
}
static bool isEmpty(Iterable iterable) {
- return !iterable.iterator().hasNext();
+ return !iterable.iterator().hasNext;
}
// TODO(jjb): visiting list should be an identityHashSet when it exists
diff --git a/lib/coreimpl/coreimpl.dart b/lib/coreimpl/coreimpl.dart
index d3817e7..7e5b7ec 100644
--- a/lib/coreimpl/coreimpl.dart
+++ b/lib/coreimpl/coreimpl.dart
@@ -6,17 +6,12 @@
#source("arrays.dart");
#source("collections.dart");
-#source("date.dart");
-#source("dual_pivot_quicksort.dart");
-#source("future_implementation.dart");
#source("hash_map_set.dart");
#source("linked_hash_map.dart");
#source("list.dart");
#source("maps.dart");
-#source("options.dart");
#source("queue.dart");
#source("regexp.dart");
#source("splay_tree.dart");
#source("stopwatch_implementation.dart");
#source("string.dart");
-#source("string_buffer.dart");
diff --git a/lib/coreimpl/corelib_impl_sources.gypi b/lib/coreimpl/corelib_impl_sources.gypi
index 3128f67..0ff6644 100644
--- a/lib/coreimpl/corelib_impl_sources.gypi
+++ b/lib/coreimpl/corelib_impl_sources.gypi
@@ -6,19 +6,14 @@
'sources': [
'arrays.dart',
'collections.dart',
- 'date.dart',
- 'dual_pivot_quicksort.dart',
- 'future_implementation.dart',
'hash_map_set.dart',
'linked_hash_map.dart',
'list.dart',
'maps.dart',
- 'options.dart',
'queue.dart',
'regexp.dart',
'splay_tree.dart',
'stopwatch_implementation.dart',
'string.dart',
- 'string_buffer.dart',
],
}
diff --git a/lib/coreimpl/date.dart b/lib/coreimpl/date.dart
deleted file mode 100644
index 6aba63f..0000000
--- a/lib/coreimpl/date.dart
+++ /dev/null
@@ -1,187 +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.
-
-class DateImplementation implements Date {
- final int millisecondsSinceEpoch;
- final bool isUtc;
-
- factory DateImplementation.fromString(String formattedString) {
- // Read in (a subset of) ISO 8601.
- // Examples:
- // - "2012-02-27 13:27:00"
- // - "2012-02-27 13:27:00.423z"
- // - "20120227 13:27:00"
- // - "20120227T132700"
- // - "20120227"
- // - "2012-02-27T14Z"
- // - "-123450101 00:00:00 Z" // In the year -12345.
- final RegExp re = const RegExp(
- r'^([+-]?\d?\d\d\d\d)-?(\d\d)-?(\d\d)' // The day part.
- r'(?:[ T](\d\d)(?::?(\d\d)(?::?(\d\d)(.\d{1,6})?)?)? ?([zZ])?)?$');
- Match match = re.firstMatch(formattedString);
- if (match !== null) {
- int parseIntOrZero(String matched) {
- // TODO(floitsch): we should not need to test against the empty string.
- if (matched === null || matched == "") return 0;
- return int.parse(matched);
- }
-
- double parseDoubleOrZero(String matched) {
- // TODO(floitsch): we should not need to test against the empty string.
- if (matched === null || matched == "") return 0.0;
- return double.parse(matched);
- }
-
- int years = int.parse(match[1]);
- int month = int.parse(match[2]);
- int day = int.parse(match[3]);
- int hour = parseIntOrZero(match[4]);
- int minute = parseIntOrZero(match[5]);
- int second = parseIntOrZero(match[6]);
- bool addOneMillisecond = false;
- int millisecond = (parseDoubleOrZero(match[7]) * 1000).round().toInt();
- if (millisecond == 1000) {
- addOneMillisecond = true;
- millisecond = 999;
- }
- // TODO(floitsch): we should not need to test against the empty string.
- bool isUtc = (match[8] !== null) && (match[8] != "");
- int millisecondsSinceEpoch = _brokenDownDateToMillisecondsSinceEpoch(
- years, month, day, hour, minute, second, millisecond, isUtc);
- if (millisecondsSinceEpoch === null) {
- throw new ArgumentError(formattedString);
- }
- if (addOneMillisecond) millisecondsSinceEpoch++;
- return new Date.fromMillisecondsSinceEpoch(millisecondsSinceEpoch,
- isUtc: isUtc);
- } else {
- throw new ArgumentError(formattedString);
- }
- }
-
- static const int _MAX_MILLISECONDS_SINCE_EPOCH = 8640000000000000;
-
- DateImplementation.fromMillisecondsSinceEpoch(this.millisecondsSinceEpoch,
- this.isUtc) {
- if (millisecondsSinceEpoch.abs() > _MAX_MILLISECONDS_SINCE_EPOCH) {
- throw new ArgumentError(millisecondsSinceEpoch);
- }
- if (isUtc === null) throw new ArgumentError(isUtc);
- }
-
- bool operator ==(other) {
- if (!(other is Date)) return false;
- return (millisecondsSinceEpoch == other.millisecondsSinceEpoch);
- }
-
- bool operator <(Date other)
- => millisecondsSinceEpoch < other.millisecondsSinceEpoch;
-
- bool operator <=(Date other)
- => millisecondsSinceEpoch <= other.millisecondsSinceEpoch;
-
- bool operator >(Date other)
- => millisecondsSinceEpoch > other.millisecondsSinceEpoch;
-
- bool operator >=(Date other)
- => millisecondsSinceEpoch >= other.millisecondsSinceEpoch;
-
- int compareTo(Date other)
- => millisecondsSinceEpoch.compareTo(other.millisecondsSinceEpoch);
-
- int hashCode() => millisecondsSinceEpoch;
-
- Date toLocal() {
- if (isUtc) {
- return new Date.fromMillisecondsSinceEpoch(millisecondsSinceEpoch,
- isUtc: false);
- }
- return this;
- }
-
- Date toUtc() {
- if (isUtc) return this;
- return new Date.fromMillisecondsSinceEpoch(millisecondsSinceEpoch,
- isUtc: true);
- }
-
- String toString() {
- String fourDigits(int n) {
- int absN = n.abs();
- String sign = n < 0 ? "-" : "";
- if (absN >= 1000) return "$n";
- if (absN >= 100) return "${sign}0$absN";
- if (absN >= 10) return "${sign}00$absN";
- return "${sign}000$absN";
- }
-
- String threeDigits(int n) {
- if (n >= 100) return "${n}";
- if (n >= 10) return "0${n}";
- return "00${n}";
- }
-
- String twoDigits(int n) {
- if (n >= 10) return "${n}";
- return "0${n}";
- }
-
- String y = fourDigits(year);
- String m = twoDigits(month);
- String d = twoDigits(day);
- String h = twoDigits(hour);
- String min = twoDigits(minute);
- String sec = twoDigits(second);
- String ms = threeDigits(millisecond);
- if (isUtc) {
- return "$y-$m-$d $h:$min:$sec.${ms}Z";
- } else {
- return "$y-$m-$d $h:$min:$sec.$ms";
- }
- }
-
- /** Returns a new [Date] with the [duration] added to [this]. */
- Date add(Duration duration) {
- int ms = millisecondsSinceEpoch;
- return new Date.fromMillisecondsSinceEpoch(
- ms + duration.inMilliseconds, isUtc: isUtc);
- }
-
- /** Returns a new [Date] with the [duration] subtracted from [this]. */
- Date subtract(Duration duration) {
- int ms = millisecondsSinceEpoch;
- return new Date.fromMillisecondsSinceEpoch(
- ms - duration.inMilliseconds, isUtc: isUtc);
- }
-
- /** Returns a [Duration] with the difference of [this] and [other]. */
- Duration difference(Date other) {
- int ms = millisecondsSinceEpoch;
- int otherMs = other.millisecondsSinceEpoch;
- return new Duration(milliseconds: ms - otherMs);
- }
-
- external DateImplementation(int year,
- int month,
- int day,
- int hour,
- int minute,
- int second,
- int millisecond,
- bool isUtc);
- external DateImplementation.now();
- external static int _brokenDownDateToMillisecondsSinceEpoch(
- int year, int month, int day, int hour, int minute, int second,
- int millisecond, bool isUtc);
- external String get timeZoneName;
- external Duration get timeZoneOffset;
- external int get year;
- external int get month;
- external int get day;
- external int get hour;
- external int get minute;
- external int get second;
- external int get millisecond;
- external int get weekday;
-}
diff --git a/lib/coreimpl/hash_map_set.dart b/lib/coreimpl/hash_map_set.dart
index cb723a5..d696150 100644
--- a/lib/coreimpl/hash_map_set.dart
+++ b/lib/coreimpl/hash_map_set.dart
@@ -70,7 +70,7 @@
int _probeForAdding(K key) {
if (key == null) throw const NullPointerException();
- int hash = _firstProbe(key.hashCode(), _keys.length);
+ int hash = _firstProbe(key.hashCode, _keys.length);
int numberOfProbes = 1;
int initialHash = hash;
// insertionIndex points to a slot where a key was deleted.
@@ -104,7 +104,7 @@
int _probeForLookup(K key) {
if (key == null) throw const NullPointerException();
- int hash = _firstProbe(key.hashCode(), _keys.length);
+ int hash = _firstProbe(key.hashCode, _keys.length);
int numberOfProbes = 1;
int initialHash = hash;
while (true) {
@@ -219,7 +219,7 @@
return null;
}
- bool isEmpty() {
+ bool get isEmpty {
return _numberOfEntries == 0;
}
@@ -238,7 +238,7 @@
}
- Collection<K> getKeys() {
+ Collection<K> get keys {
List<K> list = new List<K>(length);
int i = 0;
forEach(void _(K key, V value) {
@@ -247,7 +247,7 @@
return list;
}
- Collection<V> getValues() {
+ Collection<V> get values {
List<V> list = new List<V>(length);
int i = 0;
forEach(void _(K key, V value) {
@@ -366,17 +366,17 @@
}
bool every(bool f(E element)) {
- Collection<E> keys = _backingMap.getKeys();
+ Collection<E> keys = _backingMap.keys;
return keys.every(f);
}
bool some(bool f(E element)) {
- Collection<E> keys = _backingMap.getKeys();
+ Collection<E> keys = _backingMap.keys;
return keys.some(f);
}
- bool isEmpty() {
- return _backingMap.isEmpty();
+ bool get isEmpty {
+ return _backingMap.isEmpty;
}
int get length {
@@ -406,7 +406,7 @@
_advance();
}
- bool hasNext() {
+ bool get hasNext {
if (_nextValidIndex >= _entries.length) return false;
if (_entries[_nextValidIndex] === HashMapImplementation._DELETED_KEY) {
// This happens in case the set was modified in the meantime.
@@ -418,8 +418,8 @@
}
E next() {
- if (!hasNext()) {
- throw const NoMoreElementsException();
+ if (!hasNext) {
+ throw new StateError("No more elements");
}
E res = _entries[_nextValidIndex];
_advance();
diff --git a/lib/coreimpl/linked_hash_map.dart b/lib/coreimpl/linked_hash_map.dart
index 37f3169..3534028 100644
--- a/lib/coreimpl/linked_hash_map.dart
+++ b/lib/coreimpl/linked_hash_map.dart
@@ -65,7 +65,7 @@
return value;
}
- Collection<K> getKeys() {
+ Collection<K> get keys {
List<K> list = new List<K>(length);
int index = 0;
_list.forEach(void _(KeyValuePair<K, V> entry) {
@@ -76,7 +76,7 @@
}
- Collection<V> getValues() {
+ Collection<V> get values {
List<V> list = new List<V>(length);
int index = 0;
_list.forEach(void _(KeyValuePair<K, V> entry) {
@@ -106,7 +106,7 @@
return _map.length;
}
- bool isEmpty() {
+ bool get isEmpty {
return length == 0;
}
diff --git a/lib/coreimpl/maps.dart b/lib/coreimpl/maps.dart
index d120729..a8b4308 100644
--- a/lib/coreimpl/maps.dart
+++ b/lib/coreimpl/maps.dart
@@ -4,13 +4,13 @@
/*
* Helper class which implements complex [Map] operations
- * in term of basic ones ([Map.getKeys], [Map.operator []],
+ * in term of basic ones ([Map.keys], [Map.operator []],
* [Map.operator []=] and [Map.remove].) Not all methods are
* necessary to implement each particular operation.
*/
class Maps {
static bool containsValue(Map map, value) {
- for (final v in map.getValues()) {
+ for (final v in map.values) {
if (value == v) {
return true;
}
@@ -19,7 +19,7 @@
}
static bool containsKey(Map map, key) {
- for (final k in map.getKeys()) {
+ for (final k in map.keys) {
if (key == k) {
return true;
}
@@ -37,26 +37,26 @@
}
static clear(Map map) {
- for (final k in map.getKeys()) {
+ for (final k in map.keys) {
map.remove(k);
}
}
static forEach(Map map, void f(key, value)) {
- for (final k in map.getKeys()) {
+ for (final k in map.keys) {
f(k, map[k]);
}
}
static Collection getValues(Map map) {
final result = [];
- for (final k in map.getKeys()) {
+ for (final k in map.keys) {
result.add(map[k]);
}
return result;
}
- static int length(Map map) => map.getKeys().length;
+ static int length(Map map) => map.keys.length;
static bool isEmpty(Map map) => length(map) == 0;
diff --git a/lib/coreimpl/options.dart b/lib/coreimpl/options.dart
deleted file mode 100644
index 87f70e2..0000000
--- a/lib/coreimpl/options.dart
+++ /dev/null
@@ -1,32 +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.
-
-class RuntimeOptions implements Options {
- List<String> get arguments {
- if (_arguments === null) {
- // On first access make a copy of the native arguments.
- _arguments = _nativeArguments.getRange(0, _nativeArguments.length);
- }
- return _arguments;
- }
-
- String get executable {
- return _nativeExecutable;
- }
-
- String get script {
- return _nativeScript;
- }
-
- List<String> _arguments = null;
-
- // This arguments singleton is written to by the embedder if applicable.
- static List<String> _nativeArguments = const [];
-
- // This executable singleton is written to by the embedder if applicable.
- static String _nativeExecutable = '';
-
- // This script singleton is written to by the embedder if applicable.
- static String _nativeScript = '';
-}
diff --git a/lib/coreimpl/queue.dart b/lib/coreimpl/queue.dart
index 150752a7..b56d7d1 100644
--- a/lib/coreimpl/queue.dart
+++ b/lib/coreimpl/queue.dart
@@ -74,7 +74,7 @@
}
E remove() {
- throw const EmptyQueueException();
+ throw new StateError("Empty queue");
}
DoubleLinkedQueueEntry<E> _asNonSentinelEntry() {
@@ -87,7 +87,7 @@
}
E get element {
- throw const EmptyQueueException();
+ throw new StateError("Empty queue");
}
}
@@ -136,11 +136,11 @@
return _sentinel._next.remove();
}
- E first() {
+ E get first {
return _sentinel._next.element;
}
- E last() {
+ E get last {
return _sentinel._previous.element;
}
@@ -158,7 +158,7 @@
return counter;
}
- bool isEmpty() {
+ bool get isEmpty {
return (_sentinel._next === _sentinel);
}
@@ -249,13 +249,13 @@
_currentEntry = _sentinel;
}
- bool hasNext() {
+ bool get hasNext {
return _currentEntry._next !== _sentinel;
}
E next() {
- if (!hasNext()) {
- throw const NoMoreElementsException();
+ if (!hasNext) {
+ throw new StateError("No more elements");
}
_currentEntry = _currentEntry._next;
return _currentEntry.element;
diff --git a/lib/coreimpl/splay_tree.dart b/lib/coreimpl/splay_tree.dart
index d5dcef5..974c2bc 100644
--- a/lib/coreimpl/splay_tree.dart
+++ b/lib/coreimpl/splay_tree.dart
@@ -51,7 +51,7 @@
* "Self-adjusting Binary Search Trees" by Sleator and Tarjan.
*/
void splay_(K key) {
- if (isEmpty()) return;
+ if (isEmpty) return;
// The right child of the dummy node will hold
// the L tree of the algorithm. The left child of the dummy node
@@ -106,7 +106,7 @@
}
V operator [](K key) {
- if (!isEmpty()) {
+ if (!isEmpty) {
splay_(key);
if (_root.key.compareTo(key) == 0) return _root.value;
}
@@ -114,7 +114,7 @@
}
V remove(K key) {
- if (isEmpty()) return null;
+ if (isEmpty) return null;
splay_(key);
if (_root.key.compareTo(key) != 0) return null;
V value = _root.value;
@@ -136,7 +136,7 @@
}
void operator []=(K key, V value) {
- if (isEmpty()) {
+ if (isEmpty) {
_count++;
_root = new SplayTreeNode(key, value);
return;
@@ -170,7 +170,7 @@
return value;
}
- bool isEmpty() {
+ bool get isEmpty {
// assert(!((_root === null) && (_count != 0)));
// assert(!((_count == 0) && (_root !== null)));
return (_root === null);
@@ -186,7 +186,7 @@
} else {
f(current.key, current.value);
while (current.right === null) {
- if (list.isEmpty()) return;
+ if (list.isEmpty) return;
current = list.removeLast();
f(current.key, current.value);
}
@@ -205,7 +205,7 @@
}
bool containsKey(K key) {
- if (!isEmpty()) {
+ if (!isEmpty) {
splay_(key);
if (_root.key.compareTo(key) == 0) return true;
}
@@ -222,13 +222,13 @@
return visit(_root);
}
- Collection<K> getKeys() {
+ Collection<K> get keys {
List<K> list = new List<K>();
forEach((K k, V v) { list.add(k); });
return list;
}
- Collection<V> getValues() {
+ Collection<V> get values {
List<V> list = new List<V>();
forEach((K k, V v) { list.add(v); });
return list;
diff --git a/lib/coreimpl/stopwatch_implementation.dart b/lib/coreimpl/stopwatch_implementation.dart
index f22f210..30b4ca2 100644
--- a/lib/coreimpl/stopwatch_implementation.dart
+++ b/lib/coreimpl/stopwatch_implementation.dart
@@ -50,22 +50,22 @@
}
}
- int elapsed() {
+ int get elapsedTicks {
if (_start === null) {
return 0;
}
return (_stop === null) ? (_now() - _start) : (_stop - _start);
}
- int elapsedInUs() {
- return (elapsed() * 1000000) ~/ frequency();
+ int get elapsedMicroseconds {
+ return (elapsedTicks * 1000000) ~/ frequency;
}
- int elapsedInMs() {
- return (elapsed() * 1000) ~/ frequency();
+ int get elapsedMilliseconds {
+ return (elapsedTicks * 1000) ~/ frequency;
}
- int frequency() => _frequency();
+ int get frequency => _frequency();
external static int _frequency();
external static int _now();
diff --git a/lib/coreimpl/string_buffer.dart b/lib/coreimpl/string_buffer.dart
deleted file mode 100644
index ceb5935..0000000
--- a/lib/coreimpl/string_buffer.dart
+++ /dev/null
@@ -1,86 +0,0 @@
-// Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-/**
- * The StringBuffer class is useful for concatenating strings
- * efficiently. Only on a call to [toString] are the strings
- * concatenated to a single String.
- */
-class StringBufferImpl implements StringBuffer {
- /**
- * Creates the string buffer with an initial content.
- */
- StringBufferImpl(Object content) {
- clear();
- add(content);
- }
-
- /**
- * Returns the length of the buffer.
- */
- int get length {
- return _length;
- }
-
- bool isEmpty() {
- return _length === 0;
- }
-
- /**
- * Adds [obj] to the buffer. Returns [this].
- */
- StringBuffer add(Object obj) {
- String str = obj.toString();
- if (str === null || str.isEmpty()) {
- return this;
- }
- _buffer.add(str);
- _length += str.length;
- return this;
- }
-
- /**
- * Adds all items in [objects] to the buffer. Returns [this].
- */
- StringBuffer addAll(Collection objects) {
- for (Object obj in objects) {
- add(obj);
- }
- return this;
- }
-
- /**
- * Adds the string representation of [charCode] to the buffer.
- * Returns [this].
- */
- StringBuffer addCharCode(int charCode) {
- return add(new String.fromCharCodes([charCode]));
- }
-
- /**
- * Clears the string buffer. Returns [this].
- */
- StringBuffer clear() {
- _buffer = new List<String>();
- _length = 0;
- return this;
- }
-
- /**
- * Returns the contents of buffer as a concatenated string.
- */
- String toString() {
- if (_buffer.length === 0) return "";
- if (_buffer.length === 1) return _buffer[0];
- String result = StringImplementation.concatAll(_buffer);
- _buffer.clear();
- _buffer.add(result);
- // Since we track the length at each add operation, there is no
- // need to update it in this function.
- return result;
- }
-
- List<String> _buffer;
- int _length;
-}
diff --git a/lib/html/dart2js/html_dart2js.dart b/lib/html/dart2js/html_dart2js.dart
index 537402a..738c5d4 100644
--- a/lib/html/dart2js/html_dart2js.dart
+++ b/lib/html/dart2js/html_dart2js.dart
@@ -1,7 +1,7 @@
-#library('dart:html');
+library html;
-#import('dart:isolate');
-#import('dart:json');
+import 'dart:isolate';
+import 'dart:json';
// 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.
@@ -15,12 +15,12 @@
-LocalWindow get window() => JS('LocalWindow', 'window');
-_LocalWindowImpl get _window() => JS('_LocalWindowImpl', 'window');
+LocalWindow get window => JS('LocalWindow', 'window');
+_LocalWindowImpl get _window => JS('_LocalWindowImpl', 'window');
-Document get document() => JS('Document', 'document');
+Document get document => JS('Document', 'document');
-_DocumentImpl get _document() => JS('_DocumentImpl', 'document');
+_DocumentImpl get _document => JS('_DocumentImpl', 'document');
Element query(String selector) => _document.query(selector);
List<Element> queryAll(String selector) => _document.queryAll(selector);
@@ -135,7 +135,7 @@
String name;
/** @domName HTMLAnchorElement.origin */
- abstract String get origin;
+ String get origin;
/** @domName HTMLAnchorElement.pathname */
String pathname;
@@ -237,31 +237,31 @@
static const int FILL_NONE = 0;
/** @domName WebKitAnimation.delay */
- abstract num get delay;
+ num get delay;
/** @domName WebKitAnimation.direction */
- abstract int get direction;
+ int get direction;
/** @domName WebKitAnimation.duration */
- abstract num get duration;
+ num get duration;
/** @domName WebKitAnimation.elapsedTime */
num elapsedTime;
/** @domName WebKitAnimation.ended */
- abstract bool get ended;
+ bool get ended;
/** @domName WebKitAnimation.fillMode */
- abstract int get fillMode;
+ int get fillMode;
/** @domName WebKitAnimation.iterationCount */
- abstract int get iterationCount;
+ int get iterationCount;
/** @domName WebKitAnimation.name */
- abstract String get name;
+ String get name;
/** @domName WebKitAnimation.paused */
- abstract bool get paused;
+ bool get paused;
/** @domName WebKitAnimation.pause */
void pause();
@@ -279,10 +279,10 @@
abstract class AnimationEvent implements Event {
/** @domName WebKitAnimationEvent.animationName */
- abstract String get animationName;
+ String get animationName;
/** @domName WebKitAnimationEvent.elapsedTime */
- abstract num get elapsedTime;
+ num get elapsedTime;
}
class _AnimationEventImpl extends _EventImpl implements AnimationEvent native "*WebKitAnimationEvent" {
@@ -401,13 +401,13 @@
String coords;
/** @domName HTMLAreaElement.hash */
- abstract String get hash;
+ String get hash;
/** @domName HTMLAreaElement.host */
- abstract String get host;
+ String get host;
/** @domName HTMLAreaElement.hostname */
- abstract String get hostname;
+ String get hostname;
/** @domName HTMLAreaElement.href */
String href;
@@ -416,19 +416,19 @@
bool noHref;
/** @domName HTMLAreaElement.pathname */
- abstract String get pathname;
+ String get pathname;
/** @domName HTMLAreaElement.ping */
String ping;
/** @domName HTMLAreaElement.port */
- abstract String get port;
+ String get port;
/** @domName HTMLAreaElement.protocol */
- abstract String get protocol;
+ String get protocol;
/** @domName HTMLAreaElement.search */
- abstract String get search;
+ String get search;
/** @domName HTMLAreaElement.shape */
String shape;
@@ -479,7 +479,7 @@
factory ArrayBuffer(int length) => _ArrayBufferFactoryProvider.createArrayBuffer(length);
/** @domName ArrayBuffer.byteLength */
- abstract int get byteLength;
+ int get byteLength;
/** @domName ArrayBuffer.slice */
ArrayBuffer slice(int begin, [int end]);
@@ -501,13 +501,13 @@
abstract class ArrayBufferView {
/** @domName ArrayBufferView.buffer */
- abstract ArrayBuffer get buffer;
+ ArrayBuffer get buffer;
/** @domName ArrayBufferView.byteLength */
- abstract int get byteLength;
+ int get byteLength;
/** @domName ArrayBufferView.byteOffset */
- abstract int get byteOffset;
+ int get byteOffset;
}
class _ArrayBufferViewImpl implements ArrayBufferView native "*ArrayBufferView" {
@@ -528,16 +528,16 @@
abstract class Attr implements Node {
/** @domName Attr.isId */
- abstract bool get isId;
+ bool get isId;
/** @domName Attr.name */
- abstract String get name;
+ String get name;
/** @domName Attr.ownerElement */
- abstract Element get ownerElement;
+ Element get ownerElement;
/** @domName Attr.specified */
- abstract bool get specified;
+ bool get specified;
/** @domName Attr.value */
String value;
@@ -565,19 +565,19 @@
abstract class AudioBuffer {
/** @domName AudioBuffer.duration */
- abstract num get duration;
+ num get duration;
/** @domName AudioBuffer.gain */
num gain;
/** @domName AudioBuffer.length */
- abstract int get length;
+ int get length;
/** @domName AudioBuffer.numberOfChannels */
- abstract int get numberOfChannels;
+ int get numberOfChannels;
/** @domName AudioBuffer.sampleRate */
- abstract num get sampleRate;
+ num get sampleRate;
/** @domName AudioBuffer.getChannelData */
Float32Array getChannelData(int channelIndex);
@@ -588,6 +588,7 @@
// WARNING: Do not edit - generated code.
+
typedef void AudioBufferCallback(AudioBuffer audioBuffer);
class _AudioBufferImpl implements AudioBuffer native "*AudioBuffer" {
@@ -625,7 +626,7 @@
AudioBuffer buffer;
/** @domName AudioBufferSourceNode.gain */
- abstract AudioGain get gain;
+ AudioGain get gain;
/** @domName AudioBufferSourceNode.loop */
bool loop;
@@ -634,10 +635,10 @@
bool looping;
/** @domName AudioBufferSourceNode.playbackRate */
- abstract AudioParam get playbackRate;
+ AudioParam get playbackRate;
/** @domName AudioBufferSourceNode.playbackState */
- abstract int get playbackState;
+ int get playbackState;
/** @domName AudioBufferSourceNode.start */
void start(num when, [num grainOffset, num grainDuration]);
@@ -724,6 +725,7 @@
// WARNING: Do not edit - generated code.
+
/// @domName AudioContext
abstract class AudioContext implements EventTarget {
factory AudioContext() => _AudioContextFactoryProvider.createAudioContext();
@@ -734,19 +736,19 @@
AudioContextEvents get on;
/** @domName AudioContext.activeSourceCount */
- abstract int get activeSourceCount;
+ int get activeSourceCount;
/** @domName AudioContext.currentTime */
- abstract num get currentTime;
+ num get currentTime;
/** @domName AudioContext.destination */
- abstract AudioDestinationNode get destination;
+ AudioDestinationNode get destination;
/** @domName AudioContext.listener */
- abstract AudioListener get listener;
+ AudioListener get listener;
/** @domName AudioContext.sampleRate */
- abstract num get sampleRate;
+ num get sampleRate;
/** @domName AudioContext.createAnalyser */
RealtimeAnalyserNode createAnalyser();
@@ -880,7 +882,7 @@
abstract class AudioDestinationNode implements AudioNode {
/** @domName AudioDestinationNode.numberOfChannels */
- abstract int get numberOfChannels;
+ int get numberOfChannels;
}
class _AudioDestinationNodeImpl extends _AudioNodeImpl implements AudioDestinationNode native "*AudioDestinationNode" {
@@ -928,7 +930,7 @@
abstract class AudioGainNode implements AudioNode {
/** @domName AudioGainNode.gain */
- abstract AudioGain get gain;
+ AudioGain get gain;
}
class _AudioGainNodeImpl extends _AudioNodeImpl implements AudioGainNode native "*AudioGainNode" {
@@ -982,13 +984,13 @@
abstract class AudioNode {
/** @domName AudioNode.context */
- abstract AudioContext get context;
+ AudioContext get context;
/** @domName AudioNode.numberOfInputs */
- abstract int get numberOfInputs;
+ int get numberOfInputs;
/** @domName AudioNode.numberOfOutputs */
- abstract int get numberOfOutputs;
+ int get numberOfOutputs;
/** @domName AudioNode.connect */
void connect(destination, int output, [int input]);
@@ -1031,7 +1033,7 @@
static const int SOUNDFIELD = 2;
/** @domName AudioPannerNode.coneGain */
- abstract AudioGain get coneGain;
+ AudioGain get coneGain;
/** @domName AudioPannerNode.coneInnerAngle */
num coneInnerAngle;
@@ -1043,7 +1045,7 @@
num coneOuterGain;
/** @domName AudioPannerNode.distanceGain */
- abstract AudioGain get distanceGain;
+ AudioGain get distanceGain;
/** @domName AudioPannerNode.distanceModel */
int distanceModel;
@@ -1108,19 +1110,19 @@
abstract class AudioParam {
/** @domName AudioParam.defaultValue */
- abstract num get defaultValue;
+ num get defaultValue;
/** @domName AudioParam.maxValue */
- abstract num get maxValue;
+ num get maxValue;
/** @domName AudioParam.minValue */
- abstract num get minValue;
+ num get minValue;
/** @domName AudioParam.name */
- abstract String get name;
+ String get name;
/** @domName AudioParam.units */
- abstract int get units;
+ int get units;
/** @domName AudioParam.value */
num value;
@@ -1180,10 +1182,10 @@
abstract class AudioProcessingEvent implements Event {
/** @domName AudioProcessingEvent.inputBuffer */
- abstract AudioBuffer get inputBuffer;
+ AudioBuffer get inputBuffer;
/** @domName AudioProcessingEvent.outputBuffer */
- abstract AudioBuffer get outputBuffer;
+ AudioBuffer get outputBuffer;
}
class _AudioProcessingEventImpl extends _EventImpl implements AudioProcessingEvent native "*AudioProcessingEvent" {
@@ -1233,7 +1235,7 @@
abstract class BarInfo {
/** @domName BarInfo.visible */
- abstract bool get visible;
+ bool get visible;
}
class _BarInfoImpl implements BarInfo native "*BarInfo" {
@@ -1306,16 +1308,16 @@
BatteryManagerEvents get on;
/** @domName BatteryManager.charging */
- abstract bool get charging;
+ bool get charging;
/** @domName BatteryManager.chargingTime */
- abstract num get chargingTime;
+ num get chargingTime;
/** @domName BatteryManager.dischargingTime */
- abstract num get dischargingTime;
+ num get dischargingTime;
/** @domName BatteryManager.level */
- abstract num get level;
+ num get level;
/** @domName BatteryManager.addEventListener */
void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
@@ -1379,7 +1381,7 @@
abstract class BeforeLoadEvent implements Event {
/** @domName BeforeLoadEvent.url */
- abstract String get url;
+ String get url;
}
class _BeforeLoadEventImpl extends _EventImpl implements BeforeLoadEvent native "*BeforeLoadEvent" {
@@ -1412,13 +1414,13 @@
static const int PEAKING = 5;
/** @domName BiquadFilterNode.Q */
- abstract AudioParam get Q;
+ AudioParam get Q;
/** @domName BiquadFilterNode.frequency */
- abstract AudioParam get frequency;
+ AudioParam get frequency;
/** @domName BiquadFilterNode.gain */
- abstract AudioParam get gain;
+ AudioParam get gain;
/** @domName BiquadFilterNode.type */
int type;
@@ -1459,10 +1461,10 @@
}
/** @domName Blob.size */
- abstract int get size;
+ int get size;
/** @domName Blob.type */
- abstract String get type;
+ String get type;
/** @domName Blob.slice */
Blob slice([int start, int end, String contentType]);
@@ -1600,7 +1602,7 @@
bool disabled;
/** @domName HTMLButtonElement.form */
- abstract FormElement get form;
+ FormElement get form;
/** @domName HTMLButtonElement.formAction */
String formAction;
@@ -1618,7 +1620,7 @@
String formTarget;
/** @domName HTMLButtonElement.labels */
- abstract List<Node> get labels;
+ List<Node> get labels;
/** @domName HTMLButtonElement.name */
String name;
@@ -1627,16 +1629,16 @@
String type;
/** @domName HTMLButtonElement.validationMessage */
- abstract String get validationMessage;
+ String get validationMessage;
/** @domName HTMLButtonElement.validity */
- abstract ValidityState get validity;
+ ValidityState get validity;
/** @domName HTMLButtonElement.value */
String value;
/** @domName HTMLButtonElement.willValidate */
- abstract bool get willValidate;
+ bool get willValidate;
/** @domName HTMLButtonElement.checkValidity */
bool checkValidity();
@@ -1720,7 +1722,7 @@
abstract class CSSFontFaceRule implements CSSRule {
/** @domName CSSFontFaceRule.style */
- abstract CSSStyleDeclaration get style;
+ CSSStyleDeclaration get style;
}
class _CSSFontFaceRuleImpl extends _CSSRuleImpl implements CSSFontFaceRule native "*CSSFontFaceRule" {
@@ -1737,13 +1739,13 @@
abstract class CSSImportRule implements CSSRule {
/** @domName CSSImportRule.href */
- abstract String get href;
+ String get href;
/** @domName CSSImportRule.media */
- abstract MediaList get media;
+ MediaList get media;
/** @domName CSSImportRule.styleSheet */
- abstract CSSStyleSheet get styleSheet;
+ CSSStyleSheet get styleSheet;
}
class _CSSImportRuleImpl extends _CSSRuleImpl implements CSSImportRule native "*CSSImportRule" {
@@ -1767,7 +1769,7 @@
String keyText;
/** @domName WebKitCSSKeyframeRule.style */
- abstract CSSStyleDeclaration get style;
+ CSSStyleDeclaration get style;
}
class _CSSKeyframeRuleImpl extends _CSSRuleImpl implements CSSKeyframeRule native "*WebKitCSSKeyframeRule" {
@@ -1786,7 +1788,7 @@
abstract class CSSKeyframesRule implements CSSRule {
/** @domName WebKitCSSKeyframesRule.cssRules */
- abstract List<CSSRule> get cssRules;
+ List<CSSRule> get cssRules;
/** @domName WebKitCSSKeyframesRule.name */
String name;
@@ -2002,10 +2004,10 @@
abstract class CSSMediaRule implements CSSRule {
/** @domName CSSMediaRule.cssRules */
- abstract List<CSSRule> get cssRules;
+ List<CSSRule> get cssRules;
/** @domName CSSMediaRule.media */
- abstract MediaList get media;
+ MediaList get media;
/** @domName CSSMediaRule.deleteRule */
void deleteRule(int index);
@@ -2037,7 +2039,7 @@
String selectorText;
/** @domName CSSPageRule.style */
- abstract CSSStyleDeclaration get style;
+ CSSStyleDeclaration get style;
}
class _CSSPageRuleImpl extends _CSSRuleImpl implements CSSPageRule native "*CSSPageRule" {
@@ -2114,7 +2116,7 @@
static const int CSS_VW = 26;
/** @domName CSSPrimitiveValue.primitiveType */
- abstract int get primitiveType;
+ int get primitiveType;
/** @domName CSSPrimitiveValue.getCounterValue */
Counter getCounterValue();
@@ -2187,13 +2189,13 @@
String cssText;
/** @domName CSSRule.parentRule */
- abstract CSSRule get parentRule;
+ CSSRule get parentRule;
/** @domName CSSRule.parentStyleSheet */
- abstract CSSStyleSheet get parentStyleSheet;
+ CSSStyleSheet get parentStyleSheet;
/** @domName CSSRule.type */
- abstract int get type;
+ int get type;
}
class _CSSRuleImpl implements CSSRule native "*CSSRule" {
@@ -2214,7 +2216,7 @@
_CSSRuleImpl operator[](int index) => JS("_CSSRuleImpl", "#[#]", this, index);
void operator[]=(int index, _CSSRuleImpl value) {
- throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+ throw new UnsupportedError("Cannot assign element of immutable List.");
}
// -- start List<CSSRule> mixins.
// CSSRule is the element type.
@@ -2231,15 +2233,15 @@
// From Collection<CSSRule>:
void add(CSSRule value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addLast(CSSRule value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addAll(Collection<CSSRule> collection) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
bool contains(CSSRule element) => _Collections.contains(this, element);
@@ -2255,38 +2257,38 @@
bool some(bool f(CSSRule element)) => _Collections.some(this, f);
- bool isEmpty() => this.length == 0;
+ bool get isEmpty => this.length == 0;
// From List<CSSRule>:
void sort([Comparator<CSSRule> compare = Comparable.compare]) {
- throw const UnsupportedOperationException("Cannot sort immutable List.");
+ throw new UnsupportedError("Cannot sort immutable List.");
}
int indexOf(CSSRule element, [int start = 0]) =>
_Lists.indexOf(this, element, start, this.length);
int lastIndexOf(CSSRule element, [int start]) {
- if (start === null) start = length - 1;
+ if (start == null) start = length - 1;
return _Lists.lastIndexOf(this, element, start);
}
- CSSRule last() => this[length - 1];
+ CSSRule get last => this[length - 1];
CSSRule removeLast() {
- throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+ throw new UnsupportedError("Cannot removeLast on immutable List.");
}
void setRange(int start, int rangeLength, List<CSSRule> from, [int startFrom]) {
- throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+ throw new UnsupportedError("Cannot setRange on immutable List.");
}
void removeRange(int start, int rangeLength) {
- throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+ throw new UnsupportedError("Cannot removeRange on immutable List.");
}
void insertRange(int start, int rangeLength, [CSSRule initialValue]) {
- throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+ throw new UnsupportedError("Cannot insertRange on immutable List.");
}
List<CSSRule> getRange(int start, int rangeLength) =>
@@ -2302,6 +2304,7 @@
// WARNING: Do not edit - generated code.
+
/// @domName CSSStyleDeclaration
abstract class CSSStyleDeclaration {
factory CSSStyleDeclaration() => _CSSStyleDeclarationFactoryProvider.createCSSStyleDeclaration();
@@ -2312,10 +2315,10 @@
String cssText;
/** @domName CSSStyleDeclaration.length */
- abstract int get length;
+ int get length;
/** @domName CSSStyleDeclaration.parentRule */
- abstract CSSRule get parentRule;
+ CSSRule get parentRule;
/** @domName CSSStyleDeclaration.getPropertyCSSValue */
CSSValue getPropertyCSSValue(String propertyName);
@@ -4191,7 +4194,7 @@
String _cachedBrowserPrefix;
String get _browserPrefix {
- if (_cachedBrowserPrefix === null) {
+ if (_cachedBrowserPrefix == null) {
if (_Device.isFirefox) {
_cachedBrowserPrefix = '-moz-';
} else if (_Device.isIE) {
@@ -7019,7 +7022,7 @@
String selectorText;
/** @domName CSSStyleRule.style */
- abstract CSSStyleDeclaration get style;
+ CSSStyleDeclaration get style;
}
class _CSSStyleRuleImpl extends _CSSRuleImpl implements CSSStyleRule native "*CSSStyleRule" {
@@ -7038,13 +7041,13 @@
abstract class CSSStyleSheet implements StyleSheet {
/** @domName CSSStyleSheet.cssRules */
- abstract List<CSSRule> get cssRules;
+ List<CSSRule> get cssRules;
/** @domName CSSStyleSheet.ownerRule */
- abstract CSSRule get ownerRule;
+ CSSRule get ownerRule;
/** @domName CSSStyleSheet.rules */
- abstract List<CSSRule> get rules;
+ List<CSSRule> get rules;
/** @domName CSSStyleSheet.addRule */
int addRule(String selector, String style, [int index]);
@@ -7127,7 +7130,7 @@
static const int CSS_TRANSLATEZ = 12;
/** @domName WebKitCSSTransformValue.operationType */
- abstract int get operationType;
+ int get operationType;
}
class _CSSTransformValueImpl extends _CSSValueListImpl implements CSSTransformValue native "*WebKitCSSTransformValue" {
@@ -7167,7 +7170,7 @@
String cssText;
/** @domName CSSValue.cssValueType */
- abstract int get cssValueType;
+ int get cssValueType;
}
class _CSSValueImpl implements CSSValue native "*CSSValue" {
@@ -7184,7 +7187,7 @@
_CSSValueImpl operator[](int index) => JS("_CSSValueImpl", "#[#]", this, index);
void operator[]=(int index, _CSSValueImpl value) {
- throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+ throw new UnsupportedError("Cannot assign element of immutable List.");
}
// -- start List<CSSValue> mixins.
// CSSValue is the element type.
@@ -7201,15 +7204,15 @@
// From Collection<CSSValue>:
void add(CSSValue value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addLast(CSSValue value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addAll(Collection<CSSValue> collection) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
bool contains(CSSValue element) => _Collections.contains(this, element);
@@ -7225,38 +7228,38 @@
bool some(bool f(CSSValue element)) => _Collections.some(this, f);
- bool isEmpty() => this.length == 0;
+ bool get isEmpty => this.length == 0;
// From List<CSSValue>:
void sort([Comparator<CSSValue> compare = Comparable.compare]) {
- throw const UnsupportedOperationException("Cannot sort immutable List.");
+ throw new UnsupportedError("Cannot sort immutable List.");
}
int indexOf(CSSValue element, [int start = 0]) =>
_Lists.indexOf(this, element, start, this.length);
int lastIndexOf(CSSValue element, [int start]) {
- if (start === null) start = length - 1;
+ if (start == null) start = length - 1;
return _Lists.lastIndexOf(this, element, start);
}
- CSSValue last() => this[length - 1];
+ CSSValue get last => this[length - 1];
CSSValue removeLast() {
- throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+ throw new UnsupportedError("Cannot removeLast on immutable List.");
}
void setRange(int start, int rangeLength, List<CSSValue> from, [int startFrom]) {
- throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+ throw new UnsupportedError("Cannot setRange on immutable List.");
}
void removeRange(int start, int rangeLength) {
- throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+ throw new UnsupportedError("Cannot removeRange on immutable List.");
}
void insertRange(int start, int rangeLength, [CSSValue initialValue]) {
- throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+ throw new UnsupportedError("Cannot insertRange on immutable List.");
}
List<CSSValue> getRange(int start, int rangeLength) =>
@@ -7272,6 +7275,7 @@
// WARNING: Do not edit - generated code.
+
/// @domName HTMLCanvasElement
abstract class CanvasElement implements Element {
@@ -7355,7 +7359,7 @@
abstract class CanvasRenderingContext {
/** @domName CanvasRenderingContext.canvas */
- abstract CanvasElement get canvas;
+ CanvasElement get canvas;
}
// 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
@@ -7363,11 +7367,12 @@
// WARNING: Do not edit - generated code.
+
/// @domName CanvasRenderingContext2D
abstract class CanvasRenderingContext2D implements CanvasRenderingContext {
/** @domName CanvasRenderingContext2D.fillStyle */
- Dynamic fillStyle;
+ dynamic fillStyle;
/** @domName CanvasRenderingContext2D.font */
String font;
@@ -7406,7 +7411,7 @@
num shadowOffsetY;
/** @domName CanvasRenderingContext2D.strokeStyle */
- Dynamic strokeStyle;
+ dynamic strokeStyle;
/** @domName CanvasRenderingContext2D.textAlign */
String textAlign;
@@ -7415,7 +7420,7 @@
String textBaseline;
/** @domName CanvasRenderingContext2D.webkitBackingStorePixelRatio */
- abstract num get webkitBackingStorePixelRatio;
+ num get webkitBackingStorePixelRatio;
/** @domName CanvasRenderingContext2D.webkitImageSmoothingEnabled */
bool webkitImageSmoothingEnabled;
@@ -7599,7 +7604,7 @@
class _CanvasRenderingContext2DImpl extends _CanvasRenderingContextImpl implements CanvasRenderingContext2D native "*CanvasRenderingContext2D" {
- Dynamic fillStyle;
+ dynamic fillStyle;
String font;
@@ -7625,7 +7630,7 @@
num shadowOffsetY;
- Dynamic strokeStyle;
+ dynamic strokeStyle;
String textAlign;
@@ -7656,13 +7661,13 @@
void closePath() native;
ImageData createImageData(imagedata_OR_sw, [sh]) {
- if ((imagedata_OR_sw is ImageData || imagedata_OR_sw === null) &&
+ if ((imagedata_OR_sw is ImageData || imagedata_OR_sw == null) &&
!?sh) {
var imagedata_1 = _convertDartToNative_ImageData(imagedata_OR_sw);
return _convertNativeToDart_ImageData(_createImageData_1(imagedata_1));
}
- if ((imagedata_OR_sw is num || imagedata_OR_sw === null) &&
- (sh is num || sh === null)) {
+ if ((imagedata_OR_sw is num || imagedata_OR_sw == null) &&
+ (sh is num || sh == null)) {
return _convertNativeToDart_ImageData(_createImageData_2(imagedata_OR_sw, sh));
}
throw const Exception("Incorrect number or type of arguments");
@@ -7710,10 +7715,10 @@
_putImageData_1(imagedata_1, dx, dy);
return;
}
- if ((dirtyX is num || dirtyX === null) &&
- (dirtyY is num || dirtyY === null) &&
- (dirtyWidth is num || dirtyWidth === null) &&
- (dirtyHeight is num || dirtyHeight === null)) {
+ if ((dirtyX is num || dirtyX == null) &&
+ (dirtyY is num || dirtyY == null) &&
+ (dirtyWidth is num || dirtyWidth == null) &&
+ (dirtyHeight is num || dirtyHeight == null)) {
var imagedata_2 = _convertDartToNative_ImageData(imagedata);
_putImageData_2(imagedata_2, dx, dy, dirtyX, dirtyY, dirtyWidth, dirtyHeight);
return;
@@ -7777,10 +7782,10 @@
_webkitPutImageDataHD_1(imagedata_1, dx, dy);
return;
}
- if ((dirtyX is num || dirtyX === null) &&
- (dirtyY is num || dirtyY === null) &&
- (dirtyWidth is num || dirtyWidth === null) &&
- (dirtyHeight is num || dirtyHeight === null)) {
+ if ((dirtyX is num || dirtyX == null) &&
+ (dirtyY is num || dirtyY == null) &&
+ (dirtyWidth is num || dirtyWidth == null) &&
+ (dirtyHeight is num || dirtyHeight == null)) {
var imagedata_2 = _convertDartToNative_ImageData(imagedata);
_webkitPutImageDataHD_2(imagedata_2, dx, dy, dirtyX, dirtyY, dirtyWidth, dirtyHeight);
return;
@@ -7825,7 +7830,7 @@
String data;
/** @domName CharacterData.length */
- abstract int get length;
+ int get length;
/** @domName CharacterData.appendData */
void appendData(String data);
@@ -7874,22 +7879,22 @@
abstract class ClientRect {
/** @domName ClientRect.bottom */
- abstract num get bottom;
+ num get bottom;
/** @domName ClientRect.height */
- abstract num get height;
+ num get height;
/** @domName ClientRect.left */
- abstract num get left;
+ num get left;
/** @domName ClientRect.right */
- abstract num get right;
+ num get right;
/** @domName ClientRect.top */
- abstract num get top;
+ num get top;
/** @domName ClientRect.width */
- abstract num get width;
+ num get width;
}
class _ClientRectImpl implements ClientRect native "*ClientRect" {
@@ -7914,7 +7919,7 @@
_ClientRectImpl operator[](int index) => JS("_ClientRectImpl", "#[#]", this, index);
void operator[]=(int index, _ClientRectImpl value) {
- throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+ throw new UnsupportedError("Cannot assign element of immutable List.");
}
// -- start List<ClientRect> mixins.
// ClientRect is the element type.
@@ -7931,15 +7936,15 @@
// From Collection<ClientRect>:
void add(ClientRect value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addLast(ClientRect value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addAll(Collection<ClientRect> collection) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
bool contains(ClientRect element) => _Collections.contains(this, element);
@@ -7955,38 +7960,38 @@
bool some(bool f(ClientRect element)) => _Collections.some(this, f);
- bool isEmpty() => this.length == 0;
+ bool get isEmpty => this.length == 0;
// From List<ClientRect>:
void sort([Comparator<ClientRect> compare = Comparable.compare]) {
- throw const UnsupportedOperationException("Cannot sort immutable List.");
+ throw new UnsupportedError("Cannot sort immutable List.");
}
int indexOf(ClientRect element, [int start = 0]) =>
_Lists.indexOf(this, element, start, this.length);
int lastIndexOf(ClientRect element, [int start]) {
- if (start === null) start = length - 1;
+ if (start == null) start = length - 1;
return _Lists.lastIndexOf(this, element, start);
}
- ClientRect last() => this[length - 1];
+ ClientRect get last => this[length - 1];
ClientRect removeLast() {
- throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+ throw new UnsupportedError("Cannot removeLast on immutable List.");
}
void setRange(int start, int rangeLength, List<ClientRect> from, [int startFrom]) {
- throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+ throw new UnsupportedError("Cannot setRange on immutable List.");
}
void removeRange(int start, int rangeLength) {
- throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+ throw new UnsupportedError("Cannot removeRange on immutable List.");
}
void insertRange(int start, int rangeLength, [ClientRect initialValue]) {
- throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+ throw new UnsupportedError("Cannot insertRange on immutable List.");
}
List<ClientRect> getRange(int start, int rangeLength) =>
@@ -8012,13 +8017,13 @@
String effectAllowed;
/** @domName Clipboard.files */
- abstract List<File> get files;
+ List<File> get files;
/** @domName Clipboard.items */
- abstract DataTransferItemList get items;
+ DataTransferItemList get items;
/** @domName Clipboard.types */
- abstract List get types;
+ List get types;
/** @domName Clipboard.clearData */
void clearData([String type]);
@@ -8063,13 +8068,13 @@
abstract class CloseEvent implements Event {
/** @domName CloseEvent.code */
- abstract int get code;
+ int get code;
/** @domName CloseEvent.reason */
- abstract String get reason;
+ String get reason;
/** @domName CloseEvent.wasClean */
- abstract bool get wasClean;
+ bool get wasClean;
}
class _CloseEventImpl extends _EventImpl implements CloseEvent native "*CloseEvent" {
@@ -8102,7 +8107,7 @@
abstract class CompositionEvent implements UIEvent {
/** @domName CompositionEvent.data */
- abstract String get data;
+ String get data;
/** @domName CompositionEvent.initCompositionEvent */
void initCompositionEvent(String typeArg, bool canBubbleArg, bool cancelableArg, LocalWindow viewArg, String dataArg);
@@ -8124,10 +8129,10 @@
abstract class Console {
/** @domName Console.memory */
- abstract MemoryInfo get memory;
+ MemoryInfo get memory;
/** @domName Console.profiles */
- abstract List<ScriptProfile> get profiles;
+ List<ScriptProfile> get profiles;
/** @domName Console.assertCondition */
void assertCondition(bool condition, Object arg);
@@ -8249,12 +8254,17 @@
factory ContentElement() => _Elements.createContentElement();
+ /** @domName HTMLContentElement.resetStyleInheritance */
+ bool resetStyleInheritance;
+
/** @domName HTMLContentElement.select */
String select;
}
class _ContentElementImpl extends _ElementImpl implements ContentElement native "*HTMLContentElement" {
+ bool resetStyleInheritance;
+
String select;
}
// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
@@ -8289,25 +8299,25 @@
abstract class Coordinates {
/** @domName Coordinates.accuracy */
- abstract num get accuracy;
+ num get accuracy;
/** @domName Coordinates.altitude */
- abstract num get altitude;
+ num get altitude;
/** @domName Coordinates.altitudeAccuracy */
- abstract num get altitudeAccuracy;
+ num get altitudeAccuracy;
/** @domName Coordinates.heading */
- abstract num get heading;
+ num get heading;
/** @domName Coordinates.latitude */
- abstract num get latitude;
+ num get latitude;
/** @domName Coordinates.longitude */
- abstract num get longitude;
+ num get longitude;
/** @domName Coordinates.speed */
- abstract num get speed;
+ num get speed;
}
class _CoordinatesImpl implements Coordinates native "*Coordinates" {
@@ -8336,13 +8346,13 @@
abstract class Counter {
/** @domName Counter.identifier */
- abstract String get identifier;
+ String get identifier;
/** @domName Counter.listStyle */
- abstract String get listStyle;
+ String get listStyle;
/** @domName Counter.separator */
- abstract String get separator;
+ String get separator;
}
class _CounterImpl implements Counter native "*Counter" {
@@ -8376,6 +8386,7 @@
// WARNING: Do not edit - generated code.
+
/// @domName CustomEvent
abstract class CustomEvent implements Event {
@@ -8385,7 +8396,7 @@
/** @domName CustomEvent.detail */
- abstract Object get detail;
+ Object get detail;
/** @domName CustomEvent.initCustomEvent */
void $dom_initCustomEvent(String typeArg, bool canBubbleArg, bool cancelableArg, Object detailArg);
@@ -8443,7 +8454,7 @@
static const int UPDATEREADY = 4;
/** @domName DOMApplicationCache.status */
- abstract int get status;
+ int get status;
/** @domName DOMApplicationCache.abort */
void abort();
@@ -8532,7 +8543,7 @@
abstract class DOMError {
/** @domName DOMError.name */
- abstract String get name;
+ String get name;
}
class _DOMErrorImpl implements DOMError native "*DOMError" {
@@ -8599,13 +8610,13 @@
static const int WRONG_DOCUMENT_ERR = 4;
/** @domName DOMException.code */
- abstract int get code;
+ int get code;
/** @domName DOMException.message */
- abstract String get message;
+ String get message;
/** @domName DOMException.name */
- abstract String get name;
+ String get name;
/** @domName DOMException.toString */
String toString();
@@ -8631,10 +8642,10 @@
abstract class DOMFileSystem {
/** @domName DOMFileSystem.name */
- abstract String get name;
+ String get name;
/** @domName DOMFileSystem.root */
- abstract DirectoryEntry get root;
+ DirectoryEntry get root;
}
class _DOMFileSystemImpl implements DOMFileSystem native "*DOMFileSystem" {
@@ -8653,10 +8664,10 @@
abstract class DOMFileSystemSync {
/** @domName DOMFileSystemSync.name */
- abstract String get name;
+ String get name;
/** @domName DOMFileSystemSync.root */
- abstract DirectoryEntrySync get root;
+ DirectoryEntrySync get root;
}
class _DOMFileSystemSyncImpl implements DOMFileSystemSync native "*DOMFileSystemSync" {
@@ -8712,16 +8723,16 @@
abstract class DOMMimeType {
/** @domName MimeType.description */
- abstract String get description;
+ String get description;
/** @domName MimeType.enabledPlugin */
- abstract DOMPlugin get enabledPlugin;
+ DOMPlugin get enabledPlugin;
/** @domName MimeType.suffixes */
- abstract String get suffixes;
+ String get suffixes;
/** @domName MimeType.type */
- abstract String get type;
+ String get type;
}
// 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
@@ -8733,7 +8744,7 @@
abstract class DOMMimeTypeArray implements List<DOMMimeType> {
/** @domName MimeTypeArray.length */
- abstract int get length;
+ int get length;
/** @domName MimeTypeArray.item */
DOMMimeType item(int index);
@@ -8749,7 +8760,7 @@
_DOMMimeTypeImpl operator[](int index) => JS("_DOMMimeTypeImpl", "#[#]", this, index);
void operator[]=(int index, _DOMMimeTypeImpl value) {
- throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+ throw new UnsupportedError("Cannot assign element of immutable List.");
}
// -- start List<DOMMimeType> mixins.
// DOMMimeType is the element type.
@@ -8766,15 +8777,15 @@
// From Collection<DOMMimeType>:
void add(DOMMimeType value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addLast(DOMMimeType value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addAll(Collection<DOMMimeType> collection) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
bool contains(DOMMimeType element) => _Collections.contains(this, element);
@@ -8790,38 +8801,38 @@
bool some(bool f(DOMMimeType element)) => _Collections.some(this, f);
- bool isEmpty() => this.length == 0;
+ bool get isEmpty => this.length == 0;
// From List<DOMMimeType>:
void sort([Comparator<DOMMimeType> compare = Comparable.compare]) {
- throw const UnsupportedOperationException("Cannot sort immutable List.");
+ throw new UnsupportedError("Cannot sort immutable List.");
}
int indexOf(DOMMimeType element, [int start = 0]) =>
_Lists.indexOf(this, element, start, this.length);
int lastIndexOf(DOMMimeType element, [int start]) {
- if (start === null) start = length - 1;
+ if (start == null) start = length - 1;
return _Lists.lastIndexOf(this, element, start);
}
- DOMMimeType last() => this[length - 1];
+ DOMMimeType get last => this[length - 1];
DOMMimeType removeLast() {
- throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+ throw new UnsupportedError("Cannot removeLast on immutable List.");
}
void setRange(int start, int rangeLength, List<DOMMimeType> from, [int startFrom]) {
- throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+ throw new UnsupportedError("Cannot setRange on immutable List.");
}
void removeRange(int start, int rangeLength) {
- throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+ throw new UnsupportedError("Cannot removeRange on immutable List.");
}
void insertRange(int start, int rangeLength, [DOMMimeType initialValue]) {
- throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+ throw new UnsupportedError("Cannot insertRange on immutable List.");
}
List<DOMMimeType> getRange(int start, int rangeLength) =>
@@ -8873,16 +8884,16 @@
abstract class DOMPlugin {
/** @domName Plugin.description */
- abstract String get description;
+ String get description;
/** @domName Plugin.filename */
- abstract String get filename;
+ String get filename;
/** @domName Plugin.length */
- abstract int get length;
+ int get length;
/** @domName Plugin.name */
- abstract String get name;
+ String get name;
/** @domName Plugin.item */
DOMMimeType item(int index);
@@ -8900,7 +8911,7 @@
abstract class DOMPluginArray implements List<DOMPlugin> {
/** @domName PluginArray.length */
- abstract int get length;
+ int get length;
/** @domName PluginArray.item */
DOMPlugin item(int index);
@@ -8919,7 +8930,7 @@
_DOMPluginImpl operator[](int index) => JS("_DOMPluginImpl", "#[#]", this, index);
void operator[]=(int index, _DOMPluginImpl value) {
- throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+ throw new UnsupportedError("Cannot assign element of immutable List.");
}
// -- start List<DOMPlugin> mixins.
// DOMPlugin is the element type.
@@ -8936,15 +8947,15 @@
// From Collection<DOMPlugin>:
void add(DOMPlugin value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addLast(DOMPlugin value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addAll(Collection<DOMPlugin> collection) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
bool contains(DOMPlugin element) => _Collections.contains(this, element);
@@ -8960,38 +8971,38 @@
bool some(bool f(DOMPlugin element)) => _Collections.some(this, f);
- bool isEmpty() => this.length == 0;
+ bool get isEmpty => this.length == 0;
// From List<DOMPlugin>:
void sort([Comparator<DOMPlugin> compare = Comparable.compare]) {
- throw const UnsupportedOperationException("Cannot sort immutable List.");
+ throw new UnsupportedError("Cannot sort immutable List.");
}
int indexOf(DOMPlugin element, [int start = 0]) =>
_Lists.indexOf(this, element, start, this.length);
int lastIndexOf(DOMPlugin element, [int start]) {
- if (start === null) start = length - 1;
+ if (start == null) start = length - 1;
return _Lists.lastIndexOf(this, element, start);
}
- DOMPlugin last() => this[length - 1];
+ DOMPlugin get last => this[length - 1];
DOMPlugin removeLast() {
- throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+ throw new UnsupportedError("Cannot removeLast on immutable List.");
}
void setRange(int start, int rangeLength, List<DOMPlugin> from, [int startFrom]) {
- throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+ throw new UnsupportedError("Cannot setRange on immutable List.");
}
void removeRange(int start, int rangeLength) {
- throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+ throw new UnsupportedError("Cannot removeRange on immutable List.");
}
void insertRange(int start, int rangeLength, [DOMPlugin initialValue]) {
- throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+ throw new UnsupportedError("Cannot insertRange on immutable List.");
}
List<DOMPlugin> getRange(int start, int rangeLength) =>
@@ -9030,37 +9041,37 @@
abstract class DOMSelection {
/** @domName Selection.anchorNode */
- abstract Node get anchorNode;
+ Node get anchorNode;
/** @domName Selection.anchorOffset */
- abstract int get anchorOffset;
+ int get anchorOffset;
/** @domName Selection.baseNode */
- abstract Node get baseNode;
+ Node get baseNode;
/** @domName Selection.baseOffset */
- abstract int get baseOffset;
+ int get baseOffset;
/** @domName Selection.extentNode */
- abstract Node get extentNode;
+ Node get extentNode;
/** @domName Selection.extentOffset */
- abstract int get extentOffset;
+ int get extentOffset;
/** @domName Selection.focusNode */
- abstract Node get focusNode;
+ Node get focusNode;
/** @domName Selection.focusOffset */
- abstract int get focusOffset;
+ int get focusOffset;
/** @domName Selection.isCollapsed */
- abstract bool get isCollapsed;
+ bool get isCollapsed;
/** @domName Selection.rangeCount */
- abstract int get rangeCount;
+ int get rangeCount;
/** @domName Selection.type */
- abstract String get type;
+ String get type;
/** @domName Selection.addRange */
void addRange(Range range);
@@ -9187,7 +9198,7 @@
String operator[](int index) => JS("String", "#[#]", this, index);
void operator[]=(int index, String value) {
- throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+ throw new UnsupportedError("Cannot assign element of immutable List.");
}
// -- start List<String> mixins.
// String is the element type.
@@ -9204,15 +9215,15 @@
// From Collection<String>:
void add(String value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addLast(String value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addAll(Collection<String> collection) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
// contains() defined by IDL.
@@ -9228,38 +9239,38 @@
bool some(bool f(String element)) => _Collections.some(this, f);
- bool isEmpty() => this.length == 0;
+ bool get isEmpty => this.length == 0;
// From List<String>:
void sort([Comparator<String> compare = Comparable.compare]) {
- throw const UnsupportedOperationException("Cannot sort immutable List.");
+ throw new UnsupportedError("Cannot sort immutable List.");
}
int indexOf(String element, [int start = 0]) =>
_Lists.indexOf(this, element, start, this.length);
int lastIndexOf(String element, [int start]) {
- if (start === null) start = length - 1;
+ if (start == null) start = length - 1;
return _Lists.lastIndexOf(this, element, start);
}
- String last() => this[length - 1];
+ String get last => this[length - 1];
String removeLast() {
- throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+ throw new UnsupportedError("Cannot removeLast on immutable List.");
}
void setRange(int start, int rangeLength, List<String> from, [int startFrom]) {
- throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+ throw new UnsupportedError("Cannot setRange on immutable List.");
}
void removeRange(int start, int rangeLength) {
- throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+ throw new UnsupportedError("Cannot removeRange on immutable List.");
}
void insertRange(int start, int rangeLength, [String initialValue]) {
- throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+ throw new UnsupportedError("Cannot insertRange on immutable List.");
}
List<String> getRange(int start, int rangeLength) =>
@@ -9290,7 +9301,7 @@
abstract class DOMTokenList {
/** @domName DOMTokenList.length */
- abstract int get length;
+ int get length;
/** @domName DOMTokenList.contains */
bool contains(String token);
@@ -9353,7 +9364,7 @@
factory DataListElement() => _Elements.createDataListElement();
/** @domName HTMLDataListElement.options */
- abstract HTMLCollection get options;
+ HTMLCollection get options;
}
class _DataListElementImpl extends _ElementImpl implements DataListElement native "*HTMLDataListElement" {
@@ -9370,10 +9381,10 @@
abstract class DataTransferItem {
/** @domName DataTransferItem.kind */
- abstract String get kind;
+ String get kind;
/** @domName DataTransferItem.type */
- abstract String get type;
+ String get type;
/** @domName DataTransferItem.getAsFile */
Blob getAsFile();
@@ -9407,7 +9418,7 @@
abstract class DataTransferItemList {
/** @domName DataTransferItemList.length */
- abstract int get length;
+ int get length;
/** @domName DataTransferItemList.add */
void add(data_OR_file, [String type]);
@@ -9449,49 +9460,49 @@
}
/** @domName DataView.getFloat32 */
- num getFloat32(int byteOffset, [bool littleEndian]);
+ num getFloat32(int byteOffset, {bool littleEndian});
/** @domName DataView.getFloat64 */
- num getFloat64(int byteOffset, [bool littleEndian]);
+ num getFloat64(int byteOffset, {bool littleEndian});
/** @domName DataView.getInt16 */
- int getInt16(int byteOffset, [bool littleEndian]);
+ int getInt16(int byteOffset, {bool littleEndian});
/** @domName DataView.getInt32 */
- int getInt32(int byteOffset, [bool littleEndian]);
+ int getInt32(int byteOffset, {bool littleEndian});
/** @domName DataView.getInt8 */
int getInt8(int byteOffset);
/** @domName DataView.getUint16 */
- int getUint16(int byteOffset, [bool littleEndian]);
+ int getUint16(int byteOffset, {bool littleEndian});
/** @domName DataView.getUint32 */
- int getUint32(int byteOffset, [bool littleEndian]);
+ int getUint32(int byteOffset, {bool littleEndian});
/** @domName DataView.getUint8 */
int getUint8(int byteOffset);
/** @domName DataView.setFloat32 */
- void setFloat32(int byteOffset, num value, [bool littleEndian]);
+ void setFloat32(int byteOffset, num value, {bool littleEndian});
/** @domName DataView.setFloat64 */
- void setFloat64(int byteOffset, num value, [bool littleEndian]);
+ void setFloat64(int byteOffset, num value, {bool littleEndian});
/** @domName DataView.setInt16 */
- void setInt16(int byteOffset, int value, [bool littleEndian]);
+ void setInt16(int byteOffset, int value, {bool littleEndian});
/** @domName DataView.setInt32 */
- void setInt32(int byteOffset, int value, [bool littleEndian]);
+ void setInt32(int byteOffset, int value, {bool littleEndian});
/** @domName DataView.setInt8 */
void setInt8(int byteOffset, int value);
/** @domName DataView.setUint16 */
- void setUint16(int byteOffset, int value, [bool littleEndian]);
+ void setUint16(int byteOffset, int value, {bool littleEndian});
/** @domName DataView.setUint32 */
- void setUint32(int byteOffset, int value, [bool littleEndian]);
+ void setUint32(int byteOffset, int value, {bool littleEndian});
/** @domName DataView.setUint8 */
void setUint8(int byteOffset, int value);
@@ -9499,35 +9510,35 @@
class _DataViewImpl extends _ArrayBufferViewImpl implements DataView native "*DataView" {
- num getFloat32(int byteOffset, [bool littleEndian]) native;
+ num getFloat32(int byteOffset, {bool littleEndian}) native;
- num getFloat64(int byteOffset, [bool littleEndian]) native;
+ num getFloat64(int byteOffset, {bool littleEndian}) native;
- int getInt16(int byteOffset, [bool littleEndian]) native;
+ int getInt16(int byteOffset, {bool littleEndian}) native;
- int getInt32(int byteOffset, [bool littleEndian]) native;
+ int getInt32(int byteOffset, {bool littleEndian}) native;
int getInt8(int byteOffset) native;
- int getUint16(int byteOffset, [bool littleEndian]) native;
+ int getUint16(int byteOffset, {bool littleEndian}) native;
- int getUint32(int byteOffset, [bool littleEndian]) native;
+ int getUint32(int byteOffset, {bool littleEndian}) native;
int getUint8(int byteOffset) native;
- void setFloat32(int byteOffset, num value, [bool littleEndian]) native;
+ void setFloat32(int byteOffset, num value, {bool littleEndian}) native;
- void setFloat64(int byteOffset, num value, [bool littleEndian]) native;
+ void setFloat64(int byteOffset, num value, {bool littleEndian}) native;
- void setInt16(int byteOffset, int value, [bool littleEndian]) native;
+ void setInt16(int byteOffset, int value, {bool littleEndian}) native;
- void setInt32(int byteOffset, int value, [bool littleEndian]) native;
+ void setInt32(int byteOffset, int value, {bool littleEndian}) native;
void setInt8(int byteOffset, int value) native;
- void setUint16(int byteOffset, int value, [bool littleEndian]) native;
+ void setUint16(int byteOffset, int value, {bool littleEndian}) native;
- void setUint32(int byteOffset, int value, [bool littleEndian]) native;
+ void setUint32(int byteOffset, int value, {bool littleEndian}) native;
void setUint8(int byteOffset, int value) native;
}
@@ -9541,7 +9552,7 @@
abstract class Database {
/** @domName Database.version */
- abstract String get version;
+ String get version;
/** @domName Database.changeVersion */
void changeVersion(String oldVersion, String newVersion, [SQLTransactionCallback callback, SQLTransactionErrorCallback errorCallback, VoidCallback successCallback]);
@@ -9558,6 +9569,7 @@
// WARNING: Do not edit - generated code.
+
typedef void DatabaseCallback(database);
class _DatabaseImpl implements Database native "*Database" {
@@ -9580,10 +9592,10 @@
abstract class DatabaseSync {
/** @domName DatabaseSync.lastErrorMessage */
- abstract String get lastErrorMessage;
+ String get lastErrorMessage;
/** @domName DatabaseSync.version */
- abstract String get version;
+ String get version;
/** @domName DatabaseSync.changeVersion */
void changeVersion(String oldVersion, String newVersion, [SQLTransactionSyncCallback callback]);
@@ -9664,7 +9676,7 @@
abstract class DelayNode implements AudioNode {
/** @domName DelayNode.delayTime */
- abstract AudioParam get delayTime;
+ AudioParam get delayTime;
}
class _DelayNodeImpl extends _AudioNodeImpl implements DelayNode native "*DelayNode" {
@@ -9700,7 +9712,7 @@
abstract class DeviceMotionEvent implements Event {
/** @domName DeviceMotionEvent.interval */
- abstract num get interval;
+ num get interval;
}
class _DeviceMotionEventImpl extends _EventImpl implements DeviceMotionEvent native "*DeviceMotionEvent" {
@@ -9717,16 +9729,16 @@
abstract class DeviceOrientationEvent implements Event {
/** @domName DeviceOrientationEvent.absolute */
- abstract bool get absolute;
+ bool get absolute;
/** @domName DeviceOrientationEvent.alpha */
- abstract num get alpha;
+ num get alpha;
/** @domName DeviceOrientationEvent.beta */
- abstract num get beta;
+ num get beta;
/** @domName DeviceOrientationEvent.gamma */
- abstract num get gamma;
+ num get gamma;
/** @domName DeviceOrientationEvent.initDeviceOrientationEvent */
void initDeviceOrientationEvent(String type, bool bubbles, bool cancelable, num alpha, num beta, num gamma, bool absolute);
@@ -9774,10 +9786,10 @@
DirectoryReader createReader();
/** @domName DirectoryEntry.getDirectory */
- void getDirectory(String path, [Map options, EntryCallback successCallback, ErrorCallback errorCallback]);
+ void getDirectory(String path, {Map options, EntryCallback successCallback, ErrorCallback errorCallback});
/** @domName DirectoryEntry.getFile */
- void getFile(String path, [Map options, EntryCallback successCallback, ErrorCallback errorCallback]);
+ void getFile(String path, {Map options, EntryCallback successCallback, ErrorCallback errorCallback});
/** @domName DirectoryEntry.removeRecursively */
void removeRecursively(VoidCallback successCallback, [ErrorCallback errorCallback]);
@@ -9787,7 +9799,7 @@
_DirectoryReaderImpl createReader() native;
- void getDirectory(String path, [options, successCallback, errorCallback]) {
+ void getDirectory(String path, {options, successCallback, errorCallback}) {
if (?errorCallback) {
var options_1 = _convertDartToNative_Dictionary(options);
_getDirectory_1(path, options_1, successCallback, errorCallback);
@@ -9811,7 +9823,7 @@
void _getDirectory_3(path, options) native "getDirectory";
void _getDirectory_4(path) native "getDirectory";
- void getFile(String path, [options, successCallback, errorCallback]) {
+ void getFile(String path, {options, successCallback, errorCallback}) {
if (?errorCallback) {
var options_1 = _convertDartToNative_Dictionary(options);
_getFile_1(path, options_1, successCallback, errorCallback);
@@ -9934,6 +9946,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.
+
/// @domName Document
abstract class Document extends HtmlElement {
@@ -9944,7 +9957,7 @@
DocumentEvents get on;
/** @domName HTMLDocument.activeElement */
- abstract Element get activeElement;
+ Element get activeElement;
/** @domName Document.body */
Element body;
@@ -9956,64 +9969,64 @@
String cookie;
/** @domName Document.defaultView */
- abstract Window get window;
+ Window get window;
/** @domName Document.documentElement */
- abstract Element get documentElement;
+ Element get documentElement;
/** @domName Document.domain */
- abstract String get domain;
+ String get domain;
/** @domName Document.head */
- abstract HeadElement get head;
+ HeadElement get head;
/** @domName Document.implementation */
- abstract DOMImplementation get implementation;
+ DOMImplementation get implementation;
/** @domName Document.lastModified */
- abstract String get lastModified;
+ String get lastModified;
/** @domName Document.preferredStylesheetSet */
- abstract String get preferredStylesheetSet;
+ String get preferredStylesheetSet;
/** @domName Document.readyState */
- abstract String get readyState;
+ String get readyState;
/** @domName Document.referrer */
- abstract String get referrer;
+ String get referrer;
/** @domName Document.selectedStylesheetSet */
String selectedStylesheetSet;
/** @domName Document.styleSheets */
- abstract List<StyleSheet> get styleSheets;
+ List<StyleSheet> get styleSheets;
/** @domName Document.title */
String title;
/** @domName Document.webkitCurrentFullScreenElement */
- abstract Element get webkitCurrentFullScreenElement;
+ Element get webkitCurrentFullScreenElement;
/** @domName Document.webkitFullScreenKeyboardInputAllowed */
- abstract bool get webkitFullScreenKeyboardInputAllowed;
+ bool get webkitFullScreenKeyboardInputAllowed;
/** @domName Document.webkitFullscreenElement */
- abstract Element get webkitFullscreenElement;
+ Element get webkitFullscreenElement;
/** @domName Document.webkitFullscreenEnabled */
- abstract bool get webkitFullscreenEnabled;
+ bool get webkitFullscreenEnabled;
/** @domName Document.webkitHidden */
- abstract bool get webkitHidden;
+ bool get webkitHidden;
/** @domName Document.webkitIsFullScreen */
- abstract bool get webkitIsFullScreen;
+ bool get webkitIsFullScreen;
/** @domName Document.webkitPointerLockElement */
- abstract Element get webkitPointerLockElement;
+ Element get webkitPointerLockElement;
/** @domName Document.webkitVisibilityState */
- abstract String get webkitVisibilityState;
+ String get webkitVisibilityState;
/** @domName Document.caretRangeFromPoint */
Range caretRangeFromPoint(int x, int y);
@@ -10202,6 +10215,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.
+
/// @domName DocumentFragment
abstract class DocumentFragment extends Element {
@@ -10262,7 +10276,7 @@
if (newLength >= len) {
return;
} else if (newLength < 0) {
- throw const ArgumentError("Invalid list length");
+ throw new ArgumentError("Invalid list length");
}
removeRange(newLength - 1, len - newLength);
@@ -10285,7 +10299,7 @@
}
void sort([Comparator<Element> compare = Comparable.compare]) {
- throw const UnsupportedOperationException('TODO(jacobr): should we impl?');
+ throw new UnsupportedError('TODO(jacobr): should we impl?');
}
void setRange(int start, int rangeLength, List from, [int startFrom = 0]) {
@@ -10307,7 +10321,7 @@
}
Element removeLast() {
- final result = this.last();
+ final result = this.last;
if (result != null) {
result.remove();
}
@@ -10318,7 +10332,7 @@
Collection<Element> filter(bool f(Element element)) => _filtered.filter(f);
bool every(bool f(Element element)) => _filtered.every(f);
bool some(bool f(Element element)) => _filtered.some(f);
- bool isEmpty() => _filtered.isEmpty();
+ bool get isEmpty => _filtered.isEmpty;
int get length => _filtered.length;
Element operator [](int index) => _filtered[index];
Iterator<Element> iterator() => _filtered.iterator();
@@ -10328,11 +10342,11 @@
_filtered.indexOf(element, start);
int lastIndexOf(Element element, [int start = null]) {
- if (start === null) start = length - 1;
+ if (start == null) start = length - 1;
return _filtered.lastIndexOf(element, start);
}
- Element last() => _filtered.last();
+ Element get last => _filtered.last;
}
Future<CSSStyleDeclaration> _emptyStyleFuture() {
@@ -10354,7 +10368,7 @@
_FrozenCSSClassSet() : super(null);
void _write(Set s) {
- throw const UnsupportedOperationException(
+ throw new UnsupportedError(
'frozen class set cannot be modified');
}
Set<String> _read() => new Set<String>();
@@ -10468,7 +10482,7 @@
}
return null;
}
- Element get $m_lastElementChild() => elements.last();
+ Element get $m_lastElementChild() => elements.last;
Element get nextElementSibling => null;
Element get previousElementSibling => null;
Element get offsetParent => null;
@@ -10497,97 +10511,97 @@
// Setters throw errors rather than being no-ops because we aren't going to
// retain the values that were set, and erroring out seems clearer.
void set attributes(Map<String, String> value) {
- throw new UnsupportedOperationException(
+ throw new UnsupportedError(
"Attributes can't be set for document fragments.");
}
void set classes(Collection<String> value) {
- throw new UnsupportedOperationException(
+ throw new UnsupportedError(
"Classes can't be set for document fragments.");
}
void set dataAttributes(Map<String, String> value) {
- throw new UnsupportedOperationException(
+ throw new UnsupportedError(
"Data attributes can't be set for document fragments.");
}
void set contentEditable(String value) {
- throw new UnsupportedOperationException(
+ throw new UnsupportedError(
"Content editable can't be set for document fragments.");
}
String get dir {
- throw new UnsupportedOperationException(
+ throw new UnsupportedError(
"Document fragments don't support text direction.");
}
void set dir(String value) {
- throw new UnsupportedOperationException(
+ throw new UnsupportedError(
"Document fragments don't support text direction.");
}
void set draggable(bool value) {
- throw new UnsupportedOperationException(
+ throw new UnsupportedError(
"Draggable can't be set for document fragments.");
}
void set hidden(bool value) {
- throw new UnsupportedOperationException(
+ throw new UnsupportedError(
"Hidden can't be set for document fragments.");
}
void set id(String value) {
- throw new UnsupportedOperationException(
+ throw new UnsupportedError(
"ID can't be set for document fragments.");
}
String get lang {
- throw new UnsupportedOperationException(
+ throw new UnsupportedError(
"Document fragments don't support language.");
}
void set lang(String value) {
- throw new UnsupportedOperationException(
+ throw new UnsupportedError(
"Document fragments don't support language.");
}
void set scrollLeft(int value) {
- throw new UnsupportedOperationException(
+ throw new UnsupportedError(
"Document fragments don't support scrolling.");
}
void set scrollTop(int value) {
- throw new UnsupportedOperationException(
+ throw new UnsupportedError(
"Document fragments don't support scrolling.");
}
void set spellcheck(bool value) {
- throw new UnsupportedOperationException(
+ throw new UnsupportedError(
"Spellcheck can't be set for document fragments.");
}
void set translate(bool value) {
- throw new UnsupportedOperationException(
+ throw new UnsupportedError(
"Spellcheck can't be set for document fragments.");
}
void set tabIndex(int value) {
- throw new UnsupportedOperationException(
+ throw new UnsupportedError(
"Tab index can't be set for document fragments.");
}
void set title(String value) {
- throw new UnsupportedOperationException(
+ throw new UnsupportedError(
"Title can't be set for document fragments.");
}
void set webkitdropzone(String value) {
- throw new UnsupportedOperationException(
+ throw new UnsupportedError(
"WebKit drop zone can't be set for document fragments.");
}
void set webkitRegionOverflow(String value) {
- throw new UnsupportedOperationException(
+ throw new UnsupportedError(
"WebKit region overflow can't be set for document fragments.");
}
@@ -10621,7 +10635,7 @@
String cookie;
Window get window => _convertNativeToDart_Window(this._window);
- Window get _window() => JS("Window", "#.defaultView", this);
+ Window get _window => JS("Window", "#.defaultView", this);
final _ElementImpl documentElement;
@@ -10865,22 +10879,22 @@
abstract class DocumentType implements Node {
/** @domName DocumentType.entities */
- abstract NamedNodeMap get entities;
+ NamedNodeMap get entities;
/** @domName DocumentType.internalSubset */
- abstract String get internalSubset;
+ String get internalSubset;
/** @domName DocumentType.name */
- abstract String get name;
+ String get name;
/** @domName DocumentType.notations */
- abstract NamedNodeMap get notations;
+ NamedNodeMap get notations;
/** @domName DocumentType.publicId */
- abstract String get publicId;
+ String get publicId;
/** @domName DocumentType.systemId */
- abstract String get systemId;
+ String get systemId;
/** @domName DocumentType.remove */
void remove();
@@ -10912,22 +10926,22 @@
abstract class DynamicsCompressorNode implements AudioNode {
/** @domName DynamicsCompressorNode.attack */
- abstract AudioParam get attack;
+ AudioParam get attack;
/** @domName DynamicsCompressorNode.knee */
- abstract AudioParam get knee;
+ AudioParam get knee;
/** @domName DynamicsCompressorNode.ratio */
- abstract AudioParam get ratio;
+ AudioParam get ratio;
/** @domName DynamicsCompressorNode.reduction */
- abstract AudioParam get reduction;
+ AudioParam get reduction;
/** @domName DynamicsCompressorNode.release */
- abstract AudioParam get release;
+ AudioParam get release;
/** @domName DynamicsCompressorNode.threshold */
- abstract AudioParam get threshold;
+ AudioParam get threshold;
}
class _DynamicsCompressorNodeImpl extends _AudioNodeImpl implements DynamicsCompressorNode native "*DynamicsCompressorNode" {
@@ -10966,6 +10980,7 @@
// WARNING: Do not edit - generated code.
+
/**
* All your attribute manipulation needs in one place.
* Extends the regular Map interface by automatically coercing non-string
@@ -11081,7 +11096,7 @@
ElementEvents get on;
/** @domName HTMLElement.children */
- abstract HTMLCollection get $dom_children;
+ HTMLCollection get $dom_children;
/** @domName HTMLElement.contentEditable */
String contentEditable;
@@ -11102,13 +11117,13 @@
String innerHTML;
/** @domName HTMLElement.isContentEditable */
- abstract bool get isContentEditable;
+ bool get isContentEditable;
/** @domName HTMLElement.lang */
String lang;
/** @domName HTMLElement.outerHTML */
- abstract String get outerHTML;
+ String get outerHTML;
/** @domName HTMLElement.spellcheck */
bool spellcheck;
@@ -11140,55 +11155,55 @@
static const int ALLOW_KEYBOARD_INPUT = 1;
/** @domName Element.childElementCount */
- abstract int get $dom_childElementCount;
+ int get $dom_childElementCount;
/** @domName Element.className */
String $dom_className;
/** @domName Element.clientHeight */
- abstract int get clientHeight;
+ int get clientHeight;
/** @domName Element.clientLeft */
- abstract int get clientLeft;
+ int get clientLeft;
/** @domName Element.clientTop */
- abstract int get clientTop;
+ int get clientTop;
/** @domName Element.clientWidth */
- abstract int get clientWidth;
+ int get clientWidth;
/** @domName Element.dataset */
- abstract Map<String, String> get dataset;
+ Map<String, String> get dataset;
/** @domName Element.firstElementChild */
- abstract Element get $dom_firstElementChild;
+ Element get $dom_firstElementChild;
/** @domName Element.lastElementChild */
- abstract Element get $dom_lastElementChild;
+ Element get $dom_lastElementChild;
/** @domName Element.nextElementSibling */
- abstract Element get nextElementSibling;
+ Element get nextElementSibling;
/** @domName Element.offsetHeight */
- abstract int get offsetHeight;
+ int get offsetHeight;
/** @domName Element.offsetLeft */
- abstract int get offsetLeft;
+ int get offsetLeft;
/** @domName Element.offsetParent */
- abstract Element get offsetParent;
+ Element get offsetParent;
/** @domName Element.offsetTop */
- abstract int get offsetTop;
+ int get offsetTop;
/** @domName Element.offsetWidth */
- abstract int get offsetWidth;
+ int get offsetWidth;
/** @domName Element.previousElementSibling */
- abstract Element get previousElementSibling;
+ Element get previousElementSibling;
/** @domName Element.scrollHeight */
- abstract int get scrollHeight;
+ int get scrollHeight;
/** @domName Element.scrollLeft */
int scrollLeft;
@@ -11197,13 +11212,13 @@
int scrollTop;
/** @domName Element.scrollWidth */
- abstract int get scrollWidth;
+ int get scrollWidth;
/** @domName Element.style */
- abstract CSSStyleDeclaration get style;
+ CSSStyleDeclaration get style;
/** @domName Element.tagName */
- abstract String get tagName;
+ String get tagName;
/** @domName Element.blur */
void blur();
@@ -11432,7 +11447,7 @@
return out;
}
- bool isEmpty() {
+ bool get isEmpty {
return _element.$dom_firstElementChild == null;
}
@@ -11450,7 +11465,7 @@
void set length(int newLength) {
// TODO(jacobr): remove children when length is reduced.
- throw const UnsupportedOperationException('');
+ throw new UnsupportedError('');
}
Element add(_ElementImpl value) {
@@ -11469,7 +11484,7 @@
}
void sort([Comparator<Element> compare = Comparable.compare]) {
- throw const UnsupportedOperationException('TODO(jacobr): should we impl?');
+ throw new UnsupportedError('TODO(jacobr): should we impl?');
}
void setRange(int start, int rangeLength, List from, [int startFrom = 0]) {
@@ -11493,7 +11508,7 @@
}
int lastIndexOf(Element element, [int start = null]) {
- if (start === null) start = length - 1;
+ if (start == null) start = length - 1;
return _Lists.lastIndexOf(this, element, start);
}
@@ -11503,14 +11518,14 @@
}
Element removeLast() {
- final result = this.last();
+ final result = this.last;
if (result != null) {
_element.$dom_removeChild(result);
}
return result;
}
- Element last() {
+ Element get last {
return _element.$dom_lastElementChild;
}
}
@@ -11575,14 +11590,14 @@
return false;
}
- bool isEmpty() => _nodeList.isEmpty();
+ bool get isEmpty => _nodeList.isEmpty;
int get length => _nodeList.length;
Element operator [](int index) => _nodeList[index];
void operator []=(int index, Element value) {
- throw const UnsupportedOperationException('');
+ throw new UnsupportedError('');
}
void set length(int newLength) {
@@ -11590,33 +11605,33 @@
}
void add(Element value) {
- throw const UnsupportedOperationException('');
+ throw new UnsupportedError('');
}
void addLast(Element value) {
- throw const UnsupportedOperationException('');
+ throw new UnsupportedError('');
}
Iterator<Element> iterator() => new _FrozenElementListIterator(this);
void addAll(Collection<Element> collection) {
- throw const UnsupportedOperationException('');
+ throw new UnsupportedError('');
}
void sort([Comparator<Element> compare = Comparable.compare]) {
- throw const UnsupportedOperationException('');
+ throw new UnsupportedError('');
}
void setRange(int start, int rangeLength, List from, [int startFrom = 0]) {
- throw const UnsupportedOperationException('');
+ throw new UnsupportedError('');
}
void removeRange(int start, int rangeLength) {
- throw const UnsupportedOperationException('');
+ throw new UnsupportedError('');
}
void insertRange(int start, int rangeLength, [initialValue = null]) {
- throw const UnsupportedOperationException('');
+ throw new UnsupportedError('');
}
List<Element> getRange(int start, int rangeLength) =>
@@ -11629,14 +11644,14 @@
_nodeList.lastIndexOf(element, start);
void clear() {
- throw const UnsupportedOperationException('');
+ throw new UnsupportedError('');
}
Element removeLast() {
- throw const UnsupportedOperationException('');
+ throw new UnsupportedError('');
}
- Element last() => _nodeList.last();
+ Element get last => _nodeList.last;
}
class _FrozenElementListIterator implements Iterator<Element> {
@@ -11647,11 +11662,11 @@
/**
* Gets the next element in the iteration. Throws a
- * [NoMoreElementsException] if no element is left.
+ * [StateError("No more elements")] if no element is left.
*/
Element next() {
- if (!hasNext()) {
- throw const NoMoreElementsException();
+ if (!hasNext) {
+ throw new StateError("No more elements");
}
return _list[_index++];
@@ -11660,7 +11675,7 @@
/**
* Returns whether the [Iterator] has elements left.
*/
- bool hasNext() => _index < _list.length;
+ bool get hasNext => _index < _list.length;
}
class _ElementAttributeMap implements AttributeMap {
@@ -11719,7 +11734,7 @@
}
}
- Collection<String> getKeys() {
+ Collection<String> get keys {
// TODO(jacobr): generate a lazy collection instead.
final attributes = _element.$dom_attributes;
final keys = new List<String>(attributes.length);
@@ -11729,7 +11744,7 @@
return keys;
}
- Collection<String> getValues() {
+ Collection<String> get values {
// TODO(jacobr): generate a lazy collection instead.
final attributes = _element.$dom_attributes;
final values = new List<String>(attributes.length);
@@ -11749,7 +11764,7 @@
/**
* Returns true if there is no {key, value} pair in the map.
*/
- bool isEmpty() {
+ bool get isEmpty {
return length == 0;
}
}
@@ -11767,7 +11782,7 @@
// interface Map
// TODO: Use lazy iterator when it is available on Map.
- bool containsValue(String value) => getValues().some((v) => v == value);
+ bool containsValue(String value) => values.some((v) => v == value);
bool containsKey(String key) => $dom_attributes.containsKey(_attr(key));
@@ -11784,7 +11799,7 @@
void clear() {
// Needs to operate on a snapshot since we are mutating the collection.
- for (String key in getKeys()) {
+ for (String key in keys) {
remove(key);
}
}
@@ -11797,7 +11812,7 @@
});
}
- Collection<String> getKeys() {
+ Collection<String> get keys {
final keys = new List<String>();
$dom_attributes.forEach((String key, String value) {
if (_matches(key)) {
@@ -11807,7 +11822,7 @@
return keys;
}
- Collection<String> getValues() {
+ Collection<String> get values {
final values = new List<String>();
$dom_attributes.forEach((String key, String value) {
if (_matches(key)) {
@@ -11817,10 +11832,10 @@
return values;
}
- int get length => getKeys().length;
+ int get length => keys.length;
// TODO: Use lazy iterator when it is available on Map.
- bool isEmpty() => length == 0;
+ bool get isEmpty => length == 0;
// Helpers.
String _attr(String key) => 'data-$key';
@@ -11853,7 +11868,7 @@
bool some(bool f(String element)) => _read().some(f);
- bool isEmpty() => _read().isEmpty();
+ bool get isEmpty => _read().isEmpty;
bool get frozen => false;
@@ -11937,7 +11952,7 @@
Set<String> s = new Set<String>();
for (String name in _classname().split(' ')) {
String trimmed = name.trim();
- if (!trimmed.isEmpty()) {
+ if (!trimmed.isEmpty) {
s.add(trimmed);
}
}
@@ -11976,7 +11991,7 @@
const _SimpleClientRect(this.left, this.top, this.width, this.height);
bool operator ==(ClientRect other) {
- return other !== null && left == other.left && top == other.top
+ return other != null && left == other.left && top == other.top
&& width == other.width && height == other.height;
}
@@ -12039,7 +12054,7 @@
void set attributes(Map<String, String> value) {
Map<String, String> attributes = this.attributes;
attributes.clear();
- for (String key in value.getKeys()) {
+ for (String key in value.keys) {
attributes[key] = value[key];
}
}
@@ -12071,7 +12086,7 @@
void set dataAttributes(Map<String, String> value) {
final dataAttributes = this.dataAttributes;
dataAttributes.clear();
- for (String key in value.getKeys()) {
+ for (String key in value.keys) {
dataAttributes[key] = value[key];
}
}
@@ -12167,7 +12182,7 @@
_ElementEventsImpl get on =>
new _ElementEventsImpl(this);
- _HTMLCollectionImpl get $dom_children() => JS("_HTMLCollectionImpl", "#.children", this);
+ _HTMLCollectionImpl get $dom_children => JS("_HTMLCollectionImpl", "#.children", this);
String contentEditable;
@@ -12199,9 +12214,9 @@
void click() native;
- int get $dom_childElementCount() => JS("int", "#.childElementCount", this);
+ int get $dom_childElementCount => JS("int", "#.childElementCount", this);
- String get $dom_className() => JS("String", "#.className", this);
+ String get $dom_className => JS("String", "#.className", this);
void set $dom_className(String value) {
JS("void", "#.className = #", this, value);
@@ -12217,9 +12232,9 @@
final Map<String, String> dataset;
- _ElementImpl get $dom_firstElementChild() => JS("_ElementImpl", "#.firstElementChild", this);
+ _ElementImpl get $dom_firstElementChild => JS("_ElementImpl", "#.firstElementChild", this);
- _ElementImpl get $dom_lastElementChild() => JS("_ElementImpl", "#.lastElementChild", this);
+ _ElementImpl get $dom_lastElementChild => JS("_ElementImpl", "#.lastElementChild", this);
final _ElementImpl nextElementSibling;
@@ -12317,7 +12332,7 @@
String parentTag = 'div';
String tag;
final match = _START_TAG_REGEXP.firstMatch(html);
- if (match !== null) {
+ if (match != null) {
tag = match.group(1).toLowerCase();
if (_CUSTOM_PARENT_TAG_MAP.containsKey(tag)) {
parentTag = _CUSTOM_PARENT_TAG_MAP[tag];
@@ -12493,19 +12508,19 @@
abstract class ElementTraversal {
/** @domName ElementTraversal.childElementCount */
- abstract int get childElementCount;
+ int get childElementCount;
/** @domName ElementTraversal.firstElementChild */
- abstract Element get firstElementChild;
+ Element get firstElementChild;
/** @domName ElementTraversal.lastElementChild */
- abstract Element get lastElementChild;
+ Element get lastElementChild;
/** @domName ElementTraversal.nextElementSibling */
- abstract Element get nextElementSibling;
+ Element get nextElementSibling;
/** @domName ElementTraversal.previousElementSibling */
- abstract Element get previousElementSibling;
+ Element get previousElementSibling;
}
// 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
@@ -12569,6 +12584,7 @@
// WARNING: Do not edit - generated code.
+
typedef void EntriesCallback(List<Entry> entries);
// 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
@@ -12580,19 +12596,19 @@
abstract class Entry {
/** @domName Entry.filesystem */
- abstract DOMFileSystem get filesystem;
+ DOMFileSystem get filesystem;
/** @domName Entry.fullPath */
- abstract String get fullPath;
+ String get fullPath;
/** @domName Entry.isDirectory */
- abstract bool get isDirectory;
+ bool get isDirectory;
/** @domName Entry.isFile */
- abstract bool get isFile;
+ bool get isFile;
/** @domName Entry.name */
- abstract String get name;
+ String get name;
/** @domName Entry.copyTo */
void copyTo(DirectoryEntry parent, [String name, EntryCallback successCallback, ErrorCallback errorCallback]);
@@ -12620,7 +12636,7 @@
_EntryImpl operator[](int index) => JS("_EntryImpl", "#[#]", this, index);
void operator[]=(int index, _EntryImpl value) {
- throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+ throw new UnsupportedError("Cannot assign element of immutable List.");
}
// -- start List<Entry> mixins.
// Entry is the element type.
@@ -12637,15 +12653,15 @@
// From Collection<Entry>:
void add(Entry value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addLast(Entry value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addAll(Collection<Entry> collection) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
bool contains(Entry element) => _Collections.contains(this, element);
@@ -12661,38 +12677,38 @@
bool some(bool f(Entry element)) => _Collections.some(this, f);
- bool isEmpty() => this.length == 0;
+ bool get isEmpty => this.length == 0;
// From List<Entry>:
void sort([Comparator<Entry> compare = Comparable.compare]) {
- throw const UnsupportedOperationException("Cannot sort immutable List.");
+ throw new UnsupportedError("Cannot sort immutable List.");
}
int indexOf(Entry element, [int start = 0]) =>
_Lists.indexOf(this, element, start, this.length);
int lastIndexOf(Entry element, [int start]) {
- if (start === null) start = length - 1;
+ if (start == null) start = length - 1;
return _Lists.lastIndexOf(this, element, start);
}
- Entry last() => this[length - 1];
+ Entry get last => this[length - 1];
Entry removeLast() {
- throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+ throw new UnsupportedError("Cannot removeLast on immutable List.");
}
void setRange(int start, int rangeLength, List<Entry> from, [int startFrom]) {
- throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+ throw new UnsupportedError("Cannot setRange on immutable List.");
}
void removeRange(int start, int rangeLength) {
- throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+ throw new UnsupportedError("Cannot removeRange on immutable List.");
}
void insertRange(int start, int rangeLength, [Entry initialValue]) {
- throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+ throw new UnsupportedError("Cannot insertRange on immutable List.");
}
List<Entry> getRange(int start, int rangeLength) =>
@@ -12710,7 +12726,7 @@
_EntrySyncImpl operator[](int index) => JS("_EntrySyncImpl", "#[#]", this, index);
void operator[]=(int index, _EntrySyncImpl value) {
- throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+ throw new UnsupportedError("Cannot assign element of immutable List.");
}
// -- start List<EntrySync> mixins.
// EntrySync is the element type.
@@ -12727,15 +12743,15 @@
// From Collection<EntrySync>:
void add(EntrySync value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addLast(EntrySync value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addAll(Collection<EntrySync> collection) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
bool contains(EntrySync element) => _Collections.contains(this, element);
@@ -12751,38 +12767,38 @@
bool some(bool f(EntrySync element)) => _Collections.some(this, f);
- bool isEmpty() => this.length == 0;
+ bool get isEmpty => this.length == 0;
// From List<EntrySync>:
void sort([Comparator<EntrySync> compare = Comparable.compare]) {
- throw const UnsupportedOperationException("Cannot sort immutable List.");
+ throw new UnsupportedError("Cannot sort immutable List.");
}
int indexOf(EntrySync element, [int start = 0]) =>
_Lists.indexOf(this, element, start, this.length);
int lastIndexOf(EntrySync element, [int start]) {
- if (start === null) start = length - 1;
+ if (start == null) start = length - 1;
return _Lists.lastIndexOf(this, element, start);
}
- EntrySync last() => this[length - 1];
+ EntrySync get last => this[length - 1];
EntrySync removeLast() {
- throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+ throw new UnsupportedError("Cannot removeLast on immutable List.");
}
void setRange(int start, int rangeLength, List<EntrySync> from, [int startFrom]) {
- throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+ throw new UnsupportedError("Cannot setRange on immutable List.");
}
void removeRange(int start, int rangeLength) {
- throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+ throw new UnsupportedError("Cannot removeRange on immutable List.");
}
void insertRange(int start, int rangeLength, [EntrySync initialValue]) {
- throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+ throw new UnsupportedError("Cannot insertRange on immutable List.");
}
List<EntrySync> getRange(int start, int rangeLength) =>
@@ -12798,6 +12814,7 @@
// WARNING: Do not edit - generated code.
+
typedef void EntryCallback(Entry entry);
class _EntryImpl implements Entry native "*Entry" {
@@ -12834,19 +12851,19 @@
abstract class EntrySync {
/** @domName EntrySync.filesystem */
- abstract DOMFileSystemSync get filesystem;
+ DOMFileSystemSync get filesystem;
/** @domName EntrySync.fullPath */
- abstract String get fullPath;
+ String get fullPath;
/** @domName EntrySync.isDirectory */
- abstract bool get isDirectory;
+ bool get isDirectory;
/** @domName EntrySync.isFile */
- abstract bool get isFile;
+ bool get isFile;
/** @domName EntrySync.name */
- abstract String get name;
+ String get name;
/** @domName EntrySync.copyTo */
EntrySync copyTo(DirectoryEntrySync parent, String name);
@@ -12897,6 +12914,7 @@
// WARNING: Do not edit - generated code.
+
typedef void ErrorCallback(FileError error);
// 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
@@ -12908,13 +12926,13 @@
abstract class ErrorEvent implements Event {
/** @domName ErrorEvent.filename */
- abstract String get filename;
+ String get filename;
/** @domName ErrorEvent.lineno */
- abstract int get lineno;
+ int get lineno;
/** @domName ErrorEvent.message */
- abstract String get message;
+ String get message;
}
class _ErrorEventImpl extends _EventImpl implements ErrorEvent native "*ErrorEvent" {
@@ -12931,6 +12949,7 @@
// WARNING: Do not edit - generated code.
+
/// @domName Event
abstract class Event {
@@ -12984,40 +13003,40 @@
static const int SELECT = 16384;
/** @domName Event.bubbles */
- abstract bool get bubbles;
+ bool get bubbles;
/** @domName Event.cancelBubble */
bool cancelBubble;
/** @domName Event.cancelable */
- abstract bool get cancelable;
+ bool get cancelable;
/** @domName Event.clipboardData */
- abstract Clipboard get clipboardData;
+ Clipboard get clipboardData;
/** @domName Event.currentTarget */
- abstract EventTarget get currentTarget;
+ EventTarget get currentTarget;
/** @domName Event.defaultPrevented */
- abstract bool get defaultPrevented;
+ bool get defaultPrevented;
/** @domName Event.eventPhase */
- abstract int get eventPhase;
+ int get eventPhase;
/** @domName Event.returnValue */
bool returnValue;
/** @domName Event.srcElement */
- abstract EventTarget get srcElement;
+ EventTarget get srcElement;
/** @domName Event.target */
- abstract EventTarget get target;
+ EventTarget get target;
/** @domName Event.timeStamp */
- abstract int get timeStamp;
+ int get timeStamp;
/** @domName Event.type */
- abstract String get type;
+ String get type;
/** @domName Event.initEvent */
void $dom_initEvent(String eventTypeArg, bool canBubbleArg, bool cancelableArg);
@@ -13045,13 +13064,13 @@
static const int UNSPECIFIED_EVENT_TYPE_ERR = 0;
/** @domName EventException.code */
- abstract int get code;
+ int get code;
/** @domName EventException.message */
- abstract String get message;
+ String get message;
/** @domName EventException.name */
- abstract String get name;
+ String get name;
/** @domName EventException.toString */
String toString();
@@ -13079,7 +13098,7 @@
final _ClipboardImpl clipboardData;
EventTarget get currentTarget => _convertNativeToDart_EventTarget(this._currentTarget);
- EventTarget get _currentTarget() => JS("EventTarget", "#.currentTarget", this);
+ EventTarget get _currentTarget => JS("EventTarget", "#.currentTarget", this);
final bool defaultPrevented;
@@ -13088,10 +13107,10 @@
bool returnValue;
EventTarget get srcElement => _convertNativeToDart_EventTarget(this._srcElement);
- EventTarget get _srcElement() => JS("EventTarget", "#.srcElement", this);
+ EventTarget get _srcElement => JS("EventTarget", "#.srcElement", this);
EventTarget get target => _convertNativeToDart_EventTarget(this._target);
- EventTarget get _target() => JS("EventTarget", "#.target", this);
+ EventTarget get _target => JS("EventTarget", "#.target", this);
final int timeStamp;
@@ -13128,13 +13147,13 @@
static const int OPEN = 1;
/** @domName EventSource.URL */
- abstract String get URL;
+ String get URL;
/** @domName EventSource.readyState */
- abstract int get readyState;
+ int get readyState;
/** @domName EventSource.url */
- abstract String get url;
+ String get url;
/** @domName EventSource.addEventListener */
void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
@@ -13193,6 +13212,7 @@
// WARNING: Do not edit - generated code.
+
abstract class EventListenerList {
EventListenerList add(EventListener handler, [bool useCapture]);
@@ -13229,7 +13249,7 @@
/* Raw event target. */
// TODO(jacobr): it would be nice if we could specify this as
// _EventTargetImpl or EventTarget
- final Dynamic _ptr;
+ final _ptr;
_EventsImpl(this._ptr);
@@ -13241,7 +13261,7 @@
class _EventListenerListImpl implements EventListenerList {
// TODO(jacobr): make this _EventTargetImpl
- final Dynamic _ptr;
+ final _ptr;
final String _type;
_EventListenerListImpl(this._ptr, this._type);
@@ -13300,25 +13320,25 @@
bool disabled;
/** @domName HTMLFieldSetElement.elements */
- abstract HTMLCollection get elements;
+ HTMLCollection get elements;
/** @domName HTMLFieldSetElement.form */
- abstract FormElement get form;
+ FormElement get form;
/** @domName HTMLFieldSetElement.name */
String name;
/** @domName HTMLFieldSetElement.type */
- abstract String get type;
+ String get type;
/** @domName HTMLFieldSetElement.validationMessage */
- abstract String get validationMessage;
+ String get validationMessage;
/** @domName HTMLFieldSetElement.validity */
- abstract ValidityState get validity;
+ ValidityState get validity;
/** @domName HTMLFieldSetElement.willValidate */
- abstract bool get willValidate;
+ bool get willValidate;
/** @domName HTMLFieldSetElement.checkValidity */
bool checkValidity();
@@ -13359,13 +13379,13 @@
abstract class File implements Blob {
/** @domName File.lastModifiedDate */
- abstract Date get lastModifiedDate;
+ Date get lastModifiedDate;
/** @domName File.name */
- abstract String get name;
+ String get name;
/** @domName File.webkitRelativePath */
- abstract String get webkitRelativePath;
+ String get webkitRelativePath;
}
// 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
@@ -13373,6 +13393,7 @@
// WARNING: Do not edit - generated code.
+
typedef void FileCallback(File 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
@@ -13452,7 +13473,7 @@
static const int TYPE_MISMATCH_ERR = 11;
/** @domName FileError.code */
- abstract int get code;
+ int get code;
}
class _FileErrorImpl implements FileError native "*FileError" {
@@ -13493,13 +13514,13 @@
static const int TYPE_MISMATCH_ERR = 11;
/** @domName FileException.code */
- abstract int get code;
+ int get code;
/** @domName FileException.message */
- abstract String get message;
+ String get message;
/** @domName FileException.name */
- abstract String get name;
+ String get name;
/** @domName FileException.toString */
String toString();
@@ -13532,7 +13553,7 @@
_FileImpl operator[](int index) => JS("_FileImpl", "#[#]", this, index);
void operator[]=(int index, _FileImpl value) {
- throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+ throw new UnsupportedError("Cannot assign element of immutable List.");
}
// -- start List<File> mixins.
// File is the element type.
@@ -13549,15 +13570,15 @@
// From Collection<File>:
void add(File value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addLast(File value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addAll(Collection<File> collection) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
bool contains(File element) => _Collections.contains(this, element);
@@ -13573,38 +13594,38 @@
bool some(bool f(File element)) => _Collections.some(this, f);
- bool isEmpty() => this.length == 0;
+ bool get isEmpty => this.length == 0;
// From List<File>:
void sort([Comparator<File> compare = Comparable.compare]) {
- throw const UnsupportedOperationException("Cannot sort immutable List.");
+ throw new UnsupportedError("Cannot sort immutable List.");
}
int indexOf(File element, [int start = 0]) =>
_Lists.indexOf(this, element, start, this.length);
int lastIndexOf(File element, [int start]) {
- if (start === null) start = length - 1;
+ if (start == null) start = length - 1;
return _Lists.lastIndexOf(this, element, start);
}
- File last() => this[length - 1];
+ File get last => this[length - 1];
File removeLast() {
- throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+ throw new UnsupportedError("Cannot removeLast on immutable List.");
}
void setRange(int start, int rangeLength, List<File> from, [int startFrom]) {
- throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+ throw new UnsupportedError("Cannot setRange on immutable List.");
}
void removeRange(int start, int rangeLength) {
- throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+ throw new UnsupportedError("Cannot removeRange on immutable List.");
}
void insertRange(int start, int rangeLength, [File initialValue]) {
- throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+ throw new UnsupportedError("Cannot insertRange on immutable List.");
}
List<File> getRange(int start, int rangeLength) =>
@@ -13637,13 +13658,13 @@
static const int LOADING = 1;
/** @domName FileReader.error */
- abstract FileError get error;
+ FileError get error;
/** @domName FileReader.readyState */
- abstract int get readyState;
+ int get readyState;
/** @domName FileReader.result */
- abstract Object get result;
+ Object get result;
/** @domName FileReader.abort */
void abort();
@@ -13768,6 +13789,7 @@
// WARNING: Do not edit - generated code.
+
typedef void FileSystemCallback(DOMFileSystem fileSystem);
// 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
@@ -13790,16 +13812,16 @@
static const int WRITING = 1;
/** @domName FileWriter.error */
- abstract FileError get error;
+ FileError get error;
/** @domName FileWriter.length */
- abstract int get length;
+ int get length;
/** @domName FileWriter.position */
- abstract int get position;
+ int get position;
/** @domName FileWriter.readyState */
- abstract int get readyState;
+ int get readyState;
/** @domName FileWriter.abort */
void abort();
@@ -13843,6 +13865,7 @@
// WARNING: Do not edit - generated code.
+
typedef void FileWriterCallback(FileWriter fileWriter);
class _FileWriterImpl extends _EventTargetImpl implements FileWriter native "*FileWriter" {
@@ -13898,10 +13921,10 @@
abstract class FileWriterSync {
/** @domName FileWriterSync.length */
- abstract int get length;
+ int get length;
/** @domName FileWriterSync.position */
- abstract int get position;
+ int get position;
/** @domName FileWriterSync.seek */
void seek(int position);
@@ -13946,7 +13969,7 @@
static const int BYTES_PER_ELEMENT = 4;
/** @domName Float32Array.length */
- abstract int get length;
+ int get length;
/** @domName Float32Array.setElements */
void setElements(Object array, [int offset]);
@@ -13977,15 +14000,15 @@
// From Collection<num>:
void add(num value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addLast(num value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addAll(Collection<num> collection) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
bool contains(num element) => _Collections.contains(this, element);
@@ -14001,38 +14024,38 @@
bool some(bool f(num element)) => _Collections.some(this, f);
- bool isEmpty() => this.length == 0;
+ bool get isEmpty => this.length == 0;
// From List<num>:
void sort([Comparator<num> compare = Comparable.compare]) {
- throw const UnsupportedOperationException("Cannot sort immutable List.");
+ throw new UnsupportedError("Cannot sort immutable List.");
}
int indexOf(num element, [int start = 0]) =>
_Lists.indexOf(this, element, start, this.length);
int lastIndexOf(num element, [int start]) {
- if (start === null) start = length - 1;
+ if (start == null) start = length - 1;
return _Lists.lastIndexOf(this, element, start);
}
- num last() => this[length - 1];
+ num get last => this[length - 1];
num removeLast() {
- throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+ throw new UnsupportedError("Cannot removeLast on immutable List.");
}
void setRange(int start, int rangeLength, List<num> from, [int startFrom]) {
- throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+ throw new UnsupportedError("Cannot setRange on immutable List.");
}
void removeRange(int start, int rangeLength) {
- throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+ throw new UnsupportedError("Cannot removeRange on immutable List.");
}
void insertRange(int start, int rangeLength, [num initialValue]) {
- throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+ throw new UnsupportedError("Cannot insertRange on immutable List.");
}
List<num> getRange(int start, int rangeLength) =>
@@ -14065,7 +14088,7 @@
static const int BYTES_PER_ELEMENT = 8;
/** @domName Float64Array.length */
- abstract int get length;
+ int get length;
/** @domName Float64Array.setElements */
void setElements(Object array, [int offset]);
@@ -14096,15 +14119,15 @@
// From Collection<num>:
void add(num value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addLast(num value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addAll(Collection<num> collection) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
bool contains(num element) => _Collections.contains(this, element);
@@ -14120,38 +14143,38 @@
bool some(bool f(num element)) => _Collections.some(this, f);
- bool isEmpty() => this.length == 0;
+ bool get isEmpty => this.length == 0;
// From List<num>:
void sort([Comparator<num> compare = Comparable.compare]) {
- throw const UnsupportedOperationException("Cannot sort immutable List.");
+ throw new UnsupportedError("Cannot sort immutable List.");
}
int indexOf(num element, [int start = 0]) =>
_Lists.indexOf(this, element, start, this.length);
int lastIndexOf(num element, [int start]) {
- if (start === null) start = length - 1;
+ if (start == null) start = length - 1;
return _Lists.lastIndexOf(this, element, start);
}
- num last() => this[length - 1];
+ num get last => this[length - 1];
num removeLast() {
- throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+ throw new UnsupportedError("Cannot removeLast on immutable List.");
}
void setRange(int start, int rangeLength, List<num> from, [int startFrom]) {
- throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+ throw new UnsupportedError("Cannot setRange on immutable List.");
}
void removeRange(int start, int rangeLength) {
- throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+ throw new UnsupportedError("Cannot removeRange on immutable List.");
}
void insertRange(int start, int rangeLength, [num initialValue]) {
- throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+ throw new UnsupportedError("Cannot insertRange on immutable List.");
}
List<num> getRange(int start, int rangeLength) =>
@@ -14241,7 +14264,7 @@
String enctype;
/** @domName HTMLFormElement.length */
- abstract int get length;
+ int get length;
/** @domName HTMLFormElement.method */
String method;
@@ -14302,17 +14325,14 @@
/// @domName HTMLFrameElement
abstract class FrameElement implements Element {
- /** @domName HTMLFrameElement.contentDocument */
- abstract Document get contentDocument;
-
/** @domName HTMLFrameElement.contentWindow */
- abstract Window get contentWindow;
+ Window get contentWindow;
/** @domName HTMLFrameElement.frameBorder */
String frameBorder;
/** @domName HTMLFrameElement.height */
- abstract int get height;
+ int get height;
/** @domName HTMLFrameElement.location */
String location;
@@ -14339,18 +14359,13 @@
String src;
/** @domName HTMLFrameElement.width */
- abstract int get width;
-
- /** @domName HTMLFrameElement.getSVGDocument */
- SVGDocument getSVGDocument();
+ int get width;
}
class _FrameElementImpl extends _ElementImpl implements FrameElement native "*HTMLFrameElement" {
- final _DocumentImpl contentDocument;
-
Window get contentWindow => _convertNativeToDart_Window(this._contentWindow);
- Window get _contentWindow() => JS("Window", "#.contentWindow", this);
+ Window get _contentWindow => JS("Window", "#.contentWindow", this);
String frameBorder;
@@ -14373,8 +14388,6 @@
String src;
final int width;
-
- _SVGDocumentImpl getSVGDocument() native;
}
// 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
@@ -14475,19 +14488,19 @@
abstract class Gamepad {
/** @domName Gamepad.axes */
- abstract List<num> get axes;
+ List<num> get axes;
/** @domName Gamepad.buttons */
- abstract List<num> get buttons;
+ List<num> get buttons;
/** @domName Gamepad.id */
- abstract String get id;
+ String get id;
/** @domName Gamepad.index */
- abstract int get index;
+ int get index;
/** @domName Gamepad.timestamp */
- abstract int get timestamp;
+ int get timestamp;
}
class _GamepadImpl implements Gamepad native "*Gamepad" {
@@ -14510,7 +14523,7 @@
_GamepadImpl operator[](int index) => JS("_GamepadImpl", "#[#]", this, index);
void operator[]=(int index, _GamepadImpl value) {
- throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+ throw new UnsupportedError("Cannot assign element of immutable List.");
}
// -- start List<Gamepad> mixins.
// Gamepad is the element type.
@@ -14527,15 +14540,15 @@
// From Collection<Gamepad>:
void add(Gamepad value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addLast(Gamepad value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addAll(Collection<Gamepad> collection) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
bool contains(Gamepad element) => _Collections.contains(this, element);
@@ -14551,38 +14564,38 @@
bool some(bool f(Gamepad element)) => _Collections.some(this, f);
- bool isEmpty() => this.length == 0;
+ bool get isEmpty => this.length == 0;
// From List<Gamepad>:
void sort([Comparator<Gamepad> compare = Comparable.compare]) {
- throw const UnsupportedOperationException("Cannot sort immutable List.");
+ throw new UnsupportedError("Cannot sort immutable List.");
}
int indexOf(Gamepad element, [int start = 0]) =>
_Lists.indexOf(this, element, start, this.length);
int lastIndexOf(Gamepad element, [int start]) {
- if (start === null) start = length - 1;
+ if (start == null) start = length - 1;
return _Lists.lastIndexOf(this, element, start);
}
- Gamepad last() => this[length - 1];
+ Gamepad get last => this[length - 1];
Gamepad removeLast() {
- throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+ throw new UnsupportedError("Cannot removeLast on immutable List.");
}
void setRange(int start, int rangeLength, List<Gamepad> from, [int startFrom]) {
- throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+ throw new UnsupportedError("Cannot setRange on immutable List.");
}
void removeRange(int start, int rangeLength) {
- throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+ throw new UnsupportedError("Cannot removeRange on immutable List.");
}
void insertRange(int start, int rangeLength, [Gamepad initialValue]) {
- throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+ throw new UnsupportedError("Cannot insertRange on immutable List.");
}
List<Gamepad> getRange(int start, int rangeLength) =>
@@ -14629,10 +14642,10 @@
abstract class Geoposition {
/** @domName Geoposition.coords */
- abstract Coordinates get coords;
+ Coordinates get coords;
/** @domName Geoposition.timestamp */
- abstract int get timestamp;
+ int get timestamp;
}
class _GeopositionImpl implements Geoposition native "*Geoposition" {
@@ -14685,7 +14698,7 @@
abstract class HTMLAllCollection implements List<Node> {
/** @domName HTMLAllCollection.length */
- abstract int get length;
+ int get length;
/** @domName HTMLAllCollection.item */
Node item(int index);
@@ -14704,7 +14717,7 @@
_NodeImpl operator[](int index) => JS("_NodeImpl", "#[#]", this, index);
void operator[]=(int index, _NodeImpl value) {
- throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+ throw new UnsupportedError("Cannot assign element of immutable List.");
}
// -- start List<Node> mixins.
// Node is the element type.
@@ -14721,15 +14734,15 @@
// From Collection<Node>:
void add(Node value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addLast(Node value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addAll(Collection<Node> collection) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
bool contains(Node element) => _Collections.contains(this, element);
@@ -14745,38 +14758,38 @@
bool some(bool f(Node element)) => _Collections.some(this, f);
- bool isEmpty() => this.length == 0;
+ bool get isEmpty => this.length == 0;
// From List<Node>:
void sort([Comparator<Node> compare = Comparable.compare]) {
- throw const UnsupportedOperationException("Cannot sort immutable List.");
+ throw new UnsupportedError("Cannot sort immutable List.");
}
int indexOf(Node element, [int start = 0]) =>
_Lists.indexOf(this, element, start, this.length);
int lastIndexOf(Node element, [int start]) {
- if (start === null) start = length - 1;
+ if (start == null) start = length - 1;
return _Lists.lastIndexOf(this, element, start);
}
- Node last() => this[length - 1];
+ Node get last => this[length - 1];
Node removeLast() {
- throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+ throw new UnsupportedError("Cannot removeLast on immutable List.");
}
void setRange(int start, int rangeLength, List<Node> from, [int startFrom]) {
- throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+ throw new UnsupportedError("Cannot setRange on immutable List.");
}
void removeRange(int start, int rangeLength) {
- throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+ throw new UnsupportedError("Cannot removeRange on immutable List.");
}
void insertRange(int start, int rangeLength, [Node initialValue]) {
- throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+ throw new UnsupportedError("Cannot insertRange on immutable List.");
}
List<Node> getRange(int start, int rangeLength) =>
@@ -14800,7 +14813,7 @@
abstract class HTMLCollection implements List<Node> {
/** @domName HTMLCollection.length */
- abstract int get length;
+ int get length;
/** @domName HTMLCollection.item */
Node item(int index);
@@ -14816,7 +14829,7 @@
_NodeImpl operator[](int index) => JS("_NodeImpl", "#[#]", this, index);
void operator[]=(int index, _NodeImpl value) {
- throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+ throw new UnsupportedError("Cannot assign element of immutable List.");
}
// -- start List<Node> mixins.
// Node is the element type.
@@ -14833,15 +14846,15 @@
// From Collection<Node>:
void add(Node value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addLast(Node value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addAll(Collection<Node> collection) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
bool contains(Node element) => _Collections.contains(this, element);
@@ -14857,38 +14870,38 @@
bool some(bool f(Node element)) => _Collections.some(this, f);
- bool isEmpty() => this.length == 0;
+ bool get isEmpty => this.length == 0;
// From List<Node>:
void sort([Comparator<Node> compare = Comparable.compare]) {
- throw const UnsupportedOperationException("Cannot sort immutable List.");
+ throw new UnsupportedError("Cannot sort immutable List.");
}
int indexOf(Node element, [int start = 0]) =>
_Lists.indexOf(this, element, start, this.length);
int lastIndexOf(Node element, [int start]) {
- if (start === null) start = length - 1;
+ if (start == null) start = length - 1;
return _Lists.lastIndexOf(this, element, start);
}
- Node last() => this[length - 1];
+ Node get last => this[length - 1];
Node removeLast() {
- throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+ throw new UnsupportedError("Cannot removeLast on immutable List.");
}
void setRange(int start, int rangeLength, List<Node> from, [int startFrom]) {
- throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+ throw new UnsupportedError("Cannot setRange on immutable List.");
}
void removeRange(int start, int rangeLength) {
- throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+ throw new UnsupportedError("Cannot removeRange on immutable List.");
}
void insertRange(int start, int rangeLength, [Node initialValue]) {
- throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+ throw new UnsupportedError("Cannot insertRange on immutable List.");
}
List<Node> getRange(int start, int rangeLength) =>
@@ -14922,7 +14935,7 @@
class _HTMLOptionsCollectionImpl extends _HTMLCollectionImpl implements HTMLOptionsCollection native "*HTMLOptionsCollection" {
// Shadowing definition.
- int get length() => JS("int", "#.length", this);
+ int get length => JS("int", "#.length", this);
void set length(int value) {
JS("void", "#.length = #", this, value);
@@ -14942,10 +14955,10 @@
abstract class HashChangeEvent implements Event {
/** @domName HashChangeEvent.newURL */
- abstract String get newURL;
+ String get newURL;
/** @domName HashChangeEvent.oldURL */
- abstract String get oldURL;
+ String get oldURL;
/** @domName HashChangeEvent.initHashChangeEvent */
void initHashChangeEvent(String type, bool canBubble, bool cancelable, String oldURL, String newURL);
@@ -15027,6 +15040,7 @@
// WARNING: Do not edit - generated code.
+
/// @domName XMLHttpRequest
abstract class HttpRequest implements EventTarget {
factory HttpRequest.get(String url, onSuccess(HttpRequest request)) =>
@@ -15053,28 +15067,28 @@
static const int UNSENT = 0;
/** @domName XMLHttpRequest.readyState */
- abstract int get readyState;
+ int get readyState;
/** @domName XMLHttpRequest.response */
- abstract Object get response;
+ Object get response;
/** @domName XMLHttpRequest.responseText */
- abstract String get responseText;
+ String get responseText;
/** @domName XMLHttpRequest.responseType */
String responseType;
/** @domName XMLHttpRequest.responseXML */
- abstract Document get responseXML;
+ Document get responseXML;
/** @domName XMLHttpRequest.status */
- abstract int get status;
+ int get status;
/** @domName XMLHttpRequest.statusText */
- abstract String get statusText;
+ String get statusText;
/** @domName XMLHttpRequest.upload */
- abstract HttpRequestUpload get upload;
+ HttpRequestUpload get upload;
/** @domName XMLHttpRequest.withCredentials */
bool withCredentials;
@@ -15140,13 +15154,13 @@
static const int NETWORK_ERR = 101;
/** @domName XMLHttpRequestException.code */
- abstract int get code;
+ int get code;
/** @domName XMLHttpRequestException.message */
- abstract String get message;
+ String get message;
/** @domName XMLHttpRequestException.name */
- abstract String get name;
+ String get name;
/** @domName XMLHttpRequestException.toString */
String toString();
@@ -15234,10 +15248,10 @@
abstract class HttpRequestProgressEvent implements ProgressEvent {
/** @domName XMLHttpRequestProgressEvent.position */
- abstract int get position;
+ int get position;
/** @domName XMLHttpRequestProgressEvent.totalSize */
- abstract int get totalSize;
+ int get totalSize;
}
class _HttpRequestProgressEventImpl extends _ProgressEventImpl implements HttpRequestProgressEvent native "*XMLHttpRequestProgressEvent" {
@@ -15342,16 +15356,16 @@
static const int PREV_NO_DUPLICATE = 3;
/** @domName IDBCursor.direction */
- abstract String get direction;
+ String get direction;
/** @domName IDBCursor.key */
- abstract Dynamic get key;
+ dynamic get key;
/** @domName IDBCursor.primaryKey */
- abstract Dynamic get primaryKey;
+ dynamic get primaryKey;
/** @domName IDBCursor.source */
- abstract Dynamic get source;
+ dynamic get source;
/** @domName IDBCursor.advance */
void advance(int count);
@@ -15370,13 +15384,13 @@
final String direction;
- Dynamic get key => _convertNativeToDart_IDBKey(this._key);
- Dynamic get _key() => JS("Dynamic", "#.key", this);
+ dynamic get key => _convertNativeToDart_IDBKey(this._key);
+ dynamic get _key => JS("dynamic", "#.key", this);
- Dynamic get primaryKey => _convertNativeToDart_IDBKey(this._primaryKey);
- Dynamic get _primaryKey() => JS("Dynamic", "#.primaryKey", this);
+ dynamic get primaryKey => _convertNativeToDart_IDBKey(this._primaryKey);
+ dynamic get _primaryKey => JS("dynamic", "#.primaryKey", this);
- final Dynamic source;
+ final dynamic source;
void advance(int count) native;
@@ -15410,13 +15424,13 @@
abstract class IDBCursorWithValue implements IDBCursor {
/** @domName IDBCursorWithValue.value */
- abstract Dynamic get value;
+ dynamic get value;
}
class _IDBCursorWithValueImpl extends _IDBCursorImpl implements IDBCursorWithValue native "*IDBCursorWithValue" {
- Dynamic get value => _convertNativeToDart_IDBAny(this._value);
- Dynamic get _value() => JS("Dynamic", "#.value", this);
+ dynamic get value => _convertNativeToDart_IDBAny(this._value);
+ dynamic get _value => JS("dynamic", "#.value", this);
}
// 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
@@ -15433,13 +15447,13 @@
IDBDatabaseEvents get on;
/** @domName IDBDatabase.name */
- abstract String get name;
+ String get name;
/** @domName IDBDatabase.objectStoreNames */
- abstract List<String> get objectStoreNames;
+ List<String> get objectStoreNames;
/** @domName IDBDatabase.version */
- abstract Dynamic get version;
+ dynamic get version;
/** @domName IDBDatabase.addEventListener */
void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
@@ -15510,13 +15524,13 @@
static const int VER_ERR = 12;
/** @domName IDBDatabaseException.code */
- abstract int get code;
+ int get code;
/** @domName IDBDatabaseException.message */
- abstract String get message;
+ String get message;
/** @domName IDBDatabaseException.name */
- abstract String get name;
+ String get name;
/** @domName IDBDatabaseException.toString */
String toString();
@@ -15587,7 +15601,7 @@
final _DOMStringListImpl objectStoreNames;
- final Dynamic version;
+ final dynamic version;
void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "addEventListener";
@@ -15672,19 +15686,19 @@
abstract class IDBIndex {
/** @domName IDBIndex.keyPath */
- abstract Dynamic get keyPath;
+ dynamic get keyPath;
/** @domName IDBIndex.multiEntry */
- abstract bool get multiEntry;
+ bool get multiEntry;
/** @domName IDBIndex.name */
- abstract String get name;
+ String get name;
/** @domName IDBIndex.objectStore */
- abstract IDBObjectStore get objectStore;
+ IDBObjectStore get objectStore;
/** @domName IDBIndex.unique */
- abstract bool get unique;
+ bool get unique;
/** @domName IDBIndex.count */
IDBRequest count([key_OR_range]);
@@ -15696,15 +15710,15 @@
IDBRequest getKey(key);
/** @domName IDBIndex.openCursor */
- IDBRequest openCursor([key_OR_range, direction]);
+ IDBRequest openCursor([key_OR_range, String direction]);
/** @domName IDBIndex.openKeyCursor */
- IDBRequest openKeyCursor([key_OR_range, direction]);
+ IDBRequest openKeyCursor([key_OR_range, String direction]);
}
class _IDBIndexImpl implements IDBIndex native "*IDBIndex" {
- final Dynamic keyPath;
+ final dynamic keyPath;
final bool multiEntry;
@@ -15718,7 +15732,7 @@
if (!?key_OR_range) {
return _count_1();
}
- if ((key_OR_range is IDBKeyRange || key_OR_range === null)) {
+ if ((key_OR_range is IDBKeyRange || key_OR_range == null)) {
return _count_2(key_OR_range);
}
if (?key_OR_range) {
@@ -15732,7 +15746,7 @@
_IDBRequestImpl _count_3(key) native "count";
_IDBRequestImpl get(key) {
- if ((key is IDBKeyRange || key === null)) {
+ if ((key is IDBKeyRange || key == null)) {
return _get_1(key);
}
if (?key) {
@@ -15745,7 +15759,7 @@
_IDBRequestImpl _get_2(key) native "get";
_IDBRequestImpl getKey(key) {
- if ((key is IDBKeyRange || key === null)) {
+ if ((key is IDBKeyRange || key == null)) {
return _getKey_1(key);
}
if (?key) {
@@ -15762,12 +15776,12 @@
!?direction) {
return _openCursor_1();
}
- if ((key_OR_range is IDBKeyRange || key_OR_range === null) &&
+ if ((key_OR_range is IDBKeyRange || key_OR_range == null) &&
!?direction) {
return _openCursor_2(key_OR_range);
}
- if ((key_OR_range is IDBKeyRange || key_OR_range === null) &&
- (direction is String || direction === null)) {
+ if ((key_OR_range is IDBKeyRange || key_OR_range == null) &&
+ (direction is String || direction == null)) {
return _openCursor_3(key_OR_range, direction);
}
if (?key_OR_range &&
@@ -15776,27 +15790,10 @@
return _openCursor_4(key_1);
}
if (?key_OR_range &&
- (direction is String || direction === null)) {
+ (direction is String || direction == null)) {
var key_2 = _convertDartToNative_IDBKey(key_OR_range);
return _openCursor_5(key_2, direction);
}
- if (!?key_OR_range &&
- !?direction) {
- return _openCursor_6();
- }
- if ((key_OR_range is IDBKeyRange || key_OR_range === null) &&
- !?direction) {
- return _openCursor_7(key_OR_range);
- }
- if ((key_OR_range is IDBKeyRange || key_OR_range === null) &&
- (direction is int || direction === null)) {
- return _openCursor_8(key_OR_range, direction);
- }
- if (?key_OR_range &&
- (direction is int || direction === null)) {
- var key_3 = _convertDartToNative_IDBKey(key_OR_range);
- return _openCursor_9(key_3, direction);
- }
throw const Exception("Incorrect number or type of arguments");
}
_IDBRequestImpl _openCursor_1() native "openCursor";
@@ -15804,22 +15801,18 @@
_IDBRequestImpl _openCursor_3(_IDBKeyRangeImpl range, String direction) native "openCursor";
_IDBRequestImpl _openCursor_4(key) native "openCursor";
_IDBRequestImpl _openCursor_5(key, String direction) native "openCursor";
- _IDBRequestImpl _openCursor_6() native "openCursor";
- _IDBRequestImpl _openCursor_7(_IDBKeyRangeImpl range) native "openCursor";
- _IDBRequestImpl _openCursor_8(_IDBKeyRangeImpl range, int direction) native "openCursor";
- _IDBRequestImpl _openCursor_9(key, int direction) native "openCursor";
_IDBRequestImpl openKeyCursor([key_OR_range, direction]) {
if (!?key_OR_range &&
!?direction) {
return _openKeyCursor_1();
}
- if ((key_OR_range is IDBKeyRange || key_OR_range === null) &&
+ if ((key_OR_range is IDBKeyRange || key_OR_range == null) &&
!?direction) {
return _openKeyCursor_2(key_OR_range);
}
- if ((key_OR_range is IDBKeyRange || key_OR_range === null) &&
- (direction is String || direction === null)) {
+ if ((key_OR_range is IDBKeyRange || key_OR_range == null) &&
+ (direction is String || direction == null)) {
return _openKeyCursor_3(key_OR_range, direction);
}
if (?key_OR_range &&
@@ -15828,27 +15821,10 @@
return _openKeyCursor_4(key_1);
}
if (?key_OR_range &&
- (direction is String || direction === null)) {
+ (direction is String || direction == null)) {
var key_2 = _convertDartToNative_IDBKey(key_OR_range);
return _openKeyCursor_5(key_2, direction);
}
- if (!?key_OR_range &&
- !?direction) {
- return _openKeyCursor_6();
- }
- if ((key_OR_range is IDBKeyRange || key_OR_range === null) &&
- !?direction) {
- return _openKeyCursor_7(key_OR_range);
- }
- if ((key_OR_range is IDBKeyRange || key_OR_range === null) &&
- (direction is int || direction === null)) {
- return _openKeyCursor_8(key_OR_range, direction);
- }
- if (?key_OR_range &&
- (direction is int || direction === null)) {
- var key_3 = _convertDartToNative_IDBKey(key_OR_range);
- return _openKeyCursor_9(key_3, direction);
- }
throw const Exception("Incorrect number or type of arguments");
}
_IDBRequestImpl _openKeyCursor_1() native "openKeyCursor";
@@ -15856,10 +15832,6 @@
_IDBRequestImpl _openKeyCursor_3(_IDBKeyRangeImpl range, String direction) native "openKeyCursor";
_IDBRequestImpl _openKeyCursor_4(key) native "openKeyCursor";
_IDBRequestImpl _openKeyCursor_5(key, String direction) native "openKeyCursor";
- _IDBRequestImpl _openKeyCursor_6() native "openKeyCursor";
- _IDBRequestImpl _openKeyCursor_7(_IDBKeyRangeImpl range) native "openKeyCursor";
- _IDBRequestImpl _openKeyCursor_8(_IDBKeyRangeImpl range, int direction) native "openKeyCursor";
- _IDBRequestImpl _openKeyCursor_9(key, int direction) native "openKeyCursor";
}
// 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
@@ -15879,6 +15851,7 @@
// WARNING: Do not edit - generated code.
+
/// @domName IDBKeyRange
abstract class IDBKeyRange {
@@ -15910,16 +15883,16 @@
/** @domName IDBKeyRange.lower */
- abstract Dynamic get lower;
+ dynamic get lower;
/** @domName IDBKeyRange.lowerOpen */
- abstract bool get lowerOpen;
+ bool get lowerOpen;
/** @domName IDBKeyRange.upper */
- abstract Dynamic get upper;
+ dynamic get upper;
/** @domName IDBKeyRange.upperOpen */
- abstract bool get upperOpen;
+ bool get upperOpen;
/** @domName IDBKeyRange.bound_ */
static final bound_ = _IDBKeyRangeImpl.bound_;
@@ -15936,13 +15909,13 @@
class _IDBKeyRangeImpl implements IDBKeyRange native "*IDBKeyRange" {
- Dynamic get lower => _convertNativeToDart_IDBKey(this._lower);
- Dynamic get _lower() => JS("Dynamic", "#.lower", this);
+ dynamic get lower => _convertNativeToDart_IDBKey(this._lower);
+ dynamic get _lower => JS("dynamic", "#.lower", this);
final bool lowerOpen;
- Dynamic get upper => _convertNativeToDart_IDBKey(this._upper);
- Dynamic get _upper() => JS("Dynamic", "#.upper", this);
+ dynamic get upper => _convertNativeToDart_IDBKey(this._upper);
+ dynamic get _upper => JS("dynamic", "#.upper", this);
final bool upperOpen;
@@ -16003,19 +15976,19 @@
abstract class IDBObjectStore {
/** @domName IDBObjectStore.autoIncrement */
- abstract bool get autoIncrement;
+ bool get autoIncrement;
/** @domName IDBObjectStore.indexNames */
- abstract List<String> get indexNames;
+ List<String> get indexNames;
/** @domName IDBObjectStore.keyPath */
- abstract Dynamic get keyPath;
+ dynamic get keyPath;
/** @domName IDBObjectStore.name */
- abstract String get name;
+ String get name;
/** @domName IDBObjectStore.transaction */
- abstract IDBTransaction get transaction;
+ IDBTransaction get transaction;
/** @domName IDBObjectStore.add */
IDBRequest add(Object value, [/*IDBKey*/ key]);
@@ -16042,7 +16015,7 @@
IDBIndex index(String name);
/** @domName IDBObjectStore.openCursor */
- IDBRequest openCursor([key_OR_range, direction]);
+ IDBRequest openCursor([key_OR_range, String direction]);
/** @domName IDBObjectStore.put */
IDBRequest put(Object value, [/*IDBKey*/ key]);
@@ -16054,7 +16027,7 @@
final _DOMStringListImpl indexNames;
- final Dynamic keyPath;
+ final dynamic keyPath;
final String name;
@@ -16078,7 +16051,7 @@
if (!?key_OR_range) {
return _count_1();
}
- if ((key_OR_range is IDBKeyRange || key_OR_range === null)) {
+ if ((key_OR_range is IDBKeyRange || key_OR_range == null)) {
return _count_2(key_OR_range);
}
if (?key_OR_range) {
@@ -16092,23 +16065,23 @@
_IDBRequestImpl _count_3(key) native "count";
_IDBIndexImpl createIndex(String name, keyPath, [options]) {
- if ((keyPath is List<String> || keyPath === null) &&
+ if ((keyPath is List<String> || keyPath == null) &&
!?options) {
List keyPath_1 = _convertDartToNative_StringArray(keyPath);
return _createIndex_1(name, keyPath_1);
}
- if ((keyPath is List<String> || keyPath === null) &&
- (options is Map || options === null)) {
+ if ((keyPath is List<String> || keyPath == null) &&
+ (options is Map || options == null)) {
List keyPath_2 = _convertDartToNative_StringArray(keyPath);
var options_3 = _convertDartToNative_Dictionary(options);
return _createIndex_2(name, keyPath_2, options_3);
}
- if ((keyPath is String || keyPath === null) &&
+ if ((keyPath is String || keyPath == null) &&
!?options) {
return _createIndex_3(name, keyPath);
}
- if ((keyPath is String || keyPath === null) &&
- (options is Map || options === null)) {
+ if ((keyPath is String || keyPath == null) &&
+ (options is Map || options == null)) {
var options_4 = _convertDartToNative_Dictionary(options);
return _createIndex_4(name, keyPath, options_4);
}
@@ -16120,7 +16093,7 @@
_IDBIndexImpl _createIndex_4(name, String keyPath, options) native "createIndex";
_IDBRequestImpl delete(key_OR_keyRange) {
- if ((key_OR_keyRange is IDBKeyRange || key_OR_keyRange === null)) {
+ if ((key_OR_keyRange is IDBKeyRange || key_OR_keyRange == null)) {
return _delete_1(key_OR_keyRange);
}
if (?key_OR_keyRange) {
@@ -16135,7 +16108,7 @@
void deleteIndex(String name) native;
_IDBRequestImpl getObject(key) {
- if ((key is IDBKeyRange || key === null)) {
+ if ((key is IDBKeyRange || key == null)) {
return _getObject_1(key);
}
if (?key) {
@@ -16154,12 +16127,12 @@
!?direction) {
return _openCursor_1();
}
- if ((key_OR_range is IDBKeyRange || key_OR_range === null) &&
+ if ((key_OR_range is IDBKeyRange || key_OR_range == null) &&
!?direction) {
return _openCursor_2(key_OR_range);
}
- if ((key_OR_range is IDBKeyRange || key_OR_range === null) &&
- (direction is String || direction === null)) {
+ if ((key_OR_range is IDBKeyRange || key_OR_range == null) &&
+ (direction is String || direction == null)) {
return _openCursor_3(key_OR_range, direction);
}
if (?key_OR_range &&
@@ -16168,27 +16141,10 @@
return _openCursor_4(key_1);
}
if (?key_OR_range &&
- (direction is String || direction === null)) {
+ (direction is String || direction == null)) {
var key_2 = _convertDartToNative_IDBKey(key_OR_range);
return _openCursor_5(key_2, direction);
}
- if (!?key_OR_range &&
- !?direction) {
- return _openCursor_6();
- }
- if ((key_OR_range is IDBKeyRange || key_OR_range === null) &&
- !?direction) {
- return _openCursor_7(key_OR_range);
- }
- if ((key_OR_range is IDBKeyRange || key_OR_range === null) &&
- (direction is int || direction === null)) {
- return _openCursor_8(key_OR_range, direction);
- }
- if (?key_OR_range &&
- (direction is int || direction === null)) {
- var key_3 = _convertDartToNative_IDBKey(key_OR_range);
- return _openCursor_9(key_3, direction);
- }
throw const Exception("Incorrect number or type of arguments");
}
_IDBRequestImpl _openCursor_1() native "openCursor";
@@ -16196,10 +16152,6 @@
_IDBRequestImpl _openCursor_3(_IDBKeyRangeImpl range, String direction) native "openCursor";
_IDBRequestImpl _openCursor_4(key) native "openCursor";
_IDBRequestImpl _openCursor_5(key, String direction) native "openCursor";
- _IDBRequestImpl _openCursor_6() native "openCursor";
- _IDBRequestImpl _openCursor_7(_IDBKeyRangeImpl range) native "openCursor";
- _IDBRequestImpl _openCursor_8(_IDBKeyRangeImpl range, int direction) native "openCursor";
- _IDBRequestImpl _openCursor_9(key, int direction) native "openCursor";
_IDBRequestImpl put(/*any*/ value, [key]) {
if (?key) {
@@ -16271,25 +16223,25 @@
IDBRequestEvents get on;
/** @domName IDBRequest.error */
- abstract DOMError get error;
+ DOMError get error;
/** @domName IDBRequest.errorCode */
- abstract int get errorCode;
+ int get errorCode;
/** @domName IDBRequest.readyState */
- abstract String get readyState;
+ String get readyState;
/** @domName IDBRequest.result */
- abstract Dynamic get result;
+ dynamic get result;
/** @domName IDBRequest.source */
- abstract Dynamic get source;
+ dynamic get source;
/** @domName IDBRequest.transaction */
- abstract IDBTransaction get transaction;
+ IDBTransaction get transaction;
/** @domName IDBRequest.webkitErrorMessage */
- abstract String get webkitErrorMessage;
+ String get webkitErrorMessage;
/** @domName IDBRequest.addEventListener */
void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
@@ -16319,10 +16271,10 @@
final String readyState;
- Dynamic get result => _convertNativeToDart_IDBAny(this._result);
- Dynamic get _result() => JS("Dynamic", "#.result", this);
+ dynamic get result => _convertNativeToDart_IDBAny(this._result);
+ dynamic get _result => JS("dynamic", "#.result", this);
- final Dynamic source;
+ final dynamic source;
final _IDBTransactionImpl transaction;
@@ -16363,13 +16315,13 @@
static const int VERSION_CHANGE = 2;
/** @domName IDBTransaction.db */
- abstract IDBDatabase get db;
+ IDBDatabase get db;
/** @domName IDBTransaction.error */
- abstract DOMError get error;
+ DOMError get error;
/** @domName IDBTransaction.mode */
- abstract String get mode;
+ String get mode;
/** @domName IDBTransaction.abort */
void abort();
@@ -16437,10 +16389,10 @@
abstract class IDBUpgradeNeededEvent implements Event {
/** @domName IDBVersionChangeEvent.newVersion */
- abstract int get newVersion;
+ int get newVersion;
/** @domName IDBVersionChangeEvent.oldVersion */
- abstract int get oldVersion;
+ int get oldVersion;
}
class _IDBUpgradeNeededEventImpl extends _EventImpl implements IDBUpgradeNeededEvent native "*IDBVersionChangeEvent" {
@@ -16459,7 +16411,7 @@
abstract class IDBVersionChangeEvent implements Event {
/** @domName IDBVersionChangeEvent.version */
- abstract String get version;
+ String get version;
}
class _IDBVersionChangeEventImpl extends _EventImpl implements IDBVersionChangeEvent native "*IDBVersionChangeEvent" {
@@ -16520,7 +16472,7 @@
String align;
/** @domName HTMLIFrameElement.contentWindow */
- abstract Window get contentWindow;
+ Window get contentWindow;
/** @domName HTMLIFrameElement.frameBorder */
String frameBorder;
@@ -16554,9 +16506,6 @@
/** @domName HTMLIFrameElement.width */
String width;
-
- /** @domName HTMLIFrameElement.getSVGDocument */
- SVGDocument getSVGDocument();
}
class _IFrameElementImpl extends _ElementImpl implements IFrameElement native "*HTMLIFrameElement" {
@@ -16564,7 +16513,7 @@
String align;
Window get contentWindow => _convertNativeToDart_Window(this._contentWindow);
- Window get _contentWindow() => JS("Window", "#.contentWindow", this);
+ Window get _contentWindow => JS("Window", "#.contentWindow", this);
String frameBorder;
@@ -16587,8 +16536,6 @@
String srcdoc;
String width;
-
- _SVGDocumentImpl getSVGDocument() native;
}
// 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
@@ -16596,6 +16543,7 @@
// WARNING: Do not edit - generated code.
+
typedef void IceCallback(IceCandidate candidate, bool moreToFollow, PeerConnection00 source);
// 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
@@ -16609,7 +16557,7 @@
factory IceCandidate(String label, String candidateLine) => _IceCandidateFactoryProvider.createIceCandidate(label, candidateLine);
/** @domName IceCandidate.label */
- abstract String get label;
+ String get label;
/** @domName IceCandidate.toSdp */
String toSdp();
@@ -16631,13 +16579,13 @@
abstract class ImageData {
/** @domName ImageData.data */
- abstract Uint8ClampedArray get data;
+ Uint8ClampedArray get data;
/** @domName ImageData.height */
- abstract int get height;
+ int get height;
/** @domName ImageData.width */
- abstract int get width;
+ int get width;
}
class _ImageDataImpl implements ImageData native "*ImageData" {
@@ -16680,7 +16628,7 @@
String border;
/** @domName HTMLImageElement.complete */
- abstract bool get complete;
+ bool get complete;
/** @domName HTMLImageElement.crossOrigin */
String crossOrigin;
@@ -16704,10 +16652,10 @@
String name;
/** @domName HTMLImageElement.naturalHeight */
- abstract int get naturalHeight;
+ int get naturalHeight;
/** @domName HTMLImageElement.naturalWidth */
- abstract int get naturalWidth;
+ int get naturalWidth;
/** @domName HTMLImageElement.src */
String src;
@@ -16722,10 +16670,10 @@
int width;
/** @domName HTMLImageElement.x */
- abstract int get x;
+ int get x;
/** @domName HTMLImageElement.y */
- abstract int get y;
+ int get y;
}
class _ImageElementImpl extends _ElementImpl implements ImageElement native "*HTMLImageElement" {
@@ -16820,7 +16768,7 @@
List<File> files;
/** @domName HTMLInputElement.form */
- abstract FormElement get form;
+ FormElement get form;
/** @domName HTMLInputElement.formAction */
String formAction;
@@ -16847,10 +16795,10 @@
bool indeterminate;
/** @domName HTMLInputElement.labels */
- abstract List<Node> get labels;
+ List<Node> get labels;
/** @domName HTMLInputElement.list */
- abstract Element get list;
+ Element get list;
/** @domName HTMLInputElement.max */
String max;
@@ -16904,10 +16852,10 @@
String useMap;
/** @domName HTMLInputElement.validationMessage */
- abstract String get validationMessage;
+ String get validationMessage;
/** @domName HTMLInputElement.validity */
- abstract ValidityState get validity;
+ ValidityState get validity;
/** @domName HTMLInputElement.value */
String value;
@@ -16919,7 +16867,7 @@
num valueAsNumber;
/** @domName HTMLInputElement.webkitEntries */
- abstract List<Entry> get webkitEntries;
+ List<Entry> get webkitEntries;
/** @domName HTMLInputElement.webkitGrammar */
bool webkitGrammar;
@@ -16934,7 +16882,7 @@
int width;
/** @domName HTMLInputElement.willValidate */
- abstract bool get willValidate;
+ bool get willValidate;
/** @domName HTMLInputElement.checkValidity */
bool checkValidity();
@@ -17102,7 +17050,7 @@
static const int BYTES_PER_ELEMENT = 2;
/** @domName Int16Array.length */
- abstract int get length;
+ int get length;
/** @domName Int16Array.setElements */
void setElements(Object array, [int offset]);
@@ -17133,15 +17081,15 @@
// From Collection<int>:
void add(int value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addLast(int value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addAll(Collection<int> collection) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
bool contains(int element) => _Collections.contains(this, element);
@@ -17157,38 +17105,38 @@
bool some(bool f(int element)) => _Collections.some(this, f);
- bool isEmpty() => this.length == 0;
+ bool get isEmpty => this.length == 0;
// From List<int>:
void sort([Comparator<int> compare = Comparable.compare]) {
- throw const UnsupportedOperationException("Cannot sort immutable List.");
+ throw new UnsupportedError("Cannot sort immutable List.");
}
int indexOf(int element, [int start = 0]) =>
_Lists.indexOf(this, element, start, this.length);
int lastIndexOf(int element, [int start]) {
- if (start === null) start = length - 1;
+ if (start == null) start = length - 1;
return _Lists.lastIndexOf(this, element, start);
}
- int last() => this[length - 1];
+ int get last => this[length - 1];
int removeLast() {
- throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+ throw new UnsupportedError("Cannot removeLast on immutable List.");
}
void setRange(int start, int rangeLength, List<int> from, [int startFrom]) {
- throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+ throw new UnsupportedError("Cannot setRange on immutable List.");
}
void removeRange(int start, int rangeLength) {
- throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+ throw new UnsupportedError("Cannot removeRange on immutable List.");
}
void insertRange(int start, int rangeLength, [int initialValue]) {
- throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+ throw new UnsupportedError("Cannot insertRange on immutable List.");
}
List<int> getRange(int start, int rangeLength) =>
@@ -17221,7 +17169,7 @@
static const int BYTES_PER_ELEMENT = 4;
/** @domName Int32Array.length */
- abstract int get length;
+ int get length;
/** @domName Int32Array.setElements */
void setElements(Object array, [int offset]);
@@ -17252,15 +17200,15 @@
// From Collection<int>:
void add(int value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addLast(int value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addAll(Collection<int> collection) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
bool contains(int element) => _Collections.contains(this, element);
@@ -17276,38 +17224,38 @@
bool some(bool f(int element)) => _Collections.some(this, f);
- bool isEmpty() => this.length == 0;
+ bool get isEmpty => this.length == 0;
// From List<int>:
void sort([Comparator<int> compare = Comparable.compare]) {
- throw const UnsupportedOperationException("Cannot sort immutable List.");
+ throw new UnsupportedError("Cannot sort immutable List.");
}
int indexOf(int element, [int start = 0]) =>
_Lists.indexOf(this, element, start, this.length);
int lastIndexOf(int element, [int start]) {
- if (start === null) start = length - 1;
+ if (start == null) start = length - 1;
return _Lists.lastIndexOf(this, element, start);
}
- int last() => this[length - 1];
+ int get last => this[length - 1];
int removeLast() {
- throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+ throw new UnsupportedError("Cannot removeLast on immutable List.");
}
void setRange(int start, int rangeLength, List<int> from, [int startFrom]) {
- throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+ throw new UnsupportedError("Cannot setRange on immutable List.");
}
void removeRange(int start, int rangeLength) {
- throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+ throw new UnsupportedError("Cannot removeRange on immutable List.");
}
void insertRange(int start, int rangeLength, [int initialValue]) {
- throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+ throw new UnsupportedError("Cannot insertRange on immutable List.");
}
List<int> getRange(int start, int rangeLength) =>
@@ -17340,7 +17288,7 @@
static const int BYTES_PER_ELEMENT = 1;
/** @domName Int8Array.length */
- abstract int get length;
+ int get length;
/** @domName Int8Array.setElements */
void setElements(Object array, [int offset]);
@@ -17371,15 +17319,15 @@
// From Collection<int>:
void add(int value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addLast(int value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addAll(Collection<int> collection) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
bool contains(int element) => _Collections.contains(this, element);
@@ -17395,38 +17343,38 @@
bool some(bool f(int element)) => _Collections.some(this, f);
- bool isEmpty() => this.length == 0;
+ bool get isEmpty => this.length == 0;
// From List<int>:
void sort([Comparator<int> compare = Comparable.compare]) {
- throw const UnsupportedOperationException("Cannot sort immutable List.");
+ throw new UnsupportedError("Cannot sort immutable List.");
}
int indexOf(int element, [int start = 0]) =>
_Lists.indexOf(this, element, start, this.length);
int lastIndexOf(int element, [int start]) {
- if (start === null) start = length - 1;
+ if (start == null) start = length - 1;
return _Lists.lastIndexOf(this, element, start);
}
- int last() => this[length - 1];
+ int get last => this[length - 1];
int removeLast() {
- throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+ throw new UnsupportedError("Cannot removeLast on immutable List.");
}
void setRange(int start, int rangeLength, List<int> from, [int startFrom]) {
- throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+ throw new UnsupportedError("Cannot setRange on immutable List.");
}
void removeRange(int start, int rangeLength) {
- throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+ throw new UnsupportedError("Cannot removeRange on immutable List.");
}
void insertRange(int start, int rangeLength, [int initialValue]) {
- throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+ throw new UnsupportedError("Cannot insertRange on immutable List.");
}
List<int> getRange(int start, int rangeLength) =>
@@ -17453,7 +17401,7 @@
JavaScriptAudioNodeEvents get on;
/** @domName JavaScriptAudioNode.bufferSize */
- abstract int get bufferSize;
+ int get bufferSize;
}
abstract class JavaScriptAudioNodeEvents implements Events {
@@ -17502,28 +17450,28 @@
static const int WITH_SCOPE = 2;
/** @domName JavaScriptCallFrame.caller */
- abstract JavaScriptCallFrame get caller;
+ JavaScriptCallFrame get caller;
/** @domName JavaScriptCallFrame.column */
- abstract int get column;
+ int get column;
/** @domName JavaScriptCallFrame.functionName */
- abstract String get functionName;
+ String get functionName;
/** @domName JavaScriptCallFrame.line */
- abstract int get line;
+ int get line;
/** @domName JavaScriptCallFrame.scopeChain */
- abstract List get scopeChain;
+ List get scopeChain;
/** @domName JavaScriptCallFrame.sourceID */
- abstract int get sourceID;
+ int get sourceID;
/** @domName JavaScriptCallFrame.thisObject */
- abstract Object get thisObject;
+ Object get thisObject;
/** @domName JavaScriptCallFrame.type */
- abstract String get type;
+ String get type;
/** @domName JavaScriptCallFrame.evaluate */
void evaluate(String script);
@@ -17569,25 +17517,25 @@
abstract class KeyboardEvent implements UIEvent {
/** @domName KeyboardEvent.altGraphKey */
- abstract bool get altGraphKey;
+ bool get altGraphKey;
/** @domName KeyboardEvent.altKey */
- abstract bool get altKey;
+ bool get altKey;
/** @domName KeyboardEvent.ctrlKey */
- abstract bool get ctrlKey;
+ bool get ctrlKey;
/** @domName KeyboardEvent.keyIdentifier */
- abstract String get keyIdentifier;
+ String get keyIdentifier;
/** @domName KeyboardEvent.keyLocation */
- abstract int get keyLocation;
+ int get keyLocation;
/** @domName KeyboardEvent.metaKey */
- abstract bool get metaKey;
+ bool get metaKey;
/** @domName KeyboardEvent.shiftKey */
- abstract bool get shiftKey;
+ bool get shiftKey;
/** @domName KeyboardEvent.initKeyboardEvent */
void initKeyboardEvent(String type, bool canBubble, bool cancelable, LocalWindow view, String keyIdentifier, int keyLocation, bool ctrlKey, bool altKey, bool shiftKey, bool metaKey, bool altGraphKey);
@@ -17632,28 +17580,28 @@
bool disabled;
/** @domName HTMLKeygenElement.form */
- abstract FormElement get form;
+ FormElement get form;
/** @domName HTMLKeygenElement.keytype */
String keytype;
/** @domName HTMLKeygenElement.labels */
- abstract List<Node> get labels;
+ List<Node> get labels;
/** @domName HTMLKeygenElement.name */
String name;
/** @domName HTMLKeygenElement.type */
- abstract String get type;
+ String get type;
/** @domName HTMLKeygenElement.validationMessage */
- abstract String get validationMessage;
+ String get validationMessage;
/** @domName HTMLKeygenElement.validity */
- abstract ValidityState get validity;
+ ValidityState get validity;
/** @domName HTMLKeygenElement.willValidate */
- abstract bool get willValidate;
+ bool get willValidate;
/** @domName HTMLKeygenElement.checkValidity */
bool checkValidity();
@@ -17726,10 +17674,10 @@
factory LabelElement() => _Elements.createLabelElement();
/** @domName HTMLLabelElement.control */
- abstract Element get control;
+ Element get control;
/** @domName HTMLLabelElement.form */
- abstract FormElement get form;
+ FormElement get form;
/** @domName HTMLLabelElement.htmlFor */
String htmlFor;
@@ -17758,7 +17706,7 @@
String align;
/** @domName HTMLLegendElement.form */
- abstract FormElement get form;
+ FormElement get form;
}
class _LegendElementImpl extends _ElementImpl implements LegendElement native "*HTMLLegendElement" {
@@ -17800,7 +17748,7 @@
String rev;
/** @domName HTMLLinkElement.sheet */
- abstract StyleSheet get sheet;
+ StyleSheet get sheet;
/** @domName HTMLLinkElement.sizes */
DOMSettableTokenList sizes;
@@ -17846,10 +17794,10 @@
abstract class LocalHistory implements History {
/** @domName History.length */
- abstract int get length;
+ int get length;
/** @domName History.state */
- abstract Dynamic get state;
+ dynamic get state;
/** @domName History.back */
void back();
@@ -17871,7 +17819,7 @@
final int length;
- final Dynamic state;
+ final dynamic state;
void back() native;
@@ -17893,7 +17841,7 @@
abstract class LocalLocation implements Location {
/** @domName Location.ancestorOrigins */
- abstract List<String> get ancestorOrigins;
+ List<String> get ancestorOrigins;
/** @domName Location.hash */
String hash;
@@ -17908,7 +17856,7 @@
String href;
/** @domName Location.origin */
- abstract String get origin;
+ String get origin;
/** @domName Location.pathname */
String pathname;
@@ -17996,6 +17944,7 @@
// WARNING: Do not edit - generated code.
+
/// @domName Window
abstract class LocalWindow implements EventTarget, Window {
@@ -18040,19 +17989,19 @@
static const int TEMPORARY = 0;
/** @domName Window.applicationCache */
- abstract DOMApplicationCache get applicationCache;
+ DOMApplicationCache get applicationCache;
/** @domName Window.clientInformation */
- abstract Navigator get clientInformation;
+ Navigator get clientInformation;
/** @domName Window.closed */
- abstract bool get closed;
+ bool get closed;
/** @domName Window.console */
- abstract Console get console;
+ Console get console;
/** @domName Window.crypto */
- abstract Crypto get crypto;
+ Crypto get crypto;
/** @domName Window.defaultStatus */
String defaultStatus;
@@ -18061,130 +18010,130 @@
String defaultstatus;
/** @domName Window.devicePixelRatio */
- abstract num get devicePixelRatio;
+ num get devicePixelRatio;
/** @domName Window.document */
- abstract Document get document;
+ Document get document;
/** @domName Window.event */
- abstract Event get event;
+ Event get event;
/** @domName Window.history */
- abstract LocalHistory get history;
+ LocalHistory get history;
/** @domName DOMWindow.indexedDB */
- abstract IDBFactory get indexedDB;
+ IDBFactory get indexedDB;
/** @domName Window.innerHeight */
- abstract int get innerHeight;
+ int get innerHeight;
/** @domName Window.innerWidth */
- abstract int get innerWidth;
+ int get innerWidth;
/** @domName Window.localStorage */
- abstract Storage get localStorage;
+ Storage get localStorage;
/** @domName Window.location */
LocalLocation location;
/** @domName Window.locationbar */
- abstract BarInfo get locationbar;
+ BarInfo get locationbar;
/** @domName Window.menubar */
- abstract BarInfo get menubar;
+ BarInfo get menubar;
/** @domName Window.name */
String name;
/** @domName Window.navigator */
- abstract Navigator get navigator;
+ Navigator get navigator;
/** @domName Window.offscreenBuffering */
- abstract bool get offscreenBuffering;
+ bool get offscreenBuffering;
/** @domName Window.opener */
- abstract Window get opener;
+ Window get opener;
/** @domName Window.outerHeight */
- abstract int get outerHeight;
+ int get outerHeight;
/** @domName Window.outerWidth */
- abstract int get outerWidth;
+ int get outerWidth;
/** @domName DOMWindow.pagePopupController */
- abstract PagePopupController get pagePopupController;
+ PagePopupController get pagePopupController;
/** @domName Window.pageXOffset */
- abstract int get pageXOffset;
+ int get pageXOffset;
/** @domName Window.pageYOffset */
- abstract int get pageYOffset;
+ int get pageYOffset;
/** @domName Window.parent */
- abstract Window get parent;
+ Window get parent;
/** @domName Window.performance */
- abstract Performance get performance;
+ Performance get performance;
/** @domName Window.personalbar */
- abstract BarInfo get personalbar;
+ BarInfo get personalbar;
/** @domName Window.screen */
- abstract Screen get screen;
+ Screen get screen;
/** @domName Window.screenLeft */
- abstract int get screenLeft;
+ int get screenLeft;
/** @domName Window.screenTop */
- abstract int get screenTop;
+ int get screenTop;
/** @domName Window.screenX */
- abstract int get screenX;
+ int get screenX;
/** @domName Window.screenY */
- abstract int get screenY;
+ int get screenY;
/** @domName Window.scrollX */
- abstract int get scrollX;
+ int get scrollX;
/** @domName Window.scrollY */
- abstract int get scrollY;
+ int get scrollY;
/** @domName Window.scrollbars */
- abstract BarInfo get scrollbars;
+ BarInfo get scrollbars;
/** @domName Window.self */
- abstract Window get self;
+ Window get self;
/** @domName Window.sessionStorage */
- abstract Storage get sessionStorage;
+ Storage get sessionStorage;
/** @domName Window.status */
String status;
/** @domName Window.statusbar */
- abstract BarInfo get statusbar;
+ BarInfo get statusbar;
/** @domName Window.styleMedia */
- abstract StyleMedia get styleMedia;
+ StyleMedia get styleMedia;
/** @domName Window.toolbar */
- abstract BarInfo get toolbar;
+ BarInfo get toolbar;
/** @domName Window.top */
- abstract Window get top;
+ Window get top;
/** @domName DOMWindow.webkitIndexedDB */
- abstract IDBFactory get webkitIndexedDB;
+ IDBFactory get webkitIndexedDB;
/** @domName DOMWindow.webkitNotifications */
- abstract NotificationCenter get webkitNotifications;
+ NotificationCenter get webkitNotifications;
/** @domName DOMWindow.webkitStorageInfo */
- abstract StorageInfo get webkitStorageInfo;
+ StorageInfo get webkitStorageInfo;
/** @domName Window.window */
- abstract Window get window;
+ Window get window;
/** @domName Window.addEventListener */
void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
@@ -18201,6 +18150,9 @@
/** @domName Window.btoa */
String btoa(String string);
+ /** @domName Window.cancelAnimationFrame */
+ void cancelAnimationFrame(int id);
+
/** @domName Window.captureEvents */
void captureEvents();
@@ -18264,6 +18216,9 @@
/** @domName Window.removeEventListener */
void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]);
+ /** @domName Window.requestAnimationFrame */
+ int requestAnimationFrame(RequestAnimationFrameCallback callback);
+
/** @domName Window.resizeBy */
void resizeBy(num x, num y);
@@ -18292,7 +18247,7 @@
void stop();
/** @domName Window.webkitCancelAnimationFrame */
- void cancelAnimationFrame(int id);
+ void webkitCancelAnimationFrame(int id);
/** @domName Window.webkitConvertPointFromNodeToPage */
Point webkitConvertPointFromNodeToPage(Node node, Point p);
@@ -18301,7 +18256,7 @@
Point webkitConvertPointFromPageToNode(Node node, Point p);
/** @domName Window.webkitRequestAnimationFrame */
- int requestAnimationFrame(RequestAnimationFrameCallback callback);
+ int webkitRequestAnimationFrame(RequestAnimationFrameCallback callback);
/** @domName DOMWindow.webkitRequestFileSystem */
void webkitRequestFileSystem(int type, int size, FileSystemCallback successCallback, [ErrorCallback errorCallback]);
@@ -18465,7 +18420,7 @@
class _LocalWindowImpl extends _EventTargetImpl implements LocalWindow native "@*DOMWindow" {
- _DocumentImpl get document() => JS('_DocumentImpl', '#.document', this);
+ _DocumentImpl get document => JS('_DocumentImpl', '#.document', this);
Window _open2(url, name) => JS('Window', '#.open(#,#)', this, url, name);
@@ -18515,7 +18470,7 @@
var _location_wrapper; // Cached wrapped Location object.
// Native getter and setter to access raw Location object.
- Location get _location() => JS('Location', '#.location', this);
+ Location get _location => JS('Location', '#.location', this);
void set _location(Location value) {
JS('void', '#.location = #', this, value);
}
@@ -18650,7 +18605,7 @@
final bool offscreenBuffering;
Window get opener => _convertNativeToDart_Window(this._opener);
- Window get _opener() => JS("Window", "#.opener", this);
+ Window get _opener => JS("Window", "#.opener", this);
final int outerHeight;
@@ -18663,7 +18618,7 @@
final int pageYOffset;
Window get parent => _convertNativeToDart_Window(this._parent);
- Window get _parent() => JS("Window", "#.parent", this);
+ Window get _parent => JS("Window", "#.parent", this);
final _PerformanceImpl performance;
@@ -18686,7 +18641,7 @@
final _BarInfoImpl scrollbars;
Window get self => _convertNativeToDart_Window(this._self);
- Window get _self() => JS("Window", "#.self", this);
+ Window get _self => JS("Window", "#.self", this);
final _StorageImpl sessionStorage;
@@ -18699,7 +18654,7 @@
final _BarInfoImpl toolbar;
Window get top => _convertNativeToDart_Window(this._top);
- Window get _top() => JS("Window", "#.top", this);
+ Window get _top => JS("Window", "#.top", this);
final _IDBFactoryImpl webkitIndexedDB;
@@ -18708,7 +18663,7 @@
final _StorageInfoImpl webkitStorageInfo;
Window get window => _convertNativeToDart_Window(this._window);
- Window get _window() => JS("Window", "#.window", this);
+ Window get _window => JS("Window", "#.window", this);
void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "addEventListener";
@@ -18758,7 +18713,7 @@
return;
}
if (?message &&
- (messagePorts is List || messagePorts === null)) {
+ (messagePorts is List || messagePorts == null)) {
var message_2 = _convertDartToNative_SerializedScriptValue(message);
_postMessage_2(message_2, targetOrigin, messagePorts);
return;
@@ -18965,7 +18920,7 @@
factory MapElement() => _Elements.createMapElement();
/** @domName HTMLMapElement.areas */
- abstract HTMLCollection get areas;
+ HTMLCollection get areas;
/** @domName HTMLMapElement.name */
String name;
@@ -19066,7 +19021,7 @@
factory MediaController() => _MediaControllerFactoryProvider.createMediaController();
/** @domName MediaController.buffered */
- abstract TimeRanges get buffered;
+ TimeRanges get buffered;
/** @domName MediaController.currentTime */
num currentTime;
@@ -19075,22 +19030,22 @@
num defaultPlaybackRate;
/** @domName MediaController.duration */
- abstract num get duration;
+ num get duration;
/** @domName MediaController.muted */
bool muted;
/** @domName MediaController.paused */
- abstract bool get paused;
+ bool get paused;
/** @domName MediaController.playbackRate */
num playbackRate;
/** @domName MediaController.played */
- abstract TimeRanges get played;
+ TimeRanges get played;
/** @domName MediaController.seekable */
- abstract TimeRanges get seekable;
+ TimeRanges get seekable;
/** @domName MediaController.volume */
num volume;
@@ -19179,7 +19134,7 @@
bool autoplay;
/** @domName HTMLMediaElement.buffered */
- abstract TimeRanges get buffered;
+ TimeRanges get buffered;
/** @domName HTMLMediaElement.controller */
MediaController controller;
@@ -19188,7 +19143,7 @@
bool controls;
/** @domName HTMLMediaElement.currentSrc */
- abstract String get currentSrc;
+ String get currentSrc;
/** @domName HTMLMediaElement.currentTime */
num currentTime;
@@ -19200,16 +19155,16 @@
num defaultPlaybackRate;
/** @domName HTMLMediaElement.duration */
- abstract num get duration;
+ num get duration;
/** @domName HTMLMediaElement.ended */
- abstract bool get ended;
+ bool get ended;
/** @domName HTMLMediaElement.error */
- abstract MediaError get error;
+ MediaError get error;
/** @domName HTMLMediaElement.initialTime */
- abstract num get initialTime;
+ num get initialTime;
/** @domName HTMLMediaElement.loop */
bool loop;
@@ -19221,55 +19176,55 @@
bool muted;
/** @domName HTMLMediaElement.networkState */
- abstract int get networkState;
+ int get networkState;
/** @domName HTMLMediaElement.paused */
- abstract bool get paused;
+ bool get paused;
/** @domName HTMLMediaElement.playbackRate */
num playbackRate;
/** @domName HTMLMediaElement.played */
- abstract TimeRanges get played;
+ TimeRanges get played;
/** @domName HTMLMediaElement.preload */
String preload;
/** @domName HTMLMediaElement.readyState */
- abstract int get readyState;
+ int get readyState;
/** @domName HTMLMediaElement.seekable */
- abstract TimeRanges get seekable;
+ TimeRanges get seekable;
/** @domName HTMLMediaElement.seeking */
- abstract bool get seeking;
+ bool get seeking;
/** @domName HTMLMediaElement.src */
String src;
/** @domName HTMLMediaElement.startTime */
- abstract num get startTime;
+ num get startTime;
/** @domName HTMLMediaElement.textTracks */
- abstract TextTrackList get textTracks;
+ TextTrackList get textTracks;
/** @domName HTMLMediaElement.volume */
num volume;
/** @domName HTMLMediaElement.webkitAudioDecodedByteCount */
- abstract int get webkitAudioDecodedByteCount;
+ int get webkitAudioDecodedByteCount;
/** @domName HTMLMediaElement.webkitClosedCaptionsVisible */
bool webkitClosedCaptionsVisible;
/** @domName HTMLMediaElement.webkitHasClosedCaptions */
- abstract bool get webkitHasClosedCaptions;
+ bool get webkitHasClosedCaptions;
/** @domName HTMLMediaElement.webkitPreservesPitch */
bool webkitPreservesPitch;
/** @domName HTMLMediaElement.webkitVideoDecodedByteCount */
- abstract int get webkitVideoDecodedByteCount;
+ int get webkitVideoDecodedByteCount;
/** @domName HTMLMediaElement.addTextTrack */
TextTrack addTextTrack(String kind, [String label, String language]);
@@ -19358,7 +19313,7 @@
abstract class MediaElementAudioSourceNode implements AudioSourceNode {
/** @domName MediaElementAudioSourceNode.mediaElement */
- abstract MediaElement get mediaElement;
+ MediaElement get mediaElement;
}
class _MediaElementAudioSourceNodeImpl extends _AudioSourceNodeImpl implements MediaElementAudioSourceNode native "*MediaElementAudioSourceNode" {
@@ -19525,7 +19480,7 @@
static const int MEDIA_ERR_SRC_NOT_SUPPORTED = 4;
/** @domName MediaError.code */
- abstract int get code;
+ int get code;
}
class _MediaErrorImpl implements MediaError native "*MediaError" {
@@ -19554,7 +19509,7 @@
static const int MEDIA_KEYERR_UNKNOWN = 1;
/** @domName MediaKeyError.code */
- abstract int get code;
+ int get code;
}
class _MediaKeyErrorImpl implements MediaKeyError native "*MediaKeyError" {
@@ -19571,25 +19526,25 @@
abstract class MediaKeyEvent implements Event {
/** @domName MediaKeyEvent.defaultURL */
- abstract String get defaultURL;
+ String get defaultURL;
/** @domName MediaKeyEvent.errorCode */
- abstract MediaKeyError get errorCode;
+ MediaKeyError get errorCode;
/** @domName MediaKeyEvent.initData */
- abstract Uint8Array get initData;
+ Uint8Array get initData;
/** @domName MediaKeyEvent.keySystem */
- abstract String get keySystem;
+ String get keySystem;
/** @domName MediaKeyEvent.message */
- abstract Uint8Array get message;
+ Uint8Array get message;
/** @domName MediaKeyEvent.sessionId */
- abstract String get sessionId;
+ String get sessionId;
/** @domName MediaKeyEvent.systemCode */
- abstract int get systemCode;
+ int get systemCode;
}
class _MediaKeyEventImpl extends _EventImpl implements MediaKeyEvent native "*MediaKeyEvent" {
@@ -19618,7 +19573,7 @@
abstract class MediaList {
/** @domName MediaList.length */
- abstract int get length;
+ int get length;
/** @domName MediaList.mediaText */
String mediaText;
@@ -19655,10 +19610,10 @@
abstract class MediaQueryList {
/** @domName MediaQueryList.matches */
- abstract bool get matches;
+ bool get matches;
/** @domName MediaQueryList.media */
- abstract String get media;
+ String get media;
/** @domName MediaQueryList.addListener */
void addListener(MediaQueryListListener listener);
@@ -19701,16 +19656,16 @@
factory MediaSource() => _MediaSourceFactoryProvider.createMediaSource();
/** @domName MediaSource.activeSourceBuffers */
- abstract SourceBufferList get activeSourceBuffers;
+ SourceBufferList get activeSourceBuffers;
/** @domName MediaSource.duration */
num duration;
/** @domName MediaSource.readyState */
- abstract String get readyState;
+ String get readyState;
/** @domName MediaSource.sourceBuffers */
- abstract SourceBufferList get sourceBuffers;
+ SourceBufferList get sourceBuffers;
/** @domName MediaSource.addEventListener */
void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
@@ -19774,16 +19729,16 @@
static const int LIVE = 1;
/** @domName MediaStream.audioTracks */
- abstract MediaStreamTrackList get audioTracks;
+ MediaStreamTrackList get audioTracks;
/** @domName MediaStream.label */
- abstract String get label;
+ String get label;
/** @domName MediaStream.readyState */
- abstract int get readyState;
+ int get readyState;
/** @domName MediaStream.videoTracks */
- abstract MediaStreamTrackList get videoTracks;
+ MediaStreamTrackList get videoTracks;
/** @domName MediaStream.addEventListener */
void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
@@ -19809,7 +19764,7 @@
abstract class MediaStreamAudioSourceNode implements AudioSourceNode {
/** @domName MediaStreamAudioSourceNode.mediaStream */
- abstract MediaStream get mediaStream;
+ MediaStream get mediaStream;
}
class _MediaStreamAudioSourceNodeImpl extends _AudioSourceNodeImpl implements MediaStreamAudioSourceNode native "*MediaStreamAudioSourceNode" {
@@ -19826,7 +19781,7 @@
abstract class MediaStreamEvent implements Event {
/** @domName MediaStreamEvent.stream */
- abstract MediaStream get stream;
+ MediaStream get stream;
}
class _MediaStreamEventImpl extends _EventImpl implements MediaStreamEvent native "*MediaStreamEvent" {
@@ -19867,7 +19822,7 @@
_MediaStreamImpl operator[](int index) => JS("_MediaStreamImpl", "#[#]", this, index);
void operator[]=(int index, _MediaStreamImpl value) {
- throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+ throw new UnsupportedError("Cannot assign element of immutable List.");
}
// -- start List<MediaStream> mixins.
// MediaStream is the element type.
@@ -19884,15 +19839,15 @@
// From Collection<MediaStream>:
void add(MediaStream value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addLast(MediaStream value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addAll(Collection<MediaStream> collection) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
bool contains(MediaStream element) => _Collections.contains(this, element);
@@ -19908,38 +19863,38 @@
bool some(bool f(MediaStream element)) => _Collections.some(this, f);
- bool isEmpty() => this.length == 0;
+ bool get isEmpty => this.length == 0;
// From List<MediaStream>:
void sort([Comparator<MediaStream> compare = Comparable.compare]) {
- throw const UnsupportedOperationException("Cannot sort immutable List.");
+ throw new UnsupportedError("Cannot sort immutable List.");
}
int indexOf(MediaStream element, [int start = 0]) =>
_Lists.indexOf(this, element, start, this.length);
int lastIndexOf(MediaStream element, [int start]) {
- if (start === null) start = length - 1;
+ if (start == null) start = length - 1;
return _Lists.lastIndexOf(this, element, start);
}
- MediaStream last() => this[length - 1];
+ MediaStream get last => this[length - 1];
MediaStream removeLast() {
- throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+ throw new UnsupportedError("Cannot removeLast on immutable List.");
}
void setRange(int start, int rangeLength, List<MediaStream> from, [int startFrom]) {
- throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+ throw new UnsupportedError("Cannot setRange on immutable List.");
}
void removeRange(int start, int rangeLength) {
- throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+ throw new UnsupportedError("Cannot removeRange on immutable List.");
}
void insertRange(int start, int rangeLength, [MediaStream initialValue]) {
- throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+ throw new UnsupportedError("Cannot insertRange on immutable List.");
}
List<MediaStream> getRange(int start, int rangeLength) =>
@@ -19973,13 +19928,13 @@
bool enabled;
/** @domName MediaStreamTrack.kind */
- abstract String get kind;
+ String get kind;
/** @domName MediaStreamTrack.label */
- abstract String get label;
+ String get label;
/** @domName MediaStreamTrack.readyState */
- abstract int get readyState;
+ int get readyState;
/** @domName MediaStreamTrack.addEventListener */
void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
@@ -20009,7 +19964,7 @@
abstract class MediaStreamTrackEvent implements Event {
/** @domName MediaStreamTrackEvent.track */
- abstract MediaStreamTrack get track;
+ MediaStreamTrack get track;
}
class _MediaStreamTrackEventImpl extends _EventImpl implements MediaStreamTrackEvent native "*MediaStreamTrackEvent" {
@@ -20061,7 +20016,7 @@
MediaStreamTrackListEvents get on;
/** @domName MediaStreamTrackList.length */
- abstract int get length;
+ int get length;
/** @domName MediaStreamTrackList.add */
void add(MediaStreamTrack track);
@@ -20126,13 +20081,13 @@
abstract class MemoryInfo {
/** @domName MemoryInfo.jsHeapSizeLimit */
- abstract int get jsHeapSizeLimit;
+ int get jsHeapSizeLimit;
/** @domName MemoryInfo.totalJSHeapSize */
- abstract int get totalJSHeapSize;
+ int get totalJSHeapSize;
/** @domName MemoryInfo.usedJSHeapSize */
- abstract int get usedJSHeapSize;
+ int get usedJSHeapSize;
}
class _MemoryInfoImpl implements MemoryInfo native "*MemoryInfo" {
@@ -20174,10 +20129,10 @@
factory MessageChannel() => _MessageChannelFactoryProvider.createMessageChannel();
/** @domName MessageChannel.port1 */
- abstract MessagePort get port1;
+ MessagePort get port1;
/** @domName MessageChannel.port2 */
- abstract MessagePort get port2;
+ MessagePort get port2;
}
class _MessageChannelImpl implements MessageChannel native "*MessageChannel" {
@@ -20196,19 +20151,19 @@
abstract class MessageEvent implements Event {
/** @domName MessageEvent.data */
- abstract Object get data;
+ Object get data;
/** @domName MessageEvent.lastEventId */
- abstract String get lastEventId;
+ String get lastEventId;
/** @domName MessageEvent.origin */
- abstract String get origin;
+ String get origin;
/** @domName MessageEvent.ports */
- abstract List get ports;
+ List get ports;
/** @domName MessageEvent.source */
- abstract Window get source;
+ Window get source;
/** @domName MessageEvent.initMessageEvent */
void initMessageEvent(String typeArg, bool canBubbleArg, bool cancelableArg, Object dataArg, String originArg, String lastEventIdArg, LocalWindow sourceArg, List messagePorts);
@@ -20219,8 +20174,8 @@
class _MessageEventImpl extends _EventImpl implements MessageEvent native "*MessageEvent" {
- Dynamic get data => _convertNativeToDart_SerializedScriptValue(this._data);
- Dynamic get _data() => JS("Dynamic", "#.data", this);
+ dynamic get data => _convertNativeToDart_SerializedScriptValue(this._data);
+ dynamic get _data => JS("dynamic", "#.data", this);
final String lastEventId;
@@ -20229,7 +20184,7 @@
final List ports;
Window get source => _convertNativeToDart_Window(this._source);
- Window get _source() => JS("Window", "#.source", this);
+ Window get _source => JS("Window", "#.source", this);
void initMessageEvent(String typeArg, bool canBubbleArg, bool cancelableArg, Object dataArg, String originArg, String lastEventIdArg, _LocalWindowImpl sourceArg, List messagePorts) native;
@@ -20349,10 +20304,10 @@
abstract class Metadata {
/** @domName Metadata.modificationTime */
- abstract Date get modificationTime;
+ Date get modificationTime;
/** @domName Metadata.size */
- abstract int get size;
+ int get size;
}
// 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
@@ -20360,6 +20315,7 @@
// WARNING: Do not edit - generated code.
+
typedef void MetadataCallback(Metadata metadata);
class _MetadataImpl implements Metadata native "*Metadata" {
@@ -20383,7 +20339,7 @@
num high;
/** @domName HTMLMeterElement.labels */
- abstract List<Node> get labels;
+ List<Node> get labels;
/** @domName HTMLMeterElement.low */
num low;
@@ -20445,6 +20401,7 @@
// WARNING: Do not edit - generated code.
+
/// @domName MouseEvent
abstract class MouseEvent implements UIEvent {
@@ -20461,61 +20418,61 @@
/** @domName MouseEvent.altKey */
- abstract bool get altKey;
+ bool get altKey;
/** @domName MouseEvent.button */
- abstract int get button;
+ int get button;
/** @domName MouseEvent.clientX */
- abstract int get clientX;
+ int get clientX;
/** @domName MouseEvent.clientY */
- abstract int get clientY;
+ int get clientY;
/** @domName MouseEvent.ctrlKey */
- abstract bool get ctrlKey;
+ bool get ctrlKey;
/** @domName MouseEvent.dataTransfer */
- abstract Clipboard get dataTransfer;
+ Clipboard get dataTransfer;
/** @domName MouseEvent.fromElement */
- abstract Node get fromElement;
+ Node get fromElement;
/** @domName MouseEvent.metaKey */
- abstract bool get metaKey;
+ bool get metaKey;
/** @domName MouseEvent.offsetX */
- abstract int get offsetX;
+ int get offsetX;
/** @domName MouseEvent.offsetY */
- abstract int get offsetY;
+ int get offsetY;
/** @domName MouseEvent.relatedTarget */
- abstract EventTarget get relatedTarget;
+ EventTarget get relatedTarget;
/** @domName MouseEvent.screenX */
- abstract int get screenX;
+ int get screenX;
/** @domName MouseEvent.screenY */
- abstract int get screenY;
+ int get screenY;
/** @domName MouseEvent.shiftKey */
- abstract bool get shiftKey;
+ bool get shiftKey;
/** @domName MouseEvent.toElement */
- abstract Node get toElement;
+ Node get toElement;
/** @domName MouseEvent.webkitMovementX */
- abstract int get webkitMovementX;
+ int get webkitMovementX;
/** @domName MouseEvent.webkitMovementY */
- abstract int get webkitMovementY;
+ int get webkitMovementY;
/** @domName MouseEvent.x */
- abstract int get x;
+ int get x;
/** @domName MouseEvent.y */
- abstract int get y;
+ int get y;
/** @domName MouseEvent.initMouseEvent */
void $dom_initMouseEvent(String type, bool canBubble, bool cancelable, LocalWindow view, int detail, int screenX, int screenY, int clientX, int clientY, bool ctrlKey, bool altKey, bool shiftKey, bool metaKey, int button, EventTarget relatedTarget);
@@ -20543,7 +20500,7 @@
final bool metaKey;
EventTarget get relatedTarget => _convertNativeToDart_EventTarget(this._relatedTarget);
- EventTarget get _relatedTarget() => JS("EventTarget", "#.relatedTarget", this);
+ EventTarget get _relatedTarget => JS("EventTarget", "#.relatedTarget", this);
final int screenX;
@@ -20576,7 +20533,7 @@
// Firefox does not support offsetX.
var target = this.target;
if (!(target is Element)) {
- throw const UnsupportedOperationException(
+ throw new UnsupportedError(
'offsetX is only supported on elements');
}
return this.clientX - this.target.getBoundingClientRect().left;
@@ -20590,7 +20547,7 @@
// Firefox does not support offsetY.
var target = this.target;
if (!(target is Element)) {
- throw const UnsupportedOperationException(
+ throw new UnsupportedError(
'offsetY is only supported on elements');
}
return this.clientY - this.target.getBoundingClientRect().top;
@@ -20603,6 +20560,7 @@
// WARNING: Do not edit - generated code.
+
typedef void MutationCallback(List<MutationRecord> mutations, MutationObserver observer);
// 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
@@ -20620,19 +20578,19 @@
static const int REMOVAL = 3;
/** @domName MutationEvent.attrChange */
- abstract int get attrChange;
+ int get attrChange;
/** @domName MutationEvent.attrName */
- abstract String get attrName;
+ String get attrName;
/** @domName MutationEvent.newValue */
- abstract String get newValue;
+ String get newValue;
/** @domName MutationEvent.prevValue */
- abstract String get prevValue;
+ String get prevValue;
/** @domName MutationEvent.relatedNode */
- abstract Node get relatedNode;
+ Node get relatedNode;
/** @domName MutationEvent.initMutationEvent */
void initMutationEvent(String type, bool canBubble, bool cancelable, Node relatedNode, String prevValue, String newValue, String attrName, int attrChange);
@@ -20658,6 +20616,7 @@
// WARNING: Do not edit - generated code.
+
/// @domName MutationObserver
abstract class MutationObserver {
@@ -20712,7 +20671,7 @@
if (options != null) {
options.forEach((k, v) {
if (_boolKeys.containsKey(k)) {
- _add(parsedOptions, k, true === v);
+ _add(parsedOptions, k, true == v);
} else if (k == 'attributeFilter') {
_add(parsedOptions, k, _fixupList(v));
} else {
@@ -20767,31 +20726,31 @@
abstract class MutationRecord {
/** @domName MutationRecord.addedNodes */
- abstract List<Node> get addedNodes;
+ List<Node> get addedNodes;
/** @domName MutationRecord.attributeName */
- abstract String get attributeName;
+ String get attributeName;
/** @domName MutationRecord.attributeNamespace */
- abstract String get attributeNamespace;
+ String get attributeNamespace;
/** @domName MutationRecord.nextSibling */
- abstract Node get nextSibling;
+ Node get nextSibling;
/** @domName MutationRecord.oldValue */
- abstract String get oldValue;
+ String get oldValue;
/** @domName MutationRecord.previousSibling */
- abstract Node get previousSibling;
+ Node get previousSibling;
/** @domName MutationRecord.removedNodes */
- abstract List<Node> get removedNodes;
+ List<Node> get removedNodes;
/** @domName MutationRecord.target */
- abstract Node get target;
+ Node get target;
/** @domName MutationRecord.type */
- abstract String get type;
+ String get type;
}
class _MutationRecordImpl implements MutationRecord native "*MutationRecord" {
@@ -20824,7 +20783,7 @@
abstract class NamedNodeMap implements List<Node> {
/** @domName NamedNodeMap.length */
- abstract int get length;
+ int get length;
/** @domName NamedNodeMap.getNamedItem */
Node getNamedItem(String name);
@@ -20855,7 +20814,7 @@
_NodeImpl operator[](int index) => JS("_NodeImpl", "#[#]", this, index);
void operator[]=(int index, _NodeImpl value) {
- throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+ throw new UnsupportedError("Cannot assign element of immutable List.");
}
// -- start List<Node> mixins.
// Node is the element type.
@@ -20872,15 +20831,15 @@
// From Collection<Node>:
void add(Node value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addLast(Node value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addAll(Collection<Node> collection) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
bool contains(Node element) => _Collections.contains(this, element);
@@ -20896,38 +20855,38 @@
bool some(bool f(Node element)) => _Collections.some(this, f);
- bool isEmpty() => this.length == 0;
+ bool get isEmpty => this.length == 0;
// From List<Node>:
void sort([Comparator<Node> compare = Comparable.compare]) {
- throw const UnsupportedOperationException("Cannot sort immutable List.");
+ throw new UnsupportedError("Cannot sort immutable List.");
}
int indexOf(Node element, [int start = 0]) =>
_Lists.indexOf(this, element, start, this.length);
int lastIndexOf(Node element, [int start]) {
- if (start === null) start = length - 1;
+ if (start == null) start = length - 1;
return _Lists.lastIndexOf(this, element, start);
}
- Node last() => this[length - 1];
+ Node get last => this[length - 1];
Node removeLast() {
- throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+ throw new UnsupportedError("Cannot removeLast on immutable List.");
}
void setRange(int start, int rangeLength, List<Node> from, [int startFrom]) {
- throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+ throw new UnsupportedError("Cannot setRange on immutable List.");
}
void removeRange(int start, int rangeLength) {
- throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+ throw new UnsupportedError("Cannot removeRange on immutable List.");
}
void insertRange(int start, int rangeLength, [Node initialValue]) {
- throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+ throw new UnsupportedError("Cannot insertRange on immutable List.");
}
List<Node> getRange(int start, int rangeLength) =>
@@ -20959,52 +20918,52 @@
abstract class Navigator {
/** @domName Navigator.appCodeName */
- abstract String get appCodeName;
+ String get appCodeName;
/** @domName Navigator.appName */
- abstract String get appName;
+ String get appName;
/** @domName Navigator.appVersion */
- abstract String get appVersion;
+ String get appVersion;
/** @domName Navigator.cookieEnabled */
- abstract bool get cookieEnabled;
+ bool get cookieEnabled;
/** @domName Navigator.geolocation */
- abstract Geolocation get geolocation;
+ Geolocation get geolocation;
/** @domName Navigator.language */
- abstract String get language;
+ String get language;
/** @domName Navigator.mimeTypes */
- abstract DOMMimeTypeArray get mimeTypes;
+ DOMMimeTypeArray get mimeTypes;
/** @domName Navigator.onLine */
- abstract bool get onLine;
+ bool get onLine;
/** @domName Navigator.platform */
- abstract String get platform;
+ String get platform;
/** @domName Navigator.plugins */
- abstract DOMPluginArray get plugins;
+ DOMPluginArray get plugins;
/** @domName Navigator.product */
- abstract String get product;
+ String get product;
/** @domName Navigator.productSub */
- abstract String get productSub;
+ String get productSub;
/** @domName Navigator.userAgent */
- abstract String get userAgent;
+ String get userAgent;
/** @domName Navigator.vendor */
- abstract String get vendor;
+ String get vendor;
/** @domName Navigator.vendorSub */
- abstract String get vendorSub;
+ String get vendorSub;
/** @domName Navigator.webkitBattery */
- abstract BatteryManager get webkitBattery;
+ BatteryManager get webkitBattery;
/** @domName Navigator.getStorageUpdates */
void getStorageUpdates();
@@ -21084,7 +21043,7 @@
static const int PERMISSION_DENIED = 1;
/** @domName NavigatorUserMediaError.code */
- abstract int get code;
+ int get code;
}
// 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
@@ -21092,6 +21051,7 @@
// WARNING: Do not edit - generated code.
+
typedef void NavigatorUserMediaErrorCallback(NavigatorUserMediaError error);
class _NavigatorUserMediaErrorImpl implements NavigatorUserMediaError native "*NavigatorUserMediaError" {
@@ -21104,6 +21064,7 @@
// WARNING: Do not edit - generated code.
+
typedef void NavigatorUserMediaSuccessCallback(LocalMediaStream stream);
// 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
@@ -21111,6 +21072,7 @@
// WARNING: Do not edit - generated code.
+
/// @domName Node
abstract class Node implements EventTarget {
List<Node> get nodes;
@@ -21167,31 +21129,31 @@
static const int TEXT_NODE = 3;
/** @domName Node.attributes */
- abstract NamedNodeMap get $dom_attributes;
+ NamedNodeMap get $dom_attributes;
/** @domName Node.childNodes */
- abstract List<Node> get $dom_childNodes;
+ List<Node> get $dom_childNodes;
/** @domName Node.firstChild */
- abstract Node get $dom_firstChild;
+ Node get $dom_firstChild;
/** @domName Node.lastChild */
- abstract Node get $dom_lastChild;
+ Node get $dom_lastChild;
/** @domName Node.nextSibling */
- abstract Node get nextNode;
+ Node get nextNode;
/** @domName Node.nodeType */
- abstract int get $dom_nodeType;
+ int get $dom_nodeType;
/** @domName Node.ownerDocument */
- abstract Document get document;
+ Document get document;
/** @domName Node.parentNode */
- abstract Node get parent;
+ Node get parent;
/** @domName Node.previousSibling */
- abstract Node get previousNode;
+ Node get previousNode;
/** @domName Node.textContent */
String text;
@@ -21292,7 +21254,7 @@
_NodeImpl get first => JS('_NodeImpl', '#.firstChild', _this);
- _NodeImpl last() => JS('_NodeImpl', '#.lastChild', _this);
+ _NodeImpl get last => JS('_NodeImpl', '#.lastChild', _this);
void add(_NodeImpl value) {
_this.$dom_appendChild(value);
@@ -21310,7 +21272,7 @@
}
_NodeImpl removeLast() {
- final result = last();
+ final result = last;
if (result != null) {
_this.$dom_removeChild(result);
}
@@ -21342,14 +21304,14 @@
bool some(bool f(Node element)) => _Collections.some(this, f);
- bool isEmpty() => this.length == 0;
+ bool get isEmpty => this.length == 0;
// From List<Node>:
// TODO(jacobr): this could be implemented for child node lists.
// The exception we throw here is misleading.
void sort([Comparator<Node> compare = Comparable.compare]) {
- throw new UnsupportedOperationException("Cannot sort immutable List.");
+ throw new UnsupportedError("Cannot sort immutable List.");
}
int indexOf(Node element, [int start = 0]) =>
@@ -21360,15 +21322,15 @@
// FIXME: implement these.
void setRange(int start, int rangeLength, List<Node> from, [int startFrom]) {
- throw new UnsupportedOperationException(
+ throw new UnsupportedError(
"Cannot setRange on immutable List.");
}
void removeRange(int start, int rangeLength) {
- throw new UnsupportedOperationException(
+ throw new UnsupportedError(
"Cannot removeRange on immutable List.");
}
void insertRange(int start, int rangeLength, [Node initialValue]) {
- throw new UnsupportedOperationException(
+ throw new UnsupportedError(
"Cannot insertRange on immutable List.");
}
List<Node> getRange(int start, int rangeLength) =>
@@ -21418,25 +21380,25 @@
}
- _NamedNodeMapImpl get $dom_attributes() => JS("_NamedNodeMapImpl", "#.attributes", this);
+ _NamedNodeMapImpl get $dom_attributes => JS("_NamedNodeMapImpl", "#.attributes", this);
- List<Node> get $dom_childNodes() => JS("List<Node>", "#.childNodes", this);
+ List<Node> get $dom_childNodes => JS("List<Node>", "#.childNodes", this);
- _NodeImpl get $dom_firstChild() => JS("_NodeImpl", "#.firstChild", this);
+ _NodeImpl get $dom_firstChild => JS("_NodeImpl", "#.firstChild", this);
- _NodeImpl get $dom_lastChild() => JS("_NodeImpl", "#.lastChild", this);
+ _NodeImpl get $dom_lastChild => JS("_NodeImpl", "#.lastChild", this);
- _NodeImpl get nextNode() => JS("_NodeImpl", "#.nextSibling", this);
+ _NodeImpl get nextNode => JS("_NodeImpl", "#.nextSibling", this);
- int get $dom_nodeType() => JS("int", "#.nodeType", this);
+ int get $dom_nodeType => JS("int", "#.nodeType", this);
- _DocumentImpl get document() => JS("_DocumentImpl", "#.ownerDocument", this);
+ _DocumentImpl get document => JS("_DocumentImpl", "#.ownerDocument", this);
- _NodeImpl get parent() => JS("_NodeImpl", "#.parentNode", this);
+ _NodeImpl get parent => JS("_NodeImpl", "#.parentNode", this);
- _NodeImpl get previousNode() => JS("_NodeImpl", "#.previousSibling", this);
+ _NodeImpl get previousNode => JS("_NodeImpl", "#.previousSibling", this);
- String get text() => JS("String", "#.textContent", this);
+ String get text => JS("String", "#.textContent", this);
void set text(String value) {
JS("void", "#.textContent = #", this, value);
@@ -21473,22 +21435,22 @@
abstract class NodeIterator {
/** @domName NodeIterator.expandEntityReferences */
- abstract bool get expandEntityReferences;
+ bool get expandEntityReferences;
/** @domName NodeIterator.filter */
- abstract NodeFilter get filter;
+ NodeFilter get filter;
/** @domName NodeIterator.pointerBeforeReferenceNode */
- abstract bool get pointerBeforeReferenceNode;
+ bool get pointerBeforeReferenceNode;
/** @domName NodeIterator.referenceNode */
- abstract Node get referenceNode;
+ Node get referenceNode;
/** @domName NodeIterator.root */
- abstract Node get root;
+ Node get root;
/** @domName NodeIterator.whatToShow */
- abstract int get whatToShow;
+ int get whatToShow;
/** @domName NodeIterator.detach */
void detach();
@@ -21526,6 +21488,7 @@
// WARNING: Do not edit - generated code.
+
/// @domName NodeList
abstract class NodeList implements List<Node> {
@@ -21537,7 +21500,7 @@
/** @domName NodeList.length */
- abstract int get length;
+ int get length;
}
// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
@@ -21565,7 +21528,7 @@
bool some(bool f(E element)) => _list.some(f);
- bool isEmpty() => _list.isEmpty();
+ bool get isEmpty => _list.isEmpty;
int get length => _list.length;
@@ -21592,7 +21555,7 @@
E removeLast() => _list.removeLast();
- E last() => _list.last();
+ E get last => _list.last;
List<E> getRange(int start, int rangeLength) =>
_list.getRange(start, rangeLength);
@@ -21655,7 +21618,7 @@
}
_NodeImpl removeLast() {
- final result = this.last();
+ final result = this.last;
if (result != null) {
_parent.$dom_removeChild(result);
}
@@ -21683,12 +21646,12 @@
bool some(bool f(Node element)) => _Collections.some(this, f);
- bool isEmpty() => this.length == 0;
+ bool get isEmpty => this.length == 0;
// From List<Node>:
void sort([Comparator<Node> compare = Comparable.compare]) {
- throw new UnsupportedOperationException("Cannot sort immutable List.");
+ throw new UnsupportedError("Cannot sort immutable List.");
}
int indexOf(Node element, [int start = 0]) =>
@@ -21697,18 +21660,18 @@
int lastIndexOf(Node element, [int start = 0]) =>
_Lists.lastIndexOf(this, element, start);
- Node last() => this[length - 1];
+ Node get last => this[length - 1];
Node get first => this[0];
// FIXME: implement thesee.
void setRange(int start, int rangeLength, List<Node> from, [int startFrom]) {
- throw new UnsupportedOperationException("Cannot setRange on immutable List.");
+ throw new UnsupportedError("Cannot setRange on immutable List.");
}
void removeRange(int start, int rangeLength) {
- throw new UnsupportedOperationException("Cannot removeRange on immutable List.");
+ throw new UnsupportedError("Cannot removeRange on immutable List.");
}
void insertRange(int start, int rangeLength, [Node initialValue]) {
- throw new UnsupportedOperationException("Cannot insertRange on immutable List.");
+ throw new UnsupportedError("Cannot insertRange on immutable List.");
}
List<Node> getRange(int start, int rangeLength) =>
new _NodeListWrapper(_Lists.getRange(this, start, rangeLength, <Node>[]));
@@ -21733,10 +21696,10 @@
abstract class Notation implements Node {
/** @domName Notation.publicId */
- abstract String get publicId;
+ String get publicId;
/** @domName Notation.systemId */
- abstract String get systemId;
+ String get systemId;
}
class _NotationImpl extends _NodeImpl implements Notation native "*Notation" {
@@ -21770,7 +21733,7 @@
String dir;
/** @domName Notification.permission */
- abstract String get permission;
+ String get permission;
/** @domName Notification.replaceId */
String replaceId;
@@ -21892,6 +21855,7 @@
// WARNING: Do not edit - generated code.
+
typedef void NotificationPermissionCallback(String permission);
// 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
@@ -22016,9 +21980,6 @@
/** @domName HTMLObjectElement.codeType */
String codeType;
- /** @domName HTMLObjectElement.contentDocument */
- abstract Document get contentDocument;
-
/** @domName HTMLObjectElement.data */
String data;
@@ -22026,7 +21987,7 @@
bool declare;
/** @domName HTMLObjectElement.form */
- abstract FormElement get form;
+ FormElement get form;
/** @domName HTMLObjectElement.height */
String height;
@@ -22047,10 +22008,10 @@
String useMap;
/** @domName HTMLObjectElement.validationMessage */
- abstract String get validationMessage;
+ String get validationMessage;
/** @domName HTMLObjectElement.validity */
- abstract ValidityState get validity;
+ ValidityState get validity;
/** @domName HTMLObjectElement.vspace */
int vspace;
@@ -22059,7 +22020,7 @@
String width;
/** @domName HTMLObjectElement.willValidate */
- abstract bool get willValidate;
+ bool get willValidate;
/** @domName HTMLObjectElement.checkValidity */
bool checkValidity();
@@ -22082,8 +22043,6 @@
String codeType;
- final _DocumentImpl contentDocument;
-
String data;
bool declare;
@@ -22126,7 +22085,7 @@
abstract class OfflineAudioCompletionEvent implements Event {
/** @domName OfflineAudioCompletionEvent.renderedBuffer */
- abstract AudioBuffer get renderedBuffer;
+ AudioBuffer get renderedBuffer;
}
class _OfflineAudioCompletionEventImpl extends _EventImpl implements OfflineAudioCompletionEvent native "*OfflineAudioCompletionEvent" {
@@ -22189,10 +22148,10 @@
bool disabled;
/** @domName HTMLOptionElement.form */
- abstract FormElement get form;
+ FormElement get form;
/** @domName HTMLOptionElement.index */
- abstract int get index;
+ int get index;
/** @domName HTMLOptionElement.label */
String label;
@@ -22248,13 +22207,13 @@
static const int UNSCHEDULED_STATE = 0;
/** @domName Oscillator.detune */
- abstract AudioParam get detune;
+ AudioParam get detune;
/** @domName Oscillator.frequency */
- abstract AudioParam get frequency;
+ AudioParam get frequency;
/** @domName Oscillator.playbackState */
- abstract int get playbackState;
+ int get playbackState;
/** @domName Oscillator.type */
int type;
@@ -22300,31 +22259,31 @@
String defaultValue;
/** @domName HTMLOutputElement.form */
- abstract FormElement get form;
+ FormElement get form;
/** @domName HTMLOutputElement.htmlFor */
DOMSettableTokenList htmlFor;
/** @domName HTMLOutputElement.labels */
- abstract List<Node> get labels;
+ List<Node> get labels;
/** @domName HTMLOutputElement.name */
String name;
/** @domName HTMLOutputElement.type */
- abstract String get type;
+ String get type;
/** @domName HTMLOutputElement.validationMessage */
- abstract String get validationMessage;
+ String get validationMessage;
/** @domName HTMLOutputElement.validity */
- abstract ValidityState get validity;
+ ValidityState get validity;
/** @domName HTMLOutputElement.value */
String value;
/** @domName HTMLOutputElement.willValidate */
- abstract bool get willValidate;
+ bool get willValidate;
/** @domName HTMLOutputElement.checkValidity */
bool checkValidity();
@@ -22375,13 +22334,13 @@
static const int VERTICAL = 1;
/** @domName OverflowEvent.horizontalOverflow */
- abstract bool get horizontalOverflow;
+ bool get horizontalOverflow;
/** @domName OverflowEvent.orient */
- abstract int get orient;
+ int get orient;
/** @domName OverflowEvent.verticalOverflow */
- abstract bool get verticalOverflow;
+ bool get verticalOverflow;
}
class _OverflowEventImpl extends _EventImpl implements OverflowEvent native "*OverflowEvent" {
@@ -22424,7 +22383,7 @@
abstract class PageTransitionEvent implements Event {
/** @domName PageTransitionEvent.persisted */
- abstract bool get persisted;
+ bool get persisted;
}
class _PageTransitionEventImpl extends _EventImpl implements PageTransitionEvent native "*PageTransitionEvent" {
@@ -22529,22 +22488,22 @@
static const int SDP_PRANSWER = 0x200;
/** @domName PeerConnection00.iceState */
- abstract int get iceState;
+ int get iceState;
/** @domName PeerConnection00.localDescription */
- abstract SessionDescription get localDescription;
+ SessionDescription get localDescription;
/** @domName PeerConnection00.localStreams */
- abstract List<MediaStream> get localStreams;
+ List<MediaStream> get localStreams;
/** @domName PeerConnection00.readyState */
- abstract int get readyState;
+ int get readyState;
/** @domName PeerConnection00.remoteDescription */
- abstract SessionDescription get remoteDescription;
+ SessionDescription get remoteDescription;
/** @domName PeerConnection00.remoteStreams */
- abstract List<MediaStream> get remoteStreams;
+ List<MediaStream> get remoteStreams;
/** @domName PeerConnection00.addEventListener */
void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
@@ -22697,16 +22656,16 @@
abstract class Performance implements EventTarget {
/** @domName Performance.memory */
- abstract MemoryInfo get memory;
+ MemoryInfo get memory;
/** @domName Performance.navigation */
- abstract PerformanceNavigation get navigation;
+ PerformanceNavigation get navigation;
/** @domName Performance.timing */
- abstract PerformanceTiming get timing;
+ PerformanceTiming get timing;
- /** @domName Performance.webkitNow */
- num webkitNow();
+ /** @domName Performance.now */
+ num now();
}
class _PerformanceImpl extends _EventTargetImpl implements Performance native "*Performance" {
@@ -22717,7 +22676,7 @@
final _PerformanceTimingImpl timing;
- num webkitNow() native;
+ num now() native;
}
// 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
@@ -22737,10 +22696,10 @@
static const int TYPE_RESERVED = 255;
/** @domName PerformanceNavigation.redirectCount */
- abstract int get redirectCount;
+ int get redirectCount;
/** @domName PerformanceNavigation.type */
- abstract int get type;
+ int get type;
}
class _PerformanceNavigationImpl implements PerformanceNavigation native "*PerformanceNavigation" {
@@ -22759,67 +22718,67 @@
abstract class PerformanceTiming {
/** @domName PerformanceTiming.connectEnd */
- abstract int get connectEnd;
+ int get connectEnd;
/** @domName PerformanceTiming.connectStart */
- abstract int get connectStart;
+ int get connectStart;
/** @domName PerformanceTiming.domComplete */
- abstract int get domComplete;
+ int get domComplete;
/** @domName PerformanceTiming.domContentLoadedEventEnd */
- abstract int get domContentLoadedEventEnd;
+ int get domContentLoadedEventEnd;
/** @domName PerformanceTiming.domContentLoadedEventStart */
- abstract int get domContentLoadedEventStart;
+ int get domContentLoadedEventStart;
/** @domName PerformanceTiming.domInteractive */
- abstract int get domInteractive;
+ int get domInteractive;
/** @domName PerformanceTiming.domLoading */
- abstract int get domLoading;
+ int get domLoading;
/** @domName PerformanceTiming.domainLookupEnd */
- abstract int get domainLookupEnd;
+ int get domainLookupEnd;
/** @domName PerformanceTiming.domainLookupStart */
- abstract int get domainLookupStart;
+ int get domainLookupStart;
/** @domName PerformanceTiming.fetchStart */
- abstract int get fetchStart;
+ int get fetchStart;
/** @domName PerformanceTiming.loadEventEnd */
- abstract int get loadEventEnd;
+ int get loadEventEnd;
/** @domName PerformanceTiming.loadEventStart */
- abstract int get loadEventStart;
+ int get loadEventStart;
/** @domName PerformanceTiming.navigationStart */
- abstract int get navigationStart;
+ int get navigationStart;
/** @domName PerformanceTiming.redirectEnd */
- abstract int get redirectEnd;
+ int get redirectEnd;
/** @domName PerformanceTiming.redirectStart */
- abstract int get redirectStart;
+ int get redirectStart;
/** @domName PerformanceTiming.requestStart */
- abstract int get requestStart;
+ int get requestStart;
/** @domName PerformanceTiming.responseEnd */
- abstract int get responseEnd;
+ int get responseEnd;
/** @domName PerformanceTiming.responseStart */
- abstract int get responseStart;
+ int get responseStart;
/** @domName PerformanceTiming.secureConnectionStart */
- abstract int get secureConnectionStart;
+ int get secureConnectionStart;
/** @domName PerformanceTiming.unloadEventEnd */
- abstract int get unloadEventEnd;
+ int get unloadEventEnd;
/** @domName PerformanceTiming.unloadEventStart */
- abstract int get unloadEventStart;
+ int get unloadEventStart;
}
class _PerformanceTimingImpl implements PerformanceTiming native "*PerformanceTiming" {
@@ -22872,6 +22831,7 @@
// WARNING: Do not edit - generated code.
+
/// @domName WebKitPoint
abstract class Point {
@@ -22900,7 +22860,7 @@
abstract class PopStateEvent implements Event {
/** @domName PopStateEvent.state */
- abstract Object get state;
+ Object get state;
}
class _PopStateEventImpl extends _EventImpl implements PopStateEvent native "*PopStateEvent" {
@@ -22913,6 +22873,7 @@
// WARNING: Do not edit - generated code.
+
typedef void PositionCallback(Geoposition position);
// 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
@@ -22930,10 +22891,10 @@
static const int TIMEOUT = 3;
/** @domName PositionError.code */
- abstract int get code;
+ int get code;
/** @domName PositionError.message */
- abstract String get message;
+ String get message;
}
// 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
@@ -22941,6 +22902,7 @@
// WARNING: Do not edit - generated code.
+
typedef void PositionErrorCallback(PositionError error);
class _PositionErrorImpl implements PositionError native "*PositionError" {
@@ -22986,10 +22948,10 @@
String data;
/** @domName ProcessingInstruction.sheet */
- abstract StyleSheet get sheet;
+ StyleSheet get sheet;
/** @domName ProcessingInstruction.target */
- abstract String get target;
+ String get target;
}
class _ProcessingInstructionImpl extends _NodeImpl implements ProcessingInstruction native "*ProcessingInstruction" {
@@ -23012,13 +22974,13 @@
factory ProgressElement() => _Elements.createProgressElement();
/** @domName HTMLProgressElement.labels */
- abstract List<Node> get labels;
+ List<Node> get labels;
/** @domName HTMLProgressElement.max */
num max;
/** @domName HTMLProgressElement.position */
- abstract num get position;
+ num get position;
/** @domName HTMLProgressElement.value */
num value;
@@ -23044,13 +23006,13 @@
abstract class ProgressEvent implements Event {
/** @domName ProgressEvent.lengthComputable */
- abstract bool get lengthComputable;
+ bool get lengthComputable;
/** @domName ProgressEvent.loaded */
- abstract int get loaded;
+ int get loaded;
/** @domName ProgressEvent.total */
- abstract int get total;
+ int get total;
}
class _ProgressEventImpl extends _EventImpl implements ProgressEvent native "*ProgressEvent" {
@@ -23088,13 +23050,13 @@
abstract class RGBColor {
/** @domName RGBColor.blue */
- abstract CSSPrimitiveValue get blue;
+ CSSPrimitiveValue get blue;
/** @domName RGBColor.green */
- abstract CSSPrimitiveValue get green;
+ CSSPrimitiveValue get green;
/** @domName RGBColor.red */
- abstract CSSPrimitiveValue get red;
+ CSSPrimitiveValue get red;
}
class _RGBColorImpl implements RGBColor native "*RGBColor" {
@@ -23111,6 +23073,117 @@
// WARNING: Do not edit - generated code.
+/// @domName RTCDataChannel
+abstract class RTCDataChannel implements EventTarget {
+
+ /**
+ * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
+ */
+ RTCDataChannelEvents get on;
+
+ /** @domName RTCDataChannel.binaryType */
+ String binaryType;
+
+ /** @domName RTCDataChannel.bufferedAmount */
+ int get bufferedAmount;
+
+ /** @domName RTCDataChannel.label */
+ String get label;
+
+ /** @domName RTCDataChannel.readyState */
+ String get readyState;
+
+ /** @domName RTCDataChannel.reliable */
+ bool get reliable;
+
+ /** @domName RTCDataChannel.addEventListener */
+ void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
+
+ /** @domName RTCDataChannel.close */
+ void close();
+
+ /** @domName RTCDataChannel.dispatchEvent */
+ bool $dom_dispatchEvent(Event event);
+
+ /** @domName RTCDataChannel.removeEventListener */
+ void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]);
+
+ /** @domName RTCDataChannel.send */
+ void send(data);
+}
+
+abstract class RTCDataChannelEvents implements Events {
+
+ EventListenerList get close;
+
+ EventListenerList get error;
+
+ EventListenerList get message;
+
+ EventListenerList get open;
+}
+// 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.
+
+// WARNING: Do not edit - generated code.
+
+/// @domName RTCDataChannelEvent
+abstract class RTCDataChannelEvent implements Event {
+
+ /** @domName RTCDataChannelEvent.channel */
+ RTCDataChannel get channel;
+}
+
+class _RTCDataChannelEventImpl extends _EventImpl implements RTCDataChannelEvent native "*RTCDataChannelEvent" {
+
+ final _RTCDataChannelImpl channel;
+}
+
+class _RTCDataChannelImpl extends _EventTargetImpl implements RTCDataChannel native "*RTCDataChannel" {
+
+ _RTCDataChannelEventsImpl get on =>
+ new _RTCDataChannelEventsImpl(this);
+
+ String binaryType;
+
+ final int bufferedAmount;
+
+ final String label;
+
+ final String readyState;
+
+ final bool reliable;
+
+ void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "addEventListener";
+
+ void close() native;
+
+ bool $dom_dispatchEvent(_EventImpl event) native "dispatchEvent";
+
+ void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "removeEventListener";
+
+ void send(data) native;
+}
+
+class _RTCDataChannelEventsImpl extends _EventsImpl implements RTCDataChannelEvents {
+ _RTCDataChannelEventsImpl(_ptr) : super(_ptr);
+
+ EventListenerList get close => this['close'];
+
+ EventListenerList get error => this['error'];
+
+ EventListenerList get message => this['message'];
+
+ EventListenerList get open => this['open'];
+}
+// 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.
+
+// WARNING: Do not edit - generated code.
+
+
typedef void RTCErrorCallback(String errorInformation);
// 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
@@ -23124,13 +23197,13 @@
factory RTCIceCandidate(Map dictionary) => _RTCIceCandidateFactoryProvider.createRTCIceCandidate(dictionary);
/** @domName RTCIceCandidate.candidate */
- abstract String get candidate;
+ String get candidate;
/** @domName RTCIceCandidate.sdpMLineIndex */
- abstract int get sdpMLineIndex;
+ int get sdpMLineIndex;
/** @domName RTCIceCandidate.sdpMid */
- abstract String get sdpMid;
+ String get sdpMid;
}
// 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
@@ -23142,7 +23215,7 @@
abstract class RTCIceCandidateEvent implements Event {
/** @domName RTCIceCandidateEvent.candidate */
- abstract RTCIceCandidate get candidate;
+ RTCIceCandidate get candidate;
}
class _RTCIceCandidateEventImpl extends _EventImpl implements RTCIceCandidateEvent native "*RTCIceCandidateEvent" {
@@ -23180,22 +23253,22 @@
RTCPeerConnectionEvents get on;
/** @domName RTCPeerConnection.iceState */
- abstract String get iceState;
+ String get iceState;
/** @domName RTCPeerConnection.localDescription */
- abstract RTCSessionDescription get localDescription;
+ RTCSessionDescription get localDescription;
/** @domName RTCPeerConnection.localStreams */
- abstract List<MediaStream> get localStreams;
+ List<MediaStream> get localStreams;
/** @domName RTCPeerConnection.readyState */
- abstract String get readyState;
+ String get readyState;
/** @domName RTCPeerConnection.remoteDescription */
- abstract RTCSessionDescription get remoteDescription;
+ RTCSessionDescription get remoteDescription;
/** @domName RTCPeerConnection.remoteStreams */
- abstract List<MediaStream> get remoteStreams;
+ List<MediaStream> get remoteStreams;
/** @domName RTCPeerConnection.addEventListener */
void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
@@ -23212,6 +23285,9 @@
/** @domName RTCPeerConnection.createAnswer */
void createAnswer(RTCSessionDescriptionCallback successCallback, [RTCErrorCallback failureCallback, Map mediaConstraints]);
+ /** @domName RTCPeerConnection.createDataChannel */
+ RTCDataChannel createDataChannel(String label, Map options);
+
/** @domName RTCPeerConnection.createOffer */
void createOffer(RTCSessionDescriptionCallback successCallback, [RTCErrorCallback failureCallback, Map mediaConstraints]);
@@ -23291,6 +23367,12 @@
}
void _createAnswer_1(RTCSessionDescriptionCallback successCallback, RTCErrorCallback failureCallback, mediaConstraints) native "createAnswer";
+ _RTCDataChannelImpl createDataChannel(String label, Map options) {
+ var options_1 = _convertDartToNative_Dictionary(options);
+ return _createDataChannel_1(label, options_1);
+ }
+ _RTCDataChannelImpl _createDataChannel_1(label, options) native "createDataChannel";
+
void createOffer(RTCSessionDescriptionCallback successCallback, [failureCallback, mediaConstraints]) {
var mediaConstraints_1 = _convertDartToNative_Dictionary(mediaConstraints);
_createOffer_1(successCallback, failureCallback, mediaConstraints_1);
@@ -23359,6 +23441,7 @@
// WARNING: Do not edit - generated code.
+
typedef void RTCSessionDescriptionCallback(RTCSessionDescription sdp);
class _RTCSessionDescriptionImpl implements RTCSessionDescription native "*RTCSessionDescription" {
@@ -23373,6 +23456,7 @@
// WARNING: Do not edit - generated code.
+
typedef void RTCStatsCallback(RTCStatsResponse response);
// 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
@@ -23384,7 +23468,7 @@
abstract class RTCStatsElement {
/** @domName RTCStatsElement.timestamp */
- abstract int get timestamp;
+ Date get timestamp;
/** @domName RTCStatsElement.stat */
String stat(String name);
@@ -23392,7 +23476,7 @@
class _RTCStatsElementImpl implements RTCStatsElement native "*RTCStatsElement" {
- final int timestamp;
+ final Date timestamp;
String stat(String name) native;
}
@@ -23406,17 +23490,17 @@
abstract class RTCStatsReport {
/** @domName RTCStatsReport.local */
- List<RTCStatsElement> local();
+ RTCStatsElement get local;
/** @domName RTCStatsReport.remote */
- List<RTCStatsElement> remote();
+ RTCStatsElement get remote;
}
class _RTCStatsReportImpl implements RTCStatsReport native "*RTCStatsReport" {
- List<RTCStatsElement> local() native;
+ final _RTCStatsElementImpl local;
- List<RTCStatsElement> remote() native;
+ final _RTCStatsElementImpl remote;
}
// 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
@@ -23478,22 +23562,22 @@
static const int START_TO_START = 0;
/** @domName Range.collapsed */
- abstract bool get collapsed;
+ bool get collapsed;
/** @domName Range.commonAncestorContainer */
- abstract Node get commonAncestorContainer;
+ Node get commonAncestorContainer;
/** @domName Range.endContainer */
- abstract Node get endContainer;
+ Node get endContainer;
/** @domName Range.endOffset */
- abstract int get endOffset;
+ int get endOffset;
/** @domName Range.startContainer */
- abstract Node get startContainer;
+ Node get startContainer;
/** @domName Range.startOffset */
- abstract int get startOffset;
+ int get startOffset;
/** @domName Range.cloneContents */
DocumentFragment cloneContents();
@@ -23584,13 +23668,13 @@
static const int INVALID_NODE_TYPE_ERR = 2;
/** @domName RangeException.code */
- abstract int get code;
+ int get code;
/** @domName RangeException.message */
- abstract String get message;
+ String get message;
/** @domName RangeException.name */
- abstract String get name;
+ String get name;
/** @domName RangeException.toString */
String toString();
@@ -23684,7 +23768,7 @@
int fftSize;
/** @domName RealtimeAnalyserNode.frequencyBinCount */
- abstract int get frequencyBinCount;
+ int get frequencyBinCount;
/** @domName RealtimeAnalyserNode.maxDecibels */
num maxDecibels;
@@ -23733,16 +23817,16 @@
abstract class Rect {
/** @domName Rect.bottom */
- abstract CSSPrimitiveValue get bottom;
+ CSSPrimitiveValue get bottom;
/** @domName Rect.left */
- abstract CSSPrimitiveValue get left;
+ CSSPrimitiveValue get left;
/** @domName Rect.right */
- abstract CSSPrimitiveValue get right;
+ CSSPrimitiveValue get right;
/** @domName Rect.top */
- abstract CSSPrimitiveValue get top;
+ CSSPrimitiveValue get top;
}
class _RectImpl implements Rect native "*Rect" {
@@ -23761,7 +23845,8 @@
// WARNING: Do not edit - generated code.
-typedef void RequestAnimationFrameCallback(int time);
+
+typedef void RequestAnimationFrameCallback(num highResTime);
// 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.
@@ -23788,10 +23873,10 @@
static const int VERSION_ERR = 2;
/** @domName SQLError.code */
- abstract int get code;
+ int get code;
/** @domName SQLError.message */
- abstract String get message;
+ String get message;
}
class _SQLErrorImpl implements SQLError native "*SQLError" {
@@ -23826,10 +23911,10 @@
static const int VERSION_ERR = 2;
/** @domName SQLException.code */
- abstract int get code;
+ int get code;
/** @domName SQLException.message */
- abstract String get message;
+ String get message;
}
class _SQLExceptionImpl implements SQLException native "*SQLException" {
@@ -23848,13 +23933,13 @@
abstract class SQLResultSet {
/** @domName SQLResultSet.insertId */
- abstract int get insertId;
+ int get insertId;
/** @domName SQLResultSet.rows */
- abstract SQLResultSetRowList get rows;
+ SQLResultSetRowList get rows;
/** @domName SQLResultSet.rowsAffected */
- abstract int get rowsAffected;
+ int get rowsAffected;
}
class _SQLResultSetImpl implements SQLResultSet native "*SQLResultSet" {
@@ -23875,7 +23960,7 @@
abstract class SQLResultSetRowList implements List<Map> {
/** @domName SQLResultSetRowList.length */
- abstract int get length;
+ int get length;
/** @domName SQLResultSetRowList.item */
Map item(int index);
@@ -23888,7 +23973,7 @@
Map operator[](int index) => JS("Map", "#[#]", this, index);
void operator[]=(int index, Map value) {
- throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+ throw new UnsupportedError("Cannot assign element of immutable List.");
}
// -- start List<Map> mixins.
// Map is the element type.
@@ -23905,15 +23990,15 @@
// From Collection<Map>:
void add(Map value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addLast(Map value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addAll(Collection<Map> collection) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
bool contains(Map element) => _Collections.contains(this, element);
@@ -23929,38 +24014,38 @@
bool some(bool f(Map element)) => _Collections.some(this, f);
- bool isEmpty() => this.length == 0;
+ bool get isEmpty => this.length == 0;
// From List<Map>:
void sort([Comparator<Map> compare = Comparable.compare]) {
- throw const UnsupportedOperationException("Cannot sort immutable List.");
+ throw new UnsupportedError("Cannot sort immutable List.");
}
int indexOf(Map element, [int start = 0]) =>
_Lists.indexOf(this, element, start, this.length);
int lastIndexOf(Map element, [int start]) {
- if (start === null) start = length - 1;
+ if (start == null) start = length - 1;
return _Lists.lastIndexOf(this, element, start);
}
- Map last() => this[length - 1];
+ Map get last => this[length - 1];
Map removeLast() {
- throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+ throw new UnsupportedError("Cannot removeLast on immutable List.");
}
void setRange(int start, int rangeLength, List<Map> from, [int startFrom]) {
- throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+ throw new UnsupportedError("Cannot setRange on immutable List.");
}
void removeRange(int start, int rangeLength) {
- throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+ throw new UnsupportedError("Cannot removeRange on immutable List.");
}
void insertRange(int start, int rangeLength, [Map initialValue]) {
- throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+ throw new UnsupportedError("Cannot insertRange on immutable List.");
}
List<Map> getRange(int start, int rangeLength) =>
@@ -23979,6 +24064,7 @@
// WARNING: Do not edit - generated code.
+
typedef void SQLStatementCallback(SQLTransaction transaction, SQLResultSet resultSet);
// 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
@@ -23986,6 +24072,7 @@
// WARNING: Do not edit - generated code.
+
typedef void SQLStatementErrorCallback(SQLTransaction transaction, SQLError error);
// 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
@@ -24005,6 +24092,7 @@
// WARNING: Do not edit - generated code.
+
typedef void SQLTransactionCallback(SQLTransaction transaction);
// 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
@@ -24012,6 +24100,7 @@
// WARNING: Do not edit - generated code.
+
typedef void SQLTransactionErrorCallback(SQLError error);
class _SQLTransactionImpl implements SQLTransaction native "*SQLTransaction" {
@@ -24036,6 +24125,7 @@
// WARNING: Do not edit - generated code.
+
typedef void SQLTransactionSyncCallback(SQLTransactionSync transaction);
class _SQLTransactionSyncImpl implements SQLTransactionSync native "*SQLTransactionSync" {
@@ -24052,7 +24142,7 @@
abstract class SVGAElement implements SVGElement, SVGURIReference, SVGTests, SVGLangSpace, SVGExternalResourcesRequired, SVGStylable, SVGTransformable {
/** @domName SVGAElement.target */
- abstract SVGAnimatedString get target;
+ SVGAnimatedString get target;
}
class _SVGAElementImpl extends _SVGElementImpl implements SVGAElement native "*SVGAElement" {
@@ -24085,7 +24175,7 @@
// From SVGStylable
- _SVGAnimatedStringImpl get $dom_svgClassName() => JS("_SVGAnimatedStringImpl", "#.className", this);
+ _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
// Use implementation from Element.
// final _CSSStyleDeclarationImpl style;
@@ -24180,7 +24270,7 @@
static const int SVG_ANGLETYPE_UNSPECIFIED = 1;
/** @domName SVGAngle.unitType */
- abstract int get unitType;
+ int get unitType;
/** @domName SVGAngle.value */
num value;
@@ -24270,10 +24360,10 @@
abstract class SVGAnimatedAngle {
/** @domName SVGAnimatedAngle.animVal */
- abstract SVGAngle get animVal;
+ SVGAngle get animVal;
/** @domName SVGAnimatedAngle.baseVal */
- abstract SVGAngle get baseVal;
+ SVGAngle get baseVal;
}
class _SVGAnimatedAngleImpl implements SVGAnimatedAngle native "*SVGAnimatedAngle" {
@@ -24292,7 +24382,7 @@
abstract class SVGAnimatedBoolean {
/** @domName SVGAnimatedBoolean.animVal */
- abstract bool get animVal;
+ bool get animVal;
/** @domName SVGAnimatedBoolean.baseVal */
bool baseVal;
@@ -24314,7 +24404,7 @@
abstract class SVGAnimatedEnumeration {
/** @domName SVGAnimatedEnumeration.animVal */
- abstract int get animVal;
+ int get animVal;
/** @domName SVGAnimatedEnumeration.baseVal */
int baseVal;
@@ -24336,7 +24426,7 @@
abstract class SVGAnimatedInteger {
/** @domName SVGAnimatedInteger.animVal */
- abstract int get animVal;
+ int get animVal;
/** @domName SVGAnimatedInteger.baseVal */
int baseVal;
@@ -24358,10 +24448,10 @@
abstract class SVGAnimatedLength {
/** @domName SVGAnimatedLength.animVal */
- abstract SVGLength get animVal;
+ SVGLength get animVal;
/** @domName SVGAnimatedLength.baseVal */
- abstract SVGLength get baseVal;
+ SVGLength get baseVal;
}
class _SVGAnimatedLengthImpl implements SVGAnimatedLength native "*SVGAnimatedLength" {
@@ -24380,10 +24470,10 @@
abstract class SVGAnimatedLengthList implements List<SVGAnimatedLength> {
/** @domName SVGAnimatedLengthList.animVal */
- abstract SVGLengthList get animVal;
+ SVGLengthList get animVal;
/** @domName SVGAnimatedLengthList.baseVal */
- abstract SVGLengthList get baseVal;
+ SVGLengthList get baseVal;
}
class _SVGAnimatedLengthListImpl implements SVGAnimatedLengthList, JavaScriptIndexingBehavior native "*SVGAnimatedLengthList" {
@@ -24395,7 +24485,7 @@
_SVGAnimatedLengthImpl operator[](int index) => JS("_SVGAnimatedLengthImpl", "#[#]", this, index);
void operator[]=(int index, _SVGAnimatedLengthImpl value) {
- throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+ throw new UnsupportedError("Cannot assign element of immutable List.");
}
// -- start List<SVGAnimatedLength> mixins.
// SVGAnimatedLength is the element type.
@@ -24412,15 +24502,15 @@
// From Collection<SVGAnimatedLength>:
void add(SVGAnimatedLength value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addLast(SVGAnimatedLength value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addAll(Collection<SVGAnimatedLength> collection) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
bool contains(SVGAnimatedLength element) => _Collections.contains(this, element);
@@ -24436,38 +24526,38 @@
bool some(bool f(SVGAnimatedLength element)) => _Collections.some(this, f);
- bool isEmpty() => this.length == 0;
+ bool get isEmpty => this.length == 0;
// From List<SVGAnimatedLength>:
void sort([Comparator<SVGAnimatedLength> compare = Comparable.compare]) {
- throw const UnsupportedOperationException("Cannot sort immutable List.");
+ throw new UnsupportedError("Cannot sort immutable List.");
}
int indexOf(SVGAnimatedLength element, [int start = 0]) =>
_Lists.indexOf(this, element, start, this.length);
int lastIndexOf(SVGAnimatedLength element, [int start]) {
- if (start === null) start = length - 1;
+ if (start == null) start = length - 1;
return _Lists.lastIndexOf(this, element, start);
}
- SVGAnimatedLength last() => this[length - 1];
+ SVGAnimatedLength get last => this[length - 1];
SVGAnimatedLength removeLast() {
- throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+ throw new UnsupportedError("Cannot removeLast on immutable List.");
}
void setRange(int start, int rangeLength, List<SVGAnimatedLength> from, [int startFrom]) {
- throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+ throw new UnsupportedError("Cannot setRange on immutable List.");
}
void removeRange(int start, int rangeLength) {
- throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+ throw new UnsupportedError("Cannot removeRange on immutable List.");
}
void insertRange(int start, int rangeLength, [SVGAnimatedLength initialValue]) {
- throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+ throw new UnsupportedError("Cannot insertRange on immutable List.");
}
List<SVGAnimatedLength> getRange(int start, int rangeLength) =>
@@ -24485,7 +24575,7 @@
abstract class SVGAnimatedNumber {
/** @domName SVGAnimatedNumber.animVal */
- abstract num get animVal;
+ num get animVal;
/** @domName SVGAnimatedNumber.baseVal */
num baseVal;
@@ -24507,10 +24597,10 @@
abstract class SVGAnimatedNumberList implements List<SVGAnimatedNumber> {
/** @domName SVGAnimatedNumberList.animVal */
- abstract SVGNumberList get animVal;
+ SVGNumberList get animVal;
/** @domName SVGAnimatedNumberList.baseVal */
- abstract SVGNumberList get baseVal;
+ SVGNumberList get baseVal;
}
class _SVGAnimatedNumberListImpl implements SVGAnimatedNumberList, JavaScriptIndexingBehavior native "*SVGAnimatedNumberList" {
@@ -24522,7 +24612,7 @@
_SVGAnimatedNumberImpl operator[](int index) => JS("_SVGAnimatedNumberImpl", "#[#]", this, index);
void operator[]=(int index, _SVGAnimatedNumberImpl value) {
- throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+ throw new UnsupportedError("Cannot assign element of immutable List.");
}
// -- start List<SVGAnimatedNumber> mixins.
// SVGAnimatedNumber is the element type.
@@ -24539,15 +24629,15 @@
// From Collection<SVGAnimatedNumber>:
void add(SVGAnimatedNumber value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addLast(SVGAnimatedNumber value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addAll(Collection<SVGAnimatedNumber> collection) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
bool contains(SVGAnimatedNumber element) => _Collections.contains(this, element);
@@ -24563,38 +24653,38 @@
bool some(bool f(SVGAnimatedNumber element)) => _Collections.some(this, f);
- bool isEmpty() => this.length == 0;
+ bool get isEmpty => this.length == 0;
// From List<SVGAnimatedNumber>:
void sort([Comparator<SVGAnimatedNumber> compare = Comparable.compare]) {
- throw const UnsupportedOperationException("Cannot sort immutable List.");
+ throw new UnsupportedError("Cannot sort immutable List.");
}
int indexOf(SVGAnimatedNumber element, [int start = 0]) =>
_Lists.indexOf(this, element, start, this.length);
int lastIndexOf(SVGAnimatedNumber element, [int start]) {
- if (start === null) start = length - 1;
+ if (start == null) start = length - 1;
return _Lists.lastIndexOf(this, element, start);
}
- SVGAnimatedNumber last() => this[length - 1];
+ SVGAnimatedNumber get last => this[length - 1];
SVGAnimatedNumber removeLast() {
- throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+ throw new UnsupportedError("Cannot removeLast on immutable List.");
}
void setRange(int start, int rangeLength, List<SVGAnimatedNumber> from, [int startFrom]) {
- throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+ throw new UnsupportedError("Cannot setRange on immutable List.");
}
void removeRange(int start, int rangeLength) {
- throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+ throw new UnsupportedError("Cannot removeRange on immutable List.");
}
void insertRange(int start, int rangeLength, [SVGAnimatedNumber initialValue]) {
- throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+ throw new UnsupportedError("Cannot insertRange on immutable List.");
}
List<SVGAnimatedNumber> getRange(int start, int rangeLength) =>
@@ -24612,10 +24702,10 @@
abstract class SVGAnimatedPreserveAspectRatio {
/** @domName SVGAnimatedPreserveAspectRatio.animVal */
- abstract SVGPreserveAspectRatio get animVal;
+ SVGPreserveAspectRatio get animVal;
/** @domName SVGAnimatedPreserveAspectRatio.baseVal */
- abstract SVGPreserveAspectRatio get baseVal;
+ SVGPreserveAspectRatio get baseVal;
}
class _SVGAnimatedPreserveAspectRatioImpl implements SVGAnimatedPreserveAspectRatio native "*SVGAnimatedPreserveAspectRatio" {
@@ -24634,10 +24724,10 @@
abstract class SVGAnimatedRect {
/** @domName SVGAnimatedRect.animVal */
- abstract SVGRect get animVal;
+ SVGRect get animVal;
/** @domName SVGAnimatedRect.baseVal */
- abstract SVGRect get baseVal;
+ SVGRect get baseVal;
}
class _SVGAnimatedRectImpl implements SVGAnimatedRect native "*SVGAnimatedRect" {
@@ -24656,7 +24746,7 @@
abstract class SVGAnimatedString {
/** @domName SVGAnimatedString.animVal */
- abstract String get animVal;
+ String get animVal;
/** @domName SVGAnimatedString.baseVal */
String baseVal;
@@ -24678,10 +24768,10 @@
abstract class SVGAnimatedTransformList implements List<SVGAnimateTransformElement> {
/** @domName SVGAnimatedTransformList.animVal */
- abstract SVGTransformList get animVal;
+ SVGTransformList get animVal;
/** @domName SVGAnimatedTransformList.baseVal */
- abstract SVGTransformList get baseVal;
+ SVGTransformList get baseVal;
}
class _SVGAnimatedTransformListImpl implements SVGAnimatedTransformList, JavaScriptIndexingBehavior native "*SVGAnimatedTransformList" {
@@ -24693,7 +24783,7 @@
_SVGAnimateTransformElementImpl operator[](int index) => JS("_SVGAnimateTransformElementImpl", "#[#]", this, index);
void operator[]=(int index, _SVGAnimateTransformElementImpl value) {
- throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+ throw new UnsupportedError("Cannot assign element of immutable List.");
}
// -- start List<SVGAnimateTransformElement> mixins.
// SVGAnimateTransformElement is the element type.
@@ -24710,15 +24800,15 @@
// From Collection<SVGAnimateTransformElement>:
void add(SVGAnimateTransformElement value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addLast(SVGAnimateTransformElement value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addAll(Collection<SVGAnimateTransformElement> collection) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
bool contains(SVGAnimateTransformElement element) => _Collections.contains(this, element);
@@ -24734,38 +24824,38 @@
bool some(bool f(SVGAnimateTransformElement element)) => _Collections.some(this, f);
- bool isEmpty() => this.length == 0;
+ bool get isEmpty => this.length == 0;
// From List<SVGAnimateTransformElement>:
void sort([Comparator<SVGAnimateTransformElement> compare = Comparable.compare]) {
- throw const UnsupportedOperationException("Cannot sort immutable List.");
+ throw new UnsupportedError("Cannot sort immutable List.");
}
int indexOf(SVGAnimateTransformElement element, [int start = 0]) =>
_Lists.indexOf(this, element, start, this.length);
int lastIndexOf(SVGAnimateTransformElement element, [int start]) {
- if (start === null) start = length - 1;
+ if (start == null) start = length - 1;
return _Lists.lastIndexOf(this, element, start);
}
- SVGAnimateTransformElement last() => this[length - 1];
+ SVGAnimateTransformElement get last => this[length - 1];
SVGAnimateTransformElement removeLast() {
- throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+ throw new UnsupportedError("Cannot removeLast on immutable List.");
}
void setRange(int start, int rangeLength, List<SVGAnimateTransformElement> from, [int startFrom]) {
- throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+ throw new UnsupportedError("Cannot setRange on immutable List.");
}
void removeRange(int start, int rangeLength) {
- throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+ throw new UnsupportedError("Cannot removeRange on immutable List.");
}
void insertRange(int start, int rangeLength, [SVGAnimateTransformElement initialValue]) {
- throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+ throw new UnsupportedError("Cannot insertRange on immutable List.");
}
List<SVGAnimateTransformElement> getRange(int start, int rangeLength) =>
@@ -24783,7 +24873,7 @@
abstract class SVGAnimationElement implements SVGElement, SVGTests, SVGExternalResourcesRequired, ElementTimeControl {
/** @domName SVGAnimationElement.targetElement */
- abstract SVGElement get targetElement;
+ SVGElement get targetElement;
/** @domName SVGAnimationElement.getCurrentTime */
num getCurrentTime();
@@ -24839,13 +24929,13 @@
abstract class SVGCircleElement implements SVGElement, SVGTests, SVGLangSpace, SVGExternalResourcesRequired, SVGStylable, SVGTransformable {
/** @domName SVGCircleElement.cx */
- abstract SVGAnimatedLength get cx;
+ SVGAnimatedLength get cx;
/** @domName SVGCircleElement.cy */
- abstract SVGAnimatedLength get cy;
+ SVGAnimatedLength get cy;
/** @domName SVGCircleElement.r */
- abstract SVGAnimatedLength get r;
+ SVGAnimatedLength get r;
}
class _SVGCircleElementImpl extends _SVGElementImpl implements SVGCircleElement native "*SVGCircleElement" {
@@ -24878,7 +24968,7 @@
// From SVGStylable
- _SVGAnimatedStringImpl get $dom_svgClassName() => JS("_SVGAnimatedStringImpl", "#.className", this);
+ _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
// Use implementation from Element.
// final _CSSStyleDeclarationImpl style;
@@ -24913,7 +25003,7 @@
abstract class SVGClipPathElement implements SVGElement, SVGTests, SVGLangSpace, SVGExternalResourcesRequired, SVGStylable, SVGTransformable {
/** @domName SVGClipPathElement.clipPathUnits */
- abstract SVGAnimatedEnumeration get clipPathUnits;
+ SVGAnimatedEnumeration get clipPathUnits;
}
class _SVGClipPathElementImpl extends _SVGElementImpl implements SVGClipPathElement native "*SVGClipPathElement" {
@@ -24942,7 +25032,7 @@
// From SVGStylable
- _SVGAnimatedStringImpl get $dom_svgClassName() => JS("_SVGAnimatedStringImpl", "#.className", this);
+ _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
// Use implementation from Element.
// final _CSSStyleDeclarationImpl style;
@@ -24985,10 +25075,10 @@
static const int SVG_COLORTYPE_UNKNOWN = 0;
/** @domName SVGColor.colorType */
- abstract int get colorType;
+ int get colorType;
/** @domName SVGColor.rgbColor */
- abstract RGBColor get rgbColor;
+ RGBColor get rgbColor;
/** @domName SVGColor.setColor */
void setColor(int colorType, String rgbColor, String iccColor);
@@ -25034,25 +25124,25 @@
static const int SVG_FECOMPONENTTRANSFER_TYPE_UNKNOWN = 0;
/** @domName SVGComponentTransferFunctionElement.amplitude */
- abstract SVGAnimatedNumber get amplitude;
+ SVGAnimatedNumber get amplitude;
/** @domName SVGComponentTransferFunctionElement.exponent */
- abstract SVGAnimatedNumber get exponent;
+ SVGAnimatedNumber get exponent;
/** @domName SVGComponentTransferFunctionElement.intercept */
- abstract SVGAnimatedNumber get intercept;
+ SVGAnimatedNumber get intercept;
/** @domName SVGComponentTransferFunctionElement.offset */
- abstract SVGAnimatedNumber get offset;
+ SVGAnimatedNumber get offset;
/** @domName SVGComponentTransferFunctionElement.slope */
- abstract SVGAnimatedNumber get slope;
+ SVGAnimatedNumber get slope;
/** @domName SVGComponentTransferFunctionElement.tableValues */
- abstract SVGAnimatedNumberList get tableValues;
+ SVGAnimatedNumberList get tableValues;
/** @domName SVGComponentTransferFunctionElement.type */
- abstract SVGAnimatedEnumeration get type;
+ SVGAnimatedEnumeration get type;
}
class _SVGComponentTransferFunctionElementImpl extends _SVGElementImpl implements SVGComponentTransferFunctionElement native "*SVGComponentTransferFunctionElement" {
@@ -25081,10 +25171,10 @@
abstract class SVGCursorElement implements SVGElement, SVGURIReference, SVGTests, SVGExternalResourcesRequired {
/** @domName SVGCursorElement.x */
- abstract SVGAnimatedLength get x;
+ SVGAnimatedLength get x;
/** @domName SVGCursorElement.y */
- abstract SVGAnimatedLength get y;
+ SVGAnimatedLength get y;
}
class _SVGCursorElementImpl extends _SVGElementImpl implements SVGCursorElement native "*SVGCursorElement" {
@@ -25145,7 +25235,7 @@
// From SVGStylable
- _SVGAnimatedStringImpl get $dom_svgClassName() => JS("_SVGAnimatedStringImpl", "#.className", this);
+ _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
// Use implementation from Element.
// final _CSSStyleDeclarationImpl style;
@@ -25190,7 +25280,7 @@
// From SVGStylable
- _SVGAnimatedStringImpl get $dom_svgClassName() => JS("_SVGAnimatedStringImpl", "#.className", this);
+ _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
// Use implementation from Element.
// final _CSSStyleDeclarationImpl style;
@@ -25207,7 +25297,7 @@
abstract class SVGDocument implements Document {
/** @domName SVGDocument.rootElement */
- abstract SVGSVGElement get rootElement;
+ SVGSVGElement get rootElement;
/** @domName SVGDocument.createEvent */
Event $dom_createEvent(String eventType);
@@ -25223,6 +25313,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.
+
/// @domName SVGElement
abstract class SVGElement implements Element {
@@ -25238,10 +25329,10 @@
String id;
/** @domName SVGElement.ownerSVGElement */
- abstract SVGSVGElement get ownerSVGElement;
+ SVGSVGElement get ownerSVGElement;
/** @domName SVGElement.viewportElement */
- abstract SVGElement get viewportElement;
+ SVGElement get viewportElement;
/** @domName SVGElement.xmlbase */
String xmlbase;
@@ -25263,7 +25354,7 @@
class _SVGElementImpl extends _ElementImpl implements SVGElement native "*SVGElement" {
CSSClassSet get classes {
- if (_cssClassSet === null) {
+ if (_cssClassSet == null) {
_cssClassSet = new _AttributeClassSet(_ptr);
}
return _cssClassSet;
@@ -25301,7 +25392,7 @@
// Shadowing definition.
- String get id() => JS("String", "#.id", this);
+ String get id => JS("String", "#.id", this);
void set id(String value) {
JS("void", "#.id = #", this, value);
@@ -25329,28 +25420,28 @@
SVGElementInstanceEvents get on;
/** @domName SVGElementInstance.childNodes */
- abstract List<SVGElementInstance> get childNodes;
+ List<SVGElementInstance> get childNodes;
/** @domName SVGElementInstance.correspondingElement */
- abstract SVGElement get correspondingElement;
+ SVGElement get correspondingElement;
/** @domName SVGElementInstance.correspondingUseElement */
- abstract SVGUseElement get correspondingUseElement;
+ SVGUseElement get correspondingUseElement;
/** @domName SVGElementInstance.firstChild */
- abstract SVGElementInstance get firstChild;
+ SVGElementInstance get firstChild;
/** @domName SVGElementInstance.lastChild */
- abstract SVGElementInstance get lastChild;
+ SVGElementInstance get lastChild;
/** @domName SVGElementInstance.nextSibling */
- abstract SVGElementInstance get nextSibling;
+ SVGElementInstance get nextSibling;
/** @domName SVGElementInstance.parentNode */
- abstract SVGElementInstance get parentNode;
+ SVGElementInstance get parentNode;
/** @domName SVGElementInstance.previousSibling */
- abstract SVGElementInstance get previousSibling;
+ SVGElementInstance get previousSibling;
}
abstract class SVGElementInstanceEvents implements Events {
@@ -25549,7 +25640,7 @@
_SVGElementInstanceImpl operator[](int index) => JS("_SVGElementInstanceImpl", "#[#]", this, index);
void operator[]=(int index, _SVGElementInstanceImpl value) {
- throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+ throw new UnsupportedError("Cannot assign element of immutable List.");
}
// -- start List<SVGElementInstance> mixins.
// SVGElementInstance is the element type.
@@ -25566,15 +25657,15 @@
// From Collection<SVGElementInstance>:
void add(SVGElementInstance value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addLast(SVGElementInstance value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addAll(Collection<SVGElementInstance> collection) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
bool contains(SVGElementInstance element) => _Collections.contains(this, element);
@@ -25590,38 +25681,38 @@
bool some(bool f(SVGElementInstance element)) => _Collections.some(this, f);
- bool isEmpty() => this.length == 0;
+ bool get isEmpty => this.length == 0;
// From List<SVGElementInstance>:
void sort([Comparator<SVGElementInstance> compare = Comparable.compare]) {
- throw const UnsupportedOperationException("Cannot sort immutable List.");
+ throw new UnsupportedError("Cannot sort immutable List.");
}
int indexOf(SVGElementInstance element, [int start = 0]) =>
_Lists.indexOf(this, element, start, this.length);
int lastIndexOf(SVGElementInstance element, [int start]) {
- if (start === null) start = length - 1;
+ if (start == null) start = length - 1;
return _Lists.lastIndexOf(this, element, start);
}
- SVGElementInstance last() => this[length - 1];
+ SVGElementInstance get last => this[length - 1];
SVGElementInstance removeLast() {
- throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+ throw new UnsupportedError("Cannot removeLast on immutable List.");
}
void setRange(int start, int rangeLength, List<SVGElementInstance> from, [int startFrom]) {
- throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+ throw new UnsupportedError("Cannot setRange on immutable List.");
}
void removeRange(int start, int rangeLength) {
- throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+ throw new UnsupportedError("Cannot removeRange on immutable List.");
}
void insertRange(int start, int rangeLength, [SVGElementInstance initialValue]) {
- throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+ throw new UnsupportedError("Cannot insertRange on immutable List.");
}
List<SVGElementInstance> getRange(int start, int rangeLength) =>
@@ -25641,16 +25732,16 @@
abstract class SVGEllipseElement implements SVGElement, SVGTests, SVGLangSpace, SVGExternalResourcesRequired, SVGStylable, SVGTransformable {
/** @domName SVGEllipseElement.cx */
- abstract SVGAnimatedLength get cx;
+ SVGAnimatedLength get cx;
/** @domName SVGEllipseElement.cy */
- abstract SVGAnimatedLength get cy;
+ SVGAnimatedLength get cy;
/** @domName SVGEllipseElement.rx */
- abstract SVGAnimatedLength get rx;
+ SVGAnimatedLength get rx;
/** @domName SVGEllipseElement.ry */
- abstract SVGAnimatedLength get ry;
+ SVGAnimatedLength get ry;
}
class _SVGEllipseElementImpl extends _SVGElementImpl implements SVGEllipseElement native "*SVGEllipseElement" {
@@ -25685,7 +25776,7 @@
// From SVGStylable
- _SVGAnimatedStringImpl get $dom_svgClassName() => JS("_SVGAnimatedStringImpl", "#.className", this);
+ _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
// Use implementation from Element.
// final _CSSStyleDeclarationImpl style;
@@ -25726,13 +25817,13 @@
static const int SVG_WRONG_TYPE_ERR = 0;
/** @domName SVGException.code */
- abstract int get code;
+ int get code;
/** @domName SVGException.message */
- abstract String get message;
+ String get message;
/** @domName SVGException.name */
- abstract String get name;
+ String get name;
/** @domName SVGException.toString */
String toString();
@@ -25758,7 +25849,7 @@
abstract class SVGExternalResourcesRequired {
/** @domName SVGExternalResourcesRequired.externalResourcesRequired */
- abstract SVGAnimatedBoolean get externalResourcesRequired;
+ SVGAnimatedBoolean get externalResourcesRequired;
}
// 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
@@ -25782,13 +25873,13 @@
static const int SVG_FEBLEND_MODE_UNKNOWN = 0;
/** @domName SVGFEBlendElement.in1 */
- abstract SVGAnimatedString get in1;
+ SVGAnimatedString get in1;
/** @domName SVGFEBlendElement.in2 */
- abstract SVGAnimatedString get in2;
+ SVGAnimatedString get in2;
/** @domName SVGFEBlendElement.mode */
- abstract SVGAnimatedEnumeration get mode;
+ SVGAnimatedEnumeration get mode;
}
class _SVGFEBlendElementImpl extends _SVGElementImpl implements SVGFEBlendElement native "*SVGFEBlendElement" {
@@ -25813,7 +25904,7 @@
// From SVGStylable
- _SVGAnimatedStringImpl get $dom_svgClassName() => JS("_SVGAnimatedStringImpl", "#.className", this);
+ _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
// Use implementation from Element.
// final _CSSStyleDeclarationImpl style;
@@ -25840,13 +25931,13 @@
static const int SVG_FECOLORMATRIX_TYPE_UNKNOWN = 0;
/** @domName SVGFEColorMatrixElement.in1 */
- abstract SVGAnimatedString get in1;
+ SVGAnimatedString get in1;
/** @domName SVGFEColorMatrixElement.type */
- abstract SVGAnimatedEnumeration get type;
+ SVGAnimatedEnumeration get type;
/** @domName SVGFEColorMatrixElement.values */
- abstract SVGAnimatedNumberList get values;
+ SVGAnimatedNumberList get values;
}
class _SVGFEColorMatrixElementImpl extends _SVGElementImpl implements SVGFEColorMatrixElement native "*SVGFEColorMatrixElement" {
@@ -25871,7 +25962,7 @@
// From SVGStylable
- _SVGAnimatedStringImpl get $dom_svgClassName() => JS("_SVGAnimatedStringImpl", "#.className", this);
+ _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
// Use implementation from Element.
// final _CSSStyleDeclarationImpl style;
@@ -25888,7 +25979,7 @@
abstract class SVGFEComponentTransferElement implements SVGElement, SVGFilterPrimitiveStandardAttributes {
/** @domName SVGFEComponentTransferElement.in1 */
- abstract SVGAnimatedString get in1;
+ SVGAnimatedString get in1;
}
class _SVGFEComponentTransferElementImpl extends _SVGElementImpl implements SVGFEComponentTransferElement native "*SVGFEComponentTransferElement" {
@@ -25909,7 +26000,7 @@
// From SVGStylable
- _SVGAnimatedStringImpl get $dom_svgClassName() => JS("_SVGAnimatedStringImpl", "#.className", this);
+ _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
// Use implementation from Element.
// final _CSSStyleDeclarationImpl style;
@@ -25940,25 +26031,25 @@
static const int SVG_FECOMPOSITE_OPERATOR_XOR = 5;
/** @domName SVGFECompositeElement.in1 */
- abstract SVGAnimatedString get in1;
+ SVGAnimatedString get in1;
/** @domName SVGFECompositeElement.in2 */
- abstract SVGAnimatedString get in2;
+ SVGAnimatedString get in2;
/** @domName SVGFECompositeElement.k1 */
- abstract SVGAnimatedNumber get k1;
+ SVGAnimatedNumber get k1;
/** @domName SVGFECompositeElement.k2 */
- abstract SVGAnimatedNumber get k2;
+ SVGAnimatedNumber get k2;
/** @domName SVGFECompositeElement.k3 */
- abstract SVGAnimatedNumber get k3;
+ SVGAnimatedNumber get k3;
/** @domName SVGFECompositeElement.k4 */
- abstract SVGAnimatedNumber get k4;
+ SVGAnimatedNumber get k4;
/** @domName SVGFECompositeElement.operator */
- abstract SVGAnimatedEnumeration get operator;
+ SVGAnimatedEnumeration get operator;
}
class _SVGFECompositeElementImpl extends _SVGElementImpl implements SVGFECompositeElement native "*SVGFECompositeElement" {
@@ -25991,7 +26082,7 @@
// From SVGStylable
- _SVGAnimatedStringImpl get $dom_svgClassName() => JS("_SVGAnimatedStringImpl", "#.className", this);
+ _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
// Use implementation from Element.
// final _CSSStyleDeclarationImpl style;
@@ -26016,40 +26107,40 @@
static const int SVG_EDGEMODE_WRAP = 2;
/** @domName SVGFEConvolveMatrixElement.bias */
- abstract SVGAnimatedNumber get bias;
+ SVGAnimatedNumber get bias;
/** @domName SVGFEConvolveMatrixElement.divisor */
- abstract SVGAnimatedNumber get divisor;
+ SVGAnimatedNumber get divisor;
/** @domName SVGFEConvolveMatrixElement.edgeMode */
- abstract SVGAnimatedEnumeration get edgeMode;
+ SVGAnimatedEnumeration get edgeMode;
/** @domName SVGFEConvolveMatrixElement.in1 */
- abstract SVGAnimatedString get in1;
+ SVGAnimatedString get in1;
/** @domName SVGFEConvolveMatrixElement.kernelMatrix */
- abstract SVGAnimatedNumberList get kernelMatrix;
+ SVGAnimatedNumberList get kernelMatrix;
/** @domName SVGFEConvolveMatrixElement.kernelUnitLengthX */
- abstract SVGAnimatedNumber get kernelUnitLengthX;
+ SVGAnimatedNumber get kernelUnitLengthX;
/** @domName SVGFEConvolveMatrixElement.kernelUnitLengthY */
- abstract SVGAnimatedNumber get kernelUnitLengthY;
+ SVGAnimatedNumber get kernelUnitLengthY;
/** @domName SVGFEConvolveMatrixElement.orderX */
- abstract SVGAnimatedInteger get orderX;
+ SVGAnimatedInteger get orderX;
/** @domName SVGFEConvolveMatrixElement.orderY */
- abstract SVGAnimatedInteger get orderY;
+ SVGAnimatedInteger get orderY;
/** @domName SVGFEConvolveMatrixElement.preserveAlpha */
- abstract SVGAnimatedBoolean get preserveAlpha;
+ SVGAnimatedBoolean get preserveAlpha;
/** @domName SVGFEConvolveMatrixElement.targetX */
- abstract SVGAnimatedInteger get targetX;
+ SVGAnimatedInteger get targetX;
/** @domName SVGFEConvolveMatrixElement.targetY */
- abstract SVGAnimatedInteger get targetY;
+ SVGAnimatedInteger get targetY;
}
class _SVGFEConvolveMatrixElementImpl extends _SVGElementImpl implements SVGFEConvolveMatrixElement native "*SVGFEConvolveMatrixElement" {
@@ -26092,7 +26183,7 @@
// From SVGStylable
- _SVGAnimatedStringImpl get $dom_svgClassName() => JS("_SVGAnimatedStringImpl", "#.className", this);
+ _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
// Use implementation from Element.
// final _CSSStyleDeclarationImpl style;
@@ -26109,19 +26200,19 @@
abstract class SVGFEDiffuseLightingElement implements SVGElement, SVGFilterPrimitiveStandardAttributes {
/** @domName SVGFEDiffuseLightingElement.diffuseConstant */
- abstract SVGAnimatedNumber get diffuseConstant;
+ SVGAnimatedNumber get diffuseConstant;
/** @domName SVGFEDiffuseLightingElement.in1 */
- abstract SVGAnimatedString get in1;
+ SVGAnimatedString get in1;
/** @domName SVGFEDiffuseLightingElement.kernelUnitLengthX */
- abstract SVGAnimatedNumber get kernelUnitLengthX;
+ SVGAnimatedNumber get kernelUnitLengthX;
/** @domName SVGFEDiffuseLightingElement.kernelUnitLengthY */
- abstract SVGAnimatedNumber get kernelUnitLengthY;
+ SVGAnimatedNumber get kernelUnitLengthY;
/** @domName SVGFEDiffuseLightingElement.surfaceScale */
- abstract SVGAnimatedNumber get surfaceScale;
+ SVGAnimatedNumber get surfaceScale;
}
class _SVGFEDiffuseLightingElementImpl extends _SVGElementImpl implements SVGFEDiffuseLightingElement native "*SVGFEDiffuseLightingElement" {
@@ -26150,7 +26241,7 @@
// From SVGStylable
- _SVGAnimatedStringImpl get $dom_svgClassName() => JS("_SVGAnimatedStringImpl", "#.className", this);
+ _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
// Use implementation from Element.
// final _CSSStyleDeclarationImpl style;
@@ -26177,19 +26268,19 @@
static const int SVG_CHANNEL_UNKNOWN = 0;
/** @domName SVGFEDisplacementMapElement.in1 */
- abstract SVGAnimatedString get in1;
+ SVGAnimatedString get in1;
/** @domName SVGFEDisplacementMapElement.in2 */
- abstract SVGAnimatedString get in2;
+ SVGAnimatedString get in2;
/** @domName SVGFEDisplacementMapElement.scale */
- abstract SVGAnimatedNumber get scale;
+ SVGAnimatedNumber get scale;
/** @domName SVGFEDisplacementMapElement.xChannelSelector */
- abstract SVGAnimatedEnumeration get xChannelSelector;
+ SVGAnimatedEnumeration get xChannelSelector;
/** @domName SVGFEDisplacementMapElement.yChannelSelector */
- abstract SVGAnimatedEnumeration get yChannelSelector;
+ SVGAnimatedEnumeration get yChannelSelector;
}
class _SVGFEDisplacementMapElementImpl extends _SVGElementImpl implements SVGFEDisplacementMapElement native "*SVGFEDisplacementMapElement" {
@@ -26218,7 +26309,7 @@
// From SVGStylable
- _SVGAnimatedStringImpl get $dom_svgClassName() => JS("_SVGAnimatedStringImpl", "#.className", this);
+ _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
// Use implementation from Element.
// final _CSSStyleDeclarationImpl style;
@@ -26235,10 +26326,10 @@
abstract class SVGFEDistantLightElement implements SVGElement {
/** @domName SVGFEDistantLightElement.azimuth */
- abstract SVGAnimatedNumber get azimuth;
+ SVGAnimatedNumber get azimuth;
/** @domName SVGFEDistantLightElement.elevation */
- abstract SVGAnimatedNumber get elevation;
+ SVGAnimatedNumber get elevation;
}
class _SVGFEDistantLightElementImpl extends _SVGElementImpl implements SVGFEDistantLightElement native "*SVGFEDistantLightElement" {
@@ -26257,19 +26348,19 @@
abstract class SVGFEDropShadowElement implements SVGElement, SVGFilterPrimitiveStandardAttributes {
/** @domName SVGFEDropShadowElement.dx */
- abstract SVGAnimatedNumber get dx;
+ SVGAnimatedNumber get dx;
/** @domName SVGFEDropShadowElement.dy */
- abstract SVGAnimatedNumber get dy;
+ SVGAnimatedNumber get dy;
/** @domName SVGFEDropShadowElement.in1 */
- abstract SVGAnimatedString get in1;
+ SVGAnimatedString get in1;
/** @domName SVGFEDropShadowElement.stdDeviationX */
- abstract SVGAnimatedNumber get stdDeviationX;
+ SVGAnimatedNumber get stdDeviationX;
/** @domName SVGFEDropShadowElement.stdDeviationY */
- abstract SVGAnimatedNumber get stdDeviationY;
+ SVGAnimatedNumber get stdDeviationY;
/** @domName SVGFEDropShadowElement.setStdDeviation */
void setStdDeviation(num stdDeviationX, num stdDeviationY);
@@ -26303,7 +26394,7 @@
// From SVGStylable
- _SVGAnimatedStringImpl get $dom_svgClassName() => JS("_SVGAnimatedStringImpl", "#.className", this);
+ _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
// Use implementation from Element.
// final _CSSStyleDeclarationImpl style;
@@ -26336,7 +26427,7 @@
// From SVGStylable
- _SVGAnimatedStringImpl get $dom_svgClassName() => JS("_SVGAnimatedStringImpl", "#.className", this);
+ _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
// Use implementation from Element.
// final _CSSStyleDeclarationImpl style;
@@ -26401,13 +26492,13 @@
abstract class SVGFEGaussianBlurElement implements SVGElement, SVGFilterPrimitiveStandardAttributes {
/** @domName SVGFEGaussianBlurElement.in1 */
- abstract SVGAnimatedString get in1;
+ SVGAnimatedString get in1;
/** @domName SVGFEGaussianBlurElement.stdDeviationX */
- abstract SVGAnimatedNumber get stdDeviationX;
+ SVGAnimatedNumber get stdDeviationX;
/** @domName SVGFEGaussianBlurElement.stdDeviationY */
- abstract SVGAnimatedNumber get stdDeviationY;
+ SVGAnimatedNumber get stdDeviationY;
/** @domName SVGFEGaussianBlurElement.setStdDeviation */
void setStdDeviation(num stdDeviationX, num stdDeviationY);
@@ -26437,7 +26528,7 @@
// From SVGStylable
- _SVGAnimatedStringImpl get $dom_svgClassName() => JS("_SVGAnimatedStringImpl", "#.className", this);
+ _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
// Use implementation from Element.
// final _CSSStyleDeclarationImpl style;
@@ -26454,7 +26545,7 @@
abstract class SVGFEImageElement implements SVGElement, SVGURIReference, SVGLangSpace, SVGExternalResourcesRequired, SVGFilterPrimitiveStandardAttributes {
/** @domName SVGFEImageElement.preserveAspectRatio */
- abstract SVGAnimatedPreserveAspectRatio get preserveAspectRatio;
+ SVGAnimatedPreserveAspectRatio get preserveAspectRatio;
}
class _SVGFEImageElementImpl extends _SVGElementImpl implements SVGFEImageElement native "*SVGFEImageElement" {
@@ -26489,7 +26580,7 @@
// From SVGStylable
- _SVGAnimatedStringImpl get $dom_svgClassName() => JS("_SVGAnimatedStringImpl", "#.className", this);
+ _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
// Use implementation from Element.
// final _CSSStyleDeclarationImpl style;
@@ -26522,7 +26613,7 @@
// From SVGStylable
- _SVGAnimatedStringImpl get $dom_svgClassName() => JS("_SVGAnimatedStringImpl", "#.className", this);
+ _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
// Use implementation from Element.
// final _CSSStyleDeclarationImpl style;
@@ -26539,7 +26630,7 @@
abstract class SVGFEMergeNodeElement implements SVGElement {
/** @domName SVGFEMergeNodeElement.in1 */
- abstract SVGAnimatedString get in1;
+ SVGAnimatedString get in1;
}
class _SVGFEMergeNodeElementImpl extends _SVGElementImpl implements SVGFEMergeNodeElement native "*SVGFEMergeNodeElement" {
@@ -26562,16 +26653,16 @@
static const int SVG_MORPHOLOGY_OPERATOR_UNKNOWN = 0;
/** @domName SVGFEMorphologyElement.in1 */
- abstract SVGAnimatedString get in1;
+ SVGAnimatedString get in1;
/** @domName SVGFEMorphologyElement.operator */
- abstract SVGAnimatedEnumeration get operator;
+ SVGAnimatedEnumeration get operator;
/** @domName SVGFEMorphologyElement.radiusX */
- abstract SVGAnimatedNumber get radiusX;
+ SVGAnimatedNumber get radiusX;
/** @domName SVGFEMorphologyElement.radiusY */
- abstract SVGAnimatedNumber get radiusY;
+ SVGAnimatedNumber get radiusY;
/** @domName SVGFEMorphologyElement.setRadius */
void setRadius(num radiusX, num radiusY);
@@ -26603,7 +26694,7 @@
// From SVGStylable
- _SVGAnimatedStringImpl get $dom_svgClassName() => JS("_SVGAnimatedStringImpl", "#.className", this);
+ _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
// Use implementation from Element.
// final _CSSStyleDeclarationImpl style;
@@ -26620,13 +26711,13 @@
abstract class SVGFEOffsetElement implements SVGElement, SVGFilterPrimitiveStandardAttributes {
/** @domName SVGFEOffsetElement.dx */
- abstract SVGAnimatedNumber get dx;
+ SVGAnimatedNumber get dx;
/** @domName SVGFEOffsetElement.dy */
- abstract SVGAnimatedNumber get dy;
+ SVGAnimatedNumber get dy;
/** @domName SVGFEOffsetElement.in1 */
- abstract SVGAnimatedString get in1;
+ SVGAnimatedString get in1;
}
class _SVGFEOffsetElementImpl extends _SVGElementImpl implements SVGFEOffsetElement native "*SVGFEOffsetElement" {
@@ -26651,7 +26742,7 @@
// From SVGStylable
- _SVGAnimatedStringImpl get $dom_svgClassName() => JS("_SVGAnimatedStringImpl", "#.className", this);
+ _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
// Use implementation from Element.
// final _CSSStyleDeclarationImpl style;
@@ -26668,13 +26759,13 @@
abstract class SVGFEPointLightElement implements SVGElement {
/** @domName SVGFEPointLightElement.x */
- abstract SVGAnimatedNumber get x;
+ SVGAnimatedNumber get x;
/** @domName SVGFEPointLightElement.y */
- abstract SVGAnimatedNumber get y;
+ SVGAnimatedNumber get y;
/** @domName SVGFEPointLightElement.z */
- abstract SVGAnimatedNumber get z;
+ SVGAnimatedNumber get z;
}
class _SVGFEPointLightElementImpl extends _SVGElementImpl implements SVGFEPointLightElement native "*SVGFEPointLightElement" {
@@ -26695,16 +26786,16 @@
abstract class SVGFESpecularLightingElement implements SVGElement, SVGFilterPrimitiveStandardAttributes {
/** @domName SVGFESpecularLightingElement.in1 */
- abstract SVGAnimatedString get in1;
+ SVGAnimatedString get in1;
/** @domName SVGFESpecularLightingElement.specularConstant */
- abstract SVGAnimatedNumber get specularConstant;
+ SVGAnimatedNumber get specularConstant;
/** @domName SVGFESpecularLightingElement.specularExponent */
- abstract SVGAnimatedNumber get specularExponent;
+ SVGAnimatedNumber get specularExponent;
/** @domName SVGFESpecularLightingElement.surfaceScale */
- abstract SVGAnimatedNumber get surfaceScale;
+ SVGAnimatedNumber get surfaceScale;
}
class _SVGFESpecularLightingElementImpl extends _SVGElementImpl implements SVGFESpecularLightingElement native "*SVGFESpecularLightingElement" {
@@ -26731,7 +26822,7 @@
// From SVGStylable
- _SVGAnimatedStringImpl get $dom_svgClassName() => JS("_SVGAnimatedStringImpl", "#.className", this);
+ _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
// Use implementation from Element.
// final _CSSStyleDeclarationImpl style;
@@ -26748,28 +26839,28 @@
abstract class SVGFESpotLightElement implements SVGElement {
/** @domName SVGFESpotLightElement.limitingConeAngle */
- abstract SVGAnimatedNumber get limitingConeAngle;
+ SVGAnimatedNumber get limitingConeAngle;
/** @domName SVGFESpotLightElement.pointsAtX */
- abstract SVGAnimatedNumber get pointsAtX;
+ SVGAnimatedNumber get pointsAtX;
/** @domName SVGFESpotLightElement.pointsAtY */
- abstract SVGAnimatedNumber get pointsAtY;
+ SVGAnimatedNumber get pointsAtY;
/** @domName SVGFESpotLightElement.pointsAtZ */
- abstract SVGAnimatedNumber get pointsAtZ;
+ SVGAnimatedNumber get pointsAtZ;
/** @domName SVGFESpotLightElement.specularExponent */
- abstract SVGAnimatedNumber get specularExponent;
+ SVGAnimatedNumber get specularExponent;
/** @domName SVGFESpotLightElement.x */
- abstract SVGAnimatedNumber get x;
+ SVGAnimatedNumber get x;
/** @domName SVGFESpotLightElement.y */
- abstract SVGAnimatedNumber get y;
+ SVGAnimatedNumber get y;
/** @domName SVGFESpotLightElement.z */
- abstract SVGAnimatedNumber get z;
+ SVGAnimatedNumber get z;
}
class _SVGFESpotLightElementImpl extends _SVGElementImpl implements SVGFESpotLightElement native "*SVGFESpotLightElement" {
@@ -26800,7 +26891,7 @@
abstract class SVGFETileElement implements SVGElement, SVGFilterPrimitiveStandardAttributes {
/** @domName SVGFETileElement.in1 */
- abstract SVGAnimatedString get in1;
+ SVGAnimatedString get in1;
}
class _SVGFETileElementImpl extends _SVGElementImpl implements SVGFETileElement native "*SVGFETileElement" {
@@ -26821,7 +26912,7 @@
// From SVGStylable
- _SVGAnimatedStringImpl get $dom_svgClassName() => JS("_SVGAnimatedStringImpl", "#.className", this);
+ _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
// Use implementation from Element.
// final _CSSStyleDeclarationImpl style;
@@ -26850,22 +26941,22 @@
static const int SVG_TURBULENCE_TYPE_UNKNOWN = 0;
/** @domName SVGFETurbulenceElement.baseFrequencyX */
- abstract SVGAnimatedNumber get baseFrequencyX;
+ SVGAnimatedNumber get baseFrequencyX;
/** @domName SVGFETurbulenceElement.baseFrequencyY */
- abstract SVGAnimatedNumber get baseFrequencyY;
+ SVGAnimatedNumber get baseFrequencyY;
/** @domName SVGFETurbulenceElement.numOctaves */
- abstract SVGAnimatedInteger get numOctaves;
+ SVGAnimatedInteger get numOctaves;
/** @domName SVGFETurbulenceElement.seed */
- abstract SVGAnimatedNumber get seed;
+ SVGAnimatedNumber get seed;
/** @domName SVGFETurbulenceElement.stitchTiles */
- abstract SVGAnimatedEnumeration get stitchTiles;
+ SVGAnimatedEnumeration get stitchTiles;
/** @domName SVGFETurbulenceElement.type */
- abstract SVGAnimatedEnumeration get type;
+ SVGAnimatedEnumeration get type;
}
class _SVGFETurbulenceElementImpl extends _SVGElementImpl implements SVGFETurbulenceElement native "*SVGFETurbulenceElement" {
@@ -26896,7 +26987,7 @@
// From SVGStylable
- _SVGAnimatedStringImpl get $dom_svgClassName() => JS("_SVGAnimatedStringImpl", "#.className", this);
+ _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
// Use implementation from Element.
// final _CSSStyleDeclarationImpl style;
@@ -26913,28 +27004,28 @@
abstract class SVGFilterElement implements SVGElement, SVGURIReference, SVGLangSpace, SVGExternalResourcesRequired, SVGStylable {
/** @domName SVGFilterElement.filterResX */
- abstract SVGAnimatedInteger get filterResX;
+ SVGAnimatedInteger get filterResX;
/** @domName SVGFilterElement.filterResY */
- abstract SVGAnimatedInteger get filterResY;
+ SVGAnimatedInteger get filterResY;
/** @domName SVGFilterElement.filterUnits */
- abstract SVGAnimatedEnumeration get filterUnits;
+ SVGAnimatedEnumeration get filterUnits;
/** @domName SVGFilterElement.height */
- abstract SVGAnimatedLength get height;
+ SVGAnimatedLength get height;
/** @domName SVGFilterElement.primitiveUnits */
- abstract SVGAnimatedEnumeration get primitiveUnits;
+ SVGAnimatedEnumeration get primitiveUnits;
/** @domName SVGFilterElement.width */
- abstract SVGAnimatedLength get width;
+ SVGAnimatedLength get width;
/** @domName SVGFilterElement.x */
- abstract SVGAnimatedLength get x;
+ SVGAnimatedLength get x;
/** @domName SVGFilterElement.y */
- abstract SVGAnimatedLength get y;
+ SVGAnimatedLength get y;
/** @domName SVGFilterElement.setFilterRes */
void setFilterRes(int filterResX, int filterResY);
@@ -26976,7 +27067,7 @@
// From SVGStylable
- _SVGAnimatedStringImpl get $dom_svgClassName() => JS("_SVGAnimatedStringImpl", "#.className", this);
+ _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
// Use implementation from Element.
// final _CSSStyleDeclarationImpl style;
@@ -26993,19 +27084,19 @@
abstract class SVGFilterPrimitiveStandardAttributes implements SVGStylable {
/** @domName SVGFilterPrimitiveStandardAttributes.height */
- abstract SVGAnimatedLength get height;
+ SVGAnimatedLength get height;
/** @domName SVGFilterPrimitiveStandardAttributes.result */
- abstract SVGAnimatedString get result;
+ SVGAnimatedString get result;
/** @domName SVGFilterPrimitiveStandardAttributes.width */
- abstract SVGAnimatedLength get width;
+ SVGAnimatedLength get width;
/** @domName SVGFilterPrimitiveStandardAttributes.x */
- abstract SVGAnimatedLength get x;
+ SVGAnimatedLength get x;
/** @domName SVGFilterPrimitiveStandardAttributes.y */
- abstract SVGAnimatedLength get y;
+ SVGAnimatedLength get y;
}
// 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
@@ -27017,10 +27108,10 @@
abstract class SVGFitToViewBox {
/** @domName SVGFitToViewBox.preserveAspectRatio */
- abstract SVGAnimatedPreserveAspectRatio get preserveAspectRatio;
+ SVGAnimatedPreserveAspectRatio get preserveAspectRatio;
/** @domName SVGFitToViewBox.viewBox */
- abstract SVGAnimatedRect get viewBox;
+ SVGAnimatedRect get viewBox;
}
// 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
@@ -27104,16 +27195,16 @@
abstract class SVGForeignObjectElement implements SVGElement, SVGTests, SVGLangSpace, SVGExternalResourcesRequired, SVGStylable, SVGTransformable {
/** @domName SVGForeignObjectElement.height */
- abstract SVGAnimatedLength get height;
+ SVGAnimatedLength get height;
/** @domName SVGForeignObjectElement.width */
- abstract SVGAnimatedLength get width;
+ SVGAnimatedLength get width;
/** @domName SVGForeignObjectElement.x */
- abstract SVGAnimatedLength get x;
+ SVGAnimatedLength get x;
/** @domName SVGForeignObjectElement.y */
- abstract SVGAnimatedLength get y;
+ SVGAnimatedLength get y;
}
class _SVGForeignObjectElementImpl extends _SVGElementImpl implements SVGForeignObjectElement native "*SVGForeignObjectElement" {
@@ -27148,7 +27239,7 @@
// From SVGStylable
- _SVGAnimatedStringImpl get $dom_svgClassName() => JS("_SVGAnimatedStringImpl", "#.className", this);
+ _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
// Use implementation from Element.
// final _CSSStyleDeclarationImpl style;
@@ -27207,7 +27298,7 @@
// From SVGStylable
- _SVGAnimatedStringImpl get $dom_svgClassName() => JS("_SVGAnimatedStringImpl", "#.className", this);
+ _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
// Use implementation from Element.
// final _CSSStyleDeclarationImpl style;
@@ -27292,7 +27383,7 @@
// From SVGStylable
- _SVGAnimatedStringImpl get $dom_svgClassName() => JS("_SVGAnimatedStringImpl", "#.className", this);
+ _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
// Use implementation from Element.
// final _CSSStyleDeclarationImpl style;
@@ -27317,13 +27408,13 @@
static const int SVG_SPREADMETHOD_UNKNOWN = 0;
/** @domName SVGGradientElement.gradientTransform */
- abstract SVGAnimatedTransformList get gradientTransform;
+ SVGAnimatedTransformList get gradientTransform;
/** @domName SVGGradientElement.gradientUnits */
- abstract SVGAnimatedEnumeration get gradientUnits;
+ SVGAnimatedEnumeration get gradientUnits;
/** @domName SVGGradientElement.spreadMethod */
- abstract SVGAnimatedEnumeration get spreadMethod;
+ SVGAnimatedEnumeration get spreadMethod;
}
class _SVGGradientElementImpl extends _SVGElementImpl implements SVGGradientElement native "*SVGGradientElement" {
@@ -27344,7 +27435,7 @@
// From SVGStylable
- _SVGAnimatedStringImpl get $dom_svgClassName() => JS("_SVGAnimatedStringImpl", "#.className", this);
+ _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
// Use implementation from Element.
// final _CSSStyleDeclarationImpl style;
@@ -27373,19 +27464,19 @@
abstract class SVGImageElement implements SVGElement, SVGURIReference, SVGTests, SVGLangSpace, SVGExternalResourcesRequired, SVGStylable, SVGTransformable {
/** @domName SVGImageElement.height */
- abstract SVGAnimatedLength get height;
+ SVGAnimatedLength get height;
/** @domName SVGImageElement.preserveAspectRatio */
- abstract SVGAnimatedPreserveAspectRatio get preserveAspectRatio;
+ SVGAnimatedPreserveAspectRatio get preserveAspectRatio;
/** @domName SVGImageElement.width */
- abstract SVGAnimatedLength get width;
+ SVGAnimatedLength get width;
/** @domName SVGImageElement.x */
- abstract SVGAnimatedLength get x;
+ SVGAnimatedLength get x;
/** @domName SVGImageElement.y */
- abstract SVGAnimatedLength get y;
+ SVGAnimatedLength get y;
}
class _SVGImageElementImpl extends _SVGElementImpl implements SVGImageElement native "*SVGImageElement" {
@@ -27426,7 +27517,7 @@
// From SVGStylable
- _SVGAnimatedStringImpl get $dom_svgClassName() => JS("_SVGAnimatedStringImpl", "#.className", this);
+ _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
// Use implementation from Element.
// final _CSSStyleDeclarationImpl style;
@@ -27498,7 +27589,7 @@
static const int SVG_LENGTHTYPE_UNKNOWN = 0;
/** @domName SVGLength.unitType */
- abstract int get unitType;
+ int get unitType;
/** @domName SVGLength.value */
num value;
@@ -27540,7 +27631,7 @@
abstract class SVGLengthList implements List<SVGLength> {
/** @domName SVGLengthList.numberOfItems */
- abstract int get numberOfItems;
+ int get numberOfItems;
/** @domName SVGLengthList.appendItem */
SVGLength appendItem(SVGLength item);
@@ -27571,7 +27662,7 @@
_SVGLengthImpl operator[](int index) => JS("_SVGLengthImpl", "#[#]", this, index);
void operator[]=(int index, _SVGLengthImpl value) {
- throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+ throw new UnsupportedError("Cannot assign element of immutable List.");
}
// -- start List<SVGLength> mixins.
// SVGLength is the element type.
@@ -27588,15 +27679,15 @@
// From Collection<SVGLength>:
void add(SVGLength value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addLast(SVGLength value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addAll(Collection<SVGLength> collection) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
bool contains(SVGLength element) => _Collections.contains(this, element);
@@ -27612,38 +27703,38 @@
bool some(bool f(SVGLength element)) => _Collections.some(this, f);
- bool isEmpty() => this.length == 0;
+ bool get isEmpty => this.length == 0;
// From List<SVGLength>:
void sort([Comparator<SVGLength> compare = Comparable.compare]) {
- throw const UnsupportedOperationException("Cannot sort immutable List.");
+ throw new UnsupportedError("Cannot sort immutable List.");
}
int indexOf(SVGLength element, [int start = 0]) =>
_Lists.indexOf(this, element, start, this.length);
int lastIndexOf(SVGLength element, [int start]) {
- if (start === null) start = length - 1;
+ if (start == null) start = length - 1;
return _Lists.lastIndexOf(this, element, start);
}
- SVGLength last() => this[length - 1];
+ SVGLength get last => this[length - 1];
SVGLength removeLast() {
- throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+ throw new UnsupportedError("Cannot removeLast on immutable List.");
}
void setRange(int start, int rangeLength, List<SVGLength> from, [int startFrom]) {
- throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+ throw new UnsupportedError("Cannot setRange on immutable List.");
}
void removeRange(int start, int rangeLength) {
- throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+ throw new UnsupportedError("Cannot removeRange on immutable List.");
}
void insertRange(int start, int rangeLength, [SVGLength initialValue]) {
- throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+ throw new UnsupportedError("Cannot insertRange on immutable List.");
}
List<SVGLength> getRange(int start, int rangeLength) =>
@@ -27675,16 +27766,16 @@
abstract class SVGLineElement implements SVGElement, SVGTests, SVGLangSpace, SVGExternalResourcesRequired, SVGStylable, SVGTransformable {
/** @domName SVGLineElement.x1 */
- abstract SVGAnimatedLength get x1;
+ SVGAnimatedLength get x1;
/** @domName SVGLineElement.x2 */
- abstract SVGAnimatedLength get x2;
+ SVGAnimatedLength get x2;
/** @domName SVGLineElement.y1 */
- abstract SVGAnimatedLength get y1;
+ SVGAnimatedLength get y1;
/** @domName SVGLineElement.y2 */
- abstract SVGAnimatedLength get y2;
+ SVGAnimatedLength get y2;
}
class _SVGLineElementImpl extends _SVGElementImpl implements SVGLineElement native "*SVGLineElement" {
@@ -27719,7 +27810,7 @@
// From SVGStylable
- _SVGAnimatedStringImpl get $dom_svgClassName() => JS("_SVGAnimatedStringImpl", "#.className", this);
+ _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
// Use implementation from Element.
// final _CSSStyleDeclarationImpl style;
@@ -27754,16 +27845,16 @@
abstract class SVGLinearGradientElement implements SVGGradientElement {
/** @domName SVGLinearGradientElement.x1 */
- abstract SVGAnimatedLength get x1;
+ SVGAnimatedLength get x1;
/** @domName SVGLinearGradientElement.x2 */
- abstract SVGAnimatedLength get x2;
+ SVGAnimatedLength get x2;
/** @domName SVGLinearGradientElement.y1 */
- abstract SVGAnimatedLength get y1;
+ SVGAnimatedLength get y1;
/** @domName SVGLinearGradientElement.y2 */
- abstract SVGAnimatedLength get y2;
+ SVGAnimatedLength get y2;
}
class _SVGLinearGradientElementImpl extends _SVGGradientElementImpl implements SVGLinearGradientElement native "*SVGLinearGradientElement" {
@@ -27786,10 +27877,10 @@
abstract class SVGLocatable {
/** @domName SVGLocatable.farthestViewportElement */
- abstract SVGElement get farthestViewportElement;
+ SVGElement get farthestViewportElement;
/** @domName SVGLocatable.nearestViewportElement */
- abstract SVGElement get nearestViewportElement;
+ SVGElement get nearestViewportElement;
/** @domName SVGLocatable.getBBox */
SVGRect getBBox();
@@ -27845,25 +27936,25 @@
static const int SVG_MARKER_ORIENT_UNKNOWN = 0;
/** @domName SVGMarkerElement.markerHeight */
- abstract SVGAnimatedLength get markerHeight;
+ SVGAnimatedLength get markerHeight;
/** @domName SVGMarkerElement.markerUnits */
- abstract SVGAnimatedEnumeration get markerUnits;
+ SVGAnimatedEnumeration get markerUnits;
/** @domName SVGMarkerElement.markerWidth */
- abstract SVGAnimatedLength get markerWidth;
+ SVGAnimatedLength get markerWidth;
/** @domName SVGMarkerElement.orientAngle */
- abstract SVGAnimatedAngle get orientAngle;
+ SVGAnimatedAngle get orientAngle;
/** @domName SVGMarkerElement.orientType */
- abstract SVGAnimatedEnumeration get orientType;
+ SVGAnimatedEnumeration get orientType;
/** @domName SVGMarkerElement.refX */
- abstract SVGAnimatedLength get refX;
+ SVGAnimatedLength get refX;
/** @domName SVGMarkerElement.refY */
- abstract SVGAnimatedLength get refY;
+ SVGAnimatedLength get refY;
/** @domName SVGMarkerElement.setOrientToAngle */
void setOrientToAngle(SVGAngle angle);
@@ -27904,7 +27995,7 @@
// From SVGStylable
- _SVGAnimatedStringImpl get $dom_svgClassName() => JS("_SVGAnimatedStringImpl", "#.className", this);
+ _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
// Use implementation from Element.
// final _CSSStyleDeclarationImpl style;
@@ -27927,22 +28018,22 @@
abstract class SVGMaskElement implements SVGElement, SVGTests, SVGLangSpace, SVGExternalResourcesRequired, SVGStylable {
/** @domName SVGMaskElement.height */
- abstract SVGAnimatedLength get height;
+ SVGAnimatedLength get height;
/** @domName SVGMaskElement.maskContentUnits */
- abstract SVGAnimatedEnumeration get maskContentUnits;
+ SVGAnimatedEnumeration get maskContentUnits;
/** @domName SVGMaskElement.maskUnits */
- abstract SVGAnimatedEnumeration get maskUnits;
+ SVGAnimatedEnumeration get maskUnits;
/** @domName SVGMaskElement.width */
- abstract SVGAnimatedLength get width;
+ SVGAnimatedLength get width;
/** @domName SVGMaskElement.x */
- abstract SVGAnimatedLength get x;
+ SVGAnimatedLength get x;
/** @domName SVGMaskElement.y */
- abstract SVGAnimatedLength get y;
+ SVGAnimatedLength get y;
}
class _SVGMaskElementImpl extends _SVGElementImpl implements SVGMaskElement native "*SVGMaskElement" {
@@ -27981,7 +28072,7 @@
// From SVGStylable
- _SVGAnimatedStringImpl get $dom_svgClassName() => JS("_SVGAnimatedStringImpl", "#.className", this);
+ _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
// Use implementation from Element.
// final _CSSStyleDeclarationImpl style;
@@ -28136,7 +28227,7 @@
abstract class SVGNumberList implements List<SVGNumber> {
/** @domName SVGNumberList.numberOfItems */
- abstract int get numberOfItems;
+ int get numberOfItems;
/** @domName SVGNumberList.appendItem */
SVGNumber appendItem(SVGNumber item);
@@ -28167,7 +28258,7 @@
_SVGNumberImpl operator[](int index) => JS("_SVGNumberImpl", "#[#]", this, index);
void operator[]=(int index, _SVGNumberImpl value) {
- throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+ throw new UnsupportedError("Cannot assign element of immutable List.");
}
// -- start List<SVGNumber> mixins.
// SVGNumber is the element type.
@@ -28184,15 +28275,15 @@
// From Collection<SVGNumber>:
void add(SVGNumber value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addLast(SVGNumber value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addAll(Collection<SVGNumber> collection) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
bool contains(SVGNumber element) => _Collections.contains(this, element);
@@ -28208,38 +28299,38 @@
bool some(bool f(SVGNumber element)) => _Collections.some(this, f);
- bool isEmpty() => this.length == 0;
+ bool get isEmpty => this.length == 0;
// From List<SVGNumber>:
void sort([Comparator<SVGNumber> compare = Comparable.compare]) {
- throw const UnsupportedOperationException("Cannot sort immutable List.");
+ throw new UnsupportedError("Cannot sort immutable List.");
}
int indexOf(SVGNumber element, [int start = 0]) =>
_Lists.indexOf(this, element, start, this.length);
int lastIndexOf(SVGNumber element, [int start]) {
- if (start === null) start = length - 1;
+ if (start == null) start = length - 1;
return _Lists.lastIndexOf(this, element, start);
}
- SVGNumber last() => this[length - 1];
+ SVGNumber get last => this[length - 1];
SVGNumber removeLast() {
- throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+ throw new UnsupportedError("Cannot removeLast on immutable List.");
}
void setRange(int start, int rangeLength, List<SVGNumber> from, [int startFrom]) {
- throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+ throw new UnsupportedError("Cannot setRange on immutable List.");
}
void removeRange(int start, int rangeLength) {
- throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+ throw new UnsupportedError("Cannot removeRange on immutable List.");
}
void insertRange(int start, int rangeLength, [SVGNumber initialValue]) {
- throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+ throw new UnsupportedError("Cannot insertRange on immutable List.");
}
List<SVGNumber> getRange(int start, int rangeLength) =>
@@ -28291,10 +28382,10 @@
static const int SVG_PAINTTYPE_URI_RGBCOLOR_ICCCOLOR = 106;
/** @domName SVGPaint.paintType */
- abstract int get paintType;
+ int get paintType;
/** @domName SVGPaint.uri */
- abstract String get uri;
+ String get uri;
/** @domName SVGPaint.setPaint */
void setPaint(int paintType, String uri, String rgbColor, String iccColor);
@@ -28323,19 +28414,19 @@
abstract class SVGPathElement implements SVGElement, SVGTests, SVGLangSpace, SVGExternalResourcesRequired, SVGStylable, SVGTransformable {
/** @domName SVGPathElement.animatedNormalizedPathSegList */
- abstract SVGPathSegList get animatedNormalizedPathSegList;
+ SVGPathSegList get animatedNormalizedPathSegList;
/** @domName SVGPathElement.animatedPathSegList */
- abstract SVGPathSegList get animatedPathSegList;
+ SVGPathSegList get animatedPathSegList;
/** @domName SVGPathElement.normalizedPathSegList */
- abstract SVGPathSegList get normalizedPathSegList;
+ SVGPathSegList get normalizedPathSegList;
/** @domName SVGPathElement.pathLength */
- abstract SVGAnimatedNumber get pathLength;
+ SVGAnimatedNumber get pathLength;
/** @domName SVGPathElement.pathSegList */
- abstract SVGPathSegList get pathSegList;
+ SVGPathSegList get pathSegList;
/** @domName SVGPathElement.createSVGPathSegArcAbs */
SVGPathSegArcAbs createSVGPathSegArcAbs(num x, num y, num r1, num r2, num angle, bool largeArcFlag, bool sweepFlag);
@@ -28482,7 +28573,7 @@
// From SVGStylable
- _SVGAnimatedStringImpl get $dom_svgClassName() => JS("_SVGAnimatedStringImpl", "#.className", this);
+ _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
// Use implementation from Element.
// final _CSSStyleDeclarationImpl style;
@@ -28557,10 +28648,10 @@
static const int PATHSEG_UNKNOWN = 0;
/** @domName SVGPathSeg.pathSegType */
- abstract int get pathSegType;
+ int get pathSegType;
/** @domName SVGPathSeg.pathSegTypeAsLetter */
- abstract String get pathSegTypeAsLetter;
+ String get pathSegTypeAsLetter;
}
// 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
@@ -29053,7 +29144,7 @@
abstract class SVGPathSegList implements List<SVGPathSeg> {
/** @domName SVGPathSegList.numberOfItems */
- abstract int get numberOfItems;
+ int get numberOfItems;
/** @domName SVGPathSegList.appendItem */
SVGPathSeg appendItem(SVGPathSeg newItem);
@@ -29084,7 +29175,7 @@
_SVGPathSegImpl operator[](int index) => JS("_SVGPathSegImpl", "#[#]", this, index);
void operator[]=(int index, _SVGPathSegImpl value) {
- throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+ throw new UnsupportedError("Cannot assign element of immutable List.");
}
// -- start List<SVGPathSeg> mixins.
// SVGPathSeg is the element type.
@@ -29101,15 +29192,15 @@
// From Collection<SVGPathSeg>:
void add(SVGPathSeg value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addLast(SVGPathSeg value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addAll(Collection<SVGPathSeg> collection) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
bool contains(SVGPathSeg element) => _Collections.contains(this, element);
@@ -29125,38 +29216,38 @@
bool some(bool f(SVGPathSeg element)) => _Collections.some(this, f);
- bool isEmpty() => this.length == 0;
+ bool get isEmpty => this.length == 0;
// From List<SVGPathSeg>:
void sort([Comparator<SVGPathSeg> compare = Comparable.compare]) {
- throw const UnsupportedOperationException("Cannot sort immutable List.");
+ throw new UnsupportedError("Cannot sort immutable List.");
}
int indexOf(SVGPathSeg element, [int start = 0]) =>
_Lists.indexOf(this, element, start, this.length);
int lastIndexOf(SVGPathSeg element, [int start]) {
- if (start === null) start = length - 1;
+ if (start == null) start = length - 1;
return _Lists.lastIndexOf(this, element, start);
}
- SVGPathSeg last() => this[length - 1];
+ SVGPathSeg get last => this[length - 1];
SVGPathSeg removeLast() {
- throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+ throw new UnsupportedError("Cannot removeLast on immutable List.");
}
void setRange(int start, int rangeLength, List<SVGPathSeg> from, [int startFrom]) {
- throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+ throw new UnsupportedError("Cannot setRange on immutable List.");
}
void removeRange(int start, int rangeLength) {
- throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+ throw new UnsupportedError("Cannot removeRange on immutable List.");
}
void insertRange(int start, int rangeLength, [SVGPathSeg initialValue]) {
- throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+ throw new UnsupportedError("Cannot insertRange on immutable List.");
}
List<SVGPathSeg> getRange(int start, int rangeLength) =>
@@ -29232,25 +29323,25 @@
abstract class SVGPatternElement implements SVGElement, SVGURIReference, SVGTests, SVGLangSpace, SVGExternalResourcesRequired, SVGStylable, SVGFitToViewBox {
/** @domName SVGPatternElement.height */
- abstract SVGAnimatedLength get height;
+ SVGAnimatedLength get height;
/** @domName SVGPatternElement.patternContentUnits */
- abstract SVGAnimatedEnumeration get patternContentUnits;
+ SVGAnimatedEnumeration get patternContentUnits;
/** @domName SVGPatternElement.patternTransform */
- abstract SVGAnimatedTransformList get patternTransform;
+ SVGAnimatedTransformList get patternTransform;
/** @domName SVGPatternElement.patternUnits */
- abstract SVGAnimatedEnumeration get patternUnits;
+ SVGAnimatedEnumeration get patternUnits;
/** @domName SVGPatternElement.width */
- abstract SVGAnimatedLength get width;
+ SVGAnimatedLength get width;
/** @domName SVGPatternElement.x */
- abstract SVGAnimatedLength get x;
+ SVGAnimatedLength get x;
/** @domName SVGPatternElement.y */
- abstract SVGAnimatedLength get y;
+ SVGAnimatedLength get y;
}
class _SVGPatternElementImpl extends _SVGElementImpl implements SVGPatternElement native "*SVGPatternElement" {
@@ -29295,7 +29386,7 @@
// From SVGStylable
- _SVGAnimatedStringImpl get $dom_svgClassName() => JS("_SVGAnimatedStringImpl", "#.className", this);
+ _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
// Use implementation from Element.
// final _CSSStyleDeclarationImpl style;
@@ -29345,7 +29436,7 @@
abstract class SVGPointList {
/** @domName SVGPointList.numberOfItems */
- abstract int get numberOfItems;
+ int get numberOfItems;
/** @domName SVGPointList.appendItem */
SVGPoint appendItem(SVGPoint item);
@@ -29397,10 +29488,10 @@
abstract class SVGPolygonElement implements SVGElement, SVGTests, SVGLangSpace, SVGExternalResourcesRequired, SVGStylable, SVGTransformable {
/** @domName SVGPolygonElement.animatedPoints */
- abstract SVGPointList get animatedPoints;
+ SVGPointList get animatedPoints;
/** @domName SVGPolygonElement.points */
- abstract SVGPointList get points;
+ SVGPointList get points;
}
class _SVGPolygonElementImpl extends _SVGElementImpl implements SVGPolygonElement native "*SVGPolygonElement" {
@@ -29431,7 +29522,7 @@
// From SVGStylable
- _SVGAnimatedStringImpl get $dom_svgClassName() => JS("_SVGAnimatedStringImpl", "#.className", this);
+ _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
// Use implementation from Element.
// final _CSSStyleDeclarationImpl style;
@@ -29466,10 +29557,10 @@
abstract class SVGPolylineElement implements SVGElement, SVGTests, SVGLangSpace, SVGExternalResourcesRequired, SVGStylable, SVGTransformable {
/** @domName SVGPolylineElement.animatedPoints */
- abstract SVGPointList get animatedPoints;
+ SVGPointList get animatedPoints;
/** @domName SVGPolylineElement.points */
- abstract SVGPointList get points;
+ SVGPointList get points;
}
class _SVGPolylineElementImpl extends _SVGElementImpl implements SVGPolylineElement native "*SVGPolylineElement" {
@@ -29500,7 +29591,7 @@
// From SVGStylable
- _SVGAnimatedStringImpl get $dom_svgClassName() => JS("_SVGAnimatedStringImpl", "#.className", this);
+ _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
// Use implementation from Element.
// final _CSSStyleDeclarationImpl style;
@@ -29585,19 +29676,22 @@
abstract class SVGRadialGradientElement implements SVGGradientElement {
/** @domName SVGRadialGradientElement.cx */
- abstract SVGAnimatedLength get cx;
+ SVGAnimatedLength get cx;
/** @domName SVGRadialGradientElement.cy */
- abstract SVGAnimatedLength get cy;
+ SVGAnimatedLength get cy;
+
+ /** @domName SVGRadialGradientElement.fr */
+ SVGAnimatedLength get fr;
/** @domName SVGRadialGradientElement.fx */
- abstract SVGAnimatedLength get fx;
+ SVGAnimatedLength get fx;
/** @domName SVGRadialGradientElement.fy */
- abstract SVGAnimatedLength get fy;
+ SVGAnimatedLength get fy;
/** @domName SVGRadialGradientElement.r */
- abstract SVGAnimatedLength get r;
+ SVGAnimatedLength get r;
}
class _SVGRadialGradientElementImpl extends _SVGGradientElementImpl implements SVGRadialGradientElement native "*SVGRadialGradientElement" {
@@ -29606,6 +29700,8 @@
final _SVGAnimatedLengthImpl cy;
+ final _SVGAnimatedLengthImpl fr;
+
final _SVGAnimatedLengthImpl fx;
final _SVGAnimatedLengthImpl fy;
@@ -29643,22 +29739,22 @@
abstract class SVGRectElement implements SVGElement, SVGTests, SVGLangSpace, SVGExternalResourcesRequired, SVGStylable, SVGTransformable {
/** @domName SVGRectElement.height */
- abstract SVGAnimatedLength get height;
+ SVGAnimatedLength get height;
/** @domName SVGRectElement.rx */
- abstract SVGAnimatedLength get rx;
+ SVGAnimatedLength get rx;
/** @domName SVGRectElement.ry */
- abstract SVGAnimatedLength get ry;
+ SVGAnimatedLength get ry;
/** @domName SVGRectElement.width */
- abstract SVGAnimatedLength get width;
+ SVGAnimatedLength get width;
/** @domName SVGRectElement.x */
- abstract SVGAnimatedLength get x;
+ SVGAnimatedLength get x;
/** @domName SVGRectElement.y */
- abstract SVGAnimatedLength get y;
+ SVGAnimatedLength get y;
}
class _SVGRectElementImpl extends _SVGElementImpl implements SVGRectElement native "*SVGRectElement" {
@@ -29697,7 +29793,7 @@
// From SVGStylable
- _SVGAnimatedStringImpl get $dom_svgClassName() => JS("_SVGAnimatedStringImpl", "#.className", this);
+ _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
// Use implementation from Element.
// final _CSSStyleDeclarationImpl style;
@@ -29761,6 +29857,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.
+
/// @domName SVGSVGElement
abstract class SVGSVGElement extends SVGElement implements SVGTests, SVGLangSpace, SVGExternalResourcesRequired, SVGStylable, SVGLocatable, SVGFitToViewBox, SVGZoomAndPan {
factory SVGSVGElement() => _SVGSVGElementFactoryProvider.createSVGSVGElement();
@@ -29776,40 +29873,40 @@
num currentScale;
/** @domName SVGSVGElement.currentTranslate */
- abstract SVGPoint get currentTranslate;
+ SVGPoint get currentTranslate;
/** @domName SVGSVGElement.currentView */
- abstract SVGViewSpec get currentView;
+ SVGViewSpec get currentView;
/** @domName SVGSVGElement.height */
- abstract SVGAnimatedLength get height;
+ SVGAnimatedLength get height;
/** @domName SVGSVGElement.pixelUnitToMillimeterX */
- abstract num get pixelUnitToMillimeterX;
+ num get pixelUnitToMillimeterX;
/** @domName SVGSVGElement.pixelUnitToMillimeterY */
- abstract num get pixelUnitToMillimeterY;
+ num get pixelUnitToMillimeterY;
/** @domName SVGSVGElement.screenPixelToMillimeterX */
- abstract num get screenPixelToMillimeterX;
+ num get screenPixelToMillimeterX;
/** @domName SVGSVGElement.screenPixelToMillimeterY */
- abstract num get screenPixelToMillimeterY;
+ num get screenPixelToMillimeterY;
/** @domName SVGSVGElement.useCurrentView */
- abstract bool get useCurrentView;
+ bool get useCurrentView;
/** @domName SVGSVGElement.viewport */
- abstract SVGRect get viewport;
+ SVGRect get viewport;
/** @domName SVGSVGElement.width */
- abstract SVGAnimatedLength get width;
+ SVGAnimatedLength get width;
/** @domName SVGSVGElement.x */
- abstract SVGAnimatedLength get x;
+ SVGAnimatedLength get x;
/** @domName SVGSVGElement.y */
- abstract SVGAnimatedLength get y;
+ SVGAnimatedLength get y;
/** @domName SVGSVGElement.animationsPaused */
bool animationsPaused();
@@ -29982,7 +30079,7 @@
// From SVGStylable
- _SVGAnimatedStringImpl get $dom_svgClassName() => JS("_SVGAnimatedStringImpl", "#.className", this);
+ _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
// Use implementation from Element.
// final _CSSStyleDeclarationImpl style;
@@ -30060,7 +30157,7 @@
abstract class SVGStopElement implements SVGElement, SVGStylable {
/** @domName SVGStopElement.offset */
- abstract SVGAnimatedNumber get offset;
+ SVGAnimatedNumber get offset;
}
class _SVGStopElementImpl extends _SVGElementImpl implements SVGStopElement native "*SVGStopElement" {
@@ -30069,7 +30166,7 @@
// From SVGStylable
- _SVGAnimatedStringImpl get $dom_svgClassName() => JS("_SVGAnimatedStringImpl", "#.className", this);
+ _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
// Use implementation from Element.
// final _CSSStyleDeclarationImpl style;
@@ -30086,7 +30183,7 @@
abstract class SVGStringList implements List<String> {
/** @domName SVGStringList.numberOfItems */
- abstract int get numberOfItems;
+ int get numberOfItems;
/** @domName SVGStringList.appendItem */
String appendItem(String item);
@@ -30117,7 +30214,7 @@
String operator[](int index) => JS("String", "#[#]", this, index);
void operator[]=(int index, String value) {
- throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+ throw new UnsupportedError("Cannot assign element of immutable List.");
}
// -- start List<String> mixins.
// String is the element type.
@@ -30134,15 +30231,15 @@
// From Collection<String>:
void add(String value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addLast(String value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addAll(Collection<String> collection) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
bool contains(String element) => _Collections.contains(this, element);
@@ -30158,38 +30255,38 @@
bool some(bool f(String element)) => _Collections.some(this, f);
- bool isEmpty() => this.length == 0;
+ bool get isEmpty => this.length == 0;
// From List<String>:
void sort([Comparator<String> compare = Comparable.compare]) {
- throw const UnsupportedOperationException("Cannot sort immutable List.");
+ throw new UnsupportedError("Cannot sort immutable List.");
}
int indexOf(String element, [int start = 0]) =>
_Lists.indexOf(this, element, start, this.length);
int lastIndexOf(String element, [int start]) {
- if (start === null) start = length - 1;
+ if (start == null) start = length - 1;
return _Lists.lastIndexOf(this, element, start);
}
- String last() => this[length - 1];
+ String get last => this[length - 1];
String removeLast() {
- throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+ throw new UnsupportedError("Cannot removeLast on immutable List.");
}
void setRange(int start, int rangeLength, List<String> from, [int startFrom]) {
- throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+ throw new UnsupportedError("Cannot setRange on immutable List.");
}
void removeRange(int start, int rangeLength) {
- throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+ throw new UnsupportedError("Cannot removeRange on immutable List.");
}
void insertRange(int start, int rangeLength, [String initialValue]) {
- throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+ throw new UnsupportedError("Cannot insertRange on immutable List.");
}
List<String> getRange(int start, int rangeLength) =>
@@ -30221,10 +30318,10 @@
abstract class SVGStylable {
/** @domName SVGStylable.className */
- abstract SVGAnimatedString get $dom_svgClassName;
+ SVGAnimatedString get $dom_svgClassName;
/** @domName SVGStylable.style */
- abstract CSSStyleDeclaration get style;
+ CSSStyleDeclaration get style;
/** @domName SVGStylable.getPresentationAttribute */
CSSValue getPresentationAttribute(String name);
@@ -30258,7 +30355,7 @@
String media;
// Shadowing definition.
- String get title() => JS("String", "#.title", this);
+ String get title => JS("String", "#.title", this);
void set title(String value) {
JS("void", "#.title = #", this, value);
@@ -30306,7 +30403,7 @@
// From SVGStylable
- _SVGAnimatedStringImpl get $dom_svgClassName() => JS("_SVGAnimatedStringImpl", "#.className", this);
+ _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
// Use implementation from Element.
// final _CSSStyleDeclarationImpl style;
@@ -30355,7 +30452,7 @@
// From SVGStylable
- _SVGAnimatedStringImpl get $dom_svgClassName() => JS("_SVGAnimatedStringImpl", "#.className", this);
+ _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
// Use implementation from Element.
// final _CSSStyleDeclarationImpl style;
@@ -30406,13 +30503,13 @@
abstract class SVGTests {
/** @domName SVGTests.requiredExtensions */
- abstract SVGStringList get requiredExtensions;
+ SVGStringList get requiredExtensions;
/** @domName SVGTests.requiredFeatures */
- abstract SVGStringList get requiredFeatures;
+ SVGStringList get requiredFeatures;
/** @domName SVGTests.systemLanguage */
- abstract SVGStringList get systemLanguage;
+ SVGStringList get systemLanguage;
/** @domName SVGTests.hasExtension */
bool hasExtension(String extension);
@@ -30433,10 +30530,10 @@
static const int LENGTHADJUST_UNKNOWN = 0;
/** @domName SVGTextContentElement.lengthAdjust */
- abstract SVGAnimatedEnumeration get lengthAdjust;
+ SVGAnimatedEnumeration get lengthAdjust;
/** @domName SVGTextContentElement.textLength */
- abstract SVGAnimatedLength get textLength;
+ SVGAnimatedLength get textLength;
/** @domName SVGTextContentElement.getCharNumAtPosition */
int getCharNumAtPosition(SVGPoint point);
@@ -30512,7 +30609,7 @@
// From SVGStylable
- _SVGAnimatedStringImpl get $dom_svgClassName() => JS("_SVGAnimatedStringImpl", "#.className", this);
+ _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
// Use implementation from Element.
// final _CSSStyleDeclarationImpl style;
@@ -30571,13 +30668,13 @@
static const int TEXTPATH_SPACINGTYPE_UNKNOWN = 0;
/** @domName SVGTextPathElement.method */
- abstract SVGAnimatedEnumeration get method;
+ SVGAnimatedEnumeration get method;
/** @domName SVGTextPathElement.spacing */
- abstract SVGAnimatedEnumeration get spacing;
+ SVGAnimatedEnumeration get spacing;
/** @domName SVGTextPathElement.startOffset */
- abstract SVGAnimatedLength get startOffset;
+ SVGAnimatedLength get startOffset;
}
class _SVGTextPathElementImpl extends _SVGTextContentElementImpl implements SVGTextPathElement native "*SVGTextPathElement" {
@@ -30602,19 +30699,19 @@
abstract class SVGTextPositioningElement implements SVGTextContentElement {
/** @domName SVGTextPositioningElement.dx */
- abstract SVGAnimatedLengthList get dx;
+ SVGAnimatedLengthList get dx;
/** @domName SVGTextPositioningElement.dy */
- abstract SVGAnimatedLengthList get dy;
+ SVGAnimatedLengthList get dy;
/** @domName SVGTextPositioningElement.rotate */
- abstract SVGAnimatedNumberList get rotate;
+ SVGAnimatedNumberList get rotate;
/** @domName SVGTextPositioningElement.x */
- abstract SVGAnimatedLengthList get x;
+ SVGAnimatedLengthList get x;
/** @domName SVGTextPositioningElement.y */
- abstract SVGAnimatedLengthList get y;
+ SVGAnimatedLengthList get y;
}
class _SVGTextPositioningElementImpl extends _SVGTextContentElementImpl implements SVGTextPositioningElement native "*SVGTextPositioningElement" {
@@ -30649,7 +30746,7 @@
// From SVGStylable
- _SVGAnimatedStringImpl get $dom_svgClassName() => JS("_SVGAnimatedStringImpl", "#.className", this);
+ _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
// Use implementation from Element.
// final _CSSStyleDeclarationImpl style;
@@ -30680,13 +30777,13 @@
static const int SVG_TRANSFORM_UNKNOWN = 0;
/** @domName SVGTransform.angle */
- abstract num get angle;
+ num get angle;
/** @domName SVGTransform.matrix */
- abstract SVGMatrix get matrix;
+ SVGMatrix get matrix;
/** @domName SVGTransform.type */
- abstract int get type;
+ int get type;
/** @domName SVGTransform.setMatrix */
void setMatrix(SVGMatrix matrix);
@@ -30737,7 +30834,7 @@
abstract class SVGTransformList implements List<SVGTransform> {
/** @domName SVGTransformList.numberOfItems */
- abstract int get numberOfItems;
+ int get numberOfItems;
/** @domName SVGTransformList.appendItem */
SVGTransform appendItem(SVGTransform item);
@@ -30774,7 +30871,7 @@
_SVGTransformImpl operator[](int index) => JS("_SVGTransformImpl", "#[#]", this, index);
void operator[]=(int index, _SVGTransformImpl value) {
- throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+ throw new UnsupportedError("Cannot assign element of immutable List.");
}
// -- start List<SVGTransform> mixins.
// SVGTransform is the element type.
@@ -30791,15 +30888,15 @@
// From Collection<SVGTransform>:
void add(SVGTransform value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addLast(SVGTransform value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addAll(Collection<SVGTransform> collection) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
bool contains(SVGTransform element) => _Collections.contains(this, element);
@@ -30815,38 +30912,38 @@
bool some(bool f(SVGTransform element)) => _Collections.some(this, f);
- bool isEmpty() => this.length == 0;
+ bool get isEmpty => this.length == 0;
// From List<SVGTransform>:
void sort([Comparator<SVGTransform> compare = Comparable.compare]) {
- throw const UnsupportedOperationException("Cannot sort immutable List.");
+ throw new UnsupportedError("Cannot sort immutable List.");
}
int indexOf(SVGTransform element, [int start = 0]) =>
_Lists.indexOf(this, element, start, this.length);
int lastIndexOf(SVGTransform element, [int start]) {
- if (start === null) start = length - 1;
+ if (start == null) start = length - 1;
return _Lists.lastIndexOf(this, element, start);
}
- SVGTransform last() => this[length - 1];
+ SVGTransform get last => this[length - 1];
SVGTransform removeLast() {
- throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+ throw new UnsupportedError("Cannot removeLast on immutable List.");
}
void setRange(int start, int rangeLength, List<SVGTransform> from, [int startFrom]) {
- throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+ throw new UnsupportedError("Cannot setRange on immutable List.");
}
void removeRange(int start, int rangeLength) {
- throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+ throw new UnsupportedError("Cannot removeRange on immutable List.");
}
void insertRange(int start, int rangeLength, [SVGTransform initialValue]) {
- throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+ throw new UnsupportedError("Cannot insertRange on immutable List.");
}
List<SVGTransform> getRange(int start, int rangeLength) =>
@@ -30882,7 +30979,7 @@
abstract class SVGTransformable implements SVGLocatable {
/** @domName SVGTransformable.transform */
- abstract SVGAnimatedTransformList get transform;
+ SVGAnimatedTransformList get transform;
}
// 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
@@ -30894,7 +30991,7 @@
abstract class SVGURIReference {
/** @domName SVGURIReference.href */
- abstract SVGAnimatedString get href;
+ SVGAnimatedString get href;
}
// 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
@@ -30924,22 +31021,22 @@
abstract class SVGUseElement implements SVGElement, SVGURIReference, SVGTests, SVGLangSpace, SVGExternalResourcesRequired, SVGStylable, SVGTransformable {
/** @domName SVGUseElement.animatedInstanceRoot */
- abstract SVGElementInstance get animatedInstanceRoot;
+ SVGElementInstance get animatedInstanceRoot;
/** @domName SVGUseElement.height */
- abstract SVGAnimatedLength get height;
+ SVGAnimatedLength get height;
/** @domName SVGUseElement.instanceRoot */
- abstract SVGElementInstance get instanceRoot;
+ SVGElementInstance get instanceRoot;
/** @domName SVGUseElement.width */
- abstract SVGAnimatedLength get width;
+ SVGAnimatedLength get width;
/** @domName SVGUseElement.x */
- abstract SVGAnimatedLength get x;
+ SVGAnimatedLength get x;
/** @domName SVGUseElement.y */
- abstract SVGAnimatedLength get y;
+ SVGAnimatedLength get y;
}
class _SVGUseElementImpl extends _SVGElementImpl implements SVGUseElement native "*SVGUseElement" {
@@ -30982,7 +31079,7 @@
// From SVGStylable
- _SVGAnimatedStringImpl get $dom_svgClassName() => JS("_SVGAnimatedStringImpl", "#.className", this);
+ _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
// Use implementation from Element.
// final _CSSStyleDeclarationImpl style;
@@ -31029,7 +31126,7 @@
abstract class SVGViewElement implements SVGElement, SVGExternalResourcesRequired, SVGFitToViewBox, SVGZoomAndPan {
/** @domName SVGViewElement.viewTarget */
- abstract SVGStringList get viewTarget;
+ SVGStringList get viewTarget;
}
class _SVGViewElementImpl extends _SVGElementImpl implements SVGViewElement native "*SVGViewElement" {
@@ -31060,28 +31157,28 @@
abstract class SVGViewSpec {
/** @domName SVGViewSpec.preserveAspectRatio */
- abstract SVGAnimatedPreserveAspectRatio get preserveAspectRatio;
+ SVGAnimatedPreserveAspectRatio get preserveAspectRatio;
/** @domName SVGViewSpec.preserveAspectRatioString */
- abstract String get preserveAspectRatioString;
+ String get preserveAspectRatioString;
/** @domName SVGViewSpec.transform */
- abstract SVGTransformList get transform;
+ SVGTransformList get transform;
/** @domName SVGViewSpec.transformString */
- abstract String get transformString;
+ String get transformString;
/** @domName SVGViewSpec.viewBox */
- abstract SVGAnimatedRect get viewBox;
+ SVGAnimatedRect get viewBox;
/** @domName SVGViewSpec.viewBoxString */
- abstract String get viewBoxString;
+ String get viewBoxString;
/** @domName SVGViewSpec.viewTarget */
- abstract SVGElement get viewTarget;
+ SVGElement get viewTarget;
/** @domName SVGViewSpec.viewTargetString */
- abstract String get viewTargetString;
+ String get viewTargetString;
/** @domName SVGViewSpec.zoomAndPan */
int zoomAndPan;
@@ -31135,19 +31232,19 @@
abstract class SVGZoomEvent implements UIEvent {
/** @domName SVGZoomEvent.newScale */
- abstract num get newScale;
+ num get newScale;
/** @domName SVGZoomEvent.newTranslate */
- abstract SVGPoint get newTranslate;
+ SVGPoint get newTranslate;
/** @domName SVGZoomEvent.previousScale */
- abstract num get previousScale;
+ num get previousScale;
/** @domName SVGZoomEvent.previousTranslate */
- abstract SVGPoint get previousTranslate;
+ SVGPoint get previousTranslate;
/** @domName SVGZoomEvent.zoomRectScreen */
- abstract SVGRect get zoomRectScreen;
+ SVGRect get zoomRectScreen;
}
class _SVGZoomEventImpl extends _UIEventImpl implements SVGZoomEvent native "*SVGZoomEvent" {
@@ -31172,28 +31269,28 @@
abstract class Screen {
/** @domName Screen.availHeight */
- abstract int get availHeight;
+ int get availHeight;
/** @domName Screen.availLeft */
- abstract int get availLeft;
+ int get availLeft;
/** @domName Screen.availTop */
- abstract int get availTop;
+ int get availTop;
/** @domName Screen.availWidth */
- abstract int get availWidth;
+ int get availWidth;
/** @domName Screen.colorDepth */
- abstract int get colorDepth;
+ int get colorDepth;
/** @domName Screen.height */
- abstract int get height;
+ int get height;
/** @domName Screen.pixelDepth */
- abstract int get pixelDepth;
+ int get pixelDepth;
/** @domName Screen.width */
- abstract int get width;
+ int get width;
}
class _ScreenImpl implements Screen native "*Screen" {
@@ -31278,13 +31375,13 @@
abstract class ScriptProfile {
/** @domName ScriptProfile.head */
- abstract ScriptProfileNode get head;
+ ScriptProfileNode get head;
/** @domName ScriptProfile.title */
- abstract String get title;
+ String get title;
/** @domName ScriptProfile.uid */
- abstract int get uid;
+ int get uid;
}
class _ScriptProfileImpl implements ScriptProfile native "*ScriptProfile" {
@@ -31305,28 +31402,28 @@
abstract class ScriptProfileNode {
/** @domName ScriptProfileNode.callUID */
- abstract int get callUID;
+ int get callUID;
/** @domName ScriptProfileNode.functionName */
- abstract String get functionName;
+ String get functionName;
/** @domName ScriptProfileNode.lineNumber */
- abstract int get lineNumber;
+ int get lineNumber;
/** @domName ScriptProfileNode.numberOfCalls */
- abstract int get numberOfCalls;
+ int get numberOfCalls;
/** @domName ScriptProfileNode.selfTime */
- abstract num get selfTime;
+ num get selfTime;
/** @domName ScriptProfileNode.totalTime */
- abstract num get totalTime;
+ num get totalTime;
/** @domName ScriptProfileNode.url */
- abstract String get url;
+ String get url;
/** @domName ScriptProfileNode.visible */
- abstract bool get visible;
+ bool get visible;
/** @domName ScriptProfileNode.children */
List<ScriptProfileNode> children();
@@ -31370,10 +31467,10 @@
bool disabled;
/** @domName HTMLSelectElement.form */
- abstract FormElement get form;
+ FormElement get form;
/** @domName HTMLSelectElement.labels */
- abstract List<Node> get labels;
+ List<Node> get labels;
/** @domName HTMLSelectElement.length */
int length;
@@ -31385,7 +31482,7 @@
String name;
/** @domName HTMLSelectElement.options */
- abstract HTMLOptionsCollection get options;
+ HTMLOptionsCollection get options;
/** @domName HTMLSelectElement.required */
bool required;
@@ -31394,25 +31491,25 @@
int selectedIndex;
/** @domName HTMLSelectElement.selectedOptions */
- abstract HTMLCollection get selectedOptions;
+ HTMLCollection get selectedOptions;
/** @domName HTMLSelectElement.size */
int size;
/** @domName HTMLSelectElement.type */
- abstract String get type;
+ String get type;
/** @domName HTMLSelectElement.validationMessage */
- abstract String get validationMessage;
+ String get validationMessage;
/** @domName HTMLSelectElement.validity */
- abstract ValidityState get validity;
+ ValidityState get validity;
/** @domName HTMLSelectElement.value */
String value;
/** @domName HTMLSelectElement.willValidate */
- abstract bool get willValidate;
+ bool get willValidate;
/** @domName HTMLSelectElement.checkValidity */
bool checkValidity();
@@ -31473,11 +31570,11 @@
// Override default options, since IE returns SelectElement itself and it
// does not operate as a List.
- List<OptionElement> get options() {
+ List<OptionElement> get options {
return this.elements.filter((e) => e is OptionElement);
}
- List<OptionElement> get selectedOptions() {
+ List<OptionElement> get selectedOptions {
// IE does not change the selected flag for single-selection items.
if (this.multiple) {
return this.options.filter((o) => o.selected);
@@ -31518,9 +31615,14 @@
/// @domName HTMLShadowElement
abstract class ShadowElement implements Element {
+
+ /** @domName HTMLShadowElement.resetStyleInheritance */
+ bool resetStyleInheritance;
}
class _ShadowElementImpl extends _ElementImpl implements ShadowElement native "*HTMLShadowElement" {
+
+ bool resetStyleInheritance;
}
// 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
@@ -31528,13 +31630,14 @@
// WARNING: Do not edit - generated code.
+
/// @domName ShadowRoot
abstract class ShadowRoot implements DocumentFragment {
factory ShadowRoot(Element host) => _ShadowRootFactoryProvider.createShadowRoot(host);
/** @domName ShadowRoot.activeElement */
- abstract Element get activeElement;
+ Element get activeElement;
/** @domName ShadowRoot.applyAuthorStyles */
bool applyAuthorStyles;
@@ -31608,7 +31711,7 @@
}
/** @domName SharedWorker.port */
- abstract MessagePort get port;
+ MessagePort get port;
}
// 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
@@ -31625,7 +31728,7 @@
SharedWorkerContextEvents get on;
/** @domName SharedWorkerContext.name */
- abstract String get name;
+ String get name;
}
abstract class SharedWorkerContextEvents implements WorkerContextEvents {
@@ -31661,7 +31764,7 @@
abstract class SourceBuffer {
/** @domName SourceBuffer.buffered */
- abstract TimeRanges get buffered;
+ TimeRanges get buffered;
/** @domName SourceBuffer.timestampOffset */
num timestampOffset;
@@ -31690,10 +31793,10 @@
// WARNING: Do not edit - generated code.
/// @domName SourceBufferList
-abstract class SourceBufferList implements List<SourceBuffer>, EventTarget {
+abstract class SourceBufferList implements EventTarget, List<SourceBuffer> {
/** @domName SourceBufferList.length */
- abstract int get length;
+ int get length;
/** @domName SourceBufferList.addEventListener */
void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
@@ -31708,14 +31811,14 @@
void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]);
}
-class _SourceBufferListImpl implements SourceBufferList, JavaScriptIndexingBehavior native "*SourceBufferList" {
+class _SourceBufferListImpl extends _EventTargetImpl implements SourceBufferList, JavaScriptIndexingBehavior native "*SourceBufferList" {
final int length;
_SourceBufferImpl operator[](int index) => JS("_SourceBufferImpl", "#[#]", this, index);
void operator[]=(int index, _SourceBufferImpl value) {
- throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+ throw new UnsupportedError("Cannot assign element of immutable List.");
}
// -- start List<SourceBuffer> mixins.
// SourceBuffer is the element type.
@@ -31732,15 +31835,15 @@
// From Collection<SourceBuffer>:
void add(SourceBuffer value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addLast(SourceBuffer value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addAll(Collection<SourceBuffer> collection) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
bool contains(SourceBuffer element) => _Collections.contains(this, element);
@@ -31756,38 +31859,38 @@
bool some(bool f(SourceBuffer element)) => _Collections.some(this, f);
- bool isEmpty() => this.length == 0;
+ bool get isEmpty => this.length == 0;
// From List<SourceBuffer>:
void sort([Comparator<SourceBuffer> compare = Comparable.compare]) {
- throw const UnsupportedOperationException("Cannot sort immutable List.");
+ throw new UnsupportedError("Cannot sort immutable List.");
}
int indexOf(SourceBuffer element, [int start = 0]) =>
_Lists.indexOf(this, element, start, this.length);
int lastIndexOf(SourceBuffer element, [int start]) {
- if (start === null) start = length - 1;
+ if (start == null) start = length - 1;
return _Lists.lastIndexOf(this, element, start);
}
- SourceBuffer last() => this[length - 1];
+ SourceBuffer get last => this[length - 1];
SourceBuffer removeLast() {
- throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+ throw new UnsupportedError("Cannot removeLast on immutable List.");
}
void setRange(int start, int rangeLength, List<SourceBuffer> from, [int startFrom]) {
- throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+ throw new UnsupportedError("Cannot setRange on immutable List.");
}
void removeRange(int start, int rangeLength) {
- throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+ throw new UnsupportedError("Cannot removeRange on immutable List.");
}
void insertRange(int start, int rangeLength, [SourceBuffer initialValue]) {
- throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+ throw new UnsupportedError("Cannot insertRange on immutable List.");
}
List<SourceBuffer> getRange(int start, int rangeLength) =>
@@ -31882,7 +31985,7 @@
factory SpeechGrammarList() => _SpeechGrammarListFactoryProvider.createSpeechGrammarList();
/** @domName SpeechGrammarList.length */
- abstract int get length;
+ int get length;
/** @domName SpeechGrammarList.addFromString */
void addFromString(String string, [num weight]);
@@ -31901,7 +32004,7 @@
_SpeechGrammarImpl operator[](int index) => JS("_SpeechGrammarImpl", "#[#]", this, index);
void operator[]=(int index, _SpeechGrammarImpl value) {
- throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+ throw new UnsupportedError("Cannot assign element of immutable List.");
}
// -- start List<SpeechGrammar> mixins.
// SpeechGrammar is the element type.
@@ -31918,15 +32021,15 @@
// From Collection<SpeechGrammar>:
void add(SpeechGrammar value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addLast(SpeechGrammar value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addAll(Collection<SpeechGrammar> collection) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
bool contains(SpeechGrammar element) => _Collections.contains(this, element);
@@ -31942,38 +32045,38 @@
bool some(bool f(SpeechGrammar element)) => _Collections.some(this, f);
- bool isEmpty() => this.length == 0;
+ bool get isEmpty => this.length == 0;
// From List<SpeechGrammar>:
void sort([Comparator<SpeechGrammar> compare = Comparable.compare]) {
- throw const UnsupportedOperationException("Cannot sort immutable List.");
+ throw new UnsupportedError("Cannot sort immutable List.");
}
int indexOf(SpeechGrammar element, [int start = 0]) =>
_Lists.indexOf(this, element, start, this.length);
int lastIndexOf(SpeechGrammar element, [int start]) {
- if (start === null) start = length - 1;
+ if (start == null) start = length - 1;
return _Lists.lastIndexOf(this, element, start);
}
- SpeechGrammar last() => this[length - 1];
+ SpeechGrammar get last => this[length - 1];
SpeechGrammar removeLast() {
- throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+ throw new UnsupportedError("Cannot removeLast on immutable List.");
}
void setRange(int start, int rangeLength, List<SpeechGrammar> from, [int startFrom]) {
- throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+ throw new UnsupportedError("Cannot setRange on immutable List.");
}
void removeRange(int start, int rangeLength) {
- throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+ throw new UnsupportedError("Cannot removeRange on immutable List.");
}
void insertRange(int start, int rangeLength, [SpeechGrammar initialValue]) {
- throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+ throw new UnsupportedError("Cannot insertRange on immutable List.");
}
List<SpeechGrammar> getRange(int start, int rangeLength) =>
@@ -31997,7 +32100,7 @@
abstract class SpeechInputEvent implements Event {
/** @domName SpeechInputEvent.results */
- abstract List<SpeechInputResult> get results;
+ List<SpeechInputResult> get results;
}
class _SpeechInputEventImpl extends _EventImpl implements SpeechInputEvent native "*SpeechInputEvent" {
@@ -32014,10 +32117,10 @@
abstract class SpeechInputResult {
/** @domName SpeechInputResult.confidence */
- abstract num get confidence;
+ num get confidence;
/** @domName SpeechInputResult.utterance */
- abstract String get utterance;
+ String get utterance;
}
class _SpeechInputResultImpl implements SpeechInputResult native "*SpeechInputResult" {
@@ -32034,7 +32137,7 @@
_SpeechInputResultImpl operator[](int index) => JS("_SpeechInputResultImpl", "#[#]", this, index);
void operator[]=(int index, _SpeechInputResultImpl value) {
- throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+ throw new UnsupportedError("Cannot assign element of immutable List.");
}
// -- start List<SpeechInputResult> mixins.
// SpeechInputResult is the element type.
@@ -32051,15 +32154,15 @@
// From Collection<SpeechInputResult>:
void add(SpeechInputResult value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addLast(SpeechInputResult value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addAll(Collection<SpeechInputResult> collection) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
bool contains(SpeechInputResult element) => _Collections.contains(this, element);
@@ -32075,38 +32178,38 @@
bool some(bool f(SpeechInputResult element)) => _Collections.some(this, f);
- bool isEmpty() => this.length == 0;
+ bool get isEmpty => this.length == 0;
// From List<SpeechInputResult>:
void sort([Comparator<SpeechInputResult> compare = Comparable.compare]) {
- throw const UnsupportedOperationException("Cannot sort immutable List.");
+ throw new UnsupportedError("Cannot sort immutable List.");
}
int indexOf(SpeechInputResult element, [int start = 0]) =>
_Lists.indexOf(this, element, start, this.length);
int lastIndexOf(SpeechInputResult element, [int start]) {
- if (start === null) start = length - 1;
+ if (start == null) start = length - 1;
return _Lists.lastIndexOf(this, element, start);
}
- SpeechInputResult last() => this[length - 1];
+ SpeechInputResult get last => this[length - 1];
SpeechInputResult removeLast() {
- throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+ throw new UnsupportedError("Cannot removeLast on immutable List.");
}
void setRange(int start, int rangeLength, List<SpeechInputResult> from, [int startFrom]) {
- throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+ throw new UnsupportedError("Cannot setRange on immutable List.");
}
void removeRange(int start, int rangeLength) {
- throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+ throw new UnsupportedError("Cannot removeRange on immutable List.");
}
void insertRange(int start, int rangeLength, [SpeechInputResult initialValue]) {
- throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+ throw new UnsupportedError("Cannot insertRange on immutable List.");
}
List<SpeechInputResult> getRange(int start, int rangeLength) =>
@@ -32138,6 +32241,9 @@
/** @domName SpeechRecognition.grammars */
SpeechGrammarList grammars;
+ /** @domName SpeechRecognition.interimResults */
+ bool interimResults;
+
/** @domName SpeechRecognition.lang */
String lang;
@@ -32177,8 +32283,6 @@
EventListenerList get result;
- EventListenerList get resultDeleted;
-
EventListenerList get soundEnd;
EventListenerList get soundStart;
@@ -32199,10 +32303,10 @@
abstract class SpeechRecognitionAlternative {
/** @domName SpeechRecognitionAlternative.confidence */
- abstract num get confidence;
+ num get confidence;
/** @domName SpeechRecognitionAlternative.transcript */
- abstract String get transcript;
+ String get transcript;
}
class _SpeechRecognitionAlternativeImpl implements SpeechRecognitionAlternative native "*SpeechRecognitionAlternative" {
@@ -32239,10 +32343,10 @@
static const int SERVICE_NOT_ALLOWED = 6;
/** @domName SpeechRecognitionError.code */
- abstract int get code;
+ int get code;
/** @domName SpeechRecognitionError.message */
- abstract String get message;
+ String get message;
}
class _SpeechRecognitionErrorImpl extends _EventImpl implements SpeechRecognitionError native "*SpeechRecognitionError" {
@@ -32261,13 +32365,13 @@
abstract class SpeechRecognitionEvent implements Event {
/** @domName SpeechRecognitionEvent.result */
- abstract SpeechRecognitionResult get result;
+ SpeechRecognitionResult get result;
/** @domName SpeechRecognitionEvent.resultHistory */
- abstract List<SpeechRecognitionResult> get resultHistory;
+ List<SpeechRecognitionResult> get resultHistory;
/** @domName SpeechRecognitionEvent.resultIndex */
- abstract int get resultIndex;
+ int get resultIndex;
}
class _SpeechRecognitionEventImpl extends _EventImpl implements SpeechRecognitionEvent native "*SpeechRecognitionEvent" {
@@ -32288,6 +32392,8 @@
_SpeechGrammarListImpl grammars;
+ bool interimResults;
+
String lang;
int maxAlternatives;
@@ -32320,8 +32426,6 @@
EventListenerList get result => this['result'];
- EventListenerList get resultDeleted => this['resultdeleted'];
-
EventListenerList get soundEnd => this['soundend'];
EventListenerList get soundStart => this['soundstart'];
@@ -32342,13 +32446,13 @@
abstract class SpeechRecognitionResult {
/** @domName SpeechRecognitionResult.emma */
- abstract Document get emma;
+ Document get emma;
/** @domName SpeechRecognitionResult.finalValue */
- abstract bool get finalValue;
+ bool get finalValue;
/** @domName SpeechRecognitionResult.length */
- abstract int get length;
+ int get length;
/** @domName SpeechRecognitionResult.item */
SpeechRecognitionAlternative item(int index);
@@ -32358,7 +32462,7 @@
final _DocumentImpl emma;
- bool get finalValue() => JS("bool", "#.final", this);
+ bool get finalValue => JS("bool", "#.final", this);
final int length;
@@ -32372,7 +32476,7 @@
_SpeechRecognitionResultImpl operator[](int index) => JS("_SpeechRecognitionResultImpl", "#[#]", this, index);
void operator[]=(int index, _SpeechRecognitionResultImpl value) {
- throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+ throw new UnsupportedError("Cannot assign element of immutable List.");
}
// -- start List<SpeechRecognitionResult> mixins.
// SpeechRecognitionResult is the element type.
@@ -32389,15 +32493,15 @@
// From Collection<SpeechRecognitionResult>:
void add(SpeechRecognitionResult value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addLast(SpeechRecognitionResult value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addAll(Collection<SpeechRecognitionResult> collection) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
bool contains(SpeechRecognitionResult element) => _Collections.contains(this, element);
@@ -32413,38 +32517,38 @@
bool some(bool f(SpeechRecognitionResult element)) => _Collections.some(this, f);
- bool isEmpty() => this.length == 0;
+ bool get isEmpty => this.length == 0;
// From List<SpeechRecognitionResult>:
void sort([Comparator<SpeechRecognitionResult> compare = Comparable.compare]) {
- throw const UnsupportedOperationException("Cannot sort immutable List.");
+ throw new UnsupportedError("Cannot sort immutable List.");
}
int indexOf(SpeechRecognitionResult element, [int start = 0]) =>
_Lists.indexOf(this, element, start, this.length);
int lastIndexOf(SpeechRecognitionResult element, [int start]) {
- if (start === null) start = length - 1;
+ if (start == null) start = length - 1;
return _Lists.lastIndexOf(this, element, start);
}
- SpeechRecognitionResult last() => this[length - 1];
+ SpeechRecognitionResult get last => this[length - 1];
SpeechRecognitionResult removeLast() {
- throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+ throw new UnsupportedError("Cannot removeLast on immutable List.");
}
void setRange(int start, int rangeLength, List<SpeechRecognitionResult> from, [int startFrom]) {
- throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+ throw new UnsupportedError("Cannot setRange on immutable List.");
}
void removeRange(int start, int rangeLength) {
- throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+ throw new UnsupportedError("Cannot removeRange on immutable List.");
}
void insertRange(int start, int rangeLength, [SpeechRecognitionResult initialValue]) {
- throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+ throw new UnsupportedError("Cannot insertRange on immutable List.");
}
List<SpeechRecognitionResult> getRange(int start, int rangeLength) =>
@@ -32458,11 +32562,12 @@
// 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.
+
/// @domName Storage
abstract class Storage implements Map<String, String> {
/** @domName Storage.length */
- abstract int get $dom_length;
+ int get $dom_length;
/** @domName Storage.clear */
void $dom_clear();
@@ -32490,19 +32595,19 @@
abstract class StorageEvent implements Event {
/** @domName StorageEvent.key */
- abstract String get key;
+ String get key;
/** @domName StorageEvent.newValue */
- abstract String get newValue;
+ String get newValue;
/** @domName StorageEvent.oldValue */
- abstract String get oldValue;
+ String get oldValue;
/** @domName StorageEvent.storageArea */
- abstract Storage get storageArea;
+ Storage get storageArea;
/** @domName StorageEvent.url */
- abstract String get url;
+ String get url;
/** @domName StorageEvent.initStorageEvent */
void initStorageEvent(String typeArg, bool canBubbleArg, bool cancelableArg, String keyArg, String oldValueArg, String newValueArg, String urlArg, Storage storageAreaArg);
@@ -32529,7 +32634,7 @@
class _StorageImpl implements Storage native "*Storage" {
// TODO(nweiz): update this when maps support lazy iteration
- bool containsValue(String value) => getValues().some((e) => e == value);
+ bool containsValue(String value) => values.some((e) => e == value);
bool containsKey(String key) => $dom_getItem(key) != null;
@@ -32559,13 +32664,13 @@
}
}
- Collection<String> getKeys() {
+ Collection<String> get keys {
final keys = [];
forEach((k, v) => keys.add(k));
return keys;
}
- Collection<String> getValues() {
+ Collection<String> get values {
final values = [];
forEach((k, v) => values.add(v));
return values;
@@ -32573,9 +32678,9 @@
int get length => $dom_length;
- bool isEmpty() => $dom_key(0) == null;
+ bool get isEmpty => $dom_key(0) == null;
- int get $dom_length() => JS("int", "#.length", this);
+ int get $dom_length => JS("int", "#.length", this);
void $dom_clear() native "clear";
@@ -32613,6 +32718,7 @@
// WARNING: Do not edit - generated code.
+
typedef void StorageInfoErrorCallback(DOMException error);
class _StorageInfoImpl implements StorageInfo native "*StorageInfo" {
@@ -32627,6 +32733,7 @@
// WARNING: Do not edit - generated code.
+
typedef void StorageInfoQuotaCallback(int grantedQuotaInBytes);
// 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
@@ -32634,6 +32741,7 @@
// WARNING: Do not edit - generated code.
+
typedef void StorageInfoUsageCallback(int currentUsageInBytes, int currentQuotaInBytes);
// 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
@@ -32641,6 +32749,7 @@
// WARNING: Do not edit - generated code.
+
typedef void StringCallback(String data);
// 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
@@ -32663,7 +32772,7 @@
bool scoped;
/** @domName HTMLStyleElement.sheet */
- abstract StyleSheet get sheet;
+ StyleSheet get sheet;
/** @domName HTMLStyleElement.type */
String type;
@@ -32691,7 +32800,7 @@
abstract class StyleMedia {
/** @domName StyleMedia.type */
- abstract String get type;
+ String get type;
/** @domName StyleMedia.matchMedium */
bool matchMedium(String mediaquery);
@@ -32716,22 +32825,22 @@
bool disabled;
/** @domName StyleSheet.href */
- abstract String get href;
+ String get href;
/** @domName StyleSheet.media */
- abstract MediaList get media;
+ MediaList get media;
/** @domName StyleSheet.ownerNode */
- abstract Node get ownerNode;
+ Node get ownerNode;
/** @domName StyleSheet.parentStyleSheet */
- abstract StyleSheet get parentStyleSheet;
+ StyleSheet get parentStyleSheet;
/** @domName StyleSheet.title */
- abstract String get title;
+ String get title;
/** @domName StyleSheet.type */
- abstract String get type;
+ String get type;
}
class _StyleSheetImpl implements StyleSheet native "*StyleSheet" {
@@ -32758,7 +32867,7 @@
_StyleSheetImpl operator[](int index) => JS("_StyleSheetImpl", "#[#]", this, index);
void operator[]=(int index, _StyleSheetImpl value) {
- throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+ throw new UnsupportedError("Cannot assign element of immutable List.");
}
// -- start List<StyleSheet> mixins.
// StyleSheet is the element type.
@@ -32775,15 +32884,15 @@
// From Collection<StyleSheet>:
void add(StyleSheet value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addLast(StyleSheet value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addAll(Collection<StyleSheet> collection) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
bool contains(StyleSheet element) => _Collections.contains(this, element);
@@ -32799,38 +32908,38 @@
bool some(bool f(StyleSheet element)) => _Collections.some(this, f);
- bool isEmpty() => this.length == 0;
+ bool get isEmpty => this.length == 0;
// From List<StyleSheet>:
void sort([Comparator<StyleSheet> compare = Comparable.compare]) {
- throw const UnsupportedOperationException("Cannot sort immutable List.");
+ throw new UnsupportedError("Cannot sort immutable List.");
}
int indexOf(StyleSheet element, [int start = 0]) =>
_Lists.indexOf(this, element, start, this.length);
int lastIndexOf(StyleSheet element, [int start]) {
- if (start === null) start = length - 1;
+ if (start == null) start = length - 1;
return _Lists.lastIndexOf(this, element, start);
}
- StyleSheet last() => this[length - 1];
+ StyleSheet get last => this[length - 1];
StyleSheet removeLast() {
- throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+ throw new UnsupportedError("Cannot removeLast on immutable List.");
}
void setRange(int start, int rangeLength, List<StyleSheet> from, [int startFrom]) {
- throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+ throw new UnsupportedError("Cannot setRange on immutable List.");
}
void removeRange(int start, int rangeLength) {
- throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+ throw new UnsupportedError("Cannot removeRange on immutable List.");
}
void insertRange(int start, int rangeLength, [StyleSheet initialValue]) {
- throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+ throw new UnsupportedError("Cannot insertRange on immutable List.");
}
List<StyleSheet> getRange(int start, int rangeLength) =>
@@ -32883,7 +32992,7 @@
String bgColor;
/** @domName HTMLTableCellElement.cellIndex */
- abstract int get cellIndex;
+ int get cellIndex;
/** @domName HTMLTableCellElement.ch */
String ch;
@@ -33025,7 +33134,7 @@
String frame;
/** @domName HTMLTableElement.rows */
- abstract HTMLCollection get rows;
+ HTMLCollection get rows;
/** @domName HTMLTableElement.rules */
String rules;
@@ -33034,7 +33143,7 @@
String summary;
/** @domName HTMLTableElement.tBodies */
- abstract HTMLCollection get tBodies;
+ HTMLCollection get tBodies;
/** @domName HTMLTableElement.tFoot */
TableSectionElement tFoot;
@@ -33152,7 +33261,7 @@
String bgColor;
/** @domName HTMLTableRowElement.cells */
- abstract HTMLCollection get cells;
+ HTMLCollection get cells;
/** @domName HTMLTableRowElement.ch */
String ch;
@@ -33161,10 +33270,10 @@
String chOff;
/** @domName HTMLTableRowElement.rowIndex */
- abstract int get rowIndex;
+ int get rowIndex;
/** @domName HTMLTableRowElement.sectionRowIndex */
- abstract int get sectionRowIndex;
+ int get sectionRowIndex;
/** @domName HTMLTableRowElement.vAlign */
String vAlign;
@@ -33217,7 +33326,7 @@
String chOff;
/** @domName HTMLTableSectionElement.rows */
- abstract HTMLCollection get rows;
+ HTMLCollection get rows;
/** @domName HTMLTableSectionElement.vAlign */
String vAlign;
@@ -33251,13 +33360,14 @@
// WARNING: Do not edit - generated code.
+
/// @domName Text
abstract class Text implements CharacterData {
factory Text(String data) => _TextFactoryProvider.createText(data);
/** @domName Text.wholeText */
- abstract String get wholeText;
+ String get wholeText;
/** @domName Text.replaceWholeText */
Text replaceWholeText(String content);
@@ -33289,10 +33399,10 @@
bool disabled;
/** @domName HTMLTextAreaElement.form */
- abstract FormElement get form;
+ FormElement get form;
/** @domName HTMLTextAreaElement.labels */
- abstract List<Node> get labels;
+ List<Node> get labels;
/** @domName HTMLTextAreaElement.maxLength */
int maxLength;
@@ -33322,22 +33432,22 @@
int selectionStart;
/** @domName HTMLTextAreaElement.textLength */
- abstract int get textLength;
+ int get textLength;
/** @domName HTMLTextAreaElement.type */
- abstract String get type;
+ String get type;
/** @domName HTMLTextAreaElement.validationMessage */
- abstract String get validationMessage;
+ String get validationMessage;
/** @domName HTMLTextAreaElement.validity */
- abstract ValidityState get validity;
+ ValidityState get validity;
/** @domName HTMLTextAreaElement.value */
String value;
/** @domName HTMLTextAreaElement.willValidate */
- abstract bool get willValidate;
+ bool get willValidate;
/** @domName HTMLTextAreaElement.wrap */
String wrap;
@@ -33419,7 +33529,7 @@
abstract class TextEvent implements UIEvent {
/** @domName TextEvent.data */
- abstract String get data;
+ String get data;
/** @domName TextEvent.initTextEvent */
void initTextEvent(String typeArg, bool canBubbleArg, bool cancelableArg, LocalWindow viewArg, String dataArg);
@@ -33450,7 +33560,7 @@
abstract class TextMetrics {
/** @domName TextMetrics.width */
- abstract num get width;
+ num get width;
}
class _TextMetricsImpl implements TextMetrics native "*TextMetrics" {
@@ -33472,19 +33582,19 @@
TextTrackEvents get on;
/** @domName TextTrack.activeCues */
- abstract TextTrackCueList get activeCues;
+ TextTrackCueList get activeCues;
/** @domName TextTrack.cues */
- abstract TextTrackCueList get cues;
+ TextTrackCueList get cues;
/** @domName TextTrack.kind */
- abstract String get kind;
+ String get kind;
/** @domName TextTrack.label */
- abstract String get label;
+ String get label;
/** @domName TextTrack.language */
- abstract String get language;
+ String get language;
/** @domName TextTrack.mode */
String mode;
@@ -33556,7 +33666,7 @@
String text;
/** @domName TextTrackCue.track */
- abstract TextTrack get track;
+ TextTrack get track;
/** @domName TextTrackCue.vertical */
String vertical;
@@ -33636,7 +33746,7 @@
abstract class TextTrackCueList implements List<TextTrackCue> {
/** @domName TextTrackCueList.length */
- abstract int get length;
+ int get length;
/** @domName TextTrackCueList.getCueById */
TextTrackCue getCueById(String id);
@@ -33652,7 +33762,7 @@
_TextTrackCueImpl operator[](int index) => JS("_TextTrackCueImpl", "#[#]", this, index);
void operator[]=(int index, _TextTrackCueImpl value) {
- throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+ throw new UnsupportedError("Cannot assign element of immutable List.");
}
// -- start List<TextTrackCue> mixins.
// TextTrackCue is the element type.
@@ -33669,15 +33779,15 @@
// From Collection<TextTrackCue>:
void add(TextTrackCue value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addLast(TextTrackCue value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addAll(Collection<TextTrackCue> collection) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
bool contains(TextTrackCue element) => _Collections.contains(this, element);
@@ -33693,38 +33803,38 @@
bool some(bool f(TextTrackCue element)) => _Collections.some(this, f);
- bool isEmpty() => this.length == 0;
+ bool get isEmpty => this.length == 0;
// From List<TextTrackCue>:
void sort([Comparator<TextTrackCue> compare = Comparable.compare]) {
- throw const UnsupportedOperationException("Cannot sort immutable List.");
+ throw new UnsupportedError("Cannot sort immutable List.");
}
int indexOf(TextTrackCue element, [int start = 0]) =>
_Lists.indexOf(this, element, start, this.length);
int lastIndexOf(TextTrackCue element, [int start]) {
- if (start === null) start = length - 1;
+ if (start == null) start = length - 1;
return _Lists.lastIndexOf(this, element, start);
}
- TextTrackCue last() => this[length - 1];
+ TextTrackCue get last => this[length - 1];
TextTrackCue removeLast() {
- throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+ throw new UnsupportedError("Cannot removeLast on immutable List.");
}
void setRange(int start, int rangeLength, List<TextTrackCue> from, [int startFrom]) {
- throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+ throw new UnsupportedError("Cannot setRange on immutable List.");
}
void removeRange(int start, int rangeLength) {
- throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+ throw new UnsupportedError("Cannot removeRange on immutable List.");
}
void insertRange(int start, int rangeLength, [TextTrackCue initialValue]) {
- throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+ throw new UnsupportedError("Cannot insertRange on immutable List.");
}
List<TextTrackCue> getRange(int start, int rangeLength) =>
@@ -33777,7 +33887,7 @@
// WARNING: Do not edit - generated code.
/// @domName TextTrackList
-abstract class TextTrackList implements List<TextTrack>, EventTarget {
+abstract class TextTrackList implements EventTarget, List<TextTrack> {
/**
* @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
@@ -33785,7 +33895,7 @@
TextTrackListEvents get on;
/** @domName TextTrackList.length */
- abstract int get length;
+ int get length;
/** @domName TextTrackList.addEventListener */
void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
@@ -33805,7 +33915,7 @@
EventListenerList get addTrack;
}
-class _TextTrackListImpl implements TextTrackList, JavaScriptIndexingBehavior native "*TextTrackList" {
+class _TextTrackListImpl extends _EventTargetImpl implements TextTrackList, JavaScriptIndexingBehavior native "*TextTrackList" {
_TextTrackListEventsImpl get on =>
new _TextTrackListEventsImpl(this);
@@ -33815,7 +33925,7 @@
_TextTrackImpl operator[](int index) => JS("_TextTrackImpl", "#[#]", this, index);
void operator[]=(int index, _TextTrackImpl value) {
- throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+ throw new UnsupportedError("Cannot assign element of immutable List.");
}
// -- start List<TextTrack> mixins.
// TextTrack is the element type.
@@ -33832,15 +33942,15 @@
// From Collection<TextTrack>:
void add(TextTrack value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addLast(TextTrack value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addAll(Collection<TextTrack> collection) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
bool contains(TextTrack element) => _Collections.contains(this, element);
@@ -33856,38 +33966,38 @@
bool some(bool f(TextTrack element)) => _Collections.some(this, f);
- bool isEmpty() => this.length == 0;
+ bool get isEmpty => this.length == 0;
// From List<TextTrack>:
void sort([Comparator<TextTrack> compare = Comparable.compare]) {
- throw const UnsupportedOperationException("Cannot sort immutable List.");
+ throw new UnsupportedError("Cannot sort immutable List.");
}
int indexOf(TextTrack element, [int start = 0]) =>
_Lists.indexOf(this, element, start, this.length);
int lastIndexOf(TextTrack element, [int start]) {
- if (start === null) start = length - 1;
+ if (start == null) start = length - 1;
return _Lists.lastIndexOf(this, element, start);
}
- TextTrack last() => this[length - 1];
+ TextTrack get last => this[length - 1];
TextTrack removeLast() {
- throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+ throw new UnsupportedError("Cannot removeLast on immutable List.");
}
void setRange(int start, int rangeLength, List<TextTrack> from, [int startFrom]) {
- throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+ throw new UnsupportedError("Cannot setRange on immutable List.");
}
void removeRange(int start, int rangeLength) {
- throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+ throw new UnsupportedError("Cannot removeRange on immutable List.");
}
void insertRange(int start, int rangeLength, [TextTrack initialValue]) {
- throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+ throw new UnsupportedError("Cannot insertRange on immutable List.");
}
List<TextTrack> getRange(int start, int rangeLength) =>
@@ -33919,7 +34029,7 @@
abstract class TimeRanges {
/** @domName TimeRanges.length */
- abstract int get length;
+ int get length;
/** @domName TimeRanges.end */
num end(int index);
@@ -33942,6 +34052,7 @@
// WARNING: Do not edit - generated code.
+
typedef void TimeoutHandler();
// 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
@@ -33967,40 +34078,40 @@
abstract class Touch {
/** @domName Touch.clientX */
- abstract int get clientX;
+ int get clientX;
/** @domName Touch.clientY */
- abstract int get clientY;
+ int get clientY;
/** @domName Touch.identifier */
- abstract int get identifier;
+ int get identifier;
/** @domName Touch.pageX */
- abstract int get pageX;
+ int get pageX;
/** @domName Touch.pageY */
- abstract int get pageY;
+ int get pageY;
/** @domName Touch.screenX */
- abstract int get screenX;
+ int get screenX;
/** @domName Touch.screenY */
- abstract int get screenY;
+ int get screenY;
/** @domName Touch.target */
- abstract EventTarget get target;
+ EventTarget get target;
/** @domName Touch.webkitForce */
- abstract num get webkitForce;
+ num get webkitForce;
/** @domName Touch.webkitRadiusX */
- abstract int get webkitRadiusX;
+ int get webkitRadiusX;
/** @domName Touch.webkitRadiusY */
- abstract int get webkitRadiusY;
+ int get webkitRadiusY;
/** @domName Touch.webkitRotationAngle */
- abstract num get webkitRotationAngle;
+ num get webkitRotationAngle;
}
// 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
@@ -34012,25 +34123,25 @@
abstract class TouchEvent implements UIEvent {
/** @domName TouchEvent.altKey */
- abstract bool get altKey;
+ bool get altKey;
/** @domName TouchEvent.changedTouches */
- abstract TouchList get changedTouches;
+ TouchList get changedTouches;
/** @domName TouchEvent.ctrlKey */
- abstract bool get ctrlKey;
+ bool get ctrlKey;
/** @domName TouchEvent.metaKey */
- abstract bool get metaKey;
+ bool get metaKey;
/** @domName TouchEvent.shiftKey */
- abstract bool get shiftKey;
+ bool get shiftKey;
/** @domName TouchEvent.targetTouches */
- abstract TouchList get targetTouches;
+ TouchList get targetTouches;
/** @domName TouchEvent.touches */
- abstract TouchList get touches;
+ TouchList get touches;
/** @domName TouchEvent.initTouchEvent */
void initTouchEvent(TouchList touches, TouchList targetTouches, TouchList changedTouches, String type, LocalWindow view, int screenX, int screenY, int clientX, int clientY, bool ctrlKey, bool altKey, bool shiftKey, bool metaKey);
@@ -34072,7 +34183,7 @@
final int screenY;
EventTarget get target => _convertNativeToDart_EventTarget(this._target);
- EventTarget get _target() => JS("EventTarget", "#.target", this);
+ EventTarget get _target => JS("EventTarget", "#.target", this);
final num webkitForce;
@@ -34092,7 +34203,7 @@
abstract class TouchList implements List<Touch> {
/** @domName TouchList.length */
- abstract int get length;
+ int get length;
/** @domName TouchList.item */
Touch item(int index);
@@ -34105,7 +34216,7 @@
_TouchImpl operator[](int index) => JS("_TouchImpl", "#[#]", this, index);
void operator[]=(int index, _TouchImpl value) {
- throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+ throw new UnsupportedError("Cannot assign element of immutable List.");
}
// -- start List<Touch> mixins.
// Touch is the element type.
@@ -34122,15 +34233,15 @@
// From Collection<Touch>:
void add(Touch value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addLast(Touch value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addAll(Collection<Touch> collection) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
bool contains(Touch element) => _Collections.contains(this, element);
@@ -34146,38 +34257,38 @@
bool some(bool f(Touch element)) => _Collections.some(this, f);
- bool isEmpty() => this.length == 0;
+ bool get isEmpty => this.length == 0;
// From List<Touch>:
void sort([Comparator<Touch> compare = Comparable.compare]) {
- throw const UnsupportedOperationException("Cannot sort immutable List.");
+ throw new UnsupportedError("Cannot sort immutable List.");
}
int indexOf(Touch element, [int start = 0]) =>
_Lists.indexOf(this, element, start, this.length);
int lastIndexOf(Touch element, [int start]) {
- if (start === null) start = length - 1;
+ if (start == null) start = length - 1;
return _Lists.lastIndexOf(this, element, start);
}
- Touch last() => this[length - 1];
+ Touch get last => this[length - 1];
Touch removeLast() {
- throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+ throw new UnsupportedError("Cannot removeLast on immutable List.");
}
void setRange(int start, int rangeLength, List<Touch> from, [int startFrom]) {
- throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+ throw new UnsupportedError("Cannot setRange on immutable List.");
}
void removeRange(int start, int rangeLength) {
- throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+ throw new UnsupportedError("Cannot removeRange on immutable List.");
}
void insertRange(int start, int rangeLength, [Touch initialValue]) {
- throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+ throw new UnsupportedError("Cannot insertRange on immutable List.");
}
List<Touch> getRange(int start, int rangeLength) =>
@@ -34216,7 +34327,7 @@
String label;
/** @domName HTMLTrackElement.readyState */
- abstract int get readyState;
+ int get readyState;
/** @domName HTMLTrackElement.src */
String src;
@@ -34225,12 +34336,12 @@
String srclang;
/** @domName HTMLTrackElement.track */
- abstract TextTrack get track;
+ TextTrack get track;
}
class _TrackElementImpl extends _ElementImpl implements TrackElement native "*HTMLTrackElement" {
- bool get defaultValue() => JS("bool", "#.default", this);
+ bool get defaultValue => JS("bool", "#.default", this);
void set defaultValue(bool value) {
JS("void", "#.default = #", this, value);
@@ -34258,7 +34369,7 @@
abstract class TrackEvent implements Event {
/** @domName TrackEvent.track */
- abstract Object get track;
+ Object get track;
}
class _TrackEventImpl extends _EventImpl implements TrackEvent native "*TrackEvent" {
@@ -34275,10 +34386,10 @@
abstract class TransitionEvent implements Event {
/** @domName WebKitTransitionEvent.elapsedTime */
- abstract num get elapsedTime;
+ num get elapsedTime;
/** @domName WebKitTransitionEvent.propertyName */
- abstract String get propertyName;
+ String get propertyName;
}
class _TransitionEventImpl extends _EventImpl implements TransitionEvent native "*WebKitTransitionEvent" {
@@ -34300,16 +34411,16 @@
Node currentNode;
/** @domName TreeWalker.expandEntityReferences */
- abstract bool get expandEntityReferences;
+ bool get expandEntityReferences;
/** @domName TreeWalker.filter */
- abstract NodeFilter get filter;
+ NodeFilter get filter;
/** @domName TreeWalker.root */
- abstract Node get root;
+ Node get root;
/** @domName TreeWalker.whatToShow */
- abstract int get whatToShow;
+ int get whatToShow;
/** @domName TreeWalker.firstChild */
Node firstChild();
@@ -34369,31 +34480,31 @@
abstract class UIEvent implements Event {
/** @domName UIEvent.charCode */
- abstract int get charCode;
+ int get charCode;
/** @domName UIEvent.detail */
- abstract int get detail;
+ int get detail;
/** @domName UIEvent.keyCode */
- abstract int get keyCode;
+ int get keyCode;
/** @domName UIEvent.layerX */
- abstract int get layerX;
+ int get layerX;
/** @domName UIEvent.layerY */
- abstract int get layerY;
+ int get layerY;
/** @domName UIEvent.pageX */
- abstract int get pageX;
+ int get pageX;
/** @domName UIEvent.pageY */
- abstract int get pageY;
+ int get pageY;
/** @domName UIEvent.view */
- abstract Window get view;
+ Window get view;
/** @domName UIEvent.which */
- abstract int get which;
+ int get which;
/** @domName UIEvent.initUIEvent */
void initUIEvent(String type, bool canBubble, bool cancelable, LocalWindow view, int detail);
@@ -34416,7 +34527,7 @@
final int pageY;
Window get view => _convertNativeToDart_Window(this._view);
- Window get _view() => JS("Window", "#.view", this);
+ Window get _view => JS("Window", "#.view", this);
final int which;
@@ -34467,7 +34578,7 @@
static const int BYTES_PER_ELEMENT = 2;
/** @domName Uint16Array.length */
- abstract int get length;
+ int get length;
/** @domName Uint16Array.setElements */
void setElements(Object array, [int offset]);
@@ -34498,15 +34609,15 @@
// From Collection<int>:
void add(int value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addLast(int value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addAll(Collection<int> collection) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
bool contains(int element) => _Collections.contains(this, element);
@@ -34522,38 +34633,38 @@
bool some(bool f(int element)) => _Collections.some(this, f);
- bool isEmpty() => this.length == 0;
+ bool get isEmpty => this.length == 0;
// From List<int>:
void sort([Comparator<int> compare = Comparable.compare]) {
- throw const UnsupportedOperationException("Cannot sort immutable List.");
+ throw new UnsupportedError("Cannot sort immutable List.");
}
int indexOf(int element, [int start = 0]) =>
_Lists.indexOf(this, element, start, this.length);
int lastIndexOf(int element, [int start]) {
- if (start === null) start = length - 1;
+ if (start == null) start = length - 1;
return _Lists.lastIndexOf(this, element, start);
}
- int last() => this[length - 1];
+ int get last => this[length - 1];
int removeLast() {
- throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+ throw new UnsupportedError("Cannot removeLast on immutable List.");
}
void setRange(int start, int rangeLength, List<int> from, [int startFrom]) {
- throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+ throw new UnsupportedError("Cannot setRange on immutable List.");
}
void removeRange(int start, int rangeLength) {
- throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+ throw new UnsupportedError("Cannot removeRange on immutable List.");
}
void insertRange(int start, int rangeLength, [int initialValue]) {
- throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+ throw new UnsupportedError("Cannot insertRange on immutable List.");
}
List<int> getRange(int start, int rangeLength) =>
@@ -34586,7 +34697,7 @@
static const int BYTES_PER_ELEMENT = 4;
/** @domName Uint32Array.length */
- abstract int get length;
+ int get length;
/** @domName Uint32Array.setElements */
void setElements(Object array, [int offset]);
@@ -34617,15 +34728,15 @@
// From Collection<int>:
void add(int value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addLast(int value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addAll(Collection<int> collection) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
bool contains(int element) => _Collections.contains(this, element);
@@ -34641,38 +34752,38 @@
bool some(bool f(int element)) => _Collections.some(this, f);
- bool isEmpty() => this.length == 0;
+ bool get isEmpty => this.length == 0;
// From List<int>:
void sort([Comparator<int> compare = Comparable.compare]) {
- throw const UnsupportedOperationException("Cannot sort immutable List.");
+ throw new UnsupportedError("Cannot sort immutable List.");
}
int indexOf(int element, [int start = 0]) =>
_Lists.indexOf(this, element, start, this.length);
int lastIndexOf(int element, [int start]) {
- if (start === null) start = length - 1;
+ if (start == null) start = length - 1;
return _Lists.lastIndexOf(this, element, start);
}
- int last() => this[length - 1];
+ int get last => this[length - 1];
int removeLast() {
- throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+ throw new UnsupportedError("Cannot removeLast on immutable List.");
}
void setRange(int start, int rangeLength, List<int> from, [int startFrom]) {
- throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+ throw new UnsupportedError("Cannot setRange on immutable List.");
}
void removeRange(int start, int rangeLength) {
- throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+ throw new UnsupportedError("Cannot removeRange on immutable List.");
}
void insertRange(int start, int rangeLength, [int initialValue]) {
- throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+ throw new UnsupportedError("Cannot insertRange on immutable List.");
}
List<int> getRange(int start, int rangeLength) =>
@@ -34705,7 +34816,7 @@
static const int BYTES_PER_ELEMENT = 1;
/** @domName Uint8Array.length */
- abstract int get length;
+ int get length;
/** @domName Uint8Array.setElements */
void setElements(Object array, [int offset]);
@@ -34736,15 +34847,15 @@
// From Collection<int>:
void add(int value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addLast(int value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addAll(Collection<int> collection) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
bool contains(int element) => _Collections.contains(this, element);
@@ -34760,38 +34871,38 @@
bool some(bool f(int element)) => _Collections.some(this, f);
- bool isEmpty() => this.length == 0;
+ bool get isEmpty => this.length == 0;
// From List<int>:
void sort([Comparator<int> compare = Comparable.compare]) {
- throw const UnsupportedOperationException("Cannot sort immutable List.");
+ throw new UnsupportedError("Cannot sort immutable List.");
}
int indexOf(int element, [int start = 0]) =>
_Lists.indexOf(this, element, start, this.length);
int lastIndexOf(int element, [int start]) {
- if (start === null) start = length - 1;
+ if (start == null) start = length - 1;
return _Lists.lastIndexOf(this, element, start);
}
- int last() => this[length - 1];
+ int get last => this[length - 1];
int removeLast() {
- throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+ throw new UnsupportedError("Cannot removeLast on immutable List.");
}
void setRange(int start, int rangeLength, List<int> from, [int startFrom]) {
- throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+ throw new UnsupportedError("Cannot setRange on immutable List.");
}
void removeRange(int start, int rangeLength) {
- throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+ throw new UnsupportedError("Cannot removeRange on immutable List.");
}
void insertRange(int start, int rangeLength, [int initialValue]) {
- throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+ throw new UnsupportedError("Cannot insertRange on immutable List.");
}
List<int> getRange(int start, int rangeLength) =>
@@ -34822,7 +34933,7 @@
_TypedArrayFactoryProvider.createUint8ClampedArray_fromBuffer(buffer, byteOffset, length);
/** @domName Uint8ClampedArray.length */
- abstract int get length;
+ int get length;
/** @domName Uint8ClampedArray.setElements */
void setElements(Object array, [int offset]);
@@ -34862,31 +34973,31 @@
abstract class ValidityState {
/** @domName ValidityState.customError */
- abstract bool get customError;
+ bool get customError;
/** @domName ValidityState.patternMismatch */
- abstract bool get patternMismatch;
+ bool get patternMismatch;
/** @domName ValidityState.rangeOverflow */
- abstract bool get rangeOverflow;
+ bool get rangeOverflow;
/** @domName ValidityState.rangeUnderflow */
- abstract bool get rangeUnderflow;
+ bool get rangeUnderflow;
/** @domName ValidityState.stepMismatch */
- abstract bool get stepMismatch;
+ bool get stepMismatch;
/** @domName ValidityState.tooLong */
- abstract bool get tooLong;
+ bool get tooLong;
/** @domName ValidityState.typeMismatch */
- abstract bool get typeMismatch;
+ bool get typeMismatch;
/** @domName ValidityState.valid */
- abstract bool get valid;
+ bool get valid;
/** @domName ValidityState.valueMissing */
- abstract bool get valueMissing;
+ bool get valueMissing;
}
class _ValidityStateImpl implements ValidityState native "*ValidityState" {
@@ -34927,22 +35038,22 @@
String poster;
/** @domName HTMLVideoElement.videoHeight */
- abstract int get videoHeight;
+ int get videoHeight;
/** @domName HTMLVideoElement.videoWidth */
- abstract int get videoWidth;
+ int get videoWidth;
/** @domName HTMLVideoElement.webkitDecodedFrameCount */
- abstract int get webkitDecodedFrameCount;
+ int get webkitDecodedFrameCount;
/** @domName HTMLVideoElement.webkitDisplayingFullscreen */
- abstract bool get webkitDisplayingFullscreen;
+ bool get webkitDisplayingFullscreen;
/** @domName HTMLVideoElement.webkitDroppedFrameCount */
- abstract int get webkitDroppedFrameCount;
+ int get webkitDroppedFrameCount;
/** @domName HTMLVideoElement.webkitSupportsFullscreen */
- abstract bool get webkitSupportsFullscreen;
+ bool get webkitSupportsFullscreen;
/** @domName HTMLVideoElement.width */
int width;
@@ -34994,6 +35105,7 @@
// WARNING: Do not edit - generated code.
+
typedef void VoidCallback();
// 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
@@ -35034,13 +35146,13 @@
abstract class WebGLActiveInfo {
/** @domName WebGLActiveInfo.name */
- abstract String get name;
+ String get name;
/** @domName WebGLActiveInfo.size */
- abstract int get size;
+ int get size;
/** @domName WebGLActiveInfo.type */
- abstract int get type;
+ int get type;
}
class _WebGLActiveInfoImpl implements WebGLActiveInfo native "*WebGLActiveInfo" {
@@ -35135,7 +35247,7 @@
abstract class WebGLContextEvent implements Event {
/** @domName WebGLContextEvent.statusMessage */
- abstract String get statusMessage;
+ String get statusMessage;
}
class _WebGLContextEventImpl extends _EventImpl implements WebGLContextEvent native "*WebGLContextEvent" {
@@ -35847,10 +35959,10 @@
static const int ZERO = 0;
/** @domName WebGLRenderingContext.drawingBufferHeight */
- abstract int get drawingBufferHeight;
+ int get drawingBufferHeight;
/** @domName WebGLRenderingContext.drawingBufferWidth */
- abstract int get drawingBufferWidth;
+ int get drawingBufferWidth;
/** @domName WebGLRenderingContext.activeTexture */
void activeTexture(int texture);
@@ -36021,7 +36133,7 @@
WebGLActiveInfo getActiveUniform(WebGLProgram program, int index);
/** @domName WebGLRenderingContext.getAttachedShaders */
- List<Object> getAttachedShaders(WebGLProgram program);
+ void getAttachedShaders(WebGLProgram program);
/** @domName WebGLRenderingContext.getAttribLocation */
int getAttribLocation(WebGLProgram program, String name);
@@ -36036,7 +36148,7 @@
int getError();
/** @domName WebGLRenderingContext.getExtension */
- Object getExtension(String name);
+ void getExtension(String name);
/** @domName WebGLRenderingContext.getFramebufferAttachmentParameter */
Object getFramebufferAttachmentParameter(int target, int attachment, int pname);
@@ -36382,7 +36494,7 @@
_WebGLActiveInfoImpl getActiveUniform(_WebGLProgramImpl program, int index) native;
- List<Object> getAttachedShaders(_WebGLProgramImpl program) native;
+ void getAttachedShaders(_WebGLProgramImpl program) native;
int getAttribLocation(_WebGLProgramImpl program, String name) native;
@@ -36392,7 +36504,7 @@
int getError() native;
- Object getExtension(String name) native;
+ void getExtension(String name) native;
Object getFramebufferAttachmentParameter(int target, int attachment, int pname) native;
@@ -36475,14 +36587,14 @@
void stencilOpSeparate(int face, int fail, int zfail, int zpass) native;
void texImage2D(int target, int level, int internalformat, int format_OR_width, int height_OR_type, border_OR_canvas_OR_image_OR_pixels_OR_video, [format, type, pixels]) {
- if ((border_OR_canvas_OR_image_OR_pixels_OR_video is int || border_OR_canvas_OR_image_OR_pixels_OR_video === null) &&
- (format is int || format === null) &&
- (type is int || type === null) &&
- (pixels is ArrayBufferView || pixels === null)) {
+ if ((border_OR_canvas_OR_image_OR_pixels_OR_video is int || border_OR_canvas_OR_image_OR_pixels_OR_video == null) &&
+ (format is int || format == null) &&
+ (type is int || type == null) &&
+ (pixels is ArrayBufferView || pixels == null)) {
_texImage2D_1(target, level, internalformat, format_OR_width, height_OR_type, border_OR_canvas_OR_image_OR_pixels_OR_video, format, type, pixels);
return;
}
- if ((border_OR_canvas_OR_image_OR_pixels_OR_video is ImageData || border_OR_canvas_OR_image_OR_pixels_OR_video === null) &&
+ if ((border_OR_canvas_OR_image_OR_pixels_OR_video is ImageData || border_OR_canvas_OR_image_OR_pixels_OR_video == null) &&
!?format &&
!?type &&
!?pixels) {
@@ -36490,21 +36602,21 @@
_texImage2D_2(target, level, internalformat, format_OR_width, height_OR_type, pixels_1);
return;
}
- if ((border_OR_canvas_OR_image_OR_pixels_OR_video is ImageElement || border_OR_canvas_OR_image_OR_pixels_OR_video === null) &&
+ if ((border_OR_canvas_OR_image_OR_pixels_OR_video is ImageElement || border_OR_canvas_OR_image_OR_pixels_OR_video == null) &&
!?format &&
!?type &&
!?pixels) {
_texImage2D_3(target, level, internalformat, format_OR_width, height_OR_type, border_OR_canvas_OR_image_OR_pixels_OR_video);
return;
}
- if ((border_OR_canvas_OR_image_OR_pixels_OR_video is CanvasElement || border_OR_canvas_OR_image_OR_pixels_OR_video === null) &&
+ if ((border_OR_canvas_OR_image_OR_pixels_OR_video is CanvasElement || border_OR_canvas_OR_image_OR_pixels_OR_video == null) &&
!?format &&
!?type &&
!?pixels) {
_texImage2D_4(target, level, internalformat, format_OR_width, height_OR_type, border_OR_canvas_OR_image_OR_pixels_OR_video);
return;
}
- if ((border_OR_canvas_OR_image_OR_pixels_OR_video is VideoElement || border_OR_canvas_OR_image_OR_pixels_OR_video === null) &&
+ if ((border_OR_canvas_OR_image_OR_pixels_OR_video is VideoElement || border_OR_canvas_OR_image_OR_pixels_OR_video == null) &&
!?format &&
!?type &&
!?pixels) {
@@ -36524,32 +36636,32 @@
void texParameteri(int target, int pname, int param) native;
void texSubImage2D(int target, int level, int xoffset, int yoffset, int format_OR_width, int height_OR_type, canvas_OR_format_OR_image_OR_pixels_OR_video, [type, pixels]) {
- if ((canvas_OR_format_OR_image_OR_pixels_OR_video is int || canvas_OR_format_OR_image_OR_pixels_OR_video === null) &&
- (type is int || type === null) &&
- (pixels is ArrayBufferView || pixels === null)) {
+ if ((canvas_OR_format_OR_image_OR_pixels_OR_video is int || canvas_OR_format_OR_image_OR_pixels_OR_video == null) &&
+ (type is int || type == null) &&
+ (pixels is ArrayBufferView || pixels == null)) {
_texSubImage2D_1(target, level, xoffset, yoffset, format_OR_width, height_OR_type, canvas_OR_format_OR_image_OR_pixels_OR_video, type, pixels);
return;
}
- if ((canvas_OR_format_OR_image_OR_pixels_OR_video is ImageData || canvas_OR_format_OR_image_OR_pixels_OR_video === null) &&
+ if ((canvas_OR_format_OR_image_OR_pixels_OR_video is ImageData || canvas_OR_format_OR_image_OR_pixels_OR_video == null) &&
!?type &&
!?pixels) {
var pixels_1 = _convertDartToNative_ImageData(canvas_OR_format_OR_image_OR_pixels_OR_video);
_texSubImage2D_2(target, level, xoffset, yoffset, format_OR_width, height_OR_type, pixels_1);
return;
}
- if ((canvas_OR_format_OR_image_OR_pixels_OR_video is ImageElement || canvas_OR_format_OR_image_OR_pixels_OR_video === null) &&
+ if ((canvas_OR_format_OR_image_OR_pixels_OR_video is ImageElement || canvas_OR_format_OR_image_OR_pixels_OR_video == null) &&
!?type &&
!?pixels) {
_texSubImage2D_3(target, level, xoffset, yoffset, format_OR_width, height_OR_type, canvas_OR_format_OR_image_OR_pixels_OR_video);
return;
}
- if ((canvas_OR_format_OR_image_OR_pixels_OR_video is CanvasElement || canvas_OR_format_OR_image_OR_pixels_OR_video === null) &&
+ if ((canvas_OR_format_OR_image_OR_pixels_OR_video is CanvasElement || canvas_OR_format_OR_image_OR_pixels_OR_video == null) &&
!?type &&
!?pixels) {
_texSubImage2D_4(target, level, xoffset, yoffset, format_OR_width, height_OR_type, canvas_OR_format_OR_image_OR_pixels_OR_video);
return;
}
- if ((canvas_OR_format_OR_image_OR_pixels_OR_video is VideoElement || canvas_OR_format_OR_image_OR_pixels_OR_video === null) &&
+ if ((canvas_OR_format_OR_image_OR_pixels_OR_video is VideoElement || canvas_OR_format_OR_image_OR_pixels_OR_video == null) &&
!?type &&
!?pixels) {
_texSubImage2D_5(target, level, xoffset, yoffset, format_OR_width, height_OR_type, canvas_OR_format_OR_image_OR_pixels_OR_video);
@@ -36647,13 +36759,13 @@
abstract class WebGLShaderPrecisionFormat {
/** @domName WebGLShaderPrecisionFormat.precision */
- abstract int get precision;
+ int get precision;
/** @domName WebGLShaderPrecisionFormat.rangeMax */
- abstract int get rangeMax;
+ int get rangeMax;
/** @domName WebGLShaderPrecisionFormat.rangeMin */
- abstract int get rangeMin;
+ int get rangeMin;
}
class _WebGLShaderPrecisionFormatImpl implements WebGLShaderPrecisionFormat native "*WebGLShaderPrecisionFormat" {
@@ -36708,7 +36820,7 @@
_AnimationImpl operator[](int index) => JS("_AnimationImpl", "#[#]", this, index);
void operator[]=(int index, _AnimationImpl value) {
- throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+ throw new UnsupportedError("Cannot assign element of immutable List.");
}
// -- start List<Animation> mixins.
// Animation is the element type.
@@ -36725,15 +36837,15 @@
// From Collection<Animation>:
void add(Animation value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addLast(Animation value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addAll(Collection<Animation> collection) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
bool contains(Animation element) => _Collections.contains(this, element);
@@ -36749,38 +36861,38 @@
bool some(bool f(Animation element)) => _Collections.some(this, f);
- bool isEmpty() => this.length == 0;
+ bool get isEmpty => this.length == 0;
// From List<Animation>:
void sort([Comparator<Animation> compare = Comparable.compare]) {
- throw const UnsupportedOperationException("Cannot sort immutable List.");
+ throw new UnsupportedError("Cannot sort immutable List.");
}
int indexOf(Animation element, [int start = 0]) =>
_Lists.indexOf(this, element, start, this.length);
int lastIndexOf(Animation element, [int start]) {
- if (start === null) start = length - 1;
+ if (start == null) start = length - 1;
return _Lists.lastIndexOf(this, element, start);
}
- Animation last() => this[length - 1];
+ Animation get last => this[length - 1];
Animation removeLast() {
- throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+ throw new UnsupportedError("Cannot removeLast on immutable List.");
}
void setRange(int start, int rangeLength, List<Animation> from, [int startFrom]) {
- throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+ throw new UnsupportedError("Cannot setRange on immutable List.");
}
void removeRange(int start, int rangeLength) {
- throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+ throw new UnsupportedError("Cannot removeRange on immutable List.");
}
void insertRange(int start, int rangeLength, [Animation initialValue]) {
- throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+ throw new UnsupportedError("Cannot insertRange on immutable List.");
}
List<Animation> getRange(int start, int rangeLength) =>
@@ -36824,7 +36936,7 @@
static const int CSS_FILTER_SEPIA = 3;
/** @domName WebKitCSSFilterValue.operationType */
- abstract int get operationType;
+ int get operationType;
}
class _WebKitCSSFilterValueImpl extends _CSSValueListImpl implements WebKitCSSFilterValue native "*WebKitCSSFilterValue" {
@@ -36841,13 +36953,13 @@
abstract class WebKitNamedFlow implements EventTarget {
/** @domName WebKitNamedFlow.firstEmptyRegionIndex */
- abstract int get firstEmptyRegionIndex;
+ int get firstEmptyRegionIndex;
/** @domName WebKitNamedFlow.name */
- abstract String get name;
+ String get name;
/** @domName WebKitNamedFlow.overset */
- abstract bool get overset;
+ bool get overset;
/** @domName WebKitNamedFlow.addEventListener */
void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
@@ -36894,6 +37006,7 @@
// WARNING: Do not edit - generated code.
+
/// @domName WebSocket
abstract class WebSocket implements EventTarget {
@@ -36913,25 +37026,25 @@
static const int OPEN = 1;
/** @domName WebSocket.URL */
- abstract String get URL;
+ String get URL;
/** @domName WebSocket.binaryType */
String binaryType;
/** @domName WebSocket.bufferedAmount */
- abstract int get bufferedAmount;
+ int get bufferedAmount;
/** @domName WebSocket.extensions */
- abstract String get extensions;
+ String get extensions;
/** @domName WebSocket.protocol */
- abstract String get protocol;
+ String get protocol;
/** @domName WebSocket.readyState */
- abstract int get readyState;
+ int get readyState;
/** @domName WebSocket.url */
- abstract String get url;
+ String get url;
/** @domName WebSocket.addEventListener */
void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
@@ -37005,17 +37118,18 @@
// 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.
+
/// @domName WheelEvent
abstract class WheelEvent implements MouseEvent {
/** @domName WheelEvent.webkitDirectionInvertedFromDevice */
- abstract bool get webkitDirectionInvertedFromDevice;
+ bool get webkitDirectionInvertedFromDevice;
/** @domName WheelEvent.wheelDeltaX */
- abstract int get $dom_wheelDeltaX;
+ int get $dom_wheelDeltaX;
/** @domName WheelEvent.wheelDeltaY */
- abstract int get $dom_wheelDeltaY;
+ int get $dom_wheelDeltaY;
/** @domName WheelEvent.initWebKitWheelEvent */
void initWebKitWheelEvent(int wheelDeltaX, int wheelDeltaY, LocalWindow view, int screenX, int screenY, int clientX, int clientY, bool ctrlKey, bool altKey, bool shiftKey, bool metaKey);
@@ -37064,7 +37178,7 @@
}
return 0;
}
- throw const UnsupportedOperationException(
+ throw new UnsupportedError(
'deltaY is not supported');
}
@@ -37092,7 +37206,7 @@
}
return 0;
}
- throw const UnsupportedOperationException(
+ throw new UnsupportedError(
'deltaX is not supported');
}
@@ -37158,22 +37272,22 @@
static const int TEMPORARY = 0;
/** @domName WorkerContext.indexedDB */
- abstract IDBFactory get indexedDB;
+ IDBFactory get indexedDB;
/** @domName WorkerContext.location */
- abstract WorkerLocation get location;
+ WorkerLocation get location;
/** @domName WorkerContext.navigator */
- abstract WorkerNavigator get navigator;
+ WorkerNavigator get navigator;
/** @domName WorkerContext.self */
- abstract WorkerContext get self;
+ WorkerContext get self;
/** @domName WorkerContext.webkitIndexedDB */
- abstract IDBFactory get webkitIndexedDB;
+ IDBFactory get webkitIndexedDB;
/** @domName WorkerContext.webkitNotifications */
- abstract NotificationCenter get webkitNotifications;
+ NotificationCenter get webkitNotifications;
/** @domName WorkerContext.addEventListener */
void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
@@ -37316,28 +37430,28 @@
abstract class WorkerLocation {
/** @domName WorkerLocation.hash */
- abstract String get hash;
+ String get hash;
/** @domName WorkerLocation.host */
- abstract String get host;
+ String get host;
/** @domName WorkerLocation.hostname */
- abstract String get hostname;
+ String get hostname;
/** @domName WorkerLocation.href */
- abstract String get href;
+ String get href;
/** @domName WorkerLocation.pathname */
- abstract String get pathname;
+ String get pathname;
/** @domName WorkerLocation.port */
- abstract String get port;
+ String get port;
/** @domName WorkerLocation.protocol */
- abstract String get protocol;
+ String get protocol;
/** @domName WorkerLocation.search */
- abstract String get search;
+ String get search;
/** @domName WorkerLocation.toString */
String toString();
@@ -37373,19 +37487,19 @@
abstract class WorkerNavigator {
/** @domName WorkerNavigator.appName */
- abstract String get appName;
+ String get appName;
/** @domName WorkerNavigator.appVersion */
- abstract String get appVersion;
+ String get appVersion;
/** @domName WorkerNavigator.onLine */
- abstract bool get onLine;
+ bool get onLine;
/** @domName WorkerNavigator.platform */
- abstract String get platform;
+ String get platform;
/** @domName WorkerNavigator.userAgent */
- abstract String get userAgent;
+ String get userAgent;
}
class _WorkerNavigatorImpl implements WorkerNavigator native "*WorkerNavigator" {
@@ -37462,13 +37576,13 @@
static const int TYPE_ERR = 52;
/** @domName XPathException.code */
- abstract int get code;
+ int get code;
/** @domName XPathException.message */
- abstract String get message;
+ String get message;
/** @domName XPathException.name */
- abstract String get name;
+ String get name;
/** @domName XPathException.toString */
String toString();
@@ -37548,25 +37662,25 @@
static const int UNORDERED_NODE_SNAPSHOT_TYPE = 6;
/** @domName XPathResult.booleanValue */
- abstract bool get booleanValue;
+ bool get booleanValue;
/** @domName XPathResult.invalidIteratorState */
- abstract bool get invalidIteratorState;
+ bool get invalidIteratorState;
/** @domName XPathResult.numberValue */
- abstract num get numberValue;
+ num get numberValue;
/** @domName XPathResult.resultType */
- abstract int get resultType;
+ int get resultType;
/** @domName XPathResult.singleNodeValue */
- abstract Node get singleNodeValue;
+ Node get singleNodeValue;
/** @domName XPathResult.snapshotLength */
- abstract int get snapshotLength;
+ int get snapshotLength;
/** @domName XPathResult.stringValue */
- abstract String get stringValue;
+ String get stringValue;
/** @domName XPathResult.iterateNext */
Node iterateNext();
@@ -37735,6 +37849,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.
+
class _Elements {
@@ -38335,9 +38450,7 @@
void focus();
void blur();
void close();
- void postMessage(Dynamic message,
- String targetOrigin,
- [List messagePorts = null]);
+ void postMessage(var message, String targetOrigin, [List messagePorts = null]);
}
abstract class Location {
@@ -38348,7 +38461,8 @@
void back();
void forward();
void go(int distance);
-}// Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file
+}
+// Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
@@ -38999,7 +39113,7 @@
}
static bool isEmpty(Iterable<Object> iterable) {
- return !iterable.iterator().hasNext();
+ return !iterable.iterator().hasNext;
}
}
// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
@@ -39192,7 +39306,7 @@
void receive(callback(var message)) {
_callback = callback;
- if (_listener === null) {
+ if (_listener == null) {
_listener = (Event e) {
var data = JSON.parse(_getPortSyncEventData(e));
var replyTo = data[0];
@@ -39206,7 +39320,7 @@
void close() {
_portMap.remove(_portId);
- if (_listener !== null) window.on[_listenerName].remove(_listener);
+ if (_listener != null) window.on[_listenerName].remove(_listener);
}
SendPortSync toSendPort() {
@@ -39364,7 +39478,7 @@
* no measurements were actually requested.
*/
void _addMeasurementFrameCallback(TimeoutHandler callback) {
- if (_pendingMeasurementFrameCallbacks === null) {
+ if (_pendingMeasurementFrameCallbacks == null) {
_pendingMeasurementFrameCallbacks = <TimeoutHandler>[];
_maybeScheduleMeasurementFrame();
}
@@ -39381,7 +39495,7 @@
*/
Future _createMeasurementFuture(ComputeValue computeValue,
Completer completer) {
- if (_pendingRequests === null) {
+ if (_pendingRequests == null) {
_pendingRequests = <_MeasurementRequest>[];
_maybeScheduleMeasurementFrame();
}
@@ -39397,7 +39511,7 @@
// We must compute all new values before fulfilling the futures as
// the onComplete callbacks for the futures could modify the DOM making
// subsequent measurement calculations expensive to compute.
- if (_pendingRequests !== null) {
+ if (_pendingRequests != null) {
for (_MeasurementRequest request in _pendingRequests) {
try {
request.value = request.computeValue();
@@ -39412,7 +39526,7 @@
final readyMeasurementFrameCallbacks = _pendingMeasurementFrameCallbacks;
_pendingRequests = null;
_pendingMeasurementFrameCallbacks = null;
- if (completedRequests !== null) {
+ if (completedRequests != null) {
for (_MeasurementRequest request in completedRequests) {
if (request.exception) {
request.completer.completeException(request.value);
@@ -39422,7 +39536,7 @@
}
}
- if (readyMeasurementFrameCallbacks !== null) {
+ if (readyMeasurementFrameCallbacks != null) {
for (TimeoutHandler handler in readyMeasurementFrameCallbacks) {
// TODO(jacobr): wrap each call to a handler in a try-catch block.
handler();
@@ -39491,7 +39605,7 @@
}
static bool isPrimitive(x) {
- return (x === null) || (x is String) || (x is num) || (x is bool);
+ return (x == null) || (x is String) || (x is num) || (x is bool);
}
}
@@ -39503,7 +39617,7 @@
List visitList(List list) {
List copy = _visited[list];
- if (copy !== null) return copy;
+ if (copy != null) return copy;
int len = list.length;
@@ -39518,7 +39632,7 @@
Map visitMap(Map map) {
Map copy = _visited[map];
- if (copy !== null) return copy;
+ if (copy != null) return copy;
// TODO(floitsch): we loose the generic type of the map.
copy = new Map();
@@ -39539,7 +39653,7 @@
visitList(List list) {
int copyId = _visited[list];
- if (copyId !== null) return ['ref', copyId];
+ if (copyId != null) return ['ref', copyId];
int id = _nextFreeRefId++;
_visited[list] = id;
@@ -39550,12 +39664,12 @@
visitMap(Map map) {
int copyId = _visited[map];
- if (copyId !== null) return ['ref', copyId];
+ if (copyId != null) return ['ref', copyId];
int id = _nextFreeRefId++;
_visited[map] = id;
- var keys = _serializeList(map.getKeys());
- var values = _serializeList(map.getValues());
+ var keys = _serializeList(map.keys);
+ var values = _serializeList(map.values);
// TODO(floitsch): we are losing the generic type.
return ['map', id, keys, values];
}
@@ -39572,17 +39686,17 @@
/** Deserializes arrays created with [_Serializer]. */
class _Deserializer {
- Map<int, Dynamic> _deserialized;
+ Map<int, dynamic> _deserialized;
_Deserializer();
static bool isPrimitive(x) {
- return (x === null) || (x is String) || (x is num) || (x is bool);
+ return (x == null) || (x is String) || (x is num) || (x is bool);
}
deserialize(x) {
if (isPrimitive(x)) return x;
- // TODO(floitsch): this should be new HashMap<int, var|Dynamic>()
+ // TODO(floitsch): this should be new HashMap<int, dynamic>()
_deserialized = new HashMap();
return _deserializeHelper(x);
}
@@ -39602,7 +39716,7 @@
_deserializeRef(List x) {
int id = x[1];
var result = _deserialized[id];
- assert(result !== null);
+ assert(result != null);
return result;
}
@@ -39959,7 +40073,7 @@
int findSlot(value) {
int length = values.length;
for (int i = 0; i < length; i++) {
- if (values[i] === value) return i;
+ if (identical(values[i], value)) return i;
}
values.add(value);
copies.add(null);
@@ -40058,7 +40172,7 @@
for ( ; i < length; i++) {
var element = e[i];
var elementCopy = walk(element);
- if (elementCopy !== element) {
+ if (!identical(elementCopy, element)) {
copy = readSlot(slot); // Cyclic reference may have created it.
if (true == copy) {
copy = JS('List', 'new Array(#)', length);
@@ -40124,7 +40238,7 @@
int findSlot(value) {
int length = values.length;
for (int i = 0; i < length; i++) {
- if (values[i] === value) return i;
+ if (identical(values[i], value)) return i;
}
values.add(value);
copies.add(null);
@@ -40232,9 +40346,7 @@
void close() => JS('void', '#.close()', _window);
- void postMessage(Dynamic message,
- String targetOrigin,
- [List messagePorts = null]) {
+ void postMessage(var message, String targetOrigin, [List messagePorts = null]) {
if (messagePorts == null) {
JS('void', '#.postMessage(#,#)', _window, message, targetOrigin);
} else {
@@ -40246,7 +40358,7 @@
_DOMWindowCrossFrameImpl(this._window);
static Window _createSafe(w) {
- if (w === window) {
+ if (identical(w, window)) {
return w;
} else {
// TODO(vsm): Cache or implement equality.
@@ -40270,7 +40382,7 @@
_LocationCrossFrameImpl(this._location);
static Location _createSafe(location) {
- if (location === window.location) {
+ if (identical(location, window.location)) {
return location;
} else {
// TODO(vsm): Cache or implement equality.
@@ -40295,7 +40407,7 @@
_HistoryCrossFrameImpl(this._history);
static History _createSafe(h) {
- if (h === window.history) {
+ if (identical(h, window.history)) {
return h;
} else {
// TODO(vsm): Cache or implement equality.
@@ -40668,7 +40780,7 @@
: super(array),
_length = array.length;
- bool hasNext() => _length > _pos;
+ bool get hasNext => _length > _pos;
final int _length; // Cache array length for faster access.
}
@@ -40679,11 +40791,11 @@
: _array = array,
_pos = 0;
- bool hasNext() => _array.length > _pos;
+ bool get hasNext => _array.length > _pos;
T next() {
- if (!hasNext()) {
- throw const NoMoreElementsException();
+ if (!hasNext) {
+ throw new StateError("No more elements");
}
return _array[_pos++];
}
diff --git a/lib/html/dartium/html_dartium.dart b/lib/html/dartium/html_dartium.dart
index c1e51fe..c9d103a 100644
--- a/lib/html/dartium/html_dartium.dart
+++ b/lib/html/dartium/html_dartium.dart
@@ -1,8 +1,8 @@
-#library('dart:html');
+library html;
-#import('dart:isolate');
-#import('dart:json');
-#import('dart:nativewrappers');
+import 'dart:isolate';
+import 'dart:json';
+import 'dart:nativewrappers';
// 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.
@@ -19,7 +19,7 @@
LocalWindow __window;
LocalWindow get window {
- if (__window !== null) {
+ if (__window != null) {
return __window;
}
__window = _Utils.window();
@@ -31,7 +31,7 @@
Document __document;
Document get document {
- if (__document !== null) {
+ if (__document != null) {
return __document;
}
__document = _document;
@@ -157,7 +157,7 @@
String name;
/** @domName HTMLAnchorElement.origin */
- abstract String get origin;
+ String get origin;
/** @domName HTMLAnchorElement.pathname */
String pathname;
@@ -303,31 +303,31 @@
static const int FILL_NONE = 0;
/** @domName WebKitAnimation.delay */
- abstract num get delay;
+ num get delay;
/** @domName WebKitAnimation.direction */
- abstract int get direction;
+ int get direction;
/** @domName WebKitAnimation.duration */
- abstract num get duration;
+ num get duration;
/** @domName WebKitAnimation.elapsedTime */
num elapsedTime;
/** @domName WebKitAnimation.ended */
- abstract bool get ended;
+ bool get ended;
/** @domName WebKitAnimation.fillMode */
- abstract int get fillMode;
+ int get fillMode;
/** @domName WebKitAnimation.iterationCount */
- abstract int get iterationCount;
+ int get iterationCount;
/** @domName WebKitAnimation.name */
- abstract String get name;
+ String get name;
/** @domName WebKitAnimation.paused */
- abstract bool get paused;
+ bool get paused;
/** @domName WebKitAnimation.pause */
void pause();
@@ -345,10 +345,10 @@
abstract class AnimationEvent implements Event {
/** @domName WebKitAnimationEvent.animationName */
- abstract String get animationName;
+ String get animationName;
/** @domName WebKitAnimationEvent.elapsedTime */
- abstract num get elapsedTime;
+ num get elapsedTime;
}
// 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
@@ -509,13 +509,13 @@
String coords;
/** @domName HTMLAreaElement.hash */
- abstract String get hash;
+ String get hash;
/** @domName HTMLAreaElement.host */
- abstract String get host;
+ String get host;
/** @domName HTMLAreaElement.hostname */
- abstract String get hostname;
+ String get hostname;
/** @domName HTMLAreaElement.href */
String href;
@@ -524,19 +524,19 @@
bool noHref;
/** @domName HTMLAreaElement.pathname */
- abstract String get pathname;
+ String get pathname;
/** @domName HTMLAreaElement.ping */
String ping;
/** @domName HTMLAreaElement.port */
- abstract String get port;
+ String get port;
/** @domName HTMLAreaElement.protocol */
- abstract String get protocol;
+ String get protocol;
/** @domName HTMLAreaElement.search */
- abstract String get search;
+ String get search;
/** @domName HTMLAreaElement.shape */
String shape;
@@ -607,7 +607,7 @@
factory ArrayBuffer(int length) => _ArrayBufferFactoryProvider.createArrayBuffer(length);
/** @domName ArrayBuffer.byteLength */
- abstract int get byteLength;
+ int get byteLength;
/** @domName ArrayBuffer.slice */
ArrayBuffer slice(int begin, [int end]);
@@ -644,13 +644,13 @@
abstract class ArrayBufferView {
/** @domName ArrayBufferView.buffer */
- abstract ArrayBuffer get buffer;
+ ArrayBuffer get buffer;
/** @domName ArrayBufferView.byteLength */
- abstract int get byteLength;
+ int get byteLength;
/** @domName ArrayBufferView.byteOffset */
- abstract int get byteOffset;
+ int get byteOffset;
}
// 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
@@ -677,16 +677,16 @@
abstract class Attr implements Node {
/** @domName Attr.isId */
- abstract bool get isId;
+ bool get isId;
/** @domName Attr.name */
- abstract String get name;
+ String get name;
/** @domName Attr.ownerElement */
- abstract Element get ownerElement;
+ Element get ownerElement;
/** @domName Attr.specified */
- abstract bool get specified;
+ bool get specified;
/** @domName Attr.value */
String value;
@@ -722,19 +722,19 @@
abstract class AudioBuffer {
/** @domName AudioBuffer.duration */
- abstract num get duration;
+ num get duration;
/** @domName AudioBuffer.gain */
num gain;
/** @domName AudioBuffer.length */
- abstract int get length;
+ int get length;
/** @domName AudioBuffer.numberOfChannels */
- abstract int get numberOfChannels;
+ int get numberOfChannels;
/** @domName AudioBuffer.sampleRate */
- abstract num get sampleRate;
+ num get sampleRate;
/** @domName AudioBuffer.getChannelData */
Float32Array getChannelData(int channelIndex);
@@ -745,6 +745,7 @@
// WARNING: Do not edit - generated code.
+
typedef void AudioBufferCallback(AudioBuffer audioBuffer);
// 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
@@ -790,7 +791,7 @@
AudioBuffer buffer;
/** @domName AudioBufferSourceNode.gain */
- abstract AudioGain get gain;
+ AudioGain get gain;
/** @domName AudioBufferSourceNode.loop */
bool loop;
@@ -799,10 +800,10 @@
bool looping;
/** @domName AudioBufferSourceNode.playbackRate */
- abstract AudioParam get playbackRate;
+ AudioParam get playbackRate;
/** @domName AudioBufferSourceNode.playbackState */
- abstract int get playbackState;
+ int get playbackState;
/** @domName AudioBufferSourceNode.start */
void start(num when, [num grainOffset, num grainDuration]);
@@ -837,11 +838,11 @@
int get playbackState native "AudioBufferSourceNode_playbackState_Getter";
void start(/*double*/ when, [/*double*/ grainOffset, /*double*/ grainDuration]) {
- if ((when is num || when === null) && !?grainOffset && !?grainDuration) {
+ if ((when is num || when == null) && !?grainOffset && !?grainDuration) {
_start_1(when);
return;
}
- if ((when is num || when === null) && (grainOffset is num || grainOffset === null) && (grainDuration is num || grainDuration === null)) {
+ if ((when is num || when == null) && (grainOffset is num || grainOffset == null) && (grainDuration is num || grainDuration == null)) {
_start_2(when, grainOffset, grainDuration);
return;
}
@@ -897,6 +898,7 @@
// WARNING: Do not edit - generated code.
+
/// @domName AudioContext
abstract class AudioContext implements EventTarget {
factory AudioContext() => _AudioContextFactoryProvider.createAudioContext();
@@ -907,19 +909,19 @@
AudioContextEvents get on;
/** @domName AudioContext.activeSourceCount */
- abstract int get activeSourceCount;
+ int get activeSourceCount;
/** @domName AudioContext.currentTime */
- abstract num get currentTime;
+ num get currentTime;
/** @domName AudioContext.destination */
- abstract AudioDestinationNode get destination;
+ AudioDestinationNode get destination;
/** @domName AudioContext.listener */
- abstract AudioListener get listener;
+ AudioListener get listener;
/** @domName AudioContext.sampleRate */
- abstract num get sampleRate;
+ num get sampleRate;
/** @domName AudioContext.createAnalyser */
RealtimeAnalyserNode createAnalyser();
@@ -1009,10 +1011,10 @@
BiquadFilterNode createBiquadFilter() native "AudioContext_createBiquadFilter_Callback";
AudioBuffer createBuffer(buffer_OR_numberOfChannels, mixToMono_OR_numberOfFrames, [/*float*/ sampleRate]) {
- if ((buffer_OR_numberOfChannels is int || buffer_OR_numberOfChannels === null) && (mixToMono_OR_numberOfFrames is int || mixToMono_OR_numberOfFrames === null) && (sampleRate is num || sampleRate === null)) {
+ if ((buffer_OR_numberOfChannels is int || buffer_OR_numberOfChannels == null) && (mixToMono_OR_numberOfFrames is int || mixToMono_OR_numberOfFrames == null) && (sampleRate is num || sampleRate == null)) {
return _createBuffer_1(buffer_OR_numberOfChannels, mixToMono_OR_numberOfFrames, sampleRate);
}
- if ((buffer_OR_numberOfChannels is ArrayBuffer || buffer_OR_numberOfChannels === null) && (mixToMono_OR_numberOfFrames is bool || mixToMono_OR_numberOfFrames === null) && !?sampleRate) {
+ if ((buffer_OR_numberOfChannels is ArrayBuffer || buffer_OR_numberOfChannels == null) && (mixToMono_OR_numberOfFrames is bool || mixToMono_OR_numberOfFrames == null) && !?sampleRate) {
return _createBuffer_2(buffer_OR_numberOfChannels, mixToMono_OR_numberOfFrames);
}
throw "Incorrect number or type of arguments";
@@ -1112,7 +1114,7 @@
abstract class AudioDestinationNode implements AudioNode {
/** @domName AudioDestinationNode.numberOfChannels */
- abstract int get numberOfChannels;
+ int get numberOfChannels;
}
// 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
@@ -1178,7 +1180,7 @@
abstract class AudioGainNode implements AudioNode {
/** @domName AudioGainNode.gain */
- abstract AudioGain get gain;
+ AudioGain get gain;
}
// 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
@@ -1248,13 +1250,13 @@
abstract class AudioNode {
/** @domName AudioNode.context */
- abstract AudioContext get context;
+ AudioContext get context;
/** @domName AudioNode.numberOfInputs */
- abstract int get numberOfInputs;
+ int get numberOfInputs;
/** @domName AudioNode.numberOfOutputs */
- abstract int get numberOfOutputs;
+ int get numberOfOutputs;
/** @domName AudioNode.connect */
void connect(destination, int output, [int input]);
@@ -1277,11 +1279,11 @@
int get numberOfOutputs native "AudioNode_numberOfOutputs_Getter";
void connect(destination, /*unsigned long*/ output, [/*unsigned long*/ input]) {
- if ((destination is AudioNode || destination === null) && (output is int || output === null) && (input is int || input === null)) {
+ if ((destination is AudioNode || destination == null) && (output is int || output == null) && (input is int || input == null)) {
_connect_1(destination, output, input);
return;
}
- if ((destination is AudioParam || destination === null) && (output is int || output === null) && !?input) {
+ if ((destination is AudioParam || destination == null) && (output is int || output == null) && !?input) {
_connect_2(destination, output);
return;
}
@@ -1317,7 +1319,7 @@
static const int SOUNDFIELD = 2;
/** @domName AudioPannerNode.coneGain */
- abstract AudioGain get coneGain;
+ AudioGain get coneGain;
/** @domName AudioPannerNode.coneInnerAngle */
num coneInnerAngle;
@@ -1329,7 +1331,7 @@
num coneOuterGain;
/** @domName AudioPannerNode.distanceGain */
- abstract AudioGain get distanceGain;
+ AudioGain get distanceGain;
/** @domName AudioPannerNode.distanceModel */
int distanceModel;
@@ -1416,19 +1418,19 @@
abstract class AudioParam {
/** @domName AudioParam.defaultValue */
- abstract num get defaultValue;
+ num get defaultValue;
/** @domName AudioParam.maxValue */
- abstract num get maxValue;
+ num get maxValue;
/** @domName AudioParam.minValue */
- abstract num get minValue;
+ num get minValue;
/** @domName AudioParam.name */
- abstract String get name;
+ String get name;
/** @domName AudioParam.units */
- abstract int get units;
+ int get units;
/** @domName AudioParam.value */
num value;
@@ -1496,10 +1498,10 @@
abstract class AudioProcessingEvent implements Event {
/** @domName AudioProcessingEvent.inputBuffer */
- abstract AudioBuffer get inputBuffer;
+ AudioBuffer get inputBuffer;
/** @domName AudioProcessingEvent.outputBuffer */
- abstract AudioBuffer get outputBuffer;
+ AudioBuffer get outputBuffer;
}
// 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
@@ -1569,7 +1571,7 @@
abstract class BarInfo {
/** @domName BarInfo.visible */
- abstract bool get visible;
+ bool get visible;
}
// 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
@@ -1670,16 +1672,16 @@
BatteryManagerEvents get on;
/** @domName BatteryManager.charging */
- abstract bool get charging;
+ bool get charging;
/** @domName BatteryManager.chargingTime */
- abstract num get chargingTime;
+ num get chargingTime;
/** @domName BatteryManager.dischargingTime */
- abstract num get dischargingTime;
+ num get dischargingTime;
/** @domName BatteryManager.level */
- abstract num get level;
+ num get level;
/** @domName BatteryManager.addEventListener */
void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
@@ -1749,7 +1751,7 @@
abstract class BeforeLoadEvent implements Event {
/** @domName BeforeLoadEvent.url */
- abstract String get url;
+ String get url;
}
// 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
@@ -1788,13 +1790,13 @@
static const int PEAKING = 5;
/** @domName BiquadFilterNode.Q */
- abstract AudioParam get Q;
+ AudioParam get Q;
/** @domName BiquadFilterNode.frequency */
- abstract AudioParam get frequency;
+ AudioParam get frequency;
/** @domName BiquadFilterNode.gain */
- abstract AudioParam get gain;
+ AudioParam get gain;
/** @domName BiquadFilterNode.type */
int type;
@@ -1843,10 +1845,10 @@
}
/** @domName Blob.size */
- abstract int get size;
+ int get size;
/** @domName Blob.type */
- abstract String get type;
+ String get type;
/** @domName Blob.slice */
Blob slice([int start, int end, String contentType]);
@@ -2025,7 +2027,7 @@
bool disabled;
/** @domName HTMLButtonElement.form */
- abstract FormElement get form;
+ FormElement get form;
/** @domName HTMLButtonElement.formAction */
String formAction;
@@ -2043,7 +2045,7 @@
String formTarget;
/** @domName HTMLButtonElement.labels */
- abstract List<Node> get labels;
+ List<Node> get labels;
/** @domName HTMLButtonElement.name */
String name;
@@ -2052,16 +2054,16 @@
String type;
/** @domName HTMLButtonElement.validationMessage */
- abstract String get validationMessage;
+ String get validationMessage;
/** @domName HTMLButtonElement.validity */
- abstract ValidityState get validity;
+ ValidityState get validity;
/** @domName HTMLButtonElement.value */
String value;
/** @domName HTMLButtonElement.willValidate */
- abstract bool get willValidate;
+ bool get willValidate;
/** @domName HTMLButtonElement.checkValidity */
bool checkValidity();
@@ -2185,7 +2187,7 @@
abstract class CSSFontFaceRule implements CSSRule {
/** @domName CSSFontFaceRule.style */
- abstract CSSStyleDeclaration get style;
+ CSSStyleDeclaration get style;
}
// 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
@@ -2208,13 +2210,13 @@
abstract class CSSImportRule implements CSSRule {
/** @domName CSSImportRule.href */
- abstract String get href;
+ String get href;
/** @domName CSSImportRule.media */
- abstract MediaList get media;
+ MediaList get media;
/** @domName CSSImportRule.styleSheet */
- abstract CSSStyleSheet get styleSheet;
+ CSSStyleSheet get styleSheet;
}
// 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
@@ -2244,7 +2246,7 @@
String keyText;
/** @domName WebKitCSSKeyframeRule.style */
- abstract CSSStyleDeclaration get style;
+ CSSStyleDeclaration get style;
}
// 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
@@ -2271,7 +2273,7 @@
abstract class CSSKeyframesRule implements CSSRule {
/** @domName WebKitCSSKeyframesRule.cssRules */
- abstract List<CSSRule> get cssRules;
+ List<CSSRule> get cssRules;
/** @domName WebKitCSSKeyframesRule.name */
String name;
@@ -2545,10 +2547,10 @@
abstract class CSSMediaRule implements CSSRule {
/** @domName CSSMediaRule.cssRules */
- abstract List<CSSRule> get cssRules;
+ List<CSSRule> get cssRules;
/** @domName CSSMediaRule.media */
- abstract MediaList get media;
+ MediaList get media;
/** @domName CSSMediaRule.deleteRule */
void deleteRule(int index);
@@ -2586,7 +2588,7 @@
String selectorText;
/** @domName CSSPageRule.style */
- abstract CSSStyleDeclaration get style;
+ CSSStyleDeclaration get style;
}
// 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
@@ -2671,7 +2673,7 @@
static const int CSS_VW = 26;
/** @domName CSSPrimitiveValue.primitiveType */
- abstract int get primitiveType;
+ int get primitiveType;
/** @domName CSSPrimitiveValue.getCounterValue */
Counter getCounterValue();
@@ -2750,13 +2752,13 @@
String cssText;
/** @domName CSSRule.parentRule */
- abstract CSSRule get parentRule;
+ CSSRule get parentRule;
/** @domName CSSRule.parentStyleSheet */
- abstract CSSStyleSheet get parentStyleSheet;
+ CSSStyleSheet get parentStyleSheet;
/** @domName CSSRule.type */
- abstract int get type;
+ int get type;
}
// 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
@@ -2790,7 +2792,7 @@
CSSRule operator[](int index) native "CSSRuleList_item_Callback";
void operator[]=(int index, CSSRule value) {
- throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+ throw new UnsupportedError("Cannot assign element of immutable List.");
}
// -- start List<CSSRule> mixins.
// CSSRule is the element type.
@@ -2807,15 +2809,15 @@
// From Collection<CSSRule>:
void add(CSSRule value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addLast(CSSRule value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addAll(Collection<CSSRule> collection) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
bool contains(CSSRule element) => _Collections.contains(this, element);
@@ -2831,38 +2833,38 @@
bool some(bool f(CSSRule element)) => _Collections.some(this, f);
- bool isEmpty() => this.length == 0;
+ bool get isEmpty => this.length == 0;
// From List<CSSRule>:
void sort([Comparator<CSSRule> compare = Comparable.compare]) {
- throw const UnsupportedOperationException("Cannot sort immutable List.");
+ throw new UnsupportedError("Cannot sort immutable List.");
}
int indexOf(CSSRule element, [int start = 0]) =>
_Lists.indexOf(this, element, start, this.length);
int lastIndexOf(CSSRule element, [int start]) {
- if (start === null) start = length - 1;
+ if (start == null) start = length - 1;
return _Lists.lastIndexOf(this, element, start);
}
- CSSRule last() => this[length - 1];
+ CSSRule get last => this[length - 1];
CSSRule removeLast() {
- throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+ throw new UnsupportedError("Cannot removeLast on immutable List.");
}
void setRange(int start, int rangeLength, List<CSSRule> from, [int startFrom]) {
- throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+ throw new UnsupportedError("Cannot setRange on immutable List.");
}
void removeRange(int start, int rangeLength) {
- throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+ throw new UnsupportedError("Cannot removeRange on immutable List.");
}
void insertRange(int start, int rangeLength, [CSSRule initialValue]) {
- throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+ throw new UnsupportedError("Cannot insertRange on immutable List.");
}
List<CSSRule> getRange(int start, int rangeLength) =>
@@ -2879,6 +2881,7 @@
// WARNING: Do not edit - generated code.
+
/// @domName CSSStyleDeclaration
abstract class CSSStyleDeclaration {
factory CSSStyleDeclaration() => _CSSStyleDeclarationFactoryProvider.createCSSStyleDeclaration();
@@ -2889,10 +2892,10 @@
String cssText;
/** @domName CSSStyleDeclaration.length */
- abstract int get length;
+ int get length;
/** @domName CSSStyleDeclaration.parentRule */
- abstract CSSRule get parentRule;
+ CSSRule get parentRule;
/** @domName CSSStyleDeclaration.getPropertyCSSValue */
CSSValue getPropertyCSSValue(String propertyName);
@@ -4768,7 +4771,7 @@
String _cachedBrowserPrefix;
String get _browserPrefix {
- if (_cachedBrowserPrefix === null) {
+ if (_cachedBrowserPrefix == null) {
if (_Device.isFirefox) {
_cachedBrowserPrefix = '-moz-';
} else if (_Device.isIE) {
@@ -7593,7 +7596,7 @@
String selectorText;
/** @domName CSSStyleRule.style */
- abstract CSSStyleDeclaration get style;
+ CSSStyleDeclaration get style;
}
// 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
@@ -7620,13 +7623,13 @@
abstract class CSSStyleSheet implements StyleSheet {
/** @domName CSSStyleSheet.cssRules */
- abstract List<CSSRule> get cssRules;
+ List<CSSRule> get cssRules;
/** @domName CSSStyleSheet.ownerRule */
- abstract CSSRule get ownerRule;
+ CSSRule get ownerRule;
/** @domName CSSStyleSheet.rules */
- abstract List<CSSRule> get rules;
+ List<CSSRule> get rules;
/** @domName CSSStyleSheet.addRule */
int addRule(String selector, String style, [int index]);
@@ -7724,7 +7727,7 @@
static const int CSS_TRANSLATEZ = 12;
/** @domName WebKitCSSTransformValue.operationType */
- abstract int get operationType;
+ int get operationType;
}
// 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
@@ -7776,7 +7779,7 @@
String cssText;
/** @domName CSSValue.cssValueType */
- abstract int get cssValueType;
+ int get cssValueType;
}
// 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
@@ -7806,7 +7809,7 @@
CSSValue operator[](int index) native "CSSValueList_item_Callback";
void operator[]=(int index, CSSValue value) {
- throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+ throw new UnsupportedError("Cannot assign element of immutable List.");
}
// -- start List<CSSValue> mixins.
// CSSValue is the element type.
@@ -7823,15 +7826,15 @@
// From Collection<CSSValue>:
void add(CSSValue value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addLast(CSSValue value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addAll(Collection<CSSValue> collection) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
bool contains(CSSValue element) => _Collections.contains(this, element);
@@ -7847,38 +7850,38 @@
bool some(bool f(CSSValue element)) => _Collections.some(this, f);
- bool isEmpty() => this.length == 0;
+ bool get isEmpty => this.length == 0;
// From List<CSSValue>:
void sort([Comparator<CSSValue> compare = Comparable.compare]) {
- throw const UnsupportedOperationException("Cannot sort immutable List.");
+ throw new UnsupportedError("Cannot sort immutable List.");
}
int indexOf(CSSValue element, [int start = 0]) =>
_Lists.indexOf(this, element, start, this.length);
int lastIndexOf(CSSValue element, [int start]) {
- if (start === null) start = length - 1;
+ if (start == null) start = length - 1;
return _Lists.lastIndexOf(this, element, start);
}
- CSSValue last() => this[length - 1];
+ CSSValue get last => this[length - 1];
CSSValue removeLast() {
- throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+ throw new UnsupportedError("Cannot removeLast on immutable List.");
}
void setRange(int start, int rangeLength, List<CSSValue> from, [int startFrom]) {
- throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+ throw new UnsupportedError("Cannot setRange on immutable List.");
}
void removeRange(int start, int rangeLength) {
- throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+ throw new UnsupportedError("Cannot removeRange on immutable List.");
}
void insertRange(int start, int rangeLength, [CSSValue initialValue]) {
- throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+ throw new UnsupportedError("Cannot insertRange on immutable List.");
}
List<CSSValue> getRange(int start, int rangeLength) =>
@@ -7895,6 +7898,7 @@
// WARNING: Do not edit - generated code.
+
/// @domName HTMLCanvasElement
abstract class CanvasElement implements Element {
@@ -7994,7 +7998,7 @@
abstract class CanvasRenderingContext {
/** @domName CanvasRenderingContext.canvas */
- abstract CanvasElement get canvas;
+ CanvasElement get canvas;
}
// 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
@@ -8002,11 +8006,12 @@
// WARNING: Do not edit - generated code.
+
/// @domName CanvasRenderingContext2D
abstract class CanvasRenderingContext2D implements CanvasRenderingContext {
/** @domName CanvasRenderingContext2D.fillStyle */
- Dynamic fillStyle;
+ dynamic fillStyle;
/** @domName CanvasRenderingContext2D.font */
String font;
@@ -8045,7 +8050,7 @@
num shadowOffsetY;
/** @domName CanvasRenderingContext2D.strokeStyle */
- Dynamic strokeStyle;
+ dynamic strokeStyle;
/** @domName CanvasRenderingContext2D.textAlign */
String textAlign;
@@ -8054,7 +8059,7 @@
String textBaseline;
/** @domName CanvasRenderingContext2D.webkitBackingStorePixelRatio */
- abstract num get webkitBackingStorePixelRatio;
+ num get webkitBackingStorePixelRatio;
/** @domName CanvasRenderingContext2D.webkitImageSmoothingEnabled */
bool webkitImageSmoothingEnabled;
@@ -8238,9 +8243,9 @@
class _CanvasRenderingContext2DImpl extends _CanvasRenderingContextImpl implements CanvasRenderingContext2D {
- Dynamic get fillStyle native "CanvasRenderingContext2D_fillStyle_Getter";
+ dynamic get fillStyle native "CanvasRenderingContext2D_fillStyle_Getter";
- void set fillStyle(Dynamic value) native "CanvasRenderingContext2D_fillStyle_Setter";
+ void set fillStyle(dynamic value) native "CanvasRenderingContext2D_fillStyle_Setter";
String get font native "CanvasRenderingContext2D_font_Getter";
@@ -8290,9 +8295,9 @@
void set shadowOffsetY(num value) native "CanvasRenderingContext2D_shadowOffsetY_Setter";
- Dynamic get strokeStyle native "CanvasRenderingContext2D_strokeStyle_Getter";
+ dynamic get strokeStyle native "CanvasRenderingContext2D_strokeStyle_Getter";
- void set strokeStyle(Dynamic value) native "CanvasRenderingContext2D_strokeStyle_Setter";
+ void set strokeStyle(dynamic value) native "CanvasRenderingContext2D_strokeStyle_Setter";
String get textAlign native "CanvasRenderingContext2D_textAlign_Getter";
@@ -8333,10 +8338,10 @@
void closePath() native "CanvasRenderingContext2D_closePath_Callback";
ImageData createImageData(imagedata_OR_sw, [/*float*/ sh]) {
- if ((imagedata_OR_sw is ImageData || imagedata_OR_sw === null) && !?sh) {
+ if ((imagedata_OR_sw is ImageData || imagedata_OR_sw == null) && !?sh) {
return _createImageData_1(imagedata_OR_sw);
}
- if ((imagedata_OR_sw is num || imagedata_OR_sw === null) && (sh is num || sh === null)) {
+ if ((imagedata_OR_sw is num || imagedata_OR_sw == null) && (sh is num || sh == null)) {
return _createImageData_2(imagedata_OR_sw, sh);
}
throw "Incorrect number or type of arguments";
@@ -8349,10 +8354,10 @@
CanvasGradient createLinearGradient(num x0, num y0, num x1, num y1) native "CanvasRenderingContext2D_createLinearGradient_Callback";
CanvasPattern createPattern(canvas_OR_image, /*DOMString*/ repetitionType) {
- if ((canvas_OR_image is CanvasElement || canvas_OR_image === null) && (repetitionType is String || repetitionType === null)) {
+ if ((canvas_OR_image is CanvasElement || canvas_OR_image == null) && (repetitionType is String || repetitionType == null)) {
return _createPattern_1(canvas_OR_image, repetitionType);
}
- if ((canvas_OR_image is ImageElement || canvas_OR_image === null) && (repetitionType is String || repetitionType === null)) {
+ if ((canvas_OR_image is ImageElement || canvas_OR_image == null) && (repetitionType is String || repetitionType == null)) {
return _createPattern_2(canvas_OR_image, repetitionType);
}
throw "Incorrect number or type of arguments";
@@ -8365,39 +8370,39 @@
CanvasGradient createRadialGradient(num x0, num y0, num r0, num x1, num y1, num r1) native "CanvasRenderingContext2D_createRadialGradient_Callback";
void drawImage(canvas_OR_image_OR_video, /*float*/ sx_OR_x, /*float*/ sy_OR_y, [/*float*/ sw_OR_width, /*float*/ height_OR_sh, /*float*/ dx, /*float*/ dy, /*float*/ dw, /*float*/ dh]) {
- if ((canvas_OR_image_OR_video is ImageElement || canvas_OR_image_OR_video === null) && (sx_OR_x is num || sx_OR_x === null) && (sy_OR_y is num || sy_OR_y === null) && !?sw_OR_width && !?height_OR_sh && !?dx && !?dy && !?dw && !?dh) {
+ if ((canvas_OR_image_OR_video is ImageElement || canvas_OR_image_OR_video == null) && (sx_OR_x is num || sx_OR_x == null) && (sy_OR_y is num || sy_OR_y == null) && !?sw_OR_width && !?height_OR_sh && !?dx && !?dy && !?dw && !?dh) {
_drawImage_1(canvas_OR_image_OR_video, sx_OR_x, sy_OR_y);
return;
}
- if ((canvas_OR_image_OR_video is ImageElement || canvas_OR_image_OR_video === null) && (sx_OR_x is num || sx_OR_x === null) && (sy_OR_y is num || sy_OR_y === null) && (sw_OR_width is num || sw_OR_width === null) && (height_OR_sh is num || height_OR_sh === null) && !?dx && !?dy && !?dw && !?dh) {
+ if ((canvas_OR_image_OR_video is ImageElement || canvas_OR_image_OR_video == null) && (sx_OR_x is num || sx_OR_x == null) && (sy_OR_y is num || sy_OR_y == null) && (sw_OR_width is num || sw_OR_width == null) && (height_OR_sh is num || height_OR_sh == null) && !?dx && !?dy && !?dw && !?dh) {
_drawImage_2(canvas_OR_image_OR_video, sx_OR_x, sy_OR_y, sw_OR_width, height_OR_sh);
return;
}
- if ((canvas_OR_image_OR_video is ImageElement || canvas_OR_image_OR_video === null) && (sx_OR_x is num || sx_OR_x === null) && (sy_OR_y is num || sy_OR_y === null) && (sw_OR_width is num || sw_OR_width === null) && (height_OR_sh is num || height_OR_sh === null) && (dx is num || dx === null) && (dy is num || dy === null) && (dw is num || dw === null) && (dh is num || dh === null)) {
+ if ((canvas_OR_image_OR_video is ImageElement || canvas_OR_image_OR_video == null) && (sx_OR_x is num || sx_OR_x == null) && (sy_OR_y is num || sy_OR_y == null) && (sw_OR_width is num || sw_OR_width == null) && (height_OR_sh is num || height_OR_sh == null) && (dx is num || dx == null) && (dy is num || dy == null) && (dw is num || dw == null) && (dh is num || dh == null)) {
_drawImage_3(canvas_OR_image_OR_video, sx_OR_x, sy_OR_y, sw_OR_width, height_OR_sh, dx, dy, dw, dh);
return;
}
- if ((canvas_OR_image_OR_video is CanvasElement || canvas_OR_image_OR_video === null) && (sx_OR_x is num || sx_OR_x === null) && (sy_OR_y is num || sy_OR_y === null) && !?sw_OR_width && !?height_OR_sh && !?dx && !?dy && !?dw && !?dh) {
+ if ((canvas_OR_image_OR_video is CanvasElement || canvas_OR_image_OR_video == null) && (sx_OR_x is num || sx_OR_x == null) && (sy_OR_y is num || sy_OR_y == null) && !?sw_OR_width && !?height_OR_sh && !?dx && !?dy && !?dw && !?dh) {
_drawImage_4(canvas_OR_image_OR_video, sx_OR_x, sy_OR_y);
return;
}
- if ((canvas_OR_image_OR_video is CanvasElement || canvas_OR_image_OR_video === null) && (sx_OR_x is num || sx_OR_x === null) && (sy_OR_y is num || sy_OR_y === null) && (sw_OR_width is num || sw_OR_width === null) && (height_OR_sh is num || height_OR_sh === null) && !?dx && !?dy && !?dw && !?dh) {
+ if ((canvas_OR_image_OR_video is CanvasElement || canvas_OR_image_OR_video == null) && (sx_OR_x is num || sx_OR_x == null) && (sy_OR_y is num || sy_OR_y == null) && (sw_OR_width is num || sw_OR_width == null) && (height_OR_sh is num || height_OR_sh == null) && !?dx && !?dy && !?dw && !?dh) {
_drawImage_5(canvas_OR_image_OR_video, sx_OR_x, sy_OR_y, sw_OR_width, height_OR_sh);
return;
}
- if ((canvas_OR_image_OR_video is CanvasElement || canvas_OR_image_OR_video === null) && (sx_OR_x is num || sx_OR_x === null) && (sy_OR_y is num || sy_OR_y === null) && (sw_OR_width is num || sw_OR_width === null) && (height_OR_sh is num || height_OR_sh === null) && (dx is num || dx === null) && (dy is num || dy === null) && (dw is num || dw === null) && (dh is num || dh === null)) {
+ if ((canvas_OR_image_OR_video is CanvasElement || canvas_OR_image_OR_video == null) && (sx_OR_x is num || sx_OR_x == null) && (sy_OR_y is num || sy_OR_y == null) && (sw_OR_width is num || sw_OR_width == null) && (height_OR_sh is num || height_OR_sh == null) && (dx is num || dx == null) && (dy is num || dy == null) && (dw is num || dw == null) && (dh is num || dh == null)) {
_drawImage_6(canvas_OR_image_OR_video, sx_OR_x, sy_OR_y, sw_OR_width, height_OR_sh, dx, dy, dw, dh);
return;
}
- if ((canvas_OR_image_OR_video is VideoElement || canvas_OR_image_OR_video === null) && (sx_OR_x is num || sx_OR_x === null) && (sy_OR_y is num || sy_OR_y === null) && !?sw_OR_width && !?height_OR_sh && !?dx && !?dy && !?dw && !?dh) {
+ if ((canvas_OR_image_OR_video is VideoElement || canvas_OR_image_OR_video == null) && (sx_OR_x is num || sx_OR_x == null) && (sy_OR_y is num || sy_OR_y == null) && !?sw_OR_width && !?height_OR_sh && !?dx && !?dy && !?dw && !?dh) {
_drawImage_7(canvas_OR_image_OR_video, sx_OR_x, sy_OR_y);
return;
}
- if ((canvas_OR_image_OR_video is VideoElement || canvas_OR_image_OR_video === null) && (sx_OR_x is num || sx_OR_x === null) && (sy_OR_y is num || sy_OR_y === null) && (sw_OR_width is num || sw_OR_width === null) && (height_OR_sh is num || height_OR_sh === null) && !?dx && !?dy && !?dw && !?dh) {
+ if ((canvas_OR_image_OR_video is VideoElement || canvas_OR_image_OR_video == null) && (sx_OR_x is num || sx_OR_x == null) && (sy_OR_y is num || sy_OR_y == null) && (sw_OR_width is num || sw_OR_width == null) && (height_OR_sh is num || height_OR_sh == null) && !?dx && !?dy && !?dw && !?dh) {
_drawImage_8(canvas_OR_image_OR_video, sx_OR_x, sy_OR_y, sw_OR_width, height_OR_sh);
return;
}
- if ((canvas_OR_image_OR_video is VideoElement || canvas_OR_image_OR_video === null) && (sx_OR_x is num || sx_OR_x === null) && (sy_OR_y is num || sy_OR_y === null) && (sw_OR_width is num || sw_OR_width === null) && (height_OR_sh is num || height_OR_sh === null) && (dx is num || dx === null) && (dy is num || dy === null) && (dw is num || dw === null) && (dh is num || dh === null)) {
+ if ((canvas_OR_image_OR_video is VideoElement || canvas_OR_image_OR_video == null) && (sx_OR_x is num || sx_OR_x == null) && (sy_OR_y is num || sy_OR_y == null) && (sw_OR_width is num || sw_OR_width == null) && (height_OR_sh is num || height_OR_sh == null) && (dx is num || dx == null) && (dy is num || dy == null) && (dw is num || dw == null) && (dh is num || dh == null)) {
_drawImage_9(canvas_OR_image_OR_video, sx_OR_x, sy_OR_y, sw_OR_width, height_OR_sh, dx, dy, dw, dh);
return;
}
@@ -8511,11 +8516,11 @@
void moveTo(num x, num y) native "CanvasRenderingContext2D_moveTo_Callback";
void putImageData(/*ImageData*/ imagedata, /*float*/ dx, /*float*/ dy, [/*float*/ dirtyX, /*float*/ dirtyY, /*float*/ dirtyWidth, /*float*/ dirtyHeight]) {
- if ((imagedata is ImageData || imagedata === null) && (dx is num || dx === null) && (dy is num || dy === null) && !?dirtyX && !?dirtyY && !?dirtyWidth && !?dirtyHeight) {
+ if ((imagedata is ImageData || imagedata == null) && (dx is num || dx == null) && (dy is num || dy == null) && !?dirtyX && !?dirtyY && !?dirtyWidth && !?dirtyHeight) {
_putImageData_1(imagedata, dx, dy);
return;
}
- if ((imagedata is ImageData || imagedata === null) && (dx is num || dx === null) && (dy is num || dy === null) && (dirtyX is num || dirtyX === null) && (dirtyY is num || dirtyY === null) && (dirtyWidth is num || dirtyWidth === null) && (dirtyHeight is num || dirtyHeight === null)) {
+ if ((imagedata is ImageData || imagedata == null) && (dx is num || dx == null) && (dy is num || dy == null) && (dirtyX is num || dirtyX == null) && (dirtyY is num || dirtyY == null) && (dirtyWidth is num || dirtyWidth == null) && (dirtyHeight is num || dirtyHeight == null)) {
_putImageData_2(imagedata, dx, dy, dirtyX, dirtyY, dirtyWidth, dirtyHeight);
return;
}
@@ -8553,31 +8558,31 @@
void setMiterLimit(num limit) native "CanvasRenderingContext2D_setMiterLimit_Callback";
void setShadow(/*float*/ width, /*float*/ height, /*float*/ blur, [c_OR_color_OR_grayLevel_OR_r, /*float*/ alpha_OR_g_OR_m, /*float*/ b_OR_y, /*float*/ a_OR_k, /*float*/ a]) {
- if ((width is num || width === null) && (height is num || height === null) && (blur is num || blur === null) && !?c_OR_color_OR_grayLevel_OR_r && !?alpha_OR_g_OR_m && !?b_OR_y && !?a_OR_k && !?a) {
+ if ((width is num || width == null) && (height is num || height == null) && (blur is num || blur == null) && !?c_OR_color_OR_grayLevel_OR_r && !?alpha_OR_g_OR_m && !?b_OR_y && !?a_OR_k && !?a) {
_setShadow_1(width, height, blur);
return;
}
- if ((width is num || width === null) && (height is num || height === null) && (blur is num || blur === null) && (c_OR_color_OR_grayLevel_OR_r is String || c_OR_color_OR_grayLevel_OR_r === null) && !?alpha_OR_g_OR_m && !?b_OR_y && !?a_OR_k && !?a) {
+ if ((width is num || width == null) && (height is num || height == null) && (blur is num || blur == null) && (c_OR_color_OR_grayLevel_OR_r is String || c_OR_color_OR_grayLevel_OR_r == null) && !?alpha_OR_g_OR_m && !?b_OR_y && !?a_OR_k && !?a) {
_setShadow_2(width, height, blur, c_OR_color_OR_grayLevel_OR_r);
return;
}
- if ((width is num || width === null) && (height is num || height === null) && (blur is num || blur === null) && (c_OR_color_OR_grayLevel_OR_r is String || c_OR_color_OR_grayLevel_OR_r === null) && (alpha_OR_g_OR_m is num || alpha_OR_g_OR_m === null) && !?b_OR_y && !?a_OR_k && !?a) {
+ if ((width is num || width == null) && (height is num || height == null) && (blur is num || blur == null) && (c_OR_color_OR_grayLevel_OR_r is String || c_OR_color_OR_grayLevel_OR_r == null) && (alpha_OR_g_OR_m is num || alpha_OR_g_OR_m == null) && !?b_OR_y && !?a_OR_k && !?a) {
_setShadow_3(width, height, blur, c_OR_color_OR_grayLevel_OR_r, alpha_OR_g_OR_m);
return;
}
- if ((width is num || width === null) && (height is num || height === null) && (blur is num || blur === null) && (c_OR_color_OR_grayLevel_OR_r is num || c_OR_color_OR_grayLevel_OR_r === null) && !?alpha_OR_g_OR_m && !?b_OR_y && !?a_OR_k && !?a) {
+ if ((width is num || width == null) && (height is num || height == null) && (blur is num || blur == null) && (c_OR_color_OR_grayLevel_OR_r is num || c_OR_color_OR_grayLevel_OR_r == null) && !?alpha_OR_g_OR_m && !?b_OR_y && !?a_OR_k && !?a) {
_setShadow_4(width, height, blur, c_OR_color_OR_grayLevel_OR_r);
return;
}
- if ((width is num || width === null) && (height is num || height === null) && (blur is num || blur === null) && (c_OR_color_OR_grayLevel_OR_r is num || c_OR_color_OR_grayLevel_OR_r === null) && (alpha_OR_g_OR_m is num || alpha_OR_g_OR_m === null) && !?b_OR_y && !?a_OR_k && !?a) {
+ if ((width is num || width == null) && (height is num || height == null) && (blur is num || blur == null) && (c_OR_color_OR_grayLevel_OR_r is num || c_OR_color_OR_grayLevel_OR_r == null) && (alpha_OR_g_OR_m is num || alpha_OR_g_OR_m == null) && !?b_OR_y && !?a_OR_k && !?a) {
_setShadow_5(width, height, blur, c_OR_color_OR_grayLevel_OR_r, alpha_OR_g_OR_m);
return;
}
- if ((width is num || width === null) && (height is num || height === null) && (blur is num || blur === null) && (c_OR_color_OR_grayLevel_OR_r is num || c_OR_color_OR_grayLevel_OR_r === null) && (alpha_OR_g_OR_m is num || alpha_OR_g_OR_m === null) && (b_OR_y is num || b_OR_y === null) && (a_OR_k is num || a_OR_k === null) && !?a) {
+ if ((width is num || width == null) && (height is num || height == null) && (blur is num || blur == null) && (c_OR_color_OR_grayLevel_OR_r is num || c_OR_color_OR_grayLevel_OR_r == null) && (alpha_OR_g_OR_m is num || alpha_OR_g_OR_m == null) && (b_OR_y is num || b_OR_y == null) && (a_OR_k is num || a_OR_k == null) && !?a) {
_setShadow_6(width, height, blur, c_OR_color_OR_grayLevel_OR_r, alpha_OR_g_OR_m, b_OR_y, a_OR_k);
return;
}
- if ((width is num || width === null) && (height is num || height === null) && (blur is num || blur === null) && (c_OR_color_OR_grayLevel_OR_r is num || c_OR_color_OR_grayLevel_OR_r === null) && (alpha_OR_g_OR_m is num || alpha_OR_g_OR_m === null) && (b_OR_y is num || b_OR_y === null) && (a_OR_k is num || a_OR_k === null) && (a is num || a === null)) {
+ if ((width is num || width == null) && (height is num || height == null) && (blur is num || blur == null) && (c_OR_color_OR_grayLevel_OR_r is num || c_OR_color_OR_grayLevel_OR_r == null) && (alpha_OR_g_OR_m is num || alpha_OR_g_OR_m == null) && (b_OR_y is num || b_OR_y == null) && (a_OR_k is num || a_OR_k == null) && (a is num || a == null)) {
_setShadow_7(width, height, blur, c_OR_color_OR_grayLevel_OR_r, alpha_OR_g_OR_m, b_OR_y, a_OR_k, a);
return;
}
@@ -8633,11 +8638,11 @@
ImageData webkitGetImageDataHD(num sx, num sy, num sw, num sh) native "CanvasRenderingContext2D_webkitGetImageDataHD_Callback";
void webkitPutImageDataHD(/*ImageData*/ imagedata, /*float*/ dx, /*float*/ dy, [/*float*/ dirtyX, /*float*/ dirtyY, /*float*/ dirtyWidth, /*float*/ dirtyHeight]) {
- if ((imagedata is ImageData || imagedata === null) && (dx is num || dx === null) && (dy is num || dy === null) && !?dirtyX && !?dirtyY && !?dirtyWidth && !?dirtyHeight) {
+ if ((imagedata is ImageData || imagedata == null) && (dx is num || dx == null) && (dy is num || dy == null) && !?dirtyX && !?dirtyY && !?dirtyWidth && !?dirtyHeight) {
_webkitPutImageDataHD_1(imagedata, dx, dy);
return;
}
- if ((imagedata is ImageData || imagedata === null) && (dx is num || dx === null) && (dy is num || dy === null) && (dirtyX is num || dirtyX === null) && (dirtyY is num || dirtyY === null) && (dirtyWidth is num || dirtyWidth === null) && (dirtyHeight is num || dirtyHeight === null)) {
+ if ((imagedata is ImageData || imagedata == null) && (dx is num || dx == null) && (dy is num || dy == null) && (dirtyX is num || dirtyX == null) && (dirtyY is num || dirtyY == null) && (dirtyWidth is num || dirtyWidth == null) && (dirtyHeight is num || dirtyHeight == null)) {
_webkitPutImageDataHD_2(imagedata, dx, dy, dirtyX, dirtyY, dirtyWidth, dirtyHeight);
return;
}
@@ -8689,7 +8694,7 @@
String data;
/** @domName CharacterData.length */
- abstract int get length;
+ int get length;
/** @domName CharacterData.appendData */
void appendData(String data);
@@ -8746,22 +8751,22 @@
abstract class ClientRect {
/** @domName ClientRect.bottom */
- abstract num get bottom;
+ num get bottom;
/** @domName ClientRect.height */
- abstract num get height;
+ num get height;
/** @domName ClientRect.left */
- abstract num get left;
+ num get left;
/** @domName ClientRect.right */
- abstract num get right;
+ num get right;
/** @domName ClientRect.top */
- abstract num get top;
+ num get top;
/** @domName ClientRect.width */
- abstract num get width;
+ num get width;
}
// 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
@@ -8797,7 +8802,7 @@
ClientRect operator[](int index) native "ClientRectList_item_Callback";
void operator[]=(int index, ClientRect value) {
- throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+ throw new UnsupportedError("Cannot assign element of immutable List.");
}
// -- start List<ClientRect> mixins.
// ClientRect is the element type.
@@ -8814,15 +8819,15 @@
// From Collection<ClientRect>:
void add(ClientRect value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addLast(ClientRect value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addAll(Collection<ClientRect> collection) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
bool contains(ClientRect element) => _Collections.contains(this, element);
@@ -8838,38 +8843,38 @@
bool some(bool f(ClientRect element)) => _Collections.some(this, f);
- bool isEmpty() => this.length == 0;
+ bool get isEmpty => this.length == 0;
// From List<ClientRect>:
void sort([Comparator<ClientRect> compare = Comparable.compare]) {
- throw const UnsupportedOperationException("Cannot sort immutable List.");
+ throw new UnsupportedError("Cannot sort immutable List.");
}
int indexOf(ClientRect element, [int start = 0]) =>
_Lists.indexOf(this, element, start, this.length);
int lastIndexOf(ClientRect element, [int start]) {
- if (start === null) start = length - 1;
+ if (start == null) start = length - 1;
return _Lists.lastIndexOf(this, element, start);
}
- ClientRect last() => this[length - 1];
+ ClientRect get last => this[length - 1];
ClientRect removeLast() {
- throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+ throw new UnsupportedError("Cannot removeLast on immutable List.");
}
void setRange(int start, int rangeLength, List<ClientRect> from, [int startFrom]) {
- throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+ throw new UnsupportedError("Cannot setRange on immutable List.");
}
void removeRange(int start, int rangeLength) {
- throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+ throw new UnsupportedError("Cannot removeRange on immutable List.");
}
void insertRange(int start, int rangeLength, [ClientRect initialValue]) {
- throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+ throw new UnsupportedError("Cannot insertRange on immutable List.");
}
List<ClientRect> getRange(int start, int rangeLength) =>
@@ -8896,13 +8901,13 @@
String effectAllowed;
/** @domName Clipboard.files */
- abstract List<File> get files;
+ List<File> get files;
/** @domName Clipboard.items */
- abstract DataTransferItemList get items;
+ DataTransferItemList get items;
/** @domName Clipboard.types */
- abstract List get types;
+ List get types;
/** @domName Clipboard.clearData */
void clearData([String type]);
@@ -8957,13 +8962,13 @@
abstract class CloseEvent implements Event {
/** @domName CloseEvent.code */
- abstract int get code;
+ int get code;
/** @domName CloseEvent.reason */
- abstract String get reason;
+ String get reason;
/** @domName CloseEvent.wasClean */
- abstract bool get wasClean;
+ bool get wasClean;
}
// 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
@@ -9008,7 +9013,7 @@
abstract class CompositionEvent implements UIEvent {
/** @domName CompositionEvent.data */
- abstract String get data;
+ String get data;
/** @domName CompositionEvent.initCompositionEvent */
void initCompositionEvent(String typeArg, bool canBubbleArg, bool cancelableArg, LocalWindow viewArg, String dataArg);
@@ -9036,10 +9041,10 @@
abstract class Console {
/** @domName Console.memory */
- abstract MemoryInfo get memory;
+ MemoryInfo get memory;
/** @domName Console.profiles */
- abstract List<ScriptProfile> get profiles;
+ List<ScriptProfile> get profiles;
/** @domName Console.assertCondition */
void assertCondition(bool condition, Object arg);
@@ -9160,6 +9165,9 @@
factory ContentElement() => _Elements.createContentElement();
+ /** @domName HTMLContentElement.resetStyleInheritance */
+ bool resetStyleInheritance;
+
/** @domName HTMLContentElement.select */
String select;
}
@@ -9171,6 +9179,10 @@
class _ContentElementImpl extends _ElementImpl_Merged implements ContentElement {
+ bool get resetStyleInheritance native "HTMLContentElement_resetStyleInheritance_Getter";
+
+ void set resetStyleInheritance(bool value) native "HTMLContentElement_resetStyleInheritance_Setter";
+
String get select native "HTMLContentElement_select_Getter";
void set select(String value) native "HTMLContentElement_select_Setter";
@@ -9218,25 +9230,25 @@
abstract class Coordinates {
/** @domName Coordinates.accuracy */
- abstract num get accuracy;
+ num get accuracy;
/** @domName Coordinates.altitude */
- abstract num get altitude;
+ num get altitude;
/** @domName Coordinates.altitudeAccuracy */
- abstract num get altitudeAccuracy;
+ num get altitudeAccuracy;
/** @domName Coordinates.heading */
- abstract num get heading;
+ num get heading;
/** @domName Coordinates.latitude */
- abstract num get latitude;
+ num get latitude;
/** @domName Coordinates.longitude */
- abstract num get longitude;
+ num get longitude;
/** @domName Coordinates.speed */
- abstract num get speed;
+ num get speed;
}
// 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
@@ -9271,13 +9283,13 @@
abstract class Counter {
/** @domName Counter.identifier */
- abstract String get identifier;
+ String get identifier;
/** @domName Counter.listStyle */
- abstract String get listStyle;
+ String get listStyle;
/** @domName Counter.separator */
- abstract String get separator;
+ String get separator;
}
// 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
@@ -9323,6 +9335,7 @@
// WARNING: Do not edit - generated code.
+
/// @domName CustomEvent
abstract class CustomEvent implements Event {
@@ -9332,7 +9345,7 @@
/** @domName CustomEvent.detail */
- abstract Object get detail;
+ Object get detail;
/** @domName CustomEvent.initCustomEvent */
void $dom_initCustomEvent(String typeArg, bool canBubbleArg, bool cancelableArg, Object detailArg);
@@ -9404,7 +9417,7 @@
static const int UPDATEREADY = 4;
/** @domName DOMApplicationCache.status */
- abstract int get status;
+ int get status;
/** @domName DOMApplicationCache.abort */
void abort();
@@ -9499,7 +9512,7 @@
abstract class DOMError {
/** @domName DOMError.name */
- abstract String get name;
+ String get name;
}
// 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
@@ -9572,13 +9585,13 @@
static const int WRONG_DOCUMENT_ERR = 4;
/** @domName DOMException.code */
- abstract int get code;
+ int get code;
/** @domName DOMException.message */
- abstract String get message;
+ String get message;
/** @domName DOMException.name */
- abstract String get name;
+ String get name;
/** @domName DOMException.toString */
String toString();
@@ -9610,10 +9623,10 @@
abstract class DOMFileSystem {
/** @domName DOMFileSystem.name */
- abstract String get name;
+ String get name;
/** @domName DOMFileSystem.root */
- abstract DirectoryEntry get root;
+ DirectoryEntry get root;
}
// 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
@@ -9638,10 +9651,10 @@
abstract class DOMFileSystemSync {
/** @domName DOMFileSystemSync.name */
- abstract String get name;
+ String get name;
/** @domName DOMFileSystemSync.root */
- abstract DirectoryEntrySync get root;
+ DirectoryEntrySync get root;
}
// 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
@@ -9709,16 +9722,16 @@
abstract class DOMMimeType {
/** @domName MimeType.description */
- abstract String get description;
+ String get description;
/** @domName MimeType.enabledPlugin */
- abstract DOMPlugin get enabledPlugin;
+ DOMPlugin get enabledPlugin;
/** @domName MimeType.suffixes */
- abstract String get suffixes;
+ String get suffixes;
/** @domName MimeType.type */
- abstract String get type;
+ String get type;
}
// 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
@@ -9730,7 +9743,7 @@
abstract class DOMMimeTypeArray implements List<DOMMimeType> {
/** @domName MimeTypeArray.length */
- abstract int get length;
+ int get length;
/** @domName MimeTypeArray.item */
DOMMimeType item(int index);
@@ -9751,7 +9764,7 @@
DOMMimeType operator[](int index) native "DOMMimeTypeArray_item_Callback";
void operator[]=(int index, DOMMimeType value) {
- throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+ throw new UnsupportedError("Cannot assign element of immutable List.");
}
// -- start List<DOMMimeType> mixins.
// DOMMimeType is the element type.
@@ -9768,15 +9781,15 @@
// From Collection<DOMMimeType>:
void add(DOMMimeType value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addLast(DOMMimeType value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addAll(Collection<DOMMimeType> collection) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
bool contains(DOMMimeType element) => _Collections.contains(this, element);
@@ -9792,38 +9805,38 @@
bool some(bool f(DOMMimeType element)) => _Collections.some(this, f);
- bool isEmpty() => this.length == 0;
+ bool get isEmpty => this.length == 0;
// From List<DOMMimeType>:
void sort([Comparator<DOMMimeType> compare = Comparable.compare]) {
- throw const UnsupportedOperationException("Cannot sort immutable List.");
+ throw new UnsupportedError("Cannot sort immutable List.");
}
int indexOf(DOMMimeType element, [int start = 0]) =>
_Lists.indexOf(this, element, start, this.length);
int lastIndexOf(DOMMimeType element, [int start]) {
- if (start === null) start = length - 1;
+ if (start == null) start = length - 1;
return _Lists.lastIndexOf(this, element, start);
}
- DOMMimeType last() => this[length - 1];
+ DOMMimeType get last => this[length - 1];
DOMMimeType removeLast() {
- throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+ throw new UnsupportedError("Cannot removeLast on immutable List.");
}
void setRange(int start, int rangeLength, List<DOMMimeType> from, [int startFrom]) {
- throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+ throw new UnsupportedError("Cannot setRange on immutable List.");
}
void removeRange(int start, int rangeLength) {
- throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+ throw new UnsupportedError("Cannot removeRange on immutable List.");
}
void insertRange(int start, int rangeLength, [DOMMimeType initialValue]) {
- throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+ throw new UnsupportedError("Cannot insertRange on immutable List.");
}
List<DOMMimeType> getRange(int start, int rangeLength) =>
@@ -9888,16 +9901,16 @@
abstract class DOMPlugin {
/** @domName Plugin.description */
- abstract String get description;
+ String get description;
/** @domName Plugin.filename */
- abstract String get filename;
+ String get filename;
/** @domName Plugin.length */
- abstract int get length;
+ int get length;
/** @domName Plugin.name */
- abstract String get name;
+ String get name;
/** @domName Plugin.item */
DOMMimeType item(int index);
@@ -9915,7 +9928,7 @@
abstract class DOMPluginArray implements List<DOMPlugin> {
/** @domName PluginArray.length */
- abstract int get length;
+ int get length;
/** @domName PluginArray.item */
DOMPlugin item(int index);
@@ -9939,7 +9952,7 @@
DOMPlugin operator[](int index) native "DOMPluginArray_item_Callback";
void operator[]=(int index, DOMPlugin value) {
- throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+ throw new UnsupportedError("Cannot assign element of immutable List.");
}
// -- start List<DOMPlugin> mixins.
// DOMPlugin is the element type.
@@ -9956,15 +9969,15 @@
// From Collection<DOMPlugin>:
void add(DOMPlugin value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addLast(DOMPlugin value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addAll(Collection<DOMPlugin> collection) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
bool contains(DOMPlugin element) => _Collections.contains(this, element);
@@ -9980,38 +9993,38 @@
bool some(bool f(DOMPlugin element)) => _Collections.some(this, f);
- bool isEmpty() => this.length == 0;
+ bool get isEmpty => this.length == 0;
// From List<DOMPlugin>:
void sort([Comparator<DOMPlugin> compare = Comparable.compare]) {
- throw const UnsupportedOperationException("Cannot sort immutable List.");
+ throw new UnsupportedError("Cannot sort immutable List.");
}
int indexOf(DOMPlugin element, [int start = 0]) =>
_Lists.indexOf(this, element, start, this.length);
int lastIndexOf(DOMPlugin element, [int start]) {
- if (start === null) start = length - 1;
+ if (start == null) start = length - 1;
return _Lists.lastIndexOf(this, element, start);
}
- DOMPlugin last() => this[length - 1];
+ DOMPlugin get last => this[length - 1];
DOMPlugin removeLast() {
- throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+ throw new UnsupportedError("Cannot removeLast on immutable List.");
}
void setRange(int start, int rangeLength, List<DOMPlugin> from, [int startFrom]) {
- throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+ throw new UnsupportedError("Cannot setRange on immutable List.");
}
void removeRange(int start, int rangeLength) {
- throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+ throw new UnsupportedError("Cannot removeRange on immutable List.");
}
void insertRange(int start, int rangeLength, [DOMPlugin initialValue]) {
- throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+ throw new UnsupportedError("Cannot insertRange on immutable List.");
}
List<DOMPlugin> getRange(int start, int rangeLength) =>
@@ -10057,37 +10070,37 @@
abstract class DOMSelection {
/** @domName Selection.anchorNode */
- abstract Node get anchorNode;
+ Node get anchorNode;
/** @domName Selection.anchorOffset */
- abstract int get anchorOffset;
+ int get anchorOffset;
/** @domName Selection.baseNode */
- abstract Node get baseNode;
+ Node get baseNode;
/** @domName Selection.baseOffset */
- abstract int get baseOffset;
+ int get baseOffset;
/** @domName Selection.extentNode */
- abstract Node get extentNode;
+ Node get extentNode;
/** @domName Selection.extentOffset */
- abstract int get extentOffset;
+ int get extentOffset;
/** @domName Selection.focusNode */
- abstract Node get focusNode;
+ Node get focusNode;
/** @domName Selection.focusOffset */
- abstract int get focusOffset;
+ int get focusOffset;
/** @domName Selection.isCollapsed */
- abstract bool get isCollapsed;
+ bool get isCollapsed;
/** @domName Selection.rangeCount */
- abstract int get rangeCount;
+ int get rangeCount;
/** @domName Selection.type */
- abstract String get type;
+ String get type;
/** @domName Selection.addRange */
void addRange(Range range);
@@ -10233,7 +10246,7 @@
String operator[](int index) native "DOMStringList_item_Callback";
void operator[]=(int index, String value) {
- throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+ throw new UnsupportedError("Cannot assign element of immutable List.");
}
// -- start List<String> mixins.
// String is the element type.
@@ -10250,15 +10263,15 @@
// From Collection<String>:
void add(String value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addLast(String value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addAll(Collection<String> collection) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
// contains() defined by IDL.
@@ -10274,38 +10287,38 @@
bool some(bool f(String element)) => _Collections.some(this, f);
- bool isEmpty() => this.length == 0;
+ bool get isEmpty => this.length == 0;
// From List<String>:
void sort([Comparator<String> compare = Comparable.compare]) {
- throw const UnsupportedOperationException("Cannot sort immutable List.");
+ throw new UnsupportedError("Cannot sort immutable List.");
}
int indexOf(String element, [int start = 0]) =>
_Lists.indexOf(this, element, start, this.length);
int lastIndexOf(String element, [int start]) {
- if (start === null) start = length - 1;
+ if (start == null) start = length - 1;
return _Lists.lastIndexOf(this, element, start);
}
- String last() => this[length - 1];
+ String get last => this[length - 1];
String removeLast() {
- throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+ throw new UnsupportedError("Cannot removeLast on immutable List.");
}
void setRange(int start, int rangeLength, List<String> from, [int startFrom]) {
- throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+ throw new UnsupportedError("Cannot setRange on immutable List.");
}
void removeRange(int start, int rangeLength) {
- throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+ throw new UnsupportedError("Cannot removeRange on immutable List.");
}
void insertRange(int start, int rangeLength, [String initialValue]) {
- throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+ throw new UnsupportedError("Cannot insertRange on immutable List.");
}
List<String> getRange(int start, int rangeLength) =>
@@ -10337,7 +10350,7 @@
abstract class DOMTokenList {
/** @domName DOMTokenList.length */
- abstract int get length;
+ int get length;
/** @domName DOMTokenList.contains */
bool contains(String token);
@@ -10396,13 +10409,13 @@
class _DOMURLImpl extends NativeFieldWrapperClass1 implements DOMURL {
static String createObjectURL(blob_OR_source_OR_stream) {
- if ((blob_OR_source_OR_stream is MediaSource || blob_OR_source_OR_stream === null)) {
+ if ((blob_OR_source_OR_stream is MediaSource || blob_OR_source_OR_stream == null)) {
return _createObjectURL_1(blob_OR_source_OR_stream);
}
- if ((blob_OR_source_OR_stream is MediaStream || blob_OR_source_OR_stream === null)) {
+ if ((blob_OR_source_OR_stream is MediaStream || blob_OR_source_OR_stream == null)) {
return _createObjectURL_2(blob_OR_source_OR_stream);
}
- if ((blob_OR_source_OR_stream is Blob || blob_OR_source_OR_stream === null)) {
+ if ((blob_OR_source_OR_stream is Blob || blob_OR_source_OR_stream == null)) {
return _createObjectURL_3(blob_OR_source_OR_stream);
}
throw "Incorrect number or type of arguments";
@@ -10429,7 +10442,7 @@
factory DataListElement() => _Elements.createDataListElement();
/** @domName HTMLDataListElement.options */
- abstract HTMLCollection get options;
+ HTMLCollection get options;
}
// 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
@@ -10452,10 +10465,10 @@
abstract class DataTransferItem {
/** @domName DataTransferItem.kind */
- abstract String get kind;
+ String get kind;
/** @domName DataTransferItem.type */
- abstract String get type;
+ String get type;
/** @domName DataTransferItem.getAsFile */
Blob getAsFile();
@@ -10495,7 +10508,7 @@
abstract class DataTransferItemList {
/** @domName DataTransferItemList.length */
- abstract int get length;
+ int get length;
/** @domName DataTransferItemList.add */
void add(data_OR_file, [String type]);
@@ -10517,11 +10530,11 @@
int get length native "DataTransferItemList_length_Getter";
void add(data_OR_file, [/*DOMString*/ type]) {
- if ((data_OR_file is File || data_OR_file === null) && !?type) {
+ if ((data_OR_file is File || data_OR_file == null) && !?type) {
_add_1(data_OR_file);
return;
}
- if ((data_OR_file is String || data_OR_file === null) && (type is String || type === null)) {
+ if ((data_OR_file is String || data_OR_file == null) && (type is String || type == null)) {
_add_2(data_OR_file, type);
return;
}
@@ -10557,49 +10570,49 @@
}
/** @domName DataView.getFloat32 */
- num getFloat32(int byteOffset, [bool littleEndian]);
+ num getFloat32(int byteOffset, {bool littleEndian});
/** @domName DataView.getFloat64 */
- num getFloat64(int byteOffset, [bool littleEndian]);
+ num getFloat64(int byteOffset, {bool littleEndian});
/** @domName DataView.getInt16 */
- int getInt16(int byteOffset, [bool littleEndian]);
+ int getInt16(int byteOffset, {bool littleEndian});
/** @domName DataView.getInt32 */
- int getInt32(int byteOffset, [bool littleEndian]);
+ int getInt32(int byteOffset, {bool littleEndian});
/** @domName DataView.getInt8 */
int getInt8(int byteOffset);
/** @domName DataView.getUint16 */
- int getUint16(int byteOffset, [bool littleEndian]);
+ int getUint16(int byteOffset, {bool littleEndian});
/** @domName DataView.getUint32 */
- int getUint32(int byteOffset, [bool littleEndian]);
+ int getUint32(int byteOffset, {bool littleEndian});
/** @domName DataView.getUint8 */
int getUint8(int byteOffset);
/** @domName DataView.setFloat32 */
- void setFloat32(int byteOffset, num value, [bool littleEndian]);
+ void setFloat32(int byteOffset, num value, {bool littleEndian});
/** @domName DataView.setFloat64 */
- void setFloat64(int byteOffset, num value, [bool littleEndian]);
+ void setFloat64(int byteOffset, num value, {bool littleEndian});
/** @domName DataView.setInt16 */
- void setInt16(int byteOffset, int value, [bool littleEndian]);
+ void setInt16(int byteOffset, int value, {bool littleEndian});
/** @domName DataView.setInt32 */
- void setInt32(int byteOffset, int value, [bool littleEndian]);
+ void setInt32(int byteOffset, int value, {bool littleEndian});
/** @domName DataView.setInt8 */
void setInt8(int byteOffset, int value);
/** @domName DataView.setUint16 */
- void setUint16(int byteOffset, int value, [bool littleEndian]);
+ void setUint16(int byteOffset, int value, {bool littleEndian});
/** @domName DataView.setUint32 */
- void setUint32(int byteOffset, int value, [bool littleEndian]);
+ void setUint32(int byteOffset, int value, {bool littleEndian});
/** @domName DataView.setUint8 */
void setUint8(int byteOffset, int value);
@@ -10612,7 +10625,7 @@
class _DataViewImpl extends _ArrayBufferViewImpl implements DataView {
- num getFloat32(/*unsigned long*/ byteOffset, [/*boolean*/ littleEndian]) {
+ num getFloat32(/*unsigned long*/ byteOffset, {/*boolean*/ littleEndian}) {
if (?littleEndian) {
return _getFloat32_1(byteOffset, littleEndian);
}
@@ -10623,7 +10636,7 @@
num _getFloat32_2(byteOffset) native "DataView_getFloat32_2_Callback";
- num getFloat64(/*unsigned long*/ byteOffset, [/*boolean*/ littleEndian]) {
+ num getFloat64(/*unsigned long*/ byteOffset, {/*boolean*/ littleEndian}) {
if (?littleEndian) {
return _getFloat64_1(byteOffset, littleEndian);
}
@@ -10634,7 +10647,7 @@
num _getFloat64_2(byteOffset) native "DataView_getFloat64_2_Callback";
- int getInt16(/*unsigned long*/ byteOffset, [/*boolean*/ littleEndian]) {
+ int getInt16(/*unsigned long*/ byteOffset, {/*boolean*/ littleEndian}) {
if (?littleEndian) {
return _getInt16_1(byteOffset, littleEndian);
}
@@ -10645,7 +10658,7 @@
int _getInt16_2(byteOffset) native "DataView_getInt16_2_Callback";
- int getInt32(/*unsigned long*/ byteOffset, [/*boolean*/ littleEndian]) {
+ int getInt32(/*unsigned long*/ byteOffset, {/*boolean*/ littleEndian}) {
if (?littleEndian) {
return _getInt32_1(byteOffset, littleEndian);
}
@@ -10658,7 +10671,7 @@
int getInt8(int byteOffset) native "DataView_getInt8_Callback";
- int getUint16(/*unsigned long*/ byteOffset, [/*boolean*/ littleEndian]) {
+ int getUint16(/*unsigned long*/ byteOffset, {/*boolean*/ littleEndian}) {
if (?littleEndian) {
return _getUint16_1(byteOffset, littleEndian);
}
@@ -10669,7 +10682,7 @@
int _getUint16_2(byteOffset) native "DataView_getUint16_2_Callback";
- int getUint32(/*unsigned long*/ byteOffset, [/*boolean*/ littleEndian]) {
+ int getUint32(/*unsigned long*/ byteOffset, {/*boolean*/ littleEndian}) {
if (?littleEndian) {
return _getUint32_1(byteOffset, littleEndian);
}
@@ -10682,7 +10695,7 @@
int getUint8(int byteOffset) native "DataView_getUint8_Callback";
- void setFloat32(/*unsigned long*/ byteOffset, /*float*/ value, [/*boolean*/ littleEndian]) {
+ void setFloat32(/*unsigned long*/ byteOffset, /*float*/ value, {/*boolean*/ littleEndian}) {
if (?littleEndian) {
_setFloat32_1(byteOffset, value, littleEndian);
return;
@@ -10694,7 +10707,7 @@
void _setFloat32_2(byteOffset, value) native "DataView_setFloat32_2_Callback";
- void setFloat64(/*unsigned long*/ byteOffset, /*double*/ value, [/*boolean*/ littleEndian]) {
+ void setFloat64(/*unsigned long*/ byteOffset, /*double*/ value, {/*boolean*/ littleEndian}) {
if (?littleEndian) {
_setFloat64_1(byteOffset, value, littleEndian);
return;
@@ -10706,7 +10719,7 @@
void _setFloat64_2(byteOffset, value) native "DataView_setFloat64_2_Callback";
- void setInt16(/*unsigned long*/ byteOffset, /*short*/ value, [/*boolean*/ littleEndian]) {
+ void setInt16(/*unsigned long*/ byteOffset, /*short*/ value, {/*boolean*/ littleEndian}) {
if (?littleEndian) {
_setInt16_1(byteOffset, value, littleEndian);
return;
@@ -10718,7 +10731,7 @@
void _setInt16_2(byteOffset, value) native "DataView_setInt16_2_Callback";
- void setInt32(/*unsigned long*/ byteOffset, /*long*/ value, [/*boolean*/ littleEndian]) {
+ void setInt32(/*unsigned long*/ byteOffset, /*long*/ value, {/*boolean*/ littleEndian}) {
if (?littleEndian) {
_setInt32_1(byteOffset, value, littleEndian);
return;
@@ -10732,7 +10745,7 @@
void setInt8(int byteOffset, int value) native "DataView_setInt8_Callback";
- void setUint16(/*unsigned long*/ byteOffset, /*unsigned short*/ value, [/*boolean*/ littleEndian]) {
+ void setUint16(/*unsigned long*/ byteOffset, /*unsigned short*/ value, {/*boolean*/ littleEndian}) {
if (?littleEndian) {
_setUint16_1(byteOffset, value, littleEndian);
return;
@@ -10744,7 +10757,7 @@
void _setUint16_2(byteOffset, value) native "DataView_setUint16_2_Callback";
- void setUint32(/*unsigned long*/ byteOffset, /*unsigned long*/ value, [/*boolean*/ littleEndian]) {
+ void setUint32(/*unsigned long*/ byteOffset, /*unsigned long*/ value, {/*boolean*/ littleEndian}) {
if (?littleEndian) {
_setUint32_1(byteOffset, value, littleEndian);
return;
@@ -10769,7 +10782,7 @@
abstract class Database {
/** @domName Database.version */
- abstract String get version;
+ String get version;
/** @domName Database.changeVersion */
void changeVersion(String oldVersion, String newVersion, [SQLTransactionCallback callback, SQLTransactionErrorCallback errorCallback, VoidCallback successCallback]);
@@ -10786,6 +10799,7 @@
// WARNING: Do not edit - generated code.
+
typedef void DatabaseCallback(database);
// 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
@@ -10814,10 +10828,10 @@
abstract class DatabaseSync {
/** @domName DatabaseSync.lastErrorMessage */
- abstract String get lastErrorMessage;
+ String get lastErrorMessage;
/** @domName DatabaseSync.version */
- abstract String get version;
+ String get version;
/** @domName DatabaseSync.changeVersion */
void changeVersion(String oldVersion, String newVersion, [SQLTransactionSyncCallback callback]);
@@ -10899,7 +10913,7 @@
abstract class DelayNode implements AudioNode {
/** @domName DelayNode.delayTime */
- abstract AudioParam get delayTime;
+ AudioParam get delayTime;
}
// 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
@@ -10949,7 +10963,7 @@
abstract class DeviceMotionEvent implements Event {
/** @domName DeviceMotionEvent.interval */
- abstract num get interval;
+ num get interval;
}
// 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
@@ -10972,16 +10986,16 @@
abstract class DeviceOrientationEvent implements Event {
/** @domName DeviceOrientationEvent.absolute */
- abstract bool get absolute;
+ bool get absolute;
/** @domName DeviceOrientationEvent.alpha */
- abstract num get alpha;
+ num get alpha;
/** @domName DeviceOrientationEvent.beta */
- abstract num get beta;
+ num get beta;
/** @domName DeviceOrientationEvent.gamma */
- abstract num get gamma;
+ num get gamma;
/** @domName DeviceOrientationEvent.initDeviceOrientationEvent */
void initDeviceOrientationEvent(String type, bool bubbles, bool cancelable, num alpha, num beta, num gamma, bool absolute);
@@ -11043,10 +11057,10 @@
DirectoryReader createReader();
/** @domName DirectoryEntry.getDirectory */
- void getDirectory(String path, [Map options, EntryCallback successCallback, ErrorCallback errorCallback]);
+ void getDirectory(String path, {Map options, EntryCallback successCallback, ErrorCallback errorCallback});
/** @domName DirectoryEntry.getFile */
- void getFile(String path, [Map options, EntryCallback successCallback, ErrorCallback errorCallback]);
+ void getFile(String path, {Map options, EntryCallback successCallback, ErrorCallback errorCallback});
/** @domName DirectoryEntry.removeRecursively */
void removeRecursively(VoidCallback successCallback, [ErrorCallback errorCallback]);
@@ -11061,7 +11075,7 @@
DirectoryReader createReader() native "DirectoryEntry_createReader_Callback";
- void getDirectory(/*DOMString*/ path, [/*Dictionary*/ options, /*EntryCallback*/ successCallback, /*ErrorCallback*/ errorCallback]) {
+ void getDirectory(/*DOMString*/ path, {/*Dictionary*/ options, /*EntryCallback*/ successCallback, /*ErrorCallback*/ errorCallback}) {
if (?options) {
_getDirectory_1(path, options, successCallback, errorCallback);
return;
@@ -11073,7 +11087,7 @@
void _getDirectory_2(path) native "DirectoryEntry_getDirectory_2_Callback";
- void getFile(/*DOMString*/ path, [/*Dictionary*/ options, /*EntryCallback*/ successCallback, /*ErrorCallback*/ errorCallback]) {
+ void getFile(/*DOMString*/ path, {/*Dictionary*/ options, /*EntryCallback*/ successCallback, /*ErrorCallback*/ errorCallback}) {
if (?options) {
_getFile_1(path, options, successCallback, errorCallback);
return;
@@ -11203,6 +11217,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.
+
/// @domName Document
abstract class Document extends HtmlElement {
@@ -11213,7 +11228,7 @@
DocumentEvents get on;
/** @domName HTMLDocument.activeElement */
- abstract Element get activeElement;
+ Element get activeElement;
/** @domName Document.body */
Element body;
@@ -11225,64 +11240,64 @@
String cookie;
/** @domName Document.defaultView */
- abstract Window get window;
+ Window get window;
/** @domName Document.documentElement */
- abstract Element get documentElement;
+ Element get documentElement;
/** @domName Document.domain */
- abstract String get domain;
+ String get domain;
/** @domName Document.head */
- abstract HeadElement get head;
+ HeadElement get head;
/** @domName Document.implementation */
- abstract DOMImplementation get implementation;
+ DOMImplementation get implementation;
/** @domName Document.lastModified */
- abstract String get lastModified;
+ String get lastModified;
/** @domName Document.preferredStylesheetSet */
- abstract String get preferredStylesheetSet;
+ String get preferredStylesheetSet;
/** @domName Document.readyState */
- abstract String get readyState;
+ String get readyState;
/** @domName Document.referrer */
- abstract String get referrer;
+ String get referrer;
/** @domName Document.selectedStylesheetSet */
String selectedStylesheetSet;
/** @domName Document.styleSheets */
- abstract List<StyleSheet> get styleSheets;
+ List<StyleSheet> get styleSheets;
/** @domName Document.title */
String title;
/** @domName Document.webkitCurrentFullScreenElement */
- abstract Element get webkitCurrentFullScreenElement;
+ Element get webkitCurrentFullScreenElement;
/** @domName Document.webkitFullScreenKeyboardInputAllowed */
- abstract bool get webkitFullScreenKeyboardInputAllowed;
+ bool get webkitFullScreenKeyboardInputAllowed;
/** @domName Document.webkitFullscreenElement */
- abstract Element get webkitFullscreenElement;
+ Element get webkitFullscreenElement;
/** @domName Document.webkitFullscreenEnabled */
- abstract bool get webkitFullscreenEnabled;
+ bool get webkitFullscreenEnabled;
/** @domName Document.webkitHidden */
- abstract bool get webkitHidden;
+ bool get webkitHidden;
/** @domName Document.webkitIsFullScreen */
- abstract bool get webkitIsFullScreen;
+ bool get webkitIsFullScreen;
/** @domName Document.webkitPointerLockElement */
- abstract Element get webkitPointerLockElement;
+ Element get webkitPointerLockElement;
/** @domName Document.webkitVisibilityState */
- abstract String get webkitVisibilityState;
+ String get webkitVisibilityState;
/** @domName Document.caretRangeFromPoint */
Range caretRangeFromPoint(int x, int y);
@@ -11471,6 +11486,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.
+
/// @domName DocumentFragment
abstract class DocumentFragment extends Element {
@@ -11531,7 +11547,7 @@
if (newLength >= len) {
return;
} else if (newLength < 0) {
- throw const ArgumentError("Invalid list length");
+ throw new ArgumentError("Invalid list length");
}
removeRange(newLength - 1, len - newLength);
@@ -11554,7 +11570,7 @@
}
void sort([Comparator<Element> compare = Comparable.compare]) {
- throw const UnsupportedOperationException('TODO(jacobr): should we impl?');
+ throw new UnsupportedError('TODO(jacobr): should we impl?');
}
void setRange(int start, int rangeLength, List from, [int startFrom = 0]) {
@@ -11576,7 +11592,7 @@
}
Element removeLast() {
- final result = this.last();
+ final result = this.last;
if (result != null) {
result.remove();
}
@@ -11587,7 +11603,7 @@
Collection<Element> filter(bool f(Element element)) => _filtered.filter(f);
bool every(bool f(Element element)) => _filtered.every(f);
bool some(bool f(Element element)) => _filtered.some(f);
- bool isEmpty() => _filtered.isEmpty();
+ bool get isEmpty => _filtered.isEmpty;
int get length => _filtered.length;
Element operator [](int index) => _filtered[index];
Iterator<Element> iterator() => _filtered.iterator();
@@ -11597,11 +11613,11 @@
_filtered.indexOf(element, start);
int lastIndexOf(Element element, [int start = null]) {
- if (start === null) start = length - 1;
+ if (start == null) start = length - 1;
return _filtered.lastIndexOf(element, start);
}
- Element last() => _filtered.last();
+ Element get last => _filtered.last;
}
Future<CSSStyleDeclaration> _emptyStyleFuture() {
@@ -11623,7 +11639,7 @@
_FrozenCSSClassSet() : super(null);
void _write(Set s) {
- throw const UnsupportedOperationException(
+ throw new UnsupportedError(
'frozen class set cannot be modified');
}
Set<String> _read() => new Set<String>();
@@ -11737,7 +11753,7 @@
}
return null;
}
- Element get $m_lastElementChild() => elements.last();
+ Element get $m_lastElementChild() => elements.last;
Element get nextElementSibling => null;
Element get previousElementSibling => null;
Element get offsetParent => null;
@@ -11766,97 +11782,97 @@
// Setters throw errors rather than being no-ops because we aren't going to
// retain the values that were set, and erroring out seems clearer.
void set attributes(Map<String, String> value) {
- throw new UnsupportedOperationException(
+ throw new UnsupportedError(
"Attributes can't be set for document fragments.");
}
void set classes(Collection<String> value) {
- throw new UnsupportedOperationException(
+ throw new UnsupportedError(
"Classes can't be set for document fragments.");
}
void set dataAttributes(Map<String, String> value) {
- throw new UnsupportedOperationException(
+ throw new UnsupportedError(
"Data attributes can't be set for document fragments.");
}
void set contentEditable(String value) {
- throw new UnsupportedOperationException(
+ throw new UnsupportedError(
"Content editable can't be set for document fragments.");
}
String get dir {
- throw new UnsupportedOperationException(
+ throw new UnsupportedError(
"Document fragments don't support text direction.");
}
void set dir(String value) {
- throw new UnsupportedOperationException(
+ throw new UnsupportedError(
"Document fragments don't support text direction.");
}
void set draggable(bool value) {
- throw new UnsupportedOperationException(
+ throw new UnsupportedError(
"Draggable can't be set for document fragments.");
}
void set hidden(bool value) {
- throw new UnsupportedOperationException(
+ throw new UnsupportedError(
"Hidden can't be set for document fragments.");
}
void set id(String value) {
- throw new UnsupportedOperationException(
+ throw new UnsupportedError(
"ID can't be set for document fragments.");
}
String get lang {
- throw new UnsupportedOperationException(
+ throw new UnsupportedError(
"Document fragments don't support language.");
}
void set lang(String value) {
- throw new UnsupportedOperationException(
+ throw new UnsupportedError(
"Document fragments don't support language.");
}
void set scrollLeft(int value) {
- throw new UnsupportedOperationException(
+ throw new UnsupportedError(
"Document fragments don't support scrolling.");
}
void set scrollTop(int value) {
- throw new UnsupportedOperationException(
+ throw new UnsupportedError(
"Document fragments don't support scrolling.");
}
void set spellcheck(bool value) {
- throw new UnsupportedOperationException(
+ throw new UnsupportedError(
"Spellcheck can't be set for document fragments.");
}
void set translate(bool value) {
- throw new UnsupportedOperationException(
+ throw new UnsupportedError(
"Spellcheck can't be set for document fragments.");
}
void set tabIndex(int value) {
- throw new UnsupportedOperationException(
+ throw new UnsupportedError(
"Tab index can't be set for document fragments.");
}
void set title(String value) {
- throw new UnsupportedOperationException(
+ throw new UnsupportedError(
"Title can't be set for document fragments.");
}
void set webkitdropzone(String value) {
- throw new UnsupportedOperationException(
+ throw new UnsupportedError(
"WebKit drop zone can't be set for document fragments.");
}
void set webkitRegionOverflow(String value) {
- throw new UnsupportedOperationException(
+ throw new UnsupportedError(
"WebKit region overflow can't be set for document fragments.");
}
@@ -12147,22 +12163,22 @@
abstract class DocumentType implements Node {
/** @domName DocumentType.entities */
- abstract NamedNodeMap get entities;
+ NamedNodeMap get entities;
/** @domName DocumentType.internalSubset */
- abstract String get internalSubset;
+ String get internalSubset;
/** @domName DocumentType.name */
- abstract String get name;
+ String get name;
/** @domName DocumentType.notations */
- abstract NamedNodeMap get notations;
+ NamedNodeMap get notations;
/** @domName DocumentType.publicId */
- abstract String get publicId;
+ String get publicId;
/** @domName DocumentType.systemId */
- abstract String get systemId;
+ String get systemId;
/** @domName DocumentType.remove */
void remove();
@@ -12200,22 +12216,22 @@
abstract class DynamicsCompressorNode implements AudioNode {
/** @domName DynamicsCompressorNode.attack */
- abstract AudioParam get attack;
+ AudioParam get attack;
/** @domName DynamicsCompressorNode.knee */
- abstract AudioParam get knee;
+ AudioParam get knee;
/** @domName DynamicsCompressorNode.ratio */
- abstract AudioParam get ratio;
+ AudioParam get ratio;
/** @domName DynamicsCompressorNode.reduction */
- abstract AudioParam get reduction;
+ AudioParam get reduction;
/** @domName DynamicsCompressorNode.release */
- abstract AudioParam get release;
+ AudioParam get release;
/** @domName DynamicsCompressorNode.threshold */
- abstract AudioParam get threshold;
+ AudioParam get threshold;
}
// 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
@@ -12266,6 +12282,7 @@
// WARNING: Do not edit - generated code.
+
/**
* All your attribute manipulation needs in one place.
* Extends the regular Map interface by automatically coercing non-string
@@ -12381,7 +12398,7 @@
ElementEvents get on;
/** @domName HTMLElement.children */
- abstract HTMLCollection get $dom_children;
+ HTMLCollection get $dom_children;
/** @domName HTMLElement.contentEditable */
String contentEditable;
@@ -12402,13 +12419,13 @@
String innerHTML;
/** @domName HTMLElement.isContentEditable */
- abstract bool get isContentEditable;
+ bool get isContentEditable;
/** @domName HTMLElement.lang */
String lang;
/** @domName HTMLElement.outerHTML */
- abstract String get outerHTML;
+ String get outerHTML;
/** @domName HTMLElement.spellcheck */
bool spellcheck;
@@ -12440,55 +12457,55 @@
static const int ALLOW_KEYBOARD_INPUT = 1;
/** @domName Element.childElementCount */
- abstract int get $dom_childElementCount;
+ int get $dom_childElementCount;
/** @domName Element.className */
String $dom_className;
/** @domName Element.clientHeight */
- abstract int get clientHeight;
+ int get clientHeight;
/** @domName Element.clientLeft */
- abstract int get clientLeft;
+ int get clientLeft;
/** @domName Element.clientTop */
- abstract int get clientTop;
+ int get clientTop;
/** @domName Element.clientWidth */
- abstract int get clientWidth;
+ int get clientWidth;
/** @domName Element.dataset */
- abstract Map<String, String> get dataset;
+ Map<String, String> get dataset;
/** @domName Element.firstElementChild */
- abstract Element get $dom_firstElementChild;
+ Element get $dom_firstElementChild;
/** @domName Element.lastElementChild */
- abstract Element get $dom_lastElementChild;
+ Element get $dom_lastElementChild;
/** @domName Element.nextElementSibling */
- abstract Element get nextElementSibling;
+ Element get nextElementSibling;
/** @domName Element.offsetHeight */
- abstract int get offsetHeight;
+ int get offsetHeight;
/** @domName Element.offsetLeft */
- abstract int get offsetLeft;
+ int get offsetLeft;
/** @domName Element.offsetParent */
- abstract Element get offsetParent;
+ Element get offsetParent;
/** @domName Element.offsetTop */
- abstract int get offsetTop;
+ int get offsetTop;
/** @domName Element.offsetWidth */
- abstract int get offsetWidth;
+ int get offsetWidth;
/** @domName Element.previousElementSibling */
- abstract Element get previousElementSibling;
+ Element get previousElementSibling;
/** @domName Element.scrollHeight */
- abstract int get scrollHeight;
+ int get scrollHeight;
/** @domName Element.scrollLeft */
int scrollLeft;
@@ -12497,13 +12514,13 @@
int scrollTop;
/** @domName Element.scrollWidth */
- abstract int get scrollWidth;
+ int get scrollWidth;
/** @domName Element.style */
- abstract CSSStyleDeclaration get style;
+ CSSStyleDeclaration get style;
/** @domName Element.tagName */
- abstract String get tagName;
+ String get tagName;
/** @domName Element.blur */
void blur();
@@ -12732,7 +12749,7 @@
return out;
}
- bool isEmpty() {
+ bool get isEmpty {
return _element.$dom_firstElementChild == null;
}
@@ -12750,7 +12767,7 @@
void set length(int newLength) {
// TODO(jacobr): remove children when length is reduced.
- throw const UnsupportedOperationException('');
+ throw new UnsupportedError('');
}
Element add(_ElementImpl value) {
@@ -12769,7 +12786,7 @@
}
void sort([Comparator<Element> compare = Comparable.compare]) {
- throw const UnsupportedOperationException('TODO(jacobr): should we impl?');
+ throw new UnsupportedError('TODO(jacobr): should we impl?');
}
void setRange(int start, int rangeLength, List from, [int startFrom = 0]) {
@@ -12793,7 +12810,7 @@
}
int lastIndexOf(Element element, [int start = null]) {
- if (start === null) start = length - 1;
+ if (start == null) start = length - 1;
return _Lists.lastIndexOf(this, element, start);
}
@@ -12803,14 +12820,14 @@
}
Element removeLast() {
- final result = this.last();
+ final result = this.last;
if (result != null) {
_element.$dom_removeChild(result);
}
return result;
}
- Element last() {
+ Element get last {
return _element.$dom_lastElementChild;
}
}
@@ -12875,14 +12892,14 @@
return false;
}
- bool isEmpty() => _nodeList.isEmpty();
+ bool get isEmpty => _nodeList.isEmpty;
int get length => _nodeList.length;
Element operator [](int index) => _nodeList[index];
void operator []=(int index, Element value) {
- throw const UnsupportedOperationException('');
+ throw new UnsupportedError('');
}
void set length(int newLength) {
@@ -12890,33 +12907,33 @@
}
void add(Element value) {
- throw const UnsupportedOperationException('');
+ throw new UnsupportedError('');
}
void addLast(Element value) {
- throw const UnsupportedOperationException('');
+ throw new UnsupportedError('');
}
Iterator<Element> iterator() => new _FrozenElementListIterator(this);
void addAll(Collection<Element> collection) {
- throw const UnsupportedOperationException('');
+ throw new UnsupportedError('');
}
void sort([Comparator<Element> compare = Comparable.compare]) {
- throw const UnsupportedOperationException('');
+ throw new UnsupportedError('');
}
void setRange(int start, int rangeLength, List from, [int startFrom = 0]) {
- throw const UnsupportedOperationException('');
+ throw new UnsupportedError('');
}
void removeRange(int start, int rangeLength) {
- throw const UnsupportedOperationException('');
+ throw new UnsupportedError('');
}
void insertRange(int start, int rangeLength, [initialValue = null]) {
- throw const UnsupportedOperationException('');
+ throw new UnsupportedError('');
}
List<Element> getRange(int start, int rangeLength) =>
@@ -12929,14 +12946,14 @@
_nodeList.lastIndexOf(element, start);
void clear() {
- throw const UnsupportedOperationException('');
+ throw new UnsupportedError('');
}
Element removeLast() {
- throw const UnsupportedOperationException('');
+ throw new UnsupportedError('');
}
- Element last() => _nodeList.last();
+ Element get last => _nodeList.last;
}
class _FrozenElementListIterator implements Iterator<Element> {
@@ -12947,11 +12964,11 @@
/**
* Gets the next element in the iteration. Throws a
- * [NoMoreElementsException] if no element is left.
+ * [StateError("No more elements")] if no element is left.
*/
Element next() {
- if (!hasNext()) {
- throw const NoMoreElementsException();
+ if (!hasNext) {
+ throw new StateError("No more elements");
}
return _list[_index++];
@@ -12960,7 +12977,7 @@
/**
* Returns whether the [Iterator] has elements left.
*/
- bool hasNext() => _index < _list.length;
+ bool get hasNext => _index < _list.length;
}
class _ElementAttributeMap implements AttributeMap {
@@ -13019,7 +13036,7 @@
}
}
- Collection<String> getKeys() {
+ Collection<String> get keys {
// TODO(jacobr): generate a lazy collection instead.
final attributes = _element.$dom_attributes;
final keys = new List<String>(attributes.length);
@@ -13029,7 +13046,7 @@
return keys;
}
- Collection<String> getValues() {
+ Collection<String> get values {
// TODO(jacobr): generate a lazy collection instead.
final attributes = _element.$dom_attributes;
final values = new List<String>(attributes.length);
@@ -13049,7 +13066,7 @@
/**
* Returns true if there is no {key, value} pair in the map.
*/
- bool isEmpty() {
+ bool get isEmpty {
return length == 0;
}
}
@@ -13067,7 +13084,7 @@
// interface Map
// TODO: Use lazy iterator when it is available on Map.
- bool containsValue(String value) => getValues().some((v) => v == value);
+ bool containsValue(String value) => values.some((v) => v == value);
bool containsKey(String key) => $dom_attributes.containsKey(_attr(key));
@@ -13084,7 +13101,7 @@
void clear() {
// Needs to operate on a snapshot since we are mutating the collection.
- for (String key in getKeys()) {
+ for (String key in keys) {
remove(key);
}
}
@@ -13097,7 +13114,7 @@
});
}
- Collection<String> getKeys() {
+ Collection<String> get keys {
final keys = new List<String>();
$dom_attributes.forEach((String key, String value) {
if (_matches(key)) {
@@ -13107,7 +13124,7 @@
return keys;
}
- Collection<String> getValues() {
+ Collection<String> get values {
final values = new List<String>();
$dom_attributes.forEach((String key, String value) {
if (_matches(key)) {
@@ -13117,10 +13134,10 @@
return values;
}
- int get length => getKeys().length;
+ int get length => keys.length;
// TODO: Use lazy iterator when it is available on Map.
- bool isEmpty() => length == 0;
+ bool get isEmpty => length == 0;
// Helpers.
String _attr(String key) => 'data-$key';
@@ -13153,7 +13170,7 @@
bool some(bool f(String element)) => _read().some(f);
- bool isEmpty() => _read().isEmpty();
+ bool get isEmpty => _read().isEmpty;
bool get frozen => false;
@@ -13237,7 +13254,7 @@
Set<String> s = new Set<String>();
for (String name in _classname().split(' ')) {
String trimmed = name.trim();
- if (!trimmed.isEmpty()) {
+ if (!trimmed.isEmpty) {
s.add(trimmed);
}
}
@@ -13276,7 +13293,7 @@
const _SimpleClientRect(this.left, this.top, this.width, this.height);
bool operator ==(ClientRect other) {
- return other !== null && left == other.left && top == other.top
+ return other != null && left == other.left && top == other.top
&& width == other.width && height == other.height;
}
@@ -13339,7 +13356,7 @@
void set attributes(Map<String, String> value) {
Map<String, String> attributes = this.attributes;
attributes.clear();
- for (String key in value.getKeys()) {
+ for (String key in value.keys) {
attributes[key] = value[key];
}
}
@@ -13371,7 +13388,7 @@
void set dataAttributes(Map<String, String> value) {
final dataAttributes = this.dataAttributes;
dataAttributes.clear();
- for (String key in value.getKeys()) {
+ for (String key in value.keys) {
dataAttributes[key] = value[key];
}
}
@@ -13549,7 +13566,7 @@
String parentTag = 'div';
String tag;
final match = _START_TAG_REGEXP.firstMatch(html);
- if (match !== null) {
+ if (match != null) {
tag = match.group(1).toLowerCase();
if (_CUSTOM_PARENT_TAG_MAP.containsKey(tag)) {
parentTag = _CUSTOM_PARENT_TAG_MAP[tag];
@@ -13780,19 +13797,19 @@
abstract class ElementTraversal {
/** @domName ElementTraversal.childElementCount */
- abstract int get childElementCount;
+ int get childElementCount;
/** @domName ElementTraversal.firstElementChild */
- abstract Element get firstElementChild;
+ Element get firstElementChild;
/** @domName ElementTraversal.lastElementChild */
- abstract Element get lastElementChild;
+ Element get lastElementChild;
/** @domName ElementTraversal.nextElementSibling */
- abstract Element get nextElementSibling;
+ Element get nextElementSibling;
/** @domName ElementTraversal.previousElementSibling */
- abstract Element get previousElementSibling;
+ Element get previousElementSibling;
}
// 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
@@ -13880,6 +13897,7 @@
// WARNING: Do not edit - generated code.
+
typedef void EntriesCallback(List<Entry> entries);
// 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
@@ -13891,19 +13909,19 @@
abstract class Entry {
/** @domName Entry.filesystem */
- abstract DOMFileSystem get filesystem;
+ DOMFileSystem get filesystem;
/** @domName Entry.fullPath */
- abstract String get fullPath;
+ String get fullPath;
/** @domName Entry.isDirectory */
- abstract bool get isDirectory;
+ bool get isDirectory;
/** @domName Entry.isFile */
- abstract bool get isFile;
+ bool get isFile;
/** @domName Entry.name */
- abstract String get name;
+ String get name;
/** @domName Entry.copyTo */
void copyTo(DirectoryEntry parent, [String name, EntryCallback successCallback, ErrorCallback errorCallback]);
@@ -13936,7 +13954,7 @@
Entry operator[](int index) native "EntryArray_item_Callback";
void operator[]=(int index, Entry value) {
- throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+ throw new UnsupportedError("Cannot assign element of immutable List.");
}
// -- start List<Entry> mixins.
// Entry is the element type.
@@ -13953,15 +13971,15 @@
// From Collection<Entry>:
void add(Entry value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addLast(Entry value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addAll(Collection<Entry> collection) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
bool contains(Entry element) => _Collections.contains(this, element);
@@ -13977,38 +13995,38 @@
bool some(bool f(Entry element)) => _Collections.some(this, f);
- bool isEmpty() => this.length == 0;
+ bool get isEmpty => this.length == 0;
// From List<Entry>:
void sort([Comparator<Entry> compare = Comparable.compare]) {
- throw const UnsupportedOperationException("Cannot sort immutable List.");
+ throw new UnsupportedError("Cannot sort immutable List.");
}
int indexOf(Entry element, [int start = 0]) =>
_Lists.indexOf(this, element, start, this.length);
int lastIndexOf(Entry element, [int start]) {
- if (start === null) start = length - 1;
+ if (start == null) start = length - 1;
return _Lists.lastIndexOf(this, element, start);
}
- Entry last() => this[length - 1];
+ Entry get last => this[length - 1];
Entry removeLast() {
- throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+ throw new UnsupportedError("Cannot removeLast on immutable List.");
}
void setRange(int start, int rangeLength, List<Entry> from, [int startFrom]) {
- throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+ throw new UnsupportedError("Cannot setRange on immutable List.");
}
void removeRange(int start, int rangeLength) {
- throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+ throw new UnsupportedError("Cannot removeRange on immutable List.");
}
void insertRange(int start, int rangeLength, [Entry initialValue]) {
- throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+ throw new UnsupportedError("Cannot insertRange on immutable List.");
}
List<Entry> getRange(int start, int rangeLength) =>
@@ -14032,7 +14050,7 @@
EntrySync operator[](int index) native "EntryArraySync_item_Callback";
void operator[]=(int index, EntrySync value) {
- throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+ throw new UnsupportedError("Cannot assign element of immutable List.");
}
// -- start List<EntrySync> mixins.
// EntrySync is the element type.
@@ -14049,15 +14067,15 @@
// From Collection<EntrySync>:
void add(EntrySync value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addLast(EntrySync value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addAll(Collection<EntrySync> collection) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
bool contains(EntrySync element) => _Collections.contains(this, element);
@@ -14073,38 +14091,38 @@
bool some(bool f(EntrySync element)) => _Collections.some(this, f);
- bool isEmpty() => this.length == 0;
+ bool get isEmpty => this.length == 0;
// From List<EntrySync>:
void sort([Comparator<EntrySync> compare = Comparable.compare]) {
- throw const UnsupportedOperationException("Cannot sort immutable List.");
+ throw new UnsupportedError("Cannot sort immutable List.");
}
int indexOf(EntrySync element, [int start = 0]) =>
_Lists.indexOf(this, element, start, this.length);
int lastIndexOf(EntrySync element, [int start]) {
- if (start === null) start = length - 1;
+ if (start == null) start = length - 1;
return _Lists.lastIndexOf(this, element, start);
}
- EntrySync last() => this[length - 1];
+ EntrySync get last => this[length - 1];
EntrySync removeLast() {
- throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+ throw new UnsupportedError("Cannot removeLast on immutable List.");
}
void setRange(int start, int rangeLength, List<EntrySync> from, [int startFrom]) {
- throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+ throw new UnsupportedError("Cannot setRange on immutable List.");
}
void removeRange(int start, int rangeLength) {
- throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+ throw new UnsupportedError("Cannot removeRange on immutable List.");
}
void insertRange(int start, int rangeLength, [EntrySync initialValue]) {
- throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+ throw new UnsupportedError("Cannot insertRange on immutable List.");
}
List<EntrySync> getRange(int start, int rangeLength) =>
@@ -14121,6 +14139,7 @@
// WARNING: Do not edit - generated code.
+
typedef void EntryCallback(Entry entry);
// 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
@@ -14183,19 +14202,19 @@
abstract class EntrySync {
/** @domName EntrySync.filesystem */
- abstract DOMFileSystemSync get filesystem;
+ DOMFileSystemSync get filesystem;
/** @domName EntrySync.fullPath */
- abstract String get fullPath;
+ String get fullPath;
/** @domName EntrySync.isDirectory */
- abstract bool get isDirectory;
+ bool get isDirectory;
/** @domName EntrySync.isFile */
- abstract bool get isFile;
+ bool get isFile;
/** @domName EntrySync.name */
- abstract String get name;
+ String get name;
/** @domName EntrySync.copyTo */
EntrySync copyTo(DirectoryEntrySync parent, String name);
@@ -14252,6 +14271,7 @@
// WARNING: Do not edit - generated code.
+
typedef void ErrorCallback(FileError error);
// 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
@@ -14263,13 +14283,13 @@
abstract class ErrorEvent implements Event {
/** @domName ErrorEvent.filename */
- abstract String get filename;
+ String get filename;
/** @domName ErrorEvent.lineno */
- abstract int get lineno;
+ int get lineno;
/** @domName ErrorEvent.message */
- abstract String get message;
+ String get message;
}
// 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
@@ -14292,6 +14312,7 @@
// WARNING: Do not edit - generated code.
+
/// @domName Event
abstract class Event {
@@ -14345,40 +14366,40 @@
static const int SELECT = 16384;
/** @domName Event.bubbles */
- abstract bool get bubbles;
+ bool get bubbles;
/** @domName Event.cancelBubble */
bool cancelBubble;
/** @domName Event.cancelable */
- abstract bool get cancelable;
+ bool get cancelable;
/** @domName Event.clipboardData */
- abstract Clipboard get clipboardData;
+ Clipboard get clipboardData;
/** @domName Event.currentTarget */
- abstract EventTarget get currentTarget;
+ EventTarget get currentTarget;
/** @domName Event.defaultPrevented */
- abstract bool get defaultPrevented;
+ bool get defaultPrevented;
/** @domName Event.eventPhase */
- abstract int get eventPhase;
+ int get eventPhase;
/** @domName Event.returnValue */
bool returnValue;
/** @domName Event.srcElement */
- abstract EventTarget get srcElement;
+ EventTarget get srcElement;
/** @domName Event.target */
- abstract EventTarget get target;
+ EventTarget get target;
/** @domName Event.timeStamp */
- abstract int get timeStamp;
+ int get timeStamp;
/** @domName Event.type */
- abstract String get type;
+ String get type;
/** @domName Event.initEvent */
void $dom_initEvent(String eventTypeArg, bool canBubbleArg, bool cancelableArg);
@@ -14406,13 +14427,13 @@
static const int UNSPECIFIED_EVENT_TYPE_ERR = 0;
/** @domName EventException.code */
- abstract int get code;
+ int get code;
/** @domName EventException.message */
- abstract String get message;
+ String get message;
/** @domName EventException.name */
- abstract String get name;
+ String get name;
/** @domName EventException.toString */
String toString();
@@ -14502,13 +14523,13 @@
static const int OPEN = 1;
/** @domName EventSource.URL */
- abstract String get URL;
+ String get URL;
/** @domName EventSource.readyState */
- abstract int get readyState;
+ int get readyState;
/** @domName EventSource.url */
- abstract String get url;
+ String get url;
/** @domName EventSource.addEventListener */
void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
@@ -14573,6 +14594,7 @@
// WARNING: Do not edit - generated code.
+
abstract class EventListenerList {
EventListenerList add(EventListener handler, [bool useCapture]);
@@ -14609,7 +14631,7 @@
/* Raw event target. */
// TODO(jacobr): it would be nice if we could specify this as
// _EventTargetImpl or EventTarget
- final Dynamic _ptr;
+ final _ptr;
_EventsImpl(this._ptr);
@@ -14621,7 +14643,7 @@
class _EventListenerListImpl implements EventListenerList {
// TODO(jacobr): make this _EventTargetImpl
- final Dynamic _ptr;
+ final _ptr;
final String _type;
_EventListenerListImpl(this._ptr, this._type);
@@ -14680,25 +14702,25 @@
bool disabled;
/** @domName HTMLFieldSetElement.elements */
- abstract HTMLCollection get elements;
+ HTMLCollection get elements;
/** @domName HTMLFieldSetElement.form */
- abstract FormElement get form;
+ FormElement get form;
/** @domName HTMLFieldSetElement.name */
String name;
/** @domName HTMLFieldSetElement.type */
- abstract String get type;
+ String get type;
/** @domName HTMLFieldSetElement.validationMessage */
- abstract String get validationMessage;
+ String get validationMessage;
/** @domName HTMLFieldSetElement.validity */
- abstract ValidityState get validity;
+ ValidityState get validity;
/** @domName HTMLFieldSetElement.willValidate */
- abstract bool get willValidate;
+ bool get willValidate;
/** @domName HTMLFieldSetElement.checkValidity */
bool checkValidity();
@@ -14749,13 +14771,13 @@
abstract class File implements Blob {
/** @domName File.lastModifiedDate */
- abstract Date get lastModifiedDate;
+ Date get lastModifiedDate;
/** @domName File.name */
- abstract String get name;
+ String get name;
/** @domName File.webkitRelativePath */
- abstract String get webkitRelativePath;
+ String get webkitRelativePath;
}
// 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
@@ -14763,6 +14785,7 @@
// WARNING: Do not edit - generated code.
+
typedef void FileCallback(File 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
@@ -14854,7 +14877,7 @@
static const int TYPE_MISMATCH_ERR = 11;
/** @domName FileError.code */
- abstract int get code;
+ int get code;
}
// 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
@@ -14901,13 +14924,13 @@
static const int TYPE_MISMATCH_ERR = 11;
/** @domName FileException.code */
- abstract int get code;
+ int get code;
/** @domName FileException.message */
- abstract String get message;
+ String get message;
/** @domName FileException.name */
- abstract String get name;
+ String get name;
/** @domName FileException.toString */
String toString();
@@ -14957,7 +14980,7 @@
File operator[](int index) native "FileList_item_Callback";
void operator[]=(int index, File value) {
- throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+ throw new UnsupportedError("Cannot assign element of immutable List.");
}
// -- start List<File> mixins.
// File is the element type.
@@ -14974,15 +14997,15 @@
// From Collection<File>:
void add(File value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addLast(File value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addAll(Collection<File> collection) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
bool contains(File element) => _Collections.contains(this, element);
@@ -14998,38 +15021,38 @@
bool some(bool f(File element)) => _Collections.some(this, f);
- bool isEmpty() => this.length == 0;
+ bool get isEmpty => this.length == 0;
// From List<File>:
void sort([Comparator<File> compare = Comparable.compare]) {
- throw const UnsupportedOperationException("Cannot sort immutable List.");
+ throw new UnsupportedError("Cannot sort immutable List.");
}
int indexOf(File element, [int start = 0]) =>
_Lists.indexOf(this, element, start, this.length);
int lastIndexOf(File element, [int start]) {
- if (start === null) start = length - 1;
+ if (start == null) start = length - 1;
return _Lists.lastIndexOf(this, element, start);
}
- File last() => this[length - 1];
+ File get last => this[length - 1];
File removeLast() {
- throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+ throw new UnsupportedError("Cannot removeLast on immutable List.");
}
void setRange(int start, int rangeLength, List<File> from, [int startFrom]) {
- throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+ throw new UnsupportedError("Cannot setRange on immutable List.");
}
void removeRange(int start, int rangeLength) {
- throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+ throw new UnsupportedError("Cannot removeRange on immutable List.");
}
void insertRange(int start, int rangeLength, [File initialValue]) {
- throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+ throw new UnsupportedError("Cannot insertRange on immutable List.");
}
List<File> getRange(int start, int rangeLength) =>
@@ -15063,13 +15086,13 @@
static const int LOADING = 1;
/** @domName FileReader.error */
- abstract FileError get error;
+ FileError get error;
/** @domName FileReader.readyState */
- abstract int get readyState;
+ int get readyState;
/** @domName FileReader.result */
- abstract Object get result;
+ Object get result;
/** @domName FileReader.abort */
void abort();
@@ -15225,6 +15248,7 @@
// WARNING: Do not edit - generated code.
+
typedef void FileSystemCallback(DOMFileSystem fileSystem);
// 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
@@ -15247,16 +15271,16 @@
static const int WRITING = 1;
/** @domName FileWriter.error */
- abstract FileError get error;
+ FileError get error;
/** @domName FileWriter.length */
- abstract int get length;
+ int get length;
/** @domName FileWriter.position */
- abstract int get position;
+ int get position;
/** @domName FileWriter.readyState */
- abstract int get readyState;
+ int get readyState;
/** @domName FileWriter.abort */
void abort();
@@ -15300,6 +15324,7 @@
// WARNING: Do not edit - generated code.
+
typedef void FileWriterCallback(FileWriter fileWriter);
// 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
@@ -15361,10 +15386,10 @@
abstract class FileWriterSync {
/** @domName FileWriterSync.length */
- abstract int get length;
+ int get length;
/** @domName FileWriterSync.position */
- abstract int get position;
+ int get position;
/** @domName FileWriterSync.seek */
void seek(int position);
@@ -15415,7 +15440,7 @@
static const int BYTES_PER_ELEMENT = 4;
/** @domName Float32Array.length */
- abstract int get length;
+ int get length;
/** @domName Float32Array.setElements */
void setElements(Object array, [int offset]);
@@ -15451,15 +15476,15 @@
// From Collection<num>:
void add(num value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addLast(num value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addAll(Collection<num> collection) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
bool contains(num element) => _Collections.contains(this, element);
@@ -15475,38 +15500,38 @@
bool some(bool f(num element)) => _Collections.some(this, f);
- bool isEmpty() => this.length == 0;
+ bool get isEmpty => this.length == 0;
// From List<num>:
void sort([Comparator<num> compare = Comparable.compare]) {
- throw const UnsupportedOperationException("Cannot sort immutable List.");
+ throw new UnsupportedError("Cannot sort immutable List.");
}
int indexOf(num element, [int start = 0]) =>
_Lists.indexOf(this, element, start, this.length);
int lastIndexOf(num element, [int start]) {
- if (start === null) start = length - 1;
+ if (start == null) start = length - 1;
return _Lists.lastIndexOf(this, element, start);
}
- num last() => this[length - 1];
+ num get last => this[length - 1];
num removeLast() {
- throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+ throw new UnsupportedError("Cannot removeLast on immutable List.");
}
void setRange(int start, int rangeLength, List<num> from, [int startFrom]) {
- throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+ throw new UnsupportedError("Cannot setRange on immutable List.");
}
void removeRange(int start, int rangeLength) {
- throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+ throw new UnsupportedError("Cannot removeRange on immutable List.");
}
void insertRange(int start, int rangeLength, [num initialValue]) {
- throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+ throw new UnsupportedError("Cannot insertRange on immutable List.");
}
List<num> getRange(int start, int rangeLength) =>
@@ -15549,7 +15574,7 @@
static const int BYTES_PER_ELEMENT = 8;
/** @domName Float64Array.length */
- abstract int get length;
+ int get length;
/** @domName Float64Array.setElements */
void setElements(Object array, [int offset]);
@@ -15585,15 +15610,15 @@
// From Collection<num>:
void add(num value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addLast(num value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addAll(Collection<num> collection) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
bool contains(num element) => _Collections.contains(this, element);
@@ -15609,38 +15634,38 @@
bool some(bool f(num element)) => _Collections.some(this, f);
- bool isEmpty() => this.length == 0;
+ bool get isEmpty => this.length == 0;
// From List<num>:
void sort([Comparator<num> compare = Comparable.compare]) {
- throw const UnsupportedOperationException("Cannot sort immutable List.");
+ throw new UnsupportedError("Cannot sort immutable List.");
}
int indexOf(num element, [int start = 0]) =>
_Lists.indexOf(this, element, start, this.length);
int lastIndexOf(num element, [int start]) {
- if (start === null) start = length - 1;
+ if (start == null) start = length - 1;
return _Lists.lastIndexOf(this, element, start);
}
- num last() => this[length - 1];
+ num get last => this[length - 1];
num removeLast() {
- throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+ throw new UnsupportedError("Cannot removeLast on immutable List.");
}
void setRange(int start, int rangeLength, List<num> from, [int startFrom]) {
- throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+ throw new UnsupportedError("Cannot setRange on immutable List.");
}
void removeRange(int start, int rangeLength) {
- throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+ throw new UnsupportedError("Cannot removeRange on immutable List.");
}
void insertRange(int start, int rangeLength, [num initialValue]) {
- throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+ throw new UnsupportedError("Cannot insertRange on immutable List.");
}
List<num> getRange(int start, int rangeLength) =>
@@ -15758,7 +15783,7 @@
String enctype;
/** @domName HTMLFormElement.length */
- abstract int get length;
+ int get length;
/** @domName HTMLFormElement.method */
String method;
@@ -15843,17 +15868,14 @@
/// @domName HTMLFrameElement
abstract class FrameElement implements Element {
- /** @domName HTMLFrameElement.contentDocument */
- abstract Document get contentDocument;
-
/** @domName HTMLFrameElement.contentWindow */
- abstract Window get contentWindow;
+ Window get contentWindow;
/** @domName HTMLFrameElement.frameBorder */
String frameBorder;
/** @domName HTMLFrameElement.height */
- abstract int get height;
+ int get height;
/** @domName HTMLFrameElement.location */
String location;
@@ -15880,10 +15902,7 @@
String src;
/** @domName HTMLFrameElement.width */
- abstract int get width;
-
- /** @domName HTMLFrameElement.getSVGDocument */
- SVGDocument getSVGDocument();
+ int get width;
}
// 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
@@ -16045,19 +16064,19 @@
abstract class Gamepad {
/** @domName Gamepad.axes */
- abstract List<num> get axes;
+ List<num> get axes;
/** @domName Gamepad.buttons */
- abstract List<num> get buttons;
+ List<num> get buttons;
/** @domName Gamepad.id */
- abstract String get id;
+ String get id;
/** @domName Gamepad.index */
- abstract int get index;
+ int get index;
/** @domName Gamepad.timestamp */
- abstract int get timestamp;
+ int get timestamp;
}
// 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
@@ -16091,7 +16110,7 @@
Gamepad operator[](int index) native "GamepadList_item_Callback";
void operator[]=(int index, Gamepad value) {
- throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+ throw new UnsupportedError("Cannot assign element of immutable List.");
}
// -- start List<Gamepad> mixins.
// Gamepad is the element type.
@@ -16108,15 +16127,15 @@
// From Collection<Gamepad>:
void add(Gamepad value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addLast(Gamepad value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addAll(Collection<Gamepad> collection) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
bool contains(Gamepad element) => _Collections.contains(this, element);
@@ -16132,38 +16151,38 @@
bool some(bool f(Gamepad element)) => _Collections.some(this, f);
- bool isEmpty() => this.length == 0;
+ bool get isEmpty => this.length == 0;
// From List<Gamepad>:
void sort([Comparator<Gamepad> compare = Comparable.compare]) {
- throw const UnsupportedOperationException("Cannot sort immutable List.");
+ throw new UnsupportedError("Cannot sort immutable List.");
}
int indexOf(Gamepad element, [int start = 0]) =>
_Lists.indexOf(this, element, start, this.length);
int lastIndexOf(Gamepad element, [int start]) {
- if (start === null) start = length - 1;
+ if (start == null) start = length - 1;
return _Lists.lastIndexOf(this, element, start);
}
- Gamepad last() => this[length - 1];
+ Gamepad get last => this[length - 1];
Gamepad removeLast() {
- throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+ throw new UnsupportedError("Cannot removeLast on immutable List.");
}
void setRange(int start, int rangeLength, List<Gamepad> from, [int startFrom]) {
- throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+ throw new UnsupportedError("Cannot setRange on immutable List.");
}
void removeRange(int start, int rangeLength) {
- throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+ throw new UnsupportedError("Cannot removeRange on immutable List.");
}
void insertRange(int start, int rangeLength, [Gamepad initialValue]) {
- throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+ throw new UnsupportedError("Cannot insertRange on immutable List.");
}
List<Gamepad> getRange(int start, int rangeLength) =>
@@ -16217,10 +16236,10 @@
abstract class Geoposition {
/** @domName Geoposition.coords */
- abstract Coordinates get coords;
+ Coordinates get coords;
/** @domName Geoposition.timestamp */
- abstract int get timestamp;
+ int get timestamp;
}
// 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
@@ -16293,7 +16312,7 @@
abstract class HTMLAllCollection implements List<Node> {
/** @domName HTMLAllCollection.length */
- abstract int get length;
+ int get length;
/** @domName HTMLAllCollection.item */
Node item(int index);
@@ -16317,7 +16336,7 @@
Node operator[](int index) native "HTMLAllCollection_item_Callback";
void operator[]=(int index, Node value) {
- throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+ throw new UnsupportedError("Cannot assign element of immutable List.");
}
// -- start List<Node> mixins.
// Node is the element type.
@@ -16334,15 +16353,15 @@
// From Collection<Node>:
void add(Node value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addLast(Node value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addAll(Collection<Node> collection) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
bool contains(Node element) => _Collections.contains(this, element);
@@ -16358,38 +16377,38 @@
bool some(bool f(Node element)) => _Collections.some(this, f);
- bool isEmpty() => this.length == 0;
+ bool get isEmpty => this.length == 0;
// From List<Node>:
void sort([Comparator<Node> compare = Comparable.compare]) {
- throw const UnsupportedOperationException("Cannot sort immutable List.");
+ throw new UnsupportedError("Cannot sort immutable List.");
}
int indexOf(Node element, [int start = 0]) =>
_Lists.indexOf(this, element, start, this.length);
int lastIndexOf(Node element, [int start]) {
- if (start === null) start = length - 1;
+ if (start == null) start = length - 1;
return _Lists.lastIndexOf(this, element, start);
}
- Node last() => this[length - 1];
+ Node get last => this[length - 1];
Node removeLast() {
- throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+ throw new UnsupportedError("Cannot removeLast on immutable List.");
}
void setRange(int start, int rangeLength, List<Node> from, [int startFrom]) {
- throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+ throw new UnsupportedError("Cannot setRange on immutable List.");
}
void removeRange(int start, int rangeLength) {
- throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+ throw new UnsupportedError("Cannot removeRange on immutable List.");
}
void insertRange(int start, int rangeLength, [Node initialValue]) {
- throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+ throw new UnsupportedError("Cannot insertRange on immutable List.");
}
List<Node> getRange(int start, int rangeLength) =>
@@ -16414,7 +16433,7 @@
abstract class HTMLCollection implements List<Node> {
/** @domName HTMLCollection.length */
- abstract int get length;
+ int get length;
/** @domName HTMLCollection.item */
Node item(int index);
@@ -16435,7 +16454,7 @@
Node operator[](int index) native "HTMLCollection_item_Callback";
void operator[]=(int index, Node value) {
- throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+ throw new UnsupportedError("Cannot assign element of immutable List.");
}
// -- start List<Node> mixins.
// Node is the element type.
@@ -16452,15 +16471,15 @@
// From Collection<Node>:
void add(Node value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addLast(Node value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addAll(Collection<Node> collection) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
bool contains(Node element) => _Collections.contains(this, element);
@@ -16476,38 +16495,38 @@
bool some(bool f(Node element)) => _Collections.some(this, f);
- bool isEmpty() => this.length == 0;
+ bool get isEmpty => this.length == 0;
// From List<Node>:
void sort([Comparator<Node> compare = Comparable.compare]) {
- throw const UnsupportedOperationException("Cannot sort immutable List.");
+ throw new UnsupportedError("Cannot sort immutable List.");
}
int indexOf(Node element, [int start = 0]) =>
_Lists.indexOf(this, element, start, this.length);
int lastIndexOf(Node element, [int start]) {
- if (start === null) start = length - 1;
+ if (start == null) start = length - 1;
return _Lists.lastIndexOf(this, element, start);
}
- Node last() => this[length - 1];
+ Node get last => this[length - 1];
Node removeLast() {
- throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+ throw new UnsupportedError("Cannot removeLast on immutable List.");
}
void setRange(int start, int rangeLength, List<Node> from, [int startFrom]) {
- throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+ throw new UnsupportedError("Cannot setRange on immutable List.");
}
void removeRange(int start, int rangeLength) {
- throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+ throw new UnsupportedError("Cannot removeRange on immutable List.");
}
void insertRange(int start, int rangeLength, [Node initialValue]) {
- throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+ throw new UnsupportedError("Cannot insertRange on immutable List.");
}
List<Node> getRange(int start, int rangeLength) =>
@@ -16569,10 +16588,10 @@
abstract class HashChangeEvent implements Event {
/** @domName HashChangeEvent.newURL */
- abstract String get newURL;
+ String get newURL;
/** @domName HashChangeEvent.oldURL */
- abstract String get oldURL;
+ String get oldURL;
/** @domName HashChangeEvent.initHashChangeEvent */
void initHashChangeEvent(String type, bool canBubble, bool cancelable, String oldURL, String newURL);
@@ -16682,6 +16701,7 @@
// WARNING: Do not edit - generated code.
+
/// @domName XMLHttpRequest
abstract class HttpRequest implements EventTarget {
factory HttpRequest.get(String url, onSuccess(HttpRequest request)) =>
@@ -16708,28 +16728,28 @@
static const int UNSENT = 0;
/** @domName XMLHttpRequest.readyState */
- abstract int get readyState;
+ int get readyState;
/** @domName XMLHttpRequest.response */
- abstract Object get response;
+ Object get response;
/** @domName XMLHttpRequest.responseText */
- abstract String get responseText;
+ String get responseText;
/** @domName XMLHttpRequest.responseType */
String responseType;
/** @domName XMLHttpRequest.responseXML */
- abstract Document get responseXML;
+ Document get responseXML;
/** @domName XMLHttpRequest.status */
- abstract int get status;
+ int get status;
/** @domName XMLHttpRequest.statusText */
- abstract String get statusText;
+ String get statusText;
/** @domName XMLHttpRequest.upload */
- abstract HttpRequestUpload get upload;
+ HttpRequestUpload get upload;
/** @domName XMLHttpRequest.withCredentials */
bool withCredentials;
@@ -16795,13 +16815,13 @@
static const int NETWORK_ERR = 101;
/** @domName XMLHttpRequestException.code */
- abstract int get code;
+ int get code;
/** @domName XMLHttpRequestException.message */
- abstract String get message;
+ String get message;
/** @domName XMLHttpRequestException.name */
- abstract String get name;
+ String get name;
/** @domName XMLHttpRequestException.toString */
String toString();
@@ -16905,10 +16925,10 @@
abstract class HttpRequestProgressEvent implements ProgressEvent {
/** @domName XMLHttpRequestProgressEvent.position */
- abstract int get position;
+ int get position;
/** @domName XMLHttpRequestProgressEvent.totalSize */
- abstract int get totalSize;
+ int get totalSize;
}
// 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
@@ -17031,16 +17051,16 @@
static const int PREV_NO_DUPLICATE = 3;
/** @domName IDBCursor.direction */
- abstract String get direction;
+ String get direction;
/** @domName IDBCursor.key */
- abstract Dynamic get key;
+ dynamic get key;
/** @domName IDBCursor.primaryKey */
- abstract Dynamic get primaryKey;
+ dynamic get primaryKey;
/** @domName IDBCursor.source */
- abstract Dynamic get source;
+ dynamic get source;
/** @domName IDBCursor.advance */
void advance(int count);
@@ -17064,11 +17084,11 @@
String get direction native "IDBCursor_direction_Getter";
- Dynamic get key native "IDBCursor_key_Getter";
+ dynamic get key native "IDBCursor_key_Getter";
- Dynamic get primaryKey native "IDBCursor_primaryKey_Getter";
+ dynamic get primaryKey native "IDBCursor_primaryKey_Getter";
- Dynamic get source native "IDBCursor_source_Getter";
+ dynamic get source native "IDBCursor_source_Getter";
void advance(int count) native "IDBCursor_advance_Callback";
@@ -17099,7 +17119,7 @@
abstract class IDBCursorWithValue implements IDBCursor {
/** @domName IDBCursorWithValue.value */
- abstract Dynamic get value;
+ dynamic get value;
}
// 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
@@ -17109,7 +17129,7 @@
class _IDBCursorWithValueImpl extends _IDBCursorImpl implements IDBCursorWithValue {
- Dynamic get value native "IDBCursorWithValue_value_Getter";
+ dynamic get value native "IDBCursorWithValue_value_Getter";
}
// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
@@ -17127,13 +17147,13 @@
IDBDatabaseEvents get on;
/** @domName IDBDatabase.name */
- abstract String get name;
+ String get name;
/** @domName IDBDatabase.objectStoreNames */
- abstract List<String> get objectStoreNames;
+ List<String> get objectStoreNames;
/** @domName IDBDatabase.version */
- abstract Dynamic get version;
+ dynamic get version;
/** @domName IDBDatabase.addEventListener */
void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
@@ -17204,13 +17224,13 @@
static const int VER_ERR = 12;
/** @domName IDBDatabaseException.code */
- abstract int get code;
+ int get code;
/** @domName IDBDatabaseException.message */
- abstract String get message;
+ String get message;
/** @domName IDBDatabaseException.name */
- abstract String get name;
+ String get name;
/** @domName IDBDatabaseException.toString */
String toString();
@@ -17247,7 +17267,7 @@
List<String> get objectStoreNames native "IDBDatabase_objectStoreNames_Getter";
- Dynamic get version native "IDBDatabase_version_Getter";
+ dynamic get version native "IDBDatabase_version_Getter";
void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "IDBDatabase_addEventListener_Callback";
@@ -17273,13 +17293,13 @@
IDBVersionChangeRequest setVersion(String version) native "IDBDatabase_setVersion_Callback";
IDBTransaction transaction(storeName_OR_storeNames, /*DOMString*/ mode) {
- if ((storeName_OR_storeNames is List<String> || storeName_OR_storeNames === null) && (mode is String || mode === null)) {
+ if ((storeName_OR_storeNames is List<String> || storeName_OR_storeNames == null) && (mode is String || mode == null)) {
return _transaction_1(storeName_OR_storeNames, mode);
}
- if ((storeName_OR_storeNames is List<String> || storeName_OR_storeNames === null) && (mode is String || mode === null)) {
+ if ((storeName_OR_storeNames is List<String> || storeName_OR_storeNames == null) && (mode is String || mode == null)) {
return _transaction_2(storeName_OR_storeNames, mode);
}
- if ((storeName_OR_storeNames is String || storeName_OR_storeNames === null) && (mode is String || mode === null)) {
+ if ((storeName_OR_storeNames is String || storeName_OR_storeNames == null) && (mode is String || mode == null)) {
return _transaction_3(storeName_OR_storeNames, mode);
}
throw "Incorrect number or type of arguments";
@@ -17359,19 +17379,19 @@
abstract class IDBIndex {
/** @domName IDBIndex.keyPath */
- abstract Dynamic get keyPath;
+ dynamic get keyPath;
/** @domName IDBIndex.multiEntry */
- abstract bool get multiEntry;
+ bool get multiEntry;
/** @domName IDBIndex.name */
- abstract String get name;
+ String get name;
/** @domName IDBIndex.objectStore */
- abstract IDBObjectStore get objectStore;
+ IDBObjectStore get objectStore;
/** @domName IDBIndex.unique */
- abstract bool get unique;
+ bool get unique;
/** @domName IDBIndex.count */
IDBRequest count([key_OR_range]);
@@ -17383,10 +17403,10 @@
IDBRequest getKey(key);
/** @domName IDBIndex.openCursor */
- IDBRequest openCursor([key_OR_range, direction]);
+ IDBRequest openCursor([key_OR_range, String direction]);
/** @domName IDBIndex.openKeyCursor */
- IDBRequest openKeyCursor([key_OR_range, direction]);
+ IDBRequest openKeyCursor([key_OR_range, String direction]);
}
// 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
@@ -17396,7 +17416,7 @@
class _IDBIndexImpl extends NativeFieldWrapperClass1 implements IDBIndex {
- Dynamic get keyPath native "IDBIndex_keyPath_Getter";
+ dynamic get keyPath native "IDBIndex_keyPath_Getter";
bool get multiEntry native "IDBIndex_multiEntry_Getter";
@@ -17410,10 +17430,10 @@
if (!?key_OR_range) {
return _count_1();
}
- if ((key_OR_range is IDBKeyRange || key_OR_range === null)) {
+ if ((key_OR_range is IDBKeyRange || key_OR_range == null)) {
return _count_2(key_OR_range);
}
- if ((key_OR_range is Dynamic || key_OR_range === null)) {
+ if ((key_OR_range is dynamic || key_OR_range == null)) {
return _count_3(key_OR_range);
}
throw "Incorrect number or type of arguments";
@@ -17426,10 +17446,10 @@
IDBRequest _count_3(key_OR_range) native "IDBIndex_count_3_Callback";
IDBRequest get(key) {
- if ((key is IDBKeyRange || key === null)) {
+ if ((key is IDBKeyRange || key == null)) {
return _get_1(key);
}
- if ((key is Dynamic || key === null)) {
+ if ((key is dynamic || key == null)) {
return _get_2(key);
}
throw "Incorrect number or type of arguments";
@@ -17440,10 +17460,10 @@
IDBRequest _get_2(key) native "IDBIndex_get_2_Callback";
IDBRequest getKey(key) {
- if ((key is IDBKeyRange || key === null)) {
+ if ((key is IDBKeyRange || key == null)) {
return _getKey_1(key);
}
- if ((key is Dynamic || key === null)) {
+ if ((key is dynamic || key == null)) {
return _getKey_2(key);
}
throw "Incorrect number or type of arguments";
@@ -17453,34 +17473,22 @@
IDBRequest _getKey_2(key) native "IDBIndex_getKey_2_Callback";
- IDBRequest openCursor([key_OR_range, direction]) {
+ IDBRequest openCursor([key_OR_range, /*DOMString*/ direction]) {
if (!?key_OR_range && !?direction) {
return _openCursor_1();
}
- if ((key_OR_range is IDBKeyRange || key_OR_range === null) && !?direction) {
+ if ((key_OR_range is IDBKeyRange || key_OR_range == null) && !?direction) {
return _openCursor_2(key_OR_range);
}
- if ((key_OR_range is IDBKeyRange || key_OR_range === null) && (direction is String || direction === null)) {
+ if ((key_OR_range is IDBKeyRange || key_OR_range == null) && (direction is String || direction == null)) {
return _openCursor_3(key_OR_range, direction);
}
- if ((key_OR_range is Dynamic || key_OR_range === null) && !?direction) {
+ if ((key_OR_range is dynamic || key_OR_range == null) && !?direction) {
return _openCursor_4(key_OR_range);
}
- if ((key_OR_range is Dynamic || key_OR_range === null) && (direction is String || direction === null)) {
+ if ((key_OR_range is dynamic || key_OR_range == null) && (direction is String || direction == null)) {
return _openCursor_5(key_OR_range, direction);
}
- if (!?key_OR_range && !?direction) {
- return _openCursor_6();
- }
- if ((key_OR_range is IDBKeyRange || key_OR_range === null) && !?direction) {
- return _openCursor_7(key_OR_range);
- }
- if ((key_OR_range is IDBKeyRange || key_OR_range === null) && (direction is int || direction === null)) {
- return _openCursor_8(key_OR_range, direction);
- }
- if ((key_OR_range is Dynamic || key_OR_range === null) && (direction is int || direction === null)) {
- return _openCursor_9(key_OR_range, direction);
- }
throw "Incorrect number or type of arguments";
}
@@ -17494,42 +17502,22 @@
IDBRequest _openCursor_5(key_OR_range, direction) native "IDBIndex_openCursor_5_Callback";
- IDBRequest _openCursor_6() native "IDBIndex_openCursor_6_Callback";
-
- IDBRequest _openCursor_7(key_OR_range) native "IDBIndex_openCursor_7_Callback";
-
- IDBRequest _openCursor_8(key_OR_range, direction) native "IDBIndex_openCursor_8_Callback";
-
- IDBRequest _openCursor_9(key_OR_range, direction) native "IDBIndex_openCursor_9_Callback";
-
- IDBRequest openKeyCursor([key_OR_range, direction]) {
+ IDBRequest openKeyCursor([key_OR_range, /*DOMString*/ direction]) {
if (!?key_OR_range && !?direction) {
return _openKeyCursor_1();
}
- if ((key_OR_range is IDBKeyRange || key_OR_range === null) && !?direction) {
+ if ((key_OR_range is IDBKeyRange || key_OR_range == null) && !?direction) {
return _openKeyCursor_2(key_OR_range);
}
- if ((key_OR_range is IDBKeyRange || key_OR_range === null) && (direction is String || direction === null)) {
+ if ((key_OR_range is IDBKeyRange || key_OR_range == null) && (direction is String || direction == null)) {
return _openKeyCursor_3(key_OR_range, direction);
}
- if ((key_OR_range is Dynamic || key_OR_range === null) && !?direction) {
+ if ((key_OR_range is dynamic || key_OR_range == null) && !?direction) {
return _openKeyCursor_4(key_OR_range);
}
- if ((key_OR_range is Dynamic || key_OR_range === null) && (direction is String || direction === null)) {
+ if ((key_OR_range is dynamic || key_OR_range == null) && (direction is String || direction == null)) {
return _openKeyCursor_5(key_OR_range, direction);
}
- if (!?key_OR_range && !?direction) {
- return _openKeyCursor_6();
- }
- if ((key_OR_range is IDBKeyRange || key_OR_range === null) && !?direction) {
- return _openKeyCursor_7(key_OR_range);
- }
- if ((key_OR_range is IDBKeyRange || key_OR_range === null) && (direction is int || direction === null)) {
- return _openKeyCursor_8(key_OR_range, direction);
- }
- if ((key_OR_range is Dynamic || key_OR_range === null) && (direction is int || direction === null)) {
- return _openKeyCursor_9(key_OR_range, direction);
- }
throw "Incorrect number or type of arguments";
}
@@ -17543,14 +17531,6 @@
IDBRequest _openKeyCursor_5(key_OR_range, direction) native "IDBIndex_openKeyCursor_5_Callback";
- IDBRequest _openKeyCursor_6() native "IDBIndex_openKeyCursor_6_Callback";
-
- IDBRequest _openKeyCursor_7(key_OR_range) native "IDBIndex_openKeyCursor_7_Callback";
-
- IDBRequest _openKeyCursor_8(key_OR_range, direction) native "IDBIndex_openKeyCursor_8_Callback";
-
- IDBRequest _openKeyCursor_9(key_OR_range, direction) native "IDBIndex_openKeyCursor_9_Callback";
-
}
// 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
@@ -17576,6 +17556,7 @@
// WARNING: Do not edit - generated code.
+
/// @domName IDBKeyRange
abstract class IDBKeyRange {
@@ -17607,16 +17588,16 @@
/** @domName IDBKeyRange.lower */
- abstract Dynamic get lower;
+ dynamic get lower;
/** @domName IDBKeyRange.lowerOpen */
- abstract bool get lowerOpen;
+ bool get lowerOpen;
/** @domName IDBKeyRange.upper */
- abstract Dynamic get upper;
+ dynamic get upper;
/** @domName IDBKeyRange.upperOpen */
- abstract bool get upperOpen;
+ bool get upperOpen;
/** @domName IDBKeyRange.bound_ */
static final bound_ = _IDBKeyRangeImpl.bound_;
@@ -17638,11 +17619,11 @@
class _IDBKeyRangeImpl extends NativeFieldWrapperClass1 implements IDBKeyRange {
- Dynamic get lower native "IDBKeyRange_lower_Getter";
+ dynamic get lower native "IDBKeyRange_lower_Getter";
bool get lowerOpen native "IDBKeyRange_lowerOpen_Getter";
- Dynamic get upper native "IDBKeyRange_upper_Getter";
+ dynamic get upper native "IDBKeyRange_upper_Getter";
bool get upperOpen native "IDBKeyRange_upperOpen_Getter";
@@ -17697,19 +17678,19 @@
abstract class IDBObjectStore {
/** @domName IDBObjectStore.autoIncrement */
- abstract bool get autoIncrement;
+ bool get autoIncrement;
/** @domName IDBObjectStore.indexNames */
- abstract List<String> get indexNames;
+ List<String> get indexNames;
/** @domName IDBObjectStore.keyPath */
- abstract Dynamic get keyPath;
+ dynamic get keyPath;
/** @domName IDBObjectStore.name */
- abstract String get name;
+ String get name;
/** @domName IDBObjectStore.transaction */
- abstract IDBTransaction get transaction;
+ IDBTransaction get transaction;
/** @domName IDBObjectStore.add */
IDBRequest add(Object value, [/*IDBKey*/ key]);
@@ -17736,7 +17717,7 @@
IDBIndex index(String name);
/** @domName IDBObjectStore.openCursor */
- IDBRequest openCursor([key_OR_range, direction]);
+ IDBRequest openCursor([key_OR_range, String direction]);
/** @domName IDBObjectStore.put */
IDBRequest put(Object value, [/*IDBKey*/ key]);
@@ -17753,7 +17734,7 @@
List<String> get indexNames native "IDBObjectStore_indexNames_Getter";
- Dynamic get keyPath native "IDBObjectStore_keyPath_Getter";
+ dynamic get keyPath native "IDBObjectStore_keyPath_Getter";
String get name native "IDBObjectStore_name_Getter";
@@ -17776,10 +17757,10 @@
if (!?key_OR_range) {
return _count_1();
}
- if ((key_OR_range is IDBKeyRange || key_OR_range === null)) {
+ if ((key_OR_range is IDBKeyRange || key_OR_range == null)) {
return _count_2(key_OR_range);
}
- if ((key_OR_range is Dynamic || key_OR_range === null)) {
+ if ((key_OR_range is dynamic || key_OR_range == null)) {
return _count_3(key_OR_range);
}
throw "Incorrect number or type of arguments";
@@ -17792,16 +17773,16 @@
IDBRequest _count_3(key_OR_range) native "IDBObjectStore_count_3_Callback";
IDBIndex createIndex(/*DOMString*/ name, keyPath, [/*Dictionary*/ options]) {
- if ((name is String || name === null) && (keyPath is List<String> || keyPath === null) && !?options) {
+ if ((name is String || name == null) && (keyPath is List<String> || keyPath == null) && !?options) {
return _createIndex_1(name, keyPath);
}
- if ((name is String || name === null) && (keyPath is List<String> || keyPath === null) && (options is Map || options === null)) {
+ if ((name is String || name == null) && (keyPath is List<String> || keyPath == null) && (options is Map || options == null)) {
return _createIndex_2(name, keyPath, options);
}
- if ((name is String || name === null) && (keyPath is String || keyPath === null) && !?options) {
+ if ((name is String || name == null) && (keyPath is String || keyPath == null) && !?options) {
return _createIndex_3(name, keyPath);
}
- if ((name is String || name === null) && (keyPath is String || keyPath === null) && (options is Map || options === null)) {
+ if ((name is String || name == null) && (keyPath is String || keyPath == null) && (options is Map || options == null)) {
return _createIndex_4(name, keyPath, options);
}
throw "Incorrect number or type of arguments";
@@ -17816,10 +17797,10 @@
IDBIndex _createIndex_4(name, keyPath, options) native "IDBObjectStore_createIndex_4_Callback";
IDBRequest delete(key_OR_keyRange) {
- if ((key_OR_keyRange is IDBKeyRange || key_OR_keyRange === null)) {
+ if ((key_OR_keyRange is IDBKeyRange || key_OR_keyRange == null)) {
return _delete_1(key_OR_keyRange);
}
- if ((key_OR_keyRange is Dynamic || key_OR_keyRange === null)) {
+ if ((key_OR_keyRange is dynamic || key_OR_keyRange == null)) {
return _delete_2(key_OR_keyRange);
}
throw "Incorrect number or type of arguments";
@@ -17832,10 +17813,10 @@
void deleteIndex(String name) native "IDBObjectStore_deleteIndex_Callback";
IDBRequest getObject(key) {
- if ((key is IDBKeyRange || key === null)) {
+ if ((key is IDBKeyRange || key == null)) {
return _get_1(key);
}
- if ((key is Dynamic || key === null)) {
+ if ((key is dynamic || key == null)) {
return _get_2(key);
}
throw "Incorrect number or type of arguments";
@@ -17847,34 +17828,22 @@
IDBIndex index(String name) native "IDBObjectStore_index_Callback";
- IDBRequest openCursor([key_OR_range, direction]) {
+ IDBRequest openCursor([key_OR_range, /*DOMString*/ direction]) {
if (!?key_OR_range && !?direction) {
return _openCursor_1();
}
- if ((key_OR_range is IDBKeyRange || key_OR_range === null) && !?direction) {
+ if ((key_OR_range is IDBKeyRange || key_OR_range == null) && !?direction) {
return _openCursor_2(key_OR_range);
}
- if ((key_OR_range is IDBKeyRange || key_OR_range === null) && (direction is String || direction === null)) {
+ if ((key_OR_range is IDBKeyRange || key_OR_range == null) && (direction is String || direction == null)) {
return _openCursor_3(key_OR_range, direction);
}
- if ((key_OR_range is Dynamic || key_OR_range === null) && !?direction) {
+ if ((key_OR_range is dynamic || key_OR_range == null) && !?direction) {
return _openCursor_4(key_OR_range);
}
- if ((key_OR_range is Dynamic || key_OR_range === null) && (direction is String || direction === null)) {
+ if ((key_OR_range is dynamic || key_OR_range == null) && (direction is String || direction == null)) {
return _openCursor_5(key_OR_range, direction);
}
- if (!?key_OR_range && !?direction) {
- return _openCursor_6();
- }
- if ((key_OR_range is IDBKeyRange || key_OR_range === null) && !?direction) {
- return _openCursor_7(key_OR_range);
- }
- if ((key_OR_range is IDBKeyRange || key_OR_range === null) && (direction is int || direction === null)) {
- return _openCursor_8(key_OR_range, direction);
- }
- if ((key_OR_range is Dynamic || key_OR_range === null) && (direction is int || direction === null)) {
- return _openCursor_9(key_OR_range, direction);
- }
throw "Incorrect number or type of arguments";
}
@@ -17888,14 +17857,6 @@
IDBRequest _openCursor_5(key_OR_range, direction) native "IDBObjectStore_openCursor_5_Callback";
- IDBRequest _openCursor_6() native "IDBObjectStore_openCursor_6_Callback";
-
- IDBRequest _openCursor_7(key_OR_range) native "IDBObjectStore_openCursor_7_Callback";
-
- IDBRequest _openCursor_8(key_OR_range, direction) native "IDBObjectStore_openCursor_8_Callback";
-
- IDBRequest _openCursor_9(key_OR_range, direction) native "IDBObjectStore_openCursor_9_Callback";
-
IDBRequest put(/*any*/ value, [/*IDBKey*/ key]) {
if (?key) {
return _put_1(value, key);
@@ -17970,25 +17931,25 @@
IDBRequestEvents get on;
/** @domName IDBRequest.error */
- abstract DOMError get error;
+ DOMError get error;
/** @domName IDBRequest.errorCode */
- abstract int get errorCode;
+ int get errorCode;
/** @domName IDBRequest.readyState */
- abstract String get readyState;
+ String get readyState;
/** @domName IDBRequest.result */
- abstract Dynamic get result;
+ dynamic get result;
/** @domName IDBRequest.source */
- abstract Dynamic get source;
+ dynamic get source;
/** @domName IDBRequest.transaction */
- abstract IDBTransaction get transaction;
+ IDBTransaction get transaction;
/** @domName IDBRequest.webkitErrorMessage */
- abstract String get webkitErrorMessage;
+ String get webkitErrorMessage;
/** @domName IDBRequest.addEventListener */
void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
@@ -18023,9 +17984,9 @@
String get readyState native "IDBRequest_readyState_Getter";
- Dynamic get result native "IDBRequest_result_Getter";
+ dynamic get result native "IDBRequest_result_Getter";
- Dynamic get source native "IDBRequest_source_Getter";
+ dynamic get source native "IDBRequest_source_Getter";
IDBTransaction get transaction native "IDBRequest_transaction_Getter";
@@ -18067,13 +18028,13 @@
static const int VERSION_CHANGE = 2;
/** @domName IDBTransaction.db */
- abstract IDBDatabase get db;
+ IDBDatabase get db;
/** @domName IDBTransaction.error */
- abstract DOMError get error;
+ DOMError get error;
/** @domName IDBTransaction.mode */
- abstract String get mode;
+ String get mode;
/** @domName IDBTransaction.abort */
void abort();
@@ -18147,10 +18108,10 @@
abstract class IDBUpgradeNeededEvent implements Event {
/** @domName IDBVersionChangeEvent.newVersion */
- abstract int get newVersion;
+ int get newVersion;
/** @domName IDBVersionChangeEvent.oldVersion */
- abstract int get oldVersion;
+ int get oldVersion;
}
// 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
@@ -18175,7 +18136,7 @@
abstract class IDBVersionChangeEvent implements Event {
/** @domName IDBVersionChangeEvent.version */
- abstract String get version;
+ String get version;
}
// 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
@@ -18246,7 +18207,7 @@
String align;
/** @domName HTMLIFrameElement.contentWindow */
- abstract Window get contentWindow;
+ Window get contentWindow;
/** @domName HTMLIFrameElement.frameBorder */
String frameBorder;
@@ -18280,9 +18241,6 @@
/** @domName HTMLIFrameElement.width */
String width;
-
- /** @domName HTMLIFrameElement.getSVGDocument */
- SVGDocument getSVGDocument();
}
// 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
@@ -18349,6 +18307,7 @@
// WARNING: Do not edit - generated code.
+
typedef void IceCallback(IceCandidate candidate, bool moreToFollow, PeerConnection00 source);
// 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
@@ -18362,7 +18321,7 @@
factory IceCandidate(String label, String candidateLine) => _IceCandidateFactoryProvider.createIceCandidate(label, candidateLine);
/** @domName IceCandidate.label */
- abstract String get label;
+ String get label;
/** @domName IceCandidate.toSdp */
String toSdp();
@@ -18390,13 +18349,13 @@
abstract class ImageData {
/** @domName ImageData.data */
- abstract Uint8ClampedArray get data;
+ Uint8ClampedArray get data;
/** @domName ImageData.height */
- abstract int get height;
+ int get height;
/** @domName ImageData.width */
- abstract int get width;
+ int get width;
}
// 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
@@ -18445,7 +18404,7 @@
String border;
/** @domName HTMLImageElement.complete */
- abstract bool get complete;
+ bool get complete;
/** @domName HTMLImageElement.crossOrigin */
String crossOrigin;
@@ -18469,10 +18428,10 @@
String name;
/** @domName HTMLImageElement.naturalHeight */
- abstract int get naturalHeight;
+ int get naturalHeight;
/** @domName HTMLImageElement.naturalWidth */
- abstract int get naturalWidth;
+ int get naturalWidth;
/** @domName HTMLImageElement.src */
String src;
@@ -18487,10 +18446,10 @@
int width;
/** @domName HTMLImageElement.x */
- abstract int get x;
+ int get x;
/** @domName HTMLImageElement.y */
- abstract int get y;
+ int get y;
}
// 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
@@ -18619,7 +18578,7 @@
List<File> files;
/** @domName HTMLInputElement.form */
- abstract FormElement get form;
+ FormElement get form;
/** @domName HTMLInputElement.formAction */
String formAction;
@@ -18646,10 +18605,10 @@
bool indeterminate;
/** @domName HTMLInputElement.labels */
- abstract List<Node> get labels;
+ List<Node> get labels;
/** @domName HTMLInputElement.list */
- abstract Element get list;
+ Element get list;
/** @domName HTMLInputElement.max */
String max;
@@ -18703,10 +18662,10 @@
String useMap;
/** @domName HTMLInputElement.validationMessage */
- abstract String get validationMessage;
+ String get validationMessage;
/** @domName HTMLInputElement.validity */
- abstract ValidityState get validity;
+ ValidityState get validity;
/** @domName HTMLInputElement.value */
String value;
@@ -18718,7 +18677,7 @@
num valueAsNumber;
/** @domName HTMLInputElement.webkitEntries */
- abstract List<Entry> get webkitEntries;
+ List<Entry> get webkitEntries;
/** @domName HTMLInputElement.webkitGrammar */
bool webkitGrammar;
@@ -18733,7 +18692,7 @@
int width;
/** @domName HTMLInputElement.willValidate */
- abstract bool get willValidate;
+ bool get willValidate;
/** @domName HTMLInputElement.checkValidity */
bool checkValidity();
@@ -19011,7 +18970,7 @@
static const int BYTES_PER_ELEMENT = 2;
/** @domName Int16Array.length */
- abstract int get length;
+ int get length;
/** @domName Int16Array.setElements */
void setElements(Object array, [int offset]);
@@ -19047,15 +19006,15 @@
// From Collection<int>:
void add(int value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addLast(int value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addAll(Collection<int> collection) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
bool contains(int element) => _Collections.contains(this, element);
@@ -19071,38 +19030,38 @@
bool some(bool f(int element)) => _Collections.some(this, f);
- bool isEmpty() => this.length == 0;
+ bool get isEmpty => this.length == 0;
// From List<int>:
void sort([Comparator<int> compare = Comparable.compare]) {
- throw const UnsupportedOperationException("Cannot sort immutable List.");
+ throw new UnsupportedError("Cannot sort immutable List.");
}
int indexOf(int element, [int start = 0]) =>
_Lists.indexOf(this, element, start, this.length);
int lastIndexOf(int element, [int start]) {
- if (start === null) start = length - 1;
+ if (start == null) start = length - 1;
return _Lists.lastIndexOf(this, element, start);
}
- int last() => this[length - 1];
+ int get last => this[length - 1];
int removeLast() {
- throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+ throw new UnsupportedError("Cannot removeLast on immutable List.");
}
void setRange(int start, int rangeLength, List<int> from, [int startFrom]) {
- throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+ throw new UnsupportedError("Cannot setRange on immutable List.");
}
void removeRange(int start, int rangeLength) {
- throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+ throw new UnsupportedError("Cannot removeRange on immutable List.");
}
void insertRange(int start, int rangeLength, [int initialValue]) {
- throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+ throw new UnsupportedError("Cannot insertRange on immutable List.");
}
List<int> getRange(int start, int rangeLength) =>
@@ -19145,7 +19104,7 @@
static const int BYTES_PER_ELEMENT = 4;
/** @domName Int32Array.length */
- abstract int get length;
+ int get length;
/** @domName Int32Array.setElements */
void setElements(Object array, [int offset]);
@@ -19181,15 +19140,15 @@
// From Collection<int>:
void add(int value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addLast(int value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addAll(Collection<int> collection) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
bool contains(int element) => _Collections.contains(this, element);
@@ -19205,38 +19164,38 @@
bool some(bool f(int element)) => _Collections.some(this, f);
- bool isEmpty() => this.length == 0;
+ bool get isEmpty => this.length == 0;
// From List<int>:
void sort([Comparator<int> compare = Comparable.compare]) {
- throw const UnsupportedOperationException("Cannot sort immutable List.");
+ throw new UnsupportedError("Cannot sort immutable List.");
}
int indexOf(int element, [int start = 0]) =>
_Lists.indexOf(this, element, start, this.length);
int lastIndexOf(int element, [int start]) {
- if (start === null) start = length - 1;
+ if (start == null) start = length - 1;
return _Lists.lastIndexOf(this, element, start);
}
- int last() => this[length - 1];
+ int get last => this[length - 1];
int removeLast() {
- throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+ throw new UnsupportedError("Cannot removeLast on immutable List.");
}
void setRange(int start, int rangeLength, List<int> from, [int startFrom]) {
- throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+ throw new UnsupportedError("Cannot setRange on immutable List.");
}
void removeRange(int start, int rangeLength) {
- throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+ throw new UnsupportedError("Cannot removeRange on immutable List.");
}
void insertRange(int start, int rangeLength, [int initialValue]) {
- throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+ throw new UnsupportedError("Cannot insertRange on immutable List.");
}
List<int> getRange(int start, int rangeLength) =>
@@ -19279,7 +19238,7 @@
static const int BYTES_PER_ELEMENT = 1;
/** @domName Int8Array.length */
- abstract int get length;
+ int get length;
/** @domName Int8Array.setElements */
void setElements(Object array, [int offset]);
@@ -19315,15 +19274,15 @@
// From Collection<int>:
void add(int value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addLast(int value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addAll(Collection<int> collection) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
bool contains(int element) => _Collections.contains(this, element);
@@ -19339,38 +19298,38 @@
bool some(bool f(int element)) => _Collections.some(this, f);
- bool isEmpty() => this.length == 0;
+ bool get isEmpty => this.length == 0;
// From List<int>:
void sort([Comparator<int> compare = Comparable.compare]) {
- throw const UnsupportedOperationException("Cannot sort immutable List.");
+ throw new UnsupportedError("Cannot sort immutable List.");
}
int indexOf(int element, [int start = 0]) =>
_Lists.indexOf(this, element, start, this.length);
int lastIndexOf(int element, [int start]) {
- if (start === null) start = length - 1;
+ if (start == null) start = length - 1;
return _Lists.lastIndexOf(this, element, start);
}
- int last() => this[length - 1];
+ int get last => this[length - 1];
int removeLast() {
- throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+ throw new UnsupportedError("Cannot removeLast on immutable List.");
}
void setRange(int start, int rangeLength, List<int> from, [int startFrom]) {
- throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+ throw new UnsupportedError("Cannot setRange on immutable List.");
}
void removeRange(int start, int rangeLength) {
- throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+ throw new UnsupportedError("Cannot removeRange on immutable List.");
}
void insertRange(int start, int rangeLength, [int initialValue]) {
- throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+ throw new UnsupportedError("Cannot insertRange on immutable List.");
}
List<int> getRange(int start, int rangeLength) =>
@@ -19407,7 +19366,7 @@
JavaScriptAudioNodeEvents get on;
/** @domName JavaScriptAudioNode.bufferSize */
- abstract int get bufferSize;
+ int get bufferSize;
}
abstract class JavaScriptAudioNodeEvents implements Events {
@@ -19460,28 +19419,28 @@
static const int WITH_SCOPE = 2;
/** @domName JavaScriptCallFrame.caller */
- abstract JavaScriptCallFrame get caller;
+ JavaScriptCallFrame get caller;
/** @domName JavaScriptCallFrame.column */
- abstract int get column;
+ int get column;
/** @domName JavaScriptCallFrame.functionName */
- abstract String get functionName;
+ String get functionName;
/** @domName JavaScriptCallFrame.line */
- abstract int get line;
+ int get line;
/** @domName JavaScriptCallFrame.scopeChain */
- abstract List get scopeChain;
+ List get scopeChain;
/** @domName JavaScriptCallFrame.sourceID */
- abstract int get sourceID;
+ int get sourceID;
/** @domName JavaScriptCallFrame.thisObject */
- abstract Object get thisObject;
+ Object get thisObject;
/** @domName JavaScriptCallFrame.type */
- abstract String get type;
+ String get type;
/** @domName JavaScriptCallFrame.evaluate */
void evaluate(String script);
@@ -19533,25 +19492,25 @@
abstract class KeyboardEvent implements UIEvent {
/** @domName KeyboardEvent.altGraphKey */
- abstract bool get altGraphKey;
+ bool get altGraphKey;
/** @domName KeyboardEvent.altKey */
- abstract bool get altKey;
+ bool get altKey;
/** @domName KeyboardEvent.ctrlKey */
- abstract bool get ctrlKey;
+ bool get ctrlKey;
/** @domName KeyboardEvent.keyIdentifier */
- abstract String get keyIdentifier;
+ String get keyIdentifier;
/** @domName KeyboardEvent.keyLocation */
- abstract int get keyLocation;
+ int get keyLocation;
/** @domName KeyboardEvent.metaKey */
- abstract bool get metaKey;
+ bool get metaKey;
/** @domName KeyboardEvent.shiftKey */
- abstract bool get shiftKey;
+ bool get shiftKey;
/** @domName KeyboardEvent.initKeyboardEvent */
void initKeyboardEvent(String type, bool canBubble, bool cancelable, LocalWindow view, String keyIdentifier, int keyLocation, bool ctrlKey, bool altKey, bool shiftKey, bool metaKey, bool altGraphKey);
@@ -19602,28 +19561,28 @@
bool disabled;
/** @domName HTMLKeygenElement.form */
- abstract FormElement get form;
+ FormElement get form;
/** @domName HTMLKeygenElement.keytype */
String keytype;
/** @domName HTMLKeygenElement.labels */
- abstract List<Node> get labels;
+ List<Node> get labels;
/** @domName HTMLKeygenElement.name */
String name;
/** @domName HTMLKeygenElement.type */
- abstract String get type;
+ String get type;
/** @domName HTMLKeygenElement.validationMessage */
- abstract String get validationMessage;
+ String get validationMessage;
/** @domName HTMLKeygenElement.validity */
- abstract ValidityState get validity;
+ ValidityState get validity;
/** @domName HTMLKeygenElement.willValidate */
- abstract bool get willValidate;
+ bool get willValidate;
/** @domName HTMLKeygenElement.checkValidity */
bool checkValidity();
@@ -19722,10 +19681,10 @@
factory LabelElement() => _Elements.createLabelElement();
/** @domName HTMLLabelElement.control */
- abstract Element get control;
+ Element get control;
/** @domName HTMLLabelElement.form */
- abstract FormElement get form;
+ FormElement get form;
/** @domName HTMLLabelElement.htmlFor */
String htmlFor;
@@ -19762,7 +19721,7 @@
String align;
/** @domName HTMLLegendElement.form */
- abstract FormElement get form;
+ FormElement get form;
}
// 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
@@ -19812,7 +19771,7 @@
String rev;
/** @domName HTMLLinkElement.sheet */
- abstract StyleSheet get sheet;
+ StyleSheet get sheet;
/** @domName HTMLLinkElement.sizes */
DOMSettableTokenList sizes;
@@ -19884,10 +19843,10 @@
abstract class LocalHistory implements History {
/** @domName History.length */
- abstract int get length;
+ int get length;
/** @domName History.state */
- abstract Dynamic get state;
+ dynamic get state;
/** @domName History.back */
void back();
@@ -19914,7 +19873,7 @@
int get length native "History_length_Getter";
- Dynamic get state native "History_state_Getter";
+ dynamic get state native "History_state_Getter";
void back() native "History_back_Callback";
@@ -19937,7 +19896,7 @@
abstract class LocalLocation implements Location {
/** @domName Location.ancestorOrigins */
- abstract List<String> get ancestorOrigins;
+ List<String> get ancestorOrigins;
/** @domName Location.hash */
String hash;
@@ -19952,7 +19911,7 @@
String href;
/** @domName Location.origin */
- abstract String get origin;
+ String get origin;
/** @domName Location.pathname */
String pathname;
@@ -20066,6 +20025,7 @@
// WARNING: Do not edit - generated code.
+
/// @domName Window
abstract class LocalWindow implements EventTarget, Window {
@@ -20110,19 +20070,19 @@
static const int TEMPORARY = 0;
/** @domName Window.applicationCache */
- abstract DOMApplicationCache get applicationCache;
+ DOMApplicationCache get applicationCache;
/** @domName Window.clientInformation */
- abstract Navigator get clientInformation;
+ Navigator get clientInformation;
/** @domName Window.closed */
- abstract bool get closed;
+ bool get closed;
/** @domName Window.console */
- abstract Console get console;
+ Console get console;
/** @domName Window.crypto */
- abstract Crypto get crypto;
+ Crypto get crypto;
/** @domName Window.defaultStatus */
String defaultStatus;
@@ -20131,130 +20091,130 @@
String defaultstatus;
/** @domName Window.devicePixelRatio */
- abstract num get devicePixelRatio;
+ num get devicePixelRatio;
/** @domName Window.document */
- abstract Document get document;
+ Document get document;
/** @domName Window.event */
- abstract Event get event;
+ Event get event;
/** @domName Window.history */
- abstract LocalHistory get history;
+ LocalHistory get history;
/** @domName DOMWindow.indexedDB */
- abstract IDBFactory get indexedDB;
+ IDBFactory get indexedDB;
/** @domName Window.innerHeight */
- abstract int get innerHeight;
+ int get innerHeight;
/** @domName Window.innerWidth */
- abstract int get innerWidth;
+ int get innerWidth;
/** @domName Window.localStorage */
- abstract Storage get localStorage;
+ Storage get localStorage;
/** @domName Window.location */
LocalLocation location;
/** @domName Window.locationbar */
- abstract BarInfo get locationbar;
+ BarInfo get locationbar;
/** @domName Window.menubar */
- abstract BarInfo get menubar;
+ BarInfo get menubar;
/** @domName Window.name */
String name;
/** @domName Window.navigator */
- abstract Navigator get navigator;
+ Navigator get navigator;
/** @domName Window.offscreenBuffering */
- abstract bool get offscreenBuffering;
+ bool get offscreenBuffering;
/** @domName Window.opener */
- abstract Window get opener;
+ Window get opener;
/** @domName Window.outerHeight */
- abstract int get outerHeight;
+ int get outerHeight;
/** @domName Window.outerWidth */
- abstract int get outerWidth;
+ int get outerWidth;
/** @domName DOMWindow.pagePopupController */
- abstract PagePopupController get pagePopupController;
+ PagePopupController get pagePopupController;
/** @domName Window.pageXOffset */
- abstract int get pageXOffset;
+ int get pageXOffset;
/** @domName Window.pageYOffset */
- abstract int get pageYOffset;
+ int get pageYOffset;
/** @domName Window.parent */
- abstract Window get parent;
+ Window get parent;
/** @domName Window.performance */
- abstract Performance get performance;
+ Performance get performance;
/** @domName Window.personalbar */
- abstract BarInfo get personalbar;
+ BarInfo get personalbar;
/** @domName Window.screen */
- abstract Screen get screen;
+ Screen get screen;
/** @domName Window.screenLeft */
- abstract int get screenLeft;
+ int get screenLeft;
/** @domName Window.screenTop */
- abstract int get screenTop;
+ int get screenTop;
/** @domName Window.screenX */
- abstract int get screenX;
+ int get screenX;
/** @domName Window.screenY */
- abstract int get screenY;
+ int get screenY;
/** @domName Window.scrollX */
- abstract int get scrollX;
+ int get scrollX;
/** @domName Window.scrollY */
- abstract int get scrollY;
+ int get scrollY;
/** @domName Window.scrollbars */
- abstract BarInfo get scrollbars;
+ BarInfo get scrollbars;
/** @domName Window.self */
- abstract Window get self;
+ Window get self;
/** @domName Window.sessionStorage */
- abstract Storage get sessionStorage;
+ Storage get sessionStorage;
/** @domName Window.status */
String status;
/** @domName Window.statusbar */
- abstract BarInfo get statusbar;
+ BarInfo get statusbar;
/** @domName Window.styleMedia */
- abstract StyleMedia get styleMedia;
+ StyleMedia get styleMedia;
/** @domName Window.toolbar */
- abstract BarInfo get toolbar;
+ BarInfo get toolbar;
/** @domName Window.top */
- abstract Window get top;
+ Window get top;
/** @domName DOMWindow.webkitIndexedDB */
- abstract IDBFactory get webkitIndexedDB;
+ IDBFactory get webkitIndexedDB;
/** @domName DOMWindow.webkitNotifications */
- abstract NotificationCenter get webkitNotifications;
+ NotificationCenter get webkitNotifications;
/** @domName DOMWindow.webkitStorageInfo */
- abstract StorageInfo get webkitStorageInfo;
+ StorageInfo get webkitStorageInfo;
/** @domName Window.window */
- abstract Window get window;
+ Window get window;
/** @domName Window.addEventListener */
void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
@@ -20271,6 +20231,9 @@
/** @domName Window.btoa */
String btoa(String string);
+ /** @domName Window.cancelAnimationFrame */
+ void cancelAnimationFrame(int id);
+
/** @domName Window.captureEvents */
void captureEvents();
@@ -20334,6 +20297,9 @@
/** @domName Window.removeEventListener */
void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]);
+ /** @domName Window.requestAnimationFrame */
+ int requestAnimationFrame(RequestAnimationFrameCallback callback);
+
/** @domName Window.resizeBy */
void resizeBy(num x, num y);
@@ -20362,7 +20328,7 @@
void stop();
/** @domName Window.webkitCancelAnimationFrame */
- void cancelAnimationFrame(int id);
+ void webkitCancelAnimationFrame(int id);
/** @domName Window.webkitConvertPointFromNodeToPage */
Point webkitConvertPointFromNodeToPage(Node node, Point p);
@@ -20371,7 +20337,7 @@
Point webkitConvertPointFromPageToNode(Node node, Point p);
/** @domName Window.webkitRequestAnimationFrame */
- int requestAnimationFrame(RequestAnimationFrameCallback callback);
+ int webkitRequestAnimationFrame(RequestAnimationFrameCallback callback);
/** @domName DOMWindow.webkitRequestFileSystem */
void webkitRequestFileSystem(int type, int size, FileSystemCallback successCallback, [ErrorCallback errorCallback]);
@@ -20677,6 +20643,8 @@
String btoa(String string) native "DOMWindow_btoa_Callback";
+ void cancelAnimationFrame(int id) native "DOMWindow_cancelAnimationFrame_Callback";
+
void captureEvents() native "DOMWindow_captureEvents_Callback";
void clearInterval(int handle) native "DOMWindow_clearInterval_Callback";
@@ -20719,6 +20687,8 @@
void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "DOMWindow_removeEventListener_Callback";
+ int requestAnimationFrame(RequestAnimationFrameCallback callback) native "DOMWindow_requestAnimationFrame_Callback";
+
void resizeBy(num x, num y) native "DOMWindow_resizeBy_Callback";
void resizeTo(num width, num height) native "DOMWindow_resizeTo_Callback";
@@ -20737,13 +20707,13 @@
void stop() native "DOMWindow_stop_Callback";
- void cancelAnimationFrame(int id) native "DOMWindow_webkitCancelAnimationFrame_Callback";
+ void webkitCancelAnimationFrame(int id) native "DOMWindow_webkitCancelAnimationFrame_Callback";
Point webkitConvertPointFromNodeToPage(Node node, Point p) native "DOMWindow_webkitConvertPointFromNodeToPage_Callback";
Point webkitConvertPointFromPageToNode(Node node, Point p) native "DOMWindow_webkitConvertPointFromPageToNode_Callback";
- int requestAnimationFrame(RequestAnimationFrameCallback callback) native "DOMWindow_webkitRequestAnimationFrame_Callback";
+ int webkitRequestAnimationFrame(RequestAnimationFrameCallback callback) native "DOMWindow_webkitRequestAnimationFrame_Callback";
void webkitRequestFileSystem(int type, int size, FileSystemCallback successCallback, [ErrorCallback errorCallback]) native "DOMWindow_webkitRequestFileSystem_Callback";
@@ -20912,7 +20882,7 @@
factory MapElement() => _Elements.createMapElement();
/** @domName HTMLMapElement.areas */
- abstract HTMLCollection get areas;
+ HTMLCollection get areas;
/** @domName HTMLMapElement.name */
String name;
@@ -21049,7 +21019,7 @@
factory MediaController() => _MediaControllerFactoryProvider.createMediaController();
/** @domName MediaController.buffered */
- abstract TimeRanges get buffered;
+ TimeRanges get buffered;
/** @domName MediaController.currentTime */
num currentTime;
@@ -21058,22 +21028,22 @@
num defaultPlaybackRate;
/** @domName MediaController.duration */
- abstract num get duration;
+ num get duration;
/** @domName MediaController.muted */
bool muted;
/** @domName MediaController.paused */
- abstract bool get paused;
+ bool get paused;
/** @domName MediaController.playbackRate */
num playbackRate;
/** @domName MediaController.played */
- abstract TimeRanges get played;
+ TimeRanges get played;
/** @domName MediaController.seekable */
- abstract TimeRanges get seekable;
+ TimeRanges get seekable;
/** @domName MediaController.volume */
num volume;
@@ -21178,7 +21148,7 @@
bool autoplay;
/** @domName HTMLMediaElement.buffered */
- abstract TimeRanges get buffered;
+ TimeRanges get buffered;
/** @domName HTMLMediaElement.controller */
MediaController controller;
@@ -21187,7 +21157,7 @@
bool controls;
/** @domName HTMLMediaElement.currentSrc */
- abstract String get currentSrc;
+ String get currentSrc;
/** @domName HTMLMediaElement.currentTime */
num currentTime;
@@ -21199,16 +21169,16 @@
num defaultPlaybackRate;
/** @domName HTMLMediaElement.duration */
- abstract num get duration;
+ num get duration;
/** @domName HTMLMediaElement.ended */
- abstract bool get ended;
+ bool get ended;
/** @domName HTMLMediaElement.error */
- abstract MediaError get error;
+ MediaError get error;
/** @domName HTMLMediaElement.initialTime */
- abstract num get initialTime;
+ num get initialTime;
/** @domName HTMLMediaElement.loop */
bool loop;
@@ -21220,55 +21190,55 @@
bool muted;
/** @domName HTMLMediaElement.networkState */
- abstract int get networkState;
+ int get networkState;
/** @domName HTMLMediaElement.paused */
- abstract bool get paused;
+ bool get paused;
/** @domName HTMLMediaElement.playbackRate */
num playbackRate;
/** @domName HTMLMediaElement.played */
- abstract TimeRanges get played;
+ TimeRanges get played;
/** @domName HTMLMediaElement.preload */
String preload;
/** @domName HTMLMediaElement.readyState */
- abstract int get readyState;
+ int get readyState;
/** @domName HTMLMediaElement.seekable */
- abstract TimeRanges get seekable;
+ TimeRanges get seekable;
/** @domName HTMLMediaElement.seeking */
- abstract bool get seeking;
+ bool get seeking;
/** @domName HTMLMediaElement.src */
String src;
/** @domName HTMLMediaElement.startTime */
- abstract num get startTime;
+ num get startTime;
/** @domName HTMLMediaElement.textTracks */
- abstract TextTrackList get textTracks;
+ TextTrackList get textTracks;
/** @domName HTMLMediaElement.volume */
num volume;
/** @domName HTMLMediaElement.webkitAudioDecodedByteCount */
- abstract int get webkitAudioDecodedByteCount;
+ int get webkitAudioDecodedByteCount;
/** @domName HTMLMediaElement.webkitClosedCaptionsVisible */
bool webkitClosedCaptionsVisible;
/** @domName HTMLMediaElement.webkitHasClosedCaptions */
- abstract bool get webkitHasClosedCaptions;
+ bool get webkitHasClosedCaptions;
/** @domName HTMLMediaElement.webkitPreservesPitch */
bool webkitPreservesPitch;
/** @domName HTMLMediaElement.webkitVideoDecodedByteCount */
- abstract int get webkitVideoDecodedByteCount;
+ int get webkitVideoDecodedByteCount;
/** @domName HTMLMediaElement.addTextTrack */
TextTrack addTextTrack(String kind, [String label, String language]);
@@ -21357,7 +21327,7 @@
abstract class MediaElementAudioSourceNode implements AudioSourceNode {
/** @domName MediaElementAudioSourceNode.mediaElement */
- abstract MediaElement get mediaElement;
+ MediaElement get mediaElement;
}
// 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
@@ -21600,7 +21570,7 @@
static const int MEDIA_ERR_SRC_NOT_SUPPORTED = 4;
/** @domName MediaError.code */
- abstract int get code;
+ int get code;
}
// 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
@@ -21635,7 +21605,7 @@
static const int MEDIA_KEYERR_UNKNOWN = 1;
/** @domName MediaKeyError.code */
- abstract int get code;
+ int get code;
}
// 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
@@ -21658,25 +21628,25 @@
abstract class MediaKeyEvent implements Event {
/** @domName MediaKeyEvent.defaultURL */
- abstract String get defaultURL;
+ String get defaultURL;
/** @domName MediaKeyEvent.errorCode */
- abstract MediaKeyError get errorCode;
+ MediaKeyError get errorCode;
/** @domName MediaKeyEvent.initData */
- abstract Uint8Array get initData;
+ Uint8Array get initData;
/** @domName MediaKeyEvent.keySystem */
- abstract String get keySystem;
+ String get keySystem;
/** @domName MediaKeyEvent.message */
- abstract Uint8Array get message;
+ Uint8Array get message;
/** @domName MediaKeyEvent.sessionId */
- abstract String get sessionId;
+ String get sessionId;
/** @domName MediaKeyEvent.systemCode */
- abstract int get systemCode;
+ int get systemCode;
}
// 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
@@ -21711,7 +21681,7 @@
abstract class MediaList {
/** @domName MediaList.length */
- abstract int get length;
+ int get length;
/** @domName MediaList.mediaText */
String mediaText;
@@ -21756,10 +21726,10 @@
abstract class MediaQueryList {
/** @domName MediaQueryList.matches */
- abstract bool get matches;
+ bool get matches;
/** @domName MediaQueryList.media */
- abstract String get media;
+ String get media;
/** @domName MediaQueryList.addListener */
void addListener(MediaQueryListListener listener);
@@ -21808,16 +21778,16 @@
factory MediaSource() => _MediaSourceFactoryProvider.createMediaSource();
/** @domName MediaSource.activeSourceBuffers */
- abstract SourceBufferList get activeSourceBuffers;
+ SourceBufferList get activeSourceBuffers;
/** @domName MediaSource.duration */
num duration;
/** @domName MediaSource.readyState */
- abstract String get readyState;
+ String get readyState;
/** @domName MediaSource.sourceBuffers */
- abstract SourceBufferList get sourceBuffers;
+ SourceBufferList get sourceBuffers;
/** @domName MediaSource.addEventListener */
void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
@@ -21889,16 +21859,16 @@
static const int LIVE = 1;
/** @domName MediaStream.audioTracks */
- abstract MediaStreamTrackList get audioTracks;
+ MediaStreamTrackList get audioTracks;
/** @domName MediaStream.label */
- abstract String get label;
+ String get label;
/** @domName MediaStream.readyState */
- abstract int get readyState;
+ int get readyState;
/** @domName MediaStream.videoTracks */
- abstract MediaStreamTrackList get videoTracks;
+ MediaStreamTrackList get videoTracks;
/** @domName MediaStream.addEventListener */
void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
@@ -21924,7 +21894,7 @@
abstract class MediaStreamAudioSourceNode implements AudioSourceNode {
/** @domName MediaStreamAudioSourceNode.mediaStream */
- abstract MediaStream get mediaStream;
+ MediaStream get mediaStream;
}
// 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
@@ -21947,7 +21917,7 @@
abstract class MediaStreamEvent implements Event {
/** @domName MediaStreamEvent.stream */
- abstract MediaStream get stream;
+ MediaStream get stream;
}
// 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
@@ -22005,7 +21975,7 @@
MediaStream operator[](int index) native "MediaStreamList_item_Callback";
void operator[]=(int index, MediaStream value) {
- throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+ throw new UnsupportedError("Cannot assign element of immutable List.");
}
// -- start List<MediaStream> mixins.
// MediaStream is the element type.
@@ -22022,15 +21992,15 @@
// From Collection<MediaStream>:
void add(MediaStream value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addLast(MediaStream value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addAll(Collection<MediaStream> collection) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
bool contains(MediaStream element) => _Collections.contains(this, element);
@@ -22046,38 +22016,38 @@
bool some(bool f(MediaStream element)) => _Collections.some(this, f);
- bool isEmpty() => this.length == 0;
+ bool get isEmpty => this.length == 0;
// From List<MediaStream>:
void sort([Comparator<MediaStream> compare = Comparable.compare]) {
- throw const UnsupportedOperationException("Cannot sort immutable List.");
+ throw new UnsupportedError("Cannot sort immutable List.");
}
int indexOf(MediaStream element, [int start = 0]) =>
_Lists.indexOf(this, element, start, this.length);
int lastIndexOf(MediaStream element, [int start]) {
- if (start === null) start = length - 1;
+ if (start == null) start = length - 1;
return _Lists.lastIndexOf(this, element, start);
}
- MediaStream last() => this[length - 1];
+ MediaStream get last => this[length - 1];
MediaStream removeLast() {
- throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+ throw new UnsupportedError("Cannot removeLast on immutable List.");
}
void setRange(int start, int rangeLength, List<MediaStream> from, [int startFrom]) {
- throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+ throw new UnsupportedError("Cannot setRange on immutable List.");
}
void removeRange(int start, int rangeLength) {
- throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+ throw new UnsupportedError("Cannot removeRange on immutable List.");
}
void insertRange(int start, int rangeLength, [MediaStream initialValue]) {
- throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+ throw new UnsupportedError("Cannot insertRange on immutable List.");
}
List<MediaStream> getRange(int start, int rangeLength) =>
@@ -22112,13 +22082,13 @@
bool enabled;
/** @domName MediaStreamTrack.kind */
- abstract String get kind;
+ String get kind;
/** @domName MediaStreamTrack.label */
- abstract String get label;
+ String get label;
/** @domName MediaStreamTrack.readyState */
- abstract int get readyState;
+ int get readyState;
/** @domName MediaStreamTrack.addEventListener */
void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
@@ -22148,7 +22118,7 @@
abstract class MediaStreamTrackEvent implements Event {
/** @domName MediaStreamTrackEvent.track */
- abstract MediaStreamTrack get track;
+ MediaStreamTrack get track;
}
// 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
@@ -22214,7 +22184,7 @@
MediaStreamTrackListEvents get on;
/** @domName MediaStreamTrackList.length */
- abstract int get length;
+ int get length;
/** @domName MediaStreamTrackList.add */
void add(MediaStreamTrack track);
@@ -22285,13 +22255,13 @@
abstract class MemoryInfo {
/** @domName MemoryInfo.jsHeapSizeLimit */
- abstract int get jsHeapSizeLimit;
+ int get jsHeapSizeLimit;
/** @domName MemoryInfo.totalJSHeapSize */
- abstract int get totalJSHeapSize;
+ int get totalJSHeapSize;
/** @domName MemoryInfo.usedJSHeapSize */
- abstract int get usedJSHeapSize;
+ int get usedJSHeapSize;
}
// 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
@@ -22347,10 +22317,10 @@
factory MessageChannel() => _MessageChannelFactoryProvider.createMessageChannel();
/** @domName MessageChannel.port1 */
- abstract MessagePort get port1;
+ MessagePort get port1;
/** @domName MessageChannel.port2 */
- abstract MessagePort get port2;
+ MessagePort get port2;
}
// 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
@@ -22375,19 +22345,19 @@
abstract class MessageEvent implements Event {
/** @domName MessageEvent.data */
- abstract Object get data;
+ Object get data;
/** @domName MessageEvent.lastEventId */
- abstract String get lastEventId;
+ String get lastEventId;
/** @domName MessageEvent.origin */
- abstract String get origin;
+ String get origin;
/** @domName MessageEvent.ports */
- abstract List get ports;
+ List get ports;
/** @domName MessageEvent.source */
- abstract Window get source;
+ Window get source;
/** @domName MessageEvent.initMessageEvent */
void initMessageEvent(String typeArg, bool canBubbleArg, bool cancelableArg, Object dataArg, String originArg, String lastEventIdArg, LocalWindow sourceArg, List messagePorts);
@@ -22541,10 +22511,10 @@
abstract class Metadata {
/** @domName Metadata.modificationTime */
- abstract Date get modificationTime;
+ Date get modificationTime;
/** @domName Metadata.size */
- abstract int get size;
+ int get size;
}
// 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
@@ -22552,6 +22522,7 @@
// WARNING: Do not edit - generated code.
+
typedef void MetadataCallback(Metadata metadata);
// 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
@@ -22581,7 +22552,7 @@
num high;
/** @domName HTMLMeterElement.labels */
- abstract List<Node> get labels;
+ List<Node> get labels;
/** @domName HTMLMeterElement.low */
num low;
@@ -22671,6 +22642,7 @@
// WARNING: Do not edit - generated code.
+
/// @domName MouseEvent
abstract class MouseEvent implements UIEvent {
@@ -22687,61 +22659,61 @@
/** @domName MouseEvent.altKey */
- abstract bool get altKey;
+ bool get altKey;
/** @domName MouseEvent.button */
- abstract int get button;
+ int get button;
/** @domName MouseEvent.clientX */
- abstract int get clientX;
+ int get clientX;
/** @domName MouseEvent.clientY */
- abstract int get clientY;
+ int get clientY;
/** @domName MouseEvent.ctrlKey */
- abstract bool get ctrlKey;
+ bool get ctrlKey;
/** @domName MouseEvent.dataTransfer */
- abstract Clipboard get dataTransfer;
+ Clipboard get dataTransfer;
/** @domName MouseEvent.fromElement */
- abstract Node get fromElement;
+ Node get fromElement;
/** @domName MouseEvent.metaKey */
- abstract bool get metaKey;
+ bool get metaKey;
/** @domName MouseEvent.offsetX */
- abstract int get offsetX;
+ int get offsetX;
/** @domName MouseEvent.offsetY */
- abstract int get offsetY;
+ int get offsetY;
/** @domName MouseEvent.relatedTarget */
- abstract EventTarget get relatedTarget;
+ EventTarget get relatedTarget;
/** @domName MouseEvent.screenX */
- abstract int get screenX;
+ int get screenX;
/** @domName MouseEvent.screenY */
- abstract int get screenY;
+ int get screenY;
/** @domName MouseEvent.shiftKey */
- abstract bool get shiftKey;
+ bool get shiftKey;
/** @domName MouseEvent.toElement */
- abstract Node get toElement;
+ Node get toElement;
/** @domName MouseEvent.webkitMovementX */
- abstract int get webkitMovementX;
+ int get webkitMovementX;
/** @domName MouseEvent.webkitMovementY */
- abstract int get webkitMovementY;
+ int get webkitMovementY;
/** @domName MouseEvent.x */
- abstract int get x;
+ int get x;
/** @domName MouseEvent.y */
- abstract int get y;
+ int get y;
/** @domName MouseEvent.initMouseEvent */
void $dom_initMouseEvent(String type, bool canBubble, bool cancelable, LocalWindow view, int detail, int screenX, int screenY, int clientX, int clientY, bool ctrlKey, bool altKey, bool shiftKey, bool metaKey, int button, EventTarget relatedTarget);
@@ -22801,6 +22773,7 @@
// WARNING: Do not edit - generated code.
+
typedef void MutationCallback(List<MutationRecord> mutations, MutationObserver observer);
// 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
@@ -22818,19 +22791,19 @@
static const int REMOVAL = 3;
/** @domName MutationEvent.attrChange */
- abstract int get attrChange;
+ int get attrChange;
/** @domName MutationEvent.attrName */
- abstract String get attrName;
+ String get attrName;
/** @domName MutationEvent.newValue */
- abstract String get newValue;
+ String get newValue;
/** @domName MutationEvent.prevValue */
- abstract String get prevValue;
+ String get prevValue;
/** @domName MutationEvent.relatedNode */
- abstract Node get relatedNode;
+ Node get relatedNode;
/** @domName MutationEvent.initMutationEvent */
void initMutationEvent(String type, bool canBubble, bool cancelable, Node relatedNode, String prevValue, String newValue, String attrName, int attrChange);
@@ -22862,6 +22835,7 @@
// WARNING: Do not edit - generated code.
+
/// @domName MutationObserver
abstract class MutationObserver {
@@ -22911,7 +22885,7 @@
if (options != null) {
options.forEach((k, v) {
if (_boolKeys.containsKey(k)) {
- _add(parsedOptions, k, true === v);
+ _add(parsedOptions, k, true == v);
} else if (k == 'attributeFilter') {
_add(parsedOptions, k, _fixupList(v));
} else {
@@ -22967,31 +22941,31 @@
abstract class MutationRecord {
/** @domName MutationRecord.addedNodes */
- abstract List<Node> get addedNodes;
+ List<Node> get addedNodes;
/** @domName MutationRecord.attributeName */
- abstract String get attributeName;
+ String get attributeName;
/** @domName MutationRecord.attributeNamespace */
- abstract String get attributeNamespace;
+ String get attributeNamespace;
/** @domName MutationRecord.nextSibling */
- abstract Node get nextSibling;
+ Node get nextSibling;
/** @domName MutationRecord.oldValue */
- abstract String get oldValue;
+ String get oldValue;
/** @domName MutationRecord.previousSibling */
- abstract Node get previousSibling;
+ Node get previousSibling;
/** @domName MutationRecord.removedNodes */
- abstract List<Node> get removedNodes;
+ List<Node> get removedNodes;
/** @domName MutationRecord.target */
- abstract Node get target;
+ Node get target;
/** @domName MutationRecord.type */
- abstract String get type;
+ String get type;
}
// 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
@@ -23030,7 +23004,7 @@
abstract class NamedNodeMap implements List<Node> {
/** @domName NamedNodeMap.length */
- abstract int get length;
+ int get length;
/** @domName NamedNodeMap.getNamedItem */
Node getNamedItem(String name);
@@ -23066,7 +23040,7 @@
Node operator[](int index) native "NamedNodeMap_item_Callback";
void operator[]=(int index, Node value) {
- throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+ throw new UnsupportedError("Cannot assign element of immutable List.");
}
// -- start List<Node> mixins.
// Node is the element type.
@@ -23083,15 +23057,15 @@
// From Collection<Node>:
void add(Node value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addLast(Node value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addAll(Collection<Node> collection) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
bool contains(Node element) => _Collections.contains(this, element);
@@ -23107,38 +23081,38 @@
bool some(bool f(Node element)) => _Collections.some(this, f);
- bool isEmpty() => this.length == 0;
+ bool get isEmpty => this.length == 0;
// From List<Node>:
void sort([Comparator<Node> compare = Comparable.compare]) {
- throw const UnsupportedOperationException("Cannot sort immutable List.");
+ throw new UnsupportedError("Cannot sort immutable List.");
}
int indexOf(Node element, [int start = 0]) =>
_Lists.indexOf(this, element, start, this.length);
int lastIndexOf(Node element, [int start]) {
- if (start === null) start = length - 1;
+ if (start == null) start = length - 1;
return _Lists.lastIndexOf(this, element, start);
}
- Node last() => this[length - 1];
+ Node get last => this[length - 1];
Node removeLast() {
- throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+ throw new UnsupportedError("Cannot removeLast on immutable List.");
}
void setRange(int start, int rangeLength, List<Node> from, [int startFrom]) {
- throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+ throw new UnsupportedError("Cannot setRange on immutable List.");
}
void removeRange(int start, int rangeLength) {
- throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+ throw new UnsupportedError("Cannot removeRange on immutable List.");
}
void insertRange(int start, int rangeLength, [Node initialValue]) {
- throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+ throw new UnsupportedError("Cannot insertRange on immutable List.");
}
List<Node> getRange(int start, int rangeLength) =>
@@ -23171,52 +23145,52 @@
abstract class Navigator {
/** @domName Navigator.appCodeName */
- abstract String get appCodeName;
+ String get appCodeName;
/** @domName Navigator.appName */
- abstract String get appName;
+ String get appName;
/** @domName Navigator.appVersion */
- abstract String get appVersion;
+ String get appVersion;
/** @domName Navigator.cookieEnabled */
- abstract bool get cookieEnabled;
+ bool get cookieEnabled;
/** @domName Navigator.geolocation */
- abstract Geolocation get geolocation;
+ Geolocation get geolocation;
/** @domName Navigator.language */
- abstract String get language;
+ String get language;
/** @domName Navigator.mimeTypes */
- abstract DOMMimeTypeArray get mimeTypes;
+ DOMMimeTypeArray get mimeTypes;
/** @domName Navigator.onLine */
- abstract bool get onLine;
+ bool get onLine;
/** @domName Navigator.platform */
- abstract String get platform;
+ String get platform;
/** @domName Navigator.plugins */
- abstract DOMPluginArray get plugins;
+ DOMPluginArray get plugins;
/** @domName Navigator.product */
- abstract String get product;
+ String get product;
/** @domName Navigator.productSub */
- abstract String get productSub;
+ String get productSub;
/** @domName Navigator.userAgent */
- abstract String get userAgent;
+ String get userAgent;
/** @domName Navigator.vendor */
- abstract String get vendor;
+ String get vendor;
/** @domName Navigator.vendorSub */
- abstract String get vendorSub;
+ String get vendorSub;
/** @domName Navigator.webkitBattery */
- abstract BatteryManager get webkitBattery;
+ BatteryManager get webkitBattery;
/** @domName Navigator.getStorageUpdates */
void getStorageUpdates();
@@ -23291,7 +23265,7 @@
static const int PERMISSION_DENIED = 1;
/** @domName NavigatorUserMediaError.code */
- abstract int get code;
+ int get code;
}
// 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
@@ -23299,6 +23273,7 @@
// WARNING: Do not edit - generated code.
+
typedef void NavigatorUserMediaErrorCallback(NavigatorUserMediaError error);
// 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
@@ -23317,6 +23292,7 @@
// WARNING: Do not edit - generated code.
+
typedef void NavigatorUserMediaSuccessCallback(LocalMediaStream stream);
// 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
@@ -23324,6 +23300,7 @@
// WARNING: Do not edit - generated code.
+
/// @domName Node
abstract class Node implements EventTarget {
List<Node> get nodes;
@@ -23380,31 +23357,31 @@
static const int TEXT_NODE = 3;
/** @domName Node.attributes */
- abstract NamedNodeMap get $dom_attributes;
+ NamedNodeMap get $dom_attributes;
/** @domName Node.childNodes */
- abstract List<Node> get $dom_childNodes;
+ List<Node> get $dom_childNodes;
/** @domName Node.firstChild */
- abstract Node get $dom_firstChild;
+ Node get $dom_firstChild;
/** @domName Node.lastChild */
- abstract Node get $dom_lastChild;
+ Node get $dom_lastChild;
/** @domName Node.nextSibling */
- abstract Node get nextNode;
+ Node get nextNode;
/** @domName Node.nodeType */
- abstract int get $dom_nodeType;
+ int get $dom_nodeType;
/** @domName Node.ownerDocument */
- abstract Document get document;
+ Document get document;
/** @domName Node.parentNode */
- abstract Node get parent;
+ Node get parent;
/** @domName Node.previousSibling */
- abstract Node get previousNode;
+ Node get previousNode;
/** @domName Node.textContent */
String text;
@@ -23511,7 +23488,7 @@
_NodeImpl get first => _this.$dom_firstChild;
- _NodeImpl last() => _this.$dom_lastChild;
+ _NodeImpl get last => _this.$dom_lastChild;
void add(_NodeImpl value) {
_this.$dom_appendChild(value);
@@ -23529,7 +23506,7 @@
}
_NodeImpl removeLast() {
- final result = last();
+ final result = last;
if (result != null) {
_this.$dom_removeChild(result);
}
@@ -23561,14 +23538,14 @@
bool some(bool f(Node element)) => _Collections.some(this, f);
- bool isEmpty() => this.length == 0;
+ bool get isEmpty => this.length == 0;
// From List<Node>:
// TODO(jacobr): this could be implemented for child node lists.
// The exception we throw here is misleading.
void sort([Comparator<Node> compare = Comparable.compare]) {
- throw new UnsupportedOperationException("Cannot sort immutable List.");
+ throw new UnsupportedError("Cannot sort immutable List.");
}
int indexOf(Node element, [int start = 0]) =>
@@ -23579,15 +23556,15 @@
// FIXME: implement these.
void setRange(int start, int rangeLength, List<Node> from, [int startFrom]) {
- throw new UnsupportedOperationException(
+ throw new UnsupportedError(
"Cannot setRange on immutable List.");
}
void removeRange(int start, int rangeLength) {
- throw new UnsupportedOperationException(
+ throw new UnsupportedError(
"Cannot removeRange on immutable List.");
}
void insertRange(int start, int rangeLength, [Node initialValue]) {
- throw new UnsupportedOperationException(
+ throw new UnsupportedError(
"Cannot insertRange on immutable List.");
}
List<Node> getRange(int start, int rangeLength) =>
@@ -23690,22 +23667,22 @@
abstract class NodeIterator {
/** @domName NodeIterator.expandEntityReferences */
- abstract bool get expandEntityReferences;
+ bool get expandEntityReferences;
/** @domName NodeIterator.filter */
- abstract NodeFilter get filter;
+ NodeFilter get filter;
/** @domName NodeIterator.pointerBeforeReferenceNode */
- abstract bool get pointerBeforeReferenceNode;
+ bool get pointerBeforeReferenceNode;
/** @domName NodeIterator.referenceNode */
- abstract Node get referenceNode;
+ Node get referenceNode;
/** @domName NodeIterator.root */
- abstract Node get root;
+ Node get root;
/** @domName NodeIterator.whatToShow */
- abstract int get whatToShow;
+ int get whatToShow;
/** @domName NodeIterator.detach */
void detach();
@@ -23749,6 +23726,7 @@
// WARNING: Do not edit - generated code.
+
/// @domName NodeList
abstract class NodeList implements List<Node> {
@@ -23760,7 +23738,7 @@
/** @domName NodeList.length */
- abstract int get length;
+ int get length;
}
// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
@@ -23788,7 +23766,7 @@
bool some(bool f(E element)) => _list.some(f);
- bool isEmpty() => _list.isEmpty();
+ bool get isEmpty => _list.isEmpty;
int get length => _list.length;
@@ -23815,7 +23793,7 @@
E removeLast() => _list.removeLast();
- E last() => _list.last();
+ E get last => _list.last;
List<E> getRange(int start, int rangeLength) =>
_list.getRange(start, rangeLength);
@@ -23878,7 +23856,7 @@
}
_NodeImpl removeLast() {
- final result = this.last();
+ final result = this.last;
if (result != null) {
_parent.$dom_removeChild(result);
}
@@ -23906,12 +23884,12 @@
bool some(bool f(Node element)) => _Collections.some(this, f);
- bool isEmpty() => this.length == 0;
+ bool get isEmpty => this.length == 0;
// From List<Node>:
void sort([Comparator<Node> compare = Comparable.compare]) {
- throw new UnsupportedOperationException("Cannot sort immutable List.");
+ throw new UnsupportedError("Cannot sort immutable List.");
}
int indexOf(Node element, [int start = 0]) =>
@@ -23920,18 +23898,18 @@
int lastIndexOf(Node element, [int start = 0]) =>
_Lists.lastIndexOf(this, element, start);
- Node last() => this[length - 1];
+ Node get last => this[length - 1];
Node get first => this[0];
// FIXME: implement thesee.
void setRange(int start, int rangeLength, List<Node> from, [int startFrom]) {
- throw new UnsupportedOperationException("Cannot setRange on immutable List.");
+ throw new UnsupportedError("Cannot setRange on immutable List.");
}
void removeRange(int start, int rangeLength) {
- throw new UnsupportedOperationException("Cannot removeRange on immutable List.");
+ throw new UnsupportedError("Cannot removeRange on immutable List.");
}
void insertRange(int start, int rangeLength, [Node initialValue]) {
- throw new UnsupportedOperationException("Cannot insertRange on immutable List.");
+ throw new UnsupportedError("Cannot insertRange on immutable List.");
}
List<Node> getRange(int start, int rangeLength) =>
new _NodeListWrapper(_Lists.getRange(this, start, rangeLength, <Node>[]));
@@ -23956,10 +23934,10 @@
abstract class Notation implements Node {
/** @domName Notation.publicId */
- abstract String get publicId;
+ String get publicId;
/** @domName Notation.systemId */
- abstract String get systemId;
+ String get systemId;
}
// 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
@@ -23999,7 +23977,7 @@
String dir;
/** @domName Notification.permission */
- abstract String get permission;
+ String get permission;
/** @domName Notification.replaceId */
String replaceId;
@@ -24139,6 +24117,7 @@
// WARNING: Do not edit - generated code.
+
typedef void NotificationPermissionCallback(String permission);
// 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
@@ -24295,9 +24274,6 @@
/** @domName HTMLObjectElement.codeType */
String codeType;
- /** @domName HTMLObjectElement.contentDocument */
- abstract Document get contentDocument;
-
/** @domName HTMLObjectElement.data */
String data;
@@ -24305,7 +24281,7 @@
bool declare;
/** @domName HTMLObjectElement.form */
- abstract FormElement get form;
+ FormElement get form;
/** @domName HTMLObjectElement.height */
String height;
@@ -24326,10 +24302,10 @@
String useMap;
/** @domName HTMLObjectElement.validationMessage */
- abstract String get validationMessage;
+ String get validationMessage;
/** @domName HTMLObjectElement.validity */
- abstract ValidityState get validity;
+ ValidityState get validity;
/** @domName HTMLObjectElement.vspace */
int vspace;
@@ -24338,7 +24314,7 @@
String width;
/** @domName HTMLObjectElement.willValidate */
- abstract bool get willValidate;
+ bool get willValidate;
/** @domName HTMLObjectElement.checkValidity */
bool checkValidity();
@@ -24441,7 +24417,7 @@
abstract class OfflineAudioCompletionEvent implements Event {
/** @domName OfflineAudioCompletionEvent.renderedBuffer */
- abstract AudioBuffer get renderedBuffer;
+ AudioBuffer get renderedBuffer;
}
// 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
@@ -24520,10 +24496,10 @@
bool disabled;
/** @domName HTMLOptionElement.form */
- abstract FormElement get form;
+ FormElement get form;
/** @domName HTMLOptionElement.index */
- abstract int get index;
+ int get index;
/** @domName HTMLOptionElement.label */
String label;
@@ -24595,13 +24571,13 @@
static const int UNSCHEDULED_STATE = 0;
/** @domName Oscillator.detune */
- abstract AudioParam get detune;
+ AudioParam get detune;
/** @domName Oscillator.frequency */
- abstract AudioParam get frequency;
+ AudioParam get frequency;
/** @domName Oscillator.playbackState */
- abstract int get playbackState;
+ int get playbackState;
/** @domName Oscillator.type */
int type;
@@ -24655,31 +24631,31 @@
String defaultValue;
/** @domName HTMLOutputElement.form */
- abstract FormElement get form;
+ FormElement get form;
/** @domName HTMLOutputElement.htmlFor */
DOMSettableTokenList htmlFor;
/** @domName HTMLOutputElement.labels */
- abstract List<Node> get labels;
+ List<Node> get labels;
/** @domName HTMLOutputElement.name */
String name;
/** @domName HTMLOutputElement.type */
- abstract String get type;
+ String get type;
/** @domName HTMLOutputElement.validationMessage */
- abstract String get validationMessage;
+ String get validationMessage;
/** @domName HTMLOutputElement.validity */
- abstract ValidityState get validity;
+ ValidityState get validity;
/** @domName HTMLOutputElement.value */
String value;
/** @domName HTMLOutputElement.willValidate */
- abstract bool get willValidate;
+ bool get willValidate;
/** @domName HTMLOutputElement.checkValidity */
bool checkValidity();
@@ -24744,13 +24720,13 @@
static const int VERTICAL = 1;
/** @domName OverflowEvent.horizontalOverflow */
- abstract bool get horizontalOverflow;
+ bool get horizontalOverflow;
/** @domName OverflowEvent.orient */
- abstract int get orient;
+ int get orient;
/** @domName OverflowEvent.verticalOverflow */
- abstract bool get verticalOverflow;
+ bool get verticalOverflow;
}
// 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
@@ -24805,7 +24781,7 @@
abstract class PageTransitionEvent implements Event {
/** @domName PageTransitionEvent.persisted */
- abstract bool get persisted;
+ bool get persisted;
}
// 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
@@ -24938,22 +24914,22 @@
static const int SDP_PRANSWER = 0x200;
/** @domName PeerConnection00.iceState */
- abstract int get iceState;
+ int get iceState;
/** @domName PeerConnection00.localDescription */
- abstract SessionDescription get localDescription;
+ SessionDescription get localDescription;
/** @domName PeerConnection00.localStreams */
- abstract List<MediaStream> get localStreams;
+ List<MediaStream> get localStreams;
/** @domName PeerConnection00.readyState */
- abstract int get readyState;
+ int get readyState;
/** @domName PeerConnection00.remoteDescription */
- abstract SessionDescription get remoteDescription;
+ SessionDescription get remoteDescription;
/** @domName PeerConnection00.remoteStreams */
- abstract List<MediaStream> get remoteStreams;
+ List<MediaStream> get remoteStreams;
/** @domName PeerConnection00.addEventListener */
void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
@@ -25114,16 +25090,16 @@
abstract class Performance implements EventTarget {
/** @domName Performance.memory */
- abstract MemoryInfo get memory;
+ MemoryInfo get memory;
/** @domName Performance.navigation */
- abstract PerformanceNavigation get navigation;
+ PerformanceNavigation get navigation;
/** @domName Performance.timing */
- abstract PerformanceTiming get timing;
+ PerformanceTiming get timing;
- /** @domName Performance.webkitNow */
- num webkitNow();
+ /** @domName Performance.now */
+ num now();
}
// 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
@@ -25139,7 +25115,7 @@
PerformanceTiming get timing native "Performance_timing_Getter";
- num webkitNow() native "Performance_webkitNow_Callback";
+ num now() native "Performance_now_Callback";
}
// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
@@ -25160,10 +25136,10 @@
static const int TYPE_RESERVED = 255;
/** @domName PerformanceNavigation.redirectCount */
- abstract int get redirectCount;
+ int get redirectCount;
/** @domName PerformanceNavigation.type */
- abstract int get type;
+ int get type;
}
// 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
@@ -25188,67 +25164,67 @@
abstract class PerformanceTiming {
/** @domName PerformanceTiming.connectEnd */
- abstract int get connectEnd;
+ int get connectEnd;
/** @domName PerformanceTiming.connectStart */
- abstract int get connectStart;
+ int get connectStart;
/** @domName PerformanceTiming.domComplete */
- abstract int get domComplete;
+ int get domComplete;
/** @domName PerformanceTiming.domContentLoadedEventEnd */
- abstract int get domContentLoadedEventEnd;
+ int get domContentLoadedEventEnd;
/** @domName PerformanceTiming.domContentLoadedEventStart */
- abstract int get domContentLoadedEventStart;
+ int get domContentLoadedEventStart;
/** @domName PerformanceTiming.domInteractive */
- abstract int get domInteractive;
+ int get domInteractive;
/** @domName PerformanceTiming.domLoading */
- abstract int get domLoading;
+ int get domLoading;
/** @domName PerformanceTiming.domainLookupEnd */
- abstract int get domainLookupEnd;
+ int get domainLookupEnd;
/** @domName PerformanceTiming.domainLookupStart */
- abstract int get domainLookupStart;
+ int get domainLookupStart;
/** @domName PerformanceTiming.fetchStart */
- abstract int get fetchStart;
+ int get fetchStart;
/** @domName PerformanceTiming.loadEventEnd */
- abstract int get loadEventEnd;
+ int get loadEventEnd;
/** @domName PerformanceTiming.loadEventStart */
- abstract int get loadEventStart;
+ int get loadEventStart;
/** @domName PerformanceTiming.navigationStart */
- abstract int get navigationStart;
+ int get navigationStart;
/** @domName PerformanceTiming.redirectEnd */
- abstract int get redirectEnd;
+ int get redirectEnd;
/** @domName PerformanceTiming.redirectStart */
- abstract int get redirectStart;
+ int get redirectStart;
/** @domName PerformanceTiming.requestStart */
- abstract int get requestStart;
+ int get requestStart;
/** @domName PerformanceTiming.responseEnd */
- abstract int get responseEnd;
+ int get responseEnd;
/** @domName PerformanceTiming.responseStart */
- abstract int get responseStart;
+ int get responseStart;
/** @domName PerformanceTiming.secureConnectionStart */
- abstract int get secureConnectionStart;
+ int get secureConnectionStart;
/** @domName PerformanceTiming.unloadEventEnd */
- abstract int get unloadEventEnd;
+ int get unloadEventEnd;
/** @domName PerformanceTiming.unloadEventStart */
- abstract int get unloadEventStart;
+ int get unloadEventStart;
}
// 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
@@ -25307,6 +25283,7 @@
// WARNING: Do not edit - generated code.
+
/// @domName WebKitPoint
abstract class Point {
@@ -25345,7 +25322,7 @@
abstract class PopStateEvent implements Event {
/** @domName PopStateEvent.state */
- abstract Object get state;
+ Object get state;
}
// 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
@@ -25364,6 +25341,7 @@
// WARNING: Do not edit - generated code.
+
typedef void PositionCallback(Geoposition position);
// 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
@@ -25381,10 +25359,10 @@
static const int TIMEOUT = 3;
/** @domName PositionError.code */
- abstract int get code;
+ int get code;
/** @domName PositionError.message */
- abstract String get message;
+ String get message;
}
// 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
@@ -25392,6 +25370,7 @@
// WARNING: Do not edit - generated code.
+
typedef void PositionErrorCallback(PositionError error);
// 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
@@ -25453,10 +25432,10 @@
String data;
/** @domName ProcessingInstruction.sheet */
- abstract StyleSheet get sheet;
+ StyleSheet get sheet;
/** @domName ProcessingInstruction.target */
- abstract String get target;
+ String get target;
}
// 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
@@ -25487,13 +25466,13 @@
factory ProgressElement() => _Elements.createProgressElement();
/** @domName HTMLProgressElement.labels */
- abstract List<Node> get labels;
+ List<Node> get labels;
/** @domName HTMLProgressElement.max */
num max;
/** @domName HTMLProgressElement.position */
- abstract num get position;
+ num get position;
/** @domName HTMLProgressElement.value */
num value;
@@ -25529,13 +25508,13 @@
abstract class ProgressEvent implements Event {
/** @domName ProgressEvent.lengthComputable */
- abstract bool get lengthComputable;
+ bool get lengthComputable;
/** @domName ProgressEvent.loaded */
- abstract int get loaded;
+ int get loaded;
/** @domName ProgressEvent.total */
- abstract int get total;
+ int get total;
}
// 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
@@ -25587,13 +25566,13 @@
abstract class RGBColor {
/** @domName RGBColor.blue */
- abstract CSSPrimitiveValue get blue;
+ CSSPrimitiveValue get blue;
/** @domName RGBColor.green */
- abstract CSSPrimitiveValue get green;
+ CSSPrimitiveValue get green;
/** @domName RGBColor.red */
- abstract CSSPrimitiveValue get red;
+ CSSPrimitiveValue get red;
}
// 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
@@ -25616,6 +25595,157 @@
// WARNING: Do not edit - generated code.
+/// @domName RTCDataChannel
+abstract class RTCDataChannel implements EventTarget {
+
+ /**
+ * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
+ */
+ RTCDataChannelEvents get on;
+
+ /** @domName RTCDataChannel.binaryType */
+ String binaryType;
+
+ /** @domName RTCDataChannel.bufferedAmount */
+ int get bufferedAmount;
+
+ /** @domName RTCDataChannel.label */
+ String get label;
+
+ /** @domName RTCDataChannel.readyState */
+ String get readyState;
+
+ /** @domName RTCDataChannel.reliable */
+ bool get reliable;
+
+ /** @domName RTCDataChannel.addEventListener */
+ void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
+
+ /** @domName RTCDataChannel.close */
+ void close();
+
+ /** @domName RTCDataChannel.dispatchEvent */
+ bool $dom_dispatchEvent(Event event);
+
+ /** @domName RTCDataChannel.removeEventListener */
+ void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]);
+
+ /** @domName RTCDataChannel.send */
+ void send(data);
+}
+
+abstract class RTCDataChannelEvents implements Events {
+
+ EventListenerList get close;
+
+ EventListenerList get error;
+
+ EventListenerList get message;
+
+ EventListenerList get open;
+}
+// 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.
+
+// WARNING: Do not edit - generated code.
+
+/// @domName RTCDataChannelEvent
+abstract class RTCDataChannelEvent implements Event {
+
+ /** @domName RTCDataChannelEvent.channel */
+ RTCDataChannel get channel;
+}
+// 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.
+
+// WARNING: Do not edit - generated code.
+
+class _RTCDataChannelEventImpl extends _EventImpl implements RTCDataChannelEvent {
+
+ RTCDataChannel get channel native "RTCDataChannelEvent_channel_Getter";
+
+}
+// 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.
+
+// WARNING: Do not edit - generated code.
+
+class _RTCDataChannelImpl extends _EventTargetImpl implements RTCDataChannel {
+
+ _RTCDataChannelEventsImpl get on =>
+ new _RTCDataChannelEventsImpl(this);
+
+ String get binaryType native "RTCDataChannel_binaryType_Getter";
+
+ void set binaryType(String value) native "RTCDataChannel_binaryType_Setter";
+
+ int get bufferedAmount native "RTCDataChannel_bufferedAmount_Getter";
+
+ String get label native "RTCDataChannel_label_Getter";
+
+ String get readyState native "RTCDataChannel_readyState_Getter";
+
+ bool get reliable native "RTCDataChannel_reliable_Getter";
+
+ void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "RTCDataChannel_addEventListener_Callback";
+
+ void close() native "RTCDataChannel_close_Callback";
+
+ bool $dom_dispatchEvent(Event event) native "RTCDataChannel_dispatchEvent_Callback";
+
+ void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "RTCDataChannel_removeEventListener_Callback";
+
+ void send(data) {
+ if ((data is ArrayBuffer || data == null)) {
+ _send_1(data);
+ return;
+ }
+ if ((data is ArrayBufferView || data == null)) {
+ _send_2(data);
+ return;
+ }
+ if ((data is Blob || data == null)) {
+ _send_3(data);
+ return;
+ }
+ if ((data is String || data == null)) {
+ _send_4(data);
+ return;
+ }
+ throw "Incorrect number or type of arguments";
+ }
+
+ void _send_1(data) native "RTCDataChannel_send_1_Callback";
+
+ void _send_2(data) native "RTCDataChannel_send_2_Callback";
+
+ void _send_3(data) native "RTCDataChannel_send_3_Callback";
+
+ void _send_4(data) native "RTCDataChannel_send_4_Callback";
+
+}
+
+class _RTCDataChannelEventsImpl extends _EventsImpl implements RTCDataChannelEvents {
+ _RTCDataChannelEventsImpl(_ptr) : super(_ptr);
+
+ EventListenerList get close => this['close'];
+
+ EventListenerList get error => this['error'];
+
+ EventListenerList get message => this['message'];
+
+ EventListenerList get open => this['open'];
+}
+// 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.
+
+// WARNING: Do not edit - generated code.
+
+
typedef void RTCErrorCallback(String errorInformation);
// 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
@@ -25629,13 +25759,13 @@
factory RTCIceCandidate(Map dictionary) => _RTCIceCandidateFactoryProvider.createRTCIceCandidate(dictionary);
/** @domName RTCIceCandidate.candidate */
- abstract String get candidate;
+ String get candidate;
/** @domName RTCIceCandidate.sdpMLineIndex */
- abstract int get sdpMLineIndex;
+ int get sdpMLineIndex;
/** @domName RTCIceCandidate.sdpMid */
- abstract String get sdpMid;
+ String get sdpMid;
}
// 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
@@ -25647,7 +25777,7 @@
abstract class RTCIceCandidateEvent implements Event {
/** @domName RTCIceCandidateEvent.candidate */
- abstract RTCIceCandidate get candidate;
+ RTCIceCandidate get candidate;
}
// 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
@@ -25697,22 +25827,22 @@
RTCPeerConnectionEvents get on;
/** @domName RTCPeerConnection.iceState */
- abstract String get iceState;
+ String get iceState;
/** @domName RTCPeerConnection.localDescription */
- abstract RTCSessionDescription get localDescription;
+ RTCSessionDescription get localDescription;
/** @domName RTCPeerConnection.localStreams */
- abstract List<MediaStream> get localStreams;
+ List<MediaStream> get localStreams;
/** @domName RTCPeerConnection.readyState */
- abstract String get readyState;
+ String get readyState;
/** @domName RTCPeerConnection.remoteDescription */
- abstract RTCSessionDescription get remoteDescription;
+ RTCSessionDescription get remoteDescription;
/** @domName RTCPeerConnection.remoteStreams */
- abstract List<MediaStream> get remoteStreams;
+ List<MediaStream> get remoteStreams;
/** @domName RTCPeerConnection.addEventListener */
void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
@@ -25729,6 +25859,9 @@
/** @domName RTCPeerConnection.createAnswer */
void createAnswer(RTCSessionDescriptionCallback successCallback, [RTCErrorCallback failureCallback, Map mediaConstraints]);
+ /** @domName RTCPeerConnection.createDataChannel */
+ RTCDataChannel createDataChannel(String label, Map options);
+
/** @domName RTCPeerConnection.createOffer */
void createOffer(RTCSessionDescriptionCallback successCallback, [RTCErrorCallback failureCallback, Map mediaConstraints]);
@@ -25803,6 +25936,8 @@
void createAnswer(RTCSessionDescriptionCallback successCallback, [RTCErrorCallback failureCallback, Map mediaConstraints]) native "RTCPeerConnection_createAnswer_Callback";
+ RTCDataChannel createDataChannel(String label, Map options) native "RTCPeerConnection_createDataChannel_Callback";
+
void createOffer(RTCSessionDescriptionCallback successCallback, [RTCErrorCallback failureCallback, Map mediaConstraints]) native "RTCPeerConnection_createOffer_Callback";
bool $dom_dispatchEvent(Event event) native "RTCPeerConnection_dispatchEvent_Callback";
@@ -25861,6 +25996,7 @@
// WARNING: Do not edit - generated code.
+
typedef void RTCSessionDescriptionCallback(RTCSessionDescription sdp);
// 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
@@ -25885,6 +26021,7 @@
// WARNING: Do not edit - generated code.
+
typedef void RTCStatsCallback(RTCStatsResponse response);
// 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
@@ -25896,7 +26033,7 @@
abstract class RTCStatsElement {
/** @domName RTCStatsElement.timestamp */
- abstract int get timestamp;
+ Date get timestamp;
/** @domName RTCStatsElement.stat */
String stat(String name);
@@ -25909,7 +26046,7 @@
class _RTCStatsElementImpl extends NativeFieldWrapperClass1 implements RTCStatsElement {
- int get timestamp native "RTCStatsElement_timestamp_Getter";
+ Date get timestamp native "RTCStatsElement_timestamp_Getter";
String stat(String name) native "RTCStatsElement_stat_Callback";
@@ -25924,10 +26061,10 @@
abstract class RTCStatsReport {
/** @domName RTCStatsReport.local */
- List<RTCStatsElement> local();
+ RTCStatsElement get local;
/** @domName RTCStatsReport.remote */
- List<RTCStatsElement> remote();
+ RTCStatsElement get remote;
}
// 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
@@ -25937,9 +26074,9 @@
class _RTCStatsReportImpl extends NativeFieldWrapperClass1 implements RTCStatsReport {
- List<RTCStatsElement> local() native "RTCStatsReport_local_Callback";
+ RTCStatsElement get local native "RTCStatsReport_local_Getter";
- List<RTCStatsElement> remote() native "RTCStatsReport_remote_Callback";
+ RTCStatsElement get remote native "RTCStatsReport_remote_Getter";
}
// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
@@ -26016,22 +26153,22 @@
static const int START_TO_START = 0;
/** @domName Range.collapsed */
- abstract bool get collapsed;
+ bool get collapsed;
/** @domName Range.commonAncestorContainer */
- abstract Node get commonAncestorContainer;
+ Node get commonAncestorContainer;
/** @domName Range.endContainer */
- abstract Node get endContainer;
+ Node get endContainer;
/** @domName Range.endOffset */
- abstract int get endOffset;
+ int get endOffset;
/** @domName Range.startContainer */
- abstract Node get startContainer;
+ Node get startContainer;
/** @domName Range.startOffset */
- abstract int get startOffset;
+ int get startOffset;
/** @domName Range.cloneContents */
DocumentFragment cloneContents();
@@ -26122,13 +26259,13 @@
static const int INVALID_NODE_TYPE_ERR = 2;
/** @domName RangeException.code */
- abstract int get code;
+ int get code;
/** @domName RangeException.message */
- abstract String get message;
+ String get message;
/** @domName RangeException.name */
- abstract String get name;
+ String get name;
/** @domName RangeException.toString */
String toString();
@@ -26234,7 +26371,7 @@
int fftSize;
/** @domName RealtimeAnalyserNode.frequencyBinCount */
- abstract int get frequencyBinCount;
+ int get frequencyBinCount;
/** @domName RealtimeAnalyserNode.maxDecibels */
num maxDecibels;
@@ -26297,16 +26434,16 @@
abstract class Rect {
/** @domName Rect.bottom */
- abstract CSSPrimitiveValue get bottom;
+ CSSPrimitiveValue get bottom;
/** @domName Rect.left */
- abstract CSSPrimitiveValue get left;
+ CSSPrimitiveValue get left;
/** @domName Rect.right */
- abstract CSSPrimitiveValue get right;
+ CSSPrimitiveValue get right;
/** @domName Rect.top */
- abstract CSSPrimitiveValue get top;
+ CSSPrimitiveValue get top;
}
// 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
@@ -26331,7 +26468,8 @@
// WARNING: Do not edit - generated code.
-typedef void RequestAnimationFrameCallback(int time);
+
+typedef void RequestAnimationFrameCallback(num highResTime);
// 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.
@@ -26358,10 +26496,10 @@
static const int VERSION_ERR = 2;
/** @domName SQLError.code */
- abstract int get code;
+ int get code;
/** @domName SQLError.message */
- abstract String get message;
+ String get message;
}
// 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
@@ -26402,10 +26540,10 @@
static const int VERSION_ERR = 2;
/** @domName SQLException.code */
- abstract int get code;
+ int get code;
/** @domName SQLException.message */
- abstract String get message;
+ String get message;
}
// 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
@@ -26430,13 +26568,13 @@
abstract class SQLResultSet {
/** @domName SQLResultSet.insertId */
- abstract int get insertId;
+ int get insertId;
/** @domName SQLResultSet.rows */
- abstract SQLResultSetRowList get rows;
+ SQLResultSetRowList get rows;
/** @domName SQLResultSet.rowsAffected */
- abstract int get rowsAffected;
+ int get rowsAffected;
}
// 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
@@ -26463,7 +26601,7 @@
abstract class SQLResultSetRowList implements List<Map> {
/** @domName SQLResultSetRowList.length */
- abstract int get length;
+ int get length;
/** @domName SQLResultSetRowList.item */
Map item(int index);
@@ -26481,7 +26619,7 @@
Map operator[](int index) native "SQLResultSetRowList_item_Callback";
void operator[]=(int index, Map value) {
- throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+ throw new UnsupportedError("Cannot assign element of immutable List.");
}
// -- start List<Map> mixins.
// Map is the element type.
@@ -26498,15 +26636,15 @@
// From Collection<Map>:
void add(Map value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addLast(Map value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addAll(Collection<Map> collection) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
bool contains(Map element) => _Collections.contains(this, element);
@@ -26522,38 +26660,38 @@
bool some(bool f(Map element)) => _Collections.some(this, f);
- bool isEmpty() => this.length == 0;
+ bool get isEmpty => this.length == 0;
// From List<Map>:
void sort([Comparator<Map> compare = Comparable.compare]) {
- throw const UnsupportedOperationException("Cannot sort immutable List.");
+ throw new UnsupportedError("Cannot sort immutable List.");
}
int indexOf(Map element, [int start = 0]) =>
_Lists.indexOf(this, element, start, this.length);
int lastIndexOf(Map element, [int start]) {
- if (start === null) start = length - 1;
+ if (start == null) start = length - 1;
return _Lists.lastIndexOf(this, element, start);
}
- Map last() => this[length - 1];
+ Map get last => this[length - 1];
Map removeLast() {
- throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+ throw new UnsupportedError("Cannot removeLast on immutable List.");
}
void setRange(int start, int rangeLength, List<Map> from, [int startFrom]) {
- throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+ throw new UnsupportedError("Cannot setRange on immutable List.");
}
void removeRange(int start, int rangeLength) {
- throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+ throw new UnsupportedError("Cannot removeRange on immutable List.");
}
void insertRange(int start, int rangeLength, [Map initialValue]) {
- throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+ throw new UnsupportedError("Cannot insertRange on immutable List.");
}
List<Map> getRange(int start, int rangeLength) =>
@@ -26570,6 +26708,7 @@
// WARNING: Do not edit - generated code.
+
typedef void SQLStatementCallback(SQLTransaction transaction, SQLResultSet resultSet);
// 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
@@ -26577,6 +26716,7 @@
// WARNING: Do not edit - generated code.
+
typedef void SQLStatementErrorCallback(SQLTransaction transaction, SQLError error);
// 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
@@ -26596,6 +26736,7 @@
// WARNING: Do not edit - generated code.
+
typedef void SQLTransactionCallback(SQLTransaction transaction);
// 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
@@ -26603,6 +26744,7 @@
// WARNING: Do not edit - generated code.
+
typedef void SQLTransactionErrorCallback(SQLError error);
// 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
@@ -26633,6 +26775,7 @@
// WARNING: Do not edit - generated code.
+
typedef void SQLTransactionSyncCallback(SQLTransactionSync transaction);
// 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
@@ -26655,7 +26798,7 @@
abstract class SVGAElement implements SVGElement, SVGURIReference, SVGTests, SVGLangSpace, SVGExternalResourcesRequired, SVGStylable, SVGTransformable {
/** @domName SVGAElement.target */
- abstract SVGAnimatedString get target;
+ SVGAnimatedString get target;
}
// 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
@@ -26798,7 +26941,7 @@
static const int SVG_ANGLETYPE_UNSPECIFIED = 1;
/** @domName SVGAngle.unitType */
- abstract int get unitType;
+ int get unitType;
/** @domName SVGAngle.value */
num value;
@@ -26924,10 +27067,10 @@
abstract class SVGAnimatedAngle {
/** @domName SVGAnimatedAngle.animVal */
- abstract SVGAngle get animVal;
+ SVGAngle get animVal;
/** @domName SVGAnimatedAngle.baseVal */
- abstract SVGAngle get baseVal;
+ SVGAngle get baseVal;
}
// 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
@@ -26952,7 +27095,7 @@
abstract class SVGAnimatedBoolean {
/** @domName SVGAnimatedBoolean.animVal */
- abstract bool get animVal;
+ bool get animVal;
/** @domName SVGAnimatedBoolean.baseVal */
bool baseVal;
@@ -26982,7 +27125,7 @@
abstract class SVGAnimatedEnumeration {
/** @domName SVGAnimatedEnumeration.animVal */
- abstract int get animVal;
+ int get animVal;
/** @domName SVGAnimatedEnumeration.baseVal */
int baseVal;
@@ -27012,7 +27155,7 @@
abstract class SVGAnimatedInteger {
/** @domName SVGAnimatedInteger.animVal */
- abstract int get animVal;
+ int get animVal;
/** @domName SVGAnimatedInteger.baseVal */
int baseVal;
@@ -27042,10 +27185,10 @@
abstract class SVGAnimatedLength {
/** @domName SVGAnimatedLength.animVal */
- abstract SVGLength get animVal;
+ SVGLength get animVal;
/** @domName SVGAnimatedLength.baseVal */
- abstract SVGLength get baseVal;
+ SVGLength get baseVal;
}
// 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
@@ -27070,10 +27213,10 @@
abstract class SVGAnimatedLengthList implements List<SVGAnimatedLength> {
/** @domName SVGAnimatedLengthList.animVal */
- abstract SVGLengthList get animVal;
+ SVGLengthList get animVal;
/** @domName SVGAnimatedLengthList.baseVal */
- abstract SVGLengthList get baseVal;
+ SVGLengthList get baseVal;
}
// 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
@@ -27090,7 +27233,7 @@
SVGAnimatedLength operator[](int index) native "SVGAnimatedLengthList_item_Callback";
void operator[]=(int index, SVGAnimatedLength value) {
- throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+ throw new UnsupportedError("Cannot assign element of immutable List.");
}
// -- start List<SVGAnimatedLength> mixins.
// SVGAnimatedLength is the element type.
@@ -27107,15 +27250,15 @@
// From Collection<SVGAnimatedLength>:
void add(SVGAnimatedLength value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addLast(SVGAnimatedLength value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addAll(Collection<SVGAnimatedLength> collection) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
bool contains(SVGAnimatedLength element) => _Collections.contains(this, element);
@@ -27131,38 +27274,38 @@
bool some(bool f(SVGAnimatedLength element)) => _Collections.some(this, f);
- bool isEmpty() => this.length == 0;
+ bool get isEmpty => this.length == 0;
// From List<SVGAnimatedLength>:
void sort([Comparator<SVGAnimatedLength> compare = Comparable.compare]) {
- throw const UnsupportedOperationException("Cannot sort immutable List.");
+ throw new UnsupportedError("Cannot sort immutable List.");
}
int indexOf(SVGAnimatedLength element, [int start = 0]) =>
_Lists.indexOf(this, element, start, this.length);
int lastIndexOf(SVGAnimatedLength element, [int start]) {
- if (start === null) start = length - 1;
+ if (start == null) start = length - 1;
return _Lists.lastIndexOf(this, element, start);
}
- SVGAnimatedLength last() => this[length - 1];
+ SVGAnimatedLength get last => this[length - 1];
SVGAnimatedLength removeLast() {
- throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+ throw new UnsupportedError("Cannot removeLast on immutable List.");
}
void setRange(int start, int rangeLength, List<SVGAnimatedLength> from, [int startFrom]) {
- throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+ throw new UnsupportedError("Cannot setRange on immutable List.");
}
void removeRange(int start, int rangeLength) {
- throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+ throw new UnsupportedError("Cannot removeRange on immutable List.");
}
void insertRange(int start, int rangeLength, [SVGAnimatedLength initialValue]) {
- throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+ throw new UnsupportedError("Cannot insertRange on immutable List.");
}
List<SVGAnimatedLength> getRange(int start, int rangeLength) =>
@@ -27181,7 +27324,7 @@
abstract class SVGAnimatedNumber {
/** @domName SVGAnimatedNumber.animVal */
- abstract num get animVal;
+ num get animVal;
/** @domName SVGAnimatedNumber.baseVal */
num baseVal;
@@ -27211,10 +27354,10 @@
abstract class SVGAnimatedNumberList implements List<SVGAnimatedNumber> {
/** @domName SVGAnimatedNumberList.animVal */
- abstract SVGNumberList get animVal;
+ SVGNumberList get animVal;
/** @domName SVGAnimatedNumberList.baseVal */
- abstract SVGNumberList get baseVal;
+ SVGNumberList get baseVal;
}
// 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
@@ -27231,7 +27374,7 @@
SVGAnimatedNumber operator[](int index) native "SVGAnimatedNumberList_item_Callback";
void operator[]=(int index, SVGAnimatedNumber value) {
- throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+ throw new UnsupportedError("Cannot assign element of immutable List.");
}
// -- start List<SVGAnimatedNumber> mixins.
// SVGAnimatedNumber is the element type.
@@ -27248,15 +27391,15 @@
// From Collection<SVGAnimatedNumber>:
void add(SVGAnimatedNumber value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addLast(SVGAnimatedNumber value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addAll(Collection<SVGAnimatedNumber> collection) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
bool contains(SVGAnimatedNumber element) => _Collections.contains(this, element);
@@ -27272,38 +27415,38 @@
bool some(bool f(SVGAnimatedNumber element)) => _Collections.some(this, f);
- bool isEmpty() => this.length == 0;
+ bool get isEmpty => this.length == 0;
// From List<SVGAnimatedNumber>:
void sort([Comparator<SVGAnimatedNumber> compare = Comparable.compare]) {
- throw const UnsupportedOperationException("Cannot sort immutable List.");
+ throw new UnsupportedError("Cannot sort immutable List.");
}
int indexOf(SVGAnimatedNumber element, [int start = 0]) =>
_Lists.indexOf(this, element, start, this.length);
int lastIndexOf(SVGAnimatedNumber element, [int start]) {
- if (start === null) start = length - 1;
+ if (start == null) start = length - 1;
return _Lists.lastIndexOf(this, element, start);
}
- SVGAnimatedNumber last() => this[length - 1];
+ SVGAnimatedNumber get last => this[length - 1];
SVGAnimatedNumber removeLast() {
- throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+ throw new UnsupportedError("Cannot removeLast on immutable List.");
}
void setRange(int start, int rangeLength, List<SVGAnimatedNumber> from, [int startFrom]) {
- throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+ throw new UnsupportedError("Cannot setRange on immutable List.");
}
void removeRange(int start, int rangeLength) {
- throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+ throw new UnsupportedError("Cannot removeRange on immutable List.");
}
void insertRange(int start, int rangeLength, [SVGAnimatedNumber initialValue]) {
- throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+ throw new UnsupportedError("Cannot insertRange on immutable List.");
}
List<SVGAnimatedNumber> getRange(int start, int rangeLength) =>
@@ -27322,10 +27465,10 @@
abstract class SVGAnimatedPreserveAspectRatio {
/** @domName SVGAnimatedPreserveAspectRatio.animVal */
- abstract SVGPreserveAspectRatio get animVal;
+ SVGPreserveAspectRatio get animVal;
/** @domName SVGAnimatedPreserveAspectRatio.baseVal */
- abstract SVGPreserveAspectRatio get baseVal;
+ SVGPreserveAspectRatio get baseVal;
}
// 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
@@ -27350,10 +27493,10 @@
abstract class SVGAnimatedRect {
/** @domName SVGAnimatedRect.animVal */
- abstract SVGRect get animVal;
+ SVGRect get animVal;
/** @domName SVGAnimatedRect.baseVal */
- abstract SVGRect get baseVal;
+ SVGRect get baseVal;
}
// 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
@@ -27378,7 +27521,7 @@
abstract class SVGAnimatedString {
/** @domName SVGAnimatedString.animVal */
- abstract String get animVal;
+ String get animVal;
/** @domName SVGAnimatedString.baseVal */
String baseVal;
@@ -27408,10 +27551,10 @@
abstract class SVGAnimatedTransformList implements List<SVGAnimateTransformElement> {
/** @domName SVGAnimatedTransformList.animVal */
- abstract SVGTransformList get animVal;
+ SVGTransformList get animVal;
/** @domName SVGAnimatedTransformList.baseVal */
- abstract SVGTransformList get baseVal;
+ SVGTransformList get baseVal;
}
// 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
@@ -27428,7 +27571,7 @@
SVGAnimateTransformElement operator[](int index) native "SVGAnimatedTransformList_item_Callback";
void operator[]=(int index, SVGAnimateTransformElement value) {
- throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+ throw new UnsupportedError("Cannot assign element of immutable List.");
}
// -- start List<SVGAnimateTransformElement> mixins.
// SVGAnimateTransformElement is the element type.
@@ -27445,15 +27588,15 @@
// From Collection<SVGAnimateTransformElement>:
void add(SVGAnimateTransformElement value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addLast(SVGAnimateTransformElement value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addAll(Collection<SVGAnimateTransformElement> collection) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
bool contains(SVGAnimateTransformElement element) => _Collections.contains(this, element);
@@ -27469,38 +27612,38 @@
bool some(bool f(SVGAnimateTransformElement element)) => _Collections.some(this, f);
- bool isEmpty() => this.length == 0;
+ bool get isEmpty => this.length == 0;
// From List<SVGAnimateTransformElement>:
void sort([Comparator<SVGAnimateTransformElement> compare = Comparable.compare]) {
- throw const UnsupportedOperationException("Cannot sort immutable List.");
+ throw new UnsupportedError("Cannot sort immutable List.");
}
int indexOf(SVGAnimateTransformElement element, [int start = 0]) =>
_Lists.indexOf(this, element, start, this.length);
int lastIndexOf(SVGAnimateTransformElement element, [int start]) {
- if (start === null) start = length - 1;
+ if (start == null) start = length - 1;
return _Lists.lastIndexOf(this, element, start);
}
- SVGAnimateTransformElement last() => this[length - 1];
+ SVGAnimateTransformElement get last => this[length - 1];
SVGAnimateTransformElement removeLast() {
- throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+ throw new UnsupportedError("Cannot removeLast on immutable List.");
}
void setRange(int start, int rangeLength, List<SVGAnimateTransformElement> from, [int startFrom]) {
- throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+ throw new UnsupportedError("Cannot setRange on immutable List.");
}
void removeRange(int start, int rangeLength) {
- throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+ throw new UnsupportedError("Cannot removeRange on immutable List.");
}
void insertRange(int start, int rangeLength, [SVGAnimateTransformElement initialValue]) {
- throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+ throw new UnsupportedError("Cannot insertRange on immutable List.");
}
List<SVGAnimateTransformElement> getRange(int start, int rangeLength) =>
@@ -27519,7 +27662,7 @@
abstract class SVGAnimationElement implements SVGElement, SVGTests, SVGExternalResourcesRequired, ElementTimeControl {
/** @domName SVGAnimationElement.targetElement */
- abstract SVGElement get targetElement;
+ SVGElement get targetElement;
/** @domName SVGAnimationElement.getCurrentTime */
num getCurrentTime();
@@ -27575,13 +27718,13 @@
abstract class SVGCircleElement implements SVGElement, SVGTests, SVGLangSpace, SVGExternalResourcesRequired, SVGStylable, SVGTransformable {
/** @domName SVGCircleElement.cx */
- abstract SVGAnimatedLength get cx;
+ SVGAnimatedLength get cx;
/** @domName SVGCircleElement.cy */
- abstract SVGAnimatedLength get cy;
+ SVGAnimatedLength get cy;
/** @domName SVGCircleElement.r */
- abstract SVGAnimatedLength get r;
+ SVGAnimatedLength get r;
}
// 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
@@ -27646,7 +27789,7 @@
abstract class SVGClipPathElement implements SVGElement, SVGTests, SVGLangSpace, SVGExternalResourcesRequired, SVGStylable, SVGTransformable {
/** @domName SVGClipPathElement.clipPathUnits */
- abstract SVGAnimatedEnumeration get clipPathUnits;
+ SVGAnimatedEnumeration get clipPathUnits;
}
// 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
@@ -27715,10 +27858,10 @@
static const int SVG_COLORTYPE_UNKNOWN = 0;
/** @domName SVGColor.colorType */
- abstract int get colorType;
+ int get colorType;
/** @domName SVGColor.rgbColor */
- abstract RGBColor get rgbColor;
+ RGBColor get rgbColor;
/** @domName SVGColor.setColor */
void setColor(int colorType, String rgbColor, String iccColor);
@@ -27770,25 +27913,25 @@
static const int SVG_FECOMPONENTTRANSFER_TYPE_UNKNOWN = 0;
/** @domName SVGComponentTransferFunctionElement.amplitude */
- abstract SVGAnimatedNumber get amplitude;
+ SVGAnimatedNumber get amplitude;
/** @domName SVGComponentTransferFunctionElement.exponent */
- abstract SVGAnimatedNumber get exponent;
+ SVGAnimatedNumber get exponent;
/** @domName SVGComponentTransferFunctionElement.intercept */
- abstract SVGAnimatedNumber get intercept;
+ SVGAnimatedNumber get intercept;
/** @domName SVGComponentTransferFunctionElement.offset */
- abstract SVGAnimatedNumber get offset;
+ SVGAnimatedNumber get offset;
/** @domName SVGComponentTransferFunctionElement.slope */
- abstract SVGAnimatedNumber get slope;
+ SVGAnimatedNumber get slope;
/** @domName SVGComponentTransferFunctionElement.tableValues */
- abstract SVGAnimatedNumberList get tableValues;
+ SVGAnimatedNumberList get tableValues;
/** @domName SVGComponentTransferFunctionElement.type */
- abstract SVGAnimatedEnumeration get type;
+ SVGAnimatedEnumeration get type;
}
// 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
@@ -27823,10 +27966,10 @@
abstract class SVGCursorElement implements SVGElement, SVGURIReference, SVGTests, SVGExternalResourcesRequired {
/** @domName SVGCursorElement.x */
- abstract SVGAnimatedLength get x;
+ SVGAnimatedLength get x;
/** @domName SVGCursorElement.y */
- abstract SVGAnimatedLength get y;
+ SVGAnimatedLength get y;
}
// 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
@@ -27951,7 +28094,7 @@
abstract class SVGDocument implements Document {
/** @domName SVGDocument.rootElement */
- abstract SVGSVGElement get rootElement;
+ SVGSVGElement get rootElement;
/** @domName SVGDocument.createEvent */
Event $dom_createEvent(String eventType);
@@ -27973,6 +28116,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.
+
/// @domName SVGElement
abstract class SVGElement implements Element {
@@ -27988,10 +28132,10 @@
String id;
/** @domName SVGElement.ownerSVGElement */
- abstract SVGSVGElement get ownerSVGElement;
+ SVGSVGElement get ownerSVGElement;
/** @domName SVGElement.viewportElement */
- abstract SVGElement get viewportElement;
+ SVGElement get viewportElement;
/** @domName SVGElement.xmlbase */
String xmlbase;
@@ -28013,7 +28157,7 @@
class _SVGElementImpl extends _ElementImpl implements SVGElement {
CSSClassSet get classes {
- if (_cssClassSet === null) {
+ if (_cssClassSet == null) {
_cssClassSet = new _AttributeClassSet(_ptr);
}
return _cssClassSet;
@@ -28078,28 +28222,28 @@
SVGElementInstanceEvents get on;
/** @domName SVGElementInstance.childNodes */
- abstract List<SVGElementInstance> get childNodes;
+ List<SVGElementInstance> get childNodes;
/** @domName SVGElementInstance.correspondingElement */
- abstract SVGElement get correspondingElement;
+ SVGElement get correspondingElement;
/** @domName SVGElementInstance.correspondingUseElement */
- abstract SVGUseElement get correspondingUseElement;
+ SVGUseElement get correspondingUseElement;
/** @domName SVGElementInstance.firstChild */
- abstract SVGElementInstance get firstChild;
+ SVGElementInstance get firstChild;
/** @domName SVGElementInstance.lastChild */
- abstract SVGElementInstance get lastChild;
+ SVGElementInstance get lastChild;
/** @domName SVGElementInstance.nextSibling */
- abstract SVGElementInstance get nextSibling;
+ SVGElementInstance get nextSibling;
/** @domName SVGElementInstance.parentNode */
- abstract SVGElementInstance get parentNode;
+ SVGElementInstance get parentNode;
/** @domName SVGElementInstance.previousSibling */
- abstract SVGElementInstance get previousSibling;
+ SVGElementInstance get previousSibling;
}
abstract class SVGElementInstanceEvents implements Events {
@@ -28309,7 +28453,7 @@
SVGElementInstance operator[](int index) native "SVGElementInstanceList_item_Callback";
void operator[]=(int index, SVGElementInstance value) {
- throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+ throw new UnsupportedError("Cannot assign element of immutable List.");
}
// -- start List<SVGElementInstance> mixins.
// SVGElementInstance is the element type.
@@ -28326,15 +28470,15 @@
// From Collection<SVGElementInstance>:
void add(SVGElementInstance value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addLast(SVGElementInstance value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addAll(Collection<SVGElementInstance> collection) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
bool contains(SVGElementInstance element) => _Collections.contains(this, element);
@@ -28350,38 +28494,38 @@
bool some(bool f(SVGElementInstance element)) => _Collections.some(this, f);
- bool isEmpty() => this.length == 0;
+ bool get isEmpty => this.length == 0;
// From List<SVGElementInstance>:
void sort([Comparator<SVGElementInstance> compare = Comparable.compare]) {
- throw const UnsupportedOperationException("Cannot sort immutable List.");
+ throw new UnsupportedError("Cannot sort immutable List.");
}
int indexOf(SVGElementInstance element, [int start = 0]) =>
_Lists.indexOf(this, element, start, this.length);
int lastIndexOf(SVGElementInstance element, [int start]) {
- if (start === null) start = length - 1;
+ if (start == null) start = length - 1;
return _Lists.lastIndexOf(this, element, start);
}
- SVGElementInstance last() => this[length - 1];
+ SVGElementInstance get last => this[length - 1];
SVGElementInstance removeLast() {
- throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+ throw new UnsupportedError("Cannot removeLast on immutable List.");
}
void setRange(int start, int rangeLength, List<SVGElementInstance> from, [int startFrom]) {
- throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+ throw new UnsupportedError("Cannot setRange on immutable List.");
}
void removeRange(int start, int rangeLength) {
- throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+ throw new UnsupportedError("Cannot removeRange on immutable List.");
}
void insertRange(int start, int rangeLength, [SVGElementInstance initialValue]) {
- throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+ throw new UnsupportedError("Cannot insertRange on immutable List.");
}
List<SVGElementInstance> getRange(int start, int rangeLength) =>
@@ -28402,16 +28546,16 @@
abstract class SVGEllipseElement implements SVGElement, SVGTests, SVGLangSpace, SVGExternalResourcesRequired, SVGStylable, SVGTransformable {
/** @domName SVGEllipseElement.cx */
- abstract SVGAnimatedLength get cx;
+ SVGAnimatedLength get cx;
/** @domName SVGEllipseElement.cy */
- abstract SVGAnimatedLength get cy;
+ SVGAnimatedLength get cy;
/** @domName SVGEllipseElement.rx */
- abstract SVGAnimatedLength get rx;
+ SVGAnimatedLength get rx;
/** @domName SVGEllipseElement.ry */
- abstract SVGAnimatedLength get ry;
+ SVGAnimatedLength get ry;
}
// 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
@@ -28484,13 +28628,13 @@
static const int SVG_WRONG_TYPE_ERR = 0;
/** @domName SVGException.code */
- abstract int get code;
+ int get code;
/** @domName SVGException.message */
- abstract String get message;
+ String get message;
/** @domName SVGException.name */
- abstract String get name;
+ String get name;
/** @domName SVGException.toString */
String toString();
@@ -28522,7 +28666,7 @@
abstract class SVGExternalResourcesRequired {
/** @domName SVGExternalResourcesRequired.externalResourcesRequired */
- abstract SVGAnimatedBoolean get externalResourcesRequired;
+ SVGAnimatedBoolean get externalResourcesRequired;
}
// 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
@@ -28546,13 +28690,13 @@
static const int SVG_FEBLEND_MODE_UNKNOWN = 0;
/** @domName SVGFEBlendElement.in1 */
- abstract SVGAnimatedString get in1;
+ SVGAnimatedString get in1;
/** @domName SVGFEBlendElement.in2 */
- abstract SVGAnimatedString get in2;
+ SVGAnimatedString get in2;
/** @domName SVGFEBlendElement.mode */
- abstract SVGAnimatedEnumeration get mode;
+ SVGAnimatedEnumeration get mode;
}
// 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
@@ -28605,13 +28749,13 @@
static const int SVG_FECOLORMATRIX_TYPE_UNKNOWN = 0;
/** @domName SVGFEColorMatrixElement.in1 */
- abstract SVGAnimatedString get in1;
+ SVGAnimatedString get in1;
/** @domName SVGFEColorMatrixElement.type */
- abstract SVGAnimatedEnumeration get type;
+ SVGAnimatedEnumeration get type;
/** @domName SVGFEColorMatrixElement.values */
- abstract SVGAnimatedNumberList get values;
+ SVGAnimatedNumberList get values;
}
// 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
@@ -28654,7 +28798,7 @@
abstract class SVGFEComponentTransferElement implements SVGElement, SVGFilterPrimitiveStandardAttributes {
/** @domName SVGFEComponentTransferElement.in1 */
- abstract SVGAnimatedString get in1;
+ SVGAnimatedString get in1;
}
// 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
@@ -28707,25 +28851,25 @@
static const int SVG_FECOMPOSITE_OPERATOR_XOR = 5;
/** @domName SVGFECompositeElement.in1 */
- abstract SVGAnimatedString get in1;
+ SVGAnimatedString get in1;
/** @domName SVGFECompositeElement.in2 */
- abstract SVGAnimatedString get in2;
+ SVGAnimatedString get in2;
/** @domName SVGFECompositeElement.k1 */
- abstract SVGAnimatedNumber get k1;
+ SVGAnimatedNumber get k1;
/** @domName SVGFECompositeElement.k2 */
- abstract SVGAnimatedNumber get k2;
+ SVGAnimatedNumber get k2;
/** @domName SVGFECompositeElement.k3 */
- abstract SVGAnimatedNumber get k3;
+ SVGAnimatedNumber get k3;
/** @domName SVGFECompositeElement.k4 */
- abstract SVGAnimatedNumber get k4;
+ SVGAnimatedNumber get k4;
/** @domName SVGFECompositeElement.operator */
- abstract SVGAnimatedEnumeration get operator;
+ SVGAnimatedEnumeration get operator;
}
// 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
@@ -28784,40 +28928,40 @@
static const int SVG_EDGEMODE_WRAP = 2;
/** @domName SVGFEConvolveMatrixElement.bias */
- abstract SVGAnimatedNumber get bias;
+ SVGAnimatedNumber get bias;
/** @domName SVGFEConvolveMatrixElement.divisor */
- abstract SVGAnimatedNumber get divisor;
+ SVGAnimatedNumber get divisor;
/** @domName SVGFEConvolveMatrixElement.edgeMode */
- abstract SVGAnimatedEnumeration get edgeMode;
+ SVGAnimatedEnumeration get edgeMode;
/** @domName SVGFEConvolveMatrixElement.in1 */
- abstract SVGAnimatedString get in1;
+ SVGAnimatedString get in1;
/** @domName SVGFEConvolveMatrixElement.kernelMatrix */
- abstract SVGAnimatedNumberList get kernelMatrix;
+ SVGAnimatedNumberList get kernelMatrix;
/** @domName SVGFEConvolveMatrixElement.kernelUnitLengthX */
- abstract SVGAnimatedNumber get kernelUnitLengthX;
+ SVGAnimatedNumber get kernelUnitLengthX;
/** @domName SVGFEConvolveMatrixElement.kernelUnitLengthY */
- abstract SVGAnimatedNumber get kernelUnitLengthY;
+ SVGAnimatedNumber get kernelUnitLengthY;
/** @domName SVGFEConvolveMatrixElement.orderX */
- abstract SVGAnimatedInteger get orderX;
+ SVGAnimatedInteger get orderX;
/** @domName SVGFEConvolveMatrixElement.orderY */
- abstract SVGAnimatedInteger get orderY;
+ SVGAnimatedInteger get orderY;
/** @domName SVGFEConvolveMatrixElement.preserveAlpha */
- abstract SVGAnimatedBoolean get preserveAlpha;
+ SVGAnimatedBoolean get preserveAlpha;
/** @domName SVGFEConvolveMatrixElement.targetX */
- abstract SVGAnimatedInteger get targetX;
+ SVGAnimatedInteger get targetX;
/** @domName SVGFEConvolveMatrixElement.targetY */
- abstract SVGAnimatedInteger get targetY;
+ SVGAnimatedInteger get targetY;
}
// 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
@@ -28878,19 +29022,19 @@
abstract class SVGFEDiffuseLightingElement implements SVGElement, SVGFilterPrimitiveStandardAttributes {
/** @domName SVGFEDiffuseLightingElement.diffuseConstant */
- abstract SVGAnimatedNumber get diffuseConstant;
+ SVGAnimatedNumber get diffuseConstant;
/** @domName SVGFEDiffuseLightingElement.in1 */
- abstract SVGAnimatedString get in1;
+ SVGAnimatedString get in1;
/** @domName SVGFEDiffuseLightingElement.kernelUnitLengthX */
- abstract SVGAnimatedNumber get kernelUnitLengthX;
+ SVGAnimatedNumber get kernelUnitLengthX;
/** @domName SVGFEDiffuseLightingElement.kernelUnitLengthY */
- abstract SVGAnimatedNumber get kernelUnitLengthY;
+ SVGAnimatedNumber get kernelUnitLengthY;
/** @domName SVGFEDiffuseLightingElement.surfaceScale */
- abstract SVGAnimatedNumber get surfaceScale;
+ SVGAnimatedNumber get surfaceScale;
}
// 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
@@ -28947,19 +29091,19 @@
static const int SVG_CHANNEL_UNKNOWN = 0;
/** @domName SVGFEDisplacementMapElement.in1 */
- abstract SVGAnimatedString get in1;
+ SVGAnimatedString get in1;
/** @domName SVGFEDisplacementMapElement.in2 */
- abstract SVGAnimatedString get in2;
+ SVGAnimatedString get in2;
/** @domName SVGFEDisplacementMapElement.scale */
- abstract SVGAnimatedNumber get scale;
+ SVGAnimatedNumber get scale;
/** @domName SVGFEDisplacementMapElement.xChannelSelector */
- abstract SVGAnimatedEnumeration get xChannelSelector;
+ SVGAnimatedEnumeration get xChannelSelector;
/** @domName SVGFEDisplacementMapElement.yChannelSelector */
- abstract SVGAnimatedEnumeration get yChannelSelector;
+ SVGAnimatedEnumeration get yChannelSelector;
}
// 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
@@ -29006,10 +29150,10 @@
abstract class SVGFEDistantLightElement implements SVGElement {
/** @domName SVGFEDistantLightElement.azimuth */
- abstract SVGAnimatedNumber get azimuth;
+ SVGAnimatedNumber get azimuth;
/** @domName SVGFEDistantLightElement.elevation */
- abstract SVGAnimatedNumber get elevation;
+ SVGAnimatedNumber get elevation;
}
// 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
@@ -29034,19 +29178,19 @@
abstract class SVGFEDropShadowElement implements SVGElement, SVGFilterPrimitiveStandardAttributes {
/** @domName SVGFEDropShadowElement.dx */
- abstract SVGAnimatedNumber get dx;
+ SVGAnimatedNumber get dx;
/** @domName SVGFEDropShadowElement.dy */
- abstract SVGAnimatedNumber get dy;
+ SVGAnimatedNumber get dy;
/** @domName SVGFEDropShadowElement.in1 */
- abstract SVGAnimatedString get in1;
+ SVGAnimatedString get in1;
/** @domName SVGFEDropShadowElement.stdDeviationX */
- abstract SVGAnimatedNumber get stdDeviationX;
+ SVGAnimatedNumber get stdDeviationX;
/** @domName SVGFEDropShadowElement.stdDeviationY */
- abstract SVGAnimatedNumber get stdDeviationY;
+ SVGAnimatedNumber get stdDeviationY;
/** @domName SVGFEDropShadowElement.setStdDeviation */
void setStdDeviation(num stdDeviationX, num stdDeviationY);
@@ -29204,13 +29348,13 @@
abstract class SVGFEGaussianBlurElement implements SVGElement, SVGFilterPrimitiveStandardAttributes {
/** @domName SVGFEGaussianBlurElement.in1 */
- abstract SVGAnimatedString get in1;
+ SVGAnimatedString get in1;
/** @domName SVGFEGaussianBlurElement.stdDeviationX */
- abstract SVGAnimatedNumber get stdDeviationX;
+ SVGAnimatedNumber get stdDeviationX;
/** @domName SVGFEGaussianBlurElement.stdDeviationY */
- abstract SVGAnimatedNumber get stdDeviationY;
+ SVGAnimatedNumber get stdDeviationY;
/** @domName SVGFEGaussianBlurElement.setStdDeviation */
void setStdDeviation(num stdDeviationX, num stdDeviationY);
@@ -29258,7 +29402,7 @@
abstract class SVGFEImageElement implements SVGElement, SVGURIReference, SVGLangSpace, SVGExternalResourcesRequired, SVGFilterPrimitiveStandardAttributes {
/** @domName SVGFEImageElement.preserveAspectRatio */
- abstract SVGAnimatedPreserveAspectRatio get preserveAspectRatio;
+ SVGAnimatedPreserveAspectRatio get preserveAspectRatio;
}
// 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
@@ -29343,7 +29487,7 @@
abstract class SVGFEMergeNodeElement implements SVGElement {
/** @domName SVGFEMergeNodeElement.in1 */
- abstract SVGAnimatedString get in1;
+ SVGAnimatedString get in1;
}
// 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
@@ -29372,16 +29516,16 @@
static const int SVG_MORPHOLOGY_OPERATOR_UNKNOWN = 0;
/** @domName SVGFEMorphologyElement.in1 */
- abstract SVGAnimatedString get in1;
+ SVGAnimatedString get in1;
/** @domName SVGFEMorphologyElement.operator */
- abstract SVGAnimatedEnumeration get operator;
+ SVGAnimatedEnumeration get operator;
/** @domName SVGFEMorphologyElement.radiusX */
- abstract SVGAnimatedNumber get radiusX;
+ SVGAnimatedNumber get radiusX;
/** @domName SVGFEMorphologyElement.radiusY */
- abstract SVGAnimatedNumber get radiusY;
+ SVGAnimatedNumber get radiusY;
/** @domName SVGFEMorphologyElement.setRadius */
void setRadius(num radiusX, num radiusY);
@@ -29431,13 +29575,13 @@
abstract class SVGFEOffsetElement implements SVGElement, SVGFilterPrimitiveStandardAttributes {
/** @domName SVGFEOffsetElement.dx */
- abstract SVGAnimatedNumber get dx;
+ SVGAnimatedNumber get dx;
/** @domName SVGFEOffsetElement.dy */
- abstract SVGAnimatedNumber get dy;
+ SVGAnimatedNumber get dy;
/** @domName SVGFEOffsetElement.in1 */
- abstract SVGAnimatedString get in1;
+ SVGAnimatedString get in1;
}
// 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
@@ -29480,13 +29624,13 @@
abstract class SVGFEPointLightElement implements SVGElement {
/** @domName SVGFEPointLightElement.x */
- abstract SVGAnimatedNumber get x;
+ SVGAnimatedNumber get x;
/** @domName SVGFEPointLightElement.y */
- abstract SVGAnimatedNumber get y;
+ SVGAnimatedNumber get y;
/** @domName SVGFEPointLightElement.z */
- abstract SVGAnimatedNumber get z;
+ SVGAnimatedNumber get z;
}
// 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
@@ -29513,16 +29657,16 @@
abstract class SVGFESpecularLightingElement implements SVGElement, SVGFilterPrimitiveStandardAttributes {
/** @domName SVGFESpecularLightingElement.in1 */
- abstract SVGAnimatedString get in1;
+ SVGAnimatedString get in1;
/** @domName SVGFESpecularLightingElement.specularConstant */
- abstract SVGAnimatedNumber get specularConstant;
+ SVGAnimatedNumber get specularConstant;
/** @domName SVGFESpecularLightingElement.specularExponent */
- abstract SVGAnimatedNumber get specularExponent;
+ SVGAnimatedNumber get specularExponent;
/** @domName SVGFESpecularLightingElement.surfaceScale */
- abstract SVGAnimatedNumber get surfaceScale;
+ SVGAnimatedNumber get surfaceScale;
}
// 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
@@ -29567,28 +29711,28 @@
abstract class SVGFESpotLightElement implements SVGElement {
/** @domName SVGFESpotLightElement.limitingConeAngle */
- abstract SVGAnimatedNumber get limitingConeAngle;
+ SVGAnimatedNumber get limitingConeAngle;
/** @domName SVGFESpotLightElement.pointsAtX */
- abstract SVGAnimatedNumber get pointsAtX;
+ SVGAnimatedNumber get pointsAtX;
/** @domName SVGFESpotLightElement.pointsAtY */
- abstract SVGAnimatedNumber get pointsAtY;
+ SVGAnimatedNumber get pointsAtY;
/** @domName SVGFESpotLightElement.pointsAtZ */
- abstract SVGAnimatedNumber get pointsAtZ;
+ SVGAnimatedNumber get pointsAtZ;
/** @domName SVGFESpotLightElement.specularExponent */
- abstract SVGAnimatedNumber get specularExponent;
+ SVGAnimatedNumber get specularExponent;
/** @domName SVGFESpotLightElement.x */
- abstract SVGAnimatedNumber get x;
+ SVGAnimatedNumber get x;
/** @domName SVGFESpotLightElement.y */
- abstract SVGAnimatedNumber get y;
+ SVGAnimatedNumber get y;
/** @domName SVGFESpotLightElement.z */
- abstract SVGAnimatedNumber get z;
+ SVGAnimatedNumber get z;
}
// 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
@@ -29625,7 +29769,7 @@
abstract class SVGFETileElement implements SVGElement, SVGFilterPrimitiveStandardAttributes {
/** @domName SVGFETileElement.in1 */
- abstract SVGAnimatedString get in1;
+ SVGAnimatedString get in1;
}
// 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
@@ -29676,22 +29820,22 @@
static const int SVG_TURBULENCE_TYPE_UNKNOWN = 0;
/** @domName SVGFETurbulenceElement.baseFrequencyX */
- abstract SVGAnimatedNumber get baseFrequencyX;
+ SVGAnimatedNumber get baseFrequencyX;
/** @domName SVGFETurbulenceElement.baseFrequencyY */
- abstract SVGAnimatedNumber get baseFrequencyY;
+ SVGAnimatedNumber get baseFrequencyY;
/** @domName SVGFETurbulenceElement.numOctaves */
- abstract SVGAnimatedInteger get numOctaves;
+ SVGAnimatedInteger get numOctaves;
/** @domName SVGFETurbulenceElement.seed */
- abstract SVGAnimatedNumber get seed;
+ SVGAnimatedNumber get seed;
/** @domName SVGFETurbulenceElement.stitchTiles */
- abstract SVGAnimatedEnumeration get stitchTiles;
+ SVGAnimatedEnumeration get stitchTiles;
/** @domName SVGFETurbulenceElement.type */
- abstract SVGAnimatedEnumeration get type;
+ SVGAnimatedEnumeration get type;
}
// 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
@@ -29740,28 +29884,28 @@
abstract class SVGFilterElement implements SVGElement, SVGURIReference, SVGLangSpace, SVGExternalResourcesRequired, SVGStylable {
/** @domName SVGFilterElement.filterResX */
- abstract SVGAnimatedInteger get filterResX;
+ SVGAnimatedInteger get filterResX;
/** @domName SVGFilterElement.filterResY */
- abstract SVGAnimatedInteger get filterResY;
+ SVGAnimatedInteger get filterResY;
/** @domName SVGFilterElement.filterUnits */
- abstract SVGAnimatedEnumeration get filterUnits;
+ SVGAnimatedEnumeration get filterUnits;
/** @domName SVGFilterElement.height */
- abstract SVGAnimatedLength get height;
+ SVGAnimatedLength get height;
/** @domName SVGFilterElement.primitiveUnits */
- abstract SVGAnimatedEnumeration get primitiveUnits;
+ SVGAnimatedEnumeration get primitiveUnits;
/** @domName SVGFilterElement.width */
- abstract SVGAnimatedLength get width;
+ SVGAnimatedLength get width;
/** @domName SVGFilterElement.x */
- abstract SVGAnimatedLength get x;
+ SVGAnimatedLength get x;
/** @domName SVGFilterElement.y */
- abstract SVGAnimatedLength get y;
+ SVGAnimatedLength get y;
/** @domName SVGFilterElement.setFilterRes */
void setFilterRes(int filterResX, int filterResY);
@@ -29821,19 +29965,19 @@
abstract class SVGFilterPrimitiveStandardAttributes implements SVGStylable {
/** @domName SVGFilterPrimitiveStandardAttributes.height */
- abstract SVGAnimatedLength get height;
+ SVGAnimatedLength get height;
/** @domName SVGFilterPrimitiveStandardAttributes.result */
- abstract SVGAnimatedString get result;
+ SVGAnimatedString get result;
/** @domName SVGFilterPrimitiveStandardAttributes.width */
- abstract SVGAnimatedLength get width;
+ SVGAnimatedLength get width;
/** @domName SVGFilterPrimitiveStandardAttributes.x */
- abstract SVGAnimatedLength get x;
+ SVGAnimatedLength get x;
/** @domName SVGFilterPrimitiveStandardAttributes.y */
- abstract SVGAnimatedLength get y;
+ SVGAnimatedLength get y;
}
// 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
@@ -29845,10 +29989,10 @@
abstract class SVGFitToViewBox {
/** @domName SVGFitToViewBox.preserveAspectRatio */
- abstract SVGAnimatedPreserveAspectRatio get preserveAspectRatio;
+ SVGAnimatedPreserveAspectRatio get preserveAspectRatio;
/** @domName SVGFitToViewBox.viewBox */
- abstract SVGAnimatedRect get viewBox;
+ SVGAnimatedRect get viewBox;
}
// 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
@@ -29968,16 +30112,16 @@
abstract class SVGForeignObjectElement implements SVGElement, SVGTests, SVGLangSpace, SVGExternalResourcesRequired, SVGStylable, SVGTransformable {
/** @domName SVGForeignObjectElement.height */
- abstract SVGAnimatedLength get height;
+ SVGAnimatedLength get height;
/** @domName SVGForeignObjectElement.width */
- abstract SVGAnimatedLength get width;
+ SVGAnimatedLength get width;
/** @domName SVGForeignObjectElement.x */
- abstract SVGAnimatedLength get x;
+ SVGAnimatedLength get x;
/** @domName SVGForeignObjectElement.y */
- abstract SVGAnimatedLength get y;
+ SVGAnimatedLength get y;
}
// 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
@@ -30194,13 +30338,13 @@
static const int SVG_SPREADMETHOD_UNKNOWN = 0;
/** @domName SVGGradientElement.gradientTransform */
- abstract SVGAnimatedTransformList get gradientTransform;
+ SVGAnimatedTransformList get gradientTransform;
/** @domName SVGGradientElement.gradientUnits */
- abstract SVGAnimatedEnumeration get gradientUnits;
+ SVGAnimatedEnumeration get gradientUnits;
/** @domName SVGGradientElement.spreadMethod */
- abstract SVGAnimatedEnumeration get spreadMethod;
+ SVGAnimatedEnumeration get spreadMethod;
}
// 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
@@ -30255,19 +30399,19 @@
abstract class SVGImageElement implements SVGElement, SVGURIReference, SVGTests, SVGLangSpace, SVGExternalResourcesRequired, SVGStylable, SVGTransformable {
/** @domName SVGImageElement.height */
- abstract SVGAnimatedLength get height;
+ SVGAnimatedLength get height;
/** @domName SVGImageElement.preserveAspectRatio */
- abstract SVGAnimatedPreserveAspectRatio get preserveAspectRatio;
+ SVGAnimatedPreserveAspectRatio get preserveAspectRatio;
/** @domName SVGImageElement.width */
- abstract SVGAnimatedLength get width;
+ SVGAnimatedLength get width;
/** @domName SVGImageElement.x */
- abstract SVGAnimatedLength get x;
+ SVGAnimatedLength get x;
/** @domName SVGImageElement.y */
- abstract SVGAnimatedLength get y;
+ SVGAnimatedLength get y;
}
// 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
@@ -30375,7 +30519,7 @@
static const int SVG_LENGTHTYPE_UNKNOWN = 0;
/** @domName SVGLength.unitType */
- abstract int get unitType;
+ int get unitType;
/** @domName SVGLength.value */
num value;
@@ -30429,7 +30573,7 @@
abstract class SVGLengthList implements List<SVGLength> {
/** @domName SVGLengthList.numberOfItems */
- abstract int get numberOfItems;
+ int get numberOfItems;
/** @domName SVGLengthList.appendItem */
SVGLength appendItem(SVGLength item);
@@ -30465,7 +30609,7 @@
SVGLength operator[](int index) native "SVGLengthList_item_Callback";
void operator[]=(int index, SVGLength value) {
- throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+ throw new UnsupportedError("Cannot assign element of immutable List.");
}
// -- start List<SVGLength> mixins.
// SVGLength is the element type.
@@ -30482,15 +30626,15 @@
// From Collection<SVGLength>:
void add(SVGLength value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addLast(SVGLength value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addAll(Collection<SVGLength> collection) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
bool contains(SVGLength element) => _Collections.contains(this, element);
@@ -30506,38 +30650,38 @@
bool some(bool f(SVGLength element)) => _Collections.some(this, f);
- bool isEmpty() => this.length == 0;
+ bool get isEmpty => this.length == 0;
// From List<SVGLength>:
void sort([Comparator<SVGLength> compare = Comparable.compare]) {
- throw const UnsupportedOperationException("Cannot sort immutable List.");
+ throw new UnsupportedError("Cannot sort immutable List.");
}
int indexOf(SVGLength element, [int start = 0]) =>
_Lists.indexOf(this, element, start, this.length);
int lastIndexOf(SVGLength element, [int start]) {
- if (start === null) start = length - 1;
+ if (start == null) start = length - 1;
return _Lists.lastIndexOf(this, element, start);
}
- SVGLength last() => this[length - 1];
+ SVGLength get last => this[length - 1];
SVGLength removeLast() {
- throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+ throw new UnsupportedError("Cannot removeLast on immutable List.");
}
void setRange(int start, int rangeLength, List<SVGLength> from, [int startFrom]) {
- throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+ throw new UnsupportedError("Cannot setRange on immutable List.");
}
void removeRange(int start, int rangeLength) {
- throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+ throw new UnsupportedError("Cannot removeRange on immutable List.");
}
void insertRange(int start, int rangeLength, [SVGLength initialValue]) {
- throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+ throw new UnsupportedError("Cannot insertRange on immutable List.");
}
List<SVGLength> getRange(int start, int rangeLength) =>
@@ -30570,16 +30714,16 @@
abstract class SVGLineElement implements SVGElement, SVGTests, SVGLangSpace, SVGExternalResourcesRequired, SVGStylable, SVGTransformable {
/** @domName SVGLineElement.x1 */
- abstract SVGAnimatedLength get x1;
+ SVGAnimatedLength get x1;
/** @domName SVGLineElement.x2 */
- abstract SVGAnimatedLength get x2;
+ SVGAnimatedLength get x2;
/** @domName SVGLineElement.y1 */
- abstract SVGAnimatedLength get y1;
+ SVGAnimatedLength get y1;
/** @domName SVGLineElement.y2 */
- abstract SVGAnimatedLength get y2;
+ SVGAnimatedLength get y2;
}
// 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
@@ -30646,16 +30790,16 @@
abstract class SVGLinearGradientElement implements SVGGradientElement {
/** @domName SVGLinearGradientElement.x1 */
- abstract SVGAnimatedLength get x1;
+ SVGAnimatedLength get x1;
/** @domName SVGLinearGradientElement.x2 */
- abstract SVGAnimatedLength get x2;
+ SVGAnimatedLength get x2;
/** @domName SVGLinearGradientElement.y1 */
- abstract SVGAnimatedLength get y1;
+ SVGAnimatedLength get y1;
/** @domName SVGLinearGradientElement.y2 */
- abstract SVGAnimatedLength get y2;
+ SVGAnimatedLength get y2;
}
// 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
@@ -30684,10 +30828,10 @@
abstract class SVGLocatable {
/** @domName SVGLocatable.farthestViewportElement */
- abstract SVGElement get farthestViewportElement;
+ SVGElement get farthestViewportElement;
/** @domName SVGLocatable.nearestViewportElement */
- abstract SVGElement get nearestViewportElement;
+ SVGElement get nearestViewportElement;
/** @domName SVGLocatable.getBBox */
SVGRect getBBox();
@@ -30745,25 +30889,25 @@
static const int SVG_MARKER_ORIENT_UNKNOWN = 0;
/** @domName SVGMarkerElement.markerHeight */
- abstract SVGAnimatedLength get markerHeight;
+ SVGAnimatedLength get markerHeight;
/** @domName SVGMarkerElement.markerUnits */
- abstract SVGAnimatedEnumeration get markerUnits;
+ SVGAnimatedEnumeration get markerUnits;
/** @domName SVGMarkerElement.markerWidth */
- abstract SVGAnimatedLength get markerWidth;
+ SVGAnimatedLength get markerWidth;
/** @domName SVGMarkerElement.orientAngle */
- abstract SVGAnimatedAngle get orientAngle;
+ SVGAnimatedAngle get orientAngle;
/** @domName SVGMarkerElement.orientType */
- abstract SVGAnimatedEnumeration get orientType;
+ SVGAnimatedEnumeration get orientType;
/** @domName SVGMarkerElement.refX */
- abstract SVGAnimatedLength get refX;
+ SVGAnimatedLength get refX;
/** @domName SVGMarkerElement.refY */
- abstract SVGAnimatedLength get refY;
+ SVGAnimatedLength get refY;
/** @domName SVGMarkerElement.setOrientToAngle */
void setOrientToAngle(SVGAngle angle);
@@ -30828,22 +30972,22 @@
abstract class SVGMaskElement implements SVGElement, SVGTests, SVGLangSpace, SVGExternalResourcesRequired, SVGStylable {
/** @domName SVGMaskElement.height */
- abstract SVGAnimatedLength get height;
+ SVGAnimatedLength get height;
/** @domName SVGMaskElement.maskContentUnits */
- abstract SVGAnimatedEnumeration get maskContentUnits;
+ SVGAnimatedEnumeration get maskContentUnits;
/** @domName SVGMaskElement.maskUnits */
- abstract SVGAnimatedEnumeration get maskUnits;
+ SVGAnimatedEnumeration get maskUnits;
/** @domName SVGMaskElement.width */
- abstract SVGAnimatedLength get width;
+ SVGAnimatedLength get width;
/** @domName SVGMaskElement.x */
- abstract SVGAnimatedLength get x;
+ SVGAnimatedLength get x;
/** @domName SVGMaskElement.y */
- abstract SVGAnimatedLength get y;
+ SVGAnimatedLength get y;
}
// 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
@@ -31076,7 +31220,7 @@
abstract class SVGNumberList implements List<SVGNumber> {
/** @domName SVGNumberList.numberOfItems */
- abstract int get numberOfItems;
+ int get numberOfItems;
/** @domName SVGNumberList.appendItem */
SVGNumber appendItem(SVGNumber item);
@@ -31112,7 +31256,7 @@
SVGNumber operator[](int index) native "SVGNumberList_item_Callback";
void operator[]=(int index, SVGNumber value) {
- throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+ throw new UnsupportedError("Cannot assign element of immutable List.");
}
// -- start List<SVGNumber> mixins.
// SVGNumber is the element type.
@@ -31129,15 +31273,15 @@
// From Collection<SVGNumber>:
void add(SVGNumber value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addLast(SVGNumber value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addAll(Collection<SVGNumber> collection) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
bool contains(SVGNumber element) => _Collections.contains(this, element);
@@ -31153,38 +31297,38 @@
bool some(bool f(SVGNumber element)) => _Collections.some(this, f);
- bool isEmpty() => this.length == 0;
+ bool get isEmpty => this.length == 0;
// From List<SVGNumber>:
void sort([Comparator<SVGNumber> compare = Comparable.compare]) {
- throw const UnsupportedOperationException("Cannot sort immutable List.");
+ throw new UnsupportedError("Cannot sort immutable List.");
}
int indexOf(SVGNumber element, [int start = 0]) =>
_Lists.indexOf(this, element, start, this.length);
int lastIndexOf(SVGNumber element, [int start]) {
- if (start === null) start = length - 1;
+ if (start == null) start = length - 1;
return _Lists.lastIndexOf(this, element, start);
}
- SVGNumber last() => this[length - 1];
+ SVGNumber get last => this[length - 1];
SVGNumber removeLast() {
- throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+ throw new UnsupportedError("Cannot removeLast on immutable List.");
}
void setRange(int start, int rangeLength, List<SVGNumber> from, [int startFrom]) {
- throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+ throw new UnsupportedError("Cannot setRange on immutable List.");
}
void removeRange(int start, int rangeLength) {
- throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+ throw new UnsupportedError("Cannot removeRange on immutable List.");
}
void insertRange(int start, int rangeLength, [SVGNumber initialValue]) {
- throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+ throw new UnsupportedError("Cannot insertRange on immutable List.");
}
List<SVGNumber> getRange(int start, int rangeLength) =>
@@ -31237,10 +31381,10 @@
static const int SVG_PAINTTYPE_URI_RGBCOLOR_ICCCOLOR = 106;
/** @domName SVGPaint.paintType */
- abstract int get paintType;
+ int get paintType;
/** @domName SVGPaint.uri */
- abstract String get uri;
+ String get uri;
/** @domName SVGPaint.setPaint */
void setPaint(int paintType, String uri, String rgbColor, String iccColor);
@@ -31275,19 +31419,19 @@
abstract class SVGPathElement implements SVGElement, SVGTests, SVGLangSpace, SVGExternalResourcesRequired, SVGStylable, SVGTransformable {
/** @domName SVGPathElement.animatedNormalizedPathSegList */
- abstract SVGPathSegList get animatedNormalizedPathSegList;
+ SVGPathSegList get animatedNormalizedPathSegList;
/** @domName SVGPathElement.animatedPathSegList */
- abstract SVGPathSegList get animatedPathSegList;
+ SVGPathSegList get animatedPathSegList;
/** @domName SVGPathElement.normalizedPathSegList */
- abstract SVGPathSegList get normalizedPathSegList;
+ SVGPathSegList get normalizedPathSegList;
/** @domName SVGPathElement.pathLength */
- abstract SVGAnimatedNumber get pathLength;
+ SVGAnimatedNumber get pathLength;
/** @domName SVGPathElement.pathSegList */
- abstract SVGPathSegList get pathSegList;
+ SVGPathSegList get pathSegList;
/** @domName SVGPathElement.createSVGPathSegArcAbs */
SVGPathSegArcAbs createSVGPathSegArcAbs(num x, num y, num r1, num r2, num angle, bool largeArcFlag, bool sweepFlag);
@@ -31506,10 +31650,10 @@
static const int PATHSEG_UNKNOWN = 0;
/** @domName SVGPathSeg.pathSegType */
- abstract int get pathSegType;
+ int get pathSegType;
/** @domName SVGPathSeg.pathSegTypeAsLetter */
- abstract String get pathSegTypeAsLetter;
+ String get pathSegTypeAsLetter;
}
// 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
@@ -32218,7 +32362,7 @@
abstract class SVGPathSegList implements List<SVGPathSeg> {
/** @domName SVGPathSegList.numberOfItems */
- abstract int get numberOfItems;
+ int get numberOfItems;
/** @domName SVGPathSegList.appendItem */
SVGPathSeg appendItem(SVGPathSeg newItem);
@@ -32254,7 +32398,7 @@
SVGPathSeg operator[](int index) native "SVGPathSegList_item_Callback";
void operator[]=(int index, SVGPathSeg value) {
- throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+ throw new UnsupportedError("Cannot assign element of immutable List.");
}
// -- start List<SVGPathSeg> mixins.
// SVGPathSeg is the element type.
@@ -32271,15 +32415,15 @@
// From Collection<SVGPathSeg>:
void add(SVGPathSeg value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addLast(SVGPathSeg value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addAll(Collection<SVGPathSeg> collection) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
bool contains(SVGPathSeg element) => _Collections.contains(this, element);
@@ -32295,38 +32439,38 @@
bool some(bool f(SVGPathSeg element)) => _Collections.some(this, f);
- bool isEmpty() => this.length == 0;
+ bool get isEmpty => this.length == 0;
// From List<SVGPathSeg>:
void sort([Comparator<SVGPathSeg> compare = Comparable.compare]) {
- throw const UnsupportedOperationException("Cannot sort immutable List.");
+ throw new UnsupportedError("Cannot sort immutable List.");
}
int indexOf(SVGPathSeg element, [int start = 0]) =>
_Lists.indexOf(this, element, start, this.length);
int lastIndexOf(SVGPathSeg element, [int start]) {
- if (start === null) start = length - 1;
+ if (start == null) start = length - 1;
return _Lists.lastIndexOf(this, element, start);
}
- SVGPathSeg last() => this[length - 1];
+ SVGPathSeg get last => this[length - 1];
SVGPathSeg removeLast() {
- throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+ throw new UnsupportedError("Cannot removeLast on immutable List.");
}
void setRange(int start, int rangeLength, List<SVGPathSeg> from, [int startFrom]) {
- throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+ throw new UnsupportedError("Cannot setRange on immutable List.");
}
void removeRange(int start, int rangeLength) {
- throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+ throw new UnsupportedError("Cannot removeRange on immutable List.");
}
void insertRange(int start, int rangeLength, [SVGPathSeg initialValue]) {
- throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+ throw new UnsupportedError("Cannot insertRange on immutable List.");
}
List<SVGPathSeg> getRange(int start, int rangeLength) =>
@@ -32423,25 +32567,25 @@
abstract class SVGPatternElement implements SVGElement, SVGURIReference, SVGTests, SVGLangSpace, SVGExternalResourcesRequired, SVGStylable, SVGFitToViewBox {
/** @domName SVGPatternElement.height */
- abstract SVGAnimatedLength get height;
+ SVGAnimatedLength get height;
/** @domName SVGPatternElement.patternContentUnits */
- abstract SVGAnimatedEnumeration get patternContentUnits;
+ SVGAnimatedEnumeration get patternContentUnits;
/** @domName SVGPatternElement.patternTransform */
- abstract SVGAnimatedTransformList get patternTransform;
+ SVGAnimatedTransformList get patternTransform;
/** @domName SVGPatternElement.patternUnits */
- abstract SVGAnimatedEnumeration get patternUnits;
+ SVGAnimatedEnumeration get patternUnits;
/** @domName SVGPatternElement.width */
- abstract SVGAnimatedLength get width;
+ SVGAnimatedLength get width;
/** @domName SVGPatternElement.x */
- abstract SVGAnimatedLength get x;
+ SVGAnimatedLength get x;
/** @domName SVGPatternElement.y */
- abstract SVGAnimatedLength get y;
+ SVGAnimatedLength get y;
}
// 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
@@ -32543,7 +32687,7 @@
abstract class SVGPointList {
/** @domName SVGPointList.numberOfItems */
- abstract int get numberOfItems;
+ int get numberOfItems;
/** @domName SVGPointList.appendItem */
SVGPoint appendItem(SVGPoint item);
@@ -32601,10 +32745,10 @@
abstract class SVGPolygonElement implements SVGElement, SVGTests, SVGLangSpace, SVGExternalResourcesRequired, SVGStylable, SVGTransformable {
/** @domName SVGPolygonElement.animatedPoints */
- abstract SVGPointList get animatedPoints;
+ SVGPointList get animatedPoints;
/** @domName SVGPolygonElement.points */
- abstract SVGPointList get points;
+ SVGPointList get points;
}
// 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
@@ -32667,10 +32811,10 @@
abstract class SVGPolylineElement implements SVGElement, SVGTests, SVGLangSpace, SVGExternalResourcesRequired, SVGStylable, SVGTransformable {
/** @domName SVGPolylineElement.animatedPoints */
- abstract SVGPointList get animatedPoints;
+ SVGPointList get animatedPoints;
/** @domName SVGPolylineElement.points */
- abstract SVGPointList get points;
+ SVGPointList get points;
}
// 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
@@ -32793,19 +32937,22 @@
abstract class SVGRadialGradientElement implements SVGGradientElement {
/** @domName SVGRadialGradientElement.cx */
- abstract SVGAnimatedLength get cx;
+ SVGAnimatedLength get cx;
/** @domName SVGRadialGradientElement.cy */
- abstract SVGAnimatedLength get cy;
+ SVGAnimatedLength get cy;
+
+ /** @domName SVGRadialGradientElement.fr */
+ SVGAnimatedLength get fr;
/** @domName SVGRadialGradientElement.fx */
- abstract SVGAnimatedLength get fx;
+ SVGAnimatedLength get fx;
/** @domName SVGRadialGradientElement.fy */
- abstract SVGAnimatedLength get fy;
+ SVGAnimatedLength get fy;
/** @domName SVGRadialGradientElement.r */
- abstract SVGAnimatedLength get r;
+ SVGAnimatedLength get r;
}
// 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
@@ -32819,6 +32966,8 @@
SVGAnimatedLength get cy native "SVGRadialGradientElement_cy_Getter";
+ SVGAnimatedLength get fr native "SVGRadialGradientElement_fr_Getter";
+
SVGAnimatedLength get fx native "SVGRadialGradientElement_fx_Getter";
SVGAnimatedLength get fy native "SVGRadialGradientElement_fy_Getter";
@@ -32857,22 +33006,22 @@
abstract class SVGRectElement implements SVGElement, SVGTests, SVGLangSpace, SVGExternalResourcesRequired, SVGStylable, SVGTransformable {
/** @domName SVGRectElement.height */
- abstract SVGAnimatedLength get height;
+ SVGAnimatedLength get height;
/** @domName SVGRectElement.rx */
- abstract SVGAnimatedLength get rx;
+ SVGAnimatedLength get rx;
/** @domName SVGRectElement.ry */
- abstract SVGAnimatedLength get ry;
+ SVGAnimatedLength get ry;
/** @domName SVGRectElement.width */
- abstract SVGAnimatedLength get width;
+ SVGAnimatedLength get width;
/** @domName SVGRectElement.x */
- abstract SVGAnimatedLength get x;
+ SVGAnimatedLength get x;
/** @domName SVGRectElement.y */
- abstract SVGAnimatedLength get y;
+ SVGAnimatedLength get y;
}
// 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
@@ -32992,6 +33141,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.
+
/// @domName SVGSVGElement
abstract class SVGSVGElement extends SVGElement implements SVGTests, SVGLangSpace, SVGExternalResourcesRequired, SVGStylable, SVGLocatable, SVGFitToViewBox, SVGZoomAndPan {
factory SVGSVGElement() => _SVGSVGElementFactoryProvider.createSVGSVGElement();
@@ -33007,40 +33157,40 @@
num currentScale;
/** @domName SVGSVGElement.currentTranslate */
- abstract SVGPoint get currentTranslate;
+ SVGPoint get currentTranslate;
/** @domName SVGSVGElement.currentView */
- abstract SVGViewSpec get currentView;
+ SVGViewSpec get currentView;
/** @domName SVGSVGElement.height */
- abstract SVGAnimatedLength get height;
+ SVGAnimatedLength get height;
/** @domName SVGSVGElement.pixelUnitToMillimeterX */
- abstract num get pixelUnitToMillimeterX;
+ num get pixelUnitToMillimeterX;
/** @domName SVGSVGElement.pixelUnitToMillimeterY */
- abstract num get pixelUnitToMillimeterY;
+ num get pixelUnitToMillimeterY;
/** @domName SVGSVGElement.screenPixelToMillimeterX */
- abstract num get screenPixelToMillimeterX;
+ num get screenPixelToMillimeterX;
/** @domName SVGSVGElement.screenPixelToMillimeterY */
- abstract num get screenPixelToMillimeterY;
+ num get screenPixelToMillimeterY;
/** @domName SVGSVGElement.useCurrentView */
- abstract bool get useCurrentView;
+ bool get useCurrentView;
/** @domName SVGSVGElement.viewport */
- abstract SVGRect get viewport;
+ SVGRect get viewport;
/** @domName SVGSVGElement.width */
- abstract SVGAnimatedLength get width;
+ SVGAnimatedLength get width;
/** @domName SVGSVGElement.x */
- abstract SVGAnimatedLength get x;
+ SVGAnimatedLength get x;
/** @domName SVGSVGElement.y */
- abstract SVGAnimatedLength get y;
+ SVGAnimatedLength get y;
/** @domName SVGSVGElement.animationsPaused */
bool animationsPaused();
@@ -33304,7 +33454,7 @@
abstract class SVGStopElement implements SVGElement, SVGStylable {
/** @domName SVGStopElement.offset */
- abstract SVGAnimatedNumber get offset;
+ SVGAnimatedNumber get offset;
}
// 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
@@ -33333,7 +33483,7 @@
abstract class SVGStringList implements List<String> {
/** @domName SVGStringList.numberOfItems */
- abstract int get numberOfItems;
+ int get numberOfItems;
/** @domName SVGStringList.appendItem */
String appendItem(String item);
@@ -33369,7 +33519,7 @@
String operator[](int index) native "SVGStringList_item_Callback";
void operator[]=(int index, String value) {
- throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+ throw new UnsupportedError("Cannot assign element of immutable List.");
}
// -- start List<String> mixins.
// String is the element type.
@@ -33386,15 +33536,15 @@
// From Collection<String>:
void add(String value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addLast(String value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addAll(Collection<String> collection) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
bool contains(String element) => _Collections.contains(this, element);
@@ -33410,38 +33560,38 @@
bool some(bool f(String element)) => _Collections.some(this, f);
- bool isEmpty() => this.length == 0;
+ bool get isEmpty => this.length == 0;
// From List<String>:
void sort([Comparator<String> compare = Comparable.compare]) {
- throw const UnsupportedOperationException("Cannot sort immutable List.");
+ throw new UnsupportedError("Cannot sort immutable List.");
}
int indexOf(String element, [int start = 0]) =>
_Lists.indexOf(this, element, start, this.length);
int lastIndexOf(String element, [int start]) {
- if (start === null) start = length - 1;
+ if (start == null) start = length - 1;
return _Lists.lastIndexOf(this, element, start);
}
- String last() => this[length - 1];
+ String get last => this[length - 1];
String removeLast() {
- throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+ throw new UnsupportedError("Cannot removeLast on immutable List.");
}
void setRange(int start, int rangeLength, List<String> from, [int startFrom]) {
- throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+ throw new UnsupportedError("Cannot setRange on immutable List.");
}
void removeRange(int start, int rangeLength) {
- throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+ throw new UnsupportedError("Cannot removeRange on immutable List.");
}
void insertRange(int start, int rangeLength, [String initialValue]) {
- throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+ throw new UnsupportedError("Cannot insertRange on immutable List.");
}
List<String> getRange(int start, int rangeLength) =>
@@ -33474,10 +33624,10 @@
abstract class SVGStylable {
/** @domName SVGStylable.className */
- abstract SVGAnimatedString get $dom_svgClassName;
+ SVGAnimatedString get $dom_svgClassName;
/** @domName SVGStylable.style */
- abstract CSSStyleDeclaration get style;
+ CSSStyleDeclaration get style;
/** @domName SVGStylable.getPresentationAttribute */
CSSValue getPresentationAttribute(String name);
@@ -33678,13 +33828,13 @@
abstract class SVGTests {
/** @domName SVGTests.requiredExtensions */
- abstract SVGStringList get requiredExtensions;
+ SVGStringList get requiredExtensions;
/** @domName SVGTests.requiredFeatures */
- abstract SVGStringList get requiredFeatures;
+ SVGStringList get requiredFeatures;
/** @domName SVGTests.systemLanguage */
- abstract SVGStringList get systemLanguage;
+ SVGStringList get systemLanguage;
/** @domName SVGTests.hasExtension */
bool hasExtension(String extension);
@@ -33705,10 +33855,10 @@
static const int LENGTHADJUST_UNKNOWN = 0;
/** @domName SVGTextContentElement.lengthAdjust */
- abstract SVGAnimatedEnumeration get lengthAdjust;
+ SVGAnimatedEnumeration get lengthAdjust;
/** @domName SVGTextContentElement.textLength */
- abstract SVGAnimatedLength get textLength;
+ SVGAnimatedLength get textLength;
/** @domName SVGTextContentElement.getCharNumAtPosition */
int getCharNumAtPosition(SVGPoint point);
@@ -33846,13 +33996,13 @@
static const int TEXTPATH_SPACINGTYPE_UNKNOWN = 0;
/** @domName SVGTextPathElement.method */
- abstract SVGAnimatedEnumeration get method;
+ SVGAnimatedEnumeration get method;
/** @domName SVGTextPathElement.spacing */
- abstract SVGAnimatedEnumeration get spacing;
+ SVGAnimatedEnumeration get spacing;
/** @domName SVGTextPathElement.startOffset */
- abstract SVGAnimatedLength get startOffset;
+ SVGAnimatedLength get startOffset;
}
// 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
@@ -33881,19 +34031,19 @@
abstract class SVGTextPositioningElement implements SVGTextContentElement {
/** @domName SVGTextPositioningElement.dx */
- abstract SVGAnimatedLengthList get dx;
+ SVGAnimatedLengthList get dx;
/** @domName SVGTextPositioningElement.dy */
- abstract SVGAnimatedLengthList get dy;
+ SVGAnimatedLengthList get dy;
/** @domName SVGTextPositioningElement.rotate */
- abstract SVGAnimatedNumberList get rotate;
+ SVGAnimatedNumberList get rotate;
/** @domName SVGTextPositioningElement.x */
- abstract SVGAnimatedLengthList get x;
+ SVGAnimatedLengthList get x;
/** @domName SVGTextPositioningElement.y */
- abstract SVGAnimatedLengthList get y;
+ SVGAnimatedLengthList get y;
}
// 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
@@ -33970,13 +34120,13 @@
static const int SVG_TRANSFORM_UNKNOWN = 0;
/** @domName SVGTransform.angle */
- abstract num get angle;
+ num get angle;
/** @domName SVGTransform.matrix */
- abstract SVGMatrix get matrix;
+ SVGMatrix get matrix;
/** @domName SVGTransform.type */
- abstract int get type;
+ int get type;
/** @domName SVGTransform.setMatrix */
void setMatrix(SVGMatrix matrix);
@@ -34033,7 +34183,7 @@
abstract class SVGTransformList implements List<SVGTransform> {
/** @domName SVGTransformList.numberOfItems */
- abstract int get numberOfItems;
+ int get numberOfItems;
/** @domName SVGTransformList.appendItem */
SVGTransform appendItem(SVGTransform item);
@@ -34075,7 +34225,7 @@
SVGTransform operator[](int index) native "SVGTransformList_item_Callback";
void operator[]=(int index, SVGTransform value) {
- throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+ throw new UnsupportedError("Cannot assign element of immutable List.");
}
// -- start List<SVGTransform> mixins.
// SVGTransform is the element type.
@@ -34092,15 +34242,15 @@
// From Collection<SVGTransform>:
void add(SVGTransform value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addLast(SVGTransform value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addAll(Collection<SVGTransform> collection) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
bool contains(SVGTransform element) => _Collections.contains(this, element);
@@ -34116,38 +34266,38 @@
bool some(bool f(SVGTransform element)) => _Collections.some(this, f);
- bool isEmpty() => this.length == 0;
+ bool get isEmpty => this.length == 0;
// From List<SVGTransform>:
void sort([Comparator<SVGTransform> compare = Comparable.compare]) {
- throw const UnsupportedOperationException("Cannot sort immutable List.");
+ throw new UnsupportedError("Cannot sort immutable List.");
}
int indexOf(SVGTransform element, [int start = 0]) =>
_Lists.indexOf(this, element, start, this.length);
int lastIndexOf(SVGTransform element, [int start]) {
- if (start === null) start = length - 1;
+ if (start == null) start = length - 1;
return _Lists.lastIndexOf(this, element, start);
}
- SVGTransform last() => this[length - 1];
+ SVGTransform get last => this[length - 1];
SVGTransform removeLast() {
- throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+ throw new UnsupportedError("Cannot removeLast on immutable List.");
}
void setRange(int start, int rangeLength, List<SVGTransform> from, [int startFrom]) {
- throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+ throw new UnsupportedError("Cannot setRange on immutable List.");
}
void removeRange(int start, int rangeLength) {
- throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+ throw new UnsupportedError("Cannot removeRange on immutable List.");
}
void insertRange(int start, int rangeLength, [SVGTransform initialValue]) {
- throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+ throw new UnsupportedError("Cannot insertRange on immutable List.");
}
List<SVGTransform> getRange(int start, int rangeLength) =>
@@ -34184,7 +34334,7 @@
abstract class SVGTransformable implements SVGLocatable {
/** @domName SVGTransformable.transform */
- abstract SVGAnimatedTransformList get transform;
+ SVGAnimatedTransformList get transform;
}
// 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
@@ -34196,7 +34346,7 @@
abstract class SVGURIReference {
/** @domName SVGURIReference.href */
- abstract SVGAnimatedString get href;
+ SVGAnimatedString get href;
}
// 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
@@ -34232,22 +34382,22 @@
abstract class SVGUseElement implements SVGElement, SVGURIReference, SVGTests, SVGLangSpace, SVGExternalResourcesRequired, SVGStylable, SVGTransformable {
/** @domName SVGUseElement.animatedInstanceRoot */
- abstract SVGElementInstance get animatedInstanceRoot;
+ SVGElementInstance get animatedInstanceRoot;
/** @domName SVGUseElement.height */
- abstract SVGAnimatedLength get height;
+ SVGAnimatedLength get height;
/** @domName SVGUseElement.instanceRoot */
- abstract SVGElementInstance get instanceRoot;
+ SVGElementInstance get instanceRoot;
/** @domName SVGUseElement.width */
- abstract SVGAnimatedLength get width;
+ SVGAnimatedLength get width;
/** @domName SVGUseElement.x */
- abstract SVGAnimatedLength get x;
+ SVGAnimatedLength get x;
/** @domName SVGUseElement.y */
- abstract SVGAnimatedLength get y;
+ SVGAnimatedLength get y;
}
// 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
@@ -34338,7 +34488,7 @@
abstract class SVGViewElement implements SVGElement, SVGExternalResourcesRequired, SVGFitToViewBox, SVGZoomAndPan {
/** @domName SVGViewElement.viewTarget */
- abstract SVGStringList get viewTarget;
+ SVGStringList get viewTarget;
}
// 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
@@ -34371,28 +34521,28 @@
abstract class SVGViewSpec {
/** @domName SVGViewSpec.preserveAspectRatio */
- abstract SVGAnimatedPreserveAspectRatio get preserveAspectRatio;
+ SVGAnimatedPreserveAspectRatio get preserveAspectRatio;
/** @domName SVGViewSpec.preserveAspectRatioString */
- abstract String get preserveAspectRatioString;
+ String get preserveAspectRatioString;
/** @domName SVGViewSpec.transform */
- abstract SVGTransformList get transform;
+ SVGTransformList get transform;
/** @domName SVGViewSpec.transformString */
- abstract String get transformString;
+ String get transformString;
/** @domName SVGViewSpec.viewBox */
- abstract SVGAnimatedRect get viewBox;
+ SVGAnimatedRect get viewBox;
/** @domName SVGViewSpec.viewBoxString */
- abstract String get viewBoxString;
+ String get viewBoxString;
/** @domName SVGViewSpec.viewTarget */
- abstract SVGElement get viewTarget;
+ SVGElement get viewTarget;
/** @domName SVGViewSpec.viewTargetString */
- abstract String get viewTargetString;
+ String get viewTargetString;
/** @domName SVGViewSpec.zoomAndPan */
int zoomAndPan;
@@ -34454,19 +34604,19 @@
abstract class SVGZoomEvent implements UIEvent {
/** @domName SVGZoomEvent.newScale */
- abstract num get newScale;
+ num get newScale;
/** @domName SVGZoomEvent.newTranslate */
- abstract SVGPoint get newTranslate;
+ SVGPoint get newTranslate;
/** @domName SVGZoomEvent.previousScale */
- abstract num get previousScale;
+ num get previousScale;
/** @domName SVGZoomEvent.previousTranslate */
- abstract SVGPoint get previousTranslate;
+ SVGPoint get previousTranslate;
/** @domName SVGZoomEvent.zoomRectScreen */
- abstract SVGRect get zoomRectScreen;
+ SVGRect get zoomRectScreen;
}
// 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
@@ -34497,28 +34647,28 @@
abstract class Screen {
/** @domName Screen.availHeight */
- abstract int get availHeight;
+ int get availHeight;
/** @domName Screen.availLeft */
- abstract int get availLeft;
+ int get availLeft;
/** @domName Screen.availTop */
- abstract int get availTop;
+ int get availTop;
/** @domName Screen.availWidth */
- abstract int get availWidth;
+ int get availWidth;
/** @domName Screen.colorDepth */
- abstract int get colorDepth;
+ int get colorDepth;
/** @domName Screen.height */
- abstract int get height;
+ int get height;
/** @domName Screen.pixelDepth */
- abstract int get pixelDepth;
+ int get pixelDepth;
/** @domName Screen.width */
- abstract int get width;
+ int get width;
}
// 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
@@ -34631,13 +34781,13 @@
abstract class ScriptProfile {
/** @domName ScriptProfile.head */
- abstract ScriptProfileNode get head;
+ ScriptProfileNode get head;
/** @domName ScriptProfile.title */
- abstract String get title;
+ String get title;
/** @domName ScriptProfile.uid */
- abstract int get uid;
+ int get uid;
}
// 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
@@ -34664,28 +34814,28 @@
abstract class ScriptProfileNode {
/** @domName ScriptProfileNode.callUID */
- abstract int get callUID;
+ int get callUID;
/** @domName ScriptProfileNode.functionName */
- abstract String get functionName;
+ String get functionName;
/** @domName ScriptProfileNode.lineNumber */
- abstract int get lineNumber;
+ int get lineNumber;
/** @domName ScriptProfileNode.numberOfCalls */
- abstract int get numberOfCalls;
+ int get numberOfCalls;
/** @domName ScriptProfileNode.selfTime */
- abstract num get selfTime;
+ num get selfTime;
/** @domName ScriptProfileNode.totalTime */
- abstract num get totalTime;
+ num get totalTime;
/** @domName ScriptProfileNode.url */
- abstract String get url;
+ String get url;
/** @domName ScriptProfileNode.visible */
- abstract bool get visible;
+ bool get visible;
/** @domName ScriptProfileNode.children */
List<ScriptProfileNode> children();
@@ -34735,10 +34885,10 @@
bool disabled;
/** @domName HTMLSelectElement.form */
- abstract FormElement get form;
+ FormElement get form;
/** @domName HTMLSelectElement.labels */
- abstract List<Node> get labels;
+ List<Node> get labels;
/** @domName HTMLSelectElement.length */
int length;
@@ -34750,7 +34900,7 @@
String name;
/** @domName HTMLSelectElement.options */
- abstract HTMLOptionsCollection get options;
+ HTMLOptionsCollection get options;
/** @domName HTMLSelectElement.required */
bool required;
@@ -34759,25 +34909,25 @@
int selectedIndex;
/** @domName HTMLSelectElement.selectedOptions */
- abstract HTMLCollection get selectedOptions;
+ HTMLCollection get selectedOptions;
/** @domName HTMLSelectElement.size */
int size;
/** @domName HTMLSelectElement.type */
- abstract String get type;
+ String get type;
/** @domName HTMLSelectElement.validationMessage */
- abstract String get validationMessage;
+ String get validationMessage;
/** @domName HTMLSelectElement.validity */
- abstract ValidityState get validity;
+ ValidityState get validity;
/** @domName HTMLSelectElement.value */
String value;
/** @domName HTMLSelectElement.willValidate */
- abstract bool get willValidate;
+ bool get willValidate;
/** @domName HTMLSelectElement.checkValidity */
bool checkValidity();
@@ -34898,6 +35048,9 @@
/// @domName HTMLShadowElement
abstract class ShadowElement implements Element {
+
+ /** @domName HTMLShadowElement.resetStyleInheritance */
+ bool resetStyleInheritance;
}
// 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
@@ -34907,6 +35060,10 @@
class _ShadowElementImpl extends _ElementImpl_Merged implements ShadowElement {
+ bool get resetStyleInheritance native "HTMLShadowElement_resetStyleInheritance_Getter";
+
+ void set resetStyleInheritance(bool value) native "HTMLShadowElement_resetStyleInheritance_Setter";
+
}
// 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
@@ -34914,13 +35071,14 @@
// WARNING: Do not edit - generated code.
+
/// @domName ShadowRoot
abstract class ShadowRoot implements DocumentFragment {
factory ShadowRoot(Element host) => _ShadowRootFactoryProvider.createShadowRoot(host);
/** @domName ShadowRoot.activeElement */
- abstract Element get activeElement;
+ Element get activeElement;
/** @domName ShadowRoot.applyAuthorStyles */
bool applyAuthorStyles;
@@ -34999,7 +35157,7 @@
}
/** @domName SharedWorker.port */
- abstract MessagePort get port;
+ MessagePort get port;
}
// 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
@@ -35016,7 +35174,7 @@
SharedWorkerContextEvents get on;
/** @domName SharedWorkerContext.name */
- abstract String get name;
+ String get name;
}
abstract class SharedWorkerContextEvents implements WorkerContextEvents {
@@ -35064,7 +35222,7 @@
abstract class SourceBuffer {
/** @domName SourceBuffer.buffered */
- abstract TimeRanges get buffered;
+ TimeRanges get buffered;
/** @domName SourceBuffer.timestampOffset */
num timestampOffset;
@@ -35101,10 +35259,10 @@
// WARNING: Do not edit - generated code.
/// @domName SourceBufferList
-abstract class SourceBufferList implements List<SourceBuffer>, EventTarget {
+abstract class SourceBufferList implements EventTarget, List<SourceBuffer> {
/** @domName SourceBufferList.length */
- abstract int get length;
+ int get length;
/** @domName SourceBufferList.addEventListener */
void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
@@ -35124,14 +35282,14 @@
// WARNING: Do not edit - generated code.
-class _SourceBufferListImpl extends NativeFieldWrapperClass1 implements SourceBufferList {
+class _SourceBufferListImpl extends _EventTargetImpl implements SourceBufferList {
int get length native "SourceBufferList_length_Getter";
SourceBuffer operator[](int index) native "SourceBufferList_item_Callback";
void operator[]=(int index, SourceBuffer value) {
- throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+ throw new UnsupportedError("Cannot assign element of immutable List.");
}
// -- start List<SourceBuffer> mixins.
// SourceBuffer is the element type.
@@ -35148,15 +35306,15 @@
// From Collection<SourceBuffer>:
void add(SourceBuffer value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addLast(SourceBuffer value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addAll(Collection<SourceBuffer> collection) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
bool contains(SourceBuffer element) => _Collections.contains(this, element);
@@ -35172,38 +35330,38 @@
bool some(bool f(SourceBuffer element)) => _Collections.some(this, f);
- bool isEmpty() => this.length == 0;
+ bool get isEmpty => this.length == 0;
// From List<SourceBuffer>:
void sort([Comparator<SourceBuffer> compare = Comparable.compare]) {
- throw const UnsupportedOperationException("Cannot sort immutable List.");
+ throw new UnsupportedError("Cannot sort immutable List.");
}
int indexOf(SourceBuffer element, [int start = 0]) =>
_Lists.indexOf(this, element, start, this.length);
int lastIndexOf(SourceBuffer element, [int start]) {
- if (start === null) start = length - 1;
+ if (start == null) start = length - 1;
return _Lists.lastIndexOf(this, element, start);
}
- SourceBuffer last() => this[length - 1];
+ SourceBuffer get last => this[length - 1];
SourceBuffer removeLast() {
- throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+ throw new UnsupportedError("Cannot removeLast on immutable List.");
}
void setRange(int start, int rangeLength, List<SourceBuffer> from, [int startFrom]) {
- throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+ throw new UnsupportedError("Cannot setRange on immutable List.");
}
void removeRange(int start, int rangeLength) {
- throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+ throw new UnsupportedError("Cannot removeRange on immutable List.");
}
void insertRange(int start, int rangeLength, [SourceBuffer initialValue]) {
- throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+ throw new UnsupportedError("Cannot insertRange on immutable List.");
}
List<SourceBuffer> getRange(int start, int rangeLength) =>
@@ -35327,7 +35485,7 @@
factory SpeechGrammarList() => _SpeechGrammarListFactoryProvider.createSpeechGrammarList();
/** @domName SpeechGrammarList.length */
- abstract int get length;
+ int get length;
/** @domName SpeechGrammarList.addFromString */
void addFromString(String string, [num weight]);
@@ -35351,7 +35509,7 @@
SpeechGrammar operator[](int index) native "SpeechGrammarList_item_Callback";
void operator[]=(int index, SpeechGrammar value) {
- throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+ throw new UnsupportedError("Cannot assign element of immutable List.");
}
// -- start List<SpeechGrammar> mixins.
// SpeechGrammar is the element type.
@@ -35368,15 +35526,15 @@
// From Collection<SpeechGrammar>:
void add(SpeechGrammar value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addLast(SpeechGrammar value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addAll(Collection<SpeechGrammar> collection) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
bool contains(SpeechGrammar element) => _Collections.contains(this, element);
@@ -35392,38 +35550,38 @@
bool some(bool f(SpeechGrammar element)) => _Collections.some(this, f);
- bool isEmpty() => this.length == 0;
+ bool get isEmpty => this.length == 0;
// From List<SpeechGrammar>:
void sort([Comparator<SpeechGrammar> compare = Comparable.compare]) {
- throw const UnsupportedOperationException("Cannot sort immutable List.");
+ throw new UnsupportedError("Cannot sort immutable List.");
}
int indexOf(SpeechGrammar element, [int start = 0]) =>
_Lists.indexOf(this, element, start, this.length);
int lastIndexOf(SpeechGrammar element, [int start]) {
- if (start === null) start = length - 1;
+ if (start == null) start = length - 1;
return _Lists.lastIndexOf(this, element, start);
}
- SpeechGrammar last() => this[length - 1];
+ SpeechGrammar get last => this[length - 1];
SpeechGrammar removeLast() {
- throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+ throw new UnsupportedError("Cannot removeLast on immutable List.");
}
void setRange(int start, int rangeLength, List<SpeechGrammar> from, [int startFrom]) {
- throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+ throw new UnsupportedError("Cannot setRange on immutable List.");
}
void removeRange(int start, int rangeLength) {
- throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+ throw new UnsupportedError("Cannot removeRange on immutable List.");
}
void insertRange(int start, int rangeLength, [SpeechGrammar initialValue]) {
- throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+ throw new UnsupportedError("Cannot insertRange on immutable List.");
}
List<SpeechGrammar> getRange(int start, int rangeLength) =>
@@ -35468,7 +35626,7 @@
abstract class SpeechInputEvent implements Event {
/** @domName SpeechInputEvent.results */
- abstract List<SpeechInputResult> get results;
+ List<SpeechInputResult> get results;
}
// 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
@@ -35491,10 +35649,10 @@
abstract class SpeechInputResult {
/** @domName SpeechInputResult.confidence */
- abstract num get confidence;
+ num get confidence;
/** @domName SpeechInputResult.utterance */
- abstract String get utterance;
+ String get utterance;
}
// 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
@@ -35522,7 +35680,7 @@
SpeechInputResult operator[](int index) native "SpeechInputResultList_item_Callback";
void operator[]=(int index, SpeechInputResult value) {
- throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+ throw new UnsupportedError("Cannot assign element of immutable List.");
}
// -- start List<SpeechInputResult> mixins.
// SpeechInputResult is the element type.
@@ -35539,15 +35697,15 @@
// From Collection<SpeechInputResult>:
void add(SpeechInputResult value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addLast(SpeechInputResult value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addAll(Collection<SpeechInputResult> collection) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
bool contains(SpeechInputResult element) => _Collections.contains(this, element);
@@ -35563,38 +35721,38 @@
bool some(bool f(SpeechInputResult element)) => _Collections.some(this, f);
- bool isEmpty() => this.length == 0;
+ bool get isEmpty => this.length == 0;
// From List<SpeechInputResult>:
void sort([Comparator<SpeechInputResult> compare = Comparable.compare]) {
- throw const UnsupportedOperationException("Cannot sort immutable List.");
+ throw new UnsupportedError("Cannot sort immutable List.");
}
int indexOf(SpeechInputResult element, [int start = 0]) =>
_Lists.indexOf(this, element, start, this.length);
int lastIndexOf(SpeechInputResult element, [int start]) {
- if (start === null) start = length - 1;
+ if (start == null) start = length - 1;
return _Lists.lastIndexOf(this, element, start);
}
- SpeechInputResult last() => this[length - 1];
+ SpeechInputResult get last => this[length - 1];
SpeechInputResult removeLast() {
- throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+ throw new UnsupportedError("Cannot removeLast on immutable List.");
}
void setRange(int start, int rangeLength, List<SpeechInputResult> from, [int startFrom]) {
- throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+ throw new UnsupportedError("Cannot setRange on immutable List.");
}
void removeRange(int start, int rangeLength) {
- throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+ throw new UnsupportedError("Cannot removeRange on immutable List.");
}
void insertRange(int start, int rangeLength, [SpeechInputResult initialValue]) {
- throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+ throw new UnsupportedError("Cannot insertRange on immutable List.");
}
List<SpeechInputResult> getRange(int start, int rangeLength) =>
@@ -35627,6 +35785,9 @@
/** @domName SpeechRecognition.grammars */
SpeechGrammarList grammars;
+ /** @domName SpeechRecognition.interimResults */
+ bool interimResults;
+
/** @domName SpeechRecognition.lang */
String lang;
@@ -35666,8 +35827,6 @@
EventListenerList get result;
- EventListenerList get resultDeleted;
-
EventListenerList get soundEnd;
EventListenerList get soundStart;
@@ -35688,10 +35847,10 @@
abstract class SpeechRecognitionAlternative {
/** @domName SpeechRecognitionAlternative.confidence */
- abstract num get confidence;
+ num get confidence;
/** @domName SpeechRecognitionAlternative.transcript */
- abstract String get transcript;
+ String get transcript;
}
// 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
@@ -35734,10 +35893,10 @@
static const int SERVICE_NOT_ALLOWED = 6;
/** @domName SpeechRecognitionError.code */
- abstract int get code;
+ int get code;
/** @domName SpeechRecognitionError.message */
- abstract String get message;
+ String get message;
}
// 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
@@ -35762,13 +35921,13 @@
abstract class SpeechRecognitionEvent implements Event {
/** @domName SpeechRecognitionEvent.result */
- abstract SpeechRecognitionResult get result;
+ SpeechRecognitionResult get result;
/** @domName SpeechRecognitionEvent.resultHistory */
- abstract List<SpeechRecognitionResult> get resultHistory;
+ List<SpeechRecognitionResult> get resultHistory;
/** @domName SpeechRecognitionEvent.resultIndex */
- abstract int get resultIndex;
+ int get resultIndex;
}
// 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
@@ -35804,6 +35963,10 @@
void set grammars(SpeechGrammarList value) native "SpeechRecognition_grammars_Setter";
+ bool get interimResults native "SpeechRecognition_interimResults_Getter";
+
+ void set interimResults(bool value) native "SpeechRecognition_interimResults_Setter";
+
String get lang native "SpeechRecognition_lang_Getter";
void set lang(String value) native "SpeechRecognition_lang_Setter";
@@ -35841,8 +36004,6 @@
EventListenerList get result => this['result'];
- EventListenerList get resultDeleted => this['resultdeleted'];
-
EventListenerList get soundEnd => this['soundend'];
EventListenerList get soundStart => this['soundstart'];
@@ -35863,13 +36024,13 @@
abstract class SpeechRecognitionResult {
/** @domName SpeechRecognitionResult.emma */
- abstract Document get emma;
+ Document get emma;
/** @domName SpeechRecognitionResult.finalValue */
- abstract bool get finalValue;
+ bool get finalValue;
/** @domName SpeechRecognitionResult.length */
- abstract int get length;
+ int get length;
/** @domName SpeechRecognitionResult.item */
SpeechRecognitionAlternative item(int index);
@@ -35904,7 +36065,7 @@
SpeechRecognitionResult operator[](int index) native "SpeechRecognitionResultList_item_Callback";
void operator[]=(int index, SpeechRecognitionResult value) {
- throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+ throw new UnsupportedError("Cannot assign element of immutable List.");
}
// -- start List<SpeechRecognitionResult> mixins.
// SpeechRecognitionResult is the element type.
@@ -35921,15 +36082,15 @@
// From Collection<SpeechRecognitionResult>:
void add(SpeechRecognitionResult value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addLast(SpeechRecognitionResult value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addAll(Collection<SpeechRecognitionResult> collection) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
bool contains(SpeechRecognitionResult element) => _Collections.contains(this, element);
@@ -35945,38 +36106,38 @@
bool some(bool f(SpeechRecognitionResult element)) => _Collections.some(this, f);
- bool isEmpty() => this.length == 0;
+ bool get isEmpty => this.length == 0;
// From List<SpeechRecognitionResult>:
void sort([Comparator<SpeechRecognitionResult> compare = Comparable.compare]) {
- throw const UnsupportedOperationException("Cannot sort immutable List.");
+ throw new UnsupportedError("Cannot sort immutable List.");
}
int indexOf(SpeechRecognitionResult element, [int start = 0]) =>
_Lists.indexOf(this, element, start, this.length);
int lastIndexOf(SpeechRecognitionResult element, [int start]) {
- if (start === null) start = length - 1;
+ if (start == null) start = length - 1;
return _Lists.lastIndexOf(this, element, start);
}
- SpeechRecognitionResult last() => this[length - 1];
+ SpeechRecognitionResult get last => this[length - 1];
SpeechRecognitionResult removeLast() {
- throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+ throw new UnsupportedError("Cannot removeLast on immutable List.");
}
void setRange(int start, int rangeLength, List<SpeechRecognitionResult> from, [int startFrom]) {
- throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+ throw new UnsupportedError("Cannot setRange on immutable List.");
}
void removeRange(int start, int rangeLength) {
- throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+ throw new UnsupportedError("Cannot removeRange on immutable List.");
}
void insertRange(int start, int rangeLength, [SpeechRecognitionResult initialValue]) {
- throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+ throw new UnsupportedError("Cannot insertRange on immutable List.");
}
List<SpeechRecognitionResult> getRange(int start, int rangeLength) =>
@@ -35991,11 +36152,12 @@
// 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.
+
/// @domName Storage
abstract class Storage implements Map<String, String> {
/** @domName Storage.length */
- abstract int get $dom_length;
+ int get $dom_length;
/** @domName Storage.clear */
void $dom_clear();
@@ -36023,19 +36185,19 @@
abstract class StorageEvent implements Event {
/** @domName StorageEvent.key */
- abstract String get key;
+ String get key;
/** @domName StorageEvent.newValue */
- abstract String get newValue;
+ String get newValue;
/** @domName StorageEvent.oldValue */
- abstract String get oldValue;
+ String get oldValue;
/** @domName StorageEvent.storageArea */
- abstract Storage get storageArea;
+ Storage get storageArea;
/** @domName StorageEvent.url */
- abstract String get url;
+ String get url;
/** @domName StorageEvent.initStorageEvent */
void initStorageEvent(String typeArg, bool canBubbleArg, bool cancelableArg, String keyArg, String oldValueArg, String newValueArg, String urlArg, Storage storageAreaArg);
@@ -36068,7 +36230,7 @@
class _StorageImpl extends NativeFieldWrapperClass1 implements Storage {
// TODO(nweiz): update this when maps support lazy iteration
- bool containsValue(String value) => getValues().some((e) => e == value);
+ bool containsValue(String value) => values.some((e) => e == value);
bool containsKey(String key) => $dom_getItem(key) != null;
@@ -36098,13 +36260,13 @@
}
}
- Collection<String> getKeys() {
+ Collection<String> get keys {
final keys = [];
forEach((k, v) => keys.add(k));
return keys;
}
- Collection<String> getValues() {
+ Collection<String> get values {
final values = [];
forEach((k, v) => values.add(v));
return values;
@@ -36112,7 +36274,7 @@
int get length => $dom_length;
- bool isEmpty() => $dom_key(0) == null;
+ bool get isEmpty => $dom_key(0) == null;
int get $dom_length native "Storage_length_Getter";
@@ -36152,6 +36314,7 @@
// WARNING: Do not edit - generated code.
+
typedef void StorageInfoErrorCallback(DOMException error);
// 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
@@ -36172,6 +36335,7 @@
// WARNING: Do not edit - generated code.
+
typedef void StorageInfoQuotaCallback(int grantedQuotaInBytes);
// 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
@@ -36179,6 +36343,7 @@
// WARNING: Do not edit - generated code.
+
typedef void StorageInfoUsageCallback(int currentUsageInBytes, int currentQuotaInBytes);
// 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
@@ -36186,6 +36351,7 @@
// WARNING: Do not edit - generated code.
+
typedef void StringCallback(String data);
// 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
@@ -36208,7 +36374,7 @@
bool scoped;
/** @domName HTMLStyleElement.sheet */
- abstract StyleSheet get sheet;
+ StyleSheet get sheet;
/** @domName HTMLStyleElement.type */
String type;
@@ -36250,7 +36416,7 @@
abstract class StyleMedia {
/** @domName StyleMedia.type */
- abstract String get type;
+ String get type;
/** @domName StyleMedia.matchMedium */
bool matchMedium(String mediaquery);
@@ -36281,22 +36447,22 @@
bool disabled;
/** @domName StyleSheet.href */
- abstract String get href;
+ String get href;
/** @domName StyleSheet.media */
- abstract MediaList get media;
+ MediaList get media;
/** @domName StyleSheet.ownerNode */
- abstract Node get ownerNode;
+ Node get ownerNode;
/** @domName StyleSheet.parentStyleSheet */
- abstract StyleSheet get parentStyleSheet;
+ StyleSheet get parentStyleSheet;
/** @domName StyleSheet.title */
- abstract String get title;
+ String get title;
/** @domName StyleSheet.type */
- abstract String get type;
+ String get type;
}
// 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
@@ -36336,7 +36502,7 @@
StyleSheet operator[](int index) native "StyleSheetList_item_Callback";
void operator[]=(int index, StyleSheet value) {
- throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+ throw new UnsupportedError("Cannot assign element of immutable List.");
}
// -- start List<StyleSheet> mixins.
// StyleSheet is the element type.
@@ -36353,15 +36519,15 @@
// From Collection<StyleSheet>:
void add(StyleSheet value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addLast(StyleSheet value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addAll(Collection<StyleSheet> collection) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
bool contains(StyleSheet element) => _Collections.contains(this, element);
@@ -36377,38 +36543,38 @@
bool some(bool f(StyleSheet element)) => _Collections.some(this, f);
- bool isEmpty() => this.length == 0;
+ bool get isEmpty => this.length == 0;
// From List<StyleSheet>:
void sort([Comparator<StyleSheet> compare = Comparable.compare]) {
- throw const UnsupportedOperationException("Cannot sort immutable List.");
+ throw new UnsupportedError("Cannot sort immutable List.");
}
int indexOf(StyleSheet element, [int start = 0]) =>
_Lists.indexOf(this, element, start, this.length);
int lastIndexOf(StyleSheet element, [int start]) {
- if (start === null) start = length - 1;
+ if (start == null) start = length - 1;
return _Lists.lastIndexOf(this, element, start);
}
- StyleSheet last() => this[length - 1];
+ StyleSheet get last => this[length - 1];
StyleSheet removeLast() {
- throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+ throw new UnsupportedError("Cannot removeLast on immutable List.");
}
void setRange(int start, int rangeLength, List<StyleSheet> from, [int startFrom]) {
- throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+ throw new UnsupportedError("Cannot setRange on immutable List.");
}
void removeRange(int start, int rangeLength) {
- throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+ throw new UnsupportedError("Cannot removeRange on immutable List.");
}
void insertRange(int start, int rangeLength, [StyleSheet initialValue]) {
- throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+ throw new UnsupportedError("Cannot insertRange on immutable List.");
}
List<StyleSheet> getRange(int start, int rangeLength) =>
@@ -36470,7 +36636,7 @@
String bgColor;
/** @domName HTMLTableCellElement.cellIndex */
- abstract int get cellIndex;
+ int get cellIndex;
/** @domName HTMLTableCellElement.ch */
String ch;
@@ -36664,7 +36830,7 @@
String frame;
/** @domName HTMLTableElement.rows */
- abstract HTMLCollection get rows;
+ HTMLCollection get rows;
/** @domName HTMLTableElement.rules */
String rules;
@@ -36673,7 +36839,7 @@
String summary;
/** @domName HTMLTableElement.tBodies */
- abstract HTMLCollection get tBodies;
+ HTMLCollection get tBodies;
/** @domName HTMLTableElement.tFoot */
TableSectionElement tFoot;
@@ -36808,7 +36974,7 @@
String bgColor;
/** @domName HTMLTableRowElement.cells */
- abstract HTMLCollection get cells;
+ HTMLCollection get cells;
/** @domName HTMLTableRowElement.ch */
String ch;
@@ -36817,10 +36983,10 @@
String chOff;
/** @domName HTMLTableRowElement.rowIndex */
- abstract int get rowIndex;
+ int get rowIndex;
/** @domName HTMLTableRowElement.sectionRowIndex */
- abstract int get sectionRowIndex;
+ int get sectionRowIndex;
/** @domName HTMLTableRowElement.vAlign */
String vAlign;
@@ -36889,7 +37055,7 @@
String chOff;
/** @domName HTMLTableSectionElement.rows */
- abstract HTMLCollection get rows;
+ HTMLCollection get rows;
/** @domName HTMLTableSectionElement.vAlign */
String vAlign;
@@ -36937,13 +37103,14 @@
// WARNING: Do not edit - generated code.
+
/// @domName Text
abstract class Text implements CharacterData {
factory Text(String data) => _TextFactoryProvider.createText(data);
/** @domName Text.wholeText */
- abstract String get wholeText;
+ String get wholeText;
/** @domName Text.replaceWholeText */
Text replaceWholeText(String content);
@@ -36975,10 +37142,10 @@
bool disabled;
/** @domName HTMLTextAreaElement.form */
- abstract FormElement get form;
+ FormElement get form;
/** @domName HTMLTextAreaElement.labels */
- abstract List<Node> get labels;
+ List<Node> get labels;
/** @domName HTMLTextAreaElement.maxLength */
int maxLength;
@@ -37008,22 +37175,22 @@
int selectionStart;
/** @domName HTMLTextAreaElement.textLength */
- abstract int get textLength;
+ int get textLength;
/** @domName HTMLTextAreaElement.type */
- abstract String get type;
+ String get type;
/** @domName HTMLTextAreaElement.validationMessage */
- abstract String get validationMessage;
+ String get validationMessage;
/** @domName HTMLTextAreaElement.validity */
- abstract ValidityState get validity;
+ ValidityState get validity;
/** @domName HTMLTextAreaElement.value */
String value;
/** @domName HTMLTextAreaElement.willValidate */
- abstract bool get willValidate;
+ bool get willValidate;
/** @domName HTMLTextAreaElement.wrap */
String wrap;
@@ -37151,7 +37318,7 @@
abstract class TextEvent implements UIEvent {
/** @domName TextEvent.data */
- abstract String get data;
+ String get data;
/** @domName TextEvent.initTextEvent */
void initTextEvent(String typeArg, bool canBubbleArg, bool cancelableArg, LocalWindow viewArg, String dataArg);
@@ -37194,7 +37361,7 @@
abstract class TextMetrics {
/** @domName TextMetrics.width */
- abstract num get width;
+ num get width;
}
// 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
@@ -37222,19 +37389,19 @@
TextTrackEvents get on;
/** @domName TextTrack.activeCues */
- abstract TextTrackCueList get activeCues;
+ TextTrackCueList get activeCues;
/** @domName TextTrack.cues */
- abstract TextTrackCueList get cues;
+ TextTrackCueList get cues;
/** @domName TextTrack.kind */
- abstract String get kind;
+ String get kind;
/** @domName TextTrack.label */
- abstract String get label;
+ String get label;
/** @domName TextTrack.language */
- abstract String get language;
+ String get language;
/** @domName TextTrack.mode */
String mode;
@@ -37306,7 +37473,7 @@
String text;
/** @domName TextTrackCue.track */
- abstract TextTrack get track;
+ TextTrack get track;
/** @domName TextTrackCue.vertical */
String vertical;
@@ -37414,7 +37581,7 @@
abstract class TextTrackCueList implements List<TextTrackCue> {
/** @domName TextTrackCueList.length */
- abstract int get length;
+ int get length;
/** @domName TextTrackCueList.getCueById */
TextTrackCue getCueById(String id);
@@ -37435,7 +37602,7 @@
TextTrackCue operator[](int index) native "TextTrackCueList_item_Callback";
void operator[]=(int index, TextTrackCue value) {
- throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+ throw new UnsupportedError("Cannot assign element of immutable List.");
}
// -- start List<TextTrackCue> mixins.
// TextTrackCue is the element type.
@@ -37452,15 +37619,15 @@
// From Collection<TextTrackCue>:
void add(TextTrackCue value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addLast(TextTrackCue value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addAll(Collection<TextTrackCue> collection) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
bool contains(TextTrackCue element) => _Collections.contains(this, element);
@@ -37476,38 +37643,38 @@
bool some(bool f(TextTrackCue element)) => _Collections.some(this, f);
- bool isEmpty() => this.length == 0;
+ bool get isEmpty => this.length == 0;
// From List<TextTrackCue>:
void sort([Comparator<TextTrackCue> compare = Comparable.compare]) {
- throw const UnsupportedOperationException("Cannot sort immutable List.");
+ throw new UnsupportedError("Cannot sort immutable List.");
}
int indexOf(TextTrackCue element, [int start = 0]) =>
_Lists.indexOf(this, element, start, this.length);
int lastIndexOf(TextTrackCue element, [int start]) {
- if (start === null) start = length - 1;
+ if (start == null) start = length - 1;
return _Lists.lastIndexOf(this, element, start);
}
- TextTrackCue last() => this[length - 1];
+ TextTrackCue get last => this[length - 1];
TextTrackCue removeLast() {
- throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+ throw new UnsupportedError("Cannot removeLast on immutable List.");
}
void setRange(int start, int rangeLength, List<TextTrackCue> from, [int startFrom]) {
- throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+ throw new UnsupportedError("Cannot setRange on immutable List.");
}
void removeRange(int start, int rangeLength) {
- throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+ throw new UnsupportedError("Cannot removeRange on immutable List.");
}
void insertRange(int start, int rangeLength, [TextTrackCue initialValue]) {
- throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+ throw new UnsupportedError("Cannot insertRange on immutable List.");
}
List<TextTrackCue> getRange(int start, int rangeLength) =>
@@ -37569,7 +37736,7 @@
// WARNING: Do not edit - generated code.
/// @domName TextTrackList
-abstract class TextTrackList implements List<TextTrack>, EventTarget {
+abstract class TextTrackList implements EventTarget, List<TextTrack> {
/**
* @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
@@ -37577,7 +37744,7 @@
TextTrackListEvents get on;
/** @domName TextTrackList.length */
- abstract int get length;
+ int get length;
/** @domName TextTrackList.addEventListener */
void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
@@ -37602,7 +37769,7 @@
// WARNING: Do not edit - generated code.
-class _TextTrackListImpl extends NativeFieldWrapperClass1 implements TextTrackList {
+class _TextTrackListImpl extends _EventTargetImpl implements TextTrackList {
_TextTrackListEventsImpl get on =>
new _TextTrackListEventsImpl(this);
@@ -37612,7 +37779,7 @@
TextTrack operator[](int index) native "TextTrackList_item_Callback";
void operator[]=(int index, TextTrack value) {
- throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+ throw new UnsupportedError("Cannot assign element of immutable List.");
}
// -- start List<TextTrack> mixins.
// TextTrack is the element type.
@@ -37629,15 +37796,15 @@
// From Collection<TextTrack>:
void add(TextTrack value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addLast(TextTrack value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addAll(Collection<TextTrack> collection) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
bool contains(TextTrack element) => _Collections.contains(this, element);
@@ -37653,38 +37820,38 @@
bool some(bool f(TextTrack element)) => _Collections.some(this, f);
- bool isEmpty() => this.length == 0;
+ bool get isEmpty => this.length == 0;
// From List<TextTrack>:
void sort([Comparator<TextTrack> compare = Comparable.compare]) {
- throw const UnsupportedOperationException("Cannot sort immutable List.");
+ throw new UnsupportedError("Cannot sort immutable List.");
}
int indexOf(TextTrack element, [int start = 0]) =>
_Lists.indexOf(this, element, start, this.length);
int lastIndexOf(TextTrack element, [int start]) {
- if (start === null) start = length - 1;
+ if (start == null) start = length - 1;
return _Lists.lastIndexOf(this, element, start);
}
- TextTrack last() => this[length - 1];
+ TextTrack get last => this[length - 1];
TextTrack removeLast() {
- throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+ throw new UnsupportedError("Cannot removeLast on immutable List.");
}
void setRange(int start, int rangeLength, List<TextTrack> from, [int startFrom]) {
- throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+ throw new UnsupportedError("Cannot setRange on immutable List.");
}
void removeRange(int start, int rangeLength) {
- throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+ throw new UnsupportedError("Cannot removeRange on immutable List.");
}
void insertRange(int start, int rangeLength, [TextTrack initialValue]) {
- throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+ throw new UnsupportedError("Cannot insertRange on immutable List.");
}
List<TextTrack> getRange(int start, int rangeLength) =>
@@ -37717,7 +37884,7 @@
abstract class TimeRanges {
/** @domName TimeRanges.length */
- abstract int get length;
+ int get length;
/** @domName TimeRanges.end */
num end(int index);
@@ -37746,6 +37913,7 @@
// WARNING: Do not edit - generated code.
+
typedef void TimeoutHandler();
// 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
@@ -37777,40 +37945,40 @@
abstract class Touch {
/** @domName Touch.clientX */
- abstract int get clientX;
+ int get clientX;
/** @domName Touch.clientY */
- abstract int get clientY;
+ int get clientY;
/** @domName Touch.identifier */
- abstract int get identifier;
+ int get identifier;
/** @domName Touch.pageX */
- abstract int get pageX;
+ int get pageX;
/** @domName Touch.pageY */
- abstract int get pageY;
+ int get pageY;
/** @domName Touch.screenX */
- abstract int get screenX;
+ int get screenX;
/** @domName Touch.screenY */
- abstract int get screenY;
+ int get screenY;
/** @domName Touch.target */
- abstract EventTarget get target;
+ EventTarget get target;
/** @domName Touch.webkitForce */
- abstract num get webkitForce;
+ num get webkitForce;
/** @domName Touch.webkitRadiusX */
- abstract int get webkitRadiusX;
+ int get webkitRadiusX;
/** @domName Touch.webkitRadiusY */
- abstract int get webkitRadiusY;
+ int get webkitRadiusY;
/** @domName Touch.webkitRotationAngle */
- abstract num get webkitRotationAngle;
+ num get webkitRotationAngle;
}
// 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
@@ -37822,25 +37990,25 @@
abstract class TouchEvent implements UIEvent {
/** @domName TouchEvent.altKey */
- abstract bool get altKey;
+ bool get altKey;
/** @domName TouchEvent.changedTouches */
- abstract TouchList get changedTouches;
+ TouchList get changedTouches;
/** @domName TouchEvent.ctrlKey */
- abstract bool get ctrlKey;
+ bool get ctrlKey;
/** @domName TouchEvent.metaKey */
- abstract bool get metaKey;
+ bool get metaKey;
/** @domName TouchEvent.shiftKey */
- abstract bool get shiftKey;
+ bool get shiftKey;
/** @domName TouchEvent.targetTouches */
- abstract TouchList get targetTouches;
+ TouchList get targetTouches;
/** @domName TouchEvent.touches */
- abstract TouchList get touches;
+ TouchList get touches;
/** @domName TouchEvent.initTouchEvent */
void initTouchEvent(TouchList touches, TouchList targetTouches, TouchList changedTouches, String type, LocalWindow view, int screenX, int screenY, int clientX, int clientY, bool ctrlKey, bool altKey, bool shiftKey, bool metaKey);
@@ -37913,7 +38081,7 @@
abstract class TouchList implements List<Touch> {
/** @domName TouchList.length */
- abstract int get length;
+ int get length;
/** @domName TouchList.item */
Touch item(int index);
@@ -37931,7 +38099,7 @@
Touch operator[](int index) native "TouchList_item_Callback";
void operator[]=(int index, Touch value) {
- throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+ throw new UnsupportedError("Cannot assign element of immutable List.");
}
// -- start List<Touch> mixins.
// Touch is the element type.
@@ -37948,15 +38116,15 @@
// From Collection<Touch>:
void add(Touch value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addLast(Touch value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addAll(Collection<Touch> collection) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
bool contains(Touch element) => _Collections.contains(this, element);
@@ -37972,38 +38140,38 @@
bool some(bool f(Touch element)) => _Collections.some(this, f);
- bool isEmpty() => this.length == 0;
+ bool get isEmpty => this.length == 0;
// From List<Touch>:
void sort([Comparator<Touch> compare = Comparable.compare]) {
- throw const UnsupportedOperationException("Cannot sort immutable List.");
+ throw new UnsupportedError("Cannot sort immutable List.");
}
int indexOf(Touch element, [int start = 0]) =>
_Lists.indexOf(this, element, start, this.length);
int lastIndexOf(Touch element, [int start]) {
- if (start === null) start = length - 1;
+ if (start == null) start = length - 1;
return _Lists.lastIndexOf(this, element, start);
}
- Touch last() => this[length - 1];
+ Touch get last => this[length - 1];
Touch removeLast() {
- throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+ throw new UnsupportedError("Cannot removeLast on immutable List.");
}
void setRange(int start, int rangeLength, List<Touch> from, [int startFrom]) {
- throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+ throw new UnsupportedError("Cannot setRange on immutable List.");
}
void removeRange(int start, int rangeLength) {
- throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+ throw new UnsupportedError("Cannot removeRange on immutable List.");
}
void insertRange(int start, int rangeLength, [Touch initialValue]) {
- throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+ throw new UnsupportedError("Cannot insertRange on immutable List.");
}
List<Touch> getRange(int start, int rangeLength) =>
@@ -38043,7 +38211,7 @@
String label;
/** @domName HTMLTrackElement.readyState */
- abstract int get readyState;
+ int get readyState;
/** @domName HTMLTrackElement.src */
String src;
@@ -38052,7 +38220,7 @@
String srclang;
/** @domName HTMLTrackElement.track */
- abstract TextTrack get track;
+ TextTrack get track;
}
// 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
@@ -38097,7 +38265,7 @@
abstract class TrackEvent implements Event {
/** @domName TrackEvent.track */
- abstract Object get track;
+ Object get track;
}
// 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
@@ -38120,10 +38288,10 @@
abstract class TransitionEvent implements Event {
/** @domName WebKitTransitionEvent.elapsedTime */
- abstract num get elapsedTime;
+ num get elapsedTime;
/** @domName WebKitTransitionEvent.propertyName */
- abstract String get propertyName;
+ String get propertyName;
}
// 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
@@ -38151,16 +38319,16 @@
Node currentNode;
/** @domName TreeWalker.expandEntityReferences */
- abstract bool get expandEntityReferences;
+ bool get expandEntityReferences;
/** @domName TreeWalker.filter */
- abstract NodeFilter get filter;
+ NodeFilter get filter;
/** @domName TreeWalker.root */
- abstract Node get root;
+ Node get root;
/** @domName TreeWalker.whatToShow */
- abstract int get whatToShow;
+ int get whatToShow;
/** @domName TreeWalker.firstChild */
Node firstChild();
@@ -38228,31 +38396,31 @@
abstract class UIEvent implements Event {
/** @domName UIEvent.charCode */
- abstract int get charCode;
+ int get charCode;
/** @domName UIEvent.detail */
- abstract int get detail;
+ int get detail;
/** @domName UIEvent.keyCode */
- abstract int get keyCode;
+ int get keyCode;
/** @domName UIEvent.layerX */
- abstract int get layerX;
+ int get layerX;
/** @domName UIEvent.layerY */
- abstract int get layerY;
+ int get layerY;
/** @domName UIEvent.pageX */
- abstract int get pageX;
+ int get pageX;
/** @domName UIEvent.pageY */
- abstract int get pageY;
+ int get pageY;
/** @domName UIEvent.view */
- abstract Window get view;
+ Window get view;
/** @domName UIEvent.which */
- abstract int get which;
+ int get which;
/** @domName UIEvent.initUIEvent */
void initUIEvent(String type, bool canBubble, bool cancelable, LocalWindow view, int detail);
@@ -38341,7 +38509,7 @@
static const int BYTES_PER_ELEMENT = 2;
/** @domName Uint16Array.length */
- abstract int get length;
+ int get length;
/** @domName Uint16Array.setElements */
void setElements(Object array, [int offset]);
@@ -38377,15 +38545,15 @@
// From Collection<int>:
void add(int value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addLast(int value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addAll(Collection<int> collection) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
bool contains(int element) => _Collections.contains(this, element);
@@ -38401,38 +38569,38 @@
bool some(bool f(int element)) => _Collections.some(this, f);
- bool isEmpty() => this.length == 0;
+ bool get isEmpty => this.length == 0;
// From List<int>:
void sort([Comparator<int> compare = Comparable.compare]) {
- throw const UnsupportedOperationException("Cannot sort immutable List.");
+ throw new UnsupportedError("Cannot sort immutable List.");
}
int indexOf(int element, [int start = 0]) =>
_Lists.indexOf(this, element, start, this.length);
int lastIndexOf(int element, [int start]) {
- if (start === null) start = length - 1;
+ if (start == null) start = length - 1;
return _Lists.lastIndexOf(this, element, start);
}
- int last() => this[length - 1];
+ int get last => this[length - 1];
int removeLast() {
- throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+ throw new UnsupportedError("Cannot removeLast on immutable List.");
}
void setRange(int start, int rangeLength, List<int> from, [int startFrom]) {
- throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+ throw new UnsupportedError("Cannot setRange on immutable List.");
}
void removeRange(int start, int rangeLength) {
- throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+ throw new UnsupportedError("Cannot removeRange on immutable List.");
}
void insertRange(int start, int rangeLength, [int initialValue]) {
- throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+ throw new UnsupportedError("Cannot insertRange on immutable List.");
}
List<int> getRange(int start, int rangeLength) =>
@@ -38475,7 +38643,7 @@
static const int BYTES_PER_ELEMENT = 4;
/** @domName Uint32Array.length */
- abstract int get length;
+ int get length;
/** @domName Uint32Array.setElements */
void setElements(Object array, [int offset]);
@@ -38511,15 +38679,15 @@
// From Collection<int>:
void add(int value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addLast(int value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addAll(Collection<int> collection) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
bool contains(int element) => _Collections.contains(this, element);
@@ -38535,38 +38703,38 @@
bool some(bool f(int element)) => _Collections.some(this, f);
- bool isEmpty() => this.length == 0;
+ bool get isEmpty => this.length == 0;
// From List<int>:
void sort([Comparator<int> compare = Comparable.compare]) {
- throw const UnsupportedOperationException("Cannot sort immutable List.");
+ throw new UnsupportedError("Cannot sort immutable List.");
}
int indexOf(int element, [int start = 0]) =>
_Lists.indexOf(this, element, start, this.length);
int lastIndexOf(int element, [int start]) {
- if (start === null) start = length - 1;
+ if (start == null) start = length - 1;
return _Lists.lastIndexOf(this, element, start);
}
- int last() => this[length - 1];
+ int get last => this[length - 1];
int removeLast() {
- throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+ throw new UnsupportedError("Cannot removeLast on immutable List.");
}
void setRange(int start, int rangeLength, List<int> from, [int startFrom]) {
- throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+ throw new UnsupportedError("Cannot setRange on immutable List.");
}
void removeRange(int start, int rangeLength) {
- throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+ throw new UnsupportedError("Cannot removeRange on immutable List.");
}
void insertRange(int start, int rangeLength, [int initialValue]) {
- throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+ throw new UnsupportedError("Cannot insertRange on immutable List.");
}
List<int> getRange(int start, int rangeLength) =>
@@ -38609,7 +38777,7 @@
static const int BYTES_PER_ELEMENT = 1;
/** @domName Uint8Array.length */
- abstract int get length;
+ int get length;
/** @domName Uint8Array.setElements */
void setElements(Object array, [int offset]);
@@ -38645,15 +38813,15 @@
// From Collection<int>:
void add(int value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addLast(int value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addAll(Collection<int> collection) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
bool contains(int element) => _Collections.contains(this, element);
@@ -38669,38 +38837,38 @@
bool some(bool f(int element)) => _Collections.some(this, f);
- bool isEmpty() => this.length == 0;
+ bool get isEmpty => this.length == 0;
// From List<int>:
void sort([Comparator<int> compare = Comparable.compare]) {
- throw const UnsupportedOperationException("Cannot sort immutable List.");
+ throw new UnsupportedError("Cannot sort immutable List.");
}
int indexOf(int element, [int start = 0]) =>
_Lists.indexOf(this, element, start, this.length);
int lastIndexOf(int element, [int start]) {
- if (start === null) start = length - 1;
+ if (start == null) start = length - 1;
return _Lists.lastIndexOf(this, element, start);
}
- int last() => this[length - 1];
+ int get last => this[length - 1];
int removeLast() {
- throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+ throw new UnsupportedError("Cannot removeLast on immutable List.");
}
void setRange(int start, int rangeLength, List<int> from, [int startFrom]) {
- throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+ throw new UnsupportedError("Cannot setRange on immutable List.");
}
void removeRange(int start, int rangeLength) {
- throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+ throw new UnsupportedError("Cannot removeRange on immutable List.");
}
void insertRange(int start, int rangeLength, [int initialValue]) {
- throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+ throw new UnsupportedError("Cannot insertRange on immutable List.");
}
List<int> getRange(int start, int rangeLength) =>
@@ -38741,7 +38909,7 @@
_TypedArrayFactoryProvider.createUint8ClampedArray_fromBuffer(buffer, byteOffset, length);
/** @domName Uint8ClampedArray.length */
- abstract int get length;
+ int get length;
/** @domName Uint8ClampedArray.setElements */
void setElements(Object array, [int offset]);
@@ -38805,31 +38973,31 @@
abstract class ValidityState {
/** @domName ValidityState.customError */
- abstract bool get customError;
+ bool get customError;
/** @domName ValidityState.patternMismatch */
- abstract bool get patternMismatch;
+ bool get patternMismatch;
/** @domName ValidityState.rangeOverflow */
- abstract bool get rangeOverflow;
+ bool get rangeOverflow;
/** @domName ValidityState.rangeUnderflow */
- abstract bool get rangeUnderflow;
+ bool get rangeUnderflow;
/** @domName ValidityState.stepMismatch */
- abstract bool get stepMismatch;
+ bool get stepMismatch;
/** @domName ValidityState.tooLong */
- abstract bool get tooLong;
+ bool get tooLong;
/** @domName ValidityState.typeMismatch */
- abstract bool get typeMismatch;
+ bool get typeMismatch;
/** @domName ValidityState.valid */
- abstract bool get valid;
+ bool get valid;
/** @domName ValidityState.valueMissing */
- abstract bool get valueMissing;
+ bool get valueMissing;
}
// 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
@@ -38876,22 +39044,22 @@
String poster;
/** @domName HTMLVideoElement.videoHeight */
- abstract int get videoHeight;
+ int get videoHeight;
/** @domName HTMLVideoElement.videoWidth */
- abstract int get videoWidth;
+ int get videoWidth;
/** @domName HTMLVideoElement.webkitDecodedFrameCount */
- abstract int get webkitDecodedFrameCount;
+ int get webkitDecodedFrameCount;
/** @domName HTMLVideoElement.webkitDisplayingFullscreen */
- abstract bool get webkitDisplayingFullscreen;
+ bool get webkitDisplayingFullscreen;
/** @domName HTMLVideoElement.webkitDroppedFrameCount */
- abstract int get webkitDroppedFrameCount;
+ int get webkitDroppedFrameCount;
/** @domName HTMLVideoElement.webkitSupportsFullscreen */
- abstract bool get webkitSupportsFullscreen;
+ bool get webkitSupportsFullscreen;
/** @domName HTMLVideoElement.width */
int width;
@@ -38955,6 +39123,7 @@
// WARNING: Do not edit - generated code.
+
typedef void VoidCallback();
// 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
@@ -39009,13 +39178,13 @@
abstract class WebGLActiveInfo {
/** @domName WebGLActiveInfo.name */
- abstract String get name;
+ String get name;
/** @domName WebGLActiveInfo.size */
- abstract int get size;
+ int get size;
/** @domName WebGLActiveInfo.type */
- abstract int get type;
+ int get type;
}
// 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
@@ -39146,7 +39315,7 @@
abstract class WebGLContextEvent implements Event {
/** @domName WebGLContextEvent.statusMessage */
- abstract String get statusMessage;
+ String get statusMessage;
}
// 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
@@ -39906,10 +40075,10 @@
static const int ZERO = 0;
/** @domName WebGLRenderingContext.drawingBufferHeight */
- abstract int get drawingBufferHeight;
+ int get drawingBufferHeight;
/** @domName WebGLRenderingContext.drawingBufferWidth */
- abstract int get drawingBufferWidth;
+ int get drawingBufferWidth;
/** @domName WebGLRenderingContext.activeTexture */
void activeTexture(int texture);
@@ -40080,7 +40249,7 @@
WebGLActiveInfo getActiveUniform(WebGLProgram program, int index);
/** @domName WebGLRenderingContext.getAttachedShaders */
- List<Object> getAttachedShaders(WebGLProgram program);
+ void getAttachedShaders(WebGLProgram program);
/** @domName WebGLRenderingContext.getAttribLocation */
int getAttribLocation(WebGLProgram program, String name);
@@ -40095,7 +40264,7 @@
int getError();
/** @domName WebGLRenderingContext.getExtension */
- Object getExtension(String name);
+ void getExtension(String name);
/** @domName WebGLRenderingContext.getFramebufferAttachmentParameter */
Object getFramebufferAttachmentParameter(int target, int attachment, int pname);
@@ -40359,15 +40528,15 @@
void blendFuncSeparate(int srcRGB, int dstRGB, int srcAlpha, int dstAlpha) native "WebGLRenderingContext_blendFuncSeparate_Callback";
void bufferData(/*unsigned long*/ target, data_OR_size, /*unsigned long*/ usage) {
- if ((target is int || target === null) && (data_OR_size is ArrayBuffer || data_OR_size === null) && (usage is int || usage === null)) {
+ if ((target is int || target == null) && (data_OR_size is ArrayBuffer || data_OR_size == null) && (usage is int || usage == null)) {
_bufferData_1(target, data_OR_size, usage);
return;
}
- if ((target is int || target === null) && (data_OR_size is ArrayBufferView || data_OR_size === null) && (usage is int || usage === null)) {
+ if ((target is int || target == null) && (data_OR_size is ArrayBufferView || data_OR_size == null) && (usage is int || usage == null)) {
_bufferData_2(target, data_OR_size, usage);
return;
}
- if ((target is int || target === null) && (data_OR_size is int || data_OR_size === null) && (usage is int || usage === null)) {
+ if ((target is int || target == null) && (data_OR_size is int || data_OR_size == null) && (usage is int || usage == null)) {
_bufferData_3(target, data_OR_size, usage);
return;
}
@@ -40381,11 +40550,11 @@
void _bufferData_3(target, data_OR_size, usage) native "WebGLRenderingContext_bufferData_3_Callback";
void bufferSubData(/*unsigned long*/ target, /*long long*/ offset, data) {
- if ((target is int || target === null) && (offset is int || offset === null) && (data is ArrayBuffer || data === null)) {
+ if ((target is int || target == null) && (offset is int || offset == null) && (data is ArrayBuffer || data == null)) {
_bufferSubData_1(target, offset, data);
return;
}
- if ((target is int || target === null) && (offset is int || offset === null) && (data is ArrayBufferView || data === null)) {
+ if ((target is int || target == null) && (offset is int || offset == null) && (data is ArrayBufferView || data == null)) {
_bufferSubData_2(target, offset, data);
return;
}
@@ -40480,7 +40649,7 @@
WebGLActiveInfo getActiveUniform(WebGLProgram program, int index) native "WebGLRenderingContext_getActiveUniform_Callback";
- List<Object> getAttachedShaders(WebGLProgram program) native "WebGLRenderingContext_getAttachedShaders_Callback";
+ void getAttachedShaders(WebGLProgram program) native "WebGLRenderingContext_getAttachedShaders_Callback";
int getAttribLocation(WebGLProgram program, String name) native "WebGLRenderingContext_getAttribLocation_Callback";
@@ -40490,7 +40659,7 @@
int getError() native "WebGLRenderingContext_getError_Callback";
- Object getExtension(String name) native "WebGLRenderingContext_getExtension_Callback";
+ void getExtension(String name) native "WebGLRenderingContext_getExtension_Callback";
Object getFramebufferAttachmentParameter(int target, int attachment, int pname) native "WebGLRenderingContext_getFramebufferAttachmentParameter_Callback";
@@ -40573,23 +40742,23 @@
void stencilOpSeparate(int face, int fail, int zfail, int zpass) native "WebGLRenderingContext_stencilOpSeparate_Callback";
void texImage2D(/*unsigned long*/ target, /*long*/ level, /*unsigned long*/ internalformat, /*long*/ format_OR_width, /*long*/ height_OR_type, border_OR_canvas_OR_image_OR_pixels_OR_video, [/*unsigned long*/ format, /*unsigned long*/ type, /*ArrayBufferView*/ pixels]) {
- if ((target is int || target === null) && (level is int || level === null) && (internalformat is int || internalformat === null) && (format_OR_width is int || format_OR_width === null) && (height_OR_type is int || height_OR_type === null) && (border_OR_canvas_OR_image_OR_pixels_OR_video is int || border_OR_canvas_OR_image_OR_pixels_OR_video === null) && (format is int || format === null) && (type is int || type === null) && (pixels is ArrayBufferView || pixels === null)) {
+ if ((target is int || target == null) && (level is int || level == null) && (internalformat is int || internalformat == null) && (format_OR_width is int || format_OR_width == null) && (height_OR_type is int || height_OR_type == null) && (border_OR_canvas_OR_image_OR_pixels_OR_video is int || border_OR_canvas_OR_image_OR_pixels_OR_video == null) && (format is int || format == null) && (type is int || type == null) && (pixels is ArrayBufferView || pixels == null)) {
_texImage2D_1(target, level, internalformat, format_OR_width, height_OR_type, border_OR_canvas_OR_image_OR_pixels_OR_video, format, type, pixels);
return;
}
- if ((target is int || target === null) && (level is int || level === null) && (internalformat is int || internalformat === null) && (format_OR_width is int || format_OR_width === null) && (height_OR_type is int || height_OR_type === null) && (border_OR_canvas_OR_image_OR_pixels_OR_video is ImageData || border_OR_canvas_OR_image_OR_pixels_OR_video === null) && !?format && !?type && !?pixels) {
+ if ((target is int || target == null) && (level is int || level == null) && (internalformat is int || internalformat == null) && (format_OR_width is int || format_OR_width == null) && (height_OR_type is int || height_OR_type == null) && (border_OR_canvas_OR_image_OR_pixels_OR_video is ImageData || border_OR_canvas_OR_image_OR_pixels_OR_video == null) && !?format && !?type && !?pixels) {
_texImage2D_2(target, level, internalformat, format_OR_width, height_OR_type, border_OR_canvas_OR_image_OR_pixels_OR_video);
return;
}
- if ((target is int || target === null) && (level is int || level === null) && (internalformat is int || internalformat === null) && (format_OR_width is int || format_OR_width === null) && (height_OR_type is int || height_OR_type === null) && (border_OR_canvas_OR_image_OR_pixels_OR_video is ImageElement || border_OR_canvas_OR_image_OR_pixels_OR_video === null) && !?format && !?type && !?pixels) {
+ if ((target is int || target == null) && (level is int || level == null) && (internalformat is int || internalformat == null) && (format_OR_width is int || format_OR_width == null) && (height_OR_type is int || height_OR_type == null) && (border_OR_canvas_OR_image_OR_pixels_OR_video is ImageElement || border_OR_canvas_OR_image_OR_pixels_OR_video == null) && !?format && !?type && !?pixels) {
_texImage2D_3(target, level, internalformat, format_OR_width, height_OR_type, border_OR_canvas_OR_image_OR_pixels_OR_video);
return;
}
- if ((target is int || target === null) && (level is int || level === null) && (internalformat is int || internalformat === null) && (format_OR_width is int || format_OR_width === null) && (height_OR_type is int || height_OR_type === null) && (border_OR_canvas_OR_image_OR_pixels_OR_video is CanvasElement || border_OR_canvas_OR_image_OR_pixels_OR_video === null) && !?format && !?type && !?pixels) {
+ if ((target is int || target == null) && (level is int || level == null) && (internalformat is int || internalformat == null) && (format_OR_width is int || format_OR_width == null) && (height_OR_type is int || height_OR_type == null) && (border_OR_canvas_OR_image_OR_pixels_OR_video is CanvasElement || border_OR_canvas_OR_image_OR_pixels_OR_video == null) && !?format && !?type && !?pixels) {
_texImage2D_4(target, level, internalformat, format_OR_width, height_OR_type, border_OR_canvas_OR_image_OR_pixels_OR_video);
return;
}
- if ((target is int || target === null) && (level is int || level === null) && (internalformat is int || internalformat === null) && (format_OR_width is int || format_OR_width === null) && (height_OR_type is int || height_OR_type === null) && (border_OR_canvas_OR_image_OR_pixels_OR_video is VideoElement || border_OR_canvas_OR_image_OR_pixels_OR_video === null) && !?format && !?type && !?pixels) {
+ if ((target is int || target == null) && (level is int || level == null) && (internalformat is int || internalformat == null) && (format_OR_width is int || format_OR_width == null) && (height_OR_type is int || height_OR_type == null) && (border_OR_canvas_OR_image_OR_pixels_OR_video is VideoElement || border_OR_canvas_OR_image_OR_pixels_OR_video == null) && !?format && !?type && !?pixels) {
_texImage2D_5(target, level, internalformat, format_OR_width, height_OR_type, border_OR_canvas_OR_image_OR_pixels_OR_video);
return;
}
@@ -40611,23 +40780,23 @@
void texParameteri(int target, int pname, int param) native "WebGLRenderingContext_texParameteri_Callback";
void texSubImage2D(/*unsigned long*/ target, /*long*/ level, /*long*/ xoffset, /*long*/ yoffset, /*long*/ format_OR_width, /*long*/ height_OR_type, canvas_OR_format_OR_image_OR_pixels_OR_video, [/*unsigned long*/ type, /*ArrayBufferView*/ pixels]) {
- if ((target is int || target === null) && (level is int || level === null) && (xoffset is int || xoffset === null) && (yoffset is int || yoffset === null) && (format_OR_width is int || format_OR_width === null) && (height_OR_type is int || height_OR_type === null) && (canvas_OR_format_OR_image_OR_pixels_OR_video is int || canvas_OR_format_OR_image_OR_pixels_OR_video === null) && (type is int || type === null) && (pixels is ArrayBufferView || pixels === null)) {
+ if ((target is int || target == null) && (level is int || level == null) && (xoffset is int || xoffset == null) && (yoffset is int || yoffset == null) && (format_OR_width is int || format_OR_width == null) && (height_OR_type is int || height_OR_type == null) && (canvas_OR_format_OR_image_OR_pixels_OR_video is int || canvas_OR_format_OR_image_OR_pixels_OR_video == null) && (type is int || type == null) && (pixels is ArrayBufferView || pixels == null)) {
_texSubImage2D_1(target, level, xoffset, yoffset, format_OR_width, height_OR_type, canvas_OR_format_OR_image_OR_pixels_OR_video, type, pixels);
return;
}
- if ((target is int || target === null) && (level is int || level === null) && (xoffset is int || xoffset === null) && (yoffset is int || yoffset === null) && (format_OR_width is int || format_OR_width === null) && (height_OR_type is int || height_OR_type === null) && (canvas_OR_format_OR_image_OR_pixels_OR_video is ImageData || canvas_OR_format_OR_image_OR_pixels_OR_video === null) && !?type && !?pixels) {
+ if ((target is int || target == null) && (level is int || level == null) && (xoffset is int || xoffset == null) && (yoffset is int || yoffset == null) && (format_OR_width is int || format_OR_width == null) && (height_OR_type is int || height_OR_type == null) && (canvas_OR_format_OR_image_OR_pixels_OR_video is ImageData || canvas_OR_format_OR_image_OR_pixels_OR_video == null) && !?type && !?pixels) {
_texSubImage2D_2(target, level, xoffset, yoffset, format_OR_width, height_OR_type, canvas_OR_format_OR_image_OR_pixels_OR_video);
return;
}
- if ((target is int || target === null) && (level is int || level === null) && (xoffset is int || xoffset === null) && (yoffset is int || yoffset === null) && (format_OR_width is int || format_OR_width === null) && (height_OR_type is int || height_OR_type === null) && (canvas_OR_format_OR_image_OR_pixels_OR_video is ImageElement || canvas_OR_format_OR_image_OR_pixels_OR_video === null) && !?type && !?pixels) {
+ if ((target is int || target == null) && (level is int || level == null) && (xoffset is int || xoffset == null) && (yoffset is int || yoffset == null) && (format_OR_width is int || format_OR_width == null) && (height_OR_type is int || height_OR_type == null) && (canvas_OR_format_OR_image_OR_pixels_OR_video is ImageElement || canvas_OR_format_OR_image_OR_pixels_OR_video == null) && !?type && !?pixels) {
_texSubImage2D_3(target, level, xoffset, yoffset, format_OR_width, height_OR_type, canvas_OR_format_OR_image_OR_pixels_OR_video);
return;
}
- if ((target is int || target === null) && (level is int || level === null) && (xoffset is int || xoffset === null) && (yoffset is int || yoffset === null) && (format_OR_width is int || format_OR_width === null) && (height_OR_type is int || height_OR_type === null) && (canvas_OR_format_OR_image_OR_pixels_OR_video is CanvasElement || canvas_OR_format_OR_image_OR_pixels_OR_video === null) && !?type && !?pixels) {
+ if ((target is int || target == null) && (level is int || level == null) && (xoffset is int || xoffset == null) && (yoffset is int || yoffset == null) && (format_OR_width is int || format_OR_width == null) && (height_OR_type is int || height_OR_type == null) && (canvas_OR_format_OR_image_OR_pixels_OR_video is CanvasElement || canvas_OR_format_OR_image_OR_pixels_OR_video == null) && !?type && !?pixels) {
_texSubImage2D_4(target, level, xoffset, yoffset, format_OR_width, height_OR_type, canvas_OR_format_OR_image_OR_pixels_OR_video);
return;
}
- if ((target is int || target === null) && (level is int || level === null) && (xoffset is int || xoffset === null) && (yoffset is int || yoffset === null) && (format_OR_width is int || format_OR_width === null) && (height_OR_type is int || height_OR_type === null) && (canvas_OR_format_OR_image_OR_pixels_OR_video is VideoElement || canvas_OR_format_OR_image_OR_pixels_OR_video === null) && !?type && !?pixels) {
+ if ((target is int || target == null) && (level is int || level == null) && (xoffset is int || xoffset == null) && (yoffset is int || yoffset == null) && (format_OR_width is int || format_OR_width == null) && (height_OR_type is int || height_OR_type == null) && (canvas_OR_format_OR_image_OR_pixels_OR_video is VideoElement || canvas_OR_format_OR_image_OR_pixels_OR_video == null) && !?type && !?pixels) {
_texSubImage2D_5(target, level, xoffset, yoffset, format_OR_width, height_OR_type, canvas_OR_format_OR_image_OR_pixels_OR_video);
return;
}
@@ -40735,13 +40904,13 @@
abstract class WebGLShaderPrecisionFormat {
/** @domName WebGLShaderPrecisionFormat.precision */
- abstract int get precision;
+ int get precision;
/** @domName WebGLShaderPrecisionFormat.rangeMax */
- abstract int get rangeMax;
+ int get rangeMax;
/** @domName WebGLShaderPrecisionFormat.rangeMin */
- abstract int get rangeMin;
+ int get rangeMin;
}
// 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
@@ -40825,7 +40994,7 @@
Animation operator[](int index) native "WebKitAnimationList_item_Callback";
void operator[]=(int index, Animation value) {
- throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+ throw new UnsupportedError("Cannot assign element of immutable List.");
}
// -- start List<Animation> mixins.
// Animation is the element type.
@@ -40842,15 +41011,15 @@
// From Collection<Animation>:
void add(Animation value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addLast(Animation value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addAll(Collection<Animation> collection) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
bool contains(Animation element) => _Collections.contains(this, element);
@@ -40866,38 +41035,38 @@
bool some(bool f(Animation element)) => _Collections.some(this, f);
- bool isEmpty() => this.length == 0;
+ bool get isEmpty => this.length == 0;
// From List<Animation>:
void sort([Comparator<Animation> compare = Comparable.compare]) {
- throw const UnsupportedOperationException("Cannot sort immutable List.");
+ throw new UnsupportedError("Cannot sort immutable List.");
}
int indexOf(Animation element, [int start = 0]) =>
_Lists.indexOf(this, element, start, this.length);
int lastIndexOf(Animation element, [int start]) {
- if (start === null) start = length - 1;
+ if (start == null) start = length - 1;
return _Lists.lastIndexOf(this, element, start);
}
- Animation last() => this[length - 1];
+ Animation get last => this[length - 1];
Animation removeLast() {
- throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+ throw new UnsupportedError("Cannot removeLast on immutable List.");
}
void setRange(int start, int rangeLength, List<Animation> from, [int startFrom]) {
- throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+ throw new UnsupportedError("Cannot setRange on immutable List.");
}
void removeRange(int start, int rangeLength) {
- throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+ throw new UnsupportedError("Cannot removeRange on immutable List.");
}
void insertRange(int start, int rangeLength, [Animation initialValue]) {
- throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+ throw new UnsupportedError("Cannot insertRange on immutable List.");
}
List<Animation> getRange(int start, int rangeLength) =>
@@ -40942,7 +41111,7 @@
static const int CSS_FILTER_SEPIA = 3;
/** @domName WebKitCSSFilterValue.operationType */
- abstract int get operationType;
+ int get operationType;
}
// 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
@@ -40965,13 +41134,13 @@
abstract class WebKitNamedFlow implements EventTarget {
/** @domName WebKitNamedFlow.firstEmptyRegionIndex */
- abstract int get firstEmptyRegionIndex;
+ int get firstEmptyRegionIndex;
/** @domName WebKitNamedFlow.name */
- abstract String get name;
+ String get name;
/** @domName WebKitNamedFlow.overset */
- abstract bool get overset;
+ bool get overset;
/** @domName WebKitNamedFlow.addEventListener */
void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
@@ -41024,6 +41193,7 @@
// WARNING: Do not edit - generated code.
+
/// @domName WebSocket
abstract class WebSocket implements EventTarget {
@@ -41043,25 +41213,25 @@
static const int OPEN = 1;
/** @domName WebSocket.URL */
- abstract String get URL;
+ String get URL;
/** @domName WebSocket.binaryType */
String binaryType;
/** @domName WebSocket.bufferedAmount */
- abstract int get bufferedAmount;
+ int get bufferedAmount;
/** @domName WebSocket.extensions */
- abstract String get extensions;
+ String get extensions;
/** @domName WebSocket.protocol */
- abstract String get protocol;
+ String get protocol;
/** @domName WebSocket.readyState */
- abstract int get readyState;
+ int get readyState;
/** @domName WebSocket.url */
- abstract String get url;
+ String get url;
/** @domName WebSocket.addEventListener */
void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
@@ -41159,17 +41329,18 @@
// 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.
+
/// @domName WheelEvent
abstract class WheelEvent implements MouseEvent {
/** @domName WheelEvent.webkitDirectionInvertedFromDevice */
- abstract bool get webkitDirectionInvertedFromDevice;
+ bool get webkitDirectionInvertedFromDevice;
/** @domName WheelEvent.wheelDeltaX */
- abstract int get $dom_wheelDeltaX;
+ int get $dom_wheelDeltaX;
/** @domName WheelEvent.wheelDeltaY */
- abstract int get $dom_wheelDeltaY;
+ int get $dom_wheelDeltaY;
/** @domName WheelEvent.initWebKitWheelEvent */
void initWebKitWheelEvent(int wheelDeltaX, int wheelDeltaY, LocalWindow view, int screenX, int screenY, int clientX, int clientY, bool ctrlKey, bool altKey, bool shiftKey, bool metaKey);
@@ -41250,22 +41421,22 @@
static const int TEMPORARY = 0;
/** @domName WorkerContext.indexedDB */
- abstract IDBFactory get indexedDB;
+ IDBFactory get indexedDB;
/** @domName WorkerContext.location */
- abstract WorkerLocation get location;
+ WorkerLocation get location;
/** @domName WorkerContext.navigator */
- abstract WorkerNavigator get navigator;
+ WorkerNavigator get navigator;
/** @domName WorkerContext.self */
- abstract WorkerContext get self;
+ WorkerContext get self;
/** @domName WorkerContext.webkitIndexedDB */
- abstract IDBFactory get webkitIndexedDB;
+ IDBFactory get webkitIndexedDB;
/** @domName WorkerContext.webkitNotifications */
- abstract NotificationCenter get webkitNotifications;
+ NotificationCenter get webkitNotifications;
/** @domName WorkerContext.addEventListener */
void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
@@ -41409,28 +41580,28 @@
abstract class WorkerLocation {
/** @domName WorkerLocation.hash */
- abstract String get hash;
+ String get hash;
/** @domName WorkerLocation.host */
- abstract String get host;
+ String get host;
/** @domName WorkerLocation.hostname */
- abstract String get hostname;
+ String get hostname;
/** @domName WorkerLocation.href */
- abstract String get href;
+ String get href;
/** @domName WorkerLocation.pathname */
- abstract String get pathname;
+ String get pathname;
/** @domName WorkerLocation.port */
- abstract String get port;
+ String get port;
/** @domName WorkerLocation.protocol */
- abstract String get protocol;
+ String get protocol;
/** @domName WorkerLocation.search */
- abstract String get search;
+ String get search;
/** @domName WorkerLocation.toString */
String toString();
@@ -41472,19 +41643,19 @@
abstract class WorkerNavigator {
/** @domName WorkerNavigator.appName */
- abstract String get appName;
+ String get appName;
/** @domName WorkerNavigator.appVersion */
- abstract String get appVersion;
+ String get appVersion;
/** @domName WorkerNavigator.onLine */
- abstract bool get onLine;
+ bool get onLine;
/** @domName WorkerNavigator.platform */
- abstract String get platform;
+ String get platform;
/** @domName WorkerNavigator.userAgent */
- abstract String get userAgent;
+ String get userAgent;
}
// 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
@@ -41579,13 +41750,13 @@
static const int TYPE_ERR = 52;
/** @domName XPathException.code */
- abstract int get code;
+ int get code;
/** @domName XPathException.message */
- abstract String get message;
+ String get message;
/** @domName XPathException.name */
- abstract String get name;
+ String get name;
/** @domName XPathException.toString */
String toString();
@@ -41683,25 +41854,25 @@
static const int UNORDERED_NODE_SNAPSHOT_TYPE = 6;
/** @domName XPathResult.booleanValue */
- abstract bool get booleanValue;
+ bool get booleanValue;
/** @domName XPathResult.invalidIteratorState */
- abstract bool get invalidIteratorState;
+ bool get invalidIteratorState;
/** @domName XPathResult.numberValue */
- abstract num get numberValue;
+ num get numberValue;
/** @domName XPathResult.resultType */
- abstract int get resultType;
+ int get resultType;
/** @domName XPathResult.singleNodeValue */
- abstract Node get singleNodeValue;
+ Node get singleNodeValue;
/** @domName XPathResult.snapshotLength */
- abstract int get snapshotLength;
+ int get snapshotLength;
/** @domName XPathResult.stringValue */
- abstract String get stringValue;
+ String get stringValue;
/** @domName XPathResult.iterateNext */
Node iterateNext();
@@ -41856,6 +42027,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.
+
class _Elements {
@@ -42406,9 +42578,7 @@
void focus();
void blur();
void close();
- void postMessage(Dynamic message,
- String targetOrigin,
- [List messagePorts = null]);
+ void postMessage(var message, String targetOrigin, [List messagePorts = null]);
}
abstract class Location {
@@ -42419,7 +42589,8 @@
void back();
void forward();
void go(int distance);
-}// Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file
+}
+// Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
@@ -43070,7 +43241,7 @@
}
static bool isEmpty(Iterable<Object> iterable) {
- return !iterable.iterator().hasNext();
+ return !iterable.iterator().hasNext;
}
}
// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
@@ -43526,7 +43697,7 @@
void receive(callback(var message)) {
_callback = callback;
- if (_listener === null) {
+ if (_listener == null) {
_listener = (Event e) {
var data = JSON.parse(_getPortSyncEventData(e));
var replyTo = data[0];
@@ -43540,7 +43711,7 @@
void close() {
_portMap.remove(_portId);
- if (_listener !== null) window.on[_listenerName].remove(_listener);
+ if (_listener != null) window.on[_listenerName].remove(_listener);
}
SendPortSync toSendPort() {
@@ -43698,7 +43869,7 @@
* no measurements were actually requested.
*/
void _addMeasurementFrameCallback(TimeoutHandler callback) {
- if (_pendingMeasurementFrameCallbacks === null) {
+ if (_pendingMeasurementFrameCallbacks == null) {
_pendingMeasurementFrameCallbacks = <TimeoutHandler>[];
_maybeScheduleMeasurementFrame();
}
@@ -43715,7 +43886,7 @@
*/
Future _createMeasurementFuture(ComputeValue computeValue,
Completer completer) {
- if (_pendingRequests === null) {
+ if (_pendingRequests == null) {
_pendingRequests = <_MeasurementRequest>[];
_maybeScheduleMeasurementFrame();
}
@@ -43731,7 +43902,7 @@
// We must compute all new values before fulfilling the futures as
// the onComplete callbacks for the futures could modify the DOM making
// subsequent measurement calculations expensive to compute.
- if (_pendingRequests !== null) {
+ if (_pendingRequests != null) {
for (_MeasurementRequest request in _pendingRequests) {
try {
request.value = request.computeValue();
@@ -43746,7 +43917,7 @@
final readyMeasurementFrameCallbacks = _pendingMeasurementFrameCallbacks;
_pendingRequests = null;
_pendingMeasurementFrameCallbacks = null;
- if (completedRequests !== null) {
+ if (completedRequests != null) {
for (_MeasurementRequest request in completedRequests) {
if (request.exception) {
request.completer.completeException(request.value);
@@ -43756,7 +43927,7 @@
}
}
- if (readyMeasurementFrameCallbacks !== null) {
+ if (readyMeasurementFrameCallbacks != null) {
for (TimeoutHandler handler in readyMeasurementFrameCallbacks) {
// TODO(jacobr): wrap each call to a handler in a try-catch block.
handler();
@@ -43825,7 +43996,7 @@
}
static bool isPrimitive(x) {
- return (x === null) || (x is String) || (x is num) || (x is bool);
+ return (x == null) || (x is String) || (x is num) || (x is bool);
}
}
@@ -43837,7 +44008,7 @@
List visitList(List list) {
List copy = _visited[list];
- if (copy !== null) return copy;
+ if (copy != null) return copy;
int len = list.length;
@@ -43852,7 +44023,7 @@
Map visitMap(Map map) {
Map copy = _visited[map];
- if (copy !== null) return copy;
+ if (copy != null) return copy;
// TODO(floitsch): we loose the generic type of the map.
copy = new Map();
@@ -43873,7 +44044,7 @@
visitList(List list) {
int copyId = _visited[list];
- if (copyId !== null) return ['ref', copyId];
+ if (copyId != null) return ['ref', copyId];
int id = _nextFreeRefId++;
_visited[list] = id;
@@ -43884,12 +44055,12 @@
visitMap(Map map) {
int copyId = _visited[map];
- if (copyId !== null) return ['ref', copyId];
+ if (copyId != null) return ['ref', copyId];
int id = _nextFreeRefId++;
_visited[map] = id;
- var keys = _serializeList(map.getKeys());
- var values = _serializeList(map.getValues());
+ var keys = _serializeList(map.keys);
+ var values = _serializeList(map.values);
// TODO(floitsch): we are losing the generic type.
return ['map', id, keys, values];
}
@@ -43906,17 +44077,17 @@
/** Deserializes arrays created with [_Serializer]. */
class _Deserializer {
- Map<int, Dynamic> _deserialized;
+ Map<int, dynamic> _deserialized;
_Deserializer();
static bool isPrimitive(x) {
- return (x === null) || (x is String) || (x is num) || (x is bool);
+ return (x == null) || (x is String) || (x is num) || (x is bool);
}
deserialize(x) {
if (isPrimitive(x)) return x;
- // TODO(floitsch): this should be new HashMap<int, var|Dynamic>()
+ // TODO(floitsch): this should be new HashMap<int, dynamic>()
_deserialized = new HashMap();
return _deserializeHelper(x);
}
@@ -43936,7 +44107,7 @@
_deserializeRef(List x) {
int id = x[1];
var result = _deserialized[id];
- assert(result !== null);
+ assert(result != null);
return result;
}
@@ -44015,7 +44186,7 @@
: super(array),
_length = array.length;
- bool hasNext() => _length > _pos;
+ bool get hasNext => _length > _pos;
final int _length; // Cache array length for faster access.
}
@@ -44026,11 +44197,11 @@
: _array = array,
_pos = 0;
- bool hasNext() => _array.length > _pos;
+ bool get hasNext => _array.length > _pos;
T next() {
- if (!hasNext()) {
- throw const NoMoreElementsException();
+ if (!hasNext) {
+ throw new StateError("No more elements");
}
return _array[_pos++];
}
@@ -44119,7 +44290,7 @@
var _testRunner;
TestRunner get testRunner {
- if (_testRunner === null)
+ if (_testRunner == null)
_testRunner = new TestRunner._(_NPObject.retrieve("testRunner"));
return _testRunner;
}
@@ -44165,7 +44336,7 @@
static Map createMap() => {};
static makeNotImplementedException(String fileName, int lineNo) {
- return new UnsupportedOperationException('[info: $fileName:$lineNo]');
+ return new UnsupportedError('[info: $fileName:$lineNo]');
}
static window() native "Utils_window";
@@ -44237,16 +44408,16 @@
String remove(String key) native "DOMStringMap_remove_Callback";
void clear() => Maps.clear(this);
void forEach(void f(String key, String value)) => Maps.forEach(this, f);
- Collection<String> getKeys() native "DOMStringMap_getKeys_Callback";
- Collection<String> getValues() => Maps.getValues(this);
+ Collection<String> get keys native "DOMStringMap_getKeys_Callback";
+ Collection<String> get values => Maps.getValues(this);
int get length => Maps.length(this);
- bool isEmpty() => Maps.isEmpty(this);
+ bool get isEmpty => Maps.isEmpty(this);
}
get _printClosure => (s) {
try {
window.console.log(s);
- } on Dynamic catch(_) {
+ } catch (_) {
_Utils.print(s);
}
};
diff --git a/lib/html/idl/dart/dart.idl b/lib/html/idl/dart/dart.idl
index 2a319ae..0790ad1 100644
--- a/lib/html/idl/dart/dart.idl
+++ b/lib/html/idl/dart/dart.idl
@@ -1,62 +1,12 @@
// This file introduces / supplements and forces Dart declarations.
-module default {
- ClientRectList implements sequence<ClientRect>;
- CSSRuleList implements sequence<CSSRule>;
- CSSValueList implements sequence<CSSValue>;
- DOMMimeTypeArray implements sequence<DOMMimeType>;
- DOMPluginArray implements sequence<DOMPlugin>;
- EntryArray implements sequence<Entry>;
- EntryArraySync implements sequence<EntrySync>;
- FileList implements sequence<File>;
- GamepadList implements sequence<Gamepad>;
- HTMLAllCollection implements sequence<Node>;
- HTMLCollection implements sequence<Node>;
- MediaStreamList implements sequence<MediaStream>;
- NamedNodeMap implements sequence<Node>;
- NodeList implements sequence<Node>;
- SVGAnimatedLengthList implements sequence<SVGAnimatedLength>;
- SVGAnimatedNumberList implements sequence<SVGAnimatedNumber>;
- SVGAnimatedTransformList implements sequence<SVGAnimateTransformElement>;
- SVGElementInstanceList implements sequence<SVGElementInstance>;
- SVGLengthList implements sequence<SVGLength>;
- SVGNumberList implements sequence<SVGNumber>;
- SVGPathSegList implements sequence<SVGPathSeg>;
- SVGStringList implements sequence<DOMString>;
- SVGTransformList implements sequence<SVGTransform>;
- SourceBufferList implements sequence<SourceBuffer>;
- SpeechGrammarList implements sequence<SpeechGrammar>;
- SpeechInputResultList implements sequence<SpeechInputResult>;
- SpeechRecognitionResultList implements sequence<SpeechRecognitionResult>;
- SQLResultSetRowList implements sequence<Dictionary>;
- StyleSheetList implements sequence<StyleSheet>;
- TextTrackList implements sequence<TextTrack>;
- TextTrackCueList implements sequence<TextTrackCue>;
- TouchList implements sequence<Touch>;
- WebKitAnimationList implements sequence<WebKitAnimation>;
-
- Float32Array implements sequence<double>;
- Float64Array implements sequence<double>;
- Int8Array implements sequence<int>;
- Int16Array implements sequence<int>;
- Int32Array implements sequence<int>;
- Uint8Array implements sequence<int>;
- Uint16Array implements sequence<int>;
- Uint32Array implements sequence<int>;
-
- // Is List<int> because inherits from Uint8Array:
- // Uint8ClampedArray implements sequence<int>;
-}
-
module core {
[Supplemental]
interface Document {
[Suppressed] DOMObject getCSSCanvasContext(in DOMString contextId, in DOMString name, in long width, in long height);
CanvasRenderingContext getCSSCanvasContext(in DOMString contextId, in DOMString name, in long width, in long height);
};
-
- DOMStringList implements sequence<DOMString>;
};
module dom {
diff --git a/lib/html/scripts/css_code_generator.py b/lib/html/scripts/css_code_generator.py
index f098d81..11bf7bc 100644
--- a/lib/html/scripts/css_code_generator.py
+++ b/lib/html/scripts/css_code_generator.py
@@ -109,7 +109,7 @@
CSSStyleDeclarationWrappingImplementation._wrap(ptr) : super._wrap(ptr) {}
static String get _browserPrefix {
- if (_cachedBrowserPrefix === null) {
+ if (_cachedBrowserPrefix == null) {
if (_Device.isFirefox) {
_cachedBrowserPrefix = '-moz-';
} else {
diff --git a/lib/html/scripts/generator.py b/lib/html/scripts/generator.py
index c8ab91a..a7332a9 100644
--- a/lib/html/scripts/generator.py
+++ b/lib/html/scripts/generator.py
@@ -33,6 +33,28 @@
def IsPureInterface(interface_name):
return interface_name in _pure_interfaces
+
+_methods_with_named_formals = set([
+ 'DataView.getFloat32',
+ 'DataView.getFloat64',
+ 'DataView.getInt16',
+ 'DataView.getInt32',
+ 'DataView.getInt8',
+ 'DataView.getUint16',
+ 'DataView.getUint32',
+ 'DataView.getUint8',
+ 'DataView.setFloat32',
+ 'DataView.setFloat64',
+ 'DataView.setInt16',
+ 'DataView.setInt32',
+ 'DataView.setInt8',
+ 'DataView.setUint16',
+ 'DataView.setUint32',
+ 'DataView.setUint8',
+ 'DirectoryEntry.getDirectory',
+ 'DirectoryEntry.getFile',
+ ])
+
#
# Renames for attributes that have names that are not legal Dart names.
#
@@ -72,63 +94,6 @@
def IsRegisteredType(type_name):
return type_name in _idl_type_registry
-def ListImplementationInfo(interface, database):
- """Returns a tuple (elment_type, requires_indexer).
- If interface do not have to implement List, element_type is None.
- Otherwise element_type is list element type and requires_indexer
- is true iff this interface implementation must have indexer and
- false otherwise. False means that interface implementation
- inherits indexer and may just reuse it."""
- element_type = MaybeListElementType(interface)
- if element_type:
- return (element_type, True)
-
- for parent in interface.parents:
- if database.HasInterface(parent.type.id):
- parent_interface = database.GetInterface(parent.type.id)
- (element_type, _) = ListImplementationInfo(parent_interface, database)
- if element_type:
- return (element_type, False)
-
- return (None, None)
-
-
-def MaybeListElementType(interface):
- """Returns the List element type T, or None in interface does not implement
- List<T>.
- """
- for parent in interface.parents:
- match = re.match(r'sequence<(\w*)>$', parent.type.id)
- if match:
- return match.group(1)
- return None
-
-def MaybeTypedArrayElementType(interface):
- """Returns the typed array element type, or None in interface is not a
- TypedArray.
- """
- # Typed arrays implement ArrayBufferView and List<T>.
- for parent in interface.parents:
- if parent.type.id == 'ArrayBufferView':
- return MaybeListElementType(interface)
- return None
-
-def MaybeTypedArrayElementTypeInHierarchy(interface, database):
- """Returns the typed array element type, or None in interface is not a
- TypedArray. Checks the whole parent hierarchy.
- """
- element_type = MaybeTypedArrayElementType(interface)
- if element_type:
- return element_type
- for parent in interface.parents:
- if database.HasInterface(parent.type.id):
- parent_interface = database.GetInterface(parent.type.id)
- element_type = MaybeTypedArrayElementType(parent_interface)
- if element_type:
- return element_type
-
- return None
-
def MakeNativeSpec(javascript_binding_name):
if javascript_binding_name in _dart2js_dom_custom_native_specs:
return _dart2js_dom_custom_native_specs[javascript_binding_name]
@@ -237,7 +202,8 @@
info.js_name = info.declared_name
info.type_name = operations[0].type.id # TODO: widen.
info.param_infos = _BuildArguments([op.arguments for op in split_operations], interface)
- info.requires_named_arguments = False
+ full_name = '%s.%s' % (interface.id, info.declared_name)
+ info.requires_named_arguments = full_name in _methods_with_named_formals
return info
@@ -308,11 +274,11 @@
where a type may be omitted.
The string is empty or has a trailing space.
"""
- if dart_type == 'Dynamic':
+ if dart_type == 'dynamic':
if comment:
return '/*%s*/ ' % comment # Just a comment foo(/*T*/ x)
else:
- return '' # foo(x) looks nicer than foo(Dynamic x)
+ return '' # foo(x) looks nicer than foo(var|dynamic x)
else:
return dart_type + ' '
@@ -320,7 +286,7 @@
def TypeOrVar(dart_type, comment=None):
"""Returns string for declaring something with |dart_type| in a context
where if a type is omitted, 'var' must be used instead."""
- if dart_type == 'Dynamic':
+ if dart_type == 'dynamic':
if comment:
return 'var /*%s*/' % comment # e.g. var /*T*/ x;
else:
@@ -343,7 +309,7 @@
def ParametersDeclaration(self, rename_type, force_optional=False):
def FormatParam(param):
- dart_type = rename_type(param.type_id) if param.type_id else 'Dynamic'
+ dart_type = rename_type(param.type_id) if param.type_id else 'dynamic'
return '%s%s' % (TypeOrNothing(dart_type, param.type_id), param.name)
required = []
@@ -437,7 +403,7 @@
def CopyAndWidenDefaultParameters(self):
- """Returns equivalent OperationInfo, but default parameters are Dynamic."""
+ """Returns equivalent OperationInfo, but default parameters are dynamic."""
info = copy.copy(self)
info.param_infos = [param.Copy() for param in self.param_infos]
for param in info.param_infos:
@@ -477,7 +443,7 @@
# name
def TypeName(type_ids, interface):
# Dynamically type this field for now.
- return 'Dynamic'
+ return 'dynamic'
def ImplementationClassNameForInterfaceName(interface_name):
return '_%sImpl' % interface_name
@@ -507,7 +473,7 @@
#
_serialize_SSV = Conversion('_convertDartToNative_SerializedScriptValue',
- 'Dynamic', 'Dynamic')
+ 'dynamic', 'dynamic')
dart2js_conversions = {
# Wrap non-local Windows. We need to check EventTarget (the base type)
@@ -523,19 +489,19 @@
'EventTarget'),
'IDBKey get':
- Conversion('_convertNativeToDart_IDBKey', 'Dynamic', 'Dynamic'),
+ Conversion('_convertNativeToDart_IDBKey', 'dynamic', 'dynamic'),
'IDBKey set':
- Conversion('_convertDartToNative_IDBKey', 'Dynamic', 'Dynamic'),
+ Conversion('_convertDartToNative_IDBKey', 'dynamic', 'dynamic'),
'ImageData get':
- Conversion('_convertNativeToDart_ImageData', 'Dynamic', 'ImageData'),
+ Conversion('_convertNativeToDart_ImageData', 'dynamic', 'ImageData'),
'ImageData set':
- Conversion('_convertDartToNative_ImageData', 'ImageData', 'Dynamic'),
+ Conversion('_convertDartToNative_ImageData', 'ImageData', 'dynamic'),
'Dictionary get':
- Conversion('_convertNativeToDart_Dictionary', 'Dynamic', 'Map'),
+ Conversion('_convertNativeToDart_Dictionary', 'dynamic', 'Map'),
'Dictionary set':
- Conversion('_convertDartToNative_Dictionary', 'Map', 'Dynamic'),
+ Conversion('_convertDartToNative_Dictionary', 'Map', 'dynamic'),
'DOMString[] set':
Conversion('_convertDartToNative_StringArray', 'List<String>', 'List'),
@@ -553,21 +519,21 @@
# receiving message via MessageEvent
'DOMObject get MessageEvent.data':
Conversion('_convertNativeToDart_SerializedScriptValue',
- 'Dynamic', 'Dynamic'),
+ 'dynamic', 'dynamic'),
# IDBAny is problematic. Some uses are just a union of other IDB types,
# which need no conversion.. Others include data values which require
# serialized script value processing.
'IDBAny get IDBCursorWithValue.value':
- Conversion('_convertNativeToDart_IDBAny', 'Dynamic', 'Dynamic'),
+ Conversion('_convertNativeToDart_IDBAny', 'dynamic', 'dynamic'),
# This is problematic. The result property of IDBRequest is used for
# all requests. Read requests like IDBDataStore.getObject need
# conversion, but other requests like opening a database return
# something that does not need conversion.
'IDBAny get IDBRequest.result':
- Conversion('_convertNativeToDart_IDBAny', 'Dynamic', 'Dynamic'),
+ Conversion('_convertNativeToDart_IDBAny', 'dynamic', 'dynamic'),
# "source: On getting, returns the IDBObjectStore or IDBIndex that the
# cursor is iterating. ...". So we should not try to convert it.
@@ -609,6 +575,12 @@
def has_generated_interface(self):
raise NotImplementedError()
+ def list_item_type(self):
+ raise NotImplementedError()
+
+ def is_typed_array(self):
+ raise NotImplementedError()
+
def merged_interface(self):
return None
@@ -696,14 +668,25 @@
class InterfaceIDLTypeInfo(IDLTypeInfo):
- def __init__(self, idl_type, data, dart_interface_name):
+ def __init__(self, idl_type, data, dart_interface_name, type_registry):
super(InterfaceIDLTypeInfo, self).__init__(idl_type, data)
self._dart_interface_name = dart_interface_name
+ self._type_registry = type_registry
def dart_type(self):
+ # TODO(podivilov): why NodeList is special?
+ if self.idl_type() == 'NodeList':
+ return 'List<Node>'
+ if self.list_item_type() and not self.has_generated_interface():
+ return 'List<%s>' % self._type_registry.TypeInfo(self._data.item_type).dart_type()
return self._data.dart_type or self._dart_interface_name
def narrow_dart_type(self):
+ # TODO(podivilov): why NodeList is special?
+ if self.idl_type() == 'NodeList':
+ return 'List<Node>'
+ if self.list_item_type():
+ return ImplementationClassNameForInterfaceName(self.idl_type())
# TODO(podivilov): only primitive and collection types should override
# dart_type.
if self._data.dart_type != None:
@@ -713,9 +696,13 @@
return ImplementationClassNameForInterfaceName(self.interface_name())
def interface_name(self):
+ if self.list_item_type() and not self.has_generated_interface():
+ return self.dart_type()
return self._dart_interface_name
def implementation_name(self):
+ if self.list_item_type():
+ return ImplementationClassNameForInterfaceName(self.idl_type())
implementation_name = ImplementationClassNameForInterfaceName(
self.interface_name())
if self.merged_into():
@@ -723,7 +710,13 @@
return implementation_name
def has_generated_interface(self):
- return True
+ return not self._data.suppress_interface
+
+ def list_item_type(self):
+ return self._data.item_type
+
+ def is_typed_array(self):
+ return self._data.is_typed_array
def merged_interface(self):
# All constants, attributes, and operations of merged interface should be
@@ -751,38 +744,6 @@
super(CallbackIDLTypeInfo, self).__init__(idl_type, data)
-# Type info for DOM types that are converted to dart lists and therefore whose
-# actual interface generation should be suppressed. For type information, we
-# still generate the implementations though, so these types should not be
-# suppressed entirely.
-class ListLikeIDLTypeInfo(IDLTypeInfo):
- def __init__(self, idl_type, data, item_info):
- super(ListLikeIDLTypeInfo, self).__init__(idl_type, data)
- self._item_info = item_info
-
- def dart_type(self):
- return 'List<%s>' % self._item_info.dart_type()
-
- def narrow_dart_type(self):
- if self.has_generated_interface():
- return self.dart_type()
- return ImplementationClassNameForInterfaceName(self.idl_type())
-
- def interface_name(self):
- if self.has_generated_interface():
- return self.idl_type()
- return self.dart_type()
-
- def implementation_name(self):
- return ImplementationClassNameForInterfaceName(self.idl_type())
-
- def has_generated_interface(self):
- # Don't generate interfaces for list-like types.
- # TODO(podivilov): why NodeList is special? Is it indeed a list-like type
- # or should just implement sequence<Node>?
- return self.idl_type() == 'NodeList'
-
-
class SequenceIDLTypeInfo(IDLTypeInfo):
def __init__(self, idl_type, data, item_info):
super(SequenceIDLTypeInfo, self).__init__(idl_type, data)
@@ -868,8 +829,9 @@
class SVGTearOffIDLTypeInfo(InterfaceIDLTypeInfo):
- def __init__(self, idl_type, data):
- super(SVGTearOffIDLTypeInfo, self).__init__(idl_type, data, idl_type)
+ def __init__(self, idl_type, data, type_registry):
+ super(SVGTearOffIDLTypeInfo, self).__init__(
+ idl_type, data, idl_type, type_registry)
def native_type(self):
if self._data.native_type:
@@ -913,7 +875,7 @@
webcore_getter_name='getAttribute',
webcore_setter_name='setAttribute',
requires_v8_scope=False,
- item_type=None):
+ item_type=None, suppress_interface=False, is_typed_array=False):
self.clazz = clazz
self.dart_type = dart_type
self.native_type = native_type
@@ -926,6 +888,12 @@
self.webcore_setter_name = webcore_setter_name
self.requires_v8_scope = requires_v8_scope
self.item_type = item_type
+ self.suppress_interface = suppress_interface
+ self.is_typed_array = is_typed_array
+
+
+def TypedArrayTypeData(item_type):
+ return TypeData(clazz='Interface', item_type=item_type, is_typed_array=True)
_idl_type_registry = {
@@ -954,7 +922,7 @@
'any': TypeData(clazz='Primitive', dart_type='Object', native_type='ScriptValue', requires_v8_scope=True),
'Array': TypeData(clazz='Primitive', dart_type='List'),
- 'custom': TypeData(clazz='Primitive', dart_type='Dynamic'),
+ 'custom': TypeData(clazz='Primitive', dart_type='dynamic'),
'Date': TypeData(clazz='Primitive', dart_type='Date', native_type='double'),
'DOMObject': TypeData(clazz='Primitive', dart_type='Object', native_type='ScriptValue'),
'DOMString': TypeData(clazz='Primitive', dart_type='String', native_type='String'),
@@ -971,7 +939,7 @@
# TODO(sra): Come up with some meaningful name so that where this appears in
# the documentation, the user is made aware that only a limited subset of
# serializable types are actually permitted.
- 'SerializedScriptValue': TypeData(clazz='Primitive', dart_type='Dynamic'),
+ 'SerializedScriptValue': TypeData(clazz='Primitive', dart_type='dynamic'),
# TODO(sra): Flags is really a dictionary: {create:bool, exclusive:bool}
# http://dev.w3.org/2009/dap/file-system/file-dir-sys.html#the-flags-interface
'WebKitFlags': TypeData(clazz='Primitive', dart_type='Object'),
@@ -991,48 +959,86 @@
'HTMLDocument': TypeData(clazz='Interface', merged_into='Document'),
'HTMLElement': TypeData(clazz='Interface', merged_into='Element',
custom_to_dart=True),
- 'IDBAny': TypeData(clazz='Interface', dart_type='Dynamic', custom_to_native=True),
- 'IDBKey': TypeData(clazz='Interface', dart_type='Dynamic', custom_to_native=True),
+ 'IDBAny': TypeData(clazz='Interface', dart_type='dynamic', custom_to_native=True),
+ 'IDBKey': TypeData(clazz='Interface', dart_type='dynamic', custom_to_native=True),
'MutationRecordArray': TypeData(clazz='Interface', # C++ pass by pointer.
native_type='MutationRecordArray', dart_type='List<MutationRecord>'),
'StyleSheet': TypeData(clazz='Interface', conversion_includes=['CSSStyleSheet']),
'SVGElement': TypeData(clazz='Interface', custom_to_dart=True),
- 'ClientRectList': TypeData(clazz='ListLike', item_type='ClientRect'),
- 'CSSRuleList': TypeData(clazz='ListLike', item_type='CSSRule'),
- 'CSSValueList': TypeData(clazz='ListLike', item_type='CSSValue'),
- 'DOMStringList': TypeData(clazz='ListLike', item_type='DOMString',
- custom_to_native=True),
- 'EntryArray': TypeData(clazz='ListLike', item_type='Entry'),
- 'EntryArraySync': TypeData(clazz='ListLike', item_type='EntrySync'),
- 'FileList': TypeData(clazz='ListLike', item_type='File'),
- 'GamepadList': TypeData(clazz='ListLike', item_type='Gamepad'),
- 'MediaStreamList': TypeData(clazz='ListLike', item_type='MediaStream'),
- 'NodeList': TypeData(clazz='ListLike', item_type='Node'),
- 'SVGElementInstanceList': TypeData(clazz='ListLike',
- item_type='SVGElementInstance'),
- 'SpeechInputResultList': TypeData(clazz='ListLike',
- item_type='SpeechInputResult'),
- 'SpeechRecognitionResultList': TypeData(clazz='ListLike',
- item_type='SpeechRecognitionResult'),
- 'StyleSheetList': TypeData(clazz='ListLike', item_type='StyleSheet'),
- 'WebKitAnimationList': TypeData(clazz='ListLike',
- item_type='WebKitAnimation'),
+ 'ClientRectList': TypeData(clazz='Interface',
+ item_type='ClientRect', suppress_interface=True),
+ 'CSSRuleList': TypeData(clazz='Interface',
+ item_type='CSSRule', suppress_interface=True),
+ 'CSSValueList': TypeData(clazz='Interface',
+ item_type='CSSValue', suppress_interface=True),
+ 'DOMMimeTypeArray': TypeData(clazz='Interface', item_type='DOMMimeType'),
+ 'DOMPluginArray': TypeData(clazz='Interface', item_type='DOMPlugin'),
+ 'DOMStringList': TypeData(clazz='Interface', item_type='DOMString',
+ suppress_interface=True, custom_to_native=True),
+ 'EntryArray': TypeData(clazz='Interface', item_type='Entry',
+ suppress_interface=True),
+ 'EntryArraySync': TypeData(clazz='Interface', item_type='EntrySync',
+ suppress_interface=True),
+ 'FileList': TypeData(clazz='Interface', item_type='File',
+ suppress_interface=True),
+ 'GamepadList': TypeData(clazz='Interface', item_type='Gamepad',
+ suppress_interface=True),
+ 'HTMLAllCollection': TypeData(clazz='Interface', item_type='Node'),
+ 'HTMLCollection': TypeData(clazz='Interface', item_type='Node'),
+ 'MediaStreamList': TypeData(clazz='Interface',
+ item_type='MediaStream', suppress_interface=True),
+ 'NamedNodeMap': TypeData(clazz='Interface', item_type='Node'),
+ 'NodeList': TypeData(clazz='Interface', item_type='Node'),
+ 'SVGAnimatedLengthList': TypeData(clazz='Interface',
+ item_type='SVGAnimatedLength'),
+ 'SVGAnimatedNumberList': TypeData(clazz='Interface',
+ item_type='SVGAnimatedNumber'),
+ 'SVGAnimatedTransformList': TypeData(clazz='Interface',
+ item_type='SVGAnimateTransformElement'),
+ 'SVGElementInstanceList': TypeData(clazz='Interface',
+ item_type='SVGElementInstance', suppress_interface=True),
+ 'SourceBufferList': TypeData(clazz='Interface', item_type='SourceBuffer'),
+ 'SpeechGrammarList': TypeData(clazz='Interface', item_type='SpeechGrammar'),
+ 'SpeechInputResultList': TypeData(clazz='Interface',
+ item_type='SpeechInputResult', suppress_interface=True),
+ 'SpeechRecognitionResultList': TypeData(clazz='Interface',
+ item_type='SpeechRecognitionResult', suppress_interface=True),
+ 'SQLResultSetRowList': TypeData(clazz='Interface', item_type='Dictionary'),
+ 'StyleSheetList': TypeData(clazz='Interface',
+ item_type='StyleSheet', suppress_interface=True),
+ 'TextTrackCueList': TypeData(clazz='Interface', item_type='TextTrackCue'),
+ 'TextTrackList': TypeData(clazz='Interface', item_type='TextTrack'),
+ 'TouchList': TypeData(clazz='Interface', item_type='Touch'),
+ 'WebKitAnimationList': TypeData(clazz='Interface',
+ item_type='WebKitAnimation', suppress_interface=True),
+
+ 'Float32Array': TypedArrayTypeData('double'),
+ 'Float64Array': TypedArrayTypeData('double'),
+ 'Int8Array': TypedArrayTypeData('int'),
+ 'Int16Array': TypedArrayTypeData('int'),
+ 'Int32Array': TypedArrayTypeData('int'),
+ 'Uint8Array': TypedArrayTypeData('int'),
+ 'Uint16Array': TypedArrayTypeData('int'),
+ 'Uint32Array': TypedArrayTypeData('int'),
'SVGAngle': TypeData(clazz='SVGTearOff'),
'SVGLength': TypeData(clazz='SVGTearOff'),
- 'SVGLengthList': TypeData(clazz='SVGTearOff'),
+ 'SVGLengthList': TypeData(clazz='SVGTearOff', item_type='SVGLength'),
'SVGMatrix': TypeData(clazz='SVGTearOff'),
'SVGNumber': TypeData(clazz='SVGTearOff', native_type='SVGPropertyTearOff<float>'),
- 'SVGNumberList': TypeData(clazz='SVGTearOff'),
- 'SVGPathSegList': TypeData(clazz='SVGTearOff', native_type='SVGPathSegListPropertyTearOff'),
+ 'SVGNumberList': TypeData(clazz='SVGTearOff', item_type='SVGNumber'),
+ 'SVGPathSegList': TypeData(clazz='SVGTearOff', item_type='SVGPathSeg',
+ native_type='SVGPathSegListPropertyTearOff'),
'SVGPoint': TypeData(clazz='SVGTearOff', native_type='SVGPropertyTearOff<FloatPoint>'),
'SVGPointList': TypeData(clazz='SVGTearOff'),
'SVGPreserveAspectRatio': TypeData(clazz='SVGTearOff'),
'SVGRect': TypeData(clazz='SVGTearOff', native_type='SVGPropertyTearOff<FloatRect>'),
- 'SVGStringList': TypeData(clazz='SVGTearOff', native_type='SVGStaticListPropertyTearOff<SVGStringList>'),
+ 'SVGStringList': TypeData(clazz='SVGTearOff', item_type='DOMString',
+ native_type='SVGStaticListPropertyTearOff<SVGStringList>'),
'SVGTransform': TypeData(clazz='SVGTearOff'),
- 'SVGTransformList': TypeData(clazz='SVGTearOff', native_type='SVGTransformListPropertyTearOff'),
+ 'SVGTransformList': TypeData(clazz='SVGTearOff', item_type='SVGTransform',
+ native_type='SVGTransformListPropertyTearOff'),
}
_svg_supplemental_includes = [
@@ -1073,7 +1079,8 @@
return InterfaceIDLTypeInfo(
type_name,
TypeData('Interface'),
- self._renamer.RenameInterface(interface))
+ self._renamer.RenameInterface(interface),
+ self)
type_data = _idl_type_registry.get(type_name)
@@ -1083,10 +1090,11 @@
self._database.GetInterface(type_name))
else:
dart_interface_name = type_name
- return InterfaceIDLTypeInfo(type_name, type_data, dart_interface_name)
+ return InterfaceIDLTypeInfo(type_name, type_data, dart_interface_name,
+ self)
- if type_data.clazz == 'ListLike':
- return ListLikeIDLTypeInfo(type_name, type_data, self.TypeInfo(type_data.item_type))
+ if type_data.clazz == 'SVGTearOff':
+ return SVGTearOffIDLTypeInfo(type_name, type_data, self)
class_name = '%sIDLTypeInfo' % type_data.clazz
return globals()[class_name](type_name, type_data)
diff --git a/lib/html/scripts/htmlrenamer.py b/lib/html/scripts/htmlrenamer.py
index ee7892f..83057fe 100644
--- a/lib/html/scripts/htmlrenamer.py
+++ b/lib/html/scripts/htmlrenamer.py
@@ -99,9 +99,6 @@
'SVGElement.className': '$dom_svgClassName',
'SVGAnimatedString.className': '$dom_svgClassName',
'SVGStylable.className': '$dom_svgClassName',
- 'LocalWindow.webkitCancelAnimationFrame': 'cancelAnimationFrame',
- 'LocalWindow.webkitCancelRequestAnimationFrame': 'cancelRequestAnimationFrame',
- 'LocalWindow.webkitRequestAnimationFrame': 'requestAnimationFrame',
}
# Members and classes from the dom that should be removed completely from
@@ -211,7 +208,6 @@
"Element.get:itemProp",
'Element.scrollIntoView',
'Element.get:classList',
- "EmbedElement.getSVGDocument",
"FormElement.get:elements",
"HTMLFrameElement.*",
"HTMLFrameSetElement.*",
@@ -219,10 +215,8 @@
"HtmlElement.manifest",
"Document.version",
"Document.manifest",
-# "IFrameElement.getSVGDocument", #TODO(jacobr): should this be removed
"InputElement.dirName",
"HTMLIsIndexElement.*",
- "ObjectElement.getSVGDocument",
"HTMLOptionsCollection.*",
"HTMLPropertiesCollection.*",
"SelectElement.remove",
@@ -265,8 +259,6 @@
"Node.lookupPrefix",
"Node.get:PROCESSING_INSTRUCTION_NODE",
'ShadowRoot.getElementsByTagNameNS',
- "IFrameElement.get:contentDocument",
- "LocalWindow.get:frameElement",
"LocalWindow.get:frames",
"LocalWindow.get:length",
"LocalWindow.webkitCancelRequestAnimationFrame",
@@ -286,7 +278,7 @@
return html_interface_renames[interface.id]
return interface.id
- def RenameMember(self, interface_name, member, member_prefix=''):
+ def RenameMember(self, interface_name, member_node, member, member_prefix=''):
"""
Returns the name of the member in the HTML library or None if the member is
suppressed in the HTML library
@@ -296,6 +288,9 @@
if self._FindMatch(interface, member, member_prefix, _removed_html_members):
return None
+ if 'CheckSecurityForNode' in member_node.ext_attrs:
+ return None
+
name = self._FindMatch(interface, member, member_prefix,
_renamed_html_members)
target_name = _renamed_html_members[name] if name else member
diff --git a/lib/html/scripts/idlparser.dart b/lib/html/scripts/idlparser.dart
index 186d153..11ecad3 100644
--- a/lib/html/scripts/idlparser.dart
+++ b/lib/html/scripts/idlparser.dart
@@ -177,7 +177,7 @@
bool has(String key) => map.containsKey(key);
formatMap() {
- if (map.isEmpty())
+ if (map.isEmpty)
return '';
StringBuffer sb = new StringBuffer();
map.forEach((k, v) {
diff --git a/lib/html/scripts/idlparser_test.dart b/lib/html/scripts/idlparser_test.dart
index bfe2906..126d8cf 100644
--- a/lib/html/scripts/idlparser_test.dart
+++ b/lib/html/scripts/idlparser_test.dart
@@ -2,10 +2,12 @@
// 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('idlparser_test');
-#import('../../../utils/peg/pegparser.dart');
-#source('idlparser.dart');
-#source('idlrenderer.dart');
+library idlparser_test;
+
+import '../../../utils/peg/pegparser.dart';
+
+part 'idlparser.dart';
+part 'idlrenderer.dart';
main() {
IDLParser parser = new IDLParser(FREMONTCUT_SYNTAX);
diff --git a/lib/html/scripts/idlrenderer.dart b/lib/html/scripts/idlrenderer.dart
index e62c4a7..9bfcd4f 100644
--- a/lib/html/scripts/idlrenderer.dart
+++ b/lib/html/scripts/idlrenderer.dart
@@ -48,7 +48,7 @@
if (node == null) {
return;
} else if (node is String) {
- if (output.last().endsWith('\n'))
+ if (output.last.endsWith('\n'))
output.addAll(indent_stack);
output.add(node);
} else if (node is List) {
@@ -75,13 +75,13 @@
w(node.extAttrs);
w('interface ${node.id}');
indented(() {
- if (!node.parents.isEmpty()) {
+ if (!node.parents.isEmpty) {
wln(' :');
w(node.parents, ',\n');
}
wln(' {');
section(list, comment) {
- if (list != null && !list.isEmpty()) {
+ if (list != null && !list.isEmpty) {
wln();
wln(comment);
w(sort(list));
@@ -97,14 +97,14 @@
w(node.annotations);
w(node.type.id);
} else if (node is IDLAnnotations) {
- for (var name in sorted(node.map.getKeys())) {
+ for (var name in sorted(node.map.keys)) {
IDLAnnotation annotation = node.map[name];
var args = annotation.map;
- if (args.isEmpty()) {
+ if (args.isEmpty) {
w('@$name');
} else {
var formattedArgs = [];
- for (var argName in sorted(args.getKeys())) {
+ for (var argName in sorted(args.keys)) {
var argValue = args[argName];
if (argValue == null)
formattedArgs.add(argName);
@@ -116,10 +116,10 @@
w(' ');
}
} else if (node is IDLExtAttrs) {
- if(!node.map.isEmpty()) {
+ if(!node.map.isEmpty) {
w('[');
var sep = null;
- for (var name in sorted(node.map.getKeys())) {
+ for (var name in sorted(node.map.keys)) {
w(sep);
sep = ', ';
w(name);
@@ -149,7 +149,7 @@
} else if (node is IDLOperation) {
w(node.annotations);
w(node.extAttrs);
- if (node.specials != null && !node.specials.isEmpty()) {
+ if (node.specials != null && !node.specials.isEmpty) {
w(node.specials, ' ');
w(' ');
}
diff --git a/lib/html/scripts/systemhtml.py b/lib/html/scripts/systemhtml.py
index 56182c1..1528ccf 100644
--- a/lib/html/scripts/systemhtml.py
+++ b/lib/html/scripts/systemhtml.py
@@ -25,10 +25,12 @@
'SelectElement.options',
'SelectElement.selectedOptions',
'TableElement.createTBody',
+ 'LocalWindow.cancelAnimationFrame',
'LocalWindow.document',
'LocalWindow.indexedDB',
'LocalWindow.location',
'LocalWindow.open',
+ 'LocalWindow.requestAnimationFrame',
'LocalWindow.webkitCancelAnimationFrame',
'LocalWindow.webkitRequestAnimationFrame',
'WheelEvent.wheelDeltaX',
@@ -240,22 +242,14 @@
self._template_loader.Load('interface.darttemplate'))
implements = []
- suppressed_implements = []
-
for parent in self._interface.parents:
parent_type_info = self._type_registry.TypeInfo(parent.type.id)
- parent_interface_name = parent_type_info.interface_name()
- # TODO(vsm): Remove source_filter.
- if MatchSourceFilter(parent):
- # Parent is a DOM type.
- implements.append(parent_interface_name)
- elif '<' in parent.type.id:
- # Parent is a Dart collection type.
- # TODO(vsm): Make this check more robust.
- implements.append(parent_interface_name)
- else:
- suppressed_implements.append('%s.%s' %
- (self._common_prefix, parent_interface_name))
+ implements.append(parent_type_info.interface_name())
+
+ if self._interface_type_info.list_item_type():
+ item_type_info = self._type_registry.TypeInfo(
+ self._interface_type_info.list_item_type())
+ implements.append('List<%s>' % item_type_info.dart_type())
if interface_name in _secure_base_types:
implements.append(_secure_base_types[interface_name])
@@ -265,9 +259,6 @@
if implements:
implements_str += ' implements ' + ', '.join(implements)
comment = ','
- if suppressed_implements:
- implements_str += ' /*%s %s */' % (comment,
- ', '.join(suppressed_implements))
factory_provider = None
if interface_name in interface_factories:
@@ -337,8 +328,12 @@
constructor_info.GenerateFactoryInvocation(
self._DartType, self._members_emitter, factory_provider)
- element_type = MaybeTypedArrayElementTypeInHierarchy(
- self._interface, self._database)
+ element_type = None
+ for interface in self._database.Hierarchy(self._interface):
+ type_info = self._type_registry.TypeInfo(interface.id)
+ if type_info.is_typed_array():
+ element_type = type_info.list_item_type()
+ break
if element_type:
self._members_emitter.Emit(
'\n'
@@ -383,13 +378,19 @@
# The implementation should define an indexer if the interface directly
# extends List.
- (element_type, requires_indexer) = ListImplementationInfo(
- interface, self._database)
- if element_type:
- if requires_indexer:
- self.AddIndexer(element_type)
- else:
- self.AmendIndexer(element_type)
+ element_type = None
+ requires_indexer = False
+ if self._interface_type_info.list_item_type():
+ self.AddIndexer(self._interface_type_info.list_item_type())
+ else:
+ for parent in self._database.Hierarchy(self._interface):
+ if parent == self._interface:
+ continue
+ parent_type_info = self._type_registry.TypeInfo(parent.id)
+ if parent_type_info.list_item_type():
+ self.AmendIndexer(parent_type_info.list_item_type())
+ break
+
# Group overloaded operations by id
operationsById = {}
for operation in interface.operations:
@@ -439,13 +440,13 @@
def AddAttribute(self, attribute, is_secondary=False):
dom_name = DartDomNameOfAttribute(attribute)
html_name = self._renamer.RenameMember(
- self._interface.id, dom_name, 'get:')
+ self._interface.id, attribute, dom_name, 'get:')
if not html_name or self._IsPrivate(html_name):
return
html_setter_name = self._renamer.RenameMember(
- self._interface.id, dom_name, 'set:')
+ self._interface.id, attribute, dom_name, 'set:')
read_only = (attribute.is_read_only or 'Replaceable' in attribute.ext_attrs
or not html_setter_name)
@@ -457,7 +458,7 @@
DOMINTERFACE=attribute.doc_js_interface_name,
DOMNAME=dom_name)
if read_only:
- template = '\n abstract $TYPE get $NAME;\n'
+ template = '\n $TYPE get $NAME;\n'
else:
template = '\n $TYPE $NAME;\n'
@@ -477,7 +478,13 @@
operations - contains the overloads, one or more operations with the same
name.
"""
- html_name = self._renamer.RenameMember(self._interface.id, info.name)
+ # FIXME: When we pass in operations[0] below, we're assuming all
+ # overloaded operations have the same security attributes. This
+ # is currently true, but we should consider filtering earlier or
+ # merging the relevant data into info itself.
+ html_name = self._renamer.RenameMember(self._interface.id,
+ info.operations[0],
+ info.name)
if not html_name:
if info.name == 'item':
# FIXME: item should be renamed to operator[], not removed.
@@ -606,10 +613,10 @@
def AdditionalImplementedInterfaces(self):
# TODO: Include all implemented interfaces, including other Lists.
implements = []
- element_type = MaybeTypedArrayElementType(self._interface)
- if element_type:
+ if self._interface_type_info.is_typed_array():
+ element_type = self._interface_type_info.list_item_type()
implements.append('List<%s>' % self._DartType(element_type))
- if self._HasJavaScriptIndexingBehaviour():
+ if self._interface_type_info.list_item_type():
implements.append('JavaScriptIndexingBehavior')
return implements
@@ -692,7 +699,7 @@
self._members_emitter.Emit(
'\n'
' void operator[]=(int index, $TYPE value) {\n'
- ' throw new UnsupportedOperationException("Cannot assign element of immutable List.");\n'
+ ' throw new UnsupportedError("Cannot assign element of immutable List.");\n'
' }\n',
TYPE=self._NarrowInputType(element_type))
@@ -773,7 +780,7 @@
return_type = self._NarrowOutputType(attr.type.id)
self._members_emitter.Emit(
# TODO(sra): Use metadata to provide native name.
- '\n $TYPE get $HTML_NAME() => JS("$TYPE", "#.$NAME", this);'
+ '\n $TYPE get $HTML_NAME => JS("$TYPE", "#.$NAME", this);'
'\n',
HTML_NAME=html_name,
NAME=attr.id,
@@ -797,7 +804,7 @@
self._members_emitter.Emit(
# TODO(sra): Use metadata to provide native name.
'\n $RETURN_TYPE get $HTML_NAME => $CONVERT(this._$(HTML_NAME));'
- '\n $NATIVE_TYPE get _$HTML_NAME() =>'
+ '\n $NATIVE_TYPE get _$HTML_NAME =>'
' JS("$NATIVE_TYPE", "#.$NAME", this);'
'\n',
CONVERT=conversion.function_name,
@@ -882,7 +889,7 @@
if conversion:
return conversion.input_type
else:
- return self._NarrowInputType(type_name) if type_name else 'Dynamic'
+ return self._NarrowInputType(type_name) if type_name else 'dynamic'
body = self._members_emitter.Emit(
'\n'
@@ -943,7 +950,7 @@
# be conservative.
if param_type == verified_type:
if param_type in ['String', 'num', 'int', 'double', 'bool', 'Object']:
- param_type = 'Dynamic'
+ param_type = 'dynamic'
target_parameters.append(
'%s%s' % (TypeOrNothing(param_type), param_name))
@@ -974,12 +981,12 @@
argument = operation.arguments[i]
parameter_name = parameter_names[i]
test_type = self._DartType(argument.type.id)
- if test_type in ['Dynamic', 'Object']:
+ if test_type in ['dynamic', 'Object']:
checks[i] = '?%s' % parameter_name
elif test_type == parameter_types[i]:
checks[i] = 'true'
else:
- checks[i] = '(%s is %s || %s === null)' % (
+ checks[i] = '(%s is %s || %s == null)' % (
parameter_name, test_type, parameter_name)
# There can be multiple presence checks. We need them all since a later
# optional argument could have been passed by name, leaving 'holes'.
@@ -1035,13 +1042,6 @@
def CustomJSMembers(self):
return _js_custom_members
- def _HasJavaScriptIndexingBehaviour(self):
- """Returns True if the native object has an indexer and length property."""
- (element_type, requires_indexer) = ListImplementationInfo(
- self._interface, self._database)
- if element_type and requires_indexer: return True
- return False
-
def _NarrowToImplementationType(self, type_name):
return self._type_registry.TypeInfo(type_name).narrow_dart_type()
@@ -1122,4 +1122,4 @@
for path in sorted(self._path_to_emitter.keys()):
relpath = os.path.relpath(path, library_file_dir)
imports_emitter.Emit(
- "#source('$PATH');\n", PATH=massage_path(relpath))
+ "part '$PATH';\n", PATH=massage_path(relpath))
diff --git a/lib/html/scripts/systemnative.py b/lib/html/scripts/systemnative.py
index 125ee4c..5b8c5b6 100644
--- a/lib/html/scripts/systemnative.py
+++ b/lib/html/scripts/systemnative.py
@@ -66,7 +66,7 @@
'\n'
'bool $CLASS_NAME::handleEvent($PARAMETERS)\n'
'{\n'
- ' if (!m_callback.isolate()->isAlive())\n'
+ ' if (!m_callback.isIsolateAlive())\n'
' return false;\n'
' DartIsolate::Scope scope(m_callback.isolate());\n'
' DartApiScope apiScope;\n'
@@ -274,10 +274,6 @@
TO_DART=to_dart_emitter.Fragments())
def AddAttribute(self, attribute, html_name, read_only):
- if 'CheckSecurityForNode' in attribute.ext_attrs:
- # FIXME: exclude from interface as well.
- return
-
self._AddGetter(attribute, html_name)
if not read_only:
self._AddSetter(attribute, html_name)
@@ -387,7 +383,7 @@
self._members_emitter.Emit(
'\n'
' void operator[]=(int index, $TYPE value) {\n'
- ' throw new UnsupportedOperationException("Cannot assign element of immutable List.");\n'
+ ' throw new UnsupportedError("Cannot assign element of immutable List.");\n'
' }\n',
TYPE=dart_element_type)
@@ -445,10 +441,6 @@
operation = info.operations[0]
- if 'CheckSecurityForNode' in operation.ext_attrs:
- # FIXME: exclude from interface as well.
- return
-
is_custom = 'Custom' in operation.ext_attrs
has_optional_arguments = any(self._IsArgumentOptionalInWebCore(operation, argument) for argument in operation.arguments)
needs_dispatcher = not is_custom and (len(info.operations) > 1 or has_optional_arguments)
@@ -458,7 +450,7 @@
SecureOutputType(self, info.type_name),
html_name,
info.ParametersDeclaration(
- (lambda x: 'Dynamic') if needs_dispatcher else self._DartType))
+ (lambda x: 'dynamic') if needs_dispatcher else self._DartType))
if not needs_dispatcher:
# Bind directly to native implementation
@@ -511,7 +503,7 @@
for i in range(0, argument_count):
argument = operation.arguments[i]
argument_name = argument_names[i]
- checks[i] = '(%s is %s || %s === null)' % (
+ checks[i] = '(%s is %s || %s == null)' % (
argument_name, self._DartType(argument.type.id), argument_name)
GenerateCall(operation, argument_count, checks)
diff --git a/lib/html/src/CrossFrameTypes.dart b/lib/html/src/CrossFrameTypes.dart
index 565c7a7..3804789 100644
--- a/lib/html/src/CrossFrameTypes.dart
+++ b/lib/html/src/CrossFrameTypes.dart
@@ -16,9 +16,7 @@
void focus();
void blur();
void close();
- void postMessage(Dynamic message,
- String targetOrigin,
- [List messagePorts = null]);
+ void postMessage(var message, String targetOrigin, [List messagePorts = null]);
}
abstract class Location {
@@ -29,4 +27,4 @@
void back();
void forward();
void go(int distance);
-}
\ No newline at end of file
+}
diff --git a/lib/html/src/Isolates.dart b/lib/html/src/Isolates.dart
index b378b91..7fc0277 100644
--- a/lib/html/src/Isolates.dart
+++ b/lib/html/src/Isolates.dart
@@ -160,7 +160,7 @@
void receive(callback(var message)) {
_callback = callback;
- if (_listener === null) {
+ if (_listener == null) {
_listener = (Event e) {
var data = JSON.parse(_getPortSyncEventData(e));
var replyTo = data[0];
@@ -174,7 +174,7 @@
void close() {
_portMap.remove(_portId);
- if (_listener !== null) window.on[_listenerName].remove(_listener);
+ if (_listener != null) window.on[_listenerName].remove(_listener);
}
SendPortSync toSendPort() {
diff --git a/lib/html/src/Measurement.dart b/lib/html/src/Measurement.dart
index 54eed3e..4374226 100644
--- a/lib/html/src/Measurement.dart
+++ b/lib/html/src/Measurement.dart
@@ -132,7 +132,7 @@
* no measurements were actually requested.
*/
void _addMeasurementFrameCallback(TimeoutHandler callback) {
- if (_pendingMeasurementFrameCallbacks === null) {
+ if (_pendingMeasurementFrameCallbacks == null) {
_pendingMeasurementFrameCallbacks = <TimeoutHandler>[];
_maybeScheduleMeasurementFrame();
}
@@ -149,7 +149,7 @@
*/
Future _createMeasurementFuture(ComputeValue computeValue,
Completer completer) {
- if (_pendingRequests === null) {
+ if (_pendingRequests == null) {
_pendingRequests = <_MeasurementRequest>[];
_maybeScheduleMeasurementFrame();
}
@@ -165,7 +165,7 @@
// We must compute all new values before fulfilling the futures as
// the onComplete callbacks for the futures could modify the DOM making
// subsequent measurement calculations expensive to compute.
- if (_pendingRequests !== null) {
+ if (_pendingRequests != null) {
for (_MeasurementRequest request in _pendingRequests) {
try {
request.value = request.computeValue();
@@ -180,7 +180,7 @@
final readyMeasurementFrameCallbacks = _pendingMeasurementFrameCallbacks;
_pendingRequests = null;
_pendingMeasurementFrameCallbacks = null;
- if (completedRequests !== null) {
+ if (completedRequests != null) {
for (_MeasurementRequest request in completedRequests) {
if (request.exception) {
request.completer.completeException(request.value);
@@ -190,7 +190,7 @@
}
}
- if (readyMeasurementFrameCallbacks !== null) {
+ if (readyMeasurementFrameCallbacks != null) {
for (TimeoutHandler handler in readyMeasurementFrameCallbacks) {
// TODO(jacobr): wrap each call to a handler in a try-catch block.
handler();
diff --git a/lib/html/src/Serialization.dart b/lib/html/src/Serialization.dart
index 8d9413c..9771c40 100644
--- a/lib/html/src/Serialization.dart
+++ b/lib/html/src/Serialization.dart
@@ -60,7 +60,7 @@
}
static bool isPrimitive(x) {
- return (x === null) || (x is String) || (x is num) || (x is bool);
+ return (x == null) || (x is String) || (x is num) || (x is bool);
}
}
@@ -72,7 +72,7 @@
List visitList(List list) {
List copy = _visited[list];
- if (copy !== null) return copy;
+ if (copy != null) return copy;
int len = list.length;
@@ -87,7 +87,7 @@
Map visitMap(Map map) {
Map copy = _visited[map];
- if (copy !== null) return copy;
+ if (copy != null) return copy;
// TODO(floitsch): we loose the generic type of the map.
copy = new Map();
@@ -108,7 +108,7 @@
visitList(List list) {
int copyId = _visited[list];
- if (copyId !== null) return ['ref', copyId];
+ if (copyId != null) return ['ref', copyId];
int id = _nextFreeRefId++;
_visited[list] = id;
@@ -119,12 +119,12 @@
visitMap(Map map) {
int copyId = _visited[map];
- if (copyId !== null) return ['ref', copyId];
+ if (copyId != null) return ['ref', copyId];
int id = _nextFreeRefId++;
_visited[map] = id;
- var keys = _serializeList(map.getKeys());
- var values = _serializeList(map.getValues());
+ var keys = _serializeList(map.keys);
+ var values = _serializeList(map.values);
// TODO(floitsch): we are losing the generic type.
return ['map', id, keys, values];
}
@@ -141,17 +141,17 @@
/** Deserializes arrays created with [_Serializer]. */
class _Deserializer {
- Map<int, Dynamic> _deserialized;
+ Map<int, dynamic> _deserialized;
_Deserializer();
static bool isPrimitive(x) {
- return (x === null) || (x is String) || (x is num) || (x is bool);
+ return (x == null) || (x is String) || (x is num) || (x is bool);
}
deserialize(x) {
if (isPrimitive(x)) return x;
- // TODO(floitsch): this should be new HashMap<int, var|Dynamic>()
+ // TODO(floitsch): this should be new HashMap<int, dynamic>()
_deserialized = new HashMap();
return _deserializeHelper(x);
}
@@ -171,7 +171,7 @@
_deserializeRef(List x) {
int id = x[1];
var result = _deserialized[id];
- assert(result !== null);
+ assert(result != null);
return result;
}
diff --git a/lib/html/src/_Collections.dart b/lib/html/src/_Collections.dart
index 9096fc6..eb97494 100644
--- a/lib/html/src/_Collections.dart
+++ b/lib/html/src/_Collections.dart
@@ -54,6 +54,6 @@
}
static bool isEmpty(Iterable<Object> iterable) {
- return !iterable.iterator().hasNext();
+ return !iterable.iterator().hasNext;
}
}
diff --git a/lib/html/src/_ListIterators.dart b/lib/html/src/_ListIterators.dart
index 2eb9acc..4dd7745 100644
--- a/lib/html/src/_ListIterators.dart
+++ b/lib/html/src/_ListIterators.dart
@@ -8,7 +8,7 @@
: super(array),
_length = array.length;
- bool hasNext() => _length > _pos;
+ bool get hasNext => _length > _pos;
final int _length; // Cache array length for faster access.
}
@@ -19,11 +19,11 @@
: _array = array,
_pos = 0;
- bool hasNext() => _array.length > _pos;
+ bool get hasNext => _array.length > _pos;
T next() {
- if (!hasNext()) {
- throw const NoMoreElementsException();
+ if (!hasNext) {
+ throw new StateError("No more elements");
}
return _array[_pos++];
}
diff --git a/lib/html/src/dart2js_Conversions.dart b/lib/html/src/dart2js_Conversions.dart
index 71aff9d..5ce8806 100644
--- a/lib/html/src/dart2js_Conversions.dart
+++ b/lib/html/src/dart2js_Conversions.dart
@@ -199,7 +199,7 @@
int findSlot(value) {
int length = values.length;
for (int i = 0; i < length; i++) {
- if (values[i] === value) return i;
+ if (identical(values[i], value)) return i;
}
values.add(value);
copies.add(null);
@@ -298,7 +298,7 @@
for ( ; i < length; i++) {
var element = e[i];
var elementCopy = walk(element);
- if (elementCopy !== element) {
+ if (!identical(elementCopy, element)) {
copy = readSlot(slot); // Cyclic reference may have created it.
if (true == copy) {
copy = JS('List', 'new Array(#)', length);
@@ -364,7 +364,7 @@
int findSlot(value) {
int length = values.length;
for (int i = 0; i < length; i++) {
- if (values[i] === value) return i;
+ if (identical(values[i], value)) return i;
}
values.add(value);
copies.add(null);
diff --git a/lib/html/src/dart2js_DOMImplementation.dart b/lib/html/src/dart2js_DOMImplementation.dart
index 955841c..ca3896f 100644
--- a/lib/html/src/dart2js_DOMImplementation.dart
+++ b/lib/html/src/dart2js_DOMImplementation.dart
@@ -32,9 +32,7 @@
void close() => JS('void', '#.close()', _window);
- void postMessage(Dynamic message,
- String targetOrigin,
- [List messagePorts = null]) {
+ void postMessage(var message, String targetOrigin, [List messagePorts = null]) {
if (messagePorts == null) {
JS('void', '#.postMessage(#,#)', _window, message, targetOrigin);
} else {
@@ -46,7 +44,7 @@
_DOMWindowCrossFrameImpl(this._window);
static Window _createSafe(w) {
- if (w === window) {
+ if (identical(w, window)) {
return w;
} else {
// TODO(vsm): Cache or implement equality.
@@ -70,7 +68,7 @@
_LocationCrossFrameImpl(this._location);
static Location _createSafe(location) {
- if (location === window.location) {
+ if (identical(location, window.location)) {
return location;
} else {
// TODO(vsm): Cache or implement equality.
@@ -95,7 +93,7 @@
_HistoryCrossFrameImpl(this._history);
static History _createSafe(h) {
- if (h === window.history) {
+ if (identical(h, window.history)) {
return h;
} else {
// TODO(vsm): Cache or implement equality.
diff --git a/lib/html/src/native_DOMImplementation.dart b/lib/html/src/native_DOMImplementation.dart
index aab4e44..d45e7e4 100644
--- a/lib/html/src/native_DOMImplementation.dart
+++ b/lib/html/src/native_DOMImplementation.dart
@@ -28,7 +28,7 @@
static Map createMap() => {};
static makeNotImplementedException(String fileName, int lineNo) {
- return new UnsupportedOperationException('[info: $fileName:$lineNo]');
+ return new UnsupportedError('[info: $fileName:$lineNo]');
}
static window() native "Utils_window";
@@ -100,16 +100,16 @@
String remove(String key) native "DOMStringMap_remove_Callback";
void clear() => Maps.clear(this);
void forEach(void f(String key, String value)) => Maps.forEach(this, f);
- Collection<String> getKeys() native "DOMStringMap_getKeys_Callback";
- Collection<String> getValues() => Maps.getValues(this);
+ Collection<String> get keys native "DOMStringMap_getKeys_Callback";
+ Collection<String> get values => Maps.getValues(this);
int get length => Maps.length(this);
- bool isEmpty() => Maps.isEmpty(this);
+ bool get isEmpty => Maps.isEmpty(this);
}
get _printClosure => (s) {
try {
window.console.log(s);
- } on Dynamic catch(_) {
+ } catch (_) {
_Utils.print(s);
}
};
diff --git a/lib/html/src/native_DOMPublic.dart b/lib/html/src/native_DOMPublic.dart
index 9046cb3..e06633f 100644
--- a/lib/html/src/native_DOMPublic.dart
+++ b/lib/html/src/native_DOMPublic.dart
@@ -11,7 +11,7 @@
var _testRunner;
TestRunner get testRunner {
- if (_testRunner === null)
+ if (_testRunner == null)
_testRunner = new TestRunner._(_NPObject.retrieve("testRunner"));
return _testRunner;
}
diff --git a/lib/html/templates/callback.darttemplate b/lib/html/templates/callback.darttemplate
index bc33c46..9ffc669 100644
--- a/lib/html/templates/callback.darttemplate
+++ b/lib/html/templates/callback.darttemplate
@@ -4,4 +4,6 @@
// WARNING: Do not edit - generated code.
+part of html;
+
//$ Keep previous blank line when editor removes trailing empty lines.
diff --git a/lib/html/templates/html/dart2js/html_dart2js.darttemplate b/lib/html/templates/html/dart2js/html_dart2js.darttemplate
index 73036e9..fe44af3 100644
--- a/lib/html/templates/html/dart2js/html_dart2js.darttemplate
+++ b/lib/html/templates/html/dart2js/html_dart2js.darttemplate
@@ -5,44 +5,44 @@
// DO NOT EDIT
// Auto-generated dart:html library.
-#library('dart:html');
+library html;
-#import('dart:isolate');
-#import('dart:json');
+import 'dart:isolate';
+import 'dart:json';
$!GENERATED_DART_FILES
-#source('$AUXILIARY_DIR/CrossFrameTypes.dart');
-#source('$AUXILIARY_DIR/EventListener.dart');
-#source('$AUXILIARY_DIR/KeyLocation.dart');
-#source('$AUXILIARY_DIR/KeyName.dart');
-#source('$AUXILIARY_DIR/ReadyState.dart');
-#source('$AUXILIARY_DIR/Timer.dart');
-#source('$AUXILIARY_DIR/_Collections.dart');
-#source('$AUXILIARY_DIR/_HttpRequestUtils.dart');
-#source('$AUXILIARY_DIR/Isolates.dart');
-#source('$AUXILIARY_DIR/Measurement.dart');
-#source('$AUXILIARY_DIR/Serialization.dart');
-#source('$AUXILIARY_DIR/shared_FactoryProviders.dart');
-#source('$AUXILIARY_DIR/dart2js_Conversions.dart');
-#source('$AUXILIARY_DIR/dart2js_DOMImplementation.dart');
-#source('$AUXILIARY_DIR/dart2js_FactoryProviders.dart');
-#source('$AUXILIARY_DIR/dart2js_IDBKeyRangeFactoryProvider.dart');
-#source('$AUXILIARY_DIR/dart2js_LocationWrapper.dart');
-#source('$AUXILIARY_DIR/dart2js_MutationObserverSupported.dart');
-#source('$AUXILIARY_DIR/dart2js_TypedArrayFactoryProvider.dart');
-#source('$AUXILIARY_DIR/_Testing.dart');
-#source('$AUXILIARY_DIR/Device.dart');
-#source('$AUXILIARY_DIR/_ListIterators.dart');
-#source('$AUXILIARY_DIR/_Lists.dart');
+part '$AUXILIARY_DIR/CrossFrameTypes.dart';
+part '$AUXILIARY_DIR/EventListener.dart';
+part '$AUXILIARY_DIR/KeyLocation.dart';
+part '$AUXILIARY_DIR/KeyName.dart';
+part '$AUXILIARY_DIR/ReadyState.dart';
+part '$AUXILIARY_DIR/Timer.dart';
+part '$AUXILIARY_DIR/_Collections.dart';
+part '$AUXILIARY_DIR/_HttpRequestUtils.dart';
+part '$AUXILIARY_DIR/Isolates.dart';
+part '$AUXILIARY_DIR/Measurement.dart';
+part '$AUXILIARY_DIR/Serialization.dart';
+part '$AUXILIARY_DIR/shared_FactoryProviders.dart';
+part '$AUXILIARY_DIR/dart2js_Conversions.dart';
+part '$AUXILIARY_DIR/dart2js_DOMImplementation.dart';
+part '$AUXILIARY_DIR/dart2js_FactoryProviders.dart';
+part '$AUXILIARY_DIR/dart2js_IDBKeyRangeFactoryProvider.dart';
+part '$AUXILIARY_DIR/dart2js_LocationWrapper.dart';
+part '$AUXILIARY_DIR/dart2js_MutationObserverSupported.dart';
+part '$AUXILIARY_DIR/dart2js_TypedArrayFactoryProvider.dart';
+part '$AUXILIARY_DIR/_Testing.dart';
+part '$AUXILIARY_DIR/Device.dart';
+part '$AUXILIARY_DIR/_ListIterators.dart';
+part '$AUXILIARY_DIR/_Lists.dart';
-LocalWindow get window() => JS('LocalWindow', 'window');
-_LocalWindowImpl get _window() => JS('_LocalWindowImpl', 'window');
+LocalWindow get window => JS('LocalWindow', 'window');
+_LocalWindowImpl get _window => JS('_LocalWindowImpl', 'window');
-Document get document() => JS('Document', 'document');
+Document get document => JS('Document', 'document');
-_DocumentImpl get _document() => JS('_DocumentImpl', 'document');
+_DocumentImpl get _document => JS('_DocumentImpl', 'document');
Element query(String selector) => _document.query(selector);
List<Element> queryAll(String selector) => _document.queryAll(selector);
diff --git a/lib/html/templates/html/dart2js/impl_LocalWindow.darttemplate b/lib/html/templates/html/dart2js/impl_LocalWindow.darttemplate
index 54bf809..bbc27e1 100644
--- a/lib/html/templates/html/dart2js/impl_LocalWindow.darttemplate
+++ b/lib/html/templates/html/dart2js/impl_LocalWindow.darttemplate
@@ -4,7 +4,7 @@
class $CLASSNAME$EXTENDS$IMPLEMENTS native "@*DOMWindow" {
- _DocumentImpl get document() => JS('_DocumentImpl', '#.document', this);
+ _DocumentImpl get document => JS('_DocumentImpl', '#.document', this);
Window _open2(url, name) => JS('Window', '#.open(#,#)', this, url, name);
@@ -54,7 +54,7 @@
var _location_wrapper; // Cached wrapped Location object.
// Native getter and setter to access raw Location object.
- Location get _location() => JS('Location', '#.location', this);
+ Location get _location => JS('Location', '#.location', this);
void set _location(Location value) {
JS('void', '#.location = #', this, value);
}
diff --git a/lib/html/templates/html/dart2js/impl_MouseEvent.darttemplate b/lib/html/templates/html/dart2js/impl_MouseEvent.darttemplate
index 5d0485c..62aaa4e 100644
--- a/lib/html/templates/html/dart2js/impl_MouseEvent.darttemplate
+++ b/lib/html/templates/html/dart2js/impl_MouseEvent.darttemplate
@@ -12,7 +12,7 @@
// Firefox does not support offsetX.
var target = this.target;
if (!(target is Element)) {
- throw const UnsupportedOperationException(
+ throw new UnsupportedError(
'offsetX is only supported on elements');
}
return this.clientX - this.target.getBoundingClientRect().left;
@@ -26,7 +26,7 @@
// Firefox does not support offsetY.
var target = this.target;
if (!(target is Element)) {
- throw const UnsupportedOperationException(
+ throw new UnsupportedError(
'offsetY is only supported on elements');
}
return this.clientY - this.target.getBoundingClientRect().top;
diff --git a/lib/html/templates/html/dart2js/impl_SelectElement.darttemplate b/lib/html/templates/html/dart2js/impl_SelectElement.darttemplate
index dd4f05f..f9072fa 100644
--- a/lib/html/templates/html/dart2js/impl_SelectElement.darttemplate
+++ b/lib/html/templates/html/dart2js/impl_SelectElement.darttemplate
@@ -7,11 +7,11 @@
// Override default options, since IE returns SelectElement itself and it
// does not operate as a List.
- List<OptionElement> get options() {
+ List<OptionElement> get options {
return this.elements.filter((e) => e is OptionElement);
}
- List<OptionElement> get selectedOptions() {
+ List<OptionElement> get selectedOptions {
// IE does not change the selected flag for single-selection items.
if (this.multiple) {
return this.options.filter((o) => o.selected);
diff --git a/lib/html/templates/html/dartium/html_dartium.darttemplate b/lib/html/templates/html/dartium/html_dartium.darttemplate
index f9486236..4225d60 100644
--- a/lib/html/templates/html/dartium/html_dartium.darttemplate
+++ b/lib/html/templates/html/dartium/html_dartium.darttemplate
@@ -5,40 +5,40 @@
// DO NOT EDIT
// Auto-generated dart:html library.
-#library("dart:html");
+library html;
-#import("dart:isolate");
-#import("dart:json");
-#import("dart:nativewrappers");
+import 'dart:isolate';
+import 'dart:json';
+import 'dart:nativewrappers';
$!GENERATED_DART_FILES
-#source('$AUXILIARY_DIR/CrossFrameTypes.dart');
-#source('$AUXILIARY_DIR/EventListener.dart');
-#source('$AUXILIARY_DIR/KeyLocation.dart');
-#source('$AUXILIARY_DIR/KeyName.dart');
-#source('$AUXILIARY_DIR/ReadyState.dart');
-#source('$AUXILIARY_DIR/Timer.dart');
-#source('$AUXILIARY_DIR/_Collections.dart');
-#source('$AUXILIARY_DIR/_HttpRequestUtils.dart');
-#source('$AUXILIARY_DIR/shared_FactoryProviders.dart');
-#source('$AUXILIARY_DIR/dartium_FactoryProviders.dart');
-#source('$AUXILIARY_DIR/Device.dart');
-#source('$AUXILIARY_DIR/Isolates.dart');
-#source('$AUXILIARY_DIR/Measurement.dart');
-#source('$AUXILIARY_DIR/Serialization.dart');
-#source('$AUXILIARY_DIR/dartium_MutationObserverSupported.dart');
-#source('$AUXILIARY_DIR/_Testing.dart');
-#source('$AUXILIARY_DIR/_ListIterators.dart');
-#source('$AUXILIARY_DIR/_Lists.dart');
+part '$AUXILIARY_DIR/CrossFrameTypes.dart';
+part '$AUXILIARY_DIR/EventListener.dart';
+part '$AUXILIARY_DIR/KeyLocation.dart';
+part '$AUXILIARY_DIR/KeyName.dart';
+part '$AUXILIARY_DIR/ReadyState.dart';
+part '$AUXILIARY_DIR/Timer.dart';
+part '$AUXILIARY_DIR/_Collections.dart';
+part '$AUXILIARY_DIR/_HttpRequestUtils.dart';
+part '$AUXILIARY_DIR/shared_FactoryProviders.dart';
+part '$AUXILIARY_DIR/dartium_FactoryProviders.dart';
+part '$AUXILIARY_DIR/Device.dart';
+part '$AUXILIARY_DIR/Isolates.dart';
+part '$AUXILIARY_DIR/Measurement.dart';
+part '$AUXILIARY_DIR/Serialization.dart';
+part '$AUXILIARY_DIR/dartium_MutationObserverSupported.dart';
+part '$AUXILIARY_DIR/_Testing.dart';
+part '$AUXILIARY_DIR/_ListIterators.dart';
+part '$AUXILIARY_DIR/_Lists.dart';
-#source('$AUXILIARY_DIR/native_DOMPublic.dart');
-#source('$AUXILIARY_DIR/native_DOMImplementation.dart');
+part '$AUXILIARY_DIR/native_DOMPublic.dart';
+part '$AUXILIARY_DIR/native_DOMImplementation.dart';
LocalWindow __window;
LocalWindow get window {
- if (__window !== null) {
+ if (__window != null) {
return __window;
}
__window = _Utils.window();
@@ -50,7 +50,7 @@
Document __document;
Document get document {
- if (__document !== null) {
+ if (__document != null) {
return __document;
}
__document = _document;
diff --git a/lib/html/templates/html/impl/factoryprovider_Elements.darttemplate b/lib/html/templates/html/impl/factoryprovider_Elements.darttemplate
index 8fe27e5..561ece0d 100644
--- a/lib/html/templates/html/impl/factoryprovider_Elements.darttemplate
+++ b/lib/html/templates/html/impl/factoryprovider_Elements.darttemplate
@@ -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.
+part of html;
+
class _Elements {
$!FACTORY_METHODS}
diff --git a/lib/html/templates/html/impl/impl_CSSStyleDeclaration.darttemplate b/lib/html/templates/html/impl/impl_CSSStyleDeclaration.darttemplate
index 0112df0..d723977 100644
--- a/lib/html/templates/html/impl/impl_CSSStyleDeclaration.darttemplate
+++ b/lib/html/templates/html/impl/impl_CSSStyleDeclaration.darttemplate
@@ -5,7 +5,7 @@
String _cachedBrowserPrefix;
String get _browserPrefix {
- if (_cachedBrowserPrefix === null) {
+ if (_cachedBrowserPrefix == null) {
if (_Device.isFirefox) {
_cachedBrowserPrefix = '-moz-';
} else if (_Device.isIE) {
diff --git a/lib/html/templates/html/impl/impl_DocumentFragment.darttemplate b/lib/html/templates/html/impl/impl_DocumentFragment.darttemplate
index e8a1e9d..c9dd6b7 100644
--- a/lib/html/templates/html/impl/impl_DocumentFragment.darttemplate
+++ b/lib/html/templates/html/impl/impl_DocumentFragment.darttemplate
@@ -28,7 +28,7 @@
if (newLength >= len) {
return;
} else if (newLength < 0) {
- throw const ArgumentError("Invalid list length");
+ throw new ArgumentError("Invalid list length");
}
removeRange(newLength - 1, len - newLength);
@@ -51,7 +51,7 @@
}
void sort([Comparator<Element> compare = Comparable.compare]) {
- throw const UnsupportedOperationException('TODO(jacobr): should we impl?');
+ throw new UnsupportedError('TODO(jacobr): should we impl?');
}
void setRange(int start, int rangeLength, List from, [int startFrom = 0]) {
@@ -73,7 +73,7 @@
}
Element removeLast() {
- final result = this.last();
+ final result = this.last;
if (result != null) {
result.remove();
}
@@ -84,7 +84,7 @@
Collection<Element> filter(bool f(Element element)) => _filtered.filter(f);
bool every(bool f(Element element)) => _filtered.every(f);
bool some(bool f(Element element)) => _filtered.some(f);
- bool isEmpty() => _filtered.isEmpty();
+ bool get isEmpty => _filtered.isEmpty;
int get length => _filtered.length;
Element operator [](int index) => _filtered[index];
Iterator<Element> iterator() => _filtered.iterator();
@@ -94,11 +94,11 @@
_filtered.indexOf(element, start);
int lastIndexOf(Element element, [int start = null]) {
- if (start === null) start = length - 1;
+ if (start == null) start = length - 1;
return _filtered.lastIndexOf(element, start);
}
- Element last() => _filtered.last();
+ Element get last => _filtered.last;
}
Future<CSSStyleDeclaration> _emptyStyleFuture() {
@@ -120,7 +120,7 @@
_FrozenCSSClassSet() : super(null);
void _write(Set s) {
- throw const UnsupportedOperationException(
+ throw new UnsupportedError(
'frozen class set cannot be modified');
}
Set<String> _read() => new Set<String>();
@@ -234,7 +234,7 @@
}
return null;
}
- Element get $m_lastElementChild() => elements.last();
+ Element get $m_lastElementChild() => elements.last;
Element get nextElementSibling => null;
Element get previousElementSibling => null;
Element get offsetParent => null;
@@ -263,97 +263,97 @@
// Setters throw errors rather than being no-ops because we aren't going to
// retain the values that were set, and erroring out seems clearer.
void set attributes(Map<String, String> value) {
- throw new UnsupportedOperationException(
+ throw new UnsupportedError(
"Attributes can't be set for document fragments.");
}
void set classes(Collection<String> value) {
- throw new UnsupportedOperationException(
+ throw new UnsupportedError(
"Classes can't be set for document fragments.");
}
void set dataAttributes(Map<String, String> value) {
- throw new UnsupportedOperationException(
+ throw new UnsupportedError(
"Data attributes can't be set for document fragments.");
}
void set contentEditable(String value) {
- throw new UnsupportedOperationException(
+ throw new UnsupportedError(
"Content editable can't be set for document fragments.");
}
String get dir {
- throw new UnsupportedOperationException(
+ throw new UnsupportedError(
"Document fragments don't support text direction.");
}
void set dir(String value) {
- throw new UnsupportedOperationException(
+ throw new UnsupportedError(
"Document fragments don't support text direction.");
}
void set draggable(bool value) {
- throw new UnsupportedOperationException(
+ throw new UnsupportedError(
"Draggable can't be set for document fragments.");
}
void set hidden(bool value) {
- throw new UnsupportedOperationException(
+ throw new UnsupportedError(
"Hidden can't be set for document fragments.");
}
void set id(String value) {
- throw new UnsupportedOperationException(
+ throw new UnsupportedError(
"ID can't be set for document fragments.");
}
String get lang {
- throw new UnsupportedOperationException(
+ throw new UnsupportedError(
"Document fragments don't support language.");
}
void set lang(String value) {
- throw new UnsupportedOperationException(
+ throw new UnsupportedError(
"Document fragments don't support language.");
}
void set scrollLeft(int value) {
- throw new UnsupportedOperationException(
+ throw new UnsupportedError(
"Document fragments don't support scrolling.");
}
void set scrollTop(int value) {
- throw new UnsupportedOperationException(
+ throw new UnsupportedError(
"Document fragments don't support scrolling.");
}
void set spellcheck(bool value) {
- throw new UnsupportedOperationException(
+ throw new UnsupportedError(
"Spellcheck can't be set for document fragments.");
}
void set translate(bool value) {
- throw new UnsupportedOperationException(
+ throw new UnsupportedError(
"Spellcheck can't be set for document fragments.");
}
void set tabIndex(int value) {
- throw new UnsupportedOperationException(
+ throw new UnsupportedError(
"Tab index can't be set for document fragments.");
}
void set title(String value) {
- throw new UnsupportedOperationException(
+ throw new UnsupportedError(
"Title can't be set for document fragments.");
}
void set webkitdropzone(String value) {
- throw new UnsupportedOperationException(
+ throw new UnsupportedError(
"WebKit drop zone can't be set for document fragments.");
}
void set webkitRegionOverflow(String value) {
- throw new UnsupportedOperationException(
+ throw new UnsupportedError(
"WebKit region overflow can't be set for document fragments.");
}
diff --git a/lib/html/templates/html/impl/impl_Element.darttemplate b/lib/html/templates/html/impl/impl_Element.darttemplate
index dc39ade..6be2882 100644
--- a/lib/html/templates/html/impl/impl_Element.darttemplate
+++ b/lib/html/templates/html/impl/impl_Element.darttemplate
@@ -65,7 +65,7 @@
return out;
}
- bool isEmpty() {
+ bool get isEmpty {
return _element.$dom_firstElementChild == null;
}
@@ -83,7 +83,7 @@
void set length(int newLength) {
// TODO(jacobr): remove children when length is reduced.
- throw const UnsupportedOperationException('');
+ throw new UnsupportedError('');
}
Element add(_ElementImpl value) {
@@ -102,7 +102,7 @@
}
void sort([Comparator<Element> compare = Comparable.compare]) {
- throw const UnsupportedOperationException('TODO(jacobr): should we impl?');
+ throw new UnsupportedError('TODO(jacobr): should we impl?');
}
void setRange(int start, int rangeLength, List from, [int startFrom = 0]) {
@@ -126,7 +126,7 @@
}
int lastIndexOf(Element element, [int start = null]) {
- if (start === null) start = length - 1;
+ if (start == null) start = length - 1;
return _Lists.lastIndexOf(this, element, start);
}
@@ -136,14 +136,14 @@
}
Element removeLast() {
- final result = this.last();
+ final result = this.last;
if (result != null) {
_element.$dom_removeChild(result);
}
return result;
}
- Element last() {
+ Element get last {
return _element.$dom_lastElementChild;
}
}
@@ -208,14 +208,14 @@
return false;
}
- bool isEmpty() => _nodeList.isEmpty();
+ bool get isEmpty => _nodeList.isEmpty;
int get length => _nodeList.length;
Element operator [](int index) => _nodeList[index];
void operator []=(int index, Element value) {
- throw const UnsupportedOperationException('');
+ throw new UnsupportedError('');
}
void set length(int newLength) {
@@ -223,33 +223,33 @@
}
void add(Element value) {
- throw const UnsupportedOperationException('');
+ throw new UnsupportedError('');
}
void addLast(Element value) {
- throw const UnsupportedOperationException('');
+ throw new UnsupportedError('');
}
Iterator<Element> iterator() => new _FrozenElementListIterator(this);
void addAll(Collection<Element> collection) {
- throw const UnsupportedOperationException('');
+ throw new UnsupportedError('');
}
void sort([Comparator<Element> compare = Comparable.compare]) {
- throw const UnsupportedOperationException('');
+ throw new UnsupportedError('');
}
void setRange(int start, int rangeLength, List from, [int startFrom = 0]) {
- throw const UnsupportedOperationException('');
+ throw new UnsupportedError('');
}
void removeRange(int start, int rangeLength) {
- throw const UnsupportedOperationException('');
+ throw new UnsupportedError('');
}
void insertRange(int start, int rangeLength, [initialValue = null]) {
- throw const UnsupportedOperationException('');
+ throw new UnsupportedError('');
}
List<Element> getRange(int start, int rangeLength) =>
@@ -262,14 +262,14 @@
_nodeList.lastIndexOf(element, start);
void clear() {
- throw const UnsupportedOperationException('');
+ throw new UnsupportedError('');
}
Element removeLast() {
- throw const UnsupportedOperationException('');
+ throw new UnsupportedError('');
}
- Element last() => _nodeList.last();
+ Element get last => _nodeList.last;
}
class _FrozenElementListIterator implements Iterator<Element> {
@@ -280,11 +280,11 @@
/**
* Gets the next element in the iteration. Throws a
- * [NoMoreElementsException] if no element is left.
+ * [StateError("No more elements")] if no element is left.
*/
Element next() {
- if (!hasNext()) {
- throw const NoMoreElementsException();
+ if (!hasNext) {
+ throw new StateError("No more elements");
}
return _list[_index++];
@@ -293,7 +293,7 @@
/**
* Returns whether the [Iterator] has elements left.
*/
- bool hasNext() => _index < _list.length;
+ bool get hasNext => _index < _list.length;
}
class _ElementAttributeMap implements AttributeMap {
@@ -352,7 +352,7 @@
}
}
- Collection<String> getKeys() {
+ Collection<String> get keys {
// TODO(jacobr): generate a lazy collection instead.
final attributes = _element.$dom_attributes;
final keys = new List<String>(attributes.length);
@@ -362,7 +362,7 @@
return keys;
}
- Collection<String> getValues() {
+ Collection<String> get values {
// TODO(jacobr): generate a lazy collection instead.
final attributes = _element.$dom_attributes;
final values = new List<String>(attributes.length);
@@ -382,7 +382,7 @@
/**
* Returns true if there is no {key, value} pair in the map.
*/
- bool isEmpty() {
+ bool get isEmpty {
return length == 0;
}
}
@@ -400,7 +400,7 @@
// interface Map
// TODO: Use lazy iterator when it is available on Map.
- bool containsValue(String value) => getValues().some((v) => v == value);
+ bool containsValue(String value) => values.some((v) => v == value);
bool containsKey(String key) => $dom_attributes.containsKey(_attr(key));
@@ -417,7 +417,7 @@
void clear() {
// Needs to operate on a snapshot since we are mutating the collection.
- for (String key in getKeys()) {
+ for (String key in keys) {
remove(key);
}
}
@@ -430,7 +430,7 @@
});
}
- Collection<String> getKeys() {
+ Collection<String> get keys {
final keys = new List<String>();
$dom_attributes.forEach((String key, String value) {
if (_matches(key)) {
@@ -440,7 +440,7 @@
return keys;
}
- Collection<String> getValues() {
+ Collection<String> get values {
final values = new List<String>();
$dom_attributes.forEach((String key, String value) {
if (_matches(key)) {
@@ -450,10 +450,10 @@
return values;
}
- int get length => getKeys().length;
+ int get length => keys.length;
// TODO: Use lazy iterator when it is available on Map.
- bool isEmpty() => length == 0;
+ bool get isEmpty => length == 0;
// Helpers.
String _attr(String key) => 'data-$key';
@@ -486,7 +486,7 @@
bool some(bool f(String element)) => _read().some(f);
- bool isEmpty() => _read().isEmpty();
+ bool get isEmpty => _read().isEmpty;
bool get frozen => false;
@@ -570,7 +570,7 @@
Set<String> s = new Set<String>();
for (String name in _classname().split(' ')) {
String trimmed = name.trim();
- if (!trimmed.isEmpty()) {
+ if (!trimmed.isEmpty) {
s.add(trimmed);
}
}
@@ -609,7 +609,7 @@
const _SimpleClientRect(this.left, this.top, this.width, this.height);
bool operator ==(ClientRect other) {
- return other !== null && left == other.left && top == other.top
+ return other != null && left == other.left && top == other.top
&& width == other.width && height == other.height;
}
@@ -672,7 +672,7 @@
void set attributes(Map<String, String> value) {
Map<String, String> attributes = this.attributes;
attributes.clear();
- for (String key in value.getKeys()) {
+ for (String key in value.keys) {
attributes[key] = value[key];
}
}
@@ -704,7 +704,7 @@
void set dataAttributes(Map<String, String> value) {
final dataAttributes = this.dataAttributes;
dataAttributes.clear();
- for (String key in value.getKeys()) {
+ for (String key in value.keys) {
dataAttributes[key] = value[key];
}
}
@@ -842,7 +842,7 @@
String parentTag = 'div';
String tag;
final match = _START_TAG_REGEXP.firstMatch(html);
- if (match !== null) {
+ if (match != null) {
tag = match.group(1).toLowerCase();
if (_CUSTOM_PARENT_TAG_MAP.containsKey(tag)) {
parentTag = _CUSTOM_PARENT_TAG_MAP[tag];
diff --git a/lib/html/templates/html/impl/impl_EventTarget.darttemplate b/lib/html/templates/html/impl/impl_EventTarget.darttemplate
index 94861d8..23e8f5b 100644
--- a/lib/html/templates/html/impl/impl_EventTarget.darttemplate
+++ b/lib/html/templates/html/impl/impl_EventTarget.darttemplate
@@ -6,7 +6,7 @@
/* Raw event target. */
// TODO(jacobr): it would be nice if we could specify this as
// _EventTargetImpl or EventTarget
- final Dynamic _ptr;
+ final _ptr;
_EventsImpl(this._ptr);
@@ -18,7 +18,7 @@
class _EventListenerListImpl implements EventListenerList {
// TODO(jacobr): make this _EventTargetImpl
- final Dynamic _ptr;
+ final _ptr;
final String _type;
_EventListenerListImpl(this._ptr, this._type);
diff --git a/lib/html/templates/html/impl/impl_MutationObserver.darttemplate b/lib/html/templates/html/impl/impl_MutationObserver.darttemplate
index 4ae3c21..45d337b 100644
--- a/lib/html/templates/html/impl/impl_MutationObserver.darttemplate
+++ b/lib/html/templates/html/impl/impl_MutationObserver.darttemplate
@@ -20,7 +20,7 @@
if (options != null) {
options.forEach((k, v) {
if (_boolKeys.containsKey(k)) {
- _add(parsedOptions, k, true === v);
+ _add(parsedOptions, k, true == v);
} else if (k == 'attributeFilter') {
_add(parsedOptions, k, _fixupList(v));
} else {
diff --git a/lib/html/templates/html/impl/impl_Node.darttemplate b/lib/html/templates/html/impl/impl_Node.darttemplate
index 8b369d1..594a2cc 100644
--- a/lib/html/templates/html/impl/impl_Node.darttemplate
+++ b/lib/html/templates/html/impl/impl_Node.darttemplate
@@ -15,10 +15,10 @@
$if DART2JS
_NodeImpl get first => JS('_NodeImpl', '#.firstChild', _this);
- _NodeImpl last() => JS('_NodeImpl', '#.lastChild', _this);
+ _NodeImpl get last => JS('_NodeImpl', '#.lastChild', _this);
$else
_NodeImpl get first => _this.$dom_firstChild;
- _NodeImpl last() => _this.$dom_lastChild;
+ _NodeImpl get last => _this.$dom_lastChild;
$endif
void add(_NodeImpl value) {
@@ -37,7 +37,7 @@
}
_NodeImpl removeLast() {
- final result = last();
+ final result = last;
if (result != null) {
_this.$dom_removeChild(result);
}
@@ -69,14 +69,14 @@
bool some(bool f(Node element)) => _Collections.some(this, f);
- bool isEmpty() => this.length == 0;
+ bool get isEmpty => this.length == 0;
// From List<Node>:
// TODO(jacobr): this could be implemented for child node lists.
// The exception we throw here is misleading.
void sort([Comparator<Node> compare = Comparable.compare]) {
- throw new UnsupportedOperationException("Cannot sort immutable List.");
+ throw new UnsupportedError("Cannot sort immutable List.");
}
int indexOf(Node element, [int start = 0]) =>
@@ -87,15 +87,15 @@
// FIXME: implement these.
void setRange(int start, int rangeLength, List<Node> from, [int startFrom]) {
- throw new UnsupportedOperationException(
+ throw new UnsupportedError(
"Cannot setRange on immutable List.");
}
void removeRange(int start, int rangeLength) {
- throw new UnsupportedOperationException(
+ throw new UnsupportedError(
"Cannot removeRange on immutable List.");
}
void insertRange(int start, int rangeLength, [Node initialValue]) {
- throw new UnsupportedOperationException(
+ throw new UnsupportedError(
"Cannot insertRange on immutable List.");
}
List<Node> getRange(int start, int rangeLength) =>
diff --git a/lib/html/templates/html/impl/impl_NodeList.darttemplate b/lib/html/templates/html/impl/impl_NodeList.darttemplate
index 7a42e98..5e94454 100644
--- a/lib/html/templates/html/impl/impl_NodeList.darttemplate
+++ b/lib/html/templates/html/impl/impl_NodeList.darttemplate
@@ -23,7 +23,7 @@
bool some(bool f(E element)) => _list.some(f);
- bool isEmpty() => _list.isEmpty();
+ bool get isEmpty => _list.isEmpty;
int get length => _list.length;
@@ -50,7 +50,7 @@
E removeLast() => _list.removeLast();
- E last() => _list.last();
+ E get last => _list.last;
List<E> getRange(int start, int rangeLength) =>
_list.getRange(start, rangeLength);
@@ -113,7 +113,7 @@
}
_NodeImpl removeLast() {
- final result = this.last();
+ final result = this.last;
if (result != null) {
_parent.$dom_removeChild(result);
}
@@ -141,12 +141,12 @@
bool some(bool f(Node element)) => _Collections.some(this, f);
- bool isEmpty() => this.length == 0;
+ bool get isEmpty => this.length == 0;
// From List<Node>:
void sort([Comparator<Node> compare = Comparable.compare]) {
- throw new UnsupportedOperationException("Cannot sort immutable List.");
+ throw new UnsupportedError("Cannot sort immutable List.");
}
int indexOf(Node element, [int start = 0]) =>
@@ -155,18 +155,18 @@
int lastIndexOf(Node element, [int start = 0]) =>
_Lists.lastIndexOf(this, element, start);
- Node last() => this[length - 1];
+ Node get last => this[length - 1];
Node get first => this[0];
// FIXME: implement thesee.
void setRange(int start, int rangeLength, List<Node> from, [int startFrom]) {
- throw new UnsupportedOperationException("Cannot setRange on immutable List.");
+ throw new UnsupportedError("Cannot setRange on immutable List.");
}
void removeRange(int start, int rangeLength) {
- throw new UnsupportedOperationException("Cannot removeRange on immutable List.");
+ throw new UnsupportedError("Cannot removeRange on immutable List.");
}
void insertRange(int start, int rangeLength, [Node initialValue]) {
- throw new UnsupportedOperationException("Cannot insertRange on immutable List.");
+ throw new UnsupportedError("Cannot insertRange on immutable List.");
}
List<Node> getRange(int start, int rangeLength) =>
new _NodeListWrapper(_Lists.getRange(this, start, rangeLength, <Node>[]));
diff --git a/lib/html/templates/html/impl/impl_SVGElement.darttemplate b/lib/html/templates/html/impl/impl_SVGElement.darttemplate
index ffb2b58..64eeccc 100644
--- a/lib/html/templates/html/impl/impl_SVGElement.darttemplate
+++ b/lib/html/templates/html/impl/impl_SVGElement.darttemplate
@@ -14,7 +14,7 @@
class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
CSSClassSet get classes {
- if (_cssClassSet === null) {
+ if (_cssClassSet == null) {
_cssClassSet = new _AttributeClassSet(_ptr);
}
return _cssClassSet;
diff --git a/lib/html/templates/html/impl/impl_Storage.darttemplate b/lib/html/templates/html/impl/impl_Storage.darttemplate
index b6027f5..38c83f2 100644
--- a/lib/html/templates/html/impl/impl_Storage.darttemplate
+++ b/lib/html/templates/html/impl/impl_Storage.darttemplate
@@ -5,7 +5,7 @@
class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
// TODO(nweiz): update this when maps support lazy iteration
- bool containsValue(String value) => getValues().some((e) => e == value);
+ bool containsValue(String value) => values.some((e) => e == value);
bool containsKey(String key) => $dom_getItem(key) != null;
@@ -35,13 +35,13 @@
}
}
- Collection<String> getKeys() {
+ Collection<String> get keys {
final keys = [];
forEach((k, v) => keys.add(k));
return keys;
}
- Collection<String> getValues() {
+ Collection<String> get values {
final values = [];
forEach((k, v) => values.add(v));
return values;
@@ -49,6 +49,6 @@
int get length => $dom_length;
- bool isEmpty() => $dom_key(0) == null;
+ bool get isEmpty => $dom_key(0) == null;
$!MEMBERS
}
diff --git a/lib/html/templates/html/impl/impl_WheelEvent.darttemplate b/lib/html/templates/html/impl/impl_WheelEvent.darttemplate
index 37873a5..a2cf353 100644
--- a/lib/html/templates/html/impl/impl_WheelEvent.darttemplate
+++ b/lib/html/templates/html/impl/impl_WheelEvent.darttemplate
@@ -29,7 +29,7 @@
}
return 0;
}
- throw const UnsupportedOperationException(
+ throw new UnsupportedError(
'deltaY is not supported');
}
@@ -57,7 +57,7 @@
}
return 0;
}
- throw const UnsupportedOperationException(
+ throw new UnsupportedError(
'deltaX is not supported');
}
diff --git a/lib/html/templates/html/interface/interface_AudioContext.darttemplate b/lib/html/templates/html/interface/interface_AudioContext.darttemplate
index fb4fb24..3d2ab5b 100644
--- a/lib/html/templates/html/interface/interface_AudioContext.darttemplate
+++ b/lib/html/templates/html/interface/interface_AudioContext.darttemplate
@@ -4,6 +4,8 @@
// WARNING: Do not edit - generated code.
+part of html;
+
$!COMMENT
abstract class $ID$EXTENDS {
factory $ID() => _$(ID)FactoryProvider.create$ID();
diff --git a/lib/html/templates/html/interface/interface_CSSStyleDeclaration.darttemplate b/lib/html/templates/html/interface/interface_CSSStyleDeclaration.darttemplate
index 1f6d611..721738d 100644
--- a/lib/html/templates/html/interface/interface_CSSStyleDeclaration.darttemplate
+++ b/lib/html/templates/html/interface/interface_CSSStyleDeclaration.darttemplate
@@ -4,6 +4,8 @@
// WARNING: Do not edit - generated code.
+part of html;
+
$!COMMENT
abstract class $ID$EXTENDS {
factory $ID() => _$(ID)FactoryProvider.create$ID();
diff --git a/lib/html/templates/html/interface/interface_CanvasElement.darttemplate b/lib/html/templates/html/interface/interface_CanvasElement.darttemplate
index ca44aef..811a81a 100644
--- a/lib/html/templates/html/interface/interface_CanvasElement.darttemplate
+++ b/lib/html/templates/html/interface/interface_CanvasElement.darttemplate
@@ -4,6 +4,8 @@
// WARNING: Do not edit - generated code.
+part of html;
+
$!COMMENT
abstract class $ID$EXTENDS {
$!MEMBERS
diff --git a/lib/html/templates/html/interface/interface_CanvasRenderingContext2D.darttemplate b/lib/html/templates/html/interface/interface_CanvasRenderingContext2D.darttemplate
index 7e149bf..ae98fb4 100644
--- a/lib/html/templates/html/interface/interface_CanvasRenderingContext2D.darttemplate
+++ b/lib/html/templates/html/interface/interface_CanvasRenderingContext2D.darttemplate
@@ -4,6 +4,8 @@
// WARNING: Do not edit - generated code.
+part of html;
+
$!COMMENT
abstract class $ID$EXTENDS {
$!MEMBERS
diff --git a/lib/html/templates/html/interface/interface_CustomEvent.darttemplate b/lib/html/templates/html/interface/interface_CustomEvent.darttemplate
index 7203ad6..e7d801f 100644
--- a/lib/html/templates/html/interface/interface_CustomEvent.darttemplate
+++ b/lib/html/templates/html/interface/interface_CustomEvent.darttemplate
@@ -4,6 +4,8 @@
// WARNING: Do not edit - generated code.
+part of html;
+
$!COMMENT
abstract class $ID$EXTENDS {
diff --git a/lib/html/templates/html/interface/interface_Document.darttemplate b/lib/html/templates/html/interface/interface_Document.darttemplate
index 318ddef..7d30daf 100644
--- a/lib/html/templates/html/interface/interface_Document.darttemplate
+++ b/lib/html/templates/html/interface/interface_Document.darttemplate
@@ -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.
+part of html;
+
$!COMMENT
abstract class Document extends HtmlElement {
diff --git a/lib/html/templates/html/interface/interface_DocumentFragment.darttemplate b/lib/html/templates/html/interface/interface_DocumentFragment.darttemplate
index 5e00887..e302f50 100644
--- a/lib/html/templates/html/interface/interface_DocumentFragment.darttemplate
+++ b/lib/html/templates/html/interface/interface_DocumentFragment.darttemplate
@@ -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.
+part of html;
+
$!COMMENT
abstract class DocumentFragment extends Element {
diff --git a/lib/html/templates/html/interface/interface_Element.darttemplate b/lib/html/templates/html/interface/interface_Element.darttemplate
index 620efdb..833fdfd 100644
--- a/lib/html/templates/html/interface/interface_Element.darttemplate
+++ b/lib/html/templates/html/interface/interface_Element.darttemplate
@@ -4,6 +4,8 @@
// WARNING: Do not edit - generated code.
+part of html;
+
/**
* All your attribute manipulation needs in one place.
* Extends the regular Map interface by automatically coercing non-string
diff --git a/lib/html/templates/html/interface/interface_Event.darttemplate b/lib/html/templates/html/interface/interface_Event.darttemplate
index 9f39243..141f0d6 100644
--- a/lib/html/templates/html/interface/interface_Event.darttemplate
+++ b/lib/html/templates/html/interface/interface_Event.darttemplate
@@ -4,6 +4,8 @@
// WARNING: Do not edit - generated code.
+part of html;
+
$!COMMENT
abstract class $ID$EXTENDS {
diff --git a/lib/html/templates/html/interface/interface_EventTarget.darttemplate b/lib/html/templates/html/interface/interface_EventTarget.darttemplate
index 6e15d33..aa7288a 100644
--- a/lib/html/templates/html/interface/interface_EventTarget.darttemplate
+++ b/lib/html/templates/html/interface/interface_EventTarget.darttemplate
@@ -4,6 +4,8 @@
// WARNING: Do not edit - generated code.
+part of html;
+
abstract class EventListenerList {
EventListenerList add(EventListener handler, [bool useCapture]);
diff --git a/lib/html/templates/html/interface/interface_HttpRequest.darttemplate b/lib/html/templates/html/interface/interface_HttpRequest.darttemplate
index c705976..faea09e 100644
--- a/lib/html/templates/html/interface/interface_HttpRequest.darttemplate
+++ b/lib/html/templates/html/interface/interface_HttpRequest.darttemplate
@@ -4,6 +4,8 @@
// WARNING: Do not edit - generated code.
+part of html;
+
$!COMMENT
abstract class $ID$EXTENDS {
factory $ID.get(String url, onSuccess($ID request)) =>
diff --git a/lib/html/templates/html/interface/interface_IDBKeyRange.darttemplate b/lib/html/templates/html/interface/interface_IDBKeyRange.darttemplate
index 4b3e68f..f19d5d8 100644
--- a/lib/html/templates/html/interface/interface_IDBKeyRange.darttemplate
+++ b/lib/html/templates/html/interface/interface_IDBKeyRange.darttemplate
@@ -4,6 +4,8 @@
// WARNING: Do not edit - generated code.
+part of html;
+
$!COMMENT
abstract class $ID$EXTENDS {
diff --git a/lib/html/templates/html/interface/interface_LocalWindow.darttemplate b/lib/html/templates/html/interface/interface_LocalWindow.darttemplate
index 6255a4d1..ff46f20 100644
--- a/lib/html/templates/html/interface/interface_LocalWindow.darttemplate
+++ b/lib/html/templates/html/interface/interface_LocalWindow.darttemplate
@@ -4,6 +4,8 @@
// WARNING: Do not edit - generated code.
+part of html;
+
$!COMMENT
abstract class $ID$EXTENDS {
diff --git a/lib/html/templates/html/interface/interface_MouseEvent.darttemplate b/lib/html/templates/html/interface/interface_MouseEvent.darttemplate
index 28dff37..1ca65f9 100644
--- a/lib/html/templates/html/interface/interface_MouseEvent.darttemplate
+++ b/lib/html/templates/html/interface/interface_MouseEvent.darttemplate
@@ -4,6 +4,8 @@
// WARNING: Do not edit - generated code.
+part of html;
+
$!COMMENT
abstract class $ID$EXTENDS {
diff --git a/lib/html/templates/html/interface/interface_MutationObserver.darttemplate b/lib/html/templates/html/interface/interface_MutationObserver.darttemplate
index bde6196..328196d 100644
--- a/lib/html/templates/html/interface/interface_MutationObserver.darttemplate
+++ b/lib/html/templates/html/interface/interface_MutationObserver.darttemplate
@@ -4,6 +4,8 @@
// WARNING: Do not edit - generated code.
+part of html;
+
$!COMMENT
abstract class $ID$EXTENDS {
$!MEMBERS
diff --git a/lib/html/templates/html/interface/interface_Node.darttemplate b/lib/html/templates/html/interface/interface_Node.darttemplate
index 0dc4537..81d091a 100644
--- a/lib/html/templates/html/interface/interface_Node.darttemplate
+++ b/lib/html/templates/html/interface/interface_Node.darttemplate
@@ -4,6 +4,8 @@
// WARNING: Do not edit - generated code.
+part of html;
+
$!COMMENT
abstract class $ID$EXTENDS {
List<Node> get nodes;
diff --git a/lib/html/templates/html/interface/interface_NodeList.darttemplate b/lib/html/templates/html/interface/interface_NodeList.darttemplate
index e32eafd..357b14f 100644
--- a/lib/html/templates/html/interface/interface_NodeList.darttemplate
+++ b/lib/html/templates/html/interface/interface_NodeList.darttemplate
@@ -4,6 +4,8 @@
// WARNING: Do not edit - generated code.
+part of html;
+
$!COMMENT
abstract class $ID$EXTENDS {
diff --git a/lib/html/templates/html/interface/interface_NodeSelector.darttemplate b/lib/html/templates/html/interface/interface_NodeSelector.darttemplate
index 00a367a..3777034 100644
--- a/lib/html/templates/html/interface/interface_NodeSelector.darttemplate
+++ b/lib/html/templates/html/interface/interface_NodeSelector.darttemplate
@@ -4,6 +4,8 @@
// WARNING: Do not edit - generated code.
+part of html;
+
$!COMMENT
abstract class $ID$EXTENDS {
diff --git a/lib/html/templates/html/interface/interface_Point.darttemplate b/lib/html/templates/html/interface/interface_Point.darttemplate
index a344eae..9dfcb49 100644
--- a/lib/html/templates/html/interface/interface_Point.darttemplate
+++ b/lib/html/templates/html/interface/interface_Point.darttemplate
@@ -4,6 +4,8 @@
// WARNING: Do not edit - generated code.
+part of html;
+
$!COMMENT
abstract class $ID$EXTENDS {
diff --git a/lib/html/templates/html/interface/interface_SVGElement.darttemplate b/lib/html/templates/html/interface/interface_SVGElement.darttemplate
index 785ad11..47d4e6f 100644
--- a/lib/html/templates/html/interface/interface_SVGElement.darttemplate
+++ b/lib/html/templates/html/interface/interface_SVGElement.darttemplate
@@ -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.
+part of html;
+
$!COMMENT
abstract class SVGElement implements Element {
diff --git a/lib/html/templates/html/interface/interface_SVGSVGElement.darttemplate b/lib/html/templates/html/interface/interface_SVGSVGElement.darttemplate
index db51713..a97d617 100644
--- a/lib/html/templates/html/interface/interface_SVGSVGElement.darttemplate
+++ b/lib/html/templates/html/interface/interface_SVGSVGElement.darttemplate
@@ -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.
+part of html;
+
$!COMMENT
abstract class SVGSVGElement extends SVGElement implements SVGTests, SVGLangSpace, SVGExternalResourcesRequired, SVGStylable, SVGLocatable, SVGFitToViewBox, SVGZoomAndPan {
factory SVGSVGElement() => _$(ID)FactoryProvider.createSVGSVGElement();
diff --git a/lib/html/templates/html/interface/interface_ShadowRoot.darttemplate b/lib/html/templates/html/interface/interface_ShadowRoot.darttemplate
index ee6915e..f30a8c6 100644
--- a/lib/html/templates/html/interface/interface_ShadowRoot.darttemplate
+++ b/lib/html/templates/html/interface/interface_ShadowRoot.darttemplate
@@ -4,6 +4,8 @@
// WARNING: Do not edit - generated code.
+part of html;
+
$!COMMENT
abstract class $ID$EXTENDS {
$!MEMBERS
diff --git a/lib/html/templates/html/interface/interface_Storage.darttemplate b/lib/html/templates/html/interface/interface_Storage.darttemplate
index 799b556..5f0da3d 100644
--- a/lib/html/templates/html/interface/interface_Storage.darttemplate
+++ b/lib/html/templates/html/interface/interface_Storage.darttemplate
@@ -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.
+part of html;
+
$!COMMENT
abstract class $ID implements Map<String, String> {
$!MEMBERS
diff --git a/lib/html/templates/html/interface/interface_Text.darttemplate b/lib/html/templates/html/interface/interface_Text.darttemplate
index 4e9c996..838c7cd 100644
--- a/lib/html/templates/html/interface/interface_Text.darttemplate
+++ b/lib/html/templates/html/interface/interface_Text.darttemplate
@@ -4,6 +4,8 @@
// WARNING: Do not edit - generated code.
+part of html;
+
$!COMMENT
abstract class $ID$EXTENDS {
diff --git a/lib/html/templates/html/interface/interface_WebSocket.darttemplate b/lib/html/templates/html/interface/interface_WebSocket.darttemplate
index 5d9fdd3..0fae1e3 100644
--- a/lib/html/templates/html/interface/interface_WebSocket.darttemplate
+++ b/lib/html/templates/html/interface/interface_WebSocket.darttemplate
@@ -4,6 +4,8 @@
// WARNING: Do not edit - generated code.
+part of html;
+
$!COMMENT
abstract class $ID$EXTENDS {
diff --git a/lib/html/templates/html/interface/interface_WheelEvent.darttemplate b/lib/html/templates/html/interface/interface_WheelEvent.darttemplate
index 1966c89..f4232db 100644
--- a/lib/html/templates/html/interface/interface_WheelEvent.darttemplate
+++ b/lib/html/templates/html/interface/interface_WheelEvent.darttemplate
@@ -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.
+part of html;
+
$!COMMENT
abstract class $ID$EXTENDS {
$!MEMBERS
diff --git a/lib/html/templates/immutable_list_mixin.darttemplate b/lib/html/templates/immutable_list_mixin.darttemplate
index d72fc5d..74d5a4e 100644
--- a/lib/html/templates/immutable_list_mixin.darttemplate
+++ b/lib/html/templates/immutable_list_mixin.darttemplate
@@ -13,15 +13,15 @@
// From Collection<$E>:
void add($E value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addLast($E value) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
void addAll(Collection<$E> collection) {
- throw const UnsupportedOperationException("Cannot add to immutable List.");
+ throw new UnsupportedError("Cannot add to immutable List.");
}
$if DEFINE_CONTAINS
@@ -41,38 +41,38 @@
bool some(bool f($E element)) => _Collections.some(this, f);
- bool isEmpty() => this.length == 0;
+ bool get isEmpty => this.length == 0;
// From List<$E>:
void sort([Comparator<$E> compare = Comparable.compare]) {
- throw const UnsupportedOperationException("Cannot sort immutable List.");
+ throw new UnsupportedError("Cannot sort immutable List.");
}
int indexOf($E element, [int start = 0]) =>
_Lists.indexOf(this, element, start, this.length);
int lastIndexOf($E element, [int start]) {
- if (start === null) start = length - 1;
+ if (start == null) start = length - 1;
return _Lists.lastIndexOf(this, element, start);
}
- $E last() => this[length - 1];
+ $E get last => this[length - 1];
$E removeLast() {
- throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+ throw new UnsupportedError("Cannot removeLast on immutable List.");
}
void setRange(int start, int rangeLength, List<$E> from, [int startFrom]) {
- throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+ throw new UnsupportedError("Cannot setRange on immutable List.");
}
void removeRange(int start, int rangeLength) {
- throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+ throw new UnsupportedError("Cannot removeRange on immutable List.");
}
void insertRange(int start, int rangeLength, [$E initialValue]) {
- throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+ throw new UnsupportedError("Cannot insertRange on immutable List.");
}
List<$E> getRange(int start, int rangeLength) =>
diff --git a/lib/html/templates/interface.darttemplate b/lib/html/templates/interface.darttemplate
index 01184b0..671dbb5 100644
--- a/lib/html/templates/interface.darttemplate
+++ b/lib/html/templates/interface.darttemplate
@@ -4,5 +4,7 @@
// WARNING: Do not edit - generated code.
+part of html;
+
abstract class $ID$EXTENDS {
$!MEMBERS}
diff --git a/lib/isolate/base.dart b/lib/isolate/base.dart
index e2c4b6d..d61c35c 100644
--- a/lib/isolate/base.dart
+++ b/lib/isolate/base.dart
@@ -92,7 +92,7 @@
* Returns an immutable hash code for this send port that is
* consistent with the == operator.
*/
- int hashCode();
+ int get hashCode;
}
diff --git a/lib/isolate/timer.dart b/lib/isolate/timer.dart
index 8684de7..d8da52f 100644
--- a/lib/isolate/timer.dart
+++ b/lib/isolate/timer.dart
@@ -9,7 +9,7 @@
*/
factory Timer(int milliSeconds, void callback(Timer timer)) {
if (_TimerFactory._factory == null) {
- throw new UnsupportedOperationException("Timer interface not supported.");
+ throw new UnsupportedError("Timer interface not supported.");
}
return _TimerFactory._factory(milliSeconds, callback, false);
}
@@ -20,7 +20,7 @@
*/
factory Timer.repeating(int milliSeconds, void callback(Timer timer)) {
if (_TimerFactory._factory == null) {
- throw new UnsupportedOperationException("Timer interface not supported.");
+ throw new UnsupportedError("Timer interface not supported.");
}
return _TimerFactory._factory(milliSeconds, callback, true);
}
diff --git a/lib/json/json.dart b/lib/json/json.dart
index be26c01..c0297fa 100644
--- a/lib/json/json.dart
+++ b/lib/json/json.dart
@@ -172,7 +172,7 @@
_JsonParser(String json)
: json = json,
length = json.length {
- if (tokens !== null) return;
+ if (tokens != null) return;
// Use a list as jump-table. It is faster than switch and if.
tokens = new List<int>(LAST_ASCII + 1);
@@ -205,7 +205,7 @@
parseToplevel() {
final result = parseValue();
- if (token() !== null) {
+ if (token() != null) {
error('Junk at the end of JSON input');
}
return result;
@@ -213,7 +213,7 @@
parseValue() {
final int token = token();
- if (token === null) {
+ if (token == null) {
error('Nothing to parse');
}
switch (token) {
@@ -353,8 +353,8 @@
final int startPos = position;
int char = char();
- if (char === MINUS) char = nextChar();
- if (char === CHAR_0) {
+ if (identical(char, MINUS)) char = nextChar();
+ if (identical(char, CHAR_0)) {
char = nextChar();
} else if (isDigit(char)) {
char = nextChar();
@@ -364,7 +364,7 @@
}
bool isInt = true;
- if (char === DOT) {
+ if (identical(char, DOT)) {
char = nextChar();
if (isDigit(char)) {
char = nextChar();
@@ -375,9 +375,9 @@
}
}
- if (char === CHAR_E || char === CHAR_CAPITAL_E) {
+ if (identical(char, CHAR_E) || identical(char, CHAR_CAPITAL_E)) {
char = nextChar();
- if (char === MINUS || char === PLUS) char = nextChar();
+ if (identical(char, MINUS) || identical(char, PLUS)) char = nextChar();
if (isDigit(char)) {
char = nextChar();
isInt = false;
@@ -424,11 +424,11 @@
if (position >= length) return null;
int char = json.charCodeAt(position);
int token = tokens[char];
- if (token === WHITESPACE) {
+ if (identical(token, WHITESPACE)) {
position++;
continue;
}
- if (token === null) return 0;
+ if (token == null) return 0;
return token;
}
}
@@ -511,7 +511,7 @@
void checkCycle(final object) {
// TODO: use Iterables.
for (int i = 0; i < seen.length; i++) {
- if (seen[i] === object) {
+ if (identical(seen[i], object)) {
throw 'Cyclic structure';
}
}
@@ -547,13 +547,13 @@
// TODO: use writeOn.
sb.add(numberToString(object));
return true;
- } else if (object === true) {
+ } else if (identical(object, true)) {
sb.add('true');
return true;
- } else if (object === false) {
+ } else if (identical(object, false)) {
sb.add('false');
return true;
- } else if (object === null) {
+ } else if (object == null) {
sb.add('null');
return true;
} else if (object is String) {
diff --git a/lib/math/base.dart b/lib/math/base.dart
index 72caa21..b2e7fae 100644
--- a/lib/math/base.dart
+++ b/lib/math/base.dart
@@ -80,7 +80,7 @@
}
}
// Check for NaN and b == -0.0.
- if (a == 0 && b.isNegative() || b.isNaN()) return b;
+ if (a == 0 && b.isNegative || b.isNaN) return b;
return a;
}
return a;
@@ -117,11 +117,11 @@
}
}
// Check for NaN.
- if (b.isNaN()) return b;
+ if (b.isNaN) return b;
return a;
}
// max(-0.0, 0) must return 0.
- if (b == 0 && a.isNegative()) return b;
+ if (b == 0 && a.isNegative) return b;
return a;
}
throw new ArgumentError(b);
diff --git a/lib/uri/helpers.dart b/lib/uri/helpers.dart
index b23cdb8..bcc1e56 100644
--- a/lib/uri/helpers.dart
+++ b/lib/uri/helpers.dart
@@ -13,7 +13,7 @@
for (String segment in path.split("/")) {
appendSlash = false;
if (segment == "..") {
- if (!output.isEmpty() &&
+ if (!output.isEmpty &&
((output.length != 1) || (output[0] != ""))) output.removeLast();
appendSlash = true;
} else if ("." == segment) {
diff --git a/lib/uri/uri.dart b/lib/uri/uri.dart
index 7a2446b..79d8563 100644
--- a/lib/uri/uri.dart
+++ b/lib/uri/uri.dart
@@ -48,7 +48,7 @@
static String _emptyIfNull(String val) => val != null ? val : '';
static int _parseIntOrZero(String val) {
- if (val !== null && val != '') {
+ if (val != null && val != '') {
return int.parse(val);
} else {
return 0;
@@ -217,13 +217,13 @@
if (hasAuthority() || (scheme == "file")) {
sb.add("//");
_addIfNonEmpty(sb, userInfo, userInfo, "@");
- sb.add(domain === null ? "null" : domain);
+ sb.add(domain == null ? "null" : domain);
if (port != 0) {
sb.add(":");
sb.add(port.toString());
}
}
- sb.add(path === null ? "null" : path);
+ sb.add(path == null ? "null" : path);
_addIfNonEmpty(sb, query, "?", query);
_addIfNonEmpty(sb, fragment, "#", fragment);
return sb.toString();
@@ -232,8 +232,8 @@
static void _addIfNonEmpty(StringBuffer sb, String test,
String first, String second) {
if ("" != test) {
- sb.add(first === null ? "null" : first);
- sb.add(second === null ? "null" : second);
+ sb.add(first == null ? "null" : first);
+ sb.add(second == null ? "null" : second);
}
}
}
diff --git a/lib/utf/utf16.dart b/lib/utf/utf16.dart
index 29aed2e..d1bd012 100644
--- a/lib/utf/utf16.dart
+++ b/lib/utf/utf16.dart
@@ -202,9 +202,9 @@
// (http://code.google.com/p/dart/issues/detail?id=1357). Consider
// removing after this issue is resolved.
if (_is16BitCodeUnit()) {
- return str.charCodes();
+ return str.charCodes;
} else {
- return _codepointsToUtf16CodeUnits(str.charCodes());
+ return _codepointsToUtf16CodeUnits(str.charCodes);
}
}
@@ -264,7 +264,7 @@
List<int> decodeRest() {
List<int> codeunits = new List<int>(remaining);
int i = 0;
- while (hasNext()) {
+ while (hasNext) {
codeunits[i++] = next();
}
if (i == codeunits.length) {
@@ -276,7 +276,7 @@
}
}
- bool hasNext() => utf16EncodedBytesIterator.hasNext();
+ bool get hasNext => utf16EncodedBytesIterator.hasNext;
int next() {
if (utf16EncodedBytesIterator.remaining < 2) {
diff --git a/lib/utf/utf32.dart b/lib/utf/utf32.dart
index 31c1bc8..9cbfd7a 100644
--- a/lib/utf/utf32.dart
+++ b/lib/utf/utf32.dart
@@ -219,13 +219,13 @@
List<int> decodeRest() {
List<int> codeunits = new List<int>(remaining);
int i = 0;
- while (hasNext()) {
+ while (hasNext) {
codeunits[i++] = next();
}
return codeunits;
}
- bool hasNext() => utf32EncodedBytesIterator.hasNext();
+ bool get hasNext => utf32EncodedBytesIterator.hasNext;
int next() {
if (utf32EncodedBytesIterator.remaining < 4) {
diff --git a/lib/utf/utf8.dart b/lib/utf/utf8.dart
index 610aa72..48933af 100644
--- a/lib/utf/utf8.dart
+++ b/lib/utf/utf8.dart
@@ -170,7 +170,7 @@
List<int> decodeRest() {
List<int> codepoints = new List<int>(utf8EncodedBytesIterator.remaining);
int i = 0;
- while (hasNext()) {
+ while (hasNext) {
codepoints[i++] = next();
}
if (i == codepoints.length) {
@@ -182,7 +182,7 @@
}
}
- bool hasNext() => utf8EncodedBytesIterator.hasNext();
+ bool get hasNext => utf8EncodedBytesIterator.hasNext;
int next() {
int value = utf8EncodedBytesIterator.next();
@@ -226,7 +226,7 @@
"Invalid UTF8 at ${utf8EncodedBytesIterator.position}");
}
int j = 0;
- while (j < additionalBytes && utf8EncodedBytesIterator.hasNext()) {
+ while (j < additionalBytes && utf8EncodedBytesIterator.hasNext) {
int nextValue = utf8EncodedBytesIterator.next();
if (nextValue > _UTF8_ONE_BYTE_MAX &&
nextValue < _UTF8_FIRST_BYTE_OF_TWO_BASE) {
diff --git a/lib/utf/utf_core.dart b/lib/utf/utf_core.dart
index 32f3f84..2cf5110 100644
--- a/lib/utf/utf_core.dart
+++ b/lib/utf/utf_core.dart
@@ -11,9 +11,9 @@
// (http://code.google.com/p/dart/issues/detail?id=1357). Consider
// removing after this issue is resolved.
if (_is16BitCodeUnit()) {
- codepoints = _utf16CodeUnitsToCodepoints(str.charCodes());
+ codepoints = _utf16CodeUnitsToCodepoints(str.charCodes);
} else {
- codepoints = str.charCodes();
+ codepoints = str.charCodes;
}
return codepoints;
}
@@ -124,7 +124,7 @@
.fromListRangeIterator(source, replacementCodepoint);
List<int> codepoints = new List<int>(source.remaining);
int i = 0;
- while (decoder.hasNext()) {
+ while (decoder.hasNext) {
codepoints[i++] = decoder.next();
}
if (i == codepoints.length) {
@@ -158,7 +158,7 @@
Iterator<int> iterator() => this;
- bool hasNext() => utf16CodeUnitIterator.hasNext();
+ bool get hasNext => utf16CodeUnitIterator.hasNext;
int next() {
int value = utf16CodeUnitIterator.next();
@@ -174,7 +174,7 @@
// transfer directly
return value;
} else if (value < UNICODE_UTF16_SURROGATE_UNIT_1_BASE &&
- utf16CodeUnitIterator.hasNext()) {
+ utf16CodeUnitIterator.hasNext) {
// merge surrogate pair
int nextValue = utf16CodeUnitIterator.next();
if (nextValue >= UNICODE_UTF16_SURROGATE_UNIT_1_BASE &&
@@ -241,7 +241,7 @@
* and move forward/backward within the iterator.
*/
abstract class _ListRangeIterator implements Iterator<int> {
- bool hasNext();
+ bool hasNext;
int next();
int get position;
void backup([by]);
@@ -256,7 +256,7 @@
_ListRangeIteratorImpl(this._source, this._offset, this._end);
- bool hasNext() => _offset < _end;
+ bool get hasNext => _offset < _end;
int next() => _source[_offset++];
diff --git a/pkg/args/lib/args.dart b/pkg/args/lib/args.dart
index f97c1bd..a74c981 100644
--- a/pkg/args/lib/args.dart
+++ b/pkg/args/lib/args.dart
@@ -496,7 +496,7 @@
* that abbreviation.
*/
_Option _findByAbbr(String abbr) {
- for (var option in _options.getValues()) {
+ for (var option in _options.values) {
if (option.abbreviation == abbr) return option;
}
@@ -544,7 +544,7 @@
}
/** Get the names of the options as a [Collection]. */
- Collection<String> get options => _options.getKeys();
+ Collection<String> get options => _options.keys;
}
class _Option {
@@ -630,7 +630,7 @@
if (option.help != null) write(2, option.help);
if (option.allowedHelp != null) {
- var allowedNames = option.allowedHelp.getKeys();
+ var allowedNames = option.allowedHelp.keys;
allowedNames.sort((a, b) => a.compareTo(b));
newline();
for (var name in allowedNames) {
@@ -692,7 +692,7 @@
// Make room for the allowed help.
if (option.allowedHelp != null) {
- for (var allowed in option.allowedHelp.getKeys()) {
+ for (var allowed in option.allowedHelp.keys) {
title = max(title, getAllowedTitle(allowed).length);
}
}
diff --git a/pkg/dartdoc/bin/dartdoc.dart b/pkg/dartdoc/bin/dartdoc.dart
index 5e728e8..5e7a9b0 100644
--- a/pkg/dartdoc/bin/dartdoc.dart
+++ b/pkg/dartdoc/bin/dartdoc.dart
@@ -126,7 +126,7 @@
'default. Specify a comma-separated list of\n'
'library names, or call this option multiple times.',
callback: (incLibs) {
- if(!incLibs.isEmpty()) {
+ if(!incLibs.isEmpty) {
List<String> allLibs = new List<String>();
for(final lst in incLibs) {
var someLibs = lst.split(',');
@@ -145,7 +145,7 @@
'comma-separated list of library names, or call\n'
'this option multiple times.',
callback: (excLibs) {
- if(!excLibs.isEmpty()) {
+ if(!excLibs.isEmpty) {
List<String> allLibs = new List<String>();
for(final lst in excLibs) {
var someLibs = lst.split(',');
@@ -168,7 +168,7 @@
dartdoc.dartdocPath = libPath.append('pkg/dartdoc');
- if (args.isEmpty()) {
+ if (args.isEmpty) {
print('No arguments provided.');
print(USAGE);
print(argParser.getUsage());
@@ -188,7 +188,7 @@
return;
}
- if (entrypoints.isEmpty()) {
+ if (entrypoints.isEmpty) {
print('No entrypoints provided.');
print(argParser.getUsage());
return;
diff --git a/pkg/dartdoc/lib/dartdoc.dart b/pkg/dartdoc/lib/dartdoc.dart
index d3380d1..0fb159e 100644
--- a/pkg/dartdoc/lib/dartdoc.dart
+++ b/pkg/dartdoc/lib/dartdoc.dart
@@ -90,6 +90,15 @@
}
/**
+ * Returns the display name of the library. This is necessary to account for
+ * dart: libraries.
+ */
+String displayName(LibraryMirror library) {
+ var uri = library.uri.toString();
+ return uri.startsWith('dart:') ? uri.toString() : library.simpleName;
+}
+
+/**
* Copies all of the files in the directory [from] to [to]. Does *not*
* recursively copy subdirectories.
*
@@ -257,16 +266,16 @@
return false;
}
var includeByDefault = true;
- String libraryName = library.simpleName;
- if (!includedLibraries.isEmpty()) {
+ String libraryName = displayName(library);
+ if (excludedLibraries.contains(libraryName)) {
+ return false;
+ }
+ if (!includedLibraries.isEmpty) {
includeByDefault = false;
- if (includedLibraries.indexOf(libraryName) != -1) {
+ if (includedLibraries.contains(libraryName)) {
return true;
}
}
- if (excludedLibraries.indexOf(libraryName) != -1) {
- return false;
- }
if (libraryName.startsWith('dart:')) {
String suffix = libraryName.substring('dart:'.length);
LibraryInfo info = LIBRARIES[suffix];
@@ -283,7 +292,7 @@
*/
bool shouldLinkToPublicApi(LibraryMirror library) {
if (linkToApi) {
- String libraryName = library.simpleName;
+ String libraryName = displayName(library);
if (libraryName.startsWith('dart:')) {
String suffix = libraryName.substring('dart:'.length);
LibraryInfo info = LIBRARIES[suffix];
@@ -326,11 +335,11 @@
void _document(Compilation compilation) {
// Sort the libraries by name (not key).
_sortedLibraries = new List<LibraryMirror>.from(
- compilation.mirrors.libraries.getValues().filter(
+ compilation.mirrors.libraries.values.filter(
shouldIncludeLibrary));
_sortedLibraries.sort((x, y) {
- return x.simpleName.toUpperCase().compareTo(
- y.simpleName.toUpperCase());
+ return displayName(x).toUpperCase().compareTo(
+ displayName(y).toUpperCase());
});
// Generate the docs.
@@ -410,7 +419,7 @@
var data = '';
if (_currentLibrary != null) {
data = '$data data-library='
- '"${md.escapeHtml(_currentLibrary.simpleName)}"';
+ '"${md.escapeHtml(displayName(_currentLibrary))}"';
}
if (_currentType != null) {
@@ -519,7 +528,7 @@
}
void docIndexLibrary(LibraryMirror library) {
- writeln('<h4>${a(libraryUrl(library), library.simpleName)}</h4>');
+ writeln('<h4>${a(libraryUrl(library), displayName(library))}</h4>');
}
/**
@@ -570,14 +579,14 @@
void docLibraryNavigationJson(LibraryMirror library, List libraryList) {
var libraryInfo = {};
- libraryInfo[NAME] = library.simpleName;
+ libraryInfo[NAME] = displayName(library);
final List members = docMembersJson(library.declaredMembers);
- if (!members.isEmpty()) {
+ if (!members.isEmpty) {
libraryInfo[MEMBERS] = members;
}
final types = [];
- for (InterfaceMirror type in orderByName(library.types.getValues())) {
+ for (InterfaceMirror type in orderByName(library.types.values)) {
if (!showPrivate && type.isPrivate) continue;
var typeInfo = {};
@@ -591,11 +600,11 @@
typeInfo[KIND] = TYPEDEF;
}
final List typeMembers = docMembersJson(type.declaredMembers);
- if (!typeMembers.isEmpty()) {
+ if (!typeMembers.isEmpty) {
typeInfo[MEMBERS] = typeMembers;
}
- if (!type.declaration.typeVariables.isEmpty()) {
+ if (!type.declaration.typeVariables.isEmpty) {
final typeVariables = [];
for (final typeVariable in type.declaration.typeVariables) {
typeVariables.add(typeVariable.displayName);
@@ -604,7 +613,7 @@
}
types.add(typeInfo);
}
- if (!types.isEmpty()) {
+ if (!types.isEmpty) {
libraryInfo[TYPES] = types;
}
@@ -613,7 +622,7 @@
List docMembersJson(Map<Object,MemberMirror> memberMap) {
final members = [];
- for (MemberMirror member in orderByName(memberMap.getValues())) {
+ for (MemberMirror member in orderByName(memberMap.values)) {
if (!showPrivate && member.isPrivate) continue;
var memberInfo = {};
@@ -630,7 +639,7 @@
} else {
memberInfo[KIND] = METHOD;
}
- if (method.parameters.isEmpty()) {
+ if (method.parameters.isEmpty) {
memberInfo[NO_PARAMS] = true;
}
}
@@ -655,9 +664,9 @@
write('<h2><div class="icon-library"></div>');
if ((_currentLibrary == library) && (_currentType == null)) {
- write('<strong>${library.simpleName}</strong>');
+ write('<strong>${displayName(library)}</strong>');
} else {
- write('${a(libraryUrl(library), library.simpleName)}');
+ write('${a(libraryUrl(library), displayName(library))}');
}
write('</h2>');
@@ -675,7 +684,7 @@
final types = <InterfaceMirror>[];
final exceptions = <InterfaceMirror>[];
- for (InterfaceMirror type in orderByName(library.types.getValues())) {
+ for (InterfaceMirror type in orderByName(library.types.values)) {
if (!showPrivate && type.isPrivate) continue;
if (isException(type)) {
@@ -715,16 +724,16 @@
void docLibrary(LibraryMirror library) {
if (verbose) {
- print('Library \'${library.simpleName}\':');
+ print('Library \'${displayName(library)}\':');
}
_totalLibraries++;
_currentLibrary = library;
_currentType = null;
startFile(libraryUrl(library));
- writeHeader('${library.simpleName} Library',
- [library.simpleName, libraryUrl(library)]);
- writeln('<h2><strong>${library.simpleName}</strong> library</h2>');
+ writeHeader('${displayName(library)} Library',
+ [displayName(library), libraryUrl(library)]);
+ writeln('<h2><strong>${displayName(library)}</strong> library</h2>');
// Look for a comment for the entire library.
final comment = getLibraryComment(library);
@@ -741,7 +750,7 @@
final typedefs = <TypedefMirror>[];
final exceptions = <InterfaceMirror>[];
- for (InterfaceMirror type in orderByName(library.types.getValues())) {
+ for (InterfaceMirror type in orderByName(library.types.values)) {
if (!showPrivate && type.isPrivate) continue;
if (isException(type)) {
@@ -765,7 +774,7 @@
writeFooter();
endFile();
- for (final type in library.types.getValues()) {
+ for (final type in library.types.values) {
if (!showPrivate && type.isPrivate) continue;
docType(type);
@@ -813,8 +822,8 @@
final typeTitle =
'${typeName(type)} ${kind}';
- writeHeader('$typeTitle / ${type.library.simpleName} Library',
- [type.library.simpleName, libraryUrl(type.library),
+ writeHeader('$typeTitle / ${displayName(type.library)} Library',
+ [displayName(type.library), libraryUrl(type.library),
typeName(type), typeUrl(type)]);
writeln(
'''
@@ -1130,10 +1139,10 @@
Map<String,MemberMirror> getters,
Map<String,MemberMirror> setters,
{bool allInherited}) {
- if (getters.isEmpty() && setters.isEmpty()) return;
+ if (getters.isEmpty && setters.isEmpty) return;
- var nameSet = new Set<String>.from(getters.getKeys());
- nameSet.addAll(setters.getKeys());
+ var nameSet = new Set<String>.from(getters.keys);
+ nameSet.addAll(setters.keys);
var nameList = new List<String>.from(nameSet);
nameList.sort((String a, String b) {
return a.toLowerCase().compareTo(b.toLowerCase());
@@ -1512,7 +1521,7 @@
/** Gets the URL to the documentation for [library]. */
String libraryUrl(LibraryMirror library) {
- return '${sanitize(library.simpleName)}.html';
+ return '${sanitize(displayName(library))}.html';
}
/** Gets the URL for the documentation for [type]. */
@@ -1524,7 +1533,7 @@
// Always get the generic type to strip off any type parameters or
// arguments. If the type isn't generic, genericType returns `this`, so it
// works for non-generic types too.
- return '${sanitize(type.library.simpleName)}/'
+ return '${sanitize(displayName(type.library))}/'
'${type.declaration.simpleName}.html';
}
@@ -1658,7 +1667,7 @@
typeParams.add(typeParam.simpleName);
}
}
- if (typeParams.isEmpty()) {
+ if (typeParams.isEmpty) {
return type.simpleName;
}
final params = Strings.join(typeParams, ', ');
@@ -1848,7 +1857,7 @@
final InterfaceMirror inheritedFrom;
DocComment(this.text, [this.inheritedFrom = null]) {
- assert(text != null && !text.trim().isEmpty());
+ assert(text != null && !text.trim().isEmpty);
}
String get html => md.markdownToHtml(text);
diff --git a/pkg/dartdoc/lib/mirrors.dart b/pkg/dartdoc/lib/mirrors.dart
index 692e37a..d6a8010 100644
--- a/pkg/dartdoc/lib/mirrors.dart
+++ b/pkg/dartdoc/lib/mirrors.dart
@@ -132,6 +132,11 @@
* Returns the source location for this library.
*/
Location get location;
+
+ /**
+ * Returns the canonical URI for this library.
+ */
+ Uri get uri;
}
/**
@@ -476,8 +481,8 @@
/**
* Returns the [Source] in which this [Location] indexes.
- * If [:loc:] is a location, [:loc.source().text()[loc.start()] is where it
- * starts, and [:loc.source().text()[loc.end()] is where it ends.
+ * If [:loc:] is a location, [:loc.source().text()[loc.start]:] is where it
+ * starts, and [:loc.source().text()[loc.end]:] is where it ends.
*/
Source get source;
diff --git a/pkg/dartdoc/lib/mirrors_util.dart b/pkg/dartdoc/lib/mirrors_util.dart
index bbd6b49..5ba6021 100644
--- a/pkg/dartdoc/lib/mirrors_util.dart
+++ b/pkg/dartdoc/lib/mirrors_util.dart
@@ -20,7 +20,7 @@
type = type.declaration;
var subtypes = <InterfaceMirror>[];
type.system.libraries.forEach((_, library) {
- for (InterfaceMirror otherType in library.types.getValues()) {
+ for (InterfaceMirror otherType in library.types.values) {
var superClass = otherType.superclass;
if (superClass !== null) {
superClass = superClass.declaration;
@@ -119,9 +119,9 @@
InterfaceMirror next() {
InterfaceMirror type;
- if (queue.isEmpty()) {
+ if (queue.isEmpty) {
if (object === null) {
- throw new NoMoreElementsException();
+ throw new StateError("No more elements");
}
type = object;
object = null;
@@ -131,5 +131,5 @@
}
}
- bool hasNext() => !queue.isEmpty() || object !== null;
+ bool get hasNext => !queue.isEmpty || object !== null;
}
diff --git a/pkg/dartdoc/lib/src/client/dropdown.dart b/pkg/dartdoc/lib/src/client/dropdown.dart
index 8da62bc..30d63fe 100644
--- a/pkg/dartdoc/lib/src/client/dropdown.dart
+++ b/pkg/dartdoc/lib/src/client/dropdown.dart
@@ -19,7 +19,7 @@
if (text == currentSearchText) {
return;
}
- if (text.isEmpty()) {
+ if (text.isEmpty) {
updateResults(text, results);
hideDropDown();
return;
@@ -29,12 +29,12 @@
String typeText = text.substring(0, text.indexOf('.'));
String memberText = text.substring(text.indexOf('.') + 1);
- if (typeText.isEmpty() && memberText.isEmpty()) {
+ if (typeText.isEmpty && memberText.isEmpty) {
// Don't search on '.'.
- } else if (typeText.isEmpty()) {
+ } else if (typeText.isEmpty) {
// Search text is of the form '.id' => Look up members.
matchAllMembers(results, memberText);
- } else if (memberText.isEmpty()) {
+ } else if (memberText.isEmpty) {
// Search text is of the form 'Type.' => Look up members in 'Type'.
matchAllMembersInType(results, typeText, memberText);
} else {
@@ -55,7 +55,7 @@
table.classes.add('drop-down-table');
elements.add(table);
- if (results.isEmpty()) {
+ if (results.isEmpty) {
var row = table.insertRow(0);
row.innerHTML = "<tr><td>No matches found for '$text'.</td></tr>";
} else {
@@ -239,7 +239,7 @@
void updateResults(String searchText, List<Result> results) {
currentSearchText = searchText;
currentResults = results;
- if (currentResults.isEmpty()) {
+ if (currentResults.isEmpty) {
_currentResultIndex = -1;
currentResult = null;
} else {
@@ -305,7 +305,7 @@
/** Show the search drop down unless there are no current results. */
void showDropDown() {
- if (currentResults.isEmpty()) {
+ if (currentResults.isEmpty) {
hideDropDown();
} else {
dropdown.style.visibility = 'visible';
diff --git a/pkg/dartdoc/lib/src/client/search.dart b/pkg/dartdoc/lib/src/client/search.dart
index fce6d2d..d9b0da1 100644
--- a/pkg/dartdoc/lib/src/client/search.dart
+++ b/pkg/dartdoc/lib/src/client/search.dart
@@ -17,13 +17,13 @@
SearchText(String searchText)
: text = searchText,
lowerCase = searchText.toLowerCase(),
- camelCase = searchText.isEmpty() ? ''
+ camelCase = searchText.isEmpty ? ''
: '${searchText.substring(0, 1).toUpperCase()}'
'${searchText.substring(1)}';
int get length => text.length;
- bool isEmpty() => length == 0;
+ bool get isEmpty => length == 0;
}
/**
@@ -149,7 +149,7 @@
* [searchText], or returns [: null :] if no match is found.
*/
StringMatch obtainMatch(SearchText searchText, String text) {
- if (searchText.isEmpty()) {
+ if (searchText.isEmpty) {
return new StringMatch(searchText, text, 0, 0);
}
int offset = text.toLowerCase().indexOf(searchText.lowerCase);
diff --git a/pkg/dartdoc/lib/src/dartdoc/comment_map.dart b/pkg/dartdoc/lib/src/dartdoc/comment_map.dart
index 87f9940..f4ddf5f 100644
--- a/pkg/dartdoc/lib/src/dartdoc/comment_map.dart
+++ b/pkg/dartdoc/lib/src/dartdoc/comment_map.dart
@@ -33,7 +33,7 @@
_ensureFileParsed(span.source);
String comment = _comments[span.source.uri.toString()][span.start];
- assert(comment == null || !comment.trim().isEmpty());
+ assert(comment == null || !comment.trim().isEmpty);
return comment;
}
@@ -46,7 +46,7 @@
String findLibrary(Source source) {
_ensureFileParsed(source);
String comment = _libraryComments[source.uri.toString()];
- assert(comment == null || !comment.trim().isEmpty());
+ assert(comment == null || !comment.trim().isEmpty);
return comment;
}
@@ -87,7 +87,7 @@
lastComment = null;
}
} else if (lastComment != null) {
- if (!lastComment.trim().isEmpty()) {
+ if (!lastComment.trim().isEmpty) {
// We haven't attached the last doc comment to something yet, so stick
// it to this token.
comments[token.charOffset] = lastComment;
diff --git a/pkg/dartdoc/lib/src/markdown/block_parser.dart b/pkg/dartdoc/lib/src/markdown/block_parser.dart
index 98a0945..79d9e69 100644
--- a/pkg/dartdoc/lib/src/markdown/block_parser.dart
+++ b/pkg/dartdoc/lib/src/markdown/block_parser.dart
@@ -300,7 +300,7 @@
// Anything else is paragraph text or other stuff that can be in a list
// item. However, if the previous item is a blank line, this means we're
// done with the list and are starting a new top-level paragraph.
- if ((childLines.length > 0) && (childLines.last() == '')) break;
+ if ((childLines.length > 0) && (childLines.last == '')) break;
childLines.add(parser.current);
}
parser.advance();
diff --git a/pkg/dartdoc/lib/src/markdown/html_renderer.dart b/pkg/dartdoc/lib/src/markdown/html_renderer.dart
index b86ac95..70d4239 100644
--- a/pkg/dartdoc/lib/src/markdown/html_renderer.dart
+++ b/pkg/dartdoc/lib/src/markdown/html_renderer.dart
@@ -27,7 +27,7 @@
bool visitElementBefore(Element element) {
// Hackish. Separate block-level elements with newlines.
- if (!buffer.isEmpty() &&
+ if (!buffer.isEmpty &&
_BLOCK_TAGS.firstMatch(element.tag) != null) {
buffer.add('\n');
}
@@ -35,9 +35,9 @@
buffer.add('<${element.tag}');
// Sort the keys so that we generate stable output.
- // TODO(rnystrom): This assumes getKeys() returns a fresh mutable
+ // TODO(rnystrom): This assumes keys returns a fresh mutable
// collection.
- final attributeNames = element.attributes.getKeys();
+ final attributeNames = element.attributes.keys;
attributeNames.sort((a, b) => a.compareTo(b));
for (final name in attributeNames) {
buffer.add(' $name="${element.attributes[name]}"');
diff --git a/pkg/dartdoc/lib/src/markdown/inline_parser.dart b/pkg/dartdoc/lib/src/markdown/inline_parser.dart
index eb941a7..a958888 100644
--- a/pkg/dartdoc/lib/src/markdown/inline_parser.dart
+++ b/pkg/dartdoc/lib/src/markdown/inline_parser.dart
@@ -115,11 +115,11 @@
writeTextRange(int start, int end) {
if (end > start) {
final text = source.substring(start, end);
- final nodes = _stack.last().children;
+ final nodes = _stack.last.children;
// If the previous node is text too, just append.
- if ((nodes.length > 0) && (nodes.last() is Text)) {
- final newNode = new Text('${nodes.last().text}$text');
+ if ((nodes.length > 0) && (nodes.last is Text)) {
+ final newNode = new Text('${nodes.last.text}$text');
nodes[nodes.length - 1] = newNode;
} else {
nodes.add(new Text(text));
@@ -128,7 +128,7 @@
}
addNode(Node node) {
- _stack.last().children.add(node);
+ _stack.last.children.add(node);
}
// TODO(rnystrom): Only need this because RegExp doesn't let you start
@@ -156,7 +156,7 @@
bool tryMatch(InlineParser parser) {
final startMatch = pattern.firstMatch(parser.currentSource);
- if ((startMatch != null) && (startMatch.start() == 0)) {
+ if ((startMatch != null) && (startMatch.start == 0)) {
// Write any existing plain text up to this point.
parser.writeText();
@@ -354,7 +354,7 @@
/// pattern.
bool tryMatch(InlineParser parser) {
Match endMatch = syntax.endPattern.firstMatch(parser.currentSource);
- if ((endMatch != null) && (endMatch.start() == 0)) {
+ if ((endMatch != null) && (endMatch.start == 0)) {
// Close the tag.
close(parser, endMatch);
return true;
diff --git a/pkg/dartdoc/lib/src/mirrors/dart2js_mirror.dart b/pkg/dartdoc/lib/src/mirrors/dart2js_mirror.dart
index c400db2..995fcba 100644
--- a/pkg/dartdoc/lib/src/mirrors/dart2js_mirror.dart
+++ b/pkg/dartdoc/lib/src/mirrors/dart2js_mirror.dart
@@ -40,13 +40,13 @@
FunctionSignature signature) {
var parameters = <ParameterMirror>[];
Link<Element> link = signature.requiredParameters;
- while (!link.isEmpty()) {
+ while (!link.isEmpty) {
parameters.add(new Dart2JsParameterMirror(
system, method, link.head, false));
link = link.tail;
}
link = signature.optionalParameters;
- while (!link.isEmpty()) {
+ while (!link.isEmpty) {
parameters.add(new Dart2JsParameterMirror(
system, method, link.head, true));
link = link.tail;
@@ -251,7 +251,7 @@
}
void processQueueList(Enqueuer world, List<LibraryElement> elements) {
- backend.processNativeClasses(world, libraries.getValues());
+ backend.processNativeClasses(world, libraries.values);
for (var library in elements) {
library.forEachLocalMember((element) {
world.addToWorkList(element);
@@ -411,7 +411,7 @@
String toString() => _element.toString();
- int hashCode() => qualifiedName.hashCode();
+ int get hashCode => qualifiedName.hashCode;
}
abstract class Dart2JsProxyMirror implements Dart2JsMirror {
@@ -421,7 +421,7 @@
String get displayName => simpleName;
- int hashCode() => qualifiedName.hashCode();
+ int get hashCode => qualifiedName.hashCode;
}
//------------------------------------------------------------------------------
@@ -463,7 +463,7 @@
String get qualifiedName => simpleName;
// TODO(johnniwinther): Hack! Dart2JsMirrorSystem need not be a Mirror.
- int hashCode() => qualifiedName.hashCode();
+ int get hashCode => qualifiedName.hashCode;
}
abstract class Dart2JsObjectMirror extends Dart2JsElementMirror
@@ -482,6 +482,8 @@
LibraryElement get _library => _element;
+ Uri get uri => _library.uri;
+
LibraryMirror library() => this;
/**
@@ -737,7 +739,7 @@
List<InterfaceMirror> get interfaces {
var list = <InterfaceMirror>[];
Link<DartType> link = _class.interfaces;
- while (!link.isEmpty()) {
+ while (!link.isEmpty) {
var type = _convertTypeToTypeMirror(system, link.head,
system.compiler.types.dynamicType);
list.add(type);
@@ -757,7 +759,7 @@
bool get isDeclaration => true;
List<TypeMirror> get typeArguments {
- throw new UnsupportedOperationException(
+ throw new UnsupportedError(
'Declarations do not have type arguments');
}
@@ -840,7 +842,7 @@
bool get isTypedef => true;
List<TypeMirror> get typeArguments {
- throw new UnsupportedOperationException(
+ throw new UnsupportedError(
'Declarations do not have type arguments');
}
@@ -1059,12 +1061,12 @@
}
var thisTypeArguments = typeArguments.iterator();
var otherTypeArguments = other.typeArguments.iterator();
- while (thisTypeArguments.hasNext() && otherTypeArguments.hasNext()) {
+ while (thisTypeArguments.hasNext && otherTypeArguments.hasNext) {
if (thisTypeArguments.next() != otherTypeArguments.next()) {
return false;
}
}
- return !thisTypeArguments.hasNext() && !otherTypeArguments.hasNext();
+ return !thisTypeArguments.hasNext && !otherTypeArguments.hasNext;
}
}
diff --git a/pkg/dartdoc/lib/src/mirrors/util.dart b/pkg/dartdoc/lib/src/mirrors/util.dart
index 760b9d2..755b78f 100644
--- a/pkg/dartdoc/lib/src/mirrors/util.dart
+++ b/pkg/dartdoc/lib/src/mirrors/util.dart
@@ -18,11 +18,11 @@
}
void operator []=(K key, value) {
- throw new UnsupportedOperationException('[]= is not supported');
+ throw new UnsupportedError('[]= is not supported');
}
void clear() {
- throw new UnsupportedOperationException('clear() is not supported');
+ throw new UnsupportedError('clear() is not supported');
}
bool containsKey(K key) {
@@ -45,19 +45,19 @@
return found;
}
- Collection<K> getKeys() {
+ Collection<K> get keys {
var keys = <K>[];
forEach((k,_) => keys.add(k));
return keys;
}
- Collection<V> getValues() {
+ Collection<V> get values {
var values = <V>[];
forEach((_,v) => values.add(v));
return values;
}
- bool isEmpty() => length == 0;
+ bool get isEmpty => length == 0;
V putIfAbsent(K key, V ifAbsent()) {
if (!containsKey(key)) {
V value = this[key];
@@ -68,13 +68,13 @@
}
V remove(K key) {
- throw new UnsupportedOperationException('V remove(K key) is not supported');
+ throw new UnsupportedError('V remove(K key) is not supported');
}
}
/**
* [ImmutableMapWrapper] wraps a (mutable) map as an immutable map where all
- * mutating operations throw [UnsupportedOperationException] upon invocation.
+ * mutating operations throw [UnsupportedError] upon invocation.
*/
class ImmutableMapWrapper<K,V> extends AbstractMap<K,V> {
final Map<K,V> _map;
diff --git a/pkg/fixnum/int32.dart b/pkg/fixnum/int32.dart
index 3787dc8..295a340 100644
--- a/pkg/fixnum/int32.dart
+++ b/pkg/fixnum/int32.dart
@@ -321,14 +321,14 @@
return _i >= _convert(other);
}
- bool isEven() => (_i & 0x1) == 0;
- bool isMaxValue() => _i == 2147483647;
- bool isMinValue() => _i == -2147483648;
- bool isNegative() => _i < 0;
- bool isOdd() => (_i & 0x1) == 1;
- bool isZero() => _i == 0;
+ bool get isEven => (_i & 0x1) == 0;
+ bool get isMaxValue => _i == 2147483647;
+ bool get isMinValue => _i == -2147483648;
+ bool get isNegative => _i < 0;
+ bool get isOdd => (_i & 0x1) == 1;
+ bool get isZero => _i == 0;
- int hashCode() => _i;
+ int get hashCode => _i;
int32 abs() => _i < 0 ? new int32.fromInt(-_i) : this;
diff --git a/pkg/fixnum/int64.dart b/pkg/fixnum/int64.dart
index c617413..8509e72 100644
--- a/pkg/fixnum/int64.dart
+++ b/pkg/fixnum/int64.dart
@@ -366,10 +366,10 @@
}
int64 operator %(other) {
- if (other.isZero()) {
+ if (other.isZero) {
throw new IntegerDivisionByZeroException();
}
- if (this.isZero()) {
+ if (this.isZero) {
return ZERO;
}
int64 o = _promote(other).abs();
@@ -381,7 +381,7 @@
// int64 remainder(other) => this - (this ~/ other) * other;
int64 remainder(other) {
- if (other.isZero()) {
+ if (other.isZero) {
throw new IntegerDivisionByZeroException();
}
int64 o = _promote(other).abs();
@@ -561,17 +561,17 @@
return this.compareTo(other) >= 0;
}
- bool isEven() => (_l & 0x1) == 0;
- bool isMaxValue() => (_h == _MASK_2 >> 1) && _m == _MASK && _l == _MASK;
- bool isMinValue() => _h == _SIGN_BIT_VALUE && _m == 0 && _l == 0;
- bool isNegative() => (_h >> (_BITS2 - 1)) != 0;
- bool isOdd() => (_l & 0x1) == 1;
- bool isZero() => _h == 0 && _m == 0 && _l == 0;
+ bool get isEven => (_l & 0x1) == 0;
+ bool get isMaxValue => (_h == _MASK_2 >> 1) && _m == _MASK && _l == _MASK;
+ bool get isMinValue => _h == _SIGN_BIT_VALUE && _m == 0 && _l == 0;
+ bool get isNegative => (_h >> (_BITS2 - 1)) != 0;
+ bool get isOdd => (_l & 0x1) == 1;
+ bool get isZero => _h == 0 && _m == 0 && _l == 0;
/**
* Returns a hash code based on all the bits of this [int64].
*/
- int hashCode() {
+ int get hashCode {
int bottom = ((_m & 0x3ff) << _BITS) | _l;
int top = (_h << 12) | ((_m >> 10) & 0xfff);
return bottom ^ top;
@@ -674,22 +674,22 @@
// TODO(rice) - Make this faster by converting several digits at once.
String toString() {
int64 a = this;
- if (a.isZero()) {
+ if (a.isZero) {
return "0";
}
- if (a.isMinValue()) {
+ if (a.isMinValue) {
return "-9223372036854775808";
}
String result = "";
bool negative = false;
- if (a.isNegative()) {
+ if (a.isNegative) {
negative = true;
a = -a;
}
int64 ten = new int64._bits(10, 0, 0);
- while (!a.isZero()) {
+ while (!a.isZero) {
a = _divMod(a, ten, true);
result = "${_remainder._l}$result";
}
@@ -702,12 +702,12 @@
// TODO(rice) - Make this faster by avoiding arithmetic.
String toHexString() {
int64 x = new int64._copy(this);
- if (isZero()) {
+ if (isZero) {
return "0";
}
String hexStr = "";
int64 digit_f = new int64.fromInt(0xf);
- while (!x.isZero()) {
+ while (!x.isZero) {
int digit = x._l & 0xf;
hexStr = "${_hexDigit(digit)}$hexStr";
x = x.shiftRightUnsigned(4);
@@ -720,22 +720,22 @@
throw "Bad radix: $radix";
}
int64 a = this;
- if (a.isZero()) {
+ if (a.isZero) {
return "0";
}
- if (a.isMinValue()) {
+ if (a.isMinValue) {
return _minValues[radix];
}
String result = "";
bool negative = false;
- if (a.isNegative()) {
+ if (a.isNegative) {
negative = true;
a = -a;
}
int64 r = new int64._bits(radix, 0, 0);
- while (!a.isZero()) {
+ while (!a.isZero) {
a = _divMod(a, r, true);
result = "${_hexDigit(_remainder._l)}$result";
}
@@ -876,7 +876,7 @@
bool gte = _trialSubtract(a, bshift);
if (gte) {
quotient._setBit(shift);
- if (a.isZero()) {
+ if (a.isZero) {
break;
}
}
@@ -906,7 +906,7 @@
int64 _divModByMinValue(bool computeRemainder) {
// MIN_VALUE / MIN_VALUE == 1, remainder = 0
// (x != MIN_VALUE) / MIN_VALUE == 0, remainder == x
- if (isMinValue()) {
+ if (isMinValue) {
if (computeRemainder) {
_remainder = ZERO;
}
@@ -996,23 +996,23 @@
}
int64 _divMod(int64 a, int64 b, bool computeRemainder) {
- if (b.isZero()) {
+ if (b.isZero) {
throw new IntegerDivisionByZeroException();
}
- if (a.isZero()) {
+ if (a.isZero) {
if (computeRemainder) {
_remainder = ZERO;
}
return ZERO;
}
// MIN_VALUE / MIN_VALUE = 1, anything other a / MIN_VALUE is 0.
- if (b.isMinValue()) {
+ if (b.isMinValue) {
return a._divModByMinValue(computeRemainder);
}
// Normalize b to abs(b), keeping track of the parity in 'negative'.
// We can do this because we have already ensured that b != MIN_VALUE.
bool negative = false;
- if (b.isNegative()) {
+ if (b.isNegative) {
b = -b;
negative = !negative;
}
@@ -1042,7 +1042,7 @@
* modify its value.
*/
bool aIsCopy = false;
- if (a.isMinValue()) {
+ if (a.isMinValue) {
aIsMinValue = true;
aIsNegative = true;
// If b is not a power of two, treat -a as MAX_VALUE (instead of the
@@ -1062,7 +1062,7 @@
}
return c;
}
- } else if (a.isNegative()) {
+ } else if (a.isNegative) {
aIsNegative = true;
a = -a;
aIsCopy = true;
diff --git a/pkg/fixnum/intx.dart b/pkg/fixnum/intx.dart
index 18ad029..a18d849 100644
--- a/pkg/fixnum/intx.dart
+++ b/pkg/fixnum/intx.dart
@@ -39,14 +39,14 @@
bool operator >=(other);
// Testers.
- bool isEven();
- bool isMaxValue();
- bool isMinValue();
- bool isNegative();
- bool isOdd();
- bool isZero();
+ bool get isEven;
+ bool get isMaxValue;
+ bool get isMinValue;
+ bool get isNegative;
+ bool get isOdd;
+ bool get isZero;
- int hashCode();
+ int get hashCode;
intx abs();
diff --git a/pkg/fixnum/test/int_64_test.dart b/pkg/fixnum/test/int_64_test.dart
index a73f2a9..a843c89 100644
--- a/pkg/fixnum/test/int_64_test.dart
+++ b/pkg/fixnum/test/int_64_test.dart
@@ -267,7 +267,7 @@
void testFactorial() {
int64 _fact(int64 n) {
- if (n.isZero()) {
+ if (n.isZero) {
return new int64.fromInt(1);
} else {
return n * _fact(n - new int64.fromInt(1));
diff --git a/pkg/intl/lib/bidi_utils.dart b/pkg/intl/lib/bidi_utils.dart
index 778f278..e456c32 100644
--- a/pkg/intl/lib/bidi_utils.dart
+++ b/pkg/intl/lib/bidi_utils.dart
@@ -243,8 +243,8 @@
Match match = const RegExp('<\\w+').firstMatch(html);
if (match != null) {
buffer.add(html.substring(
- startIndex, match.end())).add(' dir=$direction');
- startIndex = match.end();
+ startIndex, match.end)).add(' dir=$direction');
+ startIndex = match.end;
}
return buffer.add(html.substring(startIndex)).toString();
}
@@ -296,9 +296,9 @@
var startIndex = 0;
Iterable matches = regexp.allMatches(str);
for (Match match in matches) {
- buffer.add(str.substring(startIndex, match.start())).add(before);
- buffer.add(str.substring(match.start(), match.end())).add(after);
- startIndex = match.end();
+ buffer.add(str.substring(startIndex, match.start)).add(before);
+ buffer.add(str.substring(match.start, match.end)).add(after);
+ startIndex = match.end;
}
return buffer.add(str.substring(startIndex)).toString();
}
diff --git a/pkg/intl/lib/date_format.dart b/pkg/intl/lib/date_format.dart
index d172c85..f387f06 100644
--- a/pkg/intl/lib/date_format.dart
+++ b/pkg/intl/lib/date_format.dart
@@ -249,7 +249,7 @@
* Returns a list of all locales for which we have date formatting
* information.
*/
- static List<String> allLocalesWithSymbols() => dateTimeSymbols.getKeys();
+ static List<String> allLocalesWithSymbols() => dateTimeSymbols.keys;
/**
* The named constructors for this class are all conveniences for creating
@@ -533,7 +533,7 @@
/** Recursive helper for parsing the template pattern. */
List _parsePatternHelper(String pattern) {
- if (pattern.isEmpty()) return [];
+ if (pattern.isEmpty) return [];
var matched = _match(pattern);
if (matched == null) return [];
diff --git a/pkg/intl/lib/intl.dart b/pkg/intl/lib/intl.dart
index e2e00dd..3b6c5b8 100644
--- a/pkg/intl/lib/intl.dart
+++ b/pkg/intl/lib/intl.dart
@@ -193,8 +193,10 @@
}
/**
- * Return a locale name turned into xx_YY where it might possibly be
- * in the wrong case or with a hyphen instead of an underscore.
+ * Return the name [aLocale] turned into xx_YY where it might possibly be
+ * in the wrong case or with a hyphen instead of an underscore. If
+ * [aLocale] is null, for example, if you tried to get it from IE,
+ * return the current system locale.
*/
static String canonicalizedLocale(String aLocale) {
// Locales of length < 5 are presumably two-letter forms, or else malformed.
@@ -203,6 +205,7 @@
// We treat C as a special case, and assume it wants en_ISO for formatting.
// TODO(alanknight): en_ISO is probably not quite right for the C/Posix
// locale for formatting. Consider adding C to the formats database.
+ if (aLocale == null) return systemLocale;
if (aLocale == "C") return "en_ISO";
if ((aLocale.length < 5) || (aLocale.length > 6)) return aLocale;
if (aLocale[2] != '-' && (aLocale[2] != '_')) return aLocale;
diff --git a/pkg/intl/lib/number_format.dart b/pkg/intl/lib/number_format.dart
index d77490b..00373d2 100644
--- a/pkg/intl/lib/number_format.dart
+++ b/pkg/intl/lib/number_format.dart
@@ -90,8 +90,8 @@
String format(num number) {
// TODO(alanknight): Do we have to do anything for printing numbers bidi?
// Or are they always printed left to right?
- if (number.isNaN()) return symbols.NAN;
- if (number.isInfinite()) return "${_signPrefix(number)}${symbols.INFINITY}";
+ if (number.isNaN) return symbols.NAN;
+ if (number.isInfinite) return "${_signPrefix(number)}${symbols.INFINITY}";
_newBuffer();
_add(_signPrefix(number));
@@ -169,7 +169,7 @@
paddingDigits.add(symbols.ZERO_DIGIT);
intValue = intValue ~/ 10;
}
- var integerDigits = "${intValue}${paddingDigits}".charCodes();
+ var integerDigits = "${intValue}${paddingDigits}".charCodes;
var digitLength = integerDigits.length;
if (_hasPrintableIntegerPart(intValue)) {
@@ -191,7 +191,7 @@
* Format the part after the decimal place in a fixed point number.
*/
void _formatFractionPart(String fractionPart) {
- var fractionCodes = fractionPart.charCodes();
+ var fractionCodes = fractionPart.charCodes;
var fractionLength = fractionPart.length;
while (fractionPart[fractionLength - 1] == '0' &&
fractionLength > _minimumFractionDigits + 1) {
@@ -237,7 +237,7 @@
for (var i = 0; i < numberOfDigits - basic.length; i++) {
_add(symbols.ZERO_DIGIT);
}
- for (var x in basic.charCodes()) {
+ for (var x in basic.charCodes) {
_addDigit(x);
}
}
@@ -258,7 +258,7 @@
}
/** Returns the code point for the character '0'. */
- int get _zero => '0'.charCodes()[0];
+ int get _zero => '0'.charCodes[0];
/** Returns the code point for the locale's zero digit. */
int get _localeZero => symbols.ZERO_DIGIT.charCodeAt(0);
@@ -268,7 +268,7 @@
* In en_US this would be '' and '-' respectively.
*/
String _signPrefix(num x) {
- return x.isNegative() ? _negativePrefix : _positivePrefix;
+ return x.isNegative ? _negativePrefix : _positivePrefix;
}
/**
@@ -276,6 +276,6 @@
* In en_US there are no suffixes for positive or negative.
*/
String _signSuffix(num x) {
- return x.isNegative() ? _negativeSuffix : _positiveSuffix;
+ return x.isNegative ? _negativeSuffix : _positiveSuffix;
}
}
diff --git a/pkg/intl/lib/src/date_format_field.dart b/pkg/intl/lib/src/date_format_field.dart
index 364d141..489e4f8 100644
--- a/pkg/intl/lib/src/date_format_field.dart
+++ b/pkg/intl/lib/src/date_format_field.dart
@@ -219,10 +219,10 @@
int parseEnumeratedString(_Stream input, List possibilities) {
var results = new _Stream(possibilities).findIndexes(
(each) => input.peek(each.length) == each);
- if (results.isEmpty()) throwFormatException(input);
+ if (results.isEmpty) throwFormatException(input);
results.sort(
(a, b) => possibilities[a].length.compareTo(possibilities[b].length));
- var longestResult = results.last();
+ var longestResult = results.last;
input.read(possibilities[longestResult].length);
return longestResult;
}
diff --git a/pkg/intl/lib/src/date_format_helpers.dart b/pkg/intl/lib/src/date_format_helpers.dart
index 0cd04de..3478d0b 100644
--- a/pkg/intl/lib/src/date_format_helpers.dart
+++ b/pkg/intl/lib/src/date_format_helpers.dart
@@ -133,7 +133,7 @@
var digitMatcher = const RegExp(r'\d+');
int nextInteger() {
var string = digitMatcher.stringMatch(rest());
- if (string == null || string.isEmpty()) return null;
+ if (string == null || string.isEmpty) return null;
read(string.length);
return int.parse(string);
}
diff --git a/pkg/intl/lib/src/intl_helpers.dart b/pkg/intl/lib/src/intl_helpers.dart
index 9d6df5a..95facfd 100644
--- a/pkg/intl/lib/src/intl_helpers.dart
+++ b/pkg/intl/lib/src/intl_helpers.dart
@@ -20,7 +20,7 @@
operator [](String key) {
_throwException();
}
- List getKeys() => _throwException();
+ List get keys => _throwException();
bool containsKey(String key) => _throwException();
_throwException() {
diff --git a/pkg/intl/lib/src/lazy_locale_data.dart b/pkg/intl/lib/src/lazy_locale_data.dart
index 6e515c2..6a42025 100644
--- a/pkg/intl/lib/src/lazy_locale_data.dart
+++ b/pkg/intl/lib/src/lazy_locale_data.dart
@@ -64,7 +64,7 @@
bool containsKey(String locale) => availableLocaleSet.contains(locale);
/** Returns the list of keys/locale names. */
- List getKeys() => availableLocales;
+ List get keys => availableLocales;
/**
* Returns the data stored for [localeName]. If no data has been loaded
diff --git a/pkg/intl/test/date_time_format_test_core.dart b/pkg/intl/test/date_time_format_test_core.dart
index 3920d39..36d35b9 100644
--- a/pkg/intl/test/date_time_format_test_core.dart
+++ b/pkg/intl/test/date_time_format_test_core.dart
@@ -177,7 +177,7 @@
*/
List oddLocales() {
int i = 1;
- return allLocales().filter((x) => (i++).isOdd());
+ return allLocales().filter((x) => (i++).isOdd);
}
/**
@@ -193,7 +193,7 @@
*/
List evenLocales() {
int i = 1;
- return allLocales().filter((x) => !((i++).isOdd()));
+ return allLocales().filter((x) => !((i++).isOdd));
}
// TODO(alanknight): Run specific tests for the en_ISO locale which isn't
@@ -251,7 +251,7 @@
});
test('Patterns and symbols have the same coverage',() {
- var patterns = new List.from(dateTimePatterns.getKeys());
+ var patterns = new List.from(dateTimePatterns.keys);
var compare = (a, b) => a.compareTo(b);
patterns.sort(compare);
var symbols = allLocales();
diff --git a/pkg/intl/test/number_format_test.dart b/pkg/intl/test/number_format_test.dart
index 48f4ab3..2504ae9 100644
--- a/pkg/intl/test/number_format_test.dart
+++ b/pkg/intl/test/number_format_test.dart
@@ -41,7 +41,7 @@
test('Simple set of numbers', () {
var number = new NumberFormat();
- for (var x in testNumbers.getKeys()) {
+ for (var x in testNumbers.keys) {
var formatted = number.format(testNumbers[x]);
expect(formatted, x);
}
diff --git a/pkg/intl/tool/generate_locale_data_files.dart b/pkg/intl/tool/generate_locale_data_files.dart
index 12d3f6c..6cec6ac 100644
--- a/pkg/intl/tool/generate_locale_data_files.dart
+++ b/pkg/intl/tool/generate_locale_data_files.dart
@@ -40,7 +40,7 @@
List<String> allLocales = DateFormat.allLocalesWithSymbols();
allLocales.forEach((locale) {
outputStream.writeString('"$locale"');
- if (locale == allLocales.last()) {
+ if (locale == allLocales.last) {
outputStream.writeString('];');
} else {
outputStream.writeString(',\n ');
diff --git a/pkg/logging/lib/logging.dart b/pkg/logging/lib/logging.dart
index 9a0ae91..b423e20 100644
--- a/pkg/logging/lib/logging.dart
+++ b/pkg/logging/lib/logging.dart
@@ -91,12 +91,12 @@
}
/** Override the level for this particular [Logger] and its children. */
- Level set level(value) {
+ set level(value) {
if (hierarchicalLoggingEnabled && parent != null) {
_level = value;
} else {
if (parent != null) {
- throw new UnsupportedOperationException(
+ throw new UnsupportedError(
'Please set "hierarchicalLoggingEnabled" to true if you want to '
'change the level on a non-root logger.');
}
@@ -296,7 +296,7 @@
bool operator >(Level other) => value > other.value;
bool operator >=(Level other) => value >= other.value;
int compareTo(Level other) => value - other.value;
- int hashCode() => value;
+ int get hashCode => value;
String toString() => name;
}
diff --git a/pkg/pkg.status b/pkg/pkg.status
index d1ebf16..9c6ef9a 100644
--- a/pkg/pkg.status
+++ b/pkg/pkg.status
@@ -12,27 +12,25 @@
[$compiler == dart2dart]
*: Skip
-[ $runtime == opera ]
-*: Skip
-
# Skip tests that use local file access if we're running in any browser
-[ $runtime == opera || $runtime == ff || $runtime == ie || $runtime == dartium || $runtime == chrome || $runtime == safari || $runtime == drt ]
+[ $runtime == opera || $runtime == ff || $runtime == ie9 || $runtime == dartium || $runtime == chrome || $runtime == safari || $runtime == drt ]
intl/test/date_time_format_file_even_test: Skip
intl/test/date_time_format_file_odd_test: Skip
intl/test/find_default_locale_standalone_test: Skip
+[ $runtime == opera && $compiler == dart2js ]
+intl/test/find_default_locale_browser_test: Fail
+intl/test/date_time_format_http_request_test: Skip # Timeout.
+
# Skip browser-specific Intl tests on VM
[ $runtime == vm ]
intl/test/find_default_locale_browser_test: Skip
intl/test/date_time_format_http_request_test: Skip
-# Skip http request tests on Dartium while resolving an odd
-# error there that causes the tests to timeout.
-[ $runtime == dartium || $runtime == drt ]
-intl/test/date_time_format_http_request_test: Skip
-
-[ $compiler == dart2js && $runtime == ff ]
-intl/test/date_time_format_http_request_test: Skip # Issue 5649
+# Skip http request tests on Dartium while resolving an odd
+# error there that causes the tests to timeout.
+[ $runtime == dartium || $runtime == drt ]
+intl/test/date_time_format_http_request_test: Skip
# Skip intl_message tests that use mirrors on dart2js until it's been
# implemented there.
@@ -43,7 +41,6 @@
[ $compiler == dartc ]
unittest/test/mock_regexp_negative_test: Fail
unittest/test/mock_stepwise_negative_test: Fail
-dartdoc/test/dartdoc_test: Fail # http://dartbug.com/6073
[ $compiler == dart2js || $compiler == dartc ]
unittest/test/instance_test: Skip
diff --git a/pkg/unittest/core_matchers.dart b/pkg/unittest/core_matchers.dart
index 9d9d172..a84db59 100644
--- a/pkg/unittest/core_matchers.dart
+++ b/pkg/unittest/core_matchers.dart
@@ -12,7 +12,7 @@
const _Empty();
bool matches(item, MatchState matchState) {
if (item is Map || item is Collection) {
- return item.isEmpty();
+ return item.isEmpty;
} else if (item is String) {
return item.length == 0;
} else {
@@ -102,8 +102,8 @@
var position = 0;
String reason = null;
while (reason == null) {
- if (expectedIterator.hasNext()) {
- if (actualIterator.hasNext()) {
+ if (expectedIterator.hasNext) {
+ if (actualIterator.hasNext) {
Description r = matcher(expectedIterator.next(),
actualIterator.next(),
'mismatch at position ${position}',
@@ -113,7 +113,7 @@
} else {
reason = 'shorter than expected';
}
- } else if (actualIterator.hasNext()) {
+ } else if (actualIterator.hasNext) {
reason = 'longer than expected';
} else {
return null;
@@ -141,7 +141,7 @@
} else if (expected.length != actual.length) {
reason = new StringDescription('different map lengths');
} else {
- for (var key in expected.getKeys()) {
+ for (var key in expected.keys) {
if (!actual.containsKey(key)) {
reason = new StringDescription('missing map key ');
reason.addDescriptionOf(key);
@@ -495,18 +495,18 @@
bool matches(item, MatchState matchState) => item is NullPointerException;
}
-/** A matcher for UnsupportedOperationExceptions. */
-const isUnsupportedOperationException = const _UnsupportedOperationException();
+/** A matcher for UnsupportedErrors. */
+const isUnsupportedError = const _UnsupportedError();
-/** A matcher for functions that throw UnsupportedOperationException */
-const Matcher throwsUnsupportedOperationException =
- const Throws(isUnsupportedOperationException);
+/** A matcher for functions that throw UnsupportedError */
+const Matcher throwsUnsupportedError =
+ const Throws(isUnsupportedError);
-class _UnsupportedOperationException extends ExceptionMatcher {
- const _UnsupportedOperationException() :
- super("UnsupportedOperationException");
+class _UnsupportedError extends ExceptionMatcher {
+ const _UnsupportedError() :
+ super("UnsupportedError");
bool matches(item, MatchState matchState) =>
- item is UnsupportedOperationException;
+ item is UnsupportedError;
}
/**
@@ -625,3 +625,54 @@
Description describe(Description description) =>
description.add(_description);
}
+
+/**
+ * A useful utility class for implementing other matchers through inheritance.
+ * Derived classes should call the base constructor with a feature name and
+ * description, and an instance matcher, and should implement the
+ * [featureValueOf] abstract method.
+ *
+ * The feature description will typically describe the item and the feature,
+ * while the feature name will just name the feature. For example, we may
+ * have a Widget class where each Widget has a price; we could make a
+ * FeatureMatcher that can make assertions about prices with:
+ *
+ * class HasPrice extends FeatureMatcher {
+ * const HasPrice(matcher) :
+ * super("Widget with price that is", "price", matcher);
+ * featureValueOf(actual) => actual.price;
+ * }
+ *
+ * and then use this for example like:
+ *
+ * expect(inventoryItem, new HasPrice(greaterThan(0)));
+ */
+abstract class CustomMatcher extends BaseMatcher {
+ final String _featureDescription;
+ final String _featureName;
+ final Matcher _matcher;
+
+ const CustomMatcher(this._featureDescription, this._featureName,
+ this._matcher);
+
+ /** Implement this to extract the interesting feature.*/
+ featureValueOf(actual);
+
+ bool matches(item, MatchState matchState) {
+ var f = featureValueOf(item);
+ if (_matcher.matches(f, matchState)) return true;
+ matchState.state = { 'innerState': matchState.state, 'feature': f };
+ return false;
+ }
+
+ Description describe(Description description) =>
+ description.add(_featureDescription).add(' ').addDescriptionOf(_matcher);
+
+ Description describeMismatch(item, Description mismatchDescription,
+ MatchState matchState, bool verbose) {
+ mismatchDescription.add(_featureName).add(' ');
+ _matcher.describeMismatch(matchState.state['feature'], mismatchDescription,
+ matchState.state['innerState'], verbose);
+ return mismatchDescription;
+ }
+}
diff --git a/pkg/unittest/html_enhanced_config.dart b/pkg/unittest/html_enhanced_config.dart
index 00330d8..af88f4b 100644
--- a/pkg/unittest/html_enhanced_config.dart
+++ b/pkg/unittest/html_enhanced_config.dart
@@ -153,7 +153,7 @@
List<TestCase> flattened = new List<TestCase>();
groupedBy
- .getValues()
+ .values
.forEach((tList){
tList.sort((tcA, tcB) => tcA.id - tcB.id);
flattened.addAll(tList);
diff --git a/pkg/unittest/mock.dart b/pkg/unittest/mock.dart
index ded68f3..dd2ae53 100644
--- a/pkg/unittest/mock.dart
+++ b/pkg/unittest/mock.dart
@@ -370,7 +370,7 @@
get first => (logs == null || logs.length == 0) ? null : logs[0];
/** Get the last entry, or null if no entries. */
- get last => (logs == null || logs.length == 0) ? null : logs.last();
+ get last => (logs == null || logs.length == 0) ? null : logs.last;
/** Creates a LogEntry predicate function from the argument. */
Function _makePredicate(arg) {
@@ -781,7 +781,7 @@
if (includeKeys) {
rtn.logs.add(keyEntry);
}
- if (keyIterator.hasNext()) {
+ if (keyIterator.hasNext) {
keyEntry = keyIterator.next();
} else if (isPreceding) { // We're done.
break;
@@ -1280,7 +1280,7 @@
}
bool matchedMethodName = false;
MatchState matchState = new MatchState();
- for (String k in _behaviors.getKeys()) {
+ for (String k in _behaviors.keys) {
Behavior b = _behaviors[k];
if (b.matcher.nameFilter.matches(method, matchState)) {
matchedMethodName = true;
diff --git a/pkg/unittest/test/matchers_test.dart b/pkg/unittest/test/matchers_test.dart
index 11bdcc2..9736c75 100644
--- a/pkg/unittest/test/matchers_test.dart
+++ b/pkg/unittest/test/matchers_test.dart
@@ -23,6 +23,16 @@
add(' ignoring whitespace');
}
+class Widget {
+ int price;
+}
+
+class HasPrice extends CustomMatcher {
+ const HasPrice(matcher) :
+ super("Widget with a price that is", "price", matcher);
+ featureValueOf(actual) => actual.price;
+}
+
void main() {
initUtils();
@@ -155,15 +165,15 @@
"NullPointerException.");
});
- test('throwsUnsupportedOperationException', () {
- shouldPass(() { throw new UnsupportedOperationException(''); },
- throwsUnsupportedOperationException);
+ test('throwsUnsupportedError', () {
+ shouldPass(() { throw new UnsupportedError(''); },
+ throwsUnsupportedError);
shouldFail(() { throw new Exception(); },
- throwsUnsupportedOperationException,
+ throwsUnsupportedError,
"Expected: throws an exception which matches "
- "UnsupportedOperationException "
+ "UnsupportedError "
"but: exception <Exception> does not match "
- "UnsupportedOperationException.");
+ "UnsupportedError.");
});
test('returnsNormally', () {
@@ -524,5 +534,16 @@
description: "an instance of String"));
});
});
+
+ group('Feature Matchers', () {
+ test("Feature Matcher", () {
+ var w = new Widget();
+ w.price = 10;
+ shouldPass(w, new HasPrice(greaterThan(0)));
+ shouldFail(w, new HasPrice(greaterThan(10)),
+ 'Expected: Widget with a price that is a value greater than <10> '
+ 'but: price was <10>.');
+ });
+ });
}
diff --git a/runtime/bin/buffer_list.dart b/runtime/bin/buffer_list.dart
index fd58ee2..0dab719 100644
--- a/runtime/bin/buffer_list.dart
+++ b/runtime/bin/buffer_list.dart
@@ -17,7 +17,7 @@
* buffer list is empty.
*/
void add(List<int> buffer, [int offset = 0]) {
- assert(offset == 0 || _buffers.isEmpty());
+ assert(offset == 0 || _buffers.isEmpty);
_buffers.addLast(buffer);
_length += buffer.length;
if (offset != 0) _index = offset;
@@ -28,7 +28,7 @@
* buffer and does not remove the buffer from the list. Use
* [index] to determine the index of the first byte in the buffer.
*/
- List<int> get first => _buffers.first();
+ List<int> get first => _buffers.first;
/**
* Returns the current index of the next byte. This will always be
@@ -40,15 +40,15 @@
/**
* Peek at the next available byte.
*/
- int peek() => _buffers.first()[_index];
+ int peek() => _buffers.first[_index];
/**
* Returns the next available byte removing it from the buffers.
*/
int next() {
- int value = _buffers.first()[_index++];
+ int value = _buffers.first[_index++];
_length--;
- if (_index == _buffers.first().length) {
+ if (_index == _buffers.first.length) {
_buffers.removeFirst();
_index = 0;
}
@@ -62,19 +62,19 @@
List<int> readBytes(int count) {
List<int> result;
if (_length == 0 || _length < count) return null;
- if (_index == 0 && _buffers.first().length == count) {
- result = _buffers.first();
+ if (_index == 0 && _buffers.first.length == count) {
+ result = _buffers.first;
_buffers.removeFirst();
_index = 0;
_length -= count;
return result;
} else {
- int firstRemaining = _buffers.first().length - _index;
+ int firstRemaining = _buffers.first.length - _index;
if (firstRemaining >= count) {
- result = _buffers.first().getRange(_index, count);
+ result = _buffers.first.getRange(_index, count);
_index += count;
_length -= count;
- if (_index == _buffers.first().length) {
+ if (_index == _buffers.first.length) {
_buffers.removeFirst();
_index = 0;
}
@@ -83,11 +83,11 @@
result = new Uint8List(count);
int remaining = count;
while (remaining > 0) {
- int bytesInFirst = _buffers.first().length - _index;
+ int bytesInFirst = _buffers.first.length - _index;
if (bytesInFirst <= remaining) {
result.setRange(count - remaining,
bytesInFirst,
- _buffers.first(),
+ _buffers.first,
_index);
_buffers.removeFirst();
_index = 0;
@@ -96,12 +96,12 @@
} else {
result.setRange(count - remaining,
remaining,
- _buffers.first(),
+ _buffers.first,
_index);
_index = remaining;
_length -= remaining;
remaining = 0;
- assert(_index < _buffers.first().length);
+ assert(_index < _buffers.first.length);
}
}
return result;
@@ -135,7 +135,7 @@
* Returns whether the buffer list is empty that is has no bytes
* available.
*/
- bool isEmpty() => _buffers.isEmpty();
+ bool get isEmpty => _buffers.isEmpty;
/**
* Clears the content of the buffer list.
diff --git a/runtime/bin/builtin_impl_sources.gypi b/runtime/bin/builtin_impl_sources.gypi
index 894cb73..297d4b0 100644
--- a/runtime/bin/builtin_impl_sources.gypi
+++ b/runtime/bin/builtin_impl_sources.gypi
@@ -7,6 +7,11 @@
{
'sources': [
'common.cc',
+ 'crypto.cc',
+ 'crypto_android.cc',
+ 'crypto_linux.cc',
+ 'crypto_macos.cc',
+ 'crypto_win.cc',
'dartutils.cc',
'dartutils.h',
'dbg_connection.cc',
diff --git a/runtime/bin/builtin_natives.cc b/runtime/bin/builtin_natives.cc
index c6c7300..045f800 100644
--- a/runtime/bin/builtin_natives.cc
+++ b/runtime/bin/builtin_natives.cc
@@ -16,6 +16,7 @@
// to inject additional functionality e.g: Logger, file I/O, socket I/O etc.
#define BUILTIN_NATIVE_LIST(V) \
V(Common_IsBuiltinList, 1) \
+ V(Crypto_GetRandomBytes, 1) \
V(Directory_Exists, 1) \
V(Directory_Create, 1) \
V(Directory_Current, 0) \
diff --git a/runtime/bin/common.dart b/runtime/bin/common.dart
index 7f2da97..33ce2a5 100644
--- a/runtime/bin/common.dart
+++ b/runtime/bin/common.dart
@@ -27,7 +27,7 @@
String toString() {
StringBuffer sb = new StringBuffer();
sb.add("OS Error");
- if (!message.isEmpty()) {
+ if (!message.isEmpty) {
sb.add(": ");
sb.add(message);
if (errorCode != noErrorCode) {
diff --git a/runtime/bin/crypto.cc b/runtime/bin/crypto.cc
new file mode 100644
index 0000000..97984a2
--- /dev/null
+++ b/runtime/bin/crypto.cc
@@ -0,0 +1,36 @@
+// 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.
+
+#include "bin/crypto.h"
+#include "bin/dartutils.h"
+
+#include "include/dart_api.h"
+
+
+void FUNCTION_NAME(Crypto_GetRandomBytes)(Dart_NativeArguments args) {
+ Dart_EnterScope();
+ Dart_Handle count_obj = Dart_GetNativeArgument(args, 0);
+ int64_t count = 0;
+ if (!DartUtils::GetInt64Value(count_obj, &count)) {
+ Dart_Handle error = Dart_NewString("Invalid argument, must be an int.");
+ Dart_ThrowException(error);
+ }
+ uint8_t* buffer = new uint8_t[count];
+ ASSERT(buffer != NULL);
+ if (!Crypto::GetRandomBytes(count, buffer)) {
+ delete[] buffer;
+ Dart_ThrowException(DartUtils::NewDartOSError());
+ }
+ Dart_Handle result = Dart_NewByteArray(count);
+ if (Dart_IsError(result)) {
+ delete[] buffer;
+ Dart_Handle error = Dart_NewString("Failed to allocate storage.");
+ Dart_ThrowException(error);
+ }
+ Dart_ListSetAsBytes(result, 0, buffer, count);
+ Dart_SetReturnValue(args, result);
+ delete[] buffer;
+ Dart_ExitScope();
+}
+
diff --git a/runtime/bin/crypto.h b/runtime/bin/crypto.h
new file mode 100644
index 0000000..b155972
--- /dev/null
+++ b/runtime/bin/crypto.h
@@ -0,0 +1,22 @@
+// 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 BIN_CRYPTO_H_
+#define BIN_CRYPTO_H_
+
+#include "bin/builtin.h"
+#include "bin/utils.h"
+
+
+class Crypto {
+ public:
+ static bool GetRandomBytes(intptr_t count, uint8_t* buffer);
+
+ private:
+ DISALLOW_ALLOCATION();
+ DISALLOW_IMPLICIT_CONSTRUCTORS(Crypto);
+};
+
+#endif // BIN_CRYPTO_H_
+
diff --git a/runtime/bin/crypto_android.cc b/runtime/bin/crypto_android.cc
new file mode 100644
index 0000000..08f6dac
--- /dev/null
+++ b/runtime/bin/crypto_android.cc
@@ -0,0 +1,18 @@
+// 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.
+
+#include <errno.h>
+#include <fcntl.h>
+
+#include "bin/fdutils.h"
+#include "bin/crypto.h"
+
+
+bool Crypto::GetRandomBytes(intptr_t count, uint8_t* buffer) {
+ intptr_t fd = TEMP_FAILURE_RETRY(open("/dev/urandom", O_RDONLY));
+ if (fd < 0) return false;
+ intptr_t bytes_read = read(fd, buffer, count);
+ close(fd);
+ return bytes_read == count;
+}
diff --git a/runtime/bin/crypto_linux.cc b/runtime/bin/crypto_linux.cc
new file mode 100644
index 0000000..08f6dac
--- /dev/null
+++ b/runtime/bin/crypto_linux.cc
@@ -0,0 +1,18 @@
+// 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.
+
+#include <errno.h>
+#include <fcntl.h>
+
+#include "bin/fdutils.h"
+#include "bin/crypto.h"
+
+
+bool Crypto::GetRandomBytes(intptr_t count, uint8_t* buffer) {
+ intptr_t fd = TEMP_FAILURE_RETRY(open("/dev/urandom", O_RDONLY));
+ if (fd < 0) return false;
+ intptr_t bytes_read = read(fd, buffer, count);
+ close(fd);
+ return bytes_read == count;
+}
diff --git a/runtime/bin/crypto_macos.cc b/runtime/bin/crypto_macos.cc
new file mode 100644
index 0000000..08f6dac
--- /dev/null
+++ b/runtime/bin/crypto_macos.cc
@@ -0,0 +1,18 @@
+// 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.
+
+#include <errno.h>
+#include <fcntl.h>
+
+#include "bin/fdutils.h"
+#include "bin/crypto.h"
+
+
+bool Crypto::GetRandomBytes(intptr_t count, uint8_t* buffer) {
+ intptr_t fd = TEMP_FAILURE_RETRY(open("/dev/urandom", O_RDONLY));
+ if (fd < 0) return false;
+ intptr_t bytes_read = read(fd, buffer, count);
+ close(fd);
+ return bytes_read == count;
+}
diff --git a/runtime/bin/crypto_win.cc b/runtime/bin/crypto_win.cc
new file mode 100644
index 0000000..640efb2
--- /dev/null
+++ b/runtime/bin/crypto_win.cc
@@ -0,0 +1,22 @@
+// 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.
+
+#define _CRT_RAND_S
+#include "bin/crypto.h"
+
+
+bool Crypto::GetRandomBytes(intptr_t count, uint8_t* buffer) {
+ uint32_t num;
+ intptr_t read = 0;
+ while (read < count) {
+ if (rand_s(&num) != 0) {
+ return false;
+ }
+ for (int i = 0; i < 4 && read < count; i++) {
+ buffer[read] = num >> (i * 8);
+ read++;
+ }
+ }
+ return true;
+}
diff --git a/runtime/bin/directory.dart b/runtime/bin/directory.dart
index d7fab76..740f0cb 100644
--- a/runtime/bin/directory.dart
+++ b/runtime/bin/directory.dart
@@ -38,15 +38,18 @@
bool existsSync();
/**
- * Creates the directory with this name if it does not
- * exist. Returns a [:Future<Directory>:] that completes with this
- * directory once it has been created.
+ * Creates the directory with this name. If the directory already
+ * exists nothing is done. Returns a [:Future<Directory>:] that
+ * completes with this directory once it has been created. If the
+ * directory does not exist and cannot be created the future
+ * completes with an exception.
*/
Future<Directory> create();
/**
- * Synchronously creates the directory with this name if it does not exist.
- * Throws an exception if the directory already exists.
+ * Synchronously creates the directory with this name. If the
+ * directory already exists nothing is done. If the directory does
+ * not exist and cannot be created an exception is thrown.
*/
void createSync();
@@ -179,7 +182,7 @@
String toString() {
StringBuffer sb = new StringBuffer();
sb.add("DirectoryIOException");
- if (!message.isEmpty()) {
+ if (!message.isEmpty) {
sb.add(": $message");
if (path != null) {
sb.add(", path = $path");
diff --git a/runtime/bin/directory_linux.cc b/runtime/bin/directory_linux.cc
index 7adb80f..59977a3 100644
--- a/runtime/bin/directory_linux.cc
+++ b/runtime/bin/directory_linux.cc
@@ -381,6 +381,9 @@
bool Directory::Create(const char* dir_name) {
+ // If the directory already exists and is a directory do not
+ // attempt to create it again and treat it as a success.
+ if (Exists(dir_name) == EXISTS) return true;
// Create the directory with the permissions specified by the
// process umask.
return (TEMP_FAILURE_RETRY(mkdir(dir_name, 0777)) == 0);
diff --git a/runtime/bin/directory_macos.cc b/runtime/bin/directory_macos.cc
index 7adb80f..59977a3 100644
--- a/runtime/bin/directory_macos.cc
+++ b/runtime/bin/directory_macos.cc
@@ -381,6 +381,9 @@
bool Directory::Create(const char* dir_name) {
+ // If the directory already exists and is a directory do not
+ // attempt to create it again and treat it as a success.
+ if (Exists(dir_name) == EXISTS) return true;
// Create the directory with the permissions specified by the
// process umask.
return (TEMP_FAILURE_RETRY(mkdir(dir_name, 0777)) == 0);
diff --git a/runtime/bin/directory_win.cc b/runtime/bin/directory_win.cc
index 08d502b..436f987 100644
--- a/runtime/bin/directory_win.cc
+++ b/runtime/bin/directory_win.cc
@@ -348,6 +348,9 @@
bool Directory::Create(const char* dir_name) {
+ // If the directory already exists and is a directory do not
+ // attempt to create it again and treat it as a success.
+ if (Exists(dir_name) == EXISTS) return true;
return (CreateDirectory(dir_name, NULL) != 0);
}
diff --git a/runtime/bin/file.dart b/runtime/bin/file.dart
index d32dd7b..43ff45b 100644
--- a/runtime/bin/file.dart
+++ b/runtime/bin/file.dart
@@ -374,7 +374,7 @@
String toString() {
StringBuffer sb = new StringBuffer();
sb.add("FileIOException");
- if (!message.isEmpty()) {
+ if (!message.isEmpty) {
sb.add(": $message");
if (osError != null) {
sb.add(" ($osError)");
diff --git a/runtime/bin/file_win.cc b/runtime/bin/file_win.cc
index cfce708..9076d7a 100644
--- a/runtime/bin/file_win.cc
+++ b/runtime/bin/file_win.cc
@@ -97,9 +97,9 @@
File* File::Open(const char* name, FileOpenMode mode) {
- int flags = O_RDONLY | O_BINARY;
+ int flags = O_RDONLY | O_BINARY | O_NOINHERIT;
if ((mode & kWrite) != 0) {
- flags = (O_RDWR | O_CREAT | O_BINARY);
+ flags = (O_RDWR | O_CREAT | O_BINARY | O_NOINHERIT);
}
if ((mode & kTruncate) != 0) {
flags = flags | O_TRUNC;
diff --git a/runtime/bin/gen_snapshot.cc b/runtime/bin/gen_snapshot.cc
index e352a46..6e2e6c7 100644
--- a/runtime/bin/gen_snapshot.cc
+++ b/runtime/bin/gen_snapshot.cc
@@ -18,6 +18,7 @@
#define CHECK_RESULT(result) \
if (Dart_IsError(result)) { \
+ free(snapshot_buffer); \
fprintf(stderr, "Error: %s", Dart_GetError(result)); \
Dart_ExitScope(); \
Dart_ShutdownIsolate(); \
@@ -30,6 +31,7 @@
static const char* snapshot_filename = NULL;
static bool script_snapshot = false;
static const char* package_root = NULL;
+static uint8_t* snapshot_buffer = NULL;
// Global state which contains a pointer to the script name for which
@@ -343,7 +345,7 @@
CHECK_RESULT(result);
// Save the snapshot buffer as we are about to shutdown the isolate.
- uint8_t* snapshot_buffer = reinterpret_cast<uint8_t*>(malloc(size));
+ snapshot_buffer = reinterpret_cast<uint8_t*>(malloc(size));
ASSERT(snapshot_buffer != NULL);
memmove(snapshot_buffer, buffer, size);
@@ -360,6 +362,7 @@
if (isolate == NULL) {
fprintf(stderr, "%s", error);
free(error);
+ free(snapshot_buffer);
exit(255);
}
Dart_EnterScope();
diff --git a/runtime/bin/http.dart b/runtime/bin/http.dart
index a3f4931..13b28dc 100644
--- a/runtime/bin/http.dart
+++ b/runtime/bin/http.dart
@@ -111,6 +111,12 @@
* Sets the error handler that is called when a connection error occurs.
*/
void set onError(void callback(e));
+
+ /**
+ * Set the timeout, in seconds, for sessions of this HTTP server. Default
+ * is 20 minutes.
+ */
+ int set sessionTimeout(int timeout);
}
@@ -386,6 +392,29 @@
String toString();
}
+abstract class HttpSession {
+ /**
+ * Get the id for the current session.
+ */
+ String get id;
+
+ /**
+ * Access the user-data associated with the session.
+ */
+ Dynamic data;
+
+ /**
+ * Destroy the session. This will terminate the session and any further
+ * connections with this id will be given a new id and session.
+ */
+ void destroy();
+
+ /**
+ * Set a callback that will be called when the session is timed out.
+ */
+ void set onTimeout(void callback());
+}
+
/**
* Representation of a content type.
@@ -553,11 +582,20 @@
HttpHeaders get headers;
/**
- * Returns the cookies in the request (from the Cookie header).
+ * Returns the cookies in the request (from the Cookie headers).
*/
List<Cookie> get cookies;
/**
+ * Returns, or initialize, a session for the given request. If the session is
+ * being initialized by this call, [init] will be called with the
+ * newly create session. Here the [:HttpSession.data:] field can be set, if
+ * needed.
+ * See [:HttpServer.sessionTimeout:] on how to change default timeout.
+ */
+ HttpSession session([init(HttpSession session)]);
+
+ /**
* Returns the input stream for the request. This is used to read
* the request data.
*/
diff --git a/runtime/bin/http_impl.dart b/runtime/bin/http_impl.dart
index c8394a7..68e2f52 100644
--- a/runtime/bin/http_impl.dart
+++ b/runtime/bin/http_impl.dart
@@ -252,7 +252,7 @@
_headers.forEach((String name, List<String> values) {
bool fold = _foldHeader(name);
List<int> data;
- data = name.charCodes();
+ data = name.charCodes;
connection._write(data);
connection._write(COLONSP);
for (int i = 0; i < values.length; i++) {
@@ -261,12 +261,12 @@
connection._write(COMMASP);
} else {
connection._write(CRLF);
- data = name.charCodes();
+ data = name.charCodes;
connection._write(data);
connection._write(COLONSP);
}
}
- data = values[i].charCodes();
+ data = values[i].charCodes;
connection._write(data);
}
connection._write(CRLF);
@@ -853,6 +853,16 @@
String get protocolVersion => _protocolVersion;
+ HttpSession session([init(HttpSession session)]) {
+ if (_session != null) {
+ // It's already mapped, use it.
+ return _session;
+ }
+ // Create session, store it in connection, and return.
+ var sessionManager = _httpConnection._server._sessionManager;
+ return _session = sessionManager.createSession(init);
+ }
+
void _onRequestStart(String method, String uri, String version) {
_method = method;
_uri = uri;
@@ -864,6 +874,22 @@
}
void _onHeadersComplete() {
+ if (_httpConnection._server._sessionManagerInstance != null) {
+ // Map to session if exists.
+ var sessionId = cookies.reduce(null, (last, cookie) {
+ if (last != null) return last;
+ return cookie.name.toUpperCase() == _DART_SESSION_ID ?
+ cookie.value : null;
+ });
+ if (sessionId != null) {
+ var sessionManager = _httpConnection._server._sessionManager;
+ _session = sessionManager.getSession(sessionId);
+ if (_session != null) {
+ _session._markSeen();
+ }
+ }
+ }
+
_headers._mutable = false;
// Prepare for receiving data.
_buffer = new _BufferList();
@@ -921,6 +947,7 @@
_BufferList _buffer;
bool _dataEndCalled = false;
Function _streamErrorHandler;
+ _HttpSession _session;
}
@@ -1083,10 +1110,10 @@
_httpConnection._write(_Const.HTTP10);
}
_writeSP();
- data = _statusCode.toString().charCodes();
+ data = _statusCode.toString().charCodes;
_httpConnection._write(data);
_writeSP();
- data = reasonPhrase.charCodes();
+ data = reasonPhrase.charCodes;
_httpConnection._write(data);
_writeCRLF();
@@ -1098,6 +1125,21 @@
_headers.set(HttpHeaders.TRANSFER_ENCODING, "chunked");
}
+ var session = _httpConnection._request._session;
+ if (session != null && !session._destroyed) {
+ // Make sure we only send the current session id.
+ bool found = false;
+ for (int i = 0; i < cookies.length; i++) {
+ if (cookies[i].name.toUpperCase() == _DART_SESSION_ID) {
+ cookie.value = session.id;
+ found = true;
+ break;
+ }
+ }
+ if (!found) {
+ cookies.add(new Cookie(_DART_SESSION_ID, session.id));
+ }
+ }
// Add all the cookies set to the headers.
if (_cookies != null) {
_cookies.forEach((cookie) {
@@ -1202,8 +1244,8 @@
class _HttpConnectionBase {
_HttpConnectionBase() : _sendBuffers = new Queue(),
- _httpParser = new _HttpParser() {
- _hashCode = _nextHashCode;
+ _httpParser = new _HttpParser(),
+ hashCode = _nextHashCode {
_nextHashCode = (_nextHashCode + 1) & 0xFFFFFFF;
}
@@ -1307,8 +1349,6 @@
}
}
- int hashCode() => _hashCode;
-
Socket _socket;
bool _closing = false; // Is the socket closed by the client?
bool _error = false; // Is the socket closed due to an error?
@@ -1319,7 +1359,7 @@
Function onDetach;
// Hash code for HTTP connection. Currently this is just a counter.
- int _hashCode;
+ final int hashCode;
static int _nextHashCode = 0;
}
@@ -1441,7 +1481,6 @@
Function _handler;
}
-
// HTTP server waiting for socket connections. The connections are
// managed by the server and as requests are received the request.
class _HttpServer implements HttpServer {
@@ -1487,7 +1526,11 @@
}
void close() {
- if (_server !== null && _closeServer) {
+ if (_sessionManagerInstance != null) {
+ _sessionManagerInstance.close();
+ _sessionManagerInstance = null;
+ }
+ if (_server != null && _closeServer) {
_server.close();
}
_server = null;
@@ -1508,6 +1551,10 @@
_onError = callback;
}
+ int set sessionTimeout(int timeout) {
+ _sessionManager.sessionTimeout = timeout;
+ }
+
void _handleRequest(HttpRequest request, HttpResponse response) {
for (int i = 0; i < _handlers.length; i++) {
if (_handlers[i]._matcher(request)) {
@@ -1534,6 +1581,14 @@
}
}
+ _HttpSessionManager get _sessionManager {
+ // Lazy init.
+ if (_sessionManagerInstance == null) {
+ _sessionManagerInstance = new _HttpSessionManager();
+ }
+ return _sessionManagerInstance;
+ }
+
ServerSocket _server; // The server listen socket.
bool _closeServer = false;
@@ -1541,6 +1596,7 @@
List<_RequestHandlerRegistration> _handlers;
Object _defaultHandler;
Function _onError;
+ _HttpSessionManager _sessionManagerInstance;
}
@@ -1613,25 +1669,24 @@
List<int> data;
// Write request line.
- data = _method.toString().charCodes();
+ data = _method.toString().charCodes;
_httpConnection._write(data);
_writeSP();
// Send the path for direct connections and the whole URL for
// proxy connections.
if (!_connection._usingProxy) {
- String path;
+ String path = _uri.path;
+ if (path.length == 0) path = "/";
if (_uri.query != "") {
if (_uri.fragment != "") {
- path = "${_uri.path}?${_uri.query}#${_uri.fragment}";
+ path = "${path}?${_uri.query}#${_uri.fragment}";
} else {
- path = "${_uri.path}?${_uri.query}";
+ path = "${path}?${_uri.query}";
}
- } else {
- path = _uri.path;
}
- data = path.charCodes();
+ data = path.charCodes;
} else {
- data = _uri.toString().charCodes();
+ data = _uri.toString().charCodes;
}
_httpConnection._write(data);
_writeSP();
@@ -1964,7 +2019,7 @@
Duration _idleTime(Date now) => now.difference(_returnTime);
- int hashCode() => _socket.hashCode();
+ int get hashCode => _socket.hashCode;
String _host;
int _port;
@@ -1983,7 +2038,7 @@
List<String> list = configuration.split(";");
list.forEach((String proxy) {
proxy = proxy.trim();
- if (!proxy.isEmpty()) {
+ if (!proxy.isEmpty) {
if (proxy.startsWith(PROXY_PREFIX)) {
int colon = proxy.indexOf(":");
if (colon == -1 || colon == 0 || colon == proxy.length - 1) {
@@ -2045,7 +2100,7 @@
Uri uri,
[_HttpClientConnection connection]) {
if (_shutdown) throw new HttpException("HttpClient shutdown");
- if (method == null || uri.domain.isEmpty() == null) {
+ if (method == null || uri.domain.isEmpty) {
throw new ArgumentError(null);
}
return _prepareHttpClientConnection(method, uri, connection);
@@ -2083,7 +2138,7 @@
void shutdown() {
_openSockets.forEach((String key, Queue<_SocketConnection> connections) {
- while (!connections.isEmpty()) {
+ while (!connections.isEmpty) {
_SocketConnection socketConn = connections.removeFirst();
socketConn._socket.close();
}
@@ -2147,7 +2202,7 @@
// otherwise create a new one.
String key = _connectionKey(connectHost, connectPort);
Queue socketConnections = _openSockets[key];
- if (socketConnections == null || socketConnections.isEmpty()) {
+ if (socketConnections == null || socketConnections.isEmpty) {
Socket socket = new Socket(connectHost, connectPort);
// Until the connection is established handle connection errors
// here as the HttpClientConnection object is not yet associated
@@ -2181,8 +2236,8 @@
_connectionOpened(socketConn, connection, !proxy.isDirect));
// Get rid of eviction timer if there are no more active connections.
- if (socketConnections.isEmpty()) _openSockets.remove(key);
- if (_openSockets.isEmpty()) _cancelEvictionTimer();
+ if (socketConnections.isEmpty) _openSockets.remove(key);
+ if (_openSockets.isEmpty) _cancelEvictionTimer();
}
}
@@ -2238,13 +2293,13 @@
void _(String key, Queue<_SocketConnection> connections) {
// As returned connections are added at the head of the
// list remove from the tail.
- while (!connections.isEmpty()) {
- _SocketConnection socketConn = connections.last();
+ while (!connections.isEmpty) {
+ _SocketConnection socketConn = connections.last;
if (socketConn._idleTime(now).inMilliseconds >
DEFAULT_EVICTION_TIMEOUT) {
connections.removeLast();
socketConn._socket.close();
- if (connections.isEmpty()) emptyKeys.add(key);
+ if (connections.isEmpty) emptyKeys.add(key);
} else {
break;
}
@@ -2255,7 +2310,7 @@
emptyKeys.forEach((String key) => _openSockets.remove(key));
// If all connections where evicted cancel the eviction timer.
- if (_openSockets.isEmpty()) _cancelEvictionTimer();
+ if (_openSockets.isEmpty) _cancelEvictionTimer();
}
_evictionTimer = new Timer.repeating(10000, _handleEviction);
}
diff --git a/runtime/bin/http_parser.dart b/runtime/bin/http_parser.dart
index 2224e4b..571ce70 100644
--- a/runtime/bin/http_parser.dart
+++ b/runtime/bin/http_parser.dart
@@ -234,6 +234,9 @@
case _State.REQUEST_LINE_URI:
if (byte == _CharCode.SP) {
+ if (_uri_or_reason_phrase.length == 0) {
+ throw new HttpParserException("Invalid request URI");
+ }
_state = _State.REQUEST_LINE_HTTP_VERSION;
_httpVersionIndex = 0;
} else {
diff --git a/runtime/bin/http_session.dart b/runtime/bin/http_session.dart
new file mode 100644
index 0000000..f1d5eaf
--- /dev/null
+++ b/runtime/bin/http_session.dart
@@ -0,0 +1,160 @@
+// 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.
+
+const String _DART_SESSION_ID = "DARTSESSID";
+
+// A _HttpSession is a node in a double-linked list, with _next and _prev being
+// the previous and next pointers.
+class _HttpSession implements HttpSession {
+ _HttpSession(_HttpSessionManager this._sessionManager, String this.id)
+ : _lastSeen = new Date.now();
+
+ void destroy() {
+ _destroyed = true;
+ _sessionManager._removeFromTimeoutQueue(this);
+ _sessionManager._sessions.remove(id);
+ }
+
+ // Mark the session as seen. This will reset the timeout and move the node to
+ // the end of the timeout queue.
+ void _markSeen() {
+ _lastSeen = new Date.now();
+ _sessionManager._bumpToEnd(this);
+ }
+
+ Dynamic data;
+
+ Date get lastSeen => _lastSeen;
+
+ final String id;
+
+ void set onTimeout(void callback()) {
+ _timeoutCallback = callback;
+ }
+
+ // Destroyed marked. Used by the http connection to see if a session is valid.
+ bool _destroyed = false;
+ Date _lastSeen;
+ Function _timeoutCallback;
+ _HttpSessionManager _sessionManager;
+ // Pointers in timeout queue.
+ _HttpSession _prev;
+ _HttpSession _next;
+}
+
+// Private class used to manage all the active sessions. The sessions are stored
+// in two ways:
+//
+// * In a map, mapping from ID to HttpSession.
+// * In a linked list, used as a timeout queue.
+class _HttpSessionManager {
+ _HttpSessionManager() : _sessions = {};
+
+ String createSessionId() {
+ const int _KEY_LENGTH = 16; // 128 bits.
+ var data = _getRandomBytes(_KEY_LENGTH);
+ return CryptoUtils.bytesToHex(data);
+ }
+
+ _HttpSession getSession(String id) {
+ return _sessions[id];
+ }
+
+ _HttpSession createSession(init(HttpSession session)) {
+ var id = createSessionId();
+ // TODO(ajohnsen): Consider adding a limit and throwing an exception.
+ // Should be very unlikely however.
+ while (_sessions.containsKey(id)) {
+ id = createSessionId();
+ }
+ var session = _sessions[id] = new _HttpSession(this, id);
+ if (init != null) init(session);
+ _addToTimeoutQueue(session);
+ return session;
+ }
+
+ void set sessionTimeout(int timeout) {
+ _sessionTimeout = timeout;
+ _stopTimer();
+ _startTimer();
+ }
+
+ void close() {
+ _stopTimer();
+ }
+
+ void _bumpToEnd(_HttpSession session) {
+ _removeFromTimeoutQueue(session);
+ _addToTimeoutQueue(session);
+ }
+
+ void _addToTimeoutQueue(_HttpSession session) {
+ if (_head == null) {
+ assert(_tail == null);
+ _tail = _head = session;
+ _startTimer();
+ } else {
+ assert(_timer != null);
+ assert(_tail != null);
+ // Add to end.
+ _tail._next = session;
+ session._prev = _tail;
+ _tail = session;
+ }
+ }
+
+ void _removeFromTimeoutQueue(_HttpSession session) {
+ if (session._next != null) {
+ session._next._prev = session._prev;
+ }
+ if (session._prev != null) {
+ session._prev._next = session._next;
+ }
+ if (_head == session) {
+ // We removed the head element, start new timer.
+ _head = session._next;
+ _stopTimer();
+ _startTimer();
+ }
+ if (_tail == session) {
+ _tail = session._prev;
+ }
+ session._next = session._prev = null;
+ }
+
+ void _timerTimeout(_) {
+ _stopTimer(); // Clear timer.
+ assert(_head != null);
+ var session = _head;
+ session.destroy(); // Will remove the session from timeout queue and map.
+ if (session._timeoutCallback != null) {
+ session._timeoutCallback();
+ }
+ }
+
+ void _startTimer() {
+ assert(_timer == null);
+ if (_head != null) {
+ int seconds = new Date.now().difference(_head.lastSeen).inSeconds;
+ _timer = new Timer((_sessionTimeout - seconds) * 1000, _timerTimeout);
+ }
+ }
+
+ void _stopTimer() {
+ if (_timer != null) {
+ _timer.cancel();
+ _timer = null;
+ }
+ }
+
+ Map<String, _HttpSession> _sessions;
+ int _sessionTimeout = 20 * 60; // 20 mins.
+ _HttpSession _head;
+ _HttpSession _tail;
+ Timer _timer;
+
+ static Uint8List _getRandomBytes(int count)
+ native "Crypto_GetRandomBytes";
+}
+
diff --git a/runtime/bin/io_sources.gypi b/runtime/bin/io_sources.gypi
index cc3957e..435c254 100644
--- a/runtime/bin/io_sources.gypi
+++ b/runtime/bin/io_sources.gypi
@@ -23,6 +23,7 @@
'http.dart',
'http_impl.dart',
'http_parser.dart',
+ 'http_session.dart',
'http_utils.dart',
'input_stream.dart',
'list_stream.dart',
diff --git a/runtime/bin/list_stream_impl.dart b/runtime/bin/list_stream_impl.dart
index 1385d6a..5bcc41a 100644
--- a/runtime/bin/list_stream_impl.dart
+++ b/runtime/bin/list_stream_impl.dart
@@ -126,7 +126,7 @@
if (_closeCallbackCalled) return;
if (!_streamMarkedClosed) {
- if (!_bufferList.isEmpty() &&
+ if (!_bufferList.isEmpty &&
_clientDataHandler != null &&
_scheduledDataCallback == null) {
_scheduledDataCallback = new Timer(0, issueDataCallback);
diff --git a/runtime/bin/main.cc b/runtime/bin/main.cc
index df01016..3c4a8c8 100644
--- a/runtime/bin/main.cc
+++ b/runtime/bin/main.cc
@@ -322,7 +322,7 @@
return result;
}
}
- Dart_Handle core_lib_url = Dart_NewString("dart:coreimpl");
+ Dart_Handle core_lib_url = Dart_NewString("dart:core");
if (Dart_IsError(core_lib_url)) {
return core_lib_url;
}
@@ -330,7 +330,7 @@
if (Dart_IsError(core_lib)) {
return core_lib;
}
- Dart_Handle runtime_options_class_name = Dart_NewString("RuntimeOptions");
+ Dart_Handle runtime_options_class_name = Dart_NewString("_OptionsImpl");
if (Dart_IsError(runtime_options_class_name)) {
return runtime_options_class_name;
}
diff --git a/runtime/bin/mime_multipart_parser.dart b/runtime/bin/mime_multipart_parser.dart
index ae45518..b0af4ad 100644
--- a/runtime/bin/mime_multipart_parser.dart
+++ b/runtime/bin/mime_multipart_parser.dart
@@ -39,7 +39,7 @@
// [boundary]. The boundary should be as specified in the content
// type parameter, that is without the -- prefix.
_MimeMultipartParser(String boundary) {
- List<int> charCodes = boundary.charCodes();
+ List<int> charCodes = boundary.charCodes;
_boundary = new List<int>(4 + charCodes.length);
// Set-up the matching boundary preceding it with CRLF and two
// dashes.
diff --git a/runtime/bin/path_impl.dart b/runtime/bin/path_impl.dart
index b05084c..d3467df 100644
--- a/runtime/bin/path_impl.dart
+++ b/runtime/bin/path_impl.dart
@@ -8,7 +8,7 @@
_Path(String source) : _path = source;
_Path.fromNative(String source) : _path = _clean(source);
- int hashCode() => _path.hashCode();
+ int get hashCode => _path.hashCode;
static String _clean(String source) {
switch (Platform.operatingSystem) {
@@ -29,7 +29,7 @@
return clean;
}
- bool get isEmpty => _path.isEmpty();
+ bool get isEmpty => _path.isEmpty;
bool get isAbsolute => _path.startsWith('/');
bool get hasTrailingSeparator => _path.endsWith('/');
@@ -41,13 +41,14 @@
// base.join(relative) == this.canonicalize.
// Throws an exception if no such path exists, or the case is not
// implemented yet.
- if (base.isAbsolute && _path.startsWith(base._path)) {
- if (_path == base._path) return new Path('.');
+ var basePath = base.toString();
+ if (base.isAbsolute && _path.startsWith(basePath)) {
+ if (_path == basePath) return new Path('.');
if (base.hasTrailingSeparator) {
- return new Path(_path.substring(base._path.length));
+ return new Path(_path.substring(basePath.length));
}
- if (_path[base._path.length] == '/') {
- return new Path(_path.substring(base._path.length + 1));
+ if (_path[basePath.length] == '/') {
+ return new Path(_path.substring(basePath.length + 1));
}
} else if (base.isAbsolute && isAbsolute) {
List<String> baseSegments = base.canonicalize().segments();
@@ -68,7 +69,7 @@
for (int i = common; i < pathSegments.length - 1; i++) {
sb.add('${pathSegments[i]}/');
}
- sb.add('${pathSegments.last()}');
+ sb.add('${pathSegments.last}');
if (hasTrailingSeparator) {
sb.add('/');
}
@@ -89,9 +90,9 @@
return further.canonicalize();
}
if (hasTrailingSeparator) {
- return new Path('$_path${further._path}').canonicalize();
+ return new Path('$_path${further}').canonicalize();
}
- return new Path('$_path/${further._path}').canonicalize();
+ return new Path('$_path/${further}').canonicalize();
}
// Note: The URI RFC names for these operations are normalize, resolve, and
@@ -118,7 +119,7 @@
segs[pos] = null;
}
}
- if (segs.last() == '') segs.removeLast(); // Path ends with /.
+ if (segs.last == '') segs.removeLast(); // Path ends with /.
// No remaining segments can be ., .., or empty.
return !segs.some((s) => s == '' || s == '.' || s == '..');
}
@@ -128,7 +129,7 @@
List segs = segments();
String drive;
if (isAbs &&
- !segs.isEmpty() &&
+ !segs.isEmpty &&
segs[0].length == 2 &&
segs[0][1] == ':') {
drive = segs[0];
@@ -139,13 +140,13 @@
switch (segment) {
case '..':
// Absolute paths drop leading .. markers, including after a drive.
- if (newSegs.isEmpty()) {
+ if (newSegs.isEmpty) {
if (isAbs) {
// Do nothing: drop the segment.
} else {
newSegs.add('..');
}
- } else if (newSegs.last() == '..') {
+ } else if (newSegs.last == '..') {
newSegs.add('..');
} else {
newSegs.removeLast();
@@ -169,7 +170,7 @@
}
}
- if (newSegs.isEmpty()) {
+ if (newSegs.isEmpty) {
if (isAbs) {
segmentsToJoin.add('');
} else {
diff --git a/runtime/bin/process.dart b/runtime/bin/process.dart
index e5a5618..806fe48 100644
--- a/runtime/bin/process.dart
+++ b/runtime/bin/process.dart
@@ -52,7 +52,7 @@
/**
* Returns an input stream of the process stdout.
*
- * Throws an [UnsupportedOperationException] if the process is
+ * Throws an [UnsupportedError] if the process is
* non-interactive.
*/
abstract InputStream get stdout;
@@ -60,7 +60,7 @@
/**
* Returns an input stream of the process stderr.
*
- * Throws an [UnsupportedOperationException] if the process is
+ * Throws an [UnsupportedError] if the process is
* non-interactive.
*/
abstract InputStream get stderr;
@@ -68,7 +68,7 @@
/**
* Returns an output stream to the process stdin.
*
- * Throws an [UnsupportedOperationException] if the process is
+ * Throws an [UnsupportedError] if the process is
* non-interactive.
*/
abstract OutputStream get stdin;
@@ -77,7 +77,7 @@
* Sets an exit handler which gets invoked when the process
* terminates.
*
- * Throws an [UnsupportedOperationException] if the process is
+ * Throws an [UnsupportedError] if the process is
* non-interactive.
*/
abstract void set onExit(void callback(int exitCode));
@@ -87,10 +87,15 @@
* flag. On Posix systems, [kill] sends [signal] to the
* process. Depending on the signal giving, it'll have different
* meanings. When the process terminates as a result of calling
- * [kill] [onExit] is called. If the kill operation fails an
- * exception is thrown.
+ * [kill] [onExit] is called.
+ *
+ * Returns [:true:] if the process is successfully killed (the
+ * signal is successfully sent). Returns [:false:] if the process
+ * could not be killed (the signal could not be sent). Usually,
+ * a [:false:] return value from kill means that the process is
+ * already dead.
*/
- abstract void kill([ProcessSignal signal = ProcessSignal.SIGTERM]);
+ abstract bool kill([ProcessSignal signal = ProcessSignal.SIGTERM]);
/**
* Terminates the streams of a process. [close] must be called on a
diff --git a/runtime/bin/process_impl.dart b/runtime/bin/process_impl.dart
index f05a1f1..48670e4 100644
--- a/runtime/bin/process_impl.dart
+++ b/runtime/bin/process_impl.dart
@@ -228,15 +228,14 @@
return _out.outputStream;
}
- void kill([ProcessSignal signal = ProcessSignal.SIGTERM]) {
+ bool kill([ProcessSignal signal = ProcessSignal.SIGTERM]) {
if (signal is! ProcessSignal) {
throw new ArgumentError(
"Argument 'signal' must be a ProcessSignal");
}
assert(_started);
- if (_ended) return;
- if (_kill(this, signal._signalNumber)) return;
- throw new ProcessException("Could not kill process");
+ if (_ended) return false;
+ return _kill(this, signal._signalNumber);
}
bool _kill(Process p, int signal) native "Process_Kill";
diff --git a/runtime/bin/process_linux.cc b/runtime/bin/process_linux.cc
index c834988..bfaf4d4 100644
--- a/runtime/bin/process_linux.cc
+++ b/runtime/bin/process_linux.cc
@@ -552,11 +552,7 @@
bool Process::Kill(intptr_t id, int signal) {
- int result = TEMP_FAILURE_RETRY(kill(id, signal));
- if (result == -1) {
- return false;
- }
- return true;
+ return (TEMP_FAILURE_RETRY(kill(id, signal)) != -1);
}
diff --git a/runtime/bin/process_macos.cc b/runtime/bin/process_macos.cc
index 20d1287..b23ab16 100644
--- a/runtime/bin/process_macos.cc
+++ b/runtime/bin/process_macos.cc
@@ -551,11 +551,7 @@
bool Process::Kill(intptr_t id, int signal) {
- int result = TEMP_FAILURE_RETRY(kill(id, signal));
- if (result == -1) {
- return false;
- }
- return true;
+ return (TEMP_FAILURE_RETRY(kill(id, signal)) != -1);
}
diff --git a/runtime/bin/process_win.cc b/runtime/bin/process_win.cc
index 104fee3..5628a53 100644
--- a/runtime/bin/process_win.cc
+++ b/runtime/bin/process_win.cc
@@ -511,9 +511,8 @@
&process_handle,
&wait_handle,
&exit_pipe);
- if (!success) {
- return true; // The process has already died. Report a successful kill.
- }
+ // The process is already dead.
+ if (!success) return false;
BOOL result = TerminateProcess(process_handle, -1);
return result ? true : false;
}
diff --git a/runtime/bin/socket.dart b/runtime/bin/socket.dart
index ef841eb..fcc1e44 100644
--- a/runtime/bin/socket.dart
+++ b/runtime/bin/socket.dart
@@ -128,11 +128,6 @@
* [onClosed].
*/
void close([bool halfClose = false]);
-
- /**
- * Socket is hashable.
- */
- int hashCode();
}
@@ -142,7 +137,7 @@
String toString() {
StringBuffer sb = new StringBuffer();
sb.add("SocketIOException");
- if (!message.isEmpty()) {
+ if (!message.isEmpty) {
sb.add(": $message");
if (osError != null) {
sb.add(" ($osError)");
diff --git a/runtime/bin/socket_impl.dart b/runtime/bin/socket_impl.dart
index 5ad2319..b262cee 100644
--- a/runtime/bin/socket_impl.dart
+++ b/runtime/bin/socket_impl.dart
@@ -223,7 +223,7 @@
}
}
- int hashCode() => _hashCode;
+ int get hashCode => _hashCode;
bool _propagateError(Exception e) => false;
diff --git a/runtime/bin/socket_linux.cc b/runtime/bin/socket_linux.cc
index 05f225b..896a9da 100644
--- a/runtime/bin/socket_linux.cc
+++ b/runtime/bin/socket_linux.cc
@@ -20,7 +20,7 @@
intptr_t Socket::CreateConnect(const char* host, const intptr_t port) {
intptr_t fd;
- struct hostent* server;
+ struct hostent server;
struct sockaddr_in server_address;
fd = TEMP_FAILURE_RETRY(socket(AF_INET, SOCK_STREAM, 0));
@@ -31,8 +31,12 @@
FDUtils::SetNonBlocking(fd);
- server = gethostbyname(host);
- if (server == NULL) {
+ static const size_t kTempBufSize = 1024;
+ char temp_buf[kTempBufSize];
+ struct hostent *unused;
+ int err;
+ if (gethostbyname_r(
+ host, &server, temp_buf, kTempBufSize, &unused, &err) != 0) {
TEMP_FAILURE_RETRY(close(fd));
fprintf(stderr, "Error CreateConnect: %s\n", strerror(errno));
return -1;
@@ -40,7 +44,7 @@
server_address.sin_family = AF_INET;
server_address.sin_port = htons(port);
- bcopy(server->h_addr, &server_address.sin_addr.s_addr, server->h_length);
+ bcopy(server.h_addr, &server_address.sin_addr.s_addr, server.h_length);
memset(&server_address.sin_zero, 0, sizeof(server_address.sin_zero));
intptr_t result = TEMP_FAILURE_RETRY(
connect(fd,
diff --git a/runtime/bin/socket_stream_impl.dart b/runtime/bin/socket_stream_impl.dart
index a2bbf99..c0ad221 100644
--- a/runtime/bin/socket_stream_impl.dart
+++ b/runtime/bin/socket_stream_impl.dart
@@ -114,7 +114,7 @@
void close() {
if (_closing && _closed) return;
- if (!_pendingWrites.isEmpty()) {
+ if (!_pendingWrites.isEmpty) {
// Mark the socket for close when all data is written.
_closing = true;
_socket._onWrite = _onWrite;
@@ -152,7 +152,7 @@
bool _write(List<int> buffer, int offset, int len, bool copyBuffer) {
if (_closing || _closed) throw new StreamException("Stream closed");
int bytesWritten = 0;
- if (_pendingWrites.isEmpty()) {
+ if (_pendingWrites.isEmpty) {
// If nothing is buffered write as much as possible and buffer
// the rest.
bytesWritten = _socket.writeList(buffer, offset, len);
@@ -175,7 +175,7 @@
void _onWrite() {
// Write as much buffered data to the socket as possible.
- while (!_pendingWrites.isEmpty()) {
+ while (!_pendingWrites.isEmpty) {
List<int> buffer = _pendingWrites.first;
int offset = _pendingWrites.index;
int bytesToWrite = buffer.length - offset;
diff --git a/runtime/bin/string_stream.dart b/runtime/bin/string_stream.dart
index a5fa6ac..9cb9e29 100644
--- a/runtime/bin/string_stream.dart
+++ b/runtime/bin/string_stream.dart
@@ -10,7 +10,7 @@
int write(List<int> buffer);
// Returns whether any decoded data is available.
- bool isEmpty();
+ bool get isEmpty;
// Returns the number of available decoded characters.
int available();
@@ -78,12 +78,12 @@
return buffer.length;
}
- bool isEmpty() => _result.isEmpty();
+ bool get isEmpty => _result.isEmpty;
int get lineBreaks => _lineBreaks;
String decoded([int len]) {
- if (isEmpty()) return null;
+ if (isEmpty) return null;
String result;
if (len !== null && len < available()) {
@@ -99,8 +99,8 @@
}
}
_resultOffset += result.length;
- while (!_lineBreakEnds.isEmpty() &&
- _lineBreakEnds.first() < _charOffset + _resultOffset) {
+ while (!_lineBreakEnds.isEmpty &&
+ _lineBreakEnds.first < _charOffset + _resultOffset) {
_lineBreakEnds.removeFirst();
_lineBreaks--;
}
@@ -109,7 +109,7 @@
}
String get decodedLine {
- if (_lineBreakEnds.isEmpty()) return null;
+ if (_lineBreakEnds.isEmpty) return null;
int lineEnd = _lineBreakEnds.removeFirst();
int terminationSequenceLength = 1;
if (_result[lineEnd - _charOffset] == LF &&
@@ -387,7 +387,7 @@
Encoding get encoding => _encoding;
- bool get closed => _inputClosed && _decoder.isEmpty();
+ bool get closed => _inputClosed && _decoder.isEmpty;
void set onData(void callback()) {
_clientDataHandler = callback;
@@ -413,7 +413,7 @@
void _onData() {
_readData();
- if (!_decoder.isEmpty() && _clientDataHandler !== null) {
+ if (!_decoder.isEmpty && _clientDataHandler !== null) {
_clientDataHandler();
}
if (_decoder.lineBreaks > 0 && _clientLineHandler !== null) {
@@ -425,7 +425,7 @@
void _onClosed() {
_inputClosed = true;
- if (_decoder.isEmpty() && _clientCloseHandler != null) {
+ if (_decoder.isEmpty && _clientCloseHandler != null) {
_clientCloseHandler();
_closed = true;
} else {
@@ -445,7 +445,7 @@
(_clientDataHandler === null && _clientLineHandler === null)) {
_input.onData = null;
} else if (_clientDataHandler !== null) {
- if (_decoder.isEmpty()) {
+ if (_decoder.isEmpty) {
_input.onData = _onData;
} else {
_input.onData = null;
@@ -490,7 +490,7 @@
if (!_closed) {
// Schedule data callback if string data available.
if (_clientDataHandler != null &&
- !_decoder.isEmpty() &&
+ !_decoder.isEmpty &&
_scheduledDataCallback == null) {
if (_scheduledLineCallback != null) {
_scheduledLineCallback.cancel();
@@ -500,7 +500,7 @@
// Schedule line callback if a line is available.
if (_clientLineHandler != null &&
- (_decoder.lineBreaks > 0 || (!_decoder.isEmpty() && _inputClosed)) &&
+ (_decoder.lineBreaks > 0 || (!_decoder.isEmpty && _inputClosed)) &&
_scheduledLineCallback == null) {
if (_scheduledDataCallback != null) {
_scheduledDataCallback.cancel();
@@ -509,7 +509,7 @@
}
// Schedule close callback if no more data and input is closed.
- if (_decoder.isEmpty() &&
+ if (_decoder.isEmpty &&
_inputClosed &&
_scheduledCloseCallback == null) {
_scheduledCloseCallback = new Timer(0, issueCloseCallback);
diff --git a/runtime/bin/websocket.dart b/runtime/bin/websocket.dart
index 47e184a..34c92dc 100644
--- a/runtime/bin/websocket.dart
+++ b/runtime/bin/websocket.dart
@@ -93,7 +93,7 @@
/**
* WebSocketConnection is hashable.
*/
- int hashCode();
+ int get hashCode;
}
@@ -166,7 +166,7 @@
/**
* WebSocketClientConnection is hashable.
*/
- int hashCode();
+ int get hashCode;
}
diff --git a/runtime/bin/websocket_impl.dart b/runtime/bin/websocket_impl.dart
index 54c66eb..0d2089d 100644
--- a/runtime/bin/websocket_impl.dart
+++ b/runtime/bin/websocket_impl.dart
@@ -468,7 +468,7 @@
_closeSent = true;
}
- int hashCode() => _hash;
+ int get hashCode => _hash;
_onWebSocketMessageStart(int type) {
_currentMessageType = type;
@@ -576,7 +576,7 @@
class _WebSocketConnection
extends _WebSocketConnectionBase implements WebSocketConnection {
_WebSocketConnection(DetachedSocket detached) {
- _hash = detached.socket.hashCode();
+ _hash = detached.socket.hashCode;
_socketConnected(detached.socket);
_startProcessing(detached.unparsedData);
}
@@ -598,7 +598,7 @@
response.headers.add(HttpHeaders.UPGRADE, "websocket");
String key = request.headers.value("Sec-WebSocket-Key");
SHA1 sha1 = new SHA1();
- sha1.update("$key$_webSocketGUID".charCodes());
+ sha1.update("$key$_webSocketGUID".charCodes);
String accept = _Base64._encode(sha1.digest());
response.headers.add("Sec-WebSocket-Accept", accept);
response.contentLength = 0;
@@ -747,7 +747,7 @@
return false;
}
SHA1 sha1 = new SHA1();
- sha1.update("$_nonce$_webSocketGUID".charCodes());
+ sha1.update("$_nonce$_webSocketGUID".charCodes);
List<int> expectedAccept = sha1.digest();
List<int> receivedAccept = _Base64._decode(accept);
if (expectedAccept.length != receivedAccept.length) return false;
@@ -775,15 +775,14 @@
throw new WebSocketException("Unsupported user info ${uri.userInfo}");
}
int port = uri.port == 0 ? HttpClient.DEFAULT_HTTP_PORT : uri.port;
- String path;
+ String path = uri.path;
+ if (path.length == 0) path = "/";
if (uri.query != "") {
if (uri.fragment != "") {
- path = "${uri.path}?${uri.query}#${uri.fragment}";
+ path = "${path}?${uri.query}#${uri.fragment}";
} else {
- path = "${uri.path}?${uri.query}";
+ path = "${path}?${uri.query}";
}
- } else {
- path = uri.path;
}
HttpClient client = new HttpClient();
diff --git a/runtime/dart-runtime.gyp b/runtime/dart-runtime.gyp
index 45548de..8eb37ec 100644
--- a/runtime/dart-runtime.gyp
+++ b/runtime/dart-runtime.gyp
@@ -91,6 +91,7 @@
],
'action': [
'python',
+ '-u', # Make standard I/O unbuffered.
'tools/make_version.py',
'--output', '<(version_cc_file)',
'--input', '<(version_in_cc_file)',
diff --git a/runtime/include/dart_api.h b/runtime/include/dart_api.h
index 5490dfa..be97d76 100755
--- a/runtime/include/dart_api.h
+++ b/runtime/include/dart_api.h
@@ -2703,6 +2703,18 @@
Dart_Handle source);
// TODO(turnidge): Rename to Dart_LibraryLoadSource?
+
+/**
+ * Loads a patch source string into a library.
+ *
+ * \param library A library
+ * \param url A url identifying the origin of the patch source
+ * \param source A string of Dart patch source
+ */
+DART_EXPORT Dart_Handle Dart_LoadPatch(Dart_Handle library,
+ Dart_Handle url,
+ Dart_Handle patch_source);
+
/**
* Sets the callback used to resolve native functions for a library.
*
diff --git a/runtime/lib/array.dart b/runtime/lib/array.dart
index 3a2ca48..aa1168f 100644
--- a/runtime/lib/array.dart
+++ b/runtime/lib/array.dart
@@ -25,7 +25,7 @@
native "ObjectArray_copyFromObjectArray";
E removeAt(int index) {
- throw const UnsupportedOperationException(
+ throw new UnsupportedError(
"Cannot remove element of a non-extendable array");
}
@@ -41,12 +41,12 @@
}
void removeRange(int start, int length) {
- throw const UnsupportedOperationException(
+ throw new UnsupportedError(
"Cannot remove range of a non-extendable array");
}
void insertRange(int start, int length, [E initialValue = null]) {
- throw const UnsupportedOperationException(
+ throw new UnsupportedError(
"Cannot insert range in a non-extendable array");
}
@@ -88,12 +88,12 @@
return Collections.some(this, f);
}
- bool isEmpty() {
+ bool get isEmpty {
return this.length === 0;
}
void sort([Comparator<E> compare = Comparable.compare]) {
- DualPivotQuicksort.sort(this, compare);
+ coreSort(this, compare);
}
int indexOf(E element, [int start = 0]) {
@@ -110,7 +110,7 @@
}
void add(E element) {
- throw const UnsupportedOperationException(
+ throw new UnsupportedError(
"Cannot add to a non-extendable array");
}
@@ -119,26 +119,26 @@
}
void addAll(Collection<E> elements) {
- throw const UnsupportedOperationException(
+ throw new UnsupportedError(
"Cannot add to a non-extendable array");
}
void clear() {
- throw const UnsupportedOperationException(
+ throw new UnsupportedError(
"Cannot clear a non-extendable array");
}
void set length(int length) {
- throw const UnsupportedOperationException(
+ throw new UnsupportedError(
"Cannot change the length of a non-extendable array");
}
E removeLast() {
- throw const UnsupportedOperationException(
+ throw new UnsupportedError(
"Cannot remove in a non-extendable array");
}
- E last() {
+ E get last {
return this[length - 1];
}
}
@@ -154,41 +154,41 @@
class _ImmutableArray<E> implements List<E> {
factory _ImmutableArray._uninstantiable() {
- throw const UnsupportedOperationException(
+ throw new UnsupportedError(
"ImmutableArray can only be allocated by the VM");
}
E operator [](int index) native "ObjectArray_getIndexed";
void operator []=(int index, E value) {
- throw const UnsupportedOperationException(
+ throw new UnsupportedError(
"Cannot modify an immutable array");
}
int get length native "ObjectArray_getLength";
E removeAt(int index) {
- throw const UnsupportedOperationException(
+ throw new UnsupportedError(
"Cannot modify an immutable array");
}
void copyFrom(List src, int srcStart, int dstStart, int count) {
- throw const UnsupportedOperationException(
+ throw new UnsupportedError(
"Cannot modify an immutable array");
}
void setRange(int start, int length, List<E> from, [int startFrom = 0]) {
- throw const UnsupportedOperationException(
+ throw new UnsupportedError(
"Cannot modify an immutable array");
}
void removeRange(int start, int length) {
- throw const UnsupportedOperationException(
+ throw new UnsupportedError(
"Cannot remove range of an immutable array");
}
void insertRange(int start, int length, [E initialValue = null]) {
- throw const UnsupportedOperationException(
+ throw new UnsupportedError(
"Cannot insert range in an immutable array");
}
@@ -230,12 +230,12 @@
return Collections.some(this, f);
}
- bool isEmpty() {
+ bool get isEmpty {
return this.length === 0;
}
void sort([Comparator<E> compare]) {
- throw const UnsupportedOperationException(
+ throw new UnsupportedError(
"Cannot modify an immutable array");
}
@@ -257,7 +257,7 @@
}
void add(E element) {
- throw const UnsupportedOperationException(
+ throw new UnsupportedError(
"Cannot add to an immutable array");
}
@@ -266,26 +266,26 @@
}
void addAll(Collection<E> elements) {
- throw const UnsupportedOperationException(
+ throw new UnsupportedError(
"Cannot add to an immutable array");
}
void clear() {
- throw const UnsupportedOperationException(
+ throw new UnsupportedError(
"Cannot clear an immutable array");
}
void set length(int length) {
- throw const UnsupportedOperationException(
+ throw new UnsupportedError(
"Cannot change the length of an immutable array");
}
E removeLast() {
- throw const UnsupportedOperationException(
+ throw new UnsupportedError(
"Cannot remove in a non-extendable array");
}
- E last() {
+ E get last {
return this[length - 1];
}
}
@@ -298,13 +298,13 @@
assert(array is _ObjectArray || array is _ImmutableArray);
}
- bool hasNext() {
+ bool get hasNext {
return _length > _pos;
}
E next() {
- if (!hasNext()) {
- throw const NoMoreElementsException();
+ if (!hasNext) {
+ throw new StateError("No more elements");
}
return _array[_pos++];
}
diff --git a/runtime/lib/byte_array.dart b/runtime/lib/byte_array.dart
index 708e291..cec964c 100644
--- a/runtime/lib/byte_array.dart
+++ b/runtime/lib/byte_array.dart
@@ -153,7 +153,7 @@
return Collections.some(this, f);
}
- bool isEmpty() {
+ bool get isEmpty {
return this.length === 0;
}
@@ -164,27 +164,27 @@
// Methods implementing the List interface.
set length(newLength) {
- throw const UnsupportedOperationException(
+ throw new UnsupportedError(
"Cannot resize a non-extendable array");
}
void add(value) {
- throw const UnsupportedOperationException(
+ throw new UnsupportedError(
"Cannot add to a non-extendable array");
}
void addLast(value) {
- throw const UnsupportedOperationException(
+ throw new UnsupportedError(
"Cannot add to a non-extendable array");
}
void addAll(Collection value) {
- throw const UnsupportedOperationException(
+ throw new UnsupportedError(
"Cannot add to a non-extendable array");
}
void sort([Comparator compare = Comparable.compare]) {
- DualPivotQuicksort.sort(this, compare);
+ coreSort(this, compare);
}
int indexOf(element, [int start = 0]) {
@@ -197,26 +197,26 @@
}
void clear() {
- throw const UnsupportedOperationException(
+ throw new UnsupportedError(
"Cannot remove from a non-extendable array");
}
int removeLast() {
- throw const UnsupportedOperationException(
+ throw new UnsupportedError(
"Cannot remove from a non-extendable array");
}
- last() {
+ get last {
return this[length - 1];
}
void removeRange(int start, int length) {
- throw const UnsupportedOperationException(
+ throw new UnsupportedError(
"Cannot remove from a non-extendable array");
}
void insertRange(int start, int length, [initialValue]) {
- throw const UnsupportedOperationException(
+ throw new UnsupportedError(
"Cannot add to a non-extendable array");
}
@@ -1488,13 +1488,13 @@
assert(array is _ByteArrayBase || array is _ByteArrayViewBase);
}
- bool hasNext() {
+ bool get hasNext {
return _length > _pos;
}
E next() {
- if (!hasNext()) {
- throw const NoMoreElementsException();
+ if (!hasNext) {
+ throw new StateError("No more elements");
}
return _array[_pos++];
}
@@ -1633,7 +1633,7 @@
return Collections.some(this, f);;
}
- bool isEmpty() {
+ bool get isEmpty {
return this.length === 0;
}
@@ -1642,27 +1642,27 @@
// Methods implementing the List interface.
set length(newLength) {
- throw const UnsupportedOperationException(
+ throw new UnsupportedError(
"Cannot resize a non-extendable array");
}
void add(value) {
- throw const UnsupportedOperationException(
+ throw new UnsupportedError(
"Cannot add to a non-extendable array");
}
void addLast(value) {
- throw const UnsupportedOperationException(
+ throw new UnsupportedError(
"Cannot add to a non-extendable array");
}
void addAll(Collection value) {
- throw const UnsupportedOperationException(
+ throw new UnsupportedError(
"Cannot add to a non-extendable array");
}
void sort([Comparator compare = Comparable.compare]) {
- DualPivotQuicksort.sort(this, compare);
+ coreSort(this, compare);
}
int indexOf(element, [int start = 0]) {
@@ -1675,26 +1675,26 @@
}
void clear() {
- throw const UnsupportedOperationException(
+ throw new UnsupportedError(
"Cannot remove from a non-extendable array");
}
int removeLast() {
- throw const UnsupportedOperationException(
+ throw new UnsupportedError(
"Cannot remove from a non-extendable array");
}
- last() {
+ get last {
return this[length - 1];
}
void removeRange(int start, int length) {
- throw const UnsupportedOperationException(
+ throw new UnsupportedError(
"Cannot remove from a non-extendable array");
}
void insertRange(int start, int length, [initialValue]) {
- throw const UnsupportedOperationException(
+ throw new UnsupportedError(
"Cannot add to a non-extendable array");
}
}
diff --git a/runtime/lib/date_patch.dart b/runtime/lib/date_patch.dart
index aee640f..8e2b8cc 100644
--- a/runtime/lib/date_patch.dart
+++ b/runtime/lib/date_patch.dart
@@ -3,16 +3,16 @@
// BSD-style license that can be found in the LICENSE file.
// Dart core library.
-// VM implementation of DateImplementation.
-patch class DateImplementation {
- /* patch */ DateImplementation(int year,
- int month,
- int day,
- int hour,
- int minute,
- int second,
- int millisecond,
- bool isUtc)
+// VM implementation of _DateImpl.
+patch class _DateImpl {
+ /* patch */ _DateImpl(int year,
+ int month,
+ int day,
+ int hour,
+ int minute,
+ int second,
+ int millisecond,
+ bool isUtc)
: this.isUtc = isUtc,
this.millisecondsSinceEpoch = _brokenDownDateToMillisecondsSinceEpoch(
year, month, day, hour, minute, second, millisecond, isUtc) {
@@ -20,7 +20,7 @@
if (isUtc === null) throw new ArgumentError();
}
- /* patch */ DateImplementation.now()
+ /* patch */ _DateImpl.now()
: isUtc = false,
millisecondsSinceEpoch = _getCurrentMs() {
}
diff --git a/runtime/lib/double.cc b/runtime/lib/double.cc
index a6da65b..9cbb195 100644
--- a/runtime/lib/double.cc
+++ b/runtime/lib/double.cc
@@ -257,19 +257,19 @@
}
-DEFINE_NATIVE_ENTRY(Double_isInfinite, 1) {
+DEFINE_NATIVE_ENTRY(Double_getIsInfinite, 1) {
const Double& arg = Double::CheckedHandle(arguments->At(0));
return Bool::Get(isinf(arg.value()));
}
-DEFINE_NATIVE_ENTRY(Double_isNaN, 1) {
+DEFINE_NATIVE_ENTRY(Double_getIsNaN, 1) {
const Double& arg = Double::CheckedHandle(arguments->At(0));
return Bool::Get(isnan(arg.value()));
}
-DEFINE_NATIVE_ENTRY(Double_isNegative, 1) {
+DEFINE_NATIVE_ENTRY(Double_getIsNegative, 1) {
const Double& arg = Double::CheckedHandle(arguments->At(0));
// Include negative zero, infinity.
return Bool::Get(signbit(arg.value()) && !isnan(arg.value()));
diff --git a/runtime/lib/double.dart b/runtime/lib/double.dart
index 4878d00..75de3c1 100644
--- a/runtime/lib/double.dart
+++ b/runtime/lib/double.dart
@@ -5,7 +5,7 @@
class _Double implements double {
factory _Double.fromInteger(int value)
native "Double_doubleFromInteger";
- int hashCode() {
+ int get hashCode {
try {
return toInt();
} on FormatException catch (e) {
@@ -49,7 +49,7 @@
double operator -() {
if (this == 0.0) {
// -0.0 is canonicalized by the VM's parser, therefore no cycles.
- return isNegative() ? 0.0 : -0.0;
+ return isNegative ? 0.0 : -0.0;
}
return 0.0 - this;
}
@@ -93,9 +93,9 @@
bool _greaterThanFromInteger(int other)
native "Double_greaterThanFromInteger";
- bool isNegative() native "Double_isNegative";
- bool isInfinite() native "Double_isInfinite";
- bool isNaN() native "Double_isNaN";
+ bool get isNegative native "Double_getIsNegative";
+ bool get isInfinite native "Double_getIsInfinite";
+ bool get isNaN native "Double_getIsNaN";
double abs() {
// Handle negative 0.0.
@@ -116,7 +116,7 @@
}
// Throw NullPointerException if exponent is null.
double doubleExponent = exponent.toDouble();
- if (isNaN() || exponent.isNaN()) {
+ if (isNaN || exponent.isNaN) {
return double.NAN;
}
return _pow(doubleExponent);
@@ -136,7 +136,7 @@
double x = this;
// Step 4.
- if (isNaN()) return "NaN";
+ if (isNaN) return "NaN";
// Step 5 and 6 skipped. Will be dealt with by native function.
@@ -163,7 +163,7 @@
throw "Range error";
}
- if (isNaN()) return "NaN";
+ if (isNaN) return "NaN";
if (this == double.INFINITY) return "Infinity";
if (this == -double.INFINITY) return "-Infinity";
@@ -189,7 +189,7 @@
throw "Range error";
}
- if (isNaN()) return "NaN";
+ if (isNaN) return "NaN";
if (this == double.INFINITY) return "Infinity";
if (this == -double.INFINITY) return "-Infinity";
@@ -211,8 +211,8 @@
return GREATER;
} else if (this == other) {
if (this == 0.0) {
- bool thisIsNegative = isNegative();
- bool otherIsNegative = other.isNegative();
+ bool thisIsNegative = isNegative;
+ bool otherIsNegative = other.isNegative;
if (thisIsNegative == otherIsNegative) {
return EQUAL;
}
@@ -220,8 +220,8 @@
} else {
return EQUAL;
}
- } else if (isNaN()) {
- return other.isNaN() ? EQUAL : GREATER;
+ } else if (isNaN) {
+ return other.isNaN ? EQUAL : GREATER;
} else {
// Other is NaN.
return LESS;
diff --git a/runtime/lib/error.dart b/runtime/lib/error.dart
index 907667f..619b16c 100644
--- a/runtime/lib/error.dart
+++ b/runtime/lib/error.dart
@@ -6,7 +6,7 @@
class AssertionErrorImplementation implements AssertionError {
factory AssertionErrorImplementation._uninstantiable() {
- throw const UnsupportedOperationException(
+ throw new UnsupportedError(
"AssertionError can only be allocated by the VM");
}
static _throwNew(int assertionStart, int assertionEnd)
@@ -25,7 +25,7 @@
extends AssertionErrorImplementation
implements TypeError {
factory TypeErrorImplementation._uninstantiable() {
- throw const UnsupportedOperationException(
+ throw new UnsupportedError(
"TypeError can only be allocated by the VM");
}
static _throwNew(int location,
@@ -54,7 +54,7 @@
extends TypeErrorImplementation
implements CastError {
factory CastError._uninstantiable() {
- throw const UnsupportedOperationException(
+ throw new UnsupportedError(
"CastError can only be allocated by the VM");
}
// A CastError is allocated by TypeError._throwNew() when dst_name equals
@@ -73,7 +73,7 @@
class FallThroughErrorImplementation implements FallThroughError {
factory FallThroughErrorImplementation._uninstantiable() {
- throw const UnsupportedOperationException(
+ throw new UnsupportedError(
"FallThroughError can only be allocated by the VM");
}
static _throwNew(int case_clause_pos) native "FallThroughError_throwNew";
@@ -94,7 +94,7 @@
// TODO(regis): This class will change once mirrors are available.
class NoSuchMethodErrorImplementation implements NoSuchMethodError {
factory NoSuchMethodErrorImplementation._uninstantiable() {
- throw const UnsupportedOperationException(
+ throw new UnsupportedError(
"NoSuchMethodError can only be allocated by the VM");
}
@@ -116,7 +116,7 @@
implements AbstractClassInstantiationError {
factory AbstractClassInstantiationErrorImplementation._uninstantiable() {
- throw const UnsupportedOperationException(
+ throw new UnsupportedError(
"AbstractClassInstantiationError can only be allocated by the VM");
}
diff --git a/runtime/lib/errors_patch.dart b/runtime/lib/errors_patch.dart
index fd6ec58..7894ae3 100644
--- a/runtime/lib/errors_patch.dart
+++ b/runtime/lib/errors_patch.dart
@@ -7,3 +7,16 @@
return Object._toString(object);
}
}
+
+// Exceptions that should be NoSuchMethodError instead.
+
+class _ClosureArgumentMismatchException implements Exception {
+ const _ClosureArgumentMismatchException();
+ String toString() => "Closure argument mismatch";
+}
+
+
+class _ObjectNotClosureException implements Exception {
+ const _ObjectNotClosureException();
+ String toString() => "Object is not closure";
+}
diff --git a/runtime/lib/growable_array.dart b/runtime/lib/growable_array.dart
index ad4765b..c648fb5 100644
--- a/runtime/lib/growable_array.dart
+++ b/runtime/lib/growable_array.dart
@@ -4,7 +4,7 @@
class _GrowableObjectArray<T> implements List<T> {
factory _GrowableObjectArray._uninstantiable() {
- throw const UnsupportedOperationException(
+ throw new UnsupportedError(
"GrowableObjectArray can only be allocated by the VM");
}
@@ -145,7 +145,7 @@
return elem;
}
- T last() {
+ T get last {
return this[length - 1];
}
@@ -199,7 +199,7 @@
return Collections.some(this, f);
}
- bool isEmpty() {
+ bool get isEmpty {
return this.length === 0;
}
@@ -208,7 +208,7 @@
}
void sort([Comparator<T> compare = Comparable.compare]) {
- DualPivotQuicksort.sort(this, compare);
+ coreSort(this, compare);
}
String toString() {
diff --git a/runtime/lib/immutable_map.dart b/runtime/lib/immutable_map.dart
index 3901c11..d7756e0 100644
--- a/runtime/lib/immutable_map.dart
+++ b/runtime/lib/immutable_map.dart
@@ -21,7 +21,7 @@
return null;
}
- bool isEmpty() {
+ bool get isEmpty {
return kvPairs_.length === 0;
}
@@ -35,7 +35,7 @@
}
}
- Collection<K> getKeys() {
+ Collection<K> get keys {
int numKeys = length;
List<K> list = new List<K>(numKeys);
for (int i = 0; i < numKeys; i++) {
@@ -44,7 +44,7 @@
return list;
}
- Collection<V> getValues() {
+ Collection<V> get values {
int numValues = length;
List<V> list = new List<V>(numValues);
for (int i = 0; i < numValues; i++) {
@@ -72,19 +72,19 @@
}
void operator []=(K key, V value) {
- throw const IllegalAccessException();
+ throw new UnsupportedError("Cannot set value in unmodifiable Map");
}
V putIfAbsent(K key, V ifAbsent()) {
- throw const IllegalAccessException();
+ throw new UnsupportedError("Cannot set value in unmodifiable Map");
}
void clear() {
- throw const IllegalAccessException();
+ throw new UnsupportedError("Cannot clear unmodifiable Map");
}
V remove(K key) {
- throw const IllegalAccessException();
+ throw new UnsupportedError("Cannot remove from unmodifiable Map");
}
String toString() {
diff --git a/runtime/lib/integers.dart b/runtime/lib/integers.dart
index f2b46b7..cdf43b3 100644
--- a/runtime/lib/integers.dart
+++ b/runtime/lib/integers.dart
@@ -6,7 +6,7 @@
// - shift amount must be a Smi.
class _IntegerImplementation {
factory _IntegerImplementation._uninstantiable() {
- throw const UnsupportedOperationException(
+ throw new UnsupportedError(
"_IntegerImplementation can only be allocated by the VM");
}
num operator +(num other) {
@@ -89,11 +89,11 @@
int abs() {
return this < 0 ? -this : this;
}
- bool isEven() { return ((this & 1) === 0); }
- bool isOdd() { return !isEven(); }
- bool isNaN() { return false; }
- bool isNegative() { return this < 0; }
- bool isInfinite() { return false; }
+ bool get isEven => ((this & 1) == 0);
+ bool get isOdd => !isEven;
+ bool get isNaN => false;
+ bool get isNegative => this < 0;
+ bool get isInfinite => false;
int compareTo(num other) {
final int EQUAL = 0, LESS = -1, GREATER = 1;
@@ -102,10 +102,10 @@
int MAX_EXACT_INT_TO_DOUBLE = 9007199254740992; // 2^53.
int MIN_EXACT_INT_TO_DOUBLE = -MAX_EXACT_INT_TO_DOUBLE;
double d = other;
- if (d.isInfinite()) {
+ if (d.isInfinite) {
return d == double.NEGATIVE_INFINITY ? GREATER : LESS;
}
- if (d.isNaN()) {
+ if (d.isNaN) {
return LESS;
}
if (MIN_EXACT_INT_TO_DOUBLE <= this && this <= MAX_EXACT_INT_TO_DOUBLE) {
@@ -136,7 +136,7 @@
int pow(int exponent) {
double res = this.toDouble().pow(exponent);
- if (res.isInfinite()) {
+ if (res.isInfinite) {
// Use Bigint instead.
throw "_IntegerImplementation.pow not implemented for large integers.";
}
@@ -168,7 +168,7 @@
value ~/= radix;
temp.add(digit);
}
- if (temp.isEmpty()) {
+ if (temp.isEmpty) {
return "0";
}
StringBuffer buffer = new StringBuffer();
@@ -182,10 +182,10 @@
class _Smi extends _IntegerImplementation implements int {
factory _Smi._uninstantiable() {
- throw const UnsupportedOperationException(
+ throw new UnsupportedError(
"_Smi can only be allocated by the VM");
}
- int hashCode() {
+ int get hashCode {
return this;
}
int operator ~() native "Smi_bitNegate";
@@ -196,10 +196,10 @@
// Represents integers that cannot be represented by Smi but fit into 64bits.
class _Mint extends _IntegerImplementation implements int {
factory _Mint._uninstantiable() {
- throw const UnsupportedOperationException(
+ throw new UnsupportedError(
"_Mint can only be allocated by the VM");
}
- int hashCode() {
+ int get hashCode {
return this;
}
int operator ~() native "Mint_bitNegate";
@@ -221,10 +221,10 @@
// Bigint.
class _Bigint extends _IntegerImplementation implements int {
factory _Bigint._uninstantiable() {
- throw const UnsupportedOperationException(
+ throw new UnsupportedError(
"_Bigint can only be allocated by the VM");
}
- int hashCode() {
+ int get hashCode {
return this;
}
int operator ~() native "Bigint_bitNegate";
diff --git a/runtime/lib/invocation_mirror_patch.dart b/runtime/lib/invocation_mirror_patch.dart
new file mode 100644
index 0000000..5bf4e42
--- /dev/null
+++ b/runtime/lib/invocation_mirror_patch.dart
@@ -0,0 +1,27 @@
+// 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.
+
+class _InvocationMirror implements InvocationMirror {
+ static final int METHOD = 0;
+ static final int GETTER = 1;
+ static final int SETTER = 2;
+
+ final String methodName;
+ final List positionalArguments;
+ final Map<String,dynamic> namedArguments = null;
+
+ final int _type;
+
+ _InvocationMirror(this.methodName, this._type, this.positionalArguments);
+
+ bool get isMethod => _type == METHOD;
+ bool get isAccessor => _type != METHOD;
+ bool get isGetter => _type == GETTER;
+ bool get isSetter => _type == SETTER;
+
+ invokeOn(Object receiver) {
+ throw new UnsupportedOperation("invokeOn not implemented yet");
+ }
+}
+
diff --git a/runtime/lib/isolate_patch.dart b/runtime/lib/isolate_patch.dart
index 1113d98..595beae 100644
--- a/runtime/lib/isolate_patch.dart
+++ b/runtime/lib/isolate_patch.dart
@@ -91,7 +91,7 @@
return (other is _SendPortImpl) && _id == other._id;
}
- int hashCode() {
+ int get hashCode {
return _id;
}
diff --git a/runtime/lib/lib_impl_sources.gypi b/runtime/lib/lib_impl_sources.gypi
index d60fba3..090635d 100644
--- a/runtime/lib/lib_impl_sources.gypi
+++ b/runtime/lib/lib_impl_sources.gypi
@@ -9,8 +9,6 @@
'array.cc',
'array.dart',
'array_patch.dart',
- 'date.cc',
- 'date_patch.dart',
'growable_array.cc',
'growable_array.dart',
'immutable_map.dart',
diff --git a/runtime/lib/lib_sources.gypi b/runtime/lib/lib_sources.gypi
index 971dfca..9ddcd3b 100644
--- a/runtime/lib/lib_sources.gypi
+++ b/runtime/lib/lib_sources.gypi
@@ -6,6 +6,8 @@
{
'sources': [
+ 'date.cc',
+ 'date_patch.dart',
'double.cc',
'double.dart',
'double_patch.dart',
@@ -18,6 +20,7 @@
'integers.cc',
'integers.dart',
'integers_patch.dart',
+ 'invocation_mirror_patch.dart',
'object_patch.dart',
'print_patch.dart',
'stopwatch.cc',
diff --git a/runtime/lib/mirrors_impl.dart b/runtime/lib/mirrors_impl.dart
index 683e724..0233d09 100644
--- a/runtime/lib/mirrors_impl.dart
+++ b/runtime/lib/mirrors_impl.dart
@@ -94,8 +94,8 @@
}
abstract class _LocalMirrorImpl implements Mirror {
- int hashCode() {
- throw new NotImplementedException('Mirror.hashCode() is not implemented');
+ int get hashCode {
+ throw new NotImplementedException('Mirror.hashCode is not implemented');
}
// Local mirrors always return the same MirrorSystem. This field
diff --git a/runtime/lib/object_patch.dart b/runtime/lib/object_patch.dart
index 9e1812b..603e14e 100644
--- a/runtime/lib/object_patch.dart
+++ b/runtime/lib/object_patch.dart
@@ -10,7 +10,7 @@
static Expando _hashCodeExp = new Expando("Object.hashCode");
static Random _hashCodeRnd = new Random();
- /* patch */ int hashCode() {
+ /* patch */ int get hashCode {
var result = _hashCodeExp[this];
if (result == null) {
result = _hashCodeRnd.nextInt(0x40000000); // Stay in Smi range.
diff --git a/runtime/lib/print_patch.dart b/runtime/lib/print_patch.dart
index 6ae59f1..53d034c 100644
--- a/runtime/lib/print_patch.dart
+++ b/runtime/lib/print_patch.dart
@@ -9,7 +9,7 @@
}
void _unsupportedPrint(Object obj) {
- throw const UnsupportedOperationException("'print' is not supported");
+ throw new UnsupportedError("'print' is not supported");
}
// _printClosure can be overwritten by the embedder to supply a different
diff --git a/runtime/lib/regexp_patch.dart b/runtime/lib/regexp_patch.dart
index 92acb79..936a7fe 100644
--- a/runtime/lib/regexp_patch.dart
+++ b/runtime/lib/regexp_patch.dart
@@ -5,13 +5,8 @@
class _JSRegExpMatch implements Match {
_JSRegExpMatch(this.regexp, this.str, this._match);
- int start() {
- return _start(0);
- }
-
- int end() {
- return _end(0);
- }
+ int get start => _start(0);
+ int get end => _end(0);
int _start(int groupIdx) {
return _match[(groupIdx * MATCH_PAIR)];
@@ -46,9 +41,7 @@
return groupsList;
}
- int groupCount() {
- return regexp._groupCount;
- }
+ int get groupCount => regexp._groupCount;
String get pattern => regexp.pattern;
diff --git a/runtime/lib/string.cc b/runtime/lib/string.cc
index 41c3181..2d5bd91 100644
--- a/runtime/lib/string.cc
+++ b/runtime/lib/string.cc
@@ -62,7 +62,7 @@
}
-DEFINE_NATIVE_ENTRY(String_hashCode, 1) {
+DEFINE_NATIVE_ENTRY(String_getHashCode, 1) {
const String& receiver = String::CheckedHandle(arguments->At(0));
intptr_t hash_val = receiver.Hash();
ASSERT(hash_val > 0);
diff --git a/runtime/lib/string_base.dart b/runtime/lib/string_base.dart
index b593e71..792940d 100644
--- a/runtime/lib/string_base.dart
+++ b/runtime/lib/string_base.dart
@@ -9,11 +9,11 @@
class _StringBase {
factory _StringBase._uninstantiable() {
- throw const UnsupportedOperationException(
+ throw new UnsupportedError(
"_StringBase can't be instaniated");
}
- int hashCode() native "String_hashCode";
+ int get hashCode native "String_getHashCode";
/**
* Create the most efficient string representation for specified
@@ -42,7 +42,7 @@
int get length native "String_getLength";
- bool isEmpty() {
+ bool get isEmpty {
return this.length === 0;
}
@@ -84,7 +84,7 @@
}
bool _substringMatches(int start, String other) {
- if (other.isEmpty()) return true;
+ if (other.isEmpty) return true;
if ((start < 0) || (start >= this.length)) {
return false;
}
@@ -109,7 +109,7 @@
}
int indexOf(String other, [int start = 0]) {
- if (other.isEmpty()) {
+ if (other.isEmpty) {
return start < this.length ? start : this.length;
}
if ((start < 0) || (start >= this.length)) {
@@ -126,7 +126,7 @@
int lastIndexOf(String other, [int start = null]) {
if (start == null) start = length - 1;
- if (other.isEmpty()) {
+ if (other.isEmpty) {
return min(this.length, start);
}
if (start >= this.length) {
@@ -189,7 +189,7 @@
if (pattern is String) {
return indexOf(pattern, startIndex) >= 0;
}
- return pattern.allMatches(this.substring(startIndex)).iterator().hasNext();
+ return pattern.allMatches(this.substring(startIndex)).iterator().hasNext;
}
String replaceFirst(Pattern pattern, String replacement) {
@@ -202,10 +202,10 @@
StringBuffer buffer = new StringBuffer();
int startIndex = 0;
Iterator iterator = pattern.allMatches(this).iterator();
- if (iterator.hasNext()) {
+ if (iterator.hasNext) {
Match match = iterator.next();
- buffer.add(this.substring(startIndex, match.start())).add(replacement);
- startIndex = match.end();
+ buffer.add(this.substring(startIndex, match.start)).add(replacement);
+ startIndex = match.end;
}
return buffer.add(this.substring(startIndex)).toString();
}
@@ -220,8 +220,8 @@
StringBuffer buffer = new StringBuffer();
int startIndex = 0;
for (Match match in pattern.allMatches(this)) {
- buffer.add(this.substring(startIndex, match.start())).add(replacement);
- startIndex = match.end();
+ buffer.add(this.substring(startIndex, match.start)).add(replacement);
+ startIndex = match.end;
}
return buffer.add(this.substring(startIndex)).toString();
}
@@ -265,7 +265,7 @@
List<String> split(Pattern pattern) {
int length = this.length;
Iterator iterator = pattern.allMatches(this).iterator();
- if (length == 0 && iterator.hasNext()) {
+ if (length == 0 && iterator.hasNext) {
// A matched empty string input returns the empty list.
return <String>[];
}
@@ -273,21 +273,21 @@
int startIndex = 0;
int previousIndex = 0;
while (true) {
- if (startIndex == length || !iterator.hasNext()) {
+ if (startIndex == length || !iterator.hasNext) {
result.add(this.substring(previousIndex, length));
break;
}
Match match = iterator.next();
- if (match.start() == length) {
+ if (match.start == length) {
result.add(this.substring(previousIndex, length));
break;
}
- int endIndex = match.end();
+ int endIndex = match.end;
if (startIndex == endIndex && endIndex == previousIndex) {
++startIndex; // empty match, advance and restart
continue;
}
- result.add(this.substring(previousIndex, match.start()));
+ result.add(this.substring(previousIndex, match.start));
startIndex = previousIndex = endIndex;
}
return result;
@@ -302,7 +302,7 @@
return result;
}
- List<int> charCodes() {
+ List<int> get charCodes {
int len = this.length;
final result = new List<int>(len);
for (int i = 0; i < len; i++) {
@@ -356,7 +356,7 @@
class _OneByteString extends _StringBase implements String {
factory _OneByteString._uninstantiable() {
- throw const UnsupportedOperationException(
+ throw new UnsupportedError(
"_OneByteString can only be allocated by the VM");
}
@@ -374,7 +374,7 @@
class _TwoByteString extends _StringBase implements String {
factory _TwoByteString._uninstantiable() {
- throw const UnsupportedOperationException(
+ throw new UnsupportedError(
"_TwoByteString can only be allocated by the VM");
}
@@ -391,7 +391,7 @@
class _FourByteString extends _StringBase implements String {
factory _FourByteString._uninstantiable() {
- throw const UnsupportedOperationException(
+ throw new UnsupportedError(
"_FourByteString can only be allocated by the VM");
}
@@ -408,7 +408,7 @@
class _ExternalOneByteString extends _StringBase implements String {
factory _ExternalOneByteString._uninstantiable() {
- throw const UnsupportedOperationException(
+ throw new UnsupportedError(
"_ExternalOneByteString can only be allocated by the VM");
}
@@ -425,7 +425,7 @@
class _ExternalTwoByteString extends _StringBase implements String {
factory ExternalTwoByteString._uninstantiable() {
- throw const UnsupportedOperationException(
+ throw new UnsupportedError(
"_ExternalTwoByteString can only be allocated by the VM");
}
@@ -442,7 +442,7 @@
class _ExternalFourByteString extends _StringBase implements String {
factory _ExternalFourByteString._uninstantiable() {
- throw const UnsupportedOperationException(
+ throw new UnsupportedError(
"ExternalFourByteString can only be allocated by the VM");
}
@@ -458,14 +458,13 @@
class _StringMatch implements Match {
- const _StringMatch(int this._start,
+ const _StringMatch(int this.start,
String this.str,
String this.pattern);
- int start() => _start;
- int end() => _start + pattern.length;
+ int get end => start + pattern.length;
String operator[](int g) => group(g);
- int groupCount() => 0;
+ int get groupCount => 0;
String group(int group) {
if (group != 0) {
@@ -482,7 +481,7 @@
return result;
}
- final int _start;
+ final int start;
final String str;
final String pattern;
}
diff --git a/runtime/platform/globals.h b/runtime/platform/globals.h
index e7cda98..95585b1 100644
--- a/runtime/platform/globals.h
+++ b/runtime/platform/globals.h
@@ -152,6 +152,7 @@
// Byte sizes.
const int kWordSize = sizeof(word);
const int kDoubleSize = sizeof(double); // NOLINT
+const int kFloatSize = sizeof(float); // NOLINT
#ifdef ARCH_IS_32_BIT
const int kWordSizeLog2 = 2;
const uword kUwordMax = kMaxUint32;
@@ -166,9 +167,9 @@
const int kBitsPerWord = kWordSize * kBitsPerByte;
// System-wide named constants.
-const int KB = 1024;
-const int MB = KB * KB;
-const int GB = KB * KB * KB;
+const intptr_t KB = 1024;
+const intptr_t MB = KB * KB;
+const intptr_t GB = KB * KB * KB;
const intptr_t kIntptrOne = 1;
const intptr_t kIntptrMin = (kIntptrOne << (kBitsPerWord - 1));
const intptr_t kIntptrMax = ~kIntptrMin;
diff --git a/runtime/tests/vm/dart/byte_array_test.dart b/runtime/tests/vm/dart/byte_array_test.dart
index c418e56..701669a 100644
--- a/runtime/tests/vm/dart/byte_array_test.dart
+++ b/runtime/tests/vm/dart/byte_array_test.dart
@@ -28,21 +28,21 @@
Expect.throws(() { array[10] = 0; },
(e) { return e is IndexOutOfRangeException; });
Expect.throws(() { array.add(0); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { array.addAll([0]); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { array.addLast(0); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { array.clear(); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { array.insertRange(0, array.length, 0); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { array.length = 0; },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { array.removeLast(); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { array.removeRange(0, array.length - 1); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
for (int i = 0; i < array.length; ++i) {
array[i] = 1 + i;
}
@@ -112,21 +112,21 @@
Expect.throws(() { array[10] = 0; },
(e) { return e is IndexOutOfRangeException; });
Expect.throws(() { array.add(0); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { array.addAll([0]); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { array.addLast(0); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { array.clear(); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { array.insertRange(0, array.length, 0); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { array.length = 0; },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { array.removeLast(); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { array.removeRange(0, array.length - 1); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
for (int i = 0; i < array.length; ++i) {
array[i] = 1 + i;
}
@@ -184,21 +184,21 @@
Expect.throws(() { array[10] = 0; },
(e) { return e is IndexOutOfRangeException; });
Expect.throws(() { array.add(0); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { array.addAll([0]); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { array.addLast(0); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { array.clear(); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { array.insertRange(0, array.length, 0); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { array.length = 0; },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { array.removeLast(); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { array.removeRange(0, array.length - 1); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
for (int i = 0; i < array.length; ++i) {
array[i] = 1 + i;
}
@@ -268,21 +268,21 @@
Expect.throws(() { array[10] = 0; },
(e) { return e is IndexOutOfRangeException; });
Expect.throws(() { array.add(0); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { array.addAll([0]); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { array.addLast(0); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { array.clear(); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { array.insertRange(0, array.length, 0); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { array.length = 0; },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { array.removeLast(); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { array.removeRange(0, array.length - 1); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
for (int i = 0; i < array.length; ++i) {
array[i] = 1 + i;
}
@@ -340,21 +340,21 @@
Expect.throws(() { array[10] = 0; },
(e) { return e is IndexOutOfRangeException; });
Expect.throws(() { array.add(0); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { array.addAll([0]); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { array.addLast(0); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { array.clear(); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { array.insertRange(0, array.length, 0); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { array.length = 0; },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { array.removeLast(); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { array.removeRange(0, array.length - 1); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
for (int i = 0; i < array.length; ++i) {
array[i] = 1 + i;
}
@@ -430,21 +430,21 @@
Expect.throws(() { array[10] = 0; },
(e) { return e is IndexOutOfRangeException; });
Expect.throws(() { array.add(0); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { array.addAll([0]); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { array.addLast(0); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { array.clear(); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { array.insertRange(0, array.length, 0); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { array.length = 0; },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { array.removeLast(); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { array.removeRange(0, array.length - 1); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
for (int i = 0; i < array.length; ++i) {
array[i] = 1 + i;
}
@@ -505,21 +505,21 @@
Expect.throws(() { array[10] = 0; },
(e) { return e is IndexOutOfRangeException; });
Expect.throws(() { array.add(0); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { array.addAll([0]); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { array.addLast(0); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { array.clear(); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { array.insertRange(0, array.length, 0); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { array.length = 0; },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { array.removeLast(); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { array.removeRange(0, array.length - 1); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
for (int i = 0; i < array.length; ++i) {
array[i] = 1 + i;
}
@@ -596,21 +596,21 @@
Expect.throws(() { array[10] = 0; },
(e) { return e is IndexOutOfRangeException; });
Expect.throws(() { array.add(0); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { array.addAll([0]); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { array.addLast(0); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { array.clear(); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { array.insertRange(0, array.length, 0); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { array.length = 0; },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { array.removeLast(); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { array.removeRange(0, array.length - 1); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
for (int i = 0; i < array.length; ++i) {
array[i] = 1 + i;
}
@@ -671,21 +671,21 @@
Expect.throws(() { array[10] = 0.0; },
(e) { return e is IndexOutOfRangeException; });
Expect.throws(() { array.add(0.0); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { array.addAll([0]); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { array.addLast(0.0); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { array.clear(); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { array.insertRange(0, array.length, 0.0); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { array.length = 0; },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { array.removeLast(); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { array.removeRange(0, array.length - 1); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
for (int i = 0; i < array.length; ++i) {
array[i] = 1.0 + i;
}
@@ -733,21 +733,21 @@
Expect.throws(() { array[10] = 0.0; },
(e) { return e is IndexOutOfRangeException; });
Expect.throws(() { array.add(0.0); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { array.addAll([0]); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { array.addLast(0.0); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { array.clear(); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { array.insertRange(0, array.length, 0.0); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { array.length = 0; },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { array.removeLast(); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { array.removeRange(0, array.length - 1); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
for (int i = 0; i < array.length; ++i) {
array[i] = 1.0 + i;
}
@@ -882,8 +882,8 @@
Expect.equals(0xFFFFFFFF, byte_array.getUint32(0));
Expect.equals(-1, byte_array.getInt64(0));
Expect.equals(0xFFFFFFFFFFFFFFFF, byte_array.getUint64(0));
- Expect.isTrue(byte_array.getFloat32(0).isNaN());
- Expect.isTrue(byte_array.getFloat64(0).isNaN());
+ Expect.isTrue(byte_array.getFloat32(0).isNaN);
+ Expect.isTrue(byte_array.getFloat64(0).isNaN);
for (int i = 0; i < array.length; ++i) {
array[i] = 0xFF - i;
}
@@ -968,21 +968,21 @@
Expect.throws(() { view[10] = 0; },
(e) { return e is IndexOutOfRangeException; });
Expect.throws(() { view.add(0); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { view.addAll([0]); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { view.addLast(0); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { view.clear(); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { view.insertRange(0, view.length, 0); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { view.length = 0; },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { view.removeLast(); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { view.removeRange(0, view.length - 1); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
for (int i = 0; i < view.length; ++i) {
view[i] = 1 + i;
}
@@ -1096,21 +1096,21 @@
Expect.throws(() { view[view.length] = 0; },
(e) { return e is IndexOutOfRangeException; });
Expect.throws(() { view.add(0); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { view.addAll([0]); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { view.addLast(0); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { view.clear(); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { view.insertRange(0, view.length, 0); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { view.length = 0; },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { view.removeLast(); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { view.removeRange(0, view.length - 1); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
for (int i = 0; i < view.length; ++i) {
view[i] = 1 + i;
}
@@ -1203,21 +1203,21 @@
Expect.throws(() { view[10] = 0; },
(e) { return e is IndexOutOfRangeException; });
Expect.throws(() { view.add(0); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { view.addAll([0]); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { view.addLast(0); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { view.clear(); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { view.insertRange(0, view.length, 0); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { view.length = 0; },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { view.removeLast(); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { view.removeRange(0, view.length - 1); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
for (int i = 0; i < view.length; ++i) {
view[i] = 1 + i;
}
@@ -1338,21 +1338,21 @@
Expect.throws(() { view[view.length] = 0; },
(e) { return e is IndexOutOfRangeException; });
Expect.throws(() { view.add(0); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { view.addAll([0]); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { view.addLast(0); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { view.clear(); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { view.insertRange(0, view.length, 0); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { view.length = 0; },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { view.removeLast(); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { view.removeRange(0, view.length - 1); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
for (int i = 0; i < view.length; ++i) {
view[i] = 1 + i;
}
@@ -1450,21 +1450,21 @@
Expect.throws(() { view[10] = 0; },
(e) { return e is IndexOutOfRangeException; });
Expect.throws(() { view.add(0); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { view.addAll([0]); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { view.addLast(0); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { view.clear(); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { view.insertRange(0, view.length, 0); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { view.length = 0; },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { view.removeLast(); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { view.removeRange(0, view.length - 1); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
for (int i = 0; i < view.length; ++i) {
view[i] = 1 + i;
}
@@ -1609,21 +1609,21 @@
Expect.throws(() { view[view.length] = 0; },
(e) { return e is IndexOutOfRangeException; });
Expect.throws(() { view.add(0); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { view.addAll([0]); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { view.addLast(0); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { view.clear(); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { view.insertRange(0, view.length, 0); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { view.length = 0; },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { view.removeLast(); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { view.removeRange(0, view.length - 1); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
for (int i = 0; i < view.length; ++i) {
view[i] = 1 + i;
}
@@ -1738,21 +1738,21 @@
Expect.throws(() { view[10] = 0; },
(e) { return e is IndexOutOfRangeException; });
Expect.throws(() { view.add(0); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { view.addAll([0]); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { view.addLast(0); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { view.clear(); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { view.insertRange(0, view.length, 0); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { view.length = 0; },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { view.removeLast(); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { view.removeRange(0, view.length - 1); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
for (int i = 0; i < view.length; ++i) {
view[i] = 1 + i;
}
@@ -1937,21 +1937,21 @@
Expect.throws(() { view[view.length] = 0; },
(e) { return e is IndexOutOfRangeException; });
Expect.throws(() { view.add(0); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { view.addAll([0]); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { view.addLast(0); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { view.clear(); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { view.insertRange(0, view.length, 0); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { view.length = 0; },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { view.removeLast(); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { view.removeRange(0, view.length - 1); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
for (int i = 0; i < view.length; ++i) {
view[i] = 1 + i;
}
@@ -2091,21 +2091,21 @@
Expect.throws(() { view[10] = 0.0; },
(e) { return e is IndexOutOfRangeException; });
Expect.throws(() { array.add(0.0); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { array.addAll([0]); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { array.addLast(0.0); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { array.clear(); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { array.insertRange(0, array.length, 0.0); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { array.length = 0; },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { array.removeLast(); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { array.removeRange(0, array.length - 1); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
for (int i = 0; i < view.length; ++i) {
view[i] = 1.0 + i;
}
@@ -2194,21 +2194,21 @@
Expect.throws(() { view[10] = 0.0; },
(e) { return e is IndexOutOfRangeException; });
Expect.throws(() { array.add(0.0); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { array.addAll([0]); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { array.addLast(0.0); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { array.clear(); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { array.insertRange(0, array.length, 0.0); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { array.length = 0; },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { array.removeLast(); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
Expect.throws(() { array.removeRange(0, array.length - 1); },
- (e) { return e is UnsupportedOperationException; });
+ (e) { return e is UnsupportedError; });
for (int i = 0; i < view.length; ++i) {
view[i] = 1.0 + i;
}
diff --git a/runtime/tests/vm/dart/isolate_mirror_local_test.dart b/runtime/tests/vm/dart/isolate_mirror_local_test.dart
index d9c0c9a..185e043 100644
--- a/runtime/tests/vm/dart/isolate_mirror_local_test.dart
+++ b/runtime/tests/vm/dart/isolate_mirror_local_test.dart
@@ -20,7 +20,7 @@
throw "Unexpected test name '$test'";
}
expectedTests.remove(test);
- if (expectedTests.isEmpty()) {
+ if (expectedTests.isEmpty) {
// All tests are done.
exit_port.close();
}
@@ -125,7 +125,7 @@
});
// Check that the members map is complete.
- List keys = lib_mirror.members.getKeys();
+ List keys = lib_mirror.members.keys;
sort(keys);
Expect.equals('['
'FuncType, '
@@ -162,7 +162,7 @@
'$keys');
// Check that the classes map is complete.
- keys = lib_mirror.classes.getKeys();
+ keys = lib_mirror.classes.keys;
sort(keys);
Expect.equals('['
'FuncType, '
@@ -174,7 +174,7 @@
'$keys');
// Check that the functions map is complete.
- keys = lib_mirror.functions.getKeys();
+ keys = lib_mirror.functions.keys;
sort(keys);
Expect.equals('['
'_stringCompare, '
@@ -200,17 +200,17 @@
'$keys');
// Check that the getters map is complete.
- keys = lib_mirror.getters.getKeys();
+ keys = lib_mirror.getters.keys;
sort(keys);
Expect.equals('[myVar]', '$keys');
// Check that the setters map is complete.
- keys = lib_mirror.setters.getKeys();
+ keys = lib_mirror.setters.keys;
sort(keys);
Expect.equals('[myVar=]', '$keys');
// Check that the variables map is complete.
- keys = lib_mirror.variables.getKeys();
+ keys = lib_mirror.variables.keys;
sort(keys);
Expect.equals('['
'exit_port, '
@@ -320,7 +320,7 @@
Expect.isTrue(oom_cls.defaultFactory === null);
Expect.equals('dart:core', oom_cls.owner.simpleName);
Expect.isTrue(oom_cls.isClass);
- Expect.equals('Exception', oom_cls.superinterfaces[0].simpleName);
+ Expect.equals('Error', oom_cls.superinterfaces[0].simpleName);
Expect.equals("ClassMirror on 'OutOfMemoryError'",
oom_cls.toString());
testDone('testLibrariesMap');
diff --git a/runtime/tools/make_version.py b/runtime/tools/make_version.py
index f348a1e..e3d8a70 100644
--- a/runtime/tools/make_version.py
+++ b/runtime/tools/make_version.py
@@ -13,36 +13,45 @@
import time
from optparse import OptionParser
+def debugLog(message):
+ print >> sys.stderr, message
+ sys.stderr.flush()
+
+
def getVersionPart(version_file, part):
command = ['awk', '$1 == "%s" {print $2}' % (part), version_file]
- print "Getting version part: %s Running command %s" % (part, command)
+ debugLog("Getting version part: %s Running command %s" % (part, command))
proc = subprocess.Popen(command,
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT)
result = proc.communicate()[0].split('\n')[0]
- print "Got result: %s" % result
+ debugLog("Got result: %s" % result)
return result
def getRevision():
- print "Getting revision"
+ debugLog("Getting revision")
is_svn = True
if os.path.exists('.svn'):
- print "Using svn to get revision"
+ debugLog("Using svn to get revision")
cmd = ['svn', 'info']
else:
- print "Using git svn to get revision"
- cmd = ['git', 'svn', 'info']
- try:
- print "Running command to get revision: %s" % cmd
- proc = subprocess.Popen(cmd,
- stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
- revision = proc.communicate()[0].split('\n')[4].split(' ')[1]
- print "Got revision: %s" % revision
- return revision
- except Exception:
- # If we can't get any revision info (due to lack of tooling) return ''.
- return ''
-
+ git_proc = subprocess.Popen(
+ ['git', 'branch', '-r'],
+ stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
+ if 'git-svn' in git_proc.communicate()[0]:
+ debugLog("Using git svn to get revision")
+ cmd = ['git', 'svn', 'info']
+ else:
+ # Cannot get revision because we are not in svn or
+ # git svn checkout.
+ debugLog("Could not get revision: not an svn or git-svn checkout?")
+ return ''
+ debugLog("Running command to get revision: %s" % cmd)
+ proc = subprocess.Popen(cmd,
+ stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
+ revision = proc.communicate()[0].split('\n')[4].split(' ')[1]
+ debugLog("Got revision: %s" % revision)
+ return revision
def makeVersionString(version_file):
id = platform.system()
@@ -60,18 +69,18 @@
patch,
revision,
user)
- print "Returning version string: %s " % version_string
+ debugLog("Returning version string: %s " % version_string)
return version_string
def makeFile(output_file, input_file, version_file):
- print "Making version file"
+ debugLog("Making version file")
version_cc_text = open(input_file).read()
version_string = makeVersionString(version_file)
- print "Writing version to version_cc file: %s" % version_string
+ debugLog("Writing version to version_cc file: %s" % version_string)
version_cc_text = version_cc_text.replace("{{VERSION_STR}}",
version_string)
version_time = time.ctime(time.time())
- print "Writing time to version_cc file: %s" % version_time
+ debugLog("Writing time to version_cc file: %s" % version_time)
version_cc_text = version_cc_text.replace("{{BUILD_TIME}}",
version_time)
open(output_file, 'w').write(version_cc_text)
@@ -117,4 +126,7 @@
return -1
if __name__ == '__main__':
- sys.exit(main(sys.argv))
+ debugLog('starting make_version.py')
+ exit_code = main(sys.argv)
+ debugLog('exiting make_version.py (exit code: %s)' % exit_code)
+ sys.exit(exit_code)
diff --git a/runtime/vm/bootstrap_natives.h b/runtime/vm/bootstrap_natives.h
index 35b87ec..7b424b0 100644
--- a/runtime/vm/bootstrap_natives.h
+++ b/runtime/vm/bootstrap_natives.h
@@ -35,6 +35,9 @@
V(Smi_bitNegate, 1) \
V(Mint_bitNegate, 1) \
V(Bigint_bitNegate, 1) \
+ V(Double_getIsNegative, 1) \
+ V(Double_getIsInfinite, 1) \
+ V(Double_getIsNaN, 1) \
V(Double_add, 2) \
V(Double_sub, 2) \
V(Double_mul, 2) \
@@ -46,9 +49,6 @@
V(Double_equalToInteger, 2) \
V(Double_greaterThan, 2) \
V(Double_equal, 2) \
- V(Double_isNegative, 1) \
- V(Double_isInfinite, 1) \
- V(Double_isNaN, 1) \
V(Double_doubleFromInteger, 2) \
V(Double_round, 1) \
V(Double_floor, 1) \
@@ -72,7 +72,7 @@
V(ObjectArray_copyFromObjectArray, 5) \
V(StringBase_createFromCodePoints, 1) \
V(StringBase_substringUnchecked, 3) \
- V(String_hashCode, 1) \
+ V(String_getHashCode, 1) \
V(String_getLength, 1) \
V(String_charAt, 2) \
V(String_charCodeAt, 2) \
diff --git a/runtime/vm/class_finalizer.cc b/runtime/vm/class_finalizer.cc
index c94fe02c..ce87b6b 100644
--- a/runtime/vm/class_finalizer.cc
+++ b/runtime/vm/class_finalizer.cc
@@ -465,8 +465,10 @@
identifier.IsNull() ? target_class_name : target_name;
// Replace the type with a malformed type and compile a throw when called.
type = NewFinalizedMalformedType(
+ Error::Handle(), // No previous error.
cls,
factory.token_pos(),
+ kTryResolve, // No compile-time error.
"class '%s' has no constructor or factory named '%s'",
target_class_name.ToCString(),
user_visible_target_name.ToCString());
@@ -478,8 +480,10 @@
// Verify that the target is compatible with the redirecting factory.
if (!target.HasCompatibleParametersWith(factory)) {
type = NewFinalizedMalformedType(
+ Error::Handle(), // No previous error.
cls,
factory.token_pos(),
+ kTryResolve, // No compile-time error.
"constructor '%s' has incompatible parameters with "
"redirecting factory '%s'",
String::Handle(target.name()).ToCString(),
@@ -537,6 +541,9 @@
const AbstractType& type,
FinalizationKind finalization) {
if (type.IsResolved() || type.IsFinalized()) {
+ if ((finalization == kCanonicalizeWellFormed) && type.IsMalformed()) {
+ ReportError(Error::Handle(type.malformed_error()));
+ }
return;
}
if (FLAG_trace_type_finalization) {
@@ -676,9 +683,16 @@
const AbstractType& type,
FinalizationKind finalization) {
if (type.IsFinalized()) {
- // Ensure type is canonical if canonicalization is requested.
+ // Ensure type is canonical if canonicalization is requested, unless type is
+ // malformed.
if (finalization >= kCanonicalize) {
- return type.Canonicalize();
+ if (type.IsMalformed()) {
+ if (finalization == kCanonicalizeWellFormed) {
+ ReportError(Error::Handle(type.malformed_error()));
+ }
+ } else {
+ return type.Canonicalize();
+ }
}
return type.raw();
}
@@ -975,7 +989,7 @@
while (!super_class.IsNull()) {
// Check if a function of same name exists in any super class.
function = super_class.LookupFunction(name);
- if (!function.IsNull()) {
+ if (!function.IsNull() && !function.is_static()) {
return super_class.raw();
}
super_class = super_class.SuperClass();
@@ -1535,9 +1549,12 @@
}
-RawType* ClassFinalizer::NewFinalizedMalformedType(const Class& cls,
- intptr_t type_pos,
- const char* format, ...) {
+RawType* ClassFinalizer::NewFinalizedMalformedType(
+ const Error& prev_error,
+ const Class& cls,
+ intptr_t type_pos,
+ FinalizationKind finalization,
+ const char* format, ...) {
va_list args;
va_start(args, format);
const String& no_name = String::Handle(Symbols::Empty());
@@ -1545,7 +1562,7 @@
UnresolvedClass::New(LibraryPrefix::Handle(), no_name, type_pos));
const Type& type = Type::Handle(
Type::New(unresolved_class, TypeArguments::Handle(), type_pos));
- ReportMalformedType(Error::Handle(), cls, type, kTryResolve, format, args);
+ ReportMalformedType(prev_error, cls, type, finalization, format, args);
va_end(args);
ASSERT(type.IsMalformed());
return type.raw();
diff --git a/runtime/vm/class_finalizer.h b/runtime/vm/class_finalizer.h
index 8ed32db..18ce755 100644
--- a/runtime/vm/class_finalizer.h
+++ b/runtime/vm/class_finalizer.h
@@ -49,12 +49,15 @@
FinalizationKind finalization);
// Allocate, finalize, and return a new malformed type as if it was declared
- // in class cls at the given token position. Build the error message from the
- // format string and its arguments.
- static RawType* NewFinalizedMalformedType(const Class& cls,
+ // in class cls at the given token position.
+ // If not null, prepend prev_error to the error message built from the format
+ // string and its arguments.
+ static RawType* NewFinalizedMalformedType(const Error& prev_error,
+ const Class& cls,
intptr_t type_pos,
+ FinalizationKind finalization,
const char* format, ...)
- PRINTF_ATTRIBUTE(3, 4);
+ PRINTF_ATTRIBUTE(5, 6);
// Depending on the given type, finalization mode, and execution mode, mark
// the given type as malformed or report a compile time error.
diff --git a/runtime/vm/code_descriptors_test.cc b/runtime/vm/code_descriptors_test.cc
index c92d032..ae4aa0c 100644
--- a/runtime/vm/code_descriptors_test.cc
+++ b/runtime/vm/code_descriptors_test.cc
@@ -36,17 +36,17 @@
cls.SetFunctions(functions);
Library& lib = Library::Handle(Library::CoreLibrary());
lib.AddClass(cls);
- ParsedFunction parsed_function(function);
+ ParsedFunction* parsed_function = new ParsedFunction(function);
LiteralNode* l = new LiteralNode(kPos, Smi::ZoneHandle(Smi::New(1)));
test->node_sequence()->Add(new ReturnNode(kPos, l));
l = new LiteralNode(kPos, Smi::ZoneHandle(Smi::New(2)));
test->node_sequence()->Add(new ReturnNode(kPos, l));
l = new LiteralNode(kPos, Smi::ZoneHandle(Smi::New(3)));
test->node_sequence()->Add(new ReturnNode(kPos, l));
- parsed_function.SetNodeSequence(test->node_sequence());
- parsed_function.set_instantiator(NULL);
- parsed_function.set_default_parameter_values(Array::Handle());
- parsed_function.AllocateVariables();
+ parsed_function->SetNodeSequence(test->node_sequence());
+ parsed_function->set_instantiator(NULL);
+ parsed_function->set_default_parameter_values(Array::Handle());
+ parsed_function->AllocateVariables();
bool retval;
Isolate* isolate = Isolate::Current();
EXPECT(isolate != NULL);
@@ -133,7 +133,7 @@
stackmap_table_builder->AddEntry(3, stack_bitmap, 0);
const Error& error =
- Error::Handle(Compiler::CompileParsedFunction(parsed_function));
+ Error::Handle(Compiler::CompileParsedFunction(*parsed_function));
EXPECT(error.IsNull());
const Code& code = Code::Handle(function.CurrentCode());
diff --git a/runtime/vm/code_generator.cc b/runtime/vm/code_generator.cc
index 61fc71b..90a9813 100644
--- a/runtime/vm/code_generator.cc
+++ b/runtime/vm/code_generator.cc
@@ -748,6 +748,46 @@
}
+static bool UpdateResolvedStaticCall(const Code& code,
+ intptr_t offset,
+ const Code& target_code) {
+ // PC offsets are mapped to the corresponding code object in the
+ // resolved_static_calls array. The array grows as static calls are being
+ // resolved.
+ const int kOffset = 0;
+ const int kCode = 1;
+ const int kEntrySize = 2;
+
+ GrowableObjectArray& resolved_static_calls =
+ GrowableObjectArray::Handle(code.resolved_static_calls());
+ intptr_t index = -1;
+ if (resolved_static_calls.IsNull()) {
+ resolved_static_calls = GrowableObjectArray::New(2, Heap::kOld);
+ code.set_resolved_static_calls(resolved_static_calls);
+ } else {
+ // Search for the offset in the resolved static calls.
+ const intptr_t len = resolved_static_calls.Length();
+ Object& off = Object::Handle();
+ for (intptr_t i = 0; i < len; i += kEntrySize) {
+ off = resolved_static_calls.At(i + kOffset);
+ if (Smi::Cast(off).Value() == offset) {
+ index = i;
+ break;
+ }
+ }
+ }
+ if (index == -1) {
+ // The static call with this offset is not yet present: Add it.
+ resolved_static_calls.Add(Smi::Handle(Smi::New(offset)));
+ resolved_static_calls.Add(target_code);
+ } else {
+ // Overwrite the currently recorded target.
+ resolved_static_calls.SetAt(index + kCode, target_code);
+ }
+ return index != -1;
+}
+
+
DEFINE_RUNTIME_ENTRY(PatchStaticCall, 0) {
// This function is called after successful resolving and compilation of
// the target method.
@@ -759,10 +799,16 @@
Function& target_function = Function::Handle();
CodePatcher::GetStaticCallAt(caller_frame->pc(), &target_function, &target);
ASSERT(target_function.HasCode());
- uword new_target = Code::Handle(target_function.CurrentCode()).EntryPoint();
+ const Code& target_code = Code::Handle(target_function.CurrentCode());
+ uword new_target = target_code.EntryPoint();
// Verify that we are not patching repeatedly.
ASSERT(target != new_target);
CodePatcher::PatchStaticCallAt(caller_frame->pc(), new_target);
+ const Code& code = Code::Handle(caller_frame->LookupDartCode());
+ bool found = UpdateResolvedStaticCall(code,
+ caller_frame->pc() - code.EntryPoint(),
+ target_code);
+ ASSERT(!found);
if (FLAG_trace_patching) {
OS::Print("PatchStaticCall: patching from %#"Px" to '%s' %#"Px"\n",
caller_frame->pc(),
@@ -1433,10 +1479,16 @@
Function& target_function = Function::Handle();
CodePatcher::GetStaticCallAt(frame->pc(), &target_function, &target);
ASSERT(target_function.HasCode());
- const uword new_entry_point =
- Code::Handle(function.CurrentCode()).EntryPoint();
+ ASSERT(target_function.raw() == function.raw());
+ const Code& target_code = Code::Handle(function.CurrentCode());
+ const uword new_entry_point = target_code.EntryPoint();
ASSERT(target != new_entry_point); // Why patch otherwise.
CodePatcher::PatchStaticCallAt(frame->pc(), new_entry_point);
+ const Code& code = Code::Handle(frame->LookupDartCode());
+ bool found = UpdateResolvedStaticCall(code,
+ frame->pc() - code.EntryPoint(),
+ target_code);
+ ASSERT(found);
if (FLAG_trace_patching) {
OS::Print("FixCallersTarget: patching from %#"Px" to '%s' %#"Px"\n",
frame->pc(),
diff --git a/runtime/vm/code_generator.h b/runtime/vm/code_generator.h
index 97b4672..34b60f0 100644
--- a/runtime/vm/code_generator.h
+++ b/runtime/vm/code_generator.h
@@ -61,7 +61,6 @@
V(PolymorphicInstanceCallTestFail) \
V(InstanceCallNoICData) \
V(IntegerToDouble) \
- V(DoubleToDouble) \
V(BinarySmiOp) \
V(BinaryMintOp) \
V(ShiftMintOp) \
diff --git a/runtime/vm/compiler.cc b/runtime/vm/compiler.cc
index 8f0b6e3..13cbfc0 100644
--- a/runtime/vm/compiler.cc
+++ b/runtime/vm/compiler.cc
@@ -99,15 +99,11 @@
static void InstallUnoptimizedCode(const Function& function) {
// Disable optimized code.
ASSERT(function.HasOptimizedCode());
- // Patch entry of optimized code.
- CodePatcher::PatchEntry(Code::Handle(function.CurrentCode()));
if (FLAG_trace_compiler) {
OS::Print("--> patching entry %#"Px"\n",
Code::Handle(function.CurrentCode()).EntryPoint());
}
- // Use previously compiled code.
- function.SetCode(Code::Handle(function.unoptimized_code()));
- CodePatcher::RestoreEntry(Code::Handle(function.unoptimized_code()));
+ function.SwitchToUnoptimizedCode();
if (FLAG_trace_compiler) {
OS::Print("--> restoring entry at %#"Px"\n",
Code::Handle(function.unoptimized_code()).EntryPoint());
@@ -156,90 +152,106 @@
// Build the flow graph.
FlowGraphBuilder builder(parsed_function);
flow_graph = builder.BuildGraph(FlowGraphBuilder::kNotInlining);
+ }
- // Transform to SSA.
- if (optimized) flow_graph->ComputeSSA(0); // Start at virtual register 0.
+ if (optimized) {
+ TimerScope timer(FLAG_compiler_stats,
+ &CompilerStats::ssa_timer,
+ isolate);
+ // Transform to SSA (virtual register 0 and no inlining arguments).
+ flow_graph->ComputeSSA(0, NULL);
+ }
- if (FLAG_print_flow_graph) {
- OS::Print("Before Optimizations\n");
- FlowGraphPrinter printer(*flow_graph);
- printer.PrintBlocks();
+ if (FLAG_print_flow_graph) {
+ OS::Print("Before Optimizations\n");
+ FlowGraphPrinter printer(*flow_graph);
+ printer.PrintBlocks();
+ }
+
+ if (optimized) {
+ TimerScope timer(FLAG_compiler_stats,
+ &CompilerStats::graphoptimizer_timer,
+ isolate);
+
+ flow_graph->ComputeUseLists();
+
+ FlowGraphOptimizer optimizer(flow_graph);
+ optimizer.ApplyICData();
+
+ // Compute the use lists.
+ flow_graph->ComputeUseLists();
+
+ // Inlining (mutates the flow graph)
+ if (FLAG_use_inlining) {
+ TimerScope timer(FLAG_compiler_stats,
+ &CompilerStats::graphinliner_timer);
+ FlowGraphInliner inliner(flow_graph);
+ inliner.Inline();
+ // Use lists are maintained and validated by the inliner.
}
- if (optimized) {
+ // Propagate types and eliminate more type tests.
+ if (FLAG_propagate_types) {
+ FlowGraphTypePropagator propagator(flow_graph);
+ propagator.PropagateTypes();
+ }
+
+ // Verify that the use lists are still valid.
+ DEBUG_ASSERT(flow_graph->ValidateUseLists());
+
+ // Propagate sminess from CheckSmi to phis.
+ optimizer.PropagateSminess();
+
+ // Use propagated class-ids to optimize further.
+ optimizer.ApplyClassIds();
+
+ // Do optimizations that depend on the propagated type information.
+ // TODO(srdjan): Should this be called CanonicalizeComputations?
+ optimizer.OptimizeComputations();
+
+ // Unbox doubles.
+ flow_graph->ComputeUseLists();
+ optimizer.SelectRepresentations();
+
+ if (FLAG_constant_propagation ||
+ FLAG_common_subexpression_elimination) {
flow_graph->ComputeUseLists();
-
- FlowGraphOptimizer optimizer(flow_graph);
- optimizer.ApplyICData();
-
- // Compute the use lists.
- flow_graph->ComputeUseLists();
-
- // Inlining (mutates the flow graph)
- if (FLAG_use_inlining) {
- FlowGraphInliner inliner(flow_graph);
- inliner.Inline();
- // Use lists are maintained and validated by the inliner.
- }
-
- // Propagate types and eliminate more type tests.
- if (FLAG_propagate_types) {
- FlowGraphTypePropagator propagator(flow_graph);
- propagator.PropagateTypes();
- }
-
- // Verify that the use lists are still valid.
- DEBUG_ASSERT(flow_graph->ValidateUseLists());
-
- // Propagate sminess from CheckSmi to phis.
- optimizer.PropagateSminess();
-
- // Use propagated class-ids to optimize further.
- optimizer.ApplyClassIds();
-
- // Do optimizations that depend on the propagated type information.
- // TODO(srdjan): Should this be called CanonicalizeComputations?
+ }
+ if (FLAG_constant_propagation) {
+ ConstantPropagator::Optimize(flow_graph);
+ // A canonicalization pass to remove e.g. smi checks on smi constants.
optimizer.OptimizeComputations();
-
- // Unbox doubles.
- flow_graph->ComputeUseLists();
- optimizer.SelectRepresentations();
-
- if (FLAG_constant_propagation ||
- FLAG_common_subexpression_elimination) {
- flow_graph->ComputeUseLists();
- }
- if (FLAG_constant_propagation) {
- ConstantPropagator::Optimize(flow_graph);
- // A canonicalization pass to remove e.g. smi checks on smi constants.
- optimizer.OptimizeComputations();
- }
- if (FLAG_common_subexpression_elimination) {
+ }
+ if (FLAG_common_subexpression_elimination) {
+ if (DominatorBasedCSE::Optimize(flow_graph)) {
+ // Do another round of CSE to take secondary effects into account:
+ // e.g. when eliminating dependent loads (a.x[0] + a.x[0])
+ // TODO(fschneider): Change to a one-pass optimization pass.
DominatorBasedCSE::Optimize(flow_graph);
}
- if (FLAG_loop_invariant_code_motion &&
- (parsed_function.function().deoptimization_counter() <
- (FLAG_deoptimization_counter_threshold - 1))) {
- LICM::Optimize(flow_graph);
- }
+ }
+ if (FLAG_loop_invariant_code_motion &&
+ (parsed_function.function().deoptimization_counter() <
+ (FLAG_deoptimization_counter_threshold - 1))) {
+ LICM::Optimize(flow_graph);
+ }
- if (FLAG_range_analysis) {
- // We have to perform range analysis after LICM because it
- // optimistically moves CheckSmi through phis into loop preheaders
- // making some phis smi.
- flow_graph->ComputeUseLists();
- optimizer.InferSmiRanges();
- }
+ if (FLAG_range_analysis) {
+ // We have to perform range analysis after LICM because it
+ // optimistically moves CheckSmi through phis into loop preheaders
+ // making some phis smi.
+ flow_graph->ComputeUseLists();
+ optimizer.InferSmiRanges();
+ }
- // Perform register allocation on the SSA graph.
- FlowGraphAllocator allocator(*flow_graph);
- allocator.AllocateRegisters();
+ // Perform register allocation on the SSA graph.
+ FlowGraphAllocator allocator(*flow_graph);
+ allocator.AllocateRegisters();
- if (FLAG_print_flow_graph) {
- OS::Print("After Optimizations:\n");
- FlowGraphPrinter printer(*flow_graph);
- printer.PrintBlocks();
- }
+ if (FLAG_print_flow_graph) {
+ OS::Print("After Optimizations:\n");
+ FlowGraphPrinter printer(*flow_graph);
+ printer.PrintBlocks();
}
}
@@ -422,18 +434,20 @@
}
if (setjmp(*jump.Set()) == 0) {
TIMERSCOPE(time_compilation);
- ParsedFunction parsed_function(function);
+ Timer per_compile_timer(FLAG_trace_compiler, "Compilation time");
+ per_compile_timer.Start();
+ ParsedFunction* parsed_function = new ParsedFunction(function);
if (FLAG_trace_compiler) {
OS::Print("Compiling %sfunction: '%s' @ token %"Pd"\n",
(optimized ? "optimized " : ""),
function.ToFullyQualifiedCString(),
function.token_pos());
}
- Parser::ParseFunction(&parsed_function);
- parsed_function.AllocateVariables();
+ Parser::ParseFunction(parsed_function);
+ parsed_function->AllocateVariables();
const bool success =
- CompileParsedFunctionHelper(parsed_function, optimized);
+ CompileParsedFunctionHelper(*parsed_function, optimized);
if (optimized && !success) {
// Optimizer bailed out. Disable optimizations and to never try again.
if (FLAG_trace_compiler) {
@@ -446,11 +460,13 @@
}
ASSERT(success);
+ per_compile_timer.Stop();
if (FLAG_trace_compiler) {
- OS::Print("--> '%s' entry: %#"Px"\n",
+ OS::Print("--> '%s' entry: %#"Px" time: %"Pd64" us\n",
function.ToFullyQualifiedCString(),
- Code::Handle(function.CurrentCode()).EntryPoint());
+ Code::Handle(function.CurrentCode()).EntryPoint(),
+ per_compile_timer.TotalElapsedTime());
}
if (Isolate::Current()->debugger()->IsActive()) {
@@ -565,16 +581,16 @@
// We compile the function here, even though InvokeStatic() below
// would compile func automatically. We are checking fewer invariants
// here.
- ParsedFunction parsed_function(func);
- parsed_function.SetNodeSequence(fragment);
- parsed_function.set_default_parameter_values(Array::Handle());
- parsed_function.set_expression_temp_var(
+ ParsedFunction* parsed_function = new ParsedFunction(func);
+ parsed_function->SetNodeSequence(fragment);
+ parsed_function->set_default_parameter_values(Array::Handle());
+ parsed_function->set_expression_temp_var(
ParsedFunction::CreateExpressionTempVar(0));
- fragment->scope()->AddVariable(parsed_function.expression_temp_var());
- parsed_function.AllocateVariables();
+ fragment->scope()->AddVariable(parsed_function->expression_temp_var());
+ parsed_function->AllocateVariables();
// Non-optimized code generator.
- CompileParsedFunctionHelper(parsed_function, false);
+ CompileParsedFunctionHelper(*parsed_function, false);
GrowableArray<const Object*> arguments; // no arguments.
const Array& kNoArgumentNames = Array::Handle();
diff --git a/runtime/vm/compiler_stats.cc b/runtime/vm/compiler_stats.cc
index 78a1ad7..e9081f99 100644
--- a/runtime/vm/compiler_stats.cc
+++ b/runtime/vm/compiler_stats.cc
@@ -30,6 +30,22 @@
// Cumulative timer of flow graph builder, included in codegen_timer.
Timer CompilerStats::graphbuilder_timer(true, "flow graph builder timer");
+// Cumulative timer of flow graph SSA construction, included in codegen_timer.
+Timer CompilerStats::ssa_timer(true, "flow graph SSA timer");
+
+// Cumulative timer of flow graph inliner, included in codegen_timer.
+Timer CompilerStats::graphinliner_timer(true, "flow graph inliner timer");
+// Cumulative sub-timers of flow graph inliner.
+Timer CompilerStats::graphinliner_parse_timer(true, "inliner parsing timer");
+Timer CompilerStats::graphinliner_build_timer(true, "inliner building timer");
+Timer CompilerStats::graphinliner_ssa_timer(true, "inliner SSA timer");
+Timer CompilerStats::graphinliner_opt_timer(true, "inliner optimization timer");
+Timer CompilerStats::graphinliner_subst_timer(true,
+ "inliner substitution timer");
+
+// Cumulative timer of flow graph optimizer, included in codegen_timer.
+Timer CompilerStats::graphoptimizer_timer(true, "flow graph optimizer timer");
+
// Cumulative timer of flow graph compiler, included in codegen_timer.
Timer CompilerStats::graphcompiler_timer(true, "flow graph compiler timer");
@@ -74,12 +90,39 @@
OS::Print("Code gen. time: %"Pd64" msecs\n",
codegen_usecs / 1000);
int64_t graphbuilder_usecs = graphbuilder_timer.TotalElapsedTime();
- OS::Print(" Graph builder time: %"Pd64" msecs\n", graphbuilder_usecs / 1000);
+ OS::Print(" Graph builder: %"Pd64" msecs\n", graphbuilder_usecs / 1000);
+ int64_t ssa_usecs = ssa_timer.TotalElapsedTime();
+ OS::Print(" Graph SSA: %"Pd64" msecs\n", ssa_usecs / 1000);
+
+ int64_t graphinliner_usecs = graphinliner_timer.TotalElapsedTime();
+ OS::Print(" Graph inliner: %"Pd64" msecs\n", graphinliner_usecs / 1000);
+ int64_t graphinliner_parse_usecs =
+ graphinliner_parse_timer.TotalElapsedTime();
+ OS::Print(" Parsing: %"Pd64" msecs\n",
+ graphinliner_parse_usecs / 1000);
+ int64_t graphinliner_build_usecs =
+ graphinliner_build_timer.TotalElapsedTime();
+ OS::Print(" Building: %"Pd64" msecs\n",
+ graphinliner_build_usecs / 1000);
+ int64_t graphinliner_ssa_usecs = graphinliner_ssa_timer.TotalElapsedTime();
+ OS::Print(" SSA: %"Pd64" msecs\n",
+ graphinliner_ssa_usecs / 1000);
+ int64_t graphinliner_opt_usecs = graphinliner_opt_timer.TotalElapsedTime();
+ OS::Print(" Optimization: %"Pd64" msecs\n",
+ graphinliner_opt_usecs / 1000);
+ int64_t graphinliner_subst_usecs =
+ graphinliner_subst_timer.TotalElapsedTime();
+ OS::Print(" Substitution: %"Pd64" msecs\n",
+ graphinliner_subst_usecs / 1000);
+
+ int64_t graphoptimizer_usecs = graphoptimizer_timer.TotalElapsedTime();
+ OS::Print(" Graph optimizer: %"Pd64" msecs\n",
+ (graphoptimizer_usecs - graphinliner_usecs) / 1000);
int64_t graphcompiler_usecs = graphcompiler_timer.TotalElapsedTime();
- OS::Print(" Graph comp. time: %"Pd64" msecs\n",
+ OS::Print(" Graph compiler: %"Pd64" msecs\n",
graphcompiler_usecs / 1000);
int64_t codefinalizer_usecs = codefinalizer_timer.TotalElapsedTime();
- OS::Print(" Code final. time: %"Pd64" msecs\n",
+ 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));
diff --git a/runtime/vm/compiler_stats.h b/runtime/vm/compiler_stats.h
index 60b3555..363a537 100644
--- a/runtime/vm/compiler_stats.h
+++ b/runtime/vm/compiler_stats.h
@@ -32,8 +32,19 @@
static Timer scanner_timer; // Cumulative runtime of scanner.
static Timer codegen_timer; // Cumulative runtime of code generator.
static Timer graphbuilder_timer; // Included in codegen_timer.
- static Timer graphcompiler_timer; // Included in codegen_timer.
- static Timer codefinalizer_timer; // Included in codegen_timer.
+ static Timer ssa_timer; // Included in codegen_timer.
+ static Timer graphinliner_timer; // Included in codegen_timer.
+ static Timer graphinliner_parse_timer; // Included in codegen_timer.
+ static Timer graphinliner_build_timer; // Included in codegen_timer.
+ static Timer graphinliner_ssa_timer; // Included in codegen_timer.
+ static Timer graphinliner_opt_timer; // Included in codegen_timer.
+ static Timer graphinliner_find_timer; // Included in codegen_timer.
+ static Timer graphinliner_plug_timer; // Included in codegen_timer.
+ static Timer graphinliner_subst_timer; // Included in codegen_timer.
+
+ static Timer graphoptimizer_timer; // Included in codegen_timer.
+ static Timer graphcompiler_timer; // Included in codegen_timer.
+ static Timer codefinalizer_timer; // Included in codegen_timer.
static void Print();
};
diff --git a/runtime/vm/dart_api_impl.cc b/runtime/vm/dart_api_impl.cc
index f8c18ed..f1acf1c 100644
--- a/runtime/vm/dart_api_impl.cc
+++ b/runtime/vm/dart_api_impl.cc
@@ -4422,6 +4422,34 @@
}
+DART_EXPORT Dart_Handle Dart_LoadPatch(Dart_Handle library,
+ Dart_Handle url,
+ Dart_Handle patch_source) {
+ TIMERSCOPE(time_script_loading);
+ Isolate* isolate = Isolate::Current();
+ DARTSCOPE(isolate);
+ if (FLAG_use_cha) {
+ RemoveOptimizedCode();
+ }
+ const Library& lib = Api::UnwrapLibraryHandle(isolate, library);
+ if (lib.IsNull()) {
+ RETURN_TYPE_ERROR(isolate, library, Library);
+ }
+ const String& url_str = Api::UnwrapStringHandle(isolate, url);
+ if (url_str.IsNull()) {
+ RETURN_TYPE_ERROR(isolate, url, String);
+ }
+ const String& source_str = Api::UnwrapStringHandle(isolate, patch_source);
+ if (source_str.IsNull()) {
+ RETURN_TYPE_ERROR(isolate, patch_source, String);
+ }
+ Dart_Handle result;
+ CompileSource(isolate, lib, url_str, source_str,
+ RawScript::kPatchTag, &result);
+ return result;
+}
+
+
DART_EXPORT Dart_Handle Dart_SetNativeResolver(
Dart_Handle library,
Dart_NativeEntryResolver resolver) {
diff --git a/runtime/vm/dart_api_impl_test.cc b/runtime/vm/dart_api_impl_test.cc
index 870f998..fe8c400 100644
--- a/runtime/vm/dart_api_impl_test.cc
+++ b/runtime/vm/dart_api_impl_test.cc
@@ -5673,6 +5673,42 @@
}
+TEST_CASE(LoadPatch) {
+ const char* kLibrary1Chars =
+ "#library('library1_name');";
+ const char* kSourceChars =
+ "external int foo();";
+ const char* kPatchChars =
+ "patch int foo() => 42;";
+
+ // Load up a library.
+ Dart_Handle url = Dart_NewString("library1_url");
+ Dart_Handle source = Dart_NewString(kLibrary1Chars);
+ Dart_Handle lib = Dart_LoadLibrary(url, source);
+ EXPECT_VALID(lib);
+ EXPECT(Dart_IsLibrary(lib));
+
+ url = Dart_NewString("source_url");
+ source = Dart_NewString(kSourceChars);
+
+ Dart_Handle result = Dart_LoadSource(lib, url, source);
+ EXPECT_VALID(result);
+
+ url = Dart_NewString("patch_url");
+ source = Dart_NewString(kPatchChars);
+
+ result = Dart_LoadPatch(lib, url, source);
+ EXPECT_VALID(result);
+
+ result = Dart_Invoke(lib, Dart_NewString("foo"), 0, NULL);
+ EXPECT_VALID(result);
+ EXPECT(Dart_IsInteger(result));
+ int64_t value = 0;
+ EXPECT_VALID(Dart_IntegerToInt64(result, &value));
+ EXPECT_EQ(42, value);
+}
+
+
static void PatchNativeFunction(Dart_NativeArguments args) {
Dart_EnterScope();
Dart_SetReturnValue(args, Dart_Null());
@@ -5783,7 +5819,7 @@
EXPECT_VALID(result);
result = Dart_Invoke(test_script, Dart_NewString("e1"), 0, NULL);
- EXPECT_ERROR(result, "External implementation missing");
+ EXPECT_ERROR(result, "No such method: 'unpatched'");
int64_t value = 0;
result = Dart_Invoke(test_script, Dart_NewString("m1"), 0, NULL);
diff --git a/runtime/vm/dart_entry.cc b/runtime/vm/dart_entry.cc
index 476dd8c..3287777 100644
--- a/runtime/vm/dart_entry.cc
+++ b/runtime/vm/dart_entry.cc
@@ -167,7 +167,7 @@
const Library& lib,
const String& class_name,
const GrowableArray<const Object*>& arguments) {
- const Class& cls = Class::Handle(lib.LookupClass(class_name));
+ const Class& cls = Class::Handle(lib.LookupClassAllowPrivate(class_name));
ASSERT(!cls.IsNull());
// For now, we only support a non-parameterized or raw type.
const Instance& exception_object = Instance::Handle(Instance::New(cls));
@@ -218,8 +218,7 @@
RawObject* DartLibraryCalls::Equals(const Instance& left,
const Instance& right) {
- const String& function_name =
- String::Handle(Symbols::New("=="));
+ const String& function_name = String::Handle(Symbols::EqualOperator());
GrowableArray<const Object*> arguments;
arguments.Add(&right);
const int kNumArguments = 2;
diff --git a/runtime/vm/exceptions.cc b/runtime/vm/exceptions.cc
index ba723df..9ec5686 100644
--- a/runtime/vm/exceptions.cc
+++ b/runtime/vm/exceptions.cc
@@ -410,11 +410,11 @@
break;
case kClosureArgumentMismatch:
library = Library::CoreLibrary();
- class_name = Symbols::New("ClosureArgumentMismatchException");
+ class_name = Symbols::New("_ClosureArgumentMismatchException");
break;
case kObjectNotClosure:
library = Library::CoreLibrary();
- class_name = Symbols::New("ObjectNotClosureException");
+ class_name = Symbols::New("_ObjectNotClosureException");
break;
case kFormat:
library = Library::CoreLibrary();
@@ -422,16 +422,12 @@
break;
case kStackOverflow:
library = Library::CoreLibrary();
- class_name = Symbols::New("StackOverflowException");
+ class_name = Symbols::New("StackOverflowError");
break;
case kOutOfMemory:
library = Library::CoreLibrary();
class_name = Symbols::New("OutOfMemoryError");
break;
- case kWrongArgumentCount:
- library = Library::CoreLibrary();
- class_name = Symbols::New("WrongArgumentCountException");
- break;
case kInternalError:
library = Library::CoreLibrary();
class_name = Symbols::New("InternalError");
diff --git a/runtime/vm/exceptions.h b/runtime/vm/exceptions.h
index e34161f..edb3c2c 100644
--- a/runtime/vm/exceptions.h
+++ b/runtime/vm/exceptions.h
@@ -56,7 +56,6 @@
kFormat,
kStackOverflow,
kOutOfMemory,
- kWrongArgumentCount,
kInternalError,
kNullPointer,
kIllegalJSRegExp,
diff --git a/runtime/vm/flow_graph.cc b/runtime/vm/flow_graph.cc
index 3a4cfe8..95961cb 100644
--- a/runtime/vm/flow_graph.cc
+++ b/runtime/vm/flow_graph.cc
@@ -30,11 +30,37 @@
preorder_(),
postorder_(),
reverse_postorder_(),
- exits_(NULL) {
+ exits_(NULL),
+ invalid_dominator_tree_(true) {
DiscoverBlocks();
}
+ConstantInstr* FlowGraph::AddConstantToInitialDefinitions(
+ const Object& object) {
+ // Check if the constant is already in the pool.
+ for (intptr_t i = 0; i < graph_entry_->initial_definitions()->length(); ++i) {
+ ConstantInstr* constant =
+ (*graph_entry_->initial_definitions())[i]->AsConstant();
+ if ((constant != NULL) && (constant->value().raw() == object.raw())) {
+ return constant;
+ }
+ }
+ // Otherwise, allocate and add it to the pool.
+ ConstantInstr* constant = new ConstantInstr(object);
+ constant->set_ssa_temp_index(alloc_ssa_temp_index());
+ AddToInitialDefinitions(constant);
+ return constant;
+}
+
+void FlowGraph::AddToInitialDefinitions(Definition* defn) {
+ // TODO(zerny): Set previous to the graph entry so it is accessible by
+ // GetBlock. Remove this once there is a direct pointer to the block.
+ defn->set_previous(graph_entry_);
+ graph_entry_->initial_definitions()->Add(defn);
+}
+
+
void FlowGraph::DiscoverBlocks() {
// Initialize state.
preorder_.Clear();
@@ -281,7 +307,9 @@
}
-void FlowGraph::ComputeSSA(intptr_t next_virtual_register_number) {
+void FlowGraph::ComputeSSA(intptr_t next_virtual_register_number,
+ GrowableArray<Definition*>* inlining_parameters) {
+ ASSERT((next_virtual_register_number == 0) || (inlining_parameters != NULL));
current_ssa_temp_index_ = next_virtual_register_number;
GrowableArray<BitVector*> dominance_frontier;
ComputeDominators(&dominance_frontier);
@@ -289,7 +317,7 @@
GrowableArray<PhiInstr*> live_phis;
// Rename uses to reference inserted phis where appropriate.
// Collect phis that reach a non-environment use.
- Rename(&live_phis);
+ Rename(&live_phis, inlining_parameters);
// Propagate alive mark transitively from alive phis.
MarkLivePhis(&live_phis);
}
@@ -304,6 +332,7 @@
// (preorder block numbers of) blocks in the dominance frontier.
void FlowGraph::ComputeDominators(
GrowableArray<BitVector*>* dominance_frontier) {
+ invalid_dominator_tree_ = false;
// Use the SEMI-NCA algorithm to compute dominators. This is a two-pass
// version of the Lengauer-Tarjan algorithm (LT is normally three passes)
// that eliminates a pass by using nearest-common ancestor (NCA) to
@@ -469,7 +498,8 @@
}
-void FlowGraph::Rename(GrowableArray<PhiInstr*>* live_phis) {
+void FlowGraph::Rename(GrowableArray<PhiInstr*>* live_phis,
+ GrowableArray<Definition*>* inlining_parameters) {
// TODO(fschneider): Support catch-entry.
if (graph_entry_->SuccessorCount() > 1) {
Bailout("Catch-entry support in SSA.");
@@ -479,17 +509,27 @@
GrowableArray<Definition*> env(variable_count());
// Add global constants to the initial definitions.
- ConstantInstr* constant_null = new ConstantInstr(Object::ZoneHandle());
- constant_null->set_ssa_temp_index(alloc_ssa_temp_index());
- graph_entry_->initial_definitions()->Add(constant_null);
+ ConstantInstr* constant_null =
+ AddConstantToInitialDefinitions(Object::ZoneHandle());
- // Add incoming parameters to the initial definitions and the renaming
- // environment.
- for (intptr_t i = 0; i < parameter_count(); ++i) {
- ParameterInstr* param = new ParameterInstr(i, graph_entry_);
- param->set_ssa_temp_index(alloc_ssa_temp_index()); // New SSA temp.
- graph_entry_->initial_definitions()->Add(param);
- env.Add(param);
+ // Add parameters to the initial definitions and renaming environment.
+ if (inlining_parameters != NULL) {
+ // Use known parameters.
+ ASSERT(parameter_count() == inlining_parameters->length());
+ for (intptr_t i = 0; i < parameter_count(); ++i) {
+ Definition* defn = (*inlining_parameters)[i];
+ defn->set_ssa_temp_index(alloc_ssa_temp_index()); // New SSA temp.
+ AddToInitialDefinitions(defn);
+ env.Add(defn);
+ }
+ } else {
+ // Create new parameters.
+ for (intptr_t i = 0; i < parameter_count(); ++i) {
+ ParameterInstr* param = new ParameterInstr(i, graph_entry_);
+ param->set_ssa_temp_index(alloc_ssa_temp_index()); // New SSA temp.
+ AddToInitialDefinitions(param);
+ env.Add(param);
+ }
}
// Initialize all locals with #null in the renaming environment.
@@ -523,15 +563,14 @@
// 2. Process normal instructions.
for (ForwardInstructionIterator it(block_entry); !it.Done(); it.Advance()) {
Instruction* current = it.Current();
- // Attach current environment to the instruction. First, each instruction
- // gets a full copy of the environment. Later we optimize this by
- // eliminating unnecessary environments.
- // TODO(zerny): Avoid creating unnecessary environments. Note that some
- // optimizations need deoptimization info for non-deoptable instructions,
- // eg, LICM on GOTOs.
- current->set_env(Environment::From(*env,
- num_non_copied_params_,
- parsed_function_.function()));
+ // Attach current environment to the instructions that can deoptimize and
+ // at goto instructions. Optimizations like LICM expect an environment at
+ // gotos.
+ if (current->CanDeoptimize() || current->IsGoto()) {
+ current->set_env(Environment::From(*env,
+ num_non_copied_params_,
+ parsed_function_.function()));
+ }
if (current->CanDeoptimize()) {
current->env()->set_deopt_id(current->deopt_id());
}
@@ -725,37 +764,69 @@
}
-// Helper to reorder phis after splitting a block. The last instruction(s) of
-// the split block will now have a larger block id than any previously known
-// blocks. If the last instruction jumps to a join, we must reorder phi inputs
-// according to the block order, ie, we move this predecessor to the end.
-static void ReorderPhis(BlockEntryInstr* block) {
- GotoInstr* jump = block->last_instruction()->AsGoto();
- if (jump == NULL) return;
- JoinEntryInstr* join = jump->successor();
- intptr_t pred_index = join->IndexOfPredecessor(block);
- intptr_t pred_count = join->PredecessorCount();
- ASSERT(pred_index >= 0);
- ASSERT(pred_index < pred_count);
- // If the predecessor index is the last index there is nothing to update.
- if ((join->phis() == NULL) || (pred_index + 1 == pred_count)) return;
- // Otherwise, move the predecessor use to the end in each phi.
- for (intptr_t i = 0; i < join->phis()->length(); ++i) {
- PhiInstr* phi = (*join->phis())[i];
- if (phi == NULL) continue;
- ASSERT(pred_count == phi->InputCount());
- // Save the predecessor use.
- Value* pred_use = phi->InputAt(pred_index);
- // Move each of the following uses back by one.
- ASSERT(pred_index < pred_count - 1); // Will move at least one index.
- for (intptr_t i = pred_index; i < pred_count - 1; ++i) {
- Value* use = phi->InputAt(i + 1);
- phi->SetInputAt(i, use);
- use->set_use_index(i);
+// Helper to replace a predecessor block. For each successor of 'old_block', the
+// predecessors will be reordered to preserve block-order sorting of the
+// predecessors as well as the phis if the successor is a join.
+void FlowGraph::ReplacePredecessor(BlockEntryInstr* old_block,
+ BlockEntryInstr* new_block) {
+ // Set the last instruction of the new block to that of the old block.
+ Instruction* last = old_block->last_instruction();
+ new_block->set_last_instruction(last);
+ // For each successor, update the predecessors.
+ for (intptr_t sidx = 0; sidx < last->SuccessorCount(); ++sidx) {
+ // If the successor is a target, update its predecessor.
+ TargetEntryInstr* target = last->SuccessorAt(sidx)->AsTargetEntry();
+ if (target != NULL) {
+ target->predecessor_ = new_block;
+ continue;
}
- // Write the predecessor use at the end.
- phi->SetInputAt(pred_count - 1, pred_use);
- pred_use->set_use_index(pred_count - 1);
+ // If the successor is a join, update each predecessor and the phis.
+ JoinEntryInstr* join = last->SuccessorAt(sidx)->AsJoinEntry();
+ ASSERT(join != NULL);
+ // Find the old predecessor index.
+ intptr_t old_index = join->IndexOfPredecessor(old_block);
+ intptr_t pred_count = join->PredecessorCount();
+ ASSERT(old_index >= 0);
+ ASSERT(old_index < pred_count);
+ // Find the new predecessor index while reordering the predecessors.
+ intptr_t new_id = new_block->block_id();
+ intptr_t new_index = old_index;
+ if (old_block->block_id() < new_id) {
+ // Search upwards, bubbling down intermediate predecessors.
+ for (; new_index < pred_count - 1; ++new_index) {
+ if (join->predecessors_[new_index + 1]->block_id() > new_id) break;
+ join->predecessors_[new_index] = join->predecessors_[new_index + 1];
+ }
+ } else {
+ // Search downwards, bubbling up intermediate predecessors.
+ for (; new_index > 0; --new_index) {
+ if (join->predecessors_[new_index - 1]->block_id() < new_id) break;
+ join->predecessors_[new_index] = join->predecessors_[new_index - 1];
+ }
+ }
+ join->predecessors_[new_index] = new_block;
+ // If the new and old predecessor index match there is nothing to update.
+ if ((join->phis() == NULL) || (old_index == new_index)) return;
+ // Otherwise, reorder the predecessor uses in each phi.
+ for (intptr_t i = 0; i < join->phis()->length(); ++i) {
+ PhiInstr* phi = (*join->phis())[i];
+ if (phi == NULL) continue;
+ ASSERT(pred_count == phi->InputCount());
+ // Save the predecessor use.
+ Value* pred_use = phi->InputAt(old_index);
+ // Move uses between old and new.
+ intptr_t step = (old_index < new_index) ? 1 : -1;
+ for (intptr_t use_idx = old_index;
+ use_idx != new_index;
+ use_idx += step) {
+ Value* use = phi->InputAt(use_idx + step);
+ phi->SetInputAt(use_idx, use);
+ use->set_use_index(use_idx);
+ }
+ // Write the predecessor use.
+ phi->SetInputAt(new_index, pred_use);
+ pred_use->set_use_index(new_index);
+ }
}
}
@@ -820,15 +891,35 @@
call->ReplaceUsesWith(exit->value()->definition());
call->previous()->LinkTo(callee_entry->next());
exit->previous()->LinkTo(call->next());
- // In case of control flow, locally update the dominator tree.
+ // In case of control flow, locally update the predecessors, phis and
+ // dominator tree.
+ // TODO(zerny): should we leave the dominator tree since we recompute it
+ // after a full inlining pass?
if (callee_graph->preorder().length() > 2) {
- // The caller block is split and the new block id is that of the exit
- // block. If the caller block had outgoing edges, reorder the phis so they
- // are still ordered by block id.
- ReorderPhis(caller_entry);
- // The callee return is now the immediate dominator of blocks whose
- // immediate dominator was the caller entry.
BlockEntryInstr* exit_block = exit->GetBlock();
+ // Pictorially, the graph structure is:
+ //
+ // Bc : caller_entry Bi : callee_entry
+ // before_call inlined_head
+ // call ... other blocks ...
+ // after_call Be : exit_block
+ // inlined_foot
+ // And becomes:
+ //
+ // Bc : caller_entry
+ // before_call
+ // inlined_head
+ // ... other blocks ...
+ // Be : exit_block
+ // inlined_foot
+ // after_call
+ //
+ // For 'after_call', caller entry (Bc) is replaced by callee exit (Be).
+ ReplacePredecessor(caller_entry, exit_block);
+ // For 'inlined_head', callee entry (Bi) is replaced by caller entry (Bc).
+ ReplacePredecessor(callee_entry, caller_entry);
+ // The callee exit is now the immediate dominator of blocks whose
+ // immediate dominator was the caller entry.
ASSERT(exit_block->dominated_blocks().is_empty());
for (intptr_t i = 0; i < caller_entry->dominated_blocks().length(); ++i) {
BlockEntryInstr* block = caller_entry->dominated_blocks()[i];
@@ -843,8 +934,6 @@
block->set_dominator(caller_entry);
caller_entry->AddDominatedBlock(block);
}
- // Recompute the block orders.
- DiscoverBlocks();
}
} else {
// Sort the list of exits by block id.
@@ -884,16 +973,27 @@
// Replace uses of the call with the phi.
call->ReplaceUsesWith(phi);
}
- // Remove the call from the graph.
+ // Remove the call from the graph.
call->previous()->LinkTo(callee_entry->next());
join->LinkTo(call->next());
- // The caller block is split and the new block id is that of the join
- // block. If the caller block had outgoing edges, reorder the phis so they
- // are still ordered by block id.
- ReorderPhis(caller_entry);
- // Adjust pre/post orders and update the dominator tree.
- DiscoverBlocks();
+ // Replace the blocks after splitting (see comment in the len=1 case above).
+ ReplacePredecessor(caller_entry, join);
+ ReplacePredecessor(callee_entry, caller_entry);
+ // Update the last instruction pointers on each exit (ie, to the new goto).
+ for (intptr_t i = 0; i < exits.length(); ++i) {
+ exits[i]->set_last_instruction(
+ exits[i]->last_instruction()->previous()->next());
+ }
+ // Mark that the dominator tree is invalid.
// TODO(zerny): Compute the dominator frontier locally.
+ invalid_dominator_tree_ = true;
+ }
+}
+
+
+void FlowGraph::RepairGraphAfterInlining() {
+ DiscoverBlocks();
+ if (invalid_dominator_tree_) {
GrowableArray<BitVector*> dominance_frontier;
ComputeDominators(&dominance_frontier);
}
diff --git a/runtime/vm/flow_graph.h b/runtime/vm/flow_graph.h
index 8b28b71..fd3709c 100644
--- a/runtime/vm/flow_graph.h
+++ b/runtime/vm/flow_graph.h
@@ -11,6 +11,7 @@
namespace dart {
class BlockEntryInstr;
+class ConstantInstr;
class Definition;
class FlowGraphBuilder;
class GraphEntryInstr;
@@ -104,8 +105,12 @@
intptr_t InstructionCount() const;
+ ConstantInstr* AddConstantToInitialDefinitions(const Object& object);
+ void AddToInitialDefinitions(Definition* defn);
+
// Operations on the flow graph.
- void ComputeSSA(intptr_t next_virtual_register_number);
+ void ComputeSSA(intptr_t next_virtual_register_number,
+ GrowableArray<Definition*>* inlining_parameters);
void ComputeUseLists();
// Finds natural loops in the flow graph and attaches a list of loop
@@ -113,6 +118,7 @@
void ComputeLoops(GrowableArray<BlockEntryInstr*>* loop_headers);
void InlineCall(Definition* call, FlowGraph* callee_graph);
+ void RepairGraphAfterInlining();
// TODO(zerny): Once the SSA is feature complete this should be removed.
void Bailout(const char* reason) const;
@@ -137,7 +143,8 @@
GrowableArray<intptr_t>* parent,
GrowableArray<intptr_t>* label);
- void Rename(GrowableArray<PhiInstr*>* live_phis);
+ void Rename(GrowableArray<PhiInstr*>* live_phis,
+ GrowableArray<Definition*>* inlining_parameters);
void RenameRecursive(
BlockEntryInstr* block_entry,
GrowableArray<Definition*>* env,
@@ -150,6 +157,9 @@
void MarkLivePhis(GrowableArray<PhiInstr*>* live_phis);
+ void ReplacePredecessor(BlockEntryInstr* old_block,
+ BlockEntryInstr* new_block);
+
// DiscoverBlocks computes parent_ and assigned_vars_ which are then used
// if/when computing SSA.
GrowableArray<intptr_t> parent_;
@@ -168,6 +178,7 @@
GrowableArray<BlockEntryInstr*> postorder_;
GrowableArray<BlockEntryInstr*> reverse_postorder_;
ZoneGrowableArray<ReturnInstr*>* exits_;
+ bool invalid_dominator_tree_;
};
} // namespace dart
diff --git a/runtime/vm/flow_graph_allocator.cc b/runtime/vm/flow_graph_allocator.cc
index ed0d262..ccc22c2 100644
--- a/runtime/vm/flow_graph_allocator.cc
+++ b/runtime/vm/flow_graph_allocator.cc
@@ -1353,8 +1353,9 @@
ASSERT(split_pos < End());
- // Corner case. We need to start over to find previous interval.
- if (interval->start() == split_pos) interval = first_use_interval_;
+ // Corner case. Split position can be inside the a lifetime hole or at its
+ // end. We need to start over to find the previous interval.
+ if (split_pos <= interval->start()) interval = first_use_interval_;
UseInterval* last_before_split = NULL;
while (interval->end() <= split_pos) {
diff --git a/runtime/vm/flow_graph_builder.cc b/runtime/vm/flow_graph_builder.cc
index 12e685e..856ee44 100644
--- a/runtime/vm/flow_graph_builder.cc
+++ b/runtime/vm/flow_graph_builder.cc
@@ -366,7 +366,6 @@
void TestGraphVisitor::MergeBranchWithComparison(ComparisonInstr* comp) {
- ASSERT(!FLAG_enable_type_checks);
ControlInstruction* branch;
if (Token::IsStrictEqualityOperator(comp->kind())) {
branch = new BranchInstr(new StrictCompareInstr(comp->kind(),
@@ -380,7 +379,7 @@
comp->left(),
comp->right()));
} else {
- branch = new BranchInstr(comp);
+ branch = new BranchInstr(comp, FLAG_enable_type_checks);
}
AddInstruction(branch);
CloseFragment();
@@ -403,12 +402,12 @@
void TestGraphVisitor::ReturnDefinition(Definition* definition) {
+ ComparisonInstr* comp = definition->AsComparison();
+ if (comp != NULL) {
+ MergeBranchWithComparison(comp);
+ return;
+ }
if (!FLAG_enable_type_checks) {
- ComparisonInstr* comp = definition->AsComparison();
- if (comp != NULL) {
- MergeBranchWithComparison(comp);
- return;
- }
BooleanNegateInstr* neg = definition->AsBooleanNegate();
if (neg != NULL) {
MergeBranchWithNegate(neg);
@@ -1406,6 +1405,7 @@
void EffectGraphVisitor::VisitArgumentDefinitionTestNode(
ArgumentDefinitionTestNode* node) {
+ InlineBailout("EffectGraphVisitor::VisitArgumentDefinitionTestNode");
Definition* load = BuildLoadLocal(node->saved_arguments_descriptor());
Value* arguments_descriptor = Bind(load);
ArgumentDefinitionTestInstr* arg_def_test =
@@ -1531,6 +1531,29 @@
// <Expression> ::= StaticCall { function: Function
// arguments: <ArgumentList> }
void EffectGraphVisitor::VisitStaticCallNode(StaticCallNode* node) {
+ if (node->function().name() == Symbols::Identical()) {
+ // Attempt to replace identical with strcit equal early on.
+ // TODO(hausner): Evaluate if this can happen at AST building time.
+ const Class& cls = Class::Handle(node->function().Owner());
+ if (cls.IsTopLevel()) {
+ const Library& core_lib = Library::Handle(Library::CoreLibrary());
+ if (cls.library() == core_lib.raw()) {
+ ASSERT(node->arguments()->length() == 2);
+ ValueGraphVisitor for_left_value(owner(), temp_index());
+ node->arguments()->NodeAt(0)->Visit(&for_left_value);
+ Append(for_left_value);
+ ValueGraphVisitor for_right_value(owner(), temp_index());
+ node->arguments()->NodeAt(1)->Visit(&for_right_value);
+ Append(for_right_value);
+ StrictCompareInstr* comp = new StrictCompareInstr(
+ Token::kEQ_STRICT,
+ for_left_value.value(),
+ for_right_value.value());
+ ReturnDefinition(comp);
+ return;
+ }
+ }
+ }
ZoneGrowableArray<PushArgumentInstr*>* arguments =
new ZoneGrowableArray<PushArgumentInstr*>(node->arguments()->length());
BuildPushArguments(*node->arguments(), arguments);
diff --git a/runtime/vm/flow_graph_compiler.cc b/runtime/vm/flow_graph_compiler.cc
index 87fee91..b26df19 100644
--- a/runtime/vm/flow_graph_compiler.cc
+++ b/runtime/vm/flow_graph_compiler.cc
@@ -393,7 +393,7 @@
DeoptTable::SetEntry(array, i, offset, info, reason);
}
code.set_deopt_info_array(array);
- const Array& object_array = Array::Handle(Array::MakeArray(object_table_));
+ const Array& object_array = Array::Handle(Array::MakeArray(object_table()));
code.set_object_table(object_array);
}
@@ -907,6 +907,12 @@
ASSERT(Utils::IsInt(31, disp));
return FieldAddress(array, disp);
}
+ case kFloat32ArrayCid: {
+ const intptr_t disp =
+ offset * kFloatSize + Float32Array::data_offset();
+ ASSERT(Utils::IsInt(31, disp));
+ return FieldAddress(array, disp);
+ }
case kFloat64ArrayCid: {
const intptr_t disp =
offset * kDoubleSize + Float64Array::data_offset();
diff --git a/runtime/vm/flow_graph_compiler_ia32.cc b/runtime/vm/flow_graph_compiler_ia32.cc
index 410f0d9..babcc50 100644
--- a/runtime/vm/flow_graph_compiler_ia32.cc
+++ b/runtime/vm/flow_graph_compiler_ia32.cc
@@ -35,6 +35,8 @@
case kArrayCid:
case kImmutableArrayCid:
return FieldAddress(array, index, TIMES_2, sizeof(RawArray));
+ case kFloat32ArrayCid:
+ return FieldAddress(array, index, TIMES_2, Float32Array::data_offset());
case kFloat64ArrayCid:
return FieldAddress(array, index, TIMES_4, Float64Array::data_offset());
default:
@@ -1105,22 +1107,13 @@
LocationSummary* locs) {
__ LoadObject(ECX, function);
__ LoadObject(EDX, arguments_descriptor);
- if (function.HasCode()) {
- const Code& code = Code::Handle(function.CurrentCode());
- ExternalLabel target_label(function.ToFullyQualifiedCString(),
- code.EntryPoint());
- GenerateDartCall(deopt_id,
- token_pos,
- &target_label,
- PcDescriptors::kFuncCall,
- locs);
- } else {
- GenerateDartCall(deopt_id,
- token_pos,
- &StubCode::CallStaticFunctionLabel(),
- PcDescriptors::kFuncCall,
- locs);
- }
+ // Do not use the code from the function, but let the code be patched so that
+ // we can record the outgoing edges to other code.
+ GenerateDartCall(deopt_id,
+ token_pos,
+ &StubCode::CallStaticFunctionLabel(),
+ PcDescriptors::kFuncCall,
+ locs);
__ Drop(argument_count);
}
@@ -1135,6 +1128,34 @@
}
+// Implement equality spec: if any of the arguments is null do identity check.
+// Fallthrough calls super equality.
+void FlowGraphCompiler::EmitSuperEqualityCallPrologue(Register result,
+ Label* skip_call) {
+ const Immediate raw_null =
+ Immediate(reinterpret_cast<intptr_t>(Object::null()));
+ Label check_identity, fall_through;
+ __ cmpl(Address(ESP, 0 * kWordSize), raw_null);
+ __ j(EQUAL, &check_identity, Assembler::kNearJump);
+ __ cmpl(Address(ESP, 1 * kWordSize), raw_null);
+ __ j(NOT_EQUAL, &fall_through, Assembler::kNearJump);
+
+ __ Bind(&check_identity);
+ __ popl(result);
+ __ cmpl(result, Address(ESP, 0 * kWordSize));
+ Label is_false;
+ __ j(NOT_EQUAL, &is_false, Assembler::kNearJump);
+ __ LoadObject(result, bool_true());
+ __ Drop(1);
+ __ jmp(skip_call);
+ __ Bind(&is_false);
+ __ LoadObject(result, bool_false());
+ __ Drop(1);
+ __ jmp(skip_call);
+ __ Bind(&fall_through);
+}
+
+
void FlowGraphCompiler::LoadDoubleOrSmiToXmm(XmmRegister result,
Register reg,
Register temp,
diff --git a/runtime/vm/flow_graph_compiler_ia32.h b/runtime/vm/flow_graph_compiler_ia32.h
index cb215df..c15ac7b 100644
--- a/runtime/vm/flow_graph_compiler_ia32.h
+++ b/runtime/vm/flow_graph_compiler_ia32.h
@@ -157,6 +157,9 @@
Register result);
void EmitEqualityRegConstCompare(Register reg, const Object& obj);
+ // Implement equality: if any of the arguments is null do identity check.
+ // Fallthrough calls super equality.
+ void EmitSuperEqualityCallPrologue(Register result, Label* skip_call);
intptr_t StackSize() const;
diff --git a/runtime/vm/flow_graph_compiler_x64.cc b/runtime/vm/flow_graph_compiler_x64.cc
index 6c76290..62b01d6 100644
--- a/runtime/vm/flow_graph_compiler_x64.cc
+++ b/runtime/vm/flow_graph_compiler_x64.cc
@@ -35,6 +35,8 @@
case kArrayCid:
case kImmutableArrayCid:
return FieldAddress(array, index, TIMES_4, sizeof(RawArray));
+ case kFloat32ArrayCid:
+ return FieldAddress(array, index, TIMES_2, Float32Array::data_offset());
case kFloat64ArrayCid:
return FieldAddress(array, index, TIMES_4, Float64Array::data_offset());
default:
@@ -1110,22 +1112,13 @@
LocationSummary* locs) {
__ LoadObject(RBX, function);
__ LoadObject(R10, arguments_descriptor);
- if (function.HasCode()) {
- const Code& code = Code::Handle(function.CurrentCode());
- ExternalLabel target_label(function.ToFullyQualifiedCString(),
- code.EntryPoint());
- GenerateDartCall(deopt_id,
- token_pos,
- &target_label,
- PcDescriptors::kFuncCall,
- locs);
- } else {
- GenerateDartCall(deopt_id,
- token_pos,
- &StubCode::CallStaticFunctionLabel(),
- PcDescriptors::kFuncCall,
- locs);
- }
+ // Do not use the code from the function, but let the code be patched so that
+ // we can record the outgoing edges to other code.
+ GenerateDartCall(deopt_id,
+ token_pos,
+ &StubCode::CallStaticFunctionLabel(),
+ PcDescriptors::kFuncCall,
+ locs);
__ Drop(argument_count);
}
@@ -1140,6 +1133,34 @@
}
+// Implement equality spec: if any of the arguments is null do identity check.
+// Fallthrough calls super equality.
+void FlowGraphCompiler::EmitSuperEqualityCallPrologue(Register result,
+ Label* skip_call) {
+ const Immediate raw_null =
+ Immediate(reinterpret_cast<intptr_t>(Object::null()));
+ Label check_identity, fall_through;
+ __ cmpq(Address(RSP, 0 * kWordSize), raw_null);
+ __ j(EQUAL, &check_identity, Assembler::kNearJump);
+ __ cmpq(Address(RSP, 1 * kWordSize), raw_null);
+ __ j(NOT_EQUAL, &fall_through, Assembler::kNearJump);
+
+ __ Bind(&check_identity);
+ __ popq(result);
+ __ cmpq(result, Address(RSP, 0 * kWordSize));
+ Label is_false;
+ __ j(NOT_EQUAL, &is_false, Assembler::kNearJump);
+ __ LoadObject(result, bool_true());
+ __ Drop(1);
+ __ jmp(skip_call);
+ __ Bind(&is_false);
+ __ LoadObject(result, bool_false());
+ __ Drop(1);
+ __ jmp(skip_call);
+ __ Bind(&fall_through);
+}
+
+
void FlowGraphCompiler::LoadDoubleOrSmiToXmm(XmmRegister result,
Register reg,
Register temp,
diff --git a/runtime/vm/flow_graph_compiler_x64.h b/runtime/vm/flow_graph_compiler_x64.h
index d278732..54ca7e4 100644
--- a/runtime/vm/flow_graph_compiler_x64.h
+++ b/runtime/vm/flow_graph_compiler_x64.h
@@ -157,6 +157,9 @@
Register result);
void EmitEqualityRegConstCompare(Register reg, const Object& obj);
+ // Implement equality: if any of the arguments is null do identity check.
+ // Fallthrough calls super equality.
+ void EmitSuperEqualityCallPrologue(Register result, Label* skip_call);
intptr_t StackSize() const;
diff --git a/runtime/vm/flow_graph_inliner.cc b/runtime/vm/flow_graph_inliner.cc
index a3d1a82..6aee0ad 100644
--- a/runtime/vm/flow_graph_inliner.cc
+++ b/runtime/vm/flow_graph_inliner.cc
@@ -14,20 +14,22 @@
#include "vm/longjump.h"
#include "vm/object.h"
#include "vm/object_store.h"
+#include "vm/timer.h"
namespace dart {
DEFINE_FLAG(bool, trace_inlining, false, "Trace inlining");
DEFINE_FLAG(charp, inlining_filter, NULL, "Inline only in named function");
-DEFINE_FLAG(int, inlining_size_threshold, 250,
- "Inline only functions with up to threshold instructions (default 250)");
-DEFINE_FLAG(int, inlining_depth_threshold, 1,
- "Inline recursively up to threshold depth (default 1)");
-DEFINE_FLAG(bool, inline_control_flow, true,
- "Inline functions with control flow.");
+DEFINE_FLAG(int, inlining_size_threshold, 50,
+ "Inline only functions with up to threshold instructions (default 50)");
+// TODO(srdjan): set to 3 once crash in apidoc.dart is resolved.
+DEFINE_FLAG(int, inlining_depth_threshold, 3,
+ "Inline recursively up to threshold depth (default 3)");
DECLARE_FLAG(bool, print_flow_graph);
DECLARE_FLAG(int, deoptimization_counter_threshold);
DECLARE_FLAG(bool, verify_compiler);
+DECLARE_FLAG(bool, compiler_stats);
+DECLARE_FLAG(bool, reject_named_argument_as_positional);
#define TRACE_INLINING(statement) \
do { \
@@ -46,6 +48,86 @@
}
+// TODO(zerny): Remove the ChildrenVisitor and SourceLabelResetter once we have
+// moved the label/join map for control flow out of the AST and into the flow
+// graph builder.
+
+// Default visitor to traverse child nodes.
+class ChildrenVisitor : public AstNodeVisitor {
+ public:
+ ChildrenVisitor() { }
+#define DEFINE_VISIT(type, name) \
+ virtual void Visit##type(type* node) { node->VisitChildren(this); }
+ NODE_LIST(DEFINE_VISIT);
+#undef DEFINE_VISIT
+};
+
+
+// Visitor to clear each AST node containing source labels.
+class SourceLabelResetter : public ChildrenVisitor {
+ public:
+ SourceLabelResetter() { }
+ virtual void VisitSequenceNode(SequenceNode* node) {
+ Reset(node, node->label());
+ }
+ virtual void VisitCaseNode(CaseNode* node) {
+ Reset(node, node->label());
+ }
+ virtual void VisitSwitchNode(SwitchNode* node) {
+ Reset(node, node->label());
+ }
+ virtual void VisitWhileNode(WhileNode* node) {
+ Reset(node, node->label());
+ }
+ virtual void VisitDoWhileNode(DoWhileNode* node) {
+ Reset(node, node->label());
+ }
+ virtual void VisitForNode(ForNode* node) {
+ Reset(node, node->label());
+ }
+ virtual void VisitJumpNode(JumpNode* node) {
+ Reset(node, node->label());
+ }
+ void Reset(AstNode* node, SourceLabel* lbl) {
+ node->VisitChildren(this);
+ if (lbl == NULL) return;
+ lbl->join_for_break_ = NULL;
+ lbl->join_for_continue_ = NULL;
+ }
+};
+
+
+// Helper to create a parameter stub from an actual argument.
+static Definition* CreateParameterStub(intptr_t i,
+ Value* argument,
+ FlowGraph* graph) {
+ ConstantInstr* constant = argument->definition()->AsConstant();
+ if (constant != NULL) {
+ return new ConstantInstr(constant->value());
+ } else {
+ return new ParameterInstr(i, graph->graph_entry());
+ }
+}
+
+
+// Helper to get the default value of a formal parameter.
+static ConstantInstr* GetDefaultValue(intptr_t i,
+ const ParsedFunction& parsed_function) {
+ return new ConstantInstr(Object::ZoneHandle(
+ parsed_function.default_parameter_values().At(i)));
+}
+
+
+// Pair of an argument name and its value.
+struct NamedArgument : ValueObject {
+ public:
+ String* name;
+ Value* value;
+ NamedArgument(String* name, Value* value)
+ : name(name), value(value) { }
+};
+
+
// A collection of call sites to consider for inlining.
class CallSites : public FlowGraphVisitor {
public:
@@ -100,7 +182,7 @@
}
void VisitStaticCall(StaticCallInstr* call) {
- if (call->function().is_inlinable()) static_calls_.Add(call);
+ if (call->function().IsInlineable()) static_calls_.Add(call);
}
private:
@@ -122,7 +204,8 @@
inlined_size_(0),
inlining_depth_(1),
collected_call_sites_(NULL),
- inlining_call_sites_(NULL) { }
+ inlining_call_sites_(NULL),
+ function_cache_() { }
void InlineCalls() {
// If inlining depth is less then one abort.
@@ -162,6 +245,7 @@
private:
bool TryInlining(const Function& function,
+ const Array& argument_names,
GrowableArray<Value*>* arguments,
Definition* call) {
TRACE_INLINING(OS::Print(" => %s (deopt count %d)\n",
@@ -169,20 +253,11 @@
function.deoptimization_counter()));
// Abort if the inlinable bit on the function is low.
- if (!function.is_inlinable()) {
+ if (!function.IsInlineable()) {
TRACE_INLINING(OS::Print(" Bailout: not inlinable\n"));
return false;
}
- // Abort if the callee has optional parameters.
- if (function.HasOptionalParameters()) {
- TRACE_INLINING(OS::Print(" Bailout: optional parameters\n"));
- return false;
- }
-
- // Assuming no optional parameters the actual/formal count should match.
- ASSERT(arguments->length() == function.num_fixed_parameters());
-
// Abort if this function has deoptimized too much.
if (function.deoptimization_counter() >=
FLAG_deoptimization_counter_threshold) {
@@ -205,6 +280,16 @@
return false;
}
+ // Abort if we are running legacy support for optional parameters.
+ if (!FLAG_reject_named_argument_as_positional &&
+ function.HasOptionalPositionalParameters() &&
+ (!argument_names.IsNull() && (argument_names.Length() > 0))) {
+ function.set_is_inlinable(false);
+ TRACE_INLINING(OS::Print(
+ " Bailout: named optional positional parameter\n"));
+ return false;
+ }
+
Isolate* isolate = Isolate::Current();
// Save and clear IC data.
const Array& prev_ic_data = Array::Handle(isolate->ic_data_array());
@@ -218,9 +303,14 @@
isolate->set_long_jump_base(&jump);
if (setjmp(*jump.Set()) == 0) {
// Parse the callee function.
- ParsedFunction parsed_function(function);
- Parser::ParseFunction(&parsed_function);
- parsed_function.AllocateVariables();
+ bool in_cache;
+ ParsedFunction* parsed_function;
+ {
+ TimerScope timer(FLAG_compiler_stats,
+ &CompilerStats::graphinliner_parse_timer,
+ isolate);
+ parsed_function = GetParsedFunction(function, &in_cache);
+ }
// Load IC data for the callee.
if (function.HasCode()) {
@@ -230,33 +320,74 @@
}
// Build the callee graph.
- FlowGraphBuilder builder(parsed_function);
+ FlowGraphBuilder builder(*parsed_function);
builder.SetInitialBlockId(caller_graph_->max_block_id());
- FlowGraph* callee_graph =
- builder.BuildGraph(FlowGraphBuilder::kValueContext);
-
- // Abort if the callee graph contains control flow.
- if (!FLAG_inline_control_flow &&
- (callee_graph->preorder().length() != 2)) {
- function.set_is_inlinable(false);
- isolate->set_long_jump_base(base);
- isolate->set_ic_data_array(prev_ic_data.raw());
- TRACE_INLINING(OS::Print(" Bailout: control flow\n"));
- return false;
+ FlowGraph* callee_graph;
+ {
+ TimerScope timer(FLAG_compiler_stats,
+ &CompilerStats::graphinliner_build_timer,
+ isolate);
+ callee_graph = builder.BuildGraph(FlowGraphBuilder::kValueContext);
}
- // Compute SSA on the callee graph, catching bailouts.
- callee_graph->ComputeSSA(next_ssa_temp_index_);
- callee_graph->ComputeUseLists();
+ // The parameter stubs are a copy of the actual arguments providing
+ // concrete information about the values, for example constant values,
+ // without linking between the caller and callee graphs.
+ // TODO(zerny): Put more information in the stubs, eg, type information.
+ GrowableArray<Definition*> param_stubs(function.NumParameters());
- // TODO(zerny): Do more optimization passes on the callee graph.
- FlowGraphOptimizer optimizer(callee_graph);
- optimizer.ApplyICData();
- callee_graph->ComputeUseLists();
+ // Create a parameter stub for each fixed positional parameter.
+ for (intptr_t i = 0; i < function.num_fixed_parameters(); ++i) {
+ param_stubs.Add(CreateParameterStub(i, (*arguments)[i], callee_graph));
+ }
+
+ // If the callee has optional parameters, rebuild the argument and stub
+ // arrays so that actual arguments are in one-to-one with the formal
+ // parameters.
+ if (function.HasOptionalParameters()) {
+ TRACE_INLINING(OS::Print(" adjusting for optional parameters\n"));
+ AdjustForOptionalParameters(*parsed_function,
+ argument_names,
+ arguments,
+ ¶m_stubs,
+ callee_graph);
+ // Add a bogus parameter at the end for the (unused) argument descriptor
+ // slot. The parser allocates an extra slot between locals and
+ // parameters to hold the argument descriptor in case it escapes. We
+ // currently bailout if there are argument test expressions or escaping
+ // variables so this parameter and the stack slot are not used.
+ if (parsed_function->GetSavedArgumentsDescriptorVar() != NULL) {
+ param_stubs.Add(new ParameterInstr(
+ function.NumParameters(), callee_graph->graph_entry()));
+ }
+ }
+
+ // After treating optional parameters the actual/formal count must match.
+ ASSERT(arguments->length() == function.NumParameters());
+ ASSERT(param_stubs.length() == callee_graph->parameter_count());
+
+ {
+ TimerScope timer(FLAG_compiler_stats,
+ &CompilerStats::graphinliner_ssa_timer,
+ isolate);
+ // Compute SSA on the callee graph, catching bailouts.
+ callee_graph->ComputeSSA(next_ssa_temp_index_, ¶m_stubs);
+ callee_graph->ComputeUseLists();
+ }
+
+ {
+ TimerScope timer(FLAG_compiler_stats,
+ &CompilerStats::graphinliner_opt_timer,
+ isolate);
+ // TODO(zerny): Do more optimization passes on the callee graph.
+ FlowGraphOptimizer optimizer(callee_graph);
+ optimizer.ApplyICData();
+ callee_graph->ComputeUseLists();
+ }
if (FLAG_trace_inlining && FLAG_print_flow_graph) {
OS::Print("Callee graph for inlining %s\n",
- parsed_function.function().ToFullyQualifiedCString());
+ function.ToFullyQualifiedCString());
FlowGraphPrinter printer(*callee_graph);
printer.PrintBlocks();
}
@@ -278,35 +409,51 @@
collected_call_sites_->FindCallSites(callee_graph);
}
- // Plug result in the caller graph.
- caller_graph_->InlineCall(call, callee_graph);
- next_ssa_temp_index_ = caller_graph_->max_virtual_register_number();
+ {
+ TimerScope timer(FLAG_compiler_stats,
+ &CompilerStats::graphinliner_subst_timer,
+ isolate);
- // Remove push arguments of the call.
- for (intptr_t i = 0; i < call->ArgumentCount(); ++i) {
- PushArgumentInstr* push = call->ArgumentAt(i);
- push->ReplaceUsesWith(push->value()->definition());
- push->RemoveFromGraph();
- }
+ // Plug result in the caller graph.
+ caller_graph_->InlineCall(call, callee_graph);
+ next_ssa_temp_index_ = caller_graph_->max_virtual_register_number();
- // Replace formal parameters with actuals.
- intptr_t arg_index = 0;
- GrowableArray<Definition*>* defns =
- callee_graph->graph_entry()->initial_definitions();
- for (intptr_t i = 0; i < defns->length(); ++i) {
- ParameterInstr* param = (*defns)[i]->AsParameter();
- if (param != NULL) {
- param->ReplaceUsesWith((*arguments)[arg_index++]->definition());
+ // Remove push arguments of the call.
+ for (intptr_t i = 0; i < call->ArgumentCount(); ++i) {
+ PushArgumentInstr* push = call->ArgumentAt(i);
+ push->ReplaceUsesWith(push->value()->definition());
+ push->RemoveFromGraph();
+ }
+
+ // Replace each stub with the actual argument or the caller's constant.
+ // Nulls denote optional parameters for which no actual was given.
+ for (intptr_t i = 0; i < arguments->length(); ++i) {
+ Definition* stub = param_stubs[i];
+ Value* actual = (*arguments)[i];
+ if (actual != NULL) stub->ReplaceUsesWith(actual->definition());
+ }
+
+ // Replace remaining constants with uses by constants in the caller's
+ // initial definitions.
+ GrowableArray<Definition*>* defns =
+ callee_graph->graph_entry()->initial_definitions();
+ for (intptr_t i = 0; i < defns->length(); ++i) {
+ ConstantInstr* constant = (*defns)[i]->AsConstant();
+ if (constant == NULL ||
+ ((constant->input_use_list() == NULL) &&
+ (constant->env_use_list() == NULL))) {
+ continue;
+ }
+ constant->ReplaceUsesWith(
+ caller_graph_->AddConstantToInitialDefinitions(constant->value()));
}
}
- ASSERT(arg_index == arguments->length());
-
- // Replace callee's null constant with caller's null constant.
- callee_graph->graph_entry()->constant_null()->ReplaceUsesWith(
- caller_graph_->graph_entry()->constant_null());
TRACE_INLINING(OS::Print(" Success\n"));
+ // Add the function to the cache.
+ if (!in_cache) function_cache_.Add(parsed_function);
+
// Check that inlining maintains use lists.
DEBUG_ASSERT(!FLAG_verify_compiler || caller_graph_->ValidateUseLists());
@@ -329,6 +476,25 @@
}
}
+ // Parse a function reusing the cache if possible.
+ ParsedFunction* GetParsedFunction(const Function& function, bool* in_cache) {
+ // TODO(zerny): Use a hash map for the cache.
+ for (intptr_t i = 0; i < function_cache_.length(); ++i) {
+ ParsedFunction* parsed_function = function_cache_[i];
+ if (parsed_function->function().raw() == function.raw()) {
+ *in_cache = true;
+ SourceLabelResetter reset;
+ parsed_function->node_sequence()->Visit(&reset);
+ return parsed_function;
+ }
+ }
+ *in_cache = false;
+ ParsedFunction* parsed_function = new ParsedFunction(function);
+ Parser::ParseFunction(parsed_function);
+ parsed_function->AllocateVariables();
+ return parsed_function;
+ }
+
void InlineStaticCalls() {
const GrowableArray<StaticCallInstr*>& calls =
*inlining_call_sites_->static_calls();
@@ -339,7 +505,7 @@
for (int i = 0; i < call->ArgumentCount(); ++i) {
arguments.Add(call->ArgumentAt(i)->value());
}
- TryInlining(call->function(), &arguments, call);
+ TryInlining(call->function(), call->argument_names(), &arguments, call);
}
}
@@ -361,7 +527,10 @@
for (int i = 1; i < call->ArgumentCount(); ++i) {
arguments.Add(call->ArgumentAt(i)->value());
}
- TryInlining(closure->function(), &arguments, call);
+ TryInlining(closure->function(),
+ call->argument_names(),
+ &arguments,
+ call);
}
}
@@ -375,19 +544,114 @@
const ICData& ic_data = instr->ic_data();
const Function& target = Function::ZoneHandle(ic_data.GetTargetAt(0));
if (instr->with_checks()) {
- TRACE_INLINING(OS::Print(" Bailout: %"Pd" checks target '%s'\n",
- ic_data.NumberOfChecks(),
- target.ToCString()));
+ TRACE_INLINING(OS::Print(
+ " => %s (deopt count %d)\n Bailout: %"Pd" checks\n",
+ target.ToCString(),
+ target.deoptimization_counter(),
+ ic_data.NumberOfChecks()));
continue;
}
GrowableArray<Value*> arguments(instr->ArgumentCount());
for (int i = 0; i < instr->ArgumentCount(); ++i) {
arguments.Add(instr->ArgumentAt(i)->value());
}
- TryInlining(target, &arguments, instr);
+ TryInlining(target,
+ instr->instance_call()->argument_names(),
+ &arguments,
+ instr);
}
}
+ void AdjustForOptionalParameters(const ParsedFunction& parsed_function,
+ const Array& argument_names,
+ GrowableArray<Value*>* arguments,
+ GrowableArray<Definition*>* param_stubs,
+ FlowGraph* callee_graph) {
+ const Function& function = parsed_function.function();
+ // The language and this code does not support both optional positional
+ // and optional named parameters for the same function.
+ ASSERT(!function.HasOptionalPositionalParameters() ||
+ !function.HasOptionalNamedParameters());
+
+ intptr_t arg_count = arguments->length();
+ intptr_t param_count = function.NumParameters();
+ intptr_t fixed_param_count = function.num_fixed_parameters();
+ ASSERT(fixed_param_count <= arg_count);
+ ASSERT(arg_count <= param_count);
+
+ if (function.HasOptionalPositionalParameters()) {
+ // Create a stub for each optional positional parameters with an actual.
+ for (intptr_t i = fixed_param_count; i < arg_count; ++i) {
+ param_stubs->Add(CreateParameterStub(i, (*arguments)[i], callee_graph));
+ }
+ ASSERT(function.NumOptionalPositionalParameters() ==
+ (param_count - fixed_param_count));
+ // For each optional positional parameter without an actual, add its
+ // default value.
+ for (intptr_t i = arg_count; i < param_count; ++i) {
+ const Object& object =
+ Object::ZoneHandle(
+ parsed_function.default_parameter_values().At(
+ i - fixed_param_count));
+ ConstantInstr* constant = new ConstantInstr(object);
+ arguments->Add(NULL);
+ param_stubs->Add(constant);
+ }
+ return;
+ }
+
+ ASSERT(function.HasOptionalNamedParameters());
+
+ // Passed arguments must match fixed parameters plus named arguments.
+ intptr_t argument_names_count =
+ (argument_names.IsNull()) ? 0 : argument_names.Length();
+ ASSERT(arg_count == (fixed_param_count + argument_names_count));
+
+ // Fast path when no optional named parameters are given.
+ if (argument_names_count == 0) {
+ for (intptr_t i = 0; i < param_count - fixed_param_count; ++i) {
+ arguments->Add(NULL);
+ param_stubs->Add(GetDefaultValue(i, parsed_function));
+ }
+ return;
+ }
+
+ // Otherwise, build a collection of name/argument pairs.
+ GrowableArray<NamedArgument> named_args(argument_names_count);
+ for (intptr_t i = 0; i < argument_names.Length(); ++i) {
+ String& arg_name = String::Handle(Isolate::Current());
+ arg_name ^= argument_names.At(i);
+ named_args.Add(
+ NamedArgument(&arg_name, (*arguments)[i + fixed_param_count]));
+ }
+
+ // Truncate the arguments array to just fixed parameters.
+ arguments->TruncateTo(fixed_param_count);
+
+ // For each optional named parameter, add the actual argument or its
+ // default if no argument is passed.
+ for (intptr_t i = fixed_param_count; i < param_count; ++i) {
+ String& param_name = String::Handle(function.ParameterNameAt(i));
+ // Search for and add the named argument.
+ Value* arg = NULL;
+ for (intptr_t j = 0; j < named_args.length(); ++j) {
+ if (param_name.Equals(*named_args[j].name)) {
+ arg = named_args[j].value;
+ break;
+ }
+ }
+ arguments->Add(arg);
+ // Create a stub for the argument or use the parameter's default value.
+ if (arg != NULL) {
+ param_stubs->Add(CreateParameterStub(i, arg, callee_graph));
+ } else {
+ param_stubs->Add(
+ GetDefaultValue(i - fixed_param_count, parsed_function));
+ }
+ }
+ }
+
+
FlowGraph* caller_graph_;
intptr_t next_ssa_temp_index_;
bool inlined_;
@@ -396,6 +660,7 @@
intptr_t inlining_depth_;
CallSites* collected_call_sites_;
CallSites* inlining_call_sites_;
+ GrowableArray<ParsedFunction*> function_cache_;
DISALLOW_COPY_AND_ASSIGN(CallSiteInliner);
};
@@ -424,6 +689,7 @@
inliner.InlineCalls();
if (inliner.inlined()) {
+ flow_graph_->RepairGraphAfterInlining();
if (FLAG_trace_inlining) {
OS::Print("Inlining growth factor: %f\n", inliner.GrowthFactor());
if (FLAG_print_flow_graph) {
diff --git a/runtime/vm/flow_graph_optimizer.cc b/runtime/vm/flow_graph_optimizer.cc
index 2bf97c7..cc887c7 100644
--- a/runtime/vm/flow_graph_optimizer.cc
+++ b/runtime/vm/flow_graph_optimizer.cc
@@ -28,6 +28,8 @@
DEFINE_FLAG(bool, trace_range_analysis, false, "Trace range analysis progress");
DEFINE_FLAG(bool, trace_constant_propagation, false,
"Print constant propagation and useless code elimination.");
+DEFINE_FLAG(bool, array_bounds_check_elimination, true,
+ "Eliminate redundant bounds checks.");
void FlowGraphOptimizer::ApplyICData() {
@@ -427,8 +429,13 @@
// Type propagation has not run yet, we cannot eliminate the check.
const ICData& unary_checks =
ICData::ZoneHandle(call->ic_data()->AsUnaryClassChecks());
- CheckClassInstr* check =
- new CheckClassInstr(value, call->deopt_id(), unary_checks);
+ Instruction* check = NULL;
+ if ((unary_checks.NumberOfChecks() == 1) &&
+ (unary_checks.GetReceiverClassIdAt(0) == kSmiCid)) {
+ check = new CheckSmiInstr(value, call->deopt_id());
+ } else {
+ check = new CheckClassInstr(value, call->deopt_id(), unary_checks);
+ }
InsertBefore(call, check, call->env(), Definition::kEffect);
}
@@ -491,12 +498,13 @@
bool FlowGraphOptimizer::TryReplaceWithStoreIndexed(InstanceCallInstr* call) {
const intptr_t class_id = ReceiverClassId(call);
- ICData& value_check = ICData::Handle();
+ ICData& value_check = ICData::ZoneHandle();
switch (class_id) {
case kArrayCid:
case kGrowableObjectArrayCid:
// Acceptable store index classes.
break;
+ case kFloat32ArrayCid:
case kFloat64ArrayCid: {
// Check that value is always double.
value_check = call->ic_data()->AsUnaryClassChecksForArgNr(2);
@@ -538,6 +546,7 @@
type_args = new Value(load_type_args);
break;
}
+ case kFloat32ArrayCid:
case kFloat64ArrayCid: {
ConstantInstr* null_constant = new ConstantInstr(Object::ZoneHandle());
InsertBefore(call, null_constant, NULL, Definition::kValue);
@@ -567,7 +576,7 @@
Value* value = call->ArgumentAt(2)->value();
// Check if store barrier is needed.
bool needs_store_barrier = true;
- if (class_id == kFloat64ArrayCid) {
+ if ((class_id == kFloat32ArrayCid) || (class_id == kFloat64ArrayCid)) {
ASSERT(!value_check.IsNull());
InsertBefore(call,
new CheckClassInstr(value->Copy(),
@@ -600,6 +609,7 @@
case kArrayCid:
case kImmutableArrayCid:
case kGrowableObjectArrayCid:
+ case kFloat32ArrayCid:
case kFloat64ArrayCid:
// Acceptable load index classes.
break;
@@ -811,9 +821,7 @@
new CheckSmiInstr(value->Copy(), call->deopt_id()),
call->env(),
Definition::kEffect);
- unary_op = new UnarySmiOpInstr(op_kind,
- (op_kind == Token::kNEGATE) ? call : NULL,
- value);
+ unary_op = new UnarySmiOpInstr(op_kind, call, value);
} else if ((op_kind == Token::kBIT_NOT) &&
HasOnlySmiOrMint(*call->ic_data()) &&
FlowGraphCompiler::SupportsUnboxedMints()) {
@@ -914,7 +922,8 @@
void FlowGraphOptimizer::InlineArrayLengthGetter(InstanceCallInstr* call,
intptr_t length_offset,
- bool is_immutable) {
+ bool is_immutable,
+ MethodRecognizer::Kind kind) {
// Check receiver class.
AddCheckClass(call, call->ArgumentAt(0)->value()->Copy());
@@ -924,6 +933,7 @@
Type::ZoneHandle(Type::SmiType()),
is_immutable);
load->set_result_cid(kSmiCid);
+ load->set_recognized_kind(kind);
call->ReplaceWith(load, current_iterator());
RemovePushArguments(call);
}
@@ -946,6 +956,7 @@
Array::length_offset(),
Type::ZoneHandle(Type::SmiType()));
length_load->set_result_cid(kSmiCid);
+ length_load->set_recognized_kind(MethodRecognizer::kObjectArrayLength);
call->ReplaceWith(length_load, current_iterator());
RemovePushArguments(call);
@@ -974,7 +985,7 @@
}
-void FlowGraphOptimizer::InlineStringIsEmptyTester(InstanceCallInstr* call) {
+void FlowGraphOptimizer::InlineStringIsEmptyGetter(InstanceCallInstr* call) {
// Check receiver class.
AddCheckClass(call, call->ArgumentAt(0)->value()->Copy());
@@ -1026,12 +1037,16 @@
switch (recognized_kind) {
case MethodRecognizer::kObjectArrayLength:
case MethodRecognizer::kImmutableArrayLength:
- InlineArrayLengthGetter(call, Array::length_offset(), true);
+ InlineArrayLengthGetter(call,
+ Array::length_offset(),
+ true,
+ recognized_kind);
break;
case MethodRecognizer::kGrowableArrayLength:
InlineArrayLengthGetter(call,
GrowableObjectArray::length_offset(),
- false);
+ false,
+ recognized_kind);
break;
default:
UNREACHABLE();
@@ -1053,6 +1068,15 @@
return true;
}
+ if (recognized_kind == MethodRecognizer::kStringBaseIsEmpty) {
+ if (!ic_data.HasOneTarget()) {
+ // Target is not only StringBase_get_isEmpty.
+ return false;
+ }
+ InlineStringIsEmptyGetter(call);
+ return true;
+ }
+
return false;
}
@@ -1071,15 +1095,6 @@
MethodRecognizer::Kind recognized_kind =
MethodRecognizer::RecognizeKind(target);
- if ((recognized_kind == MethodRecognizer::kDoubleToDouble) &&
- (class_ids[0] == kDoubleCid)) {
- DoubleToDoubleInstr* d2d_instr =
- new DoubleToDoubleInstr(call->ArgumentAt(0)->value(), call);
- call->ReplaceWith(d2d_instr, current_iterator());
- RemovePushArguments(call);
- return true;
- }
-
if ((recognized_kind == MethodRecognizer::kIntegerToDouble) &&
(class_ids[0] == kSmiCid)) {
SmiToDoubleInstr* s2d_instr = new SmiToDoubleInstr(call);
@@ -1089,21 +1104,6 @@
return true;
}
- const intptr_t cid0 = class_ids[0];
- if ((recognized_kind == MethodRecognizer::kIntegerToInteger) &&
- ((cid0 == kSmiCid) || (cid0 == kMintCid) || (cid0 == kBigintCid))) {
- // TODO(srdjan): implement also for mixed integer cids.
- InsertBefore(call,
- new CheckSmiInstr(call->ArgumentAt(0)->value()->Copy(),
- call->deopt_id()),
- call->env(),
- Definition::kEffect);
- call->ReplaceUsesWith(call->ArgumentAt(0));
- RemovePushArguments(call);
- call->RemoveFromGraph();
- return true;
- }
-
if ((recognized_kind == MethodRecognizer::kDoubleToInteger) &&
(class_ids[0] == kDoubleCid)) {
AddCheckClass(call, call->ArgumentAt(0)->value()->Copy());
@@ -1114,15 +1114,6 @@
return true;
}
- if (recognized_kind == MethodRecognizer::kStringBaseIsEmpty) {
- if (!ic_data.HasOneTarget()) {
- // Target is not only StringBase_get_length.
- return false;
- }
- InlineStringIsEmptyTester(call);
- return true;
- }
-
return false;
}
@@ -1169,9 +1160,7 @@
const intptr_t kMaxChecks = 4;
if (instr->ic_data()->NumberOfChecks() <= kMaxChecks) {
bool call_with_checks;
- // TODO(srdjan): Add check class instr for mixed smi/non-smi.
- if (unary_checks.HasOneTarget() &&
- (unary_checks.GetReceiverClassIdAt(0) != kSmiCid)) {
+ if (unary_checks.HasOneTarget()) {
// Type propagation has not run yet, we cannot eliminate the check.
AddCheckClass(instr, instr->ArgumentAt(0)->value()->Copy());
// Call can still deoptimize, do not detach environment from instr.
@@ -1362,11 +1351,11 @@
smi_or_null.Add(kNullCid);
if (ICDataHasOnlyReceiverArgumentClassIds(
*comp->ic_data(), smi_or_null, smi_or_null)) {
- ICData& unary_checks =
+ const ICData& unary_checks_0 =
ICData::ZoneHandle(comp->ic_data()->AsUnaryClassChecks());
const intptr_t deopt_id = comp->deopt_id();
- if ((unary_checks.NumberOfChecks() == 1) &&
- (unary_checks.GetReceiverClassIdAt(0) == kSmiCid)) {
+ if ((unary_checks_0.NumberOfChecks() == 1) &&
+ (unary_checks_0.GetReceiverClassIdAt(0) == kSmiCid)) {
// Smi only.
optimizer->InsertBefore(
instr,
@@ -1377,14 +1366,15 @@
// Smi or NULL.
optimizer->InsertBefore(
instr,
- new CheckClassInstr(comp->left()->Copy(), deopt_id, unary_checks),
+ new CheckClassInstr(comp->left()->Copy(), deopt_id, unary_checks_0),
instr->env(),
Definition::kEffect);
}
- unary_checks = comp->ic_data()->AsUnaryClassChecksForArgNr(1);
- if ((unary_checks.NumberOfChecks() == 1) &&
- (unary_checks.GetReceiverClassIdAt(0) == kSmiCid)) {
+ const ICData& unary_checks_1 =
+ ICData::ZoneHandle(comp->ic_data()->AsUnaryClassChecksForArgNr(1));
+ if ((unary_checks_1.NumberOfChecks() == 1) &&
+ (unary_checks_1.GetReceiverClassIdAt(0) == kSmiCid)) {
// Smi only.
optimizer->InsertBefore(
instr,
@@ -1395,7 +1385,7 @@
// Smi or NULL.
optimizer->InsertBefore(
instr,
- new CheckClassInstr(comp->right()->Copy(), deopt_id, unary_checks),
+ new CheckClassInstr(comp->right()->Copy(), deopt_id, unary_checks_1),
instr->env(),
Definition::kEffect);
}
@@ -1599,7 +1589,9 @@
// Range analysis for smi values.
class RangeAnalysis : public ValueObject {
public:
- explicit RangeAnalysis(FlowGraph* flow_graph) : flow_graph_(flow_graph) { }
+ explicit RangeAnalysis(FlowGraph* flow_graph)
+ : flow_graph_(flow_graph),
+ marked_defns_(NULL) { }
// Infer ranges for all values and remove overflow checks from binary smi
// operations when proven redundant.
@@ -1632,43 +1624,42 @@
Instruction* dom,
Definition* other);
- // Propagate range information until fix-point is reached.
+
+ // Walk the dominator tree and infer ranges for smi values.
void InferRanges();
+ void InferRangesRecursive(BlockEntryInstr* block);
- void ProcessWorklist(Definition::RangeOperator op);
+ enum Direction {
+ kUnknown,
+ kPositive,
+ kNegative,
+ kBoth
+ };
- // Walk the dominator tree, initialize ranges for smi values and place them
- // to the worklist.
- void InitializeRangesRecursive(BlockEntryInstr* block);
+ Range* InferInductionVariableRange(JoinEntryInstr* loop_header,
+ PhiInstr* var);
+
+ void ResetWorklist();
+ void MarkDefinition(Definition* defn);
+
+ static Direction ToDirection(Value* val);
+
+ static Direction Invert(Direction direction) {
+ return (direction == kPositive) ? kNegative : kPositive;
+ }
+
+ static void UpdateDirection(Direction* direction,
+ Direction new_direction) {
+ if (*direction != new_direction) {
+ if (*direction != kUnknown) new_direction = kBoth;
+ *direction = new_direction;
+ }
+ }
// Remove artificial Constraint instructions and replace them with actual
// unconstrained definitions.
void RemoveConstraints();
- void CreateWorklists();
-
- void AddToWorklist(Definition* value) {
- const intptr_t index = value->ssa_temp_index();
- if (!in_worklist_->Contains(index)) {
- in_worklist_->Add(index);
- worklist_.Add(value);
- }
- }
-
- bool IsWorklistEmpty() const {
- return worklist_.is_empty();
- }
-
- Definition* RemoveLastFromWorklist() {
- Definition* defn = worklist_.Last();
- worklist_.RemoveLast();
- ASSERT(in_worklist_->Contains(defn->ssa_temp_index()));
- in_worklist_->Remove(defn->ssa_temp_index());
- return defn;
- }
-
- void SwapWorklists();
-
FlowGraph* flow_graph_;
GrowableArray<Definition*> smi_values_; // Value that are known to be smi.
@@ -1681,9 +1672,9 @@
// Bitvector for a quick filtering of known smi values.
BitVector* smi_definitions_;
- // Worklist used during range propagation.
+ // Worklist for induction variables analysis.
GrowableArray<Definition*> worklist_;
- BitVector* in_worklist_;
+ BitVector* marked_defns_;
DISALLOW_COPY_AND_ASSIGN(RangeAnalysis);
};
@@ -1938,71 +1929,187 @@
}
-void RangeAnalysis::InitializeRangesRecursive(BlockEntryInstr* block) {
+void RangeAnalysis::ResetWorklist() {
+ if (marked_defns_ == NULL) {
+ marked_defns_ = new BitVector(flow_graph_->current_ssa_temp_index());
+ } else {
+ marked_defns_->Clear();
+ }
+ worklist_.Clear();
+}
+
+
+void RangeAnalysis::MarkDefinition(Definition* defn) {
+ // Unwrap constrained value.
+ while (defn->IsConstraint()) {
+ defn = defn->AsConstraint()->value()->definition();
+ }
+
+ if (!marked_defns_->Contains(defn->ssa_temp_index())) {
+ worklist_.Add(defn);
+ marked_defns_->Add(defn->ssa_temp_index());
+ }
+}
+
+
+RangeAnalysis::Direction RangeAnalysis::ToDirection(Value* val) {
+ if (val->BindsToConstant()) {
+ return (Smi::Cast(val->BoundConstant()).Value() >= 0) ? kPositive
+ : kNegative;
+ } else if (val->definition()->range() != NULL) {
+ Range* range = val->definition()->range();
+ if (Range::ConstantMin(range).value() >= 0) {
+ return kPositive;
+ } else if (Range::ConstantMax(range).value() <= 0) {
+ return kNegative;
+ }
+ }
+ return kUnknown;
+}
+
+
+Range* RangeAnalysis::InferInductionVariableRange(JoinEntryInstr* loop_header,
+ PhiInstr* var) {
+ BitVector* loop_info = loop_header->loop_info();
+
+ Definition* initial_value = NULL;
+ Direction direction = kUnknown;
+
+ ResetWorklist();
+ MarkDefinition(var);
+ while (!worklist_.is_empty()) {
+ Definition* defn = worklist_.Last();
+ worklist_.RemoveLast();
+
+ if (defn->IsPhi()) {
+ PhiInstr* phi = defn->AsPhi();
+ for (intptr_t i = 0; i < phi->InputCount(); i++) {
+ Definition* defn = phi->InputAt(i)->definition();
+
+ if (!loop_info->Contains(defn->GetBlock()->preorder_number())) {
+ // The value is coming from outside of the loop.
+ if (initial_value == NULL) {
+ initial_value = defn;
+ continue;
+ } else if (initial_value == defn) {
+ continue;
+ } else {
+ return NULL;
+ }
+ }
+
+ MarkDefinition(defn);
+ }
+ } else if (defn->IsBinarySmiOp()) {
+ BinarySmiOpInstr* binary_op = defn->AsBinarySmiOp();
+
+ switch (binary_op->op_kind()) {
+ case Token::kADD: {
+ const Direction growth_right =
+ ToDirection(binary_op->right());
+ if (growth_right != kUnknown) {
+ UpdateDirection(&direction, growth_right);
+ MarkDefinition(binary_op->left()->definition());
+ break;
+ }
+
+ const Direction growth_left =
+ ToDirection(binary_op->left());
+ if (growth_left != kUnknown) {
+ UpdateDirection(&direction, growth_left);
+ MarkDefinition(binary_op->right()->definition());
+ break;
+ }
+
+ return NULL;
+ }
+
+ case Token::kSUB: {
+ const Direction growth_right =
+ ToDirection(binary_op->right());
+ if (growth_right != kUnknown) {
+ UpdateDirection(&direction, Invert(growth_right));
+ MarkDefinition(binary_op->left()->definition());
+ break;
+ }
+ return NULL;
+ }
+
+ default:
+ return NULL;
+ }
+ } else {
+ return NULL;
+ }
+ }
+
+
+ // We transitively discovered all dependencies of the given phi
+ // and confirmed that it depends on a single value coming from outside of
+ // the loop and some linear combinations of itself.
+ // Compute the range based on initial value and the direction of the growth.
+ switch (direction) {
+ case kPositive:
+ return new Range(RangeBoundary::FromDefinition(initial_value),
+ RangeBoundary::MaxSmi());
+
+ case kNegative:
+ return new Range(RangeBoundary::MinSmi(),
+ RangeBoundary::FromDefinition(initial_value));
+
+ case kUnknown:
+ case kBoth:
+ return Range::Unknown();
+ }
+
+ UNREACHABLE();
+ return NULL;
+}
+
+
+void RangeAnalysis::InferRangesRecursive(BlockEntryInstr* block) {
JoinEntryInstr* join = block->AsJoinEntry();
if (join != NULL) {
+ const bool is_loop_header = (join->loop_info() != NULL);
for (PhiIterator it(join); !it.Done(); it.Advance()) {
PhiInstr* phi = it.Current();
if (smi_definitions_->Contains(phi->ssa_temp_index())) {
- phi->InferRange(Definition::kRangeInit);
- AddToWorklist(phi);
+ if (is_loop_header) {
+ // Try recognizing simple induction variables.
+ Range* range = InferInductionVariableRange(join, phi);
+ if (range != NULL) {
+ phi->range_ = range;
+ continue;
+ }
+ }
+
+ phi->InferRange();
}
}
}
for (ForwardInstructionIterator it(block); !it.Done(); it.Advance()) {
- Definition* defn = it.Current()->AsDefinition();
+ Instruction* current = it.Current();
+
+ Definition* defn = current->AsDefinition();
if ((defn != NULL) &&
(defn->ssa_temp_index() != -1) &&
smi_definitions_->Contains(defn->ssa_temp_index())) {
- defn->InferRange(Definition::kRangeInit);
- AddToWorklist(defn);
+ defn->InferRange();
+ } else if (FLAG_array_bounds_check_elimination &&
+ current->IsCheckArrayBound() &&
+ current->AsCheckArrayBound()->IsRedundant()) {
+ it.RemoveCurrentFromGraph();
}
}
for (intptr_t i = 0; i < block->dominated_blocks().length(); ++i) {
- InitializeRangesRecursive(block->dominated_blocks()[i]);
- }
-}
-
-
-void RangeAnalysis::CreateWorklists() {
- in_worklist_ = new BitVector(flow_graph_->current_ssa_temp_index());
-}
-
-
-void RangeAnalysis::ProcessWorklist(Definition::RangeOperator op) {
- // Iterate until fix point is reached.
- while (!IsWorklistEmpty()) {
- Definition* defn = RemoveLastFromWorklist();
- if (FLAG_trace_range_analysis) {
- OS::Print("infering range for v%"Pd" %s\n",
- defn->ssa_temp_index(),
- Range::ToCString(defn->range()));
- }
- if (defn->InferRange(op)) { // Update the range.
- if (FLAG_trace_range_analysis) {
- OS::Print(" changed to %s\n", Range::ToCString(defn->range()));
- }
- // Range change. Place all uses to the worklist.
- for (Value* use = defn->input_use_list();
- use != NULL;
- use = use->next_use()) {
- Definition* use_defn = use->instruction()->AsDefinition();
- if ((use_defn != NULL) &&
- (use_defn->ssa_temp_index() != -1) &&
- smi_definitions_->Contains(use_defn->ssa_temp_index())) {
- AddToWorklist(use_defn);
- }
- }
- }
+ InferRangesRecursive(block->dominated_blocks()[i]);
}
}
void RangeAnalysis::InferRanges() {
- CreateWorklists();
-
// Initialize bitvector for quick filtering of smi values.
smi_definitions_ = new BitVector(flow_graph_->current_ssa_temp_index());
for (intptr_t i = 0; i < smi_values_.length(); i++) {
@@ -2013,54 +2120,10 @@
}
// Infer initial values of ranges.
- InitializeRangesRecursive(flow_graph_->graph_entry());
-
- for (intptr_t i = 0; i < smi_values_.length(); i++) {
- if (smi_values_[i]->IsPhi() &&
- smi_values_[i]->InferRange(Definition::kRangeInit)) {
- Definition* defn = smi_values_[i];
- for (Value* use = defn->input_use_list();
- use != NULL;
- use = use->next_use()) {
- Definition* use_defn = use->instruction()->AsDefinition();
- if ((use_defn != NULL) &&
- (use_defn->ssa_temp_index() != -1) &&
- smi_definitions_->Contains(use_defn->ssa_temp_index())) {
- AddToWorklist(use_defn);
- }
- }
- }
- }
+ InferRangesRecursive(flow_graph_->graph_entry());
if (FLAG_trace_range_analysis) {
- OS::Print("---- after initialization -------\n");
- FlowGraphPrinter printer(*flow_graph_);
- printer.PrintBlocks();
- }
-
- if (FLAG_trace_range_analysis) {
- OS::Print("---- widening ---------\n");
- }
- ProcessWorklist(Definition::kRangeWiden);
-
- if (FLAG_trace_range_analysis) {
- OS::Print("---- after widening -------\n");
- FlowGraphPrinter printer(*flow_graph_);
- printer.PrintBlocks();
- }
-
- if (FLAG_trace_range_analysis) {
- OS::Print("---- narrowing ---------\n");
- }
- // Only phis can change under narrowing operator. Place all phis
- // into the worklist.
- for (intptr_t i = 0; i < smi_values_.length(); i++) {
- if (smi_values_[i]->IsPhi()) AddToWorklist(smi_values_[i]);
- }
- ProcessWorklist(Definition::kRangeNarrow);
-
- if (FLAG_trace_range_analysis) {
- OS::Print("---- after narrowing -------\n");
+ OS::Print("---- after range analysis -------\n");
FlowGraphPrinter printer(*flow_graph_);
printer.PrintBlocks();
}
@@ -2364,7 +2427,7 @@
if (FLAG_trace_optimization) {
OS::Print("Hoisting instruction %s:%"Pd" from B%"Pd" to B%"Pd"\n",
current->DebugName(),
- current->deopt_id(),
+ current->GetDeoptId(),
current->GetBlock()->block_id(),
pre_header->block_id());
}
@@ -2474,6 +2537,15 @@
}
+static bool IsLoadEliminationCandidate(Definition* def) {
+ // Immutable loads (not affected by side effects) are handled
+ // in the DominatorBasedCSE pass.
+ // TODO(fschneider): Extend to other load instructions.
+ return (def->IsLoadField() && def->AffectedBySideEffect())
+ || def->IsLoadIndexed();
+}
+
+
static intptr_t NumberLoadExpressions(FlowGraph* graph) {
DirectChainedHashMap<Definition*> map;
intptr_t expr_id = 0;
@@ -2485,10 +2557,7 @@
!instr_it.Done();
instr_it.Advance()) {
Definition* defn = instr_it.Current()->AsDefinition();
- if ((defn == NULL) ||
- !defn->IsLoadField() ||
- !defn->AffectedBySideEffect()) {
- // TODO(fschneider): Extend to other load instructions.
+ if ((defn == NULL) || !IsLoadEliminationCandidate(defn)) {
continue;
}
Definition* result = map.Lookup(defn);
@@ -2533,10 +2602,7 @@
break;
}
Definition* defn = instr_it.Current()->AsDefinition();
- if ((defn == NULL) ||
- !defn->IsLoadField() ||
- !defn->AffectedBySideEffect()) {
- // TODO(fschneider): Extend to other load instructions.
+ if ((defn == NULL) || !IsLoadEliminationCandidate(defn)) {
continue;
}
avail_gen[preorder_number]->Add(defn->expr_id());
@@ -2588,7 +2654,7 @@
}
-static void OptimizeLoads(
+static bool OptimizeLoads(
BlockEntryInstr* block,
GrowableArray<Definition*>* definitions,
const GrowableArray<BitVector*>& avail_in) {
@@ -2603,6 +2669,7 @@
}
}
+ bool changed = false;
for (ForwardInstructionIterator it(block); !it.Done(); it.Advance()) {
Instruction* instr = it.Current();
if (instr->HasSideEffect()) {
@@ -2613,11 +2680,7 @@
continue;
}
Definition* defn = instr->AsDefinition();
- if ((defn == NULL) ||
- !defn->IsLoadField() ||
- !defn->AffectedBySideEffect()) {
- // Immutable loads are handled in normal CSE.
- // TODO(fschneider): Extend to other load instructions.
+ if ((defn == NULL) || !IsLoadEliminationCandidate(defn)) {
continue;
}
Definition* result = (*definitions)[defn->expr_id()];
@@ -2629,6 +2692,7 @@
// Replace current with lookup result.
defn->ReplaceUsesWith(result);
it.RemoveCurrentFromGraph();
+ changed = true;
if (FLAG_trace_optimization) {
OS::Print("Replacing load v%"Pd" with v%"Pd"\n",
defn->ssa_temp_index(),
@@ -2643,15 +2707,17 @@
if (i < num_children - 1) {
GrowableArray<Definition*> child_defs(definitions->length());
child_defs.AddArray(*definitions);
- OptimizeLoads(child, &child_defs, avail_in);
+ changed = OptimizeLoads(child, &child_defs, avail_in) || changed;
} else {
- OptimizeLoads(child, definitions, avail_in);
+ changed = OptimizeLoads(child, definitions, avail_in) || changed;
}
}
+ return changed;
}
-void DominatorBasedCSE::Optimize(FlowGraph* graph) {
+bool DominatorBasedCSE::Optimize(FlowGraph* graph) {
+ bool changed = false;
if (FLAG_load_cse) {
intptr_t max_expr_id = NumberLoadExpressions(graph);
if (max_expr_id > 0) {
@@ -2667,19 +2733,21 @@
for (intptr_t j = 0; j < max_expr_id ; j++) {
definitions.Add(NULL);
}
-
- OptimizeLoads(graph->graph_entry(), &definitions, avail_in);
+ changed = OptimizeLoads(graph->graph_entry(), &definitions, avail_in);
}
}
DirectChainedHashMap<Instruction*> map;
- OptimizeRecursive(graph->graph_entry(), &map);
+ changed = OptimizeRecursive(graph->graph_entry(), &map) || changed;
+
+ return changed;
}
-void DominatorBasedCSE::OptimizeRecursive(
+bool DominatorBasedCSE::OptimizeRecursive(
BlockEntryInstr* block,
DirectChainedHashMap<Instruction*>* map) {
+ bool changed = false;
for (ForwardInstructionIterator it(block); !it.Done(); it.Advance()) {
Instruction* current = it.Current();
if (current->AffectedBySideEffect()) continue;
@@ -2690,6 +2758,7 @@
}
// Replace current with lookup result.
ReplaceCurrentInstruction(&it, current, replacement);
+ changed = true;
}
// Process children in the dominator tree recursively.
@@ -2698,11 +2767,13 @@
BlockEntryInstr* child = block->dominated_blocks()[i];
if (i < num_children - 1) {
DirectChainedHashMap<Instruction*> child_map(*map); // Copy map.
- OptimizeRecursive(child, &child_map);
+ changed = OptimizeRecursive(child, &child_map) || changed;
} else {
- OptimizeRecursive(child, map); // Reuse map for the last child.
+ // Reuse map for the last child.
+ changed = OptimizeRecursive(child, map) || changed;
}
}
+ return changed;
}
@@ -3232,17 +3303,6 @@
}
-void ConstantPropagator::VisitDoubleToDouble(DoubleToDoubleInstr* instr) {
- const Object& value = instr->value()->definition()->constant_value();
- if (IsNonConstant(value)) {
- SetValue(instr, non_constant_);
- } else if (IsConstant(value)) {
- // TODO(kmillikin): Handle conversion.
- SetValue(instr, non_constant_);
- }
-}
-
-
void ConstantPropagator::VisitSmiToDouble(SmiToDoubleInstr* instr) {
// TODO(kmillikin): Handle conversion.
SetValue(instr, non_constant_);
diff --git a/runtime/vm/flow_graph_optimizer.h b/runtime/vm/flow_graph_optimizer.h
index 041221d..7d86ac1 100644
--- a/runtime/vm/flow_graph_optimizer.h
+++ b/runtime/vm/flow_graph_optimizer.h
@@ -87,10 +87,11 @@
void InlineImplicitInstanceGetter(InstanceCallInstr* call);
void InlineArrayLengthGetter(InstanceCallInstr* call,
intptr_t length_offset,
- bool is_immutable);
+ bool is_immutable,
+ MethodRecognizer::Kind kind);
void InlineGArrayCapacityGetter(InstanceCallInstr* call);
void InlineStringLengthGetter(InstanceCallInstr* call);
- void InlineStringIsEmptyTester(InstanceCallInstr* call);
+ void InlineStringIsEmptyGetter(InstanceCallInstr* call);
FlowGraph* flow_graph_;
@@ -155,10 +156,12 @@
// on the dominator tree.
class DominatorBasedCSE : public AllStatic {
public:
- static void Optimize(FlowGraph* graph);
+ // Return true, if the optimization changed the flow graph.
+ // False, if nothing changed.
+ static bool Optimize(FlowGraph* graph);
private:
- static void OptimizeRecursive(
+ static bool OptimizeRecursive(
BlockEntryInstr* entry,
DirectChainedHashMap<Instruction*>* map);
};
diff --git a/runtime/vm/gc_marker.cc b/runtime/vm/gc_marker.cc
index 01de897..822c51f 100644
--- a/runtime/vm/gc_marker.cc
+++ b/runtime/vm/gc_marker.cc
@@ -209,7 +209,6 @@
return;
}
- // TODO(iposva): merge old and code spaces.
MarkAndPush(raw_obj);
}
@@ -282,7 +281,6 @@
visit_prologue_weak_persistent_handles,
StackFrameIterator::kDontValidateFrames);
heap_->IterateNewPointers(visitor);
- heap_->IterateCodePointers(visitor);
}
diff --git a/runtime/vm/gc_sweeper.cc b/runtime/vm/gc_sweeper.cc
index eee2b13..7f1cf8b 100644
--- a/runtime/vm/gc_sweeper.cc
+++ b/runtime/vm/gc_sweeper.cc
@@ -22,6 +22,7 @@
return 0;
}
+ bool is_executable = (page->type() == HeapPage::kExecutable);
uword current = page->object_start();
uword end = page->object_end();
@@ -51,6 +52,9 @@
free_end += next_obj->Size();
}
obj_size = free_end - current;
+ if (is_executable) {
+ memset(reinterpret_cast<void*>(current), 0xcc, obj_size);
+ }
freelist->Free(current, obj_size);
}
current += obj_size;
diff --git a/runtime/vm/heap.cc b/runtime/vm/heap.cc
index 70e6a5e..84f55df 100644
--- a/runtime/vm/heap.cc
+++ b/runtime/vm/heap.cc
@@ -32,23 +32,18 @@
DEFINE_FLAG(int, old_gen_heap_size, Heap::kHeapSizeInMB,
"old gen heap size in MB,"
"e.g: --old_gen_heap_size=1024 allocates a 1024MB old gen heap");
-DEFINE_FLAG(int, code_heap_size, Heap::kCodeHeapSizeInMB,
- "code heap size in MB,"
- "e.g: --code_heap_size=8 allocates a 8MB code heap");
- Heap::Heap() : read_only_(false) {
+Heap::Heap() : read_only_(false) {
new_space_ = new Scavenger(this,
(FLAG_new_gen_heap_size * MB),
kNewObjectAlignmentOffset);
old_space_ = new PageSpace(this, (FLAG_old_gen_heap_size * MB));
- code_space_ = new PageSpace(this, (FLAG_code_heap_size * MB), true);
}
Heap::~Heap() {
delete new_space_;
delete old_space_;
- delete code_space_;
}
@@ -63,16 +58,16 @@
if (addr != 0) {
return addr;
}
- return AllocateOld(size);
+ return AllocateOld(size, HeapPage::kData);
}
-uword Heap::AllocateOld(intptr_t size) {
+uword Heap::AllocateOld(intptr_t size, HeapPage::PageType type) {
ASSERT(Isolate::Current()->no_gc_scope_depth() == 0);
- uword addr = old_space_->TryAllocate(size);
+ uword addr = old_space_->TryAllocate(size, type);
if (addr == 0) {
CollectAllGarbage();
- addr = old_space_->TryAllocate(size, PageSpace::kForceGrowth);
+ addr = old_space_->TryAllocate(size, type, PageSpace::kForceGrowth);
if (addr == 0) {
OS::PrintErr("Exhausted heap space, trying to allocate %"Pd" bytes.\n",
size);
@@ -82,25 +77,9 @@
}
-uword Heap::AllocateCode(PageSpace* space, intptr_t size) {
- ASSERT(Isolate::Current()->no_gc_scope_depth() == 0);
- ASSERT(Utils::IsAligned(size, OS::PreferredCodeAlignment()));
- uword addr = space->TryAllocate(size);
- if (addr == 0) {
- // TODO(iposva): Support GC.
- FATAL("Exhausted code heap space.");
- }
- if (FLAG_compiler_stats) {
- CompilerStats::code_allocated += size;
- }
- return addr;
-}
-
-
bool Heap::Contains(uword addr) const {
return new_space_->Contains(addr) ||
- old_space_->Contains(addr) ||
- code_space_->Contains(addr);
+ old_space_->Contains(addr);
}
@@ -115,21 +94,19 @@
bool Heap::CodeContains(uword addr) const {
- return code_space_->Contains(addr);
+ return old_space_->Contains(addr, HeapPage::kExecutable);
}
void Heap::IterateObjects(ObjectVisitor* visitor) {
new_space_->VisitObjects(visitor);
old_space_->VisitObjects(visitor);
- code_space_->VisitObjects(visitor);
}
void Heap::IteratePointers(ObjectPointerVisitor* visitor) {
new_space_->VisitObjectPointers(visitor);
old_space_->VisitObjectPointers(visitor);
- code_space_->VisitObjectPointers(visitor);
}
@@ -140,12 +117,6 @@
void Heap::IterateOldPointers(ObjectPointerVisitor* visitor) {
old_space_->VisitObjectPointers(visitor);
- code_space_->VisitObjectPointers(visitor);
-}
-
-
-void Heap::IterateCodePointers(ObjectPointerVisitor* visitor) {
- code_space_->VisitObjectPointers(visitor);
}
@@ -156,18 +127,12 @@
void Heap::IterateOldObjects(ObjectVisitor* visitor) {
old_space_->VisitObjects(visitor);
- code_space_->VisitObjects(visitor);
-}
-
-
-void Heap::IterateCodeObjects(ObjectVisitor* visitor) {
- code_space_->VisitObjects(visitor);
}
RawInstructions* Heap::FindObjectInCodeSpace(FindObjectVisitor* visitor) {
- // The code heap can only have RawInstructions objects.
- RawObject* raw_obj = code_space_->FindObject(visitor);
+ // Only executable pages can have RawInstructions objects.
+ RawObject* raw_obj = old_space_->FindObject(visitor, HeapPage::kExecutable);
ASSERT((raw_obj == Object::null()) ||
(raw_obj->GetClassId() == kInstructionsCid));
return reinterpret_cast<RawInstructions*>(raw_obj);
@@ -187,14 +152,10 @@
break;
}
case kOld:
+ case kCode:
old_space_->MarkSweep(invoke_api_callbacks,
GCReasonToString(kOldSpace));
break;
- case kCode:
- UNIMPLEMENTED();
- code_space_->MarkSweep(invoke_api_callbacks,
- GCReasonToString(kCodeSpace));
- break;
default:
UNREACHABLE();
}
@@ -219,8 +180,6 @@
const char* gc_reason = GCReasonToString(kFull);
new_space_->Scavenge(kInvokeApiCallbacks, gc_reason);
old_space_->MarkSweep(kInvokeApiCallbacks, gc_reason);
- // TODO(iposva): Merge old and code space.
- // code_space_->MarkSweep(kInvokeApiCallbacks, gc_reason);
if (FLAG_verbose_gc) {
PrintSizes();
}
@@ -236,8 +195,6 @@
read_only_ = read_only;
new_space_->WriteProtect(read_only);
old_space_->WriteProtect(read_only);
- // TODO(iposva): Merge old and code space.
- // code_space_->WriteProtect(read_only);
}
@@ -268,13 +225,6 @@
*start = Utils::Minimum(old_start, *start);
*end = Utils::Maximum(old_end, *end);
}
- if (code_space_->capacity() != 0) {
- uword code_start;
- uword code_end;
- code_space_->StartEndAddress(&code_start, &code_end);
- *start = Utils::Minimum(code_start, *start);
- *end = Utils::Maximum(code_end, *end);
- }
ASSERT(*start <= *end);
}
@@ -312,11 +262,9 @@
void Heap::PrintSizes() const {
OS::PrintErr("New space (%"Pd"k of %"Pd"k) "
- "Old space (%"Pd"k of %"Pd"k) "
- "Code space (%"Pd"k of %"Pd"k)\n",
+ "Old space (%"Pd"k of %"Pd"k)\n",
(new_space_->in_use() / KB), (new_space_->capacity() / KB),
- (old_space_->in_use() / KB), (old_space_->capacity() / KB),
- (code_space_->in_use() / KB), (code_space_->capacity() / KB));
+ (old_space_->in_use() / KB), (old_space_->capacity() / KB));
}
diff --git a/runtime/vm/heap.h b/runtime/vm/heap.h
index 2844bd6..fb4e927 100644
--- a/runtime/vm/heap.h
+++ b/runtime/vm/heap.h
@@ -60,13 +60,13 @@
case kNew:
// Do not attempt to allocate very large objects in new space.
if (!PageSpace::IsPageAllocatableSize(size)) {
- return AllocateOld(size);
+ return AllocateOld(size, HeapPage::kData);
}
return AllocateNew(size);
case kOld:
- return AllocateOld(size);
+ return AllocateOld(size, HeapPage::kData);
case kCode:
- return AllocateCode(code_space_, size);
+ return AllocateOld(size, HeapPage::kExecutable);
default:
UNREACHABLE();
}
@@ -79,9 +79,9 @@
case kNew:
return new_space_->TryAllocate(size);
case kOld:
- return old_space_->TryAllocate(size);
+ return old_space_->TryAllocate(size, HeapPage::kData);
case kCode:
- return code_space_->TryAllocate(size);
+ return old_space_->TryAllocate(size, HeapPage::kExecutable);
default:
UNREACHABLE();
}
@@ -101,7 +101,6 @@
// Visit all pointers in the space.
void IterateNewPointers(ObjectPointerVisitor* visitor);
void IterateOldPointers(ObjectPointerVisitor* visitor);
- void IterateCodePointers(ObjectPointerVisitor* visitor);
// Visit all objects.
void IterateObjects(ObjectVisitor* visitor);
@@ -109,7 +108,6 @@
// Visit all object in the space.
void IterateNewObjects(ObjectVisitor* visitor);
void IterateOldObjects(ObjectVisitor* visitor);
- void IterateCodeObjects(ObjectVisitor* visitor);
// Find an object by visiting all pointers in the specified heap space,
// the 'visitor' is used to determine if an object is found or not.
@@ -171,13 +169,11 @@
Heap();
uword AllocateNew(intptr_t size);
- uword AllocateOld(intptr_t size);
- uword AllocateCode(PageSpace* space, intptr_t size);
+ uword AllocateOld(intptr_t size, HeapPage::PageType type);
// The different spaces used for allocation.
Scavenger* new_space_;
PageSpace* old_space_;
- PageSpace* code_space_;
// This heap is in read-only mode: No allocation is allowed.
bool read_only_;
diff --git a/runtime/vm/il_printer.cc b/runtime/vm/il_printer.cc
index c847c2e..3984e9d 100644
--- a/runtime/vm/il_printer.cc
+++ b/runtime/vm/il_printer.cc
@@ -251,6 +251,14 @@
}
+const char* RangeBoundary::ToCString() const {
+ char buffer[256];
+ BufferFormatter f(buffer, sizeof(buffer));
+ PrintTo(&f);
+ return Isolate::Current()->current_zone()->MakeCopyOfString(buffer);
+}
+
+
void AssertAssignableInstr::PrintOperandsTo(BufferFormatter* f) const {
value()->PrintTo(f);
f->Print(", %s, '%s'%s",
diff --git a/runtime/vm/intermediate_language.cc b/runtime/vm/intermediate_language.cc
index 1dff5fb..a6f5fc5 100644
--- a/runtime/vm/intermediate_language.cc
+++ b/runtime/vm/intermediate_language.cc
@@ -61,6 +61,25 @@
}
+
+CheckClassInstr::CheckClassInstr(Value* value,
+ intptr_t deopt_id,
+ const ICData& unary_checks)
+ : unary_checks_(unary_checks) {
+ ASSERT(value != NULL);
+ ASSERT(unary_checks.IsZoneHandle());
+ // Expected useful check data.
+ ASSERT(!unary_checks_.IsNull() &&
+ (unary_checks_.NumberOfChecks() > 0) &&
+ (unary_checks_.num_args_tested() == 1));
+ inputs_[0] = value;
+ deopt_id_ = deopt_id;
+ // Otherwise use CheckSmiInstr.
+ ASSERT((unary_checks_.NumberOfChecks() != 1) ||
+ (unary_checks_.GetReceiverClassIdAt(0) != kSmiCid));
+}
+
+
bool CheckClassInstr::AttributesEqual(Instruction* other) const {
CheckClassInstr* other_check = other->AsCheckClass();
ASSERT(other_check != NULL);
@@ -132,6 +151,13 @@
}
+bool LoadIndexedInstr::AttributesEqual(Instruction* other) const {
+ LoadIndexedInstr* other_load = other->AsLoadIndexed();
+ ASSERT(other_load != NULL);
+ return class_id() == other_load->class_id();
+}
+
+
bool ConstantInstr::AttributesEqual(Instruction* other) const {
ConstantInstr* other_constant = other->AsConstant();
ASSERT(other_constant != NULL);
@@ -170,10 +196,13 @@
ConstantInstr* GraphEntryInstr::constant_null() {
- ASSERT(initial_definitions_.length() > 0 &&
- initial_definitions_[0]->IsConstant() &&
- initial_definitions_[0]->AsConstant()->value().IsNull());
- return initial_definitions_[0]->AsConstant();
+ ASSERT(initial_definitions_.length() > 0);
+ for (intptr_t i = 0; i < initial_definitions_.length(); ++i) {
+ ConstantInstr* defn = initial_definitions_[i]->AsConstant();
+ if (defn != NULL && defn->value().IsNull()) return defn;
+ }
+ UNREACHABLE();
+ return NULL;
}
@@ -642,6 +671,11 @@
}
+intptr_t AssertAssignableInstr::GetPropagatedCid() {
+ return propagated_cid();
+}
+
+
// ==== Postorder graph traversal.
static bool IsMarked(BlockEntryInstr* block,
GrowableArray<BlockEntryInstr*>* preorder) {
@@ -1361,11 +1395,6 @@
}
-RawAbstractType* DoubleToDoubleInstr::CompileType() const {
- return Type::Double();
-}
-
-
RawAbstractType* SmiToDoubleInstr::CompileType() const {
return Type::Double();
}
@@ -1845,12 +1874,17 @@
void StaticCallInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+ Label skip_call;
+ if (function().name() == Symbols::EqualOperator()) {
+ compiler->EmitSuperEqualityCallPrologue(locs()->out().reg(), &skip_call);
+ }
compiler->GenerateStaticCall(deopt_id(),
token_pos(),
function(),
ArgumentCount(),
argument_names(),
locs());
+ __ Bind(&skip_call);
}
@@ -2057,6 +2091,14 @@
}
+RangeBoundary RangeBoundary::FromDefinition(Definition* defn, intptr_t offs) {
+ if (defn->IsConstant() && defn->AsConstant()->value().IsSmi()) {
+ return FromConstant(Smi::Cast(defn->AsConstant()->value()).Value() + offs);
+ }
+ return RangeBoundary(kSymbol, reinterpret_cast<intptr_t>(defn), offs);
+}
+
+
RangeBoundary RangeBoundary::LowerBound() const {
if (IsConstant()) return *this;
if (symbol()->range() == NULL) return MinSmi();
@@ -2075,48 +2117,271 @@
}
-bool Definition::InferRange(RangeOperator op) {
- ASSERT(GetPropagatedCid() == kSmiCid); // Has meaning only for smis.
- if (range_ == NULL) {
- range_ = Range::Unknown();
- return true;
- }
- return false;
+// Returns true if two range boundaries refer to the same symbol.
+static bool DependOnSameSymbol(const RangeBoundary& a, const RangeBoundary& b) {
+ if (!a.IsSymbol() || !b.IsSymbol()) return false;
+ if (a.symbol() == b.symbol()) return true;
+
+ return !a.symbol()->AffectedBySideEffect() &&
+ a.symbol()->Equals(b.symbol());
}
-bool ConstantInstr::InferRange(RangeOperator op) {
+// Returns true if range has a least specific minimum value.
+static bool IsMinSmi(Range* range) {
+ return (range == NULL) ||
+ (range->min().IsConstant() &&
+ (range->min().value() <= Smi::kMinValue));
+}
+
+
+// Returns true if range has a least specific maximium value.
+static bool IsMaxSmi(Range* range) {
+ return (range == NULL) ||
+ (range->max().IsConstant() &&
+ (range->max().value() >= Smi::kMaxValue));
+}
+
+
+// Returns true if two range boundaries can be proven to be equal.
+static bool IsEqual(const RangeBoundary& a, const RangeBoundary& b) {
+ if (a.IsConstant() && b.IsConstant()) {
+ return a.value() == b.value();
+ } else if (a.IsSymbol() && b.IsSymbol()) {
+ return (a.offset() == b.offset()) && DependOnSameSymbol(a, b);
+ } else {
+ return false;
+ }
+}
+
+
+static RangeBoundary CanonicalizeBoundary(const RangeBoundary& a,
+ const RangeBoundary& overflow) {
+ if (a.IsConstant()) return a;
+
+ intptr_t offset = a.offset();
+ Definition* symbol = a.symbol();
+
+ bool changed;
+ do {
+ changed = false;
+ if (symbol->IsConstraint()) {
+ symbol = symbol->AsConstraint()->value()->definition();
+ changed = true;
+ } else if (symbol->IsBinarySmiOp()) {
+ BinarySmiOpInstr* op = symbol->AsBinarySmiOp();
+ Definition* left = op->left()->definition();
+ Definition* right = op->right()->definition();
+ switch (op->op_kind()) {
+ case Token::kADD:
+ if (right->IsConstant()) {
+ offset += Smi::Cast(right->AsConstant()->value()).Value();
+ symbol = left;
+ changed = true;
+ } else if (left->IsConstant()) {
+ offset += Smi::Cast(left->AsConstant()->value()).Value();
+ symbol = right;
+ changed = true;
+ }
+ break;
+
+ case Token::kSUB:
+ if (right->IsConstant()) {
+ offset -= Smi::Cast(right->AsConstant()->value()).Value();
+ symbol = left;
+ changed = true;
+ }
+ break;
+
+ default:
+ break;
+ }
+ }
+
+ if (!Smi::IsValid(offset)) return overflow;
+ } while (changed);
+
+ return RangeBoundary::FromDefinition(symbol, offset);
+}
+
+
+static bool CanonicalizeMaxBoundary(RangeBoundary* a) {
+ if (!a->IsSymbol()) return false;
+
+ Range* range = a->symbol()->range();
+ if ((range == NULL) || !range->max().IsSymbol()) return false;
+
+ const intptr_t offset = range->max().offset() + a->offset();
+
+ if (!Smi::IsValid(offset)) {
+ *a = RangeBoundary::OverflowedMaxSmi();
+ return true;
+ }
+
+ *a = CanonicalizeBoundary(
+ RangeBoundary::FromDefinition(range->max().symbol(), offset),
+ RangeBoundary::OverflowedMaxSmi());
+
+ return true;
+}
+
+
+static bool CanonicalizeMinBoundary(RangeBoundary* a) {
+ if (!a->IsSymbol()) return false;
+
+ Range* range = a->symbol()->range();
+ if ((range == NULL) || !range->min().IsSymbol()) return false;
+
+ const intptr_t offset = range->min().offset() + a->offset();
+ if (!Smi::IsValid(offset)) {
+ *a = RangeBoundary::OverflowedMinSmi();
+ return true;
+ }
+
+ *a = CanonicalizeBoundary(
+ RangeBoundary::FromDefinition(range->min().symbol(), offset),
+ RangeBoundary::OverflowedMinSmi());
+
+ return true;
+}
+
+
+RangeBoundary RangeBoundary::Min(RangeBoundary a, RangeBoundary b) {
+ if (DependOnSameSymbol(a, b)) {
+ return (a.offset() <= b.offset()) ? a : b;
+ }
+
+ const intptr_t min_a = a.LowerBound().value();
+ const intptr_t min_b = b.LowerBound().value();
+
+ return RangeBoundary::FromConstant(Utils::Minimum(min_a, min_b));
+}
+
+
+RangeBoundary RangeBoundary::Max(RangeBoundary a, RangeBoundary b) {
+ if (DependOnSameSymbol(a, b)) {
+ return (a.offset() >= b.offset()) ? a : b;
+ }
+
+ const intptr_t max_a = a.UpperBound().value();
+ const intptr_t max_b = b.UpperBound().value();
+
+ return RangeBoundary::FromConstant(Utils::Maximum(max_a, max_b));
+}
+
+
+void Definition::InferRange() {
+ ASSERT(GetPropagatedCid() == kSmiCid); // Has meaning only for smis.
+ if (range_ == NULL) {
+ range_ = Range::Unknown();
+ }
+}
+
+
+void ConstantInstr::InferRange() {
ASSERT(value_.IsSmi());
if (range_ == NULL) {
intptr_t value = Smi::Cast(value_).Value();
range_ = new Range(RangeBoundary::FromConstant(value),
RangeBoundary::FromConstant(value));
- return true;
}
- return false;
}
-bool ConstraintInstr::InferRange(RangeOperator op) {
+void ConstraintInstr::InferRange() {
Range* value_range = value()->definition()->range();
- // Compute intersection of constraint and value ranges.
- return Range::Update(&range_,
- RangeBoundary::Max(Range::ConstantMin(value_range),
- Range::ConstantMin(constraint())),
- RangeBoundary::Min(Range::ConstantMax(value_range),
- Range::ConstantMax(constraint())));
+ RangeBoundary min;
+ RangeBoundary max;
+
+ if (IsMinSmi(value_range) && !IsMinSmi(constraint())) {
+ min = constraint()->min();
+ } else if (IsMinSmi(constraint()) && !IsMinSmi(value_range)) {
+ min = value_range->min();
+ } else if ((value_range != NULL) &&
+ IsEqual(constraint()->min(), value_range->min())) {
+ min = constraint()->min();
+ } else {
+ if (value_range != NULL) {
+ RangeBoundary canonical_a =
+ CanonicalizeBoundary(constraint()->min(),
+ RangeBoundary::OverflowedMinSmi());
+ RangeBoundary canonical_b =
+ CanonicalizeBoundary(value_range->min(),
+ RangeBoundary::OverflowedMinSmi());
+
+ do {
+ if (DependOnSameSymbol(canonical_a, canonical_b)) {
+ min = (canonical_a.offset() <= canonical_b.offset()) ? canonical_b
+ : canonical_a;
+ }
+ } while (CanonicalizeMinBoundary(&canonical_a) ||
+ CanonicalizeMinBoundary(&canonical_b));
+ }
+
+ if (min.IsUnknown()) {
+ min = RangeBoundary::Max(Range::ConstantMin(value_range),
+ Range::ConstantMin(constraint()));
+ }
+ }
+
+ if (IsMaxSmi(value_range) && !IsMaxSmi(constraint())) {
+ max = constraint()->max();
+ } else if (IsMaxSmi(constraint()) && !IsMaxSmi(value_range)) {
+ max = value_range->max();
+ } else if ((value_range != NULL) &&
+ IsEqual(constraint()->max(), value_range->max())) {
+ max = constraint()->max();
+ } else {
+ if (value_range != NULL) {
+ RangeBoundary canonical_b =
+ CanonicalizeBoundary(value_range->max(),
+ RangeBoundary::OverflowedMaxSmi());
+ RangeBoundary canonical_a =
+ CanonicalizeBoundary(constraint()->max(),
+ RangeBoundary::OverflowedMaxSmi());
+
+ do {
+ if (DependOnSameSymbol(canonical_a, canonical_b)) {
+ max = (canonical_a.offset() <= canonical_b.offset()) ? canonical_a
+ : canonical_b;
+ break;
+ }
+ } while (CanonicalizeMaxBoundary(&canonical_a) ||
+ CanonicalizeMaxBoundary(&canonical_b));
+ }
+
+ if (max.IsUnknown()) {
+ max = RangeBoundary::Min(Range::ConstantMax(value_range),
+ Range::ConstantMax(constraint()));
+ }
+ }
+
+ range_ = new Range(min, max);
}
-bool PhiInstr::InferRange(RangeOperator op) {
+void LoadFieldInstr::InferRange() {
+ if ((range_ == NULL) &&
+ ((recognized_kind() == MethodRecognizer::kObjectArrayLength) ||
+ (recognized_kind() == MethodRecognizer::kImmutableArrayLength))) {
+ range_ = new Range(RangeBoundary::FromConstant(0),
+ RangeBoundary::FromConstant(Array::kMaxElements));
+ return;
+ }
+ Definition::InferRange();
+}
+
+
+void PhiInstr::InferRange() {
RangeBoundary new_min;
RangeBoundary new_max;
for (intptr_t i = 0; i < InputCount(); i++) {
Range* input_range = InputAt(i)->definition()->range();
if (input_range == NULL) {
- continue;
+ range_ = Range::Unknown();
+ return;
}
if (new_min.IsUnknown()) {
@@ -2135,75 +2400,162 @@
ASSERT(new_min.IsUnknown() == new_max.IsUnknown());
if (new_min.IsUnknown()) {
range_ = Range::Unknown();
- return false;
+ return;
}
- if (op == Definition::kRangeWiden) {
- // Apply widening operator.
- new_min = RangeBoundary::WidenMin(range_->min(), new_min);
- new_max = RangeBoundary::WidenMax(range_->max(), new_max);
- } else if (op == Definition::kRangeNarrow) {
- // Apply narrowing operator.
- new_min = RangeBoundary::NarrowMin(range_->min(), new_min);
- new_max = RangeBoundary::NarrowMax(range_->max(), new_max);
- }
-
- return Range::Update(&range_, new_min, new_max);
+ range_ = new Range(new_min, new_max);
}
-bool BinarySmiOpInstr::InferRange(RangeOperator op) {
- Range* left_range = left()->definition()->range();
+static bool SymbolicSub(const RangeBoundary& a,
+ const RangeBoundary& b,
+ RangeBoundary* result) {
+ if (a.IsSymbol() && b.IsConstant() && !b.Overflowed()) {
+ const intptr_t offset = a.offset() - b.value();
+ if (!Smi::IsValid(offset)) return false;
+
+ *result = RangeBoundary::FromDefinition(a.symbol(), offset);
+ return true;
+ }
+ return false;
+}
+
+
+static bool SymbolicAdd(const RangeBoundary& a,
+ const RangeBoundary& b,
+ RangeBoundary* result) {
+ if (a.IsSymbol() && b.IsConstant() && !b.Overflowed()) {
+ const intptr_t offset = a.offset() + b.value();
+ if (!Smi::IsValid(offset)) return false;
+
+ *result = RangeBoundary::FromDefinition(a.symbol(), offset);
+ return true;
+ } else if (b.IsSymbol() && a.IsConstant() && !a.Overflowed()) {
+ const intptr_t offset = b.offset() + a.value();
+ if (!Smi::IsValid(offset)) return false;
+
+ *result = RangeBoundary::FromDefinition(b.symbol(), offset);
+ return true;
+ }
+ return false;
+}
+
+
+static bool IsArrayLength(Definition* defn) {
+ LoadFieldInstr* load = defn->AsLoadField();
+ return (load != NULL) &&
+ ((load->recognized_kind() == MethodRecognizer::kObjectArrayLength) ||
+ (load->recognized_kind() == MethodRecognizer::kImmutableArrayLength));
+}
+
+
+static bool IsLengthOf(Definition* defn, Definition* array) {
+ return IsArrayLength(defn) &&
+ (defn->AsLoadField()->value()->definition() == array);
+}
+
+
+void BinarySmiOpInstr::InferRange() {
+ // TODO(vegorov): canonicalize BinarySmiOp to always have constant on the
+ // right and a non-constant on the left.
+ Definition* left_defn = left()->definition();
+
+ Range* left_range = left_defn->range();
Range* right_range = right()->definition()->range();
if ((left_range == NULL) || (right_range == NULL)) {
- return Range::Update(&range_,
- RangeBoundary::MinSmi(),
- RangeBoundary::MaxSmi());
+ range_ = new Range(RangeBoundary::MinSmi(), RangeBoundary::MaxSmi());
+ return;
}
- RangeBoundary new_min;
- RangeBoundary new_max;
+
+ // If left is a l
+ RangeBoundary left_min =
+ IsArrayLength(left_defn) ?
+ RangeBoundary::FromDefinition(left_defn) : left_range->min();
+
+ RangeBoundary left_max =
+ IsArrayLength(left_defn) ?
+ RangeBoundary::FromDefinition(left_defn) : left_range->max();
+
+ RangeBoundary min;
+ RangeBoundary max;
switch (op_kind()) {
case Token::kADD:
- new_min =
- RangeBoundary::Add(Range::ConstantMin(left_range),
- Range::ConstantMin(right_range),
- RangeBoundary::OverflowedMinSmi());
- new_max =
- RangeBoundary::Add(Range::ConstantMax(left_range),
- Range::ConstantMax(right_range),
- RangeBoundary::OverflowedMaxSmi());
+ if (!SymbolicAdd(left_min, right_range->min(), &min)) {
+ min =
+ RangeBoundary::Add(Range::ConstantMin(left_range),
+ Range::ConstantMin(right_range),
+ RangeBoundary::OverflowedMinSmi());
+ }
+
+ if (!SymbolicAdd(left_max, right_range->max(), &max)) {
+ max =
+ RangeBoundary::Add(Range::ConstantMax(right_range),
+ Range::ConstantMax(left_range),
+ RangeBoundary::OverflowedMaxSmi());
+ }
break;
case Token::kSUB:
- new_min =
- RangeBoundary::Sub(Range::ConstantMin(left_range),
- Range::ConstantMax(right_range),
- RangeBoundary::OverflowedMinSmi());
- new_max =
- RangeBoundary::Sub(Range::ConstantMax(left_range),
- Range::ConstantMin(right_range),
- RangeBoundary::OverflowedMaxSmi());
+ if (!SymbolicSub(left_min, right_range->max(), &min)) {
+ min =
+ RangeBoundary::Sub(Range::ConstantMin(left_range),
+ Range::ConstantMax(right_range),
+ RangeBoundary::OverflowedMinSmi());
+ }
+
+ if (!SymbolicSub(left_max, right_range->min(), &max)) {
+ max =
+ RangeBoundary::Sub(Range::ConstantMax(left_range),
+ Range::ConstantMin(right_range),
+ RangeBoundary::OverflowedMaxSmi());
+ }
break;
default:
if (range_ == NULL) {
range_ = Range::Unknown();
- return true;
}
- return false;
+ return;
}
- ASSERT(!new_min.IsUnknown() && !new_max.IsUnknown());
- set_overflow(new_min.Overflowed() || new_max.Overflowed());
+ ASSERT(!min.IsUnknown() && !max.IsUnknown());
+ set_overflow(min.LowerBound().Overflowed() || max.UpperBound().Overflowed());
- if (op == Definition::kRangeNarrow) {
- new_min = new_min.Clamp();
- new_max = new_max.Clamp();
+ if (min.IsConstant()) min.Clamp();
+ if (max.IsConstant()) max.Clamp();
+
+ range_ = new Range(min, max);
+}
+
+
+bool CheckArrayBoundInstr::IsRedundant() {
+ // Check that array has an immutable length.
+ if ((array_type() != kArrayCid) && (array_type() != kImmutableArrayCid)) {
+ return false;
}
- return Range::Update(&range_, new_min, new_max);
+ Range* index_range = index()->definition()->range();
+
+ // Range of the index is unknown can't decide if the check is redundant.
+ if (index_range == NULL) return false;
+
+ // Range of the index is not positive. Check can't be redundant.
+ if (Range::ConstantMin(index_range).value() < 0) return false;
+
+ RangeBoundary max = CanonicalizeBoundary(index_range->max(),
+ RangeBoundary::OverflowedMaxSmi());
+ do {
+ if (max.IsSymbol() &&
+ (max.offset() < 0) &&
+ IsLengthOf(max.symbol(), array()->definition())) {
+ return true;
+ }
+ } while (CanonicalizeMaxBoundary(&max));
+
+ // Failed to prove that maximum is bounded with array length.
+ return false;
}
diff --git a/runtime/vm/intermediate_language.h b/runtime/vm/intermediate_language.h
index 52d2cfa..646eeba 100644
--- a/runtime/vm/intermediate_language.h
+++ b/runtime/vm/intermediate_language.h
@@ -36,11 +36,9 @@
V(_GrowableObjectArray, get:length, GrowableArrayLength) \
V(_GrowableObjectArray, get:capacity, GrowableArrayCapacity) \
V(_StringBase, get:length, StringBaseLength) \
- V(_StringBase, isEmpty, StringBaseIsEmpty) \
+ V(_StringBase, get:isEmpty, StringBaseIsEmpty) \
V(_IntegerImplementation, toDouble, IntegerToDouble) \
- V(_Double, toDouble, DoubleToDouble) \
V(_Double, toInt, DoubleToInteger) \
- V(_IntegerImplementation, toInt, IntegerToInteger) \
V(::, sqrt, MathSqrt) \
// Class that recognizes the name and owner of a function and returns the
@@ -248,7 +246,6 @@
M(BinarySmiOp) \
M(UnarySmiOp) \
M(CheckStackOverflow) \
- M(DoubleToDouble) \
M(SmiToDouble) \
M(DoubleToInteger) \
M(CheckClass) \
@@ -519,6 +516,8 @@
friend class UnboxDoubleInstr;
friend class BinaryDoubleOpInstr;
friend class BinaryMintOpInstr;
+ friend class BinarySmiOpInstr;
+ friend class UnarySmiOpInstr;
friend class ShiftMintOpInstr;
friend class UnaryMintOpInstr;
friend class MathSqrtInstr;
@@ -1002,6 +1001,7 @@
virtual void PrintTo(BufferFormatter* f) const;
private:
+ friend class FlowGraph; // Access to predecessor_ when inlining.
virtual void ClearPredecessors() { predecessor_ = NULL; }
virtual void AddPredecessor(BlockEntryInstr* predecessor) {
ASSERT(predecessor_ == NULL);
@@ -1109,9 +1109,7 @@
// - unknown sentinel
Object& constant_value() const { return constant_value_; }
- enum RangeOperator { kRangeInit, kRangeWiden, kRangeNarrow };
-
- virtual bool InferRange(RangeOperator op);
+ virtual void InferRange();
Range* range() const { return range_; }
@@ -1121,6 +1119,8 @@
virtual Definition* Canonicalize();
protected:
+ friend class RangeAnalysis;
+
Range* range_;
private:
@@ -1146,8 +1146,7 @@
: block_(block),
inputs_(num_inputs),
is_alive_(false),
- representation_(kTagged),
- has_inputs_without_range_(true) {
+ representation_(kTagged) {
for (intptr_t i = 0; i < num_inputs; ++i) {
inputs_.Add(NULL);
}
@@ -1205,7 +1204,7 @@
virtual void PrintTo(BufferFormatter* f) const;
- virtual bool InferRange(RangeOperator op);
+ virtual void InferRange();
private:
friend class ConstantPropagator; // Direct access to inputs_.
@@ -1215,10 +1214,6 @@
bool is_alive_;
Representation representation_;
- // Used to determine an interation of a range analysis after all phi inputs
- // were initialized to apply widening.
- bool has_inputs_without_range_;
-
DISALLOW_COPY_AND_ASSIGN(PhiInstr);
};
@@ -1483,8 +1478,8 @@
class BranchInstr : public ControlInstruction {
public:
- explicit BranchInstr(ComparisonInstr* comparison)
- : comparison_(comparison) { }
+ explicit BranchInstr(ComparisonInstr* comparison, bool is_checked = false)
+ : comparison_(comparison), is_checked_(is_checked) { }
DECLARE_INSTRUCTION(Branch)
@@ -1499,6 +1494,8 @@
ComparisonInstr* comparison() const { return comparison_; }
void set_comparison(ComparisonInstr* value) { comparison_ = value; }
+ bool is_checked() const { return is_checked_; }
+
virtual LocationSummary* locs();
virtual intptr_t DeoptimizationTarget() const;
virtual Representation RequiredInputRepresentation(intptr_t i) const;
@@ -1513,6 +1510,7 @@
private:
ComparisonInstr* comparison_;
+ const bool is_checked_;
DISALLOW_COPY_AND_ASSIGN(BranchInstr);
};
@@ -1582,9 +1580,7 @@
return RangeBoundary(kConstant, val, 0);
}
- static RangeBoundary FromDefinition(Definition* defn, intptr_t offs = 0) {
- return RangeBoundary(kSymbol, reinterpret_cast<intptr_t>(defn), offs);
- }
+ static RangeBoundary FromDefinition(Definition* defn, intptr_t offs = 0);
static RangeBoundary MinSmi() {
return FromConstant(Smi::kMinValue);
@@ -1605,19 +1601,9 @@
return FromConstant(Smi::kMaxValue + 1);
}
- static RangeBoundary Min(RangeBoundary a, RangeBoundary b) {
- const intptr_t min_a = a.LowerBound().value();
- const intptr_t min_b = b.LowerBound().value();
+ static RangeBoundary Min(RangeBoundary a, RangeBoundary b);
- return RangeBoundary::FromConstant(Utils::Minimum(min_a, min_b));
- }
-
- static RangeBoundary Max(RangeBoundary a, RangeBoundary b) {
- const intptr_t max_a = a.UpperBound().value();
- const intptr_t max_b = b.UpperBound().value();
-
- return RangeBoundary::FromConstant(Utils::Maximum(max_a, max_b));
- }
+ static RangeBoundary Max(RangeBoundary a, RangeBoundary b);
bool Overflowed() const {
return !Smi::IsValid(value());
@@ -1649,40 +1635,15 @@
return reinterpret_cast<Definition*>(value_);
}
+ intptr_t offset() const {
+ return offset_;
+ }
+
RangeBoundary LowerBound() const;
RangeBoundary UpperBound() const;
- static RangeBoundary WidenMin(const RangeBoundary& old_min,
- const RangeBoundary& new_min) {
- if (new_min.LowerBound().value() < old_min.LowerBound().value()) {
- return OverflowedMinSmi();
- }
- return old_min;
- }
-
- static RangeBoundary WidenMax(const RangeBoundary& old_max,
- const RangeBoundary& new_max) {
- if (new_max.UpperBound().value() > old_max.UpperBound().value()) {
- return OverflowedMaxSmi();
- }
- return old_max;
- }
-
- static RangeBoundary NarrowMin(const RangeBoundary& old_min,
- const RangeBoundary& new_min) {
- ASSERT(old_min.IsConstant());
- ASSERT(new_min.IsConstant());
- return (old_min.value() == kMinusInfinity) ? new_min
- : Min(old_min, new_min);
- }
-
- static RangeBoundary NarrowMax(const RangeBoundary& old_max,
- const RangeBoundary& new_max) {
- return (old_max.value() == kPlusInfinity) ? new_max
- : Max(old_max, new_max);
- }
-
void PrintTo(BufferFormatter* f) const;
+ const char* ToCString() const;
static RangeBoundary Add(const RangeBoundary& a,
const RangeBoundary& b,
@@ -1736,25 +1697,6 @@
return min_.Equals(other->min_) && max_.Equals(other->max_);
}
- static bool Update(Range** range_slot,
- const RangeBoundary& min,
- const RangeBoundary& max) {
- if (*range_slot == NULL) {
- *range_slot = new Range(min, max);
- return true;
- }
-
- Range* range = *range_slot;
- if (range->min_.Equals(min) && range->max_.Equals(max)) {
- return false;
- }
-
- range->min_ = min;
- range->max_ = max;
-
- return true;
- }
-
static RangeBoundary ConstantMin(Range* range) {
if (range == NULL) return RangeBoundary::MinSmi();
return range->min().LowerBound();
@@ -1801,7 +1743,7 @@
Value* value() const { return inputs_[0]; }
Range* constraint() const { return constraint_; }
- virtual bool InferRange(RangeOperator op);
+ virtual void InferRange();
void AddDependency(Definition* defn) {
Value* val = new Value(defn);
@@ -1854,7 +1796,7 @@
virtual bool AttributesEqual(Instruction* other) const;
virtual bool AffectedBySideEffect() const { return false; }
- virtual bool InferRange(RangeOperator op);
+ virtual void InferRange();
private:
const Object& value_;
@@ -1913,7 +1855,8 @@
virtual bool AffectedBySideEffect() const { return false; }
virtual bool AttributesEqual(Instruction* other) const;
- virtual intptr_t ResultCid() const { return kDynamicCid; }
+ virtual intptr_t ResultCid() const { return value()->ResultCid(); }
+ virtual intptr_t GetPropagatedCid();
virtual Definition* Canonicalize();
@@ -2313,10 +2256,12 @@
virtual bool CanDeoptimize() const {
return (receiver_class_id() != kDoubleCid)
+ && (receiver_class_id() != kMintCid)
&& (receiver_class_id() != kSmiCid);
}
virtual bool HasSideEffect() const {
return (receiver_class_id() != kDoubleCid)
+ && (receiver_class_id() != kMintCid)
&& (receiver_class_id() != kSmiCid);
}
@@ -2695,6 +2640,10 @@
virtual Representation representation() const;
+ virtual bool AttributesEqual(Instruction* other) const;
+
+ virtual bool AffectedBySideEffect() const { return true; }
+
private:
const intptr_t class_id_;
@@ -2991,7 +2940,8 @@
: offset_in_bytes_(offset_in_bytes),
type_(type),
result_cid_(kDynamicCid),
- immutable_(immutable) {
+ immutable_(immutable),
+ recognized_kind_(MethodRecognizer::kUnknown) {
ASSERT(value != NULL);
ASSERT(type.IsZoneHandle()); // May be null if field is not an instance.
inputs_[0] = value;
@@ -3017,12 +2967,24 @@
virtual bool AffectedBySideEffect() const { return !immutable_; }
+ virtual void InferRange();
+
+ void set_recognized_kind(MethodRecognizer::Kind kind) {
+ recognized_kind_ = kind;
+ }
+
+ MethodRecognizer::Kind recognized_kind() const {
+ return recognized_kind_;
+ }
+
private:
const intptr_t offset_in_bytes_;
const AbstractType& type_;
intptr_t result_cid_;
const bool immutable_;
+ MethodRecognizer::Kind recognized_kind_;
+
DISALLOW_COPY_AND_ASSIGN(LoadFieldInstr);
};
@@ -3740,6 +3702,7 @@
ASSERT(right != NULL);
inputs_[0] = left;
inputs_[1] = right;
+ deopt_id_ = instance_call->deopt_id();
}
Value* left() const { return inputs_[0]; }
@@ -3772,7 +3735,7 @@
void PrintTo(BufferFormatter* f) const;
- virtual bool InferRange(RangeOperator op);
+ virtual void InferRange();
private:
const Token::Kind op_kind_;
@@ -3789,17 +3752,16 @@
UnarySmiOpInstr(Token::Kind op_kind,
InstanceCallInstr* instance_call,
Value* value)
- : op_kind_(op_kind), instance_call_(instance_call) {
+ : op_kind_(op_kind) {
ASSERT((op_kind == Token::kNEGATE) || (op_kind == Token::kBIT_NOT));
ASSERT(value != NULL);
inputs_[0] = value;
+ deopt_id_ = instance_call->deopt_id();
}
Value* value() const { return inputs_[0]; }
Token::Kind op_kind() const { return op_kind_; }
- InstanceCallInstr* instance_call() const { return instance_call_; }
-
virtual void PrintOperandsTo(BufferFormatter* f) const;
DECLARE_INSTRUCTION(UnarySmiOp)
@@ -3813,7 +3775,6 @@
private:
const Token::Kind op_kind_;
- InstanceCallInstr* instance_call_;
DISALLOW_COPY_AND_ASSIGN(UnarySmiOpInstr);
};
@@ -3842,34 +3803,6 @@
};
-class DoubleToDoubleInstr : public TemplateDefinition<1> {
- public:
- DoubleToDoubleInstr(Value* value, InstanceCallInstr* instance_call)
- : instance_call_(instance_call) {
- ASSERT(value != NULL);
- inputs_[0] = value;
- }
-
- Value* value() const { return inputs_[0]; }
-
- InstanceCallInstr* instance_call() const { return instance_call_; }
-
- DECLARE_INSTRUCTION(DoubleToDouble)
- virtual RawAbstractType* CompileType() const;
-
- virtual bool CanDeoptimize() const { return true; }
-
- virtual bool HasSideEffect() const { return false; }
-
- virtual intptr_t ResultCid() const { return kDoubleCid; }
-
- private:
- InstanceCallInstr* instance_call_;
-
- DISALLOW_COPY_AND_ASSIGN(DoubleToDoubleInstr);
-};
-
-
class SmiToDoubleInstr : public TemplateDefinition<0> {
public:
explicit SmiToDoubleInstr(InstanceCallInstr* instance_call)
@@ -3929,12 +3862,7 @@
public:
CheckClassInstr(Value* value,
intptr_t deopt_id,
- const ICData& unary_checks)
- : unary_checks_(unary_checks) {
- ASSERT(value != NULL);
- inputs_[0] = value;
- deopt_id_ = deopt_id;
- }
+ const ICData& unary_checks);
DECLARE_INSTRUCTION(CheckClass)
virtual RawAbstractType* CompileType() const;
@@ -4027,6 +3955,8 @@
intptr_t array_type() const { return array_type_; }
+ bool IsRedundant();
+
private:
intptr_t array_type_;
diff --git a/runtime/vm/intermediate_language_ia32.cc b/runtime/vm/intermediate_language_ia32.cc
index 7fcadfd..b1e67f4 100644
--- a/runtime/vm/intermediate_language_ia32.cc
+++ b/runtime/vm/intermediate_language_ia32.cc
@@ -191,26 +191,35 @@
}
+static void EmitAssertBoolean(Register reg,
+ intptr_t token_pos,
+ LocationSummary* locs,
+ FlowGraphCompiler* compiler) {
+ // Check that the type of the value is allowed in conditional context.
+ // Call the runtime if the object is not bool::true or bool::false.
+ ASSERT(locs->always_calls());
+ Label done;
+ __ CompareObject(reg, compiler->bool_true());
+ __ j(EQUAL, &done, Assembler::kNearJump);
+ __ CompareObject(reg, compiler->bool_false());
+ __ j(EQUAL, &done, Assembler::kNearJump);
+
+ __ pushl(reg); // Push the source object.
+ compiler->GenerateCallRuntime(token_pos,
+ kConditionTypeErrorRuntimeEntry,
+ locs);
+ // We should never return here.
+ __ int3();
+ __ Bind(&done);
+}
+
+
void AssertBooleanInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
Register obj = locs()->in(0).reg();
Register result = locs()->out().reg();
if (!is_eliminated()) {
- // Check that the type of the value is allowed in conditional context.
- // Call the runtime if the object is not bool::true or bool::false.
- Label done;
- __ CompareObject(obj, compiler->bool_true());
- __ j(EQUAL, &done, Assembler::kNearJump);
- __ CompareObject(obj, compiler->bool_false());
- __ j(EQUAL, &done, Assembler::kNearJump);
-
- __ pushl(obj); // Push the source object.
- compiler->GenerateCallRuntime(token_pos(),
- kConditionTypeErrorRuntimeEntry,
- locs());
- // We should never return here.
- __ int3();
- __ Bind(&done);
+ EmitAssertBoolean(obj, token_pos(), locs(), compiler);
}
ASSERT(obj == result);
}
@@ -332,7 +341,7 @@
deopt_id,
token_pos);
}
- const String& operator_name = String::ZoneHandle(Symbols::New("=="));
+ const String& operator_name = String::ZoneHandle(Symbols::EqualOperator());
const int kNumberOfArguments = 2;
const Array& kNoArgumentNames = Array::Handle();
const int kNumArgumentsChecked = 2;
@@ -457,6 +466,9 @@
__ jmp(&done);
}
} else {
+ if (branch->is_checked()) {
+ EmitAssertBoolean(EAX, token_pos, locs, compiler);
+ }
__ CompareObject(EAX, compiler->bool_true());
branch->EmitBranchOnCondition(compiler, cond);
}
@@ -777,6 +789,9 @@
token_pos(),
Token::kEQ, // kNE reverse occurs at branch.
locs());
+ if (branch->is_checked()) {
+ EmitAssertBoolean(EAX, token_pos(), locs(), compiler);
+ }
Condition branch_condition = (kind() == Token::kNE) ? NOT_EQUAL : EQUAL;
__ CompareObject(EAX, compiler->bool_true());
branch->EmitBranchOnCondition(compiler, branch_condition);
@@ -964,7 +979,15 @@
class_id(), array, Smi::Cast(index.constant()).Value());
if (representation() == kUnboxedDouble) {
- __ movsd(locs()->out().xmm_reg(), element_address);
+ if (class_id() == kFloat32ArrayCid) {
+ // Load single precision float.
+ __ movss(locs()->out().xmm_reg(), element_address);
+ // Promote to double.
+ __ cvtss2sd(locs()->out().xmm_reg(), locs()->out().xmm_reg());
+ } else {
+ ASSERT(class_id() == kFloat64ArrayCid);
+ __ movsd(locs()->out().xmm_reg(), element_address);
+ }
} else {
__ movl(locs()->out().reg(), element_address);
}
@@ -973,9 +996,12 @@
LocationSummary* StoreIndexedInstr::MakeLocationSummary() const {
const intptr_t kNumInputs = 3;
- const intptr_t kNumTemps = 0;
+ const intptr_t kNumTemps = class_id() == kFloat32ArrayCid ? 1 : 0;
LocationSummary* locs =
new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall);
+ if (class_id() == kFloat32ArrayCid) {
+ locs->set_temp(0, Location::RequiresXmmRegister());
+ }
locs->set_in(0, Location::RequiresRegister());
locs->set_in(1, CanBeImmediateIndex(index())
? Location::RegisterOrConstant(index())
@@ -1002,6 +1028,14 @@
FlowGraphCompiler::ElementAddressForIntIndex(
class_id(), array, Smi::Cast(index.constant()).Value());
+ if (class_id() == kFloat32ArrayCid) {
+ // Convert to single precision.
+ __ cvtsd2ss(locs()->temp(0).xmm_reg(), locs()->in(2).xmm_reg());
+ // Store.
+ __ movss(element_address, locs()->temp(0).xmm_reg());
+ return;
+ }
+
if (class_id() == kFloat64ArrayCid) {
__ movsd(element_address, locs()->in(2).xmm_reg());
return;
@@ -1555,7 +1589,7 @@
ASSERT(left == result);
Label* deopt = NULL;
if (CanDeoptimize()) {
- deopt = compiler->AddDeoptStub(instance_call()->deopt_id(),
+ deopt = compiler->AddDeoptStub(deopt_id(),
kDeoptBinarySmiOp);
}
@@ -1728,7 +1762,7 @@
__ pushl(temp);
__ pushl(right);
compiler->GenerateStaticCall(
- instance_call()->deopt_id(),
+ deopt_id(),
instance_call()->token_pos(),
target,
kArgumentCount,
@@ -1942,7 +1976,7 @@
ASSERT(value == locs()->out().reg());
switch (op_kind()) {
case Token::kNEGATE: {
- Label* deopt = compiler->AddDeoptStub(instance_call()->deopt_id(),
+ Label* deopt = compiler->AddDeoptStub(deopt_id(),
kDeoptUnaryOp);
__ negl(value);
__ j(OVERFLOW, deopt);
@@ -1958,33 +1992,6 @@
}
-LocationSummary* DoubleToDoubleInstr::MakeLocationSummary() const {
- const intptr_t kNumInputs = 1;
- const intptr_t kNumTemps = 1;
- LocationSummary* locs =
- new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall);
- locs->set_in(0, Location::RequiresRegister());
- locs->set_temp(0, Location::RequiresRegister());
- locs->set_out(Location::SameAsFirstInput());
- return locs;
-}
-
-
-void DoubleToDoubleInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
- Register value = locs()->in(0).reg();
- Register result = locs()->out().reg();
-
- Label* deopt = compiler->AddDeoptStub(instance_call()->deopt_id(),
- kDeoptDoubleToDouble);
- Register temp = locs()->temp(0).reg();
- __ testl(value, Immediate(kSmiTagMask));
- __ j(ZERO, deopt); // Deoptimize if Smi.
- __ CompareClassId(value, kDoubleCid, temp);
- __ j(NOT_EQUAL, deopt); // Deoptimize if not Double.
- ASSERT(value == result);
-}
-
-
LocationSummary* SmiToDoubleInstr::MakeLocationSummary() const {
return MakeCallSummary(); // Calls a stub to allocate result.
}
@@ -2138,6 +2145,8 @@
void CheckClassInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+ ASSERT((unary_checks().GetReceiverClassIdAt(0) != kSmiCid) ||
+ (unary_checks().NumberOfChecks() > 1));
Register value = locs()->in(0).reg();
Register temp = locs()->temp(0).reg();
Label* deopt = compiler->AddDeoptStub(deopt_id(),
@@ -2213,12 +2222,15 @@
ASSERT((array_type() == kArrayCid) ||
(array_type() == kImmutableArrayCid) ||
(array_type() == kGrowableObjectArrayCid) ||
- (array_type() == kFloat64ArrayCid));
+ (array_type() == kFloat64ArrayCid) ||
+ (array_type() == kFloat32ArrayCid));
intptr_t length_offset = -1;
if (array_type() == kGrowableObjectArrayCid) {
length_offset = GrowableObjectArray::length_offset();
} else if (array_type() == kFloat64ArrayCid) {
length_offset = Float64Array::length_offset();
+ } else if (array_type() == kFloat32ArrayCid) {
+ length_offset = Float32Array::length_offset();
} else {
length_offset = Array::length_offset();
}
diff --git a/runtime/vm/intermediate_language_x64.cc b/runtime/vm/intermediate_language_x64.cc
index 336e932..be5de5f 100644
--- a/runtime/vm/intermediate_language_x64.cc
+++ b/runtime/vm/intermediate_language_x64.cc
@@ -199,26 +199,35 @@
}
+static void EmitAssertBoolean(Register reg,
+ intptr_t token_pos,
+ LocationSummary* locs,
+ FlowGraphCompiler* compiler) {
+ // Check that the type of the value is allowed in conditional context.
+ // Call the runtime if the object is not bool::true or bool::false.
+ ASSERT(locs->always_calls());
+ Label done;
+ __ CompareObject(reg, compiler->bool_true());
+ __ j(EQUAL, &done, Assembler::kNearJump);
+ __ CompareObject(reg, compiler->bool_false());
+ __ j(EQUAL, &done, Assembler::kNearJump);
+
+ __ pushq(reg); // Push the source object.
+ compiler->GenerateCallRuntime(token_pos,
+ kConditionTypeErrorRuntimeEntry,
+ locs);
+ // We should never return here.
+ __ int3();
+ __ Bind(&done);
+}
+
+
void AssertBooleanInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
Register obj = locs()->in(0).reg();
Register result = locs()->out().reg();
if (!is_eliminated()) {
- // Check that the type of the value is allowed in conditional context.
- // Call the runtime if the object is not bool::true or bool::false.
- Label done;
- __ CompareObject(obj, compiler->bool_true());
- __ j(EQUAL, &done, Assembler::kNearJump);
- __ CompareObject(obj, compiler->bool_false());
- __ j(EQUAL, &done, Assembler::kNearJump);
-
- __ pushq(obj); // Push the source object.
- compiler->GenerateCallRuntime(token_pos(),
- kConditionTypeErrorRuntimeEntry,
- locs());
- // We should never return here.
- __ int3();
- __ Bind(&done);
+ EmitAssertBoolean(obj, token_pos(), locs(), compiler);
}
ASSERT(obj == result);
}
@@ -330,7 +339,7 @@
deopt_id,
token_pos);
}
- const String& operator_name = String::ZoneHandle(Symbols::New("=="));
+ const String& operator_name = String::ZoneHandle(Symbols::EqualOperator());
const int kNumberOfArguments = 2;
const Array& kNoArgumentNames = Array::Handle();
const int kNumArgumentsChecked = 2;
@@ -455,6 +464,9 @@
__ jmp(&done);
}
} else {
+ if (branch->is_checked()) {
+ EmitAssertBoolean(RAX, token_pos, locs, compiler);
+ }
__ CompareObject(RAX, compiler->bool_true());
branch->EmitBranchOnCondition(compiler, cond);
}
@@ -732,6 +744,9 @@
token_pos(),
Token::kEQ, // kNE reverse occurs at branch.
locs());
+ if (branch->is_checked()) {
+ EmitAssertBoolean(RAX, token_pos(), locs(), compiler);
+ }
Condition branch_condition = (kind() == Token::kNE) ? NOT_EQUAL : EQUAL;
__ CompareObject(RAX, compiler->bool_true());
branch->EmitBranchOnCondition(compiler, branch_condition);
@@ -921,7 +936,15 @@
class_id(), array, Smi::Cast(index.constant()).Value());
if (representation() == kUnboxedDouble) {
- __ movsd(locs()->out().xmm_reg(), element_address);
+ if (class_id() == kFloat32ArrayCid) {
+ // Load single precision float.
+ __ movss(locs()->out().xmm_reg(), element_address);
+ // Promote to double.
+ __ cvtss2sd(locs()->out().xmm_reg(), locs()->out().xmm_reg());
+ } else {
+ ASSERT(class_id() == kFloat64ArrayCid);
+ __ movsd(locs()->out().xmm_reg(), element_address);
+ }
} else {
__ movq(locs()->out().reg(), element_address);
}
@@ -930,9 +953,12 @@
LocationSummary* StoreIndexedInstr::MakeLocationSummary() const {
const intptr_t kNumInputs = 3;
- const intptr_t kNumTemps = 0;
+ const intptr_t kNumTemps = class_id() == kFloat32ArrayCid ? 1 : 0;
LocationSummary* locs =
new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall);
+ if (class_id() == kFloat32ArrayCid) {
+ locs->set_temp(0, Location::RequiresXmmRegister());
+ }
locs->set_in(0, Location::RequiresRegister());
locs->set_in(1, CanBeImmediateIndex(index())
? Location::RegisterOrConstant(index())
@@ -958,6 +984,14 @@
FlowGraphCompiler::ElementAddressForIntIndex(
class_id(), array, Smi::Cast(index.constant()).Value());
+ if (class_id() == kFloat32ArrayCid) {
+ // Convert to single precision.
+ __ cvtsd2ss(locs()->temp(0).xmm_reg(), locs()->in(2).xmm_reg());
+ // Store.
+ __ movss(element_address, locs()->temp(0).xmm_reg());
+ return;
+ }
+
if (class_id() == kFloat64ArrayCid) {
__ movsd(element_address, locs()->in(2).xmm_reg());
return;
@@ -1526,7 +1560,7 @@
ASSERT(left == result);
Label* deopt = NULL;
if (CanDeoptimize()) {
- deopt = compiler->AddDeoptStub(instance_call()->deopt_id(),
+ deopt = compiler->AddDeoptStub(deopt_id(),
kDeoptBinarySmiOp);
}
@@ -1693,7 +1727,7 @@
__ pushq(temp);
__ pushq(right);
compiler->GenerateStaticCall(
- instance_call()->deopt_id(),
+ deopt_id(),
instance_call()->token_pos(),
target,
kArgumentCount,
@@ -1907,7 +1941,7 @@
ASSERT(value == locs()->out().reg());
switch (op_kind()) {
case Token::kNEGATE: {
- Label* deopt = compiler->AddDeoptStub(instance_call()->deopt_id(),
+ Label* deopt = compiler->AddDeoptStub(deopt_id(),
kDeoptUnaryOp);
__ negq(value);
__ j(OVERFLOW, deopt);
@@ -1923,32 +1957,6 @@
}
-LocationSummary* DoubleToDoubleInstr::MakeLocationSummary() const {
- const intptr_t kNumInputs = 1;
- const intptr_t kNumTemps = 0;
- LocationSummary* locs =
- new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall);
- locs->set_in(0, Location::RequiresRegister());
- locs->set_out(Location::SameAsFirstInput());
- return locs;
-}
-
-
-void DoubleToDoubleInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
- Register value = locs()->in(0).reg();
- Register result = locs()->out().reg();
-
- Label* deopt = compiler->AddDeoptStub(instance_call()->deopt_id(),
- kDeoptDoubleToDouble);
-
- __ testq(value, Immediate(kSmiTagMask));
- __ j(ZERO, deopt); // Deoptimize if Smi.
- __ CompareClassId(value, kDoubleCid);
- __ j(NOT_EQUAL, deopt); // Deoptimize if not Double.
- ASSERT(value == result);
-}
-
-
LocationSummary* SmiToDoubleInstr::MakeLocationSummary() const {
return MakeCallSummary(); // Calls a stub to allocate result.
}
@@ -2105,6 +2113,8 @@
void CheckClassInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+ ASSERT((unary_checks().GetReceiverClassIdAt(0) != kSmiCid) ||
+ (unary_checks().NumberOfChecks() > 1));
Register value = locs()->in(0).reg();
Register temp = locs()->temp(0).reg();
Label* deopt = compiler->AddDeoptStub(deopt_id(),
@@ -2180,12 +2190,15 @@
ASSERT((array_type() == kArrayCid) ||
(array_type() == kImmutableArrayCid) ||
(array_type() == kGrowableObjectArrayCid) ||
- (array_type() == kFloat64ArrayCid));
+ (array_type() == kFloat64ArrayCid) ||
+ (array_type() == kFloat32ArrayCid));
intptr_t length_offset = -1;
if (array_type() == kGrowableObjectArrayCid) {
length_offset = GrowableObjectArray::length_offset();
} else if (array_type() == kFloat64ArrayCid) {
length_offset = Float64Array::length_offset();
+ } else if (array_type() == kFloat32ArrayCid) {
+ length_offset = Float32Array::length_offset();
} else {
length_offset = Array::length_offset();
}
diff --git a/runtime/vm/intrinsifier.h b/runtime/vm/intrinsifier.h
index 7516dbb..d127750 100644
--- a/runtime/vm/intrinsifier.h
+++ b/runtime/vm/intrinsifier.h
@@ -48,11 +48,10 @@
V(_Double, -, Double_sub) \
V(_Double, *, Double_mul) \
V(_Double, /, Double_div) \
- V(_Double, toDouble, Double_toDouble) \
+ V(_Double, get:isNaN, Double_getIsNaN) \
+ V(_Double, get:isNegative, Double_getIsNegative) \
V(_Double, _mulFromInteger, Double_mulFromInteger) \
V(_Double, .fromInteger, Double_fromInteger) \
- V(_Double, isNaN, Double_isNaN) \
- V(_Double, isNegative, Double_isNegative) \
V(_Double, toInt, Double_toInt) \
V(_ObjectArray, ., ObjectArray_Allocate) \
V(_ObjectArray, get:length, Array_getLength) \
@@ -72,12 +71,12 @@
V(::, sin, Math_sin) \
V(::, cos, Math_cos) \
V(Object, ==, Object_equal) \
+ V(_FixedSizeArrayIterator, get:hasNext, FixedSizeArrayIterator_getHasNext) \
V(_FixedSizeArrayIterator, next, FixedSizeArrayIterator_next) \
- V(_FixedSizeArrayIterator, hasNext, FixedSizeArrayIterator_hasNext) \
+ V(_StringBase, get:hashCode, String_getHashCode) \
+ V(_StringBase, get:isEmpty, String_getIsEmpty) \
V(_StringBase, get:length, String_getLength) \
V(_StringBase, charCodeAt, String_charCodeAt) \
- V(_StringBase, hashCode, String_hashCode) \
- V(_StringBase, isEmpty, String_isEmpty) \
V(_ByteArrayBase, get:length, ByteArrayBase_getLength) \
V(_Int8Array, [], Int8Array_getIndexed) \
V(_Int8Array, []=, Int8Array_setIndexed) \
diff --git a/runtime/vm/intrinsifier_arm.cc b/runtime/vm/intrinsifier_arm.cc
index 111185b..9952aa9 100644
--- a/runtime/vm/intrinsifier_arm.cc
+++ b/runtime/vm/intrinsifier_arm.cc
@@ -235,10 +235,6 @@
}
-bool Intrinsifier::Double_toDouble(Assembler* assembler) {
- return false;
-}
-
bool Intrinsifier::Double_add(Assembler* assembler) {
return false;
}
@@ -269,12 +265,12 @@
}
-bool Intrinsifier::Double_isNaN(Assembler* assembler) {
+bool Intrinsifier::Double_getIsNaN(Assembler* assembler) {
return false;
}
-bool Intrinsifier::Double_isNegative(Assembler* assembler) {
+bool Intrinsifier::Double_getIsNegative(Assembler* assembler) {
return false;
}
@@ -304,7 +300,12 @@
}
-bool Intrinsifier::FixedSizeArrayIterator_hasNext(Assembler* assembler) {
+bool Intrinsifier::FixedSizeArrayIterator_getHasNext(Assembler* assembler) {
+ return false;
+}
+
+
+bool Intrinsifier::String_getHashCode(Assembler* assembler) {
return false;
}
@@ -319,12 +320,7 @@
}
-bool Intrinsifier::String_hashCode(Assembler* assembler) {
- return false;
-}
-
-
-bool Intrinsifier::String_isEmpty(Assembler* assembler) {
+bool Intrinsifier::String_getIsEmpty(Assembler* assembler) {
return false;
}
diff --git a/runtime/vm/intrinsifier_ia32.cc b/runtime/vm/intrinsifier_ia32.cc
index a6056ac..afdfff7 100644
--- a/runtime/vm/intrinsifier_ia32.cc
+++ b/runtime/vm/intrinsifier_ia32.cc
@@ -1042,31 +1042,100 @@
}
+static void Push64SmiOrMint(Assembler* assembler,
+ Register reg,
+ Register tmp,
+ Label* not_smi_or_mint) {
+ Label not_smi, done;
+ __ testl(reg, Immediate(kSmiTagMask));
+ __ j(NOT_ZERO, ¬_smi, Assembler::kNearJump);
+ __ SmiUntag(reg);
+ // Sign extend to 64 bit
+ __ movl(tmp, reg);
+ __ sarl(tmp, Immediate(31));
+ __ pushl(tmp);
+ __ pushl(reg);
+ __ jmp(&done);
+ __ Bind(¬_smi);
+ __ CompareClassId(reg, kMintCid, tmp);
+ __ j(NOT_EQUAL, not_smi_or_mint);
+ // Mint.
+ __ pushl(FieldAddress(reg, Mint::value_offset() + kWordSize));
+ __ pushl(FieldAddress(reg, Mint::value_offset()));
+ __ Bind(&done);
+}
+
+
static bool CompareIntegers(Assembler* assembler, Condition true_condition) {
- Label fall_through, true_label;
+ Label try_mint_smi, is_true, is_false, drop_two_fall_through, fall_through;
const Bool& bool_true = Bool::ZoneHandle(Bool::True());
const Bool& bool_false = Bool::ZoneHandle(Bool::False());
- TestBothArgumentsSmis(assembler, &fall_through);
+ TestBothArgumentsSmis(assembler, &try_mint_smi);
// EAX contains the right argument.
__ cmpl(Address(ESP, + 2 * kWordSize), EAX);
- __ j(true_condition, &true_label, Assembler::kNearJump);
+ __ j(true_condition, &is_true, Assembler::kNearJump);
+ __ Bind(&is_false);
__ LoadObject(EAX, bool_false);
__ ret();
- __ Bind(&true_label);
+ __ Bind(&is_true);
__ LoadObject(EAX, bool_true);
__ ret();
+
+ // 64-bit comparison
+ Condition hi_true_cond, hi_false_cond, lo_false_cond;
+ switch (true_condition) {
+ case LESS:
+ case LESS_EQUAL:
+ hi_true_cond = LESS;
+ hi_false_cond = GREATER;
+ lo_false_cond = (true_condition == LESS) ? ABOVE_EQUAL : ABOVE;
+ break;
+ case GREATER:
+ case GREATER_EQUAL:
+ hi_true_cond = GREATER;
+ hi_false_cond = LESS;
+ lo_false_cond = (true_condition == GREATER) ? BELOW_EQUAL : BELOW;
+ break;
+ default:
+ UNREACHABLE();
+ hi_true_cond = hi_false_cond = lo_false_cond = OVERFLOW;
+ }
+ __ Bind(&try_mint_smi);
+ // Note that EDX and ECX must be preserved in case we fall through to main
+ // method.
+ // EAX contains the right argument.
+ __ movl(EBX, Address(ESP, + 2 * kWordSize)); // Left argument.
+ // Push left as 64 bit integer.
+ Push64SmiOrMint(assembler, EBX, EDI, &fall_through);
+ // Push right as 64 bit integer.
+ Push64SmiOrMint(assembler, EAX, EDI, &drop_two_fall_through);
+ __ popl(EBX); // Right.LO.
+ __ popl(ECX); // Right.HI.
+ __ popl(EAX); // Left.LO.
+ __ popl(EDX); // Left.HI.
+ __ cmpl(EDX, ECX); // cmpl left.HI, right.HI.
+ __ j(hi_false_cond, &is_false, Assembler::kNearJump);
+ __ j(hi_true_cond, &is_true, Assembler::kNearJump);
+ __ cmpl(EAX, EBX); // cmpl left.LO, right.LO.
+ __ j(lo_false_cond, &is_false, Assembler::kNearJump);
+ // Else is true.
+ __ jmp(&is_true);
+
+ __ Bind(&drop_two_fall_through);
+ __ Drop(2);
__ Bind(&fall_through);
return false;
}
-bool Intrinsifier::Integer_lessThan(Assembler* assembler) {
+
+bool Intrinsifier::Integer_greaterThanFromInt(Assembler* assembler) {
return CompareIntegers(assembler, LESS);
}
-bool Intrinsifier::Integer_greaterThanFromInt(Assembler* assembler) {
- return CompareIntegers(assembler, LESS);
+bool Intrinsifier::Integer_lessThan(Assembler* assembler) {
+ return Integer_greaterThanFromInt(assembler);
}
@@ -1259,13 +1328,6 @@
}
-bool Intrinsifier::Double_toDouble(Assembler* assembler) {
- __ movl(EAX, Address(ESP, + 1 * kWordSize));
- __ ret();
- return true;
-}
-
-
// Expects left argument to be double (receiver). Right argument is unknown.
// Both arguments are on stack.
static bool DoubleArithmeticOperations(Assembler* assembler, Token::Kind kind) {
@@ -1365,7 +1427,7 @@
}
-bool Intrinsifier::Double_isNaN(Assembler* assembler) {
+bool Intrinsifier::Double_getIsNaN(Assembler* assembler) {
const Bool& bool_true = Bool::ZoneHandle(Bool::True());
const Bool& bool_false = Bool::ZoneHandle(Bool::False());
Label is_true;
@@ -1382,7 +1444,7 @@
}
-bool Intrinsifier::Double_isNegative(Assembler* assembler) {
+bool Intrinsifier::Double_getIsNegative(Assembler* assembler) {
const Bool& bool_true = Bool::ZoneHandle(Bool::True());
const Bool& bool_false = Bool::ZoneHandle(Bool::False());
Label is_false, is_true, is_zero;
@@ -1533,7 +1595,7 @@
// return _array[_pos++];
// }
// Intrinsify: return _array[_pos++];
-// TODO(srdjan): Throw a 'NoMoreElementsException' exception if the iterator
+// TODO(srdjan): Throw a 'StateError' exception if the iterator
// has no more elements.
bool Intrinsifier::FixedSizeArrayIterator_next(Assembler* assembler) {
Label fall_through;
@@ -1576,10 +1638,10 @@
// Class 'FixedSizeArrayIterator':
-// bool hasNext() {
+// bool get hasNext {
// return _length > _pos;
// }
-bool Intrinsifier::FixedSizeArrayIterator_hasNext(Assembler* assembler) {
+bool Intrinsifier::FixedSizeArrayIterator_getHasNext(Assembler* assembler) {
Label fall_through, is_true;
const Bool& bool_true = Bool::ZoneHandle(Bool::True());
const Bool& bool_false = Bool::ZoneHandle(Bool::False());
@@ -1606,6 +1668,19 @@
}
+bool Intrinsifier::String_getHashCode(Assembler* assembler) {
+ Label fall_through;
+ __ movl(EAX, Address(ESP, + 1 * kWordSize)); // String object.
+ __ movl(EAX, FieldAddress(EAX, String::hash_offset()));
+ __ cmpl(EAX, Immediate(0));
+ __ j(EQUAL, &fall_through, Assembler::kNearJump);
+ __ ret();
+ __ Bind(&fall_through);
+ // Hash not yet computed.
+ return false;
+}
+
+
bool Intrinsifier::String_getLength(Assembler* assembler) {
__ movl(EAX, Address(ESP, + 1 * kWordSize)); // String object.
__ movl(EAX, FieldAddress(EAX, String::length_offset()));
@@ -1636,20 +1711,7 @@
}
-bool Intrinsifier::String_hashCode(Assembler* assembler) {
- Label fall_through;
- __ movl(EAX, Address(ESP, + 1 * kWordSize)); // String object.
- __ movl(EAX, FieldAddress(EAX, String::hash_offset()));
- __ cmpl(EAX, Immediate(0));
- __ j(EQUAL, &fall_through, Assembler::kNearJump);
- __ ret();
- __ Bind(&fall_through);
- // Hash not yet computed.
- return false;
-}
-
-
-bool Intrinsifier::String_isEmpty(Assembler* assembler) {
+bool Intrinsifier::String_getIsEmpty(Assembler* assembler) {
Label is_true;
const Bool& bool_true = Bool::ZoneHandle(Bool::True());
const Bool& bool_false = Bool::ZoneHandle(Bool::False());
diff --git a/runtime/vm/intrinsifier_x64.cc b/runtime/vm/intrinsifier_x64.cc
index a1851a6..affbf67 100644
--- a/runtime/vm/intrinsifier_x64.cc
+++ b/runtime/vm/intrinsifier_x64.cc
@@ -1147,16 +1147,6 @@
}
-bool Intrinsifier::Double_toDouble(Assembler* assembler) {
- __ movq(RAX, Address(RSP, + 1 * kWordSize));
- __ ret();
- // Generate enough code to satisfy patchability constraint.
- intptr_t offset = __ CodeSize();
- __ nop(JumpPattern::InstructionLength() - offset);
- return true;
-}
-
-
// Expects left argument to be double (receiver). Right argument is unknown.
// Both arguments are on stack.
static bool DoubleArithmeticOperations(Assembler* assembler, Token::Kind kind) {
@@ -1256,7 +1246,7 @@
}
-bool Intrinsifier::Double_isNaN(Assembler* assembler) {
+bool Intrinsifier::Double_getIsNaN(Assembler* assembler) {
const Bool& bool_true = Bool::ZoneHandle(Bool::True());
const Bool& bool_false = Bool::ZoneHandle(Bool::False());
Label is_true;
@@ -1273,7 +1263,7 @@
}
-bool Intrinsifier::Double_isNegative(Assembler* assembler) {
+bool Intrinsifier::Double_getIsNegative(Assembler* assembler) {
const Bool& bool_true = Bool::ZoneHandle(Bool::True());
const Bool& bool_false = Bool::ZoneHandle(Bool::False());
Label is_false, is_true, is_zero;
@@ -1436,7 +1426,7 @@
// return _array[_pos++];
// }
// Intrinsify: return _array[_pos++];
-// TODO(srdjan): Throw a 'NoMoreElementsException' exception if the iterator
+// TODO(srdjan): Throw a 'StateError' exception if the iterator
// has no more elements.
bool Intrinsifier::FixedSizeArrayIterator_next(Assembler* assembler) {
Label fall_through;
@@ -1479,10 +1469,10 @@
// Class 'FixedSizeArrayIterator':
-// bool hasNext() {
+// bool get hasNext {
// return _length > _pos;
// }
-bool Intrinsifier::FixedSizeArrayIterator_hasNext(Assembler* assembler) {
+bool Intrinsifier::FixedSizeArrayIterator_getHasNext(Assembler* assembler) {
Label fall_through, is_true;
const Bool& bool_true = Bool::ZoneHandle(Bool::True());
const Bool& bool_false = Bool::ZoneHandle(Bool::False());
@@ -1509,6 +1499,19 @@
}
+bool Intrinsifier::String_getHashCode(Assembler* assembler) {
+ Label fall_through;
+ __ movq(RAX, Address(RSP, + 1 * kWordSize)); // String object.
+ __ movq(RAX, FieldAddress(RAX, String::hash_offset()));
+ __ cmpq(RAX, Immediate(0));
+ __ j(EQUAL, &fall_through, Assembler::kNearJump);
+ __ ret();
+ __ Bind(&fall_through);
+ // Hash not yet computed.
+ return false;
+}
+
+
bool Intrinsifier::String_getLength(Assembler* assembler) {
__ movq(RAX, Address(RSP, + 1 * kWordSize)); // String object.
__ movq(RAX, FieldAddress(RAX, String::length_offset()));
@@ -1539,20 +1542,7 @@
}
-bool Intrinsifier::String_hashCode(Assembler* assembler) {
- Label fall_through;
- __ movq(RAX, Address(RSP, + 1 * kWordSize)); // String object.
- __ movq(RAX, FieldAddress(RAX, String::hash_offset()));
- __ cmpq(RAX, Immediate(0));
- __ j(EQUAL, &fall_through, Assembler::kNearJump);
- __ ret();
- __ Bind(&fall_through);
- // Hash not yet computed.
- return false;
-}
-
-
-bool Intrinsifier::String_isEmpty(Assembler* assembler) {
+bool Intrinsifier::String_getIsEmpty(Assembler* assembler) {
Label is_true;
const Bool& bool_true = Bool::ZoneHandle(Bool::True());
const Bool& bool_false = Bool::ZoneHandle(Bool::False());
diff --git a/runtime/vm/object.cc b/runtime/vm/object.cc
index 4054051..b8cb196 100644
--- a/runtime/vm/object.cc
+++ b/runtime/vm/object.cc
@@ -37,12 +37,14 @@
DEFINE_FLAG(bool, generate_gdb_symbols, false,
"Generate symbols of generated dart functions for debugging with GDB");
-DEFINE_FLAG(bool, reject_named_argument_as_positional, false,
+DEFINE_FLAG(bool, reject_named_argument_as_positional, true,
"Enforce new rules for optional parameters and disallow passing of named "
"arguments to optional positional formal parameters");
DEFINE_FLAG(bool, show_internal_names, false,
"Show names of internal classes (e.g. \"OneByteString\") in error messages "
"instead of showing the corresponding interface names (e.g. \"String\")");
+DEFINE_FLAG(bool, trace_disabling_optimized_code, false,
+ "Trace disabling optimized code.");
DECLARE_FLAG(bool, trace_compiler);
DECLARE_FLAG(bool, eliminate_type_checks);
DECLARE_FLAG(bool, enable_type_checks);
@@ -3017,8 +3019,14 @@
void Function::SwitchToUnoptimizedCode() const {
ASSERT(HasOptimizedCode());
+ const Code& current_code = Code::Handle(CurrentCode());
+ if (FLAG_trace_disabling_optimized_code) {
+ OS::Print("Disabling optimized code: '%s' entry: %#"Px"\n",
+ ToFullyQualifiedCString(),
+ current_code.EntryPoint());
+ }
// Patch entry of the optimized code.
- CodePatcher::PatchEntry(Code::Handle(CurrentCode()));
+ CodePatcher::PatchEntry(current_code);
// Use previously compiled unoptimized code.
SetCode(Code::Handle(unoptimized_code()));
CodePatcher::RestoreEntry(Code::Handle(unoptimized_code()));
@@ -3361,10 +3369,21 @@
set_kind_tag(AbstractBit::update(value, raw_ptr()->kind_tag_));
}
+
void Function::set_is_inlinable(bool value) const {
set_kind_tag(InlinableBit::update(value, raw_ptr()->kind_tag_));
}
+
+bool Function::IsInlineable() const {
+ // '==' call is handled specially.
+ const String& equality_name = String::Handle(Symbols::EqualOperator());
+ return InlinableBit::decode(raw_ptr()->kind_tag_) &&
+ HasCode() &&
+ name() != equality_name.raw();
+}
+
+
intptr_t Function::NumParameters() const {
return num_fixed_parameters() + NumOptionalParameters();
}
@@ -6366,8 +6385,6 @@
aligned_size,
Heap::kCode);
NoGCScope no_gc;
- // TODO(iposva): Remove premarking once old and code spaces are merged.
- raw->SetMarkBit();
result ^= raw;
result.set_size(size);
}
@@ -6948,6 +6965,11 @@
}
+void Code::set_resolved_static_calls(const GrowableObjectArray& val) const {
+ StorePointer(&raw_ptr()->resolved_static_calls_, val.raw());
+}
+
+
const Code::Comments& Code::comments() const {
Comments* comments = new Code::Comments(raw_ptr()->comments_);
return *comments;
diff --git a/runtime/vm/object.h b/runtime/vm/object.h
index 5d9d3ea..b8bb4dd 100644
--- a/runtime/vm/object.h
+++ b/runtime/vm/object.h
@@ -1268,9 +1268,7 @@
bool is_abstract() const { return AbstractBit::decode(raw_ptr()->kind_tag_); }
void set_is_abstract(bool value) const;
- bool is_inlinable() const {
- return InlinableBit::decode(raw_ptr()->kind_tag_) && HasCode();
- }
+ bool IsInlineable() const;
void set_is_inlinable(bool value) const;
bool HasOptimizedCode() const;
@@ -2428,6 +2426,11 @@
void set_stackmaps(const Array& maps) const;
RawStackmap* GetStackmap(uword pc, Array* stackmaps, Stackmap* map) const;
+ RawGrowableObjectArray* resolved_static_calls() const {
+ return raw_ptr()->resolved_static_calls_;
+ }
+ void set_resolved_static_calls(const GrowableObjectArray& val) const;
+
class Comments : public ZoneAllocated {
public:
static Comments& New(intptr_t count);
diff --git a/runtime/vm/os_android.cc b/runtime/vm/os_android.cc
index 0d67d14..a33effe 100644
--- a/runtime/vm/os_android.cc
+++ b/runtime/vm/os_android.cc
@@ -28,17 +28,17 @@
const char* OS::GetTimeZoneName(int64_t seconds_since_epoch) {
tm decomposed;
bool succeeded = LocalTime(seconds_since_epoch, &decomposed);
- ASSERT(succeeded);
- return decomposed.tm_zone;
+ // If unsuccessful, return an empty string like V8 does.
+ return (succeeded && (decomposed.tm_zone != NULL)) ? decomposed.tm_zone : "";
}
int OS::GetTimeZoneOffsetInSeconds(int64_t seconds_since_epoch) {
tm decomposed;
bool succeeded = LocalTime(seconds_since_epoch, &decomposed);
- ASSERT(succeeded);
// Even if the offset was 24 hours it would still easily fit into 32 bits.
- return static_cast<int>(decomposed.tm_gmtoff);
+ // If unsuccessful, return zero like V8 does.
+ return succeeded ? static_cast<int>(decomposed.tm_gmtoff) : 0;
}
diff --git a/runtime/vm/os_linux.cc b/runtime/vm/os_linux.cc
index 0d67d14..a33effe 100644
--- a/runtime/vm/os_linux.cc
+++ b/runtime/vm/os_linux.cc
@@ -28,17 +28,17 @@
const char* OS::GetTimeZoneName(int64_t seconds_since_epoch) {
tm decomposed;
bool succeeded = LocalTime(seconds_since_epoch, &decomposed);
- ASSERT(succeeded);
- return decomposed.tm_zone;
+ // If unsuccessful, return an empty string like V8 does.
+ return (succeeded && (decomposed.tm_zone != NULL)) ? decomposed.tm_zone : "";
}
int OS::GetTimeZoneOffsetInSeconds(int64_t seconds_since_epoch) {
tm decomposed;
bool succeeded = LocalTime(seconds_since_epoch, &decomposed);
- ASSERT(succeeded);
// Even if the offset was 24 hours it would still easily fit into 32 bits.
- return static_cast<int>(decomposed.tm_gmtoff);
+ // If unsuccessful, return zero like V8 does.
+ return succeeded ? static_cast<int>(decomposed.tm_gmtoff) : 0;
}
diff --git a/runtime/vm/os_macos.cc b/runtime/vm/os_macos.cc
index a7ea2f0..94470b5 100644
--- a/runtime/vm/os_macos.cc
+++ b/runtime/vm/os_macos.cc
@@ -29,17 +29,17 @@
const char* OS::GetTimeZoneName(int64_t seconds_since_epoch) {
tm decomposed;
bool succeeded = LocalTime(seconds_since_epoch, &decomposed);
- ASSERT(succeeded);
- return decomposed.tm_zone;
+ // If unsuccessful, return an empty string like V8 does.
+ return (succeeded && (decomposed.tm_zone != NULL)) ? decomposed.tm_zone : "";
}
int OS::GetTimeZoneOffsetInSeconds(int64_t seconds_since_epoch) {
tm decomposed;
bool succeeded = LocalTime(seconds_since_epoch, &decomposed);
- ASSERT(succeeded);
// Even if the offset was 24 hours it would still easily fit into 32 bits.
- return static_cast<int>(decomposed.tm_gmtoff);
+ // If unsuccessful, return zero like V8 does.
+ return succeeded ? static_cast<int>(decomposed.tm_gmtoff) : 0;
}
diff --git a/runtime/vm/os_win.cc b/runtime/vm/os_win.cc
index 3434ef4..6f3f4c4 100644
--- a/runtime/vm/os_win.cc
+++ b/runtime/vm/os_win.cc
@@ -36,10 +36,14 @@
tm decomposed;
// LocalTime will set _tzname.
bool succeeded = LocalTime(seconds_since_epoch, &decomposed);
- ASSERT(succeeded);
- int inDaylightSavingsTime = decomposed.tm_isdst;
- ASSERT(inDaylightSavingsTime == 0 || inDaylightSavingsTime == 1);
- return _tzname[inDaylightSavingsTime];
+ if (succeeded) {
+ int inDaylightSavingsTime = decomposed.tm_isdst;
+ ASSERT(inDaylightSavingsTime == 0 || inDaylightSavingsTime == 1);
+ return _tzname[inDaylightSavingsTime];
+ } else {
+ // Return an empty string like V8 does.
+ return "";
+ }
}
@@ -47,17 +51,21 @@
tm decomposed;
// LocalTime will set _timezone.
bool succeeded = LocalTime(seconds_since_epoch, &decomposed);
- ASSERT(succeeded);
- int inDaylightSavingsTime = decomposed.tm_isdst;
- ASSERT(inDaylightSavingsTime == 0 || inDaylightSavingsTime == 1);
- // Dart and Windows disagree on the sign of the bias.
- int offset = static_cast<int>(-_timezone);
- if (inDaylightSavingsTime == 1) {
- static int daylight_bias = GetDaylightSavingBiasInSeconds();
- // Subtract because windows and Dart disagree on the sign.
- offset = offset - daylight_bias;
+ if (succeeded) {
+ int inDaylightSavingsTime = decomposed.tm_isdst;
+ ASSERT(inDaylightSavingsTime == 0 || inDaylightSavingsTime == 1);
+ // Dart and Windows disagree on the sign of the bias.
+ int offset = static_cast<int>(-_timezone);
+ if (inDaylightSavingsTime == 1) {
+ static int daylight_bias = GetDaylightSavingBiasInSeconds();
+ // Subtract because windows and Dart disagree on the sign.
+ offset = offset - daylight_bias;
+ }
+ return offset;
+ } else {
+ // Return zero like V8 does.
+ return 0;
}
- return offset;
}
diff --git a/runtime/vm/pages.cc b/runtime/vm/pages.cc
index 23538a7..e6c4b37 100644
--- a/runtime/vm/pages.cc
+++ b/runtime/vm/pages.cc
@@ -23,22 +23,24 @@
DEFINE_FLAG(bool, print_free_list_after_gc, false,
"Print free list statistics after a GC");
-HeapPage* HeapPage::Initialize(VirtualMemory* memory, bool is_executable) {
+HeapPage* HeapPage::Initialize(VirtualMemory* memory, PageType type) {
ASSERT(memory->size() > VirtualMemory::PageSize());
+ bool is_executable = (type == kExecutable);
memory->Commit(is_executable);
HeapPage* result = reinterpret_cast<HeapPage*>(memory->address());
result->memory_ = memory;
result->next_ = NULL;
result->used_ = 0;
+ result->executable_ = is_executable;
return result;
}
-HeapPage* HeapPage::Allocate(intptr_t size, bool is_executable) {
+HeapPage* HeapPage::Allocate(intptr_t size, PageType type) {
VirtualMemory* memory =
VirtualMemory::ReserveAligned(size, PageSpace::kPageAlignment);
- return Initialize(memory, is_executable);
+ return Initialize(memory, type);
}
@@ -87,12 +89,25 @@
void HeapPage::WriteProtect(bool read_only) {
- memory_->Protect(
- read_only ? VirtualMemory::kReadOnly : VirtualMemory::kReadWrite);
+ VirtualMemory::Protection prot;
+ if (read_only) {
+ if (executable_) {
+ prot = VirtualMemory::kReadExecute;
+ } else {
+ prot = VirtualMemory::kReadOnly;
+ }
+ } else {
+ if (executable_) {
+ prot = VirtualMemory::kReadWriteExecute;
+ } else {
+ prot = VirtualMemory::kReadWrite;
+ }
+ }
+ memory_->Protect(prot);
}
-PageSpace::PageSpace(Heap* heap, intptr_t max_capacity, bool is_executable)
+PageSpace::PageSpace(Heap* heap, intptr_t max_capacity)
: freelist_(),
heap_(heap),
pages_(NULL),
@@ -102,7 +117,6 @@
capacity_(0),
in_use_(0),
count_(0),
- is_executable_(is_executable),
sweeping_(false),
page_space_controller_(FLAG_heap_growth_space_ratio,
FLAG_heap_growth_rate,
@@ -123,8 +137,8 @@
}
-HeapPage* PageSpace::AllocatePage() {
- HeapPage* page = HeapPage::Allocate(kPageSize, is_executable_);
+HeapPage* PageSpace::AllocatePage(HeapPage::PageType type) {
+ HeapPage* page = HeapPage::Allocate(kPageSize, type);
if (pages_ == NULL) {
pages_ = page;
} else {
@@ -137,9 +151,9 @@
}
-HeapPage* PageSpace::AllocateLargePage(intptr_t size) {
+HeapPage* PageSpace::AllocateLargePage(intptr_t size, HeapPage::PageType type) {
intptr_t page_size = LargePageSizeFor(size);
- HeapPage* page = HeapPage::Allocate(page_size, is_executable_);
+ HeapPage* page = HeapPage::Allocate(page_size, type);
page->set_next(large_pages_);
large_pages_ = page;
capacity_ += page_size;
@@ -187,28 +201,25 @@
}
-uword PageSpace::TryAllocate(intptr_t size) {
- return TryAllocate(size, kControlGrowth);
-}
-
-
-uword PageSpace::TryAllocate(intptr_t size, GrowthPolicy growth_policy) {
+uword PageSpace::TryAllocate(intptr_t size,
+ HeapPage::PageType type,
+ GrowthPolicy growth_policy) {
ASSERT(size >= kObjectAlignment);
ASSERT(Utils::IsAligned(size, kObjectAlignment));
uword result = 0;
if (size < kAllocatablePageSize) {
- result = freelist_.TryAllocate(size);
+ result = freelist_[type].TryAllocate(size);
if ((result == 0) &&
(page_space_controller_.CanGrowPageSpace(size) ||
growth_policy == kForceGrowth) &&
CanIncreaseCapacity(kPageSize)) {
- HeapPage* page = AllocatePage();
+ HeapPage* page = AllocatePage(type);
ASSERT(page != NULL);
// Start of the newly allocated page is the allocated object.
result = page->object_start();
// Enqueue the remainder in the free list.
uword free_start = result + size;
- freelist_.Free(free_start, page->object_end() - free_start);
+ freelist_[type].Free(free_start, page->object_end() - free_start);
}
} else {
// Large page allocation.
@@ -218,7 +229,7 @@
return 0;
}
if (CanIncreaseCapacity(page_size)) {
- HeapPage* page = AllocateLargePage(size);
+ HeapPage* page = AllocateLargePage(size, type);
if (page != NULL) {
result = page->object_start();
}
@@ -252,6 +263,26 @@
}
+bool PageSpace::Contains(uword addr, HeapPage::PageType type) const {
+ HeapPage* page = pages_;
+ while (page != NULL) {
+ if ((page->type() == type) && page->Contains(addr)) {
+ return true;
+ }
+ page = page->next();
+ }
+
+ page = large_pages_;
+ while (page != NULL) {
+ if ((page->type() == type) && page->Contains(addr)) {
+ return true;
+ }
+ page = page->next();
+ }
+ return false;
+}
+
+
void PageSpace::StartEndAddress(uword* start, uword* end) const {
ASSERT(pages_ != NULL || large_pages_ != NULL);
*start = static_cast<uword>(~0);
@@ -319,22 +350,27 @@
}
-RawObject* PageSpace::FindObject(FindObjectVisitor* visitor) const {
+RawObject* PageSpace::FindObject(FindObjectVisitor* visitor,
+ HeapPage::PageType type) const {
ASSERT(Isolate::Current()->no_gc_scope_depth() != 0);
HeapPage* page = pages_;
while (page != NULL) {
- RawObject* obj = page->FindObject(visitor);
- if (obj != Object::null()) {
- return obj;
+ if (page->type() == type) {
+ RawObject* obj = page->FindObject(visitor);
+ if (obj != Object::null()) {
+ return obj;
+ }
}
page = page->next();
}
page = large_pages_;
while (page != NULL) {
- RawObject* obj = page->FindObject(visitor);
- if (obj != Object::null()) {
- return obj;
+ if (page->type() == type) {
+ RawObject* obj = page->FindObject(visitor);
+ if (obj != Object::null()) {
+ return obj;
+ }
}
page = page->next();
}
@@ -364,7 +400,10 @@
NoHandleScope no_handles(isolate);
if (FLAG_print_free_list_before_gc) {
- freelist_.Print();
+ OS::Print("Data Freelist:\n");
+ freelist_[HeapPage::kData].Print();
+ OS::Print("Executable Freelist:\n");
+ freelist_[HeapPage::kExecutable].Print();
}
if (FLAG_verify_before_gc) {
@@ -386,15 +425,16 @@
// Reset the bump allocation page to unused.
// Reset the freelists and setup sweeping.
- freelist_.Reset();
+ freelist_[HeapPage::kData].Reset();
+ freelist_[HeapPage::kExecutable].Reset();
GCSweeper sweeper(heap_);
intptr_t in_use = 0;
HeapPage* prev_page = NULL;
HeapPage* page = pages_;
while (page != NULL) {
- intptr_t page_in_use = sweeper.SweepPage(page, &freelist_);
HeapPage* next_page = page->next();
+ intptr_t page_in_use = sweeper.SweepPage(page, &freelist_[page->type()]);
if (page_in_use == 0) {
FreePage(page, prev_page);
} else {
@@ -442,7 +482,10 @@
}
if (FLAG_print_free_list_after_gc) {
- freelist_.Print();
+ OS::Print("Data Freelist:\n");
+ freelist_[HeapPage::kData].Print();
+ OS::Print("Executable Freelist:\n");
+ freelist_[HeapPage::kExecutable].Print();
}
if (FLAG_verify_after_gc) {
diff --git a/runtime/vm/pages.h b/runtime/vm/pages.h
index 3ce7511..4f51658 100644
--- a/runtime/vm/pages.h
+++ b/runtime/vm/pages.h
@@ -21,6 +21,12 @@
// able to get to a HeapPage header quickly based on a pointer to an object.
class HeapPage {
public:
+ enum PageType {
+ kData = 0,
+ kExecutable,
+ kNumPageTypes
+ };
+
HeapPage* next() const { return next_; }
void set_next(HeapPage* next) { next_ = next; }
@@ -29,7 +35,8 @@
}
uword object_start() const {
- return (reinterpret_cast<uword>(this) + sizeof(HeapPage));
+ return (reinterpret_cast<uword>(this) +
+ Utils::RoundUp(sizeof(HeapPage), kObjectAlignment));
}
uword object_end() const {
return object_end_;
@@ -41,6 +48,10 @@
used_ += size;
}
+ PageType type() const {
+ return executable_ ? kExecutable : kData;
+ }
+
void VisitObjects(ObjectVisitor* visitor) const;
void VisitObjectPointers(ObjectPointerVisitor* visitor) const;
@@ -54,8 +65,8 @@
object_end_ = val;
}
- static HeapPage* Initialize(VirtualMemory* memory, bool is_executable);
- static HeapPage* Allocate(intptr_t size, bool is_executable);
+ static HeapPage* Initialize(VirtualMemory* memory, PageType type);
+ static HeapPage* Allocate(intptr_t size, PageType type);
// Deallocate the virtual memory backing this page. The page pointer to this
// page becomes immediately inaccessible.
@@ -65,6 +76,7 @@
HeapPage* next_;
uword used_;
uword object_end_;
+ bool executable_;
friend class PageSpace;
@@ -157,16 +169,18 @@
kForceGrowth
};
- PageSpace(Heap* heap, intptr_t max_capacity, bool is_executable = false);
+ PageSpace(Heap* heap, intptr_t max_capacity);
~PageSpace();
- uword TryAllocate(intptr_t size);
- uword TryAllocate(intptr_t size, GrowthPolicy growth_policy);
+ uword TryAllocate(intptr_t size,
+ HeapPage::PageType type = HeapPage::kData,
+ GrowthPolicy growth_policy = kControlGrowth);
intptr_t in_use() const { return in_use_; }
intptr_t capacity() const { return capacity_; }
bool Contains(uword addr) const;
+ bool Contains(uword addr, HeapPage::PageType type) const;
bool IsValidAddress(uword addr) const {
return Contains(addr);
}
@@ -177,7 +191,8 @@
void VisitObjects(ObjectVisitor* visitor) const;
void VisitObjectPointers(ObjectPointerVisitor* visitor) const;
- RawObject* FindObject(FindObjectVisitor* visitor) const;
+ RawObject* FindObject(FindObjectVisitor* visitor,
+ HeapPage::PageType type) const;
// Collect the garbage in the page space using mark-sweep.
void MarkSweep(bool invoke_api_callbacks, const char* gc_reason);
@@ -208,9 +223,9 @@
private:
static const intptr_t kAllocatablePageSize = kPageSize - sizeof(HeapPage);
- HeapPage* AllocatePage();
+ HeapPage* AllocatePage(HeapPage::PageType type);
void FreePage(HeapPage* page, HeapPage* previous_page);
- HeapPage* AllocateLargePage(intptr_t size);
+ HeapPage* AllocateLargePage(intptr_t size, HeapPage::PageType type);
void FreeLargePage(HeapPage* page, HeapPage* previous_page);
void FreePages(HeapPage* pages);
@@ -221,7 +236,7 @@
return increase <= (max_capacity_ - capacity_);
}
- FreeList freelist_;
+ FreeList freelist_[HeapPage::kNumPageTypes];
Heap* heap_;
@@ -239,8 +254,6 @@
// Old-gen GC cycle count.
int count_;
- bool is_executable_;
-
// Keep track whether a MarkSweep is currently running.
bool sweeping_;
diff --git a/runtime/vm/parser.cc b/runtime/vm/parser.cc
index 29e6c29..ef5e8ae 100644
--- a/runtime/vm/parser.cc
+++ b/runtime/vm/parser.cc
@@ -1542,6 +1542,16 @@
const Function& super_getter = Function::ZoneHandle(
Resolver::ResolveDynamicAnyArgs(super_class, getter_name));
if (super_getter.IsNull()) {
+ const String& setter_name =
+ String::ZoneHandle(Field::SetterName(field_name));
+ const Function& super_setter = Function::ZoneHandle(
+ Resolver::ResolveDynamicAnyArgs(super_class, setter_name));
+ if (!super_setter.IsNull()) {
+ return new StaticGetterNode(
+ field_pos, implicit_argument, true, super_class, field_name);
+ }
+ }
+ if (super_getter.IsNull()) {
// Check if this is an access to an implicit closure using 'super'.
// If a function exists of the specified field_name then try
// accessing it as a getter, at runtime we will handle this by
@@ -2282,11 +2292,9 @@
ParseNativeFunctionBlock(¶ms, func);
} else if (func.is_external()) {
// Body of an external method contains a single throw.
+ const String& function_name = String::ZoneHandle(func.name());
current_block_->statements->Add(
- new ThrowNode(TokenPos(),
- new LiteralNode(TokenPos(),
- String::ZoneHandle(
- Symbols::New("External implementation missing."))), NULL));
+ ThrowNoSuchMethodError(TokenPos(), function_name));
} else {
UnexpectedToken();
}
@@ -2507,8 +2515,10 @@
if (type.IsTypeParameter() || type.IsDynamicType()) {
// Replace the type with a malformed type and compile a throw when called.
redirection_type = ClassFinalizer::NewFinalizedMalformedType(
+ Error::Handle(), // No previous error.
current_class(),
type_pos,
+ ClassFinalizer::kTryResolve, // No compile-time error.
"factory '%s' may not redirect to %s'%s'",
method->name->ToCString(),
type.IsTypeParameter() ? "type parameter " : "",
@@ -5698,11 +5708,10 @@
current_block_->statements->Add(iterator_init);
// Generate while loop condition.
- AstNode* iterator_has_next = new InstanceCallNode(
+ AstNode* iterator_has_next = new InstanceGetterNode(
collection_pos,
new LoadLocalNode(collection_pos, iterator_var),
- String::ZoneHandle(Symbols::HasNext()),
- no_args);
+ String::ZoneHandle(Symbols::HasNext()));
// Parse the for loop body. Ideally, we would use ParseNestedStatement()
// here, but that does not work well because we have to insert an implicit
@@ -6438,6 +6447,19 @@
}
+RawError* Parser::FormatErrorMsg(const Script& script,
+ intptr_t token_pos,
+ const char* message_header,
+ const char* format, ...) {
+ va_list args;
+ va_start(args, format);
+ const Error& error = Error::Handle(
+ FormatError(script, token_pos, message_header, format, args));
+ va_end(args);
+ return error.raw();
+}
+
+
RawString* Parser::FormatMessage(const Script& script,
intptr_t token_pos,
const char* message_header,
@@ -7629,37 +7651,67 @@
if (ParsingStaticMember()) {
ASSERT(scope_class.raw() == current_class().raw());
*type = ClassFinalizer::NewFinalizedMalformedType(
+ Error::Handle(), // No previous error.
scope_class,
type->token_pos(),
+ finalization,
"type parameter '%s' cannot be referenced "
"from static member",
String::Handle(type_parameter.name()).ToCString());
return;
}
- // TODO(regis): Should this be a malformed type as well?
- // A type parameter cannot be parameterized, so report an error if
- // type arguments have previously been parsed.
+ // A type parameter cannot be parameterized, so make the type
+ // malformed if type arguments have previously been parsed.
if (!AbstractTypeArguments::Handle(type->arguments()).IsNull()) {
- ErrorMsg(type_parameter.token_pos(),
- "type parameter '%s' cannot be parameterized",
- String::Handle(type_parameter.name()).ToCString());
+ *type = ClassFinalizer::NewFinalizedMalformedType(
+ Error::Handle(), // No previous error.
+ scope_class,
+ type_parameter.token_pos(),
+ finalization,
+ "type parameter '%s' cannot be parameterized",
+ String::Handle(type_parameter.name()).ToCString());
+ return;
}
*type = type_parameter.raw();
return;
}
}
// Resolve classname in the scope of the current library.
+ Error& error = Error::Handle();
resolved_type_class =
ResolveClassInCurrentLibraryScope(unresolved_class.token_pos(),
- unresolved_class_name);
+ unresolved_class_name,
+ &error);
+ if (!error.IsNull()) {
+ *type = ClassFinalizer::NewFinalizedMalformedType(
+ error,
+ scope_class,
+ unresolved_class.token_pos(),
+ finalization,
+ "cannot resolve class '%s'",
+ unresolved_class_name.ToCString());
+ return;
+ }
} else {
LibraryPrefix& lib_prefix =
LibraryPrefix::Handle(unresolved_class.library_prefix());
// Resolve class name in the scope of the library prefix.
+ Error& error = Error::Handle();
resolved_type_class =
ResolveClassInPrefixScope(unresolved_class.token_pos(),
- lib_prefix,
- unresolved_class_name);
+ lib_prefix,
+ unresolved_class_name,
+ &error);
+ if (!error.IsNull()) {
+ *type = ClassFinalizer::NewFinalizedMalformedType(
+ error,
+ scope_class,
+ unresolved_class.token_pos(),
+ finalization,
+ "cannot resolve class '%s'",
+ unresolved_class_name.ToCString());
+ return;
+ }
}
// At this point, we can only have a parameterized_type.
Type& parameterized_type = Type::Handle();
@@ -8127,7 +8179,8 @@
// of the current library, but is defined in more than one imported
// library, i.e. if the name cannot be resolved unambiguously.
RawObject* Parser::ResolveNameInCurrentLibraryScope(intptr_t ident_pos,
- const String& name) {
+ const String& name,
+ Error* error) {
TRACE_PARSER("ResolveNameInCurrentLibraryScope");
Object& obj = Object::Handle(LookupNameInLibrary(library_, name));
if (obj.IsNull()) {
@@ -8144,20 +8197,30 @@
const Library& lib = Library::Handle(import.library());
if (!first_lib_url.IsNull()) {
// Found duplicate definition.
+ Error& ambiguous_ref_error = Error::Handle();
if (first_lib_url.raw() == lib.url()) {
- ErrorMsg(ident_pos,
- "ambiguous reference: "
- "'%s' as library '%s' is imported multiple times",
- name.ToCString(),
- first_lib_url.ToCString());
+ ambiguous_ref_error = FormatErrorMsg(
+ script_, ident_pos, "Error",
+ "ambiguous reference: "
+ "'%s' as library '%s' is imported multiple times",
+ name.ToCString(),
+ first_lib_url.ToCString());
} else {
- ErrorMsg(ident_pos,
- "ambiguous reference: "
- "'%s' is defined in library '%s' and also in '%s'",
- name.ToCString(),
- first_lib_url.ToCString(),
- String::Handle(lib.url()).ToCString());
+ ambiguous_ref_error = FormatErrorMsg(
+ script_, ident_pos, "Error",
+ "ambiguous reference: "
+ "'%s' is defined in library '%s' and also in '%s'",
+ name.ToCString(),
+ first_lib_url.ToCString(),
+ String::Handle(lib.url()).ToCString());
}
+ if (error == NULL) {
+ // Report a compile time error since the caller is not interested
+ // in the error.
+ ErrorMsg(ambiguous_ref_error);
+ }
+ *error = ambiguous_ref_error.raw();
+ return Object::null();
} else {
first_lib_url = lib.url();
obj = imported_obj.raw();
@@ -8170,9 +8233,10 @@
RawClass* Parser::ResolveClassInCurrentLibraryScope(intptr_t ident_pos,
- const String& name) {
+ const String& name,
+ Error* error) {
const Object& obj =
- Object::Handle(ResolveNameInCurrentLibraryScope(ident_pos, name));
+ Object::Handle(ResolveNameInCurrentLibraryScope(ident_pos, name, error));
if (obj.IsClass()) {
return Class::Cast(obj).raw();
}
@@ -8190,7 +8254,7 @@
const String& ident) {
TRACE_PARSER("ResolveIdentInCurrentLibraryScope");
const Object& obj =
- Object::Handle(ResolveNameInCurrentLibraryScope(ident_pos, ident));
+ Object::Handle(ResolveNameInCurrentLibraryScope(ident_pos, ident, NULL));
if (obj.IsClass()) {
const Class& cls = Class::Cast(obj);
return new PrimaryNode(ident_pos, Class::ZoneHandle(cls.raw()));
@@ -8221,7 +8285,8 @@
RawObject* Parser::ResolveNameInPrefixScope(intptr_t ident_pos,
const LibraryPrefix& prefix,
- const String& name) {
+ const String& name,
+ Error* error) {
TRACE_PARSER("ResolveNameInPrefixScope");
Namespace& import = Namespace::Handle();
String& first_lib_url = String::Handle();
@@ -8238,19 +8303,29 @@
first_lib_url = lib.url();
} else {
// Found duplicate definition.
+ Error& ambiguous_ref_error = Error::Handle();
if (first_lib_url.raw() == lib.url()) {
- ErrorMsg(ident_pos,
- "ambiguous reference: '%s.%s' is imported multiple times",
- String::Handle(prefix.name()).ToCString(),
- name.ToCString());
+ ambiguous_ref_error = FormatErrorMsg(
+ script_, ident_pos, "Error",
+ "ambiguous reference: '%s.%s' is imported multiple times",
+ String::Handle(prefix.name()).ToCString(),
+ name.ToCString());
} else {
- ErrorMsg(ident_pos,
- "ambiguous reference: '%s.%s' is defined in '%s' and '%s'",
- String::Handle(prefix.name()).ToCString(),
- name.ToCString(),
- first_lib_url.ToCString(),
- String::Handle(lib.url()).ToCString());
+ ambiguous_ref_error = FormatErrorMsg(
+ script_, ident_pos, "Error",
+ "ambiguous reference: '%s.%s' is defined in '%s' and '%s'",
+ String::Handle(prefix.name()).ToCString(),
+ name.ToCString(),
+ first_lib_url.ToCString(),
+ String::Handle(lib.url()).ToCString());
}
+ if (error == NULL) {
+ // Report a compile time error since the caller is not interested
+ // in the error.
+ ErrorMsg(ambiguous_ref_error);
+ }
+ *error = ambiguous_ref_error.raw();
+ return Object::null();
}
}
}
@@ -8260,9 +8335,10 @@
RawClass* Parser::ResolveClassInPrefixScope(intptr_t ident_pos,
const LibraryPrefix& prefix,
- const String& name) {
+ const String& name,
+ Error* error) {
const Object& obj =
- Object::Handle(ResolveNameInPrefixScope(ident_pos, prefix, name));
+ Object::Handle(ResolveNameInPrefixScope(ident_pos, prefix, name, error));
if (obj.IsClass()) {
return Class::Cast(obj).raw();
}
@@ -8279,7 +8355,7 @@
const String& ident) {
TRACE_PARSER("ResolveIdentInPrefixScope");
Object& obj =
- Object::Handle(ResolveNameInPrefixScope(ident_pos, prefix, ident));
+ Object::Handle(ResolveNameInPrefixScope(ident_pos, prefix, ident, NULL));
if (obj.IsNull()) {
// Unresolved prefixed primary identifier.
ErrorMsg(ident_pos, "identifier '%s.%s' cannot be resolved",
@@ -8878,10 +8954,13 @@
// In case the type is malformed, throw a dynamic type error after finishing
// parsing the instance creation expression.
if (type.IsTypeParameter() || type.IsDynamicType()) {
+ ASSERT(!type.IsMalformed());
// Replace the type with a malformed type.
type = ClassFinalizer::NewFinalizedMalformedType(
+ Error::Handle(), // No previous error.
current_class(),
type_pos,
+ ClassFinalizer::kTryResolve, // No compile-time error.
"%s'%s' cannot be instantiated",
type.IsTypeParameter() ? "type parameter " : "",
type.IsTypeParameter() ?
@@ -8945,8 +9024,10 @@
// Replace the type with a malformed type and compile a throw or report
// a compile-time error if the constructor is const.
type = ClassFinalizer::NewFinalizedMalformedType(
+ Error::Handle(), // No previous error.
current_class(),
call_pos,
+ ClassFinalizer::kTryResolve, // No compile-time error.
"interface '%s' has no constructor named '%s'",
type_class_name.ToCString(),
external_constructor_name.ToCString());
@@ -9013,8 +9094,10 @@
// Replace the type with a malformed type and compile a throw or report a
// compile-time error if the constructor is const.
type = ClassFinalizer::NewFinalizedMalformedType(
+ Error::Handle(), // No previous error.
current_class(),
call_pos,
+ ClassFinalizer::kTryResolve, // No compile-time error.
"class '%s' has no constructor or factory named '%s'",
String::Handle(constructor_class.Name()).ToCString(),
external_constructor_name.ToCString());
@@ -9425,8 +9508,6 @@
} else if (CurrentToken() == Token::kSUPER) {
if (current_function().is_static()) {
ErrorMsg("cannot access superclass from static method");
- } else if (current_function().IsLocalFunction()) {
- ErrorMsg("cannot access superclass from local function");
}
ConsumeToken();
if (CurrentToken() == Token::kPERIOD) {
diff --git a/runtime/vm/parser.h b/runtime/vm/parser.h
index d6e7375..12c1302 100644
--- a/runtime/vm/parser.h
+++ b/runtime/vm/parser.h
@@ -28,7 +28,7 @@
struct FieldInitExpression;
// The class ParsedFunction holds the result of parsing a function.
-class ParsedFunction : public ValueObject {
+class ParsedFunction : public ZoneAllocated {
public:
static const int kFirstLocalSlotIndex = -2;
@@ -135,6 +135,11 @@
const char* message_header,
const char* format,
va_list args);
+ static RawError* FormatErrorMsg(const Script& script,
+ intptr_t token_pos,
+ const char* message_header,
+ const char* format, ...)
+ PRINTF_ATTRIBUTE(4, 5);
// Same as FormatError, but appends the new error to the 'prev_error'.
static RawError* FormatErrorWithAppend(const Error& prev_error,
@@ -504,28 +509,32 @@
static const bool kResolveLocally = true;
static const bool kResolveIncludingImports = false;
- // Resolve a primary identifier in the libary or prefix scope and
+ // Resolve a primary identifier in the library or prefix scope and
// generate the corresponding AstNode.
+ AstNode* ResolveIdentInCurrentLibraryScope(intptr_t ident_pos,
+ const String& ident);
AstNode* ResolveIdentInPrefixScope(intptr_t ident_pos,
const LibraryPrefix& prefix,
const String& ident);
- AstNode* ResolveIdentInCurrentLibraryScope(intptr_t ident_pos,
- const String& ident);
// Find class with the given name in the library or prefix scope.
RawClass* ResolveClassInCurrentLibraryScope(intptr_t ident_pos,
- const String& name);
+ const String& name,
+ Error* error);
RawClass* ResolveClassInPrefixScope(intptr_t ident_pos,
const LibraryPrefix& prefix,
- const String& name);
+ const String& name,
+ Error* error);
// Find name in the library or prefix scope and return the corresponding
// object (field, class, function etc).
RawObject* ResolveNameInCurrentLibraryScope(intptr_t ident_pos,
- const String& ident);
+ const String& ident,
+ Error* error);
RawObject* ResolveNameInPrefixScope(intptr_t ident_pos,
const LibraryPrefix& prefix,
- const String& name);
+ const String& name,
+ Error* error);
AstNode* ResolveIdent(intptr_t ident_pos,
const String& ident,
diff --git a/runtime/vm/parser_test.cc b/runtime/vm/parser_test.cc
index 3fff4b8..99433c5 100644
--- a/runtime/vm/parser_test.cc
+++ b/runtime/vm/parser_test.cc
@@ -30,11 +30,11 @@
LongJump jump;
isolate->set_long_jump_base(&jump);
if (setjmp(*jump.Set()) == 0) {
- ParsedFunction parsed_function(function);
- Parser::ParseFunction(&parsed_function);
- EXPECT(parsed_function.node_sequence() != NULL);
+ ParsedFunction* parsed_function = new ParsedFunction(function);
+ Parser::ParseFunction(parsed_function);
+ EXPECT(parsed_function->node_sequence() != NULL);
printf("Class %s function %s:\n", cname, fname);
- AstPrinter::PrintFunctionNodes(parsed_function);
+ AstPrinter::PrintFunctionNodes(*parsed_function);
retval = true;
} else {
retval = false;
diff --git a/runtime/vm/raw_object.h b/runtime/vm/raw_object.h
index 070da5a..09a4c2c 100644
--- a/runtime/vm/raw_object.h
+++ b/runtime/vm/raw_object.h
@@ -734,6 +734,7 @@
RawArray* object_table_;
RawArray* stackmaps_;
RawLocalVarDescriptors* var_descriptors_;
+ RawGrowableObjectArray* resolved_static_calls_;
RawArray* comments_;
RawObject** to() {
return reinterpret_cast<RawObject**>(&ptr()->comments_);
diff --git a/runtime/vm/scopes.h b/runtime/vm/scopes.h
index 12b7e18..75f837c 100644
--- a/runtime/vm/scopes.h
+++ b/runtime/vm/scopes.h
@@ -175,6 +175,10 @@
void ResolveForwardReference() { kind_ = kCase; }
private:
+ // TODO(zerny): Remove this hack when the builder no longer stores state in
+ // the ast/scopes.
+ friend class SourceLabelResetter;
+
const intptr_t token_pos_;
const String& name_;
LocalScope* owner_; // Local scope declaring this label.
diff --git a/runtime/vm/stack_frame.cc b/runtime/vm/stack_frame.cc
index a57b9dc..2fc4302 100644
--- a/runtime/vm/stack_frame.cc
+++ b/runtime/vm/stack_frame.cc
@@ -59,6 +59,10 @@
Code code;
code = LookupDartCode();
if (!code.IsNull()) {
+ // Visit the code object.
+ RawObject* raw_code = code.raw();
+ visitor->VisitPointer(&raw_code);
+ // Visit stack based on stack maps.
Array maps;
maps = Array::null();
Stackmap map;
diff --git a/runtime/vm/stub_code_ia32.cc b/runtime/vm/stub_code_ia32.cc
index 6f59c3e..b92645d 100644
--- a/runtime/vm/stub_code_ia32.cc
+++ b/runtime/vm/stub_code_ia32.cc
@@ -2038,7 +2038,7 @@
__ Bind(&update_ic_data);
// ECX: ICData
- const String& equal_name = String::ZoneHandle(Symbols::New("=="));
+ const String& equal_name = String::ZoneHandle(Symbols::EqualOperator());
__ movl(EAX, Address(ESP, 1 * kWordSize));
__ movl(EDI, Address(ESP, 2 * kWordSize));
AssemblerMacros::EnterStubFrame(assembler);
diff --git a/runtime/vm/symbols.h b/runtime/vm/symbols.h
index 85dab77..31d01d8 100644
--- a/runtime/vm/symbols.h
+++ b/runtime/vm/symbols.h
@@ -18,6 +18,8 @@
V(Empty, "") \
V(Dot, ".") \
V(Equals, "=") \
+ V(EqualOperator, "==") \
+ V(Identical, "identical") \
V(IndexToken, "[]") \
V(AssignIndexToken, "[]=") \
V(TopLevel, "::") \
diff --git a/runtime/vm/unit_test.cc b/runtime/vm/unit_test.cc
index e1105a5..4f10eae 100644
--- a/runtime/vm/unit_test.cc
+++ b/runtime/vm/unit_test.cc
@@ -177,16 +177,16 @@
void CodeGenTest::Compile() {
- ParsedFunction parsed_function(function_);
- parsed_function.SetNodeSequence(node_sequence_);
- parsed_function.set_instantiator(NULL);
- parsed_function.set_default_parameter_values(default_parameter_values_);
- parsed_function.set_expression_temp_var(
+ ParsedFunction* parsed_function = new ParsedFunction(function_);
+ parsed_function->SetNodeSequence(node_sequence_);
+ parsed_function->set_instantiator(NULL);
+ parsed_function->set_default_parameter_values(default_parameter_values_);
+ parsed_function->set_expression_temp_var(
ParsedFunction::CreateExpressionTempVar(0));
- node_sequence_->scope()->AddVariable(parsed_function.expression_temp_var());
- parsed_function.AllocateVariables();
+ node_sequence_->scope()->AddVariable(parsed_function->expression_temp_var());
+ parsed_function->AllocateVariables();
const Error& error =
- Error::Handle(Compiler::CompileParsedFunction(parsed_function));
+ Error::Handle(Compiler::CompileParsedFunction(*parsed_function));
EXPECT(error.IsNull());
}
diff --git a/tests/benchmark_smoke/benchmark_base.dart b/tests/benchmark_smoke/benchmark_base.dart
index 5aac450..41a3729 100644
--- a/tests/benchmark_smoke/benchmark_base.dart
+++ b/tests/benchmark_smoke/benchmark_base.dart
@@ -60,7 +60,7 @@
int elapsed = 0;
while (elapsed < timeMinimum || iter < 32) {
f();
- elapsed = watch.elapsedInMs();
+ elapsed = watch.elapsedMilliseconds;
iter++;
}
return (1000.0 * iter) / elapsed;
diff --git a/tests/benchmark_smoke/benchmark_smoke.status b/tests/benchmark_smoke/benchmark_smoke.status
index 5050ba7..52cbda4 100644
--- a/tests/benchmark_smoke/benchmark_smoke.status
+++ b/tests/benchmark_smoke/benchmark_smoke.status
@@ -14,9 +14,6 @@
[ $runtime == vm ]
*: Skip
-[ $runtime == opera ]
-*: Skip
-
[ $compiler == dart2js && $runtime == none ]
*: Fail, Pass # TODO(ahe): Triage these tests.
diff --git a/tests/co19/co19-compiler.status b/tests/co19/co19-compiler.status
index e745c56..631e9a4 100644
--- a/tests/co19/co19-compiler.status
+++ b/tests/co19/co19-compiler.status
@@ -3,12 +3,6 @@
# BSD-style license that can be found in the LICENSE file.
[ $compiler == dartc ]
-# We are now actually skipping these because of inter-test dependencies.
-Language/13_Libraries_and_Scripts/2_Imports_A02_t21: Skip # TODO(analyzer-team): Please triage this crash.
-Language/13_Libraries_and_Scripts/3_Includes_A01_t23: Skip # TODO(analyzer-team): Please triage this crash.
-Language/13_Libraries_and_Scripts/2_Imports_A03_t07: Skip # TODO(analyzer-team): Please triage this crash.
-
-Language/03_Overview/1_Scoping_A02_t05: Fail # TODO(analyzer-team): Please triage this failure.
Language/03_Overview/1_Scoping_A02_t06: Fail # TODO(analyzer-team): Please triage this failure.
Language/03_Overview/2_Privacy_A01_t04: Fail # TODO(analyzer-team): Please triage this failure.
Language/03_Overview/2_Privacy_A01_t05: Fail # TODO(analyzer-team): Please triage this failure.
@@ -16,38 +10,36 @@
Language/03_Overview/2_Privacy_A01_t10: Fail # TODO(analyzer-team): Please triage this failure.
Language/03_Overview/2_Privacy_A01_t19: Fail # TODO(analyzer-team): Please triage this failure.
Language/03_Overview/2_Privacy_A01_t20: Fail # TODO(analyzer-team): Please triage this failure.
+Language/05_Variables/05_Variables_A03_t11: Fail # TODO(analyzer-team): Please triage this failure.
+Language/05_Variables/05_Variables_A03_t12: Fail # TODO(analyzer-team): Please triage this failure.
+Language/05_Variables/05_Variables_A03_t13: Fail # TODO(analyzer-team): Please triage this failure.
+Language/05_Variables/05_Variables_A03_t14: Fail # TODO(analyzer-team): Please triage this failure.
+Language/05_Variables/05_Variables_A03_t15: Fail # TODO(analyzer-team): Please triage this failure.
+Language/05_Variables/1_Evaluation_of_Implicit_Variable_Getters_A01_t05: Fail # TODO(analyzer-team): Please triage this failure.
Language/06_Functions/1_Function_Declaration_A02_t03: Fail # TODO(analyzer-team): Please triage this failure.
Language/06_Functions/1_Function_Declaration_A03_t03: Fail # TODO(analyzer-team): Please triage this failure.
Language/06_Functions/2_Formal_Parameters_A02_t01: Fail # TODO(analyzer-team): Please triage this failure.
-Language/07_Classes/6_Constructors/2_Factories_A06_t06: Fail # TODO(analyzer-team): Please triage this failure.
-Language/07_Classes/6_Constructors/2_Factories_A07_t01: Fail # TODO(analyzer-team): Please triage this failure.
-Language/07_Classes/8_Static_Variables/1_Evaluation_of_Static_Variable_Getters_A01_t05: Fail # TODO(analyzer-team): Please triage this failure.
+Language/07_Classes/1_Instance_Methods_A02_t03: Fail # TODO(analyzer-team): Please triage this failure.
+Language/07_Classes/1_Instance_Methods_A02_t04: Fail # TODO(analyzer-team): Please triage this failure.
+Language/07_Classes/1_Instance_Methods_A02_t06: Fail # TODO(analyzer-team): Please triage this failure.
+Language/07_Classes/4_Abstract_Instance_Members_A04_t02: Fail # TODO(analyzer-team): Please triage this failure.
+Language/07_Classes/4_Abstract_Instance_Members_A04_t04: Fail # TODO(analyzer-team): Please triage this failure.
+Language/07_Classes/6_Constructors/2_Factories_A05_t02: Fail # TODO(analyzer-team): Please triage this failure.
+Language/07_Classes/6_Constructors/2_Factories_A05_t04: Fail # TODO(analyzer-team): Please triage this failure.
+Language/08_Interfaces/5_Superinterfaces_A01_t02: Fail # TODO(analyzer-team): Please triage this failure.
+Language/10_Expressions/01_Constants_A03_t01: Fail # TODO(analyzer-team): Please triage this failure.
Language/10_Expressions/01_Constants_A05_t01: Fail # TODO(analyzer-team): Please triage this failure.
Language/10_Expressions/01_Constants_A14_t01: Fail # TODO(analyzer-team): Please triage this failure.
-Language/10_Expressions/01_Constants_A19_t02: Fail # TODO(analyzer-team): Please triage this failure.
-Language/10_Expressions/01_Constants_A19_t03: Fail # TODO(analyzer-team): Please triage this failure.
Language/10_Expressions/05_Strings/1_String_Interpolation_A01_t06: Fail # TODO(analyzer-team): Please triage this failure.
Language/10_Expressions/05_Strings/1_String_Interpolation_A01_t07: Fail # TODO(analyzer-team): Please triage this failure.
Language/10_Expressions/05_Strings/1_String_Interpolation_A01_t13: Fail # TODO(analyzer-team): Please triage this failure.
-Language/10_Expressions/05_Strings_A01_t01: Fail # TODO(analyzer-team): Please triage this failure.
-Language/10_Expressions/08_Throw_A03_t02: Fail # TODO(analyzer-team): Please triage this failure.
-Language/10_Expressions/08_Throw_A03_t03: Fail # TODO(analyzer-team): Please triage this failure.
-Language/10_Expressions/08_Throw_A04_t01: Fail # TODO(analyzer-team): Please triage this failure.
Language/10_Expressions/08_Throw_A05_t01: Fail # TODO(analyzer-team): Please triage this failure.
-Language/10_Expressions/08_Throw_A05_t02: Fail # TODO(analyzer-team): Please triage this failure.
-Language/10_Expressions/08_Throw_A05_t03: Fail # TODO(analyzer-team): Please triage this failure.
-Language/10_Expressions/09_Function_Expressions_A02_t01: Fail # TODO(analyzer-team): Please triage this failure.
-Language/10_Expressions/09_Function_Expressions_A04_t01: Fail # TODO(analyzer-team): Please triage this failure.
-Language/10_Expressions/09_Function_Expressions_A06_t01: Fail # TODO(analyzer-team): Please triage this failure.
-Language/10_Expressions/11_Instance_Creation/1_New_A02_t05: Fail # TODO(analyzer-team): Please triage this failure.
+Language/10_Expressions/09_Function_Expressions_A03_t02: Fail # TODO(analyzer-team): Please triage this failure.
+Language/10_Expressions/09_Function_Expressions_A04_t02: Fail # TODO(analyzer-team): Please triage this failure.
Language/10_Expressions/11_Instance_Creation/1_New_A02_t07: Fail # TODO(analyzer-team): Please triage this failure.
-Language/10_Expressions/11_Instance_Creation/1_New_A11_t01: Fail # TODO(analyzer-team): Please triage this failure.
-Language/10_Expressions/11_Instance_Creation/1_New_A12_t01: Fail # TODO(analyzer-team): Please triage this failure.
-Language/10_Expressions/11_Instance_Creation/1_New_A12_t02: Fail # TODO(analyzer-team): Please triage this failure.
-Language/10_Expressions/11_Instance_Creation/1_New_A13_t04: Fail # TODO(analyzer-team): Please triage this failure.
+Language/10_Expressions/11_Instance_Creation/1_New_A06_t06: Fail # TODO(analyzer-team): Please triage this failure.
Language/10_Expressions/11_Instance_Creation/2_Const_A10_t01: Fail # TODO(analyzer-team): Please triage this failure.
Language/10_Expressions/11_Instance_Creation_A02_t01: Fail # TODO(analyzer-team): Please triage this failure.
-Language/10_Expressions/17_Getter_Invocation_A01_t03: Fail # TODO(analyzer-team): Please triage this failure.
Language/10_Expressions/17_Getter_Invocation_A02_t01: Fail # TODO(analyzer-team): Please triage this failure.
Language/10_Expressions/17_Getter_Invocation_A02_t02: Fail # TODO(analyzer-team): Please triage this failure.
Language/10_Expressions/18_Assignment_A05_t02: Fail # TODO(analyzer-team): Please triage this failure.
@@ -59,73 +51,84 @@
Language/10_Expressions/20_Logical_Boolean_Expressions_A01_t14: Fail # TODO(analyzer-team): Please triage this failure.
Language/10_Expressions/21_Bitwise_Expressions_A01_t16: Fail # TODO(analyzer-team): Please triage this failure.
Language/10_Expressions/21_Bitwise_Expressions_A01_t17: Fail # TODO(analyzer-team): Please triage this failure.
-Language/10_Expressions/21_Relational_Expressions_A01_t22: Fail # TODO(analyzer-team): Please triage this failure.
-Language/10_Expressions/21_Relational_Expressions_A01_t23: Fail # TODO(analyzer-team): Please triage this failure.
Language/10_Expressions/22_Equality_A01_t23: Fail # TODO(analyzer-team): Please triage this failure.
Language/10_Expressions/22_Equality_A01_t24: Fail # TODO(analyzer-team): Please triage this failure.
-Language/10_Expressions/22_Shift_A01_t13: Fail # TODO(analyzer-team): Please triage this failure.
-Language/10_Expressions/22_Shift_A01_t14: Fail # TODO(analyzer-team): Please triage this failure.
-Language/10_Expressions/23_Additive_Expressions_A01_t11: Fail # TODO(analyzer-team): Please triage this failure.
-Language/10_Expressions/23_Additive_Expressions_A01_t12: Fail # TODO(analyzer-team): Please triage this failure.
-Language/10_Expressions/23_Additive_Expressions_A01_t13: Fail # TODO(analyzer-team): Please triage this failure.
-Language/10_Expressions/23_Additive_Expressions_A01_t14: Fail # TODO(analyzer-team): Please triage this failure.
-Language/10_Expressions/24_Multiplicative_Expressions_A01_t14: Fail # TODO(analyzer-team): Please triage this failure.
-Language/10_Expressions/24_Multiplicative_Expressions_A01_t15: Fail # TODO(analyzer-team): Please triage this failure.
-Language/10_Expressions/24_Multiplicative_Expressions_A01_t16: Fail # TODO(analyzer-team): Please triage this failure.
-Language/10_Expressions/24_Multiplicative_Expressions_A01_t17: Fail # TODO(analyzer-team): Please triage this failure.
-Language/10_Expressions/25_Unary_Expressions_A01_t04: Fail # TODO(analyzer-team): Please triage this failure.
-Language/10_Expressions/25_Unary_Expressions_A01_t05: Fail # TODO(analyzer-team): Please triage this failure.
-Language/10_Expressions/25_Unary_Expressions_A01_t17: Fail # TODO(analyzer-team): Please triage this failure.
-Language/10_Expressions/25_Unary_Expressions_A01_t18: Fail # TODO(analyzer-team): Please triage this failure.
-Language/10_Expressions/25_Unary_Expressions_A01_t19: Fail # TODO(analyzer-team): Please triage this failure.
-Language/10_Expressions/25_Unary_Expressions_A01_t20: Fail # TODO(analyzer-team): Please triage this failure.
-Language/10_Expressions/25_Unary_Expressions_A01_t21: Fail # TODO(analyzer-team): Please triage this failure.
-Language/10_Expressions/25_Unary_Expressions_A01_t22: Fail # TODO(analyzer-team): Please triage this failure.
-Language/10_Expressions/26_Postfix_Expressions_A01_t02: Fail # TODO(analyzer-team): Please triage this failure.
-Language/10_Expressions/26_Postfix_Expressions_A01_t05: Fail # TODO(analyzer-team): Please triage this failure.
-Language/10_Expressions/27_Assignable_Expressions_A01_t08: Fail # TODO(analyzer-team): Please triage this failure.
-Language/10_Expressions/27_Assignable_Expressions_A01_t09: Fail # TODO(analyzer-team): Please triage this failure.
-Language/10_Expressions/28_Identifier_Reference_A04_t03: Fail # TODO(analyzer-team): Please triage this failure.
-Language/10_Expressions/28_Identifier_Reference_A04_t06: Fail # TODO(analyzer-team): Please triage this failure.
-Language/10_Expressions/28_Identifier_Reference_A05_t07: Fail # TODO(analyzer-team): Please triage this failure.
-Language/10_Expressions/28_Identifier_Reference_A06_t13: Fail # TODO(analyzer-team): Please triage this failure.
-Language/10_Expressions/29_Type_Test_A01_t04: Fail # TODO(analyzer-team): Please triage this failure.
+Language/10_Expressions/23_Relational_Expressions_A01_t22: Fail # TODO(analyzer-team): Please triage this failure.
+Language/10_Expressions/23_Relational_Expressions_A01_t23: Fail # TODO(analyzer-team): Please triage this failure.
+Language/10_Expressions/24_Shift_A01_t13: Fail # TODO(analyzer-team): Please triage this failure.
+Language/10_Expressions/24_Shift_A01_t14: Fail # TODO(analyzer-team): Please triage this failure.
+Language/10_Expressions/25_Additive_Expressions_A01_t11: Fail # TODO(analyzer-team): Please triage this failure.
+Language/10_Expressions/25_Additive_Expressions_A01_t12: Fail # TODO(analyzer-team): Please triage this failure.
+Language/10_Expressions/25_Additive_Expressions_A01_t13: Fail # TODO(analyzer-team): Please triage this failure.
+Language/10_Expressions/25_Additive_Expressions_A01_t14: Fail # TODO(analyzer-team): Please triage this failure.
+Language/10_Expressions/26_Multiplicative_Expressions_A01_t14: Fail # TODO(analyzer-team): Please triage this failure.
+Language/10_Expressions/26_Multiplicative_Expressions_A01_t15: Fail # TODO(analyzer-team): Please triage this failure.
+Language/10_Expressions/26_Multiplicative_Expressions_A01_t16: Fail # TODO(analyzer-team): Please triage this failure.
+Language/10_Expressions/26_Multiplicative_Expressions_A01_t17: Fail # TODO(analyzer-team): Please triage this failure.
+Language/10_Expressions/27_Unary_Expressions_A01_t04: Fail # TODO(analyzer-team): Please triage this failure.
+Language/10_Expressions/27_Unary_Expressions_A01_t05: Fail # TODO(analyzer-team): Please triage this failure.
+Language/10_Expressions/27_Unary_Expressions_A01_t17: Fail # TODO(analyzer-team): Please triage this failure.
+Language/10_Expressions/27_Unary_Expressions_A01_t18: Fail # TODO(analyzer-team): Please triage this failure.
+Language/10_Expressions/27_Unary_Expressions_A01_t19: Fail # TODO(analyzer-team): Please triage this failure.
+Language/10_Expressions/27_Unary_Expressions_A01_t20: Fail # TODO(analyzer-team): Please triage this failure.
+Language/10_Expressions/27_Unary_Expressions_A01_t21: Fail # TODO(analyzer-team): Please triage this failure.
+Language/10_Expressions/27_Unary_Expressions_A01_t22: Fail # TODO(analyzer-team): Please triage this failure.
+Language/10_Expressions/28_Postfix_Expressions_A01_t02: Fail # TODO(analyzer-team): Please triage this failure.
+Language/10_Expressions/28_Postfix_Expressions_A01_t05: Fail # TODO(analyzer-team): Please triage this failure.
+Language/10_Expressions/29_Assignable_Expressions_A01_t08: Fail # TODO(analyzer-team): Please triage this failure.
+Language/10_Expressions/29_Assignable_Expressions_A01_t09: Fail # TODO(analyzer-team): Please triage this failure.
+Language/10_Expressions/30_Identifier_Reference_A05_t04: Fail # TODO(analyzer-team): Please triage this failure.
+Language/10_Expressions/30_Identifier_Reference_A06_t02: Fail # TODO(analyzer-team): Please triage this failure.
+Language/10_Expressions/30_Identifier_Reference_A07_t01: Fail # TODO(analyzer-team): Please triage this failure.
+Language/10_Expressions/30_Identifier_Reference_A13_t01: Fail # TODO(analyzer-team): Please triage this failure.
+Language/10_Expressions/31_Type_Test_A01_t02: Fail # TODO(analyzer-team): Please triage this failure.
+Language/10_Expressions/31_Type_Test_A01_t04: Fail # TODO(analyzer-team): Please triage this failure.
+Language/10_Expressions/32_Type_Cast_A01_t04: Fail # TODO(analyzer-team): Please triage this failure.
+Language/11_Statements/02_Expression_Statements_A01_t12: Fail # TODO(analyzer-team): Please triage this failure.
Language/11_Statements/03_Variable_Declaration_A01_t05: Fail # TODO(analyzer-team): Please triage this failure.
Language/11_Statements/03_Variable_Declaration_A01_t06: Fail # TODO(analyzer-team): Please triage this failure.
Language/11_Statements/03_Variable_Declaration_A01_t09: Fail # TODO(analyzer-team): Please triage this failure.
-Language/11_Statements/03_Variable_Declaration_A02_t03: Fail # TODO(analyzer-team): Please triage this failure.
-Language/11_Statements/03_Variable_Declaration_A02_t05: Fail # TODO(analyzer-team): Please triage this failure.
-Language/11_Statements/03_Variable_Declaration_A02_t06: Fail # TODO(analyzer-team): Please triage this failure.
-Language/11_Statements/05_For_A01_t07: Fail # TODO(analyzer-team): Please triage this failure.
-Language/11_Statements/08_Switch_A07_t02: Fail # TODO(analyzer-team): Please triage this failure.
-Language/11_Statements/09_Try_A01_t18: Fail # TODO(analyzer-team): Please triage this failure.
-Language/13_Libraries_and_Scripts/2_Imports_A02_t03: Fail # TODO(analyzer-team): Please triage this failure.
-Language/13_Libraries_and_Scripts/2_Imports_A02_t05: Fail # TODO(analyzer-team): Please triage this failure.
-Language/13_Libraries_and_Scripts/2_Imports_A02_t12: Fail # TODO(analyzer-team): Please triage this failure.
-Language/13_Libraries_and_Scripts/2_Imports_A02_t13: Fail # TODO(analyzer-team): Please triage this failure.
-Language/13_Libraries_and_Scripts/2_Imports_A02_t15: Fail # TODO(analyzer-team): Please triage this failure.
-Language/13_Libraries_and_Scripts/2_Imports_A02_t19: Fail # TODO(analyzer-team): Please triage this failure.
-Language/13_Libraries_and_Scripts/2_Imports_A03_t02: Fail # TODO(analyzer-team): Please triage this failure.
-Language/13_Libraries_and_Scripts/2_Imports_A03_t12: Fail # TODO(analyzer-team): Please triage this failure.
-Language/13_Libraries_and_Scripts/2_Imports_A03_t22: Fail # TODO(analyzer-team): Please triage this failure.
-LibTest/core/Math/acos_A01_t01: Fail # TODO(analyzer-team): Please triage this failure.
-LibTest/core/Math/asin_A01_t01: Fail # TODO(analyzer-team): Please triage this failure.
-LibTest/core/Math/atan2_A01_t01: Fail # TODO(analyzer-team): Please triage this failure.
-LibTest/core/Math/atan_A01_t01: Fail # TODO(analyzer-team): Please triage this failure.
-LibTest/core/Math/cos_A01_t01: Fail # TODO(analyzer-team): Please triage this failure.
-LibTest/core/Math/exp_A01_t01: Fail # TODO(analyzer-team): Please triage this failure.
-LibTest/core/Math/log_A01_t01: Fail # TODO(analyzer-team): Please triage this failure.
-LibTest/core/Math/pow_A01_t01: Fail # TODO(analyzer-team): Please triage this failure.
-LibTest/core/Math/random_A01_t01: Fail # TODO(analyzer-team): Please triage this failure.
-LibTest/core/Math/sin_A01_t01: Fail # TODO(analyzer-team): Please triage this failure.
-LibTest/core/Math/sqrt_A01_t01: Fail # TODO(analyzer-team): Please triage this failure.
-LibTest/core/Math/tan_A01_t01: Fail # TODO(analyzer-team): Please triage this failure.
-LibTest/core/RegExp/hasMatch_A01_t02: Fail # TODO(analyzer-team): Please triage this failure.
-LibTest/isolate/SendPort/send_A02_t01: Fail # TODO(analyzer-team): Please triage this failure.
-LibTest/isolate/SendPort/send_A02_t02: Fail # TODO(analyzer-team): Please triage this failure.
-LibTest/isolate/SendPort/send_A02_t03: Fail # TODO(analyzer-team): Please triage this failure.
-LibTest/isolate/SendPort/send_A02_t04: Fail # TODO(analyzer-team): Please triage this failure.
-LibTest/isolate/isolate_api/spawnFunction_A02_t01: Fail # TODO(analyzer-team): Please triage this failure.
+Language/11_Statements/03_Variable_Declaration_A01_t10: Fail # TODO(analyzer-team): Please triage this failure.
+Language/11_Statements/03_Variable_Declaration_A01_t16: Fail # TODO(analyzer-team): Please triage this failure.
+Language/11_Statements/03_Variable_Declaration_A01_t17: Fail # TODO(analyzer-team): Please triage this failure.
+Language/11_Statements/03_Variable_Declaration_A01_t18: Fail # TODO(analyzer-team): Please triage this failure.
+Language/11_Statements/03_Variable_Declaration_A01_t19: Fail # TODO(analyzer-team): Please triage this failure.
+Language/11_Statements/06_For_A01_t07: Fail # TODO(analyzer-team): Please triage this failure.
+Language/11_Statements/06_For_A01_t11: Fail # TODO(analyzer-team): Please triage this failure.
+Language/11_Statements/09_Switch_A02_t03: Fail # TODO(analyzer-team): Please triage this failure.
+Language/11_Statements/09_Switch_A06_t02: Fail # TODO(analyzer-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A01_t51: Fail # TODO(analyzer-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A01_t52: Fail # TODO(analyzer-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A02_t03: Fail # TODO(analyzer-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A02_t05: Fail # TODO(analyzer-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A02_t12: Fail # TODO(analyzer-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A02_t13: Fail # TODO(analyzer-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A02_t15: Fail # TODO(analyzer-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A02_t18: Fail # TODO(analyzer-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A02_t19: Fail # TODO(analyzer-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A02_t24: Fail # TODO(analyzer-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A03_t02: Fail # TODO(analyzer-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A03_t06: Fail # TODO(analyzer-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A03_t22: Fail # TODO(analyzer-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A03_t26: Fail # TODO(analyzer-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A03_t42: Fail # TODO(analyzer-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A03_t46: Fail # TODO(analyzer-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A03_t62: Fail # TODO(analyzer-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A03_t66: Fail # TODO(analyzer-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A05_t02: Fail # TODO(analyzer-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/2_Exports_A01_t02: Fail # TODO(analyzer-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/2_Exports_A01_t03: Fail # TODO(analyzer-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/2_Exports_A01_t17: Fail # TODO(analyzer-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/2_Exports_A03_t01: Fail # TODO(analyzer-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/2_Exports_A03_t02: Fail # TODO(analyzer-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/2_Exports_A04_t01: Fail # TODO(analyzer-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/2_Exports_A04_t02: Fail # TODO(analyzer-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/2_Exports_A04_t04: Fail # TODO(analyzer-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/2_Exports_A04_t05: Fail # TODO(analyzer-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/2_Exports_A04_t06: Fail # TODO(analyzer-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/4_Scripts_A01_t16: Fail # TODO(analyzer-team): Please triage this failure.
+LibTest/core/Queue/Queue.from_A01_t02: Fail # TODO(analyzer-team): Please triage this failure.
+LibTest/core/Set/Set.from_A01_t02: Fail # TODO(analyzer-team): Please triage this failure.
Language/03_Overview/2_Privacy_A01_t08: pass # http://dartbug.com/5179
Language/03_Overview/2_Privacy_A01_t11: pass # http://dartbug.com/5179
@@ -159,19 +162,12 @@
Language/10_Expressions/15_Method_Invocation/4_Super_Invocation_A06_t02: pass # http://dartbug.com/5179
Language/10_Expressions/15_Method_Invocation/4_Super_Invocation_A07_t01: pass # http://dartbug.com/5179
Language/10_Expressions/15_Method_Invocation/4_Super_Invocation_A08_t02: pass # http://dartbug.com/5179
-Language/10_Expressions/28_Identifier_Reference_A04_t05: pass # http://dartbug.com/5179
-Language/10_Expressions/28_Identifier_Reference_A04_t07: pass # http://dartbug.com/5179
-Language/10_Expressions/28_Identifier_Reference_A05_t06: pass # http://dartbug.com/5179
-Language/10_Expressions/28_Identifier_Reference_A07_t04: fail # http://dartbug.com/5179
-Language/10_Expressions/28_Identifier_Reference_A07_t09: fail # http://dartbug.com/5179
+Language/10_Expressions/30_Identifier_Reference_A04_t05: pass # http://dartbug.com/5179
+Language/10_Expressions/30_Identifier_Reference_A04_t07: pass # http://dartbug.com/5179
+Language/10_Expressions/30_Identifier_Reference_A05_t06: pass # http://dartbug.com/5179
Language/13_Libraries_and_Scripts/13_Libraries_and_Scripts_A05_t01: pass # http://dartbug.com/5179
-Language/07_Classes/07_Classes_A01_t20: Fail, OK # the default constructor invokes a non-existent zero argument constructor
-Language/07_Classes/07_Classes_A02_t32: Fail, OK # constant constructors are not required to have a body
-Language/07_Classes/07_Classes_A02_t34: Fail # co19 issue 221
-Language/07_Classes/07_Classes_A09_t01: Fail, OK # warning expected if instance member has the same name as a static member
Language/07_Classes/2_Getters_A01_t05: Fail # No issue: waiting to remove old getter syntax
-Language/07_Classes/3_Setters_A04_t02: Fail, OK # getter and method with the same name
Language/07_Classes/3_Setters_A04_t03: Fail, OK # getter and method with the same name
Language/07_Classes/3_Setters_A04_t06: Fail OK # getter and method with the same name
@@ -179,38 +175,11 @@
Language/07_Classes/07_Classes_A07_t03: Fail, OK
Language/07_Classes/07_Classes_A07_t06: Fail, OK
-# co19 issue 218
-Language/10_Expressions/28_Identifier_Reference_A08_t38: Fail, OK
-
-
-Language/10_Expressions/30_Type_Cast_A01_t04: Fail, OK # the expected error is not specified
Language/13_Libraries_and_Scripts/13_Libraries_and_Scripts_A05_t03: Fail, OK # contains syntax error
Language/13_Libraries_and_Scripts/13_Libraries_and_Scripts_A05_t04: Fail, OK # contains syntax error
-Language/13_Libraries_and_Scripts/2_Imports_A01_t18: Fail, OK # contains semantic error
-Language/13_Libraries_and_Scripts/2_Imports_A02_t18: Fail, OK # contains syntax error
-Language/13_Libraries_and_Scripts/2_Imports_A02_t21: Fail, OK # contains syntax error
-Language/13_Libraries_and_Scripts/2_Imports_A02_t24: Fail, OK # co19 issue 243
-Language/13_Libraries_and_Scripts/2_Imports_A05_t02: Fail, OK # invalid directive syntax
-Language/06_Functions/06_Functions_A01_t06: Fail, OK # expecting error that doesn't exist
Language/06_Functions/2_Formal_Parameters/2_Optional_Formals_A03_t02: Fail, OK # deprecated parameter syntax
-Language/07_Classes/6_Constructors/2_Factories_A05_t01: Fail, OK # should expect error
-Language/07_Classes/6_Constructors/2_Factories_A05_t03: Fail, OK # should expect error
-Language/10_Expressions/05_Strings_A02_t39: Fail, OK # no longer an error
-Language/10_Expressions/05_Strings_A02_t41: Fail, OK # no longer an error
-Language/10_Expressions/05_Strings_A02_t43: Fail, OK # no longer an error
-Language/10_Expressions/05_Strings_A02_t45: Fail, OK # no longer an error
-Language/10_Expressions/05_Strings_A02_t47: Fail, OK # no longer an error
-Language/10_Expressions/05_Strings_A02_t49: Fail, OK # no longer an error
Language/10_Expressions/15_Method_Invocation/4_Super_Invocation_A04_t03: Fail # Issue 5294
Language/10_Expressions/15_Method_Invocation/4_Super_Invocation_A04_t04: Fail # Issue 5294
-Language/11_Statements/02_Expression_Statements_A01_t09: Fail, OK # maps with type arguments are allowed
-Language/11_Statements/02_Expression_Statements_A01_t10: Fail, OK # maps with type arguments are allowed
-Language/11_Statements/02_Expression_Statements_A01_t11: Fail, OK # maps with type arguments are allowed
-Language/11_Statements/09_Try_A06_t01: Fail, OK # deprecated catch syntax
-Language/11_Statements/09_Try_A06_t02: Fail, OK # deprecated catch syntax
-Language/11_Statements/09_Try_A06_t03: Fail, OK # deprecated catch syntax
-Language/11_Statements/09_Try_A06_t04: Fail, OK # deprecated catch syntax
-Language/11_Statements/09_Try_A06_t05: Fail, OK # deprecated catch syntax
# The following tests use NoSuchMethodException instead of NoSuchMethodError.
Language/06_Functions/4_External_Functions_A01_t01: Fail, OK # co19 issue 195
@@ -224,15 +193,11 @@
# http://code.google.com/p/co19/issues/detail?id=167 is fixed.
Language/03_Overview/1_Scoping_A02_t28: Fail # language change 1031
-Language/07_Classes/1_Instance_Methods/2_Operators_A01_t03: Fail # Issue 379
Language/07_Classes/2_Getters_A01_t03: Fail, OK # out of date - getters are not allowed to have parameters
-Language/07_Classes/3_Setters_A01_t02: Fail # Issue 379
Language/07_Classes/6_Constructors/1_Generative_Constructors_A15_t07: Fail # Issue 3323
Language/07_Classes/6_Constructors/3_Constant_Constructors_A05_t01: Fail # Issue 2477
Language/07_Classes/6_Constructors/3_Constant_Constructors_A05_t02: Fail # Issue 2477
Language/07_Classes/6_Constructors/3_Constant_Constructors_A05_t03: Fail # Issue 2477
-Language/07_Classes/07_Classes_A09_t02: Fail, OK # co19 issue 215
-Language/07_Classes/07_Classes_A09_t04: Fail, OK # co19 issue 215
Language/10_Expressions/01_Constants_A16_t01: Fail # Issue 1473
Language/10_Expressions/01_Constants_A16_t02: Fail # Issue 1473
Language/10_Expressions/01_Constants_A16_t03: Fail # Issue 1473
@@ -246,36 +211,31 @@
Language/10_Expressions/15_Method_Invocation/4_Super_Invocation_A04_t02: Fail # Issue 3524
Language/10_Expressions/19_Conditional_A01_t12: Fail # language change 3368
Language/10_Expressions/19_Conditional_A01_t13: Fail # language change 3368
-Language/10_Expressions/20_Logical_Boolean_Expressions_A01_t01: Fail # Issue 2371
Language/10_Expressions/20_Logical_Boolean_Expressions_A01_t12: Fail # language change 3368
Language/10_Expressions/20_Logical_Boolean_Expressions_A01_t13: Fail # language change 3368
-Language/10_Expressions/21_Bitwise_Expressions_A01_t01: Fail # Issue 1489
Language/10_Expressions/21_Bitwise_Expressions_A01_t14: Fail # language change 3368
Language/10_Expressions/21_Bitwise_Expressions_A01_t15: Fail # language change 3368
-Language/10_Expressions/22_Equality_A01_t01: Fail # Issue 1489
Language/10_Expressions/22_Equality_A01_t19: Fail # language change 3368
Language/10_Expressions/22_Equality_A01_t20: Fail # language change 3368
Language/10_Expressions/22_Equality_A02_t03: Fail, OK # co19 issue 169
-Language/10_Expressions/22_Equality_A03_t01: Fail, OK # co19 issue 169
-Language/10_Expressions/22_Equality_A03_t03: Fail, OK # co19 issue 169
-Language/10_Expressions/21_Relational_Expressions_A01_t01: Fail # Issue 1489
-Language/10_Expressions/21_Relational_Expressions_A01_t20: Fail # language change 3368
-Language/10_Expressions/21_Relational_Expressions_A01_t21: Fail # language change 3368
-Language/10_Expressions/22_Shift_A01_t01: Fail # Issue 1489
-Language/10_Expressions/22_Shift_A01_t11: Fail # language change 3368
-Language/10_Expressions/22_Shift_A01_t12: Fail # language change 3368
-Language/10_Expressions/26_Postfix_Expressions_A01_t01: Fail # Issue 1489,2439
-Language/10_Expressions/27_Assignable_Expressions_A01_t26: Fail # Issue 1489
-Language/10_Expressions/29_Type_Test_A01_t02: Fail # language change 3368
-Language/11_Statements/05_For_A01_t11: Fail # Issue 3323
-Language/11_Statements/08_Switch_A06_t02: Fail, OK # out of date - case can use any constant expression
-Language/11_Statements/08_Switch_A06_t03: Fail, OK # out of date - case can use any constant expression
-Language/11_Statements/08_Switch_A06_t04: Fail, OK # out of date - case can use any constant expression
+Language/10_Expressions/23_Relational_Expressions_A01_t20: Fail # language change 3368
+Language/10_Expressions/23_Relational_Expressions_A01_t21: Fail # language change 3368
+Language/10_Expressions/24_Shift_A01_t11: Fail # language change 3368
+Language/10_Expressions/24_Shift_A01_t12: Fail # language change 3368
+# The following tests use hashCode() (function) instead of hashCode (getter).
+# co19 issue 273
+LibTest/isolate/SendPort/hashCode_A01_t01: Pass, OK
+LibTest/core/String/hashCode_A01_t01: Pass, OK
+LibTest/core/int/hashCode_A01_t01: Pass, OK
-# The following tests use the deprecated catch syntax
+LibTest/core/List/iterator_next_A02_t01: Fail, OK # co19 issue 288
+LibTest/core/Queue/removeFirst_A02_t01: Fail, OK # co19 issue 288
+LibTest/core/Queue/last_A02_t01: Fail, OK # co19 issue 288
+LibTest/core/Queue/removeLast_A02_t01: Fail, OK # co19 issue 288
+LibTest/core/Queue/first_A02_t01: Fail, OK # co19 issue 288
+LibTest/core/Queue/iterator_next_A02_t01: Fail, OK # co19 issue 288
-LibTest/core/Expect/equals_A02_t01: Fail, OK
Language/06_Functions/3_Type_of_a_Function_A01_t01: Fail, OK
Language/10_Expressions/15_Method_Invocation/1_Ordinary_Invocation_A05_t07: Fail, OK
Language/10_Expressions/15_Method_Invocation/4_Super_Invocation_A03_t02: Fail, OK
@@ -295,21 +255,20 @@
Language/10_Expressions/19_Conditional_A01_t13: Fail, OK
Language/10_Expressions/20_Logical_Boolean_Expressions_A01_t12: Fail, OK
Language/10_Expressions/21_Bitwise_Expressions_A01_t14: Fail, OK
-Language/10_Expressions/21_Relational_Expressions_A01_t21: Fail, OK
+Language/10_Expressions/23_Relational_Expressions_A01_t21: Fail, OK
Language/10_Expressions/22_Equality_A01_t19: Fail, OK
Language/10_Expressions/01_Constants_A17_t03: Fail, OK
Language/10_Expressions/05_Strings/1_String_Interpolation_A04_t02: Fail, OK
Language/10_Expressions/05_Strings/1_String_Interpolation_A03_t02: Fail, OK
Language/10_Expressions/05_Strings/1_String_Interpolation_A01_t05: Fail, OK
-Language/10_Expressions/29_Type_Test_A01_t02: Fail, OK
-Language/10_Expressions/22_Shift_A01_t11: Fail, OK
+Language/10_Expressions/24_Shift_A01_t11: Fail, OK
Language/10_Expressions/20_Logical_Boolean_Expressions_A01_t13: Fail, OK
Language/10_Expressions/22_Equality_A01_t20: Fail, OK
-Language/10_Expressions/28_Identifier_Reference_A04_t07: Fail, OK
-Language/10_Expressions/28_Identifier_Reference_A04_t05: Fail, OK
+Language/10_Expressions/30_Identifier_Reference_A04_t07: Fail, OK
+Language/10_Expressions/30_Identifier_Reference_A04_t05: Fail, OK
Language/10_Expressions/01_Constants_A16_t02: Fail, OK
-Language/10_Expressions/21_Relational_Expressions_A01_t20: Fail, OK
-Language/10_Expressions/28_Identifier_Reference_A05_t06: Fail, OK
+Language/10_Expressions/23_Relational_Expressions_A01_t20: Fail, OK
+Language/10_Expressions/30_Identifier_Reference_A05_t06: Fail, OK
Language/10_Expressions/01_Constants_A15_t16: Fail, OK
Language/10_Expressions/14_Function_Invocation/3_Unqualified_Invocation_A01_t04: Fail, OK
Language/10_Expressions/14_Function_Invocation/3_Unqualified_Invocation_A01_t07: Fail, OK
@@ -320,22 +279,11 @@
Language/10_Expressions/19_Conditional_A01_t12: Fail, OK
Language/10_Expressions/01_Constants_A16_t03: Fail, OK
Language/10_Expressions/01_Constants_A16_t01: Fail, OK
-Language/10_Expressions/22_Shift_A01_t12: Fail, OK
+Language/10_Expressions/24_Shift_A01_t12: Fail, OK
Language/07_Classes/2_Getters_A01_t03: Fail, OK
Language/07_Classes/6_Constructors/3_Constant_Constructors_A05_t02: Fail, OK
Language/07_Classes/6_Constructors/3_Constant_Constructors_A05_t03: Fail, OK
Language/07_Classes/6_Constructors/3_Constant_Constructors_A05_t01: Fail, OK
-Language/07_Classes/1_Instance_Methods/2_Operators_A01_t03: Fail, OK
-Language/07_Classes/3_Setters_A01_t02: Fail, OK
-Language/11_Statements/08_Switch_A06_t02: Fail, OK
-Language/11_Statements/09_Try_A01_t01: Fail, OK
-Language/11_Statements/09_Try_A05_t03: Fail, OK
-Language/11_Statements/08_Switch_A06_t03: Fail, OK
-Language/11_Statements/09_Try_A02_t03: Fail, OK
-Language/11_Statements/09_Try_A04_t01: Fail, OK
-Language/11_Statements/05_For/2_For_in_A01_t04: Fail, OK
-Language/11_Statements/05_For/2_For_in_A01_t02: Fail, OK
-Language/11_Statements/08_Switch_A06_t04: Fail, OK
Language/03_Overview/2_Privacy_A01_t11: Fail, OK
Language/03_Overview/1_Scoping_A02_t28: Fail, OK
Language/03_Overview/2_Privacy_A01_t18: Fail, OK
diff --git a/tests/co19/co19-dart2dart.status b/tests/co19/co19-dart2dart.status
index 60f39e2..be87353 100644
--- a/tests/co19/co19-dart2dart.status
+++ b/tests/co19/co19-dart2dart.status
@@ -3,31 +3,201 @@
# BSD-style license that can be found in the LICENSE file.
[ $compiler == dart2dart ]
-# These tests need to be updated to the new Date core lib API, co19 issue 256:
-LibTest/core/Date/Date.fromMillisecondsSinceEpoch_A01_t01: Fail
-LibTest/core/Date/Date.fromMillisecondsSinceEpoch_A01_t02: Fail
-LibTest/core/Date/Date_A01_t04: Fail
-LibTest/core/Date/Date_A01_t05: Fail
-LibTest/core/Date/isUtc_A01_t01: Fail
-LibTest/core/Date/millisecondsSinceEpoch_A01_t01: Fail
-LibTest/core/Date/operator_GE_A01_t01: Fail
-LibTest/core/Date/operator_GT_A01_t01: Fail
-LibTest/core/Date/operator_LE_A01_t01: Fail
-LibTest/core/Date/operator_LT_A01_t01: Fail
-LibTest/core/Date/operator_equality_A01_t01: Fail
-LibTest/core/Date/timeZoneName_A01_t01: Fail
-LibTest/core/Date/timeZoneOffset_A01_t01: Fail
-LibTest/core/Date/toLocal_A01_t01: Fail
-LibTest/core/Date/toUtc_A01_t01: Fail
+Language/13_Libraries_and_Scripts/2_Exports_A04_t02: Crash # TODO(dart2dart-team): Please triage this crash.
+Language/13_Libraries_and_Scripts/2_Exports_A04_t03: Crash # TODO(dart2dart-team): Please triage this crash.
+
+Language/05_Variables/05_Variables_A03_t09: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/05_Variables/05_Variables_A03_t11: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/05_Variables/05_Variables_A03_t12: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/05_Variables/05_Variables_A03_t13: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/05_Variables/05_Variables_A03_t14: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/05_Variables/05_Variables_A03_t15: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/05_Variables/1_Evaluation_of_Implicit_Variable_Getters_A01_t02: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/05_Variables/1_Evaluation_of_Implicit_Variable_Getters_A01_t05: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/07_Classes/1_Instance_Methods_A06_t01: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/07_Classes/6_Constructors/2_Factories_A05_t01: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/07_Classes/6_Constructors/2_Factories_A05_t02: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/07_Classes/6_Constructors/2_Factories_A05_t03: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/07_Classes/6_Constructors/2_Factories_A05_t04: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/10_Expressions/01_Constants_A03_t01: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/10_Expressions/01_Constants_A20_t01: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/10_Expressions/01_Constants_A20_t02: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/10_Expressions/09_Function_Expressions_A03_t02: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/10_Expressions/09_Function_Expressions_A04_t02: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/10_Expressions/30_Identifier_Reference_A04_t09: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/10_Expressions/30_Identifier_Reference_A05_t01: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/10_Expressions/30_Identifier_Reference_A05_t04: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/10_Expressions/30_Identifier_Reference_A05_t12: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/10_Expressions/30_Identifier_Reference_A06_t01: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/10_Expressions/30_Identifier_Reference_A06_t02: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/10_Expressions/30_Identifier_Reference_A08_t02: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/10_Expressions/31_Type_Test_A01_t02: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/10_Expressions/31_Type_Test_A01_t04: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/10_Expressions/31_Type_Test_A04_t01: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/10_Expressions/32_Type_Cast_A01_t04: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/10_Expressions/32_Type_Cast_A03_t01: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/10_Expressions/32_Type_Cast_A03_t02: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/10_Expressions/32_Type_Cast_A05_t01: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/10_Expressions/32_Type_Cast_A05_t02: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/10_Expressions/32_Type_Cast_A05_t04: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/11_Statements/03_Variable_Declaration_A04_t02: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/11_Statements/03_Variable_Declaration_A04_t03: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/11_Statements/03_Variable_Declaration_A04_t04: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/11_Statements/03_Variable_Declaration_A04_t05: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/11_Statements/03_Variable_Declaration_A04_t06: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/11_Statements/04_Local_Function_Declaration_A01_t01: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/11_Statements/04_Local_Function_Declaration_A02_t02: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/11_Statements/06_For_A01_t11: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/11_Statements/06_For_A01_t12: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/11_Statements/09_Switch_A01_t02: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/11_Statements/09_Switch_A02_t01: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/11_Statements/09_Switch_A02_t02: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/11_Statements/09_Switch_A02_t03: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/11_Statements/09_Switch_A03_t01: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/11_Statements/09_Switch_A03_t02: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/11_Statements/09_Switch_A06_t02: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/11_Statements/10_Try_A07_t03: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/11_Statements/10_Try_A11_t01: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/11_Statements/11_Return_A05_t01: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/11_Statements/11_Return_A05_t02: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/11_Statements/11_Return_A05_t03: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/11_Statements/12_Labels_A01_t03: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/11_Statements/12_Labels_A03_t04: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/11_Statements/14_Continue_A02_t12: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/11_Statements/14_Continue_A02_t13: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A02_t01: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A02_t02: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A02_t16: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A02_t17: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A02_t18: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A02_t19: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A02_t28: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A03_t02: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A03_t09: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A03_t10: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A03_t22: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A03_t29: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A03_t30: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A03_t42: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A03_t49: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A03_t50: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A03_t62: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A03_t69: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A03_t70: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/2_Exports_A01_t07: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/2_Exports_A01_t15: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/2_Exports_A01_t16: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/2_Exports_A04_t01: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/2_Exports_A04_t04: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/2_Exports_A04_t05: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/2_Exports_A04_t06: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/3_Parts_A03_t02: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/4_Scripts_A01_t16: Fail # TODO(dart2dart-team): Please triage this failure.
+LibTest/core/Date/Date.fromMillisecondsSinceEpoch_A03_t01: Fail # TODO(dart2dart-team): Please triage this failure.
+LibTest/core/Queue/Queue.from_A01_t02: Fail # TODO(dart2dart-team): Please triage this failure.
+LibTest/core/Set/Set.from_A01_t02: Fail # TODO(dart2dart-team): Please triage this failure.
+LibTest/math/Random/nextDouble_A01_t01: Fail # TODO(dart2dart-team): Please triage this failure.
+LibTest/math/exp_A01_t01: Fail # TODO(dart2dart-team): Please triage this failure.
+LibTest/math/parseDouble_A02_t01: Fail # TODO(dart2dart-team): Please triage this failure.
+LibTest/math/pow_A01_t01: Fail # TODO(dart2dart-team): Please triage this failure.
+LibTest/math/pow_A11_t01: Fail # TODO(dart2dart-team): Please triage this failure.
+LibTest/math/pow_A13_t01: Fail # TODO(dart2dart-team): Please triage this failure.
+LibTest/math/sin_A01_t01: Fail # TODO(dart2dart-team): Please triage this failure.
+LibTest/math/tan_A01_t01: Fail # TODO(dart2dart-team): Please triage this failure.
LibTest/isolate/isolate_api/port_A01_t01: Skip # Times out.
-LibTest/core/OutOfMemoryException/OutOfMemoryException_A01_t01: Fail, OK # co19 issue 263
-LibTest/core/OutOfMemoryException/toString_A01_t01: Fail, OK # co19 issue 263
+LibTest/core/String/charCodes_A01_t01: Fail, OK # co19 issue 289
-Language/10_Expressions/11_Instance_Creation/1_New_A13_t02: Fail # TRIAGE
+LibTest/isolate/SendPort/send_A02_t02: Fail, OK # co19 issue 293
+LibTest/isolate/SendPort/send_A02_t03: Fail, OK # co19 issue 293
+LibTest/isolate/SendPort/send_A02_t04: Fail, OK # co19 issue 293
+LibTest/core/LinkedHashMap/LinkedHashMap_class_A01_t01: Fail, OK # co19 issue 293
+LibTest/core/Map/getKeys_A01_t01: Fail, OK # co19 issue 293
+LibTest/core/Map/getKeys_A01_t02: Fail, OK # co19 issue 293
+LibTest/core/Map/getValues_A01_t02: Fail, OK # co19 issue 293
+LibTest/core/Map/getValues_A01_t01: Fail, OK # co19 issue 293
-Language/03_Overview/1_Scoping_A02_t05: Fail # inherited from dart2js
+LibTest/core/Stopwatch/Stopwatch_A01_t01: Fail, OK # co19 issue 297
+LibTest/core/Stopwatch/elapsed_A01_t03: Fail, OK # co19 issue 297
+LibTest/core/Stopwatch/elapsed_A01_t01: Fail, OK # co19 issue 297
+LibTest/core/Stopwatch/elapsed_A01_t02: Fail, OK # co19 issue 297
+LibTest/core/Stopwatch/elapsedInUs_A01_t01: Fail, OK # co19 issue 297
+LibTest/core/Stopwatch/elapsedInMs_A01_t01: Fail, OK # co19 issue 297
+LibTest/core/Stopwatch/start_A01_t01: Fail, OK # co19 issue 297
+LibTest/core/Stopwatch/start_A01_t02: Fail, OK # co19 issue 297
+LibTest/core/Stopwatch/start_A01_t03: Fail, OK # co19 issue 297
+LibTest/core/Stopwatch/stop_A01_t01: Fail, OK # co19 issue 297
+LibTest/core/Stopwatch/frequency_A01_t01: Fail, OK # co19 issue 297
+
+
+LibTest/core/Match/end_A01_t01: Fail, OK # co19 issue 294
+LibTest/core/Match/group_A01_t01: Fail, OK # co19 issue 294
+LibTest/core/Match/groupCount_A01_t01: Fail, OK # co19 issue 294
+LibTest/core/Match/operator_subscript_A01_t01: Fail, OK # co19 issue 294
+LibTest/core/Match/start_A01_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/allMatches_A01_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/firstMatch_A01_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Assertion_A03_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Assertion_A04_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Assertion_A05_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Atom_A01_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Atom_A02_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Atom_A03_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Atom_A03_t02: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Atom_A03_t03: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Atom_A04_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Atom_A05_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Atom_A06_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_AtomEscape_A01_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Disjunction_A01_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Quantifier_A01_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Quantifier_A02_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Quantifier_A03_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Quantifier_A04_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Quantifier_A05_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Quantifier_A06_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Term_A01_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Term_A02_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Term_A03_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Term_A04_t01: Fail, OK # co19 issue 294
+
+LibTest/core/Queue/filter_A01_t04: Fail, OK # co19 issue 287
+LibTest/core/Map/getValues_A01_t02: Fail, OK # co19 issue 287
+
+LibTest/core/Queue/filter_A01_t04: Fail, OK # co19 issue 291
+LibTest/core/Queue/first_A01_t01: Fail, OK # co19 issue 291
+LibTest/core/Queue/removeFirst_A01_t01: Fail, OK # co19 issue 291
+LibTest/core/Queue/first_A02_t01: Fail, OK # co19 issue 291
+LibTest/core/Queue/addFirst_A01_t01: Fail, OK # co19 issue 291
+LibTest/core/Queue/removeLast_A01_t01: Fail, OK # co19 issue 291
+LibTest/core/Queue/add_A01_t01: Fail, OK # co19 issue 291
+LibTest/core/Queue/last_A02_t01: Fail, OK # co19 issue 291
+LibTest/core/Queue/addLast_A01_t01: Fail, OK # co19 issue 291
+LibTest/core/Queue/last_A01_t01: Fail, OK # co19 issue 291
+LibTest/core/List/last_A02_t01: Fail, OK # co19 issue 291
+LibTest/core/List/last_A01_t01: Fail, OK # co19 issue 291
+
+LibTest/isolate/isolate_api/port_A01_t01: Skip # Times out.
+
+LibTest/core/Map/putIfAbsent_A01_t08: Fail, OK # co19 issue 276
+LibTest/core/Map/putIfAbsent_A01_t06: Fail, OK # co19 issue 276
+LibTest/isolate/ReceivePort/receive_A01_t02: Fail, OK # co19 issue 276
+
+LibTest/core/UnsupportedOperationException/toString_A01_t01: Fail, OK # co19 issue 285
+LibTest/core/UnsupportedOperationException/UnsupportedOperationException_A01_t01: Fail, OK # co19 issue 285
+
+LibTest/core/List/iterator_next_A02_t01: Fail, OK # co19 issue 288
+LibTest/core/Queue/iterator_next_A02_t01: Fail, OK # co19 issue 288
+LibTest/core/Queue/first_A02_t01: Fail, OK # co19 issue 288
+LibTest/core/Queue/removeLast_A02_t01: Fail, OK # co19 issue 288
+LibTest/core/Queue/last_A02_t01: Fail, OK # co19 issue 288
+LibTest/core/Queue/removeFirst_A02_t01: Fail, OK # co19 issue 288
+LibTest/core/NoMoreElementsException/NoMoreElementsException_A01_t01: Fail, OK # co19 issue 288
+LibTest/core/NoMoreElementsException/toString_A01_t01: Fail, OK # co19 issue 288
+LibTest/core/EmptyQueueException/EmptyQueueException_A01_t01: Fail, OK # co19 issue 288
+LibTest/core/EmptyQueueException/toString_A01_t01: Fail, OK # co19 issue 288
+
Language/03_Overview/1_Scoping_A01_t39: Fail # http://dartbug.com/5519
Language/03_Overview/1_Scoping_A01_t40: Fail # http://dartbug.com/5519
Language/03_Overview/1_Scoping_A01_t41: Fail # http://dartbug.com/5519
@@ -35,7 +205,6 @@
Language/03_Overview/1_Scoping_A02_t07: Fail # inherited from dart2js
Language/03_Overview/1_Scoping_A02_t12: Fail # inherited from dart2js
Language/03_Overview/2_Privacy_A01_t06: Fail # New import syntax
-Language/03_Overview/2_Privacy_A01_t11: Fail # inherited from dart2js
Language/03_Overview/2_Privacy_A01_t14: Fail # inherited from dart2js
Language/05_Variables/05_Variables_A01_t04: Fail # http://dartbug.com/5519
Language/05_Variables/05_Variables_A01_t05: Fail # http://dartbug.com/5519
@@ -46,13 +215,18 @@
Language/05_Variables/05_Variables_A01_t15: Fail # http://dartbug.com/5519
Language/05_Variables/05_Variables_A03_t01: Fail # http://dartbug.com/5519
Language/05_Variables/05_Variables_A03_t02: Fail # http://dartbug.com/5519
-Language/05_Variables/05_Variables_A03_t03: Fail # inherited from VM
Language/05_Variables/05_Variables_A03_t04: Fail # http://dartbug.com/5519
Language/05_Variables/05_Variables_A03_t05: Fail # http://dartbug.com/5519
Language/05_Variables/05_Variables_A03_t06: Fail # http://dartbug.com/5519
Language/05_Variables/05_Variables_A03_t07: Fail # inherited from VM
Language/05_Variables/05_Variables_A03_t08: Fail # http://dartbug.com/5519
+Language/05_Variables/05_Variables_A03_t09: Fail # inherited from dart2js
Language/05_Variables/05_Variables_A03_t10: Fail # inherited from VM
+Language/05_Variables/05_Variables_A03_t11: Fail # inherited from VM
+Language/05_Variables/05_Variables_A03_t12: Fail # inherited from dart2js
+Language/05_Variables/05_Variables_A03_t13: Fail # inherited from VM
+Language/05_Variables/05_Variables_A03_t14: Fail # inherited from VM
+Language/05_Variables/05_Variables_A03_t15: Fail # inherited from VM
Language/05_Variables/05_Variables_A04_t01: Fail # http://dartbug.com/5519
Language/05_Variables/05_Variables_A04_t02: Fail # http://dartbug.com/5519
Language/05_Variables/05_Variables_A04_t03: Fail # http://dartbug.com/5519
@@ -64,7 +238,6 @@
Language/05_Variables/05_Variables_A04_t10: Fail # http://dartbug.com/5519
Language/05_Variables/05_Variables_A05_t01: Fail # http://dartbug.com/5519
Language/05_Variables/05_Variables_A05_t02: Fail # http://dartbug.com/5519
-Language/06_Functions/06_Functions_A01_t06: Fail # inherited from VM
Language/06_Functions/06_Functions_A01_t22: Fail # inherited from VM
Language/06_Functions/06_Functions_A01_t31: Fail # http://dartbug.com/5519
Language/06_Functions/1_Function_Declaration_A01_t01: Fail # http://dartbug.com/5519
@@ -97,12 +270,9 @@
Language/06_Functions/2_Formal_Parameters_A03_t05: Fail # http://dartbug.com/5519
Language/06_Functions/2_Formal_Parameters_A03_t06: Fail # http://dartbug.com/5519
Language/06_Functions/4_External_Functions_A01_t01: Fail # inherited from VM
-Language/07_Classes/07_Classes_A01_t20: Fail # inherited from VM
Language/07_Classes/07_Classes_A02_t02: Fail # http://dartbug.com/5519
Language/07_Classes/07_Classes_A02_t04: Fail # http://dartbug.com/5519
Language/07_Classes/07_Classes_A02_t11: Fail # http://dartbug.com/5519
-Language/07_Classes/07_Classes_A02_t32: Fail # inherited from VM
-Language/07_Classes/07_Classes_A02_t34: Fail # inherited from VM
Language/07_Classes/07_Classes_A03_t01: Fail # inherited from VM
Language/07_Classes/07_Classes_A03_t02: Fail # http://dartbug.com/5519
Language/07_Classes/07_Classes_A03_t07: Fail # inherited from dart2js
@@ -113,11 +283,7 @@
Language/07_Classes/07_Classes_A04_t22: Fail # inherited from dart2js
Language/07_Classes/07_Classes_A04_t24: Fail # inherited from dart2js
Language/07_Classes/07_Classes_A04_t25: Fail # inherited from dart2js
-Language/07_Classes/07_Classes_A09_t01: Fail # inherited from VM
-Language/07_Classes/07_Classes_A09_t02: Fail # inherited from VM
-Language/07_Classes/07_Classes_A09_t04: Fail # inherited from VM
Language/07_Classes/10_Superinterfaces_A04_t01: Fail # http://dartbug.com/5519
-Language/07_Classes/1_Instance_Methods/2_Operators_A01_t03: Fail # inherited from VM
Language/07_Classes/1_Instance_Methods/2_Operators_A02_t01: Fail # inherited from VM
Language/07_Classes/1_Instance_Methods/2_Operators_A03_t01: Fail # inherited from dart2js
Language/07_Classes/1_Instance_Methods/2_Operators_A03_t02: Fail # inherited from dart2js
@@ -146,16 +312,12 @@
Language/07_Classes/1_Instance_Methods/2_Operators_A07_t04: Fail # http://dartbug.com/5519
Language/07_Classes/1_Instance_Methods_A02_t01: Fail # http://dartbug.com/5519
Language/07_Classes/1_Instance_Methods_A02_t02: Fail # http://dartbug.com/5519
-Language/07_Classes/1_Instance_Methods_A02_t03: Fail # http://dartbug.com/5519
-Language/07_Classes/1_Instance_Methods_A02_t04: Fail # http://dartbug.com/5519
Language/07_Classes/1_Instance_Methods_A02_t05: Fail # http://dartbug.com/5519
-Language/07_Classes/1_Instance_Methods_A02_t06: Fail # http://dartbug.com/5519
Language/07_Classes/2_Getters_A01_t03: Fail # inherited from VM
Language/07_Classes/2_Getters_A01_t04: Fail # http://dartbug.com/5519
Language/07_Classes/2_Getters_A01_t05: Fail # inherited from VM
Language/07_Classes/2_Getters_A01_t06: Fail # http://dartbug.com/5519
Language/07_Classes/2_Getters_A01_t07: Fail # http://dartbug.com/5519
-Language/07_Classes/3_Setters_A01_t02: Fail # inherited from VM
Language/07_Classes/3_Setters_A03_t01: Fail # http://dartbug.com/5519
Language/07_Classes/3_Setters_A03_t02: Fail # http://dartbug.com/5519
Language/07_Classes/3_Setters_A03_t03: Fail # http://dartbug.com/5519
@@ -173,15 +335,12 @@
Language/07_Classes/3_Setters_A04_t07: Fail # inherited from VM
Language/07_Classes/3_Setters_A04_t08: Fail # inherited from VM
Language/07_Classes/4_Abstract_Instance_Members_A04_t01: Fail # http://dartbug.com/5519
-Language/07_Classes/4_Abstract_Instance_Members_A04_t04: Fail # http://dartbug.com/5519
Language/07_Classes/4_Abstract_Instance_Members_A04_t05: Fail # inherited from VM
Language/07_Classes/4_Abstract_Instance_Members_A04_t06: Fail # inherited from VM
Language/07_Classes/6_Constructors/1_Generative_Constructors_A03_t05: Fail # http://dartbug.com/5519
Language/07_Classes/6_Constructors/1_Generative_Constructors_A09_t01: Fail # http://dartbug.com/5519
Language/07_Classes/6_Constructors/1_Generative_Constructors_A15_t07: Fail # inherited from VM
Language/07_Classes/6_Constructors/1_Generative_Constructors_A21_t01: Fail # http://dartbug.com/5519
-Language/07_Classes/6_Constructors/2_Factories_A06_t05: Fail # inherited from VM
-Language/07_Classes/6_Constructors/2_Factories_A06_t06: Fail # inherited from VM
Language/07_Classes/6_Constructors/2_Factories_A07_t01: Fail # inherited from VM
Language/07_Classes/6_Constructors/3_Constant_Constructors_A02_t01: Fail # http://dartbug.com/5519
Language/07_Classes/6_Constructors/3_Constant_Constructors_A02_t03: Fail # http://dartbug.com/5519
@@ -195,8 +354,6 @@
Language/07_Classes/6_Constructors/3_Constant_Constructors_A05_t03: Fail # inherited from VM
Language/07_Classes/6_Constructors_A01_t01: Fail # inherited from VM
Language/07_Classes/6_Constructors_A02_t01: Fail # http://dartbug.com/5519
-Language/07_Classes/8_Static_Variables/1_Evaluation_of_Static_Variable_Getters_A01_t02: Fail # inherited from VM
-Language/07_Classes/8_Static_Variables/1_Evaluation_of_Static_Variable_Getters_A01_t05: Fail # inherited from VM
Language/09_Generics/09_Generics_A05_t01: Fail # inherited from dart2js
Language/09_Generics/09_Generics_A05_t02: Fail # inherited from VM
Language/10_Expressions/01_Constants_A03_t02: Fail # http://dartbug.com/5519
@@ -247,8 +404,6 @@
Language/10_Expressions/01_Constants_A17_t02: Fail # http://dartbug.com/5519
Language/10_Expressions/01_Constants_A17_t03: Crash # inherited from VM
Language/10_Expressions/01_Constants_A17_t03: Fail # http://dartbug.com/5519
-Language/10_Expressions/01_Constants_A19_t02: Fail # inherited from VM
-Language/10_Expressions/01_Constants_A19_t03: Fail # inherited from VM
Language/10_Expressions/01_Constants_A19_t04: Fail # http://dartbug.com/5519
Language/10_Expressions/05_Strings/1_String_Interpolation_A01_t04: Fail # Inherited from dart2js
Language/10_Expressions/05_Strings/1_String_Interpolation_A01_t05: Fail # Inherited from dart2js
@@ -256,17 +411,9 @@
Language/10_Expressions/05_Strings/1_String_Interpolation_A01_t09: Fail, OK # co19 issue 210
Language/10_Expressions/05_Strings/1_String_Interpolation_A03_t02: Fail # inherited from VM
Language/10_Expressions/05_Strings/1_String_Interpolation_A04_t02: Fail # inherited from VM
-Language/10_Expressions/05_Strings_A01_t01: Fail # inherited from VM
Language/10_Expressions/05_Strings_A02_t01: Skip # co19 issue 90.
-Language/10_Expressions/05_Strings_A02_t39: Fail # inherited from VM
-Language/10_Expressions/05_Strings_A02_t41: Fail # inherited from VM
-Language/10_Expressions/05_Strings_A02_t43: Fail # inherited from VM
-Language/10_Expressions/05_Strings_A02_t45: Fail # inherited from VM
Language/10_Expressions/05_Strings_A02_t46: Fail # inherited from VM
-Language/10_Expressions/05_Strings_A02_t47: Fail # inherited from VM
Language/10_Expressions/05_Strings_A02_t48: Fail # inherited from VM
-Language/10_Expressions/05_Strings_A02_t49: Fail # inherited from VM
-Language/10_Expressions/05_Strings_A12_t01: Fail # Inherited from dart2js
Language/10_Expressions/05_Strings_A20_t01: Fail # inherited from VM
Language/10_Expressions/06_Lists_A03_t01: Fail # http://dartbug.com/5519
Language/10_Expressions/06_Lists_A03_t02: Fail # http://dartbug.com/5519
@@ -275,23 +422,12 @@
Language/10_Expressions/07_Maps_A02_t01: Fail # http://dartbug.com/5519
Language/10_Expressions/07_Maps_A02_t02: Fail # http://dartbug.com/5519
Language/10_Expressions/08_Throw_A01_t01: Fail # inherited from dart2js
-Language/10_Expressions/08_Throw_A03_t02: Fail # inherited from dart2js
-Language/10_Expressions/08_Throw_A03_t03: Fail # inherited from dart2js
-Language/10_Expressions/08_Throw_A04_t01: Fail # inherited from dart2js
Language/10_Expressions/08_Throw_A05_t01: Fail # inherited from dart2js
-Language/10_Expressions/08_Throw_A05_t02: Fail # inherited from dart2js
-Language/10_Expressions/08_Throw_A05_t03: Fail # inherited from dart2js
-Language/10_Expressions/09_Function_Expressions_A02_t01: Fail # inherited from VM
-Language/10_Expressions/09_Function_Expressions_A04_t01: Fail # inherited from VM (most probably a bug in the test)
-Language/10_Expressions/09_Function_Expressions_A06_t01: Fail # inherited from dart2js
Language/10_Expressions/11_Instance_Creation/1_New_A02_t03: Fail # inherited from dart2js
Language/10_Expressions/11_Instance_Creation/1_New_A02_t05: Fail # inherited from dart2js
Language/10_Expressions/11_Instance_Creation/1_New_A02_t06: Fail # inherited from dart2js
Language/10_Expressions/11_Instance_Creation/1_New_A02_t07: Fail # inherited from dart2js
-Language/10_Expressions/11_Instance_Creation/1_New_A06_t06: Fail # Inherited from dart2js
-Language/10_Expressions/11_Instance_Creation/1_New_A07_t01: Fail # Inherited from dart2js
Language/10_Expressions/11_Instance_Creation/1_New_A09_t09: Fail # inherited from VM
-Language/10_Expressions/11_Instance_Creation/1_New_A11_t01: Fail # Inherited from VM
Language/10_Expressions/11_Instance_Creation/1_New_A12_t01: Fail # co19 issue 255: unmatched bracket (same behavior in dart2js)
Language/10_Expressions/11_Instance_Creation/1_New_A12_t02: Fail # Inherited from VM
Language/10_Expressions/11_Instance_Creation/1_New_A13_t04: Fail # Inherited from VM
@@ -300,7 +436,6 @@
Language/10_Expressions/11_Instance_Creation/2_Const_A06_t01: Fail # http://dartbug.com/5519
Language/10_Expressions/11_Instance_Creation/2_Const_A06_t02: Fail # http://dartbug.com/5519
Language/10_Expressions/11_Instance_Creation/2_Const_A10_t01: Fail # inherited from VM
-Language/10_Expressions/13_Property_Extraction_A01_t01: Fail # co19 issue 255: unmatched bracket (same behavior in dart2js)
Language/10_Expressions/14_Function_Invocation/2_Binding_Actuals_to_Formals_A04_t01: Fail # http://dartbug.com/5519
Language/10_Expressions/14_Function_Invocation/3_Unqualified_Invocation_A01_t03: Fail # inherited from VM
Language/10_Expressions/14_Function_Invocation/3_Unqualified_Invocation_A01_t04: Fail # co19 issue 166
@@ -314,7 +449,6 @@
Language/10_Expressions/15_Method_Invocation/1_Ordinary_Invocation_A05_t05: Fail # inherited from VM
Language/10_Expressions/15_Method_Invocation/1_Ordinary_Invocation_A05_t06: Fail # inherited from VM
Language/10_Expressions/15_Method_Invocation/1_Ordinary_Invocation_A08_t01: Fail # inherited from VM
-Language/10_Expressions/15_Method_Invocation/2_Cascaded_Invocation_A01_t01: Fail # inherited from VM
Language/10_Expressions/15_Method_Invocation/3_Static_Invocation_A03_t03: Fail # inherited from VM
Language/10_Expressions/15_Method_Invocation/3_Static_Invocation_A03_t04: Fail # http://dartbug.com/5519
Language/10_Expressions/15_Method_Invocation/3_Static_Invocation_A03_t06: Fail # inherited from VM
@@ -332,7 +466,6 @@
Language/10_Expressions/15_Method_Invocation/4_Super_Invocation_A04_t04: Fail # inherited from VM
Language/10_Expressions/15_Method_Invocation/4_Super_Invocation_A07_t01: Fail # co19 issue 251 or issue 5732
Language/10_Expressions/15_Method_Invocation/4_Super_Invocation_A08_t02: Fail # co19 issue 251 or issue 5732
-Language/10_Expressions/17_Getter_Invocation_A01_t03: Fail # inherited from VM
Language/10_Expressions/17_Getter_Invocation_A02_t01: Fail # inherited from VM
Language/10_Expressions/17_Getter_Invocation_A02_t02: Fail # inherited from VM
Language/10_Expressions/18_Assignment_A05_t02: Fail # inherited from VM
@@ -345,27 +478,24 @@
Language/10_Expressions/19_Conditional_A01_t13: Fail # Inherited from dart2js
Language/10_Expressions/19_Conditional_A01_t14: Fail # Inherited from dart2js
Language/10_Expressions/19_Conditional_A01_t15: Fail # Inherited from dart2js
-Language/10_Expressions/20_Logical_Boolean_Expressions_A01_t01: Fail # inherited from VM
Language/10_Expressions/20_Logical_Boolean_Expressions_A01_t11: Fail # Inherited from dart2js
Language/10_Expressions/20_Logical_Boolean_Expressions_A01_t12: Fail # http://dartbug.com/5519
Language/10_Expressions/20_Logical_Boolean_Expressions_A01_t13: Fail # Inherited from dart2js
Language/10_Expressions/20_Logical_Boolean_Expressions_A01_t14: Fail # Inherited from dart2js
-Language/10_Expressions/21_Bitwise_Expressions_A01_t01: Fail # inherited from VM
Language/10_Expressions/21_Bitwise_Expressions_A01_t13: Fail # Inherited from dart2js
Language/10_Expressions/21_Bitwise_Expressions_A01_t14: Fail # http://dartbug.com/5519
Language/10_Expressions/21_Bitwise_Expressions_A01_t15: Fail # Inherited from dart2js
Language/10_Expressions/21_Bitwise_Expressions_A01_t16: Fail # Inherited from dart2js
Language/10_Expressions/21_Bitwise_Expressions_A01_t17: Fail # Inherited from dart2js
-Language/10_Expressions/21_Relational_Expressions_A01_t01: Fail # inherited from VM
-Language/10_Expressions/21_Relational_Expressions_A01_t10: Fail # http://dartbug.com/5519
-Language/10_Expressions/21_Relational_Expressions_A01_t11: Fail # http://dartbug.com/5519
-Language/10_Expressions/21_Relational_Expressions_A01_t12: Fail # http://dartbug.com/5519
-Language/10_Expressions/21_Relational_Expressions_A01_t13: Fail # http://dartbug.com/5519
-Language/10_Expressions/21_Relational_Expressions_A01_t19: Fail # Inherited from dart2js
-Language/10_Expressions/21_Relational_Expressions_A01_t20: Fail # http://dartbug.com/5519
-Language/10_Expressions/21_Relational_Expressions_A01_t21: Fail # Inherited from dart2js
-Language/10_Expressions/21_Relational_Expressions_A01_t22: Fail # Inherited from dart2js
-Language/10_Expressions/21_Relational_Expressions_A01_t23: Fail # Inherited from dart2js
+Language/10_Expressions/23_Relational_Expressions_A01_t10: Fail # http://dartbug.com/5519
+Language/10_Expressions/23_Relational_Expressions_A01_t11: Fail # http://dartbug.com/5519
+Language/10_Expressions/23_Relational_Expressions_A01_t12: Fail # http://dartbug.com/5519
+Language/10_Expressions/23_Relational_Expressions_A01_t13: Fail # http://dartbug.com/5519
+Language/10_Expressions/23_Relational_Expressions_A01_t19: Fail # Inherited from dart2js
+Language/10_Expressions/23_Relational_Expressions_A01_t20: Fail # http://dartbug.com/5519
+Language/10_Expressions/23_Relational_Expressions_A01_t21: Fail # Inherited from dart2js
+Language/10_Expressions/23_Relational_Expressions_A01_t22: Fail # Inherited from dart2js
+Language/10_Expressions/23_Relational_Expressions_A01_t23: Fail # Inherited from dart2js
Language/10_Expressions/22_Equality_A01_t01: Fail # inherited from VM
Language/10_Expressions/22_Equality_A01_t15: Fail # http://dartbug.com/5519
Language/10_Expressions/22_Equality_A01_t16: Fail # http://dartbug.com/5519
@@ -373,136 +503,44 @@
Language/10_Expressions/22_Equality_A01_t23: Fail # Inherited from dart2js
Language/10_Expressions/22_Equality_A01_t24: Fail # Inherited from dart2js
Language/10_Expressions/22_Equality_A02_t03: Fail # inherited from VM
-Language/10_Expressions/22_Equality_A03_t01: Fail # inherited from VM
-Language/10_Expressions/22_Equality_A03_t02: Fail # Inherited from dart2js
-Language/10_Expressions/22_Equality_A03_t03: Fail # inherited from VM
Language/10_Expressions/22_Equality_A05_t01: Fail # inherited from VM
-Language/10_Expressions/22_Shift_A01_t01: Fail # inherited from VM
-Language/10_Expressions/22_Shift_A01_t10: Fail # Inherited from dart2js
-Language/10_Expressions/22_Shift_A01_t11: Fail # http://dartbug.com/5519
-Language/10_Expressions/22_Shift_A01_t12: Fail # Inherited from dart2js
-Language/10_Expressions/22_Shift_A01_t13: Fail # Inherited from dart2js
-Language/10_Expressions/22_Shift_A01_t14: Fail # Inherited from dart2js
-Language/10_Expressions/23_Additive_Expressions_A01_t08: Fail # Inherited from dart2js
-Language/10_Expressions/23_Additive_Expressions_A01_t11: Fail # Inherited from dart2js
-Language/10_Expressions/23_Additive_Expressions_A01_t12: Fail # Inherited from dart2js
-Language/10_Expressions/23_Additive_Expressions_A01_t13: Fail # Inherited from dart2js
-Language/10_Expressions/23_Additive_Expressions_A01_t14: Fail # Inherited from dart2js
-Language/10_Expressions/24_Multiplicative_Expressions_A01_t11: Fail # Inherited from dart2js
-Language/10_Expressions/24_Multiplicative_Expressions_A01_t14: Fail # Inherited from dart2js
-Language/10_Expressions/24_Multiplicative_Expressions_A01_t15: Fail # Inherited from dart2js
-Language/10_Expressions/24_Multiplicative_Expressions_A01_t16: Fail # Inherited from dart2js
-Language/10_Expressions/24_Multiplicative_Expressions_A01_t17: Fail # Inherited from dart2js
-Language/10_Expressions/25_Unary_Expressions_A01_t01: Fail # inherited from VM
-Language/10_Expressions/25_Unary_Expressions_A01_t02: Fail # Inherited from dart2js
-Language/10_Expressions/25_Unary_Expressions_A01_t04: Fail # Inherited from dart2js
-Language/10_Expressions/25_Unary_Expressions_A01_t05: Fail # Inherited from dart2js
-Language/10_Expressions/25_Unary_Expressions_A01_t10: Fail # inherited from VM
-Language/10_Expressions/25_Unary_Expressions_A01_t17: Fail # Inherited from dart2js
-Language/10_Expressions/25_Unary_Expressions_A01_t18: Fail # Inherited from dart2js
-Language/10_Expressions/25_Unary_Expressions_A01_t19: Fail # Inherited from dart2js
-Language/10_Expressions/25_Unary_Expressions_A01_t20: Fail # Inherited from dart2js
-Language/10_Expressions/25_Unary_Expressions_A01_t21: Fail # Inherited from dart2js
-Language/10_Expressions/25_Unary_Expressions_A01_t22: Fail # Inherited from dart2js
-Language/10_Expressions/25_Unary_Expressions_A06_t01: Fail # inherited from VM
-Language/10_Expressions/25_Unary_Expressions_A08_t01: Fail # inherited from VM
-Language/10_Expressions/26_Postfix_Expressions_A01_t01: Fail # inherited from VM
-Language/10_Expressions/26_Postfix_Expressions_A01_t02: Fail # Inherited from dart2js
-Language/10_Expressions/26_Postfix_Expressions_A01_t03: Fail # Inherited from dart2js
-Language/10_Expressions/26_Postfix_Expressions_A01_t05: Fail # Inherited from dart2js
-Language/10_Expressions/27_Assignable_Expressions_A01_t06: Fail # Inherited from dart2js
-Language/10_Expressions/27_Assignable_Expressions_A01_t08: Fail # Inherited from dart2js
-Language/10_Expressions/27_Assignable_Expressions_A01_t09: Fail # Inherited from dart2js
-Language/10_Expressions/27_Assignable_Expressions_A01_t26: Fail # inherited from VM
-Language/10_Expressions/27_Assignable_Expressions_A01_t27: Fail # inherited from VM
-Language/10_Expressions/28_Identifier_Reference_A02_t01: Fail # Pseudo keyword "abstract".
-Language/10_Expressions/28_Identifier_Reference_A04_t01: Fail # Inherited from dart2js
-Language/10_Expressions/28_Identifier_Reference_A04_t03: Fail # Inherited from dart2js
-Language/10_Expressions/28_Identifier_Reference_A04_t06: Fail # Inherited from dart2js
-Language/10_Expressions/28_Identifier_Reference_A04_t07: Fail, OK # co19 issue 184
-Language/10_Expressions/28_Identifier_Reference_A05_t09: Fail # inherited from VM
-Language/10_Expressions/28_Identifier_Reference_A06_t13: Fail, OK # co19 issue 254
-Language/10_Expressions/28_Identifier_Reference_A06_t15: Fail # inherited from VM
-Language/10_Expressions/28_Identifier_Reference_A07_t01: Fail # http://dartbug.com/5519
-Language/10_Expressions/28_Identifier_Reference_A07_t04: Fail # inherited from VM
-Language/10_Expressions/28_Identifier_Reference_A07_t09: Fail # inherited from dart2js
-Language/10_Expressions/28_Identifier_Reference_A07_t12: Fail # http://dartbug.com/5519
-Language/10_Expressions/28_Identifier_Reference_A08_t02: Fail # inherited from dart2js
-Language/10_Expressions/28_Identifier_Reference_A08_t04: Fail, Pass # co19 issue 218
-Language/10_Expressions/28_Identifier_Reference_A08_t05: Fail, Pass # co19 issue 218
-Language/10_Expressions/28_Identifier_Reference_A08_t32: Fail # inherited from dart2js
-Language/10_Expressions/28_Identifier_Reference_A08_t38: Fail, Pass # co19 issue 218
-Language/10_Expressions/29_Type_Test_A01_t02: Fail # http://dartbug.com/5519
-Language/10_Expressions/29_Type_Test_A01_t04: Fail # Inherited from dart2js
-Language/10_Expressions/29_Type_Test_A04_t01: Fail # inherited from dart2js
-Language/10_Expressions/30_Type_Cast_A01_t04: Fail # http://dartbug.com/5519
-Language/10_Expressions/30_Type_Cast_A03_t01: Fail # http://dartbug.com/5029
-Language/10_Expressions/30_Type_Cast_A03_t02: Fail # http://dartbug.com/5029
-Language/10_Expressions/30_Type_Cast_A05_t01: Fail # http://dartbug.com/5029
-Language/10_Expressions/30_Type_Cast_A05_t02: Fail # inherited from VM
-Language/10_Expressions/30_Type_Cast_A05_t03: Fail # inherited from VM
-Language/10_Expressions/30_Type_Cast_A05_t04: Fail # inherited from VM
-Language/10_Expressions/30_Type_Cast_A05_t05: Fail # inherited from VM
-Language/11_Statements/02_Expression_Statements_A01_t09: Fail # inherited from VM
-Language/11_Statements/02_Expression_Statements_A01_t10: Fail # inherited from VM
-Language/11_Statements/02_Expression_Statements_A01_t11: Fail # inherited from VM
-Language/11_Statements/03_Variable_Declaration_A01_t10: Fail # http://dartbug.com/5519
-Language/11_Statements/03_Variable_Declaration_A02_t04: Fail # http://dartbug.com/5519
-Language/11_Statements/03_Variable_Declaration_A03_t01: Fail # http://dartbug.com/5519
-Language/11_Statements/03_Variable_Declaration_A03_t02: Fail # http://dartbug.com/5519
-Language/11_Statements/03_Variable_Declaration_A03_t03: Fail # http://dartbug.com/5519
-Language/11_Statements/03_Variable_Declaration_A03_t04: Fail # http://dartbug.com/5519
+Language/10_Expressions/24_Shift_A01_t10: Fail # Inherited from dart2js
+Language/10_Expressions/24_Shift_A01_t11: Fail # http://dartbug.com/5519
+Language/10_Expressions/24_Shift_A01_t12: Fail # Inherited from dart2js
+Language/10_Expressions/24_Shift_A01_t13: Fail # Inherited from dart2js
+Language/10_Expressions/24_Shift_A01_t14: Fail # Inherited from dart2js
+Language/10_Expressions/25_Additive_Expressions_A01_t08: Fail # Inherited from dart2js
+Language/10_Expressions/25_Additive_Expressions_A01_t11: Fail # Inherited from dart2js
+Language/10_Expressions/25_Additive_Expressions_A01_t12: Fail # Inherited from dart2js
+Language/10_Expressions/25_Additive_Expressions_A01_t13: Fail # Inherited from dart2js
+Language/10_Expressions/25_Additive_Expressions_A01_t14: Fail # Inherited from dart2js
+Language/10_Expressions/26_Multiplicative_Expressions_A01_t11: Fail # Inherited from dart2js
+Language/10_Expressions/26_Multiplicative_Expressions_A01_t14: Fail # Inherited from dart2js
+Language/10_Expressions/26_Multiplicative_Expressions_A01_t15: Fail # Inherited from dart2js
+Language/10_Expressions/26_Multiplicative_Expressions_A01_t16: Fail # Inherited from dart2js
+Language/10_Expressions/26_Multiplicative_Expressions_A01_t17: Fail # Inherited from dart2js
+Language/10_Expressions/27_Unary_Expressions_A01_t01: Fail # inherited from VM
+Language/10_Expressions/27_Unary_Expressions_A01_t02: Fail # Inherited from dart2js
+Language/10_Expressions/27_Unary_Expressions_A01_t04: Fail # Inherited from dart2js
+Language/10_Expressions/27_Unary_Expressions_A01_t05: Fail # Inherited from dart2js
+Language/10_Expressions/27_Unary_Expressions_A01_t10: Fail # inherited from VM
+Language/10_Expressions/27_Unary_Expressions_A01_t17: Fail # Inherited from dart2js
+Language/10_Expressions/27_Unary_Expressions_A01_t18: Fail # Inherited from dart2js
+Language/10_Expressions/27_Unary_Expressions_A01_t19: Fail # Inherited from dart2js
+Language/10_Expressions/27_Unary_Expressions_A01_t20: Fail # Inherited from dart2js
+Language/10_Expressions/27_Unary_Expressions_A01_t21: Fail # Inherited from dart2js
+Language/10_Expressions/27_Unary_Expressions_A01_t22: Fail # Inherited from dart2js
+Language/10_Expressions/27_Unary_Expressions_A08_t01: Fail # inherited from VM
+Language/10_Expressions/28_Postfix_Expressions_A01_t01: Fail # inherited from VM
+Language/10_Expressions/28_Postfix_Expressions_A01_t02: Fail # Inherited from dart2js
+Language/10_Expressions/28_Postfix_Expressions_A01_t03: Fail # Inherited from dart2js
+Language/10_Expressions/28_Postfix_Expressions_A01_t05: Fail # Inherited from dart2js
+Language/10_Expressions/29_Assignable_Expressions_A01_t06: Fail # Inherited from dart2js
+Language/10_Expressions/29_Assignable_Expressions_A01_t08: Fail # Inherited from dart2js
+Language/10_Expressions/29_Assignable_Expressions_A01_t09: Fail # Inherited from dart2js
+Language/10_Expressions/30_Identifier_Reference_A02_t01: Fail # Pseudo keyword "abstract".
+Language/10_Expressions/30_Identifier_Reference_A07_t01: Fail # http://dartbug.com/5519
Language/11_Statements/03_Variable_Declaration_A04_t01: Fail # http://dartbug.com/5519
-Language/11_Statements/05_For/2_For_in_A01_t02: Fail # inherited from VM
-Language/11_Statements/05_For/2_For_in_A01_t04: Fail # inherited from VM
-Language/11_Statements/05_For_A01_t11: Fail # inherited from VM
-Language/11_Statements/05_For_A01_t12: Fail # http://dartbug.com/5519
-Language/11_Statements/07_Do_A02_t02: Fail # inherited from VM
-Language/11_Statements/08_Switch_A01_t01: Fail # inherited from VM
-Language/11_Statements/08_Switch_A02_t01: Fail # inherited from VM
-Language/11_Statements/08_Switch_A05_t01: Fail # inherited from VM
-Language/11_Statements/08_Switch_A05_t02: Fail # inherited from VM
-Language/11_Statements/08_Switch_A06_t01: Fail # inherited from VM
-Language/11_Statements/08_Switch_A06_t02: Fail # inherited from VM
-Language/11_Statements/08_Switch_A06_t03: Fail # inherited from VM
-Language/11_Statements/08_Switch_A06_t04: Fail # inherited from VM
-Language/11_Statements/08_Switch_A07_t02: Fail # inherited from VM
-Language/11_Statements/09_Try_A01_t01: Fail, OK # inherited from VM
-Language/11_Statements/09_Try_A01_t18: Fail # inherited from VM
-Language/11_Statements/09_Try_A02_t03: Fail, OK # inherited from VM
-Language/11_Statements/09_Try_A04_t01: Fail, OK # inherited from VM
-Language/11_Statements/09_Try_A05_t03: Fail, OK # inherited from VM
-Language/11_Statements/09_Try_A05_t06: Fail # inherited from VM
-Language/11_Statements/09_Try_A06_t01: Fail # inherited from VM
-Language/11_Statements/09_Try_A06_t02: Fail # inherited from VM
-Language/11_Statements/09_Try_A06_t03: Fail # inherited from VM
-Language/11_Statements/09_Try_A06_t04: Fail # inherited from VM
-Language/11_Statements/09_Try_A06_t05: Fail # inherited from VM
-Language/11_Statements/10_Return_A04_t01: Fail # http://dartbug.com/5519
-Language/11_Statements/10_Return_A04_t02: Fail # http://dartbug.com/5519
-Language/11_Statements/10_Return_A04_t03: Fail # http://dartbug.com/5519
-Language/11_Statements/11_Labels_A01_t03: Fail # inherited from VM
-Language/11_Statements/11_Labels_A03_t04: Fail # inherited from dart2js
-Language/11_Statements/13_Continue_A02_t12: Fail # inherited from dart2js
-Language/11_Statements/13_Continue_A02_t13: Fail # inherited from dart2js
-Language/13_Libraries_and_Scripts/13_Libraries_and_Scripts_A05_t04: Fail # inherited from VM
-Language/13_Libraries_and_Scripts/2_Imports_A01_t39: Fail # inherited from VM
-Language/13_Libraries_and_Scripts/2_Imports_A02_t01: Fail # inherited from VM
-Language/13_Libraries_and_Scripts/2_Imports_A02_t02: Fail # inherited from VM
-Language/13_Libraries_and_Scripts/2_Imports_A02_t16: Fail # inherited from VM
-Language/13_Libraries_and_Scripts/2_Imports_A02_t17: Fail # inherited from VM
-Language/13_Libraries_and_Scripts/2_Imports_A02_t18: Fail # inherited from VM
-Language/13_Libraries_and_Scripts/2_Imports_A02_t19: Fail # Inherited from VM
-Language/13_Libraries_and_Scripts/2_Imports_A02_t28: Fail # inherited from dart2js
-Language/13_Libraries_and_Scripts/2_Imports_A03_t02: Fail # inherited from VM
-Language/13_Libraries_and_Scripts/2_Imports_A03_t06: Fail # inherited from dart2js
-Language/13_Libraries_and_Scripts/2_Imports_A03_t12: Fail # inherited from VM
-Language/13_Libraries_and_Scripts/2_Imports_A03_t16: Fail # co19 issue 226
-Language/13_Libraries_and_Scripts/2_Imports_A03_t22: Fail # inherited from VM
-Language/13_Libraries_and_Scripts/2_Imports_A03_t26: Fail # co19 issue 226
-Language/13_Libraries_and_Scripts/2_Imports_A06_t01: Fail # inherited from dart2js
-Language/13_Libraries_and_Scripts/3_Includes_A01_t01: Fail # inherited from dart2js
-Language/13_Libraries_and_Scripts/3_Includes_A03_t03: Fail # inherited from dart2js
Language/13_Libraries_and_Scripts/4_Scripts_A03_t01: Fail # http://dartbug.com/5519
Language/13_Libraries_and_Scripts/4_Scripts_A03_t03: Fail # http://dartbug.com/5519
Language/14_Types/2_Dynamic_Type_System_A02_t01: Fail # inherited from VM
@@ -513,46 +551,21 @@
Language/14_Types/3_Type_Declarations/1_Typedef_A07_t01: Fail, Pass # inherited from dart2js: fails in minify, self-reference typedef check not performed
Language/14_Types/3_Type_Declarations/1_Typedef_A07_t02: Fail, Pass # inherited from dart2js: fails in minify, self-reference typedef check not performed
Language/14_Types/3_Type_Declarations/1_Typedef_A07_t03: Fail, Pass # inherited from dart2js: fails in minify, self-reference typedef check not performed
-Language/14_Types/4_Interface_Types_A01_t01: Fail # Looks like dart2js issue, let's wait when interfaces are phased away
-Language/14_Types/4_Interface_Types_A02_t01: Fail # Looks like dart2js issue, let's wait when interfaces are phased away
Language/14_Types/5_Function_Types_A01_t05: Fail # inherited from dart2js
Language/14_Types/5_Function_Types_A02_t01: Fail # inherited from VM
Language/15_Reference/1_Lexical_Rules/1_Reserved_Words_A40_t04: Fail # inherited from dart2js
-Language/15_Reference/1_Lexical_Rules_A01_t06: Fail # inherited from VM
Language/15_Reference/1_Lexical_Rules_A02_t06: Fail # inherited from dart2js
LibTest/core/Date/Date.fromString_A03_t01: Fail, OK # Issue co19 - 121
LibTest/core/Date/toString_A02_t01: Fail, OK # inherited from VM
LibTest/core/Date/year_A01_t01: Fail, OK # inherited from VM
-LibTest/core/double/INFINITY_A01_t02: Fail # inherited from VM
-LibTest/core/double/NEGATIVE_INFINITY_A01_t02: Fail # inherited from VM
LibTest/core/double/toRadixString_A01_t01: Fail # inherited from VM
-LibTest/core/Expect/equals_A02_t01: Fail, OK # co19 issue 194
LibTest/core/Expect/throws_A02_t01: Fail, OK # Issue co19 - 42
LibTest/core/Future/handleException_A01_t07: Fail # inherited from VM
LibTest/core/Future/then_A01_t05: Fail # inherited from VM
LibTest/core/int/operator_left_shift_A01_t02: Fail, OK # co19 issue 129
LibTest/core/int/toRadixString_A01_t01: Fail # inherited from VM
-LibTest/core/List/removeRange_A06_t01: Fail, OK # co19 issue 194
LibTest/core/Match/operator_subscript_A01_t01: Fail # inherited from VM
-LibTest/core/Math/acos_A01_t01: Fail, OK # Issue co19 - 44
-LibTest/core/Math/asin_A01_t01: Fail, OK # Issue co19 - 44
-LibTest/core/Math/atan2_A01_t01: Fail, OK # inherited from VM
-LibTest/core/Math/atan_A01_t01: Fail, OK # Issue co19 - 44
-LibTest/core/Math/cos_A01_t01: Fail, OK # Issue co19 - 44
-LibTest/core/Math/exp_A01_t01: Fail, OK # Issue co19 - 44
-LibTest/core/Math/log_A01_t01: Fail, OK # inherited from VM
-LibTest/core/Math/max_A01_t03: Fail, OK # Issue co19 - 157
-LibTest/core/Math/min_A01_t03: Fail, OK # Issue co19 - 157
-LibTest/core/Math/parseDouble_A02_t01: Fail # inherited from VM
-LibTest/core/Math/pow_A01_t01: Fail, OK # Issue co19 - 44
-LibTest/core/Math/pow_A11_t01: Fail # inherited from VM
-LibTest/core/Math/pow_A13_t01: Fail # inherited from VM
-LibTest/core/Math/random_A01_t01: Fail, OK # inherited from VM
-LibTest/core/Math/sin_A01_t01: Fail, OK # Issue co19 - 44
-LibTest/core/Math/sqrt_A01_t01: Fail, OK # inherited from VM
-LibTest/core/Math/tan_A01_t01: Fail, OK # Issue co19 - 44
LibTest/core/RegExp/firstMatch_A01_t01: Fail # inherited from VM
-LibTest/core/RegExp/hasMatch_A01_t02: Fail # inherited from dart2js
LibTest/core/RegExp/Pattern_semantics/firstMatch_Atom_A02_t01: Fail # inherited from VM
LibTest/core/RegExp/Pattern_semantics/firstMatch_CharacterClassEscape_A03_t01: Fail # inherited from VM
LibTest/core/RegExp/Pattern_semantics/firstMatch_CharacterClassEscape_A04_t01: Fail # inherited from VM
@@ -562,15 +575,7 @@
LibTest/core/RegExp/Pattern_semantics/firstMatch_NonEmptyClassRanges_A01_t05: Fail
LibTest/core/RegExp/Pattern_semantics/firstMatch_NonEmptyClassRanges_A01_t06: Fail
LibTest/core/RegExp/Pattern_semantics/firstMatch_Term_A03_t01: Fail # inherited from VM
-LibTest/core/Set/addAll_A01_t04: Fail, OK # co19 issue 194
-LibTest/core/Set/contains_A01_t03: Fail, OK # co19 issue 194
-LibTest/core/Set/containsAll_A01_t03: Fail, OK # co19 issue 194
-LibTest/core/Set/remove_A01_t04: Fail, OK # co19 issue 194
-LibTest/core/Set/removeAll_A01_t03: Fail, OK # co19 issue 194
LibTest/core/String/contains_A01_t02: Fail # inherited from VM
-LibTest/core/String/replaceAll_A02_t01: Fail, OK # co19 issue 103
-LibTest/core/String/replaceFirst_A02_t01: Fail, OK # co19 issue 103
-LibTest/isolate/isolate_api/spawnFunction_A02_t01: Fail # inherited from VM
LibTest/isolate/isolate_api/spawnUri_A01_t01: Fail, OK # Problems with the test: encoded file name
LibTest/isolate/isolate_api/spawnUri_A01_t02: Fail, OK # Problems with the test: encoded file name
LibTest/isolate/isolate_api/spawnUri_A01_t03: Fail, OK # Problems with the test: encoded file name
@@ -581,14 +586,10 @@
# Partially implemented redirecting constructors makes this fail.
Language/07_Classes/6_Constructors/2_Factories_A01_t05: Fail
-Language/07_Classes/6_Constructors/1_Generative_Constructors_A16_t07: Fail # Redirecting constructors can not use initializing formals. This bug was previously masked - compilation failed, but for different, wrong reason.
+Language/07_Classes/6_Constructors/1_Generative_Constructors_A16_t07: Fail # http://dartbug.com/6242
-Language/07_Classes/6_Constructors/2_Factories_A01_t01: Fail, OK # Uses deprecated factory syntax.
[ $compiler == dart2dart && $system == windows ]
LibTest/core/double/operator_remainder_A01_t04: Fail # Result is NaN
LibTest/core/double/round_A01_t01: Fail # Result is NaN
-LibTest/core/int/operator_remainder_A01_t02: Fail # Result is NaN
-LibTest/core/int/remainder_A01_t02: Fail # Result is NaN
LibTest/core/double/remainder_A01_t04: Fail # Result is NaN
-LibTest/core/Math/atan2_A01_t03: Fail # Result is NaN
diff --git a/tests/co19/co19-dart2js.status b/tests/co19/co19-dart2js.status
index 549830f..98ac7b2 100644
--- a/tests/co19/co19-dart2js.status
+++ b/tests/co19/co19-dart2js.status
@@ -6,46 +6,50 @@
# Crashes first, please. Then untriaged bugs. There is a section below
# for co19 bugs.
[ $compiler == dart2js ]
-Language/11_Statements/05_For_A01_t07: Crash
+Language/13_Libraries_and_Scripts/2_Exports_A04_t02: Crash
+Language/13_Libraries_and_Scripts/2_Exports_A04_t03: Crash
+
Language/03_Overview/1_Scoping_A02_t06: Fail # TODO(ahe): Please triage this failure.
+Language/05_Variables/05_Variables_A03_t09: Fail # TODO(ahe): Please triage this failure.
+Language/05_Variables/05_Variables_A03_t11: Fail # TODO(ahe): Please triage this failure.
+Language/05_Variables/05_Variables_A03_t12: Fail # TODO(ahe): Please triage this failure.
+Language/05_Variables/05_Variables_A03_t13: Fail # TODO(ahe): Please triage this failure.
+Language/05_Variables/05_Variables_A03_t14: Fail # TODO(ahe): Please triage this failure.
+Language/05_Variables/05_Variables_A03_t15: Fail # TODO(ahe): Please triage this failure.
+Language/05_Variables/1_Evaluation_of_Implicit_Variable_Getters_A01_t05: Fail # TODO(ahe): Please triage this failure.
Language/06_Functions/06_Functions_A01_t22: Fail # TODO(ahe): Please triage this failure.
Language/07_Classes/07_Classes_A03_t01: Fail # TODO(ahe): Please triage this failure.
Language/07_Classes/07_Classes_A03_t07: Fail # TODO(ahe): Please triage this failure.
+Language/07_Classes/1_Instance_Methods_A06_t01: Fail # TODO(ahe): Please triage this failure.
+Language/07_Classes/6_Constructors/2_Factories_A05_t01: Fail # TODO(ahe): Please triage this failure.
+Language/07_Classes/6_Constructors/2_Factories_A05_t02: Fail # TODO(ahe): Please triage this failure.
+Language/07_Classes/6_Constructors/2_Factories_A05_t03: Fail # TODO(ahe): Please triage this failure.
+Language/07_Classes/6_Constructors/2_Factories_A05_t04: Fail # TODO(ahe): Please triage this failure.
Language/07_Classes/6_Constructors/2_Factories_A07_t01: Fail # TODO(ahe): Please triage this failure.
-Language/07_Classes/8_Static_Variables/1_Evaluation_of_Static_Variable_Getters_A01_t05: Fail # TODO(ahe): Please triage this failure.
+Language/07_Classes/6_Constructors/3_Constant_Constructors_A05_t01: Fail # TODO(ahe): Please triage this failure.
+Language/07_Classes/6_Constructors/3_Constant_Constructors_A05_t03: Fail # TODO(ahe): Please triage this failure.
Language/07_Classes/9_Superclasses/1_Inheritance_and_Overriding_A02_t03: Fail # TODO(ahe): Please triage this failure.
Language/09_Generics/09_Generics_A05_t02: Fail # TODO(ahe): Please triage this failure.
Language/10_Expressions/01_Constants_A05_t01: Fail # TODO(ahe): Please triage this failure.
Language/10_Expressions/01_Constants_A13_t06: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/01_Constants_A19_t02: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/01_Constants_A19_t03: Fail # TODO(ahe): Please triage this failure.
Language/10_Expressions/05_Strings/1_String_Interpolation_A01_t04: Fail # TODO(ahe): Please triage this failure.
Language/10_Expressions/05_Strings/1_String_Interpolation_A01_t05: Fail # TODO(ahe): Please triage this failure.
Language/10_Expressions/05_Strings/1_String_Interpolation_A01_t06: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/05_Strings_A01_t01: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/05_Strings_A12_t01: Fail # TODO(ahe): Please triage this failure.
Language/10_Expressions/08_Throw_A01_t01: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/08_Throw_A03_t02: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/08_Throw_A03_t03: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/08_Throw_A04_t01: Fail # TODO(ahe): Please triage this failure.
Language/10_Expressions/08_Throw_A05_t01: Fail # TODO(ahe): Please triage this failure.
Language/10_Expressions/08_Throw_A05_t02: Fail # TODO(ahe): Please triage this failure.
Language/10_Expressions/08_Throw_A05_t03: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/09_Function_Expressions_A06_t01: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/09_Function_Expressions_A03_t02: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/09_Function_Expressions_A04_t02: Fail # TODO(ahe): Please triage this failure.
Language/10_Expressions/11_Instance_Creation/1_New_A02_t03: Fail # TODO(ahe): Please triage this failure.
Language/10_Expressions/11_Instance_Creation/1_New_A02_t05: Fail # TODO(ahe): Please triage this failure.
Language/10_Expressions/11_Instance_Creation/1_New_A02_t06: Fail # TODO(ahe): Please triage this failure.
Language/10_Expressions/11_Instance_Creation/1_New_A02_t07: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/11_Instance_Creation/1_New_A06_t06: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/11_Instance_Creation/1_New_A07_t01: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/11_Instance_Creation/1_New_A11_t01: Fail # TODO(ahe): Please triage this failure.
Language/10_Expressions/11_Instance_Creation/1_New_A12_t01: Fail # TODO(ahe): Please triage this failure.
Language/10_Expressions/11_Instance_Creation/1_New_A12_t02: Fail # TODO(ahe): Please triage this failure.
Language/10_Expressions/11_Instance_Creation/1_New_A13_t04: Fail # TODO(ahe): Please triage this failure.
Language/10_Expressions/11_Instance_Creation/1_New_A14_t01: Fail # TODO(ahe): Please triage this failure.
Language/10_Expressions/11_Instance_Creation/2_Const_A01_t02: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/13_Property_Extraction_A01_t01: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/17_Getter_Invocation_A01_t03: Fail # TODO(ahe): Please triage this failure.
Language/10_Expressions/17_Getter_Invocation_A02_t01: Fail # TODO(ahe): Please triage this failure.
Language/10_Expressions/17_Getter_Invocation_A02_t02: Fail # TODO(ahe): Please triage this failure.
Language/10_Expressions/18_Assignment_A05_t02: Fail # TODO(ahe): Please triage this failure.
@@ -69,89 +73,172 @@
Language/10_Expressions/21_Bitwise_Expressions_A01_t15: Fail # TODO(ahe): Please triage this failure.
Language/10_Expressions/21_Bitwise_Expressions_A01_t16: Fail # TODO(ahe): Please triage this failure.
Language/10_Expressions/21_Bitwise_Expressions_A01_t17: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/21_Relational_Expressions_A01_t18: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/21_Relational_Expressions_A01_t19: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/21_Relational_Expressions_A01_t20: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/21_Relational_Expressions_A01_t21: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/21_Relational_Expressions_A01_t22: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/21_Relational_Expressions_A01_t23: Fail # TODO(ahe): Please triage this failure.
Language/10_Expressions/22_Equality_A01_t23: Fail # TODO(ahe): Please triage this failure.
Language/10_Expressions/22_Equality_A01_t24: Fail # TODO(ahe): Please triage this failure.
Language/10_Expressions/22_Equality_A03_t02: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/22_Shift_A01_t09: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/22_Shift_A01_t10: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/22_Shift_A01_t11: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/22_Shift_A01_t12: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/22_Shift_A01_t13: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/22_Shift_A01_t14: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/23_Additive_Expressions_A01_t07: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/23_Additive_Expressions_A01_t08: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/23_Additive_Expressions_A01_t11: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/23_Additive_Expressions_A01_t12: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/23_Additive_Expressions_A01_t13: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/23_Additive_Expressions_A01_t14: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/24_Multiplicative_Expressions_A01_t10: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/24_Multiplicative_Expressions_A01_t11: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/24_Multiplicative_Expressions_A01_t14: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/24_Multiplicative_Expressions_A01_t15: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/24_Multiplicative_Expressions_A01_t16: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/24_Multiplicative_Expressions_A01_t17: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/25_Unary_Expressions_A01_t02: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/25_Unary_Expressions_A01_t04: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/25_Unary_Expressions_A01_t05: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/25_Unary_Expressions_A01_t11: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/25_Unary_Expressions_A01_t12: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/25_Unary_Expressions_A01_t13: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/25_Unary_Expressions_A01_t17: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/25_Unary_Expressions_A01_t18: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/25_Unary_Expressions_A01_t19: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/25_Unary_Expressions_A01_t20: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/25_Unary_Expressions_A01_t21: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/25_Unary_Expressions_A01_t22: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/26_Postfix_Expressions_A01_t02: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/26_Postfix_Expressions_A01_t03: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/26_Postfix_Expressions_A01_t05: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/27_Assignable_Expressions_A01_t06: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/27_Assignable_Expressions_A01_t08: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/27_Assignable_Expressions_A01_t09: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/28_Identifier_Reference_A04_t01: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/28_Identifier_Reference_A04_t03: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/28_Identifier_Reference_A04_t06: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/29_Type_Test_A01_t02: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/29_Type_Test_A01_t04: Fail # TODO(ahe): Please triage this failure.
-Language/11_Statements/09_Try_A01_t18: Fail # TODO(ahe): Please triage this failure.
-Language/13_Libraries_and_Scripts/2_Imports_A02_t19: Fail # TODO(ahe): Please triage this failure.
-Language/13_Libraries_and_Scripts/2_Imports_A02_t28: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/23_Relational_Expressions_A01_t18: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/23_Relational_Expressions_A01_t19: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/23_Relational_Expressions_A01_t20: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/23_Relational_Expressions_A01_t21: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/23_Relational_Expressions_A01_t22: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/23_Relational_Expressions_A01_t23: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/24_Shift_A01_t09: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/24_Shift_A01_t10: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/24_Shift_A01_t11: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/24_Shift_A01_t12: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/24_Shift_A01_t13: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/24_Shift_A01_t14: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/25_Additive_Expressions_A01_t07: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/25_Additive_Expressions_A01_t08: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/25_Additive_Expressions_A01_t11: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/25_Additive_Expressions_A01_t12: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/25_Additive_Expressions_A01_t13: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/25_Additive_Expressions_A01_t14: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/26_Multiplicative_Expressions_A01_t10: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/26_Multiplicative_Expressions_A01_t11: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/26_Multiplicative_Expressions_A01_t14: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/26_Multiplicative_Expressions_A01_t15: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/26_Multiplicative_Expressions_A01_t16: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/26_Multiplicative_Expressions_A01_t17: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/27_Unary_Expressions_A01_t02: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/27_Unary_Expressions_A01_t04: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/27_Unary_Expressions_A01_t05: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/27_Unary_Expressions_A01_t11: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/27_Unary_Expressions_A01_t12: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/27_Unary_Expressions_A01_t13: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/27_Unary_Expressions_A01_t17: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/27_Unary_Expressions_A01_t18: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/27_Unary_Expressions_A01_t19: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/27_Unary_Expressions_A01_t20: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/27_Unary_Expressions_A01_t21: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/27_Unary_Expressions_A01_t22: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/28_Postfix_Expressions_A01_t02: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/28_Postfix_Expressions_A01_t03: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/28_Postfix_Expressions_A01_t05: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/29_Assignable_Expressions_A01_t06: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/29_Assignable_Expressions_A01_t08: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/29_Assignable_Expressions_A01_t09: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/30_Identifier_Reference_A04_t09: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/30_Identifier_Reference_A05_t01: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/30_Identifier_Reference_A05_t04: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/30_Identifier_Reference_A05_t12: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/30_Identifier_Reference_A06_t01: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/30_Identifier_Reference_A06_t02: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/31_Type_Test_A01_t02: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/31_Type_Test_A01_t04: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/31_Type_Test_A04_t01: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/32_Type_Cast_A02_t03: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/32_Type_Cast_A03_t01: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/32_Type_Cast_A03_t02: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/32_Type_Cast_A05_t01: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/32_Type_Cast_A05_t02: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/32_Type_Cast_A05_t04: Fail # TODO(ahe): Please triage this failure.
+Language/11_Statements/03_Variable_Declaration_A04_t02: Fail # TODO(ahe): Please triage this failure.
+Language/11_Statements/03_Variable_Declaration_A04_t03: Fail # TODO(ahe): Please triage this failure.
+Language/11_Statements/03_Variable_Declaration_A04_t04: Fail # TODO(ahe): Please triage this failure.
+Language/11_Statements/03_Variable_Declaration_A04_t05: Fail # TODO(ahe): Please triage this failure.
+Language/11_Statements/03_Variable_Declaration_A04_t06: Fail # TODO(ahe): Please triage this failure.
+Language/11_Statements/04_Local_Function_Declaration_A01_t01: Fail # TODO(ahe): Please triage this failure.
+Language/11_Statements/04_Local_Function_Declaration_A02_t02: Fail # TODO(ahe): Please triage this failure.
+Language/11_Statements/06_For_A01_t11: Fail # TODO(ahe): Please triage this failure.
+Language/11_Statements/06_For_A01_t12: Fail # TODO(ahe): Please triage this failure.
+Language/11_Statements/09_Switch_A02_t01: Fail # TODO(ahe): Please triage this failure.
+Language/11_Statements/09_Switch_A02_t02: Fail # TODO(ahe): Please triage this failure.
+Language/11_Statements/09_Switch_A02_t03: Fail # TODO(ahe): Please triage this failure.
+Language/11_Statements/09_Switch_A03_t01: Fail # TODO(ahe): Please triage this failure.
+Language/11_Statements/09_Switch_A03_t02: Fail # TODO(ahe): Please triage this failure.
+Language/11_Statements/09_Switch_A06_t02: Fail # TODO(ahe): Please triage this failure.
+Language/11_Statements/10_Try_A06_t01: Fail # TODO(ahe): Please triage this failure.
+Language/11_Statements/10_Try_A07_t03: Fail # TODO(ahe): Please triage this failure.
+Language/11_Statements/11_Return_A05_t01: Fail # TODO(ahe): Please triage this failure.
+Language/11_Statements/11_Return_A05_t02: Fail # TODO(ahe): Please triage this failure.
+Language/11_Statements/11_Return_A05_t03: Fail # TODO(ahe): Please triage this failure.
+Language/11_Statements/12_Labels_A03_t04: Fail # TODO(ahe): Please triage this failure.
+Language/11_Statements/14_Continue_A02_t12: Fail # TODO(ahe): Please triage this failure.
+Language/11_Statements/14_Continue_A02_t13: Fail # TODO(ahe): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A02_t01: Fail # TODO(ahe): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A02_t02: Fail # TODO(ahe): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A02_t16: Fail # TODO(ahe): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A02_t17: Fail # TODO(ahe): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A02_t18: Fail # TODO(ahe): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A02_t19: Fail # TODO(ahe): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A02_t27: Fail # TODO(ahe): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A02_t28: Fail # TODO(ahe): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A03_t02: Fail # TODO(ahe): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A03_t09: Fail # TODO(ahe): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A03_t10: Fail # TODO(ahe): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A03_t22: Fail # TODO(ahe): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A03_t29: Fail # TODO(ahe): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A03_t30: Fail # TODO(ahe): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A03_t42: Fail # TODO(ahe): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A03_t49: Fail # TODO(ahe): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A03_t50: Fail # TODO(ahe): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A03_t62: Fail # TODO(ahe): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A03_t69: Fail # TODO(ahe): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A03_t70: Fail # TODO(ahe): Please triage this failure.
+Language/13_Libraries_and_Scripts/2_Exports_A01_t07: Fail # TODO(ahe): Please triage this failure.
+Language/13_Libraries_and_Scripts/2_Exports_A01_t15: Fail # TODO(ahe): Please triage this failure.
+Language/13_Libraries_and_Scripts/2_Exports_A01_t16: Fail # TODO(ahe): Please triage this failure.
+Language/13_Libraries_and_Scripts/2_Exports_A04_t01: Fail # TODO(ahe): Please triage this failure.
+Language/13_Libraries_and_Scripts/2_Exports_A04_t04: Fail # TODO(ahe): Please triage this failure.
+Language/13_Libraries_and_Scripts/2_Exports_A04_t05: Fail # TODO(ahe): Please triage this failure.
+Language/13_Libraries_and_Scripts/2_Exports_A04_t06: Fail # TODO(ahe): Please triage this failure.
+Language/13_Libraries_and_Scripts/3_Parts_A03_t02: Fail # TODO(ahe): Please triage this failure.
+Language/13_Libraries_and_Scripts/4_Scripts_A01_t16: Fail # TODO(ahe): Please triage this failure.
Language/15_Reference/1_Lexical_Rules/1_Reserved_Words_A40_t04: Fail # TODO(ahe): Please triage this failure.
-Language/15_Reference/1_Lexical_Rules_A01_t06: Fail # TODO(ahe): Please triage this failure.
-LibTest/core/RegExp/hasMatch_A01_t02: Fail # TODO(ahe): Please triage this failure.
-LibTest/core/double/INFINITY_A01_t02: Fail # TODO(ahe): Please triage this failure.
+LibTest/core/Queue/Queue.from_A01_t02: Fail # TODO(ahe): Please triage this failure.
+LibTest/core/Set/Set.from_A01_t02: Fail # TODO(ahe): Please triage this failure.
+LibTest/core/String/replaceAll_A02_t01: Fail # TODO(ahe): Please triage this failure.
+LibTest/core/String/replaceFirst_A02_t01: Fail # TODO(ahe): Please triage this failure.
LibTest/core/double/INFINITY_A01_t04: Fail # TODO(ahe): Please triage this failure.
-LibTest/core/double/NEGATIVE_INFINITY_A01_t02: Fail # TODO(ahe): Please triage this failure.
LibTest/core/double/NEGATIVE_INFINITY_A01_t04: Fail # TODO(ahe): Please triage this failure.
+LibTest/math/Random/nextDouble_A01_t01: Fail # TODO(ahe): Please triage this failure.
+LibTest/math/exp_A01_t01: Fail # TODO(ahe): Please triage this failure.
+LibTest/math/parseDouble_A01_t01: Fail # TODO(ahe): Please triage this failure.
+LibTest/math/pow_A01_t01: Fail # TODO(ahe): Please triage this failure.
+LibTest/math/pow_A11_t01: Fail # TODO(ahe): Please triage this failure.
+LibTest/math/pow_A13_t01: Fail # TODO(ahe): Please triage this failure.
+LibTest/math/sin_A01_t01: Fail # TODO(ahe): Please triage this failure.
+LibTest/math/tan_A01_t01: Fail # TODO(ahe): Please triage this failure.
# Partially implemented rediriecting constructors makes this fail.
Language/07_Classes/6_Constructors/2_Factories_A01_t05: Fail
-LibTest/core/OutOfMemoryException/OutOfMemoryException_A01_t01: Fail, OK # co19 issue 263
-LibTest/core/OutOfMemoryException/toString_A01_t01: Fail, OK # co19 issue 263
+
+LibTest/core/List/iterator_next_A02_t01: Fail, OK # co19 issue 288
+LibTest/core/Queue/iterator_next_A02_t01: Fail, OK # co19 issue 288
+LibTest/core/Queue/first_A02_t01: Fail, OK # co19 issue 288
+LibTest/core/Queue/removeLast_A02_t01: Fail, OK # co19 issue 288
+LibTest/core/Queue/last_A02_t01: Fail, OK # co19 issue 288
+LibTest/core/Queue/removeFirst_A02_t01: Fail, OK # co19 issue 288
+LibTest/core/NoMoreElementsException/NoMoreElementsException_A01_t01: Fail, OK # co19 issue 288
+LibTest/core/NoMoreElementsException/toString_A01_t01: Fail, OK # co19 issue 288
+LibTest/core/EmptyQueueException/EmptyQueueException_A01_t01: Fail, OK # co19 issue 288
+LibTest/core/EmptyQueueException/toString_A01_t01: Fail, OK # co19 issue 288
[ $compiler == dart2js && $unchecked ]
-Language/07_Classes/6_Constructors/2_Factories_A06_t05: Fail # TODO(ahe): Please triage this failure.
-Language/07_Classes/6_Constructors/2_Factories_A06_t06: Fail # TODO(ahe): Please triage this failure.
+LibTest/core/Date/Date.fromMillisecondsSinceEpoch_A03_t01: Fail # TODO(ahe): Please triage this failure.
+[ $compiler == dart2js && $runtime == jsshell ]
+Language/06_Functions/3_Type_of_a_Function_A01_t01: Fail # TODO(ahe): Triage these tests.
+Language/07_Classes/8_Static_Variables_A02_t01: Fail # TODO(ahe): Triage these tests.
+LibTest/core/Map/putIfAbsent_A01_t08: Fail # TODO(ahe): Triage these tests.
+LibTest/core/double/round_A01_t01: Fail # TODO(ahe): Triage these tests.
+LibTest/core/double/toStringAsExponential_A01_t07: Fail # TODO(ahe): Triage these tests.
+LibTest/core/double/toStringAsFixed_A01_t05: Fail # TODO(ahe): Triage these tests.
+LibTest/core/double/toStringAsFixed_A01_t06: Fail # TODO(ahe): Triage these tests.
+LibTest/core/double/toStringAsPrecision_A01_t07: Fail # TODO(ahe): Triage these tests.
+LibTest/math/acos_A01_t01: Fail # TODO(ahe): Triage these tests.
+LibTest/math/asin_A01_t01: Fail # TODO(ahe): Triage these tests.
[ $compiler == dart2js && $checked ]
-Language/03_Overview/1_Scoping_A02_t30: Fail # http://dartbug.com/5348
-
Language/07_Classes/6_Constructors/1_Generative_Constructors_A17_t03: Fail # TODO(ahe): Please triage this failure.
Language/07_Classes/6_Constructors/1_Generative_Constructors_A17_t04: Fail # TODO(ahe): Please triage this failure.
+Language/07_Classes/6_Constructors/2_Factories_A03_t07: Fail # TODO(ahe): Please triage this failure.
Language/07_Classes/6_Constructors/2_Factories_A06_t01: Fail # TODO(ahe): Please triage this failure.
Language/07_Classes/6_Constructors/2_Factories_A06_t02: Fail # TODO(ahe): Please triage this failure.
Language/07_Classes/6_Constructors/2_Factories_A06_t03: Fail # TODO(ahe): Please triage this failure.
Language/07_Classes/6_Constructors/2_Factories_A06_t04: Fail # TODO(ahe): Please triage this failure.
-Language/07_Classes/6_Constructors/2_Factories_A06_t05: Fail # TODO(ahe): Please triage this failure.
-Language/07_Classes/6_Constructors/2_Factories_A06_t06: Fail # TODO(ahe): Please triage this failure.
Language/09_Generics/09_Generics_A03_t01: Fail # TODO(ahe): Please triage this failure.
Language/09_Generics/09_Generics_A04_t06: Fail # TODO(ahe): Please triage this failure.
Language/10_Expressions/06_Lists_A09_t01: Fail # TODO(ahe): Please triage this failure.
@@ -159,19 +246,26 @@
Language/10_Expressions/06_Lists_A09_t05: Fail # TODO(ahe): Please triage this failure.
Language/10_Expressions/07_Maps_A10_t04: Fail # TODO(ahe): Please triage this failure.
Language/10_Expressions/07_Maps_A10_t05: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/09_Function_Expressions_A03_t02: Fail # TODO(ahe): Please triage this failure.
Language/10_Expressions/09_Function_Expressions_A03_t03: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/09_Function_Expressions_A04_t02: Fail # TODO(ahe): Please triage this failure.
Language/10_Expressions/09_Function_Expressions_A04_t03: Fail # TODO(ahe): Please triage this failure.
Language/10_Expressions/09_Function_Expressions_A05_t02: Fail # TODO(ahe): Please triage this failure.
Language/10_Expressions/09_Function_Expressions_A05_t04: Fail # TODO(ahe): Please triage this failure.
Language/10_Expressions/09_Function_Expressions_A06_t02: Fail # TODO(ahe): Please triage this failure.
Language/10_Expressions/09_Function_Expressions_A06_t04: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/11_Instance_Creation/1_New_A07_t01: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/11_Instance_Creation/1_New_A11_t01: Fail # TODO(ahe): Please triage this failure.
Language/10_Expressions/11_Instance_Creation/2_Const_A09_t02: Fail # TODO(ahe): Please triage this failure.
Language/10_Expressions/11_Instance_Creation/2_Const_A09_t03: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/11_Instance_Creation_A05_t02: Fail # TODO(ahe): Please triage this failure.
Language/10_Expressions/15_Method_Invocation/3_Static_Invocation_A03_t04: Fail # TODO(ahe): Please triage this failure.
Language/10_Expressions/20_Logical_Boolean_Expressions_A03_t01: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/25_Unary_Expressions_A02_t03: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/27_Unary_Expressions_A02_t03: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/32_Type_Cast_A05_t03: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/32_Type_Cast_A05_t05: Fail # TODO(ahe): Please triage this failure.
+Language/11_Statements/05_If_A02_t01: Fail # TODO(ahe): Please triage this failure.
+Language/11_Statements/06_For/1_For_Loop_A01_t08: Fail # TODO(ahe): Please triage this failure.
+Language/11_Statements/09_Switch_A05_t01: Fail # TODO(ahe): Please triage this failure.
+Language/11_Statements/11_Return_A04_t01: Fail # TODO(ahe): Please triage this failure.
Language/14_Types/4_Interface_Types_A08_t03: Fail # TODO(ahe): Please triage this failure.
Language/14_Types/8_Parameterized_Types_A02_t01: Fail # TODO(ahe): Please triage this failure.
LibTest/core/AssertionError/column_A01_t02: Fail # TODO(ahe): Please triage this failure.
@@ -181,6 +275,9 @@
LibTest/core/List/operator_subscript_A03_t01: Fail # TODO(ahe): Please triage this failure.
LibTest/core/List/operator_subscripted_assignment_A03_t01: Fail # TODO(ahe): Please triage this failure.
LibTest/core/Map/putIfAbsent_A01_t04: Fail # TODO(ahe): Please triage this failure.
+LibTest/core/Map/putIfAbsent_A01_t07: Fail # TODO(ahe): Please triage this failure.
+LibTest/core/Map/putIfAbsent_A01_t08: Fail # TODO(ahe): Please triage this failure.
+LibTest/core/Queue/iterator_hasNext_A01_t01: Fail # TODO(ahe): Please triage this failure.
LibTest/core/TypeError/column_A01_t01: Fail # TODO(ahe): Please triage this failure.
LibTest/core/TypeError/dstName_A01_t01: Fail # TODO(ahe): Please triage this failure.
LibTest/core/TypeError/dstType_A01_t01: Fail # TODO(ahe): Please triage this failure.
@@ -189,30 +286,10 @@
LibTest/core/TypeError/srcType_A01_t01: Fail # TODO(ahe): Please triage this failure.
LibTest/core/TypeError/url_A01_t01: Fail # TODO(ahe): Please triage this failure.
-Language/11_Statements/04_If_A02_t02: Fail, OK # Issue co19 208
-Language/11_Statements/05_For/1_For_Loop_A01_t08: Fail, OK # Issue co19 208
-Language/11_Statements/06_While_A02_t02: Fail, OK # Issue co19 208
-
-Language/11_Statements/15_Assert_A04_t04: Fail # dart2js doesn't throw ClosureArgumentMismatchException
+Language/03_Overview/1_Scoping_A02_t30: Fail # http://dartbug.com/5348
[ $compiler == dart2js ]
-LibTest/core/Math/acos_A01_t01: Fail, OK # co19 issue 200
-LibTest/core/Math/asin_A01_t01: Fail, OK # co19 issue 200
-LibTest/core/Math/atan2_A01_t01: Fail, OK # co19 issue 200
-LibTest/core/Math/atan_A01_t01: Fail, OK # co19 issue 200
-LibTest/core/Math/cos_A01_t01: Fail, OK # co19 issue 200
-LibTest/core/Math/exp_A01_t01: Fail, OK # co19 issue 200
-LibTest/core/Math/log_A01_t01: Fail, OK # co19 issue 200
-LibTest/core/Math/max_A01_t03: Fail, OK # co19 issue 200
-LibTest/core/Math/min_A01_t03: Fail, OK # co19 issue 200
-LibTest/core/Math/parseDouble_A01_t01: Fail, OK # co19 issue 200
-LibTest/core/Math/pow_A11_t01: Fail, OK # co19 issue 200
-LibTest/core/Math/pow_A13_t01: Fail, OK # co19 issue 200
-LibTest/core/Math/random_A01_t01: Fail, OK # co19 issue 200
-LibTest/core/Math/sin_A01_t01: Fail, OK # co19 issue 200
-LibTest/core/Math/sqrt_A01_t01: Fail, OK # co19 issue 200
-LibTest/core/Math/tan_A01_t01: Fail, OK # co19 issue 200
LibTest/core/int/operator_GT_A01_t01: Fail, OK # co19 issue 200
LibTest/core/int/operator_LT_A01_t01: Fail, OK # co19 issue 200
LibTest/core/int/operator_addition_A01_t01: Fail, OK # co19 issue 200
@@ -223,53 +300,94 @@
# Tests that fail because they use the legacy try-catch syntax.
# See co19 issue 184.
-Language/11_Statements/09_Try_A01_t01: Fail, OK
-Language/11_Statements/09_Try_A02_t03: Fail, OK
-Language/11_Statements/09_Try_A04_t01: Fail, OK
-LibTest/core/Expect/equals_A02_t01: Fail, OK
LibTest/core/List/getRange_A03_t01: Fail, OK
-LibTest/core/List/removeRange_A06_t01: Fail, OK
LibTest/core/List/setRange_A05_t01: Fail, OK
-LibTest/core/Set/addAll_A01_t04: Fail, OK
-LibTest/core/Set/contains_A01_t03: Fail, OK
-LibTest/core/Set/containsAll_A01_t03: Fail, OK
-LibTest/core/Set/remove_A01_t04: Fail, OK
-LibTest/core/Set/removeAll_A01_t03: Fail, OK
-# These tests need to be updated to the new Date core lib API, co19 issue 256:
-LibTest/core/Date/Date.fromMillisecondsSinceEpoch_A01_t01: Fail
-LibTest/core/Date/Date.fromMillisecondsSinceEpoch_A01_t02: Fail
-LibTest/core/Date/Date.fromMillisecondsSinceEpoch_A02_t01: Fail # May be a different issue.
-LibTest/core/Date/Date.fromMillisecondsSinceEpoch_A03_t01: Fail # May be a different issue.
-LibTest/core/Date/Date_A01_t04: Fail
-LibTest/core/Date/Date_A01_t05: Fail
-LibTest/core/Date/isUtc_A01_t01: Fail
-LibTest/core/Date/millisecondsSinceEpoch_A01_t01: Fail
-LibTest/core/Date/operator_GE_A01_t01: Fail
-LibTest/core/Date/operator_GT_A01_t01: Fail
-LibTest/core/Date/operator_LE_A01_t01: Fail
-LibTest/core/Date/operator_LT_A01_t01: Fail
-LibTest/core/Date/operator_equality_A01_t01: Fail
-LibTest/core/Date/timeZoneName_A01_t01: Fail
-LibTest/core/Date/timeZoneOffset_A01_t01: Fail
-LibTest/core/Date/toLocal_A01_t01: Fail
-LibTest/core/Date/toUtc_A01_t01: Fail
+# These tests need to be updated for new optional parameter syntax and semantics, co19 issue 258:
+Language/06_Functions/2_Formal_Parameters/2_Optional_Formals_A01_t01: Fail, OK
+Language/07_Classes/1_Instance_Methods_A02_t05: Fail, OK
+Language/07_Classes/6_Constructors/1_Generative_Constructors_A13_t01: Fail, OK
+Language/14_Types/5_Function_Types_A01_t21: Fail, OK
-[ $compiler == dart2js && $system == macos && $runtime == d8 ]
-LibTest/core/Math/acos_A01_t01: Fail, OK
-LibTest/core/Math/asin_A01_t01: Fail, OK
-LibTest/core/Math/atan_A01_t01: Fail, OK
+LibTest/core/String/charCodes_A01_t01: Fail, OK # co19 issue 289
-[ $compiler == dart2js && $system == windows && $runtime == d8 ]
+LibTest/core/Stopwatch/Stopwatch_A01_t01: Fail, OK # co19 issue 297
+LibTest/core/Stopwatch/elapsed_A01_t03: Fail, OK # co19 issue 297
+LibTest/core/Stopwatch/elapsed_A01_t01: Fail, OK # co19 issue 297
+LibTest/core/Stopwatch/elapsed_A01_t02: Fail, OK # co19 issue 297
+LibTest/core/Stopwatch/elapsedInUs_A01_t01: Fail, OK # co19 issue 297
+LibTest/core/Stopwatch/elapsedInMs_A01_t01: Fail, OK # co19 issue 297
+LibTest/core/Stopwatch/start_A01_t01: Fail, OK # co19 issue 297
+LibTest/core/Stopwatch/start_A01_t02: Fail, OK # co19 issue 297
+LibTest/core/Stopwatch/start_A01_t03: Fail, OK # co19 issue 297
+LibTest/core/Stopwatch/stop_A01_t01: Fail, OK # co19 issue 297
+LibTest/core/Stopwatch/frequency_A01_t01: Fail, OK # co19 issue 297
+
+LibTest/isolate/SendPort/send_A02_t02: Fail, OK # co19 issue 293
+LibTest/isolate/SendPort/send_A02_t03: Fail, OK # co19 issue 293
+LibTest/isolate/SendPort/send_A02_t04: Fail, OK # co19 issue 293
+LibTest/core/LinkedHashMap/LinkedHashMap_class_A01_t01: Fail, OK # co19 issue 293
+LibTest/core/Map/getKeys_A01_t01: Fail, OK # co19 issue 293
+LibTest/core/Map/getKeys_A01_t02: Fail, OK # co19 issue 293
+LibTest/core/Map/getValues_A01_t02: Fail, OK # co19 issue 293
+LibTest/core/Map/getValues_A01_t01: Fail, OK # co19 issue 293
+
+LibTest/core/Match/end_A01_t01: Fail, OK # co19 issue 294
+LibTest/core/Match/group_A01_t01: Fail, OK # co19 issue 294
+LibTest/core/Match/groupCount_A01_t01: Fail, OK # co19 issue 294
+LibTest/core/Match/operator_subscript_A01_t01: Fail, OK # co19 issue 294
+LibTest/core/Match/start_A01_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/allMatches_A01_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/firstMatch_A01_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Assertion_A03_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Assertion_A04_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Assertion_A05_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Atom_A01_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Atom_A02_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Atom_A03_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Atom_A03_t02: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Atom_A03_t03: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Atom_A04_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Atom_A05_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Atom_A06_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_AtomEscape_A01_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Disjunction_A01_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Quantifier_A01_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Quantifier_A02_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Quantifier_A03_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Quantifier_A04_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Quantifier_A05_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Quantifier_A06_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Term_A01_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Term_A02_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Term_A03_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Term_A04_t01: Fail, OK # co19 issue 294
+
+LibTest/core/Queue/filter_A01_t04: Fail, OK # co19 issue 291
+LibTest/core/Queue/first_A01_t01: Fail, OK # co19 issue 291
+LibTest/core/Queue/removeFirst_A01_t01: Fail, OK # co19 issue 291
+LibTest/core/Queue/addFirst_A01_t01: Fail, OK # co19 issue 291
+LibTest/core/Queue/removeLast_A01_t01: Fail, OK # co19 issue 291
+LibTest/core/Queue/add_A01_t01: Fail, OK # co19 issue 291
+LibTest/core/Queue/addLast_A01_t01: Fail, OK # co19 issue 291
+LibTest/core/Queue/last_A01_t01: Fail, OK # co19 issue 291
+LibTest/core/List/last_A02_t01: Fail, OK # co19 issue 291
+LibTest/core/List/last_A01_t01: Fail, OK # co19 issue 291
+
+LibTest/core/Queue/filter_A01_t04: Fail, OK # co19 issue 287
+LibTest/core/Map/getValues_A01_t02: Fail, OK # co19 issue 287
+
+LibTest/core/int/isOdd_A01_t01: Fail, OK # co19 issue 277
+LibTest/core/int/isEven_A01_t01: Fail, OK # co19 issue 277
+
+
+[ $compiler == dart2js && $system == windows && $jscl ]
LibTest/core/double/operator_remainder_A01_t04: Fail
[ $compiler == dart2js ]
-Language/07_Classes/6_Constructors/1_Generative_Constructors_A16_t07: Fail # Redirecting constructors can not use initializing formals. This bug was previously masked - compilation failed, but for different, wrong reason.
-
Language/06_Functions/2_Formal_Parameters/2_Optional_Formals_A01_t10: Fail # TODO(ahe): Enforce optional parameter semantics.
Language/06_Functions/2_Formal_Parameters/2_Optional_Formals_A01_t11: Fail # TODO(ahe): Enforce optional parameter semantics.
Language/06_Functions/2_Formal_Parameters/2_Optional_Formals_A03_t03: Fail # TODO(ahe): Enforce optional parameter semantics.
-Language/06_Functions/2_Formal_Parameters/2_Optional_Formals_A03_t04: Fail # TODO(ahe): Enforce optional parameter semantics.
Language/09_Generics/09_Generics_A05_t01: Fail # dart2js fails to reject type variable within static member
@@ -279,24 +397,15 @@
Language/10_Expressions/14_Function_Invocation/2_Binding_Actuals_to_Formals_A06_t08: Fail # Compile-time error: Unimplemented non-matching static call
Language/10_Expressions/14_Function_Invocation/2_Binding_Actuals_to_Formals_A07_t01: Fail # Compile-time error: Unimplemented non-matching static call
Language/10_Expressions/14_Function_Invocation/2_Binding_Actuals_to_Formals_A07_t04: Fail # Compile-time error: Unimplemented non-matching static call
-Language/10_Expressions/29_Type_Test_A04_t01: Fail # Compile-time error: error: cannot resolve type Undeclared
Language/10_Expressions/01_Constants_A03_t01: Fail # Compile-time error: error: not a compile-time constant
Language/10_Expressions/01_Constants_A11_t01: Fail # Compile-time error: error: not a compile-time constant
LibTest/isolate/SendPort/send_A02_t01: Fail # Compile-time error: error: not a compile-time constant
LibTest/isolate/SendPort/send_A02_t02: Fail # Compile-time error: error: not a compile-time constant
LibTest/isolate/SendPort/send_A02_t03: Fail # Compile-time error: error: not a compile-time constant
-Language/10_Expressions/20_Logical_Boolean_Expressions_A01_t01: Fail # Compile-time error: expected an expression, but got '&&'
-Language/10_Expressions/15_Method_Invocation/2_Cascaded_Invocation_A01_t01: Fail # Compile-time error: unexpected token '('
-Language/10_Expressions/28_Identifier_Reference_A08_t02: Fail # Compile-time error: unexpected token ';'
-Language/10_Expressions/28_Identifier_Reference_A08_t32: Fail # Compile-time error: unexpected token ';'
-Language/11_Statements/05_For_A01_t11: Fail # Compile-time error: unexpected token 'const'
Language/10_Expressions/01_Constants_A18_t03: Fail # Compile-time error: unexpected token 'equals'
Language/10_Expressions/22_Equality_A02_t03: Fail # Compile-time error: unexpected token 'equals'
-Language/10_Expressions/22_Equality_A03_t01: Fail # Compile-time error: unexpected token 'equals'
-Language/10_Expressions/22_Equality_A03_t03: Fail # Compile-time error: unexpected token 'equals'
Language/10_Expressions/05_Strings_A20_t01: Fail # Runtime error: Expect.identical(expected: <abyr, abyr
-Language/11_Statements/08_Switch_A02_t01: Fail # Runtime error: Expect.throws() fails
LibTest/isolate/isolate_api/spawnUri_A02_t01: Fail # Runtime error: Expect.throws() fails
Language/10_Expressions/15_Method_Invocation/1_Ordinary_Invocation_A05_t03: Fail # Runtime error: NoSuchMethodException : method not found: '$call'
Language/10_Expressions/15_Method_Invocation/1_Ordinary_Invocation_A05_t06: Fail # Runtime error: NoSuchMethodException : method not found: 'm'
@@ -314,22 +423,15 @@
Language/10_Expressions/15_Method_Invocation/4_Super_Invocation_A03_t03: Fail # Runtime error: TypeError: Cannot call method '$call$0' of undefined
Language/10_Expressions/15_Method_Invocation/4_Super_Invocation_A07_t01: Fail # Runtime error: TypeError: Cannot call method '$call$0' of undefined
Language/10_Expressions/15_Method_Invocation/4_Super_Invocation_A08_t02: Fail # Runtime error: TypeError: Cannot call method '$call$0' of undefined
-LibTest/core/Future/handleException_A01_t07: Fail # Runtime error: TypeError: Cannot call method '$call$1' of undefined
-LibTest/core/Future/then_A01_t05: Fail # Runtime error: TypeError: Cannot call method '$call$1' of undefined
Language/10_Expressions/15_Method_Invocation/4_Super_Invocation_A02_t04: Fail # Runtime error: TypeError: Cannot call method '$call$2' of undefined
-Language/10_Expressions/14_Function_Invocation/3_Unqualified_Invocation_A01_t04: Fail # Runtime error: TypeError: Object has no method '$call$2'
Language/10_Expressions/15_Method_Invocation/1_Ordinary_Invocation_A05_t02: Fail # Runtime error: TypeError: Object #<A> has no method '$call$0'
-Language/10_Expressions/14_Function_Invocation/4_Function_Expression_Invocation_A02_t01: Fail # Runtime error: TypeError: Object 1 has no method '$call$0'
Language/10_Expressions/14_Function_Invocation/4_Function_Expression_Invocation_A03_t01: Fail # Runtime error: TypeError: Object 1 has no method '$call$0'
-Language/10_Expressions/14_Function_Invocation/3_Unqualified_Invocation_A01_t05: Fail # Runtime error: TypeError: Object 1 has no method '$call$3'
-Language/10_Expressions/14_Function_Invocation/3_Unqualified_Invocation_A01_t03: Fail # Runtime error: TypeError: Object a1 has no method '$call$2'
-LibTest/isolate/isolate_api/spawnUri_A01_t01: Fail # Runtime error: UnsupportedOperationException: Currently spawnUri is not supported without web workers.
-LibTest/isolate/isolate_api/spawnUri_A01_t02: Fail # Runtime error: UnsupportedOperationException: Currently spawnUri is not supported without web workers.
-LibTest/isolate/isolate_api/spawnUri_A01_t03: Fail # Runtime error: UnsupportedOperationException: Currently spawnUri is not supported without web workers.
-LibTest/isolate/isolate_api/spawnUri_A01_t04: Fail # Runtime error: UnsupportedOperationException: Currently spawnUri is not supported without web workers.
-LibTest/isolate/isolate_api/spawnUri_A01_t05: Fail # Runtime error: UnsupportedOperationException: Currently spawnUri is not supported without web workers.
+LibTest/isolate/isolate_api/spawnUri_A01_t01: Fail # Runtime error: UnsupportedError: Currently spawnUri is not supported without web workers.
+LibTest/isolate/isolate_api/spawnUri_A01_t02: Fail # Runtime error: UnsupportedError: Currently spawnUri is not supported without web workers.
+LibTest/isolate/isolate_api/spawnUri_A01_t03: Fail # Runtime error: UnsupportedError: Currently spawnUri is not supported without web workers.
+LibTest/isolate/isolate_api/spawnUri_A01_t04: Fail # Runtime error: UnsupportedError: Currently spawnUri is not supported without web workers.
+LibTest/isolate/isolate_api/spawnUri_A01_t05: Fail # Runtime error: UnsupportedError: Currently spawnUri is not supported without web workers.
LibTest/isolate/SendPort/send_A02_t04: Fail # Runtime error: TypeError: Cannot call method 'toSendPort$0' of undefined.
-LibTest/isolate/isolate_api/spawnFunction_A02_t01: Fail # Runtime error: Expect.throws() fails.
LibTest/core/int/operator_NOT_A01_t01: Fail, OK # Expects negative result from bit-operation.
LibTest/core/int/operator_XOR_A01_t01: Fail, OK # Requires bigints.
@@ -347,11 +449,13 @@
LibTest/core/RegExp/allMatches_A01_t01: Fail, OK # co19 issue 212
LibTest/core/RegExp/Pattern_semantics/firstMatch_Term_A04_t01: Fail, OK # co19 issue 212
+
[ $compiler == dart2js && $checked ]
LibTest/core/Queue/addLast_A01_t01: Slow, Pass
LibTest/core/Queue/add_A01_t01: Slow, Pass
LibTest/core/Queue/iterator_hasNext_A01_t01: Slow, Pass
+
#
# Issues with co19 test suite.
#
@@ -360,48 +464,22 @@
# can understand so he can file a bug later.
#
[ $compiler == dart2js ]
-Language/10_Expressions/21_Bitwise_Expressions_A01_t01: Fail, OK # Function declaration takes precedence over function expression.
Language/10_Expressions/22_Equality_A01_t01: Fail, OK # Function declaration takes precedence over function expression.
-Language/10_Expressions/21_Relational_Expressions_A01_t01: Fail, OK # Function declaration takes precedence over function expression.
-Language/10_Expressions/22_Shift_A01_t01: Fail, OK # Function declaration takes precedence over function expression.
-Language/10_Expressions/26_Postfix_Expressions_A01_t01: Fail, OK # A map literal cannot start an expression statement.
-Language/10_Expressions/27_Assignable_Expressions_A01_t27: Fail, OK # A map literal cannot start an expression statement.
-Language/10_Expressions/28_Identifier_Reference_A04_t07: Fail # assert is a reserved word, which can not be used as a variable name.
-Language/11_Statements/07_Do_A02_t02: Fail, OK # co19 issue 145.
+Language/10_Expressions/28_Postfix_Expressions_A01_t01: Fail, OK # A map literal cannot start an expression statement.
LibTest/core/String/String_class_A02_t01: Fail, OK # compiler cancelled: Unhandled non-BMP character: U+10000
LibTest/core/String/charCodeAt_A01_t01: Fail, OK # compiler cancelled: Unhandled non-BMP character: U+10000
LibTest/core/String/charCodes_A01_t01: Fail, OK # compiler cancelled: Unhandled non-BMP character: U+10000
-Language/07_Classes/6_Constructors/2_Factories_A01_t01: Fail, OK # Uses deprecated factory syntax.
-
Language/06_Functions/1_Function_Declaration_A02_t03: Fail, OK # co19 issue 210
Language/06_Functions/1_Function_Declaration_A03_t03: Fail, OK # co19 issue 210
Language/06_Functions/2_Formal_Parameters/2_Optional_Formals_A01_t14: Fail, OK # co19 issue 210
Language/06_Functions/2_Formal_Parameters/2_Optional_Formals_A01_t15: Fail, OK # co19 issue 210
Language/10_Expressions/05_Strings/1_String_Interpolation_A01_t09: Fail, OK # co19 issue 210
-Language/11_Statements/03_Variable_Declaration_A01_t10: Fail, OK # co19 issue 210
-Language/11_Statements/03_Variable_Declaration_A02_t04: Fail, OK # co19 issue 210
-Language/11_Statements/08_Switch_A07_t02: Fail, OK # co19 issue 210
-
-LibTest/core/Math/max_A01_t03: Fail, OK # co19 issue 157
-LibTest/core/Math/min_A01_t03: Fail, OK # co19 issue 157
Language/03_Overview/1_Scoping_A01_t40: Fail, OK # co19 issue 188
Language/03_Overview/1_Scoping_A01_t41: Fail, OK # co19 issue 188
-Language/10_Expressions/28_Identifier_Reference_A06_t13: Fail, OK # co19 issue 254
-Language/10_Expressions/28_Identifier_Reference_A06_t15: Fail, OK # co19 issue 188
-
-Language/07_Classes/3_Setters_A01_t02: Fail, OK # co19 issue 189
-
-Language/07_Classes/07_Classes_A01_t20: Fail, OK # co19 issue 193
-Language/07_Classes/07_Classes_A02_t34: Fail, OK # co19 issue 193
Language/07_Classes/4_Abstract_Instance_Members_A02_t02: Fail, OK # co19 issue 194
-Language/11_Statements/09_Try_A06_t01: Fail, OK # co19 issue 194
-Language/11_Statements/09_Try_A06_t02: Fail, OK # co19 issue 194
-Language/11_Statements/09_Try_A06_t03: Fail, OK # co19 issue 194
-Language/11_Statements/09_Try_A06_t04: Fail, OK # co19 issue 194
-Language/11_Statements/09_Try_A06_t05: Fail, OK # co19 issue 194
Language/06_Functions/4_External_Functions_A01_t01: Fail, OK # http://dartbug.com/5021
@@ -410,31 +488,12 @@
Language/03_Overview/2_Privacy_A01_t09: Fail, OK # co19 issue 198
Language/03_Overview/2_Privacy_A01_t10: Fail, OK # co19 issue 198
-Language/10_Expressions/30_Type_Cast_A02_t03: Fail, OK # co19 issue 236
+Language/10_Expressions/11_Instance_Creation/1_New_A12_t01: Fail, OK # co19 issue 273
+LibTest/core/String/hashCode_A01_t01: Fail, OK # co19 issue 273
+LibTest/core/int/hashCode_A01_t01: Fail, OK # co19 issue 273
-Language/13_Libraries_and_Scripts/2_Imports_A03_t06: Fail, OK # co19 issue 244
-Language/13_Libraries_and_Scripts/2_Imports_A02_t01: Fail, OK # co19 issue 246
-Language/13_Libraries_and_Scripts/2_Imports_A02_t02: Fail, OK # co19 issue 246
-Language/13_Libraries_and_Scripts/2_Imports_A02_t16: Fail, OK # co19 issue 246
-Language/13_Libraries_and_Scripts/2_Imports_A02_t17: Fail, OK # co19 issue 246
-Language/13_Libraries_and_Scripts/2_Imports_A03_t02: Fail, OK # co19 issue 246
-Language/13_Libraries_and_Scripts/2_Imports_A03_t12: Fail, OK # co19 issue 246
-Language/13_Libraries_and_Scripts/2_Imports_A03_t22: Fail, OK # co19 issue 246
-
-Language/13_Libraries_and_Scripts/2_Imports_A03_t16: Fail # co19 issue 226
-Language/13_Libraries_and_Scripts/2_Imports_A03_t26: Fail # co19 issue 226
-
-Language/13_Libraries_and_Scripts/3_Includes_A01_t01: Fail, OK # co19 issue 249
-Language/13_Libraries_and_Scripts/3_Includes_A03_t03: Fail, OK # co19 issue 249
-
-Language/13_Libraries_and_Scripts/2_Imports_A06_t01: Fail, OK # co19 issue 250
-
-Language/13_Libraries_and_Scripts/2_Imports_A01_t39: Fail # co19 issue 253: Show combinators are intersections.
-
-Language/03_Overview/1_Scoping_A02_t05: Fail # co19 issue 261
-
-[ $compiler == dart2js && $runtime == d8 ]
+[ $compiler == dart2js && $jscl ]
LibTest/core/RegExp/Pattern_semantics/firstMatch_CharacterClassEscape_A04_t01: Fail, Pass # issue 3333
LibTest/core/RegExp/Pattern_semantics/firstMatch_CharacterClassEscape_A03_t01: Fail, Pass # issue 3333
@@ -444,12 +503,6 @@
LibTest/core/Date/year_A01_t01: Fail, OK # Requires big int.
LibTest/core/Match/pattern_A01_t01: Fail, OK # Bad test, allMatches return an Iterable.
LibTest/core/Match/str_A01_t01: Fail, OK # Bad test, allMatches return an Iterable.
-LibTest/core/Math/exp_A01_t01: Fail, Pass, OK # TODO(floitsch): Review.
-LibTest/core/Math/pow_A01_t01: Fail, OK # Bad test (uses x.pow(y), not Math.pow(x, y)).
-LibTest/core/Math/pow_A11_t01: Fail, OK # TODO(floitsch): Review.
-LibTest/core/Math/pow_A13_t01: Fail, OK # TODO(floitsch): Review.
-LibTest/core/Math/sin_A01_t01: Fail, OK # TODO(floitsch): Review.
-LibTest/core/Math/tan_A01_t01: Fail, OK # TODO(floitsch): Review.
LibTest/core/RegExp/Pattern_semantics/firstMatch_NonEmptyClassRanges_A01_t01: Fail, OK # This is not rejected by V8.
LibTest/core/RegExp/Pattern_semantics/firstMatch_Term_A04_t01: Fail, OK # co19 issue 92.
LibTest/core/RegExp/RegExp_A01_t03: Fail, OK # Expects exception from const constructor.
@@ -484,30 +537,23 @@
#
[ $compiler == dart2js ]
Language/07_Classes/6_Constructors/1_Generative_Constructors_A13_t01: Fail # compiler cancelled: cannot resolve type T
-Language/11_Statements/13_Continue_A02_t12: Fail # compiler cancelled: cannot resolve label L
-Language/11_Statements/13_Continue_A02_t13: Fail # compiler cancelled: cannot resolve label L
-
Language/03_Overview/1_Scoping_A02_t07: Fail # duplicate definition of f(var f){f();}
Language/03_Overview/1_Scoping_A02_t12: Fail # duplicate definition of x=42
Language/03_Overview/2_Privacy_A01_t06: Fail # cannot resolve type _inaccessibleFuncType
Language/03_Overview/2_Privacy_A01_t11: Fail # internal error: super property read not implemented
Language/03_Overview/2_Privacy_A01_t14: Fail # duplicate definition of _(var _)=> _
-Language/11_Statements/11_Labels_A03_t04: Fail # continue not implemented
-
Language/10_Expressions/01_Constants_A12_t01: Fail # internal error: CompileTimeConstantEvaluator not implemented
Language/10_Expressions/14_Function_Invocation/2_Binding_Actuals_to_Formals_A01_t01: Fail # Unimplemented non-matching static call
Language/10_Expressions/14_Function_Invocation/2_Binding_Actuals_to_Formals_A01_t04: Fail # Unimplemented non-matching static call
Language/10_Expressions/14_Function_Invocation/2_Binding_Actuals_to_Formals_A01_t05: Fail # Unimplemented non-matching static call
Language/10_Expressions/22_Equality_A05_t01: Fail # != cannot be called on super
-Language/10_Expressions/25_Unary_Expressions_A01_t01: Fail # ! cannot be called on super
-Language/10_Expressions/25_Unary_Expressions_A01_t10: Fail # cannot deal with super in complex assignments
-Language/10_Expressions/27_Assignable_Expressions_A01_t26: Fail # internal error in parser.
-Language/10_Expressions/28_Identifier_Reference_A02_t01: Fail # Pseudo keyword "abstract".
+Language/10_Expressions/27_Unary_Expressions_A01_t01: Fail # ! cannot be called on super
+Language/10_Expressions/27_Unary_Expressions_A01_t10: Fail # cannot deal with super in complex assignments
+Language/10_Expressions/30_Identifier_Reference_A02_t01: Fail # Pseudo keyword "abstract".
-[ $compiler == dart2js && $runtime == d8 ]
-Language/11_Statements/09_Try_A05_t03: Fail # Expect.isTrue(false) fails.
+[ $compiler == dart2js && $jscl ]
LibTest/core/Date/Date.fromString_A03_t01: Fail # Issue co19 - 121
LibTest/core/Expect/throws_A02_t01: Fail # reason (sdsds sd dsf) not mentioned in ExpectException message (Expect.isTrue(false) fails.)
LibTest/core/RegExp/Pattern_semantics/firstMatch_CharacterEscape_A06_t02: Fail # IllegalJSRegExpException: '\c(' 'SyntaxError: Invalid regular expression: /\c(/: Unterminated group'
@@ -521,9 +567,10 @@
#
# The following tests may be broken, but require further review.
#
-[ $compiler == dart2js && $runtime == d8 ]
+[ $compiler == dart2js && $jscl ]
LibTest/core/Expect/identical_A01_t01: Fail # TODO(floitsch): Is NaN identical to NaN?
+
[ $compiler == dart2js && $browser ]
*: Skip
@@ -541,7 +588,6 @@
Language/05_Variables/05_Variables_A01_t15: Fail # Checks that a variable declaration cannot contain the 'abstract' keyword.
Language/05_Variables/05_Variables_A03_t01: Fail # Checks that a compile-time error occurs if local final variable is redefined.
Language/05_Variables/05_Variables_A03_t02: Fail # Checks that a compile-time error occurs if local final variable is not assigned.
-Language/05_Variables/05_Variables_A03_t03: Fail # Checks that a compile-time error occurs if a global final variable is redefined.
Language/05_Variables/05_Variables_A03_t04: Fail # Checks that a compile-time error occurs if a global final variable is not assigned.
Language/05_Variables/05_Variables_A03_t05: Fail # Checks that a compile-time error occurs if local typed final variable is redefined.
Language/05_Variables/05_Variables_A03_t06: Fail # Checks that a compile-time error occurs if local typed final variable is not assigned.
@@ -558,7 +604,6 @@
Language/05_Variables/05_Variables_A04_t08: Fail # Checks that a compile-time error occurs if a global typed constant variable is not initialized at declaration.
Language/05_Variables/05_Variables_A04_t10: Fail # Checks that assigning a constant variable to the same value it already holds still produces a compile-time error.
Language/05_Variables/05_Variables_A05_t01: Fail # Checks that a compile-time error occurs if a constant variable is not initialized.
-Language/06_Functions/06_Functions_A01_t06: Fail # Checks that it is a compile error if a block of a function body isn't closed
Language/06_Functions/06_Functions_A01_t31: Fail # Checks that functions can't be declared as static inside of a function body.
Language/06_Functions/1_Function_Declaration_A01_t01: Fail # Checks that it is a compile-time error to preface library function with 'static'.
Language/06_Functions/1_Function_Declaration_A02_t02: Fail # Checks that 'id' is not assignable since its declaration is equivalent to a final variable declaration.
@@ -578,7 +623,6 @@
Language/07_Classes/07_Classes_A02_t02: Fail # Checks that it is a compile-time error if a constant constructor declaration includes a body.
Language/07_Classes/07_Classes_A02_t04: Fail # Checks that it is a compile-time error if a constant constructor declaration with initializers includes a body.
Language/07_Classes/07_Classes_A02_t11: Fail # Checks that it is a compile-time error if a static final variable declaration does not include explicit initializer.
-Language/07_Classes/07_Classes_A02_t32: Fail # Checks that it is a compile-time error when a constant constructor is declared abstract.
Language/07_Classes/07_Classes_A03_t02: Fail # Checks that it is a compile-time error if a factory constructor method definition does not include a body.
Language/07_Classes/07_Classes_A03_t08: Fail # Checks that it is a compile-time error if a static setter method definition does not include a body.
Language/07_Classes/07_Classes_A03_t09: Fail # Checks that it is a compile-time error if a static function method definition does not include a body.
@@ -587,11 +631,7 @@
Language/07_Classes/07_Classes_A04_t22: Fail # Checks that an abstract static operator can't be used in place of a class member definition./
Language/07_Classes/07_Classes_A04_t24: Fail # Checks that a static abstract getter can't be used in place of a class member definition.
Language/07_Classes/07_Classes_A04_t25: Fail # Checks that a static abstract setter can't be used in place of a class member definition.
-Language/07_Classes/07_Classes_A09_t01: Fail # Checks that it is a compile-time error if a class has a non-abstract instance method and a static member method with the same name.
-Language/07_Classes/07_Classes_A09_t02: Fail # Checks that it is a compile-time error if a class has an abstract instance method and a static member method with the same name.
-Language/07_Classes/07_Classes_A09_t04: Fail # Checks that it is a compile-time error if a class has an instance method and a static field method with the same name.
Language/07_Classes/10_Superinterfaces_A04_t01: Fail # Checks that it is a compile-time error if the same type appears more than once in the implements clause.
-Language/07_Classes/1_Instance_Methods/2_Operators_A01_t03: Fail # Checks that it is a compile-time error if a class attempts to define an operator without a name (basically, an instance method named 'operator').
Language/07_Classes/1_Instance_Methods/2_Operators_A06_t02: Fail # Checks that a compile-time error is produced if a user-defined operator ~ specifies one parameter.
Language/07_Classes/1_Instance_Methods/2_Operators_A07_t01: Fail # Checks that a compile-time error is produced if a user-defined operator [] specifies an optional named parameter.
Language/07_Classes/1_Instance_Methods/2_Operators_A07_t02: Fail # Checks that a compile-time error is produced if a user-defined operator [] specifies an optional named parameter in addition to the required one.
@@ -599,10 +639,7 @@
Language/07_Classes/1_Instance_Methods/2_Operators_A07_t04: Fail # Checks that a compile-time error is produced if a user-defined operator []= specifies one optional named parameter in addition to the two required ones.
Language/07_Classes/1_Instance_Methods_A02_t01: Fail # Checks that a compile-time error is produced if m1 has fewer named parameters than m2 (2 vs 3) and neither have any required parameters.
Language/07_Classes/1_Instance_Methods_A02_t02: Fail # Checks that a compile-time error is produced if m1 has fewer named parameters than m2 (1 vs. 0) and neither have any required parameters.
-Language/07_Classes/1_Instance_Methods_A02_t03: Fail # Checks that a compile-time error is produced if m1 has the same set of named parameters as m2 but in a different order.
-Language/07_Classes/1_Instance_Methods_A02_t04: Fail # Checks that a compile-time error is produced if m1 has the same set of named parameters as m2 but in a different order.
Language/07_Classes/1_Instance_Methods_A02_t05: Fail # Checks that a compile-time error is produced if m1 has almost the same set of named parameters as m2 except for one of them having a different name.
-Language/07_Classes/1_Instance_Methods_A02_t06: Fail # Checks that a compile-time error is produced if m1 has the same set of named parameters as m2 but in a different order even if the class declaring m1 is not a direct subtype of the class declaring m2.
Language/07_Classes/2_Getters_A01_t03: Fail # Checks that a compile-time error is produced if empty formal parameter list is present.
Language/07_Classes/2_Getters_A01_t04: Fail # Checks that a compile-time error is produced if non-empty formal parameter list is present.
Language/07_Classes/2_Getters_A01_t05: Fail # Checks that a compile-time error is produced if an static getter has empty formal parameter list.
@@ -617,7 +654,6 @@
Language/07_Classes/3_Setters_A03_t07: Fail # Checks that a compile-time error is produced if a static setter's formal parameter list is empty.
Language/07_Classes/3_Setters_A03_t08: Fail # Checks that a compile-time error is produced if a static setter's formal parameter list contains a single optional parameter with a default value.
Language/07_Classes/4_Abstract_Instance_Members_A04_t01: Fail # Checks that a compile-time error is produced when the overriding abstract method has fewer named parameters than the instance method being overridden (2 vs 3) and neither have any required parameters.
-Language/07_Classes/4_Abstract_Instance_Members_A04_t04: Fail # Checks that a compile-time error is produced when the overriding abstract method has the same set of named parameters as the non-abstract instance method being overriden, but in a different order.
Language/07_Classes/4_Abstract_Instance_Members_A04_t05: Fail # Checks that a compile-time error is produced when the overriding non-abstract instance method has the same set of named parameters as the abstract method being overriden, but in a different order.
Language/07_Classes/4_Abstract_Instance_Members_A04_t06: Fail # Checks that a compile-time error is produced when the overriding non-abstract instance method has almost the same set of named parameters as the abstract method being overriden, except for one that has a different name.
Language/07_Classes/6_Constructors/1_Generative_Constructors_A03_t05: Fail # Checks that redirecting constructor can not have initializing formals.
@@ -629,46 +665,21 @@
Language/07_Classes/6_Constructors/3_Constant_Constructors_A03_t02: Fail # Checks that compile-time error is produced when a class with constant constructor inherits a non-final instance variable.
Language/07_Classes/6_Constructors_A01_t01: Fail # Checks that a compile-error is produced when a constructor's id coincides with the name of a field in the same class.
Language/07_Classes/6_Constructors_A02_t01: Fail # Checks that a compile-error is produced when a named constructor definition does not begin with the name of its class.
+Language/07_Classes/6_Constructors/1_Generative_Constructors_A16_t07: Fail # http://dartbug.com/6242
Language/10_Expressions/01_Constants_A16_t01: Fail # Checks that an IntegerDivisionByZeroException raised during evaluation of a compile-time constant causes a compile-time error.
Language/10_Expressions/01_Constants_A16_t02: Fail # Checks that an OutOfMemoryException raised during evaluation of a compile-time constant causes a compile-time error.
-Language/10_Expressions/05_Strings_A02_t39: Fail # Checks that unbalanced string cause compile-time erros.
-Language/10_Expressions/05_Strings_A02_t41: Fail # Checks that unbalanced raw multiline string cause compile-time erros.
-Language/10_Expressions/05_Strings_A02_t43: Fail # Checks that multi-line strings that contain characters and sequences prohibited by this grammar, cause compile-time errors.
-Language/10_Expressions/05_Strings_A02_t45: Fail # Checks that multi-line strings that contain characters and sequences prohibited by this grammar, cause compile-time errors.
Language/10_Expressions/05_Strings_A02_t46: Fail # Checks that multi-line strings that contain characters and sequences prohibited by this grammar, cause compile-time errors.
-Language/10_Expressions/05_Strings_A02_t47: Fail # Checks that multi-line strings that contain characters and sequences prohibited by this grammar, cause compile-time errors.
Language/10_Expressions/05_Strings_A02_t48: Fail # Checks that multi-line strings that contain characters and sequences prohibited by this grammar, cause compile-time errors.
-Language/10_Expressions/05_Strings_A02_t49: Fail # Checks that multi-line strings that contain characters and sequences prohibited by this grammar, cause compile-time errors.
Language/10_Expressions/06_Lists_A04_t01: Fail # Checks that it is a compile-time error if the type argument of a constant list literal includes a type variable.
Language/10_Expressions/15_Method_Invocation/3_Static_Invocation_A03_t04: Fail # Checks that it is a static warning if interface C does not declare a static method or getter m.
Language/10_Expressions/22_Equality_A01_t15: Fail # Checks that equality expressions cannot be operands of another equality expression.
Language/10_Expressions/22_Equality_A01_t16: Fail # Checks that equality expressions cannot be operands of another equality expression.
-Language/10_Expressions/21_Relational_Expressions_A01_t10: Fail # Checks that a relational expression cannot be the operand of another relational expression.
-Language/10_Expressions/21_Relational_Expressions_A01_t11: Fail # Checks that a relational expression cannot be the operand of another relational expression.
-Language/10_Expressions/21_Relational_Expressions_A01_t12: Fail # Checks that a relational expression cannot be the operand of another relational expression.
-Language/10_Expressions/21_Relational_Expressions_A01_t13: Fail # Checks that a relational expression cannot be the operand of another relational expression.
-Language/10_Expressions/28_Identifier_Reference_A07_t01: Fail # Checks that it is a compile-time error when a built-in identifier "abstract" is used as a type annotation of a local variable.
-Language/10_Expressions/28_Identifier_Reference_A07_t04: Fail # Checks that it is a compile-time error when a built-in identifier "equals" is used as a type annotation of a local variable.
-Language/10_Expressions/28_Identifier_Reference_A07_t09: Fail # Checks that it is a compile-time error when a built-in identifier "negate" is used as a type annotation of a local variable.
-Language/10_Expressions/28_Identifier_Reference_A07_t12: Fail # Checks that it is a compile-time error when a built-in identifier "static" is used as a type annotation of a local variable.
-Language/11_Statements/02_Expression_Statements_A01_t09: Fail # Checks that it is a compile-time error when a map literal is used as a statement.
-Language/11_Statements/02_Expression_Statements_A01_t10: Fail # Checks that it is a compile-time error when a map literal is used as a statement.
-Language/11_Statements/02_Expression_Statements_A01_t11: Fail # Checks that it is a compile-time error when a map literal is used as a statement.
-Language/11_Statements/03_Variable_Declaration_A03_t01: Fail # Checks that if the variable declaration is prefixed with the final modifier, then that variable cannot be assigned a new value outside of this declaration.
-Language/11_Statements/03_Variable_Declaration_A03_t02: Fail # Checks that if the variable declaration is prefixed with the final modifier, then variable must be initialized right there and then.
-Language/11_Statements/03_Variable_Declaration_A03_t03: Fail # Checks that if a variable declaration is prefixed with const modifier, then it cannot be assigned a new value afterwards.
-Language/11_Statements/03_Variable_Declaration_A03_t04: Fail # Checks that if a variable declaration is prefixed with const modifier, then it must be initialized right there and then.
+Language/10_Expressions/23_Relational_Expressions_A01_t10: Fail # Checks that a relational expression cannot be the operand of another relational expression.
+Language/10_Expressions/23_Relational_Expressions_A01_t11: Fail # Checks that a relational expression cannot be the operand of another relational expression.
+Language/10_Expressions/23_Relational_Expressions_A01_t12: Fail # Checks that a relational expression cannot be the operand of another relational expression.
+Language/10_Expressions/23_Relational_Expressions_A01_t13: Fail # Checks that a relational expression cannot be the operand of another relational expression.
+Language/10_Expressions/30_Identifier_Reference_A07_t01: Fail # Checks that it is a compile-time error when a built-in identifier "abstract" is used as a type annotation of a local variable.
Language/11_Statements/03_Variable_Declaration_A04_t01: Fail # Checks that if the variable declaration is prefixed with the const modifier, then variable must be initialized to a constant expression.
-Language/11_Statements/05_For_A01_t12: Fail # Checks that it is a compile-time error when the loop variable in a 'id in expression' includes initializer.
-Language/11_Statements/08_Switch_A05_t01: Fail # Checks that it is a compile-time error if case expressions of a switch statement without a default case have different types.
-Language/11_Statements/08_Switch_A05_t02: Fail # Checks that it is a compile-time error if case expressions of a switch statement with a default case have different types.
-Language/11_Statements/08_Switch_A06_t01: Fail # Checks that it is a compile-time error if a case expression is not a compile-time constant.
-Language/11_Statements/08_Switch_A06_t02: Fail # Checks that it is a compile-time error if a case expression is a compile-time constant of type bool.
-Language/11_Statements/08_Switch_A06_t03: Fail # Checks that it is a compile-time error if a case expression is null
-Language/11_Statements/08_Switch_A06_t04: Fail # Checks that it is a compile-time error if a case expression is a compile-time constant of type double.
-Language/11_Statements/10_Return_A04_t01: Fail # Checks that a compile-time error occurs if a return statement of the form return e; appears in a generative constructor.
-Language/11_Statements/10_Return_A04_t02: Fail # Checks that a compile-time error occurs if a return statement of the form return e; appears in a named generative constructor.
-Language/11_Statements/10_Return_A04_t03: Fail # Checks that a compile-time error occurs if a return statement of the form return e; appears in a generative constructor.
Language/14_Types/3_Type_Declarations/1_Typedef_A07_t01: Fail # Checks that self-referencing typedef is not allowed (return value type annotation has the same name as a type alias).
Language/14_Types/3_Type_Declarations/1_Typedef_A07_t02: Fail # Checks that self-referencing typedef is not allowed (positional formal parameter type annotation has the same name as a type alias).
Language/14_Types/3_Type_Declarations/1_Typedef_A07_t03: Fail # Checks that self-referencing typedef is not allowed (optional formal parameter type annotation has the same name as a type alias).
@@ -683,11 +694,6 @@
Language/10_Expressions/15_Method_Invocation/3_Static_Invocation_A03_t06: Fail # http://dartbug.com/5027
Language/14_Types/2_Dynamic_Type_System_A02_t01: Fail # http://dartbug.com/5029
-Language/10_Expressions/30_Type_Cast_A03_t01: Fail # http://dartbug.com/5029
-Language/10_Expressions/30_Type_Cast_A03_t02: Fail # http://dartbug.com/5029
-Language/10_Expressions/30_Type_Cast_A05_t01: Fail # http://dartbug.com/5029
-Language/10_Expressions/30_Type_Cast_A05_t02: Fail # http://dartbug.com/5029
-Language/10_Expressions/30_Type_Cast_A05_t04: Fail # http://dartbug.com/5029
Language/10_Expressions/15_Method_Invocation/4_Super_Invocation_A04_t03: Fail # http://dartbug.com/3566
Language/10_Expressions/15_Method_Invocation/4_Super_Invocation_A04_t04: Fail # http://dartbug.com/3566
@@ -733,27 +739,16 @@
Language/14_Types/5_Function_Types_A01_t22: Fail # http://dartbug.com/5022
Language/14_Types/5_Function_Types_A01_t23: Fail # http://dartbug.com/5022
-Language/13_Libraries_and_Scripts/2_Imports_A02_t18: Fail # http://dartbug.com/3970. Redirecting factory constructors not implemented yet.
-
Language/13_Libraries_and_Scripts/4_Scripts_A03_t01: Fail # http://dartbug.com/5683
Language/13_Libraries_and_Scripts/4_Scripts_A03_t03: Fail # http://dartbug.com/5683
-Language/13_Libraries_and_Scripts/2_Imports_A02_t27: Fail # http://dartbug.com/5712
-
Language/13_Libraries_and_Scripts/13_Libraries_and_Scripts_A05_t02: Fail # http://dartbug.com/5713
-Language/13_Libraries_and_Scripts/13_Libraries_and_Scripts_A05_t04: Fail # http://dartbug.com/5714
-
#
# Unexpected runtime errors.
#
[ $compiler == dart2js ]
-Language/10_Expressions/14_Function_Invocation/4_Function_Expression_Invocation_A05_t02: Fail # TypeError: Object #<C> has no method 'call$0'
-Language/10_Expressions/15_Method_Invocation/3_Static_Invocation_A04_t08: Fail # TypeError: Object #<Foo> has no method 'call$0'
-Language/10_Expressions/30_Type_Cast_A02_t03: Fail # Expect.fail('CastError expected')
-Language/10_Expressions/30_Type_Cast_A05_t03: Fail # CastError: Casting value of type Number to incompatible type G
-Language/10_Expressions/30_Type_Cast_A05_t05: Fail # CastError: Casting value of type Number to incompatible type G
Language/14_Types/5_Function_Types_A02_t01: Fail # Expect.isTrue(false) fails.
Language/14_Types/4_Interface_Types_A05_t03: Fail # http://dartbug.com/5020
diff --git a/tests/co19/co19-runtime.status b/tests/co19/co19-runtime.status
index 97980a0..51b34ca 100644
--- a/tests/co19/co19-runtime.status
+++ b/tests/co19/co19-runtime.status
@@ -2,48 +2,40 @@
# 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.
+# These tests either wrongly expect a compile-time error or wrongly reject a type error in production mode, co19 issue 282:
[ $compiler == none && $runtime == vm ]
-# These tests need to be updated to the new Date core lib API, co19 issue 256:
-LibTest/core/Date/Date.fromMillisecondsSinceEpoch_A01_t01: Fail
-LibTest/core/Date/Date.fromMillisecondsSinceEpoch_A01_t02: Fail
-LibTest/core/Date/Date_A01_t04: Fail
-LibTest/core/Date/Date_A01_t05: Fail
-LibTest/core/Date/isUtc_A01_t01: Fail
-LibTest/core/Date/millisecondsSinceEpoch_A01_t01: Fail
-LibTest/core/Date/operator_GE_A01_t01: Fail
-LibTest/core/Date/operator_GT_A01_t01: Fail
-LibTest/core/Date/operator_LE_A01_t01: Fail
-LibTest/core/Date/operator_LT_A01_t01: Fail
-LibTest/core/Date/operator_equality_A01_t01: Fail
-LibTest/core/Date/timeZoneName_A01_t01: Fail
-LibTest/core/Date/timeZoneOffset_A01_t01: Fail
-LibTest/core/Date/toLocal_A01_t01: Fail
-LibTest/core/Date/toUtc_A01_t01: Fail
+Language/13_Libraries_and_Scripts/1_Imports_A03_t05: Fail, OK
+Language/13_Libraries_and_Scripts/1_Imports_A03_t08: Fail, OK
+Language/13_Libraries_and_Scripts/1_Imports_A03_t25: Fail, OK
+Language/13_Libraries_and_Scripts/1_Imports_A03_t28: Fail, OK
+Language/13_Libraries_and_Scripts/1_Imports_A03_t45: Fail, OK
+Language/13_Libraries_and_Scripts/1_Imports_A03_t48: Fail, OK
+Language/13_Libraries_and_Scripts/1_Imports_A03_t65: Fail, OK
+Language/13_Libraries_and_Scripts/1_Imports_A03_t68: Fail, OK
+[ $compiler == none && $runtime == vm && $unchecked ]
+Language/13_Libraries_and_Scripts/1_Imports_A03_t02: Fail, OK
+Language/13_Libraries_and_Scripts/1_Imports_A03_t22: Fail, OK
+Language/13_Libraries_and_Scripts/1_Imports_A03_t42: Fail, OK
+Language/13_Libraries_and_Scripts/1_Imports_A03_t62: Fail, OK
+[ $compiler == none && $runtime == vm && $checked ]
+Language/13_Libraries_and_Scripts/1_Imports_A03_t06: Fail, OK
+Language/13_Libraries_and_Scripts/1_Imports_A03_t66: Fail, OK
-LibTest/core/OutOfMemoryException/OutOfMemoryException_A01_t01: Fail # co19 issue 263
-LibTest/core/OutOfMemoryException/toString_A01_t01: Fail # co19 issue 263
-Language/13_Libraries_and_Scripts/2_Imports_A02_t21: Crash # TODO(vm-team): Please triage this crash.
-Language/13_Libraries_and_Scripts/2_Imports_A02_t22: Crash # TODO(vm-team): Please triage this crash.
-LibTest/isolate/isolate_api/port_A01_t01: Skip # Times out.
+[ $compiler == none && $runtime == vm ]
+Language/13_Libraries_and_Scripts/1_Imports_A02_t21: Crash # TODO(vm-team): Please triage this crash.
+Language/13_Libraries_and_Scripts/1_Imports_A02_t22: Crash # TODO(vm-team): Please triage this crash.
-Language/06_Functions/06_Functions_A01_t06: Fail # TODO(vm-team): Please triage this failure.
-Language/06_Functions/1_Function_Declaration_A02_t03: Fail # TODO(vm-team): Please triage this failure.
-Language/06_Functions/1_Function_Declaration_A03_t03: Fail # TODO(vm-team): Please triage this failure.
-Language/06_Functions/2_Formal_Parameters/2_Optional_Formals_A03_t01: Fail # TODO(vm-team): Please triage this failure.
-Language/06_Functions/2_Formal_Parameters/2_Optional_Formals_A03_t02: Fail # TODO(vm-team): Please triage this failure.
-Language/06_Functions/2_Formal_Parameters/2_Optional_Formals_A03_t03: Fail # TODO(vm-team): Please triage this failure.
-Language/06_Functions/4_External_Functions_A01_t01: Fail # TODO(vm-team): Please triage this failure.
-Language/07_Classes/07_Classes_A01_t20: Fail # TODO(vm-team): Please triage this failure.
-Language/07_Classes/07_Classes_A02_t32: Fail # TODO(vm-team): Please triage this failure.
-Language/07_Classes/07_Classes_A02_t34: Fail # TODO(vm-team): Please triage this failure.
-Language/07_Classes/07_Classes_A09_t01: Fail # TODO(vm-team): Please triage this failure.
-Language/07_Classes/07_Classes_A09_t02: Fail # TODO(vm-team): Please triage this failure.
-Language/07_Classes/07_Classes_A09_t04: Fail # TODO(vm-team): Please triage this failure.
-Language/07_Classes/1_Instance_Methods/2_Operators_A01_t03: Fail # TODO(vm-team): Please triage this failure.
+Language/03_Overview/1_Scoping_A02_t05: Fail # TODO(vm-team): Please triage this failure.
+Language/05_Variables/05_Variables_A03_t04: Fail # TODO(vm-team): Please triage this failure.
+Language/05_Variables/05_Variables_A03_t11: Fail # TODO(vm-team): Please triage this failure.
+Language/05_Variables/05_Variables_A03_t13: Fail # TODO(vm-team): Please triage this failure.
+Language/05_Variables/05_Variables_A03_t14: Fail # TODO(vm-team): Please triage this failure.
+Language/05_Variables/05_Variables_A03_t15: Fail # TODO(vm-team): Please triage this failure.
+Language/05_Variables/1_Evaluation_of_Implicit_Variable_Getters_A01_t02: Fail # TODO(vm-team): Please triage this failure.
+Language/05_Variables/1_Evaluation_of_Implicit_Variable_Getters_A01_t05: Fail # TODO(vm-team): Please triage this failure.
Language/07_Classes/2_Getters_A01_t03: Fail # TODO(vm-team): Please triage this failure.
Language/07_Classes/2_Getters_A01_t05: Fail # TODO(vm-team): Please triage this failure.
-Language/07_Classes/3_Setters_A01_t02: Fail # TODO(vm-team): Please triage this failure.
Language/07_Classes/3_Setters_A04_t01: Fail # TODO(vm-team): Please triage this failure.
Language/07_Classes/3_Setters_A04_t02: Fail # TODO(vm-team): Please triage this failure.
Language/07_Classes/3_Setters_A04_t03: Fail # TODO(vm-team): Please triage this failure.
@@ -58,63 +50,38 @@
Language/07_Classes/4_Abstract_Instance_Members_A03_t05: Fail # TODO(vm-team): Please triage this failure.
Language/07_Classes/4_Abstract_Instance_Members_A04_t05: Fail # TODO(vm-team): Please triage this failure.
Language/07_Classes/4_Abstract_Instance_Members_A04_t06: Fail # TODO(vm-team): Please triage this failure.
-Language/07_Classes/4_Abstract_Instance_Members_A06_t02: Fail # TODO(vm-team): Please triage this failure.
-Language/07_Classes/4_Abstract_Instance_Members_A06_t03: Fail # TODO(vm-team): Please triage this failure.
-Language/07_Classes/6_Constructors/2_Factories_A06_t05: Fail # TODO(vm-team): Please triage this failure.
-Language/07_Classes/6_Constructors/2_Factories_A06_t06: Fail # TODO(vm-team): Please triage this failure.
-Language/07_Classes/6_Constructors/2_Factories_A07_t01: Fail # TODO(vm-team): Please triage this failure.
+Language/07_Classes/6_Constructors/2_Factories_A05_t01: Fail # TODO(vm-team): Please triage this failure.
+Language/07_Classes/6_Constructors/2_Factories_A05_t03: Fail # TODO(vm-team): Please triage this failure.
+Language/07_Classes/6_Constructors/2_Factories_A05_t04: Fail # TODO(vm-team): Please triage this failure.
Language/07_Classes/6_Constructors/3_Constant_Constructors_A04_t01: Fail # TODO(vm-team): Please triage this failure.
Language/07_Classes/6_Constructors/3_Constant_Constructors_A04_t02: Fail # TODO(vm-team): Please triage this failure.
Language/07_Classes/6_Constructors/3_Constant_Constructors_A04_t03: Fail # TODO(vm-team): Please triage this failure.
Language/07_Classes/6_Constructors/3_Constant_Constructors_A05_t01: Fail # TODO(vm-team): Please triage this failure.
Language/07_Classes/6_Constructors/3_Constant_Constructors_A05_t02: Fail # TODO(vm-team): Please triage this failure.
-Language/07_Classes/8_Static_Variables/1_Evaluation_of_Static_Variable_Getters_A01_t02: Fail # TODO(vm-team): Please triage this failure.
-Language/07_Classes/8_Static_Variables/1_Evaluation_of_Static_Variable_Getters_A01_t05: Fail # TODO(vm-team): Please triage this failure.
Language/08_Interfaces/5_Superinterfaces_A01_t02: Fail # TODO(vm-team): Please triage this failure.
Language/09_Generics/09_Generics_A05_t01: Fail # TODO(vm-team): Please triage this failure.
Language/09_Generics/09_Generics_A05_t02: Fail # TODO(vm-team): Please triage this failure.
+Language/10_Expressions/01_Constants_A03_t01: Fail # TODO(vm-team): Please triage this failure.
Language/10_Expressions/01_Constants_A05_t01: Fail # TODO(vm-team): Please triage this failure.
Language/10_Expressions/01_Constants_A06_t01: Fail # TODO(vm-team): Please triage this failure.
Language/10_Expressions/01_Constants_A14_t01: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/01_Constants_A19_t02: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/01_Constants_A19_t03: Fail # TODO(vm-team): Please triage this failure.
Language/10_Expressions/05_Strings/1_String_Interpolation_A01_t04: Fail # TODO(vm-team): Please triage this failure.
Language/10_Expressions/05_Strings/1_String_Interpolation_A01_t05: Fail # TODO(vm-team): Please triage this failure.
Language/10_Expressions/05_Strings/1_String_Interpolation_A01_t06: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/05_Strings_A01_t01: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/05_Strings_A02_t39: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/05_Strings_A02_t41: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/05_Strings_A02_t43: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/05_Strings_A02_t45: Fail # TODO(vm-team): Please triage this failure.
Language/10_Expressions/05_Strings_A02_t46: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/05_Strings_A02_t47: Fail # TODO(vm-team): Please triage this failure.
Language/10_Expressions/05_Strings_A02_t48: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/05_Strings_A02_t49: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/05_Strings_A12_t01: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/08_Throw_A03_t02: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/08_Throw_A03_t03: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/08_Throw_A04_t01: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/08_Throw_A05_t02: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/08_Throw_A05_t03: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/09_Function_Expressions_A02_t01: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/09_Function_Expressions_A04_t01: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/09_Function_Expressions_A06_t01: Fail # TODO(vm-team): Please triage this failure.
+Language/10_Expressions/09_Function_Expressions_A03_t02: Fail # TODO(vm-team): Please triage this failure.
+Language/10_Expressions/09_Function_Expressions_A04_t02: Fail # TODO(vm-team): Please triage this failure.
Language/10_Expressions/11_Instance_Creation/1_New_A02_t03: Fail # TODO(vm-team): Please triage this failure.
Language/10_Expressions/11_Instance_Creation/1_New_A02_t05: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/11_Instance_Creation/1_New_A06_t06: Fail # TODO(vm-team): Please triage this failure.
Language/10_Expressions/11_Instance_Creation/1_New_A09_t09: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/11_Instance_Creation/1_New_A12_t01: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/11_Instance_Creation/1_New_A13_t02: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/11_Instance_Creation/1_New_A13_t04: Fail # TODO(vm-team): Please triage this failure.
Language/10_Expressions/11_Instance_Creation/2_Const_A10_t01: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/13_Property_Extraction_A01_t01: Fail # TODO(vm-team): Please triage this failure.
Language/10_Expressions/14_Function_Invocation/3_Unqualified_Invocation_A01_t03: Fail # TODO(vm-team): Please triage this failure.
Language/10_Expressions/14_Function_Invocation/4_Function_Expression_Invocation_A03_t01: Fail # TODO(vm-team): Please triage this failure.
Language/10_Expressions/14_Function_Invocation/4_Function_Expression_Invocation_A05_t02: Fail # TODO(vm-team): Please triage this failure.
Language/10_Expressions/15_Method_Invocation/3_Static_Invocation_A04_t08: Fail # TODO(vm-team): Please triage this failure.
Language/10_Expressions/15_Method_Invocation/4_Super_Invocation_A04_t03: Fail # TODO(vm-team): Please triage this failure.
Language/10_Expressions/15_Method_Invocation/4_Super_Invocation_A04_t04: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/17_Getter_Invocation_A01_t03: Fail # TODO(vm-team): Please triage this failure.
Language/10_Expressions/17_Getter_Invocation_A02_t01: Fail # TODO(vm-team): Please triage this failure.
Language/10_Expressions/17_Getter_Invocation_A02_t02: Fail # TODO(vm-team): Please triage this failure.
Language/10_Expressions/18_Assignment_A05_t02: Fail # TODO(vm-team): Please triage this failure.
@@ -138,143 +105,152 @@
Language/10_Expressions/21_Bitwise_Expressions_A01_t15: Fail # TODO(vm-team): Please triage this failure.
Language/10_Expressions/21_Bitwise_Expressions_A01_t16: Fail # TODO(vm-team): Please triage this failure.
Language/10_Expressions/21_Bitwise_Expressions_A01_t17: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/21_Relational_Expressions_A01_t18: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/21_Relational_Expressions_A01_t19: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/21_Relational_Expressions_A01_t20: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/21_Relational_Expressions_A01_t21: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/21_Relational_Expressions_A01_t22: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/21_Relational_Expressions_A01_t23: Fail # TODO(vm-team): Please triage this failure.
Language/10_Expressions/22_Equality_A01_t23: Fail # TODO(vm-team): Please triage this failure.
Language/10_Expressions/22_Equality_A01_t24: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/22_Shift_A01_t09: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/22_Shift_A01_t10: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/22_Shift_A01_t11: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/22_Shift_A01_t12: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/22_Shift_A01_t13: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/22_Shift_A01_t14: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/23_Additive_Expressions_A01_t07: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/23_Additive_Expressions_A01_t08: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/23_Additive_Expressions_A01_t11: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/23_Additive_Expressions_A01_t12: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/23_Additive_Expressions_A01_t13: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/23_Additive_Expressions_A01_t14: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/24_Multiplicative_Expressions_A01_t10: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/24_Multiplicative_Expressions_A01_t11: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/24_Multiplicative_Expressions_A01_t14: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/24_Multiplicative_Expressions_A01_t15: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/24_Multiplicative_Expressions_A01_t16: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/24_Multiplicative_Expressions_A01_t17: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/25_Unary_Expressions_A01_t02: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/25_Unary_Expressions_A01_t04: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/25_Unary_Expressions_A01_t05: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/25_Unary_Expressions_A01_t11: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/25_Unary_Expressions_A01_t12: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/25_Unary_Expressions_A01_t13: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/25_Unary_Expressions_A01_t17: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/25_Unary_Expressions_A01_t18: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/25_Unary_Expressions_A01_t19: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/25_Unary_Expressions_A01_t20: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/25_Unary_Expressions_A01_t21: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/25_Unary_Expressions_A01_t22: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/26_Postfix_Expressions_A01_t02: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/26_Postfix_Expressions_A01_t03: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/26_Postfix_Expressions_A01_t05: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/27_Assignable_Expressions_A01_t06: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/27_Assignable_Expressions_A01_t08: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/27_Assignable_Expressions_A01_t09: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/28_Identifier_Reference_A06_t13: Fail, OK # co19 issue 257
-Language/10_Expressions/28_Identifier_Reference_A04_t01: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/28_Identifier_Reference_A04_t03: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/28_Identifier_Reference_A04_t06: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/28_Identifier_Reference_A07_t04: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/29_Type_Test_A01_t02: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/29_Type_Test_A01_t04: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/29_Type_Test_A05_t01: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/29_Type_Test_A05_t02: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/29_Type_Test_A05_t03: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/30_Type_Cast_A01_t02: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/30_Type_Cast_A04_t01: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/30_Type_Cast_A04_t02: Fail # TODO(vm-team): Please triage this failure.
-Language/11_Statements/02_Expression_Statements_A01_t09: Fail # TODO(vm-team): Please triage this failure.
-Language/11_Statements/02_Expression_Statements_A01_t10: Fail # TODO(vm-team): Please triage this failure.
-Language/11_Statements/02_Expression_Statements_A01_t11: Fail # TODO(vm-team): Please triage this failure.
-Language/11_Statements/03_Variable_Declaration_A01_t10: Fail # co19 issue 234
-Language/11_Statements/03_Variable_Declaration_A02_t04: Fail # co19 issue 234
-Language/11_Statements/05_For/2_For_in_A01_t02: Fail # Issue 5629
-Language/11_Statements/05_For/2_For_in_A01_t04: Fail # Issue 5629
-Language/11_Statements/07_Do_A02_t02: Fail # TODO(vm-team): Please triage this failure.
-Language/11_Statements/08_Switch_A05_t01: Fail # TODO(vm-team): Please triage this failure.
-Language/11_Statements/08_Switch_A05_t02: Fail # TODO(vm-team): Please triage this failure.
-Language/11_Statements/08_Switch_A06_t01: Fail # TODO(vm-team): Please triage this failure.
-Language/11_Statements/08_Switch_A06_t02: Fail # TODO(vm-team): Please triage this failure.
-Language/11_Statements/08_Switch_A06_t03: Fail # TODO(vm-team): Please triage this failure.
-Language/11_Statements/08_Switch_A06_t04: Fail # TODO(vm-team): Please triage this failure.
-Language/11_Statements/08_Switch_A07_t02: Fail # TODO(vm-team): Please triage this failure.
-Language/11_Statements/09_Try_A01_t18: Fail # TODO(vm-team): Please triage this failure.
-Language/11_Statements/09_Try_A06_t01: Fail # TODO(vm-team): Please triage this failure.
-Language/11_Statements/09_Try_A06_t02: Fail # TODO(vm-team): Please triage this failure.
-Language/11_Statements/09_Try_A06_t03: Fail # TODO(vm-team): Please triage this failure.
-Language/11_Statements/09_Try_A06_t04: Fail # TODO(vm-team): Please triage this failure.
-Language/11_Statements/09_Try_A06_t05: Fail # TODO(vm-team): Please triage this failure.
+Language/10_Expressions/23_Relational_Expressions_A01_t18: Fail # TODO(vm-team): Please triage this failure.
+Language/10_Expressions/23_Relational_Expressions_A01_t19: Fail # TODO(vm-team): Please triage this failure.
+Language/10_Expressions/23_Relational_Expressions_A01_t20: Fail # TODO(vm-team): Please triage this failure.
+Language/10_Expressions/23_Relational_Expressions_A01_t21: Fail # TODO(vm-team): Please triage this failure.
+Language/10_Expressions/23_Relational_Expressions_A01_t22: Fail # TODO(vm-team): Please triage this failure.
+Language/10_Expressions/23_Relational_Expressions_A01_t23: Fail # TODO(vm-team): Please triage this failure.
+Language/10_Expressions/24_Shift_A01_t09: Fail # TODO(vm-team): Please triage this failure.
+Language/10_Expressions/24_Shift_A01_t10: Fail # TODO(vm-team): Please triage this failure.
+Language/10_Expressions/24_Shift_A01_t11: Fail # TODO(vm-team): Please triage this failure.
+Language/10_Expressions/24_Shift_A01_t12: Fail # TODO(vm-team): Please triage this failure.
+Language/10_Expressions/24_Shift_A01_t13: Fail # TODO(vm-team): Please triage this failure.
+Language/10_Expressions/24_Shift_A01_t14: Fail # TODO(vm-team): Please triage this failure.
+Language/10_Expressions/25_Additive_Expressions_A01_t07: Fail # TODO(vm-team): Please triage this failure.
+Language/10_Expressions/25_Additive_Expressions_A01_t08: Fail # TODO(vm-team): Please triage this failure.
+Language/10_Expressions/25_Additive_Expressions_A01_t11: Fail # TODO(vm-team): Please triage this failure.
+Language/10_Expressions/25_Additive_Expressions_A01_t12: Fail # TODO(vm-team): Please triage this failure.
+Language/10_Expressions/25_Additive_Expressions_A01_t13: Fail # TODO(vm-team): Please triage this failure.
+Language/10_Expressions/25_Additive_Expressions_A01_t14: Fail # TODO(vm-team): Please triage this failure.
+Language/10_Expressions/26_Multiplicative_Expressions_A01_t10: Fail # TODO(vm-team): Please triage this failure.
+Language/10_Expressions/26_Multiplicative_Expressions_A01_t11: Fail # TODO(vm-team): Please triage this failure.
+Language/10_Expressions/26_Multiplicative_Expressions_A01_t14: Fail # TODO(vm-team): Please triage this failure.
+Language/10_Expressions/26_Multiplicative_Expressions_A01_t15: Fail # TODO(vm-team): Please triage this failure.
+Language/10_Expressions/26_Multiplicative_Expressions_A01_t16: Fail # TODO(vm-team): Please triage this failure.
+Language/10_Expressions/26_Multiplicative_Expressions_A01_t17: Fail # TODO(vm-team): Please triage this failure.
+Language/10_Expressions/27_Unary_Expressions_A01_t02: Fail # TODO(vm-team): Please triage this failure.
+Language/10_Expressions/27_Unary_Expressions_A01_t04: Fail # TODO(vm-team): Please triage this failure.
+Language/10_Expressions/27_Unary_Expressions_A01_t05: Fail # TODO(vm-team): Please triage this failure.
+Language/10_Expressions/27_Unary_Expressions_A01_t11: Fail # TODO(vm-team): Please triage this failure.
+Language/10_Expressions/27_Unary_Expressions_A01_t12: Fail # TODO(vm-team): Please triage this failure.
+Language/10_Expressions/27_Unary_Expressions_A01_t13: Fail # TODO(vm-team): Please triage this failure.
+Language/10_Expressions/27_Unary_Expressions_A01_t17: Fail # TODO(vm-team): Please triage this failure.
+Language/10_Expressions/27_Unary_Expressions_A01_t18: Fail # TODO(vm-team): Please triage this failure.
+Language/10_Expressions/27_Unary_Expressions_A01_t19: Fail # TODO(vm-team): Please triage this failure.
+Language/10_Expressions/27_Unary_Expressions_A01_t20: Fail # TODO(vm-team): Please triage this failure.
+Language/10_Expressions/27_Unary_Expressions_A01_t21: Fail # TODO(vm-team): Please triage this failure.
+Language/10_Expressions/27_Unary_Expressions_A01_t22: Fail # TODO(vm-team): Please triage this failure.
+Language/10_Expressions/28_Postfix_Expressions_A01_t02: Fail # TODO(vm-team): Please triage this failure.
+Language/10_Expressions/28_Postfix_Expressions_A01_t03: Fail # TODO(vm-team): Please triage this failure.
+Language/10_Expressions/28_Postfix_Expressions_A01_t05: Fail # TODO(vm-team): Please triage this failure.
+Language/10_Expressions/29_Assignable_Expressions_A01_t06: Fail # TODO(vm-team): Please triage this failure.
+Language/10_Expressions/29_Assignable_Expressions_A01_t08: Fail # TODO(vm-team): Please triage this failure.
+Language/10_Expressions/29_Assignable_Expressions_A01_t09: Fail # TODO(vm-team): Please triage this failure.
+Language/10_Expressions/30_Identifier_Reference_A04_t09: Fail # TODO(vm-team): Please triage this failure.
+Language/10_Expressions/30_Identifier_Reference_A05_t02: Fail # TODO(vm-team): Please triage this failure.
+Language/10_Expressions/30_Identifier_Reference_A05_t08: Fail # TODO(vm-team): Please triage this failure.
+Language/10_Expressions/30_Identifier_Reference_A06_t01: Fail # TODO(vm-team): Please triage this failure.
+Language/10_Expressions/30_Identifier_Reference_A06_t02: Fail # TODO(vm-team): Please triage this failure.
+Language/10_Expressions/30_Identifier_Reference_A07_t01: Fail # TODO(vm-team): Please triage this failure.
+Language/10_Expressions/30_Identifier_Reference_A08_t02: Fail # TODO(vm-team): Please triage this failure.
+Language/10_Expressions/31_Type_Test_A01_t02: Fail # TODO(vm-team): Please triage this failure.
+Language/10_Expressions/31_Type_Test_A01_t04: Fail # TODO(vm-team): Please triage this failure.
+Language/10_Expressions/31_Type_Test_A05_t01: Fail # TODO(vm-team): Please triage this failure.
+Language/10_Expressions/31_Type_Test_A05_t02: Fail # TODO(vm-team): Please triage this failure.
+Language/10_Expressions/31_Type_Test_A05_t03: Fail # TODO(vm-team): Please triage this failure.
+Language/10_Expressions/32_Type_Cast_A04_t01: Fail # TODO(vm-team): Please triage this failure.
+Language/10_Expressions/32_Type_Cast_A04_t02: Fail # TODO(vm-team): Please triage this failure.
+Language/11_Statements/04_Local_Function_Declaration_A02_t02: Fail # TODO(vm-team): Please triage this failure.
+Language/11_Statements/06_For_A01_t11: Fail # TODO(vm-team): Please triage this failure.
+Language/11_Statements/09_Switch_A01_t02: Fail # TODO(vm-team): Please triage this failure.
+Language/11_Statements/09_Switch_A02_t01: Fail # TODO(vm-team): Please triage this failure.
+Language/11_Statements/09_Switch_A02_t02: Fail # TODO(vm-team): Please triage this failure.
+Language/11_Statements/09_Switch_A02_t03: Fail # TODO(vm-team): Please triage this failure.
+Language/11_Statements/09_Switch_A03_t01: Fail # TODO(vm-team): Please triage this failure.
+Language/11_Statements/09_Switch_A03_t02: Fail # TODO(vm-team): Please triage this failure.
+Language/11_Statements/09_Switch_A06_t02: Fail # TODO(vm-team): Please triage this failure.
+Language/11_Statements/10_Try_A11_t01: Fail # TODO(vm-team): Please triage this failure.
+Language/11_Statements/12_Labels_A01_t03: Fail # TODO(vm-team): Please triage this failure.
Language/13_Libraries_and_Scripts/13_Libraries_and_Scripts_A03_t01: Fail # TODO(vm-team): Please triage this failure.
Language/13_Libraries_and_Scripts/13_Libraries_and_Scripts_A05_t04: Fail # TODO(vm-team): Please triage this failure.
-Language/13_Libraries_and_Scripts/2_Imports_A02_t01: Fail # TODO(vm-team): Please triage this failure.
-Language/13_Libraries_and_Scripts/2_Imports_A02_t02: Fail # TODO(vm-team): Please triage this failure.
-Language/13_Libraries_and_Scripts/2_Imports_A02_t16: Fail # TODO(vm-team): Please triage this failure.
-Language/13_Libraries_and_Scripts/2_Imports_A02_t17: Fail # TODO(vm-team): Please triage this failure.
-Language/13_Libraries_and_Scripts/2_Imports_A02_t18: Fail # TODO(vm-team): Please triage this failure.
-Language/13_Libraries_and_Scripts/2_Imports_A02_t19: Fail # TODO(vm-team): Please triage this failure.
-Language/13_Libraries_and_Scripts/2_Imports_A02_t21: Fail # TODO(vm-team): Please triage this failure.
-Language/13_Libraries_and_Scripts/2_Imports_A02_t22: Fail # TODO(vm-team): Please triage this failure.
-Language/13_Libraries_and_Scripts/2_Imports_A03_t02: Fail # TODO(vm-team): Please triage this failure.
-Language/13_Libraries_and_Scripts/2_Imports_A03_t12: Fail # TODO(vm-team): Please triage this failure.
-Language/13_Libraries_and_Scripts/2_Imports_A03_t22: Fail # TODO(vm-team): Please triage this failure.
-Language/14_Types/2_Dynamic_Type_System_A02_t01: Fail # TODO(vm-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A01_t53: Fail # TODO(vm-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A01_t54: Fail # TODO(vm-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A02_t01: Fail # TODO(vm-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A02_t02: Fail # TODO(vm-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A02_t16: Fail # TODO(vm-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A02_t17: Fail # TODO(vm-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A02_t18: Fail # TODO(vm-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A02_t19: Fail # TODO(vm-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/2_Exports_A01_t04: Fail # TODO(vm-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/2_Exports_A01_t05: Fail # TODO(vm-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/2_Exports_A01_t07: Fail # TODO(vm-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/2_Exports_A01_t15: Fail # TODO(vm-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/2_Exports_A01_t16: Fail # TODO(vm-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/2_Exports_A04_t01: Fail # TODO(vm-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/2_Exports_A04_t02: Fail # TODO(vm-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/2_Exports_A04_t03: Fail # TODO(vm-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/2_Exports_A04_t04: Fail # TODO(vm-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/2_Exports_A04_t05: Fail # TODO(vm-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/2_Exports_A04_t06: Fail # TODO(vm-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/3_Parts_A03_t03: Fail # TODO(vm-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/4_Scripts_A01_t16: Fail # TODO(vm-team): Please triage this failure.
Language/14_Types/5_Function_Types_A02_t01: Fail # TODO(vm-team): Please triage this failure.
-Language/15_Reference/1_Lexical_Rules_A01_t06: Fail # TODO(vm-team): Please triage this failure.
-LibTest/core/RegExp/hasMatch_A01_t02: Fail # TODO(vm-team): Please triage this failure.
-LibTest/core/double/INFINITY_A01_t02: Fail # TODO(vm-team): Please triage this failure.
-LibTest/core/double/NEGATIVE_INFINITY_A01_t02: Fail # TODO(vm-team): Please triage this failure.
-LibTest/isolate/SendPort/send_A02_t01: Fail # TODO(vm-team): Please triage this failure.
-LibTest/isolate/SendPort/send_A02_t02: Fail # TODO(vm-team): Please triage this failure.
-LibTest/isolate/SendPort/send_A02_t03: Fail # TODO(vm-team): Please triage this failure.
-LibTest/isolate/SendPort/send_A02_t04: Fail # TODO(vm-team): Please triage this failure.
-LibTest/isolate/isolate_api/spawnUri_A01_t01: Fail # TODO(vm-team): Please triage this failure.
-LibTest/isolate/isolate_api/spawnUri_A01_t02: Fail # TODO(vm-team): Please triage this failure.
+LibTest/core/Queue/Queue.from_A01_t02: Fail # TODO(vm-team): Please triage this failure.
+LibTest/core/Set/Set.from_A01_t02: Fail # TODO(vm-team): Please triage this failure.
LibTest/isolate/isolate_api/spawnUri_A01_t03: Fail # TODO(vm-team): Please triage this failure.
LibTest/isolate/isolate_api/spawnUri_A01_t04: Fail # TODO(vm-team): Please triage this failure.
+LibTest/math/Random/nextDouble_A01_t01: Fail # TODO(vm-team): Please triage this failure.
+LibTest/math/parseDouble_A02_t01: Fail # TODO(vm-team): Please triage this failure.
+LibTest/math/pow_A01_t01: Fail # TODO(vm-team): Please triage this failure.
+LibTest/math/pow_A11_t01: Fail # TODO(vm-team): Please triage this failure.
+LibTest/math/pow_A13_t01: Fail # TODO(vm-team): Please triage this failure.
+LibTest/math/sin_A01_t01: Fail # TODO(vm-team): Please triage this failure.
-# Failures related to assert being a reserved word now. co19 issue 218.
-Language/10_Expressions/28_Identifier_Reference_A04_t07: Fail, OK
+LibTest/isolate/isolate_api/port_A01_t01: Skip # Times out.
-# negate is no longer a built-in identifier, co19 issue 260
-Language/10_Expressions/28_Identifier_Reference_A07_t09: Fail, OK # co19 issue 260
+Language/06_Functions/1_Function_Declaration_A02_t03: Fail # issue 6058
+Language/06_Functions/1_Function_Declaration_A03_t03: Fail # issue 6058
+Language/06_Functions/2_Formal_Parameters/2_Optional_Formals_A03_t01: Fail # issue 6085
+Language/06_Functions/2_Formal_Parameters/2_Optional_Formals_A03_t02: Fail # issue 6085
+Language/06_Functions/2_Formal_Parameters/2_Optional_Formals_A03_t03: Fail # issue 6085
+
+LibTest/core/Map/putIfAbsent_A01_t08: Fail, OK # co19 issue 276
+LibTest/core/Map/putIfAbsent_A01_t06: Fail, OK # co19 issue 276
+
+LibTest/core/EmptyQueueException/EmptyQueueException_A01_t01: Fail, OK # co19 issue 288
+LibTest/core/EmptyQueueException/toString_A01_t01: Fail, OK # co19 issue 288
+LibTest/core/List/iterator_next_A02_t01: Fail, OK # co19 issue 288
+LibTest/core/NoMoreElementsException/NoMoreElementsException_A01_t01: Fail, OK # co19 issue 288
+LibTest/core/NoMoreElementsException/toString_A01_t01: Fail, OK # co19 issue 288
+LibTest/core/Queue/iterator_next_A02_t01: Fail, OK # co19 issue 288
+LibTest/core/Queue/removeFirst_A02_t01: Fail, OK # co19 issue 288
+LibTest/core/Queue/removeLast_A02_t01: Fail, OK # co19 issue 288
+
[ $compiler == none && $runtime == vm && $checked ]
-Language/07_Classes/07_Classes_A03_t01: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/09_Function_Expressions_A03_t02: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/09_Function_Expressions_A04_t02: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/11_Instance_Creation/1_New_A13_t01: Fail # TODO(vm-team): Please triage this failure.
-Language/13_Libraries_and_Scripts/2_Imports_A03_t01: Fail # TODO(vm-team): Please triage this failure.
+Language/07_Classes/6_Constructors/2_Factories_A03_t05: Fail # TODO(vm-team): Please triage this failure.
+Language/11_Statements/05_If_A02_t01: Fail # TODO(vm-team): Please triage this failure.
+Language/11_Statements/09_Switch_A05_t01: Fail # TODO(vm-team): Please triage this failure.
+Language/11_Statements/15_Assert_A04_t04: Fail # TODO(vm-team): Please triage this failure.
Language/14_Types/7_Type_Void_A04_t02: Fail # TODO(vm-team): Please triage this failure.
Language/14_Types/7_Type_Void_A04_t03: Fail # TODO(vm-team): Please triage this failure.
Language/14_Types/7_Type_Void_A04_t04: Fail # TODO(vm-team): Please triage this failure.
Language/14_Types/7_Type_Void_A04_t05: Fail # TODO(vm-team): Please triage this failure.
+LibTest/core/Map/putIfAbsent_A01_t07: Fail # TODO(vm-team): Please triage this failure.
+
+Language/14_Types/7_Type_Void_A04_t02: Fail, OK # co19 issue 158
+Language/14_Types/7_Type_Void_A04_t03: Fail, OK # co19 issue 158
+Language/14_Types/7_Type_Void_A04_t04: Fail, OK # co19 issue 158
+Language/14_Types/7_Type_Void_A04_t05: Fail, OK # co19 issue 158
Language/10_Expressions/11_Instance_Creation_A05_t02: Fail # co19 issue 234
-Language/13_Libraries_and_Scripts/2_Imports_A03_t11: Fail # Issue 5736
-Language/13_Libraries_and_Scripts/2_Imports_A03_t21: Fail # Issue 5736
-
[ $compiler == none && $runtime == vm && $unchecked ]
-Language/10_Expressions/11_Instance_Creation/1_New_A07_t01: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/11_Instance_Creation/1_New_A11_t01: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/11_Instance_Creation/1_New_A12_t02: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/20_Logical_Boolean_Expressions_A01_t01: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/30_Type_Cast_A05_t02: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/30_Type_Cast_A05_t03: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/30_Type_Cast_A05_t04: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/30_Type_Cast_A05_t05: Fail # TODO(vm-team): Please triage this failure.
+Language/14_Types/2_Dynamic_Type_System_A02_t01: Fail # TODO(vm-team): Please triage this failure.
+LibTest/core/Date/Date.fromMillisecondsSinceEpoch_A03_t01: Fail # TODO(vm-team): Please triage this failure.
[ $compiler == none && $runtime == vm ]
@@ -283,23 +259,6 @@
Language/10_Expressions/01_Constants_A16_t02: Fail
Language/07_Classes/6_Constructors/3_Constant_Constructors_A05_t03: Fail # issue 392, potentially constant expression analysis
-Language/10_Expressions/01_Constants_A16_t03: Fail # issue 392
-
-# These tests fail after the deprecation of the corelib
-# Math object in favor of the dart:math library.
-# issue co19 - ???
-Language/05_Variables/05_Variables_A03_t03: Fail # Missing compile-time error on assignment to final variable
-Language/05_Variables/05_Variables_A03_t07: Fail # Missing compile-time error on assignment to final variable
-Language/05_Variables/05_Variables_A03_t10: Fail # Missing compile-time error on assignment to final variable
-LibTest/core/Math/random_A01_t01: Fail, OK
-LibTest/core/Math/log_A01_t01: Fail, OK
-LibTest/core/Math/atan2_A01_t01: Fail, OK
-LibTest/core/Math/sqrt_A01_t01: Fail, OK
-
-# Rename "BadNumberFormatException" to "FormatException"
-# TODO(rnystrom): These can be enabled when
-# http://code.google.com/p/co19/issues/detail?id=167 is fixed.
-LibTest/core/Math/parseDouble_A02_t01: Fail
Language/10_Expressions/01_Constants_A17_t03: Crash # issue 1681 (recursion in compile-time constant expression)
Language/10_Expressions/01_Constants_A16_t02: Crash, Pass # Should result in OOM
@@ -328,19 +287,10 @@
Language/10_Expressions/07_Maps_A01_t01: Skip # co19 issue 91: map literals illegal at statement beginning.
Language/10_Expressions/14_Function_Invocation/4_Function_Expression_Invocation_A05_t01: Fail # issue 1604.
-Language/10_Expressions/21_Bitwise_Expressions_A01_t01: Fail # issue 1286 (function literals vs. function statements)
-Language/10_Expressions/22_Equality_A01_t01: Fail # issue 2033 (super call of !=, === etc)
-Language/10_Expressions/21_Relational_Expressions_A01_t01: Fail # issue 1286 (function literals vs. function statements)
-Language/10_Expressions/22_Shift_A01_t01: Fail # issue 1286 (function literals vs. function statements)
-Language/10_Expressions/25_Unary_Expressions_A01_t01: Fail # issue 1288 (unary super operator call)
-Language/10_Expressions/25_Unary_Expressions_A01_t10: Fail # issue 2037 (super.x is assignable)
-Language/10_Expressions/25_Unary_Expressions_A06_t01: Fail # issue 1288 (unary super operator call)
-Language/10_Expressions/25_Unary_Expressions_A08_t01: Fail # issue 1288 (unary super operator call)
-Language/10_Expressions/26_Postfix_Expressions_A01_t01: Fail # co19 issue 91: map literals illegal at statement beginning.
-Language/10_Expressions/27_Assignable_Expressions_A01_t26: Fail # issue 1286 (function literals vs. function statements)
-Language/10_Expressions/27_Assignable_Expressions_A01_t27: Fail # co19 issue 91: map literals illegal at statement beginning.
-Language/11_Statements/09_Try_A05_t06: Fail # issue 430
-LibTest/core/Math/parseDouble_A02_t01: Fail # issue 1929
+Language/10_Expressions/27_Unary_Expressions_A01_t01: Fail # issue 1288 (unary super operator call)
+Language/10_Expressions/27_Unary_Expressions_A01_t10: Fail # issue 2037 (super.x is assignable)
+Language/10_Expressions/27_Unary_Expressions_A08_t01: Fail # issue 1288 (unary super operator call)
+Language/10_Expressions/28_Postfix_Expressions_A01_t01: Fail # co19 issue 91: map literals illegal at statement beginning.
LibTest/core/List/every_A03_t01: Skip # Promise removed (co19 issue #79)
LibTest/core/List/filter_A03_t01: Skip # Promise removed (co19 issue #79)
@@ -360,11 +310,6 @@
LibTest/core/Date/Date.fromString_A03_t01: Fail # Issue co19 - 121
LibTest/core/Expect/throws_A02_t01: Fail # Issue co19 - 42
LibTest/core/Match/operator_subscript_A01_t01: Fail
-LibTest/core/Math/pow_A01_t01: Fail # Issue co19 - 44
-LibTest/core/Math/pow_A11_t01: Fail # Issue 449
-LibTest/core/Math/pow_A13_t01: Fail # Issue 449
-LibTest/core/Math/max_A01_t03: Fail # Issue co19 - 157
-LibTest/core/Math/min_A01_t03: Fail # Issue co19 - 157
LibTest/core/RegExp/Pattern_semantics/firstMatch_NonEmptyClassRanges_A01_t05: Fail
LibTest/core/RegExp/Pattern_semantics/firstMatch_NonEmptyClassRanges_A01_t06: Fail
LibTest/core/RegExp/firstMatch_A01_t01: Fail
@@ -372,32 +317,33 @@
LibTest/core/int/toRadixString_A01_t01: Fail # Issue 461
[ $compiler == none && $runtime == vm ]
-LibTest/core/Math/acos_A01_t01: Fail, OK # Issue co19 - 44
-LibTest/core/Math/asin_A01_t01: Fail, OK # Issue co19 - 44
-LibTest/core/Math/atan_A01_t01: Fail, OK # Issue co19 - 44
-LibTest/core/Math/cos_A01_t01: Fail, OK # Issue co19 - 44
-LibTest/core/Math/exp_A01_t01: Fail, OK # Issue co19 - 44
-LibTest/core/Math/sin_A01_t01: Fail, OK # Issue co19 - 44
-LibTest/core/Math/tan_A01_t01: Fail, OK # Issue co19 - 44
+LibTest/math/sin_A01_t01: Fail, OK # Issue co19 - 44
+
+
+[ $compiler == none && $runtime == vm && $system == macos ]
+LibTest/math/exp_A01_t01: Fail, OK # Issue co19 - 44
+LibTest/math/acos_A01_t01: Fail, OK # Issue co19 - 44
+LibTest/math/asin_A01_t01: Fail, OK # Issue co19 - 44
+LibTest/math/atan_A01_t01: Fail, OK # Issue co19 - 44
+LibTest/math/tan_A01_t01: Fail, OK # Issue co19 - 44
[ $compiler == none && $runtime == vm && $system == linux ]
-LibTest/core/Math/exp_A01_t01: Fail
+LibTest/math/exp_A01_t01: Fail
[ $compiler == none && $runtime == vm && $system == linux && $arch == ia32 ]
-LibTest/core/Math/sin_A01_t01: Fail
-LibTest/core/Math/tan_A01_t01: Fail
+LibTest/math/sin_A01_t01: Fail
+LibTest/math/tan_A01_t01: Fail
[ $compiler == none && $runtime == vm && $arch == x64 && $mode == debug ]
LibTest/core/Map/Map_class_A01_t04: Skip # Timeout
-LibTest/core/Queue/iterator_hasNext_A01_t01: Skip # Timeout
[ $compiler == none && $runtime == vm && $system == windows ]
-LibTest/core/Math/atan2_A01_t03: Fail # http://dartbug.com/5407
+LibTest/math/atan2_A01_t03: Fail # http://dartbug.com/5407
LibTest/core/double/operator_remainder_A01_t04: Fail # http://dartbug.com/5407
LibTest/core/double/remainder_A01_t04: Fail # http://dartbug.com/5407
LibTest/core/double/round_A01_t01: Fail # http://dartbug.com/5407
-LibTest/core/int/operator_remainder_A01_t02: Fail # http://dartbug.com/5407
-LibTest/core/int/remainder_A01_t02: Fail # http://dartbug.com/5407
+LibTest/core/int/operator_remainder_A01_t02: Fail # TODO(vm-team): Please triage this failure.
+LibTest/core/int/remainder_A01_t02: Fail # TODO(vm-team): Please triage this failure.
[ $compiler == none && $runtime == vm ]
@@ -407,30 +353,84 @@
LibTest/core/Date/toString_A02_t01: Fail, OK
LibTest/core/Date/year_A01_t01: Fail, OK
+LibTest/core/String/charCodes_A01_t01: Fail, OK # co19 issue 289
+
+LibTest/isolate/SendPort/send_A02_t02: Fail, OK # co19 issue 293
+LibTest/isolate/SendPort/send_A02_t03: Fail, OK # co19 issue 293
+LibTest/isolate/SendPort/send_A02_t04: Fail, OK # co19 issue 293
+LibTest/core/LinkedHashMap/LinkedHashMap_class_A01_t01: Fail, OK # co19 issue 293
+LibTest/core/Map/getKeys_A01_t01: Fail, OK # co19 issue 293
+LibTest/core/Map/getKeys_A01_t02: Fail, OK # co19 issue 293
+LibTest/core/Map/getValues_A01_t02: Fail, OK # co19 issue 293
+LibTest/core/Map/getValues_A01_t01: Fail, OK # co19 issue 293
+
+LibTest/core/Stopwatch/Stopwatch_A01_t01: Fail, OK # co19 issue 297
+LibTest/core/Stopwatch/elapsed_A01_t03: Fail, OK # co19 issue 297
+LibTest/core/Stopwatch/elapsed_A01_t01: Fail, OK # co19 issue 297
+LibTest/core/Stopwatch/elapsed_A01_t02: Fail, OK # co19 issue 297
+LibTest/core/Stopwatch/elapsedInUs_A01_t01: Fail, OK # co19 issue 297
+LibTest/core/Stopwatch/elapsedInMs_A01_t01: Fail, OK # co19 issue 297
+LibTest/core/Stopwatch/start_A01_t01: Fail, OK # co19 issue 297
+LibTest/core/Stopwatch/start_A01_t02: Fail, OK # co19 issue 297
+LibTest/core/Stopwatch/start_A01_t03: Fail, OK # co19 issue 297
+LibTest/core/Stopwatch/stop_A01_t01: Fail, OK # co19 issue 297
+LibTest/core/Stopwatch/frequency_A01_t01: Fail, OK # co19 issue 297
+
+
+LibTest/core/Match/end_A01_t01: Fail, OK # co19 issue 294
+LibTest/core/Match/group_A01_t01: Fail, OK # co19 issue 294
+LibTest/core/Match/groupCount_A01_t01: Fail, OK # co19 issue 294
+LibTest/core/Match/operator_subscript_A01_t01: Fail, OK # co19 issue 294
+LibTest/core/Match/start_A01_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/allMatches_A01_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/firstMatch_A01_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Assertion_A03_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Assertion_A04_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Assertion_A05_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Atom_A01_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Atom_A02_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Atom_A03_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Atom_A03_t02: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Atom_A03_t03: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Atom_A04_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Atom_A05_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Atom_A06_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_AtomEscape_A01_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Disjunction_A01_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Quantifier_A01_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Quantifier_A02_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Quantifier_A03_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Quantifier_A04_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Quantifier_A05_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Quantifier_A06_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Term_A01_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Term_A02_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Term_A03_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Term_A04_t01: Fail, OK # co19 issue 294
+
+LibTest/core/Queue/filter_A01_t04: Fail, OK # co19 issue 291
+LibTest/core/Queue/first_A01_t01: Fail, OK # co19 issue 291
+LibTest/core/Queue/removeFirst_A01_t01: Fail, OK # co19 issue 291
+LibTest/core/Queue/first_A02_t01: Fail, OK # co19 issue 291
+LibTest/core/Queue/addFirst_A01_t01: Fail, OK # co19 issue 291
+LibTest/core/Queue/removeLast_A01_t01: Fail, OK # co19 issue 291
+LibTest/core/Queue/add_A01_t01: Fail, OK # co19 issue 291
+LibTest/core/Queue/last_A02_t01: Fail, OK # co19 issue 291
+LibTest/core/Queue/addLast_A01_t01: Fail, OK # co19 issue 291
+LibTest/core/Queue/last_A01_t01: Fail, OK # co19 issue 291
+LibTest/core/List/last_A02_t01: Fail, OK # co19 issue 291
+LibTest/core/List/last_A01_t01: Fail, OK # co19 issue 291
+
+Language/10_Expressions/07_Maps_A07_t03: Fail, OK # co19 issue 287
+Language/10_Expressions/07_Maps_A04_t02: Fail, OK # co19 issue 287
+LibTest/core/Queue/filter_A01_t04: Fail, OK # co19 issue 287
+LibTest/core/Map/getValues_A01_t02: Fail, OK # co19 issue 287
+
[ $compiler == none && $runtime == vm ]
-Language/11_Statements/09_Try_A01_t01: Fail, OK # co19 issue 194
-Language/11_Statements/09_Try_A02_t03: Fail, OK # co19 issue 194
-Language/11_Statements/09_Try_A04_t01: Fail, OK # co19 issue 194
-Language/11_Statements/09_Try_A05_t03: Fail, OK # co19 issue 194
-LibTest/core/Expect/equals_A02_t01: Fail, OK # co19 issue 194
-LibTest/core/List/removeRange_A06_t01: Fail, OK # co19 issue 194
-LibTest/core/Set/addAll_A01_t04: Fail, OK # co19 issue 194
-LibTest/core/Set/containsAll_A01_t03: Fail, OK # co19 issue 194
-LibTest/core/Set/contains_A01_t03: Fail, OK # co19 issue 194
-LibTest/core/Set/removeAll_A01_t03: Fail, OK # co19 issue 194
-LibTest/core/Set/remove_A01_t04: Fail, OK # co19 issue 194
-
LibTest/core/String/contains_A01_t03: Skip # Times out.
-Language/07_Classes/6_Constructors/2_Factories_A05_t02: Fail
LibTest/core/String/contains_A01_t02: Fail
-LibTest/core/String/replaceFirst_A02_t01: Fail # co19 issue 103
-LibTest/core/String/replaceAll_A02_t01: Fail # co19 issue 103
-
-
-Language/03_Overview/2_Privacy_A01_t11: Fail # Related to issue 978
-Language/11_Statements/11_Labels_A01_t03: Fail # Issue 2238
[ $compiler == none && $runtime == vm && $arch == ia32 ]
@@ -451,8 +451,6 @@
Language/10_Expressions/15_Method_Invocation/3_Static_Invocation_A04_t03: Fail # Issue 1604, exception should be NoSuchMethodException instead of ObjectNotClosureException
Language/10_Expressions/15_Method_Invocation/3_Static_Invocation_A05_t01: Fail # Issue 1604, exception should be NoSuchMethodException instead of ObjectNotClosureException
Language/10_Expressions/15_Method_Invocation/3_Static_Invocation_A06_t02: Fail # Issue 1604, exception should be NoSuchMethodException instead of ObjectNotClosureException
-Language/10_Expressions/28_Identifier_Reference_A06_t15: Fail
-Language/11_Statements/08_Switch_A02_t01: Fail
LibTest/core/Future/handleException_A01_t07: Fail
LibTest/core/Future/then_A01_t05: Fail
LibTest/isolate/ReceivePort/receive_A01_t02: Fail
@@ -460,10 +458,6 @@
LibTest/isolate/isolate_api/spawnUri_A01_t04: Crash
-# 'case' or '}' expected
-Language/11_Statements/08_Switch_A01_t01: Fail
-
-
# class '?' overrides function '?' of super class '?' with incompatible parameters
Language/10_Expressions/15_Method_Invocation/1_Ordinary_Invocation_A05_t02: Fail
Language/10_Expressions/15_Method_Invocation/1_Ordinary_Invocation_A05_t03: Fail
@@ -481,44 +475,23 @@
Language/10_Expressions/15_Method_Invocation/4_Super_Invocation_A08_t02: Fail # co19 issue 251 or issue 5732
-# function '?' of class '?' conflicts with getter 'f' of super class '?'
-Language/07_Classes/1_Instance_Methods_A05_t02: Fail
-
-
-# function '?' of class '?' conflicts with setter 'f' of super class '?'
-Language/07_Classes/1_Instance_Methods_A05_t03: Fail
-
-
# initializer must be a compile time constant
-Language/10_Expressions/28_Identifier_Reference_A05_t09: Fail
+Language/10_Expressions/30_Identifier_Reference_A05_t09: Fail
# invalid operator overloading
Language/07_Classes/1_Instance_Methods/2_Operators_A02_t01: Fail
-Language/10_Expressions/15_Method_Invocation/2_Cascaded_Invocation_A01_t01: Fail
-Language/10_Expressions/22_Equality_A02_t03: Fail
-Language/10_Expressions/22_Equality_A03_t01: Fail
-Language/10_Expressions/22_Equality_A03_t02: Fail
-Language/10_Expressions/22_Equality_A03_t03: Fail
# parameter name or type expected
Language/07_Classes/6_Constructors/1_Generative_Constructors_A15_t07: Fail
-# using 'x' in this context is invalid
-Language/11_Statements/05_For_A01_t11: Fail
-
-
-[ $compiler == none && $runtime == vm ]
-LibTest/isolate/isolate_api/spawnFunction_A02_t01: Fail
-
-
[ $compiler == none && $runtime == vm && $checked ]
Language/03_Overview/1_Scoping_A02_t30: Fail
-[ $compiler == none && $runtime == vm && $mode == debug && $unchecked ]
+[ $compiler == none && $runtime == vm && $mode == debug ]
LibTest/isolate/isolate_api/spawnFunction_A02_t01: Crash
[ $compiler == none && $arch == simarm ]
diff --git a/tests/compiler/dart2js/begin_end_token_test.dart b/tests/compiler/dart2js/begin_end_token_test.dart
index 9f2b423..2123982 100644
--- a/tests/compiler/dart2js/begin_end_token_test.dart
+++ b/tests/compiler/dart2js/begin_end_token_test.dart
@@ -144,7 +144,7 @@
testNode(sendSet.receiver, "a", text);
testNode(sendSet.selector, "b", text);
testNode(sendSet.assignmentOperator, "++", text);
- Expect.isTrue(sendSet.arguments.isEmpty());
+ Expect.isTrue(sendSet.arguments.isEmpty);
text = "++a[b]";
// TODO(johnniwinther): SendSet generates the wrong end token in the following
diff --git a/tests/compiler/dart2js/code_motion_test.dart b/tests/compiler/dart2js/code_motion_test.dart
index 444de81..568da95 100644
--- a/tests/compiler/dart2js/code_motion_test.dart
+++ b/tests/compiler/dart2js/code_motion_test.dart
@@ -21,7 +21,7 @@
String generated = compile(TEST_ONE, entry: 'foo');
RegExp regexp = const RegExp('a \\+ b');
Iterator matches = regexp.allMatches(generated).iterator();
- Expect.isTrue(matches.hasNext());
+ Expect.isTrue(matches.hasNext);
matches.next();
- Expect.isFalse(matches.hasNext());
+ Expect.isFalse(matches.hasNext);
}
diff --git a/tests/compiler/dart2js/compiler_helper.dart b/tests/compiler/dart2js/compiler_helper.dart
index 0caec0e..96fcc3e 100644
--- a/tests/compiler/dart2js/compiler_helper.dart
+++ b/tests/compiler/dart2js/compiler_helper.dart
@@ -77,10 +77,10 @@
bool checkNumberOfMatches(Iterator it, int nb) {
for (int i = 0; i < nb; i++) {
- Expect.isTrue(it.hasNext(), "Found less than $nb matches");
+ Expect.isTrue(it.hasNext, "Found less than $nb matches");
it.next();
}
- Expect.isFalse(it.hasNext(), "Found more than $nb matches");
+ Expect.isFalse(it.hasNext, "Found more than $nb matches");
}
void compileAndMatch(String code, String entry, RegExp regexp) {
@@ -95,7 +95,7 @@
'"$generated" has a match in /$regexp/');
}
-int length(Link link) => link.isEmpty() ? 0 : length(link.tail) + 1;
+int length(Link link) => link.isEmpty ? 0 : length(link.tail) + 1;
// Does a compile and then a match where every 'x' is replaced by something
// that matches any variable, and every space is optional.
diff --git a/tests/compiler/dart2js/cpa_inference_test.dart b/tests/compiler/dart2js/cpa_inference_test.dart
index db593b9..81046f2 100644
--- a/tests/compiler/dart2js/cpa_inference_test.dart
+++ b/tests/compiler/dart2js/cpa_inference_test.dart
@@ -45,6 +45,7 @@
BaseType int;
BaseType double;
+ BaseType num;
BaseType bool;
BaseType string;
BaseType list;
@@ -55,6 +56,7 @@
inferrer = compiler.typesTask.concreteTypesInferrer;
int = inferrer.baseTypes.intBaseType;
double = inferrer.baseTypes.doubleBaseType;
+ num = inferrer.baseTypes.numBaseType;
bool = inferrer.baseTypes.boolBaseType;
string = inferrer.baseTypes.stringBaseType;
list = inferrer.baseTypes.listBaseType;
@@ -120,9 +122,26 @@
}
}
+const String CORELIB = r'''
+ print(var obj) {}
+ abstract class num { operator +(x); operator *(x); operator -(x); }
+ abstract class int extends num { }
+ abstract class double extends num { }
+ class bool {}
+ class String {}
+ class Object {}
+ class Function {}
+ abstract class List {}
+ abstract class Map {}
+ class Closure {}
+ class Null {}
+ class Dynamic_ {}
+ bool identical(Object a, Object b) {}''';
+
AnalysisResult analyze(String code) {
Uri uri = new Uri.fromComponents(scheme: 'source');
- MockCompiler compiler = new MockCompiler(enableConcreteTypeInference: true);
+ MockCompiler compiler = new MockCompiler(coreSource: CORELIB,
+ enableConcreteTypeInference: true);
compiler.sourceFiles[uri.toString()] = new SourceFile(uri.toString(), code);
compiler.runCompiler(uri);
return new AnalysisResult(compiler);
@@ -193,8 +212,30 @@
class B { f() => new C(); }
class C { f() => new A(); }
main() {
+ var bar = null;
var foo = new A();
- while(true) {
+ while(bar = 42) {
+ foo = foo.f();
+ }
+ foo; bar;
+ }
+ """;
+ AnalysisResult result = analyze(source);
+ result.checkNodeHasType(
+ 'foo',
+ [result.base('A'), result.base('B'), result.base('C')]);
+ // Check that the condition is evaluated.
+ result.checkNodeHasType('bar', [result.int]);
+}
+
+testFor1() {
+ final String source = r"""
+ class A { f() => new B(); }
+ class B { f() => new C(); }
+ class C { f() => new A(); }
+ main() {
+ var foo = new A();
+ for(;;) {
foo = foo.f();
}
foo;
@@ -206,6 +247,25 @@
[result.base('A'), result.base('B'), result.base('C')]);
}
+testFor2() {
+ final String source = r"""
+ class A { f() => new B(); test() => true; }
+ class B { f() => new A(); test() => true; }
+ main() {
+ var bar = null;
+ var foo = new A();
+ for(var i = new A(); bar = 42; i = i.f()) {
+ foo = i;
+ }
+ foo; bar;
+ }
+ """;
+ AnalysisResult result = analyze(source);
+ result.checkNodeHasType('foo', [result.base('A'), result.base('B')]);
+ // Check that the condition is evaluated.
+ result.checkNodeHasType('bar', [result.int]);
+}
+
testNonRecusiveFunction() {
final String source = r"""
f(x, y) => true ? x : y;
@@ -237,6 +297,39 @@
result.checkNodeHasType('foo', [result.int, result.string]);
}
+testSendToThis1() {
+ final String source = r"""
+ class A {
+ A();
+ f() => g();
+ g() => 42;
+ }
+ main() {
+ var foo = new A().f();
+ foo;
+ }
+ """;
+ AnalysisResult result = analyze(source);
+ result.checkNodeHasType('foo', [result.int]);
+}
+
+testSendToThis2() {
+ final String source = r"""
+ class A {
+ foo() => this;
+ }
+ class B extends A {
+ bar() => foo();
+ }
+ main() {
+ var x = new B().bar();
+ x;
+ }
+ """;
+ AnalysisResult result = analyze(source);
+ result.checkNodeHasType('x', [result.base('B')]);
+}
+
testConstructor() {
final String source = r"""
class A {
@@ -259,7 +352,7 @@
class A {
var x;
A(this.x);
- get y() => x;
+ get y => x;
}
main() {
var a = new A(42);
@@ -374,15 +467,72 @@
result.checkNodeHasType('y', [result.nullType]);
}
+testArithmeticOperators() {
+ String source(op) {
+ return """
+ main() {
+ var a = 1 $op 2;
+ var b = 1 $op 2.0;
+ var c = 1.0 $op 2;
+ var d = 1.0 $op 2.0;
+ var e = (1 $op 2.0) $op 1;
+ var f = 1 $op (1 $op 2.0);
+ var g = (1 $op 2.0) $op 1.0;
+ var h = 1.0 $op (1 $op 2);
+ var i = (1 $op 2) $op 1;
+ var j = 1 $op (1 $op 2);
+ var k = (1.0 $op 2.0) $op 1.0;
+ var l = 1.0 $op (1.0 $op 2.0);
+ a; b; c; d; e; f; g; h; i; j; k; l;
+ }""";
+ }
+ for (String op in ['+', '*', '-']) {
+ AnalysisResult result = analyze(source(op));
+ result.checkNodeHasType('a', [result.int]);
+ result.checkNodeHasType('b', [result.num]);
+ result.checkNodeHasType('c', [result.num]);
+ result.checkNodeHasType('d', [result.double]);
+ result.checkNodeHasType('e', [result.num]);
+ result.checkNodeHasType('f', [result.num]);
+ result.checkNodeHasType('g', [result.num]);
+ result.checkNodeHasType('h', [result.num]);
+ result.checkNodeHasType('i', [result.int]);
+ result.checkNodeHasType('j', [result.int]);
+ result.checkNodeHasType('k', [result.double]);
+ result.checkNodeHasType('l', [result.double]);
+ }
+}
+
+testOperators() {
+ final String source = r"""
+ class A {
+ operator <(x) => 42;
+ operator <<(x) => "a";
+ }
+ main() {
+ var x = new A() < "foo";
+ var y = new A() << "foo";
+ x; y;
+ }
+ """;
+ AnalysisResult result = analyze(source);
+ result.checkNodeHasType('x', [result.int]);
+ result.checkNodeHasType('y', [result.string]);
+}
+
void main() {
testLiterals();
testRedefinition();
testIfThenElse();
testTernaryIf();
testWhile();
+ testFor1();
+ testFor2();
testNonRecusiveFunction();
testRecusiveFunction();
testMutuallyRecusiveFunction();
+ testSendToThis1();
+ testSendToThis2();
testConstructor();
testGetters();
testSetters();
@@ -391,4 +541,6 @@
testMapLiterals();
testReturn();
// testNoReturn(); // right now we infer the empty type instead of null
+ testArithmeticOperators();
+ testOperators();
}
diff --git a/tests/compiler/dart2js/dart2js.status b/tests/compiler/dart2js/dart2js.status
index 3c959f8..b94725f 100644
--- a/tests/compiler/dart2js/dart2js.status
+++ b/tests/compiler/dart2js/dart2js.status
@@ -10,5 +10,5 @@
# Minification of locals temporarily disabled due to issue 5808
minify_many_locals_test: Fail
-[ $runtime == d8 || $runtime == drt || $runtime == dartium || $runtime == ff || $runtime == firefox || $runtime == chrome || $runtime == safari || $runtime == ie9 || $runtime == opera ]
+[ $jscl || $runtime == drt || $runtime == dartium || $runtime == ff || $runtime == firefox || $runtime == chrome || $runtime == safari || $runtime == ie9 || $runtime == opera ]
*: Skip # dart2js uses #import('dart:io'); and it is not self-hosted (yet).
diff --git a/tests/compiler/dart2js/dart_backend_test.dart b/tests/compiler/dart2js/dart_backend_test.dart
index 761f7f9..7e9c960 100644
--- a/tests/compiler/dart2js/dart_backend_test.dart
+++ b/tests/compiler/dart2js/dart_backend_test.dart
@@ -29,6 +29,7 @@
class Math {
static double parseDouble(String s) => 1.0;
}
+print(x) {}
''';
const ioLib = r'''
@@ -41,12 +42,12 @@
const htmlLib = r'''
#library('html');
Window __window;
-Window get window() => __window;
+Window get window => __window;
abstract class Window {
- abstract Navigator get navigator;
+ Navigator get navigator;
}
abstract class Navigator {
- abstract String get userAgent;
+ String get userAgent;
}
''';
@@ -774,8 +775,25 @@
}
''';
var expectedResult = 'import "dart:html" as p;'
- 'class A{static String get userAgent=>p.window.navigator.userAgent;}'
- 'main(){A.userAgent;}';
+ 'class A{static String get p_userAgent=>p.window.navigator.userAgent;}'
+ 'main(){A.p_userAgent;}';
+ testDart2Dart(src,
+ continuation: (String result) { Expect.equals(expectedResult, result); });
+}
+
+testConflictsWithCoreLib() {
+ var src = '''
+import 'dart:core' as fisk;
+
+print(x) { throw 'fisk'; }
+
+main() {
+ fisk.print('corelib');
+ print('local');
+}
+''';
+ var expectedResult = "p_print(x){throw 'fisk';}"
+ "main(){print('corelib');p_print('local');}";
testDart2Dart(src,
continuation: (String result) { Expect.equals(expectedResult, result); });
}
@@ -813,4 +831,5 @@
testTypeVariablesInDifferentLibraries();
testDeclarationTypePlaceholders();
testPlatformLibraryMemberNamesAreFixed();
+ testConflictsWithCoreLib();
}
diff --git a/tests/compiler/dart2js/erroneous_element_test.dart b/tests/compiler/dart2js/erroneous_element_test.dart
new file mode 100644
index 0000000..d616763
--- /dev/null
+++ b/tests/compiler/dart2js/erroneous_element_test.dart
@@ -0,0 +1,13 @@
+// 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 '../../../lib/compiler/implementation/elements/elements.dart';
+import '../../../lib/compiler/implementation/dart2jslib.dart' show MessageKind;
+import 'parser_helper.dart';
+
+void main() {
+ ErroneousElement e = new ErroneousElement(MessageKind.GENERIC, ['error'],
+ buildSourceString('foo'), null);
+ Expect.stringEquals('<foo: error>', '$e');
+}
diff --git a/tests/compiler/dart2js/gvn_test.dart b/tests/compiler/dart2js/gvn_test.dart
index 664ac2b..ec06ea6 100644
--- a/tests/compiler/dart2js/gvn_test.dart
+++ b/tests/compiler/dart2js/gvn_test.dart
@@ -17,7 +17,7 @@
String generated = compile(TEST_ONE, entry: 'foo');
RegExp regexp = const RegExp(r"1 \+ [a-z]+");
Iterator matches = regexp.allMatches(generated).iterator();
- Expect.isTrue(matches.hasNext());
+ Expect.isTrue(matches.hasNext);
matches.next();
- Expect.isFalse(matches.hasNext());
+ Expect.isFalse(matches.hasNext);
}
diff --git a/tests/compiler/dart2js/identity_test.dart b/tests/compiler/dart2js/identity_test.dart
index 40d6a05..348c1bf 100644
--- a/tests/compiler/dart2js/identity_test.dart
+++ b/tests/compiler/dart2js/identity_test.dart
@@ -19,11 +19,11 @@
// Check that no boolify code is generated.
RegExp regexp = const RegExp("=== true");
Iterator matches = regexp.allMatches(generated).iterator();
- Expect.isFalse(matches.hasNext());
+ Expect.isFalse(matches.hasNext);
regexp = const RegExp("===");
matches = regexp.allMatches(generated).iterator();
- Expect.isTrue(matches.hasNext());
+ Expect.isTrue(matches.hasNext);
matches.next();
- Expect.isFalse(matches.hasNext());
+ Expect.isFalse(matches.hasNext);
}
diff --git a/tests/compiler/dart2js/link_test.dart b/tests/compiler/dart2js/link_test.dart
index f108fd8..a74073a 100644
--- a/tests/compiler/dart2js/link_test.dart
+++ b/tests/compiler/dart2js/link_test.dart
@@ -26,7 +26,7 @@
}
test(Link link, List list) {
- Expect.equals(list.isEmpty(), link.isEmpty());
+ Expect.equals(list.isEmpty, link.isEmpty);
int i = 0;
for (var element in link.toList()) {
Expect.equals(list[i++], element);
@@ -38,9 +38,9 @@
}
Expect.equals(list.length, i);
i = 0;
- for (; !link.isEmpty(); link = link.tail) {
+ for (; !link.isEmpty; link = link.tail) {
Expect.equals(list[i++], link.head);
}
Expect.equals(list.length, i);
- Expect.isTrue(link.isEmpty());
+ Expect.isTrue(link.isEmpty);
}
diff --git a/tests/compiler/dart2js/mirrors_test.dart b/tests/compiler/dart2js/mirrors_test.dart
index 5e6d398..409557b 100644
--- a/tests/compiler/dart2js/mirrors_test.dart
+++ b/tests/compiler/dart2js/mirrors_test.dart
@@ -46,7 +46,7 @@
var libraries = mirrors.libraries;
Expect.isNotNull(libraries, "No libraries map returned");
- Expect.isFalse(libraries.isEmpty(), "Empty libraries map returned");
+ Expect.isFalse(libraries.isEmpty, "Empty libraries map returned");
var helperLibrary = libraries["mirrors_helper"];
Expect.isNotNull(helperLibrary, "Library 'mirrors_helper' not found");
@@ -57,7 +57,7 @@
var types = helperLibrary.types;
Expect.isNotNull(types, "No types map returned");
- Expect.isFalse(types.isEmpty(), "Empty types map returned");
+ Expect.isFalse(types.isEmpty, "Empty types map returned");
testFoo(mirrors, helperLibrary, types);
testBar(mirrors, helperLibrary, types);
@@ -113,7 +113,7 @@
var fooInterfaces = fooClass.interfaces;
Expect.isNotNull(fooInterfaces, "Interfaces map is null");
- Expect.isTrue(fooInterfaces.isEmpty(), "Interfaces map is not empty");
+ Expect.isTrue(fooInterfaces.isEmpty, "Interfaces map is not empty");
var fooSubdeclarations = computeSubdeclarations(fooClass);
Expect.equals(1, count(fooSubdeclarations), "Unexpected subtype count");
@@ -127,18 +127,18 @@
"Class has type arguments");
var fooClassTypeVariables = fooClass.typeVariables;
Expect.isNotNull(fooClassTypeVariables, "Type variable list is null");
- Expect.isTrue(fooClassTypeVariables.isEmpty(),
+ Expect.isTrue(fooClassTypeVariables.isEmpty,
"Type variable list is not empty");
Expect.isNull(fooClass.defaultType, "Class has default type");
var fooClassMembers = fooClass.declaredMembers;
Expect.isNotNull(fooClassMembers, "Declared members map is null");
- Expect.isTrue(fooClassMembers.isEmpty(), "Declared members map is unempty");
+ Expect.isTrue(fooClassMembers.isEmpty, "Declared members map is unempty");
var fooClassConstructors = fooClass.constructors;
Expect.isNotNull(fooClassConstructors, "Constructors map is null");
- Expect.isTrue(fooClassConstructors.isEmpty(),
+ Expect.isTrue(fooClassConstructors.isEmpty,
"Constructors map is unempty");
}
@@ -186,7 +186,7 @@
var barInterfaces = barInterface.interfaces;
Expect.isNotNull(barInterfaces, "Interfaces map is null");
- Expect.isTrue(barInterfaces.isEmpty(), "Interfaces map is not empty");
+ Expect.isTrue(barInterfaces.isEmpty, "Interfaces map is not empty");
var barSubdeclarations = computeSubdeclarations(barInterface);
Expect.equals(1, count(barSubdeclarations), "Unexpected subtype count");
@@ -201,7 +201,7 @@
"Interface has type arguments");
var barInterfaceTypeVariables = barInterface.typeVariables;
Expect.isNotNull(barInterfaceTypeVariables, "Type variable list is null");
- Expect.isFalse(barInterfaceTypeVariables.isEmpty(),
+ Expect.isFalse(barInterfaceTypeVariables.isEmpty,
"Type variable list is empty");
Expect.equals(barInterfaceTypeVariables.length, 1,
"Unexpected number of type variables");
@@ -214,12 +214,12 @@
var barInterfaceMembers = barInterface.declaredMembers;
Expect.isNotNull(barInterfaceMembers, "Declared members map is null");
- Expect.isTrue(barInterfaceMembers.isEmpty(),
+ Expect.isTrue(barInterfaceMembers.isEmpty,
"Declared members map is unempty");
var barInterfaceConstructors = barInterface.constructors;
Expect.isNotNull(barInterfaceConstructors, "Constructors map is null");
- Expect.isTrue(barInterfaceConstructors.isEmpty(),
+ Expect.isTrue(barInterfaceConstructors.isEmpty,
"Constructors map is unempty");
}
@@ -276,7 +276,7 @@
var bazInterfaces = bazClass.interfaces;
Expect.isNotNull(bazInterfaces, "Interfaces map is null");
- Expect.isTrue(!bazInterfaces.isEmpty(), "Interfaces map is empty");
+ Expect.isTrue(!bazInterfaces.isEmpty, "Interfaces map is empty");
for (var bazInterface in bazInterfaces) {
Expect.isTrue(containsType(bazClass,
computeSubdeclarations(objectType)),
@@ -544,11 +544,11 @@
Expect.isNull(funcTypedef.superclass, "Non-null superclass on typedef");
Expect.isNotNull(funcTypedef.interfaces,
"Null interfaces map on typedef");
- Expect.isTrue(funcTypedef.interfaces.isEmpty(),
+ Expect.isTrue(funcTypedef.interfaces.isEmpty,
"Non-empty interfaces map on typedef");
Expect.isNotNull(funcTypedef.declaredMembers,
"Declared members map is null on type def");
- Expect.isTrue(funcTypedef.declaredMembers.isEmpty(),
+ Expect.isTrue(funcTypedef.declaredMembers.isEmpty,
"Non-empty declared members map on typedef");
// TODO(johnniwinther): Returned typedef should not be the declaration:
diff --git a/tests/compiler/dart2js/mock_compiler.dart b/tests/compiler/dart2js/mock_compiler.dart
index d2efbe0..0a26a09 100644
--- a/tests/compiler/dart2js/mock_compiler.dart
+++ b/tests/compiler/dart2js/mock_compiler.dart
@@ -56,12 +56,12 @@
const String DEFAULT_CORELIB = r'''
print(var obj) {}
- abstract class int extends num {}
- abstract class double extends num {}
+ abstract class num {}
+ abstract class int extends num { }
+ abstract class double extends num { }
class bool {}
class String {}
class Object {}
- abstract class num {}
class Function {}
interface List default ListImplementation { List([length]);}
class ListImplementation { factory List([length]) => null; }
@@ -97,6 +97,10 @@
mainApp = mockLibrary(this, "");
initializeSpecialClasses();
+ // We need to make sure the Object class is resolved. When registering a
+ // dynamic invocation the ArgumentTypesRegistry eventually iterates over
+ // the interfaces of the Object class which would be 'null' if the class
+ // wasn't resolved.
objectClass.ensureResolved(this);
}
@@ -109,7 +113,7 @@
var script = new Script(uri, new MockFile(source));
var library = new LibraryElement(script);
parseScript(source, library);
- library.setExports(library.localScope.getValues());
+ library.setExports(library.localScope.values);
return library;
}
@@ -138,7 +142,7 @@
print(message);
}
- bool get compilationFailed => !errors.isEmpty();
+ bool get compilationFailed => !errors.isEmpty;
void clearWarnings() {
warnings = [];
@@ -154,19 +158,22 @@
}
TreeElementMapping resolveNodeStatement(Node tree, Element element) {
- ResolverVisitor visitor = new ResolverVisitor(this, element);
- if (visitor.scope is TopScope) {
+ ResolverVisitor visitor =
+ new ResolverVisitor(this, element, new CollectingTreeElements(element));
+ if (visitor.scope is LibraryScope) {
visitor.scope = new MethodScope(visitor.scope, element);
}
visitor.visit(tree);
- visitor.scope = new TopScope(element.getLibrary());
+ visitor.scope = new LibraryScope(element.getLibrary());
return visitor.mapping;
}
resolverVisitor() {
Element mockElement =
new Element(buildSourceString(''), ElementKind.FUNCTION, mainApp);
- ResolverVisitor visitor = new ResolverVisitor(this, mockElement);
+ ResolverVisitor visitor =
+ new ResolverVisitor(this, mockElement,
+ new CollectingTreeElements(mockElement));
visitor.scope = new MethodScope(visitor.scope, mockElement);
return visitor;
}
@@ -202,19 +209,19 @@
var fail = (message) => Expect.fail('$text: $message');
Iterator<MessageKind> expected = expectedWarnings.iterator();
Iterator<WarningMessage> found = foundWarnings.iterator();
- while (expected.hasNext() && found.hasNext()) {
+ while (expected.hasNext && found.hasNext) {
Expect.equals(expected.next(), found.next().message.kind);
}
- if (expected.hasNext()) {
+ if (expected.hasNext) {
do {
print('Expected warning "${expected.next()}" did not occur');
- } while (expected.hasNext());
+ } while (expected.hasNext);
fail('Too few warnings');
}
- if (found.hasNext()) {
+ if (found.hasNext) {
do {
print('Additional warning "${found.next()}"');
- } while (found.hasNext());
+ } while (found.hasNext);
fail('Too many warnings');
}
}
@@ -234,3 +241,19 @@
importLibrary(library, compiler.coreLibrary, compiler);
return library;
}
+
+class CollectingTreeElements extends TreeElementMapping {
+ final Map<Node, Element> map = new LinkedHashMap<Node, Element>();
+
+ CollectingTreeElements(Element currentElement) : super(currentElement);
+
+ operator []=(Node node, Element element) {
+ map[node] = element;
+ }
+
+ operator [](Node node) => map[node];
+
+ void remove(Node node) {
+ map.remove(node);
+ }
+}
diff --git a/tests/compiler/dart2js/parser_helper.dart b/tests/compiler/dart2js/parser_helper.dart
index 99c8733..dca44ba 100644
--- a/tests/compiler/dart2js/parser_helper.dart
+++ b/tests/compiler/dart2js/parser_helper.dart
@@ -40,7 +40,7 @@
assert(endToken.kind == EOF_TOKEN);
Node node = listener.popNode();
Expect.isNotNull(node);
- Expect.isTrue(listener.nodes.isEmpty(), 'Not empty: ${listener.nodes}');
+ Expect.isTrue(listener.nodes.isEmpty, 'Not empty: ${listener.nodes}');
return node;
}
diff --git a/tests/compiler/dart2js/parser_test.dart b/tests/compiler/dart2js/parser_test.dart
index 5cff043..3847f48 100644
--- a/tests/compiler/dart2js/parser_test.dart
+++ b/tests/compiler/dart2js/parser_test.dart
@@ -251,7 +251,7 @@
Expect.stringEquals("a", sendSet.receiver.toString());
Expect.stringEquals("b", sendSet.selector.toString());
Expect.stringEquals("++", sendSet.assignmentOperator.toString());
- Expect.isTrue(sendSet.arguments.isEmpty());
+ Expect.isTrue(sendSet.arguments.isEmpty);
}
void testOperatorParse() {
@@ -260,7 +260,7 @@
Expect.isNotNull(name);
Expect.stringEquals('operator', name.receiver.source.stringValue);
Expect.stringEquals('-', name.selector.source.stringValue);
- Expect.isTrue(function.parameters.isEmpty());
+ Expect.isTrue(function.parameters.isEmpty);
Expect.isNull(function.returnType);
Expect.isNull(function.getOrSet);
}
diff --git a/tests/compiler/dart2js/patch_test.dart b/tests/compiler/dart2js/patch_test.dart
index c7f3c8c..a727f78 100644
--- a/tests/compiler/dart2js/patch_test.dart
+++ b/tests/compiler/dart2js/patch_test.dart
@@ -112,9 +112,9 @@
ensure(compiler, "test", compiler.coreLibrary.find, isPatched: true);
ensure(compiler, "test", compiler.coreLibrary.patch.find, isPatch: true);
- Expect.isTrue(compiler.warnings.isEmpty(),
+ Expect.isTrue(compiler.warnings.isEmpty,
"Unexpected warnings: ${compiler.warnings}");
- Expect.isTrue(compiler.errors.isEmpty(),
+ Expect.isTrue(compiler.errors.isEmpty,
"Unexpected errors: ${compiler.errors}");
}
@@ -141,9 +141,9 @@
ensure(compiler, "toString", container.patch.lookupLocalMember,
isPatch: true);
- Expect.isTrue(compiler.warnings.isEmpty(),
+ Expect.isTrue(compiler.warnings.isEmpty,
"Unexpected warnings: ${compiler.warnings}");
- Expect.isTrue(compiler.errors.isEmpty(),
+ Expect.isTrue(compiler.errors.isEmpty,
"Unexpected errors: ${compiler.errors}");
}
@@ -173,9 +173,9 @@
isGetter: true,
isPatch: true);
- Expect.isTrue(compiler.warnings.isEmpty(),
+ Expect.isTrue(compiler.warnings.isEmpty,
"Unexpected warnings: ${compiler.warnings}");
- Expect.isTrue(compiler.errors.isEmpty(),
+ Expect.isTrue(compiler.errors.isEmpty,
"Unexpected errors: ${compiler.errors}");
}
@@ -199,9 +199,9 @@
ensure(compiler, "regular", container.lookupLocalMember);
ensure(compiler, "regular", container.patch.lookupLocalMember);
- Expect.isTrue(compiler.warnings.isEmpty(),
+ Expect.isTrue(compiler.warnings.isEmpty,
"Unexpected warnings: ${compiler.warnings}");
- Expect.isTrue(compiler.errors.isEmpty(),
+ Expect.isTrue(compiler.errors.isEmpty,
"Unexpected errors: ${compiler.errors}");
}
@@ -225,9 +225,9 @@
ensure(compiler, "ghost", container.lookupLocalMember, isFound: false);
ensure(compiler, "ghost", container.patch.lookupLocalMember);
- Expect.isTrue(compiler.warnings.isEmpty(),
+ Expect.isTrue(compiler.warnings.isEmpty,
"Unexpected warnings: ${compiler.warnings}");
- Expect.isTrue(compiler.errors.isEmpty(),
+ Expect.isTrue(compiler.errors.isEmpty,
"Unexpected errors: ${compiler.errors}");
}
@@ -243,9 +243,9 @@
"_function",
compiler.coreLibrary.patch.find);
- Expect.isTrue(compiler.warnings.isEmpty(),
+ Expect.isTrue(compiler.warnings.isEmpty,
"Unexpected warnings: ${compiler.warnings}");
- Expect.isTrue(compiler.errors.isEmpty(),
+ Expect.isTrue(compiler.errors.isEmpty,
"Unexpected errors: ${compiler.errors}");
}
@@ -283,9 +283,9 @@
compiler.resolver.resolveMethodElement(
ensure(compiler, "method1", container.lookupLocalMember,
isPatched: true));
- Expect.isTrue(compiler.warnings.isEmpty(),
+ Expect.isTrue(compiler.warnings.isEmpty,
"Unexpected warnings: ${compiler.warnings}");
- Expect.isFalse(compiler.errors.isEmpty());
+ Expect.isFalse(compiler.errors.isEmpty);
print('method1:${compiler.errors}');
compiler.warnings.clear();
@@ -293,9 +293,9 @@
compiler.resolver.resolveMethodElement(
ensure(compiler, "method2", container.lookupLocalMember,
isPatched: true));
- Expect.isTrue(compiler.warnings.isEmpty(),
+ Expect.isTrue(compiler.warnings.isEmpty,
"Unexpected warnings: ${compiler.warnings}");
- Expect.isFalse(compiler.errors.isEmpty());
+ Expect.isFalse(compiler.errors.isEmpty);
print('method2:${compiler.errors}');
compiler.warnings.clear();
@@ -303,9 +303,9 @@
compiler.resolver.resolveMethodElement(
ensure(compiler, "method3", container.lookupLocalMember,
isPatched: true));
- Expect.isTrue(compiler.warnings.isEmpty(),
+ Expect.isTrue(compiler.warnings.isEmpty,
"Unexpected warnings: ${compiler.warnings}");
- Expect.isFalse(compiler.errors.isEmpty());
+ Expect.isFalse(compiler.errors.isEmpty);
print('method3:${compiler.errors}');
compiler.warnings.clear();
@@ -313,9 +313,9 @@
compiler.resolver.resolveMethodElement(
ensure(compiler, "method4", container.lookupLocalMember,
isPatched: true));
- Expect.isTrue(compiler.warnings.isEmpty(),
+ Expect.isTrue(compiler.warnings.isEmpty,
"Unexpected warnings: ${compiler.warnings}");
- Expect.isFalse(compiler.errors.isEmpty());
+ Expect.isFalse(compiler.errors.isEmpty);
print('method4:${compiler.errors}');
compiler.warnings.clear();
@@ -323,9 +323,9 @@
compiler.resolver.resolveMethodElement(
ensure(compiler, "method5", container.lookupLocalMember,
isPatched: true));
- Expect.isTrue(compiler.warnings.isEmpty(),
+ Expect.isTrue(compiler.warnings.isEmpty,
"Unexpected warnings: ${compiler.warnings}");
- Expect.isFalse(compiler.errors.isEmpty());
+ Expect.isFalse(compiler.errors.isEmpty);
print('method5:${compiler.errors}');
compiler.warnings.clear();
@@ -333,9 +333,9 @@
compiler.resolver.resolveMethodElement(
ensure(compiler, "method6", container.lookupLocalMember,
isPatched: true));
- Expect.isTrue(compiler.warnings.isEmpty(),
+ Expect.isTrue(compiler.warnings.isEmpty,
"Unexpected warnings: ${compiler.warnings}");
- Expect.isFalse(compiler.errors.isEmpty());
+ Expect.isFalse(compiler.errors.isEmpty);
print('method6:${compiler.errors}');
compiler.warnings.clear();
@@ -343,9 +343,9 @@
compiler.resolver.resolveMethodElement(
ensure(compiler, "method7", container.lookupLocalMember,
isPatched: true));
- Expect.isTrue(compiler.warnings.isEmpty(),
+ Expect.isTrue(compiler.warnings.isEmpty,
"Unexpected warnings: ${compiler.warnings}");
- Expect.isFalse(compiler.errors.isEmpty());
+ Expect.isFalse(compiler.errors.isEmpty);
print('method7:${compiler.errors}');
compiler.warnings.clear();
@@ -353,9 +353,9 @@
compiler.resolver.resolveMethodElement(
ensure(compiler, "method8", container.lookupLocalMember,
isPatched: true));
- Expect.isTrue(compiler.warnings.isEmpty(),
+ Expect.isTrue(compiler.warnings.isEmpty,
"Unexpected warnings: ${compiler.warnings}");
- Expect.isFalse(compiler.errors.isEmpty());
+ Expect.isFalse(compiler.errors.isEmpty);
print('method8:${compiler.errors}');
}
diff --git a/tests/compiler/dart2js/pretty_parameter_test.dart b/tests/compiler/dart2js/pretty_parameter_test.dart
index 7d44d3e..ed4caee 100644
--- a/tests/compiler/dart2js/pretty_parameter_test.dart
+++ b/tests/compiler/dart2js/pretty_parameter_test.dart
@@ -100,9 +100,9 @@
regexp = const RegExp(r"a = 2;");
Iterator matches = regexp.allMatches(generated).iterator();
- Expect.isTrue(matches.hasNext());
+ Expect.isTrue(matches.hasNext);
matches.next();
- Expect.isFalse(matches.hasNext());
+ Expect.isFalse(matches.hasNext);
generated = compile(PARAMETER_INIT, entry: 'foo');
regexp = const RegExp("var result = start;");
diff --git a/tests/compiler/dart2js/resolver_test.dart b/tests/compiler/dart2js/resolver_test.dart
index 96c820a..4f964aa 100644
--- a/tests/compiler/dart2js/resolver_test.dart
+++ b/tests/compiler/dart2js/resolver_test.dart
@@ -88,7 +88,7 @@
length(type.arguments));
int index = 0;
Link<DartType> arguments = type.arguments;
- while (!arguments.isEmpty()) {
+ while (!arguments.isEmpty) {
Expect.equals(true, index < expectedElements.length);
Expect.equals(expectedElements[index], arguments.head.element);
index++;
@@ -149,7 +149,8 @@
ClassElement classA = compiler.mainApp.find(buildSourceString("A"));
FunctionElement fooA = classA.lookupLocalMember(buildSourceString("foo"));
- ResolverVisitor visitor = new ResolverVisitor(compiler, fooB);
+ ResolverVisitor visitor =
+ new ResolverVisitor(compiler, fooB, new CollectingTreeElements(fooB));
FunctionExpression node = fooB.parseNode(compiler);
visitor.visit(node.body);
Map mapping = map(visitor);
@@ -167,11 +168,13 @@
ClassElement fooElement = compiler.mainApp.find(buildSourceString("Foo"));
FunctionElement funElement =
fooElement.lookupLocalMember(buildSourceString("foo"));
- ResolverVisitor visitor = new ResolverVisitor(compiler, funElement);
+ ResolverVisitor visitor =
+ new ResolverVisitor(compiler, funElement,
+ new CollectingTreeElements(funElement));
FunctionExpression function = funElement.parseNode(compiler);
visitor.visit(function.body);
Map mapping = map(visitor);
- List<Element> values = mapping.getValues();
+ List<Element> values = mapping.values;
Expect.equals(0, mapping.length);
Expect.equals(0, compiler.warnings.length);
@@ -188,7 +191,8 @@
fooElement = compiler.mainApp.find(buildSourceString("Foo"));
funElement =
fooElement.lookupLocalMember(buildSourceString("foo"));
- visitor = new ResolverVisitor(compiler, funElement);
+ visitor = new ResolverVisitor(compiler, funElement,
+ new CollectingTreeElements(funElement));
function = funElement.parseNode(compiler);
visitor.visit(function.body);
Expect.equals(0, compiler.warnings.length);
@@ -228,7 +232,7 @@
Expect.equals(0, scope.elements.length);
Expect.equals(2, map(visitor).length);
- List<Element> elements = map(visitor).getValues();
+ List<Element> elements = map(visitor).values;
Expect.notEquals(elements[0], elements[1]);
}
@@ -241,7 +245,7 @@
MethodScope scope = visitor.scope;
Expect.equals(0, scope.elements.length);
Expect.equals(3, map(visitor).length);
- List<Element> elements = map(visitor).getValues();
+ List<Element> elements = map(visitor).values;
Expect.equals(elements[0], elements[1]);
}
@@ -254,7 +258,7 @@
MethodScope scope = visitor.scope;
Expect.equals(0, scope.elements.length);
Expect.equals(2, map(visitor).length);
- List<Element> elements = map(visitor).getValues();
+ List<Element> elements = map(visitor).values;
Expect.notEquals(elements[0], elements[1]);
}
@@ -321,8 +325,8 @@
// Check that we have the expected nodes. This test relies on the mapping
// field to be a linked hash map (preserving insertion order).
Expect.isTrue(map(visitor) is LinkedHashMap);
- List<Node> nodes = map(visitor).getKeys();
- List<Element> elements = map(visitor).getValues();
+ List<Node> nodes = map(visitor).keys;
+ List<Element> elements = map(visitor).values;
// for (int i = 0; i < 10; i = i + 1) { i = 5; };
@@ -436,8 +440,8 @@
ClassElement barElement = compiler.mainApp.find(buildSourceString('Bar'));
Expect.equals(barElement.computeType(compiler),
fooElement.supertype);
- Expect.isTrue(fooElement.interfaces.isEmpty());
- Expect.isTrue(barElement.interfaces.isEmpty());
+ Expect.isTrue(fooElement.interfaces.isEmpty);
+ Expect.isTrue(barElement.interfaces.isEmpty);
}
testVarSuperclass() {
@@ -464,14 +468,15 @@
// Add the interface to the world and make sure everything is setup correctly.
compiler.parseScript("interface Bar {}");
- ResolverVisitor visitor = new ResolverVisitor(compiler, null);
+ ResolverVisitor visitor =
+ new ResolverVisitor(compiler, null, new CollectingTreeElements(null));
compiler.resolveStatement("Foo bar;");
ClassElement fooElement = compiler.mainApp.find(buildSourceString('Foo'));
ClassElement barElement = compiler.mainApp.find(buildSourceString('Bar'));
Expect.equals(null, barElement.supertype);
- Expect.isTrue(barElement.interfaces.isEmpty());
+ Expect.isTrue(barElement.interfaces.isEmpty);
Expect.equals(barElement.computeType(compiler),
fooElement.interfaces.head);
@@ -563,12 +568,20 @@
compiler.resolveStatement(statement);
ClassElement classElement =
compiler.mainApp.find(buildSourceString(className));
- Element element =
- classElement.lookupConstructor(
- new Selector.callConstructor(buildSourceString(constructor),
- classElement.getLibrary()));
+ Element element;
+ if (constructor !== '') {
+ element = classElement.lookupConstructor(
+ new Selector.callConstructor(buildSourceString(constructor),
+ classElement.getLibrary()));
+ } else {
+ element = classElement.lookupConstructor(
+ new Selector.callDefaultConstructor(classElement.getLibrary()));
+ }
+
FunctionExpression tree = element.parseNode(compiler);
- ResolverVisitor visitor = new ResolverVisitor(compiler, element);
+ ResolverVisitor visitor =
+ new ResolverVisitor(compiler, element,
+ new CollectingTreeElements(element));
new InitializerResolver(visitor).resolveInitializers(element, tree);
visitor.visit(tree.body);
Expect.equals(expectedElementCount, map(visitor).length);
@@ -623,13 +636,13 @@
int foo; int bar;
A() : this.foo = 1, bar = 2;
}""";
- resolveConstructor(script, "A a = new A();", "A", "A", 2);
+ resolveConstructor(script, "A a = new A();", "A", "", 2);
script = """class A {
int foo; A a;
A() : a.foo = 1;
}""";
- resolveConstructor(script, "A a = new A();", "A", "A", 0,
+ resolveConstructor(script, "A a = new A();", "A", "", 0,
expectedWarnings: [],
expectedErrors:
[MessageKind.INVALID_RECEIVER_IN_INITIALIZER]);
@@ -638,14 +651,14 @@
int foo;
A() : this.foo = 1, this.foo = 2;
}""";
- resolveConstructor(script, "A a = new A();", "A", "A", 2,
+ resolveConstructor(script, "A a = new A();", "A", "", 2,
expectedWarnings: [MessageKind.ALREADY_INITIALIZED],
expectedErrors: [MessageKind.DUPLICATE_INITIALIZER]);
script = """class A {
A() : this.foo = 1;
}""";
- resolveConstructor(script, "A a = new A();", "A", "A", 0,
+ resolveConstructor(script, "A a = new A();", "A", "", 0,
expectedWarnings: [],
expectedErrors: [MessageKind.CANNOT_RESOLVE]);
@@ -654,7 +667,7 @@
int bar;
A() : this.foo = bar;
}""";
- resolveConstructor(script, "A a = new A();", "A", "A", 3,
+ resolveConstructor(script, "A a = new A();", "A", "", 3,
expectedWarnings: [],
expectedErrors: [MessageKind.NO_INSTANCE_AVAILABLE]);
@@ -662,7 +675,7 @@
int foo() => 42;
A() : foo();
}""";
- resolveConstructor(script, "A a = new A();", "A", "A", 0,
+ resolveConstructor(script, "A a = new A();", "A", "", 0,
expectedWarnings: [],
expectedErrors: [MessageKind.CONSTRUCTOR_CALL_EXPECTED]);
@@ -690,7 +703,7 @@
class B extends A {
B() : super(0);
}""";
- resolveConstructor(script, "B a = new B();", "B", "B", 1);
+ resolveConstructor(script, "B a = new B();", "B", "", 1);
script = """class A {
int i;
@@ -699,7 +712,7 @@
class B extends A {
B() : super(0), super(1);
}""";
- resolveConstructor(script, "B b = new B();", "B", "B", 2,
+ resolveConstructor(script, "B b = new B();", "B", "", 2,
expectedWarnings: [],
expectedErrors: [MessageKind.DUPLICATE_SUPER_INITIALIZER]);
@@ -718,7 +731,7 @@
class Null {}
class Dynamic_ {}
class Object { Object() : super(); }''';
- resolveConstructor(script, "Object o = new Object();", "Object", "Object", 1,
+ resolveConstructor(script, "Object o = new Object();", "Object", "", 1,
expectedWarnings: [],
expectedErrors: [MessageKind.SUPER_INITIALIZER_IN_OBJECT],
corelib: CORELIB_WITH_INVALID_OBJECT);
@@ -733,7 +746,7 @@
List<String> asSortedStrings(Link link) {
List<String> result = <String>[];
- for (; !link.isEmpty(); link = link.tail) result.add(link.head.toString());
+ for (; !link.isEmpty; link = link.tail) result.add(link.head.toString());
result.sort((s1, s2) => s1.compareTo(s2));
return result;
}
diff --git a/tests/compiler/dart2js/type_checker_test.dart b/tests/compiler/dart2js/type_checker_test.dart
index 0dd4f1e..62d231e 100644
--- a/tests/compiler/dart2js/type_checker_test.dart
+++ b/tests/compiler/dart2js/type_checker_test.dart
@@ -411,7 +411,7 @@
DartType analyzeType(String text) {
var node = parseExpression(text);
TypeCheckerVisitor visitor =
- new TypeCheckerVisitor(compiler, new TreeElementMapping(), types);
+ new TypeCheckerVisitor(compiler, new TreeElementMapping(null), types);
return visitor.analyze(node);
}
@@ -424,7 +424,7 @@
Link<Element> topLevelElements = parseUnit(text, compiler, library);
for (Link<Element> elements = topLevelElements;
- !elements.isEmpty();
+ !elements.isEmpty;
elements = elements.tail) {
Node node = elements.head.parseNode(compiler);
TreeElements mapping = compiler.resolver.resolve(elements.head);
diff --git a/tests/compiler/dart2js/unparser2_test.dart b/tests/compiler/dart2js/unparser2_test.dart
index 671615a..54f7b7e 100644
--- a/tests/compiler/dart2js/unparser2_test.dart
+++ b/tests/compiler/dart2js/unparser2_test.dart
@@ -55,7 +55,7 @@
Parser parser = new Parser(listener);
parser.parseUnit(beginToken);
Node node = listener.popNode();
- Expect.isTrue(listener.nodes.isEmpty());
+ Expect.isTrue(listener.nodes.isEmpty);
return unparse(node);
}
diff --git a/tests/compiler/dart2js/value_range2_test.dart b/tests/compiler/dart2js/value_range2_test.dart
index ac23203..768a3f1 100644
--- a/tests/compiler/dart2js/value_range2_test.dart
+++ b/tests/compiler/dart2js/value_range2_test.dart
@@ -46,16 +46,16 @@
buildBound(one, two) {
// Create a bound just like our current implementation in dart2js does.
if (two is IntValue) {
- if (two.isNegative()) {
+ if (two.isNegative) {
return new AddValue(one, -two);
- } else if (two.isZero()) {
+ } else if (two.isZero) {
return one;
}
}
if (one is IntValue) {
- if (one.isNegative()) {
+ if (one.isNegative) {
return new SubtractValue(-two, -one);
- } else if (one.isZero()) {
+ } else if (one.isZero) {
return -two;
}
}
diff --git a/tests/compiler/dart2js_extra/argument_definition_test.dart b/tests/compiler/dart2js_extra/argument_definition_test.dart
index 5d0d936..d5243c5 100644
--- a/tests/compiler/dart2js_extra/argument_definition_test.dart
+++ b/tests/compiler/dart2js_extra/argument_definition_test.dart
@@ -4,7 +4,7 @@
// Test parsing and resolution of argument definition test.
-int test(int a, [int b = 2, int c = 3]) {
+int test(int a, {int b: 2, int c: 3}) {
int result = 0;
print(?b);
print(?result); /// 01: compile-time error
@@ -19,7 +19,7 @@
print(!?a?!?b:!?c == ?a??b:?c);
}
-closure_test(int a, [int b = 2, int c = 3]) {
+closure_test(int a, {int b: 2, int c: 3}) {
var x = 0;
return () {
int result = 0;
@@ -40,12 +40,12 @@
main() {
test(1);
- test(1, 2);
- test(1, 2, 3);
- test(1, c:3);
+ test(1, b: 2);
+ test(1, b: 2, c: 3);
+ test(1, c: 3);
closure_test(1)();
- closure_test(1, 2)();
- closure_test(1, 2, 3)();
- closure_test(1, c:3)();
+ closure_test(1, b: 2)();
+ closure_test(1, b: 2, c: 3)();
+ closure_test(1, c: 3)();
}
diff --git a/tests/compiler/dart2js_extra/bailout_test.dart b/tests/compiler/dart2js_extra/bailout_test.dart
index d97e75c..2b42399 100644
--- a/tests/compiler/dart2js_extra/bailout_test.dart
+++ b/tests/compiler/dart2js_extra/bailout_test.dart
@@ -45,7 +45,7 @@
void forInBailout() {
var n = myString.length;
var res = '';
- for (int i in myString.charCodes()) {
+ for (int i in myString.charCodes) {
var o = myString;
if (false) o[1] = 2;
res = res.concat(new String.fromCharCodes([i]));
diff --git a/tests/compiler/dart2js_extra/closure3_test.dart b/tests/compiler/dart2js_extra/closure3_test.dart
index e436d7c..119bcb6 100644
--- a/tests/compiler/dart2js_extra/closure3_test.dart
+++ b/tests/compiler/dart2js_extra/closure3_test.dart
@@ -3,11 +3,11 @@
// BSD-style license that can be found in the LICENSE file.
main() {
- var f = fun([a = 3, b = 8]) {
+ var f = fun({a: 3, b: 8}) {
return a + b;
};
Expect.equals(11, f());
- Expect.equals(499, f(3, 496));
- Expect.equals(42, f(20, b: 22));
+ Expect.equals(499, f(a: 3, b: 496));
+ Expect.equals(42, f(a: 20, b: 22));
Expect.equals(99, f(b: 66, a: 33));
}
diff --git a/tests/compiler/dart2js_extra/closure5_test.dart b/tests/compiler/dart2js_extra/closure5_test.dart
index 6ead0de..b88f5ef 100644
--- a/tests/compiler/dart2js_extra/closure5_test.dart
+++ b/tests/compiler/dart2js_extra/closure5_test.dart
@@ -4,7 +4,7 @@
class A {
foo() => 499;
- bar([a = 1, b = 7, c = 99]) => a + b + c;
+ bar({a: 1, b: 7, c: 99}) => a + b + c;
toto() => bar;
gee(f) => f(toto);
}
@@ -15,9 +15,9 @@
Expect.equals(499, foo());
var bar = a.bar;
Expect.equals(107, bar());
- Expect.equals(3, bar(1, 1, 1));
+ Expect.equals(3, bar(a: 1, b: 1, c: 1));
Expect.equals(10, bar(c: 2));
var toto = a.toto;
var gee = a.gee;
- Expect.equals(-10, gee((f) => f()(-1, -2, c: -7)));
+ Expect.equals(-10, gee((f) => f()(a: -1, b: -2, c: -7)));
}
diff --git a/tests/compiler/dart2js_extra/closure6_test.dart b/tests/compiler/dart2js_extra/closure6_test.dart
index 1fd460d..fd63888 100644
--- a/tests/compiler/dart2js_extra/closure6_test.dart
+++ b/tests/compiler/dart2js_extra/closure6_test.dart
@@ -18,13 +18,13 @@
Expect.equals(499, a.foo());
a.foo = (x, y) => x + y;
Expect.equals(102, a.bar());
- a.foo = ([fun = null]) => fun(41);
+ a.foo = ({fun: null}) => fun(41);
Expect.equals(42, a.gee((x) => x + 1));
a.foo = () => 499;
Expect.equals(499, a.foo2());
a.foo = (x, y) => x + y;
Expect.equals(102, a.bar2());
- a.foo = ([fun = null]) => fun(41);
+ a.foo = ({fun: null}) => fun(41);
Expect.equals(42, a.gee2((x) => x + 1));
}
diff --git a/tests/compiler/dart2js_extra/closure7_test.dart b/tests/compiler/dart2js_extra/closure7_test.dart
index 7722bbe..6003c43 100644
--- a/tests/compiler/dart2js_extra/closure7_test.dart
+++ b/tests/compiler/dart2js_extra/closure7_test.dart
@@ -15,14 +15,14 @@
Expect.equals(499, foo());
foo = (x, y) => x + y;
Expect.equals(102, bar());
- foo = ([fun = null]) => fun(41);
+ foo = ({fun: null}) => fun(41);
Expect.equals(42, gee((x) => x + 1));
foo = () => 499;
Expect.equals(499, foo2());
foo = (x, y) => x + y;
Expect.equals(102, bar2());
- foo = ([fun = null]) => fun(41);
+ foo = ({fun: null}) => fun(41);
Expect.equals(42, gee2((x) => x + 1));
}
@@ -41,14 +41,14 @@
Expect.equals(499, A.foo());
A.foo = (x, y) => x + y;
Expect.equals(102, A.bar());
- A.foo = ([fun = null]) => fun(41);
+ A.foo = ({fun: null}) => fun(41);
Expect.equals(42, A.gee((x) => x + 1));
A.foo = () => 499;
Expect.equals(499, A.foo2());
A.foo = (x, y) => x + y;
Expect.equals(102, A.bar2());
- A.foo = ([fun = null]) => fun(41);
+ A.foo = ({fun: null}) => fun(41);
Expect.equals(42, A.gee2((x) => x + 1));
}
diff --git a/tests/compiler/dart2js_extra/dart2js_extra.status b/tests/compiler/dart2js_extra/dart2js_extra.status
index f798b88..31ef7cf 100644
--- a/tests/compiler/dart2js_extra/dart2js_extra.status
+++ b/tests/compiler/dart2js_extra/dart2js_extra.status
@@ -26,6 +26,3 @@
[ $compiler == dart2js && $runtime == none ]
*: Fail, Pass # TODO(ahe): Triage these tests.
-
-[ $runtime == opera ]
-*: Skip
diff --git a/tests/compiler/dart2js_extra/for_in_test.dart b/tests/compiler/dart2js_extra/for_in_test.dart
index 54f8b02..d2f76ea 100644
--- a/tests/compiler/dart2js_extra/for_in_test.dart
+++ b/tests/compiler/dart2js_extra/for_in_test.dart
@@ -35,7 +35,7 @@
final List<T> values;
int index;
MyListIterator(List<T> values) : this.values = values, index = 0;
- bool hasNext() => index < values.length;
+ bool get hasNext => index < values.length;
T next() => values[index++];
}
diff --git a/tests/compiler/dart2js_extra/named_parameter_for_static_test.dart b/tests/compiler/dart2js_extra/named_parameter_for_static_test.dart
index 95aada0..252c6ad 100644
--- a/tests/compiler/dart2js_extra/named_parameter_for_static_test.dart
+++ b/tests/compiler/dart2js_extra/named_parameter_for_static_test.dart
@@ -2,12 +2,12 @@
// 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.
-oneOptionalArgument(a, [b]) {
+oneOptionalArgument(a, {b}) {
Expect.equals(1, a);
Expect.equals(2, b);
}
-twoOptionalArguments([a, b]) {
+twoOptionalArguments({a, b}) {
Expect.equals(1, a);
Expect.equals(2, b);
}
@@ -15,56 +15,43 @@
main() {
twoOptionalArguments(a: 1, b: 2);
twoOptionalArguments(b: 2, a: 1);
- twoOptionalArguments(1, b: 2);
- twoOptionalArguments(1, 2);
- oneOptionalArgument(1, 2);
oneOptionalArgument(1, b: 2);
new A.twoOptionalArguments(a: 1, b: 2);
new A.twoOptionalArguments(b: 2, a: 1);
- new A.twoOptionalArguments(1, b: 2);
- new A.twoOptionalArguments(1, 2);
- new A.oneOptionalArgument(1, 2);
new A.oneOptionalArgument(1, b: 2);
-/* TODO(ngeoffray): Enable once we support super constructor call.
new B.one();
new B.two();
new B.three();
- new B.four();
- new B.five();
- new B.six();
-*/
- new B().one();
- new B().two();
- new B().three();
- new B().four();
- new B().five();
- new B().six();
+ new B().B_one();
+ new B().B_two();
+ new B().B_three();
}
class A {
- A.oneOptionalArgument(a, [b]) {
+ A.oneOptionalArgument(a, {b}) {
Expect.equals(1, a);
Expect.equals(2, b);
}
- A.twoOptionalArguments([a, b]) {
+ A.twoOptionalArguments({a, b}) {
Expect.equals(1, a);
Expect.equals(2, b);
}
A();
- oneOptionalArgument(a, [b]) {
+ // A named constructor now conflicts with a method of the same name.
+ oneOptArg(a, {b}) {
Expect.equals(1, a);
Expect.equals(2, b);
}
- twoOptionalArguments([a, b]) {
+ twoOptArgs({a, b}) {
Expect.equals(1, a);
Expect.equals(2, b);
}
@@ -73,16 +60,10 @@
class B extends A {
B.one() : super.twoOptionalArguments(a: 1, b: 2);
B.two() : super.twoOptionalArguments(b: 2, a: 1);
- B.three() : super.twoOptionalArguments(1, b: 2);
- B.four() : super.twoOptionalArguments(1, 2);
- B.five() : super.oneOptionalArgument(1, 2);
- B.six() : super.oneOptionalArgument(1, b: 2);
+ B.three() : super.oneOptionalArgument(1, b: 2);
B();
- one() { super.twoOptionalArguments(a: 1, b: 2); }
- two() { super.twoOptionalArguments(b: 2, a: 1); }
- three() { super.twoOptionalArguments(1, b: 2); }
- four() { super.twoOptionalArguments(1, 2); }
- five() { super.oneOptionalArgument(1, 2); }
- six() { super.oneOptionalArgument(1, b: 2); }
+ B_one() { super.twoOptArgs(a: 1, b: 2); }
+ B_two() { super.twoOptArgs(b: 2, a: 1); }
+ B_three() { super.oneOptArg(1, b: 2); }
}
diff --git a/tests/compiler/dart2js_extra/named_parameter_test.dart b/tests/compiler/dart2js_extra/named_parameter_test.dart
index 3e2da8b..af09e39 100644
--- a/tests/compiler/dart2js_extra/named_parameter_test.dart
+++ b/tests/compiler/dart2js_extra/named_parameter_test.dart
@@ -3,7 +3,7 @@
// BSD-style license that can be found in the LICENSE file.
class A {
- foo([a, b]) {
+ foo({a, b}) {
Expect.equals(0, a);
Expect.equals(1, b);
}
diff --git a/tests/compiler/dart2js_extra/no_such_method_test.dart b/tests/compiler/dart2js_extra/no_such_method_test.dart
index e291a93..4a432c5 100644
--- a/tests/compiler/dart2js_extra/no_such_method_test.dart
+++ b/tests/compiler/dart2js_extra/no_such_method_test.dart
@@ -28,7 +28,7 @@
A a = new A();
var info = a.foo();
Expect.equals('foo', info.name);
- Expect.isTrue(info.args.isEmpty());
+ Expect.isTrue(info.args.isEmpty);
Expect.isTrue(info.receiver === a);
info = a.foo(2);
diff --git a/tests/compiler/dart2js_extra/this_redirecting_constructor_test.dart b/tests/compiler/dart2js_extra/this_redirecting_constructor_test.dart
new file mode 100644
index 0000000..6962716
--- /dev/null
+++ b/tests/compiler/dart2js_extra/this_redirecting_constructor_test.dart
@@ -0,0 +1,19 @@
+// Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// Confirm that redirecting named constructors are properly resolved.
+//
+// Note that this test may become invalid due to http://dartbug.com/5940.
+
+class C {
+ var x;
+ C() { x = 1; }
+ C.C() { x = 2; }
+ C.redirecting(): this.C();
+}
+
+main() {
+ var c = new C.redirecting();
+ Expect.equals(c.x, 2);
+}
\ No newline at end of file
diff --git a/tests/compiler/dart2js_foreign/dart2js_foreign.status b/tests/compiler/dart2js_foreign/dart2js_foreign.status
index 12c15c7..1b70a56 100644
--- a/tests/compiler/dart2js_foreign/dart2js_foreign.status
+++ b/tests/compiler/dart2js_foreign/dart2js_foreign.status
@@ -10,7 +10,7 @@
native_checked_fields_test: Fail
-[ $compiler == dart2js && ( $runtime == d8 || $browser ) ]
+[ $compiler == dart2js && ( $jscl || $browser ) ]
foreign_test: Fail # TODO(ahe): Convert to metadata syntax.
native_call_arity1_test: Fail # TODO(ahe): Convert to metadata syntax.
native_call_arity2_test: Fail # TODO(ahe): Convert to metadata syntax.
diff --git a/tests/compiler/dart2js_foreign/native_null_test.dart b/tests/compiler/dart2js_foreign/native_null_test.dart
index d77cbb9..f22046f 100644
--- a/tests/compiler/dart2js_foreign/native_null_test.dart
+++ b/tests/compiler/dart2js_foreign/native_null_test.dart
@@ -33,7 +33,7 @@
Expect.equals(null, a.returnUndefined());
Expect.equals('', a.returnEmptyString());
- Expect.isTrue(a.returnEmptyString().isEmpty());
+ Expect.isTrue(a.returnEmptyString().isEmpty);
Expect.isTrue(a.returnEmptyString() is String);
Expect.isTrue(a.returnZero() is int);
diff --git a/tests/compiler/dart2js_native/hash_code_test.dart b/tests/compiler/dart2js_native/hash_code_test.dart
index af43441..0c50d21 100644
--- a/tests/compiler/dart2js_native/hash_code_test.dart
+++ b/tests/compiler/dart2js_native/hash_code_test.dart
@@ -12,5 +12,5 @@
main() {
setup();
- Expect.isTrue(makeA().hashCode() is int);
+ Expect.isTrue(makeA().hashCode is int);
}
diff --git a/tests/compiler/dart2js_native/native_call_arity1_frog_test.dart b/tests/compiler/dart2js_native/native_call_arity1_frog_test.dart
index f5f2ff0..8558b22 100644
--- a/tests/compiler/dart2js_native/native_call_arity1_frog_test.dart
+++ b/tests/compiler/dart2js_native/native_call_arity1_frog_test.dart
@@ -7,8 +7,8 @@
// methods can dispatch on the number of arguments. Passing null or undefined
// as the last argument is not the same as passing one fewer argument.
//
-// * Named arguments are passed in the correct position, so require preceding
-// arguments to be passed.
+// * Optional positional arguments are passed in the correct position, so
+// require preceding arguments to be passed.
class A native "*A" {
int foo(int x) native;
@@ -51,9 +51,6 @@
Expect.equals(2, b.foo(10, 20));
Expect.equals(3, b.foo(10, 20, 30));
- Expect.equals(1, b.foo(x: 10)); // 1 = x
- Expect.equals(2, b.foo(y: 20)); // 2 = x, y
- Expect.equals(3, b.foo(z: 30)); // 3 = x, y, z
Expect.throws(() => b.foo(10, 20, 30, 40));
}
@@ -71,9 +68,6 @@
Expect.equals(2, b.foo(10, 20));
Expect.equals(3, b.foo(10, 20, 30));
- Expect.equals(1, b.foo(x: 10));
- Expect.equals(2, b.foo(y: 20));
- Expect.equals(3, b.foo(z: 30));
Expect.throws(() => b.foo(10, 20, 30, 40));
}
diff --git a/tests/compiler/dart2js_native/native_call_arity2_frog_test.dart b/tests/compiler/dart2js_native/native_call_arity2_frog_test.dart
index 727ec38..b24893a 100644
--- a/tests/compiler/dart2js_native/native_call_arity2_frog_test.dart
+++ b/tests/compiler/dart2js_native/native_call_arity2_frog_test.dart
@@ -49,8 +49,8 @@
Expect.equals(2, a.foo(10, 20));
Expect.throws(() => a.foo(10, 20, 30));
- Expect.equals(1, a.foo(x: 10)); // 1 = x
- Expect.equals(2, a.foo(y: 20)); // 2 = x, y
+ Expect.equals(1, a.foo(10));
+ Expect.equals(2, a.foo(null, 20));
Expect.throws(() => a.foo(10, 20, 30));
Expect.equals(0, b.foo());
@@ -58,8 +58,8 @@
Expect.equals(2, b.foo(10, 20));
Expect.throws(() => b.foo(10, 20, 30));
- Expect.equals(1, b.foo(x: 10)); // 1 = x
- Expect.equals(2, b.foo(y: 20)); // 2 = x, y
+ Expect.equals(1, b.foo(10));
+ Expect.equals(2, b.foo(null, 20));
Expect.throws(() => b.foo(10, 20, 30));
}
@@ -72,8 +72,8 @@
Expect.equals(2, a.foo(10, 20));
Expect.throws(() => a.foo(10, 20, 30));
- Expect.equals(1, a.foo(x: 10)); // 1 = x
- Expect.equals(2, a.foo(y: 20)); // 2 = x, y
+ Expect.equals(1, a.foo(10));
+ Expect.equals(2, a.foo(null, 20));
Expect.throws(() => a.foo(10, 20, 30));
Expect.equals(0, b.foo());
@@ -81,8 +81,8 @@
Expect.equals(2, b.foo(10, 20));
Expect.throws(() => b.foo(10, 20, 30));
- Expect.equals(1, b.foo(x: 10)); // 1 = x
- Expect.equals(2, b.foo(y: 20)); // 2 = x, y
+ Expect.equals(1, b.foo(10));
+ Expect.equals(2, b.foo(null, 20));
Expect.throws(() => b.foo(10, 20, 30));
}
diff --git a/tests/compiler/dart2js_native/native_call_arity3_frog_test.dart b/tests/compiler/dart2js_native/native_call_arity3_frog_test.dart
index 3792069..8a45c05 100644
--- a/tests/compiler/dart2js_native/native_call_arity3_frog_test.dart
+++ b/tests/compiler/dart2js_native/native_call_arity3_frog_test.dart
@@ -47,9 +47,9 @@
Expect.equals(2, b.foo(10, 20));
Expect.equals(3, b.foo(10, 20, 30));
- Expect.equals(1, b.foo(x: 10)); // 1 = x
- Expect.equals(2, b.foo(y: 20)); // 2 = x, y
- Expect.equals(3, b.foo(z: 30)); // 3 = x, y, z
+ Expect.equals(1, b.foo(10));
+ Expect.equals(2, b.foo(null, 20));
+ Expect.equals(3, b.foo(null, null, 30));
Expect.throws(() => b.foo(10, 20, 30, 40));
}
@@ -67,9 +67,9 @@
Expect.equals(2, b.foo(10, 20));
Expect.equals(3, b.foo(10, 20, 30));
- Expect.equals(1, b.foo(x: 10));
- Expect.equals(2, b.foo(y: 20));
- Expect.equals(3, b.foo(z: 30));
+ Expect.equals(1, b.foo(10));
+ Expect.equals(2, b.foo(null, 20));
+ Expect.equals(3, b.foo(null, null, 30));
Expect.throws(() => b.foo(10, 20, 30, 40));
}
diff --git a/tests/compiler/dart2js_native/native_null_frog_test.dart b/tests/compiler/dart2js_native/native_null_frog_test.dart
index e715755..44d3724 100644
--- a/tests/compiler/dart2js_native/native_null_frog_test.dart
+++ b/tests/compiler/dart2js_native/native_null_frog_test.dart
@@ -27,7 +27,7 @@
Expect.equals(null, a.returnUndefined());
Expect.equals('', a.returnEmptyString());
- Expect.isTrue(a.returnEmptyString().isEmpty());
+ Expect.isTrue(a.returnEmptyString().isEmpty);
Expect.isTrue(a.returnEmptyString() is String);
Expect.isTrue(a.returnZero() is int);
diff --git a/tests/compiler/dart2js_native/native_wrapping_function3_frog_test.dart b/tests/compiler/dart2js_native/native_wrapping_function3_frog_test.dart
index d00d434..335dc01 100644
--- a/tests/compiler/dart2js_native/native_wrapping_function3_frog_test.dart
+++ b/tests/compiler/dart2js_native/native_wrapping_function3_frog_test.dart
@@ -27,25 +27,15 @@
setup();
var a = makeA();
Expect.equals(43, a.foo1((arg1) => arg1, 43));
- Expect.equals(43, a.foo1((arg1) => arg1, arg1: 43));
Expect.equals(0, a.foo1((arg1) => arg1));
Expect.equals(44, a.foo2((arg1, arg2) => arg1 + arg2, 21, 23));
Expect.equals(22, a.foo2((arg1, arg2) => arg1 + arg2, 21));
- Expect.equals(22, a.foo2((arg1, arg2) => arg1 + arg2, arg1: 21));
- Expect.equals(21, a.foo2((arg1, arg2) => arg1 + arg2, arg2: 21));
- Expect.equals(44, a.foo2((arg1, arg2) => arg1 + arg2, arg1: 21, arg2: 23));
- Expect.equals(44, a.foo2((arg1, arg2) => arg1 - arg2, arg2: 22, arg1: 66));
A aa = a;
Expect.equals(43, aa.foo1((arg1) => arg1, 43));
- Expect.equals(43, aa.foo1((arg1) => arg1, arg1: 43));
Expect.equals(0, aa.foo1((arg1) => arg1));
Expect.equals(44, aa.foo2((arg1, arg2) => arg1 + arg2, 21, 23));
Expect.equals(22, aa.foo2((arg1, arg2) => arg1 + arg2, 21));
- Expect.equals(22, aa.foo2((arg1, arg2) => arg1 + arg2, arg1: 21));
- Expect.equals(21, aa.foo2((arg1, arg2) => arg1 + arg2, arg2: 21));
- Expect.equals(44, aa.foo2((arg1, arg2) => arg1 + arg2, arg1: 21, arg2: 23));
- Expect.equals(44, aa.foo2((arg1, arg2) => arg1 - arg2, arg2: 22, arg1: 66));
}
diff --git a/tests/corelib/big_integer_vm_test.dart b/tests/corelib/big_integer_vm_test.dart
index ec1d755..9c7719a 100644
--- a/tests/corelib/big_integer_vm_test.dart
+++ b/tests/corelib/big_integer_vm_test.dart
@@ -168,8 +168,8 @@
Expect.equals(1234567890123456, (-1234567890123456).abs());
var a = 10000000000000000000;
var b = 10000000000000000001;
- Expect.equals(false, a.hashCode() == b.hashCode());
- Expect.equals(true, a.hashCode() == (b - 1).hashCode());
+ Expect.equals(false, a.hashCode == b.hashCode);
+ Expect.equals(true, a.hashCode == (b - 1).hashCode);
}
}
diff --git a/tests/corelib/collection_to_string_test.dart b/tests/corelib/collection_to_string_test.dart
index 71db90ff..1eb7d3b 100644
--- a/tests/corelib/collection_to_string_test.dart
+++ b/tests/corelib/collection_to_string_test.dart
@@ -297,7 +297,7 @@
/** Returns the alphabetized characters in a string. */
String alphagram(String s) {
- List<int> chars = s.charCodes();
+ List<int> chars = s.charCodes;
chars.sort((int a, int b) => a - b);
return new String.fromCharCodes(chars);
}
diff --git a/tests/corelib/const_list_literal_test.dart b/tests/corelib/const_list_literal_test.dart
index 33bc487..5d5978e 100644
--- a/tests/corelib/const_list_literal_test.dart
+++ b/tests/corelib/const_list_literal_test.dart
@@ -13,7 +13,7 @@
var exception = null;
try {
list.add(4);
- } on UnsupportedOperationException catch (e) {
+ } on UnsupportedError catch (e) {
exception = e;
}
Expect.equals(true, exception != null);
@@ -23,7 +23,7 @@
exception = null;
try {
list.addAll([4, 5]);
- } on UnsupportedOperationException catch (e) {
+ } on UnsupportedError catch (e) {
exception = e;
}
Expect.equals(true, exception != null);
@@ -32,7 +32,7 @@
exception = null;
try {
list[0] = 0;
- } on UnsupportedOperationException catch (e) {
+ } on UnsupportedError catch (e) {
exception = e;
}
Expect.equals(true, exception != null);
@@ -41,7 +41,7 @@
exception = null;
try {
list.sort((a, b) => a < b);
- } on UnsupportedOperationException catch (e) {
+ } on UnsupportedError catch (e) {
exception = e;
}
Expect.equals(true, exception != null);
@@ -53,7 +53,7 @@
exception = null;
try {
list.setRange(0, 1, [1], 0);
- } on UnsupportedOperationException catch (e) {
+ } on UnsupportedError catch (e) {
exception = e;
}
Expect.equals(true, exception != null);
diff --git a/tests/corelib/const_list_remove_range_test.dart b/tests/corelib/const_list_remove_range_test.dart
index b15d793..db38336 100644
--- a/tests/corelib/const_list_remove_range_test.dart
+++ b/tests/corelib/const_list_remove_range_test.dart
@@ -9,7 +9,7 @@
}
void expectUOE(Function f) {
- Expect.throws(f, (e) => e is UnsupportedOperationException);
+ Expect.throws(f, (e) => e is UnsupportedError);
}
testImmutable(var list) {
diff --git a/tests/corelib/const_list_set_range_test.dart b/tests/corelib/const_list_set_range_test.dart
index a32c40a..08062c6 100644
--- a/tests/corelib/const_list_set_range_test.dart
+++ b/tests/corelib/const_list_set_range_test.dart
@@ -9,7 +9,7 @@
}
void expectUOE(Function f) {
- Expect.throws(f, (e) => e is UnsupportedOperationException);
+ Expect.throws(f, (e) => e is UnsupportedError);
}
testImmutable(var list) {
diff --git a/tests/corelib/core_runtime_types_test.dart b/tests/corelib/core_runtime_types_test.dart
index caea866..d1733bd 100644
--- a/tests/corelib/core_runtime_types_test.dart
+++ b/tests/corelib/core_runtime_types_test.dart
@@ -141,8 +141,8 @@
// TODO(jimhug): Determine correct behavior for mixing ints and floats.
static testIntegerMethods() {
var y = 9;
- assertEquals(y.isEven(), false);
- assertEquals(y.isOdd(), true);
+ assertEquals(y.isEven, false);
+ assertEquals(y.isOdd, true);
assertEquals(y.toRadixString(2), '1001');
assertEquals(y.toRadixString(3), '100');
assertEquals(y.toRadixString(16), '9');
@@ -171,7 +171,7 @@
// TODO(jimhug): Fill out full set of string methods.
static testStringMethods() {
var s = "abcdef";
- assertEquals(s.isEmpty(), false);
+ assertEquals(s.isEmpty, false);
assertEquals(s.startsWith("abc"), true);
assertEquals(s.endsWith("def"), true);
assertEquals(s.startsWith("aa"), false);
@@ -199,7 +199,7 @@
// TODO(jimhug): Fill out full set of list methods.
static testListMethods() {
var a = [1,2,3,4];
- assertEquals(a.isEmpty(), false);
+ assertEquals(a.isEmpty, false);
assertEquals(a.length, 4);
var exception = null;
a.clear();
@@ -223,20 +223,20 @@
assertEquals(d.containsValue(3), false);
assertEquals(d.containsKey('a'), true);
assertEquals(d.containsKey('c'), false);
- assertEquals(d.getKeys().length, 2);
- assertEquals(d.getValues().length, 2);
+ assertEquals(d.keys.length, 2);
+ assertEquals(d.values.length, 2);
assertEquals(d.remove('c'), null);
assertEquals(d.remove('b'), 2);
- assertListEquals(d.getKeys(), ['a']);
- assertListEquals(d.getValues(), [1]);
+ assertListEquals(d.keys, ['a']);
+ assertListEquals(d.values, [1]);
d['c'] = 3;
d['f'] = 4;
- assertEquals(d.getKeys().length, 3);
- assertEquals(d.getValues().length, 3);
- assertListContains(d.getKeys(), ['a', 'c', 'f']);
- assertListContains(d.getValues(), [1, 3, 4]);
+ assertEquals(d.keys.length, 3);
+ assertEquals(d.values.length, 3);
+ assertListContains(d.keys, ['a', 'c', 'f']);
+ assertListContains(d.values, [1, 3, 4]);
var count = 0;
d.forEach((key, value) {
@@ -250,8 +250,8 @@
assertEquals(d.containsValue(3), false);
assertEquals(d.containsKey('a'), true);
assertEquals(d.containsKey('c'), false);
- assertEquals(d.getKeys().length, 2);
- assertEquals(d.getValues().length, 2);
+ assertEquals(d.keys.length, 2);
+ assertEquals(d.values.length, 2);
d['g'] = null;
assertEquals(d.containsKey('g'), true);
diff --git a/tests/corelib/corelib.status b/tests/corelib/corelib.status
index 54df65e..b604ddd 100644
--- a/tests/corelib/corelib.status
+++ b/tests/corelib/corelib.status
@@ -11,12 +11,13 @@
apply_test: Fail # Bug 5670
apply2_test: Fail # Bug 5670
-[ $runtime == ff || $runtime == ie9 ]
+[ $runtime == ff || $runtime == ie9 || $runtime == jsshell ]
unicode_test: Fail
-# TODO(jmesserly): now that we have a bot, we need to set up Opera testing.
[ $runtime == opera ]
-*: Skip
+core_runtime_types_test: Fail
+date_time7_test: Fail
+unicode_test: Fail
[ $runtime == ie9 && ($system == linux || $system == macos) ]
*: Skip
diff --git a/tests/corelib/date_time2_test.dart b/tests/corelib/date_time2_test.dart
index 8f838f4..2004987 100644
--- a/tests/corelib/date_time2_test.dart
+++ b/tests/corelib/date_time2_test.dart
@@ -10,5 +10,5 @@
// There is no guarantee that the hashcode for these two dates is different,
// but in the worst case we will have to fix this test.
// The important test here is, that Date .
- Expect.isFalse(d.hashCode() == d2.hashCode());
+ Expect.isFalse(d.hashCode == d2.hashCode);
}
diff --git a/tests/corelib/future_test.dart b/tests/corelib/future_test.dart
index ebc541f..9ed1db5 100644
--- a/tests/corelib/future_test.dart
+++ b/tests/corelib/future_test.dart
@@ -74,7 +74,7 @@
completer.completeException(exception);
Expect.equals(exception, future.exception);
Expect.equals(exception, err);
- Expect.throws(() => future.value, (e) => e == exception);
+ Expect.throws(() => future.value, (e) => e.source == exception);
}
testCompleteWithCompleteHandlerAfterComplete() {
@@ -108,7 +108,7 @@
});
Expect.equals(exception, future.exception);
Expect.equals(exception, err);
- Expect.throws(() => future.value, (e) => e == exception);
+ Expect.throws(() => future.value, (e) => e.source == exception);
}
testCompleteWithManyCompleteHandlers() {
@@ -146,7 +146,7 @@
Expect.equals(exception, before);
Expect.equals(exception, after1);
Expect.equals(exception, after2);
- Expect.throws(() => future.value, (e) => e == exception);
+ Expect.throws(() => future.value, (e) => e.source == exception);
}
// Tests for [then]
@@ -207,7 +207,7 @@
future.then((_) {}); // exception is thrown if we plan to use the value
Expect.throws(
() { completer.completeException(ex); },
- (e) => e == ex);
+ (e) => e.source == ex);
}
testExceptionNoSuccessListeners() {
@@ -263,7 +263,7 @@
future.handleException((e) { reached = true; return false; }); // overshadowed
Expect.throws(
() { completer.completeException(ex); },
- (e) => e == ex);
+ (e) => e.source == ex);
Expect.isTrue(reached);
}
@@ -385,7 +385,7 @@
exceptionFromCompleteHandler = f.exception;
});
future.then((v) => Expect.fail("Should not succeed"));
- Expect.throws(() => completer.completeException(ex), (e) => ex == e);
+ Expect.throws(() => completer.completeException(ex), (e) => e.source == ex);
Expect.equals(ex, exceptionFromCompleteHandler);
}
@@ -438,7 +438,7 @@
final transformedFuture = completer.future.transform((x) { throw error; });
Expect.isFalse(transformedFuture.isComplete);
transformedFuture.then((v) => null);
- Expect.throws(() => completer.complete("42"), (e) => e == error);
+ Expect.throws(() => completer.complete("42"), (e) => e.source == error);
Expect.equals(error, transformedFuture.exception);
}
@@ -478,7 +478,7 @@
});
chainedFuture.then((v) => null);
Expect.isFalse(chainedFuture.isComplete);
- Expect.throws(() => completerA.complete("42"), (e) => e == error);
+ Expect.throws(() => completerA.complete("42"), (e) => e.source == error);
Expect.equals(error, chainedFuture.exception);
}
diff --git a/tests/corelib/hash_map_test.dart b/tests/corelib/hash_map_test.dart
index af78d95..8d92047 100644
--- a/tests/corelib/hash_map_test.dart
+++ b/tests/corelib/hash_map_test.dart
@@ -11,10 +11,10 @@
// is used to verify that the test script is picking up these tests.
var m = new Map();
Expect.equals(0, m.length);
- Expect.equals(true, m.isEmpty());
+ Expect.equals(true, m.isEmpty);
m["one"] = 1;
Expect.equals(1, m.length);
- Expect.equals(false, m.isEmpty());
+ Expect.equals(false, m.isEmpty);
Expect.equals(1, m["one"]);
}
}
diff --git a/tests/corelib/is_operator_basic_types_test.dart b/tests/corelib/is_operator_basic_types_test.dart
index 1dfae1e..0e62b23 100644
--- a/tests/corelib/is_operator_basic_types_test.dart
+++ b/tests/corelib/is_operator_basic_types_test.dart
@@ -61,5 +61,5 @@
// Try to make it even harder.
var string = new String.fromCharCodes([new Date.now().year % 100 + 1]);
- check([string.charCodes(), string, null]);
+ check([string.charCodes, string, null]);
}
diff --git a/tests/corelib/linked_hash_map_test.dart b/tests/corelib/linked_hash_map_test.dart
index 60ea717..f90fa88 100644
--- a/tests/corelib/linked_hash_map_test.dart
+++ b/tests/corelib/linked_hash_map_test.dart
@@ -62,11 +62,11 @@
verifyValues(valuesInOrder);
clear();
- map.getKeys().forEach(testForEachKey);
+ map.keys.forEach(testForEachKey);
verifyKeys(keysInOrder);
clear();
- map.getValues().forEach(testForEachValue);
+ map.values.forEach(testForEachValue);
verifyValues(valuesInOrder);
// Remove and then insert.
@@ -82,11 +82,11 @@
verifyValues(valuesAfterBMove);
clear();
- map.getKeys().forEach(testForEachKey);
+ map.keys.forEach(testForEachKey);
verifyKeys(keysAfterBMove);
clear();
- map.getValues().forEach(testForEachValue);
+ map.values.forEach(testForEachValue);
verifyValues(valuesAfterBMove);
// Update.
@@ -99,11 +99,11 @@
verifyValues(valuesAfterAUpdate);
clear();
- map.getKeys().forEach(testForEachKey);
+ map.keys.forEach(testForEachKey);
verifyKeys(keysAfterBMove);
clear();
- map.getValues().forEach(testForEachValue);
+ map.values.forEach(testForEachValue);
verifyValues(valuesAfterAUpdate);
}
}
diff --git a/tests/corelib/list_iterators_test.dart b/tests/corelib/list_iterators_test.dart
index 91421ff..6f29061 100644
--- a/tests/corelib/list_iterators_test.dart
+++ b/tests/corelib/list_iterators_test.dart
@@ -5,16 +5,16 @@
class ListIteratorsTest {
static void checkListIterator(List a) {
Iterator it = a.iterator();
- Expect.equals(false, it.hasNext() == a.isEmpty());
+ Expect.equals(false, it.hasNext == a.isEmpty);
for (int i = 0; i < a.length; i++) {
- Expect.equals(true, it.hasNext());
+ Expect.equals(true, it.hasNext);
var elem = it.next();
}
- Expect.equals(false, it.hasNext());
+ Expect.equals(false, it.hasNext);
bool exceptionCaught = false;
try {
var eleme = it.next();
- } on NoMoreElementsException catch (e) {
+ } on StateError catch (e) {
exceptionCaught = true;
}
Expect.equals(true, exceptionCaught);
@@ -31,11 +31,11 @@
checkListIterator(g);
Iterator it = g.iterator();
- Expect.equals(true, it.hasNext());
+ Expect.equals(true, it.hasNext);
g.removeLast();
- Expect.equals(true, it.hasNext());
+ Expect.equals(true, it.hasNext);
g.removeLast();
- Expect.equals(false, it.hasNext());
+ Expect.equals(false, it.hasNext);
g.addAll([10, 20]);
int sum = 0;
diff --git a/tests/corelib/list_removeat_test.dart b/tests/corelib/list_removeat_test.dart
index 7010678..465f2f5 100644
--- a/tests/corelib/list_removeat_test.dart
+++ b/tests/corelib/list_removeat_test.dart
@@ -45,13 +45,13 @@
var l2 = new List(5);
for (var i = 0; i < 5; i++) l2[i] = i;
Expect.throws(() { l2.removeAt(2); },
- (e) => e is UnsupportedOperationException,
+ (e) => e is UnsupportedError,
"fixed-length");
// Unmodifiable list.
var l3 = const [0, 1, 2, 3, 4];
Expect.throws(() { l3.removeAt(2); },
- (e) => e is UnsupportedOperationException,
+ (e) => e is UnsupportedError,
"unmodifiable");
// Empty list is not special.
diff --git a/tests/corelib/list_test.dart b/tests/corelib/list_test.dart
index 159c6d5..672504f 100644
--- a/tests/corelib/list_test.dart
+++ b/tests/corelib/list_test.dart
@@ -12,7 +12,7 @@
static void expectValues(list, val1, val2, val3, val4) {
Expect.equals(true, list.length == 4);
Expect.equals(true, list.length == 4);
- Expect.equals(true, !list.isEmpty());
+ Expect.equals(true, !list.isEmpty);
Expect.equals(list[0], val1);
Expect.equals(list[1], val2);
Expect.equals(list[2], val3);
@@ -90,7 +90,7 @@
var exception = null;
try {
list.clear();
- } on UnsupportedOperationException catch (e) {
+ } on UnsupportedError catch (e) {
exception = e;
}
Expect.equals(true, exception != null);
@@ -98,11 +98,11 @@
static void testExpandableList() {
List list = new List();
- Expect.equals(true, list.isEmpty());
+ Expect.equals(true, list.isEmpty);
Expect.equals(list.length, 0);
list.add(4);
Expect.equals(1, list.length);
- Expect.equals(true, !list.isEmpty());
+ Expect.equals(true, !list.isEmpty);
Expect.equals(list.length, 1);
Expect.equals(list.length, 1);
Expect.equals(list.removeLast(), 4);
@@ -139,7 +139,7 @@
list.clear();
Expect.equals(list.length, 0);
Expect.equals(list.length, 0);
- Expect.equals(true, list.isEmpty());
+ Expect.equals(true, list.isEmpty);
}
}
diff --git a/tests/corelib/map_from_test.dart b/tests/corelib/map_from_test.dart
index 4570214..00d1a60 100644
--- a/tests/corelib/map_from_test.dart
+++ b/tests/corelib/map_from_test.dart
@@ -16,8 +16,8 @@
Expect.isTrue(otherMap is !LinkedHashMap);
Expect.equals(2, otherMap.length);
- Expect.equals(2, otherMap.getKeys().length);
- Expect.equals(2, otherMap.getValues().length);
+ Expect.equals(2, otherMap.keys.length);
+ Expect.equals(2, otherMap.values.length);
var count = (map) {
int count = 0;
@@ -37,8 +37,8 @@
Expect.isTrue(otherMap is !LinkedHashMap);
Expect.equals(2, otherMap.length);
- Expect.equals(2, otherMap.getKeys().length);
- Expect.equals(2, otherMap.getValues().length);
+ Expect.equals(2, otherMap.keys.length);
+ Expect.equals(2, otherMap.values.length);
int count(map) {
int count = 0;
@@ -53,15 +53,15 @@
map['c'] = 44;
Expect.equals(3, map.length);
Expect.equals(2, otherMap.length);
- Expect.equals(2, otherMap.getKeys().length);
- Expect.equals(2, otherMap.getValues().length);
+ Expect.equals(2, otherMap.keys.length);
+ Expect.equals(2, otherMap.values.length);
// Test that adding to otherMap does not change the original map.
otherMap['c'] = 44;
Expect.equals(3, map.length);
Expect.equals(3, otherMap.length);
- Expect.equals(3, otherMap.getKeys().length);
- Expect.equals(3, otherMap.getValues().length);
+ Expect.equals(3, otherMap.keys.length);
+ Expect.equals(3, otherMap.values.length);
}
testWithLinkedMap() {
@@ -71,7 +71,7 @@
Expect.isTrue(otherMap is HashMap);
Expect.isTrue(otherMap is LinkedHashMap);
var i = 1;
- for (var val in map.getValues()) {
+ for (var val in map.values) {
Expect.equals(i++, val);
}
}
diff --git a/tests/corelib/map_test.dart b/tests/corelib/map_test.dart
index bbb6db4..4b44793 100644
--- a/tests/corelib/map_test.dart
+++ b/tests/corelib/map_test.dart
@@ -148,11 +148,11 @@
other_map.clear();
Expect.equals(0, other_map.length);
- // Test Collection.getKeys.
+ // Test Collection.keys.
void testForEachCollection(value) {
other_map[value] = value;
}
- Collection keys = map.getKeys();
+ Collection keys = map.keys;
keys.forEach(testForEachCollection);
Expect.equals(true, other_map.containsKey(key1));
Expect.equals(true, other_map.containsKey(key2));
@@ -166,8 +166,8 @@
other_map.clear();
Expect.equals(0, other_map.length);
- // Test Collection.getValues.
- Collection values = map.getValues();
+ // Test Collection.values.
+ Collection values = map.values;
values.forEach(testForEachCollection);
Expect.equals(true, !other_map.containsKey(key1));
Expect.equals(true, !other_map.containsKey(key2));
@@ -211,7 +211,7 @@
});
Expect.equals(6, sum);
- List values = m.getKeys();
+ List values = m.keys;
Expect.equals(3, values.length);
String first = values[0];
String second = values[1];
diff --git a/tests/corelib/maps_test.dart b/tests/corelib/maps_test.dart
index b9abaa7..95b2e1d 100644
--- a/tests/corelib/maps_test.dart
+++ b/tests/corelib/maps_test.dart
@@ -106,7 +106,7 @@
Expect.equals(true, other_map.containsValue(value2));
Expect.equals(2, Maps.length(other_map));
- // Test Collection.getValues.
+ // Test Collection.values.
void testForEachCollection(value) {
other_map[value] = value;
}
diff --git a/tests/corelib/nan_infinity_test.dart b/tests/corelib/nan_infinity_test.dart
index 0bdb8cb..35bad82 100644
--- a/tests/corelib/nan_infinity_test.dart
+++ b/tests/corelib/nan_infinity_test.dart
@@ -5,12 +5,12 @@
// Dart test program for testing NaN and Infinity.
void main() {
- Expect.isTrue(double.NAN.isNaN());
- Expect.isFalse(double.NAN.isInfinite());
- Expect.isFalse(double.INFINITY.isNaN());
- Expect.isTrue(double.INFINITY.isInfinite());
- Expect.isFalse(double.NEGATIVE_INFINITY.isNaN());
- Expect.isTrue(double.NEGATIVE_INFINITY.isInfinite());
+ Expect.isTrue(double.NAN.isNaN);
+ Expect.isFalse(double.NAN.isInfinite);
+ Expect.isFalse(double.INFINITY.isNaN);
+ Expect.isTrue(double.INFINITY.isInfinite);
+ Expect.isFalse(double.NEGATIVE_INFINITY.isNaN);
+ Expect.isTrue(double.NEGATIVE_INFINITY.isInfinite);
Expect.equals("NaN", double.NAN.toString());
Expect.equals("Infinity", double.INFINITY.toString());
Expect.equals("-Infinity", double.NEGATIVE_INFINITY.toString());
@@ -32,6 +32,6 @@
Expect.isFalse(double.NEGATIVE_INFINITY > double.NAN);
Expect.isFalse(double.INFINITY == double.NAN);
Expect.isFalse(double.NEGATIVE_INFINITY == double.NAN);
- Expect.isTrue((3.0 * double.NAN).isNaN());
+ Expect.isTrue((3.0 * double.NAN).isNaN);
Expect.isTrue(double.INFINITY > double.NEGATIVE_INFINITY);
}
diff --git a/tests/corelib/null_test.dart b/tests/corelib/null_test.dart
index 7879ac5..8f30e6c 100644
--- a/tests/corelib/null_test.dart
+++ b/tests/corelib/null_test.dart
@@ -15,7 +15,7 @@
// These shouldn't throw.
x.runtimeType;
x.toString();
- x.hashCode();
+ x.hashCode;
// operator== is inherited from Object. It's the same as identical.
// It's not really testable.
@@ -23,8 +23,6 @@
Expect.isTrue(x == null);
// Methods can be closurized and yields the same result.
- var hc = x.hashCode;
- Expect.equals(null.hashCode(), hc());
var ts = x.toString;
Expect.equals(null.toString(), ts());
diff --git a/tests/corelib/queue_iterator_test.dart b/tests/corelib/queue_iterator_test.dart
index 488192e..4f9ffff 100644
--- a/tests/corelib/queue_iterator_test.dart
+++ b/tests/corelib/queue_iterator_test.dart
@@ -10,11 +10,11 @@
}
static void testThrows(Iterator<int> it) {
- Expect.equals(false, it.hasNext());
+ Expect.equals(false, it.hasNext);
var exception = null;
try {
it.next();
- } on NoMoreElementsException catch (e) {
+ } on StateError catch (e) {
exception = e;
}
Expect.equals(true, exception != null);
@@ -22,7 +22,7 @@
static int sum(int expected, Iterator<int> it) {
int count = 0;
- while (it.hasNext()) {
+ while (it.hasNext) {
count += it.next();
}
Expect.equals(expected, count);
@@ -35,7 +35,7 @@
queue.addLast(3);
Iterator<int> it = queue.iterator();
- Expect.equals(true, it.hasNext());
+ Expect.equals(true, it.hasNext);
sum(6, it);
testThrows(it);
}
@@ -48,7 +48,7 @@
queue.addLast(i);
}
Iterator<int> it = queue.iterator();
- Expect.equals(true, it.hasNext());
+ Expect.equals(true, it.hasNext);
sum(count, it);
testThrows(it);
}
@@ -56,7 +56,7 @@
static void testEmptyQueue() {
Queue<int> queue = new Queue<int>();
Iterator<int> it = queue.iterator();
- Expect.equals(false, it.hasNext());
+ Expect.equals(false, it.hasNext);
sum(0, it);
testThrows(it);
}
diff --git a/tests/corelib/queue_test.dart b/tests/corelib/queue_test.dart
index c49f517..adaa00f 100644
--- a/tests/corelib/queue_test.dart
+++ b/tests/corelib/queue_test.dart
@@ -73,7 +73,7 @@
var exception = null;
try {
queue.removeFirst();
- } on EmptyQueueException catch (e) {
+ } on StateError catch (e) {
exception = e;
}
Expect.equals(true, exception != null);
@@ -82,7 +82,7 @@
exception = null;
try {
queue.removeLast();
- } on EmptyQueueException catch (e) {
+ } on StateError catch (e) {
exception = e;
}
Expect.equals(true, exception != null);
@@ -90,11 +90,11 @@
queue.addFirst(1);
queue.addFirst(2);
- Expect.equals(2, queue.first());
- Expect.equals(1, queue.last());
+ Expect.equals(2, queue.first);
+ Expect.equals(1, queue.last);
queue.addLast(3);
- Expect.equals(3, queue.last());
+ Expect.equals(3, queue.last);
bool isGreaterThanOne(int value) {
return (value > 1);
}
diff --git a/tests/corelib/reg_exp5_test.dart b/tests/corelib/reg_exp5_test.dart
index 455d69b..17217a8 100644
--- a/tests/corelib/reg_exp5_test.dart
+++ b/tests/corelib/reg_exp5_test.dart
@@ -17,7 +17,7 @@
Expect.equals(null, fm);
Iterable<Match> am = new RegExp(r"^\w+$").allMatches(str);
- Expect.isFalse(am.iterator().hasNext());
+ Expect.isFalse(am.iterator().hasNext);
Expect.equals(null, new RegExp(r"^\w+$").stringMatch(str));
}
diff --git a/tests/corelib/reg_exp_all_matches_test.dart b/tests/corelib/reg_exp_all_matches_test.dart
index efd5a5a..fb4616c 100644
--- a/tests/corelib/reg_exp_all_matches_test.dart
+++ b/tests/corelib/reg_exp_all_matches_test.dart
@@ -8,25 +8,25 @@
static testIterator() {
var matches = new RegExp("foo").allMatches("foo foo");
Iterator it = matches.iterator();
- Expect.equals(true, it.hasNext());
+ Expect.equals(true, it.hasNext);
Expect.equals('foo', it.next().group(0));
- Expect.equals(true, it.hasNext());
+ Expect.equals(true, it.hasNext);
Expect.equals('foo', it.next().group(0));
- Expect.equals(false, it.hasNext());
+ Expect.equals(false, it.hasNext);
// Run two iterators over the same results.
it = matches.iterator();
Iterator it2 = matches.iterator();
- Expect.equals(true, it.hasNext());
- Expect.equals(true, it2.hasNext());
+ Expect.equals(true, it.hasNext);
+ Expect.equals(true, it2.hasNext);
Expect.equals('foo', it.next().group(0));
Expect.equals('foo', it2.next().group(0));
- Expect.equals(true, it.hasNext());
- Expect.equals(true, it2.hasNext());
+ Expect.equals(true, it.hasNext);
+ Expect.equals(true, it2.hasNext);
Expect.equals('foo', it.next().group(0));
Expect.equals('foo', it2.next().group(0));
- Expect.equals(false, it.hasNext());
- Expect.equals(false, it2.hasNext());
+ Expect.equals(false, it.hasNext);
+ Expect.equals(false, it2.hasNext);
}
static testForEach() {
@@ -87,9 +87,9 @@
static testIsEmpty() {
var matches = new RegExp("foo?").allMatches("foo fo foo fo");
- Expect.equals(false, matches.isEmpty());
+ Expect.equals(false, matches.isEmpty);
matches = new RegExp("fooo").allMatches("foo fo foo fo");
- Expect.equals(true, matches.isEmpty());
+ Expect.equals(true, matches.isEmpty);
}
static testGetCount() {
diff --git a/tests/corelib/reg_exp_start_end_test.dart b/tests/corelib/reg_exp_start_end_test.dart
index 6bf9764..80b4634 100644
--- a/tests/corelib/reg_exp_start_end_test.dart
+++ b/tests/corelib/reg_exp_start_end_test.dart
@@ -8,10 +8,10 @@
var it = matches.iterator();
int start = 0;
int end = 5;
- while (it.hasNext()) {
+ while (it.hasNext) {
Match match = it.next();
- Expect.equals(start, match.start());
- Expect.equals(end, match.end());
+ Expect.equals(start, match.start);
+ Expect.equals(end, match.end);
start += 6;
end += 6;
}
diff --git a/tests/corelib/set_iterator_test.dart b/tests/corelib/set_iterator_test.dart
index 918d211..572f502 100644
--- a/tests/corelib/set_iterator_test.dart
+++ b/tests/corelib/set_iterator_test.dart
@@ -5,7 +5,7 @@
class FixedHashCode {
final int _hashCode;
const FixedHashCode(this._hashCode);
- int hashCode() { return _hashCode; }
+ int get hashCode { return _hashCode; }
}
class SetIteratorTest {
@@ -20,11 +20,11 @@
}
static void testThrows(Iterator<int> it) {
- Expect.equals(false, it.hasNext());
+ Expect.equals(false, it.hasNext);
var exception = null;
try {
it.next();
- } on NoMoreElementsException catch (e) {
+ } on StateError catch (e) {
exception = e;
}
Expect.equals(true, exception != null);
@@ -32,7 +32,7 @@
static int sum(int expected, Iterator<int> it) {
int count = 0;
- while (it.hasNext()) {
+ while (it.hasNext) {
count += it.next();
}
Expect.equals(expected, count);
@@ -45,7 +45,7 @@
set.add(3);
Iterator<int> it = set.iterator();
- Expect.equals(true, it.hasNext());
+ Expect.equals(true, it.hasNext);
sum(6, it);
testThrows(it);
}
@@ -58,7 +58,7 @@
set.add(i);
}
Iterator<int> it = set.iterator();
- Expect.equals(true, it.hasNext());
+ Expect.equals(true, it.hasNext);
sum(count, it);
testThrows(it);
}
@@ -66,7 +66,7 @@
static void testEmptySet() {
Set<int> set = new Set<int>();
Iterator<int> it = set.iterator();
- Expect.equals(false, it.hasNext());
+ Expect.equals(false, it.hasNext);
sum(0, it);
testThrows(it);
}
@@ -80,7 +80,7 @@
set.remove(i);
}
Iterator<int> it = set.iterator();
- Expect.equals(false, it.hasNext());
+ Expect.equals(false, it.hasNext);
sum(0, it);
testThrows(it);
@@ -91,7 +91,7 @@
else count += i;
}
it = set.iterator();
- Expect.equals(true, it.hasNext());
+ Expect.equals(true, it.hasNext);
sum(count, it);
testThrows(it);
}
diff --git a/tests/corelib/set_test.dart b/tests/corelib/set_test.dart
index 59b8f13..79821b5 100644
--- a/tests/corelib/set_test.dart
+++ b/tests/corelib/set_test.dart
@@ -76,7 +76,7 @@
// Test Set.filter.
testFilter(int val) {
- return val.isEven();
+ return val.isEven;
}
Set filtered = set.filter(testFilter);
diff --git a/tests/corelib/sort_test.dart b/tests/corelib/sort_test.dart
index a7cee14..5f18ecc 100644
--- a/tests/corelib/sort_test.dart
+++ b/tests/corelib/sort_test.dart
@@ -9,7 +9,7 @@
main() {
var compare = (a, b) => a.compareTo(b);
- var sort = (list) => DualPivotQuicksort.sort(list, compare);
+ var sort = (list) => list.sort(compare);
new SortHelper(sort, compare).run();
compare = (a, b) => -a.compareTo(b);
diff --git a/tests/corelib/stopwatch_test.dart b/tests/corelib/stopwatch_test.dart
index e942ea8e..48141a3 100644
--- a/tests/corelib/stopwatch_test.dart
+++ b/tests/corelib/stopwatch_test.dart
@@ -12,36 +12,36 @@
sw.start();
for (int i = 0; i < 10000; i++) {
parseInt(i.toString());
- if (sw.elapsed() > 0) {
+ if (sw.elapsedTicks > 0) {
break;
}
}
- return sw.elapsed() > 0;
+ return sw.elapsedTicks > 0;
}
static bool checkStopping(Stopwatch sw) {
sw.stop();
- int v1 = sw.elapsed();
+ int v1 = sw.elapsedTicks;
Expect.isTrue(v1 > 0); // Expect a non-zero elapsed time.
Stopwatch sw2 = new Stopwatch(); // Used for verification.
sw2.start();
int sw2LastElapsed = 0;
for (int i = 0; i < 100000; i++) {
parseInt(i.toString());
- int v2 = sw.elapsed();
+ int v2 = sw.elapsedTicks;
if (v1 != v2) {
return false;
}
// If sw2 elapsed twice then sw must have advanced too if it wasn't
// stopped.
- if (sw2LastElapsed > 0 && sw2.elapsed() > sw2LastElapsed) {
+ if (sw2LastElapsed > 0 && sw2.elapsedTicks > sw2LastElapsed) {
break;
}
- sw2LastElapsed = sw2.elapsed();
+ sw2LastElapsed = sw2.elapsedTicks;
}
// The test only makes sense if measureable time elapsed and elapsed time
// on the stopped Stopwatch did not increase.
- Expect.isTrue(sw2.elapsed() > 0);
+ Expect.isTrue(sw2.elapsedTicks > 0);
return true;
}
@@ -50,21 +50,21 @@
sw.start();
for (int i = 0; i < 100000; i++) {
parseInt(i.toString());
- if (sw.elapsed() > 0) {
+ if (sw.elapsedTicks > 0) {
break;
}
}
sw.stop();
- int initial = sw.elapsed();
+ int initial = sw.elapsedTicks;
sw.start();
for (int i = 0; i < 100000; i++) {
parseInt(i.toString());
- if (sw.elapsed() > initial) {
+ if (sw.elapsedTicks > initial) {
break;
}
}
sw.stop();
- Expect.isTrue(sw.elapsed() > initial);
+ Expect.isTrue(sw.elapsedTicks > initial);
}
static checkReset() {
@@ -72,29 +72,29 @@
sw.start();
for (int i = 0; i < 100000; i++) {
parseInt(i.toString());
- if (sw.elapsed() > 0) {
+ if (sw.elapsedTicks > 0) {
break;
}
}
sw.stop();
sw.reset();
- Expect.equals(0, sw.elapsed());
+ Expect.equals(0, sw.elapsedTicks);
sw.start();
for (int i = 0; i < 100000; i++) {
parseInt(i.toString());
- if (sw.elapsed() > 0) {
+ if (sw.elapsedTicks > 0) {
break;
}
}
sw.reset();
for (int i = 0; i < 100000; i++) {
parseInt(i.toString());
- if (sw.elapsed() > 0) {
+ if (sw.elapsedTicks > 0) {
break;
}
}
sw.stop();
- Expect.isTrue(sw.elapsed() > 0);
+ Expect.isTrue(sw.elapsedTicks > 0);
}
static testMain() {
diff --git a/tests/corelib/string_buffer_test.dart b/tests/corelib/string_buffer_test.dart
index 94b941c..fac6560 100644
--- a/tests/corelib/string_buffer_test.dart
+++ b/tests/corelib/string_buffer_test.dart
@@ -7,7 +7,7 @@
class StringBufferTest {
static testConstructor() {
StringBuffer bf = new StringBuffer("");
- Expect.equals(true, bf.isEmpty());
+ Expect.equals(true, bf.isEmpty);
bf = new StringBuffer("abc");
Expect.equals(3, bf.length);
@@ -16,7 +16,7 @@
static testAdd() {
StringBuffer bf = new StringBuffer("");
- Expect.equals(true, bf.isEmpty());
+ Expect.equals(true, bf.isEmpty);
bf.add("a");
Expect.equals(1, bf.length);
@@ -80,9 +80,9 @@
static testIsEmpty() {
StringBuffer bf = new StringBuffer("");
- Expect.equals(true, bf.isEmpty());
+ Expect.equals(true, bf.isEmpty);
bf.add("foo");
- Expect.equals(false, bf.isEmpty());
+ Expect.equals(false, bf.isEmpty);
}
static testAddAll() {
diff --git a/tests/corelib/string_pattern_test.dart b/tests/corelib/string_pattern_test.dart
index 3fb3533..440855d 100644
--- a/tests/corelib/string_pattern_test.dart
+++ b/tests/corelib/string_pattern_test.dart
@@ -18,7 +18,7 @@
// Also tests that RegExp groups don't work.
String helloPattern = "with (hello)";
Iterable<Match> matches = helloPattern.allMatches(str);
- Expect.isFalse(matches.iterator().hasNext());
+ Expect.isFalse(matches.iterator().hasNext);
}
testOneMatch() {
@@ -26,13 +26,13 @@
Iterable<Match> matches = helloPattern.allMatches(str);
var iterator = matches.iterator();
Match match = iterator.next();
- Expect.isFalse(iterator.hasNext());
- Expect.equals(str.indexOf('with', 0), match.start());
- Expect.equals(str.indexOf('with', 0) + helloPattern.length, match.end());
+ Expect.isFalse(iterator.hasNext);
+ Expect.equals(str.indexOf('with', 0), match.start);
+ Expect.equals(str.indexOf('with', 0) + helloPattern.length, match.end);
Expect.equals(helloPattern, match.pattern);
Expect.equals(str, match.str);
Expect.equals(helloPattern, match[0]);
- Expect.equals(0, match.groupCount());
+ Expect.equals(0, match.groupCount);
}
testTwoMatches() {
@@ -43,14 +43,14 @@
int start = 0;
for (var match in matches) {
count++;
- Expect.equals(str.indexOf('hello', start), match.start());
+ Expect.equals(str.indexOf('hello', start), match.start);
Expect.equals(
- str.indexOf('hello', start) + helloPattern.length, match.end());
+ str.indexOf('hello', start) + helloPattern.length, match.end);
Expect.equals(helloPattern, match.pattern);
Expect.equals(str, match.str);
Expect.equals(helloPattern, match[0]);
- Expect.equals(0, match.groupCount());
- start = match.end();
+ Expect.equals(0, match.groupCount);
+ start = match.end;
}
Expect.equals(2, count);
}
@@ -58,19 +58,19 @@
testEmptyPattern() {
String pattern = "";
Iterable<Match> matches = pattern.allMatches(str);
- Expect.isTrue(matches.iterator().hasNext());
+ Expect.isTrue(matches.iterator().hasNext);
}
testEmptyString() {
String pattern = "foo";
String str = "";
Iterable<Match> matches = pattern.allMatches(str);
- Expect.isFalse(matches.iterator().hasNext());
+ Expect.isFalse(matches.iterator().hasNext);
}
testEmptyPatternAndString() {
String pattern = "";
String str = "";
Iterable<Match> matches = pattern.allMatches(str);
- Expect.isTrue(matches.iterator().hasNext());
+ Expect.isTrue(matches.iterator().hasNext);
}
diff --git a/tests/corelib/string_test.dart b/tests/corelib/string_test.dart
index 786a9cf..0dd8e54 100644
--- a/tests/corelib/string_test.dart
+++ b/tests/corelib/string_test.dart
@@ -284,7 +284,7 @@
static testCharCodes() {
test(str) {
- var list = str.charCodes();
+ var list = str.charCodes;
Expect.equals(str.length, list.length);
for (int i = 0; i < str.length; i++) {
Expect.equals(str.charCodeAt(i), list[i]);
diff --git a/tests/html/canvas_pixel_array_type_alias_test.dart b/tests/html/canvas_pixel_array_type_alias_test.dart
index 8ef7565..5560d9f 100644
--- a/tests/html/canvas_pixel_array_type_alias_test.dart
+++ b/tests/html/canvas_pixel_array_type_alias_test.dart
@@ -31,7 +31,6 @@
Uint8ClampedArray data = image.data;
// It is legal for the dart2js compiler to believe the type of the native
// ImageData.data and elides the check, so check the type explicitly:
- // OPTIONALS expect(confuseType(data) is Uint8ClampedArray, reason: 'canvas array type');
expect(confuseType(data) is Uint8ClampedArray, isTrue, 'canvas array type');
expect(data, hasLength(40000));
diff --git a/tests/html/documentfragment_test.dart b/tests/html/documentfragment_test.dart
index fbbd642..b312cf6 100644
--- a/tests/html/documentfragment_test.dart
+++ b/tests/html/documentfragment_test.dart
@@ -28,7 +28,7 @@
try {
fn();
} catch (e) {
- if (e is IllegalAccessException || e is UnsupportedOperationException) {
+ if (e is UnsupportedError) {
return;
}
}
@@ -117,7 +117,7 @@
test('is initially empty', () {
elements = new DocumentFragment().elements;
Expect.listEquals([], elements);
- Expect.isTrue(elements.isEmpty());
+ Expect.isTrue(elements.isEmpty);
});
test('filters out non-element nodes', () {
@@ -163,10 +163,10 @@
["I"], _nodeStrings(elements.filter((e) => e.tagName == "I")));
Expect.isTrue(elements.every((e) => e is Element));
Expect.isTrue(elements.some((e) => e.tagName == "U"));
- Expect.isFalse(elements.isEmpty());
+ Expect.isFalse(elements.isEmpty);
Expect.equals(4, elements.length);
Expect.equals("I", elements[2].tagName);
- Expect.equals("U", elements.last().tagName);
+ Expect.equals("U", elements.last.tagName);
});
test('setting elements overwrites nodes as well', () {
@@ -298,7 +298,7 @@
expectEmptyRect(rect.offset);
expectEmptyRect(rect.scroll);
expectEmptyRect(rect.bounding);
- Expect.isTrue(rect.clientRects.isEmpty());
+ Expect.isTrue(rect.clientRects.isEmpty);
}));
Expect.equals("false", fragment.contentEditable);
Expect.equals(-1, fragment.tabIndex);
@@ -316,9 +316,9 @@
Expect.isNull(fragment.previousElementSibling);
Expect.isNull(fragment.offsetParent);
Expect.isNull(fragment.parent);
- Expect.isTrue(fragment.attributes.isEmpty());
- Expect.isTrue(fragment.classes.isEmpty());
- Expect.isTrue(fragment.dataAttributes.isEmpty());
+ Expect.isTrue(fragment.attributes.isEmpty);
+ Expect.isTrue(fragment.classes.isEmpty);
+ Expect.isTrue(fragment.dataAttributes.isEmpty);
Expect.isFalse(fragment.matchesSelector("foo"));
Expect.isFalse(fragment.matchesSelector("*"));
});
diff --git a/tests/html/element_classes_test.dart b/tests/html/element_classes_test.dart
index e4a8d50..5dd611c 100644
--- a/tests/html/element_classes_test.dart
+++ b/tests/html/element_classes_test.dart
@@ -89,8 +89,8 @@
});
test('isEmpty', () {
- Expect.isFalse(makeClassSet().isEmpty());
- Expect.isTrue(makeElement().classes.isEmpty());
+ Expect.isFalse(makeClassSet().isEmpty);
+ Expect.isTrue(makeElement().classes.isEmpty);
});
test('length', () {
diff --git a/tests/html/element_test.dart b/tests/html/element_test.dart
index 2448b83..511eef7 100644
--- a/tests/html/element_test.dart
+++ b/tests/html/element_test.dart
@@ -497,7 +497,7 @@
test('last', () {
var el = makeElementWithChildren();
- Expect.isTrue(el.elements.last() is InputElement);
+ Expect.isTrue(el.elements.last is InputElement);
});
test('forEach', () {
@@ -530,8 +530,8 @@
});
test('isEmpty', () {
- Expect.isTrue(makeElement().elements.isEmpty());
- Expect.isFalse(makeElementWithChildren().elements.isEmpty());
+ Expect.isTrue(makeElement().elements.isEmpty);
+ Expect.isFalse(makeElementWithChildren().elements.isEmpty);
});
test('length', () {
@@ -557,13 +557,13 @@
test('add', () {
var el = makeElement();
el.elements.add(new Element.tag('hr'));
- Expect.isTrue(el.elements.last() is HRElement);
+ Expect.isTrue(el.elements.last is HRElement);
});
test('addLast', () {
var el = makeElement();
el.elements.addLast(new Element.tag('hr'));
- Expect.isTrue(el.elements.last() is HRElement);
+ Expect.isTrue(el.elements.last is HRElement);
});
test('iterator', () {
@@ -631,12 +631,12 @@
void testUnsupported(String name, void f()) {
test(name, () {
- Expect.throws(f, (e) => e is UnsupportedOperationException);
+ Expect.throws(f, (e) => e is UnsupportedError);
});
}
test('last', () {
- Expect.isTrue(getQueryAll().last() is HRElement);
+ Expect.isTrue(getQueryAll().last is HRElement);
});
test('forEach', () {
@@ -672,8 +672,8 @@
});
test('isEmpty', () {
- Expect.isTrue(getEmptyQueryAll().isEmpty());
- Expect.isFalse(getQueryAll().isEmpty());
+ Expect.isTrue(getEmptyQueryAll().isEmpty);
+ Expect.isFalse(getQueryAll().isEmpty);
});
test('length', () {
diff --git a/tests/html/fileapi_test.dart b/tests/html/fileapi_test.dart
index f753b01..82aad86 100644
--- a/tests/html/fileapi_test.dart
+++ b/tests/html/fileapi_test.dart
@@ -25,7 +25,6 @@
group('getDirectory', () {
test('directoryDoesntExist', () {
- /* OPTIONALS
fs.root.getDirectory(
'directory2',
options: {},
@@ -35,20 +34,9 @@
errorCallback: expectAsync1((FileError e) {
expect(e.code, equals(FileError.NOT_FOUND_ERR));
}));
- */
- fs.root.getDirectory(
- 'directory2',
- {},
- (e) {
- fail('Should not be reached');
- },
- expectAsync1((FileError e) {
- expect(e.code, equals(FileError.NOT_FOUND_ERR));
- }));
});
test('directoryCreate', () {
- /* OPTIONALS
fs.root.getDirectory(
'directory3',
options: {'create': true},
@@ -58,23 +46,12 @@
errorCallback: (e) {
fail('Got file error: ${e.code}');
});
- */
- fs.root.getDirectory(
- 'directory3',
- {'create': true},
- expectAsync1((DirectoryEntry e) {
- expect(e.name, equals('directory3'));
- }),
- (e) {
- fail('Got file error: ${e.code}');
- });
});
});
group('getFile', () {
test('fileDoesntExist', () {
- /* OPTIONALS
fs.root.getFile(
'file2',
options: {},
@@ -84,20 +61,9 @@
errorCallback: expectAsync1((FileError e) {
expect(e.code, equals(FileError.NOT_FOUND_ERR));
}));
- */
- fs.root.getFile(
- 'file2',
- {},
- (e) {
- fail('Should not be reached');
- },
- expectAsync1((FileError e) {
- expect(e.code, equals(FileError.NOT_FOUND_ERR));
- }));
});
test('fileCreate', () {
- /* OPTIONALS
fs.root.getFile(
'file4',
options: {'create': true},
@@ -109,17 +75,5 @@
fail('Got file error: ${e.code}');
});
});
- */
- fs.root.getFile(
- 'file4',
- {'create': true},
- expectAsync1((FileEntry e) {
- expect(e.name, equals('file4'));
- expect(e.isFile, equals(true));
- }),
- (e) {
- fail('Got file error: ${e.code}');
- });
- });
});
}
diff --git a/tests/html/html.status b/tests/html/html.status
index a02e9cf..5f77f84 100644
--- a/tests/html/html.status
+++ b/tests/html/html.status
@@ -44,16 +44,55 @@
[ $compiler == none && $runtime == drt && $system == linux]
documentfragment_test: Pass, Timeout
-[ $runtime == ie9 || $runtime == safari || $runtime == ff || $runtime == chrome || $runtime == opera ]
+[ $runtime == ie9 || $runtime == ie10 || $runtime == safari || $runtime == ff || $runtime == chrome || $runtime == opera ]
# TODO(vsm): Triage DOM tests.
htmloptionscollection_test: Fail # Issue 3813.
shadow_dom_test: Skip # No ShadowDOM support except on tip dartium.
shadow_dom_layout_test: Skip
unknownelement_test: Fail # Issue 4189
-[ $runtime == dartium || $runtime == chrome || $runtime == ie9 || $runtime == safari || $runtime == ff || $runtime == opera ]
+[ $runtime == dartium || $runtime == chrome || $runtime == ie9 || $runtime == ie10 || $runtime == safari || $runtime == ff || $runtime == opera ]
history_test: Fail
+[$runtime == ie10 ]
+# TODO(efortuna, blois): Triage.
+audiobuffersourcenode_test: Fail
+audiocontext_test: Fail
+canvasrenderingcontext2d_test: Fail, Pass
+contentelement_test: Fail
+css_test: Fail
+element_test: Fail
+element_webkit_test: Fail
+exceptions_test: Fail
+fileapi_test: Fail
+indexeddb_1_test: Fail
+indexeddb_2_test: Fail
+indexeddb_3_test: Fail
+indexeddb_4_test: Fail
+inner_frame_test: Skip
+isolates_test: Skip
+js_interop_2_test: Fail
+js_interop_3_test: Fail
+js_interop_4_test: Fail
+localstorage_test: Fail
+measurement_test: Fail, Pass
+messageevent_test: Fail
+mutationobserver_test: Fail
+node_test: Fail
+serialized_script_value_test: Fail
+storage_test: Fail, Pass
+svgelement2_test: Fail
+svgelement_test: Fail
+svg_3_test: Fail
+typed_arrays_1_test: Fail
+typed_arrays_arraybuffer_test: Fail
+typed_arrays_dataview_test: Fail
+url_test: Fail
+websql_test: Fail
+window_open_test: Skip
+xhr_test: Fail
+xsltprocessor_test: Fail
+
[ $runtime == ie9 ]
contentelement_test: Fail # ie9 does not support content element.
form_data_test: Fail # Issue 4793.
@@ -146,6 +185,49 @@
svgelement_test: Fail
url_test: Fail
+[ $runtime == opera && $system == windows ]
+element_test: Skip # Browser is already closed by the time we get results?
+htmlelement_test: Fail, Pass
+
+[ $runtime == opera && $system == macos ]
+element_test: Crash
+
+[ $runtime == opera ]
+audiobuffersourcenode_test: Fail
+cache_test: Fail
+canvas_test: Pass,Fail
+contentelement_test: Fail
+audiocontext_test: Fail
+blob_constructor_test: Fail
+canvas_using_html_test: Fail
+canvas_test: Fail
+css_test: Fail
+cssstyledeclaration_test: Fail
+element_add_test: Fail
+element_constructor_1_test: Fail
+element_webkit_test: Fail
+exceptions_test: Fail
+indexeddb_1_test: Fail
+indexeddb_2_test: Fail
+indexeddb_3_test: Fail
+indexeddb_4_test: Fail
+mutationobserver_test: Fail
+performance_api_test: Fail
+serialized_script_value_test: Fail
+svg_3_test: Fail
+svgelement_test: Fail
+svgelement2_test: Fail
+typed_arrays_1_test: Fail
+typed_arrays_arraybuffer_test: Fail
+url_test: Fail
+websocket_test: Fail
+fileapi_test: Skip # Timeout.
+inner_frame_test: Skip # Timeout.
+js_interop_3_test: Skip # Timeout.
+js_interop_4_test: Skip # Timeout.
+isolates_test: Skip # Timeout.
+websql_test: Skip # Timeout.
+
[ $runtime == ff ]
audiobuffersourcenode_test: Fail # FF only has Audio element.
audiocontext_test: Fail # FF only has Audio element
@@ -188,8 +270,6 @@
*: Skip
# TODO(jmesserly): now that we have a bot, we need to set up Opera testing.
-[ $runtime == opera ]
-*: Skip
[ $compiler == dart2js && $runtime == drt ]
# Unknown error - should investigate.
diff --git a/tests/html/htmlcollection_test.dart b/tests/html/htmlcollection_test.dart
index 0a9d0b2..e7cc4d1 100644
--- a/tests/html/htmlcollection_test.dart
+++ b/tests/html/htmlcollection_test.dart
@@ -130,8 +130,8 @@
Expect.equals(4, someChecked.length);
Expect.equals(0, emptyDiv.length);
- Expect.isFalse(someChecked.isEmpty());
- Expect.isTrue(emptyDiv.isEmpty());
+ Expect.isFalse(someChecked.isEmpty);
+ Expect.isTrue(emptyDiv.isEmpty);
root.remove();
});
@@ -211,7 +211,7 @@
Expect.equals(4, someChecked.length);
- Expect.equals(someChecked[3], someChecked.last());
+ Expect.equals(someChecked[3], someChecked.last);
root.remove();
});
diff --git a/tests/html/htmlelement_test.dart b/tests/html/htmlelement_test.dart
index 36e7e75..ba83071 100644
--- a/tests/html/htmlelement_test.dart
+++ b/tests/html/htmlelement_test.dart
@@ -32,13 +32,13 @@
test('dataAttributes', () {
Element div = new Element.tag('div');
- Expect.isTrue(div.dataAttributes.isEmpty());
+ Expect.isTrue(div.dataAttributes.isEmpty);
Expect.equals(null, div.dataAttributes['foo']);
- Expect.isTrue(div.dataAttributes.isEmpty());
+ Expect.isTrue(div.dataAttributes.isEmpty);
div.dataAttributes['foo'] = 'foo-value';
Expect.equals('foo-value', div.dataAttributes['foo']);
- Expect.isFalse(div.dataAttributes.isEmpty());
+ Expect.isFalse(div.dataAttributes.isEmpty);
Expect.isTrue(div.dataAttributes.containsValue('foo-value'));
Expect.isFalse(div.dataAttributes.containsValue('bar-value'));
@@ -69,23 +69,23 @@
Expect.setEquals(const <String> ['foo-value', 'bar-value'], values);
Expect.setEquals(const <String> ['foo', 'bar'],
- new List<String>.from(div.dataAttributes.getKeys()));
+ new List<String>.from(div.dataAttributes.keys));
Expect.setEquals(const <String> ['foo-value', 'bar-value'],
- new List<String>.from(div.dataAttributes.getValues()));
+ new List<String>.from(div.dataAttributes.values));
Expect.equals(2, div.dataAttributes.length);
- Expect.isFalse(div.dataAttributes.isEmpty());
+ Expect.isFalse(div.dataAttributes.isEmpty);
Expect.isNull(div.dataAttributes.remove('qux'));
Expect.equals(2, div.dataAttributes.length);
- Expect.isFalse(div.dataAttributes.isEmpty());
+ Expect.isFalse(div.dataAttributes.isEmpty);
Expect.equals('foo-value', div.dataAttributes.remove('foo'));
Expect.equals(1, div.dataAttributes.length);
- Expect.isFalse(div.dataAttributes.isEmpty());
+ Expect.isFalse(div.dataAttributes.isEmpty);
div.dataAttributes.clear();
Expect.equals(0, div.dataAttributes.length);
- Expect.isTrue(div.dataAttributes.isEmpty());
+ Expect.isTrue(div.dataAttributes.isEmpty);
});
}
diff --git a/tests/html/js_interop_3_test.dart b/tests/html/js_interop_3_test.dart
index 0894c3b..c8ab351 100644
--- a/tests/html/js_interop_3_test.dart
+++ b/tests/html/js_interop_3_test.dart
@@ -31,7 +31,7 @@
Expect.equals('Hello', message['a']);
Expect.equals('World', message['b']);
Expect.equals(42, message['c']);
- Expect.equals(3, message.getKeys().length);
+ Expect.equals(3, message.keys.length);
return 42;
};
diff --git a/tests/html/localstorage_test.dart b/tests/html/localstorage_test.dart
index 5700183..38e4204 100644
--- a/tests/html/localstorage_test.dart
+++ b/tests/html/localstorage_test.dart
@@ -87,12 +87,12 @@
});
testWithLocalStorage('getKeys', () {
- Expect.setEquals(['key1', 'key2', 'key3'], window.localStorage.getKeys());
+ Expect.setEquals(['key1', 'key2', 'key3'], window.localStorage.keys);
});
testWithLocalStorage('getVals', () {
Expect.setEquals(['val1', 'val2', 'val3'],
- window.localStorage.getValues());
+ window.localStorage.values);
});
testWithLocalStorage('length', () {
@@ -102,8 +102,8 @@
});
testWithLocalStorage('isEmpty', () {
- Expect.isFalse(window.localStorage.isEmpty());
+ Expect.isFalse(window.localStorage.isEmpty);
window.localStorage.clear();
- Expect.isTrue(window.localStorage.isEmpty());
+ Expect.isTrue(window.localStorage.isEmpty);
});
}
diff --git a/tests/html/node_test.dart b/tests/html/node_test.dart
index 44bd28e..80ab9a9 100644
--- a/tests/html/node_test.dart
+++ b/tests/html/node_test.dart
@@ -56,7 +56,7 @@
test('last', () {
var node = makeNodeWithChildren();
- Expect.isTrue(node.nodes.last() is Comment);
+ Expect.isTrue(node.nodes.last is Comment);
});
test('forEach', () {
@@ -88,8 +88,8 @@
});
test('isEmpty', () {
- Expect.isTrue(makeNode().nodes.isEmpty());
- Expect.isFalse(makeNodeWithChildren().nodes.isEmpty());
+ Expect.isTrue(makeNode().nodes.isEmpty);
+ Expect.isFalse(makeNodeWithChildren().nodes.isEmpty);
});
test('length', () {
@@ -115,13 +115,13 @@
test('add', () {
var node = makeNode();
node.nodes.add(new Element.tag('hr'));
- Expect.isTrue(node.nodes.last() is HRElement);
+ Expect.isTrue(node.nodes.last is HRElement);
});
test('addLast', () {
var node = makeNode();
node.nodes.addLast(new Element.tag('hr'));
- Expect.isTrue(node.nodes.last() is HRElement);
+ Expect.isTrue(node.nodes.last is HRElement);
});
test('iterator', () {
diff --git a/tests/html/query_test.dart b/tests/html/query_test.dart
index c7e936e..6abae94 100644
--- a/tests/html/query_test.dart
+++ b/tests/html/query_test.dart
@@ -48,6 +48,6 @@
test('queryAll (None)', () {
List l = queryAll('video');
- Expect.isTrue(l.isEmpty());
+ Expect.isTrue(l.isEmpty);
});
}
diff --git a/tests/html/queryall_test.dart b/tests/html/queryall_test.dart
index 6b70157..181f5c3 100644
--- a/tests/html/queryall_test.dart
+++ b/tests/html/queryall_test.dart
@@ -76,7 +76,7 @@
test('immutable', () {
List<Element> list = div.queryAll('*');
int len = list.length;
- expect(() { list.add(new DivElement()); }, throwsException);
+ expect(() { list.add(new DivElement()); }, throwsUnsupportedError);
expect(list.length, equals(len));
});
}
diff --git a/tests/html/selectelement_test.dart b/tests/html/selectelement_test.dart
index 2a766c3..4adb45f 100644
--- a/tests/html/selectelement_test.dart
+++ b/tests/html/selectelement_test.dart
@@ -53,6 +53,6 @@
];
element.elements.addAll(options);
// Use last to make sure that the list was correctly wrapped.
- expect(element.options.last(), options[3]);
+ expect(element.options.last, options[3]);
});
}
diff --git a/tests/html/typed_arrays_dataview_test.dart b/tests/html/typed_arrays_dataview_test.dart
index 08029d8..2a486f0 100644
--- a/tests/html/typed_arrays_dataview_test.dart
+++ b/tests/html/typed_arrays_dataview_test.dart
@@ -37,18 +37,12 @@
expect(dv.byteLength, equals(10 - 2));
expect(dv.getInt16(0), equals(1023));
- expect(dv.getInt16(0, false), equals(1023));
- // OPTIONALS expect(dv.getInt16(0, littleEndian: false), equals(1023));
- expect(dv.getInt16(0, false), equals(1023));
- expect(dv.getInt16(0, true), equals(-253));
- // OPTIONALS expect(dv.getInt16(0, littleEndian: true), equals(-253));
- expect(dv.getInt16(0, true), equals(-253));
+ expect(dv.getInt16(0, littleEndian: false), equals(1023));
+ expect(dv.getInt16(0, littleEndian: true), equals(-253));
expect(dv.getUint16(0), equals(1023));
- // OPTIONALS expect(dv.getUint16(0, littleEndian: false), equals(1023));
- expect(dv.getUint16(0, false), equals(1023));
- // OPTIONALS expect(dv.getUint16(0, littleEndian: true), equals(0xFF03));
- expect(dv.getUint16(0, true), equals(0xFF03));
+ expect(dv.getUint16(0, littleEndian: false), equals(1023));
+ expect(dv.getUint16(0, littleEndian: true), equals(0xFF03));
dv.setInt16(2, -1);
expect(dv.getInt16(2), equals(-1));
@@ -61,18 +55,12 @@
var dv = new DataView(a1.buffer);
expect(dv.getInt32(0), equals(1023));
- expect(dv.getInt32(0, false), equals(1023));
- // OPTIONALS expect(dv.getInt32(0, littleEndian: false), equals(1023));
- expect(dv.getInt32(0, false), equals(1023));
- expect(dv.getInt32(0, true), equals(-0xFD0000));
- // OPTIONALS expect(dv.getInt32(0, littleEndian: true), equals(-0xFD0000));
- expect(dv.getInt32(0, true), equals(-0xFD0000));
+ expect(dv.getInt32(0, littleEndian: false), equals(1023));
+ expect(dv.getInt32(0, littleEndian: true), equals(-0xFD0000));
expect(dv.getUint32(0), equals(1023));
- // OPTIONALS expect(dv.getUint32(0, littleEndian: false), equals(1023));
- expect(dv.getUint32(0, false), equals(1023));
- // OPTIONALS expect(dv.getUint32(0, littleEndian: true), equals(0xFF030000));
- expect(dv.getUint32(0, true), equals(0xFF030000));
+ expect(dv.getUint32(0, littleEndian: false), equals(1023));
+ expect(dv.getUint32(0, littleEndian: true), equals(0xFF030000));
});
}
diff --git a/tests/html/util.dart b/tests/html/util.dart
index 22d2c74..511a576 100644
--- a/tests/html/util.dart
+++ b/tests/html/util.dart
@@ -3,7 +3,7 @@
// BSD-style license that can be found in the LICENSE file.
void expectUnsupported(void fn()) =>
- Expect.throws(fn, (e) => e is UnsupportedOperationException);
+ Expect.throws(fn, (e) => e is UnsupportedError);
void expectEmptyRect(ClientRect rect) {
Expect.equals(0, rect.bottom);
diff --git a/tests/html/utils.dart b/tests/html/utils.dart
index 8b2dc98..2c07fcf 100644
--- a/tests/html/utils.dart
+++ b/tests/html/utils.dart
@@ -48,13 +48,13 @@
if (expected is Map) {
Expect.isTrue(actual is Map, message(path, '$actual is Map'));
- for (var key in expected.getKeys()) {
+ for (var key in expected.keys) {
if (!actual.containsKey(key)) {
Expect.fail(message(path, 'missing key "$key"'));
}
walk('$path["$key"]', expected[key], actual[key]);
}
- for (var key in actual.getKeys()) {
+ for (var key in actual.keys) {
if (!expected.containsKey(key)) {
Expect.fail(message(path, 'extra key "$key"'));
}
diff --git a/tests/html/xmldocument_test.dart b/tests/html/xmldocument_test.dart
index 3dba45e..dccf15b 100644
--- a/tests/html/xmldocument_test.dart
+++ b/tests/html/xmldocument_test.dart
@@ -121,8 +121,8 @@
});
test('isEmpty', () {
- Expect.isFalse(makeClassSet().isEmpty());
- Expect.isTrue(makeDocument().classes.isEmpty());
+ Expect.isFalse(makeClassSet().isEmpty);
+ Expect.isTrue(makeDocument().classes.isEmpty);
});
test('length', () {
@@ -534,7 +534,7 @@
expectEmptyRect(rect.offset);
expectEmptyRect(rect.scroll);
expectEmptyRect(rect.bounding);
- Expect.isTrue(rect.clientRects.isEmpty());
+ Expect.isTrue(rect.clientRects.isEmpty);
}));
});
diff --git a/tests/html/xmlelement_test.dart b/tests/html/xmlelement_test.dart
index d3b1437..1518673 100644
--- a/tests/html/xmlelement_test.dart
+++ b/tests/html/xmlelement_test.dart
@@ -136,8 +136,8 @@
});
test('isEmpty', () {
- Expect.isFalse(makeClassSet().isEmpty());
- Expect.isTrue(makeElement().classes.isEmpty());
+ Expect.isFalse(makeClassSet().isEmpty);
+ Expect.isTrue(makeElement().classes.isEmpty);
});
test('length', () {
@@ -570,7 +570,7 @@
expectEmptyRect(rect.offset);
expectEmptyRect(rect.scroll);
expectEmptyRect(rect.bounding);
- Expect.isTrue(rect.clientRects.isEmpty());
+ Expect.isTrue(rect.clientRects.isEmpty);
}));
});
}
diff --git a/tests/isolate/isolate.status b/tests/isolate/isolate.status
index 6b2bcb4..0fdc16c 100644
--- a/tests/isolate/isolate.status
+++ b/tests/isolate/isolate.status
@@ -58,9 +58,14 @@
[ $runtime == safari && ($system == linux || $system == windows) ]
*: Skip
-# TODO(jmesserly): now that we have a bot, we need to set up Opera testing.
[ $runtime == opera ]
-*: Skip
+multiple_timer_test: Pass, Fail
+isolate2_negative_test: Skip # Timeout.
+unresolved_ports_negative_test: Skip # Timeout.
+
+[ $runtime == opera && $system == windows]
+# TODO(efortuna): Investigate.
+timer_test: Fail, Pass
[ $arch == simarm ]
*: Skip
@@ -76,7 +81,7 @@
timer_not_available_test: Fail, OK # only meant to test when there is no way to
# implement timer (currently only in d8)
-[ $compiler == dart2js && $runtime == d8 ]
+[ $compiler == dart2js && $jscl ]
multiple_timer_test: Fail,OK # Needs Timer to run.
spawn_uri_negative_test: Pass # for the wrong reasons (not supported in d8)
spawn_uri_test: Fail, OK # loading another file is not supported in d8
diff --git a/tests/isolate/port_test.dart b/tests/isolate/port_test.dart
index 56563ee..02ea365 100644
--- a/tests/isolate/port_test.dart
+++ b/tests/isolate/port_test.dart
@@ -19,8 +19,8 @@
void testHashCode() {
ReceivePort rp0 = new ReceivePort();
ReceivePort rp1 = new ReceivePort();
- Expect.equals(rp0.toSendPort().hashCode(), rp0.toSendPort().hashCode());
- Expect.equals(rp1.toSendPort().hashCode(), rp1.toSendPort().hashCode());
+ Expect.equals(rp0.toSendPort().hashCode, rp0.toSendPort().hashCode);
+ Expect.equals(rp1.toSendPort().hashCode, rp1.toSendPort().hashCode);
rp0.close();
rp1.close();
}
diff --git a/tests/isolate/timer_not_available_test.dart b/tests/isolate/timer_not_available_test.dart
index 82c9103..96fb3c5 100644
--- a/tests/isolate/timer_not_available_test.dart
+++ b/tests/isolate/timer_not_available_test.dart
@@ -10,7 +10,7 @@
bool failed = false;
try {
new Timer(0, (_) { });
- } on UnsupportedOperationException catch (e) {
+ } on UnsupportedError catch (e) {
failed = true;
}
Expect.isTrue(failed);
@@ -18,7 +18,7 @@
try {
var t = new Timer.repeating(10, (_) { });
t.cancel();
- } on UnsupportedOperationException catch (e) {
+ } on UnsupportedError catch (e) {
failed = true;
}
Expect.isTrue(failed);
diff --git a/tests/json/json.status b/tests/json/json.status
index 9d9b4cd..e76252d 100644
--- a/tests/json/json.status
+++ b/tests/json/json.status
@@ -14,9 +14,5 @@
[ $runtime == vm ]
*: Skip
-# TODO(jmesserly): now that we have a bot, we need to set up Opera testing.
-[ $runtime == opera ]
-*: Skip
-
[ $compiler == dart2js && $runtime == none ]
*: Fail, Pass # TODO(ahe): Triage these tests.
diff --git a/tests/language/argument_definition2_test.dart b/tests/language/argument_definition2_test.dart
index 0b74060..c59b061 100644
--- a/tests/language/argument_definition2_test.dart
+++ b/tests/language/argument_definition2_test.dart
@@ -1,7 +1,6 @@
// 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=--reject_named_argument_as_positional
test1(bool passed, [a = 42]) {
if (passed) {
diff --git a/tests/language/arithmetic_test.dart b/tests/language/arithmetic_test.dart
index ac59dc3..5fde1ed 100644
--- a/tests/language/arithmetic_test.dart
+++ b/tests/language/arithmetic_test.dart
@@ -127,27 +127,27 @@
big = 123456789012345;
// -- isNegative --.
// Smi.
- Expect.equals(false, (0).isNegative());
- Expect.equals(false, (1).isNegative());
- Expect.equals(true, (-1).isNegative());
+ Expect.equals(false, (0).isNegative);
+ Expect.equals(false, (1).isNegative);
+ Expect.equals(true, (-1).isNegative);
// Big.
- Expect.equals(false, big.isNegative());
- Expect.equals(true, (-big).isNegative());
+ Expect.equals(false, big.isNegative);
+ Expect.equals(true, (-big).isNegative);
// Double.
// TODO(srdjan): enable the following test once isNegative works.
- // Expect.equals(true, (-0.0).isNegative());
- Expect.equals(false, (0.0).isNegative());
- Expect.equals(false, (2.0).isNegative());
- Expect.equals(true, (-2.0).isNegative());
+ // Expect.equals(true, (-0.0).isNegative);
+ Expect.equals(false, (0.0).isNegative);
+ Expect.equals(false, (2.0).isNegative);
+ Expect.equals(true, (-2.0).isNegative);
double negateDouble(double x) {
return -x;
}
- Expect.isTrue(negateDouble(0.0).isNegative());
- Expect.isFalse(negateDouble(-0.0).isNegative());
- Expect.isTrue(negateDouble(3.5e3).isNegative());
- Expect.isFalse(negateDouble(-3.5e3).isNegative());
+ Expect.isTrue(negateDouble(0.0).isNegative);
+ Expect.isFalse(negateDouble(-0.0).isNegative);
+ Expect.isTrue(negateDouble(3.5e3).isNegative);
+ Expect.isFalse(negateDouble(-3.5e3).isNegative);
// Constants.
@@ -156,32 +156,32 @@
// -- isInfinite --.
// Smi.
- Expect.equals(false, (0).isInfinite());
- Expect.equals(false, (1).isInfinite());
- Expect.equals(false, (-1).isInfinite());
+ Expect.equals(false, (0).isInfinite);
+ Expect.equals(false, (1).isInfinite);
+ Expect.equals(false, (-1).isInfinite);
// Big.
- Expect.equals(false, big.isInfinite());
- Expect.equals(false, (-big).isInfinite());
+ Expect.equals(false, big.isInfinite);
+ Expect.equals(false, (-big).isInfinite);
// Double.
- Expect.equals(false, (0.0).isInfinite());
- Expect.equals(true, infinity.isInfinite());
- Expect.equals(true, (-infinity).isInfinite());
- Expect.equals(false, (12.0).isInfinite());
- Expect.equals(false, (-12.0).isInfinite());
- Expect.equals(false, nan.isInfinite());
+ Expect.equals(false, (0.0).isInfinite);
+ Expect.equals(true, infinity.isInfinite);
+ Expect.equals(true, (-infinity).isInfinite);
+ Expect.equals(false, (12.0).isInfinite);
+ Expect.equals(false, (-12.0).isInfinite);
+ Expect.equals(false, nan.isInfinite);
// -- isNaN --.
// Smi.
- Expect.equals(false, (0).isNaN());
- Expect.equals(false, (1).isNaN());
- Expect.equals(false, (-1).isNaN());
+ Expect.equals(false, (0).isNaN);
+ Expect.equals(false, (1).isNaN);
+ Expect.equals(false, (-1).isNaN);
// Big.
- Expect.equals(false, big.isNaN());
- Expect.equals(false, (-big).isNaN());
+ Expect.equals(false, big.isNaN);
+ Expect.equals(false, (-big).isNaN);
// Double.
- Expect.equals(true, nan.isNaN());
- Expect.equals(false, (12.0).isNaN());
- Expect.equals(false, infinity.isNaN());
+ Expect.equals(true, nan.isNaN);
+ Expect.equals(false, (12.0).isNaN);
+ Expect.equals(false, infinity.isNaN);
// -- abs --.
// Smi.
@@ -192,8 +192,8 @@
Expect.equals(big, big.abs());
Expect.equals(big, (-big).abs());
// Double.
- Expect.equals(false, (0.0).abs().isNegative());
- Expect.equals(false, (-0.0).abs().isNegative());
+ Expect.equals(false, (0.0).abs().isNegative);
+ Expect.equals(false, (-0.0).abs().isNegative);
Expect.equals(2.0, (2.0).abs());
Expect.equals(2.0, (-2.0).abs());
@@ -207,13 +207,13 @@
Expect.equals(-big, (-big).ceil());
// Double.
Expect.equals(0.0, (0.0).ceil());
- Expect.equals(false, (0.0).ceil().isNegative());
+ Expect.equals(false, (0.0).ceil().isNegative);
Expect.equals(1.0, (0.1).ceil());
Expect.equals(-0.0, (-0.0).ceil());
Expect.equals(-0.0, (-0.3).ceil());
// TODO(srdjan): enable the following tests once isNegative works.
- // Expect.equals(true, (-0.0).ceil().isNegative());
- // Expect.equals(true, (-0.3).ceil().isNegative());
+ // Expect.equals(true, (-0.0).ceil().isNegative);
+ // Expect.equals(true, (-0.3).ceil().isNegative);
Expect.equals(3.0, (2.1).ceil());
Expect.equals(-2.0, (-2.1).ceil());
@@ -228,11 +228,11 @@
// Double.
Expect.equals(0.0, (0.0).floor());
Expect.equals(0.0, (0.1).floor());
- Expect.equals(false, (0.0).floor().isNegative());
- Expect.equals(false, (0.1).floor().isNegative());
+ Expect.equals(false, (0.0).floor().isNegative);
+ Expect.equals(false, (0.1).floor().isNegative);
Expect.equals(-0.0, (-0.0).floor());
// TODO(srdjan): enable the following tests once isNegative works.
- // Expect.equals(true, (-0.0).floor().isNegative());
+ // Expect.equals(true, (-0.0).floor().isNegative);
Expect.equals(-1.0, (-0.1).floor());
Expect.equals(2.0, (2.1).floor());
Expect.equals(-3.0, (-2.1).floor());
@@ -248,13 +248,13 @@
// Double.
Expect.equals(0.0, (0.0).truncate());
Expect.equals(0.0, (0.1).truncate());
- Expect.equals(false, (0.0).truncate().isNegative());
- Expect.equals(false, (0.1).truncate().isNegative());
+ Expect.equals(false, (0.0).truncate().isNegative);
+ Expect.equals(false, (0.1).truncate().isNegative);
Expect.equals(-0.0, (-0.0).truncate());
Expect.equals(-0.0, (-0.3).truncate());
// TODO(srdjan): enable the following tests once isNegative works.
- // Expect.equals(true, (-0.0).truncate().isNegative());
- // Expect.equals(true, (-0.3).truncate().isNegative());
+ // Expect.equals(true, (-0.0).truncate().isNegative);
+ // Expect.equals(true, (-0.3).truncate().isNegative);
Expect.equals(2.0, (2.1).truncate());
Expect.equals(-2.0, (-2.1).truncate());
@@ -275,8 +275,8 @@
Expect.equals(-3.0, (-2.6).round());
Expect.equals(0.0, (0.0).round());
Expect.equals(0.0, (0.1).round());
- Expect.equals(false, (0.0).round().isNegative());
- Expect.equals(false, (0.1).round().isNegative());
+ Expect.equals(false, (0.0).round().isNegative);
+ Expect.equals(false, (0.1).round().isNegative);
Expect.equals(-0.0, (-0.0).round());
Expect.equals(-0.0, (-0.3).round());
Expect.equals(2.0, (2.1).round());
@@ -286,9 +286,9 @@
// b/4539188.
// Expect.equals(-0.0, (-0.5).round());
// TODO(srdjan): enable the following tests once isNegative works.
- // Expect.equals(true, (-0.0).round().isNegative());
- // Expect.equals(true, (-0.3).round().isNegative());
- // Expect.equals(true, (-0.5).round().isNegative());
+ // Expect.equals(true, (-0.0).round().isNegative);
+ // Expect.equals(true, (-0.3).round().isNegative);
+ // Expect.equals(true, (-0.5).round().isNegative);
Expect.equals(2.0, (1.5).round());
// TODO(floitsch): enable or adapt test, once we reached conclusion on
// b/4539188.
@@ -377,16 +377,16 @@
Expect.equals(true, exceptionCaughtParseDouble("alpha"));
Expect.equals(true, exceptionCaughtParseDouble("-alpha"));
- Expect.equals(false, parseDouble("1.2").isNaN());
- Expect.equals(false, parseDouble("1.2").isInfinite());
+ Expect.equals(false, parseDouble("1.2").isNaN);
+ Expect.equals(false, parseDouble("1.2").isInfinite);
- Expect.equals(true, parseDouble("NaN").isNaN());
- Expect.equals(true, parseDouble("Infinity").isInfinite());
- Expect.equals(true, parseDouble("-Infinity").isInfinite());
+ Expect.equals(true, parseDouble("NaN").isNaN);
+ Expect.equals(true, parseDouble("Infinity").isInfinite);
+ Expect.equals(true, parseDouble("-Infinity").isInfinite);
- Expect.equals(false, parseDouble("NaN").isNegative());
- Expect.equals(false, parseDouble("Infinity").isNegative());
- Expect.equals(true, parseDouble("-Infinity").isNegative());
+ Expect.equals(false, parseDouble("NaN").isNegative);
+ Expect.equals(false, parseDouble("Infinity").isNegative);
+ Expect.equals(true, parseDouble("-Infinity").isNegative);
Expect.equals("NaN", parseDouble("NaN").toString());
Expect.equals("Infinity", parseDouble("Infinity").toString());
@@ -406,10 +406,10 @@
Expect.equals(true, 1.0 < max(1.0, 12.0));
// Hashcode
- Expect.equals(false, (3.4).hashCode() == (1.2).hashCode());
- Expect.equals(true, (1.2).hashCode() == (1.2).hashCode());
- Expect.equals(false, (3).hashCode() == (1).hashCode());
- Expect.equals(true, (10).hashCode() == (10).hashCode());
+ Expect.equals(false, (3.4).hashCode == (1.2).hashCode);
+ Expect.equals(true, (1.2).hashCode == (1.2).hashCode);
+ Expect.equals(false, (3).hashCode == (1).hashCode);
+ Expect.equals(true, (10).hashCode == (10).hashCode);
}
static testMain() {
diff --git a/tests/language/call_through_getter_test.dart b/tests/language/call_through_getter_test.dart
index cfacf27..b5a115d 100644
--- a/tests/language/call_through_getter_test.dart
+++ b/tests/language/call_through_getter_test.dart
@@ -28,10 +28,10 @@
Expect.equals(1, TOP_LEVEL_CONST_REF);
Expect.equals(2, topLevel());
- expectThrowsNotClosure(() {
+ expectThrowsNoSuchMethod(() {
TOP_LEVEL_CONST(); /// static type warning
});
- expectThrowsNotClosure(() {
+ expectThrowsNoSuchMethod(() {
(TOP_LEVEL_CONST)(); /// static type warning
});
}
@@ -47,8 +47,8 @@
Expect.equals(87, (a.field)());
a.field = 99;
- expectThrowsNotClosure(() { a.field(); });
- expectThrowsNotClosure(() { (a.field)(); });
+ expectThrowsNoSuchMethod(() { a.field(); });
+ expectThrowsNoSuchMethod(() { (a.field)(); });
}
static void testGetter() {
@@ -62,8 +62,8 @@
Expect.equals(87, (a.getter)());
a.field = 99;
- expectThrowsNotClosure(() { a.getter(); });
- expectThrowsNotClosure(() { (a.getter)(); });
+ expectThrowsNoSuchMethod(() { a.getter(); });
+ expectThrowsNoSuchMethod(() { (a.getter)(); });
}
static void testMethod() {
@@ -107,10 +107,10 @@
Expect.equals("gyzxf", (b.g3)(b.y, b.z, b.x));
}
- static void expectThrowsNotClosure(fn) {
+ static expectThrowsNoSuchMethod(fn) {
var exception = catchException(fn);
- if (!(exception is ObjectNotClosureException)) {
- Expect.fail("Wrong exception. Expected: ObjectNotClosureException"
+ if (exception is! NoSuchMethodError) {
+ Expect.fail("Wrong exception. Expected: NoSuchMethodError"
" got: ${exception}");
}
}
diff --git a/tests/language/call_through_null_getter_test.dart b/tests/language/call_through_null_getter_test.dart
index 72b33ac..0502496 100644
--- a/tests/language/call_through_null_getter_test.dart
+++ b/tests/language/call_through_null_getter_test.dart
@@ -19,51 +19,43 @@
static void testTopLevel() {
topLevel = null;
- expectThrowsObjectNotClosureException(() { topLevel(); });
- expectThrowsObjectNotClosureException(() { (topLevel)(); });
- expectThrowsObjectNotClosureException(() { TOP_LEVEL_NULL(); });
- expectThrowsObjectNotClosureException(() { (TOP_LEVEL_NULL)(); });
+ expectThrowsNullPointerException(() { topLevel(); });
+ expectThrowsNullPointerException(() { (topLevel)(); });
+ expectThrowsNullPointerException(() { TOP_LEVEL_NULL(); });
+ expectThrowsNullPointerException(() { (TOP_LEVEL_NULL)(); });
}
static void testField() {
A a = new A();
a.field = null;
- expectThrowsObjectNotClosureException(() { a.field(); });
- expectThrowsObjectNotClosureException(() { (a.field)(); });
+ expectThrowsNullPointerException(() { a.field(); });
+ expectThrowsNullPointerException(() { (a.field)(); });
}
static void testGetter() {
A a = new A();
a.field = null;
- expectThrowsObjectNotClosureException(() { a.getter(); });
- expectThrowsObjectNotClosureException(() { (a.getter)(); });
+ expectThrowsNullPointerException(() { a.getter(); });
+ expectThrowsNullPointerException(() { (a.getter)(); });
}
static void testMethod() {
A a = new A();
a.field = null;
- expectThrowsObjectNotClosureException(() { a.method()(); });
+ expectThrowsNullPointerException(() { a.method()(); });
}
static void expectThrowsNullPointerException(fn) {
var exception = catchException(fn);
- if (!(exception is NullPointerException)) {
+ if (exception is! NullPointerException) {
Expect.fail("Wrong exception. Expected: NullPointerException"
" got: ${exception}");
}
}
- static void expectThrowsObjectNotClosureException(fn) {
- var exception = catchException(fn);
- if (!(exception is ObjectNotClosureException)) {
- Expect.fail("Wrong exception. Expected: ObjectNotClosureException"
- " got: ${exception}");
- }
- }
-
static catchException(fn) {
bool caught = false;
var result = null;
diff --git a/tests/language/compile_time_constant_a_test.dart b/tests/language/compile_time_constant_a_test.dart
index 8f157f3..1d32b37 100644
--- a/tests/language/compile_time_constant_a_test.dart
+++ b/tests/language/compile_time_constant_a_test.dart
@@ -10,13 +10,13 @@
const m6 = const { 'a': 499 };
const m7 = const {};
-bool isIllegalAccessException(o) => o is IllegalAccessException;
+bool isUnsupportedError(o) => o is UnsupportedError;
main() {
Expect.equals(499, m1['a']);
Expect.equals(null, m1['b']);
- Expect.listEquals(['a'], m1.getKeys());
- Expect.listEquals([499], m1.getValues());
+ Expect.listEquals(['a'], m1.keys);
+ Expect.listEquals([499], m1.values);
Expect.isTrue(m1.containsKey('a'));
Expect.isFalse(m1.containsKey('toString'));
Expect.isTrue(m1.containsValue(499));
@@ -30,23 +30,21 @@
});
Expect.listEquals(['a'], seenKeys);
Expect.listEquals([499], seenValues);
- Expect.isFalse(m1.isEmpty());
+ Expect.isFalse(m1.isEmpty);
Expect.equals(1, m1.length);
- Expect.throws(() => m1.remove('a'), isIllegalAccessException);
- Expect.throws(() => m1.remove('b'), isIllegalAccessException);
- Expect.throws(() => m1.clear(), isIllegalAccessException);
- Expect.throws(() => m1['b'] = 42, isIllegalAccessException);
- Expect.throws(() => m1['a'] = 499, isIllegalAccessException);
- Expect.throws(() => m1.putIfAbsent('a', () => 499),
- isIllegalAccessException);
- Expect.throws(() => m1.putIfAbsent('z', () => 499),
- isIllegalAccessException);
+ Expect.throws(() => m1.remove('a'), isUnsupportedError);
+ Expect.throws(() => m1.remove('b'), isUnsupportedError);
+ Expect.throws(() => m1.clear(), isUnsupportedError);
+ Expect.throws(() => m1['b'] = 42, isUnsupportedError);
+ Expect.throws(() => m1['a'] = 499, isUnsupportedError);
+ Expect.throws(() => m1.putIfAbsent('a', () => 499), isUnsupportedError);
+ Expect.throws(() => m1.putIfAbsent('z', () => 499), isUnsupportedError);
Expect.equals(499, m2['a']);
Expect.equals(42, m2['b']);
Expect.equals(null, m2['c']);
- Expect.listEquals(['a', 'b'], m2.getKeys());
- Expect.listEquals([499, 42], m2.getValues());
+ Expect.listEquals(['a', 'b'], m2.keys);
+ Expect.listEquals([499, 42], m2.values);
Expect.isTrue(m2.containsKey('a'));
Expect.isTrue(m2.containsKey('b'));
Expect.isFalse(m2.containsKey('toString'));
@@ -62,26 +60,24 @@
});
Expect.listEquals(['a', 'b'], seenKeys);
Expect.listEquals([499, 42], seenValues);
- Expect.isFalse(m2.isEmpty());
+ Expect.isFalse(m2.isEmpty);
Expect.equals(2, m2.length);
- Expect.throws(() => m2.remove('a'), isIllegalAccessException);
- Expect.throws(() => m2.remove('b'), isIllegalAccessException);
- Expect.throws(() => m2.remove('c'), isIllegalAccessException);
- Expect.throws(() => m2.clear(), isIllegalAccessException);
- Expect.throws(() => m2['a'] = 499, isIllegalAccessException);
- Expect.throws(() => m2['b'] = 42, isIllegalAccessException);
- Expect.throws(() => m2['c'] = 499, isIllegalAccessException);
- Expect.throws(() => m2.putIfAbsent('a', () => 499),
- isIllegalAccessException);
- Expect.throws(() => m2.putIfAbsent('z', () => 499),
- isIllegalAccessException);
- Expect.throws(() => m2['a'] = 499, isIllegalAccessException);
+ Expect.throws(() => m2.remove('a'), isUnsupportedError);
+ Expect.throws(() => m2.remove('b'), isUnsupportedError);
+ Expect.throws(() => m2.remove('c'), isUnsupportedError);
+ Expect.throws(() => m2.clear(), isUnsupportedError);
+ Expect.throws(() => m2['a'] = 499, isUnsupportedError);
+ Expect.throws(() => m2['b'] = 42, isUnsupportedError);
+ Expect.throws(() => m2['c'] = 499, isUnsupportedError);
+ Expect.throws(() => m2.putIfAbsent('a', () => 499), isUnsupportedError);
+ Expect.throws(() => m2.putIfAbsent('z', () => 499), isUnsupportedError);
+ Expect.throws(() => m2['a'] = 499, isUnsupportedError);
Expect.isTrue(m3['m1'] === m1);
Expect.isTrue(m3['m2'] === m2);
- Expect.listEquals(['z', 'a', 'm'], m4.getKeys());
- Expect.listEquals([9, 8, 7], m4.getValues());
+ Expect.listEquals(['z', 'a', 'm'], m4.keys);
+ Expect.listEquals([9, 8, 7], m4.values);
seenKeys = [];
seenValues = [];
m4.forEach((key, value) {
@@ -97,11 +93,11 @@
Expect.isTrue(m1 === m6);
- Expect.isTrue(m7.isEmpty());
+ Expect.isTrue(m7.isEmpty);
Expect.equals(0, m7.length);
Expect.equals(null, m7['b']);
- Expect.listEquals([], m7.getKeys());
- Expect.listEquals([], m7.getValues());
+ Expect.listEquals([], m7.keys);
+ Expect.listEquals([], m7.values);
Expect.isFalse(m7.containsKey('a'));
Expect.isFalse(m7.containsKey('toString'));
Expect.isFalse(m7.containsValue(499));
@@ -114,13 +110,13 @@
});
Expect.listEquals([], seenKeys);
Expect.listEquals([], seenValues);
- Expect.throws(() => m7.remove('a'), isIllegalAccessException);
- Expect.throws(() => m7.remove('b'), isIllegalAccessException);
- Expect.throws(() => m7.clear(), isIllegalAccessException);
- Expect.throws(() => m7['b'] = 42, isIllegalAccessException);
- Expect.throws(() => m7['a'] = 499, isIllegalAccessException);
+ Expect.throws(() => m7.remove('a'), isUnsupportedError);
+ Expect.throws(() => m7.remove('b'), isUnsupportedError);
+ Expect.throws(() => m7.clear(), isUnsupportedError);
+ Expect.throws(() => m7['b'] = 42, isUnsupportedError);
+ Expect.throws(() => m7['a'] = 499, isUnsupportedError);
Expect.throws(() => m7.putIfAbsent('a', () => 499),
- isIllegalAccessException);
+ isUnsupportedError);
Expect.throws(() => m7.putIfAbsent('z', () => 499),
- isIllegalAccessException);
+ isUnsupportedError);
}
diff --git a/tests/language/compile_time_constant_b_test.dart b/tests/language/compile_time_constant_b_test.dart
index ef4451c..a273903 100644
--- a/tests/language/compile_time_constant_b_test.dart
+++ b/tests/language/compile_time_constant_b_test.dart
@@ -6,13 +6,13 @@
const m2 = const { 'a': 499, 'b': 42 };
const m3 = const { '__proto__': 499 };
-bool isIllegalAccessException(o) => o is IllegalAccessException;
+bool isUnsupportedError(o) => o is UnsupportedError;
main() {
Expect.equals(499, m1['__proto__']);
Expect.equals(null, m1['b']);
- Expect.listEquals(['__proto__'], m1.getKeys());
- Expect.listEquals([499], m1.getValues());
+ Expect.listEquals(['__proto__'], m1.keys);
+ Expect.listEquals([499], m1.values);
Expect.isTrue(m1.containsKey('__proto__'));
Expect.isFalse(m1.containsKey('toString'));
Expect.isTrue(m1.containsValue(499));
@@ -25,24 +25,23 @@
});
Expect.listEquals(['__proto__'], seenKeys);
Expect.listEquals([499], seenValues);
- Expect.isFalse(m1.isEmpty());
+ Expect.isFalse(m1.isEmpty);
Expect.equals(1, m1.length);
- Expect.throws(() => m1.remove('__proto__'), isIllegalAccessException);
- Expect.throws(() => m1.remove('b'), isIllegalAccessException);
- Expect.throws(() => m1.clear(), isIllegalAccessException);
- Expect.throws(() => m1['b'] = 42, isIllegalAccessException);
- Expect.throws(() => m1['__proto__'] = 499, isIllegalAccessException);
+ Expect.throws(() => m1.remove('__proto__'), isUnsupportedError);
+ Expect.throws(() => m1.remove('b'), isUnsupportedError);
+ Expect.throws(() => m1.clear(), isUnsupportedError);
+ Expect.throws(() => m1['b'] = 42, isUnsupportedError);
+ Expect.throws(() => m1['__proto__'] = 499, isUnsupportedError);
Expect.throws(() => m1.putIfAbsent('__proto__', () => 499),
- isIllegalAccessException);
- Expect.throws(() => m1.putIfAbsent('z', () => 499),
- isIllegalAccessException);
+ isUnsupportedError);
+ Expect.throws(() => m1.putIfAbsent('z', () => 499), isUnsupportedError);
Expect.equals(499, m2['a']);
Expect.equals(42, m2['b']);
Expect.equals(null, m2['c']);
Expect.equals(null, m2['__proto__']);
- Expect.listEquals(['a', 'b'], m2.getKeys());
- Expect.listEquals([499, 42], m2.getValues());
+ Expect.listEquals(['a', 'b'], m2.keys);
+ Expect.listEquals([499, 42], m2.values);
Expect.isTrue(m2.containsKey('a'));
Expect.isTrue(m2.containsKey('b'));
Expect.isFalse(m2.containsKey('toString'));
@@ -58,20 +57,19 @@
});
Expect.listEquals(['a', 'b'], seenKeys);
Expect.listEquals([499, 42], seenValues);
- Expect.isFalse(m2.isEmpty());
+ Expect.isFalse(m2.isEmpty);
Expect.equals(2, m2.length);
- Expect.throws(() => m2.remove('a'), isIllegalAccessException);
- Expect.throws(() => m2.remove('b'), isIllegalAccessException);
- Expect.throws(() => m2.remove('__proto__'), isIllegalAccessException);
- Expect.throws(() => m2.clear(), isIllegalAccessException);
- Expect.throws(() => m2['a'] = 499, isIllegalAccessException);
- Expect.throws(() => m2['b'] = 42, isIllegalAccessException);
- Expect.throws(() => m2['__proto__'] = 499, isIllegalAccessException);
- Expect.throws(() => m2.putIfAbsent('a', () => 499),
- isIllegalAccessException);
+ Expect.throws(() => m2.remove('a'), isUnsupportedError);
+ Expect.throws(() => m2.remove('b'), isUnsupportedError);
+ Expect.throws(() => m2.remove('__proto__'), isUnsupportedError);
+ Expect.throws(() => m2.clear(), isUnsupportedError);
+ Expect.throws(() => m2['a'] = 499, isUnsupportedError);
+ Expect.throws(() => m2['b'] = 42, isUnsupportedError);
+ Expect.throws(() => m2['__proto__'] = 499, isUnsupportedError);
+ Expect.throws(() => m2.putIfAbsent('a', () => 499), isUnsupportedError);
Expect.throws(() => m2.putIfAbsent('__proto__', () => 499),
- isIllegalAccessException);
- Expect.throws(() => m2['a'] = 499, isIllegalAccessException);
+ isUnsupportedError);
+ Expect.throws(() => m2['a'] = 499, isUnsupportedError);
Expect.isTrue(m1 === m3);
}
diff --git a/tests/language/ct_const_test.dart b/tests/language/ct_const_test.dart
index 6f7a534..d8117ca 100644
--- a/tests/language/ct_const_test.dart
+++ b/tests/language/ct_const_test.dart
@@ -82,7 +82,7 @@
Expect.equals(true, c11dItaly === Roman.VivaItalia);
Expect.equals(3, c11dItaly.length);
- Expect.equals(3, c11dItaly.getKeys().length);
+ Expect.equals(3, c11dItaly.keys.length);
Expect.equals(true, c11dItaly.containsKey("white"));
Expect.equals(false, c11dItaly.containsKey("black"));
@@ -90,7 +90,7 @@
bool caughtException = false;
try {
c11dItaly["green"] = 0;
- } on IllegalAccessException catch (e) {
+ } on UnsupportedError catch (e) {
caughtException = true;
}
Expect.equals(true, caughtException);
@@ -99,7 +99,7 @@
caughtException = false;
try {
c11dItaly.clear();
- } on IllegalAccessException catch (e) {
+ } on UnsupportedError catch (e) {
caughtException = true;
}
Expect.equals(true, caughtException);
@@ -108,7 +108,7 @@
caughtException = false;
try {
c11dItaly.remove("orange");
- } on IllegalAccessException catch (e) {
+ } on UnsupportedError catch (e) {
caughtException = true;
}
Expect.equals(true, caughtException);
diff --git a/tests/language/deopt_smi_op.dart b/tests/language/deopt_smi_op.dart
new file mode 100644
index 0000000..7ad01c6
--- /dev/null
+++ b/tests/language/deopt_smi_op.dart
@@ -0,0 +1,33 @@
+// 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.
+
+// Test hoisted (loop-invariant) smi operations with deoptimization.
+
+test_mul(h) {
+ var x;
+ for (var i=0; i<3; i++) {
+ x = h * 100000;
+ }
+ return x;
+}
+
+test_neg(h) {
+ var x;
+ for (var i=0; i<3; i++) {
+ x = -h;
+ }
+ return x;
+}
+
+main() {
+ for (var i=0; i<10000; i++) test_mul(10);
+ Expect.equals(1000000, test_mul(10));
+ Expect.equals(100000000000, test_mul(1000000));
+ Expect.equals(100000 * 0x3fffffffffffffff, test_mul(0x3fffffffffffffff));
+
+ for (var i=0; i<10000; i++) test_neg(10);
+ Expect.equals(-10, test_neg(10));
+ Expect.equals(0x40000000, test_neg(-0x40000000));
+ Expect.equals(0x4000000000000000, test_neg(-0x4000000000000000));
+}
diff --git a/tests/language/div_by_zero_test.dart b/tests/language/div_by_zero_test.dart
index c32a059..8f0ec10 100644
--- a/tests/language/div_by_zero_test.dart
+++ b/tests/language/div_by_zero_test.dart
@@ -22,7 +22,7 @@
}
static void testMain() {
- Expect.isTrue(divBy(0, 0).isNaN());
+ Expect.isTrue(divBy(0, 0).isNaN);
Expect.isTrue(moustacheDivBy(0, 0));
}
}
diff --git a/tests/language/function_type_alias2_test.dart b/tests/language/function_type_alias2_test.dart
index 735de60..f2c03c5 100644
--- a/tests/language/function_type_alias2_test.dart
+++ b/tests/language/function_type_alias2_test.dart
@@ -1,7 +1,7 @@
// Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-// VMOptions=--enable_type_checks --reject_named_argument_as_positional
+// VMOptions=--enable_type_checks
//
// Dart test for function type alias with optional parameters.
@@ -20,9 +20,6 @@
int bar({int a, int b, int c}) { }
main() {
- // TODO(regis): The expectations below will change once we run this test with
- // --reject_named_argument_as_positional which is still too early to do at
- // this time.
Expect.isTrue(baz is f1);
Expect.isFalse(baz is f3);
Expect.isFalse(bar is f1);
diff --git a/tests/language/function_type_alias_test.dart b/tests/language/function_type_alias_test.dart
index 795ccf1..aca2419 100644
--- a/tests/language/function_type_alias_test.dart
+++ b/tests/language/function_type_alias_test.dart
@@ -1,7 +1,7 @@
// Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-// VMOptions=--enable_type_checks --reject_named_argument_as_positional
+// VMOptions=--enable_type_checks
//
// Dart test for function type alias.
diff --git a/tests/language/generic_creation_test.dart b/tests/language/generic_creation_test.dart
index 8aa6d29..ad71e2c 100644
--- a/tests/language/generic_creation_test.dart
+++ b/tests/language/generic_creation_test.dart
@@ -5,8 +5,8 @@
class A<X, Y, Z> {
shift() => new A<Z, X, Y>();
swap() => new A<Z, Y, X>();
- first() => new A<X, X, X>();
- last() => new A<Z, Z, Z>();
+ get first => new A<X, X, X>();
+ get last => new A<Z, Z, Z>();
wrap() => new A<A<X, X, X>, A<Y, Y, Y>, A<Z, Z, Z>>();
}
@@ -20,7 +20,7 @@
A a = new A<U, V, W>();
sameType(new A<W, U, V>(), a.shift());
sameType(new A<W, V, U>(), a.swap());
- sameType(new A<U, U, U>(), a.first());
- sameType(new A<W, W, W>(), a.last());
+ sameType(new A<U, U, U>(), a.first);
+ sameType(new A<W, W, W>(), a.last);
sameType(new A<A<U, U, U>, A<V, V, V>, A<W, W, W>>(), a.wrap());
}
diff --git a/tests/language/hash_code_mangling_test.dart b/tests/language/hash_code_mangling_test.dart
index 3059517..07b01a4 100644
--- a/tests/language/hash_code_mangling_test.dart
+++ b/tests/language/hash_code_mangling_test.dart
@@ -10,8 +10,8 @@
Foo foo = new Foo();
foo.$identityHash = 'fisk';
Expect.isTrue(foo.$identityHash is String);
- int hash = foo.hashCode();
+ int hash = foo.hashCode;
Expect.isTrue(hash is int);
Expect.isTrue(foo.$identityHash is String);
- Expect.equals(hash, foo.hashCode());
+ Expect.equals(hash, foo.hashCode);
}
diff --git a/tests/language/intrinsified_methods_test.dart b/tests/language/intrinsified_methods_test.dart
index 13075a5..5a9c4c1 100644
--- a/tests/language/intrinsified_methods_test.dart
+++ b/tests/language/intrinsified_methods_test.dart
@@ -7,18 +7,18 @@
#import('dart:math');
testIsNegative() {
- Expect.isFalse((12.0).isNegative());
- Expect.isTrue((-12.0).isNegative());
- Expect.isFalse((double.NAN).isNegative());
- Expect.isFalse((0.0).isNegative());
- Expect.isTrue((-0.0).isNegative());
- Expect.isFalse((double.INFINITY).isNegative());
- Expect.isTrue((double.NEGATIVE_INFINITY).isNegative());
+ Expect.isFalse((12.0).isNegative);
+ Expect.isTrue((-12.0).isNegative);
+ Expect.isFalse((double.NAN).isNegative);
+ Expect.isFalse((0.0).isNegative);
+ Expect.isTrue((-0.0).isNegative);
+ Expect.isFalse((double.INFINITY).isNegative);
+ Expect.isTrue((double.NEGATIVE_INFINITY).isNegative);
}
testIsNaN() {
- Expect.isFalse((1.0).isNaN());
- Expect.isTrue((double.NAN).isNaN());
+ Expect.isFalse((1.0).isNaN);
+ Expect.isTrue((double.NAN).isNaN);
}
diff --git a/tests/language/invocation_mirror_test.dart b/tests/language/invocation_mirror_test.dart
new file mode 100644
index 0000000..6bbb094
--- /dev/null
+++ b/tests/language/invocation_mirror_test.dart
@@ -0,0 +1,166 @@
+// 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.
+
+// InvocationMirror and noSuchMethod testing.
+
+/** Class with noSuchMethod that returns the mirror */
+class N {
+ noSuchMethod(InvocationMirror m) => m;
+
+ get wut => this;
+
+ flif(int x) { Expect.fail("never get here"); }
+ flaf([int x]) { Expect.fail("never get here"); }
+ flof({int y}) { Expect.fail("never get here"); }
+
+ final int plif = 99;
+ int get plaf { Expect.fail("never get here"); return 0; }
+}
+
+/** As [N] but also implements 'call', so we can call it with wrong arguments.*/
+class C extends N {
+ call(int x) { Expect.fail("never get here"); }
+}
+
+/**
+ * Checks the data of an InvocationMirror.
+ *
+ * Call without optionals for getters, with only positional for setters,
+ * and with both optionals for everything else.
+ */
+testInvocationMirror(InvocationMirror im, String name,
+ [List positional, Map named]) {
+ Expect.isTrue(im is InvocationMirror);
+ Expect.equals(name, im.methodName);
+ if (named == null) {
+ Expect.isTrue(im.isAccessor);
+ Expect.isFalse(im.isMethod);
+ if (positional == null) {
+ Expect.isTrue(im.isGetter);
+ Expect.isFalse(im.isSetter);
+ Expect.equals(null, im.positionalArguments);
+ Expect.equals(null, im.positionalArguments);
+ return;
+ }
+ Expect.isTrue(im.isSetter);
+ Expect.isFalse(im.isGetter);
+ Expect.equals(1, im.positionalArguments.length);
+ Expect.equals(positional[0], im.positionalArguments[0]);
+ Expect.equals(null, im.namedArguments);
+ return;
+ }
+ Expect.isTrue(im.isMethod);
+ Expect.isFalse(im.isAccessor);
+ Expect.isFalse(im.isSetter);
+ Expect.isFalse(im.isGetter);
+
+ Expect.equals(positional.length, im.positionalArguments.length);
+ for (int i = 0; i < positional.length; i++) {
+ Expect.equals(positional[i], im.positionalArguments[i]);
+ }
+ Expect.equals(named.length, im.namedArguments.length);
+ named.forEach((k, v) {
+ Expect.isTrue(im.namedArguments.containsKey(k));
+ Expect.equals(v, im.namedArguments[k]);
+ });
+}
+
+
+// Test different ways that noSuchMethod can be called.
+testInvocationMirrors() {
+ var n = new N();
+ var c = new C();
+
+ // Missing property/method access.
+ testInvocationMirror(n.bar, 'bar');
+ testInvocationMirror(n.bar = 42, 'bar=', [42]);
+ testInvocationMirror(n.bar(), 'bar', [], {});
+ testInvocationMirror(n.bar(42), 'bar', [42], {});
+ testInvocationMirror(n.bar(x: 42), 'bar', [], {"x": 42});
+ testInvocationMirror(n.bar(37, x: 42), 'bar', [37], {"x": 42});
+ testInvocationMirror((n.bar)(), 'bar', [], {});
+ testInvocationMirror((n.bar)(42), 'bar', [42]);
+ testInvocationMirror((n.bar)(x: 42), 'bar', [], {"x": 42});
+ testInvocationMirror((n.bar)(37, x: 42), 'bar', [37], {"x": 42});
+
+ // Missing operator access.
+ testInvocationMirror(n + 4, '+', [4], {});
+ testInvocationMirror(n - 4, '-', [4], {});
+ testInvocationMirror(-n, '+', [], {});
+ testInvocationMirror(n[42], '[]', [42], {});
+ testInvocationMirror(n[37] = 42, '[]=', [37, 42], {});
+
+ // Calling as function when it's not.
+ testInvocationMirror(n(), 'call', [], {});
+ testInvocationMirror(n(42), 'call', [42], {});
+ testInvocationMirror(n(x: 42), 'call', [], {"x": 42});
+ testInvocationMirror(n(37, x: 42), 'call', [37], {"x": 42});is
+
+ // Calling with arguments not matching existing call method.
+ testInvocationMirror(c(), 'call', [], {});
+ testInvocationMirror(c(37, 42), 'call', [37, 42], {});
+ testInvocationMirror(c(x: 42), 'call', [], {"x": 42});
+ testInvocationMirror(c(37, x: 42), 'call', [37], {"x": 42});
+
+ // Wrong arguments to existing function.
+ testInvocationMirror(n.flif(), "flif", [], {});
+ testInvocationMirror(n.flif(37, 42), "flif", [37, 42], {});
+ testInvocationMirror(n.flif(x: 42), "flif", [], {"x": 42});
+ testInvocationMirror(n.flif(37, x: 42), "flif", [37], {"x": 42});
+ testInvocationMirror(n.flif = 42, "flif=", [42]);
+
+ testInvocationMirror(n.flaf(37, 42), "flaf", [37, 42], {});
+ testInvocationMirror(n.flaf(x: 42), "flaf", [], {"x": 42});
+ testInvocationMirror(n.flaf(37, x: 42), "flaf", [37], {"x": 42});
+ testInvocationMirror(n.flaf = 42, "flaf=", [42]);
+
+ testInvocationMirror(n.flof(37, 42), "flof", [37, 42], {});
+ testInvocationMirror(n.flof(x: 42), "flof", [], {"x": 42});
+ testInvocationMirror(n.flof(37, y: 42), "flof", [37], {"y": 42});
+ testInvocationMirror(n.flof = 42, "flof=", [42]);
+
+ // Reading works.
+ Expect.isTrue(n.flif is Function);
+ Expect.isTrue(n.flaf is Function);
+ Expect.isTrue(n.flof is Function);
+
+ // Writing to read-only fields.
+ testInvocationMirror(n.wut = 42, "wut=", [42]);
+ testInvocationMirror(n.plif = 42, "plif=", [42]);
+ testInvocationMirror(n.plaf = 42, "plaf=", [42]);
+
+ // Trick call to n.call - wut is a getter returning n again.
+ testInvocationMirror(n.wut(42), "call", [42]);
+
+ // Closurizing a method means that calling it badly will not hit the
+ // original receivers noSuchMethod, only the one inherited from Object
+ // by the closure object.
+ Expect.throws(() { var x = n.flif; x(37, 42); },
+ (e) => e is noSuchMethodError);
+ Expect.throws(() { var x = c.call; x(37, 42); },
+ (e) => e is noSuchMethodError);
+}
+
+// Test the NoSuchMethodError thrown by different incorrect calls.
+testNoSuchMethodErrors() {
+ test(Function block) {
+ Expect.throws(block, (e) => e is noSuchMethodError);
+ }
+
+ var o = new Object();
+ test(() => o.bar);
+ test(() => o.bar = 42);
+ test(() => o.bar());
+ test(() => o.toString = 42);
+ test(() => o.toString(42));
+ test(() => o.toString(x: 37));
+ test(() => o.hashCode = 42);
+ test(() => o.hashCode()); // Thrown by int.noSuchMethod.
+ test(() => o());
+}
+
+main() {
+ testInvocationMirrors();
+ testNoSuchMethodErrors();
+}
diff --git a/tests/language/is_nan_test.dart b/tests/language/is_nan_test.dart
index f4fa0f7..3edfebd 100644
--- a/tests/language/is_nan_test.dart
+++ b/tests/language/is_nan_test.dart
@@ -3,7 +3,7 @@
// BSD-style license that can be found in the LICENSE file.
class A {
- bool isNaN() => false;
+ bool get isNaN => false;
}
main() {
@@ -12,4 +12,4 @@
Expect.throws(() => foo('bar'), (e) => e is NoSuchMethodError);
}
-foo(a) => a.isNaN();
+foo(a) => a.isNaN;
diff --git a/tests/language/language.status b/tests/language/language.status
index b12c7a1..0549cc3 100644
--- a/tests/language/language.status
+++ b/tests/language/language.status
@@ -38,13 +38,8 @@
# Issue 1355
call_operator_test: Fail
-closure_with_super_send_test: Fail # Issue 3197.
-closure_with_super_field_test: Fail # Issue 3197.
-super_closure_test: Fail # Issue 3197.
parameter_initializer6_negative_test: Fail # Issue 3502
-fauxverride_test/none: Fail # Issue 3778.
-
bad_override_test/01: Fail # Issue 3859.
bad_override_test/02: Fail # Issue 3859.
@@ -60,7 +55,17 @@
compile_time_constant10_test/none: Fail # issue 5214
-export_cyclic_test: Crash
+export_cyclic_test: Crash # issue 6060
+
+call_through_getter_test: Fail # issue 6124
+call_through_null_getter_test: Fail # issue 6124
+local_function_test: Fail # issue 6124
+naming_test: Fail # issue 6124
+
+invocation_mirror_test: Fail # issue 3326, 3622.
+
+[ $compiler == none && ($system == macos || $system == linux) && $arch == ia32 && $checked ]
+gc_test: Skip # Issue 1487, flaky.
[ $compiler == none && $mode == debug ]
gc_test: Skip # Takes too long.
@@ -85,8 +90,6 @@
compile_time_constant_checked3_test/06: Fail, OK
[ $compiler == dartc ]
-black_listed_test/13: Fail # Illegal use of 'dynamic'
-black_listed_test/14: Fail # Illegal use of 'dynamic'
implicit_this_test/none: Fail # should not warn about allocating SubAbstract2
metadata_test: Fail
get_set_syntax_test/none: Fail # does not accept getter/setter with no method body
@@ -146,6 +149,10 @@
getter_no_setter2_test/01: Fail # Fails to detect compile-time error.
instance_call_wrong_argument_count_negative_test: Fail # Runtime only test, rewrite as multitest
interface_factory1_negative_test: Fail # language change 1031
+# Test expects signature of noSuchMethod to be correct according
+# to specification. Should start working when the library signature
+# changes.
+invocation_mirror_test: Fail, OK
is_not_class2_negative_test: Fail # Runtime only test, rewrite as multitest
library2_negative_test: Fail # still a valid test? Issue 3649
library4_negative_test: Fail # still a valid test? Issue 3530
@@ -197,7 +204,6 @@
abstract_syntax_test/none: Fail, OK
interface_test/none: Fail, OK
-
#
# Add new dartc annotations above in alphabetical order
#
@@ -214,6 +220,8 @@
export_test: Fail # Issue 5785
export_cyclic_test: Fail # Issue 5785
first_class_types_libraries_test: Fail # Issue 2264
+local_export_test: Fail # http://dartbug.com/2264
+
[ $runtime == dartium ]
import_combinators_test: Fail
@@ -225,10 +233,6 @@
[ $runtime == chrome ]
string_escape1_negative_test: Skip
-# TODO(jmesserly): now that we have a bot, we need to set up Opera testing.
-[ $runtime == opera ]
-*: Skip
-
[ $runtime == ie9 && ($system == linux || $system == macos) ]
*: Skip
@@ -378,16 +382,12 @@
parameter_initializer6_negative_test: Fail # Issue 3502
syntax_test/47: Fail
# DartVM problem.
-closure_with_super_send_test: Fail # Issue 3197.
-closure_with_super_field_test: Fail # Issue 3197.
constructor5_test: Fail
constructor6_test: Fail
-fauxverride_test/none: Fail
field_override_test/01: Fail
field_override_test/02: Fail
field_override_test/none: Fail
gc_test: Fail
-super_closure_test: Fail
super_field_access_test: Fail
super_first_constructor_test: Fail
# VM specific tests.
@@ -434,3 +434,11 @@
compile_time_constant_checked3_test/06: Fail, OK
type_error_test: Fail, OK # VM bug: http://dartbug.com/5280
+
+call_through_getter_test: Fail # issue 6130
+call_through_null_getter_test: Fail # issue 6130
+local_function_test: Fail # issue 6130
+naming_test: Fail # issue 6130
+
+# This is a VM error when the compiled code is run.
+invocation_mirror_test: Fail # issue 3326, 3622.
diff --git a/tests/language/language_dart2js.status b/tests/language/language_dart2js.status
index 1a43554..f3ff4de 100644
--- a/tests/language/language_dart2js.status
+++ b/tests/language/language_dart2js.status
@@ -89,13 +89,6 @@
compile_time_constant8_test: Fail # We don't take the generic type into account yet.
canonical_const_test: Fail # We don't take the generic type into account yet.
-# These tests will pass once new optional parameter semantics is enforced.
-named_parameters_test/02: Fail
-named_parameters_test/04: Fail
-named_parameters_test/06: Fail
-named_parameters_test/08: Fail
-named_parameters_test/10: Fail
-
# Support for optional parameters not conform to latest spec.
function_type_alias_test: Fail
function_type_alias2_test: Fail
@@ -163,7 +156,6 @@
get_set_syntax_test/16: Fail # Fixed by https://chromiumcodereview.appspot.com/10915111
implicit_scope_test: Fail # duplicate definition of a="bar"
library_prefixes_test: Fail # other is not a type
-local_function_test: Fail # TypeError: Object #<Closure> has no method '$call$2' (bad exception mapping).
many_generic_instanceof_test: Fail # cannot resolve type T
method_binding_test: Fail # internal error: super property read not implemented.
method_override_test: Fail # cannot resolve type GetKeysFunctionType
@@ -323,6 +315,9 @@
# of failing.
const_factory_negative_test: Crash, Fail
+# Implement InvocationMirror and pass it to noSuchMethod.
+invocation_mirror_test: Fail
+
[ $compiler == dart2js && $mode == release ]
assign_top_method_negative_test: Crash
@@ -331,26 +326,21 @@
*: Fail, Pass # TODO(ahe): Triage these tests.
-[ $compiler == dart2js && $runtime == ff ]
-call_through_getter_test: Fail # Expected: ObjectNotClosureException got: Instance of 'TypeError'
+[ $compiler == dart2js && ($runtime == ff || $runtime == jsshell)]
call_through_null_getter_test: Fail # Expected: ObjectNotClosureException got: Instance of 'TypeError'
double_to_string_as_fixed_test: Fail
[ $compiler == dart2js && $runtime == ie9 ]
-call_through_getter_test: Fail
-call_through_null_getter_test: Fail
div_by_zero_test: Fail
double_to_string_as_fixed_test: Fail
expect_test: Fail
factory3_test: Fail
-local_function_test: Fail
stack_overflow_test: Fail
type_checks_in_factory_method_test: Fail
[ $compiler == dart2js && $runtime == safari ]
arithmetic_test: Skip # BUG(3492): Times out.
-call_through_getter_test: Fail # Expected: ObjectNotClosureException got: Instance of 'TypeError'
call_through_null_getter_test: Fail # Expected: ObjectNotClosureException got: Instance of 'TypeError'
closure3_test: Fail # Uncaught error: Instance of 'TypeError'
method_invocation_test: Fail # Uncaught error: Instance of 'TypeError'
@@ -365,3 +355,16 @@
export_cyclic_test: Fail # Issue 5785 (root cause: issue 2264)
import_combinators_test: Fail # Issue 5785 (root cause: issue 2264)
first_class_types_libraries_test: Fail
+local_export_test: Fail # TODO(ahe): Enable wrapper-less tests on Firefox/Windows.
+
+
+[ $runtime == opera ]
+call_through_null_getter_test: Fail
+closure3_test: Fail
+execute_finally3_test: Fail
+method_invocation_test: Fail
+null_pointer_exception_test: Fail
+stack_overflow_test: Fail
+string_interpolate_npe_test: Fail
+closure_call_wrong_argument_count_negative_test: Skip
+label_test: Skip
diff --git a/tests/language/list_literal3_test.dart b/tests/language/list_literal3_test.dart
index e82d3ac..497aee4 100644
--- a/tests/language/list_literal3_test.dart
+++ b/tests/language/list_literal3_test.dart
@@ -19,7 +19,7 @@
bool caughtException = false;
try {
joke[0] = "sock";
- } on UnsupportedOperationException catch (e) {
+ } on UnsupportedError catch (e) {
caughtException = true;
}
Expect.equals(true, caughtException);
@@ -41,7 +41,7 @@
try {
caughtException = false;
a[0][0] = 42;
- } on UnsupportedOperationException catch (e) {
+ } on UnsupportedError catch (e) {
caughtException = true;
}
Expect.equals(true, caughtException);
@@ -53,7 +53,7 @@
try {
caughtException = false;
b[0][0] = 42.0;
- } on UnsupportedOperationException catch (e) {
+ } on UnsupportedError catch (e) {
caughtException = true;
}
Expect.equals(true, caughtException);
diff --git a/tests/language/local_export_a.dart b/tests/language/local_export_a.dart
new file mode 100644
index 0000000..e9c8819
--- /dev/null
+++ b/tests/language/local_export_a.dart
@@ -0,0 +1,11 @@
+// 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.
+
+library local_export_a;
+
+export 'local_export_a_export.dart';
+
+class A {
+ method() => 42;
+}
diff --git a/tests/language/local_export_a_export.dart b/tests/language/local_export_a_export.dart
new file mode 100644
index 0000000..1919d38
--- /dev/null
+++ b/tests/language/local_export_a_export.dart
@@ -0,0 +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.
+
+library local_export_a_export;
+
+int A = 0;
diff --git a/tests/language/local_export_test.dart b/tests/language/local_export_test.dart
new file mode 100644
index 0000000..fe4df96
--- /dev/null
+++ b/tests/language/local_export_test.dart
@@ -0,0 +1,9 @@
+// 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 'local_export_a.dart';
+
+void main() {
+ Expect.equals(42, new A().method());
+}
diff --git a/tests/language/local_function_test.dart b/tests/language/local_function_test.dart
index c694e2c..6c6ab88 100644
--- a/tests/language/local_function_test.dart
+++ b/tests/language/local_function_test.dart
@@ -142,14 +142,14 @@
bool exception_caught = false;
try {
f(1, 2);
- } on ClosureArgumentMismatchException catch (e) {
+ } on NoSuchMethodError catch (e) {
exception_caught = true;
}
Expect.equals(true, exception_caught);
exception_caught = false;
try {
f();
- } on ClosureArgumentMismatchException catch (e) {
+ } on NoSuchMethodError catch (e) {
exception_caught = true;
}
Expect.equals(true, exception_caught);
@@ -166,7 +166,7 @@
exception_caught = false;
try {
f(1);
- } on ObjectNotClosureException catch (e) {
+ } on NoSuchMethodError catch (e) {
exception_caught = true;
}
Expect.equals(true, exception_caught);
diff --git a/tests/language/map_test.dart b/tests/language/map_test.dart
index 70de2c4..3968cf8 100644
--- a/tests/language/map_test.dart
+++ b/tests/language/map_test.dart
@@ -154,11 +154,11 @@
other_map.clear();
Expect.equals(0, other_map.length);
- // Test Collection.getKeys.
+ // Test Collection.keys.
void testForEachCollection(value) {
other_map[value] = value;
}
- Collection keys = map.getKeys();
+ Collection keys = map.keys;
keys.forEach(testForEachCollection);
Expect.equals(true, other_map.containsKey(key1));
Expect.equals(true, other_map.containsKey(key2));
@@ -172,8 +172,8 @@
other_map.clear();
Expect.equals(0, other_map.length);
- // Test Collection.getValues.
- Collection values = map.getValues();
+ // Test Collection.values.
+ Collection values = map.values;
values.forEach(testForEachCollection);
Expect.equals(true, !other_map.containsKey(key1));
Expect.equals(true, !other_map.containsKey(key2));
@@ -200,9 +200,9 @@
static testKeys(Map map) {
map[1] = 101;
map[2] = 102;
- Collection k = map.getKeys();
+ Collection k = map.keys;
Expect.equals(2, k.length);
- Collection v = map.getValues();
+ Collection v = map.values;
Expect.equals(2, v.length);
Expect.equals(true, map.containsValue(101));
Expect.equals(true, map.containsValue(102));
diff --git a/tests/language/method_override_test.dart b/tests/language/method_override_test.dart
index ff00cef..514f7fc 100644
--- a/tests/language/method_override_test.dart
+++ b/tests/language/method_override_test.dart
@@ -5,39 +5,39 @@
// Checks that a method with an instantiated return type can override a method
// with a generic return type.
-typedef Collection<K> GetKeysFunctionType<K>();
+typedef V RemoveFunctionType<K, V>(K key);
class MapBase<K, V> implements Map<K, V> {
- Collection<K> getKeys() {
+ K remove(K key) {
throw 'Must be implemented';
}
void Tests() {
Expect.isTrue(this is MapBase<int, int>);
- Expect.isTrue(getKeys is GetKeysFunctionType);
- Expect.isTrue(getKeys is GetKeysFunctionType<int>);
- Expect.isTrue(getKeys is !GetKeysFunctionType<String>);
- Expect.isTrue(getKeys is !GetKeysFunctionType<MapBase<int, int>>);
+ Expect.isTrue(remove is RemoveFunctionType);
+ Expect.isTrue(remove is RemoveFunctionType<int, int>);
+ Expect.isTrue(remove is !RemoveFunctionType<String, int>);
+ Expect.isTrue(remove is !RemoveFunctionType<MapBase<int, int>, int>);
}
}
class MethodOverrideTest extends MapBase<String, String> {
- Collection<String> getKeys() {
- throw 'Is implemented';
+ String remove(String key) {
+ throw 'Must be implemented';
}
void Tests() {
Expect.isTrue(this is MethodOverrideTest);
Expect.isTrue(this is MapBase<String, String>);
- Expect.isTrue(getKeys is GetKeysFunctionType);
- Expect.isTrue(getKeys is GetKeysFunctionType<String>);
- Expect.isTrue(getKeys is !GetKeysFunctionType<int>);
- Expect.isTrue(super.getKeys is GetKeysFunctionType);
- Expect.isTrue(super.getKeys is GetKeysFunctionType<String>);
- Expect.isTrue(super.getKeys is !GetKeysFunctionType<int>);
+ Expect.isTrue(remove is RemoveFunctionType);
+ Expect.isTrue(remove is RemoveFunctionType<String, String>);
+ Expect.isTrue(remove is !RemoveFunctionType<int, int>);
+ Expect.isTrue(super.remove is RemoveFunctionType);
+ Expect.isTrue(super.remove is RemoveFunctionType<String, String>);
+ Expect.isTrue(super.remove is !RemoveFunctionType<int, int>);
}
}
@@ -46,13 +46,13 @@
// Since method overriding is only checked statically, explicitly check
// the subtyping relation using a function type alias.
var x = new MethodOverrideTest();
- Expect.isTrue(x.getKeys is GetKeysFunctionType<String>);
+ Expect.isTrue(x.remove is RemoveFunctionType<String, String>);
// Perform a few more tests.
x.Tests();
var m = new MapBase<int, int>();
- Expect.isTrue(m.getKeys is GetKeysFunctionType<int>);
+ Expect.isTrue(m.remove is RemoveFunctionType<int, int>);
// Perform a few more tests.
m.Tests();
diff --git a/tests/language/mint_compares.dart b/tests/language/mint_compares.dart
new file mode 100644
index 0000000..c09bec1
--- /dev/null
+++ b/tests/language/mint_compares.dart
@@ -0,0 +1,60 @@
+// 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.
+
+// Test compares on 64-bit integers.
+
+
+compareTest() {
+ Expect.isFalse(4294967296 < 6);
+ Expect.isFalse(4294967296 < 4294967296);
+ Expect.isFalse(4294967296 <= 6);
+ Expect.isTrue(4294967296 <= 4294967296);
+ Expect.isFalse(4294967296 < 4294967295);
+
+ Expect.isTrue(-4294967296 < 6);
+ Expect.isTrue(-4294967296 < 4294967296);
+ Expect.isTrue(-4294967296 <= 6);
+ Expect.isTrue(-4294967296 <= 4294967296);
+ Expect.isTrue(-4294967296 < 4294967295);
+
+ Expect.isFalse(4294967296 < -6);
+ Expect.isFalse(4294967296 <= -6);
+ Expect.isFalse(4294967296 < -4294967295);
+
+ Expect.isTrue(-4294967296 < -6);
+ Expect.isTrue(-4294967296 <= -6);
+ Expect.isTrue(-4294967296 < -4294967295);
+
+ Expect.isTrue(4294967296 > 6);
+ Expect.isFalse(4294967296 > 4294967296);
+ Expect.isTrue(4294967296 >= 6);
+ Expect.isTrue(4294967296 >= 4294967296);
+ Expect.isTrue(4294967296 > 4294967295);
+
+ Expect.isFalse(-4294967296 > 6);
+ Expect.isFalse(-4294967296 > 4294967296);
+ Expect.isFalse(-4294967296 >= 6);
+ Expect.isFalse(-4294967296 >= 4294967296);
+ Expect.isFalse(-4294967296 > 4294967295);
+
+ Expect.isTrue(4294967296 > -6);
+ Expect.isTrue(4294967296 >= -6);
+ Expect.isTrue(4294967296 > -4294967295);
+
+ Expect.isFalse(-4294967296 > -6);
+ Expect.isFalse(-4294967296 >= -6);
+ Expect.isFalse(-4294967296 > -4294967295);
+
+ Expect.isTrue(4294967296 < 184467440737095516150);
+ Expect.isTrue(-4294967296 < 184467440737095516150);
+ Expect.isFalse(4294967296 < -184467440737095516150);
+ Expect.isFalse(-4294967296 < -184467440737095516150);
+}
+
+
+main() {
+ for (var i = 0; i < 100; i++) {
+ compareTest();
+ }
+}
diff --git a/tests/language/named_parameters_test.dart b/tests/language/named_parameters_test.dart
index 629feac..1ea5234 100644
--- a/tests/language/named_parameters_test.dart
+++ b/tests/language/named_parameters_test.dart
@@ -2,7 +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.
// Dart test program for testing named parameters.
-// VMOptions=--reject_named_argument_as_positional
class NamedParametersTest {
diff --git a/tests/language/named_parameters_type_test.dart b/tests/language/named_parameters_type_test.dart
index 268b539..33841fb 100644
--- a/tests/language/named_parameters_type_test.dart
+++ b/tests/language/named_parameters_type_test.dart
@@ -5,10 +5,6 @@
//
// Dart test program for testing optional named parameters in type tests.
-// TODO(regis): The expected signatures below will change once we run this test
-// with --reject_named_argument_as_positional which is still too early to do at
-// this time.
-
class NamedParametersTypeTest {
static int testMain() {
int result = 0;
diff --git a/tests/language/naming_test.dart b/tests/language/naming_test.dart
index 0533899..6198f1d 100644
--- a/tests/language/naming_test.dart
+++ b/tests/language/naming_test.dart
@@ -501,9 +501,7 @@
() => a.foo(2),
// We check for both exceptions because the exact exception to
// throw is hard to compute on some browsers.
- // Also, ObjectNotClosureException should probably implement
- // NoSuchMethodError.
- (e) => e is ObjectNotClosureException || e is NoSuchMethodError);
+ (e) => e is NoSuchMethodError);
}
}
diff --git a/tests/language/optimize_redundant_array_load.dart b/tests/language/optimize_redundant_array_load.dart
new file mode 100644
index 0000000..ae4bb59
--- /dev/null
+++ b/tests/language/optimize_redundant_array_load.dart
@@ -0,0 +1,29 @@
+// 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.
+
+// Test optimization of redundant array loads.
+
+var A = [0,2,3];
+
+test1(a) {
+ int x = a[0];
+ int y = a[1];
+ ++a[0];
+ return a[0] + y + a[2];
+}
+
+
+int test2(a) {
+ return a[2] + a[2];
+}
+
+
+main() {
+ for (int i = 0; i < 10000; i++) {
+ test1(A);
+ test2(A);
+ }
+ Expect.equals(10006, test1(A));
+ Expect.equals(6, test2(A));
+}
diff --git a/tests/language/ordered_maps_test.dart b/tests/language/ordered_maps_test.dart
index 7bcf697..7ea8102 100644
--- a/tests/language/ordered_maps_test.dart
+++ b/tests/language/ordered_maps_test.dart
@@ -13,22 +13,22 @@
static void testMaps(map1, map2, bool isConst) {
Expect.equals(true, map1 !== map2);
- var keys = map1.getKeys();
+ var keys = map1.keys;
Expect.equals(2, keys.length);
Expect.equals("a", keys[0]);
Expect.equals("c", keys[1]);
- keys = map2.getKeys();
+ keys = map2.keys;
Expect.equals(2, keys.length);
Expect.equals("c", keys[0]);
Expect.equals("a", keys[1]);
- var values = map1.getValues();
+ var values = map1.values;
Expect.equals(2, values.length);
Expect.equals(1, values[0]);
Expect.equals(2, values[1]);
- values = map2.getValues();
+ values = map2.values;
Expect.equals(2, values.length);
Expect.equals(2, values[0]);
Expect.equals(1, values[1]);
@@ -38,36 +38,36 @@
map1["b"] = 3;
map2["b"] = 3;
- keys = map1.getKeys();
+ keys = map1.keys;
Expect.equals(3, keys.length);
Expect.equals("a", keys[0]);
Expect.equals("c", keys[1]);
Expect.equals("b", keys[2]);
- keys = map2.getKeys();
+ keys = map2.keys;
Expect.equals(3, keys.length);
Expect.equals("c", keys[0]);
Expect.equals("a", keys[1]);
Expect.equals("b", keys[2]);
- values = map1.getValues();
+ values = map1.values;
Expect.equals(3, values.length);
Expect.equals(1, values[0]);
Expect.equals(2, values[1]);
Expect.equals(3, values[2]);
- values = map2.getValues();
+ values = map2.values;
Expect.equals(3, values.length);
Expect.equals(2, values[0]);
Expect.equals(1, values[1]);
Expect.equals(3, values[2]);
map1["a"] = 4;
- keys = map1.getKeys();
+ keys = map1.keys;
Expect.equals(3, keys.length);
Expect.equals("a", keys[0]);
- values = map1.getValues();
+ values = map1.values;
Expect.equals(3, values.length);
Expect.equals(4, values[0]);
}
diff --git a/tests/language/positional_parameters_type_test.dart b/tests/language/positional_parameters_type_test.dart
index 79c2840..7a23761 100644
--- a/tests/language/positional_parameters_type_test.dart
+++ b/tests/language/positional_parameters_type_test.dart
@@ -1,13 +1,9 @@
// Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-// VMOptions=--enable_type_checks --no_reject_named_argument_as_positional
+// VMOptions=--enable_type_checks
//
-// Dart test program for testing optional parameters in type tests.
-
-// TODO(regis): The expected signatures below will change once we run this test
-// with --reject_named_argument_as_positional which is still too early to do at
-// this time.
+// Dart test program for testing optional positional parameters in type tests.
class NamedParametersTypeTest {
static int testMain() {
@@ -27,27 +23,25 @@
acceptFunNumOptBool(funNum); // No static type warning.
} on TypeError catch (error) {
result += 1;
- Expect.stringEquals("(num, [b: bool]) => void", error.dstType);
+ Expect.stringEquals("(num, [bool]) => void", error.dstType);
Expect.stringEquals("(num) => void", error.srcType);
}
try {
acceptFunNumOptBool(funNumBool); /// static type warning
} on TypeError catch (error) {
result += 10;
- Expect.stringEquals("(num, [b: bool]) => void", error.dstType);
+ Expect.stringEquals("(num, [bool]) => void", error.dstType);
Expect.stringEquals("(num, bool) => void", error.srcType);
}
try {
- acceptFunNumOptBool(funNumOptBoolX); /// static type warning
+ acceptFunNumOptBool(funNumOptBoolX); // No static type warning.
} on TypeError catch (error) {
result += 100;
- Expect.stringEquals("(num, [b: bool]) => void", error.dstType);
- Expect.stringEquals("(num, [x: bool]) => void", error.srcType);
}
return result;
}
}
main() {
- Expect.equals(111, NamedParametersTypeTest.testMain());
+ Expect.equals(11, NamedParametersTypeTest.testMain());
}
diff --git a/tests/language/reg_ex2_test.dart b/tests/language/reg_ex2_test.dart
index aaa3d5e..6e323f3 100644
--- a/tests/language/reg_ex2_test.dart
+++ b/tests/language/reg_ex2_test.dart
@@ -10,7 +10,7 @@
Match match = helloPattern.firstMatch(s);
if (match != null) {
print("got match");
- int groupCount = match.groupCount();
+ int groupCount = match.groupCount;
print("groupCount is $groupCount");
print("group 0 is ${match.group(0)}");
print("group 1 is ${match.group(1)}");
diff --git a/tests/language/savannah_test.dart b/tests/language/savannah_test.dart
index ea55302..fea178e 100644
--- a/tests/language/savannah_test.dart
+++ b/tests/language/savannah_test.dart
@@ -14,7 +14,7 @@
Giraffe(this.name) : identityHash_ = nextId() {}
- int hashCode() {
+ int get hashCode {
return identityHash_;
}
@@ -44,8 +44,8 @@
Giraffe giraffe2 = new Giraffe("Rose");
savannah[giraffe1] = giraffe1.name;
savannah[giraffe2] = giraffe2.name;
- print("giraffe1 hash: ${giraffe1.hashCode()}");
- print("giraffe2 hash: ${giraffe2.hashCode()}");
+ print("giraffe1 hash: ${giraffe1.hashCode}");
+ print("giraffe2 hash: ${giraffe2.hashCode}");
var count = savannah.length;
print("getCount is $count");
@@ -60,8 +60,8 @@
Zebra zebra2 = new Zebra("Zeeta");
savannah[zebra1] = zebra1.name;
savannah[zebra2] = zebra2.name;
- print("zebra1 hash: ${zebra1.hashCode()}");
- print("zebra2 hash: ${zebra2.hashCode()}");
+ print("zebra1 hash: ${zebra1.hashCode}");
+ print("zebra2 hash: ${zebra2.hashCode}");
count = savannah.length;
print("getCount is $count");
diff --git a/tests/language/stack_overflow_test.dart b/tests/language/stack_overflow_test.dart
index 83909f9..a8e400f 100644
--- a/tests/language/stack_overflow_test.dart
+++ b/tests/language/stack_overflow_test.dart
@@ -13,7 +13,7 @@
bool exceptionCaught = false;
try {
curseTheRecurse(1, 2, 3);
- } on StackOverflowException catch (e) {
+ } on StackOverflowError catch (e) {
exceptionCaught = true;
}
Expect.equals(true, exceptionCaught);
diff --git a/tests/language/string_intrinsics_test.dart b/tests/language/string_intrinsics_test.dart
index 80907a1..de3e3f0 100644
--- a/tests/language/string_intrinsics_test.dart
+++ b/tests/language/string_intrinsics_test.dart
@@ -22,5 +22,5 @@
testIsEmpty(s) {
- return s.isEmpty();
+ return s.isEmpty;
}
diff --git a/tests/language/temp_mangling_test.dart b/tests/language/temp_mangling_test.dart
index 279dc4e..3031891 100644
--- a/tests/language/temp_mangling_test.dart
+++ b/tests/language/temp_mangling_test.dart
@@ -24,7 +24,7 @@
// This used to introduce x_0.
var x = new Set();
Expect.equals(0, x.length);
- Expect.isTrue(x.isEmpty());
+ Expect.isTrue(x.isEmpty);
}
Expect.isTrue(x is List);
Expect.isTrue(x_0 is List);
diff --git a/tests/lib/crypto/base64_test.dart b/tests/lib/crypto/base64_test.dart
index fd01871..59afc40 100644
--- a/tests/lib/crypto/base64_test.dart
+++ b/tests/lib/crypto/base64_test.dart
@@ -45,11 +45,11 @@
void main() {
for (var i = 0; i < inputs.length; i++) {
- var enc = CryptoUtils.bytesToBase64(inputs[i].charCodes());
+ var enc = CryptoUtils.bytesToBase64(inputs[i].charCodes);
Expect.equals(results[i], enc);
}
- Expect.equals(CryptoUtils.bytesToBase64(longLine.charCodes(), 76),
+ Expect.equals(CryptoUtils.bytesToBase64(longLine.charCodes, 76),
longLineResult);
- Expect.equals(CryptoUtils.bytesToBase64(longLine.charCodes()),
+ Expect.equals(CryptoUtils.bytesToBase64(longLine.charCodes),
longLineResultNoBreak);
}
diff --git a/tests/lib/lib.status b/tests/lib/lib.status
index b84eb4f..4e9589d 100644
--- a/tests/lib/lib.status
+++ b/tests/lib/lib.status
@@ -10,9 +10,6 @@
crypto/sha256_test: Slow, Pass
crypto/sha1_test: Slow, Pass
-[ $runtime == opera ]
-*: Skip
-
[ $compiler == dart2dart ]
# Skip until we stabilize language tests.
*: Skip
diff --git a/tests/lib/math/math_parse_double_test.dart b/tests/lib/math/math_parse_double_test.dart
index 4bf4a32..c44c301 100644
--- a/tests/lib/math/math_parse_double_test.dart
+++ b/tests/lib/math/math_parse_double_test.dart
@@ -25,11 +25,11 @@
Expect.equals(0.0, parseDouble("0"));
Expect.equals(0.0, parseDouble("+0"));
Expect.equals(-0.0, parseDouble("-0"));
- Expect.equals(true, parseDouble("-0").isNegative());
+ Expect.equals(true, parseDouble("-0").isNegative);
Expect.equals(0.0, parseDouble(" 0 "));
Expect.equals(0.0, parseDouble(" +0 "));
Expect.equals(-0.0, parseDouble(" -0 "));
- Expect.equals(true, parseDouble(" -0 ").isNegative());
+ Expect.equals(true, parseDouble(" -0 ").isNegative);
Expect.equals(1.0 * 0x1234567890, parseDouble("0x1234567890"));
Expect.equals(1.0 * -0x1234567890, parseDouble("-0x1234567890"));
Expect.equals(1.0 * 0x1234567890, parseDouble(" 0x1234567890 "));
diff --git a/tests/lib/math/min_max_test.dart b/tests/lib/math/min_max_test.dart
index f8aaae1..06c78dc 100644
--- a/tests/lib/math/min_max_test.dart
+++ b/tests/lib/math/min_max_test.dart
@@ -32,15 +32,15 @@
var inf = double.INFINITY;
var nan = double.NAN;
- Expect.isTrue(min(nan, nan).isNaN());
- Expect.isTrue(min(nan, -inf).isNaN());
- Expect.isTrue(min(nan, -499.0).isNaN());
- Expect.isTrue(min(nan, -499).isNaN());
- Expect.isTrue(min(nan, -0.0).isNaN());
- Expect.isTrue(min(nan, 0.0).isNaN());
- Expect.isTrue(min(nan, 499.0).isNaN());
- Expect.isTrue(min(nan, 499).isNaN());
- Expect.isTrue(min(nan, inf).isNaN());
+ Expect.isTrue(min(nan, nan).isNaN);
+ Expect.isTrue(min(nan, -inf).isNaN);
+ Expect.isTrue(min(nan, -499.0).isNaN);
+ Expect.isTrue(min(nan, -499).isNaN);
+ Expect.isTrue(min(nan, -0.0).isNaN);
+ Expect.isTrue(min(nan, 0.0).isNaN);
+ Expect.isTrue(min(nan, 499.0).isNaN);
+ Expect.isTrue(min(nan, 499).isNaN);
+ Expect.isTrue(min(nan, inf).isNaN);
Expect.equals(-inf, min(-inf, -inf));
Expect.equals(-inf, min(-inf, -499.0));
@@ -51,7 +51,7 @@
Expect.equals(-inf, min(-inf, 499));
Expect.equals(-inf, min(-inf, 499.0));
Expect.equals(-inf, min(-inf, inf));
- Expect.isTrue(min(-inf, nan).isNaN());
+ Expect.isTrue(min(-inf, nan).isNaN);
Expect.equals(-inf, min(-499.0, -inf));
Expect.equals(-499.0, min(-499.0, -499.0));
@@ -62,7 +62,7 @@
Expect.equals(-499.0, min(-499.0, 499.0));
Expect.equals(-499.0, min(-499.0, 499));
Expect.equals(-499.0, min(-499.0, inf));
- Expect.isTrue(min(-499.0, nan).isNaN());
+ Expect.isTrue(min(-499.0, nan).isNaN);
Expect.isTrue(min(-499.0, -499.0) is double);
Expect.isTrue(min(-499.0, -499) is double);
@@ -82,7 +82,7 @@
Expect.equals(-499, min(-499, 499.0));
Expect.equals(-499, min(-499, 499));
Expect.equals(-499, min(-499, inf));
- Expect.isTrue(min(-499, nan).isNaN());
+ Expect.isTrue(min(-499, nan).isNaN);
Expect.isTrue(min(-499, -499.0) is int);
Expect.isTrue(min(-499, -499) is int);
@@ -102,7 +102,7 @@
Expect.equals(-0.0, min(-0.0, 499.0));
Expect.equals(-0.0, min(-0.0, 499));
Expect.equals(-0.0, min(-0.0, inf));
- Expect.isTrue(min(-0.0, nan).isNaN());
+ Expect.isTrue(min(-0.0, nan).isNaN);
Expect.isTrue(min(-0.0, -499.0) is double);
Expect.isTrue(min(-0.0, -499) is int);
@@ -113,14 +113,14 @@
Expect.isTrue(min(-0.0, 499) is double);
Expect.isTrue(min(-0.0, inf) is double);
- Expect.isTrue(min(-0.0, -499.0).isNegative());
- Expect.isTrue(min(-0.0, -499).isNegative());
- Expect.isTrue(min(-0.0, -0.0).isNegative());
- Expect.isTrue(min(-0.0, 0.0).isNegative());
- Expect.isTrue(min(-0.0, 0).isNegative());
- Expect.isTrue(min(-0.0, 499.0).isNegative());
- Expect.isTrue(min(-0.0, 499).isNegative());
- Expect.isTrue(min(-0.0, inf).isNegative());
+ Expect.isTrue(min(-0.0, -499.0).isNegative);
+ Expect.isTrue(min(-0.0, -499).isNegative);
+ Expect.isTrue(min(-0.0, -0.0).isNegative);
+ Expect.isTrue(min(-0.0, 0.0).isNegative);
+ Expect.isTrue(min(-0.0, 0).isNegative);
+ Expect.isTrue(min(-0.0, 499.0).isNegative);
+ Expect.isTrue(min(-0.0, 499).isNegative);
+ Expect.isTrue(min(-0.0, inf).isNegative);
Expect.equals(-inf, min(0.0, -inf));
Expect.equals(-499.0, min(0.0, -499.0));
@@ -131,7 +131,7 @@
Expect.equals(0.0, min(0.0, 499.0));
Expect.equals(0.0, min(0.0, 499));
Expect.equals(0.0, min(0.0, inf));
- Expect.isTrue(min(0.0, nan).isNaN());
+ Expect.isTrue(min(0.0, nan).isNaN);
Expect.isTrue(min(0.0, -499.0) is double);
Expect.isTrue(min(0.0, -499) is int);
@@ -142,14 +142,14 @@
Expect.isTrue(min(0.0, 499) is double);
Expect.isTrue(min(0.0, inf) is double);
- Expect.isTrue(min(0.0, -499.0).isNegative());
- Expect.isTrue(min(0.0, -499).isNegative());
- Expect.isTrue(min(0.0, -0.0).isNegative());
- Expect.isFalse(min(0.0, 0.0).isNegative());
- Expect.isFalse(min(0.0, 0).isNegative());
- Expect.isFalse(min(0.0, 499.0).isNegative());
- Expect.isFalse(min(0.0, 499).isNegative());
- Expect.isFalse(min(0.0, inf).isNegative());
+ Expect.isTrue(min(0.0, -499.0).isNegative);
+ Expect.isTrue(min(0.0, -499).isNegative);
+ Expect.isTrue(min(0.0, -0.0).isNegative);
+ Expect.isFalse(min(0.0, 0.0).isNegative);
+ Expect.isFalse(min(0.0, 0).isNegative);
+ Expect.isFalse(min(0.0, 499.0).isNegative);
+ Expect.isFalse(min(0.0, 499).isNegative);
+ Expect.isFalse(min(0.0, inf).isNegative);
Expect.equals(-inf, min(0, -inf));
Expect.equals(-499.0, min(0, -499.0));
@@ -160,7 +160,7 @@
Expect.equals(0, min(0, 499.0));
Expect.equals(0, min(0, 499));
Expect.equals(0, min(0, inf));
- Expect.isTrue(min(0, nan).isNaN());
+ Expect.isTrue(min(0, nan).isNaN);
Expect.isTrue(min(0, -499.0) is double);
Expect.isTrue(min(0, -499) is int);
@@ -171,14 +171,14 @@
Expect.isTrue(min(0, 499) is int);
Expect.isTrue(min(0, inf) is int);
- Expect.isTrue(min(0, -499.0).isNegative());
- Expect.isTrue(min(0, -499).isNegative());
- Expect.isTrue(min(0, -0.0).isNegative());
- Expect.isFalse(min(0, 0.0).isNegative());
- Expect.isFalse(min(0, 0).isNegative());
- Expect.isFalse(min(0, 499.0).isNegative());
- Expect.isFalse(min(0, 499).isNegative());
- Expect.isFalse(min(0, inf).isNegative());
+ Expect.isTrue(min(0, -499.0).isNegative);
+ Expect.isTrue(min(0, -499).isNegative);
+ Expect.isTrue(min(0, -0.0).isNegative);
+ Expect.isFalse(min(0, 0.0).isNegative);
+ Expect.isFalse(min(0, 0).isNegative);
+ Expect.isFalse(min(0, 499.0).isNegative);
+ Expect.isFalse(min(0, 499).isNegative);
+ Expect.isFalse(min(0, inf).isNegative);
Expect.equals(-inf, min(499.0, -inf));
Expect.equals(-499.0, min(499.0, -499.0));
@@ -189,7 +189,7 @@
Expect.equals(499.0, min(499.0, 499.0));
Expect.equals(499.0, min(499.0, 499));
Expect.equals(499.0, min(499.0, inf));
- Expect.isTrue(min(499.0, nan).isNaN());
+ Expect.isTrue(min(499.0, nan).isNaN);
Expect.isTrue(min(499.0, -499.0) is double);
Expect.isTrue(min(499.0, -499) is int);
@@ -200,14 +200,14 @@
Expect.isTrue(min(499.0, 499.0) is double);
Expect.isTrue(min(499.0, inf) is double);
- Expect.isTrue(min(499.0, -499.0).isNegative());
- Expect.isTrue(min(499.0, -499).isNegative());
- Expect.isTrue(min(499.0, -0.0).isNegative());
- Expect.isFalse(min(499.0, 0.0).isNegative());
- Expect.isFalse(min(499.0, 0).isNegative());
- Expect.isFalse(min(499.0, 499).isNegative());
- Expect.isFalse(min(499.0, 499.0).isNegative());
- Expect.isFalse(min(499.0, inf).isNegative());
+ Expect.isTrue(min(499.0, -499.0).isNegative);
+ Expect.isTrue(min(499.0, -499).isNegative);
+ Expect.isTrue(min(499.0, -0.0).isNegative);
+ Expect.isFalse(min(499.0, 0.0).isNegative);
+ Expect.isFalse(min(499.0, 0).isNegative);
+ Expect.isFalse(min(499.0, 499).isNegative);
+ Expect.isFalse(min(499.0, 499.0).isNegative);
+ Expect.isFalse(min(499.0, inf).isNegative);
Expect.equals(-inf, min(499, -inf));
Expect.equals(-499.0, min(499, -499.0));
@@ -218,7 +218,7 @@
Expect.equals(499, min(499, 499.0));
Expect.equals(499, min(499, 499));
Expect.equals(499, min(499, inf));
- Expect.isTrue(min(499, nan).isNaN());
+ Expect.isTrue(min(499, nan).isNaN);
Expect.isTrue(min(499, -499.0) is double);
Expect.isTrue(min(499, -499) is int);
@@ -229,14 +229,14 @@
Expect.isTrue(min(499, 499) is int);
Expect.isTrue(min(499, inf) is int);
- Expect.isTrue(min(499, -499.0).isNegative());
- Expect.isTrue(min(499, -499).isNegative());
- Expect.isTrue(min(499, -0.0).isNegative());
- Expect.isFalse(min(499, 0.0).isNegative());
- Expect.isFalse(min(499, 0).isNegative());
- Expect.isFalse(min(499, 499.0).isNegative());
- Expect.isFalse(min(499, 499).isNegative());
- Expect.isFalse(min(499, inf).isNegative());
+ Expect.isTrue(min(499, -499.0).isNegative);
+ Expect.isTrue(min(499, -499).isNegative);
+ Expect.isTrue(min(499, -0.0).isNegative);
+ Expect.isFalse(min(499, 0.0).isNegative);
+ Expect.isFalse(min(499, 0).isNegative);
+ Expect.isFalse(min(499, 499.0).isNegative);
+ Expect.isFalse(min(499, 499).isNegative);
+ Expect.isFalse(min(499, inf).isNegative);
Expect.equals(-inf, min(inf, -inf));
Expect.equals(-499.0, min(inf, -499.0));
@@ -247,7 +247,7 @@
Expect.equals(499.0, min(inf, 499.0));
Expect.equals(499, min(inf, 499));
Expect.equals(inf, min(inf, inf));
- Expect.isTrue(min(inf, nan).isNaN());
+ Expect.isTrue(min(inf, nan).isNaN);
Expect.isTrue(min(inf, -499.0) is double);
Expect.isTrue(min(inf, -499) is int);
@@ -258,14 +258,14 @@
Expect.isTrue(min(inf, 499.0) is double);
Expect.isTrue(min(inf, inf) is double);
- Expect.isTrue(min(inf, -499.0).isNegative());
- Expect.isTrue(min(inf, -499).isNegative());
- Expect.isTrue(min(inf, -0.0).isNegative());
- Expect.isFalse(min(inf, 0.0).isNegative());
- Expect.isFalse(min(inf, 0).isNegative());
- Expect.isFalse(min(inf, 499).isNegative());
- Expect.isFalse(min(inf, 499.0).isNegative());
- Expect.isFalse(min(inf, inf).isNegative());
+ Expect.isTrue(min(inf, -499.0).isNegative);
+ Expect.isTrue(min(inf, -499).isNegative);
+ Expect.isTrue(min(inf, -0.0).isNegative);
+ Expect.isFalse(min(inf, 0.0).isNegative);
+ Expect.isFalse(min(inf, 0).isNegative);
+ Expect.isFalse(min(inf, 499).isNegative);
+ Expect.isFalse(min(inf, 499.0).isNegative);
+ Expect.isFalse(min(inf, inf).isNegative);
}
testMax() {
@@ -294,15 +294,15 @@
var inf = double.INFINITY;
var nan = double.NAN;
- Expect.isTrue(max(nan, nan).isNaN());
- Expect.isTrue(max(nan, -inf).isNaN());
- Expect.isTrue(max(nan, -499.0).isNaN());
- Expect.isTrue(max(nan, -499).isNaN());
- Expect.isTrue(max(nan, -0.0).isNaN());
- Expect.isTrue(max(nan, 0.0).isNaN());
- Expect.isTrue(max(nan, 499.0).isNaN());
- Expect.isTrue(max(nan, 499).isNaN());
- Expect.isTrue(max(nan, inf).isNaN());
+ Expect.isTrue(max(nan, nan).isNaN);
+ Expect.isTrue(max(nan, -inf).isNaN);
+ Expect.isTrue(max(nan, -499.0).isNaN);
+ Expect.isTrue(max(nan, -499).isNaN);
+ Expect.isTrue(max(nan, -0.0).isNaN);
+ Expect.isTrue(max(nan, 0.0).isNaN);
+ Expect.isTrue(max(nan, 499.0).isNaN);
+ Expect.isTrue(max(nan, 499).isNaN);
+ Expect.isTrue(max(nan, inf).isNaN);
Expect.equals(inf, max(inf, inf));
Expect.equals(inf, max(inf, 499.0));
@@ -313,7 +313,7 @@
Expect.equals(inf, max(inf, -499));
Expect.equals(inf, max(inf, -499.0));
Expect.equals(inf, max(inf, -inf));
- Expect.isTrue(max(inf, nan).isNaN());
+ Expect.isTrue(max(inf, nan).isNaN);
Expect.equals(inf, max(499.0, inf));
Expect.equals(499.0, max(499.0, 499.0));
@@ -324,7 +324,7 @@
Expect.equals(499.0, max(499.0, -499));
Expect.equals(499.0, max(499.0, -499.0));
Expect.equals(499.0, max(499.0, -inf));
- Expect.isTrue(max(499.0, nan).isNaN());
+ Expect.isTrue(max(499.0, nan).isNaN);
Expect.isTrue(max(499.0, 499.0) is double);
Expect.isTrue(max(499.0, 499) is double);
@@ -344,7 +344,7 @@
Expect.equals(499, max(499, -499));
Expect.equals(499, max(499, -499.0));
Expect.equals(499, max(499, -inf));
- Expect.isTrue(max(499, nan).isNaN());
+ Expect.isTrue(max(499, nan).isNaN);
Expect.isTrue(max(499, 499.0) is int);
Expect.isTrue(max(499, 499) is int);
@@ -364,7 +364,7 @@
Expect.equals(0.0, max(0.0, -499));
Expect.equals(0.0, max(0.0, -499.0));
Expect.equals(0.0, max(0.0, -inf));
- Expect.isTrue(max(0.0, nan).isNaN());
+ Expect.isTrue(max(0.0, nan).isNaN);
Expect.isTrue(max(0.0, 499.0) is double);
Expect.isTrue(max(0.0, 499) is int);
@@ -375,12 +375,12 @@
Expect.isTrue(max(0.0, -499.0) is double);
Expect.isTrue(max(0.0, -inf) is double);
- Expect.isFalse(max(0.0, 0.0).isNegative());
- Expect.isFalse(max(0.0, 0).isNegative());
- Expect.isFalse(max(0.0, -0.0).isNegative());
- Expect.isFalse(max(0.0, -499).isNegative());
- Expect.isFalse(max(0.0, -499.0).isNegative());
- Expect.isFalse(max(0.0, -inf).isNegative());
+ Expect.isFalse(max(0.0, 0.0).isNegative);
+ Expect.isFalse(max(0.0, 0).isNegative);
+ Expect.isFalse(max(0.0, -0.0).isNegative);
+ Expect.isFalse(max(0.0, -499).isNegative);
+ Expect.isFalse(max(0.0, -499.0).isNegative);
+ Expect.isFalse(max(0.0, -inf).isNegative);
Expect.equals(inf, max(0, inf));
Expect.equals(499.0, max(0, 499.0));
@@ -391,7 +391,7 @@
Expect.equals(0, max(0, -499));
Expect.equals(0, max(0, -499.0));
Expect.equals(0, max(0, -inf));
- Expect.isTrue(max(0, nan).isNaN());
+ Expect.isTrue(max(0, nan).isNaN);
Expect.isTrue(max(0, 499.0) is double);
Expect.isTrue(max(0, 499) is int);
@@ -402,12 +402,12 @@
Expect.isTrue(max(0, -499.0) is int);
Expect.isTrue(max(0, -inf) is int);
- Expect.isFalse(max(0, 0.0).isNegative());
- Expect.isFalse(max(0, 0).isNegative());
- Expect.isFalse(max(0, -0.0).isNegative());
- Expect.isFalse(max(0, -499).isNegative());
- Expect.isFalse(max(0, -499.0).isNegative());
- Expect.isFalse(max(0, -inf).isNegative());
+ Expect.isFalse(max(0, 0.0).isNegative);
+ Expect.isFalse(max(0, 0).isNegative);
+ Expect.isFalse(max(0, -0.0).isNegative);
+ Expect.isFalse(max(0, -499).isNegative);
+ Expect.isFalse(max(0, -499.0).isNegative);
+ Expect.isFalse(max(0, -inf).isNegative);
Expect.equals(inf, max(-0.0, inf));
Expect.equals(499.0, max(-0.0, 499.0));
@@ -418,7 +418,7 @@
Expect.equals(-0.0, max(-0.0, -499));
Expect.equals(-0.0, max(-0.0, -499.0));
Expect.equals(-0.0, max(-0.0, -inf));
- Expect.isTrue(max(-0.0, nan).isNaN());
+ Expect.isTrue(max(-0.0, nan).isNaN);
Expect.isTrue(max(-0.0, 499.0) is double);
Expect.isTrue(max(-0.0, 499) is int);
@@ -429,12 +429,12 @@
Expect.isTrue(max(-0.0, -499.0) is double);
Expect.isTrue(max(-0.0, -inf) is double);
- Expect.isFalse(max(-0.0, 0.0).isNegative());
- Expect.isFalse(max(-0.0, 0).isNegative());
- Expect.isTrue(max(-0.0, -0.0).isNegative());
- Expect.isTrue(max(-0.0, -499).isNegative());
- Expect.isTrue(max(-0.0, -499.0).isNegative());
- Expect.isTrue(max(-0.0, -inf).isNegative());
+ Expect.isFalse(max(-0.0, 0.0).isNegative);
+ Expect.isFalse(max(-0.0, 0).isNegative);
+ Expect.isTrue(max(-0.0, -0.0).isNegative);
+ Expect.isTrue(max(-0.0, -499).isNegative);
+ Expect.isTrue(max(-0.0, -499.0).isNegative);
+ Expect.isTrue(max(-0.0, -inf).isNegative);
Expect.equals(inf, max(-499, inf));
Expect.equals(499.0, max(-499, 499.0));
@@ -445,7 +445,7 @@
Expect.equals(-499, max(-499, -499));
Expect.equals(-499, max(-499, -499.0));
Expect.equals(-499, max(-499, -inf));
- Expect.isTrue(max(-499, nan).isNaN());
+ Expect.isTrue(max(-499, nan).isNaN);
Expect.isTrue(max(-499, 499.0) is double);
Expect.isTrue(max(-499, 499) is int);
@@ -456,12 +456,12 @@
Expect.isTrue(max(-499, -499.0) is int);
Expect.isTrue(max(-499, -inf) is int);
- Expect.isFalse(max(-499, 0.0).isNegative());
- Expect.isFalse(max(-499, 0).isNegative());
- Expect.isTrue(max(-499, -0.0).isNegative());
- Expect.isTrue(max(-499, -499).isNegative());
- Expect.isTrue(max(-499, -499.0).isNegative());
- Expect.isTrue(max(-499, -inf).isNegative());
+ Expect.isFalse(max(-499, 0.0).isNegative);
+ Expect.isFalse(max(-499, 0).isNegative);
+ Expect.isTrue(max(-499, -0.0).isNegative);
+ Expect.isTrue(max(-499, -499).isNegative);
+ Expect.isTrue(max(-499, -499.0).isNegative);
+ Expect.isTrue(max(-499, -inf).isNegative);
Expect.equals(inf, max(-499.0, inf));
Expect.equals(499.0, max(-499.0, 499.0));
@@ -472,7 +472,7 @@
Expect.equals(-499.0, max(-499.0, -499));
Expect.equals(-499.0, max(-499.0, -499.0));
Expect.equals(-499.0, max(-499.0, -inf));
- Expect.isTrue(max(-499.0, nan).isNaN());
+ Expect.isTrue(max(-499.0, nan).isNaN);
Expect.isTrue(max(-499.0, 499.0) is double);
Expect.isTrue(max(-499.0, 499) is int);
@@ -483,12 +483,12 @@
Expect.isTrue(max(-499.0, -499.0) is double);
Expect.isTrue(max(-499.0, -inf) is double);
- Expect.isFalse(max(-499.0, 0.0).isNegative());
- Expect.isFalse(max(-499.0, 0).isNegative());
- Expect.isTrue(max(-499.0, -0.0).isNegative());
- Expect.isTrue(max(-499.0, -499).isNegative());
- Expect.isTrue(max(-499.0, -499.0).isNegative());
- Expect.isTrue(max(-499.0, -inf).isNegative());
+ Expect.isFalse(max(-499.0, 0.0).isNegative);
+ Expect.isFalse(max(-499.0, 0).isNegative);
+ Expect.isTrue(max(-499.0, -0.0).isNegative);
+ Expect.isTrue(max(-499.0, -499).isNegative);
+ Expect.isTrue(max(-499.0, -499.0).isNegative);
+ Expect.isTrue(max(-499.0, -inf).isNegative);
Expect.equals(inf, max(-inf, inf));
Expect.equals(499.0, max(-inf, 499.0));
@@ -499,7 +499,7 @@
Expect.equals(-499, max(-inf, -499));
Expect.equals(-499.0, max(-inf, -499.0));
Expect.equals(-inf, max(-inf, -inf));
- Expect.isTrue(max(-inf, nan).isNaN());
+ Expect.isTrue(max(-inf, nan).isNaN);
Expect.isTrue(max(-inf, 499.0) is double);
Expect.isTrue(max(-inf, 499) is int);
@@ -510,12 +510,12 @@
Expect.isTrue(max(-inf, -499.0) is double);
Expect.isTrue(max(-inf, -inf) is double);
- Expect.isFalse(max(-inf, 0.0).isNegative());
- Expect.isFalse(max(-inf, 0).isNegative());
- Expect.isTrue(max(-inf, -0.0).isNegative());
- Expect.isTrue(max(-inf, -499).isNegative());
- Expect.isTrue(max(-inf, -499.0).isNegative());
- Expect.isTrue(max(-inf, -inf).isNegative());
+ Expect.isFalse(max(-inf, 0.0).isNegative);
+ Expect.isFalse(max(-inf, 0).isNegative);
+ Expect.isTrue(max(-inf, -0.0).isNegative);
+ Expect.isTrue(max(-inf, -499).isNegative);
+ Expect.isTrue(max(-inf, -499.0).isNegative);
+ Expect.isTrue(max(-inf, -inf).isNegative);
}
main() {
diff --git a/tests/standalone/crypto/base64_test.dart b/tests/standalone/crypto/base64_test.dart
index 5a77da5..1d47aac 100644
--- a/tests/standalone/crypto/base64_test.dart
+++ b/tests/standalone/crypto/base64_test.dart
@@ -24,13 +24,13 @@
"Rpb24gb2Yga25vd2xlZGdlLCBleGNlZWRzIHRo\r\n"
"ZSBzaG9ydCB2ZWhlbWVuY2Ugb2YgYW55IGNhcm"
"5hbCBwbGVhc3VyZS4=";
- Expect.equals(expected, _Base64._encode(line.charCodes()));
- Expect.listEquals(line.charCodes(), _Base64._decode(expected));
+ Expect.equals(expected, _Base64._encode(line.charCodes));
+ Expect.listEquals(line.charCodes, _Base64._decode(expected));
line = "Simple string";
expected = "U2ltcGxlIHN0cmluZw==";
- Expect.equals(expected, _Base64._encode(line.charCodes()));
- Expect.listEquals(line.charCodes(), _Base64._decode(expected));
+ Expect.equals(expected, _Base64._encode(line.charCodes));
+ Expect.listEquals(line.charCodes, _Base64._decode(expected));
for (int i = 0; i < 256; i++) {
List<int> x = [i];
diff --git a/tests/standalone/io/directory_test.dart b/tests/standalone/io/directory_test.dart
index 73f4c4c..7f29525 100644
--- a/tests/standalone/io/directory_test.dart
+++ b/tests/standalone/io/directory_test.dart
@@ -16,6 +16,7 @@
Directory subDirectory = new Directory("${directory.path}/subdir");
Expect.isFalse(subDirectory.existsSync());
subDirectory.createSync();
+ Expect.isTrue(subDirectory.existsSync());
File f = new File('${subDirectory.path}/file.txt');
Expect.isFalse(f.existsSync());
f.createSync();
@@ -413,7 +414,7 @@
}
void deletePhaseCallback() {
- if (!createdDirectories.isEmpty()) {
+ if (!createdDirectories.isEmpty) {
current = createdDirectories.removeLast();
current.deleteSync();
deletePhaseCallback();
@@ -459,6 +460,83 @@
}
+testCreateExistingSync() {
+ // Test that creating an existing directory succeeds.
+ var d = new Directory('');
+ var temp = d.createTempSync();
+ var subDir = new Directory('${temp.path}/flaf');
+ Expect.isFalse(subDir.existsSync());
+ subDir.createSync();
+ Expect.isTrue(subDir.existsSync());
+ subDir.createSync();
+ Expect.isTrue(subDir.existsSync());
+ temp.deleteRecursivelySync();
+}
+
+
+testCreateExisting() {
+ // Test that creating an existing directory succeeds.
+ var port = new ReceivePort();
+ var d = new Directory('');
+ d.createTemp().then((temp) {
+ var subDir = new Directory('${temp.path}/flaf');
+ subDir.exists().then((dirExists) {
+ Expect.isFalse(dirExists);
+ subDir.create().then((_) {
+ subDir.exists().then((dirExists) {
+ Expect.isTrue(dirExists);
+ subDir.create().then((_) {
+ subDir.exists().then((dirExists) {
+ Expect.isTrue(dirExists);
+ temp.deleteRecursively().then((_) {
+ port.close();
+ });
+ });
+ });
+ });
+ });
+ });
+ });
+}
+
+
+testCreateDirExistingFileSync() {
+ // Test that creating an existing directory succeeds.
+ var d = new Directory('');
+ var temp = d.createTempSync();
+ var path = '${temp.path}/flaf';
+ var file = new File(path);
+ file.createSync();
+ Expect.isTrue(file.existsSync());
+ Expect.throws(new Directory(path).createSync,
+ (e) => e is DirectoryIOException);
+ temp.deleteRecursivelySync();
+}
+
+
+testCreateDirExistingFile() {
+ // Test that creating an existing directory succeeds.
+ var port = new ReceivePort();
+ var d = new Directory('');
+ d.createTemp().then((temp) {
+ var path = '${temp.path}/flaf';
+ var file = new File(path);
+ var subDir = new Directory(path);
+ file.create().then((_) {
+ subDir.create()
+ ..then((_) { Expect.fail("dir create should fail on existing file"); })
+ ..handleException((e) {
+ Expect.isTrue(e is DirectoryIOException);
+ temp.deleteRecursively().then((_) {
+ port.close();
+ });
+ return true;
+ });
+ });
+ });
+}
+
+
testRename() {
var d = new Directory('');
var temp1 = d.createTempSync();
@@ -483,5 +561,9 @@
NestedTempDirectoryTest.testMain();
testCreateTempErrorSync();
testCreateTempError();
+ testCreateExistingSync();
+ testCreateExisting();
+ testCreateDirExistingFileSync();
+ testCreateDirExistingFile();
testRename();
}
diff --git a/tests/standalone/io/file_input_stream_test.dart b/tests/standalone/io/file_input_stream_test.dart
index 31733b0..1b7475d 100644
--- a/tests/standalone/io/file_input_stream_test.dart
+++ b/tests/standalone/io/file_input_stream_test.dart
@@ -33,7 +33,7 @@
void testInputStreamAsync() {
String fileName = getFilename("tests/standalone/io/readuntil_test.dat");
// File contains "Hello Dart\nwassup!\n"
- var expected = "Hello Dart\nwassup!\n".charCodes();
+ var expected = "Hello Dart\nwassup!\n".charCodes;
InputStream x = (new File(fileName)).openInputStream();
var byteCount = 0;
x.onData = () {
@@ -95,7 +95,7 @@
void testUnreadyInputStream() {
String fileName = getFilename("tests/standalone/io/readuntil_test.dat");
- var expected = "Hello Dart\nwassup!\n".charCodes();
+ var expected = "Hello Dart\nwassup!\n".charCodes;
InputStream x = (new File(fileName)).openInputStream();
List<int> buffer = new List<int>(100);
diff --git a/tests/standalone/io/file_system_links_test.dart b/tests/standalone/io/file_system_links_test.dart
index 453ebb5..e0f90e0 100644
--- a/tests/standalone/io/file_system_links_test.dart
+++ b/tests/standalone/io/file_system_links_test.dart
@@ -65,7 +65,7 @@
var y = '${temp.path}${Platform.pathSeparator}y';
new File(x).createSync();
createLink(x, y, true, () {
- var data = "asdf".charCodes();
+ var data = "asdf".charCodes;
var output = new File(y).openOutputStream(FileMode.WRITE);
output.write(data);
output.onNoPendingWrites = () {
diff --git a/tests/standalone/io/file_test.dart b/tests/standalone/io/file_test.dart
index 70d7f79..4fd426a 100644
--- a/tests/standalone/io/file_test.dart
+++ b/tests/standalone/io/file_test.dart
@@ -398,7 +398,7 @@
File file = new File(filename);
file.createSync();
Expect.isTrue(new File(filename).existsSync());
- List<int> buffer = content.charCodes();
+ List<int> buffer = content.charCodes;
RandomAccessFile openedFile = file.openSync(FileMode.WRITE);
openedFile.writeListSync(buffer, 0, buffer.length);
openedFile.closeSync();
@@ -421,7 +421,7 @@
String filename = tempDirectory.path.concat("/outstream_write_append");
File file = new File(filename);
file.createSync();
- List<int> buffer = content.charCodes();
+ List<int> buffer = content.charCodes;
OutputStream outStream = file.openOutputStream();
outStream.write(buffer);
outStream.onNoPendingWrites = () {
@@ -458,7 +458,7 @@
String filename = tempDirectory.path.concat("/outstream_write_string");
File file = new File(filename);
file.createSync();
- List<int> buffer = content.charCodes();
+ List<int> buffer = content.charCodes;
OutputStream outStream = file.openOutputStream();
outStream.writeString("abcdABCD");
outStream.writeString("abcdABCD", Encoding.UTF_8);
@@ -1045,11 +1045,11 @@
f.readAsText(Encoding.UTF_8).then((text) {
Expect.equals(6, text.length);
var expected = [955, 120, 46, 32, 120, 10];
- Expect.listEquals(expected, text.charCodes());
+ Expect.listEquals(expected, text.charCodes);
f.readAsText(Encoding.ISO_8859_1).then((text) {
Expect.equals(7, text.length);
var expected = [206, 187, 120, 46, 32, 120, 10];
- Expect.listEquals(expected, text.charCodes());
+ Expect.listEquals(expected, text.charCodes);
var readAsTextFuture = f.readAsText(Encoding.ASCII);
readAsTextFuture.then((text) {
Expect.fail("Non-ascii char should cause error");
@@ -1086,12 +1086,12 @@
text = new File(name).readAsTextSync();
Expect.equals(6, text.length);
var expected = [955, 120, 46, 32, 120, 10];
- Expect.listEquals(expected, text.charCodes());
+ Expect.listEquals(expected, text.charCodes);
Expect.throws(() { new File(name).readAsTextSync(Encoding.ASCII); });
text = new File(name).readAsTextSync(Encoding.ISO_8859_1);
expected = [206, 187, 120, 46, 32, 120, 10];
Expect.equals(7, text.length);
- Expect.listEquals(expected, text.charCodes());
+ Expect.listEquals(expected, text.charCodes);
}
static void testReadAsTextSyncEmptyFile() {
diff --git a/tests/standalone/io/http_basic_test.dart b/tests/standalone/io/http_basic_test.dart
index eba971b..0407046 100644
--- a/tests/standalone/io/http_basic_test.dart
+++ b/tests/standalone/io/http_basic_test.dart
@@ -228,7 +228,7 @@
request.outputStream.writeString(data.substring(10, data.length));
} else {
request.contentLength = data.length;
- request.outputStream.write(data.charCodes());
+ request.outputStream.write(data.charCodes);
}
request.outputStream.close();
};
diff --git a/tests/standalone/io/http_client_test.dart b/tests/standalone/io/http_client_test.dart
index 9fe3f15..55ec617 100644
--- a/tests/standalone/io/http_client_test.dart
+++ b/tests/standalone/io/http_client_test.dart
@@ -25,25 +25,31 @@
conn.onError = (error) => Expect.fail("Unexpected IO error");
}
+int testGoogleUrlCount = 0;
void testGoogleUrl() {
HttpClient client = new HttpClient();
void testUrl(String url) {
- var conn = client.getUrl(new Uri.fromString(url));
+ var requestUri = new Uri.fromString(url);
+ var conn = client.getUrl(requestUri);
conn.onRequest = (HttpClientRequest request) {
request.outputStream.close();
};
conn.onResponse = (HttpClientResponse response) {
+ testGoogleUrlCount++;
Expect.isTrue(response.statusCode < 500);
+ if (requestUri.path.length == 0) {
+ Expect.isTrue(response.statusCode != 404);
+ }
response.inputStream.onData = () {
response.inputStream.read();
};
response.inputStream.onClosed = () {
- client.shutdown();
+ if (testGoogleUrlCount == 5) client.shutdown();
};
};
- conn.onError = (error) => Expect.fail("Unexpected IO error");
+ conn.onError = (error) => Expect.fail("Unexpected IO error $error");
}
testUrl('http://www.google.com');
diff --git a/tests/standalone/io/http_parser_test.dart b/tests/standalone/io/http_parser_test.dart
index 2e18a88..456ffc2 100644
--- a/tests/standalone/io/http_parser_test.dart
+++ b/tests/standalone/io/http_parser_test.dart
@@ -110,7 +110,7 @@
// Test parsing the request three times delivering the data in
// different chunks.
- List<int> requestData = request.charCodes();
+ List<int> requestData = request.charCodes;
testWrite(requestData);
testWrite(requestData, 10);
testWrite(requestData, 1);
@@ -143,7 +143,7 @@
// Test parsing the request three times delivering the data in
// different chunks.
- List<int> requestData = request.charCodes();
+ List<int> requestData = request.charCodes;
testWrite(requestData);
testWrite(requestData, 10);
testWrite(requestData, 1);
@@ -259,7 +259,7 @@
// Test parsing the request three times delivering the data in
// different chunks.
- List<int> responseData = response.charCodes();
+ List<int> responseData = response.charCodes;
testWrite(responseData);
testWrite(responseData, 10);
testWrite(responseData, 1);
@@ -291,7 +291,7 @@
// Test parsing the request three times delivering the data in
// different chunks.
- List<int> responseData = response.charCodes();
+ List<int> responseData = response.charCodes;
testWrite(responseData);
testWrite(responseData, 10);
testWrite(responseData, 1);
diff --git a/tests/standalone/io/http_read_test.dart b/tests/standalone/io/http_read_test.dart
index 3a0c849..15e2606 100644
--- a/tests/standalone/io/http_read_test.dart
+++ b/tests/standalone/io/http_read_test.dart
@@ -173,7 +173,7 @@
request.outputStream.writeString(data.substring(10, data.length));
} else {
request.contentLength = data.length;
- request.outputStream.write(data.charCodes());
+ request.outputStream.write(data.charCodes);
}
request.outputStream.close();
};
@@ -227,7 +227,7 @@
request.outputStream.writeString(data.substring(10, data.length));
} else {
request.contentLength = data.length;
- request.outputStream.write(data.charCodes());
+ request.outputStream.write(data.charCodes);
}
request.outputStream.close();
};
diff --git a/tests/standalone/io/http_server_early_client_close_test.dart b/tests/standalone/io/http_server_early_client_close_test.dart
index fcfd9a8..66a2b06 100644
--- a/tests/standalone/io/http_server_early_client_close_test.dart
+++ b/tests/standalone/io/http_server_early_client_close_test.dart
@@ -43,7 +43,7 @@
List<int> d;
if (data is List<int>) d = data;
- if (data is String) d = data.charCodes();
+ if (data is String) d = data.charCodes;
if (d == null) Expect.fail("Invalid data");
sendData(d, server.port);
@@ -80,7 +80,7 @@
HttpServer server = new HttpServer();
server.listen("127.0.0.1", 0);
void runTest(Iterator it) {
- if (it.hasNext()) {
+ if (it.hasNext) {
it.next().execute(server).then((_) => runTest(it));
} else {
server.close();
diff --git a/tests/standalone/io/http_server_socket_test.dart b/tests/standalone/io/http_server_socket_test.dart
index 113d75be..a7722ca 100644
--- a/tests/standalone/io/http_server_socket_test.dart
+++ b/tests/standalone/io/http_server_socket_test.dart
@@ -109,7 +109,7 @@
OutputStream get outputStream => _outputStream;
- int hashCode() => _hashCode;
+ int get hashCode => _hashCode;
List<int> _read;
bool _closed = false;
@@ -127,9 +127,9 @@
_sockets = new Set<Socket>();
void spawnSocket(var data, String response, int cutOff, bool closeAsError) {
- if (data is String) data = data.charCodes();
+ if (data is String) data = data.charCodes;
SocketMock socket = new SocketMock(data,
- response.charCodes(),
+ response.charCodes,
cutOff,
closeAsError);
_sockets.add(socket);
diff --git a/tests/standalone/io/http_session_test.dart b/tests/standalone/io/http_session_test.dart
new file mode 100644
index 0000000..dd2e059
--- /dev/null
+++ b/tests/standalone/io/http_session_test.dart
@@ -0,0 +1,103 @@
+// 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("dart:io");
+
+const SESSION_ID = "DARTSESSID";
+
+String getSessionId(List<Cookie> cookies) {
+ var id = cookies.reduce(null, (last, cookie) {
+ if (last != null) return last;
+ if (cookie.name.toUpperCase() == SESSION_ID) {
+ return cookie.value;
+ }
+ return null;
+ });
+ Expect.isNotNull(id);
+ return id;
+}
+
+Future<String> connectGetSession(int port, [String session]) {
+ var c = new Completer();
+ var client = new HttpClient();
+ var conn = client.get("127.0.0.1", port, "/");
+ conn.onRequest = (request) {
+ if (session != null) {
+ request.cookies.add(new Cookie(SESSION_ID, session));
+ }
+ request.outputStream.close();
+ };
+ conn.onResponse = (response) {
+ client.shutdown();
+ c.complete(getSessionId(response.cookies));
+ };
+ return c.future;
+}
+
+void testSessions(int sessionCount) {
+ HttpServer server = new HttpServer();
+ server.listen("127.0.0.1", 0);
+ var sessions = new Set();
+ server.defaultRequestHandler = (request, response) {
+ sessions.add(request.session().id);
+ response.outputStream.close();
+ };
+
+ var futures = [];
+ for (int i = 0; i < sessionCount; i++) {
+ futures.add(connectGetSession(server.port).chain((session) {
+ Expect.isNotNull(session);
+ Expect.isTrue(sessions.contains(session));
+ return connectGetSession(server.port, session).transform((session2) {
+ Expect.equals(session2, session);
+ Expect.isTrue(sessions.contains(session2));
+ return session2;
+ });
+ }));
+ }
+ Futures.wait(futures).then((clientSessions) {
+ Expect.equals(sessions.length, sessionCount);
+ Expect.setEquals(new Set.from(clientSessions), sessions);
+ server.close();
+ });
+}
+
+void testTimeout(int sessionCount) {
+ HttpServer server = new HttpServer();
+ server.sessionTimeout = 0;
+ server.listen("127.0.0.1", 0);
+ var timeouts = [];
+ server.defaultRequestHandler = (request, response) {
+ var c = new Completer();
+ timeouts.add(c.future);
+ request.session().onTimeout = () {
+ c.complete(null);
+ };
+ response.outputStream.close();
+ };
+
+ var futures = [];
+ for (int i = 0; i < sessionCount; i++) {
+ futures.add(connectGetSession(server.port));
+ }
+ Futures.wait(futures).then((clientSessions) {
+ Futures.wait(timeouts).then((_) {
+ futures = [];
+ for (var id in clientSessions) {
+ futures.add(connectGetSession(server.port, id).transform((session) {
+ Expect.isNotNull(session);
+ Expect.notEquals(id, session);
+ }));
+ }
+ Futures.wait(futures).then((_) {
+ server.close();
+ });
+ });
+ });
+}
+
+void main() {
+ testSessions(5);
+ testTimeout(5);
+}
diff --git a/tests/standalone/io/mime_multipart_parser_test.dart b/tests/standalone/io/mime_multipart_parser_test.dart
index 32af07a..d349a4f 100644
--- a/tests/standalone/io/mime_multipart_parser_test.dart
+++ b/tests/standalone/io/mime_multipart_parser_test.dart
@@ -42,7 +42,7 @@
if (expectedParts[partCount] != null) {
List<int> expectedPart;
if (expectedParts[partCount] is String) {
- expectedPart = expectedParts[partCount].charCodes();
+ expectedPart = expectedParts[partCount].charCodes;
} else {
expectedPart = expectedParts[partCount];
}
@@ -78,7 +78,7 @@
// Test parsing the data three times delivering the data in
// different chunks.
- List<int> data = message.charCodes();
+ List<int> data = message.charCodes;
testWrite(data);
testWrite(data, 10);
testWrite(data, 2);
diff --git a/tests/standalone/io/process_environment_test.dart b/tests/standalone/io/process_environment_test.dart
index 1a2009e..df635ec 100644
--- a/tests/standalone/io/process_environment_test.dart
+++ b/tests/standalone/io/process_environment_test.dart
@@ -23,10 +23,10 @@
testEnvironment() {
var donePort = new ReceivePort();
Map env = Platform.environment;
- Expect.isFalse(env.isEmpty());
+ Expect.isFalse(env.isEmpty);
// Check that some value in the environment stays the same when passed
// to another process.
- for (var k in env.getKeys()) {
+ for (var k in env.keys) {
runEnvironmentProcess(env, k, (output) {
// Only check startsWith. The print statements will add
// newlines at the end.
diff --git a/tests/standalone/io/process_kill_test.dart b/tests/standalone/io/process_kill_test.dart
new file mode 100644
index 0000000..400902e
--- /dev/null
+++ b/tests/standalone/io/process_kill_test.dart
@@ -0,0 +1,26 @@
+// 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.
+//
+// Process test program to test process communication.
+
+#library("ProcessKillTest");
+#import("dart:io");
+#source("process_test_util.dart");
+
+testKill() {
+ // Start a process that will hang waiting for input until killed.
+ Process.start(getProcessTestFileName(), const ["0", "1", "0", "0"]).then((p) {
+ p.onExit = (exitCode) {
+ // Process killed from the side so exit code is not 0.
+ Expect.isTrue(exitCode != 0);
+ // Killing a process that is already dead returns false.
+ Expect.isFalse(p.kill());
+ };
+ Expect.isTrue(p.kill());
+ });
+}
+
+main() {
+ testKill();
+}
diff --git a/tests/standalone/io/process_run_output_test.dart b/tests/standalone/io/process_run_output_test.dart
index 4d8ae84..3111df9 100644
--- a/tests/standalone/io/process_run_output_test.dart
+++ b/tests/standalone/io/process_run_output_test.dart
@@ -14,7 +14,7 @@
} else if (encoding == 'latin1') {
Expect.equals(output, 'æøå');
} else if (encoding == 'utf8') {
- Expect.listEquals(output.charCodes(), [955]);
+ Expect.listEquals(output.charCodes, [955]);
}
}
diff --git a/tests/standalone/io/process_stderr_test.dart b/tests/standalone/io/process_stderr_test.dart
index 49336e1..8cd987f 100644
--- a/tests/standalone/io/process_stderr_test.dart
+++ b/tests/standalone/io/process_stderr_test.dart
@@ -20,7 +20,7 @@
Expect.equals(expectedExitCode, exitCode);
};
- List<int> data = "ABCDEFGHI\n".charCodes();
+ List<int> data = "ABCDEFGHI\n".charCodes;
final int dataSize = data.length;
InputStream input = process.stderr;
diff --git a/tests/standalone/io/process_stdout_test.dart b/tests/standalone/io/process_stdout_test.dart
index 614d161..ecebe73 100644
--- a/tests/standalone/io/process_stdout_test.dart
+++ b/tests/standalone/io/process_stdout_test.dart
@@ -20,7 +20,7 @@
Expect.equals(expectedExitCode, exitCode);
};
- List<int> data = "ABCDEFGHI\n".charCodes();
+ List<int> data = "ABCDEFGHI\n".charCodes;
final int dataSize = data.length;
InputStream input = process.stdout;
diff --git a/tests/standalone/io/read_into_const_list_test.dart b/tests/standalone/io/read_into_const_list_test.dart
index b87d2d8..c7d1da1 100644
--- a/tests/standalone/io/read_into_const_list_test.dart
+++ b/tests/standalone/io/read_into_const_list_test.dart
@@ -22,7 +22,7 @@
input.readInto(a, 0, 1);
Expect.fail("no exception thrown");
} catch (e) {
- Expect.isTrue(e is UnsupportedOperationException);
+ Expect.isTrue(e is UnsupportedError);
}
Expect.equals(0, a[0]);
Expect.equals(0, b[0]);
diff --git a/tests/standalone/io/regress-1925.dart b/tests/standalone/io/regress-1925.dart
index 4409e6a..6e68160 100644
--- a/tests/standalone/io/regress-1925.dart
+++ b/tests/standalone/io/regress-1925.dart
@@ -39,7 +39,7 @@
var buffer = new List(5);
Socket socket = new Socket(TestingServer.HOST, _port);
socket.onConnect = () {
- socket.outputStream.write("12345".charCodes());
+ socket.outputStream.write("12345".charCodes);
socket.outputStream.close();
socket.inputStream.onData = () {
count += socket.inputStream.readInto(buffer, count);
diff --git a/tests/standalone/io/socket_close_test.dart b/tests/standalone/io/socket_close_test.dart
index 6966a70..5996173 100644
--- a/tests/standalone/io/socket_close_test.dart
+++ b/tests/standalone/io/socket_close_test.dart
@@ -102,7 +102,7 @@
void writeHello() {
int bytesWritten = 0;
while (bytesWritten != 5) {
- bytesWritten += _socket.writeList("Hello".charCodes(),
+ bytesWritten += _socket.writeList("Hello".charCodes,
bytesWritten,
5 - bytesWritten);
}
@@ -229,7 +229,7 @@
void writeHello() {
int bytesWritten = 0;
while (bytesWritten != 5) {
- bytesWritten += connection.writeList("Hello".charCodes(),
+ bytesWritten += connection.writeList("Hello".charCodes,
bytesWritten,
5 - bytesWritten);
}
diff --git a/tests/standalone/io/socket_stream_close_test.dart b/tests/standalone/io/socket_stream_close_test.dart
index 31bafd1..0c1e47f 100644
--- a/tests/standalone/io/socket_stream_close_test.dart
+++ b/tests/standalone/io/socket_stream_close_test.dart
@@ -109,7 +109,7 @@
proceed();
break;
case 1:
- _socket.outputStream.write("Hello".charCodes());
+ _socket.outputStream.write("Hello".charCodes);
_socket.outputStream.onNoPendingWrites = () {
_socket.inputStream.close();
proceed();
@@ -118,20 +118,20 @@
case 2:
case 3:
case 4:
- _socket.outputStream.write("Hello".charCodes());
+ _socket.outputStream.write("Hello".charCodes);
break;
case 5:
- _socket.outputStream.write("Hello".charCodes());
+ _socket.outputStream.write("Hello".charCodes);
_socket.outputStream.onNoPendingWrites = () {
_socket.outputStream.close();
};
break;
case 6:
- _socket.outputStream.write("Hello".charCodes());
+ _socket.outputStream.write("Hello".charCodes);
break;
case 7:
case 8:
- _socket.outputStream.write("Hello".charCodes());
+ _socket.outputStream.write("Hello".charCodes);
_socket.outputStream.onNoPendingWrites = () {
_socket.outputStream.close();
};
@@ -255,7 +255,7 @@
case 3:
readBytes(() {
_dataEvents++;
- connection.outputStream.write("Hello".charCodes());
+ connection.outputStream.write("Hello".charCodes);
connection.outputStream.onNoPendingWrites = () {
connection.inputStream.close();
};
@@ -264,21 +264,21 @@
case 4:
readBytes(() {
_dataEvents++;
- connection.outputStream.write("Hello".charCodes());
+ connection.outputStream.write("Hello".charCodes);
connection.inputStream.close();
});
break;
case 5:
readBytes(() {
_dataEvents++;
- connection.outputStream.write("Hello".charCodes());
+ connection.outputStream.write("Hello".charCodes);
});
break;
case 6:
case 7:
readBytes(() {
_dataEvents++;
- connection.outputStream.write("Hello".charCodes());
+ connection.outputStream.write("Hello".charCodes);
connection.outputStream.onNoPendingWrites = () {
connection.outputStream.close();
};
@@ -287,7 +287,7 @@
case 8:
readBytes(() {
_dataEvents++;
- connection.outputStream.write("Hello".charCodes());
+ connection.outputStream.write("Hello".charCodes);
connection.outputStream.close();
});
break;
diff --git a/tests/standalone/io/string_stream_test.dart b/tests/standalone/io/string_stream_test.dart
index 7084a07..ade6c8d 100644
--- a/tests/standalone/io/string_stream_test.dart
+++ b/tests/standalone/io/string_stream_test.dart
@@ -97,7 +97,7 @@
stream.onData = stringData;
stream.onClosed = streamClosed;
- s.write("Line".charCodes());
+ s.write("Line".charCodes);
}
void testReadLine2() {
@@ -121,7 +121,7 @@
Expect.equals(2, stream.available());
Expect.equals(null, line);
stage++;
- s.write("ne4\n".charCodes());
+ s.write("ne4\n".charCodes);
} else if (stage == 1) {
Expect.equals(6, stream.available());
line = stream.readLine();
@@ -130,7 +130,7 @@
line = stream.readLine();
Expect.equals(null, line);
stage++;
- s.write("\n\n\r\n\r\n\r\r".charCodes());
+ s.write("\n\n\r\n\r\n\r\r".charCodes);
} else if (stage == 2) {
// Expect 5 empty lines. As long as the stream is not closed the
// final \r cannot be interpreted as a end of line.
@@ -162,7 +162,7 @@
stream.onLine = stringData;
stream.onClosed = streamClosed;
- s.write("Line1\nLine2\r\nLine3\rLi".charCodes());
+ s.write("Line1\nLine2\r\nLine3\rLi".charCodes);
}
void testReadChunks() {
@@ -198,7 +198,7 @@
Expect.equals(0, stream.available());
}
- s.write("ABCD1234".charCodes());
+ s.write("ABCD1234".charCodes);
stream.onData = stringData;
}
@@ -224,7 +224,7 @@
Expect.equals(null, data);
data = stream.read(4);
Expect.equals("1234", data);
- s.write("A\r\nBCD\n1234".charCodes());
+ s.write("A\r\nBCD\n1234".charCodes);
stage++;
} else if (stage == 1) {
Expect.equals(11, stream.available());
@@ -243,7 +243,7 @@
Expect.equals(null, data);
data = stream.read(4);
Expect.equals("1234", data);
- s.write("A\r\nBCD\n1234".charCodes());
+ s.write("A\r\nBCD\n1234".charCodes);
stage++;
} else if (stage == 2) {
Expect.equals(11, stream.available());
@@ -264,7 +264,7 @@
Expect.equals(true, stream.closed);
}
- s.write("A\r\nBCD\n1234".charCodes());
+ s.write("A\r\nBCD\n1234".charCodes);
stream.onData = stringData;
stream.onClosed = streamClosed;
}
diff --git a/tests/standalone/io/test_runner_exit_code_test.dart b/tests/standalone/io/test_runner_exit_code_test.dart
index 9799ebb..ced3acc 100644
--- a/tests/standalone/io/test_runner_exit_code_test.dart
+++ b/tests/standalone/io/test_runner_exit_code_test.dart
@@ -5,7 +5,7 @@
#import('dart:io');
void runTests(String executable, String script, Iterator iterator) {
- if (iterator.hasNext()) {
+ if (iterator.hasNext) {
var progressIndicator = iterator.next();
Process.run(executable, [script, progressIndicator]).then((result) {
Expect.equals(1, result.exitCode);
diff --git a/tests/standalone/io/test_runner_test.dart b/tests/standalone/io/test_runner_test.dart
index 2f449e8..909d1a5 100644
--- a/tests/standalone/io/test_runner_test.dart
+++ b/tests/standalone/io/test_runner_test.dart
@@ -16,7 +16,7 @@
// Used as TestCase.completedCallback.
static processCompletedTest(TestCase testCase) {
TestOutput output = testCase.output;
- print("Test: ${testCase.commands.last().commandLine}");
+ print("Test: ${testCase.commands.last.commandLine}");
if (output.unexpectedOutput) {
throw "Unexpected output: ${output.result}";
}
@@ -75,7 +75,7 @@
// Otherwise, run one of the component tests that always pass,
// fail, or timeout.
var arguments = new Options().arguments;
- if (arguments.isEmpty()) {
+ if (arguments.isEmpty) {
testTestRunner();
} else {
switch (arguments[0]) {
diff --git a/tests/standalone/io/url_encoding_test.dart b/tests/standalone/io/url_encoding_test.dart
index 33b131c..4cf2eaa 100644
--- a/tests/standalone/io/url_encoding_test.dart
+++ b/tests/standalone/io/url_encoding_test.dart
@@ -25,14 +25,14 @@
String queryString =
'%3F=%3D&foo=bar&%26=%25&sqrt2=%E2%88%9A2&name=Franti%C5%A1ek';
Map<String, String> map = _HttpUtils.splitQueryString(queryString);
- for (String key in map.getKeys()) {
+ for (String key in map.keys) {
Expect.equals(map[key], { '&' : '%',
'foo' : 'bar',
'?' : '=',
'sqrt2' : '\u221A2',
'name' : 'Franti\u0161ek'}[key]);
}
- Expect.setEquals(map.getKeys(), ['&', '?', 'foo', 'sqrt2', 'name']);
+ Expect.setEquals(map.keys, ['&', '?', 'foo', 'sqrt2', 'name']);
}
void main() {
diff --git a/tests/standalone/medium_integer_test.dart b/tests/standalone/medium_integer_test.dart
index dc6042c..8abdaee 100644
--- a/tests/standalone/medium_integer_test.dart
+++ b/tests/standalone/medium_integer_test.dart
@@ -101,8 +101,8 @@
testMintAnd(0x100000001);
var a = 100000000000;
var b = 100000000001;
- Expect.equals(false, a.hashCode() == b.hashCode());
- Expect.equals(true, a.hashCode() == (b - 1).hashCode());
+ Expect.equals(false, a.hashCode == b.hashCode);
+ Expect.equals(true, a.hashCode == (b - 1).hashCode);
}
}
diff --git a/tests/standalone/standalone.status b/tests/standalone/standalone.status
index c600fda..cb5fd3e 100644
--- a/tests/standalone/standalone.status
+++ b/tests/standalone/standalone.status
@@ -6,6 +6,21 @@
package/invalid_uri_test: Fail, OK # Fails intentionally
+[ $runtime == vm ]
+# The following tests require files in the tools-directory to be modified.
+# However the tools directory uses its own version of dart-binary. We reenable
+# these tests when we update the dart-binary.
+status_expression_test: Fail, OK
+io/status_file_parser_test: Fail, OK
+io/test_runner_exit_code_test: Fail, OK
+io/test_runner_test: Fail, OK
+
+[ $compiler == dart2js || ($compiler == none && $runtime == drt) ]
+# The following tests require files in the tools-directory to be modified.
+# However the tools directory uses its own version of dart-binary. We reenable
+# these tests when we update the dart-binary.
+status_expression_test: Fail, OK
+
[ $runtime == vm && $checked ]
# These tests have type errors on purpose.
io/process_invalid_arguments_test: Fail, OK
@@ -55,7 +70,7 @@
io/process_exit_negative_test: Fail, OK # relies on a static error that is a warning now.
package/package_isolate_test: Skip # spawnUri does not work in dart2js. See issue 3051
-[ $compiler == dart2js && $runtime == d8 ]
+[ $compiler == dart2js && $jscl ]
assert_test: Fail, OK # Assumes unspecified fields on the AssertionError.
byte_array_test: Fail, OK # ByteArray
deoptimization_test: Fail, OK # Requires bigint.
diff --git a/tests/utils/utils.status b/tests/utils/utils.status
index 184160c..0ccca1e 100644
--- a/tests/utils/utils.status
+++ b/tests/utils/utils.status
@@ -23,8 +23,6 @@
*_layout_test: Skip
[ $compiler == dartc ]
-dummy_compiler_test: Fail # http://dartbug.com/6073
-recursive_import_test: Fail # http://dartbug.com/6073
[ $compiler == dart2dart ]
# Skip until we stabilize language tests.
diff --git a/tools/VERSION b/tools/VERSION
index f3212af..27c08d5 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -1,4 +1,4 @@
MAJOR 0
MINOR 2
-BUILD 0
-PATCH 1
+BUILD 1
+PATCH 0
diff --git a/tools/bots/android.py b/tools/bots/android.py
new file mode 100644
index 0000000..5ccc4e9
--- /dev/null
+++ b/tools/bots/android.py
@@ -0,0 +1,55 @@
+#!/usr/bin/python
+
+# Copyright (c) 2012 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+"""
+Android buildbot steps.
+"""
+
+import re
+import sys
+
+import bot
+
+ANDROID_BUILDER = r'vm-android-(linux|mac|win)'
+
+def AndroidConfig(name, is_buildbot):
+ """Returns info for the current buildbot based on the name of the builder.
+
+ Currently, this is just:
+ - mode: always "release" (for now)
+ - system: "linux", "mac", or "win"
+ """
+ android_pattern = re.match(ANDROID_BUILDER, name)
+ if not android_pattern:
+ return None
+
+ system = android_pattern.group(1)
+ if system == 'win': system = 'windows'
+
+ return bot.BuildInfo('none', 'vm', 'release', system, checked=True)
+
+
+def AndroidSteps(build_info):
+ # TODO(efortuna): Here's where we'll run tests.
+ #bot.RunTest('android', build_info, ['android'])
+ pass
+
+def BuildAndroid(build_info):
+ """
+ Builds the android target.
+
+ - build_info: the buildInfo object, containing information about what sort of
+ build and test to be run.
+ """
+ with bot.BuildStep('Build Android'):
+ targets = ['dart']
+ args = [sys.executable, './tools/build.py', '--mode=' + build_info.mode,
+ '--os=android ' + ' '.join(targets)]
+ print 'Building Android: %s' % (' '.join(args))
+ bot.RunProcess(args)
+
+if __name__ == '__main__':
+ bot.RunBot(AndroidConfig, AndroidSteps, build_step=BuildAndroid)
diff --git a/tools/bots/bot.py b/tools/bots/bot.py
new file mode 100644
index 0000000..5bde985
--- /dev/null
+++ b/tools/bots/bot.py
@@ -0,0 +1,239 @@
+#!/usr/bin/python
+
+# Copyright (c) 2012 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+"""
+Shared code for use in the buildbot scripts.
+"""
+
+import optparse
+import os
+from os.path import abspath
+from os.path import dirname
+import subprocess
+import sys
+
+DART_PATH = dirname(dirname(dirname(abspath(__file__))))
+
+NO_COLOR_ENV = dict(os.environ)
+NO_COLOR_ENV['TERM'] = 'nocolor'
+
+BUILDER_NAME = 'BUILDBOT_BUILDERNAME'
+BUILDER_CLOBBER = 'BUILDBOT_CLOBBER'
+
+
+class BuildInfo(object):
+ """
+ Encapsulation of build information.
+
+ - compiler: None, 'dart2dart', 'dart2js' or 'dartc'.
+ - runtime: 'd8', 'ie', 'ff', 'safari', 'chrome', 'opera', or None.
+ - mode: 'debug' or 'release'.
+ - system: 'linux', 'mac', or 'win7'.
+ - checked: True if we should run in checked mode, otherwise False.
+ - host_checked: True if we should run in host checked mode, otherwise False.
+ - minified: True if we should minify the code, otherwise False
+ - shard_index: The shard we are running, None when not specified.
+ - total_shards: The total number of shards, None when not specified.
+ - is_buildbot: True if we are on a buildbot (or emulating it).
+ - test_set: Specification of a non standard test set or None.
+ """
+ def __init__(self, compiler, runtime, mode, system, checked=False,
+ host_checked=False, minified=False, shard_index=None,
+ total_shards=None, is_buildbot=False, test_set=None):
+ self.compiler = compiler
+ self.runtime = runtime
+ self.mode = mode
+ self.system = system
+ self.checked = checked
+ self.host_checked = host_checked
+ self.minified = minified
+ self.shard_index = shard_index
+ self.total_shards = total_shards
+ self.is_buildbot = is_buildbot
+ self.test_set = test_set
+
+ def PrintBuildInfo(self):
+ shard_description = ""
+ if self.shard_index:
+ shard_description = " shard %s of %s" % (self.shard_index,
+ self.total_shards)
+ print ("compiler: %s, runtime: %s mode: %s, system: %s,"
+ " checked: %s, host-checked: %s, minified: %s, test-set: %s%s"
+ ) % (self.compiler, self.runtime, self.mode, self.system,
+ self.checked, self.host_checked, self.minified, self.test_set,
+ shard_description)
+
+
+class BuildStep(object):
+ """
+ A context manager for handling build steps.
+
+ When the context manager is entered, it prints the "@@@BUILD_STEP __@@@"
+ message. If it exits from an error being raised it displays the
+ "@@@STEP_FAILURE@@@" message.
+
+ If swallow_error is True, then this will catch and discard any OSError that
+ is thrown. This lets you run later BuildSteps if the current one fails.
+ """
+ def __init__(self, name, swallow_error=False):
+ self.name = name
+ self.swallow_error = swallow_error
+
+ def __enter__(self):
+ print '@@@BUILD_STEP %s@@@' % self.name
+
+ def __exit__(self, type, value, traceback):
+ if value:
+ print '@@@STEP_FAILURE@@@'
+ if self.swallow_error and isinstance(value, OSError):
+ return True
+
+
+def BuildSDK(build_info):
+ """
+ Builds the SDK.
+
+ - build_info: the buildInfo object, containing information about what sort of
+ build and test to be run.
+ """
+ with BuildStep('Build SDK'):
+ args = [sys.executable, './tools/build.py', '--mode=' + build_info.mode,
+ 'create_sdk']
+ print 'Building SDK: %s' % (' '.join(args))
+ RunProcess(args)
+
+
+def RunBot(parse_name, custom_steps, build_step=BuildSDK):
+ """
+ The main function for running a buildbot.
+
+ A buildbot script should invoke this once. The parse_name function will be
+ called with the name of the buildbot and should return an instance of
+ BuildInfo. This function will then set up the bot, build the SDK etc. When
+ that's done, it will call custom_steps, passing in the BuildInfo object.
+
+ In that, you can perform any bot-specific build steps.
+
+ This function will not return. It will call sys.exit() with an appropriate
+ exit code.
+ """
+ if len(sys.argv) == 0:
+ print 'Script pathname not known, giving up.'
+ sys.exit(1)
+
+ name, is_buildbot = GetBotName()
+ build_info = parse_name(name, is_buildbot)
+ if not build_info:
+ print 'Could not handle unfamiliar bot name "%s".' % name
+ sys.exit(1)
+
+ # Print out the buildinfo for easy debugging.
+ build_info.PrintBuildInfo()
+
+ # Make sure we are in the dart directory
+ os.chdir(DART_PATH)
+
+ try:
+ Clobber(build_info.mode)
+ build_step(build_info)
+
+ custom_steps(build_info)
+ except OSError as e:
+ sys.exit(e.errno)
+
+ sys.exit(0)
+
+
+def GetBotName():
+ """
+ Gets the name of the current buildbot.
+
+ Returns a tuple of the buildbot name and a flag to indicate if we are actually
+ a buildbot (True), or just a user pretending to be one (False).
+ """
+ # For testing the bot locally, allow the user to pass in a buildbot name.
+ parser = optparse.OptionParser()
+ parser.add_option('-n', '--name', dest='name', help='The name of the build'
+ 'bot you would like to emulate (ex: vm-mac-debug)', default=None)
+ args, _ = parser.parse_args()
+
+ if args.name:
+ return args.name, False
+
+ name = os.environ.get(BUILDER_NAME)
+ if not name:
+ print 'Use -n $BUILDBOT_NAME for the bot you would like to emulate.'
+ sys.exit(1)
+
+ return name, True
+
+
+def Clobber(mode):
+ """
+ Clobbers the builder before we do the build, if appropriate.
+
+ - mode: either 'debug' or 'release'
+ """
+ if os.environ.get(BUILDER_CLOBBER) != "1":
+ return
+
+ with BuildStep('Clobber'):
+ cmd = [sys.executable,
+ './tools/clean_output_directory.py',
+ '--mode=' + mode]
+ print 'Clobbering %s' % (' '.join(cmd))
+ RunProcess(cmd)
+
+
+def RunTest(name, build_info, targets, flags=None):
+ """
+ Runs test.py with the given settings.
+ """
+ if not flags:
+ flags = []
+
+ step_name = GetStepName(name, flags)
+ with BuildStep(step_name):
+ sys.stdout.flush()
+
+ cmd = [
+ sys.executable, os.path.join(os.curdir, 'tools', 'test.py'),
+ '--step_name=' + step_name,
+ '--mode=' + build_info.mode,
+ '--compiler=' + build_info.compiler,
+ '--runtime=' + build_info.runtime,
+ '--progress=buildbot',
+ '-v', '--time', '--use-sdk', '--report'
+ ]
+
+ if build_info.checked:
+ cmd.append('--checked')
+
+ cmd.extend(flags)
+ cmd.extend(targets)
+
+ print 'Running: %s' % (' '.join(cmd))
+ RunProcess(cmd)
+
+
+def RunProcess(command):
+ """
+ Runs command.
+
+ If a non-zero exit code is returned, raises an OSError with errno as the exit
+ code.
+ """
+ exit_code = subprocess.call(command, env=NO_COLOR_ENV)
+ if exit_code != 0:
+ raise OSError(exit_code)
+
+
+def GetStepName(name, flags):
+ """
+ Filters out flags with '=' as this breaks the /stats feature of the buildbot.
+ """
+ flags = [x for x in flags if not '=' in x]
+ return ('%s tests %s' % (name, ' '.join(flags))).strip()
diff --git a/tools/bots/compiler.py b/tools/bots/compiler.py
new file mode 100644
index 0000000..35f0d795
--- /dev/null
+++ b/tools/bots/compiler.py
@@ -0,0 +1,298 @@
+#!/usr/bin/python
+
+# Copyright (c) 2011 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+"""
+Dart2js buildbot steps
+
+Runs tests for the dart2js compiler.
+"""
+
+import platform
+import os
+import re
+import shutil
+import subprocess
+import sys
+
+import bot
+
+DART2JS_BUILDER = (
+ r'dart2js-(linux|mac|windows)(-(jsshell))?-(debug|release)(-(checked|host-checked))?(-(host-checked))?(-(minified))?-?(\d*)-?(\d*)')
+WEB_BUILDER = (
+ r'dart2js-(ie9|ie10|ff|safari|chrome|opera)-(win7|win8|mac|linux)(-(all|html))?')
+
+
+def GetBuildInfo(builder_name, is_buildbot):
+ """Returns a BuildInfo object for the current buildbot based on the
+ name of the builder.
+ """
+ compiler = None
+ runtime = None
+ mode = None
+ system = None
+ checked = False
+ host_checked = False
+ minified = False
+ shard_index = None
+ total_shards = None
+ test_set = None
+
+ dart2js_pattern = re.match(DART2JS_BUILDER, builder_name)
+ web_pattern = re.match(WEB_BUILDER, builder_name)
+
+ if web_pattern:
+ compiler = 'dart2js'
+ runtime = web_pattern.group(1)
+ system = web_pattern.group(2)
+ mode = 'release'
+ test_set = web_pattern.group(4)
+ elif dart2js_pattern:
+ compiler = 'dart2js'
+ system = dart2js_pattern.group(1)
+ runtime = 'd8'
+ if dart2js_pattern.group(3) == 'jsshell':
+ runtime = 'jsshell'
+ mode = dart2js_pattern.group(4)
+ # The valid naming parts for checked and host-checked are:
+ # Empty: checked=False, host_checked=False
+ # -checked: checked=True, host_checked=False
+ # -host-checked: checked=False, host_checked=True
+ # -checked-host-checked: checked=True, host_checked=True
+ if dart2js_pattern.group(6) == 'checked':
+ checked = True
+ if dart2js_pattern.group(6) == 'host-checked':
+ host_checked = True
+ if dart2js_pattern.group(8) == 'host-checked':
+ host_checked = True
+ if dart2js_pattern.group(10) == 'minified':
+ minified = True
+ shard_index = dart2js_pattern.group(11)
+ total_shards = dart2js_pattern.group(12)
+ else :
+ return None
+
+ if system == 'windows':
+ system = 'win7'
+
+ if (system == 'win7' and platform.system() != 'Windows') or (
+ system == 'mac' and platform.system() != 'Darwin') or (
+ system == 'linux' and platform.system() != 'Linux'):
+ print ('Error: You cannot emulate a buildbot with a platform different '
+ 'from your own.')
+ return None
+
+ return bot.BuildInfo(compiler, runtime, mode, system, checked, host_checked,
+ minified, shard_index, total_shards, is_buildbot,
+ test_set)
+
+
+def NeedsXterm(compiler, runtime):
+ return runtime in ['ie9', 'ie10', 'chrome', 'safari', 'opera', 'ff', 'drt']
+
+
+def TestStepName(name, flags):
+ # Filter out flags with '=' as this breaks the /stats feature of the
+ # build bot.
+ flags = [x for x in flags if not '=' in x]
+ return ('%s tests %s' % (name, ' '.join(flags))).strip()
+
+
+def TestStep(name, mode, system, compiler, runtime, targets, flags):
+ step_name = TestStepName(name, flags)
+ with bot.BuildStep(step_name, swallow_error=True):
+ sys.stdout.flush()
+ if NeedsXterm(compiler, runtime) and system == 'linux':
+ cmd = ['xvfb-run', '-a']
+ else:
+ cmd = []
+
+ user_test = os.environ.get('USER_TEST', 'no')
+
+ cmd.extend([sys.executable,
+ os.path.join(os.curdir, 'tools', 'test.py'),
+ '--step_name=' + step_name,
+ '--mode=' + mode,
+ '--compiler=' + compiler,
+ '--runtime=' + runtime,
+ '--time',
+ '--use-sdk',
+ '--report'])
+
+ if user_test == 'yes':
+ cmd.append('--progress=color')
+ else:
+ cmd.extend(['--progress=buildbot', '-v'])
+
+ if flags:
+ cmd.extend(flags)
+ cmd.extend(targets)
+
+ print 'running %s' % (' '.join(cmd))
+ bot.RunProcess(cmd)
+
+
+def TestCompiler(runtime, mode, system, flags, is_buildbot, test_set):
+ """ test the compiler.
+ Args:
+ - runtime: either 'd8', 'jsshell', or one of the browsers, see GetBuildInfo
+ - mode: either 'debug' or 'release'
+ - system: either 'linux', 'mac', 'win7', or 'win8'
+ - flags: extra flags to pass to test.dart
+ - is_buildbot: true if we are running on a real buildbot instead of
+ emulating one.
+ - test_set: Specification of a non standard test set, default None
+ """
+
+ if system.startswith('win') and runtime.startswith('ie'):
+ # There should not be more than one InternetExplorerDriver instance
+ # running at a time. For details, see
+ # http://code.google.com/p/selenium/wiki/InternetExplorerDriver.
+ flags += ['-j1']
+
+ def GetPath(runtime):
+ """ Helper to get the path to the Chrome or Firefox executable for a
+ particular platform on the buildbot. Throws a KeyError if runtime is not
+ either 'chrome' or 'ff'."""
+ if system == 'mac':
+ partDict = {'chrome': 'Google\\ Chrome', 'ff': 'Firefox'}
+ mac_path = '/Applications/%s.app/Contents/MacOS/%s'
+ path_dict = {'chrome': mac_path % (partDict[runtime], partDict[runtime]),
+ 'ff': mac_path % (partDict[runtime], partDict[runtime].lower())}
+ elif system == 'linux':
+ path_dict = {'ff': 'firefox', 'chrome': 'google-chrome'}
+ else:
+ # Windows.
+ path_dict = {'ff': os.path.join('C:/', 'Program Files (x86)',
+ 'Mozilla Firefox', 'firefox.exe'),
+ 'chrome': os.path.join('C:/', 'Users', 'chrome-bot', 'AppData',
+ 'Local', 'Google', 'Chrome', 'Application', 'chrome.exe')}
+ return path_dict[runtime]
+
+ if system == 'linux' and runtime == 'chrome':
+ # TODO(ngeoffray): We should install selenium on the buildbot.
+ runtime = 'drt'
+ elif (runtime == 'ff' or runtime == 'chrome') and is_buildbot:
+ # Print out browser version numbers if we're running on the buildbot (where
+ # we know the paths to these browser installations).
+ version_query_string = '"%s" --version' % GetPath(runtime)
+ if runtime == 'ff' and system.startswith('win'):
+ version_query_string += '| more'
+ elif runtime == 'chrome' and system.startswith('win'):
+ version_query_string = ('''reg query "HKCU\\Software\\Microsoft\\''' +
+ '''Windows\\CurrentVersion\\Uninstall\\Google Chrome" /v Version''')
+ p = subprocess.Popen(version_query_string,
+ stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
+ output, stderr = p.communicate()
+ output = output.split()
+ try:
+ print 'Version of %s: %s' % (runtime, output[-1])
+ except IndexError:
+ # Failed to obtain version information. Continue running tests.
+ pass
+
+ if runtime == 'd8':
+ # The dart2js compiler isn't self-hosted (yet) so we run its
+ # unit tests on the VM. We avoid doing this on the builders
+ # that run the browser tests to cut down on the cycle time.
+ TestStep("dart2js_unit", mode, system, 'none', 'vm', ['dart2js'], flags)
+
+ if not (system.startswith('win') and runtime.startswith('ie')):
+ # Run the default set of test suites.
+ TestStep("dart2js", mode, system, 'dart2js', runtime, [], flags)
+
+ # TODO(kasperl): Consider running peg and css tests too.
+ extras = ['dart2js_extra', 'dart2js_native', 'dart2js_foreign']
+ TestStep("dart2js_extra", mode, system, 'dart2js', runtime, extras, flags)
+ else:
+ # TODO(ricow): Enable standard sharding for IE bots when we have more vms.
+ if test_set == 'html':
+ TestStep("dart2js", mode, system, 'dart2js', runtime, ['html'], flags)
+ elif test_set == 'all':
+ TestStep("dart2js", mode, system, 'dart2js', runtime, ['dartc',
+ 'samples', 'standalone', 'corelib', 'co19', 'language', 'isolate',
+ 'vm', 'json', 'benchmark_smoke', 'dartdoc', 'utils', 'pub', 'lib'],
+ flags)
+ extras = ['dart2js_extra', 'dart2js_native', 'dart2js_foreign']
+ TestStep("dart2js_extra", mode, system, 'dart2js', runtime, extras,
+ flags)
+
+
+def _DeleteTempWebdriverProfiles(directory):
+ """Find all the firefox profiles in a particular directory and delete them."""
+ for f in os.listdir(directory):
+ item = os.path.join(directory, f)
+ if os.path.isdir(item) and (f.startswith('tmp') or f.startswith('opera')):
+ subprocess.Popen('rm -rf %s' % item, shell=True)
+
+
+def CleanUpTemporaryFiles(system, browser):
+ """For some browser (selenium) tests, the browser creates a temporary profile
+ on each browser session start. On Windows, generally these files are
+ automatically deleted when all python processes complete. However, since our
+ buildbot slave script also runs on python, we never get the opportunity to
+ clear out the temp files, so we do so explicitly here. Our batch browser
+ testing will make this problem occur much less frequently, but will still
+ happen eventually unless we do this.
+
+ This problem also occurs with batch tests in Firefox. For some reason selenium
+ automatically deletes the temporary profiles for Firefox for one browser,
+ but not multiple ones when we have many open batch tasks running. This
+ behavior has not been reproduced outside of the buildbots.
+
+ Args:
+ - system: either 'linux', 'mac', 'win7', or 'win8'
+ - browser: one of the browsers, see GetBuildInfo
+ """
+ if system.startswith('win'):
+ shutil.rmtree('C:\\Users\\chrome-bot\\AppData\\Local\\Temp',
+ ignore_errors=True)
+ elif browser == 'ff' or 'opera':
+ # Note: the buildbots run as root, so we can do this without requiring a
+ # password. The command won't actually work on regular machines without
+ # root permissions.
+ _DeleteTempWebdriverProfiles('/tmp')
+ _DeleteTempWebdriverProfiles('/var/tmp')
+
+
+def GetHasHardCodedCheckedMode(build_info):
+ # TODO(ricow): We currently run checked mode tests on chrome on linux and
+ # on the slow (all) IE windows bots. This is a hack and we should use the
+ # normal sharding and checked splitting functionality when we get more
+ # vms for testing this.
+ if (build_info.system == 'linux' and build_info.runtime == 'chrome'):
+ return True
+ if build_info.runtime.startswith('ie') and build_info.test_set == 'all':
+ return True
+ return False
+
+
+def RunCompilerTests(build_info):
+ test_flags = []
+ if build_info.shard_index:
+ test_flags = ['--shards=%s' % build_info.total_shards,
+ '--shard=%s' % build_info.shard_index]
+
+ if build_info.checked: test_flags += ['--checked']
+
+ if build_info.host_checked: test_flags += ['--host-checked']
+
+ if build_info.minified: test_flags += ['--minified']
+
+ TestCompiler(build_info.runtime, build_info.mode, build_info.system,
+ list(test_flags), build_info.is_buildbot, build_info.test_set)
+
+ # See comment in GetHasHardCodedCheckedMode, this is a hack.
+ if (GetHasHardCodedCheckedMode(build_info)):
+ TestCompiler(build_info.runtime, build_info.mode, build_info.system,
+ test_flags + ['--checked'], build_info.is_buildbot,
+ build_info.test_set)
+
+ if build_info.runtime != 'd8':
+ CleanUpTemporaryFiles(build_info.system, build_info.runtime)
+
+
+if __name__ == '__main__':
+ bot.RunBot(GetBuildInfo, RunCompilerTests)
diff --git a/tools/bots/pub.py b/tools/bots/pub.py
new file mode 100755
index 0000000..41d6745
--- /dev/null
+++ b/tools/bots/pub.py
@@ -0,0 +1,49 @@
+#!/usr/bin/python
+
+# Copyright (c) 2012 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+"""
+Pub buildbot steps.
+
+Runs tests for pub and the pub packages that are hosted in the main Dart repo.
+"""
+
+import re
+import sys
+
+import bot
+
+PUB_BUILDER = r'pub-(linux|mac|win)'
+
+def PubConfig(name, is_buildbot):
+ """Returns info for the current buildbot based on the name of the builder.
+
+ Currently, this is just:
+ - mode: always "release"
+ - system: "linux", "mac", or "win"
+ """
+ pub_pattern = re.match(PUB_BUILDER, name)
+ if not pub_pattern:
+ return None
+
+ system = pub_pattern.group(1)
+ if system == 'win': system = 'windows'
+
+ return bot.BuildInfo('none', 'vm', 'release', system, checked=True)
+
+
+def PubSteps(build_info):
+ with bot.BuildStep('Build API Docs'):
+ args = [sys.executable, './tools/build.py', '--mode=' + build_info.mode,
+ 'api_docs']
+ print 'Generating API Docs: %s' % (' '.join(args))
+ bot.RunProcess(args)
+
+ # TODO(rnystrom): Eventually test other targets here like 'utils'?
+ bot.RunTest('pub', build_info, ['pub'])
+
+
+if __name__ == '__main__':
+ bot.RunBot(PubConfig, PubSteps)
diff --git a/tools/copy_dart.py b/tools/copy_dart.py
index 4641244..10ed442 100755
--- a/tools/copy_dart.py
+++ b/tools/copy_dart.py
@@ -13,7 +13,7 @@
from glob import glob
re_directive = re.compile(
- r'^#(library|import|source|native|resource)\([\'"]([^\'"]*)[\'"](.*)\);$')
+ r'^(library|import|part|native|resource)\s+(.*);$')
class Library(object):
def __init__(self, name, imports, sources, natives, code):
@@ -42,17 +42,14 @@
if directive == 'library':
assert libraryname is None
libraryname = match.group(2)
- elif directive == 'source':
- sources.append(match.group(2))
+ elif directive == 'part':
+ suffix = match.group(2)
+ if not suffix.startswith('of '):
+ sources.append(match.group(2).strip('"\''))
elif directive == 'import':
- imports.append((match.group(2), match.group(3)))
- elif directive == 'native':
- natives.append(match.group(2))
- elif directive == 'resource':
- # currently ignored
- pass
+ imports.append(match.group(2))
else:
- raise 'unknown directive %s' % directive
+ raise Exception('unknown directive %s in %s' % (directive, line))
else:
inlinecode.append(line)
fileinput.close()
@@ -64,14 +61,9 @@
def mergefiles(srcs, dstfile):
for src in srcs:
with open(src, 'r') as s:
- dstfile.write(s.read())
-
-def copyfile(src, dst):
- if not exists(dirname(dst)):
- os.makedirs(dirname(dst))
- with open(src, 'r') as s:
- with open(dst, 'w') as d:
- d.write(s.read())
+ for line in s:
+ if not line.startswith('part of '):
+ dstfile.write(line)
def main(outdir = None, *inputs):
if not outdir or not inputs:
@@ -101,9 +93,6 @@
seen.add(lib)
- if lib.startswith('dart:'):
- continue
-
if (dirname(dirname(lib)).endswith('dom/generated/src')
or dirname(lib).endswith('dom/src')):
continue
@@ -125,25 +114,19 @@
# Create file containing all imports, and inlining all sources
with open(outpath, 'w') as f:
if library.name:
- f.write("#library('%s');\n\n" % library.name)
+ f.write("library %s;\n\n" % library.name)
else:
- f.write("#library('%s');\n\n" % basename(lib))
- for (importfile, optional_prefix) in library.imports:
- f.write("#import('%s'%s);\n" % (importfile, optional_prefix))
- for native in library.natives:
- if isabs(native):
- npath = native[1:]
- else:
- npath = native
- f.write("#native('%s');\n" % npath)
- copyfile(normjoin(dirname(lib), native),
- join(dirname(outpath), npath))
+ f.write("library %s;\n\n" % basename(lib))
+ for importfile in library.imports:
+ f.write("import %s;\n" % (importfile))
f.write('%s' % (''.join(library.code)))
mergefiles([normjoin(dirname(lib), s) for s in library.sources], f)
- for (i, prefix) in library.imports:
- if not i.startswith('dart:'):
- worklist.append(normjoin(dirname(lib), i));
+ for suffix in library.imports:
+ m = re.match(r'[\'"]([^\'"]+)[\'"](\s+as\s+\w+)?$', suffix)
+ uri = m.group(1)
+ if not uri.startswith('dart:'):
+ worklist.append(normjoin(dirname(lib), uri));
return 0
diff --git a/tools/create_sdk.py b/tools/create_sdk.py
index 0fb0d3d..841c99b 100755
--- a/tools/create_sdk.py
+++ b/tools/create_sdk.py
@@ -87,7 +87,7 @@
# TODO(zundel): this excludes the analyzer from the sdk build until builders
# have all prerequisite software installed. Also update dart.gyp.
def ShouldCopyAnalyzer():
- os = utils.GuessOS();
+ os = utils.GuessOS()
return os == 'linux' or os == 'macos'
@@ -116,9 +116,9 @@
Copy(os.path.join(build_dir, 'dartdoc.bat'), dartdoc)
# TODO(dgrove) - fix this once issue 4788 is addressed.
ReplaceInFiles([dart2js],
- [(r'%SCRIPTPATH%\.\.\\\.\.\\lib', r'%SCRIPTPATH%..\\pkg')]);
+ [(r'%SCRIPTPATH%\.\.\\\.\.\\lib', r'%SCRIPTPATH%..\\pkg')])
ReplaceInFiles([dartdoc],
- [(r'%SCRIPTPATH%\.\.\\\.\.\\pkg', r'%SCRIPTPATH%..\\pkg')]);
+ [(r'%SCRIPTPATH%\.\.\\\.\.\\pkg', r'%SCRIPTPATH%..\\pkg')])
else:
dart2js = os.path.join(sdk_root, 'bin', 'dart2js')
Copy(os.path.join(build_dir, 'dart2js'), dart2js)
@@ -153,14 +153,19 @@
HOME = dirname(dirname(realpath(__file__)))
- SDK_tmp = tempfile.mkdtemp()
SDK = argv[1]
+ SDK_tmp = '%s.tmp' % SDK
# TODO(dgrove) - deal with architectures that are not ia32.
if exists(SDK):
rmtree(SDK)
+ if exists(SDK_tmp):
+ rmtree(SDK_tmp)
+
+ os.makedirs(SDK_tmp)
+
# Create and populate sdk/bin.
BIN = join(SDK_tmp, 'bin')
os.makedirs(BIN)
@@ -309,11 +314,11 @@
join("guava", "r09", "guava-r09.jar"),
join("json", "r2_20080312", "json.jar") ]
for jarToCopy in jarsToCopy:
- dest_dir = join (ANALYZER_DEST, os.path.dirname(jarToCopy))
- os.makedirs(dest_dir)
- dest_file = join (ANALYZER_DEST, jarToCopy)
- src_file = join(ANALYZER_HOME, 'util', 'analyzer', jarToCopy)
- copyfile(src_file, dest_file)
+ dest_dir = join (ANALYZER_DEST, os.path.dirname(jarToCopy))
+ os.makedirs(dest_dir)
+ dest_file = join (ANALYZER_DEST, jarToCopy)
+ src_file = join(ANALYZER_HOME, 'util', 'analyzer', jarToCopy)
+ copyfile(src_file, dest_file)
# Create and populate util/pub.
copytree(join(HOME, 'utils', 'pub'), join(UTIL, 'pub'),
@@ -337,9 +342,14 @@
# Copy dart2js.
CopyDart2Js(build_dir, SDK_tmp, version)
- revision = utils.GetSVNRevision()
+ # Write the 'version' file
+ versionFile = open(os.path.join(SDK_tmp, 'version'), 'w')
+ versionFile.write(version + '\n')
+ versionFile.close()
# Write the 'revision' file
+ revision = utils.GetSVNRevision()
+
if revision is not None:
with open(os.path.join(SDK_tmp, 'revision'), 'w') as f:
f.write(revision + '\n')
diff --git a/tools/testing/dart/co19_test.dart b/tools/testing/dart/co19_test.dart
index 39a1224..dba9eb6 100644
--- a/tools/testing/dart/co19_test.dart
+++ b/tools/testing/dart/co19_test.dart
@@ -31,8 +31,8 @@
const <String>['-mrelease,debug', '-rvm', '-cnone', '--checked'],
const <String>['-mrelease', '-rnone', '-cdartc'],
const <String>['-mrelease', '-rvm', '-cdart2dart'],
- const <String>['-mrelease', '-rd8', '-cdart2js'],
- const <String>['-mrelease', '-rd8', '-cdart2js', '--checked']];
+ const <String>['-mrelease', '-rd8', '-cdart2js', '--use-sdk'],
+ const <String>['-mrelease', '-rd8', '-cdart2js', '--use-sdk', '--checked']];
void main() {
File scriptFile = new File(new Options().script);
diff --git a/tools/testing/dart/test_options.dart b/tools/testing/dart/test_options.dart
index ace2b4d..eae9f12 100644
--- a/tools/testing/dart/test_options.dart
+++ b/tools/testing/dart/test_options.dart
@@ -74,7 +74,7 @@
dart2js: Compile dart code to JavaScript by running dart2js.
(only valid with the following runtimes: d8, drt, chrome,
- safari, ie9, firefox, opera, none (compile only)),
+ safari, ie9, ie10, firefox, opera, none (compile only)),
dartc: Perform static analysis on Dart code by running dartc.
(only valid with the following runtimes: none)''',
@@ -95,14 +95,14 @@
dartium: Run Dart or JavaScript in Dartium.
- [ff | chrome | safari | ie9 | opera]: Run JavaScript in the specified
+ [ff | chrome | safari | ie9 | ie10 | opera]: Run JavaScript in the specified
browser.
none: No runtime, compile only (for example, used for dartc static analysis
tests).''',
['-r', '--runtime'],
['vm', 'd8', 'jsshell', 'drt', 'dartium', 'ff', 'firefox',
- 'chrome', 'safari', 'ie9', 'opera', 'none'],
+ 'chrome', 'safari', 'ie9', 'ie10', 'opera', 'none'],
'vm'),
new _TestOptionSpecification(
'arch',
@@ -131,6 +131,13 @@
false,
'bool'),
new _TestOptionSpecification(
+ 'minified',
+ 'Enable minification in the compiler',
+ ['--minified'],
+ [],
+ false,
+ 'bool'),
+ new _TestOptionSpecification(
'timeout',
'Timeout in seconds',
['-t', '--timeout'],
@@ -398,7 +405,8 @@
// dart2js_drt will be duplicating work. If later we don't need 'none'
// with dart2js, we should remove it from here.
validRuntimes = const ['d8', 'jsshell', 'drt', 'none', 'dartium',
- 'ff', 'chrome', 'safari', 'ie9', 'opera'];
+ 'ff', 'chrome', 'safari', 'ie9', 'ie10',
+ 'opera'];
break;
case 'dartc':
validRuntimes = const ['none'];
@@ -413,7 +421,7 @@
print("Warning: combination of ${config['compiler']} and "
"${config['runtime']} is invalid. Skipping this combination.");
}
- if (config['runtime'] == 'ie9' &&
+ if ((config['runtime'] == 'ie9' || config['runtime'] == 'ie10') &&
Platform.operatingSystem != 'windows') {
isValid = false;
print("Warning cannot run Internet Explorer on non-Windows operating"
@@ -470,6 +478,8 @@
configuration['unchecked'] = !configuration['checked'];
configuration['host_unchecked'] = !configuration['host_checked'];
+ configuration['unminified'] = !configuration['minified'];
+
String runtime = configuration['runtime'];
if (runtime == 'firefox') {
configuration['runtime'] == 'ff';
@@ -560,7 +570,8 @@
timeout *= 2;
}
if (Contains(configuration['runtime'],
- const ['ie9', 'ff', 'chrome', 'safari', 'opera'])) {
+ const ['ie9', 'ie10', 'ff', 'chrome', 'safari',
+ 'opera'])) {
timeout *= 8; // Allow additional time for browser testing to run.
}
break;
diff --git a/tools/testing/dart/test_progress.dart b/tools/testing/dart/test_progress.dart
index 0147663..bcd027b 100644
--- a/tools/testing/dart/test_progress.dart
+++ b/tools/testing/dart/test_progress.dart
@@ -131,7 +131,7 @@
}
output.add(expected.toString());
output.add('Actual: ${test.output.result}');
- if (test.info != null) {
+ if (!test.output.hasTimedOut && test.info != null) {
if (test.output.incomplete && !test.info.hasCompileError) {
output.add('Unexpected compile-time error.');
} else {
@@ -404,6 +404,9 @@
List<String> configs =
statusToConfigs.putIfAbsent(status, () => <String>[]);
configs.add(test.configurationString);
+ if (test.output.hasTimedOut) {
+ print('\n${test.displayName} timed out on ${test.configurationString}');
+ }
}
String _extractRuntime(String configuration) {
diff --git a/tools/testing/dart/test_runner.dart b/tools/testing/dart/test_runner.dart
index 42d2323..930a561 100644
--- a/tools/testing/dart/test_runner.dart
+++ b/tools/testing/dart/test_runner.dart
@@ -77,7 +77,6 @@
String displayName;
TestOutput output;
bool isNegative;
- bool usesWebDriver;
Set<String> expectedOutcomes;
TestCaseEvent completedHandler;
TestInformation info;
@@ -88,8 +87,7 @@
this.completedHandler,
this.expectedOutcomes,
{this.isNegative: false,
- this.info: null,
- this.usesWebDriver: false}) {
+ this.info: null}) {
if (!isNegative) {
this.isNegative = displayName.contains("negative_test");
}
@@ -166,6 +164,8 @@
List<String> get batchRunnerArguments => ['-batch'];
List<String> get batchTestArguments => commands.last().arguments;
+ bool get usesWebDriver => TestUtils.usesWebDriver(configuration['runtime']);
+
void completed() { completedHandler(this); }
}
@@ -594,6 +594,9 @@
(testCase as BrowserTestCase).numRetries--;
print("Potential flake. Re-running ${testCase.displayName} "
"(${(testCase as BrowserTestCase).numRetries} attempt(s) remains)");
+ // When retrying we need to reset the timeout as well.
+ // Otherwise there will be no timeout handling for the retry.
+ timeoutTimer = null;
this.start();
} else {
testCase.completed();
@@ -611,7 +614,9 @@
int totalSteps = testCase.commands.length;
String suffix =' (step $currentStep of $totalSteps)';
if (timedOut) {
- // Test timed out before it could complete.
+ // Non-webdriver test timed out before it could complete. Webdriver tests
+ // run their own timeouts by timing from the launch of the browser (which
+ // could be delayed).
testComplete(0, true);
} else if (currentStep == totalSteps) {
// Done with all test commands.
@@ -627,8 +632,8 @@
stdout.add('test.dart: Compilation finished $suffix\n');
if (currentStep == totalSteps - 1 && testCase.usesWebDriver &&
!testCase.configuration['noBatch']) {
- // Note: processQueue will always be non-null for runtime == ie9, ff,
- // safari, chrome, opera. (It is only null for runtime == vm)
+ // Note: processQueue will always be non-null for runtime == ie9, ie10,
+ // ff, safari, chrome, opera. (It is only null for runtime == vm)
// This RunningProcess object is done, and hands over control to
// BatchRunner.startTest(), which handles reporting, etc.
timeoutTimer.cancel();
@@ -678,7 +683,7 @@
}
// If the timeout fired in between two commands, kill the just
// started process immediately.
- if (timedOut) process.kill();
+ if (timedOut) safeKill(process);
});
processFuture.handleException((e) {
print("Process error:");
@@ -691,7 +696,17 @@
void timeoutHandler(Timer unusedTimer) {
timedOut = true;
- if (process != null) process.kill();
+ safeKill(process);
+ }
+
+ void safeKill(Process p) {
+ if (p != null) {
+ try {
+ p.kill();
+ } on ProcessException {
+ // Hopefully, this means that the process died on its own.
+ }
+ }
}
}
diff --git a/tools/testing/dart/test_suite.dart b/tools/testing/dart/test_suite.dart
index a5f42a5..dc01e69 100644
--- a/tools/testing/dart/test_suite.dart
+++ b/tools/testing/dart/test_suite.dart
@@ -65,28 +65,32 @@
void ccTestLister() {
port.receive((String runnerPath, SendPort replyTo) {
- void processErrorHandler(error) {
- }
Future processFuture = Process.start(runnerPath, ["--list"]);
processFuture.then((p) {
StringInputStream stdoutStream = new StringInputStream(p.stdout);
- List<String> tests = new List<String>();
+ var streamDone = false;
+ var processExited = false;
+ checkDone() {
+ if (streamDone && processExited) {
+ replyTo.send("");
+ }
+ }
stdoutStream.onLine = () {
String line = stdoutStream.readLine();
- while (line != null) {
- tests.add(line);
- line = stdoutStream.readLine();
- }
+ replyTo.send(line);
+ };
+ stdoutStream.onClosed = () {
+ streamDone = true;
+ checkDone();
};
p.onExit = (code) {
if (code < 0) {
print("Failed to list tests: $runnerPath --list");
replyTo.send("");
+ } else {
+ processExited = true;
+ checkDone();
}
- for (String test in tests) {
- replyTo.send(test);
- }
- replyTo.send("");
};
port.close();
});
@@ -155,8 +159,7 @@
[new Command(runnerPath, args)],
configuration,
completeHandler,
- expectations,
- usesWebDriver: TestUtils.usesWebDriver));
+ expectations));
}
}
@@ -458,8 +461,7 @@
completeHandler,
expectations,
isNegative: isNegative,
- info: info,
- usesWebDriver: TestUtils.usesWebDriver));
+ info: info));
}
}
@@ -1210,8 +1212,7 @@
[new Command('java', args)],
updatedConfiguration,
completeHandler,
- new Set<String>.from([PASS]),
- usesWebDriver: TestUtils.usesWebDriver));
+ new Set<String>.from([PASS])));
doDone();
}
@@ -1407,6 +1408,11 @@
args.add("--allow-mock-compilation");
}
}
+ // TODO(riocw): Unify our minification calling convention between dart2js
+ // and dart2dart.
+ if (compiler == "dart2js" && configuration["minified"]) {
+ args.add("--minify");
+ }
return args;
}
@@ -1420,6 +1426,7 @@
static bool usesWebDriver(String runtime) => Contains(
runtime, const <String>['dartium',
'ie9',
+ 'ie10',
'safari',
'opera',
'chrome',
diff --git a/tools/testing/legpad/legpad.dart b/tools/testing/legpad/legpad.dart
index e6f0d2a..0db1ffb 100644
--- a/tools/testing/legpad/legpad.dart
+++ b/tools/testing/legpad/legpad.dart
@@ -71,7 +71,7 @@
setText("input", readAll(mainFile));
Stopwatch stopwatch = new Stopwatch()..start();
runLeg();
- int elapsedMillis = stopwatch.elapsedInMs();
+ int elapsedMillis = stopwatch.elapsedMilliseconds;
if (output === null) {
output = "throw 'dart2js compilation error';\n";
}
diff --git a/tools/testing/run_selenium.py b/tools/testing/run_selenium.py
index 15162ff..e9e1119 100755
--- a/tools/testing/run_selenium.py
+++ b/tools/testing/run_selenium.py
@@ -173,7 +173,8 @@
xpi = os.path.join(script_dir, 'extensions', 'firefox', 'ConsoleCollector.xpi')
profile.add_extension(xpi);
return selenium.webdriver.Firefox(firefox_profile=profile)
- elif browser == 'ie9' and platform.system() == 'Windows':
+ elif ((browser == 'ie9' or browser == 'ie10') and
+ platform.system() == 'Windows'):
return selenium.webdriver.Ie()
elif browser == 'safari' and platform.system() == 'Darwin':
# TODO(efortuna): Ensure our preferences (no pop-up blocking) file is the
diff --git a/tools/testing/webdriver_test_setup.py b/tools/testing/webdriver_test_setup.py
index 26ff2cd..e7a5e97 100755
--- a/tools/testing/webdriver_test_setup.py
+++ b/tools/testing/webdriver_test_setup.py
@@ -12,11 +12,13 @@
# TODO(efortuna): Rewrite this script in Dart when the Process module has a
# better high level API.
+import HTMLParser
import optparse
import os
import platform
import re
import shutil
+import string
import subprocess
import sys
import urllib
@@ -40,6 +42,8 @@
parser = optparse.OptionParser()
parser.add_option('--firefox', '-f', dest='firefox',
help="Don't install Firefox", action='store_true', default=False)
+ parser.add_option('--opera', '-o', dest='opera', default=False,
+ help="Don't install Opera", action='store_true')
parser.add_option('--chromedriver', '-c', dest='chromedriver',
help="Don't install chromedriver.", action='store_true', default=False)
parser.add_option('--iedriver', '-i', dest='iedriver',
@@ -54,7 +58,7 @@
parser.add_option('--buildbot', '-b', dest='buildbot', action='store_true',
help='Perform a buildbot selenium setup (buildbots have a different' +
'location for their python executable).', default=False)
- args, ignored = parser.parse_args()
+ args, _ = parser.parse_args()
return args
def find_depot_tools_location(is_buildbot):
@@ -273,6 +277,114 @@
run_cmd('%s %s' % (admin_keyword, python_cmd), page.read())
run_cmd('%s %s install -U selenium' % (admin_keyword, pip_cmd))
+class OperaHtmlParser(HTMLParser.HTMLParser):
+ """A helper class to parse Opera pages listing available downloads to find the
+ correct download we want."""
+
+ def initialize(self, rejection_func, accept_func):
+ """Initialize some state for our parser.
+ Arguments:
+ rejection_func: A function that accepts the value of the URL and determines
+ if it is of the type we are looking for.
+ accept_func: A function that takes the URL and the "current best" URL and
+ determines if it is better than our current download url."""
+ self.latest = 0
+ self.rejection_func = rejection_func
+ self.accept_func = accept_func
+
+ def handle_starttag(self, tag, attrs):
+ """Find the latest version."""
+ if (tag == 'a' and attrs[0][0] == 'href' and
+ self.rejection_func(attrs[0][1])):
+ self.latest = self.accept_func(attrs[0][1], self.latest)
+
+class OperaInstaller(object):
+ """Install from the Opera FTP website."""
+
+ def find_latest_version(self, download_page, rejection_func, accept_func):
+ """Get the latest non-beta version.
+ Arguments:
+ download_page: The initial page that lists all the download options.
+ rejection_func: A function that accepts the value of the URL and determines
+ if it is of the type we are looking for.
+ accept_func: A function that takes the URL and the "current best" URL and
+ determines if it is better than our current download url."""
+ f = urllib2.urlopen(download_page)
+ parser = OperaHtmlParser()
+ parser.initialize(rejection_func, accept_func)
+ parser.feed(f.read())
+ return str(parser.latest)
+
+ def run(self):
+ """Download and install Opera."""
+ print 'Installing Opera'
+ os_str = self.get_os_str
+ download_name = 'http://ftp.opera.com/pub/opera/%s/' % os_str
+
+ def higher_revision(new_version_str, current):
+ version_string = new_version_str[:-1]
+ if int(version_string) > current:
+ return int(version_string)
+ return current
+
+ version = self.find_latest_version(
+ download_name,
+ lambda x: x[0] in string.digits and 'b' not in x and 'rc' not in x,
+ higher_revision)
+ download_name += version
+ if ('linux' in sys.platform and
+ platform.linux_distribution()[0] == 'Ubuntu'):
+ # Last time I tried, the .deb file you download directly from opera was
+ # not installing correctly on Ubuntu. This installs Opera more nicely.
+ os.system("sudo sh -c 'wget -O - http://deb.opera.com/archive.key | "
+ "apt-key add -'")
+ os.system("""sudo sh -c 'echo "deb http://deb.opera.com/opera/ """
+ """stable non-free" > /etc/apt/sources.list.d/opera.list'""")
+ run_cmd('sudo apt-get update')
+ run_cmd('sudo apt-get install opera', stdin='y')
+ else:
+ if 'darwin' in sys.platform:
+ dotted_version = '%s.%s' % (version[:2], version[2:])
+ download_name += '/Opera_%s_Setup_Intel.dmg' % dotted_version
+ urllib.urlretrieve(download_name, 'opera.dmg')
+ run_cmd('hdiutil mount opera.dmg', stdin='qY\n')
+ run_cmd('sudo cp -R /Volumes/Opera/Opera.app /Applications')
+ run_cmd('hdiutil unmount /Volumes/Opera/')
+ elif 'win' in sys.platform:
+ download_name += '/en/Opera_%s_en_Setup.exe' % version
+ urllib.urlretrieve(download_name, 'opera_install.exe')
+ run_cmd('opera_install.exe -ms')
+ else:
+ # For all other flavors of linux, download the tar.
+ download_name += '/'
+ extension = '.tar.bz2'
+ if '64bit' in platform.architecture()[0]:
+ platform_str = '.x86_64'
+ else:
+ platform_str = '.i386'
+ def get_acceptable_file(new_version_str, current):
+ return new_version_str
+ latest = self.find_latest_version(
+ download_name,
+ lambda x: x.startswith('opera') and x.endswith(extension)
+ and platform_str in x,
+ get_acceptable_file)
+ download_name += latest
+ run_cmd('wget -O - %s | tar -C ~ -jxv' % download_name)
+ print ('PLEASE MANUALLY RUN "~/%s/install" TO COMPLETE OPERA '
+ 'INSTALLATION' %
+ download_name[download_name.rfind('/') + 1:-len(extension)])
+
+ @property
+ def get_os_str(self):
+ """The strings to indicate what OS a download is."""
+ os_str = 'win'
+ if 'darwin' in sys.platform:
+ os_str = 'mac'
+ elif 'linux' in sys.platform:
+ os_str = 'linux'
+ return os_str
+
def main():
args = parse_args()
if not args.python:
@@ -287,9 +399,10 @@
if not args.iedriver and platform.system() == 'Windows':
GoogleCodeInstaller('selenium', find_depot_tools_location(args.buildbot),
lambda x: 'IEDriverServer_Win32_%(version)s.zip' % x).run()
-
if not args.firefox:
FirefoxInstaller().run()
+ if not args.opera:
+ OperaInstaller().run()
if __name__ == '__main__':
main()
diff --git a/tools/utils/vim/syntax/dart.vim b/tools/utils/vim/syntax/dart.vim
index ab3516b..fa5aa9d 100644
--- a/tools/utils/vim/syntax/dart.vim
+++ b/tools/utils/vim/syntax/dart.vim
@@ -34,7 +34,7 @@
syn keyword dartStatement return
syn keyword dartStorageClass static abstract
syn keyword dartExceptions throw try catch finally
-syn keyword dartExceptions FormatException ClosureArgumentMismatchException EmptyQueueException Exception ExpectException FutureAlreadyCompleteException FutureNotCompleteException IllegalAccessException ArgumentError IllegalJSRegExpException IndexOutOfRangeException IntegerDivisionByZeroException NoMoreElementsException NoSuchMethodError NotImplementedException NullPointerException ObjectNotClosureException OutOfMemoryError StackOverflowException UnsupportedOperationException WrongArgumentCountException
+syn keyword dartExceptions FormatException Exception ExpectException FutureAlreadyCompleteException FutureNotCompleteException./b ArgumentError IllegalJSRegExpException IndexOutOfRangeException IntegerDivisionByZeroException NoSuchMethodError NotImplementedException NullPointerException OutOfMemoryError StackOverflowException StateError UnsupportedError
syn keyword dartExceptions_DEPRECATED BadNumberFormatException
syn keyword dartAssert assert
syn keyword dartClassDecl extends implements interface
diff --git a/utils/apidoc/apidoc.dart b/utils/apidoc/apidoc.dart
index 693fed3..8e016f3 100644
--- a/utils/apidoc/apidoc.dart
+++ b/utils/apidoc/apidoc.dart
@@ -33,6 +33,8 @@
Path outputDir = new Path('docs');
bool generateAppCache = false;
+ List<String> excludedLibraries = <String>[];
+
// Parse the command-line arguments.
for (int i = 0; i < args.length; i++) {
final arg = args[i];
@@ -51,7 +53,9 @@
break;
default:
- if (arg.startsWith('--out=')) {
+ if (arg.startsWith('--exclude-lib=')) {
+ excludedLibraries.add(arg.substring('--exclude-lib='.length));
+ } else if (arg.startsWith('--out=')) {
outputDir = new Path.fromNative(arg.substring('--out='.length));
} else {
print('Unknown option: $arg');
@@ -130,7 +134,8 @@
lister.onDone = (success) {
print('Generating docs...');
- final apidoc = new Apidoc(mdn, htmldoc, outputDir, mode, generateAppCache);
+ final apidoc = new Apidoc(mdn, htmldoc, outputDir, mode, generateAppCache,
+ excludedLibraries);
apidoc.dartdocPath = doc.scriptDir.append('../../pkg/dartdoc/');
// Select the libraries to include in the produced documentation:
apidoc.includeApi = true;
@@ -179,7 +184,7 @@
}
doc.DocComment getRecordedLibraryComment(LibraryMirror library) {
- if (library.simpleName == HTML_LIBRARY_NAME) {
+ if (doc.displayName(library) == HTML_LIBRARY_NAME) {
return libraryComment;
}
return null;
@@ -258,7 +263,11 @@
String mdnUrl = null;
Apidoc(this.mdn, this.htmldoc, Path outputDir, int mode,
- bool generateAppCache) {
+ bool generateAppCache, [excludedLibraries]) {
+ if (?excludedLibraries) {
+ this.excludedLibraries = excludedLibraries;
+ }
+
this.outputDir = outputDir;
this.mode = mode;
this.generateAppCache = generateAppCache;
@@ -351,21 +360,21 @@
void docIndexLibrary(LibraryMirror library) {
// TODO(rnystrom): Hackish. The IO libraries reference this but we don't
// want it in the docs.
- if (library.simpleName == 'dart:nativewrappers') return;
+ if (doc.displayName(library) == 'dart:nativewrappers') return;
super.docIndexLibrary(library);
}
void docLibraryNavigationJson(LibraryMirror library, List libraryList) {
// TODO(rnystrom): Hackish. The IO libraries reference this but we don't
// want it in the docs.
- if (library.simpleName == 'dart:nativewrappers') return;
+ if (doc.displayName(library) == 'dart:nativewrappers') return;
super.docLibraryNavigationJson(library, libraryList);
}
void docLibrary(LibraryMirror library) {
// TODO(rnystrom): Hackish. The IO libraries reference this but we don't
// want it in the docs.
- if (library.simpleName == 'dart:nativewrappers') return;
+ if (doc.displayName(library) == 'dart:nativewrappers') return;
super.docLibrary(library);
}
@@ -375,12 +384,12 @@
String strippedText =
text.replaceAll(const RegExp("@([a-zA-Z]+) ([^;]+)(?:;|\$)"),
'').trim();
- if (strippedText.isEmpty()) return null;
+ if (strippedText.isEmpty) return null;
return super.createDocComment(strippedText, inheritedFrom);
}
doc.DocComment getLibraryComment(LibraryMirror library) {
- if (library.simpleName == HTML_LIBRARY_NAME) {
+ if (doc.displayName(library) == HTML_LIBRARY_NAME) {
return htmldoc.libraryComment;
}
return super.getLibraryComment(library);
@@ -460,7 +469,7 @@
}
var typeString = '';
- if (type.library.simpleName == HTML_LIBRARY_NAME) {
+ if (doc.displayName(type.library) == HTML_LIBRARY_NAME) {
// If it's an HTML type, try to map it to a base DOM type so we can find
// the MDN docs.
final domTypes = _diff.htmlTypesToDom[type.qualifiedName];
@@ -481,7 +490,7 @@
if (mdnType == null) return null;
if (mdnType['skipped'] != null) return null;
if (mdnType['summary'] == null) return null;
- if (mdnType['summary'].trim().isEmpty()) return null;
+ if (mdnType['summary'].trim().isEmpty) return null;
// Remember which MDN page we're using so we can attribute it.
return new MdnComment(mdnType['summary'], mdnType['srcUrl']);
@@ -494,7 +503,7 @@
MdnComment includeMdnMemberComment(MemberMirror member) {
var library = findLibrary(member);
var memberString = '';
- if (library.simpleName == HTML_LIBRARY_NAME) {
+ if (doc.displayName(library) == HTML_LIBRARY_NAME) {
// If it's an HTML type, try to map it to a DOM type name so we can find
// the MDN docs.
final domMembers = _diff.htmlToDom[member.qualifiedName];
@@ -531,7 +540,7 @@
if (mdnMember == null) return null;
if (mdnMember['help'] == null) return null;
- if (mdnMember['help'].trim().isEmpty()) return null;
+ if (mdnMember['help'].trim().isEmpty) return null;
// Remember which MDN page we're using so we can attribute it.
return new MdnComment(mdnMember['help'], mdnType['srcUrl']);
@@ -575,4 +584,4 @@
}
String toString() => mdnComment;
-}
\ No newline at end of file
+}
diff --git a/utils/apidoc/apidoc.gyp b/utils/apidoc/apidoc.gyp
index 0400dea..7710b91 100644
--- a/utils/apidoc/apidoc.gyp
+++ b/utils/apidoc/apidoc.gyp
@@ -43,6 +43,8 @@
'apidoc.dart',
'--out=<(PRODUCT_DIR)/api_docs',
'--mode=static',
+ '--exclude-lib=webdriver',
+ '--exclude-lib=dartdoc',
],
'message': 'Running apidoc: <(_action)',
},
diff --git a/utils/apidoc/app_engine/app.yaml b/utils/apidoc/app_engine/app.yaml
deleted file mode 100644
index 95739bb..0000000
--- a/utils/apidoc/app_engine/app.yaml
+++ /dev/null
@@ -1,17 +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.
-
-application: dartlang-api
-version: changeme
-
-runtime: python27
-api_version: 1
-threadsafe: true
-
-#default_expiration: "2h"
-
-handlers:
-
-- url: /.*
- script: scripts.redirector.application
\ No newline at end of file
diff --git a/utils/apidoc/app_engine/index.yaml b/utils/apidoc/app_engine/index.yaml
deleted file mode 100644
index b6633f5..0000000
--- a/utils/apidoc/app_engine/index.yaml
+++ /dev/null
@@ -1,3 +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.
\ No newline at end of file
diff --git a/utils/apidoc/app_engine/scripts/__init__.py b/utils/apidoc/app_engine/scripts/__init__.py
deleted file mode 100644
index b6633f5..0000000
--- a/utils/apidoc/app_engine/scripts/__init__.py
+++ /dev/null
@@ -1,3 +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.
\ No newline at end of file
diff --git a/utils/apidoc/app_engine/scripts/redirector.py b/utils/apidoc/app_engine/scripts/redirector.py
deleted file mode 100644
index 9687ff0..0000000
--- a/utils/apidoc/app_engine/scripts/redirector.py
+++ /dev/null
@@ -1,128 +0,0 @@
-# Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
-# for details. All rights reserved. Use of this source code is governed by a
-# BSD-style license that can be found in the LICENSE file.
-
-import logging
-import re
-from webapp2 import *
-from datetime import datetime, timedelta
-from google.appengine.ext import blobstore
-from google.appengine.ext.webapp import blobstore_handlers
-from google.appengine.api import files, memcache
-
-LATEST_DOC_VERSION_FILE = '/gs/dartlang-api-docs/latest.txt'
-ONE_HOUR = 60 * 60
-ONE_DAY = ONE_HOUR * 24
-ONE_WEEK = ONE_DAY * 7
-
-class ApiDocs(blobstore_handlers.BlobstoreDownloadHandler):
-
- latest_doc_version = None
- next_doc_version_check = None
-
- def reload_latest_version(self):
- logging.info("Reloading the latest doc version pointer")
- with files.open(LATEST_DOC_VERSION_FILE, 'r') as f:
- data = f.read(100)
- ApiDocs.latest_doc_version = int(data.strip())
- ApiDocs.next_doc_version_check = datetime.now() + timedelta(days=1)
-
- # TODO: put into memcache?
- def get_latest_version(self):
- forced_reload = self.request.get('force_reload')
- if (forced_reload or
- ApiDocs.latest_doc_version is None or
- ApiDocs.next_doc_version_check is None or
- datetime.now() > ApiDocs.next_doc_version_check):
- self.reload_latest_version()
- return ApiDocs.latest_doc_version
-
- def get_cache_age(self, path):
- if re.search(r'(png|jpg)$', path):
- age = ONE_DAY
- elif path.endswith('.ico'):
- age = ONE_WEEK
- else:
- age = ONE_HOUR
- return age
-
- def resolve_doc_path(self):
- if self.request.path.startswith('/docs/continuous'):
- version = self.get_latest_version()
- path = self.request.path.replace('/docs/continuous',
- '/gs/dartlang-api-docs/' + str(version))
- else:
- path = self.request.path.replace('/docs', '/gs/dartlang-api-docs')
- if path.endswith('/'):
- path = path + 'index.html'
- return path
-
- def get(self):
- path = self.resolve_doc_path()
- gs_key = blobstore.create_gs_key(path)
- age = self.get_cache_age(path)
-
- self.response.headers['Cache-Control'] = 'max-age=' + \
- str(age) + ',s-maxage=' + str(age)
-
- # is there a better way to check if a file exists in cloud storage?
- # AE will serve a 500 if the file doesn't exist, but that should
- # be a 404
-
- path_exists = memcache.get(path)
- if path_exists is not None:
- if path_exists == "1":
- self.send_blob(gs_key)
- else:
- self.error(404)
- else:
- try:
- # just check for existance
- files.open(path, 'r').close()
- memcache.add(key=path, value="1", time=ONE_DAY)
- self.send_blob(gs_key)
- except files.file.ExistenceError:
- memcache.add(key=path, value="0", time=ONE_DAY)
- self.error(404)
-
- # this doesn't get called, unfortunately.
- # if this ever starts working, remove the try and files.open
- # from get, above, and instead retroactively handle a missing file here
- # def handle_exception(self, exception, debug_mode):
- # # awful hack for when file in cloud storage doesn't exist
- # if isinstance(exception, TypeError):
- # logging.debug('oh noes!')
- # path = self.resolve_path()
- # try:
- # with files.open(path, 'r') as f:
- # # the file really does exist, so 500 must be something else
- # self.error(500)
- # except files.file.ExistenceError:
- # # file does not exist
- # self.error(404)
- # else:
- # logging.exception(exception)
-
-def redir_to_latest(handler, *args, **kwargs):
- path = kwargs['path']
- if re.search(r'^(core|coreimpl|crypto|io|isolate|json|uri|html|math|utf|web)', path):
- return '/docs/continuous/dart_' + path
- else:
- return '/docs/continuous/' + path
-
-def redir_dom(handler, *args, **kwargs):
- return '/docs/continuous/dart_html' + kwargs['path']
-
-class CurrentVersionHandler(RequestHandler):
- def get(self, version):
- self.response.headers['Content-Type'] = 'text/plain'
- self.response.out.write(ApiDocs.latest_doc_version)
-
-application = WSGIApplication(
- [
- Route('/dom<path:.*>', RedirectHandler, defaults={'_uri': redir_dom}),
- Route('/currentversion/<version:.*>', CurrentVersionHandler),
- ('/docs.*', ApiDocs),
- Route('/<path:.*>', RedirectHandler, defaults={'_uri': redir_to_latest})
- ],
- debug=True)
diff --git a/utils/apidoc/html_diff.dart b/utils/apidoc/html_diff.dart
index 6fd785f..c9428bb 100644
--- a/utils/apidoc/html_diff.dart
+++ b/utils/apidoc/html_diff.dart
@@ -16,7 +16,11 @@
#import('../../pkg/dartdoc/lib/mirrors.dart');
#import('../../pkg/dartdoc/lib/mirrors_util.dart');
+// TODO(amouravski): There is currently magic that looks at dart:* libraries
+// rather than the declared library names. This changed due to recent syntax
+// changes. We should only need to look at the library 'html'.
const HTML_LIBRARY_NAME = 'dart:html';
+const HTML_DECLARED_NAME = 'html';
/**
* A class for computing a many-to-many mapping between the types and
@@ -92,14 +96,14 @@
* [HtmlDiff.initialize] should be called.
*/
void run() {
- LibraryMirror htmlLib = _mirrors.libraries[HTML_LIBRARY_NAME];
+ LibraryMirror htmlLib = _mirrors.libraries[HTML_DECLARED_NAME];
if (htmlLib === null) {
warn('Could not find $HTML_LIBRARY_NAME');
return;
}
- for (InterfaceMirror htmlType in htmlLib.types.getValues()) {
+ for (InterfaceMirror htmlType in htmlLib.types.values) {
final domTypes = htmlToDomTypes(htmlType);
- if (domTypes.isEmpty()) continue;
+ if (domTypes.isEmpty) continue;
htmlTypesToDom.putIfAbsent(htmlType.qualifiedName,
() => new Set()).addAll(domTypes);
@@ -117,7 +121,7 @@
*/
void _addMemberDiff(MemberMirror htmlMember, List<String> domTypes) {
var domMembers = htmlToDomMembers(htmlMember, domTypes);
- if (htmlMember == null && !domMembers.isEmpty()) {
+ if (htmlMember == null && !domMembers.isEmpty) {
warn('$HTML_LIBRARY_NAME member '
'${htmlMember.surroundingDeclaration.simpleName}.'
'${htmlMember.simpleName} has no corresponding '
@@ -125,7 +129,7 @@
}
if (htmlMember == null) return;
- if (!domMembers.isEmpty()) {
+ if (!domMembers.isEmpty) {
htmlToDom[htmlMember.qualifiedName] = domMembers;
}
}
@@ -168,7 +172,7 @@
final members = new Set();
domNames.forEach((name) {
var nameMembers = _membersFromName(name, domTypes);
- if (nameMembers.isEmpty()) {
+ if (nameMembers.isEmpty) {
if (name.contains('.')) {
warn('no member $name');
} else {
@@ -198,7 +202,7 @@
*/
Set<String> _membersFromName(String name, List<String> defaultTypes) {
if (!name.contains('.', 0)) {
- if (defaultTypes.isEmpty()) {
+ if (defaultTypes.isEmpty) {
warn('no default type for $name');
return new Set();
}
diff --git a/utils/apidoc/mdn/extract.dart b/utils/apidoc/mdn/extract.dart
index 20dcf21..c8d54d2 100644
--- a/utils/apidoc/mdn/extract.dart
+++ b/utils/apidoc/mdn/extract.dart
@@ -433,8 +433,8 @@
// Trim useless nodes from the back.
while (root.nodes.length > 0 &&
- isSkippable(root.nodes.last())) {
- root.nodes.last().remove();
+ isSkippable(root.nodes.last)) {
+ root.nodes.last.remove();
changed = true;
}
}
@@ -454,7 +454,7 @@
_next = _leftMostDescendent(start);
}
- bool hasNext() => _next != null;
+ bool get hasNext => _next != null;
Node next() {
if (_next == null) return null;
@@ -834,7 +834,7 @@
final allText = getAllTextNodes(match);
final pmap = new Map<String, Element>();
- for (final prop in expectedProps.getKeys()) {
+ for (final prop in expectedProps.keys) {
if (alreadyMatchedProperties.contains(prop)) {
continue;
}
@@ -844,7 +844,7 @@
}
}
- for (final prop in pmap.getKeys()) {
+ for (final prop in pmap.keys) {
pmap[prop].classes.add(DART_REMOVED);
}
@@ -875,7 +875,7 @@
// carefully check that the documentation for each method comment is
// visually consistent but take less care to check that each
// method comment has identical markup structure.
- for (String prop in pmap.getKeys()) {
+ for (String prop in pmap.keys) {
Element e = pmap[prop];
ClientRect r = getClientRect(e);
// TODO(jacobr): a lot of these queries are identical and this code
@@ -901,7 +901,7 @@
// We mark these elements in batch to reduce the number of layouts
// triggered. TODO(jacobr): use new batch based async measurement to make
// this code flow simpler.
- for (String prop in pmap.getKeys()) {
+ for (String prop in pmap.keys) {
Element e = pmap[prop];
e.classes.add(DART_REMOVED);
}
@@ -915,7 +915,7 @@
}
}
- for (String prop in pmap.getKeys()) {
+ for (String prop in pmap.keys) {
Element elem = pmap[prop];
bool obsolete = false;
final parse = filteredHtml(
@@ -1031,7 +1031,7 @@
String name = fullNameCleanup(entry['name']);
entry['name'] = name;
if (maybeName(name)) {
- for (String key in entry.getKeys()) {
+ for (String key in entry.keys) {
var value = entry[key];
if (value == null) {
entry.remove(key);
@@ -1183,7 +1183,7 @@
bool foundMatch = false;
// Test out if the title is really an HTML tag that matches the
// current class name.
- for (String tag in [title.split(" ")[0], title.split(".").last()]) {
+ for (String tag in [title.split(" ")[0], title.split(".").last]) {
try {
Element element = new Element.tag(tag);
// TODO(jacobr): this is a really ugly way of doing this that will
diff --git a/utils/apidoc/mdn/postProcess.dart b/utils/apidoc/mdn/postProcess.dart
index 00507af..5be6f2e 100644
--- a/utils/apidoc/mdn/postProcess.dart
+++ b/utils/apidoc/mdn/postProcess.dart
@@ -16,7 +16,7 @@
new File('output/database.json').readAsTextSync());
final filteredDb = {};
final obsolete = [];
- for (String type in database.getKeys()) {
+ for (String type in database.keys) {
final entry = pickBestEntry(database[type], type);
if (entry == null) {
print("Can't find ${type} in database. Skipping.");
@@ -25,7 +25,7 @@
filteredDb[type] = entry;
if (entry.containsKey("members")) {
Map members = getMembersMap(entry);
- for (String name in members.getKeys()) {
+ for (String name in members.keys) {
Map memberData = members[name];
if (memberData['obsolete'] == true) {
obsolete.add({'type': type, 'member' : name});
diff --git a/utils/apidoc/mdn/prettyPrint.dart b/utils/apidoc/mdn/prettyPrint.dart
index 032b581..c770ae5 100644
--- a/utils/apidoc/mdn/prettyPrint.dart
+++ b/utils/apidoc/mdn/prettyPrint.dart
@@ -28,7 +28,7 @@
void addMissingHelper(String propType) {
Map expected = allProps[type][propType];
if (expected != null) {
- for(final name in sortStringCollection(expected.getKeys())) {
+ for(final name in sortStringCollection(expected.keys)) {
if (!members.containsKey(name)) {
total++;
sb.add("""
@@ -152,7 +152,7 @@
<li><a href="#dart_summary">Summary</a></li>
</li>
""");
- for (String type in sortStringCollection(database.getKeys())) {
+ for (String type in sortStringCollection(database.keys)) {
final entry = database[type];
if (entry == null || entry.containsKey('skipped')) {
numSkipped++;
@@ -187,7 +187,7 @@
<th>Name</th><th>Description</th><th>IDL</th><th>Status</th>
</tr>
""");
- for (String name in sortStringCollection(members.getKeys())) {
+ for (String name in sortStringCollection(members.keys)) {
Map memberData = members[name];
bool unknown = !hasAny(type, name);
StringBuffer classes = new StringBuffer();
@@ -294,7 +294,7 @@
}
}
- for (String type in sortStringCollection(allProps.getKeys())) {
+ for (String type in sortStringCollection(allProps.keys)) {
if (!matchedTypes.contains(type) &&
!database.containsKey(type)) {
numSkipped++;
@@ -313,7 +313,7 @@
<h2>Summary</h2>
<h3>
Generated docs for $numGen classes out of a possible
- ${allProps.getKeys().length}
+ ${allProps.keys.length}
</h3>
<h3>Found documentation for $numFoundMethods methods listed in WebKit</h3>
<h3>
diff --git a/utils/apidoc/mdn/util.dart b/utils/apidoc/mdn/util.dart
index bd9859c..d0eab3f 100644
--- a/utils/apidoc/mdn/util.dart
+++ b/utils/apidoc/mdn/util.dart
@@ -57,7 +57,7 @@
}
if (entry.containsKey("members")) {
Map members = getMembersMap(entry);
- for (String name in members.getKeys()) {
+ for (String name in members.keys) {
if (hasAny(type, name)) {
score++;
}
diff --git a/utils/archive/entry.dart b/utils/archive/entry.dart
index b5a97d1..e65b965 100644
--- a/utils/archive/entry.dart
+++ b/utils/archive/entry.dart
@@ -260,10 +260,10 @@
*/
InputStream openInputStream() {
if (_archiveId == null) {
- throw new UnsupportedOperationException("Cannot open input stream for "
+ throw new UnsupportedError("Cannot open input stream for "
"archive entry $pathname.");
} else if (_input != null) {
- throw new UnsupportedOperationException("An input stream has already been"
+ throw new UnsupportedError("An input stream has already been"
"opened for archive entry $pathname.");
}
diff --git a/utils/archive/options.dart b/utils/archive/options.dart
index 36c9e42..58d01f3 100644
--- a/utils/archive/options.dart
+++ b/utils/archive/options.dart
@@ -30,7 +30,7 @@
ArchiveOptions() : _options = <String, ArchiveOption>{};
/** Returns whether any options have been set. */
- bool get isEmpty => _options.isEmpty();
+ bool get isEmpty => _options.isEmpty;
/**
* Sets an option. [value] should either be a bool or something with a
@@ -48,5 +48,5 @@
}
/** Gets all options. */
- List<ArchiveOption> get all => _options.getValues();
+ List<ArchiveOption> get all => _options.values;
}
diff --git a/utils/compiler/build_helper.dart b/utils/compiler/build_helper.dart
index 6821599..0b4d29e 100644
--- a/utils/compiler/build_helper.dart
+++ b/utils/compiler/build_helper.dart
@@ -96,6 +96,11 @@
// TODO(ahe): Remove this option.
options = ' --heap_growth_rate=32$options';
+ // Tell the VM to don't bother inlining methods. So far it isn't
+ // paying off but the VM team is working on fixing that.
+ // TODO(ahe): Remove this option.
+ options = ' --no_use_inlining$options';
+
return [
'''
#!/bin/bash
diff --git a/utils/compiler/buildbot.py b/utils/compiler/buildbot.py
deleted file mode 100644
index 6f326c0..0000000
--- a/utils/compiler/buildbot.py
+++ /dev/null
@@ -1,415 +0,0 @@
-#!/usr/bin/python
-
-# Copyright (c) 2011 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""Dart2js buildbot steps
-
-Runs tests for the dart2js compiler.
-"""
-
-import platform
-import optparse
-import os
-import re
-import shutil
-import subprocess
-import sys
-
-BUILDER_NAME = 'BUILDBOT_BUILDERNAME'
-BUILDER_CLOBBER = 'BUILDBOT_CLOBBER'
-
-
-DART_PATH = os.path.dirname(
- os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
-
-DART2JS_BUILDER = (
- r'dart2js-(linux|mac|windows)(-(jsshell))?-(debug|release)(-(checked|host-checked))?(-(host-checked))?-?(\d*)-?(\d*)')
-WEB_BUILDER = (
- r'dart2js-(ie|ff|safari|chrome|opera)-(win7|win8|mac|linux)(-(all|html))?')
-
-NO_COLOR_ENV = dict(os.environ)
-NO_COLOR_ENV['TERM'] = 'nocolor'
-
-class BuildInfo(object):
- """ Encapsulation of build information.
- - compiler: 'dart2js' or None when the builder has an incorrect name
- - runtime: 'd8', 'ie', 'ff', 'safari', 'chrome', 'opera'
- - mode: 'debug' or 'release'
- - system: 'linux', 'mac', or 'win7'
- - checked: True if we should run in checked mode, otherwise False
- - host_checked: True if we should run in host checked mode, otherwise False
- - shard_index: The shard we are running, None when not specified.
- - total_shards: The total number of shards, None when not specified.
- - is_buildbot: True if we are on a buildbot (or emulating it).
- - test_set: Specification of a non standard test set, default None
- """
- def __init__(self, compiler, runtime, mode, system, checked=False,
- host_checked=False, shard_index=None, total_shards=None,
- is_buildbot=False, test_set=None):
- self.compiler = compiler
- self.runtime = runtime
- self.mode = mode
- self.system = system
- self.checked = checked
- self.host_checked = host_checked
- self.shard_index = shard_index
- self.total_shards = total_shards
- self.is_buildbot = is_buildbot
- self.test_set = test_set
-
- def PrintBuildInfo(self):
- shard_description = ""
- if self.shard_index:
- shard_description = " shard %s of %s" % (self.shard_index,
- self.total_shards)
- print ("compiler: %s, runtime: %s mode: %s, system: %s,"
- " checked: %s, host-checked: %s, test-set: %s%s"
- ) % (self.compiler, self.runtime, self.mode, self.system,
- self.checked, self.host_checked, self.test_set,
- shard_description)
-
-
-def GetBuildInfo():
- """Returns a BuildInfo object for the current buildbot based on the
- name of the builder.
- """
- parser = optparse.OptionParser()
- parser.add_option('-n', '--name', dest='name', help='The name of the build'
- 'bot you would like to emulate (ex: web-chrome-win7)', default=None)
- args, _ = parser.parse_args()
-
- compiler = None
- runtime = None
- mode = None
- system = None
- builder_name = os.environ.get(BUILDER_NAME)
- checked = False
- host_checked = False
- shard_index = None
- total_shards = None
- is_buildbot = True
- test_set = None
-
- if not builder_name:
- # We are not running on a buildbot.
- is_buildbot = False
- if args.name:
- builder_name = args.name
- else:
- print 'Use -n $BUILDBOT_NAME for the bot you would like to emulate.'
- sys.exit(1)
-
- if builder_name:
- dart2js_pattern = re.match(DART2JS_BUILDER, builder_name)
- web_pattern = re.match(WEB_BUILDER, builder_name)
-
- if web_pattern:
- compiler = 'dart2js'
- runtime = web_pattern.group(1)
- system = web_pattern.group(2)
- mode = 'release'
- test_set = web_pattern.group(4)
- elif dart2js_pattern:
- compiler = 'dart2js'
- system = dart2js_pattern.group(1)
- runtime = 'd8'
- if dart2js_pattern.group(3) == 'jsshell':
- runtime = 'jsshell'
- mode = dart2js_pattern.group(4)
- # The valid naming parts for checked and host-checked are:
- # Empty: checked=False, host_checked=False
- # -checked: checked=True, host_checked=False
- # -host-checked: checked=False, host_checked=True
- # -checked-host-checked: checked=True, host_checked=True
- if dart2js_pattern.group(6) == 'checked':
- checked = True
- if dart2js_pattern.group(6) == 'host-checked':
- host_checked = True
- if dart2js_pattern.group(8) == 'host-checked':
- host_checked = True
- shard_index = dart2js_pattern.group(9)
- total_shards = dart2js_pattern.group(10)
-
- if system == 'windows':
- system = 'win7'
-
- if (system == 'win7' and platform.system() != 'Windows') or (
- system == 'mac' and platform.system() != 'Darwin') or (
- system == 'linux' and platform.system() != 'Linux'):
- print ('Error: You cannot emulate a buildbot with a platform different '
- 'from your own.')
- sys.exit(1)
- return BuildInfo(compiler, runtime, mode, system, checked, host_checked,
- shard_index, total_shards, is_buildbot, test_set)
-
-
-def NeedsXterm(compiler, runtime):
- return runtime in ['ie', 'chrome', 'safari', 'opera', 'ff', 'drt']
-
-
-def TestStepName(name, flags):
- # Filter out flags with '=' as this breaks the /stats feature of the
- # build bot.
- flags = [x for x in flags if not '=' in x]
- return ('%s tests %s' % (name, ' '.join(flags))).strip()
-
-
-def TestStep(name, mode, system, compiler, runtime, targets, flags):
- step_name = TestStepName(name, flags)
- print '@@@BUILD_STEP %s@@@' % step_name
- sys.stdout.flush()
- if NeedsXterm(compiler, runtime) and system == 'linux':
- cmd = ['xvfb-run', '-a']
- else:
- cmd = []
-
- user_test = os.environ.get('USER_TEST', 'no')
-
- if runtime == 'ie':
- runtime = 'ie9' # TODO(efortuna): Fix with issue 6003.
- cmd.extend([sys.executable,
- os.path.join(os.curdir, 'tools', 'test.py'),
- '--step_name=' + step_name,
- '--mode=' + mode,
- '--compiler=' + compiler,
- '--runtime=' + runtime,
- '--time',
- '--use-sdk',
- '--report'])
-
- if user_test == 'yes':
- cmd.append('--progress=color')
- else:
- cmd.extend(['--progress=buildbot', '-v'])
-
- if flags:
- cmd.extend(flags)
- cmd.extend(targets)
-
- print 'running %s' % (' '.join(cmd))
- exit_code = subprocess.call(cmd, env=NO_COLOR_ENV)
- if exit_code != 0:
- print '@@@STEP_FAILURE@@@'
- return exit_code
-
-
-def BuildSDK(mode, system):
- """ build the SDK.
- Args:
- - mode: either 'debug' or 'release'
- - system: either 'linux', 'mac', or 'win7'
- """
- os.chdir(DART_PATH)
-
- args = [sys.executable, './tools/build.py', '--mode=' + mode, 'create_sdk']
- print 'running %s' % (' '.join(args))
- return subprocess.call(args, env=NO_COLOR_ENV)
-
-
-def TestCompiler(runtime, mode, system, flags, is_buildbot, test_set):
- """ test the compiler.
- Args:
- - runtime: either 'd8', 'jsshell', or one of the browsers, see GetBuildInfo
- - mode: either 'debug' or 'release'
- - system: either 'linux', 'mac', or 'win7'
- - flags: extra flags to pass to test.dart
- - is_buildbot: true if we are running on a real buildbot instead of
- emulating one.
- - test_set: Specification of a non standard test set, default None
- """
-
- # Make sure we are in the dart directory
- os.chdir(DART_PATH)
-
- if system.startswith('win') and runtime == 'ie':
- # There should not be more than one InternetExplorerDriver instance
- # running at a time. For details, see
- # http://code.google.com/p/selenium/wiki/InternetExplorerDriver.
- flags += ['-j1']
-
- def GetPath(runtime):
- """ Helper to get the path to the Chrome or Firefox executable for a
- particular platform on the buildbot. Throws a KeyError if runtime is not
- either 'chrome' or 'ff'."""
- if system == 'mac':
- partDict = {'chrome': 'Google\\ Chrome', 'ff': 'Firefox'}
- mac_path = '/Applications/%s.app/Contents/MacOS/%s'
- path_dict = {'chrome': mac_path % (partDict[runtime], partDict[runtime]),
- 'ff': mac_path % (partDict[runtime], partDict[runtime].lower())}
- elif system == 'linux':
- path_dict = {'ff': 'firefox', 'chrome': 'google-chrome'}
- else:
- # Windows.
- path_dict = {'ff': os.path.join('C:/', 'Program Files (x86)',
- 'Mozilla Firefox', 'firefox.exe'),
- 'chrome': os.path.join('C:/', 'Users', 'chrome-bot', 'AppData',
- 'Local', 'Google', 'Chrome', 'Application', 'chrome.exe')}
- return path_dict[runtime]
-
- if system == 'linux' and runtime == 'chrome':
- # TODO(ngeoffray): We should install selenium on the buildbot.
- runtime = 'drt'
- elif (runtime == 'ff' or runtime == 'chrome') and is_buildbot:
- # Print out browser version numbers if we're running on the buildbot (where
- # we know the paths to these browser installations).
- version_query_string = '"%s" --version' % GetPath(runtime)
- if runtime == 'ff' and system == 'win7':
- version_query_string += '| more'
- elif runtime == 'chrome' and system == 'win7':
- version_query_string = ('''reg query "HKCU\\Software\\Microsoft\\''' +
- '''Windows\\CurrentVersion\\Uninstall\\Google Chrome" /v Version''')
- p = subprocess.Popen(version_query_string,
- stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
- output, stderr = p.communicate()
- output = output.split()
- try:
- print 'Version of %s: %s' % (runtime, output[-1])
- except IndexError:
- # Failed to obtain version information. Continue running tests.
- pass
-
- if runtime == 'd8':
- # The dart2js compiler isn't self-hosted (yet) so we run its
- # unit tests on the VM. We avoid doing this on the builders
- # that run the browser tests to cut down on the cycle time.
- TestStep("dart2js_unit", mode, system, 'none', 'vm', ['dart2js'], flags)
-
- if not (system.startswith('win') and runtime == 'ie'):
- # Run the default set of test suites.
- TestStep("dart2js", mode, system, 'dart2js', runtime, [], flags)
-
- # TODO(kasperl): Consider running peg and css tests too.
- extras = ['dart2js_extra', 'dart2js_native', 'dart2js_foreign']
- TestStep("dart2js_extra", mode, system, 'dart2js', runtime, extras, flags)
- else:
- # TODO(ricow): Enable standard sharding for IE bots when we have more vms.
- if test_set == 'html':
- TestStep("dart2js", mode, system, 'dart2js', runtime, ['html'], flags)
- elif test_set == 'all':
- TestStep("dart2js", mode, system, 'dart2js', runtime, ['dartc',
- 'samples', 'standalone', 'corelib', 'co19', 'language', 'isolate',
- 'vm', 'json', 'benchmark_smoke', 'dartdoc', 'utils', 'pub', 'lib'],
- flags)
- extras = ['dart2js_extra', 'dart2js_native', 'dart2js_foreign']
- TestStep("dart2js_extra", mode, system, 'dart2js', runtime, extras,
- flags)
-
- return 0
-
-def _DeleteTempWebdriverProfiles(directory):
- """Find all the firefox profiles in a particular directory and delete them."""
- for f in os.listdir(directory):
- item = os.path.join(directory, f)
- if os.path.isdir(item) and (f.startswith('tmp') or f.startswith('opera')):
- subprocess.Popen('rm -rf %s' % item, shell=True)
-
-def CleanUpTemporaryFiles(system, browser):
- """For some browser (selenium) tests, the browser creates a temporary profile
- on each browser session start. On Windows, generally these files are
- automatically deleted when all python processes complete. However, since our
- buildbot slave script also runs on python, we never get the opportunity to
- clear out the temp files, so we do so explicitly here. Our batch browser
- testing will make this problem occur much less frequently, but will still
- happen eventually unless we do this.
-
- This problem also occurs with batch tests in Firefox. For some reason selenium
- automatically deletes the temporary profiles for Firefox for one browser,
- but not multiple ones when we have many open batch tasks running. This
- behavior has not been reproduced outside of the buildbots.
-
- Args:
- - system: either 'linux', 'mac', or 'win7'
- - browser: one of the browsers, see GetBuildInfo
- """
- if system == 'win7':
- shutil.rmtree('C:\\Users\\chrome-bot\\AppData\\Local\\Temp',
- ignore_errors=True)
- elif browser == 'ff' or 'opera':
- # Note: the buildbots run as root, so we can do this without requiring a
- # password. The command won't actually work on regular machines without
- # root permissions.
- _DeleteTempWebdriverProfiles('/tmp')
- _DeleteTempWebdriverProfiles('/var/tmp')
-
-def ClobberBuilder(mode):
- """ Clobber the builder before we do the build.
- Args:
- - mode: either 'debug' or 'release'
- """
- cmd = [sys.executable,
- './tools/clean_output_directory.py',
- '--mode=' + mode]
- print 'Clobbering %s' % (' '.join(cmd))
- return subprocess.call(cmd, env=NO_COLOR_ENV)
-
-def GetShouldClobber():
- return os.environ.get(BUILDER_CLOBBER) == "1"
-
-def GetHasHardCodedCheckedMode(build_info):
- # TODO(ricow): We currently run checked mode tests on chrome on linux and
- # on the slow (all) IE windows bots. This is a hack and we should use the
- # normal sharding and checked splitting functionality when we get more
- # vms for testing this.
- if (build_info.system == 'linux' and build_info.runtime == 'chrome'):
- return True
- if (build_info.system == 'win7' and build_info.runtime == 'ie' and
- build_info.test_set == 'all'):
- return True
- return False
-
-def main():
- if len(sys.argv) == 0:
- print 'Script pathname not known, giving up.'
- return 1
-
- build_info = GetBuildInfo()
-
- # Print out the buildinfo for easy debugging.
- build_info.PrintBuildInfo()
-
- if build_info.compiler is None:
- return 1
-
- if GetShouldClobber():
- print '@@@BUILD_STEP Clobber@@@'
- status = ClobberBuilder(build_info.mode)
- if status != 0:
- print '@@@STEP_FAILURE@@@'
- return status
-
- print '@@@BUILD_STEP build sdk@@@'
- status = BuildSDK(build_info.mode, build_info.system)
- if status != 0:
- print '@@@STEP_FAILURE@@@'
- return status
-
- test_flags = []
- if build_info.shard_index:
- test_flags = ['--shards=%s' % build_info.total_shards,
- '--shard=%s' % build_info.shard_index]
-
- if build_info.checked: test_flags += ['--checked']
-
- if build_info.host_checked: test_flags += ['--host-checked']
-
- status = TestCompiler(build_info.runtime, build_info.mode,
- build_info.system, list(test_flags),
- build_info.is_buildbot, build_info.test_set)
-
- # See comment in GetHasHardCodedCheckedMode, this is a hack.
- if (status == 0 and GetHasHardCodedCheckedMode(build_info)):
- status = TestCompiler(build_info.runtime, build_info.mode,
- build_info.system,
- test_flags + ['--checked'],
- build_info.is_buildbot,
- build_info.test_set)
-
- if build_info.runtime != 'd8': CleanUpTemporaryFiles(build_info.system,
- build_info.runtime)
- if status != 0: print '@@@STEP_FAILURE@@@'
- return status
-
-if __name__ == '__main__':
- sys.exit(main())
diff --git a/utils/css/tool.dart b/utils/css/tool.dart
index cbc19b6..af38b3a 100644
--- a/utils/css/tool.dart
+++ b/utils/css/tool.dart
@@ -18,7 +18,7 @@
watch.start();
callback();
watch.stop();
- return watch.elapsedInMs();
+ return watch.elapsedMilliseconds;
}
printStats(num elapsed, [String filename = '']) {
diff --git a/utils/css/world.dart b/utils/css/world.dart
index 0886068..837eefd 100644
--- a/utils/css/world.dart
+++ b/utils/css/world.dart
@@ -158,7 +158,7 @@
sw.start();
var result = f();
sw.stop();
- info('$name in ${sw.elapsedInMs()}msec');
+ info('$name in ${sw.elapsedMilliseconds}msec');
return result;
}
}
diff --git a/utils/lib/file_system.dart b/utils/lib/file_system.dart
index aa82e07..32d0b49 100644
--- a/utils/lib/file_system.dart
+++ b/utils/lib/file_system.dart
@@ -37,11 +37,11 @@
var pieces = path1.split('/');
for (var piece in path2.split('/')) {
- if (piece == '..' && pieces.length > 0 && pieces.last() != '.'
- && pieces.last() != '..') {
+ if (piece == '..' && pieces.length > 0 && pieces.last != '.'
+ && pieces.last != '..') {
pieces.removeLast();
} else if (piece != '') {
- if (pieces.length > 0 && pieces.last() == '.') {
+ if (pieces.length > 0 && pieces.last == '.') {
pieces.removeLast();
}
pieces.add(piece);
diff --git a/utils/peg/pegparser.dart b/utils/peg/pegparser.dart
index b67bd05..59cc47e 100644
--- a/utils/peg/pegparser.dart
+++ b/utils/peg/pegparser.dart
@@ -62,7 +62,7 @@
// Find the range of character codes and construct an array of flags for codes
// within the range.
- List<int> codes = characters.charCodes();
+ List<int> codes = characters.charCodes;
codes.sort((a, b) => a < b ? -1 : a > b ? 1 : 0);
int lo = codes[0];
int hi = codes[codes.length - 1];
@@ -248,7 +248,7 @@
* if the input can't be parsed.
*/
parse(root, String text) {
- for (var symbol in _symbols.getValues())
+ for (var symbol in _symbols.values)
if (symbol._rule == null)
print('${symbol.name} is undefined');
@@ -266,7 +266,7 @@
diagnose(state) {
var message = 'unexpected error';
- if (!state.max_rule.isEmpty()) {
+ if (!state.max_rule.isEmpty) {
var s = new Set();
for (var rule in state.max_rule)
s.add(rule.description());
diff --git a/utils/pub/command_help.dart b/utils/pub/command_help.dart
index 7fdf510..938a50e 100644
--- a/utils/pub/command_help.dart
+++ b/utils/pub/command_help.dart
@@ -13,7 +13,7 @@
bool get requiresEntrypoint => false;
Future onRun() {
- if (commandOptions.rest.isEmpty()) {
+ if (commandOptions.rest.isEmpty) {
printUsage();
} else {
pubCommands[commandOptions.rest[0]].printUsage();
diff --git a/utils/pub/command_update.dart b/utils/pub/command_update.dart
index f296752..16155e2 100644
--- a/utils/pub/command_update.dart
+++ b/utils/pub/command_update.dart
@@ -16,7 +16,7 @@
Future onRun() {
var future;
- if (commandOptions.rest.isEmpty()) {
+ if (commandOptions.rest.isEmpty) {
future = entrypoint.updateAllDependencies();
} else {
future = entrypoint.updateDependencies(commandOptions.rest);
diff --git a/utils/pub/git_source.dart b/utils/pub/git_source.dart
index 2a73427..6327638 100644
--- a/utils/pub/git_source.dart
+++ b/utils/pub/git_source.dart
@@ -78,9 +78,9 @@
description.remove('ref');
if (fromLockFile) description.remove('resolved-ref');
- if (!description.isEmpty()) {
+ if (!description.isEmpty) {
var plural = description.length > 1;
- var keys = Strings.join(description.getKeys(), ', ');
+ var keys = Strings.join(description.keys, ', ');
throw new FormatException("Invalid key${plural ? 's' : ''}: $keys.");
}
}
diff --git a/utils/pub/hosted_source.dart b/utils/pub/hosted_source.dart
index 47cda67..eb4b86fd 100644
--- a/utils/pub/hosted_source.dart
+++ b/utils/pub/hosted_source.dart
@@ -86,16 +86,7 @@
// Now that the install has succeeded, move it to the real location in
// the cache. This ensures that we don't leave half-busted ghost
// directories in the user's pub cache if an install fails.
-
- if (io.Platform.operatingSystem == "windows") {
- // TODO(rnystrom): Awful hack. On Windows, we see cases where the
- // extract has not finished by the time we get here, so the rename fails
- // with a "directory in use" error. So, we will just wait a couple of
- // seconds before we start.
- return sleep(2000).chain((_) => renameDir(tempDir, destPath));
- } else {
- return renameDir(tempDir, destPath);
- }
+ return renameDir(tempDir, destPath);
}).transform((_) => true);
}
diff --git a/utils/pub/io.dart b/utils/pub/io.dart
index 8890679..c2f1456 100644
--- a/utils/pub/io.dart
+++ b/utils/pub/io.dart
@@ -44,10 +44,10 @@
for (final piece in _getPath(part).split('/')) {
if (piece == '..' && parts.length > 0 &&
- parts.last() != '.' && parts.last() != '..') {
+ parts.last != '.' && parts.last != '..') {
parts.removeLast();
} else if (piece != '') {
- if (parts.length > 0 && parts.last() == '.') {
+ if (parts.length > 0 && parts.last == '.') {
parts.removeLast();
}
parts.add(piece);
@@ -506,7 +506,7 @@
// TODO(rnystrom): Remove this and change to returning one string.
List<String> toLines(String output) {
var lines = output.split(NEWLINE_PATTERN);
- if (!lines.isEmpty() && lines.last() == "") lines.removeLast();
+ if (!lines.isEmpty && lines.last == "") lines.removeLast();
return lines;
}
return new PubProcessResult(toLines(result.stdout),
@@ -655,12 +655,6 @@
tempDir = temp;
return createFileFromStream(stream, join(tempDir, 'data.tar.gz'));
}).chain((_) {
- // TODO(rnystrom): Hack. We get intermittent "file already in use" errors.
- // It looks like the 7zip process is starting up before the file has
- // finished being written. So we'll just sleep for a couple of seconds
- // here. :(
- return sleep(2000);
- }).chain((_) {
// 7zip can't unarchive from gzip -> tar -> destination all in one step
// first we un-gzip it to a tar file.
// Note: Setting the working directory instead of passing in a full file
diff --git a/utils/pub/package.dart b/utils/pub/package.dart
index ffc754b..8d84546 100644
--- a/utils/pub/package.dart
+++ b/utils/pub/package.dart
@@ -27,12 +27,17 @@
if (!exists) throw new PubspecNotFoundException(name);
return readTextFile(pubspecPath);
}).transform((contents) {
- var pubspec = new Pubspec.parse(contents, sources);
- if (pubspec.name == null) throw new PubspecHasNoNameException(name);
- if (name != null && pubspec.name != name) {
- throw new PubspecNameMismatchException(name, pubspec.name);
+ try {
+ var pubspec = new Pubspec.parse(contents, sources);
+
+ if (pubspec.name == null) throw new PubspecHasNoNameException(name);
+ if (name != null && pubspec.name != name) {
+ throw new PubspecNameMismatchException(name, pubspec.name);
+ }
+ return new Package._(packageDir, pubspec);
+ } on FormatException catch (ex) {
+ throw 'Could not parse $pubspecPath:\n${ex.message}';
}
- return new Package._(packageDir, pubspec);
});
}
@@ -118,9 +123,9 @@
PackageId(this.name, this.source, this.version, this.description);
- int hashCode() => name.hashCode() ^
- source.name.hashCode() ^
- version.hashCode();
+ int get hashCode => name.hashCode ^
+ source.name.hashCode ^
+ version.hashCode;
bool operator ==(other) {
if (other is! PackageId) return false;
diff --git a/utils/pub/pub.dart b/utils/pub/pub.dart
index a5d8340..b1dc0cf 100644
--- a/utils/pub/pub.dart
+++ b/utils/pub/pub.dart
@@ -68,7 +68,7 @@
return;
}
- if (globalOptions['help'] || globalOptions.rest.isEmpty()) {
+ if (globalOptions['help'] || globalOptions.rest.isEmpty) {
printUsage();
return;
}
@@ -121,7 +121,7 @@
// TODO(rnystrom): A sorted map would be nice.
int length = 0;
var names = <String>[];
- for (var command in pubCommands.getKeys()) {
+ for (var command in pubCommands.keys) {
length = max(length, command.length);
names.add(command);
}
@@ -255,7 +255,7 @@
print('Usage: $usage');
var commandUsage = commandParser.getUsage();
- if (!commandUsage.isEmpty()) {
+ if (!commandUsage.isEmpty) {
print('');
print(commandUsage);
}
diff --git a/utils/pub/pubspec.dart b/utils/pub/pubspec.dart
index 6fbe647..62a4dc5 100644
--- a/utils/pub/pubspec.dart
+++ b/utils/pub/pubspec.dart
@@ -39,7 +39,7 @@
/** Whether or not the pubspec has no contents. */
bool get isEmpty =>
- name == null && version == Version.none && dependencies.isEmpty();
+ name == null && version == Version.none && dependencies.isEmpty;
/**
* Parses the pubspec whose text is [contents]. If the pubspec doesn't define
@@ -59,7 +59,13 @@
throw new FormatException('The pubspec must be a YAML mapping.');
}
- if (parsedPubspec.containsKey('name')) name = parsedPubspec['name'];
+ if (parsedPubspec.containsKey('name')) {
+ name = parsedPubspec['name'];
+ if (name is! String) {
+ throw new FormatException(
+ 'The pubspec "name" field should be a string, but was "$name".');
+ }
+ }
if (parsedPubspec.containsKey('version')) {
version = new Version.parse(parsedPubspec['version']);
@@ -68,9 +74,10 @@
if (parsedPubspec.containsKey('dependencies')) {
var dependencyEntries = parsedPubspec['dependencies'];
if (dependencyEntries is! Map ||
- dependencyEntries.getKeys().some((e) => e is! String)) {
+ dependencyEntries.keys.some((e) => e is! String)) {
throw new FormatException(
- 'The pubspec dependencies must be a map of package names.');
+ 'The pubspec dependencies should be a map of package names, but '
+ 'was ${dependencyEntries}.');
}
dependencyEntries.forEach((name, spec) {
@@ -89,7 +96,7 @@
spec.remove('version'));
}
- var sourceNames = spec.getKeys();
+ var sourceNames = spec.keys;
if (sourceNames.length > 1) {
throw new FormatException(
'Dependency $name may only have one source: $sourceNames.');
@@ -98,14 +105,15 @@
var sourceName = only(sourceNames);
if (sourceName is! String) {
throw new FormatException(
- 'Source name $sourceName must be a string.');
+ 'Source name $sourceName should be a string.');
}
source = sources[sourceName];
description = spec[sourceName];
} else {
throw new FormatException(
- 'Dependency specification $spec must be a string or a mapping.');
+ 'Dependency specification $spec should be a string or a '
+ 'mapping.');
}
source.validateDescription(description, fromLockFile: false);
@@ -115,6 +123,43 @@
});
}
+ // Even though the pub app itself doesn't use these fields, we validate
+ // them here so that users find errors early before they try to upload to
+ // the server:
+
+ if (parsedPubspec.containsKey('homepage') &&
+ parsedPubspec['homepage'] is! String) {
+ throw new FormatException(
+ 'The "homepage" field should be a string, but was '
+ '${parsedPubspec["homepage"]}.');
+ }
+
+ if (parsedPubspec.containsKey('author') &&
+ parsedPubspec['author'] is! String) {
+ throw new FormatException(
+ 'The "author" field should be a string, but was '
+ '${parsedPubspec["author"]}.');
+ }
+
+ if (parsedPubspec.containsKey('authors')) {
+ var authors = parsedPubspec['authors'];
+ if (authors is List) {
+ // All of the elements must be strings.
+ if (!authors.every((author) => author is String)) {
+ throw new FormatException('The "authors" field should be a string '
+ 'or a list of strings, but was "$authors".');
+ }
+ } else if (authors is! String) {
+ throw new FormatException('The pubspec "authors" field should be a '
+ 'string or a list of strings, but was "$authors".');
+ }
+
+ if (parsedPubspec.containsKey('author')) {
+ throw new FormatException('A pubspec should not have both an "author" '
+ 'and an "authors" field.');
+ }
+ }
+
return new Pubspec(name, version, dependencies);
}
}
diff --git a/utils/pub/root_source.dart b/utils/pub/root_source.dart
index 7fc9784..ebab17e 100644
--- a/utils/pub/root_source.dart
+++ b/utils/pub/root_source.dart
@@ -26,7 +26,6 @@
}
Future<bool> install(PackageId id, String destPath) {
- throw new UnsupportedOperationException(
- "Can't install from a root source.");
+ throw new UnsupportedError("Can't install from a root source.");
}
}
diff --git a/utils/pub/utils.dart b/utils/pub/utils.dart
index 4dbc589..21275f8 100644
--- a/utils/pub/utils.dart
+++ b/utils/pub/utils.dart
@@ -74,9 +74,9 @@
*/
only(Iterable iter) {
var iterator = iter.iterator();
- assert(iterator.hasNext());
+ assert(iterator.hasNext);
var obj = iterator.next();
- assert(!iterator.hasNext());
+ assert(!iterator.hasNext);
return obj;
}
@@ -97,8 +97,8 @@
var buffer = new StringBuffer();
var start = 0;
for (var match in matcher.allMatches(source)) {
- buffer.add(source.substring(start, match.start()));
- start = match.end();
+ buffer.add(source.substring(start, match.start));
+ start = match.end;
buffer.add(fn(match));
}
buffer.add(source.substring(start));
@@ -110,7 +110,7 @@
*/
bool endsWithPattern(String str, Pattern matcher) {
for (var match in matcher.allMatches(str)) {
- if (match.end() == str.length) return true;
+ if (match.end == str.length) return true;
}
return false;
}
@@ -119,7 +119,7 @@
* Returns the hex-encoded sha1 hash of [source].
*/
String sha1(String source) =>
- CryptoUtils.bytesToHex(new SHA1().update(source.charCodes()).digest());
+ CryptoUtils.bytesToHex(new SHA1().update(source.charCodes).digest());
/**
* Returns a [Future] that completes in [milliSeconds].
diff --git a/utils/pub/version.dart b/utils/pub/version.dart
index 98fcf72..a7b6b3a 100644
--- a/utils/pub/version.dart
+++ b/utils/pub/version.dart
@@ -126,7 +126,7 @@
return 0;
}
- int hashCode() => toString().hashCode();
+ int get hashCode => toString().hashCode;
String toString() {
var buffer = new StringBuffer();
diff --git a/utils/pub/version_solver.dart b/utils/pub/version_solver.dart
index 80f3d48..5a624df 100644
--- a/utils/pub/version_solver.dart
+++ b/utils/pub/version_solver.dart
@@ -102,7 +102,7 @@
Future processNextWorkItem(_) {
while (true) {
// Stop if we are done.
- if (_work.isEmpty()) return new Future.immediate(buildResults());
+ if (_work.isEmpty) return new Future.immediate(buildResults());
// If we appear to be stuck in a loop, then we probably have an unstable
// graph, bail. We guess this based on a rough heuristic that it should
@@ -204,7 +204,7 @@
}
List<PackageId> buildResults() {
- return _packages.getValues().filter((dep) => dep.isDependedOn).map((dep) {
+ return _packages.values.filter((dep) => dep.isDependedOn).map((dep) {
var description = dep.description;
// If the lockfile contains a fully-resolved description for the package,
@@ -278,7 +278,7 @@
var oldDependencyRefs = list[0];
var newDependencyRefs = list[1];
- for (var oldRef in oldDependencyRefs.getValues()) {
+ for (var oldRef in oldDependencyRefs.values) {
if (newDependencyRefs.containsKey(oldRef.name)) {
// The dependency is in both versions of this package, but its
// constraint may have changed.
@@ -293,7 +293,7 @@
// Everything that's left is a depdendency that's only in the new
// version of the package.
- for (var newRef in newDependencyRefs.getValues()) {
+ for (var newRef in newDependencyRefs.values) {
solver.enqueue(new AddConstraint(package, newRef));
}
});
@@ -545,10 +545,10 @@
* one. If `false`, then it means this package is not part of the dependency
* graph and should be omitted.
*/
- bool get isDependedOn => !_refs.isEmpty();
+ bool get isDependedOn => !_refs.isEmpty;
/** The names of all the packages that depend on this dependency. */
- Collection<String> get dependers => _refs.getKeys();
+ Collection<String> get dependers => _refs.keys;
/**
* Gets the overall constraint that all packages are placing on this one.
@@ -556,9 +556,9 @@
* package is in the process of being added to the graph), returns `null`.
*/
VersionConstraint get constraint {
- if (_refs.isEmpty()) return null;
+ if (_refs.isEmpty) return null;
return new VersionConstraint.intersect(
- _refs.getValues().map((ref) => ref.constraint));
+ _refs.values.map((ref) => ref.constraint));
}
/// The source of this dependency's package.
@@ -580,8 +580,8 @@
/// [RootSource], that will be used; otherwise, it will be the source and
/// description that all dependencies agree upon.
PackageRef _canonicalRef() {
- if (_refs.isEmpty()) return null;
- var refs = _refs.getValues();
+ if (_refs.isEmpty) return null;
+ var refs = _refs.values;
for (var ref in refs) {
if (ref is RootSource) return ref;
}
@@ -624,8 +624,8 @@
/// required to match. Returns null if there are no requirements on new
/// constraints.
PackageRef _requiredRef() {
- if (_refs.isEmpty()) return null;
- var refs = _refs.getValues();
+ if (_refs.isEmpty) return null;
+ var refs = _refs.values;
var first = refs[0];
if (refs.length == 1) {
if (first.source is RootSource) return null;
diff --git a/utils/pub/yaml/composer.dart b/utils/pub/yaml/composer.dart
index 52d9885..9558443 100644
--- a/utils/pub/yaml/composer.dart
+++ b/utils/pub/yaml/composer.dart
@@ -59,7 +59,7 @@
'float': parseFloat, 'str': parseString
};
- for (var key in tagParsers.getKeys()) {
+ for (var key in tagParsers.keys) {
if (scalar.tag.name != _Tag.yaml(key)) continue;
var result = tagParsers[key](scalar.content);
if (result != null) return setAnchor(scalar, result);
@@ -130,7 +130,7 @@
if (match != null) {
// TODO(nweiz): clean this up when Dart can parse an octal string
var n = 0;
- for (var c in match.group(1).charCodes()) {
+ for (var c in match.group(1).charCodes) {
n *= 8;
n += c - 48;
}
diff --git a/utils/pub/yaml/deep_equals.dart b/utils/pub/yaml/deep_equals.dart
index 76102a3..2cb38cc 100644
--- a/utils/pub/yaml/deep_equals.dart
+++ b/utils/pub/yaml/deep_equals.dart
@@ -58,7 +58,7 @@
bool _mapEquals(Map map1, Map map2, List parents1, List parents2) {
if (map1.length != map2.length) return false;
- for (var key in map1.getKeys()) {
+ for (var key in map1.keys) {
if (!map2.containsKey(key)) return false;
if (!deepEquals(map1[key], map2[key], parents1, parents2)) return false;
}
@@ -71,6 +71,6 @@
* that it considers NaN to be equal to itself.
*/
bool _doubleEquals(double d1, double d2) {
- if (d1.isNaN() && d2.isNaN()) return true;
+ if (d1.isNaN && d2.isNaN) return true;
return d1 == d2;
}
diff --git a/utils/pub/yaml/model.dart b/utils/pub/yaml/model.dart
index 1247a71..f9dd005 100644
--- a/utils/pub/yaml/model.dart
+++ b/utils/pub/yaml/model.dart
@@ -46,7 +46,7 @@
}
}
- int hashCode() => name.hashCode();
+ int get hashCode => name.hashCode;
}
/** The abstract class for YAML nodes. */
@@ -64,7 +64,7 @@
return tag == other.tag;
}
- int hashCode() => _hashCode([tag, anchor]);
+ int get hashCode => _hashCode([tag, anchor]);
abstract visit(_Visitor v);
}
@@ -90,7 +90,7 @@
String toString() => '$tag [${Strings.join(content.map((e) => '$e'), ', ')}]';
- int hashCode() => super.hashCode() ^ _hashCode(content);
+ int get hashCode => super.hashCode ^ _hashCode(content);
visit(_Visitor v) => v.visitSequence(this);
}
@@ -153,7 +153,7 @@
// TODO(nweiz): This could be faster if we used a RegExp to check for
// special characters and short-circuited if they didn't exist.
- var escapedValue = value.charCodes().map((c) {
+ var escapedValue = value.charCodes.map((c) {
switch (c) {
case _Parser.TAB: return "\\t";
case _Parser.LF: return "\\n";
@@ -201,7 +201,7 @@
return '${Strings.join(prefix, '')}$str';
}
- int hashCode() => super.hashCode() ^ content.hashCode();
+ int get hashCode => super.hashCode ^ content.hashCode;
visit(_Visitor v) => v.visitScalar(this);
}
@@ -219,7 +219,7 @@
// Should be super != other; bug 2554
if (!(super == other) || other is! _MappingNode) return false;
if (content.length != other.content.length) return false;
- for (var key in content.getKeys()) {
+ for (var key in content.keys) {
if (!other.content.containsKey(key)) return false;
if (content[key] != other.content[key]) return false;
}
@@ -227,12 +227,12 @@
}
String toString() {
- var strContent = Strings.join(content.getKeys().
+ var strContent = Strings.join(content.keys.
map((k) => '${k}: ${content[k]}'), ', ');
return '$tag {$strContent}';
}
- int hashCode() => super.hashCode() ^ _hashCode(content);
+ int get hashCode => super.hashCode ^ _hashCode(content);
visit(_Visitor v) => v.visitMapping(this);
}
diff --git a/utils/pub/yaml/parser.dart b/utils/pub/yaml/parser.dart
index b3c69df..dcfc50a 100644
--- a/utils/pub/yaml/parser.dart
+++ b/utils/pub/yaml/parser.dart
@@ -202,10 +202,10 @@
if (farthestLine < line) {
farthestLine = line;
farthestColumn = column;
- farthestContext = contextStack.last();
+ farthestContext = contextStack.last;
} else if (farthestLine == line && farthestColumn < column) {
farthestColumn = column;
- farthestContext = contextStack.last();
+ farthestContext = contextStack.last;
}
farthestPos = pos;
diff --git a/utils/pub/yaml/visitor.dart b/utils/pub/yaml/visitor.dart
index 744bcd7..22ada8b 100644
--- a/utils/pub/yaml/visitor.dart
+++ b/utils/pub/yaml/visitor.dart
@@ -16,7 +16,7 @@
/** Visits each key and value in [map] and returns a map of the results. */
visitMapping(_MappingNode map) {
var out = new YamlMap();
- for (var key in map.content.getKeys()) {
+ for (var key in map.content.keys) {
out[key.visit(this)] = map.content[key].visit(this);
}
return out;
diff --git a/utils/pub/yaml/yaml_map.dart b/utils/pub/yaml/yaml_map.dart
index f5b857f..209e448 100644
--- a/utils/pub/yaml/yaml_map.dart
+++ b/utils/pub/yaml/yaml_map.dart
@@ -29,13 +29,13 @@
void clear() => _map.clear();
void forEach(void f(key, value)) =>
_map.forEach((k, v) => f(_unwrapKey(k), v));
- Collection getKeys() => _map.getKeys().map(_unwrapKey);
- Collection getValues() => _map.getValues();
+ Collection get keys => _map.keys.map(_unwrapKey);
+ Collection get values => _map.values;
int get length => _map.length;
- bool isEmpty() => _map.isEmpty();
+ bool get isEmpty => _map.isEmpty;
String toString() => _map.toString();
- int hashCode() => _hashCode(_map);
+ int get hashCode => _hashCode(_map);
bool operator ==(other) {
if (other is! YamlMap) return false;
@@ -67,7 +67,7 @@
_WrappedHashKey(this.value);
- int hashCode() => _hashCode(value);
+ int get hashCode => _hashCode(value);
String toString() => value.toString();
@@ -95,8 +95,8 @@
if (obj == true) return 1;
if (obj == false) return 2;
if (obj is Map) {
- return _hashCode(obj.getKeys(), parents) ^
- _hashCode(obj.getValues(), parents);
+ return _hashCode(obj.keys, parents) ^
+ _hashCode(obj.values, parents);
}
if (obj is List) {
// This is probably a really bad hash function, but presumably we'll get this
@@ -107,7 +107,7 @@
}
return hash;
}
- return obj.hashCode();
+ return obj.hashCode;
} finally {
parents.removeLast();
}
diff --git a/utils/template/codegen.dart b/utils/template/codegen.dart
index 535cbda..a622fba 100644
--- a/utils/template/codegen.dart
+++ b/utils/template/codegen.dart
@@ -26,7 +26,7 @@
assert(_blockType >= CGBlock.CONSTRUCTOR && _blockType <= CGBlock.WITH);
}
- bool get anyStatements => !_stmts.isEmpty();
+ bool get anyStatements => !_stmts.isEmpty;
bool get isConstructor => _blockType == CGBlock.CONSTRUCTOR;
bool get isEach => _blockType == CGBlock.EACH;
bool get isWith => _blockType == CGBlock.WITH;
@@ -54,12 +54,12 @@
}
void add(String value) {
- if (_stmts.last() != null) {
- _stmts.last().add(value);
+ if (_stmts.last != null) {
+ _stmts.last.add(value);
}
}
- CGStatement get last => _stmts.length > 0 ? _stmts.last() : null;
+ CGStatement get last => _stmts.length > 0 ? _stmts.last : null;
/**
* Returns mixed list of elements marked with the var attribute. If the
@@ -522,7 +522,7 @@
_globalInits = new StringBuffer();
bool get isLastBlockConstructor {
- CGBlock block = _cgBlocks.last();
+ CGBlock block = _cgBlocks.last;
return block.isConstructor;
}
@@ -649,10 +649,10 @@
}
}
- CGBlock get lastBlock => _cgBlocks.length > 0 ? _cgBlocks.last() : null;
+ CGBlock get lastBlock => _cgBlocks.length > 0 ? _cgBlocks.last : null;
void add(String str) {
- _cgBlocks.last().add(str);
+ _cgBlocks.last.add(str);
}
String get globalDeclarations {
@@ -669,7 +669,7 @@
String get codeBody {
closeStatement();
- return _cgBlocks.last().codeBody;
+ return _cgBlocks.last.codeBody;
}
/* scopeName for expression
@@ -751,25 +751,25 @@
int lastIdx = 0;
for (Match m in matches) {
- if (m.start() > lastIdx) {
- newExpr.add(expr.substring(lastIdx, m.start()));
+ if (m.start > lastIdx) {
+ newExpr.add(expr.substring(lastIdx, m.start));
}
bool identifier = true;
- if (m.start() > 0) {
- int charCode = expr.charCodeAt(m.start() - 1);
+ if (m.start > 0) {
+ int charCode = expr.charCodeAt(m.start - 1);
// Starts with ' or " then it's not an identifier.
identifier = charCode != 34 /* " */ && charCode != 39 /* ' */;
}
- String strMatch = expr.substring(m.start(), m.end());
+ String strMatch = expr.substring(m.start, m.end);
if (identifier) {
newExpr.add("${prefixPart}.${strMatch}");
} else {
// Quoted string don't touch.
newExpr.add("${strMatch}");
}
- lastIdx = m.end();
+ lastIdx = m.end;
}
if (expr.length > lastIdx) {
diff --git a/utils/template/htmltree.dart b/utils/template/htmltree.dart
index e243d1d..16db0a9 100644
--- a/utils/template/htmltree.dart
+++ b/utils/template/htmltree.dart
@@ -92,7 +92,7 @@
children.add(child);
}
- ASTNode last() => children.last();
+ ASTNode get last => children.last;
ASTNode removeLast() => children.removeLast();
bool get anyChildren => children != null && children.length > 0;
diff --git a/utils/template/parser.dart b/utils/template/parser.dart
index c5bc2aa..9d22b6b 100644
--- a/utils/template/parser.dart
+++ b/utils/template/parser.dart
@@ -17,7 +17,7 @@
}
top() {
- return _stack.last();
+ return _stack.last;
}
}
@@ -454,7 +454,7 @@
}
if (scopeType > 0) {
var elem = new TemplateElement.attributes(tagToken.kind,
- attrs.getValues(), varName, _makeSpan(start));
+ attrs.values, varName, _makeSpan(start));
stack.top().add(elem);
if (scopeType == 1) {
diff --git a/utils/template/tool.dart b/utils/template/tool.dart
index 439c263..e949962 100644
--- a/utils/template/tool.dart
+++ b/utils/template/tool.dart
@@ -18,7 +18,7 @@
watch.start();
callback();
watch.stop();
- return watch.elapsedInMs();
+ return watch.elapsedMilliseconds;
}
String GREEN_COLOR = '\u001b[32m';
diff --git a/utils/template/utils.dart b/utils/template/utils.dart
index 97aa3d2..dcd1942 100644
--- a/utils/template/utils.dart
+++ b/utils/template/utils.dart
@@ -27,10 +27,10 @@
final i = source.iterator();
var current = initialValue;
- if (current == null && i.hasNext()) {
+ if (current == null && i.hasNext) {
current = i.next();
}
- while (i.hasNext()) {
+ while (i.hasNext) {
current = callback(current, i.next());
}
return current;
@@ -40,10 +40,10 @@
List result = new List();
var x = left.iterator();
var y = right.iterator();
- while (x.hasNext() && y.hasNext()) {
+ while (x.hasNext && y.hasNext) {
result.add(mapper(x.next(), y.next()));
}
- if (x.hasNext() || y.hasNext()) {
+ if (x.hasNext || y.hasNext) {
throw new ArgumentError();
}
return result;
diff --git a/utils/template/world.dart b/utils/template/world.dart
index 92e1ab1..d11c008 100644
--- a/utils/template/world.dart
+++ b/utils/template/world.dart
@@ -158,7 +158,7 @@
sw.start();
var result = f();
sw.stop();
- info('$name in ${sw.elapsedInMs()}msec');
+ info('$name in ${sw.elapsedMilliseconds}msec');
return result;
}
}
diff --git a/utils/testrunner/standard_test_runner.dart b/utils/testrunner/standard_test_runner.dart
index d1935b1..981d95c 100644
--- a/utils/testrunner/standard_test_runner.dart
+++ b/utils/testrunner/standard_test_runner.dart
@@ -160,7 +160,7 @@
}
}
}
- for (var g in groups.getKeys()) {
+ for (var g in groups.keys) {
var msg = formatListMessage('$testfile ', '$g ');
print('###$msg');
}
diff --git a/utils/testrunner/utils.dart b/utils/testrunner/utils.dart
index 4d54a4d..e8f81d4 100644
--- a/utils/testrunner/utils.dart
+++ b/utils/testrunner/utils.dart
@@ -100,7 +100,7 @@
* support files into the generated scripts.
*/
-String get runnerDirectory() {
+String get runnerDirectory {
var libDirectory = makePathAbsolute(new Options().script);
return libDirectory.substring(0,
libDirectory.lastIndexOf(Platform.pathSeparator));
diff --git a/utils/tests/pub/pub.status b/utils/tests/pub/pub.status
index 2efea36..86562b7 100644
--- a/utils/tests/pub/pub.status
+++ b/utils/tests/pub/pub.status
@@ -10,12 +10,8 @@
[ $runtime == drt || $runtime == dartium || $runtime == opera]
*: Skip
-# Git on Windows is cripplingly slow and will make these tests time out (#5271).
+# Git on Windows is cripplingly slow (#5271).
+# Git tests do not work on Windows on buildbots (dartbug.com/6191).
[ $system == windows ]
install/git/*: Skip
update/git/*: Skip
-
-# Getting non-determinstic network errors with these on Windows (#5272).
-[ $system == windows ]
-install/hosted/*: Skip
-update/hosted/*: Skip
diff --git a/utils/tests/pub/pubspec_test.dart b/utils/tests/pub/pubspec_test.dart
index 474f2af..ed5522e 100644
--- a/utils/tests/pub/pubspec_test.dart
+++ b/utils/tests/pub/pubspec_test.dart
@@ -23,10 +23,10 @@
main() {
group('Pubspec', () {
group('parse()', () {
- test("allows a version constraint for dependencies", () {
- var sources = new SourceRegistry();
- sources.register(new MockSource());
+ var sources = new SourceRegistry();
+ sources.register(new MockSource());
+ test("allows a version constraint for dependencies", () {
var pubspec = new Pubspec.parse('''
dependencies:
foo:
@@ -42,11 +42,8 @@
});
test("throws if the description isn't valid", () {
- var sources = new SourceRegistry();
- sources.register(new MockSource());
-
expect(() {
- new Pubspec.parse('''
+ new Pubspec.parse('''
dependencies:
foo:
mock: bad
@@ -54,10 +51,49 @@
}, throwsFormatException);
});
- test("allows comment-only files", () {
- var sources = new SourceRegistry();
- sources.register(new MockSource());
+ test("throws if 'name' is not a string", () {
+ expect(() => new Pubspec.parse('name: [not, a, string]', sources),
+ throwsFormatException);
+ });
+ test("throws if 'homepage' is not a string", () {
+ expect(() => new Pubspec.parse('homepage: [not, a, string]', sources),
+ throwsFormatException);
+ });
+
+ test("throws if 'authors' is not a string or a list of strings", () {
+ new Pubspec.parse('authors: ok fine', sources);
+ new Pubspec.parse('authors: [also, ok, fine]', sources);
+
+ expect(() => new Pubspec.parse('authors: 123', sources),
+ throwsFormatException);
+
+ expect(() => new Pubspec.parse('authors: {not: {a: string}}', sources),
+ throwsFormatException);
+
+ expect(() => new Pubspec.parse('authors: [ok, {not: ok}]', sources),
+ throwsFormatException);
+ });
+
+ test("throws if 'author' is not a string", () {
+ new Pubspec.parse('author: ok fine', sources);
+
+ expect(() => new Pubspec.parse('author: 123', sources),
+ throwsFormatException);
+
+ expect(() => new Pubspec.parse('author: {not: {a: string}}', sources),
+ throwsFormatException);
+
+ expect(() => new Pubspec.parse('author: [not, ok]', sources),
+ throwsFormatException);
+ });
+
+ test("throws if both 'author' and 'authors' are present", () {
+ expect(() => new Pubspec.parse('{author: abe, authors: ted}', sources),
+ throwsFormatException);
+ });
+
+ test("allows comment-only files", () {
var pubspec = new Pubspec.parse('''
# No external dependencies yet
# Including for completeness
diff --git a/utils/tests/pub/test_pub.dart b/utils/tests/pub/test_pub.dart
index df6cb3e..8c8dd80 100644
--- a/utils/tests/pub/test_pub.dart
+++ b/utils/tests/pub/test_pub.dart
@@ -192,8 +192,8 @@
}
_servedPackageDir.contents.clear();
- for (var name in _servedPackages.getKeys()) {
- var versions = _servedPackages[name].getKeys();
+ for (var name in _servedPackages.keys) {
+ var versions = _servedPackages[name].keys;
_servedPackageDir.contents.addAll([
file('$name.json',
JSON.stringify({'versions': versions})),
@@ -380,7 +380,7 @@
return _awaitObject(dependencies).transform((resolvedDependencies) {
var result = <String, Map>{};
for (var dependency in resolvedDependencies) {
- var keys = dependency.getKeys().filter((key) => key != "version");
+ var keys = dependency.keys.filter((key) => key != "version");
var sourceName = only(keys);
var source;
switch (sourceName) {
@@ -607,7 +607,7 @@
var iterator = scheduled.iterator();
Future runNextEvent(_) {
- if (_abortScheduled || !iterator.hasNext()) {
+ if (_abortScheduled || !iterator.hasNext) {
_abortScheduled = false;
scheduled.clear();
return new Future.immediate(null);
@@ -872,13 +872,13 @@
* Loads the contents of the file.
*/
InputStream load(List<String> path) {
- if (!path.isEmpty()) {
+ if (!path.isEmpty) {
var joinedPath = Strings.join(path, '/');
throw "Can't load $joinedPath from within $name: not a directory.";
}
var stream = new ListInputStream();
- stream.write(contents.charCodes());
+ stream.write(contents.charCodes);
stream.markEndOfStream();
return stream;
}
@@ -943,7 +943,7 @@
* Loads [path] from within this directory.
*/
InputStream load(List<String> path) {
- if (path.isEmpty()) {
+ if (path.isEmpty) {
throw "Can't load the contents of $name: is a directory.";
}
@@ -992,28 +992,21 @@
* Creates the Git repository and commits the contents.
*/
Future<Directory> create(parentDir) {
- var workingDir;
- Future runGit(List<String> args) => _runGit(args, workingDir);
-
- return super.create(parentDir).chain((rootDir) {
- workingDir = rootDir;
- return runGit(['init']);
- }).chain((_) => runGit(['add', '.']))
- .chain((_) => runGit(['commit', '-m', 'initial commit']))
- .transform((_) => workingDir);
+ return _runGitCommands(parentDir, [
+ ['init'],
+ ['add', '.'],
+ ['commit', '-m', 'initial commit']
+ ]);
}
/**
* Commits any changes to the Git repository.
*/
Future commit(parentDir) {
- var workingDir;
- Future runGit(List<String> args) => _runGit(args, workingDir);
-
- return super.create(parentDir).chain((rootDir) {
- workingDir = rootDir;
- return runGit(['add', '.']);
- }).chain((_) => runGit(['commit', '-m', 'update']));
+ return _runGitCommands(parentDir, [
+ ['add', '.'],
+ ['commit', '-m', 'update']
+ ]);
}
/**
@@ -1027,10 +1020,8 @@
*/
Future<String> revParse(String ref) {
var completer = new Completer<String>();
- // TODO(nweiz): inline this once issue 3197 is fixed
- var superCreate = super.create;
_schedule((parentDir) {
- return superCreate(parentDir).chain((rootDir) {
+ return super.create(parentDir).chain((rootDir) {
return _runGit(['rev-parse', ref], rootDir);
}).transform((output) {
completer.complete(output[0]);
@@ -1048,9 +1039,32 @@
});
}
+ Future _runGitCommands(parentDir, List<List<String>> commands) {
+ var workingDir;
+
+ Future runGitStep(_) {
+ if (commands.isEmpty) return new Future.immediate(workingDir);
+ var command = commands.removeAt(0);
+ return _runGit(command, workingDir).chain(runGitStep);
+ }
+
+ return super.create(parentDir).chain((rootDir) {
+ workingDir = rootDir;
+ return writeTextFile(join(parentDir, '.gitconfig'), '''
+[user]
+ name = Test Pub
+ email = pub@dartlang.org
+''');
+ }).chain(runGitStep);
+ }
+
Future<String> _runGit(List<String> args, Directory workingDir) {
return runGit(args, workingDir: workingDir.path).transform((result) {
- if (!result.success) throw "Error running git: ${result.stderr}";
+ if (!result.success) {
+ throw "Error running: git ${Strings.join(args, ' ')}\n"
+ "${Strings.join(result.stderr, '\n')}";
+ }
+
return result.stdout;
});
}
@@ -1116,14 +1130,14 @@
}
Future delete(dir) {
- throw new UnsupportedOperationException('');
+ throw new UnsupportedError('');
}
/**
* Loads the contents of this tar file.
*/
InputStream load(List<String> path) {
- if (!path.isEmpty()) {
+ if (!path.isEmpty) {
var joinedPath = Strings.join(path, '/');
throw "Can't load $joinedPath from within $name: not a directory.";
}
@@ -1158,7 +1172,7 @@
}
InputStream load(List<String> path) {
- if (path.isEmpty()) {
+ if (path.isEmpty) {
throw "Can't load the contents of $name: it doesn't exist.";
} else {
throw "Can't load ${Strings.join(path, '/')} from within $name: $name "
diff --git a/utils/tests/pub/version_solver_test.dart b/utils/tests/pub/version_solver_test.dart
index dfbeda8..e077b6b 100644
--- a/utils/tests/pub/version_solver_test.dart
+++ b/utils/tests/pub/version_solver_test.dart
@@ -404,7 +404,7 @@
var expectedId = result.remove(actualId.name);
if (actualId != expectedId) return false;
}
- return result.isEmpty();
+ return result.isEmpty;
}, description: 'packages to match $result')));
} else if (error == noVersion) {
expect(future, throwsA(new isInstanceOf<NoVersionException>()));
@@ -449,7 +449,7 @@
: _packages = <String, Map<Version, Package>>{};
Future<List<Version>> getVersions(String name, String description) {
- return fakeAsync(() => _packages[description].getKeys());
+ return fakeAsync(() => _packages[description].keys);
}
Future<Pubspec> describe(PackageId id) {
diff --git a/utils/tests/pub/yaml_test.dart b/utils/tests/pub/yaml_test.dart
index ab2c002..cb4e1be 100644
--- a/utils/tests/pub/yaml_test.dart
+++ b/utils/tests/pub/yaml_test.dart
@@ -1086,8 +1086,8 @@
// ? &anchor [a, b, c]
// : ? *anchor
// : bar""");
- // anchorList = doc.getKeys()[0];
- // aliasList = doc[['a', 'b', 'c']].getKeys()[0];
+ // anchorList = doc.keys[0];
+ // aliasList = doc[['a', 'b', 'c']].keys[0];
// Expect.isTrue(anchorList === aliasList);
// anchorList.add('d');
// Expect.listEquals(['a', 'b', 'c', 'd'], aliasList);
diff --git a/utils/tests/string_encoding/benchmark_runner.dart b/utils/tests/string_encoding/benchmark_runner.dart
index 02b4b5b..225a1dc 100644
--- a/utils/tests/string_encoding/benchmark_runner.dart
+++ b/utils/tests/string_encoding/benchmark_runner.dart
@@ -89,7 +89,7 @@
*/
class TestReport {
TestReport(this.id, this.desc, this.warmup, this.results) {
- spaceChar = " ".charCodes()[0];
+ spaceChar = " ".charCodes[0];
}
int spaceChar;
@@ -169,7 +169,7 @@
String _leftAlign(String s, int width) {
List<int> outCodes = [];
outCodes.insertRange(0, width, spaceChar);
- outCodes.setRange(0, Math.min(width, s.length), s.charCodes());
+ outCodes.setRange(0, Math.min(width, s.length), s.charCodes);
return new String.fromCharCodes(outCodes);
}
@@ -177,12 +177,12 @@
List<int> outCodes = [];
outCodes.insertRange(0, width, spaceChar);
outCodes.setRange(Math.max(0, width - s.length), Math.min(width, s.length),
- s.charCodes());
+ s.charCodes);
return new String.fromCharCodes(outCodes);
}
static String _stringifyDoubleAsInt(double val) {
- if (val.isInfinite() || val.isNaN()) {
+ if (val.isInfinite || val.isNaN) {
return "NaN";
} else {
return val.toInt().toString();
@@ -273,7 +273,7 @@
test();
}
s.stop();
- return new BlockSample(count, s.elapsedInUs() * 1000);
+ return new BlockSample(count, s.elapsedMicroseconds * 1000);
}
}
diff --git a/utils/tests/string_encoding/utf16_test.dart b/utils/tests/string_encoding/utf16_test.dart
index cb1bb49..70d1983 100755
--- a/utils/tests/string_encoding/utf16_test.dart
+++ b/utils/tests/string_encoding/utf16_test.dart
@@ -113,12 +113,12 @@
void testIterableMethods() {
// empty input
- Expect.isFalse(decodeUtf16AsIterable([]).iterator().hasNext());
+ Expect.isFalse(decodeUtf16AsIterable([]).iterator().hasNext);
IterableUtf16Decoder koreanDecoder =
decodeUtf16AsIterable(testKoreanCharSubsetUtf16beBom);
// get the first character
- Expect.equals(testKoreanCharSubset.charCodes()[0],
+ Expect.equals(testKoreanCharSubset.charCodes[0],
koreanDecoder.iterator().next());
// get the whole translation using the Iterable interface
Expect.stringEquals(testKoreanCharSubset,
diff --git a/utils/tests/string_encoding/utf32_test.dart b/utils/tests/string_encoding/utf32_test.dart
index 33a72dd..cacf23a 100755
--- a/utils/tests/string_encoding/utf32_test.dart
+++ b/utils/tests/string_encoding/utf32_test.dart
@@ -165,12 +165,12 @@
void testIterableMethods() {
// empty input
- Expect.isFalse(decodeUtf32AsIterable([]).iterator().hasNext());
+ Expect.isFalse(decodeUtf32AsIterable([]).iterator().hasNext);
IterableUtf32Decoder koreanDecoder =
decodeUtf32AsIterable(testKoreanCharSubsetUtf32beBom);
// get the first character
- Expect.equals(testKoreanCharSubset.charCodes()[0],
+ Expect.equals(testKoreanCharSubset.charCodes[0],
koreanDecoder.iterator().next());
// get the whole translation using the Iterable interface
Expect.stringEquals(testKoreanCharSubset,
diff --git a/utils/tests/string_encoding/utf8_test.dart b/utils/tests/string_encoding/utf8_test.dart
index a5ce7e8..d1869f6 100755
--- a/utils/tests/string_encoding/utf8_test.dart
+++ b/utils/tests/string_encoding/utf8_test.dart
@@ -466,7 +466,7 @@
IterableUtf8Decoder kataDecoder = decodeUtf8AsIterable(testKatakanaUtf8);
// get the first character
- Expect.equals(testKatakanaPhrase.charCodes()[0],
+ Expect.equals(testKatakanaPhrase.charCodes[0],
kataDecoder.iterator().next());
// get the whole translation using the Iterable interface
Expect.stringEquals(testKatakanaPhrase,
diff --git a/utils/tests/template/real_app.dart b/utils/tests/template/real_app.dart
index 3077462..c4323bd 100644
--- a/utils/tests/template/real_app.dart
+++ b/utils/tests/template/real_app.dart
@@ -92,7 +92,7 @@
elem.on.click.add((MouseEvent e) {
var expandCollapseElem = e.toElement;
- DivElement salesDiv = expandCollapseElem.parent.elements.last();
+ DivElement salesDiv = expandCollapseElem.parent.elements.last;
bool showSales = (salesDiv.classes.contains(DivisionSales.showSales));