Version 1.9.0-dev.10.10

svn merge -c 44291 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
svn merge -c 44435 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
svn merge -c 44437 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
svn merge -c 44451 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
svn merge -c 44455 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
svn merge -c 44457 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
svn merge -c 44508 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
svn merge -c 44538 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
svn merge -c 44540 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
svn merge -c 44542 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
svn merge -c 44544 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
svn merge -c 44546 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
svn merge -c 44547 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
svn merge -c 44548 https://dart.googlecode.com/svn/branches/bleeding_edge trunk

git-svn-id: http://dart.googlecode.com/svn/trunk@44550 260f80e4-7a28-3924-810f-c04153c831b5
diff --git a/pkg/analysis_server/lib/src/services/correction/fix_internal.dart b/pkg/analysis_server/lib/src/services/correction/fix_internal.dart
index d7939f2..17944cd 100644
--- a/pkg/analysis_server/lib/src/services/correction/fix_internal.dart
+++ b/pkg/analysis_server/lib/src/services/correction/fix_internal.dart
@@ -638,8 +638,13 @@
       staticModifier = _inStaticContext();
     }
     utils.targetClassElement = targetClassElement;
+    // prepare target ClassDeclaration
+    AstNode targetTypeNode = targetClassElement.node;
+    if (targetTypeNode is! ClassDeclaration) {
+      return;
+    }
+    ClassDeclaration targetClassNode = targetTypeNode;
     // prepare location
-    ClassDeclaration targetClassNode = targetClassElement.node;
     _FieldLocation targetLocation = _prepareNewFieldLocation(targetClassNode);
     // build method source
     String targetFile = targetClassElement.source.fullName;
@@ -763,8 +768,13 @@
       staticModifier = _inStaticContext();
     }
     utils.targetClassElement = targetClassElement;
+    // prepare target ClassDeclaration
+    AstNode targetTypeNode = targetClassElement.node;
+    if (targetTypeNode is! ClassDeclaration) {
+      return;
+    }
+    ClassDeclaration targetClassNode = targetTypeNode;
     // prepare location
-    ClassDeclaration targetClassNode = targetClassElement.node;
     _FieldLocation targetLocation = _prepareNewGetterLocation(targetClassNode);
     // build method source
     String targetFile = targetClassElement.source.fullName;
diff --git a/pkg/analysis_server/lib/src/socket_server.dart b/pkg/analysis_server/lib/src/socket_server.dart
index c748c6f..efeb876 100644
--- a/pkg/analysis_server/lib/src/socket_server.dart
+++ b/pkg/analysis_server/lib/src/socket_server.dart
@@ -10,9 +10,9 @@
 import 'package:analysis_server/src/protocol.dart';
 import 'package:analysis_server/src/services/index/index.dart';
 import 'package:analysis_server/src/services/index/local_file_index.dart';
-import 'package:analysis_server/src/source/caching_pub_package_map_provider.dart';
 import 'package:analyzer/file_system/physical_file_system.dart';
 import 'package:analyzer/instrumentation/instrumentation.dart';
+import 'package:analyzer/source/pub_package_map_provider.dart';
 import 'package:analyzer/src/generated/sdk_io.dart';
 
 /**
@@ -69,7 +69,7 @@
     }
 
     analysisServer = new AnalysisServer(serverChannel, resourceProvider,
-        new CachingPubPackageMapProvider(resourceProvider, defaultSdk), index,
+        new PubPackageMapProvider(resourceProvider, defaultSdk), index,
         analysisServerOptions, defaultSdk, instrumentationService,
         rethrowExceptions: false);
     _initializeHandlers(analysisServer);
diff --git a/pkg/analysis_server/test/services/correction/fix_test.dart b/pkg/analysis_server/test/services/correction/fix_test.dart
index e627842..339645b 100644
--- a/pkg/analysis_server/test/services/correction/fix_test.dart
+++ b/pkg/analysis_server/test/services/correction/fix_test.dart
@@ -521,6 +521,18 @@
     assertNoFix(FixKind.CREATE_CONSTRUCTOR_SUPER);
   }
 
+  void test_createField_BAD_inEnum() {
+    resolveTestUnit('''
+enum MyEnum {
+  AAA, BBB
+}
+main() {
+  MyEnum.foo;
+}
+''');
+    assertNoFix(FixKind.CREATE_FIELD);
+  }
+
   void test_createField_BAD_inSDK() {
     resolveTestUnit('''
 main(List p) {
diff --git a/runtime/vm/ast_transformer.cc b/runtime/vm/ast_transformer.cc
index dacabbf..8284a64 100644
--- a/runtime/vm/ast_transformer.cc
+++ b/runtime/vm/ast_transformer.cc
@@ -601,12 +601,13 @@
 
 
 void AwaitTransformer::VisitLetNode(LetNode* node) {
-  // Add all the initializer nodes and their temporary variables
-  // to the preamble. The temporary variables will be captured
-  // as a side effect of being added to a scope, and the subsequent
-  // nodes that are added to the preample can access them.
+  // Add all the initializer nodes to the preamble and the
+  // temporary variables to the scope for async temporary variables.
+  // The temporary variables will be captured as a side effect of being
+  // added to a scope, and the subsequent nodes that are added to the
+  // preample can access them.
   for (intptr_t i = 0; i < node->num_temps(); i++) {
-    preamble_->scope()->AddVariable(node->TempAt(i));
+    function_top_->AddVariable(node->TempAt(i));
     AstNode* new_init_val = Transform(node->InitializerAt(i));
     preamble_->Add(new(Z) StoreLocalNode(node->token_pos(),
                    node->TempAt(i),
diff --git a/runtime/vm/parser.cc b/runtime/vm/parser.cc
index 05334bc..7103b61 100644
--- a/runtime/vm/parser.cc
+++ b/runtime/vm/parser.cc
@@ -1830,7 +1830,7 @@
 
 String& Parser::ParseNativeDeclaration() {
   TRACE_PARSER("ParseNativeDeclaration");
-  ASSERT(IsLiteral("native"));
+  ASSERT(IsSymbol(Symbols::Native()));
   ConsumeToken();
   CheckToken(Token::kSTRING, "string literal expected");
   String& native_name = *CurrentLiteral();
@@ -2980,7 +2980,7 @@
     ExpectToken(Token::kRBRACE);
   } else if (CurrentToken() == Token::kARROW) {
     ReportError("constructors may not return a value");
-  } else if (IsLiteral("native")) {
+  } else if (IsSymbol(Symbols::Native())) {
     ReportError("native constructors not supported");
   } else if (CurrentToken() == Token::kSEMICOLON) {
     // Some constructors have no function body.
@@ -3239,7 +3239,7 @@
     ASSERT(expr != NULL);
     current_block_->statements->Add(new ReturnNode(expr_pos, expr));
     end_token_pos = TokenPos();
-  } else if (IsLiteral("native")) {
+  } else if (IsSymbol(Symbols::Native())) {
     if (String::Handle(Z, func.name()).Equals(
         Symbols::EqualOperator())) {
       const Class& owner = Class::Handle(Z, func.Owner());
@@ -3654,7 +3654,7 @@
       method_end_pos = TokenPos();
       ExpectSemicolon();
     }
-  } else if (IsLiteral("native")) {
+  } else if (IsSymbol(Symbols::Native())) {
     if (method->has_abstract) {
       ReportError(method->name_pos,
                   "abstract method '%s' may not have a function body",
@@ -5288,7 +5288,7 @@
 
 
 RawFunction::AsyncModifier Parser::ParseFunctionModifier() {
-  if (CurrentLiteral()->raw() == Symbols::Async().raw()) {
+  if (IsSymbol(Symbols::Async())) {
     ConsumeToken();
     if (CurrentToken() == Token::kMUL) {
       const bool enableAsyncStar = true;
@@ -5300,7 +5300,7 @@
     } else {
       return RawFunction::kAsync;
     }
-  } else if ((CurrentLiteral()->raw() == Symbols::Sync().raw()) &&
+  } else if (IsSymbol(Symbols::Sync()) &&
       (LookaheadToken(1) == Token::kMUL)) {
     const bool enableSyncStar = true;
     if (!enableSyncStar) {
@@ -5390,7 +5390,7 @@
     SkipExpr();
     function_end_pos = TokenPos();
     ExpectSemicolon();
-  } else if (IsLiteral("native")) {
+  } else if (IsSymbol(Symbols::Native())) {
     ParseNativeDeclaration();
     function_end_pos = TokenPos();
     ExpectSemicolon();
@@ -5540,7 +5540,7 @@
     SkipExpr();
     accessor_end_pos = TokenPos();
     ExpectSemicolon();
-  } else if (IsLiteral("native")) {
+  } else if (IsSymbol(Symbols::Native())) {
     ParseNativeDeclaration();
     accessor_end_pos = TokenPos();
     ExpectSemicolon();
@@ -5666,7 +5666,7 @@
     ReportError("library url expected");
   }
   bool is_deferred_import = false;
-  if (is_import && (IsLiteral("deferred"))) {
+  if (is_import && (IsSymbol(Symbols::Deferred()))) {
     is_deferred_import = true;
     ConsumeToken();
     CheckToken(Token::kAS, "'as' expected");
@@ -5681,7 +5681,9 @@
 
   Array& show_names = Array::Handle(Z);
   Array& hide_names = Array::Handle(Z);
-  if (is_deferred_import || IsLiteral("show") || IsLiteral("hide")) {
+  if (is_deferred_import ||
+      IsSymbol(Symbols::Show()) ||
+      IsSymbol(Symbols::Hide())) {
     GrowableObjectArray& show_list =
         GrowableObjectArray::Handle(Z, GrowableObjectArray::New());
     GrowableObjectArray& hide_list =
@@ -5692,10 +5694,10 @@
       hide_list.Add(Symbols::LoadLibrary());
     }
     for (;;) {
-      if (IsLiteral("show")) {
+      if (IsSymbol(Symbols::Show())) {
         ConsumeToken();
         ParseIdentList(&show_list);
-      } else if (IsLiteral("hide")) {
+      } else if (IsSymbol(Symbols::Hide())) {
         ConsumeToken();
         ParseIdentList(&hide_list);
       } else {
@@ -5846,7 +5848,7 @@
   SkipMetadata();
   CheckToken(Token::kPART, "'part of' expected");
   ConsumeToken();
-  if (!IsLiteral("of")) {
+  if (!IsSymbol(Symbols::Of())) {
     ReportError("'part of' expected");
   }
   ConsumeToken();
@@ -5898,7 +5900,7 @@
     } else if ((CurrentToken() == Token::kABSTRACT) &&
         (LookaheadToken(1) == Token::kCLASS)) {
       ParseClassDeclaration(pending_classes, toplevel_class, metadata_pos);
-    } else if (is_patch_source() && IsLiteral("patch") &&
+    } else if (is_patch_source() && IsSymbol(Symbols::Patch()) &&
                (LookaheadToken(1) == Token::kCLASS)) {
       ParseClassDeclaration(pending_classes, toplevel_class, metadata_pos);
     } else {
@@ -7543,6 +7545,12 @@
 }
 
 
+bool Parser::IsSymbol(const String& symbol) {
+  return (CurrentLiteral()->raw() == symbol.raw()) &&
+      (CurrentToken() == Token::kIDENT);
+}
+
+
 // Returns true if the next tokens can be parsed as a an optionally
 // qualified identifier: [ident '.'] ident.
 // Current token position is not restored.
@@ -7686,10 +7694,10 @@
     SkipToMatchingParenthesis();
     if ((CurrentToken() == Token::kLBRACE) ||
         (CurrentToken() == Token::kARROW) ||
-        (is_top_level_ && IsLiteral("native")) ||
+        (is_top_level_ && IsSymbol(Symbols::Native())) ||
         is_external ||
-        (CurrentLiteral()->raw() == Symbols::Async().raw()) ||
-        (CurrentLiteral()->raw() == Symbols::Sync().raw())) {
+        IsSymbol(Symbols::Async()) ||
+        IsSymbol(Symbols::Sync())) {
       SetPosition(saved_pos);
       return true;
     }
@@ -7701,9 +7709,7 @@
 
 bool Parser::IsTopLevelAccessor() {
   const intptr_t saved_pos = TokenPos();
-  if (is_patch_source() &&
-      (CurrentToken() == Token::kIDENT) &&
-      (CurrentLiteral()->Equals("patch"))) {
+  if (is_patch_source() && IsSymbol(Symbols::Patch())) {
     ConsumeToken();
   } else if (CurrentToken() == Token::kEXTERNAL) {
     ConsumeToken();
@@ -8826,14 +8832,14 @@
   bool generic_catch_seen = false;
   GrowableArray<AstNode*> type_tests;
   GrowableArray<SequenceNode*> catch_blocks;
-  while ((CurrentToken() == Token::kCATCH) || IsLiteral("on")) {
+  while ((CurrentToken() == Token::kCATCH) || IsSymbol(Symbols::On())) {
     // Open a block that contains the if or an unconditional body.  It's
     // closed in the loop that builds the if-then-else nest.
     OpenBlock();
     const intptr_t catch_pos = TokenPos();
     CatchParamDesc exception_param;
     CatchParamDesc stack_trace_param;
-    if (IsLiteral("on")) {
+    if (IsSymbol(Symbols::On())) {
       ConsumeToken();
       exception_param.type = &AbstractType::ZoneHandle(Z,
           ParseType(ClassFinalizer::kCanonicalize));
@@ -9156,7 +9162,7 @@
   ExpectToken(Token::kRBRACE);
   SequenceNode* try_block = CloseBlock();
 
-  if ((CurrentToken() != Token::kCATCH) && !IsLiteral("on") &&
+  if ((CurrentToken() != Token::kCATCH) && !IsSymbol(Symbols::On()) &&
       (CurrentToken() != Token::kFINALLY)) {
     ReportError("catch or finally clause expected");
   }
@@ -9698,20 +9704,13 @@
 }
 
 
-bool Parser::IsLiteral(const char* literal) {
-  return IsIdentifier() && CurrentLiteral()->Equals(literal);
-}
-
-
 bool Parser::IsAwaitKeyword() {
-  return await_is_keyword_ &&
-         (CurrentLiteral()->raw() == Symbols::Await().raw());
+  return await_is_keyword_ && IsSymbol(Symbols::Await());
 }
 
 
 bool Parser::IsYieldKeyword() {
-  return await_is_keyword_ &&
-         (CurrentLiteral()->raw() == Symbols::YieldKw().raw());
+  return await_is_keyword_ && IsSymbol(Symbols::YieldKw());
 }
 
 
diff --git a/runtime/vm/parser.h b/runtime/vm/parser.h
index 0e3d694..49eef83 100644
--- a/runtime/vm/parser.h
+++ b/runtime/vm/parser.h
@@ -321,7 +321,6 @@
   void UnexpectedToken();
   String* ExpectUserDefinedTypeIdentifier(const char* msg);
   String* ExpectIdentifier(const char* msg);
-  bool IsLiteral(const char* literal);
   bool IsAwaitKeyword();
   bool IsYieldKeyword();
 
@@ -651,6 +650,7 @@
                                      SourceLabel* label);
   void ParseStatementSequence();
   bool IsIdentifier();
+  bool IsSymbol(const String& symbol);
   bool IsSimpleLiteral(const AbstractType& type, Instance* value);
   bool IsFunctionTypeAliasName();
   bool IsMixinAppAlias();
diff --git a/runtime/vm/symbols.h b/runtime/vm/symbols.h
index 14384bf..a55bcfb 100644
--- a/runtime/vm/symbols.h
+++ b/runtime/vm/symbols.h
@@ -95,6 +95,11 @@
   V(Library, "library")                                                        \
   V(LoadLibrary, "loadLibrary")                                                \
   V(_LibraryPrefix, "_LibraryPrefix")                                          \
+  V(On, "on")                                                                  \
+  V(Of, "of")                                                                  \
+  V(Deferred, "deferred")                                                      \
+  V(Show, "show")                                                              \
+  V(Hide, "hide")                                                              \
   V(Async, "async")                                                            \
   V(Sync, "sync")                                                              \
   V(YieldKw, "yield")                                                          \
@@ -132,6 +137,7 @@
   V(BoundedType, "_BoundedType")                                               \
   V(MixinAppType, "_MixinAppType")                                             \
   V(TypeArguments, "TypeArguments")                                            \
+  V(Patch, "patch")                                                            \
   V(PatchClass, "PatchClass")                                                  \
   V(Function, "Function")                                                      \
   V(FunctionImpl, "_FunctionImpl")                                             \
diff --git a/sdk/lib/collection/queue.dart b/sdk/lib/collection/queue.dart
index f515392..c2f4bd5 100644
--- a/sdk/lib/collection/queue.dart
+++ b/sdk/lib/collection/queue.dart
@@ -96,59 +96,129 @@
 }
 
 
+class _DoubleLink {
+  _DoubleLink _previousLink;
+  _DoubleLink _nextLink;
+
+  void _link(_DoubleLink previous,
+             _DoubleLink next) {
+    _nextLink = next;
+    _previousLink = previous;
+    if (previous != null) previous._nextLink = this;
+    if (next != null) next._previousLink = this;
+  }
+
+  void _unlink() {
+    if (_previousLink != null) _previousLink._nextLink = _nextLink;
+    if (_nextLink != null) _nextLink._previousLink = _previousLink;
+    _nextLink = null;
+    _previousLink = null;
+  }
+}
+
 /**
  * An entry in a doubly linked list. It contains a pointer to the next
  * entry, the previous entry, and the boxed element.
  */
-class DoubleLinkedQueueEntry<E> {
-  DoubleLinkedQueueEntry<E> _previous;
-  DoubleLinkedQueueEntry<E> _next;
-  E _element;
+class DoubleLinkedQueueEntry<E> extends _DoubleLink {
+  E element;
 
-  DoubleLinkedQueueEntry(E e) : _element = e;
-
-  void _link(DoubleLinkedQueueEntry<E> previous,
-             DoubleLinkedQueueEntry<E> next) {
-    _next = next;
-    _previous = previous;
-    previous._next = this;
-    next._previous = this;
-  }
+  DoubleLinkedQueueEntry(this.element);
 
   void append(E e) {
-    new DoubleLinkedQueueEntry<E>(e)._link(this, _next);
+    new DoubleLinkedQueueEntry<E>(e)._link(this, _nextLink);
   }
 
   void prepend(E e) {
-    new DoubleLinkedQueueEntry<E>(e)._link(_previous, this);
+    new DoubleLinkedQueueEntry<E>(e)._link(_previousLink, this);
   }
 
   E remove() {
-    _previous._next = _next;
-    _next._previous = _previous;
-    _next = null;
-    _previous = null;
-    return _element;
-  }
-
-  DoubleLinkedQueueEntry<E> _asNonSentinelEntry() {
-    return this;
+    _unlink();
+    return element;
   }
 
   DoubleLinkedQueueEntry<E> previousEntry() {
-    return _previous._asNonSentinelEntry();
+    return _previousLink;
   }
 
   DoubleLinkedQueueEntry<E> nextEntry() {
-    return _next._asNonSentinelEntry();
+    return _nextLink;
+  }
+}
+
+/**
+ * Interface for the link classes used by [DoubleLinkedQueue].
+ *
+ * Both the [_DoubleLinkedQueueElement] and [_DoubleLinkedQueueSentinel]
+ * implements this interface.
+ * The entry contains a link back to the queue, so calling `append`
+ * or `prepend` can correctly update the element count.
+ */
+abstract class _DoubleLinkedQueueEntry<E> extends _DoubleLink {
+  DoubleLinkedQueue<E> _queue;
+  _DoubleLinkedQueueEntry(this._queue);
+
+  _DoubleLinkedQueueElement _asNonSentinelEntry();
+
+  void _append(E e) {
+    new _DoubleLinkedQueueElement<E>(e, _queue)._link(this, _nextLink);
   }
 
-  E get element {
-    return _element;
+  void _prepend(E e) {
+    new _DoubleLinkedQueueElement<E>(e, _queue)._link(_previousLink, this);
   }
 
-  void set element(E e) {
-    _element = e;
+  E _remove();
+
+  E get element;
+
+  DoubleLinkedQueueEntry<E> nextEntry() {
+    _DoubleLinkedQueueEntry next = _nextLink;
+    return next._asNonSentinelEntry();
+  }
+
+  DoubleLinkedQueueEntry<E> previousEntry() {
+    _DoubleLinkedQueueEntry previous = _previousLink;
+    return previous._asNonSentinelEntry();
+  }
+}
+
+/**
+ * The actual entry type used by the [DoubleLinkedQueue].
+ *
+ * The entry contains a reference to the queue, allowing
+ * [append]/[prepend] to update the list length.
+ */
+class _DoubleLinkedQueueElement<E> extends _DoubleLinkedQueueEntry<E>
+                                   implements DoubleLinkedQueueEntry<E> {
+  E element;
+  _DoubleLinkedQueueElement(this.element, DoubleLinkedQueue<E> queue)
+      : super(queue);
+
+  void append(E e) {
+    _append(e);
+    if (_queue != null) _queue._elementCount++;
+  }
+
+  void prepend(E e) {
+    _prepend(e);
+    if (_queue != null) _queue._elementCount++;
+  }
+
+  E _remove() {
+    _queue = null;
+    _unlink();
+    return element;
+  }
+
+  E remove() {
+    if (_queue != null) _queue._elementCount--;
+    return _remove();
+  }
+
+  _DoubleLinkedQueueElement _asNonSentinelEntry() {
+    return this;
   }
 }
 
@@ -160,25 +230,22 @@
  * Initially, a sentinel has its next and previous entry point to itself.
  * A sentinel does not box any user element.
  */
-class _DoubleLinkedQueueEntrySentinel<E> extends DoubleLinkedQueueEntry<E> {
-  _DoubleLinkedQueueEntrySentinel() : super(null) {
-    _link(this, this);
+class _DoubleLinkedQueueSentinel<E> extends _DoubleLinkedQueueEntry<E> {
+  _DoubleLinkedQueueSentinel(DoubleLinkedQueue queue) : super(queue) {
+    _previousLink = this;
+    _nextLink = this;
   }
 
-  E remove() {
-    throw IterableElementError.noElement();
-  }
-
-  DoubleLinkedQueueEntry<E> _asNonSentinelEntry() {
+  _DoubleLinkedQueueElement _asNonSentinelEntry() {
     return null;
   }
 
-  void set element(E e) {
-    // This setter is unreachable.
-    // TODO(lrn): Don't inherit the field if we don't use it.
-    assert(false);
+  /** Hit by, e.g., [DoubleLinkedQueue.removeFirst] if the queue is empty. */
+  E _remove() {
+    throw IterableElementError.noElement();
   }
 
+  /** Hit by, e.g., [DoubleLinkedQueue.first] if the queue is empty. */
   E get element {
     throw IterableElementError.noElement();
   }
@@ -190,11 +257,11 @@
  * Allows constant time add, remove-at-ends and peek operations.
  */
 class DoubleLinkedQueue<E> extends IterableBase<E> implements Queue<E> {
-  _DoubleLinkedQueueEntrySentinel<E> _sentinel;
+  _DoubleLinkedQueueSentinel<E> _sentinel;
   int _elementCount = 0;
 
   DoubleLinkedQueue() {
-    _sentinel = new _DoubleLinkedQueueEntrySentinel<E>();
+    _sentinel = new _DoubleLinkedQueueSentinel<E>(this);
   }
 
   /**
@@ -204,7 +271,7 @@
    * [addLast] in the order provided by [elements.iterator].
    */
   factory DoubleLinkedQueue.from(Iterable elements) {
-    Queue<E> list = new DoubleLinkedQueue();
+    Queue<E> list = new DoubleLinkedQueue<E>();
     for (final E e in elements) {
       list.addLast(e);
     }
@@ -214,58 +281,60 @@
   int get length => _elementCount;
 
   void addLast(E value) {
-    _sentinel.prepend(value);
+    _sentinel._prepend(value);
     _elementCount++;
   }
 
   void addFirst(E value) {
-    _sentinel.append(value);
+    _sentinel._append(value);
     _elementCount++;
   }
 
   void add(E value) {
-    _sentinel.prepend(value);
+    _sentinel._prepend(value);
     _elementCount++;
   }
 
   void addAll(Iterable<E> iterable) {
     for (final E value in iterable) {
-      _sentinel.prepend(value);
+      _sentinel._prepend(value);
       _elementCount++;
     }
   }
 
   E removeLast() {
-    E result = _sentinel._previous.remove();
+    _DoubleLinkedQueueEntry lastEntry = _sentinel._previousLink;
+    E result = lastEntry._remove();
     _elementCount--;
     return result;
   }
 
   E removeFirst() {
-    E result = _sentinel._next.remove();
+    _DoubleLinkedQueueEntry firstEntry = _sentinel._nextLink;
+    E result = firstEntry._remove();
     _elementCount--;
     return result;
   }
 
   bool remove(Object o) {
-    DoubleLinkedQueueEntry<E> entry = _sentinel._next;
+    _DoubleLinkedQueueEntry<E> entry = _sentinel._nextLink;
     while (!identical(entry, _sentinel)) {
       if (entry.element == o) {
-        entry.remove();
+        entry._remove();
         _elementCount--;
         return true;
       }
-      entry = entry._next;
+      entry = entry._nextLink;
     }
     return false;
   }
 
   void _filter(bool test(E element), bool removeMatching) {
-    DoubleLinkedQueueEntry<E> entry = _sentinel._next;
+    _DoubleLinkedQueueEntry<E> entry = _sentinel._nextLink;
     while (!identical(entry, _sentinel)) {
-      DoubleLinkedQueueEntry<E> next = entry._next;
+      _DoubleLinkedQueueEntry<E> next = entry._nextLink;
       if (identical(removeMatching, test(entry.element))) {
-        entry.remove();
+        entry._remove();
         _elementCount--;
       }
       entry = next;
@@ -281,17 +350,21 @@
   }
 
   E get first {
-    return _sentinel._next.element;
+    _DoubleLinkedQueueEntry firstEntry = _sentinel._nextLink;
+    return firstEntry.element;
   }
 
   E get last {
-    return _sentinel._previous.element;
+    _DoubleLinkedQueueEntry lastEntry = _sentinel._previousLink;
+    return lastEntry.element;
   }
 
   E get single {
-    // Note that this throws correctly if the queue is empty.
-    if (identical(_sentinel._next, _sentinel._previous)) {
-      return _sentinel._next.element;
+    // Note that this throws correctly if the queue is empty
+    // because reading element on the sentinel throws.
+    if (identical(_sentinel._nextLink, _sentinel._previousLink)) {
+      _DoubleLinkedQueueEntry entry = _sentinel._nextLink;
+      return entry.element;
     }
     throw IterableElementError.tooMany();
   }
@@ -305,20 +378,21 @@
   }
 
   bool get isEmpty {
-    return (identical(_sentinel._next, _sentinel));
+    return (identical(_sentinel._nextLink, _sentinel));
   }
 
   void clear() {
-    _sentinel._next = _sentinel;
-    _sentinel._previous = _sentinel;
+    _sentinel._nextLink = _sentinel;
+    _sentinel._previousLink = _sentinel;
     _elementCount = 0;
   }
 
   void forEachEntry(void f(DoubleLinkedQueueEntry<E> element)) {
-    DoubleLinkedQueueEntry<E> entry = _sentinel._next;
+    _DoubleLinkedQueueEntry<E> entry = _sentinel._nextLink;
     while (!identical(entry, _sentinel)) {
-      DoubleLinkedQueueEntry<E> nextEntry = entry._next;
-      f(entry);
+      _DoubleLinkedQueueEntry<E> nextEntry = entry._nextLink;
+      _DoubleLinkedQueueElement element = entry;
+      f(element);
       entry = nextEntry;
     }
   }
@@ -331,23 +405,27 @@
 }
 
 class _DoubleLinkedQueueIterator<E> implements Iterator<E> {
-  _DoubleLinkedQueueEntrySentinel<E> _sentinel;
-  DoubleLinkedQueueEntry<E> _nextEntry = null;
+  _DoubleLinkedQueueSentinel<E> _sentinel;
+  _DoubleLinkedQueueEntry<E> _nextEntry = null;
   E _current;
 
-  _DoubleLinkedQueueIterator(_DoubleLinkedQueueEntrySentinel<E> sentinel)
-      : _sentinel = sentinel, _nextEntry = sentinel._next;
+  _DoubleLinkedQueueIterator(_DoubleLinkedQueueSentinel<E> sentinel)
+      : _sentinel = sentinel, _nextEntry = sentinel._nextLink;
 
   bool moveNext() {
-    // When [_currentEntry] it is set to [:null:] then it is at the end.
-    if (!identical(_nextEntry, _sentinel)) {
-      _current = _nextEntry._element;
-      _nextEntry = _nextEntry._next;
-      return true;
+    if (identical(_nextEntry, _sentinel)) {
+      _current = null;
+      _nextEntry = null;
+      _sentinel = null;
+      return false;
     }
-    _current = null;
-    _nextEntry = _sentinel = null;  // Still identical.
-    return false;
+    _DoubleLinkedQueueElement elementEntry = _nextEntry;
+    if (elementEntry._queue == null) {
+      throw new ConcurrentModificationError(_sentinel._queue);
+    }
+    _current = elementEntry.element;
+    _nextEntry = elementEntry._nextLink;
+    return true;
   }
 
   E get current => _current;
diff --git a/tests/co19/co19-dart2js.status b/tests/co19/co19-dart2js.status
index f9a2e67..f42f3d2 100644
--- a/tests/co19/co19-dart2js.status
+++ b/tests/co19/co19-dart2js.status
@@ -457,6 +457,7 @@
 LayoutTests/fast/canvas/2d.text.draw.fill.maxWidth.negative_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/canvas/2d.text.draw.fill.maxWidth.veryLarge_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/canvas/2d.text.draw.fill.maxWidth.verySmall_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/alpha_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/canvas/canvas-arc-negative-radius_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/canvas/canvas-as-image-incremental-repaint_t01: Skip # Times out. Please triage this failure
 LayoutTests/fast/canvas/canvas-blending-text_t01: RuntimeError # Please triage this failure
@@ -477,9 +478,10 @@
 LayoutTests/fast/canvas/draw-custom-focus-ring_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/canvas/getPutImageDataPairTest_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/canvas/setWidthResetAfterForcedRender_t01: Skip # Times out. Please triage this failure
+LayoutTests/fast/canvas/webgl/bad-arguments-test_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/canvas/webgl/context-attributes-alpha-depth-stencil-antialias-t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/context-lost_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/canvas/webgl/context-lost-restored_t01: Pass, Timeout # Please triage this failure
+LayoutTests/fast/canvas/webgl/context-lost_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/canvas/webgl/copy-tex-image-and-sub-image-2d_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/canvas/webgl/framebuffer-bindings-unaffected-on-resize_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/canvas/webgl/framebuffer-object-attachment_t01: RuntimeError # Please triage this failure
@@ -569,9 +571,10 @@
 LayoutTests/fast/css/collapsed-whitespace-reattach-in-style-recalc_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/css/content/content-none_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/css/content/content-normal_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/counters/complex-before_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/css/css-properties-case-insensitive_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/csstext-of-content-string_t01: Pass, RuntimeError # Please triage this failure
 LayoutTests/fast/css/css3-nth-tokens-style_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/csstext-of-content-string_t01: Pass, RuntimeError # Please triage this failure
 LayoutTests/fast/css/cursor-parsing-quirks_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/css/deprecated-flexbox-auto-min-size_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/css/ex-unit-with-no-x-height_t01: Pass, RuntimeError # Please triage this failure
@@ -747,6 +750,7 @@
 LayoutTests/fast/dynamic/crash-generated-text_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/dynamic/insertAdjacentElement_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/dynamic/recursive-layout_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/encoding/css-charset-dom_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/events/add-event-without-document_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/events/change-overflow-on-overflow-change_t01: Skip # Times out. Please triage this failure
 LayoutTests/fast/events/clipboard-clearData_t01: Skip # Times out. Please triage this failure
@@ -938,7 +942,6 @@
 LayoutTests/fast/text/international/thai-offsetForPosition-inside-character_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/text/ipa-tone-letters_t01: Pass, RuntimeError # Please triage this failure
 LayoutTests/fast/text/offsetForPosition-cluster-at-zero_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/text/regional-indicator-symobls_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/text/remove-zero-length-run_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/text/sub-pixel/text-scaling-ltr_t01: Pass, RuntimeError # Please triage this failure
 LayoutTests/fast/text/sub-pixel/text-scaling-pixel_t01: Pass, RuntimeError # Please triage this failure
@@ -1012,7 +1015,6 @@
 LibTest/html/Element/dataset_A02_t01: RuntimeError # Please triage this failure
 LibTest/html/Element/focus_A01_t01: Skip # Times out. Please triage this failure
 LibTest/html/Element/getAttributeNS_A01_t01: RuntimeError # Issue 16395
-LibTest/html/Element/getClientRects_A01_t02: RuntimeError # Issue 16575
 LibTest/html/Element/getNamespacedAttributes_A01_t01: RuntimeError # Issue 16395
 LibTest/html/Element/isContentEditable_A01_t01: RuntimeError # Please triage this failure
 LibTest/html/Element/isContentEditable_A02_t01: RuntimeError # Please triage this failure
@@ -1052,7 +1054,6 @@
 LibTest/html/IFrameElement/createFragment_A01_t03: RuntimeError # Please triage this failure
 LibTest/html/IFrameElement/createShadowRoot_A01_t01: RuntimeError # Please triage this failure
 LibTest/html/IFrameElement/focus_A01_t01: Skip # Times out. Please triage this failure
-LibTest/html/IFrameElement/getClientRects_A01_t02: RuntimeError # Please triage this failure
 LibTest/html/IFrameElement/getNamespacedAttributes_A01_t01: RuntimeError # Please triage this failure
 LibTest/html/IFrameElement/innerHtml_A01_t01: RuntimeError # Please triage this failure
 LibTest/html/IFrameElement/isContentEditable_A01_t01: RuntimeError # Please triage this failure
@@ -1097,14 +1098,6 @@
 WebPlatformTest/custom-elements/concepts/type_A03_t01: RuntimeError # Please triage this failure
 WebPlatformTest/custom-elements/concepts/type_A05_t01: RuntimeError # Please triage this failure
 WebPlatformTest/custom-elements/concepts/type_A06_t01: RuntimeError # Please triage this failure
-WebPlatformTest/custom-elements/instantiating/createElementNS_A02_t01: RuntimeError # Please triage this failure
-WebPlatformTest/custom-elements/instantiating/createElementNS_A03_t01: RuntimeError # Please triage this failure
-WebPlatformTest/custom-elements/instantiating/createElementNS_A04_t01: RuntimeError # Please triage this failure
-WebPlatformTest/custom-elements/instantiating/createElement_A02_t01: RuntimeError # Please triage this failure
-WebPlatformTest/custom-elements/instantiating/createElement_A03_t01: RuntimeError # Please triage this failure
-WebPlatformTest/custom-elements/instantiating/createElement_A04_t01: RuntimeError # Please triage this failure
-WebPlatformTest/custom-elements/instantiating/isAttribute_A01_t01: RuntimeError # Please triage this failure
-WebPlatformTest/custom-elements/instantiating/isAttribute_A01_t02: RuntimeError # Please triage this failure
 WebPlatformTest/dom/EventTarget/dispatchEvent_A02_t01: RuntimeError # Please triage this failure
 WebPlatformTest/dom/EventTarget/dispatchEvent_A03_t01: Skip # Times out. Please triage this failure
 WebPlatformTest/dom/events/type_A01_t01: RuntimeError # Please triage this failure
@@ -1177,7 +1170,6 @@
 WebPlatformTest/html/semantics/forms/the-input-element/time_t01: RuntimeError # Please triage this failure
 WebPlatformTest/html/semantics/forms/the-input-element/time_t02: RuntimeError # Please triage this failure
 WebPlatformTest/html/semantics/forms/the-input-element/type-change-state_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html/semantics/forms/the-input-element/url_t01: RuntimeError # Please triage this failure
 WebPlatformTest/html/semantics/forms/the-input-element/valueMode_t01: RuntimeError # Please triage this failure
 WebPlatformTest/html/semantics/forms/the-input-element/week_t01: RuntimeError # Please triage this failure
 WebPlatformTest/html/semantics/forms/the-meter-element/meter_t01: RuntimeError # Please triage this failure
@@ -1245,11 +1237,10 @@
 WebPlatformTest/shadow-dom/shadow-trees/upper-boundary-encapsulation/test-009_t01: RuntimeError # Please triage this failure
 WebPlatformTest/webstorage/event_constructor_t01: RuntimeError # Please triage this failure
 WebPlatformTest/webstorage/event_constructor_t02: RuntimeError # Please triage this failure
-WebPlatformTest/webstorage/event_local_key_t01: RuntimeError # Please triage this failure
-WebPlatformTest/webstorage/event_session_key_t01: RuntimeError # Please triage this failure
 WebPlatformTest/webstorage/storage_local_setitem_t01: RuntimeError # Please triage this failure
 WebPlatformTest/webstorage/storage_session_setitem_t01: RuntimeError # Please triage this failure
 
+
 [ $compiler == dart2js && $runtime == chrome && $checked ]
 LayoutTests/fast/css-intrinsic-dimensions/css-tables_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/css-intrinsic-dimensions/intrinsic-sized-absolutes_t01: RuntimeError # Please triage this failure
@@ -1322,10 +1313,11 @@
 WebPlatformTest/shadow-dom/shadow-trees/upper-boundary-encapsulation/ownerdocument-001_t01: RuntimeError # Please triage this failure
 
 [ $compiler == dart2js && $runtime == chrome && $system == macos ]
+LayoutTests/fast/canvas/webgl/canvas-test_t01: Skip # Times out. Please triage this failure
+LayoutTests/fast/css/vertical-align-length-copy-bug_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/flexbox/repaint-scrollbar_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/multicol/orphans-relayout_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/text/glyph-reordering_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/vertical-align-length-copy-bug_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/text/zero-width-characters_t01: RuntimeError # Please triage this failure
 
 
@@ -1333,7 +1325,6 @@
 LayoutTests/fast/canvas/webgl/WebGLContextEvent_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/canvas/webgl/array-bounds-clamping_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/canvas/webgl/attrib-location-length-limits_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/bad-arguments-test_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/canvas/webgl/buffer-bind-test_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/canvas/webgl/buffer-data-array-buffer_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/canvas/webgl/canvas-2d-webgl-texture_t01: RuntimeError # Please triage this failure
@@ -1410,6 +1401,7 @@
 LayoutTests/fast/shapes/shape-outside-floats/shape-outside-floats-inset-rounded-different-writing-modes-left_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/shapes/shape-outside-floats/shape-outside-rounded-boxes_t02: RuntimeError # Please triage this failure
 LayoutTests/fast/text/line-break-after-question-mark_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/text/regional-indicator-symobls_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/text/text-combine-shrink-to-fit_t01: RuntimeError # Please triage this failure
 
 [ $compiler == dart2js && $runtime == ff ]
diff --git a/tests/corelib/queue_test.dart b/tests/corelib/queue_test.dart
index cb4f2c7..e9a96b8 100644
--- a/tests/corelib/queue_test.dart
+++ b/tests/corelib/queue_test.dart
@@ -399,7 +399,7 @@
   }
 
   void testQueueElements() {
-    DoubleLinkedQueue<int> queue1 = new DoubleLinkedQueue<int>.from([1, 2, 4]);
+    DoubleLinkedQueue<int> queue1 = new DoubleLinkedQueue<int>.from([1, 2, 3]);
     DoubleLinkedQueue<int> queue2 = new DoubleLinkedQueue<int>();
     queue2.addAll(queue1);
 
@@ -412,11 +412,67 @@
       entry2 = entry2.nextEntry();
     }
     Expect.equals(null, entry2);
+
+    var firstEntry = queue1.firstEntry();
+    var secondEntry = queue1.firstEntry().nextEntry();
+    var thirdEntry = queue1.lastEntry();
+    firstEntry.prepend(4);
+    firstEntry.append(5);
+    secondEntry.prepend(6);
+    secondEntry.append(7);
+    thirdEntry.prepend(8);
+    thirdEntry.append(9);
+    Expect.equals(9, queue1.length);
+    Expect.listEquals(queue1.toList(), [4, 1, 5, 6, 2, 7, 8, 3, 9]);
+    Expect.equals(1, firstEntry.remove());
+    Expect.equals(2, secondEntry.remove());
+    Expect.equals(3, thirdEntry.remove());
+    Expect.equals(6, queue1.length);
+    Expect.listEquals(queue1.toList(), [4, 5, 6, 7, 8, 9]);
   }
 }
 
+void linkEntryTest() {
+  var entry = new DoubleLinkedQueueEntry(42);
+  Expect.equals(null, entry.previousEntry());
+  Expect.equals(null, entry.nextEntry());
+
+  entry.append(37);
+  entry.prepend(87);
+  var prev = entry.previousEntry();
+  var next = entry.nextEntry();
+  Expect.equals(42, entry.element);
+  Expect.equals(37, next.element);
+  Expect.equals(87, prev.element);
+  Expect.identical(entry, prev.nextEntry());
+  Expect.identical(entry, next.previousEntry());
+  Expect.equals(null, next.nextEntry());
+  Expect.equals(null, prev.previousEntry());
+
+  entry.element = 117;
+  Expect.equals(117, entry.element);
+  Expect.identical(next, entry.nextEntry());
+  Expect.identical(prev, entry.previousEntry());
+
+  Expect.equals(117, entry.remove());
+  Expect.identical(next, prev.nextEntry());
+  Expect.identical(prev, next.previousEntry());
+  Expect.equals(null, next.nextEntry());
+  Expect.equals(null, prev.previousEntry());
+  Expect.equals(37, next.element);
+  Expect.equals(87, prev.element);
+
+  Expect.equals(37, next.remove());
+  Expect.equals(87, prev.element);
+  Expect.equals(null, prev.nextEntry());
+  Expect.equals(null, prev.previousEntry());
+
+  Expect.equals(87, prev.remove());
+}
+
 
 main() {
   new DoubleLinkedQueueTest().testMain();
   new ListQueueTest().testMain();
+  linkEntryTest();
 }
diff --git a/tests/html/html.status b/tests/html/html.status
index 9c82cc1..7255772 100644
--- a/tests/html/html.status
+++ b/tests/html/html.status
@@ -131,9 +131,11 @@
 deferred_multi_app_htmltest: Skip # Times out on IE.  Issue 21537
 localstorage_test: Pass, RuntimeError # Issue 22166
 storage_test: Pass, RuntimeError # Issue 22166
+postmessage_structured_test/more_primitives: Fail # Does not support the MessageEvent constructor.
+
+[$runtime == ie10 || $runtime == ie11 || ($runtime == chrome && $system == macos)]
 transition_event_test/functional: Skip # Times out. Issue 22167
 request_animation_frame_test: Skip # Times out. Issue 22167
-postmessage_structured_test/more_primitives: Fail # Does not support the MessageEvent constructor.
 
 [$runtime == ie10 ]
 # IE10 Feature support statuses-
diff --git a/tests/language/await_postfix_expr_test.dart b/tests/language/await_postfix_expr_test.dart
index fbec643..faad975 100644
--- a/tests/language/await_postfix_expr_test.dart
+++ b/tests/language/await_postfix_expr_test.dart
@@ -31,12 +31,24 @@
   return s;
 }
 
+// Adapted from repro case for issue 22875.
+sum2(n) async {
+  int i, s = 0;
+  for (i = 1; i <= n; await i++) {
+    // The loop-local variable j was necessary for the crash in 22785.
+    var j = await i;
+    s += j;
+  }
+  return s;
+}
+
 test() async {
   Expect.equals(10, await post0(10));
   Expect.equals(21, await post1(10));
   Expect.equals(11, await pref0(10));
   Expect.equals(23, await pref1(10));
   Expect.equals(10, await sum([1, 2, 3, 4]));
+  Expect.equals(10, await sum2(4));
 }
 
 main() {
diff --git a/tests/language/language_dart2js.status b/tests/language/language_dart2js.status
index 5ccdf36..2d179b1 100644
--- a/tests/language/language_dart2js.status
+++ b/tests/language/language_dart2js.status
@@ -161,6 +161,8 @@
 [ $compiler == dart2js && $runtime == none ]
 *: Fail, Pass # TODO(ahe): Triage these tests.
 
+[ $compiler == dart2js && $runtime == chrome && $system == macos ]
+await_future_test: Pass, Timeout # Issue 22695.
 
 [ $compiler == dart2js && ($runtime == jsshell || $runtime == safari || $runtime == safarimobilesim)]
 round_test: Fail, OK # Common JavaScript engine Math.round bug.
@@ -175,18 +177,6 @@
 [ $compiler == dart2js && $runtime == chromeOnAndroid ]
 override_field_test/02: Pass, Slow # TODO(kasperl): Please triage.
 
-[ $runtime == opera ]
-null_access_error_test: Fail # Issue: 7413
-string_interpolate_null_test: Fail # Issue: 7413
-call_through_null_getter_test: Fail
-closure3_test: Fail
-execute_finally3_test: Fail
-method_invocation_test: Fail
-stack_overflow_test: Fail
-stack_overflow_stacktrace_test: Fail
-closure_call_wrong_argument_count_negative_test: Skip
-label_test: Skip
-
 [ $compiler == dart2dart && $builder_tag == new_backend ]
 async_await_syntax_test/a03a: CompileTimeError # Issue 21404
 async_await_syntax_test/a03b: CompileTimeError # Issue 21404
diff --git a/tests/lib/lib.status b/tests/lib/lib.status
index 3797f59..30cd46f 100644
--- a/tests/lib/lib.status
+++ b/tests/lib/lib.status
@@ -214,8 +214,14 @@
 convert/streamed_conversion_utf8_decode_test: Pass, Slow  # Issue 12029
 mirrors/mirrors_reader_test: Timeout, Slow, RuntimeError # Issue 16589
 
+[ $runtime == chrome && $system == macos ]
+async/timer_isActive_test: Pass, Timeout # Issue 22696
+async/slow_consumer_test: Pass, Timeout # Issue 22696
+async/catch_errors11_test: Pass, Timeout # Issue 22696
+
 [ $runtime == chrome || $runtime == ff || $runtime == ContentShellOnAndroid ]
 convert/streamed_conversion_utf8_encode_test: SkipSlow # Times out. Issue 22050
+convert/streamed_conversion_utf8_decode_test: SkipSlow # Times out. Issue 22050
 convert/streamed_conversion_json_utf8_encode_test: SkipSlow # Times out. Issue 22050
 convert/streamed_conversion_json_utf8_decode_test: SkipSlow # Times out. Issue 22050
 async/slow_consumer2_test: SkipSlow # Times out. Issue 22050
diff --git a/tools/VERSION b/tools/VERSION
index 26e0d2a..669823c 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -28,4 +28,4 @@
 MINOR 9
 PATCH 0
 PRERELEASE 10
-PRERELEASE_PATCH 9
+PRERELEASE_PATCH 10